aplpack/0000755000176200001440000000000013517522464011676 5ustar liggesusersaplpack/NAMESPACE0000644000176200001440000000056413516603655013123 0ustar liggesusersimport(tcltk,stats,graphics,grDevices) importFrom(utils, find) exportPattern("^slider.[a-z]+") export(bagplot,boxplot2D,compute.bagplot,faces,plot.bagplot, plotsummary,plothulls,bagplot.pairs,skyline.hist, hdepth,plot.faces,spin3R,stem.leaf,stem.leaf.backback, slider,gslider,iconplot,puticon,plot.faces) S3method(plot, bagplot) S3method(plot, faces) aplpack/man/0000755000176200001440000000000013516603657012454 5ustar liggesusersaplpack/man/stem.leaf.Rd0000644000176200001440000001014413516603654014616 0ustar liggesusers\name{stem.leaf} \alias{stem.leaf} \alias{stem.leaf.backback} \title{stem and leaf display and back to back stem and leaf display} \description{ Creates a classical ("Tukey-style") stem and leaf display / back-to-back stem and leaf display. } \usage{ stem.leaf(data, unit, m, Min, Max, rule.line = c("Dixon", "Velleman", "Sturges"), style = c("Tukey", "bare"), trim.outliers = TRUE, depths = TRUE, reverse.negative.leaves = TRUE, na.rm = FALSE, printresult = TRUE) stem.leaf.backback(x,y, unit, m, Min, Max, rule.line = c("Dixon", "Velleman", "Sturges"), style = c("Tukey", "bare"), trim.outliers = TRUE, depths = TRUE, reverse.negative.leaves = TRUE, na.rm = FALSE, printresult=TRUE, show.no.depths = FALSE, add.more.blanks = 0, back.to.back = TRUE) } \arguments{ \item{data}{a numeric vector of data} \item{x}{first dataset for \code{stem.leaf.backback}} \item{y}{first dataset for \code{stem.leaf.backback}} \item{unit}{leaf unit, as a power of 10 (e.g., \code{100}, \code{.01}); if \code{unit} is missing \code{unit} is choosen by \code{stem.leaf}.} \item{m}{number of parts (1, 2, or 5) into which each stem will be separated; if \code{m} is missing the number of parts/stem (\code{m}) is choosen by \code{stem.leaf}.} \item{Min}{smallest non-outlying value; omit for automatic choice.} \item{Max}{largest non-outlying value; omit for automatic choice.} \item{rule.line}{the rule to use for choosing the desired number of lines in the display; \code{"Dixon"} = 10*log10(n); \code{"Velleman"} = 2*sqrt(n); \code{"Sturges"} = 1 + log2(n); the default is \code{"Dixon"}.} \item{style}{\code{"Tukey"} (the default) for "Tukey-style" divided stems; \code{"bare"} for divided stems that simply repeat the stem digits.} \item{trim.outliers}{if \code{TRUE} (the default), outliers are placed on \code{LO} and \code{HI} stems.} \item{depths}{if \code{TRUE} (the default), print a column of "depths" to the left of the stems; the depth of the stem containing the median is the stem-count enclosed in parentheses.} \item{reverse.negative.leaves}{if \code{TRUE} (the default), reverse direction the leaves on negative stems (so, e.g., the leaf 9 comes before the leaf 8, etc.).} \item{na.rm}{ if TRUE "NA" values are removed otherwise the number of NAs are counted.} \item{printresult}{ if TRUE output of the stem and leaf display by \code{cat}.} \item{show.no.depths}{ if TRUE no depths are printed.} \item{add.more.blanks}{ number of blanks that are added besides the leaves.} \item{back.to.back}{ if FALSE two parallel stem and leaf displays are constructed.} } \details{ Unlike the \code{stem} function in the \code{base} package, \code{stem.leaf} produces classic stem-and-leaf displays, as described in Tukey's \emph{Exploratory Data Analysis}. The function \code{stem.leaf.backback} creates back-to-back stem and leaf displays. } \value{ The computed stem and leaf display is printed out. Invisibly \code{stem.leaf} returns the stem and leaf display as a list containing the elements \code{info} (legend), \code{display} (stem and leaf display as character vecter), \code{lower} (very small values), \code{upper} (very large values), \code{depths} (vector of depths), \code{stem} (stem information as a vector), and \code{leaves} (vector of leaves). } \references{ Tukey, J. \emph{Exploratory Data Analysis.} Addison-Wesley, 1977. } \author{Peter Wolf, the code has been slightly modified by John Fox \email{jfox@mcmaster.ca} with the original author's permission, help page written by John Fox, the help page has been slightly modified by Peter Wolf.} \seealso{\code{\link[graphics]{stem}}} \examples{ stem.leaf(co2) stem.leaf.backback(co2[1:120],co2[121:240]) stem.leaf.backback(co2[1:120],co2[121:240], back.to.back = FALSE) stem.leaf.backback(co2[1:120],co2[121:240], back.to.back = FALSE, add.more.blanks = 3, show.no.depths = TRUE) stem.leaf.backback(rivers[-(1:30)],rivers[1:30], back.to.back = FALSE, unit=10, m=5, Min=200, Max=900, add.more.blanks = 20, show.no.depths = TRUE) } \keyword{misc} aplpack/man/bagplot.Rd0000644000176200001440000001663313516603653014400 0ustar liggesusers\name{bagplot} \alias{bagplot} \alias{compute.bagplot} \alias{plot.bagplot} \title{ bagplot, a bivariate boxplot } \description{ \code{compute.bagplot()} computes an object describing a bagplot of a bivariate data set. \code{plot.bagplot()} plots a bagplot object. \code{bagplot()} computes and plots a bagplot. } \usage{ bagplot(x, y, factor = 3, na.rm = FALSE, approx.limit = 300, show.outlier = TRUE, show.whiskers = TRUE, show.looppoints = TRUE, show.bagpoints = TRUE, show.loophull = TRUE, show.baghull = TRUE, create.plot = TRUE, add = FALSE, pch = 16, cex = 0.4, dkmethod = 2, precision = 1, verbose = FALSE, debug.plots = "no", col.loophull="#aaccff", col.looppoints="#3355ff", col.baghull="#7799ff", col.bagpoints="#000088", transparency=FALSE, show.center = TRUE, ... ) compute.bagplot(x, y, factor = 3, na.rm = FALSE, approx.limit = 300, dkmethod=2,precision=1,verbose=FALSE,debug.plots="no") \method{plot}{bagplot}(x, show.outlier = TRUE, show.whiskers = TRUE, show.looppoints = TRUE, show.bagpoints = TRUE, show.loophull = TRUE, show.baghull = TRUE, add = FALSE, pch = 16, cex = 0.4, verbose = FALSE, col.loophull="#aaccff", col.looppoints="#3355ff", col.baghull="#7799ff", col.bagpoints="#000088", transparency=FALSE, show.center = TRUE, ...) } \arguments{ \item{x}{ x values of a data set; in \code{bagplot}: an object of class \code{bagplot} computed by \code{compute.bagplot} } \item{y}{ y values of the data set } \item{factor}{ factor defining the loop } \item{na.rm}{ if TRUE 'NA' values are removed otherwise exchanged by median} \item{approx.limit}{ if the number of data points exceeds \code{approx.limit} a sample is used to compute some of the quantities; default: 300 } \item{show.outlier}{ if TRUE outlier are shown } \item{show.whiskers}{ if TRUE whiskers are shown } \item{show.looppoints}{ if TRUE loop points are plottet } \item{show.bagpoints}{ if TRUE bag points are plottet } \item{show.loophull}{ if TRUE the loop is plotted } \item{show.baghull}{ if TRUE the bag is plotted } \item{create.plot}{ if FALSE no plot is created } \item{add}{ if TRUE the bagplot is added to an existing plot } \item{pch}{ sets the plotting character } \item{cex}{ sets characters size} \item{dkmethod}{ 1 or 2, there are two method of approximating the bag, method 1 is very rough (only based on observations } \item{precision}{ precision of approximation, default: 1 } \item{verbose}{ automatic commenting of calculations } \item{debug.plots}{ if TRUE additional plots describing intermediate results are constructed } \item{col.loophull}{ color of loop hull } \item{col.looppoints}{ color of the points of the loop } \item{col.baghull}{ color of bag hull } \item{col.bagpoints}{ color of the points of the bag } \item{transparency}{ see section details } \item{show.center}{ if TRUE the center is shown } \item{...}{ additional graphical parameters } } \details{ A bagplot is a bivariate generalization of the well known boxplot. It has been proposed by Rousseeuw, Ruts, and Tukey. In the bivariate case the box of the boxplot changes to a convex polygon, the bag of bagplot. In the bag are 50 percent of all points. The fence separates points within the fence from points outside. It is computed by increasing the the bag. The loop is defined as the convex hull containing all points inside the fence. If all points are on a straight line you get a classical boxplot. \code{bagplot()} plots bagplots that are very similar to the one described in Rousseeuw et al. Remarks: The two dimensional median is approximated. For large data sets the error will be very small. On the other hand it is not very wise to make a (graphical) summary of e.g. 10 bivariate data points. In case you want to plot multiple (overlapping) bagplots, you may want plots that are semi-transparent. For this you can use the \code{transparency} flag. If \code{transparency==TRUE} the alpha layer is set to '99' (hex). This causes the bagplots to appear semi-transparent, but ONLY if the output device is PDF and opened using: \code{pdf(file="filename.pdf", version="1.4")}. For this reason, the default is \code{transparency==FALSE}. This feature as well as the arguments to specify different colors has been proposed by Wouter Meuleman. } \value{ \code{compute.bagplot} returns an object of class \code{bagplot} that could be plotted by \code{plot.bagplot()}. An object of the bagplot class is a list with the following elements: \code{center} is a two dimensional vector with the coordinates of the center. \code{hull.center} is a two column matrix, the rows are the coordinates of the corners of the center region. \code{hull.bag} and \code{hull.loop} contain the coordinates of the hull of the bag and the hull of the loop. \code{pxy.bag} shows you the coordinates of the points of the bag. \code{pxy.outer} is the two column matrix of the points that are within the fence. \code{pxy.outlier} represent the outliers. The vector \code{hdepths} shows the depths of data points. \code{is.one.dim} is \code{TRUE} if the data set is (nearly) one dimensional. The dimensionality is decided by analysing the result of \code{prcomp} which is stored in the element \code{prdata}. \code{xy} shows you the data that are used for the bagplot. In the case of very large data sets subsets of the data are used for constructing the bagplot. A data set is very large if there are more data points than \code{approx.limit}. \code{xydata} are the input data structured in a two column matrix. } \references{ P. J. Rousseeuw, I. Ruts, J. W. Tukey (1999): The bagplot: a bivariate boxplot, The American Statistician, vol. 53, no. 4, 382--387 } \author{ Peter Wolf } \note{ Version of bagplot: 10/2012 } \seealso{ \code{\link[graphics]{boxplot}} } \examples{ # example: 100 random points and one outlier dat<-cbind(rnorm(100)+100,rnorm(100)+300) dat<-rbind(dat,c(105,295)) bagplot(dat,factor=2.5,create.plot=TRUE,approx.limit=300, show.outlier=TRUE,show.looppoints=TRUE, show.bagpoints=TRUE,dkmethod=2, show.whiskers=TRUE,show.loophull=TRUE, show.baghull=TRUE,verbose=FALSE) # example of Rousseeuw et al., see R-package rpart cardata <- structure(as.integer( c(2560,2345,1845,2260,2440, 2285, 2275, 2350, 2295, 1900, 2390, 2075, 2330, 3320, 2885, 3310, 2695, 2170, 2710, 2775, 2840, 2485, 2670, 2640, 2655, 3065, 2750, 2920, 2780, 2745, 3110, 2920, 2645, 2575, 2935, 2920, 2985, 3265, 2880, 2975, 3450, 3145, 3190, 3610, 2885, 3480, 3200, 2765, 3220, 3480, 3325, 3855, 3850, 3195, 3735, 3665, 3735, 3415, 3185, 3690, 97, 114, 81, 91, 113, 97, 97, 98, 109, 73, 97, 89, 109, 305, 153, 302, 133, 97, 125, 146, 107, 109, 121, 151, 133, 181, 141, 132, 133, 122, 181, 146, 151, 116, 135, 122, 141, 163, 151, 153, 202, 180, 182, 232, 143, 180, 180, 151, 189, 180, 231, 305, 302, 151, 202, 182, 181, 143, 146, 146)), .Dim = as.integer(c(60, 2)), .Dimnames = list(NULL, c("Weight", "Disp."))) bagplot(cardata,factor=3,show.baghull=TRUE, show.loophull=TRUE,precision=1,dkmethod=2) title("car data Chambers/Hastie 1992") # points of y=x*x bagplot(x=1:30,y=(1:30)^2,verbose=FALSE,dkmethod=2) # one dimensional subspace bagplot(x=1:100,y=1:100) } \keyword{ misc } \keyword{ hplot } aplpack/man/slider.stem.leaf.Rd0000644000176200001440000000451013516603654016077 0ustar liggesusers \name{slider.stem.leaf} \alias{slider.stem.leaf} \title{ construction of stem and leaf display interactively } \description{ 'slider.stem.leaf' computes a stem and leaf display within a graphics device. The parameters are controlled by a control widget. } \usage{ slider.stem.leaf(x, main = main) } \arguments{ \item{x}{ data set for plotting } \item{main}{ main title of the plot } } \details{ The function 'slider.stem.leaf' allows the user to construct a stem and leaf display within a graphics device. The main parameters will be set by a Tcl/Tk control widget. The line rule is selected by pressing one of the buttons 'Dixon', 'Sturges', 'Velleman'. A slider controls the separation of the stem. Additionally the character size device could be set. } \value{ a short message is returned } \author{ Peter Wolf, Nov 2009 } \note{ The function is a function of the package aplpack } \seealso{\code{\link[graphics]{stem}}} \examples{ \dontrun{ slider.stem.leaf(islands) } } \keyword{misc} aplpack/man/boxplot2D.Rd0000644000176200001440000000423413516603654014620 0ustar liggesusers\name{boxplot2D} \alias{boxplot2D} \title{ Boxplot of projection of two dimensional data } \description{ boxplot2D computes summary statistics of a one dimensional projection of a two dimensional data set and plots a sloped boxplot of the statistics into the scatterplot of the two dimensional data set. } \usage{ boxplot2D(xy, add.to.plot = TRUE, box.size = 10, box.shift = 0, angle = 0, angle.type = "0", tukey.style = TRUE, coef.out = 1.5, coef.h.out = 3, design = "sl", na.rm=FALSE, ...) } \arguments{ \item{xy}{ \code{(nx2)}-matrix, two dimensional data set } \item{add.to.plot}{ if \code{TRUE} the boxplot is added to the actual plot of the graphics device } \item{box.size}{ height of the box (of the boxplot) } \item{box.shift}{ shift of boxplot perpendicular to the projection direction } \item{angle}{ direction of projection in units defined by angle.type } \item{angle.type}{ \code{"0"}: angle in (0,2*pi), \code{"1"}: clock-like: angle.typ.0==2*pi*angle.typ.1/12, \code{"2"}: degrees: angle.typ.0==2*pi*angle.typ.2/360, \code{"3"}: by fraction: delta.y/delta.x } \item{tukey.style}{ if \code{TRUE} outliers are defined as described in Tukey (1977) } \item{coef.out}{ outliers are values that are more than \code{coef.out*boxwidth} away from the box, default: \code{coef.out=1.5} } \item{coef.h.out}{ heavy outliers are values that are more than \code{coef.h.out*boxwidth} away from the box, default: \code{coef.h.out=3} } \item{design}{ if \code{sl} then parallelogram else box } \item{na.rm}{ if TRUE 'NA' values are removed otherwise exchanged by mean} \item{\dots}{ additional graphical parameters } } \references{ Tukey, J. \emph{Exploratory Data Analysis.} Addison-Wesley, 1977. } \author{Peter Wolf } \note{ version 08/2003 } \seealso{ \code{\link[graphics]{boxplot}}} \examples{ xy<-cbind(1:100, (1:100)+rnorm(100,,5)) par(pty="s") plot(xy,xlim=c(-50,150),ylim=c(-50,150)) boxplot2D(xy,box.shift=-30,angle=3,angle.typ=1) boxplot2D(xy,box.shift=20,angle=1,angle.typ=1) boxplot2D(xy,box.shift=50,angle=5,angle.typ=1) par(pty="m") } \keyword{misc} aplpack/man/plothulls.Rd0000644000176200001440000000565613516603654015002 0ustar liggesusers\name{plothulls} \alias{plothulls} \title{plothulls for data peeling } \description{ \code{plothulls plots convex hulls of a bivariate data set.} } \usage{ plothulls(x, y, fraction, n.hull = 1, main, add = FALSE, col.hull, lty.hull, lwd.hull, density = 0, ...) } \arguments{ \item{x}{ two column matrix of the coordinates of points of x-values of a data set} \item{y}{ if x is one dimensional then y contains the y-values of the data set} \item{fraction}{ ... of points that lies inside the hull to be plotted} \item{n.hull}{ number of directions sequential hulls to be plotted} \item{main}{ title for the graphics} \item{add}{ if TRUE no new plot is initialized} \item{col.hull}{ color(s) of the hull(s)} \item{lty.hull}{ line type(s) of the hull(s)} \item{lwd.hull}{ line width(s) of the hull(s)} \item{density}{ density argument of polygon() that draws the hulls} \item{...}{ further arguments used in the call of plot() or points()} } \details{ The function \code{plothulls} computes hulls of a bivariate data set using the function \code{chull}. After finding a hull the hull maybe plotted. Then the data points of the hull will be removed and the hull of the remaining points is computed. The style of plotting a hull depends on the setting of \code{col.hull}, \code{lty.hull}, \code{lwd.hull} and \code{density}. \code{density=NA} has the effect that the regions of the hulls are filled by a color. Using \code{fraction} you can plot a single hull. \code{n.hull} defines the number of hull that should be drawn one after the other. } \value{ The hull(s) are stored as a list of matrices with two columns, the innermost first and so on. } \references{ Green, P.J. (1981): Peeling bivariate data. In: Interpreting Multivariate Data, V. Barnett (ed.), pp 3-19, Wiley. Porzio, Giovanni C., Ragozini, Giancarlo (2000): Peeling multvariate data sets: a new approach. Quanderni di Statistica, Vol. 2. } \author{ Peter Wolf } \note{ Version of plothulls: 10/2013 } \seealso{ \code{\link[aplpack]{bagplot}} } \examples{ # 10 hulls computed from the faithful data and plotted plothulls(faithful, n.hull=10, lty.hull=1) # plotting additionally a hull with 90 percent of points within the hull plot(faithful) plothulls(faithful, fraction=.90, add=TRUE, col.hull="red", lwd.hull=3) # hull with 10 percent of points within the hull plothulls(faithful, fraction=.10, col.hull="red", lwd.hull=3) # first 3 hulls of the cars data set n <- 3 plothulls(cars, n.hull=n, col.hull=1:n, lty.hull=1:n) # 5 hulls represented by colored regions n <- 5 cols <- heat.colors(9)[3:(3+n-1)] plothulls(cars, n.hull=n, col.hull=cols, lty.hull=1:n, density=NA, col=0) points(cars, pch=17, cex=1) # 6 hulls: regions colored and boundaries shown n <- 6 cols <- rainbow(n) plothulls(cars, n.hull=n, col.hull=cols, lty.hull=1:n, density=NA, col=0) plothulls(cars, n.hull=n, add=TRUE, col.hull=1, lwd.hull=2, lty=1, col=0) } aplpack/man/puticon.Rd0000644000176200001440000003325513516603657014434 0ustar liggesusers\name{puticon} \alias{puticon} \title{ Add Icon(s) to a Plot } \description{ \code{puticon()} draws icons at the coordinates given by \code{x} and \code{y}. } \usage{ puticon(x = 0, y = 0, icon = "", grey.levels = 0.5, icon.cex = 10, color = "red", ..., adj = c(0.5, 0.5), xpd = NA) } \arguments{ \item{x, y}{ numeric vectors of coordinates where to plot icon(s). If \code{x} is missing some information about internal icon generators are printed or plotted. } \item{icon}{ icon to use. There are several ways to define an icon: If \code{icon} is a file name with one of the extensions \code{c(".jpg", ".JPG", ".pnm", ".PNM", ".png", ".PNG")} \code{puticon()} tries to use the graphics file to plot the icon(s). To read \code{jpeg} and \code{png} files the functions \code{jpeg} and \code{png} of the packages \code{jpeg} and \code{png} are called. Note: If an image file is defined by an internet link it is temporarily downloaded using \code{tempfile()} and \code{download.file()}. If \code{icon} is a number a central symbol is plotted by invoking \code{points}. Remark: Usually the width of central symbols are a little bit smaller than \code{par()$cin[1]*0.75}. Therefore, it may be necessary to increase \code{icon.cex} to get an icon of a suitable size. If \code{icon} is a raster graphics object this object is used as icon. If \code{icon} is a string and if it is the name of an in internal icon generator (function) this generator is used to generate the icon(s). In the moment the following generators are implemented:\cr \code{BI, TL, cross.simple, cross, circle.simple, circle, car.simple, car, nabla}, \code{walkman, smiley.blueeye, smiley.normal, smiley, smiley.sad, mazz.man, bike}, \code{bike2, heart, bend.sign, fir.tree, comet, coor.system}. If \code{icon} is a function it is used as an icon generating function. } \item{grey.levels}{ An image from a file is transformed to a black-and-white picture. \code{grey.levels} defines the grey levels of the black-and-white picture that are replaced by \code{color}. If \code{grey.levels} is a single decimal number and is in (0,1) the pixels with a level greater than \code{grey.levels} are recolored by \code{color}. If \code{grey.levels} consists of two decimal numbers lower 1 pixels with grey levels lying in the interval are recolored by \code{color}. If \code{grey.levels} is an integer a vector of levels is created. If \code{grey.levels} is a vector and \code{all(grey.levels < 1)} \code{puticon} tries to different intensities of colors of \code{color} for recoloring pixels. } \item{icon.cex}{ size(s) of icon(s) in mm. If \code{icon.cex < 1} it is interpreted as ratio (width of icon) / (width of plotting area (\code{par()$pin[1]})) and is transformed to mm. } \item{color}{ color(s) to be used for the pictogram(s). \code{color} can be a color code or name, for details see section \code{Color Specification} of the help of \code{par}. } \item{\dots}{ Further parameters to be passed to the icon generating function. } \item{adj}{ \code{adj} one or two values usually lying in [0, 1] and which specify the x (and y) adjustment of the icon(s). } \item{xpd}{ controls clipping. See help of \code{par} for further explainations. } } \details{ For details concerning icon generating function see the help of \code{iconplot()}. If \code{puticon()} is called without argument \code{x} and \code{icon} is an empty string a list of internal generators will be returned. If \code{x} is missing and \code{icon} is the name of an internal generator a standardized version of the icon is plotted and the arguments of the generator (function) are printed. } \value{ Usually \code{Null} is returned. However, if no coordinates are set and the name of an internal generator is assigned to \code{icon} \code{puticon} returns the definition of the generator function. } \references{ under construction } \author{ Peter Wolf } \note{ Remark: the version of \code{puticon} of this package is an experimental version. Therefore, in the future some of the features may be changed and it is not sure that the function works as described on all types of graphics devices. In case of errors feel free to write a mail. Additional information and examples are found on the web page\cr \url{http://www.wiwi.uni-bielefeld.de/lehrbereiche/statoekoinf/comet/wolf/wolf_aplpack}. } \seealso{ \code{points}, \code{rasterImage}, \code{iconplot} } \examples{ # representation of data set "trees" by plotting characters x <- trees[,1]; y <- trees[,2]; colors <- rainbow(100)[floor(trees[,3])] plot(x, y, type = "n") puticon(x, y, icon = 1, color = colors, icon.cex = 15, lwd = 6) for(i in seq(along = x)){ puticon(x[i], y[i], icon = i - 25 * ( i > 25), color = "red", icon.cex = 7, lwd = 4) } # representation of data set "trees" by fir.tree icons x <- trees[,1]; y <- trees[,2]; colors <- rainbow(100)[floor(trees[,3])] plot(x, y, type = "n") puticon(x, y, icon = "fir.tree", icon.cex = 10, color = colors, height = y / 50, width = x / 10) # standardized design of icon generator "fir.tree" and its definition puticon( icon = "fir.tree" ) # list of implemented icon generators / generator functions puticon() # demo of internal icon generator functions h <- puticon(); n <- length(h); y <- 1 + ((1:n)-1) %% 12 plot(1:n, xlim = c(0, n + 4), ylim = c(0, n / 2 + 4), type = "n") for(i in 1:n) puticon(i, y[i] + (0:1), h[i], icon.cex = 3 + (1:2) , color = 3:4) text(1:n - 0.3, y - 1, h, adj = c(0, 0.5)) # some smileys and Bielefeld logos of different colors and different sizes plot(1:100, type = "n") n <- 15; set.seed(26); x <- seq(10, 90, length = n); y <- runif(n, 10, 90) sizes <- 5 + (1:n) / 4; my.color = rainbow(n); h <- 2 + (1:n)^0.5 puticon(x, y, icon = "BI", icon.cex = sizes, color = my.color) puticon(x + h, y + h, icon = "smiley", color = my.color, icon.cex = sizes) # icons with some letters n <- 150; plot(1:n, 1:n, type = "n", xlab ="", ylab = "") x <- runif(n, 1, n); y <- runif(n, 1, n); colors <- sample(rainbow(n)) for(i in 1:n) puticon(x[i], y[i], icon = "TL", icon.cex = 20, shiftY = runif(1, -10, 10), color = colors[i], L = paste(sample(letters, sample(1:5, size = 1)), collapse = "")) # a modern painting plot(1:20, xlim = c(-7,22), ylim = c(-7,22), type = "n", axes = FALSE, xlab ="", ylab = "") rect(-7, -7, 22, 22, col = "gray") n <- 100; set.seed(13); colors <- sample(rainbow(n)); CEX <- sort(runif(n, 2, 21)) for(i in 1:n){ icon <- c("cross.simple", "cross", "circle.simple", "circle")[[sample(1:4, 1)]] puticon(runif(1, -5,20), runif(1, -5, 20), icon, icon.cex = CEX[i], z = runif(1, 0.20, 0.45), whole = runif(1, 0.1, 0.6), color = colors[i]) } # Traveller plot proposed by M. Mazziotta and A. Pareto. # M. Mazziotta, A. Pareto (2016): # Non-compensatory Aggregation of Social Indicaters: An Icon Representation. # url{http://link.springer.com/chapter/10.1007/978-3-319-05552-7_33} Mazzi.Pareto <- structure(list(Region = c("Piemonte", "Valle d'Aosta", "Lombardia", "Trentino-Alto Adige", "Veneto", "Friuli-Venezia Giulia", "Liguria", "Emilia-Romagna", "Toscana", "Umbria", "Marche", "Lazio", "Abruzzo", "Molise", "Campania", "Puglia", "Basilicata", "Calabria", "Sicilia", "Sardegna"), Mean = c(98.74, 104.07, 101.38, 106.1, 104.38, 105.55, 102.76, 103.62, 101.84, 103.52, 102.05, 97.88, 102.9, 91.43, 94.12, 96.78, 93.55, 92.59, 96.29, 100.45), Penalty = c(0.43, 4.23, 0.64, 0.63, 0.77, 0.34, 0.29, 0.46, 0.27, 0.22, 0.15, 0.82, 1.3, 1.02, 0.37, 0.21, 2.37, 0.51, 0.31, 0.76), MPI = c(98.3, 99.84, 100.74, 105.47, 103.61, 105.21, 102.47, 103.16, 101.57, 103.3, 101.9, 97.06, 101.6, 90.42, 93.75, 96.58, 91.18, 92.08, 95.98, 99.69)), .Names = c("Region", "Mean", "Penalty", "MPI" ), row.names = c(NA, -20L), class = "data.frame") plot(0, xlim = c(0.5, 4.5), ylim = c(0.83, 4.9), axes = FALSE,xlab = "", ylab = "" ) x <- rep(1:4,5) - 1; y <- rep(5:1, each = 4) puticon( x, y, "mazz.man", icon.cex = 15, color = 1, Mean = Mazzi.Pareto$Mean, Penalty = Mazzi.Pareto$Penalty, Region = Mazzi.Pareto$Region, x.text = 70, y.text = -10 ) # some cars plot(1:1000, type = "n", axes = FALSE, xlab = "", ylab = "") n <- 200; set.seed(13); x <- runif(n, -100, 1100); y <- runif(n, -100, 1100) colors <- sample(rainbow(n)) for( i in 1:n ){ puticon(x[i], y[i], icon = "car", icon.cex = runif(1, 10, 20), width = runif(1, 0, 1), height = runif(1, 0, 1), color = colors[i]) } # fuzzy scatter plots as icons plot(-30:120, -30:120, type = "n", axes = FALSE, xlab = "", ylab = "") set.seed(13) puticon(50, 50, icon = "coor.system", icon.cex = .8, color = "blue", xxx = list(rnorm(20, 50, 15)), yyy = list(rnorm(100, 50, 15)*1000), axes = TRUE) puticon(x = c(20, 100, 95), y = c(100, 110, -45), icon = "coor.system", icon.cex = c(20, 30), color = c("green", "red", "magenta"), xxx = list(c(30, 50, 70), c(10, 20), c(80, 90, 10)), yyy = list(c(20, 60, 30), c(10, 20), c(10, 80, 90)), pcex = 10) # Marilyn Monroe or R icons via internet plot(1:20, type = "n", axes = FALSE, xlab = "", ylab = "") f1 <- "http://www.radiopaula.cl/wp-content/uploads/2014/03/marilyn-monroe-3-andrew-fare.jpg" \dontrun{puticon(15, 17, icon = f1, icon.cex = 40, color = NA)} \dontrun{puticon( c(6, 9, 12, 15), c(15, 13, 11, 9), icon = f1, icon.cex = 20, color = rainbow(4), grey.levels = 20)} \dontrun{puticon( 4, 8, icon = f1, icon.cex = 40, color = "green", grey.levels = c(0.5, 0.9))} \dontrun{puticon(10, 4, icon = f1, icon.cex = 40, color = "blue", grey.levels = c(0.0, 0.6))} plot(1:20, type = "n", axes = FALSE, xlab = "", ylab = "") f1 <- "https://developer.r-project.org/Logo/Rlogo-4.png" \dontrun{puticon(15, 17, icon = f1, icon.cex = 40, color = NA)} \dontrun{puticon( c(6, 9, 12, 15), c(15, 13, 11, 9), icon = f1, icon.cex = 20, color = rainbow(4), grey.levels = 20)} \dontrun{puticon( 4, 8, icon = f1, icon.cex = 40, color = "green", grey.levels = c(0.5, 0.9))} \dontrun{puticon(10, 4, icon = f1, icon.cex = 40, color = "blue", grey.levels = c(0.0, 0.6))} # simple raster graphics plot(1:20, pch = 1:20) puticon(1:20, sample(1:20), icon = 15, icon.cex = 20) image1 <- as.raster( matrix( c(1,1,1,1,0,1,1,1,1), ncol = 3, nrow = 3)) image2 <- as.raster( matrix( c(0,1,0,1,0,1,0,1,0), ncol = 3, nrow = 3)) image3 <- as.raster( matrix( c(0,0,0,0,1,0,0,0,0), ncol = 3, nrow = 3)) puticon( 7, 14, icon = image1, icon.cex = .5, col = "orange") puticon( c(5, 10), c(5,5), icon = image2, icon.cex = c(.1, .2), color = 3:4) puticon( 17, 10, icon = image3, icon.cex = .30, col = "yellow") # demo "my.house" of writing a generator function to generate icons my.house <- function(col1 = 2, col2 = 3, col3 = 4){ # initialize result object result <- NULL # compose object of type "polygon" consisting of # x-, y-values and colors x <- c(0, 1, 1, 0, 0, 1, 0.5, 0, 1) * 55 + 20 y <- c(0, 0, 1, 1, 0, 1, 1.65, 1, 0) * 55 + 5 res <- data.frame( x, y, color = col2) # add class "polygon" to the object and store it in "result" class(res) <- c(class(res), "polygon"); result <- c(result, list(res)) # compose another object of type "polygon" res <- data.frame( x[c(1, 3, 4, 2)], y[c(1, 3, 4, 2)], color = col3) # add class "polygon" to the object and store it in "result" class(res) <- c(class(res), "polygon"); result <- c(result, list(res)) n <- length(x) # compose object of type "segments" consisting of # x1-, y1-, x2-, y2-values, line widths and colors res <- data.frame( x[-n], y[-n], x[-1], y[-1], lwd.mm = 5, color = col1) # add class "segments" to the object and store it in "result" class(res) <- c(class(res), "segments"); result <- c(result, list(res)) # output result object result } plot(1:100, type = "n") n <- 50; x <- runif(n, 10, 90); y <- runif(n, 10, 90) colors <- rainbow(n); sizes <- 5 + sample(1:n) / 2 puticon(x, y, icon = my.house, icon.cex = sizes, col1 = sample(colors), col2 = sample(colors), col3 = sample(colors) ) # demo "my.star" of writing a generator function to generate icons my.star <- function(xx = 1:5, max.xx, star.txt = "..."){ if(missing(max.xx)) max.xx <- max(xx) n <- length(xx); xx <- 50 * xx / max.xx colors <- rainbow(n); result <- NULL # compose object of type "segments" consisting of # x1-, y1-, x2-, y2-values, line widths and colors if( n > 1 ){ x <- sin(2 * pi * (1:n) / n) * xx + 50 y <- cos(2 * pi * (1:n) / n) * xx + 50 res <- data.frame( 50, 50, x, y, lwd.mm = 2, color = colors) } else { res <- data.frame( 50, 50, x, y, width = 30, color = colors) } # add class "segments" to the object and store it in "result" class(res) <- c(class(res), "segments"); result <- c(result, list(res)) # compose object of type "text" consisting of # x-, y-values, text, sizes of the text and colors res <- data.frame( 85, 20, txt = star.txt, t.cex.mm = 20, color = "blue") # add class "text" to the object and store it in "result" class(res) <- c(class(res), "text"); result <- c(result, list(res)) # output result object result } plot(1:100, type = "n") for(i in 1:10){ puticon( runif(1, 0, 100), runif(1, 0, 100), icon = my.star, icon.cex = 20, xx = list(runif(14, 2, 10)), max.xx = 10, star.txt = letters[i]) } } \keyword{ graphics } aplpack/man/slider.lowess.plot.Rd0000644000176200001440000000237213516603654016516 0ustar liggesusers\name{slider.lowess.plot} \title{interactive lowess smoothing} \alias{slider.lowess.plot} \description{ \code{slider.lowess.plot} computes an xy-plot of the data and adds LOWESS lines. The smoother span and the number of iterations are selected by sliders. } \usage{ slider.lowess.plot(x, y, ...) } \arguments{ \item{x}{ data set to be used for plotting or vector of x values } \item{y}{ vector of y values in case \code{x} is not a matrix } \item{\dots}{ additional (graphics) parameter settings } } \details{ \code{slider.lowess.plot} computes a scatterplot of the data. Then a LOWESS smoother line is added to the plot. For more details about the lowess parameters \code{f} and \code{iter} take a look at the help page of \code{lowess}. The parameters are set by moving sliders of the control widget. The first slider defines the smoother span \code{f} and the second one the number of iterations. } \value{ a message about the usage } \references{ for references see help file of \code{lowess} } \author{ Hans Peter Wolf } \seealso{ \code{\link{lowess}}, \code{slider} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.lowess.plot(cars) } } \keyword{ iplot } aplpack/man/slider.brush.Rd0000644000176200001440000000420013516603654015340 0ustar liggesusers\name{slider.brush} \title{interactive brushing functions} \alias{slider.brush.pairs} \alias{slider.brush.plot.xy} \description{ These functions compute a pairs plot or a simple xy-plot and open a slider control widget for brushing. \code{slider.brush.pairs} computes a pairs plot; the user defines an interval for one of the variables and in effect all data points in this interval will be recolored. \code{slider.brush.plot.xy} computes an xy-plot; the user defines a interval for a third variable \code{z} and all points \code{(x,y)} will be recolored red if the \code{z} value is in the interval. } \usage{ slider.brush.pairs(x, ...) slider.brush.plot.xy(x, y, z, ...) } \arguments{ \item{\dots}{ new settings for global graphics parameters } \item{x}{ matrix or data frame or vector } \item{y}{ vector of y values if \code{x} is not a matrix } \item{z}{ vector of z values if \code{x} is not a matrix } } \details{ \code{slider.brush.pairs} draws a pairs plot of the data set \code{x}. The first slider defines the lower limit of the interval and the second its width. By the third slider a variable is selected. All data points for which the selected variable is in the interval are recolored red. \code{slider.brush.plot.xy} draws an xy-plot of the data set \code{x}. The first slider defines the lower limit of the interval of z values and the second one its width. All data points for which the variable z is in the interval are recolored red. } \value{ a message about the usage } \references{ W. S. Cleveland, R. A. Becker, and G. Weil. The Use of Brushing and Rotation for Data Analysis. InW. S. Cleveland and M. E. McGill, editors, Dynamic Graphics for Statistics. Wadsworth and Brooks/Cole, Pacific Grove, CA, 1988. } \author{ Hans Peter Wolf } \seealso{ \code{\link{pairs}}, \code{\link{plot}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.brush.pairs(iris) } \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.brush.plot.xy(iris[,1:3]) } } \keyword{ iplot } aplpack/man/slider.bootstrap.lm.plot.Rd0000644000176200001440000000231213516603654017620 0ustar liggesusers\name{slider.bootstrap.lm.plot} \title{interactive bootstapping for lm} \alias{slider.bootstrap.lm.plot} \description{ \code{slider.bootstrap.lm.plot} computes a scatterplot and adds regression curves of samples of the data points. The number of samples and the degree of the model are controlled by sliders. } \usage{ slider.bootstrap.lm.plot(x, y, ...) } \arguments{ \item{x}{ two column matrix or vector of x values if y is used } \item{y}{ y values if x is not a matrix } \item{\dots}{ additional graphics parameters } } \details{ \code{slider.bootstrap.lm.plot} draws a scatterplot of the data points and fits a linear model to the data set. Regression curves of samples of the data are then added to the plot. Within a Tcl/Tk control widget the degree of the model, the repetitions and the start of the random seed are set. After modification of a parameter the plot is updated. } \value{ a message about the usage } \references{ ~~ } \author{ Hans Peter Wolf } \seealso{ \code{\link{plot}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session daten<-iris[,2:3] slider.bootstrap.lm.plot(daten) } } \keyword{ iplot } aplpack/man/slider.Rd0000644000176200001440000002367613516603655014241 0ustar liggesusers\name{slider} \alias{slider} \alias{gslider} %- Also NEED an '\alias' for EACH other topic documented here. %- cp slider2.Rd /home/pwolf/work/relax/install.dir/relax/man/slider.Rd \title{slider / button control widgets} \description{ \code{slider} and \code{gslider} construct a Tcl/Tk-widget with sliders and buttons to demonstrate the effects of variation of parameters on calculations and plots. } \usage{ slider(sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, sl.defaults, but.functions, but.names, no, set.no.value, obj.name, obj.value, reset.function, title, prompt=FALSE, sliders.frame.vertical=TRUE) gslider(sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, sl.defaults, but.functions, but.names, no, set.no.value, obj.name, obj.value, reset.function, title, prompt=FALSE, sliders.frame.vertical=TRUE, hscale=1, vscale=1, pos.of.panel = c("bottom","top","left","right")[1]) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{sl.functions}{set of functions or function connected to the slider(s)} \item{sl.names}{labels of the sliders} \item{sl.mins}{minimum values of the sliders' ranges} \item{sl.maxs}{maximum values of the sliders' ranges} \item{sl.deltas}{change of step per click} \item{sl.defaults}{default values for the sliders} \item{but.functions}{function or list of functions that are assigned to the button(s)} \item{but.names}{labels of the buttons} \item{no}{\code{slider(no=i)} requests slider \code{i}} \item{set.no.value}{\code{slider(set.no.value=c(i,val))} sets slider \code{i} to value \code{val}} \item{obj.name}{\code{slider(obj.name=name)} requests the value of variable \code{name} from environment \code{slider.env}} \item{obj.value}{\code{slider(obj.name=name,obj.value=value)} assigns \code{value} to variable \code{name} in environment \code{slider.env}} \item{reset.function}{function that induce a \code{reset.button} and contains the commands of it.} \item{title}{title of the control window} \item{prompt}{ if TRUE slider functions are called by moving a slider, if FALSE slider functions are called after releasing the mouse button} \item{sliders.frame.vertical}{ if TRUE the sliders are stacked one above the other; otherwise they are positioned side by side } \item{hscale}{horizontal scale factor for image size; compare tkrplot in package tkrplot} \item{vscale}{vertical scale factor for image size; compare tkrplot in package tkrplot} \item{pos.of.panel}{position of the panel field for sliders and buttons. Value of \code{pos.of.panel}: bottom, top, left or right.} } \details{ \code{slider} constructs a separated panel for controlling the parameters whereas \code{gslider} integrates a graphical device and buttons and sliders within one window. The following actions can be done: a) definition of (multiple) sliders and buttons, b) request or specification of slider values, and c) request or specification of variables in the environment \code{slider.env}. The management takes place in the environment \code{slider.env}. If \code{slider.env} is not found it is generated. \bold{Definition} ... of sliders: First of all you have to define sliders, buttons and the attributes of them. Sliders are established by six arguments: \code{sl.functions, sl.names, sl.minima, sl.maxima,sl.deltas}, and \code{sl.defaults}. The first argument, \code{sl.functions}, is either a list of functions or a single function that contains the commands for the sliders. If there are three sliders and slider 2 is moved with the mouse the function stored in \code{sl.functions[[2]]} (or in case of one function for all sliders the function \code{sl.functions}) is called. \bold{DEFINITION} ... of buttons: Buttons are defined by a vector of labels \code{but.names} and a list of functions: \code{but.functions}. If button \code{i} is pressed the function stored in \code{but.functions[[i]]} is called. \bold{REQUESTING} ... a slider: \code{slider(no=1)} returns the actual value of slider 1, \code{slider(no=2)} returns the value of slider 2, etc. You are allowed to include expressions of the type \code{slider(no=i)} in functions describing the effect of sliders or buttons. \bold{SETTING} ... a slider: \code{slider(set.no.value=c(2,333))} sets slider \code{2} to value 333. \code{slider(set.no.value=c(i,value))} can be included in the functions defining the effects of moving sliders or pushing buttons. \bold{VARIABLES} ... of the environment \code{slider.env}: Sometimes information has to be trransferred back and forth between functions defining the effects of sliders and buttons. Imagine for example two sliders: one to control \code{p} and another one to control \code{q}, but they should satisfy: \code{p+q=1}. Consequently, you have to correct the value of the first slider after the second one was moved. To prevent the creation of global variables store them in the environment \code{slider.env}. Use \code{slider(obj.name="p.save",obj.value=1-slider(no=2))} to assign value \code{1-slider(no=2)} to the variable \code{p.save} . \code{slider(obj.name=p.save)} returns the value of variable \code{p.save}. \bold{Dependencies} The function \code{gslider} depends on package \code{tkrplot}. } \value{ Using \code{slider} in definition mode \code{slider} returns the value of new created the top level widget. \code{slider(no=i)} returns the actual value of slider \code{i}. \code{slider(obj.name=name)} returns the value of variable \code{name} in environment \code{slider.env}. \code{gslider} return in definition mode the result of \code{tkrplot} which was called to construct the widget. } \author{Hans Peter Wolf} \examples{ # example 1, sliders only if(interactive()){ ## This example cannot be run by examples() but should work in an interactive R session plot.sample.norm<-function(){ refresh.code<-function(...){ mu<-slider(no=1); sd<-slider(no=2); n<-slider(no=3) x<-rnorm(n,mu,sd) plot(x) } slider(refresh.code,sl.names=c("value of mu","value of sd","n number of observations"), sl.mins=c(-10,.01,5),sl.maxs=c(+10,50,100),sl.deltas=c(.01,.01,1),sl.defaults=c(0,1,20)) } plot.sample.norm() } # example 2, sliders and buttons if(interactive()){ ## This example cannot be run by examples() but should work in an interactive R session plot.sample.norm.2<-function(){ refresh.code<-function(...){ mu<-slider(no=1); sd<-slider(no=2); n<-slider(no=3) type= slider(obj.name="type") x<-rnorm(n,mu,sd) plot(seq(x),x,ylim=c(-20,20),type=type) } slider(obj.name="type",obj.value="l") slider(refresh.code,sl.names=c("value of mu","value of sd","n number of observations"), sl.mins=c(-10,.01,5),sl.maxs=c(10,10,100),sl.deltas=c(.01,.01,1),sl.defaults=c(0,1,20), but.functions=list( function(...){slider(obj.name="type",obj.value="l");refresh.code()}, function(...){slider(obj.name="type",obj.value="p");refresh.code()}, function(...){slider(obj.name="type",obj.value="b");refresh.code()} ), but.names=c("lines","points","both")) } plot.sample.norm.2() } # example 2a, sliders and buttons and graphics in one window if(interactive()){ ## This example cannot be run by examples() but should work in an interactive R session plot.sample.norm.2<-function(){ refresh.code<-function(...){ mu<-slider(no=1); sd<-slider(no=2); n<-slider(no=3) type= slider(obj.name="type") x<-rnorm(n,mu,sd) plot(seq(x),x,ylim=c(-20,20),type=type) } slider(obj.name="type",obj.value="l") gslider(refresh.code,sl.names=c("value of mu","value of sd","n number of observations"), sl.mins=c(-10,.01,5),sl.maxs=c(10,10,100),sl.deltas=c(.01,.01,1),sl.defaults=c(0,1,20), but.functions=list( function(...){slider(obj.name="type",obj.value="l");refresh.code()}, function(...){slider(obj.name="type",obj.value="p");refresh.code()}, function(...){slider(obj.name="type",obj.value="b");refresh.code()} ), but.names=c("lines","points","both")) } plot.sample.norm.2() } # example 3, dependent sliders if(interactive()){ ## This example cannot be run by examples() but should work in an interactive R session print.of.p.and.q<-function(){ refresh.code<-function(...){ p.old<-slider(obj.name="p.old") p<-slider(no=1); if(abs(p-p.old)>0.001) {slider(set.no.value=c(2,1-p))} q<-slider(no=2); if(abs(q-(1-p))>0.001) {slider(set.no.value=c(1,1-q))} slider(obj.name="p.old",obj.value=p) cat("p=",p,"q=",1-p,"\n") } slider(refresh.code,sl.names=c("value of p","value of q"), sl.mins=c(0,0),sl.maxs=c(1,1),sl.deltas=c(.01,.01),sl.defaults=c(.2,.8)) slider(obj.name="p.old",obj.value=slider(no=1)) } print.of.p.and.q() } # example 4, rotating a surface if(interactive()){ ## This example cannot be run by examples() but should work in an interactive R session R.veil.in.the.wind<-function(){ # Mark Hempelmann / Peter Wolf par(bg="blue4", col="white", col.main="white", col.sub="white", font.sub=2, fg="white") # set colors and fonts refresh.code<-function(...){ samp <- function(N,D) N*(1/4+D)/(1/4+D*N) z<-outer(seq(1, 800, by=10), seq(.0025, 0.2, .0025)^2/1.96^2, samp) # create 3d matrix h<-100 z[10:70,20:25]<-z[10:70,20:25]+h; z[65:70,26:45]<-z[65:70,26:45]+h z[64:45,43:48]<-z[64:45,43:48]+h; z[44:39,26:45]<-z[44:39,26:45]+h x<-26:59; y<-11:38; zz<-outer(x,y,"+"); zz<-zz*(650];rz<-25+row(zz)[zz>0]; z[cbind(cz,rz)]<-z[cbind(cz,rz)]+h theta<-slider(no=1); phi<-slider(no=2) persp(x=seq(1,800,by=10),y=seq(.0025,0.2,.0025),z=z,theta=theta,phi=phi, scale=T, shade=.9, box=F, ltheta = 45, lphi = 45, col="aquamarine", border="NA",ticktype="detailed") } slider(refresh.code, c("theta", "phi"), c(0, 0),c(360, 360),c(.2, .2),c(85, 270) ) } R.veil.in.the.wind() } } \keyword{dynamic}% at least one, from doc/KEYWORDS \keyword{iplot}% __ONLY ONE__ keyword per line aplpack/man/slider.smooth.plot.ts.Rd0000644000176200001440000000225313516603654017136 0ustar liggesusers\name{slider.smooth.plot.ts} \title{interactive Tukey smoothing} \alias{slider.smooth.plot.ts} \description{ \code{slider.smooth.plot.ts} computes smooth curves of a time series plot by Tukey's smoothers. The kind of smoothing is controlled by a Tcl/Tk widget. } \usage{ slider.smooth.plot.ts(x, ...) } \arguments{ \item{x}{ time series } \item{\dots}{ additional graphical parameters } } \details{ \code{slider.smooth.plot.ts} draws the time series \code{x}. The user selects a filter of the set \code{c("3RS3R", "3RSS", "3RSR", "3R", "3", "S")} step by step and the resulting curve is added to the plot. The selection is performed by pressing a button of the control widget of \code{slider.smooth.plot.ts}. The button \code{reset} restarts the smoothing process. } \value{ a message about the usage } \references{ Tukey, J. W. (1977). Exploratory Data Analysis, Reading Massachusetts: Addison-Wesley. } \author{ Hans Peter Wolf } \seealso{ \code{\link{plot}}, \code{\link{smooth}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.smooth.plot.ts(rnorm(100)) } } \keyword{ iplot } aplpack/man/slider.zoom.plot.ts.Rd0000644000176200001440000000213013516603654016603 0ustar liggesusers\name{slider.zoom.plot.ts} \title{interactive zooming of time series} \alias{slider.zoom.plot.ts} \description{ This function shows one or two sections of a time series. The window(s) is (are) controlled by sliders. } \usage{ slider.zoom.plot.ts(x, n.windows, ...) } \arguments{ \item{x}{ time series } \item{n.windows}{ \code{if(n.windows>1} two sections are defined } \item{\dots}{ additional graphical parameters } } \details{ \code{slider.zoom.plot.ts} plots the original time series and it lets you select one or two sections of the series by fixing the width(s) and the starting point(s) of the region(s). Then the section(s) of the series is (are) plotted separately one below the other. The first slider defines the width of the section(s). The second (third) one sets the start of the first (second) section. } \value{ a message about the usage } \author{ Hans Peter Wolf } \seealso{ \code{\link{plot}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.zoom.plot.ts(co2,2) } } \keyword{ iplot } aplpack/man/faces.Rd0000644000176200001440000001157213516603654014027 0ustar liggesusers\name{faces} \alias{faces} \alias{plot.faces} \title{ Chernoff Faces } \description{ \code{faces} represent the rows of a data matrix by faces. \code{plot.faces} plots faces into a scatterplot. } \usage{ faces(xy, which.row, fill = FALSE, face.type = 1, nrow.plot, ncol.plot, scale = TRUE, byrow = FALSE, main, labels, print.info = TRUE, na.rm = FALSE, ncolors = 20, col.nose = rainbow(ncolors), col.eyes = rainbow(ncolors, start = 0.6, end = 0.85), col.hair = terrain.colors(ncolors), col.face = heat.colors(ncolors), col.lips = rainbow(ncolors, start = 0, end = 0.2), col.ears = rainbow(ncolors, start = 0, end = 0.2), plot.faces = TRUE, cex = 2) \method{plot}{faces}(x, x.pos, y.pos, face.type = 1, width = 1, height = 1, labels, ncolors = 20, col.nose = rainbow(ncolors), col.eyes = rainbow(ncolors, start = 0.6, end = 0.85), col.hair = terrain.colors(ncolors), col.face = heat.colors(ncolors), col.lips = rainbow(ncolors, start = 0, end = 0.2), col.ears = rainbow(ncolors, start = 0, end = 0.2), cex = 2, \ldots) } \arguments{ \item{xy}{ \code{xy} data matrix, rows represent individuals and columns variables } \item{which.row}{ defines a permutation of the rows of the input matrix } \item{fill}{ \code{if(fill==TRUE)}, only the first \code{nc} attributes of the faces are transformed, \code{nc} is the number of columns of \code{xy} } \item{face.type}{ an integer between 0 and 2 with the meanings: 0 = line drawing faces, 1 = the elements of the faces are painted, 2 = Santa Claus faces are drawn } \item{nrow.plot}{ number of columns of faces on graphics device } \item{ncol.plot}{ number of rows of faces } \item{scale}{ \code{if(scale==TRUE)}, variables will be normalized } \item{byrow}{ \code{if(byrow==TRUE)}, \code{xy} will be transposed } \item{main}{ title } \item{labels}{ character strings to use as names for the faces } \item{print.info}{ if TRUE information about usage of variables for face elements are printed } \item{na.rm}{ if TRUE 'NA' values are removed otherwise exchanged by mean of data} \item{plot.faces}{ if \code{FALSE} no face is plotted } \item{cex}{ size of labels of faces } \item{x}{ an object of class \code{faces} computed by \code{faces} } \item{x.pos}{ x coordinates of positions of faces } \item{y.pos}{ y coordinates of positions of faces } \item{width}{ width of the faces } \item{height}{ height of the faces } \item{ncolors}{ number of colors in the palettes for painting the elements of the faces } \item{col.nose}{ palette of colors for painting the nose } \item{col.eyes}{ palette of colors for painting the eyes } \item{col.hair}{ palette of colors for painting the hair } \item{col.face}{ palette of colors for painting the face } \item{col.lips}{ palette of colors for painting the lips } \item{col.ears}{ palette of colors for painting the ears } \item{...}{ additional graphical arguments } } \details{ Explanation of parameters: 1-height of face, 2-width of face, 3-shape of face, 4-height of mouth, 5-width of mouth, 6-curve of smile, 7-height of eyes, 8-width of eyes, 9-height of hair, 10-width of hair, 11-styling of hair, 12-height of nose, 13-width of nose, 14-width of ears, 15-height of ears. For painting elements of a face the colors of are found by averaging of sets of variables: (7,8)-eyes:iris, (1,2,3)-lips, (14,15)-ears, (12,13)-nose, (9,10,11)-hair, (1,2)-face. Further details can be found in the literate program of \code{faces}. } \value{ list of two elements: The first element \code{out$faces} is a list of standardized faces of \code{class faces}, this object could be plotted by plot.faces; a plot of faces is created on the graphics device if \code{plot.faces=TRUE}. The second list is short description of the effects of the variables. } \references{ Chernoff, H. (1973): The use of faces to represent statistiscal assoziation, JASA, 68, pp 361--368. The smooth curves are computed by an algorithm found in Ralston, A. and Rabinowitz, P. (1985): A first course in numerical analysis, McGraw-Hill, pp 76ff. \url{http://www.wiwi.uni-bielefeld.de/lehrbereiche/statoekoinf/comet/wolf/wolf_aplpack} } \author{ H. P. Wolf } \note{ version 01/2009 } \seealso{ --- } \examples{ faces() faces(face.type=1) faces(rbind(1:3,5:3,3:5,5:7)) data(longley) faces(longley[1:9,],face.type=0) faces(longley[1:9,],face.type=1) plot(longley[1:16,2:3],bty="n") a<-faces(longley[1:16,],plot=FALSE) plot.faces(a,longley[1:16,2],longley[1:16,3],width=35,height=30) set.seed(17) faces(matrix(sample(1:1000,128,),16,8),main="random faces") a<-faces(rbind(1:3,5:3,3:5,5:7),plot.faces=FALSE) plot(0:5,0:5,type="n") plot(a,x.pos=1:4,y.pos=1:4,1.5,0.7) # during Christmastime faces(face.type=2) } \keyword{misc} aplpack/man/slider.split.plot.ts.Rd0000644000176200001440000000302113516603654016752 0ustar liggesusers\name{slider.split.plot.ts} \title{interactive splitting of time series} \alias{slider.split.plot.ts} \description{ \code{slider.split.plot.ts} plots linear fitted lines or summary statistics in sections of a time series. The sections are controlled by sliders. } \usage{ slider.split.plot.ts(x, type="l", ...) } \arguments{ \item{x}{ time series or vector} \item{type}{ plotting type: \code{type} will be forwarded to function \code{plot}} \item{\dots}{ additional graphics parameters } } \details{ \code{slider.split.plot.ts} draws a time series plot and let you define sections of the series by fixing a limit on the time scale as well as a window width. The whole range of the series is partitioned in pieces of the same length in a way that the fixed limit will be one of the section limits. Then linear models are fitted and plotted in the sections. Alternatively -- by pressing the button \code{fivenum summary} -- summary statistics are drawn instead of the model lines. The first slider fixes the width of the sections and the second one the limit between two of them. By clicking on button \code{linear model} or \code{fivenum summary} the user switches between drawing model curves and five number summary. } \value{ a message about the usage } \author{ Hans Peter Wolf } \seealso{ \code{\link{plot}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.split.plot.ts(as.vector(sunspots)[1:100]) } } \keyword{ iplot } aplpack/man/plotsummary.Rd0000644000176200001440000001050413516603654015334 0ustar liggesusers\name{plotsummary} \alias{plotsummary} \title{ graphical summaries of variables of a data set } \description{ \code{plotsummary} shows some important characteristics of the variables of a data set. For each variable a plot is computed consisting of a barplot, an ecdf, a density trace and a boxplot. } \usage{ plotsummary(data, trim = 0, types = c("stripes", "ecdf", "density", "boxplot"), y.sizes = 4:1, design = "chessboard", main, mycols = "RB") } \arguments{ \item{data}{ Data set for computing a graphical summary. } \item{trim}{ \code{trim} defines the fraction of observation for trimming on both ends of the data. } \item{types}{ vector of types of representation of the data set. The elements of the vector will induce small plots which are stacked in vertical order. The first letter of the types is sufficient for defining a type. } \item{y.sizes}{defines the relative sizes of the small plots. The values are divided by their sum to get percentages. } \item{design}{ if \code{design} is \code{chessboard} the graphics device is fragmented into rows and cols. Otherwise the images of a variable build vertical stripes. } \item{main}{ defines a title for the graphics. } \item{mycols}{ allows to define some colors for the showing the regions separated by the quartils. } } \details{ \code{plotsummary} can be use for a quick and dirty inspection of a data matrix or a list of variables. Without further specification some representation of each of the variables is built and stacked into a plot. The sizes of the types of representation can be set as well as the layout design of the graphics device. It is helpful to trim the data before processing because outliers will often hide the interesting characteristics. } \author{ Peter Wolf, pwolf@wiwi.uni-bielefeld.de } \seealso{ \code{\link{pairs}}, \code{\link{summary}}, \code{\link{str}} } \examples{ ##---- Should be DIRECTLY executable !! ---- ##-- ==> Define data, use random, ##--\tor do help(data=index) for the standard data sets. plotsummary(cars) plotsummary(cars, types=c("ecdf", "density", "boxplot"), y.sizes = c(1,1,1), design ="stripes") plotsummary(c(list(rivers=rivers, co2=co2), cars), y.sizes=c(10,3,3,1), mycols=3) plotsummary(cars, design="chessboard") # find all matrices in your R ds.of.R <- function(type="vector"){ dat <- ls(pos=grep("datasets",search())) dat.type <- unlist(lapply(dat,function(x) { num <- mode(x<-eval(parse(text=x))) num <- ifelse(is.array(x),"array",num) num <- ifelse(is.list(x),"list",num) num <- ifelse(is.matrix(x),"matrix",num) num <- ifelse(is.data.frame(x),"matrix",num) num <- ifelse(num=="numeric","vector",num) num })) return(dat[dat.type==type]) } namelist <- ds.of.R("matrix") # inspect the matrices one after the other for(i in seq(along=namelist)){ print(i); print(namelist[i]) xy <- get(namelist[i]) # plotsummary(xy,y.sizes=4:1,trim=.05,main=namelist[i]) # Sys.sleep(1) } } \keyword{ hplot } \keyword{ manip }% __ONLY ONE__ keyword per line aplpack/man/hdepth.Rd0000644000176200001440000000166213516603653014220 0ustar liggesusers\name{hdepth} \alias{hdepth} \title{ hdepth of points } \description{ \code{hdepth()} computes the h-depths of points. } \usage{ hdepth(tp, data, number.of.directions=181) } \arguments{ \item{tp}{ two column matrix of the coordinates of points which h-depths are needed } \item{data}{ two column matrix of the coordinates of the points of a data set} \item{number.of.directions}{ number of directions to be checked } } \details{ The function \code{hdepth} computes the h-depths of the points \code{tp} relative to data set \code{data}. If \code{data} is missing \code{tp} will also be taken as data set. } \value{ the h-depths of the test points } \author{ Peter Wolf } \note{ Version of bagplot: 12/2012 } \seealso{ \code{\link[aplpack]{bagplot}} } \examples{ # computation of h-depths data <- cbind(rnorm(40), rnorm(40)) xy <- cbind(runif(50,-2,2),runif(50,-2,2)) bagplot(data); text(xy, as.character(hdepth(xy,data))) } aplpack/man/slider.hist.Rd0000644000176200001440000000473213516603654015176 0ustar liggesusers\name{slider.hist} \title{interactive histogram and density traces} \alias{slider.hist} \alias{slider.density} \description{ The functions \code{slider.hist} and \code{slider.density} compute histograms and density traces whereas some parameter are controlled by sliders. \code{slider.hist} computes a histogram; the number of classes is defined by a slider. \code{slider.density} computes a density trace; width and type of the kernel are defined by sliders. } \usage{ slider.hist(x, panel, ...) slider.density(x, panel, ...) } \arguments{ \item{x}{ data set to be used for plotting } \item{panel}{ function constructing additional graphical elements to the plot} \item{\dots}{ additional (graphics) parameters which are passed to the invoked high level plotting function } } \details{ \code{slider.hist} draws a histogram of the data set \code{x} by calling \code{hist} and opens a Tcl/Tk widget with one slider. The slider defines the number of classes of the histogram. Changing the slider results in redrawing of the plot. For further details see the help page of \code{hist}. \code{rug} is used as the default panel function. \code{slider.density} draws a density trace of the data set \code{x} by \code{plot(density(...))} and opens a Tcl/Tk-widget with two sliders. The first slider defines the width of the density trace and the second one the kernel function: \code{"1-gaussian", "2-epanechnikov", "3-rectangular", "4-triangular","5-biweight", "6-cosine", "7-optcosine"} Changing one of the sliders results in a redrawing of the plot. For further details see the help page of \code{density}. \code{rug} is used as the default panel function. } \value{ a message about the usage } \references{ ~~ } \author{ Hans Peter Wolf } \seealso{ \code{\link{hist}}, \code{slider}} \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.hist(log(islands)) } \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.density(rivers,xlab="rivers",col="red") } \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.density(log(rivers),xlab="rivers",col="red", panel=function(x){ xx<-seq(min(x),max(x),length=100) yy<-dnorm(xx,mean(x),sd(x)) lines(xx,yy) rug(x) print(summary(yy)) } ) } } \keyword{ univar } \keyword{ iplot } aplpack/man/iconplot.Rd0000644000176200001440000011670013516603656014576 0ustar liggesusers\name{iconplot} \alias{iconplot} \title{ Icon Plots for Visualization of Contingency Tables } \description{ An icon plot is a graphical representation of a contingency table. \code{iconplot(} computes a icon plot of a data matrix (matrix or data frame) or of an object of class \code{table}. Based on argument \code{grp.xy} the data set is split into groups. Similarly the graphics region is divided into panels. Then the elements of the groups are visualized within the associated panels. } \usage{ iconplot(data , grp.xy = 2 ~ 1 , grp.color = NULL , grp.icon = NULL , colors , icons , vars.to.factors , panel.reverse.y = FALSE , panel.space.factor = 0.05 , panel.prop.to.size = c(FALSE, FALSE) , panel.margin = 0.03 , panel.frame = TRUE , panel.adjust = c(0.5, 0.5) , icon.horizontal = TRUE , icon.stack.type = c("lt", "lb", "rt", "rb")[1] , icon.cex = NA , icon.aspect = 1 , icon.stack.len = NA , icon.space.factor = 0.3 , icon.grey.levels = 2 , icon.frame = TRUE , icon.draft = TRUE , lab.side = c("bl", "br", "tl", "tr")[1] , lab.parallel = c(TRUE, TRUE) , lab.cex = 1 , lab.boxes = 2 , lab.color = c("#CCCCCC", "white") , lab.type = c("expanded", "compact")[2] , lab.n.max = c(20, 30) , lab.legend = c("cols","rows","skewed","horizontal","vertical")[2] , packer = c("icons", "numbers", "panel.legend", "stars")[1] , panel.text = NULL , mar = rep(1, 4) , main , verbose = !TRUE , ...) } \arguments{ \item{data}{ a data matrix, a data frame or an object of class \code{table}. Note: If the column or dimension names are elements of the following set of reserved names: \cr \code{.sign, .fraction, .color, .icon, .job.no, .x0, .x1, .y0, .y1}\cr strange results may occur; therefore, avoid these variable names. } \item{grp.xy}{ a formula specifying how the data set is divided into groups and defines in which panel an element of the data is represented. The formula \code{y1 ~ x1} means that the data set is split according to the levels of the variables \code{y1} and \code{x1} into groups. If \code{n.level.y1} and \code{n.level.x1} are the numbers of levels of the two variables the plotting region is divided like a chessboard into \code{n.level.y1} rows and \code{n.level.x1} columns. In this way we get \code{n.level.y1 * n.level.x1} fields that are called panels. In each of the panels the elements of the associated group are represented by pictogram elements or icons. If the argument \code{grp.xy} hasn't been set by default the first variable of the data set defines the grouping of the data along the x-axis and the second one the grouping along the y-axis. Instead of variable names the indices of the variables can be used. The definition of recursive groupings is allowed and is expressed by operator \code{"+"}: \code{y ~ 3 + 4} means that the horizontal range of the graphical region is split twice: At first the segmentation of the region is computed according to variable 3, in the second step the subranges of step 1 will be divided as a function of the levels of variable 4. A \code{"0"} on one side of the \code{~} character indicates that no splitting of the correspondent region is desired. } \item{grp.color}{ defines how the data are grouped with respect to coloring. The name of the variable used for coloring the icons (or pictogram elements) has to be assigned to \code{grp.color}. \code{colors[i]} defines the color of the icon belonging to the level \code{i} of the variable fixed by \code{grp.color}. } \item{grp.icon}{ defines how the data are grouped with respect the associated icon. The name of the variable used for selecting symbols or icons has to be fixed by argument \code{icons}. The symbol (icon) representing an observation depends on its level of the variable specified by \code{grp.icon}. \cr If additional variables -- separated by a \code{+} character -- are found the values of these variables will be used in the call of a icon generating function. For details see paragraph 'Details'. } \item{colors}{ set of colors used for pictogram elements. } \item{icons}{ defines the icons or the set of icons used by \code{iconplot}. If \code{icons} is a vector \code{icons[i]} is used to represent the observations whose level of the variable fixed by \code{grp.icon} is \code{i}. There are some alternatives to define the icons or pictogram elements: \cr * default: the default symbol is a rectangle.\cr * vector of numbers: numbers specify plotting characters of the graphics system similar to \code{points(..., pch = 13)}. \cr * list of raster images: the images are used as icons. \cr * character vector: \code{icons[i]} with an extension indicating a \code{pnm}, \code{ppm}, \code{jpg} or \code{png} image file: \code{iconplot} tries to use the image of the file as icon.\cr Otherwise \code{icons[i]} is interpreted as the name of an internal icon generating function.\cr * list of functions: \code{icons[i]} is interpreted as an icon generating function and is called to compute the icon for level \code{i}.\cr * list of icon descriptions. For details see paragraph "Details".\cr Note: If an image file is defined by an internet link it is temporarily downloaded using \code{tempfile()} and \code{download.file()}.\cr Note: Mixtures of these alternative definition don't work usually. Therefore, it is recommended to use one type of definition only. } \item{vars.to.factors}{ controls the transformation of variables to factors. If missing it is set to \code{TRUE} for each of the relevant variables. If \code{vars.to.factors} is a vector and if its elements don't have names the variables \code{1:length(vars.to.factors)} are transformed. \cr If \code{vars.to.factors} consists of named elements the names indicate the variables to be transformed. \cr If \code{vars.to.factors[i] == FALSE} variable \code{i} will not be transformed. \cr If \code{vars.to.factors[i] == 1} variable \code{i} is transformed to a factor. \cr If \code{vars.to.factors[i] < 1} the range of variable \code{i} is cut into groups in a way that we approximately get \code{round(1/vars.to.factors[i])} groups and each of the groups approximately contain \code{100 * vars.to.factors[i]} percent of the data. If \code{vars.to.factors[i] > 1} the range of variable \code{i} will be cut into \code{floor(vars.to.factors[i])} subranges of equal size and you get a factor variable with \code{floor(vars.to.factors[i])} levels. } \item{panel.reverse.y}{ logical, if \code{TRUE} the vertical axis is reversed. } \item{panel.space.factor}{ relative space inserted between the panels. } \item{panel.prop.to.size}{ a vector containing two elements which controls the sizes of the panels. The first entry determines the widths of the panels and the second one their heights.\cr \code{panel.prop.to.size[1] == 0} means all panels are of the same width. \cr If \code{panel.prop.to.size[2] == 0} the panels are of the same height. A value of 1 indicates that sizes should be computed proportional to the frequencies of the levels. Otherwise the sizes of the panels are fixed proportional to: \cr \code{frequencies^panel.prop.to.size}. } \item{panel.margin}{ controls the margins around the regions of the panels. If this argument is a vector of length four the elements refer to the four sides of the plot: bottom, left, top, and right. If this argument is set to \code{c(0, 0.1, 0.5, 0)} we get no additional margin below the panels and on the right-hand side. However, there will be an upper margin of size \code{100 * 0.5} percent of the height of the area containing the panels and a margin of size code{100 * 0.1} percent of the width on the left-hand is provided. } \item{panel.frame}{ logical, if \code{TRUE} a border line is drawn around each of the panels. } \item{panel.adjust}{ controls the adjustment of the panels within their regions. This argument modifies the internal coordinates and do usually not change the appearance of the plot. } \item{panel.text}{ vector of strings. The text \code{panel.text[i]} is written into \code{panel[i]}. The texts can be used for short describitions of the contents of the panels. To get an idea of the numbering of the panels you can set \code{panel.text = 1:20}. } \item{icon.horizontal}{ logical, if \code{TRUE} the stacks of icons or pictogram elements are plotted horizontally. This argument effects the way how icons are put into the panels. } \item{icon.stack.type}{ defines the method of plotting the stacks of icons: "r" or "l" are shortcuts for "right" or "left". "t", "b" correspond to "top" and "bottom", respectively. Note: Fractional parts of frequencies are represented by smaller icons. Adding the letter \code{"s"} (as a abbreviation for "shrinkage") to the argument \code{icon.stack.type} both dimensions of the icons are reduced. If \code{icon.stack.type} is a vector its elements define the different types of stacking for the panels. } \item{icon.cex}{ size of icons; this argument is similar to \code{cex} of \code{points()}. } \item{icon.aspect}{ aspect ratio of icons: width / height. } \item{icon.stack.len}{ maximal number of icons gathered to build a stack. If this length is decreased the number of stacks (rows or columns of icons) will increase. } \item{icon.space.factor}{ relative space between two icons. } \item{icon.grey.levels}{ controls the coloring of icons of class raster or images. If \code{icon.grey.levels} is of length 1 and if it is an integer the argument defines the number of color- or grey-levels of the icons. If \code{icon.grey.levels} consists of two or more values between 0 and 1 they are interpreted as grey limits. Level 0 represents \code{"black"}, and 1 indicates the maximal brightness. The default setting generates one color only (besides black and white). } \item{icon.frame}{ logical, if \code{TRUE} a border is drawn around each of the pictograms. } \item{icon.draft}{ logical, if \code{TRUE} raster images are generated by calling \code{rasterImage()} with the setting \code{interpolate = TRUE}. } \item{mar}{ this argument is delivered to the graphics device via \code{par()} and manipulates the margins of the plot. } \item{main}{ defines the title of the plot. } \item{lab.side}{ defines one or two sides that are used for margin information: "l" indicates the "left" side, "b" identifies the "bottom" as well as "r" the "right" and "t" the "top" side. } \item{lab.parallel}{ logical, if \code{FALSE} margin labels are perpendicularly constructed to the axes. If \code{lab.parallel} is a vector the first element is used for controlling the labels of the bottom or top side and the second one specifies the orientation of the y-labels. If one elements is set to 0.5 the labels of the last \code{xy} grouping variable are printed perpendicularly only. } \item{lab.legend}{ a character string indicating the kind of legend out of the vector \cr \code{c("cols", "rows", "skewed", "horizontal", "vertical")}. \cr Assigning a number of the set \code{1:5} to the argument is interpreted as an index of the set of the five types of legends.\cr \code{"cols"}: vertical legends, side by side at the bottom side of the plot. \cr \code{"rows"}: horizontal legends, line by line at the bottom side of the plot. \cr \code{"skewed"}: horizontal legends, line by line and the level names are rotated. \cr \code{"horizontal"}: horizontal legends, side by side at the bottom side of the plot.\cr \code{"vertical"}: vertical legends, line by line at the right side of the plot. } \item{lab.cex}{ sets the size of the characters of the labels and the legends. } \item{lab.boxes}{ defines the types of boxes around the margin labels: \code{lab.boxes == 0}: no boxes are drawn. \cr \code{lab.boxes >= 1}: small boxes around the labels are drawn. \cr \code{lab.boxes >= 2}: big boxes around the labels are drawn. \cr \code{lab.boxes \%\% 1}: defines the size of the separation line between the names of the variables and the names of the levels. } \item{lab.color}{ The first element defines the color of the box containing the names of variables or levels in the margins. The second element sets the color of the separation line between the variable names and the level names within the margins. } \item{lab.type}{ defines the design style of margin labeling: "c" or "e" are shortcuts for "compact" or "expanded". } \item{lab.n.max}{ is an integer vector consisting of three elements. The first element sets the number of characters during printing the labels of the levels. The second element defines the maximal number of level names to be plotted in the margins. \code{lab.n.max[3]} limits the number of labels of the color- or icon-legend. } \item{packer}{ defines the packer(s) which are used to fill the panels. If "icons" is an element of \code{packer} the observations will be represented by icons, pictogram elements or symbols. \cr If the character string "numbers" is found in \code{packer} in each of the panels the numbers of its observations will be printed into the areas of the panels.\cr The packer "panel.legend" plots the level combinations into the panels. This may be a useful feature as long as the number of the panels is small. Otherwise the texts of level combinations will overlap each other. The argument \code{cex} controls the size of the text strings. } \item{verbose}{ logical, if \code{TRUE} internal information is printed during the computation. } \item{...}{ arguments that will be passed to the graphics functions and suitable ones to the icon generating functions. } } %%% end of arguments \details{ \code{iconplot()} constructs an icon plot of a data matrix and a contingency table. In an icon plot each observation of the data set is represented by a small symbol or an image called pictogram or icon. A cell of a contingency table is visualized by a set of icons. The icons of a cell are plotted within a rectangular region which we call panel and an icon plot consists of a lot of panels containing the icons of the cells. Similar to the layout of contingency tables the set of panels are arranged in a grid-like manner. Considering a high dimensional contingency table you can concentrate on some of the variables and can construct suitable margin tables. Equivalently you can build a lot of icon plots to emphasize your viewpoint. By varying the actual arguments of \code{iconplot()} a huge set of appearances of plots results and the nicest one for your purpose can be choosen. \code{table}, \code{matrix} or \code{data frames} can be used as data input of \code{iconplot()}. Tables are allowed to have fractional or negative entries; these cases may occur by computing the difference of two tables or by changing the units of counting. Internally a table will be expanded to a data matrix. Fractional numbers are coded in a data matrix by the additional column or variable \code{.fraction}, to handle negative numbers the new variable \code{.sign} is added. The argument \code{grp.xy} of \code{iconplot} defines the variables used for grouping and splitting the data dependent on the levels of the specified variables. Each group is represented within a panel as stated above. Let's have a look at an example: Consider you have a 2x3 contigency table and would like to represent it by an icon plot. So a plot to be constructed should have 2x3 panels and the number of icons of the panels should be given by the cell entries. To get an icon plot with desired panel structure you define the xy-grouping by \code{grp.xy = 1 ~ 2}. This means: The data set has to be split according to the two levels of the first variable and the y-range of the plot has to be divided in two rows of panels. On the other side the second variable defines the grouping concerning the the x-range and three columns of panels appear. As a result a icon plot is generated that consists of six panels arranged in two rows and three columns. The panels of a fixed level of the first variable are placed side by side, whereas the panels of a fixed level of the second variable are stacked one upon the other and a layout known from a chessboard results. As an example try: \code{x <- as.table(matrix(1:6, 2, 3)); iconplot(x, grp.xy = 1 ~ 2)} \code{grp.xy = 0 ~ 1 + 2} leads a double grouping on the x-axis and no vertical grouping. \code{grp.xy = 1 + 2 ~ 3 + 4} presums four or more variables and splits the graphics region twice along the x- and twice along the y-direction. Within a panel the entry of one cell is represented. Several arguments control the way how the icons are placed in a panel. The absolute size of the icons can be defined by \code{icon.cex}. \code{icon.aspect} fixes the aspect ratio of the pictograms (width / height). The elements in a panel are assembled into stacks; the maximal length of these stacks can be set by \code{icon.stack.len}; horizontal stacks are plotted if \code{icon.horizontal} is \code{TRUE}. Framing icons and spacing between them is controlled by the arguments \code{icon.frame} and \code{icon.space.factor}. The icons or pictogram elements may be colored dependent on the levels of a variable. The variable has to be established by argument \code{grp.color}. A set of colors can be defined by argument \code{colors}. Accordingly, the symbols or images are determined by \code{grp.icon} and \code{icons}. An icon or pictogram element can be generated by an icon generating function. The result of an icon generating function describes a standardized icon by a set of segments, polygons, splines and texts which are combined in a list. \code{segments}: \code{segments} are defined by a matrix or a data frame of 5 or 6 columns: Columns 1 to 4 keep the coordinates of the starting and ending points of the segments: \code{x.0, y.0, x.1, y.1}.\cr The 5th column contains the widths of the segments. The coordinates and the widths have to be choosen in a way that the icon fits pretty well into a plotting field of size 100mm x 100mm assuming the coordinates of the world window defined by: \code{usr = c(0, 100, 0, 100)}.\cr If the 6th column is available it defines the coloring of the segments. A value of "0" codes the color "white" and the other values are interpreted as usually: "1" means "black" and any other color is processed as \code{col} in \code{points}, for example. An \code{NA} value instead of a color instructs \code{iconplot()} to color the segment dependent on the associated level of the variable fixed by \code{grp.color}. Segment objects must have the class attribute \code{"segments"}. \code{polygon}: Polygons are defined by a matrix or data frame of 2 or 3 columns. Colums 1 and 2 store the coordinates of the vertices of the polygon. A third column fixes the coloring of the polygon. The class attribute of this kind of element has to be set to \code{"polygon"}. \code{spline}: Splines are defined by a matrix or data frame of 3 or 4 columns. Colums 1 and 2 store the coordinates of the points which form the basis of the spline. The third column keeps the line width of the curve. The optional fourth column shows how to color the spline. Splines are identified by class attribute \code{"spline"}. \code{text}: Text elements of a generated icon are defined by a data frame of 3, 4 or 5 columns. The first two columns of the object store the coordinates of the positions of the text(s). The third element stores the text information and the fourth is used to set the size of the characters. The fifth fixes the coloring of the text. The class attribute of a text element is \code{"text"}. There are some internal icon generating functions. Here is a list of them: \cr \code{BI, TL, cross.simple, cross, circle.simple, circle, car.simple, car, nabla}, \code{walkman, smiley.blueeye, smiley.normal, smiley, smiley.sad, mazz.man, bike}, \code{bike2, heart, bend.sign, fir.tree, comet, coor.system}. } \value{ \code{iconplot()} returns a list consisting of three elements. The first element is the matrix \code{jobs} whose lines show some attributes of the panels. In a row of this matrix you find the number of the panel \code{.job.no} and the location of the panel (in user coordinates: \code{xmins, xmaxs, ymins, ymaxs}). The second element is a copy of the modified data matrix which is used for the construction of the icon plot: Besides the data delivered by the user there are columns showing the colors, icons and coordinates of the pictogram elements. The third element contains the output of \code{par()} and describes the graphics device during the computation; this list differs from the parameter settings after leaving \code{iconplot()} because the state of graphics parameter before calling \code{iconplot()} is restored. These three lists may be helpful if you want to add further graphical elements to the plot. } %\references{ % under construction %% ~put references to the literature/web site here ~ %} \author{ Hans Peter Wolf } \note{ Remark: the version of \code{iconplot} of this package is an experimental version. Therefore, in the future some of the features may be changed and it is not sure that the function works as described on all types of graphics devices. In case of errors feel free to write a mail. Additional information and examples are found on the web page\cr \url{http://www.wiwi.uni-bielefeld.de/lehrbereiche/statoekoinf/comet/wolf/wolf_aplpack}. } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{mosaicplot}, \code{pairs}, \code{puticon} } \examples{ # HairEyeColor data, grouping by color iconplot(HairEyeColor, grp.color = 1, grp.xy = NULL, colors = c("black", "brown", "red", "gold"), icon.space.factor = 0, icon.aspect = 2, main = "grouping by color") # HairEyeColor data, grouping by color and symbols iconplot(HairEyeColor, grp.icon = "Sex", grp.color = "Hair", grp.xy = NULL, colors = c("black", "brown", "red", "gold"), icons = 18:17, icon.frame = FALSE, lab.cex = 0.8, icon.space.factor = 0, lab.parallel = !FALSE, main = "grouping by color and icons") # HairEyeColor data, grouping by x and color iconplot(HairEyeColor, grp.xy = "0 ~ 1", grp.color = 2, colors = c("black", "brown", "red", "gold"), icon.stack.type = "tr", icon.space.factor = c(0, 0.4), lab.cex =0.7, main = "grouping by x and by colors") # 2-dim, 1 split in y, 1 split in x, grouping by color iconplot(HairEyeColor, grp.xy = "1 ~ 3", grp.color = 2, colors = c("brown", "blue", "brown3", "green"), panel.frame = FALSE, icon.stack.type = "bl", lab.cex = 0.7, main = "grouping by x and y and by colors") # 3-dim, 2 splits in x, 1 split in x, margin labs on the right iconplot(HairEyeColor, grp.xy = "2 ~ 1 + 3 ", grp.color = 2, panel.space.factor = c(0, .1), panel.margin = c(.05,.03,.03,.01), icon.stack.type = "lb", icon.stack.len = 7, icon.frame = FALSE, icon.space.factor = .0, lab.parallel = c(TRUE, FALSE), lab.color = c("lightblue","green"), lab.side = "br", lab.boxes = 0.2, lab.type = "compact", lab.cex = 0.8, main = "grouping: 2~1+3 and by color, margin labs variations") # 3-dim, 3 splits in y, icon.aspect = NA iconplot(HairEyeColor, grp.xy = "3 + 2 ~ 1", grp.color = 3, panel.margin = 0, panel.space.factor = 0.1, icon.stack.type = "lb", icon.horizontal = TRUE, icon.stack.len = 5, icon.space.factor = c(.1, .3), icon.aspect = NA, icon.frame = FALSE, lab.boxes = 0.3, lab.color = "grey", lab.side = "tl", lab.parallel = TRUE, lab.cex = 0.7, lab.type = "compact", main = "grouping: 3 + 2 ~ 1 and by color") # 3-dim, plotting characters as icons data <- as.table(array(0:23, 2:4)) iconplot(data, grp.xy = 1 + 2 ~ 3, grp.color = 3, grp.icon = 2, icon.aspect = 2, icon.horizontal = TRUE, icons = 15:18, icon.stack.type = c("lb", "lt", "rb","rt")[3], icon.frame = FALSE, lab.cex = .6, lab.type = "compact", main = "1+2 ~ 3") # 3-dim contingency table: panels of different sizes, 1 split in y, 2 in x # packer numbers \donttest{ ## because of computation time iconplot(Titanic, grp.xy = 1~3+2, grp.color = 1, packer = c("icons", "numbers"), panel.prop.to.size = 0.5, panel.frame = !TRUE, panel.margin = .01, icon.aspect = 0.15, icon.stack.type = "lt", icon.space.factor = 0.0, icon.frame = FALSE, lab.side = c("bl","br","tl","tr")[1], lab.type = "compact", lab.cex = 0.8, lab.boxes = 1.1, lab.color = "lightgreen", lab.parallel = TRUE, main = "different sizes of panels") } # 3-dim contingency table: panels of different sizes, 3 splits in y \donttest{ ## because of computation time iconplot(Titanic, grp.xy = "4 + 3 + 1 ~ 0" , grp.color = 4, colors = c("green", "red"), packer = c("icons", "numbers"), panel.frame = FALSE, panel.margin = .01, panel.prop.to.size = .3, panel.space.factor = 0.05, panel.reverse.y = TRUE, icon.space.factor = 0.5, lab.side = "l", lab.type = "compact", lab.parallel = c(FALSE, TRUE), lab.cex = 0.7, main = "Titanic data, different sizes of panels") } # 3-dim contingency table: panels of different sizes \donttest{ ## because of computation time iconplot(Titanic, grp.xy = "0 ~ 4 + 3 + 1 " , grp.color = 4, colors = c("green", "red"), panel.frame = FALSE, panel.margin = .01, panel.prop.to.size = .2, panel.space.factor = 0.05, panel.reverse.y = TRUE, icon.space.factor = 0.5, lab.side = "b", lab.type = "compact", lab.boxes = 0.2, lab.parallel = c(FALSE, TRUE), lab.cex = 0.6, lab.color = c("lightblue"), main = "Titanic data, different widths of panels") } # 3-dim contingency table: panels of different sizes, 3 splits in x \donttest{ ## because of computation time iconplot(Titanic, grp.xy = 3 + 2 ~ 1, grp.color = 2, panel.prop.to.size = 0.66, icon.space.factor = 0.4, panel.space.factor = 0.1, lab.type = "c", lab.cex = 0.7, lab.boxes = 1.2, lab.color = c("lightblue"), main = "Titanic: panel.prop.to.size = 0.66") } # comparing iconplot and mosaic plot # par(mfrow = 2:1) iconplot(HairEyeColor, grp.xy = 2 ~ 1 + 3 , lab.parallel = c(TRUE, TRUE), colors = "red", panel.reverse.y = TRUE, panel.prop.to.size = TRUE, icon.space.factor = 0.5, icon.aspect = 2, lab.cex = .6, lab.boxes = 1, lab.color = "grey", # lab.side = "lt", panel.margin = c(0.00,.035,0.0,.050), main = 'HairEyeColor: grp.xy = 2 ~ 1 + 3') mosaicplot(HairEyeColor) # par(mfrow = c(1,1)) # relative frequences data <- as.table(Titanic / max(Titanic)) iconplot(data, grp.xy = 1 ~ 2 + 3, grp.color = 4, panel.frame = FALSE, panel.space.factor = 0.05, icon.horizontal = !TRUE, icon.space.factor = 0.103, icon.stack.type = "b", icon.aspect = 0.5, main = "Titanic: relative frequencies", colors = c("black", "green")) # negative and fractional cell entries \donttest{ ## because of computation time data <- HairEyeColor; Exp <- margin.table(data, 1) for( d in 2:length(dim(data)) ){ Exp <- outer( Exp, margin.table(data, d) ) / sum(data) } Diff <- Exp - data cat("observed:\n"); print(data) cat("expected:\n"); print(round(Exp, 3)) cat("deviation: expected - observed:\n"); print(round(Diff,3)) iconplot(Diff, grp.xy = 1 + .sign ~ 2 + 3, grp.color = ".sign", colors = c( "red", "green"), panel.reverse.y = TRUE, panel.frame = FALSE, icon.stack.type = c("t","b"), lab.boxes = 1.2, lab.color = "lightgreen", main = "deviations from expectation: HairEyeColor") } # relative differences of expectations, split according sign data <- margin.table(Titanic, c(2,1,4)); pT <- prop.table(data) eT <- outer(outer(margin.table(pT,1), margin.table(pT,2)), margin.table(pT,3)) data <- as.table(pT - eT); data <- data / max(data) iconplot(data, grp.xy = Survived + Sex + .sign ~ Class, grp.color = ".sign", panel.frame = FALSE, panel.reverse.y = TRUE, panel.space.factor = 0.05, icon.horizontal = !TRUE, icon.stack.type = rep(c("t","b"), 2), icon.aspect = 2, icon.space.factor = 0.1, lab.boxes = 1.2, lab.color = "lightgrey", main = "Titanic: difference to expectation") # using a foto as icon, rentals of flats in Goettingen 2015/12 rentels <- structure(list(Rooms = c(2, 3, 2, 2, 3, 2, 2, 3, 2, NA, 2, 2, 3, 4, 4, NA, 3, 2, 3, 2, 4, 2, 1, 2), qm = c(43.13, 86, 48, 66.62, 76, 49, 59, 97, 45, 87, 46.39, 71, 65, 100, 75, 178, 94.07, 56, 97, 70, 132, 43, 24, 48), Eur = c(365, 480, 480, 660, 500, 410, 440, 1200, 450, 696, 420, 710, 747.5, 1300, 450, 990, 900, 520, 1020, 1005, 924, 610, 375, 420)), class = "data.frame", row.names = c(NA, 24L)) fname <- system.file("src", "tm1.jpg", package="aplpack") # fname <- "tm1.jpg" print(fname) iconplot(rentels, grp.xy = Eur ~ qm, vars.to.factors = c(1, .5, .3), panel.frame = FALSE, panel.space.factor = 0.2, panel.prop.to.size = 0.7, icons = fname, icon.frame = FALSE, icon.space.factor = 0.05, lab.parallel = c(TRUE, TRUE), lab.legend = "cols", main = "rentels of flats in Goettingen 2015/12") # size by .fractions, color by rooms data <- cbind(rentels, .fraction = (rentels[,3] / max(rentels[,3]))^.5) iconplot(data, grp.xy = Eur ~ qm, grp.color = Rooms, vars.to.factors = c(1,.5, .3), panel.frame = FALSE, panel.space.factor = 0.1, panel.prop.to.size = 0.7, icons = fname, icon.stack.type = "s", icon.frame = FALSE, icon.space.factor = 0.05, lab.cex = 0.8, main = "size fby .fractions, color by rooms") # jpg files as icons \donttest{ ## because of computation time data <- as.table(Titanic[2:3,,,,drop=FALSE]) / 10 fname1 <- system.file("src", "walkman-r.jpg", package="aplpack") # fname1 <- "walkman-r.jpg" fname2 <- system.file("src", "pw-esch.jpg", package="aplpack") # fname2 <- "pw-esch.jpg" p.set <- c(fname1, fname2) iconplot(data, grp.xy = 2 ~ 3+1, grp.color = 1, grp.icon = 3, icons = p.set, colors = c("blue", "green"), panel.space.factor = 0.05, panel.prop.to.size = c(.5, .5, 1), icon.aspect = 1, icon.space.factor = .10, icon.horizontal = TRUE, icon.draft = FALSE, icon.stack.type = c("lb", "lt", "rb","rt")[1], icon.grey.levels = list(2, 10), lab.side = "t", lab.cex = .7, main = "walkman and pw icons, scaled subset of Titanic") } # files of different types as icons \donttest{ ## because of computation time fname3 <- system.file("src", "pw-esch.ppm", package="aplpack") # fname3 <- "pw-esch.ppm" fname4 <- system.file("src", "pw-esch.png", package="aplpack") # fname4 <- "pw-esch.png" p.set <- c(fname2, fname3, fname4) iconplot(trees, grp.xy = Girth ~ Height, grp.icon = Height, grp.color = Volume, vars.to.factors = c(Volume = 4, Girth = 3, Height = 3), panel.space.factor = 0.05, panel.prop.to.size = c(.7, .45), panel.frame = FALSE, icons = p.set, icon.cex = 14, icon.grey.levels = 6, icon.space.factor = 0.05 ) } # using raster graphics objects as icons data <- as.table(Titanic[1:2,,,,drop=FALSE])/10 image1 <- as.raster( matrix( c(1,0,1,1,0,1,1,0,1), ncol = 3, nrow = 3)) image2 <- as.raster( matrix( c(1,0,1,0,0,0,1,0,1), ncol = 3, nrow = 3)) iconplot(data, grp.xy = 2 ~ 4+1, grp.color = 1, grp.icon = 4, colors = c("blue", "green"), icons = list(image1, image2), icon.aspect = 1, icon.space.factor = .10, icon.horizontal = TRUE, icon.draft = FALSE, icon.stack.type = c("lb", "lt", "rb","rt")[1], icon.grey.levels = list(2, 10), lab.side = "t", lab.cex = .7, main = "some Titanic data") # using internal generator "fir.tree" \donttest{ ## because of computation time data <- trees iconplot(data, grp.color = 3, grp.xy = 1 ~ 2, vars.to.factor = c(5, 5, 8), icons = "fir.tree", colors = rainbow(8, start = .1, end = .5), icon.frame = FALSE, lab.legend = 2, lab.cex = 0.7, main = "grouping by vars and by colors") } # using different internal generators data <- trees iconplot(data, grp.color = 1, grp.xy = 1 ~ 2, grp.icon = 2, colors = c("orange", "green", "orange", "red"), icons = c("nabla", "BI", "walkman", "car.simple", "bike", "circle"), vars.to.factor = c(3,6), lab.legend = 2, lab.cex = 0.7, main = "grouping by vars, by icons and by colors") # Traveller plot proposed by M. Mazziotta and A. Pareto Mazzi.Pareto <- structure(list(Region = c("Piemonte", "Valle d'Aosta", "Lombardia", "Trentino-Alto Adige", "Veneto", "Friuli-Venezia Giulia", "Liguria", "Emilia-Romagna", "Toscana", "Umbria", "Marche", "Lazio", "Abruzzo", "Molise", "Campania", "Puglia", "Basilicata", "Calabria", "Sicilia", "Sardegna"), Mean = c(98.74, 104.07, 101.38, 106.1, 104.38, 105.55, 102.76, 103.62, 101.84, 103.52, 102.05, 97.88, 102.9, 91.43, 94.12, 96.78, 93.55, 92.59, 96.29, 100.45), Penalty = c(0.43, 4.23, 0.64, 0.63, 0.77, 0.34, 0.29, 0.46, 0.27, 0.22, 0.15, 0.82, 1.3, 1.02, 0.37, 0.21, 2.37, 0.51, 0.31, 0.76), MPI = c(98.3, 99.84, 100.74, 105.47, 103.61, 105.21, 102.47, 103.16, 101.57, 103.3, 101.9, 97.06, 101.6, 90.42, 93.75, 96.58, 91.18, 92.08, 95.98, 99.69)), .Names = c("Region", "Mean", "Penalty", "MPI" ), row.names = c(NA, -20L), class = "data.frame") dm <- cbind(Mazzi.Pareto, col = as.factor(rep(1:4, 5)), # as.factor!! row = as.factor(rep(1:5, each = 4))) # as.factor!! iconplot(dm, verbose = !TRUE, x.text = 60, y.text = -10, #t3s grp.xy = row ~ col, grp.icon = 0 + Mean + Penalty + Region, vars.to.factor = FALSE, icons = "mazz.man", panel.reverse.y = TRUE, icon.space.factor = 0, icon.frame = FALSE, lab.parallel = TRUE, lab.side = c("",""), main = "Traveller plot") # definition of a check list, tally or 'Krebholz' check.list <- function(x, colors = rainbow(length(x))){ num.split <- function(x, div = 5){ x.name <- as.character(substitute(x)) xn <- lapply( x, function(x) c(rep(div, x \%/\% div), if( 0 < ( h <- x \%\% div) ) h ) ) len <- max(sapply(xn, length)) xn <- lapply( xn, function(x) c(x, rep(0, len - length(x) ))) xn <- matrix( unlist(xn), ncol = len, byrow = TRUE ) xn <- as.table(xn) dimnames(xn) <- list( seq( along = x ), 1:len) names(dimnames(xn)) <- c(x.name, "Blocks") xn } x.split <- num.split(x) rownames(x.split) <- paste(sep = ":", 1:length(x), x) iconplot(x.split, grp.xy = 1 ~ 2, grp.col = 1, colors = colors, panel.space.factor = c(0.4, 0.3), panel.frame = FALSE, icon.stack.len = 5, icon.space.factor = c(0.4, 0), icon.asp = NA, icon.frame = FALSE, lab.side = "l", lab.cex = 0.7, main = paste("score of", substitute(x))) x.split } set.seed(13); data <- sample(1:50, size = 15) check.list(data) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ graphics } % \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line aplpack/man/bagplot.pairs.Rd0000644000176200001440000000373213516603653015511 0ustar liggesusers\name{bagplot.pairs} \alias{bagplot.pairs} \title{ \code{pairs} plot with bagplots } \description{ \code{bagplot.pairs} calls \code{pairs} and use bagplot() as panel function. It can be used for the inspection of data matrices. } \usage{ bagplot.pairs(dm, trim = 0.0, main, numeric.only = TRUE, factor = 3, approx.limit = 300, pch = 16, cex = 0.8, precision = 1, col.loophull = "#aaccff", col.looppoints = "#3355ff", col.baghull = "#7799ff", col.bagpoints = "#000088", ...) } \arguments{ \item{dm}{ datamatrix, columns contain values of the variables } \item{trim}{ fraction or vector of fractions of data points that should be removed from the variables before computing } \item{main}{ title of the plot } \item{numeric.only}{ if TRUE only numerical variables will be used. Otherwise an transformation to numeric will be performed.} \item{factor}{ see help of bagplot } \item{approx.limit}{ see help of bagplot } \item{pch}{ see help of bagplot } \item{cex}{ see help of bagplot } \item{precision}{ see help of bagplot } \item{col.loophull}{ see help of bagplot } \item{col.looppoints}{ see help of bagplot } \item{col.baghull}{ see help of bagplot } \item{col.bagpoints}{ see help of bagplot } \item{\dots}{ further arguments to be passed to \code{pairs} } } \details{ \code{bagplot.pairs} is a cover function which calls \code{pairs} and uses \code{bagplot} to display the data. } \value{ The data which has been used for the plot. } \author{Peter Wolf } \note{ Feel free to have a look inside of bagplot.pairs and to improve it according to your ideas. } \seealso{ \code{\link{bagplot}}, \code{\link{pairs}} } \examples{ # bagplot.pairs(freeny) # bagplot.pairs(trees,col.baghull="green", col.loophull="lightgreen") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ misc } \keyword{ hplot } aplpack/man/skyline.hist.Rd0000644000176200001440000001560113516603654015367 0ustar liggesusers\name{skyline.hist} \alias{skyline.hist} %- Also NEED an '\alias' for EACH other topic documented here. \title{ \code{skyline.hist} computes a skyline plot which is special histogram. } \description{ The function \code{skyline.hist} draws several histograms in one plot. The resulting image may look like a skyline. } \usage{ skyline.hist(x, n.class, n.hist = 1, main, ylab="density", night = FALSE, col.bars = NA, col.border = 4, lwd.border = 2.5, n.shading = 6, lwd.shading = 2, col.shading = NA, lty.shading = 3, pcol.data = "green", cex.data = 0.3, pch.data = 16, col.data = 1, lwd.data = .2, permutation = FALSE, xlab, xlim, ylim, new.plot=TRUE, bty="n", ...) } \arguments{ \item{x}{ one dimensional data set.} \item{n.class}{ number of classes that should be used to find the width of the bars of the histogram(s).} \item{n.hist}{ number of histograms that should be plotted.} \item{main}{ used for call of \code{title}.} \item{ylab}{ text for y axis.} \item{night}{ If \code{TRUE} the background will be colored blue. If \code{FALSE} there will be no colored background. Otherwise \code{night} is used as background color.} \item{col.bars}{ defines the color of the bars. If \code{is.na(col.bars)} and \code{night==TRUE} the bars will be colored gray. } \item{col.border}{ color of the borders of the bars.} \item{lwd.border}{ line width of the borders of the bars.} \item{n.shading}{ number of vertical lines for filling the bars of the histograms.} \item{lwd.shading}{ line width of the vertical lines for shading the bars. } \item{col.shading}{ color for the vertical lines for shading. If \code{NA} heat colors are used.} \item{lty.shading}{ line type for the vertical lines for shading.} \item{pcol.data}{ color of data points.} \item{cex.data}{ character size of plotting character.} \item{pch.data}{ plotting character of data points.} \item{lwd.data}{ line width for segments between data points.} \item{col.data}{ color for segments between data points.} \item{permutation}{ if not \code{FALSE} a permutation of the data set is erformed.} \item{xlab}{ text for y axis. } \item{xlim}{ range of x. } \item{ylim}{ range of y. } \item{new.plot}{ logical. If \code{TRUE} a new plot is constructed.} \item{bty}{ box type, used by \code{plot}. } \item{\dots}{ further graphical parameters passed to plot. } } \details{ \code{skyline.hist} computes several histograms and plots them one upon the other. The histograms differ in the positions of the first cells, but all cells have the same width. The parameters \code{n.class} and \code{n.hist} have the greatest effect on the design of the result. \code{col.border} allows to color the border of the rectangular boxes of the histogram bars. \code{col.bars} defines the fill color of the bars. \code{n.shading} defines the number of vertical lines of type \code{lty.shading} and width \code{lwd.shading} that are drawn within the boxes. Another feature of \code{skyline.hist} is to represent the data points. The data points of a cell are plotted according their x-values and their ranks (within the points of the cell). The resulting points are connected by line segments and you will see a time series running from bottom to top in each cell. The points and lines can be specified by \code{pcol.data}, \code{cex.data}, \code{pch.data}, \code{lwd.data}, \code{col.data}. To get rid of the original order of the data you can permutated them (\code{permutation=1}). The "skyline" of the plot may be similar to the skyline of a town and the vertical lines may look like small windows of buildings. In Young et. al. you find "shaded histograms". These histograms have triggered the idea of \code{skyline.hist} and the representation of a one dimensional data set by laying histograms on top of otheroverlied histograms. } \value{ The result of a call of hist is returned. } \references{ F.W. Young, R.M. Valero-Mora, M. Friendly (2006): Visual Statistics. Wiley, p207--208. } \author{ Peter Wolf, pwolf@wiwi.uni-bielefeld.de } \seealso{ \code{\link{hist}}, \code{\link{density}} } \examples{ # dev.off() print(par()) par(mfrow=c(1,1)) for(n.c in c(2,4,8)){ # some values for n.class for(n.h in c(2,4,3)){# some values for number of n.hist n.s <- 9 # value for number of vertical lines skyline.hist(co2, n.shading = n.s, n.hist = n.h ,n.class = n.c, night = n.h==3, col.border = n.h!=4) } } par(mfrow = c(1,1)) skyline.hist(x=rivers, n.class=4, n.hist=2, n.shading=0, main="rivers", cex.data=.5, lwd.data = .2, col.data = "green", pcol.data = "red", col.border=NA, night=FALSE, ylab="density") skyline.hist(x=rivers, n.class=4, n.hist=5, n.shading=0, main="rivers", cex.data=.5, lwd.data = 1, col.data = "green", pcol.data = "red", col.border=NA, night="blue" , ylab="density", col.bars =NA) skyline.hist(x=rivers, n.class=10, n.hist=2, n.shading=0, main="rivers", cex.data=.5, lwd.data = 1, col.data = "green", pcol.data = "red", col.border=NA, night=FALSE , ylab="density", col.bars = "lightblue") skyline.hist(x=rivers, n.class=10, n.hist=1, n.shading=0, main="rivers", cex.data=1, lwd.data = 0, col.data = "green", pcol.data = "red", col.border=NA, night=FALSE , ylab="density", col.bars = "lightblue" ) skyline.hist(x=rivers, n.class=6, n.hist=1, n.shading=0, main="rivers", cex.data=0.1, lwd.data = 2, col.data = "red", pcol.data = "green", night="orange" , ylab="density", col.bars = "white", col.border=1 ) skyline.hist(x=rivers, n.class=6, n.hist=1, n.shading=0, main="rivers", cex.data=0.1, lwd.data = 2, col.data = "red", pcol.data = "green", col.border=NA, night=FALSE , ylab="density", col.bars = "lightblue") skyline.hist(x=rivers, n.class=6, n.hist=1, n.shading=5, col.shading = "blue", main="rivers", cex.data=0.1, lwd.data = 1, col.data = "black", pcol.data = "green", col.border=NA, night=FALSE , ylab="density", col.bars = "green") skyline.hist(x=rivers, n.class=6, n.hist=3, n.shading=5, col.shading = "blue", main="rivers", col.bars = "green", cex.data=0.1, lwd.data = 1, col.data = "black", pcol.data = "green", col.border="white", night="magenta" , ylab="density") skyline.hist(x=rivers, n.class=6, n.hist=4, n.shading=5, col.shading = "blue", main="rivers", cex.data=0.8, lwd.data = 1, col.data = "blue", pcol.data = "red", col.border=NA, night=FALSE , ylab="density", col.bars = "green") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ misc } \keyword{ hplot } aplpack/man/spin3R.Rd0000644000176200001440000000203513516603654014116 0ustar liggesusers\name{spin3R} \alias{spin3R} \title{ spin3R } \description{ Simple spin function to rotate and to inspect a 3-dimensional cloud of points } \usage{ spin3R(x, alpha = 1, delay = 0.015, na.rm=FALSE) } \arguments{ \item{x}{ \code{(nx3)}-matrix of points } \item{alpha}{ angle between successive projections } \item{delay}{ delay in seconds between two plots } \item{na.rm}{ if TRUE 'NA' values are removed otherwise exchanged by mean} } \details{ \code{spin3R} computes two-dimensional projections of \code{(nx3)}-matrix \code{x} and plots them on the graphics device. The cloud of points is rotated step by step. The rotation is defined by a tcl/tk control widget. \code{spin3R} requires tcl/tk package of R. } \references{ Cleveland, W. S. / McGill, M. E. (1988): Dynamic Graphics for Statistics. Wadsworth & Brooks/Cole, Belmont, California. } \author{ Peter Wolf } \note{ version 05/2008 } \seealso{ \code{spin} of S-Plus } \examples{ xyz<-matrix(rnorm(300),100,3) # now start: spin3R(xyz) } \keyword{misc} aplpack/TODO0000644000176200001440000000015012236446647012367 0ustar liggesusers1. Snw-File -> pdf-file 2. bagplot -> Snw-file mit integrierten Bsp 3. stem.leaf -> mehrere Datensätze aplpack/DESCRIPTION0000755000176200001440000000232413517522464013410 0ustar liggesusersPackage: aplpack Title: Another Plot Package: 'Bagplots', 'Iconplots', 'Summaryplots', Slider Functions and Others Version: 1.3.3 Date: 2019-07-26 Author: Hans Peter Wolf [aut, cre] Maintainer: Hans Peter Wolf Depends: R (>= 3.0.0) Suggests: tkrplot, jpeg, png, splines, utils, tcltk Description: Some functions for drawing some special plots: The function 'bagplot' plots a bagplot, 'faces' plots chernoff faces, 'iconplot' plots a representation of a frequency table or a data matrix, 'plothulls' plots hulls of a bivariate data set, 'plotsummary' plots a graphical summary of a data set, 'puticon' adds icons to a plot, 'skyline.hist' combines several histograms of a one dimensional data set in one plot, 'slider' functions supports some interactive graphics, 'spin3R' helps an inspection of a 3-dim point cloud, 'stem.leaf' plots a stem and leaf plot, 'stem.leaf.backback' plots back-to-back versions of stem and leaf plot. License: GPL (>= 2) URL: http://www.wiwi.uni-bielefeld.de/lehrbereiche/statoekoinf/comet/wolf/wolf_aplpack NeedsCompilation: no Packaged: 2019-07-26 14:02:15 UTC; pwolf Repository: CRAN Date/Publication: 2019-07-29 07:50:12 UTC aplpack/build/0000755000176200001440000000000013516603747013000 5ustar liggesusersaplpack/build/vignette.rds0000644000176200001440000000032413516603747015336 0ustar liggesusersuO 0,!: | Ƞn5M!ٙi}gwB6®l )!Kp 9ȃ7KN*Dg5Tg.Q˛SQzyå_ha 5_}00iic.m*Sc PEP "YK*0 nMox]ze|wz& B>wrgXF9*ZTŢ2)cHPr :}d[E  kNJ٥j(TsOT *vbG= ܐ*Jg'\5{JQEf21%a2FViVzLH(aEPEPEPEPEu<&e@eae)# 3{n>EPEPEPU[Mk'#xv%>=5W8Š((ϛSCe9M>n<+>vs6QEs #jqg%ٳt+q">@^s@_%q$ D?0w 3ǟE%qGGݥԒ~!LTzqV<='CG?:$|92X\i1J`[@hy{eko-ıH^I$`I$椠 fPM:JeH#$dodV! JhW0R$mpG*J@p8x(Jԟǁk{so׌^ ?V8@y>\݇>$9(ʱy\ppIĻ!^LI ֒Ĥ֣gPpyRGOQ6t{X4Y.kj R^Cѿm+&]F4OΣ՚pǷz%S5(u[WdTKp r=ӥq?,x?-fo3WQ!@sqGQ UΣxLi":cyك ^>rG@ ?gO.-h%6 8 s]u4!&կ&|.ݫ=ys^mF|+y`emPs>#cBzuD>(x{Y %M+ bd{mqsMt\K]ݜ?qk7W D,QӨ>A⽋(hZ;,%,{pa|(w96z3>8lpAS 7`'8!8J<<}UW Ng:lDMES:)ݮ弥`Ϡ zOV|Ksnۿbۜg urBK0`X;؂+ֳgâi?VYo#'dA9_Z<3|$)cwIUX;aS؃޸O>-wtKXtB'IY| (r}x*x%~ḃf*B$6y<8q׮|IԡҾddk7c;ڞH.3ힽ+Ͼ.6xq%mt"~oqv#|Dz%oٵ|$x.Nx>hv;Iivb6'uXXh]ˀeU=@- #^_˃?؟fyqzC|1n%a;˂V<|Syws6ytM+Lᶉ]JTHߪ˙2WPNGѼ;I51}o(UeCN{ <5MWH.50Bt @'>Ǻ6^dHi #hc1x187@hmQHbD*œ0IOGC<7(^ cF +ap;Erz*yך}h;&6۠4<_ c7\l-7ߙjC$f47).,=h $d^+h}v{ou<iBÞ_j tk˹"JTtl.29he|X-/<3zLdÛ=ɎW$ f#o™nm<,[G$F8S_@PEPEC(mcP7nSO6yqrvrNK-/HaTiε9rX>O兜~e֟q ) ѰQ# ?3r,SC DpvFՠ5&Y $粒͙*9(q4Pt$);SW9{aҍ U!YHP|S/Z֒dzdz"ak0!\4P0 n9KUχtikD.!XC史pY@`Ʃmj5/ ~Yp^FCp^9ޛCSHm턶YRic9lE \A=XxH5n%uG`e- 5+dѴA Yjʺc!Ե='_ }0ZL$FX2Xg'9Qϯz|qxKD[q2FZ)@ m˱ڟ|9:Ƈ'tյ]i-4)٦< 'H|@ iYA\RiƉD4_Zm۷֮ pTik} uk3o\m6GNtN"FW.8}{A+BGWlދՎHŻo9,@*0*">O"ib f"0fFL6 vk+c[CEԴm5+8-^81I#7]1q[V }3NI )1ڊQmZ>y^/$4q QXPՠzSRA ) #]ʙ#C$si /tYoy{a Wa9$8bNHCz}Ux[FT}<a>ծCJ@3j P\7ޥ < b3#D~5HMK!2,K5ىɸtǜ)$ ӴGQ-/mԂLƯ29:ry$W|w6Qܤ ukeX0$[x[SƖ->W&J#hf`ٹn#uo hw3"ܝ7m`Õr')o٢"y{+ݷ1HID{rA#>j?=klT0lcEܸ8lܿ_zuͅ燴9-nxfO`C lzU?N 6np5J$Hie96㩠;k/Ķ~>m[Ij-QG N3٫`煾 "" mEXu)gh(W *unR`nbN:b#:[iՌwvbTYH*z8$t&0i|:_gNhr̸8*+!=Fס( ( ( j>&b.?F"[?*Ry#>z򎢊((>O\iXw"2$s1>kspǜ)g+ .4_ i&e.On6&[6PB|򞢊(+|~-7?.HNdfzgoP¸?=>>?-ۯ6P(EjkH {{5sSۣI N@vI՗cT{V-JTy#5\GmnyG+a@Q@~ftHlh˫8) ,HH$jz J(?xGRb:vmQEr/4]2'7K-(x၏!A>gX`OQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV-uDiAz<T; ܯ3.ɯ%eH76$h՜Ʋ [w2HQ\Wſo.lgCjI$*d`LrB+(((((&ދ#N0є¦m4Š(AEPEPEPEPEPEPEPEPEPEPYi!.,?>{y %bRs21+ӧ(ƥK[KH`]2[<7-+Hu.5qn9+l?"LHtY":MGqPEPEPEPEkz)ғ_fӭs%;B$IV"62IE]P*qDܿWc y%#U.i&|ec2%C8<]%yΗ&?:iI+A`#>WQ8'i|]k^2oya{%B#6# $'tcJIF[?7Ru+K]:J( ((((($9(ʱy\ppIĻ!^LI ֒Ĥ֣gPpyRGOQ?m7PaoeZ\i_p̮зj0ʑ}+c]-lR]:ݦe^`,!_©30]F3I+N^zZXxvHͱ Jv 뫨l绸}AI#`$sRԕ*J|^>w&XjV[lHBod!'FApHtM]J. JQL2Ks:Ʊ<H=Gs~[/M5xUFGV7 cX,O yZ]H) 0*r$kmKolj}^'=_;_Úo{Icrd :%vךTKw=y2jlw!$!QeTI.s8^y@Ҍ|}|49i;kkgL[eɁ'V1r'@6e0 ~j5-IhY2Ab8~&{+N_\C<7Ro:K p <$[y>(J*zlnQ[ƲCՃmFsZ5ŧiu' 2&6Xϕqg?4_18贯iڛQ<[O4SG$ 0G$pr;dUѕ(jV}Uܢ+c ( (?_moc3 *Jb+F.YP{2IJc,"rWGF>Y;+o۵]O[)fkXc˴Th ]2͒IZ5Hh"љmٕ@ nKY='m?_/v 1zcb+Oa͇ceK6wd񌚝+ - 13Qds4m ^M_Xy۫[?-* "VScq vTU{(KUE%Oo[yo5<1weL<{eWanizţK¬r#cy#' Mt/r4l4m 8##&uv?jͽrIc!IN:D*N2sNDюqQK﮶VWWEEaejK]O9 .[3]r+Ff@Y͜[NzѐSNd(ki$r$5k_7_MoTQ~\Ne6'|~@fbH H\]EU)lcV4׳aEUe2T:tsgѫ$HȒ6UX>Vƥe2T:pH'*1FΑ؎w6YT~f;(z7mtkh:co}>:tI$w6'$sօa~M2IvXy ;mnR۷h9irUE{5.i>4I9n4h9hwI?o!,}>kŤ?/-VVwcd{n#uwncA=\b5^8M'ːmlqujed$Bd 'i' xIhK5 64Se-QqClԟl?ȴ}s7"kQ~ҾJ~k+%hoC[T?a<P'r-h6Ż6qJS@æHl?ȴ}s7"iw%N?*ͥj^'hTeCKIDFydpۋUyӬNh#KgX`OQEQEW-7{xZ$QDȲ;[* eM~E2Q@;zAy?8`cPbOV8>SQEQEě٬ u,ѺXؙov34\ gVX l_P9}wwd˓͔<~pǐğ3q|(+a$9(ʱy\ppIĻ!^LI ֒Ĥ֣gPpyRGOQ?m7PaoeZ\i_p̮зj0ʑ}+CĿ>58wnێ3(sGz VQ.#$х),SUi0-:8^.mpTʰ A%JqWZ^tOEVc (mS~%仒2C2. .8^$jӝIr]׋txN[MIdwi u 8`.iKO jզ{/GU-8!U\Fc cb<7a_]Zyzն+E J`:jbAXoWf^_U*7՜?!]xVuׇͤ6y 6ZxgP>^V:^K$;e1+ +y%}֣0DӤ$3",FV P UUч/[4TZV~Z?4sB+?`uHVKg$69*Qxȑ8ſm,_~B)5ʩ[ vrqu.\:LpѬF8+` `Y]ïiD--3$g R5E< C& B5=/>ktZ6ov:+5 {Y⛋al=.OcMp 9x Iύ0"c)5(WMޛkԺ3v VQplO, bXL 5MRsfE6u)SX#c=w_FЬ㽇QYQE4 1Yߐpz8UۮgnHksm5.o\= 4#}9隶]_ɧm2 <$e&Tƹ14Nv);+aYpLj R:r$v;V$l|Yp{L y QgsE#͖U|NJ`i[7p_ڽ{|dTC9V Ut-QQҬm\n$dNzЦNra!#>幖*w)Wi,۲I; m{]CUZkm]U%#B_]j@E9b$dT[s]+QZ=[byWB6]2֯O$g#*e}8QXZOZ٢:i01q r aXݴ8&}s7" COܹM)Y~M!g܂OZ)YgVmXԟ6Tv])Pr074t\kW$m&ujh HJA\p5~h9hg?oEb8э/ AEsl?ȵ^V /#zTe-+ɸ}۹Ou Bh9hg?oEh9hg?oECϬi^E}rׂ!#@<H5>h9j _F6$['զV;pfrAWNr%8m岿s)Qq!-:1w>N d  4{oZT1e'`ݳfT'jų%TQǡٽgc2U9-Wwھ6cekYT axZfZgx* idپmܧ{bϽo.,Xb<./oth0i, M@_0:kr :?.%$;Q@dxc}s7" CYTRI#xZfZ>h9k!s7"ֆ{yi{ e\ 2V* ѐ€4*,VMTۧ,PFzsdԜv`QE ( ( (8s7 KKyӯ&.T\":) y'ue>&kpu(.-88HAż#79l~cP_ٴ928"JBEp^R((<s N$-|:gnLBJ>U ǜwV^{2$u ۉd{ala\|)-:`( ii:$6seqDYٖ$$5`ʽPEPϫYϷgJ-2ɣ8<~|wS-[[ 5wI] iyKs{(/lN uyG%!Vve X"8AAEQEy3ҡu̫hN>**wU#-b DDO6{$7;<" "dJ0vyEe{MI!.#$*̱! |^>U5( (8x_R֧nUԦfDfvUh@pJpC=ŨC<86Yer9,sHՂ/*Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@aplpack/vignettes/p2008-Aug27-150508.jpg0000644000176200001440000003174513516603654016616 0ustar liggesusersJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( +>qjM|v+2)G"t j.(ScG88$l3&pbWbԵfZ4سqHm-ce>]A,Wn4O>"4k.%W&I,pdbJ*2L5º&ikm#M6yTQZ|)8=ihR=.r(fye*9UQ^Wƻ+Ťqͦ˩2;G@>co1_\|UL>/w=\%4$qơxeNP'(3>UүKn.S@ jH>`s4JgF-E;@u #8>.QEQEQEQEQEQEQEaZGw4 pȞh8 iV9W뗾VXK9]eYcUJByD}OmP ^6=tn'H)dRdXs+~/ɢ~$M{BǴH6έ*N22OXF^G[巵 p<RN0ºǯ= [Iqc>.]k<4A(vGgawu&vCHI‹OY~%`#!֍=Rh}_.l[ՁsWLr|+gwYcՕDy1ev Nk,?hm^=RMM}=-EktiK!̡ehV>Ʋ}d%63)8d5>^#MG{xcIKw)ۃ}Տ[,uk \M?[H[lhpぃ8{Gžl?"ms& (cRu;kdHpAplbK(RMG @غ/p}y}9c +~*UZ+J)ߑ`K} wW7M~ú]i[v9@827:tPZOotGJ4< q #E(:uB?6OOZѼgI\I>bFTݴqwܖzsH>jZACyiڎs/k.b|=` V]VjFYJ3k p00y'(?#N~";/ G:A3iPQ~RPN9'c߆<#M7C .|tz0]EcjkzUpoPxnr2*|iw_![.5+ۋd&bKC #nqWN&-:;ipgIg dW-p1ۣi"#}P_6#s`!%en9wZX(K꿯-<[eY~ui)yU4 n>t; 1(wJ0HQ@oo76\m]#/̽s\c$1ͦeuw$d`bա!Â`݈( мKᯉ:fᘼ?ɚ;}Uݘ!,y8Ķ&hťޓke-͞=ŲK$]G`\B1!@"׮Q@_Ɖnl_n7lٕy=\ޫ;Puminu;[A#F) #tKXwp m39b޹\?xkV)k(sH?d+((((^GiW+4VмePI{T;gqaZCvoL%Αxlc7on㈃Y+z7\s 5Qo;qE!Mm%Ճ}Ar@=] pq d ku v Y#lXdztܥ9K3leYU@eA{Zj( ( ( ( ( ( ( ( (9<RA\?xkV)k*.$ʰġK3U@C! VO"otZᠳFpD/fP%NWB^~a~!+']PAEPEPEPEPMG4O\BV8eZpữՓcj E )?MBuc՛Ӗ=uBouaWWo<_(:`7YZ6X.[G %ZgKrQyw!j{áh0I4!-J E{_aaݧEfaY]r:0'Ti:I{y@A p H RTnW?ğ\^rEMIH]y£3b>((((((((( $_ K]syZ襮 48u{d{In@E"22 UJ :-%'ܞ j}6czIf8 ^4<[Xii;QA,p98?ƒZ#Ftxau(! a2rBkZG{}6#gieU#?(w`9<v* ~K<>!}(Г;tm=:?2'dF`C FA=+9]?Q "!6&nxlCkv7īϟ?֝%fm.hcdyɴgnʚخ~oxE-uGcuD&9F20tfEPEPEPEPEPEPEP?O'UZ+' *E-tQEW?xO²tCEu@Q@Q@Q@gkSYxsT}i,ʄQZ5NtCKwkѧYO*H#$Tfdh'~f6VpZ[ crNQ2y+_ڎ/>}ώa+ `OΤrJ`pYz 뗯.>N7ͷk;FBOhɶQEY{bE*^Bkgc/#$rJi:b.KHdAXwЃW4m? W el #i-^$Bx5FN)uWݯ<[n"[=8$h2(xB0A A<7V\[J6 dGjJ#]`odHl2Dw+r~((((((( $_ K]syZ襮 +]#Mk:.,Hḙ}v;:jG#HoD5q9@dHܺcH| sH?d+(((+\9K#"bY77w-'ᝦ/%:O.'gNPKN=+?7?*mWqG<ʪF~PrxoMjC}ƍ dUh1UQ@eIoe:ȇ;s(NG{VtMt+^GXw0zaف#V<>>z;O2), G$0%ؚ͈CXjS2#ɷ˜: c*ybr[t~1F4iWP9"4Ȝ(YiX}ZvzAEUQ@Q@Q@Q@Q@Q@?xkV)kO<5`_P'I𶝭hrn>eMo4}`ycJ& cM|I 7w0J:e$`p7ZEk7Hײi\yb̍02.Pƻ { w7zv6pG9w mV8P 4S[ﵩu B żQeKg"&_`I'!F9? WU_O|d4=Z K,9T%F#X3J_WӮYᛙudei2@#6$m)h(((_z(bPqZՓ|o~68`YOR:n r*zǦi:t'}*np@'!sH՛mV[՗ mGHF00ݚ*(( :ŜMż s}Re!c׀OCӡN\bY[0΀;Yy9rt-Gci#qVB^^A"+nu5]6'qY92$C?vV6sim tac)XU.CF@2EnO> w$Lg {cֵ!|Sm>KE *((((']{9o%Q6Ʒc@>E 3G mY斺y3B3d*냔efV8#j:Lmԥ-"_\I폕4&Z>Sshz}QEg8QEQEQEQEI熿k $_ K]QECEu]s!+']PAEPEko-ıH^I$`I$3Jm>#XSsoai3UFf8R,@4u-6/i#$R ,$ w팒XJmCT]HQmy05:s;'GƬ;eFD᱾J]kQEFEPEPEPEPEP\lQ;-[jeß|/VfLr0z)5r'xx3? ˢyos g1$'cc0lŠ(HQEQEQEI熿k $_ K]Q\ߍ5vs5+iooU 4lI` (4W?xO²ekw:Fkvd.M۾9>yeÃ6W5xO²tQECuo-QRHPF Ab,DpZʹ<Rz$UGm`znml88j\fVjk֬?\jzċ>k86Fx8"@rj՟Q4'ͺ#"(ڬX.0r$+MMl 5iKTŮ0+C((((((K=N6bE*Xgo(F׾H AlC\6jk!t;Ds ,hX ꪞj HB8x)^)#lt!H#!HqOsHVh,5 ' R\#{2Hc8ݭ0ɨb ;gIboq0q15\%C{c&f7j< Ţ䑁:oZm/7䳔#\u!E.[|:{~ejϯ߯#RÛ@n<>i  I#\s7ph SPҵK+x dYXsrZkkܢ&>o>ş4.wq-nm)|'8tjA^qkQEFg?O'UZ+' *E-tV^C[;up֑YY)+?X4z-u+:8I*" =T ?rxiW:e7bPꥒXt )x`:xw{e-rXx&-S$ӯx_I5uhgX sww-̂0K +1U8AFjmOa{ՅٹF΍PzJNsڀ46^x?^j5WdHD$Jz?wC4GaAU&Td,|3gLZ-ʳ7^ؼĶw#9bNOSޤu ";KoWt=7: 䪧>*mR}FTK.MPwE*ʣgZKD:'QM:M6^x?뛏gnlQіm.N6@?q<8}M7%S <'c KK$[s^ss1Mvþ!&-7>oS.`ǟ~5bY.X` a@.[q$ *R^N#'Nw}HyxCz$c}yo;ΐیgϵ [|Uqǝ,v}=8^947g5@ֺ},_)ˮ&<€ 懥׿ؐO|y]o=4<3v^!ޓդ>o_`nϑ}ns7ՅϊH1 Af?n[Լ?蚥-}K{uJbұ/'3>0GA >|]'& &Ѯ|4˜:.anm2?!uW9Kl~,w~ 5xYTQi4۵-̡֔K+dmNrSOdž!Ӯl5/d-Ft':\ OAH%^i/?t7F~>3z,IyyZˁ?|I7[I?\خ^fxmr_حԺȚK[#$`?;HcVůcd` /< ˂_6nSdӵIy :wmQ*NӾ_|!OxrC q #r=Qk7:7qo 62y:wE+#,6Q;*"Nt 8 ?ZOMY]GFh&W4cdh¡IXHr>?wC4@4-B[nZEsyeo@sgp*;G~M+kWk^ZF. YNF6GTP\AW>&4u'MAٗXJMg̞Cm3Yy=' >&be''v?F6L(-+f . |дOiO}+o7n.d82kBQ@Q@Q@Q@O?HԬuKCR7fY 15TI+| c( ( (1YCu?g>|3m15qjM|v+2)G"t j.(ScG88$l3&pbWbԵfZ4سqHm-ce>]A,Wn4O>"4k.%W&I,pdbJ*2L5º&ikm#M6yTQZ|)8=ihR=.r(fye*9UQ^Wƻ+Ťqͦ˩2;G@>co1_\|UL>/w=\%4$qơxeNP'(3>UүKn.S@ jH>`s4JgF-E;@u #8>.QEQEQEQEQEQEQEQEq*ab 6Jn$[(+4sP^ (/oy6].>Xb(٣.;CQl5YP̋P]>Hd d8NA@e'W'>;6wIp*mVPTJ0\ʁҤƶ4u &P,sYZM+;*$rI \=K [ƩJp%J[8Ѧᵛv;_@QC`$g{(Ӿ-Qէ|#]M[IT@0 ?x/[-m@[ s`ެCL}-İi𷛩5˨Ma)om v@EX4ox[me&XUM Ӆӻ R‹rԾ٬=3ZN$#y UCxZz^uhfK{H+n0y7WGBo< ;dgRI27*sV$: |_̯q%J KF9:s@_  huTԼc$nf3ӧ52_/d J9A\Ѿ(yu k,ll& Xt 11,6m,\MSoZ$pI41hm{gXE(ܥ@#=} 4/m,5Dm tVNK[URk'ټBSc1‘qY[x&Լ߲[#4_Зx9 GM>5RQE<Z gJeUO,IzSfO xHZodɹՓyTSc;$NXv#Aeom!A^wŋSX7o5,y+,~pߌ5?Ǣy_/w|[u2:z(^wndɠ88 ¹~2ir)"n}nen((3}%C6~$S3j7[1_&| 8#еɦ^yWFNڛyśQU(ܼ9+^"F1d /Ϸpl0NQE|57χ-.#&nm76$x@\^\9? WTUyc=}FJ)$qO409PpD_< uuu{ZZG}4\[#G xT<g(+^]˦.qN5ԓ@c 2)^4ŧ<sbnMn=BcƲ!ےquBkYCao}if,K6+ + ~oׂ;<'Maq}ix\4K]6+%~_א; (/ơbX"D$0ϡx4t::/MG1w^D1]YCo3H#OʊHh?I|/} SfmےmPEyޗM$fvnӁ]'%z>ׂ_jV6_e7}G~Ǜ1\Q@e-4` 4FD*q1;F4ۆk9#+#8J(OZփ<,FPaJ6Rr4(]Sz.j{˹JB(ZJ(' *E-tI熿k (+<'aY? C! VO"(((*9_kHc`*ҁ~}ks.C$,LGW${ҹ_!$&F1-*u  zdL̀0 qϭcxsJTy kU=%>\ ~ExEPEPEPEPEPEPEPEPEP?O'UZ+' *E-tV4y+h cz`]$;[̲ |ѯ iwvobKE[h9wlrP_t3VkIoG^_2?.1fb#3 blx:ucq}/m BthƯ{&*((((((((O<5`_W?O'UZ((?d++<'aY?: ( ( ( ]Fkd]2x*^["=@+{<$hZQz_5%w؍"F (՘ƺ)&ݑ5Q@(((((((O<5`_W?O'UZ(>{nVh푁;0X\9? WU[f[6 /:X[Nl&mv_9? WTQEQEQExeZ>HuX؃ =z{萿1ܨn | O rI66vX8~O>oVʫ`-~m+ϥVwtA%Qòt?B2ҘZ_ԒmV#72ф`<5(V*7VdM~w<源붑Acyys%U! U %2Jh^$ӥ;n[YI>I$vyvLF0yςZm$ڴD`#`ܟ~dy2>5CϦek8Oʏ\4^]k>"KHidv<\7ːJ ߉OuOeRB\GFwhO kgdE1 ا;\*UGs)|c IQ(\TQEt@QEQEQEQEQEQEQEI熿k $_ K]kVws\-aFd*b y/ETO]ś͆!PC'>dYkxV,e+fGRQGNN}CW)Swu+ݵkkmq[ͧ7Y'L e܊OJ6َw|K<[Y$WD1W34T H'ӬKm3Bm۴ qJ+ţ:4;]vjBTTtG_&E$z*z2=FAPiG_&ycw:kUi'&y& *i Jn:dl<WEH-B"77l|zlt5C~,W378W2N W\;."'hLgw:`OA\;Z5Ԡ.am ۤXQJJɌ*<,2z5o{ѓ~^jsEsڌ0H++Hvr"\OEZFWVWZ(2 ( ( ( ( (9<RA\?xkV)k;⻭v -NR.n$k5*m]nwmgo,[z5-[MѭT-,`g]L)lXqkmZ:x_CDOg Ѫ$' pi}coku U Eg>+y=XȂ:?27 *9? WU&O]_חz. ]Α!BCFٴB p[/Wn{[l .D r;M0XiG %dtTd\5i] #)$nvbYrIQM%Ս*NEU^yx__mDG6w^y.zWK=1?ÿz.KF,yytVFЖf>$ZG_&?hV˭fyk差ȣx~A;~_HTޗfF O/"co݅~e֗o ɸrdr2 Ylkзo^Ag,V4[EPo#~^2{/_Ð.ekk'iiv@`+&FM;wTע%:H#mo/bFA{]X~X_KE_pQEQEQEQEQEQEsyZ襮<RA@s~4.|El{خegX/s)*r.TIEq~Ηa% cepO4FUpjxCEu]s!+']PAEPEP7WPYwp 6F;UFI砢8.|ƲF#r8<55EpZΧqk 4hnm*-rQ$5J=.Wm]$Mek\SJ{ bU?b3nS 89{jōŞ dzSJ;˸g*F"(lVVIUg')w (V7"O 4vS*|5Y>)CZ [TgFڼ=Wd!Э2oҙh/xAֲ>=z}?F*TԿ, a@dƬ )NX7̦A~9+#N1o4jd 0)첱cF1$\ߦׅdI~1[UTIhҤDW q.92[j<3nx7nfF)${7mue88͟O%D'w][vXc% 2YnťtQEjpQ@Q@Q@Q@Q@?xkV)kO<5`_PEP\9? WUW?xO²tQEQEdE k'm^e֥r]r[Fhk6k|K__[ 'ʀ4M&Bo2p p 8SxnN?/R%7wi-p|X1fec:jra.U{rQElyEPU 86fe0 8~j5}8%*iV?ٚE}߷l߆Otk^=z֩?RsՔsP4?BF~+6$ϓ^xNu?oF[ՋM&S5}336FB}rO2|Ey& UZ[md2~Jk|,ćXKϳFҟ쥴 ,f 3;fud𽾧`dmw`@Ҿchccel2WNYu o{ E@*,|=)5khCZ &f2}:_'M\u7dk::Ņ[_ZDBH܌S#_Z:ū*YC.GNxF<[hNd),MGf]KJ쥤伋 ptrjƯh>,ΣgXO\n$.Y09 ; ( (z`s,i`Gp$ 2Ig$@׋4!P.qF\0mٴxɨ\jR\^%ZgRFJ/" ]UJճjF{ߧQEQQEQEUM7Mld0]@,@U)Y^s5+3ߵf]ٻWo1! H=3Jvq>fe(p5`=M˦~F~Жei%Ӓ_0~^3aYɨV0: 8PYo;s]rZ7ϬY#r&(S.C}B1DQ[GE MJy;̱,x.lԴĚBm-WnnEP (' *E-tI熿k (+<'aY? C! VO"(?'[>tzn9KʻFQ|YF Ӥ B~]b('W_ֵd?z֩|?QEQQEQEQEQEW+[]6;6;O2N1+sF2zmg#1kDN=DvF$'z6rx{ 6EKɬ$Op?aF$q6}ٱ']:$b$hLnk.J18=fOQݲb tW#Y԰^[:՜XʲI 8PYHnk5Իvԫʊӗo妾XYA-档 ^]Or` JȪ(b7zm>=GMYb&@ Fqߚ4[\+ĹX䳃t2 :#am:~ v`cXa6Z7UYXdMMQZ\ܸu)]B_Ɣ >sƥrWPE_[NnF*ir6q,u_ZG]oPԦwUWe\O|Aq?5u4w}RMqv5N*2*;zv (8(O<5`_W?O'UZ(iwK٭ [K{zYg2HYF\sH/^+5M!rotȄ.OsH/P /,$MK` ,p_^ҹ&G]V!YH#ޡҟUӵ+]P&/ң$Q[q;r6!u$K(WB|*r#FvLxI9Mx䍃+{r#4b %+֫5vsjWi} Kmm$eIU$gՓoV>ٲw<n|o;jl*Y_Ѽ{yF.Ҳ4l9qsײi=ˌlߓѲ{~O\ݗ&7Z2:4 kp"FѦbHsqP\?;oJ@j\x~ ♯ Tth exm9<|Jyx>?wϊOo1fxV-eDtR9_jٌ3|vmSRc~;x#%o߭:\c\pG+W?DjhU,l9Mݱ3D=aI]m83'y n`?]m?;hg&67\{;ͬ7ڥNj#Yn$cPňd֥ؗ5-!<:7 ه&6H2s/gӎ?wf%x|Kcj}֟(Kcr` @_o/5O Yb@><#u̐twn57_<9bA/q|}z {k&@P4Mf >qGQysET kygtv\;n&lhC]yMa>i]/͞އz,~.^z-[&-IԾm88mc\u{[vOT7)8G󯥺u\{#?1ikRѣE-3iMk-ғ콿=@$7ĚOLضiO;{q~s}׼Yugq=67Arspy 랔rK[x~ oRf1v9cW| ̹~;웱3׶WO+b>LM};̽|U}u\K. AtypX$Xodc9n}M7%TOmRoblj/-w}U~xgQ5.,VT/.Im ! ͏8,Y,qÞ*u{)5m5 V7?y#"ܓWI?wC4UbVgƝ_B4V"^%ۂXB=xGH~/sA=ݚ>n\I+".p e G$:Wۿe8FCsj%ꮋ"H-̌OeI k6KJ#FllT?8 G<>&6_I{[A&е s4Kr`T. <6^x?뛲|UcuEġypEX_cSy'.}M7%Q`rm$Q :DtbKH'+v-3fya۷~ 83РAEPEP^O2D]jQR}v->YizlW_k>tP+vR31X8ϤMjX. ksyRx5sMټb/'6+f+ "WzڕiHbYځ]Kħᘑzjtֹiaom*C"gV YM\w'M5p$<_dII_.088+!Z[k 4]2ga2ٴX'64wrEp~!X{RjieY$swuOj T^g<;ߗ9Q@y+K{sA:kCԌ&[6Kd#S&Ƙx@#*u'K '/#h8fQx?]}/Vqom^cFiGv~%i*, b¤j-FkIu9cKe@"0[t{P"J(_ƚ}esX]]kXI+.@o.'ns]E3N ~zyEy>/vKG )ѵJ=E,yFFbN.YMaȫudZJ@bҴ<9$͙J(Ě*JDt{qnĸn balpie['9JY Zأ?0`)VK['<'>Oy(BfҺnڼrVJRwEFei&~kx+jwy?("g,~A?2ϭ/5ΩVzzyYǂ/֮wu_]e0y)wBߧ]e2-QN`8<64嚺+ݞ k+!0;dL8ѣ-SR8|BtV)[jy>R,ou_] (Zj0| ̾Zf%ˌ 8*ݜҤ/%N|!9Mv|jMݺ÷(T1vʇ烩9gJyBRWfܴkJ^*N஢]EWmfb˜FKrRJZJQ- fr$Y)#dyNø[ qębK[q\ X✂G"FC3VV%jpVNK;W<Q~vӼx+j(ˇp[\4) 1ހӰ#T3:0Jv L jKDj@ҲN jK(X-~:m)]EWm;ǂ/֮\a ,[!-EPm- 'T哊pU_wʐb4a 6i܄lERn7jۤVJܥu_] (Zk?+Hb-5#[@FթN+.d9T瓶SC)uaNymŰtz>\Ƞ(TĮwu_] (ZjŦÅ1&v~fLЩRԥZ5)<s(plq0הU6eЋ0.\dhiǞIVN!y(|slkToҖ|Ւ|)=]EWm;ǂ/֮ڵrp˜+E2J"䥠eIJ3y*)QU";c>{D)m3 zum]réW;ǂ/̫֮j*^m-n+'2eykTY6 W1AmA{Az*RuJ#?/YZReܮwpߤ (Zk&la莺ⴡ%jH"I'>Ozc^M2|Q5rD ?vl_D{JD5f3+ei`cKjL[ KP 9'dfgSǎI1lcdljX\.Zz^ӗf rPVC Ap_S]vs=c{݅?smZ Ө 9rLi|`i[MZt]1͆!O|t:,֪O]cO+^יq)IFO2JR8%H_q.6XLQ:M)m,'Z =c Cޞ͆!O|u6MZ3arňox"Y/8lL5%LZPFIԠQ9WoBe?&i;b8$iӥ?yqκ Cޞ͆!O|u=.j}bqm-%&31*/":A!YDYz }𯂊sSa<%)9^Z\9D=`^Od{u.WߟtruMZPD$5J⁞Z׬^12Ub d!zm0╨:08+D=`^]aqQtu9VBw++& 뫮7%"Uةg)9I,ђy'!RMvp˓hu[\GhNB$HWLsaz{9D=yW'|SooyD Q1;z.2b4Á,x%I~1$Vo_,mX.d;E1|tn֬$WLsaz{9D=G(d_OMnwRj[;|z]|>PaBN GdMydruzUG][͆!O|t:dscr{yj?:Pĉ7ZhCi t%#Û Cޞ͆!O|urݎ2QN]^')+䮰:saz{[ϻ/.YWjrcYXJI:NBapc YS%ݚRAՂ:@=J>l0/Qz{6=+e5]/wZ.77"^V Aʹ$ W P;\\N8 5`^Nl0/Qz{ʶZk6)u;iG,haSm TrQK9se4m42B$:+9D=`^^,eRι]zOQ ϴ B@)#l0/Qz{6=P͗%ԒɕWzr02I9-2 #'I9fr_WX.R9fC*qӍ%lkQ$̓1dȼ\a*UŹ \[ɎV<ˉq!I9)!Y+!9 {y{/CFbY]2IEjsJO+0B 2JYIc+lY~B\ZqvScәaǛ[Z%2lAo rF{dŰnz4 Zm JWݢs\ $OID>aO?@Dk6w]q{ Z܆)J(rkS?kyEx~cŸqCRkT= r)mPAΚuPQ)I#>+դa6AD2ov X=o=N2jNf:ywB\P% G8VR ]Z"" V! $. ,BrX:쪦$K̫[lݻɼGqI-9$3@*@Fx=`;g#X::PX:짃{;*Ng{;)ʓʕݣďMG>X)@g~~}G>MG>X)@g~,rˢ)@)JP R)@)JP R)@)JP R=Tv_kDA"U+U#KDZ;C{:yu]\6HN6C| xtœQ'xaC;ө |zimPoW⥡k^7gMxq'C}KF WTp)ŏᶙٻl[W !eJ*j1ͣu|2hճӯmӳӟVr0H 2TOiqb΋)<+u(--@ G 8 F.'ٜܖb3[Ky2A9RP\r0勔{l!ZpԤ>46ېH>aO?@D֟ \L&R,&Tx0 n5`Za.<פ'VYˣ:[{y{;4zh?X+Vp+NTİmZ,(- d')c@ǩM1W:߹`Cr6nuNn0S{JFK faej'B@,Xno{c{%ږ̸̠PU9rXFa$x,=7@ǩZO+(b./np\qKO) '6Idzjcb\eȵb ʸJr@Q%!)HJ$%*'5ڛǠcԨ|twˆMC*HJJF@>@/9J?ͼz=JoRV|b ')޼4唄6Y0.R JBrBZĈ{} 6Xoj-8[|;ɶ` ;{EѥI786MVu+S-A( [Z>ź~ 9ob?7_! J?7֏nY{f !G5ilBKV|̜p>MbCi+\bF%xo=þ;--6ΜZgʠ9ob?7֏nL Ć|rAff=ըAm`jC+iKl!aƔˬA-I#g4^F0+.[@Sn I4BT)ZIRmMP7֏nNykGطOMbCiVBerBBƳYMK1"AZkoKS)Q k^CnlSnĖ+NX&K(C 2ʳPV7֏nNykGطOMbCip\XF'TINڜDWŅ;hQH'Wmy,ߛZ?so L6Ic[byף[jH2JRT˙89ob?7֏nL Ćaal|O1s&6Zovh fѕY+L[Z>ź~ 9ob?7_! R-+O֟{=\nSd!M2/OIjdN^^1c<[1!IXS.XWasq6bjRJ'ԐPiJv#Nb"o\[q 59ZBFIJRKn O17֏nNykGطOMbCi?m-{l-^< KP~"^"[w$OmơqlP SN$FykGطO<[1! = p_Mlu%,TZ. JRs5o-DcxnLN6r!PuIQ)mjN[?QAZRC瑾}ts[Z>ź~ 0*nCMU+!b_k^s[Z>ź~ g]};dUv}iJ>]yjRoOWm7{'ګ=UMw(;dUv}iJ>]yjRoOWm7{'ګ=UMw(;dUv}iJ>]yjRoOWm7{'ګ=UMw(;dUv}iJ>]yjRoOWm7{'ګ=UMw(;dUv}iJ}EGq :uRNP2+PJ7 ϙLq ^lxIJ١8A4F_~u9V%);ޢXCZqGͶO }Eu_]'))RBx:Z9+5FkI'(ji=Q~vԖNI ~we6[GƌWEzx[tzd4&V'l4v_6kJcSQee~w#=Q~vӼz+Ik*2hEH.26qUɜRNwi8Mv}jM a۔u*xx t5,|0v7 ҞPTپw-u׊sI=Q~vӼz+1ZS^Ҷ wYNBJW1KIJ6BЀRN $RGH$xNӺ[IqęjK[q\@{grV7Yʎ 9ŕ fh8t+'%wEu_](jjG.7|vM. nCiLgP%[e0*\x1B3!C@w}W\px춅订]EWmo8cc=2j@ ۍa!Gkoߌk ݢ4{&9㱩oV VL;LIýf|R=Q~vӼz+WZ3TѴ<[} pIy*A*B' T$Ä+ 8rȝTkK}|\7,%y\B0)DVbJ#'J] v஽'>OI;fO+BP,WÎմrc}>ܹlږ =H0GOͻ͆!O{ug,i7v˵q1FVW-i9J5͹5!@ O̬M|rE|h^Nl4/QJ{۩VJ FW7}.\4TWsW=iṷ2t3[)!Q{68͝n1|K#.Ig*F87溃 CҞ͆!O{u>Sjw{ ~ɴ:-#AKK GPHR5Ղ멦JPSm7g/gmX'c CҞ͆!O{tYW'T-|c?xz{ο^f*mr-%[O0n%l/[_,M&F")m B]1͆!O{tB Q GSo9i}b7[m,E6eb-( FhWoBe?i<#rF~3BsazzSpO_>Kco1_o~vL{QFhelD@:_w*J0;;xss CҞ͆!O{t['v۩u}G.wY$ItA%P h9;ƦJĀ5`uoZ 8mtxBh^Nl4/QJ{ۮZn躜 ;_Cݓ}z}*T3)9ƤFs|a}awO<6[eq)iahv I l4/QJ{ۧ6=*wOu[Q"p@֨=QRgS1aaJPaҵ-d $"ȅ" 2%1QDvRZ{(m+t]g͆!O{tBԲ݉EG ܽR=}/ʱ\³f\ǩҗeRFq^&mmj9Q?9&ߛ CҞ͆!O{t\A4.- \乾'ۚl4/QJ{ۧ6=V}{u92Ǣ,vNH,:=.uLnKZRA+tz>J>l4/QJ{ۧ6=+e5]/uZ.7"^V $V}i}(5G 8 Bw'WsazzS9нD=)nO*iئvwɧ",XZqP TqK9se4m40!)BH tWTsazzS9нD=)nYVʥs!k]u9?+1iRG9нD=)nh^['Cg6\RK&U^kߡ+´˷E&~*,N䝒qk稦ݮ-λݸv$e-joPJTR+gL_fN%5[ Ӣs qRf:"BSC) %KMo5.Qvfq+5g-rS O%Jq)HKI  g4/jdfSjHv;̨a+a`6RH89 s]pZ2dFۃrTH֒!gnq)#6E4ZJ[]ا"%>8_yenRY?Q'xC`gҵ:h6zZ;h +Y -xC`gҵ:hd)4])-lXw=)JJRRo'y,o9nHJU&Bt 6NTJ *rgE4%JCm\>#Jl%ipvUBű3nY߃1-F2bȐCHOӍ QH SW>Z/plOk2..{eƖ͠QN3Jt:dž _6ۧVv+yeفƞq ?m;rٰq1ټɍDCxơߓqJp9ozoL7k~4wJ3m'! +b3t6=K'wpM,\;aƹTG[BCR0E uҩ? '4nwgU@`RsaUeYk*! UkOtC"[jsZfQ^ەišZ ZKKAB? Ӏ/zT?mᵶβޥY22)IZRNTcvL€R(QJwemw?JjxtDiw^z7ku= -jTJI8ja~] +ZYAKo/!CCQ=c>'Nو+Z{Pn"I!/422FGAX[qem+ǐtGMz`;*9pzjh=ftUx- KD@?%z|=}kw٠>omLK&)[! qd>Lk히ʌ~5ޜ\Q3jN[1zvDGe<u[:PGlDvSQ=zvDGemy4xlj쥡H H$ $M)@*7:NW#pe},n|dW4ƸHVÈXe)~s~W#p+ϸV P\}±VN1_()JJRR()JJRR()JJR쿍QTv_~DVGKFz|~(5wˮjVM5G^!8ڰ9awM\֘:}$ 8PkGgi 9Ko/!CD64+kjŸxi{me,I* ݣ]_KNzwʷ=:%lYl  *):C}FmZ^YCcӻJ(^x5zs[7m(qV:=- 륹-Q̒('y'64+k՟mvjTgڳwV~@IQjOk}n2 &ڟr]BڞS)lo)|9R)@+C]x[33ےoqJK%䶕_ӆ u\unơ, L8%ǝ1C[{!;[)8qњ[|y~y >?5OEJҡdG5,nJxұ}ǜm+fjR2NwFRk@V\/gi%C#x}QS???J5of6M5lUrl0Xږ\67>jV?_SO V?_SO /$O%-H RJRR()JJRR()JJRR(QJwemw?JjxtDiw_/w_XAShNCL]#F#u+CJEyr1c*_Yp-gZC2l>) B6JpBRr@qtUCw9_)Pm;)H&|Ҽ\=aDofҵZ<:_O"4;7.oWtY_JIaMA}i 6ӎ9o[)Tu_98$`Ry8=ii'm?Գ}fĆWp{K7ӞNzf`T|$6*瓃޶Yp{K71!)U<R4瓃޶Y7_! Jo<R4 Hm, U'm?Գ}9oMbCi`Ry8=ii'm?Գ}0*nCK_[O,sNy8=iiSuXNzfs[O,sL ĆWp{K7ӞNzf`T|$6*瓃޶Yp{K71!)U<R4瓃޶Y7_! Jo<R4 Hm, v?Wp{K7\3pxPv`(,uL Ćw?F8LѶ4EH__E.-86Jҁ5ykGn7_! 5f:i)0Jèj:!@䶂 ps N't"|7.@K6ll2! #J$5瑾zi#}mh-1!pm-&4u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@X5yn'S#)!׆#)VA)JV+_yp/GS?aplpack/vignettes/sliderdensitywidget.jpg0000644000176200001440000002265613516603654020511 0ustar liggesusersJFIFHHC  !"$"$C'"T !1U"AT236QSau#$Vc4bqr5BCst%G7 !1QRq3Aa2rB#C ?&]8eAJRVME] Ts9tȰ!_88IIAT2̧ JB3E!\BNy//B[4'&vSjR%Z0;-H_|/ޮڈyETO? wFY*QYV25\I?!஢/ޮڒY<!]oӮ2a ⨧0hlh9fghL&N4h%ǥ5#y')̟ WEbƧ/R]?{!஢/ޮڛc1 @/Yr#CN:t,U%vo}F]D⯿r (zix+1XS¶ wYNBJW1KIJ5 Dr%$tNDŽ;W,IV$..0iܕ+|Ƞ(TĎr (zix+.Lě9r=2R;JkJR w%@QP[lq0ׄU6eЋ0.\dhiǞIVN!y(}@slkToҖ|Ւ|!ԶŸ0x03;NF1ecܬ$dkRBIvZ0S'JUjneOY^pspza."0aj4(%? Q,T<*Q# O+Yv)I|*O9s6~9]e?½&u.S ˤ}>B\ölKKn$K`qFFyhtD=)nŞ9nv&(تE')F[ٷ;R0+6(Z~efF_}u+殰sazzSNZPMB2rꥂK晸' S5"-7iק-j-]=_Jr24gď#N#[sazzSq\{xN ڮ?9yrmk-RiP9I _q&4Xڰ]q4Vv b-:Zt]1͆!O{t,֪O]cO+^יq)IFO2JR7l/_,M(&FQ~ B@D]1͆!O{t Q GSo9i}b7[m,E6eb-( #$PKŨv_˺~lvO7$iӥ?,ߝu6=ӛ CҞ녕z]|~տ}[K1MFfbU^Du BJ:@:^w*J2RsN\9D=)n`^Od{u.WߟtruMZPDRP%@-Gyk/*2Ձսkl6qJU `^Nl0/QJ{ۮZnຜ ;_Cݓ}z}*T3Rs4dIx7Vyrmk-RiP9I l0/QJ{ۧ6=*wOuv(8CfdTLNy˳̩0K%R@*_GI9Q$ƗV &*ALE?RVYz+9D=)n`^R2}/'7u;fO-ZL_ܩ|>PaBORG2|f莀2v9tuzUG][͆!O{tdscr{yj?ZPĉ6ZhCi t%#|fÛ CҞ͆!O{urݎ2QN]^'+殰sazzS[ϻ/.YWjrcYXJI:NBapc YS%- )I :@=*>l0/QJ{ۧ6=+e5]/wZ.77"^V Aʹ$VZfJ..MQɧHYl0/QJ{ۧ6=i[-5ຝ^n4?棋4yְT)\i R qYj*9geNn\M%[e %(@ $l0/QJ{ۧ6=׋*Tw_>^E|Cf3>BP Hu6=ӛ CҞdlWf˒Idʫy9~}r~VvOBRIܓH9f"v:{vQQEIm@g5+Vj9&{ CҞ͆!O{uE,E~nm/X5T)VuU`;kF|I^+zBTsQ'xmwҰ{Dm!R{F7J2艿qη:ZK(AB–KڈBN@^^_ '; eexxǚXmd%q9TiI0g X޹"N9 e+;im)k) 8Ԕ~ҫe `qg kDDp|JVG NiPTW`ݫ :(q9!OuXC-)KBHP]*+w-\UaH,^jq\7Vc@%Iȶ RDΡ\ p޵ۭx;yjJqOCN*I:o3f@U6 ĘA[c0l8Yf7$mkB+c$:l )T\8ZkܱG!TZm1h87JCRB@u +.}Ҭ-Wa<,kYF1M[mPI |99o\p8+q*7ˬPqe)CiB]A!*X:-* mۤavY+&{n,V ַ}p!j. I9S<ؓ V.:6~*ٞKg Ks%6u3+r)JJR쿕Tv_~ȃDVGgKF>>0?`D Y,J.oҐZBBri@)JP R(ew?J;VD%RZ;:_o"4D;2؂,keUX#1=(e 4BP  dnνƿ{:롩mPџk#?X)YKI mr>xA`N\Qalfr7^H*DF}iJ) I dmr>}'+YcʖX7=d3ogZB8Ε#=^>#?MG~RϵOSk3r>,rˢ)@)JP R)@)JP R)@)JP R=+]"N쿕TVΗH/|}(5] \ܭ!kʎ3dj6GwM\֘8}$8;Z:u$M- %#bOmvvLX2@ϒ%A8[caÉoZYV=磿RP!ĸ*Vm soU`ĩQIǙr?C}F mZ^?oӻJ^wxsi*xҍzs:sӞY5 O ׁ^Qho-jd- A;=$|t50).,qN!*HB4IXLYGE-0 yHVH*⊕jR3'=$>QaԻ&(ZZRJ tC1gTgTOބOҌ[ٯM [-wU\J6B,j\?jV?_SO V?_SO /O%-HRJRR()JJRR()JJRR(QZJwew?JjvtDi}SGqη=Ut&q#ÓvMC5i V NiR, ~61Oa[زȻ9zqV6[hL& # V9fN /@ Ro)!.GK井S!IHIAHu%"1?PUWܿ1.2Zψ\e\%9 (Ғ%JSum9W q|{AJ@4ݿ3JpJh}wqηu]yl:mOWm)@6['Ϋ|-UJP w;dvҔo|i>u]yl:mOWm)@6['Ϋ|-UJP w;dvҔo|i>u]yl:mOWm)@6['Ϋ|-UJP w;dvҔo|i>u]yl:mOWm)@6['Ϋ|-UJP w;dvҔܺ7V-༙çQʱ2n%G<\_~#>R_cL__*WX>c.6U8'#Q\2{ ^i<>4ч T[S<.on$RxY*6@9'Ey*i &=I(baĨF$>Zd=uI|${;]{0hQ@Q@Q@Q@Q@Q@Q@TrO / K,h>ȕV8=J+?Lt}oloydIvg8q(((((((W?&L7f:gw^qYUq}"{Io`0Wr@䑜ci~X|?yIu~o[R:/vIď+VS'r+iׇ֭ȑ{TcPAuNXv#Aeom!AW((((((((x^oiALnfdX`:혐s tE>c{AIyEk ı*f`P?Vc4yV^V6AqxXvo 6WћzIҤM ulrWq@ .qRHXu"Y-kHl3*I4w]oggY| HƒNFG׋Mu{m}e5E#؏Y xۮ;WE^CO~>%yV_i4ϖ3Wc +Wvc9GF*I)5[EQ5{-wLQӥimdgUf9V(A r;U=QEQEQEQEQEQEQEQEQEQEQEQEQEBVmiy{ ڤ 52TFU*: +/\!Эn纸[kkkHI, Uf,@aU擤.nf7Uck:1`Yl|5Z=<3V60ۢI&KmNH穭 ?#M].mtHZ;ުXOz/(((((((((((((+?X4z-u+:8I*" =T (L𾓤j26%[`Vb qCEu]s!+']P/_$O_?W pu|J"Ҹk)5?G^VY^V^o$|zGGyD?J殶/$A_W5u GEQZQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s!+']WA\9? WTKW\wHlx>+Ofd3ו=id3ו=iׇ[/7_^|5"ҹK]m~GQGx~AEVEPEPEPEPEPEPEPEPEPEPEPEP\ߍ4 ivp[-+lY \9 d$8ʰ܋#5W/"=-&.' -)&nx)d3Qꢀ)k—:_Նhd-+>I>HU[xO²gn[+`3F%r(|cܤz0;Z!+']P/_$O_?W pu|J"Ҹk)5?G^VY^V^o$|zGGyD?J殶/$A_W5u GEQZQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r~?izmY+E?,y挀bHPt[Oa6"i2Q|SR2|A#%zHh`x{F,1cDٺSda3p1?ᨠ{G>'k2,`Yvɘ #\k[?xf)oiYw,ͥ;cw(6υg?6gI{)]IuBȧnXr9? WTKW\wHlx>+Ofd3ו=id3ו=iׇ[/7_^|5"ҹK]m~GQGx~AEVEPEPEPEPEPEPEPEPEPEPEPEP'I𶝭hrn>eMo4}`ycJ& cMsC]Gnmm$ $R(## Ycp u"ˤk4 o.q%ȑ?~\5a|W?g+ozӬ?g+oz|WwRZh"1I.fXuUQcP H`_҉*VJF;|[竇̱].w̕kS^$ַZ4]#A'Wpw!bթXzZ\[kv1Hۺp-qjI 02XXʠk"lA<7V\[J6 dGk ((((((((((((+{i:7%$kEo4q2Q3pspH¹?bt6S{=N >%XHHfL0 0#me6H$ _ؚ (}ZW]BvqWAxO²ajX5?O^ͬA#4s]B&&Iv|͒-w 'ןaccc,bN: WFq[5>?HK_ȫmZumZu/%ۯ(zWl?*>_҉*VJ??a5\FVscQMtX& f)%#K<𑉡rŗUD}iEG[qo,sA*H2AG9((((((((((((_cӼ_hE} wɷwy&]EcBxXN`$VeJ6Nqހ9 O_HٿgongjV,̺2j śK6_ǃO5'/&=-59!:F F>a?2%ȑ?~\5a|W?g+ozӬ?g+ozӯ_>nĽ##3B|uQ>/҈п/~Dkm:bc?ӮyYw5u{϶[첷D/6qAVv!a^SXJ_-hӿ?½sO<5`_ 8nXoG噬1ܱkߍ)qV)9mb,s ,ҨWl䵺̅H T*X`A"{넕RMڌ;9 . c [=Sb((((((((((Zj]iBDK؞ +m<;96 VP5W' N[5Λ770ꓴ6(<\tXd0, h5x%ȑ?~\5a|W?g+ozӬ?g+ozӯ_>nĽ##3B|uQ>/҈п/~Dkm:bc?Ӭ?g+ozӬ?g+ozʟ/OgN=:QpcnQWYcI(ZRR9:rkUsZѥ'JN:]br^Z:\'SBj++\F A޽Ra9HĐ\D@ : A2A+C2@%\Gdy{Vωk׹fAbMߟD}&SSZmwn36,qjQ|0@c' 2J$wԯ |Oi&i4Hl IYѭ6.ִeCƣO%^O2ګlkާR j[MKBԕ}M৞T3NdQ6tw(ZZw<=jvuڮY%O1 \΀gjڵoatΒ+ͼek2{ j=> C I$JB=+O I֩;ExωkE߉,ҥԮk]*䆔AH=8|6c_C q\Vc;Ǟ5;}:W,ͧD.F@3X]%vJJw;8^.ES(((GǞ;:V̫*çJB3JRQW2`'c >'RYn4R]u$\ Fq(Tp* !Əh!(uXdӡnFОc.v +Z[/V68s"(*Qp l|C1Omc:8#4IX]vS&ѵzTk .aCU3p%$$v~y\Ǫ]qT7 Yg@ijÞ@Lj.u+]'~ox/ J2#Ue$*7Qy8 V^xEbbkFMIW# gF}Ex[x;tϲ3ǻtjw8u^>*mR}FTK.MPwE*ʣgZS&#/UwW[7Y63Gz筅]R7ˈa :Nnjĝe/d$L<}ImilgɅۍgsJnomwd~!O~c30KY8$ νz]{<t#bO6 _u7rA0{nq}5a $h/ h~A-*OΖyo;q?|/?győ>H,M&rG:WV٫q--ӛZU7g?qy΃&5 k5K 9_LqF#90q| Ufoɍ,>N?}=9n_Ij>c'lg{}&@[zOB, pJSZ6Zտo_`Iϝ@ ܓێk-|G<:3_p5UF7V8dv{K^Gvt"P?$ryvA1t>'ƕɯ@_Lv(~IBd T75^K:-w6ݳnϞ:;gI|Uh:]4Vh*3* &TҤeODr4Y>c;q~H?"ђ x̖$K\uUkM'[nqeݏ?X{={ 䪧{N_у\ొH=6njrЏ.½8' 9ԭ4 ɬ6XK iaOxޜnvVrIFBHppAH=dmFo>ktQ˴1?9b\sI k6KJ#FllT?8 G< Flͩp2_%_ۏHy9?3g9xŶv[Og#$ *ps+~&YѯFX/m䷑ ԩ#7$gӄgY38Tizڵ'_}nȈ)wcwq~{Eqz,s ؓ%1V d;o^F-F/p.% ˀ(s?ANM8"TңKF6ɤ.!hn?Nミz}O k{8QW? *tk._і y-hyCu*H5RF%jqKXTRJ*>/(+m~uޟ{۬PF YAREnQ@ޛT!յK60Pv,YWp `e?lh|'cٝy_6go͊ (l7Cog<ݿ-n rNHY2BZQY(߷I"/y6y{xݻg!}>gvsآ ( ]c-Z[Ŵ\}D*AE93ghdlQ@OxcTִ˩z64K]:Hnc+qI2I2CY`S*xrƴp-6Byo0,nq_61)f?78-5PEPY~!H&}vX Ɠ4UU A!\֥rXxzkZm\IiɜD3ĞÞoGxw욐KKi$:Dr8h:`LFUvWpȽzE!o4kB((((((((aplpack/vignettes/sliderhistwidget.jpg0000644000176200001440000001640213516603654017771 0ustar liggesusersJFIFHHC  !"$"$Cg'"Q   !1SU"A3Qau#26Tbqr$4VB%8Cst; !1ARSq3Qa2Br"#C ?Mt$O;* R·m (BD"Çq 8ie)šĥ{'C'yZeN L@%}g̋M&B/lN/OO}o1{4tFKlzуZqGնOQ}j֣ORSRBߦPimޑ5\BpъuhS=n ({<+ﭖN'rHW[xVBk[S8%$¶$]IZU'k^^a`lQAB VC,\-qBm( ն FҎݦ576=7,*L&}^chCtBF@q*_xWQEN]E֯}kn1۽"kB63]a-4b 8I ^ҝF+#_MjΩ)Z6O~کS{/xϺVv~ ‹&. .VBҧ;[CRAN߼ K򟶡bxzv:xzv:c]BkMDWr3rV2qsnȦxDKMkM68͝7ixdqoBe4Qxl]7Vņ C=ņ C=>+NHאK317*}ɳ{݅~˓hu[\Gh;gh :t䙥ՂLgh"o~/gmZh91!ڞ!ڞ0u5g4]U]/wMRŤka PFJF K_,MLt;eDSm,'m@aVcņ C=ņ C=!0@jaܫC{rDK%"2 IS1ꑢvRm|^n=\f9>7$ltMՠaO|taO|ux s9Mʱ_om-%&31*/":A!ZDu<Đ~ξ_MT hޛ{:eY/QO/QO`S$| 3q7*truMZPDRP%@Mw5*2Ձսkl6qJ*ej Ċ,0^,0^pԉhih="F` 7*'A)LYN!5']5F:uH_rlawmZ (N$Y/QO/QP8W}Y7.'lp8u&Ny˳̩0K%rR@*_G9:Z$/6\d;E1{7i{;jAO5Y/QO/QUA>q]4N$PrWɗ۾ˋ.-$hd6I:+W? ,0^,0^7J1iz5$[r&5yj?jPu$r[!9~>Vņ C=ņ C=`WzE*?>E}Txzv:xzv:_u^d_1mʦ=etXs ?!v;`u2]вUaO|taO|uDl9-AiFi#ܫU72a1hmR$RkmpOծaO|taO|uL<++ b9 # ­G/",XZqP *:kˍ%̜ܹKd!JPHpjBv^igMIy$լr9],|{Ǡ!4,%ZJז֏}IңV`a0S)ܛì*I!C'ARJv$]f]N;%\Mje dmۧ;o[J#dZ?)KGBF5<7;|b\~TybYZRբZѭt@X:Wt؋_ ø.ew8lHEKAZm{2 8}i7jLęl[aie%(!+,8BR+JMZl0zV;"W{aOMA )m;BNJS=pr3cx+T7kɭhsCqFIR.F.JR(JRv_ktAU)ݗZJ1ʘ_3a~[]Yng8ᴥQJ@ԓ\+?1'mXlOZg;6$ /DlK,-*)jg嗱#YWK}"]J#+RJo'}x{; eW)OBq( 7i{s+krؑrߙLn8YQHaRjNj{; a گ8k}N6N`^zvȏuFp] n]lE흑x=`;gdGDQX:vD{NE흑G$vm %#RI DX)JQ)JQs_ؽ \Y^i5 p8!Ԅ+oŪ[7 =$tzwpM}%oWZ\Bp-F{νNEɝL*a[rjddmV[siH{N8mh\ $'ٔp'd0Z&\oǘnb@" [1jem]I$iDZ%ׂb/:=S4v.-[R-AAX,mh4n\,m"ğnAPP`"; ;=~EfSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fS3AAxu<)C72n6\`e,.⊖T${|xۋ=7JS8oWrdݾlfY#5~~Zxg6 3ǖc$bI$IIEPEPEPEPEPEPEPEPEPEPEPEPEPEPEN=V]Rm2;qb@d$@t' ((OTPmJy0A-ZlPM ;|dLr ̤ndrEV6Ejqv궏,FoD/cprA'0B pFgDdI ʬA`P U$w=*J-DdV6v}}"߉m1g=}MvCѿm+ow: M;z`roc񶷩k1h7vQYL~Iyet*ycM|SwOhW!3] ;?O'`Iq2(M ܒ ?h74-wzox䶍"kVD/v IB6!KwO9!iLyRż+ߠ\Oqi1:C#Av$ 1 zl y|;ozLZ~*ol>Tgv[cHS>x?z>VIJn q  uK}mڼk ٷn1=Ejx{#W:v#;Tf=~Wc]K87tbL KX#pIhM?: ]B+Y}@]otK) "bC`!No\kA .*A-!'`ׄt q/DEg!7}IT>P0 (((/-etM'R>.e[E,1*WE|($qV4=rv{[,He`H!4NJ`i]sPo_J(((((((((((((((((,Pj~:O#XL3xut4D` Im^9<-+[=2; 9TX~!!% x].YI[EEVE:E 9pq,Qik $9XaP(@$kj6v|$[qGOQV,o;8,.໵;&A"6  88 ¸,Zom5-5ŤO=~ah1hٜĬQZӵU-`/t CvN(z7mt7Wn*o3-qH1F3; (((((((vYhsc+>7@ #,2y@pylIb94TE:gD~k걙@gzjQTѬb&}A-[cW(Ál*ko-ıH^I$`I$1Oj.c2q *6T2G<2E7M.RԚ9u)#$m QY"ev[ It(R4,\~Uՙ+.i bA\!I$3T#[`$C$NZPEP{~ѧ\h.ȝ<#k7z\~=GIA,ZlK_e,l$(?UxPOJ.Vk*c9TtC vǂmk[O羧Pk?͙W؃hP pƧhߕX9n38=X,㳰<h$(d"k_XgJf{iۦ1% y =#ˆic3@o3*}aggiݬ AS$CkoQH8Ppb C :mSY;~pv“]GPWP۵vĨݏPo_J+ѭtz_٥ү}{b[Lcv׶3z (((((((\ILIڊ cc'{Mj3jt8dSlBƸhÛ{O/R"4a1 "Ld5=?dW .APVuQ+0dP[fNcv7[m[Nl`;!.p7rK_]>o.ӣ&沍C̊`+*=Ynz.n.;,LsN]㻽u y" ADAh5麽q8Gpmڊ'?CCu@65mJF.FK0 E,@8g\G8Df 4rE# pISVb((((((*8 +{x$qơU 8IEsPo_J+*FWA@Q@Q@Q@So&{I.7,) vlXM(y6ZIi,|0Q+`ʧ*.QUῳ .vpQr3ր,U=[RFѯKEQK2@.|]oʰCH̑.zǺ׊ 5pGc=A3)SmPûKIԯM*}:PydYE. q>l09&.!ayK/,!h{Q*\q3r]QEpC E<ϾVUm ;UFO`jյFYmV_6q >dqA<ܱc8BĚ{y,%,D#9B~fR߻\;/uJOkhVmBpwWU86RmR->5 dk ]x#^ =*QEQEs/peJ-k#ޒaKaei>9Ӥ`aյ B8bR+̦)Ll59$d!K3:#"HTnUb zJ#Tt-QQҬm\n$dNzТ((/JQq\k3{r5 (ݰ Jc".w)+~/#iuvMqpdd?~jZwz%]ʓbYڸ_݁5NIt->{s$04͒r }jQEQEqzTFY;ۑ_\m@FRS.wN_noqg=}MhQEQEQEQEQEQEQEQEQEQES3CpQICF@$)O / K,h>ȕV8=J)K*Y,p2H}I sK$m$p.EqQQ sWv^GB-GB\s'j9=SpQtyu99#ҙ{/aq7!f<w0GS㸧\`ǗQAr8=)}o.&o>q's u<;|k:cmNoNON۔1^QҎHdOI͍8]9O7'sۂ8dFGN8|pPr(8nO<qɟ;utM%xyzs}ECq7=}Jle# qL[N?T7yS'`͔FZojr0n*$u̞TJtPD]ҌoQK'[P2AL6O*%o:(s".FA܎B͎-O ʦS}G֥%Ai/ 7!ȻQy?2i<z_:oC>%w0k~ePxe[,zWbn͌Eo,r[C8t{=[,zWbn͌Eo,r[C8t{?3ӧzFl2 2q߃.~`2:tH͆AFN0{xof WL48ʝΫr>f06*D i2ƛSvGڼPY/VaG@ddɇa1px)ypKE>ռF>x=G'i?>lranp0ccJsC ̚~ \vF>hE;_sᗎz |ɮdcS?7;xg%(_znůkV q&erIg#U{}B?259F7Yʧ@wj!TL7PIgwGe?~)gC}.)Cv ~ea멻XnrdӜv䏡LOcV_&oCew2sr>fR8= 6؝aIaVD0fX|*w8G#l##mz{jRَZncn$1(# y bGwďTi'ۓQo2!|ۯ+it4z9'p{v ]oqןiA<۵ o2^;{CQ!y0|R?r݃בкi6KntQڼx~5ۨ`]HC> sWv^GB-GB\s'j9=SpQtyu99#ҙ{/aq7!f<w0GS㸧\`ǗQAr8=)}o.&o>q's u<;|k:cmNoNON۔1^QҎHdOI͍8]9O7'sۂ8dFGN8|pPr(8nO<qɟ;utM%xyzs}ECq7=}Jle# qL[N?T7yS'`͔FZojr0n*$u̞TJtPD]ҌoQK'[P2AL6O*%o:(s".FA܎B͎-O ʦS}G֥%Ai/ 7!ȻQy?2i<z_:oC>%w0k~ePxe[,zWbn͌Eo,r[C8t{=[,zWbn͌Eo,r[C8t{?3ӧzFl2 2q߃.~`2:tH͆AFN0{xof WL48ʝΫr>f06*D i2ƛSvGڼPY/VaG@ddɇa1px)ypKE>ռF>x=G'i?>lranp0ccJsC ̚~ \vF>hE;_sᗎz |ɮdcS?7;xg%((=u7k>[MW\:sܑ;cw۩OKNqے>1=[|U 50ʝ;G=H2bvީ'stڢɅ[c] msԎC,'mRw7A}!Kf:ů>ռ*LߺImmr'}x띸9^wWu I6䍼Ȇ鼯'ۓӡ`Aڐ7w/^ϡ$nԁx˹x:} Dv$ۨ`]HC> sWv^GB-GB\s'j9=Spכn iw# ?x(7)]<]y dE q̟+OeGqӿ>lqnprc܎JeEhˉϜf8 #O#;q]F,:Np=^X\Mmc2>Q8*OM);վb28=>:nRw|ezpz}GJ: !>'_67v>Ppܞyn㹓?1:w}NloA|<s&~b2:tS=4 T"e)Qfڜ77ʭq1o*^A;{QPMOhi/6R%iFmq|w 2yQ+yCwJ2X G'8pz\?m,lqmB|U0:G>ۙ<̈,ޣr8= ˶O68>d*O#Zr>dt,h|K"aF#iˍ: I|Y EFO=At}"Ull`u^߿)?63>unO=8}ll`u^߿)?63>unO=8}wl?$GN7(~ӽ#68?³[!ȁ_0[X|*w:;WÃتy+ |oeNU93gjpz@Ck'gtS[̈́a#/'r~& F:F0}tY/VaG@ddɇa1px*WA _2kD2r~O^;%&_C/(]/N8e㹞 ((ݬx`nu79^r2x;rGV -n+?.FO9nH5naVD0fX|*w8G#l##mz{j_&oCew2sr>fR8= 6؝aI-bO69$mD0GMy<ܟz%yߍ_|1'ے6"GΣnO֗CNyj@߼eܼvy>8=R.5ؒn iw# ?x(7)]<]y dE q̟+O^m0}0ܧ?uw`yut.Mۯ{+2|v#3߅q's u<;|yu99#ҙ{/aq7!f<w0GS㸪ƿ#=66ܤVlmIޭ(/D|cڃAry=#Ldtޣ: ){pG̙ӽL_O[[N?T7yS'`͔FZojr0n*ſxyzs}ECq7=}Jle# q2G\DEdE(9`6{]p]yŵ $TyndV2"dzNp=..Y<ڄ `u<}j_QTг},\.6z'-%fD3Y|# 6O'\m<iXU7ax~+HV%<8O'ղ7ax~+HV%<8O'!?0:wf ܣ'=<R#Ndd no"ocMG#l^~Cb@-,iq;Wh|͝alU uO5o6|QtFOv 1yқk'gtS[̈́a#/'r~& F:F0}t]?2 |ɮdcS?7;xg ̚~ \vF>hE;_sᗎz[( (Ok6;K;nna'hmnPyr72`Y YXzn<0|}DD}^w7fK,s4F!<Ҽ<88+@MZXmtK|L7$2r#0qC$nԁx˹x:} (9'p{v ]oqןj#$/6F>G~PnSx<:M&mΊ=>V;Wž;6:ݎzcԭ%[,NINw7^Mۯ{+2|v#3߅q's u<;|yu99#ҙ{/aq7!f<w0GS㸪ƿ#=66ܤVlmIޭ(/D|cڃAry=#Ldtޣ: ){pG̙ӽL_O[[N?T7yS'`͔FZojr0n*ſxyzs}ECq7=}Jle# q2G\DEdE(9`6{]p]yŵ $TyndV2"dzNp=..Y<ڄ `u<}j_QTг},\.6z'-%fD3Y|# 6O'\m<iXU7ax~+HV%<8O'ղ7ax~+HV%<8O'!?0:wf ܣ'=<R#Ndd no"ocMG#l^~Cb@-,iq;Wh|͝alU uO5o6|QtFOv 1yқk'gtS[̈́a#/'r~& F:F0}t]?2 |ɮdcS?7;xg ̚~ \vF>hE;_sᗎz[( ?_0Gmw}m$<{BFFlT[x{M-vZsW 28l| Uf?M~*oڍR\;,r2}OCO:IXI1=[|U 50ʝ;G=H2bvީ'stڢɅ[c] msԎC,'mRw7A}!Kf:AV%i/1Ha[>V>erkH3|}KvCx]#,v5 @ Gbx6/|We}zFoK2䅤!aWMŷ=3Tƺk2IB$*NH>dpٹ{ zFrrH\<.-mOWtPi#L*ݸ*Q\/U$^|-MXM7o*Y`{|Aoh3=ȌiY m/SI[u|vOs{dW:W46-kv_%jfY T W M&mΊ=>V;Wž;kF -;?Aӿ>lqnprc܎JeEhˉϜf8 #O#;q]F,:Np=^X\Mmc2>Q8)_'۔1^QҝM);վb28=>ȟ|pPr(8nO<qɟ;q>'_67v>Ppܞyn㹓?1:wZKq ~Wr o*{DLy(M3mNFV㸘w/ NϨn&O)M#6aѾUn;H<̈,ޣr8= ˶O68>d*O#Zm̞TJtPD]ҌoQK'[P2ALK9|2J_:oC>%w0k~ePxt,h|K"aF#iˍ: >*Yl60:|IڊX:'p>zYl60:|IڊX:'p>;6_g#Ndd \dtޑ r`?Y@-,iq;Wh|͝alU{ټe72sy8= !γ_:)ƭ09?SNctc#O#>:SmdΊ}y#}zOӠ22|ðaS<+A/5|B||v'wA/]/!˔.ȧk~nwt2ZKqQREPXzn<0|}DD_&oCew2sr>fR8=G.'K gBH?31 89$pzUB㥽MGh^?];k@c#̻QV;Wž;=gRJ6ޛ)2C.Id̃>Kp'kdX^Gw͎<X u{LȰyq3y;d|qV}u'۔1^QҝM);վb28=>ȟ|pPr(8nO<qɟ;}co]i McI,IA9<kC?1:wZKq ~Wr o*{DLy(M3mNFV㸘w/ NϨn&O)M#6aѾUn;H<̈,ޣr8= ˶O68>d*O#Zm̞TJtPD]ҌoQK'[P2ALK9|2J_:oC>%w0k~ePxt,h|K"aF#iˍ: >*Yl60:|IڊX:'p>zYl60:|IڊX:'p>;6_g#Ndd \dtޑ r`?Y@-,iq;Wh|͝alU{ټe72sy8= !γ_:)ƭ09?SNctc#O#>:SmdΊ}y#}zOӠ22|ðaS<+A/5|B||v'wA/]/!˔.ȧk~nwt2ZKqQREPXzn<0|}DDGU{r~,}p=Msq$nicnlՈ\𨫶?҃yj@߼eܼvy>;QG,۰Y7)Wv^GCC@.?5-&ؽĉ,nBA0 洵v7EPcY s%iCF$ Qov;~ #< E,d *FAS} N\`ǗQAr8=)}o.&o>q's u<;|yu99#ҲĶ7W[^hʟi?uxĐS 7_GSn[|偮!3wH̪19;K('Ԏ|\>'xM_d^yV1'̖5rp_i X. ;CFGN>'>< lo )ry=#ӧzw/ NϨn&O)M#6aѾUn;~Wr o*{DLy(M3mNFVdʉ[ΊȋQrm99#кidcjH28QDEdE(9`6{]p]yŵ $TyԾ_$-%fD3Y|# 6O'\m<OPZKBgIJ.Fmr6O̸yeoVc8>LWԑKryqOgeoVc8>LWԑKryqOcCgu_q&~`2:tH͆AFN0{xGN7(~݁ D i2ƛSvGڼWȁ_0[X|*w:;WÃتY<8%|jl#yy<4̌6907F8b116O: |>G^OM:#'͎L; юu<`RHd]/!˔.ȧk~nwt2PA/5|B||v'wA/QE QX~'hXn m`{rAڭphrݬx`nu79^r2x;rG|G}'ڶikvFB":!lΖ)d.E?dc$#,fM%vLڊ#Ƨ%h&[WIDl0+C!#2WiQKgdR cp͒0 O:T:}6\^;FUT;wgi9GO[e13\r61I6ǂ9prk]F+z6<܁Ȇ:'ۓj+gma͎m̈a#x=?ZА8=R.4Aڐ7w/^ϡĐu`L )aAN~x'ngK򮠲  1 )UUUܝͷQ|.nC.im>0J;f? ž;. 9Y׫K{wiw0%3JGHUTtƻm䷛Ş!$IXo'Y9Kc 4ZaVҋ_O,-SY3W%&\jI!#B`~b2:t^;,Yֲ4oX7 34bFGNOFgJ;[N?T7yS'`͔FZojr0n*ſxyzs}ECq7=}Jle# qs'9t rsGuv'̐eSp>Mʉ[ΊȋQrm99#кidcjH28Q}G/IPZKBgIJ.Fmr6O̸y΅ωd](mռF>x=G'i?>lranp0ccJmuO5o6|QtFOv 1yҥt?%&_C/(]/N8e㹞_2kD2r~O^;In *@+Y:2VV7K"Omzv[2(ݐj2^q] oŤƒKJ[a#>nRLvZڎ{m}N u)XB r ]Ur6ɴ !2ܦn# vU9`r*dWcPsݵme/-Oq RJ>GHi;̲M9nFL);>J8#4{;8nc+qIs ^ GL8= lN0nUZ*bf)5+/uElm2y͹y #u^O'RV'ې7>GU{r~tB@rO H?҃yj@߼eܼvy>;Bma0.!9˯#ܞGњ$ Q^h>}1nu`L )aAN~j0\M B9-d7ntn6Tw9{Iu>XMY!XP@rPA:)btmSK 2j쪺UVcmU b^-8#jdfl0Id䓞Cvä ١X UZBl:ǁ#bjn}GzκMA䑡kgcĤusЏ6`xu-|Uq=. @XG'sT9޹U>BWKºIf:s,ZAqR,I#qvPV% =7_Wc|EyyΥqY{w:.%~jL2ۑ rI!d#o ^ki=$Mq"1#|8'p/׼s4,|$ĉG&[$e#CZ>&4Ovc^ eM (7 2ߘ]kRaM[K'm()sMSZ?wſxyzs}ECq7=}Jle# qp$oVcaŧ\mx#YŴD KK"l$ǩ#;Ie&-&2$*Ed' yM]Vv: <̈,ޣr8= ˶O68>d*O#Zm̞TJtPD]ҌoQK'[P2AL'%}* I|Y EFO=Atг},\.6z4,DgհSu$~lgj+y`|ܞzqgհSu$~lgj+y`|ܞzq]~I ;3anQ)sӧzFl2 2q߃f`C{7`̱Tu]6v?yUf WL48ʝΫr>f06*O: |>G^OM:#'͎L; юu<`Mγ_:)ƭ09?SNctc#O#>:T_dKe 1E) w3KMth_.P#4_"psoX4DJ3*<Ǹtidd)Go&:^P+7p$ Fp}jVri (ckN˪tj >9v٬=u7k>[MW\:sܑ*[3ջɅ[c] msԎC,'mRw7A}+|U 50ʝ;G=H2bvީ'stگ&[16 D0y<ܟKQ[?k lsn@dCWiА8=R.4Aڐ7w/^ϡĐu`L )aAN~]4%_:(WkdX^Gq's u<;.0|˨ Q㥛9 ͭ]cw*,Qh98䊨|k:nj4:f[ZOg\]jew>Hv$kfchpIo9'$mpp$;,Kd$J?tb-Z@]R:ªߒ+C` ꤮;NȶfnZtw1.tbHK挲(-_6IAҵ?m,lqmB|U0:G>Fg bw?#0+!(̐!?m,lqmB|U0:G>iY[K9 _$-%fD3Y|# 6O'\m<OPZKBgIJ.Fmr6O̸yeoVc8>LWԑKryqOgeoVc8>LWԑKryqOcCgu_q&~`2:tH͆AFN0{xGN7(~݁ D i2ƛSvGڼWȁ_0[X|*w:;WÃتY<8%|jl#yy<4̌6907F8b116O: |>G^OM:#'͎L; юu<`RHd]/!˔.ȧk~nwt2D>ግ%Mw1Zuo B^aa3#'  [L[a.IXd e<'M_uϮS~뭎5);H.{?!N(+]MdžSs#'$}a멻XnrdӜv䏡LOcV_&oCew2sr>fR8= 6؝aIaVD0fX|*w8G#l##mz{jRَ͵O69 o2!|jZXdcr"G꼞nO֗CNAڐ7w/^ϡ$nԁx˹x:} Dv$ۨ`]HC> sWv^GB-GB\s'j9=Spכn iw# ?x(7)]<]y dE q̟+OeGqӿ>lqnprc܎J] g}Ǻ6p9' ӝc.tG'8pzS/e,.&D6\L|1ǀN(ywP}u2;g|Zp_s KbDh&d%^P030 nRw|ezpz}GJu66ܤVtC"}NloA|<s&~b2:tQ|cڃAry=#Ldtަ{ji--]'osӟ*0ESd-7͵9n7to[b߼Uܼv=9>ʞ>^l6J2|SwFU'x &m}[W2 P+Bo8~k)߷+:Fگo徂Y'{ߔ$IWiY1#AzW^XWezޣR8= 7cѮ$;yNĀ+W2Ծ_= ᧈ"ׯ˛{ĺũa`69Y!EiCry9n8aXh0T'ٙ0c cm-4=%2@fO7h{+o_颌E_7RGvι-y==.\|@:Wvyysa.֖nX*n͌Eo,r[C8t{KM6_g#Njp1ƳĒm#gUy KHIjr4sӧz>%,lUB8BrNۉF96qn/f WL48ʝΫr>f06+O\CN ;B[n_c$8[M+ťvCk'gtS[̈́a#/'r~& F:F0}tY/VaGwR񍽮tk ([ZJp2PI۹AE]o_F|W/m2% jƲ,|;{< [Xllk I'$y$I'I'|kˉu{.I8D. VN_m[>ET(+]MdžSs#'$}a멻XnrdӜv䏡LOcV_&oCew2sr>fR8= 6؝aIaVD0fX|*w8G#l##mz{jRَ͵O69 o2!|jZXdcr"G꼞nO֗CNAڐ7w/^ϡ$nԁx˹x:} Dv$ۨ`]HC> sWv^GB-GB\s'j9=Spכn iw# ?x(7)]<]y dE q̟+OeGqӿ>lqnprc܎JeEhˉϜf8 #O#;q]F,:Np=^X\Mmc2>Q8*OM);վb28=>:nRw|ezpz}GJ: !>'_67v>Ppܞyn㹓?1:w}NloA|<s&~b2:tS=4 T"e)Qfڜ77ʭq1o*^A;{QPMOhi/6R%iFmq|w ,--3;K0g84,#oCՄ¡簚yXnF dwDI&jwIk9r]mkX=۷ ƦFKu^vH d#Y;]hWZ{KX$o&IrbG;R~^)6i4+ۥDH%>R$Ѭi(ތ ]SܵNٟr.Ca1nSt a˭ͳ7)t^-.P^3dkɵvk!=V|r>.gԍvfLY_aUƩO 5ŌC!IvRI$QM.hVb .p\Zwi$3ar22vҌ'l}|/=jXM\['>ǡWc -\xSEMYf"3A3FX\Ԑ-o~+}.ORrQH16%w.tGOX"[c21FAHIz /?->OsU6W}_ջ>h~&_ZnمA+"rXB ;kMVPgBa%0z$I?4;b4|_jeVv2ehW72jpץBvb &FbA2rw?$Nm"/6m'5>K/m>]H$X% ZxvTP#7t;_w ;TG#;vd:nFR{h>lHA \ݳ/\`pŘG[1hy&!wF#>:SiKn}3|7[zJh֗fO o lI z |ɮdcS?7;xg幘QE @gN-b`EcN2C ȹR3]%k—:_Նhd-+>I>HU[>\}֡؛KK'ͣ,aY̬ #+EtY6 #סLL_&oCew2sr>fR8= 6؝aIm^mu-%`[yUdh "[{IÎح`M7%UmlHniRtS;Ta# sS: ){pG̙ӽa5pu>btyNNOO8ǭ8@5L9e*W/r;rs$VJfo*^A;{QPMOhi/6R%iFmq|wB~KhR "]y#LWԑKryqOlwYXkZ*_) ry#NyCi݀ oDߓ.}zB ?#EkKf1EVնr:&l2 2q߃b_y)WLBNI'nF0x9▞|cqqq-Xm:Le8Ƀq<WC{7`̱Tu]6v?y\aAUct?MTڵγ_:)ƭ09?SNctc#O#>:V#Zxۮhs:Ƕ?7N>ٿ.sQ@Q@p~;+k6:5m{qEqr,T*IV wP-&WiVr( KyK ;O?CSҜxav+Yr~QTcPEPEPC]B .𤒼jl'Lgvsآ((((((((((((((((((aplpack/vignettes/p172434-Jun-9.jpg0000644000176200001440000003135713516603654016245 0ustar liggesusersJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( +-{Wm4˛[QʹF!!B8φBXp A1i6\sicL=F&<[sTݱn K$o#|aUH# ϒq/~'Y-w6j$ v@?|B!H nDkz Gǝ][!MW3NOo;> vBvgԵ==([A,NK`P-ͽ}j=d"a.s(+F{]xcI4Ķ"BH$V$s'oq_ವ\>7 ڣ6ŒhQTRZ+.S|Nsq?1#OqEq;+ÚK=V,IdpK(vL*䃑z DӼ96gw}'O&u4IZ'H(v@8PIMV}K3o1szdzh59Ttw78뚍Jò9-i%F~1!0 Wn5+ F7v=㴌xRY $sNo.-.#HdWO ~BH}^}6X"Xv \eW-3B}BT*EO]~ݟ|Gs4CY7]$YQ pA9sq^+%֮4@P2!WT5J<3a @{Ԛ׀uh^*h<^``}N30 I0+Zh+k4&~eJzu䶯'4=ԦYr8}c$)N9k/+ nH.\IX+dgܱ}}úv7siX^5<1A)ʒ2zwLӯ k"#M8޸< bk^鼈y$# ݕT*ʱHrh]T*=g~_K[,4ck2Ui}|ôeS9` %A9 xRKTm셱ew[߸I'*B~vc|KK[eDF2pr0r1 s u[Wn."6䳞0y]Pʰ$v6<'aY?: ( ( ( h!@\+`X2{؀jJ(O \=] 7*!I@%Xi (&êC˨Z&2oѦQ+wE AƅQEg&F w;.ɓ;[3GhQEQEQEQEQEQEQEQEQGծHbdUYJ\(rې\gШ?O_OнECuk h\X`z-ma6AkkvAFw}bj(!EsעúK4ws͌31=5_>,;KY xZYREnm4ݙ4QHsH?@Xp= (}ey1.O H##F8e ڳ9Ww0Z!H仐>~n߷I[)QEQEQEy?.a7 %u!o;b1pzF&\\A|]Ffw$|:7+j^N|?/QF>5܋)1n 78Suco{40b;9Ve9 kQ򣾶l˽1vu0aļ#xf]f5YvLͥJFnc'hj̒ķkdc+Xك0 N3Y~!+']PAEPEZj6:<ڶ|ϳfX/\ghQYw/SMrhgt\|ÑР { /VW rm_bjw||s_#_fQ ?NvϓZacj[ϕbsk5Wry/D?(;~߭tQYvZ> W}.tAo`m"P`q!q0rhvosI;3,@b0N 砭J(([ZC}(EG82PkMAmfD n$ Hw<wkӒ<<뭟}zibSiw7gקzwt"dŠ(HQEQEQEQEQEQE~ BxIy-''kﴹG z| ɍ#RSWG b|='.7W3;9$I,>R<`W?xO²tCEu@V]6Id e'RKRēF2EuDͧx`o#`IPFI)%^>GۼGg3*c'WF})7JM<26naU88nxlc?'wwns5_E^jv1[vF-L. A lPEPEPEF&u bd'q-1t<bSeF7Mo(%Ok˯gםnvmsV謻gQ3gם0\3& 8GCS\+Y_U.?l_k7y>M\OM6X3ƇY075b蟂Mh_0QTmR:\ 2w 1#+eY6ŽV!R $ pJ\E]:W:f >dHag wY-_[KsXOA0ˇRԆL2ʎ'Weӭ;ݤ*,#=EW<'aY??#R5]RxV;tެT$jsv@8?Wn2 ? |8ZP~w};KwW 9/?{o(揵?/%d>пtF\XϦoOzwb ZУh*}2p}B|C4ͬNZ(1nqEezoqep"y .dv]J(}q&qbto)"^1_.BIʎs|v*0rM*q%us \K /"@zB!Fj{Kiӧ( Wt!f9 virMz*A%o"s1g^A9*-Oby57?#ݏznjObNP߻[>U,./.>yspI1N>yO#n+pm+*#B71 d(dū5mU../#lεq02)8U&"F-# <;;sds]khr pmc:c$.dU)E߯eϦniZtS_鳾FD7sK]Z= q\1f-!qݣ9瞘6u"Kr/[k}zP^k-Eg-Ȟq2?rX9{Fux셜7YP$1<2NM_[)Rh/l`YI~Hv瓜ȯ$֮,[N-$K+I9Qr1󏔲F[^ߟM^)Q@_m#Ndz|>(]vX%[opII$H.WR$v\sR0AXHG}Mimܣy"%yΑ6(|-i";\;L&Lj9? WUW?xO²twXӴ_M7&wCow~rkB((((qK7? ww'RM[˳?FZ×xeBc*Ρy_L[B8A!A'Smc^fRr_2NqNNTܒ/jQYkVqXTf2s8$gF429Bz?ۿOkejgӚyYJ.΂F1A:fcVдJr,I $Ny2Zu:4j2B_q9@H}|ƛi~ wɾ]mٻE۾uoNGۏ=Pޘ5kS]Whc<oi6::i,(b cc<^)+K.] ~=~eGPM6f HOR2I$m}>=GMYb&@ FqߚTkjnUmZVa,n,V#>W 8{ AJ?]~ES$a][6OT9tdXayX1TR"l@2IMVt}Jȱr $G N8JvѽM%$F6?2Vugu^iyug<; n`ߌKqF~KoѢ)QEQECEu]s!+']PAEPEPEPU5=NFӥɵild8U);Bʤ ($7WPYwp 6F;UFI砢8.|ƲF#r8<4=BQcwJK u2^GNEP.=g>8[i],W}cOZG{[!Lz9'] ({Eܖ 0琹ՊM%k&hJfg_MZ˝pH<PjCuuoenwActE\ RMB4eKO;?;;Oݷvqc9S9ϲ|mqy#[F-w^aES3 ( ( ( (YI}%]בYG@~bElX(QEW/]yoS#Om2!a#eLAL⺊.64{y-ԯEwj^8#e,Xǰ ×`e6xʗ\LJKԿ[\M˳,Lb3hxCEuYW>(4k/{dy;cdۖKFh>,ΣgXO\n$.Y09 ; ( ( Vl"W;q3ST?eg>ڼ+7vN . ս\Z\E<DհppGAbx^Y"J8ʰ<A)Voio&vUu$ѭ,MES$m.7ZIgQv \GFE̺TMw%I25THyC=[1ϥ> +NYsC*9P0r8d֐4V̭XF>R;cEt9Sog^_lg;wuyMEf խ<ʁհr2@55Pvڭ?E/w3z_>O#mV͹WQEݮmڕ6hM4 ̭]< `3ƥ-֭[?nfEh+22`Ơ;dFO kouy+ dh)рdaAEhW/Z{,Ჳ\_}ğ,*;8X`goQ@w/u\xXԶWvyFc9N sug!}>gvsޜ=v7,c'p9(/QZy%kZUDj/7w[HUP"aB?Jmeu6V̵m;LOoRĥ~^1\rj1]Cj1*Kv6>Է87(/:Ne{Otx&T'3˴I&9$ K索o=y^fxq=sX(((((((Y Oka4ζ~h.fo*EYV4 e*ˇ%Pk>$fI"{a[uzdfb K MMJlbTޡEy<3xj]нGy h%\؀d%ςoG=bNKw<Ku#$\˒|[y0Qmahu RC?*9B91jpw6?|K ;yrr\4m d#.?jo}T^AVӧF<F]'b (M#Q5 mB\K^Iז9tcɸǚ?6Ѱ)OUYfqXuH{7i$ź >Po4fcojJ!뷿kԭ$r#n%XXܺ " @@|Oh5#[&YDGLp% 7rcC]К v^;Č!\#9,fNF+r((((((aplpack/vignettes/p152540-Sep-2.jpg0000644000176200001440000002240513516603654016217 0ustar liggesusersJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( (+MѵR{GFdu*aF Aߑ {V>Aҭ^ Iyb^D'ɖV> cCezZޙ-Id4+u 3ߛa:g:Lc2ų+p}mGZIgo&HL%~ov+>fosk$M i7i 8? \9uEᴲKM*og˕ 9xg9+󍧂ku+}6Yt.a2qI92ȒxI.AjWZTM ^M VBf 8'nSM$uygD`ہ8X=<9nCڍ.Lo=A. O\{Ea'nY.{Qd&;ᦙmMKUu9(vU8 JP-OZ|yz~h546-@̞lZ'$!Hj4'ԧIRB_RM># 0!NWmcuac 0żduP(R!?L?$Q Bf": +T3\_G$: (SsYE&k(w"_dg~p61{1?6qjK$9|#\Je;ilqqʬyA/k*LΖіɋ/dܯOI7?5oDgɣjZHE8ec*1 rM˟w- ^|@KAvKQq ރ@5ŵƠ53m$#<:s@MsFI>Gi]XMMTҞ!=K*nBp3r1о#Aω|CezZy/iY"rij_G1Kof|&2{GvsOTtMq?WԼG$oooxG^PYx\)uw/p%Qi Y; .}#~ ߈Wz]JFՎN#h鷌<9Y}fwiA,r\a$`J}_ ßw1ӆs(7{eW+npdw9o([x{3Iy5`>g\>Q+-f¾JĞ)"h#&v/( sH%CjZi՗lZiF^_\Bf0[(-#"C>A>_ _l9MmAsa 2cx_k>F-7Kc$dY!k t*pA7az5u uI%pi˴  ||+O ]j:Moo{k\BmwݱHnӃ};x]h X<  [h!JX*7ʊsvڷ'5oXDY1.p 8=G}/)5֩ rX*yrnS<m5i({jVIBĄ$)9^o+=gÓoUܵiOnN[1@UP+T3\_@CЙ/HSsYEtW? Bf"HuO5eQ\$: ?!?L?$PAESu(uTY x#Y 0@Q@s!+']WA\9? WTQEQEQEO@iZu M=kTwtF ~s9l5n#9E1bR.UPN1󜰮֊Jk,ǚ.. Ty害ie}Eheksq,&7HVN;WVN!=Ijtt6Tc*E5tIu ( ( ( ( ( ( ( ( ( (9<RA\?xkV)k(sH?d+(~%b^Hx @O-<;WA@v[ @Mr4mE7$O1˯|g1šSZ&La0?)+!Bf+CE>/ϫ[G[Jic #E!rVr;_BzOZ䷺׹AIx%E)Q*ø,efԦmiuX6 Be]& ^&HmFw7C1]oΓO .xM6Og"Y-ʱ sxcafcDk{|ZjU+ -tpQ׹-sټUv)kD&q`m9 Q ^}6 =Bb2j˹F vQEBןiMlPĖ,QQEQEQ\}MwhfD@N%0nsƘ#PEPEr~6Zi6Hfp2l2ǀTr7r03{uh( p @O4OO<5`_W?O'UZ((?d++<'aY?: ( ( (2u M=kVN!=Ij޷Ong?'%Uj+*E5tFEPEPEPEPEPEPEPEPEPEP?O'UZ+' *E-tQEW?xO²tCEu@Q@Q@Q@:o&'W_ֵLwDo[3*E5qzV^>5+6oI8ǓwA{ ;zľ(x.  GaxnÆMM'MTTO}BBT^xW@{ZmPhlZvsvl;NNNyɠ\hMMkh4, Yp*6vg-  _*3(/z @Q@Q@Q@Q@Q@Q@Q@Q@?xkV)kO<5`_PEP\9? WUW?xO²tQEQEQEd?z֬_BzOZ1]oO}M7%UmmuCNW)d]l@){7"8=ϱ (~0i* (OVNѯm{{y%=m2!.I#^}M7%PAEsct?MT}M7%PAEsct?MUOLQѭ]n'F4*+r8ePه'(~0i* (~0i* 76M6ʗ'Fl d8ʈԞOeM7%Q?wC4@M7%U;Mbti,ME#oT(~0i* < $_ K]gZg''inv2qg5@Q@Q@x ^6c"jN^#j:\$d Tb\ X{%3'i?lұw}v6k}]s@ڲ}f'o/qvP^w˭cBt}J].M{y-Rye(b1s1nP?-o=y^fxq=sO֙hbI 7w<nqX $[-ޛsqioiK|֡)Y|Df@sPhܝB"]|>ǹ[If;KuU$l&5X~ Oޛ7/y8f|v׬Q@ak? ɽa2%0,B#V.[iB{V&%Uυ,D&0˭,hλػ3m! (,F?|7 7}Eyo3cدh1'Ct??hF|3]95O +?ß#e2e*AG# ]%//O6dz;xNdZ+5< ^)zVZ7yDyu_]<Q~va?kU6eЋ0.\dhiǞIWsJ> 9m7}{k7w%nQԩ5ceCჩ9gJyBRWfܴkJ^*'!஢/ޮͶ;= cV.)IJ9)i)Fд ȒNYdI;l&f&-mrK8;9gDgoxaQr42KyAC( *O9d'1G2*w_u %[e0*\x1!M组(oqeu_hZߙ<Q~veXpQRlDn%q[9/^ZkzCl4~E($~*i)S7>MүAUROgNwIS8cI0* V~dI X, ( A*~2[aȒ -}ꂊRmZHԣtH5č͏rʓ mDA$xգQRԧ*)r;NJ9ɳox+!஢Ѧ~qk`R\d6 im(IQȫƾHWz3ҹnjQ$gY;+7F񟮥:tԮ\sZ3]ޭ͛+ ,]0.6Bҧ: Rrݞoo~xY-y-ѺMw.Kޭ͛+72cR).)A?)OMMd,KEp:/DvK]:_[`i P;ӺXduOGm 3$'Q3~ΪҔ3.צsE,&WQE_Y0~cDu +RFyI9~ZwF7e)j )]'IFRo;ղ}z[~+ Y*g~@H/f v0>ԶŸ0x%03;N'#2᱌nVkue5b!r[-i{N^ U)r@ Y *W7OQ²~,1u ;fsQɝ6MmÀ]o̥9+It('•J ]zOY>r'﹛l? @t^o:V)ez{>B\ölKKn$K`pFFyhn5usazzS}Y=7sMݲ\LQUZNRnnw&"`VmPWÛ CҞ͆!O{u:jA5Eˆ .rjCfs+ .qLgTDG ^e,tWvq+˺lx#N#[sazzSq\{xN ڮ?9yrmk-RiP9I _q&4Xڰ]q4Vv b-:Zt]1͆!O{t,֪O]cO+^יq)IFO2JR7K&Ngl(m A!K ֠"O@sazzSvͅwGVXm)1b-6K"2 IS1摒u(j'*ݱ=Fr241#rF:Sr-PsazzS9D=)nY['%[oW-Eĺ_ff%QGY[ $+4}oG.wY$ItA%P wb񉒫n! X[ֶhɇE]Ь]=͆!O{t ^ ʰ9_9]7׭O]]qA)L9N!'+ĘϋRMiBO+$HІӒ@JGMu6=ӛ CҞe+NW^OS+]a͆!O{tv^]IǢ,tH,8=.uLnKRA+tz>J>l0/QJ{ۧ6=+e5]/wZ.77"^V Aʹ$VZfJ..MQɧHYl0/QJ{ۧ6=i[-5ຝ^n4?棋4yְT)Ů4Ed8kYq=q~d6SIlCC$ ! J@ n CҞ͆!O{uʶU,u׮(ٌO(9t?]a͆!O{t?<ٲ互Y2^}__\])6%SPdoRw$',Yk爦ݮ-λݸ'IZKf@@,VR7,S޶7wcyq&8)LeDƒnt*I{ݧb+3w(6Njg%%.2H YRFv›)ר{I1"'HUn1 V+pƣ; l]x,HO@}} x-ʕeIG 34e9׭[t,9R]Дd̒r V A(W;4XKL0!R^[=-ΕזKGm;u@lZlylvӾ^[=-ΕזKGm{!L9)LIl+I[.|Yx3Ҕx'DΕlc8h|2Zr5gQrW*?}wqi\Sg/NsmkV/YXzg+Qmܘ1b˟N-%֔ aK%D ! ' /zW//jNvR":n9iaKp[isXSR1$bX$hsZ1BҐ\ ):ֲ).IH*,l>[,AucȐ޶cȐRӚT3w=a|nŇGAAGDBNJNHuSxKJRВjJ;ۮ*$/ 8qd1d[y)AUgPmk-i3ǭx;yjJpO:.JN>L*8B]BsFy&֮Rv-bYٿZCn,[9\C)X;iJP R(emw?J;6D%RZ;:_o"4F׹~1'^fd{ vnqiKZ '-樮Oⵧş(vh I@UF#~/F};+a֘sy4iR I'TW'ֿ5]/ n(RGѓW#X>Y}  9znZnXV4u)4GQݞMz{}k.@cCNwl1)DJQ',,`;g#x&|K,ijw^m@ j_@k;ްuNGlDvVΔQ=zvDGel@k;ްu[^-$xGj;)himfI9_5_I0R( | 8_Oɝ rn\\Cѯ=;KxoNG\6ۚe2 C.46RsJ =nǥYG؞`iq!KFizLINJJBu(ND O CFn76/N-B\32Rւ~VNjͥ_m N # ƾZcsC2$GQ!IRiIlqqT+#fPkCH%SmaJTRVj#_ld8SY\:a. Om [ҐT µՖy;{6u<|CĹrw \xgYSjq$Ko0˙6=(.7+;qN8۫Ii,m fѕxkufK3nt&S- Zu!G3aJw;kŞ=~'N%Sv^;..N41Q ,()Ji+鋭qZn.7ga.Kh~(yӋZm@%$տJn$3E^wKf*dXқK%ˡZQ$~ יP˭&qΚ/Æ6q|"VZRk@HNV()JJR쿍Tv_~ȃDVGgKF>> Gf]Eljs#4Kf7WGe HJ ¹׸7.^܏8܏`e,gr>sr>sX{sh֬}4L%%Ɇ+mheR\pk9c܏8܏`SV P܏8܏`V7\[Գ.)@)JP R)@)JP R)@)JP R(emw?J;6D%RZ;:_o"4D7.ZC0+zf Ր9(qGwM\֘8}$8>0ɭ:Y翦^Ty*Z}9fy)IC} خXS8߆7K$1w*Z.U)Bt6J@̃iqF yO%NҕeZOk' O7u>!D8kZ-$%E9rg.+سh 5*3سiسh 5*3سiسh 5*3سk}n2 &ڟr]B\.gzue=Cg qÐ_P޽ZZ%RXMm[޺Bb=<ɸNIqΗ&%Ŏ IPƘ8‰4b 5݈(/) Ւ`3 -^ͧXnLqƣ"-ŧKmn%*:R@o@ƨ+v.) B4@D@qtUCw9)Pm:R&Mݿ3Jm ?#[6iO,_ηu]}|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:R{Xfw8/&O ZC/((ffD3 RVp/GS?aplpack/vignettes/slidersplitwidget.jpg0000644000176200001440000003251613516603654020161 0ustar liggesusersJFIFHHC  !"$"$C," ^ !1U"23AQSTu#$4Va5bcfq%67BDFGt&CErv7 3!1ARQSaq2B#C ?&茺r')Ja[ˊK 6RtIQȰdu šĥ{C'ڨeN L@ 9~3E!\/|N/O\p_x2VYcQ)]iڞ?'Q]+ZXens| (*'))Щ!Z^pO 3t]Z9b⫖t~]W» /ʯ=IdᘲvRI ~we6[@qyqFUuWkvx1^ Չ"aƍ8h/Ms$:ouV'OɣQ?d7?GxWaEUp‹Sl=M|"$K8*u CIזi]Omw&n脰:<<f:OP'R9 iIDu1v4kxtvkw (*Q~Uy6,S=%e9 )\%-%(m BH $馊Hӱ[je3&Zۊtۼ:k],Rj;ՠ`FErcj5» /ʯ=;v_^z[\ipSu2Jc=Ҁ uֽc*T{NItmIh1-H+@ *ԀfBAiDzop‹N]W1hGb\ |P}j4qNңආeHU24bpЄm}{qts I9jۤґh;<+ӸxWaEUZCn{PXj3R0|(⺵;QjO3o/;;e=ћh9p1:—Vǖ[t ?ut6IDb=DEšB62O9<+ӸxWaEU]Zl8tIG&Y_hTR TU1ٮ ATٗB,Dqӏ<^ꐽ?`yEpjmtj%#w?'xWaEUp‹R`7eŹ_q[S :+JZ(V!+̫^X33Ûy*)QU"D)yq5 g]J&+Va529<+ӸxWaEUXϪ^9lZ35šFq m$mHQ9顭1\_26T JHu `r҉;*c4RQ?ѪDv_^zw (*2dL^w-u<|MS* Jx(wA5ڎ1kƭ&ŕp6cY˒YIJեP15 XF(%Qէj`* ʖF*& lFҷo8zֲ? (IP'QotHz!$ŅE%ybN<"u@qIJR4Ԓ5>n|XëEJR 4|(H⧢c?y}MzO՛7WoIqJ  :imyn7rӯ[  OD"DUO+89%*r.3m-;!ĕt$]G?r}?VlV[- $ I3"ru;o%OhFQLv7r9γ/RYui<29ОZzha,(kۡAf6#:j-VY31-I*BukIG=#Q{_]W$IDJ R]åj7kd8Pz!,g%od[ֆJ@*]Z#ZdYy[`^(R%yަE@*,7i0[owwyi ĬsK{{v'XPUF8p0$0ꬑsӉ=U+&X.I1פiQBԸ *Jxk0I*Ԙ^E%QT.Rkۮan*$Pa,:5* x9Wa1!(S6umRVg\l,{!-a-R7 uIG_ˬja:? KVz*Ӳ[%sU4J5͹ZPB+R4kUa:x0{ySޝNkZhyi:!%ʕqZf9̬d)ݑL-7ͭ4nM4^['tK#.IwPaҵ5t R}X*YC܍Ɯ<%Ҵ)m{JT7Z/a*{ӧ =֟bbd֝KfJoF7kGxb;1-BBUZtBj/+SlT}M[/a*{ӧ =א̌>Fen*x}nEI>#j 0^TO/a*{ӫ/ rSO1UG* ծQ]!Ozta:m(D& ]iCN[lƶXďbGw]okA=d~hnשy3nf[B @B@JH=MZ_/a*{ӧ =4rz_,qըTU%vwQ_TP^Nezn3%vHm֗Di|7J†Q:> 0^TO/a*{Ӯ^Q}nO_*K "l=n_Έr = CʞT dWSMK75.5WQ.}u^um;x6R*JI`ycl{굕d^.!# !Ҕԍе9 #\[FneY%t.7KRZdwbɖy (B,N}gJ7_k]9V itDcw`lj<"{{ |u*Q枳_:Xw^]vEfnxӳ)m@=vr^RR*Is@$s/k:~ʕ^%"[2Kn<6DyMT-)݆6.Vq-VI9S;pmoGa-9XQ [CR@H.[lvJ93]c1ӵݍ- \y(QP~soԜ=q4)JRV8joQ@L)JP Rme>o?me>o? N$_h% wߗ]S[';~vmBBa+ x#W5.p|w'Nۻ pq4F=hQVP>W/#_#Y[zuĩI@BtԄ^kQ'ڿgwѬcg1n)GN]Zg,Z8d6)P;K M4kזzמәPlؒnKA GQ*gv=tpw GO2:%X;Sa<jҀw`;g#NlDygJYH5;ްv歝( g{öy"<հnXF{@tAMOkY?U)@* leJ1:}0iKo6UPHQKojJ Ҁl_ z'nqLG%5-{q o(}JWXq▙v'u[\F#p(TAZtPٰbJRy$-r%6G@P%#t -KRw}cmf1+v %|PYṼඅzG4H(evض9xe>VXEnkqIXBRBw=;ԞZtyb΄)Cji@[nCE%I< AAԠ99:,O\[\49a DuJ<11Ң"9Vk&No.:W;qE!@l]AR9/S 0lV%%H$tЏv{Aܥ0aa枀%A[i(QPIDe}q[TڜW>&֖-Ӕ3[<-@Ѵ%CxJP R)@)JP R)@)JP R)@)JP RYO[.}%YO[.jc7gF{`^cJ}џ[9 Z7t#Pu?5.p|w'Nۻ}|?_N(jS)#T+Zũ:k۬}/~e?}/~e?7}_FX.㶷]\)d(I>&wS.>zwWɼUid\rA)BIJ%Ă?A4gMڧ}|?RjP7jo I@F{+AX ,hHl \i$zW,C=w^+? ?~Ӆ?Vh ( NY0R'8QfJ4GO՚+? ?~Ӆ?Vh ( NY0R'8QfJ4GO՚+d+ͻ0_E*PBޅ@(]:%:yy^Y0R'8QfJ4GO՚|}t+uu?%jT e)hꥬ?`dp{g@~pe>o? N$_h%{AM˫UU96.'m`f3ڕe\ȶT^V3 U%1x JIq7$[#dvw9%訌e!O4h'MR'Mkzvg9vA?tҙo~J.HSz-`JMuXQ]mwlH\|>qv:U +Y VR}e8*l7L([qwJIr$ ϰYvٷ86>%*j?[,+DoԍO!\ f!mpMX+Q\O(8%,ҥ>ۡiRŲo,RkQ s-b^&rrKb,w@}2zZGα$rg},pm5.:psCIN:FI|7%Xnn87sqeo'yxk=<ݻliq^3̷+ ']ؘ*L.k,)M.B񒕔$z?ʨSW>7;P ٭GAijޣm̖lv<N{W5H[Xc>\z%䶥nЩZkƳW;_!3*DH8絨i'ڿgwѪQ_(|ħ|?[;;qy^]~q>;;W5J<+vCgS7޷2^W_O~Nq>;R Gk?8&~%<+t_ӿO~T¾Q O Gk?8&~%3x}}#(yuW4_(vCgS¾Q LzwH;qy^[.Ǯ0nYq:IRP53r;%硇\J)jMHH:5|?~pLJfFQۋi'ڿgwѪQ_(|ħ|?>v}w}wjxW;_!3)_(|Ħooe.jF}w}~pLJxW;_!3)[Gn/+˯'ڿgwѧjFG|?~pLJfFQۋi'ڿgwѪQ_(|ħ|?>v}w}wjxW;_!3)_(|Ħooe.jFw<t^wDQDy:ՍNƦ|?~pLJfFQۋi'ڿgwѪQ_(|ħ|?>vXhtiw)(I*//=g /jFG|?~pLJfFQۋi'ڿgwѪQ_(|ħ|?>v}w}wjxW;_!3)_(|Ħooe-IY/2Qmx&'HU:Ȫ15pT¾Q SQbd 1drbHozuDd6Bz#Uisڸeaplpack/vignettes/p181236-Jun-9.jpg0000644000176200001440000004562313516603654016246 0ustar liggesusersJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( +]8pY[vC˂ybeFeu `˱}niz{*"h1:L\-gX 'Vmi5r_%*CBϚA= tQEQEQEQUﯭ9.LB$f$I I x-h%@WR2#4%Q@Q@Q@Q@Q@Q@Q@Q@Q@N #ԯfeK9`(?g/ۿ,UJ6*ӛKYQEIQECѿm+~J`i]QEQEQES4MfRFrL:CA#Iacoiqv$0vdpV(C^k2i0O#ݢH$d!]UU pAJϵ4-F{{}nSqfHhQEs/Γxj엂S7UX6 l+m`((((m } Y1H"B2vD2 5TҬe!䶍!M)8$p p0r(( mxU&dB `պ8U` #?2<~u%bj͜K}pnbpO+'n侳u==w՞WI0_-CO t ǙߐB5U{Xپg~뙥VQEQECѿm+~J`i]QEQEQEQEQXzg[Y-LHTdhYV`%:.ws2YIy7Q!DŘ'EjU946mRR]>SdWm Qy_n}jv.A9Qw*4E9!H @5((((fsy'kk3'j(%'OCm{ I"n`TPfBp~V8 jW?qiV}.ylc$Hh۳ tPEPQ\ZMєgHjrm$AZ\E<$~-M 11N:d yV$+ u+)IE9= sYڄײ_@,p!XX&8%x8cwB:$׮Hfb?uڹ#sԃ]擕vT*Ts6~M';Q@/Ş׵-\\M'*8EVUpRdr)Qm hW1OpeɋAhvFv8Un;Po]X|CӬj[kHĶǕu|9+0%cs@ &W8ʜ 2ao:/籞8oq &Xa@(((ƣs#b7"e,(agoysy ]mD.хÖgX _ i1]j:|дHة7~|Ü A\ߍ|1s ]ZM5YW9*:sѮA(;]ͫ>%z#,lQ$l#MBƗĚXX RDC2v.`2{4mdPʹ\o i"^Z{2OP]ۈ(6zevvZZǝ$ OV(((g%RUY[IԮwZgHX)RG\O6Q$L`l#3UܒF8Ɲ)Jj-ߗg5K]gwK2:A08$ jUIд}60p,I$O$Nx^3KsQVQL( =OUviW1"6&#*x8 ¼Ɵu/\7<yvy&aqIQXrدc*FWA@_eqoQn/~Z+ԟݶo@lxn⸷9$l]H #㯅F[ũEn$/6|O㟂:Fgւ<9W B:9%A`h+4/yV<.$dS ((/:T։51ۼ-,FTeWVdt aU&m;F{{xL@.rI#=O^Q@sZnuu紖'l–d y(Rljp1f!&-"J# (efhql3]sm I!%r_~вn@QYU,Ũ^2"U'*ɾrkی#cWG#uy qn}l.y?\mN~մuKi y-h ԩ# hy{䐈i`31 8 djQ\߅YhQ42^Y"w.3^^o<2w[N(aSSo&{I.7,) vlXMj:Ή %)}]7Έ`T0jדi5,vt̪HANIz5_ڍΫCwym%B\# <8PNH N2@#u[kgv'zr7#󍊯kg} "Vo&@\цFAU((((*hv$!f-#NO^}R^ [9g(ddg늒!3*@q>"I5R+SQr'4ZyUB"O^$k]owhgΣ>*u5KdAV8a3K-ovux*2$In1U,Tm z{Ǟ,8YM}y;JE]ˈ(0n{xDMt:.HF*ˁyUw6TjWMUk)$%}xs;앞}xSkvWz}jSI奵C3mߕԩ-.sq+zzŷ+w> Q2pW|MҬu=[JyfEԓswHXAIe$1ebr([@񯆴_W{ J+l T@W8T۽9R;:W߭ץm/➍t h%Xjw\;U y.Xb#H#f,#mU94}zk(eqG+ߣ6alW?V, \jȞdfDe9 s((((9'ʹ ==jJuhvHb̤gSFo5)v ϰ9bN4 Ht{k1}5d-k8 8ڗ\ t[ |OX U( xa%VBRN”Xr>uw-K+owi袊Ts  !y$($s +S>j1X] 準#2%qqƌ8%ssfOk֞%Ѡ, YVnT7a̤;(z7mt>Klo*%K2c;Ipz(񎥩i^!$jZ[OkR^R%@'*N攩I]+z/^Zac4Ex?|o%.6cycYZxma{c1M223yȮ_ 2+ rEhRxYg.؝q4lnh /mC@ݝŝK>5;i0kXxm<)lS:NM=>-u]駣&efե.$hto4 1׷N'AgsdPc@(喻k]'`mNY/o ɷq,8|U-U4[#O ²yxͻ9;;Ѽ1sj7EmZu8+#"@7!.Tgۊȣ5in]Ӧ/;JK^ӕ.~oԚiIj3 $2C! Vz5xw]:[ڸ[ecsھFEkꚥ`׷"V,@T,`֤k9<[h_i*pyuYԗ4عW <$ׅFpEEi6 FcYWJoS^?Ң\ $FR&}~c&{]Uyx*qf,uX;v_xU^EqKu_ P Z"Z%ʩV 9W$o:d:foQĖ(˻=AlzqQIF!Grmuwj\b)$Jֳֶ[V[Sc9IbuxC+`z{ul[V ( ( ( (*Cq$<T$[;Vh[r7C=J5KvycK2VI,Sf18'{@J_`Ԟf>#SÑǚ=CJεI.ڹ;AEUFs٠"t.# p)x<qO&{k#qcli.1|etcTk)Z]nݤ#6GBN 246FF;xB E 8Q@=W6Һ ? Ѷ'u{M.(Ko6tYJ[p̬< wde.UsJ4Zv}x=zE[_K)&g az8'8"^3^"6eJbm v̊Zc8#ϝ#Um<8<⼟ⶣoY[j(n5F!21eFm3(VpA=rY\撪MQZ6bom_\+6O ,^veAWlC|`Úb$/+xJ!*K9[[Cz+ws+kyggm\3gVHn 3NВeOX'g qiQ-קJ,rcӡI{9>fnv)j:2Ӵ'm,Ƭ|)Ck3|=:·w`4ݖ.wnѹh:ceU'î234dWlYckjtG;BX4.dKO zM5'^Vܯ}aggiݬ AS$CkoQH8Ppb-5 dk ]x#^ =*zt֭<+qdbB0JT2|߇,`^]IwoD#JK܏alW7~$%>tQ, lؤj̸T9)٣<xoⷃ$ψ%_dIg2'΄pG0aǀlWÚ֭X 9Ec-nlPd  :!%R+l 8> ?eq #2v FaKa3 ')Eꌫ5ߖym}!!whKi408ϓw1$yW]zUY]k3n{<`۲A?I$ׇtqP]J/&-d1rA'$ubҍZi;z]+_ջ2xiVZV{w袊Q@Q@6@*> )KShb`p,|Pvgi`Iɥ{1I\"NI?ma-Z'I l r1ӭLIBu#0iiBa #Uٲ~Q}3Zu^n*!r1ՊWVMlq䒕HJͻ~ETQ@Q@=W6ҍBumT9wOsHAF*6kqV/? Ѷ4qzuj”I%WvG3=O\]m} ^ b3ו7ѴoIYwT{ i[~a:c!,B†kza:'l,pw),\/m_Z_/yo$O%h$ :fB5S[$z'[w?aV2I޾iz xSBNw:њr&bO$䁒盚&Qs44ݤnҨxu {$O!dϒANq ejQu(x [a$6$27ƿ"/y5I%&}? N 5.y +;hT] Il x ĒI$IU4 _i:YÝ?dĂ=`h ZI+#s'vf_tWDKywGW1 p `lӴk+/').dT$3j ()ɤjB"hTʋ 3psW( 񟈞Ӽa5(ńF'#oa>X`ĜM<;he02l#S$ݬmFp2սq灵++=Wm/2W.UG% .rl9KD rEi|щ ,?1r!sDԴk1co^GYY]Ipyx`N*<ⷁt :."Ky&-~REvop# ׏4#~k}?#iDYxVW,U1ʿl1nhFլIH p<ʶrYH2 jn]h(A\ I)|_ħ#{cJj?X'Z;yۯxzZZ/}.ocx`x%IaC$l]H #I\[FsQ@B.kƵ @{~bcHgKnnz Pzz%u:UGm-0Rc1յZBn5+l\$=95rKG eg#6WptVn=me Vg|27$SRVwn&qb%o.ER4 (9_U֗^Ңm} cvOF $q  lxkXT鷦KE)#*dFp7(>Y!f?+J m15wN*_!Þ{ 9''=W6ҹ?sm[ bMv#>HC-2JViB]9F2Rrv+M~/Eٜ$Z d[jvYo`?Z>Eor[^2$(Q*NA,:EXa@Q[ו?hF_N[r' :mj.պNZ:4vI3RƠo*ˇ<fݸs¯}KCJ|3q݌t@j>B-z xz J} hsU}mkZ+GŕC$o8Xd>7s sQZ((((>MudKUrOrMr&[OͱkYE Tj-szfXEʱEno\3YJ[uJQVVxMԟƫGGx>#)xiq168<<;w5 Ukgv-[6wqjI׳mnu]3kWi[nuZ%< KqhViFwj%`vRY#,T!!~x^\::q N%V2;玸>E;;ݚVMSM&ùOqV:CxTT]CY\>| DpA' SvZz;7ך3]ZM,DQ$SQt}4&6EݴG}z Hx@ EqOG$: N95~ҵo./Tn.P`QmWTy菬Lx0@h90iJgݾz|.xHo4V)r`99fE ӳg<d=?7V o.-(e?U\s?vu[iWEj7 |}O'82^ͷV->s|U$*^GtoT3zcGy4E<) 8^z @\dΒdʔ{e+񶅫(ƗeFmJ`Hr]NiL((? Ѷ鵹]LBfHZHR2sTg'p 2Hƥ=W6Һ ֍WJji^:Vّ v0H`((wTѮ5'vvg5'(Ӿъ+fLK˻.g0*Ǣ<`x?Ht_lU)cP8?6"5N=EԥV+>=8="slݝg3YB/T!R+m+зEV!EPEPEPEPQ7VEJ$E `*J(N4uC*Os=/5J[+n 4Z{#ܬXm`\.0}?v uQk"* pqYk6<)<ɨ{k%hno>d ]_xRjOګ&HΧ,ڽ]7oĚmq5tXYf9qdl7Kg|Ka_i.~!.n5 9; ڮ<̌!~c+-gQ XZ3VmBbP،VOx7EwQ^pۘeMQs9J`i]qkClmq_yd{߽wD9{ *g%~dcrn#8 G=@xHDZ٤ܿY(q>8u_k^_~Un[MRkc{Ki$Oi>#u1b#85nDvMU.ղnS>`G\ۍ rp8Ox[D+kF%UX9gQ{iq5և`ns4[,I.|q-f9!36 jfRܪr ЂySXz:V}/f{^wc1#~iu?m_ɮYA5&=3ZeB;ݙ NsdZ~=͌QF"<#ލDi8B]W:=喕 ڮ"ܦ|r'n3לz:4mV1R:e 2КQIqQw^<;v-{-ݺeFRІ0{ׯ gRDeI?..v*񸪅(e۝[GY|^G/#o)̠?g >o0?;G#Q!Gxv[y[4Ѽ[WVUl)xUO1iNomB!ٿs*,3˶Ë ۳(Vζz{G:榣A(g-?-)t^ž8it\HbÀ9)"prB]]kKc3HRIjaaIW4G mA7na"00HT䯼!Mݾsa+=~ͬF#wv9vhת(Z7u-_k|ETUgIaS|۳wzyo>)4)c&uicc J9FXTrlgŞj V` HͧU4ra$K(1m*0*~VLWG8R\׺W]ysA9t5וי⟇^E˱ߌu~5[N\*`((+E9RK}䯖Y"TFHq򜿉xrKգ'kVi2 _)*F9ҹ~IGcJ5nXcec @R<[oqsA*92<Gl,8- ;!1.I' 8$ƬQ@;GG횬e OݶvșD/`[ {Og&Ǒo,PF!mFNݙ!3ugu$j]^l$hf?iRwbkO~{÷t֑\yK67:6cmj9۔È9A<~o07*'|Q|nR|/^XYvrYAwk&7 7s~ 떷V#z3"To~f@ⲭF5RRiD.zd|:5ѭ;m\X$ w c8E\ uOGt'h6ZXʳ@H$ ][K 7>Owt=*;1pG,b/N $pr [*Kwi{=RI? ,v7+ݟ }ߺ>AXˮGXo |@_"UuX?+n l@񟁴_iicE 1>n !e񝤂0@x=@#GIEPkͼ~ n4Veܻy?LsOcn\jwz,%XG1zgL\0<;%wZ[o, 4lyQ!'1'R{jךciXYAwuvmg0")%,X#w +[ݤ2G)#=zSo岆fd,# 0s}k޳:}~cMazJ֙p>3k;v(ʲU}+iw8!Hac5 p? CGxZfZ>h9hxZfZ>h9hz6oi+XYT6  5 CT={ZU\Oh̏q JNeXl8l@es7" C@s7" C@s7"=[^V_jY[q"ǬJX)bmVQѯ䳞H;fRr QӨ~Ӵq.̲8]Irc#Klav CGiXFl[+r (3׷ڜZkrDCЀH`2Ft q{*GCȑ}-N杜'1R QI;/,;9, 1"6#*x8 ©xkAҟ~in>{T ;]}s@^:Kf F[P#(+m2bQT#]SFOV}36zUm$qۘ SZQE^=:Io>宲\8b =u*I'(͗ 0 |1.'ym"h%BG"WR0ANB3geXZVs 6dR 1RQzP߳xO{wRZ%b=cćN='MTTOMBd-¢W^8gHW{J@Q@q6OZV7|QLt.ʴ9Slp;v*aYv~t{{-M6\ "̸# 1>ր8n;30\XͭY5+|q(RQ`14gr%?}ݿzqZQE-h]qgPK` =_/ujBJ)%-.~se,1ٱyFq?|®*wh 1'o61ZŚ$wp^Ykmj4,;աӶ (m !Lri:lڤ:}Ȯ2¾2(((((((((((([nܽnȠ*OG>o^k(((((((aplpack/vignettes/sliderbootwidget.jpg0000644000176200001440000002706113516603654017770 0ustar liggesusersJFIFHHC  !"$"$C'" [  !1U"A236QSauV#$4CTcfqr5Bbst7DFGRev9 !13ARq2QSarB#C ?&茺r')Ja[ˊK 6RtIQ۠"Çs 8ieӋCJ$5C,pZb@s(+>dX i2){dI9cTJW&ZwEthG9jc֌c|[]W1}Ȣ 50>~Q.6'1[r^RO<+jӼxWaE,3O%.䐮xzLXCe)::':5N<ƺr2 DÍ;Ilsh/MI u'X?&FfD,յ (ZtQ~zmc'ɯ( la"\ӏ<^!z(|u7 -GRYη͕vG! (&LԭxN]W» /֯]fb3]SrRRh@)S$4I`;ű66X2iY%Iqq@p=V8@uQБ륒jMZ^d8X\ټGx‹N]W|\w;wv. nCiLgPy8C]u~y`ʕ퓾Re]RZ%LKR֕ pj@H RK gjHox‹N]W) Y5xC#AC-2r )uT} F_um=F޷{wA0m]O])Hx‹N]W"faoPκ;i֢Ԟ'J^y;e=h9p1:—Vǖ[hKJ&5rrHNɾY,n˝.Ñv}m%@O_ g3#}PAPI 1YǝJ#Dh hR5wa2+D_S\ЖkE6r$%½&u.S ӬA;16KKn$K`sFRFhu^,0^_Ub^Vͼ(QmԄL ղ ZϞ:"*,0^O/aJ{۩RQukLMNHGEr6nSN.r0i-isnpvp-W uzGG̏%#nݣ鮜uA!O{ta[U\rZuRV³rlawmZ ۸ :t䙥ՂLgh"os{wMY=Ufi(ݱ PFJG歅%ͯ&Q:M"),'z  =BNj =ņ CҞ뵻2*jZ76D$fQUo/V,6KE6eb-( #DPK͸+voBe?k4#FݻStN:ՠax{zSpZKs[|V±_om-%&31*/":A!ZDz }˥ +# A(I]߷_u9!O{ta-sLKF'5Z[ truMZPDP%@Mljk/2Ub d!zm0╸:P8*x{zS`W =ņ CҞ\KNs5jaZپQ\/U+ɈCx O+q3o&Ӏ,}Fw =ņ CҞ04j*&1޵rZ_pDXεM-q(%J+ )i鯞K9se4m44B$:x{zSđRdSwwf9ofkNۖKG;rh:Vn[=-BsERVҶ\ Z?@g)@)JP W,/؞irƠb]T Qܑ :N)+BBRҝĭH)NBbmŞaB̺="hfXE%mYJ nuP(i\#r%'gZrc\w!B 69#sⷧy:juWˤezl|uenm/ ))iS{BW$oB[%)p\"t?~lQn!ϼ1IY4ܺ:Yf;am4uemIE)rͪ}<ݦUoM I[*i%n'p) q Bռi\;!*N=kqmγ9=r6 ׏/dDݬBm^^^܁/q!2XBKl%A!|#}s'Gsmre묤`ː6dH} $u〒5'@ O-3fL[DY L8rRPUiNA;ACd$ J/ߥVcyMĹL;wmaIm**!KB@QW$sɗkш]5z:m)B6o=kRn,+c6+$H|WI pQP.ԍX'AI9.}.mbSmwi XByOE ԍuRT{DJ;DJj# m{~?@Dجcv]ۜqpR֨%DjIӉ?1'XlO൧ӻFa=x=`;g#[:VRƳa=x=`;g#[:PlDzՃn&*:o{de5nƧ#qAF$xup6?fKȳ[Zqt6ƪR'@fC2{z+aR:Cx=`;g#[^$xGj;)hmmjI:ì_5_?@`)@)JPk=r.1w(!vw'/.R-vV*B I]§tجȼ[(;\y,Mj:VRۈ$$jOS9A佖y.̱\n2#2;=.sl5CBBU̴аt %1y4G`sQ.\; 9,(yGjvu Rq+}-| sVYV'u. seH-kHJ$4\y¥r3r/䑭d4̄ս)K h =HHQYY?5u:P1vg^:Ey[mh=@-ᮤMi>NYbYd`kvƚz9 LK %hp;;iuP'Xےtrip3nbW΄G6 hWH bEw~=wqz{[Ll)!ڒVB:P5DYx4l,o~Mɬn-"KE.!t!ʀKz2։S^QQ=\1Ǜ^Ȍ\fvkK+ $(^ =8Ǭ7y$cH6+'Ե(%;ZKpq#Eh06pe-%٘mϔ1KL6—@)@)JP RQZ*Z*cG 8.!#@̻vAB7ۉԍRU,V=(e4BP  hp]{}uՆu43) t) QRyvrf^gd8wkbږV8е!\k)bW|)|+NSy9iYyΡ*dhP[ij$oJSz$顑KEFc[(-M; c|)|+( .G}.G}°R|)|+( .G}±VNuW()JJRR()JJRR()JJRR*v_~Tv_~TS8^av Gq~Z=G^ǙBqh0],j;o0vwrA]xwNﺄ f}МeWKTl-Ci[) *  k{Vm%%DZI{߮9dlv2ۜ&.0ĮvZZZ  ~P'ty r{M56}RCen:TĄt$ tN -9-i:8%EA'ϱ_UdI{߮ҡcdܖYLI hi i]kПWyOt6Yi׮?M?jTgg[^w,4k@IQemz}n2 &ڟr]BB#^8|cfFLNInMq-0JZItQZ,~σ?I|TAEEvc/\f*+1V W2 )%EHkjZo q |q{ֻǕǪlHj=#ܞz1q&d8[.$P JL6r3P6huaMZ[->;1gMc0{ \jۯs*6!'nR7jhi4댻XPNHi*(\tIB:AH9:aeQdMLfvRa* иA yDAnW[F_{ɤ̲JkqpuX/'JY G*X}=|XR%d\XX-dK7wdg6t.fft{|FYaf){-&3J\*ڣ/:*i|֬޹o}S!AmKVtt-+D䷔8yU6jr g!dU,y̶'TRudբ\Nv<8~GYqs~eE]aSQA[Ф!gG hRtԁ<>33*Do!iJByղ"Ҥ7rO)Xkնu,(.w}/jumC5uryɯ(8Ճc̽p5p fs %䕔oX P j9MN947J\Xe=9[n!ԝPAHNSF.'#9,\g&R*eu X:j O q |q{ֻǕǪ%ߑ _(sն% a YJ̤谍t: HؼGL± l\-_|nR66oؓJRR*v_~Tv_~TS8^av sa?֟PWP)J\e TfƬ}$XpK:c0 ݵ kMt֓w} hDҫ}LjRj[e+ȸHS9!iRԵ Vuu?jP)YjSuiSdJBxJP R)@)JP V˧E%t257cSe()JJRR()Je-w?Jwe-w?J1Fiww˫ UoG[^]XjNPC Q`~l,ŋ:,! $R 16eE]aVۨP*J 8jj]9˻m;YfʍKȌQ8Mz|mn&()JJRR()JJRR()JJRR()JJRR*v_~Tv_~TS8^av r,r9)$q!*N? ,P8NN$) D R q~?@D80#NPCMKߢYO}t,N>dҤjK͸n J)!B](~:X 8Rگ 7dX2V~1 /z_&TgM槅|?RjP 7%o@5I@F|/Kށjڦ.|$\ Bܤ8@:<5П]g)JP R?(9a<ێXkp.EMp6b4Sk,JzjW,|1B׋u\eN4}ͥtq%=cV%6 %dsiڎq`j5'AV|vMB^+N-6-a!j ٠*@''^@qLPm9VBˊvg_K(PS`%Mhq.))Zs w5N)gə)#~mux<[ZY$uh'þ]?5zk׽s6h6n43:t'M2Ț SpAY=tjy_'{GfEÅsLn!iR- )altI3uwt7.PZr;HRx%LPgE)~ cwzq77W~jb5زLf*QRuK P$@qNXs̷n3\YBr $"1p6HQU2|6S eT7(SlxrŹP \Ze38IINx1tEi^2TRdA94 V~j?94 V~j?94JZ*ĺߕ> ָZ֤* 1:MFtӪcG 8.!35חVq~ԝӻFe,)JP R)@)JP R)@)JP R)@+?!5_q=)"^X:D%Nq66)#c]HI{?\׺g<9 ]%nau %Y %*Xc>\z%䶥m* R]7_(|̫LC""'7I7=D^@kvCgTqx~+yN^@kvCgSⷛa-/*x;_!A3)_(|̦/o7H;axZ_UvCgSƾQ L^nv𴿴_(|̧|?2?#iiT ƾQ OGk?h&~e1x~+yF Ҩ|?25~LbVt#P/Gk?h&~eOq>TƾQ OGk?h&~e1x~+yF {w}x{w}5~Lx;_!A3)[0^^p"7fҵX"frCn7qI7 2]ie:]n&2ZZ'ҮNWrR܇aplpack/vignettes/sliderbrushplotwidget.jpg0000644000176200001440000002471713516603654021054 0ustar liggesusersJFIFHHC  !"$"$C'"U !1U"T236AQSacu#$Vq4b7BCrst%DF7 !1QRq3Aa2rB#C ?&]8eAJRVME] Ts9tȰA_88IIAfS%jG~A_w"SIAK['H}nb:Z9+5FkI'<Q~wӘWaERY83 'e.HW[x;̦XCe)9:'*3NY;[thL&N4h%˥5#')̟+WUbƧ/R]?{1‹ǂ /֮c1v ̾Zf%ˌ 8*ݜҤ/%N|4Mv|jMݺ÷(T1yV2Ԝ3yFƵF)jY+x+j1‹[@s LZ[M "ڙ%\rR Bi _V`%Yfͼnz w(peXƏ(7S0Ǩg]a-~:;-k~dsWaEYa EKmq@^` ~^A5axh! U,P['>:CHQgT$YOjw)Ӧvj䃜l6oKwԬ(aw$h<ըfH: [},GŒןrn/=>*?flޖ_?IqJ  k&dZ,m}:#]}W"HJ3#}/Xq %̴RTE9dJ)y{ډʾ/7lOxq\'x#F:Sr.9Pta{zS޽:0=)^Y['%[oW-Eĺ_ff%QGY[ $+4}oG.wY$ItA%P$ x&b񉒫n! X[ֶhɇE]^_Ԭ]=ц!Ozz ^ ʰ9_9]7׭O]]qA)L9N!U'+1gYJy6I?X;H#x66RR>5`^N0/aJ{׮#qru:v ]z9?tWM_uF=ӣ CҞV}yu'ʻWCRIr 0eʙ.hYJIج0=)^`^P,t8Kruh\Cbqz1Xx>LF)6Вx)\3ˍi}(5G&!dp<k0=)^`^QllSKw; y/",XZqP-q(%J+ )e埿Zˍ%̜ܹKd!JPHU`^N0/aJ{ׯUg\| ksG'(g}@GQ˨z0/aJ{קF=P͗%ԒɕWzr02I9-2 #'I9fr_Ww6o\9^OFώygg x`gҵ0;rh琉6ܶzZ; +Y -x`gҵ0;rhd)4])-i+e=)JJRRjVۥ&nMb9ȫ@dA@4TZV^WmC7Xz#ȷIđ.pX4=l8š@JȔu%`@:W;c/T.᫕sf#qQߖuJqA԰S9fy%)Jt _ܣ299h (Z k iUg=c{&{ ޯi"w(g%¦m%,-?kkO?)mPzvDGuzy0EZ*uzqFnsî%JJi,H9>9e$wWo̳$EiFAJ@QˇVf>>kixj M y1Rs?@z1N>CiHBa9Yϯ:x`;g#a Õ''O: x`;g#/X;( göz";히Ҁx`;g#xlj쥡$M|y&JRR( 㡼1׏v~9{s~/խ,22k+r\_k t u%)=eC[4*lG,} ]1pKOCo|Z?*i c9$#eǻ?~e@VMO 5x7.7.>$--Mm-a%([RR2ufx׏l X‰r-p̬4Ȑ_Pi'i@Bp,Xsڱ )w'%Z8i< jҵKfA QZc1/Wg^#;>@aTڜo <MJ7mˍ>.ě۫Ii٢909ǫ*֝0Kѱ5=cl0|ȎGAu8kP*Z[Zu)EYjP R)@r_~DS/kDAU+U#KDH#.݈"F^[q9J3zyl2YM%BJR@\k7.^ or>3{񟀦#?X)@g|g)V P or>3[iv|ȸ_fSq|fYB5: JB3liJoU W!nN3|iP8 .-5  # J or>3Oཫq-=Fq1-Fr+);4u[q':}usw,Qmll2\U%Pm!ldS@́aor>3,r˪)@)JP R)@)JP R)@)JP R>~]"O uTVΗH/|}(5] \!kʎ3dj7G]\֘8}$9=;Z:u$Ϗ]- %3bOس-XR<͋?m?3bO 5*3س-s6, kǍ^,W!>ڨx]-Sȷ9 o&KNVINJ 9 6al[쵋VW8we<4b8ꂵ*JA$,s:Rw!YsKg]+ҤmC,N8gA fN@@Wfzgw t`6p!4iMjJBBE^Pg;ؾ e"wF;Áz^qJqJNkV:rώuUE'dA ׆ln:NjRn3)MԵd{ @R<͋?m?0j}w KcP OPRN5#,3gC"RxzB irKAVDP֣o{nʾCqLraeƇRԲ9k$8K=bo7cٟa嗟`8^nQSjVd$$f{fxݻlirEŌDyY56J$qHG @i2{7}ozgy]]\z>Hiz.JVkiR<*-ƣ-Cg.+@8 wS8TL\I'+ʳl|ŚaaqJ-RdYm6Pl咉4?9o.q妶ϕW3=y:՟ NѰnjNW:վst6_QN!\A,kg&۽jwM~Vdh,rAi.0JQ)IF(fxӶkdl|E|ȹH>)m+CK mIp!W'3(3_6m*<%O}!5'%>lAYAuĸ Y,\ 5IsێqĶҧmL`H^EvMѦiHmF578Qy:JRxo{7 VkN:o5<ۊs&PJ,4JLGNdi$ zg`a3,.Jqh S՚dʢ 75=9npJ7?kkO?*P?a4R$Ya4gqD qLfֽ!: ]Yp٣O)O) V>?P &ܵE5{ǺW}1BPKm'9O2\ KiImi)Z9$(F"??Ql}MSV3kqEJ5) _,G/v}܉iZ5E?@o.!jF=t*R)@)JP R)@)JP R)@r_~DS/kDAU+U#KDJ< }uCW<MwˮCBe,)JP R)@)JP R)@+4 %@ǁՆ֏>a `C 9dL+m8h]m5/Isȁmo0Sx?׶N%:[؎ŒM7lqgTL![dEY(qN#baT~fr]f !MmۥB R) Ԡ/ o0U< aǰ;mp *@YBIu2\sJԀ4'%)am\GUYo]0C7#a}o+ $_6Ŗ&E՜ۍBa4$,2u{ ?2 ]TRt L㙥xJh}w:c~M:dor?&7_! Qi=W27֏n_V a|Q%0 ̅37_! #xF6m@ #y~cg|97PT uxIuƮv6sQH''!L[1!6lEmbي1$AjzJL$4"(0+%%HP9ANG?b[=yrn^ou %l642R*δ27֏nNkGܷOɦMbCi<ٶ` ;{hҤmN-IΥjq@%2zdor?&27֏nL ĆґDFm+϶nUB3:1^e%S\GJ.0"tr[}\2cK:Mq(BRu Oګy쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJPo b^ncKHy ЬȀFc R.gaplpack/vignettes/sliderfns.Snw0000644000176200001440000044725413516603655016411 0ustar liggesusers\newcounter{Rchunkno}\newcounter{IsInCodeChunk}\setcounter{IsInCodeChunk}{1}\newcommand{\codechunkcommands}{\normalsize}\newcommand{\textchunkcommands}{\normalsize}\newcommand{\Routputcommands}{\normalsize}\newcommand{\makemarginno}{\par\vspace{-0.5\parskip}\codechunkcommands\stepcounter{Rchunkno}\setcounter{IsInCodeChunk}{1}\noindent\hspace*{-3em}\makebox[0mm]{\arabic{Rchunkno}}\hspace*{3em}}% New Report: Fri Sep 26 17:30:28 2014 % New Report: Fri Sep 26 16:59:20 2014 % New Report: Thu Sep 25 16:58:08 2014 % New Report: Mon Nov 4 13:41:06 2013 % New Report: Mon Nov 4 13:28:20 2013 % 131104: # require(tcltk) # now in the depends section of the package % slider() is copied from R/work/relax/install.dir/relax/R/slider.R % New Report: Fri Jun 12 11:48:32 2009 % New Report: Wed Mar 25 10:10:57 2009 %%%??? slider redo button release / at once,, vertcal sliders,, other button arrangements?? % New Report: Mon Jun 9 18:03:49 2008 % New Report: Tue Jun 3 09:20:42 2008 % New Report: Mon May 26 11:10:38 2008 % --- begin of preamble \documentclass{article} %\VignetteIndexEntry{Working with Slider Functions} % --- packages \usepackage{a4,graphicx,mathpazo,courier,alltt,amssymb} \usepackage{graphicx} % --- fonts % \usepackage[scaled=.95]{helvet} \usepackage[T1]{fontenc} % --- commands to control the layout of text and code chunks \parskip1ex \topmargin0cm \textheight22cm \parindent0mm \renewcommand{\textchunkcommands}{\normalsize} \renewcommand{\codechunkcommands}{\small} % --- titlepage \title{Some Slider Functions} \author{Hans Peter Wolf\\ {\small pw090615-1650, /home/wiwi/pwolf/R/aplpack/sliderfns, File:} \jobname.rev } % --- end of preamble \begin{document}\maketitle % --- begin of document \tableofcontents \newcommand{\showwidget}[1]{\par \includegraphics[width=4cm]{#1}} \newpage \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Slider functions for exploratory data analysis} In this paper we discuss a set of slider functions for constructing dynamical statistical plots. Some of the characteristics of these plots are controlled by sliders and you can modify the plots by the sliders. The sliders will be generated within Tcl/Tk widgets. Moving a slider results in changing the associated parameter and the graphics output is updated. For example, {\tt slider.density()} plots a density trace and opens a Tcl/Tk widget with one slider that is linked to the {\tt width} parameter of {\tt density()}. After shifting the slider and releasing the mouse button the density trace is plotted again taking into account the new window width. The next section contains a list of functions presented in this paper. Then you get some examples so you can see the function in action. Some special tricks are used to customize the behaviour of the slider functions. These programming pearls are discussed in section three. In the remaining sections you find the definitions of the slider function. We hope that the functions are useful for you in the way they are defined. However, you are invited to take a closer look at the code. Sometimes it will be very easy to enhance the proposals and you quickly get new slider functions. \newpage \section{Slider functions -- overview and examples} \subsection{The functions of the paper} \newcommand{\kannweg}[1]{\relax} \kannweg{ The following list shows the slider functions of this paper. \begin{itemize} % 1 dim \item histogram %ok \item density %ok %% box-cox %% \item show 1.dim: hist, boxplot, ecdf, density ... layout %% \item stem ... n.classes \item --- density presenter % zra \item tszoom %ok \item smooth Tukey \item change of structure in different regions % k dim xy \item xyplot mit brushing ok %%% xyplot brushing: 2 Var waehlen sowie die Intervalle aller Var per slider %regression \item smooth by Lowess %%% \item --- xyplot mit lm - local estimations \item bootstrap regression ok %%% \item --- outlier %%% \item R^2 estimation \end{itemize} } The following list shows the functions available in this package: \makemarginno $\langle${\it linux command to find the slider functions}\ $1\rangle\equiv$ \label{CodeChunkLabelAAAB} \rule{0mm}{0mm}\newline\verb? fns<-readLines("sliderfns.rev") ?% \rule{0mm}{0mm}\newline\verb? fns<-fns[grep("^slider.*function",fns)] ?% \rule{0mm}{0mm}\newline\verb? sort(unique(sub("<-.*$","",fns))) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \par\Routputcommands\begin{verbatim} Wed Mar 25 10:12:18 2009 [1] "slider" "slider.bootstrap.lm.plot" [3] "slider.brush.pairs" "slider.brush.plot.xy" [5] "slider.density" "slider.hist" [7] "slider.lowess.plot" "slider.present.density" [9] "slider.show.density" "slider.show.norm" [11] "slider.show.normal.density" "slider.smooth.plot.ts" [13] "slider.split.plot.ts" "slider.trimmed.mean" [15] "slider.trimmed.mean.plus" "slider.trimmed.mean.simple" [17] "slider.xyz" "slider.zoom.plot.ts" \end{verbatim}\textchunkcommands \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \newpage \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi The next subsections contain a sequence of screen shots showing the some of the slider functions in action. \subsection{{\tt slider.hist}} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi {\tt slider.hist} computes histograms. The number of classes is controlled by a slider. As a special feature {\tt slider.hist} has a {\tt panel} argument. This argument allows you to deliver a panel function which draws some additional plotting elements. In the following example {\tt panel} is used to add a normal density curve as well as a \emph{rug}. \makemarginno $\langle${\it show {\tt slider.hist}}\ $2\rangle\equiv$ \label{CodeChunkLabelAAAC} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.hist}} 31$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.hist(rivers,xlab="x",col="green",probability=TRUE, ?% \rule{0mm}{0mm}\newline\verb? panel=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy); rug(x); print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi After moving the slider to position 17 the control widget looks like this: \begin{center} \includegraphics[width=4cm]{sliderhistwidget} \end{center} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi After releasing the mouse button the graphics device shows the following plot: \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=6cm]{p2008-Aug27-144152}\end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi You see that the fit of the normal distribution is not very good. Perhaps an exponential distribution is a quite better model. Can you build a new call of {\tt slider.hist} with a suitable exponential density curve? Hint: You have to exchange the line of code that computes the normal density values:\\ remove {\tt yy<-dnorm(xx,mean(x),sd(x))} \\ write {\tt yy<-dexp(xx,1/mean(x))}. \newpage \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.density}} {\tt slider.density} computes density traces. The parameter {\tt width} and the type of the kernel function are controlled by sliders. Like {\tt slider.hist} the function {\tt slider.density} has a panel argument to add further graphical elements. In the example {\tt slider.density} a normal density curve and a rug are added by the {\tt panel} function. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \makemarginno $\langle${\it show {\tt slider.density}}\ $3\rangle\equiv$ \label{CodeChunkLabelAAAD} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.density}} 34$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.density(log(rivers),xlab="rivers",col="red", ?% \rule{0mm}{0mm}\newline\verb? panel=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy); rug(x); print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi If you want to select a width of 3 percent of the range of the data and a rectangular kernel the slider control widget must have the following apearance. With these settings the graph will be very shaky. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center} \includegraphics[height=7cm]{p2008-Aug27-145612} \showwidget{sliderdensitywidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi The parameter settings {\tt "width=20"}, {\tt "kernel=epanechnikov"} result in a much smoother plot. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p2008-Aug27-150508} \showwidget{sliderdensitywidget2} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.brush.pairs}} {\tt pairs()} constructs a draftsman's display -- a set of two dimensional scatterplots. This function is really useful for data sets with 3 to 10 variables because dependencies between a pair of variables can be seen at once. However, sometimes it is very interesting to explore two dimensional dependencies of a subset of the data points that are defined by a third variable. This idea leads to the function {\tt slider.brush.pairs} which computes a pairs plot and allows you to define an interval for the values of one variable. After changing the settings all data points of the visible interval are recolored using the color "red". \makemarginno $\langle${\it show {\tt slider.brush.pairs}}\ $4\rangle\equiv$ \label{CodeChunkLabelAAAE} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.pairs}} 38$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.brush.pairs(iris[,-4]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p171340-Jun-9} ~~~~~\showwidget{sliderpairswidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.brush.plot.xy}} The function {\tt slider.brush.plot.xy} is a small version of {\tt slider.brush.pairs()}. It is suitable for three dimensional data sets. {\tt slider.brush.plot.xy()} computes a two dimensional scatterplot and chooses the color of the points conditional to a third variable. Therefore, you can start the exploration with {\tt slider.brush.pairs()} and if you want to concentrate on one of the scatterplots --- e.~g.~for the purpose of presentation --- you can call {\tt slider.brush.plot.xy()}. \makemarginno $\langle${\it show of {\tt slider.brush.plot.xy}}\ $5\rangle\equiv$ \label{CodeChunkLabelAAAF} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.plot.xy}} 40$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy(iris[,1:3]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p172434-Jun-9} \showwidget{sliderbrushplotwidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.split.plot.ts}} Time series often have different structures in the distinct intervals. Then it may be interesting to inspect various subsets of the data. For comparing different intervals (in time) you can split the whole time series into pieces and fit linear regression models to the various regions. The function {\tt slider.split.plot.ts} has been designed for doing this job. By sliders you are able to define a point on the time axis as well as the length of a time interval (strip). Then a time series plot of your data is computed and it is partitioned into stripes in a way that one limit between two strip is identical with the selected point. Furthermore, regression lines of fitted linear models are drawn within each of the intervals. Alternatively {\tt slider.split.plot.ts} allows you to draw the main characteristics of the subsets of points. A mouse click on the button {\tt fivenum\ summary} of the control widget will add graphical five number summaries of the data values of each region. \makemarginno $\langle${\it show {\tt slider.split.plot.ts}}\ $6\rangle\equiv$ \label{CodeChunkLabelAAAG} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.split.plot.ts}} 43$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.split.plot.ts(as.vector(sunspots)[1:100]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p173657-Jun-9} \showwidget{slidersplitwidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.zoom.plot.ts}} Some time series are often very long. For inspection such a series you want to be able to view the data of selected intervals. {\tt slider.zoom.plot.ts} enables you to choose two windows of the whole range of the data and the function computes two time series plots of the two sections. With this function it is easy to compare the structures of two different regions of a time series. \makemarginno $\langle${\it show {\tt slider.zoom.plot.ts}}\ $7\rangle\equiv$ \label{CodeChunkLabelAAAH} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.zoom.plot.ts}} 46$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(as.vector(sunspots),2) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p175158-Jun-9} \showwidget{sliderzoomwidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.smooth.plot.ts}} The function {\tt slider.smooth.plot.ts} allows you to smooth a time series by running medians or some other operations which has been proposed by Tukey. The implementation is based on {\tt smooth()} and the operation is applied by clicking one of the buttons of the control widget. \makemarginno $\langle${\it show {\tt slider.smooth.plot.ts}}\ $8\rangle\equiv$ \label{CodeChunkLabelAAAI} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.smooth.plot.ts}} 50$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts(rnorm(100)) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p180443-Jun-9} \bigskip \bigskip \showwidget{slidersmoothwidget}\end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.lowess.plot}} {\tt lowess()} is an R function for analyzing the trend of points in a scatterplot. The smoothness of the computed line depends on a span parameter. Because of the algorithm is time consuming {\tt lowess} has a parameter to fix the number of iterations to be done. The function {\tt slider.lowess.plot()} computes a scatterplot of a data set and lets you select these two parameters by an control widget. \makemarginno $\langle${\it show {\tt slider.lowess.plot}}\ $9\rangle\equiv$ \label{CodeChunkLabelAAAJ} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.lowess.plot}} 53$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.lowess.plot(cars) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p180705-Jun-9} \showwidget{sliderlowesswidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.bootstrap.lm.plot}} Sometimes you have fitted a model curve on the base of a data set and you wonder how sensitive the result is against changes of the data. The function {\tt slider.bootstrap.lm.plot()} draws a scatterplot containing the curve of a fitted model as well as some curves that have been computed on samples of the original data points. The user is allowed to select the degree of the polynom to be fitted, the number of bootstrap samples and the random seed. \makemarginno $\langle${\it show {\tt slider.bootstrap.lm.plot}}\ $10\rangle\equiv$ \label{CodeChunkLabelAABA} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.bootstrap.lm.plot}} 56$\rangle$% \rule{0mm}{0mm}\newline\verb? daten<-iris[,2:3] ?% \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot(daten) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p181236-Jun-9} \showwidget{sliderbootwidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \newpage \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{General issues of the implementation} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{The structure of slider functions} The last section discusses some slider functions and the reader has got examples of their application. Now we will explore the structure of the slider functions. All of them call the function {\tt slider} to create and to control Tcl/TK widgets. The widgets consist of sliders and buttons that are linked to R functions describing the actions to be performed. To demonstrate the usage of {\tt slider} within the slider functions we discuss some examples now. As a very simple one let us build a slider function that prints the trimmed mean of a data set depending on the trim fraction which is controlled by a slider. \subsubsection{A very simple example} In this paragraph we define the function {\tt slider.trimmed.mean.simple}. It shows the usage of the function {\tt slider()} for doing the jobs \begin{itemize} \item create a control widget with one slider \item define the effect or the action to be done in case of a slider movement \item link the slider with the action. \end{itemize} Before going into details activate the following code chunk, please. It will define the function {\tt "slider.trimmed.mean.simple"} and it will call the new function with the data set {\tt "rivers[1:50]"}: \makemarginno $\langle${\it define {\tt slider.trimmed.mean}}\ $11\rangle\equiv$ \label{CodeChunkLabelAABB} \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean.simple<-function(x) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? # general initialisations ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)) return("Error: no data found!") ?% \rule{0mm}{0mm}\newline\verb? # function to update result ?% \rule{0mm}{0mm}\newline\verb? compute.trimmed.mean<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # get slider ?% \rule{0mm}{0mm}\newline\verb? alpha <- slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? # print result ?% \rule{0mm}{0mm}\newline\verb? cat(paste("trim fraction",alpha,":",mean(x,trim=alpha),"\n")) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # definition of slider widget ?% \rule{0mm}{0mm}\newline\verb? slider(compute.trimmed.mean,"trim fraction",0,0.5,0.01,0) ?% \rule{0mm}{0mm}\newline\verb? # initial computation ?% \rule{0mm}{0mm}\newline\verb? compute.trimmed.mean() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean.simple(rivers[1:50]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Move the slider named {\tt "trim\ fraction"} and observe what happens! Now let's take a look at the definition of {\tt slider.trimmed.mean.simple}. The function consists of four instructions: \begin{itemize} \item The first statement is an input check -- business as usual. \item The second one defines the effect of a movement of the slider in form of an \emph{action function} although the slider hasn't been defined yet. \item Then the function {\tt slider} is called to build the control widget and the action function is passed by the first parameter. \item At last the action function is called and a trimmed mean will be printed. \end{itemize} You see {\tt slider.trimmed.mean.simple()} mainly consists of the definition of the action function {\tt compute.trimmed.mean()} and a call of {\tt slider()}. {\tt compute.trimmed.mean()} fulfills two tasks: fetching the actual value of the slider variable (trim fraction {\tt alpha}) and printing the trimmed mean. {\tt slider(no=1)} reads the value of slider number {\tt "no=1"} and then the value is assigned to the local variable {\tt alpha}. The computation of the trimmed mean by {\tt mean()} and its printing follows. \subsubsection{The main arguments of {\tt slider}} A slider of a slider control widget is declared by six parameters. The meaning of them is found in following list. \begin{enumerate} \item {\tt sl.functions}: an effect function which is called after moving the slider \item {\tt sl.names}: a text for labeling the slider \item {\tt sl.mins}: the minimum of the range of the slider \item {\tt sl.maxs}: the maximum of the range of the slider \item {\tt sl.deltas}: the increment of the scale of the slider \item {\tt sl.defaults}: the default value of the slider \end{enumerate} These parameters are arguments of the function {\tt slider}. The following example has the same structure as {\tt slider.trimmed.mean.simple()}. However, the action function computes a plot and in the call of {\tt slider()} the names of the formal parameters are used. \makemarginno $\langle${\it define {\tt slider.trimmed.mean}}\ $11\rangle+\equiv$ \label{CodeChunkLabelAABC} \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean<-function(x) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? # general initialisations ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)) return("Error: no data found!") ?% \rule{0mm}{0mm}\newline\verb? # function to update plot ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # get slider ?% \rule{0mm}{0mm}\newline\verb? alpha <- slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? # compute mean ?% \rule{0mm}{0mm}\newline\verb? tm <- mean(x,trim=alpha); m <- mean(x) ?% \rule{0mm}{0mm}\newline\verb? # construct plot ?% \rule{0mm}{0mm}\newline\verb? plot(as.data.frame(x)) ?% \rule{0mm}{0mm}\newline\verb? abline(v=tm,col="red") ?% \rule{0mm}{0mm}\newline\verb? text(tm,1.1,adj=1,"trimmed mean",col="red") ?% \rule{0mm}{0mm}\newline\verb? abline(v=m,col="black") ?% \rule{0mm}{0mm}\newline\verb? text( m,0.9,adj=0,"mean") ?% \rule{0mm}{0mm}\newline\verb? title(paste("trimmed mean:", format(tm,signif=4), ?% \rule{0mm}{0mm}\newline\verb? "\ntrim fraction:",round(alpha*100),"%")) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # definition of slider widget ?% \rule{0mm}{0mm}\newline\verb? slider(sl.functions=refresh, ?% \rule{0mm}{0mm}\newline\verb? sl.names= "trim fraction", ?% \rule{0mm}{0mm}\newline\verb? sl.mins= 0, ?% \rule{0mm}{0mm}\newline\verb? sl.maxs= 0.5, ?% \rule{0mm}{0mm}\newline\verb? sl.deltas= 0.01, ?% \rule{0mm}{0mm}\newline\verb? sl.defaults= 0 ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? # initial plot ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean(rivers[1:50]) ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=6cm]{p152540-Sep-2}\end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi It may be astonishing that the argument names are in plural form. This indicates that more than one slider can be defined in the same way. The following section will show you an example with two sliders. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Buttons and slider variables} The next version of the running example --- {\tt slider.trimmed.mean.plus()} --- demonstrates how two sliders are implemented. To keeps things simple a second slider is defined. It allows the user to change the color of the plot. In addition three \emph{buttons} are generated to switch between three graphical representations of the data: dotplot, histogram or boxplot. The code is a little bit longer. However, we are shure that it isn't very difficult to understand it. \makemarginno $\langle${\it define {\tt slider.trimmed.mean}}\ $11\rangle+\equiv$ \label{CodeChunkLabelAABD} \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean.plus<-function(x) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? # general initialisations ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)) return("Error: no data found!") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="ptype",obj.value="hist") ?% \rule{0mm}{0mm}\newline\verb? # function to update plot ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # get settings ?% \rule{0mm}{0mm}\newline\verb? alpha <- slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? mycol <- slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? ptype <- slider(obj.name="ptype") ?% \rule{0mm}{0mm}\newline\verb? # computation ?% \rule{0mm}{0mm}\newline\verb? tm <- mean(x,trim=alpha); m <- mean(x) ?% \rule{0mm}{0mm}\newline\verb? # construct high level plot ?% \rule{0mm}{0mm}\newline\verb? if(ptype=="dotplot") plot(as.data.frame(x),col=mycol) ?% \rule{0mm}{0mm}\newline\verb? if(ptype=="hist") hist(x,col=mycol) ?% \rule{0mm}{0mm}\newline\verb? if(ptype=="boxplot") boxplot(x,col=mycol,horizontal=TRUE) ?% \rule{0mm}{0mm}\newline\verb? # perform some lower level jobs ?% \rule{0mm}{0mm}\newline\verb? abline(v=tm,col="red") ?% \rule{0mm}{0mm}\newline\verb? text(tm,1.1,adj=1,"trimmed mean",col="red") ?% \rule{0mm}{0mm}\newline\verb? abline(v=m,col="black") ?% \rule{0mm}{0mm}\newline\verb? text( m,0.9,adj=0,"mean") ?% \rule{0mm}{0mm}\newline\verb? title(paste("trimmed mean:", format(tm,signif=4), ?% \rule{0mm}{0mm}\newline\verb? "\ntrim fraction:",round(alpha*100),"%")) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # three functions to react on buttons ?% \rule{0mm}{0mm}\newline\verb? b1<-function(...){slider(obj.name="ptype",obj.value="dotplot");refresh()} ?% \rule{0mm}{0mm}\newline\verb? b2<-function(...){slider(obj.name="ptype",obj.value="hist"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? b3<-function(...){slider(obj.name="ptype",obj.value="boxplot");refresh()} ?% \rule{0mm}{0mm}\newline\verb? # definition of slider widget ?% \rule{0mm}{0mm}\newline\verb? slider(sl.functions= refresh, ?% \rule{0mm}{0mm}\newline\verb? sl.names= c("trim fraction","color"), ?% \rule{0mm}{0mm}\newline\verb? sl.mins= c(0,1), ?% \rule{0mm}{0mm}\newline\verb? sl.maxs= c(0.5,13), ?% \rule{0mm}{0mm}\newline\verb? sl.deltas= c(0.01,1), ?% \rule{0mm}{0mm}\newline\verb? sl.defaults= c(0,1), ?% \rule{0mm}{0mm}\newline\verb? but.functions=c(b1,b2,b3), ?% \rule{0mm}{0mm}\newline\verb? but.names= c("dotplot","histogram","boxplot") ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? # initial plot ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean.plus(rivers[1:50]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=6cm]{p152654-Sep-2} \showwidget{slidertrimhistwidget} \end{center} % check %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi In this example vectors of length two are assigned to the arguments {\tt sl.names}, {\tt sl.mins}, {\tt sl.maxs}, {\tt sl.deltas}, and {\tt sl.defaults}. The first elements of the vectors describe the settings of the first slider whereas the second ones fix the parameters of the other slider. The buttons are implemented by a vector of threee names ({\tt but.names}) and by a vector of three effect functions ({\tt but.functions}). To handle the state of the selected plot type a slider variable ({\tt ptype}) is created. During updating the plot the actual value of {\tt ptype} is found by the statement {\tt slider(obj.name="ptype")}. After changing {\tt ptype} it is stored by statements like {\tt slider(obj.name="ptype",\ obj.value="dotplot")}. In this example the effect functions of the buttons only consist of a statement to store the plot type and to update the plot by calling the effect function {\tt refresh()}. In summary there is a simple structure for implementing sliders and buttons. Slider variables can be used to communicate states, values and other information. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{General Rules} In the last section the reader learned the syntax of the function {\tt slider} and he will be able to write slider function of his own. To achieve a similar structure of the slider functions introduced in this paper we propose some general rules now. \subsubsection{Names of the slider functions} The names of the slider functions of this paper always start with the character string {\tt "slider"} and end with a string indicating the job to be done, e.g. a statistical procedure or function like {\tt hist}, {\tt pairs} or {\tt smooth}. \subsubsection{Formal arguments for data sets} One dimensional data sets are passed to a {\tt slider*} function by the argument {\tt x}. If the data set is of two dimensions there are two types of calls: Either argument {\tt x} is a matrix or a data frame with two columns or the argruments {\tt x} and {\tt y} are used for the first and the second variable. If {\tt x} is a vector and {\tt y} not available then {\tt x} is used as the second dimension and {\tt seq(x)} as the first one. Three dimensional data sets are managed in an analogous way: A $(n\times3)$-matrix has to be assigned to {\tt x} or the arguments {\tt x}, {\tt y} and {\tt z} must be used. These rules enable us to write some general statements for checking and for preparation of some local variables containing the data. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Checking the one dimensional case is simple. Besides {\tt x.name} stores how the {\tt x} argument has been assigned by the user. \makemarginno $\langle${\it check if {\tt x} is a vector}\ $14\rangle\equiv$ {\quad$\subset$ 31, 34, 38, 66 } \label{CodeChunkLabelAABE} \rule{0mm}{0mm}\newline\verb? x.name<-deparse(substitute(x)) ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)||length(x)<2) return("Error: x must be a vector") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi To check a two dimensional data input the two cases described above has to be handled. After checking the data are assigned to two local variables {\tt x} and {\tt y}. \makemarginno $\langle${\it check if {\tt x} is a matrix or {\tt x} and {\tt y} are vectors}\ $15\rangle\equiv$ {\quad$\subset$ 53, 56 } \label{CodeChunkLabelAABF} \rule{0mm}{0mm}\newline\verb? x.name<-deparse(substitute(x)) ?% \rule{0mm}{0mm}\newline\verb? y.name<-deparse(substitute(y)) ?% \rule{0mm}{0mm}\newline\verb? if(length(x)<2) return("Error: x is of length 0 or 1") ?% \rule{0mm}{0mm}\newline\verb? if(!is.null(y)){ ?% \rule{0mm}{0mm}\newline\verb? if(length(y)<2) return("Error: y must be a vector") ?% \rule{0mm}{0mm}\newline\verb? if(length(x)!=length(y)) ?% \rule{0mm}{0mm}\newline\verb? return("Error: x and y must have the same length") ?% \rule{0mm}{0mm}\newline\verb? x<-cbind(x,y) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(!is.matrix(x) && !is.data.frame(x)){ ?% \rule{0mm}{0mm}\newline\verb? x<-cbind(seq(x),x) ?% \rule{0mm}{0mm}\newline\verb? y.name<-x.name; x.name<-"index" ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(is.null(y.name)){x.name<-colnames(x)[1]; y.name<-colnames(x)[2]} ?% \rule{0mm}{0mm}\newline\verb? y<-x[,2]; x<-x[,1] ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi In the case of three dimensions the arguments {\tt y} and {\tt z} are dealt like {\tt y} in the two dimensional case. \makemarginno $\langle${\it check if {\tt x,\ y,z} are vectors or {\tt x} is matrix with >2 columns}\ $16\rangle\equiv$ {\quad$\subset$ 40 } \label{CodeChunkLabelAABG} \rule{0mm}{0mm}\newline\verb? x.name<-deparse(substitute(x)) ?% \rule{0mm}{0mm}\newline\verb? y.name<-deparse(substitute(y)) ?% \rule{0mm}{0mm}\newline\verb? z.name<-deparse(substitute(z)) ?% \rule{0mm}{0mm}\newline\verb? if(length(x)<2) return("Error: x is of length 0 or 1") ?% \rule{0mm}{0mm}\newline\verb? if(!is.null(y)){ ?% \rule{0mm}{0mm}\newline\verb? if(length(y)<2) return("Error: y must be a vector") ?% \rule{0mm}{0mm}\newline\verb? if(length(x)!=length(y)) ?% \rule{0mm}{0mm}\newline\verb? return("Error: x and y must have the same length") ?% \rule{0mm}{0mm}\newline\verb? x<-cbind(x,y) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(!is.null(z)){ ?% \rule{0mm}{0mm}\newline\verb? if(length(z)<2) return("Error: z must be a vector") ?% \rule{0mm}{0mm}\newline\verb? if(length(x)!=length(z)) ?% \rule{0mm}{0mm}\newline\verb? return("Error: x and z must have the same length") ?% \rule{0mm}{0mm}\newline\verb? x<-cbind(x,z) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(!is.matrix(x)&& !is.data.frame(x) && ncol(x)<3) ?% \rule{0mm}{0mm}\newline\verb? return("Error: not enough variables") ?% \rule{0mm}{0mm}\newline\verb? if("NULL"==y.name){x.name<-colnames(x)[1]; y.name<-colnames(x)[2]} ?% \rule{0mm}{0mm}\newline\verb? if("NULL"==z.name){x.name<-colnames(x)[1]; z.name<-colnames(x)[3]} ?% \rule{0mm}{0mm}\newline\verb? z<-x[,3]; y<-x[,2]; x<-x[,1] ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Time series are different from a one dimensional data set because data points are connected with times. Therefore, we need a code chunk for checking time series. \makemarginno $\langle${\it check if {\tt x} is a time series}\ $17\rangle\equiv$ {\quad$\subset$ 43, 46, 50 } \label{CodeChunkLabelAABH} \rule{0mm}{0mm}\newline\verb? x.name<-deparse(substitute(x)) ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)||length(x)<2) return("Error: x must be a vector") ?% \rule{0mm}{0mm}\newline\verb? y<-x; if(is.ts(x)) { x<-time(x) } else { x<-seq(x) } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Passing additional arguments} Remark: This section should be skipped during the first reading of the text! You know that high level plotting function have the formal parameter {\tt "..."}. This argument allows the user to pass additional settings to the graphics device. At once the question arises: Can we manage to pass such arguments to plotting functions that are called by a slider function? For example: a histogram is computed in the {\tt refresh} function and the user wants to produce \emph{green} bars. There are different answers to tackle this problem. At first you can consider which of the graphics parameters are relevant to be set by the user. Then we can introduce these parameter in the header of a slider function. But the list of parameters will be very long because the user may be want to modify attributes of scale, point size, type, color, etc. A second way is to define a {\tt "..."} argument for passing additional parameters. \par\Routputcommands\begin{verbatim} slider.xyz<-function(x,...) \end{verbatim}\textchunkcommands \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi But there will be some difficulties to be managed if you use the {\tt "..."} construction. How do we handle the {\tt "..."} argument, how do we set default values for some parameter and how can we remove parameters that must not be changed at all? In the initialization part of the {\tt slider.*} functions it is possible to modify the list of the additional arguments. To demonstrate this step we show how you can remove a {\tt breaks} argument and then append a {\tt "main"} argument. If {\tt main} is not available it is set to {\tt x.name} . (Cleary there is no graphics parameter with name {\tt breaks} but users used to set breaks in their calls of {\tt hist} may try to deliver a {\tt breaks} argument.) \makemarginno $\langle${\it modification of the {\tt "..."} argument, not for evaluation}\ $18\rangle\equiv$ \label{CodeChunkLabelAABI} \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? args<-args[names(args)!="breaks"] # remove "breaks" ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args))) # set default "main" ?% \rule{0mm}{0mm}\newline\verb? args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Now the argument list {\tt args} has to be passed to the function {\tt hist} within the action or refresh function. Writing {\tt hist(x,args)} doesn't work because the second argument of {\tt hist} is the {\tt break} argument and not a slot for further arguments. The second idea will be to use the {\tt "..."} of {\tt hist}: {\tt hist(x,...=args)}. But the {\tt "..."} argument of {\tt hist} is passed to the functions {\tt title} and {\tt axis} and so we don't get green bars at all. Our answer to this problem is to describe the call by its elements: the function {\tt hist} should be called with the argument list consisting of the additional arguments stored in {\tt args} and other arguments specifying the data set and the breaks, for example. Then the function {\tt do.call} is called with theses elements. Keep in mind that {\tt do.call} needs the arguments as an {\tt alist}. To summarize the following construction will work and is used in the function {\tt slider.hist}: \makemarginno $\langle${\it some details of a slider function, not for evaluation}\ $19\rangle\equiv$ \label{CodeChunkLabelAABJ} \rule{0mm}{0mm}\newline\verb? slider.xyz<-function(x,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it initialisation statements} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? args<-args[names(args)!="breaks"] # remove "breaks" ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args))) # set default "main" ?% \rule{0mm}{0mm}\newline\verb? args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it more initialisation statements} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it some computations for the refresh task} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? do.call("hist",c(alist(x=x,breaks=breaks),args)) ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it further refreshing statements} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it tail of function slider.xyz} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Before we close this section we will present a further proposal to deal with the arguments. In the game there are four sets of information: \begin{itemize} \item the set of default settings coded in the slider function \item the set of additional parameters defined by the user \item the set of forbidden arguments that must not be used \item the set of important settings that must not be changed by the user \end{itemize} We can save these sets on suitable list objects: \makemarginno $\langle${\it *}\ $20\rangle\equiv$ \label{CodeChunkLabelAACA} \rule{0mm}{0mm}\newline\verb? # defaults (these are allowed to be changed by users) ?% \rule{0mm}{0mm}\newline\verb? defaults<-list(main=x.name) ?% \rule{0mm}{0mm}\newline\verb? # graphics parameter of the user ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? # forbidden (these must not be passed to a slider function) ?% \rule{0mm}{0mm}\newline\verb? set.of.forbidden.args<-list(probability=TRUE) ?% \rule{0mm}{0mm}\newline\verb? # important (these are passed and must not to be changed by users) ?% \rule{0mm}{0mm}\newline\verb? important<-alist(bty="n",sub="graphics computed by slider") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Now the sets have to be combined. At first we remove the forbidden elements from the argument list of the user. Then we concatenate the important ones, the user arguments and the default settings. Finally, we remove elements whose names occur on the list earlier. \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAACB} \rule{0mm}{0mm}\newline\verb? # remove not allowed ?% \rule{0mm}{0mm}\newline\verb? args<-args[!names(args) %in% set.of.forbidden.args] ?% \rule{0mm}{0mm}\newline\verb? # set of all parameters ?% \rule{0mm}{0mm}\newline\verb? defaults<-c(important,args,defaults) ?% \rule{0mm}{0mm}\newline\verb? # removing of double ones ?% \rule{0mm}{0mm}\newline\verb? args<-defaults[unique(names(defaults))] ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi The refresh function has a very simple structure now. \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAACC} \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? xrange<-range(x); num<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? breaks<-seq(xrange[1],xrange[2],length=num+1) ?% \rule{0mm}{0mm}\newline\verb? do.call("hist",c(alist(x=x,breaks=breaks),args )) ?% \rule{0mm}{0mm}\newline\verb? panel(x) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi In the following we have not implemented these ideas completely. Sometimes we pass {\tt ...} arguments without further checks. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Density Presenter} In this paragraph we discuss some tools for plotting densities of distributions. The parameters of the distribution are controlled by sliders. These functions allow the user to study how the shapes of the densities depend on the parameter settings. It is a very easy exercise to find an implementation for a special distribution, e.g., the normal distribution. \makemarginno $\langle${\it define {\tt slider.show.normal.density}}\ $23\rangle\equiv$ {\quad$\subset$ 24, 30 } \label{CodeChunkLabelAACD} \rule{0mm}{0mm}\newline\verb? slider.show.normal.density<-function(name,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? x<-seq(-10,10,length=200) ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? par1<-slider(no=1); par2<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? f.x<-dnorm(x,par1,par2) ?% \rule{0mm}{0mm}\newline\verb? main=paste("normal distribution\n", ?% \rule{0mm}{0mm}\newline\verb? "E(X) =",format(par1,digits=3), ?% \rule{0mm}{0mm}\newline\verb? ", sd(X) =",format(par2,digits=3)) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,f.x,type="l",main=main) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=x,y=f.x,type="l",main=main),args)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("expectation","standard deviation"), ?% \rule{0mm}{0mm}\newline\verb? c(-20,.001),c(20,20),c(.1,.1),c(0.1,1) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use slider to select parameters!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Here comes a check. \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAACE} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.show.normal.density}} 23$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.show.normal.density(col="red",bty="n") ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi A more interesting idea is to write a function that operates as a general presenter. The function {\tt slider.show.density()} shows the shapes of the densities of various distributions. After the user has collected some experiences she or he will like to write a improved version. Before you start programming your own presenter analyze the following function: \makemarginno $\langle${\it define {\tt slider.show.density}}\ $25\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACF} \rule{0mm}{0mm}\newline\verb? slider.show.density<-function( ?% \rule{0mm}{0mm}\newline\verb? distribution="norm", ?% \rule{0mm}{0mm}\newline\verb? mins=c(-100,-100,-50,.001), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(100,100,50,100), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(1,1,.1,.1), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(-5,5,0,1),type="l",...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? lim1<-slider(no=1); lim2<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? par1<-slider(no=3); par2<-slider(no=4) ?% \rule{0mm}{0mm}\newline\verb? x<-seq(min(lim1,lim2),max(lim1,lim2),length=200) ?% \rule{0mm}{0mm}\newline\verb? ddist<-paste("d",distribution,sep="") ?% \rule{0mm}{0mm}\newline\verb? f.x<-do.call(ddist,alist(x=x,par1,par2)) ?% \rule{0mm}{0mm}\newline\verb? main=paste("distribution:",distribution,"\n", ?% \rule{0mm}{0mm}\newline\verb? "parameter 1: ",format(par1,digits=3), ?% \rule{0mm}{0mm}\newline\verb? ", parameter 2: =",format(par2,digits=3)) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,f.x,type=type,main=main) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=x,y=f.x,type=type,main=main),args)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("x limit (min)","x limit (max)", ?% \rule{0mm}{0mm}\newline\verb? "parameter 1","parameter 2")[1:length(mins)], ?% \rule{0mm}{0mm}\newline\verb? mins,maxs,deltas,defaults) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use sliders to select parameters!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Here are a few examples to show that the idea works: \begin{itemize} \item gamma distribution \makemarginno $\langle${\it show the density of the gamma distribution}\ $26\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACG} \rule{0mm}{0mm}\newline\verb? slider.show.density("gamma",mins=c(0,0,.01,.01), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(100,100,50,50), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(.1,.1,.01,.01), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(0,10,4,1), bty="n") ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \item beta distribution \makemarginno $\langle${\it show the density of the beta distribution}\ $27\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACH} \rule{0mm}{0mm}\newline\verb? slider.show.density("beta",mins=c(0,0,0,0), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(1,1,10,10), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(.1,.1,.01,.01), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(0,1,1,1),col="blue") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \item binomial distribution \makemarginno $\langle${\it show the density of the binomial distribution}\ $28\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACI} \rule{0mm}{0mm}\newline\verb? slider.show.density("binom",mins=c(0,0,1,0), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(100,100,100,1), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(1,1,1,.01), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(0,20,5,0.5),type="h") ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \item Poisson distribution \makemarginno $\langle${\it show the density of the Poisson distribution}\ $29\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACJ} \rule{0mm}{0mm}\newline\verb? slider.show.density("pois",mins=c(0,0,.01), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(100,100,50), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(1,1,.1), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(0,20,5),type="h") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \end{itemize} The different presenter functions could be collected in central function. \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAADA} \rule{0mm}{0mm}\newline\verb? slider.present.density<-function() ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.show.density}} 25$\rangle$% \rule{0mm}{0mm}\newline\verb| |\verb?f0<- ?$\langle${\it define {\tt slider.show.normal.density}} 23$\rangle$\verb? ?% \rule{0mm}{0mm}\newline\verb| |\verb?f1<- function(...){ ?$\langle${\it show the density of the gamma distribution} 26$\rangle$\verb? }?% \rule{0mm}{0mm}\newline\verb| |\verb?f2<- function(...){ ?$\langle${\it show the density of the beta distribution} 27$\rangle$\verb? }?% \rule{0mm}{0mm}\newline\verb| |\verb?f3<- function(...){ ?$\langle${\it show the density of the binomial distribution} 28$\rangle$\verb? }?% \rule{0mm}{0mm}\newline\verb| |\verb?f4<- function(...){ ?$\langle${\it show the density of the Poisson distribution} 29$\rangle$\verb? }?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? slider(but.functions=c(f0,f1,f2,f3,f4), ?% \rule{0mm}{0mm}\newline\verb? but.names=c("show NORMAL","show GAMMA","show BETA", ?% \rule{0mm}{0mm}\newline\verb? "show BINOMIAL","show POISSON")) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.present.density() ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Now the reader is prepared to take a further look at the implementations of the slider functions of this paper. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Histograms and Density Traces} \subsection{Class number of histograms -- {\tt slider.hist}} In this section we propose a function which allows you to study the effect of the number of classes on the shape of a histogram. For this purpose a widget with a slider controlling the number of classes is opened and a histogram is computed. %nstructed in the graphics device. By moving the slider the user changes the number of classes and the histogram is redrawn. The implementation uses two special features: 1.) Sometimes we want to add further graphical elements like a density curve to the histogram. For this job {\tt slider.hist} has a slot to deliver a \emph{panel} function. This panel function will be called after updating the histogram. 2.) Additional graphics parameter can be transfered by the {\tt "..."} argument of {\tt slider.hist} to the call of {\tt hist} which constructs the histogram. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Remarks: The default number of breaks is computed by {\tt hist}. If a {\tt breaks} argument is found in the call of {\tt slider.hist} it will be removed. \makemarginno $\langle${\it define {\tt slider.hist}}\ $31\rangle\equiv$ {\quad$\subset$ 2, 32, 33, 60 } \label{CodeChunkLabelAADB} \rule{0mm}{0mm}\newline\verb? slider.hist<-function(x,panel=rug,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a vector} 14$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? args<-args[names(args)!="breaks"] ?% \rule{0mm}{0mm}\newline\verb? ClassNumber<-length(hist(x,plot=FALSE)$breaks) ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args)))args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? xrange<-range(x); num<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? breaks<-seq(xrange[1],xrange[2],length=num+1) ?% \rule{0mm}{0mm}\newline\verb? do.call("hist",c(alist(x=x,breaks=breaks),args)) ?% \rule{0mm}{0mm}\newline\verb? panel(x) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh,"ClassNumber",1,100,1,ClassNumber); refresh() ?% \rule{0mm}{0mm}\newline\verb? "use slider to select number of classes" ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} %In this section we will test the function just defined. Here is a check to test whether we can change the color. \makemarginno $\langle${\it check}\ $32\rangle\equiv$ \label{CodeChunkLabelAADC} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.hist}} 31$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.hist(log(islands),col="green") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi To test the panel feature we add a normal density curve to the histogram. \makemarginno $\langle${\it check}\ $32\rangle+\equiv$ \label{CodeChunkLabelAADD} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.hist}} 31$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.hist(rivers,xlab="RIVERS",col="red",probability=TRUE, ?% \rule{0mm}{0mm}\newline\verb? pa=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy); rug(x); print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Width and kernel of a density trace -- {\tt slider.density}} The main parameters of density traces are width and kernel type. In the function {\tt slider.density()} both of them are selected by sliders. The alternative idea to implement the selection of the kernel function by buttons would have required seven buttons. Therefore, a slider solution seems to be a little bit smarter. To be able to add further graphical elements a panel function has been included. Technical Remarks: 1.) The kernel type is stored in the slider variable {\tt kno}. 2.) In {\tt slider.density()} we have two different effect functions where the second one {\tt set.kernel()} calls the first slider function ({\tt refresh()}). \makemarginno $\langle${\it define {\tt slider.density}}\ $34\rangle\equiv$ {\quad$\subset$ 3, 35, 36, 60 } \label{CodeChunkLabelAADE} \rule{0mm}{0mm}\newline\verb? slider.density<-function(x,panel=rug,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a vector} 14$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args))) args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb? kernel<-c("gaussian", "epanechnikov","rectangular", ?% \rule{0mm}{0mm}\newline\verb? "triangular","biweight", "cosine", "optcosine") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="kno",obj.value=1) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? width<-slider(no=1)*diff(range(x))/100 ?% \rule{0mm}{0mm}\newline\verb? kno<-slider(obj.name="kno"); kernel<-kernel[kno] ?% \rule{0mm}{0mm}\newline\verb? xy<-density(x,width=width,kernel=kernel) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=xy),args)) ?% \rule{0mm}{0mm}\newline\verb? title(paste("\n\nwidth =",signif(width,4),", kernel =",kernel)) ?% \rule{0mm}{0mm}\newline\verb? panel(x) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? set.kernel<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? kernel<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="kno",obj.value=kernel) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? bw.default<-diff(range(x))/density(x)$bw ?% \rule{0mm}{0mm}\newline\verb? nt <- slider(c(refresh,set.kernel), ?% \rule{0mm}{0mm}\newline\verb? c("width (% of range)","kernel"), ?% \rule{0mm}{0mm}\newline\verb? c(.1,1),c(100,7),c(.1,1),c(bw.default,1) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? # tkwm.minsize(nt, "300", "110") # set width, height to prevent to small sizes ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use slider to select width of window and to select kernel:\n") ?% \rule{0mm}{0mm}\newline\verb? print(cbind("no"=1:7,"kernel"=kernel)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} At first we test {\tt slider.density} without a panel function. \makemarginno $\langle${\it check of {\tt slider.density}}\ $35\rangle\equiv$ \label{CodeChunkLabelAADF} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.density}} 34$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.density(rivers,xlab="RIVERS",col="red") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Now we test a call of {\tt slider.density} with a panel function to plot a fitted normal density curve. \makemarginno $\langle${\it check of {\tt slider.density}}\ $35\rangle+\equiv$ \label{CodeChunkLabelAADG} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.density}} 34$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.density(log(rivers),xlab="rivers",col="red", ?% \rule{0mm}{0mm}\newline\verb? panel=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy); rug(x); print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} %% {\tt prompt(slider.hist)} \makemarginno $\langle${\it define help of {\tt slider.hist}}\ $37\rangle\equiv$ \label{CodeChunkLabelAADH} \rule{0mm}{0mm}\newline\verb? \name{slider.hist} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive histogram and density traces} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.hist} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.density} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? The functions \code{slider.hist} and \code{slider.density} ?% \rule{0mm}{0mm}\newline\verb? compute histograms and density traces ?% \rule{0mm}{0mm}\newline\verb? whereas some parameter are controlled by sliders. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.hist} computes a histogram; the number of classes is ?% \rule{0mm}{0mm}\newline\verb? defined by a slider. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.density} computes a density trace; width and ?% \rule{0mm}{0mm}\newline\verb? type of the kernel are defined by sliders. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.hist(x, panel, ...) ?% \rule{0mm}{0mm}\newline\verb? slider.density(x, panel, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ data set to be used for plotting } ?% \rule{0mm}{0mm}\newline\verb? \item{panel}{ function constructing additional graphical elements to the plot} ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional (graphics) parameters which are passed to ?% \rule{0mm}{0mm}\newline\verb? the invoked high level plotting function } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.hist} draws a histogram of the data set \code{x} by ?% \rule{0mm}{0mm}\newline\verb? calling \code{hist} and opens a Tcl/Tk widget with one slider. ?% \rule{0mm}{0mm}\newline\verb? The slider defines the number of classes of the histogram. Changing the ?% \rule{0mm}{0mm}\newline\verb? slider results in redrawing of the plot. For further ?% \rule{0mm}{0mm}\newline\verb? details see the help page of \code{hist}. \code{rug} is used as the ?% \rule{0mm}{0mm}\newline\verb? default panel function. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.density} draws a density trace of the data set \code{x} ?% \rule{0mm}{0mm}\newline\verb? by \code{plot(density(...))} and opens a Tcl/Tk-widget with two ?% \rule{0mm}{0mm}\newline\verb? sliders. The first slider defines the width of the density trace ?% \rule{0mm}{0mm}\newline\verb? and the second one the kernel function: ?% \rule{0mm}{0mm}\newline\verb? \code{"1-gaussian", "2-epanechnikov", "3-rectangular", ?% \rule{0mm}{0mm}\newline\verb? "4-triangular","5-biweight", "6-cosine", "7-optcosine"} ?% \rule{0mm}{0mm}\newline\verb? Changing one of the sliders results in a redrawing of the plot. ?% \rule{0mm}{0mm}\newline\verb? For further details see the help page of \code{density}. ?% \rule{0mm}{0mm}\newline\verb? \code{rug} is used as the default panel function. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ ~~ } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{hist}}, \code{slider}} ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.hist(log(islands)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.density(rivers,xlab="rivers",col="red") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.density(log(rivers),xlab="rivers",col="red", ?% \rule{0mm}{0mm}\newline\verb? panel=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy) ?% \rule{0mm}{0mm}\newline\verb? rug(x) ?% \rule{0mm}{0mm}\newline\verb? print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ univar } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Brushing Functions} % see also tkBrush in: The TeachingDemos (Greg Snow) \subsection{A draftsman's display with Brushing -- {\tt slider.brush.pairs}} A draftsman's display is a nice graphics to show two dimensional dependencies of the variables of a multivariate data set. Brushing allows you to mark a subset of the data points. The subset of the points is defined by the condition that the coordinate of a selected variable has to lie within a fixed interval. By the function {\tt slider.brush.pairs()} the user can select a variable (dimension) as well as an interval for recoloring the points satisfying a condition with color {\tt "red"}. The function {\tt pairs()} is not used in the refresh function avoiding computational overhead. So the complexity of code is mostly caused by constructing the plot. \makemarginno $\langle${\it define {\tt slider.brush.pairs}}\ $38\rangle\equiv$ {\quad$\subset$ 4, 39, 60 } \label{CodeChunkLabelAADI} \rule{0mm}{0mm}\newline\verb? slider.brush.pairs<-function(x,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a vector} 14$\rangle$% \rule{0mm}{0mm}\newline\verb? # preparation of data ?% \rule{0mm}{0mm}\newline\verb? m<-dim(x)[2]; for(j in 1:m) x[,j]<-as.numeric(x[,j]) ?% \rule{0mm}{0mm}\newline\verb? mins<-apply(x,2,min); maxs<-apply(x,2,max) ?% \rule{0mm}{0mm}\newline\verb? delta<-(maxs-mins)/100 ?% \rule{0mm}{0mm}\newline\verb? # initial plot ?% \rule{0mm}{0mm}\newline\verb? varnames<-paste("var ",1:m,": ",colnames(x),sep="") ?% \rule{0mm}{0mm}\newline\verb? dev.new(); par(mfrow=c(m,m),oma=c(0,0,0,0),mai=c(0,0,0,0),...) ?% \rule{0mm}{0mm}\newline\verb? usr.array<-array(0,c(m,m,4)); axes<-FALSE ?% \rule{0mm}{0mm}\newline\verb? for(i in 1:m){ ?% \rule{0mm}{0mm}\newline\verb? for(j in 1:m){ ?% \rule{0mm}{0mm}\newline\verb? # plot(x[,j],x[,i],axes=axes,type="p") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=x[,j],y=x[,i],type="p",axes=axes,xlab="",ylab=""),args)) ?% \rule{0mm}{0mm}\newline\verb? usr.array[i,j,] <- usr<-par()$usr ?% \rule{0mm}{0mm}\newline\verb? if(i==j) text(usr[1],usr[4],varnames[i],adj=c(0,1),cex=5) ?% \rule{0mm}{0mm}\newline\verb? rect(usr[1],usr[3],usr[2],usr[4]) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # update function ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? vmin<-slider(no=1)/100; vmax<-vmin+slider(no=2)/100 ?% \rule{0mm}{0mm}\newline\verb? vno <-slider(no=3) ?% \rule{0mm}{0mm}\newline\verb? vmin<-mins[vno]*(1-vmin)+maxs[vno]*(vmin) ?% \rule{0mm}{0mm}\newline\verb? vmax<-mins[vno]*(1-vmax)+maxs[vno]*(vmax) ?% \rule{0mm}{0mm}\newline\verb? ind <-vmin<=x[,vno] & x[,vno]<=vmax ?% \rule{0mm}{0mm}\newline\verb? for(i in 1:m){ ?% \rule{0mm}{0mm}\newline\verb? for(j in 1:m){ ?% \rule{0mm}{0mm}\newline\verb? par(mfg=c(i,j),usr=usr.array[i,j,]) ?% \rule{0mm}{0mm}\newline\verb? points(x[ ,j],x[ ,i],col=0,cex=2,pch=19) ?% \rule{0mm}{0mm}\newline\verb? points(x[ ind,j],x[ ind,i],col="red",pch=1) ?% \rule{0mm}{0mm}\newline\verb? points(x[!ind,j],x[!ind,i],col="blue",pch=19) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # slider definition ?% \rule{0mm}{0mm}\newline\verb? nt <- slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("lower limit (% of range)","width (% of range)", ?% \rule{0mm}{0mm}\newline\verb? paste("variable no: 1 ..",m)), ?% \rule{0mm}{0mm}\newline\verb? c(0,0,1), c(100,100, m), c(1,1,1), c(0,30,1) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? # tkwm.minsize(nt, "450", "150") # set width, height to prevent to small sizes ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use sliders to select variable and interval width\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} We will use the famous {\tt iris} data to test the brushing function. \makemarginno $\langle${\it test of slider.brush.pairs}\ $39\rangle\equiv$ \label{CodeChunkLabelAADJ} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.pairs}} 38$\rangle$% \rule{0mm}{0mm}\newline\verb? usr.array<-slider.brush.pairs(iris,cex=.2) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Scatter plot brushing -- {\tt slider.brush.plot.xy}} The function {\tt slider.brush.plot.xy()} computes an xy-plot and recolors a data point {\tt "red"} if the value of its third variable is in the fixed interval. \makemarginno $\langle${\it define {\tt slider.brush.plot.xy}}\ $40\rangle\equiv$ {\quad$\subset$ 5, 41, 60 } \label{CodeChunkLabelAAEA} \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy<-function(x,y=NULL,z=NULL,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x,\ y,z} are vectors or {\tt x} is matrix with >2 columns} 16$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args))) ?% \rule{0mm}{0mm}\newline\verb? args<-c(args,list(main=paste(x.name,"<-->",y.name))) ?% \rule{0mm}{0mm}\newline\verb? if(!any("xlab"==names(args)))args<-c(args,list(xlab=x.name)) ?% \rule{0mm}{0mm}\newline\verb? if(!any("ylab"==names(args)))args<-c(args,list(ylab=y.name)) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot.default",c(alist(x=x,y=y,pch=19),args)) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? zrange<-range(z); z1<-slider(no=1); z2<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? zmin<-z1; zmax<-z1+z2; ind<-zmin<=z&z<=zmax; pos<-par()$usr ?% \rule{0mm}{0mm}\newline\verb? rect(pos[2],pos[4],pos[1]*.5+pos[2]*.5,pos[3]*.1+pos[4]*.9, ?% \rule{0mm}{0mm}\newline\verb? col="white",border=NA) ?% \rule{0mm}{0mm}\newline\verb? txt<-paste(z.name,"(red) in [",format(zmin,digits=4),",", ?% \rule{0mm}{0mm}\newline\verb? format(zmax,digits=4),"]",sep="") ?% \rule{0mm}{0mm}\newline\verb? text(pos[2],pos[4],txt,adj=c(1,1),col="red",cex=0.7) ?% \rule{0mm}{0mm}\newline\verb? col<-c("black","red")[1+ind] ?% \rule{0mm}{0mm}\newline\verb? points(x,y,col=col,pch=19, ?% \rule{0mm}{0mm}\newline\verb? cex=if("cex" %in% names(args)) args$cex else 1) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? z.min<-min(z); z.max<-max(z); delta<-(z.max-z.min)/100 ?% \rule{0mm}{0mm}\newline\verb? reset<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=x,y=y,col="red",pch=19),args)); pos<-par()$usr #090216 ?% \rule{0mm}{0mm}\newline\verb? rect(pos[2],pos[4],pos[1]*.4+pos[2]*.6,pos[3]*.1+pos[4]*.9, ?% \rule{0mm}{0mm}\newline\verb? col="white",border=NA) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("minimum of z","interval width of z"), ?% \rule{0mm}{0mm}\newline\verb? c(z.min,0),c(z.max+delta,(z.max-z.min)+delta), ?% \rule{0mm}{0mm}\newline\verb? c(delta,delta),c(z.min-delta,(z.max-z.min)/2), ?% \rule{0mm}{0mm}\newline\verb? reset.function=reset ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use sliders to select interval for inking points\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} \makemarginno $\langle${\it test of {\tt slider.brush.plot.xy}}\ $41\rangle\equiv$ \label{CodeChunkLabelAAEB} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.plot.xy}} 40$\rangle$% \rule{0mm}{0mm}\newline\verb? # data<-matrix(rnorm(900), 300,3) ?% \rule{0mm}{0mm}\newline\verb? # slider.brush.plot.xy(data[,1],data[,2],sqrt(data[,1]^2+data[,2]^2), ?% \rule{0mm}{0mm}\newline\verb? # main="hallo") ?% \rule{0mm}{0mm}\newline\verb? # slider.brush.plot.xy(iris[,1],iris[,2],iris[,3]) ?% \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy(iris[,1:3],cex=1.5) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.brush.pairs} and of {\tt slider.brush.plot.xy}}\ $42\rangle\equiv$ \label{CodeChunkLabelAAEC} \rule{0mm}{0mm}\newline\verb? \name{slider.brush} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive brushing functions} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.brush.pairs} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.brush.plot.xy} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? These functions compute a pairs plot or a simple xy-plot and ?% \rule{0mm}{0mm}\newline\verb? open a slider control widget for brushing. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.brush.pairs} computes a pairs plot; the user defines an ?% \rule{0mm}{0mm}\newline\verb? interval for one of the variables and in effect all data points ?% \rule{0mm}{0mm}\newline\verb? in this interval will be recolored. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.brush.plot.xy} computes an xy-plot; the user defines a ?% \rule{0mm}{0mm}\newline\verb? interval for a third variable \code{z} and all points ?% \rule{0mm}{0mm}\newline\verb? \code{(x,y)} will be recolored red if the \code{z} value is in the interval. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.brush.pairs(x, ...) ?% \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy(x, y, z, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ new settings for global graphics parameters } ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ matrix or data frame or vector } ?% \rule{0mm}{0mm}\newline\verb? \item{y}{ vector of y values if \code{x} is not a matrix } ?% \rule{0mm}{0mm}\newline\verb? \item{z}{ vector of z values if \code{x} is not a matrix } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.brush.pairs} draws a pairs plot of the data set \code{x}. ?% \rule{0mm}{0mm}\newline\verb? The first slider defines the lower limit of the interval and the ?% \rule{0mm}{0mm}\newline\verb? second its width. By the third slider a variable is selected. ?% \rule{0mm}{0mm}\newline\verb? All data points for which the selected variable is in the interval ?% \rule{0mm}{0mm}\newline\verb? are recolored red. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.brush.plot.xy} draws an xy-plot of the data set \code{x}. ?% \rule{0mm}{0mm}\newline\verb? The first slider defines the lower limit of the interval of z values ?% \rule{0mm}{0mm}\newline\verb? and the second one its width. All data points for which the variable z ?% \rule{0mm}{0mm}\newline\verb? is in the interval are recolored red. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ W. S. Cleveland, R. A. Becker, and G. Weil. The Use of ?% \rule{0mm}{0mm}\newline\verb? Brushing and Rotation for Data Analysis. InW. S. Cleveland ?% \rule{0mm}{0mm}\newline\verb? and M. E. McGill, editors, Dynamic Graphics for ?% \rule{0mm}{0mm}\newline\verb? Statistics. Wadsworth and Brooks/Cole, Pacific Grove, ?% \rule{0mm}{0mm}\newline\verb? CA, 1988. } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{pairs}}, \code{\link{plot}} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.brush.pairs(iris) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy(iris[,1:3]) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Time Series Plots} \subsection{Splitted time series -- {\tt slider.split.plot.ts}} Often there is a periodical structure in time series of a fixed period. Then you will like to have a tool to separate and compare the sections defined by the season. The function {\tt slider.split.plot.ts} lets you select the length of a saison and one of the limits between two saisons. Then in the time series plot {\tt fivenum} summary statistics or a regression lines are added to each of the sections. \makemarginno $\langle${\it define {\tt slider.split.plot.ts}}\ $43\rangle\equiv$ {\quad$\subset$ 6, 44, 60 } \label{CodeChunkLabelAAED} \rule{0mm}{0mm}\newline\verb? slider.split.plot.ts<-function(x,type="l",...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a time series} 17$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? n<-length(x); xmin<-min(x); xmax<-max(x) ?% \rule{0mm}{0mm}\newline\verb? xdelta<-xmax-xmin ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="summary.type",obj.value="linear") ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # initialization ?% \rule{0mm}{0mm}\newline\verb? summary.type<-slider(obj.name="summary.type") ?% \rule{0mm}{0mm}\newline\verb? width<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? limit<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? n.sec<-1 ?% \rule{0mm}{0mm}\newline\verb? limit<-limit-width*ceiling((limit-xmin)/width) ?% \rule{0mm}{0mm}\newline\verb? # plot: # plot(x,y,type=type,bty="n",xlab="",ylab="") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,type=type),args)) ?% \rule{0mm}{0mm}\newline\verb? limit<-limit-width-width/n.sec; j<-0 ?% \rule{0mm}{0mm}\newline\verb? # abline(v=limits,lwd=0.5,lty=3) ?% \rule{0mm}{0mm}\newline\verb? while(limit1){ ?% \rule{0mm}{0mm}\newline\verb? tstart2 <- slider(no=3); tend2 <- width+tstart2 ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # plot ?% \rule{0mm}{0mm}\newline\verb? par(mfrow=c(2+(n.windows>1),1),mai=c(.5,0.5,.1,0)) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,y,type="l",bty="n",xlab="",ylab="") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,type="l",bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? abline(v=c(x[tstart1],x[tend1]),col="red") ?% \rule{0mm}{0mm}\newline\verb? lines(x[tstart1:tend1],y[tstart1:tend1],col="red",lty=2) ?% \rule{0mm}{0mm}\newline\verb? if(n.windows>1){ ?% \rule{0mm}{0mm}\newline\verb? abline(v=c(x[tstart2],x[tend2]),col="blue") ?% \rule{0mm}{0mm}\newline\verb? lines(x[tstart2:tend2],y[tstart2:tend2],col="blue",lty=3) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? usr<-par()$usr ?% \rule{0mm}{0mm}\newline\verb? ind<-tstart1:tend1 ?% \rule{0mm}{0mm}\newline\verb? plot(x[ind],y[ind],type="b",col="red",bty="n", # ylim=usr[3:4], ?% \rule{0mm}{0mm}\newline\verb? xlim=c(x[tstart1],x[tstart1]+width*diff(x[1:2]))) ?% \rule{0mm}{0mm}\newline\verb? if(n.windows>1){ ?% \rule{0mm}{0mm}\newline\verb? ind<-tstart2:tend2 ?% \rule{0mm}{0mm}\newline\verb? plot(x[ind],y[ind],type="b",col="blue",bty="n", # ylim=usr[3:4], ?% \rule{0mm}{0mm}\newline\verb? xlim=c(x[tstart2],x[tstart2]+width*diff(x[1:2]))) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? par(mfrow=c(1,1)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(n.windows<2){ ?% \rule{0mm}{0mm}\newline\verb? slider(refresh,c("width of window","start of window"), ?% \rule{0mm}{0mm}\newline\verb? c(1,1),c(tmax,tmax),c(1,1),c(ceiling(tmax/4),1)) ?% \rule{0mm}{0mm}\newline\verb? }else{ ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("width of window","start window 1","start window 2"), ?% \rule{0mm}{0mm}\newline\verb? c(1,1,1),c(tmax,tmax,tmax),c(1,1,1),c(ceiling(tmax/4),1,ceiling(tmax/2))) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("select window and look at time series!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} The first test will be done with {\tt co2}. \makemarginno $\langle${\it test of {\tt slider.zoom.plot.ts}}\ $47\rangle\equiv$ \label{CodeChunkLabelAAEH} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.zoom.plot.ts}} 46$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(co2,2,main="co2") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi For comparing two sections of a series take a look at {\tt sunspots}. \makemarginno $\langle${\it test of {\tt slider.zoom.plot.ts}}\ $47\rangle+\equiv$ \label{CodeChunkLabelAAEI} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.zoom.plot.ts}} 46$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(sunspots,2) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.zoom.plot.ts}}\ $49\rangle\equiv$ \label{CodeChunkLabelAAEJ} \rule{0mm}{0mm}\newline\verb? \name{slider.zoom.plot.ts} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive zooming of time series} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.zoom.plot.ts} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? This function shows one or two sections of a time series. The window(s) is ?% \rule{0mm}{0mm}\newline\verb? (are) controlled by sliders. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(x, n.windows, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ time series } ?% \rule{0mm}{0mm}\newline\verb? \item{n.windows}{ \code{if(n.windows>1} two sections are defined } ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional graphical parameters } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.zoom.plot.ts} plots the original time series and it lets you ?% \rule{0mm}{0mm}\newline\verb? select one or two sections of the series by fixing the width(s) and the ?% \rule{0mm}{0mm}\newline\verb? starting point(s) of the region(s). Then the section(s) of the series is (are) ?% \rule{0mm}{0mm}\newline\verb? plotted separately one below the other. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? The first slider defines the width of the section(s). ?% \rule{0mm}{0mm}\newline\verb? The second (third) one sets the start of the first (second) section. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{plot}} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(co2,2) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Smoothing Time Series -- {\tt slider.smooth.plot.ts}} Tukey has proposed a set of smoothing operations for time series. Some of them are implemented by the function {\tt smooth()}. {\tt slider.smooth.plot.ts} supports the user to find the suitable combination of smoothing operations. Interactively he is able to smooth a time series step by step. The filter that should be used in the next step is selected by Tcl/Tk control panel. \makemarginno $\langle${\it define {\tt slider.smooth.plot.ts}}\ $50\rangle\equiv$ {\quad$\subset$ 8, 51, 60 } \label{CodeChunkLabelAAFA} \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts<-function(x,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a time series} 17$\rangle$% \rule{0mm}{0mm}\newline\verb? t.x<-x; x<-y ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? kind<-c("3RS3R", "3RSS", "3RSR", "3R", "3", "S") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="nts",obj.value=x) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="kind",obj.value="3") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="history.kind",obj.value="") ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # initialization ?% \rule{0mm}{0mm}\newline\verb? choice<-slider(obj.name="kind"); print(choice) ?% \rule{0mm}{0mm}\newline\verb? history.kind<-slider(obj.name="history.kind") ?% \rule{0mm}{0mm}\newline\verb? history.kind<-c(history.kind,choice) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="history.kind",obj.value=history.kind) ?% \rule{0mm}{0mm}\newline\verb? xx<-slider(obj.name="nts") ?% \rule{0mm}{0mm}\newline\verb? xx<-smooth(xx,kind=choice) ?% \rule{0mm}{0mm}\newline\verb? # plot(t.x,x,type="l",lty=3,bty="n",xlab="",ylab="") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(t.x,x,type="l",lty=3,bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? title(paste(history.kind,collapse="->")) ?% \rule{0mm}{0mm}\newline\verb? points(t.x,xx,type="l",col="red") # lty=1+which(choice==kind)) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="nts",obj.value=xx) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? reset<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="nts",obj.value=x) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="kind",obj.value="3") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="history.kind",obj.value="") ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? f1<-function(...){slider(obj.name="kind",obj.value="3RS3R");refresh()} ?% \rule{0mm}{0mm}\newline\verb? f2<-function(...){slider(obj.name="kind",obj.value="3RSS"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? f3<-function(...){slider(obj.name="kind",obj.value="3RSR"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? f4<-function(...){slider(obj.name="kind",obj.value="3R"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? f5<-function(...){slider(obj.name="kind",obj.value="3"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? f6<-function(...){slider(obj.name="kind",obj.value="S"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? slider(but.functions=c(f1,f2,f3,f4,f5,f6), ?% \rule{0mm}{0mm}\newline\verb? but.names=kind,reset.function=reset) ?% \rule{0mm}{0mm}\newline\verb? cat("select type of smoothing a la Tukey and look the result!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} For testing we use some random numbers. \makemarginno $\langle${\it test of {\tt slider.smooth.plot.ts}}\ $51\rangle\equiv$ \label{CodeChunkLabelAAFB} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.smooth.plot.ts}} 50$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts(rnorm(100),main="\nrandom",col="blue") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.smooth.plot.ts}}\ $52\rangle\equiv$ \label{CodeChunkLabelAAFC} \rule{0mm}{0mm}\newline\verb? \name{slider.smooth.plot.ts} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive Tukey smoothing} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.smooth.plot.ts} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.smooth.plot.ts} computes smooth curves ?% \rule{0mm}{0mm}\newline\verb? of a time series plot by Tukey's smoothers. ?% \rule{0mm}{0mm}\newline\verb? The kind of smoothing is controlled by a Tcl/Tk widget. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts(x, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ time series } ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional graphical parameters } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.smooth.plot.ts} draws the time series \code{x}. ?% \rule{0mm}{0mm}\newline\verb? The user selects a filter of the set ?% \rule{0mm}{0mm}\newline\verb? \code{c("3RS3R", "3RSS", "3RSR", "3R", "3", "S")} ?% \rule{0mm}{0mm}\newline\verb? step by step and the resulting curve is added to the plot. ?% \rule{0mm}{0mm}\newline\verb? The selection is performed by pressing a button of the control ?% \rule{0mm}{0mm}\newline\verb? widget of \code{slider.smooth.plot.ts}. ?% \rule{0mm}{0mm}\newline\verb? The button \code{reset} restarts the smoothing process. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ Tukey, J. W. (1977). Exploratory Data Analysis, Reading ?% \rule{0mm}{0mm}\newline\verb? Massachusetts: Addison-Wesley. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{plot}}, \code{\link{smooth}} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts(rnorm(100)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Regression} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Smoothing by lowess -- {\tt slider.lowess.plot}} The result of the lowess smoother heavily depends on the setting of the parameter {\tt f}. This parameter controls the smoother span and has to be fixed by the user. The function {\tt slider.lowess.plot} allows the user to select the span and to observe the corresponding line. Furthermore, the number of iterations are set interactively. \makemarginno $\langle${\it define {\tt slider.lowess.plot}}\ $53\rangle\equiv$ {\quad$\subset$ 9, 54, 60 } \label{CodeChunkLabelAAFD} \rule{0mm}{0mm}\newline\verb? slider.lowess.plot<-function(x,y=NULL,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? # slider function to draw lowess smoother, pwolf 080525 ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a matrix or {\tt x} and {\tt y} are vectors} 15$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? f<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? iter<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? xy<-lowess(x,y,f=f,iter=iter) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,y,bty="n") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? lines(xy) ?% \rule{0mm}{0mm}\newline\verb? title(paste("\n\nlowess: f =",signif(f,4),", iterations =",iter)) ?% \rule{0mm}{0mm}\newline\verb? lines(xy) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("smoother span","iterations"), ?% \rule{0mm}{0mm}\newline\verb? c(.01,1),c(1,7),c(.01,1),c(2/3,3) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use slider to select smoother span!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} \makemarginno $\langle${\it check of {\tt slider.lowess.plot}}\ $54\rangle\equiv$ \label{CodeChunkLabelAAFE} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.lowess.plot}} 53$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.lowess.plot(cars,col="red") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.lowess.plot}}\ $55\rangle\equiv$ \label{CodeChunkLabelAAFF} \rule{0mm}{0mm}\newline\verb? \name{slider.lowess.plot} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive lowess smoothing} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.lowess.plot} ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.lowess.plot} computes an xy-plot of the data and ?% \rule{0mm}{0mm}\newline\verb? adds LOWESS lines. The smoother ?% \rule{0mm}{0mm}\newline\verb? span and the number of iterations are selected by sliders. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.lowess.plot(x, y, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ data set to be used for plotting or vector of x values } ?% \rule{0mm}{0mm}\newline\verb? \item{y}{ vector of y values in case \code{x} is not a matrix } ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional (graphics) parameter settings } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.lowess.plot} computes a scatterplot of the data. ?% \rule{0mm}{0mm}\newline\verb? Then a LOWESS smoother line is added to the plot. ?% \rule{0mm}{0mm}\newline\verb? For more details about the lowess parameters \code{f} and \code{iter} ?% \rule{0mm}{0mm}\newline\verb? take a look at the help page of \code{lowess}. ?% \rule{0mm}{0mm}\newline\verb? The parameters are set by moving sliders of the ?% \rule{0mm}{0mm}\newline\verb? control widget. The first slider defines the smoother span \code{f} ?% \rule{0mm}{0mm}\newline\verb? and the second one the number of iterations. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ for references see help file of \code{lowess} } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{lowess}}, \code{slider} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.lowess.plot(cars) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Sensitivity of Regression Line -- {\tt slider.bootstrap.lm.plot}} To understand the senitivity of a regression curve the function {\tt slider.bootstrap.lm.plot} shows the user a lot of bootstrap regression lines computed on samples of the data points. The number of repetitions, the random seed and the polynomial degree is controlled by sliders. \makemarginno $\langle${\it define {\tt slider.bootstrap.lm.plot}}\ $56\rangle\equiv$ {\quad$\subset$ 10, 57, 60 } \label{CodeChunkLabelAAFG} \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot<-function(x,y=NULL,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a matrix or {\tt x} and {\tt y} are vectors} 15$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? n<-length(x) ?% \rule{0mm}{0mm}\newline\verb? ind<-order(x); x.orig<-x<-x[ind]; y.orig<-y<-y[ind] ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,y,...) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? abline(lm(y~x),lwd=5) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # plot(x,y,...); ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? abline(coefyx<-lm(y~x)$coef, lwd=3) ?% \rule{0mm}{0mm}\newline\verb? polytype<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? form<-paste(paste(sep="","I(x^",1:polytype,")"),collapse="+") ?% \rule{0mm}{0mm}\newline\verb? form<-as.formula(paste("y ~",form)); coef<-lm(form)$coef ?% \rule{0mm}{0mm}\newline\verb? yy<-outer(xx,0:polytype,"^")%*%coef; lines(xx,yy,lwd=2) ?% \rule{0mm}{0mm}\newline\verb? B<-slider(no=2); zz<-slider(no=3); set.seed(zz) ?% \rule{0mm}{0mm}\newline\verb? result<-matrix(0,1+polytype,B) ?% \rule{0mm}{0mm}\newline\verb? for(i in 1:B){ ?% \rule{0mm}{0mm}\newline\verb? index<-sample(1:n,n,replace=TRUE) ?% \rule{0mm}{0mm}\newline\verb? x<-x.orig[index]; y<-y.orig[index] ?% \rule{0mm}{0mm}\newline\verb? coef<-lm(form)$coef ?% \rule{0mm}{0mm}\newline\verb? yy<-outer(xx,0:polytype,"^")%*%coef ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy,lwd=2,col=i,lty=2) ?% \rule{0mm}{0mm}\newline\verb? result[,i]<-coef ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? abline(coefyx, lwd=5) ?% \rule{0mm}{0mm}\newline\verb? result<-t(result); ?% \rule{0mm}{0mm}\newline\verb? colnames(result)<-c("intercept",paste(sep="","beta: x^",1:polytype)) ?% \rule{0mm}{0mm}\newline\verb? print(summary(result)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh,c("polynomial degree","number repetitions","random seed"), ?% \rule{0mm}{0mm}\newline\verb? c(1,1,1),c(5,50,100),c(1,1,1),c(1,10,1)) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? "ok" ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} \makemarginno $\langle${\it test of {\tt slider..bootstrap.lm.plot}}\ $57\rangle\equiv$ \label{CodeChunkLabelAAFH} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.bootstrap.lm.plot}} 56$\rangle$% \rule{0mm}{0mm}\newline\verb? daten<-iris[,2:3] ?% \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot(daten) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.bootstrap.lm.plot}}\ $58\rangle\equiv$ \label{CodeChunkLabelAAFI} \rule{0mm}{0mm}\newline\verb? \name{slider.bootstrap.lm.plot} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive bootstapping for lm} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.bootstrap.lm.plot} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.bootstrap.lm.plot} computes a scatterplot and ?% \rule{0mm}{0mm}\newline\verb? adds regression curves of samples of the data points. ?% \rule{0mm}{0mm}\newline\verb? The number of samples and the degree of the model are ?% \rule{0mm}{0mm}\newline\verb? controlled by sliders. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot(x, y, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ two column matrix or vector of x values if y is used } ?% \rule{0mm}{0mm}\newline\verb? \item{y}{ y values if x is not a matrix } ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional graphics parameters } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.bootstrap.lm.plot} draws a scatterplot of the data points ?% \rule{0mm}{0mm}\newline\verb? and fits a linear model to the data set. Regression curves ?% \rule{0mm}{0mm}\newline\verb? of samples of the data are then added to the plot. Within a Tcl/Tk ?% \rule{0mm}{0mm}\newline\verb? control widget the degree of the model, the repetitions and the start ?% \rule{0mm}{0mm}\newline\verb? of the random seed are set. After modification of a parameter ?% \rule{0mm}{0mm}\newline\verb? the plot is updated. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ ~~ } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{plot}} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? daten<-iris[,2:3] ?% \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot(daten) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Appendix} \subsection{Definition of {\tt slider}} We will finish the paper by listing the definition of the function {\tt slider()}. The definition is copied from package relax. \renewcommand{\codechunkcommands}{\footnotesize} \makemarginno $\langle${\it define {\tt slider}}\ $59\rangle\equiv$ \label{CodeChunkLabelAAFJ} \rule{0mm}{0mm}\newline\verb? slider<-function (sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, ?% \rule{0mm}{0mm}\newline\verb? sl.defaults, but.functions, but.names, no, set.no.value, ?% \rule{0mm}{0mm}\newline\verb? obj.name, obj.value, reset.function, title) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? if (!exists("slider.env")) ?% \rule{0mm}{0mm}\newline\verb? slider.env <<- new.env(parent = .GlobalEnv) ?% \rule{0mm}{0mm}\newline\verb? if (!missing(no)) ?% \rule{0mm}{0mm}\newline\verb? return(as.numeric(tclvalue(get(paste("slider", no, sep = ""), ?% \rule{0mm}{0mm}\newline\verb? env = slider.env)))) ?% \rule{0mm}{0mm}\newline\verb? if (!missing(set.no.value)) { ?% \rule{0mm}{0mm}\newline\verb? try(eval(parse(text = paste("tclvalue(slider", set.no.value[1], ?% \rule{0mm}{0mm}\newline\verb? ")<-", set.no.value[2], sep = "")), env = slider.env)) ?% \rule{0mm}{0mm}\newline\verb? return(set.no.value[2]) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (!missing(obj.name)) { ?% \rule{0mm}{0mm}\newline\verb? if (!missing(obj.value)) ?% \rule{0mm}{0mm}\newline\verb? assign(obj.name, obj.value, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? else obj.value <- get(obj.name, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? return(obj.value) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(title)) ?% \rule{0mm}{0mm}\newline\verb? title <- "slider control widget" ?% \rule{0mm}{0mm}\newline\verb? if (missing(sl.names)) { ?% \rule{0mm}{0mm}\newline\verb? sl.defaults <- sl.names <- NULL ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(sl.functions)) ?% \rule{0mm}{0mm}\newline\verb? sl.functions <- function(...) { ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # require(tcltk) # now in the depends section of the package ?% \rule{0mm}{0mm}\newline\verb? nt <- tktoplevel() ?% \rule{0mm}{0mm}\newline\verb? tkwm.title(nt, title) ?% \rule{0mm}{0mm}\newline\verb? tkwm.geometry(nt, "+0+15") ?% \rule{0mm}{0mm}\newline\verb? assign("tktop.slider", nt, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? "relax" ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(sl.names)) { ?% \rule{0mm}{0mm}\newline\verb? "relax" ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text = paste("assign('slider", i, "',tclVar(sl.defaults[i]),env=slider.env)", ?% \rule{0mm}{0mm}\newline\verb? sep = ""))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(fr <- tkframe(nt)) ?% \rule{0mm}{0mm}\newline\verb? lab <- tklabel(fr, text = sl.names[i], width = "25") ?% \rule{0mm}{0mm}\newline\verb? sc <- tkscale(fr, from = sl.mins[i], to = sl.maxs[i], ?% \rule{0mm}{0mm}\newline\verb? showvalue = TRUE, resolution = sl.deltas[i], orient = "horiz") ?% \rule{0mm}{0mm}\newline\verb? tkpack(lab, sc, side = "right") ?% \rule{0mm}{0mm}\newline\verb? assign("sc", sc, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text = paste("tkconfigure(sc,variable=slider", ?% \rule{0mm}{0mm}\newline\verb? i, ")", sep = "")), env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? sl.fun <- if (length(sl.functions) > 1) ?% \rule{0mm}{0mm}\newline\verb? sl.functions[[i]] ?% \rule{0mm}{0mm}\newline\verb? else sl.functions ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(sl.fun)) ?% \rule{0mm}{0mm}\newline\verb? sl.fun <- eval(parse(text = paste("function(...){", ?% \rule{0mm}{0mm}\newline\verb? sl.fun, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkbind(sc, "", sl.fun) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? assign("slider.values.old", sl.defaults, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? tkpack(f.but <- tkframe(nt), fill = "x") ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = "Exit", command = function() tkdestroy(nt)), ?% \rule{0mm}{0mm}\newline\verb? side = "right") ?% \rule{0mm}{0mm}\newline\verb? if (!missing(reset.function)) { ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(reset.function)) ?% \rule{0mm}{0mm}\newline\verb? reset.function <- eval(parse(text = paste("function(...){", ?% \rule{0mm}{0mm}\newline\verb? reset.function, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = "Reset", command = function() { ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(sl.names)) eval(parse(text = paste("tclvalue(slider", ?% \rule{0mm}{0mm}\newline\verb? i, ")<-", sl.defaults[i], sep = "")), env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? reset.function() ?% \rule{0mm}{0mm}\newline\verb? }), side = "right") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(but.names)) ?% \rule{0mm}{0mm}\newline\verb? but.names <- NULL ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(but.names)) { ?% \rule{0mm}{0mm}\newline\verb? but.fun <- if (length(but.functions) > 1) ?% \rule{0mm}{0mm}\newline\verb? but.functions[[i]] ?% \rule{0mm}{0mm}\newline\verb? else but.functions ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(but.fun)) ?% \rule{0mm}{0mm}\newline\verb? but.fun <- eval(parse(text = c("function(...){", ?% \rule{0mm}{0mm}\newline\verb? but.fun, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = but.names[i], command = but.fun), ?% \rule{0mm}{0mm}\newline\verb? side = "left") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? invisible(nt) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \end{document} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Generation of {\tt .R} and {\tt .Rd} files} The building process of packages needs to store Code in {\tt .R} files and help pages in {\tt Rd} files. The code chunk of this section writes these files. Compare file {\tt doaplpack}. \makemarginno $\langle${\it old generation of .R and .Rd files}\ $60\rangle\equiv$ \label{CodeChunkLabelAAGA} \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.hist.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.hist]]",FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.brush.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.brush.pairs]] and of [[slider.brush.plot.xy]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.split.plot.ts.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.split.plot.ts]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.zoom.plot.ts.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.zoom.plot.ts]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.smooth.plot.ts.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.smooth.plot.ts]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.lowess.plot.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.lowess.plot]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.bootstrap.lm.plot.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.bootstrap.lm.plot]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.hist}} 31$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.hist",file="slider.hist.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.density}} 34$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.density",file="slider.density.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.pairs}} 38$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.brush.pairs",file="slider.brush.pairs.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.plot.xy}} 40$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.brush.plot.xy",file="slider.brush.plot.xy.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.split.plot.ts}} 43$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.split.plot.ts",file="slider.split.plot.ts.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.zoom.plot.ts}} 46$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.zoom.plot.ts",file="slider.zoom.plot.ts.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.smooth.plot.ts}} 50$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.smooth.plot.ts",file="slider.smooth.plot.ts.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.lowess.plot}} 53$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.lowess.plot",file="slider.lowess.plot.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.bootstrap.lm.plot}} 56$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.bootstrap.lm.plot",file="slider.bootstrap.lm.plot.R") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Create namespace file} \makemarginno $\langle${\it old generation of namespace file}\ $61\rangle\equiv$ \label{CodeChunkLabelAAGB} \rule{0mm}{0mm}\newline\verb? cat('exportPattern("^slider.[a-z]+")', ?% \rule{0mm}{0mm}\newline\verb? 'export(bagplot,boxplot2D,compute.bagplot,faces,plot.bagplot, ?% \rule{0mm}{0mm}\newline\verb? plot.faces,spin3R,stem.leaf)', ?% \rule{0mm}{0mm}\newline\verb? file="/home/wiwi/pwolf/R/aplpack/aplpack/NAMESPACE",sep="\n") ?% \rule{0mm}{0mm}\newline\verb? "ok" ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Umwandlung von PS-Bildern in JPEGs} Der R-Erstellungsprozess des PDF-Files verwendet pdflatex, sodass JPEP-Dateien statt PS-Dateien eingebunden werden. Deshalb ist es ratsam, jpg-Datei gleicher Qualitt zu generieren. Mit diesem Chunk lassen sich die Bilder von ps nach jpg konvertieren. Im Erstellungsskript werden brigens die jpg-Dateien an die geeignete Stelle kopiert: {\tt cp\ sliderfns/*.jpg\ aplpack/inst/doc/} \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAAGC} \rule{0mm}{0mm}\newline\verb? a<-list.files(pattern="^p.*$") ?% \rule{0mm}{0mm}\newline\verb? for(fi in a){ ?% \rule{0mm}{0mm}\newline\verb? nfi<-sub("$",".jpg",fi) ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text=paste("system('convert ",fi," ",nfi,"')"))) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt aplpack} script} \makemarginno $\langle${\it {\tt aplpack} script}\ $63\rangle\equiv$ \label{CodeChunkLabelAAGD} \rule{0mm}{0mm}\newline\verb? # doaplpack: Installation script for aplpack ?% \rule{0mm}{0mm}\newline\verb? # pw 09/2008 ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### CLEAN ?% \rule{0mm}{0mm}\newline\verb? [ ! -d aplpack/R ] && mv aplpack/r aplpack/R ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### BAGPLOT ?% \rule{0mm}{0mm}\newline\verb? echo "library(relax);tangleR(\"bagplot.rev\",expand.roots=\"\",expand.root.start=TRUE)" | R --vanilla ?% \rule{0mm}{0mm}\newline\verb? mv bagplot.R aplpack/R/bagplot.R ?% \rule{0mm}{0mm}\newline\verb? ##notangle -R"define [[bagplot]]" bagplot.rev > aplpack/R/bagplot.R ?% \rule{0mm}{0mm}\newline\verb? echo "library(relax);tangleR(\"bagplot.rev\",\"bagplot.Rd\", \ ?% \rule{0mm}{0mm}\newline\verb? expand.roots=\"define help of [[bagplot]]\",expand.root.start=FALSE)" | R --vanilla ?% \rule{0mm}{0mm}\newline\verb? grep "^[^#]" bagplot.Rd.R > aplpack/man/bagplot.Rd ?% \rule{0mm}{0mm}\newline\verb? rm bagplot.Rd.R ?% \rule{0mm}{0mm}\newline\verb? ## notangle -R"define help of [[bagplot]]" bagplot.rev > aplpack/man/bagplot.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p bagplot.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? cp -p work/bagplot.pdf aplpack/inst/pdf/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### FACES ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[faces]]" faces.rev > aplpack/R/faces.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[plot.faces]]" faces.rev > aplpack/R/plot.faces.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[faces]] help" faces.rev > aplpack/man/faces.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p faces.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### MS stem-and-leaf ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere ms" ms.rev > aplpack/R/stem.leaf.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere Hilfe zu [[stem.leaf]]" ms.rev > aplpack/man/stem.leaf.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p ms.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### SPIN3R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere [[spin3R]]" spin3R.rev > aplpack/R/spin3R.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere Hilfe von [[spin3R]]" spin3R.rev > aplpack/man/spin3R.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p spin3R.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### BOXPLOT2D ?% \rule{0mm}{0mm}\newline\verb? notangle -R"start" sc.rev > aplpack/R/boxplot2D.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere Hilfe von [[boxplot2D]]" sc.rev > aplpack/man/boxplot2D.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p sc.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### SLIDERFNS ?% \rule{0mm}{0mm}\newline\verb? #cp sliderfns/*.Rd aplpack/man/ ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.hist]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.hist.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.brush.pairs]] and of [[slider.brush.plot.xy]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.brush.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.split.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.split.plot.ts.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.zoom.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.zoom.plot.ts.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.smooth.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.smooth.plot.ts.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.lowess.plot]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.lowess.plot.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.bootstrap.lm.plot]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.bootstrap.lm.plot.Rd ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? #cat sliderfns/*.R > aplpack/R/sl.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.hist]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.hist.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.density]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.density.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.brush.pairs]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.brush.pairs.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.brush.plot.xy]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.brush.plot.xy.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.split.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.split.plot.ts.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.zoom.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.zoom.plot.ts.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.smooth.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.smooth.plot.ts.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.lowess.plot]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.lowess.plot.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.bootstrap.lm.plot]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.bootstrap.lm.plot.R ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? cp -p sliderfns/sliderfns.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? cp sliderfns/*.jpg aplpack/inst/doc/ ?% \rule{0mm}{0mm}\newline\verb? cat sliderfns/sliderfns.tex | sed "s/\\//" > aplpack/inst/doc/sliderfns.Snw ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### SLIDER ?% \rule{0mm}{0mm}\newline\verb? cp /home/wiwi/pwolf/R/work/relax/install.dir/relax/man/slider.Rd aplpack/man/ ?% \rule{0mm}{0mm}\newline\verb? cp /home/wiwi/pwolf/R/work/relax/install.dir/relax/R/slider.R aplpack/R/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### NAMESPACE ?% \rule{0mm}{0mm}\newline\verb? echo "exportPattern(\"^slider.[a-z]+\")" > tmp.tmp ?% \rule{0mm}{0mm}\newline\verb? echo "export(bagplot,boxplot2D,compute.bagplot,faces,plot.bagplot," >> tmp.tmp ?% \rule{0mm}{0mm}\newline\verb? echo " plot.faces,spin3R,stem.leaf)" >> tmp.tmp ?% \rule{0mm}{0mm}\newline\verb? mv tmp.tmp aplpack/NAMESPACE ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### DESCRIPTION ?% \rule{0mm}{0mm}\newline\verb? cp DESCRIPTION aplpack/DESCRIPTION ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### CHECK + BUILD ?% \rule{0mm}{0mm}\newline\verb? R CMD check aplpack; R CMD build aplpack ?% \rule{0mm}{0mm}\newline\verb? #rm lib/aplpack/R/aplpack.rdb ?% \rule{0mm}{0mm}\newline\verb? R CMD INSTALL --library=lib aplpack_1.2.2.tar.gz ?% \rule{0mm}{0mm}\newline\verb? cd lib; zip -r aplpack_1.2.2.zip aplpack/* ?% \rule{0mm}{0mm}\newline\verb? mv aplpack_1.2.2.zip .. ?% \rule{0mm}{0mm}\newline\verb? cd .. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? exit 0 ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### MANUALS generation of pdf manuals: ?% \rule{0mm}{0mm}\newline\verb? ## cp *rev pdfmake/ ?% \rule{0mm}{0mm}\newline\verb? cd pdfmake ; ?% \rule{0mm}{0mm}\newline\verb? revweb sc; latex sc; latex sc; dvipdf sc; ?% \rule{0mm}{0mm}\newline\verb? revweb faces; latex faces; latex faces; dvipdf faces; ?% \rule{0mm}{0mm}\newline\verb? revweb spin3R; latex spin3R; latex spin3R; dvipdf spin3R; ?% \rule{0mm}{0mm}\newline\verb? revweb ms; latex ms; latex ms; dvipdf ms ?% \rule{0mm}{0mm}\newline\verb? cd ../work ?% \rule{0mm}{0mm}\newline\verb? echo "library(relax);weaveR(\"bagplot.rev\")" | R --vanilla ?% \rule{0mm}{0mm}\newline\verb? latex bagplot; latex bagplot; dvipdf bagplot; ?% \rule{0mm}{0mm}\newline\verb? cp bagplot.pdf ../pdfmake/ ?% \rule{0mm}{0mm}\newline\verb? cd ../pdfmake/ ?% \rule{0mm}{0mm}\newline\verb? cp *pdf ../aplpack/inst/pdf ?% \rule{0mm}{0mm}\newline\verb? cd .. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ## sliderfns manual ?% \rule{0mm}{0mm}\newline\verb? cd sliderfns ?% \rule{0mm}{0mm}\newline\verb? echo "library(relax); weaveR('sliderfns.rev')" |R --vanilla -q ?% \rule{0mm}{0mm}\newline\verb? latex sliderfns; latex sliderfns; dvipdf sliderfns ?% \rule{0mm}{0mm}\newline\verb? cp *.pdf ../pdfmake/ ?% \rule{0mm}{0mm}\newline\verb? cp sliderfns.pdf ../aplpack/inst/pdf/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \end{document} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi ===================================================================== \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAAGE} \rule{0mm}{0mm}\newline\verb? system("notangle -Rdefine-tangleR ../../work/relax/webR/webR.rev > t.R") ?% \rule{0mm}{0mm}\newline\verb? source("t.R") ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","f.Rd","define help of [[slider.hist]]", FALSE, ?% \rule{0mm}{0mm}\newline\verb? insert.comment=FALSE,add.extension=FALSE) ?% \rule{0mm}{0mm}\newline\verb? #tangleR("sliderfns.rev","f.R","define [[slider.split.plot.ts]]", FALSE, ?% \rule{0mm}{0mm}\newline\verb? # insert.comment=FALSE) ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \makemarginno $\langle${\it old define {\tt slider.show.density}}\ $65\rangle\equiv$ \label{CodeChunkLabelAAGF} \rule{0mm}{0mm}\newline\verb? slider.show.norm<-function(name,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? lim1<-slider(no=1); lim2<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? par1<-slider(no=3); par2<-slider(no=4) ?% \rule{0mm}{0mm}\newline\verb? x<-seq(min(lim1,lim2),max(lim1,lim2),length=200) ?% \rule{0mm}{0mm}\newline\verb? f.x<-dnorm(x,par1,par2) ?% \rule{0mm}{0mm}\newline\verb? main=paste("normal distribution\n", ?% \rule{0mm}{0mm}\newline\verb? "E(X) = ",format(par1,digits=3), ?% \rule{0mm}{0mm}\newline\verb? ", sd(X) =",format(par2,digits=3)) ?% \rule{0mm}{0mm}\newline\verb? plot(x,f.x,type="l",bty="n",main=main) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("x limit (min)","x limit (max)", ?% \rule{0mm}{0mm}\newline\verb? "expectation","standard deviation"), ?% \rule{0mm}{0mm}\newline\verb? c(-100,-100,-50,.001),c(100,100,50,100),c(1,1,.1,.1),c(-5,5,0,1) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use slider to select parameter!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.show.norm() ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi To simplify things we compute a function that sets default values of a {\tt alist}. ??? \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAAGG} \rule{0mm}{0mm}\newline\verb? replace.defaults<-function(new.args,...){ ?% \rule{0mm}{0mm}\newline\verb? defaults<-list(...) ?% \rule{0mm}{0mm}\newline\verb? for(i in seq(new.args)) ?% \rule{0mm}{0mm}\newline\verb? h<-match(names(new.args)[i],names(defaults.args)) ?% \rule{0mm}{0mm}\newline\verb? if(!is.na(h)){ ?% \rule{0mm}{0mm}\newline\verb? cat("found"); defaults[i]<-new.args[h];print(new.args[h])} else ?% \rule{0mm}{0mm}\newline\verb? defaults<-c(defaults,new.args[h]) ?% \rule{0mm}{0mm}\newline\verb? print(defaults) ?% \rule{0mm}{0mm}\newline\verb? return(defaults) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.hist<-function(x,panel=rug,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a vector} 14$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? args<-args[names(args)!="breaks"] ?% \rule{0mm}{0mm}\newline\verb? ClassNumber<-length(hist(x,plot=FALSE)$breaks) ?% \rule{0mm}{0mm}\newline\verb? # if(!any("main"==names(args)))args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? xrange<-range(x); num<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? breaks<-seq(xrange[1],xrange[2],length=num+1) ?% \rule{0mm}{0mm}\newline\verb? do.call("hist",c(alist(x=x,breaks=breaks), ?% \rule{0mm}{0mm}\newline\verb? replace.defaults(args,main="hallo",col="green") ?% \rule{0mm}{0mm}\newline\verb? )) ?% \rule{0mm}{0mm}\newline\verb? # do.call("hist",c(alist(x=x,breaks=breaks),args, ?% \rule{0mm}{0mm}\newline\verb? # list(main="asdhalldddd"))) ?% \rule{0mm}{0mm}\newline\verb? panel(x) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ## slider(refresh,"ClassNumber",1,100,1,ClassNumber); refresh() ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? "use slider to select number of classes" ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.hist(co2,main="red") ?% \rule{0mm}{0mm}\newline\verb? identical(alist(x=10,b=20),list(x=10,b=20)) ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAAGH} \rule{0mm}{0mm}\newline\verb? slider1<- ?% \rule{0mm}{0mm}\newline\verb? function (sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, ?% \rule{0mm}{0mm}\newline\verb? sl.defaults, but.functions, but.names, no, set.no.value, ?% \rule{0mm}{0mm}\newline\verb? obj.name, obj.value, reset.function, title) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? if (!exists("slider.env")) ?% \rule{0mm}{0mm}\newline\verb? slider.env <<- new.env(parent = .GlobalEnv) ?% \rule{0mm}{0mm}\newline\verb? if (!missing(no)) ?% \rule{0mm}{0mm}\newline\verb? return(as.numeric(tclvalue(get(paste("slider", no, sep = ""), ?% \rule{0mm}{0mm}\newline\verb? env = slider.env)))) ?% \rule{0mm}{0mm}\newline\verb? if (!missing(set.no.value)) { ?% \rule{0mm}{0mm}\newline\verb? try(eval(parse(text = paste("tclvalue(slider", set.no.value[1], ?% \rule{0mm}{0mm}\newline\verb? ")<-", set.no.value[2], sep = "")), env = slider.env)) ?% \rule{0mm}{0mm}\newline\verb? return(set.no.value[2]) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (!missing(obj.name)) { ?% \rule{0mm}{0mm}\newline\verb? if (!missing(obj.value)) ?% \rule{0mm}{0mm}\newline\verb? assign(obj.name, obj.value, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? else obj.value <- get(obj.name, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? return(obj.value) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(title)) ?% \rule{0mm}{0mm}\newline\verb? title <- "slider control widget" ?% \rule{0mm}{0mm}\newline\verb? if (missing(sl.names)) ?% \rule{0mm}{0mm}\newline\verb? sl.names <- NULL ?% \rule{0mm}{0mm}\newline\verb? if (missing(sl.functions)) ?% \rule{0mm}{0mm}\newline\verb? sl.functions <- function(...) { ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? require(tcltk) ?% \rule{0mm}{0mm}\newline\verb? nt <- tktoplevel() ?% \rule{0mm}{0mm}\newline\verb? tkwm.title(nt, title) ?% \rule{0mm}{0mm}\newline\verb? tkwm.geometry(nt, "+0+15") ?% \rule{0mm}{0mm}\newline\verb? assign("tktop.slider", nt, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(sl.names)) { ?% \rule{0mm}{0mm}\newline\verb? ## dat <- c(no = i, value = sl.defaults[i], time = round(proc.time()[3] * 5)) ?% \rule{0mm}{0mm}\newline\verb? ## assign(paste("sl.dat.", i, sep = ""), dat, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text = paste("assign('slider", i, "',tclVar(sl.defaults[i]),env=slider.env)", ?% \rule{0mm}{0mm}\newline\verb? sep = ""))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(fr <- tkframe(nt)) ?% \rule{0mm}{0mm}\newline\verb? lab <- tklabel(fr, text = sl.names[i], width = "25") ?% \rule{0mm}{0mm}\newline\verb? sc <- tkscale(fr, from = sl.mins[i], to = sl.maxs[i], ?% \rule{0mm}{0mm}\newline\verb? showvalue = TRUE, resolution = sl.deltas[i], orient = "horiz") ?% \rule{0mm}{0mm}\newline\verb? tkpack(lab, sc, side = "right") ?% \rule{0mm}{0mm}\newline\verb? assign("sc", sc, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text = paste("tkconfigure(sc,variable=slider", ?% \rule{0mm}{0mm}\newline\verb? i, ")", sep = "")), env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? sl.fun <- if (length(sl.functions) > 1) ?% \rule{0mm}{0mm}\newline\verb? sl.functions[[i]] ?% \rule{0mm}{0mm}\newline\verb? else sl.functions ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(sl.fun)) ?% \rule{0mm}{0mm}\newline\verb? sl.fun <- eval(parse(text = paste("function(...){", ?% \rule{0mm}{0mm}\newline\verb? sl.fun, "}"))) ?% \rule{0mm}{0mm}\newline\verb? # tkconfigure(sc, command = sl.fun) ?% \rule{0mm}{0mm}\newline\verb? tkbind(sc,"",sl.fun) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? assign("slider.values.old", sl.defaults, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? tkpack(f.but <- tkframe(nt), fill = "x") ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = "Exit", command = function() tkdestroy(nt)), ?% \rule{0mm}{0mm}\newline\verb? side = "right") ?% \rule{0mm}{0mm}\newline\verb? if (!missing(reset.function)) { ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(reset.function)) ?% \rule{0mm}{0mm}\newline\verb? reset.function <- eval(parse(text = paste("function(...){", ?% \rule{0mm}{0mm}\newline\verb? reset.function, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = "Reset", command = function() { ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(sl.names)) eval(parse(text = paste("tclvalue(slider", ?% \rule{0mm}{0mm}\newline\verb? i, ")<-", sl.defaults[i], sep = "")), env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? reset.function() ?% \rule{0mm}{0mm}\newline\verb? }), side = "right") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(but.names)) ?% \rule{0mm}{0mm}\newline\verb? but.names <- NULL ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(but.names)) { ?% \rule{0mm}{0mm}\newline\verb? but.fun <- if (length(but.functions) > 1) ?% \rule{0mm}{0mm}\newline\verb? but.functions[[i]] ?% \rule{0mm}{0mm}\newline\verb? else but.functions ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(but.fun)) ?% \rule{0mm}{0mm}\newline\verb? but.fun <- eval(parse(text = c("function(...){", ?% \rule{0mm}{0mm}\newline\verb? but.fun, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = but.names[i], command = but.fun), ?% \rule{0mm}{0mm}\newline\verb? side = "left") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? invisible(nt) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% aplpack/vignettes/slidersmoothwidget.jpg0000644000176200001440000002310113516603654020325 0ustar liggesusersJFIFHHC  !"$"$C<" L !U"1AQf27Sa#34u$qr6BVb7 Ra!1QAq23B#Cr ?Lt5@)Li(Q@6.I*77QD4ie]CJw|ئI@t(1c K[&]}_s+,DZJN|.5 7 \G8uBXveGYI[ʇRnF|! (|GJhqPP{l:+BUlȩJ"EbJWRRmh@)Ēmk)#ds:62XHʚ* KAXޛ^6$X\ 2;Wr`F[#a\ گ~ Ep(_j- %iYZip)Ҙgz7%B>)U*mSR2X&-"ԁX8@H;2B@҃Y}c* Wâ/^hYOPՙ4|%t4 m 'Y8Mű_v7C*!S9KcORzqXzJI:RH::+BU Wi BXj2_e+SUT@'y''9vvl69pՅ;[`)iC&CEOB6hq4W6}tWߋ]LJd4t$ls<1e} ШlRҔP7QP݉j☧<FO%dhiǞIWVsJ(}od&׈%#EItW߃a\ گ~-YBӔ)V 2DiKSBQ K@% ֐\Wte3G6si*\ a*& Sh{Sw\(o?"Ps5V`s8â/^P{9p3@ӒŪIkCmC8TҒl6(o%+D4<'sWfqT1BABY*ܢt~j} MF8\fWW~â/^P{y~d$\]=J#B1\2_J*ZqoyaJj#9JMJɥHٌa\cÑLJnp_/cTp bJGckQtCyn8@ӽB $ȭ= E~ Kw)qTܥ8,xXzu_\Z]JCo2RKwq)ԟm2Cƒ (ZSܯ&! CRTJTb?}1z%a}m8VꗥavQ+H$%nť}8̩hDV:+BU Wnߴ_8!YZϴUa\ گ~ Ep(_jkw nЅdvMg*ϰ Wâ/^V5G~B;&gtW߃a\ گ~+E#[hp!YY:+BU Wnߴ_8zɬEY}tWߊƷ~/=VGd}P{l:+BUc[hpkw+#k>V}Ep(_j6}Ɑߴ_85GB5h>â/^yvMDTJTlU?nǗTD49: 9G)!]W$q8VIɹ~ HY 2U"uĨI)w" ).Bҧ: u}vVIɹ~ |ЏVE_oI(\t#.Ðtw'v0pu+Ɯ[4=J?M̭Yi}KPOR=l:+BUĵs<$K2g" ШqIE͔/1B/o.!E*iv%YQmz\V$I$}O;+$fdۿ n-3e)j )^'cfI-Y KP 6OD\ yM&  ,^֞?efIWe*EF>v<FS$.SwI-k#PR7XX̤$dT\tb֟ۺ\r@ VLViAR, xca&%H+oć49j~I1LK`DIm>'_ OsNx~[ Zt/diR ..vD"0*Pr-ߏQ^6L2=;a\ iߏR kMiƒ늴I(\E|T1TɥSܑL KMjiצۭᏖq6K.C.kԍ:tk}y0ˮ4ǃɆ]p'~% :IĄz}0e٢(r-1O¡A)y`ޤIMmpo&uy0ˮ4NJFRO5,Ȏ$(ٴŸكB튒 )u]]FBaMS *Mphç.ӿ)vA k0VF&%I&-#u-4kTXs?Be~Ơ// <wzP?,,8se@91DZ'bOmג t8㯭)Zt6$>7.{2:TTe2B:.t-ތ8Sq{_Po͹Eu>$4isy,TǼ;:%iRB :)ZIݩ䶃b҃mۡ6!)+֒oN9V˲3**hI0ND4!/.b6 $#N&̊32g Tr d:DB"ouTK6**UMљ%˚.~iMvT4L{)A!7i=.Dۼe qI+.ru<\tWEL<4YBRu+SDBg$kQzchǚbk0T"azad% аIBF6[p͛%EIC3]3 Sn)&BM-2* )sgM1[q RJV^dthY%F:jgNE[SLCKV$)K SUxxʏ_Qu O2,ЙPPFbrkDhJL R>ZHZ$ ,6S2mrkFK]""ͮA.5k`,Jill- dsSù!fИgBPݦ9NIdKI[AD{5:E6[Z[{`*l [k,nNm7ƹRAy}4C԰ tjJlGtTTaMlnES0m;0 Bí{P oA RlEoQRbHGiqf[ ,[(Z-@sݵugQKcq RVqHAuYBnu nStaS9sE0=B̲&+6^BmӫJ$!),t섡#GD[~kC2w4C6)a6**)MԵn&$Z 29xT}]B?/S̳K4&T,!Qzjv0-ROD&wx3⌆~j=- z7l%H@)3komDG*0eҚF[ CA3TpD!eDY&pyinRY$VQ3aΑMV֖bX p) V#[j,ӛM1TPh{_M1F,"lZ(3)Syl[d3驝9mNޑ1/^Z,)NIW"*>@eG/rE?4BeBBf7m u(q00iJkA!jhl7w;꿑N(g鶩ɯSn2}.=vT6Hy=])e41NBTEBa Oy@^h%U o7 4f1<q(ui /bEe5iͦR*X(4S=bZvp6NIM~foLJb-A2C"ͻHқDwF<0E?$׿tc*YL~j1m{F?3*4&QDͩF`b[t 7n6.\tGtCPԤq,E]NFj鶙6FoL:CMݗh}(najxCm7~~,xCm7~~sGⱙWb( Wc&6!G}{;_RcJ#\Wѳ(::t̒|yIP"@]L*Rȩr\#Y2[ $UƢHf^Q*O ːTSSQ})Z+ia= Q Z<@QX7joOV'EI*&fkD_flŝqv H? ػ_M|CgsG%7刃}'ʢ!%F'mx\F=>ܹj7V7!`7!a?"}'Qa}zvzmx\F (vXyMzvzmx\F (vXyMz拉rCr]0\@RՙR$|l?̋[}'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>ly\?\Lfa.0"w`?"7aڮOkWkWw`?"7aڮOkWkWw`?"7aڮOkWkWw`?"7aڮOkWh$9o%)=Ye)K?G-Ⱥr~E6.Oȣ ma6UnCUnCr~E6.Oȣ ma6UnCUnCr~E6.Oȣ ma6Y'4\P4,ğźXVk%JWS. .w[}'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>lp(T2ރTd9nn;ǁ} (r~Enk)\A"tHҴ  r7!a?"}'Q6U7!`7!a?"}'Q6U\]QPNbe(ge%jmAVH\z7!a?"}'Q6U7!`7!a?"}'Q6U7!`7!a?"}'Q6U7!`7!a?"}'Q6U(T2ރTd9nn;ǁ>Ⱥ-9R:ⴭ2E6?x{}'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>l*ߤ$>>Gaplpack/vignettes/p152654-Sep-2.jpg0000644000176200001440000002571013516603654016227 0ustar liggesusersJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ߊtOFڬvR ogx8OZ ?Soaݫ^}7,w>lqgŞ$|=,mlt;8'ỷ`%%p/N"níqٗC?9*n0}Zm--'0k7Lλ]t>4゚ߧ4+myi4K!lHmDvRxڼ-&㏈:γkXa'СY.6"$@8iݱoi.{ЯmuëZPx?ya~:v=6Ӵ+$[+RC0$F>PzP<9mҬ=N)f{՝0@;6 یu\Osk>nvA4?)eF @')xwcҼKqV7`'朮/vIōVYOA7QƋN;33m L2z Onyw=Ԟ~,y8¸W5E?Ë W :H7ڼ/7pcMxL<7WYhu QUx(T<͛qu8\95KL|+kخft< ѴaW+\RcPXGCm [뉖"YUQ̐ S֧5H?a>w6vV(͐ WsՇaH]O^O\jZv[s* abPo0XGf!kW~.S?CP`e@*Y|J&x$:~!Ho $ $A8z<+:\}P_I6>TQƘ:9!rΧxWZX^fxCUȋS:NZ3V/>_#' Fٷ~5itGsjХрE4qIdB]4]2@}UnP_4b[i͐ k)gv 5um*5Ho~yQe2"a r_9$T>3Іg& [ #UBUzOյ}'Mk/Hfm|@? z׉n)Dn[2αb96&N9=ܫv )o/uos&z~5jwIu$r!wԌHucjoõҵ+]cD6ə# PH T@c>BeFF,Kse|N|O;iok|eCa~]Ĝ{/_7^#Ci-Ŵi9Ĭª!8*e_Tm .\HR EcCqЩ9~H\Wc3T*@' eQ@Q@Q@Q@Q@Q@Q@Q@Q@aW<mwwvv2E#\*'ngg߇='~i-vWv23Ǎug'|[U$p] U㍬6 P^jpWDӯn$A]q3mE d-޽>[x.}V9_6[ʼB%mZ졌haTs G<'x^tGu߉V^EnxWl1?uTl==\<wa|+tUtYLf$B?)fIM1arŗ/CU5/?#ۿYcwG޹bX-0+f( p*pj5ȯ#I]y]|ş򗂠O^iiìj77:,gguO\?9}Ǟzt Q֙w7F0*|>wUgrI7O mYm Uޝw\qXcxH)!HR; qɪiuD)Es0-1S'5o$qPD.3#>=ct6ڟzi+eL!d>`w(4QEQEQEQEQEJ]M:8/#BKK{Y1; @gzJjs5I݋;~c*۔d`q+:oK[:D&\,Rħz(-fRIiH"nM5+t{x.ݠ1;*<\Q8|,^-}rt*Q ;@ww099n ;sH((>%>{6hIfYSj oO{\q*ğYbsZԫJJϘgX5N)Y??=ޟB[⶛q}ij&n"Y$[}8E'l,:^kNa[)mZXfdaEZЧ(ͥ׫>Ons(?d++<'aY?: ( (3{ hҘ hҘ{וDPͺDAŚ[$(ۂ(5M!rotȄ.OsH((U#?%+O_?X+2;?Ss?Na[)Na[)2ϡk*E5tIu (((((((((((1}_St/(BrȨws+dpsjka^;\EB4[U&9–†9Rgץe46 ;B gsh>,ΣgXO\n$.Y09  C! VO"(( W$ ̭?OI`Ozgkhsn23&AT5rVTsP,}Pa? t h\Z%hm#+, !N8ʡRYWJ=SJ5{Hu?:w-mGmomH +Q!׭s]UI}dg,ZRmR+ϱ ( ( ( ( ( ( ( ( ( ( C! VO"sH((U#?%+O_?X+2;?Ss?T5rUǔo>XP?׬C\^_ď ŏ/kC![/渪~?e~SkўEWjQEQEQEQEQEQEQEQEQE ’<ϲ%fm-;U`Ojx^oiALnfdX`:혐s ji:3 .N39? WTYk!m1J:wkenˣdnk?WӮYᛙudei2@#6$m)h((U#?%+O_?X+2;?Ss?T5rUǔo>XP?׬C\^_ď ŏ/kC![/渪Num3_g-m*(~lgF2zcuFUxPgGѴWUo Wi[_3^wq4k_Y!-26*& 9s^-Cz 'h}/N5B׬gK/ 29&l_w9 8uo\6TP-ݒ(wV\K󣆊J]?XΞk^*5*J:m͈d.1cIM9kdcqK#'ą<wCwkFS(o._w\^ s@zY?W/WQPfv ??kԫ~?eשW?ݡ}YO(Y}qx7\˺&6*px8 uآ/{fJ[CM?xۘN=ҼǾ#"[IŽW2^rHqa*Fk8 xRKTm셱ew[߸I'*B~vc&ѵzTk .aCU3p%$$vf&ƕڼC"yLr+s: VOΥkc%!iUDw*Vf>'O~0i*UޤnsQӫTj3Y5oT~/ >&/afa?8x~jKq"̙6tU*oU _*?]aAUct?MT<7G VOK"IMX0Wq?wC4GaAU N[NTj3Ydឩa-fOʖ3Ѯ\,lH8: zGaAUczo5_7Wu->'Gy_qpFgçu -'ub¨տfS~jy%=#HlaK-?wct?MT}M7%P8u,8U _*?G*[k/?~0i* >D/'GuTOل6MoU _*?]aAUct?MT}Gkr!f-nDq5oT~U _*?]aAUct?MT}C _٘Ox#r 2cz6~&>sdڎCo rtiAIs~0i*a*1VHN4d~0i*KeKy=P]J3rFp} \?;oJ~0i*Qe¨տfS&?;oJOa?٘O7FC5 +T[.GFGSc Xo+?;oJ~0i*ï"Tj3Y5oT~/ 䪹JI߫G^%M+L (0wuTOل6M(B%jjE=* QŠ(M((?Ə >}7~Ѷ=Ǚfyvخl7Cog<ݿȢ 5a}bkdBj^lHGoU]yI?x‹N]WpYV4}77'dGxWaEUx‹Sl>My@Sf_- FƜytg: C ')]Omw&n脰:<<tul~x;t$:3:V;Ri;Džv_^w (J5;=db wYNBJW1KIJ7 NtE$uNǔwڸbLɥd% XGBFSI5k{͐`FEr_f5» /үM;Džv_^qn ۮ4) 1@mv uֽc*T{NItmIh1-HZV)U#P4? ^"HM|8ZIS8%$¶$]IZU'/xH6(k$Am"K\D2[eC **mHo#rMփ$nl{nfTMj$J #VUJ^$7DV+QSRCr6Mx‹N]WX{[)f~ҒWlKM-XmBJ]CuZȤx/iN]FMESҵqdm>IjO K@z&u5 ?FlvXQdܐaHZTv N5:mOZXK^ _7Ss!K^US୓fn7eoZM椸}u5|Y-6}:#]}W"hJfGTxn`ۣ>A{az*RwJ#_|J- "#QֹMOx‹_Y0Ͷ=\V$II$ 7ߌ_{,n-7R@R H/V3f}JV-dJJAKsq_"_& va}mIpaI}[aDKFjxA;16KKn$K`sFRFh8u^,0^t_Ub^Vͼ(QmԄL ղ Zϖ:" ,0^tO/a:{שRQukLMNHGEr6nSN.r0i-isnpvp-W u􎏷JFݻG鮜uA!Ozaz[U\rZuRV³rlawmZ ۸ :t䙥ՂLgh"oܽզ,0^tO/a:{ע][.zL_l*:yBxn؀(#D#a}sk剼~NglHm+a!K ޠBOP1!Ozazn̊Z֍͑2qBP H =ņ CΞc2J^-$2*kN6~}r~0eۢhrZe? KG'Nt y۵Ź{۷t*Kh$:^RQ׉5gX`<^,0^tXG_^w'Q\F=R™e)aeI"{]0$s{ԯdSz??/ ;򮛳^s{97s~ɹ3<ܲi~elXK#.hq^ֶ7-%1fd8|)%ޣŌa'^('AJ^ҸAdKrzEm(/mʊf %A Odel˅ݎF{!~tɊMeեkפ{.4@^7^Ritxe BH{84 99#:ͧrd\d0C8YJRm Rҕ@Iq%$vvg7%^y%LPNkMT#]*!c7_-ܧdss6z{:se!$_$]9a?/b6BozHSkmJ@qQHVM`nqsLm09%*j?87ԍO^Dzal6&,+j+A%NX*HڢߪQM3aTwGbli*؊R8 HPJv}!mx_ɲѣ֗287 ($@viAٹe,XU޸ڔR (>Py&yb;Joɦ)CQt!*BTMe %dK1kЛƹ@Șz'=?;iZP›IFù);T RL;Я7ymsӑ)-@eO$/UhJҔ( ݗߚ U)ݗߚ U+TƎq]Ck?1'XlOܵ;";a4R$Ya4kqhΘ!BwmH]:u4><kcdkͱ--'e,f?[ У[pCCдJJT{OҌǫ@`ȽP5im%5˽kѷI%.$nII_H$?0RIO?( SOgi'e|q R6h1R()JJR:,YП632mM> m(h'<4,LBca64JR JJRRڭkͶ sZsE P @#Qe(lZYYךzB@RI:M%ڭPrߝr]a*v?8FB5 {)@)JP RQZ~*Z~*cG 8.!(5ۗVqn~ܺԝӻFe,)JPgJff,Xya T(I'xő\zmCRm+I:uGQ\,_$3["]ж-N-%A`qH$J@@Q\KݿM-8<9) 0$))R(Ҕ()JJRR()JJRR()JJRR( ݗߚ U)ݗߚ U+TƎq]BA܋)6kJn= HJ»39o4ZGZB("wsa?r֟`RwNﺄ  7%o05IYK 7ӕ8qL[R:kDF6-Iv='KߢYO8iKߢYO8jM==&Kd:-JY%J-OI4%ӏtyN1oO;wǞ:;\6v5elZYYךzB@RI:Mxþ]?5zk׵sd٠ۻ]pҀkƯV-94k-ʚ 5q}I"`L6AHt^ޭ@"ܯchVgt"*4ZU3_/BTwy[/Vml;cKa. AЀFK5el[a`5# iQQڄtdJRR*v_~hTv_~hTS8^av sc2ƭm:qJ%I!PA\o7[n]XjNPC?DhDhGɌͯ]1RO7I :٧G> ܾ ռYdW&PT!K&G'|Vݪ |59>/~#N#X)@g>/46=()JJRR()JJRR}6%鸁J)'B5G0RQfiG0RQfiG*Wv_~hT'u%Vr6'iPLOx5ӯNV/O0Oϸo7[n]Xj=ƾ{rRwNﺄ  R)@)JP R)@)JP R)@)JP R믊H~#u32r\2[:Х$uk5%K&I(8-uސ֟3眞ț2|n;eN]DnN-qj~;R:%y勔6>Q)u[ - ġJ $mPi>Jw5cy.Ʉ<;$3C KY\k{VҲ %%}6|~Doͥ9z}J1Fiƾ{rW͑l?>:Ǣ\_^KjVҠڀ:+Muq5~LJ8Q"+"stCsKiiT ƾQ OGk?X&~%GⷛiiT ƾQ OGk?X&~%1x~+yF Ҩ|?5~LJbVt#P/Gk?X&~% Џp^}VG|?5~LJbVt#__J7wb4>RJ\R,k{zπOFKKk/ܨ*dM6?Cy6[n!6h[i-E5/*Tݴ+h$yR(bRI#TP2I'\y'$]HQF<@BRQKisݷd{^躿#|+  -Z>]2vxrѯ!Y68%p}~ ׁ|=qqi-I$ĤJyw1E0ƱDAP8V?xkV)kZ9쒲[~z+#$A<BNjG47l}>y9Q UNF0 !iqLHaq JTg]b@###QW<Zxf]:z[]eI! $3?  jjlgؐbayck#n`UIa>=W N_+N>m?mݜckJAE%>[_*h.WTZáڬr\#{g@X6>MnX,4 *mOSȳo&m(A=HV+# RXePWR2#][G^U{< SCt?Mx?M5Q\8?/·^džiLy$&gcI+I5'T]G?xkV)kOЩ&A<B(OЩ&A<B(OЩ&5xFi|3,7 BH<oq0+]p7_l_ { yKaxdg w(8noea[Ѻm|.MI'gj0sc(NkgI _n 닏 hO.lI%L%$W$kYVM3&ޯ#LV??xkV)kjWmuWCz SCt?Mx?M5QX  h*h.  h*h.  kG|'m Y;Ci"AW=I%v\o{OF{k Ԟ\ .6;琤A֍G F<5oT{oNѥ哲_˱O'UZ+' *E-tQEQQьycrK@O<5`_W?O'UZ)HwsP9$U "Tӯ.))7C9@W''sXڧ%hJUY9D$nWplH%8_kiV[=v+-/JXg"ㄒ϶D#k#p0@ *XԾ ҿKE+q"@7>x(+Ӽd?ywg3諑޿vn3<j&(?ioκ(9e)yi$8dY?,/''h²2`O]\oO`ӽH*rFٟutG+ӿGqNi+v4z>ۚ^yZ襮<RAP`e^iXK;¨I)'+h$yR(bRI#TP2I'^]47$bko[R)dqƏFݤuᰮav &Z;ߊ#~ 1#{_VG$Pġ#5 `ږ(8P0: }ElL0_!&㷘QE\_ >?o<RF\O|!Ϋe1 ԍ} |q\q?TՖ<.oli@>i,,3=B% nDbfa3Z, '"Aoϫ_]ZfOyqdU 9 \{^mk;+hZ#'5ԽmizI;Y?5uR7 Gp:Z>sE72qQr3^Ykhv4,.-u$g1p' g^_lg;wuy|v:5m4u!Q9m`nSmen#S1>j+cޮ ]fɯqx-KMRX> H8?+q et֗p@+(x)bje}o{e5h~ -#V:=k4^\; ]8.~U I$ujZ-+Mp$NfGc!J$e'pR?awxwVWJGO'UZ+ʧ:^"Nl hPHssx>\kzk:ٴi.saP3J0 Ϋik}Gef [=V?cxrxy* dk璋vW(o/[:s β"AJ!9 _$|;\^iڝƉkvMguVE`X ʹ1#m;فMF^=Լ=g5Ωw$GĊ]" ,bB3Z<7~ڤy$Z%Զ/sYP*3'*Ib35L ZQmV7GuvOI[lEdnd֚OUgklQƾ޳XaC%E,Q]HܿxrEztz]Zڜv-ѬrNe/z gx;GMьd~d|sdgnW&6N|^~g$ܓk}>\?xkV)k*0-M[]H45&XKnpĮ {a J<';)=nKvhZ(WS/p"ڸ,v`=`[+XvgfBR|]gFC,"e3_͵dU WAI1(HB(v"8 "% qUE8%i{kB ~mol1(((+{i?XnJIxBwr3ֺz~hn}yYdpe%FO~RIYo ]GPlƥHzL}Uuʒ&ܑ÷bk;vU-5 \\xd1] PC[ }ejz* R\ٶnvkcG'KMOi:kM |8Ugi;I*p#oG|Ccڨ$$Iue\8>mNaܜq onݬe+4ykMB= M*L/"11YAYF:FmV7F7'bԎ1, >|j_TDۺ{=Q^x¹.1gH7?7cg۷{z/MĢw =R`0=Ap=sa5;;z4͚((="{WJV2K,5 BiZmȊ mkkQ$d L~qbėH_P6˾Ӹ53q ^C!ou()Ոa5b!Ʃc؃*'z/% J4 ) -9^%F.0qficui:Da)rK|ݝwKv}UJ*VV:+*h.OЩ&2: +*h.OЩ&: +*h.OЩ&: z<:lڄ1%톞I%) I u# .6/_'T]\??iH经F帱{Y-[6hH~ f:,Fi&o~?/W?'T]G SCt?MdIQ\ SCt?Mx?M4Q\ SCt?Mx?M4Q\ SCt?Mx?M4xI熿k $_ K]svZÒ"Ϻ"%', 6>|v^kZA3ai . BI8<˸K_D8ѼMA{s"N[wTLS]I`՟Ėp^5{;rߕPUY鯔eʒV6|3NQEy&EP\?xkV)j8ѭu؅Gaw\gg% ּ $_ KZդ/$tQEd0(//m4WĠANX̀,gТ(׊~vGbEWXQEQEQEejvڮ>Cog y`W#@sk\"ݽwe}:MJ<=\$CfO'bXt.9}o'wcgmyFnZ'ݾNcQ2|g){'GI-H[w'g9X>ߜOm/PVl(x@u #8>Z]>}cïbIsul#PigV p41]Jy@$t*yH 0uyR, ;0Y7ͳI_}Sll.,n-bheLFG#zTzfeiu[@#:'$$qּW]^X0ό#$"b'-`?je8zcgN9U#VW]WuI熿k $_ KTrQ@W%{Í]aYVїލiyI*vke{ ?y ">Wui?|M?R'!UAOw.pW"HBGjQ@IEuW-.XC+Q\<;]-t0M6:knKfEUMp2 O,֞ݨ Z$8D#gPP0<uShzٴā˹Č^y'z".xt[Sˁ.nnJJ!21rK1.8p3Uox*}VvwJ˪YuקwtQEyVV MrMB;hCcr`1Sx8lm$Ny%Zg}~aHd7o9 oxw*gZi-_N_Sw|QI,od'OO"t4 ._ůIfEbID88nq3^e|@Y`e ɧrːIs` sT5kB:5XLT>A;p7g#oORJ1'wW'爕]kmw}:yyAltw!cc.=rn+-qo 8:mk.eRս,Ծ{XᧇRO/QEVW$9ϰ~~fg9ݟlcj0?iG+}ݿz9qg^om{6Gkk&㧢)s :xÑ{}>@7,,6%weJBݥХO\o o<+\ϝfѿ_]U Gm]Tw}s CrSklU.r0ʄk|xUQt!XB˅}F=}G ̞yZ襭-CX䵎.KV(#1,̪ s8yu?r*1sFW*~^eK Y_U|;,5(C3#c?(:֒>"gV෵,!kBOٔ {^Sj2Ikw,D4e'21}:|_|HЮ#YdK+֎!: ԤrI eLyo'nϗmmvjkƘ,ṔӒ{4v=t] w:ÿka$;\o ӅvP*mFkbR%$l~tݒpNš֬sh(%gME*N%'^ mZ_ﴩv] FG@U /#pX ʴ'̛VI7{mJ\BT;U峕k_F+xc@|7SiqI$Uw&ElLp]v0hd%kd򓒕m}ӽ{k߁cТ&ü! /9$I9 $_ KV<9.%U:]#KiD,e 9 g?xkV)kWIN\EomVUE2Yci8Rp$z :O.&W;QA$rxr%/Q[JoykvRu'LT*A@A9wA9"0LK_O51o6dR[suEpBj@AOXBڽ^" ( (BrF0L"8&w\Vb;*ڗZƃx: v2NE3@2fB7˔r0SԽ]]m/wv]X#XZ5oӲKevh:4gChQm-꒥qNv>#nxoE 3mʵ=>u/ ϨNokFnWJT*qЫv:FxYd[$WXg1lnvj¶\wI{ZϮKgwNQpwi^;ᾚ[BcV72u^$[F;W֚ 7QĐ] nMʰ鍣URU[[OÕ.#CTĎ7n $_ KIQnZkg,T:_i$gWݡQEPKjuśն3H`_"hcr`:d>ҴugnUڍuGɯ(+K^3]O\Bprc ༫5vY<iYHhaPPNT-JXgNۿ_>v_zk_w Mh'NVIoR+?=o^]k5*ixiHM&y`dPd) F3|jxR]e,[umk"V  =7:_}.{U>4w=4ifx)_gyr3Soaok=GH1&/B'.@/g_=z}ꚕiM5V$Q\s +oyR(bI$`!RI']p nY|erznIppC(۽&I㹠"8 "% qUE8%iZ?"_WYYV (QEQEr>yiml좟wK99<RATi+W.CK6yiq6+@ ,wcY{hicwjѤv&!gU $8jb]u}ވRGhŸOn[)-U$njTzӵ ]cXYtNϬumʌHͅw yHT^.%Ļ#hTʋ>f=ϭ uX,7lsB00ĎVjUuN7->lIeO[G/۷m11Ej6[GD\+h#(bPTP0RW)nа+}w.GEuOIv8 p]syZ襧%맦( 4/Υ906}~cgk] agkýuadeY27((++SЬ]+NK( xt/O+zdHV{{aw3 Ÿapqִy^_L xѦ]2KJI$I' SCt?MyZ襮 4?C'T]] 4?C'T]Ziw2iE=L1JU'՞F5ǎtM6;~wgs^7ܫQǯֈSPJ/?#Xќt]bOA<BXXtҧ|}*9$s*;6Z\OqKsf(*V26֩;#Ԯ K{w0kp(UP,׷__C`:U{~C>!Ҍ+ދ{y4זv02TdmGP _n 닏 hO.lI%L%$W$kvB׶7MaReFulŚ>Uo%{ ̱ p=OV[VQ7KU {ZFW{+6視'T]X͟,x'/k|=%FE,@\}Td=>.w5:X%Ƅ82GgflԬk[i{h +vm 7 $ $38zomM.z? t-SV7 danYw1g|d{AR[(;>6:_tk{I{[E!l0k]̖^wmkqdRh8h0ŽVQR'Q@/jxS׼ c4N6{ȄF3S qRz.ˋ+&6Ҭ.n.l.>%d IW_/Ie^iXK;¨I+$t"B$Tvy׳azbN3k-"k)]e|j^-ڕօim/n i"MnW M>i\}/~ ׁ|=qqi-I$ĤJywAI1(HB(v?<RV=I$oYY,ݮA<B?  k*h.OЩ& (*h.OЩ& (*h.'|o/[]\1aBݱ lc+-J\6ކ.# Fk./Pe$_| $_ K]syZ襫z>uE{{ȂY0;sd%9rr[X~ 񏇼/k:6I`(-#8F3WuFM'GH)mnBN{p2pzW͢WԵ 'IY#,v;xxA n%7M/[iҽ8iUvK_KDwأx),6Ѧs,uPc-^yxfk; _5KiW}ᄌ0ْ-hSiZ>a{~߲֓fFI)wr"AZC?+G2?6w~ ѣ.m~ç}Ycf1dݓmb@,7xR k}lg'V,ȠyBWQ9TSϿ+MɥR|9^]5-ReB%-n\n?ù˂sG[ ac\ .A_/5MN58Z%3o$A\ ퟘ`𝞽`/d}ydMt_! TV6+:89sUmW魯$}}7;~=[^u}Ƅ'g#g-1׭SSz&;_ڊ(Di~ |;Thԋ2H`4$9w8xG).YY"+ʼua/kNYvֶOCgO<5`_W?O'UZ:|<43PV-r&(܊}Ѽ.x9[N**{ķeufQ֤|*!%*bLaqq+Ow-s*1G!V#̪TJC:m> QR5c'RwanO hk›]i^TpdqA^jt5{&'fOK8IދF%ښGjE4,B|JW`1`/_giИlm qH#\Kڦ"Ei?=n (WFM!}AI pz߆x;Jmaut7y a~ 0:ZA{uO^a3[aFPuCڢiqdUfi c8+Tee\x[7tm&?]u'[ sĻȬT0x.N]7eE=nTV+doLf\& mmA3-O(K3CRC.GR ,bIT!}=mE/{^yϖ͜?R!i>wSkݼW~k z28ڤwmϳ/ 3<⦯J4GU5$];_{vZhQZAEP?O'UZ+' *E-tS%8!yc5, rI'Dᶞ :;9m).Gd;29]HMv}=]oW⯉?chRf(8P0: "8!Hac5 p֘Wb$7ݽ.`J(W?O'UZ+' *E-tQEvgnk(ƣzH&BSrr0nj`䁂Or?.kEW AEP?O'UZ+Uս ES$=+o:4^-]FthSćV6'n9"n}[Ej+=+_fW9v#*AHȕp>7|cqk}LJw\a Dwd]|E(}v&^2GOEWPQEW?O'UZ+' *E-tQEV7i @ijP6u1\ZvlbC]?!M3 A#H,B#x,HOQ|uYxbtլdVіeW|.TFApLdkʃ7~7ms(4M?f^jvpӆ^Ēb][oJ}eՍ6KG#`>GR] ۽<RA\ᯇT{gI*TI;7k>?$1foO"FߛMkH`Fp*ӝUc}?!9$z=Q\Q@Q@syZ襮>̳l`XD -I zXyԧ:h$ͥ4X+Q@Q@Q@=x7P?,/DOoDF vFe nY:p G-~/Z|nIR^Kn1*-op5 xѦ]2KJI$I'_iMiP:]G6pNp35y1rٹ'Ϸ}15$[_|$},ّ<ij_ŐY79^h|=L/ 3;nHw5'T]\rTHW2h?p8YAT8*~Czy&j{[k;饶9#fEx/-T=vc9}j0/-n#У , ۏ3E\gɷk-;_"9TW[|f]Sjǜ!Y|-. 2Z nB' _!ců'7[u{ <[4=J<R%O7mvד\̣DCp>XT8FmؤZǁ;6t-;"/$aV~_瞽zft|vou[/YwE.zfi3j lb]F}*3nvq$rI<7K#Cbرؒ@UNFm-:.v[1UfpTEH# ('@݀t{`\[@lVe^Z|F+Ov,An4 nTVIWܧm3]?lٌc.? +pMῧALӎ)%gnۧQuҬnm?W:@QH! pܾ0'5O F m?SHvۿk!XI͏sxRJto zz$JЩ۸$0ۿ *y\>ksi&lV0 @Al \eY^-ٷ'[GMK:Bk]Ceܖr^Z(2lV'=1oi?.ɳw]m c2=7OЩ&A<BbjeZGWׇt 3SM𮟧GQ*xqaZ"HBGjQ@p _n 닏 hO.lI%L%$W$ksOЩ&TaV˥WI'tW?'T]G SCt?M`AEsx?M5kAx"laQ`J9 ppKkJ˷~-!w+G$9{"hB~9 F3'=50")#,>hWzq6&"XC'I t߂ݵD]1.O dlt6!^VzLf/.#1M$Kӳ18oB*pWK4+3 +~ΛbJj_dA*&:3ry мn?)$_lu$o~z~Ey~n$-n["m1FQLK0pg'sXvqa8&;!bhl.cu`Fv (V{ +úT+żK]:,Sh0lrC9P]#H[d,Ze8m ɳn ~h(6rgJ [mw*Q'wv F0|SzUҮm&W-*Y'#9);7o˾_<RA\?xkV)k(((O<5`_W?O'UZ(((( $_ K]syZ襮 ( ( ( $_ K]syZ襠((((O<5`_W?O'UZ'ľD#I+O P*$$cxp璍M٢ OX.~<*_G<;w;{f7&a/'x7wWx?| b[~>l}*QRwΊT=ywc3/~ϙ_;qu˙^֥̟W?O'UZ+y W+?c*'{VЇ2n[F6C5{Y`0~Fќj83:xA ܣ2|z#hK.J1Snו+Þgd߻9ޛxz|{O&w~󧢲? ?϶ygwxwgw1Z'AETI熿k $_ K]Q\TyHipܐ͓1 ^nkEpu?Mɪp?<78k<-yGGʇo_?7-W;v9\,o{W?O'UZ+' *E-HQ@Uo˗?ٿGٷϵTc{((O<5`_W?O'UZ((((O<5`_W?O'UZ(((( $_ K]syZ襮 ( ( ( $_ K]syZ襠((((O<5`_Wxs>">ۋct#2`YBճN>Wa &m6#Yg' xBzha*׊-fImվ{4NT.]OG^1vQ`WÒ1H1 IxΞ q%kC% `"ǕK-E&u#tvQEpQEI熿k $_ K@a65^>v]oRͷ*x8'ZPv'pW]֭5Gܷ$jjTbyq嶯YwMzxߌc6mV)L_^qROQ\4t)12lO&X3!Pr2m~@w $<ͱxcf̓ݨ lWb$PI)gO68G:;+-˸wAr'o&5h&Q=41\#}t >,sNj/oG II熿k Ěg4K/ifyQTlÀI$Ǎh_h;]cbZM,u o 9bAr>rw p1@Ey:|M?QiM"i#DA P|=q5_^%CoXTH0d헔 4W.-5X^t]Q(pq HfM1pƽ/>-KQoM7o&V6]̣TpP;/zV~wԴ{mY[9dU}I92HN|ca~=\!=2NrGXz%o[U/j+iJ!I26a[wYCxkUյ;4.-ZA0 R:<Q^o|TtVJuL:f$O5bHf=㑒serYxQ\!_.P6Թ-}7Q\io'WBj^ȓ~qY+2`=N#=QEQEQEQEQEQEQX}5K+O9U!Qr ( ( ( (33oڞy?nۻf+s< xKIݝϛggMq98ŠFiڼ:-nmQ?m kw:V]VՆkF/-D "Œx =2}_]ޣ +WVJ&yNd)#Ǽppzq*L ^!Ѽ-{=/KY`%Mtfhm Nyܘ(?мqfy=R- h-$IA 0939}X_M-$HF٤ .FAn=}IT< o>џ͹ϵlh 4X^O]wP6!p:Q@o|+tUtYLf$B?)fIM1ar?LO>gm:o^3 (^4oE9դ :[Y-Y7` ĝy#( ( ( ( ( ( (zepZZǍO $< @+<'aY?4wGVǙKfs'k??d+(+ǯqk]qv714?8鎼Wa^ȱz4]Y50^m=enxh&+o+lPEPEPEPEPEPEPEPEPEPEPEPEPEP\mEՖaitKoYȸĭAPTpNlcdʓq !Ƞ ? K.(J}S&X%w6b;˟6Y-Bp/?d+obXJi-? ʢE1,#;uq K_Z.۹hI8@Q@y"a+_>6@sa]KKfºUO. U3 EK1yUע QEPEsv0TԢ|7x:fJ(((((((((((+׺W)7?#0؋ ]2ձYzoluwi=\HHPFFAR )VNJυg?6gI{)]IuBȧnXr9? WU&ewjZʹMvх2*Db Fp*?sH(?X[l?=zy"ao+l_,|RmΏ#SjjMWV$E(1=yQi k 񧟃<3]c׹J(<NsƽWrw˟5@((((((((((((sH?WXOxe/e:L0ټr'%e` <Ҁ; ( EMנW,|-m?k`d5F"/o(ҼA7kYX`X)TRA(#= jW?g%YU<NsƽWrw˟5@( [Z"K֟"_&Ik>FuRiz`O#@Ȟ& QW `ҲC! VO"PAEPEPEPEP=STѬX?wŝ( % zzNe|U޳e ;o [ ?+ZAEPEPEPEPE_g=Z@./b]Fd&2 ι`3@%s!+']V_Wsx}$j6hB1:-# a\8?#eqZ!+']PAE^LӮo$mby}EҀ0]xJ5{: l%kXfvAcp%~v=EMօkC~V}vg2cj.3V~"a#QȱK ?HsTk_,|Rm4.4zٵ7fcyc~펧9I]]iL@8 zU{?(z?myZ襠]-廳e#xT.::Ӑz]G%Ne{Aai5} 0|U?4ڹ;e_WAx±tVB .n.0:,F~MnP?xO² u/-sHo+lQEBXRwwhR_M@m\j@{zWy^?Tlk((Agv4 >m<b25]s!+']P7w^n/oȨ!vnx{C,Ek\5jsşHh[M[BhTlR`һ́bc@EPEPEPX~%ivR]Β r0` .fRsӂ9=Hh펋K-s+ji%Υ1#'2[m})ŻMFN,#;)/FzYUTWҵS()6@=gV6?jp_\x*cW!XT@qI=Fz?(z?msIƀ ;e_U=WS-S^Ӛ;<(ҝ]m%h@҅ا<;e_Qc^<_3np'tgHΉ{H @@,ۇag"/? Ѷ_Sg'ku}nF*pyu?k/ gd5@"/o++>)6^@?Tlkյ-($i%aH-$jQNCd%ֳۢ)6[!-|UwzޣVV5p#H yQ#'P{"/o+BY>!iO7JK qn)o^8h? ة/vP?^jw|G[G ƗR$*-N *ݺ7@-m%l8tcGnm/: IQI#FyV ހ$cJ}GèZ>+4^}?Ð\*.(268j?1ץ>b_}@=W6Ҹ VOKudLΝ9JFnc'/? Ѷ,|-m?kt?+Z?2G't sQj 3q4h%4e\`h]& vNfTy$ I'="^XIƵ4N WZݢ.b]ZKnn "#_CY~Iƀ=÷vu&~|ڣ貔Hߣ =t]Ej3I,6#J'NB7(((h>"[IŽW2^rHqa*Fh?d+ׅ.tO /F-[-&Wu}|*2'l0+S?d++*E5t~>:W41Vfqt9xٰDJ>R@%=W6ҹEMAy%FUEcol̑s_ֿXm$5>)6@=gV6́bc]=gV6́bc@2z(cJ}w˟5Qƽ+qxg"/? Ѷg"/? Ѷ,|-m?kgoN~\ˬ]C'dGtR5~s9<և5j kE_MWAg%YUZclYCan*K4i.תB́bcF2z(cJ}/HS]w )ZV/*C1(_<8뛞/H: (z7ms/ gJ`i\"a#QȱK ?HsTk_,|Rm: ?(z?msIƺ ?(z?mrz1O1zg\\ӿ\U܅5_x I;5Eid v2zcJ}zQ@Q@r;!Bj}Bҝi6*L0Un+YhW9oXiDcF ;?岷 OkC4i]G,AbΖ=Jg4jͭ<3cW4:k :nOIdsRxj >=svmS P4(+g;y7{T/ gd5@/b<:#?xӠçq^YCanֿXmtPXۺ!2w˟5 ة/ѧ̹c^ 5kҿGR/Qƽ+qxg"зmuz_٢ү}{l[LcEӶqzX[l?=tPo_J_>6@5jkE_MQ2GZclYCan*K5YCan*K4]/b?u2NL y@X8҇P):F+'qQaӸJ̹c^ 5kҿ@EPEPX~'kﭤgz0H͂ p+r_G]]-,~Ϊñb*_,MIxO²tCEu@xBVyole6 8e=A?]WޠbV(8Ly鎳_?To*FW?ȱz/? Ѷ,|-m?k`d5F"/o(*F??Tlk*F??Tlhӿ\U܅5_NsƽWrj?1ץ>b_}]=W6ҹb_}]=W6Ҁ9EM2GEcol̑s_ֿXmtPXۺ>)6]=gV69́bcF2z(*K4i.תB Gf?TocJ}/H: (z7ms/ gJ`i\"a#QȱK ?HsTk_,|Rm: ?(z?msIƺ ?(z?msIƀ ;e_Tzm5"IZ,?yzRi.תBGf?u _j]ޯwMu*=°ThIW?g%YU ( ( ygR+ #\܆% p̓=k?d+;e_Qc^<_3tPo_J_3tPo_J_>6G5jEM2GZclYCanֿXmtPXۺ!2w˟5 ة/ѧ̹c^ 5kҿGR/Qƽ+qxg"/? Ѷ,|-m (z7ms/ gd5F"/o(#QȱK ,? ѷuCd%,? ѷuCd%4?k!F3zWӿ\U܅5_J`w]yߋkTӵ{ Ap p׌:lz%QEkVws\-aFd*b yJ&Ix~naI۩2D*A2 ƛQ{wZeKv0XRɕ$N0j?sH;ٯ"um1YkI&kp% @,%WlJ]g9? WTx@v_3t2t-b_}@=W6ҹEMAy%FUEcol̑s_ֿXm$5>)6@=gV6́bc]=gV6́bc@2z(cJ}w˟5Qƽ+qxg"/? Ѷg"/? Ѷ,|-m?k/ gd5@"/o+*F?ȱK ,? ѷtCd%4?k!G?@R_NsƽWrj?1ץ>b_}F3zW*E^Cѿm+X[l?=tPo_J_>6@5jkE_MQ2GZclYCan*K5YCan*K4i.תBGf?ѧ̹c^ 5kҿ@R/@?*EQEW7K^K}(Ə{^ej.gsG`?+J?@sw^cm {rl@Tw;j`h7V3\[!vb&ѵzTk .aCU3p%$$v~y/Z =k=HF X2AM?duY"2hI@*I:^&J_]=ti 7srp߾nNG(NMR6ڣk7oo5(VF1.9zkZXhqJ1~[H/oIrx8wP?!Ҽ n>:h.59&xm~Ǩ\jH&Gx^O9&'nC횅&48'h?t זq 䪧{ ֝ Z:]\ti}x܊ /xTC/|4Ǜ8o7'#\ܓATͶn4yvf''9K{}M7%Q?wC4@%gtŴ2`x~W'sQ?!Ҽ n>:kc~0i* Ǻ.59$b(P#Α'2Mn'=:s?wC4GaAUcO!҇5 }BLiq$>N?~#-jtOf pW7' p8띏 >&mFo>ktQ˴1?9b\sN$,c6&_lqۊm}jO֮#}lIY2qÓ?;oJ D~1o|Eׄ2Q@Q@y?SZZڝѯ:`LFUvWpȽzE!o4kB((((((((aplpack/vignettes/sliderzoomwidget.jpg0000644000176200001440000003431713516603654020013 0ustar liggesusersJFIFHHC  !"$"$C'" Y  !1U"23AQu#$6SVa%4Tcfqr5BCb&RstG: !13ARq2QSarB#C ?&茺r')Ja[ˊK 6RtIQ۠"ÇpqN-%+t:y~ Y Z࣐?W|Ȱd+-'?s+,DZlN>uѢ%Z0v[+]6o'Gw_^ڈyETyo?kdBhԲ3s#ŲZIGw_^x (:%bܒ:YlE:GGCdSOKvx1/Lj0F[ts$:nNGFhD,յQQ~u{i<+81O^ ATٗB,Dqy%]YݪBP@u7 -PGRYoT=;$:v3ixtvkx (:Q~u{k7Lv{)lcom BH $馊HI-qęJ-mrK::k],Rj:KFckGyQ~u{i<+ԏ\ˎw`]nqMm)ZogiP]kߞaX&<2GdlFԖSԁhEZ5CԓH-({^y,_2<+xWqEf=tt|--EPm- 'ܩ< G:*> hoT\#F/: =HF޷{.a)'5[M:R:-]W#»/ίmgi EAaH- #jRy+yyml~ ]XS[kql-(a@ϏCdF#DZZb#ZViGJ?Fl޶د~3+}bZln_ KPO@)SY7%cms;%xr.ݯ6IZ,duOGm 3$'q5WegHeiDЪ"5kj9Q~u{k&Ǣ:ڄ#] $y? FkcqiFRUo|HO$~%l6o[wWk"RU佥Z v[ }X-ل &-%(mZ5S̏t1\63dljX\.Z{^ۧj tPv Fq6sB\T9~ލ:3ӜƜILjUn RTBH* !\&+8Dh? WaL0ĥQ:ZM? @vIKh=ϟtv͒GۉE#aqRΩ#]xhv^l0^ۯ~UNhblWUTU({6tjB&j@ OĭH믎 =!O} 5)QVD$xW*WqZf9̬d)ݑL-7ͭ4ۿnݦ+xdqoBei=cE#nݣ鮜A!O}y{zn)k/:K|rlawmZ ۸ :t䙥ՂLgh"os{wMi=f<`=iO6/qZ{0MMt&/^~Tی!OZJ7l@B}R|乵?t'IQE6ߥP'Ua<`=i]TkVѺ3&ng#2i3boynChdSfZa*f"ҀR4N> _Oxo+#.I_orH۷j}ΚZl0^ۧ ==?_#}on1.dǹ5TfyV* *$SIW]/QYO%B FNߦ =!O}}[ҘЗjn*˝dI79ja@jpv(Gn<Χ3^xɒn! X[ֶhч]1ح@ȑV{͆ C֞tavjEZXkDKRFaV⫻& 뫮7JDS(SsEtN[ M.<\C8Dz[w']N@Ǜ =!O}pZ|k}^\ ^:`񴛂߷rzԴp.L*!)RVOFѯ|#2u.;=O8f%CU-JBQ: C%J!KvTY1Pq.$)'E$+Eh5AK6#&-ѤŶfmHoVQ$yNRGD]m6j7t~&Ĝ‹VJJ *ON5qmT&MmW%V(am$/NvW83!rUZgmҺޝnLD]!E*U{yYMgˉpiÓ9֋qW%B4:%Dq}98Jb؜xqU# ķ5O NN*Owi$f2Շ\dd20aey*iJ(Jh~~@>ÏNv{eۂq2޷qŲڔ(Ms]:wضK&ĞI#"{,6)KKmέm)j\T($9kx0G? DեCM7omKZR${'u@աkԑ*1xf|7"=EBH;4pU_yg9znZnJi`Sm^@X9e${+Cnj;a< [օ)D5'|Z'޿5gĺe,.cv/iN6yh4q=Qy=`;g#[:P'lD{)힨el@k! 6 2@ HI$vZP ze*/KwJg]m+4Ssj\&T%a)n,% u HxK)ȹd":5+ "I)y@m* mhV'Ҁ6hz9׍᰷.) ;% * N_k$AU+TƮ8.!#@̻vAB7ۉԍRU,V=(e4BP  hr]| }urRw^ Z܏}BnG>\ EcsM%<6Ts;އw_ɟ/,{񮻳^'W廋OKne,vn#P[ϨT V=b(FDvx)n%! ԍ9:%"ݣ1 -[YTwTZZ֝ V@HА 1r?9 u`)~s~#P[ϨV P܏}BVNvW()JJRR()JJRR()JJRR*_k$AU)ZhJ1# >J< }urUjVLk+{f ՠ:(umv{-,[LDž֙m;,i[wtQw^ Z, ޺\.4AeujcpIB9G.jo'?ym8uqU=lѮJB!mbvѐ6-/?otzJ RGJXHl^8X-S"Dv[䰖S)}%:% s!6k3e@m̤un)י +)Ht䟧 k[/(7-jd- A<=@|G]9j6Yi׶&?M?jTgg[^x,4k@IQem{il-m&F|M~e0j}w Kc` O` ~IW#ٺ_~.7mF7'];5icv|u|og6mK]* dkѽoYBѹZ Rˑ\@V g1A|XɷoZJG)*JG@p3]m.iIjʚVq7ԍO!ZKx-?><.u_ťCy?#֣ Е,ʫoGK7#n6lB-Q~C}R8Ӏif9oxَ9pnL&^DbI[}Ũ i/wMKi@uw[dK+d6'Ou8ξ#᠝WN9q&,XlLAqS%Op wj93{q2,KYU\", j$JtGD[6s+,2a[gFR+(`)ݻ`)ҹ]l)$O[\7 Ǖ.2;E[-8 MHͫ,6֛2S~|pRTӫJ} $A@iY,h'4e2qIVzZ$5Lc7~ΫGg宺|:Πvތ/v-,>Hiv/hyqjAyK R(34á'nZ@1V?WJJB$u5YǼv{kn\SlaB @Q币UW;Ƹ.9ob2c-=.COzڐSilV<$Wls5g}eI0w㲈BIRʎB[ؠ.W8ǔLGgv׸{ֻǥϲxel2\a.ٚĄ'F^B$iԀHXJyk-omjyTgܡ3nm›\9Z-Gz}٘Zu<0/S~= bq_~Qz hj@$T0w?J<2+]"Z5pat ~cOڱ8_(UB+E)rEH*T_k$AU+TƮ8.!(5˫ Uo'[.5'u@ՠ)YK|)1Ggu5]nۼnNvj>:Ðv95hèbuŦR (%jRfU<&.t Ҕ()JJRR()JJRR()JJRR( ZhJxeVD%RLj}?YMs] Sq0XHBU0?_*mkmi BP{; ??jb֟?׻VM槕|?RjVRsʗDiKߢYO},㉒.@^n4r܇PL%+#T ?AFyRSm8LۿRn3ߝ_Fyi_tJRVvOj~sKޡjy_ɽC&/z_&TgMݪbL,@Ch'Aۡf-BsXT:T_k$AU+TƮ8.!a~@[V?-jӬ- T5`~{:9ua;w͂ RGN#XevR."QyW[+vn_,i5lL<۩Y5'n4{4g^V7L:v9xZw]9 hmJi@g?7uI`H)$~o~#X٠M$! y@)JP R)@)JP R+q(M hWL:t>?ON?ON?R2+]"^O [KSk mjNҠS:j5nS_o0Oo'[.5W_ynԝ׻Ve,)JP R)@)JP R)@)JP R)@+?!_q=I"^X>+q:x)IG-jO#81G 1]z/p⡽$zK!#DG( ,Af'ƒX~8uǜݵ/rt'^Zt??Ţ^#[omu.912s.+aǒVsTs^ιgjv<*6]M!㖐,m'8?PʋzBZ|מt{"n41\閅9uBY:88+P,TJ@.0F<ilH(0(($@kդ5*eՍ_FW->$7).er^sܷm+)Y;BRWh W$Fm)$Fm+TƮ8.!Ӽ }urW͑l?>:Ǣ\_^KjVҠڀ:+Muqu~Lʴ8Q"+"y򼿴_(|ϼ|>[/*y;!A3)_(|ϼOo1^W@ wCgS'ڷn/+J^u~Ly;!A3)[cP/:G{?H&}< {F1ۋҨ|>u~LdVyiT ξQ yO:G{?H&}2x}|ьv򼿴_(|ϼ|><>վoh;qy^_UwCgSξQ yLj7c/*y;!A3)_(|ϼOo1^W@ wCgS'ڷn/+J^u~Ly;!A3)[cP/:G{?H&}< {F1ۋoC_(|ϼ|><>վoh;qy^]ə(Ǜ7t(PˊI'B?XXfG|>u~LdVyuf^}]߳TξQ yO:G{?H&}2x}|ьv^}]߳O/q>٪Q_(|ϼ|><>վoh;qy^Jzz߶ͥjD{:n2=qBnd5u)릻4M+emkhʻQ:!ZR^?aplpack/vignettes/p2008-May29-155046.jpg0000644000176200001440000006224113516603654016627 0ustar liggesusersJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??/·^džiLy$&gcI+I5'T]G?xkV)kOЩ&A<B(OЩ&A<B(OЩ&A<B(OЩ& xѦ]2KJI$I'y\?xkV)h*h.OЩ& mg5=O^ۻhX16a@qxƹaVDX3m 9"{g<OЩ&' i.PI'i?yw2.:J  h*h.  h*h. xѦ]2KJI$I' SCt?MyZ襮9A<B?  k9A<B?  kC\Te-`&6&w +úmN+F˒__ * zx?M5OUt.܈SwiG4UrI?H~)Y?t>DXYy!܎pHX mXֳXwޟZKyv #{I1lmLT@  )ǣy>0ލojͦZ*m¢TdmGTAV֍4$XDbRI%rI<4_y72JԵ ?PMV=2mCeV< $_ K@ SCt?Mx?M5Q@bӾZ)Qg%Bˌ9y [x:(4]>i,VP,f2H@d ?t[?BywwNѨhz^yawaƟ)I&'2?CU=T~"x}Aej766壙BPv灂ExN~b(.-,~G*\ _v TO d%۳Lrm_*icۄ,=-EMgimp!9 ,|QΌ h <1hvVz6\[ıw>yHp'Ա6-|';?~Ǒ+A7er/FFAVƹ\iZ>qoI?'1<۶77wrζ9b(P :<RA\?xkV)k(((<RA\^%?e!}=<9]EK{c).Ω G.[c&iRXGGs ?Eq$ҵZe%D|m RnWeV+wu{f+?{5HZW&ʩݣ-0|HԾi~X->{xnLπr^5W wh=·giAcr0&b$,Tv*Xzyj^Ӯ5/-.Nq421Pr P\?xkV)kO<5`_QYz4vOԬc}:nm$$E  p*?>/K[]TՇz_ŌI?wcZ\ko4yr&2Gh,r _^m.uR{9Xĥrl@ C?t))qqu(.d8E-.AVV |)x_z`yъGnIIbF&׋<)_Q4]Jq01$UH,77_}N<DO/nh'j/v8y_ V%Ү#K(n5mek2dݏ^?o5'GnDZv8p w܇9 J˕eb\x\U{]A }$s$!c8!ov+4C+M3HQX6۵|v6B+CCT%3Aw@ѡ@?xkV)j4y5k{=TلJL6rpAeuz)܋yZ襮<ķ>;Ѯ{iJ?bXl BĎ|bRbkF4Mi"NbuwdfV[Y#y`2ߍ@xKH{9&I!|ֶu %vTO&fI;K8aB#4<>6N(6 鮄V"Com3I XM˔`8oPmkF/gnD1FNDJ<Lآ }*g48+_ G4zU$'0Dy,n8HOn|Yc6\ QA'٤L ߏަ$aH%Dq)./ k2XxCa?|6um.Gx7V03In>_T;@UPOB1f9~*gx^X;t Ԑc~wQ<7Ux>yOKx-Ĉ%R%H3ǯJܿguw)~fnqs˟H|Gqwna:eÅJ1J9v@ïvv結[ki#'r6HD/P~|NSJĶ}I$yEg ӄ @ok-|/ՇCoZ-n H#S! P c&}H|81I῎m hqR-{<o[v7wWrjZ[v#XX*ǾPx#~*_h^}qC,\O12dI82>A Aw'<ao~۷v=Z*<u#Fm<ڳİJc v_(F !_ jS}K4""$X\`FU 8$I$@yZ襮<R_ k^3ѴJ \О"Ptj}*gx*Sm5=v[/-"P{Fʪb&0߸N|}oy}2MGXF.`M ܪmDP! 6OM/PmM ӢŦٷyH N7)Vr2x?@ŐƵl[vRFҟ2#$z r~kVW6:E"iIv=ͻp)W q/y:nn^ic9vK` aW((<RA\?xkV)h}-XUg](:C%;N wrfn_men|!wYBB@UrY\$d`Zx'`h/iUc#!1cNMyY["7GkΗu ۻg>rZ-^>_qxd?QMu{iKÈY&* #NɓÅ4YA%kcwdiz0 $x#E_a4U1V0؃ Q|:4K {D/[A+y7O6PEP?O'UZ+' *E-tQEQEQEW?O'UZ+5gLYi=jDk%/jZޝKiǗ%ܫ (3*B襎PH,3?ZռKjEAkdlhuhؾᲽH1@ou{=*)n4}B+vp3#nK{*˩iecѮ&3Ie!R@fNx⇉txOokX_4Q}t)":@e˓ ٻ唲=Iuis,>j!V".HB\a+Cᧂ,==!=ii[YbpŘT2p)'6^0XڣJH7.v9IS]h 3k7^#u "]bS$ (E@]NT9!($ qUE81Y}[OEK:B@6A@!kh32$FV ;i5w]gFҧK&G4e AcI]P?O'UZ+m 6N|47?»'ZfӴ$+aqy*ʘao##pu7<=S<hwg46C,ţV $Eap*=}jzWN[-$b%eXJLP(R:e]_z6ܶ45VX݁,y YwA%C{>𗆴GSn=B 3il\ƅBI'8,瞕tÍ*Uhax\Xm @Eyu:k]`4ɮ%"(dFRi<+Rº&}z/< &*[Z&!>lI熿kžNѴ;wX[bѫ‡"۸ s< xѦ]2KJI$I'YjV{iO\[Gi# p .4i-~u$H[O)pr2:  h*h.Xۿ?{tY_z*h.OЩ&: +*h.OЩ&: +*h.OЩ& -x8ԴmN;NjaT /7 l6@< xѦ]2KJI$I' SCt?Mr|t~}!u4Pƣt O3xq!{vp|4JaJ=7Pӝ:֟ ǔFh`AiO#dw5e>x~ZPn"KkaH*%I\VBݎo}RHQt.^?H9 {nt,;JNիMTwW?'T]G SCt?MYtWw k~<ᶷY?|)U$Lʓt  i&s($Uu: z=J)D[%̭i"A A T :P*h.?/·^džiLy$&gcI+I4;kx_K|ZL^Wi"W?8YEn|p#7O<6\K0DF dOko^McZ {P/&c#cq`q@u዇kl̖DY^ܷI$m 6>ت~ _ h~c"&f$O-_!@* `g/BR䓵o}}ekO|YilXW  3a鵺-a5)4+\C%;dg⼻zn}}mݭIv.@s~ | /'^崻0`9\O/$=3$T9aR~8w_fVcXiV_[jWVKA \{H`p:@$gQ])%r\?xkV)kO<5`_7'n.%"BI#TP2I'5qx~ Nė%gjz|.v,6Xe<Z흼><[s277<.FOqjׇ>n{'lnn 5ąu :v`!O>+ú֥HW7Ȥ.G?,V@x0drh:?wʧJoKsm2 W#j>z5cᾅK¾. a,{<dRA*}roǨAk6zCvDQ\]\;ApH9PiUn}v3*~BUT`(.oSƚ\Akc,NEx#/xC!!A4M:Xզ|Uz/I ۽ QEsyZ襫΋jeMF#pϙ 98Xz3?_AW4(>VZńjZ|0QE2VJC ]_ k/_j )$?*6H$ԮEZO]]ZKu&-6yIn_1/M-l?4$-CwD3$ 4mŀ|z-?PgX?/>,&r7Fa ;}Q6SXx,CWfspnaB.Cc$=Mմfݮ4Br%*8%I<9^b+KۍPK9qU 76~,9a,OQZjN7I QxjC>@QEc\ӣ>d/6"wK.اnv"@J=J[u].}[4W"ss~yZ襭 S|7pmXl 7#`nR8<RAEe͵ZbbUFuF8#X/Ct1ݼ[%Hh@yJrKPT(/5?_뫭B+VKk$ZY0"xՅF!+&xzg4Gy;F̑M(FNJ=2{xme,\~zqZQOzMlQ.{t{J<ʅ?xn{ZKM*{Yw7"{ %ԟ 4bm>U]xdω:^ lm5@#%T1g)ecV\oCuŮkoGњ}j=6ۥc,),ePR55}/;=o$W ۖjR1N7ټ7D۞'L̕6ڵ7Ved)`p1ѢRj>_,\,+Q[hW'J\, ċ gWY\?xkV)h5m/R ym )#I~_W/F3wG;zOwjQ'I,^-Ia?$%žҠGO+ޢ_ʶD+(<2r@d8.AwnjV3gzĖhCcRUf&xQK;sw5XV?ݷ$*[? :<'G%JZr(IDl Ķs@O& #ؽJ&fM^h%,v( (9<R%u֣׭mC km$sg #&Uaq#Z<RAP觉f/z릛^vV]äM/a5U| 1BT# 'OlgWyqqSQME$EJ[|EUQ@yټY/PGj)2;wGE,T`Fr6zsyZ襠;|Y^"t?N[V{ḵON2V+;to([G杣^hp\E$aYRE*͸P0D ( +=:=qtW~ 2)߀w.B;qMhPEPCi7v[\j}RF2'?VcՉ&W忱5]TQM1؎6H㝛sۃA;Yt< $_ KV4 #ֵd# /h#  ihYKy=-<3bʹg H&xWUw-4y"Kvkdv41t<r2i^w"EׅFđBFHx#[p`+@9?Xxkzh%xښ\X)'m|$uχZwo5]$e?ݴ|K7EBϠXf]3X[iVzQKx-R9c12# v75tM54|j'n9d W;Jmch2+Q`@\YYuXbKou! 'K*z+sO<5`_~{I5whzlm :DI2KTyZ襠((((O<5`_W?O'UZշ>yy>ճ2I1/4I4uXxrMwCLva ٮ+]t-oV*^"h nS\o ά0󮣉v |Qo`.!LN%$n%0ˮHX2Ԣ&Qc`YB܎{X7*G|3zFy>wOԬ).np%2Aɮf ]Y9ӦJVWm-[wԇZ"J&]JՖOA{rl.U3 1/lLo]_fX&ځ vqҡ:eޖe!If=!B$T0xYg^[rulhPd$/95*SIǖ3EvVƽީcaqiowu3]263xI熿kam# ?.ٙw4K.# yexI熿kWysӒw+|H5[RL9/,7y1 7luB3ragoysy ]mD.хÖgXfSԵ["n5 gpIbz*1RE?h ͅ}Kŋ`Yc+cʟ;]{ĂM?Kњ6Ul`2 w |]gA(4ki&H/q.2 L8t=Q$Դ7J,$0@.[e(c,єo\5OT{C..d^7@er9 ylqus[Լ3O6֑Gi<WC& \ŀ B~6wwoG4e< 2 #]>muזd$y'ɸp9qYƣj:\:fkq.ˏ$?dLߵdsw6zbGw^ï]u߳KÜ8mW`((lӴk+/').dT$3h_+u_\\xkFytgI,"fv1)$$s[x?M4xI熿k   h*h.  h*h.  kW<xJB.-%lL' Ѳ;m=7#k+~0Y]:-WӮm˛;[;/ɻ 6@ qbsv׿# 5NTTxe/%6w9M c@oat.چа oo!!w6 ;#>|)]{yHe;ZC$g`+=~5M6ê:-ݏ h <1hvVz6\[ıw>yHp'Ա6,>x>NsJ"H^I67;m2OsW\Eya峿paQdUg[ԛ ۼﴷpyeAOݶ 8BQQm*ů\t2>¬ldU}Xi+O7O2F$h^}FG4/%las.Xl=7c~ ߄t9[@te}N01 }n巸9 I]H#PkkvkiZIq1]lQyJpFNOnlo[K7 vҹ019#5cm$XVi{x/Bq34Ӫm2,.qkGw!㺙U [zZ4˦[+e<<7Dd{2G\3y  O7m-;85=B6KYNB-Q.bF1=A5 LѠ ݵ?>4ۖV e[%7`0 cskcvצZ\e#g.7)?mO~XgNҭZ3$o#0'c< ?rHFX[˩i. 6PvI.NN(c^xqa\ٛv&΀oUǙ4v7JNkgZ-ڐ(bD"gPP0<~DpNOPEPEc^$v΍i)F #$$uS0IPIwܒqq^OH7@y*:-YJ-u(4J6OLrʡTX`- Yuy{z=[OmDȬ *NT\ ܺ}52 Ng_zS I RI}.2KŊ!0s;KKXI&)I熿k $_ K]QEQEQEI熿k $_ K@Q@V?IgMmZ9/'׫#' 2̪@876Я)r-e3XRH p uSDŽ, WP5Ckcs K9eȾVλn2xKsZРЯ[|P 9fꮤ:/)%6{?CF5Ԟd0UG99;ksEeM.Zwgfhn*26Ⴀ$4_ hm*\E25rB\C'^8&z>SZO"NdJpjP?O'UZ+i_ {^M3Ps̑}{@ȫv W:iZ\$obig9ܐ( F(a/GZٜ)rT0$r:OǾ,]Am]}ĩ8FYTiH7gJ4$}zGk[ymc`r  $7 S֧6^^^ss) id}Ř@7aBW7x7AHLJ_D!JGaT9'k#S8b|/x{Po/Ɠxt)th !Hp G <9vWke_o}7y"gӼEh~丁5-Ʀs$[U~ð_ j:[Kkt[Ql 6fpSp`'GZO'UZ(=bNԠDRvQI>Z<(.B0sc{]daԞKiVcY 櫤(SZt]2xං3\mQdL`Cx>!װNa%̂yX2b'7|(xIӵ=V[Kkd Z,qJZ bd ˅ǩäZOv %F?rcxԢ $_ K]syZ襠( lι>?џ/ۿ3q^ x7lZ-Un!OŅrCE4zm֞L͹X(#ت;#y̜| |HO}J?ڲ&i.#\y˹UB :@9O>|_ji5֝oa,,s ~mR0x |37tJDheWHfh`[80EQExУ4T k&nF'iP_`\뎵3DӴ5G{q$+" 7N2$1/:!Ic{&MiR"0LSnv6GCiV] d[*'!v>4;MZ}F 2 J3 |`qVvUuឋ?d Kw(%$KH| ˜gc OjVqxz -"L LkBʧqfVw6#B.4Qk,I$I8$(d Ԭ}E/5ieoΆ7t e;s 3b(<RA\nO ZXq}/?{o(; (9ͩMǫm)0~҄۔`7@~9[xq|Ex'tY_QZw9O8=eUI}Z/,'𭝤lvw1Al>n(gR1sO&&sڎ/6ccŒ ̱;`Pyxk[NxoF5/ϧܬޠ# 0 G+r3x{vԼV%Yk:%epaB*Xt*f[ rv]ӋEpM Uq#w ;Kg[gyagǗmَ6 &B]5>v}eLҫަk5X2,?fOev `v5wֺMVZXimryk6l#` \Aaừtصsܵ1@$͖I x:U+yZ襮<RA@Q@Q@Q@syZ襮ƍ?O}B9\X Mwt=<@$G%UсaԯA^~t DԥSjevVX@f,PAQEQEQErxcSw<1i~ -/R.4[Ґɼc˂+]am=:l đ/*1ș;W' xѦ]2KJI$I' SCt?MtW?'T]G SCt?MtW?'T]G SCt?MtWҡ| 2C-[sM uOhfP5ndh!Y&I_R|ܯD9UFh+' *E-WwkCt>$ɸI#뷆sм|)xr;COoCg]a',=h(NY/ZVskyg}:=Zm; SCt?M\}^iTiI : bđ5bM'MTTO}BBT^xW@{Z*h.OЩ&5IcM>`w{ ;8×sb!($ qUE81Xx?M4 4?C˥YZ]*E.h8#UM.$ZdcL1Î'T]G SCt?MyZ襮g<1xXw[pfIKen vn݂I18,Tlxl.w7qʎEu݃Fʨh(^Ӯn1<(?;;W[<7sgC}9 l;D<ͪGȪAeebWoxy<= l#6!08_(ppnw'4ԒmܖQ[[.AYawsdpiYhqA&qľD #9M($p:2HVM/ \-(f F 0䗺OѴχpikVmm}1#mVJsQAH>7*Vg'^$cIeX5[Iu,0]Ɇ%ɏ1_if< xѦ]2KJI$I'/vᡧjv[2[vȡlH@rnGK J  h*h.  h*h.  h*h.  h*h.O<5`_W?O'UZ((.\%5;hmKԁk?'h.n"Cyqlg!K|gs߾<7%ƫk ҵUͪ,QN>+K++  T_QX[]YpwϽcxdl38 Qz^ywaaơ(HW2Sf=Xb|[Iq&8"RQX0 SQEQEgv֏<:MSс++qEscT9KcmQT)^ 0QͦZvrާjZ~Wc]K87tO'UZ(zno03haX r \%E$*7*=@%ThoB\ae2&Xr6F8x:wtsjv2+34{0mʜ``~-xUh-Kh\{u@U9hgjډb4kwi yKYQW )HprTGxD4C;/[PJ,bm<mW r?ĝᖩqYxK@jSTe|ʼn|/oj>ei)Qp\f .UT.Hs/ÉF_$2 +6NT>])lyZ襯?g|:V}%Ćg(]̧0(T/xI熿k: ( ( ( (9<RA\?xkV)k+jOh[hjEAR[ `ǏVhGH6a$\ݻUWּ3xIiwbIPYA` @W'j heDQ.Vfv)8QׂN5Ėiَsxւ8PSigP,WhʂۙAد7zGo59d-<9Ie!$Q"-`0<9zޞ4ZŶ-3.Vmʮ_icUS@aP]ơp4P&2@QBb$q~׼'OQcҧ{[=OݙK.v$7f e՟|+cEIKS70>zTS>} ld(J\pYta±tyZ襮<RA@W^3[G}c:|[4t*Dž|2 Onh)⯉-Z}$ԭ-gYUd݃",0; ~)=kE|j:4ϧX$%ch;V|C: 44RT}۹yRA*FA ߶vEHgqr}TV~_O<5`_ceg/;ƙwI<ǯsNO'UZ(Y<{SNX d2Y"w QaxJ+oM$'fH82yMlV bI<ᨭ?ԙku!9iV|zEvZמ+-H|"2%LIbl9S%匰in݀rK\1N 9ْX{Q@7Z^ xZĚwL4? v۲o&'HpXr ]".$Hp DEKc0v 5FW" Mm-n.GM|)t"@q>L"*zv7ַw1U"m&ͪyr $|3ȒD#," x]32cgyawݬ4 H8a~K.%Y1J$Y-;OYV:hFjj\,'r#) n۵ dѦ kO7%]v.pS8 K)Rd j:V/<1XQX I͵FNHqZdž-xGNC%<ד.@=~T4Oxr)-5;i`K;M&Jf!2@: G3_Bdwv{=8 (cf]pr3`+' *E-jiZl:Fo۴ Kz*0( Cxju.4vV]l±۰ 7ꚔwkR_C[~йw&To.6; I%<>ԛLM5|d׉}-^q.(NYTi$ۼbᧇ[-Vy򥓽KlB'$C$$G|<1]7!:o<k$&&WBPJu>#xY C;0+S Þ%KyiǙvvtX(AK? bq#_]BWh$ d V]dh.!7$cr $_ KZ^`p oDr+.A Y~yZ襠((((5-3ZjxRKԬE72kg 5Lꪈ`Y½{xu<$vW;c$[\*)A22 nVX1b <=|Aχ4X4OyRH.M@˖e$4=hogO)!:XӬ㵵˅2@,XI,%IbI$I&|mmCqud~@T b@ڀn#$m Q@eI]o΀GyhdA## ֥6DI;id xdIEW/9-hsY=~kn<.NOLQ\?xkV)hSJ/4Lj&7!!p} \x||AwU]: 5jdžo!@`NuJ͒e`AgǾoۏ9۞٪,>gˎ=@\e. $`W sN=KCJӴt%Zm!1)F\Ow*}ҼͲ#{>m\=*曤5[z} ;XV%-2B3}\"@TP0%PϚš  REi -cF 2Wby% ޛQ}Oĺӧ4KO:%WѴdw7BBCEXx^hv6:UV49xP7+]3'/7mz<11=xq@mKC٤"vF9Gd<28!#( ( &Gs|D^mE9]Nݠ9vE,( 솙sw}vaT``?z2~M >ZO<5`_W?O'UZ((((aplpack/vignettes/p180443-Jun-9.jpg0000644000176200001440000004325013516603654016237 0ustar liggesusersJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( &FoE|N^1R=kb^_hwW6]A,H ckT`ߠ#?Q.xMFi㌴R aulw|)"2H!yb2Q##G}aggiݬ AS C|ŢN#X=Um˶Tdl-?X ۲'@1GqcagYgaiy rI8Q$5$C3/&em+;YGbGz=Gĺ|kq-6 Fή&[ 2Jd*ղm|;f-RvREEo~] $9/,;9, 1"6#*x8 ‹ =2;; H--c`FIŽI'חͅ#WPK#qvU>w9ȧkg>> [OwXцI䉉TÌf"H!yb2Q## ռG4I#C+ qZ;X,)-CbÒT` 㬳;Z5=1H[Fmҷ0z]Fh'Xy>noqg=}M\n巸9 I]H#P:X;6֗z}}UЄ.Ÿ.$BvI]oM] c}IϾ1r^m|}Yv~t{{-M6\ "̸# 1>ր<"@ԬM>}ON0]ivXhA y:l4NkB`dBRF1ڮPEPEPEPEPEPEa(&KK]Mؑ0,?w!oBRQdap-, +M( (7ĺp^N]IX.@ IH@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ڌ3dڣu9E*ûQ@"pqHe_:AuD\G.A\Sx=JH:3 +GDM"TVparCIciT/ComIWlUߵy_Y8\a((--֜ny*TNY2Áa +><6S[-Z |.ʶ60ChPEP~cd2LE#m)ff.A%6goN̉m~؛IcjPEPEP?y%FU(z7mtQEQEV||Ceme}ϛfٻ{axm{w$70|JT{*m#}8UyH%TT%BhQEU{ߧ\<Ǘo'#xFܻX;bޮyS$$_uaTob4g|F1 Xn!aǶƣ:Z|y[a>S3m| ]N읊(mg'kuM #r0N# b ( (3;!͞evX˳wvsE|N]y:yːF8o<Cҫ|CZ'c?0޻n~UkPE^i0} 2'O"9r 򞇃zP}"?"խ#ّ1 "O|cc#m] nۧlP6ON-h@Q@xAѮTwWI8#>Ƭi۵ƗZ_@QeP#8 P]=W6Һ [d7N}}%ٙm18=} vQEQEWuiˉϸ,w8p:_B'o߻(9ݽu$841n~V^envv GͻmX]0ɽ]A)<) 841n~V^envv GͻmhQEU{X[0)[.vNko-ıH^I$`I$_ CrȚ 1Z֥p,P !lix P_}:k ;e~Q8GZT˖W#LF72\x04edv;U# C!FFc(+H# yNI|$q~ll$>e~\jcm\0:U/*7iFs8ڙEPEP>_̴ݱ>nvn|Ⱦobnm\G,3#F?)or+|CC"ݹY}B$V1!idsAج{]7|iPM_Zv>X9M$(ϽͺRmo>Z6T띛#%WvSYQLbJOx߼ B4(Ksmr9a6 >x9K|`$bh.1,os][pˍQ v=g}X|phܼ9oEnۧlP6ON-h@Q@MF7P$1,1ӓ~^QEsPo_J+*FWA@Q@XK +Kב6k E"1m'=;椿uiˉϸ,w8p:_TtF'loJU.ۏ0VWYqXȳ6#YPH*dewesrh]0ɽ]A)<) 841n~V^envv GͻmX]0ɽ]A)<) .6x̛#-v۝hY2N{`,eRA ger7!Wv#ܬ'Xӭ`G2kzwhVMI[ w,@}6=A֬і3ZZ_2q][^cA5_|7mvܲ}ۊ>s?`wc2(y`EEii9Kwnn#/.Бnsw>s?`wc2(yH(,~ll$>e~\jcm\0:U/*7iFs8ڬX8<bigyIRmQ9U|߲Ǧߴ}+twjB(iB |('mE A$qe./FU*um$Cdb{Zs$kKS-JĄ!WS0@*ZxgDbZ|o|IL*y`ȕV8=;|KJ_| ˹89nv_ƽ{X 8d O]d]ɱn zsxV!60i#Js.6E-*)6BjKvKw^A mf01YCypqciq[ 0 \cT`{Kĕ#Lb.%XHقy1ˑR6*m-j_tUo7|,HPXۀ6\nJ>UQ-E,rnl.źSA,EA^1/Ƽҿnϕwx|g>\۲[ pxduy]I;~W.+?cbp04+>ȖJyVe1wsaYURN 59& sqʡ#8̟}h#M{x Z鲴v,zz`c5kXϳH?2fd#>jm#Rcddm67_i.*eN]aoĩͱ{/5K>9NC1z6E.`R2F!S#+,Tm\1~-c].@KI 1eT#herN|8`z+ټe72sy8= +.~ ߚ3cQ̀:= [Ʉm_{sNvC=6?y[w߳Ur./X),u}0(U?pnwӇ.X~}~o<;Ӎݪ ϚLx?3'm<<3L+>i1(nopx3cc?y3ˎHZMM/-엖燎i[ƻqe5H+Ǒ'۬W\n//Ͷ>v7273&oo>n._sB7ے1,;~m|]i,PL\ǩ{3D̫>ѺD(C5oyM3}\8o1$cYv&5 Gq$]VY"_uA~-3$ϼ} j'8Q[pˍQ7'ā)dde6 8jNգۣeE+#"1}# >'Bv_1.Tc;h_⛘aKH6P"x# U,b4|?~t]ݰۻnX|*oq|\5ޜvxʬַ$ Jݩw Z޽08K9"#;uo*Nb;n၏-nتiNDbYFu, _uG̑?U1qv:jo{WO S.8!rw np5ꂶ&䌝VhaPq祭\.b"d.lwn@N7ڄ('fa56p ls302$2<mg *}ص4fK; 8ıHeH)7& [.3FlD2PQryz_@zP^o_YveA,,F$SK}3Ad vw =0k2AZIx 2-21iQ-&2HyT Vb(NnqQEF!Ea^%Z6N}\ʶXc,UK<*PIhz:˥ݤ msmwY"@88%H*Ch=W6Һ [d7N}}%ٙm18=} vSŋq'"öù<}Y|C˸̑?`snalrzL63|Gƽ#CQ@T3nګufjQS{㾰d"!.(Md / rV#sHk9FX"SsQYbv6XzEЋ˨yP|׌ 1gnTE-x%.wwB~XG8F Hxߗ"&*5ztkl[Ku3+hU8,ʡA+@Z\er6TCnj_״[u[OM-ob̊(_\y.Vˍm:2VަNn7m_WtKr;xu{tV;15pK4bL õ~U.C; ɸXu?Dh8I#%'W*7rvcpڳz\?ikmo4!1"STjӳb,6߮۷>_6U̒ox]m4AyqI|||ءNdcNryf/w*WoI7gyqpˁEs;i2.$i[-΃#:0zb'>{_GO}g"h.d\IS!Hdm;$c dVc$1ė*w3j9o_:AuD\G.A\Sx=J{oIx3g˳w7K%K~R,Jis-kb[o,qpN축iY-1 3yRqw9ȣm7%y)kıE >O끎֕g$k T>UNF&:2Az{/ͷ3VuxN~ctî\C'ɟ w\F{%K[vVʵ&eUZ ,7 ][ol໷}O` ҏӄ[v/z[OZ|V-~ŏg׳?[coZr? go_'ھi'}I9($*$lp#$(99mY-- _l~?f3iZVKi^2;!mRYr P2+DJ~]тWw?Z-ǗEۼ3bEIq2XZg8QE_Ig( siw-2C-)e@9SV4}NlMcWB<1;Չ< Т9(z7mtCѿm+ ٯuFx$yЬA]6 峐wެ!vk O4!IH4;nm;͓OZީoפ`{FHd!|UAo=Xi/5EZ6e1yh@Sܿwp˦[*bhaI"9P);0xK>m{Dl-o'8 lFPnvR(Ck~W2ou]g2ܖJql"qr%W4Ԛc;پt2i>T&M GCMցss$:쓟}_~xo-7ʱ7#=@4FTP}nIjպy𦬃X^UG,@ V`ꍿz{y˛\Grv6+z|Og/G_NN }._V['-i"yOmäl㴴ʷ"8NEQ€*}XI+}#+nfA]ђB(QKb*VOO5+5_IF7"ap8L懺=9Eʀ5H2ce\PUբ|i?:fuռi6(L.G ՈcK iIŸY.PRW8Qp83MN[]JOR)>j+l]̉>NSnG"4>{?n7yl߻)2$wua};wk‘ĭ9lM٧\Opݹ]~ѧ\h.ȝ<#k7zY:ScĚyok6gd3W-T r,YiI!_Xz|ޠJa3 I>$w JؐpqO_h*mglݍTgq\5˛[s{{.nNR_5vo\'ˁkSı-F #2x‡ۧQֳ;T|/v?ٺ]xIv,cME~Wa;xEem:VUP( Uf4+?J~ ywr~Yn60?c{ZVVG,')n=!u(g`J|(b#n &iq{Ft er\#!Hinu!-?8yԅhPՇNnS]58q_ŤGo$%IaB% c maTZv JCԊ@@)ءڡGIPIrVJ$o73vh:9$J:${dP1:n/<'|yX˕wVœqQo}S/7RVV_cn7(W9OEf_t m>ej5P}cQK{ϵzdkFXv|!ˋOuZK{[˘'߹=s?+{Noi>o>d|iKc1fg0ivW7zjYR2426!nN~|6ʙ&ѭ)<і[O%?6.3,j}ۓ6.[ɂ%yJ"FpŌlYάN iuwckM' 7Vm3 S_, |ٚ>s\]}Z7Xۢ?tt$SKP8wKINo6x2?2D򋵷06O=+֗VYW DR ni-"s[HQvWX0J̫ydVWqUc()Uw;k~k$5OspBu$"z˖[e9&/P18H `Pb%_[Ǜ; ǵSS;F9|ņx0ho& J8n)qk-"mVFϴo۶Ǜ; ǵSS;F9|ņx1#"qqn1ڮ8 K+dbŊi=Rt6,~ll$>e~\jcm\0:U{ ?]\Ickg헓7/?4znm ϲ6zB|oMbp|͒x$I!f-̋%]G•_Oqr((U36i7l{[M-՛L(eڣlɐzq土b=cbHgF@+d|;q܀gCѿm+>]z_NcWg.]N3a@̑^!TiV>(m򍴩AV[G2rI9RPh7Jy1TP]4:Y";Isy˦ґ;@vÑYYw)F4WFe5OLkkWIⴉJVI ō\8LҔ[/sAsdFAu3`ʅ[?* Ͽ}չ-os~3 뻦YQEgCMn~.~ߐ˗Z_ubK ržm1p(:eB&P]w/Hc"̒y eo0% F*6WpY^yjb?~TɷoD5f\lk֧D<<6詹0O ,\MW?.s!hda][(@ǝmavKKG6)ٝTQ6B1;U7& ؞6Xi wB,aK!# =Apmӿm\slm66t*V+^W]{aO X.:|H<<öù<^viO"AIH6'X;^bJŭe-vp[]~p>NpuqiE[Gl[ `ӱU lYCaU[p .衪o^SmcݍqA<{r9=jgӮgL\N}q`WO#u:UF+lXA$Uϧ\-|'s:GN HDNKfyguiX*M/oB%KsiZǼ:ϗ}n>xؙl1QmYmmjin7T`#f:",x!KՑ%8Fή?( 816*0_]:2US!A,e9UA(}"aվU^{ QEQE;3~]ծo ɸalQ@=W6Һ ? ѶPwW;1mZn-}}oօQEgǾlc淹?{wC{_Bݬi[6yd1e{Ǚ?/ZР(((~-UӗfgO|6XqY˳{y_3|@_,T8->}cQMT^d? ʗMq/-lgʝ7Jdܯ( ja~`5>}cQMT^d? ʗMq/U=R鬬txëU}%sؤsgy:O.8gϖ9p61P9`ǁ@ m #@dXIRQEOLkkWIⴉJVI ō\ 7p3XqGSujWuiˉϸ,w8p:YyS. oQ_M-cyVEI|e30,yy HUaI(,l Fqn^q7TQEQEQEj7eb|;wTq $x&<7tp}6'Ogr.J1@Q@Q@Q@cNLnayuk2nkjdppA[PEP[}oY~ΜnZ]:-NqY1 cӀ27aPEPEPEPEPEPUm~,rImú;Պ((((((?D|yۘ1>wmȻ*8gRy$<6e;~?nB ( ( ( ( (lz֭Ziz>4}۴ZUtk72$`b q\h9hrV(R4I؀11%$%sl?ȴ}s7"AEsl?ȴ}s7"AErz4ŷDҖK{gh5Y$ueH6 PEPEP^g߳xO{wRZ%b=cćN='MTTOMBd-¢W^8gHW{JEPEP/e&3kOҮ1wutQ#G@QWS/K s<0 lS*/<+ |=ϭ\((]s'm;RQkfZUA,%aPAH߳xO{wRZ%b=cćN\Z^3>i&]l$eNTADzN6hɲ[Dpόr((;Ԯuw#k"J:[-y͐Moiy{V:{]DBlUۀ |Ӹ-c_*O~Ξwק$zN6hɲ[Dpόr(6Xi wB,aK!# =A(/[Mzo{{=7gi0)ՒY \!MezΩ{{ Y֩ @]H\c `k.-NNҬn,`Mn{Fڤ``: Iu [>{Gm$Ы-rʃ=(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@aplpack/R/0000755000176200001440000000000013516603653012076 5ustar liggesusersaplpack/R/iconplot.R0000644000176200001440000041140313516603655014055 0ustar liggesusers##define [[iconplot]]:## #2: iconplot <- function( data #10: ##arguments of [[iconplot]]:## #3: ##argument for xy-grouping:## , grp.xy = 2 ~ 1 ##:argument for xy-grouping## #:3 #4: ##arguments for color and pictogram grouping:## , grp.color = NULL , grp.icon = NULL ##:arguments for color and pictogram grouping## #:4 #36: ##argument for defining the set of colors:## , colors ##:argument for defining the set of colors## #:36 #38: ##argument for defining the set of pictograms:## , icons ##:argument for defining the set of pictograms## #:38 #5: ##argument for transformation:## , vars.to.factors ##:argument for transformation## #:5 #33: ##argument for reversing y labeling:## , panel.reverse.y = FALSE ##:argument for reversing y labeling## #:33 #48: ##argument for panel space ratio:## , panel.space.factor = 0.05 ##:argument for panel space ratio## #:48 #60: ##argument for panels proportional to sizes:## , panel.prop.to.size = c(FALSE, FALSE) ##:argument for panels proportional to sizes## #:60 #103: ##argument for panel margin:## , panel.margin = 0.03 ##:argument for panel margin## #:103 #85: ##argument for panel frames:## , panel.frame = TRUE ##:argument for panel frames## #:85 #54: ##argument for panel adjustment:## , panel.adjust = c(0.5, 0.5) ##:argument for panel adjustment## #:54 #67: ##arguments to specify pictogram layout:## , icon.horizontal = TRUE , icon.stack.type = c("lt","lb","rt","rb")[1] ##:arguments to specify pictogram layout## #:67 #77: ##arguments to specify pictogram layout:## , icon.cex = NA , icon.aspect = 1 # NA , icon.stack.len = NA ##:arguments to specify pictogram layout## #:77 #78: ##arguments to specify pictogram layout:## , icon.space.factor = .3 , icon.grey.levels = 2 ##:arguments to specify pictogram layout## #:78 #115: ##arguments to specify pictogram layout:## , icon.frame = TRUE , icon.draft = TRUE ##:arguments to specify pictogram layout## #:115 #104: ##argument to specify labels:## , lab.side = c("bl","br","tl","tr")[1] ##:argument to specify labels## #:104 #118: ##argument to specify labels:## , lab.parallel = c(TRUE, TRUE) , lab.cex = 1 , lab.boxes = 2 , lab.color = c("#CCCCCC", "white") , lab.type = c("expanded", "compact")[2] ##:argument to specify labels## #:118 #127: ##argument to specify labels:## , lab.n.max = c(20, 30) ##:argument to specify labels## #:127 #132: ##argument to specify labels:## , lab.legend = c("cols","rows","skewed","horizontal","vertical")[2] ##:argument to specify labels## #:132 #9: ##argument to specify icons packer:## , packer = c("icons", "numbers", "panel.legend", "stars")[1] , panel.text = NULL ##:argument to specify icons packer## #:9 #96: ##argument to specify graphics parameter:## , mar = rep(1, 4) # R default for mar: .1 + c(5, 4, 4, 2) ##:argument to specify graphics parameter## #:96 #112: ##argument to specify graphics parameter:## , main ##:argument to specify graphics parameter## #:112 #6: ##argument for debugging:## , verbose = !TRUE ##:argument for debugging## #:6 , ... ##:arguments of [[iconplot]]## #:10 ){ #8: ##body of [[iconplot]]:## #7: ##check arguments of [[iconplot]]:## if(missing(data)){ #152: ##show arguments of [[iconplot]]:## h <- noquote(cbind("arg names" = names(formals(iconplot)), "default values" = as.character(formals(iconplot)))) h <- substring(h[ seq(h[,1]), ], 1, 56); rownames(h) <- rep(" ",nrow(h)) arg.list <- h # old<-options(width = 95) # print(noquote(cbind("\\\\ \\tt", arg.list[,1], "&", arg.list[,2]))) # options(old) ##:show arguments of [[iconplot]]## #:152 #1: ##show info about version and arguments of [[iconplot()]]:## cat("iconplot, version 170815, list of arguments") #152: ##show arguments of [[iconplot]]:## h <- noquote(cbind("arg names" = names(formals(iconplot)), "default values" = as.character(formals(iconplot)))) h <- substring(h[ seq(h[,1]), ], 1, 56); rownames(h) <- rep(" ",nrow(h)) arg.list <- h # old<-options(width = 95) # print(noquote(cbind("\\\\ \\tt", arg.list[,1], "&", arg.list[,2]))) # options(old) ##:show arguments of [[iconplot]]## #:152 (144) print(arg.list) ##:show info about version and arguments of [[iconplot()]]## #:1 return() } args <- list(...) ##:check arguments of [[iconplot]]## #:7 #18: ##check arguments of [[iconplot]]:## limit <- 9999 limit.msg <- paste("error in iconplot: number of observations of table exceeds", "the limit of", limit) if(is.table(data) && limit < sum(data) ){ print(limit.msg); return("sorry, no graphical output") } if(!is.table(data) && ( is.matrix(data) | is.data.frame(data) ) && limit < nrow(data) ){ print(limit.msg); return("sorry, no graphical output") } if(!is.table(data) && !( is.matrix(data) | is.data.frame(data) )&& limit < sum(data) ){ print(limit.msg); return("sorry, no graphical output") } ##:check arguments of [[iconplot]]## #:18 #128: ##check arguments of [[iconplot]]:## if(1 == length(lab.n.max)) lab.n.max <- c(lab.n.max, 30) #add number of margin level names if(2 == length(lab.n.max)) lab.n.max <- c(lab.n.max, 20) #add number of legend labels if(missing(lab.legend) && 3 == length(lab.parallel)){ lab.legend <- c("cols", "rows")[2] } # to be compatible to older versions lab.parallel <- rep(lab.parallel, 2)[1:2] ##:check arguments of [[iconplot]]## #:128 #133: ##check arguments of [[iconplot]]:## if( is.numeric(lab.legend) ){ lab.legend <- max(1, min(5, lab.legend[1])) lab.legend <- c("cols","rows","skewed","horizontal","vertical")[lab.legend] } ##:check arguments of [[iconplot]]## #:133 #154: ##check arguments of [[iconplot]]:## if( missing(data) ){ #152: ##show arguments of [[iconplot]]:## h <- noquote(cbind("arg names" = names(formals(iconplot)), "default values" = as.character(formals(iconplot)))) h <- substring(h[ seq(h[,1]), ], 1, 56); rownames(h) <- rep(" ",nrow(h)) arg.list <- h # old<-options(width = 95) # print(noquote(cbind("\\\\ \\tt", arg.list[,1], "&", arg.list[,2]))) # options(old) ##:show arguments of [[iconplot]]## #:152 return(arg.list) } data.call <- deparse(substitute(data)) if(!missing(grp.color)){ grp.color.call <- as.character(substitute(grp.color)) ## cat("grp.color.call:", grp.color.call) grp.color <- as.character(grp.color.call) ## cat("grp.color", grp.color) } else grp.color.call <- NULL if(!missing(grp.icon )){ grp.icon <- as.character(substitute(grp.icon)) } arguments <- c( # data = deparse(substitute(data)), grp.xy = as.character(grp.xy), # colors = as.character(colors), grp.color = as.character(grp.color.call), # icons = as.character(icons), pa.space = paste(collapse = ",",as.character(panel.space.factor)), panel.adj = panel.adjust, stacks = paste(collapse = ",", c(icon.stack.type, c("hori","verti")[2-icon.horizontal])), cex = icon.cex, asp = icon.aspect, space = paste(icon.space.factor, collapse=","), panel.margin = paste(panel.margin, collapse=","), labels = paste(collapse = ",", c(lab.side, c("parallel", "upright")[2-lab.parallel[1]], c("parallel", "upright")[2-lab.parallel[2]])) ) arguments <- paste(names(arguments), as.vector(arguments), sep = " : ") if((length(arguments) %% 2) == 1) arguments <- c(arguments, " ") arguments <- matrix(arguments, ncol = 2, byrow = !TRUE) arguments <- paste( arguments[,1], arguments[,2], sep = " // ") arguments <- paste( arguments, collapse = "\n") if(verbose) cat("=======\n", arguments, "=======\n") ##:check arguments of [[iconplot]]## #:154 #14: ##define local functions:## #13: ##define find.xy.groupings:## find.xy.groupings <- function(groupings, verbose = FALSE){ g.o <- grps <- groupings if(verbose){ cat("----- input:", as.character(groupings)) } if(is.character(grps) && 0 < length(names(grps)) && all(names(grps) %in% c("x","y")) ){ # convert named char vec to list x <- unlist(strsplit(grps["x"], "[+*]")); if(any(is.na(x))) x <- "0" y <- unlist(strsplit(grps["y"], "[+*]")); if(any(is.na(y))) y <- "0" grps <- list( x = as.vector(x), y = as.vector(y) ) grps <- lapply( grps, function(x) gsub(" ","",x)) } if(is.list(grps)){ # argument is in the desired form if( 0 == length(grps) || ! all(names(grps) %in% c("x","y")) ){ print(paste("no correct definition of groups:",g.o)); return(NULL) } else { "ok" } } else { # cases: formal maybe as character if( is.character(grps) ){ # formal in char form if( 0 == length(grep("[~]", grps))){ print(paste("no correct formula:",g.o)); return(NULL) } grps <- unlist(strsplit(grps, "[~]")) grps[ grps == "" ] <- "0" if( 2 == length(grps)){ grps <- c("~", grps) } else { print(paste("no correct formula:",g.o)); return(NULL) } } grps <- gsub(" ","", as.character( grps )) grps <- if( length(grps) == 2 ) c(grps[2], "0") else grps[3:2]; grps <- strsplit(grps, "[+*]"); names(grps) <- c("x", "y") } if(verbose){ cat("----- result:"); print(grps) } grps } #; find.xy.groupings("0 ~ Mean+Penalty+Region")# "0~asdfa+br") ##:define find.xy.groupings## #:13 ##:define local functions## #:14 #16: ##define local functions:## expand.table.short <- function(x){ combinations <- expand.grid(dimnames(x)); num <- as.vector( x ) # if(0 == length(num)||any(is.na(num))||any(num<0)||all(round(num)==0)) # return(NULL) combinations <- combinations[rep(seq(along = num), num),, drop=FALSE] rownames(combinations) <- seq( nrow(combinations) ) combinations } # ; expand.table.short(as.table(12)) ##:define local functions## #:16 #43: ##define local functions:## #280: ##define [[transform.color.to.rgb.integer()]]:## transform.color.to.rgb.integer <- function(x, to = c("#rrggbb", "rgb"), debug = FALSE){ dim.x <- n <- length(x) # if(is.matrix(x)) rasterImage(t(x), 5, 5, 15, 15) if( 0 < length( h <- dim(x) ) ) dim.x <- h if( is.numeric(x[1]) ){ if( all( x %in% 0:8 ) ){ from <- "color.code" # col = 3 xx <- t(col2rgb(palette("default")[x])) } else { if( all(x <= 1) ){ # from <- "rgb.decimal" # col = c(0.3, 0.5, 0.6 ) xx <- floor( x * 255 ) } else { if( any( 1 < x ) & all(x == floor(x)) ){ from <- "rgb.integer" # col = c( 13, 25, 254 ) xx <- x } } } } else { if( is.character(x[1]) ){ from <- "color.name.or.char" # col = "red" or col = "#1304FF" xx <- t(col2rgb(x)) # t? } } if( (3 * n) == length(xx) ){ xx <- array( xx, c(rev(dim.x), 3)) if( length(dim(xx)) == 3 ) xx <- aperm(xx, c(2,1,3)) } if(debug) cat("dim.x", dim.x, "from = ", from, "::", x, "->", (xx)) xx } ##:define [[transform.color.to.rgb.integer()]]## #:280 ##:define local functions## #:43 #47: ##define local functions:## find.n.intervals <- function(ints, props = FALSE, vmin = 0, vmax = 1, panel.space.factor = 0.1){ # print(ints); print(props) # 161212 ints <- pmax(ints, .03 * max(1, sum(ints))) # limit for security .1* #161212 props <- if( 0 < props ) ints^props else rep(1, ints[1]) # props is # a number of intervals or a vector of proportions of the desired sizes cum.rel.dist <- cumsum(props / sum(props)) n <- length(props); space <- (vmax - vmin) p.margins <- (space / n) * panel.space.factor / 2 space <- space - 2 * n * p.margins lims <- c(vmin, vmin + cum.rel.dist * space + 2 * p.margins * ( 1:n ) ) mids <- 0.5 * (lims[-1] + lims[-(n+1)]); sizes <- diff(lims) mins <- lims[-(n+1)] + p.margins; maxs <- lims[ -1 ] - p.margins return(cbind(mins = mins, maxs = maxs, mids = mids, p.margins = p.margins, sizes = sizes, lo.limit = lims[-(n+1)], up.limit = lims[-1])) } #; find.n.intervals(1, FALSE, 1, 2, .9) if(!exists("raster.to.greys")){ #233: ##define [[raster.to.greys()]]:## raster.to.greys <- function(pic, grey.levels = c(0.05, 0.95), # 2 :: black + white reduce = TRUE, n.icons = 1){ #234: ##prepare [[mat]] for coloring:## d.mat <- dim(pic) if( 3 == length(d.mat) ){ mat <- apply(pic, 1:2, sum) ; dim(mat) <- d.mat <- d.mat[1:2] } else { mat <- as.matrix(pic); d.mat <- dim(mat) mat <- col2rgb(mat, 7 < nchar(mat[1])) mat <- colMeans(mat) } mat <- mat/max(1,mat) # /255 # shifted from else statements #180417 mat <- matrix(mat, ncol = d.mat[2]) ##:prepare [[mat]] for coloring## #:234 if( 2 == length(grey.levels) ){ limits <- grey.levels #241: ##find levels if the two [[limits]] are in (0,1):## #235: ##reduce size of [[mat]]:## if(reduce > 0 ){ if(is.logical(reduce)) { # pixel.per.pic.plan <- width.of.picture * pixel.per.mm / n.icons^0.5 pixel.per.pic <- 120 * 5 / n.icons^0.5 # reduction.factor <- pixel.per.pic.real / pixel.per.pic.plan reduce <- ceiling( max(d.mat) / pixel.per.pic ) } if(reduce > 1){ dim.mat.new <- reduce * (floor(d.mat/reduce)) mat.new <- mat[1:dim.mat.new[1], 1:dim.mat.new[2]] mat.new <- array(mat.new, rbind(reduce, dim.mat.new/reduce)) mat.new <- apply(mat.new, c(2,4), mean) d.mat <- dim(mat.new); mat <- pmin(1,mat.new); dim(mat) <- d.mat } } ##:reduce size of [[mat]]## #:235 # generate matrix of levels levs <- 1 + (limits[1] < mat) + (limits[2] < mat) dim(levs) <- d.mat ##:find levels if the two [[limits]] are in (0,1)## #:241 return(levs) } #235: ##reduce size of [[mat]]:## if(reduce > 0 ){ if(is.logical(reduce)) { # pixel.per.pic.plan <- width.of.picture * pixel.per.mm / n.icons^0.5 pixel.per.pic <- 120 * 5 / n.icons^0.5 # reduction.factor <- pixel.per.pic.real / pixel.per.pic.plan reduce <- ceiling( max(d.mat) / pixel.per.pic ) } if(reduce > 1){ dim.mat.new <- reduce * (floor(d.mat/reduce)) mat.new <- mat[1:dim.mat.new[1], 1:dim.mat.new[2]] mat.new <- array(mat.new, rbind(reduce, dim.mat.new/reduce)) mat.new <- apply(mat.new, c(2,4), mean) d.mat <- dim(mat.new); mat <- pmin(1,mat.new); dim(mat) <- d.mat } } ##:reduce size of [[mat]]## #:235 if( 1 == length(grey.levels) && 0 == (grey.levels %% 1) ){ # number of levels given # find greys by number of greys n.greys <- max(round(grey.levels), 2) mat <- unclass(mat); min.mat <- min(mat); max.mat <- max(mat) grey.levels <- seq(min.mat, max.mat, length = n.greys + 1)[-(n.greys+1)][-1] p <- c(min.mat, mat[ min.mat < mat & mat < max.mat], max.mat ) greys <- c(min.mat, quantile(p, grey.levels)) greys <- unique(greys[ !is.na(greys) ]) } else { # find greys by quantiles of grey rates grey.levels <- unique( pmin(1, pmax(0, sort(c(0, grey.levels, 1)))) ) greys <- unique( quantile(mat, grey.levels) ) if( (h <- length(greys)) > 2 ) greys <- greys[ -h ] } # generate matrix of levels: levs <- sapply( mat, function(x) sum( x >= greys ) ) if(max(levs) == 2) levs <- levs + 1 # if 2 cols only use one color and white if( 2 == length(h <- unique(levs)) ) levs <- 2 + ( levs == max(h) ) dim(levs) <- d.mat; return(levs) } ##:define [[raster.to.greys()]]## #:233 } ##:define local functions## #:47 #71: ##define local functions:## size.usr.to.mm <- function(size, horizontal = TRUE){ # transforms x- or y-length to mm # usr <- par()$usr; pin <- par()$pin # exists globally usr <- usr[(3:4) - 2 * horizontal] mm <- size / (usr[2]-usr[1]) * pin[2 - horizontal] * 25.4 } size.mm.to.usr <- function(mm, horizontal = TRUE){ # transforms mm to x- or y-length # usr <- par()$usr; pin <- par()$pin # exists globally usr <- usr[(3:4) - 2 * horizontal] size <- mm * (usr[2]-usr[1]) / pin[2 - horizontal] / 25.4 } ##:define local functions## #:71 #86: ##define local functions:## place.icons <- function( job, dm.of.job , icon.stack.type = c("l", "b", "r", "t")[1:2], icon.stack.len , verbose = TRUE, frame = FALSE ){ n.items <- nrow(dm.of.job) # -------------- find number of icons # find x and y values of icons if( !any(c("t", "b") %in% icon.stack.type)){ icon.stack.type <- c("b", icon.stack.type) } if( !any(c("r", "l") %in% icon.stack.type)){ icon.stack.type <- c( "l", icon.stack.type) } if(icon.horizontal){ # ------------------------- icon.horizontal stacks # x : fill from left or right x <- ((0:(n.items-1)) %% icon.stack.len) * dx.pic.area if("l" %in% icon.stack.type){ x <- job[,"xmins"] + x; xfac <- 1 } else { x <- job[,"xmaxs"] - x; xfac <- -1 } # y : fill from top or bottom y <- floor((0:(n.items-1)) / icon.stack.len) * dy.pic.area if("b" %in% icon.stack.type){ y <- job[,"ymins"] + y; yfac <- 1 } else { y <- job[,"ymaxs"] - y; yfac <- -1 } } else { # -------------------------------- vertical stacks # y : fill from top or bottom y <- ((0:(n.items-1)) %% icon.stack.len) * dy.pic.area if("b" %in% icon.stack.type){ y <- job[,"ymins"] + y; yfac <- 1 } else { y <- job[,"ymaxs"] - y; yfac <- -1 } # x : fill from left or right x <- floor((0:(n.items-1)) / icon.stack.len) * dx.pic.area if("l" %in% icon.stack.type){ x <- job[,"xmins"] + x; xfac <- 1 } else { x <- job[,"xmaxs"] - x; xfac <- -1 } } if( verbose ){ #88: ##debugging statements for [[place.icons()]]:## show.frame <- TRUE; show.number <- TRUE # - for debugging if(show.frame) rect(job[,"xmins"], job[,"ymins"], job[,"xmaxs"], job[,"ymaxs"]) if(show.number) text(job[,"xmaxs"], job[,"ymins"], as.character(n.items), adj = c(1, 0), col = "blue", cex = 1) if(show.number) text(job[,"xmins"], job[,"ymins"], paste("j:", job[,".job.no"]), adj = c(0, 0), col = "blue", cex = 1) ##:debugging statements for [[place.icons()]]## #:88 } if(frame) rect(job[,"xmins"], job[,"ymins"], job[,"xmaxs"], job[,"ymaxs"]) x <- cbind(x, x + xfac * dx.pic); y <- cbind(y, y + yfac * dy.pic) #87: ##modify because of fractional part of [[place.icons]]:## x0 <- pmin(x[,1], x[,2]); x1 <- pmax(x[,1], x[,2]) y0 <- pmin(y[,1], y[,2]); y1 <- pmax(y[,1], y[,2]) f <- dm.of.job[, ".fraction"]^0.5 if( !icon.horizontal & "b" %in% icon.stack.type){ if("s" %in% icon.stack.type){ ### || is.matrix(icons[[1]])){ y1 <- y0 + (y1 - y0) * f # "s"hrinking rectangle if("r" %in% icon.stack.type) x0 <- x1 - (x1 - x0) * f else x1 <- x0 + (x1 - x0) * f } else { y1 <- y0 + (y1 - y0) * f^2 } } if( !icon.horizontal & "t" %in% icon.stack.type){ if("s" %in% icon.stack.type){ ### || is.matrix(icons[[1]])){ y0 <- y1 - (y1 - y0) * f # "s"hrinking rectangle if("r" %in% icon.stack.type) x0 <- x1 - (x1 - x0) * f else x1 <- x0 + (x1 - x0) * f } else { y0 <- y1 - (y1 - y0) * f^2 } } if( icon.horizontal & "l" %in% icon.stack.type){ # "s"hrinking rectangle if("s" %in% icon.stack.type){ ### || is.matrix(icons[[1]])){ x1 <- x0 + (x1 - x0) * f if("t" %in% icon.stack.type) y0 <- y1 - (y1 - y0) * f else y1 <- y0 + (y1 - y0) * f } else { x1 <- x0 + (x1 - x0) * f^2 } } if( icon.horizontal & "r" %in% icon.stack.type){ # "s"hrinking rectangle if("s" %in% icon.stack.type){ ### || is.matrix(icons[[1]])){ x0 <- x1 - (x1 - x0) * f if("t" %in% icon.stack.type) y0 <- y1 - (y1 - y0) * f else y1 <- y0 + (y1 - y0) * f } else { x0 <- x1 - (x1 - x0) * f^2 } } ##:modify because of fractional part of [[place.icons]]## #:87 return(data.frame(.x0 = x0, .y0 = y0, .x1 = x1, .y1 = y1, .color = dm.of.job[, ".color"], .pic = dm.of.job[, ".icon"])) } ##:define local functions## #:86 #109: ##define local functions:## #238: ##define [[greys.to.col.pic()]]:## greys.to.col.pic <- function(levs, col, invert = FALSE, set.black.and.white = FALSE, simple = FALSE){ d.mat <- dim(levs); n <- max(levs) #; cat("simple", simple) if(simple){ #242: ##find pic if [[simple]] is set:## # set colors based on col colors <- c("#000000", col, "#FFFFFF") # build pictogram pic <- matrix(colors[levs], ncol = d.mat[2]) ##:find pic if [[simple]] is set## #:242 return(as.raster(pic)) } #; cat("greys.to.col.pic") # inversion of levels if(invert) levs <- n + 1 - levs # find colors based on col rgb.col1 <- col2rgb(col)/255; rgb.col2 <- 1 - rgb.col1 n1 <- round(n/2) ; n2 <- n - n1 # n1 <- round(mean(rgb.col1) * n) f1 <- ((1:n1) - 1/2)/n1; f2 <- ((n2:1) - 1/2)/n2 rgb.col1 <- cbind(f1 * rgb.col1[1], f1 * rgb.col1[2], f1 * rgb.col1[3]) rgb.col2 <- 1 - cbind(f2 * rgb.col2[1], f2 * rgb.col2[2], f2 * rgb.col2[3]) rgb.col <- rbind(rgb.col1, rgb.col2) colors <- rgb(rgb.col) if(0 < set.black.and.white){ if(set.black.and.white <= 1) colors[1] <- "#000000" if(1 <= set.black.and.white) colors[length(colors)] <- "#FFFFFF" } ; # build pictogram pic <- matrix(colors[levs], ncol = d.mat[2]); as.raster(pic) } ##:define [[greys.to.col.pic()]]## #:238 ##:define local functions## #:109 #141: ##define local functions:## find.xlab.coor <- function(labs, y0, skip = 0){ # global variables: cin, lab.legend, x.per.row, dx, dy, x0 idx <- which( lab.legend == c("rows", "skewed", "horizontal")) cos.fac <- c(1, 0.7071, 0)[idx]^2 width.labs <- (max( strwidth(labs, cex = lab.cex) ) + dx/2) * cos.fac if(idx == 2) width.labs <- (strwidth("MM", cex = lab.cex) + dx/2) * cos.fac width.labs <- rep(width.labs, length(labs) ) lab.idx <- seq(n <- length(labs)) - 1 xr0 <- x0 + ( lab.idx * 1.2 * dx + c(0, cumsum(width.labs))[-(n+1)] ) / (1 + skip) xr1 <- xr0 + dx; yr1 <- y0 + dy xlab <- xr0 + 1.5 * x.per.row xlab <- xr0 + c(-0.7071 * dx, dx/2, dx)[idx] xlab <- xlab + 2 * dx * cos.fac # x.per.row * (1 - cos.fac) ylab <- y0 + c(0, 0.6, 0.9)[idx] * y.per.row # horizontal old: 0.8 instead of 0.9 if( missing(y0) ) { usr <- par()$usr; y0 <- usr[3] - 0.1 * diff(usr[3:4]) } cbind(xr0 = xr0, yr0 = y0, xr1 = xr1, yr1 = yr1, xlab = xlab, ylab = ylab) } ##:define local functions## #:141 #153: ##define local functions:## show.obj <- function(x){ name <- deparse(substitute(x)) if(is.list(x) || is.matrix(x)) { cat(name,":"); print(x) } else { cat(name,":", x) } } ##:define local functions## #:153 #361: ##define local functions:## #353: ##define [[call.icon.generator()]]:## call.icon.generator <- function(icons, xy = c(0,0), dxy = c(1, 0.5)[1], color = "red", pic.args = 50, ...){ # check structure of xy and dxy xy <- xy[1:2]; dxy <- c(dxy, 1)[1:2] if(is.character(icons)){ # case: name of an internal icon generator #354: ##look for internal generator in [[call.icon.generator()]]:## #315: ##define [[BI()]]:## BI <- function(){ result <- list() res <- cbind( x = c(0, 25, 25, 0), y = c(0, 0, 61, 61), color = NA) class(res) <- "polygon" result <- c(result, list(res)) res <- cbind( x = c(72, 57, 57, 72), y = c(0, 0, 61, 61), color = NA) class(res) <- "polygon" result <- c(result, list(res)) res <- cbind( x = c( 0, 72, 72, 56, 56, 44, 44, 29, 29, 16, 16, 0), y = c(72, 72, 100, 100, 87, 87, 100, 100, 87, 87, 100, 100), color = NA) class(res) <- "polygon" result <- c(result, list(res)) res <- rbind( c(19.0, 43, 24, 43, lwd.mm = 36, color = NA), c(19.0, 18, 30.5, 18, lwd.mm = 36, color = NA), c(12, 43, 21, 43, lwd.mm = 11, 0), c(12, 18, 27, 18, lwd.mm = 11, 0) ) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments" result <- c(result, list(res)) res <- cbind( x = c(0, 15, 15, 0), y = c(0, 0, 61, 61), color = NA) class(res) <- "polygon" result <- c(result, list(res)) result } ##:define [[BI()]]## #:315 #318: ##define [[TL()]]:## TL <- function(L = c("AB", "DT", "PW", "NV", "Hello")[1], t.cex.mm = 10, startx, starty, delx, dely, Lcolors, pointx = 90, pointy = 90, pointsize = 8, pointcolor = "red" ){ # L letters to be used # t.cex.mm letter size: a 'W' will have a width of 'text.cex.mm' mm # startx, starty x coordinate of first letter in mm # delx, dely shift in x and in y between letters in mm # Lcolors colors of the letters to be used # pointx, pointy x and y coordinate of point # pointsize size of the point # pointcolor color of the point if(is.factor(L) || is.numeric(L) ) L <- as.character(L) L <- unlist(strsplit(L,"")) n <- length(L) check.num <- function(x, n = 2){ if(is.factor(x)) x <- as.character(x); x <- as.numeric(x); x <- rep(x, n)[1:n] } if(missing(startx)) startx <- 50 / n; if(missing(delx)) delx <- 100 / n if(missing(starty)) starty <- 50 / n; if(missing(dely)) dely <- 100 / n if(missing(t.cex.mm)) t.cex.mm <- 100 / n if(missing(pointx)) pointx <- 100 - min(60, 5 + n * 2.5) if(missing(pointy)){ pointy <- min(40, 5 + n * 2.5) if(starty[1] > 50) pointy <- 100 - pointy } if(missing(pointsize)) pointsize <- min(40, 10 + n * 2.5) if(missing(Lcolors)) Lcolors <- 1; Lcolors <- rep(Lcolors, n)[1:n] startx <- check.num(startx, n); starty <- check.num(starty, n) delx <- cumsum(c(0, check.num(delx, n - 1))); dely <- cumsum(c(0, check.num(dely, n - 1))) startx <- (startx + delx) %% 100; starty <- (starty + dely) %% 100 result <- list() res <- data.frame( x = c(0, 0, 100, 100), y = c(0, 100, 100, 0), color = NA) class(res) <- c( class(res), "polygon"); result <- c(result, list(res)) # box of the icon res <- data.frame(x0 = pointx, y0 = pointy, x1 = pointx, y1 = pointy, lwd.mm = pointsize, color = pointcolor) class(res) <- c( class(res), "segments"); result <- c(result, list(res)) # special point res <- data.frame(x = startx, y = starty, L = L, text.cex.mm = t.cex.mm, color = Lcolors) class(res) <- c( class(res), "text"); result <- c(result, list(res)) # letters result } # ; show.icon.design(TL) #; TL() ##:define [[TL()]]## #:318 #325: ##define [[cross.simple()]]:## cross.simple <- function(){ # print("in cross") res <- rbind( c( 05, 05, 95, 95, lwd.mm = 10, NA), c( 05, 95, 95, 05, lwd.mm = 10, NA), c( 50, 50, 50, 50, lwd.mm = 30, 2) ) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } ##:define [[cross.simple()]]## #:325 #326: ##define [[cross()]]:## cross <- function(z = 0.30){ # print("in cross") if(is.factor(z)){ z <- as.numeric(z); z <- 0.5 * z / length(levels(z)) } z <- z * 100; eps <- 1 # *0.7 z <- min(100, max(0, z)) result <- list() res <- cbind( x = c(z, 100 - z, 100 - z, z), y = c(0, 0, 100 - z, 100 - z), color = 5) class(res) <- "polygon" result <- c(result, list(res)) res <- rbind( c(eps*c( 5, 5, 95, 95, lwd.mm = 10), NA), c(eps*c( 5, 95, 95, 5, lwd.mm = 10), NA), c(eps*c( 50, 50, 50, 50, lwd.mm = 30), 3) ) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments" result <- c(result, list(res)) result } ##:define [[cross()]]## #:326 #327: ##define [[circle.simple()]]:## circle.simple <- function(){ # print("in circle.simple") res <- rbind( c( 50, 50, 50, 50, lwd.mm = 100, NA)) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } ##:define [[circle.simple()]]## #:327 #328: ##define [[circle()]]:## circle <- function(whole = 0.50){ # print("in circle") if(is.factor(whole)){ whole <- as.numeric(whole); whole <- 0.50 * whole / length(levels(whole)) } whole <- min(1, whole) res <- rbind( c( 50, 50, 50, 50, lwd.mm = 100, NA), c( 50, 50, 50, 50, lwd.mm = whole * 100, 0)) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } ##:define [[circle()]]## #:328 #331: ##define [[car.simple()]]:## car.simple <- function(){ # print("in cross") res0 <- cbind(t(cbind( 0.6* c( 05, 05, 95, 95), 0.6* c( 05, 95, 95, 05), 0.6* c( 50, 50, 50, 50)) + c(2.7,2.2)) , lwd.mm = c(10,10,30), color = c(2,5,7) ) colnames(res0) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res0) <- "segments" res1 <- cbind( x = c(10, 90, 85, 75, 70, 45, 40, 20, 10), # car polygon y = c(10, 10, 30, 30, 45, 45, 30, 30, 10)) class(res1) <- "polygon" res2 <- cbind(t(cbind( 0.3* c( 05, 05, 95, 95), 0.3* c( 05, 95, 95, 05), 0.3* c( 50, 50, 50, 50)) + c(43, 10)) , lwd.mm = 0.3 * c(10,10,30), # cross on door color = c(4,6,2) ) colnames(res2) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res2) <- "segments" res3 <- rbind( c(25, 10, 25, 10, 15, 1), c(75, 10, 75, 10, 15, 1)) # wheel colnames(res3) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res3) <- "segments" list(res1, res1, res2, res3) } # ; car.simple() ##:define [[car.simple()]]## #:331 #332: ##define [[car()]]:## car <- function(width = .5, height = .0){ # print("in cross") width <- (width * 2 + 2) / 3.2; height <- (height * 5.0 + 1) / 3.2 x <- c(-40, 40, 35, 25, 20,-05,-10,-30, -40) * width + 50 y <- c(-20, -20, 0, 5, 20, 20, 5, 0, -20) * height + 50 wheel.size <- height * 10 + 5 ymin <- min(y); xmin <- min(x); xmax <- max(x) res1 <- cbind( x, y) # car polygon class(res1) <- "polygon" res2 <- rbind( c(h <- 0.75*xmin + 0.25*xmax, ymin, h, ymin, wheel.size, 1), c(100 - h, ymin, 100 - h, ymin, wheel.size, 1)) # wheel colnames(res2) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res2) <- "segments"; list(res1, res2) } # ; car() ##:define [[car()]]## #:332 #334: ##define [[nabla()]]:## nabla <- function(){ res <- rbind( c( 05, 95, 50, 05, 10), c( 50, 05, 95, 95, 10), c( 95, 95, 05, 95, 10) ); class(res) <- "segments" colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm"); res } # ; nabla() ##:define [[nabla()]]## #:334 #363: ##define [[walkman()]]:## walkman <- function( balpha = 70, col = NA, ll1alpha = -80, ll2alpha = -120, lr1alpha = -45, lr2alpha = -100, al1alpha = -170, al2alpha = -100, ar1alpha = -60, ar2alpha = +20 ){ # generates a walking man in a device of pin-sizes: 10cm x 10 cm and lwd = 10 mm # col <- sample(1:10, size = 1) xy <- c(0,0); dxq <- 10; dyq <- 10; size <- 10; lwd <- 10.5; lw.unit <- 1 segs.set <- NULL; col.set <- NULL scale.xy <- 2.54 balpha <- balpha / 180 * pi ll1alpha <- ll1alpha / 180 * pi; ll2alpha <- ll2alpha / 180 * pi lr1alpha <- lr1alpha / 180 * pi; lr2alpha <- lr2alpha / 180 * pi al1alpha <- al1alpha / 180 * pi; al2alpha <- al2alpha / 180 * pi ar1alpha <- ar1alpha / 180 * pi; ar2alpha <- ar2alpha / 180 * pi #364: ##define body of [[walkman]]:## x <- c(cos(balpha), sin(balpha)) * scale.xy ba <- c(0,0); be <- ba + x bal <- lwd * lw.unit * 1.7; bac <- col seg.mat <- cbind(a=ba[1], b=ba[2], c=be[1], d=be[2], e=bal) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, bac) ##:define body of [[walkman]]## #:364 #366: ##define head of [[walkman]]:## h <- be + ( be - ba) * .75; hl <- lwd * lw.unit * 1.6; hc <- col seg.mat <- cbind(a=h[1], b=h[2], c=h[1], d=h[2], e=hl) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, hc) ##:define head of [[walkman]]## #:366 #365: ##define legs of [[walkman]]:## lbecken <- 0.19; llength <- 1; ll <- lwd * lw.unit * 0.85 ll1a <- ba + c(cos(balpha+pi/2), sin(balpha+pi/2)) * scale.xy * lbecken ll1e <- ll1a + c(cos(ll1alpha), sin(ll1alpha)) * scale.xy * llength lr1a <- ba + c(cos(balpha-pi/2), sin(balpha-pi/2)) * scale.xy * lbecken lr1e <- lr1a + c(cos(lr1alpha), sin(lr1alpha)) * scale.xy * llength ll2a <- ll1e ll2e <- ll2a + c(cos(ll2alpha), sin(ll2alpha)) * scale.xy * llength lr2a <- lr1e lr2e <- lr2a + c(cos(lr2alpha), sin(lr2alpha)) * scale.xy * llength l <- rbind(cbind(ll1a[1], ll1a[2], ll1e[1], ll1e[2]) ,cbind(lr1a[1], lr1a[2], lr1e[1], lr1e[2]) ,cbind(ll2a[1], ll2a[2], ll2e[1], ll2e[2]) ,cbind(lr2a[1], lr2a[2], lr2e[1], lr2e[2]) ) seg.mat <- cbind(l, e=ll) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, hc) ##:define legs of [[walkman]]## #:365 #367: ##define arms of [[walkman]]:## aschulter <- 0.19; alength <- 0.7; al <- lwd * lw.unit * 0.85 al1a <- be + c(cos(balpha+pi/2), sin(balpha+pi/2)) * scale.xy * aschulter al1e <- al1a + c(cos(al1alpha), sin(al1alpha)) * scale.xy * alength ar1a <- be + c(cos(balpha-pi/2), sin(balpha-pi/2)) * scale.xy * aschulter ar1e <- ar1a + c(cos(ar1alpha), sin(ar1alpha)) * scale.xy * alength al2a <- al1e al2e <- al2a + c(cos(al2alpha), sin(al2alpha)) * scale.xy * alength ar2a <- ar1e ar2e <- ar2a + c(cos(ar2alpha), sin(ar2alpha)) * scale.xy * alength a <- rbind( cbind(al1a[1], al1a[2], al1e[1], al1e[2]), cbind(ar1a[1], ar1a[2], ar1e[1], ar1e[2]), cbind(al2a[1], al2a[2], al2e[1], al2e[2]), cbind(ar2a[1], ar2a[2], ar2e[1], ar2e[2]) ) seg.mat <- cbind(a, e=al) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, hc) ##:define arms of [[walkman]]## #:367 segs.set[, 1:4] <- segs.set[, 1:4] + 5 # shift to the center segs.set <- cbind(as.data.frame(segs.set), f = col) # set color class(segs.set) <- c(class(segs.set), "segments") segs.set[, 1:4] <- segs.set[, 1:4] * 10 colnames(segs.set) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") return(segs.set) } #; show.icon.design(walkman, balpha = 90) # ; # plot(1:10, type = "n", axes = FALSE, xlab = "", ylab = "") # puticon(5, 5.5, icon = walkman, icon.cex = 160, balpha = 80) # walkman() ##:define [[walkman()]]## #:363 #371: ##define [[smiley.blueeye()]]:## smiley.blueeye <- function(){ # output: x0, y0, x1, y1, lwd, col circle <- function(x0 = 1, y0 = 1, a = 3, lwd.mm = 5, # a == radius time.0 = 0, time.1 = 12, n = 30){ # function to draw a part of a circle line alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd.mm) } res <- NULL # x0 y0 radius lwd.mm res <- rbind( res, cbind(circle(50, 49.5, 23, 50), col.code = NA) ) # face res <- rbind( res, cbind( 50, 45, 50, 50, 15, 1) ) # nose res <- rbind( res, cbind(circle(50, 49.5, 47.5, 5), 1) ) # margin res <- rbind( res, cbind(circle(35, 65, 2.5, 10), 4) ) # eye left res <- rbind( res, cbind(circle(65, 65, 2.5, 10), 1) ) # eye right res <- rbind( res, cbind(circle(50, 50, 27, 8, 7.50, 4.50), 3) ) # mouth colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } # ; show.icon.design(smiley.blueeye) # ; smiley.blueeye() ##:define [[smiley.blueeye()]]## #:371 #372: ##define [[smiley.normal()]]:## smiley.normal <- function(){ # output: x0, y0, x1, y1, lwd, col circle <- function(x0 = 1, y0 = 1, a = 3, lwd.mm = 5, # a = radius time.0 = 0, time.1 = 12, n = 30){ # function to draw a part of a circle line alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd.mm) } res <- NULL # res <- rbind( res, cbind( 50, 45, 50, 50, 15, 1) ) # nose res <- rbind( res, cbind(circle(50, 49.5, 23, 50), col.code = NA) ) # face res <- rbind( res, cbind(circle(50, 49.5, 47.5, 5), 1) ) # rand res <- rbind( res, cbind(circle(35, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(65, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(50, 50, 27, 8, 7.50, 4.50),1) ) # mouth colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } #; show.icon.design(smiley.normal) ##:define [[smiley.normal()]]## #:372 #377: ##define [[smiley()]]:## smiley <- function(smile = 0.8){ if(is.factor(smile)) smile <- as.numeric(smile) / length(levels(smile)) circle <- function(x0 = 1, y0 = 1, a = 3, lwd = 5, time.0 = 0, time.1 = 12, n = 60){ alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd) } res <- NULL # res <- rbind( res, cbind(circle(50, 49.5,23, 50), col.code = NA) ) # face # res <- rbind( res, cbind(circle(50, 49.5,47, 60), 1) ) # rand res <- rbind( res, cbind( 50, 50, 50, 50, 100, 1 )) # face+rand res <- rbind( res, cbind (50, 50, 50, 50, 88, NA)) # face res <- rbind( res, cbind(circle( 35, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle( 65, 60.5, 3.0, 10), 1) ) # eye if(is.na(smile)){ res <- rbind( res, cbind(circle(50, 50, 27, 7.5, 7.50, 4.50),1) ) # mouth } else { # x0 y0 a lwd time.0 time.1 # hs <- circle(50,50, 27, 10, 7.5, 4.5) # mouth laughing # hn <- circle(50,10, 27, 10, 10.5, 13.5) # mouth not laughing hs <- circle( 50, 40, 17, 10, 8.5, 3.5) # mouth laughing hn <- circle( 50, 20, 17, 10, 9.5, 14.5) # mouth not laughing s <- smile; n <- 1 - s h <- cbind( hs[,1], s*hs[,2]+n*hn[,2], hs[,3], s*hs[,4]+n*hn[,4], hs[,5]) res <- rbind( res, cbind(h, 1) ) # mouth } class(res) <- "segments"; res return(res) } ##:define [[smiley()]]## #:377 #373: ##define [[smiley.sad()]]:## smiley.sad <- function(){ # output: x0, y0, x1, y1, lwd, col circle <- function(x0 = 1, y0 = 1, a = 3, lwd.mm = 5, time.0 = 0, time.1 = 12, n = 30){ # function to draw a part of a circle line alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd.mm) } res <- NULL #; res <- rbind( res, cbind(50, 45, 50, 50, 15, 1) ) # nose res <- rbind( res, cbind(circle(50, 49.5, 23, 50), col.code = NA) ) # face res <- rbind( res, cbind(circle(50, 49.5, 47.5, 5), 1) ) # rand res <- rbind( res, cbind(circle(35, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(65, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(50, 10, 27, 8, 10.50, 13.50),1) ) # mouth colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } # ; show.icon.design(smiley.sad) ##:define [[smiley.sad()]]## #:373 #381: ##define [[mazz.man()]]:## mazz.man <- function(Mean = 100, Penalty = 1, Region = "region:", expo = 1/(1:3)[3], Mean.max = 107, Mean.half = 90, Penalty.max = 5, Penalty.min = 0, x.text = 70, y.text = 10, text.cex.mm = 10){ # bag.size %in% [0,1] # idea of the icon: Adriano Pareto, Matteo Mazziotta Mean.min <- Mean.half - (Mean.max - Mean.half) / ((h <- 2^(1/expo)) - 1) Mean.min <- min(Mean.min, Mean) fac <- 0.95 * ((h * (Mean - Mean.min)) / Mean.max) ^ expo bag.size <- 0.80 * ((Penalty - Penalty.min) / Penalty.max )^expo /2 res <- rbind( c(50, 77.5*fac + 5, 50, 77.5 *fac + 5), #head c(50, 35 *fac + 5, 50, 60 *fac + 5), #body c(50, 32 *fac + 5, 50, 0 *fac + 5), #leg in white c(50, 32 *fac + 5, 50, 0 *fac + 5), #leg c(50 + 30*fac, 55 *fac + 5, 50 + 25*fac, 75 *fac + 5), #tape2 c(50 - 20*fac, 65 *fac + 5, 50 + 30*fac, 70 *fac + 5), #stick c(50, 64 *fac + 5, 50 - 15*fac, 45 *fac + 5), #arm one c(50 - 20*fac, 65 *fac + 5, 50 - 15*fac, 45 *fac + 5), #arm c(50 + 27.5*fac, 50 *fac + 5 - 20*bag.size , 50 + 27.5*fac, 50 *fac + 5 - 20*bag.size), #bag c(50 + 25*fac, 55 *fac + 5, 50 + 30*fac, 75 *fac + 5)) #tape1 colnames(res) <- c("x0", "y0", "x1", "y1") lwd.mm <- c( c(17, 14, 12, 10, 2.5, 2, 6, 6) * fac / 0.927042 , 31 * bag.size / 0.2924, 2.5 * fac / 0.927042 ) colors <- c("#3377BB", "white", "brown", "orange")[c(1,1,2,1,4,3,1,1,4,4)] res <- data.frame(res, lwd.mm = lwd.mm, color = colors) class(res) <- c(class(res), "segments"); result <- list(res) res <- data.frame(x = x.text, y = y.text, L = Region, text.cex.mm = text.cex.mm, color = 1) class(res) <- c(class(res), "text"); res <- list(res) result <- c(result, res) return(result) } # ; show.icon.design(mazz.man) # Mazzi.Pareto # res1 <- rbind(c(0,0,100,100)); class(res1)<-c("segments"); res1 <- list(res1) # res2 <- rbind(c(100,0,0,100)); class(res2)<-c("segments"); res2 <- list(res2) ##:define [[mazz.man()]]## #:381 #389: ##define [[bike()]]:## bike <- function(){ res.liste <- NULL; a <- 1.5 res <- rbind( c(20, 20, 20, 20, 40, 1), # wheel front c(20, 20, 20, 20, 30, NA), # wheel front c(80, 20, 80, 20, 40, 1), # wheel back c(80, 20, 80, 20, 30, NA), # wheel back c(50, 20, 80, 20, 3*a, 1), # --- c(50, 20, 65, 50, 3*a, 1), # / c(80, 20, 32.5, 45, 3*a, 1), # \ c(50, 20, 32.5, 45, 3*a, 1), # \ c(60, 50, 70, 50, 5*a, 1), # seat c(20, 20, 40, 60, 3*a, 1), # / c(40, 60, 45, 60, 5*a, 1) # control ) res[, c(2,4)] <- res[, c(2,4)] + 20; class(res) <- "segments" colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") res.liste <- c(res.liste, list(res)) } ##:define [[bike()]]## #:389 #390: ##define [[bike2()]]:## bike2 <- function() { res.liste <- NULL; a <- 1.5 res <- rbind( c(20, 20, 20, 20, 40, 1), # wheel front c(20, 20, 20, 20, 30, NA), # wheel front c(80, 20, 80, 20, 40, 1), # wheel back c(80, 20, 80, 20, 30, NA), # wheel back c(50, 20, 80, 20,3*a, 1), # --- c(50, 20, 65, 50,3*a, 1), # / c(80, 20, 32.5, 45,3*a, 1), # \ c(50, 20, 32.5, 45,3*a, 1), # \ c(60, 50, 70, 50,5*a, 1), # seat c(20, 20, 40, 60,3*a, 1), # / c(40, 60, 45, 60,5*a, 1)) # control res[, c(2,4)] <- (res[, c(2,4)] - 9.3) * 10/5.3; class(res) <- "segments" colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") res.liste <- c(res.liste, list(res)) } ##:define [[bike2()]]## #:390 #391: ##define [[heart()]]:## heart <- function(txt = "xy"){ txt <- substring(paste(txt, " "), 1:2, 1:2) res1 <- cbind( x = c(50, 80, 90, 70, 50, 50, 30, 10, 20, 50), y = c(05, 30, 60, 85, 50, 50, 85, 60, 30, 05) + 05, color = NA) class(res1) <- c(class(res1), "polygon"); res1 <- list(res1) res2 <- cbind( x = c(50, 90, 70, 50, 50, 30, 10, 50), y = c(05, 60, 85, 50, 50, 85, 60, 05) + 05) res2 <- data.frame( res2, lwd.mm = 19.5, color = NA) class(res2) <- c(class(res2), "spline"); res2 <- list(res2) res3 <- data.frame( x = c(27, 73), y = c(65, 65), txt = txt, 40, 1) class(res3) <- c(class(res3), "text"); res3 <- list(res3) result <- c(res1, res2, res3) } # ; show.icon.design(heart)() ##:define [[heart()]]## #:391 #392: ##define [[bend.sign()]]:## bend.sign <- function(txt = "xy"){ txt <- substring(paste(txt, " "), 1:2, 1:2) ground <- 6; top <- 90; center <- 55.5; size <- 25 res0o <- c(50, top, 50, ground + 3, 7, 1) # Pfahl outer res0i <- c(50, top, 50, ground + 2, 3, 3) # Pfahl inner res1 <- c(30, ground, 70, ground, 2, 1) # Fundament res2 <- rbind( c(50, center+size, 50-size, center), c(50-size, center, 50, center-size), c(50, center-size, 50+size, center), c(50+size, center, 50, center+size)) res2 <- cbind(res2, lwd.mm = 15, color = 1) # Schildrand size <- size - 0 # Innenrand: res3 <- rbind( c(50, center+size, 50-size, center), c(50-size, center, 50, center-size), c(50, center-size, 50+size, center), c(50+size, center, 50, center+size)) res3 <- cbind(res3, lwd.mm = 10, color = 2) res <- rbind(res0o, res0i, res1, res2, res3); rownames(res) <- NULL res <- as.data.frame(res) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") res$color <- c("black", NA, "gray")[res$color] class(res) <- c(class(res), "segments"); res <- list(res) size <- size - 2 res1b <- rbind( c(50, center+size), c(50-size, center), c(50, center-size), c(50+size, center)) res1b <- cbind(res1b, color = NA) class(res1b) <- c(class(res1b), "polygon"); res1b <- list(res1b) # Innenflaeche f <- size / 25 res2b <- cbind( x = 50 + f*c( h <- c(- 9, 5, 12), rev(-h)), y = center + f*c( h <- c( 16, 13, 6), rev(-h)), lwd.mm = f^0.6*6.5, color = 1) class(res2b) <- c(class(res2b), "spline"); res2b <- list(res2b) #res3 <- data.frame( x = c(27, 73), y = c(65, 65), txt = txt, 40, 1) #class(res3) <- c(class(res3), "text"); res3 <- list(res3) result <- c(res, res1b, res2b) #, res1) } # ; show.icon.design(bike2)# bend.sign) #; bend.sign() ##:define [[bend.sign()]]## #:392 #398: ##define [[fir.tree()]]:## fir.tree <- function(height = 1, width = 1, txt = ".....", t.cex.mm = 10){ fac.x <- width * 100/60; fac.y <- height * 100/70 # build standardized elements of pictogram res <- data.frame( x = c(20, 40, 25, 45, 35, 50, 65, 55, 75, 60, 80), y = c(20, 40, 40, 60, 60, 80, 60, 60, 40, 40, 20) + 5, color = NA) class(res) <- c(class(res), "polygon") res.liste <- c(list(res)) res <- data.frame( x = c(55, 55, 45, 45), y = c(20, 10, 10, 20) + 5 , color = "brown") class(res) <- c(class(res), "polygon") res.liste <- c(res.liste, list(res)) # integrate effects of arg1 and arg2 res.liste <- lapply( res.liste, function(xyc){ xyc$x <- fac.x * (xyc$x - 50) + 50; xyc} ) res.liste <- lapply( res.liste, function(xyc){ xyc$y <- fac.y * (xyc$y - 50) + 50; xyc} ) # append text element # res <- data.frame( x = 20, y = 2, txt = txt, t.cex.mm, color = "1") res <- data.frame( x = fac.x * (30 - 50) + 50, y = fac.y * (10 - 50) + 50, txt = txt, t.cex.mm, color = "1") #180327 class(res) <- c(class(res), "text") res.liste <- c(res.liste, list(res)) res.liste } # ; show.icon.design(fir.tree) ##:define [[fir.tree()]]## #:398 if( icons %in% ls() ) icons <- get(icons) if( !is.function(icons) ) { cat("Error in call of call.icon.generator in iconplots():\n ", icons,"not implemented yet!") return() } ##:look for internal generator in [[call.icon.generator()]]## #:354 } if( is.function(icons) ){ # case: user defined generator function --- #355: ##find set [[pic.sets]] by calling [[icons()]] in [[call.icon.generator()]]:## # check arguments of icons # print(pic.args) icon.gen.args <- formals(icons); n.icon.gen.args <- length(icon.gen.args) # Are there some arguments of icons to modify the pictogram? ----------- args <- list() # no additional args to concern ----------- if( n.icon.gen.args > 0 ){ # at first check whether there are arguments in "..." to use for icons ppp.args <- list(...) if( 0 < length(ppp.args) ){ # find args of "..." which can be used in icons() idx <- match(names(ppp.args), names(icon.gen.args)) args <- ppp.args[!is.na(idx)] # remove args of icon.gen.args that have been found in "..." idx <- match(names(icon.gen.args), names(args)) icon.gen.args <- icon.gen.args[is.na(idx)] } # append args given via grp.design and stored in pic.args if( (h1 <- length(pic.args)) > 0 && (h2 <- length(icon.gen.args)) > 0 ){ pic.args <- pic.args[1 : min(h1, h2)] args <- c( args, as.list(pic.args) ) } if( 0 == length(args) ) args <- list() # explizit assignment of args if empty } # => relevant args found, expanded and stored in args # conversion of factors to numbers for( i in seq(along = args)){ h <- args[[i]] if(is.factor(h)){ # case: levels are numbers nums <- try(as.numeric(levels(h))) if( (!"try-error" == class(nums)) && (!any( is.na(nums) ) ) ){ # nums is number args[[i]] <- nums[as.numeric(h)] } else { # case: levels are no numbers # job of generator function: args[[i]] <- as.numeric(h) / length(levels(h)) } } } # call icons to build an concrete pictogram blank pic.sets <- try(do.call(icons, args)) if("try-error" %in% class(pic.sets) ){ cat("ERROR in call.icon.generator: generator function failed!\n"); return() } if( !is.list(pic.sets) || is.data.frame(pic.sets) ) pic.sets <- list(pic.sets) ##:find set [[pic.sets]] by calling [[icons()]] in [[call.icon.generator()]]## #:355 } # now pic.sets stores the actual pictogram blank # check list structure of the pictogram to be build if( !is.list(pic.sets) || is.data.frame(pic.sets) ) pic.sets <- list(pic.sets) #356: ##find parameters for constructing pictograms in [[call.icon.generator()]]:## colornames <- c("white", "black", "red", "green", "blue", "lightblue", "magenta", "yellow", "grey") if(is.numeric(color)) color <- colornames[1 + color] h <- par(); usr <- h$usr; pin <- h$pin; cin <- h$cin xwcoor.pmm <- diff(usr[1:2]) / pin[1] / 25.4 # xrange per mm of plot-region ywcoor.pmm <- diff(usr[3:4]) / pin[2] / 25.4 # yrange per inch of plot-region # correction because of uncorrect display sizes may by processed by: dev.fac <- c(0.8, 1, 1)[ c(dev.cur() == c("postscript", "pdf"), TRUE) ][1] aspect <- xwcoor.pmm / ywcoor.pmm # width / height concerning plot-region # if(length(icon.cex) < n.items) icon.cex <- rep(icon.cex, n.items)[1:n.items] # xrange of symbol of size because of # "xsize <- icon.cex * xwcoor.pmm" => "icon.cex == xsize / xwcoor.pmm dxy[1]" => icon.cex <- dxy[1] / xwcoor.pmm; xsize <- icon.cex * xwcoor.pmm ysize <- icon.cex * ywcoor.pmm # yrange of symbol of size icon.cex xwcoor.pcm <- 10 * xwcoor.pmm # xrange per cm of plot-region mm.to.lwd <- function(lwd.mm) lwd.mm * 3.787878 * dev.fac mm.to.cex <- function(text.cex.mm) text.cex.mm / (cin[1] * 25.4) ##:find parameters for constructing pictograms in [[call.icon.generator()]]## #:356 type.set <- c("polygon", "segments", "text", "spline") for( pic.i in pic.sets ){ # loop along the elements of list "pic.sets" # plot segments, polygons and texts in [[call.icon.generator()]] #357: ##add missing infos of [[pic.i]] in [[call.icon.generator()]]:## # find type (last element of class vector) and dimensions of pic.i type <- rev(class(pic.i))[1]; type <- type[ type %in% type.set ] h <- dim(pic.i); rows.pic.i <- h[1]; cols.pic.i <- h[2] # add missing infos if( type == "polygon" ){ if( cols.pic.i < 3 ) pic.i <- cbind( pic.i, color.vec = NA ) } if( type == "segments" ){ if( cols.pic.i < 5 ) pic.i <- cbind( pic.i, lwd.mm = 10 ) if( cols.pic.i < 6 ) pic.i <- cbind( pic.i, color.vec = NA ) } if( type == "text" ){ if( cols.pic.i < 4 ) pic.i <- cbind( pic.i, text.cex.mm = 10 ) if( cols.pic.i < 5 ) pic.i <- cbind( pic.i, color.vec = NA ) } if( type == "spline" ){ if( cols.pic.i < 3 ) pic.i <- cbind( pic.i, lwd.mm = 10 ) if( cols.pic.i < 4 ) pic.i <- cbind( pic.i, color.vec = NA ) } ##:add missing infos of [[pic.i]] in [[call.icon.generator()]]## #:357 #358: ##prepare colors for use in [[call.icon.generator()]]:## # extract color column: color.vec of group of descriptions col.no <- c(3, 6, 5, 4)[ match( type, type.set ) ] color.vec <- pic.i[, col.no] # standardize format of color.vec if(is.factor (color.vec)) color.vec <- as.character(color.vec) if(is.numeric(color.vec)) color.vec <- colornames[1 + color.vec] # replace NA entries by argument color of puticon call res.color <- ifelse( is.na(color.vec), color, color.vec ) ##:prepare colors for use in [[call.icon.generator()]]## #:358 #359: ##transform coordinates in [[call.icon.generator()]]:## n.cols <- c(2, 4, 2, 2)[ match(type, type.set) ] adj.h <- matrix( 1, nrow(pic.i), n.cols, byrow = TRUE ) #180327 res <- # shift because of design size # (pic.i[, 1:n.cols] - 100 * adj) * (pic.i[, 1:n.cols] + 100 * (adj.h - 1)) * #180327 # scaling: rescaling design size 0..100 -> 0..1: factor = 0.01 0.01 * matrix(c(xsize, ysize), rows.pic.i, n.cols, byrow = TRUE) + # shift because of desired position matrix(xy, rows.pic.i, n.cols, byrow = TRUE) ##:transform coordinates in [[call.icon.generator()]]## #:359 #360: ##construct and activate plotting commands in [[call.icon.generator()]]:## ## if(verbose){ cat("activate plotting commands"); print(res.color) } switch(type, "polygon" = polygon (res[,1], res[,2], col = res.color, xpd = NA, border = NA), "segments" = segments(res[,1], res[,2], res[,3], res[,4], col = res.color, lwd = mm.to.lwd(pic.i[, 5]) * icon.cex / 100, xpd = NA), "text" = text(res[,1], res[,2], as.character(pic.i[,3]), col = res.color, cex = mm.to.cex(pic.i[,4]) * icon.cex / 100, # adj = c(0,0), # adjust argument for text not implemented yet xpd = NA), "spline" = { n.h <- length(res[,1]); z <- seq(n.h); n <- 10 xy.h <- cbind(spline( z, res[,1], n = n * n.h)$y, spline( z, res[,2], n = n * n.h)$y) lines(xy.h, col = res.color, lwd = mm.to.lwd(pic.i[,3]) * icon.cex / 100, xpd = NA) } ) ##:construct and activate plotting commands in [[call.icon.generator()]]## #:360 } return() } ##:define [[call.icon.generator()]]## #:353 ##:define local functions## #:361 #12: ##find positioning vars:## if(verbose) cat("find positioning vars") if(is.null(grp.xy)) grp.xy <- "0~0" grp.xy <- find.xy.groupings(grp.xy) ##:find positioning vars## #:12 #15: ##find pic vars:## if(verbose) cat("grp.icon of call:", grp.icon) grp.design <- NULL if( !is.null(grp.icon) ){ # 170817 grp.icon <- gsub(" ", "", grp.icon) # remove blanks grp.icon <- unlist(strsplit(grp.icon, "[+]")) # split string grp.icon <- grp.icon[ grp.icon != "" ] # remove empty entries if( 1 < length(grp.icon) ){ # further specifications found grp.design <- grp.icon[-1] # extract specifications grp.icon <- grp.icon[1] # extract pic choise variable } } if(verbose){ cat("grp.icon interpreted"); print(grp.icon); print(grp.design)} ##:find pic vars## #:15 #19: ##build data matrix:## if(verbose) cat("build data matrix") if(length(data) == 0 || all(unlist(data) == 0)) return("nothing to do") if(is.vector(data) && !is.table(data)){ # case 1 data <- as.table(data) if( 1 == length(data) && (0 == length(grp.xy$x) || any(0 < grp.xy$x)) ) grp.xy$x <- "0" if( 0 == length(grp.xy$y) || any(1 < grp.xy$y) ) grp.xy$y <- "0" } if(is.table(data)){ # case 2 #20: ##check and possibly set dim names of table and save them:## data.mat.cn.orig <- names(dimnames(data)) # set dim names if missing: if( 0 == length(data.mat.cn.orig) || any("" == data.mat.cn.orig) ){ h <- length(dim(data)) data.mat.cn.orig <- c(data.mat.cn.orig, rep("",h))[1:h] h <- paste("Var", 1:h, sep = "") data.mat.cn.orig <- ifelse(data.mat.cn.orig != "", data.mat.cn.orig, h) names(dimnames(data)) <- data.mat.cn.orig cat("Note: names for dims have been set:", data.mat.cn.orig, "!\n") } names(dimnames(data)) <- data.mat.cn <- make.names(data.mat.cn.orig, TRUE) ##:check and possibly set dim names of table and save them## #:20 #21: ##replace numbers in grouping definitions:## local.debug <- !TRUE if(local.debug){ if(is.matrix(data)) print(data[1:2,]); print(data.mat.cn); cat("length(grp.color)", length(grp.color)) cat("grp.color", grp.color, "grp.icon", grp.icon); print(grp.xy) } find.col.name <- function( cname, dims ){ # cat("csname"); print(cname) if(1 == length(cname) && 0 < length(grep("^[1-9][0-9]*$", cname)) && is.na(match(cname, dims)) ){ cname <- as.character(dims[ as.numeric(cname) ]) } return(cname) # as.character() # 180607 } if( 0 < length(grp.icon) ){ # must be of length 1 grp.icon <- find.col.name(grp.icon[1], data.mat.cn) } if( 0 < length(grp.design) ){ grp.design <- sapply( grp.design, find.col.name, data.mat.cn) } grp.color <- find.col.name(grp.color, data.mat.cn) if( "0" != grp.xy$x[1] ) grp.xy$x <- sapply( grp.xy$x, find.col.name, data.mat.cn) if( "0" != grp.xy$y[1] ) grp.xy$y <- sapply( grp.xy$y, find.col.name, data.mat.cn) if(verbose){ cat("grp.color",grp.color, "grp.icon", grp.icon); print(grp.design); print(grp.xy)} ##:replace numbers in grouping definitions## #:21 #22: ##reduce data table if not all dimensions are used:## vars.used <- unique(c(unlist(grp.xy), grp.color, grp.icon, grp.design)) if(verbose){ cat("vars.used", vars.used, "dimnames(data)"); print(dimnames(data)) } found <- match(vars.used, data.mat.cn) h <- vars.used h <- h[ is.na(found) & h != "|"] h <- h[ h != "0" & h != ".sign"] h <- h[ !is.na(h) ] if( 0 < length(h) ) cat("Warning: grouping vars ", h, "not found -> ignored!") found <- found[ !is.na(found) ] if( 1 < length(found) ) found <- sort(found) relevant.columns <- rep(FALSE, length(data.mat.cn)) relevant.columns[found] <- TRUE if( length(found) < length(dimnames(data)) ){ data <- margin.table(data, found); if(!is.table(data)) data <- as.table(data) data.mat.cn <- data.mat.cn[found] data.mat.cn.orig <- data.mat.cn.orig[found] if( 0 == length(found)) data.mat.cn <- data.mat.cn.orig <- "Var1" } if(local.debug){ print(grp.xy); print(grp.color); cat("vars.used"); print(vars.used) cat("found"); print(found); # str(data); print(data.mat.cn); print(data.mat.cn.orig) } ##:reduce data table if not all dimensions are used## #:22 #23: ##check and possibly create new dimension due to negative cell entries:## if( any( data < 0 ) ){ data1 <- - data * (data <= 0); data2 <- data * (0 <= data); h <- c("-1","+1") # data1 <- data * (0 <= data); data2 <- -data* (data <= 0); h <- c("+1","-1") data3 <- array(c(data1, data2), c(dim(data),2)) dimnames(data3) <- c(dimnames(data), list(".sign" = h) ) cat("Note: new dimension '.sign' constructed to separate \n", "the absolute values of negative and positive entries!\n") data <- data3 } ##:check and possibly create new dimension due to negative cell entries## #:23 #24: ##expand table to data matrix and add sign and fraction column:## if( all(0<=data) & all(data<=1) ) data <- data*0.99999 # force rel.freq. to be < 1 if( any( 0 < (dat <- floor(data)) ) ){ # some entries > 0 after rounding down data.mat <- cbind(expand.table.short(dat), .fraction = 1) } else data.mat <- NULL # maybe relative frequencies only if( any(data != dat) ){ # fractional entries observed fs <- .5 + 0 * data; h <- as.vector(data - dat) # h <- as.vector(aperm(f, rev(seq(along = dim(f))))) # alternative sorting # h <- h[h>0] # values greater 0 should be handled only d <- cbind(expand.table.short(ceiling(fs)), .fraction = h) idx <- h > 0 | as.vector(data) == 0 # fractional part positive or cell entry 0 if( h <- (!is.null(data.mat)) ) cn <- colnames(data.mat) data.mat <- rbind(data.mat, d[idx,, drop = FALSE]) if(h) colnames(data.mat) <- cn } if( !(".sign" %in% colnames(data.mat)) ){ data.mat <- cbind(data.mat[, -(h <- dim(data.mat)[2]), drop = FALSE], .sign = 1, .fraction = data.mat[, h]) } data.mat <- data.mat[ data.mat[, ".fraction"] != 0, ] ## 161215 data.mat.cn <- c(data.mat.cn, ".sign", ".fraction") data.mat.cn.orig <- c(data.mat.cn.orig, ".sign", ".fraction") # in case of 1-dim tables there is no dimname so we set name "Var1" # if( "" == colnames(data.mat)[1] ) colnames(data.mat)[1] <- "Var1" data.mat <- data.frame(data.mat) ##:expand table to data matrix and add sign and fraction column## #:24 } else { # case 3 #25: ##check and possibly set col names of data matrix and save them:## data.mat <- cbind(data) data.mat.cn.orig <- colnames(data.mat) # set col names if missing: if( 0 == length(data.mat.cn.orig) || any("" == data.mat.cn.orig) ){ h <- dim(data)[2] data.mat.cn.orig <- c(data.mat.cn.orig, rep("",h))[1:h] h <- paste("Var", 1:h, sep = "") data.mat.cn.orig <- ifelse(data.mat.cn.orig != "", data.mat.cn.orig, h) colnames(data) <- data.mat.cn.orig cat("Warning: col names of data matrix have been set:", data.mat.cn.orig, "!\n") } data.mat.cn <- make.names(data.mat.cn.orig, TRUE) ##:check and possibly set col names of data matrix and save them## #:25 #21: ##replace numbers in grouping definitions:## local.debug <- !TRUE if(local.debug){ if(is.matrix(data)) print(data[1:2,]); print(data.mat.cn); cat("length(grp.color)", length(grp.color)) cat("grp.color", grp.color, "grp.icon", grp.icon); print(grp.xy) } find.col.name <- function( cname, dims ){ # cat("csname"); print(cname) if(1 == length(cname) && 0 < length(grep("^[1-9][0-9]*$", cname)) && is.na(match(cname, dims)) ){ cname <- as.character(dims[ as.numeric(cname) ]) } return(cname) # as.character() # 180607 } if( 0 < length(grp.icon) ){ # must be of length 1 grp.icon <- find.col.name(grp.icon[1], data.mat.cn) } if( 0 < length(grp.design) ){ grp.design <- sapply( grp.design, find.col.name, data.mat.cn) } grp.color <- find.col.name(grp.color, data.mat.cn) if( "0" != grp.xy$x[1] ) grp.xy$x <- sapply( grp.xy$x, find.col.name, data.mat.cn) if( "0" != grp.xy$y[1] ) grp.xy$y <- sapply( grp.xy$y, find.col.name, data.mat.cn) if(verbose){ cat("grp.color",grp.color, "grp.icon", grp.icon); print(grp.design); print(grp.xy)} ##:replace numbers in grouping definitions## #:21 #26: ##reduce data frame if not all variables are used:## vars.used <- unique(c(unlist(grp.xy), grp.color, grp.icon, grp.design, ".fraction", ".icon")) #170818 found <- match(vars.used, data.mat.cn) h <- vars.used h <- h[ is.na(found) & h != "|"] h <- h[ h != "0" & h != ".sign"] h <- h[ !is.na(h) ] hh <- h[ ! (h %in% c(".fraction", ".icon")) ] #170818 if( 0 < length(hh) ) cat("Warning: grouping vars ", hh, "not found -> ignored!") found <- found[ !is.na(found) ] if( 1 < length(found) ) found <- sort(found) relevant.columns <- rep(FALSE, length(data.mat.cn)) relevant.columns[found] <- TRUE if( length(found) < length(colnames(data)) ){ data.mat <- data.mat[, found, drop = FALSE] data.mat.cn <- data.mat.cn[found] data.mat.cn.orig <- data.mat.cn.orig[found] } ##:reduce data frame if not all variables are used## #:26 #27: ##append fraction and sign column:## if( !".sign" %in% colnames(data.mat) ){ data.mat <- cbind(data.mat, .sign = 1) data.mat.cn <- c(data.mat.cn, ".sign") data.mat.cn.orig <- c(data.mat.cn.orig, ".sign") } if( !".fraction" %in% colnames(data.mat) ){ data.mat <- cbind(data.mat, .fraction = 1) data.mat.cn <- c(data.mat.cn, ".fraction") data.mat.cn.orig <- c(data.mat.cn.orig, ".fraction") } colnames(data.mat) <- data.mat.cn data.mat <- data.frame(data.mat) ## 160829 ##:append fraction and sign column## #:27 } #28: ##check and possibly modify grouping definitions:## rm.0 <- function(x) x[ x != "0" ] grp.design <- rm.0(grp.design) grp.icon <- rm.0(grp.icon) grp.color <- rm.0(grp.color) grp.x <- rm.0(grp.xy$x) grp.y <- rm.0(grp.xy$y) # testet h <- c(grp.x, grp.y, grp.icon, grp.color, grp.design) grp.vars <- if( is.null(h) ) h else unique(sort(h)) # grp.vars show grouping vars if(verbose) cat("after check\ngrp.icon:", grp.icon, "grp.design:", grp.design) if(verbose) cat("grp.x", grp.x, "grp.y", grp.y, "grp.color", grp.color) # find original grouping variable names: f <- function(obj) substring(obj, 1, pmin(nchar(obj), lab.n.max[1])) grp.x.o <- f(data.mat.cn.orig[ match(grp.x, data.mat.cn) ]) grp.y.o <- f(data.mat.cn.orig[ match(grp.y, data.mat.cn) ]) grp.color.o <- f(data.mat.cn.orig[ match(grp.color, data.mat.cn) ]) grp.icon.o <- f(data.mat.cn.orig[ match(grp.icon, data.mat.cn) ]) grp.design.o <-f(data.mat.cn.orig[ match(grp.design,data.mat.cn) ]) ##:check and possibly modify grouping definitions## #:28 ##:build data matrix## #:19 #30: ##transform variables:## if(verbose) cat("transform variables") # remove rows with NA entries if( any(is.na(data.mat)) ){ idx <- apply(data.mat, 1, function(x) all( !is.na(x) ) ) data.mat <- data.mat[ idx,, drop = FALSE ] cat("NA rows have been removed") } if(missing(vars.to.factors)) vars.to.factors <- rep(TRUE, length(relevant.columns)) if( any(0 < vars.to.factors) ){ # prepair vars.to.factors if(is.null(h <- names(vars.to.factors))){ # case: no names of variables given if( 0 < ( h <- length(relevant.columns) - length(vars.to.factors) ) ) vars.to.factors <- c(vars.to.factors, rep(1, h)) # not (0,h) #170102 vars.to.factors <- vars.to.factors[relevant.columns] v.idx <- seq(along=vars.to.factors) } else { v.idx <- match(names(vars.to.factors), colnames(data.mat)) v.idx <- v.idx[!is.na(v.idx)] } for(i in seq(along = v.idx)){ # perform transformation: if(!is.factor(v <- data.mat[, v.idx[i] ]) && data.mat.cn[v.idx[i]] != ".fraction"){ if(0 == vars.to.factors[i]) next if(1 > vars.to.factors[i]){ b <- seq(0,1, 1/round(1/vars.to.factors[i]))[-1] if( .95 < b[h <- length(b)] ) b <- b[-h] mi <- min(v); ma <- max(v) b <- unique(c(mi - 0.01*(ma - mi), quantile(v, b, na.rm = TRUE), ma)) v <- cut(v, breaks = b) } if(1 == vars.to.factors[i]) v <- factor(v) if(1 < vars.to.factors[i]) v <- cut(v, vars.to.factors[i]) data.mat[, v.idx[i] ] <- v } } } ##:transform variables## #:30 #31: ##transform variables:## if( 0 < length(grp.y) ){ for(j in seq(along = grp.y)){ # reverse y d <- data.mat[[grp.y[j]]] if( panel.reverse.y && is.factor(d) && grp.y[j] != ".sign" ) { h <- rev(levels(d)) d <- factor(1 + length(h) - as.numeric(d)); levels(d) <- h data.mat[[grp.y[j]]] <- d } } # data.mat <- data.frame(data.mat[, grp.vars, drop=FALSE]) } ##:transform variables## #:31 #32: ##transform variables:## if(verbose) cat("grp.x:", grp.x, " / grp.y:", grp.y, " / grp.color:", grp.color," / grp.icon:",grp.icon, " / colnames(data.mat):", colnames(data.mat), sep="|") ##:transform variables## #:32 #34: ##transform variables:## # find objects to transform variables # args <- list(...) in if( 0 < length( h <- grep("^transform[.]", names(args))) ){ if(verbose) cat("transform variable", h) args.list <- args[h] var.names <- sub("^transform[.]", "", names(args.list)) # extract var.names which are found in the data col.no <- match(var.names, colnames(data.mat)) idx <- !is.na(col.no) args.list <- args.list[idx] var.names <- var.names[idx] col.no <- col.no[idx] # loop along the columns to be transformed for(i in seq(along = col.no)){ f <- args.list[[i]] if( is.character(f) ){ txt <- c( "f <- function(x){", f, "}") res <- try(eval(parse(text = txt))) if( class(res) == "try-error" ){ cat("Error during transformation of", var.names[i], "by\n ", txt) next } } res <- try( f( data.mat[, col.no[i]] ) ) if( class(res) == "try-error" ){ cat("Error during transformation of", var.names[i], "by\n " ); print(f) if( is.factor(var.names[i]) ) cat("-- Remark:", var.names[i], "is a factor variable!") next } else { data.mat[, col.no[i]] <- res if( verbose ){ cat( var.names[i], "has been transformed by\n " ); cat(" ", deparse(f)) } } } } ##:transform variables## #:34 #37: ##fix colors:## if( 0 < length(grp.color) ){ values <- data.mat[, grp.color] lev.color <- if(is.factor(values)) levels(values) else unique(sort(values)) n.values <- length(lev.color) if(missing(colors)) colors <- substring(rainbow(n.values),1,7) if( (h <- length(colors)) < n.values ) colors <- c(colors, rep(colors, n.values))[1:n.values] Colors <- match(values, lev.color) # colors[ .. ] if(is.character(lev.color)) lev.color <- substring(lev.color, 1, pmin(lab.n.max[1], nchar(lev.color))) } else { Colors <- rep(1, nrow(data.mat)); lev.color <- 1 if(missing(colors)) colors <- 1 } data.mat <- cbind(data.mat, .color = Colors) ##:fix colors## #:37 #39: ##fix icons:## if(verbose) print("fix icons -- begin -------------------") if(!missing(icons)){ #170718 # find set of icons to be used if(is.raster(icons)) icons <- list(icons) if( is.character(icons) ){ h <- substring(h <- icons[[1]], nchar(h) - 3, nchar(h)) %in% c(".jpg", ".JPG", "jpeg", "JPEG", ".pnm", ".PNM", ".png", ".PNG", ".ppm", ".PPM") if( h ){ #42: ##read raster image if file names are given:## if(is.character(icons)){ # names of files with images file.type <- rep("no file", length(icons)) #41: ##download file via internet:## # download files via internet download.list <- NULL for(i in seq(along = icons)){ icon <- icons[i]; h <- nchar(icon) h1 <- substring(icon, 1, 4) == "http" h2 <- (icon.ext <- substring(icon, h - 3, h)) %in% c(".jpg", ".JPG", "jpeg", "JPEG", ".pnm", ".PNM", ".png", ".PNG") if( icon.ext %in% c(".jpg", ".JPG", "jpeg", "JPEG") ) file.type[i] <- "jpg" if( icon.ext %in% c(".pnm", ".PNM", ".ppm", ".PPM") ) file.type[i] <- "pnm" if( icon.ext %in% c(".png", ".PNG") ) file.type[i] <- "png" if( h1 && h2 ){ # file from internet fname <- sub(".*[.]", ".", icon) fname <- tempfile("icon-pic", fileext = fname) ok <- try( utils::download.file(url = icon, destfile = fname) ) if( "error" %in% class(ok) ){ cat("Error in iconplot: Download of file", icon, "failed.\n") return() } download.list <- c(download.list, fname) icons[i] <- fname } } if(verbose){ cat("files downloaded:\n"); print(download.list) } ##:download file via internet## #:41 if( any(file.type == "pnm") ){ #221: ##define [[get.pnm()]]:## get.pnm <- function(filename, verbose = FALSE){ #222: ##find P* type of pnm file:## nextline <- scan(filename, what="", n=1) if( substring(nextline, 1, 1) != "P" || ! ( PType <- substring(nextline, 2, 2) ) %in% as.character(1:6)) return("ERROR: reading pnm file failed: no pnm file") PType <- as.numeric(PType); if(verbose) cat("PType:", PType); skip <- 0 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- unlist( strsplit( nextline, "[ \t]"))[-1] ##:find P* type of pnm file## #:222 #223: ##get width of pnm picture:## #226: ##get next line that is not empty:## idx <- 20 while(idx > 0 & 0 == length(nextline)){ idx <- idx - 1; skip <- skip + 1 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- sub("[#].*", "", nextline) nextline <- unlist( strsplit( nextline, "[ \t]")) } if( idx == 0 ) return("ERROR: reading pnm file failed: too many #-lines") nextline <- as.numeric(nextline) ##:get next line that is not empty## #:226 width <- nextline[1]; if(verbose) cat("width:",width) nextline <- nextline[-1] ##:get width of pnm picture## #:223 #224: ##get height of pnm picture:## if( length(nextline) == 0 ){ #226: ##get next line that is not empty:## idx <- 20 while(idx > 0 & 0 == length(nextline)){ idx <- idx - 1; skip <- skip + 1 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- sub("[#].*", "", nextline) nextline <- unlist( strsplit( nextline, "[ \t]")) } if( idx == 0 ) return("ERROR: reading pnm file failed: too many #-lines") nextline <- as.numeric(nextline) ##:get next line that is not empty## #:226 } height <- nextline[1]; if(verbose) cat("height:", height) nextline <- nextline[-1] ##:get height of pnm picture## #:224 #225: ##get colors of pnm picture:## if(PType == 1 || PType == 4) colors <- 1 else { if( length(nextline) == 0 ){ #226: ##get next line that is not empty:## idx <- 20 while(idx > 0 & 0 == length(nextline)){ idx <- idx - 1; skip <- skip + 1 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- sub("[#].*", "", nextline) nextline <- unlist( strsplit( nextline, "[ \t]")) } if( idx == 0 ) return("ERROR: reading pnm file failed: too many #-lines") nextline <- as.numeric(nextline) ##:get next line that is not empty## #:226 } colors <- nextline[1] }; if(verbose){ cat("colors:", colors); cat("head processed") } ##:get colors of pnm picture## #:225 #228: ##get decpixel of pnm picture:## if(PType < 4){ decpixel <- scan(filename, what="", sep="\n", skip = skip+1) decpixel <- paste(collapse=" ", decpixel) decpixel <- unlist( strsplit( decpixel, " +")) decpixel <- as.numeric(decpixel) decpixel <- matrix( decpixel, ncol = width, byrow = TRUE) } else { # P4, P5, P6 #227: ##read picture data of P4, P5 or P6 pictures:## tclcmds <- c(' # https://de.wikipedia.org/wiki/Portable_Pixmap # set fname mm.pnm set fname FILENAME set size [ file size $fname ] # puts $size set fp [open $fname] # http://www.tek-tips.com/viewthread.cfm?qid=1477934 fconfigure $fp -translation binary # scan [string range $contents i i] %c strA set binpixel [read $fp $size] close $fp binary scan $binpixel cu* decpixel ') tclcmds <- sub("FILENAME", filename, tclcmds) #require(tcltk) if( requireNamespace("tcltk") ){ tcltk::.Tcl(tclcmds) } else { print("Error from get.pnm: tcltk not found!!"); return() } decpixel <- as.character(tclvalue("decpixel")) ##:read picture data of P4, P5 or P6 pictures## #:227 decpixel <- unlist( strsplit( decpixel, " ")) if( PType == 4){ n.infos <- ceiling(width/8) * height # if(verbose) cat("length(decpixel)", length(decpixel), "n.infos", n.infos) decpixel <- decpixel[ -(1 : ( length(decpixel) - n.infos )) ] encode <- function(number, base) { # simple version of APL-encode / APL-representation "T", pw 10/02 # "encode" converts the numbers "number" using the radix vector "base" n.base <- length(base); result <- matrix(0, length(base), length(number)) for(i in n.base:1){ result[i,] <- if(base[i]>0) number %% base[i] else number number <- ifelse(rep(base[i]>0,length(number)), floor(number/base[i]), 0) } return( if(length(number)==1) result[,1] else result ) } decpixel <- encode(as.numeric(decpixel), rep(2,8)) decpixel <- matrix(decpixel, nrow = height, byrow = TRUE)[, 1:width] # decpixel <- matrix(decpixel, ncol = height, byrow = !TRUE) # decpixel <- t(decpixel[(1:width),]) } else { # P5 or P6 BigEndian <- colors > 255 n.infos <- width * height * c(1,3)[1+(PType == 6)] * c(1,2)[1+BigEndian] decpixel <- decpixel[ -(1 : ( length(decpixel) - n.infos )) ] if( BigEndian ){ # use the first byte of a pixel only decpixel <- matrix(decpixel, ncol = 2, byrow = TRUE)[,1] ### 1 or 2? } decpixel <- as.numeric(decpixel) decpixel <- matrix( decpixel, ncol = width * (1 + 2*(PType == 6)), byrow = TRUE) } PType <- PType - 3 } ##:get decpixel of pnm picture## #:228 #229: ##define [[decpixel.to.raster()]]:## decpixel.to.raster <- function(decpixel, PType, width, height, colors){ HEX <- unlist(strsplit("0123456789ABCDEF","")) if(PType < 3){ # black and white or grey -- P1 or P2 if(PType==1) decpixel <- colors - decpixel pixel <- decpixel / colors * 255 first <- floor( pixel / 16 ); second <- pixel %% 16 hexpixel <- paste(sep="", HEX[1 + first], HEX[1 + second]) hexpixel <- paste(sep="", "#", hexpixel, hexpixel, hexpixel) hexpixel <- matrix(hexpixel, ncol = width) } else { # colors -- P3 decpixel <- array(t(decpixel), c(3, width, height)) if( 255 < colors ) colors <- 255 # 160928 pixel <- decpixel / colors * 255 first <- floor(pixel / 16); second <- pixel %% 16 hexpixel <- paste(sep="", HEX[1 + first], HEX[1 + second]) hexpixel <- array(hexpixel, c(3, width, height)) hexpixel <- paste(sep="", "#", hexpixel[1,,], hexpixel[2,,], hexpixel[3,,]) hexpixel <- matrix(hexpixel, ncol = width, byrow = TRUE) } raster <- hexpixel } #table(decpixel.to.raster(a, 6, 724, 561, 65535)) #table(a) ##:define [[decpixel.to.raster()]]## #:229 as.raster(decpixel.to.raster(decpixel, PType, width, height, colors)) } #; dump("get.pnm", file = "get.pnm.R") ##:define [[get.pnm()]]## #:221 } n.icons <- dim(data.mat)[1]^0.5; p <- icons; icons <- NULL ok <- try(for(ip in seq(along = p)){ if(file.type[ip] == "pnm") pic <- get.pnm(p[ip]) if(file.type[ip] == "jpg"){ if(!"package:jpeg" %in% search()){ print("iconplot() requires package jpeg") } pic <- jpeg::readJPEG(p[ip], native = !TRUE) ############# } if(file.type[ip] == "png"){ if(!"package:png" %in% search()){ print("iconplot() requires package png") } pic <- png::readPNG(p[ip], native = !TRUE) ############## } if(verbose){ cat("file has been read:", p[ip], "\n") } if(is.list(icon.grey.levels)){ grey.levels <- icon.grey.levels[[ip]] if(is.null(grey.levels)) grey.levels <- icon.grey.levels[[1]] } else grey.levels <- icon.grey.levels if( !is.null(grp.color) || !identical(1, colors) ){ # don't transform, raster.to.grey, recolor if no grp.col or colors != 1 pic <- transform.color.to.rgb.integer(pic) pic <- raster.to.greys(pic, grey.levels = grey.levels, # c(0.05, 0.7), reduce = TRUE, n.icons = n.icons) } else pic <- as.raster(pic) icons <- c(icons, list(pic)); "ok" }) if(0 < length(download.list)) file.remove(download.list) #46: ##handle try reading error:## if(class(ok) == "try-error"){ icons <- seq(along = p) cat("Warning: reading of file(s)", p[ip] ,"failed, plotting symbols will be used!\n") } ##:handle try reading error## #:46 } ##:read raster image if file names are given## #:42 } } # other icons of mode char must store names of icons to be generated if(is.function(icons)) icons <- list(icons) else # otherwise build rect()-icons if( length(icons) == 0 || is.na(icons)[[1]] ) icons <- 0 if(!is.list(icons)) icons <- split(icons, seq(along=icons)) } if( 0 < length(grp.icon) ){ # find levels for each of the vars of grp.icon values <- lapply(grp.icon, function(x) data.mat[, x]) lev.pic <- lapply(values, function(x) if(is.factor(x)) levels(x) else unique(sort(x))) # find number of icons needed n.values <- prod( lev.pic.len <- unlist(lapply(lev.pic, length)) ) # find set of icons to be used if(missing(icons)){ icons <- seq(n.values) if(!is.list(icons)) icons <- split(icons, seq(along=icons)) } # expand icons to get n.values elements h <- length(icons); if( h < n.values){ if( h == 1 ) icons <- rep(icons, n.values) else # one element is repeated icons <- c(icons, rep(list(0), n.values - h)) # 0s are appended } else icons <- icons[1:n.values] #180312 pic.legend.ok <- 1 < length(icons) # & h<=n.values: condition removed #180312 # construct vector of pic no ----------------------------------------------- pic.vec <- 1; h <- c(1, cumprod( lev.pic.len )) # last element unnecessary for(i in seq(along = grp.icon)) # array index formula pic.vec <- pic.vec + (match(values[[i]], lev.pic[[i]])-1) * h[i] # construct combinated level labels for the pic legend if( 1 < length(grp.icon) ) { h <- lev.pic; lev.pic <- lev.pic[[length(h)]] for(i in (length(h)-1):1) lev.pic <- sapply(lev.pic, function(x) paste( h[[i]], x, sep = "*") ) } else lev.pic <- unlist(lev.pic) lev.pic <- as.vector(lev.pic) if(is.character(lev.pic)) lev.pic <- substring(lev.pic, 1, pmin(lab.n.max[1], nchar(lev.pic))) # construct the combinated var labels for the pic legend grp.icon.o <- paste(grp.icon.o, collapse = "*") } else { if(missing(icons)) icons <- 0; pic.legend.ok <- FALSE pic.vec <- rep(1, nrow(data.mat)); lev.pic <- 1 } ##:fix icons## #:39 #40: ##fix icons:## data.mat <- cbind(data.mat, .icon = pic.vec); if(verbose) show.obj(grp.icon) if(verbose){ cat("lev.pic"); print(lev.pic); cat("pic.vec", pic.vec); cat("grp.icon.o", grp.icon.o) print("fix icons -- end --------------------") } ##:fix icons## #:40 #49: ##construct jobs by panel packer:## if(verbose) cat("construct jobs by panel packer") xmin <- 0; xmax <- 100; ymin <- 0; ymax <- 100 # initialization of limits ##:construct jobs by panel packer## #:49 #50: ##construct jobs by panel packer:## # "jobs" will store the jobs of printing panels of symbols # no position grouping => one job XINTS <- YINTS <- NULL; n.z <- n.s <- 1 XINTS <- if(0 == length(grp.x)) list(cbind(0, xmin, xmax, mean(xmin + xmax))) YINTS <- if(0 == length(grp.y)) list(cbind(0, ymin, ymax, mean(ymin + ymax))) if( 0 < length(c(grp.x, grp.y)) ){ # idx <- match(unique(c(grp.x, grp.y)), data.mat.cn) # doesn't work idx <- match((c(grp.x, grp.y)), data.mat.cn) h <- data.mat[, idx, drop=FALSE]; cn <- colnames(h) dm.df <- data.frame(h); names(dm.df) <- cn # find number of items of combinations of positioning variables dm.table <- table (dm.df) # contingency table of positioning vars dm.fraction <- data.mat[, ".fraction"] ## 161212 #51: ##define [[table.freq()]]:## table.freq <- function(DM.DF, freq = ".fraction"){ # 161214 # DM.DF :: data frame of a data set # freq :: vector showing the frequencies of the observations of DM.DF # or name of column of DM.DF of frequencies # uses: expand.table.short # pw 161213 freq.name <- if( length(freq) == 1 ) freq else "no freq col" # extract frequencies from DM.DF if( freq.name %in% colnames(DM.DF) ){ freq <- DM.DF[, freq.name] DM.DF <- DM.DF[, colnames(DM.DF) != freq.name, drop = FALSE ] } if( length(freq) == 1 ) freq <- rep(1, length(DM.DF[,1])) # construct empty table DM.TABLE from data frame if( all(0 == ( freq %% 1)) ) return(table(DM.DF)) DM.TABLE <- do.call(table, DM.DF) * 0 # find all combinations of levels level.comb <- cbind(expand.table.short(1 + DM.TABLE)) # initialize new fraction vector counts2 <- rep(0, length(level.comb[,1])) # clear but to slow: # for all rows of DM.DF do # find combination of levels that matches with row of data frame by: # for all combinations of levels compare them with row of data frame # if found add fraction of line i to frac.vec[ii] # counts <- rep(0, length(level.comb[,1])) # for(i in seq( along = DM.DF[,1])){ # for( ii in seq(along = level.comb[,1]) ){ # if( any( DM.DF[i,] != level.comb[ii,] ) ) next # counts[ii] <- counts[ii] + freq[i]; break # } # } # .. cat("DIFF", sum(counts- counts2)) h.dmdf <- sapply(split(unlist(DM.DF), row(DM.DF)), paste, collapse = "|") h.lvlc <- sapply(split(unlist(level.comb), row(level.comb)), paste, collapse = "|") where <- match(h.dmdf, h.lvlc) for(i in 1:length(DM.DF[,1])) counts2[ where[i] ] <- counts2[ where[i] ] + freq[i] DM.TABLE <- DM.TABLE + counts2 return( DM.TABLE ) } ##:define [[table.freq()]]## #:51 DM.TABLE.FREQ <- table.freq(dm.df, dm.fraction) ## 161213 ## print(data.mat[ data.mat[, ".fraction"] < 1,]) ## 161212 ## DM.TABLE <<- dm.table; DM.DF <<- dm.df; FRAC <<- data.mat[ , ".fraction" ] ## 161213 ## print(dm.table); print(dm.df) # set xmin, xmax, ymin, ymax in case of grouping #55: ##find x and y ranges in case of grouping by x or y:## # according data type we choose ranges for x #53: ##set variables [[panel.adjust]] and [[panel.space.factor]]:## panel.adjust <- c(panel.adjust, panel.adjust) [1:2] panel.space.factor <- c(panel.space.factor, panel.space.factor)[1:2] ##:set variables [[panel.adjust]] and [[panel.space.factor]]## #:53 if( 0 < length(grp.x) ){ idx <- match(grp.x[1], names(dm.df)) if(is.factor(h <- dm.df[[ idx ]])) { xmin <- 1; xmax <- 1 + length(levels(h)) xmin <- xmin - panel.adjust[1] xmax <- xmax - panel.adjust[1] } else { hh <- panel.space.factor[1] * 0.5 * (max(h) - min(h)) xmin <- min(h) - hh * 2 * panel.adjust[1] xmax <- max(h) + hh * 2 * (1 - panel.adjust[1]) } } ##:find x and y ranges in case of grouping by x or y## #:55 #56: ##find x and y ranges in case of grouping by x or y:## # according data type we choose ranges for y if( 0 < length(grp.y) ){ idy <- match(grp.y[1], names(dm.df)) if(is.factor(h <- dm.df[[ idy ]])) { ymin <- 1; ymax <- 1 + length(levels(h)) ymin <- ymin - panel.adjust[2] ymax <- ymax - panel.adjust[2] } else { hh <- panel.space.factor[2] * 0.5 * (max(h) - min(h)) ymin <- min(h) - hh * 2 * panel.adjust[2] ymax <- max(h) + hh * 2 * (1 - panel.adjust[2]) } } ##:find x and y ranges in case of grouping by x or y## #:56 #57: ##build job matrix jobs:## if(verbose) cat("build job matrix") # initialize job matrix jobs <- cbind(xmins = xmin, xmaxs = xmax, ymins = ymin, ymaxs = ymax) ##:build job matrix jobs## #:57 #58: ##build job matrix jobs:## # find intervals for each of the x-grouping variables panel.prop.to.size <- rep(panel.prop.to.size, 2) if(0 < length(grp.x)){ for(iv in seq(along=grp.x)){ # find new x partitions jobs.new <- NULL # initialize new job matrix idx <- match(grp.x[iv], names(dm.df)) if(0 < panel.prop.to.size[1]){ ## freq.x <- margin.table(dm.table,1:iv) freq.x <- margin.table(DM.TABLE.FREQ,1:iv) # 161213 d.freq.x <- dim(freq.x); l.d.freq.x <- length(d.freq.x) freq.x <- aperm(freq.x, l.d.freq.x:1) freq.x <- array(freq.x, c(d.freq.x[l.d.freq.x],prod(d.freq.x[-l.d.freq.x]))) } else freq.x <- rbind(rep(dim(dm.table)[idx], nrow(jobs))) for( no in 1:nrow(jobs) ){ # find intervals basing on the limits of big x-interval xints <- find.n.intervals( freq.x[,no], props = panel.prop.to.size[1], jobs[no, 1], jobs[no, 2], panel.space.factor[1] ) XINTS <- c(XINTS, list(cbind(iv, rbind(xints[,c("mins", "maxs", "mids")])))) # add y coordinates to the new intervals found by "find.n.intervals" jobs.new <- rbind(jobs.new, cbind(xints[, c("mins", "maxs"), drop = FALSE], jobs[no, 3], jobs[no, 4])) } jobs <- jobs.new # store new job matrix in jobs } } n.s <- dim(jobs)[1] ##:build job matrix jobs## #:58 #59: ##build job matrix jobs:## # find intervals for each of the y-grouping variables if(0 < length(grp.y)){ for(iv in seq(along=grp.y)){ # refine y range(s) jobs.new <- NULL # initialize new job matrix idy <- match(grp.y[iv], names(dm.df)) # print("HALLO"); print(dm.table) # 161212 if(0 < panel.prop.to.size[2]){ # freq.y <- margin.table(dm.table,(length(grp.x)+1):(length(grp.x)+iv)) freq.y <- margin.table(DM.TABLE.FREQ,(length(grp.x)+1):(length(grp.x)+iv)) d.freq.y <- dim(freq.y); l.d.freq.y <- length(d.freq.y) freq.y <- aperm(freq.y, l.d.freq.y:1) # print(freq.y) # 161212 freq.y <- array(freq.y, c(d.freq.y[l.d.freq.y],prod(d.freq.y[-l.d.freq.y]))) } else freq.y <- rbind(rep(dim(dm.table)[idy], nrow(jobs))) for( no in 1:nrow(jobs) ){ yints <- find.n.intervals(freq.y[, 1 + ((no-1) %% dim(freq.y)[2])], props = panel.prop.to.size[2], jobs[no, 3], jobs[no, 4], panel.space.factor[2] ) YINTS <- c(YINTS, list(cbind(iv, rbind(yints[,c("mins", "maxs", "mids")])))) jobs.new <- rbind(jobs.new, cbind(jobs[no,1], jobs[no,2], yints[, c("mins", "maxs"), drop = FALSE])) } jobs <- jobs.new # store new job matrix in jobs } } #; cat("jobs"); print(head(jobs)) n.z <- dim(jobs)[1]/n.s ##:build job matrix jobs## #:59 colnames(jobs) <- c("xmins", "xmaxs", "ymins", "ymaxs") } else { # one job only: dm.df <- data.frame(rep(1, nrow(data.mat))) dm.table <- table(dm.df) jobs <- cbind(xmins = xmin, xmaxs = xmax, ymins = ymin, ymaxs = ymax) } # cat("jobs:"); print(jobs) ##:construct jobs by panel packer## #:50 #61: ##link jobs to entries of the data matrix:## if(verbose) cat("link jobs to data matrix by icons packer") # find job number of each of the items and of each of the jobs of jobs # step 1: find levels of xy grouping variables levs <- dimnames(dm.table) #; cat("levs"); print(levs) ##:link jobs to entries of the data matrix## #:61 #62: ##link jobs to entries of the data matrix:## # step 2: find job.no of jobs of job matrix by restructing the row indices n.levs <- unlist(lapply(levs, length)) #; cat("n.levs", n.levs) job.no.table <- array(seq(nrow(jobs)), n.levs) # == 1:prod(n.levs) if( 0 < length(job.no.table) ){ job.no.table <- aperm(job.no.table, rev(seq(along=n.levs))) counts <- as.vector(aperm(dm.table, rev(seq(along=n.levs)))) } else { job.no.table <- 1; counts <- 0 } jobs <- cbind(jobs, .job.no = as.vector(job.no.table), counts = counts) #; print(jobs) z <- 1 + floor( (0:( n.s * n.z - 1 )) / n.s); z <- n.z + 1 - z s <- 1 + ( 0:( n.s * n.z - 1) ) %% n.s z <- as.vector(t(matrix(z, n.s, n.z))) s <- as.vector(t(matrix(s, n.s, n.z))) jobs <- cbind(jobs, "row" = z, "col" = s) ##:link jobs to entries of the data matrix## #:62 #63: ##link jobs to entries of the data matrix:## # step 3: find values of variables in level vectors and store position pos.mat <- dm.df for( co in seq(length(dm.df)) ){ values <- dm.df[, co] # values <-> levels comparison pos.mat[,co] <- match(values, levs[[co]]) } ##:link jobs to entries of the data matrix## #:63 #64: ##link jobs to entries of the data matrix:## # step 4: find job number of an item by recoding position infos code <- cumprod(c(1, dim(dm.table)[ -length(dim(dm.table)) ])) job.of.item <- apply(pos.mat, 1, function(it) 1 + sum((it - 1) * code)) if( 0 == length(job.of.item) ) job.of.item <- 1 data.mat <- cbind(data.mat, .job.no = job.of.item) ##:link jobs to entries of the data matrix## #:64 #93: ##construct raw plot and set graphics parameter:## # find over all extrems of panels ----------------------------------- panel.margin <- rep(panel.margin,4)[1:4] h <- if(!exists("XINTS")){ c(min(jobs[, 1]), max(jobs[, 2])) } else { range(XINTS[[1]][, -1]) } xmin <- h[1] - panel.margin[2] * diff(h) xmax <- h[2] + panel.margin[4] * diff(h) h <- if(!exists("YINTS")){ c(min(jobs[, 3]), max(jobs[, 4])) } else { range(YINTS[[1]][, -1]) } ymin <- h[1] - panel.margin[1] * diff(h) ymax <- h[2] + panel.margin[3] * diff(h) ##:construct raw plot and set graphics parameter## #:93 #94: ##construct raw plot and set graphics parameter:## x.lab.side <- y.lab.side <- 0 # ; x.lab.side <- 1; y.lab.side <- 2 lab.side <- unlist(strsplit(lab.side,"")) if("b" %in% lab.side) x.lab.side <- 1; if("l" %in% lab.side) y.lab.side <- 2 if("t" %in% lab.side) x.lab.side <- 3; if("r" %in% lab.side) y.lab.side <- 4 ##:construct raw plot and set graphics parameter## #:94 #95: ##construct raw plot and set graphics parameter:## # set inner margin and initialize raw plot -------------------------- oldpar <- par(no.readonly = TRUE) # 161012 not.save <- c("fig", "fin", "mfcol", "mfg", "mfrow", "oma", "omd", "omi") idx <- ! (names(oldpar) %in% not.save) oldpar <- oldpar[idx] # 161202 par(mar=mar) plot(NULL, xlim = c(xmin, xmax), ylim = c(ymin, ymax), xlab="", ylab="", axes=FALSE) par(usr = c(xmin, xmax, ymin, ymax)) # margin management needs some graphics parameters pin <- par()$pin; cin <- par()$cin ##:construct raw plot and set graphics parameter## #:95 #97: ##construct raw plot and set graphics parameter:## # initialization of some variables delta.rot <- lab.mar1 <- cols.icons.mar <- 0 legend.n.limit <- lab.n.max[3] # limit legend up to 20 # number of color legend labels to great => number of labels to skip between two labels legend.color.skip <- ceiling(length(colors) / legend.n.limit) - 1 # resulting number of color labels legend.n.color <- ceiling(length(colors) / (1 + legend.color.skip)) legend.labels <- c(lev.color, lev.pic) l.w <- max(strwidth (legend.labels, units = "inches")) / cin[2] # unit: lines l.h <- max(strheight(legend.labels, units = "inches")) / cin[2] # unit: lines # find inch height of a character y.per.row.in <- cin[2] * lab.cex * 1.1 # slightly greater for savety ##:construct raw plot and set graphics parameter## #:97 #98: ##construct raw plot and set graphics parameter:## # margin for var x labeling in lines: bottom or top ------------------------- lab.type <- if( substring(lab.type,1,1) == "c" ) "compact" else "expanded" if( 0 < length(grp.x) ){ if(lab.type != "compact"){ lab.mar1 <- length(grp.x) * 3 + 1 } else { lab.mar1 <- length(grp.x) * 1 + 1 + 1 } } # check whether legends are needed and length doesn't exceed legend.n.limit: color.legend.ok <- 0 < length(grp.color) && 1 < length(colors) # CCL pic.legend.ok <- 0 < length(grp.icon) && pic.legend.ok && (!identical(icons[[1]],0)) && length(icons) <= legend.n.limit # compute [[cols.icons.mar]]: margin in text lines to be needed for legends if(color.legend.ok || pic.legend.ok){ # compute cols.icons.mar if( lab.legend == "cols" ){ # legend vertical below plot: 1+number of items cols.icons.mar <- 1 + max( legend.n.color * color.legend.ok, # CCL length(icons) * pic.legend.ok ) } if( lab.legend %in% c("rows", "skewed", "horizontal") ){ # legend parallel #99: ##compute [[delta.rot]] and [[cols.icons.mar]] for rotated legend texts:## # additional space needed by rotation of label texts if( lab.legend == "rows" ) # case 2: 2 lines: labels and var names per legend cols.icons.mar <- 2 * (color.legend.ok + pic.legend.ok) if( lab.legend == "skewed" ){ # case 3: 1 line for symbols per legend delta.rot <- l.w * 0.7071 + l.h * 0.7071 # width*sin(pi/4)*height*cos(pi/4) delta.rot <- delta.rot - .2 - 1 # height -.2 space - 1 space of var name delta.rot <- max( 0, delta.rot) * 1.1 # to increase space a little bit cols.icons.mar <- (2 + delta.rot) * (color.legend.ok + pic.legend.ok) } if( lab.legend == "horizontal" ){ # case 4: 1 line for symbols per legend delta.rot <- l.w + 1 - 1 # string width + 1 space - 1 space of var name # 0.5 space delta.rot <- max( 0, delta.rot) cols.icons.mar <- 2 + delta.rot } ##:compute [[delta.rot]] and [[cols.icons.mar]] for rotated legend texts## #:99 } if( lab.legend == "vertical" ) "relax" # nothing to do } # space for subtitle in cols.icons.mar in lines: space.sub <- if( x.lab.side == 3 ) space.sub <- 1.5 else 0 ##:construct raw plot and set graphics parameter## #:98 #100: ##construct raw plot and set graphics parameter:## # y-space in inches = number of rows * height of row in inches lab.mar1.in <- lab.mar1 * y.per.row.in # margin labels (grp.x) cols.icons.mar.in <- cols.icons.mar * y.per.row.in # margin legend space.sub.in <- space.sub * y.per.row.in # margin subtitle # mar in inches mar1.in <- mar[1] * cin[2] # additional margin bottom mar3.in <- mar[3] * cin[2] # additional margin top # space for plotting: viewport in inches # viewport.in <- y-space for plot - margins - subtitle-space viewport1.in <- pin[2] - mar1.in - mar3.in - cols.icons.mar.in + - lab.mar1.in - space.sub.in # factor to transform inches to user coordinates: (range of y)/(viewport.in) fac.in.usr <- (ymax - ymin) / viewport1.in # y-space in user coordinates y.lab.mar1 <- lab.mar1.in * fac.in.usr # margin labels (grp.x) y.cols.icons.mar <- cols.icons.mar.in * fac.in.usr # margin legend y.space.sub <- space.sub.in * fac.in.usr # margin subtitle y.mar1 <- mar1.in * fac.in.usr # additional margin y.mar3 <- mar3.in * fac.in.usr # additional margin y.delta.rot <- (delta.rot * y.per.row.in) * fac.in.usr ##:construct raw plot and set graphics parameter## #:100 #101: ##construct raw plot and set graphics parameter:## # (left or right) margin for var y labeling: left or right lab.mar2 <- 0 # space in lines used for labels left or right if( 0 < length(grp.y) ){ if(lab.type != "compact"){ lab.mar2 <- length(grp.y) * 3 + 1 } else { lab.mar2 <- length(grp.y) + 1 } } x.per.row.in <- y.per.row.in # find inch height of a rotated character # number of rows * height of row = margin in inches lab.mar2.in <- lab.mar2 * x.per.row.in if( lab.legend == "vertical" ){ # have the legend occur on the right side? legend.right.in <- (l.w + 1) * cin[2] * lab.cex + 1 * x.per.row.in legend.right.in <- max(legend.right.in, strwidth(c(grp.icon.o, grp.color.o), units = "inches") * lab.cex - 0.5 * x.per.row.in) } else legend.right.in <- 0 mar2.in <- mar[2] * cin[2]; mar4.in <- mar[4] * cin[2] viewport2.in <- (pin[1] - mar2.in - mar4.in - lab.mar2.in - legend.right.in) fac.in.usr2 <- (xmax - xmin) / viewport2.in # margin in usr (margin in inch) * fac.in.usr2 x.lab.mar2 <- lab.mar2.in * fac.in.usr2 x.legend.right <- legend.right.in * fac.in.usr2 x.mar2 <- mar2.in * fac.in.usr2; x.mar4 <- mar4.in * fac.in.usr2 ##:construct raw plot and set graphics parameter## #:101 #102: ##construct raw plot and set graphics parameter:## # compute and set over all extremes gxmin <- xmin; gxmax <- xmax; gymin <- ymin; gymax <- ymax gymin <- gymin - y.mar1 - y.cols.icons.mar - y.space.sub gymax <- gymax + y.mar3 gxmin <- gxmin - x.mar2 gxmax <- gxmax + x.mar4 + x.legend.right if(x.lab.side==1) gymin <- gymin - y.lab.mar1 if(x.lab.side==3) gymax <- gymax + y.lab.mar1 if(y.lab.side==2) gxmin <- gxmin - x.lab.mar2 if(y.lab.side==4) gxmax <- gxmax + x.lab.mar2 par(usr = c(gxmin, gxmax, gymin, gymax)) # get some graphics parameter that will be used later mar <- par()$mar; mai <- par()$mai; usr <- par()$usr pin <- par()$pin; cxy <- par()$cxy # compute size of characters for text lines at the top or bottom side y.per.row <- size.mm.to.usr(y.per.row.in * 25.4, FALSE) # compute size of characters left or right of vertical lines x.per.row <- size.mm.to.usr(x.per.row.in * 25.4, TRUE ) ##:construct raw plot and set graphics parameter## #:102 if("icons" %in% packer){ #82: ##pack icons by icons packer:## if(verbose) cat("pack icons") #114: ##find graphics parameters:## # args <- list(...) # in (7) # 170612 if(any(h <- (!(names(args) %in% c("cex")))) ) cat("Remark: '...'-arguments found:", paste(names(args)[h], collapse = " "), "\n") cex.local <- if( "cex" %in% names(args) ) args$cex else 1 # 161012 ##:find graphics parameters## #:114 #68: ##find general pic parameter dependent on scaling case:## #72: ##compute some general variables for finding the x.y.coordinates:## panel.size <- cbind(x = jobs[, 2] - jobs[, 1], y = jobs[, 4] - jobs[, 3]) # if(!panel.prop.to.size) panel.size <- panel.size[1,,drop=FALSE] panel.size.mm <- cbind(size.usr.to.mm(panel.size[,1], horizontal = TRUE), size.usr.to.mm(panel.size[,2], horizontal = FALSE)) panel.size.mm[] <- ifelse(panel.size.mm[] < 1, 1, panel.size.mm[]) n.max <- max(dm.table) if(any(0 < panel.prop.to.size)) n.max <- jobs[, "counts"] icon.space.factor <- c(icon.space.factor, icon.space.factor)[1:2] # show.obj(panel.size); show.obj(panel.size.mm) # show.obj(n.max); print(dm.table); # show.obj(icon.space.factor) ##:compute some general variables for finding the x.y.coordinates## #:72 if( is.na(icon.aspect) ){ #79: ##try to compute asp by mean(icons.asp):## if( !missing(icons )){ if( !(is.numeric(icons) && is.vector(icons)) && !is.function(icons[[1]]) ){ # should be a list if( !is.list(icons) ) icons <- list(icons) # to be shure here if( 0 < length(icons) && is.matrix(icons[[1]])){ d <- unlist(lapply(icons, function(x) dim(x))) d <- matrix(d, nrow = 2) icon.aspect <- mean(d[2,])/ mean(d[1,]) } # mean width / mean height } } ##:try to compute asp by mean(icons.asp)## #:79 } ## case 1: ------------------------------ icon.cex defined: size of icons fix if( !is.na(icon.cex)){ if(verbose) cat("scaling case 1") if( is.na(icon.aspect) ) icon.aspect <- 1 if( is.na(icon.stack.len) ){ #73: ##case 1: compute icon.stack.len by panel size and icon.cex:## if(verbose) cat("scaling case 1") div.factor <- (1 - icon.space.factor[2 - icon.horizontal]) * (if(icon.horizontal) 1 else icon.aspect) pic.extension.mm <- icon.cex / div.factor panel.extension.mm <- panel.size.mm[, 2 - icon.horizontal] # is vector icon.stack.len <- pmax(1, floor(panel.extension.mm / pic.extension.mm)) # print(jobs) # show.obj(panel.extension.mm); show.obj(pic.extension.mm) # show.obj(icon.stack.len) ##:case 1: compute icon.stack.len by panel size and icon.cex## #:73 } n.stacks <- ceiling(n.max / icon.stack.len) } ##:find general pic parameter dependent on scaling case## #:68 #69: ##find general pic parameter dependent on scaling case:## ## case 2: ---- icon.cex undefined and icon.aspect defined: ## size of icons scalable if( is.na(icon.cex) && !is.na(icon.aspect) ){ if(verbose) cat("scaling case 2") if( !is.na(icon.stack.len) ){ # icon.stack.len defined n.stacks <- ceiling(n.max / icon.stack.len) #75: ##case 2: compute icon.cex by icon.stack.len and n.stacks:## if(verbose) cat("case 2 -- not optim") if(icon.horizontal){ # find icon.cex for x and y direction cex.raw <- min(a1 <- panel.size.mm[, 1] / icon.stack.len, a2 <- panel.size.mm[, 2] / n.stacks * icon.aspect * (1 - icon.space.factor[2]) / (1 - icon.space.factor[1])) } else { cex.raw <- min(panel.size.mm[, 2] / icon.stack.len * icon.aspect * (1 - icon.space.factor[2]) / (1 - icon.space.factor[1]), panel.size.mm[, 1] / n.stacks) } icon.cex <- cex.raw * (1 - icon.space.factor[1]) ##:case 2: compute icon.cex by icon.stack.len and n.stacks## #:75 } else { # icon.stack.len undefined #74: ##case 2: compute icon.cex, icon.stack.len and n.stacks by optimization:## if(verbose) cat("case 2 optim") panel.size.mm[] <- ifelse(panel.size.mm[] < 1, 1, panel.size.mm[]) # ----- find initial icon.stack.len ----- if(icon.horizontal){ # floor is more save than ceiling! icon.stack.len <- floor( sqrt( panel.size.mm[, 1] / panel.size.mm[, 2] * (1 - icon.space.factor[1]) / (1 - icon.space.factor[2]) / icon.aspect * n.max ) ) } else { icon.stack.len <- floor( sqrt( panel.size.mm[, 2] / panel.size.mm[, 1] * (1 - icon.space.factor[2]) / (1 - icon.space.factor[1]) * icon.aspect * n.max ) ) } icon.stack.len <- pmax(1, icon.stack.len) # ----- find suitable cex.raw ----- # floor() may be suboptimal, therefore check some icon.stack.len++ cex.raw <- 0 for(i in 1:5){ # 160930 old solution by exchange 5 by 2 icon.stack.len <- icon.stack.len + (1 < i) n.stacks <- ceiling(n.max / icon.stack.len) if(icon.horizontal){ # find icon.cex for x and y direction and their minima cex.raw1 <- pmin(panel.size.mm[, 1] / icon.stack.len, panel.size.mm[, 2] / n.stacks * icon.aspect * (1 - icon.space.factor[2]) / (1 - icon.space.factor[1])) } else { cex.raw1 <- pmin(panel.size.mm[, 2] / icon.stack.len * icon.aspect * (1 - icon.space.factor[2]) / (1 - icon.space.factor[1]), panel.size.mm[, 1] / n.stacks) } cex.raw <- pmax(cex.raw, cex.raw1) } idx <- which.min(cex.raw)[1] icon.cex <- cex.raw[idx] * (1 - icon.space.factor[1]) * 0.999 # to be numerical safe # ----- find final icon.stack.len ----- # now icon.cex is defined and icon.stack.len can be found as in case 1 #73: ##case 1: compute icon.stack.len by panel size and icon.cex:## if(verbose) cat("scaling case 1") div.factor <- (1 - icon.space.factor[2 - icon.horizontal]) * (if(icon.horizontal) 1 else icon.aspect) pic.extension.mm <- icon.cex / div.factor panel.extension.mm <- panel.size.mm[, 2 - icon.horizontal] # is vector icon.stack.len <- pmax(1, floor(panel.extension.mm / pic.extension.mm)) # print(jobs) # show.obj(panel.extension.mm); show.obj(pic.extension.mm) # show.obj(icon.stack.len) ##:case 1: compute icon.stack.len by panel size and icon.cex## #:73 n.stacks <- ceiling(n.max / icon.stack.len) if(verbose) cat("icon.cex", icon.cex, "idx", idx, icon.stack.len) ##:case 2: compute icon.cex, icon.stack.len and n.stacks by optimization## #:74 } } ##:find general pic parameter dependent on scaling case## #:69 #70: ##find general pic parameter dependent on scaling case:## ## case 3: ------------------- icon.cex and icon.aspect undefined: ## x and y scalable if( is.na(icon.cex) && is.na(icon.aspect) ){ if(verbose) cat("scaling case 3") if( is.na(icon.stack.len) ) icon.stack.len <- pmax(1,n.max) n.stacks <- pmax(1,ceiling(n.max / icon.stack.len)) #76: ##case 3: compute icon.cex, asp:## ## cat("case 3") if(icon.horizontal){ # find icon.cex for x and y direction cex.raw <- min(panel.size.mm[, 1] / icon.stack.len) cex.y.raw <- min(panel.size.mm[, 2] / n.stacks) } else { cex.raw <- min(panel.size.mm[, 1] / n.stacks) cex.y.raw <- min(panel.size.mm[, 2] / icon.stack.len) } icon.cex <- cex.raw * (1 - icon.space.factor[1]) icon.aspect <- icon.cex / (cex.y.raw * (1 - icon.space.factor[2])) ##:case 3: compute icon.cex, asp## #:76 } ##:find general pic parameter dependent on scaling case## #:70 #83: ##compute x.y.coordinates according to space and panel.adjust:## # step 1: find size of a standard picture element dx.pic <- size.mm.to.usr(icon.cex, horizontal = TRUE) dx.pic.area <- dx.pic / (1 - icon.space.factor[1]) dy.pic <- size.mm.to.usr(icon.cex / icon.aspect, horizontal = FALSE) dy.pic.area <- dy.pic / (1 - icon.space.factor[2]) ##:compute x.y.coordinates according to space and panel.adjust## #:83 #84: ##compute x.y.coordinates according to space and panel.adjust:## # step 2: loop over icons sta.type <- icon.stack.type; job.plot.cmds <- NULL data.mat <- cbind(data.mat, .x0 = 0, .y0 = 0, .x1 = 0, .y1 = 0) data.mat <- data.frame(data.mat) #### !!!!!!!!!!!!!!!!!!! for(no in seq(nrow(jobs))){ idx <- data.mat[,".job.no"] == jobs[no,".job.no"] # find items of jobs.no if(1 < length(icon.stack.type)){ # if icon.stack.type is a vectir use one element sta.type <- icon.stack.type[1 + ((no-1) %% length(icon.stack.type))] } sta.type <- unlist(strsplit(sta.type,"")) if(any(idx)){ idx.icon.stack.len <- c(1,no)[1+(1 < length(icon.stack.len))] xy.color.icons <- place.icons( # elements jobs[no,, drop = FALSE], data.mat[idx, c(".icon", ".color", ".fraction"), drop = FALSE], icon.stack.type = sta.type, icon.stack.len = icon.stack.len[ idx.icon.stack.len ], frame = FALSE, verbose = verbose ) # verbose for debugging h <- list(xy.color.icons); names(h) <- as.character(jobs[,".job.no"][no]) job.plot.cmds <- c(job.plot.cmds, h); h <- c(".x0",".y0",".x1",".y1") data.mat[idx, h] <- xy.color.icons[, h] } else { "create empty panel" } } idx <- 2 - icon.horizontal h <- (dx.pic.area * cbind(icon.stack.len, n.stacks)[,idx]) > (panel.size[,1]*1.01); h <- h[!is.na(h)] if( 0 < length(h) && any(h) ) cat("WARNING: horizontal space of panels too small!\n") h <- (dy.pic.area * cbind(n.stacks, icon.stack.len)[,idx]) > (panel.size[,2]*1.01); h <- h[!is.na(h)] if( 0 < length(h) && any(h) ) cat("WARNING: vertical space of panels too small!\n") ##:compute x.y.coordinates according to space and panel.adjust## #:84 #106: ##execute plot statements of [[iconplot]]:## #107: ##prepare set of pictograms for plotting: [[pic.tr.set]]:## color.used <- if(0>fun<< #352: ##generate icons by [[call.icon.generator()]]:## pic <- unlist(pic); fn <- pic[[1]]; color <- pic[[2]] dxy <- c(cmds$.x1[pic.no], cmds$.y1[pic.no]) - c(cmds$.x0[pic.no], cmds$.y0[pic.no]) idx <- which(data.mat[, ".job.no" ] == panel.no)[pic.no] # additional infos for modifying pic.args <- data.mat[idx, grp.design]; names(pic.args) <- NULL # cat("==========="); print(grp.design); print(data.mat[idx, grp.design]) call.icon.generator(fn, xy = cbind(cmds$.x0[pic.no], cmds$.y0[pic.no]), dxy = dxy, color = color, pic.args = pic.args, ...) ##:generate icons by [[call.icon.generator()]]## #:352 } else { if( !(substring(unlist( pic )[1],1,1) %in% 0:9) ){# case generator >>name<< #352: ##generate icons by [[call.icon.generator()]]:## pic <- unlist(pic); fn <- pic[[1]]; color <- pic[[2]] dxy <- c(cmds$.x1[pic.no], cmds$.y1[pic.no]) - c(cmds$.x0[pic.no], cmds$.y0[pic.no]) idx <- which(data.mat[, ".job.no" ] == panel.no)[pic.no] # additional infos for modifying pic.args <- data.mat[idx, grp.design]; names(pic.args) <- NULL # cat("==========="); print(grp.design); print(data.mat[idx, grp.design]) call.icon.generator(fn, xy = cbind(cmds$.x0[pic.no], cmds$.y0[pic.no]), dxy = dxy, color = color, pic.args = pic.args, ...) ##:generate icons by [[call.icon.generator()]]## #:352 } else { # case central symbol pic <- unlist(pic); pic.color <- c(pic.color, pic[2]) pic.rect <- rbind(pic.rect,c(cmds$.x0[pic.no], cmds$.y0[pic.no], cmds$.x1[pic.no], cmds$.y1[pic.no], as.numeric(pic[1]))) } } } if(icon.frame) rect(cmds$.x0[pic.no], cmds$.y0[pic.no], cmds$.x1[pic.no], cmds$.y1[pic.no]) } #113: ##plot rectangles or symbols:## if( 0 < length(pic.rect) ){ # plot boxes instead of raster images rect(pic.rect[,1],pic.rect[,2],pic.rect[,3],pic.rect[,4], border = if(icon.frame) NULL else NA, col = ifelse( 0 == pic.rect[,5], pic.color, "white" ) ) h <- abs( (pic.rect[,1] - pic.rect[,3]) / (pic.rect[,2] - pic.rect[,4] ))/ icon.aspect * fac.in.usr/fac.in.usr2 # 161010 h <- pmin(h, 1/h)^0.5 # resizing of fractional elements # 161010 points( 0.5 * (pic.rect[,1] + pic.rect[,3]), # characters instead boxes 0.5 * (pic.rect[,2] + pic.rect[,4]), col = pic.color, pch = 1 + ((pic.rect[,5] - 1) %% 18), # maximal 18 symbols available cex = ifelse( 0 == pic.rect[,5], 0, icon.cex/3 * h) ) #161012 } ## cat("fac.in", fac.in.usr, fac.in.usr2) ##:plot rectangles or symbols## #:113 } } ##:execute plot statements of [[iconplot]]## #:106 ##:pack icons by icons packer## #:82 } if("numbers" %in% packer || "panel.legend" %in% packer || 0 < length(panel.text)){ #89: ##pack numbers, legends or texts into panels:## if(verbose) cat("pack numbers or text into panels by packers") # find text positions of panels n <- nrow(jobs) #; print(data.mat); print(jobs[1:3,]) x0 <- 0.5 * (jobs[, 1] + jobs[, 2]) y0 <- 0.5 * (jobs[, 3] + jobs[, 4]) sta.type <- unlist(strsplit(icon.stack.type[1],"")) if("b" %in% sta.type) y0 <- jobs[, 4] if("t" %in% sta.type) y0 <- jobs[, 3] if("l" %in% sta.type) x0 <- jobs[, 2] if("r" %in% sta.type) x0 <- jobs[, 1] job.text.cmds <- cbind(.x0=x0, .y0=y0) txt <- NULL # compute of numbers of panels if( "numbers" %in% packer ){ n.job <- 0 * x0 for(no in seq(nrow(jobs))){ idx <- data.mat[, ".job.no"] == jobs[no, ".job.no"] n.job[no] <- round(sum(data.mat[idx, ".fraction"]), digits = 2) } txt <- n.job } if( 0 < length(panel.text) ){ p.text <- c(as.vector(panel.text), rep("", n))[1:n] txt <- paste(p.text, txt) } if( "panel.legend" %in% packer ){ # compose labels combination of panels p.text <- "X" for( i in seq(along = grp.y) ){ h <- substring(levels(data.mat[ , grp.y[i] ]), 1, lab.n.max[1]) p.text <- as.vector(t(outer(p.text, h, FUN = paste, sep = "*" ))) } for( i in seq(along = grp.x) ){ h <- substring(levels(data.mat[ , grp.x[i] ]), 1, lab.n.max[1]) p.text <- as.vector(t(outer( p.text, h, FUN = paste, sep = "*" ))) } p.text <- substring(p.text, 3) # p.text <- letters[1:n] txt <- paste(p.text, txt) } panel.text <- txt #116: ##execute text statements of [[iconplot]]:## #114: ##find graphics parameters:## # args <- list(...) # in (7) # 170612 if(any(h <- (!(names(args) %in% c("cex")))) ) cat("Remark: '...'-arguments found:", paste(names(args)[h], collapse = " "), "\n") cex.local <- if( "cex" %in% names(args) ) args$cex else 1 # 161012 ##:find graphics parameters## #:114 # 161012 adj <- c(0.5, 0.5) #if("b" %in% sta.type) adj[2] <- 1; if("t" %in% sta.type) adj[2] <- 0 #if("l" %in% sta.type) adj[1] <- 1; if("r" %in% sta.type) adj[1] <- 0 if("b" %in% sta.type) adj[2] <- 0.2; if("t" %in% sta.type) adj[2] <- 0.8 if("l" %in% sta.type) adj[1] <- 0.5; if("r" %in% sta.type) adj[1] <- 0.5 if(exists("job.text.cmds") && 0 < length(job.text.cmds) ){ # pack panel.text if( 0 < length(panel.text) ){ text(job.text.cmds[,".x0"], job.text.cmds[,".y0"], panel.text, cex = cex.local, adj = adj) job.text.cmds <- NULL } } ##:execute text statements of [[iconplot]]## #:116 ##:pack numbers, legends or texts into panels## #:89 } if("stars" %in% packer){ #91: ##pack stars only:## if(verbose) cat("pack stars by stars packer") # number of jobs n <- nrow(jobs) # mids of panels x0 <- 0.5 * (jobs[, 1] + jobs[, 2]); y0 <- 0.5 * (jobs[, 3] + jobs[, 4]) # sizes of panels in x and y mm.h <- size.usr.to.mm(jobs[, 2] - jobs[, 1], horizontal = TRUE) mm.v <- size.usr.to.mm(jobs[, 4] - jobs[, 3], horizontal = FALSE) # suitable length of line segments mm <- min( mm.h, mm.v ) * 0.5 if( is.na(icon.cex) ) icon.cex <- 1 usr.h <- size.mm.to.usr(mm, horizontal = TRUE) * icon.cex usr.v <- size.mm.to.usr(mm, horizontal = FALSE) * icon.cex sta.type <- unlist(strsplit(icon.stack.type[1],"")) if("b" %in% sta.type) y0 <- jobs[, 3] + usr.v if("t" %in% sta.type) y0 <- jobs[, 4] - usr.v if("l" %in% sta.type) x0 <- jobs[, 1] + usr.h if("r" %in% sta.type) x0 <- jobs[, 2] - usr.h pi2 <- 2 * pi; shrink <- 1 - icon.space.factor for(no in seq(nrow(jobs))){ # find elements of panel idx <- data.mat[, ".job.no"] == jobs[no, ".job.no"] # find fracs fracs <- rev(data.mat[idx, ".fraction"]) # next if nothing to do if( (n <- length(fracs)) == 0) next # end points of line segments x <- sin(- pi2 * (1:n)/n) * usr.h * shrink * fracs + x0[no] y <- cos( pi2 * (1:n)/n) * usr.v * shrink * fracs + y0[no] # color of line segments color.idx <- data.mat[idx, ".color"] # plot cmds segments(rep(x0[no], n), rep(y0[no], n), x, y, col = colors[color.idx]) points(x0[no], y0[no], col = "black", cex = 1) } ##:pack stars only## #:91 } #110: ##finish plot:## if(verbose) cat("finish pictogram plot") if(panel.frame) rect(jobs[,"xmins"], jobs[,"ymins"], jobs[,"xmaxs"], jobs[,"ymaxs"]) #111: ##add title:## if( missing(main) ) main <- paste(if("icons" %in% packer) "iconplot of", data.call) # if( nchar(main) > 75 ) main <- substring(main,1,75) # 160927 if( x.lab.side == 3 ){ mtext( main, side = 1, line = -0.5, cex = 1.4 * (lab.cex + (lab.cex < 0.4)) ) } else { title( paste("\n", sep = "", main )) # 160927 } ##:add title## #:111 if( 0.4 <= lab.cex ){ #119: ##add x labels:## lab.color <- c(lab.color, lab.color)[1:2] if( !is.null(XINTS) && x.lab.side %in% c(1,3)){ # create matrix of intervals of separation levels 0, 1, .. INTS <- c(list(rbind(c(0, xmin, xmax, .5*(xmin+xmax)))), unique(XINTS)) INTS <- matrix(unlist(lapply(INTS, t)), nrow=4) rownames(INTS) <- c("no", "mins", "maxs", "mids") ix.set <- rev(seq(along=grp.x)) for(ix in ix.set){ # loop for labels over variables #120: ##put variable name and labels of levels of [[var ix]]:## # get x positions ------------------------------------- var.name <- grp.x[ix] # var name of no ix x.prior <- INTS["mids", INTS["no",]==ix-1, drop=FALSE] # pos of var name: no ix-1 x.current <- INTS["mids", INTS["no",]==ix, drop=FALSE] # pos of labels: no ix x.1.2 <- INTS[2:3, INTS[1,] ==ix-1, drop=FALSE] # separation lines of ix-1 ##:put variable name and labels of levels of [[var ix]]## #:120 #121: ##put variable name and labels of levels of [[var ix]]:## # get y positions: find line numbers and transform them if(lab.type != "compact"){ line.no <- lab.mar1 - 3 * ix + 1 } else { line.no <- lab.mar1 - ix + 1 - 1 } b.t.idx <- 1 + (x.lab.side == 3) p.p.idx <- 1 + (0 == lab.parallel[1]) #161007 fac.side <- c(-1, 1)[b.t.idx] y <- c(ymin, ymax)[b.t.idx] + fac.side * y.per.row * line.no y.size.box.h <- 1.1 * y.per.row y.pos.var.name <- y + fac.side * y.per.row * 0.5 y.pos.levels <- y - fac.side * y.per.row * 0.5 * c(1, .3)[p.p.idx] # find adjustments ------------------------------------- adj.var.name <- c(0.5, 0.5) if( lab.type == "expanded" & lab.parallel[1] == 0 & 1 < ix ) adj.var.name[1] <- 1.3 # new adjust to prevent overlapping rotate.levels <- lab.parallel[1] == 0 | (lab.parallel[1] == 0.5 & length(ix.set) == ix) adj.levels <- c(c(0.5, c(0.0,1)[b.t.idx])[1 + rotate.levels], 0.5) ## cat("X: adj.levels", adj.levels, " rotate.levels", rotate.levels) ##:put variable name and labels of levels of [[var ix]]## #:121 #123: ##put variable name and labels of levels of [[var ix]]:## # plot light boxes ------------------------------------- if(1 <= lab.boxes && ix <= length(grp.x)) rect(x.1.2[1,], col = lab.color[1], border = 0, xpd=NA, y + fac.side * y.size.box.h * (ix == 1 | lab.type != "compact"), x.1.2[2,], y - fac.side * y.size.box.h * (2 <= lab.boxes)) ##:put variable name and labels of levels of [[var ix]]## #:123 #124: ##put variable name and labels of levels of [[var ix]]:## # plot separation line --------------------------------- if(ix <= length(grp.x)) segments(x.1.2[1,], y, x.1.2[2,], y, xpd=NA, col=lab.color[2], lwd = if( 0 == (lab.boxes %% 1) ) 1 else 10*(lab.boxes%%1)) ##:put variable name and labels of levels of [[var ix]]## #:124 #125: ##put variable name and labels of levels of [[var ix]]:## # plot var names --------------------------------------- if( 0 < length(var.name) && !is.na(var.name) && ( ix == 1 | lab.type != "compact") ){ txt <- if( lab.type == "compact" ) paste(grp.x.o, collapse = " * ") else grp.x.o[ix] text(txt, x = x.prior, y = y.pos.var.name, # col = 2+ix-1, cex = lab.cex, adj = adj.var.name, xpd=NA) } ##:put variable name and labels of levels of [[var ix]]## #:125 #126: ##put variable name and labels of levels of [[var ix]]:## # plot labels of levels -------------------------------- if( 0 < length(var.name) && !is.na(var.name) ){ # find labels of var name if(is.factor(h <- data.mat[, var.name])) lev <- levels(h) else lev <- sort(unique(h)) idx <- seq(1, (h <- length(x.current)), by = max(1, ceiling(h/lab.n.max[2]))) lev.h <- rep(lev, ceiling(h/length(lev))) ### lab.char.max lev.h <- substring(lev.h, 1, pmin(lab.n.max[1], nchar(lev.h))) text(lev.h[idx], x = x.current[idx], y = y.pos.levels, adj = adj.levels, srt = 90 * rotate.levels, xpd=NA, cex = lab.cex) ## , col = "red") # points(x = x.current[idx], x = rep(y.pos.levels, length(idx))) } ##:put variable name and labels of levels of [[var ix]]## #:126 } } ##:add x labels## #:119 #129: ##add y labels:## if(!is.null(YINTS) && y.lab.side %in% c(2,4)){ # create matrix of intervals of separation levels 0, 1, .. INTS <- c(list(rbind(c(0, ymin, ymax, .5*(ymin+ymax)))), unique(YINTS)) INTS <- matrix(unlist(lapply(INTS, t)), nrow=4) rownames(INTS) <- c("no", "mins", "maxs", "mids") iy.set <- rev(seq(along=grp.y)) for(iy in iy.set) { # loop over number of variables for labels #130: ##put var name and levels on left or right margin of [[var iy]]:## # get y positions -------------------------------------- var.name <- grp.y[iy] # var name of no iy y.prior <- INTS["mids", INTS["no",]==iy-1, drop=FALSE] # pos of var name: no iy-1 y.current <- INTS["mids", INTS["no",]==iy, drop=FALSE] # pos of labels: no iy y.1.2 <- INTS[2:3, INTS[1,] ==iy-1, drop=FALSE] # separation lines of iy-1 if(lab.type != "compact"){ line.no <- lab.mar2 - 3 * iy + 1 } else { line.no <- lab.mar2 - iy + 1 - 1 } #??? l.r.idx <- 1 + (y.lab.side == 4) p.p.idx <- 1 + (0 == lab.parallel[2]) fac.side <- c(-1, 1)[l.r.idx] x <- c(xmin, xmax)[l.r.idx] + fac.side * x.per.row * line.no x.size.box.h <- 1.1 * x.per.row x.pos.var.name <- x + fac.side * x.per.row * 0.5 x.pos.levels <- x - fac.side * x.per.row * 0.5 * c(1, .3)[p.p.idx] # adjustments ----------------------------------------- adj.var.name <- c(0.5, 0.5) if( lab.type == "expanded" & lab.parallel[2] == 0 & 1 < iy ) adj.var.name[1] <- 1.3 # new adjust to prevent overlapping horizontal.levels <- lab.parallel[2] == 0 | (lab.parallel[2] == 0.5 & length(iy.set) == iy) adj.levels <- c(c(0.5, c(0.0,1)[l.r.idx])[1 + horizontal.levels], 0.5) ##:put var name and levels on left or right margin of [[var iy]]## #:130 #131: ##put var name and levels on left or right margin of [[var iy]]:## # plot light boxes ------------------------------------ if( 1 <= lab.boxes && iy <= length(grp.y)) rect( x + fac.side * x.size.box.h * (lab.type != "compact" | iy == 1), y.1.2[1,], x - fac.side * x.size.box.h * (2 <= lab.boxes), y.1.2[2,], col = lab.color[1], border = 0, xpd=NA) # plot white separation line -------------------------- if(iy <= length(grp.y)) segments(x, y.1.2[1,], x, y.1.2[2,], xpd=NA, col=lab.color[2], lwd = if( 0 == (lab.boxes %% 1) ) 1 else 10 * (lab.boxes %% 1)) # plot var names -------------------------------------- if( 0 < length(var.name) && !is.na(var.name) && ( iy == 1 | lab.type != "compact") ){ txt <- if( lab.type == "compact" ) paste(grp.y.o, collapse = " * ") else grp.y.o[iy] text(txt, y = y.prior, x = x.pos.var.name, # col = 2+iy-1, cex = lab.cex, adj = adj.var.name, xpd=NA, srt = 90) } # plot labels of levels ------------------------------- if( 0 < length(var.name) && !is.na(var.name)){ # put labels of levels if(is.factor(h <- data.mat[, var.name])) lev <- levels(h) else lev <- sort(unique(h)) idx <- seq(1, (h <- length(y.current)), by = max(1, ceiling(h/lab.n.max[2]))) lev.h <- rep(lev, ceiling(h/length(lev))) lev.h <- substring(lev.h, 1, pmin(lab.n.max[1], nchar(lev.h))) text(lev.h[idx], y = y.current[idx], x = x.pos.levels, adj = adj.levels, srt = 90 - 90 * horizontal.levels, xpd=NA, cex = lab.cex) # col=2+iy-1, # points(y = y.current[idx], x = rep(x.pos.levels, length(idx))) } ##:put var name and levels on left or right margin of [[var iy]]## #:131 } } ##:add y labels## #:129 #134: ##add cols and icons legends:## y0 <- ymin - y.lab.mar1 - y.mar1 # labels bottom side if(x.lab.side == 3) y0 <- ymin - y.mar1 # level top side x0 <- gxmin + 2 * x.per.row; dx <- x.per.row * .7; dy <- y.per.row * .7 if( lab.legend == "vertical" ){ y0 <- ymax - y.per.row; x0 <- xmax + x.per.row if(y.lab.side == 4) x0 <- x0 + x.lab.mar2 + 0.5 * dx } ##:add cols and icons legends## #:134 #135: ##add cols and icons legends:## if( lab.legend %in% c("cols", "vertical") ){ # pic legend upright to x if( pic.legend.ok ){ # icons legend in case of "cols" or "vertical" -------------------- text(x0 - x.per.row, y0 - 0.5 * y.per.row, adj = c(0,0), grp.icon.o, cex = lab.cex, xpd = NA) y <- y0.label.line <- y0 - 0.5 * y.per.row if(length(icons) <= legend.n.limit){ for(i in seq(along=icons)){ if( is.na(lev.pic[i]) ) next pic <- icons[[ i ]]; y <- y - y.per.row #136: ##plot symbol for pic legend, not parallel case:## if(is.matrix(pic)){ # no recoloring if(!is.null(grp.color) || !identical(1, colors)) pic <- greys.to.col.pic(pic, "#555555", simple = simple) rasterImage(pic, x0, y, x0+dx, y+dy, interpolate = icon.draft, xpd = NA) } else { if( is.function( unlist(pic) ) || is.character( unlist(pic) )){ # pic by function pic <- unlist(pic); fn <- pic dxy <- c(dx, dy) # call.icon.generator(fn, xy = cbind(x0, y), dxy = dxy, color = "darkgrey") #180312 : call.icon.generator(fn, xy = cbind(x0, y), dxy = dxy, color = "grey", pic.args = pic.args) } else { pic <- unlist(pic) points( 0.5*(x0 + (x0 + dx)), 0.5 * (y + (y + dy)), xpd =NA, cex = 1*lab.cex, pch = as.numeric(pic[1]), col = "black" ) } } ##:plot symbol for pic legend, not parallel case## #:136 text(x0 + 1 * x.per.row, y, adj = c(0,0), lev.pic[i], cex = lab.cex, xpd = NA) if(icon.frame) rect(x0, y, x0 + dx, y + dy, xpd=NA) } } if( lab.legend == "cols") x0 <- (gxmin + gxmax) / 2 + x.per.row if( lab.legend == "vertical") y0 <- y0 - (2 + length(icons)) * y.per.row } #137: ##add color legend, not parallel case:## # color legend in case of "cols" or "vertical" ------------------------------ if(0 < length(grp.color) && color.legend.ok ){ # color legend text(x0 - x.per.row, y0 - 0.5 * y.per.row, adj = c(0,0), grp.color.o, cex = lab.cex, xpd = NA) y <- y0.label.line <- y0 - 0.5 * y.per.row if( length(colors) > legend.n.color ) ## CCL cat("Remark: some color legend labels skipped\n") color.labels.idx.set <- seq(1, length(colors), by = legend.color.skip + 1) # CCL for(i in seq(along=colors)) { y <- y - y.per.row / (1 + legend.color.skip) rect(x0, y, x0 + dx, y + dy, col = colors[i], xpd=NA, border = NA) if( is.na(lev.color[i]) ) next if( i %in% color.labels.idx.set ) # CCL text(x0 + 1 * x.per.row, y, adj = c(0,0), lev.color[i], cex = lab.cex, xpd = NA) if(icon.frame) rect(x0, y, x0 + dx, y + dy, xpd=NA) } } ##:add color legend, not parallel case## #:137 } ##:add cols and icons legends## #:135 #138: ##add cols and icons legends:## if( lab.legend %in% c("rows", "skewed", "horizontal") ){ # legend parallel if( pic.legend.ok ){ # icons labels if(length(icons) <= legend.n.limit){ text(x0 - x.per.row, y0 - 0.5 * y.per.row, grp.icon.o, cex = lab.cex, adj = c(0, 0), xpd = NA ) # variable name y0.label.line <- y0 - (y.delta.rot + y.per.row) - 0.5 * y.per.row res <- find.xlab.coor( lev.pic, y0.label.line ) xr0 <- res[,"xr0"]; xr1 <- res[,"xr1"] yr0 <- res[,"yr0"]; yr1 <- res[,"yr1"] xlab <- res[,"xlab"]; ylab <- res[,"ylab"] for(i in seq(along=icons)) { if( is.na(lev.pic[i]) ) next pic <- icons[[ i ]] #139: ##plot symbol for pic legend, parallel layout:## if(is.matrix(pic)){ pic <- greys.to.col.pic(pic, "#555555", simple = simple) rasterImage(pic, xr0[i], yr0[i], xr1[i], yr1[i], interpolate = icon.draft) } else { if( is.function( unlist(pic) ) || is.character( unlist(pic) ) ){ pic <- unlist(pic); fn <- pic dxy <- c(dx, dy) # call.icon.generator(fn, xy = cbind(xr0[i], yr0[i]), dxy=dxy, color = "darkgrey") #180312 : call.icon.generator(fn, xy = cbind(xr0[i], yr0[i]), dxy = dxy, color = "grey", pic.args = pic.args) } else { pic <- unlist(pic) points( 0.5*(xr0[i] + xr1[i]), 0.5 * (yr0[i] + yr1[i]), cex = 1*lab.cex, pch = as.numeric(pic[1]), col = "black") } } ##:plot symbol for pic legend, parallel layout## #:139 } if(icon.frame) rect(xr0, yr0, xr1, yr1, xpd=NA) } srt <- c(0, 45, 90)[ which( lab.legend == c("rows","skewed","horizontal")) ] text(xlab, ylab, adj = c(0,0), xpd = NA, lev.pic, cex = lab.cex, srt = srt ) # increment of x0 and y0 in case of a color legend if( lab.legend == "rows") y0 <- y0 - y.per.row * 2 if( lab.legend == "skewed") y0 <- y0 - y.delta.rot - y.per.row * 2 if( lab.legend == "horizontal") x0 <- xr1[length(icons)] + (1 + nchar(grp.icon.o)/3) * x.per.row } #140: ##add color legend, parallel layout:## # color legend in case of "rows", "skewed" or "horizontal" if(0 < length(grp.color) && color.legend.ok ){ # color labs text(x0 - x.per.row, y0 - 0.5 * y.per.row, grp.color.o, cex = lab.cex, adj = c(0, 0), xpd = NA ) # variable name y0.label.line <- y0 - (y.delta.rot + y.per.row) - 0.5 * y.per.row idx <- seq(1, length(colors), by = legend.color.skip + 1) if( lab.legend == "rows"){ res <- find.xlab.coor( lev.color[idx], y0.label.line, skip = 0 ) xr0 <- res[,"xr0"]; xr1 <- res[,"xr1"]; yr0 <- res[,"yr0"]; yr1 <- res[,"yr1"] xlab <- res[,"xlab"]; ylab <- res[,"ylab"] rect(xr0, yr0, xr1, yr1, col = colors[idx], xpd=NA, border = NA) srt <- c(0, 45, 90)[ which( lab.legend == c("rows", "skewed", "horizontal")) ] text(xlab, ylab, adj = c(0,0), xpd = NA, lev.color[idx], cex = lab.cex, srt = srt) } else { res <- find.xlab.coor( lev.color, y0.label.line, skip = legend.color.skip ) xr0 <- res[,"xr0"]; xr1 <- res[,"xr1"]; yr0 <- res[,"yr0"]; yr1 <- res[,"yr1"] xlab <- res[,"xlab"]; ylab <- res[,"ylab"] rect(xr0, yr0, xr1, yr1, col = colors, xpd=NA, border = NA) srt <- c(0, 45, 90)[ which( lab.legend == c("rows", "skewed", "horizontal")) ] text(xlab[idx], ylab[idx], adj = c(0,0), xpd = NA, lev.color[idx], cex = lab.cex, srt = srt) } if(icon.frame) rect(xr0, yr0, xr1, yr1, xpd=NA) if( length(colors) > legend.n.color ) cat("Remark: some color legend labels skipped\n") } ##:add color legend, parallel layout## #:140 } ##:add cols and icons legends## #:138 #155: ##add cols and icons legends:## if(verbose) text( usr[2], usr[3], arguments, adj = c(1,0), xpd=NA, cex = 0.7) ##:add cols and icons legends## #:155 } #150: ##reinstall graphics old parameter:## newpar <- par(no.readonly = TRUE) par(oldpar) ##:reinstall graphics old parameter## #:150 ##:finish plot## #:110 #151: ##construct output:## jobs <- jobs[order(jobs[,"col"]),,drop = FALSE] jobs <- jobs[order(jobs[,"row"]),,drop = FALSE]; rownames(jobs) <- NULL invisible(list(jobs = jobs, data.mat = data.mat, newpar = newpar)) ##:construct output## #:151 ##:body of [[iconplot]]## #:8 } #:2 ##:define [[iconplot]]## aplpack/R/slider.lowess.plot.R0000644000176200001440000000206213516603654015774 0ustar liggesusersslider.lowess.plot<-function(x,y=NULL,...) { # slider function to draw lowess smoother, pwolf 080525 x.name<-deparse(substitute(x)) y.name<-deparse(substitute(y)) if(length(x)<2) return("Error: x is of length 0 or 1") if(!is.null(y)){ if(length(y)<2) return("Error: y must be a vector") if(length(x)!=length(y)) return("Error: x and y must have the same length") x<-cbind(x,y) } if(!is.matrix(x) && !is.data.frame(x)){ x<-cbind(seq(x),x) y.name<-x.name; x.name<-"index" } if(is.null(y.name)){x.name<-colnames(x)[1]; y.name<-colnames(x)[2]} y<-x[,2]; x<-x[,1] args<-list(...) refresh<-function(...){ f<-slider(no=1) iter<-slider(no=2) xy<-lowess(x,y,f=f,iter=iter) # plot(x,y,bty="n") do.call("plot",c(alist(x,y,bty="n"),args)) lines(xy) title(paste("\n\nlowess: f =",signif(f,4),", iterations =",iter)) lines(xy) } slider(refresh, c("smoother span","iterations"), c(.01,1),c(1,7),c(.01,1),c(2/3,3) ) refresh() cat("use slider to select smoother span!\n") } aplpack/R/boxplot2D.R0000644000176200001440000001251313516603654014101 0ustar liggesusersboxplot2D<-function( xy, add.to.plot=TRUE, box.size=10, box.shift=0, angle=0, angle.type="0", tukey.style=TRUE, coef.out=1.5, coef.h.out=3, design="sl", na.rm=FALSE, ... ){ ########################################################################## # boxplot for scatterplots, pw 03/05 # # xy: 2-col matrix # # add.to.plot: if TRUE => plot(xy,...) # # box.size: height of box in mm # # box.shift: shift of boxplot in mm # # angle: direction of projection in units defined by angle.type # # angle.type: "0"= angle , # angle in (0,2*pi) # # "1"=2*pi*angle/12, # clock-like # # "2"=2*pi*angle/360, # angle in (0,360) # # "3"=arctan(angle) # by fraction: delta.y/delta.x # # tukey.style: if TRUE outliers are defined as described in Tukey (1977): EDA # coef.out=1.5 # outliers are defined outside coef.out*boxwidth # coef.h.out=3 # heavy outliers are defined outside coef.h.out*boxwidth # design: if "sl" then parallelogram else box # ########################################################################## if(any(is.na(xy))){ if(na.rm){ xy<-xy[!apply(is.na(xy),1,any),,drop=FALSE] print("Warning: NAs elements have been removed!!") }else{ xy.means<-colMeans(xy,na.rm=TRUE) for(j in 1:ncol(xy)) xy[is.na(xy[,j]),j]<-xy.means[j] print("Warning: NAs elements have been exchanged by mean values!!") } } if(!add.to.plot) plot(xy,...) if(is.numeric(angle.type)){ angle.type<-as.character(angle.type) if(all(angle.type!=c("0","1","2","3"))) angle.type<-"0" } w <- switch(angle.type, "0"= angle, "1"=2*pi*(3-angle)/12, "2"=2*pi*angle/360, "3"=atan(angle) ) TM <- matrix(c(cos(w),sin(w),-sin(w),cos(w)),2,2) xyt<- xy %*% TM ##ermittle empirsche Quantile##= z <- xyt[,1] if(tukey.style){ z.stats1 <- boxplot.stats(z,coef=coef.out) z.stats2 <- boxplot.stats(z,coef=coef.h.out) z<-c(min(z),z.stats1$stats,max(z)) names(z) <- c("min","fence","hinge","median","hinge","fence","max") outlier.heavy <- z.stats2$out outlier <- z.stats1$out outlier <- outlier[! outlier %in% outlier.heavy ] }else{ z <- c(min(z),quantile(z,c(0.10, 0.25, 0.5, 0.75, 0.90)),max(z)) names(z)<-c("min", ".1", ".25",".5",".75",".9", "max") } xy.q <- cbind(z,median(xyt[,2])) %*% t(TM) if(tukey.style){ xy.out<-if(00) 2*x/max(x)-1 else x }) } else xy[]<-pmin(pmax(-1,xy),1) xy<-rbind(xy);n.c<-dim(xy)[2] # expand input matrix xy by replication of cols xy<-xy[,(rows.orig<-h<-rep(1:mm,ceiling(n.char/mm))),drop=FALSE] if(fill) xy[,-(1:n.c)]<-0 face.orig<-list( eye =rbind(c(12,0),c(19,8),c(30,8),c(37,0),c(30,-8),c(19,-8),c(12,0)) ,iris =rbind(c(20,0),c(24,4),c(29,0),c(24,-5),c(20,0)) ,lipso=rbind(c(0,-47),c( 7,-49),lipsiend=c( 16,-53),c( 7,-60),c(0,-62)) ,lipsi=rbind(c(7,-54),c(0,-54)) # add lipsiend ,nose =rbind(c(0,-6),c(3,-16),c(6,-30),c(0,-31)) ,shape =rbind(c(0,44),c(29,40),c(51,22),hairend=c(54,11),earsta=c(52,-4), earend=c(46,-36),c(38,-61),c(25,-83),c(0,-89)) ,ear =rbind(c(60,-11),c(57,-30)) # add earsta,earend ,hair =rbind(hair1=c(72,12),hair2=c(64,50),c(36,74),c(0,79)) # add hairend ) lipso.refl.ind<-4:1 lipsi.refl.ind<-1 nose.refl.ind<-3:1 hair.refl.ind<-3:1 shape.refl.ind<-8:1 shape.xnotnull<-2:8 nose.xnotnull<-2:3 nr<-n^0.5; nc<-n^0.5 if(!missing(nrow.plot)) nr<-nrow.plot if(!missing(ncol.plot)) nc<-ncol.plot if(plot.faces){ opar<-par(mfrow=c(ceiling(c(nr,nc))),oma=rep(6,4), mar=rep(.7,4)) on.exit(par(opar)) } face.list<-list() for(ind in 1:n){ factors<-xy[ind,] face<-face.orig m<-mean(face$lipso[,2]) face$lipso[,2]<-m+(face$lipso[,2]-m)*(1+0.7*factors[4]) face$lipsi[,2]<-m+(face$lipsi[,2]-m)*(1+0.7*factors[4]) face$lipso[,1]<-face$lipso[,1]*(1+0.7*factors[5]) face$lipsi[,1]<-face$lipsi[,1]*(1+0.7*factors[5]) face$lipso["lipsiend",2]<-face$lipso["lipsiend",2]+20*factors[6] m<-mean(face$eye[,2]) face$eye[,2] <-m+(face$eye[,2] -m)*(1+0.7*factors[7]) face$iris[,2]<-m+(face$iris[,2]-m)*(1+0.7*factors[7]) m<-mean(face$eye[,1]) face$eye[,1] <-m+(face$eye[,1] -m)*(1+0.7*factors[8]) face$iris[,1]<-m+(face$iris[,1]-m)*(1+0.7*factors[8]) m<-min(face$hair[,2]) face$hair[,2]<-m+(face$hair[,2]-m)*(1+0.2*factors[9]) m<-0 face$hair[,1]<-m+(face$hair[,1]-m)*(1+0.2*factors[10]) m<-0 face$hair[c("hair1","hair2"),2]<-face$hair[c("hair1","hair2"),2]+50*factors[11] m<-mean(face$nose[,2]) face$nose[,2]<-m+(face$nose[,2]-m)*(1+0.7*factors[12]) face$nose[nose.xnotnull,1]<-face$nose[nose.xnotnull,1]*(1+factors[13]) m<-mean(face$shape[c("earsta","earend"),1]) face$ear[,1]<-m+(face$ear[,1]-m)* (1+0.7*factors[14]) m<-min(face$ear[,2]) face$ear[,2]<-m+(face$ear[,2]-m)* (1+0.7*factors[15]) face<-lapply(face,function(x){ x[,2]<-x[,2]*(1+0.2*factors[1]);x}) face<-lapply(face,function(x){ x[,1]<-x[,1]*(1+0.2*factors[2]);x}) face<-lapply(face,function(x){ x[,1]<-ifelse(x[,1]>0, ifelse(x[,2] > -30, x[,1], pmax(0,x[,1]+(x[,2]+50)*0.2*sin(1.5*(-factors[3])))),0);x}) #face$shape[,2]<-face$shape[,2]*(1+0.2*factors[1]) #face$shape[,1]<-face$shape[,1]*(1+0.2*factors[2]) #face$shape[,1]<-face$shape[,1]<-ifelse(face$shape[,1]>0, # ifelse(face$shape[,2] > -30, face$shape[,1], # pmax(0,face$shape[,1]+(face$shape[,2]+50)*0.2*sin(1.5*(-factors[3])))),0) invert<-function(x) cbind(-x[,1],x[,2]) face.obj<-list( eyer=face$eye ,eyel=invert(face$eye) ,irisr=face$iris ,irisl=invert(face$iris) ,lipso=rbind(face$lipso,invert(face$lipso[lipso.refl.ind,])) ,lipsi=rbind(face$lipso["lipsiend",],face$lipsi, invert(face$lipsi[lipsi.refl.ind,,drop=FALSE]), invert(face$lipso["lipsiend",,drop=FALSE])) ,earr=rbind(face$shape["earsta",],face$ear,face$shape["earend",]) ,earl=invert(rbind(face$shape["earsta",],face$ear,face$shape["earend",])) ,nose=rbind(face$nose,invert(face$nose[nose.refl.ind,])) ,hair=rbind(face$shape["hairend",],face$hair,invert(face$hair[hair.refl.ind,]), invert(face$shape["hairend",,drop=FALSE])) ,shape=rbind(face$shape,invert(face$shape[shape.refl.ind,])) ) face.list<-c(face.list,list(face.obj)) if(plot.faces){ plot(1,type="n",xlim=c(-105,105)*1.1, axes=FALSE, ylab="",ylim=c(-105,105)*1.3) title(xnames[ind], cex.main = cex, xpd = NA) #180308 f<-1+(ncolors-1)*(factors+1)/2 # translate factors into color numbers xtrans<-function(x){x}; ytrans<-function(y){y} for(obj.ind in seq(face.obj)[c(10:11,1:9)]) { x <-face.obj[[obj.ind]][,1]; y<-face.obj[[obj.ind]][,2] xx<-spline(1:length(x),x,40,FALSE)[,2] yy<-spline(1:length(y),y,40,FALSE)[,2] if(plot.faces){ lines(xx,yy) if(face.type>0){ if(obj.ind==10) polygon(xtrans(xx),ytrans(yy),col=col.hair[ceiling(mean(f[9:11]))],xpd=NA) # hair if(obj.ind==11){ polygon(xtrans(xx),ytrans(yy),col=col.face[ceiling(mean(f[1:2 ]))],xpd=NA) # face if(face.type==2){ # beard for(zzz in seq(hhh<-max(face.obj[[8]][,1]),-hhh,length=30)){ hrx<-rnorm(8,zzz,2); hry<-0:7*-3*rnorm(1,3)+abs(hrx)^2/150 hry<-min(face.obj[[9]][,2])+hry lines(xtrans(hrx),ytrans(hry),lwd=5,col="#eeeeee",xpd=NA) } ind<-which.max(xx); wx<-xx[ind]; ind<-which.max(yy); wy<-yy[ind] # edge of hat wxh<-wx<-seq(-wx,wx,length=20); wyh<-wy<-wy-(wx-mean(wx))^2/250+runif(20)*3 lines(xtrans(wxh),ytrans(wyh)); wx<-c(wx,rev(wx)); wy<-c(wy-10,rev(wy)+20) wmxy1<-wmxy0<-c(min(wx),min(wy)+20) wmxy2<-wmxy3<-c(runif(1,wmxy0[1],-wmxy0[1]), wy[1]+100) wmxy1[2]<-0.5*(wmxy0[2]+wmxy3[2]); wmxy2[1]<-0.5*(wmxy2[1]+wmxy0[1]) npxy<-20; pxy<-seq(0,1,length=npxy) gew<-outer(pxy,0:3,"^")*outer(1-pxy,3:0,"^")* matrix(c(1,3,3,1),npxy,4,byrow=TRUE) wxl<-wmxy0[1]*gew[,1]+wmxy1[1]*gew[,2]+wmxy2[1]*gew[,3]+wmxy3[1]*gew[,4] wyl<-wmxy0[2]*gew[,1]+wmxy1[2]*gew[,2]+wmxy2[2]*gew[,3]+wmxy3[2]*gew[,4] lines(xtrans(wxl),ytrans(wyl),col="green") wmxy1[1]<- wmxy0[1]<- -wmxy0[1] wmxy1[2]<-0.5*(wmxy0[2]+wmxy3[2]); wmxy2[1]<-0.5*(wmxy2[1]+wmxy0[1]) wxr<-wmxy0[1]*gew[,1]+wmxy1[1]*gew[,2]+wmxy2[1]*gew[,3]+wmxy3[1]*gew[,4] wyr<-wmxy0[2]*gew[,1]+wmxy1[2]*gew[,2]+wmxy2[2]*gew[,3]+wmxy3[2]*gew[,4] points(xtrans(wmxy3[1]),ytrans(wmxy3[2]),pch=19,cex=2,col="#ffffff",xpd=NA) points(xtrans(wmxy3[1]),ytrans(wmxy3[2]),pch=11,cex=2.53,col="red",xpd=NA) polygon(xtrans(c(wxl,rev(wxr))),ytrans(c(wyl,rev(wyr))),col="red",xpd=NA) # hat polygon(xtrans(wx),ytrans(wy),col="#ffffff",xpd=NA) # edge of hat } } xx<-xtrans(xx); yy<-ytrans(yy) if(obj.ind %in% 1:2) polygon(xx,yy,col="#eeeeee") # eyes without iris if(obj.ind %in% 3:4) polygon(xx,yy,col=col.eyes[ceiling(mean(f[7:8 ]))],xpd=NA) # eyes:iris if(obj.ind %in% 9) polygon(xx,yy,col=col.nose[ceiling(mean(f[12:13]))],xpd=NA)# nose if(obj.ind %in% 5:6) polygon(xx,yy,col=col.lips[ceiling(mean(f[1:3]))],xpd=NA) # lips if(obj.ind %in% 7:8) polygon(xx,yy,col=col.ears[ceiling(mean(f[14:15]))],xpd=NA)# ears } } } } } if(plot.faces&&!missing(main)){ par(opar);par(mfrow=c(1,1)) mtext(main, 3, 3, TRUE, 0.5) title(main) } info<-c( "var1"="height of face ", "var2"="width of face ", "var3"="structure of face", "var4"="height of mouth ", "var5"="width of mouth ", "var6"="smiling ", "var7"="height of eyes ", "var8"="width of eyes ", "var9"="height of hair ", "var10"="width of hair ", "var11"="style of hair ", "var12"="height of nose ", "var13"="width of nose ", "var14"="width of ear ", "var15"="height of ear ") var.names<-dimnames(xy)[[2]] if(0==length(var.names)) var.names<-paste("Var",rows.orig,sep="") info<-cbind("modified item"=info,"Var"=var.names[1:length(info)]) rownames(info)<-rep("",15) if(print.info){ cat("effect of variables:\n") print(info) } if(demo&&plot.faces) { plot(1:15,1:15,type="n",axes=FALSE,bty="n") text(rep(1,15),15:1,adj=0,apply(info,1,function(x) paste(x,collapse=" - ")),cex=0.7) } names(face.list)<-xnames out<-list(faces=face.list,info=info,xy=t(xy)) class(out)<-"faces" invisible(out) } aplpack/R/stem.leaf.R0000644000176200001440000007552113516603654014112 0ustar liggesusers## ms <- stem.leaf <- function(data, unit, m, Min, Max, rule.line=c("Dixon", "Velleman", "Sturges"), style=c("Tukey", "bare"), trim.outliers=TRUE, depths=TRUE, reverse.negative.leaves=TRUE,na.rm=FALSE,printresult=TRUE){ if(missing(data)){cat("Author: Peter Wolf 05/2003,", "(modified slightly by J. Fox, 20 July 03)", "03/2006 additional rounding to prevent misclasification", "07/2008 counting of NA's, 04/2009 improvement of rounding", "syntax: stem.leaf(data.set)\n",sep="\n") return("Warning: no data set found by stem.leaf") } rule.line <- match.arg(rule.line) style <- match.arg(style) n.na <- sum(is.na(data)) if(0 number of lines <- 10*log(n,10) # # = "Velleman" => number of lines <- 2*sqrt(n) # # = "Sturges" => number of lines <- 1 + log(n,2) # # style: = "Tukey" => Tukey-like stem ( m = 2, 5 ) # # trim.outliers=TRUE => outliers are printed absent # # depths =TRUE => depths info is printed # # reverse.negative.leaves=TRUE => neg.leaves are rev. sorted # #Author: # # Peter Wolf 05/2003 (modified slightly by J. Fox, 20 July 03) # # rounding operation for comparing added 29 March 06 # # 07/2008 NA-values are counted if na.rm==FALSE # # 10/2010 rounding error in computing of leaves conremoved # ################################################################## n <- length(data <- sort(data)) row.max <- floor( c(Dixon =10*log(n,10), Velleman=2*sqrt(n), Sturges =1+log(n,2) ))[rule.line] stats <- boxplot(data,plot=FALSE) if(missing(Min)) Min <- if (trim.outliers) stats$stats[1,1] else min(data, na.rm=TRUE) if(missing(Max)) Max <- if (trim.outliers) stats$stats[5,1] else max(data, na.rm=TRUE) spannweite.red<-Max - Min zeilen.intervall.laenge <- spannweite.red / row.max if(missing(unit)){ factor <- 10^ceiling(log(zeilen.intervall.laenge,10)) } else factor <- 10^round(log(unit*10,10)) debug.show("factor") z <- zeilen.intervall.laenge/factor # z in (0.1 ,1] delta.tick <- c(.2,.2,.5,1)[sum(z>c(0,.1,.2,.5))] if(missing(m)) m <- round(1/delta.tick) else delta.tick <- 1/m debug.show("delta.tick"); debug.show("m") data.tr <- data/factor data.tr <- signif(data.tr, digits = 11) # reduction of significant digits 181128 Min.tr <- Min/factor Max.tr <- Max/factor spannweite.red <- Max.tr - Min.tr sk.min <- floor(Min.tr) sk.max <- ceiling(Max.tr) skala <- seq(sk.min,sk.max,by=delta.tick) if(sk.min<0) skala <- c(sk.min-delta.tick,skala) if(sk.max<0) skala <- skala[-length(skala)] debug.show("skala") lo.limit <- if (trim.outliers) skala[1] else -Inf lo.log <- if(skala[1 ] < 0) data.tr <= lo.limit else data.tr < lo.limit n.sk <- length(skala) hi.limit <- if (trim.outliers) skala[n.sk] + delta.tick else Inf hi.log <- if(skala[n.sk] >= 0) data.tr >= hi.limit else data.tr > hi.limit n.lower.extr.values <- sum(lo.log); n.upper.extr.values <- sum(hi.log) if(0=0],10), function(x,sk)sum( sk<= x),signif(skala,10)) )) debug.show("class.of.data.tr") class.of.data.tr <- c(1:length(skala),class.of.data.tr) leaf.grouped <- split(c(rep(-1,length(skala)),leaf),class.of.data.tr) leaf.grouped <- lapply(leaf.grouped, function(x){ sort(x[-1]) }) # debug.show("leaf.grouped") class.negative <- skala < 0 class.neg.zero <- floor(skala) == -1 if (reverse.negative.leaves){ for (i in seq(class.negative)) if (class.negative[i]) leaf.grouped[[i]] <- rev(leaf.grouped[[i]]) } leaf.grouped.ch <- paste("|",unlist(lapply(leaf.grouped,paste,collapse=""))) # debug.show("leaf.grouped") line.names <- skala line.names[class.negative] <- line.names[class.negative]+1 line.names <- as.character(floor(line.names)) line.names[class.neg.zero] <- "-0" if(style=="Tukey"){ switch(as.character(m), "1"={}, "2"={ h<-round(2*(skala%%1)) #; line.names[h!=0] <- "" line.names<-paste(line.names, ifelse(skala<0,c(".","*")[1+h],c("*",".")[1+h]),sep="") }, "5"={ h<-round(5*(skala%%1)); line.names[h>0 & h<4] <- "" line.names<-paste(line.names, ifelse(skala<0, c(".","s","f","t","*")[1+h], c("*","t","f","s",".")[1+h]), sep="") } ) } ragged.left <- function(ch.lines){ max.n <- max(n.lines<-nchar(ch.lines)) h <- paste(rep(" ",max.n),collapse="") ch.lines <- paste( substring(h,1,1+max.n-n.lines), ch.lines) ch.lines } line.names <- ragged.left(line.names) n.class <- unlist(lapply(leaf.grouped,length)) debug.show("n.class") select <- (cumsum(n.class) > 0) & rev((cumsum(rev(n.class)) > 0)) depth <- cumsum(n.class) + n.lower.extr.values depth.rev <- rev(cumsum(rev(n.class)) + n.upper.extr.values) debug.show("depth") uplow <- depth>=depth.rev # DT-median-error #150429 # pos.median <- which(uplow)[1] + (-1:0) # h <- abs(depth[pos.median]-depth.rev[pos.median]) # pos.median <- pos.median[1]+(h[1]>h[2]) # debug.show("pos.median") depth[uplow] <- depth.rev[uplow] pos.median <- which(depth == max(depth)) # 150429 debug.show("pos.median") # 150429 depth <- paste(depth,"") depth[pos.median] <- paste("(",n.class[pos.median],")",sep="") depth[n.class==0] <- " " depth <- if (depths) ragged.left(depth) else "" info <- c( paste("1 | 2: represents",1.2*factor), # paste(" m:",m ), paste(" leaf unit:",factor/10), paste(" n:",n )) stem <- paste(depth, line.names, leaf.grouped.ch) stem <- if((m!=5)||sum(select)>4) stem[select] else stem result <- list(display=stem) if(exists("lower.line")) result<-c(lower=lower.line,result) if(exists("upper.line")) result<-c(result,upper=upper.line) if(0 number of lines <- 10*log(n,10) # # = "Velleman" => number of lines <- 2*sqrt(n) # # = "Sturges" => number of lines <- 1 + log(n,2) # # style: = "Tukey" => Tukey-like stem ( m = 2, 5 ) # # trim.outliers=TRUE => outliers are printed absent # # depths =TRUE => depths info is printed # # reverse.negative.leaves=TRUE => neg.leaves are rev. sorted # #Author: # # Peter Wolf 05/2003 (modified slightly by J. Fox, 20 July 03) # # rounding operation for comparing added 29 March 06 # # 07/2008 NA-values are counted if na.rm==FALSE # # 10/2010 rounding error in computing of leaves conremoved # ################################################################## n <- length(data <- sort(data)) row.max <- floor( c(Dixon =10*log(n,10), Velleman=2*sqrt(n), Sturges =1+log(n,2) ))[rule.line] stats <- boxplot(data,plot=FALSE) if(missing(Min)) Min <- if (trim.outliers) stats$stats[1,1] else min(data, na.rm=TRUE) if(missing(Max)) Max <- if (trim.outliers) stats$stats[5,1] else max(data, na.rm=TRUE) spannweite.red<-Max - Min zeilen.intervall.laenge <- spannweite.red / row.max if(missing(unit)){ factor <- 10^ceiling(log(zeilen.intervall.laenge,10)) } else factor <- 10^round(log(unit*10,10)) debug.show("factor") z <- zeilen.intervall.laenge/factor # z in (0.1 ,1] delta.tick <- c(.2,.2,.5,1)[sum(z>c(0,.1,.2,.5))] if(missing(m)) m <- round(1/delta.tick) else delta.tick <- 1/m debug.show("delta.tick"); debug.show("m") data.tr <- data/factor data.tr <- signif(data.tr, digits = 11) # reduction of significant digits 181128 Min.tr <- Min/factor Max.tr <- Max/factor spannweite.red <- Max.tr - Min.tr sk.min <- floor(Min.tr) sk.max <- ceiling(Max.tr) skala <- seq(sk.min,sk.max,by=delta.tick) if(sk.min<0) skala <- c(sk.min-delta.tick,skala) if(sk.max<0) skala <- skala[-length(skala)] debug.show("skala") lo.limit <- if (trim.outliers) skala[1] else -Inf lo.log <- if(skala[1 ] < 0) data.tr <= lo.limit else data.tr < lo.limit n.sk <- length(skala) hi.limit <- if (trim.outliers) skala[n.sk] + delta.tick else Inf hi.log <- if(skala[n.sk] >= 0) data.tr >= hi.limit else data.tr > hi.limit n.lower.extr.values <- sum(lo.log); n.upper.extr.values <- sum(hi.log) if(0=0],10), function(x,sk)sum( sk<= x),signif(skala,10)) )) debug.show("class.of.data.tr") class.of.data.tr <- c(1:length(skala),class.of.data.tr) leaf.grouped <- split(c(rep(-1,length(skala)),leaf),class.of.data.tr) leaf.grouped <- lapply(leaf.grouped, function(x){ sort(x[-1]) }) # debug.show("leaf.grouped") class.negative <- skala < 0 class.neg.zero <- floor(skala) == -1 if (reverse.negative.leaves){ for (i in seq(class.negative)) if (class.negative[i]) leaf.grouped[[i]] <- rev(leaf.grouped[[i]]) } leaf.grouped.ch <- paste("|",unlist(lapply(leaf.grouped,paste,collapse=""))) # debug.show("leaf.grouped") line.names <- skala line.names[class.negative] <- line.names[class.negative]+1 line.names <- as.character(floor(line.names)) line.names[class.neg.zero] <- "-0" if(style=="Tukey"){ switch(as.character(m), "1"={}, "2"={ h<-round(2*(skala%%1)) #; line.names[h!=0] <- "" line.names<-paste(line.names, ifelse(skala<0,c(".","*")[1+h],c("*",".")[1+h]),sep="") }, "5"={ h<-round(5*(skala%%1)); line.names[h>0 & h<4] <- "" line.names<-paste(line.names, ifelse(skala<0, c(".","s","f","t","*")[1+h], c("*","t","f","s",".")[1+h]), sep="") } ) } ragged.left <- function(ch.lines){ max.n <- max(n.lines<-nchar(ch.lines)) h <- paste(rep(" ",max.n),collapse="") ch.lines <- paste( substring(h,1,1+max.n-n.lines), ch.lines) ch.lines } line.names <- ragged.left(line.names) n.class <- unlist(lapply(leaf.grouped,length)) debug.show("n.class") select <- (cumsum(n.class) > 0) & rev((cumsum(rev(n.class)) > 0)) depth <- cumsum(n.class) + n.lower.extr.values depth.rev <- rev(cumsum(rev(n.class)) + n.upper.extr.values) debug.show("depth") uplow <- depth>=depth.rev # DT-median-error #150429 # pos.median <- which(uplow)[1] + (-1:0) # h <- abs(depth[pos.median]-depth.rev[pos.median]) # pos.median <- pos.median[1]+(h[1]>h[2]) # debug.show("pos.median") depth[uplow] <- depth.rev[uplow] pos.median <- which(depth == max(depth)) # 150429 debug.show("pos.median") # 150429 depth <- paste(depth,"") depth[pos.median] <- paste("(",n.class[pos.median],")",sep="") depth[n.class==0] <- " " depth <- if (depths) ragged.left(depth) else "" info <- c( paste("1 | 2: represents",1.2*factor), # paste(" m:",m ), paste(" leaf unit:",factor/10), paste(" n:",n )) stem <- paste(depth, line.names, leaf.grouped.ch) stem <- if((m!=5)||sum(select)>4) stem[select] else stem result <- list(display=stem) if(exists("lower.line")) result<-c(lower=lower.line,result) if(exists("upper.line")) result<-c(result,upper=upper.line) if(0c(0,.1,.2,.5))] if(missing(m)) m <- round(1/delta.tick) else delta.tick <- 1/m debug.show("delta.tick"); debug.show("m") sl.xy <- stem.leaf(c(x,y),unit=unit,m=m,Min=Min, Max=Max, rule.line=rule.line, style=style,trim.outliers=trim.outliers,depths=depths, reverse.negative.leaves = reverse.negative.leaves, na.rm = na.rm, printresult=FALSE) h <- grep(" leaf unit: ",sl.xy$info,value=TRUE) unit <- as.numeric(sub(" leaf unit: ","",h)) sl.x <- stem.leaf(x, unit=unit,m=m,Min=Min, Max=Max, rule.line=rule.line, style=style,trim.outliers=trim.outliers,depths=depths, reverse.negative.leaves = reverse.negative.leaves, na.rm = na.rm, printresult=FALSE) sl.y <- stem.leaf(y, unit=unit,m=m,Min=Min, Max=Max, rule.line=rule.line, style=style,trim.outliers=trim.outliers,depths=depths, reverse.negative.leaves = reverse.negative.leaves, na.rm = na.rm, printresult=FALSE) x.stem <- gsub(" ","",sl.x$stem); y.stem <- gsub(" ","",sl.y$stem) x.leaves <- substring(sl.x$leaves,3); y.leaves <- substring(sl.y$leaves,3) x.depths <- substring(sl.x$depths,3); y.depths <- substring(sl.y$depths,3) x.digits <- grep("[0-9]",x.stem,value=TRUE); y.digits <- grep("[0-9]",y.stem,value=TRUE) h <- match(y.digits, x.digits); h <- h[!is.na(h)][1] # take the first ->[1] only otherwise an error occurs, see mail from John Fox 10/2013: x.pos <- which(x.stem==x.digits[h])[1]; y.pos <- which(y.stem==x.digits[h])[1] LZ <- rep(" ",d <- abs(y.pos - x.pos)) if(x.pos < y.pos) { # x vorn verlaengern x.stem <- c(y.stem[1:d],x.stem); x.leaves <- c(LZ,x.leaves); x.depths <- c(LZ,x.depths) } if(y.pos < x.pos) { # y vorn verlaengern y.stem <- c(x.stem[1:d],y.stem); y.leaves <- c(LZ,y.leaves); y.depths <- c(LZ,y.depths) } x.l <- length(x.stem); y.l <- length(y.stem) LZ <- rep(" ",d <- abs(y.l-x.l)) if(x.l < y.l) { # x hinten verlaengern x.stem <- c(x.stem,y.stem[-(1:x.l)]); x.leaves <- c(x.leaves,LZ) x.depths <- c(LZ,x.depths,LZ) } if(y.l < x.l) { # y hinten verlaengern y.stem <- c(y.stem,x.stem[-(1:y.l)]); y.leaves <- c(y.leaves,LZ) y.depths <- c(LZ,y.depths,LZ) } expand.text <- function(x,N=0,O=0,S=0,W=0,fill.right=TRUE,sep=" "){ # bringt Elemente auf gleiche Laenge und ergaenzt Leerzeichen in den Himmelsrichtungen if(0= nrow(pg) ) return(pg) ## 121026 ## 121123 <= statt == resolution<-floor(20*precision) pg0<-xy[hdepth==1,] pg0<-pg0[chull(pg0[,1],pg0[,2]),] end.points<-find.cut.z.pg(pg,pg0,center=center,debug.plots=debug.plots) lam<-((0:resolution)^1)/resolution^1 pg.new<-pg for(i in 1:nrow(pg)){ tp<-cbind(pg[i,1]+lam*(end.points[i,1]-pg[i,1]), pg[i,2]+lam*(end.points[i,2]-pg[i,2])) # hd.tp<-hdepth.of.points(tp) hd.tp<-find.hdepths.tp(tp,xy) ind<-max(sum(hd.tp>=k),1) if(indk && tp<-cbind(tp[ind,1]+lam*(tp[ind+1,1]-tp[ind,1]), tp[ind,2]+lam*(tp[ind+1,2]-tp[ind,2])) # hd.tp<-hdepth.of.points(tp) hp.tp<-find.hdepths.tp(tp,xy) ind<-max(sum(hd.tp>=k),1) } pg.new[i,]<-tp[ind,] } pg.new<-pg.new[chull(pg.new[,1],pg.new[,2]),] # cat("depth pg.new", hdepth.of.points(pg.new)) # cat("depth pg.new", find.hdepths.tp(pg.new,xy)) pg.add<-0.5*(pg.new+rbind(pg.new[-1,],pg.new[1,])) # end.points<-find.cut.z.pg(pg,pg0,center=center) end.points<-find.cut.z.pg(pg.add,pg0,center=center) ## 070824 for(i in 1:nrow(pg.add)){ tp<-cbind(pg.add[i,1]+lam*(end.points[i,1]-pg.add[i,1]), pg.add[i,2]+lam*(end.points[i,2]-pg.add[i,2])) # hd.tp<-hdepth.of.points(tp) hd.tp<-find.hdepths.tp(tp,xy) ind<-max(sum(hd.tp>=k),1) if(indk && tp<-cbind(tp[ind,1]+lam*(tp[ind+1,1]-tp[ind,1]), tp[ind,2]+lam*(tp[ind+1,2]-tp[ind,2])) # hd.tp<-hdepth.of.points(tp) hd.tp<-find.hdepths.tp(tp,xy) ind<-max(sum(hd.tp>=k),1) } pg.add[i,]<-tp[ind,] } # cat("depth pg.add", hdepth.of.points(pg.add)) pg.new<-rbind(pg.new,pg.add) pg.new<-pg.new[chull(pg.new[,1],pg.new[,2]),] } cut.p.sl.p.sl<-function(xy1,m1,xy2,m2){ sx<-(xy2[2]-m2*xy2[1]-xy1[2]+m1*xy1[1])/(m1-m2) sy<-xy1[2]-m1*xy1[1]+m1*sx if(!is.nan(sy)) return( c(sx,sy) ) if(abs(m1)==Inf) return( c(xy1[1],xy2[2]+m2*(xy1[1]-xy2[1])) ) if(abs(m2)==Inf) return( c(xy2[1],xy1[2]+m1*(xy2[1]-xy1[1])) ) } pos.to.pg<-function(z,pg,reverse=FALSE){ if(reverse){ int.no<-apply(outer(pg[,1],z[,1],">="),2,sum) zy.on.pg<-pg[int.no,2]+pg[int.no,3]*(z[,1]-pg[int.no,1]) }else{ int.no<-apply(outer(pg[,1],z[,1],"<="),2,sum) zy.on.pg<-pg[int.no,2]+pg[int.no,3]*(z[,1]-pg[int.no,1]) } ### ifelse(z[,2] approx.limit # use of random number generator may disturb simulation # therefore we now use a systematical part of the data 20120930 ### OLD: set.seed(random.seed<-13) ### SEED if(very.large.data.set){ ## OLD: ind<-sample(seq(nrow(xydata)),size=approx.limit) step<-(n<-nrow(xydata))/approx.limit; ind <- round(seq(1,n,by=step)) xy<-xydata[ind,] } else xy<-xydata n<-nrow(xy) points.in.bag<-floor(n/2) # if jittering is needed # the following two lines can be activated #xy<-xy+cbind(rnorm(n,0,.0001*sd(xy[,1])), # rnorm(n,0,.0001*sd(xy[,2]))) if(verbose) cat("end of initialization") prdata<-prcomp(xydata) is.one.dim<-(0 == max(prdata[[1]])) || (min(prdata[[1]])/max(prdata[[1]]))<0.00001 # 121129 if(is.one.dim){ if(verbose) cat("data set one dimensional") center<-colMeans(xydata) res<-list(xy=xy,xydata=xydata,prdata=prdata, is.one.dim=is.one.dim,center=center) class(res)<-"bagplot" return(res) } if(verbose) cat("data not linear") if(nrow(xydata)<=4) { if(verbose) cat("only three or four data points") center<-colMeans(xydata) res<-list(xy=xy,xydata=xydata,prdata=prdata,hdepths=rep(1,n),hdepth=rep(1,n), is.one.dim=is.one.dim,center=center,hull.center=NULL, hull.bag=NULL,hull.loop=NULL,pxy.bag=NULL,pxy.outer=xydata, pxy.outlier=NULL,exp.dk=xydata) class(res)<-"bagplot" return(res) } xym<-apply(xy,2,mean); xysd<-apply(xy,2,sd) xyxy<-cbind((xy[,1]-xym[1])/xysd[1],(xy[,2]-xym[2])/xysd[2]) dx<-(outer(xy[,1],xy[,1],"-")) dy<-(outer(xy[,2],xy[,2],"-")) alpha<-atan2(y=dy,x=dx); diag(alpha)<-1000 for(j in 1:n) alpha[,j]<-sort(alpha[,j]) alpha<-alpha[-n,] ; m<-n-1 ## quick look inside, just for check if(debug.plots=="all"){ plot(xy,bty="n"); xdelta<-abs(diff(range(xy[,1]))); dx<-xdelta*.3 for(j in 1:n) { p<-xy[j,]; dy<-dx*tan(alpha[,j]) segments(p[1]-dx,p[2]-dy,p[1]+dx,p[2]+dy,col=j) text(p[1]-xdelta*.02,p[2],j,col=j) } } if(verbose) print("end of computation of angles") hdepth<-rep(0,n); dpi<-2*pi-0.000001; mypi<-pi-0.000001 minusplus<-c(rep(-1,m),rep(1,m)) if(FALSE){ for(j in 1:n) { a<-alpha[,j]+pi; h<-a<10; a<-a[h]; init<-sum(a < mypi) # hallo a.shift<-(a+pi) %% dpi minusplus<-c(rep(-1,length(a)),rep(1,length(a))) ## 070824 h<-cumsum(minusplus[order(c(a,a.shift))]) hdepth[j]<-init+min(h)+1 # or do we have to count identical points? # hdepth[j]<-init+min(h)+sum(xy[j,1]==xy[,1] & xy[j,2]==xy[,2]) } } find.hdepths <- function(xy, number.of.directions=181){ # 121126 xy <- as.matrix(xy) for( j in 1:2) { xy[,j] <- xy[,j] - min(xy[,j]) if( 0 < (h <- max(xy[,j]))) xy[,j] <- xy[,j] / max(xy[,j]) } phi <- c(seq(0,180,length=number.of.directions)[-1]*(2*pi/360)) sinphi <- c(sin(phi),1); cosphi <- c(cos(phi),0) RM1 <- round(digits=6,rbind(cosphi,sinphi)) hd <- rep(h<-length(xy[,1]),h) for( j in seq(along=sinphi)){ xyt <- xy %*% RM1[,j] hd <- pmin(hd,rank(xyt,ties.method="min"), rank(-xyt,ties.method="min")) } # xyt <- xy %*% RM1 # hd2 <- cbind(apply(xyt, 2, rank, ties.method="min"), # apply(-xyt,2, rank, ties.method="min")) # hd2 <- apply(hd2, 1, min) hd } hdepth <- find.hdepths(xy,181*precision) if(verbose){print("end of computation of hdepth:"); print(hdepth)} ## quick look inside, just for a check if(debug.plots=="all"){ plot(xy,bty="n") xdelta<-abs(diff(range(xy[,1]))); dx<-xdelta*.1 for(j in 1:n) { a<-alpha[,j]+pi; a<-a[a<10]; init<-sum(a < pi) a.shift<-(a+pi) %% dpi minusplus<-c(rep(-1,length(a)),rep(1,length(a))) ## 070824 h<-cumsum(minusplus[ao<-(order(c(a,a.shift)))]) no<-which((init+min(h)) == (init+h))[1] p<-xy[j,]; dy<-dx*tan(alpha[,j]) segments(p[1]-dx,p[2]-dy,p[1]+dx,p[2]+dy,col=j,lty=3) dy<-dx*tan(c(sort(a),sort(a))[no]) segments(p[1]-5*dx,p[2]-5*dy,p[1]+5*dx,p[2]+5*dy,col="black") text(p[1]-xdelta*.02,p[2],hdepth[j],col=1) # cex=2.5 assumes suitable fonts } } hd.table<-table(sort(hdepth)) d.k<-cbind(dk=rev(cumsum(rev(hd.table))), k =as.numeric(names(hd.table))) k.1<-sum( points.in.bag < d.k[,1] ) # if(nrow(d.k)>1){ # version 09/2005, error in data set 1 of Meuleman # instead of >2 now >k.1 # 070827 # if(nrow(d.k)>k.1){ k<-d.k[k.1+1,2] } else { k<-d.k[k.1,2] } # this statement will not have an effect because of the next one: k<-d.k[k.1,2]+1 # 121004 increment depth by one not by looking for next depth if(verbose){cat("numbers of members of dk:"); print(hd.table); print(d.k)} if(verbose){cat("end of computation of k, k=",k,"k.1:",k.1)} # D.K<<-d.k; K.1<<-k.1; EX<<-exp.dk; EX.1<<-exp.dk.1; PDK<<-pdk; HDEPTH<<-hdepth center<-apply(xy[which(hdepth==max(hdepth)),,drop=FALSE],2,mean) hull.center<-NULL if(30){ n.p<-floor(1.5*c(32,16,8)[1+(n>50)+(n>200)]*precision) # limit.hdepth.to.check <- sort(hdepth, decreasing = TRUE)[min(nrow(xy),6)] # 121126 h <- unique(sort(hdepth, decreasing = TRUE)) limit.hdepth.to.check <- sort(h)[min(length(h),3)] h<-cands<-xy[limit.hdepth.to.check <= hdepth,,drop=FALSE] # h<-cands<-xy[rev(order(hdepth))[1:(min(nrow(xy),6))],] cands<-cands[chull(cands[,1],cands[,2]),]; n.c<-nrow(cands) if(is.null(n.c))cands<-h xyextr<-rbind(apply(cands,2,min),apply(cands,2,max)) ## xydel<-2*(xyextr[2,]-xyextr[1,])/n.p # unused if( (xyextr[2,1]-xyextr[1,1]) < 0.2*(h <- diff(range(xy[,1])))){ xyextr[1:2,1] <- mean(xyextr[,1]) + c(-.1,.1) * h } ## 121203 if( (xyextr[2,2]-xyextr[1,2]) < 0.2*(h <- diff(range(xy[,2])))){ xyextr[1:2,2] <- mean(xyextr[,2]) + c(-.1,.1) * h } ## 121203 if(verbose){cat("xyextr: looking for maximal depth"); print(xyextr) } h1<-seq(xyextr[1,1],xyextr[2,1],length=n.p) h2<-seq(xyextr[1,2],xyextr[2,2],length=n.p) tp<-cbind(as.vector(matrix(h1,n.p,n.p)), # [1:n.p^2], as.vector(matrix(h2,n.p,n.p,TRUE))) # [1:n.p^2]) # tphdepth<-max(hdepth.of.points(tp))-1 tphdepth<-max(find.hdepths.tp(tp,xy)) # if(verbose) { TP<<-tp; TPD<<-find.hdepths.tp(tp,xy) } if(verbose) cat("points(TP,pch=c(letters,LETTERS)[TPD+1])") # if max of testpoint is smaller than max depth of points take that max! if(verbose){ cat("depth of testpoints"); print(summary(tphdepth)) } # 121126 tphdepth<-max(tphdepth,d.k[,2]) # 121004 # define direction for hdepth search num<-floor(2*c(417,351,171,85,67,43)[sum(n>c(1,50,100,150,200,250))]*precision) num.h<-floor(num/2); angles<-seq(0,pi,length=num.h) ang<-tan(pi/2-angles) kkk<-tphdepth if(verbose){cat("max-hdepth found:"); print(kkk)} if(verbose) cat("find polygon with max depth") ia<-1; a<-angles[ia]; xyt<-xyxy%*%c(cos(a),-sin(a)); xyto<-order(xyt) # initial for upper part ind.k<-xyto[kkk]; cutp<-c(xyxy[ind.k,1],-10) dxy<-diff(range(xyxy)) pg<-rbind(c(cutp[1],-dxy,Inf),c(cutp[1],dxy,NA)) # initial for lower part ind.kk<-xyto[n+1-kkk]; cutpl<-c(xyxy[ind.kk,1],10) # pgl<-rbind(c(cutpl[1],dxy,Inf),c(cutpl[1],-dxy,NA)) pgl<-rbind(c(cutpl[1],dxy,-Inf),c(cutpl[1],-dxy,NA)) # the sign of inf doesn't matter if(debug.plots=="all"){ plot(xyxy,type="p",bty="n") text(xy,,1:n,col="blue") hx<-xy[ind.k,c(1,1)]; hy<-xy[ind.k,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) } if(verbose) cat("start of computation of the directions: ","kkk=",kkk) # 121030 for(ia in seq(angles)[-1]){ # determine critical points pnew and pnewl of direction a # if(verbose) cat("ia",ia,angles[ia]) # 121030 a<-angles[ia]; angtan<-ang[ia]; xyt<-xyxy%*%c(cos(a),-sin(a)); xyto<-order(xyt) ind.k <-xyto[kkk]; ind.kk<-xyto[n+1-kkk]; pnew<-xyxy[ind.k,]; pnewl<-xyxy[ind.kk,] # if(verbose) if( 1 < sum(xyt == xyt[ind.k]) )print("WARNING: some points identical") if(debug.plots=="all") points(pnew[1],pnew[2],col="red") # new limiting lines are defined by pnew / pnewl and slope a # find segment of polygon that is cut by new limiting line and cut # if(ia>200) { ##; points(pnew[1],pnew[2],col="magenta",cex=6) } if( abs(angtan)>1e10){ if(verbose) cat("kkk",kkk,"x=c case") # case of vertical slope #print(pg);print(pnew);print(xyt);lines(pg,col="red",lwd=3) # number of points left of point pnew that limit the polygon pg.no<-sum(pg[,1]=pnewl[1]) if( 0 < pg.nol ){ ##??2 # 121204 cutpl<-c(pnewl[1],pgl[pg.nol,2]+pgl[pg.nol,3]*(pnewl[1]-pgl[pg.nol,1])) pgl<-rbind(pgl[1:pg.nol,],c(cutpl,angtan),c(cutpl[1]-dxy, cutpl[2]-angtan*dxy,NA)) } else { if(verbose) cat("!!! case degenerated LOWER polygon: pgl.no==0") pgl <- rbind(pgl[1,], c(pgl[2,1:2],NA)) } }else{ # if(verbose) cat("kkk",kkk,"normal case") # normal case upper polygon pg.inter<-pg[,2]-angtan*pg[,1]; pnew.inter<-pnew[2]-angtan*pnew[1] pg.no<-sum(pg.interpnew.interl) if(is.na(pgl[pg.nol,3])) pgl[pg.nol,3] <- Inf # 121129 NaN/Na error cutpl<-cut.p.sl.p.sl(pnewl,angtan,pgl[pg.nol,1:2],pgl[pg.nol,3]) pgl<-rbind(pgl[1:pg.nol,],c(cutpl,angtan),c(cutpl[1]-dxy, cutpl[2]-angtan*dxy,NA)) } ## if(kkk==KKK && ia == 51) { cat("ENDE: pgl"); print(pgl) } # update pg, pgl completed # PG<<-pg;PG.NO<<-pg.no;CUTP<<-cutp;DXY<<-dxy;PNEW<<-pnew;PGL<<-pgl;PG.NOL<<-pg.nol ######################################### #### cat("angtan",angtan,"pg.no",pg.no,"pkt:",pnew) # if(ia==stopp) lines(pg,type="b",col="green") if(debug.plots=="all"){ points(pnew[1],pnew[2],col="red") hx<-xyxy[ind.k,c(1,1)]; hy<-xyxy[ind.k,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) # text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) # print(pg) # if(ia==stopp) lines(pgl,type="b",col="green") points(cutpl[1],cutpl[2],col="red") hx<-xyxy[ind.kk,c(1,1)]; hy<-xyxy[ind.kk,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) # text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) # print(pgl) } ##show pg pgl## } # if(verbose) PG <<- pg; PGL <<- pgl if(2# limit<-1e-10 ## pg <-pg [c(TRUE,(abs(diff(pg [,1]))>limit)|(abs(diff(pg [,2]))>limit)),] old# idx <- c(TRUE,(abs(diff(pg [,1]))>limit)|(abs(diff(pg [,2]))>limit)) # 121008 if(any(idx==FALSE)){ pg <-pg[idx,]; pg[,3] <- c(diff(pg[,2])/diff(pg[,1]), NA) } # old reduction which caused some errors: ## pgl<-pgl[c(TRUE,(abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit)),] error## ## pgl<-pgl[c( (abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit),TRUE),] old# idx <- c( (abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit),TRUE)#121008 if(any(idx==FALSE)){ pgl<-pgl[idx,]; pgl[,3] <- c(diff(pgl[,2])/diff(pgl[,1]), NA) } ## add some tolerance in course of numerical problems pgl[,2]<-pgl[,2] - .00001 ## 121004 ## show pg pgl>> pg<- pg [-nrow(pg ),][-1,,drop=FALSE] pgl<-pgl[-nrow(pgl),][-1,,drop=FALSE] # determine position according to the other polygon # cat("relative position: lower polygon") indl<-pos.to.pg(round(pgl,digits=10),round(pg,digits=10)) # 121126 # cat("relative position: upper polygon") indu<-pos.to.pg(round(pg,digits=10),round(pgl,digits=10),TRUE) sr<-sl<-NULL # ; ##show pg pgl>> # right region if(indu[(npg<-nrow(pg))]=="lower" & indl[1]=="higher"){ # cat("in if of right region: the upper polynom is somewhere lower") # checking from the right: last point of lower polygon that is NOT ok rnuml<-which(indl=="lower")[1]-1 # checking from the left: last point of upper polygon that is ok rnumu<-npg+1-which(rev(indu=="higher"))[1] # special case all points of lower polygon are upper if(is.na(rnuml)) rnuml<-sum(pg[rnumu,1]=k,,drop=FALSE] # cat("dim XYI", dim(xyi)) # 121028 some corrections for strange k situations if(0 < length(xyi)) pdk<-xyi[chull(xyi[,1],xyi[,2]),,drop=FALSE] # outer hull of bag if( k > 1 ){ xyo<-xy[hdepth>=(k-1),,drop=FALSE] pdk.1<-xyo[chull(xyo[,1],xyo[,2]),,drop=FALSE] } else pdk.1 <- pdk if(0 == length(xyi)) pdk <- pdk.1 if(verbose)cat("hull computed: pdk, pdk.1:") if(verbose){print(pdk); print(pdk.1) } if(debug.plots=="all"){ plot(xy,bty="n") h<-rbind(pdk,pdk[1,]); lines(h,col="red",lty=2) h<-rbind(pdk.1,pdk.1[1,]);lines(h,col="blue",lty=3) points(center[1],center[2],pch=8,col="red") } exp.dk<-expand.hull(pdk,k) exp.dk.1<-expand.hull(exp.dk,k-1) # pdk.1,k-1,20) }else{ # define direction for hdepth search num<-floor(2*c(417,351,171,85,67,43)[sum(n>c(1,50,100,150,200,250))]*precision) num.h<-floor(num/2); angles<-seq(0,pi,length=num.h) ang<-tan(pi/2-angles) # standardization of data set xyxy is used kkk<-k if(verbose) print("find polygon with depth something higher than that of the bag") if( kkk <= max(d.k[,2]) ){ # inner one # 121030 ia<-1; a<-angles[ia]; xyt<-xyxy%*%c(cos(a),-sin(a)); xyto<-order(xyt) # initial for upper part ind.k<-xyto[kkk]; cutp<-c(xyxy[ind.k,1],-10) dxy<-diff(range(xyxy)) pg<-rbind(c(cutp[1],-dxy,Inf),c(cutp[1],dxy,NA)) # initial for lower part ind.kk<-xyto[n+1-kkk]; cutpl<-c(xyxy[ind.kk,1],10) # pgl<-rbind(c(cutpl[1],dxy,Inf),c(cutpl[1],-dxy,NA)) pgl<-rbind(c(cutpl[1],dxy,-Inf),c(cutpl[1],-dxy,NA)) # the sign of inf doesn't matter if(debug.plots=="all"){ plot(xyxy,type="p",bty="n") text(xy,,1:n,col="blue") hx<-xy[ind.k,c(1,1)]; hy<-xy[ind.k,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) } if(verbose) cat("start of computation of the directions: ","kkk=",kkk) # 121030 for(ia in seq(angles)[-1]){ # determine critical points pnew and pnewl of direction a # if(verbose) cat("ia",ia,angles[ia]) # 121030 a<-angles[ia]; angtan<-ang[ia]; xyt<-xyxy%*%c(cos(a),-sin(a)); xyto<-order(xyt) ind.k <-xyto[kkk]; ind.kk<-xyto[n+1-kkk]; pnew<-xyxy[ind.k,]; pnewl<-xyxy[ind.kk,] # if(verbose) if( 1 < sum(xyt == xyt[ind.k]) )print("WARNING: some points identical") if(debug.plots=="all") points(pnew[1],pnew[2],col="red") # new limiting lines are defined by pnew / pnewl and slope a # find segment of polygon that is cut by new limiting line and cut # if(ia>200) { ##; points(pnew[1],pnew[2],col="magenta",cex=6) } if( abs(angtan)>1e10){ if(verbose) cat("kkk",kkk,"x=c case") # case of vertical slope #print(pg);print(pnew);print(xyt);lines(pg,col="red",lwd=3) # number of points left of point pnew that limit the polygon pg.no<-sum(pg[,1]=pnewl[1]) if( 0 < pg.nol ){ ##??2 # 121204 cutpl<-c(pnewl[1],pgl[pg.nol,2]+pgl[pg.nol,3]*(pnewl[1]-pgl[pg.nol,1])) pgl<-rbind(pgl[1:pg.nol,],c(cutpl,angtan),c(cutpl[1]-dxy, cutpl[2]-angtan*dxy,NA)) } else { if(verbose) cat("!!! case degenerated LOWER polygon: pgl.no==0") pgl <- rbind(pgl[1,], c(pgl[2,1:2],NA)) } }else{ # if(verbose) cat("kkk",kkk,"normal case") # normal case upper polygon pg.inter<-pg[,2]-angtan*pg[,1]; pnew.inter<-pnew[2]-angtan*pnew[1] pg.no<-sum(pg.interpnew.interl) if(is.na(pgl[pg.nol,3])) pgl[pg.nol,3] <- Inf # 121129 NaN/Na error cutpl<-cut.p.sl.p.sl(pnewl,angtan,pgl[pg.nol,1:2],pgl[pg.nol,3]) pgl<-rbind(pgl[1:pg.nol,],c(cutpl,angtan),c(cutpl[1]-dxy, cutpl[2]-angtan*dxy,NA)) } ## if(kkk==KKK && ia == 51) { cat("ENDE: pgl"); print(pgl) } # update pg, pgl completed # PG<<-pg;PG.NO<<-pg.no;CUTP<<-cutp;DXY<<-dxy;PNEW<<-pnew;PGL<<-pgl;PG.NOL<<-pg.nol ######################################### #### cat("angtan",angtan,"pg.no",pg.no,"pkt:",pnew) # if(ia==stopp) lines(pg,type="b",col="green") if(debug.plots=="all"){ points(pnew[1],pnew[2],col="red") hx<-xyxy[ind.k,c(1,1)]; hy<-xyxy[ind.k,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) # text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) # print(pg) # if(ia==stopp) lines(pgl,type="b",col="green") points(cutpl[1],cutpl[2],col="red") hx<-xyxy[ind.kk,c(1,1)]; hy<-xyxy[ind.kk,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) # text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) # print(pgl) } ##show pg pgl## } # if(verbose) PG <<- pg; PGL <<- pgl if(2# limit<-1e-10 ## pg <-pg [c(TRUE,(abs(diff(pg [,1]))>limit)|(abs(diff(pg [,2]))>limit)),] old# idx <- c(TRUE,(abs(diff(pg [,1]))>limit)|(abs(diff(pg [,2]))>limit)) # 121008 if(any(idx==FALSE)){ pg <-pg[idx,]; pg[,3] <- c(diff(pg[,2])/diff(pg[,1]), NA) } # old reduction which caused some errors: ## pgl<-pgl[c(TRUE,(abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit)),] error## ## pgl<-pgl[c( (abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit),TRUE),] old# idx <- c( (abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit),TRUE)#121008 if(any(idx==FALSE)){ pgl<-pgl[idx,]; pgl[,3] <- c(diff(pgl[,2])/diff(pgl[,1]), NA) } ## add some tolerance in course of numerical problems pgl[,2]<-pgl[,2] - .00001 ## 121004 ## show pg pgl>> pg<- pg [-nrow(pg ),][-1,,drop=FALSE] pgl<-pgl[-nrow(pgl),][-1,,drop=FALSE] # determine position according to the other polygon # cat("relative position: lower polygon") indl<-pos.to.pg(round(pgl,digits=10),round(pg,digits=10)) # 121126 # cat("relative position: upper polygon") indu<-pos.to.pg(round(pg,digits=10),round(pgl,digits=10),TRUE) sr<-sl<-NULL # ; ##show pg pgl>> # right region if(indu[(npg<-nrow(pg))]=="lower" & indl[1]=="higher"){ # cat("in if of right region: the upper polynom is somewhere lower") # checking from the right: last point of lower polygon that is NOT ok rnuml<-which(indl=="lower")[1]-1 # checking from the left: last point of upper polygon that is ok rnumu<-npg+1-which(rev(indu=="higher"))[1] # special case all points of lower polygon are upper if(is.na(rnuml)) rnuml<-sum(pg[rnumu,1]200) { ##; points(pnew[1],pnew[2],col="magenta",cex=6) } if( abs(angtan)>1e10){ if(verbose) cat("kkk",kkk,"x=c case") # case of vertical slope #print(pg);print(pnew);print(xyt);lines(pg,col="red",lwd=3) # number of points left of point pnew that limit the polygon pg.no<-sum(pg[,1]=pnewl[1]) if( 0 < pg.nol ){ ##??2 # 121204 cutpl<-c(pnewl[1],pgl[pg.nol,2]+pgl[pg.nol,3]*(pnewl[1]-pgl[pg.nol,1])) pgl<-rbind(pgl[1:pg.nol,],c(cutpl,angtan),c(cutpl[1]-dxy, cutpl[2]-angtan*dxy,NA)) } else { if(verbose) cat("!!! case degenerated LOWER polygon: pgl.no==0") pgl <- rbind(pgl[1,], c(pgl[2,1:2],NA)) } }else{ # if(verbose) cat("kkk",kkk,"normal case") # normal case upper polygon pg.inter<-pg[,2]-angtan*pg[,1]; pnew.inter<-pnew[2]-angtan*pnew[1] pg.no<-sum(pg.interpnew.interl) if(is.na(pgl[pg.nol,3])) pgl[pg.nol,3] <- Inf # 121129 NaN/Na error cutpl<-cut.p.sl.p.sl(pnewl,angtan,pgl[pg.nol,1:2],pgl[pg.nol,3]) pgl<-rbind(pgl[1:pg.nol,],c(cutpl,angtan),c(cutpl[1]-dxy, cutpl[2]-angtan*dxy,NA)) } ## if(kkk==KKK && ia == 51) { cat("ENDE: pgl"); print(pgl) } # update pg, pgl completed # PG<<-pg;PG.NO<<-pg.no;CUTP<<-cutp;DXY<<-dxy;PNEW<<-pnew;PGL<<-pgl;PG.NOL<<-pg.nol ######################################### #### cat("angtan",angtan,"pg.no",pg.no,"pkt:",pnew) # if(ia==stopp) lines(pg,type="b",col="green") if(debug.plots=="all"){ points(pnew[1],pnew[2],col="red") hx<-xyxy[ind.k,c(1,1)]; hy<-xyxy[ind.k,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) # text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) # print(pg) # if(ia==stopp) lines(pgl,type="b",col="green") points(cutpl[1],cutpl[2],col="red") hx<-xyxy[ind.kk,c(1,1)]; hy<-xyxy[ind.kk,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) # text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) # print(pgl) } ##show pg pgl## } # if(verbose) PG <<- pg; PGL <<- pgl if(2# limit<-1e-10 ## pg <-pg [c(TRUE,(abs(diff(pg [,1]))>limit)|(abs(diff(pg [,2]))>limit)),] old# idx <- c(TRUE,(abs(diff(pg [,1]))>limit)|(abs(diff(pg [,2]))>limit)) # 121008 if(any(idx==FALSE)){ pg <-pg[idx,]; pg[,3] <- c(diff(pg[,2])/diff(pg[,1]), NA) } # old reduction which caused some errors: ## pgl<-pgl[c(TRUE,(abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit)),] error## ## pgl<-pgl[c( (abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit),TRUE),] old# idx <- c( (abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit),TRUE)#121008 if(any(idx==FALSE)){ pgl<-pgl[idx,]; pgl[,3] <- c(diff(pgl[,2])/diff(pgl[,1]), NA) } ## add some tolerance in course of numerical problems pgl[,2]<-pgl[,2] - .00001 ## 121004 ## show pg pgl>> pg<- pg [-nrow(pg ),][-1,,drop=FALSE] pgl<-pgl[-nrow(pgl),][-1,,drop=FALSE] # determine position according to the other polygon # cat("relative position: lower polygon") indl<-pos.to.pg(round(pgl,digits=10),round(pg,digits=10)) # 121126 # cat("relative position: upper polygon") indu<-pos.to.pg(round(pg,digits=10),round(pgl,digits=10),TRUE) sr<-sl<-NULL # ; ##show pg pgl>> # right region if(indu[(npg<-nrow(pg))]=="lower" & indl[1]=="higher"){ # cat("in if of right region: the upper polynom is somewhere lower") # checking from the right: last point of lower polygon that is NOT ok rnuml<-which(indl=="lower")[1]-1 # checking from the left: last point of upper polygon that is ok rnumu<-npg+1-which(rev(indu=="higher"))[1] # special case all points of lower polygon are upper if(is.na(rnuml)) rnuml<-sum(pg[rnumu,1]= k ,,drop=FALSE] pkt.cand <-xydata[hdepth==(k-1),,drop=FALSE] pkt.not.bag<-xydata[hdepth< (k-1),,drop=FALSE] if( 0 < length(pkt.cand) && 0 < length(hull.bag) ){ outside<-out.of.polygon(pkt.cand,hull.bag) if(sum(!outside)>0) pxy.bag <-rbind(pxy.bag, pkt.cand[!outside,]) if(sum( outside)>0) pkt.not.bag<-rbind(pkt.not.bag, pkt.cand[ outside,]) } }else { extr<-out.of.polygon(xydata,hull.bag) pxy.bag <-xydata[!extr,] pkt.not.bag<-xydata[extr,,drop=FALSE] } if(length(pkt.not.bag)>0){ extr<-out.of.polygon(pkt.not.bag,hull.loop) pxy.outlier<-pkt.not.bag[extr,,drop=FALSE] if(0==length(pxy.outlier)) pxy.outlier<-NULL pxy.outer<-pkt.not.bag[!extr,,drop=FALSE] }else{ pxy.outer<-pxy.outlier<-NULL } if(verbose) cat("points of bag, outer points and outlier identified") hull.loop<-rbind(pxy.outer,hull.bag) hull.loop<-hull.loop[chull(hull.loop[,1],hull.loop[,2]),] if(verbose) cat("end of computation of loop") res<-list( center=center, hull.center=hull.center, hull.bag=hull.bag, hull.loop=hull.loop, pxy.bag=pxy.bag, pxy.outer=if(length(pxy.outer)>0) pxy.outer else NULL, pxy.outlier=if(length(pxy.outlier)>0) pxy.outlier else NULL, hdepths=hdepth, is.one.dim=is.one.dim, prdata=prdata, ## random.seed=random.seed, #SEED xy=xy,xydata=xydata ) if(verbose) res<-c(res,list(exp.dk=exp.dk,exp.dk.1=exp.dk.1,hdepth=hdepth)) class(res)<-"bagplot" return(res) } plot.bagplot<-function(x, show.outlier=TRUE,# if TRUE outlier are shown show.whiskers=TRUE, # if TRUE whiskers are shown show.looppoints=TRUE, # if TRUE points in loop are shown show.bagpoints=TRUE, # if TRUE points in bag are shown show.loophull=TRUE, # if TRUE loop is shown show.baghull=TRUE, # if TRUE bag is shown add=FALSE, # if TRUE graphical elements are added to actual plot pch=16,cex=.4, # to define further parameters of plot verbose=FALSE, # tools for debugging col.loophull="#aaccff", # Alternatives: #ccffaa, #ffaacc col.looppoints="#3355ff", # Alternatives: #55ff33, #ff3355 col.baghull="#7799ff", # Alternatives: #99ff77, #ff7799 col.bagpoints="#000088", # Alternatives: #008800, #880000 transparency=FALSE, show.center = TRUE, ... ){ if(missing(x)) return( "bagplot, version 2012/12/05, peter wolf" ) # transparency flag and color flags have been proposed by wouter if (transparency==TRUE) { col.loophull = paste(col.loophull, "99", sep="") col.baghull = paste(col.baghull, "99", sep="") } win<-function(dx,dy){ atan2(y=dy,x=dx) } cut.z.pg<-function(zx,zy,p1x,p1y,p2x,p2y){ a2<-(p2y-p1y)/(p2x-p1x); a1<-zy/zx sx<-(p1y-a2*p1x)/(a1-a2); sy<-a1*sx sxy<-cbind(sx,sy) h<-any(is.nan(sxy))||any(is.na(sxy))||any(Inf==abs(sxy)) if(h){ # print("NAN found"); print(cbind(a1,a2,zx,zy,sxy,p2x-p1x)) if(!exists("verbose")) verbose<-FALSE if(verbose) cat("special") # zx is zero # 121030 h<-0==zx sx<-ifelse(h,zx,sx); sy<-ifelse(h,p1y-a2*p1x,sy) # points on line defined by line segment a1 <- ifelse( abs(a1) == Inf, sign(a1)*123456789*1E10, a1) # 121030 a2 <- ifelse( abs(a2) == Inf, sign(a2)*123456789*1E10, a2) # points on line defined by line segment h<-0==(a1-a2) & sign(zx)==sign(p1x) sx<-ifelse(h,p1x,sx); sy<-ifelse(h,p1y,sy) h<-0==(a1-a2) & sign(zx)!=sign(p1x) sx<-ifelse(h,p2x,sx); sy<-ifelse(h,p2y,sy) # line segment vertical # & center NOT ON line segment h<-p1x==p2x & zx!=p1x & p1x!=0 sx<-ifelse(h,p1x,sx); sy<-ifelse(h,zy*p1x/zx,sy) # & center ON line segment h<-p1x==p2x & zx!=p1x & p1x==0 sx<-ifelse(h,p1x,sx); sy<-ifelse(h,0,sy) # & center NOT ON line segment & point on line # 121126 h<-p1x==p2x & zx==p1x & p1x!=0 # & sign(zy)==sign(p1y) sx<-ifelse(h,zx,sx); sy<-ifelse(h,zy,sy) # & center ON line segment & point on line h<-p1x==p2x & zx==p1x & p1x==0 & sign(zy)==sign(p1y) sx<-ifelse(h,p1x,sx); sy<-ifelse(h,p1y,sy) h<-p1x==p2x & zx==p1x & p1x==0 & sign(zy)!=sign(p1y) sx<-ifelse(h,p1x,sx); sy<-ifelse(h,p2y,sy) # points identical to end points of line segment h<-zx==p1x & zy==p1y; sx<-ifelse(h,p1x,sx); sy<-ifelse(h,p1y,sy) h<-zx==p2x & zy==p2y; sx<-ifelse(h,p2x,sx); sy<-ifelse(h,p2y,sy) # point of z is center h<-zx==0 & zy==0; sx<-ifelse(h,0,sx); sy<-ifelse(h,0,sy) sxy<-cbind(sx,sy) } # end of special cases #if(verbose){ print(rbind(a1,a2));print(cbind(zx,zy,p1x,p1y,p2x,p2y,sxy))} if(!exists("debug.plots")) debug.plots<-"no" if(debug.plots=="all"){ segments(sxy[,1],sxy[,2],zx,zy,col="red") segments(0,0,sxy[,1],sxy[,2],col="green",lty=2) ##!! points(sxy,col="red") } return(sxy) } find.cut.z.pg<-function(z,pg,center=c(0,0),debug.plots="no"){ if(!is.matrix(z)) z<-rbind(z) if(1==nrow(pg)) return(matrix(center,nrow(z),2,TRUE)) n.pg<-nrow(pg); n.z<-nrow(z) z<-cbind(z[,1]-center[1],z[,2]-center[2]) pgo<-pg; pg<-cbind(pg[,1]-center[1],pg[,2]-center[2]) if(!exists("debug.plots")) debug.plots<-"no" if(debug.plots=="all"){ plot(rbind(z,pg,0),bty="n"); points(z,pch="p") lines(c(pg[,1],pg[1,1]),c(pg[,2],pg[1,2]))} # find angles of pg und z apg<-win(pg[,1],pg[,2]) apg[is.nan(apg)]<-0; a<-order(apg); apg<-apg[a]; pg<-pg[a,] az<-win(z[,1],z[,2]) # find line segments segm.no<-apply((outer(apg,az,"<")),2,sum) segm.no<-ifelse(segm.no==0,n.pg,segm.no) next.no<-1+(segm.no %% length(apg)) # compute cut points cuts<-cut.z.pg(z[,1],z[,2],pg[segm.no,1],pg[segm.no,2], pg[next.no,1],pg[next.no,2]) # rescale cuts<-cbind(cuts[,1]+center[1],cuts[,2]+center[2]) return(cuts) } ## find.cut.z.pg(EX, EX1,center=CE) center<-hull.center<-hull.bag<-hull.loop<-pxy.bag<-pxy.outer<-pxy.outlier<-NULL # random.seed <- hdepths<-is.one.dim<-prdata<-xy<-xydata<-exp.dk<-exp.dk.1<-hdepth<-NULL tphdepth<-tp<-NULL #090216 bagplotobj<-x for(i in seq(along=bagplotobj)) eval(parse(text=paste(names(bagplotobj)[i],"<-bagplotobj[[",i,"]]"))) if(is.one.dim){ if(!verbose) cat("data set one dimensional") # 121202 ROT<-round(prdata[[2]],digits=5); IROT<-round(solve(ROT),digits=5) if(!add){ ## 121008 ## 121130 plot(xydata,type="n",bty="n",pch=16,cex=1, ...) # xlim=xlim, ylim=ylim, ...) } # find five points for box and whiskers usr <- par()$usr; xlim <- usr[1:2]; ylim <- usr[3:4] mins <- usr[c(1,3)]; ranges <- usr[c(2,4)] - mins if(ROT[1,1]==0){ # cat("FALL senkrecht") xydata <- cbind( mean(usr[1:2]) ,xydata[,2]) boxplotres<-boxplot(xydata[,2],plot=FALSE) five<-cbind(mean(usr[1:2]),boxplotres$stat) dx <- 0.1*(xlim[2]-xlim[1]); dy <- 0 idx.out <- if(01){ tstart2 <- slider(no=3); tend2 <- width+tstart2 } # plot par(mfrow=c(2+(n.windows>1),1),mai=c(.5,0.5,.1,0)) # plot(x,y,type="l",bty="n",xlab="",ylab="") do.call("plot",c(alist(x,y,type="l",bty="n"),args)) abline(v=c(x[tstart1],x[tend1]),col="red") lines(x[tstart1:tend1],y[tstart1:tend1],col="red",lty=2) if(n.windows>1){ abline(v=c(x[tstart2],x[tend2]),col="blue") lines(x[tstart2:tend2],y[tstart2:tend2],col="blue",lty=3) } usr<-par()$usr ind<-tstart1:tend1 plot(x[ind],y[ind],type="b",col="red",bty="n", # ylim=usr[3:4], xlim=c(x[tstart1],x[tstart1]+width*diff(x[1:2]))) if(n.windows>1){ ind<-tstart2:tend2 plot(x[ind],y[ind],type="b",col="blue",bty="n", # ylim=usr[3:4], xlim=c(x[tstart2],x[tstart2]+width*diff(x[1:2]))) } par(mfrow=c(1,1)) } if(n.windows<2){ slider(refresh,c("width of window","start of window"), c(1,1),c(tmax,tmax),c(1,1),c(ceiling(tmax/4),1)) }else{ slider(refresh, c("width of window","start window 1","start window 2"), c(1,1,1),c(tmax,tmax,tmax),c(1,1,1),c(ceiling(tmax/4),1,ceiling(tmax/2))) } refresh() cat("select window and look at time series!\n") } aplpack/R/slider.density.R0000644000176200001440000000223413516603654015163 0ustar liggesusersslider.density<-function(x,panel=rug,...) { x.name<-deparse(substitute(x)) if(missing(x)||length(x)<2) return("Error: x must be a vector") args<-list(...) if(!any("main"==names(args))) args<-c(args,list(main=x.name)) kernel<-c("gaussian", "epanechnikov","rectangular", "triangular","biweight", "cosine", "optcosine") slider(obj.name="kno",obj.value=1) refresh<-function(...){ width<-slider(no=1)*diff(range(x))/100 kno<-slider(obj.name="kno"); kernel<-kernel[kno] xy<-density(x,width=width,kernel=kernel) do.call("plot",c(alist(x=xy),args)) title(paste("\n\nwidth =",signif(width,4),", kernel =",kernel)) panel(x) } set.kernel<-function(...){ kernel<-slider(no=2) slider(obj.name="kno",obj.value=kernel) refresh() } bw.default<-diff(range(x))/density(x)$bw nt <- slider(c(refresh,set.kernel), c("width (% of range)","kernel"), c(.1,1),c(100,7),c(.1,1),c(bw.default,1) ) # tkwm.minsize(nt, "300", "110") # set width, height to prevent to small sizes refresh() cat("use slider to select width of window and to select kernel:\n") print(cbind("no"=1:7,"kernel"=kernel)) } aplpack/R/slider.stem.leaf.R0000644000176200001440000000517213516603654015366 0ustar liggesusersslider.stem.leaf<-function(x,main=main){ main<-if(missing(main)) deparse(substitute(x)) else main slider(obj.name="main", obj.value=paste("stem and leaf of",main)) slider(obj.name="rule.line",obj.value="Dixon") repl<-function(...){ rule.line<-slider(obj.name="rule.line") main<-c(slider(obj.name="main"), paste("rule:", rule.line)) cex<-slider(no=1); m<-slider(no=2) res<-if(m>0) stem.leaf(x,m=m,rule.line=rule.line) else stem.leaf(x,rule.line=rule.line) stem<-rev(res$stem); stem <- paste(rev(res$depth), stem, rev(res$leaves)) # x.max<-max(nchar(res$stem)); y.max<-length(res$stem) x.max<-max(nchar(stem)); y.max<-length(stem) #140922 opar<-par(mai=c(0.5,0.2,0.5,0),oma=c(0,0,0,0), omi=c(0,0,0,0)) plot(0,type="n",xlim=c(1,x.max), ylim=c(-1.5,y.max+2),ann=FALSE,axes=FALSE) text(1,-2,paste(res$info,collapse=","),cex=cex,adj=0,xpd=NA) if(!is.null(res$upper)){ text(1, -0.5,paste(res$upp,collapse=","),cex=cex,adj=0,xpd=NA) } if(!is.null(res$lower)) text(1,y.max+1.5,paste(res$low,collapse=","),cex=cex,adj=0,xpd=NA) title(main,cex.main=cex) for(i in 1:y.max){ n<-nchar(h<-stem[i]); h<-substring(h,1:n,1:n) text(1:n,i,h,cex=cex) } par(opar) } # end of repl b1<-function(...){ slider(obj.name="rule.line",obj.value="Dixon") repl(); print(slider(obj.name="rule.line")) } b2<-function(...){ slider(obj.name="rule.line",obj.value="Velleman") repl(); print(slider(obj.name="rule.line")) } b3<-function(...){ slider(obj.name="rule.line",obj.value="Sturges") repl(); print(slider(obj.name="rule.line")) } sp<-function(...){ din<-par()$din filename<-tkgetSaveFile(filetypes="{{Paper Files} {.ps|.jpg}}", title="name of ps-/jpg-file?", initialdir=getwd(), defaultextension=".ps", initialfile="stem-and-leaf") filename<-sub("\\.ps$","",sub("\\.jpg$","",filename)) filename<-paste(filename,".ps",sep="") dev.copy(postscript,filename,width=din[1],height=din[2], horizontal=FALSE); dev.off() filename<-sub(".ps",".jpg",filename) dev.copy(jpeg,filename,units="in",res=95,width=din[1],height=din[2]) dev.off() } nt <- slider(repl, # 140925 c("character size","rows per unit, 0=by rule"), c(0.5,0),c(5,10),c(.1,1),c(1,0), c(b1,b2,b3,sp),c("Dixon rule","Velleman rule","Sturges rule", "save plot") ) tkwm.minsize(nt, "450", "110") # set width, height to prevent to small sizes repl() "choose layout by control widget" } # slider.stem.leaf(c(co2,100,1000)) aplpack/R/spin3R.R0000644000176200001440000001067513516603654013411 0ustar liggesusersspin3R <- function(x, alpha=1, delay=.015, na.rm=FALSE){ ################################################################# # spin3R: simple spin function to rotate a 3-dim cloud of points# # pwolf 070831 / 080520 # # # # arguments: # # # # x (nx3)-matrix of points # # alpha arc of rotation # # delay sleeping time between rotations # # # ################################################################# if(ncol(x)!=3) { print("Error: data matrix must have 3 columns"); return() } if (!requireNamespace("tcltk", quietly = TRUE)) stop("package 'tcltk' is needed") #190715 bw <- 4 topl<-tktoplevel(); tkwm.geometry(topl,"+0+500") f1 <- tkframe(topl);f2 <- tkframe(topl);f3 <- tkframe(topl) f4 <- tkframe(topl);f5 <- tkframe(topl);tkpack(f1,f2,f3,f4,f5) f6 <- tkframe(topl); tkpack(f6) b12 <- tkbutton(f1, relief="ridge", width=bw, text="up") b21 <- tkbutton(f2, relief="ridge", width=bw, text="left") b22 <- tklabel(f2, relief="flat", width=bw) b23 <- tkbutton(f2, relief="ridge", width=bw, text="right") b32 <- tkbutton(f3, relief="ridge", width=bw, text="down") b41 <- tkbutton(f4, relief="ridge", width=bw, text="clock") b42 <- tklabel(f4, relief="flat", width=bw) b43 <- tkbutton(f4, relief="ridge", width=bw, text="cclock") b51 <- tkbutton(f5, relief="flat", width=bw, text="------") b52 <- tklabel(f5, relief="flat", width=bw, height=bw) b53 <- tkbutton(f5, relief="flat", width=bw, text="------") b61 <- tkbutton(f6, relief="raised", width=3*bw, text="EXIT") tkpack(b12,b32) tkpack(b21,b22,b41,b42,b51,b52,side="left") tkpack(b23,b43,b53,side="right") tkpack(b61) alpha<-alpha/360*2*pi; ca<-cos(alpha); sa<-sin(alpha) rot<-matrix(c(ca,-sa,sa,ca),2,2) n <- nrow(x) if(any(is.na(x))){ if(na.rm){ x<-x[!apply(is.na(x),1,any),,drop=FALSE] print("Warning: NA elements have been removed!!") }else{ xy.means<-colMeans(x,na.rm=TRUE) for(j in 1:ncol(x)) x[is.na(x[,j]),j]<-xy.means[j] print("Warning: NA elements have been exchanged by mean values!!") } } x <- x - matrix(apply(x,2,min),n,3,TRUE) x.o<-x<-x / matrix(apply(x,2,max),n,3,TRUE) - 0.5; xa <- x[,2:3] A.o<-A<-0.5*matrix(c(1,0,0, 0,0,0, 0,1,0, 0,0,0, 0,0,1),5,3,TRUE) Aa <- A[,2:3] plot(xa, xlim=.7*c(-1,1), ylim=.7*c(-1,1),bty="n", pch=20, xlab="",ylab="",xaxt="n",yaxt="n",type="n") lines(Aa) i <- 0 ; i.max<-60 cat("exit by button Exit\n") delay<-.01 if(delay < 0.015) delay <- 0.005 colors<-rev(rainbow(ncolors<-30)) # first view ind<-c(1,3); x0 <- x; x0[,ind] <- x[,ind]%*%rot; xb <- x0[,2:3] xcol<-colors[ceiling((x0[,1]+1)*0.5*ncolors)] points(xb, pch=20, col=xcol,cex=2*(1.5+x0[,1])) cex <- .3*2*(1.5+x0[,1]) points(xb + 0.005 * cex, pch=20, col="white",cex=cex^2); xa<-x0[,2:3] # info box tkmessageBox(title="ready for spinning?", # icon="yesno", message=paste("move cursor to with the desired rotation", "move cursor on 'EXIT' to exit",sep="\n")) # loop repeat{ Sys.sleep(delay) ##; if( ((i<-i+1)>i.max) ){ break } cx<-tclvalue(tkwinfo("pointerx",topl)) cy<-tclvalue(tkwinfo("pointery",topl)) widget.id<-tclvalue(tkwinfo("containing",cx,cy)) choice<-sub(paste(sep="",topl$ID,".*([1-6].[1-6]$)"),"\\1",widget.id) if(choice=="6.1") break switch(choice, "1.1" = ind<-c(1,3), "2.1" = ind<-c(2,1), "2.3" = ind<-c(1,2), "3.1" = ind<-c(3,1), "4.1" = ind<-c(3,2), "4.3" = ind<-c(2,3), next ) x[,ind] <- x[,ind]%*%rot; A[,ind] <- A[,ind]%*%rot xb<-x[,2:3]; Ab<-A[,2:3] #; dcol<-c(rep("black",n),rep("white",n)) xcol<-colors[ceiling((x[,1]+1)*0.5*ncolors)] dcol<-c(xcol,rep("white",n)) points(rbind(xb,xa), pch=20, col=dcol,cex=2*c(1.5+x[,1],rep(3,n))) # 1* # points(xb, pch=20, col="black",cex=1.5+x[,1]); points(xa, pch=20, cex=3, col="white") lines(Aa, col="white",lwd=3) points(xb, pch=20, col=xcol,cex=2*(1.5+x[,1])) # 1* cex <- .3*2*(1.5+x[,1]) points(xb + 0.005 * cex, pch=20, col="white",cex=cex^2); lines(Ab, col="black") xa<-x[,2:3]; Aa<-A[,2:3] } print(cex) tkdestroy(topl) "control widget closed" } # end of spin3R aplpack/R/slider.R0000644000176200001440000002312513516603655013510 0ustar liggesusersslider<- function (sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, sl.defaults, but.functions, but.names, no, set.no.value, obj.name, obj.value, reset.function, title, prompt=FALSE, sliders.frame.vertical=TRUE) { # pwolf 080310 080603 100917 slider.env<-"1"; rm("slider.env") if (!exists("slider.env")) slider<-slider.env<<-new.env(parent=.GlobalEnv) if (!missing(no)) return(as.numeric(tclvalue(get(paste("slider", no, sep = ""), envir = slider.env)))) if (!missing(set.no.value)) { try(eval(parse(text = paste("tclvalue(slider", set.no.value[1], ")<-", set.no.value[2], sep = "")), envir = slider.env)) return(set.no.value[2]) } if (!missing(obj.name)) { if (!missing(obj.value)) assign(obj.name, obj.value, envir = slider.env) else obj.value <- get(obj.name, envir = slider.env) return(obj.value) } if (missing(title)) title<-"slider control widget" if (missing(sl.names)) {sl.defaults <- sl.names <- NULL} if (missing(sl.functions)) sl.functions <- function(...) { } if (!requireNamespace("tcltk", quietly = TRUE)) stop("package 'tcltk' is needed") #190715 nt.top <-tktoplevel() # 160115 tkwm.title(nt.top, title) # 160115 tkwm.geometry(nt.top, "+0+15") # 160115 assign("tktop.slider", nt.top, envir = slider.env) # 160115 nt <- tkframe(nt.top) # 160115 "relax" tkpack(f.slider<-tkframe(nt)) ##vertical for (i in seq(sl.names)) { "relax" eval(parse(text=paste("assign('slider", i, "',tclVar(sl.defaults[i]),envir=slider.env)",sep="") )) } for (i in seq(along=sl.names)) { tkpack(fr <- tkframe(f.slider), side = if (sliders.frame.vertical) "top" else "right") ##vertical lab <- tklabel(fr, text = sl.names[i], width = "25") sc <- tkscale(fr, from = sl.mins[i], to = sl.maxs[i], showvalue = TRUE, resolution = sl.deltas[i], orient = "horiz") tkpack(lab, sc, side=if(sliders.frame.vertical) "right" else "top") ##vertical assign("sc", sc, envir = slider.env) eval(parse(text=paste("tkconfigure(sc,variable=slider", i, ")", sep = "")), envir = slider.env) sl.fun<-if(length(sl.functions)>1)sl.functions[[i]] else sl.functions if(!is.function(sl.fun)) sl.fun <- eval(parse(text = paste("function(...){", sl.fun, "}"))) if(prompt) tkconfigure(sc,command=sl.fun) else tkbind(sc,"",sl.fun) } assign("slider.values.old", sl.defaults, envir = slider.env) tkpack(f.but <- tkframe(nt), fill = "x") tkpack(tkbutton(f.but, text = "Exit", command = function() tkdestroy(nt.top)), side = "right") # 160115 if(!missing(reset.function)){ # reset.function <- function(...) print("relax") if(!is.function(reset.function)) reset.function <- eval(parse(text = paste("function(...){",reset.function, "}"))) tkpack(tkbutton(f.but,text="Reset", command = function(){ for (i in seq(sl.names)) eval(parse(text = paste("tclvalue(slider", i, ")<-", sl.defaults[i], sep = "")), envir = slider.env) reset.function() }), side = "right") } if (missing(but.names)) but.names <- NULL for(i in seq(but.names)) { but.fun<-if(length(but.functions)>1)but.functions[[i]] else but.functions if(!is.function(but.fun)) but.fun<-eval(parse(text = c("function(...){",but.fun,"}"))) tkpack(tkbutton(f.but, text = but.names[i], command = but.fun), side = "left") } Sys.sleep(.2) tkpack(nt) invisible(nt) } gslider<- function (sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, sl.defaults, but.functions, but.names, no, set.no.value, obj.name, obj.value, reset.function, title, prompt=FALSE, sliders.frame.vertical=TRUE, hscale=1, vscale=1, pos.of.panel = c("bottom","top","left","right")[1]) { # pwolf 100915 / 121206 if (!requireNamespace("tkrplot", quietly = TRUE)) stop("package 'tkrplot' is needed") #190715 slider.env<-"1"; rm("slider.env") if (!exists("slider.env")) slider<-slider.env<<-new.env(parent=.GlobalEnv) if (!missing(no)) return(as.numeric(tclvalue(get(paste("slider", no, sep = ""), envir = slider.env)))) if (!missing(set.no.value)) { try(eval(parse(text = paste("tclvalue(slider", set.no.value[1], ")<-", set.no.value[2], sep = "")), envir = slider.env)) return(set.no.value[2]) } if (!missing(obj.name)) { if (!missing(obj.value)) assign(obj.name, obj.value, envir = slider.env) else obj.value <- get(obj.name, envir = slider.env) return(obj.value) } if (missing(title)) title<-"slider control widget" if (missing(sl.names)) {sl.defaults <- sl.names <- NULL} if (missing(sl.functions)) sl.functions <- function(...) { } if (!requireNamespace("tcltk", quietly = TRUE)) stop("package 'tcltk' is needed") #190715 nt.top <-tktoplevel() # 160115 tkwm.title(nt.top, title) # 160115 tkwm.geometry(nt.top, "+0+15") # 160115 assign("tktop.slider", nt.top, envir = slider.env) # 160115 nt <- tkframe(nt.top) # 160115 "relax" nt.bak <- nt sl.frame <- tkframe(nt); gr.frame <- tkframe(nt) if( !any(pos.of.panel == c("bottom","top","left","right"))) pos.of.panel <- "bottom" tkpack(sl.frame,gr.frame,side=pos.of.panel) # gslider start: newpl<-function(...){ graphics::plot(0:2,0:2,type="n",xlab="",ylab=""); graphics::text(1,1,"dummy plot") } img <- tkrplot::tkrplot(gr.frame, newpl, vscale=vscale, hscale=hscale ); tkpack(img,side="top") assign("img",img,envir=slider.env) # :gslider end ## sliders.frame.vertical ##vertical tkpack(f.slider<-tkframe(sl.frame)) ##vertical for (i in seq(along=sl.names)) { "relax" eval(parse(text=paste("assign('slider", i, "',tclVar(sl.defaults[i]),envir=slider.env)",sep="") )) } # gslider start: parent.env<-sys.frame(sys.nframe()-1) # :gslider end for (i in seq(along=sl.names)) { tkpack(fr <- tkframe(f.slider), # side = if( pos.of.panel %in% c("left","right")) "top" else { if (sliders.frame.vertical) "top" else "right" ##vertical }) lab <- tklabel(fr, text = sl.names[i], width = "25") sc <- tkscale(fr, from = sl.mins[i], to = sl.maxs[i], showvalue = TRUE, resolution = sl.deltas[i], orient = "horiz") tkpack(lab, sc, side= if( pos.of.panel %in% c("left","right")) "top" else { if(sliders.frame.vertical) "right" else "top" ##vertical }) assign("sc", sc, envir = slider.env) eval(parse(text=paste("tkconfigure(sc,variable=slider", i, ")", sep = "")), envir = slider.env) sl.fun<-if(is.list(sl.functions))sl.functions[[min(i,length(sl.functions))]] else sl.functions if(!is.function(sl.fun)) sl.fun <- eval(parse(text = paste("function(...){", sl.fun, "}"))) # gslider start: fname<-paste("tkrrsl.fun",i,sep="") eval(parse(text=c(paste(fname, " <-")," function(...){", "tkrreplot(get('img',envir=slider.env),fun=function()", deparse(sl.fun)[-1],")", "}" ))) eval(parse(text=paste("environment(",fname,")<-parent.env"))) if (prompt) tkconfigure(sc, command = get(fname)) else tkbind(sc, "", get(fname)) } if(exists("tkrrsl.fun1")) get("tkrrsl.fun1")() ## gslider only # :gslider end assign("slider.values.old", sl.defaults, envir = slider.env) tkpack(f.but <- tkframe(sl.frame), fill = "x") tkpack(tkbutton(f.but, text = "Exit", command = function() tkdestroy(nt.top)), side = "right") if(!missing(reset.function)){ # reset.function <- function(...) print("relax") if(!is.function(reset.function)) reset.function <- eval(parse(text = paste("function(...){",reset.function, "}"))) fname<-"reset.function" idx<-seq(along=sl.names) hhh <- paste(sep = "","sl",idx,"<-get('slider",idx,"',envir=slider.env);", "tclvalue(sl",idx,")<-",sl.defaults[idx],"\n") eval(parse(text = c(paste(fname, " <-"), " function(...){", hhh, "tkrreplot(get('img',envir=slider.env),fun=function()", deparse(reset.function)[-1], ")", "}"))) eval(parse(text = paste("environment(", fname, ")<-parent.env"))) tkpack(tkbutton(f.but, text = "Reset", command = get(fname)), side = "right") } if (missing(but.names)) but.names <- NULL for(i in seq(along=but.names)) { but.fun<-if(is.list(but.functions)) but.functions[[min(i,length(but.functions))]] else but.functions if(!is.function(but.fun)) but.fun<-eval(parse(text = c("function(...){",but.fun,"}"))) # gslider start: fname<-paste("tkrr.fun",i,sep="") eval(parse(text=c(paste(fname, " <-")," function(...){", "tkrreplot(get('img',envir=slider.env),fun=function()", deparse(but.fun)[-1],")", "}" ))) eval(parse(text=paste("environment(",fname,")<-parent.env"))) tkpack(tkbutton(f.but, text = but.names[i], command = get(fname)), side = "left") } if(exists("tkrr.fun1")) get("tkrr.fun1")() ## gslider only # :gslider end Sys.sleep(.2) tkpack(nt) invisible(img) } aplpack/R/puticon.R0000644000176200001440000034007613516603656013717 0ustar liggesusers##define [[puticon()]]:## #275: puticon <- function(x = 0, y = 0, icon = "", grey.levels = .5, icon.cex = 10, color = "red", ..., adj = c(0.5,0.5), xpd = NA){ #276: ##check inputs and manage case of showing design in [[puticon()]]:## pch <- file <- "" if( is.numeric(icon) && length(icon) == 1 ) pch <- icon if( is.character(icon) && !is.raster(icon)){ icon <- icon [1]; h <- nchar(icon) if( substring( icon, h - 3, h ) %in% c(".jpg", ".JPG", "jpeg", "JPEG", ".pnm", ".PNM", ".png", ".PNG") ){ if( substring( icon, 1, 4 ) == "http" ){ fname <- sub(".*[.]", ".", icon) fname <- tempfile("icon-pic", fileext = fname) h <- try( utils::download.file(url = icon, destfile = fname) ) if( "error" %in% class(h) ){ cat("Error in puticon: Download of file", icon, "failed.\n") return() } on.exit(file.remove(fname)) icon <- fname } if( file.exists(icon) ) file <- icon else { cat("Error in puticon: reading of file", icon, "failed.\n") } } } if(missing(x)){ #277: ##show design layout of special icon in [[puticon()]]:## #314: ##define [[show.icon.design()]]:## show.icon.design <- function(icon, reset = TRUE, color = NA, ...){ old <- par(pin = c(100, 100) / 25.4) plot(1:100, xlim = c(0,100), ylim = c(0,100), type = "n", axes = FALSE, xlab = "", ylab = "") par(usr = c(0,100,0,100)); axis(1); axis(2) color <- ifelse(is.na(color), sample(rainbow(15)), color) abline(h = c(0,100), v = c(0,100), lwd = 2, col = "blue", xpd = NA) puticon(50, 50, icon, icon.cex = 100, color = color, ...) if(reset) par(pin = old) } ##:define [[show.icon.design()]]## #:314 if(identical(icon, "")){ # no specific input # show internal icon generators: # find headers of generator h <- deparse(puticon); h <- h[grep(paste("\"internal generator", "function"), h) + 1] h <- sub("[<][-].*", "", h); h <- gsub(" ", "", h) # remove assignment h <- unique(h) cat("list of internal generator functions :\n"); cat(h, "\n") return(invisible(h)) } if(is.function(icon)){ # icon is a generator function show.icon.design(icon, color = "lightblue") cat("arguments of", substitute(icon),":\n") print(noquote(h <- args(icon))) return() } if(is.raster(icon)){ # icon is a raster graphics show.icon.design("car", color = "green") # icon[] <- (icon - (h <- min(icon))) / (max(icon) - h) # standardization rasterImage(icon, 0, 0, 100, 100 * ((h <- dim(icon))[1] / h[2]), interpolate = FALSE, xpd = xpd) return() } if( is.numeric(icon) ){ # central symbol show.icon.design("circle", color = "white") cex <- 25.4 * par()$pin[1] * 0.21 points(50, 50, pch = pch, cex = cex, lwd = cex ) cat("central symbol", icon[1], "will be used as icon; see points()\n") return() } # now icon is the name of an internal generator or a file name if( is.character(icon) ){ # but no raster object if( "" != file ){ # variable file is assigned yet show.icon.design("circle", color = "white") #287: ##read jpeg, png or pnm file in [[puticon()]]:## icon <- 0; class(icon) <- "error" # JPEG if( 0 < length(grep("jp[e]{0,1}g$", file)) || 0 < length(grep("JP[E]{0,1}G$", file))){ if(!"package:jpeg" %in% search()){ print("puticon() requires package jpeg") # library(jpeg, lib.loc = .libPaths()) } icon <- try(jpeg::readJPEG(file, native = !TRUE)) ############# } # PNG if( 0 < length(grep("png$", file)) || 0 < length(grep("PNG$", file))){ if(!"package:png" %in% search()){ print("puticon() requires package png") # library(png, lib.loc = .libPaths()) } icon <- png::readPNG(file, native = !TRUE) ################## } # PNM if( 0 < length(grep("pnm$", file)) || 0 < length(grep("PNM$", file))){ if(!"package:tcltk" %in% search()){ print("puticon() requires package tcltk") # library(tcltk, lib.loc = .libPaths()) } #221: ##define [[get.pnm()]]:## get.pnm <- function(filename, verbose = FALSE){ #222: ##find P* type of pnm file:## nextline <- scan(filename, what="", n=1) if( substring(nextline, 1, 1) != "P" || ! ( PType <- substring(nextline, 2, 2) ) %in% as.character(1:6)) return("ERROR: reading pnm file failed: no pnm file") PType <- as.numeric(PType); if(verbose) cat("PType:", PType); skip <- 0 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- unlist( strsplit( nextline, "[ \t]"))[-1] ##:find P* type of pnm file## #:222 #223: ##get width of pnm picture:## #226: ##get next line that is not empty:## idx <- 20 while(idx > 0 & 0 == length(nextline)){ idx <- idx - 1; skip <- skip + 1 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- sub("[#].*", "", nextline) nextline <- unlist( strsplit( nextline, "[ \t]")) } if( idx == 0 ) return("ERROR: reading pnm file failed: too many #-lines") nextline <- as.numeric(nextline) ##:get next line that is not empty## #:226 width <- nextline[1]; if(verbose) cat("width:",width) nextline <- nextline[-1] ##:get width of pnm picture## #:223 #224: ##get height of pnm picture:## if( length(nextline) == 0 ){ #226: ##get next line that is not empty:## idx <- 20 while(idx > 0 & 0 == length(nextline)){ idx <- idx - 1; skip <- skip + 1 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- sub("[#].*", "", nextline) nextline <- unlist( strsplit( nextline, "[ \t]")) } if( idx == 0 ) return("ERROR: reading pnm file failed: too many #-lines") nextline <- as.numeric(nextline) ##:get next line that is not empty## #:226 } height <- nextline[1]; if(verbose) cat("height:", height) nextline <- nextline[-1] ##:get height of pnm picture## #:224 #225: ##get colors of pnm picture:## if(PType == 1 || PType == 4) colors <- 1 else { if( length(nextline) == 0 ){ #226: ##get next line that is not empty:## idx <- 20 while(idx > 0 & 0 == length(nextline)){ idx <- idx - 1; skip <- skip + 1 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- sub("[#].*", "", nextline) nextline <- unlist( strsplit( nextline, "[ \t]")) } if( idx == 0 ) return("ERROR: reading pnm file failed: too many #-lines") nextline <- as.numeric(nextline) ##:get next line that is not empty## #:226 } colors <- nextline[1] }; if(verbose){ cat("colors:", colors); cat("head processed") } ##:get colors of pnm picture## #:225 #228: ##get decpixel of pnm picture:## if(PType < 4){ decpixel <- scan(filename, what="", sep="\n", skip = skip+1) decpixel <- paste(collapse=" ", decpixel) decpixel <- unlist( strsplit( decpixel, " +")) decpixel <- as.numeric(decpixel) decpixel <- matrix( decpixel, ncol = width, byrow = TRUE) } else { # P4, P5, P6 #227: ##read picture data of P4, P5 or P6 pictures:## tclcmds <- c(' # https://de.wikipedia.org/wiki/Portable_Pixmap # set fname mm.pnm set fname FILENAME set size [ file size $fname ] # puts $size set fp [open $fname] # http://www.tek-tips.com/viewthread.cfm?qid=1477934 fconfigure $fp -translation binary # scan [string range $contents i i] %c strA set binpixel [read $fp $size] close $fp binary scan $binpixel cu* decpixel ') tclcmds <- sub("FILENAME", filename, tclcmds) #require(tcltk) if( requireNamespace("tcltk") ){ tcltk::.Tcl(tclcmds) } else { print("Error from get.pnm: tcltk not found!!"); return() } decpixel <- as.character(tclvalue("decpixel")) ##:read picture data of P4, P5 or P6 pictures## #:227 decpixel <- unlist( strsplit( decpixel, " ")) if( PType == 4){ n.infos <- ceiling(width/8) * height # if(verbose) cat("length(decpixel)", length(decpixel), "n.infos", n.infos) decpixel <- decpixel[ -(1 : ( length(decpixel) - n.infos )) ] encode <- function(number, base) { # simple version of APL-encode / APL-representation "T", pw 10/02 # "encode" converts the numbers "number" using the radix vector "base" n.base <- length(base); result <- matrix(0, length(base), length(number)) for(i in n.base:1){ result[i,] <- if(base[i]>0) number %% base[i] else number number <- ifelse(rep(base[i]>0,length(number)), floor(number/base[i]), 0) } return( if(length(number)==1) result[,1] else result ) } decpixel <- encode(as.numeric(decpixel), rep(2,8)) decpixel <- matrix(decpixel, nrow = height, byrow = TRUE)[, 1:width] # decpixel <- matrix(decpixel, ncol = height, byrow = !TRUE) # decpixel <- t(decpixel[(1:width),]) } else { # P5 or P6 BigEndian <- colors > 255 n.infos <- width * height * c(1,3)[1+(PType == 6)] * c(1,2)[1+BigEndian] decpixel <- decpixel[ -(1 : ( length(decpixel) - n.infos )) ] if( BigEndian ){ # use the first byte of a pixel only decpixel <- matrix(decpixel, ncol = 2, byrow = TRUE)[,1] ### 1 or 2? } decpixel <- as.numeric(decpixel) decpixel <- matrix( decpixel, ncol = width * (1 + 2*(PType == 6)), byrow = TRUE) } PType <- PType - 3 } ##:get decpixel of pnm picture## #:228 #229: ##define [[decpixel.to.raster()]]:## decpixel.to.raster <- function(decpixel, PType, width, height, colors){ HEX <- unlist(strsplit("0123456789ABCDEF","")) if(PType < 3){ # black and white or grey -- P1 or P2 if(PType==1) decpixel <- colors - decpixel pixel <- decpixel / colors * 255 first <- floor( pixel / 16 ); second <- pixel %% 16 hexpixel <- paste(sep="", HEX[1 + first], HEX[1 + second]) hexpixel <- paste(sep="", "#", hexpixel, hexpixel, hexpixel) hexpixel <- matrix(hexpixel, ncol = width) } else { # colors -- P3 decpixel <- array(t(decpixel), c(3, width, height)) if( 255 < colors ) colors <- 255 # 160928 pixel <- decpixel / colors * 255 first <- floor(pixel / 16); second <- pixel %% 16 hexpixel <- paste(sep="", HEX[1 + first], HEX[1 + second]) hexpixel <- array(hexpixel, c(3, width, height)) hexpixel <- paste(sep="", "#", hexpixel[1,,], hexpixel[2,,], hexpixel[3,,]) hexpixel <- matrix(hexpixel, ncol = width, byrow = TRUE) } raster <- hexpixel } #table(decpixel.to.raster(a, 6, 724, 561, 65535)) #table(a) ##:define [[decpixel.to.raster()]]## #:229 as.raster(decpixel.to.raster(decpixel, PType, width, height, colors)) } #; dump("get.pnm", file = "get.pnm.R") ##:define [[get.pnm()]]## #:221 icon <- get.pnm(file) } if( "try-error" %in% class(icon) ){ cat("Error in puticon(): file", file, "not readable by puticon()") return() } ##:read jpeg, png or pnm file in [[puticon()]]## #:287 rasterImage(icon, 0, 0, 100, 100 * ((h <- dim(icon))[1] / h[2]), interpolate = FALSE, xpd = xpd) return() } else { # internal generator icon <- icon [1] h <- deparse(puticon); hh <- grep(paste(icon, sep = "", " [<][-]"), h) if( 0 < length(hh) ){ h <- h[hh + (0:5)]; h <- paste(h, collapse = "") h <- sub("^[^(]*[(]", "", h); h <- sub("[{].*", "", h) # )))( h <- gsub(" +", " ", h); h <- sub("[)] *$", "", h) # if(nchar(h) > 0){ #351: ##define generator functions:## h <- "internal generator function" #315: ##define [[BI()]]:## BI <- function(){ result <- list() res <- cbind( x = c(0, 25, 25, 0), y = c(0, 0, 61, 61), color = NA) class(res) <- "polygon" result <- c(result, list(res)) res <- cbind( x = c(72, 57, 57, 72), y = c(0, 0, 61, 61), color = NA) class(res) <- "polygon" result <- c(result, list(res)) res <- cbind( x = c( 0, 72, 72, 56, 56, 44, 44, 29, 29, 16, 16, 0), y = c(72, 72, 100, 100, 87, 87, 100, 100, 87, 87, 100, 100), color = NA) class(res) <- "polygon" result <- c(result, list(res)) res <- rbind( c(19.0, 43, 24, 43, lwd.mm = 36, color = NA), c(19.0, 18, 30.5, 18, lwd.mm = 36, color = NA), c(12, 43, 21, 43, lwd.mm = 11, 0), c(12, 18, 27, 18, lwd.mm = 11, 0) ) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments" result <- c(result, list(res)) res <- cbind( x = c(0, 15, 15, 0), y = c(0, 0, 61, 61), color = NA) class(res) <- "polygon" result <- c(result, list(res)) result } ##:define [[BI()]]## #:315 h <- "internal generator function" #318: ##define [[TL()]]:## TL <- function(L = c("AB", "DT", "PW", "NV", "Hello")[1], t.cex.mm = 10, startx, starty, delx, dely, Lcolors, pointx = 90, pointy = 90, pointsize = 8, pointcolor = "red" ){ # L letters to be used # t.cex.mm letter size: a 'W' will have a width of 'text.cex.mm' mm # startx, starty x coordinate of first letter in mm # delx, dely shift in x and in y between letters in mm # Lcolors colors of the letters to be used # pointx, pointy x and y coordinate of point # pointsize size of the point # pointcolor color of the point if(is.factor(L) || is.numeric(L) ) L <- as.character(L) L <- unlist(strsplit(L,"")) n <- length(L) check.num <- function(x, n = 2){ if(is.factor(x)) x <- as.character(x); x <- as.numeric(x); x <- rep(x, n)[1:n] } if(missing(startx)) startx <- 50 / n; if(missing(delx)) delx <- 100 / n if(missing(starty)) starty <- 50 / n; if(missing(dely)) dely <- 100 / n if(missing(t.cex.mm)) t.cex.mm <- 100 / n if(missing(pointx)) pointx <- 100 - min(60, 5 + n * 2.5) if(missing(pointy)){ pointy <- min(40, 5 + n * 2.5) if(starty[1] > 50) pointy <- 100 - pointy } if(missing(pointsize)) pointsize <- min(40, 10 + n * 2.5) if(missing(Lcolors)) Lcolors <- 1; Lcolors <- rep(Lcolors, n)[1:n] startx <- check.num(startx, n); starty <- check.num(starty, n) delx <- cumsum(c(0, check.num(delx, n - 1))); dely <- cumsum(c(0, check.num(dely, n - 1))) startx <- (startx + delx) %% 100; starty <- (starty + dely) %% 100 result <- list() res <- data.frame( x = c(0, 0, 100, 100), y = c(0, 100, 100, 0), color = NA) class(res) <- c( class(res), "polygon"); result <- c(result, list(res)) # box of the icon res <- data.frame(x0 = pointx, y0 = pointy, x1 = pointx, y1 = pointy, lwd.mm = pointsize, color = pointcolor) class(res) <- c( class(res), "segments"); result <- c(result, list(res)) # special point res <- data.frame(x = startx, y = starty, L = L, text.cex.mm = t.cex.mm, color = Lcolors) class(res) <- c( class(res), "text"); result <- c(result, list(res)) # letters result } # ; show.icon.design(TL) #; TL() ##:define [[TL()]]## #:318 h <- "internal generator function" #325: ##define [[cross.simple()]]:## cross.simple <- function(){ # print("in cross") res <- rbind( c( 05, 05, 95, 95, lwd.mm = 10, NA), c( 05, 95, 95, 05, lwd.mm = 10, NA), c( 50, 50, 50, 50, lwd.mm = 30, 2) ) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } ##:define [[cross.simple()]]## #:325 h <- "internal generator function" #326: ##define [[cross()]]:## cross <- function(z = 0.30){ # print("in cross") if(is.factor(z)){ z <- as.numeric(z); z <- 0.5 * z / length(levels(z)) } z <- z * 100; eps <- 1 # *0.7 z <- min(100, max(0, z)) result <- list() res <- cbind( x = c(z, 100 - z, 100 - z, z), y = c(0, 0, 100 - z, 100 - z), color = 5) class(res) <- "polygon" result <- c(result, list(res)) res <- rbind( c(eps*c( 5, 5, 95, 95, lwd.mm = 10), NA), c(eps*c( 5, 95, 95, 5, lwd.mm = 10), NA), c(eps*c( 50, 50, 50, 50, lwd.mm = 30), 3) ) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments" result <- c(result, list(res)) result } ##:define [[cross()]]## #:326 h <- "internal generator function" #327: ##define [[circle.simple()]]:## circle.simple <- function(){ # print("in circle.simple") res <- rbind( c( 50, 50, 50, 50, lwd.mm = 100, NA)) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } ##:define [[circle.simple()]]## #:327 h <- "internal generator function" #328: ##define [[circle()]]:## circle <- function(whole = 0.50){ # print("in circle") if(is.factor(whole)){ whole <- as.numeric(whole); whole <- 0.50 * whole / length(levels(whole)) } whole <- min(1, whole) res <- rbind( c( 50, 50, 50, 50, lwd.mm = 100, NA), c( 50, 50, 50, 50, lwd.mm = whole * 100, 0)) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } ##:define [[circle()]]## #:328 h <- "internal generator function" #331: ##define [[car.simple()]]:## car.simple <- function(){ # print("in cross") res0 <- cbind(t(cbind( 0.6* c( 05, 05, 95, 95), 0.6* c( 05, 95, 95, 05), 0.6* c( 50, 50, 50, 50)) + c(2.7,2.2)) , lwd.mm = c(10,10,30), color = c(2,5,7) ) colnames(res0) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res0) <- "segments" res1 <- cbind( x = c(10, 90, 85, 75, 70, 45, 40, 20, 10), # car polygon y = c(10, 10, 30, 30, 45, 45, 30, 30, 10)) class(res1) <- "polygon" res2 <- cbind(t(cbind( 0.3* c( 05, 05, 95, 95), 0.3* c( 05, 95, 95, 05), 0.3* c( 50, 50, 50, 50)) + c(43, 10)) , lwd.mm = 0.3 * c(10,10,30), # cross on door color = c(4,6,2) ) colnames(res2) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res2) <- "segments" res3 <- rbind( c(25, 10, 25, 10, 15, 1), c(75, 10, 75, 10, 15, 1)) # wheel colnames(res3) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res3) <- "segments" list(res1, res1, res2, res3) } # ; car.simple() ##:define [[car.simple()]]## #:331 h <- "internal generator function" #332: ##define [[car()]]:## car <- function(width = .5, height = .0){ # print("in cross") width <- (width * 2 + 2) / 3.2; height <- (height * 5.0 + 1) / 3.2 x <- c(-40, 40, 35, 25, 20,-05,-10,-30, -40) * width + 50 y <- c(-20, -20, 0, 5, 20, 20, 5, 0, -20) * height + 50 wheel.size <- height * 10 + 5 ymin <- min(y); xmin <- min(x); xmax <- max(x) res1 <- cbind( x, y) # car polygon class(res1) <- "polygon" res2 <- rbind( c(h <- 0.75*xmin + 0.25*xmax, ymin, h, ymin, wheel.size, 1), c(100 - h, ymin, 100 - h, ymin, wheel.size, 1)) # wheel colnames(res2) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res2) <- "segments"; list(res1, res2) } # ; car() ##:define [[car()]]## #:332 h <- "internal generator function" #334: ##define [[nabla()]]:## nabla <- function(){ res <- rbind( c( 05, 95, 50, 05, 10), c( 50, 05, 95, 95, 10), c( 95, 95, 05, 95, 10) ); class(res) <- "segments" colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm"); res } # ; nabla() ##:define [[nabla()]]## #:334 h <- "internal generator function" #363: ##define [[walkman()]]:## walkman <- function( balpha = 70, col = NA, ll1alpha = -80, ll2alpha = -120, lr1alpha = -45, lr2alpha = -100, al1alpha = -170, al2alpha = -100, ar1alpha = -60, ar2alpha = +20 ){ # generates a walking man in a device of pin-sizes: 10cm x 10 cm and lwd = 10 mm # col <- sample(1:10, size = 1) xy <- c(0,0); dxq <- 10; dyq <- 10; size <- 10; lwd <- 10.5; lw.unit <- 1 segs.set <- NULL; col.set <- NULL scale.xy <- 2.54 balpha <- balpha / 180 * pi ll1alpha <- ll1alpha / 180 * pi; ll2alpha <- ll2alpha / 180 * pi lr1alpha <- lr1alpha / 180 * pi; lr2alpha <- lr2alpha / 180 * pi al1alpha <- al1alpha / 180 * pi; al2alpha <- al2alpha / 180 * pi ar1alpha <- ar1alpha / 180 * pi; ar2alpha <- ar2alpha / 180 * pi #364: ##define body of [[walkman]]:## x <- c(cos(balpha), sin(balpha)) * scale.xy ba <- c(0,0); be <- ba + x bal <- lwd * lw.unit * 1.7; bac <- col seg.mat <- cbind(a=ba[1], b=ba[2], c=be[1], d=be[2], e=bal) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, bac) ##:define body of [[walkman]]## #:364 #366: ##define head of [[walkman]]:## h <- be + ( be - ba) * .75; hl <- lwd * lw.unit * 1.6; hc <- col seg.mat <- cbind(a=h[1], b=h[2], c=h[1], d=h[2], e=hl) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, hc) ##:define head of [[walkman]]## #:366 #365: ##define legs of [[walkman]]:## lbecken <- 0.19; llength <- 1; ll <- lwd * lw.unit * 0.85 ll1a <- ba + c(cos(balpha+pi/2), sin(balpha+pi/2)) * scale.xy * lbecken ll1e <- ll1a + c(cos(ll1alpha), sin(ll1alpha)) * scale.xy * llength lr1a <- ba + c(cos(balpha-pi/2), sin(balpha-pi/2)) * scale.xy * lbecken lr1e <- lr1a + c(cos(lr1alpha), sin(lr1alpha)) * scale.xy * llength ll2a <- ll1e ll2e <- ll2a + c(cos(ll2alpha), sin(ll2alpha)) * scale.xy * llength lr2a <- lr1e lr2e <- lr2a + c(cos(lr2alpha), sin(lr2alpha)) * scale.xy * llength l <- rbind(cbind(ll1a[1], ll1a[2], ll1e[1], ll1e[2]) ,cbind(lr1a[1], lr1a[2], lr1e[1], lr1e[2]) ,cbind(ll2a[1], ll2a[2], ll2e[1], ll2e[2]) ,cbind(lr2a[1], lr2a[2], lr2e[1], lr2e[2]) ) seg.mat <- cbind(l, e=ll) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, hc) ##:define legs of [[walkman]]## #:365 #367: ##define arms of [[walkman]]:## aschulter <- 0.19; alength <- 0.7; al <- lwd * lw.unit * 0.85 al1a <- be + c(cos(balpha+pi/2), sin(balpha+pi/2)) * scale.xy * aschulter al1e <- al1a + c(cos(al1alpha), sin(al1alpha)) * scale.xy * alength ar1a <- be + c(cos(balpha-pi/2), sin(balpha-pi/2)) * scale.xy * aschulter ar1e <- ar1a + c(cos(ar1alpha), sin(ar1alpha)) * scale.xy * alength al2a <- al1e al2e <- al2a + c(cos(al2alpha), sin(al2alpha)) * scale.xy * alength ar2a <- ar1e ar2e <- ar2a + c(cos(ar2alpha), sin(ar2alpha)) * scale.xy * alength a <- rbind( cbind(al1a[1], al1a[2], al1e[1], al1e[2]), cbind(ar1a[1], ar1a[2], ar1e[1], ar1e[2]), cbind(al2a[1], al2a[2], al2e[1], al2e[2]), cbind(ar2a[1], ar2a[2], ar2e[1], ar2e[2]) ) seg.mat <- cbind(a, e=al) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, hc) ##:define arms of [[walkman]]## #:367 segs.set[, 1:4] <- segs.set[, 1:4] + 5 # shift to the center segs.set <- cbind(as.data.frame(segs.set), f = col) # set color class(segs.set) <- c(class(segs.set), "segments") segs.set[, 1:4] <- segs.set[, 1:4] * 10 colnames(segs.set) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") return(segs.set) } #; show.icon.design(walkman, balpha = 90) # ; # plot(1:10, type = "n", axes = FALSE, xlab = "", ylab = "") # puticon(5, 5.5, icon = walkman, icon.cex = 160, balpha = 80) # walkman() ##:define [[walkman()]]## #:363 h <- "internal generator function" #371: ##define [[smiley.blueeye()]]:## smiley.blueeye <- function(){ # output: x0, y0, x1, y1, lwd, col circle <- function(x0 = 1, y0 = 1, a = 3, lwd.mm = 5, # a == radius time.0 = 0, time.1 = 12, n = 30){ # function to draw a part of a circle line alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd.mm) } res <- NULL # x0 y0 radius lwd.mm res <- rbind( res, cbind(circle(50, 49.5, 23, 50), col.code = NA) ) # face res <- rbind( res, cbind( 50, 45, 50, 50, 15, 1) ) # nose res <- rbind( res, cbind(circle(50, 49.5, 47.5, 5), 1) ) # margin res <- rbind( res, cbind(circle(35, 65, 2.5, 10), 4) ) # eye left res <- rbind( res, cbind(circle(65, 65, 2.5, 10), 1) ) # eye right res <- rbind( res, cbind(circle(50, 50, 27, 8, 7.50, 4.50), 3) ) # mouth colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } # ; show.icon.design(smiley.blueeye) # ; smiley.blueeye() ##:define [[smiley.blueeye()]]## #:371 h <- "internal generator function" #372: ##define [[smiley.normal()]]:## smiley.normal <- function(){ # output: x0, y0, x1, y1, lwd, col circle <- function(x0 = 1, y0 = 1, a = 3, lwd.mm = 5, # a = radius time.0 = 0, time.1 = 12, n = 30){ # function to draw a part of a circle line alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd.mm) } res <- NULL # res <- rbind( res, cbind( 50, 45, 50, 50, 15, 1) ) # nose res <- rbind( res, cbind(circle(50, 49.5, 23, 50), col.code = NA) ) # face res <- rbind( res, cbind(circle(50, 49.5, 47.5, 5), 1) ) # rand res <- rbind( res, cbind(circle(35, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(65, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(50, 50, 27, 8, 7.50, 4.50),1) ) # mouth colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } #; show.icon.design(smiley.normal) ##:define [[smiley.normal()]]## #:372 h <- "internal generator function" #377: ##define [[smiley()]]:## smiley <- function(smile = 0.8){ if(is.factor(smile)) smile <- as.numeric(smile) / length(levels(smile)) circle <- function(x0 = 1, y0 = 1, a = 3, lwd = 5, time.0 = 0, time.1 = 12, n = 60){ alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd) } res <- NULL # res <- rbind( res, cbind(circle(50, 49.5,23, 50), col.code = NA) ) # face # res <- rbind( res, cbind(circle(50, 49.5,47, 60), 1) ) # rand res <- rbind( res, cbind( 50, 50, 50, 50, 100, 1 )) # face+rand res <- rbind( res, cbind (50, 50, 50, 50, 88, NA)) # face res <- rbind( res, cbind(circle( 35, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle( 65, 60.5, 3.0, 10), 1) ) # eye if(is.na(smile)){ res <- rbind( res, cbind(circle(50, 50, 27, 7.5, 7.50, 4.50),1) ) # mouth } else { # x0 y0 a lwd time.0 time.1 # hs <- circle(50,50, 27, 10, 7.5, 4.5) # mouth laughing # hn <- circle(50,10, 27, 10, 10.5, 13.5) # mouth not laughing hs <- circle( 50, 40, 17, 10, 8.5, 3.5) # mouth laughing hn <- circle( 50, 20, 17, 10, 9.5, 14.5) # mouth not laughing s <- smile; n <- 1 - s h <- cbind( hs[,1], s*hs[,2]+n*hn[,2], hs[,3], s*hs[,4]+n*hn[,4], hs[,5]) res <- rbind( res, cbind(h, 1) ) # mouth } class(res) <- "segments"; res return(res) } ##:define [[smiley()]]## #:377 h <- "internal generator function" #373: ##define [[smiley.sad()]]:## smiley.sad <- function(){ # output: x0, y0, x1, y1, lwd, col circle <- function(x0 = 1, y0 = 1, a = 3, lwd.mm = 5, time.0 = 0, time.1 = 12, n = 30){ # function to draw a part of a circle line alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd.mm) } res <- NULL #; res <- rbind( res, cbind(50, 45, 50, 50, 15, 1) ) # nose res <- rbind( res, cbind(circle(50, 49.5, 23, 50), col.code = NA) ) # face res <- rbind( res, cbind(circle(50, 49.5, 47.5, 5), 1) ) # rand res <- rbind( res, cbind(circle(35, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(65, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(50, 10, 27, 8, 10.50, 13.50),1) ) # mouth colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } # ; show.icon.design(smiley.sad) ##:define [[smiley.sad()]]## #:373 h <- "internal generator function" #381: ##define [[mazz.man()]]:## mazz.man <- function(Mean = 100, Penalty = 1, Region = "region:", expo = 1/(1:3)[3], Mean.max = 107, Mean.half = 90, Penalty.max = 5, Penalty.min = 0, x.text = 70, y.text = 10, text.cex.mm = 10){ # bag.size %in% [0,1] # idea of the icon: Adriano Pareto, Matteo Mazziotta Mean.min <- Mean.half - (Mean.max - Mean.half) / ((h <- 2^(1/expo)) - 1) Mean.min <- min(Mean.min, Mean) fac <- 0.95 * ((h * (Mean - Mean.min)) / Mean.max) ^ expo bag.size <- 0.80 * ((Penalty - Penalty.min) / Penalty.max )^expo /2 res <- rbind( c(50, 77.5*fac + 5, 50, 77.5 *fac + 5), #head c(50, 35 *fac + 5, 50, 60 *fac + 5), #body c(50, 32 *fac + 5, 50, 0 *fac + 5), #leg in white c(50, 32 *fac + 5, 50, 0 *fac + 5), #leg c(50 + 30*fac, 55 *fac + 5, 50 + 25*fac, 75 *fac + 5), #tape2 c(50 - 20*fac, 65 *fac + 5, 50 + 30*fac, 70 *fac + 5), #stick c(50, 64 *fac + 5, 50 - 15*fac, 45 *fac + 5), #arm one c(50 - 20*fac, 65 *fac + 5, 50 - 15*fac, 45 *fac + 5), #arm c(50 + 27.5*fac, 50 *fac + 5 - 20*bag.size , 50 + 27.5*fac, 50 *fac + 5 - 20*bag.size), #bag c(50 + 25*fac, 55 *fac + 5, 50 + 30*fac, 75 *fac + 5)) #tape1 colnames(res) <- c("x0", "y0", "x1", "y1") lwd.mm <- c( c(17, 14, 12, 10, 2.5, 2, 6, 6) * fac / 0.927042 , 31 * bag.size / 0.2924, 2.5 * fac / 0.927042 ) colors <- c("#3377BB", "white", "brown", "orange")[c(1,1,2,1,4,3,1,1,4,4)] res <- data.frame(res, lwd.mm = lwd.mm, color = colors) class(res) <- c(class(res), "segments"); result <- list(res) res <- data.frame(x = x.text, y = y.text, L = Region, text.cex.mm = text.cex.mm, color = 1) class(res) <- c(class(res), "text"); res <- list(res) result <- c(result, res) return(result) } # ; show.icon.design(mazz.man) # Mazzi.Pareto # res1 <- rbind(c(0,0,100,100)); class(res1)<-c("segments"); res1 <- list(res1) # res2 <- rbind(c(100,0,0,100)); class(res2)<-c("segments"); res2 <- list(res2) ##:define [[mazz.man()]]## #:381 h <- "internal generator function" #389: ##define [[bike()]]:## bike <- function(){ res.liste <- NULL; a <- 1.5 res <- rbind( c(20, 20, 20, 20, 40, 1), # wheel front c(20, 20, 20, 20, 30, NA), # wheel front c(80, 20, 80, 20, 40, 1), # wheel back c(80, 20, 80, 20, 30, NA), # wheel back c(50, 20, 80, 20, 3*a, 1), # --- c(50, 20, 65, 50, 3*a, 1), # / c(80, 20, 32.5, 45, 3*a, 1), # \ c(50, 20, 32.5, 45, 3*a, 1), # \ c(60, 50, 70, 50, 5*a, 1), # seat c(20, 20, 40, 60, 3*a, 1), # / c(40, 60, 45, 60, 5*a, 1) # control ) res[, c(2,4)] <- res[, c(2,4)] + 20; class(res) <- "segments" colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") res.liste <- c(res.liste, list(res)) } ##:define [[bike()]]## #:389 h <- "internal generator function" #390: ##define [[bike2()]]:## bike2 <- function() { res.liste <- NULL; a <- 1.5 res <- rbind( c(20, 20, 20, 20, 40, 1), # wheel front c(20, 20, 20, 20, 30, NA), # wheel front c(80, 20, 80, 20, 40, 1), # wheel back c(80, 20, 80, 20, 30, NA), # wheel back c(50, 20, 80, 20,3*a, 1), # --- c(50, 20, 65, 50,3*a, 1), # / c(80, 20, 32.5, 45,3*a, 1), # \ c(50, 20, 32.5, 45,3*a, 1), # \ c(60, 50, 70, 50,5*a, 1), # seat c(20, 20, 40, 60,3*a, 1), # / c(40, 60, 45, 60,5*a, 1)) # control res[, c(2,4)] <- (res[, c(2,4)] - 9.3) * 10/5.3; class(res) <- "segments" colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") res.liste <- c(res.liste, list(res)) } ##:define [[bike2()]]## #:390 h <- "internal generator function" #391: ##define [[heart()]]:## heart <- function(txt = "xy"){ txt <- substring(paste(txt, " "), 1:2, 1:2) res1 <- cbind( x = c(50, 80, 90, 70, 50, 50, 30, 10, 20, 50), y = c(05, 30, 60, 85, 50, 50, 85, 60, 30, 05) + 05, color = NA) class(res1) <- c(class(res1), "polygon"); res1 <- list(res1) res2 <- cbind( x = c(50, 90, 70, 50, 50, 30, 10, 50), y = c(05, 60, 85, 50, 50, 85, 60, 05) + 05) res2 <- data.frame( res2, lwd.mm = 19.5, color = NA) class(res2) <- c(class(res2), "spline"); res2 <- list(res2) res3 <- data.frame( x = c(27, 73), y = c(65, 65), txt = txt, 40, 1) class(res3) <- c(class(res3), "text"); res3 <- list(res3) result <- c(res1, res2, res3) } # ; show.icon.design(heart)() ##:define [[heart()]]## #:391 h <- "internal generator function" #392: ##define [[bend.sign()]]:## bend.sign <- function(txt = "xy"){ txt <- substring(paste(txt, " "), 1:2, 1:2) ground <- 6; top <- 90; center <- 55.5; size <- 25 res0o <- c(50, top, 50, ground + 3, 7, 1) # Pfahl outer res0i <- c(50, top, 50, ground + 2, 3, 3) # Pfahl inner res1 <- c(30, ground, 70, ground, 2, 1) # Fundament res2 <- rbind( c(50, center+size, 50-size, center), c(50-size, center, 50, center-size), c(50, center-size, 50+size, center), c(50+size, center, 50, center+size)) res2 <- cbind(res2, lwd.mm = 15, color = 1) # Schildrand size <- size - 0 # Innenrand: res3 <- rbind( c(50, center+size, 50-size, center), c(50-size, center, 50, center-size), c(50, center-size, 50+size, center), c(50+size, center, 50, center+size)) res3 <- cbind(res3, lwd.mm = 10, color = 2) res <- rbind(res0o, res0i, res1, res2, res3); rownames(res) <- NULL res <- as.data.frame(res) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") res$color <- c("black", NA, "gray")[res$color] class(res) <- c(class(res), "segments"); res <- list(res) size <- size - 2 res1b <- rbind( c(50, center+size), c(50-size, center), c(50, center-size), c(50+size, center)) res1b <- cbind(res1b, color = NA) class(res1b) <- c(class(res1b), "polygon"); res1b <- list(res1b) # Innenflaeche f <- size / 25 res2b <- cbind( x = 50 + f*c( h <- c(- 9, 5, 12), rev(-h)), y = center + f*c( h <- c( 16, 13, 6), rev(-h)), lwd.mm = f^0.6*6.5, color = 1) class(res2b) <- c(class(res2b), "spline"); res2b <- list(res2b) #res3 <- data.frame( x = c(27, 73), y = c(65, 65), txt = txt, 40, 1) #class(res3) <- c(class(res3), "text"); res3 <- list(res3) result <- c(res, res1b, res2b) #, res1) } # ; show.icon.design(bike2)# bend.sign) #; bend.sign() ##:define [[bend.sign()]]## #:392 h <- "internal generator function" #398: ##define [[fir.tree()]]:## fir.tree <- function(height = 1, width = 1, txt = ".....", t.cex.mm = 10){ fac.x <- width * 100/60; fac.y <- height * 100/70 # build standardized elements of pictogram res <- data.frame( x = c(20, 40, 25, 45, 35, 50, 65, 55, 75, 60, 80), y = c(20, 40, 40, 60, 60, 80, 60, 60, 40, 40, 20) + 5, color = NA) class(res) <- c(class(res), "polygon") res.liste <- c(list(res)) res <- data.frame( x = c(55, 55, 45, 45), y = c(20, 10, 10, 20) + 5 , color = "brown") class(res) <- c(class(res), "polygon") res.liste <- c(res.liste, list(res)) # integrate effects of arg1 and arg2 res.liste <- lapply( res.liste, function(xyc){ xyc$x <- fac.x * (xyc$x - 50) + 50; xyc} ) res.liste <- lapply( res.liste, function(xyc){ xyc$y <- fac.y * (xyc$y - 50) + 50; xyc} ) # append text element # res <- data.frame( x = 20, y = 2, txt = txt, t.cex.mm, color = "1") res <- data.frame( x = fac.x * (30 - 50) + 50, y = fac.y * (10 - 50) + 50, txt = txt, t.cex.mm, color = "1") #180327 class(res) <- c(class(res), "text") res.liste <- c(res.liste, list(res)) res.liste } # ; show.icon.design(fir.tree) ##:define [[fir.tree()]]## #:398 #343: ##define [[find.smooth.curve()]] and [[find.brush.polygon()]]:## #342: ##define [[bs.approx()]] and [[loess.approx()]]:## bs.approx <- function(x, y, x.new, degree = 3, knots = 10, df = NULL){ # library(splines) # check package splines if(is.matrix(x) || is.data.frame(x)){y <- x[,2];x <- x[,1]} # check x,y input n <- length(x); idx <- order(x); x <- x[idx]; y <- y[idx] # order by x y.new <- rep(NA, length(x.new)) # init y result x.all <- c(x, x.new); y.all <- c(y, y.new) # combine old and new points basis <- splines::bs(x.all, degree = degree, df = df, knots = knots) # find design matrix res <- lm(y.all ~ basis); coef.ok <- !is.na(res$coeff) # estimate spline coefficients X <- cbind(1, basis[ 1:n ,])[,coef.ok] # extract design matrix for old X.new <- cbind(1, basis[-(1:n),])[,coef.ok] # extract design matrix for new y.dach <- X %*% res$coefficients[coef.ok] # compute spline of old points y.new.dach <- X.new %*% res$coefficients[coef.ok] # compute spline of new points list(cbind(x, y.dach), cbind(x.new, y.new.dach)) # compose result } loess.approx <- function(x, y, x.new, span = 0.6, degree = 2){ smooth.curve <- loess(y ~ x, span = span, degree = degree) res.new <- predict(smooth.curve, x.new) res.old <- predict(smooth.curve, x) return(list(cbind(x, res.old), cbind(x.new, res.new))) } ##:define [[bs.approx()]] and [[loess.approx()]]## #:342 find.smooth.curve <- function(x.in, y.in, n.new = 100, method = c("bs", "loess")[1], degree = 3, knots = 50, span = 0.75){ if(is.matrix(x.in) || is.data.frame(x.in)){y.in <- x.in[,2]; x.in <- x.in[,1]} # check input n <- length(x.in) dx.min <- 0.1 * diff(range(x.in)) / length(x.in) # set minimal dx of spline x.h <- cumsum(c(1, pmax(dx.min, (diff(x.in)^2 + diff(y.in)^2)^0.5))) # find x of spline x.new <- seq(x.h[1], x.h[n], length = n.new) # find new x for spline eval if( method == "bs" ){ res.x <- bs.approx(x = x.h, y = x.in, x.new = x.new, degree = degree, knots = knots) res.y <- bs.approx(x = x.h, y = y.in, x.new = x.new, degree = degree, knots = knots) } else { res.x <- loess.approx(x = x.h, y = x.in, x.new = x.new, span = span, degree = min(2, degree)) res.y <- loess.approx(x = x.h, y = y.in, x.new = x.new, span = span, degree = min(2, degree)) } return(cbind(x = res.x[[2]][,2], y = res.y[[2]][,2])) # compose result } find.brush.polygon <- function(x, y, hwd = 10){ # find area along the polygon of points (x, y) with width 2*hwd if(is.matrix(x) || is.data.frame(x)){ y <- x[,2]; x <- x[,1] } # check input dy <- diff(x); dx <- -diff(y); h <- length(dx) # find orthogonal vectors to segments dx <- c(dx[1], 0.5 * (dx[-1] + dx[-h]), dx[h]) # find means of neighbours dy <- c(dy[1], 0.5 * (dy[-1] + dy[-h]), dy[h]) # of orthogonal vectors d <- hwd / sqrt(dx^2 + dy^2); dy <- d * dy; dx <- d * dx # scale orthognal vectors xy <- rbind(cbind(x = x + dx, y = y + dy), cbind(x = rev(x - dx), y = rev(y - dy))) rbind(xy, xy[1,]) # copy first point to the end } ##:define [[find.smooth.curve()]] and [[find.brush.polygon()]]## #:343 h <- "internal generator function" #406: ##define [[comet()]]:## comet <- function(comet.color = NA){ t2xy <- function(t,radius,init.angle=0) { t <- t / 360 t2p <- 2*pi * t + init.angle * pi/180 list(x = radius * cos(t2p), y = radius * sin(t2p)) } center <- c(17, 30); fac <- 1.2 #; fac <- .2 # c.color <- 4; s.color <- 3; comet.bg.color <- 7; bg.color <- 0; t.color <- 5 # c.color <- "gold"; s.color <- "red"; comet.bg.color <- "green"; # t.color <- "gold"; bg.color <- "lightgrey" comet.bg.color <- "white"; t.color <- NA; bg.color <- "white"; s.color <- "white" c.color <- comet.color res.liste <- NULL # aera of icon ----------------------------------------------------------------------------- res <- data.frame(c(1, 99, 99, 1, 1), c(1, 1, 99, 99, 1), color = bg.color) class(res) <- c(class(res), "polygon"); res.liste <- c(res.liste, list(res)) # aera of comet ---------------------------------------------------------------------------- width <- 20 * fac res <- data.frame(center[1], center[2], center[1], center[2], width, color = comet.bg.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb # letter C of Comet ----------------------------------------------------------------------- width <- 3 * fac; radius <- 10 * fac P <- t2xy( 90:-45 , radius, 0) res <- data.frame(P$x + center[1], P$y + center[2]); res <- cbind(res, res, width, color = bg.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # C missing part P <- t2xy( 67.5:180 , radius, 0) res <- data.frame(P$x + center[1], P$y + center[2]); res <- cbind(res, res, width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # C P <- t2xy( -180:-22.5 , radius, 0) res <- data.frame(P$x + center[1], P$y + center[2]); res <- cbind(res, res, width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # C # letter M of coMet ---------------------------------------------------------------------- if( TRUE){ width <- 2.5 * fac; shift <- c(1, 0.5) * 2 * fac; h <- 22.5 / 360 * 2 * pi xy <- cbind(c(-1, -1, 0, 1, 1), c(-1, 1, -1, 1, -1)) xy <- xy %*% matrix( c( cos( h ), -sin(h), sin(h), cos(h)), 2, 2) x <- shift[1] + xy[,1] * 4 * fac; y <- shift[2] + xy[,2] * 4 * fac res <- data.frame(x[-5] + center[1], y[-5] + center[2], x[-1] + center[1], y[-1] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # M } # tail of comet with letter T of comeT -------------------------------------------------- radius <- c(1, 5) * fac; width <- 3 * fac for(i in 1:6){ radius <- radius + 10 * fac P1 <- t2xy(c(0, 22.5, 45), radius[1], 0) P2 <- t2xy(c(0, 22.5, 45), radius[2], 0) res <- data.frame( P1$x + center[1], P1$y + center[2], P2$x + center[1], P2$y + center[2], width, color = t.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb if(i == 1){ res <- data.frame(P1$x[1] + center[1], P1$y[1] + center[2], P1$x[3] + center[1], P1$y[3] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb res <- data.frame( P1$x + center[1], P1$y + center[2], P2$x + center[1], P2$y + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb } else { res <- data.frame( P1$x + center[1], P1$y + center[2], P2$x + center[1], P2$y + center[2], width, color = t.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb } # T of comeT if(i == 5){ h <- c(P2$x[2] - P1$x[2], P2$y[2] - P1$y[2]) * 2.5 res <- data.frame( P1$x[2] + center[1], P1$y[2] + center[2], P2$x[2] + h[1] + center[1], P2$y[2] + h[2] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb h <- h * 0.6 res <- data.frame( P1$x[2] + center[1], P1$y[2] + center[2], P1$x[2] - h[2] + center[1], P1$y[2] + h[1] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb res <- data.frame( P1$x[2] + center[1], P1$y[2] + center[2], P1$x[2] + h[2] + center[1], P1$y[2] - h[1] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb } } # letter O of cOmet width <- 2.5 * fac; radius <- 7.5 * fac; shift <- c(1, 0.5) * 1.2 * fac P <- t2xy( 0:359 , radius, 0) res <- data.frame(P$x + shift[1] + center[1], P$y + shift[2] + center[2]) res <- cbind(res, res, width, color = "white") class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # O by white res.liste } # ; print(comet()); show.icon.design(comet) ##:define [[comet()]]## #:406 h <- "internal generator function" #337: ##define [[coor.system()]]:## coor.system <- function(xxx, yyy, pcex = 5, xrange, yrange, axes = FALSE){ shift <- 0.5; lwd <- .25 x <- c(.1, 3, 6, 9.9); y <- c(0, 0.1, -0.1, 0) + shift xy <- spline(x,y); x <- xy$x; y <- xy$y; n.1 <- length(x) - 1 res <- cbind(x[1:n.1], y[1:n.1], x[-1], y[-1], lwd) # x line res <- rbind(res, cbind(y[1:n.1], x[1:n.1], y[-1], x[-1], lwd)) # y line res <- rbind(res, c(9.5, shift - 0.4, 9.9, shift, lwd), # x arrow c(9.4, shift + 0.3, 9.9, shift, lwd), # x arrow c(shift - 0.4, 9.5, shift, 9.9, lwd), # y arrow c(shift + 0.3, 9.4, shift, 9.9, lwd)) * 10 # y arrow res <- cbind(res, 1) class(res) <- "segments"; res.list <- list(res) if( !missing(xxx) ){ if(missing(xrange)){ xrange <- range(xxx); xrange <- xrange + c(-0.1,0.1)*diff(xrange) } if(missing(yrange)){ yrange <- range(yyy); yrange <- yrange + c(-0.1,0.1)*diff(yrange) } xticks <- pretty(xrange); xticks <- xticks[ xrange[1] < xticks & xticks < xrange[2]] yticks <- pretty(yrange); yticks <- yticks[ yrange[1] < yticks & yticks < yrange[2]] xtickspos <- (xticks - xrange[1]) / (xrange[2] - xrange[1]) * 95 + 5 ytickspos <- (yticks - yrange[1]) / (yrange[2] - yrange[1]) * 95 + 5 res <- rbind( cbind(xtickspos, 5, xtickspos, 2, 2, 1) # x ticks ,cbind(2, ytickspos, 5, ytickspos, 2, 1) # y ticks ) class(res) <- "segments"; res.list <- c(res.list, list(res)) x <- c(-3, -1.5, 0, 1.5, 3); y <- c(-2.5, -0.5, 0.4, 1.5, 2.5) xy <- spline(x,y); x <- xy$x; y <- xy$y xxx <- (xxx - xrange[1]) / (xrange[2] - xrange[1]) * 95 + 5 yyy <- (yyy - yrange[1]) / (yrange[2] - yrange[1]) * 95 + 5 res <- NULL; h <- length(x) for( i in seq(along = xxx) ){ res <- rbind(res, cbind(xxx[i] + x[-1], yyy[i] + y[-1], xxx[i] + x[-h], yyy[i] + y[-h], pcex * 0.2, NA), # points xxx, yyy cbind(xxx[i] + x[-1], yyy[i] + rev(y)[-1], xxx[i] + x[-h], yyy[i] + rev(y)[-h], pcex * 0.2, NA) # points xxx, yyy ) } class(res) <- "segments"; res.list <- c(res.list, list(res)) h <- length(xticks) # x axis res <- data.frame( xtickspos, rep(-4, h), paste(xticks), rep(6, h),rep(1, h)) class(res) <- c(class(res), "text"); if(axes) res.list <- c(res.list, list(res)) h <- length(yticks); hh <- max(nchar(yticks)) # y axis res <- data.frame( rep(-2*hh, h), ytickspos, paste(yticks), rep(6, h),rep(1, h)) class(res) <- c(class(res), "text"); if(axes) res.list <- c(res.list, list(res)) } res.list } ; coor.system() ##:define [[coor.system()]]## #:337 ##:define generator functions## #:351 show.icon.design(icon, color = "lightblue") cat("arguments of", icon,":\n"); print(noquote(h)) return(get(icon)) } } else { cat("Error in puticon(): something wrong with input icon =", paste('"',icon,'"',sep = ""), "\n") return() } } } ##:show design layout of special icon in [[puticon()]]## #:277 } if(identical(icon, "")) icon <- "circle" ## default setting of icon !!!! if( is.matrix(x) && ncol(x) == 2){ xy <- x } else { if(missing(y)){ cat("Error in puticon: no x or no y coordinates are given!\n"); return() } xy <- cbind(x, y) } n.items <- dim(xy)[1] ##:check inputs and manage case of showing design in [[puticon()]]## #:276 #282: ##get device infos and compute aspect ratios in [[puticon()]]:## h <- par(); usr <- h$usr; pin <- h$pin; cin <- h$cin xwcoor.pmm <- diff(usr[1:2]) / pin[1] / 25.4 # xrange per mm of plot-region ywcoor.pmm <- diff(usr[3:4]) / pin[2] / 25.4 # yrange per mm of plot-region # correction because of uncorrect display sizes may by processed by: # dev.fac.vp <- c(1, 1, 1.1)[ c(dev.cur() == c("postscript", "pdf"), TRUE) ][1] # xwcoor.pmm <- xwcoor.pmm * dev.fac.vp; ywcoor.pmm <- ywcoor.pmm * dev.fac.vp aspect <- xwcoor.pmm / ywcoor.pmm # width / height concerning plot-region # if icon.cex < 1: size of icon is defined relative to width of plot #180411 icon.cex <- ifelse( icon.cex < 1, icon.cex * pin[1] * 25.4, icon.cex) if(length(icon.cex) < n.items) icon.cex <- rep(icon.cex, n.items)[1:n.items] xsize <- icon.cex * xwcoor.pmm # width(s) of icon in user coordinates ysize <- icon.cex * ywcoor.pmm # height(s) of icon in user coordinates if(length(xsize) < n.items) xsize <- rep(xsize, n.items)[1:n.items] if(length(ysize) < n.items) ysize <- rep(ysize, n.items)[1:n.items] ##:get device infos and compute aspect ratios in [[puticon()]]## #:282 #283: ##define [[mm.to.lwd()]] and [[mm.to.cex]] in [[puticon()]]:## dev.fac <- c(0.8, 1, 1)[ c(dev.cur() == c("postscript", "pdf"), TRUE) ][1] mm.to.lwd <- function(lwd.mm) lwd.mm * 3.787878 * dev.fac ## mm.to.lwd <- function(lwd.mm) lwd.mm * 100 / 30 * dev.fac mm.to.cex <- function(text.cex.mm) text.cex.mm / (cin[1] * 25.4) ##:define [[mm.to.lwd()]] and [[mm.to.cex]] in [[puticon()]]## #:283 #280: ##define [[transform.color.to.rgb.integer()]]:## transform.color.to.rgb.integer <- function(x, to = c("#rrggbb", "rgb"), debug = FALSE){ dim.x <- n <- length(x) # if(is.matrix(x)) rasterImage(t(x), 5, 5, 15, 15) if( 0 < length( h <- dim(x) ) ) dim.x <- h if( is.numeric(x[1]) ){ if( all( x %in% 0:8 ) ){ from <- "color.code" # col = 3 xx <- t(col2rgb(palette("default")[x])) } else { if( all(x <= 1) ){ # from <- "rgb.decimal" # col = c(0.3, 0.5, 0.6 ) xx <- floor( x * 255 ) } else { if( any( 1 < x ) & all(x == floor(x)) ){ from <- "rgb.integer" # col = c( 13, 25, 254 ) xx <- x } } } } else { if( is.character(x[1]) ){ from <- "color.name.or.char" # col = "red" or col = "#1304FF" xx <- t(col2rgb(x)) # t? } } if( (3 * n) == length(xx) ){ xx <- array( xx, c(rev(dim.x), 3)) if( length(dim(xx)) == 3 ) xx <- aperm(xx, c(2,1,3)) } if(debug) cat("dim.x", dim.x, "from = ", from, "::", x, "->", (xx)) xx } ##:define [[transform.color.to.rgb.integer()]]## #:280 #291: ##define [[greys.to.colors.puticon()]]:## greys.to.colors.puticon <- function(grey.idx, color, # invert = FALSE, set.black.and.white = FALSE, simple = FALSE){ # cat("greys.to.colors.puticon") # if(invert) grey.idx[] <- max(grey.idx) + 1 - grey.idx # inversion of levels if(simple){ # simple case of recoloring # set of colors based on color color <- c("#000000", color, "#FFFFFF") # ;print(color) grey.idx[] <- color[grey.idx]; icon <- grey.idx; return(icon) } n <- max(grey.idx) # find colors based on color: rgb.col1 <- col2rgb(color[1]) / 255; rgb.col2 <- 1 - rgb.col1 n1 <- round(n / 2) ; n2 <- n - n1 f1 <- ((1:n1) - 1/2) / n1; f2 <- ((n2:1) - 1/2) / n2 rgb.col1 <- cbind(f1 * rgb.col1[1], f1 * rgb.col1[2], f1 * rgb.col1[3]) rgb.col2 <- 1 - cbind(f2 * rgb.col2[1], f2 * rgb.col2[2], f2 * rgb.col2[3]) rgb.col <- rbind(rgb.col1, rgb.col2); colors <- rgb(rgb.col) if(0 < set.black.and.white){ if(set.black.and.white <= 1) colors[1] <- "#000000" if(1 <= set.black.and.white) colors[length(colors)] <- "#FFFFFF" } grey.idx[] <- colors[grey.idx]; icon <- grey.idx; return(icon) } ##:define [[greys.to.colors.puticon()]]## #:291 # #233: ##define [[raster.to.greys()]]:## raster.to.greys <- function(pic, grey.levels = c(0.05, 0.95), # 2 :: black + white reduce = TRUE, n.icons = 1){ #234: ##prepare [[mat]] for coloring:## d.mat <- dim(pic) if( 3 == length(d.mat) ){ mat <- apply(pic, 1:2, sum) ; dim(mat) <- d.mat <- d.mat[1:2] } else { mat <- as.matrix(pic); d.mat <- dim(mat) mat <- col2rgb(mat, 7 < nchar(mat[1])) mat <- colMeans(mat) } mat <- mat/max(1,mat) # /255 # shifted from else statements #180417 mat <- matrix(mat, ncol = d.mat[2]) ##:prepare [[mat]] for coloring## #:234 if( 2 == length(grey.levels) ){ limits <- grey.levels #241: ##find levels if the two [[limits]] are in (0,1):## #235: ##reduce size of [[mat]]:## if(reduce > 0 ){ if(is.logical(reduce)) { # pixel.per.pic.plan <- width.of.picture * pixel.per.mm / n.icons^0.5 pixel.per.pic <- 120 * 5 / n.icons^0.5 # reduction.factor <- pixel.per.pic.real / pixel.per.pic.plan reduce <- ceiling( max(d.mat) / pixel.per.pic ) } if(reduce > 1){ dim.mat.new <- reduce * (floor(d.mat/reduce)) mat.new <- mat[1:dim.mat.new[1], 1:dim.mat.new[2]] mat.new <- array(mat.new, rbind(reduce, dim.mat.new/reduce)) mat.new <- apply(mat.new, c(2,4), mean) d.mat <- dim(mat.new); mat <- pmin(1,mat.new); dim(mat) <- d.mat } } ##:reduce size of [[mat]]## #:235 # generate matrix of levels levs <- 1 + (limits[1] < mat) + (limits[2] < mat) dim(levs) <- d.mat ##:find levels if the two [[limits]] are in (0,1)## #:241 return(levs) } #235: ##reduce size of [[mat]]:## if(reduce > 0 ){ if(is.logical(reduce)) { # pixel.per.pic.plan <- width.of.picture * pixel.per.mm / n.icons^0.5 pixel.per.pic <- 120 * 5 / n.icons^0.5 # reduction.factor <- pixel.per.pic.real / pixel.per.pic.plan reduce <- ceiling( max(d.mat) / pixel.per.pic ) } if(reduce > 1){ dim.mat.new <- reduce * (floor(d.mat/reduce)) mat.new <- mat[1:dim.mat.new[1], 1:dim.mat.new[2]] mat.new <- array(mat.new, rbind(reduce, dim.mat.new/reduce)) mat.new <- apply(mat.new, c(2,4), mean) d.mat <- dim(mat.new); mat <- pmin(1,mat.new); dim(mat) <- d.mat } } ##:reduce size of [[mat]]## #:235 if( 1 == length(grey.levels) && 0 == (grey.levels %% 1) ){ # number of levels given # find greys by number of greys n.greys <- max(round(grey.levels), 2) mat <- unclass(mat); min.mat <- min(mat); max.mat <- max(mat) grey.levels <- seq(min.mat, max.mat, length = n.greys + 1)[-(n.greys+1)][-1] p <- c(min.mat, mat[ min.mat < mat & mat < max.mat], max.mat ) greys <- c(min.mat, quantile(p, grey.levels)) greys <- unique(greys[ !is.na(greys) ]) } else { # find greys by quantiles of grey rates grey.levels <- unique( pmin(1, pmax(0, sort(c(0, grey.levels, 1)))) ) greys <- unique( quantile(mat, grey.levels) ) if( (h <- length(greys)) > 2 ) greys <- greys[ -h ] } # generate matrix of levels: levs <- sapply( mat, function(x) sum( x >= greys ) ) if(max(levs) == 2) levs <- levs + 1 # if 2 cols only use one color and white if( 2 == length(h <- unique(levs)) ) levs <- 2 + ( levs == max(h) ) dim(levs) <- d.mat; return(levs) } ##:define [[raster.to.greys()]]## #:233 #279: ##prepare color vector in [[puticon()]]:## # adjust representation of color rgb in decimal form if( ! is.na(color[1]) ){ color <- transform.color.to.rgb.integer(color) color <- rbind(color) color <- sapply(split(color, row(color)), function(x) paste(sep="", "#", paste(collapse = "", as.character(as.hexmode(c(x,255)))[-4]))) # generate vectors of colors and icon.cex if 1 < length(x) if( 1 < n.items ){ color <- rep(color, n.items)[1:n.items] icon.cex <- rep(icon.cex, n.items)[1:n.items] } } ##:prepare color vector in [[puticon()]]## #:279 #286: ##plot jpg-, png- or pnm-file-icons and [[return()]] in [[puticon()]]:## if( "" != file ){ # case: icon saved in a file # cat("dim icon", dim(icon)) #287: ##read jpeg, png or pnm file in [[puticon()]]:## icon <- 0; class(icon) <- "error" # JPEG if( 0 < length(grep("jp[e]{0,1}g$", file)) || 0 < length(grep("JP[E]{0,1}G$", file))){ if(!"package:jpeg" %in% search()){ print("puticon() requires package jpeg") # library(jpeg, lib.loc = .libPaths()) } icon <- try(jpeg::readJPEG(file, native = !TRUE)) ############# } # PNG if( 0 < length(grep("png$", file)) || 0 < length(grep("PNG$", file))){ if(!"package:png" %in% search()){ print("puticon() requires package png") # library(png, lib.loc = .libPaths()) } icon <- png::readPNG(file, native = !TRUE) ################## } # PNM if( 0 < length(grep("pnm$", file)) || 0 < length(grep("PNM$", file))){ if(!"package:tcltk" %in% search()){ print("puticon() requires package tcltk") # library(tcltk, lib.loc = .libPaths()) } #221: ##define [[get.pnm()]]:## get.pnm <- function(filename, verbose = FALSE){ #222: ##find P* type of pnm file:## nextline <- scan(filename, what="", n=1) if( substring(nextline, 1, 1) != "P" || ! ( PType <- substring(nextline, 2, 2) ) %in% as.character(1:6)) return("ERROR: reading pnm file failed: no pnm file") PType <- as.numeric(PType); if(verbose) cat("PType:", PType); skip <- 0 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- unlist( strsplit( nextline, "[ \t]"))[-1] ##:find P* type of pnm file## #:222 #223: ##get width of pnm picture:## #226: ##get next line that is not empty:## idx <- 20 while(idx > 0 & 0 == length(nextline)){ idx <- idx - 1; skip <- skip + 1 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- sub("[#].*", "", nextline) nextline <- unlist( strsplit( nextline, "[ \t]")) } if( idx == 0 ) return("ERROR: reading pnm file failed: too many #-lines") nextline <- as.numeric(nextline) ##:get next line that is not empty## #:226 width <- nextline[1]; if(verbose) cat("width:",width) nextline <- nextline[-1] ##:get width of pnm picture## #:223 #224: ##get height of pnm picture:## if( length(nextline) == 0 ){ #226: ##get next line that is not empty:## idx <- 20 while(idx > 0 & 0 == length(nextline)){ idx <- idx - 1; skip <- skip + 1 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- sub("[#].*", "", nextline) nextline <- unlist( strsplit( nextline, "[ \t]")) } if( idx == 0 ) return("ERROR: reading pnm file failed: too many #-lines") nextline <- as.numeric(nextline) ##:get next line that is not empty## #:226 } height <- nextline[1]; if(verbose) cat("height:", height) nextline <- nextline[-1] ##:get height of pnm picture## #:224 #225: ##get colors of pnm picture:## if(PType == 1 || PType == 4) colors <- 1 else { if( length(nextline) == 0 ){ #226: ##get next line that is not empty:## idx <- 20 while(idx > 0 & 0 == length(nextline)){ idx <- idx - 1; skip <- skip + 1 nextline <- scan(filename, what="", sep="\n", n=1, skip = skip, blank.lines.skip = FALSE) nextline <- sub("[#].*", "", nextline) nextline <- unlist( strsplit( nextline, "[ \t]")) } if( idx == 0 ) return("ERROR: reading pnm file failed: too many #-lines") nextline <- as.numeric(nextline) ##:get next line that is not empty## #:226 } colors <- nextline[1] }; if(verbose){ cat("colors:", colors); cat("head processed") } ##:get colors of pnm picture## #:225 #228: ##get decpixel of pnm picture:## if(PType < 4){ decpixel <- scan(filename, what="", sep="\n", skip = skip+1) decpixel <- paste(collapse=" ", decpixel) decpixel <- unlist( strsplit( decpixel, " +")) decpixel <- as.numeric(decpixel) decpixel <- matrix( decpixel, ncol = width, byrow = TRUE) } else { # P4, P5, P6 #227: ##read picture data of P4, P5 or P6 pictures:## tclcmds <- c(' # https://de.wikipedia.org/wiki/Portable_Pixmap # set fname mm.pnm set fname FILENAME set size [ file size $fname ] # puts $size set fp [open $fname] # http://www.tek-tips.com/viewthread.cfm?qid=1477934 fconfigure $fp -translation binary # scan [string range $contents i i] %c strA set binpixel [read $fp $size] close $fp binary scan $binpixel cu* decpixel ') tclcmds <- sub("FILENAME", filename, tclcmds) #require(tcltk) if( requireNamespace("tcltk") ){ tcltk::.Tcl(tclcmds) } else { print("Error from get.pnm: tcltk not found!!"); return() } decpixel <- as.character(tclvalue("decpixel")) ##:read picture data of P4, P5 or P6 pictures## #:227 decpixel <- unlist( strsplit( decpixel, " ")) if( PType == 4){ n.infos <- ceiling(width/8) * height # if(verbose) cat("length(decpixel)", length(decpixel), "n.infos", n.infos) decpixel <- decpixel[ -(1 : ( length(decpixel) - n.infos )) ] encode <- function(number, base) { # simple version of APL-encode / APL-representation "T", pw 10/02 # "encode" converts the numbers "number" using the radix vector "base" n.base <- length(base); result <- matrix(0, length(base), length(number)) for(i in n.base:1){ result[i,] <- if(base[i]>0) number %% base[i] else number number <- ifelse(rep(base[i]>0,length(number)), floor(number/base[i]), 0) } return( if(length(number)==1) result[,1] else result ) } decpixel <- encode(as.numeric(decpixel), rep(2,8)) decpixel <- matrix(decpixel, nrow = height, byrow = TRUE)[, 1:width] # decpixel <- matrix(decpixel, ncol = height, byrow = !TRUE) # decpixel <- t(decpixel[(1:width),]) } else { # P5 or P6 BigEndian <- colors > 255 n.infos <- width * height * c(1,3)[1+(PType == 6)] * c(1,2)[1+BigEndian] decpixel <- decpixel[ -(1 : ( length(decpixel) - n.infos )) ] if( BigEndian ){ # use the first byte of a pixel only decpixel <- matrix(decpixel, ncol = 2, byrow = TRUE)[,1] ### 1 or 2? } decpixel <- as.numeric(decpixel) decpixel <- matrix( decpixel, ncol = width * (1 + 2*(PType == 6)), byrow = TRUE) } PType <- PType - 3 } ##:get decpixel of pnm picture## #:228 #229: ##define [[decpixel.to.raster()]]:## decpixel.to.raster <- function(decpixel, PType, width, height, colors){ HEX <- unlist(strsplit("0123456789ABCDEF","")) if(PType < 3){ # black and white or grey -- P1 or P2 if(PType==1) decpixel <- colors - decpixel pixel <- decpixel / colors * 255 first <- floor( pixel / 16 ); second <- pixel %% 16 hexpixel <- paste(sep="", HEX[1 + first], HEX[1 + second]) hexpixel <- paste(sep="", "#", hexpixel, hexpixel, hexpixel) hexpixel <- matrix(hexpixel, ncol = width) } else { # colors -- P3 decpixel <- array(t(decpixel), c(3, width, height)) if( 255 < colors ) colors <- 255 # 160928 pixel <- decpixel / colors * 255 first <- floor(pixel / 16); second <- pixel %% 16 hexpixel <- paste(sep="", HEX[1 + first], HEX[1 + second]) hexpixel <- array(hexpixel, c(3, width, height)) hexpixel <- paste(sep="", "#", hexpixel[1,,], hexpixel[2,,], hexpixel[3,,]) hexpixel <- matrix(hexpixel, ncol = width, byrow = TRUE) } raster <- hexpixel } #table(decpixel.to.raster(a, 6, 724, 561, 65535)) #table(a) ##:define [[decpixel.to.raster()]]## #:229 as.raster(decpixel.to.raster(decpixel, PType, width, height, colors)) } #; dump("get.pnm", file = "get.pnm.R") ##:define [[get.pnm()]]## #:221 icon <- get.pnm(file) } if( "try-error" %in% class(icon) ){ cat("Error in puticon(): file", file, "not readable by puticon()") return() } ##:read jpeg, png or pnm file in [[puticon()]]## #:287 #289: ##transform colors of [[icon]] to grey levels in [[puticon()]]:## # transform different representations of colors icon <- transform.color.to.rgb.integer(icon.orig <- icon) # expand a single grey.levels value lower 1 if( length(grey.levels) == 1 && grey.levels < 1 ) grey.levels <- c( grey.levels, 1) # find the grey levels of the picture icon <- raster.to.greys(icon, grey.levels = grey.levels, reduce = TRUE, n.icons = max(1, ceiling(pin[1]*25.4 / max(icon.cex))^2)) # Now we have a matrix consisting of the grey levels of the pixels. # A subset of the grey levels will be changed by the replacement color. ##:transform colors of [[icon]] to grey levels in [[puticon()]]## #:289 #290: ##recolor [[icon]] for position [[i.x]] and plot it in [[puticon()]]:## # precondition: icon must be a matrix describing # the levels of greys of a raster graphics simple <- all(grey.levels <= 1) && length(grey.levels) == 2 # cat("simple", simple, "levels", grey.levels) # recolor icons dependent on color # cat("else", simple, color) if( is.na(color[1]) ){ # no recoloring idx.color.of.icon <- rep(1, length(x)) pic <- list(as.raster(icon.orig)) } else { pic <- NULL color.used <- unique(color) idx.color.of.icon <- match(color, color.used) for(i.color in color.used){ # cat("i.color", i.color) p <- greys.to.colors.puticon(icon, i.color, set.black.and.white = 1.5, simple = simple) pic <- c( pic, list( p )) } } # find size(s) and position(s) of icon(s) delx <- xwcoor.pmm * icon.cex / 2; dely <- ywcoor.pmm * icon.cex / 2 dely <- dely * (h <- dim(icon))[1] / h[2] # proportional scaling xmin <- x - delx; xmax <- x + delx; ymin <- y - dely; ymax <- y + dely for(i.x in seq(along = x)){ # cat("i.x", i.x, "--------------") # get icon and plot icon.i.x <- pic[[ idx.color.of.icon[i.x] ]] rasterImage(icon.i.x, xmin[i.x], ymin[i.x], xmax[i.x], ymax[i.x], interpolate = FALSE, xpd = xpd) } ##:recolor [[icon]] for position [[i.x]] and plot it in [[puticon()]]## #:290 return() } ##:plot jpg-, png- or pnm-file-icons and [[return()]] in [[puticon()]]## #:286 #296: ##plot icons from a raster image object and [[return()]] in [[puticon()]]:## if( is.raster(icon) ){ #289: ##transform colors of [[icon]] to grey levels in [[puticon()]]:## # transform different representations of colors icon <- transform.color.to.rgb.integer(icon.orig <- icon) # expand a single grey.levels value lower 1 if( length(grey.levels) == 1 && grey.levels < 1 ) grey.levels <- c( grey.levels, 1) # find the grey levels of the picture icon <- raster.to.greys(icon, grey.levels = grey.levels, reduce = TRUE, n.icons = max(1, ceiling(pin[1]*25.4 / max(icon.cex))^2)) # Now we have a matrix consisting of the grey levels of the pixels. # A subset of the grey levels will be changed by the replacement color. ##:transform colors of [[icon]] to grey levels in [[puticon()]]## #:289 #291: ##define [[greys.to.colors.puticon()]]:## greys.to.colors.puticon <- function(grey.idx, color, # invert = FALSE, set.black.and.white = FALSE, simple = FALSE){ # cat("greys.to.colors.puticon") # if(invert) grey.idx[] <- max(grey.idx) + 1 - grey.idx # inversion of levels if(simple){ # simple case of recoloring # set of colors based on color color <- c("#000000", color, "#FFFFFF") # ;print(color) grey.idx[] <- color[grey.idx]; icon <- grey.idx; return(icon) } n <- max(grey.idx) # find colors based on color: rgb.col1 <- col2rgb(color[1]) / 255; rgb.col2 <- 1 - rgb.col1 n1 <- round(n / 2) ; n2 <- n - n1 f1 <- ((1:n1) - 1/2) / n1; f2 <- ((n2:1) - 1/2) / n2 rgb.col1 <- cbind(f1 * rgb.col1[1], f1 * rgb.col1[2], f1 * rgb.col1[3]) rgb.col2 <- 1 - cbind(f2 * rgb.col2[1], f2 * rgb.col2[2], f2 * rgb.col2[3]) rgb.col <- rbind(rgb.col1, rgb.col2); colors <- rgb(rgb.col) if(0 < set.black.and.white){ if(set.black.and.white <= 1) colors[1] <- "#000000" if(1 <= set.black.and.white) colors[length(colors)] <- "#FFFFFF" } grey.idx[] <- colors[grey.idx]; icon <- grey.idx; return(icon) } ##:define [[greys.to.colors.puticon()]]## #:291 #290: ##recolor [[icon]] for position [[i.x]] and plot it in [[puticon()]]:## # precondition: icon must be a matrix describing # the levels of greys of a raster graphics simple <- all(grey.levels <= 1) && length(grey.levels) == 2 # cat("simple", simple, "levels", grey.levels) # recolor icons dependent on color # cat("else", simple, color) if( is.na(color[1]) ){ # no recoloring idx.color.of.icon <- rep(1, length(x)) pic <- list(as.raster(icon.orig)) } else { pic <- NULL color.used <- unique(color) idx.color.of.icon <- match(color, color.used) for(i.color in color.used){ # cat("i.color", i.color) p <- greys.to.colors.puticon(icon, i.color, set.black.and.white = 1.5, simple = simple) pic <- c( pic, list( p )) } } # find size(s) and position(s) of icon(s) delx <- xwcoor.pmm * icon.cex / 2; dely <- ywcoor.pmm * icon.cex / 2 dely <- dely * (h <- dim(icon))[1] / h[2] # proportional scaling xmin <- x - delx; xmax <- x + delx; ymin <- y - dely; ymax <- y + dely for(i.x in seq(along = x)){ # cat("i.x", i.x, "--------------") # get icon and plot icon.i.x <- pic[[ idx.color.of.icon[i.x] ]] rasterImage(icon.i.x, xmin[i.x], ymin[i.x], xmax[i.x], ymax[i.x], interpolate = FALSE, xpd = xpd) } ##:recolor [[icon]] for position [[i.x]] and plot it in [[puticon()]]## #:290 return() } ##:plot icons from a raster image object and [[return()]] in [[puticon()]]## #:296 #284: ##plot central symbols in [[pch]]-case and [[return()]] in [[puticon()]]:## if( "" != pch ){ if( is.numeric(pch) && pch %in% (1:128)){ cex <- mm.to.cex(icon.cex) cex <- cex / 0.75 # factor proposed by help of points, item 'pch' lwd <- list(...)$lwd; if( 0 == length(lwd)) lwd <- cex # lwd set by user points(x, y, pch = pch, cex = cex, col = color, xpd = xpd, lwd = lwd) } else { print("Error in puticon(): plotting symbol must be in 1..127") } return() } ##:plot central symbols in [[pch]]-case and [[return()]] in [[puticon()]]## #:284 #301: ##check pictogram generating function in [[puticon()]]:## #311: ##if [[is.character(icon)]] look for internal generator in [[puticon()]]:## if(is.character(icon)){ #351: ##define generator functions:## h <- "internal generator function" #315: ##define [[BI()]]:## BI <- function(){ result <- list() res <- cbind( x = c(0, 25, 25, 0), y = c(0, 0, 61, 61), color = NA) class(res) <- "polygon" result <- c(result, list(res)) res <- cbind( x = c(72, 57, 57, 72), y = c(0, 0, 61, 61), color = NA) class(res) <- "polygon" result <- c(result, list(res)) res <- cbind( x = c( 0, 72, 72, 56, 56, 44, 44, 29, 29, 16, 16, 0), y = c(72, 72, 100, 100, 87, 87, 100, 100, 87, 87, 100, 100), color = NA) class(res) <- "polygon" result <- c(result, list(res)) res <- rbind( c(19.0, 43, 24, 43, lwd.mm = 36, color = NA), c(19.0, 18, 30.5, 18, lwd.mm = 36, color = NA), c(12, 43, 21, 43, lwd.mm = 11, 0), c(12, 18, 27, 18, lwd.mm = 11, 0) ) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments" result <- c(result, list(res)) res <- cbind( x = c(0, 15, 15, 0), y = c(0, 0, 61, 61), color = NA) class(res) <- "polygon" result <- c(result, list(res)) result } ##:define [[BI()]]## #:315 h <- "internal generator function" #318: ##define [[TL()]]:## TL <- function(L = c("AB", "DT", "PW", "NV", "Hello")[1], t.cex.mm = 10, startx, starty, delx, dely, Lcolors, pointx = 90, pointy = 90, pointsize = 8, pointcolor = "red" ){ # L letters to be used # t.cex.mm letter size: a 'W' will have a width of 'text.cex.mm' mm # startx, starty x coordinate of first letter in mm # delx, dely shift in x and in y between letters in mm # Lcolors colors of the letters to be used # pointx, pointy x and y coordinate of point # pointsize size of the point # pointcolor color of the point if(is.factor(L) || is.numeric(L) ) L <- as.character(L) L <- unlist(strsplit(L,"")) n <- length(L) check.num <- function(x, n = 2){ if(is.factor(x)) x <- as.character(x); x <- as.numeric(x); x <- rep(x, n)[1:n] } if(missing(startx)) startx <- 50 / n; if(missing(delx)) delx <- 100 / n if(missing(starty)) starty <- 50 / n; if(missing(dely)) dely <- 100 / n if(missing(t.cex.mm)) t.cex.mm <- 100 / n if(missing(pointx)) pointx <- 100 - min(60, 5 + n * 2.5) if(missing(pointy)){ pointy <- min(40, 5 + n * 2.5) if(starty[1] > 50) pointy <- 100 - pointy } if(missing(pointsize)) pointsize <- min(40, 10 + n * 2.5) if(missing(Lcolors)) Lcolors <- 1; Lcolors <- rep(Lcolors, n)[1:n] startx <- check.num(startx, n); starty <- check.num(starty, n) delx <- cumsum(c(0, check.num(delx, n - 1))); dely <- cumsum(c(0, check.num(dely, n - 1))) startx <- (startx + delx) %% 100; starty <- (starty + dely) %% 100 result <- list() res <- data.frame( x = c(0, 0, 100, 100), y = c(0, 100, 100, 0), color = NA) class(res) <- c( class(res), "polygon"); result <- c(result, list(res)) # box of the icon res <- data.frame(x0 = pointx, y0 = pointy, x1 = pointx, y1 = pointy, lwd.mm = pointsize, color = pointcolor) class(res) <- c( class(res), "segments"); result <- c(result, list(res)) # special point res <- data.frame(x = startx, y = starty, L = L, text.cex.mm = t.cex.mm, color = Lcolors) class(res) <- c( class(res), "text"); result <- c(result, list(res)) # letters result } # ; show.icon.design(TL) #; TL() ##:define [[TL()]]## #:318 h <- "internal generator function" #325: ##define [[cross.simple()]]:## cross.simple <- function(){ # print("in cross") res <- rbind( c( 05, 05, 95, 95, lwd.mm = 10, NA), c( 05, 95, 95, 05, lwd.mm = 10, NA), c( 50, 50, 50, 50, lwd.mm = 30, 2) ) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } ##:define [[cross.simple()]]## #:325 h <- "internal generator function" #326: ##define [[cross()]]:## cross <- function(z = 0.30){ # print("in cross") if(is.factor(z)){ z <- as.numeric(z); z <- 0.5 * z / length(levels(z)) } z <- z * 100; eps <- 1 # *0.7 z <- min(100, max(0, z)) result <- list() res <- cbind( x = c(z, 100 - z, 100 - z, z), y = c(0, 0, 100 - z, 100 - z), color = 5) class(res) <- "polygon" result <- c(result, list(res)) res <- rbind( c(eps*c( 5, 5, 95, 95, lwd.mm = 10), NA), c(eps*c( 5, 95, 95, 5, lwd.mm = 10), NA), c(eps*c( 50, 50, 50, 50, lwd.mm = 30), 3) ) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments" result <- c(result, list(res)) result } ##:define [[cross()]]## #:326 h <- "internal generator function" #327: ##define [[circle.simple()]]:## circle.simple <- function(){ # print("in circle.simple") res <- rbind( c( 50, 50, 50, 50, lwd.mm = 100, NA)) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } ##:define [[circle.simple()]]## #:327 h <- "internal generator function" #328: ##define [[circle()]]:## circle <- function(whole = 0.50){ # print("in circle") if(is.factor(whole)){ whole <- as.numeric(whole); whole <- 0.50 * whole / length(levels(whole)) } whole <- min(1, whole) res <- rbind( c( 50, 50, 50, 50, lwd.mm = 100, NA), c( 50, 50, 50, 50, lwd.mm = whole * 100, 0)) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } ##:define [[circle()]]## #:328 h <- "internal generator function" #331: ##define [[car.simple()]]:## car.simple <- function(){ # print("in cross") res0 <- cbind(t(cbind( 0.6* c( 05, 05, 95, 95), 0.6* c( 05, 95, 95, 05), 0.6* c( 50, 50, 50, 50)) + c(2.7,2.2)) , lwd.mm = c(10,10,30), color = c(2,5,7) ) colnames(res0) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res0) <- "segments" res1 <- cbind( x = c(10, 90, 85, 75, 70, 45, 40, 20, 10), # car polygon y = c(10, 10, 30, 30, 45, 45, 30, 30, 10)) class(res1) <- "polygon" res2 <- cbind(t(cbind( 0.3* c( 05, 05, 95, 95), 0.3* c( 05, 95, 95, 05), 0.3* c( 50, 50, 50, 50)) + c(43, 10)) , lwd.mm = 0.3 * c(10,10,30), # cross on door color = c(4,6,2) ) colnames(res2) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res2) <- "segments" res3 <- rbind( c(25, 10, 25, 10, 15, 1), c(75, 10, 75, 10, 15, 1)) # wheel colnames(res3) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res3) <- "segments" list(res1, res1, res2, res3) } # ; car.simple() ##:define [[car.simple()]]## #:331 h <- "internal generator function" #332: ##define [[car()]]:## car <- function(width = .5, height = .0){ # print("in cross") width <- (width * 2 + 2) / 3.2; height <- (height * 5.0 + 1) / 3.2 x <- c(-40, 40, 35, 25, 20,-05,-10,-30, -40) * width + 50 y <- c(-20, -20, 0, 5, 20, 20, 5, 0, -20) * height + 50 wheel.size <- height * 10 + 5 ymin <- min(y); xmin <- min(x); xmax <- max(x) res1 <- cbind( x, y) # car polygon class(res1) <- "polygon" res2 <- rbind( c(h <- 0.75*xmin + 0.25*xmax, ymin, h, ymin, wheel.size, 1), c(100 - h, ymin, 100 - h, ymin, wheel.size, 1)) # wheel colnames(res2) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res2) <- "segments"; list(res1, res2) } # ; car() ##:define [[car()]]## #:332 h <- "internal generator function" #334: ##define [[nabla()]]:## nabla <- function(){ res <- rbind( c( 05, 95, 50, 05, 10), c( 50, 05, 95, 95, 10), c( 95, 95, 05, 95, 10) ); class(res) <- "segments" colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm"); res } # ; nabla() ##:define [[nabla()]]## #:334 h <- "internal generator function" #363: ##define [[walkman()]]:## walkman <- function( balpha = 70, col = NA, ll1alpha = -80, ll2alpha = -120, lr1alpha = -45, lr2alpha = -100, al1alpha = -170, al2alpha = -100, ar1alpha = -60, ar2alpha = +20 ){ # generates a walking man in a device of pin-sizes: 10cm x 10 cm and lwd = 10 mm # col <- sample(1:10, size = 1) xy <- c(0,0); dxq <- 10; dyq <- 10; size <- 10; lwd <- 10.5; lw.unit <- 1 segs.set <- NULL; col.set <- NULL scale.xy <- 2.54 balpha <- balpha / 180 * pi ll1alpha <- ll1alpha / 180 * pi; ll2alpha <- ll2alpha / 180 * pi lr1alpha <- lr1alpha / 180 * pi; lr2alpha <- lr2alpha / 180 * pi al1alpha <- al1alpha / 180 * pi; al2alpha <- al2alpha / 180 * pi ar1alpha <- ar1alpha / 180 * pi; ar2alpha <- ar2alpha / 180 * pi #364: ##define body of [[walkman]]:## x <- c(cos(balpha), sin(balpha)) * scale.xy ba <- c(0,0); be <- ba + x bal <- lwd * lw.unit * 1.7; bac <- col seg.mat <- cbind(a=ba[1], b=ba[2], c=be[1], d=be[2], e=bal) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, bac) ##:define body of [[walkman]]## #:364 #366: ##define head of [[walkman]]:## h <- be + ( be - ba) * .75; hl <- lwd * lw.unit * 1.6; hc <- col seg.mat <- cbind(a=h[1], b=h[2], c=h[1], d=h[2], e=hl) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, hc) ##:define head of [[walkman]]## #:366 #365: ##define legs of [[walkman]]:## lbecken <- 0.19; llength <- 1; ll <- lwd * lw.unit * 0.85 ll1a <- ba + c(cos(balpha+pi/2), sin(balpha+pi/2)) * scale.xy * lbecken ll1e <- ll1a + c(cos(ll1alpha), sin(ll1alpha)) * scale.xy * llength lr1a <- ba + c(cos(balpha-pi/2), sin(balpha-pi/2)) * scale.xy * lbecken lr1e <- lr1a + c(cos(lr1alpha), sin(lr1alpha)) * scale.xy * llength ll2a <- ll1e ll2e <- ll2a + c(cos(ll2alpha), sin(ll2alpha)) * scale.xy * llength lr2a <- lr1e lr2e <- lr2a + c(cos(lr2alpha), sin(lr2alpha)) * scale.xy * llength l <- rbind(cbind(ll1a[1], ll1a[2], ll1e[1], ll1e[2]) ,cbind(lr1a[1], lr1a[2], lr1e[1], lr1e[2]) ,cbind(ll2a[1], ll2a[2], ll2e[1], ll2e[2]) ,cbind(lr2a[1], lr2a[2], lr2e[1], lr2e[2]) ) seg.mat <- cbind(l, e=ll) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, hc) ##:define legs of [[walkman]]## #:365 #367: ##define arms of [[walkman]]:## aschulter <- 0.19; alength <- 0.7; al <- lwd * lw.unit * 0.85 al1a <- be + c(cos(balpha+pi/2), sin(balpha+pi/2)) * scale.xy * aschulter al1e <- al1a + c(cos(al1alpha), sin(al1alpha)) * scale.xy * alength ar1a <- be + c(cos(balpha-pi/2), sin(balpha-pi/2)) * scale.xy * aschulter ar1e <- ar1a + c(cos(ar1alpha), sin(ar1alpha)) * scale.xy * alength al2a <- al1e al2e <- al2a + c(cos(al2alpha), sin(al2alpha)) * scale.xy * alength ar2a <- ar1e ar2e <- ar2a + c(cos(ar2alpha), sin(ar2alpha)) * scale.xy * alength a <- rbind( cbind(al1a[1], al1a[2], al1e[1], al1e[2]), cbind(ar1a[1], ar1a[2], ar1e[1], ar1e[2]), cbind(al2a[1], al2a[2], al2e[1], al2e[2]), cbind(ar2a[1], ar2a[2], ar2e[1], ar2e[2]) ) seg.mat <- cbind(a, e=al) segs.set <- rbind(segs.set, seg.mat); col.set <- c(col.set, hc) ##:define arms of [[walkman]]## #:367 segs.set[, 1:4] <- segs.set[, 1:4] + 5 # shift to the center segs.set <- cbind(as.data.frame(segs.set), f = col) # set color class(segs.set) <- c(class(segs.set), "segments") segs.set[, 1:4] <- segs.set[, 1:4] * 10 colnames(segs.set) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") return(segs.set) } #; show.icon.design(walkman, balpha = 90) # ; # plot(1:10, type = "n", axes = FALSE, xlab = "", ylab = "") # puticon(5, 5.5, icon = walkman, icon.cex = 160, balpha = 80) # walkman() ##:define [[walkman()]]## #:363 h <- "internal generator function" #371: ##define [[smiley.blueeye()]]:## smiley.blueeye <- function(){ # output: x0, y0, x1, y1, lwd, col circle <- function(x0 = 1, y0 = 1, a = 3, lwd.mm = 5, # a == radius time.0 = 0, time.1 = 12, n = 30){ # function to draw a part of a circle line alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd.mm) } res <- NULL # x0 y0 radius lwd.mm res <- rbind( res, cbind(circle(50, 49.5, 23, 50), col.code = NA) ) # face res <- rbind( res, cbind( 50, 45, 50, 50, 15, 1) ) # nose res <- rbind( res, cbind(circle(50, 49.5, 47.5, 5), 1) ) # margin res <- rbind( res, cbind(circle(35, 65, 2.5, 10), 4) ) # eye left res <- rbind( res, cbind(circle(65, 65, 2.5, 10), 1) ) # eye right res <- rbind( res, cbind(circle(50, 50, 27, 8, 7.50, 4.50), 3) ) # mouth colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } # ; show.icon.design(smiley.blueeye) # ; smiley.blueeye() ##:define [[smiley.blueeye()]]## #:371 h <- "internal generator function" #372: ##define [[smiley.normal()]]:## smiley.normal <- function(){ # output: x0, y0, x1, y1, lwd, col circle <- function(x0 = 1, y0 = 1, a = 3, lwd.mm = 5, # a = radius time.0 = 0, time.1 = 12, n = 30){ # function to draw a part of a circle line alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd.mm) } res <- NULL # res <- rbind( res, cbind( 50, 45, 50, 50, 15, 1) ) # nose res <- rbind( res, cbind(circle(50, 49.5, 23, 50), col.code = NA) ) # face res <- rbind( res, cbind(circle(50, 49.5, 47.5, 5), 1) ) # rand res <- rbind( res, cbind(circle(35, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(65, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(50, 50, 27, 8, 7.50, 4.50),1) ) # mouth colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } #; show.icon.design(smiley.normal) ##:define [[smiley.normal()]]## #:372 h <- "internal generator function" #377: ##define [[smiley()]]:## smiley <- function(smile = 0.8){ if(is.factor(smile)) smile <- as.numeric(smile) / length(levels(smile)) circle <- function(x0 = 1, y0 = 1, a = 3, lwd = 5, time.0 = 0, time.1 = 12, n = 60){ alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd) } res <- NULL # res <- rbind( res, cbind(circle(50, 49.5,23, 50), col.code = NA) ) # face # res <- rbind( res, cbind(circle(50, 49.5,47, 60), 1) ) # rand res <- rbind( res, cbind( 50, 50, 50, 50, 100, 1 )) # face+rand res <- rbind( res, cbind (50, 50, 50, 50, 88, NA)) # face res <- rbind( res, cbind(circle( 35, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle( 65, 60.5, 3.0, 10), 1) ) # eye if(is.na(smile)){ res <- rbind( res, cbind(circle(50, 50, 27, 7.5, 7.50, 4.50),1) ) # mouth } else { # x0 y0 a lwd time.0 time.1 # hs <- circle(50,50, 27, 10, 7.5, 4.5) # mouth laughing # hn <- circle(50,10, 27, 10, 10.5, 13.5) # mouth not laughing hs <- circle( 50, 40, 17, 10, 8.5, 3.5) # mouth laughing hn <- circle( 50, 20, 17, 10, 9.5, 14.5) # mouth not laughing s <- smile; n <- 1 - s h <- cbind( hs[,1], s*hs[,2]+n*hn[,2], hs[,3], s*hs[,4]+n*hn[,4], hs[,5]) res <- rbind( res, cbind(h, 1) ) # mouth } class(res) <- "segments"; res return(res) } ##:define [[smiley()]]## #:377 h <- "internal generator function" #373: ##define [[smiley.sad()]]:## smiley.sad <- function(){ # output: x0, y0, x1, y1, lwd, col circle <- function(x0 = 1, y0 = 1, a = 3, lwd.mm = 5, time.0 = 0, time.1 = 12, n = 30){ # function to draw a part of a circle line alpha <- seq(time.0, time.1, length = n); alpha <- alpha * (2*pi/12) x <- a * sin(alpha) + x0; y <- a * cos(alpha) + y0 cbind(x[-n],y[-n], x[-1],y[-1], lwd.mm) } res <- NULL #; res <- rbind( res, cbind(50, 45, 50, 50, 15, 1) ) # nose res <- rbind( res, cbind(circle(50, 49.5, 23, 50), col.code = NA) ) # face res <- rbind( res, cbind(circle(50, 49.5, 47.5, 5), 1) ) # rand res <- rbind( res, cbind(circle(35, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(65, 60.5, 3.0, 10), 1) ) # eye res <- rbind( res, cbind(circle(50, 10, 27, 8, 10.50, 13.50),1) ) # mouth colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") class(res) <- "segments"; res } # ; show.icon.design(smiley.sad) ##:define [[smiley.sad()]]## #:373 h <- "internal generator function" #381: ##define [[mazz.man()]]:## mazz.man <- function(Mean = 100, Penalty = 1, Region = "region:", expo = 1/(1:3)[3], Mean.max = 107, Mean.half = 90, Penalty.max = 5, Penalty.min = 0, x.text = 70, y.text = 10, text.cex.mm = 10){ # bag.size %in% [0,1] # idea of the icon: Adriano Pareto, Matteo Mazziotta Mean.min <- Mean.half - (Mean.max - Mean.half) / ((h <- 2^(1/expo)) - 1) Mean.min <- min(Mean.min, Mean) fac <- 0.95 * ((h * (Mean - Mean.min)) / Mean.max) ^ expo bag.size <- 0.80 * ((Penalty - Penalty.min) / Penalty.max )^expo /2 res <- rbind( c(50, 77.5*fac + 5, 50, 77.5 *fac + 5), #head c(50, 35 *fac + 5, 50, 60 *fac + 5), #body c(50, 32 *fac + 5, 50, 0 *fac + 5), #leg in white c(50, 32 *fac + 5, 50, 0 *fac + 5), #leg c(50 + 30*fac, 55 *fac + 5, 50 + 25*fac, 75 *fac + 5), #tape2 c(50 - 20*fac, 65 *fac + 5, 50 + 30*fac, 70 *fac + 5), #stick c(50, 64 *fac + 5, 50 - 15*fac, 45 *fac + 5), #arm one c(50 - 20*fac, 65 *fac + 5, 50 - 15*fac, 45 *fac + 5), #arm c(50 + 27.5*fac, 50 *fac + 5 - 20*bag.size , 50 + 27.5*fac, 50 *fac + 5 - 20*bag.size), #bag c(50 + 25*fac, 55 *fac + 5, 50 + 30*fac, 75 *fac + 5)) #tape1 colnames(res) <- c("x0", "y0", "x1", "y1") lwd.mm <- c( c(17, 14, 12, 10, 2.5, 2, 6, 6) * fac / 0.927042 , 31 * bag.size / 0.2924, 2.5 * fac / 0.927042 ) colors <- c("#3377BB", "white", "brown", "orange")[c(1,1,2,1,4,3,1,1,4,4)] res <- data.frame(res, lwd.mm = lwd.mm, color = colors) class(res) <- c(class(res), "segments"); result <- list(res) res <- data.frame(x = x.text, y = y.text, L = Region, text.cex.mm = text.cex.mm, color = 1) class(res) <- c(class(res), "text"); res <- list(res) result <- c(result, res) return(result) } # ; show.icon.design(mazz.man) # Mazzi.Pareto # res1 <- rbind(c(0,0,100,100)); class(res1)<-c("segments"); res1 <- list(res1) # res2 <- rbind(c(100,0,0,100)); class(res2)<-c("segments"); res2 <- list(res2) ##:define [[mazz.man()]]## #:381 h <- "internal generator function" #389: ##define [[bike()]]:## bike <- function(){ res.liste <- NULL; a <- 1.5 res <- rbind( c(20, 20, 20, 20, 40, 1), # wheel front c(20, 20, 20, 20, 30, NA), # wheel front c(80, 20, 80, 20, 40, 1), # wheel back c(80, 20, 80, 20, 30, NA), # wheel back c(50, 20, 80, 20, 3*a, 1), # --- c(50, 20, 65, 50, 3*a, 1), # / c(80, 20, 32.5, 45, 3*a, 1), # \ c(50, 20, 32.5, 45, 3*a, 1), # \ c(60, 50, 70, 50, 5*a, 1), # seat c(20, 20, 40, 60, 3*a, 1), # / c(40, 60, 45, 60, 5*a, 1) # control ) res[, c(2,4)] <- res[, c(2,4)] + 20; class(res) <- "segments" colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") res.liste <- c(res.liste, list(res)) } ##:define [[bike()]]## #:389 h <- "internal generator function" #390: ##define [[bike2()]]:## bike2 <- function() { res.liste <- NULL; a <- 1.5 res <- rbind( c(20, 20, 20, 20, 40, 1), # wheel front c(20, 20, 20, 20, 30, NA), # wheel front c(80, 20, 80, 20, 40, 1), # wheel back c(80, 20, 80, 20, 30, NA), # wheel back c(50, 20, 80, 20,3*a, 1), # --- c(50, 20, 65, 50,3*a, 1), # / c(80, 20, 32.5, 45,3*a, 1), # \ c(50, 20, 32.5, 45,3*a, 1), # \ c(60, 50, 70, 50,5*a, 1), # seat c(20, 20, 40, 60,3*a, 1), # / c(40, 60, 45, 60,5*a, 1)) # control res[, c(2,4)] <- (res[, c(2,4)] - 9.3) * 10/5.3; class(res) <- "segments" colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") res.liste <- c(res.liste, list(res)) } ##:define [[bike2()]]## #:390 h <- "internal generator function" #391: ##define [[heart()]]:## heart <- function(txt = "xy"){ txt <- substring(paste(txt, " "), 1:2, 1:2) res1 <- cbind( x = c(50, 80, 90, 70, 50, 50, 30, 10, 20, 50), y = c(05, 30, 60, 85, 50, 50, 85, 60, 30, 05) + 05, color = NA) class(res1) <- c(class(res1), "polygon"); res1 <- list(res1) res2 <- cbind( x = c(50, 90, 70, 50, 50, 30, 10, 50), y = c(05, 60, 85, 50, 50, 85, 60, 05) + 05) res2 <- data.frame( res2, lwd.mm = 19.5, color = NA) class(res2) <- c(class(res2), "spline"); res2 <- list(res2) res3 <- data.frame( x = c(27, 73), y = c(65, 65), txt = txt, 40, 1) class(res3) <- c(class(res3), "text"); res3 <- list(res3) result <- c(res1, res2, res3) } # ; show.icon.design(heart)() ##:define [[heart()]]## #:391 h <- "internal generator function" #392: ##define [[bend.sign()]]:## bend.sign <- function(txt = "xy"){ txt <- substring(paste(txt, " "), 1:2, 1:2) ground <- 6; top <- 90; center <- 55.5; size <- 25 res0o <- c(50, top, 50, ground + 3, 7, 1) # Pfahl outer res0i <- c(50, top, 50, ground + 2, 3, 3) # Pfahl inner res1 <- c(30, ground, 70, ground, 2, 1) # Fundament res2 <- rbind( c(50, center+size, 50-size, center), c(50-size, center, 50, center-size), c(50, center-size, 50+size, center), c(50+size, center, 50, center+size)) res2 <- cbind(res2, lwd.mm = 15, color = 1) # Schildrand size <- size - 0 # Innenrand: res3 <- rbind( c(50, center+size, 50-size, center), c(50-size, center, 50, center-size), c(50, center-size, 50+size, center), c(50+size, center, 50, center+size)) res3 <- cbind(res3, lwd.mm = 10, color = 2) res <- rbind(res0o, res0i, res1, res2, res3); rownames(res) <- NULL res <- as.data.frame(res) colnames(res) <- c("x0", "y0", "x1", "y1", "lwd.mm", "color") res$color <- c("black", NA, "gray")[res$color] class(res) <- c(class(res), "segments"); res <- list(res) size <- size - 2 res1b <- rbind( c(50, center+size), c(50-size, center), c(50, center-size), c(50+size, center)) res1b <- cbind(res1b, color = NA) class(res1b) <- c(class(res1b), "polygon"); res1b <- list(res1b) # Innenflaeche f <- size / 25 res2b <- cbind( x = 50 + f*c( h <- c(- 9, 5, 12), rev(-h)), y = center + f*c( h <- c( 16, 13, 6), rev(-h)), lwd.mm = f^0.6*6.5, color = 1) class(res2b) <- c(class(res2b), "spline"); res2b <- list(res2b) #res3 <- data.frame( x = c(27, 73), y = c(65, 65), txt = txt, 40, 1) #class(res3) <- c(class(res3), "text"); res3 <- list(res3) result <- c(res, res1b, res2b) #, res1) } # ; show.icon.design(bike2)# bend.sign) #; bend.sign() ##:define [[bend.sign()]]## #:392 h <- "internal generator function" #398: ##define [[fir.tree()]]:## fir.tree <- function(height = 1, width = 1, txt = ".....", t.cex.mm = 10){ fac.x <- width * 100/60; fac.y <- height * 100/70 # build standardized elements of pictogram res <- data.frame( x = c(20, 40, 25, 45, 35, 50, 65, 55, 75, 60, 80), y = c(20, 40, 40, 60, 60, 80, 60, 60, 40, 40, 20) + 5, color = NA) class(res) <- c(class(res), "polygon") res.liste <- c(list(res)) res <- data.frame( x = c(55, 55, 45, 45), y = c(20, 10, 10, 20) + 5 , color = "brown") class(res) <- c(class(res), "polygon") res.liste <- c(res.liste, list(res)) # integrate effects of arg1 and arg2 res.liste <- lapply( res.liste, function(xyc){ xyc$x <- fac.x * (xyc$x - 50) + 50; xyc} ) res.liste <- lapply( res.liste, function(xyc){ xyc$y <- fac.y * (xyc$y - 50) + 50; xyc} ) # append text element # res <- data.frame( x = 20, y = 2, txt = txt, t.cex.mm, color = "1") res <- data.frame( x = fac.x * (30 - 50) + 50, y = fac.y * (10 - 50) + 50, txt = txt, t.cex.mm, color = "1") #180327 class(res) <- c(class(res), "text") res.liste <- c(res.liste, list(res)) res.liste } # ; show.icon.design(fir.tree) ##:define [[fir.tree()]]## #:398 #343: ##define [[find.smooth.curve()]] and [[find.brush.polygon()]]:## #342: ##define [[bs.approx()]] and [[loess.approx()]]:## bs.approx <- function(x, y, x.new, degree = 3, knots = 10, df = NULL){ # library(splines) # check package splines if(is.matrix(x) || is.data.frame(x)){y <- x[,2];x <- x[,1]} # check x,y input n <- length(x); idx <- order(x); x <- x[idx]; y <- y[idx] # order by x y.new <- rep(NA, length(x.new)) # init y result x.all <- c(x, x.new); y.all <- c(y, y.new) # combine old and new points basis <- splines::bs(x.all, degree = degree, df = df, knots = knots) # find design matrix res <- lm(y.all ~ basis); coef.ok <- !is.na(res$coeff) # estimate spline coefficients X <- cbind(1, basis[ 1:n ,])[,coef.ok] # extract design matrix for old X.new <- cbind(1, basis[-(1:n),])[,coef.ok] # extract design matrix for new y.dach <- X %*% res$coefficients[coef.ok] # compute spline of old points y.new.dach <- X.new %*% res$coefficients[coef.ok] # compute spline of new points list(cbind(x, y.dach), cbind(x.new, y.new.dach)) # compose result } loess.approx <- function(x, y, x.new, span = 0.6, degree = 2){ smooth.curve <- loess(y ~ x, span = span, degree = degree) res.new <- predict(smooth.curve, x.new) res.old <- predict(smooth.curve, x) return(list(cbind(x, res.old), cbind(x.new, res.new))) } ##:define [[bs.approx()]] and [[loess.approx()]]## #:342 find.smooth.curve <- function(x.in, y.in, n.new = 100, method = c("bs", "loess")[1], degree = 3, knots = 50, span = 0.75){ if(is.matrix(x.in) || is.data.frame(x.in)){y.in <- x.in[,2]; x.in <- x.in[,1]} # check input n <- length(x.in) dx.min <- 0.1 * diff(range(x.in)) / length(x.in) # set minimal dx of spline x.h <- cumsum(c(1, pmax(dx.min, (diff(x.in)^2 + diff(y.in)^2)^0.5))) # find x of spline x.new <- seq(x.h[1], x.h[n], length = n.new) # find new x for spline eval if( method == "bs" ){ res.x <- bs.approx(x = x.h, y = x.in, x.new = x.new, degree = degree, knots = knots) res.y <- bs.approx(x = x.h, y = y.in, x.new = x.new, degree = degree, knots = knots) } else { res.x <- loess.approx(x = x.h, y = x.in, x.new = x.new, span = span, degree = min(2, degree)) res.y <- loess.approx(x = x.h, y = y.in, x.new = x.new, span = span, degree = min(2, degree)) } return(cbind(x = res.x[[2]][,2], y = res.y[[2]][,2])) # compose result } find.brush.polygon <- function(x, y, hwd = 10){ # find area along the polygon of points (x, y) with width 2*hwd if(is.matrix(x) || is.data.frame(x)){ y <- x[,2]; x <- x[,1] } # check input dy <- diff(x); dx <- -diff(y); h <- length(dx) # find orthogonal vectors to segments dx <- c(dx[1], 0.5 * (dx[-1] + dx[-h]), dx[h]) # find means of neighbours dy <- c(dy[1], 0.5 * (dy[-1] + dy[-h]), dy[h]) # of orthogonal vectors d <- hwd / sqrt(dx^2 + dy^2); dy <- d * dy; dx <- d * dx # scale orthognal vectors xy <- rbind(cbind(x = x + dx, y = y + dy), cbind(x = rev(x - dx), y = rev(y - dy))) rbind(xy, xy[1,]) # copy first point to the end } ##:define [[find.smooth.curve()]] and [[find.brush.polygon()]]## #:343 h <- "internal generator function" #406: ##define [[comet()]]:## comet <- function(comet.color = NA){ t2xy <- function(t,radius,init.angle=0) { t <- t / 360 t2p <- 2*pi * t + init.angle * pi/180 list(x = radius * cos(t2p), y = radius * sin(t2p)) } center <- c(17, 30); fac <- 1.2 #; fac <- .2 # c.color <- 4; s.color <- 3; comet.bg.color <- 7; bg.color <- 0; t.color <- 5 # c.color <- "gold"; s.color <- "red"; comet.bg.color <- "green"; # t.color <- "gold"; bg.color <- "lightgrey" comet.bg.color <- "white"; t.color <- NA; bg.color <- "white"; s.color <- "white" c.color <- comet.color res.liste <- NULL # aera of icon ----------------------------------------------------------------------------- res <- data.frame(c(1, 99, 99, 1, 1), c(1, 1, 99, 99, 1), color = bg.color) class(res) <- c(class(res), "polygon"); res.liste <- c(res.liste, list(res)) # aera of comet ---------------------------------------------------------------------------- width <- 20 * fac res <- data.frame(center[1], center[2], center[1], center[2], width, color = comet.bg.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb # letter C of Comet ----------------------------------------------------------------------- width <- 3 * fac; radius <- 10 * fac P <- t2xy( 90:-45 , radius, 0) res <- data.frame(P$x + center[1], P$y + center[2]); res <- cbind(res, res, width, color = bg.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # C missing part P <- t2xy( 67.5:180 , radius, 0) res <- data.frame(P$x + center[1], P$y + center[2]); res <- cbind(res, res, width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # C P <- t2xy( -180:-22.5 , radius, 0) res <- data.frame(P$x + center[1], P$y + center[2]); res <- cbind(res, res, width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # C # letter M of coMet ---------------------------------------------------------------------- if( TRUE){ width <- 2.5 * fac; shift <- c(1, 0.5) * 2 * fac; h <- 22.5 / 360 * 2 * pi xy <- cbind(c(-1, -1, 0, 1, 1), c(-1, 1, -1, 1, -1)) xy <- xy %*% matrix( c( cos( h ), -sin(h), sin(h), cos(h)), 2, 2) x <- shift[1] + xy[,1] * 4 * fac; y <- shift[2] + xy[,2] * 4 * fac res <- data.frame(x[-5] + center[1], y[-5] + center[2], x[-1] + center[1], y[-1] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # M } # tail of comet with letter T of comeT -------------------------------------------------- radius <- c(1, 5) * fac; width <- 3 * fac for(i in 1:6){ radius <- radius + 10 * fac P1 <- t2xy(c(0, 22.5, 45), radius[1], 0) P2 <- t2xy(c(0, 22.5, 45), radius[2], 0) res <- data.frame( P1$x + center[1], P1$y + center[2], P2$x + center[1], P2$y + center[2], width, color = t.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb if(i == 1){ res <- data.frame(P1$x[1] + center[1], P1$y[1] + center[2], P1$x[3] + center[1], P1$y[3] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb res <- data.frame( P1$x + center[1], P1$y + center[2], P2$x + center[1], P2$y + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb } else { res <- data.frame( P1$x + center[1], P1$y + center[2], P2$x + center[1], P2$y + center[2], width, color = t.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb } # T of comeT if(i == 5){ h <- c(P2$x[2] - P1$x[2], P2$y[2] - P1$y[2]) * 2.5 res <- data.frame( P1$x[2] + center[1], P1$y[2] + center[2], P2$x[2] + h[1] + center[1], P2$y[2] + h[2] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb h <- h * 0.6 res <- data.frame( P1$x[2] + center[1], P1$y[2] + center[2], P1$x[2] - h[2] + center[1], P1$y[2] + h[1] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb res <- data.frame( P1$x[2] + center[1], P1$y[2] + center[2], P1$x[2] + h[2] + center[1], P1$y[2] - h[1] + center[2], width, color = c.color) class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # comet gb } } # letter O of cOmet width <- 2.5 * fac; radius <- 7.5 * fac; shift <- c(1, 0.5) * 1.2 * fac P <- t2xy( 0:359 , radius, 0) res <- data.frame(P$x + shift[1] + center[1], P$y + shift[2] + center[2]) res <- cbind(res, res, width, color = "white") class(res) <- c(class(res), "segments"); res.liste <- c(res.liste, list(res)) # O by white res.liste } # ; print(comet()); show.icon.design(comet) ##:define [[comet()]]## #:406 h <- "internal generator function" #337: ##define [[coor.system()]]:## coor.system <- function(xxx, yyy, pcex = 5, xrange, yrange, axes = FALSE){ shift <- 0.5; lwd <- .25 x <- c(.1, 3, 6, 9.9); y <- c(0, 0.1, -0.1, 0) + shift xy <- spline(x,y); x <- xy$x; y <- xy$y; n.1 <- length(x) - 1 res <- cbind(x[1:n.1], y[1:n.1], x[-1], y[-1], lwd) # x line res <- rbind(res, cbind(y[1:n.1], x[1:n.1], y[-1], x[-1], lwd)) # y line res <- rbind(res, c(9.5, shift - 0.4, 9.9, shift, lwd), # x arrow c(9.4, shift + 0.3, 9.9, shift, lwd), # x arrow c(shift - 0.4, 9.5, shift, 9.9, lwd), # y arrow c(shift + 0.3, 9.4, shift, 9.9, lwd)) * 10 # y arrow res <- cbind(res, 1) class(res) <- "segments"; res.list <- list(res) if( !missing(xxx) ){ if(missing(xrange)){ xrange <- range(xxx); xrange <- xrange + c(-0.1,0.1)*diff(xrange) } if(missing(yrange)){ yrange <- range(yyy); yrange <- yrange + c(-0.1,0.1)*diff(yrange) } xticks <- pretty(xrange); xticks <- xticks[ xrange[1] < xticks & xticks < xrange[2]] yticks <- pretty(yrange); yticks <- yticks[ yrange[1] < yticks & yticks < yrange[2]] xtickspos <- (xticks - xrange[1]) / (xrange[2] - xrange[1]) * 95 + 5 ytickspos <- (yticks - yrange[1]) / (yrange[2] - yrange[1]) * 95 + 5 res <- rbind( cbind(xtickspos, 5, xtickspos, 2, 2, 1) # x ticks ,cbind(2, ytickspos, 5, ytickspos, 2, 1) # y ticks ) class(res) <- "segments"; res.list <- c(res.list, list(res)) x <- c(-3, -1.5, 0, 1.5, 3); y <- c(-2.5, -0.5, 0.4, 1.5, 2.5) xy <- spline(x,y); x <- xy$x; y <- xy$y xxx <- (xxx - xrange[1]) / (xrange[2] - xrange[1]) * 95 + 5 yyy <- (yyy - yrange[1]) / (yrange[2] - yrange[1]) * 95 + 5 res <- NULL; h <- length(x) for( i in seq(along = xxx) ){ res <- rbind(res, cbind(xxx[i] + x[-1], yyy[i] + y[-1], xxx[i] + x[-h], yyy[i] + y[-h], pcex * 0.2, NA), # points xxx, yyy cbind(xxx[i] + x[-1], yyy[i] + rev(y)[-1], xxx[i] + x[-h], yyy[i] + rev(y)[-h], pcex * 0.2, NA) # points xxx, yyy ) } class(res) <- "segments"; res.list <- c(res.list, list(res)) h <- length(xticks) # x axis res <- data.frame( xtickspos, rep(-4, h), paste(xticks), rep(6, h),rep(1, h)) class(res) <- c(class(res), "text"); if(axes) res.list <- c(res.list, list(res)) h <- length(yticks); hh <- max(nchar(yticks)) # y axis res <- data.frame( rep(-2*hh, h), ytickspos, paste(yticks), rep(6, h),rep(1, h)) class(res) <- c(class(res), "text"); if(axes) res.list <- c(res.list, list(res)) } res.list } ; coor.system() ##:define [[coor.system()]]## #:337 ##:define generator functions## #:351 if( icon %in% ls() ) icon <- get(icon) if( !is.function(icon) ) { cat("Error in puticon():", icon,"not implemented yet!") return() } } ##:if [[is.character(icon)]] look for internal generator in [[puticon()]]## #:311 if( !is.function(icon) ){ # then: icon is not a generator function if( is.list(icon) ){ txt <- c("icon <- function(){", deparse(icon), "}") h <- try(eval(parse(text = txt))) if("try-error" %in% class(h)){ cat("Error in puticon(): definition of icon generating function failed\n") return( cat("Error in puticon(): argument icon must be a function or a list\n", "or an integer to specify a plotting character\n") ) } } } icon.gen.args <- formals(icon) n.icon.gen.args <- length(icon.gen.args) ##:check pictogram generating function in [[puticon()]]## #:301 #302: ##extract additional args in [[puticon()]]:## args <- list(); n.args <- 0 # no additional args to concern if( n.icon.gen.args > 0 ){ # extract relevant args of argument "..." args <- list(...); n.args <- length(args) if( 0 < n.args ){ # match names of "..."-args and icons args idx <- match(names(icon.gen.args), names(args)) idx <- idx[!is.na(idx)] args <- args[idx] n.args <- length(args) } if( 0 == n.args ){ # explizit assignment of args if empty args <- list() } else { # expand args[[i]] cyclically to get n.items elements for( i in seq(n.args) ){ # for each position xy[i, ] ... if( length(args[[i]]) < n.items ) args[[i]] <- rep(args[[i]], n.items)[1:n.items] } } } # relevant args found and expanded ##:extract additional args in [[puticon()]]## #:302 #303: ##call icon without arguments in case of no args in [[puticon()]]:## if( 0 == n.args ){ pic.sets <- try(do.call(icon, args)) if("try-error" %in% class(pic.sets) ){ cat("ERROR in call.icon.generator: generator function failed!\n"); return() } if( !is.list(pic.sets) || is.data.frame(pic.sets) ) pic.sets <- list(pic.sets) } ##:call icon without arguments in case of no args in [[puticon()]]## #:303 #304: ##loop along the positions in [[puticon()]]:## type.set <- c("polygon", "segments", "text", "spline") # constant vector for(i in 1:n.items){ # loop along each of the positions: xy[i, ] #305: ##compute [[pic.sets]] in case of arguments in [[puticon()]]:## if( 0 < n.args ){ # call pictogram generating function with element i of each of the args-vectors a <- lapply(args, function(x) x[[i]]) # remark: a is a list # x[[i]] not x[i] #180514 pic.sets <- try(do.call(icon, a)) # pic.sets is a list of descriptions if("try-error" %in% class(pic.sets) ){ cat("!ERROR in call.icon.generator: generator function failed!\n"); return() } if( !is.list(pic.sets) || is.data.frame(pic.sets) ) pic.sets <- list(pic.sets) } ##:compute [[pic.sets]] in case of arguments in [[puticon()]]## #:305 for( pic.i in pic.sets ){ # loop along the elements of pic.sets # find type (last element of class vector) and dimensions of pic.i type <- rev(class(pic.i))[1]; type <- type[ type %in% type.set ] h <- dim(pic.i); rows.pic.i <- h[1]; cols.pic.i <- h[2] # s #306: ##add missing colums in [[puticon()]]:## if( type == "polygon" ){ if( cols.pic.i < 3 ) pic.i <- cbind( pic.i, color.vec = NA ) } if( type == "segments" ){ if( cols.pic.i < 5 ) pic.i <- cbind( pic.i, lwd.mm = 10 ) if( cols.pic.i < 6 ) pic.i <- cbind( pic.i, color.vec = NA ) } if( type == "text" ){ if( cols.pic.i < 4 ) pic.i <- cbind( pic.i, text.cex.mm = 10 ) if( cols.pic.i < 5 ) pic.i <- cbind( pic.i, color.vec = NA ) } if( type == "spline" ){ if( cols.pic.i < 3 ) pic.i <- cbind( pic.i, lwd.mm = 10 ) if( cols.pic.i < 4 ) pic.i <- cbind( pic.i, color.vec = NA ) } ##:add missing colums in [[puticon()]]## #:306 #307: ##prepare colors in [[puticon()]]:## # cat("--- prepare colors -------------") # print(type); print(type.set); print(pic.i); print(cols.pic.i) # extract color column: color.vec of group of descriptions col.no <- c(3, 6, 5, 4)[ match( type, type.set ) ] color.vec <- pic.i[, col.no] # standardize format of color.vec if(is.factor (color.vec)) color.vec <- as.character(color.vec) if(is.numeric(color.vec)) color.vec <- c("white", palette("default"))[1+color.vec] # <=> if(is.numeric(color.vec)) color.vec <- colornames[1 + color.vec] # replace NA entries by argument color[i] of puticon call res.color <- ifelse( is.na(color.vec), color[i], color.vec ) ##:prepare colors in [[puticon()]]## #:307 #308: ##transform coordinates in [[puticon()]]:## n.cols <- c(2, 4, 2, 2)[ match(type, type.set) ] adj.h <- matrix( adj, nrow(pic.i), n.cols, byrow = TRUE ) #180327 res <- # shift because of design size # (pic.i[, 1:n.cols] - 100 * adj) * (pic.i[, 1:n.cols] + 100 * (adj.h - 1)) * #180327 # scaling: rescaling design size 0..100 -> 0..1: factor = 0.01 0.01 * matrix(c(xsize[i], ysize[i]), rows.pic.i, n.cols, byrow = TRUE) + # shift because of desired position matrix(xy[i,], rows.pic.i, n.cols, byrow = TRUE) ##:transform coordinates in [[puticon()]]## #:308 #310: ##activate plotting commands in [[puticon()]]:## switch(type, "polygon" = polygon (res[,1], res[,2], col = res.color, xpd = NA, border = NA), "segments" = segments(res[,1], res[,2], res[,3], res[,4], col = res.color, # lwd = mm.to.lwd(pic.i[, 5] * xsize[i] / xwcoor.pmm), lwd = mm.to.lwd(pic.i[, 5]) * icon.cex[i] / 100, xpd = NA), "text" = text(res[,1], res[,2], as.character(pic.i[,3]), col = res.color, cex = mm.to.cex(pic.i[,4]) * icon.cex[i] / 100, # adj = c(0,0), # adjust for text implemented by coordinates xpd = NA), "spline" = { n.h <- length(res[,1]); z <- seq(n.h); n <- 10 xy.h <- cbind(spline( z, res[,1], n = n * n.h)$y, spline( z, res[,2], n = n * n.h)$y) lines(xy.h, col=res.color, lwd=mm.to.lwd(pic.i[,3]) * icon.cex[i] / 100, xpd = NA) } ) ##:activate plotting commands in [[puticon()]]## #:310 } } # end of loop along the positions ##:loop along the positions in [[puticon()]]## #:304 return(NULL) } #:275 ##:define [[puticon()]]## aplpack/R/slider.brush.plot.xy.R0000644000176200001440000000426513516603654016251 0ustar liggesusersslider.brush.plot.xy<-function(x,y=NULL,z=NULL,...) { x.name<-deparse(substitute(x)) y.name<-deparse(substitute(y)) z.name<-deparse(substitute(z)) if(length(x)<2) return("Error: x is of length 0 or 1") if(!is.null(y)){ if(length(y)<2) return("Error: y must be a vector") if(length(x)!=length(y)) return("Error: x and y must have the same length") x<-cbind(x,y) } if(!is.null(z)){ if(length(z)<2) return("Error: z must be a vector") if(length(x)!=length(z)) return("Error: x and z must have the same length") x<-cbind(x,z) } if(!is.matrix(x)&& !is.data.frame(x) && ncol(x)<3) return("Error: not enough variables") if("NULL"==y.name){x.name<-colnames(x)[1]; y.name<-colnames(x)[2]} if("NULL"==z.name){x.name<-colnames(x)[1]; z.name<-colnames(x)[3]} z<-x[,3]; y<-x[,2]; x<-x[,1] args<-list(...) if(!any("main"==names(args))) args<-c(args,list(main=paste(x.name,"<-->",y.name))) if(!any("xlab"==names(args)))args<-c(args,list(xlab=x.name)) if(!any("ylab"==names(args)))args<-c(args,list(ylab=y.name)) do.call("plot.default",c(alist(x=x,y=y,pch=19),args)) refresh<-function(...){ zrange<-range(z); z1<-slider(no=1); z2<-slider(no=2) zmin<-z1; zmax<-z1+z2; ind<-zmin<=z&z<=zmax; pos<-par()$usr rect(pos[2],pos[4],pos[1]*.5+pos[2]*.5,pos[3]*.1+pos[4]*.9, col="white",border=NA) txt<-paste(z.name,"(red) in [",format(zmin,digits=4),",", format(zmax,digits=4),"]",sep="") text(pos[2],pos[4],txt,adj=c(1,1),col="red",cex=0.7) col<-c("black","red")[1+ind] points(x,y,col=col,pch=19, cex=if("cex" %in% names(args)) args$cex else 1) } z.min<-min(z); z.max<-max(z); delta<-(z.max-z.min)/100 reset<-function(...){ do.call("plot",c(alist(x=x,y=y,col="red",pch=19),args)); pos<-par()$usr #090216 rect(pos[2],pos[4],pos[1]*.4+pos[2]*.6,pos[3]*.1+pos[4]*.9, col="white",border=NA) } slider(refresh, c("minimum of z","interval width of z"), c(z.min,0),c(z.max+delta,(z.max-z.min)+delta), c(delta,delta),c(z.min-delta,(z.max-z.min)/2), reset.function=reset ) refresh() cat("use sliders to select interval for inking points\n") } aplpack/R/plot.faces.R0000644000176200001440000001332513516603654014264 0ustar liggesusersplot.faces<-function(x,x.pos,y.pos,face.type = 1, width=1,height=1,labels, ncolors=20, col.nose=rainbow(ncolors), # nose col.eyes=rainbow(ncolors,start=0.6,end=0.85),# eyes col.hair=terrain.colors(ncolors), # hair col.face=heat.colors(ncolors), # face col.lips=rainbow(ncolors,start=0.0,end=0.2), # lips col.ears=rainbow(ncolors,start=0.0,end=0.2), # ears cex = 2, ...){ #180308 if(missing(x)) return("no face.list object in call") face.list<-x$faces; face.data<-x$xy if(class(face.list)!="faces") { if(!is.list(face.list) || !any(names(face.list[[1]])=="lipso") ) return("input not of class faces") } spline<-function(a,y,m=200,plot=FALSE){ n<-length(a) h<-diff(a) dy<-diff(y) sigma<-dy/h lambda<-h[-1]/(hh<-h[-1]+h[-length(h)]) mu<-1-lambda d<-6*diff(sigma)/hh tri.mat<-2*diag(n-2) tri.mat[2+ (0:(n-4))*(n-1)] <-mu[-1] tri.mat[ (1:(n-3))*(n-1)] <-lambda[-(n-2)] M<-c(0,solve(tri.mat)%*%d,0) x<-seq(from=a[1],to=a[n],length=m) anz.kl <- hist(x,breaks=a,plot=FALSE)$counts adj<-function(i) i-1 i<-rep(1:(n-1),anz.kl)+1 S.x<- M[i-1]*(a[i]-x )^3 / (6*h[adj(i)]) + M[i] *(x -a[i-1])^3 / (6*h[adj(i)]) + (y[i-1] - M[i-1]*h[adj(i)]^2 /6) * (a[i]-x)/ h[adj(i)] + (y[i] - M[i] *h[adj(i)]^2 /6) * (x-a[i-1]) / h[adj(i)] if(plot){ plot(x,S.x,type="l"); points(a,y) } return(cbind(x,S.x)) } n<-length(face.list) if(missing(x.pos)){ co<-ro<-ceiling(n^0.5) plot((0:ro)+.5,(0:co)+.5,type="n",xlab="",ylab="",axes=FALSE) m<-matrix(1,ro,co); x.pos<-col(m); y.pos<-(1+ro)-row(m) } if(!missing(labels)) names(face.list)<-labels fac.x<-width/1.1/210; fac.y<-height/1.3/210 xtrans<-function(x){x.pos[j]+fac.x*x}; ytrans<-function(y){y.pos[j]+fac.y*y} for(j in seq(face.list)){ face.obj<-face.list[[j]]; factors<-face.data[,j] f<-1+(ncolors-1)*(factors+1)/2 # translate factors into color numbers for(obj.ind in seq(face.obj)[c(10:11,1:9)]) { x <-face.obj[[obj.ind]][,1]; y<-face.obj[[obj.ind]][,2] xx<-spline(1:length(x),x,40,FALSE)[,2] yy<-spline(1:length(y),y,40,FALSE)[,2] lines(xtrans(xx),ytrans(yy),...) if(face.type>0){ if(obj.ind==10) polygon(xtrans(xx),ytrans(yy),col=col.hair[ceiling(mean(f[9:11]))],xpd=NA) # hair if(obj.ind==11){ polygon(xtrans(xx),ytrans(yy),col=col.face[ceiling(mean(f[1:2 ]))],xpd=NA) # face if(face.type==2){ # beard for(zzz in seq(hhh<-max(face.obj[[8]][,1]),-hhh,length=30)){ hrx<-rnorm(8,zzz,2); hry<-0:7*-3*rnorm(1,3)+abs(hrx)^2/150 hry<-min(face.obj[[9]][,2])+hry lines(xtrans(hrx),ytrans(hry),lwd=5,col="#eeeeee",xpd=NA) } ind<-which.max(xx); wx<-xx[ind]; ind<-which.max(yy); wy<-yy[ind] # edge of hat wxh<-wx<-seq(-wx,wx,length=20); wyh<-wy<-wy-(wx-mean(wx))^2/250+runif(20)*3 lines(xtrans(wxh),ytrans(wyh)); wx<-c(wx,rev(wx)); wy<-c(wy-10,rev(wy)+20) wmxy1<-wmxy0<-c(min(wx),min(wy)+20) wmxy2<-wmxy3<-c(runif(1,wmxy0[1],-wmxy0[1]), wy[1]+100) wmxy1[2]<-0.5*(wmxy0[2]+wmxy3[2]); wmxy2[1]<-0.5*(wmxy2[1]+wmxy0[1]) npxy<-20; pxy<-seq(0,1,length=npxy) gew<-outer(pxy,0:3,"^")*outer(1-pxy,3:0,"^")* matrix(c(1,3,3,1),npxy,4,byrow=TRUE) wxl<-wmxy0[1]*gew[,1]+wmxy1[1]*gew[,2]+wmxy2[1]*gew[,3]+wmxy3[1]*gew[,4] wyl<-wmxy0[2]*gew[,1]+wmxy1[2]*gew[,2]+wmxy2[2]*gew[,3]+wmxy3[2]*gew[,4] lines(xtrans(wxl),ytrans(wyl),col="green") wmxy1[1]<- wmxy0[1]<- -wmxy0[1] wmxy1[2]<-0.5*(wmxy0[2]+wmxy3[2]); wmxy2[1]<-0.5*(wmxy2[1]+wmxy0[1]) wxr<-wmxy0[1]*gew[,1]+wmxy1[1]*gew[,2]+wmxy2[1]*gew[,3]+wmxy3[1]*gew[,4] wyr<-wmxy0[2]*gew[,1]+wmxy1[2]*gew[,2]+wmxy2[2]*gew[,3]+wmxy3[2]*gew[,4] points(xtrans(wmxy3[1]),ytrans(wmxy3[2]),pch=19,cex=2,col="#ffffff",xpd=NA) points(xtrans(wmxy3[1]),ytrans(wmxy3[2]),pch=11,cex=2.53,col="red",xpd=NA) polygon(xtrans(c(wxl,rev(wxr))),ytrans(c(wyl,rev(wyr))),col="red",xpd=NA) # hat polygon(xtrans(wx),ytrans(wy),col="#ffffff",xpd=NA) # edge of hat } } xx<-xtrans(xx); yy<-ytrans(yy) if(obj.ind %in% 1:2) polygon(xx,yy,col="#eeeeee") # eyes without iris if(obj.ind %in% 3:4) polygon(xx,yy,col=col.eyes[ceiling(mean(f[7:8 ]))],xpd=NA) # eyes:iris if(obj.ind %in% 9) polygon(xx,yy,col=col.nose[ceiling(mean(f[12:13]))],xpd=NA)# nose if(obj.ind %in% 5:6) polygon(xx,yy,col=col.lips[ceiling(mean(f[1:3]))],xpd=NA) # lips if(obj.ind %in% 7:8) polygon(xx,yy,col=col.ears[ceiling(mean(f[14:15]))],xpd=NA)# ears } } lab<-names(face.list)[j] text(x.pos[j],y.pos[j]-0.5*height,lab,xpd=NA, cex = cex) } } aplpack/R/slider.hist.R0000644000176200001440000000113313516603654014450 0ustar liggesusersslider.hist<-function(x,panel=rug,...) { x.name<-deparse(substitute(x)) if(missing(x)||length(x)<2) return("Error: x must be a vector") args<-list(...) args<-args[names(args)!="breaks"] ClassNumber<-length(hist(x,plot=FALSE)$breaks) if(!any("main"==names(args)))args<-c(args,list(main=x.name)) refresh<-function(...){ xrange<-range(x); num<-slider(no=1) breaks<-seq(xrange[1],xrange[2],length=num+1) do.call("hist",c(alist(x=x,breaks=breaks),args)) panel(x) } slider(refresh,"ClassNumber",1,100,1,ClassNumber); refresh() "use slider to select number of classes" } aplpack/MD50000644000176200001440000001223613517522464012212 0ustar liggesusersc1c021f2a5c01e41b0779a77059e3456 *DESCRIPTION f70ac19173f8089816b97c156ae4f3a2 *NAMESPACE 63dface81019d1ed3d3fdba2baf49127 *R/bagplot.R e914eaa2e99aa01535d74dcf8e5e3e20 *R/boxplot2D.R 56f47e8d9f8577727667b2180df3d0a7 *R/faces.R 4fe188f538db011cf4bd756752a042ad *R/iconplot.R 3d364d8bcb6c9ed0fec198b4ff25c355 *R/plot.faces.R 353b166c32f6eed7de048a627b0a2030 *R/puticon.R 54518329740973dc09a1455511c2825b *R/slider.R c79ee05b05cc0b8998474f1255cb3bd6 *R/slider.bootstrap.lm.plot.R dd3256edc6716d2d3b968c8583c5f964 *R/slider.brush.pairs.R 60ac5299bd17e0ce32aaaf57dadabc9c *R/slider.brush.plot.xy.R 4412067414c30a401190e63a6f2f86e7 *R/slider.density.R 5073a1ddbbb52add6291132329060663 *R/slider.hist.R c6bb0a9e9683d44e3b11d2294bb8f4f9 *R/slider.lowess.plot.R d8fdd29035e55ad296b8265dae6e2392 *R/slider.smooth.plot.ts.R 13701f4559035c64a1b827bf90663ef2 *R/slider.split.plot.ts.R acd9f9a63da70280b49817f0a3c23c95 *R/slider.stem.leaf.R 12ad89d6c28158842fddd4b630b0633d *R/slider.zoom.plot.ts.R 18457adacc60a932de13abfcc9d41011 *R/spin3R.R 21cc8481dca65050cb98521d744b7512 *R/stem.leaf.R 4396d51ab14e4d7fd0fae79eba05086e *TODO eff98e7237c2b9c907a7e978396c2192 *build/vignette.rds 57c10ad62f91bb5a3391850adfb4c09d *inst/CITATION e5e2bcd1a32ed4a4fbeadbf57db23c6b *inst/doc/bagplot.pdf fdccdbfc5da08eb8cab920a923a1a556 *inst/doc/faces.pdf 244660c2ea7d1074996558b65697ddcc *inst/doc/ms.pdf 668cf26082e69a0ca37d56b1dc878cbc *inst/doc/sc.pdf 7ff39e2fedc4e786a986c4d107d524a0 *inst/doc/slider-make.pdf a49b7b4269b2a97eddc530cb5c28276f *inst/doc/sliderfns.Snw 7cf622e0b63cfd725a17d2f792a3ef95 *inst/doc/sliderfns.pdf b7631782aa288342b56a2dc110b9b034 *inst/doc/spin3R.pdf 5f984cf5cb0d98d20049e744528155e1 *inst/src/R.pnm b4420fde9b201313575b352bba305b30 *inst/src/bagplot.rev ef66629e478c286101c305da7fc0fa64 *inst/src/doaplpack 402a02c1ec97b250ff4b37c542fed354 *inst/src/eckring1.pnm 5e6be3d482631b51c8a9c12d7604b996 *inst/src/faces.rev 9fcdb165b58e9f6f0addab202cee2953 *inst/src/ms.rev bea52547b071efd0e35c3018ca31c8ea *inst/src/pw-esch.jpg ab1030a1b61307b6a8756cf1fa6c96bb *inst/src/pw-esch.png 6db7dfe199a33b0db85e39c1b11d8a43 *inst/src/pw-esch.ppm 8cec593279e3469158e90f909179a086 *inst/src/sc.rev 0c45c335237646a6717adcd95d2f3b22 *inst/src/sliderfns.rev 4f0ece7a484089f7160cc0d83886b26f *inst/src/spin3R.rev 949f6751aee6ab5b5a55ddc037d48c6b *inst/src/spin3Ra.rev 99e0357468d63bc8852380e771ad35e7 *inst/src/tm1.jpg 67615b317d0a5284eadfb5e6f45e979f *inst/src/walkman-r.jpg 02e0c42fe166dfeac04cd57725c7fdc5 *man/bagplot.Rd ea90ff346fd864167d5a7f7af00482a3 *man/bagplot.pairs.Rd 2baee52c7e6c06dbb0f0f15cd948f232 *man/boxplot2D.Rd c8a56938a5846b42030d6f17877e79ab *man/faces.Rd 211c028004ed108b597a6a33b83d1029 *man/hdepth.Rd 37ba235f1c738952db943ee916928259 *man/iconplot.Rd 92509cc21a4e151101040770b69b9be4 *man/plothulls.Rd bff64305605e7fae5e078d97ee92609f *man/plotsummary.Rd ed0469c9a64ad5748bc081cd2243e1b4 *man/puticon.Rd f92d7f22e67078733410764f8b364c21 *man/skyline.hist.Rd ef034aa151626afbe29b95f4870d602f *man/slider.Rd ddcf12e61493232bc24f1fe5e8f168fe *man/slider.bootstrap.lm.plot.Rd c5d8f87e9fd0f557bc4025a3398d0f91 *man/slider.brush.Rd 79ef5156a653e15a0222e2c3a20d0662 *man/slider.hist.Rd 5bb1deedc0d9fb86ce1c4b2a1649380e *man/slider.lowess.plot.Rd 3b5dc00f0c36f5cd26fb250640e4a0b5 *man/slider.smooth.plot.ts.Rd c77142d3d72ffb97f319e7a34399d870 *man/slider.split.plot.ts.Rd 73ca04f8679c29283042f3d6adccd104 *man/slider.stem.leaf.Rd 4d6d9dd9a80b650b45b2a5d5587a3608 *man/slider.zoom.plot.ts.Rd 9df8225a6e81719e4912f0feeaafbbbf *man/spin3R.Rd a07431f7e5d2437f9d8682b3856fd10f *man/stem.leaf.Rd fffa24a7b21155a0bce9ad0ef9f4b0a7 *vignettes/p152540-Sep-2.jpg b8abef09ca7c45256213cb2e161c0fd9 *vignettes/p152654-Sep-2.jpg 117d0e6d91668d1c35d676573535a4f4 *vignettes/p171340-Jun-9.jpg e40c5368a4852a170550feadc2bf2777 *vignettes/p172434-Jun-9.jpg 0a121e10b29764c3645b5a9ba77303e4 *vignettes/p173657-Jun-9.jpg 34a0e1ecb35ffa2c33a8d606dd8cfde7 *vignettes/p175158-Jun-9.jpg 7a9c003c1e6ec95bea97208e0151a4b2 *vignettes/p180443-Jun-9.jpg 98ffaa5b083afd443afea69aa9cf6b48 *vignettes/p180705-Jun-9.jpg bf423befb8af531393ac3eacd040f5ef *vignettes/p181236-Jun-9.jpg 10434946de689dd333e140464555803d *vignettes/p2008-Aug27-144152.jpg 5600b50e12e0a832718418b2ab80297e *vignettes/p2008-Aug27-145612.jpg a26a54f802474d211d65353d30f5d185 *vignettes/p2008-Aug27-150508.jpg 5e98da83c96d80d3fd83471e0697a917 *vignettes/p2008-May23-164319.jpg a8c62d62ba142c2fba3d8f7dec2fa414 *vignettes/p2008-May29-155046.jpg 5373d78d7e30efd464c029e9e069ba52 *vignettes/sliderbootwidget.jpg 1a757020e641bef889dca334edba2fee *vignettes/sliderbrushplotwidget.jpg 6cb55c10612740ff1ec307aa1a5b38ff *vignettes/sliderdensitywidget.jpg f5655ca63d010a697f63aa132b0cf474 *vignettes/sliderdensitywidget2.jpg a49b7b4269b2a97eddc530cb5c28276f *vignettes/sliderfns.Snw 99f714e964e4d21ec1672a70c5f18a39 *vignettes/sliderhistwidget.jpg 70b7a4ead68d588d917fefb2e0297fcf *vignettes/sliderlowesswidget.jpg 03ee16e311559b8406d26522c5e37650 *vignettes/sliderpairswidget.jpg dbfc9343c7b4753a2a5898d254940c96 *vignettes/slidersmoothwidget.jpg 3b804c659f4720e93dc115b7cb96f9e5 *vignettes/slidersplitwidget.jpg e7aae59df08f7c929f4b94bfc72ec07d *vignettes/slidertrimhistwidget.jpg b1b619d306aaa9335f1421c7e050f778 *vignettes/sliderzoomwidget.jpg aplpack/inst/0000755000176200001440000000000013516603655012654 5ustar liggesusersaplpack/inst/doc/0000755000176200001440000000000013516603747013423 5ustar liggesusersaplpack/inst/doc/sc.pdf0000644000176200001440000021421613516603655014527 0ustar liggesusers%PDF-1.4 %쏢 5 0 obj <> stream x\Io۳|yƽ/lv[}}NZ\dZ =TMw#)*H<Яꫥ{_l }olq?.-zu. ]XcabtZЃ1Wa]> 5\+< q@+'s˫M60nyL _q;^˳f0*V,/b/Q;f@ `˧IC非~j'h#9yo`70#c=0gb%ebKvP^;A3X%?AM*HSxhT C0KX40R>C#TIe._ ɔ qiY<RTn`s%'F x ? d4mrEI1EsEN3|4*@6n3lK+u=y7b) f,lGl0L11: {×\CH{ j "(8 2GXp5HeDb\-V WX !1jk^f:~`b eZS"`#D07YQ7¨ࠞYl}uѼ;HJiXaB hRr0rYu !@BB~{3NZSΉ"Rȸ2,|Ғ9|nE>`N4 Ll4%H 8,L.̶6vN |o2*!GOWH $z<ԊQ2vBǀc4XZ ":R.Me**{CuX3X(|(RȗgS3|BH^%dЉ ΓCR6!Zy<*' gqf'G6TPM3.r@$LR֐>fM4df/HJ\9OqBZs8 *4l&Ke^BT-PN%dsAkjRTC=GOSv '\jz J~!ꍛh5srir Pݔy\<A4H/k4SSSP PsˣAy&Uܧ>V(a" 71i*:䭛A&fsEfjԷ99.unH,*mIn:l\\ْHr^G{PRp~EЉNfMxF" R!4oмIة@z)= ftj͆tcҲqTiBc%yIyvY0?tb׭3 giۦi-l̽C&$ZwrC\m^+a e[ۇoVҔF7^I ǭ- [y˰}U먪aȄ+L"`eW<~2Et[uVJ4ȪNwBN:ѱ)jW փPoòM/ w oS͔e'P2(]OO܆>-F4ڟ_&0aTk>$j AUOu.%FVЋJvJ$4vPr >cڕwhȌi?iQŮHtjU*e B2\d;gKZqZ]Wfzd 3'fLA0 J'\sń6ޏܗ1KdB&"ż&g8kL9J<ݣ9H蟊j+H%? z0r|ZޘioF!#8~+=@92n=Ed8Q2 ,#rFOC(q)mѽL'C !I"|#/RD~|~Yqޠַ樫^Lfv $Q3h!3H _MM2{7X馱! I,'H/D57qn( 0IsvXgTsm0M_aN%-nݏ)Zޅ'v3҄I^"_ԗjސуnlK] Iگ qWBA89BYM Du# ]wBt+hø#,Gt)=p<{ϐSU|;F &:LA= DdҔtv)Rx }KY0}ѢHV)J#'k԰bکʍcNw`9V**P3d IAXɧפ$ j1HݮXS$Wˎ+r@_:VbȤ73L'fRxV `[g):Eؿq?+SӸ2m8q@]=%jq&F˲`n]X@Mmm#&kuj\pCە ).ow'N'Fq?Zw#B5q#鑴]2q<n% n~zۭc?ƀ!elY~;ĸ s)C R*$乌LHOYͅu*XwTz#c(y G q;dbNr~YEk]B)rǐWMjNAz5 6鲯qtY7P,B*yË7 -tfKN&!~"ࢶa}ǧHb9[G-.SxқVK;wi8(8wu8Cދ.)Wuz"eu{21ʴCͺ_j66%KRgNsкOmT{cd]ɭu^n%GQ%TDr"K}O=;5F'Lׯ$Ug\}SUxu-s pu}%:$D]vսs,@v?qP瀆 4O QexG&{'(!Ƀ93L\cyk)ORޫzUťէbw渇6mŘ%R;3-H$J .>~ޤȓMa$䍮bJ&٘/odBp*Zgrlʆy-lB7L8H]=t;>isxU/ʽNPI(3}PVz.vR`41盵$&|z#&R윑YBOé A+|@-]R ]{)6Qx>儛iɟp c'˥OkSLAF+5@ƅOyH_}MYT,;SO%XmҔR﹜|kfޑex&d>n.J2mSY0oZM֧-Qə܍[nw}?9;? `9tVB[dzӸgL 10#vRKlU+6.SlaU}mw_^endstream endobj 6 0 obj 4649 endobj 27 0 obj <> stream x\Ko,W w4=ƒ #H9X>л|Z撲h==3S_WCJbhtWWufV/{/gpv랩8k\Ͼ>&AEY2;@W|G0 5#"k\"΃̄lApeWV}q(ď(ʥ={ĩIMG,;UE0 K'”i2C MXdNhy^GI_K'yYd,e"{qZYMQ/*'JBnv  GbwsNPO!ZW\VS{Z\ t{&PϿv,HR:kGVG%WV:+ޢwz!?Uc! 2JU\m$ Xȕ&V%'޵9> KwHP>JZЂg=~ o"%8|"g*;'( @qX)%cIMY5o<&r5IznvRO噺/H8%%}v{.* kr(/Zȥ8k}`!OTq Fc2[`/)m3uA1~ <{@o^*jCI\\] /IVɳHy޷:#K".TǬ BEjf{K_%Lo @z `;jfEvH֚7s5,n_2Z-~"& E\ەO9.2v,s [;ynoGѐk ]a&T}ضPSzE yh4Ux.Ԭb*S3 ,K&*)z@G8&͔X&P4Nď<]MQk!>:҄2Z׋}`#vcEny;(2>~Cho(?ˢyGz Ž[;(C(=y5]_A_᭓<9}x43TΙGGe>\x O;v=`c'{L/i2}R 5^ ՋPYRGfLW>& ' ; 3! 6ʧ6!}QU j0D"3;lɅ'_` lbw>AtA J(װjp@pH)abb5./dIĿih Za`"0G :+'jZ2 &U153 8@p75~8' 4Fs.SF/&Fǥ;[~ ʦXOT5"# @L#N @- }b9;WYloʠ_cDz[GYؿucC>oIkjBSs5]* r< tp;TMq #Ky6Y'ny hQ:f>U Vaa/.mkG.ĤuVa)' (/9tn c岪kđ7Um`\^oYpCoOcX^tv^y( },0FH,LFUv`,.[ń&},ǂW5}dFMTԫFu||>[%ݢ:FGMpv ;9R(H'J"\4WDxeӼ䩎0WB $K Mm~]b!5nHZS!B \p5mОv{Poxq `1ƾaG7$|M!'lឯz{AcG'ƯS..*:կ%C/\#^U^WrߺP}ˏ$ZQSUPU-ѿ18™* |PMyg 2;! 9#xjUazoߢYѾ^ 8_O%1~䝺K&Nn@M.Vsg-~ ́|fKޫ_+(5~H߉bG10P/\Yrqk*:d=$0{)yڐt,=SbëLf&B)<7 fJ!oY{57e_()R`ǡ6j/;q l1wy)ef)~ :3JF V ւHǰe$`6UӼ̍. ؈y%uaJzq`G7<^oEUi3EYhp[endstream endobj 28 0 obj 3191 endobj 32 0 obj <> stream x]˓qOUn娜VUpGeU*.;q%QbK, @KR%%.tُlW"7=;'q47>=1=xwWhG~VZ}t8Z䤍[y:7'4OBs1ǯr(E)_ޯs:7o0ދ||{Pus3PN}rprV-gռ3o?׹4Y>ڷo !&oѭq`?1j޿>b_i>;Kso:>Vgۛ6uj&)/N#[Hty䯿`~'>˽s.)?{y\l$F 7(q}r:OlD6Hqj/NR4JGn2aZ)}srEk;ҌMZKKǽfs4S1xOdG#2NQrR\&B/vM_qø0¦<-mea.XG9"ፎS+1QGΚgTYhdqJKa:(UO2OqĈ:iI_e,O<#[#n[]ZH)p݈YMtT+n'7`Bt~BᔉH4[P-z[PT vǩІH#x Wւ'нC-j6ڋDЩa#~FMY@O5=/7f0HV.b٫Bnx=ʹUT 6U:pF/Xn"a1`={GwEe,fHd^&| |X0F[G Mh3>%IZr蔶/-(LJdst6K!X#\ Bhך461; Oey+SD"hj- `[{eb&">pBe&:[e֠=,ڭؾӗ*-e[o9S s(q(NŲLϒ.O L%ȅ-͆^7v# v2VFl%g f[u "(tCP䢙#sE Rm!(!rd40CS43#{3s<.;]`.b/׀cA\L#oK3Ȏ=50fs/],^/aL%QrKDBQFN~6 @ah9cȽ&% ![@:Q59.ET!Xݩ0AKgsqsMeM3?nڥ\+lѲHLI͏}+-eE油)gsBlX h߇[w? vv(V\6S+🝵IgGIsáp Evto KQkIr 3Cttv%,h~T~kZu[IߔJ|,?jRzR^^M̵E|Tr('92SU51oTmCߞːSSly2 ;2#&S<]2@ptEf kWbJG=}#pt_6 <5(m\ȭ eoicxRMAT$tk:]l إ܄U)jDR0ZE*(Nao()퓉 GT٪//"/&C%f̵`Wk2LDıo4(Obw|?8[Y݁{RHg&n%_ofitfv2&VŔ`չY1KT.qDN^\CٌH n`YMq -R|"Q露DkuL&/QG{CB@79#Eo7W 2lTQHe-\XhNbʁEKtzi蘺t)}HlƠ~)FL/Qjb3,5.R&>Dg_|)+S}(e {D;Hr&K7Y-wx9l%{"U(S,ݤor62"t 3( Y"ÙIY/W(/'HK g[oOnKW!XU!):+MeAdȽD@}o?νqhVPҖE5?_@aH+^4{iibB `ZHkj겸[60/5|)YY'' `*7\[3p 5AMQY aS`I8 Mҵ @6"ev,Mif76E3U 2-dʫ5Qؼ?k%/0e*'r;<@x|X63떖S8&`mR k/!*vih Dc=_?ݜ[}pn gCAs^5{ M/xq>,vDUB_em*<ȹMt_C3,pVͰݔyg6k{guWT$h1tMt@N!˽܄BW&^oOWhK+I&]:Gtq\טW}S&.}>y]I}WHye{_Q*ȑTn[Smӻ w &Cx0/#W+h2%Byv?LxN{Du[fF-|3n{Z @ȵ%G/_ /RBXޡ}>\&3lgZ"o>YRRʒ͞oN%KwnnC5; Cq.*[jB>g}Ԣ|=Y FAtU{eg@ V41X_k Pc|]ɇF^V7[yϻ$\D/v jPkm-GU x_cxXkiEBz$ekkjZ$#f+zm!\lTylLx5KIIoHYڋsN>yDqa'_SA:=]=F 3״&dQY jDՅ$^'&EW1*juܼ27owy/KIgCeHAɚ4yrH/bK,KuJx#6f$Ұr:X'RGh{Tܚev˂ic?. '&L^uUf{U"S™ i}/gDZzp81sL/1X+)\sqc]Vi8]Ml3nE}vn'к?vwбKxiΉ=g- 3pyD,ZTWS4uÏNK|9MbQy'fzCv7&}T3NktߖFO!H쏲HT?9IgD U$msUDiqMX;-aȻ@a\(15Nlg9efc(۶]9AX"1j<)9"0DXnK?de;c$tĀ߼gW*T',+8,#C!ŊzJEfM1QP2j1zȜUqR>bG5 UzFQo\ <*L6u\ӳK*?T{/8Gjyt3ۉ,yDfr JhUjf$1wyY[;$CmRT0UaaËrZTإI\s ;g8ڏwʒɆ{LزMOHpoJvE}[]G/ɩ5DU(^X͚SO ,HcBK{i80J<Ҏʺ](5/b{KF6w 0ۉp1]}=(t%K4 1ziۃy@c)ce}A4R?$NܮBxZ?$W;oëT"1Ǧn \2Z +#>?.V `* q̓TRi[Zt1h~ uq%qk/ kȭ /g:ؤNl cEz{)K-;FWNuLhF2SԘb9|Rsa _&Z׎8qkdS:Zo)]D&?`0!ݒGivND{: Z*De?ؘuUIuk}e*03 ]rf&L"1C4Aay-]? ._Ϫ ^G; 0xRuzlVG\TQUHFȰFQ{lcאUD;^б'Vp.Z+?!#RUDqBbpf'{7FT0ze#35U\k ۋKvB%Nv53F,IRQH1TE(v5hGK# yv7"qMM/jͧY R;/5!vɮ{F`~b'4E}Hzh{uOw(%WhI9WnGAo[@92{뽠*uxv2Ӈ 9A[WodGW[ûY2'᳭,`ͽi %_7eǙcMGzdŔC#_}|'`0Cl} qY5Ukj7kWKf,KK&q,\RVps0| "ѴgWdֺx8sKWltfgd,فե!aEےԹ9 9ͮKN`q1&gS懖73fi6C#QF7IPz(,." :L݋:yyK*~)fu,<ܹ]KcSA-~G7n/M9endstream endobj 33 0 obj 6436 endobj 39 0 obj <> stream x]ۏ^qW>-w|x=`mN"8@]y+iWeE Crxo/C(./Ùs`ާXN'^c\˃O/l&Ơ7CUYFu d#ᖛI(i6=T|U7yRMKꭞ,E(9҆oץ(7$U 2۱+K=/u},6P/GB,V>u Ĥ|˕l̵B-|omŤE(k/BB 7mܘMY [ʕE (?9MRbٜv4Qzsw>swٚzLyMN4Su׆v0ӡceб_ٗ#I4d2_.ԻAbak-cU<"0<4̋)cc^56~|ؤ?fyҳv|ُ جg Ky' VhD˰z@^B< ,yjiBY=A 'ɕ^6gaBB&\p]uGY&NjqFb0J,(I?ƪej,43]DxOrNxU^(섍i\''ha L5ٲ'b3k.5Rf<[ p8@4HauAP A񵧸A i}C~v2}ã  /~y'1~_`pM}۹~_)-޵-%*oJ']oJvAg\U˲LFn8ʳR,^"n],}Yjulinv mƯ U\\}nQ6^wk3xR{ǻm"AT_h/JOJ-/EEʤ$`%YYºq9s)"yN6lj5yĝޤjzR..F4a)8%r\j:9T=ip%Ŋqh!+*Zk\[Qr 7Y~hͤ, ^[TT7sNp73XIZV=ၕ'-i}*l=gY)ִHc?+_n""lwB^G%K7Z}M)(TJwp,=.[ľ/1vl̝2V32j:[k4Β D?<}5>ԓ6[,2!`x0Pda8Q*;tj?){p%`N[=i12sj&;)U=G D'g2Bb$/ JՏ+udim~6 'p}o1kn*:b%"RLxZ37Kx@yuBC3/l[X\$-4`:=V{W8dib|]k.cYIhwi'k]0;yfbQ1rZ^-VS1)X*GQs0bE{ġJמ@-<0E1XZXXv@ףJEpU5 "ۓVTAd;w\OIXFkiw/ Ӝ7)1حÿ~DjqF)ԉ%H~bHFFq/:uñFT#gjwg܍x8v-] }z,r| ew׆wl1u8qe=ZL6¶&=gtH% oB1wBd []An˦2/3{)0ҁ͜i0 (}at?Ҏ _sbm~AIhA4K.dsЕ6oJql(mES᙭]+tQ!86P.մXNbm¹'\ kϩb² SE Rp~8aSEx]P1"+'P[Op³(2¢,gH"^ǒ(pyϵ4#慌rC_pIF+,Ҏ΅LOG5A&!:$ y/tHPvNJ!`$#6c4裄Ʈvh Yd1lxa=h<֧;̫zqf¹ ۈ٧Mw0ZTRҢN):vwisn"pÕ66Գef!Z[EaWH٪=T|p 3@iMe|tnUd4+.{ΙE]3֩_1F00`_.+34/(q?{aG@Z7/9u K#$Zf1A²HۤUl6R"Vlf?@QڽEۤ%# Gq(4um"_뽱]Jkյr59L_'-[nsޟHnSPbF2E38#ՁcrFBU"T_g׫3J.Rw=,ۓED0GQ拫QvJDn;}n<_noOˇEvg'zxLDcLn8ZgeoUZl[W9)9سfAtJËfxwԟ;d-nI6)ݗ?i=MVfhtXZ^ЃGu$vfzfoXuͅZDr|(¯O!w Dy93jShX8)UԾ)E|RI7d wXhcIH3Y~E/Jo[3B FE'N#;r=O1yq=oG.٭ &h]!8xMaO[犺pcɵ+]NvQ`Ts5p<ヲG2>rK<akĚ &z3@18=̈ѱt nZ%f=SY`ڲ {%Ч]}I#Sո|Swٕ!5sƝ`?q\"R{k. T _ʮ9Tk5sJJE8[{6+O|7u{0ε4}^˴c@1V 3@E2^qvZd90&Bײ5 *QIȗjQ΅ү>2"9svwX+|腯6 JYf#pKa9f@؁S#%O@y]|X#ΚܕЕyMEBSe|Z Cmε֩%n%Z,Ъ5#cOTqJUM2#MƩ F5)&#BVX U78o({|<1(,rQc0f>WDzn^4s?cCfF6Huk3'Ffi^~c9060"b'=%E oPS2\˜(m ,B ']9L1:Yk:[E\9)s7.j:bߩ|_8гɵ;mѺxX*s#0Bv΍:!mڨUq= 1 qi;p{E(-Ca! 2Ri\߹7;Bx/,&E9F௎W'\ᬓNJ]- P~KYuuYI|maE -X}޼?[ ;mȁr< G)kk!M)!:QE?nc{0x$=3h@cݯ~m%'w2&iq෶QoEA7GoދN"4.EdDA^h0u>oi&RCB+J\(K7+|j-Ɵvc֫M1^vr^}Et=,bL KZ1kyh+S ·tH!|!KGʢ1ı"|hK~YߔbG_{y)"u)%ttJ}L25.ex"ǠhI̙Q[&yQxxd_endstream endobj 40 0 obj 6318 endobj 44 0 obj <> stream x\Kss89,mxJUB" Ȉ(QeRi3}H"X:4}hhßœvd::_|u@ .XEY7B_'k?F^.n}+fxɭ{ !~1Êɣ@j)Zr)L3ݒ{"|pId18-IϭwL>`SŦΪb 'U=03͒?I'Γ3u#0WL֍'L>b!W{&%Cꀮ28f̭[`Rq.Vmd2l <|e)}'+eojNRJ)4Z4J IGgquk'c/# 9j6Dkۺ֒i#K~ٴ]yEt]4VB\9,rN-}&[9Y 5Y"YMƃκsxJ C`oyhqXqYɡQߛT7&wm73mQҝO DAZX}kgcY5U+Jyz+HKXLd#brgʻ~501 o}| Iq>>osqx]{||`>^O﯏R_>Kr>.KbE*:?HRnvk0zk6 vpa []sqvh/ VO,yr{4o\% [[w-;^fogt5w98& ¼l3Y/g+-D RdRB-}Y?:ͻ p0pg6p%|Vȑbe­O0y?[V`gQ1z3DI` 9L@=IFn,6.]![W%|ەBk($@ټqOy._2 oQOHa1 y:t([?Jr3 Yu(pr$wHo暠x;TxFOA)OEn 1E2.hӂRʡvʆ7᢯W6u&>\:^~Yݵ4:&;\a6(SX:8oT鎲.܇a{UoWo{=yW?I[bf:N7wʜ_ή$m;_="%Y.(߅۩6)pEfA1 ԰([6~ǑP>p*Wu9ou!8ȨÔz+ 0q/,p*j C иa c85uȢʗO5HEa`hq] 1KL=' }+wQ8p"? Lݴ?$#[p̷P*~-KE= a⯪XFqǙzLE7HŞ51lԋ b;-Ǧ"&n=T(UQn&ۊwUrMm_CP'@:yH\SV\!C-owz*/~,t`_X endstream endobj 45 0 obj 3710 endobj 49 0 obj <> stream x\ɮ%qݿ72\9gƐ`0 n 5'Mjn}N[VEЂueEfL',u ޽OW7o{yXi,ƚOϿћc%n>4:n?ǞKi~v=oϷQ?ݨQn{m݊=~- b{n[F1M(o78v>$7˶`}Biu/ۊl ~QmoۂQ_m?l:nxSNWWZǏbvsuL{~C;4zxp+[e-ou Ch{L?\A WαK+]Zq]8ftBBk}_o K>;gK=jΧnwC!ԃ=p 9j]jU@e8;|(LJ:<͋Cǻ4-fNgJllV /ޗ[mQ#ʯQ8 ׇyfÎoǯǟ!g۫cb{r{|u#quVwK@ܮD0qr!ƏCqhw/w4;1!nއ7?8\]Dž} qxQof;f2Pj&[km t-ۂr`7͗'4뗝x>Tȱ|59=^O/Mq<>*^HT,}ʽ^=&y=꺹t73g/s=dU<9ًT) d' S$=^ku{=~?1/yO~ p:6 9c {cu '[<9 izﰿ^oaw_ڿ}P{vq7޵io>ϠXR_^h >4` ܈"S"75" F7eց7Yzl~U/yuDD鼺,(^"C =PJyU?*L<,j+4 lnj"Ձu~XzL ަ@FD'#~8p{0bߪ @5 DW43&G3?Srg$"NH.4R/t݄c9%!DlP=rXg0Bd%jc̓gp ks0BYS|*jBDQ*OjRVsFC>MkSV(!~G̔9FAaͬA¨g<>霃["$Oc!wax0V3D\<7 cMJT{7aMBu18U"tu!XQ5F5E@%ڏJNQA(``k"; (֯@4s6c)qIJ~5Y)H$y4PC Jw tz FkWVT ]5ź.C44 ͋ DZ͑M֫Pfְ *$ R9 zʐDq-H2U~Քʂ34S/yfDZB,"Z|I1:"VDCV\ٰ²PaL1kkf-k! #]Α#Ҵw*G6bٲ戗l٭@R+m f"b-kF+"ђއ&~PzS."4 7g-"Gv⑙5f(Vȱ4n*>3X3 ++'A4|{(픏Am*тDzԸ;DW!@W[J5\KWXSdC28ܖ! RHJ-G(\"q(\7AgUDkk1ֱcyur٬BK+tPl?-'NNtb $ *@m7DXA)U8Fǖj-+NX"5=24!YJ Tfi"5)m5iڦ |&욈$Er$EjO3g5)B S Ta˨Yb!/<, M$z38ǚC4q3^UGč =`-+(ѵ(B%6g<ؒkj^z X̭5DXsNa)5P8/Iְ8AI[S2#2+ y& 2Sɂo1 G.0iq'Mg٠y'wvEp)6䪝Nt\l6S`,6~>ގ Z ]G^Ĭ%CUϚ*,#z֜P$ }07eޕMJ1hjU[M{n.yP/uTЬVunVV6`AW͗ uSqT9W j΍tF{UXe؍eJ=er11KMfYժ9'C)r4ZIL)f[&odl Mv7>ߔ}/?|G ]=M`oLȫ Z.{Ww [Gj|2)RSl@2ظ)#ə)r= .K^ ^ OF^?|Vx!~U-G/N!t ߇B:؀5qSR}ޏqK. $.B8)\2"$ˤ< MSKq'qq츼i;=PKix^2p6[8mTnS֓]p+ YR I)W7W*gqwbd/}03,G,?25)䄟Ѿ"4~a=ɼ[P7sz¤ s]7O' GoJpwCf̯M\L\vȋ_iLY-7[w+xSvoao8E3ƛbrrxS;3- ]#Ǘ;J"w`"$'> /Contents 5 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 31 0 obj <> /Contents 32 0 R >> endobj 38 0 obj <> /Contents 39 0 R >> endobj 43 0 obj <> /Contents 44 0 R >> endobj 48 0 obj <> /Contents 49 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 26 0 R 31 0 R 38 0 R 43 0 R 48 0 R ] /Count 6 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 24 0 obj <> endobj 25 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 36 0 obj <> endobj 37 0 obj <> endobj 41 0 obj <> endobj 42 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 34 0 obj <> endobj 22 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <>stream x]A EMuѰ.4FaQ .@1.$?0Rm 5H#NT?T'UHꍯb6m.^H NH֜Uf3g2 OxE E-(x }M'Q6JX.Dp\m endstream endobj 20 0 obj <> endobj 65 0 obj <> endobj 51 0 obj <> endobj 18 0 obj <> endobj 16 0 obj <> endobj 66 0 obj <> endobj 14 0 obj <> endobj 67 0 obj <> endobj 12 0 obj <> endobj 68 0 obj <> endobj 10 0 obj <> endobj 69 0 obj <> endobj 8 0 obj <> endobj 35 0 obj <> endobj 54 0 obj <>stream x%mHq `T`>#ul7797.9rTE)IoI}H U%'5OL(W2*HʢR hʯ2+7/ ApsxykE\ZQQ^JJ*Fڎ `aXZ8!g2߲fq)YWǷ.(`;\M >=WtzuvPFԈTF[]Q~I>ICJ-F^<܃1XnÃKSKK񻏢v צ| DXO9&XUiNc`@?I ~wښ?xRk{jҼf賬G0 } Ho5)E$1QzҴ%)7$BFmҥjG / R!ghIW^?[d}_jNr_7vTymМ cc 3ԩ3^BYI$ǽ:7C7tmLC &̑+рklHwș *-)zQɬt&MY+?QyxDA?u endstream endobj 23 0 obj <> endobj 55 0 obj <>stream xX TS=1CFwUmj-V[EL 2$_2aH" ZVVkz{ۻ﮳X +1Q7?o$Fc @Qc¸L@Qx`sԑ|A*03b%fG8oޒIBnB/bu(5)3NDMEx5U$ bxn\f\0#\Qj$anRb|(bM\fRD39$aj~baޛ|[l;98I|B~bRrʺ 1}âZl6ۀm6a3l3{"mX6{{[^Vc5XLeb$l*]2l$vh? s-+Bem1$.hcn]18cK>/=1 Yظw<0vLPUs| ҇V1Q>d[|VWv 5]_Ӵ#wNjla) Yr4TZbB%\x]^묳אv4z[}[ln.HH)I=thYKGO!I2[1hAQ ۱̀1 _JH)J/bP:~y9APXRHv!_Bt-$;JZ1icT3zB~읃n 0۬fJ^B{B2=났YK'S#РAEG\BA+ Y{ej<ŦM934O'(+a'&.C̦dK߹vWΔhqˎwbhН_QOU*]/DmH?4 ptdkT*p XV[]IMbh_GJHyώR# O=gn˹>=N@KʅNyn6Mv2tcϘhK=BE9h+Sl:;ܘk3~jZp:u[qK+8BK^t񆛮LBl ? ԃ0UK-.sHr#%݉i$3m v}p? vG} } @Ne6邥SrYIc^-+wIjEx*A̷<]oQ&bš_SYWz`7kPt'"=4,8}U颉PRr)()X8|R̥6z)d!+Ln"6Cq 9 ǿ;`Sy\6 K<@{34dۛ{PRd!͉5>N#RΣ/labq3 lPU:;JTRN^@!ZIyR#J4ǚt }h~3 NbF q-TTzMK"Ge|GQgs_Wk)jhZ`Tjfg˥V ɬw{Occ Q逦Z[T `$qllu^_)43 cx"H$j&˜N :;UBڤ82aq Ѱw׋^=V<CǣWj! qE(Zvjai)!c4FACKs P0qcob0= m{ZϴvZot wfpE1vi'5#Zgnʥ*6*b$Tww.pA9\gӘhu{{_ 4t"mL+es P_JԢ6lܶ6 .VB{]JX!vKhP㔃NnɊɼm] M,A *lvom}=Kiu t=F>z+5:Y4vN |h) )"Ҷ2 Iٍp|F~0yQQQ/\h'>H#CQ/竾МO>6:CGF{o*} |U~\doqu՗I3 swRj"r0 b37Vkr9*ls (AbV-5}yNP(Nq v]J h-S7;w/.[Eh)*C? 7SIzAGO&Kf49턫Yֲ\qz@CL4 kPg5€<^bphM\w~㷮y˳ P2XXYB k*Ӳa:{F[DC;[raP+eWMX!aKEZxd[$+P-- F(({^?pw4m !NMP"W+.K_)z9OܧF+N̾ímQ܃j5ja~$fFM9ށg 409g]j1ۍ.ӰIP !̼هv Cf2XMu?% i6:g=dH%jN\5 MM8`1yxQ0zAR PE*73m5,%:؝;3 ; q%77Imk0961#l?ZKN`©.QYH*ͺ,)w@%l4zAEF %f)Z@9&p zD!oSr:qvUl{b]UVgw ?0pWJgsbSC@QEt/3*yP~ɕS7ɽt>i a-ڀkdǥ|Ry, N= wAd>ƀ—'R 9!8aM (*ʷrYRNޯ:44s)Dhv5wjѺ:xAPYb>2F+> endobj 56 0 obj <>stream xMOAwU,( h`)@mP_D]B+vK)ҔR"xi||6*ՔL9sfiP+ uU aLʠJUC _B˄;|fr8uQ.N7u[jY͉$50[Ku,x<:9]ݔYaQQiCU9RCQ.1&'p2=b8fm'#,m`IfU!'$mM+Ao BCH.+Pਮ6 4[?y$nYuE/%˟^`lw"@SGt97ߟ+ͧT,[_ZC}45Yn5jddӅvP.V&6a >"֭$TnP ΰZ,%>*z/h:ޕc#-!1"#v~QXM\'E%lp,ܒy:YFni:k%ğg؊;Eu:qRf@0T~)aQK-#.HsPI3 dH<ȏj}S6D<b*& * G`y$1L66=(՗.j-c -J< ~ endstream endobj 19 0 obj <> endobj 57 0 obj <>stream xuKlW AgFDILȣ*!`(0IyHPh+'LCƓAAw"# (m!YL[!,x,* HYt!I+@cw(ukIpȚcP "xd!͆!cPHQZlOTH%K`qq:.kHB G(mQc>ٲeT*'jR)ӣf9)kn %K"qY/!%6&ݲ@qV1P--BBa4C1eرqaYǽv0d]Ca3(*.'NZ·qƀ?\m pOL4j| GZ:h`0^=905_zP|o҈yw &+Za~,i 8? 4 t2m;m6-/'t]8m3g`8`?c[J#S}Ӈw stemͶ]"U;: "=Ηלh;mªnv3̙ gZ际п endstream endobj 17 0 obj <> endobj 58 0 obj <>stream xy|Ƕet`u @n t=`B1j7ErF.rq@:LId $!r=Ky?'͜s;HDYYP"HeT(0Bx2G _:YhUma86,EAQR/0wv~ܹO>u\{OϮ;ü=v A|<âY}]6o p?n ǻ['n=SL1sߚ3fyoScj,ZKQʅ@m\&j 5L-ޣP˨Vj95ZA}HM>S ʉIfQٔ3>ChMQj D-SPC0jeCI(7j8RoP#([ʂ,5֐=#E,b,Zlkuzu%MkGpqoia% =} 9;͡aڼi9#yKrex6}ƌ7߸6bԈS#^.۞}iy%ڝɌԌ~ԪQ_5ڛ|4<ͻ?zH,T"`+|- ejb*PJNONN@L@ *UQޱ^2PtY j(Jɏ3Ñ1xΪ`mE]ybɗ0O6]:FJ&A1nt1QbxwXNK=u⠏9,-Wk^qr٦# 8ɗ!7Hƴv6?@nJ`pawξ~oӰ!Ry jgn-9A+BP5*kEpT4X_czu^ Y,mٽf&ON×zg6X ^OV+VðI`? 6މgηpWNv^`K0E_NC 󠌽x[̜iB'9<#&ĀO !yk[/yR^HwO6햠Ћ`yIgd _٥{fY.㱸+(~u }<2^@>(ړ YGpc5n? _o٫\JļK- vݖs:>0|}"Gδzp16?Ok;& "d K F=PL~TY=yHMqcrՏQb/=?Br 0SɪS-}:gʨU.]>|tqBǖ=ߢM|km ۇ#Kgg'J =#$4aYLiv`ևoB29utFt#b+q)MU$s:wIx~\)/)xįc7ܳww\JyjAb;¿+A҆RuK!u6@{z7'y3/e_ӊN hsѽnu 6n<311Uݥ~7#I*iXՕV]Av yAS-j]A> ׋rgu蕿7rl<`{aZQiI| ->=߼x,{w{`IU'-Ac,ȃ~ 稁Kݬ[Zwi>hLnsu~ǛTJ I'=ҍz?vx<#̺}hAa;7X1ʘQ`% Ʌ7FH XnygG9鶍]ilfVb;b[x2ߒH^exH],͋spCxf֋0h%ԦZ.6gg4,Q,J̐dW_Ң Q|&-_]n",;&tp^ol|̳%eB#;_'EO*:Z^ޜwWs}3iDvT EMH]ibNH͍+@D = )O/9Ԇ?YtRuMĭ {m%* 1" E2Sz;DݚRƖ#c; 5t0ܣmѰӠ%ySIA?:fS4Z*0p/[$C{`@_ZrQ )2 TGkBQ1}Ot:~2Utܺ< =va$kjk܎I3ВgBU]xePPxxPPex]]eegz3WUP%#C3kmɪMTU*Stl-+5Myܡ}"ԙ:x}W{ YXH+YٌN؝n=y2 =ؚDΣyC?:M(iTOŠӘ"LqFt`t/](yx{2^d.,",<:_aw^$^AqNOl_T2%t}X](sL6:eat}(ƓiA'sMhRl5iܥEaئ;4ӽmk>l]]7:7?6FJ!<}z #"_;uR7&ҫ\VuǙաf~1F՜ZlyWmn]eբ қ`{?oqHǦ7Pb_b:y`dC{8GI!8r_HEh8 8hzQH8 ^}v'NrU$_[T0$ %kޖLVU$s&_x5}K]E:-<"9 6ò(uzU(16`ŶyJ44nl$yˊ)OLNS$F^]V9TjҜvi0];fgd.B"R8\ԄdYSQSN3|/֞7YвԩظڣG+j +#xAݶu ?YۦuG7xG WNp׊ڄ!-)EeJ=K"Pln|~|=m*aV wsx|tqCtPp)[57!bއ yx'-/"A'-I "})O=/xFkr(Bȴ ) )$Qe `խuPinĂ=x*JDƅEI<Ž'uVW+6N6W2T+B0XTU~X?da ;-Ok̝]r{=i_jyO^EOm-1dY );9XTgj;a$g5zg4.BX_!kml1аz=ڎ1(1ڢ򒲸t5/-p_H1Pm srfg]4F} Փ,|jnjSy( bE$V5Zdv(CoQۇիt^r,O) /fnt}~+8I/v".Y_ba ]LmDKfoox8|n6bl K!f2 00¦'#F&JJL??NȍDvڒ4M2C\+(wv9X_%'EvKWtaq([?{JFQLhZ[u]# I^Z+~=[pFy0`NhwLQi5 B,D^[z9.Dt'PwC W>(gaw[<3bv3sۡ w6L xw&(֠2*J"E/D !o!dli-!L'gЙcv;o_oq.LVnR(d %aݜcfa`4|G[4A/Gv(5P'ǃl~E9[o1CP*R1QѺ [ .u6mfU}]/Z^\m'peew_oUƟ:8#nhme<bX,i<*5Yh/SZ&Sznsa0Fc.apQj e$uvRn"b22ae–/]n\KQ?pblB5Lպit|fp|4>(qTX0o4~@A[ endstream endobj 15 0 obj <> endobj 59 0 obj <>stream xywxWä́bb dd CB(^M\%IȲeldc)!B=!mBBBBΘ]8>|à ӵ #Hds?7q`5;ѿHmKRu7\)}H%9AQۼ}w?mڔQƍ8+3tkRppqu6(a}Ã;6""bk@ؘPwr33t㼠pe͍;'( X434aEg 47ya(np]$}i2^+Wڶw3ydBQ[Gnj7~Iߚ2uuf93Y aV20o07Pf 3Y g1#f63aF3f3>3njc3f!3YLb3%Rf L tc3=d&ɼ2AL/cș ϼc?3@ҍYL+teb?H{Jv]4l؇|>\aϭ=O:5{gneRMwYZޕ?Wo/~ëw鿵P6ುq fZFV3[)UAٯ}}ʶ- ̸,.4HfIۖiUjZqo>j{Z Vj u#=ٍj6OS~6d6] !XgaC(v9e's(hCnV<fѦEi.R?AOxR:%QNkX{A"T+._J q ]fJ} +a6lq Zɯ’A6圔M ۶ 4+lx"]x԰V{˞4n)Dx?)t>{*w]%z+ګX/w0q Ӯib)ɓ>-zV 1 殟6Da+M8.+ЗǾC"!}H|{=B.\|(F 'z:ޘ~'p|gL>U*d.RĞL\@WV~b=gv%(|фC dƩϗ?E,qd0. i8O_Zzxtj#Tqيcbߨ˿.Te>Yt==FI<9_\;5P|NG VZ[H_]E6Ѩl ddz8$̾}"K.d;iS[ _nj`g8%#Oڏ8[K~x_JKB%4.2jedBe7͗{a{J%bT Wj! ꢵgMp$uzz$ǞtźB \C^( ЬVC0kt[CFj?!hK+BȳĎe,Jx/;b.l,*!t6jQs*Ǒ\aX^Aν`j6 ;Wmu^|fj~@vdf? itwt3i;8?#g-ee?DWJc?:dkNtx >}k+pn+NfW&p -׻cƒMea!P]VUp8ç=&(XT𥳐-t=8so? =/E.¡V.CQs9mrk8r.NˢR;H!ଜGoklʏV6+RfMV8$A̎)"9fW 3Eʅ"+)7]g,aHoA 0 u#/o(å1& ^cXu[m$n#3~"*6 úzÝoTZS%3>!9iim"&'Ǯ:;̐hRHPY{0}~D_|ͷW QJd~*o.TdgR"!!.RA$m3hPd :7V}_ga?B.k-x}8ahA8TaEWR6;)],Ou&ڃ='(QĚ>8`qZc&Im$]]ZY14ŚJV\{_TLj2RQOsl \!fwB3P&/&O`ELs8hGcP+b&ÿ4Y IyP'CH\_FPAo{yɺ$ujZ2vFp\FumJ;g6O|ģ I"2&]c8p$ND'|EG`%6eX'}c`׋qCJ\xIbCUWZ7H t_ik(36eO5Lx2 `bv_aЦ-@yJ\uJJcpcgMP|O+wjMʚf྆PErBx;CTSҥM1Mݍe2AILOK.0$<4#9Upw+3o޻FOvE|l/p6 =ˣ\n?wtCf%,|)Zfm2\ߜw=Me+L^;wpjȺgL(֚N=f{4OOk Uh '8p2ə@ !(OYHZcm~tV=at]c_a_ܿ GRܐ[+8h?}'SwwNM'BR M\PG߲~M96{>}qO-~Jؙ: ]ц4-Lܫ!B+!scJs۸S! hBO=O{3OT,A /}+n&!EYPo5)M=>F"?hhNxgʮOp}pg_ݖN1VTO]N }diD*Ɛ5J=%Z͚fpI~VSq(8|{.- ƌ+grmUXDs*=Xx嚼Dj[{1_:ɂ6 mfE)߶-eq Lt7@WV jmM"ዚv~jه*WB:qLSBV*UJo'E]j}֞ުyԫlw=['ƶώTB)23H_^E\q_wo;#e/¤/ޟעjaqg?|{OU%hw'xM:]gښVs4T@}{hE&=UIx5H+-m$B(ib=ݞCǷe8Yrmm`8EwH(b-Yuh,"1 W3-}{m˵~rgS{tdػ6Q3ڥ\{QWeO(owbe$M N~Ԣs5}G3z&J|]yTqƘȄP&3_Ů|=r F/V$?$.%}Wgc/Sh9s a@3Iϓ,uoQpYlx~/=hwQE'{L@hJCNCE#pgܯY:ѶʸJ˩AWPR|1QQQscaFAjA! 7oqa <{UAJePQYP]%WkƠ0CȮFxGsCCn RO.)FCF~ѮM1ou|yeeɮ״Co Ex$rmv<64Z'*8$4 +'OlZMe[tW\Jfzf͛ (HwZmI4p08qm>IKÝ%7Wt$EW48d̳}t8R_?57g$,mt U+6бĈa#S'ŭ)['_]_;+_zT 9NK ljqT+܂2F%`Y( Vl˷R9lNu)ӷbϵ̡ Ss2_F$|aAv (it%L'x2( 7C`p9'2*i,1 ?XFO[wR-W^X?g>11=pzзg9lBML<[8y~Z |{ă-BdELfn+fD2Yﭟ6yGw]J35Xҿz> endobj 60 0 obj <>stream xV PgVqLLHb(. b/E AgFF9Fr рAax%H$qD$9؊&~wk5kj+Juuuw{(M|/@Kcܤ a `ýc̰#i4ן6 1j&Mu69FM?ԫ 4ϫ1[fO:E4h3a:Ր^Oқ(u1!Y׫e7#%%YoR`\Ȕ89Ŭo6{L6}ED-(ojxd &' heuwaઠFTI2=Yέgahɛq.2Wi>>>Ek#=Wnm8.e*d'ÄPצc W7Y9_.$pJ_p!y!JrW+IK*z箳ht,!^lc}A^1d <*NɖErPćagY\`dVkyN.mraZ Ԁ#t?/- H5ǐ=5]t ЬgSj74ɳDM~=Out,=Jb ;^.K7y Odo{Nڡ96ȵV&Hri&Rw07uzglMF]_S EYb`s]/MΒ[[mˡzģuN7epa{Nz .2'5JkTM3%m}[hB_ 'x\%0Id NmV:&/(\ʟHjP8宄 akQYywZ9,,9 bִ}-#)?$Vrak8zYd" ٣6@A,]îw8VτKǎ7 (2f=$r9+<&fMFG; բ I]?ALgQ8^lp4w d! p7wI6p1!DV5#fͬ/$q !`"#?lg߭O g!CŁW6%W{GZqwXTЊÕmzPJDnScR〽%d ÅO @#|p8F$_"Sf.죫#Sy$um`v?7Y V0Z!.=i}p>\pгE'᳌dX+ya9 STe{D&C՟ʄPlZWvg)>ֽ\ߑykuēԜ\Y<ӥY[f@G u_+alz"9xGk*n\gBNzg|;~ So?>_rgHfޑP1{Ne"-FDCEo.N-.ArP'rPWQ$ek(Ä~uCZ=<{ /PQn endstream endobj 11 0 obj <> endobj 61 0 obj <>stream x PW{nv5GԀGac`Ѐ*. '951ф$Ƥ6ꪩۼ5a4t)7Jyx:-vqYJH(v eMvIpHp,fE ΁ѱiؚ "dND"i(5X-r+yC'I$!" gĒilc|`P(Q;w/tvq]tJBAl%>/1Iz5bJl&^r›p#)b1?!<) 0m ζ`H/h#C*juӮbfNMz~Qҁm ;CD? [P/;">/?-#R?ib=Bl&`3#&k5=PZU\ z* 7{.]*\nyk@ |E҈S~< MMcp$CO'iWO5q8TҸ"^ъwX"b~#^AWNm!WBaD/~yKy*wH,j~p47-9%Nc P\p6x҆ke:\ShJ[?Yu81:Mg25,/JbԈ/3EzM/4@\1AHwUIЁ}ZnbxGQR; hhqLTMT@a| %\xDV޴2eM!,$TtM{[cQ* x6ڜJ=-Me_VO"aXcL|r@5VxQ&'r*+s*gZͮ<ͱ93N~1%p7CvKי p_8H-蘅fA>>[|1Y hXN +b9FrwV֓J 5Cn!0?CY|L ~o[&dgYxVgO*+9R !42\׶?W ObcJY7ADE`W]k՟I/ad5#Ṹ،`6w#5w GYp:q Er- Vl-5̣Wy]yա'EnA>i`PK4%:s)K'P ߥb0aBTpnu+! B*^G?:5br;vvs`b>E Ⱦ(jeR7(gBN[WKorHp1F1K|v:J4`|OƂ%?;/+*e@ΫGd.D{sr"(́΂9.a L";ӧ +TYB-M1%6tca}v/?ăGg/'̜ex[>5,@vz8c> a_wu"*, Ѥ giR3Hw6 _zc¦kIM)Y5vjݎn~^%'0[GՅo9&XaEs刿sk39pQsTWRL0b:5m._9'#^|tQԇVrR 7B1pF]!UV 2*wĻY}v h@35:bUk9I`Α@:ʡrr9P`#?nPHM*kF_qbh]e-px"EMNle*/;e,sU;,d{M p`|Y(W$.* sG9l6ƺ r{dԒAQ(Bj+JVVZe!(@'ZM 3|2ӷqɃ^Wjq: _qs& ϿVVO4JUV2w{Nu{e{^:$oȱca;i#hS20[1ҹ*՚[M12NG'cu쳦φ̼!)!є֞h#*}[tf)7^1cp=x?GOΟyq\wiO>^^+ԭZB#*](ǵ~"ް0a$0_v k.d=*RKHID&{;S}~2Aki endstream endobj 9 0 obj <> endobj 62 0 obj <>stream x}Ukpݵl"0lk6$Ѹ%NIp4i*k,?dm)eY~ ;mQ7!3- - w=]K̐I3wfgw~9g%$IiN o +Hae 3% R$8-A%/$$$Yilꬆ[\efg~FF6I2*\¤Vi&ۥULVnɤ{9=:M1i %?^ZB\ipB ZoͷY0}=AҍeԍrRL˗Sg2K~rj8%A h|M=nkjl:K;vdU/ f(Yݲ~p4r:xWd]ޞ_wR?5jS~C>t=WdmapW(5F俢 J:a50PUj_>),}qu{]QK"Lv ax?tax TAT;ERԐ_zh{k-N8E[ C' SFA0N49^3@<"R]5pzDYDda!TIP7eޜ 8118D7x5ou2;FkcC[˦R_DTs9zJx-A^wB;زl:S eourQzx}7R?I_ ,C %!`qqT< 21fzCw,gb{@/ܭ`o6jA(.R1,ah lte!Kѥ%haP1{w^xP#(+ #sDoQA#\;oz)ϰL4S&y=rnJ҅G̠dXM`_(;;_Mނqv) dh 7cMv׶]kE 5ަW~3v a5kkʈ~囬HŌ4<.Q/;\psSk\S":(jZ³xfk`H\ǯYgVk{ ac{@Wc. [o@ Iv( l!"/^Mf%Z)ORR)"þ endstream endobj 70 0 obj <>stream 2014-09-26T17:54:08+02:00 2014-09-26T17:54:08+02:00 dvips(k) 5.98 Copyright 2009 Radical Eye Software sc.dvi endstream endobj 2 0 obj <>endobj xref 0 71 0000000000 65535 f 0000031423 00000 n 0000070048 00000 n 0000031329 00000 n 0000030359 00000 n 0000000015 00000 n 0000004734 00000 n 0000031488 00000 n 0000036247 00000 n 0000066539 00000 n 0000035748 00000 n 0000063235 00000 n 0000035261 00000 n 0000060411 00000 n 0000034611 00000 n 0000052294 00000 n 0000034032 00000 n 0000044630 00000 n 0000033722 00000 n 0000043437 00000 n 0000033107 00000 n 0000042317 00000 n 0000032313 00000 n 0000037472 00000 n 0000031529 00000 n 0000031559 00000 n 0000030519 00000 n 0000004754 00000 n 0000008017 00000 n 0000031666 00000 n 0000031696 00000 n 0000030681 00000 n 0000008038 00000 n 0000014546 00000 n 0000032152 00000 n 0000036536 00000 n 0000031761 00000 n 0000031791 00000 n 0000030843 00000 n 0000014567 00000 n 0000020957 00000 n 0000031867 00000 n 0000031897 00000 n 0000031005 00000 n 0000020978 00000 n 0000024760 00000 n 0000031962 00000 n 0000031992 00000 n 0000031167 00000 n 0000024781 00000 n 0000030338 00000 n 0000033657 00000 n 0000032068 00000 n 0000032098 00000 n 0000036767 00000 n 0000037801 00000 n 0000042602 00000 n 0000043706 00000 n 0000045236 00000 n 0000052777 00000 n 0000060694 00000 n 0000063541 00000 n 0000066792 00000 n 0000032760 00000 n 0000032857 00000 n 0000033490 00000 n 0000034519 00000 n 0000035136 00000 n 0000035664 00000 n 0000036163 00000 n 0000068598 00000 n trailer << /Size 71 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 70248 %%EOF aplpack/inst/doc/slider-make.pdf0000644000176200001440000040446513517522464016325 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4371 /Filter /FlateDecode /N 74 /First 611 >> stream x[r8}߯Lm͊ܚJ%g;[__6k3j\?6V-wt~#S:jt{UOiڛ}7X;r,i~1&h+|7YHf^_&- _֍/ϛ-M#-w׊wܹ_N *n{0eٶ6~o狓1p(NDz69Êu(cСx!*/CBkXmq uZbe֦Xܡ)shm%ZbU֦Pmk$#abҸi]xTɢgzAOS{gP_z 5Nngtj~Ij^/%) ZZ1C_'z^Z{pĭj,'Л8&$S܌&g 0;cS1~N A% ߯6oF:B :b! :іd&o 2d1H@*!QB*"tb0I`4b,A댦r=ԻЄ1hJU&šs?9p0Yȝ9duơRXD=d (dWMx շZ }(tBf$? @fDMx'դNj VD#(sOPv.G41DltdzDzl%dȌl/=cd7 bGvN S֙63m\gڸN,S2!tVp|+N1Vgɲ6]d>LZ3Tg*J|R1&Wghu|f:E۽redھF۫c+Zc<jt" x䣺IJIz7tTN8 矻~B;bQp픡3mܡ&t5_To ,^Z&~p 'pNȑp2/ p '/(BUr!$"4tד%ŗJHx4~,>~KG?]/̯e3^.Vs\4|z~f{|/Tُm'уG u?+*j;Lăҭ!&NNߠdʇη/M ub5|<4dukKq^el]4`ۻАqUh*Îb';!cXvB@;!z KNDKNDKNDKbAVY5d՘:UcLV3d՘:UcLV3Y5Dݘ: Թ9C<{U;oé=ߡai/P^Ć mPPn;FB$Ms{7b aeʫ)[pb*k췌 [~Nՙ-ee `Bv췐]ej®0,j>v>E}2{2en3_Qv/Pv_B+(soPvߢ̋㰘Ŵ3-ߨO(i ʬL(hx2 DZ DZ DZ3-*Ep4b((ʹ J1J(!SY(!:q1JDǵI\I(!dh&)1m&)1m&)1 fʮ#G2en}~)[i(@m& .^g"c1 Mu%_VsOs b0Ĝ#ssb~@99G1?,Ŝ#ssMw'4f9GssYQǜ#9G|1N]T9G|1/)@cr&9,hr&9sl7gbΑ6oW s'ZLɷ32vF&ծS|;s4@SWW{;a{YoFO*u)5oY) ln=!54,FŠ1bT @Q)nT B&KS&K,D #61en) 3Wxnsxn/#;XΨv7ȸ pmǸ !F HYrY&Ld 0M(sK{L4A΁0u1vsSڜ)ramہctC]9D%+owޒ^ nlHAKm&[şƿ㝼0(@q 0Pq>v>hlеsCv'6%CCx~hsn|PM%%\J<ZJM-;D+/J08ݦEqK8)H>A?c~`zE駱M~@¯95vCoL+koVtPzfp4E}L7]@)Vm+* Hˀ=knaggyWUinxXSw&-LL0ҧs>s258dh/+62Km8s-pv 7=kK%Jendstream endobj 76 0 obj << /Filter /FlateDecode /Length 2756 >> stream xZKok0a.f?H6,]d'ZjYHu~Wl/ 3棺ꫯjyyׇbqˌa<$;t~7WdN2|\?Wu \jg6/-, NKBndM҄2+Q(KB2GHRJ[pqz4!b#?4ʐMzkV*Hb>P<4DaO$|R~ذuHpCKobuti Ece*"l{0a_ Hw8>EKPOER]"uwv u3t#ËFFW PT5ɟG `@1@cBî5dZ\F5BهάjWbg̋vۃU9ƴbRzb V-͢+KAXEL# V+31L ~yF|Bй0Eݳ]`c,0+2tiS 6A148; |kh3W YEXc7r$Wz@$7R2#? @%m`@ jpYdebI_NyG*I=nM2LLx6(QWO0,X  !r,6X#uy61I jEmr.E:5bfڂ%k2bBqͣx)PKx_|!;;pD!ZN*Kp a#˭% ҫjfS*CU;D @W_ z78~Л!jH2icyUkLŸD퟿m Cԇdk?coUz] md"d˿pfܷ&x7^zd>]XjbjOrB8aAHE[<}[Ɗ54g>hIJnF]X_yl~qh;I1N6Q#Mq4Uǹ@ >qNۦO\o'O2ZGebZ'鴵> |ZIw^<~6BğW6QPB$H\;D C?aDW#G`܌k-r0rW3ɫC0MQ1>H#HL'y:|Y~ީ\VK,ğ]Ȥ+w1. F| r,>WSx\c"|LOS rNsX7Wa8X M32b!+ t "'Q(*"8orEP!?,<| xrB 6v 5 ;" G#UPeNeu\)]F`1-%[*̇p\w9O&S!f0 aC/.gmjDE+x ޻8:sohʍ=SKnͧGҗQn^/ 9Xu,uE#yQT E ̯E-"77īAAv?:Ȱ}沫SJ.3bH(bNo߮m~Vn2T}w`>Yѳ-t|>HjNYHeivUSfE]jVӫyp;v"sEtFFe"5* z"rըPwTw&ӿxACFѡuA3d6! RKYn<7v'2 Enl7?ץ=~DnGݤ99:ckow[f endstream endobj 77 0 obj << /Filter /FlateDecode /Length 256 >> stream x340T0P0bK3C 'Ő  . a2 ,\%X*$r9yr{*rr{r;8+)hC.X.}7}gg7 7F[A(㜟SW cg颠`E!`߯u}/A̸/GW}jQaa$8#B W tendstream endobj 78 0 obj << /Filter /FlateDecode /Length 227 >> stream xP0PcCK CB.7H9\q0m2 ̍\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O?JW.{~z >p@?(m&.WO@@.7kendstream endobj 79 0 obj << /Filter /FlateDecode /Length 310 >> stream x340S0P0W5RP040PH1* )HT Jpep+q*Xu% r@"9ɓKW4K?KK)Ys62wwvvrllt29y@=vv\. j nxz#`"P֩uMrK|M_q_ǭ_+~K/׿_\Uh?-_w[ogzclK$> stream x37U0P0W5R03W040PH1* rADr̐@ p+,8D)Ť%t߾ymݿm][,2\aд$cDck3WB W sendstream endobj 81 0 obj << /Filter /FlateDecode /Length 205 >> stream x4W0P0bKCK CB.7H9\q0m2 ,̀\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O-\0AF_ѵ r;`aprT NKbendstream endobj 82 0 obj << /Filter /FlateDecode /Length 269 >> stream x33W0P0W5T03U03QH1*sP "9\\ y\ @ }z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-p\`r¶d\s*ߗKM#]U$"u℄ Y<[[M_O-ZW[ܲM*lGbgak DX\=0^endstream endobj 83 0 obj << /Filter /FlateDecode /Length 242 >> stream x33P0P0U5T05U03QH1*s9\(ÕU` j`f`gɹ\N\ %E\@E\@5\N \.ц\\nn@n7P7s~Nin^1Pڂs$L98|hRGER^/_ }\߃wˣg۝t۴[Ѽ:fB8;"Nl`drT 7Sendstream endobj 84 0 obj << /Filter /FlateDecode /Length 266 >> stream x37U0P0U5T07P040PH1* )HT Jpep+q*t$ L r@"9ɓKW4K?KK)YHDrr;;66@\9y@=vv\. j 娴] BOcU%nM*o濔޳Wm˯_Ct> stream x33P0P0U5T05U03QH1*s9\(ÕU` j`f`gɹ\N\ %E\@E\@5\N \.ц\\nn@n7P7s~Nin^1Pڂ;J5 88Mnr^{k _/㳘4ѥn^mwfmӤ9sL6lq:Š5R+endstream endobj 86 0 obj << /Filter /FlateDecode /Length 202 >> stream x31T0P0bSCCCB.?Hr2` W*T01r rz z@`aɥPRTʥT˥Rʥ\ b݀}o]s~Nin^1Pii /}{\Q= {t \Py`?&.WO@@.J\Eendstream endobj 87 0 obj << /Filter /FlateDecode /Length 307 >> stream x33W0P0Q56P03CB.@.X$ As2  @DD$$s<=}JJSÁ= ] b݀}o]s~Nin^1PڂS'r(|p8TCF]i$qu|&׿4lK݊̏,za0mtǎ6f%~A~7>I[K/ϳ۔ջct;e&nIb> stream x36W0P0bcKSCB.7H9\q0m2 @Rz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]Isan@2Y͛UpS!+ HtNendstream endobj 89 0 obj << /Filter /FlateDecode /Length 175 >> stream x36W0P0bcCCCB.?Hr2` W*T02r rz z@`aɥPRTʥT˥Rʥ`ȥme˥{+esJsz<]&Sre8pS!+ X=endstream endobj 90 0 obj << /Filter /FlateDecode /Length 211 >> stream x37U0P0bs3cCB.7H9\q0m2 @@)=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. j fy1&eYq i2x|\HA@.WO@@.Xendstream endobj 91 0 obj << /Filter /FlateDecode /Length 242 >> stream x33W0P0U5T0"CB.0?Hr `(ÕU`jj`f`ɹ\N\ %E\@E\@5\N \.ц\\nn@n7P7s~Nin^1PڂsD2_C@>ٗ=ܛ/W`r;Unvw.:̣G \=NW`endstream endobj 92 0 obj << /Filter /FlateDecode /Length 203 >> stream x35R0P0b 3cCB.7H9\q0m2 L\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Og$lb3hxdRvw/ǭe_GT$01(pz*rrAKJ endstream endobj 93 0 obj << /Filter /FlateDecode /Length 259 >> stream x35V0P0Q5T0P03QH1*sP "9\\ y\ &&@ f &z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-iQ8ex_v}}\) e@?a{=mg-1ooί}[6}lUfE͍\\S01(pz*rr$W,endstream endobj 94 0 obj << /Filter /FlateDecode /Length 208 >> stream x35R0P0R5T01QPH1*sP "9\\ y\ &   Fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-8ؐ[z`L3G⡌[un٥]DX\=*KW1endstream endobj 95 0 obj << /Filter /FlateDecode /Length 217 >> stream x37U0P0Q5T07P03VH1*sP "9\\ y\ ff@@9=CHrU()*M*w pV0w62wwvvrllsJsZ<]<;q?u% u^7}ojpiý,;yv>kb`hrT  _uendstream endobj 96 0 obj << /Filter /FlateDecode /Length 155 >> stream x]0C|AS.ea!KO O:ٖ_3\{ @&&,aM 1yQ크ljWm8~,hiw b0=y:UZk[_TbkJ\*Fy hzMendstream endobj 97 0 obj << /Filter /FlateDecode /Length 175 >> stream x32W0PP5T!CB.@.pAd4H<++\!P@RB$$s<=}JJSÁ=hC.X.}7}gg7 7FK9?47ΎEAmv{f1UזlٲS!+ ?22endstream endobj 98 0 obj << /Filter /FlateDecode /Length 119 >> stream xmK; @swԴ~-ZYUPAya3☖BR?U4+nxˆ VD %C={_N705%C?l|0)endstream endobj 99 0 obj << /Filter /FlateDecode /Length 120 >> stream x32W0PbC CCB.7 2D *+\!$@BPAH$r9yr{*re=S!K!A,C}C}b1pz*rrq$endstream endobj 100 0 obj << /Filter /FlateDecode /Length 177 >> stream x3T0P0U52U01V07UH1*iHDLs2 -  f$dr.'BIQi*~8PHS!K!A,`cﭠ q)+걳tQP[a @9]cX\=IUendstream endobj 101 0 obj << /Filter /FlateDecode /Length 223 >> stream x3T0P0Q5R01Q03SH1*s9\&(ÕU`bf &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]육}AsgKM]k_?ﺯ_YVmnEn8$#$Qendstream endobj 102 0 obj << /Filter /FlateDecode /Length 177 >> stream x3T0Pb33CB.7H9\q0m2 @@) =C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. j  >z`)q/uGendstream endobj 103 0 obj << /Filter /FlateDecode /Length 234 >> stream x3T0P0bc33CB.7H9\q0m2 -\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O;*IT4_0RKG?M=s >~k{333K.]`ˮK@/ӽLw[S!+ g%Qendstream endobj 104 0 obj << /Filter /FlateDecode /Length 247 >> stream x3T0P0Q5R01Q03SH1*s9\&(ÕU`bf &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]육al)sڗW߾kۿ:/ۥKgIx)kM}Ro ϒivD$&t`aprT W7endstream endobj 105 0 obj << /Filter /FlateDecode /Length 175 >> stream x32W0PbC cCB.7 2D@*+\!P@Rz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]6(ӟG?>dX3kD.WO@@.#21endstream endobj 106 0 obj << /Filter /FlateDecode /Length 227 >> stream x37Q0Pa3 J1*qs$@*+\!P DPA@,Ls<=}JJSÁJ=* ] b݀}o]s~Nin^1P*C4O2α1~ۿ__/_VM_P1KIDd c#B W Wendstream endobj 107 0 obj << /Filter /FlateDecode /Length 211 >> stream x33Q0PaSK3 CB.7H9\q0m2 LM\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OOYF ~Ź}lc ?}h1!q&.WO@@.TYendstream endobj 108 0 obj << /Filter /FlateDecode /Length 247 >> stream x37R0P0Q5R07T0PH1*sP "9\\ y\ f@ @z ) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]x9XJ: ܴϿ_җ9YbҸ?$;￿U]x$_ݲHk¡.WO@@.]_endstream endobj 109 0 obj << /Filter /FlateDecode /Length 238 >> stream x3T0P0Q5T01W01UH1*sP "9\\ y\ &@@f &z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-hk!'x|K~m'2.+6Pj?d,""eU֓}wsaEṆOendstream endobj 110 0 obj << /Filter /FlateDecode /Length 226 >> stream x35Q0P0V5T05P0TH1*sP "9\\ y\ &@ @z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-Mij? q@5_k/CԼ_ޯ>*ٵEw]<M/;"Y\=Wendstream endobj 111 0 obj << /Filter /FlateDecode /Length 217 >> stream x31V0P0V5T0T01UH1*sP "9\\ y\ f@ &f z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-88#B½MN!%W++gK.ݶ{imI01(pz*rr-Cendstream endobj 112 0 obj << /Filter /FlateDecode /Length 231 >> stream x35Q0P0V5T05P0TH1*sP "9\\ y\ &@ @z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-VS$UD*sɦ{|K/? =ֻe[]cpi.sEbS!w3#B W Xendstream endobj 113 0 obj << /Filter /FlateDecode /Length 215 >> stream x31V0P0V5T0T01UH1*sP "9\\ y\ f@ &f z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-l6p'Pae|K/~Yo~3\_v[v7o6 Ib \ \\0Dendstream endobj 114 0 obj << /Filter /FlateDecode /Length 194 >> stream x36P0P0bcSsCB.7H9\q0 2 @:RFz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<].R|ɟSݳ[HO?p.T:?`bPrT OKendstream endobj 115 0 obj << /Filter /FlateDecode /Length 200 >> stream x35Q0P0bS3KCB.7H9\q0m2 L@@)c=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. jx?9nPn_Ll2  \ \\Uendstream endobj 116 0 obj << /Filter /FlateDecode /Length 181 >> stream x3P0P0b#3sCB.7H9\q0m2  \%X*$r9yr{*rr{Ur;8+9.ц\\nn@n.P9?47ΎEAm@)SVh\.WO@@.xAendstream endobj 117 0 obj << /Filter /FlateDecode /Length 223 >> stream x35T0P0b 3KCB.7H9\q0m2 LL\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Ov?M~ ^O'~ޗ/؏/߿翿ߗԃ4`aprT =TWendstream endobj 118 0 obj << /Filter /FlateDecode /Length 167 >> stream x3P0P0b#3KCB.7H9\q0m2  \%X*$r9yr{*rr{Ur;8+9.ц\\nn@n.P9?47ΎEAmYk_~`drT  Fendstream endobj 119 0 obj << /Filter /FlateDecode /Length 216 >> stream x0R0P0bs CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Ovgg6=fVCNS+-K^ڽ zرxlz01(pz*rrX!endstream endobj 120 0 obj << /Filter /FlateDecode /Length 195 >> stream x35Q0P0bSCB.7H9\q0m2 L@@)c=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. jg4>V"7wS~rᕓĠJendstream endobj 121 0 obj << /Filter /FlateDecode /Length 219 >> stream x3T0P0V5T01CB.0?Hr `(ÕU`bj`b`gɹ\N\ %E\@E\@5\N \.ц\\nn@n7P7s~Nin^1Pڂ3 Y9>pHT4_rork_~]OOw_o]u۴[љ[6E$9v`aprT Iendstream endobj 122 0 obj << /Filter /FlateDecode /Length 228 >> stream x35Q0P0V5T05P01QH1*iHDLs2 Ĺ ̌ Ar@29ɓKW4K?KK)YK%ڐ KM jw)+jtQP[l9D+kr7?|w}B` $Y8}HSQp#B W :V$endstream endobj 123 0 obj << /Filter /FlateDecode /Length 187 >> stream x3P0P0aSCB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O%5g/n"r~map`rT D?:endstream endobj 124 0 obj << /Filter /FlateDecode /Length 222 >> stream x3P0P0V5T06Q01UH1*sP "9\\ y\ Ɔ@ &f z@) ɥPRTʥTĥTåDrr;;66@\9y@-vv\. j yYYx ^o~8 l7+>qOPcca{nW{'jX!pD!endstream endobj 125 0 obj << /Filter /FlateDecode /Length 203 >> stream x%;aeQ( b2J!*$3ī [PY4(t$qsK)2)A1E:C:I-~ÿ:QiAMҚq% +4NeـE \+ p-$fl .P 7lñ886Xw罛>?rs=~Y76"m Dendstream endobj 126 0 obj << /Filter /FlateDecode /Length 236 >> stream x37P0P0R5T03W01VH1*sP "9\\ y\ f && Fz@) ɥPRTʥTĥTå`ȥme˥{us;qy((W[M mbww݋]~fߵK_mߊ߭[/_{K Vendstream endobj 127 0 obj << /Filter /FlateDecode /Length 155 >> stream x]0C|AS.ea!KO O:ٖ_3\{ @&&,aM 1yQ크ljWm8~,hiw b0=y:UZk[_TbkJ\*Fy hzMendstream endobj 128 0 obj << /Filter /FlateDecode /Length 220 >> stream x37V0Pa3K CB.7H9\q0m2 ̀\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Oלy$>q$7T;$P'/_]w}cG?Y30rz*rr]bZendstream endobj 129 0 obj << /Filter /FlateDecode /Length 183 >> stream x33S0P04f  )\\`~.pAd W*T0qJ t ,T!9ɓKW4K?KK)YK%ڐ KM V8qy(-c'D3^qχYS,?02pz*rrLendstream endobj 130 0 obj << /Filter /FlateDecode /Length 252 >> stream x33S0PaSKs CB.7H9\q0m2 L\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Os&>1geoSB*ν߾ȿ{?Mݛ7ҥKM6=133CWWIh]Uqӯ/});zli.WO@@. Qendstream endobj 131 0 obj << /Filter /FlateDecode /Length 268 >> stream x33S0P0U5T03P0PH1*sP "9\\ y\ @@9KS=CHrU()*M*w pV0w62wwvvrllsJsZ<]nhVobokKMYt 8t,%l* ݻ_]v~rꥯ E{otDDbffn \ \\D[Lendstream endobj 132 0 obj << /Filter /FlateDecode /Length 232 >> stream xT0P0bK CB.7 D@*+\!P@R&z z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]n07_P߯~_o$y9r _~ݷ6_WG;yap`rT Udendstream endobj 133 0 obj << /Filter /FlateDecode /Length 201 >> stream x4T0P0b S CCB.7 @@*+\!P@Rz z@TɥPRTʥTʥTɥ\ b݀}o]s~Nin^1PڎHX5T0>!t6k?|HNȞe;ɣU B W }[2endstream endobj 134 0 obj << /Filter /FlateDecode /Length 248 >> stream x37V0P0Q5T0T0VH1*sP "9\\ y\ f@ & &z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-XӶk; s MYu/p8d zo_3kn]w?VEsqO @1eendstream endobj 135 0 obj << /Filter /FlateDecode /Length 228 >> stream x33P0P0Q5T05CB.0?Hr `(ÕU`jlj`gɹ\N\ %E\@E\@5\N @K!A,`c ͥSW bg颠pe)rMl_|_M7˺_g?9?*ۦ݊QmN8c͛tBCAS!+ dIendstream endobj 136 0 obj << /Filter /FlateDecode /Length 203 >> stream x31P0P0aK CB.7H9\q0m2 LL@:R&z z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]Ni|Ÿ‘U/f]oG&suUl|TdS!+ pRendstream endobj 137 0 obj << /Filter /FlateDecode /Length 207 >> stream x37V0P0bs cCB.7H9\q0m2 @@)=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. j C?eMŏ-_roLidAS!+ j\Gendstream endobj 138 0 obj << /Filter /FlateDecode /Length 188 >> stream x36S0P0bc# CB.7H9\q0m2 ,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O-rX# L\ \\cJ\endstream endobj 139 0 obj << /Filter /FlateDecode /Length 228 >> stream x344P0P0bC3SCB.?H9\P Hgp+qu*u(*XBr.'BIQi*~8H-P)Sme˥{+esJsAz<]rfy8Oل= 9[>;5z5ܓUo_]]_?8!pB L \ \\teMendstream endobj 140 0 obj << /Filter /FlateDecode /Length 202 >> stream x37V0P0bsSCB.7H9\q0m2 @@)=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. j 92.Hh|")׫)oK_[lQ8\=8Oendstream endobj 141 0 obj << /Filter /FlateDecode /Length 233 >> stream x33S0P0Q5T03T05UH1*sP "9\\ y\ @ f &z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-X@C FCG2?|Ͻj_f7~ ?Wumn$6l8c!a.WO@@.^Oendstream endobj 142 0 obj << /Filter /FlateDecode /Length 241 >> stream x37V0P0V52V0P05QH1*iHDLs2 L  Ar@29ɓKW4K?KK)YK%ڐ KM V8qy(-bvp["{GOd>̹o_u[l[K{o> stream x35V0PaKSCB.7H9\q0m2 L̀\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O$4Q_K~ ($ap`rT F#endstream endobj 144 0 obj << /Filter /FlateDecode /Length 242 >> stream x35R0P0Q5T01W05UH1*sP "9\\ y\ &@ f &z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-x&#(Q#Xо`/y_uaD)mG> V=<o\;0埢‹.WO@@..jNendstream endobj 145 0 obj << /Filter /FlateDecode /Length 203 >> stream x35T0P0R5T01V07SH1*sP "9\\ y\ &  Fz@) ɥPRTʥTĥTåDrr;;66@\9y@-vv\. j 8-'(rϬgOswnv(ZmáKX\=Rendstream endobj 146 0 obj << /Filter /FlateDecode /Length 203 >> stream x3T0P0V5T03U05VH1*sP "9\\ y\ fF@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(h28Y:u_z޲oz=XhoHw|!F.WO@@.Jendstream endobj 147 0 obj << /Filter /FlateDecode /Length 234 >> stream x3T0P0b33ScCB.7H9\q0m2 L\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O52;ZDnٷmܲK_ݲҍm}/_߻Oeگ|Ͻa_f__}Vk>v04ppz*rrmOlendstream endobj 148 0 obj << /Filter /FlateDecode /Length 158 >> stream x33T0P02 )\\`~.pAd W*!223T5ɹ\N\ %E\@i.}0`ȥme˥{+esJs󊁊<]> stream x33T0P0W5T03P05VH1*sP "9\\ y\ A 45Q03J\.'O.}O_T.p".}.}gC.}hC.X.}7}gg7 7FK9?47ΎEAmJ;}߾\G#y|PozX5 /;Vz#D7՜o8Nav`hrT tQendstream endobj 150 0 obj << /Filter /FlateDecode /Length 220 >> stream x33T0PT5T05Q05VH1*sP "9\\ y\ &@ }z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-\ḆCے//MmoVw?ظkc0&tc֭mbF 8\=Eendstream endobj 151 0 obj << /Filter /FlateDecode /Length 239 >> stream x33T0P0U5T05W07VH1*sP "9\\ y\ F@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-QM`ϱBN/_p2__5H'Wwm[oڨw={a6ሄ6&.WO@@.kYDendstream endobj 152 0 obj << /Filter /FlateDecode /Length 228 >> stream x33T0P0W5T05Q05VH1*sP "9\\ y\ &@ }z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-3ɴ?-!}q/羽j[?~'_I9&c9s$T7FGdgDv4p04pz*rrEendstream endobj 153 0 obj << /Filter /FlateDecode /Length 199 >> stream x33T0P0bSCsCB.7H9\q0m2 Ĺ\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OW2$&ڨ/EXWM< *k .WO@@.Kendstream endobj 154 0 obj << /Filter /FlateDecode /Length 188 >> stream x33T0P04 & )\\`~.pAd W*T0qJ t ,T!9ɓKW4K?KK)Yq62wwvvrllt29y@-vv\. j 7m۶? ->eMJendstream endobj 155 0 obj << /Filter /FlateDecode /Length 174 >> stream x33T0PbScscCB.7H9\q0m2 LL\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OR?e~bWbϬ[\=Iendstream endobj 156 0 obj << /Filter /FlateDecode /Length 200 >> stream x33T0P0bSsS#CB.7H9\q0m2 LM\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OS2$fpDsؖ> stream x33T0P0W5T05CB.0?Hr `(ÕU`bj`j`gɹ\N\ %E\@E\@5\N \.ц\\nn@n7P7s~Nin^1P9g2d|ߥ1CK%h/? oM];[ݲ2 ]ni<OMendstream endobj 158 0 obj << /Filter /FlateDecode /Length 196 >> stream x33T0P0a3S#CB.7H9\q0m2 LA @Rz z@`aɥPRTʥTʥTɥDrr;;66 @ܼb;;.O&7q>-yj ;|KlK_?LQʚ4Q@endstream endobj 159 0 obj << /Filter /FlateDecode /Length 245 >> stream x33T0PP5T05CB.0?Hr `(ÕU`b j`j`gɹ\N\ %E\@E\@5\N \.ц\\nn@n7P7s~Nin^1P&e:dؖ^ww+,'P7O?MHPm:qө G *>'!Yߧ^{w~߯.mmjfYmbk(ȬF ,\ \\JLendstream endobj 160 0 obj << /Filter /FlateDecode /Length 199 >> stream x33T0P0V5T05T03SH1*sP "9\\ y\ &@ f z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-8A_YC6IG/qn}vѶ]7"2`aprT N~endstream endobj 161 0 obj << /Filter /FlateDecode /Length 195 >> stream x33T0P0V5T05W05TH1*sP "uAtWBW P!P H$r9yr{*rq{p;8+rDrr;;66@\9y@-vv\. j+^HXg' c__85]Qp B W Mendstream endobj 162 0 obj << /Filter /FlateDecode /Length 155 >> stream x]0C|AS.ea!KO O:ٖ_3\{ @&&,aM 1yQ크ljWm8~,hiw b0=y:UZk[_TbkJ\*Fy hzMendstream endobj 163 0 obj << /Filter /FlateDecode /Length 211 >> stream x3P0P0bS#SKCB.7H9\q0m2 LA @Rz z@`aɥPRTʥTʥTɥDrr;;66 @ܼb;;.O .h>nbQ>&C(!*_/y(}ryffX˧|`aprT 5Wendstream endobj 164 0 obj << /Filter /FlateDecode /Length 206 >> stream x31S0P0bcSKCB.7H9\q0m2 L\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O .q(joPX2o{ OY=|<CB W Rendstream endobj 165 0 obj << /Filter /FlateDecode /Length 174 >> stream x32V0P0W06V04W0PH1*s9\(ÕU`hF z Fz ɹ\N\ %E\@E\@5\N \.ц\\nn@n.P9?47ΎEAmc;žOYT븭.]zŠ0endstream endobj 166 0 obj << /Filter /FlateDecode /Length 171 >> stream x32V0P0W54S04WTH1*s@9\p $ÕU`hF z 9 ɥPRTʥTťTĥ`ȥme˥{s;qy(ml)kÙ^}ҥK\= 1endstream endobj 167 0 obj << /Filter /FlateDecode /Length 119 >> stream xM P> stream x51 @D3X@d[5-TPAIjs+acx0ꙁbƶFc%5'v%0K14#o|-fn|(X2q~Y]pP endstream endobj 169 0 obj << /Filter /FlateDecode /Length 217 >> stream x31R0P0V5R0P05UH1*sP "9\\ y\ Ʀ@ z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]> stream x31R0P0bcSSSCB.7H9\q0m2 ,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O͌Yg4 \>S!+ ??endstream endobj 171 0 obj << /Filter /FlateDecode /Length 220 >> stream x31R0P0bcsSSCB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Og*4>d_!o|oUH)k:븭شi&DMVemL \ \\Cendstream endobj 172 0 obj << /Filter /FlateDecode /Length 235 >> stream x31R0P0V5R0P05UH1*sP "9\\ y\ Ʀ@ z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]%|p|aߗ f?Żgeׅ +|M?4usInH1ё`hrT =NMendstream endobj 173 0 obj << /Filter /FlateDecode /Length 205 >> stream x31R0PacKS3CB.7H9\q0m2 ́\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OS_߮OoU믃9M3 ?Z4e{~?d[aKcendstream endobj 174 0 obj << /Filter /FlateDecode /Length 228 >> stream x31R0P0Q5R06W05UH1*sP "9\\ y\ @ &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]ԖŘ1=l}pu1z?::/E~r}[l&BWt鶽K7\ڦͣc Inendstream endobj 175 0 obj << /Filter /FlateDecode /Length 233 >> stream x31R0P0V5R0P05UH1*sP "9\\ y\ Ʀ@ z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]8Θ} G*IUK_}u768_(ܛ\{\%^unЍ61 .WO@@.Mendstream endobj 176 0 obj << /Filter /FlateDecode /Length 200 >> stream x31R0P0U5R0f )\\`~. pA$4P8++\!P(g`gɹ\N\ %E\@E\@5\N \.ц\\nn@n.P9?47ΎEAmgA} f_9 {ȮXX]V]_[o_\=NS@endstream endobj 177 0 obj << /Filter /FlateDecode /Length 247 >> stream x31R0P0V5R0P05UH1*sP "9\\ y\ Ʀ@ z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]> stream x31R0P0V5R0P05UH1*sP "9\\ y\ Ʀ@ z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]> stream x32V0P0bC3c3CB.7H9\q0m2 ,<%X*$r9yr{*r+Xr{r;8+rDrr;;66 @ܼbK;;.O : Z&fOHt`aprT /Aendstream endobj 180 0 obj << /Filter /FlateDecode /Length 221 >> stream x33R0P0bS 3CB.7H9\q0 2 LM\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OS/vտu~ℿ7u_˿pW8> stream x3T0P0bScSsCB.7 2E@*+\!P@Rz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<] \Iyqoǯe>g!3e寯7u h02pz*rr Rendstream endobj 182 0 obj << /Filter /FlateDecode /Length 205 >> stream x35Q0P0bS 2WH1*qs$@*+\!P\$23T53 S\.'O.}O_T.pR.}J.}gC.}hC.X.}7}gg7 7F[A(㜟SW bgJoO8s`bb, \ \\2Oendstream endobj 183 0 obj << /Filter /FlateDecode /Length 182 >> stream x33R0P0bS SsCB.7H9\q0m2 LM\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O-?z ] >l|ܹ&!CB W UiPendstream endobj 184 0 obj << /Filter /FlateDecode /Length 165 >> stream x36P0P0a SsCB.7H9\q0m2 @:RFz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]\ *̭<#B W @Vendstream endobj 185 0 obj << /Filter /FlateDecode /Length 210 >> stream x37S0P0bs#SsCB.7H9\q0m2 ,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OS> stream x33R0P0bS SsCB.7H9\q0m2 LM\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OS|]'ַ│4lGឺé\=_endstream endobj 187 0 obj << /Filter /FlateDecode /Length 243 >> stream x31S0P0Q5R01T0TH1*sP "9\\ y\ @ f &z ) ɥPRTʥTĥTå\ b݀}o]s~Nin^1P³LMx ?wIP-e~rGU[f7m>X٧}ynݨ[R!S[:08pz*rrRendstream endobj 188 0 obj << /Filter /FlateDecode /Length 191 >> stream x33P0P0bS3SsCB.7H9\q0m2 LA @Rz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]v9cirn[8lZ7p04pz*rrHendstream endobj 189 0 obj << /Filter /FlateDecode /Length 197 >> stream x33R0P0V5R0P05WH1*sP "9\\ y\ @ z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]'Nn,*0ػ>?N]t;vmml8cMAS!+ BQzendstream endobj 190 0 obj << /Filter /FlateDecode /Length 188 >> stream x33R0P0R5R0T05WH1*sP "9\\ y\ A  Dr.'BIQi*~8PP S!K!A,`cﭠ q)+jtQP8l)˕qwfӷ[Ww%P-]ow.WO@@.Q;Qendstream endobj 191 0 obj << /Filter /FlateDecode /Length 221 >> stream x31R0P0V5T01T0PH1*sP "9\\ y\ AfKc=HrU()*M*w pV0w62wwvvrllsJsZ<]Qnwhʱ5w߽볏Dh5}ozr5mn8F$:ؔŠ Iendstream endobj 192 0 obj << /Filter /FlateDecode /Length 212 >> stream x31S0P0R5T01R0PH1*s9\&(ÕU`b Fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-0f?|ukk/_/Dq{/PecˎfVF.WO@@.Mendstream endobj 193 0 obj << /Filter /FlateDecode /Length 202 >> stream x36W0P0V5T06Q0PH1*sP "9\\ y\ Ɔ@@͖ z@) ɥPRTʥTĥTåDrr;;66@\9y@-vv\. j %921e%K_e_OӸ^{=Ww˶KIq1(0qz*rr>^endstream endobj 194 0 obj << /Filter /FlateDecode /Length 220 >> stream x31S0P0V5T01V0PH1*s9\&(ÕU`b z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-QDz O8[*/h?e_믯_g|r]-"w+!eG8#F.WO@@.hPfendstream endobj 195 0 obj << /Filter /FlateDecode /Length 207 >> stream x36W0P0R5T06Q0PH1*sP "9\\ y\ F@ Ɩ Fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-hKLd>dP%|/?|=~׷lctS!+ l@endstream endobj 196 0 obj << /Filter /FlateDecode /Length 190 >> stream x32U0P0b#KSKCB.7H9\q0m2 ,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O7s|l_"i~Dh5}r<) \ \\D endstream endobj 197 0 obj << /Filter /FlateDecode /Length 245 >> stream x31R0P0R5P01P0PH1*iHDLs2 A@hj`gɹ\N\ %E\@U\@E\N \.ц\\nn@n7P;s~Nin^1Pڂ bg[$n4;i/е-mV[Qz7×YpUkf]zÜ,b\X\=u$WKendstream endobj 198 0 obj << /Filter /FlateDecode /Length 195 >> stream x31S0P0bcS CB.7H9\q0m2 L \%X*$r9yr{*rr{Ur;8+9.ц\\nn@n.P9?47ΎEAmI!?) fe_ZL8?#B W Nendstream endobj 199 0 obj << /Filter /FlateDecode /Length 180 >> stream x32V0P0aS3CB.7H9\q0m2  -@@)#=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. jK<_6I/ ^i~Ġb?endstream endobj 200 0 obj << /Filter /FlateDecode /Length 215 >> stream x31Q0P0b#S CB.7 2A@*+\!P@RFz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]ԖTQ K繰G^}K_Џ~KrM?ۿBX\=Pendstream endobj 201 0 obj << /Filter /FlateDecode /Length 167 >> stream x32V0P0aS CB.7H9\q0m2  -@@)#=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. jK*?epS!+ R&Acendstream endobj 202 0 obj << /Filter /FlateDecode /Length 209 >> stream x3T0P0b33csCB.7H9\q0m2 L\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O%g(Q;!QZpړr>̬ ~YfeiKp?&.WO@@.\R{endstream endobj 203 0 obj << /Filter /FlateDecode /Length 188 >> stream x31S0P0bccsCB.7H9\q0m2 L \%X*$r9yr{*rr{Ur;8+9.ц\\nn@n.P9?47ΎEAmIEc&~Gsu+JiQń3y30rz*rrDAendstream endobj 204 0 obj << /Filter /FlateDecode /Length 209 >> stream x31R0P0R5T0T0PH1*sP "9\\ y\ @ }Fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-x&[//{_~r}={۴[E$08pz*rr> stream x31S0P0R54S01R06WH1*rErL4H<++\!P@M Ar@29ɓKW4K?KK)YK%ڐ KM jw)+jtQP[Ra"cij&uKw[ߦ_?̡c#G$oG, \ \\ KAendstream endobj 206 0 obj << /Filter /FlateDecode /Length 216 >> stream x31Q0P0V54S01V06WH1*rErL4H<++\!P@Mz 9 ɥPRTʥTťTĥ`ȥme˥{s;qy(-x~hu/ٮsU~?[zD=$Z>IDz.WO@@.vNendstream endobj 207 0 obj << /Filter /FlateDecode /Length 184 >> stream x36V0P0bc 2WH1*qs$@*+\!PB$23T53 S\.'O.}O_T.pR.}J.}gC.}hC.X.}7}gg7 7F[A(㜟SW bg颠"'%(eׯMI~Zu?`bPrT ;endstream endobj 208 0 obj << /Filter /FlateDecode /Length 210 >> stream x36V0P0V5T0T0PH1*sP "9\\ y\ Ff@@@i=CHrU()*M*w pV0w62wwvvrllsJsZ<]͜p/&!s"l۷}q/c0ՐS!+ U@endstream endobj 209 0 obj << /Filter /FlateDecode /Length 187 >> stream x36R0P0T5T02W05TH1*sP "uAtWBWPHHrU()*M*w pV0w62wwvvrllsJsZ<]z7?oxy6>ml" ,\ \\(>endstream endobj 210 0 obj << /Filter /FlateDecode /Length 190 >> stream x31S0P0R5T01V06WH1*sP "9\\ y\ &@  Fz@) ɥPRTʥTĥTåDrr;;66@\9y@-vv\. jK*$l=OW|x?x^߲Dт ,\ \\usEendstream endobj 211 0 obj << /Filter /FlateDecode /Length 196 >> stream x31Q0P0R5T01T06SH1*sP "9\\ y\ Ɩ@ Fz ) ɥPRTʥTĥTå`ȥme˥{us;qy(vٻz\߱nKǷS!+ 0BA9endstream endobj 212 0 obj << /Filter /FlateDecode /Length 223 >> stream x33P0P0R5T05W06SH1*sP "9\\ y\ Fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-)feܿ{^ڥ_ˮ~w-|[}^U  \ \\Qendstream endobj 213 0 obj << /Filter /FlateDecode /Length 208 >> stream x31Q0P0b#c3CB.7H9\q0m2 L@ @Rz z@`aɥPRTʥTʥTɥDrr;;66 @ܼb;;.OӮO4> stream x31Q0P0R54W01T06SH1*iHDLs2 - Lr@29ɓKW4K?KK)YK%ڐ KM jw)+jtQ03kebos^Vwgzvۦߺuӟ&73*N-۴X\=?(J>endstream endobj 215 0 obj << /Filter /FlateDecode /Length 196 >> stream x36W0P0bccc3CB.7H9\q0m2  \%X*$r9yr{*rr{Ur;8+9.ц\\nn@n.P9?47ΎEAm׿C&eWzKEtҫ֪,f񃡁S!+ g;endstream endobj 216 0 obj << /Filter /FlateDecode /Length 155 >> stream x]0C|AS.ea!KO O:ٖ_3\{ @&&,aM 1yQ크ljWm8~,hiw b0=y:UZk[_TbkJ\*Fy hzMendstream endobj 217 0 obj << /Filter /FlateDecode /Length 175 >> stream x%1@E?TvH$F c&A>v6V܄KX̼fLtHNhhH@6 .2EK3R_, 9,pC0:@l!vc c@Bm% xʋ ;B[M'ZJ7jjuonaR_5Vendstream endobj 218 0 obj << /Filter /FlateDecode /Length 206 >> stream x31Q0P0S0W06W01VH1*qs$@*+\!P@LL-s<=}JJSÁj=JhC.X.}7}gg7 7F[A(㜟SW bg颠~ptQ8|h󡽞$"s[8|"k<#` OswCB W A?[endstream endobj 219 0 obj << /Filter /FlateDecode /Length 126 >> stream x31Q0P04F )\\`~.pAd W*4*\.'O.}O_T.p4t pVR.ц\\. ? \ \\π'endstream endobj 220 0 obj << /Filter /FlateDecode /Length 214 >> stream x31Q0Pccc3CB.7H9\q0m2 -\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OŊml(凭9qzBߕwAlڛU8`hrT _Cendstream endobj 221 0 obj << /Filter /FlateDecode /Length 211 >> stream x31Q0P0bSCCB.7H9\q0m2 -@@)C=C]=K 0UHrU()*M*w pVR.ц\\nn@n.P9?47ΎEAmfs,'5 ~]k$?ٷ.=Y[|"1AS!+ Iendstream endobj 222 0 obj << /Filter /FlateDecode /Length 202 >> stream x31Q0P0bcKc3CB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OO9luy!˵ %V_??߶]aupDbA.WO@@.=endstream endobj 223 0 obj << /Filter /FlateDecode /Length 215 >> stream x31Q0P0b#SCCB.7H9\q0m2 -\%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bg颠pOvO,- _/vzK2V~ݭ77T6͵1ؑh GPendstream endobj 224 0 obj << /Filter /FlateDecode /Length 208 >> stream x31Q0PacKc3CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O4>do|As%_.ڿ٢HϼtЃCnё`hrT 3ABendstream endobj 225 0 obj << /Filter /FlateDecode /Length 185 >> stream x31Q0P0a3SCCB.7H9\q0m2 A @Rz z@`aɥPRTʥTʥTɥ\ b݀}o]s~Nin^1Ps֫'nz+>OVCB W xAendstream endobj 226 0 obj << /Filter /FlateDecode /Length 195 >> stream x31Q0P0b#SCCB.7H9\q0m2 L@ @Rz z@`aɥPRTʥTʥTɥ\ b݀}o]s~Nin^1PڊƮfs,a'R~_d/uOS \ \\D~Kendstream endobj 227 0 obj << /Filter /FlateDecode /Length 182 >> stream x31Q0P0bc S#CB.7H9\q0m2  \%X*$r9yr{*rr{Ur;8+9.ц\\nn@n.P9?47ΎEAmA@_s?~Ǔ s#^ L\ \\=endstream endobj 228 0 obj << /Filter /FlateDecode /Length 211 >> stream x31Q0P0bCSCCB.7H9\q0m2 -\%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bg颠b1Y'7}˪8~}~? xѺ .WO@@.dKendstream endobj 229 0 obj << /Filter /FlateDecode /Length 170 >> stream x31Q0P0bcKSCCB.7H9\q0m2 A @Rz z@`aɥPRTʥTʥTɥ\ b݀}o]s~Nin^1PڊFendstream endobj 230 0 obj << /Filter /FlateDecode /Length 203 >> stream x31Q0P5&& f )\\`~.pAd W*T01r @Rz ,Ls<=}JJSÁj=J ] b݀}oCsJsZ<]V9QvGᱯ3'碸ϭk4 $^m,OS!+ Mendstream endobj 231 0 obj << /Filter /FlateDecode /Length 189 >> stream x31Q0P0b#c3CB.7H9\q0m2 L@ @Rz z@`aɥPRTʥTʥTɥDrr;;66 @ܼb;;.O bo*2Wϒ'?eM`drT Dendstream endobj 232 0 obj << /Filter /FlateDecode /Length 205 >> stream x31Q0PacKc3CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Om sJP7F}%5ogomaΜk \ \\߇=endstream endobj 233 0 obj << /Filter /FlateDecode /Length 215 >> stream x31Q0P0T5P01P06SH1*iHDLs2 - LM zdr.'BIQi*~8PPS!K!A,`c ΥSW bg颠bAZ&~p?> stream x31Q0P0bc3CB.7H9\q0m2 -@@)#=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. j+^f>r5̩HƱ·.5p04pz*rr<:endstream endobj 235 0 obj << /Filter /FlateDecode /Length 214 >> stream x31Q0P0bc c3CB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OEB,vp>h>j[ʬǧu2Pmoi3=itҽoc#"rqq1(0qz*rr>;Yendstream endobj 236 0 obj << /Filter /FlateDecode /Length 191 >> stream x31Q0P0bcs3CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Om]X2EݻM> stream x31Q0P0b#c3CB.7H9\q0m2 L@ @Rz z@`aɥPRTʥTʥTɥDrr;;66 @ܼb;;.O ]?9#y۲S^}ASF.WO@@.Cyendstream endobj 238 0 obj << /Filter /FlateDecode /Length 206 >> stream x31Q0P0b#c3CB.7H9\q0m2 L@ @Rz z@`aɥPRTʥTʥTɥDrr;;66 @ܼb;;.O&ozɇ3 W'/[7oWbP`rT =Jendstream endobj 239 0 obj << /Filter /FlateDecode /Length 220 >> stream x31Q0P0R5P01T06SH1*iHDLs2 - LMr@29ɓKW4K?KK)YK%ڐ KM jw)+jtQP[TtצǞ{]]w_uUlQx['+&ڵkX\=̒L|endstream endobj 240 0 obj << /Filter /FlateDecode /Length 155 >> stream x]0C|AS.ea!KO O:ٖ_3\{ @&&,aM 1yQ크ljWm8~,hiw b0=y:UZk[_TbkJ\*Fy hzMendstream endobj 241 0 obj << /Filter /FlateDecode /Length 167 >> stream x%K `ƛzg$ &I6D-4haM=4RR4iPj8(\ 'Ma{tӤէSMycC)r IBz&$\(KH$AixL2ߟ>ݫ3WTճ6F1g 3.endstream endobj 242 0 obj << /Filter /FlateDecode /Length 116 >> stream x PC|E~{EotrС,z} 9!Iܢ=_ך_7X}0.1{&ܣQrooPv*\5*dBXi/Pq>endstream endobj 243 0 obj << /Filter /FlateDecode /Length 202 >> stream x3P0P0V5R06Q05PH1*sP "9\\ y\ Ɔ@ @z@) ɥPRTʥTĥTåDrr;;66 @ܼb;;.Oۛ}hUU~ ?`j6om\o(lfbP`rT tkE endstream endobj 244 0 obj << /Filter /FlateDecode /Length 173 >> stream x3P0P0bcCSCB.7H9\q0 2 L\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Om,vR˧)u L\ \\>endstream endobj 245 0 obj << /Filter /FlateDecode /Length 209 >> stream x3P0P0bccSCB.7H9\q0 2 ,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O<s(7;_}i__}]+633t)\7)*nI\=Z@[endstream endobj 246 0 obj << /Filter /FlateDecode /Length 222 >> stream x3P0P0V5R06Q05PH1*sP "9\\ y\ Ɔ@ @z@) ɥPRTʥTĥTåDrr;;66 @ܼb;;.O>2_po¹WW{_YnZ!n%iW|=sgotDLbL \ \\fG,endstream endobj 247 0 obj << /Filter /FlateDecode /Length 205 >> stream x3P0P0bcSSCCB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bg颠`@륯_V7__V7}ǏI?b"'6MX\=~Fendstream endobj 248 0 obj << /Filter /FlateDecode /Length 222 >> stream x3P0P0Q5R06V05PH1*sP "9\\ y\ F@ F &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]huӍ8h9/_CQ\e7DݶiGt 6$:08pz*rrgJendstream endobj 249 0 obj << /Filter /FlateDecode /Length 222 >> stream x3P0P0V5R06Q05PH1*sP "9\\ y\ Ɔ@ @z@) ɥPRTʥTĥTåDrr;;66 @ܼb;;.O;?&4wo0饯_g{{3*ߗ"w־Z7}_e n1pЁS!+ hKendstream endobj 250 0 obj << /Filter /FlateDecode /Length 199 >> stream x3P0P0Q5R06S05PH1*sP "9\\ y\ F@ F &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]v9gKV ]7Eeu%lo_x48\=AOendstream endobj 251 0 obj << /Filter /FlateDecode /Length 235 >> stream x3P0P0V5R06Q05PH1*sP "9\\ y\ Ɔ@ @z@) ɥPRTʥTĥTåDrr;;66 @ܼb;;.Oۛ|}p)׺z[Ѽ[IE l?̿G9F^K%ɡo{nH&&& L>endstream endobj 252 0 obj << /Filter /FlateDecode /Length 222 >> stream x3P0P0V5R06Q05PH1*sP "9\\ y\ Ɔ@ @z@) ɥPRTʥTĥTåDrr;;66 @ܼb;;.Oۛʛ/h}}/֣ewfтCkj׿˒iۄnI02pz*rrŎJ5endstream endobj 253 0 obj << /Filter /FlateDecode /Length 209 >> stream x31V0P0R54U0T06VH1*iHDLs2 ́ L, Ar@29ɓKW4K?KK)YK%ڐ KM jw)+jtQP[R.PZ0OpZV-ۻaj=q B\=aeDendstream endobj 254 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 604 >> stream xUAOAgt[AԠ`wJ I H2Bu@HǖBIhhx/ ~M oi`Dd:a賀ob3:(˙IsI={oo@k0w1~9y I9<3NA '9Ⱔ̒yI8 "qH#$AdL_cqU!8&rRÚ!QX4.DNS Hљ)Y %B^S]A9̆~)~s8x럈C!t9QM-Ӓ`պZ.ДU辥ĥH_9B9w܍TZƧ;L{@Uk$q.&^z38וƻX;tBBwh]}:a֕-;Y[݄>+zY=4\mÛUFt/s[(<͹KRdžj ]kRX\.QNqlQ`CƤ?橍<%҂sDKvom7E+ԆM,#IWwJ{_Z5> stream x]1 EwN$j!bI * `""d $[s#z:i[T1JS-2exAa|O(i RQn&ֵ[d$ ERT!^1$Qk^9\x ].j\YGY4-Tendstream endobj 256 0 obj << /Filter /FlateDecode /Length 250 >> stream x31V0P5R54S01U05VH1*䂊@.Ipep+q* 0P03=C\.'O.}O_T.p2.}*.}gC.}hC.X.}7}gg7 7FK9?47ΎEAm/-KKտ޶__+_,y릿5nܿ~}>> stream x3T0P04U02Q01V05SH1*hPD Ls2 , F*Y*$r9yr{*rUq{q;8+rDrr;;66 @ܼb;;.O 5_YغlBm/}H?TPÇ{}rE> .WO@@.?oendstream endobj 258 0 obj << /Filter /FlateDecode /Length 220 >> stream x35R0P0a3SCCB.7H9\q0m2 Ab ] z z@`aɥPRTʥTå&K!A,`cﭠ q)+*tQP[0뵂:ǿ^VM~exk?q5ծǶZ}}闭T/r,~* Lendstream endobj 259 0 obj << /Filter /FlateDecode /Length 233 >> stream x31V0P0S5R01W05VH1*sP "9\\ y\ &@ fz@) ɥPRTʥTĥTåDrr;;66 @ܼb;;.O ~P&޹FYt_K93|pys%ӗoYmkoM۟Y6=Qcm, \ \\Nendstream endobj 260 0 obj << /Filter /FlateDecode /Length 199 >> stream x35U0P04fF )\\`~.p!h U`j@)C#=C]=K 0UHrU()*M*w pVR.ц\\nn@n.P9?47ΎEAm麝3bYoҭ_:~eV[#gg`rT Iendstream endobj 261 0 obj << /Filter /FlateDecode /Length 210 >> stream x3T0PP5T01P06VH1*sP "9\\ y\ F@@9 =CHrU()*M*w pV0w62wwvvrllsJsZ<]T.mҰ˪K/oqfWG}wo]0aD" B W \Aendstream endobj 262 0 obj << /Filter /FlateDecode /Length 211 >> stream x36U0PP5T06Q05RH1*sP "9\\ y\ Ff@ z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-֕: }n5K}o__ZeAlD7ZDX\=aGendstream endobj 263 0 obj << /Filter /FlateDecode /Length 202 >> stream x36U0PP5T06U06VH1*sP "9\\ y\ F@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-^_Mzo2qqrQK D')&65p04pz*rrf;endstream endobj 264 0 obj << /Filter /FlateDecode /Length 228 >> stream x3T0PP5T01R05RH1*sP "9\\ y\ &@ z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-9!__ #Yzit˪}So~:7<>ޫnn^'LGPCB W M3endstream endobj 265 0 obj << /Filter /FlateDecode /Length 204 >> stream x36U0PT5T06U06VH1*sP "9\\ y\ Ff@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-x~N!˽/M4n?E"27EZ6ewnCn.WO@@.i9endstream endobj 266 0 obj << /Filter /FlateDecode /Length 211 >> stream x32Q0P5R54S06Q05VH1*䂊@.Ipep+q* 0P03=C\.'O.}O_T.p2.}*.}gC.}hC.X.}7}gg7 7FK9?47ΎEAmCnd}늯ЄExAh=:ϖ=Ԓ)I02pz*rr0Mendstream endobj 267 0 obj << /Filter /FlateDecode /Length 219 >> stream x36U0P0Q54S0"cCB.@.pAd4H<++\!PRD$$s<=}JJSÁ= ] b݀}ov.}ܼb;;.Om{ =|7~v w۷owfu$Z_WUVpL: qIendstream endobj 268 0 obj << /Filter /FlateDecode /Length 201 >> stream x32Q0P0S5T02U05PH1*sP "9\\ y\ @ fz@) ɥPRTʥTĥTå\ b݀}on.}ܼb;;.O nzϯj}KK^ dO_wDǔAS!+ -BRendstream endobj 269 0 obj << /Filter /FlateDecode /Length 228 >> stream x36U0P0U5T06W05RH1*sP "9\\ y\ F@@ z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-<|H_ $. TղTثV^ūKv+?ؾwm}_zc__d[ĠK.endstream endobj 270 0 obj << /Filter /FlateDecode /Length 183 >> stream x32P0P0W5T02V05RH1*sP "9\\ y\ f ͦ z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-4XIщ'joޒI5p04pz*rrAIendstream endobj 271 0 obj << /Filter /FlateDecode /Length 242 >> stream x33V0P0S5T03Q06VH1*sP "9\\ y\ @ & fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-ɱ!~oe̯gh_T2Ŋ_V_ZǞW([}ohz5Xۿ46lެ]rg.mRendstream endobj 272 0 obj << /Filter /FlateDecode /Length 218 >> stream x31V0P0S5T01Q06VH1*sP "9\\ y\ @ & fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-0V; u=W(S_/uK~]z_M}Y`[s#B W *Gendstream endobj 273 0 obj << /Filter /FlateDecode /Length 201 >> stream x3T0PP5T0P06VH1*s9\(ÕU`l& z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-0EKٗ̾_][lxUӯ_mmMy20rz*rrX@endstream endobj 274 0 obj << /Filter /FlateDecode /Length 222 >> stream x3T0P0T54U0P06VH1*iHDLs2 ́ L, zdr.'BIQi*~8PPS!K!A,`c ΥSW bg颠з±EDDIWo׫֖_LnUܴY1}-[. *8\=/Jendstream endobj 275 0 obj << /Filter /FlateDecode /Length 191 >> stream x36R0P0S5T06S06VH1*s9\(ÕU`l& fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-Q|a|qoKɥIMM۵lĥu֯/XS!+ ^> stream x36T0P0S5T06P06VH1*sP "9\\ y\ F&@@93=CHrU()*M*w pV0w62wwvvrllsJsZ<]<#Peum5 *+YWPϨ2s[ĎH02pz*rrPD9endstream endobj 277 0 obj << /Filter /FlateDecode /Length 194 >> stream x32U0P0S5T02W01WH1*sP "9\\ y\ F@ & fz@) ɥPRTʥTĥTåDrr;;66@\9y@-vv\. j > stream x31T0P0S5T01R06VH1*sP "9\\ y\ f@ & fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-`}a$ѣ\Q ZiYڮ ̲7ҥK_oz6ͮ \=DDendstream endobj 279 0 obj << /Filter /FlateDecode /Length 199 >> stream x36U0P0S5T06S06VH1*s9\(ÕU`l& fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-Pz_~oǫ%WU??__o]͙tAS!+ B~endstream endobj 280 0 obj << /Filter /FlateDecode /Length 224 >> stream x35T0P0S5T05R06VH1*sP "9\\ y\ &f@ & fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-vPyz_ƭol*[k[n];lĂ#:\ L\ \\ZI7endstream endobj 281 0 obj << /Filter /FlateDecode /Length 155 >> stream x]0C|AS.ea!KO O:ٖ_3\{ @&&,aM 1yQ크ljWm8~,hiw b0=y:UZk[_TbkJ\*Fy hzMendstream endobj 282 0 obj << /Filter /FlateDecode /Length 174 >> stream x3T0PP02Q06P01WH1*sP "9\\ y\ FF@@1c =C gɥPRTʥTĥw pV0w62wwvvrllt29y@-vv\. jed7l6S!+ 10endstream endobj 283 0 obj << /Filter /FlateDecode /Length 194 >> stream x3T0P0aS3CB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O> +_Ct(4Vz(W@QjK%X~:08pz*rrD"endstream endobj 284 0 obj << /Filter /FlateDecode /Length 235 >> stream x3T0P0Q5S06Q05RH1*s9\(ÕU`l &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]> stream x3T0P04V02T02S01SH1*hPD Ls2 A `gɥPRTʥ*w pV0w62wwvvrllt29y@-vv\. jknk;_dîP.ߠ.WO@@.I1endstream endobj 286 0 obj << /Filter /FlateDecode /Length 199 >> stream x3T0P04V5S06R05RH1*hPD Ls2  A L-FDr.'BIQi*~8PPS!K!A,`cﭠ q)+jtQP[غ;**{mɮK/\oϯM݇oX\=Afendstream endobj 287 0 obj << /Filter /FlateDecode /Length 201 >> stream x3T0P0S5S02U05RH1*sP "9\\ y\   fz@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]VHý{߾~W_nzD]Uj+X\=6BVendstream endobj 288 0 obj << /Filter /FlateDecode /Length 200 >> stream x3T0P0U0W06V0TH1*qs$@*+\!P@HTPLR!9ɓKW4K?KK)YK%ڐ KM V8qy(-<۾v[s`tDbbkC9B|VAS!+ ͧ8endstream endobj 289 0 obj << /Filter /FlateDecode /Length 169 >> stream x3T0P0V0S06U01PH1*qs$f@*+\!PDXPTR!9ɓKW4K?KK)YK%ڐ KM V8qy(-lf >訙< w4endstream endobj 290 0 obj << /Filter /FlateDecode /Length 169 >> stream x3T0P04V54P02S)\\P\HpA.UkF S A@29ɓKW4K?(ɥTť`ȥme˥{s;qy(y~]7M5s+#B W o-endstream endobj 291 0 obj << /Filter /FlateDecode /Length 126 >> stream x51 @D9Ŝ 6Y6FR Fh;x̌t ԊF~>.a-VVW cbձf(ӈ&AҎұ4 r6{űM *endstream endobj 292 0 obj << /Filter /FlateDecode /Length 122 >> stream x3T0P04F&  )\\`~.p!hUAC~=C] ɥPRTʥN \.ц\\. r @ -]%7endstream endobj 293 0 obj << /Filter /FlateDecode /Length 171 >> stream x3T0P0Q5S06Q05RH1*s9\(ÕU`l &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]Nt} Px@lQ.WO@@.?(endstream endobj 294 0 obj << /Filter /FlateDecode /Length 213 >> stream x3T0P0V5T06U01WH1*sP "9\\ y\ F@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-hoTh|勳{Y//W˯|?M}zݱ[Ix'm۶mC&.WO@@.GYendstream endobj 295 0 obj << /Filter /FlateDecode /Length 179 >> stream x3T0P0bccsCB.7H9\q0m2 ̀\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OgXz]'G?eǠ> endstream endobj 296 0 obj << /Filter /FlateDecode /Length 202 >> stream x3T0P0bcsCB.7 2F@*+\!P@R&z z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]2d_Ņvvkͥן\S[7{u`!ۗK/AS!+ -?endstream endobj 297 0 obj << /Filter /FlateDecode /Length 219 >> stream x3T0P0V5T06U01WH1*sP "9\\ y\ F@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-> stream x3T0P0bc3sCB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O5ׯ7_emկ_q`#9I{`hrT VwCendstream endobj 299 0 obj << /Filter /FlateDecode /Length 201 >> stream x3T0P0Q5T06Q01SH1*s9\(ÕU`l& &z@) ɥPRTʥTĥTå`ȥme˥{us;qy(mеAs> stream x3T0P0V5T06U01WH1*sP "9\\ y\ F@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-9cC-mY?~{={j~o-$nv477MS!+ E?endstream endobj 301 0 obj << /Filter /FlateDecode /Length 188 >> stream x%K`dG4E4 $]ClxNޡn䞜?&4U՛R8 ב!Abk25"m(-#t3{RNlRBȉe+k/$NN*Z^$$gb7s ξi&-P};endstream endobj 302 0 obj << /Filter /FlateDecode /Length 232 >> stream x3T0P0V5T06U01WH1*sP "9\\ y\ F@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-> stream x3T0P0V5T06U01WH1*sP "9\\ y\ F@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-wh ۬o?̙鯯}_z16G`á.WO@@.Gendstream endobj 304 0 obj << /Filter /FlateDecode /Length 172 >> stream x3T0P04F& F )\\`~.p!h U`h@)C=C] ɥPRTʥTťTĥ`ȥme˥{+esJsZ<]6(ӟGVI02pz*rr-6endstream endobj 305 0 obj << /Filter /FlateDecode /Length 187 >> stream x3T0P04V54P02S06RH1*䂊@.Ipep+qgɹ\N\ %E\@I.}*.}gC.}hC.X.}7}gg7 7FK9?47ΎEAmC_pvk_Mt \ 8_endstream endobj 306 0 obj << /Filter /FlateDecode /Length 186 >> stream x3T0P0Bc abUr9\H4 W*T06PAc =Cc=K\.'O.}O_T.p.}.}gC.}hC.X.}7}gg7 7F[A(㜟SW bg颠pʆK[Ħ DE8BS=Οcۇ÷C:08pz*rr8$endstream endobj 307 0 obj << /Filter /FlateDecode /Length 166 >> stream x3T0P0V04Q06U06RH1*sP "9\\ y\ A 4P03T04ֳTHrU()*M*w pV0w62wwvvrllt29y@-vv\. j;'dgC.WO@@.M*yendstream endobj 308 0 obj << /Filter /FlateDecode /Length 187 >> stream x3T0P0Bc abUr9\H4 W*T06PAc =Cc=K\.'O.}O_T.p.}.}gC.}hC.X.}7}gg7 7F[A(㜟SW bg颠@*G9oa|=> e͡eCӥCPfWkPVSCB W HW8endstream endobj 309 0 obj << /Filter /FlateDecode /Length 205 >> stream x3T0P0bc3sCB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O_s}?e6s)qAf>9:08pz*rrFendstream endobj 310 0 obj << /Filter /FlateDecode /Length 211 >> stream x3T0P0V5T06U01WH1*sP "9\\ y\ F@ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-x~lr5z/_eׯ$.]{ۥL;AS!+ *:Dendstream endobj 311 0 obj << /Filter /FlateDecode /Length 201 >> stream x3T0P0bcS3CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O\T|Kǯ[WSWZ1 \ \\*Fendstream endobj 312 0 obj << /Filter /FlateDecode /Length 198 >> stream x3T0P0bc33CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O'fӲ> e>AS!+ RCendstream endobj 313 0 obj << /Filter /FlateDecode /Length 192 >> stream x3T0P0bc33CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OOhۊ'L6@pj \ \\$@%endstream endobj 314 0 obj << /Filter /FlateDecode /Length 216 >> stream x3T0P0V5T06S01WH1*sP "9\\ y\ @ & z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-h?qEz|G_~oEsdgֲϭmح77߼ $8\=|.H=endstream endobj 315 0 obj << /Filter /FlateDecode /Length 185 >> stream x3T0P0bcs3CB.7H9\q0m2 ̀\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O/tOM?|H@)uOS \ \\Hendstream endobj 316 0 obj << /Filter /FlateDecode /Length 177 >> stream x3T0P0bcS3CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O׸Ym 9vST02pz*rr=?endstream endobj 317 0 obj << /Filter /FlateDecode /Length 208 >> stream x3T0P0bcs3CB.7H9\q0m2 ̀\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Osd]ߚF{Nd]DJ?8§kr B W NS#endstream endobj 318 0 obj << /Filter /FlateDecode /Length 209 >> stream x3T0P0bcs3CB.7H9\q0m2 ̀\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O Zi%R@5r5Ou`aprT HS'endstream endobj 319 0 obj << /Filter /FlateDecode /Length 200 >> stream x3T0P0bcS3CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O- \//}PO{ݮ;mC01(pz*rr[Cendstream endobj 320 0 obj << /Filter /FlateDecode /Length 203 >> stream x3T0P0Q54P06Q01WH1*rEr4H<++\!P@ML Ar@29ɓKW4K?KK)YK%ڐ KM jw)+jtQP[4Eg*_] ߿2k}gg8tobP`rT }Gendstream endobj 321 0 obj << /Filter /FlateDecode /Length 209 >> stream x3T0P0T5T0P01SH1*sP "9\\ y\ @ & z @"9ɓKW4K?KK)YK%ڐ KM w)+jtQP["c=9SoߺGK?A/@RJL_UI \ \\Hendstream endobj 322 0 obj << /Filter /FlateDecode /Length 219 >> stream x3T0P0Q5T06Q01WH1*s9\(ÕU`l& &z@) ɥPRTʥTĥTå`ȥme˥{us;qy(-Q|Hn׋ j_>~}1߼LۨcI>I~=6֭DW"O\UHt`aprT Gendstream endobj 323 0 obj << /Filter /FlateDecode /Length 176 >> stream x3T0P0bc33CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O[\=[Z<7endstream endobj 324 0 obj << /Filter /FlateDecode /Length 183 >> stream x3T0B]Cc 3CB.0?Hr `(ÕUjb`gɹ\N\ %E\@E\@5\N \.ц\\nn@n7P7s~Nin^1PڊZ&G)|}ﺯ.p(:"17AS!+ RHhendstream endobj 325 0 obj << /Filter /FlateDecode /Length 164 >> stream xEL Pnofǫ(U8DS jX >I{4)p>_wA6),\< -H뇢W8-9J6ys)jDl2x)!pko-8eSy,q"0iH7krx#1T3endstream endobj 326 0 obj << /Filter /FlateDecode /Length 171 >> stream x3T0P0Q5S06Q05RH1*s9\(ÕU`l &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]VH~A !1aݿ\= Fendstream endobj 327 0 obj << /Filter /FlateDecode /Length 163 >> stream x]=@b*;\v FB_\ TJL,J=xo[Х3V߈HP%[t4Z.9T oY(J)A-1$[ w8AtħoڋL6䑾~}ΛqԲ@/8endstream endobj 328 0 obj << /Filter /FlateDecode /Length 199 >> stream x3T0P0a c#CB.7H9\q0m2 M\HrU()*M*w pV0w62wwvvrllt29y@-vv\. jU>4_WSm> 8b}!~0> stream x3T0Cc33CB.7H9\q0m2 \=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. j+p4^?8~h'\pů_Ywa \ \\C|endstream endobj 330 0 obj << /Filter /FlateDecode /Length 189 >> stream x3T0P0bcc#CB.7H9\q0m2 @ @Rz @"9ɓKW4K?KK)YK%ڐ KM V8qy(-<"'|[%[֔3k7[7vM" AS!+ B{6lendstream endobj 331 0 obj << /Filter /FlateDecode /Length 214 >> stream x3T0P0bc 3CB.7H9\q0m2 ̀\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Os~Bo?$Ņ]vS[ͬUo߬Ij`hrT G{endstream endobj 332 0 obj << /Filter /FlateDecode /Length 192 >> stream x3T0P0ac#CB.7H9\q0m2  \HrU()*M*w pVr\ b݀}o]s~Nin^1P³LN6UHߍ_UX}Wp6w?owĄ, \ \\6endstream endobj 333 0 obj << /Filter /FlateDecode /Length 185 >> stream x3T0P0bcc3CB.7H9\q0m2  \%X*$r9yr{*rr{Ur;8+9.ц\\nn@n.P9?47ΎEAm1Η/^Sފo5p04pz*rrt>.endstream endobj 334 0 obj << /Filter /FlateDecode /Length 234 >> stream x3T0P0R5P06W06VH1*iHDLs2 M L  Ar@29ɓKW4K?KK)YHDrr;;66@\9y@-vv\. j p+֨Hsf4Gk/@mzÜ> stream x3T0Cc 3CB.7H9\q0m2 \=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. j+3kGN'|~ _ӵ?ׁS!+ Foendstream endobj 336 0 obj << /Filter /FlateDecode /Length 181 >> stream x3T0P0bcsCB.7H9\q0m2 @ @Rz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]m 5v~b_y\uS!+ > stream x3T0P0Q54W0P01WH1*iHDLs2 L ̀ Ar@29ɓKW4K?KK)YK%ڐ KM jw)+jtQP[UU;:?'(u>\u4d X\=ۂ@]endstream endobj 338 0 obj << /Filter /FlateDecode /Length 207 >> stream x3T0Ccs3CB.7H9\q0m2 \=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. j+mI x> e˪k.~ۿ~8Vze`rT 8GYendstream endobj 339 0 obj << /Filter /FlateDecode /Length 169 >> stream x3T0P0bc3CB.7 2F@*+\!P@R&z z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]V\rH~tq$7S!+ ;Uendstream endobj 340 0 obj << /Filter /FlateDecode /Length 192 >> stream x3T0P5& F )\\`~.pAd W*T0KYC\.'O.}O_T.p*.}".}g %ڐ KM :K9?47ΎEAm9(<:TXèbQG8$jB W nAEHendstream endobj 341 0 obj << /Filter /FlateDecode /Length 176 >> stream x3T0Cc c#CB.7H9\q0m2 \=C]ɥPRTʥTĥTå`ȥme˥{+esJsZ<]VIKDendstream endobj 342 0 obj << /Filter /FlateDecode /Length 190 >> stream x3T0P0bcc#CB.7 2F@*+\!P@R&z @"9ɓKW4K?KK)YK%ڐ KM V8qy(-9tVrǽjjJӨ[o{m흴mۆC\=?8endstream endobj 343 0 obj << /Filter /FlateDecode /Length 208 >> stream x3T0B]Csc3c#CB.@.pAd4H<++\!h!HH&r9yr{*rUq{q;8+rDrr;;66@\9y@-vv\. j+QxD[_U-;U'V!'W02pz*rrfGPendstream endobj 344 0 obj << /Filter /FlateDecode /Length 213 >> stream x3T0P0R54W01P06RH1*iHDLs2 - L, Ar@29ɓKW4K?KK)YK%ڐ KM jw)+jtQP[xč [(^TBn>eIκΣ&~w B W !Hkendstream endobj 345 0 obj << /Filter /FlateDecode /Length 181 >> stream x3T0P0bc3c#CB.7H9\q0m2 M\HrU()*M*w pV0w62wwvvrllt29y@-vv\. j+4g TZubY/ v_?hğ\ >6endstream endobj 346 0 obj << /Filter /FlateDecode /Length 199 >> stream x3T0P0bccc#CB.7H9\q0m2 ,\HrU()*M*w pV0w62wwvvrllt29y@-vv\. j&D(VĖ>KJⰭߚB^n{Z#`Sێ HLZ\ (k&.WO@@.6endstream endobj 347 0 obj << /Filter /FlateDecode /Length 187 >> stream x3T0P0bccCCB.7H9\q0m2  \%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bg颠Y?hğ\)?(e]nHt`aprT g> stream x3T0Cc c#CB.7H9\q0m2 \=C]ɥPRTʥTĥTå`ȥme˥{+esJsZ<]VQ8ڪz #ē:rS!+ > stream x3T0P0bc3c#CB.7H9\q0m2 M\HrU()*M*w pV0w62wwvvrllt29y@-vv\. j+ڼtOM<{ov_vߙǷ;AS!+ ":endstream endobj 350 0 obj << /Filter /FlateDecode /Length 195 >> stream x3T0P0bcsc#CB.7H9\q0m2 ̀\HrU()*M*w pV0w62wwvvrllt29y@-vv\. j+^xYg͙6#[_~e@2oe1(0qz*rrAendstream endobj 351 0 obj << /Filter /FlateDecode /Length 199 >> stream x3T0P0bc3c#CB.7H9\q0m2 M\HrU()*M*w pV0w62wwvvrllt29y@-vv\. j;]߿vƇM_=:{WLص߱ͷܫ}W|O[XJ}f-AS!+ >$endstream endobj 352 0 obj << /Filter /FlateDecode /Length 214 >> stream x3T0P0R54W06S06RH1*iHDLs2 M L, Ar@29ɓKW4K?KK)YK%ڐ KM jw)+jtQP[kroʏ_۴wU?F>~}dus=ڶa.&.WO@@.Hdendstream endobj 353 0 obj << /Filter /FlateDecode /Length 176 >> stream x3T0P0bcc#CB.7H9\q0m2 Ab ]F Fz @"9ɓKW4K?(˥& ] b݀}o]s~Nin^1Pڦ7s_WwFo0%*K/KvEOYĠ2U2^endstream endobj 354 0 obj << /Filter /FlateDecode /Length 189 >> stream x3T0P0Q5S06Q05RH1*s9\(ÕU`l &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]nLϊzX't~MhWC׾;Ç,&.WO@@.OBrendstream endobj 355 0 obj << /Filter /FlateDecode /Length 191 >> stream x3T0P0Q5S06Q05RH1*s9\(ÕU`l &z@) ɥPRTʥTĥTå`ȥme˥{+esJsZ<]V1(xrn5߿-BMB_l'i가AS!+ 9Bendstream endobj 356 0 obj << /Filter /FlateDecode /Length 165 >> stream x]=0 w7 П e UqP(/ Cgo G:yk$Ƒ'nP[JGW**@ *ށq@5/AG&V#5a4yѲYB{="!./7]͌.%Uc >dnQKendstream endobj 357 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1479 >> stream x5SiPSW~G^^5Ͻ/Qъ!UHŭժ(1, X1TpIXY TDJ֡vNsZs=w! G$I`χ`?8S1<# 3SD]P&( X_f"Hy,PQZ!QʾRG*2?R"QHTh;>U :B# TPh 5oD!\Wb,b"!bb 'O:Lu8GN;.qf'7N)iaEu芅(%6YZ)AtuIõVWuf("!S@_"<6qNȧj# swFYlTDvS]\6g̓LYE'4G!VFXr gص m+09[ U_ ZSy ~馨9}ې<ۋLBYh7<[%ob[\@ kͮ[ZQE ]+s@7UID?A/\\208Zn4fN^z)~;ZɪiRdn`pmi+GѴfdxN7ve2TUU&(3 u+w` oxޒFN]Y>FVFnuDA DOkVcWEo>&,iQ@ 374 p2ݜ>}Y}EZq&X|5[UB5 2,o2gA/qæIv^.E.Ck\}jV ~%Ri9n;p:MpT'^nȯgx}GcZS`!Qz&le= r|Vx@v +3CUm" ,o9Io^ iGs y =Z 0i\:{1c(ԩx F-[Rc y0H5@I O\kxx4OU\\y-x*vʼn9~zĢ ƏYZ1v;"^5BIάn.T}2$Yn)vo٣p >Dc0̌މr:x޵‚ܜ`|ux^!IpkYa!gy7P6o_szMY0Es9oD͗f߫e^?4E\Z^|qj.g*T3;jq x{>k$7"Ȗ#tIFĿS~endstream endobj 358 0 obj << /Filter /FlateDecode /Length 2101 >> stream xYK6m 02 1ڵ/],Hؤdڲ~ O"ig< h$Ū_Uq>OB'ȿ?g.~>Q>a"$G*oZNdENҜ9ܹN'9)4:!_/ԧ$aWf}h\>w /)busf{_sGE"[ TU3O. TkfUFcQRRSh[f$I,;,jEJh4'iuG$ cJ,"aPOZEUT> { >M"R$1a MMy`3NeK<]]:x>$(bxiwD"H,*\k9գߧhCHSkB䆧-6Lo taji4w^Il}%RDE.9eНk9aD+si _AչHy~h#7 @.h.]nuF.|=WkXA(SQ[{bmض4uvK.OM.F(~zI_=9(^ .WYg&2nݲ%]y.;9 ZNa*1_M5L-YqV3 EdQL<AIo"x#y@/5HZ&P׶.HgS ,%aks@v`jebNBZ T[$T~j >*?<+,4^5{fIDW~f jw{/97 ȩ![_B <ޟdׇ|. 4`O@ё+PO2 O8YHFR'bqN),?X]mX>VϠFxuܬ0DӘXDK8ͪfSyy## r–n3ݞ?@v8AUOz r(?^^;TKG[Voco7QD* _iZzl9l _CES8S 10{ZbjոT)BJo3GiVK#|K{-Y~;.mPBW  Kood~ lKC ϟt{:J+urj5 bU'=gbU= ū<[J]L4X\VmY5|yu)aJJyxAҭk.ykw}xitc/gfaa,"sU>fҨHq5LZs >D1y۪ñ9{=\6=o5;*%C<\ب4fBZu'Aa~p ZGoA^eY+#G8=\s3WUK_C9i6ذ;߸u-'Y<9&?wZ%33MZёޥT)5KD'x /,?W;3WDaN("i!z E [>A Em 9BiXv'N3P2E&ptsCgf<1]|Aÿ %BC97Ka:BVא+ mt>h،Z<"&d{u7/5.]} a,G~/$oFPjq&̐Ce]H\TMU%CBPqnR*ۚ#x ْw2F0 oUiPyZapqyg 0HԆ8_wP8endstream endobj 359 0 obj << /Filter /FlateDecode /Length 2495 >> stream xY]o}K@pF)lHJN Edbσb+fdɑd/-ř"EޏsϹd!PawpfTMa L1oLsa;Wۍ{y̻3QxfAW:?)4:Ub>je (8^/.rȯ)yTU~hqXL_7,O7?V4c$9$Y,45#ȸc)2 nhk)ƚ;} UάlY6yׯ"]nR>g),Zfwg&ȫMIE#LM_wۢ"Eo[HPW_y~e0iYv}]@FJӔ0aW/mW'X pǎ \YS\Zz!@1Rॠf&^YTA%NIC !?Um^X?n6)IBѷl"h+bV`BdvR9_qM:Jzbc2^4 3:l?]S·,~--$RjCʴ][& w%/JRdTR36&.),>[ŝQ8x( baT1<*N%~ɄPphma;O|yYs 4yۖsJ Mm r%Y$CK5|`'m^إm~!؆82 [ '䘊ДL40\Ke=yBOLT4+cqy\l< ^=ΠRJX :20W+@Xe\3 Z]wdq!OF`E:\]p|qKQxL!2Q]s>oWI-@ޘPE10UMH& ͩ"[Z صOţ1 *a3xn#mp<5֥$ï>tں0K.c'{bm& \G:'ؑqɁ KN 唚qAE kMG+p+F(b#'30vR 6}ڗ[C̠ 2PNM=5<?†R>(~ O|oY1m&b_)+f 'tp;^l,̯AJ83e:M 2΀ ˀ21Sfau[STP}~ȋH^w{?](ZlSϪy!(;M)>`M|8%! ~G~g2![)Ω=x6ed:#oѨ؅4"bԃȲ bd ϴ]×g/ПӾU!?Ŷk;<21(|u[D8rm$ 1 :r̾*]Ao+Ca؆%& u+ 6NB/ b/#R_)4njJ}(uMS+O"?qatvMPc}ʫPz9%L@bDy+p~gA 2zNu@VUtpmQY7γ@w1)jC/vS)*Ysi NWR'n[GSw68#z0C(v& v(\5_o#9 E Kid܈Yk9 F!WW7 ?l2\ 6fBag19iȝUƻCzi(ԣ$HJw\x373endstream endobj 360 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 237 >> stream xcd`ab`dddw 441H3a!Gkc7s7˒B7``fdtv/,L(QpT04WpM-LNSM,HM,rr3SK*sr@:RSRS ;)槤1000300012283'oF3#%&_3>xEtOl&oz-b>s,Mendstream endobj 361 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 356 >> stream xcd`ab`dddw441U~H3a!}OMnn/ }7n]O'9(3=DAYS\17(391O7$#57QOL-SpQ(VJ-N-*KM윟[PZZZtی |#]] ێ3Ut~쒂‚U\RݽSM?af<"uS65NΞ k9&.k)koo.QXX]6c ULmhijhęN.iifNƾ2|%yx#uendstream endobj 362 0 obj << /Filter /FlateDecode /Length 2052 >> stream xYo6~[_{I-=}Pl:Vk^Ib)KI6"X$fșofjGQ~q;=t,=,/1pnw KY3n-oqtq]$zy ʅX;](Zz}sxlN.K"o.Q[?^Zvisju_eU#2ONH>9˓D9ã$>,>|f9*q)ȟس4 I btcߟtne$1C$zPoi\{_Vdz1.(#-k L%q·z)KE# Z99 T2FOon+#Nc.H`Xgʂ@1VC Œ?}0TZ1F1#زDg9F*8wK!,p2K](bȹۃN" ~ klA<\ BQRcuz+[{l6WJœ2Y'ܵ2KL\/۠:Ӽ,h۴/˺y@Fct/߿0dQ׫ |s)c/$G&$N/J/y0Ι+V:4$$^}+1W[y[j2 _Ɇ!g `Vj1!M0ujxq$0crt2uQI`$zvtCbK1U͖ tiai'7q;\CYF`~,Hwuj8Ik0)3}`0}ҍOCu/;yiڿS;L¼i:< oûܪpQE$If :9l6WrEˉ$2R]ro#^/* BGyv#͹7l[ڛ꘠gwx=r#~in W!:=VOSJ]‹ mXp |K3}HX01SŝF 09Hx#0/7st뱌A/Zƶa=Ϗy(d{_gg7$i'|QGy U8W ?Zڳ]=xh3! iXu}VQ͏xqؿ{Tj`xJmHɈWOG#DFAKv1b4~UyatoS3,2pP4ʽOPK0@\- DY~7#`J" WrO)endstream endobj 363 0 obj << /Filter /FlateDecode /Length 1383 >> stream xX[o8~ϯ@TfYi4j4ҎO8 -49qTZEUs>p6\nGllk|aC~;L¡Vyb=kl AgD$D^`,v3jq7 J|¬jfuմc޲ FOn(+KQ I 5eP__ׇǢ*"+&kb㱋ħ\f࠳T6Q:3]D0!|Oh}<~&(-L1CMɖl]hA>&Oxa)[Z6xntl@[p \YRSx, lGX?.I fLwx*p dP>ᶨVxdMh҄-B a-ߓ +*<:L!P܌uDhfdt˶ c>Ϡ.׳=iڝeq#4ΎD)D i $ $`Ovh!i5)0+,͸=m-v8≞o:VvBL{JvM8;sDXHx`3ԩ?%\Nȫ!KL1<gvZ\lN&  iÓk؈ԑ1!)ЏU|z{{z[wJ0_%Ҵ$ )(jn|PvO5j-U$<ۢ-XO{Uo2>[UVIf FLe|O)hkFI+u9gYZ!=!?W}G2!b0yxxy4PPn'bq|$V zXKAYlw7 (M-4`EՎ7w<;l2]}Dtf',gY~{MΒcͪ/-E|v(j`s1KYSl*Zk$9 σHx4MpAH{h)\yXJؑ 깺V_7^Vdz};oKUU Ft!QTom1JPgSNɋ{l5!잎6Ѡ 7}ߏ>H_OD"K ?@"sB6b7|~غWendstream endobj 364 0 obj << /Filter /FlateDecode /Length 1369 >> stream xWnF? 4! $!@$9Hq {\,,A`؂WU^<\G?^ o[ nG#b <{?Tl3φ#L"=9қGsp*M=i⯋0Y"_OU TJH?[&`Gc_9*Y'Ap3MX<"D8l=e0bLp&[FH(qAH$λHJz?g6XT ɔ>ߐ䣳GG#>=|2# ^^c%DmgAH`Dr dӈ}0$. e3chdR΃HI-S"n]3~ 5%8٤؇)|No NЁ1M,c&hכRاtc x<4~mZM*V?c$0B 郮[*r?pj@v|0A$B1}?cIM}O,Ku.ul%wӡY #?H#8;J?bB_\+)sGmqԢ{5UUZf;qհEY%>Xo͹1i!{/`>'77Wadt]:ñ8i䝥fۯiiV ,2d$ \F+q hcKm,̂&̬)lV7\qt7*OtX+7d(LELxjsH0kDk]K䧘"$\cU&bEshdOc]-՛]z0 XN#`rH{a'X~184MISȌ8u36pjwJ{\aDF}qZB,t@Йt.Z%?5{9-zn-jǐ}.(PG_Un:2c*~3y) v$@NfI4E_}BnsOX\@=Ѓr^ԗ.=J׃؊P;r-SB][I^^K>ۜpSfZ]5! ʷ/^.[_߸?Wozˆ'FC;l -endstream endobj 365 0 obj << /Filter /FlateDecode /Length 164 >> stream x36U0P0W02R02W01RH1*s9\FDgp+q*( 23T02ԳTHrU()*Mr{IgC.}hC.X.}7}gg7 7F[A(㜟SW Tlg颠↫_?oSF.WO@@.,endstream endobj 366 0 obj << /Filter /FlateDecode /Length 196 >> stream x36U0P04P5S0P01SH1*hPD L p endstream endobj 367 0 obj << /Filter /FlateDecode /Length 198 >> stream x36U0P0S5S02Q01SH1*sP "uAtWBWP!P H$r9yr{*rq{p;8+rDrr;;66 @ܼb;;.O,ڋ}}Կ/.&t5dւL \ \\d@endstream endobj 368 0 obj << /Filter /FlateDecode /Length 162 >> stream x36U0P0R0U06R06UH1*qs.c 2  @H*Y*$r9yr{*r%=S!K!A,`cﭠ q)+*tQP[Q?> stream x36U0P04RеT02VTH1*sABXL p> stream x% @LK|㈉fYJb:@‰C!yO4]'oV8h'endstream endobj 371 0 obj << /Filter /FlateDecode /Length 122 >> stream x36U0P04FF )\\`n.T) U2BKV=C] ɥPRTʥ`ɥ" ] b<]7`=B W D !endstream endobj 372 0 obj << /Filter /FlateDecode /Length 205 >> stream x36U0P0V5T06T01RH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-gmBZ/rd-?WM[y48\=B|endstream endobj 373 0 obj << /Filter /FlateDecode /Length 176 >> stream x36U0P0b#K#CB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O-׿^)qc$0%~WF.WO@@. 9endstream endobj 374 0 obj << /Filter /FlateDecode /Length 206 >> stream x36U0P0aC#CB.7H9\q0m2 ,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OER,Mmpqj+v|;Voô]ޜ:*&;5p04pz*rr9endstream endobj 375 0 obj << /Filter /FlateDecode /Length 210 >> stream x36U0P0V5T06T01RH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-bi2Q?qڿLscý{/+s5M vpA#B W {@endstream endobj 376 0 obj << /Filter /FlateDecode /Length 200 >> stream x36U0P0V5T06T01TH1*sP "uAtWBWPH H$r9yr{*rq{p;8+rDrr;;66@\9y@-vv\. j^z xz Ϛko}t> stream x36U0P0V5T06T01RH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-x~En p_KVEC|z[ʿ)kۿݲM»hn .WO@@.@endstream endobj 378 0 obj << /Filter /FlateDecode /Length 186 >> stream x36U0P0V5T06T01RH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(8 .kW`eUUm}o\=8endstream endobj 379 0 obj << /Filter /FlateDecode /Length 219 >> stream x36U0P0V5T06T01RH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-9|3mY_~׫n{8:q %&ڔkrȥ-$ytHh04ppz*rrnDPendstream endobj 380 0 obj << /Filter /FlateDecode /Length 210 >> stream x36U0P0V5T06T01RH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-9Vr%K5֍f'MڿtZ}Cyt[\=]=endstream endobj 381 0 obj << /Filter /FlateDecode /Length 167 >> stream x36U0P04FF F )\\`~.pAd W*T @2z @"9ɓKW4K?\KK)YK%ڐ KM V8+Xqy(* uOٶAS!+ ϕ-endstream endobj 382 0 obj << /Filter /FlateDecode /Length 193 >> stream x36U0P0Q0V06P06WH1*qsABDB pBr.'BIQi*~8P P S!K!A,`cﭠ q)+jtQP[p75K9tuY[ ]3ۇ{۾ݓH|p[  \ \\s&8endstream endobj 383 0 obj << /Filter /FlateDecode /Length 163 >> stream xE@Cc7r]018`P'??3> stream x36U0P0bccCCB.7H9\q0m2  \%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bgZr?s?W04ppz*rr:endstream endobj 385 0 obj << /Filter /FlateDecode /Length 190 >> stream x36U0P0bc#CCB.7H9\q0m2 A @Rz z@`aɥPRTʥTʥTɥ\ b݀}o]s~Nin^1PJ'WS>4zʗ8r3k)#B W > stream x36U0P0bc#CCB.7 2F@*+\!P@RFz z@`aɥPRTʥTʥTɥ\ b݀}o]s~Nin^1Pڊ ROmH"0 ك}+M01(pz*rr Mendstream endobj 387 0 obj << /Filter /FlateDecode /Length 205 >> stream x36U0P0T5T06Q01TH1*sP "uAtWBW1PHHrU()*M*w pV0w62wwvvrllsJsZ<]V\( g+>_aY S7וk"\=vBendstream endobj 388 0 obj << /Filter /FlateDecode /Length 172 >> stream x36U0P0bc#CCB.7 2F@*+\!P@RFz z@`aɥPRTʥTʥTɥ\ b݀}o]s~Nin^1PJMs?*:$0[  \ \\Ƽ;aendstream endobj 389 0 obj << /Filter /FlateDecode /Length 178 >> stream x36U0P0T5T06V01TH1*sP "uAtWBWPHHrU()*M*w pV0w62wwvvrllsJsZ<]?ڂ?x[ow7֮]cPCB W hCendstream endobj 390 0 obj << /Filter /FlateDecode /Length 192 >> stream x36U0P0a#KCB.7H9\q0m2  \HrU()*M*w pVr\ b݀}o]s~Nin^1Pڒ~[]~^#=ƚ5No"/j{E5@B W L4endstream endobj 391 0 obj << /Filter /FlateDecode /Length 197 >> stream x36U0P0bc#CCB.7H9\q0m2 A @Rz z@`aɥPRTʥTʥTɥ\ b݀}o]s~Nin^1P ÞN_~_^>PLmq~vA#B W <[endstream endobj 392 0 obj << /Filter /FlateDecode /Length 182 >> stream x36U0Pac#KCB.7H9\q0m2 @Rz @"9ɓKW4K?KK)YK%ڐ KM V8qy(-<'Pz]{vwԧx yT7Mlmap`rT P25;endstream endobj 393 0 obj << /Filter /FlateDecode /Length 206 >> stream x36U0P0bccCCB.7H9\q0m2  \%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bg颠`vMK?;pl=Ƌnap`rT vB?endstream endobj 394 0 obj << /Filter /FlateDecode /Length 188 >> stream x36U0P0a#KCB.7H9\q0m2 @@)c=C] ɥPRTʥTĥTå`ȥme˥{+esJsZ<]i|ak+%\k7o+kf-sxk~#Q?GǴAS!+ 3lendstream endobj 395 0 obj << /Filter /FlateDecode /Length 183 >> stream x36U0P0aKCCB.7H9\q0m2 ́\%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bg颠‡nܗOYNP01(pz*rr;endstream endobj 396 0 obj << /Filter /FlateDecode /Length 230 >> stream x36U0P0R54S06V06PH1*iHDLs2  L Ar@29ɓKW4K?KK)Yq62wwvvrllڹsJsZ<],s*p|&buQ`K-Dlץ׳++?ߨ|B /\ezpLGwL \ \\<HQendstream endobj 397 0 obj << /Filter /FlateDecode /Length 187 >> stream x36U0P0bccCCB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bg`ss~?y ~L$AS!+ {>endstream endobj 398 0 obj << /Filter /FlateDecode /Length 181 >> stream x36U0P0bc#CB.7H9\q0m2 L@@)3=C]=K 0UHrU()*M*w pV0w62wwvvrllt29y@-vv\. j yX[YC=20rz*rrO7endstream endobj 399 0 obj << /Filter /FlateDecode /Length 186 >> stream x36U0P0V54U02Q01RH1*iHDLs2  L Ar@29ɓKW4K?KK)Yq62wwvvrllڹsJsZ<]p`OQ+Y?6%?L)U[`B W >&endstream endobj 400 0 obj << /Filter /FlateDecode /Length 203 >> stream x36U0P0bccCCB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bg颠OӘk[aK_e~WFx]:#B W Bendstream endobj 401 0 obj << /Filter /FlateDecode /Length 170 >> stream x36U0P0bcCCCB.7H9\q0m2 ́\%X*$r9yr{*rr{Ur;8+)hC.X.}7}gg7 7F[A(㜟SW bg颠LUO'W02pz*rrO9endstream endobj 402 0 obj << /Filter /FlateDecode /Length 189 >> stream x36U0P5Ʀ F )\\`~.pAd W*T06r @Rz`P!9ɓKW4K?KK)YK%ڐ KM :K9?47ΎEAmg nn?KSڙC5?!p]U \=z@endstream endobj 403 0 obj << /Filter /FlateDecode /Length 174 >> stream x36U0P0bcc#KCB.7H9\q0m2 \HrU()*M*w pV0w62wwvvrllt29y@-vv\. &%ZsW@b\=188endstream endobj 404 0 obj << /Filter /FlateDecode /Length 187 >> stream x36U0P0bc#KCB.7H9\q0m2 @@)=C] ɥPRTʥTĥTå`ȥme˥{+esJsZ<]4/_|/_U=֖,ͣ1::: AS!+ Ĥ5endstream endobj 405 0 obj << /Filter /FlateDecode /Length 202 >> stream x36U0P0T54U06R0TH1*iHDLs2  LL zdr.'BIQi*~8PPSme˥{s;qy((?2h>ħɳ__zwBַ {O \ \\[C\endstream endobj 406 0 obj << /Filter /FlateDecode /Length 178 >> stream x36U0P0bc##KCB.7 2F@*+\!P@RFz @"9ɓKW4K?KK)YK%ڐ KM V8qy(X|UmEFXXr&.WO@@.Fw2endstream endobj 407 0 obj << /Filter /FlateDecode /Length 187 >> stream x36U0Pa#KJ1*qs$@*+\!P23T5ɹ\N\ %E\@E\@5\N \.ц\\nn@n.P9?47ΎEAm׹? _5Ym۹<O$UXl U[qAS!+ s 3endstream endobj 408 0 obj << /Filter /FlateDecode /Length 185 >> stream x36U0P0aKcsCB.7H9\q0m2 ́\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OE> stream x36U0P0bcc#KCB.7H9\q0m2 \HrU()*M*w pV0w62wwvvrllt29y@-vv\. &"3kNp=~{ 7p04pz*rrm:(endstream endobj 410 0 obj << /Filter /FlateDecode /Length 174 >> stream x36U0P0bc##KCB.7 2F@*+\!P@RFz @"9ɓKW4K?KK)YK%ڐ KM V8qy(?[w`ǷosX\=6lendstream endobj 411 0 obj << /Filter /FlateDecode /Length 193 >> stream x36U0P0bc##KCB.7 2F@*+\!P@RFz @"9ɓKW4K?KK)YK%ڐ KM V8qy(XpoPjσn^1myzo_ro꫿K+=\9'j`hrT z<endstream endobj 412 0 obj << /Filter /FlateDecode /Length 199 >> stream x36U0P0R54U06R0TH1*rEr4H<++\!P@ML Ar@29ɓKW4K?KK)YK%ڐ KM jw)+jtQPre[w{]oן^Ga|tt4B W n ?endstream endobj 413 0 obj << /Filter /FlateDecode /Length 172 >> stream x36U0P0bcC#KCB.7H9\q0m2 Ab Fz @"9ɓKW4K?(˥& ] b݀}o]s~Nin^1Pڮ3^_2W+ 8>.7[S.WO@@.i80endstream endobj 414 0 obj << /Filter /FlateDecode /Length 187 >> stream x36U0P0V5S06T01SH1*sP "uAtWBWPH H$r9yr{*rq{p;8+rDrr;;66 @ܼb;;.Os&.6, :^5e|=D}Ewl\ap`rT ?{endstream endobj 415 0 obj << /Filter /FlateDecode /Length 188 >> stream x36U0P0V5S06T01SH1*sP "uAtWBWPH H$r9yr{*rq{p;8+rDrr;;66 @ܼb;;.O8|Õo^޿VW:Dukj+DX\=7> endstream endobj 416 0 obj << /Filter /FlateDecode /Length 155 >> stream x]0C|AS.ea!KO O:ٖ_3\{ @&&,aM 1yQ크ljWm8~,hiw b0=y:UZk[_TbkJ\*Fy hzMendstream endobj 417 0 obj << /Filter /FlateDecode /Length 596 >> stream xVM0+DMfm,JU]qeHHU18dsJ*o<όy PǾ7ww]+vދG{߾69F'Nx {ԧ|E$ȏ+o{?!Pi8&oY %Co>2PT kMWd8 Lin~Ӛ G&TDHԯeM?T@'>N4jq\*ECh߿%>l>%u(amTvPGP* Yl DPL)c %z$F9Rz D<G΀EN> Y^vikC"4#4`eYMe5cT`MJ+,6,P-Nfr-` nXf'aٙ"\iw9+y\CSBX]plhd|O`g> #0B&q2>|o`endstream endobj 418 0 obj << /Filter /FlateDecode /Length 2477 >> stream x[K-ה{޼ZpPgE~i-loK0EkNFSw[F,T52iέ%`[$XG۳&/LaDCM, y?Ds\;8XsXN`cs9xFs(05O_3 U9V FSri5*AApCu~2x3 ?W !HFKLǜ=%^=;A_m*A#d;yP"(.( 񹮛0բ7BG2X.Ug=[bFz) dlLÍWyYd'a:I;>;S {%f;tzL*ӖJ_{dbd]kbD[.&֭b:__b).wr4"w") L n\r˚^o0[? cb?Y[$gyUy.cU߳PjG;,[]Cx8/k "5_Wu? iUgUFo3B5z Aw !g~LS7F+[H,-w=ҷ"j{2-@TԑεhY}z er*^3mbޢ a[}X011#7ΓNS 8p8"l(w5N uuO2f&.Rx^N6_ߒf_Xq7̦8W:`'X}3sM!3b 2Ͼj9 4?uO3u&qTᐼ!VQeOC! Qeav $md PYcGVv 0D3h۞Ƴ1,,v-o=s"#M~}̳^g P#E&eQ_((e=׳ךUV`0iJFY=^+k>ፁ*5~;aãTf.<2V6Yn.s`KlBH6'3 [/wI)poHA5`J7u`/8Tu`])E9h'$yFC/8Ux {M* ym `XhFjH1u }N@2x2yr 7ّ.SZJPlWEJ> stream x3T0P0U5T03V0PH1*sP "9\\ y\ AfKS=CHrU()*M*w pV0w62wwvvrllsJsZ<]N`3=#"uȔGW`!/=_V{~_"kpODZy{^{IEgl8̙sE@ǐMG-AS!+ 5Hendstream endobj 420 0 obj << /Filter /FlateDecode /Length 158 >> stream xm= @rN1fwYI ."&U RA$DM<^@_llc;ҟpoР _.aŎ(XN"g]AoUHj!M(iB*S,Ԓ#IsVU&aupqﱏc8=endstream endobj 421 0 obj << /Filter /FlateDecode /Length 239 >> stream x37R0P0U5T03S0PH1*sP "9\\ y\ f@@͖ z@) ɥPRTʥTĥTåDrr;;66@\9y@-vv\. j bXd>!`ϡp^//G_H24m[]ҽmn{'l1h:,| L\ \\BS:endstream endobj 422 0 obj << /Filter /FlateDecode /Length 214 >> stream x35V0P0bKS CB.7H9\q0m2 Ĺ\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OE3=O~pcD@_"we{-69kp{fX\=vPPendstream endobj 423 0 obj << /Filter /FlateDecode /Length 203 >> stream x31R0P0a csCB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OM ]Mnq^VwmrD'W=um9a<: \ \\h;endstream endobj 424 0 obj << /Filter /FlateDecode /Length 218 >> stream x35V0PaS PH1*qs$@*+\!P\$23T53 S\.'O.}O_T.pR.}J.}gC.}hC.X.}7}gg7 7F[A(㜟SW bg颠ZZ?N!D??Ç,W_Wc?n[v=׶)ۇ08pz*rrvMendstream endobj 425 0 obj << /Filter /FlateDecode /Length 201 >> stream x31Q0P0b ebUI ? " TWBW!H $ t ,T!9ɓKW4K?KL:8+rDrr;;66 @ܼbb;;.OO4>dowd>wY`_mObgﺣ'ƙtAS!+ e=Hendstream endobj 426 0 obj << /Filter /FlateDecode /Length 194 >> stream x35V0PaSCS CB.7H9\q0m2 L,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OE3O~xU( ~>QGS#  \ \\gJendstream endobj 427 0 obj << /Filter /FlateDecode /Length 205 >> stream x3T0P5S54S02R0TH1*䂊@.Ipep+q*Y 0P07U5ճI*$r9yr{*rq{Uq;8+rDrr;;66@\9y@-vv\. j > stream x35P0P0bsS CB.7H9\q0m2 LL@:RFz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]l?9xb4{CqM_{r~߿]_j, \ \\-Mendstream endobj 429 0 obj << /Filter /FlateDecode /Length 186 >> stream x35V0PaSCcsCB.7H9\q0m2 L,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OE92 >4_> stream x3P0P0bcsCB.7H9\q0m2 L \%X*$r9yr{*rr{Ur;8+9.ц\\nn@n.P9?47ΎEAmaS[)އ,U/͗u? mon{ pD#B W %?,endstream endobj 431 0 obj << /Filter /FlateDecode /Length 191 >> stream x36W0P0bcCScCB.7H9\q0m2 ,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Og_o߂nYC? ݪK۴DX\=TKAendstream endobj 432 0 obj << /Filter /FlateDecode /Length 187 >> stream x35V0PaSCcsCB.7H9\q0m2 L,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OE3R> stream x35P0P0bscsCB.7H9\q0m2 LL@:RFz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]0~tukbn2wҭ[o7g_{7^/JH?.C endstream endobj 434 0 obj << /Filter /FlateDecode /Length 155 >> stream x]0C|AS.ea!KO O:ٖ_3\{ @&&,aM 1yQ크ljWm8~,hiw b0=y:UZk[_TbkJ\*Fy hzMendstream endobj 435 0 obj << /Filter /FlateDecode /Length 195 >> stream x3T0P0bc3sCB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O;gD(T}UW?Q^mIhWӬ \ \\HDendstream endobj 436 0 obj << /Filter /FlateDecode /Length 165 >> stream x% Pk=p^#Q5NF $as6 u|?ˤIC9^ߗ ty6-pD 5]_KɶҺ+( 23Z@" cmsOESVqp:0y3*H+endstream endobj 437 0 obj << /Filter /FlateDecode /Length 118 >> stream x @Nendstream endobj 438 0 obj << /Filter /FlateDecode /Length 201 >> stream x36U0P0V5T06T01QH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-9}ɽɵv_׿43kmnE_60gbGD B W r~@> stream x36U0P0b#KCB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O;q|h t*:endstream endobj 440 0 obj << /Filter /FlateDecode /Length 205 >> stream x36U0P0aCCB.7H9\q0m2 ,\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.OE-7_pl_rorUod㿭lu .DEE9^z^)5 ,\ \\Cqendstream endobj 441 0 obj << /Filter /FlateDecode /Length 217 >> stream x36U0P0V5T06T01QH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-9R|Ao_dM_:]uruߦcEYMmHlhmap`rT :Cendstream endobj 442 0 obj << /Filter /FlateDecode /Length 193 >> stream x36U0P0bc#SCB.7 2F@*+\!P@RFz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<].8ov7}[~Ta"#6X\=bBendstream endobj 443 0 obj << /Filter /FlateDecode /Length 213 >> stream x36U0P0V5T06T01QH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(a=OhuCfW58Kږ.6V4†#: \=٭Cendstream endobj 444 0 obj << /Filter /FlateDecode /Length 215 >> stream x36U0P0V5T06T01QH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-x~FENKSҗ/M/?{1P8MyW\{{t;Wwˆ#: \=6Dvendstream endobj 445 0 obj << /Filter /FlateDecode /Length 195 >> stream x36U0P0Q5T06V01UH1*sP "9\\ y\ F@@f &z@) ɥPRTʥTĥTå`ȥme˥{us;qy(,0l?puΆsG,ٲeWlҥk+ ,\ \\2?endstream endobj 446 0 obj << /Filter /FlateDecode /Length 224 >> stream x36U0P0V5T06T01QH1*sP "9\\ y\ F@ & z ) ɥPRTʥTĥTå`ȥme˥{us;qy(-oixȾׯ/p}åۦѱ#7BWɗ{Zzn۴:l" ,\ \\U%Dendstream endobj 447 0 obj << /Filter /FlateDecode /Length 204 >> stream x36U0P0V5T06Q06TH1*sP "uAtWBW!HHX($s<=}JJSÁ=jhC.X.}7}gg7 7FK9?47ΎEAm6̾[;O%c>d}YSo fEȹFGS!+ C>Wendstream endobj 448 0 obj << /Filter /FlateDecode /Length 206 >> stream x3T0P0R5T06S01SH1*sP "9\\ y\ &@ & Fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-+~?C᯴_"K|M~dHsqfe`rT ԬEendstream endobj 449 0 obj << /Filter /FlateDecode /Length 193 >> stream x36T0P0R5T0P06TH1*sP "uAtWBWP!P H$r9yr{*rq{p;8+rDrr;;66@\9y@-vv\. j }s ܫpo-rC^7oSDCB W 8hendstream endobj 450 0 obj << /Filter /FlateDecode /Length 211 >> stream x3T0P0R5T06S01SH1*sP "9\\ y\ &@ & Fz@) ɥPRTʥTĥTå`ȥme˥{us;qy(-yx"H0A~&*%__'$]o{&e0a~ \ \\I`endstream endobj 451 0 obj << /Filter /FlateDecode /Length 195 >> stream x36T0P0R5T0P06TH1*sP "uAtWBWP!P H$r9yr{*rq{p;8+rDrr;;66@\9y@-vv\. j 9Y9ڪM~}UY>7n{:Xv'LBS!+ 8endstream endobj 452 0 obj << /Filter /FlateDecode /Length 185 >> stream x32R0P0b#SsCB.7H9\q0m2 L\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.O(|3_2Wo/<_\=0@endstream endobj 453 0 obj << /Filter /FlateDecode /Length 227 >> stream x36U0P0R54U06V06PH1*iHDLs2  LL Ar@29ɓKW4K?KK)Yq62wwvvrllڹsJsZ<]s $s<ģ;ʷ w+ҽ;׾&̾\o^Z/읫e&nM  \ \\$Hendstream endobj 454 0 obj << /Filter /FlateDecode /Length 190 >> stream x3T0P0bc33CB.7H9\q0m2 M\%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Oe?82pOHrR \ \\?JE:endstream endobj 455 0 obj << /Filter /FlateDecode /Length 175 >> stream x=KA Plsj1)5IBЕPuBwHeς fƐ$`*Lv %zed9 %)%GH2&cpC0˩C\Xp=RJA!yضŒ4NcVř'Ч=k4t͵5AyH |Z:mendstream endobj 456 0 obj << /Filter /FlateDecode /Length 205 >> stream x36W0P0bcS3CB.7H9\q0m2 \%X*$r9yr{*rr{Ur;8+rDrr;;66 @ܼb;;.Oe"-o7*n҇~߿*Ȃ \ \\UFendstream endobj 457 0 obj << /Filter /FlateDecode /Length 166 >> stream x32P0P0bCs3CB.7H9\q0m2  M@:RFz z@`aɥPRTʥTʥTɥ`ȥme˥{+esJsZ<]Ԗ?L\B W <endstream endobj 458 0 obj << /Filter /FlateDecode /Length 194 >> stream x33P0P0bSscCB.7H9\q0 2 LM@:RFz @"9ɓKW4K?KK)YK%ڐ KM V8qy(-+H?*p}qY f;10Y+:7p04pz*rrGendstream endobj 459 0 obj << /Filter /FlateDecode /Length 177 >> stream x3T0P0bc3cCB.7H9\q0 2 M\HrU()*M*w pV0w62wwvvrllt29y@-vv\. j [%_dW['$~Y8\=4<1endstream endobj 460 0 obj << /Filter /FlateDecode /Length 194 >> stream x36U0P0R5T06R06TH1*s9\ZDgp+q*( PH($s<=}JJSÁ=j ] b݀}on.}ܼb;;.O>s> stream x3T0P0R54V06S06PH1*iHDLs2 M L Ar@29ɓKW4K?KK)YK%ڐ KM jw)+jtQP[V*%yrF/w ~KVŘ<۲#NB_(b [  B W QD_endstream endobj 462 0 obj << /Filter /FlateDecode /Length 170 >> stream x32W0P0aScCB.7H9\q0 2 \HrU()*M*w pV0w62wwvvrllt29y@-vv\. jr*ܾƉ(ܩP_59endstream endobj 463 0 obj << /Filter /FlateDecode /Length 200 >> stream x3P0P0R5T02U06TH1*sP "uAtWBW1P!P H$r9yr{*rq{p;8+rDrr;;66@\9y@-vv\. jv&|ߨ0Dö~+P@c+#B W ";endstream endobj 464 0 obj << /Filter /FlateDecode /Length 180 >> stream x32W0P0T5T02R01TH1*sP "uAtWBW!PHHrU()*M*w pVr\ b݀}on.}ܼb;;.OE[8JpD\[ćC  \ \\`<endstream endobj 465 0 obj << /Filter /FlateDecode /Length 183 >> stream x3T0P0R5T06S06PH1*sP "9\\ y\ &@ Ɔ Fz@) ɥPRTʥTĥTå\ b݀}on.}ܼb;;.Oe2{:'+owCռ<<\==Tendstream endobj 466 0 obj << /Filter /FlateDecode /Length 187 >> stream x36W0P0T5T06U0TH1*sP "9\\ y\ &@ @z @"9ɓKW4K?KK)YK%ڐ KM w)+jtQ|rGݥn6wfo[1wVF.WO@@.ȶ89endstream endobj 467 0 obj << /Filter /FlateDecode /Length 211 >> stream x35T0P0T5T0T0TH1*sP "9\\ y\ &@ @z @"9ɓKW4K?KK)YK%ڐ KM w)+jtQ2Pofjm[\wg[ޛ2WoJco]AS!+ }QHAendstream endobj 468 0 obj << /Filter /FlateDecode /Length 195 >> stream x36W0P0bcS#KCB.7H9\q0m2 M\HrU()*M*w pV0w62wwvvrllt29y@-vv\. V56б殈]7wݙeӾn~{/UP _-μ?8\=;endstream endobj 469 0 obj << /Filter /FlateDecode /Length 204 >> stream x36W0P0T54Q06U0TH1*iHDLs2 M L zdr.'BIQi*~8PPS!K!A,`c ΥSW bg`j׷mۦބnk3mʚ1"сS!+ Cendstream endobj 470 0 obj << /Filter /FlateDecode /Length 181 >> stream x36T0P0as#KCB.7H9\q0m2 L\HrU()*M*w pV0w62wwvvrllt29y@-vv\. j7^;^}R.]_eׯz[%"~04ppz*rr5endstream endobj 471 0 obj << /Filter /FlateDecode /Length 155 >> stream x]0C|AS.ea!KO O:ٖ_3\{ @&&,aM 1yQ크ljWm8~,hiw b0=y:UZk[_TbkJ\*Fy hzMendstream endobj 472 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 284 >> stream xcd`ab`ddds H3a!ߏ=<<<,sn+݊ #wTs~AeQfzFcnjQfrbobIFjnb ZRQZZT9?$H7?%(/5'575ш)?ӑP;A.\ؽhQiw U݆ .۞o2~}#۰V*_ ~ Mf{,Prendstream endobj 473 0 obj << /Filter /FlateDecode /Length 1606 >> stream xYKs6Qsd@vt2MA( -KwhN2Ýf!&qJ*afP.9ڋʀ>ʗ/^i2^΀`fD oӷUy d8uFF1o-2l#!D[o&2tpjy84Udj;u9h THWg (f2ry|?GvgȨ7/IJկUQ)?KTpr.ҼAnbqHIaF:&*zj (OFAPJ8|`R>c7mV rSUwG|ļ6bXh a]ޮUVn6EvE:lӄtk⥷ˊh%H5S?$rCȊn.Y׊a#UI'ƪniv씊p (oImTn$]-Cuؽ{޼\@ёX4ٺ>K_TOo`!+\t6<,=A]Ӂw"tl7shwg{ OxV؍,Jf:Fi`uߣVUYnqDjqTend:Tp8|5qRQ65~Fa#ƎX) 5ndLۗ! mhsqY6Uө.:Zľ:50EYdG[w.$H(GNGqH铁r1:w.Hp_n5~ԭ)V=f*)K'|fxHXE\T%a`mKyC0жu噦 mK^1ZvŜ$4xҷmxJXyOdF_ >ˬY ҿagѯJjvJCiMIɰ$< a6y;HV3ɦOd3 |}g_MZlS& Ikv2IɯK&| kɰC&oJ&I{](eMVV۾5e  I`Yt]l,,oOFVAB wX.hy š T-~/endstream endobj 474 0 obj << /Filter /FlateDecode /Length 92 >> stream x+T03T0A(˥d^e\\` P*9W) H!$ UPPH@(˥ah endstream endobj 475 0 obj << /Filter /FlateDecode /Length 2187 >> stream x;$mJ]JW@@ޝ!ZG2Yӽ22rT#3#q|ǿo>˿%QiβRkKO'<zU) |yGi2S=J$d8~LU[Y.gZWQYu2S^L}ٲ}쏯2zN>)|=l+]>f> 8.ϻ- gF౦MYLb'qP2[x# Eـh/L@W#%FHMsl IOH$zӡ`沥ܫ'gDs)N#= FzZ DψD'At#IÈljhtINb룑yB[#݉&zti $ˢkJ؍HjF:+^7,%KNlF['=- #THvp-dij#^uaD0AAgAbdA5uM&)Ƥ6{n]KqF3fڹnkqm?ffL=:y5gD0Ysk|UҜBFq3h(xElqi([n`6?XKF9sL4Vh18|3y8;۵.C!%5ꋔ ȓzSWʵ(z'UU\kԈਛUkiuqzk9_+khPv/7&o6B]oh!s{=ߖMT鶠]m[N:--Yn۫}--&5`ҐH+BRa$F鍤gyJ8i;7Fj$ "LY i !b1!_LƋBcxFB21KP3X L5=("x4SV",֫^4֍WTrg;=ėi ~ 'UdL)W8@ztHu1qLɔ FCc( ,v{|1hE_ycT'˗i^_]fNaX^z 5 DKX&)PI/u&^.&Svj=6Aa{g bњ ݆ȝ VJ#o"ӥ£ut9ip$ReiL3t.0KL<=eXR,G;)c .(ulwI{ǎO&afI[m4PdB̎4D-"5[a@[?4> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 477 /ID [<5b5e2f2a206fca65331731a672930708><3ba91b0828814a329905888f410ac1b3>] >> stream xNSQ-TBKbQC4`bWqbqp/DG'/\P9:'0^D. !F"G1#^\F. / o%;/'c›1q'į HK]=)pIxE+\i BJxNf9"@hA0):l˞?^Kw `~`X݆p>ȸ مM}J]DmgX-ͫomGnYv =4QWqɞ8[=weY k W0>`"[UNșr*iЧqAX28C&W pR Si<+p mW砍exx_:lS(▽> stream x\[s6~_mӒ;8I;',6[Yr%9Mi[ivG saI 'ADB2%(e&bMMJ,\ H"ZN( iMRõ$` ^D gCdjK$܀B6%4%\Ɖ2BDL-W0h-(C -ehE8Jh%䡩Rpѐ)<<8$?,HCkCCz8dVh$BB+2-]@BNTXh1%V*dR7 TB% %+PN-dyJ^p(GA&((P %da4#`!!S|((H%  ƒX@p-C(t],R8LH@VZx J C BhIrFjD xt-mFmx>__~ql/*vF|/RPZA)go M>|''@"^6SKNF||r7ΠWdz\-NjvEO gj %,6|_v`~7[!dI K{ @ē} &؝?)w2ʄ++hYgJYgsB~󐟇">VPfr->_~r޼uGLJ*gejI^=zqӽCaܒx>gW|kr}=Z d)WS&w+W/^6wOV׈&aSit󚱞9ʄpfPBqYOY}iE+Yр p͐Yףgxkv5u;̗K@V7G*yXmkIއf>#RѤMT8MۀQ> ґWߏAguo$RvʑF#4U]5NK/3sWr ) /̧ScTM:Fqr8} ܌n/<y2el'p?')B}Y'?żqaCYP -6#B濄y_チB!  qA\^`I)\mmĪFMvզ%5NtCX g8} ) vʶ X8w7f^D5z+y Fl8c9y@_48u59:h$4m-6#@XU>xg_0iLc 9:m t.F၏N3z`J)`hbrmHmF%@^jxS1N^ʵڕ }ҪjxAΈ^C6< Mx9h4 xC+OwMKwXk+ K_dkgl/K샴}`o^|xU0(S9_0L$ /jEѶ+H'pGz }v[ ޏT56^A\]6I+oN;~;=wy,CHE (6,M[HU]V\\owz8Vo:;TpGa㌚xDHw;g2u]?m= //Z!CmL|=NiO1-&)xD;x*_n/u:B7;Pq Iqo(B0,5,~h)A+#L,4D%u1Ta9Hpl^c{Zڥ4>_xׄ.F(B~8jzv|65 :(}JHqPk#jȦD=% J-*%uXigf(/9ғn e>dMm&24bdնZ̽>5{cQ.㚆ս>WnW3MB)Q]F x#j>ֽ@j*ʪKAAgiYi4ggo޸ &8I6vl{>~'N 6\C.,q~gEG v+Z=t8GVH:<}w~xtS);Rw-pS7c7Nt舭֐π֠3kef=:sh=y?> stream 2014-09-26T17:54:14+02:00 2014-09-26T17:54:14+02:00 dvips(k) 5.98 Copyright 2009 Radical Eye Software ms.dvi endstream endobj 82 0 obj << /Type /ObjStm /Length 1533 /Filter /FlateDecode /N 78 /First 675 >> stream xYmo6_q7t|I(Z`-۲ :L"ԱSKٺd˖`9k9R|!Rz)wd4JE@!%ĩ֖&6hȥ(&2b4G<QӔ"0TsH&ecjHe,m,&Pbމ ԓ&f S2"a4ِ̚JK:sFa.̎ؓ2z cL*caFXJ#%$Y*#V!0ʓU4%)^Z6ZT A ܆g,9x()-B`Фil2 `)l4ehy,1fyX#j<+m9uYa29 1>;'s 3pkz,UBX*LC Ӭ{ٴӪ}=M,gey=%gM,ڝrv?ǒDՏ*p~ p6G)% *?Y-E?wQFP 2 Zō *AbȠ[ a.e`ll{&j L\?0&vCl0n. JUh'ǟ㼌dt|''oF{6.u:Y=X]5S5~ʛ6؎CU(2~r -f[qYݔXWY>.{πS{zTŒ8U,o"K}|1VxUsiI$~/'q:?P"JN!}dt;-6H[6r9{X_C5.,6ֵ t C2Nbr|L&mr'FZZ$nwq^.2كWM%hOn ;J{C[sՖ9J\,k@A[m(` qC@eDBuB}!P*IНpG$Xu$:>ds $Jt'C5Pɀ6F=3J MW?To\gn )C%k~flm_޷ٺu(v{xm+*n߷Lvsy &Ogm|Xmo<5[jL_dendstream endobj 161 0 obj << /Filter /FlateDecode /Length 5359 >> stream x~7Ǘ{bsL}G%F8c6޹Qy?|+Fvhap.;!F(eMN*9Η`> lD B) I.xLF 2Qm *ʎQF;ܤL<-ը/(|d(o/mQx©c&lW.VQGogP1Z+ȤFmAT%!`30Z%P<]& BJ=<@bc a83%1oD80s/VA;dl1jtg2f6SFAY-31hP,绔B:=^hMLwPһdڻBE +Ɲ/bvGF?M T %c*˧I1 xvT'} vo{X]Jeuyf'g}}Ug69DSY>f1_ʙX=_B{ 9`9ѡaÜt { )7KB/p?૥,L[p zMG#b5HD1!66n"/nU to"BxIr' hl8>:86;oP:#8"}Dk\ }P޳!}U/G8Q)?t+xBDp/ X 2Š YMpSUYM(/$}qh -6'עE]Ta@ n*;P;*cL@̠gd kDDE(,x"38E@*B"k?w36c3fe)Lʙ B\iM'sUwH1ϓGY1# :+ x퐲!m>0 ̖ymtd_!AHEP`R,a X8`)/ cIH5BA Z)t9耉NF'Bez7EnyH$Uf'M;(TyLZCFӏ[6,yb:?f~%ˣba 6!pv^ m2l7%J@k # @] mԡ$6hm=x.nKQE`fK=N[Qt:b&ꗊ=? %LokY'dKp)?CSULڷP;QFYxl?]BH2sK @ md??0 tCE1&y4;,3!hÐ5Ft=N T%w0@!~c )]L.G~$9Oh<5^YΗ@&[_؊dGm|Lgu>7J.<%dVk2uoS [*ςY mW塺}FjX_蚀dJK΀e:40o@&QM5lVZe_N"AS2fW}BKˉ⹃mKK#sv a5B:1Vf q#U40e (g)yS KS!0$R?¥K"|a3[k*Rp^CjeuWha/dڥ2$:NʈT0d]mjnjz|`X^f>/KkP:;z mĩ1u `YD᝖jFv]7A_ɫ-Hrߤ(kv輔uRׁGdasxY}4eTakj`uT6%W`dڥSS )RỈnz J1U"dYJRX4p_$TYo ?ѼQȢshư + J[Ffjqb'Bɍ/[oTH7{4 i}Z,+mQD@SL ӫ ծi⣮^}4#d]&GP)O`q欣e‰׶2o$^=~`$iq ~k6ʏ5x¬Ӓ>Wgz Wk$Rs[J"zn*{ 17O{:'~$ !Jk@;}uķ&=SjtG&cUs~EeÁ氜}(UGDW ڇRm PlzE " 1$p,)0Rw|"3@HQPS?@z*HE %]h]6)BnaC^oIyKs!zˣ4M0^W-$ A 0=y8eN8 5aNʓ0ڂo-j;utI%*т_P9AN,L,#D`R*~#9Bp' Q_S;W"eWocb# vB#'t8`H~̎PS,2 x!Ļ ;|Wt]SJHGޮ:&BL3ؾ5y]k2/7VǷu=;*ٚH>'5(C}Bk#1 ;469_Y1f^-F 8MGJĀq%S]{jnm}A\RF(կ摯>PL oh6+g:œs̋3 `W}hl.g&130[c5i;[oIcngt#:y-3Уޔo_*O>x??A\]22G֭\w&4aL/R6!V]T,5M4VbZeߣNDzI\e([?&,fc2\EˍV ;sa] >WQ2g#,otz54hkPK<):ҭbT[Mؼ^џ5?$IkbgX~uwK L1}pgIwL_p, [wŽ\-(*xvҖse}M^-^%(lO樬Ơ*O'W3/h ~o]u0QY"DUٵ+\q%۹1sY~@M\Tx ߐVZ6 ,_^!-2i-̬zJ@z;_K>.?ηt[N -:/zd&`i?Z`&&N5.kƻ_<*O'?1> stream x{PSWos[ҨTn[;vUWKZ+VDyhe)iI @$ȓ{nB &B@ EVEQ[wvnj tol̝;sϙ{~Dd!SW$=菋sC#Bs6a25 QL4w^(G`2yeAy|Ri~A4>T+ Abi٪ܼumEۋSK$ fD2O b% VW5D"3D'bzbFH _EL>DJA63;0~;GP;-T m#ruy44JjPQnKTp1p9OF3z U"e^kgwzh#ZYg U mAO%K)}x9 YVi,Nߝ9Vy=cnHIЪ&]6uRy6senLb|.i֏x@nf' &N}1-5!cb&XI1Uߜ zo(xz -ƈ  %J)Èmm`g4, x/+l9ZŨgcPjOrQoH$dP! Hz[̘~'(7-&`~/vLl#E4N|uhzND*FG'ǥ:(<47봕z#%,s /?l:Zp\KkYujm9^KsK4T!h`,&[,6)G + +[IJ!BS nnM<'x 7!hb_~d[RxB~>ep"˘IDG0 ~4|ւZ-.Tըt;=ރ)^Wѵ)s ,9܍9~pib(Tb*Ȁ,޸q:}0*t| K&wz]-]tKM\,tt!r0Fьj]Lmt%۩,.))j #RUNe_.}uݒ"Ov@Np#v'NS#h_LxRڂ+5˷b?xmSSk7T:Փ0:;@g͠@ҺWDrܔ]RZF5`G4j LSzqOM=(Brin?خ7{5ae%oΡA& iUkR]U{*(фukNFwj_9p+b_}NYjI,+ص)pu!`oq9^IDS5 xټߟMBFߔfgٵ|5˛Wѫo˃ުHsR *Adnv҅#n1 B8i[$B71| N??o{b)S;ζmH8(5P*H 2n@fs.JFsu)|ۻVtDull?Vk"p@Sĉjp R iЊXbk L'=m!jRL4A.?endstream endobj 163 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4254 >> stream xW TSgھ!{ED%M[;u׶ZkVEYFHX/dHBXª+uCVVV:=|a> hO$}{CgĦcΛ3'D.@f j@D6NwG"yz2QfTl(9%GFQN>$bPB,Y%ܕgcڦ-['Θ9k"XOMTb3GL#ۈ2b9&XI%V/kbXHdHb41KD|)B@#&Sq[IȉG9d/7!toܰxxvi9"l#cGG2O51vتpV'" a>%7`%n[`@XG o3Lo0/!b~!;{26F16w1PN6U,鉯JNEZP[hgFG^Fh9^V[F꙳Shp (41Y4l)> :k.?!su 6kRr2R)`!HV8rja燳݁^Ώ`9s-l9p |M l%;Z uG.2)ðwbϲb  F5RFyz5W6ѐٮ$&vˆ0ܤfqVʣڏ@Gvt6/-e E -Mb6L͹џGFPVˠ٤D[:0ي&y[q>S]L 4{ݽg/f1k4Ai('8-yKR/|3 N <% &rٗHl>ȧrk !) TfPQŋm,?FCD{h!171?? 76ՐeuP'g2 ͠' :@<@!c k --8hZ6rci~e{NFn͍SY6sf DUVKt-C\*w"Ka4[tw/Elk2M-YZby:_Q^k~k)d͏bU.PULhmjPLHX'S65MhP TþR.GLvG w^?S T:> nđSrzQe+oe'ӔW%X:z&I>qoPICNspR߿p5R^)}>W]}CnI/A-߱fyʶ|~V]U<6L ta] NJ)pv$v~! @[kʼnGOfM%] 'V;A K!>P YmN=O4 P#0(r%9uyzwM͹mkШQ1gJֲYVCPչ[lԤ=p䭛C{zi>wv@E.<l3(LNm5 EL}]G0+I8<̯$33-LG@PMˮuWx^@- zܸx% ]&ܺٹnS `7f-(E8;LA( cp Mg tΎ8S@ηr$2$ii`3n-U)JK?&bг  H ǿd 9Xo @=x@M'6~oC?t0d R k7ix݀}kw|VQ(ܠ˜m@ZcҏN GN6˅duUQ(U,edLK2`g2ZF_J,Aޓ \1u^SUAEM7=g\&W+)t)jT8yxљ}5*ĝf}L["d lc?>\?a,b_=n?w7+uJv76(!'7Lq܄8%w0dJScg>j38`-V(Wvn[Cqh ؄vU^_>rH-kTgNJ $vO+ +<Ę& dzm'd , )lÌb$*w_^ŗ{KkCq~|$u1 ,tendstream endobj 164 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3882 >> stream xmW TSڽȽrj{Cm뫶jd(BaS2p$ *!$D*bZ>[mPu~Opx]uY|{Q(>'tނsLMg{?&?^\c˓ad1I8㛒"e&?)^- OX-Sqs{; %5t*IJFS!ʇ(*ZNͣ>VPoS+wT DQKD P'5DT.uW{2n۸+ :rwZ4KM$INjƛ]sZ@ij, J'E; {5=V>vċl#V/wiR/E)H-/883IQ1 [@0xɸh EmMX{ŶF jًm-J_"PYY_sd{u42̲`}E {C v&tۛ;n3|g<FFzlsh^ь9c_sCQsC ݊Z ;2(i 6eoڜME `ɩ6u 9e;ANem*IȌF"fHm P laǭE $;In`Pɸ>aK|Ix`FiN47wtp~IT#E2&FauIIqyq(0IPb?)4FxA06}/`oiVԤn3Y?|껯, sqDKfyD {p CAm霹+<2#/RyN!+4Zy/` N–WƦ>tlǦ*)BY|1qnecJA-LSŻRC/(茱OX2 gd N&I,tu'>BBuB8I<Ĵlɽp#',m{SЮ3V#[.xxg.j{3㾈]G甤eewrC?r/0ْSCO0^)lލh?؆ous&PJy1Zc@LScX8 t)Kh L+0 >__.KDG喲mxDK9`9J %4Q\-|if> IiHݻۍ7K8m۸5u9Z`\xŎs&BWUA^^•e< 3|Kz8b^|TڪP4{= ঽVtlgD}Iq1~}cέ _Ch~3D OX9j|F_ r`_RQY)ep JQ45:,% ϋ/A]maęFX Wʿ3 SguZ6<ijCs RPCT̛ܥMWMU2bmL'$ѡh# mI;,QctD}F.2o,%`Ri0ζV#8J}Uc]`ъ_~jSPP^5y<07'+JGiHbyN;#^ `ß՛a0=<И zs]734cLB[>G2>F8޽~ :x=ػ@A # %]I{S"JbP) 0G7`~!*P fKBsikj9~\{h}n$lni(JTr$g2w7RZrJT pgb.nڬfljpUQڻǸW_[Qjs? X-[]G :c34aw.}I)@uyDCZQp+y;[1hGjJ !Yd(2'P ==[AdV5,\/Bx'Bc/识##-ߡ:NKW+ PaMq8?=אcȩ֕il>{]F60!f"8+!<}"[REa-vyOb `-!FOFE ;wj/b ;YG*>x|1GY"b+esluI$veO7_RN;?~~A5BD!b2|Cv)]TВը,γ˲T+?^ލA&o:ZdŁ"֨*iTVPgN^|E|^.]zހ vg% GϓրO5`H;{o=Ͻ^[rH?Վevz}8Z35_㲆/)"{+\|1*VOe%4{sw?/ ۸"Y#qCfG[?0|OO\E:ogcdl9&0:R9݋_&[4iTѡ*fG>W&(B֔=w. 8ِ7D^09m;&0?LB̵> 9K? \n5r 2YH,lAtNࡡ C7O@yI M*Q%˱$ꑁ)u%*%RM!(i 0J~)R*$|Ci5 muѬ73zmmUEJ3 Q b^31]! *,=VcSZ;;Q(n22aҺM-Mv}hQŠܦ$VtP{p5ZYFrU VXk 2Jc-Wѿ?wYLQx5Y>endstream endobj 165 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 9119 >> stream xz tS)9AAbl_CwW ;X aJ@҃c!=졆G͓Ox}x)S-O]xӧ&rE[t#V<? |1nvf%R"l7:rCy-?_a۲DE^iu4Ґi#gsM@Ł*s{%\_@q?(.Ԝ)%&;<镗f% .,BDYÃǺC+ KA+٬wnId>nu;$'̣_2PE & FV"7`F"{TsP?(pu?~6EHil g7n )p}o* 3fmź\0,;%&?n{hhџc «+뛒+ -F/h%Z 7 v~A.uc@K}q<SU- n ww~tQO?"lJ]~P%V]QV5ҝpAKpX06$w,_ˠ3b9`Aٷ,pRcV8{|qXRa3, ˑq(5cC J( f'~lFS@g3+ai*aF aXKKwA%0W6(O!QH#; J )C_BN?U,,UWf 8'8g⺼(u9u84'aДLw;IJLra,ᱥsH|;|h'9>|Tc`L !٫6*FY fY^69G] C'1܆+9[?f+v}2QP\_adeIz|I6J~Ē * +8%u5y<ij X4:)dJ*ʂbLKqW'= @}Ef2'oVAv0i3)i qrK T]eExGjp%*W,&p}_F"P`.L^4 NSDl9]Z3W[j`{Ӧm纖#XrB% H5 CWTf HR2fw@]eGn&ك1<iی3eebeaA0-Up}rmVQΛS>{ϻKw}!{ڢynÌ8l3K ;ܙ/gfnLP=0blg8~aKPN̓I4jh+2K7rH^~}k#N?֭ǫ ?9!@?a_^Z_]Q A$WsϊΈ]Ʈ<̯ ̟f:@cVUFB4+h 5:UU֚kri;PfAq L`b] '`#ptwI k|k*n~D7DtONzgqu0FpodG#F~eKWinA &R g0 OީY4^ hY)d Q K LiJɖJ}+ -flC-t QV/ڽܿqƼEf#;X zx$w+W<sdk" T7ط+zM;Hѫη-Ҋ|EX4rr ktU+G8RnЀw ,/'y [HУ)G0t8\=ˬD΅ư-yQ)#5bȅPa Rq(R[ CY4+lYI}T$xL<^ s}Um60%7s[n\|2&3fgxx0t\2Kur ;Wս!*]@L~(4!){0$c=IQ6jݥM;=.{W:~בw:`A|K>ȧF&rl>]m+U'.VnXh_ۙS_b r_ =x;hN^Gh?dmjj>n 06Ҙ%1%EYG o>$TNf?+wlìัiK46)yF ˥Qtl ee x_ #ePz(#T@AK 2eQFBw0T6 4o>S~kW}ķwǡ=g5OE2żAN Nǩ=94ְa~7_Gp{!U (x9U|r T|n1F) 6_s=Xh~Piǘh ! ٷډIX2&A\"/V'3G%C58bw{ξ\vUIf>YZg"ƤqeEe㐐+ߢ,K+lo/ڶ&.+ d7;}SOzn0?x";$g;kj͙tZό2m<(!AQԔӸΓfyׄY`ndnJx}W*.F NBGMGUa5pA8汹,M"_3ww#^D{6]6aRl!Gi88w )vI&> ޖ6Ikҩ܂yCs,U&IMٜ{om>-#ꏁT9Rʱa|%#AYTjR}3SSUZ{xF7aUC)( bi,jZ([BD.C$֣8JfKXA2J@(jFɢ>q}7>2s$q>ḣ'U8]30Ed#(0C@H H J5tR:b0Qt,m4;-)h1׬7}Im,8 _^ˮ¥\bN\3ӝ!n1Eln0F}$-)0 %FQI GE-php|)iKBLH?>`?ofh 66WoKH7zy*d[ B uCOa]ב,}1Afyȵ~%1UCF Ss]ʢ<^+Xy[7 ~;w}}7-|k3j[#0jr&),?Fw縑ں{羾`<C?F CO(f쪯Jkz]H"1>/ _ꍟ;a\ӴH@|d[R^n QFҢu݀*f@1Ų/_3b OFge j7p4WeX)YA0agw _v2՚ ~g a{ΣhLGž\Id8rkߴ.p%3q}>xDv|ĭ(0iZz84== R+d>"Q+h IՑ{G`䓿6~w:g*R4¸Wc͜,C3wUY5[;'䌒1J% ?Wj$Siml@&~eQw;ǰ7ar "U9ٹy|KVDm8~1s SJ/ԷulK=:i7OVzNvrמ5/3ͣNmݰþm7OKm[v>B]J0WLfcspU@{slR ٜͤa*@=m㕺债E`]1,i_$fup Zck4t2F!_0w9P|k"ާ99t~~⟣Q^;OlC1016_UOK|j gSSQ] q $!q2QonAQzS܄h a\` i`TDNRkP_llTf$]TkaZ-TW訇% (kXh y3^~mg _2endstream endobj 166 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 230 >> stream xcd`ab`dd v 5070q~H3aSeDo_ 0012:)槤)& 200020t'glҏgOr2gV4}oIsޝ^Yҙי۝͑=}Qk+˻*9R'nq}z뤺ꚪzn?f}띹w\{帘p20Sendstream endobj 167 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5666 >> stream xXgxSWrb!eH$J0G1ƸM^ܻq21%$@ $ 2 a–oޑ${y'$skan.o]/Z1&٬glw4wk~y_/1pax ֧&egeLۖ2m]jR촍9Yq)q%A֦K]ac_榬lᾀ譹1bvO8+1`R xeoy f;_b'1$fD1M!{u|"XO, B D#̈́?XJˈ6b;1x"dCDx\}EY.#. ]pv}d#9L4E;zYo P6.^(/C풖f#k򻹊 5%4{w$ dfncfff4Y%Y( 04>.i7N6~X9l`A$;8:}$ܠ$"Q _6`|z us 4Mh;4X79~v// /{vtx=GG8oUkh_˻XiY50Wjj!g[[hII5&uftzÎ)($'""`Nz?՛'4JV7ggׅGLAႌa A4pBbc0 P嬑nˈ- Ga(vr+ڡǎ|Ρ 137&25)tB~wWccWi'! ZFrd EJ+G(2=ӆ){&\o#a7Fu{:6,z@Bm[n.D `m ,Ee.re!_F2n`ơhN_WчJ۹_xet\X(G0J(*kQ^~'*U Q"Eaӵ>2$E25=(ff^]ǰ00w pCA21]7`!x77Q?E1/0 bkB4C!e$g&&|\ȉfYaZ3 x{1ضQ7;A86CPv 3Z>:+S5uxoR;UE5NJhٺ=)y!#pfvj\UN0?.v. e""[00f@{:إE9 v8"(SY$%Ĕ#:`6)D޿na!) e]1 ~oݮ1^wq}1i/,i5O*(BtBsfHP;}zokx`'ˋTwưõ9_#%83>v@**9pa;x!uѿaBU(t=1s ^fC0&j41!ªsKCd ސuKY"ZB*bFyRHAPآ &CMW3Oj+oڋ ;NU)g(-HtS}a ks),IJg*ߧNG]mUZĹyB$IQP'2dn6\-A av X1,<-;WLG\u$/5f$ m@ 8_ݥ[(e˧G]q~Q㩑if]C|Lr8M y*Rw 1I+-Aˎ,>[q\EtlNg05#8܄鮵1qXGKv0;oOLK_%c>RWJ@@BA3̢؃vfFOuTc\GC%&!S(E\v$sit}Rx^ k,]Lz$ϤP}kQCszTi80`}q;1xjg\1]}VB<;\2L'<\o[ױ"2<ɚjCmXcY-u?@2y $8a/[RBG@Y`*M(B\o-+W22[{@j!B2ն>1y3Jդ|S+ͳayc~d'm2M9*:E(k%Gگ" aAb.6"Om>f\JuBu!V)OV>]K~WSSd8kl ,\@Hj Iwf-o[MÝ_~"PFg)@Q+2 LnwdODo^a!9!ʕʹ7/W@)*"N% 3=ZpRj,w$3 'bbb2!k{ke͙ܦΝ 6E,3ƻ{S:A)b=y0ѵYHʂ PĴf}-iW|SNItIljbfJ\>5]Ci`փik*FR)OM9>FdxZ3Yh_L r2aD鈰{5=f,UW$αUidy~"7;$q1h%:ZK՛JQNJM?l p{Gyga{@YsD-K(T(DQk_C5 }*}hXg2! ]U'%EHsH^P_]+̹&ԬnRУKk6bf-}^DCJ$EEaP-!~\L&ALi9& W$&&DC25ty҉˧r FLj,g'x>Q44`0TܑjG/s3pg::{5dtSNH#:Kdh;>qNRSݍխVԏsJB#1n1+ih=@ʊJV'Xv#r,|Eh.YN`^B$ϾMh3xƟniJluVn/5:DuX]=W5/۾}-`)@PG{'`Y鮎m!XY# ̸lx/=C']Hr7O6}ŸNGx,8+|GmBf&pݧkbtVt4e!Z| wVAQ$1|RC0MNmE@ŒDe@{;Z̳Sig<;R]Y5L&Zm !~%ܮMeNI2 JK(Lx,~xlOaSocWƉe=/,XPpW(W4E(AֆlȪY^l-iV6J.֓oKo淕HUR$ɬͯomhlNp*UJPbh6T&.8Pq1+1++)rBT+fʅ3uf<-Z5=7p%c/}YAOOk% ?XLa>I8k4cYN[mj IIxi"AX`&t݃N#hј^S`sr?Ⱦ]x/8eiĵ%nSK+{S"8Ǻ-\M  !(-ی^1yâ;"4~kSܖNx%6R'! $PNitTwZY$噔etL{OB0nMƵic%7ՔK/ONTyZ녟g VU B|RT(..e+JIL#RٵӺ aDHfE^{cf,Y3Ҥ<(ScSTzN̫*Tc+LoJLL8鏢3ܵov0өΒ7и-\.  ٺSl]}iX^x~'pl3ΓWuEs )2/"$1t] ]ΤU!4Ԗ B,C.,{6ru9Wa'WaRFμ#Zf;7زrYoPە#:'jϯW:KƮt>$*WcR9սyL)VRW Tm'vB0_fդ&? g')Y+}9f0yS߱?tpRd <ւzT 6Hx #1 q#Hl3u5~hbg F6>dAu8mfX_LW O,;=n찈[vǧkH+Kx2$ŊѫҀCjg>8vttt"v/K(!3uڛ&&n Dtc96g ($ebySGxy.4F+ĒHבݝ޺_;cxrNX\a7'縉[m5Z̥vNb4B;+6'ȣ(.4x}$ H**tZ/k҈$^uGScIfNmxzC#jD_PW/n^; IV?WSPɽ--ݙ͉j5)+ t;,@C2,ܴ}ß xb2 IEa۸-ݼ ['$T;)5tql ;D^{ כ =t52RbfpOί qPzϬ g? GRXՍjsG+mTF^3@X! G(Q#ur )j|LEUrޑʎNԜ_RGt?f2m;–fN >۰p𜸫>u]e]JEɊ,liֺBqӱuK_߿~/thZbK߃'n̿L Luap)h&u]r %D鹙IENg?Wхq o$2뀱Os5ZP3M;Hf^fܰcB sn^jQnkՕ5\j*dR;)dQ(m.%jUMN*²p/Q{|zE5T) |*T͇n\<;S&*PѶV|%_w3M[wpy9 MD1tlGsLuZGTJW~c,5-B45>AS2N Di[I&H=8p-]=~AUv(endstream endobj 168 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5825 >> stream xXw[ՙcx~hDd̼ǚit;d9&ڷ}Oo.Z+,HBI%h) n%R`dNU ><~rhA8ZJ]#/ZTO;ajeFŜ`8 9򐼞 !&\.d5K+}.؞xjO" ^oJڟoFq^/PXQ (jS?O"D(d *ݹ|%cHYpDs &g5>፼:ee4_:,yA ǻ.wg=w{t)N `|UK\|.>鍱Dx2u~QoluՑ)[&2&wcVeh {m.,P8.Q63]ZԄt~1nj$y"13pdꟘE9DUWK%W_.Wx~))#~hT\w4B-1;嵐S%t0ysT~Bփ s|rKšJ9V6( |ER3mZ ϠJղ j7ϱ1ۣߜ^\Sw^^+f^]pqON%Oǎh^'zcv HG%G6+ 珕Caջ".E^_qm;fw#0MzGWG*e6;6 mOC=;TɂSwW gsdzo`yV'RݞЭ\1wݚaidb$̳R 򏱝.IbH-r"2plVn~K76Z}WE/+|OZA"Hzp j ަjx sU#rY i:d4/[~}JruqA0H)Ժ]n͈)'äUa|-P;zm^N0  t(Lj= ͍۷1E.]\2d|כV.L?x7xpBBA&ʍZ`g˸6Vo\ÜέTnN\QxIb($x#嵆yMABnUz}@{6 mi.N$[[Bu:'ʬܻ8ZtO':hG%4:[Hc.o;t+|E0ayi|;岐/+UgK$d9~9pl;HYNWpl6t+F* Ce2|كPElFC/)Zu[,ka,,<ccq9>Yܫf2YvŢ5 m"chɽzs sK&UܐS_}0ST#HmJnJmʬҲvlaF+fy' 19ѹi[ɲ4[!$#.$YʍZ _Tb=ӟiO, 7!a7`včv"F9tq ]gzꕧ_yꕶV}B k磡lQ6!xa 0ִkt_f?Fݶk܉;(SWq5?9NV+`E$.6vs.B:?VS;F6%[7遲';u\pf%Xy_]|y7'oh"^vNA9h_Wy66nwP|~jyD&">A bkt]||w%r}i E[rjzG;OYܧܠUc/1IB, H,mǖ+ɕM?{apZLJh :RG'zrji:<UJ*1VW Qr6 q.6-1/jVVtbTK/Bg1&^!# Y*y|vƢ|gveDD]}%@Q ڀc@K9vRmӢDkl(?(A(ÜNi2LߍiՖe>^=6PXc` kY:Q3p ђF-jD0Ex7\ikmonm{>ۅ΄B~m(A쁾Y[D#8QMx0[:ر5 r|;8.:rx 1YtˡR\WFMA"L^mWJ ,[xx X eus'oY:!ιk0R(\RLDn'>hnqq,50}WGZy}Zw]يln#&n6 ?&Fύ[S90SޱYO䯋 뜢5nt<&Llњ@].ֽZ2 o:> 4C!&RU((WN|Id_sbG裼, >j-LTWu{XY^j=WgQJp$aOFcK{Dgb/1,)~&ÈO}kwbb(Ja$?I"q됀;HMQs`fppnZaP&h .١)bF:QiōkM \+z!Zbzw@;:QA)T~nq*4E/kBt.Z&~- AEgc jjoxl>֠kmwlm9nldd" yͬ|$?`rч?/|E#`'5UnMF<λ7\Gp@TK_ xS`)Oxluu*z{L1B .%O߸7^D>pÑ|j'Ƨ&WM1nsD7@P>Lԏ\}lDAM˭lBd)|| MVnQvC.o\ٯ?rýO݄(֖J@rRi_,<ּAM,JGzwܯܡM}LQ)߅3wh+avh e v\k:- }\؉D\v^k$8tㇳd[qCчsxgw[aS\KD4 umd*QB yR=ǍNf *[0XGΜ'JJX.pei傶MQ=t /x!HG?} 0Ks20Sp31:~qǤmնZVJY}rs%>8,i4zs']x8]w9v//qX wqI8Sym[t)^ӾH6‘VIKMAl\Ҷ57ɥ,OeyY1Vi񷶡CJv3؝| qsi[oRendstream endobj 169 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2078 >> stream x]kPSOE+JͧT5zFSޔCXʇQ~(>#bApMM>ӽch%3+[jAk3+e.z:9hR*Σt]¦8 Hb)npʙ4Pdfqڊex c!Ɨ2ARNI8cjNz^SbO| {[#_ |GHG wMrx~#jr-cLCe SŢRFu5БB+RG$8iEi^x8>,`w2fVeluDr.1Pf,2tz繟:Ȱ -hZ,C;]NcC![A񲘁 /y_q qkV92b'ɖ24+%/Cȵ'=!xWJ`U{S}DwpX% +Wmq-hHgd+Q=>GhYPܲմGwei2{aĜ˾YСD$wK-n]T%zy3'H]'L@e SY2em7R]NAo8q8<Ӄ$W/ ]PK8pĘiy(N6ʍ8x{/!i3&%֥:D#'h%kw۽Obg8tpsQ]7x7LXzwpx$>{C9(Acኌ4-DؔY= B(448uL= L_Ǟ1WHmҒZK~$|WWlL)m -|?*0.PWp#%oc?K_ZrG/`=ޙd'?-N&ـd㒇ϝS\1#m<a4ܳ|jck[mBKViceej5$F G>ۻbKMA-",\=Wdd ,$]hxz%D_BC(2!I7prpACDᠭ,Ȅ!/8?dT%AI@QRUZLLvpc `}?i;uሯf+ TJ,c̀lh|eh$|ݽ>|#C$I 4#?=<;Ţg__:3bZq=[70֦),0՞Vsl+i- _لI!hu׺Ʊ]2ΤADTtt2gYtz}??X;9kMk\~D\—+Ix=ʧwAL Yi{UMD>F!OW'|'<{ŋX fT2!诡:4.TL>ⱷ];&(TzVEuQdֵ '4SSŞnOG DLxendstream endobj 170 0 obj << /Filter /FlateDecode /Length 184 >> stream x]A EָhM^а ooZc\<̟Su.Ꚃcyp sgq:"WD4]E=/t08E1)?"kZJa?BH T8j3H Ɣ=%9%΢%> stream xEP[OAݡ&D V@cb|\B7ݺmY\XB"HKK o$o4mA33/gs30;w;UH;m8+zm&h3#' VNv!ܠO@_lnvm~V Ow13Q =c%kIRI7aNlCl?xY:?`SlYbEKgE^9Br_g2bY2`xXi U~` Hѩ G,59j| a& h;LIB=72a8~#G0$ÔLoUm' vUmD5V= !(޷ŵ^×9 [,F伍* 8FjCILp᫈m/a3*GՈB$*E-`UԒ[`WiidsLfyr( zck8۝Ȃ?'VaƋW&'"/cLE` %"m3x~|~Z^Z\1VأZ 9-PS{*5UѱXNҁ<^>=[.M$Ro{kjz*1WێIإYMendstream endobj 172 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 9228 >> stream x՚wս{4PS ڍz4*aL&Br%&jr9WLDMҌFYHHHB$l!3^(Fzg=}u4SUwoiVǞ}1?ʦ.*A7[-7~X4fO;ӊfJ[K{c⶚ڎo*y/u~kRoTT.TV-RU/V,]eY]W~Ε#~N `^2r\}+V ?<$X+xY`#W L1o)`)"bӂ%gAtEqAVmC23"vZմ'o8 ;_;7Osz-oߦ}9w?2awei❥Y컻<4{?i_{fΙ;'}Q۾$ځ:ŌBꯟ;?S8Q:p۪ȊU@ƍʪÅJ';n]¶&v eٌ3[Ѩƥ!e 7¹*ε^5z[cn97[QѲnMGYĭ^/t 1,@AA/صR&Hw+w{<4>a^(0 [NÞBQOVNgA<&cqK5vMNuQfKuN[ũs. 6nlYl!i%4TW;vfbSM/=k0ؚ eGO/[iS-w798:0iwn.Xt |-fSZ]N^,U$kZ+ZLFH8 Itu8/gH̘\8։Bʕpa\Nf21LEz󁼻ԗ}]ޮp88Am86/>T@ p[<<bX(,qh/w<D"x7w*Hu`LެlƉd}t'섳b7فWoĭC{3n7LNi5վ| N~з}@8'U65J"P=`6}Y: P8ruTK>]Afi܂ JJs@eNdo*2>fINsx- t@Ζ;'㐁I}u-gnrV!98AW`Hkwl^h+oN*Eqc\87 {;wj7h?Qxߗɞ̜Jb\mQjP..(߲zbz;0OYx/| ΆO1q   qgP6,֮QѯM '&d1Q}4/CEVaVkº2Q9?Xa۩4ZBQZ}p#HK2X bܭI5Bs'1'@CzN"2p>9 d_Y3@}gn{mҽ `9cH(w0h?`3&H{L*ةG$6) %.)@e]QN,.<N;ʮTc;c/3X-&RxXYTȍ{'ɕ\4V[*͂;JEaz1tN )5QlRN.ef\ao/y16R؎*<+= ti6,"89M[.8UoObFCǻg]ɲ [\L"qDY04?*Ҁ)TLtOѝ_7pp1wh\T ..#0lDb>m@eQUb1BƉ282'B 6{K2Zz ZV&N)st* îl GWOY1[iZ zl>zُ GՌ4bJ%Nw (E8n/"o?~p>Q9"m /1nw0NFu:-WЀ< AQP5EUfFzh56T+>y zyx9)qӇr ~"fߗQ;+55 տ{WG>"}q6N|[GF?vG}6/Z8oC+1-(2lmOCvTKK;KѶǸ&QJВ7U𖻯=(|L?7PN`]G'"3 2UmgT&PGLCD"˶Y,< po`(?Pdx܈"Y KX*),*ޱ|t?-oSyfѨFZs*S&1RWIB(4*y`Ŋʪ`X\x5bP ;˜;N}wXl+NhizcGR'vM&bx]$/GJ(._ͳŠ@4'GZ#f &Y@Ot N5Q3}`z9p|X=+Ysz;b4w%QڎN/Eu-޼/^P`7X!*qʬo9ׂʶª܂@p~׼/ȃ<9,rbQ Zf^0L.94 "^>z!OĔ݉ ![U!i_@3:1?GxsA?:^a578afe-Iw'C{"{{"c΀bIa((CJ@[lݢ!#m娭^z盔aAiS.: m{|0(t mDUg?8E|T M2QtLL]"Pּ|MqH*'V uvaӿwx~#U9diT.ZGun`5 nB$yA7؀x`^ׯdL7* &_*[0ѳ/ºk0IINpI-rJ?^'##!K#PaW}6C|k1J\U/9S 04R jͭ+v7 <0v@R De*̼e Wɴ}{=6X`yưoUo4L߬o6KZO D9_ páP#wj"plk([d#{{HLJY`R鍆%\Dh1^0` h>T2/ oB"3,F[ŽXXS|a8 .7E.bi g0ilf;Zۛ;u IK^$N(x<Gxbr9BK#PF9`]c.@=X30Ku{^1d5ڍ8HPtc1q1T& n;n#+ŦJsPըlíj5 ^‹e\Y$,  IQLq_Q^/wAQm P(cSCko p3H!tHKr&$ $X8@3]=<9{-; N>pE&ŒVVV'oGn@"5CΉm<΋|9QpZS?QSWKDc-zd9<~Ǒ#2Vo΂ԥȮk(?7,#LVB>- ]z+UOhHA"%49d5 ;NyӺ:dY^.72lx666+R6TՋ0``C|.6ȷ}/ԃlܓpaQu;ꎢ;=. H18?@ #)cG;F ZQT]B{n;lrnr g|,v~jʡ} ZZOܞ%6`IqSl9@fl6^6z6Vf4Ɛ#2CNZ1aS.M!51S hLw/>a?l?6Fnp%b2[ Vyš}{GS XkJ *_Kq#~nTϱOVeՃOϣRwD-rZ d:KLn+nFOe6%1H/<>Pt!b:h_q)PjRH(^r̨$cEF;؝ºn eT0 Lu2?I2 (aWp=Ȫff2(F]?(zXI07ءWJi&769!P+s2~>a1fH VSOLIF' 1F+$@9g!R1p,7kh[`xlЃ ԆrFe#TCqn\n51#?="08 \TimhWi$o ؑ䱝xWւ뒙/wU2?U UMj~,6+Dj ?-ȍRf\U 4>A؜_Jluq|2Ԥk[m-g'<#an }tf'n4H?%3>g=.j[oy9ޯf ,$:?:`1zξ<87FYWFN +bKE\u;vÄ2_ t+@aad9M ,$tvQlZۑ{t{ckT2=ZhX!p5lL܆ͧq6͢;eN+Z_ySe" oZ]Gۜc"dK'\-_\mеSdH$>}CԶ%V_-Y:K0dbwrOrw|ؗA >l)tʘ6ݕ&Sژ^(*"^SHJa1+9na_~1V l`/u]ʏTB"1_ ^Ǧm(S˒kPȕpV /,©z:O ~b0sxb=JtR6LUKq%Q< L"ݩ|~oO^M'Ol.E/yz7v]HDU֫PVh*MUܨ~]yLэcO:Wץg4…QdK׍|zjd~y{/?+28rt~5 f-t#n"<8408J ;P1LX1<. <ᰑEn[k 7sϜx`X\j0Vk^CUnIFV|3ımҡBo?;єm䦕s7@ݞ {-<o9B-ƪvȟ) ZWnjapG 26AU~uYE_///=h2tt8Ud% kc\YJh3 M vʗ}xq3<䠘6MoL$&Hxsj^:5Nq]M \΃%1;\S"Ql#Z *TX Fd[uDŕ'nnd 燶_=|޻.3Cf  Pًd{b:~")mj.Yi6d7 ߂=py4z}k%RQJd2&b!x(ߞ [uZ-nŵ ߐ7w6O~)H;&o; [_/wum-gϼ$XQC:+Hghtw۱dlof?x%=kߪA"tC~я2g~4SW|݌ [t?w n.ѻ Bx6 <_,CG"};ˍkep#ڨ6c@tZN:TCJQJ{J7BpCFN³fHZl;MiM1[MFofrFHI%#%yJf>wp>wՀnB(SCΣbl.|4m-Rkrj0p-&pg N)bA*!<ʭp~N7 g6ɵiv׽?SP-m> -,3.W>㧦%oH?QC&mc+Mz/n(Hn|Hojb_|;'Fk UiS4uJ"\_dnYH $ݪY^!t;*NڹP/QVitt^\(6hօo/W:.L6]F/H.J E-W\RU9sJ4] *Ѐ[x4mmn֦kpbߕƠ9!c1X4/I6B,H$%%1UHTK^Fu?Eؖ8x0 &lTvwvA_oluRel(w~v(vUa<{8ȅ O֏T\r5" Q3?t/ݞƓD|J: g7>,]0Y}#iq2ukPN@ hgfg{hBojCC=䆿ⒾfoەVgkh%ioaBx>ߙvўUO]p\7B&J!D3]M)*{ U\sa^zlÉ 'R6(a;M3inRkM[-vhZK6TMxݮmތ n H5N¸EҚId,y0^Lw&uE`L8{rJy5GXsUΆ DyuSTaíA~ s`#o쫭BҌ! " /j{\-3DFMɏ{؀u؀=6l{ׄ9]ʡNeX$jvH&={ܽ}`Vۉ=JRX\7uf WCHKWODNwG"%ՙȎ_T$|r=ciC}1[_jrHxC:2ᾭyEWպ2ٷcWxY} eP!ͫM}t.y2a\(}ӉC/r@?Rendstream endobj 173 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1539 >> stream x% PTeuMWPBuwaR!@SHBRHd!,,DC]N!)f)eZ440e x.}t|s7;9є4i踈 Px&<%OI@qI&sgvoEIhZ]ק *GD+E(jdU2ZeHSkU1(_% + BCBTڜ>ʼtC2Nw*tfVl-di^۩gR5#(lg.["dlʇSs(zR~?% RT u}Ӕr%s$n֣3P0{w:)9&(P6lgjf̅nMcm ^sβz>zS(hHmp 4\ghCCQ# pgHCG[17}!f K1={c/<`I(Wzaw7 Yz9^Sj|7_vLpT +RM$,`$4p~#NӉ4nY;+/_șnVŮUojjr8|7bvv zBfɴ- eE{m]0rӢRNL]Ւ(dq1^/5)+&iqh o0W݀J8 7BtU14v4.ɩA`<'5q!7:wp΍%E֪CG*] HHu,ʴba}k{PaT6e þ E ™~'tB|AjJKܥn`潚#KE8%M ي[ B(~G1՝pw#O?X?4v8wx*R`ʮslu͟%#rMk(J(xHJŰ8|MFn> M)ݣ#a;R  s]DbʏW}VsXE)L% I8AQ -|ޛS]ޢ߾.tueo! 'vo[-; [=;̧G U[S2cRXgU#^\kHK_UeVI:nOl[|ʥ/|ju'0oԊ g3$˙*K{tvΔЛt9QsQ"r1A(t :z:Y½3Mm ]zmkZĿDTy5|3$/ x2 0!;Jf=ǜ2@l&Eaendstream endobj 174 0 obj << /Filter /FlateDecode /Length 237 >> stream x]n <oCҤêi 0DC~6IwGo*Ϻo\eL9T/QxMY(-CN7WDwpYPwKۗچ^&F+0-Oqje-PE8Mu8 'Fa3S%H)0lvmmM1R@/ڗ/l^QHlq.)_e)<%Im'uendstream endobj 175 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 10683 >> stream xzxT7vѽ JW [h!uzLfMdz P:RQA=vW9kw MsL}~:wrrr5`ЈA9tU 8\($:8 e%B^ekx kļ 7Rz%tCaKƕ/Phb$d©i%fHWϔZ3{umx`Ko䳣^K_Z(^U2t_st3M>llaboaa|mEl{ bEDel16 MaSW7`l6 f`ðpl$cOaFa$Fc]؃H!l06{=ǖ`ݰ[=qX,rǺT瘱(r&wi_:r =-dk]>0끝~/yx#I=3n,|['z#DOy^+ɝOJMW?{ӏ?CLL߷ = =ϏzNjC_L؀4祿21hW_9vzHo˙"8$'i  2@$sM~<ќ7Hſv=ZSlѨ|RLsEAuXj'xBV+4(:X  Ɔp_)7Pyy3h#3J^)0בڙN\pȸ68;82ӝ& ,bj.y&Bs.bZjT%h: ꀐ^_A)Vܼ--uY4#@ZAd%x{'}/n\G}4|'6(h[p3{%_$ u&PgI~ܓg <$'sKqzňpn r ,VPT"KeŠ\Lp2;/Fk쵎J3#`-Z2ӹLgUI-^e:n]j/ht0w$ęӃpvho'q Z^"9/H[nL[YWEi8 g,7RFDіe᥀dЗB3>~p_lV ×`tӇpRs oΝ=zˆ ´E6حm"=Io$21_85.řyX!N Ԑ /Q+A%Af#0!],L]'@ʼn"LW2b8p!%!C,񧨫g7F6R`63 Pj!Fߗ)Cm\8w@Die.i5uY/P)%R"Ns:2Ö (z_į>DdD,TOq|g֮:x{UlĤ^Ec:/Q\X{n ۮ<,IPW(˕Uvѐ'A;d._ 2X$ו_V;ئZ,D_ZFtFD2 Dtj\fg~z ʤE~Y1[Xn8DR*"*}%(D@ әP#xU5 $xjF;ƲǤqiNدL=(&bڵ6mha^xQhᦑy%nV@ ȋγ{^lb_"*?f;iaPtl$ѽqN`@#"96yOh\> f;|B8j."rPR:w|SKe4;Uti)*WاJ?sh6^M~* Z&=d[¤s|+j7R`?ysdOĉ*Q "ߥS`L)Bj``PRԭ\^_$ر"Zd.A7|QYkJ88g!QKұ433c|gj-HxF`¶UV|@U,>W$@ &%&]= d^&f))(>|.'h5ݑJLa;ك"4bѥC%[ iJ6A a>c"x4g0R(;1o0D>Ņ@zHQ6.&mr]IZkMAy5NP>_oq\#1Y@w [ ^9zz(Iޯu:e e5jVURy(\g*O'(zhL SH^e. \ @sVBZdYbN2_A`*AaPm7^yնJ;LEje;St&_XShQ749ϦsjT*UYXRj\ O!LȦ5f0vBa.,ftx9gMX'˃03}՝n[-p1SMi~6 F@F`Ȭ/,O.K=g[BArLiΝSBZ?,gC-bڮ{މNůhۀg>| fN&+z7j¨"Q b<7 J%rj &mnڼ%}gN|~/MBIRK]Dt7G4*"KЊ̠1/Euҗy|ݲ<:E}Uqy^9W"j? |7>Rl'Q"P4f-@hx̸?PO9 y|s[zJJQnBIg:EiΖ&.vL̳nAhm_N9,T,nUqc}?[ ;]V<]Uȹ Or BaCLǹ;Džz/[7aH&>0v=u6qv:GZ%%,k80樦|#+WN~.e7s#uSjfd2,#'`uvhA6Y@V[]l߁$%A!~}rFW؈RVW.N'qq&[s$amo-0*q*+c0x&߳P:b og s*O_@eH8kwޥ@[>kҬ>{xA @틏=Wxjf=p73H `'[>azrU Z舆iHtȔ: !]E-iX_^Cg_"t`fZCC3fKF]" ^߫ 0dwr0( Sd9z`؀B$ʹr߃5[D@̼Bl%3Zc/a3FHmpPDlumqA]AeDV+G1ZDDs}| BkOzuDJRz9NuXG}IዳQ;,f .:V؇ˌ_TІ| s]d8Oɶ)?!Dj{AVocZ6)%%@Y,ڽa=&{8@M_O8wfW IN ~!҉V|zvo&G5ˮ,_l Y',A7ty >ə)m;0D$Bnd> ;f'&"@X)R/X0>~2 N‹r?[A4"[~_$pL*(u\?(sLVbCB!Kx91y5!of%V6/%H!c#5PR!+ҳC浕]TrX@ UF~}}+aÎr(OTMH~`"G)yhDRgx'gt7:$|aebL_n*^H(h9WVcՒ x\!yڶZSHOYbc_$& 7k.K(qKE`4E ;A6 +jVGC̣a{ջ-րzԺ~h5[2 Da`#fDaL"ʮe2KUHzgցI/RzK `^e(..-,3Rn{jr3䋳k|4;U9o|y.45ٸR~LY%Dȗa3yJ_+ٰl[MybO6wR58Fg*ܫq%bu+34Ȥc1L*UzE44FYuFKB_`ZXMB1\]me-9z8|;ƇObm}t ns‰`] peD&;H[BҊYgT tdt5. S1WJao6S6>>e"<۰wޘ MwԍTHRZЂ!ot*=Մ}QʏV[yl]^V5< "C1oܭZz"ʝwu44vN^=Ճs-GbjX<|^j_b f:}ynQg]Xe%UWh*UByAޤNm& k`2-#O.OS<ͥҮ4j"W^Vo߿aGpUͦ=sٞ./ K)N3Ý;lU.n*UvǁxAcER+|JC|cW2 D-t3m@fo&PLwKr^Ψ`nw@Lʂ0e/B | t׬mFs>r$MxtY!jJR: "e~4ֺjkm˻>BkX+ Oyw)ۖѺ2a[|=:h gul[n**gٸz~fz J]Z `wѣqDž^̦ەesNwj.gj|Ŗd,Rg@mu}gV  3H%nUDG4B v$oL0tgŊ,O4lZ%PW5@l `c3^UvpS/Ӑ~>HNG!K9UF.ʌE1ͅ2@Y,r+ke^Z-2OhT)U8GQSXVtj.z(@$Z>XiUA!)"1 ] sE^!ƅ SJ|HgG@tQZѻȀRҕ$ !dJId ~}5X}~ϧa]`5oi~ls}*֐+Y Wt$_G {siv7$/GƽGٹR"4d&^R*%WG GYk6ќ5a4o0\fV*HkI8[d>Eo D_>d9A@0?ܤA,+l0vcy UUNy,ʖk R g:>Orb/X$`"B*U||f$!7e8y1}E7Yy8nko" UHfĝ XFWFȲB ^dv6 ?xpX΢7wX:3Sd>V7u8y=.G----lڭ:IF֏r Mmp\paA%f36> 'M*"L'\r%&&QHQO! HY܃@f,€d哙g'0ߢe+*R"S⌻B?E?Dm›pe> p-]]w>¼>:捾&$+`9\;U=g:RP[~HiQ;gu%HO"00ZL&l^&Qɥ#f=G:,B,"0fE%<0Z/rL4$BT5{[m m@hL VӜrWs8,|sd$3F<\$od}UZ~elD \l56%؈Ѝr,0@V8QГeAIi6 ͇YfSvL2BֳO=|p(|t>Eu~M-P529+S$Z $K1{3L$2pkl!wIU"vpδHjT.*.H '羳Lb 2 0j"sRQ@ 0duj.A[m@{5Smnus¹KmWf$C.h_EN^񶧩lH(8FyEre"ܽakvɳ.̎Ƞ|;c~fOB;" hR@ ]tگ̓(VN‹p4VI.#>_4驿^>$&: kz`WN͛?lz \)Q6&40w$A,~uD  gv[LM9 q΢狍h&I)gumN:vu+} nSE1^H\|y>tr rF᠆49x F?lo j:hI^LE>MqaпwIo`-tLS`_î=Nur/u 9fN))d\552ATodUXQ*X?yd1ddE>kOk#!q=aOQ2)(^H (!~~Qʧ aPwUNY#8C`D[R㙋.|dkcK 2+(kvq=,!;?[Wvͬl*MpK/;BU.Hw{ivFN׸SyV~ko.`kSNDBS߽ ī6T.o^~_1ùnNtыN۹."}t')Ԧwv>߾qGى+ȫ`1mY'm[a[n]a0[q5Jr.ُX؏Xj8H'aCBv;\1%miiiۛtUq ?^up(ނz7z :z78Jb㸹`=%e(DN춓6<bҐ]m5;5lq܈8 aY]tΊ*=y*B"S֑[׃ZQEw;#|܃{Lrg1?m w 0\"*qUp"ar63;yanC]H d46+gLy "OͳB 9;gHHi8[!PK|$ .awKe>U%`%) (CQF{cM'׮(Q= ]I$J/" 1_&VTUqU'ϯb.}.w"33PFȿ,qo_!ӒaF: bu-՞ANX| yg# Ue.$ЦAևǝ6?kW.kNiB¥D]oGV!/Ï@>` Thc䖙>"J:\8>sްPENH,boz|lwd4\+Ωko3p! Q-G]-w3A|kK nEgI)|R0j/DƊ38k;:5GgT@EC];a' ~UTV2 (B&ҁ?~wl,.`+EP}ƺp⸶ p*{wM)vKMTjJ~W> 'Ax Kt5$v.@ZUS!UüӝiDThT( ①'*g+ * =pR*G9?bۻBW_V8?c_֓<8#r> stream xcd`ab`dd v 5030q~H3aSelo_ 0012:)槤)& 200020tg\0?S7Mee?u˅/}(.;wNڳDΜn'v~f.#>mzgLnk +[iK~v-ܒkXendstream endobj 177 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5863 >> stream xX TS־j1woZNuh"8*(31@OD aN hQQĂUP-Uk_kqO׽}}|Q-kB,^t4_~1h?Ꟙ'g7XM!$b#L㉉?%&/yC^Pzlç?B%$H(LF9 .-LVn g>F`j{ngކnu:2}XLNtt2^"с|cnJ %^CTdj>%di4bljA1FǼVJVQ,kPL7ϸC&0-Ѳ#0<m@.,Ź}I78 :@Jt9w7t.(4/R.N-^۳ط-'qt| K/U&^m JT_x:i=ხel&(4qu{0đC=T2:1A`0G`T0Q~/y-ӖjWKӌ FsyRygW1coa< SC0!ŽT JMd=<,9`h&&dG ^3S9 gVdWVJmeVcXLŖs~ c*`KD2vdܴGeNTeTIʣƞӡ-=@QdG 6o@Vs\VF{̦mVaY]_InWluwB.ZtX$:$, Qf%FA&U#セn5u\'s8E}cNc* Rw{ D8S])8Pa4V3xN R Ӻ8h, h%O$M#Faƕ,0*FoSn)֨-LnA*a}CEMm6Gkg +h 0Up6|nHd\ ')UWȨH*KM:K'{4仲kXAaFQU^`6[_ɨ5*.2@s%|kBMWUX(j*sRHҬ:a^[z(3H^_(JޤڙȗŋcT`U_po} "^ usnJ޺>5Ğ͈5:c C,,{XI5!Da7Q(3[yh?>'|DFmؙql[ JNۤbx<3qسՐ }v0<]ÓCSbF&DlOr{fp1Vz( PKRe4:oj9p2 ]֪ $~#csw.{)K t@@oS  94[zҙY)J|1݋.2R_ۿ3b+tn~}Cܧ!Ωg6PQ̆x<2l J4P5f09>,/cqt#)B?X_\Wݞs~H]H%,ߢ@Xl)ʭŢ\k+lHbh|yt{cOTXʬm0Ny\%e-I#lbZRZB:S  {h#؇G~G%hb|1'q[oœ??M>C/(({p;io1 uڱLPx^/GhҺs]eӣI6dj6`Flfȣ$or<# '$7p?oz;*ȱM*cZ+Nn\ĩKTJM%zxS`=Ic1 4 kgAPhjZ lQ {s7Sw* B۷m 便؇yZ<5k  EUV 7_8ɌbZ-V rTp(Nb+[wX¼ ;%&P&6~& G+tx(,b0?7_J" mW޹@}|RVBZbU+e27!*uW$v!K d6rw|gѐƜjܠ*FN%35Ζ%tyঔg0?y;8Op8 ׸ףF ́cQфbqH/>h®=Y,O&UIB4F?իbglO)Uc%>qJ/߆~xxOF/T:L嗆]ާx=oA~ai-1cJM lPqendstream endobj 178 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6175 >> stream xyteѐF]%fPڒ)$8Ť8ՎM2Ѩؒ,KnrMsIHq %!@ vw찇)r޽w##[s);WzErd doؿ>x6fÌ;z{\4fpYcCB^rƊʖ}הDeMWW)Vєk+*VUonхcO=#-'Z/_AAQ5&EE^--m-m,Z%Z-zEhiQA4S4KthhhPޚH,KS;LS%j-V d'W6r|Q&@|!-/@:Ђ%?A_HM'<921>UgV1VP> R: #!5Oh] 5!QQOCsVoFѪ] a0z$2yٽޣx$. g"~m-ͣU}eaD<@ ! Rt\*pFKn C7 m*M 5f@(ڥ*#́77a$'1lU;8wcqDg?=bmX|XF1$Ffa&+2IaTqr牢j܎kӗ!+B׆ 2.Ka*9Ot@W)PªGjh/3@!g ^G/ܚ\$8!O{"*n;#6a*@$0zLov2MrBlf^f0Մ^%$M7:)S| Q:Z6n@'Kq6F BļRj7IT7;3mV۪W2vkUHa4 ;LgYB3$\41*KMI؀r9K:8:ŶM5$fmk\EBy猢2 ryvTcAN*Ρ3˷76S}1[0vb'>ߐp [ژK \&sboaNH8:x3L#z2s=KhƯݾt zɤ.6,RƵO|GqUc%m:'pyϟ8>0bF:(H}D{3l~jI/RC:j@JRպCjy5`ہ!_Y\:4n ioyʛW|_8-^[+ȵVJgoV [Τ#/Qpe"z #a. 6vz5>1.YBdR2T9jT0c ^$pN, oY_*ߡ3avnHfؤT!4=z0 i_u8 3XQO0#5;h^ v:{C֏$ 3$)&$ p?LdsiA=(Ct`uE ;v—c -sm'|?]^/_~珗X&?:Bt$&!Үt* bY,6DҢ?mop8jLh? @.t+ 2E5=s&ه&í?Ga k] [oUputq).MGq=A)F\neNp˼}OREN,[ "&F2ǣibGBxAA_oiZ'vH{W/|f*6#Mw8;ةʼ!(h",&6W/> ''aF\Cυo㽡٦艎pM;K@_:^-*u\^o6/]xZoj́qO=re+CIjF-G:aSU3!Hn/ ɪnQe ,↲;MPQq7D0Ir;.SʻxI1ޯ{+t}VmiK?;nK=Ǥss8v^,khPI9Uh^ͫ{T:t@ isH%c0{dUXZ;;P y2MbIӁWarEev[y2NmsUƹNO\Xo_[M$ݱ a22?o1Mt8?z\ Er>dVU=Uɣs3^[zV-FľUlߠ'M~G(Qޫlj":{N|0k С`{g?*n|SRU7A}NV/fA=a,e$nivJREEBm8Q* jyֺ:sa80l%v">ObXrOw<؀V9(JKz׮": kxӜ9S$DsI~vNF_YbQ$)Z"@*dD: MH?ob 4>CSPg蛜Mi~q;NI &'ִ}P8|γt?>C$'vΔ2m-0p^ ?B=>qd赆zS܈e=]3?&%YVJͤ]LvgX:MX Y<Ձsg@ *Ǜ`SW־d鎮C=}ݖMv*//[}ŏ6Hc*Gi-;ap'N?o_˜?Ks\(nV̄,!+@Y3_rPh(0Di7E 9쟇=.>Ke>!eIYؠ?'$b X+jh@AM=#sz@ĺ6S?QGKON ߡ`,R]qbmi26>rx؇cWJR7 C6I1=awӲ@# o t;!;wٰҤlf o&K=ٵҗ/^8=xIs uyz8tGzpXq0zC/.QoUex?G3ߋ;W*p7t}Żs!/;;uK&a(K^8;M6vyR1`"m3Báp0}swJk]Z)ڧey U'>L}{x|sp+\jK&̅1N#*{pj @YsKE^KNg}% Yq/_:cZTmؗh<*|+r-!I54Zq1hgu 3z܍#ooQ_@ɁS#'z> ۼ ntcg<j6l 6N*oɅ;"e3 Vsn' 2U*QxMݛ^gۆ{7i=^wW<@$.3آU8TN%ZH ӸS\iT%ONEk*Jz~{(NH]T y{@rwa[z&F9 dݜj=㇣c`?rrߙ_.)V~{"riTFGjasi?2~:ԞUOizec 4m::@vpsWłJ84!sr7G˜n'a MN9x&aHߠa@'AJ(?My8ۍ{*V Rv%/ Xl0olM>\8,MQg$y!wI\DPDd>*JZp`ڂ ġo(ve0UT5W)m`4L߉ yڋ[BnB A6w@ 7mM+QgV;uF%:4Aev,ʿnMi7RXoҬT.#X]\ n';*Sjgc#MU TN| (i07+o,ķIefǰLngrwEanq5a6y4k\A_[ҞnwO!BL q9B`[zmDUhdm[C۪N\i sWK>A?G3"ӝH-eҲe˿F" /+ K4M T1;c\ b9isʬ9o[-kO^umpFvrcL8F$^wJ4]t06î7{g?FH\M9ž֤ ȑ`2BIwcQ8Kՙ]ErBWݴөi3/afendstream endobj 179 0 obj << /Filter /FlateDecode /Length 6280 >> stream x=Kqwr rX0|hG~AEǎl("mrX7һKZ5SS="o?IΧgwѳ;#ǣߣ?Z):уwJOy? "LRwc'bQXm ub:nn%nvUH%|_NQ$`'RJͤfq5  LBpK%4_[SE/+$n?Ac2RKI<(s5~rqC06Wnkz_[SI߹w Yz|{|ppknJ Lٰٳ@~F y:!+^)jU#<| qqcы_qwVV@g a !}J{)<|u?><}PXo/p͐ul: Xg(8cо,ج4hŐÐXg>/(;__dI*g,֬/;T`fp AIe?O8&/ԙA(c&'JMQjq,&mv< mH?sҠՔCzrlq*$ TձtAX(,ؼZG(`eL=MZ6ɨ-Ac+nR "@z£b<^XLIqZgDJ65PH M)dB\#U#~^.z[C 5)Z[)N+#b< `'Hx1N1?'#4}̋E֟Fk<@|~nVg;LrRa@KG VH(.1ɲY8@lz4F5V"[" BQ%*Q/A?g:>/R a cZHI-:F@W.848Oin2v1ޘ%YqZYֶ#[<0xSBEF1z6`eF:kT@"AeL4ݿ͒(Rui 7bz͋@0lD&H%2CsE3C6C2RX*U4rEδUrL7'X)F>> ZUeZ/{)pnɰʃnn'G̭ R_M:w ΫD #L<HdAnPaZ)npͭdq#R]>F yb _067:jVt/s Μ~.?!i!u'q W5DWNk$tKp3Q '\l% Oq3{0}H\6{p`ö,PN_JA%X7Udҫ ;}E7Re<W:P/1G]ma#Q`XK6ۙ|I(>!AMV }}0N:T5G[92/?Z8,A'r"9wDDsF-& dӣUtK}Q/V?$VSΝRbL )A|Md`w_/dcf|)Y~[(ax>qwp zd,'[gVJ_!5 58;P6i ^1퐗4z?K\aod7 A9fRg(c \C ;KNc )!׸OYilvpnVwZe-7/W 4(ɼ T"2S'U0vک ۏW3𝮗Gp= ;"/8ʏWC)$7>~f$%wJFIwERgVB\E4yԼçǖ3f׬ONBpH>۞]yUyh)N[\3D2鏕~>EcӖ)Z.oe1\vۜڃ?Gō)k\Zbq>D,W&}|aܲIn{! eBL5Nh ИNf,pr*Lo'+7qՐhD1'ikz9hD527~fɒ;BH$ _Ef5Hz``&~yv`.85TT ?vNt1c>ޕBq {%BhbȚm-MKI9nq>c3 ep!nm?!J 9I3kfX8&͞*.\Ñ1b;Q>L(ƻÀp=zoXzGֳ ϙ* ٖ x,N)Wٌ7L\LovF^rqgfqB&d38M|ſHe{I%d} ޒ;H =ZrͪdMm6/HJvt*C6iT:X&ra!9pI%oa)*HB-.7Z? JJڳ_7#{'o3┚T4v霈f=em (M.G0D4mXj9ҾOB*'|n G9k-;)Tra=νqRa@) c7/˳pf X꽄PןA=*gAȖ_""9'5>oo)"Ju\`:f[ qTRjRsԠK`pUD& EvlH-rMJRtK{hEm]o$c0GqJ{{!; !n*X9;o<p<*A\G @2FI3VH_/nΨ'0 -uHU'1!A[ٓ7M iZ# 5j5 HTVb`V ´p`$/mҮzEsDSz'B}UrQfKuWW9H@:Y[ %5A ȭTB&1$OHm,E -q^9~_+˦'Ў+)e}I6T3 A*,QJ'H2C_ZiM[DmTndФ^A#Ru.Rv*"A/SMHPQ E`-p?LA1$&@ qԱ ')oIawr0W_ La5,"jslB@�@gM.81ץ lRŦ'ԑos]Kѿx.xW7?8 *u\{3YHeIؙiDCO!wLHRQKY  ˱T [[\~&:]N]Y!([y;08/,֞*zu89?0n<˨ʽ3Ugsc͑5VMxA.h@:;7X c5o5#\}v\m%,C`Iʡ +-?u䣌)ځy7 M`.jQ-]5LsYJkRcIBq/gGຼN` tkke.Vڜ/'w0n +>/K}MJeyEۄR9<ŵ6?77IKaS?K%n2&MfYRF.1GvUH9nqK^EB=ܕ[eb#MDko1I@_3t ;@$6y#̔Sd2e%U&dQ@Eh Dzvn/m8M\Sdmlal`H>^. Fj  мgEtm}8 ]¢~USƅ]~EHF6ۼ&obt٣$A,Da( Am@1|~z aXL&R@-ˌ[\elm6`GAvvޑw!z˙p] a ΄ 0c0)}3=L+N6RN +PhH=Рk6#I}Xr%CdA&P:X.shY%Fҳrvg,[l+]a[k=#+pZDjnEbfEEN5%Vdj≠\}W;dO15~ Jso4_"&a $\Z8Ň oZM'yPC3ګZD'Iv^ﻡ@&ga@z͚S8mr UqV\l Hd $,:􆨊E3"QuVtfrRy5=(8oflL#e{*1JHk_F,Lrܵx+ Kי&SЯ>T )v&OQ* S#l2B/ꮂBMop'*s,*P Sܮドaqu1Fv*tss˵̯wxѥD$G߆4?#Sht$=w#/Q՚T̶rM{ᴒY:K6x=gcM6R#8iwNItX[<p~V`2v$qr`o h&MXoW6ҩ[OVе:qϙYUܑ$Aw]<5iv^nD#wM[xkmxKf6wsη|ݷElbȶI=374Ie.bt!{i(?uUr}U_!R|D;7?DQendstream endobj 180 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7108 >> stream xyxT7El{sX"EAH IY3&@B*)2QD"Ptozhpgbߟ򊟜TUQ-[4ꝕA%+E?A{Wj& R3﬜jykK旿b䢧,~zȟ}/5xL&sLjyD 1xxX@,$&oW"b21NL%Ӊ b&1`D/71CG''D` QH|b QL"(boބn_壟<^{{_qߐ:w}g߳_1x쁭\]|pʃtEE_xef6 O)>КXUɵ ;??Y*cҙ? -_v@gZ W~U3wd.q̖/,6>O6=z (Tb,:~,& t=gbQwEo6^xIWk^dY.GV%YB<8 zFTiNO]p~W!s x>* հϓZ$ kG$CTJ!Mư;W"='.EEP-Eq{ ye@"?u_l {cM>53z' h Հ.?{OS_iUGz! 4X>/uLzj~9|ɹ}T]_>+dþ๩vUŽ%ER](}ߍTUАۯeH~KH*r_^@O]r~,xy3Sbdog H킛f:xM,XQU:|QQ/JRZ葷ф sR}j;{^9yANhC,JJDT_] 3邋]0ӿ"6ᆢKtv91 P+px Bf6| *R(׈DuzC(`Az+éN` ؈OPbZ$)b|L|/J2VK$X |iĢb{` ]D7oP>Cå.}L;8uq >a= v?ٵ[j2J 9F) sgX2jsGA.T$bcjFB ,:+h4\^Ӛa)H zL¥$cofSH9{Wh¹˿NM.h%ȇyfMEbV( hp]_yNH4;VG1| [ŭ1G Xj?Eȯn~iZl+N#y-ZrX}YE?u8^̵rZChIJdST>!7b5jP$$=|d5̏bOܠ138 kC>9dFӅLr-U5>/#,DsW* V4^ڋ74by*`$jUFvmµУQx ę`zY%if]JB .4fqZWƚ.Oþ<8 > }Hfo8YREaL8_x/>}q%OH$SV6aI{ &qL_yY>:K廯fH2S*T,߯v]M)&s2$r[/ICOJ*OR=v^ŜU8,lh%;3VBDL,>*{$N0'{8 q=A2 Ϊ/gx@f2 :zQQ/kuvQBn{ Xău,s 'HR-pr6+]UV47R_;,j7Jũ% tl\yI[ġH ac8hr>X誕RͲp2q {#n-AH8h.(q޼=nuc9MD f?{r6ft<`\6rvQxsX1rp:^M102)mlś!@1ztFᯣ]FG}#i d. r' 7Է,aKZD ,1pzR ]z0U$L [)M@Rh+zMN̤n@G -1PDA 9?I_ 1#bȱǑCHW\+W kFܪ,E0|ʏ_,r#2\fʬH*AJP%+kMj@Fȏ/$ +2gq(<i9/v}SLjd cQw2!73A2 Yf'x)bAW&86,.Nrcmz!VPѓfO{m 'waQȤ2̇ σDpvn{_xTi)0^Ħ=n $T W*V1`AEz;8vmre5c0UA|XT _%$ ̱͎,H=m:?`oj߱ 8G| o٧PtL@96x^0E`cac4زݶ lڶJ 0F)0YdZ-)6oaA:| k[mR)DQgIf'jTQK}H\鳓(Ed,d|g|GBU9Y" :N4z'Q8NQ#a!~yg!=j!UP-gwFڂ-.Pjh >.NtlnvS?*?"zJkH%65+S f}79̈́gOy@,`OjUoD"ohxn;}Ȇ=x~^v]/ .P)Wׯ*PomFcB;;vôms!,[k"jw7EgH3;komX(۲B.8k2Æ콒3c =RЕ paR bX JX-ǰ r H繆}ݱmϑ)HEac3LqSuifɍG{ixrܳJN ;i䮡2, j*1٦逎wZ-B\&J r J4Ga)VxYx̩srC̢?Ra} k: y: Ѫ mɦ|`_L}%d8I!sۿC@_쏧}:ވѱ͇>ڷ6ltkv~Kj"Fdbs뗬/Oyk]FcS}BYܼ'|k3GY$a JU`]d88 wT,̾pZ7srQ) 5'IbeM}T+${ (s#. ֳ&9alwHJ2`zJ(fG_Ք6c)@?a3,;] 8ȭ.Lmq8Ǵ V@M.۵zWnJ7!рjVDRs &r Cϵ.smJjf^lRPDAq֔;]n=1?B^2}+b(0N%<q$GckGgHP91 A# ]s([Qb=ȰA:a U<Ej\&:'J5%`AU|#"H5HD_'fs I"V xMJ]nd/I|%p?F_ ҄K볗^=F/#`("uNͅ> C,[O~7_b2#q޻#f (8 i~w f.ꏈ Rd, o;wm5MW>iH]5f&>·2xW[ @b4yI 0S5ZYZ^$+@Oǃ~϶"1 q),JlP2ND6ͭ6iدkb'sqա@m;FM@K( @+c"JWu 1lϡCTDJY` f-hYn56]BGs6OfS2r*Ĵ ʮu)G̚EfSr.H7p|(_HRbQĮ,r,RŢ`#*Vw(Q_b pQBr٨F߆wx Au\)j>|voՁ׭ʚeI~szy~?_(J)51W(,p}eJ @cH&`.$B/LrçA Oa)p1'Y.IJ: lKm%?vo1ݰWA:U݈'NoiYvYlWgd&*b)TZW(* J]PDX:Ȟvםo+29`6[w Q. WkzM/͆CX7 ; NEiŢ])pwz̀n QmBq`3Eʖ[7 ,=={8KF-Иn~OQ}l b,XLfɄ6(5IxuerMUENeH;nФa Q@g-]5 0}}n颛1,7cg! ѾO=W4쇨O +AyUQAKS<Ry氯)re+r5k,-+DZPGW%a^ŨlȵS CJ,5TLa]q.ç3-<+y=1|Cxc\~p1>yJ4C4* IFܾѲ8E4sn<& W!qtgv65'*UdЉe|ui-zW,=.NAxygR,zug8$ACGvzjص%fp˸NdzL#nfr!E.]+Gag>-q> stream x=r]q{M,.lhUKvR9mUт@R )tYR=3%Uqq{3ӯ<<wٝ/`Gaptѝ< nJ",R{w>?>jKO2p̴Ǚ`=73O'?_a铅>N]ǁpuc:S{ +yt7w~7R)^9lU\asXb )l^ɺ~| e!lॖ%l7#lVPXF@ANQ^m9#9oqLrŠ}2<|HǼ)=>(myaN>9pgY1 T)2O/y[lt1>3Sf:_η´fs93#e#JvJe#I[r^^0FwVK߹G|D.S6O.$UrJ}!}Y1~VC(#2knb :Pp !F6yel(mT#!j`:m( #MU8P0o*?y<-.NX:<u[;P.v 9 nb£J,eyفtWu:]'n;u^c)@DWyÍ>}Qᕫ&7fP R6Jddpf)V<'0`>=%B^$]8]s$]NU Uyٮ7&V:kRn錧h(q:3@Uk2 yLgR{AQ%{6B/+R wJIо3 M 2=ac'BD n^AS`kč/1L)<`9ʢOsVNKؖ 4J,vO5dߣ<Px:TkYFo7`8U tX`/ɦ|4n<'b$Q'/ No k^  A-L޸) *t`Q.k>EijN ~rͨ pVNqy[B:ȍ6mw5}Vpc2/F!тCu;: OyE3??b`U]_  R`frsbWbKw <#~6Ae{FA#l$ oxƙ:ɒݱ?4n ouC*"7i'b2 rW gG$Bm2 @U ED+v{m̋ULPwfnXBםc%݉|2au5s:Kq>H =r Hy28a_'T[U*s|`dDM@~/P9waLJ6])|Ģs4q4BbiN)40A^! L|)FJBşh3yH¨˙C-K' c7DhF+IzV&)WBei@ϖw "`b " , 0iҟ6*z\tOX[UUb"3,.ȽLʷܚJ-X|5'C) NИ"x埍-{ä&kCB]biܕGnMa'eBϞzvG.#0572{spXC$e >t- *f'QiFE΍7L 1z[P^d,f mO\es [k,,|%!]Ғe88C,_>yq\~JC.{tH-E;'>Ng./tčnb qPfD''qvqmIaȟO׈.Vs:XI-Ҟ's'xDv"c@2_Z%>/3LE}d]g_оj'tog9qvpeuة^%.ʪ![1zyTyRhO?޲s}S:/ŕyQWy \)jWԴf3lDɔ &Z73cnG=/(u\|t9 r.ԫ-FA̜wƄݧdGA>?;ϧO RPu~ZT[A CHZT[qUGtS8*b>TꃿP}`AlgM /3:Lyj:6vI qߚhOKQ-\5Kg.l8s;z2i`70&HrI/ ^ł:.=N*om=.){cfV\D0ξ1 `%IU 5&թ HY &Db 94eTnZ;3XW<| jx}տŊO,}5f oʗ˪& +,3lJ12kDuI.=^uôk.X(L6AGvQ5U$htCA#֏}&q jSLgDr()W5"dzO0 ֜lPɩGP(]5qHThoV j0Ȟ%ZCh֪--`P#Ⱦv$Og .38²Wvxף;ttRg.?ϻwK,&;ht": /_%xYswmIB~Zw]."Y7nM-[jBcZϟ-9{qۼEoڿ  cw tre4$i]I_6vѐ%,XAv_8*פkHǼ{PAəw,,!#Vs2orf`Iz'hiv[6$ Ͷcd߶L,_mkMWI?)mCB _/p3Om̶X$}F ߸=Xz=b)}Rmw&z}J|2´Iw&Lgbus3tu@뾊iemnΊ5ߧ=nKoJYO$[A4&5C|z!%Ÿ{J}͊Dp[ѹ 7S9Mt5;ba]"J[1S1&{gޅ"̪omN왚JJb#w^ی4K^h,D<`Ra$a!*Հ]Lrꇨ÷׏r+:QtF.ӿTcĪl.r71>v9V:Dtr#_:;**9'UcD};o Ȅ )d!%ɍ,p,$1wG9A*扷fQGn "+RУ'm`ۏYZ|SEe0ie-KJCs ԧ`o :<4uR[N]j{^RwD5p[|Մ?z]2zE7668qrܠy_|tŨo !S_v!"Z2#[r=@# WP|S(a%t862uYop*?kއudzUer]Y$&4gSsq|!u*i,[<[¨*=J^9jv zduӆL(rp%3g[Mi|_=I)endstream endobj 182 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5491 >> stream xXtWxfB!$$I%^ Sl{7b}*%[llH=$$KRMBHǿa=総e[37߽ã&Q<o:Ͻ<<Q)GOͤ<)P5ٹ}fcu¦ (ZFdXg0eb4y)) vNs<{3tSW97ϔRY1N]NM>JmAXiai,L(h-juzf!\}.u{%t>)%w*5Il$I*6≷$e$H Q;qôr]X͎yCvz D e_dw։P%^ n: tZ 4 m3˿B##/̶A38 Ds1^u?{z|S"zG@3ʎIEJu%kb~R|kqj6\{jso`/@hA+a6G~B:Z.B<W >b`P3]f04$vN0_+.<9.$; HiKjW(z+||Ѱ:ru_z=&rx /X̖ܶODS"@ FgdE9-Pd Lp~Zv G g_TӢh2`M LM)~IY#d2?XI `.\{[f`@POЄ},E~/L:$Ai'@z6;f0kn&Ѵ7WeE a!cu Px̟ДاfQSy؇ux:T2!YD%>amY뵿GeZ;R~JIN[Ygw<{~ ϖ* 0ʪ8k]zDrd~?}+\&# 7z{ EEPV39Ҳ v|꣙ê4_:N*Oqfэqs_]ApExzrUʜN{vpGzx ݙVl| GVX-#dG3!BM/`B~%ʧ"WZZb-t4w3϶Pz)hFK_(LH}&H{H4-FBX.7 2N"ZZZNl.ژͩ6g[Ƿ[ ,xjdΣ_+z4586(H>G9JWP' $"DcR!<T."M˥}Z$rruu*:0/W0+)dut#ԶU(+Re)盎yV |L2N] l]1 eJƜ샐C)Ku驚9Oy aE4y؉ -`i"?M4DjjZɶ{ UTEAtl}ґ)|oțyTR)!ۏ)~=SM*m ܛޯ:Ω;)tRyXӱBY`;Ds T#?2X9mu/wԾsLiBZd-& -?GUZ_;L=T.;v[I6X;cwJ%"Z uRV@^ZD~jw \Z(3QI Mpc۱ٱMD!dHyZfu#gF 5MhPJsN^k|f+sN=L)7?;^%2haW."Cx}̠:VZ]΢-xY'psྖ?vˠT> VaFEjm(+Iv  )R$":3=59-%-9>F"yXcau}cgw?  Z/G~whտu="Ea%K^1}c!hXg22)"4[#F`jDb'Nu|>J4k$D3Ί И~?.(ŅLbLWtהUW;J:&Oa"R:zvLJ:{d3{piS\ vg1K4Xl"B)J&X-Ȟ|F (>i<6:P'-)[@\m^R!FaLY~|WBCThZlS's5}5}&M=56X݊R v2z1f,zmUSp-݇:ۿ3tA\>%Ff|+p7u] %`bs5NU,'?0<17 Aꕅd:NX:VRc?Z{ԊE_3so"EDRe Y_7Z%%PQ\uvF^?D.b]Xkgւ)ʂ K&^,˖d)Ve+вzEKmيN0'ū WwuTj9|\7g')2,q'PWFDD+}~&CEF0ٺ<>A=iAیorOaw֖aWmH DE؟^Fh.b 6W>婴,AO!UPΎ~vH". RYݐCI͇:n$?9Ȍ~ŌaCh |XO_Aj\n1,em鬊9 hgo24dպ$%:ZRĜvT6]CvΤf!zuaA!1lRMFcCmUsWtSDdtNv'We*Zr8T} D4'^\!f_g:km=3W1B*7`a7Uk| :a6 )\fF4vA\$OQFAFűA4H (PkWF 2Hh/j=ø6ڰ, }瀅65^߶dp<<+Oq"7 dp ERV|0=HIfR2&\<[&S*@W~w>tHboOVppx}|oGGN)K7ovۑANePU[+ j%3RbBw bBK@u:Afմ* g|Ցp3<@dLkJB0ōkͧz{Ti3⟞(*.IeȑKR.)IKe `'؄u~Nf&Eс/lElfZ*BD!;#WVh\EjX~9)24169JiR^[qA /:wω[Ա;c?ǁ=&vYwYI"IQ,/sUDS>hymҗ-},{4g 'f3'?D>,Ʌ1 `JAd?=ƞ&ž a^D חn8yQgOw&4S婏Xx |”VcxUØMiV(n4q@d7xm=[6TUWݜMIhm}vWrMSަ֑|A 1]![ZW(F0bT4^c9|oDjBHU2謘m^;+% 2؜8GO!ĖN[[zvڶբj-dk5;{ \}:bX)#V%Ɔ夦r 21yHơNmDH`G&>.ʥNN1PAj*ȩ馂N`|[^)F#l1&CJ^Sڪ>fp[`nfc) %ih^'yh<=ddm&"k*ȵcɈFֽҤa'8[n?g<Rl`g0WL54vAkK+CMC[<x6P𰥣w;xd,Chm2{*q9s-zP%gJy&Zjj4ÚfF:٣y˂ֆ`8~żm E"Qzs~d*qC Q@\cGF~eE.^*ǓĀ)6.dߜn#[}O%Aw#]DK7J 35T6FK}!qMnl/Ϳ3|:)nv8TTf06C,h[[TS1Yo\=tI4un[ h2Ín}k=בFϜ7GQ- 9~'ѵ6@۝yyC|z}4}4?z׿?8E&eT;b&JF% + !aՙu%ue\{〉4.B@J!+i%Fn+a$S&RI&{endstream endobj 183 0 obj << /Filter /FlateDecode /Length 6845 >> stream x=ˎ]qYsmQx2l%Nd#Ҝ(2Tu9]]}T 9U]33^?x?} .L^1X腔g?{[3)"? ",R>ݜEc8=Nﭖqn`@-6 @8փo] 5aU, >0p ci6u l 4Ћ7ɔD;*<l;M۪o.#Jx|pQ>~U_GV a'{iZ\z4pXf2o k*`Tf ^2Lzg;gbm!x'w0aC g?|Ov_=WcOMZ[.Hh1Y6-B/׷Cc;ݾKڨVl8.V5ʴ1t[g>C,6o<A0-v]X]vf/[R.x&A.FL5 1Ĩmg 2>R܅Q ~]ѵA_ HX'b23DGV+)i1 L%9R@,MISsFVJ:(x>mjFQuAӞA@5H7 M kmh1nJE?+4cd-ɜ+H¹I%uҚ\Uy>9V .Ggʆ*ޘH`V&HFsUtAqkE8DBt (hH#ǃ<fFT]~% /j3HG0 ]f16dH(E%f_dv&) 7YY5HA5A7 FOM~NuU\V&^YKt$> #GcP@2< ^IC߯FYnbD,f)KP@yS%lX`2tl&x[}f,+ S+t 3%|x-XVPBA>."({+0rGDQ:ox ݎ \Y4khPqWg_%uO}%&m O 8@XX 01<Rp > Ty =3VJ䊄(66> B 35Hc`2BeB?T"Q|jizE&Jf]j\?虤UiFM5leϤL&[&|"x䈘tFհS81&`rww{R?ݐtʕ$j_!yY^fif9j|hL]%]CF8F`q_x#%Y7K"2 %!jɠ2Gb}܃ *>KOtR4SKF7g"9ШY)sҎFh+V%osMm@&k$N̂@;t)2iz9Ike@b$r^`S6~MҫN^S`='i?ɓ6BZ} =rL/ $!@X]yFHƠ 79!%&d$37wG[O32} ~RgӡhQ@f".fw,TF Mu-2 (+2vy!L2Q Sƀ t9(FV0ȼğKašw  :IB/4$`@f[/"D(4|7h|("'&ar%~XF=h: @4,6mِlejf1E`WZнN˸Hilbx|yCxExM mH:\Gu,0@p7bdAsȁ'A~oހ#߼ *8,ܣ~(a)`솂- xV/ /`_;Y\sfp58efS=`b,Sr{2KڦW7SeF-EY 9_6ȍq=尯ȗ.]I-K_P8@C۷Q%tGnFssѰiy*?P=#ʗ^B=%J ?OL%f1}}k\MTEpm # 1ā=am\NR0f;pWvN(nV)[nF_OǸRCR(4{!)XOcVT(/6[%t~>"|t^ zGYDw`Xتࡕ5q)_3 9{inܐ훢_;WV8dW_o.ĶARq)<.gշI.c KڀXV])0Z:UV:pU)L@܂MY©Mj؏^}|'Wyڶ1֥ncxor=P"gH^,Z' - mlHkQlȃC˖ 8Rϐ84 L5CvC=L) 2+@\vo^zo6LR/"~--T%԰xvŧ/UOp[1ܚ/Im5(mNBmyMZeCz[EN2 ZaӒ5 +]ySЃ b%。=Qa.y?uH%3艇P_lTv(՗ c4[#a5F97E>\ŲnAㆍk1ь%} iN;g`se}꒝wV 1Цx,اu,;Hnv@Y&a]l +Y؃v?%l?!`m[k5ۣ9@Z~ك Wq:i9j{]k{k'X&aϤC23' $RoX$fD.YxXE:Sjzzm&L 7s 0!l_I'9j0 H8zFI y;y-10j4.NrvU#-^E$ Pr:dN"۪OAQISާdU1Uvk% kbSlTk| bmiFhs) ܦP9*2\ D+c r&},4ac).h) t-%|x9Zh1R{:m(1J`[ N4Cģ4QMi F,2a $>Y̧Qz#ǧ Ne3–ouMt,KOu7(<: M0Ob+zr:v`swa$w0L]Mo<|]|+ (sض~sBa t5ꧽxj%@5a6 cDUsoZXYBX/ԉ*3-#V;P:(3i_'@[ Пw9TG;p:sWQޠDx쬠NrS放TH–h'EIL|bIO%4ḛY&I uZՅAu .R.>Ϳ̳zQ@Xt;geXihp]؎G9WL\ۼ>,AiRhq'xf$; V Wae >x71]NvkWtv6Tnl90dI%ƉMl,ܤ1jzm7?LgY:8JĿ!" EoS$ Cwߧ [R$oSIk 7Ts G?3'J;ndHid;w&Ip23`N E|3GGGkR.QvlٞyDwѦIs;\X!G5K$m~!$rG?9$r$n=ͻf[0779N,L+?9wsϔM Hm% `w--6:RRzR; v8*޹ͭtQ4tp "rR SoG; VZȰxcKAe c/W|ֽ =U 5ѴOa(SgZ/hdtsN~9k.'wq12$G/eedĝzn1 H;3+8rQwQ+W/FMbHg:X]ZD<աeQ+EqIZb뤕4oJ1Ω æpNUBo{ 1eyȚl*8bLL!YXֽ76I.q8Geb#1/\YSnuސt]Ƈ㢛,٪E4 |2Kϙ'K%-FW2on]Mm(=7sBtΟ`llazm6֏jGY;+cuv(P=9N<3~jz'v"Wzln#ۛ 'OphHYmmQwqW&=ݘ<Aa !`` xmn$~Ej,S".X.ެA"cAKkV`b׌N!jUУD@8/TAW~tٳ~I!o2  bS>^~ik:n-Bn%VʹT+"_KK)vL/nXc8SQqRgm/ZiM@pxc Bͽ$Fr]؝!"b!Z`uS m( |JW=Q7:jߌKjQMnbjѐB/4pXRL!endstream endobj 184 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 9013 >> stream xz xUoHUBV&2 ,$d}_N^B w/Wg4p}:8{:U/_) zt# z.hѨqF+݌dg^AuFnZB" |xN ²)*6Ȅ*_NgHfJg^{Ivb^~}M 6/ܲdq钭KS]^kuz?;wϚ{>s)A:`/zV[<|5   4doz#aÆ%× OOG7%WIܣ>L!H]-ԨB)VS! kX{?& )F)i4X\~Μ}us-[|.X̕fF4f1 ߥ+҈&w{6oq]8A1G^?܅P+c:2s"rgI(Lsz/:d.u$ox2g[SG~38T bQ*d&zµ$8e@3{\CS-6T?l/8 LvvKDk(@=A! >{on6HAz̯^ErpjpGLUsƌ۵nU{^{EƦUU֓haUv 6C.$Md7Z*7 #.o݈8_/⼜l.}Sаw/!9hGƩK?W_<A[Osҡ?Of[5{ x_. n[[#F5iŵǐ<dH{''qK@LQ%Gt؁cu r"X@AB&F}?-}hJȥxN!3q_]RrKrFi\SX=eu p|z>IP>Ɨ ŕ.|<7bJGQʘ3C$_>g֚A36%KXԓɌBiX8NV պ0FIUHd4ـ}d؊>J|}-Vup-:ო;)|kcl8B> Qx\Sf|Gf*F F-ñ&M;τљ}.CG_&4 e苰gxe7-F K=ۏ6xYE⩑oM3T.,:3%:V:= ? @7gh+t?͔VIt2ޱIpe;WQ'IV+ARr~ߤUjRJMY˺={8X S1/$r)XWd+ɍ[F;\N?k)oV,^O4_4O4uƕImr ;|4߀3u!3ތ/a9Ql?!d"V/Z/W7,Z%Y2g Iu8 ]U*+ in<^=O@ݿPqaU`w`g)2f^)*LfuDR!.W) L]9ś;caʘӤDY%Ū%Gs,F@#: o X-V! .i)'sH `8,!Tڕ&RVQS* t=;&Of z.KkPI|4<*Lq6QȻ/l8aBTu#{;fW ߶|`ʔB*spķPvrw5LgI-X,Z)\批>{-dJlSO}ܨmI|N1 IZR0g k]p}`Ȼ1e΂}db?DD?u"~GӊXe3?giH᎑n; p%[euuU^P(Qd3#N]Pcf#gԔ)U\t|p<3zXp=0з `|9 ©}=pj$IG˦qZ(Ff7{Xkd,UpI@K(s&Pz(Ԋ>wb~rrp)xfņG%nnnޱff\tɾL.625iT$긫N8 bf<|;-,!cLp&ILdl^4vH0ӄUv mqs\d5y1)v"tLCfC&*$Orh MqWxSljT;xhȂR2$?Cda)R%xYǨL,j:l>2"C^_b(f"]@뜍Sф,.A29zzLڌ/T9T&N$5JM$+qdo=i{.{zX'y|(KxM #`S zLFqpi8f,D*F֐ᰶ eLB2(gki+%hO=csrE ;&xeEv,ʨ֩W&ŹxŕGs4P.omL>yԾꩉeV͆` D$N|: ӧO %yLE2 hcmr˽[&_Z䖄eY;o.JOn 676t(Bf"6er+ԫK333 O5$j5~5綆lbN6KWOB1w6 k;)@&ZW> ۏ9EC|"MKq9kΞ{dby%ηFK$4-J8p1QK֤$;X[Iw/wEp"}o~Ah4 #uQTMZ鑂-.ӫek6`QE~Zб [V"}%<^&P5íE-JFѻ^ktrsG˞7?K4F+Hԁ7hz]p]g%kcov:Iss.X@^Xc[c\yvibu>7:,;ۥ{cw9k¢QR=B 5z2ppLV0x&iw}VrarOkÛ,]fl:_Zq~ubۡUlVJ^-h,s ?E ɨ=)O_n#wˋ_/)y2 S4>y8ҳ歘S}ˌNq i:U \S}פ[u Ac[2 Хq&BMcsaIX.dܦ碵O$XRe㉺}Zmgp*rNɱ`(D2OyT䰸,j/VJ0"lt?n~yosQdY86?8w$j5kpVr9Xp3k]YN1i\jT-a'5z- ERwEgXt ^xI7p"7p9rQ4n 8,eu0T*>vH+*L%Mgx; ir)u6y`vo԰aLRy Z* bfk[6Ws*Wo6]!4~FB N:CaיԆEF,`M33r#?vKz#̵JTVֿ!$/c_56kPs̈V԰0_v\e?*-$M'n D9&T~A%1LxJ1ߍ,b GAC1?M=y8y,DC դTɛX{Lw: R MóPYk>+#|jOACDFs1ƒJu+VKf-AiPG'xVRF?oUKwTx U{3zGs7M!L=/CYdf4iNZeuVl,/n~V]ʝM߁}9'=/{ +J7DYE$sMKam1uGPd}E)FJXb* /v WKYI$-j87ya %p`Mxowgwȷ)b΂]jr66{k&gȒž{+);ȫD6˒kP E3v@5-)Sβ͝T%쩓$X܃ʧY/n4 ʝe@+ǃE Jn]O)lOy[Q1՗9iҤ6Pq&4h%Bom?ЇJ,\#ܲi]s.w-يdVS 7n۲ ֝[[6pwwei,+O\;Q_RtLkzҠgiUk(GaI%_v7khGiOf1u>UPy:Wv#0kN* Pʠ2eLEQDZXm4KY&?ޔkNї͋_)& QUu߂cgfҫmh.1g n6Wz=3R^oB'4VQ4";)` aOR>C/-$xqv? F! lV#bo;i?F]c ïS{{g: PUPA@$@tg4WŠbLVS|kIUO)'iP1GOXvvBr8==ơahwh"._bmq(r*Y9+V+1<|?]m{ӵI!PJyO\RNĵqH 4mUTʼncT&*Q(tbH彂?ۮqous<+@~JpHE(L^ꑳ7'h"/K[B&S,H2<좓)/?nOjnO~¥p vBSFrB9!}I4+# h88f8@B;h4>Cb(ZcSfWUVOXѴL/--<1j:c D@,SaSUD^]yt_GuE%|xu{ H5P̦ʔ)O8ɴjc;̈́|dR#CmKKB;8#[,܁+JB$39?7| Rߡ?p'~2m<~̙;{xg̪S EM,D&} m\4 $5^lĪQ螹I@(ª 3voOIIy~Dž{>MXNZ\Qș#WMNʿYhz6z`~`^fIԎ)_ _| s%3.+fU[lH. 8<8t6S;!U^X6tzfH5WC go~]r͉mwc '>rqqQV)v@Pi4Mp [ed&I$?jri=CݚE߅n8f|6hΕ nx╗"#Z8$_P+r򦀮׆RE+XiA_s諵fhqUa}~mHSqnV?M 銈_C'0ՠIj0-V3aann{!$$O=r OnKQ66&u!}XL&Bt W?=l𔗖r%%treYkWTmtuD0oqݔ;u2F#)0ozĦph-(1t8 @|n"@7W8|9 p,h8[Etj![0FOP`C`^խ!iX}ks\߹# k8M]U+IRzIo[3wtirkK _}ٺ޲fʡ C5a8eš`XߺQ9yG@(NE]!|7[sXV}8v=7Sp`,J~2Ud<JJ; od%:[Bn&bƠYObغ򈡞.%j!Jq0Ge׼|Rmrjmq_hTe*̛9dʖ? LAG g?iD{Tpf2t$W^E|znx,[};^p+ O {5ZڊIl-5kL/h}?=DtYlۖU0Ds *X|k19>CO̞:cSWxBF)mQ&}ƒ{o~ =<kBslFfeXŽY A|P0qzY,:BVj,ȓXEq^]-)}bvwT0GCW~ZB3g /^pRG mc4֝t̗ cE#RۖMIg$LGzE} ۼhּ|J0b}䯐2sD? c\0œkN89ix*jʄճuQ2"MN]l9z^LztYNE47)ܟXg:/sN!Z w%8E 489?6&0wih]t$U2]xP_tv󵢛+ȭIZE,4f\4 /uu쟖sZ f섉'^ GBDx^~^KJv>{Nl4  F׏AȑĎ7Y=-`rZVۿ̙a>{ӧ.k^0Ln˒?Ȓ,A{%R=S$R?unz$ 6endstream endobj 185 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 555 >> stream x-Klao mE|$xw1-IC14 R1!+EX@8P1Q MhՓ=x%zL27R! 46y˿4EH'Ƥ*KKЪ@~-}<&zâR_T9> stream xMmL[uJFcdt`|)kPm-*/mGaC Y,ԷqbD`Ѹ(_܋ܹ7w9y<Ð4aF]S[g)5/H(<%Pq[TV ڴv*ؙMxpQ2;X xZ>>^[*++|iII%)x6_k9'mo|>u-.E6iW`m>_'xB3㟳9nE{<|Y!l~AVKi9!$T-G@$r4F=s/( 8-Eu]Tݩ3) AX4A};4Vc6朘Vf/endstream endobj 187 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 505 >> stream xCMMI10%UN  ba\XouCopyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMMI10.CMMI10Computer Modernx;Y πa䘡ы~owrs{xPiQhVtrUn#RrͤQlzHf {Mha_tvu|mrqk]wͯёfdNjj Gskd{U@I_rdjwropq}AhOjj uCma  7 e΀endstream endobj 188 0 obj << /Filter /FlateDecode /Length 6662 >> stream x=ێq|k ?yF}(Vv9RtÒ"iJm!OTTsv)2Vggz~i}u$&y$ﳋ|Ꮮ<G|@GgGz9StʙG_>_#> "N^Go>;Qy ?m.0 hq"A Õz-|\#`1|*rx+Ptf2[)ΛçV6vvqoAO&9K;U1E<=ު0Io3,YZba@3 ~:vA7$C6m|s KPF:7*ٜYVZ?y\<*=EѣS8~uu@nV,'y ~^ϴlI,O&Nr[Ӕd z/DFI"%W_i>O+ 3βp=х"x \bDvu"O]y\Ep U|D|q({:Fi͙1"v^R#6"Nzf'AD iV˺Š~,WP/ CyyWx8U&O'+X2c15fC .Su1΢8,2aKԼԖnsq+~&O}+qMȞ:$l#x34P{1MW\U,܌MEAUOIrԆl )Դ^C^c y'u`쥎5Ҁ)|wmɨw#5*5[ |'`5IXۯ ֻ(vF.w2˾bqFrΰ8[ Q[km6[I7"i:Γt}s08[Ė>-`ZesApLռe~g[;t-Sdsj9?.ӢO*Jj~^8dJ3IPsd& jjˏ>*kۘt]Lڥ Xz`Zڎu(%&# #ؓGlҢ sqsQMYT+I29D--A 9]bVgibdVRO·V!hq=ECt#GF=Gv1jlc cW؀C>k2LF@,ll.> ?Q)`g+- ȭπf.DpJ- `j;]giuiC&27ꍙ4B_'oJ-rzńsCߓtS6\L2D>Hy,*iW%CJ,!kM[<^1Q|" ډ j7 \|p)Z/[%c@z㇩O&8b%K2@''܆y>cރp-Es8;9YY2mp#-F1u $.V%(%I%' 9/W|B U!099·N˕9SY bw%E*^49᜕X, 38?^M'߲8hhfum,D {R-MYՒivk=\dm= U& DjYwFlLn) )B֌O}lx}h$|Jy^T%7m/9!b υf0o' Er#`! +ʹ%b5\3zVq3ݠ R6EP.Lu6,єtn :J`I;8$>. mթB$~@'YWpp>,K S<~LW(2"vA F> 0zF@o =la܁k/'SdoT帴hC&C >X,KSAh0^?NZ`^o? 6Θo7gD;$_0}~B!}y D3XkMye>z7P9W};ר=8 .y~NpE\77φ|ICIc t_?ݏgݖ?7{a)sfGP'̶7`+cfJ)^ 7{AC v heX)?7u2iv-G'14rF_?ZD,Y8{>W0Kb-=5sq0Vf)a opra *>k̤uO˛ 0pF0`I!k t8O)[,챱T>Ta?gX$*p©V&`H[kbrVAyCoIiLl^k9gA/ej ҹֹ r~~{M*Վj$Iwcb QyP WvG#Ls=FҠbcoWbq2dl,.i&,LdŦJ?7Moc{mgjs۠ {CDJ}Rf? K٦A88)m#vK,xU$ [p>we#,eGKAȷJ}}O~TUO2;k&([7v[vЎgS6 ǵ[]΂;9ה;kk )a(&x U@:E: #J]C.0oXQ0/>$K_r{KR"ߣ,ꥒ>hMH3iO7=at_}֮xqMM}?5sEe# M  KZBBZqXrL56L^ҐiTV\՝#b_{iU7tX#;Uzᰆǜ{^W^QnpPh4F,!ӹK Wu C? Y&߬-脁͏H/î^.}z`l7kvV}Fpdzdz(zuߥaNySbg}6уuUendstream endobj 189 0 obj << /Filter /FlateDecode /Length 5631 >> stream x\KsqW2^=KNI>BmY+B=S@ 0#3|FYά ֫ʪWUWXX_]<®n<\V?;VnH:<=H5ʙ 9Wë/ gZ*38Iznd5~ܴP#Sj)&riG-~`y1_boq]'xD9%筮]KDF|c?:gWŨW u"쎇9Yuu0c0,T//֘+ ,7Qp!xb_Yx%g_fd?8?Ճo. !FrF7IHgQW;L0@[~ P}K2*֍-L6`gF0K(d:AI.d7h߅R!'ib䣑l+áuL RH,&2]8ngrxy0&$J=\r qzïQq\冐g΅s[0R)3J#47;/`Sz&b~6J.ơZi)xƇ8X% (}fg(eރ.ãmz>&L)$}8kyo v@bVLCraZQ%A! <&~FꜞᅳuE=1̜%{SKT=B(/R n  i&Q6"T(V%7{[ Y)FM&iX/!xCli+Ӣ4!gCȃ9W$ ^I?[H@Fո$v@-(J-þ}&S=j4owA]07Q]y.Wm{ rƴ_`-3΢ ҙXkq?QCNQϩ)EQ/-t-_?gnΩ3b 3P"1[5,!mǏ=7=FJpIl/t6hivDW% 5sIˣi@B q\ԳbPΤ`O%u+ ժ&쇜Rq6m)Q<; 0. OARVU`-X<"Lq"ZV쌧$L-\pzfA 'ȝ!.FSZ$!^``L)j* . ,f'ij:pLAc0[8޼\^g΍Ww L1S6vF Dla_aa&sPR('EU`m)V!#0V~:}i .BT&A iv0^1佉*j Xpi_b#a83)6BKHЂ9#JSƌpm-L\Np; cQ& KĊ&%S:o2I,Br~Qq%*so)݇E$xAE^"ȇY  Bf`;7:2AZdL'![" t٢h?b>$d%&q~@KjwlHb ) ؒs;$1{?<&zn+ ZYVB;"w7uGB{A TBe%OG_" KQ+P+48߮5=!]΀F#L`XcqZXÒY ij9[j\ڴ8(meVAxSmA%_֓+.<(5ӊ mgApcӥ 3Q~&ċFa.N**呃X b5M<Ҵ\D7̶x#DAUpŃx(æG 8UmбӦ϶!l4h,1h,=+ vj7:'aT@ᮁ/)B 9;>[ ökAUn3=t Ĺ9!3)(%RU~.?:Sl'o6'9FUp6*QIfgڙ-W1^ PZr'g?6&j2g=,IF&\hJ*^I@ l΃; f߮`-:e0(q(PU;Hn8o+Gb%#/'x g(G M0*Ӥ) XNsX9TS\#58˟3VV)œjsOΩ:qY%H렆/"E/){" e.IƬ'ϑ7ʰ8Q?$8,;T!Ïpqko)¦},QԸ<Wwj JoEC>^8k3ڣ!k>WŁ4suƏϾ=J%{okJgIUJdy8@hz}Ssy<c`BL47ێD܃",p+\^"TgXO;̚_V!%xW،eycy) mF&zbˋËf99ܾ;z[Q,N2fz?{u~:i4&W}0Y2'} |}^/v] ,'ʝ<vq` E5>t[ԓ1%Ao0lx8geMGɑ9]}Z =2S\U8MrؿuOi7k0i>b/-=ָ_@u7{Ѓǘuqb쒵.: z@`6=$OK,|`7^=GkAV- C/W)`4ًltDŞօ䂼k7InCWP/"ܺv̈hx_u_6LE+~F 9|ɈX!0gi;&spsI2 ᭻C)5z!75ɺZw﨡`Z.0LFyW$ғ~%;;fiOܞw5bDrACKnSS_zѷÀ',,ְbwva?TWe3%\. +t97{ mF{G(@]o%WK3acNBP=\fKQ[x+p&]j(Zub}Av۾5"uӱw}\rݤs;XӘ6bY洂ڔvٿ'E~,kqAxJW՝\H=L w[qD0@~*@v kK>g;YF$^-sS 5I}4R9|8w T2!. u4'nA_̏r|:Vƿ/@eGDaNYyR3m+Bb3E+˷mbd֯PEr$bfd mWv,|,^߱#aW5ש_ŭSJti4^)XNX'qˣ^-R:6[ܔ"j".)'W˸Fjj)&ҝׯ-Me `%N%M/j.v)5K,GQR Ub!SvSy.ݻ\ߔҘOϥb {lRdd q.~.J}'9!dQU+%e G^CfMF}vKJW7bcNyrsZLWI33!?VLG߯ge00% ۝H#=%Z2N+)IaG鎁4X`ZDh YRU^f @A3Sw  Y21iұ' ;?q%#qΛ4:(ߝ׆P*3#I3$9n?_nW7nөwg];%N2s79>F֧]H.nQ${H9DVuyvqȸRFAEjƒ_y:jx˔ E6|H?n=~l\n!~4 CΩ˓ߗLJL sysa~op3H:?\t~fIM5T0K .]~5jЛ??R黇I4J%W&lE`]m 'cp[yoƘK,'Kۥ4 &LI\tΣ]T-`Gj!b ;TT@ߨǓd)}ޢGt Ý م(H3'B_;/hendstream endobj 190 0 obj << /Filter /FlateDecode /Length 7245 >> stream x]Iq7|} k2m-mnE2&5矢ߠrDfVUDV{\flCh%+X}ѯg hw?os0tz~Gs?Ǜ;P[ qsQ7'Na -z`rfmJO*ui6/JŨP`\Ynss`Zc6+a*k쌁KDBu`߼!Oo(uvkS[߽}07Sq"$lL)egD5ǐ#1M?oy O!yHJт)eOj XBu+&9 T;huXUi0;: yth2ߵCo\%B"=X~,`6m}֩9>9޼޾>9>x Tz4F Z4HHm\jx:OM%i*x Yo^Ug7RQր_4S >C3TE>\{z"wwDM20D[A nV$hVъ{/kEQ`uHd8PzcèpLP2ˬ@Ld(7 "!7' 8n_s'K^ʴ$ MSS4"(tj1+aYT.mZ,txl#SG'El) RJ6 thӂh]Na:st*%!mY y݅q h}iz[kL"/8pZRVPG`dH:OJZ:h_#<~6|ePjmQS/Hc,DJGZ?Zߦxiڅd% lsa+"~%F>i̱ G6Vz( kg^ąUCN8@Ot]+o~YG|2[ i7U)! !Nr@k#]+ 8lҠ} W B·:?ŽG?| @EP9]/ z !:ŀ,wUkR+I7e޴Aw98Ls[er,gX]q92׋R 2fJǃCmnQ:dIX? Z0m?^iQXtY8"ƺԼ>G":l:֛_ya) Wnz;nqϫ~IApJWxRQW%!^MgKl[-N$PrZ6ihkJ-Vk~o *$ >rVHU3Z@wk &kRjaRUB~;jr0ip=b%)Rypa+@.Nrݢ%e); zP ,BJvW^i$.\k29*eY`aX GolEQդWfi2Z9@dp%9U(*%l^☖z+!Q ],gq劔 -}c|WSsD lU!P \G*uWk ^%38)cε.jqO6P}ߪUa]cZXH(TYvA^PA&SZ3z!@[fm`%BP@ZuUmxs\+b@W̖0pv̕]%:fQ6,or,TEJu7ֺ;27X.ȶ?)7,bV~CjTdV[6zY8qِ2Jp#?Ov.\P> Y&Dت8h_V(=ٔwֲ.r5C N"c7"5} N^)Bz *h#|i5Ej@[2J$.QkYgeRPսX@*,Vw]][{B\>ZW l_je">kc_ A2LTd.Wd^ [٫鶭Jy%}@l f;TQQ`eT\V'ľ^V]+5H%_4ހ4WnK+Wpʎ,1"K-ZYK-\a"2\LxMb"PfOKMM_T!Aä @#Ic"1R 3X)U?V+%#̤Y~Z|foR-Of0k@9)cvfI͐5EgO 29)9)C٩}1G.<TBĦ)`xwȈ^iDuk6`Ѩb b;[fv1Zgay4wYRs:G]3#kBl:7lO\ܗq]z`IW%7G9d<1ujP-8@ř$9N 'q lq.vڢ ,)I}:IHw*Z(!L& A7?Y#V.gpytr|>6!R[L#^[G"^9n] qJ%H;j*r'p{9bYn!,8KHk}xRkVDBPvkuX!*փvCko脀6y0A`ʼU}Ҽgs,KR51_HRKNu LPFdT_I؛a[=o\} j͸oK1J]U{7qMqHQRR+_9`hoõXST^~@- 9pC:=MJXju1-|Bo lX<75e$c Zٚ8vNS R;TzpmPq3Cg}N2 w( rcp&5RI] AvZÒ#Wu0S5G0fzGd2\Ca~G3Ǘu\I uuK"(-w`%;Wά4ԜX#$C#u_I*e`ڧ 1rOɑ[M@ IKojH83U Z9r׻hsS 4Sp9 m]-U+75.m%6iLUXZ ޝdX/kۛ FLƒ (+DloNyi#]?Youb0o[5էKA@p>Hgg~w!Y&ueWܸ3 g3| vZk; 'GK7m*ug-"uqލ%ɆسN {Z<RsKnp-Vq %Qd6_aj5ӟA±BΨZwnd2v֚C_>~(yPk@/[ޕ]?֔.hΆeŠ*706[c04 .uݍ+*#{056 m=ƀ?zVʡƘ/&y&caZڳVx NaCauZX&ӓEb+g /Z% P '{sF2%bqi)h;Ba,)٤flZH%H݊50R@f8.iG 2=`yH5qcqRKF?ʾP? mk&}E?mp0?cDP(܋09Fg7`]FV˖A ;Pm䒃K#i4$6M^5$Ǒ鏇~_m+d8܀5jg?񸜼⽏nf!98 {F:7x^ZTWB~qk4?Mn}>}趡`Q|bP:j|XiT$PAV,Ǘ/e瓾IoIi`Ԏ8M}\V.]F$I#[7CW~kep9[T2yc@?@A$uLX{vp66PΘ13FC~c.1QP;)~OT#zMR,MH^7Un  py#tdLtdӼ'j"(u9,d'MnI:EhK,|Ad߅eu8w.,r Dn٣$8 =Ը!ܷdB^?ž%w#7B!,=}CO~t`Bw.65a MA"`LCL$vqSP< 9-Sza<'JwI79P)>wdgPxf:F?i䣬}$ R{M7SfX9}34eo雓)OJ-9b` A |Rw=b}zNjq۝lYbO3%=pZ\A?ptZ[ G\Y|KWKp]POBP6UinUnr@Q&n*Ir̼xMoy;TIL:㾓)`!_ vtR̙ұ9ןuFB=ϖ%]6拁ecZM{ǛB0Rn z.ϡŸF(gɣ{ 2v'Hendstream endobj 191 0 obj << /Filter /FlateDecode /Length 5283 >> stream x=ˎǑa/{E.U3aӀZ? Ød<<;UQCR <+81+?8w|~{4H忧??5!XR  >>8lz3ިziѪVF)r]/gyuy`d_Jsu\Fpk+/ r_1uw0g 4)TJ9R~x 4e0B'u$'π10=Е24zJ} ]K .p1"l4J'B:FurBf&nWBp.RHo.BZB}*ߝNK ~2 ksbu{;lǶZoZM}_o$^oPqre #7Ec;4]5P`Ts&d~yxuN׉lEgY00~%"Ǝ 1SDNW*[؆A+[I=xP +Ռ%geѭ;B:d&xtxYPiRx"h#Z=ݞgg7W?4rHW [g${E#狄ɨ1h0N\r)E˽_GCD^'k᫫e'/lpt&C^ !s.&5M\7~9x`rc0`iBBH8Y#f+ʐ<8QF_aw> ? l`go"t^fG{ [4ڭLnM( +p>c3zu{Θ&>$|Y`rRW!6zFC#"]vlvAP]AY$H1 jNOwukhsVI6<ϋnׯުK@l?OEx zŐCY֌ w 9gD:>q3=}"F~M}e [vr\LBh__/hps` 6 T)n颐b﯀=3ğ~ԇ{P~dL^)}E`rDy!Zu@tr䄵! d/n0?|5 "~.DnoО>^BS#a"N8n!`j_r_"C ;Iţnw!m4 EDj'كF܊amV4 4uw}$G8Ė3{tby$ gR::u~n5 ujl֙?ּ*g iUQtqKcFBWPpkEɹd/r v>,MSN 񤨜T #QB2mmP#B}[#q}}K}1YvmQ"&_aRۤF$* LF[K#q oa!Y}EE|D8@K1jF?l>Z;?Xs& EhPK.8 n a~7JBBBA< T43 hy8jᠴF0 {8+]ٞZj7g#!r'h+P}G Pν]50cLT{usz~~l؞=cExccwIF?.Nq~ SŬnl/˃._oc &-J9qL6br}d̗~ yRؿOuK8Q 9LzN ŪewrK|S`KwP6#G )$B5BB+oLv({kb>W4.@E# ;gy>,|B-% Ee*cq뱅QK-Ig2m\7$hJs0 5S73M`Bߠ k4|R*W/nWw7W[.|R2YiC0x%X"49N˞\S@wr22'@f_A*]zyAfNT;?ztÌ1x!èjpz?t<8Rf.Jd|d"U^Q &S%G]b#9$׹„C@C!LY='.r?Fzp?ɰv@JnRG$Ah47WLw(: t'xJph*]`@Z҆L!Y.EbkF 2)ek?w1 ]D ]Թ(ͩ9_ڑ}ER왤=oj WƲ %pgIE|GAfό!r°Zrg?g}9'*2A7,Sz ^"(fˬY5,p?ؕkvA^>Fmil?,ҙ4ن-ȗIkV}b%&kVo2q+2.,;qg0(~5ukQej&.휲[E:]w5ʢ)18dM42`] gq#DNe=0U[& ñNK;]h?K)bp4VEyC^\/`1:)`Z.X1I#8IKCw͝h!Z,k/ߩ-83gezb+d߁eLp&#陈U Md@{/S8?,8I&ڵ;prR7!WaP!U( .1@f`&0U9 1?ߑ(|֢W}&߆$\ SvA)MT a18;u9n3r .YeE*-F.AEZXJۿ+`V[耴Xܳ%Dgp 4'"7fG\Zԥ: GJ=GZ~勖Z{/ނ*:EYs û^ ozho^BサXT:۞={?o;V+FQ?Z ]F|ߢjy= ^zNNRurkTr1@|a}4iJ7tMJrKs CƀB!W<'k5)cUar GUa޼*L n<* fL6.ʋJu s0$1R/n}BnfdsTE\3+` ydWrAp5Dȍ9x+|6'TkOz ]t9F&9rԿק)VOKz,5äYg] Fvzhvo-I5.QRa;8h,Bg@27klb2)bH dcU[OVj-lX,ê,̑0{e7U~*"%3̠-_rU=RFo }!? /N~endstream endobj 192 0 obj << /Filter /FlateDecode /Length 4687 >> stream x<ێq|k _m9AE"e38՗:sw)!OOWWW׭5Uguwt<=}}s$ 9N_i#I CT$4hN_y{vz.Wr6=1`Gm{ޟyYlܿ?ǘw)z1fpj֔9W1f SB+L0zzÈ|%61ol ׺Bxȱ翻cbB@7_??GوL+0 nY0z^z=ʺv=-1޸`w2uU6q5~o9(QXKxp9i]41{^=d\R@=W#u"M>9OUW pwi,ءQbΰqC1Ax1N;Kx:uOčnMd-}yN٘g)WJbM5e8r1Snq1z.T=?vW2;t0Ke~ `̈ uqԹ(98^1lݾf@k*y(tTrx*';d+$ӸG8B#=QiA >D żK}4p3ͮ4PKE2MB75 F@c.Tcxտ<8oǴ'DDqp~~CS03gK 8%9*aZgZ~K[E*]6s'.^➗"jdXsla܍ӝҢHx- qμ/v'XOp̕3_6eL96_j01[h}* ZsqZetеe6d9ek:Ap ŨTcB A*3rd`& N18 {^jRc3)4~a*QJYg0.y!4i_4IqS#vW,n#,M=fj?NE8#'m04pvE,Dh,Fp.^9=Jg83!@m>';"1n͘&1Z s+#ENŸp{2Iz)΅16Uj~&*$>}YHrRfEX*\ߎb6AFeP}9tjuL:Ѱ}z z bˠntrHlPoK4B凨'& q>v'#%oka^+)(RPM6(`/8tr^`sM#Oc^Ep-{<YN 7 G`| (ЋBq0hܗ%>X7mnh,NqpS='hqJUBͯ;2K I—uT|1L5!IO5?5< zUpgLv$%qV\JP=hnRiZ8_rRCDFNmbL| aod-S*)@ͧS=J>O3'Af\֙S +3FHJSO@u-BȞ_qvҘr$"H6AM9Oe  ᄪN|N? 7J?U?@ӥ^>qy<&lNsȡ( ^o$%izm3cVĀXe+@/Ũ30WH΅3Wǵ4q)}ZhDS 7YS3" rB/R{"Zia?-pKV?9Rw¹G1BKj:/_J̢oZW n)Uv1&K0؃ 9h¾{TCN^]#aq0e\uTWn[!l=_+9#Ε3;9V\!Y>Ø*WT`#:q~sSq}ɟc+bFh,Wvzs9s'OO.X{sa=XSs9=0BcwW$lx5c[78n`8;o{# {i3ּȥ`z dM}aϴ9nb  wZ+U?-wŘr:d۟aj/79zfRʲed7%PnRߊ_0Ezjitc0\㊲BR%{&Giyx LUM8 zC;6]Qޛ<~؛5=R'0֋U5v-@!261ECwyo:(gpڽd;ZpV@SU3 UCү2. < a+WmÂm;Ӳm3yU7en\ز$6Ak&Kb[Vj4iTo ,}R Rd3˽ȦR{%g}bUEՃ`$׍R^ |Иb^0iݨ҉c2Bg>h%͙5>Ǽ RwI?$H L- ;2.U|b(m@/2'XL(~}3Rgބs!H}C*0*g+e-抾xǯ1G_z/8r5>%w@p{oFM6nϿyMU:_^}ė"wϸ' N9z b0PD=!n{`M{Sܘ.! 򴜻9?czz-n'!s=ag;vŭNЦ((0"Fxq WnUk-zd8a=8]K:&1i^Į%]1nPw[W٫3şָq>gk1}wpB'YrZZVƥւ=KyWe6R2:K-#("2*kFPFQ," _ ӽs}]–t#DB%ҔvԳtTjCRųSKyF\2]YĵV6ȒY,rHX?G%2d[G1|}$fn>qj՜x8WkDWY5a?KCzP(Ynr`E$,@iڌv)^a)t-n+cnB5*X$6d"%!;+YlZsxce6)ԨoEIa2OK^)hwt )ƑHϵRG(J ;ω$( ;: @72gUFI5e+1"MFOwxC`9$=d8bY$%{@*0TuF,$x`E,K R3TrDyP9:DN)0j팛M"@GOYeӾ=(u/z`z&N)OMj8r27w 'pendstream endobj 193 0 obj << /Filter /FlateDecode /Length 5275 >> stream x]Is76>G,ZǣglGw{CkWGY$̬1ꡰ$2\?BJ/|vu~W~S*w|C[tóRiW]JUëAY]զ_Gͺo:F7Oj]Qy m_EkQj]7=$tՎ6oFjFR|}9l}wШBuzuJ+~V'VoTx{گHzn̾TU6a1ubq]7Q4^ -nbZNUJonGGF \o_=oIWk^@]w)E'q}7ﲡ1}W+/W4#ӣj?`DH 4{KHJĞ4'jzBńӄˏqll;)U*ᲱվѶD; 4Hmy󢛮е!E/u)BAożyf2Ur+ %v_| $e"=(`FԆ%HUZԪswfǫQWrd,wLǍ;d r7g.$S!~Fyfj,iVL *Fi6;  Lu#ԁTU,q=9\tZI ddތd /´%?ou^l`YzЫӯ'_aU!ExzB -Z 5o'M%`E`H7O16r!1 ݙu:È`oZmu( ]ٕH8_FqYzm2^fJi[nun`npAMۛDd4̡4W;hkl@1j7'//z t0a:vY8Q )  -{ P#VmѷRޮR_).HŸF]Um},>k^SA8\۸w֞'7쨦,-2XVnңC`,{꨷L,vFZbvٮf~]dT~4ET0ٛ$/㩋WHbݣx"3"*6T"IJ7^RӖYRfhf[k?ܼS&mQeiss݀/qai<_#RAV.I)P(]QWzȼSӘzQ$Y2Yt*{)01n%}!yoxS2r#'<_yjS*N4B,dc yy$#x$P"<,.D̈́1JEwꉠYwD αH5CPQJa;%(om_(Gi35LUEIm<*{ G$\c Q?ʓ"&Ys kXufAtէƓ-qaPFU$P-BbG8`*qԙlߨm3َ)l%o X*@p,Yj5,ey^`Q8Xˠ)e#r9h! ؠiulB$Xgԥa4Jו|&kkC€F)ػ$t 1/SJsI+KS*xw.oHguI;0TvK:L]`g hͲZ< SˊKufXѲjd ksz@Y4>!o!W~;`ee5%Q%@EmgQQд̢fo/]`L\/$ަ-ɿaBAy(+V2e .C6)oaXFX Y!u,21SL#l=s ; ٹ r/ >#GȚȧ 4$w/myʌA䁈}-()` )0G@9$-[tE!b+1*.x80 L45R 4D~[p y8c D`ilaȇQ39+!o]с}2ur~ \B2{FoP_D ʹtF8'y8fNz*t7oRa..@ 6ЉoE"Q2ʝHKtᒒR)9 ";fSvuɱNܤgU^ -oҞ0ڟ9r"eÙ]= -WuS'h" f]=wQJOtt4}pmcЁ>Qi Bʲ= VX:7]F-I$GSǹ R9蜄8bxғ:tNābS+?̕؅ K<5N@pY n&e+G8>2O1\g^4puzȍȪ0^ۭʇը1 'f7/X*kA Ӗlfn_nJ*PKGLzP}0Vt@K%ӵ߽aeG(gJ:~de?LOCnC{_ l3 (1WYN)_a֟XfjSlW "Ut_S0hbjIΎWS-Rmv|y C;CFe eWj*a9vD*H2=\dgDgQ[z <(>i i9x-؅tB>2J7PBqm EEIwTKCB;$rb) TB l.],NtL'vGN<;(!wVK TA/P&+-`kPXp||xz% h_7_qR'S(_A;baM]^x1+U8>Q^Yn:!f0 b(3]vѧ{xWd̃bl// "R~+ۉƜԌ7Y|C={8xGz7B)>>p B)Sώ! S;+upX!Xgtl}_04,Eʍ`lwz@"H!i&o[t qIuIOVSG"(AܓkunEiJA%pӱ,6 .+v워U#|kXHz~*mq;nND{rdnƢ {EpF5z#Ť|2d GphHgi ?Gw{ϮNӭ7OKPzC\K_1]P _bZ]eV׏}9H<]?$U0gϔ܋e]. GɻlC rHGĤdm_ノ2>/+o:XF3l8'ݏS7R܆}_A"d-}2d+%6^7'B H0b)jPC"~ \_Mڂ{~@?sK;ź.:Ҕ̱uy;iq5mSe- }N ɭ\7ʹ.w&"M+򶹬(ϗdžt ۭpU> stream x]1 EwN vX%C!zH:tlo=~&ѫ&jFt:jޕfo2?f@S==!5.A*MH1+NE ҵ K|)3T1Ke[!&zV8endstream endobj 195 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 564 >> stream xMPoA)-EkFe'15mB菋4%QK`M), %)Hv#5 } M{~14Wrxh޷+ptO$)!U/iGH cNEtp{d=l~ %iѮg[.>xhhn5-WҾ:.NLCzi~SXu([Y/#m5w|FlVkSX83׻E3Ѽq p^wWp4?> stream xCMR8$vz-  ZZUQmqCopyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMR8.CMR8Computer Modern23vt`‹ ' <02ZYΤ<7#B? rGlwYx?{FvťbڽQ"DfVT@htkpozc,MI%ڧϋ1# :Q?f{ku؎׃$Ena}{mltNx~}vCoa  7 כ (endstream endobj 197 0 obj << /Filter /FlateDecode /Length 5271 >> stream x\[\q~7&yذs|p;*$f*GYBܝYzo/pUҸ7>3$;)i| `q`//Ի'W;vwzW@=8 #ٮd5w-A)_ҼM1MSl3Tv0R 1u*K]KQi. qUzǎWx.b 9/b7|~n RMqQ[cSejz'?*Ke2rqnRU+u{ymOwTrrp&ѝƇxԸ}3T}`VL穯F'mX5 <+cr2mi9iIb t\zoH8,פ-_ut΀hH@5f=.C# ˆ_CW{ 5TArAjK&4kly^V&oɨ(`BڔI֩qۊ{+Bxe YgE'?oX0!Fae 13X۝_<g|`i tހ(>^bGI*#U{^7+z[Pt&" e@sІ0rbPjw6U^s]eFkV!YuT,֘a)֐۟` "='  OqK:!9qD7v@&CF2 o.5wfUEbtpz1lHHv Ӈ>o$dom>VܳBaQAE6z3О\)1ة0oo]=hZ }= /Q9һ[ |wݞ OJ;rX ~tҒn!x" 43b>DYV="tFZmE٭}@ԳjJ-vbkZf#N_mB"rhxw"Ede%2jE>:mEEI r֙M4#*2ԗ< ":6UtG_5.hcRYlO Ʒ1y9Z~Sȏ*pH"(BYfg8E}{m,mtZ p5=!{{ڒfҴsR}>yhY[7!3 {[[s?hF۲G{Yvk dLt* FvvߔxGhe@AitKr*i˓0J[~* USih3Af7mt}xjE>w)W; v3Ud'(BE}"uX{]6W\k»X11qi-r?N1kB1ͮq 1i4f2?25~_`i*A@ܶ fR/5hqʻ*aDu(&jR+N&KnaNRc;WuÁ*i@btH6!)Env;$rT7⚱\Yԛ[E=@3h`AE,粂ôRn}@r^ֻryS'rsɃ$gBLYF&.LaRQw=M#0 ĒYx1P4XŃt։Y+q-]|/xX l@xWl_q1ȿӓ3J!^e⫰tߌ)iY*#`8pKH{o2Nԑ3E6u).}s>b16-X BJFBG˦ !{(WG5w%#73wrX݌8'!LQtsamk%HO)/d\D؜#!Vɠ59Ee H0w6a30gs@'B=~<&Lf QzZ>rf`J$L*/QjSU".ue&u@ W1$`|6 @VE:c3CHw6`L,J |P$F90yՃҝTo0?Pcq|p* QBhLaZ9^޵Ɲ옳luL{ܞ(y( :I0TQ0ʛ+o1ZǿHb2_b< 6f`C !ZD̽G I%s}69ȟ%fB=B,6$@5<:9^6qOVM$rVP-@ULg1 "z0͈?}Z9_S#O/K8ehn5:&;_.cs5; ?Rࢣ0?sz^Tm1/fſ$@ҕ`3 x#bJxkrvʇ*OlZ ?Vb3Xtd (dO1J8 it1W\+Uc3WxI_xۅ/'Gp>g%\cY j$^Sǀ+SgW}u$Z( j Za` h ]amY=bC /FW}*>U5?BI B)A_PA)T%q61Gj`$8DClC¯{:?z>P^1$\5}^iԖ*o{PLUWYFOч2RW_#`01RjǕ/+SYtT4?im?[cE9SV\QGpzN3(úĚYͲQ*BQ0Y|yr ֒gK(F=%_zk(/*awҘAiTHa3M2 Oa˫]@z'36lj|=AT}*({7QЖXTwJQwug9WN jb77xٗj~ )W?K-Z7= /8_7\oEwDv4i=V//%L€'#2`3E> stream xrT6GbTk6(9LoU&AhoGp| `o hZq3 MF`ٽ;R @cL-U_˴a%8vAX@ .󒴔{s no! NjFO-Pp+e6@`8d:j]˜:X Ai L"m+.Z&*.Ax:/͈3b'ʏ0%,rh$4 IgúINQ"L: - eeyATҒףG`^B$lLt8)Al%l::I{Ɂ_Z150$,$ AjOQ29eBm)T] tIܤl%0 O)Xc# pSRR/x[;[qk#53VH㐩Gs=m LT{Fx 'YѽЦ(fmK`-;d!Ykh!J2)8. #asqaW_1NuAOs](h`',7b1RU Ue&l ZуA.B' .)cA ")o$8MGcU¼nk嘜3㲮$8̑2'ͬۗYQ/lY޺40psn/^G\Ibw&֠K|s+ld|M]L&LDd?ʔ8O}8vWH2 BFwE!nrGϊH,WhxBD39mcl9UD' |HѱwTX\PKAX1+hvAqu:doGd"z@ގ(ۉiG12 څ^4㽬 W耡 Z&T[Fg$UvB-zbX ?+zUhAh .Zdd;k‚e/LAbujs0b'E*i ny[~~`G>nZ%} ~ V6;~fL~ zP_tg! $'GT-[;ADe HŶP5D" xH=8L;׹UM~A!]+L:- 8s{1+Jf͌I˶b8Z"ٿ̑xf Qׅ[>c!ݖL3zޘvJlc}?=g]B-2?Y9b3=Nv#gzSڋ8Ӯᖾڗw'3 =,>u72Dq_czN{2pߍg_uINqeZ_% l9~7'SD?!ȵ쐌p"NI]$r=Ksna, qOj###yw,H cgg/7EwT}ϥK"-ܡmisrjUB;EwbCwc\Y@ ri-ζ񝍹XsR+GWW'1Xq"GwH(`D_ +3!{G,gKFk|8'c3WxbML&k~ːr&p_zMm ?0bml#s 9MQ Jk p5q8dĭ;{wovdKfLDRV_='NY O ;yZ޴ԉts.-DR6:PW>`p˿NNI'7p {=`&k#EQ>j-ƀV+o8s2T7U0bp6 sk%(_Ω@?R{wF ~}hը*tYSnR+ vOYON,7G^ѫ6دu4I]@h 7f6 R,(SrӢ)sӀ)=!o>xzx')g%t%gtM5v QtȱM';YdR§jM1imy 6d.C7l<V3B>ZLd[vp[\Okt\٧Ap-I {ӸiGMxmDϵ0jҦb.`v+5\p6ÚwԄ^'dK֒kx0},׎ q-LђDa75ϱ$YN$t=~_c>RB>K{^ : ))W=w)*$E1(,od[4`#7ۧ~B%uffh3wC"0]| >iv2ѣ.E5ņO+"\hG>D"E_+N2vmsɐtkHdn6Č,hQa!/\=斋m3DQM-iN mXR);̃}q- rY據\۰-QOa>wݔQŰ&Wz>Ml%JUY8SulHHp$ $ɰD{Ze]B?+UQdZrzVXQC%iPi=_8^qsSVy(a?ީݹª)PBUo~| yg3epntdRJHMT!Ұ& fTd>I*\\eл"B^L1obW'Qhi˸Ͷ&Sk^i2N墉s_8>[.VZ]m"oۼ !wԦdM]> stream xZKs6kO_BeLGfr餗N/u4AeǍ$'6.\ N8&}a仌4#/?]b="݈VYw~')Rd礙V&:3Ĕlo)% `] 5ۘl#L,eTfxfgJdz͛# lF%c,^*_^#-9MؙJ%Y4W1?D5"4Y]n4FW1ڒЁq`r KCRA`gt+9V)eAX -79ISX 2F.lV^jRU&mUsbZ4UY "~4ϊ`dfUҏ]:m5"I)}o (ikZl/59:mN@O6 h&[HӣC 4"Ai#5SkEѝQ֊Jъm!dW흈H( T~LΗ^'@~?f4[|s-^}׈0cx%5os}OD>h$l.H&h ڍ֮ݥ/zR~ 8c2)n);t 5;8ukMrW0n@tSp0/a8va D i}B__*{*Gomڶ#tuۆAۆ$;p$'nP0u:Auwv2;7`z̒] ζ` V[0Hڶݴ~l3ONȬ{;`VZdlx(H(3D0"tՑ )P GU$`cf-G,5i+k/EK 28C{_ V8'6g0^8E`9~,5hpwanL%IhV+O WA!\FfxF- rڕ+&^#} 'eLQ &' )d'GZ‡F?$*(2z1 WV? ;έA6{.6)˱Z[~zżI- ,{`% z*c\V׊( ,ɄjU%&.ƌz2֐XvGRBRVRY PTvM`^a5 ץbϣ| =bMeI,`YB7T--4, PJpJ8Q9l<\7Z&ks8@U&$)JRΝ9wsž8Ou+q~K)iwx%giB hJyB'8O ^v}]R/Lg5.p#Ú{]oȶ^E+\bN1]TgSGjd wn@ & I<ܯ$^byy])r|/@m G [(#/E}Yio<ebV۬77Lendstream endobj 200 0 obj << /Filter /FlateDecode /Length 1729 >> stream xYKo7kO *)r)KKSY.l3.+jmmaX+pb_{qxVw V_|Xf.n@mw\j}hOʊ:G oo^~۟?z?-n_rCn?j[>f|X?Kr%BO(^J- ?.50_dm~xKȊqrGn{36*WGTK:xC47-\ZMjo$ 1V7r2 r ,%0XD+Rɹ,eEs&Xex#?empzC$@ds@;ٞ3t[ad3 0&FY=ME[Xo4E/filjw4OqR/Oy y4dC[LAx.#6u"cWp.KKY:Zy.th4 (a: N|Ψv*c<~߽w1W3(Gs#0۞IKeawq+ϩݩ;]/%$vc$ThC!Peerٚtt<([%KY,nX]37v`bӊI$ifi) (iLiԤң cmH9Xaq>+AZaGE@/D(IQi.OmO3)/!5PR/yPS#z| =E`Wd0yKSٜ~യz)ZŬ׮y;h^ehbdYiCI%MKO~T86fZ9Ba"񭜷/ԑdԐ?ziMy)ɬSj<z Dzp0HÕhJ ׫w)}{y.8+G; |2spyQ\r3i&_A|'3WAv@۝T[ [ST 1$@2t-#Q6GITPza-LKe9~c7oG?Ԙl789޹;uQ2 c\jPRɑ}vhWI C5&9޹,x:>bx)@|5xb~jS=T|Xa[1p׭;J|]?568P 6SݗyYrS)ndz SY󅦛[Q͆-6~&endstream endobj 201 0 obj << /Filter /FlateDecode /Length 1722 >> stream xZKo6מ\M-7R "A`ovFN]dƻi #?C=%7q×>C!kW.DnaUgy)~\!ZŢY+@┽Y ҖƮj Ѯ']= (vI{v=+XS~֓M|8]WIB$t~xWh<(YGR+Bz`.wjݕn}axpa^.v3v}wO@)eip)%Կ;XnܬR,[mE(ʨЂ%2'!0h8ayᙆt<(:O#[v ݎɢK%5gL _*کY8tVaSB:I{gP(T܃ğ,н.ހpL!хrcDt6٧iL+3a!tu|"C=O6QFS 05,Y̨3gC8B;zOrTwH1|D(D,vʌ3O@zzD4%a!to+FWdn~St8yf73}_I'K0K%%!ܪ1>hדbͬ~hwIRKp5,*͉y:7 ?c799( Dzz{f8!gAp# 7\3EI}Aol:I+'%x6A39<&IK;;#&nvNx0JD١sNv}cWo 5nΙ/[^qeQY酖MK\8+%yސqZn^,WW_< VzE"H[N6K1Wja-fc'Fݑ?{aAbyޱw\6ِX, LK^jCJU &~64 5och\&^-A GǕpc7 vU6JTk|Uq fg+㾜ܘ?= 9m܎v'-[UPI0Rpdl9P 7ڰpjtr`/s UXM"]}sqՀXL:Y)dMdžMHԐd,E$u0]#LҞr2Qr99jzS=Og7 IϔKh莆oM9O4GmhMyDӺtwK{XtxE2;PhO%3g 5OLk2ta3ihӠiQ.q&Eo2<|fvU\%35=tܻ92PS0L=6rhyZx>'j7P~ɯzNJ|GNdJsΠcf#Yg-_b𫞠9KЦ&Ө?&&L/;ɉV\L%VYƟkR]ԏH#ZI1L \1̫{rcp%'#ۉW2yG: 2:3ϭKRz ڿz_U{Ԙ< ]@r|sЭc:nGw@qHB{X݂x5X-~Mendstream endobj 202 0 obj << /Filter /FlateDecode /Length 2281 >> stream xnu]] Ta0Mmh]Յk+nZ["3gCQIhok ssșKūwnpX⇅Hew[6xr~)2VXܷBi3J@5?´Yᖛ7ͯ!0w/YD5/7IBֹsLRĤE^+#arBXb [#9it|ׅȋƛX6XVy7Ids8m5뷷?xp]Dԗקa?:%T#doȓQxaEenRC+Ʉ 2uFdR^h15+@0ҕ[X VHn"И鰨B*D6:%e؏8 'x4|Ǣk͎ s4k9O(7xƓ1NND9-ƾ"U֗i+VJ2X_*ǢR\Un#?vc{V}T{=RߙK-59}uΩq Ug)$vgV4_skt=8C̓ԺGtWapU7Xs+}2Tf!2bI`|Sڂ`% }&%%1d:NF~Vl1; yIsb{" A-9 yIEUt= bsDdlS+T#/3M!LgC~/M۪)75vjYTc].*E%d]2M^3jH1qvk竫|֗ ',MgrdU ;v|9\yKy% 'E4$9g} }^NN%smO%'y[ΜkDv?w9Ru`tޙ3zYj0ʾ+ )|C\dTV=k9IDQ+>Z!wrG0rL-r\ytrN,$$h};X#6?endstream endobj 203 0 obj << /Filter /FlateDecode /Length 3618 >> stream x[Ksk*|Ь`I9Q*vllrE.)JRO!x4f0\+E䁃A?Xg ㋽Of~s_>[3zǥ-OH>^c\͖{6:\{j,|%o/Qx/Dkp_[ly<|!PT0if/82LׇY:?ϟa7 X+6 ٦ h)k|Ebutz6<Ї}?fOi`&súeF8uֈ~0L!p觇ra/BWQbE#zWj}ɫ Pu6,=yNz(OC}˙l}'qHƅV_~]V{d>ځ| q2Ymji@Q(ð'-4X5 jZ9U+f7^kPͫJb IHݲHV=l[}HCp_^mjZC Aa@[϶b`О+ۜ4󅔲7^to _jK P* ˍ!,Xg{O;7o;u/EvTx ŐQO-8Ѽ TIݜojYg텳 yD͟NwZ5#qIQ*rIcB9%df)BAƑQ: O~~bC?YHb=98>c(gL(̀őA fy>SPL8P[LS 壇q9Y5kvD 61eҁz1߀-h <\ +(gs-ZFp^m0 !5gVG׊ Gs :!j:SL7prjyy͞Di}1' 5.v[XHpHv9$@b 2QQ``s .0a(G8y21r#Dsӥ3J'7Ǵ%YӞx@ОG{h%{A{;vuBBg@i9G\(%zL[FfU5'Լ5b!$$0ˏՅdrqlGcGZhcApL{bi= ̮ ܮ ԻY.?1Hd5QcǴcŧU J鷁iI̮]u1)AАjR")wܒ{֤,u n}wyפifIYF8ns=)wBmO$e c XCA&XCl, %] )b./Ȅ `: !Zn>I?_S<#aAЉҨq.^UIB1Ln}Ƞ@w GF |Qj1ZZA,?O|ΔۘVqU~!2N!)ZP0$QE_\/cLn͝o:'7 aq)ټ_9nMp ˊ)Bt+.IXz〬rPDuM eukZ?Wt~p$!FAzy~&_@z5VToM^?1ߓC$)~WHnI+#g)sj@ ϋ1(X/0sZQP<# s]x8t ȊudMr^j]mJ7{8Mt! pZU "Ҭ^m=?"eȜI#ɧao"BS $_̠-| xb"wt)gd4s0%Au=1%4~nF&P9ށ7^*3cHܱ"Ǻ fO&\ ټøaIQ2BPL۹Z0RRkT8%K LKs ƭ0S N`om븄1vsbȭŤZ@*߽0v.(q}1E$3ƞ K$ b2Wt6>zS ע'G`{j5/IS_hpxD @ |Lq-fns Spة711B pƫ<=OYsW?I9yAr1qU JOd3.2"=f L#Ew_tL(T{ٚxRa+(p)ћM۔vN0>-by6&iup(۪e hj9‹ _.̒v.-d3r&TA.|# fJtkQJQ ^P-i@hW0 .HZT}[3@ﱷ谷'j?s:| Q߆?? 7kԈEZ>OcJiO}Ӏ~=홆=C(z^h({E'{.Kp%YM2d0] /v9IvxHc-ת޺~UL[>d%r0ʒ}BĒCUkثYpcI $6C V橰Цb5_ KE5b548MgƠbBWjmfk"+SN%~t+"t30A%1E @xjd":۱bjllڞrEZXVr4ͤіq#Z1\JX~mw[Nw[D޾¯OKj{Bm?yF[/l!<ֆyNT=˽69endstream endobj 204 0 obj << /Filter /FlateDecode /Length 2814 >> stream xZKs{ܽxh*⪭ڇIA+ѲQI13!Ƣ.'vT. ݍ_@?99;r X~N d-p I$\֬-wMG +ew(ttБ]f233%;5ˆj7QԴ.67`P4RK4ϛs?9RN] jr2w]=['u+UOUSЫЧKg:?#:J!y:tNK})+KdT~bV((z:IyQƕsż)!Uʽd}ݮz{nn0)Zm]5ۻ ^8mӆ/N8qX"w?K}h9kDȍ[H"7ސ糫q~>nY1Dnl<_%_"fm!>'&ܨ2!DQgL~uޮ7wې=!33p_,yɼ84ANVig9ꄸFHDH?u*:hZ"Z|&U7*8'km @G N٬ Ixy搵OGF'E1ͳ%XTEWu,E֍p5PuKPQQ1,RJD ԫ^_SCԠJuԐ#1ԅP4;ߪ%Qź/eF4)63~QVc2Ƙ,Cˀ]}rAD߉hSL۪0ȧ qHY/k R˪4hj6"q;&Ÿ|o4~2Up&ځTNu5pPC> 5Ffjm5xɸf8.xgNf-1Iޅ٣"f{ C5* "}NMB#\7i'(mJp/ޠ6\T©boVF:~o;vޠJ6~=4wTDi)`w"̊=}b-Zc Z6ni" #o(og:F θ-rDN_w$Uoȏ*ޘR̯4cnYg,x kGy1 ZΏendstream endobj 205 0 obj << /Filter /FlateDecode /Length 6365 >> stream x=ɒqw|u0ګ$@YMIe`3 EP7; *8_w֖{eehш/pxޟ@٣4$=z^i>c|}xqͯOa.6gC8ZXGq0cT.n1ކ=nI[ɯ]l]js&Ct*mӹQqCq* j5D ?+R3SxT& Bt ޼`a7vK2#%,f iC ZU/YCyIqp&?=|rosb8?;}zO+sz0Fn!,;D=+K2hǙvH k8lT5]3n QKQq<S;Q Xf#?)|Ml]# )N$8j'F!&stԐ. aXώOCRjO5BAXni7D:%>/"2riԤknB*o*?ȴyTg=EPIP%Beg)>mCE빣(sMdrtDq( r$5AXL;ܣKMTTY fH2M%i4`ݬ;O0HMѽd` C!37{t|Q6͆ZiC2.=iRuϏEWpf1MKba 7 WX@ؠr[^B @Voop ¨Lır:vp4ej)"cLJ&Ԏۯo NNΎ=}$벌=}@EI:B'xS8;dg窱٘A.>{_z2Z "\wVk Dk k<(澪~ٺB\(=Nsc V̍0!~\F-^Y3L׵vf(0{tN.!i1y-wQ.#" w[G6}IqSa)а²jrgZ9mIsVѳ]_xW27y0643;+,7wA` Qpu3S?&- iWʞ3y|0*k0{;=϶'_T-^mō[=xR-E/:/ ۝[9j3A.2 k*ѪEm(F mz]6Hm7 ?=WdB!{~U<~}ܼf3$.x[׽ iU8n3M:7Y5 ڽ! _ (:racW٘̽G`j0单]'iU*pNiG `]߆**VaQx?Q HJsЋ/MC lxRCKt=6VdϬSS v'5ƧvfmWaIM:Нܝ,bD%;`ҳsg͓Swb(7!xfS{d`WT̷]Q9~PࡠwW8FPMbU6-ȷ@D @ 2Mp` aq7O| Rɏ)&p ԁ|mb %پݠgW:kF4e~.dzb~%,l7 շOfGx~|y778?fy-TR-z@&E8NHOp(^J!vaA~.6٬6}@B<ŧ.f:ՌCwsHD#D^W& "ץUwxQ #LrA6ZϳT?`V rxUpL(QChQhJl73jvh4= gk`ځ5FTLtpg=iqϺ2)g;`{E=!u 1,>Aov3t[;)$ gy E{QM.EłgMߒ9zN 1r?8w}Hd+3A &Pv[yA{qُ1=]!$Sr>B{ 2Gâ&U,ȓB+6 zݶEܤ% ~u12} nF6x&f :UZ/@g~yqJ//M񘂽$_*!"E AEwh]`DIJ^ %^3n&L3}6 F=KC[ IK "1߉+6:Q ?$&,_G΄N<@'a]W}Coݾ_^llo(FxMbPXIu+u-Nw #K 5 ۩5pI f=w,`OoփpXǗ˫5*}`Oi3 8`K ;ɛE#`.a&}*w F`>n{@nma$߬yc6AD <ZƧo rz}RƐ=UWfF`rxfx֝Јl2$)O({=YOJbT h. ~i37b椱0eA"uj1R?vdVN%vvݴ.f!;mwl M(:)Ȼ/O,O6^S,|եΖr eYoP[BkN3/18kt*\,PTU MIwUK)(ř+aXP=&kF"(nfq'ev6@CCڰ,) {k_k=Ix1c Up 9RNr4E-rw_1eD6Gh/IgYih24̔trQZѶD>}Gwު $My߫!;)r SxR|Д3_R>lq~lc~XZ16⍕uVrX\CRhdogE;6(`4i~b#z ]0)Ӛ2jPnIHv@8EWEX"aT[B!]$:v.O@ýΎ)*떱2Xǁ fVTt8qLQG*! n(޷ٺ/V4?^Ob{Rl*3-N9?ztJh:3C锼35qQ=J̙ ?i-"<_X}qDXYJ\V^,ľ}cBL>-Vzt iHIr`wAZw$+aTӾƮߟѣ#6 ?o9%f |Bv=ӏ/o^|MftSl>ӫn]\h1~gԫިz=ʏ$"չn(8Sҥ}n{t̯4˸^gVz;ە!Lr^,Ew[ ybCE{|2H%xYfӿ#+9})e^  @C\$e䴵.7ngRfOVԟl']Y.7r^\ۺ,%d뺼(Ui*P7@Ħf ]I]^=#EuM1/Q./& Fk5d0.9/kNM\85keeP:؋2(uLR$KʎdjZ5:%qxZpN_Tij9-w)${QJp]r6v ?-;~b c_v,cU.Rɼ&m5.׸',Q~wrӋC2S#1!ktoT?MYo(:m'=`߳vM_UV׺.fYsdh|?+1# >ꕂͺwrz"s\>hϫh҃ZաaUtX}3Ԩasi*IӾބgqyNl jN3>tqѯ1FI7f*uي{ՄS1Y F^uz2yފcwv!]_&8mOWf{enopG_dzfDZ7.Y՚YW٧bJKFՋ"}Pƌ Yu*ܟ_>.Wh} w2(}LJ}Mݡֵ6m8 5BN=u ~op#+]n`^";{X<^N@G  IBҞiQIŒ'~ע,㹔=벪Cl1g"!Ly\j=RŐf?óBt^J-xtKT@zlպݟ IrwB,"O$Ƿt>^\:/Ok)^_#;jM^ (L%HQ&T4z#zI6ݳ\YcnQ^|.+v&Z#NF}uK/I&?%Xyw퐒<-}:+g- fcҊ Dz.JLw3m3bqG)v4Ty38J3;UZ6e@ LB6{ĺ^|H޹C\9֊=2b`֒:ήV+kwV@*5t_ԵՐR $ޒԡP`-&!ekHUR}$ֵsY B(Nw-$)`RcYpw%܎XhNn-} 7ݾpTK=cbOg+}5mOțSwx'x0\ -Y~:F~;TLT~HJu~V̥y<'-ǐ3!#Q?y{Ֆ(8Rٿy33G_Q?w-vQcIzn!<&+?>9eYIvbk /CLcb/M?endstream endobj 206 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1677 >> stream xT{L[ph\@ W2Ұ mFI_j-0`1~]lPBJi[Fdl]QTEӲ5uqt&m2uN::G};*PT?kk65y]A~Z^>|gGVZ ~ *)]DJ{pkw^C~ݳݯkQzİ-;D4['D# ,(&JrLCPYս ̫sEwd`|7q ~}=QJlp{EtP=ܰR1vluSYf2)3K$2-%Q۽TB][ )Ehi2F\)&bktZ#VC}×i#+c9uZk;\d3x=q KXu?DZ@TEըp0)M"m=qNJ0N3WRjHl P+ywSoY]Lޘpendstream endobj 207 0 obj << /Filter /FlateDecode /Length 6474 >> stream x=rGrw|uh8Z]{ƚ%y<Z$4G PEDRh #hq 'ţg 4*K:%y[ݟPSuaim辋igWeF!@r }Lb8xZK/ T qBK4t=օhdQFӡnZҺJ *'YƸ8ύ1 ɬW6bb )X`Gh{Ȫ  0 ފ0jAuq "O P` \?,-!vf9tϳ2pbĜ}HՕ 6«z1he* *Ɨv#hZb9`iDh!z .p<\\W|PEȭ8{{[%d$cYMc'Ľb*<@AX SP8*Lj3uނO)uXd,***0hE +ȗI֐h=$:ETy/!Rpp< Q@[2]#R#"9mZ<W[@Y_4ҋx&NuƕDp)oJe(U8޶gw ^!uwb^4}'/8FqL픤Kf]p64Il/(ZHJOl ʌPG84GYQ ^Pz_} VO/YS@ ~G3~J4.ŎgdAN~˞XF,@V 6Jp`l: $t/YdrRBS8m}BXV3Ɋ UVXYTF$eFڠZ`n?4h[ PIc w $(8gܝ7flvXcSȺMp<~cŢ,&/!|_w_Rx R6 X<r^﯄ w Ťzf#q>ٰq't~`q?8vGtxɫoǑRA[}`t [ʘNIh @Q8}]y.v~0=zp`OemVkK4Wߧ. `w~ZqT1}5AcFHv3Φ&O91a)1ZݢIJzJ DI n}ƶ%!#$FdLj&iGc=ɣ1JtGiǪ6+4\+8)>k;%Vpdc?)E޺s<33Ux4VQ@yJ4GqHRO&4¬ڭ?;~蛸| I1.1bbe{ K.Ke.x?\VR m=2k;<Jivyɀ}</Y'1;vNC81vHnvV[Hyv>U=yWDCN(@ꦭϥxz3}gަfdL ~r>s֍K` .dSkÖZ s_j֔Hfn9͘ig5h.4Sk p9Ҏ6,)ga ,n=HJNBŶI_xCy.=Qz=0L[w˖l!A_}GJ3|rԝt'[d7p/758ٓn8o5#ԹuwQGMVhBp ]*K7@_nړښgɹvB!#t;\W ߜ!ohU'H9pVs#mc_ fF&Owj9,<{>*\916G$#*#KBncFzӷ >_>/qO?B{nuJo~N)wN)R9&2wNꔎ.tQ,՛X7UT,uN g\ ;,-Ś3"qF)26e!c/NpҒ@I*Ei‹ )I"EJQ`]-NYC dn7ɱ_S`1c,$PM &y@ۜ ڑmII7(IJDJaPO L -Wcl#eqjMcRYAiN{r)& }WA!6v e)gmيF((u~P Ni ![;x0FZhk>"QyUbpxuyx0 0bŐJx/8` Zm$r9z+-te.E$變yqXcEg ZB4A]rGЩ$Tn ƛ+=?r:4ƄrA&|SMض&X#sa>c5. ՀHBӍJ/Q``QxeQ|^8vY+DtnJL"c kJ([VA.5yG7OT0\P̤,ʫ b#ick⥬,$ٽŕHs?8lX𻱣־@y3"A⊜yS<0fU$$0}b)˃]$mH׹m np9I#2cn)HBI#>/qk\?qk9/3S[5Ŧ^M.L jf4YƏJ'QkeI-mW ۀԸdf1ev o8R1ZRo!݈^vDj bQ#$W! #aPLIbuv<ĸol\͂x.0-lB4҄؊Gi ;ʥddc@\L~q|2K?YAڶ/ሪDbezV+VYNBnϔ;E+!߹h;?||Ѐ5Sh޾7WTj TŮ34n2K\X c'$Onb-S,_ƹK7rԴ[0/Xhm¬So IC<]k;n*kI wдeV$cik\y f%&y*1)oPƽ?SSOHZjiP{'P$zK*?h6!;5OP) j|T@_bA֓`h| R8Tj;tzכ\Q`(cI%1\ÔĠ$BXtr,(Q[ȷTkrGqx&)R3L:50AA|@0,?aR6" wB\7z.̍%ѭy^s;z\hϲSDZx~ a4B+"${!1T(<ܻ w$}|rrFXHpɭ'NV2R1,wA(WZv`2 ">PgٔRtLL-JR֦$g_o̼Dw f̱Lmͺ|z-Q?04.䎜4kw -ͣ],cil(o.'J3I-7szfsN_r4%Ih75[LCushr?n>S]]/uQ 0_DƤoLihp[ٰ,;}0,RmcD` XaYgِD]/.8_f U!6|ڻָ-w܋G!+WƢ#_ iF_8`4%%퇜G k<_7\.+{т1T|۔Aђd Ȇt~ۉm~(ҳuxvRБ/{?us%s(<ҝJ#N(z7MQsdA H%68?o=rJ h_dfŕLՓ`VxfBrތQt;3rVJzwWo9CW1#o:ve3̓iQaFS4#͘WuO`oj~S50?9+endstream endobj 208 0 obj << /Filter /FlateDecode /Length 7364 >> stream x=rǑwB`zt=ՁK+m0X " A@oڬGwgVeM*<=]]^߉>?:ս~ޟr/|w@=!:? bسryg}2ݰBήwizq}zTbu?\B18i7{F3;V/ > hE [M_ 7EKg&ۋs3zu:靵buBQم jiw}i;]=I-e/WsBk:F?gЬ~I_;  Rmע0J&$8 dɠ}V}"ʈ0Wtu7}ʶ}aޛ̘|= ";(H-Z0t;O z: -ؠ5#1(p)DS,J7 Ȁ`8f',^`uq>)o@~&! >`I7]]`ψt"əP"A*+u ?B|6xUSj-V|HYIC(sfDB)Z >@?crcWB(tQa$$I4BƱ՚٬6%2~2 < jj4i!= uiKϱà}?GǛ 0 Ebc$5Da\9ࠈ i/9\|ɘ7}2,|(vaIw?R$U $x0w={_qr(Q2LvaJW=]/R΃i oy7qz|Mjyzo^v3wA\'ňȇFć^{}pz9~y$t8m8d@ a7qV 8+nn̵ /@6(q8Fv2ï2;9& 7O>.{`6!º!=s}p5Va,G"7It< $dS8|/AIoqrp&M7nM4M84覃}k;ŀg*a9Ľ]odhn-" %!|8^UZf@r->uxao*gM#0t>xVkD|4HtXzȞOAdd, 8q R1WD2.&b j ,Rs2s"dC4cZoa*ӗF,؋~!/JJ:j L IY%F6,GG9Qq$̔';E %>HLtL0n X]gx1 ŝtݣlV>w␑YeDg{71>IK;X-J-AePJǧ&G'-$-Pu8'DLҷ|c3lT0"|ќ$XXp0sfnQq5eLڿ¯͈j&VQK':dx_49NmOqIER^ެi;wa]/0Wqe2*`MQ)%J5FM:~9-P'8&jix?Tw\WilyF6*6B|)`Mݬ&4Ֆ؃f1>2}T+(fWhƬZ!ÑI1Q(;p#7 CMb#J[C0[d*}.h#v&7'wI8os_xugDW8G~s _xiɑOfCޯZnʹY.5X%r*D@ 06pˠweƫ%-ބgU=LT͓YaǸY2r~H̠&e<A p s3yMb@9Tݦu,e$}lNֿ/ an47{lF7am2rxDHV[჊.hRHH* LbQlr)зQ@uqD:Q?/(bw[N×J ch|YrL*N0] 㴋9?99a:8 C8FQ1U} I::f[<ޚ]DUOy^JsTYKQuZ:`B%ig825 P|qZgWihеGG M_fZіΎ{R"LT]1r:PF+IPU(.C,Z]r^W"U(^&)KLh4DFcFJLy#Ti<՘LSU(omҝgId$Q hD}` MzjGK֕nt9,'PbLO1gr%ԃyȋ\UΙEYQtBvV豠 h CٹW@S$nKtrV@-|?xe!3M ebn v[ T DT&L>4[ WC.Tz'x<E.! yK+6,iq}EQyjYt=tFq/Cf9J}ux|ܝ?<鎞n^qY$#޻/Kd6PC!׃öEAOz ؤ%[&A~,΁XGq5-q=OH߰?}@i KM#S[32.$ItBd2ѐ|5ZeFC!a:Ƹ c@fdA9?dցDu"28tNEI>aS,&YAWI9$Y-N3Bw1Ļxrwws,r9" Y#[. 9|l"\3lvX: /ԋ9DOv,]l,nr$ʡMș!攛=i"7?7d>hvMPu̅䈉K1yܩ/W; `PDA(X3?]HdŠs1p͎$j,.!'&-0bCSubܔ@1ܔ 2#DjqNB78UǜfGt<\}JO˘_L/EeZS6Ah\N i=kNf O arf8γ#>?eyK7 M77Z?[6cS߆x,>(pTOT^|5Je^S #a9xOW|i1yn*\rk?h|>$oI=MV7pTMTkEn@*/Ix܂q8z_aq p:0wEh)CWXw.Iwu}y9m e0CC°0vfеl Ux:<șnz ?DuNmPRѩwq젅'uࡈ>tNNzY2y6.SJMT1qwZ'˷i)t Xz\z:y+==xGx:ޡ<.dI'7X~uZ&8Lqj`"` 훐\ص fCv. #@cn: F/C`9n?SDmq 4EonU. Elq5L/[H@옽z+^Һy}GF8~3]NJ0p[ &#=LG-5"N |Utv\P0 1u8,~[\1AfMxQ QAQmR0!@98kUs7o,7szF .iA<]#,#3mծot@~hձg{7; k>Z coN[$-c*s1y՝n_a%gmQ4ݹ*:s󃚏 T2 {*īlj*nG6K#ЍDq6 i{S8em_2Ɏ' !D"ۻ1;ploX01h$j"=}aU!odE7Mei27;wtqm[~%}(ֶ3fFAb3|)vN&endstream endobj 209 0 obj << /Filter /FlateDecode /Length 6088 >> stream x<ɒqw|u0aƴ*I|۸ /q0jS0r;r-!AjyQ 5'Y7`j,A\aaXGYp$C]bK5 6`#{ /?T#Eit`B[ U"i? ~D 23k LьW`7D^Z4 g58 Q6kœ΋ч 8lh4 ilE| {[Y %lH ~DD=&>ҞWrxŸòRH?C8F(S7AaCp!>XV~A"}3m\ )XbY ݉$ y^~T)JP3uZΓDA55ȐO؜בoQ-`A_4b"9W֖ tgA#i5ωqxpkֲJM;ƅ\Rvn"RrUhVr>9 gǾ8 quUz=x-NX)0:0)ړ|AyͫL0i#;Q>shG=A@g*lk)mawU4\b~[QlREl@Q#Ǫ0A6͌j ~0-{&Ommɪ Q㐗Wj< nSe@0by$Y`ʞK,wP*hdΟwa-95mQ@RYt ,8-Ȯ(ߒ.A D&ȱdFݧ+9MOFaevg_b1a\$s='kR `}Q* {W;ޓ0hTu1S Dzp9,\a| IaLſɰa )î)ݿ&DV^8Bqg="m Ӈj +X>D8EQzLkR.<0_./~\5B/5~{' %isnZ=O҃/'Y7575#g ~8o_>c(M`L-Ejr-F%)8Rc FH {³IW LS;ˡU<6@`ς11qj1pKg"6QsC=84o@50h+i~KU1fXrJW$PQ$G%2ƂT Y;Y`¥Ӧa{6_OO'7}{J: :yZ8Q1F9XzΓ Ϡy(?Sj#sJKrq> jvIe:Qv#Wpehtnq [#\,_$üou&Tݴ>|uK6ԔZ8F}z_AU;Fl8w*ߟ;ݟ;ݟ;}N#.r_v-4`0ͦPJ!^tΡ]54;~INO;OR|[7n;!`w^/=7.γMDewS!5?lYL?T$eMI A__Y__79{d_"H)qdqٻ!fZM-~SsQ]VkoMA+iWAkWʵN^\g;D!E(n`W_cnޘ>p{o2 E+%|/.zoDxu?xŻ&wJMlj/JJ׉P}+\'J>/ӊPxkSl݆VNC!L n*ÌZNǩ/",* Qsͪƾd/b~"Q<7 e<ԉCzn=܀Vm`ľHybX /&EeZ C lnkmPi{'Ha+-ޏ% ±ʵU=Zv:qW= coSRUST2^GRh? 咭2u+@e27;j̟&S08͍bشsnZ.=z? l {[ԏ_1:dՎ{ H[ 7<ܤG}ױs Ks,( ߅=[9!ֺ!olp4^8/j\SLR; MT Bi_c>7Z`.:A؃(uF$>m6e*nZ ?ZwMJ.gǸn˼&n:_[2^mc] +6uO`C=]vl!n ,i>6W .oLLB0uqZ ܋bkGn5AN+ #Gn#/n.lNv. q5!ۜ|∙^Eȴ$TN 9m.BeiBv9q 79\B"zպg@S;hKy$ˆYiCtJijdLHNiAn1 x`_$!¦QX+7+&d`,mu惷N1yy=MFuƠŶDa[H㜤3|~ixS0793Z[6M󆮅ǵs{u sU=iMqpnʡdCH7xzڗKFh|!R7RDgOXn*wMDoZBۈ/ ~j 8J2!Nva7iwxl p?B۫Uq>QdV GޖG_pBʋ|^4n D?EWvwEoKlMBmY(h|s%o@~5HQT"uVeL"e7o,͉v7 @FN4/h 8`nөTĿ.`7ԷQ߂CpH H`5-2TԒ<.N.z4V>GsEc׫aGqoR8E]0Gjd: K ]j-w{D4d+2V\G\~RvkɆ2!oS!nQk+ nkCLa,Ii&rLR9UMJJN /t_FkwZtrӤ0VVBҴI:6I>l%U3*4Nr5 u\)x-rC_4~!1*n#5>5B M0m`ma]9RH]=aPL^*2kK4PXmvߡQU ]xH_'TCҺ*Yfq#1;ޅC&McD>:WF(tvI)$K FJJ w4_ҲHJI5~zL #a ߹@^4Xl*w$K})G/KAXfHC0qS-Zm?w؜gǞ Vڷ\phٍeBVY*$JZ\zJ/NUvwɌ=;iݳʕ5pG/mϛFvq{Y„[ gN=|7o)M}N}CI:]M7%cF9ؑem3g9Ghlքq>y$?l4)۷\7al l][;ʷ=[cwM.M@6N\q^ow KVDq,)Ef(0c;nogОQk>e6_ͫ37LD~%LX`{g?,v~~[ܹ_=jm;lw_6D>1 'm&Z!J8ov:;.k{YP\MHQe=i|H.Ze}~؂?w+@>Ǿ>U9v26H7èQ\~W)HTm4DKegLҹx\aXoպ m0Mgو.2;^7ʩendstream endobj 210 0 obj << /Filter /FlateDecode /Length 6920 >> stream x=KqwrM少t6˜ %)%(+J|,%)otrU=}.y{Aߩ>?zqWӋ;?QAыCnă'wJOu|p)e_ܹwƃ~Zv ~q iF8J]{SJ+g9ʗ%~79n̄RR{y s/_ӹB;}P]3y\B3\PF)nwL_vQe\ }(},w^%khni_}<$6M,ޛ#App}gbo/i債VG`vgq FNJ-viQO9]Wtx}gA[ 81` A6Vud=r~6KSx[vX{U0h7CsH?1lge=& >aw:W{1T v:Mc_1z=V_|h]iQ6+o[5}7W)1 RL0ګPvߟz%ʺq]h\bE<#ݲD;`5S=3-֏M3Z̗jFd5ڼiE@5ŜvR*tV'3Ҹ g\ `;רd$/l}^^|~0/ 7,Ńa"3# &g׀ v+ΜT?3uaSJ\ @d*J $PI;wU7(?HHTs@S)`Ӆ9>:yćoX@|h9ɸb'@/W؄Hn8h)PLY1N1B֓baEeC)zM| &guUBH*ԠCYLݺ3QZH FFi-8HtEi4dRwNF^[lc^'P8䣟<6:qS?eUWBP5=j/*HLLNv1u2Y먁xR>}LP#Ff0PáMdZe+`BՑK&.tGgt ^qySzo]b`td2fA!,f\̻j!a2E8Ej UI!S ȯlRv9JEAjC;)MK@@Gj#&cCoŏjĂp]n~Sd]>>~ض%[ޢH{:jmGLǻM/8DOO!54awX(L M ^9l|8 խs~0"֌n(G Gy67qZSIheؐ T=pؽ~ ]0AD?~^`$?M=K^\jײh(XtqC֢ FX-: 馕1`,k?}H|Yfz8qi.[I| : |7OaEuݸ d InQ&FB׈D')zcaQp`ͭ1m CV20%0v<^#HN(7rg2ii,f5s$>sjl -'GKNt&e"8:l&s.5yz' <*X+nѫW`2e!%x 0:m-֔k6}E]^K٠s ^h2jG qP\"8D`t{uH<` |p׃lQ\d~t:*׽5X>X}5M=W)!¥VCңB'Z:0HwMzSWGh߾Gxq|b *';t怌`8$vO6bCY }&`^ҷ]2B󝻁p*oW.TDh#0QM eTo 4KD0ɔhK rx%o jcGJs1hTiMJ0V+bJ@F4<i3o0p4<$] Gw0$;w^0C nhAt tGz;&I5#!镤_lΒt'=Iz=_/$~x)P-bj~"O2swؚ6,r%%$˱$'~7 lXZ/ !{tJSb )5 1ҽyq_/]';C1eY~-Y ȗ8ڡpSΒNXD.X3֍QD^{|+ufqI&4_,R^0Lb1fy& ޑۑ(?4e\4K%33ʹavc8 jҷHPb[:슂z_*0g)B KE -.7L#b8A``2^G5CΜE7X Sp[KiFtI<9~s֨@ -G})sc|Ic8dh` u&PL] \:1iHƝ9~<. -sYW עX/EZ3Ɖvq%pTq=og&M3tV7QDF`"5'˧ d@r1WY!~}܌#@Mt 6 6Rވ* c܇l،#FH*5󎜗cbԴ\oTͪTB)q3NY{TeTA2+ld$d v*I'Z0AB:RpBNaח%v X2^%+/ YH@_$M[Je2>0`xO2j= R 7#_#<ړD ~J-amI^m|R&]y_\TVTeJ*MӼb$y=s)p1k܌c$lB!\[,"AŠi23/bzmƫb&Eٚ}LjNʆQ{+쳧a(r @vW^7]=R;dm_j_F;_ 'yنu@Wzi*iqlReqj"_W@۞ OW-`|_^äQi$.,Usre 'F6\J+bGHp[?! 7;サW<ޥB[E$hEydT:mosP>DB*?.V%: }L‘ҟR eM@c崢|ZQ?knk}b3%W'1jEl%,CA^#VIP8pZrE6wll3qyVvC=2Vi2fGRVIXyXE- V)bєʠ:hPл>H-q/ǹ٘|0^FaS`Z I#6>HImy* -:A|I L8(5sYf Sq$NS'rXiK祷fPAD$jc 3ɔQ3^% "Х]T+&g g&=ײnpj۪*7(/ t@x¹\ĔGДPk8:BE/6d-uJ`!cn0Q/plat0v}`FLE&^6qsHx$.RaKrwV!Ā򴘇",H smFB `kF#܌tpCk׸׿|8ARajqw!*,zRrCq07)­莤U2ͦN0z:WsWnA:3f+ >\7҈c<WD)G\dKn»|kq $#v%Ek;Z!GT> stream x]Isq&zj_Fa !#Ȏr  , S|RtwfwV!/x ^Wu-YU՗_{}w.{'sN髝_C-vBagٽ:){\NDaq8?B V \B9ݳtB{ӫayY*i).9%qq?p}\t|'P|\[G凗Z:ZZPݯht}@{wθSrg; }kJCawҷpu<%c\9 "Y!AS~T{4CjrYGinGyStgEȼtaM )9"3:mV{Y< VYKHKVc0U?p5Kz1ze_: Q}lh8~8gZגh}K~|=%K4)uH/R}\nd h5BJO1m)c#3R '}aӟT?,RSUFh8Vvѱ\|$dЏ|ts?o6@cJReij"LXp9g6춞ֳֳkyvzv[ G|gephWsOttn>.#.sQE\g\U✺a{"HQJ76BwMMP",By}#NL޸3vϤZw`QʉN) !UF{N ޑ{:I:%Z#WA*'F9CwJm{$u0]2Yw S$6q^>]tMz/>ymJTWHR3T!*ʍAuZc.c<5иTҭOOaI,SZ֞Q_˲ / DHV 0 @}?'&*)8OR{q$|1̠‹ZN#&cwL$ݥN~[OIypI DiIew2 q/3FKtK0 cMԱHC,ǷRсJGmTU]Kv B0h ]$; *V'#<yv fCعc|Udo ؀a>@:)f`U E7%!w'7&X,A LѬ~S3NƿpIC[A  s]5A>/Ѵ hM_u".LUkAI@QY8<F,Hl}рPYڇ LbuP[{04iaUR4&{i\TJwhZ V/NçJN39U+(ODq%SՀ) F.,F*$}/F˜(+}se>OY<Ђ2:\KkI6.u>?C,rV;ۺs˸e7sSw%p(hv@V9ȕ]L,>ɞ7>!HzZHs4^dF#yjdMTtɫ20BMŁܸ lv&8Xa@EyiEYզu&LEᛳ'4U|Ts>ɲ?YZנR}S0v`pJpbC-1M' 餔S >MW:jBڬ>#26 pᢟ֝AaD:?11A N1k3 18'fԜecV{=VK8(? E@aZW操B/iW0i) FZ&~8YY0JQ6L<d'h9rҾJAC2>6[A PŐ mHm*h˨SGNn|GEp$е4͓WZi 0vjphH]y% 9o"bԥoXmۑh>6ܯ>~} v`7p׽㖫UcFrf/y02}웼wAwkIEsL݂~0Vm }*ƻ3ݪh~*BpehGx:fZ(|#[@n،Ɩ5n5o ѸMxO\'ﮧV~XN6tj. "'wN[6]O }`۝]ț+mxoxS4wO .;AHY1?$Ƴ._42$b΄KcRDaQQa82Vz Ae7MU{NX:3aov=H"ݹ؀фW1|P@h"iJ8)5$sƐ; h4GJtM7Ei0<2*/:7"ҐMPueSi'iPwLyh^MJs:#i[ܚCu9IYE؍ >$u\S>Sk0/c=yRoH ڈp?廠X3r^xin i6I 3oXY!!PQ]0z/R+\/3Mx(ҏzFI%ոn ' ѪVQӬ'e+*Mi>d L)Mw]7T7y`fEv܉i%HdrJ=/0SYdqꗖ& ~"k%VW]xVj]phNԍ,=I%O,G,5X(#5mt*J~LTe8o$%/y'Rs+Hn)eRVmb3ܩYWd4+&ߛ,2[15D #꿒JH;ӵ J2CVXLZډ^ {ͼGD]|tPS'Fb^ ^uv3mPȢuD]#k!dbObDhO;1w{X"*%JcہdX|qɅHG%snWhߛiDcs4o+uPItO z"7ߛT!zPS?:N;-yxkC×'Y4i`Ņ-~a&hh4 vѬσ]qf;-'>:dHe ;[5ki]ϸhRlelNXnoۦx)tOI7y dŒȰ̋B?~^c$wFS^1d@*%zXF%~:L\EOY4QK7RI%!́4E=0MX gn~g)T(qfw H=7ѺHkn}to<6 ;?Rjzy#kb;IcΈkp{}]CM`m|`EEX_ .}s2>$hݷ}C\(򹷖[M42'qΑ2&P/vKHZ˽!VrF}+&sTH8O z]n#-ɛƒgJ]{2V- jWq4~]W(nH:տyڠː]8jr5|htP$^B,~f~,7jaD S7䖑`ɼʋHpmc􆘹 'G2zIο@buOAF<+Ѭ9ۼIR(k eI _6!zXrԜ~#p00 X&7swځCYeS<6Cz#ؐMYd"ɵx CrӠXN~ZE^(21W(M~b9\4G7m`*&BF Xs?l䯛l:"paG@7YkX7&&a(6u>Fcs=Բ4nXm\dM`Sƈ q_5oG2)J۹,Gk lͨ*0bI}{&W#c"A^2ӫoAJ73K`N @[r,}|6I,+MxAtS9mT6=d'F † mơӻBӕ7:j> stream x\Ko{ a[dDF(A"1I\DR&)ɖ鞙ݥtLW_w3șHÓOӋ1{l g} b';H%f`zw!͗} 1XM.V/p]Xe }F8=f_g/RrK.FCd\K-ea!ǎCLW$>O#bUàa`rw㌲w|3w ;d2yZG7F}OS[iQ8*l(wbq뒉Rt }Wm|*R*]e>K0/M r4G-\$9C;~02.c_>*wJy1LNVuo52AV" ,= tbAJ0YfW$v= ]\H^XȻ%Wc t9<!#%op ĸk""'\X#9v`A;Gq$xK4bB09X̄B9X̄BƤ̥Quٵ T)Lh(%qhL:8.  b  Pj0`mNT _bq*#Z:wrDkLyw+)%pN'J&r%]m;tja((O&kD'v?~Йi b2c\vhJ DF:sU:]kLbV'U0g9x3Rc#LfdIM:]f0K+Wd/S!\rHbc紂Sq&Yrk:SwrQ ټMxD2h]BOI&%¦DLBG7PϥU]]D2KSHIZGJzrk~PMqS.[RA];ڿd]]"e50 :A[앱u5|*} &Q|]}y %F="dž)Q꿠>v׌Ɩ DcTchmp),܊TPW/cԏi U+);f)BRx26 Xt]]1èLjF jcx:4v@McpAa4n9WAIGU.(Mptj--茒+PSUKw-+t#AwNt$4iͿDިIXJ5ءyXrg]| Ųt$葎tղQJ&?-dryҼX"Nu֍Lƚ"0lىJ`* nQjM05 uGI`hetFrIE<*TG5$kAR.I~I߅ X IT8=lGkO~%zΪ U YZ$S*6#@ȥ O)8 ./ŽLIu&݊3~9%HԘQ3uss&^i$4:DFTuMc*i/3NPQa4 PH_WWr"ǧbC0^>p0/󞢡)CcN˫]iwi0rK&e5.Ue^ tO9eh9ahNϺ:qg(}:>*;yXl--7Suqe\ pR1VRJPm"ߝZQ%zz֪^7LM?%sդ{!Ab}p1z./W(}T^ g$ ۖKe\N ZP r#5/~ZRaj3SpV\7cf+]tTB Ήhr*UZt%I' 3hLJj~gW ?NV4->z[c=xuM;8xT1?Ug".XyL䴌`smQUV}MylT.΋jKhπs}* k:BʓO@W D)-X)0[e YiV1Y "HW0t0kx+9aJ^S(D ˶Vs(4@H,`\ I F{5yrű9oìb'c˜|&j|cn@U?jN~3b=1bbmE'I?`y me}7hnp.hZ }=`i棬WZZ51 &Lld/ i\հW: obkm)+էY77FzdY]"S"R\yF(͜g@WPe([YAj^@ڡ^n[ l_h!hƒŊx-d~| '2t|NM}`&"8r`: ZWf?]GJ}\>.d{Sq=·(B5L @"F le=&4ι\G +P?ww RG endstream endobj 213 0 obj << /Filter /FlateDecode /Length 3118 >> stream x]Kse蘳x?My+q*^ [~E+T~o~FaLRMS:hh_h4@ſw>7ejjot嫣Ϭ-3\͹-ώVo V+/ϖ?Ƭfvɐ}yskk^Y-dWW9Θ|!ՇF[nXVKSg. W"U(F8V(͜wZmZrڔ` s _ roԌnմT[/tsГ}-a6)+™Z)g BvۻO&|qҧs"g0@@&Ǐ4Bs-j)C='׫!Zsݔ™bj5,^L A ѸpkҰhӰvT?&܋ BAւ\?CY\(k-xqCśКy.O0 %BP}X=OS5㴂:Y4 c|&9=VkHʛǁ}¸:˃y@H~-vLvڄ~R5Be&Ebm\McY˓s,J jV1/j@,U4dxpvM8ԝ6,VK)jlu::~*AΓ>Go\$(7'he@]K(E( 6|Z4`q)6Pr@]ӅbohZNU0xdRAB8]:\&h<Jg ]ϙ0Aз>T!DjyzgH7dF{Xwy&uBvk4==R;_,Tv$~k7)g0)K(|W,"O~yNA mgk :Ly5Xp"UȞgT2mKHB̘E\qv Sy],?KNʂ& r7w! P YNr*Ib0+UQ LB 1( TM[PU\1[r(._䰒0FR%޸(dGZj+Qpת,i(PO K">K#4 3.##R9+"{S#̕ DW֘"ыR SBW,R7=:Zyju=~h\3j h⛣nھ5v} _(*e Vjy5 6}@jD:Hrq@@GmE ".cE/ZɊ#t S({Y 7N Y䫟<$^f"LsY yVyڣ!BQؖBF"ShwAr[MȢ ʣɄ(o2PD$ф6~z)Vⶲ,MXe~xI&tS626N!<+!XN)3#o2oL\r ($c1Ajxk; Xx'ڕhzeǹz=PpwLA,J$a1]0]ZMи5gP09:¼VU ~{)3,`\IG!Ǎn]9ܺ+#<;N e&P.3tQSZY4j#53>FI/ x Ƃs֍ycIXYOE) b#XT=hPiC"!*m!& *??/`A@ }Ĉx9cӡD=YT>2XzlzP?Η" " knQŧ9vm]Nu嗽:JM"x#&ߊ"(vŐRtyÔ'aOņ9"NLwDsZp L|BFE2a2$pRľXW֮ Jqp3MsE-#N0Yէ;f`)_2ewb:Ҕ#١C/'@b#"p3fnoe)ǔ%QqU[*ũcQ]})t}贴Pxӟ Z O(;c2Ʉ߄5'-_"Sݮr K}vp!:#C;*DAD6nQ#xsvZq@G(ʄ˜FFBĆǫf_N (D kz_5pO[LPn\<(NLMY X QA,Fm.$9{W{ f_6.AR*o_jQܗq=A`I@!OzXxU& -> stream x]Y~7@+a܇J~plGN*IJ4I㘙.I+*[3F7h|nJ؀?Ë/m':8yAb] t`ZNFC8C݋?#JJH]_.Ē?&Dp-#3 ̿BVxjңRVW(e.W3m#1GøΛ#,ơ^F` (עrizQSsZAshĮz (qTSsh4g,崑̗KAK U9^q*~^ j *p ǭ#f5#a r~LWu\z864 +[t'>k KΥnąQQ5`mU`:FG'8JZu$ BN//-x8V%U0su$ JXOÑ>MwxžB%4Q\ v[]\ͱmK2Йg;?cb]p[K&} J~7|, Ydrn|oXfJ# 4f:}^28/ת u!&;UI 8*K|+C&lfcrP0X_&ݹ:W`1&ˆuܫ)$|7/0).%]+1%oa\mzzɾ% 873@/{sV $gzW3Y1qIr%-92:q.ݒ.Mty~tqbiV aWMIu]D${K &&. R){fSxua /1Rb9e3" \* ~ 0d2meָhXYaXSIuhXYaXSIa&TVN8[j8O{@mbz-;{ u45R7͝& ]Ln@gh0CP3<a/g]U-*JG1Y M5x:ڃIiDVY 5ĩbd"?4q$\ωħ0ɓ:u@g!g;ogَ"HgQ Xxկ#Dfr揃XFT?NU>RxT2ᚙdWWhBM$)n _y"0h\gt|r2 jGH#jVԱ_d1D]%5c<}kLgr< bJ)e/GqUTi]+\ D'DK0\^[ZIʸ}Tqusp }XdHt'jwHߘhF.kɞz]6vE*sN$V0U5Ǹ(ffg\-k:ҧИ[x{"ZHrk+=Y+f@6HipOIF4[HU૜)\uWuSVښ(0X%mKŨ8~i_h2 \5<=ׅQ$ZOG^\_Mko}/85?iKo.Oݜ'G>6_M?K@_MNn.)j2yWgn_Wsy5ktz|s駟*i?;TkPay*{꘶.Ԫ?mz /~ki\dnK$D- 3o=8GYc/ufs{!f](%B |)r[,6t{yy2XkQr6NpǶ8k 9eM+%KbR=ifu[2')D4Η2V:v"Y6=Yaʪ؟_lYL;0| yD]!j1(ԔWB;mO 툖 "':߅3i'A8FX:{B]¼XW_pcC6 Q8ŵUꎧÐY"1NYɉ6P,>E(A@h'>;Ma_ ̘)( \LyKW:`6$5h#C1`H\,⊕Ũ+M#1|sJb攦66&ti+gZ7Qy?bb1P\o n0RO;k6a@;M|g m@mXi! HuX_1{cFϕlu$/F槿j3e$Ga_ŧJd2ws9G7)rJDDS}gbKoyu^Y@< -Eǯ{n۲J#5]8#+ 4Pq(A g$A!a~#q9mueJ,`i⃎yBDPZ搮bc0>և0" .8=~|ѹy5{#O!}>ÆEZe]u#m ΰ pK\ewpԊxr.4~_ׯ2ޡq'nsq^֩ۡ>h37upIl9xל4ś(Z_>kFϙmCa{sWiTZTW]pSJov+q?Z$B=RA6$&a|ڊ+D)^(X^ݑtFcG*mQ"rn1BdҩB4h̓*zRSujϩFcg V0% U apvD١l1z죘6>jχJAMaׇDraK7ӟ8ծ[.Hq#IR|l:uί2tm,l^ĺL`iیz] pz"V׷{R D29(q'J,`D: <@^ڊǍx[zpU @k=ۄENbTWCs*{uHf>9H[!N2{n06oAK |Υןip W{q{t,F.sߛXZoo,f[nq{+-N{ 8Kz!= a[ RԄ |Sg鳛'ԗ`djv 6*nI$j |J[+aޛ[=4ct߯[Y觅(‚ò]V%gQ5˄"D=)ׇ{*=W,/K|\7l5l^| 6,·ݢYJNsK=޿A~s a/:#=ڹ)s?oU|S7sYۭfІ;`9쁦i7p%2P f2zf ^zo}Wfw_Nendstream endobj 215 0 obj << /Filter /FlateDecode /Length 6306 >> stream x]˒$uz>E/lx{ZPӒ;S^ c9Ґ3!_*++P=,8yLśg?yyDścP7yc,])n,8ͳv_q<82C/L;/[ZK?⡒?Br@¥;)sɳ-km ;^Ő__5sKK7'Ki`Z{]l3:ѷrfo@ۃa{շ8zлnpbi}{gVp qN*1+ L '׻='~?$%(6,1Ea ]5~'~'pyjHY"k.ssK7;TDd`hc p2hޙñʚ&v6ɚK%f U.faw)S>V`cP^3'DPՁwU k 7@/rLt*<ʺQ'ݎ`3ΉN8[.'%1D2vDljm}$U]@tgr+~K;uҺnGU P?udk eU P R Vf[kGk >.qiץb5TL:ł0cҙݫO m sH4v2$iЂa(˥ p+ڠ'V:> 2CەҾi6őjukN[0eoY(Ga5'EC{plMo+ L8@u*܁f%U'hw?ӐuCGHb[쨛*|I))O|2;9&8GbQ㗘|8yEՇL\`Ɯl iTHCe{y CȰ{ TA`jQpq?@24>ml(3VOHǻ얩N9Gf MvVqzYT7/=)a4mOap Y?/`WfiSƥt:JyZ<%Ƅ)Yd#Rx+C2)ħz)ߒ2-Jȿ+T*}C,0ZmR:n>.qejdG `k nY&K n ~GV:z|%JBzu3)3{zIMUy&_BMTXqV.LU%m)3rPD!(z3\bNPr_U%Y'= Q5Gi6g'K2 e?$p׻@L1DϞsC`$W )SxTp] YmTI!أ::-b%X@%[ɫJ$FUDbzOxHyKy='#>FrXB% l;'AoGB~!hXZ@[~~1%L#Y4SI؆Oרů6|>9c _'TGwR*hl>@J3%=1DujVHM,DHZ!)AͰو03QHG T*ZF0&)7d E ܳz-iM KJp-d0P+mb! \'` f9=ޫeS8 Aɳ>EFW2>u /ܙ7Kzg&cooL1'Vb ^MFYw$hw1 w: ك]ؐGN$H*]*Iʈ,GD&]r>2?\#ŅY$ ^Q- dEITS XWA>"F2v~e:3> f~/hųf$'H3;j}90m2 RB(2Q6Hba8 ,#] mU3/0u#EdzhGxReCЏu-"*.{g41:{%a)T R6!0:0bz~l~QHDq]$$7Ư%9.kqؠUu%%mױOWa IS]-PQ3f[ _%שWl*YT ENZ@ jN¹-*=W%9Sf*UkI6{jD6=HR*vHQݔ(D)%MR}%Q0[R$!jj6va29AR ~\Rw1PzMFVzEKɕ,j \i sVѤ>\\tmS4D"A;.#U:=Sl*5oo`֛j>\4\!wF5{F joI?])D[3c]MoPWJ!0sTb~*)‹4Cm5[^33<\RouY$t֑R/I\=>=9xԾHUV"KoFݿG4]?3d>8ЙK4M WU,T ˳!?!T14m\BVjm{ X~#;%J0$SobPVKxh@.sĘoM 墻1C뢆rUy5I 81s.\TbO4 ߐ|he h]`^vG2 +ݴDJsޡՈzt!z7DERl&r$m;Z2 \7B4:cjŔ$=$)f蓠vJ g31FxjT&<.u]'.ݗLː[C#ئT3H":x g,/" 7Ni5վeK*S1ptx- {M Se_V3r DϤ%= j@+l 2NtMMO4<\GS*T6ZLPaYЮA ҞW28f@ chWp@I*'ax]d9XIXj6,dSpg uݼo؎0cc,Tt>ob*56Mvq㇊SBkU#+(݋6)A3[$7G)XRK A j<\**Swɮ0k%^1b=U ֋i_f59SHݕL DuJ^F}dBQ1 ,YWb'JAcA-!Be?ofzsǰfuªv! թ`{CDM_|w+X$H&ĶMv)Rb֞C5=QSW2, G/F6Mg *)q+B>EFG \}R9,^ⓒr 6Чi ʣB.% 1]nS`ia.Ώά }OeCBSZ!uֺRjDKCB+oi:\kT4*Rz!,XwgKKC~JpmFXά/~{TOߞk=qևoOmCKjTXPZ7zl|I7w.|7٥p@rP:n9f[ pyuą֕c=gU̮JX c8˱7rkK/pbC<2- b%]kF@q,4؈1껹:] nbTJN%cHl7nWX;n0|$v\vjdq8Dbh^ЌJyb6Uw Eںg \j*Q%$Mm5OzSe_{6N=aOJyk驏ψ0vG5g[{Μ$/cC(ԮaŬS5}pR H^,6=ַ' ]+3e1ԶF63mc!7s,#UI@"deAw'*ɯjZIB,,<>=>fZrs(rN+&|ʵ|QhLuU ̉mz|^>E@9-OwoC { bjeJ 9qOrP mBЄ kw0~/x;r"rJ\۪9/D))eNY' d(qA_]7U^vC9I~DO6r®6.7<j(\3-Ŧz|y" N\s}]+Dr˔ QzBuŝD&Q`2:JK/:]xPYP~>ϫAhUP3V[pސ7&pۦ¶ G {c$ $ئ͖3Gk&=,hVWGГx(~o&vv2EqZQLt%4/sßTTKJ Tõʔ:'5/\{ Y)iQ\&əF? rN` ,4ֈpHuCcTfa'ЍqۻY(ne|ka c.;C8jݣ,dŪ2^d"=v"9rX 6vr{l6' =EɒjMH@wb#8UNE&5 IW;nEƵ! s+̸IC<u"d8-4@1ڊ~hJLsJzUN?b"ҒT&f-r*b@!} SPku-$˒>XSHg8'v{ql VRId7~vϟ> ݆i\e\p!`,55:ɸ'4~{JY\yr.:,;!G]+HAڧy\ȱώY X՝~=&BH߸ƹXPV;;v`/ T~hnvtqڝwcS{o`sD|=qe, t ]bq筺=K1к*[+%{Ot ,-=EN^9LޭP!+>WD:L@uFaNc(w_\^pAxCSPTDq/o_Β5\O1ƙ"HT5}cB`u PFl{ٽCPk3t]Q4|>0kQ,KҀL_qBT S³)A(OAf 9bx9w֊%_?-(8Eendstream endobj 216 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 311 >> stream xcd`ab`dd vs040q~H3a3e5Bߙ3``bdu-(-I-ROI-SpIQp(IKIMAd```g`Pd_+? F?|K,tXwߪ]'ʅ'nص",'G^R\tT {Coll3ϑwM_8e f^1oVJ2lٸlՋ ʿ'*|"%/7I*yy~Il'Xٽcsp9?|]>wD\{帘p20{z#endstream endobj 217 0 obj << /Filter /FlateDecode /Length 2787 >> stream x\KܶﯘLU8U]{*Y^Il˿ r8l UK8 ϯ3qۧϾt~z><}:}>989y3!gZ{gͅ3Vx[rnY`{cN~|pﲯ  C^-f4_.1?df<_)ˤWg@I10>9Y'n c-yבwѷI/Qޒq43AA"Ap8\ܟ>?s-~#.;/9Om4| j>Sa0a!5N#0mi: y>X1}Qμb&z&wL`+Y ߖ:^·y^KZX)&HTKh0uKsuKD55m+{? x[4"s~Z D8 & (ofQ&3Ÿ[)BŠM/iZ9}n%C  ع$.۞tl <&#`vH"c(xrŪGOYjܴ%'w:JK?%2F~':nz. "pVNk c Q=J r':u4ܵfj['jn&>9BNhEF!R܂ +X"z,6;HdN#dz-Z%ʜzXNXmT˹#y(Qd(m@P`L gFOh>Z8,H5zE6ce2Et'weG$р${r \-:(hՐ&cø @)(>9j(`Vz ]QnIuLg+?"9P"9GbÈs& ])Pfכ !menj&IB9-2f/-pQa;<=cNwr+Ҏ\eʬv %9mYYm\\ϦQS}1 68*c"-}b,#5Bԏ S@Fwn%0b+|ȩSb4ŬMk HÙ\Xt`:Z͆QM!Z%HB_ _A@?o 9Czц<{li׈fS}l441Kt՜lԇmJtT!͗F7އ;][J҄<>4@1M%趎՗6US[퀣p 3 &,f|Q+h-.gtBT$wӻW޼+^ K2ZO100 ;n `)&mW -.x3EHw@0(Kp5~w阕]5jɃ߱DoQM#x.f=*({y /tThӭD6]!Vta|CYai#y1.Cܚ ?wupZd>ҍxo"fo h]} 㪝2 #9VX0%#yzn>V!O0ա^(ʛSF0 t=mBUH{K2*=.Rdb\#6d-گ^%IrKK) ѓ?] Vfc>yU{kek)0|jDkWGFʀc҆Gy3S>op7'Jv>^eP-kccYmq$8iټO+k ~fCWԻ i}MS4(cKE wrX2UX.nu\,vń; ~iO1[X!l>cT=~-#{z#Nn5r?O,-}qsRY%\9svpMnVYJ8֔:[:rᮀ/,b/n,qe1]'YE]@y=?x)S}l?sFkP gxnd3U{PWf3Q*d'nc>Gݞ-Ϻ^A1Rӓw{b{*-r(].&BFUZ?\C'At5E@ ぬ,~?Jj"]٤Mʯ`\ `':RHtrʋ֙[1Y"+ajeF_$&BPā+M,/vئfi _󧪬J?pNOXϬ=:{KXIKZ=`6)Z+!bwS0\ endstream endobj 218 0 obj << /Filter /FlateDecode /Length 1762 >> stream xZr6 SQ;S$A3֎o'qNR7Iӧ/ծ $Wu@ >ZߛFoo77fxn?\mP)hco7f6ꨌq͋J+BJнiN&&46V=!z)Sm|wIؽs,zOhQjٽ~^rhɋO_aB ,'S{Np"G+U"B {JRgw6dI_v6\2ZI)F0$aW1BaA΍RԂR N< 5Sr{[K!- ]|ŨZާ|8w2XT7{*sN ўĭs u,1CX[̞m!yF`B !߅MGkD΍iȩt&TZKڻ+*ZOeVPo#`h48Ξޥٻ~"tL/'ߙD[whLnPb VE #P^X"Ԙ>ęH/GTxHzŢ #.uL9WmA\ai@e@P;W+\` qQ (͐($R4e$J bl0eŧ 9r ᙡ̵rr>DWai>JY/%s%~H*ar&\1c30F ȚEZhY{)0ʣ(ퟥ(4Eǰ>_$m(s~Q$d4DVk5[td= -1!0Nx$;-*gc5^jn5 YК YcDCJ`)*aBt"k@WdI0Nk5g sTU"©tv>/m zK"kNp8jqbBA7IyϼTx6O<͛ONԺUTED qUZ[{rIpEAH4 y^u yNB N)F}&q",֟9?q1K)3]>T` .wc:?vlB5DBh7*v/u + `P@ kJ=P.ڛ8EeUF zn^oE $kB!v( (Yå=5?Ztǧi#>ewC$}\7?Cdendstream endobj 219 0 obj << /Type /XRef /Length 251 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 220 /ID [<3866604f34610bf783845db37854ce1d>] >> stream xcb&F~0 $8J+?& u=(_Eg;,1)DH_ DׂIQ g?@j:dIF-q DJTHK RFDJoblv0 Ӥ*=At)D O~,DwIDr}"=nSĖr! ~"y+! CI_' endstream endobj startxref 252960 %%EOF aplpack/inst/doc/sliderfns.Snw0000644000176200001440000044725413516603655016123 0ustar liggesusers\newcounter{Rchunkno}\newcounter{IsInCodeChunk}\setcounter{IsInCodeChunk}{1}\newcommand{\codechunkcommands}{\normalsize}\newcommand{\textchunkcommands}{\normalsize}\newcommand{\Routputcommands}{\normalsize}\newcommand{\makemarginno}{\par\vspace{-0.5\parskip}\codechunkcommands\stepcounter{Rchunkno}\setcounter{IsInCodeChunk}{1}\noindent\hspace*{-3em}\makebox[0mm]{\arabic{Rchunkno}}\hspace*{3em}}% New Report: Fri Sep 26 17:30:28 2014 % New Report: Fri Sep 26 16:59:20 2014 % New Report: Thu Sep 25 16:58:08 2014 % New Report: Mon Nov 4 13:41:06 2013 % New Report: Mon Nov 4 13:28:20 2013 % 131104: # require(tcltk) # now in the depends section of the package % slider() is copied from R/work/relax/install.dir/relax/R/slider.R % New Report: Fri Jun 12 11:48:32 2009 % New Report: Wed Mar 25 10:10:57 2009 %%%??? slider redo button release / at once,, vertcal sliders,, other button arrangements?? % New Report: Mon Jun 9 18:03:49 2008 % New Report: Tue Jun 3 09:20:42 2008 % New Report: Mon May 26 11:10:38 2008 % --- begin of preamble \documentclass{article} %\VignetteIndexEntry{Working with Slider Functions} % --- packages \usepackage{a4,graphicx,mathpazo,courier,alltt,amssymb} \usepackage{graphicx} % --- fonts % \usepackage[scaled=.95]{helvet} \usepackage[T1]{fontenc} % --- commands to control the layout of text and code chunks \parskip1ex \topmargin0cm \textheight22cm \parindent0mm \renewcommand{\textchunkcommands}{\normalsize} \renewcommand{\codechunkcommands}{\small} % --- titlepage \title{Some Slider Functions} \author{Hans Peter Wolf\\ {\small pw090615-1650, /home/wiwi/pwolf/R/aplpack/sliderfns, File:} \jobname.rev } % --- end of preamble \begin{document}\maketitle % --- begin of document \tableofcontents \newcommand{\showwidget}[1]{\par \includegraphics[width=4cm]{#1}} \newpage \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Slider functions for exploratory data analysis} In this paper we discuss a set of slider functions for constructing dynamical statistical plots. Some of the characteristics of these plots are controlled by sliders and you can modify the plots by the sliders. The sliders will be generated within Tcl/Tk widgets. Moving a slider results in changing the associated parameter and the graphics output is updated. For example, {\tt slider.density()} plots a density trace and opens a Tcl/Tk widget with one slider that is linked to the {\tt width} parameter of {\tt density()}. After shifting the slider and releasing the mouse button the density trace is plotted again taking into account the new window width. The next section contains a list of functions presented in this paper. Then you get some examples so you can see the function in action. Some special tricks are used to customize the behaviour of the slider functions. These programming pearls are discussed in section three. In the remaining sections you find the definitions of the slider function. We hope that the functions are useful for you in the way they are defined. However, you are invited to take a closer look at the code. Sometimes it will be very easy to enhance the proposals and you quickly get new slider functions. \newpage \section{Slider functions -- overview and examples} \subsection{The functions of the paper} \newcommand{\kannweg}[1]{\relax} \kannweg{ The following list shows the slider functions of this paper. \begin{itemize} % 1 dim \item histogram %ok \item density %ok %% box-cox %% \item show 1.dim: hist, boxplot, ecdf, density ... layout %% \item stem ... n.classes \item --- density presenter % zra \item tszoom %ok \item smooth Tukey \item change of structure in different regions % k dim xy \item xyplot mit brushing ok %%% xyplot brushing: 2 Var waehlen sowie die Intervalle aller Var per slider %regression \item smooth by Lowess %%% \item --- xyplot mit lm - local estimations \item bootstrap regression ok %%% \item --- outlier %%% \item R^2 estimation \end{itemize} } The following list shows the functions available in this package: \makemarginno $\langle${\it linux command to find the slider functions}\ $1\rangle\equiv$ \label{CodeChunkLabelAAAB} \rule{0mm}{0mm}\newline\verb? fns<-readLines("sliderfns.rev") ?% \rule{0mm}{0mm}\newline\verb? fns<-fns[grep("^slider.*function",fns)] ?% \rule{0mm}{0mm}\newline\verb? sort(unique(sub("<-.*$","",fns))) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \par\Routputcommands\begin{verbatim} Wed Mar 25 10:12:18 2009 [1] "slider" "slider.bootstrap.lm.plot" [3] "slider.brush.pairs" "slider.brush.plot.xy" [5] "slider.density" "slider.hist" [7] "slider.lowess.plot" "slider.present.density" [9] "slider.show.density" "slider.show.norm" [11] "slider.show.normal.density" "slider.smooth.plot.ts" [13] "slider.split.plot.ts" "slider.trimmed.mean" [15] "slider.trimmed.mean.plus" "slider.trimmed.mean.simple" [17] "slider.xyz" "slider.zoom.plot.ts" \end{verbatim}\textchunkcommands \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \newpage \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi The next subsections contain a sequence of screen shots showing the some of the slider functions in action. \subsection{{\tt slider.hist}} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi {\tt slider.hist} computes histograms. The number of classes is controlled by a slider. As a special feature {\tt slider.hist} has a {\tt panel} argument. This argument allows you to deliver a panel function which draws some additional plotting elements. In the following example {\tt panel} is used to add a normal density curve as well as a \emph{rug}. \makemarginno $\langle${\it show {\tt slider.hist}}\ $2\rangle\equiv$ \label{CodeChunkLabelAAAC} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.hist}} 31$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.hist(rivers,xlab="x",col="green",probability=TRUE, ?% \rule{0mm}{0mm}\newline\verb? panel=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy); rug(x); print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi After moving the slider to position 17 the control widget looks like this: \begin{center} \includegraphics[width=4cm]{sliderhistwidget} \end{center} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi After releasing the mouse button the graphics device shows the following plot: \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=6cm]{p2008-Aug27-144152}\end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi You see that the fit of the normal distribution is not very good. Perhaps an exponential distribution is a quite better model. Can you build a new call of {\tt slider.hist} with a suitable exponential density curve? Hint: You have to exchange the line of code that computes the normal density values:\\ remove {\tt yy<-dnorm(xx,mean(x),sd(x))} \\ write {\tt yy<-dexp(xx,1/mean(x))}. \newpage \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.density}} {\tt slider.density} computes density traces. The parameter {\tt width} and the type of the kernel function are controlled by sliders. Like {\tt slider.hist} the function {\tt slider.density} has a panel argument to add further graphical elements. In the example {\tt slider.density} a normal density curve and a rug are added by the {\tt panel} function. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \makemarginno $\langle${\it show {\tt slider.density}}\ $3\rangle\equiv$ \label{CodeChunkLabelAAAD} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.density}} 34$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.density(log(rivers),xlab="rivers",col="red", ?% \rule{0mm}{0mm}\newline\verb? panel=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy); rug(x); print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi If you want to select a width of 3 percent of the range of the data and a rectangular kernel the slider control widget must have the following apearance. With these settings the graph will be very shaky. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center} \includegraphics[height=7cm]{p2008-Aug27-145612} \showwidget{sliderdensitywidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi The parameter settings {\tt "width=20"}, {\tt "kernel=epanechnikov"} result in a much smoother plot. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p2008-Aug27-150508} \showwidget{sliderdensitywidget2} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.brush.pairs}} {\tt pairs()} constructs a draftsman's display -- a set of two dimensional scatterplots. This function is really useful for data sets with 3 to 10 variables because dependencies between a pair of variables can be seen at once. However, sometimes it is very interesting to explore two dimensional dependencies of a subset of the data points that are defined by a third variable. This idea leads to the function {\tt slider.brush.pairs} which computes a pairs plot and allows you to define an interval for the values of one variable. After changing the settings all data points of the visible interval are recolored using the color "red". \makemarginno $\langle${\it show {\tt slider.brush.pairs}}\ $4\rangle\equiv$ \label{CodeChunkLabelAAAE} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.pairs}} 38$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.brush.pairs(iris[,-4]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p171340-Jun-9} ~~~~~\showwidget{sliderpairswidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.brush.plot.xy}} The function {\tt slider.brush.plot.xy} is a small version of {\tt slider.brush.pairs()}. It is suitable for three dimensional data sets. {\tt slider.brush.plot.xy()} computes a two dimensional scatterplot and chooses the color of the points conditional to a third variable. Therefore, you can start the exploration with {\tt slider.brush.pairs()} and if you want to concentrate on one of the scatterplots --- e.~g.~for the purpose of presentation --- you can call {\tt slider.brush.plot.xy()}. \makemarginno $\langle${\it show of {\tt slider.brush.plot.xy}}\ $5\rangle\equiv$ \label{CodeChunkLabelAAAF} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.plot.xy}} 40$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy(iris[,1:3]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p172434-Jun-9} \showwidget{sliderbrushplotwidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.split.plot.ts}} Time series often have different structures in the distinct intervals. Then it may be interesting to inspect various subsets of the data. For comparing different intervals (in time) you can split the whole time series into pieces and fit linear regression models to the various regions. The function {\tt slider.split.plot.ts} has been designed for doing this job. By sliders you are able to define a point on the time axis as well as the length of a time interval (strip). Then a time series plot of your data is computed and it is partitioned into stripes in a way that one limit between two strip is identical with the selected point. Furthermore, regression lines of fitted linear models are drawn within each of the intervals. Alternatively {\tt slider.split.plot.ts} allows you to draw the main characteristics of the subsets of points. A mouse click on the button {\tt fivenum\ summary} of the control widget will add graphical five number summaries of the data values of each region. \makemarginno $\langle${\it show {\tt slider.split.plot.ts}}\ $6\rangle\equiv$ \label{CodeChunkLabelAAAG} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.split.plot.ts}} 43$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.split.plot.ts(as.vector(sunspots)[1:100]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p173657-Jun-9} \showwidget{slidersplitwidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.zoom.plot.ts}} Some time series are often very long. For inspection such a series you want to be able to view the data of selected intervals. {\tt slider.zoom.plot.ts} enables you to choose two windows of the whole range of the data and the function computes two time series plots of the two sections. With this function it is easy to compare the structures of two different regions of a time series. \makemarginno $\langle${\it show {\tt slider.zoom.plot.ts}}\ $7\rangle\equiv$ \label{CodeChunkLabelAAAH} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.zoom.plot.ts}} 46$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(as.vector(sunspots),2) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p175158-Jun-9} \showwidget{sliderzoomwidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.smooth.plot.ts}} The function {\tt slider.smooth.plot.ts} allows you to smooth a time series by running medians or some other operations which has been proposed by Tukey. The implementation is based on {\tt smooth()} and the operation is applied by clicking one of the buttons of the control widget. \makemarginno $\langle${\it show {\tt slider.smooth.plot.ts}}\ $8\rangle\equiv$ \label{CodeChunkLabelAAAI} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.smooth.plot.ts}} 50$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts(rnorm(100)) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p180443-Jun-9} \bigskip \bigskip \showwidget{slidersmoothwidget}\end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.lowess.plot}} {\tt lowess()} is an R function for analyzing the trend of points in a scatterplot. The smoothness of the computed line depends on a span parameter. Because of the algorithm is time consuming {\tt lowess} has a parameter to fix the number of iterations to be done. The function {\tt slider.lowess.plot()} computes a scatterplot of a data set and lets you select these two parameters by an control widget. \makemarginno $\langle${\it show {\tt slider.lowess.plot}}\ $9\rangle\equiv$ \label{CodeChunkLabelAAAJ} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.lowess.plot}} 53$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.lowess.plot(cars) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p180705-Jun-9} \showwidget{sliderlowesswidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt slider.bootstrap.lm.plot}} Sometimes you have fitted a model curve on the base of a data set and you wonder how sensitive the result is against changes of the data. The function {\tt slider.bootstrap.lm.plot()} draws a scatterplot containing the curve of a fitted model as well as some curves that have been computed on samples of the original data points. The user is allowed to select the degree of the polynom to be fitted, the number of bootstrap samples and the random seed. \makemarginno $\langle${\it show {\tt slider.bootstrap.lm.plot}}\ $10\rangle\equiv$ \label{CodeChunkLabelAABA} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.bootstrap.lm.plot}} 56$\rangle$% \rule{0mm}{0mm}\newline\verb? daten<-iris[,2:3] ?% \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot(daten) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=7cm]{p181236-Jun-9} \showwidget{sliderbootwidget} \end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \newpage \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{General issues of the implementation} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{The structure of slider functions} The last section discusses some slider functions and the reader has got examples of their application. Now we will explore the structure of the slider functions. All of them call the function {\tt slider} to create and to control Tcl/TK widgets. The widgets consist of sliders and buttons that are linked to R functions describing the actions to be performed. To demonstrate the usage of {\tt slider} within the slider functions we discuss some examples now. As a very simple one let us build a slider function that prints the trimmed mean of a data set depending on the trim fraction which is controlled by a slider. \subsubsection{A very simple example} In this paragraph we define the function {\tt slider.trimmed.mean.simple}. It shows the usage of the function {\tt slider()} for doing the jobs \begin{itemize} \item create a control widget with one slider \item define the effect or the action to be done in case of a slider movement \item link the slider with the action. \end{itemize} Before going into details activate the following code chunk, please. It will define the function {\tt "slider.trimmed.mean.simple"} and it will call the new function with the data set {\tt "rivers[1:50]"}: \makemarginno $\langle${\it define {\tt slider.trimmed.mean}}\ $11\rangle\equiv$ \label{CodeChunkLabelAABB} \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean.simple<-function(x) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? # general initialisations ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)) return("Error: no data found!") ?% \rule{0mm}{0mm}\newline\verb? # function to update result ?% \rule{0mm}{0mm}\newline\verb? compute.trimmed.mean<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # get slider ?% \rule{0mm}{0mm}\newline\verb? alpha <- slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? # print result ?% \rule{0mm}{0mm}\newline\verb? cat(paste("trim fraction",alpha,":",mean(x,trim=alpha),"\n")) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # definition of slider widget ?% \rule{0mm}{0mm}\newline\verb? slider(compute.trimmed.mean,"trim fraction",0,0.5,0.01,0) ?% \rule{0mm}{0mm}\newline\verb? # initial computation ?% \rule{0mm}{0mm}\newline\verb? compute.trimmed.mean() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean.simple(rivers[1:50]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Move the slider named {\tt "trim\ fraction"} and observe what happens! Now let's take a look at the definition of {\tt slider.trimmed.mean.simple}. The function consists of four instructions: \begin{itemize} \item The first statement is an input check -- business as usual. \item The second one defines the effect of a movement of the slider in form of an \emph{action function} although the slider hasn't been defined yet. \item Then the function {\tt slider} is called to build the control widget and the action function is passed by the first parameter. \item At last the action function is called and a trimmed mean will be printed. \end{itemize} You see {\tt slider.trimmed.mean.simple()} mainly consists of the definition of the action function {\tt compute.trimmed.mean()} and a call of {\tt slider()}. {\tt compute.trimmed.mean()} fulfills two tasks: fetching the actual value of the slider variable (trim fraction {\tt alpha}) and printing the trimmed mean. {\tt slider(no=1)} reads the value of slider number {\tt "no=1"} and then the value is assigned to the local variable {\tt alpha}. The computation of the trimmed mean by {\tt mean()} and its printing follows. \subsubsection{The main arguments of {\tt slider}} A slider of a slider control widget is declared by six parameters. The meaning of them is found in following list. \begin{enumerate} \item {\tt sl.functions}: an effect function which is called after moving the slider \item {\tt sl.names}: a text for labeling the slider \item {\tt sl.mins}: the minimum of the range of the slider \item {\tt sl.maxs}: the maximum of the range of the slider \item {\tt sl.deltas}: the increment of the scale of the slider \item {\tt sl.defaults}: the default value of the slider \end{enumerate} These parameters are arguments of the function {\tt slider}. The following example has the same structure as {\tt slider.trimmed.mean.simple()}. However, the action function computes a plot and in the call of {\tt slider()} the names of the formal parameters are used. \makemarginno $\langle${\it define {\tt slider.trimmed.mean}}\ $11\rangle+\equiv$ \label{CodeChunkLabelAABC} \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean<-function(x) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? # general initialisations ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)) return("Error: no data found!") ?% \rule{0mm}{0mm}\newline\verb? # function to update plot ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # get slider ?% \rule{0mm}{0mm}\newline\verb? alpha <- slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? # compute mean ?% \rule{0mm}{0mm}\newline\verb? tm <- mean(x,trim=alpha); m <- mean(x) ?% \rule{0mm}{0mm}\newline\verb? # construct plot ?% \rule{0mm}{0mm}\newline\verb? plot(as.data.frame(x)) ?% \rule{0mm}{0mm}\newline\verb? abline(v=tm,col="red") ?% \rule{0mm}{0mm}\newline\verb? text(tm,1.1,adj=1,"trimmed mean",col="red") ?% \rule{0mm}{0mm}\newline\verb? abline(v=m,col="black") ?% \rule{0mm}{0mm}\newline\verb? text( m,0.9,adj=0,"mean") ?% \rule{0mm}{0mm}\newline\verb? title(paste("trimmed mean:", format(tm,signif=4), ?% \rule{0mm}{0mm}\newline\verb? "\ntrim fraction:",round(alpha*100),"%")) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # definition of slider widget ?% \rule{0mm}{0mm}\newline\verb? slider(sl.functions=refresh, ?% \rule{0mm}{0mm}\newline\verb? sl.names= "trim fraction", ?% \rule{0mm}{0mm}\newline\verb? sl.mins= 0, ?% \rule{0mm}{0mm}\newline\verb? sl.maxs= 0.5, ?% \rule{0mm}{0mm}\newline\verb? sl.deltas= 0.01, ?% \rule{0mm}{0mm}\newline\verb? sl.defaults= 0 ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? # initial plot ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean(rivers[1:50]) ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=6cm]{p152540-Sep-2}\end{center} %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi It may be astonishing that the argument names are in plural form. This indicates that more than one slider can be defined in the same way. The following section will show you an example with two sliders. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Buttons and slider variables} The next version of the running example --- {\tt slider.trimmed.mean.plus()} --- demonstrates how two sliders are implemented. To keeps things simple a second slider is defined. It allows the user to change the color of the plot. In addition three \emph{buttons} are generated to switch between three graphical representations of the data: dotplot, histogram or boxplot. The code is a little bit longer. However, we are shure that it isn't very difficult to understand it. \makemarginno $\langle${\it define {\tt slider.trimmed.mean}}\ $11\rangle+\equiv$ \label{CodeChunkLabelAABD} \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean.plus<-function(x) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? # general initialisations ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)) return("Error: no data found!") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="ptype",obj.value="hist") ?% \rule{0mm}{0mm}\newline\verb? # function to update plot ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # get settings ?% \rule{0mm}{0mm}\newline\verb? alpha <- slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? mycol <- slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? ptype <- slider(obj.name="ptype") ?% \rule{0mm}{0mm}\newline\verb? # computation ?% \rule{0mm}{0mm}\newline\verb? tm <- mean(x,trim=alpha); m <- mean(x) ?% \rule{0mm}{0mm}\newline\verb? # construct high level plot ?% \rule{0mm}{0mm}\newline\verb? if(ptype=="dotplot") plot(as.data.frame(x),col=mycol) ?% \rule{0mm}{0mm}\newline\verb? if(ptype=="hist") hist(x,col=mycol) ?% \rule{0mm}{0mm}\newline\verb? if(ptype=="boxplot") boxplot(x,col=mycol,horizontal=TRUE) ?% \rule{0mm}{0mm}\newline\verb? # perform some lower level jobs ?% \rule{0mm}{0mm}\newline\verb? abline(v=tm,col="red") ?% \rule{0mm}{0mm}\newline\verb? text(tm,1.1,adj=1,"trimmed mean",col="red") ?% \rule{0mm}{0mm}\newline\verb? abline(v=m,col="black") ?% \rule{0mm}{0mm}\newline\verb? text( m,0.9,adj=0,"mean") ?% \rule{0mm}{0mm}\newline\verb? title(paste("trimmed mean:", format(tm,signif=4), ?% \rule{0mm}{0mm}\newline\verb? "\ntrim fraction:",round(alpha*100),"%")) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # three functions to react on buttons ?% \rule{0mm}{0mm}\newline\verb? b1<-function(...){slider(obj.name="ptype",obj.value="dotplot");refresh()} ?% \rule{0mm}{0mm}\newline\verb? b2<-function(...){slider(obj.name="ptype",obj.value="hist"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? b3<-function(...){slider(obj.name="ptype",obj.value="boxplot");refresh()} ?% \rule{0mm}{0mm}\newline\verb? # definition of slider widget ?% \rule{0mm}{0mm}\newline\verb? slider(sl.functions= refresh, ?% \rule{0mm}{0mm}\newline\verb? sl.names= c("trim fraction","color"), ?% \rule{0mm}{0mm}\newline\verb? sl.mins= c(0,1), ?% \rule{0mm}{0mm}\newline\verb? sl.maxs= c(0.5,13), ?% \rule{0mm}{0mm}\newline\verb? sl.deltas= c(0.01,1), ?% \rule{0mm}{0mm}\newline\verb? sl.defaults= c(0,1), ?% \rule{0mm}{0mm}\newline\verb? but.functions=c(b1,b2,b3), ?% \rule{0mm}{0mm}\newline\verb? but.names= c("dotplot","histogram","boxplot") ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? # initial plot ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.trimmed.mean.plus(rivers[1:50]) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \begin{center}\includegraphics[height=6cm]{p152654-Sep-2} \showwidget{slidertrimhistwidget} \end{center} % check %

\ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi In this example vectors of length two are assigned to the arguments {\tt sl.names}, {\tt sl.mins}, {\tt sl.maxs}, {\tt sl.deltas}, and {\tt sl.defaults}. The first elements of the vectors describe the settings of the first slider whereas the second ones fix the parameters of the other slider. The buttons are implemented by a vector of threee names ({\tt but.names}) and by a vector of three effect functions ({\tt but.functions}). To handle the state of the selected plot type a slider variable ({\tt ptype}) is created. During updating the plot the actual value of {\tt ptype} is found by the statement {\tt slider(obj.name="ptype")}. After changing {\tt ptype} it is stored by statements like {\tt slider(obj.name="ptype",\ obj.value="dotplot")}. In this example the effect functions of the buttons only consist of a statement to store the plot type and to update the plot by calling the effect function {\tt refresh()}. In summary there is a simple structure for implementing sliders and buttons. Slider variables can be used to communicate states, values and other information. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{General Rules} In the last section the reader learned the syntax of the function {\tt slider} and he will be able to write slider function of his own. To achieve a similar structure of the slider functions introduced in this paper we propose some general rules now. \subsubsection{Names of the slider functions} The names of the slider functions of this paper always start with the character string {\tt "slider"} and end with a string indicating the job to be done, e.g. a statistical procedure or function like {\tt hist}, {\tt pairs} or {\tt smooth}. \subsubsection{Formal arguments for data sets} One dimensional data sets are passed to a {\tt slider*} function by the argument {\tt x}. If the data set is of two dimensions there are two types of calls: Either argument {\tt x} is a matrix or a data frame with two columns or the argruments {\tt x} and {\tt y} are used for the first and the second variable. If {\tt x} is a vector and {\tt y} not available then {\tt x} is used as the second dimension and {\tt seq(x)} as the first one. Three dimensional data sets are managed in an analogous way: A $(n\times3)$-matrix has to be assigned to {\tt x} or the arguments {\tt x}, {\tt y} and {\tt z} must be used. These rules enable us to write some general statements for checking and for preparation of some local variables containing the data. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Checking the one dimensional case is simple. Besides {\tt x.name} stores how the {\tt x} argument has been assigned by the user. \makemarginno $\langle${\it check if {\tt x} is a vector}\ $14\rangle\equiv$ {\quad$\subset$ 31, 34, 38, 66 } \label{CodeChunkLabelAABE} \rule{0mm}{0mm}\newline\verb? x.name<-deparse(substitute(x)) ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)||length(x)<2) return("Error: x must be a vector") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi To check a two dimensional data input the two cases described above has to be handled. After checking the data are assigned to two local variables {\tt x} and {\tt y}. \makemarginno $\langle${\it check if {\tt x} is a matrix or {\tt x} and {\tt y} are vectors}\ $15\rangle\equiv$ {\quad$\subset$ 53, 56 } \label{CodeChunkLabelAABF} \rule{0mm}{0mm}\newline\verb? x.name<-deparse(substitute(x)) ?% \rule{0mm}{0mm}\newline\verb? y.name<-deparse(substitute(y)) ?% \rule{0mm}{0mm}\newline\verb? if(length(x)<2) return("Error: x is of length 0 or 1") ?% \rule{0mm}{0mm}\newline\verb? if(!is.null(y)){ ?% \rule{0mm}{0mm}\newline\verb? if(length(y)<2) return("Error: y must be a vector") ?% \rule{0mm}{0mm}\newline\verb? if(length(x)!=length(y)) ?% \rule{0mm}{0mm}\newline\verb? return("Error: x and y must have the same length") ?% \rule{0mm}{0mm}\newline\verb? x<-cbind(x,y) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(!is.matrix(x) && !is.data.frame(x)){ ?% \rule{0mm}{0mm}\newline\verb? x<-cbind(seq(x),x) ?% \rule{0mm}{0mm}\newline\verb? y.name<-x.name; x.name<-"index" ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(is.null(y.name)){x.name<-colnames(x)[1]; y.name<-colnames(x)[2]} ?% \rule{0mm}{0mm}\newline\verb? y<-x[,2]; x<-x[,1] ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi In the case of three dimensions the arguments {\tt y} and {\tt z} are dealt like {\tt y} in the two dimensional case. \makemarginno $\langle${\it check if {\tt x,\ y,z} are vectors or {\tt x} is matrix with >2 columns}\ $16\rangle\equiv$ {\quad$\subset$ 40 } \label{CodeChunkLabelAABG} \rule{0mm}{0mm}\newline\verb? x.name<-deparse(substitute(x)) ?% \rule{0mm}{0mm}\newline\verb? y.name<-deparse(substitute(y)) ?% \rule{0mm}{0mm}\newline\verb? z.name<-deparse(substitute(z)) ?% \rule{0mm}{0mm}\newline\verb? if(length(x)<2) return("Error: x is of length 0 or 1") ?% \rule{0mm}{0mm}\newline\verb? if(!is.null(y)){ ?% \rule{0mm}{0mm}\newline\verb? if(length(y)<2) return("Error: y must be a vector") ?% \rule{0mm}{0mm}\newline\verb? if(length(x)!=length(y)) ?% \rule{0mm}{0mm}\newline\verb? return("Error: x and y must have the same length") ?% \rule{0mm}{0mm}\newline\verb? x<-cbind(x,y) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(!is.null(z)){ ?% \rule{0mm}{0mm}\newline\verb? if(length(z)<2) return("Error: z must be a vector") ?% \rule{0mm}{0mm}\newline\verb? if(length(x)!=length(z)) ?% \rule{0mm}{0mm}\newline\verb? return("Error: x and z must have the same length") ?% \rule{0mm}{0mm}\newline\verb? x<-cbind(x,z) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(!is.matrix(x)&& !is.data.frame(x) && ncol(x)<3) ?% \rule{0mm}{0mm}\newline\verb? return("Error: not enough variables") ?% \rule{0mm}{0mm}\newline\verb? if("NULL"==y.name){x.name<-colnames(x)[1]; y.name<-colnames(x)[2]} ?% \rule{0mm}{0mm}\newline\verb? if("NULL"==z.name){x.name<-colnames(x)[1]; z.name<-colnames(x)[3]} ?% \rule{0mm}{0mm}\newline\verb? z<-x[,3]; y<-x[,2]; x<-x[,1] ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Time series are different from a one dimensional data set because data points are connected with times. Therefore, we need a code chunk for checking time series. \makemarginno $\langle${\it check if {\tt x} is a time series}\ $17\rangle\equiv$ {\quad$\subset$ 43, 46, 50 } \label{CodeChunkLabelAABH} \rule{0mm}{0mm}\newline\verb? x.name<-deparse(substitute(x)) ?% \rule{0mm}{0mm}\newline\verb? if(missing(x)||length(x)<2) return("Error: x must be a vector") ?% \rule{0mm}{0mm}\newline\verb? y<-x; if(is.ts(x)) { x<-time(x) } else { x<-seq(x) } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Passing additional arguments} Remark: This section should be skipped during the first reading of the text! You know that high level plotting function have the formal parameter {\tt "..."}. This argument allows the user to pass additional settings to the graphics device. At once the question arises: Can we manage to pass such arguments to plotting functions that are called by a slider function? For example: a histogram is computed in the {\tt refresh} function and the user wants to produce \emph{green} bars. There are different answers to tackle this problem. At first you can consider which of the graphics parameters are relevant to be set by the user. Then we can introduce these parameter in the header of a slider function. But the list of parameters will be very long because the user may be want to modify attributes of scale, point size, type, color, etc. A second way is to define a {\tt "..."} argument for passing additional parameters. \par\Routputcommands\begin{verbatim} slider.xyz<-function(x,...) \end{verbatim}\textchunkcommands \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi But there will be some difficulties to be managed if you use the {\tt "..."} construction. How do we handle the {\tt "..."} argument, how do we set default values for some parameter and how can we remove parameters that must not be changed at all? In the initialization part of the {\tt slider.*} functions it is possible to modify the list of the additional arguments. To demonstrate this step we show how you can remove a {\tt breaks} argument and then append a {\tt "main"} argument. If {\tt main} is not available it is set to {\tt x.name} . (Cleary there is no graphics parameter with name {\tt breaks} but users used to set breaks in their calls of {\tt hist} may try to deliver a {\tt breaks} argument.) \makemarginno $\langle${\it modification of the {\tt "..."} argument, not for evaluation}\ $18\rangle\equiv$ \label{CodeChunkLabelAABI} \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? args<-args[names(args)!="breaks"] # remove "breaks" ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args))) # set default "main" ?% \rule{0mm}{0mm}\newline\verb? args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Now the argument list {\tt args} has to be passed to the function {\tt hist} within the action or refresh function. Writing {\tt hist(x,args)} doesn't work because the second argument of {\tt hist} is the {\tt break} argument and not a slot for further arguments. The second idea will be to use the {\tt "..."} of {\tt hist}: {\tt hist(x,...=args)}. But the {\tt "..."} argument of {\tt hist} is passed to the functions {\tt title} and {\tt axis} and so we don't get green bars at all. Our answer to this problem is to describe the call by its elements: the function {\tt hist} should be called with the argument list consisting of the additional arguments stored in {\tt args} and other arguments specifying the data set and the breaks, for example. Then the function {\tt do.call} is called with theses elements. Keep in mind that {\tt do.call} needs the arguments as an {\tt alist}. To summarize the following construction will work and is used in the function {\tt slider.hist}: \makemarginno $\langle${\it some details of a slider function, not for evaluation}\ $19\rangle\equiv$ \label{CodeChunkLabelAABJ} \rule{0mm}{0mm}\newline\verb? slider.xyz<-function(x,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it initialisation statements} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? args<-args[names(args)!="breaks"] # remove "breaks" ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args))) # set default "main" ?% \rule{0mm}{0mm}\newline\verb? args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it more initialisation statements} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it some computations for the refresh task} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? do.call("hist",c(alist(x=x,breaks=breaks),args)) ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it further refreshing statements} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it tail of function slider.xyz} NA$\rangle$% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Before we close this section we will present a further proposal to deal with the arguments. In the game there are four sets of information: \begin{itemize} \item the set of default settings coded in the slider function \item the set of additional parameters defined by the user \item the set of forbidden arguments that must not be used \item the set of important settings that must not be changed by the user \end{itemize} We can save these sets on suitable list objects: \makemarginno $\langle${\it *}\ $20\rangle\equiv$ \label{CodeChunkLabelAACA} \rule{0mm}{0mm}\newline\verb? # defaults (these are allowed to be changed by users) ?% \rule{0mm}{0mm}\newline\verb? defaults<-list(main=x.name) ?% \rule{0mm}{0mm}\newline\verb? # graphics parameter of the user ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? # forbidden (these must not be passed to a slider function) ?% \rule{0mm}{0mm}\newline\verb? set.of.forbidden.args<-list(probability=TRUE) ?% \rule{0mm}{0mm}\newline\verb? # important (these are passed and must not to be changed by users) ?% \rule{0mm}{0mm}\newline\verb? important<-alist(bty="n",sub="graphics computed by slider") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Now the sets have to be combined. At first we remove the forbidden elements from the argument list of the user. Then we concatenate the important ones, the user arguments and the default settings. Finally, we remove elements whose names occur on the list earlier. \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAACB} \rule{0mm}{0mm}\newline\verb? # remove not allowed ?% \rule{0mm}{0mm}\newline\verb? args<-args[!names(args) %in% set.of.forbidden.args] ?% \rule{0mm}{0mm}\newline\verb? # set of all parameters ?% \rule{0mm}{0mm}\newline\verb? defaults<-c(important,args,defaults) ?% \rule{0mm}{0mm}\newline\verb? # removing of double ones ?% \rule{0mm}{0mm}\newline\verb? args<-defaults[unique(names(defaults))] ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi The refresh function has a very simple structure now. \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAACC} \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? xrange<-range(x); num<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? breaks<-seq(xrange[1],xrange[2],length=num+1) ?% \rule{0mm}{0mm}\newline\verb? do.call("hist",c(alist(x=x,breaks=breaks),args )) ?% \rule{0mm}{0mm}\newline\verb? panel(x) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi In the following we have not implemented these ideas completely. Sometimes we pass {\tt ...} arguments without further checks. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Density Presenter} In this paragraph we discuss some tools for plotting densities of distributions. The parameters of the distribution are controlled by sliders. These functions allow the user to study how the shapes of the densities depend on the parameter settings. It is a very easy exercise to find an implementation for a special distribution, e.g., the normal distribution. \makemarginno $\langle${\it define {\tt slider.show.normal.density}}\ $23\rangle\equiv$ {\quad$\subset$ 24, 30 } \label{CodeChunkLabelAACD} \rule{0mm}{0mm}\newline\verb? slider.show.normal.density<-function(name,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? x<-seq(-10,10,length=200) ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? par1<-slider(no=1); par2<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? f.x<-dnorm(x,par1,par2) ?% \rule{0mm}{0mm}\newline\verb? main=paste("normal distribution\n", ?% \rule{0mm}{0mm}\newline\verb? "E(X) =",format(par1,digits=3), ?% \rule{0mm}{0mm}\newline\verb? ", sd(X) =",format(par2,digits=3)) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,f.x,type="l",main=main) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=x,y=f.x,type="l",main=main),args)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("expectation","standard deviation"), ?% \rule{0mm}{0mm}\newline\verb? c(-20,.001),c(20,20),c(.1,.1),c(0.1,1) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use slider to select parameters!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Here comes a check. \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAACE} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.show.normal.density}} 23$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.show.normal.density(col="red",bty="n") ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi A more interesting idea is to write a function that operates as a general presenter. The function {\tt slider.show.density()} shows the shapes of the densities of various distributions. After the user has collected some experiences she or he will like to write a improved version. Before you start programming your own presenter analyze the following function: \makemarginno $\langle${\it define {\tt slider.show.density}}\ $25\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACF} \rule{0mm}{0mm}\newline\verb? slider.show.density<-function( ?% \rule{0mm}{0mm}\newline\verb? distribution="norm", ?% \rule{0mm}{0mm}\newline\verb? mins=c(-100,-100,-50,.001), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(100,100,50,100), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(1,1,.1,.1), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(-5,5,0,1),type="l",...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? lim1<-slider(no=1); lim2<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? par1<-slider(no=3); par2<-slider(no=4) ?% \rule{0mm}{0mm}\newline\verb? x<-seq(min(lim1,lim2),max(lim1,lim2),length=200) ?% \rule{0mm}{0mm}\newline\verb? ddist<-paste("d",distribution,sep="") ?% \rule{0mm}{0mm}\newline\verb? f.x<-do.call(ddist,alist(x=x,par1,par2)) ?% \rule{0mm}{0mm}\newline\verb? main=paste("distribution:",distribution,"\n", ?% \rule{0mm}{0mm}\newline\verb? "parameter 1: ",format(par1,digits=3), ?% \rule{0mm}{0mm}\newline\verb? ", parameter 2: =",format(par2,digits=3)) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,f.x,type=type,main=main) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=x,y=f.x,type=type,main=main),args)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("x limit (min)","x limit (max)", ?% \rule{0mm}{0mm}\newline\verb? "parameter 1","parameter 2")[1:length(mins)], ?% \rule{0mm}{0mm}\newline\verb? mins,maxs,deltas,defaults) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use sliders to select parameters!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Here are a few examples to show that the idea works: \begin{itemize} \item gamma distribution \makemarginno $\langle${\it show the density of the gamma distribution}\ $26\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACG} \rule{0mm}{0mm}\newline\verb? slider.show.density("gamma",mins=c(0,0,.01,.01), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(100,100,50,50), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(.1,.1,.01,.01), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(0,10,4,1), bty="n") ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \item beta distribution \makemarginno $\langle${\it show the density of the beta distribution}\ $27\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACH} \rule{0mm}{0mm}\newline\verb? slider.show.density("beta",mins=c(0,0,0,0), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(1,1,10,10), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(.1,.1,.01,.01), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(0,1,1,1),col="blue") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \item binomial distribution \makemarginno $\langle${\it show the density of the binomial distribution}\ $28\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACI} \rule{0mm}{0mm}\newline\verb? slider.show.density("binom",mins=c(0,0,1,0), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(100,100,100,1), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(1,1,1,.01), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(0,20,5,0.5),type="h") ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \item Poisson distribution \makemarginno $\langle${\it show the density of the Poisson distribution}\ $29\rangle\equiv$ {\quad$\subset$ 30 } \label{CodeChunkLabelAACJ} \rule{0mm}{0mm}\newline\verb? slider.show.density("pois",mins=c(0,0,.01), ?% \rule{0mm}{0mm}\newline\verb? maxs=c(100,100,50), ?% \rule{0mm}{0mm}\newline\verb? deltas=c(1,1,.1), ?% \rule{0mm}{0mm}\newline\verb? defaults=c(0,20,5),type="h") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \end{itemize} The different presenter functions could be collected in central function. \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAADA} \rule{0mm}{0mm}\newline\verb? slider.present.density<-function() ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.show.density}} 25$\rangle$% \rule{0mm}{0mm}\newline\verb| |\verb?f0<- ?$\langle${\it define {\tt slider.show.normal.density}} 23$\rangle$\verb? ?% \rule{0mm}{0mm}\newline\verb| |\verb?f1<- function(...){ ?$\langle${\it show the density of the gamma distribution} 26$\rangle$\verb? }?% \rule{0mm}{0mm}\newline\verb| |\verb?f2<- function(...){ ?$\langle${\it show the density of the beta distribution} 27$\rangle$\verb? }?% \rule{0mm}{0mm}\newline\verb| |\verb?f3<- function(...){ ?$\langle${\it show the density of the binomial distribution} 28$\rangle$\verb? }?% \rule{0mm}{0mm}\newline\verb| |\verb?f4<- function(...){ ?$\langle${\it show the density of the Poisson distribution} 29$\rangle$\verb? }?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? slider(but.functions=c(f0,f1,f2,f3,f4), ?% \rule{0mm}{0mm}\newline\verb? but.names=c("show NORMAL","show GAMMA","show BETA", ?% \rule{0mm}{0mm}\newline\verb? "show BINOMIAL","show POISSON")) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.present.density() ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Now the reader is prepared to take a further look at the implementations of the slider functions of this paper. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Histograms and Density Traces} \subsection{Class number of histograms -- {\tt slider.hist}} In this section we propose a function which allows you to study the effect of the number of classes on the shape of a histogram. For this purpose a widget with a slider controlling the number of classes is opened and a histogram is computed. %nstructed in the graphics device. By moving the slider the user changes the number of classes and the histogram is redrawn. The implementation uses two special features: 1.) Sometimes we want to add further graphical elements like a density curve to the histogram. For this job {\tt slider.hist} has a slot to deliver a \emph{panel} function. This panel function will be called after updating the histogram. 2.) Additional graphics parameter can be transfered by the {\tt "..."} argument of {\tt slider.hist} to the call of {\tt hist} which constructs the histogram. \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Remarks: The default number of breaks is computed by {\tt hist}. If a {\tt breaks} argument is found in the call of {\tt slider.hist} it will be removed. \makemarginno $\langle${\it define {\tt slider.hist}}\ $31\rangle\equiv$ {\quad$\subset$ 2, 32, 33, 60 } \label{CodeChunkLabelAADB} \rule{0mm}{0mm}\newline\verb? slider.hist<-function(x,panel=rug,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a vector} 14$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? args<-args[names(args)!="breaks"] ?% \rule{0mm}{0mm}\newline\verb? ClassNumber<-length(hist(x,plot=FALSE)$breaks) ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args)))args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? xrange<-range(x); num<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? breaks<-seq(xrange[1],xrange[2],length=num+1) ?% \rule{0mm}{0mm}\newline\verb? do.call("hist",c(alist(x=x,breaks=breaks),args)) ?% \rule{0mm}{0mm}\newline\verb? panel(x) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh,"ClassNumber",1,100,1,ClassNumber); refresh() ?% \rule{0mm}{0mm}\newline\verb? "use slider to select number of classes" ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} %In this section we will test the function just defined. Here is a check to test whether we can change the color. \makemarginno $\langle${\it check}\ $32\rangle\equiv$ \label{CodeChunkLabelAADC} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.hist}} 31$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.hist(log(islands),col="green") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi To test the panel feature we add a normal density curve to the histogram. \makemarginno $\langle${\it check}\ $32\rangle+\equiv$ \label{CodeChunkLabelAADD} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.hist}} 31$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.hist(rivers,xlab="RIVERS",col="red",probability=TRUE, ?% \rule{0mm}{0mm}\newline\verb? pa=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy); rug(x); print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Width and kernel of a density trace -- {\tt slider.density}} The main parameters of density traces are width and kernel type. In the function {\tt slider.density()} both of them are selected by sliders. The alternative idea to implement the selection of the kernel function by buttons would have required seven buttons. Therefore, a slider solution seems to be a little bit smarter. To be able to add further graphical elements a panel function has been included. Technical Remarks: 1.) The kernel type is stored in the slider variable {\tt kno}. 2.) In {\tt slider.density()} we have two different effect functions where the second one {\tt set.kernel()} calls the first slider function ({\tt refresh()}). \makemarginno $\langle${\it define {\tt slider.density}}\ $34\rangle\equiv$ {\quad$\subset$ 3, 35, 36, 60 } \label{CodeChunkLabelAADE} \rule{0mm}{0mm}\newline\verb? slider.density<-function(x,panel=rug,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a vector} 14$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args))) args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb? kernel<-c("gaussian", "epanechnikov","rectangular", ?% \rule{0mm}{0mm}\newline\verb? "triangular","biweight", "cosine", "optcosine") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="kno",obj.value=1) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? width<-slider(no=1)*diff(range(x))/100 ?% \rule{0mm}{0mm}\newline\verb? kno<-slider(obj.name="kno"); kernel<-kernel[kno] ?% \rule{0mm}{0mm}\newline\verb? xy<-density(x,width=width,kernel=kernel) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=xy),args)) ?% \rule{0mm}{0mm}\newline\verb? title(paste("\n\nwidth =",signif(width,4),", kernel =",kernel)) ?% \rule{0mm}{0mm}\newline\verb? panel(x) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? set.kernel<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? kernel<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="kno",obj.value=kernel) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? bw.default<-diff(range(x))/density(x)$bw ?% \rule{0mm}{0mm}\newline\verb? nt <- slider(c(refresh,set.kernel), ?% \rule{0mm}{0mm}\newline\verb? c("width (% of range)","kernel"), ?% \rule{0mm}{0mm}\newline\verb? c(.1,1),c(100,7),c(.1,1),c(bw.default,1) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? # tkwm.minsize(nt, "300", "110") # set width, height to prevent to small sizes ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use slider to select width of window and to select kernel:\n") ?% \rule{0mm}{0mm}\newline\verb? print(cbind("no"=1:7,"kernel"=kernel)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} At first we test {\tt slider.density} without a panel function. \makemarginno $\langle${\it check of {\tt slider.density}}\ $35\rangle\equiv$ \label{CodeChunkLabelAADF} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.density}} 34$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.density(rivers,xlab="RIVERS",col="red") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi Now we test a call of {\tt slider.density} with a panel function to plot a fitted normal density curve. \makemarginno $\langle${\it check of {\tt slider.density}}\ $35\rangle+\equiv$ \label{CodeChunkLabelAADG} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.density}} 34$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.density(log(rivers),xlab="rivers",col="red", ?% \rule{0mm}{0mm}\newline\verb? panel=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy); rug(x); print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} %% {\tt prompt(slider.hist)} \makemarginno $\langle${\it define help of {\tt slider.hist}}\ $37\rangle\equiv$ \label{CodeChunkLabelAADH} \rule{0mm}{0mm}\newline\verb? \name{slider.hist} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive histogram and density traces} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.hist} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.density} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? The functions \code{slider.hist} and \code{slider.density} ?% \rule{0mm}{0mm}\newline\verb? compute histograms and density traces ?% \rule{0mm}{0mm}\newline\verb? whereas some parameter are controlled by sliders. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.hist} computes a histogram; the number of classes is ?% \rule{0mm}{0mm}\newline\verb? defined by a slider. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.density} computes a density trace; width and ?% \rule{0mm}{0mm}\newline\verb? type of the kernel are defined by sliders. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.hist(x, panel, ...) ?% \rule{0mm}{0mm}\newline\verb? slider.density(x, panel, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ data set to be used for plotting } ?% \rule{0mm}{0mm}\newline\verb? \item{panel}{ function constructing additional graphical elements to the plot} ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional (graphics) parameters which are passed to ?% \rule{0mm}{0mm}\newline\verb? the invoked high level plotting function } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.hist} draws a histogram of the data set \code{x} by ?% \rule{0mm}{0mm}\newline\verb? calling \code{hist} and opens a Tcl/Tk widget with one slider. ?% \rule{0mm}{0mm}\newline\verb? The slider defines the number of classes of the histogram. Changing the ?% \rule{0mm}{0mm}\newline\verb? slider results in redrawing of the plot. For further ?% \rule{0mm}{0mm}\newline\verb? details see the help page of \code{hist}. \code{rug} is used as the ?% \rule{0mm}{0mm}\newline\verb? default panel function. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.density} draws a density trace of the data set \code{x} ?% \rule{0mm}{0mm}\newline\verb? by \code{plot(density(...))} and opens a Tcl/Tk-widget with two ?% \rule{0mm}{0mm}\newline\verb? sliders. The first slider defines the width of the density trace ?% \rule{0mm}{0mm}\newline\verb? and the second one the kernel function: ?% \rule{0mm}{0mm}\newline\verb? \code{"1-gaussian", "2-epanechnikov", "3-rectangular", ?% \rule{0mm}{0mm}\newline\verb? "4-triangular","5-biweight", "6-cosine", "7-optcosine"} ?% \rule{0mm}{0mm}\newline\verb? Changing one of the sliders results in a redrawing of the plot. ?% \rule{0mm}{0mm}\newline\verb? For further details see the help page of \code{density}. ?% \rule{0mm}{0mm}\newline\verb? \code{rug} is used as the default panel function. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ ~~ } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{hist}}, \code{slider}} ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.hist(log(islands)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.density(rivers,xlab="rivers",col="red") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.density(log(rivers),xlab="rivers",col="red", ?% \rule{0mm}{0mm}\newline\verb? panel=function(x){ ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? yy<-dnorm(xx,mean(x),sd(x)) ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy) ?% \rule{0mm}{0mm}\newline\verb? rug(x) ?% \rule{0mm}{0mm}\newline\verb? print(summary(yy)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ univar } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Brushing Functions} % see also tkBrush in: The TeachingDemos (Greg Snow) \subsection{A draftsman's display with Brushing -- {\tt slider.brush.pairs}} A draftsman's display is a nice graphics to show two dimensional dependencies of the variables of a multivariate data set. Brushing allows you to mark a subset of the data points. The subset of the points is defined by the condition that the coordinate of a selected variable has to lie within a fixed interval. By the function {\tt slider.brush.pairs()} the user can select a variable (dimension) as well as an interval for recoloring the points satisfying a condition with color {\tt "red"}. The function {\tt pairs()} is not used in the refresh function avoiding computational overhead. So the complexity of code is mostly caused by constructing the plot. \makemarginno $\langle${\it define {\tt slider.brush.pairs}}\ $38\rangle\equiv$ {\quad$\subset$ 4, 39, 60 } \label{CodeChunkLabelAADI} \rule{0mm}{0mm}\newline\verb? slider.brush.pairs<-function(x,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a vector} 14$\rangle$% \rule{0mm}{0mm}\newline\verb? # preparation of data ?% \rule{0mm}{0mm}\newline\verb? m<-dim(x)[2]; for(j in 1:m) x[,j]<-as.numeric(x[,j]) ?% \rule{0mm}{0mm}\newline\verb? mins<-apply(x,2,min); maxs<-apply(x,2,max) ?% \rule{0mm}{0mm}\newline\verb? delta<-(maxs-mins)/100 ?% \rule{0mm}{0mm}\newline\verb? # initial plot ?% \rule{0mm}{0mm}\newline\verb? varnames<-paste("var ",1:m,": ",colnames(x),sep="") ?% \rule{0mm}{0mm}\newline\verb? dev.new(); par(mfrow=c(m,m),oma=c(0,0,0,0),mai=c(0,0,0,0),...) ?% \rule{0mm}{0mm}\newline\verb? usr.array<-array(0,c(m,m,4)); axes<-FALSE ?% \rule{0mm}{0mm}\newline\verb? for(i in 1:m){ ?% \rule{0mm}{0mm}\newline\verb? for(j in 1:m){ ?% \rule{0mm}{0mm}\newline\verb? # plot(x[,j],x[,i],axes=axes,type="p") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=x[,j],y=x[,i],type="p",axes=axes,xlab="",ylab=""),args)) ?% \rule{0mm}{0mm}\newline\verb? usr.array[i,j,] <- usr<-par()$usr ?% \rule{0mm}{0mm}\newline\verb? if(i==j) text(usr[1],usr[4],varnames[i],adj=c(0,1),cex=5) ?% \rule{0mm}{0mm}\newline\verb? rect(usr[1],usr[3],usr[2],usr[4]) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # update function ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? vmin<-slider(no=1)/100; vmax<-vmin+slider(no=2)/100 ?% \rule{0mm}{0mm}\newline\verb? vno <-slider(no=3) ?% \rule{0mm}{0mm}\newline\verb? vmin<-mins[vno]*(1-vmin)+maxs[vno]*(vmin) ?% \rule{0mm}{0mm}\newline\verb? vmax<-mins[vno]*(1-vmax)+maxs[vno]*(vmax) ?% \rule{0mm}{0mm}\newline\verb? ind <-vmin<=x[,vno] & x[,vno]<=vmax ?% \rule{0mm}{0mm}\newline\verb? for(i in 1:m){ ?% \rule{0mm}{0mm}\newline\verb? for(j in 1:m){ ?% \rule{0mm}{0mm}\newline\verb? par(mfg=c(i,j),usr=usr.array[i,j,]) ?% \rule{0mm}{0mm}\newline\verb? points(x[ ,j],x[ ,i],col=0,cex=2,pch=19) ?% \rule{0mm}{0mm}\newline\verb? points(x[ ind,j],x[ ind,i],col="red",pch=1) ?% \rule{0mm}{0mm}\newline\verb? points(x[!ind,j],x[!ind,i],col="blue",pch=19) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # slider definition ?% \rule{0mm}{0mm}\newline\verb? nt <- slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("lower limit (% of range)","width (% of range)", ?% \rule{0mm}{0mm}\newline\verb? paste("variable no: 1 ..",m)), ?% \rule{0mm}{0mm}\newline\verb? c(0,0,1), c(100,100, m), c(1,1,1), c(0,30,1) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? # tkwm.minsize(nt, "450", "150") # set width, height to prevent to small sizes ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use sliders to select variable and interval width\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} We will use the famous {\tt iris} data to test the brushing function. \makemarginno $\langle${\it test of slider.brush.pairs}\ $39\rangle\equiv$ \label{CodeChunkLabelAADJ} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.pairs}} 38$\rangle$% \rule{0mm}{0mm}\newline\verb? usr.array<-slider.brush.pairs(iris,cex=.2) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Scatter plot brushing -- {\tt slider.brush.plot.xy}} The function {\tt slider.brush.plot.xy()} computes an xy-plot and recolors a data point {\tt "red"} if the value of its third variable is in the fixed interval. \makemarginno $\langle${\it define {\tt slider.brush.plot.xy}}\ $40\rangle\equiv$ {\quad$\subset$ 5, 41, 60 } \label{CodeChunkLabelAAEA} \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy<-function(x,y=NULL,z=NULL,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x,\ y,z} are vectors or {\tt x} is matrix with >2 columns} 16$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? if(!any("main"==names(args))) ?% \rule{0mm}{0mm}\newline\verb? args<-c(args,list(main=paste(x.name,"<-->",y.name))) ?% \rule{0mm}{0mm}\newline\verb? if(!any("xlab"==names(args)))args<-c(args,list(xlab=x.name)) ?% \rule{0mm}{0mm}\newline\verb? if(!any("ylab"==names(args)))args<-c(args,list(ylab=y.name)) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot.default",c(alist(x=x,y=y,pch=19),args)) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? zrange<-range(z); z1<-slider(no=1); z2<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? zmin<-z1; zmax<-z1+z2; ind<-zmin<=z&z<=zmax; pos<-par()$usr ?% \rule{0mm}{0mm}\newline\verb? rect(pos[2],pos[4],pos[1]*.5+pos[2]*.5,pos[3]*.1+pos[4]*.9, ?% \rule{0mm}{0mm}\newline\verb? col="white",border=NA) ?% \rule{0mm}{0mm}\newline\verb? txt<-paste(z.name,"(red) in [",format(zmin,digits=4),",", ?% \rule{0mm}{0mm}\newline\verb? format(zmax,digits=4),"]",sep="") ?% \rule{0mm}{0mm}\newline\verb? text(pos[2],pos[4],txt,adj=c(1,1),col="red",cex=0.7) ?% \rule{0mm}{0mm}\newline\verb? col<-c("black","red")[1+ind] ?% \rule{0mm}{0mm}\newline\verb? points(x,y,col=col,pch=19, ?% \rule{0mm}{0mm}\newline\verb? cex=if("cex" %in% names(args)) args$cex else 1) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? z.min<-min(z); z.max<-max(z); delta<-(z.max-z.min)/100 ?% \rule{0mm}{0mm}\newline\verb? reset<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x=x,y=y,col="red",pch=19),args)); pos<-par()$usr #090216 ?% \rule{0mm}{0mm}\newline\verb? rect(pos[2],pos[4],pos[1]*.4+pos[2]*.6,pos[3]*.1+pos[4]*.9, ?% \rule{0mm}{0mm}\newline\verb? col="white",border=NA) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("minimum of z","interval width of z"), ?% \rule{0mm}{0mm}\newline\verb? c(z.min,0),c(z.max+delta,(z.max-z.min)+delta), ?% \rule{0mm}{0mm}\newline\verb? c(delta,delta),c(z.min-delta,(z.max-z.min)/2), ?% \rule{0mm}{0mm}\newline\verb? reset.function=reset ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use sliders to select interval for inking points\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} \makemarginno $\langle${\it test of {\tt slider.brush.plot.xy}}\ $41\rangle\equiv$ \label{CodeChunkLabelAAEB} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.plot.xy}} 40$\rangle$% \rule{0mm}{0mm}\newline\verb? # data<-matrix(rnorm(900), 300,3) ?% \rule{0mm}{0mm}\newline\verb? # slider.brush.plot.xy(data[,1],data[,2],sqrt(data[,1]^2+data[,2]^2), ?% \rule{0mm}{0mm}\newline\verb? # main="hallo") ?% \rule{0mm}{0mm}\newline\verb? # slider.brush.plot.xy(iris[,1],iris[,2],iris[,3]) ?% \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy(iris[,1:3],cex=1.5) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.brush.pairs} and of {\tt slider.brush.plot.xy}}\ $42\rangle\equiv$ \label{CodeChunkLabelAAEC} \rule{0mm}{0mm}\newline\verb? \name{slider.brush} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive brushing functions} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.brush.pairs} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.brush.plot.xy} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? These functions compute a pairs plot or a simple xy-plot and ?% \rule{0mm}{0mm}\newline\verb? open a slider control widget for brushing. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.brush.pairs} computes a pairs plot; the user defines an ?% \rule{0mm}{0mm}\newline\verb? interval for one of the variables and in effect all data points ?% \rule{0mm}{0mm}\newline\verb? in this interval will be recolored. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.brush.plot.xy} computes an xy-plot; the user defines a ?% \rule{0mm}{0mm}\newline\verb? interval for a third variable \code{z} and all points ?% \rule{0mm}{0mm}\newline\verb? \code{(x,y)} will be recolored red if the \code{z} value is in the interval. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.brush.pairs(x, ...) ?% \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy(x, y, z, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ new settings for global graphics parameters } ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ matrix or data frame or vector } ?% \rule{0mm}{0mm}\newline\verb? \item{y}{ vector of y values if \code{x} is not a matrix } ?% \rule{0mm}{0mm}\newline\verb? \item{z}{ vector of z values if \code{x} is not a matrix } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.brush.pairs} draws a pairs plot of the data set \code{x}. ?% \rule{0mm}{0mm}\newline\verb? The first slider defines the lower limit of the interval and the ?% \rule{0mm}{0mm}\newline\verb? second its width. By the third slider a variable is selected. ?% \rule{0mm}{0mm}\newline\verb? All data points for which the selected variable is in the interval ?% \rule{0mm}{0mm}\newline\verb? are recolored red. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \code{slider.brush.plot.xy} draws an xy-plot of the data set \code{x}. ?% \rule{0mm}{0mm}\newline\verb? The first slider defines the lower limit of the interval of z values ?% \rule{0mm}{0mm}\newline\verb? and the second one its width. All data points for which the variable z ?% \rule{0mm}{0mm}\newline\verb? is in the interval are recolored red. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ W. S. Cleveland, R. A. Becker, and G. Weil. The Use of ?% \rule{0mm}{0mm}\newline\verb? Brushing and Rotation for Data Analysis. InW. S. Cleveland ?% \rule{0mm}{0mm}\newline\verb? and M. E. McGill, editors, Dynamic Graphics for ?% \rule{0mm}{0mm}\newline\verb? Statistics. Wadsworth and Brooks/Cole, Pacific Grove, ?% \rule{0mm}{0mm}\newline\verb? CA, 1988. } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{pairs}}, \code{\link{plot}} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.brush.pairs(iris) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.brush.plot.xy(iris[,1:3]) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Time Series Plots} \subsection{Splitted time series -- {\tt slider.split.plot.ts}} Often there is a periodical structure in time series of a fixed period. Then you will like to have a tool to separate and compare the sections defined by the season. The function {\tt slider.split.plot.ts} lets you select the length of a saison and one of the limits between two saisons. Then in the time series plot {\tt fivenum} summary statistics or a regression lines are added to each of the sections. \makemarginno $\langle${\it define {\tt slider.split.plot.ts}}\ $43\rangle\equiv$ {\quad$\subset$ 6, 44, 60 } \label{CodeChunkLabelAAED} \rule{0mm}{0mm}\newline\verb? slider.split.plot.ts<-function(x,type="l",...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a time series} 17$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? n<-length(x); xmin<-min(x); xmax<-max(x) ?% \rule{0mm}{0mm}\newline\verb? xdelta<-xmax-xmin ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="summary.type",obj.value="linear") ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # initialization ?% \rule{0mm}{0mm}\newline\verb? summary.type<-slider(obj.name="summary.type") ?% \rule{0mm}{0mm}\newline\verb? width<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? limit<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? n.sec<-1 ?% \rule{0mm}{0mm}\newline\verb? limit<-limit-width*ceiling((limit-xmin)/width) ?% \rule{0mm}{0mm}\newline\verb? # plot: # plot(x,y,type=type,bty="n",xlab="",ylab="") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,type=type),args)) ?% \rule{0mm}{0mm}\newline\verb? limit<-limit-width-width/n.sec; j<-0 ?% \rule{0mm}{0mm}\newline\verb? # abline(v=limits,lwd=0.5,lty=3) ?% \rule{0mm}{0mm}\newline\verb? while(limit1){ ?% \rule{0mm}{0mm}\newline\verb? tstart2 <- slider(no=3); tend2 <- width+tstart2 ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # plot ?% \rule{0mm}{0mm}\newline\verb? par(mfrow=c(2+(n.windows>1),1),mai=c(.5,0.5,.1,0)) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,y,type="l",bty="n",xlab="",ylab="") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,type="l",bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? abline(v=c(x[tstart1],x[tend1]),col="red") ?% \rule{0mm}{0mm}\newline\verb? lines(x[tstart1:tend1],y[tstart1:tend1],col="red",lty=2) ?% \rule{0mm}{0mm}\newline\verb? if(n.windows>1){ ?% \rule{0mm}{0mm}\newline\verb? abline(v=c(x[tstart2],x[tend2]),col="blue") ?% \rule{0mm}{0mm}\newline\verb? lines(x[tstart2:tend2],y[tstart2:tend2],col="blue",lty=3) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? usr<-par()$usr ?% \rule{0mm}{0mm}\newline\verb? ind<-tstart1:tend1 ?% \rule{0mm}{0mm}\newline\verb? plot(x[ind],y[ind],type="b",col="red",bty="n", # ylim=usr[3:4], ?% \rule{0mm}{0mm}\newline\verb? xlim=c(x[tstart1],x[tstart1]+width*diff(x[1:2]))) ?% \rule{0mm}{0mm}\newline\verb? if(n.windows>1){ ?% \rule{0mm}{0mm}\newline\verb? ind<-tstart2:tend2 ?% \rule{0mm}{0mm}\newline\verb? plot(x[ind],y[ind],type="b",col="blue",bty="n", # ylim=usr[3:4], ?% \rule{0mm}{0mm}\newline\verb? xlim=c(x[tstart2],x[tstart2]+width*diff(x[1:2]))) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? par(mfrow=c(1,1)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if(n.windows<2){ ?% \rule{0mm}{0mm}\newline\verb? slider(refresh,c("width of window","start of window"), ?% \rule{0mm}{0mm}\newline\verb? c(1,1),c(tmax,tmax),c(1,1),c(ceiling(tmax/4),1)) ?% \rule{0mm}{0mm}\newline\verb? }else{ ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("width of window","start window 1","start window 2"), ?% \rule{0mm}{0mm}\newline\verb? c(1,1,1),c(tmax,tmax,tmax),c(1,1,1),c(ceiling(tmax/4),1,ceiling(tmax/2))) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("select window and look at time series!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} The first test will be done with {\tt co2}. \makemarginno $\langle${\it test of {\tt slider.zoom.plot.ts}}\ $47\rangle\equiv$ \label{CodeChunkLabelAAEH} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.zoom.plot.ts}} 46$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(co2,2,main="co2") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi For comparing two sections of a series take a look at {\tt sunspots}. \makemarginno $\langle${\it test of {\tt slider.zoom.plot.ts}}\ $47\rangle+\equiv$ \label{CodeChunkLabelAAEI} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.zoom.plot.ts}} 46$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(sunspots,2) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.zoom.plot.ts}}\ $49\rangle\equiv$ \label{CodeChunkLabelAAEJ} \rule{0mm}{0mm}\newline\verb? \name{slider.zoom.plot.ts} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive zooming of time series} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.zoom.plot.ts} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? This function shows one or two sections of a time series. The window(s) is ?% \rule{0mm}{0mm}\newline\verb? (are) controlled by sliders. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(x, n.windows, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ time series } ?% \rule{0mm}{0mm}\newline\verb? \item{n.windows}{ \code{if(n.windows>1} two sections are defined } ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional graphical parameters } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.zoom.plot.ts} plots the original time series and it lets you ?% \rule{0mm}{0mm}\newline\verb? select one or two sections of the series by fixing the width(s) and the ?% \rule{0mm}{0mm}\newline\verb? starting point(s) of the region(s). Then the section(s) of the series is (are) ?% \rule{0mm}{0mm}\newline\verb? plotted separately one below the other. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? The first slider defines the width of the section(s). ?% \rule{0mm}{0mm}\newline\verb? The second (third) one sets the start of the first (second) section. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{plot}} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.zoom.plot.ts(co2,2) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Smoothing Time Series -- {\tt slider.smooth.plot.ts}} Tukey has proposed a set of smoothing operations for time series. Some of them are implemented by the function {\tt smooth()}. {\tt slider.smooth.plot.ts} supports the user to find the suitable combination of smoothing operations. Interactively he is able to smooth a time series step by step. The filter that should be used in the next step is selected by Tcl/Tk control panel. \makemarginno $\langle${\it define {\tt slider.smooth.plot.ts}}\ $50\rangle\equiv$ {\quad$\subset$ 8, 51, 60 } \label{CodeChunkLabelAAFA} \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts<-function(x,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a time series} 17$\rangle$% \rule{0mm}{0mm}\newline\verb? t.x<-x; x<-y ?% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? kind<-c("3RS3R", "3RSS", "3RSR", "3R", "3", "S") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="nts",obj.value=x) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="kind",obj.value="3") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="history.kind",obj.value="") ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # initialization ?% \rule{0mm}{0mm}\newline\verb? choice<-slider(obj.name="kind"); print(choice) ?% \rule{0mm}{0mm}\newline\verb? history.kind<-slider(obj.name="history.kind") ?% \rule{0mm}{0mm}\newline\verb? history.kind<-c(history.kind,choice) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="history.kind",obj.value=history.kind) ?% \rule{0mm}{0mm}\newline\verb? xx<-slider(obj.name="nts") ?% \rule{0mm}{0mm}\newline\verb? xx<-smooth(xx,kind=choice) ?% \rule{0mm}{0mm}\newline\verb? # plot(t.x,x,type="l",lty=3,bty="n",xlab="",ylab="") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(t.x,x,type="l",lty=3,bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? title(paste(history.kind,collapse="->")) ?% \rule{0mm}{0mm}\newline\verb? points(t.x,xx,type="l",col="red") # lty=1+which(choice==kind)) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="nts",obj.value=xx) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? reset<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="nts",obj.value=x) ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="kind",obj.value="3") ?% \rule{0mm}{0mm}\newline\verb? slider(obj.name="history.kind",obj.value="") ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? f1<-function(...){slider(obj.name="kind",obj.value="3RS3R");refresh()} ?% \rule{0mm}{0mm}\newline\verb? f2<-function(...){slider(obj.name="kind",obj.value="3RSS"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? f3<-function(...){slider(obj.name="kind",obj.value="3RSR"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? f4<-function(...){slider(obj.name="kind",obj.value="3R"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? f5<-function(...){slider(obj.name="kind",obj.value="3"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? f6<-function(...){slider(obj.name="kind",obj.value="S"); refresh()} ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? slider(but.functions=c(f1,f2,f3,f4,f5,f6), ?% \rule{0mm}{0mm}\newline\verb? but.names=kind,reset.function=reset) ?% \rule{0mm}{0mm}\newline\verb? cat("select type of smoothing a la Tukey and look the result!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} For testing we use some random numbers. \makemarginno $\langle${\it test of {\tt slider.smooth.plot.ts}}\ $51\rangle\equiv$ \label{CodeChunkLabelAAFB} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.smooth.plot.ts}} 50$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts(rnorm(100),main="\nrandom",col="blue") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.smooth.plot.ts}}\ $52\rangle\equiv$ \label{CodeChunkLabelAAFC} \rule{0mm}{0mm}\newline\verb? \name{slider.smooth.plot.ts} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive Tukey smoothing} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.smooth.plot.ts} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.smooth.plot.ts} computes smooth curves ?% \rule{0mm}{0mm}\newline\verb? of a time series plot by Tukey's smoothers. ?% \rule{0mm}{0mm}\newline\verb? The kind of smoothing is controlled by a Tcl/Tk widget. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts(x, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ time series } ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional graphical parameters } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.smooth.plot.ts} draws the time series \code{x}. ?% \rule{0mm}{0mm}\newline\verb? The user selects a filter of the set ?% \rule{0mm}{0mm}\newline\verb? \code{c("3RS3R", "3RSS", "3RSR", "3R", "3", "S")} ?% \rule{0mm}{0mm}\newline\verb? step by step and the resulting curve is added to the plot. ?% \rule{0mm}{0mm}\newline\verb? The selection is performed by pressing a button of the control ?% \rule{0mm}{0mm}\newline\verb? widget of \code{slider.smooth.plot.ts}. ?% \rule{0mm}{0mm}\newline\verb? The button \code{reset} restarts the smoothing process. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ Tukey, J. W. (1977). Exploratory Data Analysis, Reading ?% \rule{0mm}{0mm}\newline\verb? Massachusetts: Addison-Wesley. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{plot}}, \code{\link{smooth}} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.smooth.plot.ts(rnorm(100)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Regression} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Smoothing by lowess -- {\tt slider.lowess.plot}} The result of the lowess smoother heavily depends on the setting of the parameter {\tt f}. This parameter controls the smoother span and has to be fixed by the user. The function {\tt slider.lowess.plot} allows the user to select the span and to observe the corresponding line. Furthermore, the number of iterations are set interactively. \makemarginno $\langle${\it define {\tt slider.lowess.plot}}\ $53\rangle\equiv$ {\quad$\subset$ 9, 54, 60 } \label{CodeChunkLabelAAFD} \rule{0mm}{0mm}\newline\verb? slider.lowess.plot<-function(x,y=NULL,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? # slider function to draw lowess smoother, pwolf 080525 ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a matrix or {\tt x} and {\tt y} are vectors} 15$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? f<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? iter<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? xy<-lowess(x,y,f=f,iter=iter) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,y,bty="n") ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? lines(xy) ?% \rule{0mm}{0mm}\newline\verb? title(paste("\n\nlowess: f =",signif(f,4),", iterations =",iter)) ?% \rule{0mm}{0mm}\newline\verb? lines(xy) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("smoother span","iterations"), ?% \rule{0mm}{0mm}\newline\verb? c(.01,1),c(1,7),c(.01,1),c(2/3,3) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use slider to select smoother span!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} \makemarginno $\langle${\it check of {\tt slider.lowess.plot}}\ $54\rangle\equiv$ \label{CodeChunkLabelAAFE} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.lowess.plot}} 53$\rangle$% \rule{0mm}{0mm}\newline\verb? slider.lowess.plot(cars,col="red") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.lowess.plot}}\ $55\rangle\equiv$ \label{CodeChunkLabelAAFF} \rule{0mm}{0mm}\newline\verb? \name{slider.lowess.plot} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive lowess smoothing} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.lowess.plot} ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.lowess.plot} computes an xy-plot of the data and ?% \rule{0mm}{0mm}\newline\verb? adds LOWESS lines. The smoother ?% \rule{0mm}{0mm}\newline\verb? span and the number of iterations are selected by sliders. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.lowess.plot(x, y, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ data set to be used for plotting or vector of x values } ?% \rule{0mm}{0mm}\newline\verb? \item{y}{ vector of y values in case \code{x} is not a matrix } ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional (graphics) parameter settings } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.lowess.plot} computes a scatterplot of the data. ?% \rule{0mm}{0mm}\newline\verb? Then a LOWESS smoother line is added to the plot. ?% \rule{0mm}{0mm}\newline\verb? For more details about the lowess parameters \code{f} and \code{iter} ?% \rule{0mm}{0mm}\newline\verb? take a look at the help page of \code{lowess}. ?% \rule{0mm}{0mm}\newline\verb? The parameters are set by moving sliders of the ?% \rule{0mm}{0mm}\newline\verb? control widget. The first slider defines the smoother span \code{f} ?% \rule{0mm}{0mm}\newline\verb? and the second one the number of iterations. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ for references see help file of \code{lowess} } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{lowess}}, \code{slider} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? slider.lowess.plot(cars) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Sensitivity of Regression Line -- {\tt slider.bootstrap.lm.plot}} To understand the senitivity of a regression curve the function {\tt slider.bootstrap.lm.plot} shows the user a lot of bootstrap regression lines computed on samples of the data points. The number of repetitions, the random seed and the polynomial degree is controlled by sliders. \makemarginno $\langle${\it define {\tt slider.bootstrap.lm.plot}}\ $56\rangle\equiv$ {\quad$\subset$ 10, 57, 60 } \label{CodeChunkLabelAAFG} \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot<-function(x,y=NULL,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a matrix or {\tt x} and {\tt y} are vectors} 15$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? n<-length(x) ?% \rule{0mm}{0mm}\newline\verb? ind<-order(x); x.orig<-x<-x[ind]; y.orig<-y<-y[ind] ?% \rule{0mm}{0mm}\newline\verb? xx<-seq(min(x),max(x),length=100) ?% \rule{0mm}{0mm}\newline\verb? # plot(x,y,...) ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? abline(lm(y~x),lwd=5) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? # plot(x,y,...); ?% \rule{0mm}{0mm}\newline\verb? do.call("plot",c(alist(x,y,bty="n"),args)) ?% \rule{0mm}{0mm}\newline\verb? abline(coefyx<-lm(y~x)$coef, lwd=3) ?% \rule{0mm}{0mm}\newline\verb? polytype<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? form<-paste(paste(sep="","I(x^",1:polytype,")"),collapse="+") ?% \rule{0mm}{0mm}\newline\verb? form<-as.formula(paste("y ~",form)); coef<-lm(form)$coef ?% \rule{0mm}{0mm}\newline\verb? yy<-outer(xx,0:polytype,"^")%*%coef; lines(xx,yy,lwd=2) ?% \rule{0mm}{0mm}\newline\verb? B<-slider(no=2); zz<-slider(no=3); set.seed(zz) ?% \rule{0mm}{0mm}\newline\verb? result<-matrix(0,1+polytype,B) ?% \rule{0mm}{0mm}\newline\verb? for(i in 1:B){ ?% \rule{0mm}{0mm}\newline\verb? index<-sample(1:n,n,replace=TRUE) ?% \rule{0mm}{0mm}\newline\verb? x<-x.orig[index]; y<-y.orig[index] ?% \rule{0mm}{0mm}\newline\verb? coef<-lm(form)$coef ?% \rule{0mm}{0mm}\newline\verb? yy<-outer(xx,0:polytype,"^")%*%coef ?% \rule{0mm}{0mm}\newline\verb? lines(xx,yy,lwd=2,col=i,lty=2) ?% \rule{0mm}{0mm}\newline\verb? result[,i]<-coef ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? abline(coefyx, lwd=5) ?% \rule{0mm}{0mm}\newline\verb? result<-t(result); ?% \rule{0mm}{0mm}\newline\verb? colnames(result)<-c("intercept",paste(sep="","beta: x^",1:polytype)) ?% \rule{0mm}{0mm}\newline\verb? print(summary(result)) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh,c("polynomial degree","number repetitions","random seed"), ?% \rule{0mm}{0mm}\newline\verb? c(1,1,1),c(5,50,100),c(1,1,1),c(1,10,1)) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? "ok" ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Test} \makemarginno $\langle${\it test of {\tt slider..bootstrap.lm.plot}}\ $57\rangle\equiv$ \label{CodeChunkLabelAAFH} \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.bootstrap.lm.plot}} 56$\rangle$% \rule{0mm}{0mm}\newline\verb? daten<-iris[,2:3] ?% \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot(daten) ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsubsection{Help Page} \makemarginno $\langle${\it define help of {\tt slider.bootstrap.lm.plot}}\ $58\rangle\equiv$ \label{CodeChunkLabelAAFI} \rule{0mm}{0mm}\newline\verb? \name{slider.bootstrap.lm.plot} ?% \rule{0mm}{0mm}\newline\verb? \title{interactive bootstapping for lm} ?% \rule{0mm}{0mm}\newline\verb? \alias{slider.bootstrap.lm.plot} ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? \description{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.bootstrap.lm.plot} computes a scatterplot and ?% \rule{0mm}{0mm}\newline\verb? adds regression curves of samples of the data points. ?% \rule{0mm}{0mm}\newline\verb? The number of samples and the degree of the model are ?% \rule{0mm}{0mm}\newline\verb? controlled by sliders. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \usage{ ?% \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot(x, y, ...) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \arguments{ ?% \rule{0mm}{0mm}\newline\verb? \item{x}{ two column matrix or vector of x values if y is used } ?% \rule{0mm}{0mm}\newline\verb? \item{y}{ y values if x is not a matrix } ?% \rule{0mm}{0mm}\newline\verb? \item{\dots}{ additional graphics parameters } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \details{ ?% \rule{0mm}{0mm}\newline\verb? \code{slider.bootstrap.lm.plot} draws a scatterplot of the data points ?% \rule{0mm}{0mm}\newline\verb? and fits a linear model to the data set. Regression curves ?% \rule{0mm}{0mm}\newline\verb? of samples of the data are then added to the plot. Within a Tcl/Tk ?% \rule{0mm}{0mm}\newline\verb? control widget the degree of the model, the repetitions and the start ?% \rule{0mm}{0mm}\newline\verb? of the random seed are set. After modification of a parameter ?% \rule{0mm}{0mm}\newline\verb? the plot is updated. ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \value{ ?% \rule{0mm}{0mm}\newline\verb? a message about the usage ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \references{ ~~ } ?% \rule{0mm}{0mm}\newline\verb? \author{ Hans Peter Wolf } ?% \rule{0mm}{0mm}\newline\verb? \seealso{ \code{\link{plot}} } ?% \rule{0mm}{0mm}\newline\verb? \examples{ ?% \rule{0mm}{0mm}\newline\verb? \dontrun{ ?% \rule{0mm}{0mm}\newline\verb? ## This example cannot be run by examples() but should be work in an interactive R session ?% \rule{0mm}{0mm}\newline\verb? daten<-iris[,2:3] ?% \rule{0mm}{0mm}\newline\verb? slider.bootstrap.lm.plot(daten) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? \keyword{ iplot } ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \section{Appendix} \subsection{Definition of {\tt slider}} We will finish the paper by listing the definition of the function {\tt slider()}. The definition is copied from package relax. \renewcommand{\codechunkcommands}{\footnotesize} \makemarginno $\langle${\it define {\tt slider}}\ $59\rangle\equiv$ \label{CodeChunkLabelAAFJ} \rule{0mm}{0mm}\newline\verb? slider<-function (sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, ?% \rule{0mm}{0mm}\newline\verb? sl.defaults, but.functions, but.names, no, set.no.value, ?% \rule{0mm}{0mm}\newline\verb? obj.name, obj.value, reset.function, title) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? if (!exists("slider.env")) ?% \rule{0mm}{0mm}\newline\verb? slider.env <<- new.env(parent = .GlobalEnv) ?% \rule{0mm}{0mm}\newline\verb? if (!missing(no)) ?% \rule{0mm}{0mm}\newline\verb? return(as.numeric(tclvalue(get(paste("slider", no, sep = ""), ?% \rule{0mm}{0mm}\newline\verb? env = slider.env)))) ?% \rule{0mm}{0mm}\newline\verb? if (!missing(set.no.value)) { ?% \rule{0mm}{0mm}\newline\verb? try(eval(parse(text = paste("tclvalue(slider", set.no.value[1], ?% \rule{0mm}{0mm}\newline\verb? ")<-", set.no.value[2], sep = "")), env = slider.env)) ?% \rule{0mm}{0mm}\newline\verb? return(set.no.value[2]) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (!missing(obj.name)) { ?% \rule{0mm}{0mm}\newline\verb? if (!missing(obj.value)) ?% \rule{0mm}{0mm}\newline\verb? assign(obj.name, obj.value, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? else obj.value <- get(obj.name, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? return(obj.value) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(title)) ?% \rule{0mm}{0mm}\newline\verb? title <- "slider control widget" ?% \rule{0mm}{0mm}\newline\verb? if (missing(sl.names)) { ?% \rule{0mm}{0mm}\newline\verb? sl.defaults <- sl.names <- NULL ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(sl.functions)) ?% \rule{0mm}{0mm}\newline\verb? sl.functions <- function(...) { ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? # require(tcltk) # now in the depends section of the package ?% \rule{0mm}{0mm}\newline\verb? nt <- tktoplevel() ?% \rule{0mm}{0mm}\newline\verb? tkwm.title(nt, title) ?% \rule{0mm}{0mm}\newline\verb? tkwm.geometry(nt, "+0+15") ?% \rule{0mm}{0mm}\newline\verb? assign("tktop.slider", nt, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? "relax" ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(sl.names)) { ?% \rule{0mm}{0mm}\newline\verb? "relax" ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text = paste("assign('slider", i, "',tclVar(sl.defaults[i]),env=slider.env)", ?% \rule{0mm}{0mm}\newline\verb? sep = ""))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(fr <- tkframe(nt)) ?% \rule{0mm}{0mm}\newline\verb? lab <- tklabel(fr, text = sl.names[i], width = "25") ?% \rule{0mm}{0mm}\newline\verb? sc <- tkscale(fr, from = sl.mins[i], to = sl.maxs[i], ?% \rule{0mm}{0mm}\newline\verb? showvalue = TRUE, resolution = sl.deltas[i], orient = "horiz") ?% \rule{0mm}{0mm}\newline\verb? tkpack(lab, sc, side = "right") ?% \rule{0mm}{0mm}\newline\verb? assign("sc", sc, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text = paste("tkconfigure(sc,variable=slider", ?% \rule{0mm}{0mm}\newline\verb? i, ")", sep = "")), env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? sl.fun <- if (length(sl.functions) > 1) ?% \rule{0mm}{0mm}\newline\verb? sl.functions[[i]] ?% \rule{0mm}{0mm}\newline\verb? else sl.functions ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(sl.fun)) ?% \rule{0mm}{0mm}\newline\verb? sl.fun <- eval(parse(text = paste("function(...){", ?% \rule{0mm}{0mm}\newline\verb? sl.fun, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkbind(sc, "", sl.fun) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? assign("slider.values.old", sl.defaults, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? tkpack(f.but <- tkframe(nt), fill = "x") ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = "Exit", command = function() tkdestroy(nt)), ?% \rule{0mm}{0mm}\newline\verb? side = "right") ?% \rule{0mm}{0mm}\newline\verb? if (!missing(reset.function)) { ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(reset.function)) ?% \rule{0mm}{0mm}\newline\verb? reset.function <- eval(parse(text = paste("function(...){", ?% \rule{0mm}{0mm}\newline\verb? reset.function, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = "Reset", command = function() { ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(sl.names)) eval(parse(text = paste("tclvalue(slider", ?% \rule{0mm}{0mm}\newline\verb? i, ")<-", sl.defaults[i], sep = "")), env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? reset.function() ?% \rule{0mm}{0mm}\newline\verb? }), side = "right") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(but.names)) ?% \rule{0mm}{0mm}\newline\verb? but.names <- NULL ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(but.names)) { ?% \rule{0mm}{0mm}\newline\verb? but.fun <- if (length(but.functions) > 1) ?% \rule{0mm}{0mm}\newline\verb? but.functions[[i]] ?% \rule{0mm}{0mm}\newline\verb? else but.functions ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(but.fun)) ?% \rule{0mm}{0mm}\newline\verb? but.fun <- eval(parse(text = c("function(...){", ?% \rule{0mm}{0mm}\newline\verb? but.fun, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = but.names[i], command = but.fun), ?% \rule{0mm}{0mm}\newline\verb? side = "left") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? invisible(nt) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \end{document} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Generation of {\tt .R} and {\tt .Rd} files} The building process of packages needs to store Code in {\tt .R} files and help pages in {\tt Rd} files. The code chunk of this section writes these files. Compare file {\tt doaplpack}. \makemarginno $\langle${\it old generation of .R and .Rd files}\ $60\rangle\equiv$ \label{CodeChunkLabelAAGA} \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.hist.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.hist]]",FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.brush.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.brush.pairs]] and of [[slider.brush.plot.xy]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.split.plot.ts.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.split.plot.ts]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.zoom.plot.ts.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.zoom.plot.ts]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.smooth.plot.ts.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.smooth.plot.ts]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.lowess.plot.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.lowess.plot]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","slider.bootstrap.lm.plot.Rd", ?% \rule{0mm}{0mm}\newline\verb? "define help of [[slider.bootstrap.lm.plot]]", ?% \rule{0mm}{0mm}\newline\verb? FALSE,FALSE,FALSE) ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.hist}} 31$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.hist",file="slider.hist.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.density}} 34$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.density",file="slider.density.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.pairs}} 38$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.brush.pairs",file="slider.brush.pairs.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.brush.plot.xy}} 40$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.brush.plot.xy",file="slider.brush.plot.xy.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.split.plot.ts}} 43$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.split.plot.ts",file="slider.split.plot.ts.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.zoom.plot.ts}} 46$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.zoom.plot.ts",file="slider.zoom.plot.ts.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.smooth.plot.ts}} 50$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.smooth.plot.ts",file="slider.smooth.plot.ts.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.lowess.plot}} 53$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.lowess.plot",file="slider.lowess.plot.R") ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it define {\tt slider.bootstrap.lm.plot}} 56$\rangle$% \rule{0mm}{0mm}\newline\verb? dump("slider.bootstrap.lm.plot",file="slider.bootstrap.lm.plot.R") ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Create namespace file} \makemarginno $\langle${\it old generation of namespace file}\ $61\rangle\equiv$ \label{CodeChunkLabelAAGB} \rule{0mm}{0mm}\newline\verb? cat('exportPattern("^slider.[a-z]+")', ?% \rule{0mm}{0mm}\newline\verb? 'export(bagplot,boxplot2D,compute.bagplot,faces,plot.bagplot, ?% \rule{0mm}{0mm}\newline\verb? plot.faces,spin3R,stem.leaf)', ?% \rule{0mm}{0mm}\newline\verb? file="/home/wiwi/pwolf/R/aplpack/aplpack/NAMESPACE",sep="\n") ?% \rule{0mm}{0mm}\newline\verb? "ok" ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{Umwandlung von PS-Bildern in JPEGs} Der R-Erstellungsprozess des PDF-Files verwendet pdflatex, sodass JPEP-Dateien statt PS-Dateien eingebunden werden. Deshalb ist es ratsam, jpg-Datei gleicher Qualitt zu generieren. Mit diesem Chunk lassen sich die Bilder von ps nach jpg konvertieren. Im Erstellungsskript werden brigens die jpg-Dateien an die geeignete Stelle kopiert: {\tt cp\ sliderfns/*.jpg\ aplpack/inst/doc/} \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAAGC} \rule{0mm}{0mm}\newline\verb? a<-list.files(pattern="^p.*$") ?% \rule{0mm}{0mm}\newline\verb? for(fi in a){ ?% \rule{0mm}{0mm}\newline\verb? nfi<-sub("$",".jpg",fi) ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text=paste("system('convert ",fi," ",nfi,"')"))) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \subsection{{\tt aplpack} script} \makemarginno $\langle${\it {\tt aplpack} script}\ $63\rangle\equiv$ \label{CodeChunkLabelAAGD} \rule{0mm}{0mm}\newline\verb? # doaplpack: Installation script for aplpack ?% \rule{0mm}{0mm}\newline\verb? # pw 09/2008 ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### CLEAN ?% \rule{0mm}{0mm}\newline\verb? [ ! -d aplpack/R ] && mv aplpack/r aplpack/R ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### BAGPLOT ?% \rule{0mm}{0mm}\newline\verb? echo "library(relax);tangleR(\"bagplot.rev\",expand.roots=\"\",expand.root.start=TRUE)" | R --vanilla ?% \rule{0mm}{0mm}\newline\verb? mv bagplot.R aplpack/R/bagplot.R ?% \rule{0mm}{0mm}\newline\verb? ##notangle -R"define [[bagplot]]" bagplot.rev > aplpack/R/bagplot.R ?% \rule{0mm}{0mm}\newline\verb? echo "library(relax);tangleR(\"bagplot.rev\",\"bagplot.Rd\", \ ?% \rule{0mm}{0mm}\newline\verb? expand.roots=\"define help of [[bagplot]]\",expand.root.start=FALSE)" | R --vanilla ?% \rule{0mm}{0mm}\newline\verb? grep "^[^#]" bagplot.Rd.R > aplpack/man/bagplot.Rd ?% \rule{0mm}{0mm}\newline\verb? rm bagplot.Rd.R ?% \rule{0mm}{0mm}\newline\verb? ## notangle -R"define help of [[bagplot]]" bagplot.rev > aplpack/man/bagplot.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p bagplot.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? cp -p work/bagplot.pdf aplpack/inst/pdf/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### FACES ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[faces]]" faces.rev > aplpack/R/faces.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[plot.faces]]" faces.rev > aplpack/R/plot.faces.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[faces]] help" faces.rev > aplpack/man/faces.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p faces.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### MS stem-and-leaf ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere ms" ms.rev > aplpack/R/stem.leaf.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere Hilfe zu [[stem.leaf]]" ms.rev > aplpack/man/stem.leaf.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p ms.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### SPIN3R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere [[spin3R]]" spin3R.rev > aplpack/R/spin3R.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere Hilfe von [[spin3R]]" spin3R.rev > aplpack/man/spin3R.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p spin3R.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### BOXPLOT2D ?% \rule{0mm}{0mm}\newline\verb? notangle -R"start" sc.rev > aplpack/R/boxplot2D.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"definiere Hilfe von [[boxplot2D]]" sc.rev > aplpack/man/boxplot2D.Rd ?% \rule{0mm}{0mm}\newline\verb? cp -p sc.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### SLIDERFNS ?% \rule{0mm}{0mm}\newline\verb? #cp sliderfns/*.Rd aplpack/man/ ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.hist]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.hist.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.brush.pairs]] and of [[slider.brush.plot.xy]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.brush.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.split.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.split.plot.ts.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.zoom.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.zoom.plot.ts.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.smooth.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.smooth.plot.ts.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.lowess.plot]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.lowess.plot.Rd ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define help of [[slider.bootstrap.lm.plot]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/man/slider.bootstrap.lm.plot.Rd ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? #cat sliderfns/*.R > aplpack/R/sl.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.hist]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.hist.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.density]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.density.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.brush.pairs]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.brush.pairs.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.brush.plot.xy]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.brush.plot.xy.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.split.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.split.plot.ts.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.zoom.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.zoom.plot.ts.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.smooth.plot.ts]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.smooth.plot.ts.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.lowess.plot]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.lowess.plot.R ?% \rule{0mm}{0mm}\newline\verb? notangle -R"define [[slider.bootstrap.lm.plot]]" \ ?% \rule{0mm}{0mm}\newline\verb? sliderfns/sliderfns.rev > aplpack/R/slider.bootstrap.lm.plot.R ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? cp -p sliderfns/sliderfns.rev aplpack/inst/src/ ?% \rule{0mm}{0mm}\newline\verb? cp sliderfns/*.jpg aplpack/inst/doc/ ?% \rule{0mm}{0mm}\newline\verb? cat sliderfns/sliderfns.tex | sed "s/\\//" > aplpack/inst/doc/sliderfns.Snw ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### SLIDER ?% \rule{0mm}{0mm}\newline\verb? cp /home/wiwi/pwolf/R/work/relax/install.dir/relax/man/slider.Rd aplpack/man/ ?% \rule{0mm}{0mm}\newline\verb? cp /home/wiwi/pwolf/R/work/relax/install.dir/relax/R/slider.R aplpack/R/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### NAMESPACE ?% \rule{0mm}{0mm}\newline\verb? echo "exportPattern(\"^slider.[a-z]+\")" > tmp.tmp ?% \rule{0mm}{0mm}\newline\verb? echo "export(bagplot,boxplot2D,compute.bagplot,faces,plot.bagplot," >> tmp.tmp ?% \rule{0mm}{0mm}\newline\verb? echo " plot.faces,spin3R,stem.leaf)" >> tmp.tmp ?% \rule{0mm}{0mm}\newline\verb? mv tmp.tmp aplpack/NAMESPACE ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### DESCRIPTION ?% \rule{0mm}{0mm}\newline\verb? cp DESCRIPTION aplpack/DESCRIPTION ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### CHECK + BUILD ?% \rule{0mm}{0mm}\newline\verb? R CMD check aplpack; R CMD build aplpack ?% \rule{0mm}{0mm}\newline\verb? #rm lib/aplpack/R/aplpack.rdb ?% \rule{0mm}{0mm}\newline\verb? R CMD INSTALL --library=lib aplpack_1.2.2.tar.gz ?% \rule{0mm}{0mm}\newline\verb? cd lib; zip -r aplpack_1.2.2.zip aplpack/* ?% \rule{0mm}{0mm}\newline\verb? mv aplpack_1.2.2.zip .. ?% \rule{0mm}{0mm}\newline\verb? cd .. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? exit 0 ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ### MANUALS generation of pdf manuals: ?% \rule{0mm}{0mm}\newline\verb? ## cp *rev pdfmake/ ?% \rule{0mm}{0mm}\newline\verb? cd pdfmake ; ?% \rule{0mm}{0mm}\newline\verb? revweb sc; latex sc; latex sc; dvipdf sc; ?% \rule{0mm}{0mm}\newline\verb? revweb faces; latex faces; latex faces; dvipdf faces; ?% \rule{0mm}{0mm}\newline\verb? revweb spin3R; latex spin3R; latex spin3R; dvipdf spin3R; ?% \rule{0mm}{0mm}\newline\verb? revweb ms; latex ms; latex ms; dvipdf ms ?% \rule{0mm}{0mm}\newline\verb? cd ../work ?% \rule{0mm}{0mm}\newline\verb? echo "library(relax);weaveR(\"bagplot.rev\")" | R --vanilla ?% \rule{0mm}{0mm}\newline\verb? latex bagplot; latex bagplot; dvipdf bagplot; ?% \rule{0mm}{0mm}\newline\verb? cp bagplot.pdf ../pdfmake/ ?% \rule{0mm}{0mm}\newline\verb? cd ../pdfmake/ ?% \rule{0mm}{0mm}\newline\verb? cp *pdf ../aplpack/inst/pdf ?% \rule{0mm}{0mm}\newline\verb? cd .. ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ## sliderfns manual ?% \rule{0mm}{0mm}\newline\verb? cd sliderfns ?% \rule{0mm}{0mm}\newline\verb? echo "library(relax); weaveR('sliderfns.rev')" |R --vanilla -q ?% \rule{0mm}{0mm}\newline\verb? latex sliderfns; latex sliderfns; dvipdf sliderfns ?% \rule{0mm}{0mm}\newline\verb? cp *.pdf ../pdfmake/ ?% \rule{0mm}{0mm}\newline\verb? cp sliderfns.pdf ../aplpack/inst/pdf/ ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \end{document} \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi ===================================================================== \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAAGE} \rule{0mm}{0mm}\newline\verb? system("notangle -Rdefine-tangleR ../../work/relax/webR/webR.rev > t.R") ?% \rule{0mm}{0mm}\newline\verb? source("t.R") ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? tangleR("sliderfns.rev","f.Rd","define help of [[slider.hist]]", FALSE, ?% \rule{0mm}{0mm}\newline\verb? insert.comment=FALSE,add.extension=FALSE) ?% \rule{0mm}{0mm}\newline\verb? #tangleR("sliderfns.rev","f.R","define [[slider.split.plot.ts]]", FALSE, ?% \rule{0mm}{0mm}\newline\verb? # insert.comment=FALSE) ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \makemarginno $\langle${\it old define {\tt slider.show.density}}\ $65\rangle\equiv$ \label{CodeChunkLabelAAGF} \rule{0mm}{0mm}\newline\verb? slider.show.norm<-function(name,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? lim1<-slider(no=1); lim2<-slider(no=2) ?% \rule{0mm}{0mm}\newline\verb? par1<-slider(no=3); par2<-slider(no=4) ?% \rule{0mm}{0mm}\newline\verb? x<-seq(min(lim1,lim2),max(lim1,lim2),length=200) ?% \rule{0mm}{0mm}\newline\verb? f.x<-dnorm(x,par1,par2) ?% \rule{0mm}{0mm}\newline\verb? main=paste("normal distribution\n", ?% \rule{0mm}{0mm}\newline\verb? "E(X) = ",format(par1,digits=3), ?% \rule{0mm}{0mm}\newline\verb? ", sd(X) =",format(par2,digits=3)) ?% \rule{0mm}{0mm}\newline\verb? plot(x,f.x,type="l",bty="n",main=main) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider(refresh, ?% \rule{0mm}{0mm}\newline\verb? c("x limit (min)","x limit (max)", ?% \rule{0mm}{0mm}\newline\verb? "expectation","standard deviation"), ?% \rule{0mm}{0mm}\newline\verb? c(-100,-100,-50,.001),c(100,100,50,100),c(1,1,.1,.1),c(-5,5,0,1) ?% \rule{0mm}{0mm}\newline\verb? ) ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? cat("use slider to select parameter!\n") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.show.norm() ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi To simplify things we compute a function that sets default values of a {\tt alist}. ??? \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAAGG} \rule{0mm}{0mm}\newline\verb? replace.defaults<-function(new.args,...){ ?% \rule{0mm}{0mm}\newline\verb? defaults<-list(...) ?% \rule{0mm}{0mm}\newline\verb? for(i in seq(new.args)) ?% \rule{0mm}{0mm}\newline\verb? h<-match(names(new.args)[i],names(defaults.args)) ?% \rule{0mm}{0mm}\newline\verb? if(!is.na(h)){ ?% \rule{0mm}{0mm}\newline\verb? cat("found"); defaults[i]<-new.args[h];print(new.args[h])} else ?% \rule{0mm}{0mm}\newline\verb? defaults<-c(defaults,new.args[h]) ?% \rule{0mm}{0mm}\newline\verb? print(defaults) ?% \rule{0mm}{0mm}\newline\verb? return(defaults) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.hist<-function(x,panel=rug,...) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb| |\verb??$\langle${\it check if {\tt x} is a vector} 14$\rangle$% \rule{0mm}{0mm}\newline\verb? args<-list(...) ?% \rule{0mm}{0mm}\newline\verb? args<-args[names(args)!="breaks"] ?% \rule{0mm}{0mm}\newline\verb? ClassNumber<-length(hist(x,plot=FALSE)$breaks) ?% \rule{0mm}{0mm}\newline\verb? # if(!any("main"==names(args)))args<-c(args,list(main=x.name)) ?% \rule{0mm}{0mm}\newline\verb? refresh<-function(...){ ?% \rule{0mm}{0mm}\newline\verb? xrange<-range(x); num<-slider(no=1) ?% \rule{0mm}{0mm}\newline\verb? breaks<-seq(xrange[1],xrange[2],length=num+1) ?% \rule{0mm}{0mm}\newline\verb? do.call("hist",c(alist(x=x,breaks=breaks), ?% \rule{0mm}{0mm}\newline\verb? replace.defaults(args,main="hallo",col="green") ?% \rule{0mm}{0mm}\newline\verb? )) ?% \rule{0mm}{0mm}\newline\verb? # do.call("hist",c(alist(x=x,breaks=breaks),args, ?% \rule{0mm}{0mm}\newline\verb? # list(main="asdhalldddd"))) ?% \rule{0mm}{0mm}\newline\verb? panel(x) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ## slider(refresh,"ClassNumber",1,100,1,ClassNumber); refresh() ?% \rule{0mm}{0mm}\newline\verb? refresh() ?% \rule{0mm}{0mm}\newline\verb? "use slider to select number of classes" ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? slider.hist(co2,main="red") ?% \rule{0mm}{0mm}\newline\verb? identical(alist(x=10,b=20),list(x=10,b=20)) ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \ifodd\value{IsInCodeChunk}\setcounter{IsInCodeChunk}{0}\vspace{-\parskip}\par\hspace*{-\parindent}\textchunkcommands\fi \makemarginno $\langle${\it *}\ $20\rangle+\equiv$ \label{CodeChunkLabelAAGH} \rule{0mm}{0mm}\newline\verb? slider1<- ?% \rule{0mm}{0mm}\newline\verb? function (sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, ?% \rule{0mm}{0mm}\newline\verb? sl.defaults, but.functions, but.names, no, set.no.value, ?% \rule{0mm}{0mm}\newline\verb? obj.name, obj.value, reset.function, title) ?% \rule{0mm}{0mm}\newline\verb? { ?% \rule{0mm}{0mm}\newline\verb? if (!exists("slider.env")) ?% \rule{0mm}{0mm}\newline\verb? slider.env <<- new.env(parent = .GlobalEnv) ?% \rule{0mm}{0mm}\newline\verb? if (!missing(no)) ?% \rule{0mm}{0mm}\newline\verb? return(as.numeric(tclvalue(get(paste("slider", no, sep = ""), ?% \rule{0mm}{0mm}\newline\verb? env = slider.env)))) ?% \rule{0mm}{0mm}\newline\verb? if (!missing(set.no.value)) { ?% \rule{0mm}{0mm}\newline\verb? try(eval(parse(text = paste("tclvalue(slider", set.no.value[1], ?% \rule{0mm}{0mm}\newline\verb? ")<-", set.no.value[2], sep = "")), env = slider.env)) ?% \rule{0mm}{0mm}\newline\verb? return(set.no.value[2]) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (!missing(obj.name)) { ?% \rule{0mm}{0mm}\newline\verb? if (!missing(obj.value)) ?% \rule{0mm}{0mm}\newline\verb? assign(obj.name, obj.value, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? else obj.value <- get(obj.name, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? return(obj.value) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(title)) ?% \rule{0mm}{0mm}\newline\verb? title <- "slider control widget" ?% \rule{0mm}{0mm}\newline\verb? if (missing(sl.names)) ?% \rule{0mm}{0mm}\newline\verb? sl.names <- NULL ?% \rule{0mm}{0mm}\newline\verb? if (missing(sl.functions)) ?% \rule{0mm}{0mm}\newline\verb? sl.functions <- function(...) { ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? require(tcltk) ?% \rule{0mm}{0mm}\newline\verb? nt <- tktoplevel() ?% \rule{0mm}{0mm}\newline\verb? tkwm.title(nt, title) ?% \rule{0mm}{0mm}\newline\verb? tkwm.geometry(nt, "+0+15") ?% \rule{0mm}{0mm}\newline\verb? assign("tktop.slider", nt, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(sl.names)) { ?% \rule{0mm}{0mm}\newline\verb? ## dat <- c(no = i, value = sl.defaults[i], time = round(proc.time()[3] * 5)) ?% \rule{0mm}{0mm}\newline\verb? ## assign(paste("sl.dat.", i, sep = ""), dat, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text = paste("assign('slider", i, "',tclVar(sl.defaults[i]),env=slider.env)", ?% \rule{0mm}{0mm}\newline\verb? sep = ""))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(fr <- tkframe(nt)) ?% \rule{0mm}{0mm}\newline\verb? lab <- tklabel(fr, text = sl.names[i], width = "25") ?% \rule{0mm}{0mm}\newline\verb? sc <- tkscale(fr, from = sl.mins[i], to = sl.maxs[i], ?% \rule{0mm}{0mm}\newline\verb? showvalue = TRUE, resolution = sl.deltas[i], orient = "horiz") ?% \rule{0mm}{0mm}\newline\verb? tkpack(lab, sc, side = "right") ?% \rule{0mm}{0mm}\newline\verb? assign("sc", sc, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? eval(parse(text = paste("tkconfigure(sc,variable=slider", ?% \rule{0mm}{0mm}\newline\verb? i, ")", sep = "")), env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? sl.fun <- if (length(sl.functions) > 1) ?% \rule{0mm}{0mm}\newline\verb? sl.functions[[i]] ?% \rule{0mm}{0mm}\newline\verb? else sl.functions ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(sl.fun)) ?% \rule{0mm}{0mm}\newline\verb? sl.fun <- eval(parse(text = paste("function(...){", ?% \rule{0mm}{0mm}\newline\verb? sl.fun, "}"))) ?% \rule{0mm}{0mm}\newline\verb? # tkconfigure(sc, command = sl.fun) ?% \rule{0mm}{0mm}\newline\verb? tkbind(sc,"",sl.fun) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? assign("slider.values.old", sl.defaults, env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? tkpack(f.but <- tkframe(nt), fill = "x") ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = "Exit", command = function() tkdestroy(nt)), ?% \rule{0mm}{0mm}\newline\verb? side = "right") ?% \rule{0mm}{0mm}\newline\verb? if (!missing(reset.function)) { ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(reset.function)) ?% \rule{0mm}{0mm}\newline\verb? reset.function <- eval(parse(text = paste("function(...){", ?% \rule{0mm}{0mm}\newline\verb? reset.function, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = "Reset", command = function() { ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(sl.names)) eval(parse(text = paste("tclvalue(slider", ?% \rule{0mm}{0mm}\newline\verb? i, ")<-", sl.defaults[i], sep = "")), env = slider.env) ?% \rule{0mm}{0mm}\newline\verb? reset.function() ?% \rule{0mm}{0mm}\newline\verb? }), side = "right") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? if (missing(but.names)) ?% \rule{0mm}{0mm}\newline\verb? but.names <- NULL ?% \rule{0mm}{0mm}\newline\verb? for (i in seq(but.names)) { ?% \rule{0mm}{0mm}\newline\verb? but.fun <- if (length(but.functions) > 1) ?% \rule{0mm}{0mm}\newline\verb? but.functions[[i]] ?% \rule{0mm}{0mm}\newline\verb? else but.functions ?% \rule{0mm}{0mm}\newline\verb? if (!is.function(but.fun)) ?% \rule{0mm}{0mm}\newline\verb? but.fun <- eval(parse(text = c("function(...){", ?% \rule{0mm}{0mm}\newline\verb? but.fun, "}"))) ?% \rule{0mm}{0mm}\newline\verb? tkpack(tkbutton(f.but, text = but.names[i], command = but.fun), ?% \rule{0mm}{0mm}\newline\verb? side = "left") ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? invisible(nt) ?% \rule{0mm}{0mm}\newline\verb? } ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% \rule{0mm}{0mm}\newline\verb? ?% aplpack/inst/doc/spin3R.pdf0000644000176200001440000012031613516603655015275 0ustar liggesusers%PDF-1.4 %쏢 5 0 obj <> stream xMo.kO hf xMIEZeҮd} Bz7$gĵzx"9YײYfbygj.,3fZΔčlƅh63uˍv|:NW0؅)ż%j5n}0|!i`nOU@ʨv9γ]hfh.y1_0`z{05,bԠ W(BAU< #4ΣL5tIG`F`o Ty*ʟ )Xǜf[' wJ`EKVOX:uw9iwI`"l!LG_|X+%@BhTt6b+o=V4>1Q;騶 5vHH'>Xy&N;,,%hɊ8RqƝE[H\*ʃ-HXV :2}c RXBe#"=O\sHͣxˁ+_ \:p@pkOZ] lSC '+SʵZp!;tɞ8Z@j@2ȔsΣU8zkR`PȹK^>^2F5ڏyF}!ZnLb%=iEG8$X#:r} dJA#|(CU{w e{hEMac j:'hb8H@GHgԐ qe@-HPGp6ou,E_+%>#O_G[!ra%3L-:眎a-]S84f%԰Jx! 8v =1e4ECp\o{u;%G1) {UsU؎>J91]t:]#(pZt"h!(띗 ?hi.]<=R;CfP!5 0Q'> %Ԯe5[+)}L>쐭+$p5  |B9M!v+T#(+Fin/P X=rأ|AD*d {DְfTJa/ }E](8iah[7>z H<+TcOb{>Nv"tظ:rdd-2ݟK/N3(N=<>h@:4/+iDn#ǜ(.kT`Ŝdт X U4 5*8uIn|V4eqV<bdE5oRoܫ8zD*i DYk^6wJE2:40~3\hH Y)hI5dV4.hCtIH|Hb"rӞqGd'Λ>}$7p"Z 7tA )yIAMX;D8EDi8GdU =e c9tu΢wfJ.&ZsKRH!Mz5'TU[y1qqѫ)*C |ǰPGgXo -ʌu1mhb !3(#/'FF"/)Ng+yy?=.AYȐjhvKsDS<| 4W=]*M WU4t9]Y ;Cnյ!1#!tD uR C2Ջζʑ (M,܆uaO}}jUݶkZ.%)ZW?HC^nȼ)m7! SM6˷/q}.*g/s!{z7–8[Z-Pz)F<]O1(P_젛bͯ ҠSg$&ۯc.|ozrN]"Y܆qZ)5ıkt,ɞ;H:$&$j{Pbh ;eŗYt_ݤsa?FR&W2E 0ɑ&uFI}}B;+i:>Cdj1blHJȭ쵘Jr~> =N#?1=c(yO3n)*|,X iF,C8ӢGo9"^g7\?.c8}+n{HḺ`t [0˛tK*p\ XL1Ejˠl<~L|= Oe=2"CcV[5R*8rsZ ߏXME,ɥ7Dw*UU%#sDը#+X2DLo `~T)L7S~f/gmiAJqRRVU-#,D !?g[p@iV"}Zvǯo$ޮKdNjx}V-{9F b^[h/ b&*7Q$ۀ4t%1b9k&-Ŷ7Dɝp_>eNr8_XJϪUZ[ "yUmƭErcu" wHψˈ%wvT"6\iS*4i !}K֖5ԣGYؐ;rFwn2-ى\G?L{Z-#XL)yz1qM/^} y%o3!d ]31CAٛNfZEbU4m\[YQl|!6H&/iXF7e;q4JF7DE ӠKxƇ I !~#֓,._a"ma)f7S/[mRm ]Qh#4G[Oww?endstream endobj 6 0 obj 3058 endobj 23 0 obj <> stream x\KsʑK91e*(0\(QLRe=xCwP<i4?t7z~mv/>oϷo;afd?ۊOm+mzm[~zHtZn50{дinL{HdL2͓Lp82q"frLR(5ϽYh&Hzu+1;cȣMsAҺBM.r 3+k; '>E[>QWD;?Ltz4rINBf02> {AJgymckY7GJ1D%Oɻv(r~MsWS)C%[4X:_NTi3/ zdF'$f 'sHJ芋X]cdjβQ˨oc= ţtCƧ`zI|qLK\g-jTA4nR9Cke{3S:0[՘ew[񠴺E ʰBGTحQ7A+{|UZ>771(k7^#Hv](,;12,#07!'@ {dcL}etJDŞeCp>XYhk"wW@lhR r~G6ֺ[|Ѻ=0KD7 rA `V{Ul{mp:tmM?sc{Α [u'Jm7!M׏vm$^MB6M ䷑~/N Y ^"TWH֥lkFEziz=p&wD|m v9{c, y੕h]>m$L~$nwnDډN1YνшNH׭;oMyl"bɻJbZ?^-ۤO[ Q,@q cj+ahªBkxia@C6|"jg &xQv_#dhi'(-]3Dջ,Pyo^PE@%mi K jaU8򥶮.чf ׂ֦]Skc)M]wutyx=}G䜭\*M8;,SO ct14>,@6įX^q}!hcQS,+ó?MMү @ZBuu㽲)r9%gV ,W+Fh2 ) VE:(XE71>K=]l6 Õ%u =z"-f콡 (y|v1õ=f 5ɑ pW,5+1f +YUP[I\x[h χYGpKcBTtX4"A]giDpTnhR%{:|i츊#A#~}`0.9%;;~)-dp  l'>XtmO^i>pnczϰ՞ozx'ɗyȁ#"UȪZmdzB&u#$xՅe0"ls(tS;C[iFB̿[.2yܖ~5c3_.j\21F+1us.i1keE'f _q0fbÝ̐sXr͘"Oʆv/b=;\&dj0) =OTeD*h`k(hIɗ.h]L̾s1~ . Q'iIr 2M{7<ܟfbfZzTһVb@L=>aphQ0yRv),5|3M .9'(D,L2V[n ;X{Gendstream endobj 24 0 obj 3639 endobj 28 0 obj <> stream x\skNƩT}&fGi *jsHTk$=zF?n@hZRZ}6b6zh6_m7?76?ވ3ŦnlboQm:~X<úoM/^uڡUӸrKit#L&金eD1miN:^+sOkxhWrqQ4VrsS8k՚4.DPe7'ZV:۴vPi}B~lv(F9vGVU'UOۣ} /֪BD@An!VᄳisR鎑ڢ+j)d)lm/UlBa02)a!(5UUJZ9Yn(fTYQ)JTaE[UUjэR;ŋHr,`A3 SDcRg2nv۪FI=QoA%J''8S&Yl#NiǸwGQFÊ"#\9MJyGCe–kMFĝ<,2Ò).wXYG 3 Q O6~'E2mIx_R!QJax+¢ZF@xGwGsKK1D[Qt; q*eܧCĹdq2+Z sVIKV&D;N)8A0xˆ34  <̣y?hPV;t8@k >?XEcuX:ȾM7T; h/ t@8嗫Bt蕇J3$ F9Wڊ$0(;.P1f x v]V'I%@DY9;'P*ә`Ф8_Bo@f!_}]Bs) vypuy{K۶ 70:jpCWNbxQw2(3AYxBBH&{f{,ͣT>qn+N5QZW폸ry )|<<soDҚl2LXOw?zp:F)h5)ѾOJR(K)3O*C (gCn@NCF| ;L)UZq@Ax TS]iȌ{vqi\ytJK)W)U$[ಭX K F49;ʳ>iȺH?8 ]m&, 6.vO6 v{s-p|צ]sQ97mb+&t:Y^(7F!PZƽ&R@1f<$̋34T[e9YWȵKg]zǘ+ nf@yz2d DM±asp16s Sp5 4 t̘sB|=A: bl |pwHewfKkf ̭Bv% $hL1ⷙխ+=ƒ|3J3IٳV X?7$7Gnf߰g" fe*йI]jlQF bwV5z˜X bJccV n G<߱s߳k8! Tk{0O2:ݙdp>"ljBtRۗ= B.UD@Zth|nL핽)皐sEtaPN^Nժ ZQVk p, d\-TU䝹QtG~v?:`Gbkǝbjh\> ~=ɩڜhj mFˎQ!$2 xF)nWjH)T{iPy6(ƁOooG!Ϫo U.{Ѐ' V?AeJ|*wy9ۧIO`l]M(v;PNZF`hqGNlzV}"=~'I#_ukc/ _25mkO5ý&._=hH2m2y¿_Zȷj'Lǐ[9*1O矓.~H>Hwqb?z[ٰKb1h8bWAn|V:#D~N?1$I,X:M Szq;Ƞۏkf\ hV<ߺ)8_-jg]r)xQIDM<֓.[=B7w Խ|endstream endobj 29 0 obj 3149 endobj 33 0 obj <> stream xWKO@`Q!9;)JTR Q Ъi+{nV 3cN*~WYkIZ)OPNJiMXayFsJ$zh $eּemt-)nJUn1kR%‹' ʝ6[Q7Ńʖ5$`^1pk+=w. {%icˑ4t Ea& @F~M\uխY0QwCV``>'-q}SB2ل"H#`rwlLHzI ^Ú[4-(@{Ti3wdsluK?H.=\HlXοo838̙V)4uy6K`%"h"rKwGsjU 7"Ȉ%.> /Contents 5 0 R >> endobj 22 0 obj <> /Contents 23 0 R >> endobj 27 0 obj <> /Contents 28 0 R >> endobj 32 0 obj <> /Contents 33 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 22 0 R 27 0 R 32 0 R ] /Count 4 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 20 0 obj <> endobj 21 0 obj <> endobj 25 0 obj <> endobj 26 0 obj <> endobj 30 0 obj <> endobj 31 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 16 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <>stream x]OA  ~@F=4\Q?@ai8oYLfX?\2e2ΛKX:<ԳW_t{[Mm^5:XҐtM#;k%oN*)dEcNtKG^!v]1. @T)Xcxïi Y endstream endobj 14 0 obj <> endobj 45 0 obj <> endobj 12 0 obj <> endobj 46 0 obj <> endobj 10 0 obj <> endobj 47 0 obj <> endobj 8 0 obj <> endobj 18 0 obj <> endobj 48 0 obj <> endobj 17 0 obj <> endobj 37 0 obj <>stream xW p]!,/ĎBzwRL@@I H#`(meY-e[lɖ%aƲm˄̣1n@&Ht:Mo]mv.ssl&ظd\z6߸b&}Xu q!njOf.G'P).%*y9yIKVxyA⋋H\[-L/JLIfK؇řyْy̕HD+_x|Qzabq+I $oefY닋$ '[4\\(*dSE=]Z:q2izfV9om/a[9Vl.ہbINl:[m`o`&%,bBl*b\ש_ cGȴ9gxǍ(/6 00A9(e*Qv3`i8k:ֽҔ} E&3UךshAsЊDIR~_n"h* YНk9P.2[k<ਲ਼X"0x* x3&QNaz&]mp5v߄QO4YY i@Ptmφ<_-@} 7^a8s'WLh TlTbfO]$C(O8\C2M3W68Qt$w.+j3NE\ډ/^{瘹_ND?#'d~pqϑ]'z?պoE;~w/FQئ.ثH%Xm5`*0)JRMlcMR#%^C1wy#.HGUiH0`Upzmրx,6Z` 벲 #t=CXuYi*%)U=/}{JBlzARJ@[MXE2rFEAqwx ^h9ׅ}`0TЈ5RVnYҘKfQFg:P**Dۙk\zԻZIԥ(:\r4-pݗ@l0eA&dزtu10-H?U[%(#`#Ǡ3U :owv>ĠF&Zexђa.g NlW//ik̀Jp{;;>ryIY}vmrpTR)Ȓu%kaPѹ#mmMD O]!A2=.U%{zRΣ%UE$bD9uDS-54ĦOw mp;Ye-/RtfbҽfxWg%@ }GP 0'˯ϟpf>"ntB)r Ҙm;@v:{ٕn f$4æ v!+?> wޅГzFh _4V*l$y€ٟgq$ \I5z֤(1OȄjNZuI kʪ%?t@M&`$n8D=rODͬL@# U,6kEZ$7*z|3Y/g\6pΰ?m=ˬ$]`ÍhY-}(FXnc]c^*i׽@x0r3=.z]x(3v{;If_lDHH|9>卞)y*){[<,L70+ۢY ߠH_VKiPJ(7 A^WXRQ쪸\o$dzOI%/+Dg3SXfw6z WO٤߼Sdz`Ś3ܥl 0 5USYiڃ}G?"l llCW ΑϹSlt.vC#W Edan:G‡W1OLcᘭz5񎟕'+LՊ:ͨv8o.S *Q0BSK{L9!s:F@<λJm4GJE(i溎. zsZȁyL{ۯh?aIH'# Z`[`ǭ[c(u5w{[Y1a]C"i SVM ^ rū5_rؼX-VrjЫ'duizX=n[JRu񈋞Au%8-h9 j <e;֖P:cA)b, vXޏ si P%ydw%RG4]axw z0r,84AHJ'3zu=vO3J+=}+hA>_( ] 4c@F5ȴzD02f-qiD6"fْ{5fUU6WGuRI B[[l={?YFM:05nm]mo8G:> endobj 38 0 obj <>stream xEQOA/+I l71H%1"/$1!b, mݺݲ]?hBE)4&C/^?wU f]4o^y7@?3;5> f ڢ&Z C-uBճH>G'M GRCa;N l DH  Ch.AN9.z}dyO 0ҍaqA.zD8N L'zNDŽqfI?@(Di6$Z ,DE +"`@ $¦/"x:4fՉ>8tBZ+XwAa)Tʶ$U.t_7 SV"bNvoH*t\z#6bn+r2..;Ps aԜ\u1#t[۰[Q;@[W@#YN8jU4m uV5{Nz=5g[=FZS1N2!֌ksY,l"¾Ck> l x JUxJ]$ wCh$UZSej( S<՜ 0N,*;Jꌽ&)miW{1i?صu?C|] endstream endobj 13 0 obj <> endobj 39 0 obj <>stream xXyXSgֿ1{Hx+hV[Z+ZjZZ7A ,!"k[,*V-k[]V.jyg h||<< 9s;aH$,YmՋ"ìS> :q¿FӸe#£SDD)+]'Oqu3g4י3fq]$T w] *0׍{q+s_y%&&f5ag͜k_3ag?,'@h22'nqal ,pB۬;0nWEz#HNY roH!m:躵GXHWpd-ў\'*X*J0'5V҃Z }`j8"5쯗\8_y@n8u%Ub^ya;dVla5cS!<$_""2Nŧp佟Q*(a ;!UO@*owvhd. ËX?V.:},h R~Lգ'yП0~8m#B67{_F/!v2O;FerG=l"@cW,`r2 Pn,+uQU)DYIp 827W~6Ef`[ ]9:кBwD#&rmR}^7X"e=XV [{E6Ngt<:Ť@Qh2475+!he̕vy{ɌbG=auk(i;Jk7mvPw(5B 'L$7V3v&kN-f;gV3Vzp o:pۂzZ).dę\Z0PU}蓓YHs@omڍ+Kώkﺎr > Bn[ L-$ }Y?H8\_%hj$VYmIFFѯqYy`!pB#wũF<};Rå »M,%+f@;ZmRu>ñ_n,N,Һ"du&W=W,{Bkr43e%v>i4 nhrr2Jp"A$Cf)BNaNCVx:f)m]ת  C׶Lq}h3gB؜U3@`iAOnm mQrnF_&#<ׯ0`C#tk놘T^ `jl'9KhSS#mפ?c0Q=kT1v3``OHYx^*i2EU4+d+!2dp\3: >}un-;u`1xr8 |a_4ȧ5q7K~na$hd钔K*^!I%zppDPA#:4I䏣_+ c|7x~ h9`nƎZuKcC>#K.evGj,--^4θhkpɉ> vo_DH^%l' W&2/!GP\]fLfin]A*UzљV@ţdyJ/N'3p9Ʃ8 r|O%2,-NXJ IWdxvpo L"Xȱ߽rH/RA)+b7wlYږ \2J,<xfn`}1EK<;'yAe?ΰ.C웶5Xc퐍!Y܎@[t͖ZpZZ1qgJSroa2R(#ip<@m`D/^iOhWVV΅l:+S )\|iJEQu~meJs@w⛭noz{eɉq!I+ xć?&tښt|[a=M]CsZDrq=퇳eIo^}l΂hHL8s o@q*I8Q[:_pҿXB- `{"/,K&&?]r?7d@>MЖ}Zpz,+[U=A+a5wvhj yPt,cipv@_:]ѲsĦA#:]~o6.W[fP0=YPG9 Lrʤr|&"Li4k:_T5zp['av4W mz(w&%ށvuuэuu5495]fƂX`L?BI,QQ-C UEښ,P0IW/CC Pv@fciʪri_T=<!5ƨn>R@#4AS~^8}K?נPCEQ8ݠD+u<*T9/*8PcpM2Dеh!iHޫuEjHtqt*!m%љqj[IpTp_wAzf0E^_}`9Gp ރ WpG\.4C UO. ` ,m{Vl -PQw` _Y Q'Gl&MT;rʺim W{c^( KH2s1Ȯl-骏NӂN#~x,p7͝y&h++i fӽ%a_pщ89S7ڽ qkR!|g!Fxl'$ }muVhGy{4 ].Zit㤏|Kn_1<WO)p:tڲ 5(~.VҜ)ca1ۿf[w񻚲@%ݗ>uɆO`~qf;cE ^;v9_q~YM}$[I(zb{ˢ[/9µAihMu շ0{[ʒ o64VZU ԀP>癛vy~^J_XȑMA;A]{#`kc`ޚ:J[hSUvqyi0ȌΎ<*uI%$į 8Bn7a$G endstream endobj 11 0 obj <> endobj 40 0 obj <>stream xV Pgq`QDD#xQQ'`TB9PgKE} ǀ "DăĨ15j4gͽڪz}{S?B }WOÍpW>w;\P `ҽedEtd㍰S==gM6eBDz*$P%F-Q&{1/Jϙ<911qR4nL (Ւ8"AX*=B&eRyRK,ALS.M"xwu: L6}9xXE!b,&Ktb91%لH "^ C xAB8Z+Bp_jHUNδsh\Fw\H<`Kֻ~iݸs":QX[44<:h;vOsfɋ7 J Kڡ5*F~w;Wޏxv(@_Oq)JnEP _rh+a ND4[qA&U>f8Zwd$hkhX) {}zf @!iЉO`&VŎ/lRs4T@VxE3P~0;KfÖT$U;-Pǧ1xS|s ͎LSlUb)ׅd''e2z$W~:iZ U&^&4 V!ͥ`Te$ŧfbcrF.O(پGOh;KAF(/ l&ј!Kр4P'; BcV1恡Լʁ{ đ e\Rj}b LVFdUF3`lN^)D14i#OH?1r-x7XxUysWlhxTθu+:h]o[B1=? ct þh@+" X8vRe(PcBqUA磩G#)7ώb%881\D=_,f4zE:Ҵf2Gߙ0.o7?I<xV Ы7GBĢ4zK\~kx?`-%:TAjr!Xfv ,³` V>\ w_W]?ש.|bp h;."Z> Ϯ0b<F=k. SWmTeeV>#mH+/&<DP֜zu xM+Kb7dB]C$TbR[\S`,y :pO>?X1sN$O{ZAtsoKNRhv%RAS\LP8vf[V ñpδсč闓3Nfl5ԂfȬj\gc\zE.7P[5;?$ND*[{AET/-},ՔY8ώz8u?J;ÄCe³!t>WC_Yz/vA`۴r¡n!:C,}J՛A"xB; @ˇ[n!,AlߝSP-JەS_Y= R08R7d?{qm0M1XpahnɸӨ͇c,V 4F3# b:Tz/]{G3ژ4ֶl+n8)L1+[h*y4w1'l8mu\p6)>V^__Vge (WĮ ,h5ڨ6\H..!9N* 6QV'UVZ~Ktb}Bk[xWnU-Q&`\WӢ?k{p~S8C|IH\K^5_ɆvFYfj^R旄$E9v~d nD&N!bP,Yr1L +5t^ j{!kO \F 8m#|<:^ݞڱ;}5oVPcCGG|ߔI-yG ZS.B~m&ܸp ^ps' F] LokNim~g<~yI@ϪY M="ML>b̽Ou̸y5dYme{J3{3j@96I Kr}s<>t 0dh!5=,2M!#t*>u} H Ě*Q/n FB4=Q.Ԕ&`R%%,&99_ڇaqrD/>m2 iv[kTue)6@$"0r{kR='07 ~+]dV-";0fY\],&ׁ/#N endstream endobj 9 0 obj <> endobj 41 0 obj <>stream x}TmLSg+ N0m醢 Ό b(t J(VZ?- RhQ]Q&vd-lssmŽf1'yo99yIBA$) 8-<ac "=G>yСH5m~dzpmIٓW)CCC(/[KS4*e"ZOQ)O"NҨ&>㝠@eZVVgբ%l>ERtb2M-pM0:E6YK''];TDqfb  HbMLeR0q ' NI&A(W/(%%›h?Zkka IXݥzT4`$ڪ[pNrE2䩘}r;d$*nZSDTE 0B2v tf:6'SzN Y""S7 A]8^V(~:0Oa]PQX~b1l֒?р_x䐍۪ w8Agݭ;NqTpFٽtR蕱wJƊ-Byk}y 1DHpkqiRL[AMop5V zw)ژaW\&fEtb䮋W;ؾ[U,ijI226(~',{5u<<I]ǀ˷pxb2\0 Ǝ|7bTҾc4w}mCB_ "Ù ?G%Ah6pC۔5#DkrAmT3t,q=k» ͿK>ꗠ ai0&p{ - MpbҳrAF FǼUjtXB1X1w0XYb/2t&Um)7a:;haqf= {?]gf1\>8kxq01 sVY ]I+Ksѓ'Pt,yAiNN*x/7%5i}9}|U> _n endstream endobj 19 0 obj <> endobj 42 0 obj <>stream xy\S "^{/u׽ֽZT.+@39a#3"VXVVmCIoܛ[ Mjs 7 OE2nUvm뇏,s\†pF&- }v1%p25/wІɳy7ζ[lwA撿 ҨTY/^;z=>؏wqr?`ɀaCpEnӣ烧 >?dOG43N6N j.9g蚡f9:άcjN6mw^Vpr`x5\{BB@ PzGdU|rryIV e+~Ɋv\ Jٗb3"PhIkȫhIfpxfn!¯=2~1J)QapmxyNp ]kwxv 7WʏԭAQ"USA _؜v:]Wƺ adzlݽn&N6 FXes08Wdl'C3t`E/qWoܼjdKLS\^]TRRU*PŊjw>ŀxޡhZ o8Rw<bbޟ ^;.1͈NTL!N1k]H݃󠖾xΜbՊ~N2hme# OPOm VNUvwaPSxȿAkd1[ީ$7 LXwH8\;\gQV\c^c?$F#F+!7l;wɪ돟\7~sBBH46x̸3l9ǒreQf% 0xyq7@OLJA~Sp[Lg/Rnii'ʇCǠ3h"*@Jjtq|Zƍ~2!Ozϳ^"p gk7gEw}8 @+":="; ;6on`!0D~siq$CQnlۢ FEa$Rs}~`O[ʹ3-JY~ |oݾwQьuCP *f8VFZET`=}տ?i} sD9qJ[@Z sKA{Zăwj6"&p$:Ne3OKop|ni=>Da ex Pƶ[vj2:x\rZHLKڅT &vB(׃zgC #PHSQNi,f+3 fQYNEyqgtHGq6tyIA@Ֆ-+!+#AQ;Gڼf r5]zAY " 2a˫^2¨fОsǒ2h(W~ GgoU><E4$8CdQ[C9aY®k{O»!F4n.eVb;PȮϺe{7=h]~'8p?ԙMJ@ ]#ljhXZ ۀ?B[lo Qa2N8l+;{W[5L9&j,0oy0yݓ,K rR)eJ}RdXnZ7pzT@T7_\ 4Y¢e^w>?3nq#:ȣkC@rLJ$J/e8Y p3d5~eJ@UuF4|q4t_]4i6XƇG8;:W# XN6ZΫlBuorA+-36W\蓕XT AQnnQFw0 ' AqJU(én"aYz&h@ʠd@bbC]a]EQuv/e ן,:PL]kT.x=}SwtRZ]sM0_c5u ].1gOnt|+ݬ<}0t>yF>rS!^2IąjH3ЯD] 2\v{{VUuKpw+1FZ_!40۬~/@:x\e,1MF~I ŧb4[]QFuI!f Ww%gRv7*Jj/}b>\c&y@c6VZʘ. <,!*!uӧK#=\TSu`Sؾ&>r+'`L).?w PwAj]XsxM^'Μ?z7otgV@=u^Y] *3 5aI{(6lߪԤgKY!"cC_(/nS^W5N}ZxO 2Ăt9HqEEjHE{)].>r4QV[v`cLmE8m>6Q \ VY#͎jKtxh.F/U &m[=Oe-ZG'uqt_>=2Sw!Q xU ,P\P+8؈%lljOt(8~2UV0qub";@+vn(m1#z=tʧ, --/e6y’>WM6[ I\7?tkf.ƫ&TUvyVh6Ey̡`ClZ:+d,(/z4N{O f2"uoM8D'2M < /?.F`㜩~&.Jkdbg t;KI$>~a>A|ty:tCՊQE8rU:>ej` RN -ݒӰ(RH6m&KP`ԣh6h_Y\eNTf=8Xm>Ȓ֫;Fo*[xok ^!VG}0z]~%QS?tf{̩;Sg^ɃM;LԛM)'kіe].n.Jir5MZexɱ#`uj:T@^3գ=MxhZU/2@Z |(֎-EѫHjΝ _`cޱC@ `ED$eoϩ\(#kCHO}$wu($vU%+$ Wl@,;ηxZjț,JA8agWsfEY$ӨrD ^ iao8p;Ձ>=pޭ봥c7Hi$Cɋ?_7jZMDGôv8eoҙ{ӳp^ʵ$i\ ZJINҒʜRLwӷ\ܲeϺ%Kם:|63s9'9z,SǢM]m[}/^Ɠ/ܱ=RZ_XX) 36=qS:.)eT FV*tR&&͍ߛG>E 5J *.v6jmڠ#>ة4X3mkٰ6/Kξx. -<٨_$&_RK#bjщe_niǕ&UZ3 P]]?cewFFl霘"q,6bf=.ל/8qڄ t~: \s`hjڃ *VH5OO2.Ҍ49}lLON4{#t, Hg22Yl61%!sHUU6BlS@ab~B8*4J@HR|7 ?I氉J24yEDxs.hP)+@Nڂ! P-|n.<D(9>i sf靍ѩ`i|/["%J$X8,lA,6UTb0ϴ(nzz|CpsD/ ٴWML:XҰ"G‹ qѱ 06bЀe՚/@N} @qIgqYII+K 1VuX $N T]@թPU3f$." 'oVw!_A ңL|3Tp!KrWXIdAf9#H48D#qO&Fdkƒ пx|8:eo6Py,13!#(+!78銵{ӲYEA-7ژWLlʠcRd)@bVƗgag>u}9(pϽy&vdn\|toă@}uL( ҰW)<11DSI{+359k 8Um*3rNTS?SXL$MfзLQ$+֕fwM)# ?^pAc/־DC }B\ P.`.$㯷o]EV X3Ҡ -=( PٺJL ċͪJM_ oQ,ITeՐB x9,>tPNQhx8(8KZWTY2J;irB>㥪u -*M).k>x7U`2TJvk!at7Z$a`vm:# 219(("> 4AJ?9rr+ ڏSWhk R 9L u3Vl].PՂcu۪d*ۘTl7B]ŁGUA*V EUf+f5 0JTZBWI`#4&];%юO:`q8>|H=R~~ŶU #_pkPn~9@~%Y)+ȨRIuN[{vʵg3JYhJӽ5ՠ6#7PYUYs Yt0w`L/M7bI/u=vs) cdd5G yw~I1?HjJVoȨ+HgJ`?q yQȚڣ]h-˃I$z0me F endstream endobj 49 0 obj <>stream 2014-09-26T17:54:12+02:00 2014-09-26T17:54:12+02:00 dvips(k) 5.98 Copyright 2009 Radical Eye Software spin3R.dvi endstream endobj 2 0 obj <>endobj xref 0 50 0000000000 65535 f 0000011875 00000 n 0000039808 00000 n 0000011795 00000 n 0000011149 00000 n 0000000015 00000 n 0000003143 00000 n 0000011940 00000 n 0000014710 00000 n 0000029034 00000 n 0000014213 00000 n 0000025750 00000 n 0000013646 00000 n 0000020173 00000 n 0000013114 00000 n 0000019123 00000 n 0000012381 00000 n 0000015542 00000 n 0000014963 00000 n 0000030756 00000 n 0000011981 00000 n 0000012011 00000 n 0000011309 00000 n 0000003163 00000 n 0000006874 00000 n 0000012096 00000 n 0000012126 00000 n 0000011471 00000 n 0000006895 00000 n 0000010116 00000 n 0000012191 00000 n 0000012221 00000 n 0000011633 00000 n 0000010137 00000 n 0000011129 00000 n 0000012286 00000 n 0000012316 00000 n 0000015823 00000 n 0000019398 00000 n 0000020552 00000 n 0000026058 00000 n 0000029279 00000 n 0000031367 00000 n 0000012786 00000 n 0000012870 00000 n 0000013491 00000 n 0000014116 00000 n 0000014626 00000 n 0000015450 00000 n 0000038354 00000 n trailer << /Size 50 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 40012 %%EOF aplpack/inst/doc/bagplot.pdf0000644000176200001440000515347713516603655015572 0ustar liggesusers%PDF-1.4 %쏢 5 0 obj <> stream x]ۓm߿L:c/}˭i3鴱4C҇V,'Z˱__p#ծ#'z<-p@ ;K<>y~pw7eP151iwߟ/:<6{3cKUbx -"T!v/QaI0c0%iݵqPwWȑF:)pPO|ӛ_unSC?5%XrY~M>$y/ş86AT{j"gşwӯA77ήIKpվr;T#2M@:gӂ,+t*'& }w?(r['hzF-]jJ\"?ANeBE$fvN1r'.3Al5GV>.}ig)1Gv3ghGc\"r08I-`-:YpQs?$u*CPfqW?'dY\;ͪF¬`[KRVҚ.#1u3]f u\jRRUIs>.稔d1蟬o fa 6ojI-,㜖.MܑaןB?~vs MuKR#w)%1 `¼铛~#x#g?COnRZq᷌߼yR)W(r}F$Pr1ۥJ1;U̾Q@U裖S)@nToyioS^Lvy#Z<56̂~&; Hοɳ߬cO42Qzǟz:k7BBQ2xY1_֩$NJh^'E=s!gD D&;*uI1! 0B:h=Lѿr:NnWo%&FQsPl{wK8/Ic9 F8Y:yM|a: Ę<\mB U~NrTtEA"':.R/p PC`0)¥TxNmU&Ava7ğD\#h&0H6 i7>tib߸JGЌקEh0&BƀO3RvZ@ b"78`% CƠlU&Q֕jFm2u"-D~XvK0yqt ¬bE STV` Pp1U(a" ps]RhZ_ k+cFC񈻇o4b,v 88l1꟝o=Ka&q8! vJcLpw[.Ѥr̍"Q7n1ɌInulRnת.S5cZ*C`"Na1ctK(088,u.M.ʸ!%Q}\nodG4gXm09]B#nud|%fa=`% $34p8fu&Qᨇk KZKx#Ļ CL`58F1Ca% sȳBC7&,=-ծT3H)Mx¼Fpn7 o;FsPuw)BxMP`8-hf ҅#W3 KvR}ȁq- d]~11p)r 2QV(`2h ZծU3k 1ݎ:19Fԁ{NX]rleγ~M̍\PLoP~qVV7wъvabE8Ԏޥ4D${&d/OtUP{(U(09mNX6 6(8J*pByd@+G ap8d{~ ~QP%4.s (x4 QBe0YtƺFDm툎\i.!RuRkuo/0A|c@QSQD0tֺF&;w @sY::9R $ma6Q`%*d,@^,d88up \E !0JFaRnWX0}.Db0 >Di`ڇp"e:>Ia.r8!{,ת7 HkQ}yxj~$$lc@.6j(EQC9cˆw\ pQoWV :%ENCuȇ a-PEעblU8آV:&-ꨈsPBWQ1lF66YiSQdz9߉5 k2XyXk2cI,s6PR__6 l>Br{123"p>`ԁ졝Q¤0 [9VݾkOݞY tCԄm.h&a'9 08 C01#(# e`IJmr",J'9 6p$惗yriMfI|%xm"W10h $":qY0|%-*tA4>zhN!TL^ӯm f䫑m01QX$4CK=U|lvQԤ dq+56r;N?yMaL<1W9Iv|aBlIߚ?EN$ā4׭y,&GtŶ NLJEe.Â8DLu*l4 *J$sBs4d9Sh<,qFr;_|gߙu2{H*+Y$s c,bJKP SCp%O)h +p Sxpqȼ5%L 0)Q>8W+2&wZ2t0zubSy:ITIEaN9.+``n UDG$ z WAuNo{pe; JJ1̫qt8Bg"ƫTm.3 :.T06Q6OLdP QUiiTzO8B@AnHERvv4b.1!Bt-%^bΚg0&O2g0޼(ߜ6 &hq$ce0Fr+umؚy.ڼҼyv q@wB'^\'^O;]0Q8v]!ʏt(<4u0264O3HV[,sLo̗}Yy o8D0 XTBŠ?O7*VL6 Mr[Y;68f< !#DRJFe̪L#0Q Xש_&\Ɋ2H#@!IJƯqhɼ88l3<9v/LĢ0{V4r x|G`Yt("@ecP5{rވa0!¥VG-ujT2i)IΑzh_IӺmʩ0/d9/$%n"Zy vQkgMl|moԦ:PY,s1Ppm:FwZnZ Qk"&? )Ŀm|ْi e8DNfH[­Þp0.4[\jepBΠ]f|rP{狋@.r࢐[ c s3^Bv)¤4G=giօ3O ѳaY=(,E88lYgQU:4Ka&q8qLϹ6߰y$1GCRhC߹'e(p k+#P/`KXˍF"+ ծP-9|V 34/!n &"X`}xd5ދX9F## WaˠV^b_SRa#.$UmМ7#:U:&~.Ԝ*kRbܠܰu&QᨇtkՍ.\c5v{Ch ՂfQrboVK?VS>`gd=7ri+@oG:&P3{ظ )$A l!S~O~2Ul&?e/JmߓG([xmo]fWIv[@wy::b[M)C&S͜KG܈WMcCҔ2+|p1oB5%+hAn@.4DD`Wҧَoa 3]D`{CJk}o3I@r"۫loȄH՘/Wg{4A(!`V*d]X%{j0v2Oig=ev?ψr1`;ޖJv6j9|$)WkT $F^7gT{a"?}8M%L P!A Y*FJ(؇mRo$WXYΈEAgzAt\=GM@at"Sᨄ4U* 7 ["MQȑT>"?Jn7MBm򺻐,6h*ALbI&-9#R;n~@\)oyfàC xA!Ua%^;ͪoD=R;_]h3BWLϳ?ܪߪIXcZ /_C`or4ʚh%/T7 isgfƌeMϬ&liȓD q.|`I9G=+C.GCvag[( L-uyt}T؉f~M&=n7)\ 3nSߧ!œ+0Z>=SRG{c!?t]YYZ|ðb:.9=Ucn|ʁ>V>G$7hKıw7ÆR'{:J*K(HGp/>~e%U_%=0|,/rxp}Q[}4,J! 5%u?dU4}T>> stream x]Ior-לQKnv,D.qR'-zIQ|t<_U~8$=$=և'xЀC3Y9<~qzCK57hk/dVP7O`2Έ4h7p? IpG[&$5|^vƩ8L9yKBSq5| +7V1 C՚0 YuA}#h9E|'z݈x .fVO}u#J[̓&$?l|dۅ5ߡ0c'hY #DhsX[B['q{ئMl)S,:-7,]ׄW=sƔ0P;$hh#Fu&#re3z=LyQ`xx &]s@`sX{Vp|V9Y/'y3я2ѝVhm-c`&)y6f ' k^%tK6|3Ij ETKQT#X1zs`wnnF}( NGP1:EQl!L NәfLS(Ʌp45 j&c4uჿ dv/mtauv;OnyB~^or6_ 5霸Q:lQ8|vn@jbSl,6[ Vh5F%@RcHm7Wb1l,tD]ߦ^AWjRE(q,H(0$%PHFNQ"CgRgy 0Rs;ZC D$høә)[ηX+)*S5Y쐝4˳{X{%t"=J6(pty&_m7Ƽ'DTAA"lf.`jt:XfJXMA2 >!DP=h9q!ĩz5|}TbE*K*"Zy u]tB -tAC}C:={ϐz4z]Ƽ0[-#<ʓb߈r$tV>iD?B#'It$lY EJ7g3LuD:j}~R¨ޙ]Y"΂CgVe` /Y7,N$*n/ΙέU"AݷH@ޭ pGUm#1!nIZaj=AySW!~o/>pWZR,kphk67UD8> R2-4,P}Ryt8fF"I sTG ŨCyȈIk>|D3ōM?Lˣ~5]{9i"kbåPT"fFzjojatX-7BD@.h70ݒd3xFZ*7E#-&P٧" Igt=i pYϔF Lhi0rAQ l UJkk-iEъi΢xxavFLDaf 4*/xXN'ۣ 6W$MU$%:/NRMOFں L{4XK+\%!ijxd=\'>WWKWyS9?:ys30h6ilx62ڭ#Pϫ̃uB ϴynHfL̏DnOP^ $ 9;O3$Ծ@ CYqbqۍI 0ۉoq>n̸>4'.W"T`uąU+?zjJ cU[ѵ=jK!w4K0+CW+5RB T(N,YKqlдzc-& a.;WRBYJ6:[éaw9V9G" eͤl()=_TM:Ae0Kod$yQ4o@ IgKy<éu+~ס1ALF!3TYͳ$c<> 1^7A4ƝZ`sAc[2Yb' klV8Z:{YWhtC )p15L䴡0={K G[3cSn bY0r+&d(^71+|dLĄ&;RGf"rUUä&T<(~4tlX ձV{[gR8L-MR+x Ul: ᩪPw8 =E#37ߌ{ 6e.`:G'-T,ntxƭwX>ԒT'+I!A1'&aLo@" ,叵hۚBw`RJ*@VZ[0.55mpWz'Zkg{A.9XԹa7 ccnLnEhXCȆv.@%>ga M=P<[Gt[Gac4C !uYaD*3|qT=D9rO~OF弚%ֹ)mW\ѾY.W_R64摫}BJ)^Zv` 3Lk+s7֖brG"kʢf].D?hBЬT6~%:pjzrWNaA:13n- N[ Y]X\5y/|$;M-6@hKvVӏH X" HFϐrE <*a3=sW]EP2Ϭ 9?!$Zʯ J{Qѿ!}sۓyi=]O ؏jw @ϟ& RݢXjrgP;._endstream endobj 17 0 obj 4455 endobj 26 0 obj <> stream x}YIX\u}a<q0iy~PߖZ2R$hν"8ЃNͭNx_7᛻ǃxoO C,\Z:<}qǜ0átj>9OsO~>BMtO=uֿ|?E|'G$`\[ ?c@UM1H=*M)x UB,]+`eY8F=ZV \F-誡65LV͇B}s)X*,KA 'HZgl8cC(991Pkެss[2؍}QdžZO 7쓺$2ط7f'{k0 Oesz5x#1 cÕ;Nnv 9?0_*G#fP+4{\ezgeu2B IK0glWɹ˦l<ޔZXO&Bꆜg}{cum۰y|S5 G,Ř&2lNS+x̤qw?sy]UAG snp-ϡBОmzQpo W ɀi^L 5t>|ݫlq-z#gSqz[YY Żٙ᝜}^;~'q{htuo<$Š`lշR\6smoqc8od1Na0)i9! aЀDژ=w?|FĎXzvqEK,fL yY `9(N<$pIJl8>ؚ6u !Ȯz.3^i@)" VCu7!wO*B5wA z8^; |#3w|uǯcC"F>.lޮtᵈި%Wҗ|{7r!o \)ktyH~n_zf|t0(\;q(y˪{`/9.?żt} ro 9/x"瑩}뎯.J\-!?_BEqko3LI}hްե(O.hn,7NEE3״]>!t]?..ooEM+׷ .gm*vSyo8ˀOnhƔF:{.K>p0\ӡӧ5v7ÕOÇ1J??iՙnFᷤE 6jƕ5~w%(F}_t] ɳ[ejNWZ=@k;u`e9SZoT좘V+Apg/lyuk.q>Ai.v}EoM]]XC3jo"U`(?ܘC|~% q ^1T5Osp'<,7[gi|ސu> ɋ.={0lBP~QBAn)>aCbMiz&qq ~m Vs1'r^.//"k(o[oXuwM0tHRmw>¼6L 30FݿܕL!ww]qn>Yw)vzZ@cᄌBd6)3Q/'R"ʩ#N1h`H  N <}N`ꨜBYr-܎.(fs$3 *T04U QXOy*lT#` *FmT٨VGŚ}UG;Mly蘽H>`1x_V;ճ5F/R#40 h7/?òSH[Mt{ Px֒4>VACH֢a>}l@VD߱vȹl+g+sLbJamBچa2z9\5*̘i3>R Sy >>"T22%_8x#̩&7PO``EC%Evj | :hV0NT(*؆E`VL*fTy &! " N97$L:C0 NKB4 #ZjJAe }uGLpa#gEfP ==: 0L"5Q):&l"`/tN|YFSD;p[N00"\A)A0.;dPL&0iBM\*hKaL06H*~)k GQ""a7GHQ$:8+-rp"_68*/ QI`ؗ0bKX_6QZ;[9ćT=юa@~њ0 `=NLf)pYq(& HA8DȡV(-rp X0}4<'BDR|i0u"W=#rf>V 02@ T{X"l}s1 ׬K0ť6spԧ &!`t &) #ZabJAeks͍J˰qne\xմ( V΍@ 6DjbPE^*[rĩub SSp6 .̧` E` i d0<4O^-?½ U¤ X &ESn*Xy֭v0\"ZNh[fgтG5:; r7i/91y 0L""1Bf gV \S0cpЂdL jҌ&0FP&0*`A JaP+BT {9&lh:  A cv"W awĨkgEݬ~* m GilD ܳà+Ǣ5_@V@(B.5>]Im2B9CWzSxu -"y6|dƍ[48 ٝpy. Eȡ&(\ xL%Sw~thD܈Y<DǙsB. "W 17L3Ԫ(`U/@$xZ| 7л;>% 9 '5sIr( Ј; #ZjJe5:sԐ9oW 1R`xa 4 tsIPub8$$:EȡV-rP_ ppfBVMaJrܞX=qEĪ\ CV Sa=fR*a+5.L6{jzCo~=yHn$=9cmFV!a2͇5L93:`}iNI^a, Pd0 IAtC0 [$H>9ÈD(TCΑQ"f` V?b"@jXnDmP Qࡆh8{j|%:5èu3bPLy6 Yw'Pa; ĚşR]@L8ahtg$ <0aX^ ĚS;4 3Q$*\:P?{] Az&`% hI~f*#.@mT{)dlx h0u: Eai3\5Ap|{V|6[ؔvLDuQ( #;*AwU#{)1fB[`k1(heVXW m(Z"pDQ}7LMs6+O:”ۅC("0 I %N0rFvb)0'+/Xtp*ŦJLNA1Yd"ZuL: Xvrpj:g2|,*v 0xL1D0AdLMej"`/ZLre¸ݵ bud0f>@0)F,sI2"70Xmr*F5B)f M;?sf]2Xv&v~, B̡ ӯ%Oǖ=?[V(ZrpW|W҆0GZ*'\)dNPɭ>-&@V˦fR,`/Ky5- k=H*K! BsfLNzd9'2 r*l0Q쥐Z.D-:\Md)uK^.}dQD [pILa.fR"a/ǶBS:tkES>te%ތYm`1 't0${pK1F! n?ڵDHG괇:Z /[HT&`늊ў P+U^sqaL8hSzFLSDP o4x6 to4+BT {9&uc F3 пpX(pI1&v>IP0;`9PU^ 鑼!ZmaKNۤ یAh J0X[0R&AtXJVX4 6P%4d3&eul]Pv7gAٽ)h-.Bc7uJn,IK)1wPfLUFJ8v:HuZ պf`=m܏+'*Kڷk%S*K2HNaPǠ;g4)E,/eWR ~9kʋ][~+ʞ |qq8y qJ ",Efs3L@uxb^Z8ފ2y*r~0&wjp4U2Ᾰsiapvm^m8ɵ$Z]M:;B iDS=-Lƞ&'x+%/1qNΥ0.(1PJ 0Pvu&5aT0L bP")&6ǫ1Šwf(Y0*(`5bWb2:Z SMtg3w):VZɯrl#.õ-J zfP ,@Ʌ^- meR*a/j,Cpe;jcLKrUė-\C$(0XKR͵0 1"pR>8ɨY6:xSfO̡m2J0Xv !g&@6LmJFXjv8ҩ_|xWA(iI| =BNϑc{iNQėBћG1.{jY穘O($LS,RMI,kҥ B3C8ALH Phe̜z0Az`X t `bpȕ>{ 6if2sAn:w}0*>I/P@r,zeGvm  PpD}d &NtYLʾAJ(A0BSQ/%LtJAK4$TzCTj]MTN$`F73oxUmgMn{'A0TġKbP"|y6,!Q NX˥ ,9@);օC$(,)C k?,vA>eeR*@n1aJ(~0 csޞGP y0,̛MۃKjSj> da&[0]F c f\Xl*-{!/j3]N)X{=<D"@c؂zPgb` lBOG[m¹u`bðtCsņqN +SiЉc[ #lQ*a/I#? FCH|Ŷ %n_4'`{A1p$!0rF!F3?ac' U6XAڕ"Ja!tؾ*& VyatO;N q]孆~ݎ8Du;J&!ѐ{!IϲB)JpVd0=Ѹb .):Z 2rp2H 2 6t e 2(nC. :lT 6hnHZ>ܫ2>C$,v(([X!fH8+T٢^i#&5Ӗa9!>'AkIP p6`9 0E^}ؖ`"}"7& PaZ2R`Lv^0Ml ^x~:~3+B4 {9$7P2 399ҸΉV1Ôx:+paz"2Rcc Ppe&HO~GazBP Z$쥐N R^=o,$?N\x:(g WbЅCn$ VhAy2BMd `o$-_1 )% LQ8U,W 4$S unK^,YjJ!ҧ+frzە2,7_G̨ q 0x ɒT@[6(ڨRHwϫ=";vxϓ< d]bE }?wf`f?+I/{8s.y[&@A*@XCP Z$FWDzڽ5\#1 B&AaWz&@BASajJJ!k̲II6!IZa`t~UMfMbN[^C5(6̃!&wa9~ Q&Au0|$dJ\:~[V(-rȽqB9Yxݥ eG`raW_i̘vd҄ɮ40bR"`/6\bNma^&!IJ%T4.o=kNQ0 [%kӥe H* Ǻ,rIȅ]awUC09,U =PU^ޡ.k("S׵Xܖ <^Cu^5mvl bR*`+l*نvj0+Ps5'f|y?,­𺩡~D-~P/ 7J!x/z.ݠ}U6R oNbp5 Kj6(,[ŬD+U}M̗6NʂaRA($(,o)(kcvNwf*yթ3oR0>;EI:$B f DuzEB@*P jrEtL]8Q Ij0٠ P DIPx]8Q b"zIO],+BT {9b wt|8R~)-?|2RtLb]4P!0権Bf gWeț,r[C`wbrzb 4mA|E`wbjJs{I09 5zbtܫq ܆ W}/mAWŶ g7.)R㗙\l(Z("pu-ha_ѤweOð!D 0)F1 AR ӽ 6BFpV1qq{0|A!л` bva9Q,`hbJ" kKtf.F(Jy }>^t_^+;]JTE3s-^1|$Yҡ #UVo D*v:NGh.\^n +M^v?Zv\Z;=q+.)F'dvqq&ޜW 1O7Ez>rY{<_˓}:@"Bwݚ\N9^//BMT 6:zPDE-q`Qj.J6x}?@1`45+BT {9 mZmɾm;VF!-\_0 ߞ1oT2B)jg,< ->]O~xY_ o %x5ޚ Ba&BV>! p'ڐ^-w># O(B6MlH ۲6#BT [)xM>_7!fjWۘ-QIPxelSa3#BT [)`mopNXo6_ـ(,}ٻ><;|WcG?}ë8g_f[7go\?QcK xb?p {|Bז|g<8=L0![z^9gz~ n7K͜o8ȱ[1M?VJǷ+2Qo_)1==V{h ^FhXfsh%ryMTd)PiXc/jߎL^fQ7b(ǯMsT:XmV#K&hlxл6[j%O)<e؋#e=G„Uh) mt E3Q5v|X[GЬeS7~OZHg:TèkW}i6Tr9sR 0kVoK$cd\txo)7,'Vm^=gw}bHf ){Vt11^<~~R5lDX5hĮvfo?$0텣C{̻ 6gV߱=k_X?Vݸv=W>(:Xyͅe=}tĿwet_ܬqߍF*&_o}9W_Vljf l3^sa=Qv{_FH[rb uz:.@:)^L@?>sJZ7p7~Ӕ.Hض~ri=@9a:w.+}.t* >zi!t !'FAη$7'v#xm&lA)e;ԏG6>s7|f|7y<1#rؘ"}wK1_%ͱ>B8[7K')H锳ŀ]OFܑԑ/?q"I̱~si%ὕo/aW ^\+<]/8*D- >!FzsC>._P-/x5% #W1vϯL{}-+ķJ\~^nnIJ5/zMDpf^]/҇۵DԤ{|tOvk،>^xpxvAWg&:٥=TqW9'pYU7!tixH03G|Iݥ8/.<*tSj'CL/fӺ-x8ݹ! endstream endobj 27 0 obj 12501 endobj 35 0 obj <> stream x[.q~1O kUi"6@xig%2+֊Ȭsh{d@8;kUfV^"#u{ ˟xo__K_?|7RzMq^ 9빽<~!=ϭͷi۶G?|7n|c?>os=GJ~%>[˥}x>XgSG9I[َ rc#<|/|2c{+(=:>F}ެmkV}wCRS/)5N<:{s; χ{eyTܰ^`>MWMSڷ#ەwƜ#br \ğcߨ(;mhjZ;Gʋ2<ڰx.$~SlXK_)[i|/fߠ3f.GO^_ 9<)lᇟ}|uAxk[vنl=sa췣5=v><: :.؍z07,HpCc5Ue ouOzaz$>~o |;Hf/\c:’"9Gk?m@G#2g覻HǽX?./ܫoފ$ \.]8< aw ϳsks 9f;cy%Ǿci=V~X] M vc0.$_-/= '=_!Xt:\p_ÜǗubCDV떧_n2K"GG?{f[ XF|~꣎z>oe_jn=vl k9Yk4.ןr!c߂8'>>/]p*6מog#9'Z:}B#Nn4Yvf4W~ca-/UN$炮c,{|9kן?Y+?G]&z/_sd}?@$[l4􏗿_~ٍ}fg}iA?.[C>ڠۗڿ7#Ky6mӓbk .nyOhV[}>v>b>蘭 >M\ng?H~7_Ϳ0aOc>bn?岵4џSPh:y_oؿ o#\7?H2~?+]e>g$]ﲑ+s|}ao1ϛw}ς ?.-4va~̯-.l}Esu4frL+n.=4?ku Njm>eO?~g|w5}ak݆>(@?j>bZhhQY[4v/E~dpfGsL9ê=zxIl7/=tpsa0N xt #Afs"Dl `NfG6IQEB89qH°:08܊.^=Bɱ $+ՀYq vwBn| &CĎAnSp]쮾;̩1FĹ:14'b4p W fLI|_Thd~~u^=ol],sLFyhp33[Cm%r"?M 0d* a6\WvSϰ|uSڍTLdʆcV|2Ɛ|nbŘ״TImLI؊TJaA#D6J'^즞Y?똭 </޴TdĬS51+EƆÔ0l>0*[^Ta$\P?goXm61Ii|l_|bż&ۗp3CO΍wΝ\Ta)␄It[n\7vKdž xŶ71bZ TWtdh%iKA pƶYZJ h*dp}잞wF.̎Fg9Ͷۘv3h;0f6VsK;&cw8@ "L x[ǘ'lk7Z`>Ͷ^ ӂޣr8EfMHt#0JSB:ípR~+o6o2`~y9K m{CSԡ:1UI |V- W?4o8kwyGspIK~."x42LPȹHqf"Lj8a0'%gw _1[jǙmXXCa8*=`#o9h;%@ISe.j;[w[+>+f| Q-YgleXfnyE `9 e`  o3S<nKmKe[sȎٚ`U%LLLI@ܢ@ =L&d)`oWu[[_168klqGO cυ@A|XCeO WydyO0g@b)O&f1v;Z=`VgD߳-=`V:Sa0NJNnݦlNiĎx*4 Zl/x>p "k ɞ]>Ak4 ~w~@v^ 9$lb-Ά1:+@y=*-6@qd 1)d`A! ]p- {ep{_0 Ac1>Hm3ȱW,)8$a0dqPm;AvKNzu]CAG31f1+კ, )j-pA.!a! Y]Sa;NVշ7-n(}PSuRk{ĽMpS˜'StSZY%\y]}ݍW8mE YqJo 6? qJ&%)\:Sp+]ՏqG8IJooblps6ME8f8ca7LH߻Lgc6lMu>i' D[o:mɯmۊ"R&f׉́Qm;5OY(q"RXP&>1=B@p~uB]wt ]cQt.8e '@ mg؀f3 $aO \}O'7 ^ Xq׭Œcti|z)Lð`GbNja E@uL>! 8!:!#@6o3Uֱ۱l B5(Mt W'Ի1w ;f# o[v'O1b߱i1"BR4YLy *e-xFf[s 2ڷGj hGH,1T,MM.Qݒp쮾19љ`Զ+"FU%8 E$#%0$f)\EoJ6wY8&Ωp#}X\~Fˁ1Τ"H3#Vc /fҥR:n za릞)D [Po_}|ZlpL%ޠ␄<ܞ}=U4)Hp6tcɛ7"bٳ]]N~rb4ߺ'&ٵ0sAXpBs[z6Y5| ^51o#_<#6iiKub6ɔ\%XThd~~u^=#H\4Larv.`K8X r[8L ,^YmYtr;- ;6:qw詓㊌'o)p˂)a;!/ %G ov.*ʳ#T$긇ml'A" 53EB8i] NZ4dEPJpCb7 w&Y-K.[N K:,Ip⍳i8$vmй/›MڱW߼F!4`+`':'Q~T`BT}5"@Kj?_|dSڣ0[I "!XI.0%uJ˴"(JI|7 ܊nfOsƌbْي2e{*e!H$ ,g9J_Jr68Lt v?xX°jX1 pˌSФpL$ _L[t[a$\]}Ӯf }}TmwrXl9K|#(p-|㘱8$4ކ摹aS.G+7r,oQ\w/s|uw'Թ? Fcwh.D-ͮL/ar;tcSc6Y2G ^NA>He(n;1$)cBZb7.- #~p\|v}gd.fd-6JX,Z' )3S䒫+E8H ϗ-Z( ` &g7tbGiWpez na~n26kJ wq"UƎ8[!H)V- W?>zS0bG{2"`;9 )\cGs`u_]ޫI>a0A! ] [T}tTlmY(2j\S18AEa0A6S[~-lk1'!##Gx Qӂlp,JpRv qHV!1j+%?8"7;Um%O$X@Aˤ+j=q;p}N mύ&E( W'8c8V/R*c,عIGeVW)ؘ)(li$딉i)P}F8EX- W/qOlTeI.Z̐-ɠI! Sq8(k$8 %vovQJz_0K0&oc2*/EP0uc8$碃08܊p%wr^leyxLf`W21uA[FPu #%!`e\0v]*$d\+S`pȊ+%7 D)cn*ʖӖe`5,b,! ,BUkZzM`DPv\nL`sk4]Wɾ;9lsbvN;1t¡4Ӛ`;kT&E&R aBD/ԏ8A,WxyCmBI3ă)$":pm3>8+uM18bM dNݜkqsS)։aAL;v`|(Ogt ƦLyF$1H@bvPAcncQ/gL=2FMas<vEmuPM28AˋS@U|A 8JS!Oaps{zk%z5ӱ>kv3Yɼ1S8$!ݖqH[뢃.;CnK]}{cAw^d,7\{$vA 1b&ls)!W¦CV8[~M}Cd0NWDԩKgLX| =0[qZnJ$ I p#" cIeuXWL]þ.J@#C,DQvqHB٫ :) p l:dS."nꛝIwݎF1jg[v>Lr+A8\o"T0,j hǷ2 f C7Uh̨foa lիD<@ FW=!j٧8S! RV- W?vWpq@]sX1Nm(L$Zh-[&(ieB'&I$t3utF8A(W/twwb첼E[w*[L2ڒ`bAPdr,Κ:?_NVJt7;5!0z,ÎjaZ-fqG؎PbR]B| & $; c4pMM P:(;%`*#5V8Cr`b- ip'E&R QD.a%3,p0Y.uCޘ;HOXt{rr0V}{qG-8=a@?f%/ nWK؝Rven z'Q5Z`pyˎ(ce.XдEBU'f ҐOk eC&VgwtqH֘eU}_0u-&#'+_P<4`M!0g@vVfa9W )n%ga&+ǘ_?rmV-u@GPɹxX`v^EdBda1Bml p40 yivy#>X|DA8V*Rfcr15070J#JD5b=dg#ZOþIL[| HSU I.;dpZ=J&(,#Ibmlbe2+׎阽r[ K4<0,FUqnr L[eư7݊"Ytcv`)}u5&Z1vCtTȂ82QUV a3>xRm刭v%mɶsk(dI 1έ]xC_OYGt~ q|M՟zzz^?u?u?u{eobb@p@gNc+72Q?)D8$!78'ҟČsƫX$]\"2pߤ; &[r1oHgoЍ >YDcaH31] `!R NFK ߸cVZ %,y* c+`%% !!࢔?B nT!2"(ddHxwt ;E[юJ鬍A9V4> A`w0^t`,fWb/MpY>p~Yjq3,0.$Y$+>fno}c"'`XVp*1M0&H*mpZ^-='CCpL$ lNYn$\tYbOŹ 8<^fَC/*4K=18$ySapAVJov1l]߃;gb.A1VS{pePpU$S/ l:dSps]N;c!j@cYb=h>B`kP9!DU-,9'n'0o+[Y ̴A!!d.V]2ϗiEPpC"nE>*+njyͤ"Ny[dSdqHa␄]RaEVFEΤ:86ܥs eĘ4]Gu:-  EBE#aDPՒp잞at9'R wa6ђ}WwNQpJ81cHI`mɊ.Gǻj8iuAiƃ-X^?YdP^ T|*r饀%,4>q! }-w2βvfIOl3tm0aa8$axpqVOPɾfYpb"khv@Vva[MI %?-J`3p .N4 ¨6{)Q T#q,')$`pO(h;?^o7{! sJO XxgJ.VP%J@YQݒ[YQ.Ξ!v,( *NC`LAJx\?o̼InkE0BOl5 ?YNaB„#Jйuz0Ba$\鎎 p`_ 2"Ns>SJ+E&$L/CM 2tl]7EIW'n~1ۢklK1=-H_ χvJ'G$TaeڠDg: ^t 'ωv叉x7Y/r$!nNw; 9 'H71E6锎"(nI?Փ5ewHfI$c@@0R =2FnoEh4 ~A!CnB-5MH[3,2`lYq8(z$8L]# hY*6n6\Ю-=úhGQ-% ΀-᧮3 Ŷ%\w?0-a2%a)Mp %\idl+X~tRM}Ek iiLtSB9uqHEa#fS.G 3Mvm1 {dr紳T;!E}I9c $8LvN :?_NvKD؅,gS~r$ٜKh.ˬd`DJЏ~dp힞%RP̔m!PQGKPPT[u,K5e9LFKHփIBKBSnI1[* -qXL?TE26Awr-:)( IwKm[e>eusu3nV*vW@p]3/gFȌ# 6aw AFR =gַl>&/}TE'!F3Qbם'#CBiZt~L+­t W?nU@H]!+6n: >v;MamXƀ펱V뼩ID~LN!ÌbJpˮ,v⚞¬rǖ?!P8 9LTh')-'~N~,ˢi"J|70ufeA SLLÐ3[b圢Z)!`aԝ.u.Ea;NVHX}bU^G= Va7ELWQ~nٍX+֨#*+3Rڧ]dVt̜cCIx󄷎*3Lڢ08܊.℮/;-):O+C["nӚ7V@pO)1'@}^\=0]ʞN h FpBg% ';k|ԿV7{xiGXUtgEo ; 0* r)n$\\8]fE\ىfw >I002%a%Xt6)JpCa7!5qr,?cc!ۖ@'l?v꠨VU$Xv0H Hi ¦BF8^h|Kfl#0~,aT3j?/g7ǜb, l:dSpC7a#O1>Q6mۤ6)6CBUq$0Jl*hDPpBK;:Ƅ͢zD Iҡ mtE3`cH HF/DVԐطS%,7Y.( ~nYL>17n1 Vv*+v[&Q .Kŝ8H&+(t67a$\PLM}{cjO."O&w-ljeޜR'$)$0*!!3X%t~L+­t W?t/料1f ]9m_4n&BloAn垘$IIϭpR~7b.gKH"4u>,|+ړhtL#Qdp470H :7p )u?Ȕ݇r/X<1wxS8) +@rbKp:G)ۨSG1' [~>-}{CPժ剱<ۓmXVNi?C p Dob6ɔޥS:?_NVJf;YPae2EMgp5GVvM K}L JAvptJ`^B!+Cd7`)#"LV o F>~G9 a<tl;|Z4Ձr/,T; DjptW3X"l'L4)8$aSa S@NL*?_NVK 11fgliliiQ٪hFzM+Gm v# <:ݜ¬o6A3TV/m"UU/mva|5)Q5D; o~똃uB`EapNVu7[K3"TJY[Z!EP`gz;u|`p -t v^(h%jb:}]Tvw;n[`cnnCP Ǡ&ɔYE˴)JpCcM}*?jVV+ꂠe~G2:lR)El]@ͯ G|H4n\P\-=ȏVͪ3ŭ]TxmLh,Yp60U1PF)2gM05i ֶ)DeoCin_5N׾C'k](e8H ϗy}l7)jIzvKx H8b϶ٷ@_xBBT|Y0U(cAeEPj 8٬>1Qxjs+bSmNIO }UQ/Z$;+ ~Z,rE"E.jjt[nKa7v͈Xԓ0[e[h9d``-@$^wK62)DI:;:fw-2)[hEYi E:8! c(&Sp w&wQW"-3eS..[+fCk`h#--l0yc~bp 7d$CB?S:SV[) W?6of/v;QROf9E@~-0 sQ@*( ﺅ N6膞ݦo!Ȉdg!Vrvw91UIFN l6)nIn1+o3 ;g8l&@0l?0B3 5)KaS!#"'vKxR130WKNv ؖEN,cT@2MŴ>@%Znٝ[TDra{&v̵d`G$.~SK0)$.Nu1ԶceiؕYNOL-pLyFMW/X-#b)Mas27nU6{e\„c'&C/:/#SL+)?.|L߸:ج9,؉ZX'l9uuP0f^%\uicb6qP6tR~pW^6^ʶ0v(z'VזάOq9XlF;?\5 zmX;<1Ӑ;„ >G4lK Cd*Z ijECvhSIDM-d] kXY_1ˡGwnd^sCQ*IXٍ<!#j.i-#諨zUQBa`:"c Fne"ϋS2Z{ {{<%kgRcAG8ЈElz0L]E7Teus /L;)i{w(&QYxͼm7Rb 1>F]Kn )P H|s偆Pӻ]J1[BږӺX 8Չ+:|[= Ⱟm[(HVը!1]e㬜K4{ʌ)( h3-vJnYb5g"O[j 3O[Pj4MLo)6 Y_mkr'[Wg2!4:v6#nU6,lSlJٙU |Gz1ф9[(x1 7u?b*b~*͎2}nǩJql8\n)fhOoz(>FMU*xhg;ϔ2mH.wQU'KCSh Gh"=pt=swkbᾺ]3ga*R o'.5.k2ȷbXfVZ?7d85V}3CJT@?ȃshLo wPXTU\m׀|M-\D61iF{_q Yj0^7oI-٣5[*v"}̆t~0Ʉ0"D>As.V-L]].x&a$xlOV$FW LL{q"L|)qRhʶ)+q#Gyw݌4tsIqn΍U64\'`\()q䎡@tUWI[bZ vr=ضnrI_ LWh v ʹ1kA#ʘW}}6P7CzY5bgf:}9r-&9Um\PY[.bgΏNS~Zp>3䠘\^b=1!`L~u벰#WN9D")aOGcOkdٹFتOUm(k]}KBiZ^bϨ,bA[ EXv*Bwֱ>ѼޛJfV9>̦y`ݡÊl&nwgծp+G[҈;Kxh*"T!1uIJi 󫗂eD,81c71*~FYR18AM%]j?i;$P&&Xyƶ[pbCC+ҥa?)8$!k>;5%* )d 8a~R~t1eɜ,nl>1T:9\B@~Coz )Jp쾾l?bv;l 9?Qݕhf5tVZ6~d>gnx.44e_7F]߯ۓ"r]݃)`e;'""(YWdSfӓPm_eV֤F%y_%ۖ0e\0ƹ&kg|߽yE^[Iu]ӿ_>_1_m滿{U+."1hؠFO+zendstream endobj 36 0 obj 18764 endobj 40 0 obj <> stream xKnK&zKNY,fs^cY6,[ Q|kUU cDdε[:G͙x#_||ޮzo |^/CJ)}ܭ_|\_~4cmyT~s료/~>s̟~W˥Wy?z\uozF99\sq^&8>rkӿ_X^=~kuYj,MϹkvQKMOƘǵZo1Vrn#$1]sef>:zOٸRkc( _,X]ckq[5b=$ͭ;Wx4PJcfn?\c/qRY"}gw_ll~p}Z=ZqO*tT~wwc˯"?z>/ɽ~w- 埯cpwnإU<_PH_O!o?}R} ߎ^r+u'ԯsY]ۦ>[鷿ߝ7z돥%IޜP=lgkY߉}lx k=DۨgxY&Gr~:ϟʉe|jǟd pzKmI[Cȥ7RAǿYA8?!߿L}Ht]$7WzBF;xp?ִٻw,y;bI}/h{}Zt zKaQk׿$Ow-F [_SwZ^_Åh=z=ǔſ_ʨ{~ſ'J|u?c-}=t>qAsmESd9Aο{Ok=He/mOo,ף͡17_6o>c>q_-:-{~ky`xTyt/&2VdzvoNON(Xlf6{?ۚrs6w{9}/ɚGLń_~A(z>7GG'm_|o,}H9UO?o7lxrh&v{ ,~?7=6N۴yRJ2}ln|u<?x>u,9?zYAUw;(ӯ7o8~p:Y(~ͨq,~216|@?>g's'wߟ&د~oR2:<};=-v͌?=gϾt^;+ ى7?8җ9Ch=)˷{\'ϷZ0)Jk56oǝuN?7Y??ruKu\=;(~pmJ-K(\; ;8^8~͏ag\]+\uRg#ҵwu;Q/OPXghI3(>G׼ָ\\L"ZGi3EjiYq-ytϧ2Z}+iL_9z/_}7}m'Žq9j@Pr.ra ^jGG_<$8fhu%%}[ 9BoIxfFl֐kkb4sO2VKZ Z-ֻֿ9Vydڀvs\c[W9BiIxf6m`k69%EznWmk@X-2$\㣦b9BoIxc{BG;(=׶ѾQ!^Dxuk[NC@GzP.}KC< RBG x#[$82 ^^ Z{nS s.9Lm-Qz&Ǡu=-U u,kGYm:$8f"(]Hy: sޒ6eMXǁ5qTZXZ:݁W/`YVuNKxw@l \p]c ֚Fmq#2m]xx]TV궯c 𲹄 Mؑm }͑؆Z#/lTm&Z3m6v;Yxbp=vx`` 4p`mkjmfooôyPj쁯/Ski+=mB;-q\zPs Sj %!(8 qֆOxMl3Mq۲%8nbwEKTpXpmg<(7&׷ dՖSB.mvH`/n>fwИ?UiKrZ{jvzWd9ֶ6t!!0@ QrzokWkmtAl \ p%%9 ^{ϓe$ShքmztlAc}+ Z2a[0l^̻ak!-CZ84f̲¹H{6/lU%62ͣcvNM͹{ƄH# Z/-e}tpÊ_D`ghA OJuO[&6WqÜ[mkz+蜯CB`\ LHKtAl-\ p-]s-|ͶZw|#ͦUV9:a򛡄ZϖPV_G62. &jKvMiX=U8X.x8F`{Ul.zw:$d-r5}덇Z8X hW3(cΛk\$`?]9m)a퉽k|P.a&]8Pa=tVd(6--hpZmg[na N>67Z;@cI@%辿qUt1[$̛A)%L`/Vs8ie&zg0{sw^H FɷsҒ}u>ڦ\v]S0,kZ6bk|[\ @XJs#fiǵσ^{Xl559;Gf<;f"(KHXsbk@9:znA2w璻Lږ`mbptC@GRy6.a-8]Z\GG6avvݎk:Mx- _ftlfCkpJkKXלGµ[bGZ>O=/u /t7c| W(Ѱ у OmJ@׏.q"%ut QWfm;>B99[Q˜rۤ5rۿ%Fh!BBv 8\I xX'JNAYQsuuݱ%^ϳΊ {s$L!1@ $3L;֣ bkJ8GMQ]\;Q;;(۔CSҠ}O/#m+g~` i}mZ8h!y4l>JJpB3֊aYD9{9֯"\Xs1 R!8\iIxBXX' ` g^8OZ,c`?[B]ꦬui%b/bkZ8k Y1v92qwSlw`0٩J׻Rja"8lc+/ 6e-v'*}[ ) xBw: 76s8n3哃.!1& ]|tAM)$pd"u%Ep-#8d9ۈYtߔ ޸]xc;¯}0vw!1@T 1 RA[i2NkMg1Of̈Ava^$ll9&rݐ 뻀 M' BA@kj_+: N5kpXkw\_"arVBaN4Ĵ}czKs2~bnj ~usR[ƀߞc]:91-'I7\gaKEpޒ7nfO̒zbS<51rɓc;WX&ls -a-PקAw x=/HykyR WZӳ]4ji*R!ah}[ 9\K\7|x>76mOXޟ%5Ƒps;n Vhs ew!,/!fx6jلn9^l5Y*l/=>$Nگ%ѣ'$$zDįsHISx)+aui0Yå&8'MuAi ՟>B(-õt q`lece\oJ]:rSai۱41)NC Jֈbk:8W!r$9SM 4+>ahs4|[.$[CZHp%1RWbyP kzjp˚7/|7#N#(m%X8 CZ8k[Me &aۯ[PfKv3.9 .udiP2{ ng\Qa}<~vn΃#{ p.^o%%X &UV&)'&H71(tZ˜JC8 TxLjh5U[4wN wWOs>^Qܗ!>ɋ—8m<0(߷0=޶ ! ]c!&:vʐ4( 7?{{WŖ =ش3ՌKXSwօT𿻆9׆+3vM:mۚ }PTHp;€޼1d*:h;p K1eW*6epUں>RCP#8̻=KŠ8Ixc&j#L1W؍NWӻq"ts6ֶ|S.| & tއ0 8bsPI x" a4y8!46tσ"kHse"ۛoma@!Cc vZyRpgG#gD=7_E=:8_cۼ%$\>Z8hR~5jn&Uw㦵ٶis-x8֔IsSlCBKw! -õt qD:(KdhԋXq;'q !@=2=Fy{XQ;P9BiIxG,؀>b*b̃@^xl/%!vD.+Kx;ӟrpRUqM[ rႳWputHp>)ҍ6p-#87$}}DW\Gm#>09 ? @IUVd~1.]a{j!lc,(Lv:c" wdXRC bčPg%97KU܈~̆a XayH\3ƴ-"Ak99Z]fyÄp-+:G(' _ '^yR\4d(m6Ϡ澶f0m =9(S~H >aZ8qʛN8b@ݾ^( tS/k%8FœK`qVR9BkIxBSbsju>( j|:]d 5aS cб\jܔu Xzy x!ka&ѐNwϛ?G[̆M$QOJ}݃YaɠBa*w pxɚ[hn~1\6BpHE ,EûE R.t-ee0Li+alw  .) t݇\7`|w:_iϱbS?8&5tCPT@6[cJ2HGe4Xu5OGiU%rv\ ~ҖPalE!@=_M5C>m+j?T<&iҸCl&wW>#x978ls_; w$Lcy3"\ p-]sr޻ڭRAIf3OLŠU9} q= Ʊ:Tt1ĜxGҙ&$[#mV( QVLťCci NO!"btI:?!KGNbMKp~]\]tq!*-Y}4 9xsrC:1FuE[ċQ(9$`|)'{DG a" W[$8fhᔋ.‚ V n/8dB"ښhA<)I`@/0LLpWfl8܄+D܌܇D[D|ճ8fʞљ<#N.CkKpt^5wDH`ђX9 x "}IyPZUrF!K~m]1K( jTG.^|ϼzZ8G- q7 .Skl|@- hc3 dSl,U1"IeFє0 x^0q>RKNӛ:Ewr(PЛ)&NBaۑzKsJ;>ƦcR0v8Fb5UV>[cvNAD`GxAw19yl|<(~S0^Dbr5#_HpQrX)mo UПCe~ADnm%XSe.Wg]q RGHst5Շr $$݇E^;- qJ.v&+2q; T6)_3s;kց?o1:r@KCj x]Kҟ'Lc~ Fy!!`@= FJ8+P&jD[)(V|*=[ GkAk<cSKswAiv_4q]gՒ0Ey9xY'7%%$&wIbZ8‡WʜY >dNpBTsXv|H쑛[•/!-]sdݺjL+Mas冯p c<8.\UNNs; FR9\EH0ŴA[P ά #`no֫qǖد4KpɑOP򽭅s.9x\]x UXw&$2(,i> Z8G- qpaJ)2sDXX[?^w:pVX6d&%!G؏*K\A^pvJs6v2k+vsvJM9Z=!8 xBgISSX [dK:;21 ۜ- `3 f}߭_ŏήse}r椃c˦LdyMwlZa!!pUUPT%*G*z t{R۸luVN-ea=򴍃B-ηb|"8\oIxckZ_^A6傃'; #uItVR{'G V7Ѽ<\%9-f(V-_I\̜4/&Lct'L!a5w,ku1TpW%<S39Ynʔ$VvꊟIH|aMNiSeIh >)-õt qBbreoSjOiսm(*&:GB}g&rʥ_A}wzKsk}Uљ1LYfxL=T%/Eu#c KW A)(%X@H> FKiKxCY4>>`~UTX>8G]!!W h:tI(*Gįs.9DB8oD&4B* X3g]J%1x„Qz*z RPc1YbXPbr)ΝG|!L!.4$1!eR9\EDŽcV8ҳ.51ٱFep(t0$8n %+U$T֤>W -#8ilYMo.Q=zȣt4Q҅A~c7/(; TWZ)d&[䉛„IyՐ 娅LiEA`}S.JB-ᱞsޒ,ÝUq(<wׄ#HDZİf9*c%A8 QQpph9 x WuS:>lᛗ2XpqeQK^<;n2p@bk*8G(- A+K݅*h\1c=f *qXKKƗRe|KHrAayoMvtZ ܓ +2ru};^y]EtPmÕ IovY1Ei ٲyT_4).b.Z8hisQ bsہGYkK|IϠT)m 1"sHIR27fN1WGHO}SW]}ݒFEoJ$:+Tgw#4QႄČt k~7kXܜC6qS&ʍl 31Ŏ q@:8qM3+7>ˋhw U~Z<"k4w`~ey!1A5ːo#(7{(+7Sn:57mpź(*pWNRx,M-TП]AoB$Q,#SIYRUJ ) v)P S_ߐFį]/8\K{W؅yWͮI嵤R⥷sX]|Hrӛ-䢺8"V9\IE\+!EzSvsE;ĺeJ6! /AI\_CB}$_]`.9 Z30l@ M\Kb`3A5+ÁGs<{kǔN1d=#8C,!аdPjӑLujd0|`:8.1x|.aJRptzKszyh;Tս3dR'Aw -D30עz㡅s.9px:mJKtW09`&7E)"8?\ы͏>: o&TpPZe.ҭ' E:eϸ@;. #~-_{3nC:(TPJ gH̃T֊al%V6;2Gg&=ȣKB%ztALJ8Gh- Q(1EBLƏ$țrdW4]}GtV8lĈERʹ\JytqJ~3|rB :-r.%b^sޒe KKB!'A//|b$hie"Zrr&~Ν#ԕ&C9( E3 )0R09`p$A~Ph7o JKsv0 jSaPn +W:-H"Le-gK0 C:8Ch-Q}Xwi:0qӮ k0'H tcsԬ84ULf!mw! *9\kIxBA`oUP&-\~g%{0܊c$l\((v[:w AzZ#/~q(%ٔㅆ[ٗn] Y`b8c!1.T>$Sk2$܎rS >N*Cc5y?*JPl{VaAұۡ>1;@ G(ׄHP(@ Wbo8+4( o D X|]z^)MS r2(7{{Y;8BiIxBA< 0 So}&߂+\U.+6a"ae!1@ Fwr%9mC O,(DڐIq{b2#Qnʇ~Aa nD3Ex*ޒgZz{(IUGE"sqAp-r뙇ay)򶥀KyU axR)9 <ΝHe󤘥9yz(PT1&7PЭiAd ~_J8*!4 ZD%bOOXh~V<8XmKp.^oȦ%P9BkIx{Je޹$p DҚ⁝v@HphwtUpWQ_n9ܱ!YMA 5QclOd!a(QꔌRF[>Ҏl-õ/БNJZ׃tC| `lqdIr $\P*"!B$GxR9\I xB@p\5ljEKpE LPh]B`BER>z2_p%]czX/9FVl7񋹱aJUg헱rs UXT0(E%j\cp %ut Q'[nCe2&q *rgqdf 'uJgѕ+oSbDJ p-]s4znS2C0gIA)iK^G}Jp1[Al-\ %9I-Qlh-`ebbz98:M!!0]z6YTE2s.1 E4U-͢"bRUb8,#8 هH߮]mk$<ǡȔ ŒN@%h/2w ~ѿhq(%l\T󳩪Ȝ2UBT9\INjv99?ţNZ=z E]6J@ tI.aF%(:EVMcPJV } u;mt6Z=Z;|-O^MgaO[Ud@KqeA CAI?g-k,Ȝ#|K# (I9\IGİH p-]s&}mm1[-:Iphv >{{w-㎏N.:0ݡb>-t%‹a$cܱiKnAϡ_o[ p-]s9AJWlS1VdCa&]S9_;;m-õt qׂ0% X˧Y YρUlt6>@?X j^Up%)5_S=j#t?8\c5@4ys; 4f0yAc!/f+eN q & ': %X>yÀpRU5;x)r#_qnɧRZ~[h#U~Z.y}wAl \ p%%9Izmi\0m,R+MŜH^7K#-޶*1n@̎ThVI2ZNg4ϳ{*]cNI*3) >\zKsա؉SV+|nhFG5a1Wਙif]&'Y%LbI %9(ϓB'U !0̷I|_;Y!!p|줬iDG0zD.kKVA%CsRSJ4esYXy0hhT̃!S TspkvnJ8,!;9Šm \½7 \uE4hn!;wW%+\OG&C>o?1M ,Fko vP|)!!pUM-zK0>k<ӋGZm ԄgR#|wܾ}@ JcTXêkce!%# ){%LKlv>V7wPئ X}78XjKp. R!_opZ_ʌ) -0kt~VERʃ̖!6mwA=V ]h˗e^0"VGxaD7K>)<<DĵtCi62 ̮|ny 7ӂ5VE Up6u:m9B !a2/XAl-\ p%1JލQA-9:ȵoR O:sYq!AX}S.rJLi!,o@Tu[o*A(,ޢ3|>9'g4Rͷ%TT..q +譟Cа ^;ϓ2qf؋: hfMCZ\=)k4_*2Ef xBn$*6UݔgԵ28ep\#ys!\ 6Rn *Js}tlI<) doc\WhsLl0y X vNхc5t1D#}\h" N`N/܁^ҟ[69[Bt ~ZKsT]*9N1w,11ϱ٢o 3w.^owv9:Gl 2[o&j}[*54 ;01`%M5N075{fv'~m C BϓDV]ԋwt` gn9m[BKSX$A݇0&j2$J|p *,(Y-be[a* x.}e8H%3rfܷy.;;4CYb `C8NaZ JKc/Eh?j 8`XAF H<5;F642;fh@{ sҒmrv<-3yh[.Ō@!އLl]v%C:c z_7qU?30HO9-!!Sfw < >/-õt q({_9nNA᪚l}.7pnmaayHp)8.a)nFi$<ǡ|dPp> 7܉,z7,{Ĉ Z8`./wWY#P~xH۔N/ År9l{zp_L0GT)~9K{Gʷ {ͅ딓3W8*e)lJ`^Zp%%90iC{ONYЌ.^ށr0 .1zxZĽ}f {P9Bg xAQZi7"y;^ﻚ–1Aq;sKǔd]iwõ/%x2KaTe t +8.fq Z8"Õ(͈b6>D8A8/@l$MBjbDZ`8{\Sb:rt@ wi? S|zQp!Û2be6IdMg wBYH7Xכb.* t=SV9\EI2.gią96妥6PA/&G(yshֶMhhu W FpQ_nu>(8K0CEh~,uy /h& Rz63jد؝R3K#R`;S2޺E̓#%'cݱK 1l)(7)CaQZef3"vx+CAA- Z JKsq_'b7IVj3+:N@0ȳrdp V  Ö`dXWJdp%9 _̡L|=f$A\B,`V30Y4; p =09$Z3p[mDVi#(YɭXmɲFd']}Ccvkࡇ eawįsB_ixr1#* D_2C&ânZ(_{\XuBJ4xˆRF p%1m7-ˆѼUg K}ox_mα#HS! 7j =7:Ԇ:[KyacYuSxhِ3 [ló1W wI̅CCכ+9(fkWZ' \dloZk,ݦAqVqNKpzల 5t !(~Li~ mgmhsrEZm~!!(yԆN|ԟ~Zgm&ĚYbP tǨ`/f"/r5g.bS3.9 qj<\.qj.TĞňw˥xdTBUl6G=DVJKst:S }}׍݄!lr-e\Cz;(8\ bkJ8Gh- QʔXyPF,PUZ_|-|sB {xmBfzm5SEtnBpҒ w1<ka1Pua%z BI t!!NٓL,(c/+*ZKoUhϖ g/2*E9\~As.9Ł$IAr̚2ݪnewQaՇ*VYQgw5w % ˓gMAvM&7fkMEБWt |:(Llvįs.9lEޜ:jm hnrs1=oPpB< ҧ>36.B~d7+Y=|H쵂2nT#mkKxC12v2-t* ĕLya)U@޸h21YlA]\`p ]s t P#ئ&eD68՘1"p CcN%mbKp%9ծ=N vݐ೩]cܴxEV1*bqn$8Fh].eJ %1 ~h@(}o52P4 009vsK وuEusHGp{h5lv3֓w5[B`-bA\B@V "{ɍP9\Iґ ]7Nkb)ɦr}XK`7S`68lZEu %{]C!zs%!(ySCoN1];_VB`T&7 l@RȷI@She!`j$<YK59#|$~J:6iK0tA Z8kXav&|F~jΩ.m6[D捉bc*sC{lOfBo{)fbŻ d kKxs*X6e&Œċ%kZD9q YR&.݇oD!-]s|祹)2)aWf*/7 Κ#Z1`=k ANa^L)][ )$,‘;P'!Q Q 4xF{!*KsJ@n|J.Baz G叔$6GEB-qޙ¬f!!u] p%1m8:}y2џ'ebc bc 9eYfL&Q*KB`7%Ɩ`}$Z8T(lP.'3wlQ\TqԀ. p:\o?EK(ZybܮP gp]s k(n Bf1Z>e n<{oKYzo م⓪=$ Ⅾ.u-õ T_fF r:@/ 6./űw+8*S`+:Ūܫ$ GZk=h%e)dZjaˆo?ӖqRhTP8Uo wĈZJ—qp 6ioA1uT䉂*?l_]΃.ac^Kf NaQ Q f<Zl#ʵ2+\ 2k*7đ %m#SuBfC2mwfjEwm+BҔ v%Qt_vp!!0>_3>T[f1"T|p.9mxkLY/!QLX&IB!aQ lwnJـ1vUR9\E >֙^3 =P;bmFQn  u9\k x By+|&%w M5+18,w?$<) IBEGU>ԭs.9,m8%3MۗO J)`0[Q>$8N3lS+$\}\;zKsAؠu˞4h+:8fSDH\4(4]K}Bp-]sDꯘY sHsg3Lӫ;ZLeo;0B?tX+z{f-σR -Y4Q1W0$^ȅQrSP<dV #(A$eX4=3=L^NCyLő MBcO~P2݆]B,5}޶zKsFj״ @r%K{aa GspمJKXZKsJu2p rU-TxCBKյdI}O0|m'u#V3BTg PJ. 5qְpCH|xe$l|# 2 ΅?e*h4ҘcΡJ2L}XAQ7tUT dNHH}D`$Ϯۜnָ$-ƏKɝ` L_s<~ +2pBbALl}@Hj9S&iv0a .<>y9??k8WgeL^Iy,~FBF& E,>D2Nf/aIqc΁b M\+ei4pB9i ໟx2__m0OD6 |!E*GG `l/R.±l-϶QmVggVDыi b2'~$%+a ^Gi,*Epݴ ζ^08MPʅql Ɯ#,lYpXscE'R^ 19As-/Hd@]q4E 9g |z6qHe\6/v%yߊF=[#5nc΁`SÞ`]H ;]]HrxIҭ, s8ТOQĸE1gHF`IGe Ր*}s[Iز-AF˯hw7;f!YSB4 R"i kI8W`cL %7 v@Il! ^FJsc P- 9ƢB!/m\6/UÒJeVo#O _a4`xض 7Ǔ&Ɵ.\L "ў(;%7ESde[EcD/Xgex-Ip:Y:kG,*I JL?2QjԲi|AHц4$ Y=H sx_ ?•gۊQ\`QFcAx]/TAoIj'Ɵ3uuw hL6; z,&m؆;-$n-I'a`Z@'[O@Z9X!s Fb,7Ty9XB:K(vӚa`ZU:ܳ=u-Ȃa1~r vuiKq4`qlIpY* kg8$.,G]&-=Q f.%-s&AwY'#󳼰F- :ٓqc~w@oϾ )f?1ėk-& mA916uª/e^o;He~69is 8c Z- 0s#)/~¹]%P]/8AwE*&OzMGeAXszd!X Lº^/eHe\W՜fllqWdLFvIUKliG-exl ZciYҘ́K Ɯ#F k,RZ}_ ICnJ#7  ?[kH[SP297K=AQ{vZE('$i`#J;2ɧ">>w᜛FپEn)ɨn+9?? kI8/قm?$`Wv47~>*< c qĘ< @kk r"5,PEtcI:*aZ .$_#-RCr,v▁Ĝeђ4gP%Nc5(#b$bbwA@t! p;4K!$X 9?%̙r kH  %Q~1(ۨHz(6Y gy$G])8vd$ D|}s; bat$!CM#6 -h/GGjӗ}Oz%D sIJ" S,9y_Qc}:Xe`Lhad] ?g4wV 8rꠋPLYX%4dK ӀVαQ$86ȲHweasI V̒ {~po.'X*-$K ZQS6*c@x=+kaU'$]("\Īy7-hNHIܑҘs&kG8Wg{c/(؂B" &Mϭ4 o҂=E:,bꬰFz- *G7+k :H>.YÍa *9~f55_ ?E6>]l(-oF8BQ i\m@)@,~Hoit`)!Ӵ-i̲&M`ȡf)PjTߧÚi)Q 'akiv,g$ a5%dh҈a]v;73mάɔt%9ǭ5oY8בY:R_fEnƗխ3O՚zf5J[0Jb Tr=lP4i?@r 6Ew 3X'pA=]X#^f!qedJ]e!Bsq9cXud6$d i0/Eݗy٦*nAzO{TN8 r0+p8ނYo5_[V^}< ƦQ B O' ECۦ ƋKN|c |mE ).s]\gkϯ&e҈n2Э-`o5\V9AR\ !e"O6 mx%U;Q+ZOQnMgMr!ۉae\&K1e_fw[*&?ASi]2`,jG]=g tOFw"yn[yw9"-pb4TYu+-š#,袁 @jg"NsF+A3w GEx&=u7Eq1e#%GY:d1^XCN^zƪ@$b쁭 Z\%q$]b^F%uLHޛ|Q09];Bz-*"D0xIHHŌ?j%=Be֨dL 1FJ w9He\7]"4%]\l nj]ɰe@3w)kq]Ʀ*{1ۂ;m(dBs5v6lf 9x>^j$xtV3At]#;ϩT7uRoU-  u"} Kk/w(_&Ol )`RRЃ4 7f F|}s̹ Qy#8ܕyĨpim,s^i!w˚?~.BtZ$&/h{IvdjE7 cܬM ƅ]HE6" kG[8WӘ[\#w4d#5j㘺f~Ds݅[݃vX R򸍗(\BQ ؃I|n5X$CEyF-po6EE ec@9 ±7Lq$iWㆃiSQ>V/σ6`)t@I͗ `[3~~ VH9\yJtUȮ??]i8͗i{:l/~¹݂QԪ_>_*r| 9,aaM@2y`Y5 ;"X( )aF3qO4̛5RҦ0 $n:BL+ \ Q%s jMے)%j R‘q6ofl8ۀ gA 9q He\hH^݌[ܺ5p9nͯFB݁/_5o%7oe3SB*EZ k@Β0.PYr5 nea䤄).Gr k,:W'O2i$nfUObĜϣ lnÍ9X0(a40 1\F:]%:t&i,??H\l;|҈@f ;ʛ]yә??kC[8UEJz% ~$ے;k䲷i<2 7%| Tܥ)>ӉԐpVoJϾi4ml69pI&A?t Fk2p[)mK}Dܸ[VP~HI/nhc#R!…!kbd k߲pgC)ɥ%< ?O(<ėjSJj(٦d[>s"UTGx1\ƍ #UhMlKg+Э4`\/];m23TKk2pBwo|))+*1O 7[Qp^nAE J/xyhv55X.¹e>(1( bfV #DQ9%(L+fY+He\rn!40I*{5 j%sy3um1'%h \lԔ3~ He\;HK $2P tOeғMl0 m2ynoYZ D|Bz-*S7O#IU5H*fĸ+j9U4Dm ~ 4P_;s aF~G+kEE;IGdlKU0Fi #˄<P[H\eJHy9csBΔB-Y;և0P!7%p)`0`ɅͿ LD (He\⤼vؿdb8$iqc،>dOGZ>~ G'n|_6'n5Ar@ en;㾂g)&JK*ZI1۩(aq[k\Mө(KedkbT +2p"c9$zvi hGr0$F\f-%^ :?,¹MZRSYg,1tǼ-F`|+I/.-L9fv۱He\צ@Xt-{}$*1A9v@qNY7i9gI:BÆjќɓ^HcM ֡&zyR1k %/+XR`)ϦAe!qW9%1s+5!XupmKtl΄h+X96_(e`q-FtJ i.1^X#ssMbK |= 7qH .yW7, tX!am\ȧxW=!yJ '`s0EWi}!4 URҒXqڻ:lPuK )Fnlh&X) z XT`̞I"g;ᏨMV-s&); |LrĈ k4p?0viw. ;?YA^(/YCMci<`]C ?D~'kM.ŸEt&}Yȶ]0Rc!𲐸*(%OXsd"5-`XXNSʑ<Ưo/S+5ZֈjYs&iDayaoz寧ڒ_XvbCOK,$SKIn-k b5 <|˾!_؇?:tD5 |m8=5-~GפF P\jzƷ`(j.) EZ,oF& \OpB#2c&oǜwne!E lǗr%U񃍰7`zs_!q9FXRkbj5oY8(6-qmG)yղqSɝٟf MYR*7+G8W3y#=%/Y;8N7Fl͂c%!yZIs&JO/~¹̔G4h. hQ]T?ߟLW)A_AU*!1HTl85 |N KHM-"On'3a?,`rM03Jg0>O5\;q(D@fvC+ì8!!ʋ o{](+ Ɯ#,Aeښ󳼰F- :MSѾv OFgIԸM R0n6;bV>X. 4V;YGD1TX E$ѡ5.ʂO %{I |5'H[u虏xYw "չ.q;U4A" OPڒf M`?4 86=rtYgAE+эKX΅OEh[MRQ&krY%|?W?$aS@?,G,o)¶c2I\cJ9ƸDf`1ب=?ٟMFeS|~6A$Ŭq)N7ذ S:[:QV`M#f(AIcR-\oF60"W4豆oy]`%/wwdT] =l(H*n]\/o"m cXMp"5-PUx8nƆgo[MVzB%5G+Í9gyλ@,l,d];{'S-ėfR"e@9q}"Z% {`/u% !{sт4X yt}~He\crkôĹ[؛~c:ط07Q~jД\.z.͙ALvY I60SSR(ߣְsp/>-Ec$ܧqAFq !(1>%%i>hOhfKIF9-tnsa/a/m\kv9,%<䡉4zwyEL殉bqCjuY06S&aWZҚ:F- :ޖMA{(W[e3h=Hu9:ӘF.}%vmrA,Yr8Z-.`lN,]`BHQ c+щ}bEioN IRAs :XVP^ݙ,>yQTVtL? ݉J~_W/LƪvAHpo8W՛1f0%7g?xVK<Dx \@%u60H23~ְ6pB+#S$A+y֛AlUݛF#k r&iHLrl5kY8WCѸY:mn%7(\ ~[~|1ቫ{Xr|Y >?k~l<\Uj 5H_&F]^m3_'8mCS#޶B*Ĕܸ_ȸ渝^H#?Pح%yͯqK0P5jes|~6IS0bML1i ?j`q]UE9K$OXZ-^H<~BODޭW*xx.sϗSd$x:0d"hjL, Ɨlh)%L۲Hju!ă+ik8W`n6_%' Uu ԡCH.I$4(,ĺְpO&/]7yi`0y0^Ûis`%.1\s#K^P !Ֆ^쏓Í=#,MNofˈ忶C%6y,![Yb}l&oo`g 6\9Hg(aP/*o,Ts.ypz0@25nZpJ.ȱ9cH yi :t4D$7v"ZltFԈ2iiz- ??5EYr_6\<ؒ؈`d0\'KY1WJ2}R--m` h "k,"9%%,oN|=p?x^n[$V>LK4xJ4h35oY8!ַ)J7 &6K=*_`rל&Bɔofj;Z$]` hԧ#(t\n;:vPA1R.|SRf4`<|W$Ξ>97k8W=L*@?)N"LrLҸowO}6)[0nY5:27 ƟO^X#s*#ndְ{pJ&[*F-}ŧAE9cr ̍4hòt5ޅ=ᇄ8Y~" $NAy ˜g(#  kPIvq%@dehg ?5n2-$`F,)K?҉!'mXE^G.!9~\<`.j,5T n%ĝ'%oY 11?~\RkTw O'е"d:cl &ηmf!SLOd!q!#EjK[8ס #B_[G7}Ay$(Eg֩@F;_>ulZZF+ <=,q7cDLt*$ wt"9Sis`%dI ls+^X#s#A(o$NM0{𸠧b#'qϿ `$̱@o' h$!am\=(6>6 Òqc06RzS`Lߣ7_ZR r}N@YXUd6Ʃ))(d)o~?RֈS,$jvea)1|vE1ޣrP&xKTgAr )0̤Hie!] H {-"6X:ʌ 1k!#q$X6c xl,JXgn Ɯ#,Q-TTU]'}Nk0"H6l$L 2JEIoC${`~!'nݳe5c9kE[8=EZS?,yt3bzu sc2)–6кR?4E~ kG[8W/e)QWѱu|ʦuc38rmd ~#xsAQَwSH9\Sq'LڔDbf#՛z+6l !o2etܡ -q<@*_8H^^E&AnuWyU]1kI/[`)}n=\wSA}?X]0K=%8u 1ElN6d$Sid`vV{`am\/>d_ݵXݐ1z/@WDXݵKil@90’JsZȝS>鴆^=6#bU74vf]=#16;i禴 9R"PY]*w~¹V_N"eD/d6b$tɗ]=S2^%JHְpCmi(vlt%t%/*A[fj1Yɝ9g:-0ceAY^s]5:XW(DjMV +Yeie  kk8w |<NICZE %`miW/ He\"|?F%Cv_Ya?Kr$QL/RC^¹^ݼ ')R2E+m*FήR`;%oF?==ܚr kPf@?tm@4HDpeirKFAp43D% ,'^ŸU(1ɐ$" \g5 R#͂Sx3d!j ^Bs~ҋHe\!,mE.MS2 +k# !euQ B``90’BBA[T{n{a[u0R'HD|Hj"alꛆʤaN5W^2SS#NXcyM *tG6h}r-2.+GMJMCLH^G)iO kb<4G R N7I £ 'o%)46۶cNS"iŒCKVX^XE}%LNt %7S-?-< F͂1K" 9pIeza[ud]*#LJd*BmXq|Yb`9G ˂RssLM/~¹lkHo%+~GĶvq[7ӂ1KX& MrRZEp wM!%[R b_E2,`$܍$|{O,%<꤁kaam\DRbzOƮK<_CʑP[VTp[llUI$`IS}}sLADH AD x.d)+K8hhq77 œ"e Dh-=0^± >ߋ4gz|4Jha>xld)1v $nbIW;[ @ns e%-0a47zw[bF6WFtH7 š#,J8DUVsHI)~CR-|X~Eƴ!$NsOz %8; &Ayq_l#b?4 la"~PKP/ \LB)??5 Y dr]v%{\̈́"˦p2 \MIH s"?N5\U hw^z?,FU)`-X"TMjGKq[PSBx"m{O,"$/Xl]m Ɯ"Fr7I -ꟜB0C~n5X: ]G﹋e)HZ3D-0˓(ΞI 8dwSe!qs%o(=sq0165 P}pTM+#U%fͺit1A@⦭UJt[`(|9U7h*3ՅE3d*Aԇlp&m}'v7.M̫Э-c&Xkğ5kY8Vxuت*m&(~D/=4H((OGN\Uh.@I`m\|)]|>o~ ?]7}Nx]<ka잕0g h "ĪV.@$do34v<ƅyda,{[nB!iQrdbМtII!B6*[4%q<_sX#(Ĝ#,٥+A +4gYHbyŻqq5B{躰*7#7SisrIBAK5*75oY8!,ЧW- ʙpUteରʦ0o$ϥ"_|4К5U(e>%vl8M+ G\;1xF$BbD$J=-Qٷ)('a'e\NTVpEM^oZr#zW:|bYF8tF?9FXݴ0 FJ^X#sWpbKr#Z46Tע`O"itp/ SMrAd"ә,ЖbŮKobKOG"y7RR8@Qy#}ŃcA|w_G{Wj>JK /]P(UJ "*؋Ԑp?gx/ qG%v/'>W_R֘N ;%7q[8A2ya {i :.R[a}Q OdOM/5IǮ8a=e"s/\uLەucT#^PŇ= Y/j1~6IEUjwk2p.A!I> &[OMkV?NZH̦|K})o9a ;i *B{8\!|x15x}nB)Ӕ^_0QFNAߥc" BR!0-{=-p',nR"p 7MB*c{ *dً b$""aV)Zײk09ͣ B7Ie\KC~]Mus߅QerTh2`)0’ Lq%~Ap#ItA&7__\ȚvfRNo0Sa? cN,gg?5;&.>@P_w=Xq` }Pw!I/R#sIVC)2.,zqϾz82"#ȳY'VHgethؘԾ lXV?4B(AZKnܵ$*,tk5iY8fCE %/LzHC[ MvO@⮂̔}d qm=vУ%$wkV}%۠dAtv9\pZڀ1l\f?L]s Fo [ ->[HC$.G ާFe0n1$AbPm& FG.X.¹LL~.U)Q@7 3J[mCEK6wZ",W)\Mb]O/W kײpBնWLÖebXGɦˀqq&Œ2" \[3\NH^ ^3z/`t3Cv:d~+g׸X# 9FXBp>s&J/?P!b)qJ+3Լ>"P* ~/]BoH\ђi!Jښ`h*&6U\nV(K6vu!D24i!)ae~kwZ^X^¹ote ϒ^d!2GJB\ hٗ/$]q 40Q Q)HEeӷh6 +YESQtMqr. F[ ’̲՟4 }n=\8sFZ&F`D6|TFE$M ?ݾ5:Ҁ1)Ěe D6q VH9\C~R< |ƷNObV{5_F!)1X2e`2Sx(t ᓸX?%qx`4-d !6Q.5DDd rZ[S^NFM*+p)[}ي\-^}iቻU)^ 5q ְp.Bixu7i=N$2sE`4UllV{7r s , `He\_eA:OgIT٣l,@?Ns8<7) C^8ok?[8W0"Q۪%Qz#O% =d-FeoZH\JIA-r8nՙm%)lsh׊kX <ךX'2`Xu.)/8QI+be,^`ƣcqP*7i`R7 CNs|wDb˵)[Me@XS`IѣFO M!HIQk8W!"K8MnooTpqy?5f%- I>`-/~¹ue(7cyA<E=_\IHͻkDg̀P `Xc_<6k˲p,A«RfbpAoؤm(yRfpJ"O2pjMAlֲiI8Wi3p$*~.B7 K&wSDZ[ݭ9Q$/a/e:Drl7L}6ǝ6i\DOR Mb A"N¹&s/΍ m[6 k\I7HT2 Or5:_?WOL%< Dus7XX=@3$Yi Tmaam\^cC1&I5 ؾ I`,1i 넖p/zk B Pl]Ҹ50@ o\GM$.;7KR٩Uf FlQ>X> ܀8Gx+u"),O%<ߍԾThnfA~֣M:1',+E{TКMvjL ;͗oDKϧb- $V"z[WkPznj}Ji@%+saiҸp~O/,IGeA jr^V6pBa`}Ǻ]`D}stmav"5*2-$MI"ms#,/a/m\*ٝ.Q-D)—K&WMDn'X(F{ɗe bT)dI Q.ls#d*/a/m\EI57EoA:x9;Ma4O@ٖ_M2?fkA>_Fj&i8 DĈ/{i uVrx`yKzrkpx}oIRqG|śs~@ S,k|g3MY3[Þ gS6 zs#0x!_-j}PfH@7X:e/ VdNX>¹ 1\HX%k.K Ga 35: <=>i<șZBOA n`{ht F(aI&tهg?k.TD[ =C19p`{hx_\2w ŶէN6"F$9R+-s bZrd_nA#5 d7й¾#{]XMXnhsQueaF7sLam\pFaW:D2-ϏZgSd0`Ʌ &(c}Fz-*%T̒; ܼǞ'nais k ڦ,y:"pոvKq35_J*HDlgY` ՜-V}n=\LJ!OxNY4H1Y#fx(vrB):^}.k%_,Y*Λmr ɾtH)?1* i!qQkJ.\. .^ĺְp# `# e]7 Ì$'Ҁ1P%(YSd`ZUWi 4izJ sQkx=[bt˂4i<-LLS?EjoY8ס4qD@+FN [ެ)Bkgu\mщv),*J 51+BvREҏWU' $aN¨x7-s:iπ5G>sҋ԰߲pCE47NIg;B" |أdKNOm$lXz7 Hget^?[QwW;xcC5tɕ7ǶFSesǚ?/9a ;i *M6)y2Ow >]2zxtJ ҂1K s¼m9Qi߲p#3^,IkeT>X~7т4#r( ۥh+M#=sɉ֢|%% *傴9iU`y]`\\$]J_,qƴ%%}4u4.B@q HeXA`X`I?ޒvq{Tb%5M᪺E)rR51CjG8Wʒfa!]*Ob[q aZH#Fz- *2M : ~7If2@-Oϸ}yI5",sgAe$_P#Rf4m8Wƍ}uek/w^q20cfeA ,=$s-50t"5cZ8W[g^uRy,Xb2ߣ 650`90FF)$Y,PeUOFۆ>- ^#oƉ??kzk~R*~7$M[+*ygb GǴ`ҼMRݒ:rb k߲pC_I.>Ktf.xuV8~4N4Z9FXi!~~O]s~ҋHe\ƾ4gdDÛ+6A1lAxxA0L='_A}ae`N]}ARYîo5.l`fJpK?U(@?PYoqفRE=BqYnwSaA[H|=(9]."rb kI8 DG N+ZOm2c͂NKxq q*łs~ܛF- :̎¹melJq"}p248tӤ ebTf9A{Xy(%%)@,(|d;Fi!HܗrYc9 kK[8]5{%A:^&%-۸hzė{):r`>Ua{H_ x֛6*f7Ok2`t J=|+?9\A/o&Jrw~2K <-׉)J$9DR{a[upmwI픐/0^^K"e$ƼS0,Ͱ`NU٩+nr.am\d؆wLl,nc:|bƼG'vrhJg9`{6ğ5 Kʭ> X^#8V<%q< !R4`|K05>N5\n8lv8F~ƈrziăa0@ 5 ְp.^O_jX%͌[si R #kԈ ̀aeS1q3Thr/g}Xz@UR!KڟÍ9gi"F Xp,k9خĠ%Iat̵ǡ]]iR#B F +Irׁ:;A8J:#F YA|eK\11,uCƠ dF ]B ]4.)41n;Sb $tgaK¿]˅'H ŘY貙܅ALp)65$)CCٕ#-$v[4H m;ES[A;D?'ӷί7ВT6mA[C0~q׽z^7{^Rlr@aAz(AQ9=2`Y,5x{e@ oIʴ )g, c !H i$~3KՊa*c^Y5P*]2`M>iA+}!k9ս8m)k'h|_{_]&{4,dLaݑ bԽ)idgٰW}X 54"Ϭ&^ l_*NIC󳢰s|| I®_TG& jpѼwmWL-i kS{,O5-r?( sI&ހ`Q{X88Aj`ϱ%Iqx6g@3` h,v38ΆY鑒 {Zh0’:}}~Vȸeᜇζ1 T}8w26sIG }mLM44PW WVȐe-d}Mɍ,vHO.i X8Ҁ =VԚl1. ,P/i"͚kUIaa?=8F <}<1j],3еza|3m#A33x0Mnh_{|].>1,SP;rʒg7dž0r|&ou4t]I0|\~Yfȸeg.nɦ$^>hW8;D`9<ސ0vqK]Es8 ȝsߌ:t8DEnHÿ1zSZcei uܷ$̍]:z,Ī 4 by8ؒ#K{haTn4.##,i1^& 5-Sӯ, l}RsQr#55.-Kd.0’fO\j 'ğ5 PfNj0x1Ғ3cd6|h|1wQ46tT6k!qKQ9AxT7KɭtHl9R.ĂQ6REs=kɼٛfc: +>?gg6{v\`"´n¸f?ȥq1WuIɃM >Bg!Ɵs90GB{U9$ϚH`GnTkgOU5"FT! Z Y3[>q(q9skotu5ɱNZ'wqTHjiL3ɂKӶp?}\Q㖅s~#q€<mw:R̅M@j`LaI㝿-VksE0bYhɴ#^cJq^ۢ{#Vv/͏ߡoÍI&*Zv3b ?gG}lA*tInrD )"c>b3(뭛]CW唦l+@dq P VpA|X%|'Md3jTNYrE1rϏ[i'\_ P(_r MƟz#ݸD$<Њwgt5(eQ?m5k2O}MH9s KMw߻zB+_k4t^J} ;aBjdвpNB͕'i&oif~k5Mu/)y *PEqKSs$|̘GNGJox}GSC=~#"|^I: t11X!s|?l4%&At ] ? c$&MXPK2,Lq/1Qsj4EE&ѥA'wpFX [ٖAz} Ḇh9! ,;lr]w Pţ G=`h|ww৴FL^ĺZ{eˇ_Wpp΃ƒlLSU"ibixTݰj1`%2*s<b)kdвpNBfċSL6OZ/3ES+_1ܘ14:_8k8d8f/ /9%]Xh~ H DmF<2`9l`+52hY8'7qcHn4=I\iD׃WdDf*65߽Y0$^bZtYRI>%a hflBTĴȳ$=nBnKB0>!C~=DR@\(4zFaI7"{ )N\|Bb%Ԝɾ>E(⦅?Ы̼H$,Tj4 =8  D3c4ZI ˫+ kdܲp#iR}OFc{xٖМ6YpQa<~V P6O&gIu?@,.8㟺owwSdK`s: IJY"sYm2Xk$bX.&D,n6`XF\YRHhP bݗM#.IB'o$lsÒ(#΍ -!::K 0WGJ 6l`<B0k9QMMu{X=$+f`WņӤwkLFU! r. YBto.p3d>l.t+ĩTL 7fO}~u^"xnsFJ*@{8>?g|N@g;4!Z 1UĬȾV"Zjao(HŵoA\l)qBj(D8aCx^FN>c}qt4^mr'b l!K*Jkw!78F8 kdܲp΃("/ɫKA{E]mӵ)J=BbLOI\:,\숞>.L((mᜇҙ~w@.3T!6qcBK$DvZ,Y>cH Eyp55^oKXٙ ̸h`X4:4B%E-+PpC=[XdhC/"GZR+ ʃ2 h\fkx~2Ƞewdܥ'?eI0d3Ne7#md0TIp'aG cȠeᜄꪴ5CoLT{:G7aCɄ]D`Lan$Q|KQX#㾎'|6%纰e ]Phn6`X|O+rtz>P)plANfF˓5a G]#P߬Md %d] ((mᜇ؃2(.$kPᢻ 6'扼5.^@¦\$M4 b5-1e]X$+QήVL'"uN.J.M/gA>5-HH[J-D0 TfMPq z!t UJ:6P.ſA9 &`ԵbEǦ(]Fd FV:_d uIYس<8g` G( 2wRC)K2$rGCn-r]Cd6`_x"9z,Ÿ "5cZ8gB% _݋Rn3,$}{-{.ƅʛrnףpy`Y9_ӍTl$*9~Q5;迼 h.t%]ƭg7=~~VVȘeCtSjyfDq! v.S[`La 3 B5 б魕DײjIF?=JvAZX cP8ƅ4`ص1e > NM>w|~΀S2س~=<$~ Fqd"Kw @lu>Ϡ5?Ǣ4w܍oµ4 ?p5 _7. V75b行E["ٕ ks Xආ7\,M9+PpNBp8Fk]G-<[h8{BS8.U_bK LB5AS8ah,@ToWa˴~g~~\ĕCCUA0j% jƓ.IH^gŠ3h ; L,@B"N,% ظ+`jb_ Z(!KrxrłBF- $T ǩD+Hf\_gy40cV\hclLh䱲f  Sjc@cMZ,dRK 46ݥ<%56PYÙk3k8F8gy-(x$̣|m3؄8WD+N6k|$d02- Y0Чσ ( 8n.*Zx;~cʗD낙cA,>ԂG6iskdpc>%/s @(ǝ]P B'IS#˞B!N%!sZ}`d}cb?ϋV{d=Npu=:DV*Lu$^2f[R!j9ͫVgf"}AHwbtj̦vf:ؒf&,lCSc(mᜇ6*- Qw%W|ӀRa׾>ϊ'sgw0~5a7oz IhbE%ێf $v ŐVP4XJ^]ȥ w[1X19 >KaC.>$6_,c2pӟ %_gr:5"UI&cӆIAȍLZH D҂1\ L oKtA NaZYd@bZNֱleRgLpgit/ k) zW̺ }9韟)xtbx &.GXn` ILp K:p/]Wm]SK2V- Uxz' BAe qWTJ"qd9#+'<#У)hZ\S2$rItƴH @ClKڣ#h mᜅЍVL*Ȗ7 6w?ቋSұ]:Vb$)PpNB8/F"!% lc#` l@F'4Pjey )d[H dWrdlre|ؖ RYH|雕ɋ0@EvsJjp)a$t\dݪg5[PEǔ\fpS$}Vpg\*-W~҂ǚ4 G1̢$ {RraaEu3 )bY~ǛDN#$ (S#ژ4i<`,r CD y?iϐL{8{,R@f9)YM(ֳ8[ ߏ6 ,=D;jYN*2j8gGZtPa%yI\ F> xf7uGuYX |J!`[zcjیyvmqI{]{ע$gŔ k؝, ]U,Ƀi (q9Q/^D.|!MbA?La4m!#K0`l!orAB$2Yj LA`46­ ^qRpG͏dϒ}YIռ15 Y]g (f% 9Y1bԦ `e>>?t[imsA52l8gw^>B~VnwE AΙbKF,f>0’Li!1(52nY8B#%<8]~c[f:ƎOʜcZHLGH z. DK"+ kdܲpCs{U=YbIEߚ< or,E %h@{11ZIhвw. ʧ[|2qI;bzk|W,$J-OIgYh(^>((mᜇ@4/)S7hBp'|+$`D[=k|7q#,Ae!VE,;0H$?FDu!˽4 YҨliwIT,|0}swbI 9h K┐YE Z,8׊PBLjt<cK\ a9 b+dK ^f#Ο)d5_^[[!pr vm A,J pf&sy˃ QȌf+`񴰰O Rp42JY3PզduZdf]ڛN cS}WH\V ;{- !/iz /1X19 ] R2$_xΉˍ{}kDŌsdl}y'Zd+o VSѲ$0 eSdH\t䟒.՝,t0 ϊ Yp!xEuEK%!)T6yT|SIs"uKtfB⢥qJݿe'}sAYAXA9 4^#d=yetcZz[`%>u݆'V’ 6,TF1N[%+DZ; [xԮOQVx'͍}K#:c=K*SBla_H Ei < bxe%ݤ&Ȕ>s^kxbߥd^- 0ryfm 4/&+l&mIMc9xνi2Vނ 儆kl4ac42DY3 =hMIwߝ X%a+vk8J[8硲lWl(o`aV#8γ 6n }a Lq~~9 F&BCsܘ=%B%X|_/nG Ǿ)816ᥦ7f897Z5ל[M ?G$>sӸ6ͭs-y"- !(RCA1 vsz[H( F]}9Ɣ!BsZKݬ^e)AZr#1:O ݸclB$gEa[yh{qT hhtȘ ,ldkX?)lhjQ]Tdpp̂GOIvgPs`gq CgZc> f``&r52jY8gjGi.YSOu.Wq>Cq:c %\ۦͪ .?w%{|oS Ƅ/JwTu\/kaY0ꆽ_C60&_SvA7 ,Z`_b>N _%-A+ڱqZȬY7IJ`-"rTh Y?<_>V2wZÆY}"ĕKr0-\/LuQP6pLBU ? 0p5q 0/Rƃ0 $>Gb) i\c meܢ]"-P$qnܻ`E1N2&BgYXا)!#pniywp02֙Q 4HX?{ݳH}c5Wa8UƸg)ڷF1-Y,h`oZ b\(kdԲp"W_?t:4'Ne̶XL){{H& YpɱfU9pK·s.|'lwqZa$$M ,\q!2F3 .={V*% FDlƙ 1(nIpYZRk Qs?ˇ0o"52nY8]ѧ ܤ; 6; 78FW+uS<$Lt\d bH G-,TCZ8Pi$E.h[L=e6uSH&Y7I%5 rMA1#Y)p06u\/C(ePj,#f65nF<+Pˁ0~ ai(D[8''>+7Ib1pxikr*uթKe"Ixy ;E!X#sA%2xbC#L=Jؘ2W1Wg%҈A8,\‡ebE` Y)"!VgqIXW e,lFsP цE\H X8L1SC9fBcMd\5UzQKcoZ0b_$^JiM2G^sȸeGvӥf1?_:XUC2>.-~nSe%q2Ce(` h ,s$ŊуhNuNp(:X@*{'ebE;5-kI?ȍ&QO]ð5 ]ȹc^鴐>PQg VW!1VB+nZ3/oi# X-y*vs7{fIX̉\r[#̯BݨUE=QDBX#Cs ,3}m$X}1KhSUa`>5;7-$QJN'Pwp~@`-'۷Z5zw/[?, /~i.TMi@iBz>nQ9 G v])5΀byI&!S7f- $$ЩPo Ͻѳw7{Nɫf8=Dz$8 &q7={=S^zSEVϊP)p%im* kSD}!q<&6SA;4%f$r|-bT+k8D?dQIߜ̼$LGEvLcDpWIU 67X#+f!SR*ӕGuBsFa Gi 7IB‹bv [<#'_!X!9 {+ŞYK"'#6 o}N dSc vtXp,8 s BHݒ;C E`ip|mEӂ||~6I#7,D2.CQF- <:nZTrNq~<V6̴`LBcAZQ7[yh㌪Xuu&6[0X0dD4cE81sq*Ti!RҹH >2`6pL[=ZloblT )ix&ÖA Y)$Kʍ5z&aP:Fpj@ªO rsttÉ"s *VYtK{Ttgx7 }[ئq466rnKBa_*o  l|Y~w I uEuR6>NyeuQ~GctKRr&pmsșY.y@H#2EQl~қ ͏DI4YOMˇ0*Ej(ʴp΃'A_yΫܨb޲wwljdOqɛ`LaIHZX/S+ kdܲp΃x!us odb1N*x +a,:Φ8nKҗ4w|o_.& R#crt$(Q_d̵ŪKkIq4<+|K:Ϡ_ ۤwr^?Gǒ {@yj!'BZ mM7oeYdXY7[y2j8gW($˂vyk҄eW Y0UIxǕG]n#Q9 ]  n$ۼo| JmS|B| Jpr#u Ϗc~N"[Y%܍e h jP9F֪Bblk3[@:rY1 ZIdFdbv]d9ꋬ_5X@^uS(\_BLIg!oN̡y<+n4p쵘dIH R'ӵa'6 3i#zoi [$%)D-IH2 k8J[8h*nRHb!vvvx O&?0'7' )@dz ?)BFM &!Jg;]t$)suKZw;/BDe`P)]LWe eļ$qy7C޾弰ϩǦQw +pkoꢖX52jY8gR1AV:Nv,fx]ңz5,g,ldpaɊB+nZ35ޖ6sK Ή9Xf"F{uVy6OPJnY`tA]bcsKC'%7 %\7p3 _Z6; ,Qyq" Xˇ~ju[ypnWߞW-)hFV"R6Hybɿ5-3AzWtHRWz$պuWĕWRٰ$뭎U52f8K1Ȋ\\#=7.U8*Si@0=Rzrr @g~΀Vǫ$\Bj1" p,`La ˂qpȸeq<ލ`GJ"$^J(O OȖ$K oaK(O -8͖ W kb=aoj vH ő- a15-Om^Q^XJnR* 7nC ߿:ۀ1]`ojICvWZ\`ZYaS c۴i[k*{ɟ Z)Ԃr :92AoXw}S$S7d+'7eMvmE34{pKpܒep!WRn00NVvv36 rЦ"FmN$疔)(L9L= Sw K'跮Wd$H?>!I 7JG}~')푩>Xc נs71jP$=睄Az|r@H` ZIpR]:uKn.l9~'zOBԈV.0X/M=V1X#s"\a숉0K@# z'4j< nXđRϟNus~6 e=~BC_S!sxkĽR-;H6)x=:I]ߛFx|"׭xc4_, }b$(J2؏)Vn{0~L A5ӂ1}|~6Iy-|_hbPȸeGJ_K]uUĺ۹ڦqj$ e%SZd?|+eU]8{pCLZ_\ImuDS|?d^>W/j>a|!gI* <$\>p((ix5 w Jڇ- [G*4~#Ȟ)[l6ks]fPz9.Qk$n!R#n)*!,FXҸj&_ 6 A-)*W~GpUM$u% 0i<15 HA0w[, )^8)u'6Bb[" 4-Ja4 Po˛| Khbث19 蘷ߐoknibF Q9 (FKızWK,(cF&?=~h nk pKPXf#J!X#s\*R1%z%_ؕ̚ߪo,>J EQLBu:lA[ T*Ȓ( ;n(i lK R>%e[,n]QR>s*Auf$.BB Q q`ǻ%lE6`HMRTF"_\ "5,XcBYwJxuh2wp[`hki!8>52nY8l5[g& uk}aH ʳi4 $qJ*&ʼtQ}tAH#c?xewWoa:;'-~Kutˀa7ҒthY.2kdԲpBh7` sߒ=ɾ;WT<ُezhԗUl>@f Z. eTbd) kdܲpCۏ?qS-e(I*(OIdߣFd=}+W6Q9 Ie(d]>MP(eʎi qUFJ:޾B?q!-Dɇ0ҨRp2p΂{eD%R╀$ m)kZ0~|-$TH 7Hbej! kdܲp#/I7MhI+C|vJ5h>o>_'pc:A%,Kg` ZIeȔB~ۼFϟ?FskD1YH/%C2p;(]f 5z efztd 품;WՐ; a6{N29ڰւ5:[8g奎J}7Il -L71.YP6 s!@pyqɢb:-:Ga$ޑQ:iJ E&^/ndF^VyYCd/i !=t^ 6ݫ8,:ii,(qo",%,>E-bt3Ǝ>m%|J(kx$la[3|0s&A6  @ Ÿ7j$d _}yp5-PR4VqK:Y?궐YO{zk2j.E 4`՛"5,гLs$*~y#q\z{IabFm)$7 [ɂc;"qF w;dX{Yңb/AӉ?0HָQ A $ -\#RAX#s=lx7$"N4~04Vv]ۥؔۀof-lѕ׮iTp2pNA?0^Yd^#6:S1~0`Xa#[&~W_.'f ItƨOj#U )nEEҽA>ILs‡. ]ȟCW*5J##h, {*O:5,1ct7hzw#Y*!Z8=IH@iRe"m*]lOQ9 Lhάdomly vn5=nv2 ,؅Z.4`.X$]!2j8gї-j[O<L5s4ŌYC&ߺYHtgkAA={ ơH i ,'uK@䇎-`kݽ8r|b]/I yNY0^?,wSd?:z^~cO.0ɴ`M$JJ1~`,z02# ˏZc, ҈{Y0&9Xd. 1)Ej8nY8m~˖nn_Z-H2Ji%ܚ|ymu5 3_:XJ&%7js'O < ^M hI=ZB; 3C!X##s-gy>H7)H? o| %4k\[n<Ηx15SࣰF \dx~1[hm @b%r.Ia \.E+k8F8gF4ÀOM/lL>c>?%gL4d7=BS]aC;"5 # sb*JݕBbF4>pg4j}^An( HyO ,Ȉe 6&6T桢VچZyK2cK {(e3ugcJJ&_9M!1.',$A '/r`42B3b,^DA43pe]txJsTቫjS? t٤aBj8D[8'{ƴkp$ZLȄ{e.$A $ ]Pr)OZ:/"3d3>5zi>d HɃÍ-U$#Ԙ %YzgP AcsB7G)*HC`yyGR1n[VX4jY0ɲ›v[h7o8F8 kdܲpCInnQAQreً4ns$߱;Eug\.Eƈ e@PZ[G; !52hY8'!ji]/daF4TCŲhE?"|{7|մ% yBk̰b Pp΃OA'37;sv-$9X[1X2C<7~u3Qc둢%\X378^[bHBb_K3ۯ-J_ ((mᜇՒ, MI2/y[ЇHgE|jj,l /%e!hTyE V֐JpR:7F %Fl9f>?o40Kx3Tp2pAd s ؠ3>QSxD藺xŘçeNٗO 1 sxS=h,A^]JN^֋U!`#t$+0"5 P/rߔ2A9ףnxIo)VYq9>#<-=}fJQX#㖅s:f8U|2K'Q/K*#M?BH)CdY- ]nP1X19 =;^V-I#. KmO-]AX#s|5w#ǖЄlR}3؅|fj?0uE5>?.".ğ52l8gsAX))&iyt=;qx}_u-;s ]vhA6 o.AXA9 .yT!, GZ?ʋX\ ^KOaTImaa'ȥ$D@Pֶ\#AX#?PHIH\r0W8gҸ( 4z,ІQvu N/,%$CG7iPF{~QrgnWZryb [Xu3.Nk:.?"[66=pKsESNm'if:7I#}<>>5 ScI ZqwR'v-a 'f> e!.7JmB Bj(D[8' BbR~Hf݋zv_CN4KbP0&Ay2pM ,k$ma^_JpRAۚhl ?+Aq梲`(cz0Uz#3v/u A~ž/ǂ\A3xN&X'-_d$6Ha/PAFF- ,2q%7Dx$M_:Jܮ ;z+\)0 %nSPayR6"FSPm#]2aVMoQ} EG'gJkƇ7Ǟ+ fF %Y 2tv,^%>H'ݗ$%QBu$]KAX19 b+ӘtRLF $`-T݉??CPi7X`LM4ea -v e;hdܲp΃b).HdFG Z(9iʊH\Ǫ$LEX+k;8F(TP6p΂a6y3Kp4/AcI T/ NZ,I53-T؇0\sz~rW'p9x2N@p.3~w4&ĮL`YeZLu" PZzir<,I98^yrN?޹~ԃ_т4u :G6NX˿52bY8g o5~K 2RgyIi}V[ RmqG9?~X_!s|p|nꝰ$Q37߅?l8'kL/ KRB2H!#Ej8J[8k\%$=#1d+\NCN}-9D#XGK.  :b+^bKx76jJ%ϣ.xb- LɥRX3pQ  s r1{NKIc.^\Xa^LT,˶o_r qw52f8R&7!R.?ѶEld!5: B#%;߲P@[GmQh/qqĆ8HDe,Xu5[i8w%||%AYQX' #4n//~7X+' g^e$ D/ oc gãfC63b ?g5xJ_qcK|b| [7OߪiA2|]ORBv *e  g|gN뒦%y@1+k6k>æJ =@\L1Bcj`C45K$JD~!ydbli^eЅ}[##A9!FxBu ®tWY8c WZ i!Z׺|#QcJe{F7{~`}J# v0kB2o[HKX{rEj(J[87V,nFvΪmKf -c Ǐ+1V,snRȒLmQ\'֍_XFO]xdB$n@p:Mmw4) ,RoR}vKqJ,,A20_21>52hZ3 .\A}G%];ӯʏbJ'('0c O+XQY,><*mQ"݂Ȍn#}nl՛ :9I;kd9pŧR9 m/RRDbxG.Qa#(VkM!Ȧ XRxM6˃0Cjd4gj1U%tSyZɔALƘ,c)zshgȸeGR nw<慳 q/H,WN8­čm*-ޖ4. RCA9 c_x15,tnhQö} \ThLHtUkX颺j`ZYT>Mɫ̆`ta@%W4Ŗ-$>$Ͽ0y@>q(RQ96/lt$ӥ y n,}[ebF} {wdyX?toirqfSH{(OWI$$0X҉UsL /~{"Ndk]4.%%E7*9++y8 %ö-ĩ)A(^{jp}ʅ,߁NC5F(ⷶqO\rbTkןW|q'֗h H GfhC%52[H-+Y''(MaIHZWyV l1[poHdG-jK~Ecm U\CF Pq5 kK[xcu6nUY qXAU%Dpn`7*Ħ Cd HeZ!Xv&.Jǡ)Ka!qu%c_CU kIx- S =o2x7ߗDB=w~4v+,vMƜ"FiAꞂ0+2^"VUm '$UQXe?aa$FGms`%U$d FK^X#:!d0:{Q6+KZҲSYBZH)'t&͞X/-b~L, ixD&4݇ +㡞wdjHF- uKDWRTO܅'.eǎ 2*bC!SFP|Z0^>lI+RF OANX#ݦ*R^.]-y!/ޣ± oSNG $ fbC=1Nv^kP"~.K|ԶQu87Vi>s!a4[9 @/R^k*ܒ>,ٺ38m$15UWf+ёV ~҃Hi.+3u@A+KVc)IJ,hh\$I Ɯ#,(-L^K5oYxC̞X,iJi uaѢ>WҼ@f;ROpef _i!NeOA?]s5'61{]fD=bESJ,VB~H52 Wzʚ.-a\rZj|,s|| iq!i;֛X:H5nɢ"d;cP0v V9ژ1\40@Tg  ! .fJMÌBF‚5 ,sx)!GZlX{ZoU-Y /Eps4 lm w-T s̶j/RC^{w;t-s!a+on5EY\i /B1@c"f n =܅8Fs#2޸sKny韜@`fN14[2s73kёt#oI* @WK.׶3~!m ^hޗ›RrLAL *3'6su3tOt|HyAQ,,8Ɓu֊)d_4`XE 샯G}b1~hC[x-A]bV38%DYaR{M!E7%w3 rKPQǃZŚv A/n$Te"4[0aI奭-Q= l/RC^kxlD.N6%XѬ`߇]Z*~= z"n(n'鮆WkV`d{ t}1WPWdCH\, )N mOUxf˂hœu8"p$ָ0Ucc[^ns[#YtW0b}=2o 3%ϧɜ":)%R3:-$1lwG|ib rPpmi', B*^Q>70yKN`9/G]4qHe_QD |=o5pZCቛ;")i(3g vvދ`0j&$D<$B} >qeܰK0d Sr-V,…=1.5-/zF䜇plV.tTVc3,)4+6S0yRWxwYזFiȀ ^3PODMoLdXoќ8FkE[x/B V;F $x,h$ъڢ=c%%5:ӂK-OZesc!/~{O+@A Q5Ս(!\?|4bMn b*% 9Hְ:Ļ׹?y$?rV&-z9LzG=/Cs Q;_t)pa+ӥ,<>MةF"#k̇l!qx ]>X>k ϫQJj'_k*:Y鶐l4uK@-JeO@IEu-af8 ݧZ"'Ca2@ 8%=WEN@)` {h505*_L1uKDŽ+?Y*4HE&)@1q ְ6^jsq;k"Fd% S?m 1׆ћw8:a)rvʎ4*yhKxY IN{9;qLZnfM[CBbuےZZ9fsV{a {i up/r| >nUC!JYΏ+ rpKE))$J=a y{|}OA'n04 ͞u`u>,H9HHi~ *% -'L.6/HcՔԈ_3 l<|n X91t WNaj[;ޔ,f£E8x^0 I o=ܘ|~IS u'QvZދPd-LvÇ-adžQ瘃|ya {]uyp.W,,X[UTƭT4ީ(%mTsr^PU){ EˁRKbω ϻ@]˒jDvhܠ /]X2IcFQ)}V!QJҺS0G-$a8Ar"k QbےZZ<ࠓ!/m}+nXl0kْߍ9zwc}!5+es`%0؞›5mxB/gF_rdF0RdzⰉi=5*vӂtG-ix38F k߲^OY"-v o"/^*dH\ID[{ 6>^j/A7RcKq7Owqt3.mN4`njSS}ZX`9bkxB6V#IJ#F+Gd &nnaɼyR~>'z*2] .-)A_5D\lWbMZP-sLu!(H[PiQ&`22Is2dE M1 kmipK:)l%p .k{ h?쨤eݒ B|GHmJ㫕ÂmB["YjoYxCI7x_hP^7g.K-򛔨zFFS;atޫP2I7):CW$X=e1׺5KBb Lz;c _ְ^HY<姄?5 E>O$k?ֳ?p=W[4PBjiYx/"9:Y(9DT62H;'od{J#NwObo 9SS~~<"?ߘ[ؕ-a98Z׵5:B.)z?5ԡIS# 'R>jk ")|坧֑: H2FP-APqi21p44kbdϴLGLM3у+ bb~Q0lJog #a+P:6K- jL 6Gb$#kkTn Ͻi`0>ʶNXNkzVC$.N-7K#xlghS\ I,79 l!~)15-ߖ}.g[c'l0VqRX فY$馁 /6pmOAa;a ( B߭[Z2T 5) 8H@RdwM ƜsHx%mYzğ5mxBa"\C*DM شm &ĕ[- 2CO09P5ƿנmb7)|z+/Pzmac.$6a!4,bLxn9$thhU(<4Af ?%n߫v2߉VW"Sb'`90PrcbD5oYx7ecPA!a k]9-HGO!o ĪWؒm3 %_n/a/m墓~.\r56Bj $Jږ)X*=Or^`3{};e !J<}( @b6lI!Z(l)??+GxBl~O彭%7 )J*~9bs dܺ<$E5 9lI8l Dp)qm+`m Ϊ=$ x#16:!+`jD/À`gp6v,/;A- wq>H4D2n)Vc6H7ZJGi=e_=;ۋ5{; Z|X,Xl]C.lj_c|AL" [H\*E Q·\~{L:a ;i ULFBja'ICk't^^qE"VȄ}FͱVGŷ_m zc bU>{ ,^deQI)Aq `yTS7;d-X R>H!}VT*nO (Lc? 3+ٮC# %1<ޔW+T혂coE%˰񬃷[p7;v-w$%=1 p0a RĈi +2^oxi|L` E GlA^`[HK 43-$3~)l$aB,`~l,쌣DF+s-"aB5?^dڂ1 %] es ^X#:j󋔤)(laͫ@]b1Kenj=,sxix?E$O r!5ryR4`g@J H pFW2D-?d)??-4JgFO 'n X裑:p7akGBF kkya {i udX<P Ar[hEvR:r(4 s !Rȶ0%p BT2^p̌=%`oz4|T?wa:Žcj dč-l")bt&}n=xF57[4XT"5eM:4*0`XvN_kE[x/B/B3rKøI{ck[=4;Ɯ#,ozABz-UH|H b,\\|NR 㛅~[a!$jzq >H]"t=H.o YAU {%>>~OfZ)>Q.]~~V^h\.6v,mr8>ݢ([tE5$l!zCgZHPsc-/a/m;t/~*G-.Cf ݱ-ad:-4Fsvza[`&Uс]c X)(M >G4.{e!qlJ"[6dڜbUC:a %HuZ$ޤ1N ._,=vԺڡq13-$1K:¶:=g{a {i uo=%pgd ̊2y4޸eKИ. "' ԭ5cRH5M,5+5`Z@&' ^Ij٬Atl @+0p3I~mcW"C:5-$6SJ [mSbA9wV]x1g ƥ2z+.BN鵠wh9-c:a ;i U ka{JnW/#۪Fy ?+ʞRc7-$vWJ&6>DGN>sES -=$׍Z :6 [-LF KdxQExaw,סD>\D9'&]I{5|Dyǣ}__bLMɍm!RR)'< t_$byzJAy͙-O߁kѭ1ع--$ꨞdm!1g{a {i up$‹ޒBޝ7+!>:NjViP [qhS4n'amὊ`rKJev ` x seC9k\)eh9>q4oYxh rjDQ|Ǿ'ho=x6xkD~b=,$t._F{aL5,\6dNCNӥƨ|bق_%E'Z4(ŸbkoYxCO$(DCm50ud&YENP/@Tpqm_m f /uvO}_`Di0oS5 6>Sohi:? g_zHtg*/=ȟw}'{mAXs|~ B(ƻ^l - u0.p y~ϯ]޿4J MWSS&/|M-){@W 1.X.{J4+^jhg[m\6q<m|=|J.;m`ag :ex/A\ ߼^d2vI!5:*o \e"&h_tYKPr"zMմ%?в74E `ڦ(FD)Tj\p#-s3v%g{,!vk?/d m6`(/ YSDZR*JJ*6 Bf~APFz) C~dnwW Җ(\h9(0kˡ0Ic Sc=;v kq,с%[y\O=xC$2V_~*d`Rg ƷX{ "׼FehA{J^YP(̥O/[[Lm-s ޫ%EL<'8kt&r*45VQH3@'UNA,8r^a&3h&)DJI ڮEu4Fcáq1w0Zqw-S{aTEj˴^7VNuDԷ:y[om7Sc" :t6AsU7 c\H ދP)/d:Ƚ;+'n=ֈa*o/B꜠:]]"m|K z迃$h֦Y370%bRO c- W)i'M%_+FH@({ϣ)1Z.rt%YG{lْ%%l6yjhgئFma8{l []s~He]&iF &ثCÿPl×8N.Xw%"$4xc b kIxBAFzH % ]+tE"h+]MAg 9FXKma}AFM CaG*#-{#2ؑ<|ǭL|)ܪōg-:B W oi2*tŎtL%߭dUwOԸ_]J؃z[2rAya 9iE$LGfUnKD.(pg2L.H@ඐ*ڂ=elpN0 L@%TᡒRJ˹q^k-зyAXe, N S%kUJR5:붐SKJm3=QO'^{.&#USpBBhb]$] loU "[`W͞)}]`8w8a |eI,#թėcΗ0bLya {i ud͆U)ﱟWehwѦ~Ծ O z8hdOq%(3vW6#IgVL,8~;y4@L)9Cu=B,% T籔 _fT\M{X{ yĖE`ߞ` hUpGEXb;:2N24>Gm[Pnk53 U0bDVDd {GL@070OŸ;_$Ł*؍ đ'?KsCHiURJ2Զ/3RR㪬æ Nr=tK` h E(UwvɣFle&M6o HdUZc|)-$jIֶPXd)]" 'GC9ZʬR!y=qǎi3!Efu뇁],WNA Wfc!dm -DB-nn/%0Τ=zXHlBK"B`!S9RxB}@؏<ɲ%å\Z>+ MSU0cນ##am>#n[V)h}DP.nEKfSAZ Ɯ#,APA稢~^X#:^l9,$2x7ɨ΍L5‹eZ Ÿ"5oYxC|{VQ|HKfODžH0M³Cx o LM\[<{t] ~3 #ɂi1rAv}EK`d8%ÇKE _E`̅ ְ^ ol{JY 5 bu|M  ݈%%d& l'am >A[I8Mq(Xˎ1.EҸxNCA["":ahUA-Y- o[K mB To ? l/a/m`nzHLD gK}/]qTkWaI%l-MBְ^HX]j% TLAD=J!!nteqe#RC>{AhrVaIBOYKÔ?8[B4 v{ϐƿנ">~HNi mLm@l{vA3wKH]Dms$}zr^s2(d$Ɉщ+nk\dHO Ɠi`,h bG@ꡑ^k"*()V64Ve\˧B{HBmI$?i HQ11v*!5 W!j´ړS2PcF,|7?<}/dze瘁]]":SEQ@3EO ;LĘ%n s^X^{4P k{Nu[͵ės$,|>{ @??^ww%I8(6.U6 _?0K*_p| {bɋ԰߲^vkJ:v588HÚgz8C5+It5RNvWuEbSCϙbWp9$Oq;Bsç`.X.±F=bJޕek8)7b==5 c΁f[‰rAF- u8e$r<7ڝO5&en))p*h{:VOm/` Jy]P#-lĵ0{[`c֐2^̢h%CL xtH@-Xa4%k.Ve: t:s(Gx`֝$$6`2Gz㮇E&KHYH9>?-ڞ[Ky!7-e/Ii/[2pnq/Vrq M  Mp=L G2D!c|vj-:݅mE5WԵč)(79l *11r%URX.ѠEVQWn i!qm%,l! я)qh.z{ ߤ|b-y&ekaz'Y6i,6J S-60Pپ FͤH 9)Uhe6=%K~p.j>, k̞ 3^%QggC; ƟBNXN{DhUX/^ DN5VXiK itVzq"}Vd?;o<' N?@ :6#ܼCϕz7]G[k,$ԛc E/B{n7g:6fQOљxdu0`臄JlmMr\tYK#\8e(R~a 9Ea$VixlHs&yNr8NX#ݦ*YQƏtKp>w$)̥cCNfOLɚL״{r<ְ^׆j$(r'UFW.1~2VhC΀_% ^X 8aZޫЉl0J\t c>8Eb紙.V YDX}dѽ-|us~ր~fDGPftvDAqQp2idcpbŤjsR 2 <4ߘP/EUT4\(TU(P'\O\\jB6瘁arvދF?";GO4运TNTQDIU>J..3W6#rA8ɀӳ@2TA "d=A] A F QKC*rmy 5ClWnfIY[h!loR0hZ09(:Ӑ`꿨q$r=MIK§޲4=( MH'/KWBjGA / J+ D?6Kqp-鵤RRO4FUC$ w$*d>lJڏ(o>E=3+p ƅ%TW& niAKy~5xjl<0o]8AgN *dcF fϟ>!{$S".@ݖinO~m2?8(:Z==ssN=бEoA\Ԍboøϓߏk͗q,dn {5,0w0D[Rsc n"u* R-$CYd Z\He g[@ǟ X4}_4CYk|^,%B`11x5-ס\bdFi1Q (E'vg[Y\onf8[0C&8i!SY>sѯ(B-HRB[IT_ĸ`F(`[0pE V%FMUpei_AJۈ7e\;iZИHH2 訶=qHeq(x [UZ[.2^Q~֭|rwjJ.6AM ۨ ְ^N[:4Ro+>V%h5HW1 0s# C^HcM 6~Ou0N kGfԸ +l!S))/6Pjҿ\/N*u$]]k=$= ʍQ#6|H[zk1'KJ%6c{;wQ]zߡZ{ 5)̀ c}re Ɯ"F$ 䶁ƞ󳝰5bO_=/(gMaVQ_ĝ)i$N hia N|LU[Uߗ?t|}(?7wM9,/Vs;qLA}s ZZ45 ( j{јzk\J涐[Kz9E3^:aZޫYCHM)I Fba FeB r!!- D{ aЉHeὊa|[]M2 oQ6F:2:Q: $n#,|< V6^GSܼvEn2. XLYshĎfJ) 2ec0y} c&S1V\z jBrk X}[7EBߞcb? kK[xCḧ́cRKp])YFz`F0 i1{ Ok˲ZxCB{ _Y#] KR#X[ #kӋ԰^uQFƭ3EmcT<+F߇yg_K߲Ξb|xĖx<梮a,A4kb<.  9l瞂>tZߋڅhVߒr$wpX55"{0Xg\o HeE=h)6hAWnfxyu҄^9! c9 m~9gg.X!}jz^l{H{$*t,*jOJԨ,J Uy±4YWStW֐6p.Ѹ|R|-`?Crh>6c0&z`YCTiSkʶ=1He o v"ǜv FAۑ " 'Ĩؒ5bO`)׷%9g{a {-E+`=$b舗c)4'Dkk1'ʫ;@{g s 4ٰ("Vc|̱sMf{V #M*nHcN3%(hMVHe 5.Yw7)ypFxXP6S`$Q¨00Жx@+]` hUpe-%(wvϝ!]ӌc΁%i!n1:4oYxC[GiSk-IKU1w^zXH[Pk-DrA݇Fz) ƫŸS??Xva3qHa7k6`X0V>mXx` {h %$wi`}G%܉EBnɾQ-;ǃ] stb_Ѧn9~5/Цְ6^H4Z$% #/}qgcɫ'?[F#c dߒ&*xOQQNFz- U(<Q 7rj]ISO#HTHn(,K UZJS-KҚc]I<-/ae>9ȁ'ID?d`"^#{j")3<ǐkE!);+)J9y17,TXt%Hzer?n\b:A$P׶s|~ 21 Y?ly:,B#tҤ  ) '!'1kFdz-$ajxӋ!i཈<..8]/kTm ZmI\?@Hz.25-W!J-+Ѕq.]=7:4y\Jk؂ϛ]F:- Eh+|r+|+xYVLmca9$MfZ9'H[PqgٺؒR*k#W[PqH|e$sRfQ 7NX>{(|ޮ!r%8mĸl`VuXH\gdjΑȮ6E䝒`Q yxI9i2$!4d`TZ0a )Bcc"5w۝c|>#[2%,N7lJF$mzyqjkfv+-l,z-=1pv?/u$qN"Z-g [.z{ \aOpOP{VohakZH\]Kqx  rE_ kK[xCi19!~u3u$}Q uqFy'Z],AכKqc %KuC %CD[äJm!qy$"Be!w:C!/{ ũ0OOo"D:Wy@ZIF굛(]`)tr7X<4kYxB٦xϛ#㌷*<25 ?z k Y-S V -}HZޫP"u2% tsZ٠`F Q6S|~Id>VVHdyMJkW6"Ĭ}Ayд=:aͿ,ݣk??{~k?[x@OzZlƛ᪔,͈; vƟ%mKa|CA4%WkW=Js(GxBODϚ[TzgWMg"yָu)}$NIdT OEya {i umS\%EJ 3Y]^@f`_t,E9ܘ`%$6O){5iYx/Bw/"~DA. 1Ha5񰃤-$6mJ(-4ğ5 ˆzeCM-ڽTlkix*T,T? R#:D~ \d(p"hhƥ-$y۶K h󳽰Fz) uhHi^v1A"]uSb|9mh5ӉHe -hUJJyQ} x%Ʃ}Rc -$.VY_g[pѪCZ?BOF](ؠߨ#1dYf-$.jO90b 2as~֐6ZD3qےZߟ/ً,!/n o ƙ%Ef!921Fb:tZ'!v/âbW[a݉mg[s)/a/mԘEʈC+*H 3Cx4_ n:l]"o~ bf~8CIx2=|uTdS|~ w_FilKAS/3%,`Vo4 T"#Oԥ" cl,`8 YM@(x`t_+PG΢wv$Ip6V$,۬*) s!li Y){ BBz-U]WG~Izp z{צzś m7\')Q ydϰN5iW2!bUI*1ddUX_9 ʦc!)$¼ğ5oYx##񨍝"ޖagZbK?4& ӂt dKH a:ROds|~ 4<)1g`tw {0ڊR,B7*D(PPO4`Cq אypLf6hCw(ۣe>v&F'njMݠ DkO 8zX{ Ey! ~{Jђ#Dz0U\ Ę%쪲 Lqn !meS1O)P"\7mCQgc!Ȅeז;Iؒh k0s~ְ^/A= W26l7T~i&ydϞw5KɅKm|zbJ5 VMfޒ9խd0CLfo,J h)8{99 kK[xCGwI IdqT]W :5 yhx#  v x:4 {snRN{*1`V{H⊟7ɖ`&yhTvxS9Oۿ(X#]rl-3wDt==`U]Y%-PX.u ,m, V/᥼vJ_ٶAd[|eM A`9tXuoiCX_txa[ xa7O ;3YQv{ncΡ+vJz^+v]y./~{bV(zX>{z=ddb9$=bCM%kLUmR ĺNvFaCMA7|HhU Xd )/~{sf63C1(*)*'85ܔCΠ#J)l໇㘂X9G,Wus%y֠6ĂoR-]upaM9$?Jh0q| N{z.䉌u%HnD]PG!DxJ_;Gm(2/qeBb 0(m:DJ>90L%<[@/W7C j(vΡWҘ<c$@WC2'vNvbkkYx"@pdg$p}0C9YwMܜ4xms 7嶅~1 V+(xa[>5h0K3~҇ԐiL pgXRiʹPY$k,m|~Ie*[*9X֠~@n/0["ö7#u7NU(L1(JpǗ_Nd ma=1sgDIMC,!Z|\|KJN!*2̚!HgbM~/{1'ƂyA{ΐ5iYx/"`٧f1sUt2Orܕ_6'ْJl'Y3`e'n SC9!ub _}>TC{ \d1GL2Hu GB{. U0gy[`Jְ^i+ԩbs& ^I=!F\Qc!iܺc΁֫B2S"(vYo37 _<5w(!w5=@WW1 "F=vs:][ܪdŃ_ }1x\ָ I ~HI#&ۧ V kG-!&]H,0r߄SMXxX#6P7i[­֞bk;a h Ud࿇^<̢)ZUSQ~v*ҷƅ8\H.X#= t.nW7lpҽpb?\uXH|eG?JgzBl؃s֐i(4Y"A(sz}C*Gϡ1ndASO .v;YcO!E:,Vb9wwgs88SCic C$6S#*VFE);jצfK!%^ָQ79̶=91$Kl< .bݒ$șUy;t]C6fhaAXs }Bhz5-ס_bAW a?L6$^0 *$k4?@B7Lxj9p@:a h U(bSuD7ۥ$uD#> :m-vw;+Ъ2N>MuI[,&p/#sh4l!qs@͒ѴװJ9??֐^n1ꖘ=2Ә g^ɨyx1 ' ›R}KL'F fLS^Fm::uނQiI  EG;16=6ku`[0S')@3m+{ v,VxcgCY"(ʴ7udgSԸpJ ƜBה--\90ְ2ZJTZMC?% ')sфH%$/Ju 9bN4)lm嘁}Fz-Ud1|\%z?e_*ݎۏƘskIr%{OСT穈cL$ gWI|z[?H \lq,<;SO1^faΤ=0:$k 6)la9Q0Z4vqjcp;!PM"?1i& iI vHQCUSř 05j6fڔp_8w6ܿA6cgY3` _!Q1$4 N.`ׅ"tpArQpjCvu ;:_ZwQ+ 6qq.7v~ !!Ͽ; n=+Sp&Zr' 0FL{A;FI tN&& HCk*Q=wp9lZ83O{ |g #/&NdYk$民q%ND#i]ݜc<] 9Ϙ*wr\T"1W k.A{$!aAϡ!zpI"n'/$!/Qk|mu}N.Bєkg PB@M= w8||ʶ,}DxM.xL,{W"?e5w r˾,aW9[m,k*wHבQ;8֑˛ލov7 D+wppa=jhIX }N `+8,~0.%jEW$8}\>fho,1%Ej8v|<U?x'sr>J"E(ΛRI~h$3o뇂)I8KCV)m8! ]o 뿃9e֞֘6N :7'0I86l$z!}Da'wy f| |K"xv/GI` v`v+!i"?EQ97(GR#V -3:T`q׳;!]CCR9{mMcm7aCh(!hGy1;}s WGk]~6X̟paѣ 5Tyh耖]$oj7.㗮 Q / sH3>4)N'`{cX墖ߛ`c YC!HV̀Cb쇅+Y&qEjȎm~?ܻRg;.d1q:@`ML/D d9!Z.x[ vNk35 Y bHpI )A6@^HB^Jýƪ6+0 过ʟs{E&5 2թ-%!c:LwrDFA ,t^$%.tRIA`$iF p#p Dd@k@&ܫTֳ X٣B[C)Rbl/}kgH7ƧUk7t7Oݵ)~֬ c5tE&:g\.j qF[Ef"?0 *X49c䆩32wcWck qgc6ucyGAw CCЊ։cJ;46Hҩ:)D@?+Z|CE[ bЌyJ[0 6iKCI \DM >]t68@IF @t v4jy<056\Dx܈|^cr 8OB3Q] j8Ѣݪ=ǡ F䴉ihǕ жNH@>J :>in*;ü24;f A'6ǦC19-ʽ{qa9 :%1Qۙ(˵9J1f ?) x?, yt$^SFSU(T @'hFDҼj M$E  ʶA!!dns] ,ZLC0,̇8`R &q$aD[6P.1s f,Yփxєq~!!E@Vsopk_gaC3dH =!AnkV'ohg|MN uģ3%]fԥi +%=c)]X{bS$OQ ]F"ƚlξXx>Xbj3UQb]V$2Ŷ ^Pb{ EhHbX_DF>[#Xm4M {Q=0~`>BǶ H>  M0^ةl?ƿ#(¤we(; AsPH0€T)^ M~? IIivCUEKi `O !jj-z}XeC T\)6~[a c=<{ 8[-}bSp:_ܕ<8hOT 4{i:ps,guj|8l#{Υf[,qL88XpYxKJ4U!X8hlha gV_;w O}@:źyi$94uJCˈ-F}RpmDT>%ƃ'Cv䖊(I$shZm#IԐ:h#o$k,Z!kh< #v$w<N>NhuM18,~EX틗)V;}8#I@Űɐt D'M)~L8!]|4yX\á{%xzK#BbnN&4X0N}.~0+AB@pp7gԧ~ Z !1 rt+8úXET=Lfޝ{"nLn\rBː(~EؔȓyqjZ|M-!{Jb#B`q i1`o |p:Ip%7 )P ]OcUL1._H6TKh7~FECX&@ 9!]0C`j%-/VWO[aUt)*RTRtbvP F2gAX2-|? E)@h-9s2 uR߷?ysyЕx)0|,~?IEi7AT +߽Wii>HI|oC3Ѱ+A54Rm~? I)௎}!UUbpz֖QRGj OJ ZűSJ!T6r ʋp3>Y(QhkH>Q(Lr|>sT~nh;8K"1qs RIshJS9;mDRx!}01+K/̇14.ύe=#4zjBBf IpnSC01KA&ys}:gMK$VK C)F\3 ƺ<8A2?7f-|J@i=98>7kkÄo<{LvD48SI:@6@KG][c,@h=I@@ tptS=GQ \?9EÂ/* r ,~ \%W_x.0HNf ![xr[hx?z"4ceb$5\j|޹q]mE%sH :x֐G5FVHx!}HRxAxܓ9oC"WfZd`ob0,8kaSz_8ɚo"7Z   Ag̋1*4dz! y) >]EypDb3*0%y:f~$jN>矽|e2 p Sޣ<S$SX ãN-"y?%ip)g<iJ>$ij7B01qx`&ZzEh&BMZ ĩHx& A'$^Sý v Y8Ԏ x&'v% DVH,WʼnOl ;g7ltˁ9h퐰vtt8- +-ߘ^{ ,&}4g0׍oNH}{$4Kq6bh8,,q 5B) z#`1h8h;ȁ֞nC!`=SH/Et!\{%;9Pw?|h:vH$Kekm~? IKi {dXwpfņ;- Eo IX`DGN£/a&T4>pM0xj ;8ˁM-0Xc 6a+ AW@zmM nvBr ]pgZt;Tk$F k(!?n^t3|shm!{tQM4,y? abtCA3:֖Jæ/{`H5Xma;L~? IIjw3p2 N΃G_(YU[tD*4݁JwpLqk>/wpB%5( GD<,Mp /*aea]$BC~g;JF&•P"{Qvq/J;8ˑ"x՜䘖E|, ,Q]nP_n(ϡ4qܸ$]jgZ-qȰ:,ϿNӺR3YaPO?$8X:4{8 A͍lz%/$!Dfx\_/ R1Dƭ>4ٜ5PtE m!%{!!/ۼ5~ ř&K2Gؠ}4z8j⛂%rTn}k(!!wva2܎ sWg/c[aS?$&30!dvPa^HB^S B|'J@(ߪxhdWq k]Z.bvM N:-(2l$Sýv#Amm=ΐhF >Fإ!hag(B-AL& y) >bb:ϲY7#M9¨CRX#1$Ed]`<#`1|Q2Ae<"13ܷ$=԰iVcxV00-L&'(NRýkcKܙpJ-j%Y2Kٖ4l[k[{ky}lMohg/VNbBBà > 1aCƦ):/$ Mn(vvB55\ROۜZ Ha{D>kgwHbRT~4id#sB75<|*+׆sY( M'h^{p: n.$NR RGnT@}|{5:wpZCwv\խ4~aC :F]mN4T5'Ћp9JA3-FON&JVN Ȭjqxh|{qblm9R#ΎѸ!0\74 π4X6@;?}08i5~9\;6`t?ۢ#["uDÆ'c~4xH$ojrzNp:*i`AI@RJ`5;:Ԑ3C6su$4L <#7gaRH]?^]5Zĺz)HM poqP86̛ *,"lb6s " yG&@\~$mvsWO8&$H/Ÿ2JE nw/N{bkh&ZLʇRp"9a&[ŽalAhx:2K(љ,Ѱd$:!NH"܆{ 16Wj'ZmO,Jq ^9 ;.CCЍiɚJI YS)iA$4`58/Dk0x tiA{ZAŧ$*1!ٚX~bu)`+,4| 8{ s* /wA;HCl:$pE AW cڜsX0[6@3̂'JKiAf#ނ39|(mӜ1P(t @6ǐF^GJcp2Lb[1I L6@Ǥ4،,e*2F#39H &gČHrBtQ -8ϙW3qbsqq&q2=H- ̐8<0n{ ".oZ&xÁj_I8PMՓ AgS=5T6@ y! y) >X7y67Aj#sɷ-b(P5 H`>8#-|?ۅRp]fC tp:~XykHSjyUCV u- 9$4ܛ`xɱ 6##mNoF"rΙДX0 i XNYN}k f}ǘFTxs:!'BbWc>VY*tbP88Wy T.Ƽ,+Fo8:Y:xQywHӆGAg4XVom3  '46w9Ot9:w.R4}'CAm{ ]׹ƌ>4mp,yPWtSd|XW0w>4Mےkp;?z 8zro0/Ї<ϻ&|rhx?3OB+BV +-ЮY= NC SϬ (r9*!QP&"RT. ~Q !Sýv ?gMd*O~q?}i,KRAMOl(dGDHGiwGGuD0g֣pa)CreyEQ<Pp8%>@fRvᔀӽn0B:_؏<$2R !$LkqxԐ|Ķl/B^Jý^S4,s ?(Dˉ B,~;pqHX@PD6˳m Bbj5ܛ 3K[@D ūċvƜ+^K4 é]Ԑ65}r>Ym՚@6& )TĂW@/)Cb"K @ |̫?VJЬX5BR9hTuJt91N^s]V {EL拂 k]_b0ގ!9al(ya !! p15HK8CPAA^Q6ͤ%1ѻDfqqFxB75 *p3IpM0H3?>CaU+4)qQh 3.S⌊5RxQi]Ҭ'3%* J6($ =$ߌ^{ 0919~t0V@ brg==^$@CX,Ϝ4!t$!_l<>eŧ'/߯䭈@YVtc?8j]T^MO 9o+'#|j m4L2XdTqEG]\toZBBۇ -r[lma䛡;_`zH|>UDhnBCM&5$ojA3VL Y{|ǧ(!Μ`:@ 7po- Ip>cA)q,xfz+&5(1a;^$ Z/h  = p?3pI ٜ:@9{Cb%2 X8^jaUtt\oݛBYohh^--l[w'ٵՁo%6, ,G۴@]45ܛQNAZ+˄ $͆)o:DB@A7eY ~m! cS2r6Y"&vq,$At}j  'c9{ WglN3_H GY4p/<$t)r 'NN{L_EBxCGYb%YK8AtSk1%4Tk B MQx 6S2{-QEuh "86ik+xn=L~$:!p ]*'P,d88F~ՠ_t=퐰 lj#Ǟ/S1t1YC9]N} .XR9! %8oV0* !|!6G Akap~P]}p-~. Jݱc3B:8V?)T-L%aPP 0[aiž =\11A}$ I - A$|rCО p쀈[^M hz(NlLhjD.tRT+FgBR}l); :۲E/Ѳ!B[$O72E )R·p o%4 螏r왢Y=G K A' ^#ÒcG;h&>܉p js'Y#!,[ش߮0U ԡ!h0GӼm"4| d4375ӣ!CoW`c޶bN *;1)}/9"V[;:=04;!Pf5Ih8Y!(0PzX1E ]'b򞚈FfNܟ[8Z:Bhx?Zih!*-&/$!:?7h6 %0g X1r0~N5ؐi_a,IPc_NxqѳBcG5AI(4]JP%5UrE+2 ?ky*]W@p_b|"SK) pĦ@20RЁ5-M8̳R׵H3hmov qxd6 ٥~qf?$ nA[g,a'8:^ -D?5m}e6Z<r,<Nxuam^HB^Jý3п&Âj}3ˆ" / sH|r>ID/lNa"50+f]. SJ|/>WA:OČ 58F[4X<ޛh /B^{ {5vp6`7v @ˌ_U0l$.cvT[I!<8x:ZA,[ * ;QCC-p_.?vhŏ}9lʖJh]5ts*<X. }Ns ^YXPd,W,jg2i@ A) 0,tBQA .i%0ql+O _ KmA' &&_ ڃ',]D8M &"gE arM* o-I3'e: "T"HXaӅ(b G.n͆{3ZKa{MH]4Dl s}-BJP$4\{`_fFٓ4c!8l F){_Ly0# A+аXI$+j%4F+"ŁNCHBt/IرP@߀#dv~_i t;/,Cםfq}GN#R DV5=ӳ# -=ҍpob/\WV;6;ս/yr@44zHRZ(686uI0ipBQ]-KA2Ō_b0qhlJC MA@98y=.Oki.HBR>yAoz C8,i̓t8 g&H2^G_Z` 7C?Xh");ڥ!h@~F VQBϹ9ۏT2 78ĶľQwI<4tqpP@0$m(wtp"p*0B^CT3Րͼ,F xߡ!C9I3Lx3#g?N1v(9ǎ8 -1Ѱ/8%}Ŷ_B75`?LvgpV!:1e6@mv냧$*BGwl c1n@A/$~Sý~1~i-`1(SX0KGZEC/PP+ TpolfE48@BjB9~Q!a DV# ٙ+f!Ҟn !ACýE74=7=b!0i|s?ICCF$$\ eA׫vpK4=}Od68 _68cnbw=}C˗?5P:CEQD?4sp a:{l/$~Sýb Dr =K_`yJ·ҴjtpP`n=9ZZr ]EhNwp*l[OZ$ydԁyfc,]4{s0d;XAi.{3 wOdrӟC8l@&:y + SmqA5ܻ $I|JEwZE8:AA{A5$ P@rQLA{)=D N8Y`yCbKw h<08VYP1!=,p0\ MtP" [(%.T &)@j 1QNH {x,~8-Nx6Au (}9N)٧سOi'$ojA<g8$.ؗc_1 !+p @4L04?b0a4IX-cĵC7iqV]85|mޏD':ߚFDCerES`7|? \_C LAaLY{Ϳ–"ʇ=UAaq"K Ď  T.Xܜ|xH{O!:k!/(\ ((`^P"G {[dwػ8Ye-Zh=埖;`pr^o(T>jrҴE-aNes|8 =o(-8@ Dh۲9}I75nBR}0X%?,G4CWWE)DGXh 4!'FJYx! yM&^f|YU<5[]`&&Fmw5I#rՍW5| .Xׂh/΃bTKn_΍<=jDCA뀓g (.=} OIJl[&~RQVXHCЍ. v bKKi 6q(p8R_6Iv٩>pCrbl9<Θz|J T!88sb0#0tP iWS 󡶴Aj75`&v(g&T;"vح~+-IV'tLaWP " ݻnH Tp\YσQρqv6 )Vl 1r\?2u@ܻ҈iSW<ڝ҅1fm$a]{= FT !*B"\{ ~S&g$9N^p)^Aqx0DJlNa5 GV6@{1\Q.~Sý-PQ݁2$}d>7XtBbs?&Imf Gq;ps o:l].8&Q  D98&CA [s{N~(wN|="}c14~Ě,a/-5/-mܽq obNĂ]GtϞ.c", .T"&^ >,3}lq6a/].BXl}@bf[jaAaiF.A`xvÁ0z6}-P`\Y8t ϱl Á Є#w/$A'`9oO&8gOK糏Jxyhp2 cD kȚ4J61KZjJM$7 5%.8yY 2f)q$4ܻ&௿@Ze=b>4q<ڜ[t,m4H$4vq-<5p'R4A#[?$l:4S?_Nl?0r-qzP=΂4WøbPJ؉cW?aVP&e.H"{QZX 9#׶juD ߹I5$e4h# z) >_@ v{@HDoFS PC)z { 4m$oИHb,7[#}_ _#ʁ)i. p憂RBpeM @yә|{x2Z1IHݡ$C/*NFn)b*Rp4 @A@ᵟ5ܻ୥ vUkkBjLhtCcsywqd_^$\`>3~Zd/Tr)`xP :vsPKBUʇEpMH,t.nEsM1-īM)ޑ5{Xp@\A@ nXnҵ\:>˪\_--[`=CA~ %vB -09v+À:UZ7W4.{=$wn #3'C6jޟ\~ob|5dU2@ N/cKrи4ٜyas D97%4 Cl] z(@gh,QĂz{W5 褉jXڋ<`$3N* ]DYpwLA\g1,@.Ƿ~nUH-A`Q0?\*Sn;L|C"kG6C^ѷ/!1jwWmC$\t Gd'6{KpC\ fe@@$\{`hbwp"yp,0t Y;5PPB  H Nrͨ=R.K9M &x R`qs|_Nk=DsO«үZ 0.HB.Jý |Br'1)!حmOjشfַ6> 5\~OG@ 8=%`QN&=%GL}/ ȍ?s,'M$G@ka!…~Xm`3 s9zC"alhZ=VaTh`U؈"$4`8QH֐*>K/NҏSct8#Z.x#$5#;$ vA45ܛ`%3:YT dwx XE-X'Ѱ~EJC]K $>X1}yo>OxFзA{0 L#jtXϑQ%a4Ö$4SpLZ^mWA6ڼ6H D98cH|pT ~ρ@ |O!}$KnK//GT ${d?~#DC9w ߔWOdYJoVZ-9 aTϡ4%˕k pU TpՊaz6[*=A71ˬ"KZ4 9,~?PxNQר4 *uDm!,ТҨU$aqh:*):"(Qi$/$!/G`Vhs8c67p*?q瑅crArQMQj;9Pe/{!Q AWRg.v.Rl g{! y) >}LYu9 /]z| \ DfVJjc|?M ( &m?4NcO埣nP@ AW7,~4$d4! KL+? ّtY@cA"$4`M0j[7vxNf?,<V)Q 6 !#{f+ޢM;|\k0YXdXۇ%״CAUmE n h $ S}`:]fUYPOq@J$!hg¬n`~Xh>s&vcN\?զyl_4՞v( g3^kyzh~A$͙?!ؙѸ EAχLAɂiE:~2$ _eᅃw1(%[2mljڿ!ԶspJ# 6 h!^S F?5hٴEllSXrG2WI‚v J7a"4 ncd1kyΈ$E>j 䅑ȇ="{CFE'E>6")sJ -$E>Ipo`p'5bIds/$ ,(QEg 61BN{8ڃAڿ)@]c]@a_p>PBH14m qG *شAڣ"$ojJ̆GyBt|̚X.-N\[nCy˵-ĭfn2Vn8a8 Db8` ^s}{O]S5NH"kldt09ϊ92-1$N*T(|^!$GWX\,W|H}(pg2ff5 qEՃ#=N!as,ChCZ`h /$!Hx1AM _]g+ ߎ- d|Ae m iO80|L]@s=c = 1R #aףtPmvAsCڶF `x@-]ID{nZ /D(lIzFm‡2>oNd98+*q5js'G`M&^9ٯe!ir7mսD9 ;(ubLbtԋ'hH-6!1_.cLD;`pnL,-'$!'Eʊcb<>~A~GACn$Q5}!x[, g{! yM&ϣ"'gw5=HOuU%3ւV0 m/9kDy<>ɪDLs'&zD:A H1+d_HAap+, t=D0lt pp55&t&=Lzk-4!NY^5,6@{2p#b|²=bcTKs2dFܸ@4L(&j~a.p-q;8ÑNBaMzz̳k!x 6ǣh[CghCe􁟇\~oƼIǻ&hl:&M($EN""2ciye_)BxdUB]_u|i{Jy>^ !UX$_]; 4ol_@aKB~b pyLxdB45 &P)Drd!ũC<{̞ d3^&|Մ<@X hqH &\$,02qlD˭1{@BHij7AXRDuw Z?y/ M1-RPdNk_n !SBy{'2i#rH0.nNK(4~p#yl[D Gs)Kby $alP &WWICl5<Ռ@'$^S wrE,S [,@]([c@|?0[ $ߏ< ; 9㿃3i?S4{K@4LNrG%N{< 9FcRyJ2i# Sæ58"8 1*d4%Kjg _`b_ڿ vn:'y\GtejsBA#p,nRpomF#|:1hɆGh|Њ\]M$+)y\Sz CT0qP&E'ԬM^SKNAxM{dskH0j8"Pte=dvrX 1qO)?a1dAd p"h (zKzmZxz !䢢!iBRAٓB^ ^YarkP8uTXiuKgHih zkPRɍʘB?'ʸ;7OE.m^ ^6 siO=-LN>pE0~#쫤}K#+' >Ⱦ.^(yV1b4`0) ,mܫ,LaYXdРNM%N!iXPExw>-<Dk|EuUG/8,@@/n-H?{=/lh%;WS Ia+h-#T)mճB9O&ʑu#R,o"{JĭYرt`@X"D>aќ:BA)MM[u"\a pĊD#|_&W 2 w"ߎ+2aU%Ǚ.x˦LÅs~Y~ Dν@ܟVeEAé$$c pD]ld^^osP2e?Tܩ]><jM9 _ 06–2I}S#) ,C Z~ؤ$4{]d4U'Kji[Q)PcTcb$>H?|xŭehB$,l<!cI%{2u,o"`hzm zZ2^A~kfeE'!nkPP:u|%#꼻|+CI*90/w\?%c e?$c OCcR3@V-=A8+X?% m݃ofCF> `!/E>@> ^E'^ŗ.Ĥ=zX>Ek6]9X;d#b6֠jLWNEXo9^`$8#SzxG^ՠLjr`f\ź%X, cȌLQ*X~[Ü^uwmߓ]U/ 0Jџ=D?YCK)+$?[4Yk&wJ{hfFCۇX!N)a+d~l>(]s@fսEM{eOdnEa8+])뵼j#H$k݊p9CYk pxAwt^=^) *-2/) bR CĶqLO=tBQ*R:qhU0ʕf+ј@uksnTFr֖'1eQ…p//K?A“7<՝|e!u\it܍ZAXC"K g[&{*3l&#y+BcocEQ9 ,uV*_HC;@-gSo8eamIƁ y04_HHy#))R^"&½\beΗ4Lܟ^'N%Q~A<|V A5U04m$Ĉ {($h=rEnkŻm0qsL6~^B^ ^G9/t^Bn}܈-_2&`*4DHOr^[sx\qw($^(.$+ID^12ϡ$v/ _§W,gvxTܒxB^pRn jlGfDBR:F;)B098#erN^SL{lmP dL1@̚`2s?<2FYvV$O M}7\Ń@ȶa$ dx'-O44A!d!p/ŬU&g#WvFU)lEYCʧAff$'Um `i5O5Up ]SE>}?4:zQ=Zl,\ yevh)ANM1SN" w>[д2Vy@N\'ȉqL$Mr~gnGn/ 3bX7}k : o)ֹ!dL~M+{ g *`O~jh#RnՔWHn~!d[>L!3L=e~p,>-?)c߿܆kVB,&5rM=,zɃsPd:>9^5]MHIbOc*!o`';nɘFC1d^"&½n. KKgʀaEqɷw$27!`4<;}Cd; xrh w pc9ܛIpG0'4  9Ѕp/j+gdȊe{{"_Id~Mchs@3EM{٥(a`}ˢ h_!bB.DO$~o-,up<4{`i0" DiO)©gzmad>@nV$o9T½=l&;a*,? 2<{/Pl[# x6Bu74 &ٶc ^aA}^ۊIqkX'3zbx!K~˳Bn"=AY1½2/2߭-q85v!s˸aQT 2a\qsPӎe~^o 8c_b$yq"^2cǏdjo)^D{_Js~~qZҚ$fSP )d\aǽ#YCUNӑQ9( 8"/SbC󀹰ogE"^eub Ye^;q7N-&yW`L= ՞y}N;YXm ˀk#l91(4#qHݻbBN,u*GhԮ{y244ֳݣÿD}.ô=^"&x?^w% d>^ H De]`qדCƤ*;:? oYIUA {IUr",%ԨUƗUhW9 hGE4g&@Ds]- Z^ ZE[KqlYx=< ϶i"=șVh,A c3 [t MB!bs<ZjRa=4`jL浐7Vk,)@!-bl2`M4^623[9,o"یEr]<"VY6r'd8SJl*I }Id! gtbd\Eg,!! qfY$d~MҼS􁟇~/+: ca[ѳmrIC C,A!+jhdn+9X>s"BPI2KC5+,Nb}I;KWd5N%BlEBR:]U*Sukb(jU `_#$UEGv LZ BN|l/d!/p_/RX1ܝ]^0Dٿ\ h}RS]994HcAٿ",5E03#a7, EtqV@ɬHαKdL9[m ط9-{!:}wŭ繁o`ƂR#D4mnKT/ i:+u8EoGA{({܅ʢ GiBd(w=Bw{Ȓ%˨@)& ;Gpwne/rX$!)*NBN ZE'鐥(L͉_gn{BzlSB|nE!1ƧEcNjwA35ÓQ-y< Hs/{f&@ȕ):i@G? d ptU-B [c,CfAz {y\:%b)I0K.ܰfPC)sXs>g~[mbU Ά}{6|t{,!wt;4^"h$^BNZ=X4S;ܡ>'` lRfh"jxe`qr@Uu[) l89EQm] V*XJ^I?~zX,vD$BȘ$Beo#Aaײ}R ?눸MPhHcS@d }aYZSEeE!HO (B7u0EYV+ $jJ&ʺH׋>&)3wb*(B{vOj ] 9M{̌\@D@/I.NqjWEbdL#ڛ0VgF 8<{r/} !>UlOtZ:$c!%Oh8Y\.qF{C`*ͷ1$p[t myS .rx & 40Ϟ_OZ{*4(^?hsvAyZo&1R$?{4 6>dp/!([E*;Ŕ1b f@~A,ZX91a3;sP~?EXDD ϲDPu*҅+9JabBc4aȘޓ-O=EX@?,#"MS@ &۫=^ ‚meA24O"%lw"&½`,ݯ 47Pa -/ } +BҰ`Ѕm@9^ lKaiw/ \,&dL_i BB0qi,)9<ɟxI\)vt앲BwߚeD𙐡M|g; jEB_hP,Hl(\8Q*b-(b1X2kg p"\ @|И.li-=Z["\!WC3 =d YI\9sIOhLR!"`WްT=$cK<>zB/{!:=RAbX9,>}ʞL>&YE"\HT'i"ed>g8z! y){ p،1z)>6 %e Yf$Bn(]MiaD||$>? O{,DV*ɻ^hNlv<2GK6l h2:v\>8,ra\"HdF^Q) |pח@=4ŻzgR9UA~noQ%c E~ u']E8M{Py?mC^ԧV\peϐ?O \r}Eh2' J@o8BX??|{CcoˆR-?V<=HFKKP\cLy\pd.^f'/?, ![H(Q'oYÇw ."&½`4qk(b4J/9{Hy^C e W|oYG|oiV*W]@~Qq+ͭS= j7Y.'qm ھ2% Ln_כ>줺-[$$4y .>pE85 ǐGv[mzSs [V(Ee$ 瑂Fh#J'NB>\S=>5t;4^3E.xf'B_aaߊr ̝yh?/‚^½RP&{SlgbYp],҅S}A7YGܫ`G z8yFebOT>,yB9 6wMN25Ĭd&X'j!|eU4'D%R~Qj)!`®$nR4R쩋+ ,cp",3%PWloL\VG2-ؽ[P=>q\p5eKǢ) {%|\{ j̞8*E. +U`! !{NPF2,D\Y} OƐx.ǣ1ex!,i\k`VJYD_ABB3Zg/%/HEjj$;O! hO0 W٣Su&jj k0>l[?$OnM ` fp%0[p߼lԠq'Y})_? qq=B Me01CZ ({LgH4PJ!;9wDqz}LO^D^FIMX(6$Q`[kX( z <u_9!}.q9'd"1-D34 !$s@6z!:rÛz2-4 isѬn%UȺHߟ@Um|@֐) Ar5h,N4ZToD'ٟ aa3t-n1|Ltrke=YS_9+:uA0EWJ sWF!9 ½`PnpZP7)O+Ox P$"~CNC!K]k6qx ڡ5s BdݖVy V P2> YG ]3Kح;!ˑsY^bhkp)(ExM{x> sQhrs"NT8,1oѩp=|8_\YDABk"֐Φ{69CH/ʘ>VGBʘ xm4dQ8,uT?! )-Pb!r[ 3f#,|Ff,C½MRvƤy_cf:(ϑo=:-uAroMk8M9 k^"&½@a.Z>k [%?!TAâV0K rha[Sa[$ BW< ]JONfd=g3>; 91v<*6"qfX{.M. ^T:E,IJ7i:(?v*M_dV_Dj. 0325d BYe~QOlޫ!mda1q)ggȭٯ3ȉX9d Yz]`m4+OMm=uJ2Y^p|>Mm2c$0؃_j 'k'͌Es""Ru'+v2dL)&9 z(r%V"G4o%@C4m~): }C V| 1 7{ BVAwytĂf&IbRi@9ϡ읍q#)\dib&"bJEw=Pn)h~ㄈEb H>B{|<&f5W+f1,9t-EX4jEZqv.%&˖pArQ"$@KX Ϛ[?jhiY -o({â X ti 1G+=½aRdFb4u2.)sm&@9F_9=S@ YIܫ ZhvhWdVTunJqw-䀰޹ؕYsP~?EX@p%GGwRd/j!qCcdCe&:B srY~&JxҬDʧw r=h Ey8 (ɘDJa =ӊgYB9_ZT"`!yl/d~^F`\hZ;-?$wnYKErAghҁP-+iOы>{ r^.mc]MػRzEf'XOښrM1!:! ({LH.]mg }c ߂y0'x^" :(b&BnE<=>vz dTzh*e⧰_73D~<^FsGѡK.*RߚGJ @=AɟգVqr)iT}A}% 6BMq 39 {ExI{NҶ}݊[y~c ,^"#֙v2qLe}eKyJp,"\&µ&TLVyi4 -J!ZBr95D,t_SYȲU"#/Np68>cQSH7췕)hh!k=l qc]px! :)k4GExI{OfUƅf PvF Fџ92N5N SP|?CGܫ V{t$<'&wSQlqUҋAccxi萓ԴYWNy (p `K`)}iDA}hkc!Ma8u2C"K!&uN{0VX|zS@䐲BW'=ْўmT'`{l 9WgS|?`[j-194`:2W & I-B{ѱgd1/]R= +)|4dAmc*(ĶǺ"'Q|a|=>i "|[ʞ}.5^wRᩨ)jZ d&O<(eߥ?:-RG(sƙsyAw`",o"v/L=4֐O'~I\ FTBif[@{+d}9",EM{Ab-!ɘOy Iƍ̉ Ɓ=65Г^c~Y?!sO7/yEP=].Λp'5ğ}[azH\(m`? tA4E0 J_ػ/ ^_+  bd|hC1.5f)år$i*ovhISH}N^\E~h@&LMW01^CЮh*e])d4|^eE>_Ȣ cA2`2O_D05pQ$ yMk|N^$m:B#WܲJ|̼?~YG;׭i Dh#L %5qvfXe]FrЗ[Z-W4hje&~2FThP[7zP敐."79/X$ cF]½Q  vGP<&;s_p4,o! i19"ridBR:G#KLbHle"5 氇nNs@Ľ&ƪ9YcRq~OWDrbB/VУ dݚ2h R3@f1NB7dء=1B |/,۽ih菵Bօrhzg zf:!ju^B^ ^fOՉ<3'U`ܵHrϭ%a h]%h?/#͸84j":m)]Uˇ],榏-JF@B-2W'HaWZhZE#!cF4Dȍ} sizҞ?A,o"`vh&5w1: dwkʢ+M ~bOTKIU;*iPLijffP$ߎ <ڕVZ LḽA:ݒԮE@s/^1$ߚ~M=<6H.(6"Ln|9NBN^8=ף(N>䁻Q;W_{[=F3CQ+HSS 8K?̿&}p{^:b2,LʜhsPf]$"&½v@F.ٚEZ${b /d!/p# )wH齨7CEc([gW8(b;"$mYD]ꇦp#%2 \3AR.Zf }iBhxO"c?~/Yxޚ߭)R[=^)jh(C DlE#<9 A>"|&µ2tC/w+@l]HI =dL7ipLT=O'd!1Z:.Mߊƹ 56p+FM29ANV TѨy藨er?"]֍T,Y]FՂeEt0%>YwwHk;) _뜃 /"&½!=4R)=|)!Z@F[o=G$Rp#zcn{ dg+e{ & "diM 3 3<| -VvCz`' Me sύ -HJ1&JOs@~? YD >{_*Xz&S _M^酴Bȣghȼ.ژ--/h^^D;ukb'fE/|a"ß%Fwɘb_!Xȹ~2 pH >2Bgvv@QD 4 E9O 3*9 ,o";~{hFE6zP0&.VC eF1A2x?#pg9:זּpώF{bFEe,|n 9 $/ ! -4Gy!:z5']>W_Mgzc3?Ӂ ׳5v<B7upc \LBёrceHgiD'Gh Bo5ȹ >OF'(y! yMkg=^N:xw+v4zL{6N¶@)ϡI8)t!S@/ :X΂k"LzW-$5W@~!m@9ϡiN,s@~?ۋDrSzwh@!{ٶ_z! :)kQžI~b8RM<ՓW Egiai`!XSX d {)/dA'p-'jURi0Ϟl;dDm-7dR4p `$h ~d>Zoh,܉$*zBY;ҭL.}:92yL8ɏ,)>>9u f~㞫b+<=P}CZ4P!֌"rϡ,u0qڒnkC]|rdYC8D2,T9)nk\jf̯{! y){g2LH2o&H O) {4@(u#H M1gi9J/C9* ¦ h) @"f` 4W@#qc ^ JlgLk"1}7qA y yyph*D3{L'-o"`)zZf{q7 "㕁Oȼp,2 H 3B@[SP*~Oc'/ 4@e/(HwX "HN,84H KksA~:1J7MΨZ42K) G9)Bu({8m.*BpXGzই/TGjl,$)D9r`kZl#,ud y,UH3+*D*JH_B tAR$49B@ȞC9% YDW^#v*0s[/YQO˿d Wb|e 2 p&C3s%ZOJ`wsd08 g@U@[ A5U˸؎ǗƷ<0Ad26pEB!H>B/#jep'k!ɡq?P< yQD+;0}3dQ+TrrɓEDx=~B2%9O-8؉ea1!BJP1(j )'d p" D쩂ք[az<,h>g ׳(9 nb[n] 2B|rYYN߹k,ѡ+6wtBX|g!;ZbWh:!({ Ne\S):fhE"=/5!'Kc;B)}BtR"s^(8ʹ|'עLQ ji3Zhhn_G5d? YGK(W=wIk^jN 4 Pc2~uOQ*\sE[b0N>qkG2yN1 >y'"dN^ 1g.*BcmjJ^E7H URZ E9YA!K`l,14"^ֶ#^_ap6Bpy-E ^kP'/֠A(<tAq#zd%/$ºhբ[w{{Ȍ B;M@6Ԃ6.u?E[@2Tx#"yN2/5H;V[? ,o8БCՇˤe4dOa!w}lŨ/b20#p1^'Y9BΌIa-ͯ埆+ر5,RUK1j\tXWEk[ E HbۚU"|dN9 +V yMk\b#eQ膦Tb0!׊N4ZDkM<-7Dš5 sH" /d~^#bbui(Ʋ~__<̼Ȳ ҃H$s hH=Y=e'$a^^V?0 8QcbLzDN\1aA@̅[۹ ˼=dB'd!'p$$TIngzzn`d5Eh#(`$@9wBr*⇆VlAshOSH0)a59[Р[[;-@!C(( ˘3½+YPE Mk蟷xf C!X*24\2zMSCh4LjC O,jiu쉆yZXM>$OfLiV]9 {j"EM{ai8Xۤ7 rd1'٫rÆФ샹DeSqIFMp*&ſK M'nbN3eVlr+l-.\ }KVf7wg%PVB׿"eQ^:*:x*0&~ aAp/qu@fˋ\x}6jLd]&í!Ny7@wxSPy3Қ ^?Z_9"3)<η,Տ) NB>ZQƓO0ifZ蹀^~w ūâj-ܔ<*MzXM܉9 j? WdDm3?pZZO݄ȟ2H9xpQ$44 Sc~ p/ʚiOCc}5gʂf__U` ɘGHS~ Xe@'>݃y1!E#FA?y&a}$c؟^d#Xwyl/d! p-ԗ'ёa5V "JL?!}l.ǣ2,/4~_4c׊ X$xixJ3#X_3d$My194 9MОH.Do\ {ş'bG?B>DBrQx4Z\{~E/d p#nPǥ>1p'"糑CAh6l" ) BG@{j:2Ϟ'7^E\črR)4pMs@qB['-̳E\~3 Rfui; a}[I>! -Eg\g#[Y;V%zG2,E]OMc[D-"|cW~^!'uŠƾ~&EЪ3P~?BX@ Qd,4Lh[Qqv4dE_P \4m@9 3=̽½6[;uBcm7'= Ɂ\ A2x?&V"OY>B7u`mbkߩ%]*ࣲn>,ia144-kS~~,5^I&xt /6TX^ DÄiBu$K bng: rJ#lf!Q(\E/HFC@h29N YD@uiPo$ A(;mhl-Z"?WF)|1Nj7?uxiɓU}à9[m(͜񐙬n.B ^ϖNXGB^~(ȾA ٷpX8 D=`BY)x]prbxX˒&znӖK)aQ|]_~p/K{x'ǷY ==3%cxȅ1|'mwZ5> vAP xnUhO7KY/B2=ECT/$MN) ,US< 9FSݼ Q'2nO3"|=;瀬;ѹ-@4 #~{hl>{5,H k> /CSp/o9 }+Cd>^CbM6~ lxa!6qJs'1\2&x?%| 3."&½2~Rc `Z>Uf8{Q¤ʔLJ9CK R&s*hȞPv:c;Bc*<j2)\jEfw!Hq7:9~{!:HC2r*4S'>'>Nb(@q)5 Lu ,i"܋S$dWw~KSqKCYw|Yq+bJLgPMAك$%µ D:IuD qU[ȼ-Ju HAM4L1d^}8}T@fxs<93?6R&A{Ad^dn`=O1dr/d~^/.Ae'0h]k髊n}OC K$B.j *)r8 YDVCSEz:y]Ds(+KѲ+!HfzOkyཀྵ5d_Ԉg[D8V,)fQLWBa[4aDyib!H:l 08Is8!*`΢*((fx;xʋ/PK!c  ϋ qecs̶YTLP,kG])HvVyYd!BTt6Β{ VBVAfo z) v/I 3ėT]0@)|4ȷeM-Wd p"ۜeL]I3 <+ƊϜe<,6([SyG2Os',o">Af,>Ah͉s"`Og"jWv@ZQK{}ȃAG6(r v7;=e?9~gf~CQfVq!3ͯd};;(s #)%BF0$y-5E]3zlhd}X8WٵT ]3haM sCy"B)\dh F<{ř(8Lt>;?EFȮZȡ-$@h2Bd0 /d~^Y{дDVqITⰰu HTtB~{g{!:6 o2C2\|إO:bzC sC%?i&ii~,`ãz"@՝ՏF3Dӭ/!\w(1h|G|WFҶ29Zm.Tf3p5h աdFp<,DL[Q$^pħDx2%<'tߓY{zTe,"ܬkv1 YX 11^Y)&Hmd!p/*KRJڥSx+FN(",$WlE#R~~ST%pwi bYs9-Gv5ѯ0Q˫ϛw#%csh /n#tA4E9vYxl,Uwދ||Y2PS0AdXi< X Eff"z+2}RknzQ:f QfۭRi:z ?l/jpgJUx|K̇Q^hR9B2=dk Zlgԅ?4!9> 5r4Ks6=D/2:NRnAw]p;n%dfj`*2ĠP]5GBx:'VV֘e O@xq>h આ2z;,dch}tQECQU >TђۑDsZw_g\ D5`C0@ a! p ³wCY {6;5/N'K-'$fyq#X@}"Yә7i9[a W]tw5\Zxў0h p"HWak$ ʒ 3D;BN̓ZCB; B+2ץXjqIH14YdWϺ&:d^:;,,F_ɘΝ$a;o5) y8"ELlO ߭ӟ@=SCGX&6b1_^MaLF}wZsP)ּ W^J״xJܝQ{t7W DШW",VqL(Yp%0eeL0K! eVb9`0OX=I! 4P(5&a|.:}ʯ' dN<}G%Y,,pxIQBE[ptCZAC>ba!p/!.2] tϴ?M75]ƓEͤ#dth@F߷ky^&½Lkޡ <~q-iY+DڳFRLr_<$CNMD>@> ^$Gx1hz#k9`RtsXtUe"M5ǥ`gqLOݻQ*f`ȊNܖ%CI_aaX5Jia%@9TXXszLٷtBr*x;) TLXdL~MӁ4LjL#y! yMkπec43#w(},y~~{d࿟CSH(~Z_g(0ƛf}elB5ӰD[,Mz rSФ==Jd.+֖Rx;> Cc3ZG/;"gx?[ֳS99> _9(6,ebh lS/E$BEWvT{BYjȾłD%D9TSe*jdjR\ 7BL̝@IBR:#4#&OBm"CunmuT;39!~2WD`K̠-hZ/2鍔_u,*Ar!M!sds@~? Ye7|95C_H< -2ƥԇ ™dh|#To%瀬rXD7G$􆻻;_ŐoZ[TH.ܑac?֔wAb{j+"cZ>%/YVX6–B:B =Eb#|"YYQ {(s ǔ(!,XiP:c^~BtR"x)$y+&r_ݢ z gML%!dƲ1HTEŋFz! y){"9Ia#~/EE<$d!j#=ExMk+CrSQN|Sp/ Y9,DII1dx&Fȸ9 g ·tFZ= A Hn7c!8Q37>dYAK`L<7bOEF?Sy[GkȌ:1,@S&s8es@.&, $Y΍~h?1Kt*A}!+5Yh"E2j { 2s$6NI?/)2 ذXTQǡQUԂ"='>*pg^86Q65{?j: e>X왗~W#$M @/1!0[TY˗l.`WKWGt4( ) DDvc_$NvX$yo VO#+ 9(aA/^m;nKӡW˃e"*C>JƯ6@ڷ=d'w p/h - ->𸗦3!uU4iJ@92WO Q%/d~^Z1({d߯7ed2Oӂ}A~}kX?(-=B^Zh}d84G ɵcus:] jaؚl7IlB6BՕd;OQ'Y߶!"wFۙCĶ жB^HB^JýAmSVd̞L'C"{Z(ɦ{ yuopm`ƾ cc"qzš$pT3'W`Y|~Rpm"*]\DGwVмPqhNH"܆{&Kp0Ho V2R!k\؜b=[A`f(o'$!' +/ ~P>+S9u< 1 v!P  fy0Oz˥VHpA"{ '~a HYÃ;PX^ cTd.H@.JH r2'yǺ|VOy@唨p:sp< 4A1;ؙ(,)cȔ,[q43eszl A+Pm 6o6@3S^HB^Jý~?̈́tp&20kwĖs! g!4LmH/$!/yXs IJ#@C"W@kA~v L- Ш>> ZYE_p;?N,:/r&itXӓ3hfc ~ IKi6iN$ XӅOEBV v.Þ7;=qfc爍6{*IF 0 tArQM\t, A䚐'儆M}y2}DxI z̀F! [PL?,©;jV{8-]<{O`x'!xtUA\Dgf cJm Ce>HB.JõCr| k0C*|GBWKZeHze 0c38>wkH ]eHE|:LhYy&qg$Dcb9'KB\LX $NSý &*x3q30 JpQ71ΐa!"sp0[844 Nz.p-'+ usioUHH?s~QCbqH4tv3Lfz!A/Gts^E `"_\S> ٮ fpt4ɭ0>H |ܳ]pga6,؇ǙgRArc-e@ f&?,tA˄ ,a<8^#;2Yø#!4i~{ڲpHKia!=.=9SG&V;@!Q:&cbv9 dTpZE) Ae$?,3gR Z%Hx#U q*%,DR =D^zh=3DBxER}>E$Lz-8MX?e`>z;ITp9c˽ЍSA9X\nwD^B AW6?*0r6a 'B>Jr乨y~' : -3`w@{FHbu E޽CARtb3hhAITp5U bK?:y n,/|[! ĖԇJ`񨳂 Ҟ!A/Cý<+VV_p&w{!3`bL`iVyJ$=PȢ(Zn)u_ ( & lB-K5sWwve% &IA4Ęe0T>HB.JõpNߘ8~t#!OHJh`ؠvm $m(w=)<=9/ckv'Y&Ċ5_D!`Qp9a`jAO`WsO qRjyeؔqsJ` V=dHfLQ,5+#\?XyI$ D+N4LaܨpB5ܻ`4q OC< W< @ό?x\0J΃e0:2ɲ1鳽 sC©UnJ^CS-^ؐ%1B&++S'# / @NP"|?>ͬ&|>D:+dҋA=k/:6' 4Ej9r D *\Цw(x8& =d! AN6bzb?b!NdC IKihm:8 נo/7~Q ï%RGC4]9yLBrOY6@s{! y) >؏_}o;H f~H i JM:'6* ^oB MaU7ȁ8+!Z"YB RC8$4;`fQS#zwC !Q!;CHx?'aX~!A\!Y<ȗD@୧@#A ::2Z^ (.X !s |Y~jni@&WfMSCġ!h5/Qh IKiC"{pb8ڜ63q@!1$C"@&CmBoNH"{v YO <*7aA{? q-:y(D0z8>ߓTC `Kx#7Ǥ%֖!hmݢ[Cflg{! y) >b6㱊mNք`Bk-8~Ѱ~}m /a>&DM > "5 Bd`Xd7ن@f8( aW BWK6H"$ojVW5)O>OFڪ>KZwт"9 'f5h:! ( .y5G(^b88 oc[/0R?$l!袒#qk<` N\XMn>G6I؜CHZ"&Gf>@yxzk1dV5 vx6OĴN.J4irT +th4~ IIiv ~O<,3^c f0甁 zf@CBJõ6Tdg1a/5Dگ*$a tq4l&N{! y) >ؙy86쪰N , Gq$DM]O10 ihR%ij7>2tvE'ߐ &Ɏ_DՍ{s\]Aڎd^m=A32"&W@ b~fW!h Hah:l~? IKiAκrԅf?3'JatE_-5 "nZ24tA"5;]űy-)ޱ|ωT>4:~t2K_gu(~eIp'z{^"*O+7tk88ALZG&2ss>!3ΪǕ$Ö%Liƌcȸ`5Nc~RpEo$܌vh&Dgq>TYC Av%jr&Oxp2\` ՃLvn@4:8(VgZEhqU9D!`$_Rgm z) >P CXg/:>C-@~1|H aBIjh$ MN`{Q?KU8ba5^Hlx Ȫ@I$DL '$!L$`Jx<`bH0Tn̢h[;40%{ vs8+;YX#H?M5+퇽fC"{ ֘ƃQ( >`ăpo3Onn#',[NYK[PX I$ E [p8 0j!$oj2mh"Ap4=F8t?~fH] \6#BC@(>PFy8&]E&:bmdi#VqHVa'%@$,x:>B8[Zym?HM;v8 6Dѵ9吆^m!d EY!Ʈ$ok!,~pY؋bXI`"eg0|B.AlhH`4/k*waHzG<z)o9mI/M!LTLn fp?=8?_fF@L+W{\soEKrCIXx?xIWOyxBM7-\9T3WvKcڌkVapX$JsB7KBi>nD0Y7M iU&!x@ =8Dt0g6ғLJt.Us(gsq1feW'."5I .EQetiS@;J]DL[Я8vkHMy⁁='&&PO*-8S,@o,'$^S ǰC}~7#gb]Y?gkj$!PI8 Rood:li`P /qF*yu_}BdL.]8 pd*L$ij7d7H{ĦJ݃[CМ9 }Sp M^HB^Jý"0 .b9` k~XbӣW;$r,>jHAiA`z~fl'$!'Et8sB ‚ ˵7Հf(C[CЙ]M) g;! 9I.x,A0'aȎ||zA|ix$VC43z0ϐoJJ(.BgLJB Ngp&q ԿfjIb9J(4MX.>rpnaΈAs"&=CEZDÛ*4*F]ʄ~<\{GqSqʄ;!='!?WlP˃8t = Y@CI$GP?Oy@\tcAsŠt(@d^^Ż G;]\cL.Dh}00ަ8:A{_Zј{K{X-!hNƜА}}s>szA[ cQG95 Qy@>W-!,$,hS iWS堥A!pDM >hݍYT[u kZ akJ+YY!F:yl$!O<7}pt4(zm٣%QRt̲g</C ,&(+ (.DʔR$NB*E u19ƵvJ$Ψ@dANA͂dm$kjwX<(a'J-b/CS|Q1ֵvBTp큥#ouc'JC^ex/P0h$ahxjy$cWO۟\~k9{is:<`JFR sCV8R Xƺe!@C t AHY! kxeBT~+<˖X䫖HA"' 2!h"\r0mDc iՆ0JGg\&T6ѿykAzHD84sp;0X1.G#8悺X"K>kV4b!017 N,*'l AW1c]C^l B Iý1J,ڜmV^'m?dp>½ѿmaFQ.HB.Jý &!?T8^{pzÈ3kBA{ DkiqF mhB75 16.^7%/>W^=@JX0o"ҡE o@z pM&F/|΃*[k:DNuyGK$/"WH(@6$kjw>j<()X3l?(__( T Rb%-Ou2ڟtArQM||7`[G$H[e?f50)4H'mח6HsN(~Sý>QsQᇥ:jb؈=^8XDXtK:gi 'do9]{Qxn kj;CF}@xxׄ4[?$AA4LBh4 Ik*6%hyppcH)hdG=tF Hh@p/4BWWͥ8OBe?g-T@EÀIWThϪIpoOq-8l]sfGf'Q.ٯA AG8]n~!A'glWdSvƌ"h:1( l@ds}QA]h͔ g;!]QQt's CK"24]xN<d3 3q{j2edDW#bC" h@,rp_mir>D78,\B bEx4]L$2 ( h؟)Ba?c o,} .\hm9 o#`J!ZFI5 DdlR{l? D ?<@y/ҤhI|65Q9oN'=>Z~o@fD)17"{fuWy{О`f_K Wg6Kv}y yHxLkym,)k!0ǛKp!$ij7_`{S=8ɳx׏5tQ/yJEC=sT$>IAm^0͋o-]};D\`H'g+Rذ!k( klpBQ]pg QY06;ZcU yK bHA*rSBHBE 9 (8XJbc} '?i: H41"^F*dp+qs P?~L¨r&?WHA4l q2ciA\~o4gHȱ, ޜPN9$H{S@aK$d8At'\PmfFjC"{q_a8 Sc} {.~dbK\v^KABtRp_GXo8"&GbqSäf!V a~0ھrkh 6d1$'8`Sg Xu읭x쐽\4 n ,px{vީǕ߃ f6:'5 J,J&c94 Fo+tՇBşv ~z[B~Sý")Hk**'?47yBIIS98Bg-~? e*\3@[r Ȭ_# o Ȭ8C9Pt fSwEpXP0K>HB>J =9*wNs %O)$`5lm p IJ^@ɤEHKiB{rn#Ɩ}bdlBvep~_ Lk_|GF]lrH*{) po"rA&oz8 M kɶ`Ds|&[Wg@pl ;#.NͱF^&?- k0~cZl Tp~֋}O4Z%{\f0H~ AWm N di>)Ldm>H@>JaB"wlEmZU;! =e%ݱB12=e%^Sõ l,MJ^nfAn#{.ĶF-B YI<>pl"V~7GEl߯燿U%X@lX+ր~}@Hv%X>`eDP-HoHJ $ Y(PM$&B@>J >}X{4>e zDŽp{l74h:׭evh6 IKi3< $scW5,a׵-vbx) z Pyk6yͳ{!}FC)^yp7]KZ]HC† H!XxAH"\k <w\&B̊ʲ'.diuxZ4:$l:L>41U*8ȬV:l~? Ip#"^֘䊘uA:2̶<, Hii<B=MF̟75B<QWoXl% J' 6 NB5X>n Oi.7j#t}[#d``WsEu4-JM z aW1@Dͭl\y! yM&@6**H4Ǔ>B4BrH'.]Aм oN!B4"XFa/F8!(.X iy/7 c]+:JH%* @*h -4-E\;QPkuO~#s~)p%Uz6&xUo\yt'$^Sõ >T=9 mS6p'_;hr#䆞)YȪB B.Jý |?mܣ@6.Hϲ^/$$&&k}Eb~v:a+'\khyCKCı_=ҚU* * aWS12@fbs=m(5"$75`؊1yf *\|fB_k%XM aWn- vZ ,#ĩ751] tY:9a]}lC‡Tm$y6咁&pA45ܛZ?!ꏶQKREannA`u94V6 m4+R=%8I}0X8ds&@~9n$ >-ux[d12^ 6@a9$5Uo`s876ZfJbJP ://9J BiqaA=9wBʬTZ/Da 8 fyY&@$4ܻ`aY vi '|m꺆G5zǕ Z-YjV;uFh4 TpoDv{TA8բG˅lcy![spR R`0E$kjw"F/i'{δiEz,JLyk  dv9BdO'$nC eЁ; 󦒰0shoi/ 5 Ip@`6 8Ie' C=ڍ!A4l q*#Ԑh^{Wή#T+*U:ۄq@dlN0*`@:pBu x: pk? c 9󴠏<]H$HCЬ؜5I 8  ~‹pcX;(o'y, %Ra5.Qg j#h4KadDS > T0"͹ pO+J-h(~Hd̸ AW=SY247 ' :)&=KëYp ^G‹91bhx?o;[C@ZXt&k1;7qbJ$[ډY;߫#qb>~gW781P%۾$c.w)읚 #6SB?`GC #|~qkJ&5Ɩ IKiD wtėS3a@8SSeaICb2M; qܪmoh $Kj͆'C=8ɱ0qĞqI.Bȍ}VHH}*'BB^Sý ̀TTJppe{.shp*$24oRۆ !A/3+"ኋc[æ}rKQD 7/.=+Ն(2%3jtQ@֐ :e'.$4`Ǹ0E{<l*bӓՉ1Wb<:%&BC*X£,Pt# $NH>J}*/r<'dެk6Psa;%np* <xք|&<> gvտ#pY 0 x eQAzanE4) ,'J(i[plqgLmb-"G򚻐`EΊ3S^`M II)65NKZڈl?h C<0AOpnV^HB^S 3 l2q*H8` ;A vpI\8]\p`0V Xi%6?=9&6# 6U  %N:#190/y.2ڟGtAr=[YQЋypÿ8d4GT!H>15^ Vg (.3,-Jpg<}bYYM,NunXtC tB 8ܒtG0c(YɅíY6l(5F`MoPNH>J 3o5ڜP~쎞څf-DXS1ujajZ0~#K*'0K)mD_,KSQp* AlLÇTpm G'ee@KE$3byEsXͤrʇ\{{cuUޜ P{qE(InX3.a .HBIýsd1zWL/޻'w4y* ZT\BC-hW8!| <&M `z=Q+F :KTo-4Š9{j]fKA6)jeUDHkjv5)TENT?z^_`z3I/5sT 66*ۋRpm N0Y1gK [CN6@s,8ܻ xez-p |( K+'ˬshϸji!@C bͿ=90jQt)f}(a=w>0}ۈ$4`hc2 AH0P ’yDh( )̐$@:C8  Ğf_ ]gݬejA5k]& a%NB%5pe4wV!~Sý&L XRw%HQ@_xs s`,_8<2W[F98*33GYvEWٜ a& "Ab)}o=HL ]<{sYdw&`d"b2&/T_"-1\aU|EhyL>6H{^k2 vp;pp@S n>$Pc1a>y.ߍ45ܛ`-Nt<Y=>"u1 ps@cmЍoJR0;e}H+{rʷxpH?Ӏ7CG|1&V]ޜ0CS AH_ХC9(7ƥy>n:'L%7_FZqړ%a.^Tibp4W;LI{%s&zv< d ernI$C!g'{+X!v=Lvw!^!9ȍӛ've< ~X|zR"]ZmTuly%g VFefw{puR` Ђ :j6={yb~?۸$]j'HaP[89sB5!T k%km^` rt I/1;S/1QwGP '!* ZnCg;c.w/10{p~bG=,1hbݬ$aDyI(L6Ly!}̆渋߃+ S0+^؉f;$txDÆ?ĩl٤A-)a!/$~Sýx"ߓ@V,E:Rcp5s=BI.:Ҡ JgqkxڋHtX!;$҄d^EJ/%l>j&Hּ!^Sý /'qcq:O% _KQX$c,X/t@Oh/v85[ËGͨl> A&S;ޮ\_3^2گtAP =;V8~62?k5U`c~LqX$zcDÄ'yoԁf5%StBr-DE^m?Ge%f`+h/LI %P V@@HP ~‰EAiz_(A)\^ Ti=@4 O6H%#낗3wCڑ^ /`i ~\N 6@+^H"{ $&/up:;;T[ 5}+GAQ]6g)0tÀ\jޜ7sdL*?K|Yo ͳ0ii෽91o)wmNHBNR ٌ 'x19h~Of>$rx LLl tˇ _'$ E/ϑ<'w  ZOC hŰP> IE)^V8=9dߋVq$+4͜z It؉SJ瑖6J IKiAD oA*]X&uރ :R Hh`9Fok Tp":&ay< K{I)B@Ad(̓SEK uOn$^S X}e-D$b,W*on Hz/0<];V f$sܞ0w84S"?@t`fG4Ho0pTfg2;ҌQ1:JBj!L0,o vXm $#\{xAtݳ7I͌ ^;Z>Dr0~NCՇ4* =r8<{O~h( P-^ ,c脕nbIX84]iIDѓQnS^HB^JýȌyN'oMzb )9!N@nk Z,frl A ܽ0أs8l$ֿ]n~mqTMgM=>{\}O ݒqp:*^,Aǯg_EU>ժZt"qp2\ 8),d/ po}o9b}o9~z9 d*@AʧA '9~Vxp\t8LaJKܘc!ƮIB ֟Kh[vDrAvyR.ev$Pnh{ N|hHrHpn@xDn2`oKn$f&Q-LIb&*ٔ'A7:!$35\{xaF5Ӡ>8ӧKhL53(;*Kc>$ޏd8j^Q;¾$cjw`q.g7X6s/ KN1B 2EJb,AIKiYG1|@d6`x@N~/$z(Q*`b!4P-4M $^S 6T?y1:RQɂ ㆿ'AKT0 x+rTvJAЍ=Ub`q)0ڣ$9pl\B.J?%?&e>~yH[J~^v-a7hp2_C`G|~ Tp7́Yĝ(oi L!鷖V}vX.|8#)گtA45ܛ@[gessl#Y><t3)uHaS Il1tK#8߉-j>,83a4MAU=ҫ%he ǒDѰq B]a$ojcRh@ǓK;F JD{D݂B(HDwA3\{ /"v 9@ Yg r$3!?@hQ^ü5T`o@zR}O#7OorbGθ~MR`@4L(N?;i'A88,Դ QQTybAo.I98O"wa7Ipo"^Co"3[m'}oL|JP@-Mr;ah MpM0X9DQ Z#s O3 -BC%$/BC}?l$yp5UʞNNֱ^!^"5WJ`a  {ez%U@P=h0~Sb'LvR=NqSWl,SCUYI# QÄWyηTdA!C" 3 ɣRYK'$ }ÿvcL&CK4yx3h .߱CCU9yq V0 dNHBNR 'Zd 0"KCBGq1"Ej M( DB]aNH"kɜK~gt+4i#12 m 牁|$:vsAhnIظvA$(*kmKXI]͊DÆ>&@%xP޻`-A n"j!ZDFtBkC].9D1)D m\R6@kl9%75 'qP.yޯ<GD)i/Ș"91 DuL`L Mf;!]& </U$ZyBj\˃nedHAH]\{|6:J0`]8p ܁Q.*X!1!hUƊ1Sa" 0 IIivA-/:@"m@Uj\-h8$z9 L-1>h[!$!^=9`s:rhcG~ HJAMr 4Cq] MzPpң@Nv)K6!&n-Hֵ8HŐ0+A!4v6SA5ܻ#3\6?`ڄl#h`vHX945DG<5ju6@u^HNJ ` K&YY:/fv/IbzVh MB@8}m;x MD /eⴌ+q EH!CBIX` RA Fr&),$NSý  gY<qk( =E@/$~Sýޟ+0+bsZN4#x&c=?ކxvVsh?n ~~?O)Hz޺<ɏ^+85TSF:t  C&@=9>?x*nD~$o y,5f`PbXDÄGÄa/c* Frx!}Xc'a*0'#r1xZ.N+2DoZh  l}ah:j ( &xMMe6Xʶ[[IOHNDTV(|4]\{?} OXhʴ'?&񲂄4ߴGt%s$)!&L'BNJõ c&&Pwd^-|ڋK֒}cCȂw0d&c~M|p?-w* T|ONgʑ Ub P_ zTH`5tR8 _P%F9aȽg{ #hLC#h{,c ox!$ ^BAUA>7]e3NpAD("+|؈6RMS8+ HjY-2IG˫7nA%Ej8vV_l6W|E<,]xǖprϱ9LPAS.bX}QA/<&~&DTŧy9ɨs ʴZ$3h q P/yzN4DžC#PiWaQ4KD=,U81.,p*H I$8Ih ^*ϬHpDcD@!IGAO#8Z* BCa(H@$k*w+nJ GCs0'wΠ0%nR}]q\^ n~\s(|&(Ns%y/(qTBA||:PU:Ȅ 洎v)h~cy8bɴtƼBN>;ywH61as#o v\\ ^UK/$!/G5y2#'gEq3"&hNP%11U DVA01喅|4 po_Du`J_az} 9>Cu$!qP5fc!k$4a1-3&#92~;lFq%,Ac!R?SCCqhjDRp$@HF}l22]c_O1nɇ*BR} 2Yz?;jWG 8z :[x5֐ FbGB M`_mo̙vpMANiC#}yh:iT8W*2/vz! y) >D7ek7#Sc>_.](~XO<}xv*EkaGyx(̙'ypK?+?m/^`|A_Y~ po߷8Y$FUBCmy,a Z=)!1 (dJ_@{.H"X"XGcĩUfGq&th>Pg 6UZbVj-Ʋ^\ý;a=B1Q$vӐE׋v:P! 5Iy~.Έv!dJ!Q^: {3n<~vETaݦ!)A4lR846@^H"{E;OKw1Qe^ڠ,QޖDAYX.Ɯ( ,@MJzV|ONǬ&+ |z]` ]!hU5[ B$4ܘ I=9H?J堕+źVQN'Z܈N H@I?^=C{g@) BψByH  DfV QS4:7&N9pF`D[}Eeemuv/[h.4XZi$ojG3G>vƑC-xqƛ>8Imu;r(Yrko>{z3`x/(::ѩx 8IJ :5݀9o[· ~Rpm3-l`:nrQW^WL,\;љp[$*LӳSNR:X孡c`teCeQ:83N!  jl$!A߃x݈`8aW$"Xtr iK$lL>o7x%af9k@lC؅D2o Q,%Q % AWUcOkZe Ϳߑ%'C(1߿'gQp~8np0 ++6cEc~5_~5 Ȣl/>MNh?hϱβư_/y( "0{rӭ4NfK`PQ l ^[/Z?$A4L=Dlui9,߃uWdņJD9Ը Ujs.'Cذr!$ij7pEKp L:?:Z;瓎fAhTt֨dqd*hx²lB>JhovkSy42"h͉'4KCѰ~l&:G|^H"{LL |P=966Q9j)oG[U:l cpp-L 0 G)wY2ܲ2N-n9iNcd8oD|8j: -HA!yX{iĖ- lDf8e5[J;J#Ft2;Pc p!< Nkz't98(MV^V]3j#"ID Cv0vb2`9"oA/iq+ #ğ=gsoJz{dvȄVJm32v,ȜRfuk Xh_|}-*"<L{\on ά P㌫X7Ad2>HtXh>.D!F[pT,պ<3^Qc,QXؾ-g\B:8頱v.6ZCcv{U3!sQt7&>*_cH3$DSWqb8;@<P45"Q]8\<\${qXs\fNR=KY!Y$#E衻r3b>G+qd3cUs9[df4(#k#.FFqqF=BvMK掙1UH%n[&nM;DSW 64l5%yqF="ˀ̥g)!Tײ͢-:F1U}g8{S9pe@e}F=apn G3֫h_8> k3`V=dV)-{߾یmjg(}X^`W#*C`N0P_g$sg;yd=2 Ɗt"(}T_ut` b6Ւ>ߛV^+v~!1dwi82hͨ: 7mf6V3e5m]ϯ2ƬG}VH(úgt0jzu.:gnZ9PS+zW\˱* *.rKVߡiWŭ&2qCu O46"q}$ܹ ``K$x޴!5tyo^`.ѽy=r=0=zx@ȶε?ΈQg&Ȥo^W]qd؛A|±i.:mvNўI#/c8$|u|B`ẒP5{5Xng&fzOZkl_Ɨ!xH0Kcb.R{8`ŏxJ4.%潽7\P=v!N5rQdt '][䑭&dxLdgl+EnRp55@jȱcTw4ŁA#S* MlҜ/ Qﻥt&?be8 -d'CB:jct % Y̤<"d@>#)j$¡\ewvfeߧIAƼ~ 9dw!dZ{<4veqƜJGѮ~T}$(_?>o820n+mg`2.=X7/ƻ1s ٟ~B%RrmV>̑Ch^]r]m385`- upgtOGqQ+1;f۔O_ {xBn:2e\qW# ר<2=d8G.ʧs :3b>\+*y8'P b簵gza+3w5:?X;6ëw9 RkrJs3v!=dIѹ~Qdt ÆǑW_܅8Vnh2ʺK_^~<ں?G壃rPWP;yF =oµ9{yE> #)4[rȓ8ݠxtm^ (̢}J !;[ŷ[#[ _khܝ.yآCu ~" 8 :xER B@ǑqI|l4 龄ѳq¥|Htm]ϯǑWH h+TbqFZ߃߯-爙>[A DgFb\@mk=Gg(}^nT9Lٽ,&Nm)f/_Y=d;smqT\\< t_zKiB Wm[Q6CgNzUtyx\B? {x߅=1YFyK{Ҳ Ī gf {PM?s}Kt"q}8wSMlxG|1L)ָ-wۙz+Nn1N=i38#F=0-]f.9Bu0|983e4$'+h73GX9=X@.. s98!Gw;cZvgR#=%Iuú:~Wj"T~U E|Z({:׏3r}w^]_(R_RQBr@P% n 2l.AB GZ 9O@R,5#׷2Bqgxt?^nj[C3r}~sxsy]#kUpEu13KX4d13崝Jg"!ںƟ_#Iq :3b}鯳2#L.X5*-U㌭5{v%Ǒ.=@2j= t |߅Kδj,eC\j0CN"uTpvy`E ں?G kG?-d QyIL)Wȇ3z|ASK-trOs 5]0']T@`g;;07̷ %1KqՒ5+͔g/Җ%} _GnivL]EE0k$vdzYs~lItk?]-3swZYF)spa%O&> phDQ3:%FsqF[" e6o?#n|}}˚γFS&~I#>StP' jugMDЈő kK+n`{ߏϪQ►ݺT[ָcy?r#cJ!f$|G^k= uGӵ(ǣ Di3A/ u~9g&lsdoL _wgF`oITӎlT%fy¸~; n&9rP<?U^۶~|6{@tHϗ!$R\@m| g=xvʠL:<@ ))N'^f7ghT.đ;;WPsg&R$e+܊SB>P?utĸ)*W hx"3Ϊ%`i`y/dc.n޹wU[R \Bw(pB8+i]i\,,NFb)R}),f"0(oL5Dfq_]]R{xݛ-^|f59"<(oA^J@9p-`{-QQYS,e a_A0-{)o c-wuF0 ]M rYfv@/> t jIl|SH+V*71|{;wD*DT-vWK|%{!İUT?SWP*UBոsP`U+U瘱Olݤ΁Vy-,h yIj,\zQ6y`2hl _ O.hW\]5n)DKl4 p.@;CQ%ȒuZxcBlmgғ+kOʉhkEvmY!'d;yB’_wxӐ,2 (5/bB}U֧P{U뵘wl]cJ:ഒ+_F/p#mHuA7K¡1)nmչh6X}Lug-Ͻ!d*MXftz>iVnRvS`$6cli8K"y7Z }Rb;uz^VJj A9B"»Zg,/#BQO g ~oݬZ}\"%~u sClP9X@Ivs-"Nu}`a(]Ą' ^0,Br[!ÏuZUmL7\oK+5iF@(4g;- b6r)w~Yu#6rf)CmX^|t2Ѳlks廃,Wp{XOVDL"9xx/7<ݮzeE>nvbH8|Dui]y/4w<-Z'¦a$_W7tkBV3,*~5F=,Pzp(wjpc:ljW[8*г\ĕ K{.bҎy ̭ڿj%/3c6853TRWγ oDH5 MΰoX-JX{bؽwfp2Dl8>;M"hu !waQZ.hiimO';=k'[[[:_k׍R6]15&rᶙU8| [-ioް3Tfzc3tFRjne79@.MS+;Т]C X :+pW? @$ڋS$3p LMZC`jզ7a/+M^ zqO|bw^*{ӽL~/1?ڞ "N,txqȺwEߕRA~%8B-3S斊(ܐ2 Լ|. UOSYmWJ-H{ڢT9?6D:>ƭbDT7%gfX`cGtkKqL#OE(优LrcI{ymtV^30\؂ٺE^6\u葮/K&P. ~ukB6gp̐Xk; % i-@H kסg0x!_fT>Pl^}Y2cX G.cm3F}xww6 FJnFDz lݰRb\4(d%CYj@NbzķJ5IA4 9aGM[[D3Cӣa;q+Ks0!K?kJ C#!zsa/ƒ@^j?zvqsinf*ͳfkiJ!BggB<'1 ʭ"[@5P,UVvqerv LZmW[9 ˕{1_)@/,/lग़~f|xVpx- ; ,d&*QE% )ebakzcjj $l{/&=ߋ#nKR/{wL)痾bL32Bw6 DRM*b}?2!ð#9C=(>W5/2^>sJxENvT\~!o6% 屝G`3mm[r^$nlmZ_p"~Sk i #}j%ց 5jYcC<,2,wx';ұTf-RGf^z{NyS4<4~}rLr]NpG&lEU΅9PKn:<3WxXDs.a^rP _׹rLLCrm!БA$P۞9w)؝_iC{JH2 U5THeyz}:c% Xe# EJ!/o]\b 0XNh̬r43 J|ST)z*Ba!N)^\y;AHĈVݡUE3G3+)5Leɜj&t91WFr xr;: BE.{@RD$4zcn&Ŏ47ʉ2*4.#.5I]ܳhފ>-ryd֘d 1r> "}P uܘd$ wB(0[@…aN 5,פ `(8ټ]mS?wn(dUD (>Vkh#Ca9G+snx47w%."'bi{_j0֡xP4;":L5ȧԄ@5)̬,J b <dI U0WuKs`ОK^qy* r_|ܕsEt3Or %8dPg: ȥ/kIب,޵ٺnj?u`zGL.4LeA F2MDq{aD^#`NoPa{J(5Ԇ} a!tuJ, K /yWUH6/{3Zwm2 )@φe%@Ё6B*'@ޕbekT?:sIcJ?_Bg>;bѽJ)-.G0binQڜgDYjRx N>CX" *> 4̕=#f0|Wg!zM%]n*ao'|LK(qw#CݤJ?D Șw<Sl'hFEέ]›Dy%gS0ֱ/bK@=V˹mQ{ڌ}wt4~'7f.:mخ3}t$R8ZuS W%^԰Ψm_@ipkGKHwt+ʩVQ;{@x .&o)HΫ|m•Fþ&:0$'/5B*`cZrP(6ppYyMp_|^Am'D 0ͬ_j,v@{2-{)Pw?s«mΘ%ղ{e D!n7*ϯT=A1+%1#5D5^,!QENS搪T)%%/PfjS[Nk/ -~A2f\-+eM7{?dJKppk WeBi3YBe2Tl(bڙ&܍X&Z| Pw]Gou% 5Oyq. %spþ/8f6[..PZ0`|%;Y; S2Pt*[foTY)$X4dtaMUҵqGhI˦4PL^9Бn!cd^#6[@M52 0̲ʳj+U؟jG7 ,5h (rL؄^O;C6~ӕxddqlI~/dIHshL]ܒq+?C6?ۮex{TXscKL\/v(YФhDڼCf󴞘yd3!\RqR]C`ɟ @0"l%:I@OWtb3[b;BDӋ fFg="aSJbwM~X+CyZX6nn&sF $-h5S8dHԌIH] R7JERDt]F/*iiJA|,{3l'6`$SNÖiϺˇq¨ku~ N”[G1בIO4*pE6B9@d;5z8=6!92Ǘ9.qQ5Ŧl53`"Ft)\L% E!o77U<0Ϡ!tML$dhLSM\4RW2SSuC͡(6{Puk&{=KPV!zgNɩ;1Hɭ~ 'Mc@sej¡K yJ|99`&R=W% eX)+&ZqUBYuh`-nYJkՎj\+9ugo*BHPfzHe~\P"<[h従eHQsJe K{h5!8(d|UG KŅoE=Jf|aJmeY``9ۘH"\IcƍG9CY#4rj:Z0 7~hܖH"=*!KǹD) Uĺ2ϐtɰ8k^ATeK]7wOA*UuAdy]// A;iGD5b"cOA|{ "˗hv*zgN6?6 E܌ı\yYܥg 5NdNFvb+r 4P8y[xN g b%U4ٶW# AdPْ֛mܦŚX`Dfp|eUY|^O ]/ + %-(3X8JWBͤ#i[]u'JZ jʜmHP{!(ZC߫JDU' Fp[uf^1]  a#6v^ 4L+"S}- ]>/y኉W甄fu[ `3oVֽjBZU_ <̈fQKKցqGPv]șIAFg_aDHU"E>>C` 2eɷ}v@BUd>-4Kf98ExGb^OVhIf·wiSp@B3vW;DR:}vz_, :TKu*,&GoCXp?6;Ԑj=J1(3_DEHa .mXIZmۖ[_%)boWi0KIHA)!h#"-3L3IoJS5#x l0I4<*mԊ*}-8S5'H U3DWܭԮwL'(⾺mUe¢Vj2Y G> nɲm R=l[38,PUB*{'멌u/$q+SE8!O_h_3,Zd>%) '"#|[j\ͥAOe6XpR` uu8)HMj]-W[v-q)iҥZ:ۉEoTnbxz ZٸoĬ:rtp|~#K"֥zE/#u}(3|RW7{C{]LX2SRQ ?X}KP%dM:TMHS3G03jt5`ہCR0+@t S9בD۱t Z+:s)| aeKJ"TيRG0J AA$I/Y mArt0񬎟JR@s{w i.Ц @RXS ]>5!/E"AC8W`8zVǑU-T)ոe\Æ1v @%[C@̓.&fp%b:3u#_V|": C,-)tbr?wHGap8HW%:\6ڙNpbiZbMPoIiu<N2Y&klņ6B)&|6-k޼k:5#lxD[LM+n*`po%{4]Ьz{/1qS 'z8 ]HgoIK!]uPQ !r sJƑ8p}qm !rOᨁޭڋg$`Oڄ\P.<-ec4PV(jaߴ?O9$ Ñmx١ULZ9WKjWKSj8JoU ؐ`%/Qƙ)pQ%1i [ +Wb4srҤEf-_j a"E]/>B>)QfU檉og0 ?|j\O nq 뷂 Q쌒zbUODQrWl*VLGGE"8WMW#~Y6єZsyQGS1ÎO7ŗY^vrԦ* `V nQDnjrJ2Hא8[=ń$:v5|*{ȶh13DM6CIn9(^E<ئ3חzQ 9=DCw>MգLSZV`$@m4c] T/:2-Ք gJ6ABFTpֱ끕vR)!+cg6;3ݏ"Y6HaNxb5ԃ3;K BjDjM_ +#OKJx𱚝orɍ-G^L7\K\mHpHBZ=H-#I 3*r*b&E]l|_Q}gU P/M)tb)A{L+Y"VDKKFS_*vrZnJ`~vD*NOmTpVZz†RUPyf6\{%+RiGul` * äH¤Uຂ>T;';|/f9.mX#tt%GI.UԊlWutSC]i%'VT2@S%T*6,;kΑ3 4+guYj\5R$3hA*!T3C 3um<>;a=Ϩ ez≄˯Y M.Dxc/D )AץŠ0XCv: K]D:,g.\by ؒ( U"b|Җ+S c 'V\b~Gz)g {`fgΜV eX1 P7m I ЭķUܠQQ*Rte^Q^u]ÚJz &ڞwP-Nt""17%iamw"zקaM۞(`#Adpv)Qnfi$+m7_zMH@WEjW->5E)ѐHFDQ8HzF": M =zb UqD00 xf4L'5-)Q K({Ҍvl2J|Li;@5Ywa5 i&8[Ҷ*:]u׏d[pxx"V~I("x"h0&?jR ~0w;Pkό,&0HaE퓼HEСX#zͥ&4 xTrAOJuȫ=2B=MUN1S=󆏿RbJ\rOÉ ?p7lm9B MmMwķ3+WwJ~eb86)[_[6O>/㛪#Y'Cm=aAP,mT .{ۢՆy;K0FQ}*Mˆ6+یB e^\EO ~L qީi34zd5|+STSbά;iN%#*fȾ D`X!"ŵ<)jS+HyQfR5=TZCD2s(H$]WS '.& }!CHՂ^D}{L ̝%9_sqEr\ HUz塷t,R6N!Ÿ#e^ଜĜxparT_Б gy+д hfp /3%d&w*<.ZA[̏#K[֨hhzg,!?IEݹkS lux+gU(y~ }Q /G #= uԏZBWA/X~hSM'ޭTSdԻ64QMZcvx=[8MG2˅R&$& "Ϥޙ2FyÚP{ȟ#ԻkJz^^S}fk^!\ԲX$JuZR6EB MpF% %K1{G{H""pIy0[=vb-g5Hr+#\R\Ɖ ɰIlM4k}aIy2i17Dryo- %`nu|D*PN֐P #QwW G8Gf~ZSd),0NNKW,EwM?Tn?,(PLP5UMV2-Ѥ'tW;p׶7i#y\P#cxM5JϏ-k\L[>LDX X!WԦJUQdF I\֣SgmGo|}E?#W-峲#]B9`ؽ>CII#(lH+3U?Z=q:Ә8\* E" 功O8umSdhDgh(qXĹQTjfH5P`HJHUDDItKs!УK通N:Rf1Vނ AHUHiS%*?,t=RANT&>$+a[ `o~ؼ]&$6*ڪ2JJvc$<-\X%|osOG}b1TX::i(U $R')!1u~5{(P@ךt]q!_>ȴ]V =%M t VnR{&j}5]"S2lIb\؅_7ڤ 8BB3@"wHmԞ\&O`2'dn 9'1ed@n Βdή;.#EjF=:n2 I!#~%K3йVRA eoY"(1@^OǾw^DR5qbrz jg6q嘑q%|9#d%\tH@^7mb>&h4G nL%yŪ/BpHIt^~z**%?WrU j<7p|Jna RN^6R*0;A;^Ү)|L?uܳj~(F1%Ӻl6,k])| 4;Υz&!T/#>{i'H7-)ǽa,ME&I0\UʪʊkycjĽ4-d'>UGl&.6EwX}f߹,Duk>6Kd]T}C$oy@ޚHPZ9 R/bk'DJ/j^wF-_|:~j]BZctzJ"Mƭ-@dkJIEO0ˎ{J6e(%.5fW(KS8QPdžrJGKmSp1Wo\ҙRVOǰv'T^ z.qQn{=lJ:bBJһbN6.v3dǻsLBȊ/:\3{r\FhY#>;&[j#QT*WǕ~5"s@  1` -DOKm{.',H3kU pAd@܁] /bcF @ Sm4[8bݦ) Hng ˅`$~ثK_/lcIprv|>V/海?-u\7:)oІz9Аֵ܋Đk`s x""HJB6b%(Z6wJiL~DP-3$bTB5_#tWHv@ ^%YBֽT ۤEWIB%-"]Ǫˌ(Ύz\jIi|a).Fͯ&c,(v Wn$K1q;BaH)//A[QpN#As^j-u:2mo5dg.sfn7; Mu UUk f1뱀]r+IIMV1DN/M7u-o,2#EkB)'mm(nBT<4T ;S,TH-'jJ9c`%zQr(@1(p\x(wqtU}9aOB+ܒ 6>gfkSoT#?@ "U3+Fò#{}G8AGPBg*H.P*)WjVO%DM >=ؙRakp [zj-.4dkw'ZfD@T8*]νӗ8@/&|,:dy$NJrdHfc} k:3r= ׷.5SVG_7>uX;,N/-RZ+|IP5k}Sg" fVdBLTvž7rJl9QVQw*OV"glaG S cu0\c]v LkM.]D~^U6UoɛWwwNIԿRaHMol4VT  p&wDd0Orm2!fhD5OCadc Uq SRۄM" G:[^4Cl^K]Hũm-sp EAɑmZsdaPt>Ō&_;%1RrP{| m T:n f54 lfB6ugI$RX1 ,d] @@qRwwro(տTqě+آuV{~I,ilrH-LQ,E8ߏE+$2f~@@!.$m?cA~n7E)QH¶&}q9{0d޷W(.-3rxN!.uF_MPߗ9Pa^3I{`K fss!N9^`b-i!lW$eRxd*`j GDTfSPʾ~6S;#CZCK?BKif#]9h-;A?Te\Izď`GbLG(=! LzMiγR l4m:FL.{E3)zer!AO+j18!޷֊IectU.lVdŕds]50@ytম}Mӹ@ !AMA:EKm6I 6|{ Y.NQyL|K!ۼ>Gv@ "ΈA]ΖJ/<XP݋m󶥔X?~Ax!ں?G PQ9n}| G.4 KU¶ h3b>xo$RHqR\^b7F36MƔe^tm^>mtP䒚Wp 1;x߅" 8l#LF=[jhM$\+یv3} ~"e ׹Gg>A88"k8WDaC7VG[q>I͔s!$L Te_IUsC)gyUU ׁd81ŧ61u?ub.i&zEZ(8nf\$gtzvKGDFUP8"ΈAF!'F83r}z`Ssa\%*|PS!| H;g%mm^憐Hl211&pcpx@~=#bU H~Q `8Cy |" od&q E{XW˳@)l4ȧb.ظYu!BXȗ3>[2/YW>6u`?(Ns?ev1)!9C.up.s_߯B3Oppj^Gh<:G˯oOĪO~?~~o9]_&,[ߨ._~~oUo_|;Rn_ 4endstream endobj 41 0 obj 215466 endobj 46 0 obj <> stream x<]$m@-YCӮ9yp @`$n =~۽[f{俇*Y{CaHVUzԬ'_}7;5}ǩsuzՑzj*v/Q *S޻VJ6_\lK1o`R__sq_ /yfy<"*dBҔMż8`?.:[E-j;[|V)$?Ӈʇ_Zց`^J<{kVWӶ:wU|fC\ bu&䨐ѹjv:%cfSa )IҪ;EO[^W>'Ҵ'|vi/ IEmbUIBt?Я$.*Zlh˃֜] 7lAffVj ~T0Vv_d`+b͌lҝ4/f Q 1@$]yee)EdFh(cjCA?hOFe+E4EŁ&jL{w*-J FʙI? fJLHaQ Nj%,2 ܍,^p?[m, !,Ī) ޼y9:Չ *)QzCnH.jdxIM@ʽYKՔMO]-\]B_ uA.5}/RX=꺨!$!Oqa45)VJH9:.j_b $?AIm}fLkۛb@k ;vMAI&)hV1C]5AႹθr. K,>$bAѬs~e 4xiz vtNu^ո6Zs|Po{iViB-aH%* ;0CœR'"+^^)Bo%l6hXIo:[?_!([U|$\ӯ8q^u.{L_D~4l/{n NS|&8"vAp_x 36dx#^Gq|X_hKn)H#v%a^NF 8*@xQ| =0 p,v9}oͿC<iV`,[ȈhѠ7n΍aS YWc3PR鱅z˅E0;88,s ]"eJc] ?> 'ۍS9h%k OfPW(N$+us3 ,D+qeoq:O&̣qaG7tz9oT!;m1?lxBFAVղ'XC Y y 7LBὗL~Cu~XTHo-֕wtPT ":ʶXC8dݨa6RGԗxi-:c;o7T$R*Gn ? tBr K ɧ|{$2SW Ӗ&WJK OݢV1V*ל:#WL/KoF+9,+$^.͆&- j~:QKs2J<,[A~:FN-_NaW){+Oxgl+ʼnW4r&/6t" DžOR)ǏƊݯ7an5쇅ꋴ=C Dž·y.n l]6ÑW(aD#o~S%B!ʞJ{w :mූ!d1z-My3wbzs}Wiks;s$ĻpQYƼ}3Rq vjxg;٤Aiy'#f:|@*2""CSgʱ㈦S;i (MiUGYaLgkFYw*ͪ X*BUMafgB&VO0&t.JbZPX\݁¼m83`g _D@Qf 0gWml~N( X9%[YZ opP1fVe+Ҭ2Khծ)ҍhD5,:&)) JrPAVLK 2-84(#CqW9ĬgYFmUNnF;m\ˏa\x8]r5t@x5qG(:TD5n  Q1bۄ5LR;Z*:.bi oũ1ty.B6;)hsSaT]a4D ˣY,UP`,r &f7Q\8tHӋ&0 ڱ\ &T<#?R ) .%@F6sF61 k1:20 3Y"*#H jUBn6u u984tE" (@ 5,<6 $(H? /Dru)k1c2.oCvCJ|'ZB0 H@0ZM-Ʌ4%&x\JmX&.SĒ0̠úPYFqDSHGb0Z.;V.b2]Ǹu(<}Xm/AǑ}?X0BDu jD!re_Љ:(~XD~A`?pA4zE6 v6ᚿp DxW8<mHCx_a=6{3j<*mI4Gq,ueRV"BH",D,l MD 1y8}[#jDB&'3c`mtc>6+s8>~8\e6 𜓆CKˀ>cx](A ^劈alnòTxa#Azcb}捗c8xWA`ƒo#zPYxRySvG8q\*R7m"-^s|33hK$Pm{V`KE1S+1o7Ȧ]7H٧af>aqFv(İp0QY E73 Yp"a3j%)[h.(F kc&Lqr#@bAHp>*Ϡ`5OOrn 0}~u~6>.> Z, o~״߭Z1R?ZrhBV xlt@?h 9e HYx^ Fjtm_HQYД$ni䛂|gį HncAM]%dCh^{^Q{8)+゠$8:9'y渡:DKoJ[䕐pq^+KρƕN2 ?@fz̅g˴[`󶀃Tļ[ nsƉ\7?IR㥢'VV niv 7:>JW_á/vAw\qdx#UN0w㙢6;Ldm s7^P4َ|zk?Eukxv@p yc81pM" {W a[RU].*-waW]!` dLf &Ȏ6o&vn9ܐgoo; &[m854LAَxDюxMIގ/\r:\dp;^v&Qan3iIF;d;^[v!~wy܏'ۙE7adC&d <tlw ܐS1)䆼Z7OXCtoxH hh߳6ґx~#!@kpxzt{%$܏]`@49 nz=Z\`3E3)QC3h!E JHd?^[lሎ< v#-|y(Mwf@ =y86N}46_a3iHdWT?!)Rۻ2/o*f< \4۟κ܍gk0.ڥkFv<\hD"[n tPY\2*x َIZr] 5Nr2s!܎gw0! =ƴ[`ĉ.*܎glgW܎7vA2*Lеn F+NqڈvMg/jornendstream endobj 47 0 obj 5112 endobj 52 0 obj <> stream x[em&?0Ty0ja ) K]-!?^#Of3v- y`+ 2m/;?o?vӯ ~?_~IJy9(/$%n{m/n_ޟ|A\[Bns8ʶm/m;cQOL}>um;JwoBҏ w/e?N⣜Ͽa2KgD_}vsfW/=_{n[]q<۱(r흪W.eҧkϿftg?,+|Y;er+nӐe\;.9اxwgRVB .qcfI~]foxG=T}ffwPIW¶޶E>-He9"HT+:3rmp4r?{ũc/_) h/U!Vlw՚|}W_(sߎMweF @t&m2hȈ2|&}s4y͗ުU>t%'?aijxר+?I*_TE=4$yy? !NSmx-Ԩ]hHjR>_}G+K?|7KMK-,=U\o+hݞ5h IAOV  ?-$ψ 3 MO{g:w뤯}NR_ Aod =whwp<˱GƤrlu&/9U̻`FOi$ Bt2{I0l#>!i@sk'Y 4!QKq mo/N,`h /r' z88a[>J=xDq fF2^#ʹL.D-1 k`PU<0Tu1L6}q`vk2f{9 M~i`fhic/Q Vh^!D/zo$No)V9uʌN] 'uHk֓>I6G3dVWt aԁyh6C`.aRIiV=U7n7Z=cvu<:Cz=8x2QRg0'ᬹC0,ZH=f!ק/zVދaV`25\6Q4è%C:&Qaq5 -=ch?5Tӭ,%|'08h4Qi98<[@˖uNaREiGՍۍAxlIɝ$s4uNp&wx,0ΡV)Qt{"._5{<=xW*=c`f!d#01\a628'be"d0,ZH{=fŌ>x̉|ϘG+էJ2Offg=!S4 % C[PxNIuF B)\JV{Xj9Ds1{NXPz[)hF%{`29y60)¤4n۔S=gL{ڴv7q<6tsͶFP4L `ԁ>7sC`P)¤4nr;Gtؖ '`mP^QDKY* LP A@r-yߩi̽m<8n +dNMf`0@ %T 0)ê7F|̮{LGh^ٮ \o (hN/Rp~hV9r)Ln!ql9ݙtO-l˕P6OYɤ )_6aǡvrpU*Z~QAZ:5=c޳i86?Qa 2F0@ ô`gw-y,dr7 4Wh9_ʭ 8*WLe0* cP)A+(uVN_ ' l4Kρg륭q$ Ap0X@ \\¤p [9zHc=nnq=2әZy6`aT(Վ!F!&UQv&QB0ZH=fuo&&ĉ۹|Q8s4Eg OKhyRR`.`"8 P-j903&8x&x~HOPTm *kCק(\J&{XݸhlE*t3 'siX n"E VN(hN?2#$ ,qhS!SaCQuvzu'n;f8a>d-WۙoyWX*@ X8a6X8R gXH=VVHsr<paAA98U!€)\0K„T\dm<+Fs-g*;` ?9'T-/`*q+DI;YhMj;F E '`tG tP숁K(aR A%j&n2KUiToQ{L [ _Lv{8 sqMR(KV=dWMqwsyPmWu@g G*o`9@v[ R8T\@$J'ɥD9G? N9<$ *I1%8^#1q yZ9=a#gjy#e(;M'P+'HZ5𛜷^4o'RxnS3PkbOpοGZxe ,$tgm9rrԷ qw?$$er&%pfng#/x9gƱrO9ӗ̢ߤTȚ)㣬;ܴ (ȵ2-Ir%VRuɫbcHRð #> S#yTITI9FrLPd^IT+0>;|~߼~M NNjPְ!֦ a张CU O5׼";+&Q֪L,T4khQ)f[gS)f䏅J1 BGv1ȨγGd5l}o/󔬆bjhj_w2ASGꙟjhn蘳P ީ9&wZݏSb)o0v@ s/Zt]k6&EO4#k<"qoVn±jMS6KrD(w4v^_+dS+~ 114ߢF M%qB-W;,8A[4vU9C 3/b>k/hc ,B>voc3}o>.߽Y,J9!, |or]|_hl$`hsDwݞpfҠ〢 oULMw݁hujv1ߢTqmWL̄ U#wu⭥܏IsN$N]RvBx$4oN`8M#̡'cڑ1Zתm̯R[ѧzx ֪OdD SO~ kWْ5دӉ5\Sd Pb =UwGӘAiqb5[Wo|%5~ARqQ (OYZ@`P $T 8?=!O5w ij+\) p!*10k l0(Y5F(TD+U, s[L, U-hq;;f"G<'%U 0*P$6E "|*W4@#&D( App}ܘ8ȧ:FaR*Uэ/^dsO#™G:p7٩k?i-1phpd́` Qȥ(2D =USQHZB4oľ`b F(  3 &(ld4aq_Xeůh /"kZf/xgW8Id[` ZErSzJa&qX,twqq اy}zKY-Sj` oT`0)9xk`ۊ{B h%l[j$a&|%9105aV"gTFJ2h Չzg \--c5>L|c29k Q@p R,ZH2ފO$9 ^J;P 3wK8.D ~w:F*SaCt|'ĉiMiboVKQ fb(ۇFV%!(TD-*kl=cNɄF6^z 䪣z8ap.ԡa "V%^ {Ɯ´Mi7rGJ >d0@8[w-ZS|Z~Q@zrpϘc呭0Lv_44J|E$0 P,*ȍy LƗ"xiI,S) l$$dE:6 &)¤4bsDDw;O`'x~\@adV^2yUSxfkE ^ BEYqа\{eh 9P4m׋g_J>R8ua0 R9zh2!l .tJaa ]ф+uΠaU%Lpêh&9=c:TH I_~)do '0XzRu"`BrU|G43L,=w(*mghY0 5!0JNarEэl^9O~+9pwdsz%=`s \tJ F(aO[Ou*SaCnU=ci4'R`.rX}}sOշ''.lO~WnUf8/mqa'_3r]o'/J{b#Qv>u*2S Ä'G:e.FfOA+U\xf,.: b6Ng=KgIuNsUFaRUh&Qx0C0|~4GۘP Yǝs+T@Ԡ2._PW\\u9ƍ59uCy˳(uy1L&rXPo݁u:{ #/.`#r'Ma "+sp8ursZr g&0XP_K3#=:vA#{IW艠UK(]'jg/r`ɸ#L 9zn`;t| ICa;N^R;amk]`kt]3_ a&qXP21,;tyeJo{vlxM.QlZB98;2n4}Dv,0 RZfeX(o$ӷN#10[Mt؝u-!wUn&qXK@9c2gU\xM5#39>;T7ȃQB0 Z9Z: c;= )V;đCo8NAa2*U !SLtEir n`S҂j `p-8y޼͒PFr+UAśgkH(y 15Ýgv uиFaRUm.% S,<%e9< O}'^GC pêR9^@zhz%8<4I9nu?O+C Gzh [ NV]NcGD1{p3{pӮO/s)B4ӓ3[ᵟ5r(۪M,0 Fpp8|z6C{çR8IV=ԧ7p, 3$eI%x ޡ2@(ZbDkO1|nNA{ ·2&_Pߞ{gߞbP2c\۳ֺ+' 'aV0q.Q`Ղ5Sw@h]w{}Gd!叉/5](i>HbDh_9Ql?GIGÞ? wo&5v' <񎗠RA3ùCw|+w4H?XG$|3ѬJO+ (y_&EAAJ[βMR&Tb8HwBB_')wIn Dߥ^~~ #9i "#o#1EOW"Z]O,43Y߃ 7l~O|o@*A g/?~7*3ש$_o 7ͱH M$>ύ| __'$%}~*H~ +!O? o7rHFغjK&46f- ~'w0Dۄw_:2R$ߎK3/ڹo58{?ǾՔ|u9vij-Y,zoo/ݒosvD-Aśr'rW{SSjpE|\6H` 4D׆S㴛P︵L嘠j#F$*>\ITɚ?0W7#VG?P8) 35 s>o@5-bzVIɹ 6B;/9aI%a*^YTDWK.qlF/7:SOM^8I|n~HnrtΥch/\Mϻ70.QvtL YD8,ql0|y)+|aC`3LڬBymI $W aprJ.G A1x]8s1f$/x-:Q|t4W3[!"K6ִ"O%ڋ?~s7mk~56$SaH0GN 6\`GV`$Yxg̦]<g]h$81o*X<).s=#xtGhY*i"3sMh~V6Ԟ`59IA":f╆_U9ģם/ΡF# )uۀ['9<$PDG}V}8paP;Ӑ$]N S6!}Sc}J#ZݧMt3ysgt g<[^Y|eRi-@7gBHk 8NXScOK&}_ ·OV7rf&Yݥzr$-V7l=Sb5]7,#帯J߲ݧN3G'!my#6*slf0Pz@ɣZi3شKڈ=81gG6 :p=fʖY g3IKoɊ_zy:;rC8O٬stR99hOitv%_9fy`=i?]XU+ W躃1PW1{^x#_WDj+ou 2*zNu͂O' cߑx;Ȯ%5ol9}M$,[5>=%F/1eOvAX!n{a|3}6}8WY>sٖ'7 |t'I.|"u '[7Rd2v+gkt|Fwkg}|epW|qWl +V-OaQ_2#/32#/32#/3vyyy7:<]\e^e^e^e^e^:/G_a,}xهyü>Åe^e^e^؇B%V4+9iP/32#/32o.32#/32#/32#/32#/3[lF^Au::::::Z_n]g1;2ށ_gO$O}Ӈ,#S4}8:tR7wъ/JK$?*a0ߛTzp-;ޅ%vvD^Paa r*(ΦGOoʝ5vH*$T xAR~zq{=a&3rۈ93Eyp0uaд'u +XߥNa"#+O ss8Ω .xoϝJi .@a 3sPep ,ZY9_QvOq%x+A:UNaB4C*-4@AE%L%_wjl%S m:M:)RIa.rXF{Tݸݶ]&] gL9ZW/:N-bTaVǭgE7oaqLT*n"ZE iT=TY$>047o4XXLmu&^GK=BB1tϘNBǫT~(N%L 0L7MzL>-( pJqK*1vϘs%P9ƍv')­鎨TbjrpubӈsۚKFaRUiGՍۍMI,=c䜿l#}Bb]OSYġ n"(YRIi=U7jgLs`7Q)M+> q zqKE6u+6nKz mmFxc 39f[cvz,HXX0@ > R2`.aR8IV=U7n7J]zc#ќ,J7q놵hWYG}KkGs~0cL%nMbcVG)_guSо;?)a}8^!!!½RwQ S=Pbn`G&0 A:l "*_4{Dʨ0"k8::bB"w  0lc0ARj$ % X_%5#;z >._O^NٲZq4O>R?$p Y,*Hk=Z. 㴄aX=he>f*_*q0XOaaHUi!"J񏔐zH]pvj0r)Τ-I=FleEvrt9::p 8,zVr{G"J8x$xftU=Dڞ():8 NO7 &2Xz4Z_Jkdq|%DUP§6PݢijT`W~6*4Ӄĭq #'|T-0CTh:w! F7NaREiG=8 JD, 4:(e!tDE`I*9#R?0 8,zV7n)3FԬQxLqe)/1vQ\bR s D6 dLQ ֺ9b\S~% $`SMa%5*((\rXiӊ۪5Ax8U…%z<{WW JgP%נI0cjmV$fѯo$!wh uC~!⣷7We"7iz"aE)Mp\iGDp+"+݌vXJ1Y ۭ R'R8->CQu{N:Er3n=DdE hrK9FAo^zѥ 8,zV7n]~70r_ ljv0MzSu࠰M r7el!SaCQuvo')3mL77%gʳ2;E 3d.1r>eM 0)âۣ&55EWMSj" t,UKoti(R&aMdD0 8\Z\kaFp+Β%0Oud{ c0|ӴIwr)tj0Ip6Cj^*K)ad b+0EV)Ú)a>)8Hz0N`2E i콈ŧd,0`Dy!Y$ݥ6%W6$4%.ԊK VEF*U|mRմ K}4SISaMHAdO ֬~ #wG60ɠV|QB!C+  uJ?O XD^FإQJ9HIԱ$cRIi=R<$wds:v;v&]788LDod4=jP8Ǡâ:Ji{ƈm3si ՝ÇyfʚjȂLiַ]D-*cX'j{NȌayh-e?ഛr +9QEM >N'5QP0,Z,,c=c Y :]aU $VcweIUpZeT=`y01%L7sd:6v)¤4K苬>H;!71_)xU׸r#8(,u>%̎9T Pwb}0ârtK7{rO=q.Z^wqScTPV@} '^ߊ >Y WdR)&3bA\!l.Bt z`{%-Zɧ {S/`3f=Ayƛٻ{r78m;F2/ZEFaRE2 %cϯw [L@|GQCr !pH%c)2x9_R Z4u>r/kp Mea T`4q1%հ"&_TX2x02[g='5:($tp0Xg99u,R8Ii=[a3sʳT핃úIRJR(KV=[z%͖Qb/O"ըVנFKH`?^zQay'J@œ/5?WFg}J;{L〨~4Ѵ*c(^2c9?#hc= #!YbCT%D4KFXz3OfpUW~b֓>6qYuCOJR*UͰ-g^^N!aFSua=1̟PQ(LH㐵X^{,;MCކW8G_z y 28>ӄW5q5աN$QacytKozC`$f_E՘y4CMY\ [8B `!8H@V`Ql[E*q@ *_֨!⠐r`ID%aAGv>0 [9zH=nncH$h<0PSV,=E=Kp%D $)E0Q!„4hZl.#qɚ.u,s a*Vݠ(%a%q@fTIR i `g8S~"$n{&b{s!@Ú=)aR)Ia&rX6{TnTh sJc$X`Th7 `p0X3% r:*4Z`V|QBC} & 6ޱ  8%Di7u Td@ z nE 18,Jh=bbi3aPJ!#D򩪝3S3(68 4gA)\D*!-*8tK NvIdp~S#\B1% n6+cJCagq*bK,ӯ*vYvh޾ :_Y2xԏ?}#=|~ 97iT_ B_=}KjZR\}~C5+,TkD'q*,TTYe*,T*kJ~_;ܕ7 2?uاN|J?/ةS[+rB w_|ϩrMLCȡ]3S;S0Mglt5 Bd&I1X O"I–r5m; Ѹ>M0M>r&1}t #6.), c+m{v/['pLSj? #1JqW !'±K^OV 4ZTGfTf7P6UףTp'89tR-aLȧR6 wiXΥ~bc9%LLJ'rD*ж0]BrP3C?D(!T4c$8(|h]ڹv(4GWQ. 5 )EC'xHllS% 40%S6Nu'̡+tpK %EfU9>buFφn<).] N7hLwOH> v!;ZjDk5hqd?= K=F~0] #z TDOǼ[Қ>ĵ|D1(QmiYA:,FyyL`b@c ŒŤSYE,acL^H8jo3f@@,i9Vc&% 5Wl-{nLȄ-)rLxၧ*-u,Ȏ=X s_guYbXM쾞}}=>Bꀰڑ4tV%-GߵڗSŝdjre.im[}\־hѵL!ͅ5ser7s}NHy<>8YCh^0c>PiuȬ<&Qm% ;?챓V:/ Ø#OB{1i2w''EyvgߒlvlWәo}sE7 |t#çW7D|vcgi7h|&wg{7|EpW |eqW7| SV1?3d.G1ȶ7jm xxxxxx-1z x x xLLLLo U@߷,,,,P P Pm(HI፿9y0||||||Lۆ|o(((e^Fe^Fe^Fe~kB5ERB<x:Px9~gxݞtLy> "h%Iģ$2ƶjcx2 Rv rQteTT 3/㥅 niC 8O < ,Ҵ-g/L>cȏ0 =Kpᶎo9qPXg| cw<u{^ϥp 8,zG,g=\`[#v}PNMig`0OJ*+"h us3 !W ڰ*o' ]8*uK$nu' d%Po=c0O>1l(npI`* :Eg D]g fƛ3pKF3\+q?Z P0V^^ ;(LBe j 5O{0Gn s|myv kO #VqOy=%v"(Ln!5={DJ6>T)w;0x-Q lRRJfǓnax-eJ(\n!o8:{ƜU#}]?DF8֝(l%ק08QBp 8,z@7HFӯ{xV!':ձb)2ppש.0&%\pêhajaQa\o~r P PB9d%T P)âtێ_]{t~@g t|k7{.)+Xu[~5JdVA/'WD[L%cq:K|hnNZwanfd0p $ VeߺNV]"Xu*#9ê2!„T&1#cㇲb%0pO AO#̥RH֍vpǼ0<brHduꄕ0zv0I$M:+/: bK,B>ՅE*yu#+;uIBAVֱ(\J!jمK-n,T) ea$ x:t0 8,zn`}m0Rφ lELkCp^.a^AvӬŐB)BJ8Fv]|xm_=(Jn=x`d<)6mxcԺ"yAnՃI Syp ,+/W2P$Y*Zdt&x3S9?)M)`jTVrvխ?`Rz\G:HY >u9HzA!GJN0-L"apj8T#աI 0)ât㏊Z*a`3r "^ġS49t)R`)8)TaT!SaCtڵ`1!`,CA S+ce) +,b`&1 N4OlxJ"sPlvrD)&-<ý @)Qݘ,gh38(&N2Un$Q!4$(| qzS+2B<[`' <Ɖ<ʩ9')¤4۔H!â= N+J V'~°?ߤzK`&2XTvTّ0˨ܽjm^ Lcs#8Q qQEvNaREխ{$Np$MmRpf` "2X/@ு8!nYUQj@0M%̉~9܂"¦S$(lDy5)adep5lep,:^2n #FN(5-k3S 2kZ443@[B#ݒJB U ь->1a]pч)_+Df&!x`LD:>RIi=\7~G/0Gac?*/qA`NQ1;0!kqyg@ 0ânz]1bo:Ww i`0Hơ=5͐*fs R,Z,c WUjk1zyBܲy zr$8IuN)\J̏zU1| &i~T8͏Nӟw1l¤Q$4bהbIgլbٕ(d  Ǫ]2j8-hNR+Ue spſ:׺b DP#8[r̐q]v~u pڂIi=]QgouƗmT8B`3etuN;Ǡ0)âDz;zn[H\m+[30{(aZ$L;} ]39Ɓ3NYP z^&{hPѽb¥0 8,z,ƴμgdgl=4syYFaֲq[wtLJuT!Q#=#z}cuV$(#*H]N֊8M@+XbOpkĉG@/ǯ 'VNRaT*U?w\ea*(LFej3{TvW tLd;$ 9D VicZ9&Q~3*r39Nc+tۀqpP7+=izYI`&1XTX"z:ǝf:0r6 }]ƠS%?]E 8,J,^Ϙiwm[F|&A!>`ЍD`-*\.Aa",1?pϘ TaиtCvͽp~yi>c}B#ceJT ygN/>LMpԃȷ`vKyn s#+,‡YL> PvFƉuAwMB|ͺaHӹԜj\ H$ۘ9RL50tDSzQbx ȬW!p 0 >b@;EhdEK])7ԍEg8Fo8@Js(auX )=ʹrϘShD Af8Dw@pq R9z,qTi1mqKyi:, *($LKO 'PS)JWM:+ȿĽiƥF7ZpS|7]BڴxRSˆ] 5p zSL>Vb UBQDFc[aPH bp0xj@v` 'XSSbPac.JN|qK 9PQ3„鼠' )4(LJ걄vs~uF|Tl zB L%p1:,vZQqgGqm $g(}8s„6KнO Ӛǻ묗1A1UuaN[ -UؼB˨V-%)+.TV2r "L` NE7]B'0r7 bn/,>ZVú3H*_9b/E/j\E c`痀t;2/\4 v.ax d;U؆1p R,Z,|07SAaA݀F;Aw!nZUΟc so۩R.A7Bo9k9FL &Wa6YH*sXXi00)Z~2(fp0Xm܄J:̈)¤4Z?HWV=ΰ|zbg6 TgƽZg>=_)C_=s'lR~yQ\`?3J*9=uJ)LWBE6Y岺"& Nzh̓@./a$3tQ%d4K?M~=Me-y% I  )PS97 ./ |>apn='spZ@=:֣z:8 h MI|OΒJX)y#$1G00X %1`oI@)Iҫ Kw% WD[)%\)FaTC2V8IZ"P%Ǎס$Qa#gqe $4L9mmB2ե0M:9"Iu[&)B4Y%F.i !"v:9 0p'pk?sA3:Z|Ua; 4:SpKbBK-yJ`t$`閬f]ѥP R9z,<#aᙺ4`#RGR3 ,8 34Kr]C:B p)êGNq8(OQ6}E^3M-8(yK@ a6QNRĒӸ5_#7?ȹ&.I,Ӧ4'EǪp!p ӑu%OlS""5$w+"MX1*7&{T;MjM"ܒM5tMN_U82}y>ω ǶC9t{]GnkM1쩔vYOݺXHh0Zwa]> 6tQ'@]$?VZnhBz6I4| k^?kT^?ڨJOF>lĩajDT(DjSM`*f؆=sORK~n_>}GǍϨd<~S./58G}y j!><=˿zOV45endstream endobj 53 0 obj 26055 endobj 58 0 obj <> stream xY]\ }x'ɨm(4E\/رxwo$䝝] "V=("?.ZErN/v?L? YQ{\|+͒*rq{=ZMZ:S^`o֗)'훘ud~Wڑq) CR\ks)ˢy|\ok;됣 Ŀ.ҒT⡨(ⓧ^\e]tܬ ي.|cgM0 u8YkД[gBym(zYGCݭpf89X~uIL˯7I(̓neNޞJFiMFdtZ(%>5&Z9|[ 6{=ԝ\b٥yQuJ{8 Ze/^鉻Ue!( ĆD @X!효rM;n[MNEpQz"? i5O/IPx#S7!(* Pl0>S&٠ %06TLwxz8-P"z(^ 0{IWɸ8`Kg䄤" @I>A_3%DT p CK\$O8aLJ= ]erh%)G'Ӑ_0 KX~Ӷ:?bvQVt e u 1̮ 8tN=S]9G9Z\?l'lj/HJT@.[9FtD7k؜Ʃ.%U**~u.==^+5 `d7Ԓ&@r1)̑]^#\Ѭ'nn<.G\nBH /!'@7#7{5|.K? #dpx9@1g<_ЁuM }^M"ʺ43hs^Ѭfа=;趍oq1ݔѝs ε[sME=Cާ4?sg6>IN'"m cΰic܃d]2ٴ WA)6 L^.]Rx-Ԕ3o;bD @eH5$e2]C"P>!3Nfzd@/n̜G L1&yhu}81 |[t$]h8K,Q>wDa^.٠6[]]Aq $QMAe.OT3A򄿑Vn;ſ-;P \ J@JNd|{ʹY|~MUH%LǷ-=L P%3/zT[΄NĆoeZW!J>{̆O `@s:D 9JKА;?!9iOf8M }^t آ'1ndS=Ž=AYag p̎>2Uk"#XS='=]=5&s@ܖjQc˙uW]G$ʣ3)yGR8&÷endstream endobj 59 0 obj 2167 endobj 64 0 obj <> stream x=Io^q@Ӄ sKC86' i`0ClFK^- !9u}jZIzR_35==LӏSv% h=i=gty}VSVS4vVNg?G@aG|)sm<ǣs78o[~ G2@ύs uPVL!5bGbcrRp[Ѝ3M0)6j!B}U>r<< pS%D 4u6,2`H H[ B/PҜC [~$䬭󅴎.;[fm C&*M5u։ cW3F|hFdDNׅ25)B0L:%+xRJ >'Ep]эM)'!-IRdK"E೗<%!DžyɪdL&59"YS *8ʇn=FjBÌôBzSeC<"#t1p9Fbmc;kL JmmvC•h';񊺓W^U9AV^ neC=nQ]  ͚Z9eZCA_:F#(?o6| (,c%$f"̚1CKߪs\6of7QXQd;2&jr<7-rcOvEl]WZ`Z:}"q;TAUk%уEkQʗ-L,zb(.BzʡFͷ[ Hr%~!d=&:[4ea1#l%+re|_;;zbYx+r81nV$Ρntk=UPru>.+.2yعƫVYɸUVwZ1O H%yTRv]LeEB[}zI }.vU/Ӓ VrVlB>PuAH%^Ww'*Ni.mnMRQ\7/~lUlq _F\6WuڪDZM\IxtS6 zy 0r*k][ 7a&.eOIHAm~Xr)[,Gq~'Ra(eOP\' b;((2$2 KƻXyz]jz₇ʑJ)=3rPŏ_AR5#2 ^zPҼm}f]8:a5\G:!Xi7&E3T/ h݀īqH%l*FyުlB5KKcO<7Vt )n횰rڱԝSPO%X}nƪIuDuf@i r!#Αvr^%M\ (M~#Q^[@۷bz+$&w:QsȆK 6 YEE=f9xRjѪ(~WXK1>ې} !7~ϯgcj-^Բ/J0+ER$ҷɤŋKri A-w 3ˈTh4[aзK^BV2ӣqVg(uQM< 'DgE–pP0Fw?"{B?Y+4_ ~ZI@xaK NRPND(* V$/V eJڕ1:kx%^ 4ן3 z®&k`IC&Ye9I@+|yS'Іā^hI>Zr1dhMJ`+eOOJŗRʘ`葶p"_[ vNQhC@/TͨRÀp+{^G VBm#-\WpPmI mL<8S-C], X:i\$x` wHI068SR@C kv,a@p{ƯÎR 4D&@I\_5@tZCR9ge綕xmڸx )S(h%KQ1CLaIx6q1H3c@QPhƒh:` )>Gc|I1ܕ¨{؍Tr;L 0^-Ă.ȁJ- Vpհ"^az )<tF NGfŠT@V4%š+ЉT[B׎ՕʯwVzZ&f&ʏOřa ux(\=f11'蘁w̌?cd11w-ךu~rl[+"]bm\\&P-nΰ2Ov,Dt6=;PӀ^$1ý0|.=2^G6y// lh-xhϤMDke?z*@1;b\6hYAgݛ/8}T>{H]i…? AƂ٥1Hcv|~}ւ¬ }gf%-r`h h]^+RrmYa^v'ĚuGBF }rR'6 tvh'h'vB落G5܀e/nDt0R k!CB:D`gԏ>_{~Hx_lb{ Hl #U䓁H0 Gf xH 2Ij(3 EJ'Z}AAƳN1'fhZ0(c`&a%0 VZU[ 跶KoEf17 jMژxp @,ULA#/ܼ]JaC6<<.vʆ>o\/LއAV3 :y?$1 [_gc,WYkp6k/)V%Yrk|@捼XxH{_X,Q/S;6&b)Ą ḌzMFaУ5]e)tLn!RlwrB7(36&B!-ZnѤl=W4uR\d Uɭwf٭^z>P TB "4&b0*!bOMֶ wm#M-,;@7j/8S'P,18`mU|vU Uggbn(k'2F>ƠF~}JY;jFcnMB`TEkFK}}P` SheH٥2emRT&d%0(!.^R"C2]$~G- ns%cJă.B9Lv. e]IY)zȎ҇[9uI&d_O +/ox#UO(OSz&W{>*S& qn#ʊU`KviJsr}",9sX.Rr\+w5i6 9x3?#lgmt~}endstream endobj 65 0 obj 5270 endobj 70 0 obj <> stream x=KqU9-ל&!Ôޏ98v\|u!eR?ߛ~Y2%#@Fn ꓇͕:<핦tGA-{^qI}TGOP:t O>czpRp w i|*ڸŬoYeU:~1#b;"&'O D);Ld.˺rrй.ݗbrs9zK/;y&4BtfG?m$GO@x}%WX}E\L;O0LGӿ] |0ҖC v#ȂQƳ61/&nJ;\so]e `HJJ KsǁЫJ.pGje3 4^.Q5 ƿ`2G_UN-Gcq8 HLJ$'osq0XVdRz'W#\,QZGȹyiA]oU{$ǯΒ-m Gg'EK+txLGlۢy{pmJ٥ xn.?8u: 뫚x]/j[۠<#7MXFA;G^\hC.mվwc!Rf \V_&\Gî}s#r%i%\87zЧkmOqZa%UkЋ׸Xp9bZS}Gؙf}R~V7K53/vXrU[ :GWx?l!w Ǥ :կ/1J~ s?@$ KAMY`u\ `eﶬ%Vt,kTAąci@}Tʛ;Xi I LxZـ\s=AoA?hc<~ Z ކ=r!Ȁs*+%X"r"X2`a, d*-X68Ɓ.2*J'pjvTJdp}(Ô7c Id?" ,)^.|!Y kJː]rY`NEW<ZH $e|mB|D'j-f`,  GQj1T[ApO }ٟǧƺS茇! CUUxQ!6\♍;f-'aG@3@ɗ*D1F!x>,(. Ӆp TBe@%6 ,j/Np !# IHhyq Hq3DHR PY6]bnxm#I<\Ll˭q- n l8x]!UR h>h2FD4xӎv IC,z&p.-m@@!)QӖC22`(kX8‰ ;&06 z@'2k+,MTC*t Zϒ Z@V04C^хjlՉb A3]vK_M&ܻ豫r+@ӏW=~28}BF˭b/} O˶gMi\  -OU^u(SX0Q* ɖ>ŶOt@Ͳ ta0gvM g2Y4[Ԏ`'X(Ql;Ucz PY6Ђ A.$ xtjGV{ɛb,j7]sX;z vlrZo{$X, .ϑ#nݞK>!,,a& Dcpw&5+N~(BϥА|E.VZ0s!DBǐd#· X~!Y~yfZ:PX0D($<=QP(>S! OI =1 @6k iD#XA7i'Nsoj 暣$^:5;ojXՠGBWkko:g7;}QƵz=>bV|ﷴ/`sǥK%X3K2 gt=f%' N!) .9Riscd1\ +>7GC;C`h|+j Fxv=H\D8ւW`%, Ӷn@K]WB_`a.呂c4Li[ fzQ3t\_P=)^=;,ezԌ{Xt{W,-x~+=~}0yd.;Og/t`w~QKM7h3t1xLc$;G0wbx}R3XUޑhyQ7` l&6y.v-ɞѹ!12v1܉,!K1lu !yyɃx3=J4kU}3=!{1 Y>Њ}kk3x|E0||vx?Iإv=?Y(Uf鵷4{o]X^~45ьخo_DM"CY*%+R̕bJDo($%?a\)rK a/Ӯ ( ,!)';ɬ~kZ26`R493QY,uقxG6]Ӝ dLlROУUO肆tІ*0;zt=}U`+\xZ_tCy6[j4c X'=yדXte@I)kAK/˃H-@6S<[t~-"Лb\Jn}Z+= 4\C38iDһGmڍ3mϞ/kr 8G^](%__10(tb歓2$Xm`ew a8@:,Jp>A}h- . g}:$1 "&Fg8:Βb|E.t6)M%>ư -Oΰ#)섌ΣvRJ\8cO4N,  #QwE}_Yt .v O9gD0?֋|Z%ECsIC$!`3,ltF@ DL.XvY#yM0M''_g1-wy{ QL z 6E34s]IGv)t;E!w b5Tp ?y}D RUV@-ܟО Z "%V,`]%VW}Ǻ'2(kOxƫp>{kcH09j\&UEʙIChE ^lWJg/ë2`9 t$0^eT V¥yX2`Nݺ:A02֔PKзf)RM[J_R+U,v"<"Rkl+gЊ 1xZCX?",`yoa'`iXT6xU/;"]__p)MΆvL/5k>e_'Y:s4A7:AGxA*9Qqs;. dL5LX4XC# UZ2{I}*~0Jyě̕ީ*ES4> pYxQ`x2BsTB@kD"h$DbT x ;PT]R: 0ߞwR $#SSHCޖFK-O[!-B@yP1*ЈU m JoiޓM`w -qwb!0,Y S!T+ 4]b䲟͆\AZ#ΖDMҶ|+Z6Zrm0*Ӆ؈qQ A;L' ɸ;|-~-[,aӆah_)-ݟE*"wQB9f眕ʵ?yp_`zZTn8vcuH?1Ř`GC[=Э]02BK*:R1,EWVFEzcycޚwL/>գ5"Mul5ںb܉uJn6U;QzmVv@lq}!| yKr٬@.c"J _NXDW) - mx~݇$ |oICz{1(@@ףÄNÈCEh\c+٥:ݲS aq~/SG+^ա. r%/ļ8; 2]) ` TLW!4H4VK\7 omKڜĠB׳b6 JľCX,FP"=!n?!7.-Tuv~` uTIPhrv &x; rY(#q0ޑwvgF[{n%oՔj_i%~2Y-KMCOZ/un!Eb9ZF)е !Ŵ4b)>6yF|z>2'/̍0y_f=OB)xJK8QDFa3]-Ș +Ozz`MfL:95F\5`brːCE"F Rԃf%)l`p@7Vizz'|)_g0]1̳=&x!cۼ濼%endstream endobj 71 0 obj 8254 endobj 76 0 obj <> stream x]ͯrQ\^ b ؃#Gɉe:﷊do>^8+GU$O&*ûg󤵟}˳ZI7:߀xe~*姉NIYo+w &\xs0_OkLGlYeqIŹs0v-A1KZ6,D]@ɏ2TȚژ`(?TEfoshr=Hղ6sgEGE~@!B".5118 ?N0d+|g?'&4dh|4Rc)yQ@IzٸfL9,ڕA~1~ ꛬBΐ;q2vP|@@Z.cBv]q9t2A?5nj6=nf;Ӹt;W)}no61>MFb`MA-a,pߣs4JôLӀi%IҟB6*$qtwWHx½&a aiV%D*&o5#o(4wGfwւyJʘ䡂ibӔQ+T(-xksI[ yl ey^T+?r 7 r&`uؓZS\g**i5٨={j U<:ku٠p%Ͽ=]4)c~22$HȢ|Yț2HX9Y$\փQ4~9?+cȨgTk8/-"0 5-U0ʫ<Ψ'A)E'Uv$ypYM=.oHqggaߦ1`σ[ȬR%[<$ׇ=rг.yn?>?HAd┠&;(#[UIo a-{bYN4:W)<߇U)z׽3Î[a%ozRHj ZzIv9֑JS2b?U~ʀd`rP0ֱz.%br9xg;^o@ Vi,疚9~pG_`?kvcsr}wol^mN'B~ĴV.BQ֚9OBFu^m’K/Uw>V;Cq$9--谯Ǔթ=es¶6A?osg|"{mzAdظhjQ^\+RgVVKg%[SV>k4,mz h:"+9L6;$(S`uEͶ'K։}5f?t &()j$slq8n\m=65 2"ʿj rw>nm/6F][u7 Qmvn7@@>*W|G9vTG au.^' 6&Ø{]ێSϧkWÍK/HxzgG;Ltx"N6Oν5~͜eb MiF)aj)7HkSՀ*ʰG8,?PLYw+^c9>7V襷BN E3uVD@OeGj~h~ gwFWW.}lCOzL+-hiG5>/:7֍烎'bj.:-ڋۙHD^sqB'jO%NWYс\_eR OwG޲~_o.|A]9$O`N|+?j/$K !~+{_=ZuW? +4zLʫLZn?va2 㧝ڃ26LrRD߽scP*efm&#pEK]?0rvn[$Jb|bHǽSKrz wb[3^/Lɯ'o6.(8*b3Yxh4kn"vm5Q.K$W4\>I5\pEHB\Fk{$QHp ;9ד5F| 3-b_,g7ΩI4ߨ?={ת zRrnZbégotܷuB*j,€b܂kJEsqRǨ94bX(=i"zpfTt@@` B%M6Jk-.ZӏAC~y11n}bl#UJ |g,B*S4c E6ւ9X"Łv`lL)-5c Ѥp9e uN2cI 9`lqTG8Ҹ-'6ƭOlcĆ{iƛ UJ ʐ++ּfMDPrejWPf,h^wkwq_lD'ݬL)+oxȉ;jfZ6\P0e^+%$VfjݤsEB#%wm}b'mo}b~OlOMox+rE%Ţ]&JQ"a*6D;oq欈e0iIZMvwƾr؆}bq 6ͼhF`Mu5ظؘR4c EsnAZG&7m+2W8M9N)9J9={`LjEwh6ַ>q>q>a䛘)%brEys3)5r3~ӻrXhߊs1DL,DT\q$őɻ6Ol=-_LKhA3$rjCIdĜ^ONRs9HKh>ܮu%@~,iv0:?W=A9!Ց0,DiAsΥ~!{C5ִ>flܛ* )!9,`by'{ >X'loQ˩^(L5Ked-!ac}b'jXDNLZ>H dt"t0J䝥,N⠬$rjCNt%N6rYAZGSao}bxK']%kc K˜8+8*6R X|Gbڵ6rkz -+Xh3ȔfA]ygЂn 7w-4@eޓFhǍڨ{rsEB#7-qOl#>PPI?SN謐adKr9ǫ|W%V-$ -湨6Olc6m[Ƹm[Ƹm[Ƹ u=J;z 2V/y=d,ʴ#ʎ{ q$őK۰>qxV؆m[Ƹm[Ƹm|Ol0n  bciLaM G*Bin佨N@):.Ss}hBр9$apV)Swu;עw2 &(',ʹ |3%Xm2 -.Zi۸'qOl#>q>A\◹V)%b lP[lCD]L K2\#&@Qc.҂9X"őⒻ6Olc6ƭOlc&Ƈ>u֥9,X'zbnA>7a-xZN RB V'1n}b'6qfL)$x|D׌nM3GUi|$PImԌ`ֻHhq4w۸' G؆M&ܤ..pሁ^VSRJ OK_R@{ю*77@H^]vVI21vIoP;'1&LA o hLKha:Ř(:ǿ֦7־[sŻHbŃDg~i>&R-X)ʔL)  _/˚LR@$Ln:..ݟB%h{͔bZ ظxj~h$MVK1z{v g3hoX|6c.m=d)DT"M+R-sp%P9!Zt%0Жh.Z45X|qX1T>oԠ(%ꁵՠ^hQBaL{LȇZฉT('z !wK\fJ4]OE)i K2JRt4K(6SҬqEBrw^ޱys`ܔ7)mjT:d{`7Lst PJU/oLT;Qr09!?(guKV4\Il@Ȕ2h{Eu s-@eIEmHZ0]$8 6bu~ʮRcr|+!?EǷ);@/:8~yX(Bs`O-H^K.}okM[PD)PX@--V-wk>f/L)ZZe,ʜTJ=XBM ^X `G6UlL)-Sfl춉:I2cK(s ֻHhq4 a;!}bZF\' m6&yX^A\Ij06ú+/s(Vfe0Ɣr݋%`_c-$ -4nwM\٩s)eFхqt]$]Jari$pdʌ6xN%<\ٹ;l'X&/4zwU?LъKS_;+k95 o9H2+.qxP5n$<)>wxz\8O ڐdq•,3$+)eG" ؋4.Oٗ3qEB=̾7lè?kJDϞKQQ^LFeJ)K(=6èq$Ѽt왒sIv%dG|ENFRY@>ȞUgKGڥ`>>=;Y}b3@Мa8!/@B)3 (',˩ qCP%90n#s$ќ7'm[F'6܁X4y Q虑hq%@ {L VJ>嵲jg}$pzRNjc $?gA -IBLɽa{}b'q,-i<ۭDyd43sѠC< W/sYH\h#S~qg*%g#I w|vD옲.S>ÔpϰAZG_|w؆mOlV؆x r'TT؆m[}b}bg ֈF6cV؆6ַ>lOl=}bqI> {Lʩ]`\^~E;+oz I2(͗"Rڨ!-$ -4nw 5r!PAqM [q>q>ܩ |huɯʞdc{`%o0cJ̵R@J^ӯU/B0_0.i V _ n!a pYs^עҴK-q[8x/4peG8=[ /gkq,f*{킝̆eg'+s&ƕG/R8=w픧uS]\M}--zx3A- =u-tz oDޙ=PݔtZZ|)M{?k[<f&B\q^p aPa20y(CG V9lt_.1-A{mɧǦf<:@ )Һ`v3Yh=*&}·>Mؖ*twɽDm/w1foRʕi+\OiE彋t/`Nٔ3"n"vԜt,_.{ vMA\(hgЁN>zPϠ G?߽?`$endstream endobj 77 0 obj 7589 endobj 81 0 obj <> stream x][Ǎ8ohl("<8~GxFv$eƾΙX&aX,buW&}PW^\w u}N η+f˂)K7+kC)C#&M*$j5CZh3dBBBիsPӼQJldwDf4yⵎɲxEh#ttF"'2S,}=Ua$e72k\]%$J–z] zil OAhH7z}j_W`+(Bc{m(PQhـ~H~>C9cVVJqI k^kbl#60Z&M|ǣQ@x6ߞQ|7kFR6J 7._-&T4+ůW7n/r[ZH y"=l,˩]>X9Qqƒ-n>γ_ +0 74G U GEi}-Ւ-+KҦ>G{lNͮĨ]!)Co]kO/L07r柎FħlhvBWjrݷcilKM>PYgŪ69M\]K{NYC ;Nl@?P3hKIل[R^"XCNTcmj4̎X2Deh!lPxZDm_ E%acfa<4YKA?vvuzDlJ`(F+Ph-,H#+^rџlxB s 65{51f'E7a(߼n^ H}I q@(Z+B#7%>TA^F@J׷մɕBDR7 DS- ~U *iMoKƆYh~ec\1&S1LD,XX+8+.\/f""ͭ*퍺!@fXv98\S8cLWVڅ}ʖV0n6i߶XVT+v|4 l!^bI[Yul7x"Ofdiƶ֚Ƕ3Rcgc\Ib\mZ&)` &~)QĂeT,MFs'03\-{S$S<cGk]Ԭ(@Ѥ,meRQ>{P6;E&S{dP"ue~)ħzPODx9Gb0o`6&~R݈I# ܚrfskm3-cѰ#29(ﭾ,~4Ic F"lZJDF|S+(8NUעeQ<\[1K..Sz\~#%k]x#~xn8r ^ZFI(OHI 5|E_#H-=eIagBJ_r%%+b@$(f>!G0(jI0M.'xz(HfEdj\ncL5GuoZiFV Nׂg Iήj)k)H4$Ga#sqTŒU0ՒObMPj0n*Jms%ߜ5rM\O/~Yƹ'ד?\H?֤^]Feb^#O8ȇ_<(/N1l`4'ߞOf@> -LCG?E't9dBrSLC&Rh$9LVf!9rz%DaMz[5Wԁb?>*gHxKC&S\:F3ER9EZX}nD4c~K 2t0VPhZ4H̘A΢RGEh\6 q`ldŮe7@ dX2]/KD]Iç): kA)P؁}:\4e{5u#!RxPnJ.}:54hnE%Ы4\:4S.J- (G jPn 2u;,P$NcSubB"?{ৣEca4&(ʔEYZ!q4ƺ0`f~K4hx66 =EEecT;(xdO`qyȗ %&Sfd4q*ԩ6xQysh $_hR@ʛ}.^l̵s] k17iOt`A*k$E&aH(lĢw@РCѠF.j31:ו|s!GT"v=0d'J!deG'OdX@6I\<ƒ$xB q9w"z s]"Du1Y5/`4WhNSU?E\V|YQmٕGCCT-B-$094eEkZB gGsUhJa>v;V = rzȗ ^u)cU^4њFGp/u4 T_%0@/z6NPi:u*)nG1  rDu%S!gӫ.i`T 2s<1iYo7B3d7f>+ԩ@, *V/]Ac&T*J  s] GQ1:SC܏UD*uQdjK󃆁z@!@S1('>Jbp0|<6l2>a@!d!qDu^ j`gycX<1;>:Z4*PXR*sCt;#  8?u=.ig}x듗/!O$HExHXV]fϭC9֗#n-#: 7!l{k9-mG"NHDN-&6 nOQ9P=s$`a ²1ѴpѓZzg8lSs![W VX\Sx]h,D2 >GCvp snW9-Z xV3`w~H4u]7*0ċJ- kĠE؀ Hf?0+J~#Ӵ  )KgP OSG)]*4BIn*0uIb9=%)QJfd!ɬYw%k?oeEqŏV|6qR@[`]a BGR0 #)S[ _,zp@l9J%n}:(\ 0Y'*? ]1^ L[d.E-?G81=84)O\m D w5*Um\xIO\?1U[noj7/~S卙W/:z1؆} ƧxSPs=^@{ϋoŝBӀO='8fCGQ? )6y%gR%g5Ǚ`RbƤYtQ8[~dЇ dO6] n)`;\V:]n.VUgVޤP8ɡ%*|̩8jVZlMabO;j}jBu ο$(t<:.mYMn_ى^S=W/Yq-p[OFo~`jYCH,'/v܇ŪAwuq!{~}_/hފ7>ZsܳGSUg^YsmUhۋgwNjm~T/z(_u}NՍ!݇Ŷyί*z;k\KiySǗW_4/k endstream endobj 82 0 obj 7581 endobj 87 0 obj <> stream x\K]ǍfٻY$ $ Vܷ#e+_?z܇q0,|bX$dUŬv1/,/?,k./d]Y~=\}meӤXbmo1fq' pwەPr=JYH 7.5e{sW-fo;5j%#TX-ǣ(MR7R_Saj brRs mcyZ=1E{b~OnF5Q TJyR}u_0Ե&H|y|>Y(.bvl! ӆ f> q٬Zhì!xhkhϴ%DOF9l)GJ P7hR9Dq##MV,Tc_AS/%_K(@xk/5f.e͊^ȒC`˓N^BVp3ΪVh < lwBPlⰉ+L[eb7C |-rO8,D Jsc )Z|{j7R:U8̞YvUOVUf.vS֎MY/:<a1x)w;ޮF!aZc+QWo]ȣ/D4,+1(%(tӯg5&_(q58 p)CZH5eƧ (_~TZ[ِ5!ŭ;Fg=g֣nUy6l7z3Ru͙mh }yvly(+<0"' Ԫo3-)&IU袾x} څ9uT߯ S t=./.TyU OD`BkO$cHIZO{E~S/C+79#2Zن YFt?LZrkcߟl$٩cw ^XlB,Fќ@gv$N&yyA_K:9/~uΩ>8H|㍢P@myR~r(N}=Sz$Kgh:i_tFL ?L𧦧Z>%p_7g{$JPmWY(`_MD|budQsJ1ݕ]/R.yv%~?.[SXPk6c—gg&zV2ݒyM50 E~Y*WUj`VT%%ڒP~F&(1J&O &*"UY1HoGTָ0FZGjhj^]*jPEjTM0P6T Ja#ݐwԶ]ZK@G?х @^MyVaC\D:Vl0x׻~'?i]/AUaKꘔ+gQ3c;2%ܖĵtvbm,r,L,fwY2(BRLJMr#z8k ;_kV3,76.1Q0OFIp]J2% G%dza"dP*D-n}̏1Ԙ8bTWjw%)&h:+ؼ`r+ BT.*~XP.~P(IIClk2 45RIF9ϮɛRXOLId/w#Q;G@!`OZp1'|9j &E$aB5IphIW@ aj]}{_Ȅ 0Mi ^"uF)bqPA_ou/e@a9DM||8y)hQKcxOyREW/ fAӢI6S0L# lְ&\x(12LТ=mZ"e+za<hZzDK-4DFл7Ea˚44b`,Izy&ŠRvufCAcP`R N,3x py@jaGtLDRL25L$ SPP %L`mZ`P2 jNI* rp8>~IխFo&AhAx#tY:Jr`dVt8$O4djalH (1&J8`L!9emo-Nz_yDGhL??渷BTD)Tq+5 VJ)N)}+AQ2`0^>OLcpU>Gi1 vR1c"Ձ1Ӏb=AckzL =^&N=U&Lx8t C7NH>жoS$£ZDޚ9>ePR8^jΛ6tRtgl&>;B$ [zF xw$AaSbi(W6wNBOw<"MEh Mfy*W8Oϟ}F!hty Nӣܷ'w lmj~{ `endstream endobj 88 0 obj 6026 endobj 93 0 obj <> stream x˓49gc._KȃhZI gh35eW<4p(.Յ}_E*}{?z?hy{߂֯Z_߼'kV؋}߀VN_. >hWX+7˯/1$bߒI߿G&/oōKܗꢿkX@'&/BRrhҜ It¿a!LP!/* Y]l;ߕqlž .wZ"AË=K&8 ίo}P:G&i_M0b6{Mbwd6(KX41^TV_3 d5'A ^"~4@7% ?NOd2J #H"R41+b=>NW`L4a]YVZ)ZM ,7_);_ȿB>CI,۟m"P-ckcO??Coڟ컖Z Ɇ{%W >@2}{.?"dn3[C~k#U&4m;D N]|lZt~I79#?\H_n_썖>v.ѿDp7ZhlS%7پfD|\;uAwxٱ;e.7=w> IT^vE{Oޖ$ҿ[Id`u1Y;N>e2KMG _vMc(wLZjI~+kAk"uw vW!Ůݙ$z㵺"k[_w%7v~MsGt7f UܦL v+֐Anh*/۾c&͛l=מSh-T~M7ڮWvJ3DfJߚSm}_ŨM.px b|Wc__l} yѯ0xgZbWԢj4rkbEN"KMC SpisF \D%kL)WxG՘|  ¸̇Z &! Τ(Q ӫDžqOHՈt iQ7Cv0xo/&uU4԰-Fh#6@f&QdB$$acE1 ^TFj bU b2}e.0UcЙ{”=1!]kSE.z3!ɢʊbmJYAɎ-`'0>0WNw)BK4pIxqTU IQ5W(a),]4\Ayt2Bw1g_Oէ* -q C^ױrTcW .i.` 1PS(a|Br!5߬akGB\qA[Kw)5\Z j>V_LaJPNcR(aC9 U(Faثuf~.1/1T9hҦ{绞OI)~#%1 &Uc:)k2ѤjL/$Iz/WsҾ^1T0%FH1c Tj 6cդ໠|ߑZZFcz)A;)Hik8f#N8f#uRu|_c]o3`ыΟBG(-b]K0a`9l3c:Bc1c,8 0X,т/7C3Vc5(S|w`ˠ2|R:SN"{*z4&\|i/F )(m_T*+TƞV Eo6R@R|gEJ{6/FXT a˘ŗ cgGR~ a#*"!CS">5ޗ{=&Gep6B;y#='EC 寲 Ťk 28 ^ 9cWH4}' k*l#iq 9EiBIjo*}lGC-oal6 m!Qv#C 7RTVWp;VW㮤*E@S_  dO7-W^[8x,7 aTMpHۻ۔ΪUbp#BwB8  Ia7#VTNEJ;'eLm|/u8 .}1} }4z9 h}"o$)(}qzCzLE tH`#٭7y :F!Hi(+SHR6BG٦26Fԙ. E"llK︼?4uOdUV Iqev#]IŽ㕔jw#ESAUJvJJxg+Cz! [ttݚH#)>ՠ]!m`2lR.ScP+SjL}. e-w1 AbYW-.GS'k'i5%:تyEŔ5ߦ[dMf YjqC1`3vC&i40/涘4,\R4l(l.wkR-^ݭ[E$;h j,消,,dQll pBI~Ŕ }b0VL!NwNC rq)U/$rq̈́HH&Y L¬ 7j /b26`FY oƈgrAuŔުkuB$jY֎YS{-:bʋ wS0Z*v14 RpKA[Dl(u"Pn^q]Kb1D ¿k0/䶘,,D"k2bqޛޭRZFt+wB5IAܥWczDSotRܝT餮-Vz^ RXTILaR~uBJ M[]Ѵj^/,KeGn-|Nbd-OK4(3~yZ7X,@)#^4N={|bpJzJ Կ蕵2;Є|HAίI)[6^:)nϋ׸ IB84)(Ya)t`WNrX[[ =6 :UI\0J[ WpnħZ/Ѳ0tբ헾^Ǧ9ЪwƉA #$C"^ ƫԤ;:s#u-niIV *+!_'nRC_P`"yp;SZ+BeA}3NQ<zCMhfOJ^Ahu4(7R JAp [!\n@Bz{N([)#Ԑ*8BM 6.y:coh1c#k^oM?e2سІsc3doiާsMh- `&hΕNt2lc*S)| *Z2kޤi*MXJRYZN 6RPtRŏc#㕔qҗRI]*I8#0H)zkk Zc B'SP]sVląNK)@B2){.KzPפ\.z]8WeIqF ;6Rfԗu{dxuX,.8bO.pg>5S˂=}XJfIpKt>P,K"S"tbPnyR@Xr5GY{-G^nb/*SsVR^+i[f)hՕ,ubcwL p4}gCn*[tq2h'b6C.fܥ{9ZJxM*Yª>ƭTG$de#a_KAF L5n+pͬZi̺v-^sCqg#eE{ ;9袭!_* uP %JB/MʰeAJ@'d \BDh*̕ ܖVgmAєLm-Io5qG'k>3^YzV6Y^EN|:)υ aH• E("\iI^SbE2@69hiVSFSƩT%<&Sx2=myS.3E4ZʔTjqJV.^ū2άYttYsNMTSi^_}*bU?N@9 @A$=kZW[L h@KC Z.DBr)vВ iz97* oAD,e)7 -,^5}iT \+;6<p AQ{ @Xt'A"3Fw1O&o Z{&?| JA!7ضܢqN 2H@eLVPGPc*@_7ɚ<<3ϧT?Sr6z dFԮQ7NU; HՋA$`kY3Zw^-8I tnt/jav#P@MLdR4l(iF"*W| lo" KȧX0/,Pl<ZLYDT6i{( `MG5.ƕzO4<@5+Z9U6 6SceNt: yC:kw14RKC<Z.D5l(!V> h1 XTAӃĿ;S!UA͂HHEֈ4% s4\H՘n>n$y܍{@餒bT j2mjL/g] ,{W _*!K DߠufyF"^Qc6RXFc6RD{R^A l\l nFlٝP{O$XC+AEh;uƨ )r_tYPh$7[oN,D W> wA][]!Cm+9ӤXBg7ܑ ~v33۰MWcًc? sf۞Eح?}㱅z}gɧ}7mϢEA!z,K65"WW7mϒ5"ϓ"<4\YEy]L}收=޽0n`Fr?v􂢣\Ez9԰c$1:ᕛk!!r MZ25Y-B. #gCum {9[.8F..䎐CMk {kG1oY_r$m*ÞŭxL\{wH\crhr`l8c{xgFoI?nrn2˞@N-wC42.$ fA7eBnzE7B6ѱd # 5U_y-{p:\_-1t웺%d= ]t~ 62G识n:˞d.ڏq31# ]pA7eOB#TB'sxxsϤEs^˞.]F VYl1w\sYsxNstFEc\l:{ucA7eOBΩ [BAtt6-&I ]:^K2Z+J,:$6]qǗHuD5lvT*] "t=>lއ| 7**F=|Iq >d>R %$\ჴpGv÷o?Ua [;N_IY,?{bK+InY,6ʐG ,Qc 6Jcß3hQxK|たK>Qek)k=̲'i<-aoo컅ڱEt^˞/D >z~ vk ބ= _ 7gg9aGY>/i,{D|xb!@^`et't=޽˖7*b"P` {yO,)RTEr-Y=^Hwك~jIPx4ϩis=h:eOgnoٳfg .;O[DIlSxi5XmS_|Ѭi -{>grxYނ \'W7eOE1X-!SJ8kٓ|s-{PRЧza.{ʭ6'I@Lt7.s'}b:m ײ'Ph-=D;S`SX t=v׉o7-zlVS߃jo2˞:^gr -/Z_"d= $L\I|s7eOWN4+v{&{?ޏ ) *ƄipIQdƷ4J\D7kځ/uf۞r x6s1ٶj9q!8BGPO&^9O7`@(i]#hKF/H׬P%P4,gi(.%hgr"P5ݱwvn*T! Y&B%YP8 Kb+jA5烕: {#F*#XPryvUAq*o.*r_P=AZ FʺZ@cL;+GLEP0,S:ʎ2kH T`pHtڈP*CPkF1:ZW T?p#NBe}Ŭ*/CwX53)8TΏ갼/b ϶T ]q*._hTS)O[J4NaYQ)(^VJ.og)(=Jkڹz*N^֠ ^_P`8 x?*(q=4^! '2P%b!CiF]?x#2-m<` ՃP麔~Ux.mY<4Tca@4AUcTȀ-E uc>a, _$0SPÔ>!16M54JAQlxthS)TDtQ7,U#gZg"&_ە.J*]1*\@ne}6 m/ -Li໑lk F c \($s#,g2*#"JW;\. Er #rs/Z\mr9i Vک7,WJ=0 h\ڼq~z"9':3^ܞgꆫhTWImYsrP`quĤ- :b^I< {'Fk3U%b6&v|3eQ\,) :wi0NJ.DBr &xMFRClssjz?j#|~c<4c#0>"r4^50bilF  \㗊zS!VV9C(Ķz”e0 кD1g1!zk=_La|Er0>MC +VbSF  \y9r\p"R|]٧CòB|A>GwwK5 K`7 .iw^5x]Dy^3͏owE%C^"17XO$jf ulYmpD Fb"`KDJ)/He p'")zc>Xw-+gA$8ƀg}PO\Bg,}0@yH_hۢo@QЙm;Kmo.}ݢ҇ˌsei2YZӗr> D4o ٶ)s1qH_rdq!u_ݻ[,-3v>. vojWv^7[g,{Ppߩ"`\]$" hPMI|DՅrCy%?t?Q1`23pCكyF['.3v=Uw36|L'z1*iQ :6z_O(arBQ]%@ @4qLVJ9 dPߚ\_0^fD~v?0/!_ E7B~oIj=mgóR.f~l2 aYc}@ w(=0ADY+s*x̎7Y c qKŪ|l΋ y:OV(aLCr!KѰ lޟlYvzUN)/<ԨU^DT3퀧+㰎x\*Mv SDU$JLD5kX y%Ƅ/gNMϙm;^88O|lKf9בKIPvD'*L'+M5f"Y7DC S@צtkߥQo/-"! [;>p ~>^Kv$T0F4uO Vi(} gҕuXq–&BxD$tviaJ(<>6 }8I ɅHH.E֎PswE>1/N\Rg,!Qܣ0G(|@Rc񣮧 JjAoPY~Iy\%~;l 09 !+ؚ!MdfYsv@%4PnG h~hZŚxe/&%t:G4Q (1 ۛM] %LrDBoLrnTϛv>.c_{Br خhi2Y $\cub4c%Qo/-"Ps V|.q z>TE M'3|Ac)wI-틾 @G7 ME;K.L7tzgotϚffCi#uT#oݭ2Pz3G̽w1ޅJ \/, /r%_y=J,9eV5#'Gafm=ʶ nqZқK'1дr,a"7DpCFqɯq,.~{iYiְ5#AnঢnI-l;wqm6yIeu%$lxE)j<`ѶG[2;Q]5qٶ%op!adp-zܠ*K7qٶE>{9:dᶇ7׶G}̶-v-n`: l 25fHlYܠ~ޣ*Mxm{olw6mgisf;Qz%qStnM\$g,nVToqxm6hmn\MhYڌ}0]`hfvWvV,mx *xZz1pѶIm{tD[Ptm>c[x?m7h$ʐGoo"9mgq6[ 05tM%莳,lQ;!áǏ6bv% h.&,nV;Ip G[}F1b@9%>#Zzy 9r7v)aJxC` `B-$" y[+i-;ws}pNƫ35蟧ۛ8kI\= kfdrMfon]MfY &Y5߿V")4]&8̲{͙oXf2qf=8̲^sf՞c=<gYv3-h>As;EgYv3k|Y xl3{iYi㼖M_-{fhGԴq^΁泫!79mh^Lq8];maײ(7< 4=,|2ځ=miײżج5@̆3vG,&,ht Zx,T`<^{p~.4d/Ƣtyrx @_硤>~{i9 !+ؚ\[p7i编OՓoɃ36zCk7Xt{W'q&2pX;5LI0 LU-%@AAyzkG3moI9mײjo.6yeؤ"WcwU(a|@ 5Ϭ`cG뎞m6򽜵|Nk9\ʸ#'@XX}.пKl?cg·%Xb(-Kϒ_~|PffxK.2$u/ڡ2yS:q T$FM-8Oޕ/&"-YZp^vTz3v=(-=m8鹽^c27@X,ŷ@M21c}'`i40%bkӠh &QA$`kKWߠ[Td5~vyb$Z"-wtʳyV&AY&/ jR 8wצڜإ@A"K Y紆fS};es3L* w+650; ]y\BK ?LaS+Ϝ7yz ݕtk2Y 洆$rw|H%eP2<\˥Se; gqia]צAiliZ%Lq.D3) 6F|ƣ$:xX<2іPJ$le@2\K ɅHH.E֎Mχ%i ; y 80b GWshr@6%n_SH̄ʈЗ q <)I|:(U~{Wcz0w`g-v9S vćkAr ;I377>[6je&]+1[p7F$L,EN$A% n%=Ϩzh@Tnip+5߬akG\Y[ޢo*Ne-g ʔB_$Fp 2[ִK@$!s 4teքXCʱq~{5߬akGSG3-N/ެetZ#Mї/Õ&/=]4)49; hƂ4H2IpUAtc@Mo/5U5ly>؃<k=o2NgmB 3]^deїin$&S;(ErL酦乐zSSPÔ7hZ5GXI^C2^&i7a's{Mbdf~ci$ -Q,II\HRR,/8FM *YF|=%Uѳi ;T^ƛ9qV=2cz@t]Wwޮ ;>;.2ɧCHD,G;$s/l o |xk&wO\s_%JӛA_ ݽ.2a'Snt M}LּgGϊDjjzZs C'vK =,v(V6|7aK1v +R,{L߻_NsʌI B.xCs VzYà.Hs &,{Db}~c`|agׁvѥ#2FVGH'@=?kXfm'UYi 5Li)$R39 z%Mjq>b=/Tϴe7 estME~VP<;W~z@b܅{uKo/5 Ud(6@3bɔ^)GX} Hs-?(\5[ΠY,{~~Xukm%ސ^,']3tp{@b4r"rd~{W oy|!9!  z0V\! =eHaxo1I䅳TU[0un>v LsѤ^&g t-ᷗ&!f [;ΰرkn\}jX^mxfli51*DeȖ\ <9}=]E;1e]Eȹx0q-m0<0يt=z!cD;<罋eg R[YsI.g&=^N.R21cs/=~z3yzH$e.;ؽDtV*ԄBGet9-eyPX~aLk}>%Pk~{9 `y~3ـ#̒5[Πg)ۃe. ,sZb+{M#%:pUIT<)\¶zsLUDgrF7΅H\+;fh7r[}j-GNV i'{BNO*a^ʶ(ӠUC So/-`Q<+0ipB$j.YÕgpÛ@ƝHixls:͕Nfd<IL,.kx4$ v„cN릠 ث5 Lֵ48"GVpe d8pނs,lxPTX>pN' <}-VyK@㯲Es&a%K /[~{KpelnxtNgгErgᄤ쐨j&1Z8+(+a^3I`PUm8hQiH܇k%Lq.DBr8Û)rF=t9[ΠgyCw~7-=%"q^sȊ׹>UW„?x婏K'y^\o/5y斟 eHQ׏A'7Y]=lxAԡ6 18ChX(Ye5̯'w5 \!iFqlGU.~{ioְlYAϲVbF#Q5N\M2Sz,٘+96)M~_Jfo1e\ 41/^qR iP'5IJi)>Q/n,/ruѰ/Fq,B[Zj31^({߿@^` ,!&] ^_!H,+D^ F%Hld 5\'j -5 :)R-~{i`,~5BjLB aK lQ kM@sfg䏦/-$U( VeZez&fWj.oN`O_0d$t(hAWjU遢 &Go5~*d8A+x^8Xȯ!AݖOsĐ7i}/!Y~zy2%>)jD(rB|F,wWoSA% zBb o]%OH.DBr 6FBP lCgD;79ŽK$K7 5H\$RȏC3Y 0>!Y ɢh,(&WG|T5a$rA^60c ]15PP.ʏ 5EÕ*t #9):%+OuƖ0WNw\%jAĐMB(a),]4\Ay@>&⤝La$ zo4UC SǸoip(a|Br!KѰԄROs-3hUX[Y_w>.= 1xh{7]%L'JH oܛ8-"GIObZOj12~zOJbv4c %2f?DK=~=pHHYƈ4Y9m{?ȓw?y;cbe߭L~ݍ  K4H$ʒ :n)כu*!f#hSE$=IHƞk:4R#=t!F`(|5 5hsNÆi>,!+q@X&.3,[C h4%4pOHqA%F 1yAkip#IHu Rx@<m8 jž ΤNnƕ֙$|4.a !6LDB0b;>q@/Q`O.7?nh7CȜ Gz Mz1on3tnE:bpOR6<_P aH40_aJ)uSL$=uy̮5azwAMz 2tǐP(MjzApϘHAq(2YpϘHzkDw03~5e3e\}-rxt163jNm pHD)3CvIKL$mj)< Z}4/e_}J!M4Ǥv^"~\c o@c H4T2\b,G݁#ހkV1 h0&]C&=E#ύCҠG;x8f1klZϴQP=i"!J%ѓIԑi&{wɲt$EAgM ͊ Mz 3☲`ڧ,,=e ;ke7S(2PÔĆ"KL=g"!dg@{ڧ7)fCw!c#csOZE4 oHc jaU=]ۮET ܵJk+qDw0Ha2]ФHëQӎ.!{DB 4J#M+U4HﴒkV1io+x:dMz4% :6Ϭe4bA3ųހ4P|;^1?U@K!h?U%$׬`cU t:d2M1_Ф83y<2 'sf`nJ[}vEq ̸;\2 ;(+`xW`٬; 5fNj" Mz Gx{hG͗U0ZtYק7^ }sT:`pq0=0)eC`#v#`ޤsu `ܘI5IO7nx5 .[7L?ptqB,x w;~YY: Z|}~++3u͗c9_ޜs/V0)@Dku el 9|32:r#Z &=1 !00PhvvXYC -<LOǁ|EBt\~k T4=P~ 7?xyk6bUNx^'q-tjͽA*q4DNgГiA">ba Y}j̩GKt0cJt=|lF 2aY w {`lr:% r}Q>a^9e_mxrąsf΂)X?/@v97隩4;plY$=}!x\v9qW m;ɝq5ֳ.;:'rq7mggYGA;[O]oB΂s!, }"( n_plI4zӌx;o#wv;ia!xᝌ;?>au9mgScFy9/(u׈L\8g$x*ֶP}2x;9%%pu5,x6?0S!w^Z3qٜٶA^Hw>$=.wq7ms&i贒 𬹄vV?i9mgnLΠm }^!x0K{wK&=saH(v\|cKm.'yW'4 `)B>h"pΎ-W'4_8<̖O>!|qBNl{#?!`0";[TKd|qB>s f.b;.yoh8IX;'9 M:XI.`:H,4O}#,'6` hs{CYPw1.w0pD$:hm: v$\Ҡ'$n`^F(az f [;Ƈ @Ȧ k-mҤS,+ʻYж[ +ylŔۣ!1%GIgh09/ShZVi 5lA.l0lFsYPV?t 6cewlvŚ PWM:^1 [t]5k^;kVD͂Ӛt 0 oYݠŌk6nXNh)LƓavli -CQt6]8́ 6<5$ a wkJ& 8ٿ )͂g:TvZl Hl'dNC Sbl4-'$"! [;i쎒6"Ӧ+t6C޽8+߻V0su<yaѥd>N) |@"L*YCD ӫ\YB2)6V|Up4=&!t .:2j5t- HaF-N\xk &1i`irK5ʅH|㷩'V#PT[Iۧ4l!q%Ǵ3Fk<&2؊_ QMM<?^E;KC8T X7Yʂpf Î8q|rBNqz;=-*g:vvp+t 3(c)V ug &LGUo,ltrf&̦zg1:.*fGퟺ>_ФS2Z:>_5ƠM]8~n@bi /^_3 p]F9& וgʵ~8q8Ol)TluZyavt9sL'6g.9 f 3cZ`3hj9]}bNa}ά>(.뇜ŵ@M:řuCgNsg31/#Z&,%=r.ȼ88~StrBNqN lAU?,dSt30A2yױ|q8׀3< ݬճOlbKcŸgG( Av8&̫Wjgy{?־l)ty]|t83ȇZ'6 gu,gVL,uOm)I8s^uYxl39trBNq&]NWGE Hr"&0 ͙g&:ѣi/>IOq^)sfE.g gF٧4)δ E>g>{߈X}^0fh<0@$>m&=4w8ti}ܽ.&=Ùvqa-8MiI՞}b ϸ^̇83ANr.,>Ipf q{.LPbpY}b,ta%1{DMz c̜3>trB̤GGgNxu=ea)Mz3& Կ }̬ƃSxxa)Mz nό̆řxu|3 cV+gN!<q_[ώ8So~vSg0Hx= .v9sP]9&=)_ƒѭ%C]LJgZ;&=Yxrm< ^T~qdqiMz3gh3L?3j>IOaf4$f0ۯfၧqjMf ]^s wr2m.q5fؤg8K:Π{g.<~ESơ{ӚgA]xkLzeɱü._z)΃]wEBvݶ5D#2# ' ({C~yÙsKlm}la٤SAu 񽛐Lߎnq 'ؤSAal2x4S,I0%Ff:Q̢y?tE;9}ycNqa켼5gxX0gZٛؤSEVj3gٜ_ _ l)̜K;a󂡳%3!x\jB 6QvEDr"%E$/ .-I<5ע`mEejEWژ&L=yf5~ۚt5CPEF ɹCV U4 ܜ4X'J.JˢamGLvhxmƷ6m[ gx4NUCAaJgqzߋ>Sk*"OD@0BȜDABңEMK,%5Bɵ(X[q5xr d5ҾS)bOk tq1'͡w<h=]PdNф*jUCLX,iO\%ע`e7]/ J_ƅ&jAZnw [7;|!/7oEq:dEE2mb\h2AOHj> 0TIe|(,v\ݴ=LyutR:]gâ BG 4#=D ,\ohD"ayʤ>[Le_/1(sp+AV9C-u5H3;wS冮Ȣ᮲OȄ\y U4 } JwIeNrQb\ k;.L}A_w-&2 M".mȖpӐW,sfX Nt'tu:=?b+`!O(Y6GtzfE&`DMʮ(!1l('cJ ,wCX_p;9]cQ:͝~jϝ'8F3|t^e\V/WKH!3.%1gp¢ǒ~!+O9P38hծ̩9HNI^%mՄ@q?N]8miUBq3:V/2' #X-sIU)Kcy|mT|X}v<#XF3^ . oҁq:|Y‹| ۥEC9 ]{!ڳ4X&$%FͷhXq>pE <-N$}>푃ALr)ޭRC2oViz\e7Ā)FC) r/-p4iLI.JˢamL_{g:]ɳѳz/Q1vDUy܊ŭ02t¦DcBʔ=!!!Q4#CIǒAX^j x0n}A:6sGCoUnD'*1<+Wܩ/G+l4ȋ(`Ϋ~!QPeJAxxx_&elɜ|XPbH+.qg3cAKv jB֤*𶐯&:8#D;_~]lyȬZzbyMwI=_E N]ټObž qCDy% f OOIǒCX_ppb% 3Cu;Լ(bsr:e,gib}5ih2&\M)( k;.܅X.:K}F)2f4kH5^&F@99O*AQPdN,ɜ% $X,yKYƊ+<<-Q!:͞/E-dXjWdaJʼnM|Ϥ`9+i|fE cyKGKYƎKǠ˯A:KI47ѡSѧ!:Zå$St \YOtdavZh(2!VT\48Ϸ4X(c7kq>s \]®𹇭Ogiр6$\ Eg#PD@)zy\WB\F7yhA7 |X 1jEƆ+|ħ{Q: _{FMĀS!ce-Ɇɰw>ZCVZ Pe׬SC(b-'f$ >ʅĨ ;.wYV44 dYt{}BYiJHBEY5S>Yeϧ&F*IK@4}eBbLcgKEjib{+\TrxdvHgiYZ>nDCmEY+-eQwI.$Fͥhq# :Q:M~>!dБ6$\g~iNK4WٔeK.}.;+$8 ei'I[,}6L*i9EkIRnb,]DN@n\m`Qs , +.:WK{Cu;}̞+~\(r@9)gM2ɿ<<^eN@˲gStP]`YH%Ϥ`c%BB {Ǣ)[0x2L0$bMf0i )H,ab0v[l g1Zxg~ _)Rj)_@K&a͇t$rAZCHva}D Y}=%e&ᙾuJ'jSb,&k*!Xx]Œ&tW icixa*!XgXBX7Ă;-ܿ>8:j:!N ~@OߵwE:r􍅨7_~@Ah:tKWk5gCVָ%!Xm, YoW$QRJM-_KBV&}6#a?c5DCo X/Z3t^~` |>`ӌlYJmgJ8y,O-!L2-,0F_Ҽ{P)D4q1@kkΠUblXg<َyq{3^b54n=,VPW:\ΠeuP,:]p);i{oNҖF~ۆES4&mb57p]Ȅ : r6hL2a;zw$q4L۠aoڠhIAڬz|FAgQ ɫn?R袦#]2i{g+=ЇW-hÑݜ!ysҖΟ.mJkB2-_݄$mYMEL'ibCQ(#KH[*iH$8% {`y|mBƬQ{S$ :GUEBǚin;z̉=+monYެ^7=1yi:Qs:y{g=y2:]›5[Oys-нX]ʢ ޼>[J[?֓3,on&NU\Π9So)fg0nxg[+t7~s7GFi:>y{gG{؝G-zH`->vt7==8\ΠRCy;[jVӍt7 W7v6g'Uɒ77,mV ]mNS4c9q{k3ܠǙgvuxS#ps8ߙ>j pfo :[PGT XQ؜<:b? 6,l&_=Bk&oxs*uyps8푩A" :[R-Gxf\awTt75qA'q*bysJnн=|ĉ{t7<ݥ1Bϴ[y7Oڠ`ɍЄ$lL܅W63,l_E9Zň]ͥ77$oIl=f{B^TV@=_ńO2B*-C䋂*+."n[x:g((J&3eWX* xaD$b.1%lo ϙLΩeR9Ag0Wp^`S1SqiW09{gNpqٿ,iz Ľ;ن+t3G[^ax3rd3EٜA8 Ѡg0#,g)]B9] SƬƒjb3uqb]`駜i=\ oyB7\Π+4g6g+}`H$&gS͙qsx]Lpfi0&+aܠ HNa^fsv3=?ۨlhr8pfC?@L9;|3BЦ ™R; ~cg&%=ޠ 0=yg>ol;p] b $fsv3C8ٛt3w8N9˙C!6 fյ fP"4fQ= ͑Lڠ+᧳Zgt9ųٛt3ǝO8ÃqNs/g1~_|b9AW8{8s Oqf!Dg1hr8pw?= e^ gay.pM7M9MəM٠+y[7 m8;ubxGfWܠ+}sϦAtS3>g`. :p  nUyqPُ4Lд>ˊw3m. LI"- LjjR`(y(1Jܰ.,%br*/!`4ޣ1=1j1ײFU=x_$ {]^kU_/n T${߿^ub:eWrM@BYƛ0bM,F-Zvs^"$>`7s@(7V3j9ײ}yvx@5ݍ*:3j9ײr_tĎ$ *;:l9ײ<>%P6ѿnYv@nw L ^f:pרt\.PPJ$(vq@{ްt\ˮuϷPe@'Yv@qm$ffN$p8ˮ=i dvBR fEVȩK`+' t7Zap]%0e|J_ux@tʠsYv@-Ļf(q'0exm{31ˁ}Q鸖]%e]C@Z V%8+! M(:; Ƣhi2E0W%j .^/2'@zb@ɁXL 6&g8^Z-ג=ZN9m":eW˹]VkL`BSƖ ;O( [\J%w}0j(2AO¢M,%%FͷhXB +!l"5C;;&S:u ,N*!zNA$S[O)gLŰzb:eW!Qoio; #kcwuub:eWؽ9Pmu0<I8?F-Zv@Ď꜆9J K`$p.h+kh< |$0O*P%zqyjA>wF-Zv@qH@eDP۲N (]Шz>Vݭ0=컣@gt.s^< h\ <WfS.™`UASLr s-0[B#(bU!Ӯ:eA Op.νp:7j9ײb:t74WFua, 2 @(+~Tx "$p.|w5+yjH徲&HwQ鸖]%0<#&Lwx@EK/\^ZNǵ*Ngx@x&Gu60l9ײ|`GZPL_U+K/J$pˮb`Rp'1budMA, WF3bVZ nLȲ[*FvwOM+1gvw[Nǵ*п^ht~x@o(Oe$pˮsIxo#1N׏'m.rn/4鰻q-'Xv@Hvgb#SPl8eW  Wynh! r0]%$C`{g/KɷÝPa, LU p1rr0]$0&S"0OoGvx&(a, e@sSh@<8`ۜƲZߒUܿ]kcKX~\ƲjwXO;B20W,`H{b繈Vn=F5 /ўbUaNy^Y0,2=ČcUmj@ci..Q*0 Kv t@KkEfZtn +q'Xv@+!Dϙ.qckYv@(;n_VM67uxs8eW Ļb.6;(?p0]$xnn.Ft 馏q鸖]r q$> *kU.{]^ܕ}@Ia)bEm6}7>n7anǛ@O*O{B`6}LV^'Xv@7H! .A: 8eg#4QZ AUƃGLy׸t\Nb>k=IQiN K6p#.PMIclQQC',8e%P.?{ Lb`Vqܸt\Dh✈9L |t 1q-;G ݘefedx@}Oo0CYv?HhЍl<}Cz fh^B#2nN`,;KV۝S2M{gTq:lt8~BBcY#݁!PnײY?l^S܃ۉGq-;KθϩTu;t!ءN6nײݥ ?{:0βh6Ha&u/o;|lkYp2|ce5N`M,vo<.O;{AsFe8b>v?c<"a`Ωm!s"5v6gTVu9eg3A46iؙgYG&vYv;pr;ty0;3?n;(-Zv;dd=:ii.)@6̲lxIw'~xFhc,;=sѱSy{v-Ō[8ǵ,vQ%,$v\ƫg'vYv;ץ>\cg2rw&D>'vYv;($jgka =egq ;hإgObYnsKpFO]RI=l ,;K讧G]0{E]|p:-; e]N^Rgnp~B]7?S$u.EoϨ]nNc.uQ/IKv3<O,vY% ӟkή"\%,;Kh0~K)K 9<{ߣ. z@bgSUueٌvtpd*НÜ`ϰX~øs\bs*gn.vj;7 ;xqNdgi-[gk߾gE_nb7egSo7a^={ɒviҸs\Nbg+NwS欼. fY([*Gl'v/3vtn8R);~xT_' _f[7eg+Gm6n>Rgڅ`SSq-;߁cuQwgX,;hc}b;V{s|vGq-;+G|zv볓9egm PBSۧ.$?6̲!PvUvaܢ2e'3آbܐڱb9Y6[,;ԾɄ{'3'vnY,Ja8bTwFx57dvS.qMxvYv;a!WIH;y&s5-5 O᥸!PM'x!J%R%! o&T:G=0зl [ 6BInsK%H[(IO5G"o6DڊOf[,[4%_2AȩG fc,tVtxˤ2D"re)W7w0ʷ/&,UqIcܻ3MP( |W?7U^CTɸ!XT\gx[?ĎQ^R+]r~\2oRk'!{Z}籶t7ZнXkAbޛXӝXo>担౎iST+4;nTRj *ʘ=!{ BVT J"C2Y5fZi(*B-93 |k]gEC#S%=N aW`((1$EjH9Meg(njhdJPzB4sˮIez{5lSU.2(rx ,cF)1.4 QDty Q2FKYQμ槶(!p2x #KD}Go/2'@HH+hX,Y(1JlXEȍ \R|g5%1Tƪ"sD ~AG&2>QrQb|ldo@(G߈> QJG>wEEh/R%`me~ֶGQC"Vܔ Vda`}A%a)8*<4X,(1J.E-+TB wv(2 +вLx{,K (:5i?W.wM$?>CO矜Š\FDPO=.Ryc#@Ѡ&׾$ [a](/XrBPa1hZV :W.8l6JħKԒ-W0,=`+sZ'jE"}/b- OՖQst7ks\{ڍ\/t5k/s~b?Z&ZRLM4׏XIJ[5T 5D,IeP.JˢamǽLfX@=)Xtiv-a,i<-%14!VTR(zo*. ^X@" $ {`y|m7JPeVH5GCOGPiE;;%i1eyȜ/%ɪ@S?d|dĨ k#AW4U8b8QC=e;O&BYEA9zh݈%&!y(1J 2hC. lXJ8 m*ݚ&[QwO}/;Qzu=N]4|}o o8?|/uyO'3N$X쟰bE*bLIM, ic9Z&V YB*]b YX;-64-AM|x-F+xyrz}sIF%:YtE\Ot8}тo~KcËQUTCQjQ))y\BK{Ѡ$kEl~ "A8[|!gppu-rx4CpU$閆!,@IEJBP#<++ j9]B_d v"cd\CSC1V&FӢʊ94$'ZY]HdĐKCdAM Ms"&6.-%,iLOH.jˢaeqm+ZH+7PRV6NlSMG(;pbJp)yK>ި΃ڣqd@uu0(;ǷT"ouP_tL dr)8ɺdKrE&Ο <,\s}J7ޯW^{t0}23Ld_}m_)z4o+t۶7r'2hުL[Jg9JTrp]6Os"ON xh0'~vNyҷqE:eOr#gL1wF3j`VٿG딼Y0o%!O?}ǶjbH;n~yO 5DI_XYCK>A(V\*Qf Ԇo ڬB‹Mr 9wqmh>FMv85e6d%4AWhhX귈PSɧY"g>3 `}OKxS֠?r(|4O5dhVqdJԟ9RaySA9HCo#> stream x\[sڼ%u0p;;[㕙M$#C~4.30[JA`{7p7m_| y67‡鿃ͯv M&{!5}gM7l{mˎom;zLm ;cÍ`6Ew~n͙s}[˻8Rv{q>X8>5i{)l&LuGiQN\] g LLkם<\Z.+'-<\tm8 3&ibۻ-{6=b5?g3nn3;a! &m!Ѻ3[ޒ .ڱnwq #Gy_MZz]؞v*Sp4<'ctr:&5ZI`~(I5"+Iq A ^ V }(| 2S.N#2VIc"v^W='-#*ʐp)$@u1vD0 !AL iSwYf5*uS2" r9 9@^ K/rMHs  , <NH\ZJP48B/'48 I@69mIz+aC(HSq%- & Sl~ֶȕPqmtiHCo^}!H|8*C<iO8nl-Šjͳ3м/=5v `dLDA(CVK=ơiuR]7 Z\ἹqOpDԈY۸(&O7GЙqpnP9bnZ:( {5X%TzNC೐9?K7NiT poGȘaNW !g rĺ_FOML&F̛1V7J,ogߚx3_xpp;`ƷGsDqlp5>n2 Vi)ےܜ`P-'|bBvzɜCJ\qϙ3No&,e(HpG I^dIӾU^: ѱUq{f*JOCn0ރuc"09V֏?y}Q:uBC57*'\WHUރ3( cz1=~WK E Ђqð}+bH,c5^VFcʠwA <>  xqoaJͮY8/}/<.w/9ܝ%On䇭V@}?P&`El 371fk;JPFM?8+cF9c뗐|  FO~Ϊ΄B.> (<iPkauF>0- -h>O}Bf)HigsՂ8kQ[cłn3 ?cpk Z@_ojծ* (7B F14,?NZNDž[*k(Yd%`S&7 ou ʄD -4cx)c(_ "|O po -lϥj($Q=^X<@Z^3`H1r /Sqy/hw8t(3Po9X< c8mj}9"3364`IL)j.١n*_D,$2 Ȥ4/"45@4r֔9$.g.֒㯣$y8SF9NӮZ7NڸX [; |>dQ|Gfčk!j"_{ 潬w WYEdMs㹙To](k؂@|t;5}X"QD9v2tNdj`0z ObL 7Z=L.<۟k$jm3:t71ccϐ7!a}37`=dZjTQeTQ9>RzܬfSL,}xAؤpJ5 Jՙ2FkP6H㚄rnZc#8{0p85ZW}gCŲ+2J {7`TCّ5꼖DXR>@y.|` 6OF#Xv1k\ nгGZ\HY1a2pzbQ4F1ؔ~12p,63e1ߴ k\sEsjEXC [`7saU"ݳqǍHk"c-]LQV!f26c4/|^ >*W_L1} _tq3yPߥ` [8 o;.oA(^,q@E]9sH]36%9=*% @б_d$򉖰Pppx'0|M&wlmǗ<{Zʬ%A,流v7Dvendstream endobj 99 0 obj 4611 endobj 105 0 obj <> stream x}Yem&06 aCu}b;g`eتC+z2^$K~}$#ofOۅF^0d, r* 7on/n~uS˷DPtuo?є嶔~:vvZv擻O^q}+g^r[{/ '?ezu`?_m~S?^8Gɞ7)]ų֒+iM9k~d?35?Gszw.[v-?yWiOֱK`~ooڶ֥Rkz9s|9͟dju/EYqֶ~Hkuea?{崗5q->ԫQSD9g Yѷ_r.{{`RJ+jkc3][_ZۛV{YOq;6Nu}iAnyp:XN ̗7|:wK uQ!4T cYo6ӱSY =TDpL968APS@ PaMkuJkcKn[+s#(Ôo[(=QPiÒ0L>00!mP z5۲s{FH+[`< (\n0q=f׬֑5#YeŨggLjBe䮕OJ $L:Bm9]MJ'mW{C-ǘ^`b# ep!5{B4T+!gFDŽbv c+*5JrjwK=Dѩ퉃Úp̲  לœYՍjp,7Xfg-702Mfw\W[RJ~*SCtW-kgN[X .JJ{d WZ[b`!9kh7E.q0h Xg ɶ%Nhκӑ)VFn'݀nu? W:+D*YOUrUd<ZI~%aiRMPMcrиQ:Eڮ\h`̓Sf?dv-a00)¤t[ک :ƌX_7ZdɃKq0qf00jĜ9͠K 8zn7٤:DllZv)}x [2 K0IrœRRìӎG4 qI_dv w|+H8Sd-qpX!ףqaky(|RKiq׼c 徑%_ۤ(6iNAp t<\7µ7)aCt;u8ͺy`|\x$$@N5pρ(4L`W?xH>˯&xHc,9ΒlowgX6Yȕ>S@f% N?ߖrP `!!O*M뾉704<&k.\ m`05qqYX!,Zf4 ,PhHC5{4TA3LA` #jH&sPч8.tahM&tܲe*kp`y00Oe hri;ϟsRa6 f#sva㳉I'Ur$iBTqC ܤ)_ҥߋxacCdYnyI~]ֲN1T0yd{ֱgI x\@ÝD.q0rW9>uͽj橬Sp{r `}^RRìF6WndԓdǘT%{2p OVBr1ޓtp8!1b pBL`B4cWWQ,*ߞ+w(.9wkyK H [:%sm^-ҩyӯsImWm?ؾsm=7  #Zf u xLi !Xf7~hh˦gk ldH #Y$_upì+VvNj p7xKVp=ɹS&y!) Cz lD s i f-6,aD.@n))(  [Y@ZHuJqaß0FKpᥙ'-/]ZTsbbKn84;"fKH Hi!q#R[cPw$ʖpeFRyx|ZS)`CR# S΁0SNrYэD<&J&2@ULﺯbF98,yH Ì:PS@ p)=01VL5a - $DF-s0 yt)@rY$ԎHUKbAm|0|pt1G s/f7ԃ<,(|eO99 NB+Y3r}モb>U9l,&;q #Ff!ZRn9 `0k!ɬQ5)s=׶dvx0emLq `CR28=ӥYmcB:,>=0䏜aYQ/ ͇ ˂ |@,PGw^}L*}RyDa)ye0;@]gYNA-bkO(Cd:y)L pìn%fʼGNa.sp;0'~)ʢ!88 '1"9s<w\ P@JpPɼQىQ+}Z6X9Ë.)2aQCY~/^pg zEdx`IfUato}arHK&(BhaDqwu J|4S ?ՇZ781(4ȚP'zFrY,r*5,2|FwKիb;Sص09p`lG{"ӜAa0@.cQ-ˆ&b-Ti-Y[" MZmgF=rw@ ~AڤcL.[u&hb5sp5C|mjf=T7Y`Ku4g< =/lg^bYk&S=Tc[ cNcvZه\eIr)6z)@)aCwy+[I=@ZMa-|k-|]4[-k=@B'z\P@dc0iJ- =*5EUb$ *8+=R `%YR`.U֮Y2 勇Z\[z!SB8^_AT 3! 5*lB5CYu1hsySmDJ[ zW0Ve`UfYx3iu6kamqQ8V_umۑ+=)vm c,MC8V!0x#Sa!j66UW,ȕH;FjԄB 0,$*D3u*0uo#*ߎJ000**0ZΖޫrH>r f&}&@P P puzpQ@a5 (\n0롺fd:ƚy-2!q]; 5%0@C%B@DK?'Ew]]X-E2J͚))áaL00p, B h1L9FcxB1s ; b\44{dDvF1&֎qĦvRIM|àX"spȍ,B1 i f--ֺ ;sRy@pջ]ٽ 誚ST?qpX$mҏ8f<U P@Jpx' cLΫ/[H ?j֭/2; j%s# R8If=X7UWDypTYu"bsELjHQX5P9Ɖhҙ#?"["HHv#-4 #Uh'.굌nk#C ]u1<Z:(b>9UFa&*t0v*dWjMTLT~ĩW\Я0OWKzyɶ&~.L=ЊW rs~|fUݏ/WoWK* /iKDw?5}5-+ _>Vhio_wghì|XȓX_s g&桩X8d&k4X.ş9֍`.BKz偋 xR 5[aJclw-u"=yޚzлڪowɶHW(T $+M_b}mr &Aiq>p";k`zMA/lK0,7fȚчٹmM$8M4S2'C/?7:ئ"mEn{t2) W>uvƖzPL캳%Psp%9dV(a=rXUdsU9."Xq"ES4m +U #t+_KzPYJ %*RY7!G>6k3o_Jؙkk?覗5r5r5r5rkFnFnFnFnFnFnFnE7dݮ[[[[[[[[[]l|!jvzuFnFnFnFnFnFnFnFnFnFnFnFnFnFnFno[[[ࣛ^nȭȭȭȭȭȭȭȭȭȭȭȭȭȭȭȭȭȭȭȭȭFnm5?MV-M 1e X?{p[,|þG_R).Si:*-b*T`,( 7DŽY%@PHX.||Q-*e*M9r2G徒WV8/{IoZԩ ,R.]QU-E\H:$*'9D.`x%JU6Wv`S*2=Lp)NIh뢆.n|uWW1ɖZk2$.Ud2\tJlџMFF T0k+Bo7Ac΁P/娩l4 }]o~vsO٧ t=\w3ǿo>}ybO~[Iy#V./ͧ_{?El}^ZBroo/^f3lWj{f<&J~N`>LPualZ}}}XQN{͘A3W'9=c?Wi&_@7JLLF=A\]!oO*~<E¿9_C&oB5eY=ǟW/eEI#[ zͱ:لM4;>{ \[>I?I(H9ߝU|_PZ&C}R[:~~$_M$2I>w-s.W S(?-YşH!ݗ>Fyx疟JMYҳF9Lĕ4m|ݥlȿ3. ,g}$˒/$xj_;+nY>M=<7B}=d%hN?Ԣs9e[ -GxB%3/NH?{$o:g[)R9kffяD~D>/RB9BT^r_Pi~ Y#^=~_ԥʻCחg̃cڲnA}۞MKMC'KQ`mϧT鋿zTr!DJȚ)OU ezⳟno$v{S=oO۲c*GZ,U6>D! ¯%"CL4U/&"LT&iJ\Q>ӾPr(߱C,ʶFS_1in;|è|SbfI&~Bdȧ66!n:n Cs^ڶrځ}]ݱoc=^¯}ZGn%җ?X,U˓`[4Ƈ+U3Hȫo|b e _T'Rmc:RI;Fy |H,򈆁F‡y"Me 6~FKd)\h0+q/]o9Og!X Hgr~Noq j98YbǰyB_r5 (`KўŎk.(\j0k!uɬq|0xv> ^.7S"/`b!^ 9nfJdžx#.Q\k=0"\]p@36D0$"yw0*WpP= (";$DYih _>&LέgK3cF0oj'lArK 57D H^$edP,e Z90]h- G`Xr#:9=NU=L  iX'=9"%DD4O2"r @P|(0.(\j0k[cu㇤u5 fXe$685üdjz4yީZM8oYzW}u G]N[^6m7Hx0I>2U.uSlKIn|t=؝unj*oZ|э RH88,yH h@S s H&%8zmXC05=f,'Snh>w?Q/%087 8W<%Y=Qzq:#tw|ݞW~~__;ca;ƶ#!S`0)}zoi7"0:㐽Иp]bAwˆ"J0pS9؄) h f-.S3^`p1vcr{AJ vU/V}k|e ˠ #E]'©.qeTLbTLZv-os{ZX.Cw O֯GpC P@JpХKՍ_܊ۗ C>^坽~o6*IƳDXy8P+^ZCaämf=.V7{S>+ *|"\4Iw)hLSa@#;8G 0R9h{^T<h֪h_N3A,LGz-(c =Іx)Qe|(1Kmj4L~%?e(NܦIZX@9D/p b٬f.UMߛ;LjY1XU  = W fh*d!O WEģ;ff{ϋZ9ȭiu֝E$Ealj H]K]ԪKǡ{.4,K\!y`EeʊߡYu'UƬ9"a6lNH0XcID+vk/)>k[/%<Gm"t 7avZ;kPSNs=f?<2E{+ᰍ9,zGa p.k.TSد{^PxL[rh\%%/GhƦb-K$<_p)b=KՍИG-umkڠt c$Gmf=.U7> q)c;ٻpOz كX%.(:HaCR#cLpSy)ȀZ?QB]bհȶC\n s:fl'yqlclk9ֱ.SpV 셅n1ȩ+)-S-Qtn@7p0=ͥp f=tRu{ۤ7CƯ|=$CD2QPVW9pě1yj_SBW0;o`E RJ* T+m0p_hNd)T~`' NNaa"r<_'ݳP8EEb$aG|k1;(J~m8>vQjqڊ&E+t5UV=_P :F!h.2u琤рR4K>=Q䞎aD$u ≂"H !dY :p{18;f35rF6ׇ|Z9(g,Ewp\A#1kAa;Gpì:c%)7 ΋$xPGrb1w Lls@BY .Q1y0Jc0CHעf,MY(]]Xp p .ChK>+CE*Fiq108yP.N\,_| ӣѳ`!NBpìdyn6#v~٪$@ f62x@ Mpc89;S < U"(DHcD ]Dx[vsiWGҌ쏤a"wm;edʒЖARDp 9Jh]botow()8 Bs=lQSH8-df4qԣږa ;w `K&!:h]^O7MzZ[;{魍'[˟UG؜^ۄy 9vQ "TzO-[{K_xal0LX#[s#Y a+[״3T-&:}ya@8>BAA@Bu:D؛_erz ^+_ W <%HN/_-;?CSrsYCrzMpìz]k2{=nKʸ @`S@z`9&S~U"`.O-A3/>& .*fV""))G50.:aAspìHŸ!Q7[ӑT Gj2:t߫nw#a8 `C.qHŮ?4Ÿƪ}c-uA0<``5ZCP)ìVڥ&:$4k>;LדqSH>L쾦g`p^8yf"wVIv٘<.1F >#[(SustCPp<O/7=Lv~w3w gfm"vY*ɓc*S&4&[Ҩ7WNP{0pT!!T ( "8L:؋֛;0| $UuzE r DO[wÄuWn5lEvm[so) #lݥ,&2# 76}ϧj̆O*[v)@aBr@xE~1-W^Z~LC)_/iagul 7b.X.qT,?!K`&o`oBJRc)15_ k/-%=A0z\]_fWMvЎ"{ q!^[b( @*h[jc'_ڨ=j@\ï3< ^(`3HsLl$K|&a5h;ś} UiX\V'9N!{«뼵5V08YA8QA.agIMW.U,\w"?jM>jMbN.^V}F~"1$9J&"vR*#?<އ$A3OПBuSѸZLyrݐT> ۨ$]iS9vZjpׅ)nȽ!%]ЏwiDdOkSQ-Z5 !^9=Rj֩C(lO c9ā|X1xr}Ոm>˧coiEG]+1Vx)q_iQt%C{1(jݬܣD?BKe,2skg7w?w}_)ՠdNFbǿo>}__SPUJ{4o?÷5_"`P%/ͧ_KZPJ7)uTf/'w㺵޽{RG_Jo^|ݽEx&}FX[&(4ˠeݿ`DPggnRRkDtg"EB:~oo8ؠ9ʧA?+y['[_vhendstream endobj 106 0 obj 15716 endobj 110 0 obj <> stream x˒1ǹÌiXF;AJB++, kA[z ?jԃp~R畦Csz9|<`vVev][6@էjff}KhonkZ1B' k UQ=fq&#bv_vnk(F YR{ӁeXZ6[sΒhwLG;ډ >?~"V6k.a:x5*g:h׏cB )8M0ZE`db u_!q5fٮ/qFׯGtZIK yagHAfIqS2XYgvՊL4d8[?. ֍a hIKHQlLĄ#,A`E&fSŠaUfif12DMa"t ƈtN c<wZ%D,pt`"9T`Yz7FC3hXюg3H @HѴVaz2`ϐp^{ܢ6K?~KeY 1M6fS oN2cIqӈ T {c4ō6,X0Sdci9&*b ^elҨG4h2 y_u!1[\M2n)[' KWjv5TG ?/M_;E$֓)!ى5m㏐-r,B.L&8}V6bHS@3nĖaY-nj-FKVӮ~Fr% ΠYB?+&/ _ 8 1E?rq;2-K(?1); qeb$RöMN!fc.zDUQ>iTt::JDkXf/eLMꆉn%f6hd-L?ď6DSb0#AF%}cӘT {WC1GFJoaJ9y¦ow!7fe dR -ep֒s4ijxu  2Z! aIH1א5Z&"䧢}OKJr6d_RR-;Z|x)>(H_~,`vUo7*\=h˚Ou eƴe􊡳JUؕX*pݗJތIRIJmZŞTӊ0竡e7펡|ضe[VOe'{3n>7[oޠdftף*LvrTڢ'^aԻseuH $zQ2G($0Gn:.kZmX9>}Ug(' Y9x  L-0ۋ)rV&7Zr/K{El$qZSv\ؖ*?bV߬~^A0 RyC;F1bp<b^J VV.y0$L1{Cj[F$L#zXb'8A4&ҁ) z1MѤlzN6ʍɀ%x @%Bԩ}(iAr]`R@H&‚F4ii` 60=] . ˅Xo(2aI{Ї*1*Xh@G4 Sݮ`A]o2M6|)pdH &3ۃ w)p2  BpLB Σca4)wi&ǀJbBbA_&O);죴zeH)̢*2M6|bO=T,٦\k_(1؝B/FY+ΣjJ)Lfv^{mjkٱD>u6Jaiya O,h@h(&`Q8 0ԕD R,E2l0\ HV }ȰT.T1L _xЈ G2G&EhR6 S=&EK U1JcEEOx,j_ch26 S-P3*Rkv"5M!"B(VB!ge!3n D!|!*R VC=A$Vc5u  Ac5:H(ސ?x hޒ¶6xmq(ԦCZ16Lڵ65IKC}QjT2 ~c^"U'Pê / B$Ww_A&X}бo t=b,GSwSO֖gZ3B`h$g4?C7&`$H뗛O7M՞BWAm6w 1il^i&̱ڞm+YV/oeF{XuUX}Emmez C1Ѿ9Ǟ؀ .OIF(b=s:yZ"2ijg@{pBL|ʅ毈vT iŵmႝQR˒ڇo̅WksEuOorI/ %{I&j(E93~ͽvIonE+\Dž[QLR\nEBȇ}%ťĹ (\ ? o]=n%|>vync<=2ʏ|L?Aڄ7ΚPhn3FmLX[XUL(y%Oh2Ŷ.=x$HX?z83$z&z>ӕPv|_5S=B]=b6 ?9f|'A(snG3g#}*@% mIT^ OD\ps}63C㈏ʟ-X^j9ة,n4K#3t{UQз:kBXy`͐79:Y֌Ɯ&CV=XXK!O XIJ~ΐáqG)ԝ|5#dU>X2JIsU!h| "dUuXBw<bQuzQuzQ5間j!-&wIz.͓A"۩AƟdrY9^)u0 >Nhwik7y1v:@qAӀ"AC h!RZQQoax@r Ǥ0Anz%Eӕ}[:ƀI ,h@J>7!FRhA>Q9gk)Ď_A6~ԩk}z+1Fȴw 4<0DJGONXQ&zn'{]Y^θ(]#P6sEa JB NV۴G\$^"xLLkRtaaFjA~ԍ9P=ʘ04~o%e)sxKX=I,wnX\.s >{ Vyǧ>v4#_9vc=Gۖ6ځsU6KN+}3CfAA,f#m7\c oBvCfSΣo7 I(LxguGcJp7Df , ~aA"l0pMsAU a8ut:ap!'y RW=nCABL~F&W\r%Ǿ/^ [ _U,/끋ӟdؖCRhŠ4& b[ų>Y=ɾ>>"_"3 ~l0`+C(zw?77`endstream endobj 111 0 obj 4279 endobj 115 0 obj <> stream x]s߷{o$:ו8rū{p@ĘdR>h`fJ0 Fi͙Xs튯~Zz`VO.VXvR13vnxqę[=<;:3.9pWaBP6`FCg"8=ܦqrKjuMMAkChd pÃFgL{mMiUI%4ߧ^z%j;sh*PөQ!@"5 lʀ`R):kho|UVYhi`'gVyA2e p65r2*'S9Ŭb` Cc[bla :p?+%@N}6Xff6 9Dɵ.D}'V"OfV8p$taW63R*Rog*R?TUIF2kd< ¶T<`Nc-,z}, 4qfoaᇣc93 RYm(%7BRUm0 guu\ : As|\ D9o2:Xti `8e^ 0O$Ij3mfF,R*_;j!nQSw9 9LCt,na@݄5ttWW1„Tq&cT䧩,/ =-0:#BE7i}fͼ/2CTw CNČ/.cm%}qc 1:\򎓝N>Ag|DyEA8S,׹yO]q#f,ϧ#Y>oe_rRJN3eO=4йeiK/9KW^o4#NSCpnķ 4tȾYlLncSEiDMoOO"HvT(iPx43\eRΜB9•) k5L)iP.8)HhxFmo7$cC7[. tXPL2f''q}`D\2{\d2K#'"rX84m}xڸ3p5% YVb#PB..D pvѡ (j?xà?)|+UBB(8gs[X&YE?UWr#JS- ;FUfx{.i'd3$'*lU*jwe/SM\ r,Yf21Py~igܭe}՚Z0V\kvM8ʝ-&sG o5LǴc xQgNqt0LW  2HLcIP@&Ȯi=7s*H hP#,s)-S 9f=q'EH.uLYEjW;R1̝^6oN:G VŦj i~b7l0i{?O}3!ha Z{ 5^QDctN˻h a]khϰ t΁ùwa,̉?Y̊YX6*>pPx<`6ӂpZopXj|}\VbvwۭҪ[vN_B=U+2\`bzH>ylؚbS{H87 gCK/!)lįHiF۶"Xd fW>LHswS=sBe~Kbu@]W>Lqab#W\,. i9k¾?j.p"r:΢."WC%w~ {mXyK ,~7n&\8pv;!>[!ow5߿JtF&60BX>H XcBlƲ 't9cLԿ?wt'`oH~YrZswAPû %fh0GC;ƅYL~9wlm]-Ռ_}fk7{AyPF|(|~ݪX@@wKǀ^gr ampm6T/$n=f\?TZ2>a;ہm#;1޲ &!j ,0̎6>;[n*Mww:9Ȕރ'SorrV|؎3aiwMc]^Z]Җ`{h,X_1凾1zA·^දݫŸci&"+z%m)abha1Ubl"0Bj 6_P+@]$My$ \V,b.)zgוhM#rI\M] 7,ǛJs 8XStPǺv*Fd[l-:8RG-*q&%S̗Kj:]d j&G_r%Z qMxU~@ʂ27.VS\kۑL*l@5iR^Yf1X%o(vZސ4i+j%XU[g~,7rQfK9g^ƧEV>9$`+* V02$lW;󮓝-^?Ǖ TKBGO EoAuJSsi8?6N|҄>L '4tyM=Åx!S@ܖ =;hLi^kpm<-u@"AL:;;d4di:0{z+x w,W.t%$B~A_/Z1-2y2JrSMI O9heN)暿j2Ig,R_uTbRk6kv{Cg+[ NtQiVڤ\?~fC;eWj6V"z3+zB[([JY+VK{2qc1XB+զ7U/KoFߛ7^yTVGŚ%9oB%ͥKfù j=G1'jrdnz<3$% 4!b.>#y;H>#$$]HIf;*yGUH"M&~[;)P%IH>lˇ?|]rfWdQ O$yB2⢝WMG$'ݥc)-qYI ݓ"1N,rb"ZtLH[`zg-k9gRLm=x)9\?%5i!&&3f'.ž 0xMTUGEgƧ)R7B5)Y}6 5I3,Vș e4ݻkWWj<ߎ`3 Aʾ2&N)JLM&).ALhENn鲱ܻ.0LNɑ;Prn4=?+Iv^|lhdCxm_ ˄3ْ;[&KR1mw_Nw@kMOKOC/UZ}yhiAmZtZIݖ*ǔK3m%]>c%v>/>MBgGyAիB ,ߠC$CrAx]JS1??pROj6oj6W5踽$a _% endstream endobj 116 0 obj 4683 endobj 121 0 obj <> stream xn]REW Y$hRHUWވ-;Xp!ϕ[^3Է1ɍW=8@7WO@Ms:lKANƆWz^o^<ߞĤZooh]3ZG'߰ m߱m?cVÝx[}9>C%ö:%ێ9ZU9ZwYo;e$,'+\[a Z3'AMj9Ϸ 7 ^bXeOQZvIjɺ11^jZz)laʩgzE'c[Awܡٟ.xW[&%`u~SQyӟ` "H l, O+EQ~Np0QI_}P ~9KNQPEk-f1u>8.}RF`FI%fgTe!M༁CpU@꼼K:!& |w^^ +8K4% qp7}qqT.C].[[w# $X#JdrW K?W%lm]T\ȎXA8пvP]ji6YG H%eIGySPCBI ӈ+V&1 *rYj&oTza%f)Z›YD5p.ڈ1>̰n/ "RDYJY\CvB1cU^90'LtPbD>Yp hyC4#eIqZz@&i;ja0Zt%(RnJ4FG\JG %)Fo Co+Q.{Rwpuݽ];\) e$T`: :SEkD[hS4O;/Kr^;2 ^z zQ^A%DxkaОg2f;BBob>&كfέiu¢!jd?(2=ef>7QC(Jl(VHS`ѺDHa@ )oer#A2,ܲ"@ Q~̈gszLRw27:=vBZQǧ|*b?E1xu_im*7:[O p1N͡DŽ-^#NkJ`3#DdSg]$Oc(nk'cAI' i 6' .  ^4- l_PPbX|՚̓yNs퀉N1.M\o]oKr/y֪)ۖl^Ws1~79U0l`#6l`L>44`f~ZJOI un33){9 ԰،&ȂMb|%$>ac̛ܤfQ^YL PR힆-bI@a0QdЉ1 *fquV/cf|CxP#'ɘѐ,Q7f).lR6PÙC z^bp/*_r(aYi Ca3&^[ơI>4py{SM觔0gUX*b.0Y p Wԛ9]1=a>#$d6P1_䔒<@m2cU-Ȟk3 q[niGΘWzwJJH6M+ErrY6+'5 rn*RqfE GLEqLHƒhEB{oA~c#_"(wcJR fBu`T\z`RQP&:._q`Fb W,mrfrUو\ amԔd$OA`EkhH \%ȶU]ZNHLc'Woe}uF (@IPLTZ\.Zw 7 Ga>R}%Jݓ3Do;RBxΫ>kS/.L~OD-o`.=0E=r)ưX}Dfҿ%κ T96O{LrOV$w tw:]{FH/vع#G6^%_)(9{h1KPS|ݦgC漧IJtĆ jWN{i\{雪љ[1?'Sue>4E.W!j䱎p'SVKc>v(A՘1(38GS'Ozyݖxq[@2D6Ha0M=q(Qm&Z{'Hz:p\1d$ ]:">iͦmB}o3*59XrfTYP t—g/2nLI]Z)|$e6^czlogPqRp}^e:_wüʝq5+W͊ o 2Jr\924E2GFH;{60y6}-3JYꔎή;k cr޳7f1\Yz5^LJUlº,ۓ*g G9$JܹYŐ!ɘ~VxP5WH"VE^|s '0-ac&yc(`t'^ ],+/2,\t*û (V+2Y'u[]~QX Ѽ;FNAo&beŘ3MoXM.S56t  8E\(DF}AiD)]MfMG&^7#`Pqe1yF|U/oz_eQ?P wf..Z1G'j"N"Z~ܚX>fofd%"qC D0; .ۖ <ܝLYC dlM ;V RH.^:At38)!{"1VM4UHqМ a@2P q 'T3+NDώ b%endstream endobj 122 0 obj 3485 endobj 126 0 obj <> stream x\Iodr-\Z %N |HУn-♁"X|H$AZZX|f3}~{o.O~8_緳?g\uR1;8I+̳3nO9 }罝u:UW/VXOa\sϔ7 fpBvBΗUltsOi`N6F1hE9_g BJ@ x vY2+ Vηew|Jg(ǽs,:I ٫'ˤE8V ){c{IJi  !Ulm%dB7IL7aTr!x.|FӅpr,$0@*唖-$'"AIiB+-^`k!`pBy WqEE7S%Wvu؋3 oֳl=nA5#9Om >`҆YK 4&EY_Bsyx0Ph|-wAQ\=/hif,x%o C#>@˅Or\DtAT=6xK? !r;:{yҾeeML[|@΂kbՈdTxe-zdF2B~7mdR$}Q/݄h.#: )ݍ=-2a;F A}2A`6l]"}K˲lK:2ly: RgxٖiC&@P#o $e^ѧ2pԄ:P64\QbE1`]P8tK;Co$qdo|aTuL0fy9$(uŸ gžPIi]{[F88!DX:i骪77HP'V.+ҐR5.ҲMX0A;}CV`TfbE=tECw0 2i .ߜ)w#qGHu-M!$y>"jub:N] z <ōU"IRHD~1baSB:-S:$Gb,1.#^ ueOD&\uc=`Qa X>S`;vH֤6>2$MY.j YyC+kscۇFvemS >f$ǁ3E!Q}G[ʾDDN@cFuR*.0HӶYub" renvlfm[{=0:C:o,p0 ^u~'l"A'KD'(*jr-sO؈xh3<qt_2k%wyxHЖdDn>;]H-;B6|4X"X,_)38Lg=QAm@rcΈ2_5W ol¤Љm*ya9͛tф\r;(0 Ã/oSE~ћC0&0'v]^h㹮K|3b,z9r:Zq C!Addf+ +8 ć5+ ć5CGD !q<< c#8 4lJ'?6,7o{0״@EnO DY ,?;u>8v 1`P1ÂGp`YGA^dK2AJYb͎U9v!k}H#dpsa=fv׆ԦOobʱSAv}n#"z?8.ˁCqȢA/v@Ѿ=!AG> /;vsĀM&3To5Y4Zxe^LUWR '|kyoܛ /tcaOMz=sR9m.L@T #Bjd 90{z/Sq#^A /aR.R^(6V|{Aq,ĝmc$3}Ce!^#saeWķ0>!] m⺐}SC;|B'}Dh-T@['ΠQ g%?p1i?X?9+4FfϵZYYN_𜇖87c?z`ebf]{)cδMEzU#sݡ]0Ûy(a4mTA|3|l) ]R`㜟jrVx׸9Z}w^Ud'ހ+aN`q0 8,\g ]SF_ǓnㆇvjL,*P ?[@:Oh!|&B &43I j&k?WR'&HxjoVYJCJ3mP٢vcq$[:jӨ.Ϩa3c#;DŽE~G-ELvz~_R:Za6rM8x!9U _M]\@wx锃o DҌmRY?! 8~Ɖ.YY4-;Qŕl{,rXάd<3vt޻ɐbT<}5z*fcMݠ9M=kpz0ո4l0e^9 Nǡ5ߺ ˷C Q FQ7L *C`㞑B#ǚp2Bioffj* ]Tq\j<d8qYwW/K߲ &m7];JTA~76Jǽ~tgXtNģ<~Pg*_|G dX~endstream endobj 127 0 obj 3637 endobj 131 0 obj <> stream x\Ks-N0/.I)DRÒn<hpܥD @/Y}xY8ک';_g1,Jw;Im腬\<_xn]F*oXu]+i~l/b>_^iBu>ޅ nw4Wvj:k> &PvmRa;_ 6ҢAP[7T0Sr6?ߣȝ_mN-A[Og:/yp.JXo[ص{ʘW09y^[[WΔ^RO`#0ݯ쮽ٵ[ Ѵi?#Ig5kGϹQCM` <{jѱ؋tCnk"r~ hno`w؆0&u)MSѬڷ)޶cy]ce$ۺEf;CE71fӝ [W34mWD?F0C#jh+\VHG mpk]NJ9DsXX VvkkRQm+Z:YM6)e^YvvhZ:}ƯZ6AМ*a1d TV"J֦?.ѥjyxE0c{RliDh T3xjĊJ ,jZu:~^Eo v)a:fAJWMUcZHA Cx$!t/Qz䮩@V TY*ϙpr N#r6`߰X84h=}ÍocYD)=7:P4heᓈ"AP&fH2;u{" z!5 2M}A+\`!oһ i2<{q;l\22$cEM!:9YX0r\D&0gfptm@gPq$[ZKSuWu͐N:uۭ#"VB]V2PA 8)O)Kwh+Qʫ7PdA.\EZћ,;>x} ky~H%+2U9j|ب!%< n:!ls4 + cpT*|h{"F>2gPn:#ЏwK]'>$  PBo]QU p) ' ʑ+2MiNPZ6O ܔqBAHq詟jT7* xMdBX#=_D ,8pJꜚMH@FOES{!*9?VdLKEhuhxE G53',k/5qOCm8c#2& mIl2мIK]āB ^)k]Ƀ E@(%v|ٟ]ӱͿ&{C yD5%Y$l Wof!I>i6B|y'FF\]=KppQ"(49bU7oÛA 8qcKO߫%wHh;B hI+cXt0Xu r}]lV)|Sx7 w],\O;;PYnv}B/Pchq?:تBf,PEYAY|nQ m }{4 p22Q'} |XXvpah\ O9;n?2s)|zgc Fg>9VpxV! S/ C h" E#8DUtYEkW_E}{mލgwHNN"U:=܆.eODθ=1զ~(O?*X5nHH3X&]RHxL$:ffXmO"c&02krkE a;y4=4STPMV'݊eU'yN,unaUڻЋqhvD$endstream endobj 132 0 obj 2891 endobj 136 0 obj <> stream x][O~W2Mv_|h&ʎd(4A 0_\_9]n,QVq\:[?&QO|:,{?+Ws80Ŝ<,9+h^@<70c<˓x/0xda/aJrWNEdB`D5<q&iO'()Azs_>Ƹگ5bHygTvxR0G {+;|.6VA qw?L*]E緟rf$`q070~Cd `"q$Uu.E.oS͏ G>֙v=](Zo5 @~$9 6/4,kJ-V?u6 UW HBᮊiZjcGވ[Fiz3gv@PuP>;A5QkZLb]$@6a$g}h$0^Mi`,E@IxI1 xnɥ¾#;A$FSrոF6~]S:UwZ'"h1KW]\>*H@?UwtZ0%?׬mVV@/Xt0Wqȼ=1\ XSL-T!ıq̩;l>4FacAƺ&kg&OߤCiJ²)nadT0 x`E{O[kG:cV'DcOo`z] OjNTKW2s\' s|>;VcQ1!ID( 2 n,Z61 Rȧ%2>3 ܝHB]ki4V-4ݪ%,:$ y_qROId Z39W,ˊ^IƱQQS[0RQf$QȪEn9/m4NP^FYP+_R  0{9-+E ͣYKUD3Xudɪg #wW7t]׿gh1Ms[",rV^W QݞQWGiV~*#B'H01.EznHPZr~,uuGZ4/3E̪T3Ahd[Ok $Q2ό\kK 9\STc }I*sMrׂqd\Z0$M4:KJcsE8Bz/}q_4f[Mv L1ۄn2,O WXvp匚!ڝ5Di&I\1ٜEkX*BXLn@"6_Zqk Oz12 +V۔@BhDy2q-Y dYRߜ8$ޜv,e/uMEGi9! Z)=_ ս md 9kMIvwu*aap/-BJ,ixo{PJm] {zܐ9Y^0/^ `Q&Fb"S(j<Ȥ] 2URm o2<2nq% /]|p L$jdRE>m_/^yXQ}Ar*=Rq]tXm^(H , Wi~ Ǿ5ۂtABJRs~&<& k8!DX/:xS}oĸ8,ݾ2|Jj8]3ǨcO}l[CW"!߽PJFz͑ \ˣh y|J ? U{VIh-/<ҨWV9(?V &z*$9/_lMZH(]޻-d>b"[q08T^Ai\R 5YB̞Ue=V!zG= <7:8p;HjʑUi9S+Ld |ʺnH8 էc&{0DWsnul9"nJx7J| PZVUU=xEqz`-tZIKgr-kCP@L팡9攌9Yl% gGE~蛍:#4˒-`{39ғֿO72Ԫ %ǰs8S]7,i b]Z׀D.Zhػ9Y5ԤLJjZk+%? xlU-k)Ъv! L"-e-|Yծ8s\q<+ȦÇ]˓i-ܤCÇ$pX1;ӰK0aj% Aœ:55rNlR#4}i/.9-|u#>ɝU0Jxo?(42ј#Y5^e-Q̐Lib{ ۋ5XI~',OsoBLLjys;DMT ;}MR!awmAD%M\ vk1'X-USqU5ʽ\HL(͍_nvo=L"\+A=߅c. Er?_")tǜ$DkUfNgmJ#;p9!i`c;6I0> stream x]r}Wl9/#v>*!+L`;UEQxI]K.Xtc0)=x 4zVb6_Ynvqw0]r09[jǓ%жU?;y~`\,bQuyWN~<駣yQeUUgjƟ9x _[x~_S? eKxfhoaزP "Fo=5 ߭&6׫ᡨ2`婟?5q0r-C 9OCuh!C}0t`81 na"<z92 LryNG3yORNΤM\F W>DX.yf*܂5ގ=|Ns9`%erJ,W tt#8F\>58#QJL.c^\g,g'~+cEge4o "!r}/8)'\ӎ ΎA՟#vlki$"^\ަE-ײL4wl@/ wupl<~4`%2TUjzfvl 5#LE^f,i٨V$){)p2ΟJZyHXlAKRo 71qbpx2ʊZ2IѼ-ڦsI͍wL}_2IQSd9֜$J O8_`6zsWNI).!lpY8S}n%?,Xֆ  Va %7AwXvyo.:d-yHr 9 ]M)XPbR S]ȹϱsMH)"6AR;Dpdw?S &w,"E9^LRIZ-Ad@v.ih?Q/! yorg? :Il\MG W;Dx"(MTqՒY@P+=VJ);Q8 Pfw:N\8íƀ&ϵ!S5GLv.dܓc9 C@XUVnl;Ll)|khg3(GRP|*3 4Y^XuQO Zԭ:DDH GR"ɱ4$%M)^kmJ9^b٭%($ZZ&$0ƵrIz9IQ**ӺR W=JFC HKTVVBO=lw#0^nk8RQo7S4g>Fc'܉<@x9W^W MB>Yy<ҞˠRѯِ}BY 2_g|ƛ3.=K$uGۧ"ēԦϸod+΄[:"zMA+k4gʸx0BjNyC`Y5MKQr[p_,a i;w^8MRQtڗh/XvC[:j툊!Ǧi8b>|t=5(5a6Ə!Z,d!KdfĦjD 4!PZe߽ hcO'n"3ޗ 0%C@ڌEp+T7$y4fl!Ғ4Wyj8'~ jsQ&;_!j^$mΒK%lAb'{z"EYԧq Z%dз z˞u 肔fU1"zmBt>-Eɟ %)NTz Z~rLn$32\*,Ŝ7ܞkOg>c<#oȯ|Tʫ$իjYjlnʦ/Tr&wM|X>v16$VQTsj1A(ijby%[_&A3o)IZF9A(E&ΌK=p'lld`AN!1 *CJ\nߦ4%y]yw^Z*-_+y!2m>j?d+xwBjC>H\x䮤N@+}ecΛ{5aAq6 /D]Tv;\K7 J "d*K~{^Dx/(a}e;4 VQ`F>9?ГˌŨdthb"J2/t%w}Gm mC^Dռ\nM۴E՗! NM4q/6 M 5hKSwMv·OGM8+OqTԾS~ 7g#ޥ Wx{ +GK/Mby4Ń{\? tuNendstream endobj 142 0 obj 3956 endobj 146 0 obj <> stream x]Is\sbYU0e;ĕ"gs9DTː53So| Epej$I  OI Aj&`$|5$ΕD+cC%C"~ Q@̿h\' W"S|<ͿWIOH?h(XplL}O;!9$hjy&pUzr.W6xIJ ŻJڮIm7iؔT %\R$_y^Iķd °IjđM:mE?-{z穷ɹ $*W'|@ $,7dlԎI# &+"ckR} ! 4 I09︲dm'ސ>&mw?A s ';L9Ym,QXWd}a+, *ye@& ^I#Nf^6lA&,ՙWEX>M+'uB,[BlF aT,Y$(v6ʦUaM A)Zo0Gvqvwm;cؼ)t« nC3}#r0hzQڤi'kzKcg$:Akw6s櫝;9bx؏%Giwn`'yASe'[*~m)۔ !? o5b2|(]v4k ZkEXjm5A#B!;BE`xcٰp9 &9,m(Raޘj{1|϶Urۿvͦ6Ӏ!٘a3B<:T>JJE+e}TKbd] LSx!X-NB du,pGME50P:EC~m`/ 0ĉH'B9wφNTbW<-OSv}@$[| ϝj\7.x"{>&6O1K<^s2KZIzmR]_8'.dNJy6r}ƣS7\ᆫ.}jrEvGٖl~۷J~*۵ZUdӈZ↶ĢB͘q2t__B*6޸}~{itn8*> stream x\Ks9f[V`sM64P EQSTx7+fGfH}d,ȧ>G|jjͭ."purMVARmr+'U::>fp6RK& f; OkG37@W@^߮?u`d?$4'?ɏaqH2_\YHb3׌<~W9џӍ蔜n.+.~a#BXmDDWx] ~de+k>ޔh^Ww; Y`̏#y8`j%tSnjϸxiL"Fꉜoa+$_d'0z8b-s ,4Fѽx.g"11xV^1CR*d^3foJyq24 "Q|{8̧ܧ8;kreG& }j,21 Pb3CuVYZyZ,v,aFyauT팞 MAi.+yxR`sUp6kTRHގ*\5XP]*PY^9g}('VL)$)#;pÇqx68fEqݫqx30nřHD=HZ# ʶ$ny7i7>IMVf1deѢycMP҅VFJY G^ȼhynHH'-ξ`UH*J9ņU" -^[ 7]/De5~ޒJXO \Opjk?^Ogð'N7=Y'R"$ża49R֔!ijTANx;aMHɔ?@Z zW k8p]3I/\jo5z@K>; RQa!&)7JjbPEJgh'/[l+DKifrK4nkn lT;y\JWZ,Hiʠ2"C(RƉ/)dagcnZr79xBBƘy|çhk |=M{˪-'**(]bz2/Ŧm EQSL8  ho+Cd_t$ě E,24풧 7 8)vC0j/S4_W059;O+gn/FQm5fWO{7aћ GpOsC2M?< [qr  >x L& j&=?%4dMuT|F7g| ŵ֖ I|X #Mm_eL>v5|(VZѶX&k="o`:)H@n%}|8k_^<cn::R*MCBTНZxLm<E)V=网THFqEk\2*tֈVpa0.ΤA<<k'lQ~MqC(#@C"dlv8 Zsk*LT ni*n *lPn]ksagU,2bfz& n>m\niD%d.m -CYIZLTU4+#.[N u겟຺dJwy+J*vk8|<\olD쩭ɞCG\#RECF@I V#˟C{{^Ll'ҽ-US\@['b gb?/>-=(y < $x-_sTs vq 6X3 S+K!KE/k> ij)C f_Q'1aKӖDptr( Ag#sfѕN ot+ +>L *Q_`V&m,}iHi c ^)RkOEzqBqk`R ͖0jlG|9ӸQ>bR bSN(C`eb';9%qx~u|Soqtꚳ"6EY~> stream x\IS%𑛯>k_#`‹N 0 FC{tW]U`p(2̬%oY?v~}/'=" ~^ɉ B}+?`n8# | P9XGD50W$L4;͠G^B )}jK cм۹? SȢ` 06 .+\C9Ok΍. ]<'5gגO+}BBzGD|GMjXnWCZfڬP4ҿ@zuy:uFlHYl&^y!W3yB0-~knu&I`\Fҙ0z !!: icî_ǃv a 8g EK܄!ޤ"RI[^s%Ch& B@\ɬy4H$ۤ^k j1G~EoBS\RsI ׁ)!Y{@gr-h*amGl0-XI yڸCJpЫ0T3b7ch@UlK`63_0M IDQ'lL)Mq\.6nޚQŋ@T?r~TI8Hdയj"\6|yL8^(|6چĢ_ oi3%8Y6h^4M{Vm m mxލ|pd@勑\3JE%2a5*nt9=[>}rBu# M!.. ga!nV%43Q'&^j>2I>}hks ` L6_ޭTvNxCh|y¹]K>тLROҡ +(? 5v #mAl:dh?&/d]D"{=i-k=֭%n.M4\ynQ@h̭~J*֮W?@&ZטZ*1ZN\χG dwZ{{h %z5"̈v$o:\Qj\g@ϊyٓ&;^_c;Ë5F;3Rhj |{ T{h@Xބaqձ?9oC0z|?Hw_]66\-o;$2Ǵ^qtƂ)*_@JMKii W3r] :inl4k`I`ocx{F5>Ij jؔ4lAi㦌{HG vG.RʄtRKlS1w5r &a1Zv< [ˎ$ UXGI׵U4 h\#p8|P:;^hفgݎ+ˍ9b'@I٣7hmX -qV󬔱ȱڇl#7^#9.Zg\fG!p$_M큰 "r`q$1Gݔ;2n03!0 4bj?q?)@{7N>wfǨo^PU]C\}6JgSie|+2^M!]\~hmMMwfBnBq#a*E cS;&^DŽÅuS/6~mVu+s%cQǤ&M xI%S" q`Xi}Y*I.b3mQyoR0n`L48/|(YB&y$<>m V4ijLx*e*nnR*1P5IFmO &+x}VᲀdCNǢCrygٟƇDeUDx"#+ I]~L77TQ~+8]:{uS!DMc_zX)ϢL#LNE.|62,fg$eJEM\,pDb=[Ex>X B8EUM{(4h] k(1@c"aG$dxnUQI$RV{+I9gQdT2!t%XZ1kťuu$Y'*4KF!u638ӪWGt}h"tnoS<3$iS$ @b{8<%B$I9nv.c&A :&U8G{eg)jYfxm f^~|7L_Bыrs1 B4jB6T1 Y[ݫQT[ru/K|qG%I}}I}YOUˉ9Hat6)hTT~~/vlESA]qTqs XH߲6jOۮnҀIK|_ƫhcm /+?4mC8(@"[XdGkPWͤtp⾚Ğo- OII> 6S3h+gendstream endobj 157 0 obj 3486 endobj 161 0 obj <> stream x\[o_vtJ!gH8qMEEA[[vW y]KN ṟC~?+6Ϳ㋝Ϟr|쇳ٟ4g}մgvL6Ev}7Sj.vvYd^MlUMgf6j['dW4-/wVjѥCd͘]tl?Rm rJÛU;X Yq2O+ ofڍ ?xc p;㦗l~v+#el-{5g#3G5CXyT-A,EoFgA$;+ q F[tZ.hBiT@ߚ߁PHO瓢jHRGf^+I2>xYsN `70!( O<#1QWRֽ'F /EC29(/y8B}v\=.JXp~'v7CF#a,y6-3(4v h}wP".(X>i&XdS+BA) nlq-(Xn$jZxF5yk/v}2 r""XpepexXik(%cX=ƪUʟ2&tY g;طpcnTYr (ibq̵!#CA\:dL9ꩴE\āNt,sc3]Ա+p % NrPJwK/|Joq`ވhDah"~Tq`*MzUNz3}7dnJ1 w8p?_NOZg#z |2y ! D=$KAAu(cLȊgx7c1o?A [&/$4$"i1TkU!ãD|M볌ڐLSYg827S [&|xJlp'}v^U~(*g$}"Cu$*b|d9~!C?/Nbe">r(nfdn_jC&UlZD+.kہc:*5LY: pIX6~O5P񒲕=T/.f^CwLb>yFB,ܫg\ M2}{2_#Ԝ.EׂJ O%czJpER|#t Z&9ϜP>ޕbXi\+Q\E I!ew<]RH]WٯT*urP*k'|݌8(QPqk ^m8k )bԈ<->EJuM$EҘQ+!e]46Q5Y pWg%;ۋβ/FHZ*s"ZBٴϤԩ([H m%&|VD}< R-ݟ \ l~/JEN|/ݰʊRItb!V_荹~k>UϚN%W6J_KgaӨ^VwjՀ۵RpY)ͰoOt&iR*[5X]`i;\j'f붸y̗:s4Ɣ>ǀ>^;3Shh;=o˺_ >WM#t-^s2D|HѰNo2AUy@jZ\v n{'l@zFYjc(ӡ56QFhՀ@54Z ;pgfۺWZlj>S/$E^]4Z39l˺h.2l )tmpc1ǧu|TZivFJՖ]^n4)mU*wAYr$z?x~\ z9n *Mϟ6v8&5t85}MsX= :^HB .DcܼHk۴ rX1/@ 1Aݽ8l`@G60hjf!N:& z+ *V#4o`gh`b8#K^z]J2+?Y A/;= +jw:x#8I$7m`bCClv9/%pdػDo"s-ȑpOkJuCSC30!Dendstream endobj 162 0 obj 4369 endobj 166 0 obj <> stream x\I]bٻlz$ur*"feXvwIwt%~ݶ"XXwtO?XW,7tojw~ךvҗ| 3+W;O:K\%u=5N;O{1K=cpYם1ݝ6v{B)۝p9I溧'CcLwaZH]ØgF.@Z۽M+$b5~IUH Ӷ;H*"y1_ͣƕ1mwWa0mN@ijj\.`t$9 !g{#VBۯIs`xq ̩I:"#>1tO־ KR{=p{ĝ"JGpf Z2TD\zip-V{>f˽Uݛ k41*#eSShE(ڐ^1%DڳvX5"YXٓ"LD #_CY\QSZ#+b]Z54iVNNmGDW-phBnd 3ʳu|K>HU.[ybG3RR"HChuaR`4)ܠIK;<șkOARJrA^v0;,?ي6cG{:=KY6dW8cNG"ZŴ dRUqr ;= #]P$rSF&29ZѓHEfC^h6?P֡898R\aJ+uYJK0Ǽ$쎮*^$3AM"UOnӆؐE8!*0)J&&IRq)R.Ȼ?<e{?GXQYqZ)s,2a5%~7Χkb#S42)u@{S_5:o|]?oYۅ~!Md7uIr#fqj8Tl?LSVI/  9`ߥybOXHd&L[}#"z>~4SZJ\$&R9>7sLFُcxA+KA_`fH3vZ<~]ڣ\.'sfnWigXQ34uIv@QFRoDqc&TẌ"$zI¸Eƞ>[?گ3E74ihSWB47 ]&>GS7p &!͌f!G!JZr}/l5slR)x:k(%p qصya9!-3}ג`sz7dk*ڗ-M^τ4sfp&vAqΓkf\=l ~'3뾝%X2i`=UGzNzGES4,zl- Xğ":r `)? 4׍o7V6ҼiLqL~lJ-z5XsӦILn]`Me-S/w沱|S/ۮD[{vJ)A, 3 XE60a92(v1] n^7Q'KczÄY /xi<'uW:oT[D~ㇶ5#kSw_E[Jhb;L Rr4IGi3C?E4F$G+a0Ƒ]%\bblH!45dTFk_Lգbb mh+'9xˍrD6brEPl6ǩӉ+ХM<6may2ͨJ#[N$.D8rHQgEEwY[\Tb:Is.#Dd *LR@TrqIAcfkgp/}XȽv:9jIH6RMy05aU&I5/%|bt>o// Vy]L7@ ^`jX7w")`XWCO]Qn Ѹn,>=n,u:Mb[[a.߄F.9GM@r<%빱^,^%}}*g@T ı Nu&qfm:.geHH:~ס # O[KxuZ_6C1T>{E^Xpժ3 { Q1FY[8/A{,[w<>lRӋo h <ݣtKMf^EP{Wtw>[Dg+Ewj:ga%ž4rqK[$h^}ǣR=FnEG iMybG]ď3juNL-+*wEiVX2)Ne*,][އ"?:rACy(!X8UF*LSeo$LՁCmfC*c6fx%3Ո5w~;EM*x"M#/Raۋ+AVNܷ([<|Rz-;gF~9t,,e"+M|+ET LEũ9+aIS_ZA>> ӋH /҆pY,6'ɍBOQc1c2R SΜ90PBdVg|l@OuC,YM0Ze*d-GP`;TK8bo8#*so0v]o1䧞ϒW*.ͫ}m̶]ȶжmжsn mmv]҆ rR̆;[Jmc4ay>l} /_mkm뎴dmmkmV6v VUm3alB8rM'Zsu}z7 4Vd.lPhfͽ,ڟ"AoUF,s/.ggfyQX1h?#(\c(սy.-i4FiXlC"fc )@h*[MbMSoyPxV-rXPv#z+jSg g Ӈ)Fn55,/h>*\Γ g7bpS3|hfendstream endobj 167 0 obj 3720 endobj 171 0 obj <> stream x\I]uNyɝ^=eգ X"RɶܩJJтfR8iÇ{ۯDJT\wypىAD7Ń>bw2{b' . 9v'gH QȝWz^N^; 2,B {2`HV|+AKB%?|0u|Q#CB#Ác`03Ju E|*!xr붫6`ݥڳ.W7h@7 x>w#Aߟ4_-#^+^qK!Dw׌ؼ NJ԰nF5ohd/:W=.o-Is\vtDV&c0Uh9򏦁~o3EW2Abȗ]s& !'Qa,a2 4_s)2UɨQ3[Nf.SFHP m wxeeddyeHIqֲz@4(]G2?.{ Žl|5p`#Ÿu`8ۅyg~ d7\0vwmtM4#+@2zYܒn ''h}ґ{Y'TOsգ7kΛa?wH4ÂCϧ=Y@lO zgE!(>msxTW+Øxd!V]L3i%yJ Q1yy'Dir$6/ MC}d`*N $X^3JN*)+}٧icoY!<%aF<ιyNXH7^=[ |i^/&˹xp f¼C̥Q(^m|H%nZ{J z;A2'TIB)"wjB%IB84|A @j4 睗yYWT\{x(5CƋ40M1fLa<>2L5X(kZ5+N5̘҉PazrzqW)J9v  . y֑# {i9\ 6 @fBmE%3jm@$DfyӉ8SJ3gBvR̄80:Ҋu5oLV =&ъCaÊ҃"< heYS  =KÈ1^Vg2G+ f O㤔_,/Qaf(R3];IAcfŊ`\D H?hqZ@@O0Kcol7oKfp="5ʮM6f譴+.E$ ‰Zg-.jhBxJu1T&C} D G-i yc{x !e4d uH &@JlR-OJ_ nBy6X|'& n y#&$T ۨ ITdAԞ:M" G-P.!w2"SVIE&&-b*20 'KD?$Jc#_Ty2tҡ59)A팚Hhrso,pAS}Aҭ}Lң9סMuG39Kn⛄a $EmzdkB0BP|Jw|z; $jd#ߢciLIˉuZEVtH0TVf\lt6fU֒V~0O˖*InuA$wI{RVWOFgNn][^se*בIvjT qU~uXWgvĹr4J XDiz1 ㎀]:X+y\v[FҞ[+~Fk#\%Жc?S6ZdwlϝfŪM>BV;1U^0աZƖQVtJ-[J*6ef;?c&( z/r!h7\$yY$w5)|PeG!T]꥜89vlo-R%ßYF)%1DOy,g+A8۫Slnv\|ɔy%WuYLID^c,6zӑC RvRuR+%  27n6~h}M?oi^{=6t4YGɀF8b-ɩ՝ցKl,+gGļ=&l0dh3Nω=K6`9Zhp\-jÊ欚#3ֶA̞(1zqYXqb[%ꆳ}4/biE{?\UnJ-QV8?\ӳUNcUbPO=SqX.y/X&ƌ)YpnwdY;%~n:.L1U3µcjhnҕNIrjQIVR>} Jǔ qSpsPFe@9R|^?Y\5Vו̳Vyikؓ[kySyW=gXNꪞ(*Ass$~ҷl2:TÃ$Әlf4.K#sc Y wBtR7Cd4:*K ~6q@:br9K?x?D['lشG<;"mdA⛾"?ORʤ_dyXY:&\=wѨ> gKEzN`歪[{#R4#jd3HAU m#ow-҆+|M^]v;l: 83x=EDҽo ˱s,PvWz dtQzG#$|,J{>ƔT/L75H#],X1' ) O]p.=Mj]☷50[=Q\v779s'-veo}*Dxn.PM`ӪN4SDSƬ!Fe>;" eإJͭ۵Ӿ ~' ?iQ驞*;{zeqgu\?4doQV</4:tESÙAn˘q7Q1 7,Ysrey! Hn4u;0T[on#U~|tQo^uxĘfuᲝGpKO V^l~GY!mh bA]Y- zwrܒ6q~'fPlcs6ҷVQja$8AܔNxʌ2)3sZJeן(hZ,m}w^Ax2WP*vԓaFFMqCYaK`j3Qnk Q¤|a٧nmOXC,>X~X^ y/Y [0eQzPN ~x4Bnc!rD)@bwWEY#6u潱3m//N2>dcc Wv#,#-37-\.Ⱦn]~Pf??FmG\/hk henm42ovz\X)QoE Icu-Ʒx鉞;}O:5vdP~1nRGWcU=v^_py{|!o,>")4wq"~nV.eשWJ N^~onZ[_qpJ*]}$4 %endstream endobj 172 0 obj 4465 endobj 178 0 obj <> stream x\Kt[9$85mnvG%.A `75C_X=GV8dXU,D&t7fqt%G[lI;@V*2;[͛r!eB.3a֏ȔVy/_5yYu = -jiS-Lk)=6R**e.{!#D;߲lyi+)bg2``OK1R= h?mK3? !?S== !}n 9AI4VakT=FayeO2ݲ[VˀCt(O #r<U";ľY-t20U;pazB%.3e^?v8LaR9fɣ".ST@okIqAop,eB8ʅ[Q=8A?'S#ob$b^r( g'GOv*cֿ4!SٟdOd^zkkx^CݑÆY#{X s໘r\Gz6d]$ϑ1?@.dsq=%B^l`"N{ zp*7/ۃʒe?>W,t5yH7~_"bD!H=@{j{|&*R}TqO_|*^(6 67aJTᔷ㓐ALE9g5sXc&6ỸP ``ߤWo5jQ0hpz=M}rE_Oo̔z9>=8.x,=L ({Kb{i"=Y']Ql>+9e,V'{08gC/AM`\wQ8re8Pz%cSS ۄHiL-WyѸSgUn:b[lֳR||Җ/Ԃ."}x dZ/%XB]#uưvF#>c-ٷ+AӃLcAґ MjY1C,ҍӌ$iWa!JT:wCCeep ;aC),3?F;?S^зUЛi( PQ qql^MYLDz$#AtwrHPLXI0SK~P ^2󬢲 >qhv?IoXODhgeor}&޸4LI2s3E/qa)nHzUdyDX"l,UaԥecD\ {-JKhuQXPBVX76˿ -"_VY.>ɢV?:e) de):B3J)dr޳U^eVԺO& TBf x7?9Pw;x^~C^S8v+rǴU)UE_dLUTzS#:-.Q^$UƫܘLRdJNhgv|4*˝ ͍-KcHS J^W;+x':{NrEiuQ/ wc*!C1^:\ǭ ~4*rr|pnٟ*o-ղkFdֲGC~dB<\9=mr!lm|w2s` G.qH8xlTpBwm:5N<1kL4n>YZSٶiToeofH)nd>~>nI&qȈ2<͕I_P은P'է9AMZYy03t+xJE8سcf5{Z6 H($6-ޅrڅm屯|3Y[*ztى@%Ȕfmk, o)-&ZӺӑ)$ ,iH~B)8 __q&xN$pBT\F }T4%GwvToB\.>fF#&@FS vv3̤Q9 ì!٣Ke\~F@L֤ v6kE "iw wy LPT@0РBm(&M2ހ(7_\E^w;ĩ2LP*+} 6N}Ǔ~Л!a wጘ4gMΥqrZSܣ'f smGdts"&jp&3ܒA8lyKs(2);7%\ H+wLO(DӼ N} > stream x\s^G8ƕ3/BPpȒ%dE(wz7ۧrrxާ>` ?`'=x}~<;8s/⠭u!v<8H괄3ӉDv OӋe21ci%Td C蘶F|4V}%]:p9I&iRqv 7E~(4[LdFH⊘Ζ^s$۴șo/-P{!ݹ( W j[,9[?$t9 EURej1'|5hbp]+&kN.jCk,? N=H#osHǣX|hb|anRXM _%<V1d՚OnA*5&V=ګRvqV%E1nj{JDkTw- |2nUrsB1>m[yR-V6 i'Is[QQN>Tn#M `L" JNSHbxۡK(V~Y'<'%nԇ|n缡 .^)-} 9#-#k3(WN  eJG9R%L)Ic5AÉцD#pSEO"gVAAM(XW6*GGre0C !)B9y?TPQS)&fBWLr)L%Nېݻ4ž8\:$zl=8(f#y"ii#~Dlw?aФ9YD'\ӞȜe!2'qӼ_k?\D~`9@&;<\L@ >pkZfFt($a~@4~@ы7 :Y&LՑ@`򠂹Hw}ݤ[e$r; {ܻ_*I$v]L 77x3aLRLG"LϢ4?4L2!1(&Di@9(> Az2 ?p |u:UJsm*v>?y;IՄ J_IwCbE%mFeϞݾ{2SnI/zH+ n^~o7w ,QPb>H Dh?@ &uO5h\UB5دXUe|D&BuvxJC-W,j,0v~iXx>2jB,N9qkJaAhB}㫲 2 <#f~'Hd|%]/+LDUx|e:/zR7 _uz%pd<+gsS)]$|ܩY̛ͱ?9dt ˽-Io{,TPU6u*JFdܣJiuu7Fc\ }l#z_Y3гDr"7\d mgІ)x`>QC GJtR6*@AI4mc/E6YW~ϖc՞0Z v;yf[ӵ֙D ^=I?L,b e};Sdls`YGcb$`3DcHB`9{0uwkfnbm]32i#N #I}m(ى1a)q]bB-o|-g$afQ pzD!*)ju:;e6 uypѮ2ktdt|n?[Nb.Ԡ-g6Nmө:ܢ6[8U(^C0czPʉO4Y@*uӏiGҵOeV_SILc 3o x㙼($uBC]zNY6$~DhInsy4Q zJn&vXrѳ0=hF D>ҭ@J;A:?tntwRgF1e un*nȔ#Ӷ7C<[r'sگLRe[=yn-0(zSj_^×}`t6C369c4G_'ޤZ B7szū㵁bw盾״G|뗪'"{.Z}X~fCX/;wiKi8@-uu‡xc+/,΃vV0f rF'dtW1ƧMl5)b wA#'ucZisA=h-6oi^%,֧ Eߦgue:s~i;E[NyO}&Uu +^-wR[-,=:;*!dv[x\o.XM<L]bx0K]O"Yho'-j~e[mM)%t0rq#<o $@t@uG6 kz}>}ZIEmjO#~Ԩ٠2x&^Z&rҖ^ŝIX)˚Hݩ!  V?0[e'YC;Th2{Z5湙Lo;7Uo@֕ e-vM_L?I"Re}iDn>H?ew߆ao?#/Dendstream endobj 184 0 obj 4518 endobj 188 0 obj <> stream xZ[o5x7h\ @*<>I7mIҒm s|f7iЉrn߹ؿ \,)ζ Q-~_Hc1wrQ|-ڲkϔ.nFR4X_,-_D*^ߺSJ_3s_S5]~8K)A=?V3eU7I]-)/{IT~n!M] ,M] UO?KL[%t1Ql(2~rl%kYV㋲3Zm`Kd;+Tð_K¢SZĿ&eSWR  )04OEn>Z 6u8|Xݳ2/=Of ~5d-Fid˸iX#qx?` )/֟=JB|F?(7YO fR2p8gAM"`?GaVw$bУ%\HAoF/;LƲupu΃@۸).,RL&Wz_O]™'T|pKr'.FU>U91Q?a x}μ3:qm4\fNNϷ&nusܨ DL9@Ž8-~vl8 PH.m 5Ѕ 1=͠bx70e9`V &a ~d .IL/GCd[Va*Sun@0n8[Ui姢),{,m*$|W6dG5Hۺ WTK,xSnVFq$qYƹ$)8Gw;`k'̴ HKu$bx-))dgZ'pv6d7,D8\>aSAYwɫY9? <9&0kV L ×QL k'@EԢ*ocH_$ sҎLdaq@B9_s \Q|; tD$Zm(w '@-IyPx>]o?!uwF r *pݳsFlLKs1v7QX xYLe0IBj>)88ȸW=H"#퓆čkd3QH5&ӍTz:<OTX[y.?J4䤬,.M-R4SpVwe'̸lYunU?;Cw/0nKjK[Sdž;5u:^4t٧`XmG6y >ؐ+G7@0d/7i 䏶?$=T )۔@aH{ hccҭ2l["Ig&՞zKS)v; ׁ`ذl꩙#hd0hkFl)>ɻ,Hlq}?`?QtHڮ vx4+LSH˹^Tn#oJ ^$[FxZ|<;09l= 7,y cI|UF5a^%7tyKA&#)̿1gK {xiFK6\aw`> stream x}ϯ7rw5|y赿MC #9(@~'ɚQ֛ {S?bwJ].X"r:t}|N_PF9tʙtz9y=1-_XO LqySCc|ĉy}-:{9O51*z.qnM˾X7ǯǧlbO^IS<Ts?hO>//B\}8s$c> Ků>\a^c+ }*Q9z*lTb6REe91`AEpMR3ډ5c ä.TOI<&$C*݀-sHEUBͲGdqzo_/ic4_="aƬa L;3MSG*A Q20Xu2A/5ZK0&QL#pzOC-Ar*4*d0ai;RZFA`٤0kcccY@mM[4(Ba\PL0ZI&ujIa&qtK:Rg2k;U6)T`Jʁtp)tSn!ՆZ"D *OZ:eBl0-UJL(%Ä.a%Iƽbu&QL)îgd@ܚLas- r/#ٶ`merdU6eP)2Ђ5K4g+'af a >ΙꉲhDF SEK(stbTQ#ڌRŔR9zn9aɡI`q@VQD)a&up ZB9$W!0JF1T^f; K7yt+K7Gr0ױt..ZBx(LJeGMPoGLL?z?BTp (01 3h12Ycy `Sde j|)Rc* #iQo/Z(P:b%eAЛ hw%X1jXj6v'&[?LTN`&6o &֨8L@ `1O7\Ia&qtK!W-}d"WNIOFN3,zVJNh'i *K5X>YzAA<S]_JVz̟CU:/0 Fa]ʹF9:ٹ`r8Wrut$*]mnkbhǾIVlT-‹"J)oTVkq8XeBQsC YX\J&hF4GCu4r0X8-2/Vs&N!b- v-DUr h8D4^K` ީe`R'K;V:3MٌO$`{G}@4SN p~J"R"p oAL;ǨS2 j'چq9Rؿ$Jc[ )EshyL9hƫ4]]y t Er%W&&P-c:F (LJiRu47X 4G% b9sLw1\ ;&hv%ŊOw-W_K&e{KFX Htw2aƇF1Vb]O,Z JXJ1^+=,ޣ.];+裂Zp|Sf c,uxYs86T9&^D']n59(L"*]-L&&bK|TlbT,c`b[ K1(aWbSu>>kĭSmԵzv-%R !ÝhvM)rRkEa:AM ^E!`c Frq(CJXtr+]M̈́,捕k{ ;&J>9Lx 4lhH!mRaßX!w,Ɵ{=0<]gwNYt=FaKM~R=%h $ ViRjQ̋2 ۊš6d!RkQ`Sb˼tZ{Nm̼*ˋ.(Rx}]:-rce]p+bS8)!Qo׶QCS~kId[fn6O)F5Oء!8q38C ZwJgZI Pxqr$}O;sQk5i; t݁PS9.te .o9߭JZyk.Q=tT : ׄ:&F뫪頎t;n@y^!+RNvqiN%4JpDa#x8"5vI140aqw ɪ 5-Š+ 4=pȖE䓗w_<7Tyk';5Yi|zI@d|sy"q>IJX<d ;'aQwv*Ky MŮB+"OIf-Z$; pzecoh҆N6jNG9!/>IHҊT2!"(O< y"~PݧkҜ8rң6AvT&JR ^>!P_S'93Buzȣ^"3ZwqU)2 Y{> 2NWG L[6W˙@s}Mf5Z[&ÃFE#!|p|dDG!h T#'ha44ueh]%™W\D+Cg%DOLC86z7\.'ko#PP,ۀd9ö5yYz DH3 ouB:dXw~d鄛 e 4KFȐhriYon"I98g{"h KyVq;G RE0 [2251@Ґ̽@&rTBL>O0ۦ2c`TpfjyG 1۶~sz؇)RC0r`$=2Gƾrڰ+\OUGŏ`;JrV !P*+?A5_) Fhg^8D< 2r P/Ik#hZB9L.,:*F(LHekEIY<9sQM7r %qٖ\5PB-hfrä*+єZ`[F1eFT{:trN A|?p@`jCr\5K 0aKa ZSP%TEaR*](r@CSځ8 M81 N;% ى'A4P%TI2Nk4:%,ȣ3kU^@Gn22" HMh 0 `az'NC`0)&Jiv=Ċ=F$ eYy^Xg=p`JM@0yCO*؈yCRBL#2*] -Td/pн:\y!|[(P r6a-r:Bp#sk] Jcz6|f`SD+!H ˂'`K O{Q(f|uLqSsAU(`27DV~a-0T[ F^b`0EK(y>5)LzP%71,)kj o|r~{40Wx0A hk@`0 &I( vX8#g1x A@R&?_'J!a ܚ 4Wqd@`"/>Պ>uc660 8P %W^AQ%]J0 LdeF]f>`RĨ+a0ԑ1 X2j ]N%]!::T r+]֍2%DٓdNYLLt.a%W׳0)ras9qF3^9:6^|׍v7F]:%l+B`4Uecm rX\M 'uhgLbN~ ">"b1MkE1OqR6!TsqIK2IBlq>k ț\`Zm.,_CT aAa1$U#l&7;qoDv*,qVlrEw`i(.#T?rF`q2r/T'1 Sȼn gO2h>>n1!*~??pf<",#?Jqiw%x GkhޢыEo69 }Z2_s\ud0)r,f4_4XqӁ% 74#8d`pdT Qd0)2ص-i;1 3m@W92 bX0"g' s\0P⏲n0 LFek!}Es'' ~&<1~+"蛁`\4INQ\!d4g<T=FB!pAq&Ѣ9j HbO& [hbBW瓫C`f(LJ!ԃ,/]ʷCWvNp vy08{(h*Eo~._XK KJJb41qSB" #Q\:NjOY 3fcgl^4ȎÄ-0Ay*C"bS R*]jOa%0U68afC,@/[kg$|X.|~[ vET\zްeb/`\5M7; . Nb(5Q:ق 5Kzb*RwF{8#OO Q%ÄO!K4q!_JaR] l138XI8m*03Ȏ{R0L 6wQd0)2ص^K/(]YӞ8@0';OFF)Ec`!\kUj-]֧F`RaSA?;*s)X$.Η Ôc %C\R :a ߲1c(Ru>䒖p~۵7XژR(X5Lе14 VO%Bh v-D`;~fބ;˝ BFra˹aȒH ;!0/*QaCtPv<OE̻ϤOIp|RFSJ( 3բtU;- A7*?81w"J|Nafo)a&\40AK(NC`0)&Iv=DE9nn/ W@Uv=̮R5EV1N|hUmŔY*!ulSںv>:֔: rLw\g +!^~F+&U]OW֓tM.>IYfny*YC.^e"i-.iC\ڍjq1re!y}rӵ)]~c[ |s]0_U]gh4C+)euqIU"tو,UMw琈W9;$b.4J^]S\oe/bl 2[hw.4SbLbeG\w=}-{:1/Ρ2dO&'y@+緪L 8Fƅ!J3fy" ͮb>[9;H2ܢrBND$Wt#aqr}{_uwithbJ|EzU/@..S2,ߢk4dU $ȩ-6)6d P EUnKYOG?UV=2ӂ ?w+-;4( E\]ͤ\%jw`IhmijH Ү1IM:~* _D]M"M#ř1fZp\ݴibi A]G&*ӚnVԁ'0?m¯C 6qt󩸡45&y;}$3 QgQh wϬp]S㻖-rw@A@[fJٽX=KR4C# ROYj dXj B+}>Y ZX~}|͘{>^%U%JshI~IH$Տ4Gm4`^_U}}룈K@<$mq{g\a/F߆oVeZ&qщ`iJ/cMhJ[S0*K_KeCsފLwZª@bC,-j_,]F7)tᨰc׋vUAݩJA cf)<ӻW;F>RտM>uwj -yjkOUH+kg'ښ,ڲ=_r=gfňZ~F3o$$wS-r qLן/ڂn򄏴x7w!z+J׌c2=oD.lfyNSzY0VD>k&)Ǡ5Knϝ/9ֹDٶzb׬ryk$~-~oT"96Q'a9…{קT8MUՄJrU9$r vIh $ɏ:@QqG0HSW9mls";\3^s)e64Nuu/糣w>+:5؍>J9[}D$r xmw_ѕ7yfl-Qiuuu<8+ H~틾pG ^w,9ꛊAG^m&/boQ7o*1+ ?_+yF+?'O Z GyDLt\%=MRMt[;gH7z,bɜ跫g8ږ "eTh#tjGy%`lc.ArG <ijnD>~QZzputiNǯU_% AHZNݤԦi7m@iO_|Mʦ -VV[=r–?. ;ܛݚ?7H2 ?n,JynC=*XKgk}iAr_n4^9EjA2vk<_y/Տ>6?;h2V?rOUVg#?^X6#z۵s{zgճF.w%NDL2Vh0l`xfm/˴4~ z_,ĴF@j\B1ƏHY s]*ڧzs=[&'1G[dkާ;6~4o}kEeIysyȅ 3%qB 'vZo!J,ov fß> r7Z $LY c[Ӻl3/X$p%^D&Sݩw"Vchͅ14"ci> )CB?.򃷤j(UC|W(`úP cnߡ{ÊO6R5ZgႣ gx^m"݊37Ŧ`b`FyGpFF ŸBMEeFJR 'Ol0 }gcqHǫI8?sX?u̐i\ Ka֖n+||Q,q1U,v; <`rVSɉ_?Xc#YTdWr~wTwWovoNݘ}>b12ۼtQ,\l]38!Zހӧzy,"[>S3ÿvoy^%Kt_\%ͺC}ilK|{U1nWZOp=,J=p :OK P3esp49^2`ޏ/?^k>G>WG䚆GdiĶE]We}?IC9s/>x'ؐx>'poY-~`H\6(»$Μrd4nxGO[s4 _pC^$<#>.ӬR9kbZv%L~6~0wcg{mpe/Z\T2W_?\w|55 sHԳaC80Pu 8x#ؘ2lGTFca 1ok=d!=v߈laċܳ]}~(?Ct|_B`,ݳgջpo'ki rݷj G!'mߪm(I|g2\DMpvށSܷ %v߭x+faYX~a.W ~=hKMgﵺLr`Ϲ%<~T8/yiygN{b~K1ϮJ)ԳqT2>?'c;iЊ}p-Ld& ms1Ϥ"e-(d0i,Ƨ'6)߈FGW <3vpH!EG_J =4(vO%~oj?@J3B0Ȩ/ ij0?I#k5Ǽ ȿ!7Fy)>4̙ x_9~qLÅ9)y˟ّ0!8ď/>O'8 qfm.?Z[oD*_c^N7ls%~3'ɯ}IUv3-\PfD  kʭ2#ݴy&(q޹܈> stream x\KoԮۮ. ߏ "9^$d -ǒA{3&v/L!?CC~6 ߏ|<8`'?&$ 6Nҗ|õ+0Y/p/k#>r=Q1 ziB,po Cip6x-y{Ay}ZvKGZ1; wVvvQݠٛG 2DȘ^RDN[w*w[;' `Ԋp͡S֞NjK΁":b{ ɐ0*\Y!aJ 6A_s.GL8wN ҈N3nG oU.2\|0= # 2tB5g%}"hÜ J9eL+j[MAs^*OC-^ls*C'I 崣t#\ؽgԣ!"ݤj֎n$G1*ƧsT'% l,f<4wqDXuG堘%U %ѣd>l?h#Pqә\R8³ ˸E6mƷ? )ah7Re{JȲ/!js#m!o)qr%"+=N=(YWlq &Ǖ.%KۉkUB~*ϹG*j>WCk,q6RkЕR\e\Hr`?ʓTr%b4Ӛi󈕒mnҜrl,5pgKl>XfGqxWuE6.CY:,_4ύ"r]?O0&/FI_ E^uvZtEݼUі4/"iqHdZlX h7NS- ZZhOd,B?ƊFR F75-皜 C-2֜N |?W$O/̗Pn*&nXYvUT'hC]jK#WhQQQ7%`m,b֡2輓|W e%Tݨ(kP!qlļgFSl4:Ѹs uVXDmc!m,3e,Q ζ|~c5U09wWhKhxr3BXBX1ϗPݾudٚGDsi#ͨbxu@{k8Rhk2m :7ks]gB{4mچYP>HK9wvv3js{cB56;w +u[n׃2v ] g^xcޱnWU;-u1YC51X;Vw̺CVgl53uǦ\qĦ<׾ tA Y"(ou&E&kAEdkS4L`tj+ր;Wq45':V!a$R̀S&$R4#u uoU)_&+4kSa0J4`6L P" uhmp3{Y'4<,&%uTh"M– 5N20gOOkeX"efiU4^|O9F F&n& 1>kSmKE2)LI*M~U5 9}vdN3Fme xqA~ ӷS{w߻+e\]E,֣5dU'9k;wkkxwk|뚗ܜ0) KDo6lL5M!ϓS4rWڃ$sMvgbF$œLje9 zF:=ϕ{lHa~e;&;RwӹhjQmꓤ7תejJD"-bJ'¨bēH$ƶc0_@)lxgA9lbߠH ΌvXX%rt Hadǘ?ǞyW6>/2OҦIeV("ޓ(A1Գ( 4|4Wsb |lʂO"9m(2ӤM}H(dcmۯq5VMdx;UԲ̍GY n~v PLQ~TS W]buC!"qof;Nkۓ(^/r | KƄO.+Opg6< Ez贛+%``s~@d;?Q4FP.KУTOɻaF9c?ܦ> ;P5W fv>2ȗsqn1cEe>G7O_6s4r3QŝG&[QtW8gl> stream x\Ks9=u0(v%b'<'cqߔTOr 88 T*_R2?F|nur׮N~釫@oʯ_/F(rR5S7۶Z*yl03cudibA0J+`0~4[?03?[J4V[dy a,F /0~:s.y|0Or)3}tz=Njk.aߍC,F0 E$f#\ O_9#d#B[j W/a}ܸB`W 5Hf@>kbRQ)w]#Ȉ./⏆pƈe<^A{X[#VېқJ8)ڦx!ʭlDHhK×GqZV~f+5dm"6V>KC4Fg;Oh4x3fbc}U"n#i6HSНzӇui$lNK>rR@ڢ#:ȯB4F#n;哴JKĚ8[!jN"FeֹG'LZN@G4(&Ѵ&%"gSI@}_CxIgA"Tެ IWZp RA /b6L1dK6z X!e!5^He:{+7a rebFHDQ1#pBC,}Ω6dh;dOL3Tg!0V5ڽօFN*-y]r?)xJR>J\wRZ &=vۼnTicj4+864Ksht(,PKuB^>;-:i,9]fiTԴ5\wVGW%pN! ~{%A2l2Y5:3K+Mzj@tc#IchOdWl\sY#~ZL4ooB/+]9=ISd^mw%_& d6ȯ8%r~za~7ߠ,?Ԟ`gwgw|Ryr ` 'mL[;xZ<3^> ƛu\͌ثCN \Rl8tvLi\t~,-0PD3Lyc4ӊ䑃H^?{6fM ?=l~՞xv D`ܫ0:Tvp}ۿҫ<))97Rtbb:~-ڴÏ*F]X5Sz&L.mpp/ڒ+8 {yc̲ &]9<ѭs?EG2d\AY% =XmtΔHfdS/qKqhka=-;Cx혼U$»>< jC/=f /K+&_[a2wk O9p\jgTR6VQh9YSIJIպzzG+.zAcl >oq]*k*Zro8Êe ?:PW}:ޏbN5ݵx|ɂ%!T\TJ2;$'!a}'[dį yǬr4I $}[RGTw҂'pwX0).!*Nrן&pwLqeQ[wh?ti0S)hnS8eilgR%8A ,렉Wӗs3rOۧ; d۹{恔["?(h꧋Y"#p'\>^pǎ,CgNC>8hN cԵV{t" zGq> stream x]K]q.ܱ۬8G8-`-#AbY0ZP!g !eQ׹ ZY]D D?r'/$/O=uO@)`EZMB!2Ԯ9)BM" C<F䌵҉+,i^5gr8 75kfgԵF V9& YA =SSѵҏrVe+%5HXDTe6qhiR> (~NojaϤ5Qm .}dX`+d @k鑸)~09EDAfĥhF''!e/LV3&;"B& 7 o,VL$e] dݬtlWgg )(ԉǼ 4AG]!uw8 y{"yA$ z!1Ժ+G,HXϙΰ1̿[@c^ 'Uk-̞_m/) G{ĒT۞%`\>L"fuZNy~>"&QwDJ7B􁔱m]N7uCFZ>$ -"ɼS"ܸ7CU@1yg@˫ݥ=< M88”@:o~H2 bveDTC:CB1.݈Ҏ %m( %E%zhy H  HRC8q q(ʻ\aak?X2vYg\{Jkp&ڜus.Kb:GiDRUJ7[D328zʝCn,~܎u6J1!jg{3-Sd)!h5d񋴆S0\T;2y u@PSjjҥSm#`Q"d'4D ;ƃv$%ܼ\yYҖo8 -Esd٬2ᕯ~S%ޔ+1q qz<5Nz+Qi0 'MX.8&8׷xy b)^gО/qb—7+Ie[SslY8e`)I FO` wǮ"ҙKh@Ma " -4e\}`0d9G5@#+:.,n$IZ" .1$.kfL Y`3=^K*^@Bxrv!M&0c`Σ,.Y$1 ^LwrkVl鈎fh`Z:y%rlsC|{q1кWM_=(^l3N ؕ mrL8]>@_gYP(hhP6y5fB%>9: "frFRK~Jz<}?M+{=i)a%燽{d={|GBu ^\Oi~$ r"^E.<If* .5Rꦷ iRqͲG/'C8˕cv歑 'K8&z LJYS t8*GH?z7wco*20Gޙ MM<Ko0&{ئrM  fxM R X;iIH?uv6:b/B EF} o+anG&Ȟ+G1Μ@1!yI5n+*Mլ>Orл;8>-uo軕ӯj/EN7ҚYޭ&|MCL 7oJ5%歉,Y\9s-MLP :wÀ?9@k[ W>ftmpm P}{tk{ic,CպG+apddyFd.{i/*9c#dnCXx|^i 't9Y:YZbؘAsV23u_OÉTx&4G81YES(+^}!·ǨUz+H"3]:#J *v=6WN7tJF7ڶf{Wd~0=[)nปdHQ.urX R(/HZ(a$;<(n^D7);۩hWqָR_vY%hx5[^Ƭ" FXMuϪS&v umee-q^Ĩ8j~c$D~f˴!{|BLآ"-LZTz;Jү?*5%֒OFBK5s*BBYzs~f]K~T*RsT3'pL"eڙKH,cN +l$W Mϱڮ\4 OG%DofHQGELQk|O^;fQ-GK4}F1J&_wWSG37 }O펉">ni9ȼ9c樼h6y6RNP8Zi2Vt˰^O[He^-z$B)Gc JLxPXM 2yJڪc %xG w{C [Nr5|qnwYJÕy'4YQ#:` ݢE{6R.C${]}/Ys.ɰ^H"]"yQvpZ~~!S;-Y!g+Դ㝆p;uejFyűOpH:@bBZ-CY0q.L6s/ـ go,0M" aP20(ְpb1O~l)*">Q(nGndэ00f"qH~]^X 7Hd.32Q+L'laY%›;8/gf'y]f3yT!xʄίYf?IT]bewv@mu^Ϲj,ڠ]qޣ &H!vzv+pYHe{_&zs䱗glG% ^rHgLoXݽS[Y.9PcX:3]!= ;pȀ=}EwŸP4Ӊ5뵮s(c{Y5YBA[eoFsTJl>-=7g5Q齥gK-N[' ~V0<.SR ͕ۘC|wdZlڀYMf{.5Vq5ZR$fƿ>TCc)ށ_uEϣ8NC'So<2C+ɘ*Yh4PC[%; 44; T(5 m{684\qf)wt}v>X亥j) hrs!$~7 7vK+k1W]wdb lUΘCjrL6*9*>@BO#j|y$Ƃm'x^QrPͅ XxS$OB?hEnMHϫIp[~QCyaMHl=joMɕ7LMhT݂/3->ӳySMZTS!Rf?ԪKi?xz<gO'wl͈endstream endobj 210 0 obj 5910 endobj 214 0 obj <> stream x\o7^$$ Mߏ ;9l[ևز-K&}d?~dI`1WMͪb|,&y,ҿ'o?:Ϗ~>'opN2):$ 7I폽ғя'OĤZ\g=y a0~s@ F/`s٥Nq# ?g Ϗ`SijG3dlq lSyt#;>uN @vA }\L i~F$I:"Q$L9Gn M2zO$Fc(#iݸWϏ>e g6{9|& N:=sԙApy9ep佩fQ'')A zzgTm&QIthn >` Yp+}aۣn3olUotf͝䶐{b>~"Zƹ<Ϗ[pT| bF~^5qUtŨ ^(pD?z4z[7I)x ;f9GrA%-!g(@$kADSTNF8!R#/2dM>iӮW ~,+p9 ׸t{H ~[ 6k(-Ư s*߅p$dϟ-~é 'R,PI9=jM$| kN*@JA:ilHPLͫ~!<<= M9/, $Xk"[m}(hyu"AI i.m|HK*lBp[ӓz&VP|YX慅L2m-P$yK$#.!_\O3@ `Mt\Hi>LqJyRYmpw@ob-1(VDTYHL#\n;YB<7hbc!8s&QY1z7Оʳ3Cb\-*RRÎ1I(bE@E]PY)xڔgi UY\ +U&<:m#<^{^w_Z;FK LLY~&er9.AǙ"FŘ29e-6EHR+^lKda,t{|;!Rᦑ1A FpP۹Bdmd<@Ha}"ib Q֞kVWݒi5ᢧp`ŁeDh{g36a;HK2M&c# [ 6މNe+8@/&N_)#DlÜq`af/Ho7 5N'A$ a niHH7[l0vW[hWN~p `Mq_=H/g'NGYA@@DSv^e$/1P?IoT…֐pD[/\ Iac\;15F\>x68Dd O1\ ~8&AFc*e*t̺wtcl֘ 2?92MZF)bGB?70W%̀0#x5#wI[3 ڰzriB=hB\!0޵Sa:`S!]GK#+&-()Ôg,1 ׈!=*ߣXeߧ+{^G4ccgr‘srԮOHw[B*9UqE~,U81wUF圩˯jd`US% kB%cyuL-ń`@y%Z-Ur=-Kk+!+ &<*Q3a,M,yiH gj ǩ *yHH\?]X-W6òu^rć_r%{AQ=}XYh;&_r-(QdI~d2[q$δQ̜QiSgK /tNWr,4x/)1O"d?q]n04RB5X$)2)O6}W sH?+T@HRaJ,Vnɿ0W?`'ZM)|;9z_uyi VZG΋iR1n{X O2DAIp^(GF'7~!dVFtgdle5 'QOnNɀMCt:+́ζmJS?\~~'x#]۱?-Mi \iG0ƺQ`*s/+`߿;^8gC1K`7Y<Ǎ[u vп$Ii4N )7۠Vek͈LfDIZB&cE{~˾>h7|75,Em>Wuϔ`.J9&e^]"M̨e_JR"jdLkF*nA1D`sOٌLgGSUŽ: C 35omTm9i3Zp!@|N-X.sr"'5o%7_Ԣ+spO}nّŐ-L0"-<qGw/lEpPJغQB厊k?o(mvUSڐoMXrhۏK쒺OfUʇ_ن3gڹܨ:NC`ӗ.r^l`Rg%SL3y^-a\Wt> ҙ:>ApoTNɥnӺDK]n?LnQijwdeJ@Pm( W~7x ~JtMJw}x@%;[ablV=L)@A Rfٻq GמS׹cMX]%Oux)ߞLUlM 4Vvhi8j|ZLWsٛ U`PAT Z?eN3*.?C~w%_C6--5b}m[|ߦ;ߠֻDDm~cxImHHn n)MXӿ-iendstream endobj 215 0 obj 5119 endobj 219 0 obj <> stream x]o_oЗ}6( 5xI,P$@w@EpؖȖKI !93{e]lyM!y7s;q0?{Wxp"`߳=%0Yك8̠<;:R%/<t`^@|{i3AOI蝨|A\MVx_u>aqX_{?|ZHhk/2[:epla!ۧ 9$v`^By.6vc[4 Ty|guIS;d{hsQx]8̏,:"a%LB_;meȍ 0?D*A[S?tk i~āB-9C!kl"a mT*¥Š1.BDFq""?eEeğr,jQJ&Ai<"#Mrm̫H1ŨⅤ {J|R\ _v@BZ&"Pi"Jn0NX6OXO40zehhڤuqI7RlٖQ4,GgЂ2g8ZH|D\nY YrGnFKַz |'J ) )N{j^5os,7)nW횻ࣵL ?\~W:ԑdvg#}7*ʫpSFN:ʒ_d8SE&'$Z;^$y V \ Gϳl(\& Β~C ?E^hsB|RYsJ6'm 㬢{ {޶9,U@xE(%rFjI7m*u-R 7YAHQI ƜJ ]Hk|ڨ&׊Jς7aC*ꬁc0aI:4 raq:F %13 l+i.g .d,$S~qd/2ףm, U;skth{: ˆ 'j9!/(ap4_,I(뺻_kGT9 9*&@LQ*o/>$>,]³ElVJ,uT|qNaVM{C\ -]=?qd{ʛϩY${``>"+[/yP鏈꜠rSdx": ! A"UmaJXQ R .(]Rˬx|`Z ވ>^{[;-us.?0]d ڊJAH ]YGwCjmȕNA<#h3w"Ϻv_ t~ arɸfeFk_o*s94[ Q0'֖N4=]2t 8_ '25S;86n~x27&7k|Os|S\47_w@X0^Rpn|/z:n*i^6BbS"m\' l}Gatx~VK&g)sY8suq+&J&lcB6߉/SRRBh%n#󍙕l6*O7;!*U}xzR<`+ Ag-7Xױ^ <-{RQOG׋={^)pG+5#x |az k6}YaBg@x"!xJ п]Ykl=ؓ}kf =_=eB/j |kN~V57= G"xB%!z"{әkۡCExԜ}QA:Wj$=\uZ16kT{J#F# Ҩ _TEڝUITզ +TB/M_KՉfx)g\^ܳtykE D. ?Z qbsQûԔ(5GU{_0:u2TPoYLM^V*/GY 6wrM +~5y.:ǫbp 7.R愯m_m˭ӼEw2j"?mGѩ6qOYNW>Nj`̀W hxuoX5n=׹:>u{jyx7zp+^-EO}C?eЄ?6zTTAt"8ftuНxƖ^W7=+{MU:‹LJށY(4JF*0wJ7jX V %aR/d1dHtj!xpTGXxevVUgpV[;CrwӞ~SEIϳ"͎G Z~R7,aazv5t^B2h7?mL4YRn9+ bu^oD㏩t&$γOQ?#U#̧Y߰M۬[\W@N&vS@@ n5(YVV 3/ A\gҨP7bdW;Q&gܐN&ԧe>nOɲ"MhE9ܲ/V R$3\Q9i^p[m~L}ܥ}ݎH??_3>)LRX ÃaRslH Dj1G"68ۑIO!j] ~HzI<^',ƜEYbwH |8Ǔendstream endobj 220 0 obj 5523 endobj 226 0 obj <> stream x][o7}'mD=5$d0` b2^|,ˉ$[tcyt$;`PռF÷=qޏdA?R~{KyŁSzN?RZ:9m* ;N7T#)W~ h4mC2~0\(ALBmjizۃF7/ҘlFe9Mc'P 6-wCEMo.H%M>c|?ӁUDOw6q^D)+#0Љ&Bޫ4 Mc&)9WqlJJ a1aJg/B%NPavoBNJsZpR™G9eԂ0.I&}l]Xq"""܄@M-iG\{|B 8F6a3G|40{vd}hMrF0SΎ>]qH+9GiO !VLf5Qi#TyhCOl>D V΍yO ja,|Wi3|$yulf{#v& ;;E"BRϊ涅4|Ɖ!r#Za4.2вxN9Q6R:$r!3-bYriLR% ]&sS ?93,뒘"46GE 2R4K4/ @VFkqJLʬ~!d5㑲$P;U`pDޘjnjl=%*L4HeiZ" O2T>GlD),uѳ&\l+]5~kV٨3IK7[W<>a]Bhw*OLj&/ _P PȷG O?'<5ƨ"^rre;t[ Y%;yq |֑ F* m=>.;aCigCc֟ es>Ѧb w(/E8rX rnqogieXz J`4!}ڑT 6*,k9MoH0Y6EWbjd;T8kf6vaSsc@kEϚhTswߩt0?QoDl|ewT~Ыs^k܌!m޼41#KJNDʾ4C;0` PJ RIj~/*ŸMeZ{ھXLTvٓ` \qfp} ӷ]a3^-w&QN=u>퀜e򑡏Ǔl$ny5I;?WzϫI'm'I b.ZqG] *_Ad롅M,y\.{-bEǶn'X擢o(q&9grQ1.r)|;ߖb:@]}0η뻟tpU㎺m_6Ha>SX?xyZ)Dt^b^Qq5׺וB48xUwU\RwKv:B/ @RTw v%eiz {ʸ!ط@zBTϠC|+""!1e_b`bJ6"7w!xT?iBDoSv\ X%׺t? o熅Ȝnc!ҎMh2EiQ/rXʝ]xLa2<|ܖ8|`"Fb7.Ñ+]{4!oϹqU^k[O9kc֪.èJRKpS2K{R4|f<2qqNzO0^iAN/9mUP%+W%Uٰ^4# E6Ha>ɹC㋞iK9x|Л\r6>` y,e;=To_0dL TSLBe~UY~Q~k= s2+w Gaszp\E ݭw ̒ͶU'#*j8i=Lf:=UF.6:Y,zqP*džc'! !캊4n Y4eL$'N'yq`P@;A‹ujd$(Ғc[pqLR;j|չ16v-4D#8w?u,%AlH^Fja 4~qdP}N'J|MXs| r#ppi o z(sK< GB#`%g,{[7kJ֦ŭd7 J_JP& ݹqC4iY 2ඤcCkSܶ/@9 Q˾=27(-F  M)fޒ'*-W lxST )bF;.ahbRgͫK ߣ%%N)+e:je[\A[GS)Ք r1ÊQ&ګR,E2[q)~S"t{ _)9+j\ıjQ~w RarKL٥#Kn2)58i2׳Պ&T\#y~1цna!2%G6`=Vyчmn9|1ViJ)H O K ͱ'88cOU{֗K̵MpwS0!)9.VIxI*z= v;D) g$lu ]bA:~|ج1Av| X8>?Icrw%!z0jY NNR!0CwßX6խTFOjQOQ6X}ٞIPG֐\Gl;Yjk\{q& Lg<Y<~tmgeЍ.V,Fz/Ǻ-=GtRsq(]a'+aHsl FN4ԓ|ӈaa r0gONgpۉn+8εZ` i%fF .YQpxF)Mia_\<jMYMmYk݈ %(J컖 lX.F6%6_Jw$K OKnM{ Wmynh<c׳]7Lvoh.\w-((׎\@MR|foh+/Ov9 zB=}$H y%C(}kP X|OE?Xb*qG,8}1:뫓xQ['es1B`qtKb~c#TyH~Lί|Q\Uk[8<|g|"`D^;y5oIeo(4^#P$mxklߟ|o [ \"f+,ӈKLi |  pi`W[_7eɊ]8ghEv4֣بujk5rVQ 5^G>L5W@.:AbE̴xܞ*@ZM M~Sr2q_`]<0\$Hb?8RjdGmFrhVj<Ϲ:8ߗ(aP+*%ta,o"ahl2=sƭ^Ԗc_gVnh#͖/|hv<Ο>Ձ$y&YqaFvU䆘O4ȗ+]'\/W;4r2;vޗ$ k8_zHC$׸򐦥p .h)JH/1(cUa^j♻~1zY>6>A1xQŚ*JaMXG}T41foѽM$AKp7@xULjA 0~F;bF6jWkV2CxR]gMc ~[lVI_{=7> stream x\[o.򨷾yiN mERp`KlDzc E{y]~!؅L23?M߱M \}<7~cǞٍn/ƩNX1\t㋽{OK.hHe?WP~4(=3uN 9f{OેPaK(?P?@tUkt[G'XMI^_*':)\5T?#$4(s>=NVenIWز&z/T40TH99cwҚíƨLjR sLTVoHuus]M#tȑbKAgo,lO󭱎ik7^KlHɤ7ݳ;eCn;cLz}~$BH҂;?6Sp:H,@4s~:"q1k UmtGt0 ih_i9jp'D/h-Ӗ:tEu4Ҭ"eM=j'h,=O,{)h]\^/&?LvbK2zcG2,k gEC@[Y#F6jWBi]nwguW@S|.цHBb "9퀄Ygc1a#HWW ϜbwH 0!r0Hrv~rHev  <9r>wSd((HDط~Yk$-^v:65h~m)7uf]sUB^7|;?> 뎣AK~dig|t|0{(+-#_8.T[ #wkSnt'Os>d>P.P{H5Q [ΒU&h* iBj5I8#@{]M;-1:!ag<đZcgpPLMŃ{8*DڗZxjLZ/"hzsdL֦&eBmA}32vUZmSl`g̛tw~[4=^gn-6L*t*T*6McԄu^eQPѮtU-Idu;Z)JI^;3.%xj^KJBvZM&ZR!GW?hXbvUSt&4l$Wjg(S&Rl>xZO~pI˄Eb2{fRc۩"Te>F(H/ZEaa5 ECŞQG aYC H M GZ&FDe^A5+ec5y69\D4{ k;-gƉGвpPR9Sjt>[9GတͰ6 _ap1)ۙ͞%W-'NwR-*ܦߕ'db$m]ȭ;$ ) 1yiM\rI9r9 &P<wܳke6 |>oce#gFEIp 8X]Y+*8JA8UHR}D<2E8Hk:t]R~ɑ# )aXa"lw9^4PHwP5Nodn*|OPU`qPlQ^͚ơ,^{p C5EC >A?oGpȉZ UA3^}9>݌Xd܅5p:k.'%6 g 3ADTI "V >FVNx;a dy5dxDtМɉ8!{I197~gpѡwGF5Ď ٜ+q;bsbTBlj8M̷ЏAc(WT(jQzl%s#k}Iʱ~@_0۠ueG4Uμ=E}6wj Ap=T[繗AfX+jZ1:kٗvܢe%*4ZZܯazynX,@2~Y zىAb-IBxwhW]/ [mĞ n3:bkI/,`wkYy D4-f#ֽߒ_,G"s׉ c6,Ôejh-4p:C/7k&%%;Y;5./Y}Р`C6v1(??7Af*zSFm6 ڧSmM9TgUV`! - Szߛ#荫!I'Wp}$śEFί7/\2Q6.@)+^UqeZgY@[(aӬu) 6ezw&zos *'L<h[@xqW@p1ZlVyi(1Lj>\嶢d!F3+nżz-LWW꺠W9yz[0GORyl<;XÍxR[E*,/Zc R >\N( a1elėPx@F-s+/IoiEˇ3\R#3&s1ft?_?'/4 Sm1^$^O64y:;D}6_LjS99'&x $:[Yn(8X> '4[rSo+/JH1I*ۺr]q6[ޅ.'m|K˴FܚGvv}YsKXXl'dZ~/a5LDs)H0b$x`>#zՁ[ɬ"2Z\-cuzf (p] owp> stream xMo\Iq+QVZ! EHaqL&qdw_'$RC{uWwu׫Wl+=;N?ߣg[aA|<[Y!'f٤f}Opp#&4J 9^g < άr(ۣ?.Sd4::Jj-"p'W P;z g`hRΨ P#ی:EW+-]H2n^h9+k ~ygk]?r} VRLJN ^ 6).9,fm)i=c<̖ẙ.#\䬘YeҚy&G| y`i(l㎜)=Di"&=܎QߤJ6 E2^ ?rW}+s g,E`8wc&/6a[+ EKr#-Idjk#*H4&Ata RhJ+= 6\jDe^y9*5D~&4;M"@q`Ύ H]ܪcbAVİBRͅZfpLhEd& ֧qujy5i" yGdvGz]SKې)8GN\1$@`ڛPa9Xr=> DdibTغvnXHJ'#|$gA@.EL$ qrJˑ죘3%*'5jSo!:@`+Ĝu>>"ncnUBO,| fw%?"˹؛ٜ@v텹Ez4 e+D+Ce=& 'E*'-@:y| !h~ lO|Ip8+['a0C1efaFljǡP GndͅMTC$$*f{Qi:JD~107:ՁH!g 􃲦Tb#nnORՂBwMaf4(Ϊ]( tM'm}j/ɏю6 9y&s9F G 7RI+4 %8&.Q`!% FOġ=RrJeͼNav> R`F caskf:&sJCfIA)s5 <΂IrCeH!ũyVѶ_fB:Ky}Nl$oVi2~ 2mOB0߄@ XsWR/"ud ䷥A=AR ưW% brU B#*zgכn߽uHVPd#xsuf ?Ww Cy^9P MX7L\҇5so3ԝm;3;>_ڨMb/~j6C}2_e*bOaxqiPSY̒˹25O~Y @kMwZJOǟ9<1󶐋x: * :m@!AO!$ġ9zCH`bԪ>SL(Lpl&gcxRDXXS)x<5:j7ڄ(J;=1!v q!Zq# N4@f !J9ͧߐw9 ϩſ2lV>_Ws [$vxz_3X(Coڗ0X1I`9;N1=c&i UmCr7w/z^IwB-yCY&lt##|G6wf—!PT4H QHBMh[m ˉ>fJ֯镋T Xy;3㽥N2w߯|U3UAYiY #.#Qy8G+-ЩIIcLռ(i>g-GD"_Cʺ?.gNT`? Vd'3zTT-Ұ7~+$Ő~yBr@m25uA+ vէMGઈ!n^\XqDZ(<Њ4@i >4'Ӡ .aQ\o3 z1M0jCE-7~vr&˚{32_e~FTvd5+ ɦ{FvdVgD\G o/~ ?iGyMuE sE\GPBwHwHjꟄVwmQR:eFzN )O"qwN11̲zçM W{95wJ̫U*!W{Q[/2D5w߯n Vٖ]0lrCW#v Bٙ\N`>$w^{cnVEԜh6B2%q fL$C,#ezY=\Er/ɩ'ǯ,<|#ɊtIYߪ0Mg! խje:߫TPlB NφZFW)H<;m/)v CBDD/?(7]ho\ ! '&0pKa55\ *.Gn>N`q5b9bShe<-Nc0{l;ǨLSoCmG7)E?mcٶD-HKWttpF%0fjX5<ӱ _)M;l. *sҧ 緢Vl}ݟ]-1v9RFzNX 3e0Ž H,IPU*TiciFY`d=t;6oi{U;)+›o nov!RjX >V Yf9'dkҨ]Z9e I]h8Pl3 5I{>MPss]HTÖƁOfn;NofJ6$?FZͲF2`:X_4J \Fpu3~>֦tur߷m~USxAK|wނ 1W'/8BstW? endstream endobj 237 0 obj 5001 endobj 241 0 obj <> stream x]s[_)eu[@P2N!Ď`B&^Zvn ]GڟvF{|9<^?L{=uٻ%(vLt+UZʝMwdk0?~/׉vFi9 c/J4zw=+6Jj-t+ZyV6iv5nV67@< 21\9:&lӵJn6]k枃н<66GߣvnyFA48.Lu/>w&08x7?92K+6GVVuVVFV̐v3kƚ~gW8%Wap("RnRn0X<5ChR?L;{`adVC'^IHhqk2A*G2;ysL;ug zL{O+읓t}i==!~]™.Ep@w#1&y\v4@hiQc`?P\ Q(نSx`iEB1wl[/hHQ!4g;ޒNOƧ=^^I{iSp>yN=]9~4bI.%(+fi9N'̊(wQ$쵟L 8*KA2uI 9;tXh^"Y1-g,sgt2LOd&|LA sCFC*#,ɉj:/yVY1 qyNi֢r=Y^@D3jyϞ뼖J#qqBF&*6ɥW9ȞhSua ÕeŌUkk+i>LS4lNjf97˞ۮH 4?┒z@{B@ϩcO-75uWfp<ۃEc,&Mu+Yio^̞́&(+Jvh*eurg9SHv~Sxt^y 681@ ^!|W}Eƽlº5zjpT4L9H ;Wh@9&ejNh6!_og!rXCXafBmRq)vםqh.TS=g+,v35J'4ؕ: ׃m4qS6"5;cEQŞFO/X(O^O酂!"a ͔gwq֒ gV0iKGEUQ1; \I cШ@qMߕ+20)Nv^lܸ,Z]. OmMT$U1J}YX6\+tjtI4ÜB U|e裚Jܿ%4CG%T Tt0" ⓕҫ۾PB.ܪe/ryZK{ov׿@s-&V#xH:R0ɖc o'<Su`CAxǥ*2{S]:" c tg;Kc^$Lx[6~=E'+[9ׇEP &h S 4[9xUyW*&֛~%x+XTSIVtB6l*!ZcB7ҽiC %TW-*x^WM)0@&F-hÚWf.ԝ\$݇x@hGH/idmFC``W)-cw oЌ2CW *2Ue.EM:؊ln_]ArbT:^yGP:^zA fy)%&؜rYN8_^<&&.m$Q֜ex Iy0⟭*T3暪)8c"ɍ9d/* 1gk"Bsvhzi]Mr|˛krUh "N)DoqW릗RpGN7ގDo(ۮ{Z{ʹO+:X/wRx4 5QSd_( `&7{aV 1δ=9aAkVl҉L+c?$4˩1ri1lP褿0^:}@ρAͺȐ2 ta[^3H6eهcwnRuͼ0b$s0ՑÜY$gS8VQE.)TKK74Nў~ZL{Ņ:b5;6t3CFIh:0]Ngc,vc?\<I7Qܔ'z叙J:|V+'bIH 3 AHE>5 hz1IovN:ػN<:Jۙ*_9Z)\\~vivrP ۡ]"c+bH; ZFdiJZ[=@Z=.o)LfyF@ؙU{YE8 R7Bnfor*tG?ʫXendstream endobj 242 0 obj 4789 endobj 246 0 obj <> stream x]͏7rrm9 lY]/ #@'EF#(3!pw,ӳ>+2ҞZ?H ݀+ NQN>bm$t֠K&ғtɓ 14NEg@fi L}DX@6KNZ:pr4VP @<CFvQqu0b#O@^h(ijG1CӅơ<Ѣ]L a.۾Pn(8g;e;F1_SIXp@5Gi%Oɲ-Q|>IoJF m_Qsڼ_Q tu0/+*8ͳ>8Df]U#Z{R%G GS5v}F'dw oK5Y_/ xT{=)*`1/GQ$3ѶDI :]ho[ȋ-Z@`m#D{:vdB w]6g6NK;i#hfmGd-%KHn~C&sSlZ3= ULU-@`h.^$!E^5/? lF%o cz+H@}q#q2QkIc=!M=CQ }$2{9suP(I%qG8]EP"HI;1~Ns5)۱M^DMKX; +MiQɰˉ?@UDF&g}:^Б5HIUǛ4k6zOad%u"D2,q4$,X#ln8n#< ȫ׮֎2?2BDp{ 4-t $]D"L)处 KXew-U@#M0^~Y YIጚ[#y CKr R|Iڥ4ecG9+e305ԲH`gԴ j@%Ù 1dh59k2( cqK=l<9Jaq҂َF4c/)H2 BC͒9+ʅ[6l/5頔U`,Vi[ ݗ]Sa$CSb502rczh Bn2fd.Vv;2&ꌻ)̼8)t5}oF:){&73 J^uY_0Osv6/W`*gjqYwQA D RT"cmy*@H:.UPl.gjT<9ZxX1"6HV9<Ү ^affZZ2ral`"{=JN6AZ*UecCw; a+k"]Ji3Ta=-43ޞn5F I3MIIݏ˛׃S}(bgHnzz9s{3@?`װ>$ # c}?iR&LnӁ(YNPnvv)MpV&uBEْk9S%كT6qakL%XV 161ёF<㠝 =EU`> BtJz`˨ 2:2g9rL&sm4Ē+SurC<ͭ[IPTV1 fMTcR:~v<<6QL WBYЭ7IK1HLu~ᵽ6Jlog4YJ%s/kֶϨ~&b#XԚ ʽf"@@1_͜02J&Pch˳tfI]ɧ-R  0YHu+ͷ *#[!9~梘CUTy#l~bfa{I{YiK.TLMWKG\ Z, ck,^X]MJgBj7,Jx+?2"bnK h=꒓eFK]T ʚ^N4 L-RRGKT8hQ{SXnA j7)%%by$ J ޖPp(73LX7} -"@сݲVU:3 ]+`k=C[|Q;)j|uIp`ErPǴ'ֈF0рqQD-f_ w9QH:Y+ n]Cfd΍* hhr_ 1*~(UBFtĭQ&6*yZ#E y> 9լ>7H$5EqChx6=|B m|d.ùݛĠ..oe@ *m/MZ3N7z()#e\ qI ;UT:Ajq۳ZpBO?f3Ns9 V~Ifpƽ(s}aGNUk8Vn| _= ΧD.338jcey&0qbLzJ= `IJcT7 Hd$pq Ut-Hfh>[YNIW N= bx\w(3{Axʹżd6{~9cf;a Zm fq< Gu>m7SylMQj@EPb?n(~ކX%%@* `lyڸ4y'Y0bָ,'pf45nLTE&Jlyhq$M֋yNjbd^t}u#H߸$Ur>0ibEBf #mq_mR9^Ԧsu]RSo)/Չr8siJرT6VsbuAvj&DJv%OxgǍkF`|9>5mF>W3$MHC| VR xxR pAK\)rWV I%u˿Xy%= |jJ=if0]@U8y*kYر.Ri&cшAQXˁ;g[BK߿ޒ5r,ڽ<s,Ë$kbbas󒓥mN X*0{PE8`!3 xx1ڸay2 :td4.IW-tU.>; IE)_@xn>(/ Hv?~- z.{z3UnB)S]0߾&_пҢ!-IJKi~/PVfK=|η\a`2f`2tryD|COᒇ0/t ?7nHY" y̥veDz+,77+Υ+) Hx6?[qBw+o53;twĥ׿E+,i^ /9!³#GaBCVzw=ho$/_)ie>:3nTEdw,} en~(:].VCnX=M$s9-!Dz>MBC$~ay'nᚺ._띖987QrGf45~ &g,{ _JFV=s]ϘozN>RޕF %2sD@GUn'}]\Ґ.rʯ_}N?Wb_}%m'vPʷ/8Y6ezHz cqVr e]k]s=N訤]r^Ws7hڿRͪ!_ka-Zy4gC>|q'ؐ wP틯׵bCU&H5_C0AR6X4W,zGbbg-WcFߦ}h> stream x]s6~۽ޓ.(W% 3\s7\/:ZœWG IӫwsM Iy.QY$dJNWGgqz̤O]LZRN-25-\AyMbz͐/]=#7oԟJEKG z~7ZPD g"_XԴ!o,rf(rfYXV04+ LCx47m 9űط:4iQkp kiw>T$LTF%=VDd=9Z=M[$plxh< A^0uC) ί ж(zPxxEYpņ8%)1E` 1wF,p 'h94d|nIUgeEpCqi@(]Y.p; +WÝDYsdc/5&JTCYS(YަlZgnjD4"Ry6h w1K[uJK/ՆO8LFQV'G|h֎:*O*`k;׼ޢիS\sQU噱OCr?4\q `WLk'\7x2J*>tEXB6qȎh3jȤu/J?"+]bFj;m* p6Գ8,VBއ?l%(k;J`l ,ʰSf@]'@9woGh9M@n#ˡ#tDpuM$#*V}T /lJ܏]Dށ5یe!ʖ]fA`DmWi{[t_2#H mo^RٹRܟ;>m}q6^olYas \C{︂=>"ܸ>=(|43P&GhG$&$JPaQAСkOCř?!^\琋3\|(Cup%מOilz͘&a fuk/?`;(aB}XR #%~l&׭u[{̌u(&[unUawY>l߸RNTק> stream x]IsN[9*U7¾8%rvxuM%bHka%i3@cxoȎ-k7,W,~y{:ajO@ VG;%_y=H'VVȁY?yporӳ~ЌDgia6oq!LÏW]b/ qh{I.םYUxg$%_ =B폐&^u5}4W!{7;(wO;<4MuL6b?lNYl󅟩yvaDF8@BCxMǍ] OߟR4ɽ"1Yjj\EWTP|iLm==?E4ɷ?> ?/L" 8ˑ jMquG }C!uG5Xv&^q+AY^P4DI!zZ7 $41-q"z] :vC]׸J%4wA Gy!|`=әs~m ~Y;K3h*ܠ[B#nʌW2'cWKLP@$` ; [%c,мa1.{ 7z@l8CGG Ab،0j 垢 SùYQ䥕_9q~hUH|>m>)'iEBj "$|\vOj㹿4n)1חmGѽKPBIh 7 fTc[y7Da=l\"m%3'Ksf.?gjf0?fCRמoNn?\؟!3yֿ̖>ZK3Xj-MK15~0߰@CI0 D{P֡\C ZŘ1k a3'/Jx'mSq/2j޹1[</@à| !`zwati1TѾ10\+ *O8zFǧ?R6ɶMH0ٜ}3U^lW-䦰_Ǹ;`I_ug/\;%*,I=.nQ4"zB{pNNJ[:%InYTW_Ɵ _yE>6>/ܡ'Wשׂ| .͓ @yVs+-!ߍTLq!]w.dF;79c>ݿ!i#蔃R=wH[ݙ$ãZp(7YɈT Is ,ea{1t0p6H$<!ht`S j 9ohB }GyړyoS6P[w< r m1REqQxB G:|q1Z:/Gcڗ&OSv/J7Łi1MJR;DWa@-W-EQmEeit56hP 2/cxHiBfh CQ%cAz^uoÑ`!"nQYQ'EqcFhHF6s;HBA%3B :&j"-fQ h9&7 K /._g2zV|% lmHɦ7;~Ca6  ~%$>}CaKՙ/6akںg3 qsy8!5 5ki,?[@A6ovDƘAp a/BkŅ#+ܢ]P~7V7WN%fL2/?;b)INmH2;LR}mXѠ,h׳^!^\? )N4DN27Kړ p(%i%&qN0\# $fc"ci ءKp2T oͲtkd:XOo֘P+~aQ[uC} %ލ q6,tm%-l Pko+@#&伨m˚i/YY"35H27䕂^0ߓ$Yoԛ B8h8, Fxvt>6 b#"Ɠ4:[?ϳ51^J5X J.J.zgvYf;,e^bdDXЌ>&1:HiO:o@MxFD%6~tBz6?nMwFaOVձ|ʹ,ͯӒ}> hD J{!R{=4$ C@` nUR@SڛA9Sūcro`~!E$zx1" ̀/jj|“l5M%zhU}=q,%K @R|ϨsatgORDX.jP=,sǶ1ٝR9R_zug܌D$ټ6x<D1-Isd#uq{hx2Բ2)|+ ۂ,ύ>=zut i 9뤡-z}?"׏{a r>>N(S }Y\}k*0Ǜ7~-%Qyu&}I/DTʹqiL>x]壃|ED4uLVr,w,Uy8fiJ-Mt/qzav*A0,1/̷:XaMa{ZditTv YKʍQ-SXp&uÒsW _0֐\[`1Ac<\g3k^BNmq>L?H "["AHYNԲ7~kJСZ{@Z|B~~V ̨3/TV4fi^ GԫNZ߼?.[-Cf ;B#<SŌʗپ]p ?m xrfFuE[rqXSӈh P*|$nl[} r6c:udRzc(D R>xԊ^kiAn wVZCVk¶=8r3nad9endstream endobj 257 0 obj 4937 endobj 261 0 obj <> stream x]Ko].ۮHo&qHi&p%K1,ˎ< C<>!Gxaw9΋== >~;-~:|׻.8[CĞW^}rӳeB'NkU<ݧsj*er'4BK7cDeE|? wv"HGԔR+qi6}6oaG̴&l^Doi\7O#W*a6q:8G9g`mðz=,C(Jm4͑`4Ӵ zZ' {.b^9Gyi}.`8!'ؓ{ ']' O%b װP4Tr!1PHn۷*6"6aJp4vqbwݸu?Һ^_Cs6sͽx3wߙ{ԬPZ,UYC8\[.Rr@.XG(wX;զZcM#DY v[i#x%4j|^yCߠ@3κDUk)cQ%^A2D@&B<{69]($itȈ>n$1LDCMA@\ddH}!ZBd"!&\5 sKY` NK61"B@#t#d*:ALםx 3 ä KKC /h&v>Zk9>,ҖI弶 N;i dZHy08a! +=P۳P,MslUܺ=o ib&ӆ4q|u3^IFh4JwiFߟEX,dIn`(hDȺ]qS_$dhC,N@#f{D[D)#&}ejm:7k=Olf`: b[9R9;S?k<#S[G`Q' t~d$\`ۇ<g!a${ Q 6#1r'K=N4U  rg0bd~kMȺ#Hɺ$DBT(htbġ?~l`nÇg#K.PޑT3.[sb&٭r }Ϋ]M?Ch8~' zeCrM@za}U|E9W3s`YryOێ]W4hMD ѳXRŵ8O.pI[0TW06[=8gf-,8]6N}~CGܽ%o#W=o;WB0۰j mD5&%.Vu3ܒ0%NB0Jf/ӯKiT?)[6w!/×i_X(W+sxc[ Iq]w<}3jy@z9G]K~fUj pC׀QÇږZj{VC+]p2muAB[ `jU?TZ*8'ja Kڮ~C!RRrԿ nWqF ^ل%LG-8 qkno *@4'* :ҡxYp@ˋAE%qw DІ =lLz_6hc*an(~#uIdZN]t黁r:u$(θM< aߓUMF&t3z;il9gm@[V+BU4c× \a99]\Ael  6+$ř@4HT&XIDs՘ Lf^{|kIf W:U4_E4wT,3XTi iW(̖f,ח9:5:k~'J6[t+$H.c_ƢDIH|MŔ&Dⲗ\!2o?q3μ=_I_S(hŘVl\=:G iZ\{vRM0pVE2 ^J*2#ua93-aҝ1'Lk"ar>}4&./NKf{H7}M\b 4u5O݈`4]Z 4&XJxtnFn7f^lRвx1o"`֕U;Z憤e~uÁrPL^Uօ\\XdU݊Z!-3 WlxGGd\ gҪ:PTsڌjPNد[r/%[_ǛrqO2^9cVz٧lo+?r76(jafPZ^ k*0"}?P9R>Qjz0汇B6F3Q6b¸$?#aa/TJ? p lhֲe"&xҡC? g0At&*Nll_d oUAM $ݏEn^(*"1re]\S7:yZmB҃6 NV#s~&E.QΧmd)K@j0J@d*&&uPp0.ˡRٽ Y9dW)ȜfnI5ĨB~VnFp]2MM،7A/v!V/ȝZeߙ03zqV:pGu5YYV}% X];);MUTtVx/l 3D?v2 5x̹(B8νxڂcU>):( :/^i_MQ? ɿ/ԋo&rX-[VHz:F P _?j4iNM|q·鹐D-IhXo+L$V)_+H ^d$J$8; kE%MmI|.ިA4:o \,2:D|)zh+@o)G=1fXt"u'^^<]ćP"\Įr–#VȎ4@۽ԧhd| S.d襾}gHs" nӑUMJsS1=3?"I9%Rr>LWvx1$ ܥJB %NϚFW,Lba+id0u+T,^]8|`RzzMᲫ16iOm9kbvm JW P j@7n q&by4{2i0"+ћhkѣ[nI4Ae9/rtocEWPI!ӌ~Fj>+{*Mߑ)i0-w s-ʬgn2"oS#[U߂#6I/XĤY=˾=0Rm7Zǧw{IEX4v6S"yxRR&ݡ^nT\Snp\qq`gw0boBqjaNZÕv(RL+-H;W '~x.Ʈ2X&rJGL]_dZΗ]Jx 뙘cflLXa&H¸XI gks7}"u8|ŝtln_*͙z`zjn6&),Ƶ.+j,^4â6LE239BTlxu0tpB p~`/f?ۗ8C_R 峸/\q \)'>Kǂ%d~ֻ3)y`B"xǍny% N  A||͝ >waD>KPAZ}/kt-`ti@u*y.鈉FsT483' ėu4Eo9g9vM,3| 6Um"i@E~ДZ9Ub ]f .};: vHHyY¦X`m'6MBzc^&@I'mi烅G} OYau 0v>T-ìX q\0ܓ<};^s ub>a205pnM$>Mͩ_\Ms-H˅9^]|=<~tszt-|V  t"@O# ]uq g~g Og|ZSAd؄;`x!,92tadxy颂)Oaze 9.D09 z<Z{<pfV5D+K "G JlZx~B(*ΗfQa(ܨ &[ !h6 k~Ckӹ4V+lXו%5 ps@䊻Ya̖P2לN mWCuɺYHcnfB-)<iEppG( INSrgxҟ&h.Wg}9a"K/_;jP1+ 1k c?ks҇d,azƎև][*hܭ$ ܝm ǰ7dQFl{[> n} ; dDۣB.wM!I %y!>29.6& ; ,J."XxGܱ 4 zo-}03:Lu[oR]7e z!L}svo Sfoa; X@x91LAE&4ww;8m\wũy{5pTM'ڑ2J9*ku/]K x3X;-bdZ{g!V+)pv: yLąepG..|VIwtGY+3xWNaZ8O+`Hp68.gc*Z:mx ZkiF B3ɆfG6`,!D*̓ %Xܺ;Hvi] pto$v+UhDB> SNhPȩ卋nvϓƍ2w &D1ZOU;)=gjlyw px>Sc/`$<Ʃnx0w7L?Ċ,v畕+ZxsH1QV-FK'O.sϋUE`%ЮsF6tK1شʜcT粘I:gf1q|-wdn/]T ~t|Sɗ&?Qu!Nkbp0 uGޮvIot<xo x5=ꉲCo0qt=^uƠenq <ڕ!]|: !O>'B& X8> stream x]oݸzמ,x.bU$EQLC[Rv=8cٴ!)?jH==)=,Cpg~k 'pDݾl+f^xPzHUF~upHN6󃺒fuLF)X꺲꽛]Tv74+Tc:: OBnDWɎhy!iVܦinplN^yt(MCxKC%jUupشMX-m.ckءj-fWnJ.4amVlp8sGW;p€Yظ"XOFL+䠞R pgD;4j$.:zKsDH J08 esnftǨd *²nۿK<*\EX p@yjk"M~Hp2Pԡ%tO_+Û8)4+7lk-d S=ó캗qxW[$Hrc4ux'[y2)*b"Ca.\kM!aOFK;d=26>?8#[Ѝ7ŕC6X]x!5 QF;K*UVYM4C*vu5.`ݖ4NLcΐӴVÙ<,\t]8H$J$hTkdfkTN7[kVbad w[+1>ɱZ /a'cSIa p/a,ټy<b0>A؃0kTM7Zw *ѐBSθb⇇ÏCTRp=qJ5@Em-LW\&x E;Nq&go""ܡ?{G~P S@7!^=>{7/~ó"1  U:23cWxq. @t<^7lן49Ƽ\l@A:ϧ39@KC`V3v@1VGx0go`;q>|Zm @ ]lZrHL*4 Ce@ ŋB5s)ʰ|\?ؐ#w}Ma(75W>iqV%u >m Ma2FsA#2[E!=^q0ֹpOjQa1o1dr!;qniVggN@!pݥnLuܟ?8QFh,~ûY4fMφ|ğU ߻.[F"l8Zv0ҊI[kFZ`f9mWChcdy&>:;=t CsW缲"wdN,ܚ!H.=+&IB,r0Y;vQ <.,Hm'3(k=O}tIHH"33 찚т o8A5.q'/ 6S4jv`+-Q SavtVxꀌi@hQ#,A&U 8Aa F[wQK:-Um'Dyf҃ԕ!ocYcE]W1 ; qXwx٣VfaZ)X`sBjS$%'CSџ$'Q@2*k^vΠ@Z T"'=,T[^Q&;XṼNԕ$Ή 8 Rm&82o}(;bmvyΒzC:"m2]A ؞|b &XJw6@!@i̗倌;6W#hz1+yC)ЀN; yt !^CŖ̴HEezD8{g j ٬rB8Q?uA%(䢬l-r"XW%nCct:lA1d>ZI+@5>a#eTdhez['WZ!M2X1P-Πѹ֠T/(xLXGpnR做UXSO XwrX_KwuP1k]^КPb»7~~O{y!.%݅J+TB6<{yk# ?OXWRǁew0ǯ!Ɏ|a%mR$>ҰxlSyL־EW0~luVp/?ϯxHA^V,7`X /ƃ\E6KaI;p)}2VX9-c-bSXl`Ptx17` 7ǿ[~ApE~EcFV>7aO"ya'Lo9b(l}vdd5:c`Zלֵxh3C9(YE)f e`sDDe&6$&UX}1`x~vgfw?@=` qiqY YVbT_LVb܊)9'r *_v!O˘t$ 'Xp^r=^ͻȋ7Sk4̔0<(ə$L-&p $B"ANmp009ϟHxAJ))ڀ*c$ '#b\m5mM2dsi̅ .$`>I޹m7˒Elӊ>4$h3E}{*w醣~"G)|Df"'i)\G4d>B,YG],)w)f{W|MF b[pw91-WG?>,,ga%4=ƚ,`$$эXWfa%_*Z50 ƭ-a z@K&rAq`A#l[?Hƾsgj; /,r3>W0lJa*Gn*K0$Rz_g61*Jʒ'`7fiD{1SSGu{ˍ>[h|6 YSi ůKOe w_Lf>-?/kȓ|2" ʆmZ1/bz1AHq/3W ) 'L<{vyS3Kcj=idm LR_)x?*XvgEek״7-!qDֻO@dج˰z-y֯WȰٓb{ذ \Kކw\B|CԷncyo00*-̺On):_.J&l*#gK_D!ɿ^W-%3B̳x  B`vLN2_)RoQ=g{e/=j0^/Rk7=&[_dcZew[h}ɀYu VвD?kmA.i։[W 0>,9F˞,k;~s6B0>|X1D#~z70/ZrDʈ[ d}~%|8fƒBX $2}Lׇh+>e^'u 9gV5y̙+ZޙF>w.>7 YzDF wF?/9g?%vŖa' An}/r<*>){{ya{ۜ<D@:5@̾#2o5=z~["b7 t/~j)*%f<Ʒ-`be']OU*>Uܫ&~ӷ?/\eendstream endobj 272 0 obj 4608 endobj 276 0 obj <> stream x\oܸ[_;[EQC \+=4ur.؎'1ˏ#NyQ$g7ݬ,Ĭn=~Ύ/ֻ-8[wp:!ݬ+tnr˿)fjF5EG;eQՕr~e-=mhоЌ)u##Ft| @rͯy #?f|u~&3U#9!Uoˁ>瓁Ghɤ\}j*#vFEwTMm/T,g;,¿" I }:FDT\@K:+|"zHfDDmuE;h)ˢֱ o~"jMotW Q:xi_ 6p5PޜQˡ Ry:jNx3Q]n~X Ay>2l,tj |0R(S@MD>g{A,fmqb!BV,B^.S8ϣϿ`ktBfKs#w$hǯfi'YȦhHYt*t%Ru YWZ80^ZOjt >%EhLu'ƮFizeȖm۔bȵj0%n_ O3W.DkW@BOD+\21/aYG uHקRK qngG9?DC섮k$t_'2 2bּyo.Veu*ɢU`1zI> ,m#Xq͊~Zi̗emwEX *KmڂR]@0pɼkqK:X38$īC2 ,jEf<:oQ)~@qL:$oRwq> +ݘu!yGs9@)k]h ;TF\\1 m$2b>Pd/o8&t4D4O,+Qz3<(~fG%j ?cf1% pn|0VloGAxPXv1 1uYa(=`A%Snj^B{5һGz H;P>d@6ÂU'D(Ҝ7O3$$xAD? ^Θ2  # ,lȗ =n[)3d>\@iӅꅼiPO4; gծY08GL<\GA^\Auf]14$EU2Me?\>u ȅ֋ %O`֛߭&|FE_bϨ/H!(>uu jOz4g#?S G'=qV28I>?p2m+#Р1Gz& uZ+h\OhV ϿKz\7ZsG/+MFM-`Cߔ8 gS`.U 36Gb`E9I #Zm!U%"OEfζ$C ˥P0ɜQm\D4z&L*d&dXoNت!+ő @.qߞBWN0e$l<5jLi< &*jޣ=Oyi@k1SDqm,ƾiۗc"UȮ*,ɩ- -)IҝF߇Rw#3?(@ŅR +H^d00ᇘM@ ɀTX?z2dUB3P~twRw>4S\4JFԔ+ft7{_70-Zto|!O ReUTU ] ?qDkg/&Â$z47-tX qE\14VhVwQ-L/fvf&i~ѶyyS4u~ȋdBDJ u&_|$o䫲PmZCycZvˬL"X3W!!t?23TF *eV/`BG6Bؙ%R|;2- =:bO`V{!]O\vB$ڞ-q>ƴ{s+TR_cn|JU1w@bD(!l@!/cݶg&.hiƯ%0F ovO'I?HJt\~KjH۠kch4L`V$Br5n# wr{\:yW]e l"i1#z~8u\ʐ\L/n,UNT.ݯ7{..:!<z+$ؚj\s;.ԩtucjj/1$ho։p;ȢN 6AZ6D^lf4@;=Y\aƊܿ`dL8}%wdS]Jq?S`$SP XԆ^Lg{/h-]KcRَlNI?mwlk=}ݭブendstream endobj 277 0 obj 3831 endobj 281 0 obj <> stream xZIo7zԭ@M@N h-E]/Yv,>>ΈCұBPOYx6yg̈́M?NϦ,u馋I\d:. 1+l3gPBJ9;ci-?&k2~E0tϿg)i'/Od<'3v XzgvNy;{37ώ*wToJBզJ 2F\,ZL3eZ OOu^K>]AT+FU}2_11cCgd| +2eS͏ x!6AB%-->嶭7Y!zoR rP ˣ 5*q)7' kQE"(FD5EsPZfswOw'AӎzVo 3~J%ȓFDy(︞QT>,B5unlbtdh+ fXIɈ9J3melĘJg| ;`W.zz(zH_/8hC! ЖtI'`1LĄxt'`raʮ)5 |Lsi:܈CN1A d+ʀjڳaGN aGj@u떮օm^\SLL7FVfvtm 07DV^\EGגh%Gޒ#/mυNr|e!In/)j]s&ãc3SS; -1vh;)A1aVjnBy`AS@k#~0\߬ d|VRA'4R0 `-0}dJp+b% D2d%Y9uQ^ۂ3k(΄iVǚ~ QpN&P %w`8j;!VR#0 d渡)5(訍tr?^\cR<' #[s"T'4"t!젯L>HLQH}s  `VdL;8a}އ|i]Q7(ŷab),*>3f(mR1?՗e u5ƒ|=z |i]lLX]ncQ:R5s6ɖ{d%rcBȵ*▮EW1]K i7߉ND',RD2Ch2_$D.8f !rE ΄U:8P\#kuE{#V ׷I|9Gb;8^z aQ״89gKm) ꞣBy1FH띫fix}L>:!懅OrV|j1y,}diYDPpa$#QUA.>hL>rDHwh)w%NJoe)OnR.栈@8M1~  .NDn9,=> stream x\Io$rלduǀ8'p4FˌI#kg`翇KU#ݒ쌀SG-["ݡgoߘW7;wXqw]&{!5=8݉#ٮv 6fbyVZ}}xrk0˸~ʑu7{+.m?H8f()lNmkt:kӽ<|faXwǁ|VsRy͵B:jϻ"n fK~ a.\ӱ9Z]&Wzp"'?SuT#-G G~q3LGőK,4j.¢YiG{G im⼌[yMJ'Eθq<ɸv3'M\>3i47nzq$:*#rl0NQgZ062>\(k?7v(.hyV^jck/ MP/wR)n'%\HЛ-N&J[u &uG16lXI]pŝW:;R1C#A%UfH`I{?Pk~k9SzPAg1f]Cߺģ ~rB ne {l,|ZY#')^&ֽh3;jKJm @->HMXdYt8$0ų4 *(>msl}5nW(ZfK.;Iд@aq\)gl%L(Q hv 6=?P`?~T M?L*mBs hrܲ0I\~Uey,АP^U M4w4*4 ^Bo:YpYl.{ yTsN_΀ɡ D@nQmuɓFa⤰9By4h׭I.6v2I$Yb H>ϢC+WCkz|f%:骛<1gí0a Twv4#ޭDhFKV@PϼZ\Քxx^͡ft h,Q>Iᚩm2 Jd?̬?I]9/Y#KbTR̬?A|=~ˡ7x묺@LU /HdQ>艥[ 7`qEjz8^T.qlÿ#j ŦδoCDR յb`Spΐ[5N#s:zùm=!C 1= îJȩ7D/Ȅ;LsKresfo̘͹&t#`Ffi5W;> \}7CB,'˕A9I'|!#Fvp}/iĠznEI"<΃;{HĮzPzڸ&l5o2ꯉAJxsG>Io|͠kZ1zn&0zpDb[ WdCpM2Ì54}p(7/e6oW"w5Jj'>-0 X~_#Saųx7T`ĵH**j֗?uS68^qs[ m8ذ9Qx=Qc vQ[WpкyE" 4~1h<ѨG.@L[ek"il+.Ԑ;T=r$ > stream x\[oܸ~MP츈$RzIz],>8#v읱{%J?g4y09$ϝYY^n}WN[t-e~ /goT=,zկT3U$O4Ɋ,A?Fa8oJ5_lN2niEѴәL_=azc8L'05XՍlHC;VH~{Is5vk?y4?DsD {LW"r.r^ BHO;|1er%;sෂ\t(-52@<: fCI8! -,+602mշrdf!0}"}խ֖!S~|ž_ 0 LaDxy@8UY2XKFd18. ]@me[3%P_b7I>=u&i? Jk#\GvN0?`a5F_U(xqs0 H daUp š% +4'.BLpA8] v'cʒ4oڐiZ:Y_iӇuEP@󡐨c޻8#qw(vRK7"ե%]ل zu ׉Y$MX R\ԏsAP#}Zv,⬾h_wf@^Mdr?7UpycD>R JR!:Dt!DH )gC _Bs|sr2dyUY+xO͸ 1"/3#U8'lxJ8/& Ϊ'T~X FSΓO2)tC_'>D*>fk gbg)'܊22TFs]={H21XDA}ps1Z3R%CdF+ WU,'o:S>Y8bp1+T q [nkBd0})wrFp59oGS?!q6$]Fse',=fYR,HLG$eO&'R橚/JF +|8Xu,J T@?c0hIoNMtWNAĐ*L.\ 8qҲpɾ?Kݿ7:9iѕm,`$95%{cZh=PwD.R2D|{!+|\op]#W*5n?F&gDR .Efb+ ;:0 "H`u ;u泝L%*HY@蘆v%ZSn.f—7ȷ75zp!yq:fVpl c6^y< Vz~+۪6J5Gkd1I J!{-tawxlv mV{-ҪI*jZg/a'6 G tHט ڹuyK+yAYazui]VE*<ڣE_g*s(yAsz"BjEʶ6j 82Dn:"X_ͅI=`@]fDx#iGN}Ty, &8u )XNjc bI|]1[\k[{Z7q_v7^Wsϭ8zysIC}*J-cr݋;Aj(]B_vl]BO9LûC0<["tfuemݨA-qZ LlN߆ob_j"h'|a[$? &_?,F?L׶G|Y_DkD}ݤ7NQGaH5O44X$+$/I΁9-K2#Ȣ /7FuygĈk{ `%%٫gMǀȲ.w6ؿoڐUŶVYwLIqv4nR4MrUE5A;,UTMs8_^,kգ]S4eUMF"T]k6iT9uk;#&-ӪCwFt{ċ6k|*vH<6:d^ t 2Y#"уlv//k~endstream endobj 292 0 obj 2836 endobj 296 0 obj <> stream xˎfIeբ}hYZEw =Zy1w(SB 0<4ڱˡ:L~y_iuY_]חO۶=)&EO>/i{i^O˿oVrϟ4_z/yj\t])O!򯖌V_: (ϗ׊~L򗯟v^^ףۧyzO~NX=sj)z{J2/ gt}ey'گ>ps]#Kk]kєk_ϡFSzxrqmzÛNg 6.kArm/g{AOn8:?!kXIh߸XUR1Xk [18SzzoB|<|enE9^=Ǭ-6Bֳ$U&e~y)/](秏J< QU; l9_* mF1m="*vzu۵vQ~) Lc0Iaʱ_=>|°6#]zkIpuPSPڜ_JBQŪci! vЬ֋mρޔ>FF u8#\: R%4zb4ݨ8$p?םTP37C'71|G+(g.ڍҺbIJbvnR6RhKWRV|6Z!j[%4*_oU]`iFߵbrs9یMEr1ou'þͿ9UK+6sr}i)cnm;~~GSC;w5H76+tDZcS)4V6W|5hg$AeEg ]mEk!M c;`{s7},;7 wBUz[?" _}. ]uOH qHKIAD7 LJ)mbmfnڻ :]P9 %:ҮeN$\mT/sr haM c;жbԆ (muCW 9(7*)wzIPue[$^׮|*-a)alGdQ0wE?&(OjL1)F$hĩIkAkI vh-)\XCi߁u\qXKʵ1EJ&Ut@7gkJFz=m͗WQ35?>x͙8MH7(PKfyy3?IpNQ%PsY qHKIہ.k/,>Ĩ7|yesذ{ Z$h_sj*g%,pk@ЄqojjmA PnS9EYCyMJgf̔mo|巊\k']'QGeˡk მ:PtqXoJmzy/-XmYݦ!u\@hFaYgD)kDYҋfyB| qCɸuɕ:RJB/c}Aj&axc_a(;]}C׊>eS'(o܀ "fsڤ5})ǒ\S;1QI8ZMRJM4E&0aN@>w\\xP")]mE{(mֿeo+B$\zL)&Oc={fipmrѸi~{OFww!g,[) v.3{s aJ%pg:␖0#-d3g$ګ}=Pmbq\iq6Mg'AeC, Uba%a!`lZM/[$:Pxbqvx$lEQ(\!B֛vd= OWzG̱a?g-F|uT(XÞk!M c;oWx])S~Dj׈ ۰mG'A`@Iƛ)%a!`lELּ`oWI %ݝ)ܝY7oû;k!i) c;Y)j,X'spYTKZ qXoJہ96. B}I!CSܯ\#6+]T *˜%0f:U䰖hvw"quL{jũse0ǹ*̗E tl>?63-s+ `;;_z Vp6@\$,)Pq=P␖0m;7Dbs0mh< gp1Jv9 ?5`a)`lZm*&rN32#>ԅi(HpY"bD cd85$pdlM C̲SpG{ñoڶ0wi:tmA)ᡊX(kftεʧw.,ÅY3.QnBb #WD4,ᄤPr`CLQI_R0ƒ<#v~o_J)XT.B`>cØCcJ:T܎1O1L؏+M#RYG8 ?4a0CpK۠r&9lQˎoIP|\uTJuc_f) $sى]Yfᾭ8+ .b $@'받ZCZJM~+L`8.8ފg86p_ǾQTV_Y[/ LCЬE{oDa!ZPw0tH@8H1Xk [-W."۞"fo3┓ - @h0WJ: 诶ן>Tvs \qfCGvTq3JBBܮ%:␖0=v}fP@Q.R8brfɰiQˆ%0* b06=᭧gؾsf8{iG mΒB,ZCZJM?PeƉ{m@ձ4 (Ae&pa-|[NiM C+U(8d#:ct9%c:%1k!i) c;ЀG %&]<'L~bjwn27^o@?#@oi68W @)(43r>mgxN6G 6wjoOaaχ^riD.v=M! :T&茱hA+L0m1 <a&&r!?0бCzqWTZAp \*`#&:&<š w,g3F>(`5@'HeoNTy)\E|=eq5iQ`:t/q u aJ ueJqtЦ˔+ʞ(=W!Q(ף3[:]bmdgb-:-~a:[1N1b=9 3 N7dֹ- !wI_ ~r݀-b aEWA:A8 ಱE o D C 5^ڃ]:JNV/Q^un18Z% .CRPJ|,U08$@&fd6RpFm==(9.$Ae;J JU9JhE6"6$)ܗ`p ,\NEh6h-!)`hDK#lfSHL%f,`* C@:ZS X९d =D> iYS+gHlSQ"zrd`)`lfY0'vFN.V^bɅTkL{$LPQ"* p!Ur2␖0cl[ p[*ĚCK^A/_Vz0"[6E!EӼT>34n@,h)YGUI8$<v-LC"AQt[c-pMxr)::@T$Э$Wu*WZzS!m}9+[OAʝr/MJ'q, rŒ;<9{yA:Jo`I&DI/xo1VRJN낯h3\;8,A$ԝ^omޙ[ 13'bw!SAwXZ<\;י+<IYMHpܱ\b[q(˹`4ȿ^xO2vGAv݇qȍm@Brl%hGv@;3q٠tc T)|77a;vY@%`:&VT6p(Hp9;֛vppC#rݹY?܉ * c >@HJ* ߈ rQy)0)e2m sLAJpYYF;ʆ݆$ OiաL9JoHxcBLjG#'vx4CcMTk(X='þk!M c;0ۺ/ [.ї}ۣSo/3mrJP %@( [JZS 4,@y)F ,",,$8Ipy8U 8$<>E> `Z@1Dػ C%9@ˎ˸@ejҚ:zf ?i@0ZzSnfi P&ie@yؤm,Jw;͍27QXt CXpU4J kMc+ 1ݧ G1dy6c^9^Nb@ Nlr)PڌR@~~~7$PQ'!*~{uSWġH9WڢHvliǔ&%8sGIl SWdޔ0#MmHj #[[zw:: ǖ)e? `dU8vh%QjG+e12>AXQΗ?T/xsE8f8N[u׬87%@ҙPEA}y]TOؔTVd$"#87%dGoqӄ{6;Rx =B(2|`]8g"o0=LK7yEɳZ#A^C)V!)*<Ŭ86؊e3}!YoTQr2 2౫sq ((.&hжѡ"C(F4ٕy7wdo$,W)tDXî k!i) c;f,7q Otc' "!i]g'e)@fI@P$0Zo/vQ*Ka{R+%,sG>ja/0b{, Zeb̃{+8KpD-]bxLZ qHKIہ~ns^ |VlYq-O}:5n{'eoB%:␖0kIn-+}7l޸c~{ŘWY#wʔW>IcWqEۆhG\F$@9$ָ"dBE'<fH?.Oe[E r?юV%2W"S7 #3kQlW:uX>ؼFs8拋1%,yGAJv6[ qXoJہE kpHAmKsT6.U\;f* /#zVw@ C J|_i : ј=SJyګ7a] , @0:ZS &`3/|1&Cw {^Eu|za0+갱 ۣ 8='8&fREA"w[ rސhc[D qK"[wLpָf:fTVtbI%Uu(n% &&0ߐFֿƭCq+ΉK o `pU8|n%a)ah+lHێK{R4tWiZΩ* ^%7\KJ3kh*Eʊp@ U0॓8* pyC˭JwIĻJcuރ!-b\k j6q PYcA<3 m@6ʡ\p~ b5`sОWPެ:s(-!-%aleeMhSzbpPeLBSȝFSIf[jp0b_Dygh< XyUr ʵ9hd|q̆r1} Gamc0As ˷w}]7\.A97\iH,@E?ar< A;J8eBoKط@Jt O}V Q:zG1 ~MLהHLp岈mssxD9st\\G.=(ףE}q;A.I6=N$L!iX#3Qg4H$8W "cbϡW١u$Dǯ_,"ƾ 0DS䌨 \ä%ƂUqWweIQN `U8Lj%a!`lE%|(E$!ޮ}(IɱhJrB7%M:H␖0m]F(3Sgd$B$*I಑E3*$ٶiH[OA"Mq5xGΛq$TY)S7\#oBҒ@6GYDSPr1HJ'^Z pyu€%0:rbHt|[Ê4#^/ %eŶMadvm[ qHKIہQ8q/})L_͈\?(q\|ܔcE9nmU>Ŷ8JskF1cj)t{GGZG"5w~s7/ ޖ@:ZS؊aD5>h)Ɠ98,Ae;%}:`ޔ0mۑ` qn " ^B~^L?V8,!>t]uH,$WDZMKpY0S迲\=`Rv儛E#zaDn07^?go,f*#|גd]\RuA/2X/rP7(Vy+jڦqW̜; }a,lnA!%WsfT\|gf}2 WnN3c|*&g{ʃv8e5Rk /yFBD⾩Yg&)vdlq!āWx:<:2)`p~RDe>|v:<Ώ,Dc/0tɠqs8r1\J.;RN$؋u Gi V BEmMaU_jEe-5` *;n[!Qu8nk-1Qh Q]"/a+#r(v']VQZcQN LCe#2QX uH\a?X[׼m..NJ- VQ&`)`lZ rѢKWat=VļgEmADEJpYvS.F]Bo[B, sP{xijVм$C!X%؇k!i) c;W4-[a #OێO9w'e0 ($XGwZiYQ$Ϙiy?Ip`w& ά9$ۦժerM7+dY@WJCZS 4lZ}Y69f(^}kqDJ?&c1V Ҕ06 [RBS x!,ٰqRq>13B , \SBX qXoJ<"090g-VXEn2Л~9gned6t /xRxI|_WRM;C?@ڃW^ŧy螦O^*_s7Q}ܗ0el]41`n?+|c 9%֗1tk 0V1Ykq813۾WC=I&z&!CfzŬ@rd 7? ۼw}{ORw [f+L ZYؔ mq 1\k@AEO0&fnWRNl—%-ⲓɄ:_/RH-qqzp %"%8BHRBVV{ 5E/|]5w؅q!& .ϊB$\s^X f] 3ITv]Rֆ*L=Jh،) /VBƕ&и:M(`J7b tθo8$@ۖx正v]]U̠.=C *Jb,-WaPՆuw4(XY!j핃QVAr,Kt>E!Gi!i) c;@+ȶ!-1)Eb8 nIpQ N_ǯ:/-!-%al4m9nΔC.ku10$Mʂ/B%: abz~hBߪr܈@ )cndl*qS],~2P乑b|~hÞ冹;\M"{RP"k􊣭IPBU!C)!kM C+аjwB{FFej6ۈ,)IyK qHKIہ%:?NQ[8 b 񅄵X63H:K ug-!-%al- Ŷ<{R^jQx[4o} oA F?sF. po!3*nѸH\{Uf,7 %"F7nli_9 e7>'7X# gF@N.8:0NwPvīY 3YLeϝ~?]LOJk{5|搂06͚|Tn*ʙΣgv%fm&|da J<ٿT@RMMt<0QlR `9sE0ǹc&KYG>Aʑ޲p)/ݬH}UQ+Pc*FqpYW]%p:␖0㱯:(޻}zb4hσrvM}UN}}U}97%@][F;r^x;ԥ݆qAs,@PQm$AAQF*%TCVղ(5ӢjQB]a(%M ҒբA{,mv!œ>YY^+7ZH5ǫ%U"Lm>B/WrCp-ddр@g,Ad4hqmr}ԬZޜR iH`kgQyoH5uI3ʨ{[$eLSMC;rGWA-:]ُG6ީr=w2Y#=5Dq28sMІTM(Lox>DA_׈iYi7+ i<kU0m8$MV ;P;ʉa)K'` .ӹY?KܣU8$`]p]zW?ԸwѸl{j&?;NjKpYTSG]BRv`vo-)B gc`HXr3B7%Ћ*eb06/>(A 9p1#s:: ,Q`1/GhQms4l0 "Wڰ$!(ϸh !%@ ʴ Nm{{HKOqνP/.v nn9Yx |la\\3 c΅QvVIt^3 ) ZyߧG#'hܣ݈y"zghݐ+U&ytwA?zoL忱B3- 'DKB\,/!.ڙz ,eL!:^p7H 1PE=?4;Q+ @tRz^`L"nUf([8)a&U77a\2^>Js\D` .()<c <(:|ZCZJ؎@ /|ME}\v$(YtÑ<)a&UKA`eg lF줊Q<(P,@TUzb0f^nZD7o",>_VوmK#0Gg]Sw~('^z}W̵͞V1ע bQuZqXeJfg&/?EQp+6nCg?E|.#ˠ~ i`)( cЬCLh8&fhxql@[^39/ ZTGB֛vmcX#䱞c?Ub2N0c?U␒0Ff=)f &I=8lXqϻ&V3(}x=\80 @fd(KQ<9ۈ_ v\/r,FBҶU,N4Fr2E|ηN}ԟ?/ϭL{m;Rc.GxDo,"KӦs$=FCd3٫˾" `O4<#_%GY&QqsZυӸ39nO'}WYbLb̐%JK%K; wiSߔ '3nݙqkB->y+Jqap:n3)'3pT ~G=)]Å0vLDpHcX21SXˈ82gXRkbiȎV ݯT:Gf~o/w𴋴n C J؄uX2nڈ?f~qCvQGS=.8 gO%,{&{5>f4kBώ#̸-%?%CB֛vaY&JQ ó_>M 3pXqB%Ѕ*b0+}(X#gm@-Gܭ4£h=0s=%w;H ;*O_-nxU`7U εe 7 F&۫ӎnA"mluY"*ĭ #[9s q)|c'oqs:]+o۷Rf8З^Z/z>&i0w~#ώl0۵,f~O<1YP.P."Wl@ж#@NޠXMt.y8:HpLy.gg ?nrʷt뺀^n1#13 b2`!vނ8Ebĥf^˞ rX%J7P1~ 4~??O*= o2`B5 $7@"r $Dd U⠒h,o(QQ-qS^СD)@2TY`"Sb\DBRveOx! ZTh{q1,) .SJBUD9%%< Q UrH4|^ ?Cfw\&(@K qHKI1IC\p>Ƌ5G *P,a胵> Jz#Q넫`ʧ~quvQ>mSXiKsHAI.;o`ȲcdKkZtŴo12 pDk99 mÍt{HM3rllyp `kŰ*AZ7<ݟo+&4x(:VJLrs5-Xڑ\FQd܅j j1rt7hf#:{y7שmE0  ]p8BX|CLf)-}o.2ϣPgEZrɖx Lt̏Rox7sӗ O* .Jӎ 텟-[9p|r?҃s\*{m6ǽ0;%0{p~q)!Gk {2̋ȷە ʙ}&^^(+>d|3We-ݷm]Om2ah5ϊ-SwkǗM4H;W^DDȃRW-QگZ6䄃<x-oԞ+[G2%6fs VoE1O[4+_9ǺN(uOpP^xwԬ۞6H.)HE_}kLV%{%B.5lҷ7Q=`RU R ( ] rl̢Fmq6N]m޶ϑUI{<Aڿyx!$`>[DԿwutD'7E2#8Vgj .ӉSyJ@UE8$f[BiBLZOHTQ灸 * !%alu/X91] jV*k9O3"s%$QYErFeY qXoJۑm[>R/B nѢ*=u8z.ӊ. ;ꐡn% ,<5\ b}D|9R(gmO):,nW+IC[jh +*l?P/3K=|,=!nE!1ԗQu cS&uu@c+xҺnȠoM! PY2YI Dd 9):lԌĽOёFcb$e;k:Jxs,28 ]: yҧ${(<6`jmyAqk.*$C0[GiS¨6Sfll #J!a;g9o|kЯ@6Eh籘Hj\i{6?Yc_QXyeoy!(̯D ܜqM˓?>88Ja Dw?9%%(Eƨ}`*;eGN\Vn,[=͠c) ~~c :d.$) Y!Ck!i) c;oRЛN9^99˙fvl`) 7@d0vGJZS l>_i ̌vzT04nNFBޥ `hQʴ:]VAVF`8n `gūqpg` wq5 BH sPGK[-U f^ 3ԩOCqVy0t 5L=@]JsHAJx4pq3;Cv}虄#vX4DŽ]=Ka痧ÒXLQb$hA3{2+:?=w*l ǖ@:A:J 6'z D`a.Ǎ_IpYMSB0]1Bۈ| <@EccQ _Ho .ck =@ZZJ}02>' wa8 G ݦ0+fQGBnsXY>>(\+c%ytՊlˉcPTˊLzN竒+N=ޅEyۧzW4k%9H%ו=2bsזDXJ4^ct*$"G%O޽`8eЦs6;o .s#ʉkE"_}dy<$[xq q4*yi='):.Je{,gIsy<.-œ>wa"?ӏO?V=J>U 0bgڊ=z$X:P@#1( H5Fba)ъѤh) \a6y!Hl4)\DshB&Ńhc؞t)49Cgr{!m?$ʲM5' XEA QVfä\g9I t>&G<Nʔ06o0&pB-PB\ VLR\\&8B ,Wap0h؊XEI >چ<t;5MHiƢ4Fw& ;um{77gr΋@:ݢwrz|TlR9M[]RvW_{@|;oݮ(@Ŕ΋](/?'ǁ 9uu3J]0d]?B+z`{Ra0pZBy`g[ȒKs.<3Iu!78O(g~d/&teWP{ڒ?u&;`pi@<1b F%򯰕i SqE2ÕE7g>~2KƞU} pkV+ףqyҐKX4;6(/&AXw5"ؼ% *R=ĿBF2e&|j;T(w[F檱eJ,+N}=? +)W{-39^W,$Jb׻cn羘ƎJLGŲjAoS$ \owGɷEzE©cE<-twt\&V(@s=AJ qHKIۑYt@ۢd;"rx8)I4w.y<]E:1J<3:䰂h5/_wT2N9PBmYFPeELa (sY qHKI1v z#@rTXzp@ƂPK u b-QzC£C%VKaBuqW$  %0:&␖0#*mُ%-Vdrt.B=P\Ϧ(x}J qHKIہ%\=[LU[ƷLe[gc~gǁԅ%Ae:B-@Wx04/W[:@\N&&T6$(D|cBPp"0B$aK!'l 9ecZϫ(X)>X i(6`N Oro+z)pruؿ*` =@O밯ZCZJW(lj,(P$|B7~^EDSGOc YqHA 5mkVGIZy Zoq_rv"tw N Yˬ(Ь$@Cm+-!-%alFbh>k+.y) jcW$Z`^2rR&Q2ʶoM:m 5P⻁c"Ĝۂ8{BAnD᜘ɀٽ1' E,=B ꜔|3v< '׺lw;yF9Լ-'\KBtgf7TUY߿aG:nPsHAI7=}w̕*⒙LNaEķu،)2&7aU #/鵓M`NU`V'yX$vw/*h%xLX$E!"I~xzl#t&V 5@ 2&k +һQctӏNr-0,S=b8%NY(ƭ'[(ߜy-!ҟT\$f['59#{o?{y ds3B3"WtbF˼Dr 켆)=3.L2O䀋kI￞>_XduxO?wL\){D/M< 70QIW{WqtsOio,F&yc?¶%V, o+ 4Pb1RXyNxc܊CSzj= ע]>)W ^})o=VÁ:6T(iO$_;##%AeԑO\Ձr$: S[)f9ZzStھr#p7^񙛧%nSM x8=%: Qд$m:P'87%B2M%[Ef|LGFh3S,GWh#` ['@eԐOaԒ0*n1n)A&ڔ[-J[T[ބD4"F KX6,[* h_:P␖0=C]&ʙV^/q28ucY%8(}uTF)-* G~cA-a)al6eJn5KLWG#L颙63&sdɕS# x%1Kb1ځsF dF^sβ){H3冘E+6}Dّ5/J+@88.\,9'Ec82ķ. S|sH;y"cvÞݛ_YW$kE<:{Q}Fm-szJjQ,rg% Y\QC|vuܙ搖0@| (&du6n-|Њ.ʰ*+O02ݤ82M hKHONMbQ,Ae$h:j(-a)alPkS7z}dg,pse&S|eZ)eՁrGj!i) c;D[a7іò#tru>nB+HQE(m&{-%fBP 4,biH$QV^`e& E9rqly̵$<#|X'KBcՁraj!i) c;h"v|fxEx e±崡w: Nʨ#KXw(TZCzSmf }Vso54u$̚7/зjnuZ5fw ;Ur(sPe="wm |өk&3Hc>?4`\arrԲϺe^qD8s. P(ˢ8$@,m('lm& Xfۚ}vs&L.YoQYIUVZCZJ؎O,#1OD(\mp:|Fss?Bo0MnxLE1Tup\50-Ι^<#S&B>Je\rمP|/zŰo% 38g,WsoX4Z\4K~+~!e1@.Px}V;:_F@1e "FKXVbdِҚ\Nrqq%e5 ,0#8S_Jh֖cq; s-K8e_^vvPNd0_ մ+݀~z/Vb* 4who$)IYwZ{1k!i) c;Ҡj#wxYdb L6ؚݶu-]e>Ѕ%0:b|S>[i"6 G  .X lEQ*\qRB ҙM@8ڄNYGhmǟZ͹Q l9y,).NmY3<;M]$XΔt;aGj[p]U,9.Jκ)-D 7 ',9bAXFouQ~&ʲ.Vtyꮏ*4S` 7^\/vqTqLR %0:~␖0|k*7) ǍK~_tkΫ{\+ .>YD-vͷ 3=W} ` qL H:` ЁߥNk{o{%%$-C\ytT>3o#]fܩ˻NEge:^e).+4#ϫػ s4a+!$`h؄{Q75[ W=f,F)ʊ¸%0:y␖hȻ)o3S{6ֵh"w#EY]#B֛v R( Bc00uQfF]VB֚V GE8М7W pYjSfUց ֑@[f [Զ+]V.ಚf4i:6kaj) c;VQҢhna oǸysp&Y͛BԻ%:8,al9ql9!*ޞ9"qEw[ rސh_?^dZ|Q~*Oq(ptnܙOa>OPܠl9UI>mT'eg9c#vI)˭f䑳+ &=n6NQ\E걃sXxVZ \HYAzV׿6@6zGN}'rD@12-o.vfݖc10S"`:JJ`sr>8#T^O<|q?c{g(ϗ׊͞>EK_[z36M_>? Gt__ւߨW~tomA) ({ʳW~!?㊅ivL҃%C;Vsm3(4ɩLVQOwߕ6EqE68N럵mE_meP] `\Fn-eUT i%&2wE>82B]o| \Fn-dU}ut+&}ZxG5#DZ5 n{qĉ׹%-]rա}ti!M c;ƶF+ b%1ϪWQL\TVIJMo yGE97%ȶM]hx^" j{ߣC'> .{P ,ȂC؃B:<3{o|m :ݘhZ$eM`w[ qHIIZt~cD,|OZ{s*}c9|-XOUn*G17xQ([`w=kd^N_8n$e"olNIvij܉' czt3lcpu]Z8\g7\Z9ryҋyFeؚXΎ#g'eL"`̠BsX<6*FB"";Kz1 keX $@ec*H%2: b0Q/:[ (5(5sjGS\I&#cp'Oxf_űHCF徐~"z\w^s '3(]F#8ÈFΕs3c gwGpqM"[F.o&::}^[/#ʿ]1~ |(D5,܃Sd PeL!j& CBTj?4Sƿc 셂Hs5 Gly.;^_J`u8n-a)alQB=t,qcSji&Ú>G\ w\&(([E>h:-'/]Ԁ!35bf`a#vF[1sK`EI4콻e9-WYe|?iwh"qqX89y**3*V)\SOr"c\XhKcTAE6uͷ.\7Sr]^]6Z(8JNjT ҙK]:Jtam*o}ʛnspSn ..TQX. ToUZCZJhxl .M1jѵ:*CG)IPY7:J^* UUmUi!M n+Qbk9*@d3nji%@E-:J[ը&(%a)a3wD f'|sUh}8v0H86|ȡcW>B%9@:t~FN@Lƚ ]Μ.=江w?iDx@JO ]NN^mh.xpBgV6 gӗ`r(N]L\YL a< SV]oUx0O ?10;U9n-JŭY&1uf\x.p_#읰F_>'d4w\VR*v{F2}p#e^po6}5j yQ(8mtuyi+x$)<[nBGyKEU]P/BE#\_ĮcZig8%reBG%Q6ʶ␖0ڑMߖ6-EAP&m;ަĩ;IxYc$̳ <*Xn‡ +!)) V({+I?'&#&|(H)[jt (C/3CQWGP3ҳ'eb"0[n\RNG1eL<}b ė 鿌c4 rݝ=EtpZ rސsV#^^̫v/ ct2 < 6EUhu.SXEv|v3r̘#n4vTU*S'צΖo8$ &[ md"m%lpQQ Bj{*pю_+FGyq=tg6(YM1u[2s#|}_n?='hϙЄz3CFqǓ#v2|FiG؍Wd2wAGN&,m2HHznH݁G.6ˬ-[?v:rz['xhf@pPvОw]<$6@W>A5 a~tƏnw( ?IGdu"TY So܂ց֑V`[F` ʜ dFBot#Ie:@$(6*)-a)ac=fmyV~nMρ9Ykm 7ےͶfZc$0yZ\( ZυzBߊH\q$i;o 1OK0p JR|/-r$~NlȥX\zBi\]Vڲ\\Wz.P.ρr`=W뙈vi'"#w\ bm=mAmq9E|Ig׭fĂ!^|i:E2.GJP"[^f1<-?Qf_ZC~ K_TP{TB]~-2u`sGptIՆڥ87%v&6[GQt+׬[}2wnr,J̔T )9k?LY3o'hV^DL !F'.Zeԉ̀ Yin7+!)) *MQpC\6^*ec =.@۰ZZRÎm/UƔlCaB4 8( .S`tJ0<ՆP>8$vm1>yFQE-A}-pv8 Q>EIN ʧ Xv4(kcΎ#g'AM& F͎B֛F;` 4rh0I ideqi; .c@ $QMh)%!%%am"xx] _Z&îQNmMxrbc"6H'rwc#@!Gt rZ˄t uO|/ 0Hw6b^IdPsIpZsEŊ$(6**&-a)aǗE8k3urzw/|#9m pY^S諵r݆RB k_{<3V)A 6$o&ON c? !<c_@> A>EIAIXEPޔ01::ͿF]u|G賃F7<xM MER?N%1Žsd * Qr- LTUޔ0ځOֺ̐V(;t, G q,/yW4,W8܆/yX qXoJ#Ϩ "^pI[r.:tl9b"c*Ge?'+n0lhiƛ zw9ڈcp/8)rsoϘ۫Dmz{ٚkp笥||'n?o?q@xz(#cȃ)`q;2o+3@]b:Y-uEk8 P-IcZn̴IA_TvoܿzHk\mCv \W[ s2rŻǥ}Eȵ Q{4z#U1U7bZw #l*=W$˗9l:X>\19+5m(e:G|;4!E5PP8$ VVߐ#S 5.Րbwv3Wwyù(s>PP:9$F#:zYQ0DpPMd˴M?$Qr jCG͓ݫ̉wh兿ΚQv.HXwvTF(å$L ,ؤޔ0ځ־iWLqu;tr Xs2,i%,6PқF;YMiiDk)4DIPl3I4WeюH- Z8_=%9,%\jQn^j\qĎr$ie&%I|}&f)FC>(;ׁNvjgplʴw؂@v(R,j)lVj>ڃ.4qLy˫$)AZwn{Pkaji XL };j){8r xʁ]x=bc9,;ȵU9Z7oX.QqXeJMY<ܷz"(~t-8?N7Y;ˏŞئ-{':M\0)-9Q9n;0šS\6~cBN rԐ␖0ځ/%aϔcRvYYȱ2rC $6lϕ$n@_a)a1߽c+(+ʹP\™>_h=ypqp Whq;: *T ө$SrN B֛F;F3ڔk cRΥ]^ ua.B l~1&[f2I85^fogi5F^_Eƒ+qig-V^{cS{ʡܯuvq~SMqynwC) w}c{5/G~푥Y|Do5lk´9GD t<h=k _*usǁ1 &ܴm[cL^HgaDf=bsW`R Z)=$&,VE[0aƻ[lrqHI'W@o@삷wIOo[1Xk :VowuO>)'CK\4E8Iv=x sų@1`tv<3>mcWHh,0!IGT^yW$,y Xx-6ѹs6C;$n_~X]PEۋg˙. Q*qOfw;)vDz3?gn^ %AYOFg?dޔ0ځ qϰ7B)+ˀ݉1/V}-X= + z@(0ZzCLי`[ *:{-@Umj8Nˊ։X$(6*ZG%]0M{"od8͞}6BI8 _38)y ta菩Z/=cԦ oT/5sZt:p ͜様Oծqmu<·AYnPK53c[[839S[񄻹)y@- *х~t]c|1>ay- |Fʭ ڿ`D8$V-Sm+-A--a"~yL!`3ˀ)/WdP\6(X!n k!M SuW%CJXAwh @qLH˼ld Q()) hH+ PKf3Mx\t]ű[TƽLPJPՆp87%v ~CumnT(蕰?d mj:.:)}FkGW8&z%)eGL!qƏX qHKImm\V`@$ť#ٿK˄wH!Iiaj) YBQ,,83KʆY K mfa-a)as% VA体常[): ^-Z o~ֹֻ*K+ʉFΊԓр;򌬅y4foBkw5@G{9}]f{aj9xWHG'Ȫ\_uI}ÐA-h,?) |VoZy%zMӢ~QOr ,;D{eOjŅ ;Qyn~*GyIU pvls<*JvĻ[F׶OL.jp¾nC JhB=WڿE\wOAkɱ"MMmR@i%X%DԖܻ^<)k;4Q̌ ^Ls(SLd,) &| 7_(#\7n0cc[qqf Œ՞rvGc'6Wkz)SayMZg|Z/[ aǜb6ZF>K AM``)`"kdhq`|1 #] A* ?PuE3&U5y^p|}˧b@q̟@d+ *Q1,p a@uo(l5ʶ5űrf 5i66i!M (p+q"CC Jh0aQNY`F. yi qO\0C Jhf0:J;Tټ  vQgwSxv}݀րV&vağUJl_W Ė<^\$rƩ<"X&Э0 o5_yqA\ Ƅ f?s/rYjQaU,Vsq .+ѐ,u؎lLgS)Qtgd$y$=P ˿G Rcqa=9.u3rs⼸3D-(3rɉ'"~t up Q:k1|#w=C6]/=1 xZ uYϿǓ:GY#?nmwDHS[mύN +CN` +.]> ["Oq\Xz,@eVe Tm0)a˩~ބ*R^G=+ dFa78r%/6Tx  QMRhvmE|'4]V3Yݵp/rTV0 [n;:J uCF+c=y8/ %jCBRF;ҶHyȵ%(nŽ W8 ߪp5qi`*( 07(aQ \9׸%sq'hz%%~jCB֛F;F()kN/]j.t v ( g?E̸Ŵrr4Jc pr(QCq[CZ􆄇h:v#GJ׫6K[K~.ga[Э- !%a4f;rQ05.`h~]e'qlL" * Qқ[6--a)aX]-DDN5ˀIpy*. g%شjCBRF;`>+/PRJR/M-\rJ"40tM,Z"k\eb-u<v. n|dE[#o@,n[ H~~\4dhsBʅWkh=GO3ݏ_H;ʁ]h;vYgeJe!|!/ .OǒB%6 u栖0Ê!u-G\3?lO笫d^CISGHRwHSw ҩ;tCG H2`HEN1ՙCH:sJRh F>!;y{|l;K{y;gsunQ]]iMh .<`'/.W0e"u8>ϣ8"]vD(YcvnQ=k! ;ƌ:kKرȨɗ)bRI~y'ClԷj74brXB^MLu\F&e\~¡kf?!a8ŽȐPeL!f)rFY qHKJxؑ碵?/JfD;x*b߮Vܰmbm0X'  a !%a4a 8TtZifK˚\^wN}\^eh8$&scw* ` sB+g63p泀* a Q @0 :A:JhcEׂ~-hׂF/W2}&s}g{= Lm)rӗ}׸W!+{1Q[E;ɋ' M. a)a4fO:Qr bO !b,m2(GUvQӆ)I xڐbz0NxL|AS˻S=R;(9M]UtTF\Q37บ5u/'Ҟfg6{|\س6iCeڄ&\1ZbmAsF?WDx!xgIx&un y;$ y]DZK&)LޑAw7;WA?:яNQ'15>䜓2+r[]ˎ.f`*+p+®ZttEsyBF􎣃y&%^C};ˆy( K CMa`)`(ISv u}اK34I/Mmؗf-1"+v  |Ԥ";|蠧:zQQc`>㱹fpEO9jyfzvn¯b$xg7z(_lTG^X֠/؃zH#ԇ>f . a q @܃02ZZJh8Œ( p =!IpYSk܆RF;`۲k.d)6˔N!CT)LHA X;,a` N؃00*JSh [yG_- )9|ir39b1; *+3KGKrTRZzSh8a !?ajh k.meQ㣸n\dp6iH#EfU!gL,Lb&11yQ2g]*~ c嵲(̷gEmc WMȾ움j3jot* 7Y0r> amjS9hXϫ>Rqm/ UAj@a@RPFrx@˔y/Xn` sXsg7 䰊0b0E28呡ߩ5kWQ+S{r}Ʀ܀WրV&8(qG&]}WO/{ߙ1]xrK\ޗ\);[}9%vLL!@<|4'Er$ G*P,aβh`N'-p~g|.!puqHII\N2h9m! XrFjf]=Wam)`~놢JڭnH]EA؁X[KJqXe M(yF~]'W+4e Mu\) Sm Mi!i) c'4,(tnhXT_EaRD D7x#R8&u$ɝˬ&qȬhr*1+-E1@K m"%İ^gb ίB@B*gEsX tq$lLCQJ܆q B֛F;G,(oÊT @8ӗP\^5* . 1s_](G i!i) x߼=AHZy/nQ//[hYDTa%,yA@9jH qHII͎ey\sEl?tۈnOn~Kp9>v&$ē]Y>.U}4"؄;Ϋ[>9E,_w/1r_$6)+ m~\](G i!M ϥ)Y3<缴UC+q5r5@9}x1zU,G jQF;VS`Q2^#pR&P3G%mtcmG8$ Sm܍5sHKImDo>݉' 6j9.r-e}4QK>ڨF%͠b}x+˫}>ZLW+9.*!JJޔZbSY}Ή\a_= ̜ݣ5_b^11ݘ$l#jkg`D75zJNKBj_2p|Y+=ɻ9^Ѫ3xI _I쌯ɛm^e*n 'gI6jzbά?η!RqȦWxvmddK|+gDHdȼ9wTFYC-v%bW(G i!M b퇝NlytNyyyxk:'e4Kx3%GfoL9SqςD{OP.;GT)mz@9]ʻcf wNX+'lǛ*mG`~@\x(x$0(Fz~_GogcKD6N,N%Kx 2)~~1SqSIp9Յ[>cW(LO-!-%aە1XreiuFeȻpf=yȘjq36Ւ2d?+ GTm587%v`Yb[/+1E388799XP%-Gǹc- *!J( mW(箃ZzShp5n_-wP8U$lns(JBܶwvXSlL!s%ȫusmL̝t\@-&츰␒0XC*%msussEܜޞ9S$md RgJ@@9=BRF;`ۺr3ʫ,d Iz?LNrN7_∀IPmd Q&|WIյrNB֛F;aQ /L(M*2ۜJBl?6P8$v47mH(kܹܶ~ܿe(L9(ۤ8$v}R @Q0}Wo^E @(qIʚ;$`z6ޔ0ځ-mJ:Jn)+պk v`&#.a( %[jCBRF;ݴQ&:* uߍ%qh;% *w3EM[6~oiۧ/+)ac?c<{3!ܑwFtMyC=YG\o*ظ l1?WHMaD63^\O5yr{o;R#݂;rC=@yXprYxAԈsq>qӚeGHu$e9CA3w=v#bι[7sqx/:د`לb ? f|7qv qMߚ3A\\\|RdA +66\ R*GeDV˟7Xڬ'l  |+âegZ˱bR{iM8x/K *fMKWI2CGEap{rMY]*hDUt#ؒaKaϳM Yw2:RQG#`Dw&Lc!X Ok}đؒ]EcxpvMX qXoJH۶ymk 4`sO>}PeMx8w>[ qHKImmqP`9ax6`2oqL>YB"$\6 } -A--a]`ǹ2X[؎3P\QX%JZ((aPе;9uLغn ˖Yǵ@a#i Pm < ׭5V2lQTܶP@MDz6T\&(޲v&J:Q<.С*!CQNj9(wIwXnCw+ Pw% 'ڝ򰦝$CzQX#{E u!()\MXa$,T@G`$WPmyPZzSh`=?E@CBPb2 &0a r A8$ Vp9H;)DӞ3P.`f OjJfq0EsqX qXoHx؁"go)fi~!Whg[b8#^Y,D]M-fYqXahy+M@\dqshN *2WY0qnA9[gMj"pO̰x%RG\:*{( F%pfp;3&`P8FBooY3(x.݆(]Té3,8Jl3EJ8ɓ ވ:H҉ζcM/4ga^vQܺ/vQc7N "'{`j\2bI9б*3 n.;@*Ήlͥ%Y^sAqQk,\PY IX6Sd pu'+@=G=:ǰ5,{ꢟn秊n; ) . g Au@Н0,ZCZJh]MHw38qL!Xhg&j/%!%%aɸSx_7#`]%\<"XgT(8[=nþk!M hӁ1yEnfP[o!U|>m~绲wWQC)!kMä)\s _M spYFmKK &mi-a)aCy8ۚ` xDʘJ űMYe!M!4\tB6J?L&e)4j=Ui#]&,eYe<ߥFNB.ƲIR YCq񗗀%V`a.nK,0&p1qX66sr"|gHhbK6}qF΍"lcE^О=4iҾ0={-OPu4F! ƈ&sǶp]Dqd Rx6ƨj<ǷC͏GGPÝyt+[9ɏHtϱj[BkmSF7NpKm؍.%@U0⽏" ȣE,񻎸uv*3vj#ȨpJCJJ` 6_, Ʈa %Ϥ ]|1IpYESF݆BRF;YM@p#yvWK) ZnE)a \{#R^DfxraG.p POk#k%jN5VyF=hzE9q4=fY0N\v=-qQ5u2:yX1^TVNJ1b!KpYEFi. .{='6j=␖0C}L᯾_&⭈ηq[Q[wޔ0W >;󨸇/_AG0"v*7) `jè 'w$Ae'P]%]36R{{Mҡa$o-wzTzp@hʥ3~<fzK{NC/2 mu؀{*93f\uVTk?L`[zXU^תaRτjȂĜ>IWus3kr:)͟AL{x.Y9mJEU=AFEӊ5y4t59{voB[gCp0,&(:Tu3CJ2gbzʠo &}j=NO6(H|/U_&ƐRΜq]3. $.+s){a ̋&8:A:JhfXUp**85YJ/2Xo P*Sx*ԄUA QF+0~Q w#OL( X7PK TmL`-A--af42`5ʶy^G\: .6R%XsF-A--a#mlK, kdj NF81ttTV $\Z T߭3j&@EAGDHmxL pYwSb:puD-_w?K/txx7ޭ'HG>XeEMa8sZ]*h O`T*gޝҭ NKڴۀ]6K% T[M,SC,.an-@,瘐 ra.@WQ䰒0Z"^X?dz(pXD7M\kPqv Aef!gi!M qjr{t{#Q!VÓ Pّ l < 5V;F M+<QpxݟDWEh8D SC>Ljf# E&|&rg'72GdpcS|>J_h: ބv6]}2vzڧD2])=پםE'`8S縚1cHƛWT ixf,[_q 8>( эƄ̸ǵŠFA"̠8\?g1xޝH5s|]CISz*5E[3sϨpPIUz+pVY񙁢 n5RtO}. qD%%qjCB֛F;`| *B|r0RgoWKƛhK mob-a)a޷W9DXzqXKoyǢ(Ae¡" Ijƚюf00'eK&ۊdUoŽ/l~q/%<Õ/R3sܪ#B 撫qx+d3_'6 >8ҽ >8ET!Âp0feGI#rSn騞9 , %`jCpBRF;vZn<0G> 2([5Iz`ybm^/ D)I=j f޽"5nj'}wO 1\g826Lۊ(Fָ{"^<|oGk@@\NCNm?{QnGO"{\jäLƜ7{qѻϛlX=ePѫQyTl2@x"AKڎzZ?u: H}{Sk@zlGw+Sx" Ufx(WUd=ڐ޿Q88l\oGxh2w\(PXnk!i) m>uM J[\$g^#V5s$\Vd$ \m(\ZzShGv]1  &5(:\W2 %,(9IpPjRF;`[$Lfe'9JpٶRA5gmF;ҶkfnL!A/OTFE6k/V`Hp($r BY:g h*c%A\qj Q=1G38; .UFUEV o [ 1'\ZMq#]o>pl/-Ajőp 8n@ ~5ܵ1Eh=iAYfQƞ7`H:97@n{0hY ȲOU<ˏ1"!tQ.Ki9neB7k\B7]q#!DPc,9#<0l;Jo[mw/'(efmI@pP0юaEQ]mK ڕIˊے讛PttъY&,i˖<֙9xm)L(ۤ8$v =𤭾zK՟f *^-'qᳺ0z~S |k+t9޵j8  g'1D7.#)<x384=H>Ce`cՆw}1VӾ)-zi4#45ti[494Rhl7ȏỉ_=pX1-qX_M䪮OIqXiJˎ1:%p.~h }򉘃KppA݄VBRR+҆_ ckG$#0;"өHp]讛Rz#u>Afu hyBFP@\6[zƾ 2PVPJ 2A2Jdʂ $&Ud;c-#_R-4t HC ϊ%06栖0ځl}Ș<\>4>]8΋](@eӍ%6|>bά?V݀sv{ zثG7fIpYYS"ꈾZV~[_>:[WǴTtփW-B-%@eN;JWKnBҁ 51^?仃%3[\^Z*U(\ }Ȥ& k#)hWRR&`qYN?r`nBt{T,0kf3Gk'+ "w%jCBRF;v4PUܬ.VT\FLU ]J qHII5;8JQp!ei; Hp#$*}ڼ``!%`4a0@:EFRQҡbf`EUBGkT7> C JhhQ,bĨ]Xhğ6)oфXf" ۥ:Y:;Jpٖ"$AMZCZJhl }(bઃ.gϺj2q(K$Ŧb%bk!i) cw(:7nOPbZfufm%R@VF`: XX$z}_- 8 pYS=bS܆+RB k_{/ֽ(gD&opϳk$:G !EHpyX qXoJxAtxsQ` Bc4#G r= {$G ˶|nH~y{l;^f~rK۶w?Wyn>?QpCU` [ye"ngVl| b%Ae! ;Jb KՆЊ87%vF^D!4^ʤ8Q?#F>{@11| Kt B;np7ݔ0|og92_X\ȮS\季5^xЗ_劇.SF{r NEϓn(WT瞋 \e?:c^i4RdDFY;^˙+X3WBsń;GZFsۚd93izX2Gp>ZxE:wi#ױVIs#vx9<=<87GV=Z# HIEp}]G.!dP*f wlscZ &؈qYK} {͋[R=A)HA)a;-7f~y/Ƅ?[qxX̬a^pEv(mpi2QJbfo*qëy- ؆|By-]r#$#-k#`) )(%9zn,b2ڈ- g:sh>?^' wLLȂ9[mv1'ځI؅f]jǖ1{sN01a v)}LRRìǴo>,+H_+>޾zW}ހ " @8(+H_֜ V,!0Yh0]K>`tMqo;(`@8'Yr JA >'YM-1yJ[3>ZTIR,g,@i.x+CMRBrìGfU1=j x뇽ÚZZ+efa kc湌Z4K{޵՞Ν_.\%ylQJ-]TƑ1:>>bk7# mf++0~M՗;n=ˇa/QXMdpL4g<f~aqŏ?/bf9sՎljfuFvެٽ2v=֤n/K_w {W#/R RPJrq^{?pFlXzf{TnX,.w@Aº1h0mbFMYܒ>рEOqQX*1[h}-017O^[3{`V~S彉oE彵hj"~c\ޛ((%9z o>NL_WX6?,=p{X}ct|0Cu!-RCI7nǽ,RXp%&$#J1R7Jf=B7"2>Q/sb,ʻnt0k=O1ErF0#$gh\@hihV>rmd@ \F\8FB'd X"FbbǢUò& ,{@8ꔛƤGMYrZH5)`n֖ :f}6A2.f=0}av#fxTl쓥Ge xJ6)9\.cK) $Yǵiyao['K ɽ+ %ZnT[Vx՜@z/nR#}DY߽GrC9ѴӾ (L6V HCѵrFf d| UGu@0}zaYA%C]{ت uZ,*)D)4bb( DYPk0k Ř ^U3"y Ju5mVB%'ĀjU1u5BO*8T*f\Z;EWޘ/~hW' spe DX^Sq= ÔcE2}˼kyxZm^A踣A$ƿX<4kq?\JDI|]ߋcg C/1m̞ѵ\!  : l=6U+bx;02=".đ`I;?܏)r?֮L ,seqЫb|lukCp~,HP,8CY$ ʇECHf=°^Zd #2fegli C dF\uJ ZLg@ /چxAz "ix8b/H®1[FFq^z ׾O l}p/1)D!a/>m8I3b 幂/O٥TxRPTK $#J1Ynjd661QԠEh>B ,B5䌌, JIS" ==a1OOQ X^bWS* Ez̹ԍ(<$W^)O FɁtK $I1nBf=,sQ#O$yW("˩c|W>x/19֎I^s WX$0}wZ<3ǵ-cb;gWޭy:=2LbG[+&ꫴ: 5#IjBu'eTi\+Fr{af`'#MOը<Nh62Vw8G8lj7GQ0Aw=siޯɵx0?W_us+Tx.Lwj&EuD+1f77֠2Yc1du zyV|'B#ʶlYѕ~]e6I֦ ^=JUpXXMWIZzyjm:}K:`\HL$#OTLr/6( 3U' 2mLPNRRì[b?ycĽ^R X@0S 1/Hk )("U#$c9{hś㜑cmś ˓pX #H `5;ֳ_zk?f_ h}Ni~aHk%)( 9* 3g:0. 䅹oZy8: 9C0Ɂ>HRBrì_.B*}]Uô:-[z*)'\0~)VrX5eY~Ѽ2 Yjk'&"Uʖ?W^8)Ӻd0c] V%eq$ (#'S*H@`"4O'{Q_a\YhtűE+0 Bf=^hR.Q9-*͹EW9ǧ5֑ġ1#9f%hi1\@XAvQ rlwm8`!ZA@p\A()$78zu;F( 9_KG $K/k/ DT G4JK$)(#Zf*RJɦF[}L4`)rP,~! )D!mx_<CHl8t#61Db 攒`b,K&7Uis+ aZ0~I9ß\vY`/߹ I !ޏBaŅG  !w4@&-;֚K(ߗEB>2S200[|X hpHqD& 9D `.!fw'WUYmiVL6yxɠd VfIɁYT iV@HN( ۪&Tr/SMJ<׵0 aPA"(0*@ $d0kq,0SVC>0/gˏ.x.%($78znvt Hut ӫLrCJdۑ_i>-"|>jLrV0jY^DE]uR{γPXSϳp *Br:QIA  D.jNʴMkidd HiyRq@Uc(J!H@`">Uٌkۀwk,ܾ:f/nQϧ b"5<k^檘Y|epl^F w"8ک^vA'k/#{9h/$2Hl#>_YDxݷtlD0-s 3G@ 9 EC>=X;~Տ+vٕ~ΎorI?f?I?V[ N(aFH"ǝ=\kXJDVEQ"rY"" JB֋7؂9\aa~GǬg]{G@uJ׈f_]L zǑ)ρ[pS0І9ٙyi n}x;&Yb?OZXvW@R`d[CE Vr݀8b:nIY ĄKxhчO9U휂` '(KaM$1I()H!a#CA2$K7zԖU^8V(1!8F&(($78zLAY:\KCee/Xb@8a Ke Y dь Vc-.a gӂS5aVx/($78z",wH@ #'$kSPF2krEIb"-H :"3JFX,RJ&aOACH PHJpxW׭mrֈ˗} gB`;RȏޭOPHq3U0.mA7WĈĊo'΃$m?r䂐ac1 wgJuݞ=ceY/)7:Y3k;IPdaxm)_'K"<%fm0A56/YSZiAfk{Le&3x g.Cg]td |y}y : ,c!gAn_/m^_?+9/??zv{V7ë zykY}~m]uqlxWݿXb` mD4&گz;o%iQ`L+M؍{]<@](o=>  #/bdP:^BBäܾ뒘p<awc?] ȁ0݊q#9ccuI)H!auCg͍e77;¹+7͏fnOfn4AFf>єfyqi t[L]=M,k󊓯d G'hdp}9D>wC@B<>)j8|GLL~C-)@ ƏO%*է0QW:BߊޱV3E!? Wk 9O*k0hnh>vR X.>Tr+ǠRRì1;֎V%&jnsTJm+Tdg!K\E촽t gzxRX#9V:1}&f9F))R#條38ټ?66OnطXyɁ0,qq@Fc(#)D!a#ۘS-yDZ}˺=El7)A0#b $Ib)N"" q!I%&(r1"x~Ra?6| bД `."c_E!HA!«*1$苢UI3<ݖ?뀿>)ff`bu{*XH!'()($9LZE,6/;P<:nZ_ zQ 9+l~bb쌯 sAƝs|9F,$ǙA0SžZXkb'D>JPoZT+fv3(]mv*pfdߘ1xSʐ_ļyc+?ti0ZM<8Rew88cu } o ps \jb-5H0(61e<|*=TEHb>nlL,@So14^Fniqom ]r:nJ1"% ^s_TIw[5knB`}0Ahvj9%,( TA0iVzi  .D%\HL Y׭QSv1̲[OܵT~|űY+OogQ!.3OȲ#Bf=\7;Y$&" 7&Dӱ},y[1h~$9f ȁAaJ! H)޶^Wbާ+@yo편')S& ~up[* Ro47{;fw -zo(0R_01Ɂoc{0Gs^[f"j=!P ZND䞓AsfSQ@HrQĬgxvkqy =Z . ;1Q-Q˝#;e e$Y9/s"'$K@#t{%9?rn,Y5#Z V~~/ ՜y9CG%aeW5\*o~0) NV^Ugk/J܂ Ӡ/D4xڱS^y.Þ^p;^٢e|97׌i0_ivmQe:xyF=BJρt;܇qC`wT٭-}ה9}kiU|Vs8z9҄)S^ߤK8RYfT鬤"PIzb*Xm~ DTY;|^%o=6`'SkA7m,"t=2?e3bYy<+ ٟۉ҈п497'<UA43% EO鵕xiJr E*2ǃ!NuF BC%4)( (#Zh}Zd륐{0}K[ܥvHڥ ܃oiI"YVWgô"&Jч[v9, uft}v}x4:H RPJrc5.n^w=@4`  p !p0i]_ȍ8vQ[>#P}8H4!l{zF0%_ĺEKzn@c]r6~i] ޯ?Dzﱨ93P'|9>S'| =N[UIolBYnsR$wi70tdϥCv* v^9)';4V vnm>c@޼9o7Q~̗Ǫc qJ[n]cpS*96\9z_b@X5q@Py e IfZPa}l*]r rS1a 9PnQ RHnp6&i nKHT\&)h`ȅ@[ ʑKRPHrlEBƦ̴llPȦI (3H Z2)*5ߐNBzi1|UkJSm:ѯB E#N &`.ܫ`':3NddK?](DȁDA%N)D!acvʄ/NoV}3_08ڑ$ȗF!HA!a"`oR(19@L!L ݐW 3H$ B<PHRRC,NHDJbdS`CL!W?* xR)-A0PA8DcERBRCG{~Xo&]{QX#(PR]Ds^k,JʵDk898q,oQDu f.)y}sEf=w o,VFRR.VPwQYNlgNmgX &;aj&)D!a#27| -tF􁐀3"\ 1HPD2t8MHY?Rbe}ʨY[صdԬlI5b#&8Ff g<#4tm{'tsɥk<0 %.Uk@nkc+p|sk,)D!ac-7x/F60e0%#$%&}!9))(%9z"bg/L~f尔Cfq0((1XRBpAT!SC|^;@Xq@qP Y([XkL^#AccZgA(|X&8dD||9^k'WbM^4Eq(CQ(w{셃`U`5vCˡYis^03Ҷ6NE[8FD(13J!aSJA JI.Sb"f] !%b :i#w-2̠0BJCA' AHnFCbvib~Gnw?E n}`#tYn#},޽õ.餼5^H٫69Y!#f(HwDYo^\Ǐq.f9{:})~O̝6Z+2_"c0L3QADRp摃`jEb(bPFBBäEFAc_2N%V-?IabH9012VA)D!a,RB`&GD8T܏hAŞBMpq&-b6h`",/r)}"s*lf>J YT%y-k5KQ@D2tc-#<ڍwDр֣<8Bp9Feb?9ـR RPJrxd Vw#.!#}%Ϳ+ߤ^dDDG ٺrxR%F^enǦp #w<,?i7hqʂ( eG1#0o$`.܇|'UVfm1_ab ׏ _ p@C輀I m A6[d5 ~5&&lP>WRBrìGl˕ \7a }%g&E{Sm]P,MHFcH7I;8( SbR,8AT H  ! J ݪJCfHS`×Iv{_@0T"$R2P%HHJ7rS))(2 Lp1Bș M*VCKLT:+SQA<`y$]g?|0Tk cv5 A6Epa( ("L:L[ ‹gX@ 8d" D@z&-&4 s !:f=KQ'jzIA JIs=3`cwX!H&Fm\Ơ!w2<>os[&aPB24E&8%/07VO4KVTO2diZ3qGBboh{6f4[w(_ioGCt138 Y5/P;|# |XV@pJޯ[7o|n:go^cp*p* P_Vy"+oM;+9N~P%leK d7gW(c>5?}Ռs?Z]ԸWgnEXxrٿ|_Ѿ6ꒈxULXVՊ},e[T;-K Lڷ@c}L)HA)ᡇ%R :~~b^~MP~"9NXN )DAaur,U0U\Ua.CBtQ;XA\9012A)D!Ch 6d>=ѶՓ`@XD]Sx JUŘ8R#u(s-5)̚; <) T\j ʔ0_ذe l]_9fȺ ;R"~o=$)$48J|\ qa֏,ψ"s8I8V$.1G4"qf=z]'"căl[{}#Pj^ X =k&-B= :ana~TxcIne[.NLɁkm!I 1ڕ%9!{박=l6ny SD o"+JjpRP8>>?}a&&8YٟK>DG~IT4$)(%9znc :"xUa,hvNK^8z,A/ #<]0rP02Eubr8[g;%qȤ}L3jW oOB1:.!:k&WHBGGΨ Hcn7jBi 9,qsb|8Sc_"Ù u [x$قd|/ KYֽ8݀c+N~GP#;]&:p{gw\/8|o-r:8y,N״\^M[??'7~̻{ͻ؏EۖsூͿ`=[!Ω@ĄO4B >0kTOLyڤ}mrn%Δ0D0Ca Q@F1A 3u)"M1K"pgk+58)(şTBD f?z k@A<V}'wRJG4옙^1ۏ>!qo+x Q`:i0.$!i]= JR͇CHa?9QZ*_1%"0zdxֻYk]#j -0uyfNL~7oQ>p%,Wk6RY響`Aږ-)JT~k"<~ny,܍[ 3Zi׵G5\+{TqQHV*#H"\tPh|_+03WAoI//;3*f4;}8)be>ݾ-q8K.o? gYˬ]k~秱ZK(lnu oW1t9?~x S!bR*Pb~^7;:v pBl|N=071 WM/x%f~~!zM8?𙷘.N:/Tӽutɤ&bg)TXJ>)TYIݡ ժWZ4+:΅ mW#1k7.QF DPv舅~zkپcј#弢;EF/r IZq?m#GaO?߼t f!i5>3N]ִX. 1ͼ1h~5G/ `0k1| 9SJ}7wa}өIapl$+'E ;EuXp7",#hW4 VÙN}'~'ݯ),j A I qv}hfaYn+ ,c9AO3T>`we JA JIqK͢L<)-Gd=;{XV(7to`:LcK'&0# ̫b8Aqx/LfXPEcb,zB 9`'2F~ RRìG&Ek=lbNs[UZ;bWcBUkGOUYm8b_H!`V!b}ӖY7܋%͇nzӼo[KB^ fYUy]7|i}̳n_¹'EɁ@xdssO I h==*qS˾)UZ{#ºj]`ß)H $YVE̫`.Y8aybVP(lÞK*ߊ؞0@"y;yܗ嬻\r}31&ys ))(%9z6Zr9laV`#ېچ̗SB<=kmEVe6.nl\Pk xG9Wdtx0ip+Nh5";c%]cif[ׁuY10 ww?K\b90u2NXeѮ j/pΐ7v;!4v3LmgE{ˍ݂6c̣!'7_Wn:5O-o1nBծfz+u_wdƫfen fEeFpY/|nzYj&*r1@ @؇VH18mC\RHjptna=S`}Nq6/q EL_>_" fT=lO@QHjpn->HNa%~}_KJ~oH@C{n H! H)}0ImGav_L5͏k!.ߚ()|l).+*3BrìG,+jc*#nK˘dD ’mMF!QrRSJA JI4lv2.fkW m`]%'8y .-i;Ey F7WEX\(qu yJPfxE2/ΙxEe&Le&qLƋ9l\f($78z r6[9x~Icô=0z!8—1= qv2\UFˇ f-d=Ro~M9ֲ#ew6Zw}7w;CD7WCw?q2xQ[{T˗njCO^x՜^|Ŭ"q%&׮# q7񊖭%_ag+|Sa'yx <*77jzb)P=N+Xygܦ}8=JO}_w޴fWh|Y \j̘fmc&lmo#*< v)QX- ԩϼŔٗ5>y1R}"$f(*`&*#f!*+|~#k,[ v;v+8;vÕƷOVQ]^/Bۺ%}Z4\P1咷cԈen`emܹc7|Z#6<֚UoduғmAE6_ϳJa_WTꛭ֬*fVbȏ,% Vz;b@>@!J4kRHj0Ww i&&*v׬;S-ŚRKd*D HC iI"YPlQVBombNL9nθl`AFNQ@D>?PW .c01JG)gu6>) EA0zDJN "aГ;%ӳ ,$8C6d}BGu(BD3KG/ (̫b"hg=kG,Z])aV Z q@P5 .X_1Nڻ֒0~е ۓˇAT V؞`0o nLzvwFTukiksУQ瓘J!pg!Q?S4>> ŷvNNo" ȷ; r_g!y.QXp *2dvD))$58LZbci>r ˀ!ϮGPn,$,xg E>2eB9 R RPJrpݖWC(YWҤybO7o19f!LDoqR6))$78znG\St#F)9잫Pl[sMHFcnBSnp5qg ccMޭ\*=p@a{rDD6YCzYB"tj񬹘F1,ckZaEER_maaYq@Ec(C!H"ɨ{m|9龁SIpO`~~[0&͉W9o`ն3?Fَv?(o2Xb{ʔk{c =W̢hbmӅT4-M, |ƗyJ=,U9gȇ3X%zDqt=҇Fep<㔧0Y 5kmLdmt0p cx,>94lf=\{]Y2m˸v1-qR~-Br >1Lq^RBrìsՕ^{>g>nj`٣RX+9J/H `"4qbԢ+W8_˄b;Ò%fݒ؞0Ջٔۂ6@Ȱ ؆="$ ڜ͛$y|84&-ڊq[oϮjc iͭpٞEWe{;bݓ9Fe{YvuDO%#z%Vd^itRXR{- \ J4^ $IGt(i֜kyh6qU[dIA0g#Kd!r6RW\4_zf5XY8cԶ; si=uZXՅ[϶#P1} _00X'fiw嶳ͮuoFƳ1[\Xnٖ`rz`eDhQض\'|v(`742yx(pa#|ں5fjqf=vh3!eUZ?^_/ڡ![ bhX;VSf sj678 a:p0Ff=¾׈ ًІ0:=[hW1 $&A06W#0ll\` [H! H)-/W ab>.Z~,+ޯ@g[oͫ61'lOI%YBG˗% kkYSPY>y a2 +1Y>J2@REB5+%լ:`jv7q)NDXA$ 'jV`ptbr8PH@tEV+"kĜg5͠9'\-#`(c/U"N&K4rKxzV32z"?YxK?q&=c1R\QN!?B ghy"f-Ba[79(P_1~CnՄP,-494LDL#14&-"h+BYUbnn H1VP@Ap1CDм$TChPPF2x4z$^$=XU홟lŪdcA5}-nj|~7NsIsex a3f>HTTfVw?Dpcp٢:(1VTyY ֲ#`cG^ԒzۿwhP _o?G^cvX3eVLU?J6zb{Mr,"ajmT%ʶToBUЄ%Yh^O?8liwߛMlU>P~1)Yn7#CXKB_{WsGncYz7o𡳹nT f5fMwN ۝ޯ;NpƾǢ*J6AQ s5E06B191$r(|Id1@955s2Hm[E_܂>S\6 c;].3e}ڹ\ø[^}jBfLHN!+6B"3r Ʉx B 0  F. X@S2PIJfu^AW'w ;4ZXwp gq cr ^6NH_OAQhQZδ&<9|Q%F^X}ִrUfD'1eJ6֙on$qUzζyS ELQt \ \NfC%"JAG_ ӑӽ#n\ig 4_U_;=Ҧ9ON,`A{E#7A*. $:_Xӓ]Oϋ +$qZwkݐ[k,z1)x48)4@X*7 B@uJUI^67z1M? 6)4@\tFɶX6 :6w'`. ]$S(ӫ蚳%\~5!yH\_5#3*@9h B]6 c2m_kXoe@x}Pނ-AX`uqAĦPwK:Pp؎2%JddE3G{H $D/OI)q¢ Qʑ2v ik6@]d<1)ʑ HL^ "qmꫲe5/q3רAi4k ͒͑H5`AiA5ɂ$T- v؄<ɾe7JSb{puyewLJkk(.@ăHPW]uJ9+`{ⲫYg*ˈk^X2ز`{'Kv˫D p oTҐ"sAнFOwJaD ~VGx|mmo6ʇ-_1a||ڇYre~U-1y{~ut|1.9jgJ5HFsP΁:j0G ^ T!XX. zTTP5$- `-s#Swc+%1+'n3022n3nZ`SSXmYۑd;(F\R5J* P MYYIXneԑ8b} }a4skKZ1#}ZmtX/ʹmVEkKj¤fv ^6&pИ@[^µtVNaneԐ([(zu@ XS%. 1ɤ_5%ٴaRye!xz+QQcC 4o. L# Hƥշ`b9Bl_a$-gz(%XhKZۑIt9UWUk 䪓FrH‚';%6௩5Kpj &u`2䪲k1k[`u$f0]MA &G}c2+X(Dq&dCFb1XB_a3T O` Hc+]IA(yoZt7 0i6R&FMP'?հWU6f[mN) մN2w-waq;^F>]c}nΟv`]mb7Vqs ^jβiR4~ tGFtMk7 JъqUV[#G:k=M>–CY$Q;/}pVtt 2/XuOv skߕ`_OZLDŽpXMޛg6s-Ȳ֌Ҧ~H $3aP;%O$W`H.' s$H2/S?#ЂV,.W]II):&itǼ%0Pn8Y;G |럭) cV=8R:y }mJ)>p:)r}Se/ةM~ߦ(6w,s6 H8 2VAi-F'C3v'eT'D SZ]#}Vylj.gƮ;i(mJ5Q#[jml,gT\Fqw]w]DbY,ٵu]DXn`سN{| =UBKNHDݠf(B?d'p~Ke2BF# #qsAvڀ~б()h !,#IQFSĻgЏtM6 c;0)6d5td`l`\L  Kau0G+xn=өZBR`A>V`e5'X2Y`Z:k /A/ial6ZDc~a6 h$;4`-ہ&Rwr$k4xQ/Y`9I2Z|R<Y1,kb2$#i\tDW%ae"R ܂x^P^,Dw6[!A*|󀛩ƱrB=g1Ef"P`iڲ ܼ!Ԡ406cz;IA&','t%{3 E-q=q 7~59apt& +Q$Ɋl h_%:fבaLeӄDNANxA zI c;0X[D?:M"qinQVp*/$$@W[jG[1HcCAa??0 /W~)y.YIju0.'iSFIMY8崵ypLo%v|/KHlߞS鼓ʕ\HS fR-*(He7iUQ-ٺʮ h9FۈN;Zb_ujLœGFz${pRI5py2 JdtSZeix4RҒ|N,E xu{<|?|'*z<۟N hut$e>'rSxJ|Շo>O_Ǽ_\~?1eɭ)zk=#}nG/ǥrE3IsǧϺKb/|ACP- O}zxy k>.G1\u.?OgqLg/kWh};./RGjnݨmiY­#[~6ޫˬgx&yvhd]39mg$%^'sh+fz'.s+9 \$qM^c>@ro%u_F/2bp;>FAX-_mK?&\]I'!j=סZһ%u-}ysM''էl[ü7GRL.lrŽ;FZgr@ӍynƫZY7I +چG#ŋO[ԗ2 ۱Ng+!h|lxcӫH0/J 6CϹ)o˛W@?ވW꣓?C$8>&Imo迹{ȥ? YsP7ꪒG||y7oz{zsH2QKx_r~\U_?_&W$7R5҅63~4> stream x]ˏ|m{bh:|?l HI.aE5 _>_w}dWMbu=6=v_۽gw޳;ӏ{ߟ0 p{O'׃rY!fٝoOg=cxR=7xcO*UxI}r/!~6O?B0%we[1_z|RܖgSگg<{p+<?݊; #7nl|`waA=oɌfDd18 }SGa!x\; |iy$1b3YgNg6 -dUܠBrvdlcǽ>.rEVS)Ч~ 8)8U(*WҨj |6C_HF归6U~^QVT@xb(ߖ&,鬎2sUobF2u 8l^:MNWҒL[ 0[  nx/7hжߠ fUSѓ y0>[SSoϫRUwdj[w37 hѱ6> !_+W t{g@9ε~pZ6ć Y@.N8;+fxĝl 9HZw%iG-> D4[Bl- ab+!N}o>P0W)>J{ 3B8?D~ ~8\+ ~w}yTŹ< y<ӬK> 'm1eAG:-E6z/}9"W68Gj!oKw3G';n&AcV=g=E; 'p90!&z{3^f(WltCN| #mb_Eu@XlnԜ%P22 z/tmԠn>2̛QD-\P/ʴSJ.l w'Aۿ,Ag 6ƣ ϓif՚` miH;w,%=E@M#tOJߪ;h,amɽ6\ !93ILhSH$ObD# ~`Sʝs;bI$-õu7Sik18OGnX§nF"* iH8|봱6Hv5dZfo(o' Ql0~||F&Ww}7w3SDaK"tVf3S\B#7Et m&܌Nrh^LEZՅs'JJ?,.ͼiOaY,moP:ې\l$y5ʈ2TS"/e2nϖ [2$>T~&ݢhޞL(׮tEGRr* -1 b=n. MDŽJ'9+"% vE;5esu]wބ|[tnx [T^*ZߩNW]U{U-uGwjSKX6.azֻ [ỽNo=ߢ2 Pr1$}qkwuPf8VMNG]AYR+t,G\?n) P9HC0l|wbF]W3G|ཱུŊ]k:x!E$ja _+fKO<>~[1ۼ_Ԓ񪃳AI-hɨ~Q x&A~Vff͋va~WPz/n~[$atK > p?NoK&J%Ean  CIJ7͡* 8OޏB~1x&]J-2/V{:k kgڐ36|jSV 5/"Jn.><:'C.z~?%w@jHNaޱՍnZZN&BRPuքWn`K!(r l+c E/xF1 4`QYC_aOq۟Lۇz^j`td+ ߰D\ =0c{q@ldP{[izFhg%Ѽ7Ci(+{2\4 tZKZPya^͎P3OQ^_2w[aJHoꈿ]WOC7hKt]-!};յEMݫz̟Myz"(t2+[- j$^Z_Gg;1(S?}>N{7u={lMp6Ʊ.1'sO(ɞtz;:%HnCwR|+zrȏlwl2v#(}?2QY.i_s2l(x Am377P4h։2匍|U:?M |9/&`~'~t9q9bܧ~^ /N+`N9-,GAڄ^GV1jž.h\&9~$ trflJ>ZWEqHykyG{AaT277r@x;&R Czon=r0b|Y!UO뤔S:zll0P!ŘZa? su^~i> Tj7,Rp6 L4L,M#6_٢;ЗyQAknEy!I3Y%RrTqvy& ߬6>`.M䠮*,Iby"JJIEȋ l4x4Oi+qvhB8/rg\8}w5pgg*3!91`F wCL'Nrmr %qRa(;Mt!+|ƴ< : E̥sGM"Vq~WuUYU %rlR*Y؂典>{|x+18&CHǢ°`xr7*`T}RH - ^擴gy0hK! 8–nm!0 བྷNurXAM73YWx=ȸpRqZ8xl Q'rGXC!&b1rp$Fr9\⸍Eu>yOW{$UKOLzT~+9J$R)% BΗ|8?(=0ڕcy'sȪl`5=sGKۥ:(gì`+8mF`bO;m[mg HxA/9SB#Q|d,NJC|X4=mR%P?6 tL3{lLV0-|!=TA؈}55_KLKendstream endobj 303 0 obj 4878 endobj 307 0 obj <> stream x\ozמTJ%\ri"(TAQ˶RIv,ٱ\>!W' |ov79^߉?|ދGދG?ǽ˽ @L{S9M{7;|щU)l7Uՙa~xJOnco,<Fq 'r:a<*aؼG5#"QٗKi?F>hM8~xҙ߷P3IPSiO^k^\|wfD@aq̎AAJ,Ura2KI9q/@m` DYTFbC M)y["-hUᶁ4 iM`535vXCrt Vtre'w{_x !((K! $A&]guq"i@ ϟԲJJԇӖvtJeyWmoȣSx3NJ,?侴i+s)q=))fr^@"6w^l~Z#XQ au 8IDkm"¨F KE…RIs:5h9!V!ѝ%Shƙ^{a7snl'ppno*\On#_롌f`4d&>IJ=0L?A̻D({Sځ@w8qI)Jet; 4üzՆ,NiBW1"JhJ=URL[kYaDOXlsVWe1-1s,|s G ;ۙ[Zo˳Z9.MA@y!rMrۥ:-?hgښ+w[I8&-!}qo-ZF䁸T+2UrѼHF좄WXWBiY.2 Zlp!IrA j_M8s}|-cgKGJV] +<,,YN6ݛQ5НPBxJ5t1S%M? X*^0xqU0g% C0VU9+4ݓ;U AԾ~Og]^#CsNl+gA@׍}@|_G,0˟0 j xYY>;0g`a'<dU=ٳ'; bкͤrr7 FC?+Ϸ.Bti)ff\P#P#s65P/\>M9ɺ CN0l+%Y}]eW?o^b0yRK4/0쓺%ITl; 噶̷canc> USo`mu# ځR4Uoid}ܙB3QgL7[q@>z,!At1<}ciN3@滹S֪UHker'P!uD# zWiM:Y_h |#m06D c̚]$rhԮmfD}Y-ߺ%?=n/s胁Hl{o'|[~loaѫ87{oۏ&h Vpa2Q^PhJȦ&SAJ;R\%kEFS ]į°'}os6bnVfWU]aЇgV+3'F9K[gVu{ϴt2,V C鴺+CO.=۫VVFF4y+dx۔Yl# ϟmRXȶYJoe"g6<^!|;w+zY~ۈ4nŤAW\94vf*4 |p6Ѓ$B߆> stream x]Koz]R@pX|{` ]%/FmIX俇b#YI<p:EG |>|}}_?ᗇ>;qN4'M~8(_ABJC|Ughb|m| ‹-<_gi';8N}Oc~ 484ڑ@.#y1zj+PPK˸i/1 /+-$ץFԄ|gYEQ6&x.G5:4RKrL<0!Gn7fcnLzo;318cQܪD۰N uo}Pz`Β 1˿?><ͧ (eTNS{)M/LbI3}>d=Asp݄8w:fh( 7P [wM3|/mhS3\/(Y} (Ծڴ#nyY6LXDB9(Vy("Ok^isX8͏XDh5Yſz4rGtS 8nK/z 7EMMJc]8!_yg.Y PNc3TsE\usfY =k?{Z̤:ff 4ƪW3S1鹑l[b`}5-6|ke|*Yt#Ǔp0q wFs3,eJ=W\{LN op["QMLG3, (!wwb4bd9E=r"[wy761Hlh"\#C]Bw٩=MNmSrU04Bי4l@3N:#ݍ|B 9Il:Ӹ!Ѐ+x`dYDC! ^zYđ5{y p.é<;.xyrbxJH`L/dصeVy@ti Na_Y d:3?VN19]qLJG3+hѸnԝa s0V+]@ǤM]H+l:}*.ρO2mulb|vu1mxamt1ρB)f7 f4imênmρc6Y: /{3cZʣpXm\n`F4MB4-Ji3 #zR?>ZT^i2ʁ/B: X_@D>k B SG+0!]u|[w[s]Ҵj ,!+3±RACG>/>BmN_X!>̣Is8ŜOK1'&[7x!7_t4Py+֫UL&|,_[)?@1JQՐa)KJ[1V8.֌ĞEy. O9QDr,:&Z!$ Ҭ0́uJÄ%Ł@0W=qÝԛjȷSbEPI6f-]L~:v!bh@ky*c^ AF(e fiGRX $i+ܒ\*#ƕ Zz[or6^ֳ\>7^;7Suj=@"CXRif̺hEיz evއպڀ .t>ە{!ʆK6/"/ja1~4ͺqUIUZh<ܒT'AYîn}mҫOafwjvυjեBR|e(ŧ>۱υ;jRJ8Wl1L5Pg1Lh܏VιG},L$s>eO;*?-;hJiD4jA-^( @DZ%HlA9F^`rRk*wG!-ͩmUz*yqjۂ_fQY?aU^idJb4L_2gqqRPǑ $}Ivz}a%i&{DBL"*Wǵ7԰6 c뎼~eOZ1%kg"=ʘ} Uu@Ә c~¥?}*ɡe?15:WTW^ja!Iv꯺1YkX7aE2mJAdx5N,yPdE)5 3ӆ؎!'0hE*Kĭϝw87n( x6Dw#n U>qD Z0E>isUB}FEi4[| m|b Du1legPH{K'^ #ƶ4CaԐ[Lf{GNs3[4ˆH?"V#Gpu.4ʋ=Gau 7̦Xw+ntlg%q{Q9x g/=ly|{j@#s!0tyK/oL-]CY6347 S "-[ !ИH xkN+\X,pҦ~%>ei-"MHhh*W0lWmc$PfwLuGgSv2k m'̰$#gPÝ#{7'^[sk;]Ղr>Bk3Mn~dhQ~>ԗZn ͖O9Hh^.a"=`NǴ^'ֽ]>g\!jxs.sTZ:S:Z}Ta3XgT9rmh|" .CQgZp=py>~J OxVRaH<"25D\ũf/ 8;/L!fDA!umy鲔|cϫf"t9VA B CfBA?ߓTdbqeccU+௭|=ё+aNs9j GO,l,1f c@Z`rw@mo 2'.ͿN0kK>m 5fġMp !9<(K4DFЌbi;kcHI,vms/}ƒ{-cd6rXԸ@\XH+J?8t6K_Oc]I;a3yӱ&'!w+_]+:(/5,ǘwi` 7lua~#+$I@ T?]~h]?}n++@=.Ow̛574zZӜH>A4Mqz]C_Xh3F1Lˣw'vendstream endobj 313 0 obj 5280 endobj 317 0 obj <> stream x\Ko\ԮۮND|"REv-?RF+%/Grf$E~8璇͏E߱E?9x~/⏋''xZAPF`-Nv.ٮC^e|hӏuBr€BtFp?S?‹}1m@)dr}Ǖq-)[f/B2螱Wzyϕ˧(PHW9ǹH+W@xT05,:e׽D¡&a&:,q>< P (N4^=G}OzEú^)TQ~H6ȻDa*eML>*]^zugF1dKRsx:8@RodqFGGA\uuJEN4Wsd9ihŖמjy?c^-`|(n'0V%`@Fza|V/%Yך1:tʡN{ iY9tL&yK@P{ʉg퐝 Vr XYX&S #/&HU.\-o9yf/ y rP=3%+œ"|_Œ$_ܦe^$Ҳ92C'>Ӭ X׬OSh0C{Zf+{N]D)_ N%2^$PVFi +|% V$RcJ픴_o+TJ3|^`!DgXǞi@fXHS giQ@Ud}ĵ(O/m6d[ v\&(#Ni8:)`Ɣ偄 ?Η媛eA1)`Xا@~H(bDG`odTuDRY+*O@ww"0X`x,&LZ qճ9%C` QR6q-'ZbE>\^GYޣ$&6/(.J^qP^U1T 'D!T}6cA)/Jn -_ho}tK^VE6]3rġ/DHN O'J A6eU5.˂"uE=u x#Cq&H.ǵuߜڏw턶a?=އhnՍ #nzg'x}HYw \Ltkw3i|dHdVI2n5IOb~f@||3IvKb4bp#`'r1[Ϧu9򌊓$L\*.:z~P6T0rtA-liYHyFP*0[2| Igԁ`kYڡhOUM R p[=fݯ:au8x*^xP5 gp}0D_o*kQ.q' `Ā}}!/s><#/- .jI@.S,}f>ʠA=EM;74 H^l{n~?܌<;˖8PcpzxtIPVxy+<^/nF&DBO| SrٹWO! l؎re5.v+`148}nnkUU BE norÆP$A^6;ik!塶nkXCF剮`:*Raxr4a0RRCrDd7M{ 7/GkƁdQ7 r82>߱k]VPPkF: n&Bۇ-=jldsָ? KȖ/pi4 x# i΄S, #칫NsQ֏}2p$HN~=|쵋g7w/`D 7$(04M 9c"u㏇CI gv'=x39=k4EU}/` ׺JCTK)"{Yqƈj}*J񡷮*·NQpjG 1g T 02"QI_ˀL{dYDdUXa=x5j}v%ѷlrfE 5),"M*H^Y"+"dXy_Ftca:-69EM[;! |;%:=ƿU6$$֞e扷QI S uN"6̦eѳ.8L OgKƜS[|M \Ǩw%P`|+XP}Y %eHJR&F4U5̎Yj~lrkZ]_noAj~R\Jf iw@誠lFH2"xo̬-eh ԫ6[+<[;/M>5t7֭VXv"eآ\k|y&E'ӧt+ DKsIpBXQE&Y[\U.Vbu&ae.JW[+є.ed<&: YܾrgC|"]b2tiVU$:ǃF>^ f> stream x]-q,9V/V~gň= b7 T7ItSߝFݒ?_}/C:2G1y|>1ǔgSoc~E\gq\:-}ƑOc4vSi4jxv$?W9J /_I݋R:uZܮ ޸x# O40}" ߿}!oWK]_lŕ$^goŸLK|}×Ԟ\o]ҟ~~N&wOq|Kbgo?j/n`{Go}_qz3)̈́zӥuqw糉9,п8C)mCmka[{߾ o>t\zc_UZRݥ\)Tk3:A[\1IόVr[}h9-)lo.*l?;*j;ʉ"8 {rfo擳si6q od@͇O2_r\(xM#{>#FÁ|ZlyqQn?z9+䶎$g|u~rk+=s/HX7XK!_ Ҹ3իu J!un҂yϮrpijS)q^w.냞֔ڜ>`av?s L!h!F0]ؖ8T&h>fpf%|0^'6ݛWi{I_QgiqL8̫XsYSxh{uޒp4mQ鬁>L5bȜrU.0 :1dH]jVms"{}NkO62<Әd󺆵~Xk i"X?l4t*Hj[+TsptfیS&>&Eѧ.z-1]3h")Wh2SHmzOk ]rb{>F3f4Nt:ǢJܼYT vL@5O:VsN<9ĥy9q KE=CO{/r7N"B`k+_Mminڿ?6?~jO3Z:ekxs}suߢv !:f"kxa1__|Ҿɘ?#__-0p߽a>pV?=fן -76?} \^svFϿW#I_M5x]Üz4ǡNU5=[i~D}qAnOno~cŝh춀e n&fqQs!;vףkjy0'_/>q.wws6_/?z]s|1oW|:TdӢG|}y9Ras3nZl+ί޿KjM׿l2SSN:a򼱬Zً,rԱL\\z{aޟ '1//{`޼\mNuX'Xrgύ-֩^ubujkaNlN'Ζ3_[[5Lyey*ȫ;YWP)$^>⼼~`b-Ϋ|/7PK_ȠNk^wۂ^u" 4pMkzP[EnU⼼~`~,%~,/C|η~u~h7^VXJU}η\»,k^T,dA~ˮ"zxx:z8GT8˵ ]EvuNXAx z/nD%b-]Ev:/Ĩ> 1{H-k^w^m}/i-g[W1[WU[WӺvy >⼼`:-+dlq^^Gyy}u[gz]SWXdq^Toq^ٍlq^g=Y-^Iyy%Jdp>^Gy%-+ 8/_`*-+ 8UijZf8yu0YW1YWYOe^dxyy%5_dWZJ$ӅVXGxr: ·u8/_`Rxyrȭ%G8L9o=秆w#*YW#*Y-ܪR]vo/tD > XGxBG3[tyy:yZ 18Ą3 )Y-Zϝ,ΫRΛX5j^oq^"yTx"F9?^qӨEn"^ j+Fr6ZڞEf;sɹ>G>ir"hGem8J{n~9i:A|tZ[kV׃(~hvC(}XZ_ ؞ nyŃe-Am@cmsF@ڑvOV;7Q!jBvhCY(eN?E,ny )=YXDCd d$w@V"H6GpoQ3z9ZwhZ\]8f?)J4]Pے%kQ!†l="X6ܠK ny48[YѲu 6wm$dkg<>>* b\40lvVmzB<[O(;.`>>phy=u,U+A6*Xԅ(Ck2--x(E2d!PXyny*/Sl-!ۨ6g gj@<[ >[wJ;a _ʶ09H.T"S7dX [Om9=<-9T=ذJdDJ/m$)`m Y G#\}8h-!ZK XirOVAf!yX2HOÑU'F h\P,[E12CD4FE‘ťjYH60aILY.mdOñu'E lg dӏ;)R),,ekkFC8VzFm@+."6l-{RD6Ƶ  gv`}j[K:P*{=yסڿ0Tf@n9) ؈6*< vlzWl͊9;FQòAjJ99ʀiX65>˱ J@eO@OG݊NR̓A9dDHep0`P>؈V@6HPñ Xszʈepj;4? r CŊ5A@FVNAzJ*l\ۀ608-XS487 >nkyuGodPV*ijy}8kF: z(El ֒CC lAñbu`kղrH PlVC$(ES!d&J9;%DҙW,@ihj[)FJՇ@֣bѸ>hQ'^AsT`Ŗ>2?8dp#SۑXmZC<O9*hj) TplՉȰqTْ>6WB P;t-]@ K Fu8r<29#){>fuF q؆j,`V=|Vu T}43"aFz V˨ `\8`Pza*==9p`WeM XHֆGkfėV٠=gdòAvJ!Zw*˸ hRu,~_a'wuF־ydz2J8<Ծ{7;&zGr5(q$DlݍknѲ}ӿ[)|Dru}s:D$c> koj;4-rҰgA Z#Ƞ ־ dQjA IhC= 4-cy!h jQ8;ڑlD$ѓdX}ْA{NtH$v 9㸱lRr`pA͌ۖM<":"/< 0Mm`kXcñرuBxZx:2.jkgP]MmF lɆI80[3C E*,>-:N:.8KP46E?`q i!O w XŹNۖθ0T sͿ2UaeMPU(Fe ͸ `oɐ8'+@Vq65(;]gffv`z W^ hWqR"F= X6U=`\{ "+CFU89plUי5!0!!RA`&,oHX^3TC7 #X6W^R21Mj[q8o3wX6uL=`R"ߤcɉ) ~s=OvhJY d7%Rp暙oj J@@VcS ñu~sY6 9zB6:z`xs TVsrJVċKmC((`Ϭ4on!T=c +VE:,Ʀ#kE՛1Rf ~9ޏtwjqƙۇm_$eX}kV_}SP9E>n\5#W['õ+xA98paAxdp\VnW5gAڳkv \mĬ$n {)ndZ[-*,E|v]TӼCO|j,P,+ҪMbeNLvAI8!k(&J5"r x~ijBꎫ^ʎ?^V0ɦtȚmېE,OQےʨ el퐍'72RVX=9neG`%m˕E%UWcXu W$̔.pXT!ّA]TX5B%F@G6n7Y&Ū,eS2 +&e#BB&:f*]Sׯ&.,(pH]8fFGz0d͎҅#qcHF1j[0vӖ mG®3nE^sA:ĨmAxpfaYp`ᐏGG36 Fm %:`- Rpd^f)<2Qɪ$! s [՞3C @UrAEl7 bFؒvxSaAP n2*X.VĨ`z<-j`o- Ss`sc}Ūv X yPobjWڡZgx渠"Fm `u:=LmC 72WRw%1j[2vPKߨ SC9V=k9$,Qb0F\ ڡ@ Gj$,Q0:..]tf[xxEa`ѥtȪ]1j[2o<Wu¢yְڎ Idp\.XtY2Ĩ`{]RsEKxdqvpz m f0\,=âKjXĕm)YrR">)ò+.W܊K >|jOV\I V\ O].c՜`%,6 72rNJ4Qے5L= `ܢ˥*Kj;2X&‘Ur, e1j#$0B$z.rN]p`nr-,,Զ\SOXj rIV(‘5r,, ԶdSOX=]t9ۭi!wX=$jϳ6 OXc[^-Ȏ]Pu_Նobª6 8(WBUTLm-%c~eٯGI'فaup% 7.rʹVrY)\A~%\N.ri+9[3zKi<<M\kVrT`:˜(" P-))]8 rND2ў SN2rí"ͺ#zƜ., ZRے%\j)rK-@˥eCaP/Erα%#,6RK `Ǎ1"X-Mm%V4Vubc`U,c`U e9rij{X%^@-kՖF2(J+'-yW"K%8 ڵ`1W9i `whh"Uсy<<#끙#0W(ՊmgUEXs2 bⱰjayeb,( dԅ#fRv*2a* ܅#k8&Y)`߰]hE,,R@6(-p0 5 ]Vè`ÁA]qlE{5j;.,Mau aHX bJXV.,ؔ =} f %R89daԶd`Zw:uc]TTèXQ<1[О `ˆ)ndn*%.Qې-7udJ&#ʡ@ G6>K aF0<>ި<-;5 X ˆ|<ܨ.U*Fm0$rL` sN[ֱj(ɦLpT;Yb-Y̓F]@w1 %R8ksVvP M䂱aUV6` JDav`%,Qۂ%L= `\A Y2Ƞp(‘EWЮ[1j#f^Eoe[ιnbj[.r܃r:peXʸRXydGsN$R8 uV"FmKV\ \pI]82r7,#um)ndn#vV4Fm$ܓV`9`圖vt .ߍE\p*Ũm*Ɏ .l;-#3 5 +, e1j#doU\v園`%+6 7.rͶ <Ũm&ʑ rNJqa %kѱ,Fm1$!n?`%kHq#sK.笔U&mz%~S6`JDpXͯ'-6-ēF`%K4 %vdPBHȺ_r9[xr6\J,K‘%sN%K.%R$V/,PQۀuW 簥hpɥ5\Pڦ6rAI+ҰLmK.%Rܒo+;zm  v#9+'ݒKw#30/}>cF=FԶXOXu21Fk\gU5;6o>kK*OmYNzu/BMʏ?'j{ST^jqvZ+v+qU'5M~ !υz"Fb[[Zx˺lF*Ard:piiD`Z$[M&wŇ;:l s8ҵ^yXz߯tR˯??op=CoKcU<˙eB7>~~|/sej+=I7ZJߚ~ң9Ϋ{[!|_/&{d9l؟gտI/!ûϻϻϻϻϻϻ?U >>>>>}p>/>dxyI{|1'5և }փO".tͺ|擮&< k*F;'"LX)^IGUL8_un೐JūhcmsoR|t-e`k/>ڋ?t~>2=zvC,s%VbN5]S+e|8:uZ&q`޾lsW}[+_,S^6@W^k/W*Z^}Ξ-g/Ldg&R&^y|f*)UyW\zH mZC}~5=%8 %Yמk[W_a*"A8*y=0n[}5NW\Y.[M#[W^ ֶ8/ݏ3-Ϋ--ΫkӵgrU[vpi³YW3[lq^U4ūrg5lq^6ڱ8!Kf劒k⼂,+| ʚ|dq^'J̌U9y:~8t8' z͹T^dq^]|Z])x*N6ֵ368[nvk[W g,) Nۂ^ ddq^;|_v>8*imq^'$֋Z?ڊkC!Et,Xdq^Ɍҗ|8bF}痻|єn]7-N5, [Ы^6Et4"‘s~(/R?ֻ|C]R⼬|X/C;?B>|h/CK> вI}% Њ`q^է|{!Zm#Jyu-q[Ы+zp:?)YWϋ,ΫB@T8d~OQㅀV/kXq3bㅀ=5-7S-kBbE^jKWʷ!] sd:"B"]FD!sDX+xyudMlq^d>p-d-ʈ}]FPݘ)[.:5{Mb E̘J^6uL|S[,|%⼼DenLe&.$Z2"u_t-Y#h]Ev$⼎:"4[Ww_⼆ Gم-+Ⱦ9Yy%3⼲S⼊SZRyY%A=ޕD˜]Zd z/S⼬g_JrөdŌ-Ϋ<]w7rwъZh"ûhKCy-Ǫ/rkIxS8s,ΫJ-ΫJϫnU_V~Dwښ;V{#;V{#`q^VGl/tD+N=yU?{5#(]G4R۱Rdq^9`gcrRdq^/rk xS8jr={ik֏౹P5^qSㅊ71^qSㅊŏEnjӝCUGm1k?UFvm*5lz6H@`%Wl=#[ Vg:|㼈 *Dx)e㝨MR(B%x)eͨM6R2w#;rzx[rzaཨL7R (B1x)LcT KՉ 8&Wdd֠-lV20d҇#NHyBиh h O"bdJhp7Sۡ  d{#F@<G0$&O֬jԶhaeOñu'E>!lT}PtCH XwRRr)XWn(X-`a5Uxu`JQ8=HLъKH&9xѐedkٳlJ>T.V; $&Hu/JJEG+{XAe~Dz똚SWdճAI+gkV̙1 RSplͱQDHf 0$\mPz)[~Z~:2w#: ;ĀA9dDH7ep똀FD:VAJmkL@ jh-WS +Bּk)j{9)}Ylۀ60$[(V,D zh)=YJdݑT$%!{ "bAڀVP>[C5e\ԱmC8ak(Ұ Mm`c+s86]nZlR1D?[ JvH5#f&J9;%DR{* @ihj{X)UJ[6E ExUP%[nȔV ndj;|.,"4z!k ZdP?Vp VA GSàAJ:/P6 ['J .!v=սˀ͆f䥄(kp R)?qO?xd,K#GRH}Ua}Q" Ǎm~pUD >G*_A,,`uQ" K6``,ZFM7`Pza*=%B8,زR $kã53k#FBlPsSQ^Ѡl9nl TU\m@cE X|]YZ /~!uޣ"٨&F0$yPCb>[]2n[`{MeW7zS:*0`]onXFdǩ=OjvhP[ؚRҳ Zsh-AzpdPԾ d)nd Y%Y!%3EcEX|>-@{h6G"@ GS`GV;d#z ]=2}ɷ,D@&E f ̸mCي.RdDZ0h`@7_[I;n5VO@ OGFn:h!oj;0(0J%.'E&ql͌F\(E(i Y[Er9nln|l"͸ hO#47@f])d#!H VIp`apd5#qۑVt @e ^yh7a\$'֜鰊E3n[r alWqY VqR۲Q6A`ά[2͸ le`"$`縞nId l~jl[m*uڶtm 8}XUk'#lj\ |NR@݌V0Vq9p'd*N0ædk}R6.Z.dQE%M}0[GS{اkU2U$ԃOR ōLݒUY귐Uͽ6LCvߍ*NAKSfC8r8&8YT mShD7,xShAĄӿ!I;\%oF7Si[0$a;Ən2db2ם6 3`~Iغk[:DPjo6~t˰Ma;7oy_CKZ5)(=od;MM"cCf3Tp`~3\%Z&o!Rh뮀h A`~󰵈l ʰAJ%f2lѪ'cśVVQ,^ Fm &  Y.k[h]~v~Sl[86;SG Z D=DA%Qr֑uO`O.=K6K]?Mofo-`DY)l0)NSΓ>[wMbKO;:&i@.ˣ`NPp/SۀU!X՛[$7-뺄NImTdڎ%d>M7|S2akZl ǡeHQ&+l^YvÈ 7*supB+Zu}U77ݼ!Fd~,nDmІCYB6"m= k܃#8)*YpFdU gJJ )d h halbmalZ8#&3eca,ڰl [+d >.l њ' rQ&,k\$7QU҇8ǤupZ8#.3EceKZ"vl9[{FV3h{\Оѓb 20d܅k-tQ~ CD"^&D0d N퐲Ex7SèHPغnfpغ.q۲aZd7Hy`lfplȜr@0[CΒlix7S%r8(-@ VuE.#!ѲA3%r DųUD%4n; 2Yաm XqHq#kNHB"и h,MQ.l ڏԢ h )Y Y2+%(qD0$%OUVohաu{ImiNaV=_6ܤVxET.]̊NT!XuE'e(qвKkDvE zF=[Y# cK 4[CCNɍZ5'l)j{XQeӓp`8%QX `I+:,NfE'T(Őd"٨ O"X5 s0ZꙢD0hni@C7B@(#p` !0W-Y5p"cC!;<6h##Z ւGk܇cS \kNl @S:0}qE.5 X5)8#Uܸ?.`} Yø?0?`롛c3zF4<6d LD%m Zk2HOÑ53W'kȺϔLBF YÑBeD+DEvgPN!7N'x:+ gj3VƣmNiSEK;zUV5}PJ3r֗f7= H%EuUrq5rW8l rU-3v 5*Ts.wRQ-T$bZ(TJ C..(JCՆǂJ1t!7q5r9!Wb7s5\Z,5(Vн +`IՐ*i囨:޾nXZg8樨NvFT!UTԅ ^j;,)+v <)ywR\\aP(E2*pp;r͙([wnxϊ BhPI d %5` jB jv<\Q7/`Wum &GvT|dfY(Y.j[.8\||r\\w,+(V6 6 +`SFG=հT`n[Tu ֈ5¬Ft\2yEDjͶ/Iv%ZD>H҇CbioET*+aI6"eݕ`h'j{([̔>-"6`HSؒYIla؆@`++l=y6ݷLMӡuAk"LAkڎJ0xyENmK& 2p`+X֢,*L!f& E YV5xe(j{(Gñ%ݕవl"Y)l"[:LaV=YEn< `/Z#bVO["FW@ۀFp-em_0ק3"؀ب#X/֋0sp`E^` $kã5;<2)dY"ur0<~!Y ha$lm=/sl؆LjmcabaQ'c=|8B(}+A9tiKN{v'}X9œ-s,C;h~[&% .~mC8a'j\>lr; %j6t_MJe&AklZC-XӻYs)t {0fWc.!`AeA?`d)X,=av%Kw%8lT%3b0Y"DA3[+)}[вwiJ!Zd6pm-z XB0P)}8LpFdI* ZMԴk vl#Y6->G"AAڎh!&/ԶdaȚ kLMYD18ϛ  YLV'j-Klj0(Zt 񐳔ؒ( VM@aɶFK1-g (,20Zyh}X *}[1pa 8-,Y⥘I'ܑ= zFDز_#}3mD,M}0[e8xLf$@ GVu5!kݒuO!S*!Bֺ%*YV+hA%Vzjp6-E-XVt=4G@K+$%lgF]68=׏ȥOt/>-үh%}X{>]Ps zAP82,󶈇!Y5 UJ2Z)de2Y%d`$9 525j49Ѧ-RgtNfoxW+Aڻ"CZ8-.\9稩NrI!WlgE"^O>ig:'j3qx̳6u\d\$}PqгHq#BVBx}-dAvKB֟тg.g=e>V¾VK]}v]l_{Bi^ ,Lb3DXS0}P,CΒ"xf4}dbi e8i-BlJ`-;m 7 `K/-Tc)eW*V2_E [L²g6qmLK`y|?}bWxķeyi ZkX_*S򆂾wy=˻_W˰ʫ,;,Sit&q[9J#Ne#ښ2zQIGtU|V/Z738$vƽzzR1NuSez w^K ׋`yVVmNmO{Y39F-gyx~_C&gPN(Ѓ)QZ79(f]޼ӛu:|2pŷuOՋ-o5^lzǎb xWOzey?ƲJUaS~NۂNq{pɀ.ޮc|:-k 2K*8m :Vpt7 7TgH؂Nut7|DkSgi[Љw Sf=Yũsr^K'ϥ.Nm! :\n2 ï;3q ':Dtt{ i[)^.قN Zo}2,r;J{"]1#ɂNv܎GdMD" :&ɀ. lAR{IIk0wۂNۀ.c-68NFgEH{3,}f "؂N)u4:tO3]LHU(F" :?F` :e&jpn Vz)WaL^pm)8m 8Ջ~|z# :?LKm@[*{*Unӻ$@God~w DhvM$Fjw n%@ p"%@+؂N lA2-$ZDiv6z8anRLlA'/؂N%8[ɋJSq_؂N^T` :I2HdBc :q,x[I SD ([V+M R2lA'kVD nZ_` :y-pZbVـ>H['RזּOnS#%YЩ,HYT)MXvݥ@IvM~.ZCeKv.NwSk,NhdjdZb%Sxp5}n充65YЩ& :yUt!70:`8Nw0']w0n44n:`+]ߏa#}Ʒ>#n{ǡ/4}X:a []΀YOFڰZCs Vk'G9R Pzn⪈0v0`6wk`j=v0\;2ܸFA j`AI8!,kO6,CfJ~gڇ76\@ۼ5*k F`)v#XuV!3ig>j{k?p5d?0cٿO5\y=0>\}cA98KlCeR,@ #K2c}Bo1dť6od#!YbA^6l9#X5V OFXq=b<\2`d 3ƻ2VU7bu` S2Lc0wLʦ1ѦGcAI#@Bd͂%Q@l9``l^`k%QR WY' W5(l}2mi( Jd%k͒ogFhj8dY-$ܔ.&Y%'v{ڪf^Vu:$MMk{E{/;K:XeopLM^G)9i XW! {l^Kc,{>`[X-sq86:|N}:WP4 y#Ւյ)!m!#K" W :KtKmK&J Yw3h{3?48Mc˲l"ۨ P"(`lzFbe[77`aۛ*la l{>öv3h!~NwTP`#X *`AF{Y6ijE[%cJxϱ*Ek Zh@ų%ddCF SpdTU;*3)h h O"6RЇ<#Lm6`@,݌YH608#hKO" ofj[4h҇cNP'!醐LJHST ,yX)}|DᑃV- Nm@+.8&9xѐedkٳd"}6 _v݃AI#LS*.Mk"CE ]oX穇jxPUK\%;TSO"XDH3`#"؈lDs8µnVlz6H=`Wl͊9;FQòAjJ99ʀiָ}fD˱ J@eO@OG݊NR̓u!T:WXVm56"Ձdux: Tpl֜2Մh5y4?`ʫ)!k޵<>>:1U<28=mm`IP`g7DcmzCdM^ #a?K@Yu F*A"<@P>[C5[4j0aSeZrtH5DH+ydQekղrH lVCfTR܇C(iWF ̼<5mFуeU40h醏LgF#U$&w)'dy#X56E>[u"d1lR_+J+PB սˀ͆Zf䥄b#eԺEO9aH}8>{c͒wOQMdc- ݀V׺1nk` '|S խ)5sL3PA7󋰐8V3Zd[->j죃]zM8 "=M-f˴I`FG祩6k",$VQf}mb23[ue6~?g|mEXHol.~Wtڄ G8(]~s;&r]qƽ2Y}qdgn!$h~Nom'4N.NvP#l7kP mbn!4/}#ZMo{7;9ܨ#w{M}M`-?>(Kom'4-BHl/,m$6PQ{Hds&EXHod1YܷR"ڲA*'b( | F[#QnQ $D6*p"ddf2>N[{d~n␎9 mfخЎll&"KN ls74(Jl-Y{8c]']L&X˖c5rN``A`;lxPr,NhBXɋCQ5-hĦVkHli~ݔ4Cn?Y2ddURP?EvMG"b D-ĠkeAQ֒ҷX [5(jmP2V(i6䀰.EA1zl_h::\GASP52یaU)i6䁓#ldd`?ҥfSgh'0vEHA`]0T_ܴyY4*8aUtPTq0r"X1JaP Ts2՜jN~œsL=bL,CdJ4GkJF?y I3 V8 }D'v:FFXHm| mNFd7߈&vA\DP:F@#>tK҉s9[G uv?dl~~4MvNl]ls9@ v?` []l,&P:-O:l6 i-ud#8ɦÁ">ddG"^N&;Eh6B`؞f5MC鈶hZD6d}2ٺl],8@>l3ԗ:fmR2HG5mTf5l+:c@Gl}2[,őȎ(v>laFAWtFY~.u0GAB@._lLLh(Cgw@2Y/L6|#ӭt(qЦҎUE>HȐWfJ_cB 8c$! r،H4+~50hIcnh}1VԦ$"[kffB ҵRqvd3VĶ.rIDIXAA>p{}b*&@%6'͙&l#/O6o}$6AM~AkȞ4hB@K'K[LDy(o&]Rc#yvȠ&ygRtD[hhbE>Hl+jd#[o[f#4 mm{9[$M"ӿ: 0?FnI$0$l {v,a`"b2ڤyZ[bF3m'Yn+ёlX%xȤMddG"6ʞi;xej|}Pt5k:'s$ "ۋgҌd{T:t M(~w(h"-;gۋgNhf!&ו(Ti6vDY;3mgO; @dm"k4 D`;Zl$2ʞi;dn QBY f9R.ZnNi,a,.DȡRj&-5"] xOkg&0KoE M^jvB\Y`vۑ.a; ,Ġg}ȗҞF`w>[OV9{mB@R(E5lL& L 7d}1ϴa!F]5smyY,hhzHd),`dg&gYJ=Rwn  1Z#՜o0N3iYL`ؚ 6Fc0rOj:إF3m'4r?BWb]V& 1i}$aszQ58{mbf!f-u Y yg^RhNhf!'w&1yn$ӡs=]$as) 6Mv@.ءPG]",p4 ̑؆&E#&hb53*̖jQF& Fi$ nQ Mpm'0r?.ErKHh:Tt4_͜ '\#i83ŸrsNZۉj<'ל e*yE<͛Bh6A#QsyAg 7!Rr e},( 6A#T#s05F C:di:Z(#cZ i;ِWա,ŷ '.]ew @9ە9-= sj slb ufflƮi}۝9nFŜNhTiB@Fcܚ*m_DBz3y(H`= 3Xr5r5YV @:;ӋՓr)j}[9{zNm'6JlF;L2A[`ܩJNhG]#սMg48( so 6͖8 N?`*%zippGbqnR5UiTM#uGb7y>r4DAlK+T+RƋ~Q9Ald4J3m'()]$2ʃ?PGۉӌ=]$S>ɉ3m6pRhO@iu߬$rP,0Gb{--b[96Yj-b Wb638C$ eeδFBL^#QIQ\ۄ9h㍭sugδL`!u~n7'ŸFFma6gNh0"e2 M`ӌ0 o\3"u0f&,ɡ8PGŬmBe4 lOPKf17'δMl7YI-2zvbL*4hj]3nM@Խͧ׺+ {PEm%`%;$zspօ6l `c4L l!uvȠĀ BH1#. dIG2Qdb)& \24gygxhaߨO{Aǀ $OH13:V6@4#$} V:X3ǂccUT,= )`RȥQt 'Hd IHlY#WC`pEiWG!g3rMu,H9d3qˍ\XlE0 #h0L"i!+Bdz⊎gXfj=9ˏ.Q_~AhW5qS@KYvՏt| l!69JU`Uo((`ѱ(w԰KlԴvzu N>^?#D_)+7sD!+rve뒯G%ȂgJ'}u;=R\n9c>黉eo/Lg <\.쪶a\63f`m; 'A@ [ $oo?377777p]oAkj7As_>ǿ?^ۗ6O}cÿǥ*e+0㷿7O^kUʯۿ~Pl-9gJKwV?u$JoO,}}M7_n^Dw2;@pt:qAйe+ƟVC7S *|uv%P:||t0:@/s:u.FC.7S^}||\Zt :t _#[FD+oT6i]fUT/H]Qη_NIAo:N~q}>kc{#̽.\cVs2)3k{ !_"'1|蹏kΏ]t'`O-sX{nk=|s}?= ٨r0mp鱛ӞrkDWfr"1}{^wx“e( (KN$jn׳JVӉ$iu8h$i[0>)IҺt"͒塃}_=tBw:fzz0$[wӆwOHk77hp-$ S{J_|Et̷-v5m&[pl};_b ðgE0Ttr k]Z!IZWxHVa )Y\{\:. z ƕRHǥ>b\ZX惀DH֥/o^%I`2uQIҪ6!IZ{-҃L0dG)=#c Whzѱ`n}4;Ga6j U`;x.QzFYZrm^S#o㧍ڎqn@N !@FLPʟqpA""eBn;d(\^B=ڎqnǂAx1 0S]!\dPpdrE k i$["'Hdz`L`bzRqcQmF.S\bް65%M` p`]=..=9&A:x-!755A&M"k`8ij c_%s3cJXf,r<3`,ݙ`Fu1 N63d*񝌰:X$~7 G>$ 4)d8.2RJš7a;cә'!mD'}Nt¢10(08\/׀WK5@:U`Һ 2{:ɦnadS dPdbɤDCzc2M"-DdYǩ ~ɇ:d$2(a)N4v,L2判-{?m9L+j5+ܲ51`㛃` #zB6݇O3B’h9aɎ kVƚ5aBqM`db)F"kZ/u,vYn2nƮB\&.haײ 5Vԯt̀sHlX GF:H\2W} 8VB~@Z \`S9`&0hKLtɞاLF$?(ݸnr<>aUxcXe,pʎi]e.;:!X3a_>mLXwZ5L&,h,rK"aN#ٸsCzũIۑ4_ZDv 6ؚ f[q5oĥ=l,MYoLYq=FRUhKzrF 㚏 |uܑQއ'0S1Hdrvr"7#CRɚjL~df§!aUM$ I%n XùcfR2[Q"60(21od0٥kYl7KXtfh:% |F'k &l_JLW&Cdb)dM'a'6A` ɖ&jRɪ NLg`+NSlj?A#-g#'Hx5撬BBpM^聰d\e&k #sxQǐ.X)iZ% \ӺHd'tYqw Nd YN;Ӎ1]fedqj ZZĀ_H@ׯ K$HdA|s\3׭\/_mG.(]]&Kv4 i`;.gBQӬQ^m3֠I#`_3D &ǫ&&u*ǚ|j;bA!ME")Zd&8m0'@ o&5m&[4WKȮ~j"̵Ӽ(֠`cvĂB _ZkO1HOk&;$y6,{)!mvk"o_`4 ^t.1 > l]iV&}ےub0b2 4p6X`f[d׀=o[SdrKXNvٚA#x#LJњ:yh-6*8MrY M4mZD5d] Az LHd]vk>n[t4h4O#aKgv'!;Y`0Tr,+:`pi}Xۛ.$08l|L&$0q6*ay0F#>:-d( h}E6Xpn ζ28[BgsuFCz,`hjq fƳ1h됭֝@ .dsd9-NHh2Zӊ6g}$1 g-+qE8d]H[gVlG#MTlFc˒ `vd36)ƒ>*6md`b,t@`k' Lsl0XxJ^<۹wN54XÖ !j4Ӽߵ`Ie0ت j[z#`1\L6WF:˗۠qjv٦-:4 2vn}Fv  -M Y#[jpe'F;{Zli}KK7<3~pmWgd_ҭ^/[jdLaa\\ 50Jol(qԇ&ʁ 9M4 铲=}&H;> η8OvV84}ۢP&j |cHl t<6q .lҋ. -:F#KfCkVhVlMW3 ?:h.ys0<Xfɪ2/fhGb[ِ{lb66?PMlglg 6?bk{9!`h3j>`liM3 l n]`3mƙ,8[6Zؠ++I$lѼ>ҝ(MrU-Xz粳.Ca 4ч§I^LY $5p%RuԵ ݰL` a[*p遃 qmj!A$e;t:XP l!=0 Hle`6nrK rBcߍ >TXJ4AQsקSMJ5ΈKrKtPJ;T#QI5NBNZFl&^ lkD B_₆ZkjZX GXZ`Du%BMX8X+eƅL\kZH }]TCPt`U0I_x:v3g]$> CCE3#D<4#'O&}z;<2Ϫ\Y-x8HVsD#GZ l7po g?;Fm>T9U5T-:jĸL'E`YmqVj 'xuf`p\]QE⺴!p\cfw3p ^*dX:ai܄.a  Ây~ǛfU?y¨yΨ`B :LeՅ |MT8T#\i耡t,B,i`TjjKL*ʇR UaUT,h\O>t kZsMvbyuVeq1Dq ך\Aꍹz\ukqqnX`f+/;Q%C19l7n,x%V{Vb[ol`9lՐ-2yYuȦ)WcWd!ӿ< >ZG2  9`,! X}h;s$g?l3UUO x_$!ɴ&F #>J$ ߌgö ?,reBAuOȊUE? NPesZ?K]XrmvFB6iU;?$م6mfbug0Mحe4vA#{Z lp(R_p0${V:Yl#"Xc+ZLl6 1#5$>MK8aF`t5FUm0d)Z47(U7`2XǙ,fcpLAF=9[ Q @u\STsfI,0Av,Ҫ6ow#3 !(jfiɓ5, 4h4C"t#CFpYd<㒛f ! ߴ>mQeb{-Ԋ;}ۦׇھK{]jZ\x6`a]ֹipaHUݶLrsc*mL!_h *̀.5 f6R9]hS0SQSLw wLsakzG[?FkMP4f%Of]h{a>jX /u$92C6F& 'O~$hSSe6QsРsZGpOcQؠ,8l-Mw9Bas$ lE6:6Zf#4 >a lz& Fi$spy`%95L`M, }h;5vPn l+U zj?5Fչ٘LtL4{ZDVvBdKv9hc1  XvadӜ]ZlV4X`76vuߴњU94lf!%Ȉ٭UQNvcA`(DЉlT&[dk0٠Km6F 6iGmܥ ]ٺC8[g4 m"'flRa+p6h8,0Gbkx+- s{YIM.;lf&Ygֱe6*BN^=uCV-'hlGbB>w)B]6UA0:G![d+jf)ٰr@֝BM7Ͳ֬bѠЈt CюUٶ-.'[(?d,YBN֭jѠbOئ6yˬgDf$ؤi7&`( `1<;υ.e;&iHl؋Klܿ і-I84ڤߎlk0(6Jf㼻tB#X g4‰LB֨T9UEFoDմL`XڎTTƳ4\V[o``9ž[fflzf!%lf KK84۠Y[Q6ugԷ2"gB`<9>aCY~Ldu! ،սwBKغ/&+lGb[iza^2 f 3-ȠrOc =iC(qɐs͡[Ȗ5yhKzRk xϸ%e]h{c0"> rL}pk.T.u_oVԵ`Kv3& <.YnU,w.cW'Jy U,y`_.T0v<v! d2*z(2L"$ϽI22y,)q@'YNvkVcdPpi]YlLuϗ%%"Fk"Y{\(;\\}=V! q]fa,,p,S5[I X#NhQǂB4'5׭6U94 HdKV5`vڨA̐: \#z<\Ӫ k\m!p`3X w4w18ϿeYg٧*M ,aXP!1 ,8bx-q-rŎgBxRlV&58כP}zb)]S!)QЫfkk \p=XxnJ`@1l0X7|iyzf36q [@t.(aֲ%%u.%caS;`:`X> `Sxɐcp2U>ە|6s_~ݭi#>N{B\Bϭ@N";s+W>̯_&Y~E<0_wm{o^=r 3mSǶ,Q€)^I.z$2IG"rQ0z$GoW/XH*RIG20y$5^".P1 yWjRG}"``(z~=<l{eW#)=0=/5Hdh`}/E2}_{GfB.0ul"Ȓctv/jM4rSa1uz$R6&9\ޡϏ5.49"_',юaP<,I@kqXw]7!~jo]}iweۇL{w'eO qIvU{C%<(__þѢnKK.RB$zji'\j;Qy}i^ d6&vjpr##}ˢ:.HOO3ҬL/ lPKpjYDҕjo?iB<;x#Ċ.)V&.ZPyMcxDyr-4 }\;í J_53CvVҭ;2#>RBtko{CG\[rCEE?e[R ] ߒ.~xuK`FWS)M>)TՇzyf sVit_H]xQPi ч=5ꅸ]X(v!7.; Vwp)Y[ 8>KR "qߣl;|{Tź#riOqka!m5DLe!mgvhz{~S>8`;b+Oi; 6p{AAǜfoOiEeS3[:5RcBGCZe-[[Î4nyZDP_"Z$׵-idŞ m}HpbyHw=N{HӇzY=bl"t7?IpBirP7'UYt}fy~wBQud+eKRבݲJ4i)dG}rAEy~yb9aFFX\d2K:=]\x 4lyBIBsLšZ󏁫(6@P@e!e#pl`~ñ\Jl_\"A#~w~łm~~ό۟\qC亏~|_w?_?z_ύWo?o!i??S@=fAKu#>OgglSMX 6Dt$Ҭo~\;|A%QkǐLGh3iAk5y"j_Ykב uvyPItH ]kךZ&!- H ;DZEZ%hxg!ɴ$$-Hhw߃KHK%0iA7-}*sE72WЏ~Ӈs[V^A?=km-q.D]+k%H+r+|t*IWZ*Vs!m$\Ϝl0 iȾtq◮w$*!>JD=!ͨR_} CvQu6V_,UHԸkɞj.AR_b$KGvuUL \{wg*$iIiJCAvHVӭ| wΚ$Iks~G$i{;U kn)j$Kȗ!IZn%o, %;MV iؿpPչ4% kWz}+n! )?B$jo{0߲UHV:$Ik)p/ P[ZU텸u#~$iB_Ļ>C:\bHHy3*$ڃ^x$ ) HJ7g7$ HVrt*HJX>i/k-VL*ZrI%XLAґ3yfUm*8$Ia*E$I Nj50"ju1$u1ś )]J$iw2s-&IZ~zTIҒ{-]7I)ZPI6M̵oe-~}q_vǂIn Z5͓;MVM{X_ǒv%w^vϷHuARw K$isz;j6SCH|* uzA̹2IL9= HVv/HBDHN*Ge9!aSQrIǓ#uv9ul;K] )u2!IZTto6BZŃ{p ${$y |\=x;,H(7I $Iͯ~U, VS=x WE H:ιCwP$跩)t݃LfQ{dZpw}AZD<*ōj,t{S̢{Tz5{;>aoqYܡWGB2σ[^%.QPjގR ۷oKߖ-}[mҷoKߖ-}[mҷoKߖ-}[mҟ>xRe4]sru9O[0y/E+JGcc/=Hn);.^~Q@G ct -7|d7 Dv5+@7D{w {k>[]` mF#P2=cZ UO읁w'ŷ5Uy!5X!d {жaa4 fv6? m7L`xr `Uϒ`p0X`ef`sȤMhlbٺpIl2۸m\M4X`76T;[ED`!AlE? lD$2gIlGtG_Zb/5I<ǀ I(ca[N1"M{)+uStY2(5w|u'5KWSCtf l4&ųL9`Cϓ`PA!q-=Pƌ\:q]zt̀S,=홸ıX{ƞ@idrFu+:}:`XEʱ丿5<rI.6>.~jtwا\'}pɦhʄu3%q x[2H~,rwM!Lh"]I 7Fde2QdbE"%Rn9`ɧXm?Ĉl蒹dr |F]C&0)+w0mB>~I _B1 0E"#ٌ` 0i،M q>% K޸KhSt~g0Qpd2YW3K v!p`yf#OI䄑kyژ4~"+X!`-hi(s$ng+L`&0h8XlHUPT#&PucȰ-7TA[Pע~3kkBf: & m L'Pu _7T/_P-)B6Kfz,X[OM1j}h{Fa6j p= oJ`-'_EG33vCėl3=ZG\p&|t,ͺxFA4l0@c`*?&irOw[@WuSi4W`1K8cui}h[0 hqđd~5,]l='94 D 6!ضZH7!feY3h6;+mSMKx8jDm!q-Sڽߛ h&4h8dw8Y|-Mg8ز!q]HxD"XQr0iXa3 ޾,$4RmkD4OC*^w}?Jmcz XeiAǂv{жaQBHl'#[U4$2{{[: ;`r0\lk$&gv?12h8 ,x[Hl.VT#ubC6lia.u//?D.]-1yÂ&xn&9 ჄH`rh"㐃u{`r0hȩ=$0I]>LO[Gx#L'~3M4M-D՘mJѴYAS&E"kHDE?䆓 K84٢_Yɖ&/$7?"ڌ #}'6mf2L:H`~ H`$`.3#ظ |R g/vN6IQ@ [+lF#lRcش #lGb[Vw5- pe+ GS m1مgSpӴoEL5ΨS$!XOP֧#i81M}EP)BY;Cs-2HNA=08E[P1i}In^. m a>l1(@VO+2mb.ދ%$h#``TR Wx^~c0 HLD6F$#ML7I b99z-Fhha'Z `R 86BrKI^ Ne&٧~7 .| acDȮ]VdE*#*Db K'kZsfa2-dd NIlg Lΰ'1l&N|9GMwU>\ꛑ myVţaTXhzpOaKڄ R!qK}"XÓ5K}X2l>4>2X >2bnT&s8\a r5VZ3YD~NdkDI?X߫K X1\D'HbKl/GOVԭF#/h촺`O?YQc}Q,06Zt[s668lglj!aشYas$"FeJhF@6D#xáNVxM}v%CL-D2[r#hZ[qЬAb>Kb=Lu s{v$g[sfڇ|$.#tiS$iI'dZD`9&:l{Рs(ۮ [}dWTRmvR6W.$2@e>AC$6:s2{D4u&da7Q*nd&j1g!ۅaB`[8 U\68lqs0>R)􅈃vfۯdx$ 4 DI*{( kWlH$ dg2r@ MдY%AF@#>.lGVؠ,Fe6y! <7Wt mG4p45G gM'"YE!F tȄD2Y h3ZwF ƶCхMEδ.HKi:(JNpMj@l}w30q/ Ë2|a4 6'R4 m{9]4e2 `w0I&`~6|EMZY!`&$3pY>-hia9۰̈} lf& qHD>#XUZk``b!qH2 g6.fӗ$\68lqs$Y25m͌Fgd~L6;I#!-D#{7oqӯz;ѭ#i8,Mߒ8hf8hqAIl!mvAB%a͂,Tb%&LFWVIމlhhJ0(R/pM'J -`(G4h,x<#2UޅUew}! ]uHvCAA`!!+`[x4eYGs([4i4/ˊdr~C5QͲ>˒!&~>IZdun68CB2%St.*,0pXlH8[C*Pp}xI4 #H4Yu4}MUsРĂo$C:!L4 "Kdn  dkN$coK4u@CCQYQAF@#>1soJdw&[C akf!نV 8f_ '$VU@Z-#GV{f!$0#F`>ٝ҅3gx*2  SU g+x\DA`9[DH`[47($2{[416˂8^`2جlҤ eAG6F͂u˂N>334[I,HkhU6ma&Yh|M)d(p2+8dQ= ˂Ql &[#d#E%h2]^hևK"C$IrMz"6҂ޖ}'Lw%4 1>h|!ش `w-+5)О4|# ãApX׿ͪ)VlEliAf"kl0$Y| _C +7,DmسV`6&M4 d2 ӱl0606h8#8nlMGƆƖ8bl06XplY%m` Ic"Gd{iwl2tlsD9N6+l=腘v6ZdӱfCLckwd ls u$]'2R{;dCecZ:,; >!0Qŋ0_ @!L@q%\dDidqad7'B LǫLK [&a84Dj8404X[^SmLc[ Όtl`C$,RdS  nGd R25Ũ \eL9i ]`LJvLa RKI `W$6 pllz`F`CYAñ<6L@)Q^[u)eJn&E ;'-chmYq cqƹ;6Z6_[㬈Añ '-7"h,DIhLɤƺ^-sz;)hs498@Zs06Qa e0 oW raquΈ4 W {( af@P2nC}*YyBrgLZ^cj1A2,vftDxan 'aqOƂaBhI°a\A0(Xa Rd; l8  6=Wg\IosIB+3 DkIU4Hفa h`0`Ö 6Y`00 Lfpp+a 4aX0? s+7Vg;`eU(#T2isRjЛٙFFgiB[(``[ aVjX/0Oɰ'B F k& CC܅YdA #^rd`[\Añlm3X56pl#lx<!ĵ\ Lˁry3 N\u`:1l/ Ff XlkI5W [0y/hiTedb4&$1Bp(if!RdyMd6_h@ \plá1h;2hphI"l} GM 6#vOXZK\50h,$#aU4RM5 ' 7th,DpMG{6plqlAZ05]֊gC䅱YlAñ5]JRaڎ--lhk[Nq< ~`hxg CXrM!CRHpHĂ!U:$u=CIMi M]3pFlrDF C44hpd4202^f4 "A&׃L" m16ih#:-[c$I&3  sL40[!ӆA`:=6.V0ê\5,hl,(6崑%%IO!gX*F2UBHj6L*B-2@oVӰBB8=X# 80D;0`:@%2B &"?dXȥ$2bX`%!FQaIA!V^mxVb< YG%g6JU⼇QAcSBLN{PmJhphXa!BDF09s[n~\A.}s%P ò`  J7HWfqv4|I0!dvqaqq `I~nf:nX}z.Ya4WpKf!`]Ng^2zdm+cĐѼ4 F0`IJ.쏀9!#rzeH ˜pd42l0e[AiO< #6و` OG指ILz% K ,}sa^a\a`pdb R4@&z.4MakD@5YY`Z4H.l!b0X hX)a[ax$@SIJ Э4`IA)o +4pPFdz #t lF=f:LMƥh+s.,DӁݺ'j҃A0UYbL=&X:?#IX-66GH"Id U<$OSt+b'Y)&ѰȲ-d%o,=, YX Vj|f'׌Xr/FV:>_Ok?|]3ժJ\B-tƢIp4bb] j4 ǪDΞwVc%#y"s%t֨-ɲ׀m!`i ",O6e KsˍTH$χIHpK'~%#I[d >o\%J'",?oDX~^D RTW5"˘EhonO$rH:/5I(슫O$rHw-˓D-Hҍ%]H`?'a'ȱK3>9sIx'9N$yK4O$rȒp[E-ٟHdp#'(*l]D"{> ``q B$|K$oڈHnJZS ?ʵHЩ} dot҈7\pjLO$2$}"ޒp DJK'mw? ChqI3D"-咰-YDOvd_E][WktႧ^ڴz7֯xz?>6n$kӖH~YYz[+zT0 d $H$tV%jxqڣD=lUiNYbM÷J -VZHT*hߤfqȅ;t%_@aBAž&ꣶ*xdJ$f]%u(ARIbH}!ݐ <$KZ9'ih+ڦ,~mJȦH$"L3L$&%HP)!gKдK*u~iYϙ=K6DE\-}A|7~񦒦̵ص]D1{I]V|Ino$ >ғ4+uG2uZoh &[Fp-̟zf e}5cJs|<+Ku[ rJd:Sh+Y,B#TWֳ@X@{[~ūgKGmh@,;$dYtcL B?r]uMtX>fz2^իz+Vm PVܽ΄G 3_"dA_ꧮ̟*D{d`R?UH-S>|!`R9mbphT[ۡVOҠ3ם2}_%Z\БSB}uT<$Q"Zɯ2s IGwp \oE:+մ|$4g39(~6Q@D{2TeeZȅ×)WŮz~ )8omSV,bN)љqV2zL7򽖳S5ln4=:cսFZ/A3:  @ҭp%4ؑ"Li5`*ڗ׃$'=PÏE"߷Jsi߫qCAҴ:?$Sj%krGy0BʫqE~곤Edս۫WA~ ZZ2V:lX9Oe&1jrMpѡ?p%H6 ;STe(z.75mBx$bsM]w~kN_e}͉ zh`r`m\-T|ťFAzavɔ! ^"`Tf9&l*]+zW!gI ֊L-?Zh=?땃Vѵzpud_t( ^"K= JN16*2׍Zb$^Sj;PuȁC:W G mԎl!ʾ=[k~cy:MZz?B5S]z]jŴ#!E[\Y $L7Tiʵ#AI{`ׂtmvA%ʢeur3C=tfeQGOMևa ֞5 =n8t2t "SvRͧ:#U*Zjїn ї, +P%=ǧ36kD%sh'%j7v kўdJ:u-rj}u 1]PwK'E⻰8Unm}$7]v?9h*J|׊-i~uq_k~N~Iw2hc)kAGNѭ<\}]{qDVE6#PFt\;}菜`>3{Xs|9c\QcYEDdȑc#t:K%ΤC|c|nh{1ѡ:72xqI򵺂Y%$ qJI{a\'+":Lu|$Қ>cdr&֚>cTG2NWAFV]:&7g9HnaTMIÜԡ#'L?}B?_k֊3%{股L@bV S0aVI``Ri#6os/&t*JqZTVR.ҥZZdbZ$5a^ ch$UkuίkZ(ɘ<]έ< u7{*]'b':3<Ҟރ$ۋ_#]'6GWOPy:7Eȯy~<[gg~9zW~:t,}]6>y_2?`}_E[+N=Ioo4&.ؗv? ߙ˗uZ{'| 4^2G`fR]Sqv9autɜ`m>(/#_w~~+Y[~׌>} 'wiڛ/ݥkkOw<^S\i_ֶ\~tkq_];~b` ׾]۷z?uǝ֦޾颺 6NR?n_zCW["gk_ï 0F5k-=fXWdLMEPz-yy4v$.%\ɚ6U@ g]@ 2A,.m,bI PxEfE0 +3 /}lUm'Wiua $%A|jK. X~?9$M??ОW- OVV~|__7˿_zR2~y9[J^IjԖ(U?-Z"O.0'뢐_ooKz釟Zz-HUD-^Z|ؤ 9V7jԚ/Z}QK$tx;j~_wӪ'9Z5Z{O~NYUI~7q~q~LKNPZZkLDⴊw(:uK& Z qjy ^WiArh1Ju_Gg?CvXzq8wՒA ?)VNvlZUOO?֐V]묋'uC'ֿ/_Ww**7ک^5؟Vζ?C}䏮55䏠>rOv׿֬<{Ƶ4TkA[Z:ګnjIZrcЂЪԪg55__R&9j?6]dSh1LVwB8N Q7IКXx+Q:Vdkq'}_1?Mc-핍&u^{DY;[$Cʰ/.B>{XrFϯ25K }x]]?xӏjys<~s6懧|Vb/q]`/!-!^٠OmZ\WϿ[pcMc<[O/LO^ekAڭ$AkE* %*?`~|}KWIZQAOiAV%7 N֎DIJZQ ?\,ؒ`nZZ]R*H- qSD-f,Up$=jZY/3$l5D߉.@rh5=5sCZk!9Z Zsl1C+'٤$tDK.!9$ 9hӇZMO${ZS?`8L~z ɡMD 9],:nCk9Crh5$mf{;M]Iȷ ' % MɡUOWt v,ızwu|NA6t euhƫWkOJ7o ۹VDЪVEQɡլ,jZrеGɡ&(Z:]~~+5?Ls/{r| XO%M(w??L, 3$h˺CrhZy3v.$v-A!9*R|ՐZ.tyHڔ$Q+^mb2*%t %V1`z RڞU-yK=).6_ZԀLJVNRrhY*fwpx ~CKvq-$VkM D Ck%Cn Fɡe=M 9v~ >5-yXA>)9gw| ^īn3TEW!UgH}~WgHO]w%9VoC jZ ɡU?܆0u+ 9>-yLt|/*ZuwCU?qj~5]Hպ .Zď^=TwwZP}A}RPDɡ ,Gvbf> 1S^ VeƲDlEN60Xt汚Ƕ=5X/#T86hȱI:AX` ^pl#d ӿ z/˺<^w\H )5Y74oI,;Mm,%-DcUvE{YMM/F/1ȴ]L,4 2)5XFZT}ܓhhphb hl@=~Hadrq]$EP]-ޅcI&pӚ]֝KI īpYJ\ V] ;4 0):OmL}V91շh =9h\)4 KrZ?}jR^ޔlD;LeDoݏgBc[4y@h }t!"Mi]!53di`Nr2\OpcC RP}G:c*XϭP?Ft!ؘ4ȴYw Ӓģh)R,4 \r3Xc[dþ=ru\{.0 2Z"&iFt/6"!bF뵺;WM{2j 86"YV22摮\r _s@@p@ݻfqVLgZ逥 l'Ȑ'v{L@7('7JHcT0xiNAA>4r4Ә=`\af0rmt㙁O2+Zo|EM[eۂ% p6z?Y,~ w4b,%-DcћDRjtj;>lZO|TXy&5u-VX?kOX24` i 2lVkm &7֦MH;.ӚAr21; MM A "AV^ڈd /y#<2>ɍM 8`beҎ^zBdM.N5fIdRz@"PEq5 `#q 3F5(HSL_Z.XF8(l}y -ĭBt^!]XXKVg+ )';,4]j(vxpQ*酵 PΚ0=~4/] KK$Eo;4]j4)^d<$bd✎L'( 89"ܴvR;\wXX@r'i:+\S3DX2G,$5Pu&[N%EH 3XlFyb@պ*XFpTktSeYTs J,D\BIV)aŭtIJ1vPq5yp 8 <ޔA?EFٓ`b!B`:Q=X&XHhplójlߑ'h869V{#H>mRmhmZZ9fj2ձS; 4]jG[OE=+&O1d$ِB,0y#"E E&vXVnXƦnH5yCkxV,R!eF8-ș; ImB=AlJd`00Xp`Ge` 1cC"5`܍l G0E[7~wMV|: fR-=gрf S)Vdb1Vd3aTTO(AqG5k:#މ?[3}ҕ`Or0tVL 6 vL3) 0h6~;q@ɟķy#TM@ j$G5I%6*a[o,xqIm ؿiܫI8GS*i҂%t2q264;SFk ye64OdpyZ<Y'XxBZN `_qHkg9N6tGPvϦsRdb=ql0I,c mȖ0I^[8ޚ #69ȃV`A5wP#eFdh#8 ,Dm&2mDq  crN?Xǚk )5 }`IFl%h06Xpl=Edkϱ ,m6hXa!rm/q}u.:VxiƩix4nO%,}};NL0rд`!i!PXK 2*DC|NA&!sUh(ic]XCwZINq%;ox۳Ict`cQ!V1l#lx0<!@-m^#X'X,ݲZv`O ůYRPñ?NjWQ21d#[Q2XVǶ2zꀛm66{kAG`#ڼ#ڼOj[#`)~͚`p`9\a*i6XG lHDct@#tPG6L)[CDfkh =<郭6B]?dpr=I!K2 W|n]xJVH&J?fiC"Bx8@04Yq*lЅ7sml6,D9M!6۬ M.6X0fk}MVtb Ml5tG#ji6Gj-e`RsٍLH$4JsVjXYQ6c"m"h֍74h81=[>J#VX$Pzv)4F59~PUT` Ö G^ָg``曎ņ[@bV\1մgc%޷[l>NV݋AS%K sM4j\ M\h^Ê 5Rj+@+%i#G6R$15?G6gdаR@d:Q=f LlT>ɥb /,\`NN龣qS1w@j3$^ $\$+L|ErϜL]gq 5<$xQ4)Vd.~ _x0H:0-q ňX2 ƭ;i?;, k80-Ƅz&p6Bu| gDGpPM[t"T9`4EQ70ôL;`N;f0 %"Rt3>fT7bH5R3-g+1:b!HgZ"PF-}&RGm1՘'#[DR`v&V2 ek-X:qQlcƃMlқ\C)L&+~kFS +p4FdlM{jԴvE,gSK R0S̽ӧOgN;n"#NkG4uσ{5G0x<-<ѷ`;44'O'j<Ш=ynKe<{^O8N-mh]0D gT"?iV>Ć0[ComFԒZX ?,-PRS`i RzKXSG28tkj G%r݈!m1q@`8*N\#B\x.U;Q#X1& l'ŋlHQ>ɺ:uYglbdؔeda@#Hq5^fvdC=Սl3Fn ηFWLX'L݌b7<5AV1e}b Ӵ'eNX]3EN}x uZu)dَ X:&73oH 4P@}:`b8"1&:l΀oL+Y Er KR2?0ʣlUuV#ŰfX{XaX0wGx##ݑeCl/$#~iYLyHEAJ7HE4jvY"1 L_eCXOi4PH(&LcɺgC2h82=dk61õhph}z4X[[6Z#ZO~{4@f7YK`.dF G&"ŋHS6Sh C1)>rD-vj R)X*JҍAEJ'ߖبN)vӚTraK-WwJH`;ŋlHVp<Gu`185{-wS0E/XaA55x0a \`Tpdy2;#YdEٿٌX[6V+ ČL_dS2A '2#B2%ƩSNGΤƬƚ9`1Hfc1` ROTpa!I ~ x=`iSrݘR i灴i)LqrŹre$n\ٜN9`q .\#`͏JN(< JHO2t=g³̣Ғ(['3ƭ矛K'FPrgieip2@x1lQX#&XE}q &v,4L9c82db vAH`Iְg;aMpۓ@8|ƈ`X[p`cDV}'Wo+aʁ\UӸ@`xa({O؈FʕMK:e`˜p  "AVxR##kL5cd- u,HAS$Iad:-> ë*)AFᙤ1n !kSӃMs`k6X\\>xyb5Wcq+E ^9}luAA5\7܎6+)Fj6䂆 n VՇǚpKbMF ~GnGq ڴCt CS K;ٚ9 ي D"v;606X[%CE6F6v7[@Z0ȃMgvv#,'3CQ@n>If4Jwk;Zq, Hĉ찰44PHYPqœ׈~Ʋ]e0ǃJTIUZG:Ʀ_6C5P{ck;{`q#u*UWgX`/:esA517*6[*r-8NᖣsqZq ٴ"P Xzy(pI "I h'cn9ckV$)Ha$޴iE" VHBմ``qq)-u>sa!`wojcu^sº9Lg׷D6O@K%߭x:"(kmL5F"YXi]Ymj4miCDPhMkY^O԰rBP)Ax-ibjr.?θuK XB4I <^3[ H dqLe ֜Yf+NMH ؔTm 8&Y~iMnY^@|@XTu%]F8ɐXsbiX7NMd ]K'$W8,<^[B2dQ  ]Z]=7ԑ7qV1pj\:#$_֮-C?ۥPR ʕ:8ɔޕ**eM$;T$w띛Og$7x H(HD֌ $QV|DErC'8d%~݊5H`˃@Fe|O$~mCO%tt/ H 7+~&PGN'5|*&U%"YZOfȉ@zM SO8/^%zL 9Y/A $SD.!H&Z{Զt֖-ERotZnT'O"3J }~BOͲd{曻S4nrDn J3J /*+h² &9W2$2$UvSg-אs|ޥ+v$UTn HI6DO^DЬaH*["k{c-R,u5wkl b< uH~ӵrkSV zX+^''LU;,;,Hܶ^Ux =fKNLHn!ዙU_̭˺ UM<7{(LVuE`>+k}*$_=5R`@e>zuQ,"hXk)_yJ%Sygy!֑{-o)V^:r iͨκcF7%s:Գu(*G*9Iu?PR0~ A>4oJD?fZ#6y-N<תA(ІRAH[32eL"мorm?M͓vZӌ6HDgm²SЛ6mn~f߬ae4kW$/ս"-~EgH$@ el(37gHřRI|GF}՗uOy0Cj'QK="QKj'Q@,3trۺ_V:}|[뮻 Pxa诧ㅥㅕa, S|c7V˟:`F>Z:ޑjZ7U/?,Òߧ:lM3aO?L#aI˻с (Y#\vn)@ E>;P,i|u `. +K{@HY`ڰL@,5`F X,5<şz< ];ұn?>U|~K_W[5c'u)0GԈ툺Q}Kh-&#j dgKkڳ>;H+ ? ҆eJ Gp(ɣ;y[e P! zP<q9w"?$nXT 3P֭aڸL@,B!6KM0O6EW?^V9^혆*G]ry[,VKgz:7R ai:QuWqUG>|VCgT=dCg1~{0Qw:?VW ;WWV91ٍ|n? ¿dOpv^{tՎ%v6mbSy 7Baedث^ѣ_VzUQֳ:Guk|_Up#e^c2W/&)4FS[߿uo7?CW}}Zw{%U~GXVǷ)ۖZ/W?XNYPyȥ?9xK~1IMR XP~~| On}*tmz8 z 5nYDIкT^ C2ӂ_L b|jݯctݴ$_Z_Z_Z@0ɗo**k75uiAGϺpM͠EɟV}i/sZIC$ZUI 3T]ɿV;/E:+}⠢u*Ѓ$VV}hQu 86kZ&Z\IgX @,hf;3ț.όŖf'yt\W?g鍇|>_dkOx.9#gQ\YÚ?\\7GϮW~ˆuj$ ,-^>%7ko}߂K+p#?ei^t$ANU#yM N_ NmfJ-^%Ak9_$A '9-;iTup|HV^\D$KoY^1jsq*U5./@7"$*an"N :"*Gbj }!JeuKNUIT+P*Jr (2,$Q1Ml^!:sa8v!@\$Q)5G;;D%fdԨ+ekT=k4=@zDFB&>T{* JӵVčZDuFDUsl5D%s :^;=J_G KėZ%Q)i*JZ2DDxGCgCvUOJMPITꨂRU0ڢ >t-4mDZ?LZrmbNTtJDzԒ"*͜l*JKۗ\;nprήJRYG,QV!5ޝ̈$*֑S*sAv9Mu#IYC2~TeKIPZwܮ$*%V6CITN%Q#JR$%Q= Jc&}%l˕qL*JRvf*Jۓ Ԓf|?ck(J ~u Q~l<;mns#nt_#JS H)J5VDݑv=2$*=J3l(=\DeRITz:TXIs+UIuWQD+u *J<]HJԳQGַ#r֑lѮ5Vi/khtm=g,%56PK*JY/vJYOJe%IT>NҚՀ̮jwJ ~nM;wٴΫmmOnmz7}72EHIT:Dݺ[}^ )Jޕ4IT{[$NYJժ@- Nc ȗaDzxwT}J}7oo竁ռ[SDf މJnw&~"rtbdHT1#ADNEuyA'QIiuL JލͻiޝɊv$Qt%Ho ҫ}O!K)YgR:[RZL zk#F NH-"-tzHc]ITzH$QkK%Q$$QiJR|m}H'ROL~Ko?v>H+x>5d{ʽ. :"Jc0($*UHQE.t#nHҤj# AЩooָJ=UkոZ&Z $QwHոw*TqOne9bOgyёwyJzӂ$h}e֗/[_l}e֗/[_l}e֗/[_l}@Y$\j;^"Jڤ9֍ߏ\~\'ү%jiҒ<I+s[X杅&,XF?ow [ej mgP<+Nhr`2&xndz^ClhZPj!V%&{:(pY\!CrhzY!O@\>jrH. I.}gx86uGD CSr?%E;$]44Q$5WAZ|<Җ%EH Ce7X2 XwRM@5խJoTT0in<% &&9DY"XO&"d$Ȣn{6ȒrjgMK7Lk%zYre!I"Vd<%;ji !1M44k @$Wqc<4M4x<$")|zm*o؇;WFYG+ȡotWdl}.H}.#'|>xZ<3ʍfGi#q`S 6C^ g ץ( qr&,4QCtR`cF1Oqt)R{`-EQ"('(/r(VUВ`Mh4XU!8Q?s嵾$A}~cX×OLgj 61p@s:)T:Tw;8*Lg<>t-D14C`-ENw0:׈O;>`M{0jNEpKf`3Ԉ# X%=TA5B=ߢ[2 2 QC0Ufq*P҈i&wKKXQ&dG"M JA =aUu)ê\)0,hдz"UKרA*JTC582(h8(ϨP:ڈPP:n4('w˃*a&cc8t&Xf\C'3-訒X4aX >"U euLdDfx[զ2H51t.ccq.cc s4 "W[zy5"8g JPrb,X G2STucP#|XTP@ |d5B<\=ԁ5Zjwj9,)}CiO tL/E{weMjY`Z 0`!bH԰RB81c=|<5aXiD%3j5 %VbX0F`#`#0,I"ylݣu-&  Q'F0A % 4 Y/|$A4 04hXa!r[m3oU|W&W&,{I1,@*xJ^g-8wpsKF /:g |!|Q@ Q+91Fb +K+Ճݺzo```b(HUxwC {5Vo$p8t 0d8I` ᰂc"׈5?*6Rb1 kjuT򿚦4 "F&Ψ߱BԳM(̂oЀ)jB1PƕB@^H"lHL3PnZpd `-` YA`!rleE}l{^Z8Ylv&`,F=D`!B`˭0t^cycZl L4[Oqa2&71Andi&l M4mFejN^"< mhxqdF#Y'h8IFv[ *An'Lr YA}EesñPcM6 uJaF?F@8'; |F:Fa8Mxl'њ- )'[EL9ݯl%w`@0Pb( VhX{k[owϧ8êAl)A5:}H%>Ero(J  _pQť%QR[5`{;1kBі'V-(Zfe`“ɸfd(Xڃl ɐ+iȜ҂ N+u3hWh0hAYG`H6'V.([dsqmY~mk`zXǐE=gdY@.ٰ} %oN2qd#&DٸXlʖv,(bJqlӣH6-HQ4l`ځu_0q I ܏!LIʅ1%C6s60K0 X\qAA`qIItThK9 =@Z= 7-\NpVHȵ4HhA*- $(oj 63:2Օ-afl\@A3d a[ųq RVt lP6X@e[o k$.rcQqՃqM뀴!XQe\2l(dSAH m5 x O Jdy5=ٚLA.||K6#dKK$œ)^Ȗ!X,  0`" pqCJrirAC`1" *,Ut\Ż hTBdC 6Sɂ5‘坂&F@.d# GZL4d᤼3 KX}x ŕĪX\HA 0XHT,٤4{-ϵV[˒uɺ,d,,<>o߳V-l-R”LJ-@[6u B5JZ/l~5qDظނl SHՂa[ɳqAٲ|L*[vACٸq헍 dfDظⲭf٪+*.$,M>7#t hcx;B1,,(Zz!͒q_JirAÐIxiJuDȸd p Y_m0Ȳ E[AYc;-qWV! d0!GMBv'Å}|9(SNHRŹg\~3}6őįŀ$)D_)a&P 3j:K((\(LZ;"\wcyZɴ踠\wo{r``]q m5[8 %[C;@$ 46IX`YHB,ܴ äez 6_e-5qOظlH 2L"-3A00/`\mAK.8.`2{8{Ʋ,Epxgp@DMq9KϽfcoj 1+dd0d=YG Փ}-hٻ-a5EFD[âU矬9qy0`ȜтdјA4P4h4矬#AL咍-Vt.lPX0lsy6 CʆM5+.G`flv+.Vu>l0l=| mzܣ"3" 690u{$2qMe2,7dTCOH> Cq\^V%Y;Nh\[I 㰍D6O%851۟L,>k0X˵A,R'M&@C b=>~C4&C䧕WOOIٕ QR8y۽ѼP^%̑7G!do K˟;S 9(C %r2O霹=jޅ=J^%#$HG/Y. I}+A>"$$^$2h%C cB $2?x')bUr#;W!@UrzD{7ӳ[ ]y'ߒG,ۆSc߶!Q|rJ'm%3M=hF~bO܌ ٛ)dgrQhjSù"4`ϲր">EO,Bm3 8MHX*@ŰE.#!@X&HhfmXabf7`]UZ``W ͢6U\06B5հ(6ؿ{.|b_S\m+?~S<>wwןF~IT=gg_?~W?J?zΐz~7O l+gwb}M|%?UR~W]lxvrϧ5}"󋍫G{:&U2thMՂilm$ӓDӒjAj#jAgjAԒL$1y>j$,ZX}%(3'ӂ[_|\[-Hj3Yo 3DtF oJ"'Zɷַַַ B-HbZL-[-HiMQ}C=D DAP4?eXr) Z!|$hi = %Ak|s^'sNl۞"m;7n+{I8&X#B:bJ֊_b(11) ZH@IЪGV}SA$Pe7.S4*&%AKmKTP]GIJ8jI{-u-^DFWS+K^w " Zj iKiX &JjqVc'^‚Ggno/|_wB6}H{y?xFw( ZgZI: sӪHEo?>" Z'Z }e>2HʪW2޼̇7/qDx5e>޼}N7/DJz¶K$Ab(( Z] "2P_{Cw5^{q"y 7/u_޼}hUAeXH}HJyVz@Q4$A+k Zyo0qNIR­$h5BCH֠㇀$h-(姇k%}Iк%"$A+$hݷ>k|}B I }}Iк1ڤkG?e)A\o^f١# Z \CG;|A$AKJ&( ZKRZ^40`k`Fx! Z *oZA*a-qA*7CQ8VamR_uD3W$AOk7#վRz9[jG^$Akѕak5uj7.nT^nT{^4PJ֍ ^Âz0$hiXZaAjLbsd}$L)2fUj5 ^f «M ӲZx[nwݮv}]nwݮv}]nwݮv}]kusl-d%;1xo9k^eg]_5W.cń)}#yޱ0 /`&҂%Apj%r^Rr6ؔ=Ƃ3vT7}W=:`+V҂ O9fOZ3ݍI%9i1q JZ;Np3ȫ=` -j%r;jo9\jQ9zE-h<[& @:㶂l%-xsBivHiN*[bQv2@q9R΀-%;e e֓g|&B_69ɲ eWhge٢ahcAWd[]IVpX%!;Nn $@RYӴsz Q> g'khhh5JZkbe;[d+JٱAð ֵ?`L F?>#Af~XCƳ8M0beRrNqڭ  F܁k, $T%;chywA;0 Ao&ㅍ+?VS^T6 (,,6 (Dp/xNٱAC l넏;,hHn/T@g3&E 0z8ÿ$`YM R>`h5Ѱ!.T :nю,J/(m|*Nё عC>!)yV.e;͝]:(j> ,Kg)"Y8_4C?>n+o' >eɀj<ÀOߪ2(@V!@i!D*`qyKb` Fkb$ bTrp(xO 7C`ƪcQ|L`| )I "e] {$ּdsx29ܒz-|B}uH٢Qà mxl'*jL+,`F`"[NٱAC`s_MN5x(Nٱ%&3CmxɆs Xݧ[Z0cā06oF2 `69DCxaٳ% >G]pكM|]U=تlY00ddZu546 %L4Vt~kau6!Q ;&EhlԐqdwrdP2XpF#lYyrJ.);0h0{  g˂ƌ`ù,x@6vѢ6^ІC%N gMUd EAs 5^=Y=. J WOΕmuzD[!H3rkl+y"J$6\)G)_)7ea: HZ oRlP6X0lw#PdۉlC z9V $$gY] ݎP>hu x,K X}`ち"͞S x}P]r.Ԩj5Z~p$@qʨ˩,Ku \^n"_+-u !* B)U#P T-\ U$oGX1Xkys$ ka\Y䂂:{&R`yNbAA1pZRzG2712Tl2RZQ;58.:kf1|ŚQ!p݇:u= kk8uTUTJ:.(sgxq=D:e.HsWF$2S%\|ؠ ހd`n>m7ĚqTg}G'Iv4³2:`+V҂xa㮟daGnpC^M$9 ``!%cK>5g$Lp!&Ft⧀)1pEgj.6{SX`iCX,, 6uFld VDnTa69<rI@rq{Qp$V{Qł6SdtEAsK'ӓd˾ XG [H@h={#s?Z0l;smAD3RnVFz<0ߥlTC`&e|]0J9-d`K֫'Ód"K+.pl`hC 6M[fu:c[6#y6KB;t1ʇ-N5uW ,K#_P2/u|ؤٞaCyacBe]&lCRʖ5l\ޖظlãH6iѺL)Z紜Aà9RȖkXL  ly樂-`AC[ "-.1dC$v,1!]ɠaVdKPRtf@/hӡpl;Rt8 $]6d6}k{&BUNDda;< [ZrqȖCY1D6;7? %1H2HUD*\٣H0Hùfҕ=i]*]٣`a`$-[zy>l)O}!l IWLלW WSJ (&źLŒL#rUB/Xtb>BRqRIڥ ॒9¤2=ժj"CX+wUtmW  8ոradvOtTù/WѦqGTC桸B B-Zҩ?BaiSaMU?I>i3\<\U,}a与0GP\Ig\ң\P.X0\|bڗj_J&jGtBdP0P>iaΆ J.\1 "`Kr>j5OT+vHuM6'Z\C*N+?0,)[,j(j9]U<g.ײns-,Xz9=֜kNZ9/Lx}ƥ#D(,!UGI5JTPGCܠ8, 7(KW܈5mkHȵkD᠖ܓݻ/އ0C0j|9?z&@q.!4nHLy=u>B 1gXwVX]7,X0\=t+{5<k^w:ى'"2JyhlV-V6Ϊ1$Q ,K/;=DqMRW`+is03lMH6x r6*V9Ŧ`P0N9ֹFǀIlID 5:Da=MnHz>٦Ǵrpz̓i<dGgX$Y8wَ69g8>Ie!?ʧ|ƐIT) {e:|_GA[ "ݩK6*nsN0q 6,4gEk&1F)6rAp\r2ؖa%Ɖ=ĞqbĞxaӳaZNٸtei8G6jYR4E9TthHE"p#HLpeu6,Q s4l=y63]6ŷ[ lxI&ZBRlP6X`g z X2YpӹxBR1j!񁎫mHB`h_ rJ..Ķ `[ 6%N)4 ::[QzHx^xݰ/*Z<\t^R |tDA<2g7E?>n6ҀdU/ٴ`{CsqAMU \Eth1p':< ɕt^0Y:`&7`=[l5O6{`E-:0((\YRawׂE5рr59)Ü6T; g Gֹ4GɰdsX2. YK6-hёA w]cdXd8Qɦ./Ztd<{-O6#{F 9Dk-:2(haS̖ g=lqIx%**l8ǒO}BXn^^V˹yaBs}Ǭ:' ]Un+q-Y;eS A|.Axth񐉢*Lr`}p|0?|&@Y x`ItYs%r|jR>1e?-r~g7H{ S|F@m=B|*G&T'D(4b"URb2UX{,F-2 0!5daΕwI ]aa4S4 Fݨ1ɞet8ZFC2/<Wk9ˈӕ9y ռI̸w,*i%q$' oX{')]G"$iI~#MGS_$rn7sl7ELVN *?$̝(s$Sgd]XXFrዺIS^=Dfj2 dǝVy#9&??8a^$2`㎢Q -zo$'qc7@\o~I>t??C{'8UiϺh֑lgOwNG?>MT9|~!/tͭw^ $]޼iߛ#2!'us:槴}O COpF> !/|[;OE-nS^9!S9sajby735vŲIc:^nX;U9ޠ{*-3⮉];Kb3ΉN.k?L#N\m:%PEo=vNnLn6 ,+TlN0d''vECn3$\_={] ~ʇ& O;ODI޶W)%*-TNs)X`mHz`2;H@e/Pe̾>?>Mĝ `:>J_K5e.U>ʥ &U04₱?'>@_ h6ߎʥo52*5*5V&w#z g?_?rكU%?URO6>)~+Wo#g][m%:?o {;(7o~9@MvyͪyYO"UW"@ 8Ŀ}_o~1zHSFIL6|Zy#3$KjAb^T։$Vk:%3e Z6Z3k9X-H;oIΦ#N f3jDtΧS[[[F;%̙[-HЪ1i3e qZՂ[[[[[_$ X-HMh ZkFY}kZ>CF6%iA?LT3~oZ=~POi(qZrzՂhͽըWOʥ/U$hjqJ)}L>ָLw%wc+5Ly}gOQ3L"?NtTH.~v*m͵ŧ?}1j#=v@9fi8=RojKb+[^kKbNOsV\$$fvdn"\o?"}<}ǟJCaS9Ego#PbҒ8jGζ?**JXONQ*՝]$V,oV-n ܲw 6lDڝ ki$hPNu@UM`ʑ.ہ+5v5$i/u$^Kv3/8HVזHVЩ[HV$hu٠T ZHp4$u2L*yH-$+LO&HV*,M6σHV?>xm6$iӃ]}SV}R}@NETxM*[֋$h5x^=" ZCVcޛ#Lkjo%Y{,~ov˯*{H$G@{Hk" Z=ջm=ds_;vs]IВc;AA ,F$h=ߦGtԧ Iu55^}/W_Ą$h%H$heH$hUE:$"cɂ!u4s-.^wե=Sx%[ O! ZD uTƿZ"DtzSkQzƻ!Z]qDGqD}HVM %վJ}*G ;?X,v3cߜRo/5Իƻv" ZGo∡!8CZRǛ0bhzF FFH$^k2`k1ko\k0?|F; z& ݟ]$Aŵךgak9.tW_ءk;TVzP Qެ7F6$AK~ #V.ބ;2yڡ. #ۯ0=w Nj d>Ѐ$hK{ 茽sL! ZYHVz3B=?CJ/koIC@bIкֿzVK1$h8C⵲1-kZ70&|otaϗP9kH!JJJJJJJJJJJJJJJJJJJJJJJJS(cNN{f$?DO2R~=)(U}PƬgXF HU-7 *Cۀkqy֟ܝsV5$YkyeI(f8ј+-:$si=>&)R&[?,'oXIZ>?5D k}q6eT@%S vր2jhX/`#ys;SvhP6`Flk3clNٱe CYׯ$*a@r\n.,~@ba^ ,50;Vr+@pIm|Jh.I~eA52dXLJJv&>V!]ZW;5Z;@@1fPPX0Psx'C@R r\eH﹖jJbÂZXSC5tjLO5f:n 9aK^#s9ZP*9n7rJ!RP UO)}{CիQkuzZٚ%ո2rVZ/\+p =5*gpr ?\.h\.Zb*M 3X+twjfģ- T3 4Kj OS5jY k:SEZsF\8e.`\0`Pxn$ZP(׵x5Kd4LNA}XoGA%P-9AC~hW᠒8-jٮ`EƉW6X<5.<|?_H) |j!Xo-XR0  `V`s5<չPWOP.H+V.h(,xVtg HR5)Ұ\s5m4qiNg  E#YCEajPMG%vj`rez4 -뜱g0xX8>,X: #W:e %Y/p`?P^ vj`3z`GÀM*{Lϫ/ʎL*CJuʎ J P!HUv`!4BcZ[kE,wop'Tc<լjH5궃=TuMԲゆGl~$gB4:W.hKXuϠNלZvX0aEI!`Mb KXz-eԸ\vly>y/'.( |>1Ea?#Dk_-r-5W'kbQ bfX#j8THIb!yNnB]2|[N`z(31j<(R$-^ LR>hh5JZ/lHQ"M6%mF&k  *y,XT"B|EZ`?Q99MO⓲hȖRŹoWBRVFfw\Ϟb-$3j % T Uǐ:^ۜ#Rx3CSk.5uٽPxv `}mK;P"$-&K$CYdxf4*4˖`S0lT6Pd84q\)  8ǵȁ VZJ%X~0@In젠qyXA L<*#TYw ʼn>rUdk}Y/?EG%'v*A{l)R j9L)Pa 5+b r0 |\!alYK ,K[`C T{ W0\S(^`z0`=0]`uǶt 6d= N)4 pl#M%7AђD(Z℁AC`MOu`J61EI?%{ߗ'(Y#,s@ɠaȦ{:w0gЎAh¶]w{dsH mۆ`ʶ|L`CP2F"Υ`5 VтN.{ЦO~ '6g5y-gl‰|IYʖ9(l8Q%\ F2Fj?1`8H.Gf);0h(XwWK>4Kl-ܳ,@ֻ'*qɐoȜт!CnBвРaVlG6f [r7{֝rqL ^ t`! .Xl܏L`Rd6S}c :] ]8$aB  ma\lddT6hУ:U1lY5h  b#JOOg$ӓ-@|/G8^XL#}S`L<Rִ4GrgRH`\/H3;$]*\0\6皬#cce_WpDrB!M8`0QfDo\߰] '# m9֢S7.y 6g%M5:[h[D1=ژmNLPBm|9q );2h2*X~>Ju!uE(YH N );4h}k86g[ݳٜ҂Jlz676!֓gow,#/Bv6l{ -zH,/S&NёM8M r]D&SwlzTڰ̀ )a~Zmd+_ͣFh`$ɺw5(4 sOȺ{ G/vmyhK_٣Ym19d lr-C֧'[ɓɜт Mrd~֎4u(4 y2CX@hwlPex6ǣ`0wy2GMlPd$?x&eт MjlkxQ=ۨmT϶\(^Z&xG\Z/TQKIRyHՐBD h8 \0D`+`C#llr\ܓrqíb bed+kaBݴc VuKbux4pkb\wښZv\P.Xq7-& V 6tO x4@0 /ت v4 KVV˲7̓qO f=.` G0]&KT˻%;*1RMj<{okˎgϯCiI&? ou-S%x`גKmVA#|V2`+T< U;\wj̈ŵ;kLrz,X"׸#"d;hx`abq 0*[b=5 M D,su#[=dȣd Q0m0ɚѸ:gX?G`yIAl#,0D&FzdKs '8p%xLɪ;Gj~17Tl0'lk94hshтCwd\FvG2,sdBD،$kXOAQ2h,8y裲h04X\زXUAQ0hXh)Mj"ƈTcT# H%l6 Xhؚn"ZAá 9dnwBal=$т#3{|ZQD44h8#Mm>zhCx43"ޛƈH@j/H@ yHh m*Q)=+-8"[C(l (8g=Ѧo煚l5Ѩfh;jlܑl'=-l-#ظzd7YN nƎh:4Zsd`Cp*(ٶN+ -8vݶ2lbm4+ s96kdd 5Gƕadkd- l,21IsڭKLB*ҒwRCwo *^Paauv)RBP6 B#ΕIlZ*׵ܲH-Rҫվ,c0-XB WF% ]Jd%k X:&kݑK ̣۵(/d=M]JA+) @  #WC\I eW eKVQ8O#W/>m.5I!DHB(yz'9d5d-R 82[0Lɰ2$X5E +<ؑF$k$knXhȊm'ٰXFWh;F*Vғ6V/k/"Vz4`Xvo, {Ќf `Ppdj2c(\s\3+&\pWl6 * Ymlx1.+($dV׭5P15޸Fy4ุşB` VmUN V+Lf:82٥E2H6X1FhdsD^#l^#Y" 12G~ry >.V nGzb5!j&8Zt&c bb\v`ad0ZtFFtv; yG{EzbȏS. v9E=diGӨUh/Mɔּ@z=B  62=pVT,q)Apb-2!B VjXJT 7G隊ZκbŽ1Xi Xڮ DvoUj 0 }vӱ`:84$]TYT6ﭱ`ęJG[:% . (i9mkg\[2d{Ȳx)*H2#diqKQ7SUh`{E 4XDZ ,: r.ekZ%[,w~1pԷd2Q:ZvH?O`!a B\#`Ux ^Âa5" +8GFBk:EL 1,J%9+u~js9O)2=,^OBBxu9&YR#KG&Nt  ,82Y6к*C+вnwh04X[ѥ9--ı5GڱA`؊qlCcmdӃ!`:/ tL8'iւ6)\ws,~Nᒽb=@ɐch@ڹs@z=2KMb]ڔ]4hOO}䇗ȩl $rH4$5yQ$s7J{I:@IGKZI]o$fK˷ZMe^F"HpDu^*X{$#e xIǫlvDϑ k}+x Ѧ?tCd`?캀dXr ,`NJZ+хo?WP3o%CHd 7#{IJԗmo$>sJڪq#Yo!~HKnHbjt^ T/zUnx{׫rÔز"%e~hcM1$3tq ?CcE~౺Ly-d'_zMΗ|X?4D!Jn_!*Ϊ'ykCCމ{Mw V͚pM_jE!ׂtYRD[iUaUڿI&$r)Y!iȊOE;zCGvD+X7R)u,޶(ENRET節 tO(ӭ/+_bE Xfb;"o-Ԫ%G {WGmz$ylkUgٵY|ws-3p*i}%Jcg~ YRRITTU0bUNPr:H 0g9_OI{:,WUe0jye_j-LƷwAE.Z-x;|rSJ~ 5:+72;%8[wվ~çlu>#,^<)}}H&]%\NXM{|[GPdU}ԏDZ?9bý5#hm s]!O(]rqէEX=^Vt04NutUvZD85S="y/ڵvCEL;I"ڒ"6PdH(  "+06-0FpцqY4@KrwIXۀzgA]j) 31>8o+@p,7f4,c!2Bwrw%:؂o0v g$_IyޘVB8v31 pܿLO4`IۃH qa`i!R(L{z"ㄎ5q#CMDJXC3=5X:>˯L&de< QKǴSwuY2io>`dXj)Jd&A,w ǾB5yM$tݿv![ m;${Sb7W謿#bbr.Huxg^j*Jh590ױ%²yԁo4ҤTXr`JԖ`+u%(WVԾ/  A/M +k {a(R~@a-G=I/a)5Ėc~c~-k̀k9fXr_z;{?U?]&O7ٖH8rsaa0-I0X| ˊ@ ">~yW(a\{&V=&??oXͯߒ|+h"7?՟7::~~ ,Tf˲&w_0IMoxjKbŶqS|o/~q3^UKd]>t"j$u-$V;ګDHVָӂ䟡ukiArhݧ]Gy%Hq*?Ny?HӂK_֔ã$RZ)Eɗ֟f=$ )wBɿ AɿrN U>LGֺuViAoBV)ҁN_qđ NIZLrZq&o]=( Zk5'A /:+A䟡R7ui;%V[R%_ZoVQ8vJ:%8G|&7қ7) Z۞/|jҪu/0ɿ7|&Z\(Z $^k}%^kչЮ$h qZ"2ֺ ڒ >ǚ^ٳY˜>,U/𸮵He`H^Fͱ ֜ȹ4.̚s}79Kοa͹ٮyփõ50kοaNu(uSqɹzwgcODjM#ϿGL3d)׏/lVy.x-cJXkCB'>=o~ur=^$Ak-G+M / ZN UGug/OЊfbUfe 7%YbZD$+Ŕ2ArhO[Ǵ Y0HFl p΅jzZ]6Ck=6$jK4/єcoAZE@J׆ZmXpA H=XCkQKwPIԺ/FJU:Jʬ[Brh/ϟqesPjDpMAI$mqhyʥWwɡr+  ɡU]xZxتxݓZ|ɡצ_UrhMT]Z+kVUYopyZ^JƑ-Z-:CuC}[m$V@|1BUTrhE2 9p*Mw1[ C~݉б*︽RК+תq5zm?{B(JP+7үLSҏЪ;вiӿw@댽 {_ːR(J6@ϠK 9Pe *;R{mJPg8ԗ?|Oc7dbJF0 `<߸a.B%f0 "LArh ɡm*zZ!1 AX4}L4" Z)%::Su!9LJɡ]Gm!9¿v%:T|Z9baCUBBrh2UrhuTfTrhM4;H#C,Ap(GߤC~}CHݑ~ݭ6ޯy24I*֑3ړ{rTڕ®|kveyGEweWUɡp{ H-VMYsku3FZ$b:Ck%k__zS*D~/UvrY`Ck{~լׇ ɡ:Xh+YxJEc:$', 9g= >ACYW:$ִ:ףYTCp(%k)Qzzm){7~;ɹ{H-vVnnwtG~ٽ"*8tXo*ְ9t7êzwJ]J/P%nJ^[\Z$`@rh*o2:}M?ϧ3}}`M?q*8T2$Ak}Rt s W@rh/+Tc5eЪz3Ux  Zp!8VY$j-:jV_qM9ɡ{{ 鵷* Zaj~\}M3cAcePɡ#BRC!XJ.z`0`˚MXlE DKsrXymX XP0 pX=RyKo,I,( `54 eS"W+i)[Lߟ`2Y3 <,{|ZBFHP@BX>c'kIy{-SbS$S*<,])Vǔ-M}f%Q@{:"X|%a*p K X:[JxcЂ:0I WsȦlqr o\R0.U4j\R0.\j`xj%rR -F2:Ô h`n0l' Wr1.rf:Dq5Ӂ0߁YdTÃqR+%Í$'cDd0F# #.8(Wؓi VoF,E#l\w("ƵzXX74`jy5VTÓ!YL$n%?vXnx%,;0,(j"!b-b؜zi!G>oV"' Lc2h$'#),j&Q#S hqRdw$Q.kIړAH`y"{^HʁlH6I6f4ȘůH$kllظ#XOp\y:p },~ՓD:<(X}0Ӿ VH X Mc\rqY x,4.4j8S'`u$Ă-f`=G0zL ^X]tc*u4=M-Rck!6vXбcX hX)a8 lɂ\ٍMҁ Ɩ,ʦlS lI6=>~@`< F)`3E6<؎'l0u %Ff!CS =+8ոdj\d ӿnqM!XثY[wc oa9$` k ̂ 6oqq5.2-I:LтcK+afCqY1{XIV ڙ%dcF"Zk'ZkmvylKy_dmO6hezN4wו0IOxdMz2--H A9soA8aXxk<4-P͆KJ !:DojP={_%ˁʄIub,"X@$Pݢ DPkC<5oR&kd<C\ 'WK^ib$\軹VWTw%R"r̸4f\\Dl=W+K.646r9$O#?\+6nH X[FV̀%w܀.`1 `a8*d|5:|፦QdYئmܑf cS -hG4Maek#CUOVǒK2h82t XpIU$t B_#JMƦ KcVeFt@[-[%nlv0`&ήX͈zDkD 6?N u=pE?b)jFÒm+NEzLYX@+8(YZ\͵(Ukv%Vژ5jcY 4XzP-pvpҘqXۓO?;,u `baaq.Jߍ{ĺK 3. 67|@ە<d K2 F.kH7<dmdmDɘE K SDŽy(<007Xn0/XP078 `+q 6'pƓHžHVoy2lڈ{`c`cDjf'Wk ]IE}ck5bLqӭb+pҾ+ D]G; "X!2BY:%X}q\%]x4@*W2 pCأzo+X4 `ֈG@D)x61@BZbaCAaCX9,:$Od ičd #R," ik ,$X)RB8r.lɱvPѥPMlD"6M4X/lD l= 9Y"T ˯Nl06Xfl5l`M_G]PKXǦ^W'l#AX`+{(iX V@yL}4; >_0vaEX+G?d>7=_o ++]j:E$ɉfAX (Xw+4ؠ ю5Ul$ƀ9Il֑iDñ6* 7ph>tEԀ#Y.kt:M +5,Dl61.CÖC dZ{J-<ۼ#a6C d|Iˡ8_h-|y)x<ـK264XWIkkt+O˶[HBт% GgfyhZP jH+>x^aV/x=HF[,GQ# ӂODZ2X,< j{KKoJ_$Q7A\tKc[aea+XF/ddXykd`\g'Ll,=*ca@D8n vX.4lHm&œ#c aAHB級cͭa-x&Mm'ɺLN 306ٰtD8 _5#xbrcY$"tXN0o*dz׀'l\OVu'ZtŁa1ZM^S2,,%`P02pdhDlMV$YajdP02)db$qAM6BoG6s$k3udmF?*2FkmX+L7@y0 BLw\hEMrj\۽ !pA 8us*l'OTP0~$gLOj iw v[#6m@0^1`*yX"`,ѪKmK4 ,mA%K ki\$ /dz1_F?&ͥ7 < 0) ps ׀5g-L4YBL|SGHv;HB6#V ;74 ،\MGMƅ"䂂q@` СO'v&v뙶w*t ؑJ:n \2@;0PX~0ba P2xCȌ!-dӰ]fwtW0`!B@zUAXB;eb BMo=3X@ LkD2CKtE?e(ZDt͗z#!%o%SrDzvOF"=o<ԪC{;ݯ{D ~Y}X' Z7W]xl&TcKEzXD?ػ^°$ 9MS${<, T|א@$]H.IOH"%xZ"+ZR᩿0Ӟtd,z_dIeZk@zMZ ɪӳ81iC]^#Cz-tIZ\@vEi Tt^*qt tJ֪xQZYBJd"S#J.,NkyBZ2wk`ZYHd#I(w.;Hɡ9*#HVi9OK\JW鄬$4m^{D)<(PKu2x oUJzڮN^בdHzL=:U{kPZG򲯕v^̵m6=]DU\UZӺbL ?KRd =9h{W!L@OimM젋\kD$MtMe̻ʷ.feY,2:[]/^$+^_CEB]JkBE"I 2.۪J>=Iتlk{͉TdPim-ڵPWK%L1~hͭL tO@k^+[:-߸-_WvQ~ 'ZD9mO8-%vi}?4ۑ6wq.F{'ҴWŖd7n ,Բ eB?ߞ6P[<0k7(h4 u$7|'ѕcK΍IK"U$݆rV$ >ޖ|{%DK"b WU;3/?gFķ3W'Ǟ:@wt. %Б\Xa"39B=jܓ?agEAU#OE.%L_T**4+D^dɍT|Wxu}(QɴJj}Z$ڹ -CPkɴ/D$PXNizv鬱b}-H : ]5|ɍ!`z>Dߒ!3s GzO%N3Iܞ/WGMKH8D)8ͅI<$,i`\4r[Ff aӑ &-ˍx#ԫi,gʸ XGk \E4Baa}îc1eXO[-P]CE$2R"s,v`&À{gA]jj;Dp,ׁH{aX>]^dM逄8 0Xk]PF{BɰđD $Vn,82,HٕFђFFi0*`i!R(82hd:Ȱ4^~&@hj>x1L.0ɽ,$ݷ>ℿ' ϏG>V|oIUugۿo?~Oy *veh0I]b-тV_>uӑv#ყZdqL$^ x(qZk8˦e?XY\PS95z?}6e9\%Y=鯵N|ZK*.tS&YZX󳍫}19HO^ON6YOND׺SյEZ[ Z9b?8e? ë$h @rN ugI$AkH^ +PzH_N!W_ӝ\$A)aw}iD%=F**v9jfT|͜rFQuWK~6 W5iӔDq /|ToϣTP#Cpm26Lx%j#$Q :K"㕦^DjhI%Q)#JiTgUIT*GzQuSWj*OKcUSITzNǮj* JѶ=w^) 63 ITzuW*z $*UV[*J*J}esOCYU#fW_QMkQoT2Y/u4~kZ*JM$VAThNij|#x 'eϺ]/5kHD,t(k͜/JR×&bUt^P֖Y=$(#<ȥ\ITbHRaȂ$*UVkS/պ7VkSj/պ[nJ}z>xYUi TIT*z/$*2?Ug|dUXM8b$(Mv5N{N{Zbygf쳞UwdLrk>g7}CcITJ^ITzS6TF "{gc$Qp**-[SHSB Ž{tkӹJ!K\R=\IH};vmDB2[+S~nמvT8Szne^J\,Y$*յD%k$Q 'ڇ ITh6<5(;^oR}v QǪZnvtQhǵ́$*t>9f饻\-(땪pWjz~'*JVk(* JB4zTzz^DO$*ź[_JEs;uQsKZ9_p!JIPj6R{Ue+5Zj/:7׫Tv1$*gj8c+ ?-P AhvK<ңwLTꯕIoO AO/m\eeJ﷿GN t}MSTigt㥖Z2{Yg1^|2Ysk;X0@T&*V/r]U8D&ΔK7Vo9_ݪɞ~zN[}Mm̱RWZge `$* $QJɅ$*3kJ~ ֹs+Y%1JTP JD%vnwqdߔ^:!d1 $Q.KPnʔM..^oɵ½jKDRk mJcdz#gV5IJg~Zm-EĴnc.[\tVwM@=DI?ڴ󣡵C z?_|~z?_|~z?_|~kvq&z!ērMNթ$AU7Zz@Yu*4\()x>2kY 7_!|5=뱑~r]ui\yo4waO28z%0 RUkB?Rɍ15juH\1iz@Y = =]XjB&jA$_wtlp/s!d.Eki4V~[@y kM a,6 D =:y uO0I0h80``3rKnA`#GO= , {O>Z2HEwmr g̓wDN!]hid!OP"'4Udze0+5 D %[B(ɗ6m4)\srS=><@I܇Ӑ^K%0+> *\0nb=?BXXTpXb(k};Hdz_#jU/^ 7[F՛Kij%df}|GfzE0 +1,8AZK&y| Y ZZpIAֽN<ךZߎk E0Ş^%}G7+iXa!"(Vڜ$r/( i;LB=9 <c0wHP@!i R!W4 ،\rr-tB8lIǺśX^gﰠa'zXA8P *q-#ܐF`#`#TDXqu6//d# & 6"^ & @q/>rKt /Lr`}m `}D>N*#,DkM~sDD2҂I[xgYFSM -2JB~ 7%ޭ^iUHL%i%) Xj`׽@z=e0 +S=pXzKƒt5Sj#bq`KK`-G0x000pd dz" V00(>ub\zl.h dV_Zw6oO z dDYNY"0 Ȫv|F&iOG&" 8bؔzkȕd7Wܸ`epp l\u`p`3Ł̖h}Pa RdrYQ E=(ll!Yd=ŮIړAP"1ɓ(Y7 ? mTfX6d%D֞R# 09rG ; (iXa!RDt!(FhrCˈl4h84` Q6[dwdӰg &"vu86"{ ](A`U/RMoQ DiՐaA:7aAʹrXUk5lj5CEH!dk&a-qDu!,7 ]wfbHs[iCJڌm`.t[VJX88^fDrF+rFt@6#_YQ%7jl2m| ɗǪ1OM,h$rPcD( xp^W$8nH%qt6f3&yl=TŌ̓dt`z`-~5ZctРahjH6tlod8}&S xeluoAÑɐ*&G8>#Z'hj8 ,{*Zl!B,llZ`v A4M-x?6=-ϱ뛭"HTc[-[V6B0@AñP';#mfdkdk3P' ||uhzD'Y`OX!S5 !X5!t>Nmک&CIdžpc5P!'5m 5`lͦm <q|lh)vh041:72dd>NH5djw^+*Z" 6צy69 F9F6'&S׶̯9f$GZ򕑋)) X:aISkOk~4`2@x!p&9 v$m)` -r!"ץwX=C?FzêefcUc ,4 8qÎq"FՍK F +khqɲ >#aykK%by!Uyfa%;^#WX2cd8dg[7,<^Q# k8Ұ:#1ĂaG=b\\ad0)0#5ӈ@=0#Z9Z@#N6xf8q31cX`d0fTqdUV0.OG"` AaM0,( 8 XEN0p=p 5Y YlFyp͈B=\᰺z&j4VYX㨇UG7Z/fv`T02pd㨇Y$dҿ;ǢkPq`MKM{,(8gG|/YxMG=l:wd#+x>C50,h8!8X]+V|  F >n_'#4oq KkA6BUciOG6|U,y#Vb&:qX=EZzp]uTE]gNiڃQa,vTũ˕r%#+XadP0pdM$K62I2h8 y# Zb$@ӑ,Dh9!yd>Evr`aqX54j Ѐ:wǔq$uh:HqGodI m&e6Yc$dP02p~H=&)tPa Rd< =hh,D4G~)+Dh}z Xd؏H +Hffs='VbA!,/xd3TšH#\A2(8b eKǷFd#dWEY?OTH[$ *€및`@2s8.y&# Nfq63iO6c<Yq|< Qҁ f0_WUSL‘rn,$^]` 8ӅP$iG wSy\Ex<P!(`TUBDQìTxQ!$`17oJ#A50냔*鬱Q%d FǍaZD[GjV`}:?2U^1 L3E&I{$[b81`P}7(# 8cy¢tʌ4;q|UXRnTS> PF#AeZ9߭Fus=QAQM_*n*Qo5zS JlPt,09N2F:Fxҙa|;vvP-ԿN֏7u T%@ ㎪+ȍ*aO@ݟ Gy B0uR˗BW],Fեf7C0Ȍ:_e"P%,ߴz7nGH>GĮqi҂pD:r7Cl4 J  r%Waj\a\0.Xp\aqݺȸn.0.h Dyc\p\=ȋzo #Ռ0QZ:ZQ Pܰ264"r^Dun\CG587.h,W$̑kkZH"ru^zĒBaA55}엎䙥=5 Up|*HQF>0"\USU 5:qGqP#T@5::JBulPPb T=Vᆕ°aXQua Lp۰@T8F9 5|Y#T5]DjƖQP@ j-;ֆ ۡ"r%):@7., 7C|ゆq7tmÚ=b~bM_2nPA[qPsD(ݍI"4P/h3j HYjlzdFS0FUb@ G5*eᆕtoXc|Â&J8 "{7 UP\0$ qH vQPU |.gok jrqAAAޫC Fjj#@MAb=V* ՈU%bW(q5 r\-`8X,5aX5%@okC|j#^)rk #|p]1_@]qֆ%|/cGO#1Vc|Zp\oq ۙ(Bzz@M] 6 5w%9GO_ӀGP TSdEn(*auȩPaCΓp9DՈ#q.RDZp\xY59]nq,PHFx> DGOFXmPK( j ~òojv,)W6IZm^\lאBn+T4zi4=,ysڒ+{파h`<z8V]8%$_2H-J2Bpvp1d21d[ "bP-jhBx!+LɰȺ֒F -8 82s`d ‘IX`!R$=wd2pfxh =}G&u%dCa##TvV34 "Gb7ۃaM4 T]FߎjHVZ%HLy֎`mq`40 (۰і636蕭iؠfpqvtQ/>l #ʶt]A`O#oRvؠa内l/ N)cdСr\p, h[KbR:4nIӄrHSh2ĐFW㮍GcJ6bdC& $9#lblVh#S# /&e[ɦ rvDZ $D)'[ + Z [kJ ǵK+rƊ\; );q$;FElizȪ v+ْn#[E됉!llrOa :dP01Fz˰vd;eb Q$+<,lH["-MIllK6hx2"䍲!Ȫ.P2( 6Avd;ycqo {kSF2@㐉DnFvF7cJG7̓a ![5VF1(Ylx"jlo.#M4hxOtOO?Ce?c]&?kqZt!KN=Xz4 ܨ##$(= /وU= /YlH6k&5ͶUOK$-͖ȦwEK&2 #ᐉonݶ\C6?\ak&WܨbfR҃%qXsD# lH6+] dFQ3٨lx? /eC&}Ct@ɠ`dؑK5%#8d[lbKC&;o('=lX5EFtŧ>-+`kZ%U멐Kpiy.kvZ;FpťclzW7! O6+."\#V%_iH2S0.![Lm#+! O5 G2%?;\qͩVXgc|WDuˡTʞG2d|LRnگXcTo9A-K3T*b%H@@)LCK"l1@_ }s>Crej4J ,XI' 4PH5 "WE3KqAqK x.I\#q@\`kf!po (Y,nPOTݍCCB@ Pc(ٰ@5^ti,h,8. Ueaid@dRq5@_s@@T "dL6+>`#t@qhMkl;L=\ XGu=x0p`l:ix0XYM4<YHv}?W!roS_I~x$`A_xJ_ZT$Ozl'z $rWѾK$MubM= J=fU"gDLyȁ(v}Ȏ$q%@,E"_-M^@zI\>I!ipJAE8pADWZǷ<4>~c[&z_4E륮c\~{-m^C$)<Ò-/Hd$7ЋN$bʷ,3if-,i]$μZ'EED>blRM%[F\# :SF,M/ɲD$"1I#,S$7=8 jK,< M%T`Q[n(Vm_FWEy/DWܬ!{ZD. $F[dU崒EbwDӲ!< k{Y\4>'Zh~=ԯM}d65f%ţ]ICdk*cD=M<,4 ^c`]?omteRAZAB}5ajN5s4Ri#i6xJT% s&ׂh{b9Ql :[[Ҩ6U 4vhNSN|ok{˜6N$ھRK#6fmkZ>5tꖱS]Ӭ"Uf}T+iMy5u[C%͚ rU56tٙ{a&_0:3Fsa?Uu]$~ԁK)Y e >u`xH 84&@ <>!!Crۆްv ^$9IlSI BXo$[߇)bgr/I2% %- nJ$ȰD(tJ8R4x ^m˧bިCږ$Kmhө9$䔺5l 9@DBN!_- Pwc[B:Ǐ_9bB*h8댙#,{ !gW$cnHۈfϡΊU%3>qD bj8/$Ĝsi$\Ht.|UG9ޕu`SwwMy782MRr È8V#^rՔBɑQ>;-^酸a̕Ѐe :J/9 "w e*5HID6t a@"7qP!ohd mR|C؈8mo9Č%ޱ.~n&1qBNhjТji+?D_yo*1CĻ&aL}i#dX3p7|m6 -5VKpALVps xx{ͥM;i5/ifrHGn80[  8g;SlæD4T 66;m44Th1kQe 3Яfw_udc<څB cnDqq9v-03+h휏~i?6ZW~:z~`f߸HF.h(qYMvUGG,igȝ6* IAGG8> $cvttsH-*N=HBr30t5%nBKD6s` tskc]ѱ;XE5;V'-~C!}*@^";*34"]yutw '84Z/AyqF4f;:\1#&vf6#OgJ gje>-N|Mj$7$KyޗuetgϻژxS2#( p&S qUt`RcFɀ,ĔzH~:+h>\'iK%zՀ><0-jhB`>H`3rc T^Xr^T0Xfˊ ZB59ڞH\u{^1+BrE W*]#ޒD_5fq^2Aj 2|udp KpjuEEj f ܖY!aeD&WJ?N'ܡ{uR;ބo%vǿѫ-VD僦4eϿ~?w?t3(~oS I=m?l9"D(ȩsǧ\yO?u_2P8&/z'/uZ*Z:IbM @2גAC[V]W~jɿ[Z:%:o[yu:tnٳ)kң[zkE-Zb{*ZJZ֐͇Jּe Rژ8Z*[Ǧ/ךW/x-;-8-XᮚkYKN lc=4poh. o~qe2u` ue yYeVwZ_䘮"/|>$Ӈ}qX2cvj&kSK:;E eEDu~KsLsk| .fz>׽?^3?)M<;€JV.9 ӽԐx-Z^3ˣE T+n7]tI" A DɠBآdPidP7).[h-D\ IԺ/ɪHV.>G$[.ef0!IZCG=|y, J[Z G}|/ )5b!Z7R CPe656$I Mskt*>׺`sZu1mBglźx7E$$AR |&\Os IZ[)~ g^8H~"0 h#Z$cI 5$)DvhI*OA $iYk^kF6 )K֐=!%s3˴ B6Mk6zP$οοοοοοοοοοο;_[_؁*/9%fېtNHKNtN |3ONj퓹_`N-%]jH(iXa!r)^_$Vm:1{!Mh̊ H#B%|JY(Kr<+P ӰrB v]#[ *SQɿӁ F%?:*#ɿlK{$l!s6j'-i#-Ƨ94N4)^ȰL$ݨJ4-U#YvAܠ8hh,qhl!s$"ߐ<|lpl4$zU"*md #Fq`[wd[wf[#%4ئC{j=RM$m~d<ordM*J#kV*4Dd3y$ t8XBHlվ?l+D~9q:AñӜGb=flD?2 VIm6&^m)l|ZAd #3Dk`?:Ak 4 -vH⣄<lGlwwf-l{FHl+8|yتK <JyӒT6  cc m%h)[ホKB̑G܇m\|~at`c'9F#m̶FXIXС3Vl+oUN/5 ڢ׺gt`cI`<L[!0Ƕ̢ cc mVx'6~؆KB̑KwOlr& 6#d3!}%g`רH'-ZJy5`SF6#XZ =l#䐃ֱɹӁ 6dUƶ0Wl d͓:clz͏ˇ~XA F$[#KN /+MTIIG&67"R[d![>.:`  FB@h% !B§R&'ySwG=)GG>;$O, Hp;L-pl%`d0fÅ%%8g׼##$N}5ѢX XPpX+eԀ5v;ɶ4@6t@#eޑ63;UWM դXM: yу"5JĪz0%3ʵdЁAKc@v_hjn,0LwdD2_uJ2fp)+ e2AɺrdPpd+"Hd;Jo!@ W;#]0sX#t%m}dtV+'WNy,v%㧡fZ-`VC k$ ~.3s*pkH .֐aW" k@XM-ZҀP%k}zia#SDL޾T OX{Flkj䑀:H@H$X PN#Oa?ܾKΩ%?~H~dv+V k$?hjl?Hn#БM땘Lmzgp%T-5S[c ե$#&NmA>YȊ\ۂ DDVu>CºurgWz $Vڸ5DXDX+:Ȑjn%FpDpu׮30g%ȠZ=8b}צS+/L+Yx%bؑAA˭Y~2"ٮlL+"5=ϑqd"-qm"q^o]af܃/dʧ_G>%``%6EH oY3]Wj 2$~:|ql%̄d6]n>>.DX50)ȣO4J$Ldax@ ;<[d kq|@ D|~R``5NH]ht+Nl_ QGfH\5qØ$Xߖ,l@6k& j R$8KG,_J2ajؑ`ș1t燩5ʟ5.GH`H=LLH ́sI&\"CyPcݼL`{G\pA`+4:fK28" َ`X8o`%T `P00]yvqx0- 6Jg!h.-KV((a HaA 'Cfֺֺ3ֺV,Y-K@4},UfRxêdaCꘃ9վS.Iy5֭[@8.W&Sl*RZ\Z\ã {q3XlXRdzlAܾd%5v+O.ϫ•@=[ 84 X/\ a4@FllGXk܁kܙkܑ+D kGG@ްFGdaAZԥpX5t%z5WM~dM[`3TN`k53Xn]~6|pm8tGE,_oJ2aw nd:M'7lqA A`$֊#. <>޸$VZB"CԝH\+W۶0Y|d֜kΌ5c#?14!sI&\0"\$#bz^ O.բdݭR5bchfj?-60lckcO6jLI2(80!Y$ `cf0π# N1;._cJ2qr8.YؒÙm?CUbޘSۑl+Qy,XEV*yjQY2CtB5j!r[rS&ϴ8~ElN_ޒV%Cö\TFU&}-jhq}$x¶&xêR'VZXP0p\,Y4P5njTøȐϞocXMDjVk K:G?1uG,tk UP`li=89#V5-J>`?"+:~j`p`#<{ٌO6*eȺKV2(hՀ#Mi >AȐgX+8Qq6n,(8}L%φ555֎8:qL\;p\;9Bs `U (A` R$N[& &mdP020 ٖ3vpD>2$;.Ap\D.,N>\2EFCp\\XUt0@x![BV:mdP02pd+Dh5F +5 DD6{G Tֶs`AӴ5NM-ƴfdZ33-j ?1-0@ 5#  L6eU 8V겷\%Ys]2 kE5xÚ#7,hF!amv\ul'edDVtcG6k$ .?f$} l*##[5DS y#Ff'+N1>^3S !q:v+e;'+x>v[#VEGN,Td+{p3Į4 ϬGA6cMTLwxz?%ɠVll[Fv`#_}dD@7= lolհ#;dsDGNNqa\@ґ, Wkq07?t knu\X#od3V˶LV2( 8q274\{n" =ȑ ٲAuAM>dk1"lH7sYX%B-*H6{l`hntT#/X GHdSa7d# FE{TMt"@HdK7.vdܠpd+LYnɦ{jgzb#78~S k%W2y5/\%T`a7^q[ln5)s|ffdEP2(80A!Y*lHJ&[a RDN+4cYD%fp($D6+.b01VZ1+5+baqd}^ɊØqBX 1ڱ. ڸGHdEw~pdύ8+# :90. tGE5-**6/AH(iXa!BbIz~n<"Z-R(2 X<k1'I:JkXe}Hv~GZOY槯ivWGzFY#*yJ-0X iP +%,$Vpg㮏U$j5jlpllE/;6qlG6,rlB{U\FGQQP[J>)Y A#DWk@ r5LԜPH4|j!PXC%[&,TpACI`P n{JD*Ʋ Ϻ%L M's迟?|{]˧':im^ԅ,NG:wu ?=%|VIo'$O ;4Jp^ߏStre}ˣ@>V ~*E$q+DƞH<_Hx$ڶBmGh3 7H-WiH?|;q -/$ IAKx{{I~zr}7k=oSԪ(OZVjadR%񆀽vd- m>DR߱&GE$|TK6$A#,|HRH6KyDK }*J &z8tI%<4(Eǝ,H6 M&Y9i$3,HcIp& Pw }ߐ4'dpsi1+ r>>!=%/ﶽQjFɤypsGnivoޗ>yO=3G/ic?.25;âV..=uIW9cXm~ڂOZ&wuO..%rC{KC%#? $Ē ԘfɆKh q%IKfT:TUEc ,Ѻۻ˜AId˴0wY2&%\u֣'WcQ1U:$Yc߳1Q=ki"m%iYm tmfT֏dZNDR\WoQr[dʽE5hZy 7gmc>q xy;<7W7r熋ms#c/c|ps !vUb`Z|[Ttd Zk6 "ڕ(B fFWF+]%/FWF \_jEVܗ;DZm70E[@gX?[=AMqU2qF\5nk5)Zk#eZFz^ߚ2&Ff9e #Bɔ(eh6@EЭairxhw(v!)Un4jpS4 IuT/n< žVFXH-5y`& GԞ'FV~\){^֫afXGZ:FBaþF€%$(@- #BQ-D vE]uBIؓtՎ:NiWIJSN'ۮ^7 %TA!jxb&~umb9^(_<ZP%F{?Jgg]fPg0oҘ .k.c0[ҢJ4Fy-*h @d`.]AtD|K0e|˘Lc2'5`IsBfqP S˨5RV82Hƚ u+~L5^S!Bj-?Q^KZ@~PI90kLRL4K XJTj@KY'P +gK2jdG)yIguK*IP.3r[FfP -ZDo+鼩Ci*q$45cvIo?&-J?|= ׏Wr˷"*43ҔQ?~o55_ۏ?o燁)4|r K^%?LiP%zՑŃ5\ɭ +cww]NL8-x-:-x3^K%^kq^K%+-9AK%Nk?L%>{TW +x=hAk Z*;ҢDL^TWhM^ e^K%OB-HZZZ*iђ$unZ}=[k@J Z7-J;(A*oATkwA \=+z-Т)%T&/nZ* Z=kP[:1(Ah.$hiЂkA q"ߐ8% Tn.Z*[i5^TTkݕw3tZ&˵H-L84(&9Z:B^>hr=4^ƕ;OSohڝ.V}e& O)3?rp\|֫X.y^I7|1-[|9]L9Xr{]}?=Q׌VZ- c2G[/F%8Exѫ?3a$~x[ Z wJ%^OpDvӻ9nzfRu#@ڲ{)A=uDU R:t JkDS~GŴԘ\i@ 7-^M>$-^ah$*ӣr )u>MTG%TlI {J[ IZrP Z>@ IZE6f~)$I :[ hu9G< HJC& IZS. Ifk2ZklZ f ox\_7̀$iuxv IZCTp>Ze(||t}8鼲C@M>Bn8u83E7_(1$i 9zHҒR$jշv IZDC$iUٿΞ$IJ )7ҫ3L:T IZ˜T^HE"H:E5$iUZ9.ԩ(K U`͗X4%|+!A O{i$[BKI 뫋V8MBCrx'k%G AAg8 IZ"IZ7B$Ik8ҋ$juw[IBtMګ$ii夫8 IZg^$I {[Gkllnu{1^+'2h4lşr | Oh^'Dg脊 rԦ="HJ5"IZ+N_Tsu60hOy]=IZ-^"IZZ8Bry}QPjB$!>$I,?6Ғ]Nj$jmxé3ްD(uɄIIAAc IZR︒; ⡍n/HVV0n$I˪$%R IZ6$I .c+2X5$i-9ZDr!fi$i IZ= HZ+֗*VY*Z۝_kU6| n3\ٙih.$-m\wArz]=5A&5G!IZ.U/ 7!IZe5Td$& D-Zd-0@:?TF$I 5~ IZ6`^{h^$%c#/9niA7SzshARpfs$->ZBD_[w "%f0!IZ4: IZ[L>m6FZ +1 C#쟡H9 ng&D$8"(?h|P"IZ7a oBVk_TB.ފE]V^/U/j-@AtA[萰@tiQ{2U%m%yikP JE{T\3JҠD۔Π$ӣ:tRs쪄9-tQLEC$( 5zUfQ_؆Kt%rCP+htETMGg~2$%x_K~ /%x_K~ /%x_ ^ݧ (wX4z$Ψ/Ң~:_}t )D05`IɁ/mcX. Iv  +#,$ :˰`G6T#yܴ*d~Kfk|~ngrMKn>q7>X4ka%呀hVuw=ڳ(4_mZ_koN+r*0hscAӒ]aBĎAkoV\\/H:?&4U2B07EHs|@Ѹ'ϊMK|T CtB5ܰ9mGiNBgZE^a.eH#ٝ]MJ|Jxa1D:]+aH!d`O|d;lAҔX1tcAӒ_J 723ɢ OwoO+-HS9 'ypI!|۱ăk<$)48\b9INϧ|E-|nѸc7IQ3 O4]P -Z6xfY%J :!MʉGhfQ$O;"ˢkBQ-D !"%=twdl9# VQV.d , H:ҭP :yHR DjX\:2Ӂ -g\G3k.6 \/'<0.7>]4MkF`ǂ%&Dc㭸<$d(jh)Bxa[ph|Ct@C[qd|#t BX:V|{. Oz+j+f2:(4-YV䢸abr4]eP +5 DD63.#TaVZ WOXc:N ~ " ¢a5j%ָ`P02pd&)Քs` \WG>{QJƓ&V(UpTۻ% IH@`HX[SGU#֪  K7 av aAaEZ%r gVb`P00pdD%ȖC#"6/򧺴Kl!Ul'-$QuV@ X-܏B- I2ʠ ZF5)YuN5,Y$<٦!d #cBh|7 *Y+xAUۗHFX`i7%OmZe<$)jh)BHl7Cͣ54n>}H6$9uG2 5 %j_d Bga,~%xrT<,yQ9?7 -jh)Bxa[+->1бqy4j&5P(w"5 ~64<4t-ix4v8 92* ChԬj*/7Hl@T<4ZMJʵP鲐oeT ]-5F7  m'O:6>jٱq:A`!rmZK{X%.t}g>_>XBk:)t4-Y 209 TZհR@HdS##l'wSÚauD>  D"Vjаx+i#G[$+݁ :΁q:A -Gĵ>G@œ\%T` (@uww` 0$mQp͈%Q`iT4]#VpmA`&M:,N,h8,kşj:B;0N{0( 8"Y,%Fd߭ȸ:"D2]&4nHwXXP0,4g=k F"j'2vd!_IG2Vpd3x&gVsd[Ӂ lY$^#S(iOVSD\1"JH=f%TzAಯMeڸy~もq950f`{G3U3 DDV-f!rİ#P,'*&I:A-5y tΌb[ 8 gѐphVm'dP'23WJHMÅq0@U6/ Û%9BߚY_Ԡ{L%~/ڋ 4VUeʎ L.WO>YHS2L5 Ǝhȣҋ06#m QK[/l*4VWҁ V%:1œc;q@ lĕ-da+|3פC%[Fe骋Y̟FH~.zPxL8iɂTrZB߿2ĕ dDd~ݑ5dj":jݑjk /  ŒBZ5xց2̥TA@x@UYy⠠P0"TE*<58ځڱjƲ"W9_%BP3ֽ 1 RLQpD ,9G`KQDQpF(WhǵxZ2q︖LWlǵԞƋt\]&4N[G\7rPbõeYڲqkk-{uGug9 ȵlHpw %[ KW9#G> d5UjNF%iO%GeQXo>ẄxʂS "זYsϵ}]LU>bA3=OyzZ=C-s0<U%V[CXkx!ˉ\\Vsђ;%+~ f>B88c,t ꖅD]+XP9w%otAɩJj|W(vzFʮUeÂƩuHwLQpDXr9Ʃx]r\5k#r푹\z^kzFxL;.h_#ȵCU\ ;ǵõdRq-7!õCULUgU2l\\8uo "r [; w-™b!kȵȵ̵ +^>+!ylS^ < ƈoNp0WUT nh'K`VhXwdU2$On|s128Dʙ Hs|IokZ2`.ޖ)dc\w+.$*il9 Gq1ʣ6bjM}@%3#ΜL%0+2 D`-*r$G, U=>bP-X"j+F΄+׍N̄ԙpゆq5rmLd+W!gjdqAC` @D.;p깖̭wゆZ-%ĵ[%ra&q)N;rP^BኡP-9§EܰH_"a| &NL*iPA4"S6MKh0n-.IZհR@HdK92Vt.˖ ?;, , X<fXe,pXl "L%uJn2zJu=]siMi.uqInW mYp #'z2axpʸςJ~?PE5VX}xʺ .ȠaPVLgTH"aATu$5R|JJQpDZps`KQD%_ q݉iq<WuŇL!]939mxY34]EP +4,D[0/'\ӎlLT3iȾhǂ%<nmG4a内6YNhJq_>Gi))eg vWkZy(2O;P+2 D5"lt鱸'uBȁqlLbMx 6K~vX|uDxڑjQɇTFUt~ܨ`T0v2NePK>R%,8,(Xa 0D+W[ yAyPϐ ;& h43)6v 63ټټvyej<,v;!b k*}<dR!Np@#`MO][,Y(樦G,V04f!QLίT7JLۺ=].kr$~a_S̺n9 -OXL%4@NХbKri4zV]b 8Ӱ7 tit- F| {8&e߽|| KtwKvbۓƕAo:3L"!,HȻ,@/# lYct%3 xF6Kt2*8>d]K%F2QXb#2zd#hqP S@qM"n'X 7EH&62lZdE;E6SH&2*8 D2nrɉ5q"*5 l`Ȫvln1WME.ٱ}|.rfBX#("aM.G>#։ex:mze@z 70(DM_5_Gj:P$fZi`Ltcۑ"҆d[ @1$#6za:eHmr$*8>lCq!3@͑](BT``cظΗPN l M!Yld/̝5_¹%c|Ip"od;y58y*'qYY<3AFVlQI&gma~~iA!z⫾ ; M0~0jMldX2;결ҷ&z3wY -YX!Le !S.@ 2UםJW̴̭;^q[]5 ΅%s:j%b G(;^xKA@"nN q/Kr4KWtAYu5 `Bñ-V77y w+=T>@鶵7|-ׁٝ=He6u8v֛K#b[w y h,iX)Bxa&v{\hC mp|Q` $VpFEVqL 2Fye$-M mr~Q#'}mKfNȦM-dU,3eh/,Kɵ_,gLK720?DO6˳ nE0 /4-d>3vO=_#i ,0fqw0ᅦ M.G1#ؙE:Qc1Kpg3D*{3R}U:"ɒ|D¢}DR CKGU-*E5hQQcQBxcb Na$4'X&:<%:527l``UF,KcXE+m\/XgF%TTکFlZ4`ɋU=eѲpna:k [ )s MZ -vs<p\_`X`3VK^:"^l 6b3 `s+@I0y=r9{zZ5.3X4'LRTe{=\Vw+=!^hHRLXS@ME P..j8-d zE蒦Kucg;ݚqf#OׅqdKW璂M-ۆ< +iX)Bۥ&9mM5$"xK`F`S lcpd$#Hnm ^}pjf5Z!=-Xy&nG~^ rBP[Us%Oɤw/Tۚu N!z.g9F- ,tOsHV"@F]u=nxHG%m]uEH`}ؕHt]$vEW0Į:TL_b~'uHBWzO$r}ƽW^"m">CQwzh]&D/ R"ѳE`a kR*H:* xXHO$ !d27*|[.x~~D?I}Dq}`Hl'6^~*l{[vD> kr*=*O$=A$[O$?hQ$D!EHl@D<ߖDT2w^IG?=e68ju*UX^Mə3;!; /@8E"TuuIrfd#hס;KpǩHu(:7 K6@bvL/y,IEYIFSʍvz@_ګJ:RzĞSErぎ^T2!>hJPXTҵISz"$xjn>M$O=Sm`e)~ lɉ_%Toؙ%@$Ӝ]gYRtb=ՏQ'1N]؂视7 ~O//=#t-%߮w5Kp|kx?Mlޢ|a^CiQo[+z J o7_pGHN? CQٗacxQ?B KQ9A w/vII0%w_7M(A2t`m&J  k}^ދgj.5;ߩPcmbȽ9olzGRx(o4v#zزJE(_;w#uĺǕCPًTuGb}׬]\*ѣ <We₹psEPP˺nwxGrT)Eu N%{7["?xX3& `8 b[cUH+/UcהP$jMcV4DRq~:=Fgi':N)j4/txr%4dL zT zϼӉu|g"t+vEr㵋/y; ܹ~1ّ9O=dKi.mN:Ă=ͫ[=H}7Q~x`>龚oAm `:%r_)K)Hj?Gڂꏄޟ&}z].ƣ~HuX}ss ɰH,'>백g^|$Y/u;)ҋn{$,>]`5g ;%h\h;ZƯl ^ۗ=0K\ЋSR&w.mӲ7nVV֣f%T,/*5y8`:c=8A\cSNu+ǹw7,Ȫ'7͂5ooK ͳ8x*5)[y\b>I8ot n t fK@W aVH(av9 X,gŶ ;]݀,=B{E0 +H Ot^&͍kpKY5-X/6kXB,$ e3^K`- ~lja^2 qK[r5ն,{Ӱ40XH.`~\HyquD̂,`= B,$J8dh }ׁѯ~O]Cbg͙_̀bbVӰBDrf+͉W[֬;vE0K; XfmY,0+iX!D ouۭ%ߗdʆfXy%?9wo}r8x_=z.8_vBE.ilzƜ7?_=rz;| 0xI3Q%UkXSKr˙τC+@?MO߮drirIԚ*h$h2nw-ZkA$39sLe7.-Zw`ciגD/}zP2_-A///:}/A%։@u2ɗ?.D8I.Z'-J~1-]]JZRZ7NZ&_*&hYKo%ƈZDzJ2ɗ֧Z80jQhI~){"IҒX$Q ǣIM'ha{lԢǵW]"Զ]砅Q$}l%QK>I#dRZ-,84ZK,}˞g_>hq}ʞ.K?5OlAO8>? >?dzrDٳ|~Bk2֌ȹٞ$ճUD5a5!1R 5Hq>=ZV>:Ͽ[jxU_(<ӧ+eW!!I| =%_܁Rm_qSx:l?%I\զl J$4=ؕ(IZmNh$Mk%kdMH!0Aɦ[Aɦ% S04Y2 J6 QOIZ18eȭQkw$ܗtsUQi]8:F 6c-.IɦE%Yk7lJl(ٴ엶O~y4lZ* gJlZf7-xP_Z`󢏗Dt*%ֵU?J6-^eJ6FQi5ٯk0{/u-ۤdӺxNjRiݼwlZu_$y 7b(MkX%eӡ$kHAC霼_<$-۝@MK?̒lZW!t:{_Pc|CK~fJ6UmAim?\xm(nGsiџ@ӱ:P=)5WI7ůAWtN>il޾ ٴ̝DRڢ}Dɦe^gu{)ٴ۽R3 z6۫r8oOMWXBiIAVR:lZG)CBil+vwV'nm1HdӺJ3>q*W DFlZM><$+qIkD$~S5BxT,H65blZ6z0O7_G\ ĥLR եItDɦWJ6˪)rlZx,Fɦ# y&EGɦT(] $k*Vy 6ݖgɦuYev2Q3U@J6nlZm̔lZ#MTmαqYݲ%M ׫ߔ(j:J6-԰'U2j}.%~NZ+%Vea^i ٴjyT-q#(ٴN(헆dӺXE@)']~&.:j)ٴfd2G~߉&Z ʬuL&[MGd܋Bɦ܊^^ݹB?$J6}Gɦ?޹3,% |dd: $+oUowDRi __rp֕>.pq|0T|h9qĖƜlJ/ǵ[m42`Pi&6h,O*䐔T霼Ȼ5H6[frPlJ{]ԅcD/'޾x%']ؽV_lfAɦ;3nړcoW8$9҂Xu-JA+JC jǐ%Y<=N3Mbmi]!fZ7K3hk5L`V[X(`ZaZ×!L+L0pJܻFSAiL5%Y1zZֽݯeo/V/M﵋5]4<`%0 +YH%~f nr,M',j,,5`I!r5\}\\!6cdfEzS #KjLohr04Bx}..s*O]``%-p9i:Qh!C(\|?(>ޜ~Zl|F;n ̂5 }:p[{`4f!Ql`0d}$NNF Nylh=z_"t"F IAJål &zoΓ>;@U2׭7HK# }, U]YTlEtFذ8 KsOXK K 8f^yF\n`०L~&BȽ> EXr&^ x4'L߬/ ZHVSR@x!þEOՍL NFl d-ߍL ^jȪ^XVZHF2Sp2p"]:Idc$2TKMdrH`M#Qiw'FㅨfB0޳,o a ^j/dd";Mi:Qh ͒n Q,EHF/5 dL~$q@DF 'Ok-+k#S'L2zw,qj׈XM#x ^fTCs,44f\-4ʳd⟝Og >[bpa& |j?15od5CͺQX@Fذn~zbQ5̰*,`g:y.q 9 %:vdmWj+-qW~ 4W'&!fBDڽC,@XHV*xi`x![NvjXfQ.10Ȩd4ZdCo4ds$9v2ad0QldOlYd: q2\dLdTdj*cuLglNܜfnA!b#ۚр5],2ܬȰ$dk 6n,Q  F'. U58\  06n.8ǜK kĪ,60^X/;X/lb#wYL$5\Xg+Y`J\#a  щ-S$#)8 ~g,8`Zk\X`PXb#E_  W;(B$SŃ!s ?>% gs멉@繓3F6ȠZ#-o#8dTDF'@ֳAйj?9Gb#;7=J lyr#dq&qdesg W"N6ϲ0$#"XluƵ`µŽU,JXTp Xr,bX'W1?ưa53V~,9@T+o`Dw}L5Je%;#Zs̓G .Qר;؈};Yι>ß#V߰f:9C10Q5Cf0Cԍ Qs{@fذĕ~΃I -6PTp;U[~<3 ii/Z?g|1k̄55f‚९s'+ɬ!Ƞzb#y`!NDF'K]H+JZjF1NVqMjH6D6ϝl +wF|L6D6,+3Uv復{`͏5K!IH.Wp^4uqf`dyvBF6:'kpNv~3X|:8 Fƚ%aͲc l:/ċ^p.i,Eg #̞!{YXiC(+XVH~{2߭||Lq,SIB(S]EgF*Ø4T v$; %P7u{\֠ @` Ǫ-92 ,l IonFZmX6 ) wXﳁi&3sgS Vt`73aacQ#s.:Bc:[gvQh!acM+ BlF cck~ג$laXg .6j8-8[JƒىM/ lf966r|c M`5ͺ͚zccWd8[ZbF`S mnu`flgp6j8-93ݏel𻋭Y٨妅̱ ;~*6S ґ4dpEcI+͞fTË b#kӰlc6͑zjl޹Fjk\X``#5dz\龍Ev~R w,>Âwuc&\c 952 XvG.GQYh! 'Ɩ:H]ߐÈԣΑn:5ROFrչ{b:A#jy$gB,;Z }LV13rAmlH2N'\dXѨ,&qv">lP1_}nD.訯E:Q#TColmlmf;J#x$Od3[;[Yu<.MF[-gr 1Zgku6j8-7=bᄋv↣Q#x}GFG:-``#u$\e~e~`}rc25'8wYd WºMō0"i#rLKX@չ6q ֳֹi Ruf!%*cHͬ~l w 7l$w=S6S-]l [&mG-؆T|66mDwM{3&=놅/Fx+N / -E:B`]KT!xu5bd`C.ֺ.P2\۰浞 CZuw)X x@oZ@%70ptI,-ge0 /5 dLvh.it,id1<}jG d!Z'F SlLuNv8-ӑJ^7FdDlb>Dq~Ka:%505qR-j\Tpn01Y` d a8֋d=r7#갤rqG=~cC=m9(@|=R:<-Xa3 7윪#d*Q[hcFb#B,V04f!QCǛ^ 3S.r)6l?xZр%>@S,] <.I4 B,d2n>u2ns4nsf[GB` F7g|Qh!sllva2laYgu6j8-8[Ml [#j8-dt[`=1rfljٚ-q69[Aي-q85Z/lٸٸنoF K.9>L[hV8^ld`.2\EF 'su-͙L h3@ZI#d$"- 9[H:ssMoԸ7|!Q# YZ :· [cƥ \\2]&`r mX/Vq{k<1 gO,vFѨᮜ,Y( p68qtrv4Դ(nzw`]r Fp xu \7S6BHVӰ2LKq#ZoB v]loM w0>!^xfKj݈:mQ[BUy!Lh!sm<(˩]2M>R,ofZ[j]i':6 l}$EL 9CH+KaVJ96Np ʍl$q+f`S gOs6pbv52 [M&gd:[譳QJn7clB5vQh!sllMc5Ά=wu2=TAEQX 2f.0tGI ^̀F f.6=.w4݅f.4j8 d.j#4`݂F 62$p}+`p0ZHX1lv6ua['F 5[pɁS̱ٙƜ$ l#fIȦΦw9,54= '/+b l"D`bF  .91s5[p4jxi!sllC68ґ4L{ GpGl l#U@Z۴C% F13ۘ;ۈY:w:HFS9ױA66 DN:5q%5~j{~!2\뽃2dL=#SFݹF}!60;vwI5 Ɛj @.P` d .0;wwQ#%unͭ l@QIh!ͭU^E O?~ŗtD3K{96ˎpx݅w 3mAl 6.!6`llmmkMgrv"VlESmĮ6 grĕV*FiHKC)\A=4$o5{xpXHVӰ2Ld@C+uI}"*odȄkt\ ,]^ܸ-SDRtYH% "=D%9uU SR(Dfcr9"䢤>>3yA9ٕ5:*kEE-3 4zUTaިUKT4Y~zՓnPRRWP8Q$UK4kFItO$\ׂ`(4ZQ%McUE58^N0DVR0yUTv@,4zB2)IOJYEQfz@$d^mV{rgE ~G'o8'J8Ç+s\x[+=Wt|pY~kM%,EXC 34વW%nV + ʽ?01cn=į7to%8 ;U$|;EgpV[Y~*ӓl%[kB< )%:wշ,Sr-u"`}*NBD XvޤS2v}=*ptoɬN{^\wS.?;|D$9?T=K[?2jߺ$V\W3/1 #]wҥ֪`Q\A8cJ*A@TOR =aMG l٩x4]R vHɈ}L_S[685 m/x~r$)1W6mi?#,eM[8$)!"ASKu4ǀRqxGˡ+f2@'Fr\`'Aw uykX.˩R{s?CB'8z~b[F7 #6H Ub620KO,79+A3 [:&E VDr3rxsk3ڹ-ywHnJpPs*L/ɬ0xk9B#7~]'y6te+F6qՄ4K+AWj(9;N;WV :\h;SexYn4T쐕3T$r5Qrʵ>%#,b@gFJԏBL`m8FSA࡮N<zt*%zEΩ0&[e&Au38Ͱ#՞qr]UgDn*{Oi Xcw>a ̽v7Gy z"7 =J/v~GWOaMsAVbO0탭p8L\E ++, K'cj酽lR/Vq"]XE1eią4M2lqk7'/"ǭu.؊E/|hPD. &:UCA+-:z$ d_ؐ-q Nvgcθ ZsqWN;Wddw܃ƪ= L*`xHF+=^?8G7kj:d"f^ ire>kiM%F ؈qRCp231afgi 9/$Xt38Ig3OMEӍ~2$6;h,A2> Aƙc[O `2QFRqsU=Ӊ14pik21a`j<]YhD͆,GXJc8bCNfPg2mqY)>%==S,(<;hv:%*bg?8|A8|Ad^YƕS(^YG :W`V1 yxƒW`6y{f{5ئ:sV`oӖCJU8P\z$8{<IJ$'X[>m?qZCѹx$g^cy$k S0Hڇ-Q3L}0͵Gr2nFYI +#iXbm5LVG9zpTY\dy$+0l`Ė?#m >O; uy,Ɍk"KI~ 68d*;Ԛ'7cUM%ZT*Y7˚ּlov#=RH ʖ,tghnbqL m͂5yN-<Î(Bh"7f1ٽ X(Y־] Kе5Fo,mX.` Y84f!Q| l P,lbƑf 6 ,@W aVHX(+/KKs-0@K e " $Œխ^ ucSվnvqUmfIo]L[۰ոa%4 //'˄zfC=v.B%q7thgoai-L` Xg`Y,,+aY!+Q~$AZ(.l< Z&B3jQgu{ܴ(ժ6ɟtE*jQ&ŴpwԢҺ3W pICA5ucԢ$hW $jM,-,- GiϾ!oe1|>"|ffέO*ŜϋG$aFuvW;ל|!֐TKqv>D-ٔ@{ {TBS$j`i$jh.% |7Ґ$Q_otQk‹دdouy(IZ>Ox!Jz*atVQNLP.qr)J8lSu k o IJ3zuyoot߶t jET8J;D"(U{^qۮ׀u^je۵I%Y W)J}}N{$++p ;QHON+.$YvOAAd%_|nsNw%A8dRztGť_2An[īW{<~1* tJ*`U8 У@ݲny[^y閧wJK<q8^z\*QV@IV~6J{]*d.}ߘDIR:7$+$swdcvP? _4e$+uX(J#9]R׺tPp\/_%Y$k]xv/NGo-%[j/*Gz-A.?$){{T:tyIV+cnY9$+qxK:w*IR*=+ϯ>>NJJKtaʗgٽLRFq%YIG/\Imؐdӫ\8%Y^O+'Wݩ$+-jٽT9ں/8'JTŧJu[^\`d>uv*_9Kj/>uU;dS4d[z*AINDY5+3H/'[uV0 }Pe>R,H:\jdƫG9dKiJD ƪ\mX"1=}~ŵcYZc1lj=iA䈜lQNbD%l:ZJ!dZNɦe"U,Z%p]"K+Dp]㑥#S˸R ^Ƶ_Mkp겴ƚVkt>PiYsi0kooֵ/еuK+tۦ:OIs"u5 M׵ !%U8OwcR ݷisϯ?mz櫷mz櫷mz櫷mz櫷mz櫷m^O ^]&g/겍޿tqu*/cD%E?]9 )XLJh2nu޴&[mS',"YA}N&'-0I%.ً̧3 F*=oQM\T46(mJoYT ,*xi 1k\P]i>?M\drĕ|IWu 4nZV(o^bZ`+^؏%hzd.Cjw7FQnB0 Z(ziy aVh<H "GIÓqY?WELBnBLrI< $3UKM"=^L*K"d"р5DVx@=-2M&2*8 d M=_} $zڼZ_gZpռkeE#fdԂk~[y a VF3)6˾PpfƙƹЀ5Dfhn@:@x!-1 952ۡs|ą Ea㺥É\]%_`urF +pz9'c; d3͍+hWHVӰ" Aw+t 㖉+^[!v3$+5`IdT= s=^K^oV2{0} g3$րC ifM4ritfFR a9c kdCħC6W*D5Ĵ ^c WjrbXFE 6үtwk2o `N`BBV1Z17t3 "]#}P0W9]cJŭtOub0 P iIm 0qE*4,lu%ʘ$.kbcR,=-x&=.!E"Z&2IOZ璛nb;04 =>҇[)9x_r@ۛ ^@6,ߜ X7qֹ95٘1Y$zXoXGhd;Ө1 6Kk̐ K l/dIEV8F13s#L٘ڞ*{5]e=Abx#sue ӟX`0d.Gjd\5†>N5586rF"LkW׆5첒Kc?one.3b;c{SZXvcA!yT gҍ}&[_NrkB7D tn6ɥ56u~,-q>{]ix||`C]ث2\̕>v ,CpɃˀu,V04԰)60(k#Έuf3F4F$@_DDba+>nVC%Ö(\o2DW҇-,V440Q:-FgFvqn$#E?'ct46/MF5@NyvcwdvDnNۼc5@gc# llTdM?jLlSŦ:\} ,mdJvptd3Sdv /VtlX,#6轌M( l'#勍 v&뾱Ua*,9-,6#+͞fTFndY(ȚkqnF3 yG#]f%:xtU%p:ӌ8,xY0nMъW<0+i4!5x.b#Hjpze3Iss!9!-̿cwb,t7ͰN8l+iX)iaؚm66<Lb qٰ(T sll'N.z;Y_f @]m'e\''Zud2j28D|3#8сc,C' V?p qd id-HN c/ ]o3_y m43<yYt>i8b:⁅Ua[?\rI8̖yfyT:gѐI8''/sr4pNN-3 3\ha4x(|9M[mvJynٔxGlckugC3LdY\>-7C+;,D Td0zz^e2:`qUsr`$b4anqec>ga ,dQv~>a./Э)fn4g&-l/D߭= qLp mGRMhϽ[Z:6L95pNƿ53<yn;KO)>SYˍxjr1faܶ#-8DKcڋb{Pü?f}?!#UɴtL4HfP)^4EC |O4{Hs>386g͘R{lgfxW`φGq'^2&̋%нQn[, 5kz񟃛9@StWآ f~l,#I[..ta:Kj4.-jtd#L/yCSxzv8饎8F:P|Oŏ<$ψUA:@#ͩs5+koF?/sְ$yyzr:ЂSۭ`xCԋ73b}XqJ3VߊZZdBF`Þc+6t ƍaL5,Q3evfQ2(;H#AU5,P؍貃ݶ5 ۘX:fm-6j8-13D0gBؚ_s{Zol2kٷ[F ֬GsAoذf潳2٪vxIdMFkğ4ͲZ]Z,,e2nm<22F6l8g^`TXe{#O0碆2{*y: CzO;WqO[F0`idOc8WH*֟|:#lXT' J'*j*l4Q35La K45˩׹MXa-6<[3Nvrh-Xt,q\:J f S= &٥EF'8lu^N6?ꫦX|:#lXGT8 `QݲaiQi2QQ)hGPTk&.H eWOJ]6 <#T?[0dq3R0ݶ7%8 aL>v,<}b5:Rv2*8 d_۠d>ɪϻ Vn3V8.Y;Ȋ d6d>r3p#B â_e326@6عFIJ֟5}q n*:t4u}U,9(!?nnbH+`VD3^杹p-buvlF?;P:QUPSQé HV+ fU6`\р5[~f`k0B̰qu0\1p'\Ƶ>29ƅI *Z r!nQ#X/-D6l+WY&Nc31|M$']YɨᥦLB6LV̬NC.^rΙȺ:5 $ 'zǗr'I. s0NˮsC.8ť?`ȃ6Hn߮l,XN`V rBla;\D4fSeh0Ƀ;"mV>8>/#ɨBx!#uot4~h)ٷ\B mV|iT|{Ld A0=L*F Kyo~;V٢i83-x< JE'N,V04f!Ql`m d#&i:Q#%˷_,0` 0`j!Sldw{gkmig #a,~2q lʎ$Iߛd}Zq eZE>{"kתE&)S઒ Z,C"Ţ}[/e T &hJFW0!n`ȕ...~_K.*Z[G- â]=V0ኒ>W0P2,K !:!LR.}KR,pgsuB8"d 89`Ñ6lEnxEK𠱆A7Ndfɻ_B4@Ȇ@6TO-K\XCr0[ߒ|ʘH8W-9=]A;yZ nRUR;3Ap`MOf>`XՑ6dS08`&q܀m - Rx`kTaY*Z :8TURUɜ+kܨLúa旵۬sDC `E-%,'@<#T,!DpXCr#\r\%r15,Hcƹs5tl!SJui/=̓_nx;@P,hYDzgR{]! X@DM%Ԕ-&lQ~+k( [vV>66Dن)k([@1%^ۄ-4'l,lI]~"o"}P۲plq}ƎmX4~[K\&s4#x*?=d#?%4d[CR8[u0栵hmx,lAۻVGj$la*x$ظM$7P)m`c X0l򞄰5KSe6P6-K} V~l5 ,RuQ3T#U7$pTEj=$2`"uF0~%l,[O6Pp݀*r#T P5-?φ)KN]XC؂!HRTWJ_qr]q!Kr UgDU䉡R]p`M X^^◠  v.ֶqہ5\_=SRvgSA}XuuT| X6nk:_/-h(C[([6nk9z6MxCeW&lĂY+.Љ1lPFm6`LIJʥoԬ*.bXgΈqbAۗ$%b% .@QFjr3|mW~pZ8Pi'4٨ 4 i=h_"T6?%E^ P0?O Y Znnk¦!"׺]\ W_kdێX|,e..v3`[C䶷,8*4ȐOC&?Y-h;sƒFN!9A 8nl#ۜɛM6}LXCF. {(lQ*k([@ǖ ([6eRlllAٲlۈ6gl9[7*lcx1OuitaKFW60l|"8U)S6u@l lllA٪Ĵ{(+ lYepF{(\&hC*eDd!+GW2Q`frH'׮ֵ{fQM(BiSM$|?T-H]-@8΅pʕ9z9\#h7\[*,]8,*d,z@<3T00d4X)Y17+_nBD$|*o/\M:h AwwI >-Vym0n H_ӮUHM88c4] ȵ湨" eS.0\=%pkXZZmX K&]Yb84f5$אfI؀)o1dCkjն%c%cHAde÷T{LOsjPf?S]Ou H3H- 2o5"gެ@:@ 2D,wlW)`ޚ{k 6iFeel+q!D, K|ܑk$_k$BK+ibI LdbΟKzFS~vQS`uͽ=oIbKdݛ|cKx''xK$d{Ж=lPvx3|߬t"?췞w9uWmҳ6Qz{W?K*&{9ʼnO$pKd'7 =Π%'{99'sؒ[dorb<$4dM"YkYBg5d"o/g~*]w4y9 Sl%9zOL׼0Mi9 0W٧m }:eU %&P7UNp[hZgx.A^9-gה[B N9po!gJs >%;Dْ_qy~~KcUp@sXY!"dl梱VWV=֞5cid*kI襞~UYI*=S! *WVa/ 6.iǦog^ۉ)7JJ޴)GLtJz41]⚨P1ˀchBEa=D֖4^&2_zZ{?Mi*{^~XX@mҞ$OEt{Z]t8^w) /]Hslt7( 29׹wZLaڋE5ˊ`sfẾ7&!(n>uaE4ykˡf.n@'z臭z> eؒ}J<%sծ@AE;_oY.H$0$$}%q}![BSw>P]VlB_LsňdW39O/$IKF)J/'I,Q~9%]/v%xzO~<]|`0\2oR;_h[)@BP;|s}$pzy$u\V}%H+G.hIHϱ_:Z$9W2 ܌6gY\sd?n?v'h'HE@k7Yߴf}Bi(%׫Otc?%qw`CmDeu㪹b(&ǀw^xNi}I>^h'OZ>i}I'+]j~U*THdPίFK%Fky)y^GvOe\l'ߘ' 0w?ݗjY-?YO.k s󹛟?lo]F15.[x#{g}>UԑBjW =wz7_翿pO=v鱫>L,1ZZ ꀛ%V+kW-Xn-;o| *y2{n:FU&6~MPFͥ3ʟhU%NKP+\8$N+|z$JQn n:$NKtwwsx8%; NXǛicicŴj?$Nk&qZ>NGI'xLLch$N+x'ӊ<xL[JIn֪CoUoi[$qZ7JO|+ȁ%N+xȡJa4dڲZ -Wl*$NmTa Pg7i)_9ӊ=rhE"w Eu$qZ>l`ryuԪ>r` =rhՇ,qZ>r`ӒƏ֖8{'OM">u =qy=Z>:IVxlӉ|8-i?'CۓID$N8'C'CGIГw$vX:*$qZ7j5}[@kZ7OkIVϤ#z'a鸇CbcI0q-vOba._Yⴼci%N,qZͥ,qZXN?Ж8-IPkpOiHiEv'qZͥ,qZ78qKVs)K H:ZkE;iK͵׊>|`|IV[i%7i8T,%8~~i؁NǤ,qZ>v`Ӓ؁|zKV{৾N>$ut*9I{8gQ8-3iU?{Dڋ xzTyR}ZC>``r O6iWчPTݻZTGS_8V8ӊ<{:ӒݶuT$qZ7jOqp$fh=-fhO&~_,qZSyUU'Xoݥr'#Ñ~7 Kݯ]nxpB2v,rg$yor:@ 2D `iN~vE*P^*}^ UӸk8*9Rm .8`ۀpȹlm?gN`[Àm :R}fZGY*:Rm b)?)R;$o<(zx,}vI!:*"^mՀitdF-c oj@v\[pU}1 5 `Ao @+Vk8X kca:h6MYpnwjkn&BFGV cJ&X Air5e1jiJEO*:P5*[s~U7m U(-.6p*Nʀ`#y{A.,>zG=W #:fe޿ԶXa+Gb- VfGltiU6p +/ K$ڀh >t<6p*֐yTbQTs)7js L4J"޾.0t`rE>Tϙ?T!TI4GwnS8-RGs 'DK!c,UOHՓROfg74\>\a`V@m Vێ,,6pUĠ,0qEzrj?}P|bt_%<6@.ujAn4 \*rUewP XVcE*+k`zGh< JmvbSŒgab qInp\{.wbD쬒+kh 'QU 3$h).DC؀ ̠ p55lT^=ks`-!ب6'L8zFV_rc$ `^'L8uC݄lR`za#1EmxbSlL^e@6Ej#87aBwYQ$AuɊ=M{w`᪘>6pLa5vnm=j?5Nju \a!ؐ*+ ?& `q {@bwMg$F,C rspRqa_Jb0Emc Dgtm&@U׳ZG5c@ֱQjm$X@V `e8`k~&(j-Ph Qw*#C6p ML rz8qÂB5aA㲞'NEb%b@V`c/n,ԃŊXAIg'+(EFMC8ף@eaRI2TP>O'EÆLu{zF.w=*OQu;1pb]jb!n`r4W,㉁+v`P&WAI/́qqY' *(pWPcrUPεVPulXUPpt#R`eږK4L|~)]X-h2 `C*z@0\!WX )žrk:llێ n@&zT+(   5[J\z.F@@U&@az-\hpMsb!Xx$2r5hլcGrX Vuu5z,@Qu7w V5"` y)p"D/&~]>\ށ 3 `q < >a=LRUZĀj@zjS5{; @ #PTM$EÀY.֣`R_0`1pu|@0H]SہAP, !|qq\VB@]Y&-'s:PIgCQ@wæuiS m VuwJ^W TǨ‘~ߒmJFYC8uXÐmJV%j6d[mH,!kj6d[AG}kj@у `ۯ e,xPkrmXpYǔe kppr Xtl)Y? YO,R>AɨmDÐm9Vd##YCbnX(fĀ ⮅eabHdAv|dzB<_͋<,W 9VV.V0\o҅j.ꠔEr+ ;`O ,?.J;`ecdWLr%N'L n\} XV3 G6\4wRАU 6X#!V!sAvnR:W"RZaLn\a,;c&*nmXg$ّu+ztd)d촠!kZdzl!!xZ-ީא ld]Spdk)X|+|b5k)Wy%b.VSyu +sEj FEQ=`=#X V5 G1Z{]۰c)Y!zbFW.YJ~agf_}*\Si ;b5Nh'ltHq#s$,`FĀ~E?N]f.b>WǀX+e` XV GI2 L1#Fm zbXv@!C1v-P4r~,v%LQsBe:usEA}Z{.%$Ũ؀ Ǫ6Z-5P&FVxX91jXv7:J~eFGTdp\K.-WI1j;0t F‘el.'OԶprUk5aG.WUUĀ.jPu#V] ƫpdyבuvTl&pՇ0g M|ĂKU|a`_rNUy,!WrT˵"%xRldRpXrH6 `./* +\OE2H2SɠR #`PrImQ1`lZi!Lm˕R ˕\ޣ9:9ru~)put=1`+fḻ΍K.U5_r96XJ6xÀC6Ā' \Hs\ /žr%sAjF=8R)S=w1-+ :@}w2T@u|98XPQBP˕#,U7P3uR_HKHۛR` M.WO-y }W2S@ xt(}(V+%SjX*R冊"#nܳpTܱk-UCNE/ W+2u-K @?$ 2^"$0RA mraH?8~dQ@Ni)r0E5\Ėi :,5T+5&UPR5<|G)ȃ4vY# Yr RGBiDifJ:P M.7T>TeCZ –jH#zZwջBoMp=S\HNB԰LgRse)?S4ar0` Tصh 8>PgWOWQZnK&jUqƗېF52R`ZT- tHTZ<\nC&"5v8܏hB"FH'RyTɟM6dr!Rgw;H}>lĽ5ڟQoSG*Fl|8GH&A%sPVyj} t?H`>QPj>xY>P>w]\#|̑6v9ΟpEQe Ca{<( xT2EɨU.T'A5 mRJAkC %KbG%kZ=[d]R ^ԂK<,5.L!2H~/a%4 u.%rVEH~w߾߮߿\v@ χ?rf{c|@*=悸 _~7}>54goCُ^__NM];y^G5Kz??:3X׋*3^jZ_A{#l߫6x~ϿXB|W+O/qE=MK?0DN~T~27h s<-;SJѿdW#ȿ7ߛ4:F79tHH__J})k7Z"󿮞gP[||~zίo_󟛱{}_o#y>cۯϓ{ohI|/wu7vΟf{7%:'g?Qow8ܷ:00|wFeGktk֦scdf,&yS=ٯ%a휔O3nT~iǜV} d+_?d>sW"fٿ5:c\h۷m.;s>P40Z?J3߼\/7KWxVd5ޗZ(V>ץO7ȭqMGvѸM~tY ƭ7 0;ߝ7}P~ú“Iyt?e؟aӺ/跛ggpÿ}?' g[PV^_s[$睚|뷞~Gt}߆ڵ3q$;Ml鿱fUܗ:BC&gKv'mI@^d0SU:!;^ ]ſca3ο>^ݭ3ܬ/~~/O/~o|צoՏ2 /4G/w>nIqwmr}j@zn7G#q=k#ɷ̴_CHZ_>mk?ee4hmcG6hZ,|TN֑ |8ʿ~Y\,wwޗgxrpu8g<Į?F&u湤6be x"G)?MR(endstream endobj 323 0 obj 196318 endobj 328 0 obj <> stream x]n}Wx^i6wdIa$q=R$ bݶ5=d:U^-Dܥnog(-ϋ`18x{?κ_q9+*ϓrv|~оϪ,JX&ѢHf/_|:_Dt$ >77=vAGqRijy,gpu0;eky59QVqʣ8SgUmטTymÝC[X=poyMR<#o.(-b괬,A ̀'ʜ\gŤ2Wn΍r5b)4g,?w͑sj|Y կأX)c⻊XyY,¡8 !!WQ?=.gм(/zK¯يFbv'Ͻz|LS7 kGC#f%vZֈW׳&5jŕgW\9 j;Wp,l;_&yT$yy\?yK1 Ƣcv) ryƄ8_179rUR|)pi dvB^+jTIP}szʞUڀw& t {('Z 'vB=Teņ gZhZtiڲcZ_/NvH+}`jn:K ^lzLf+-(V A=Uv Ͱ$>/v3\v%t_y={t~ eDY ;yK0k4a}pUU,߅s![d%ra.=l OV@ܽOp8o] yɭ}XgZ09x =Va3*ymt{74T5DXQw5A{XOBlq+x2}tQ"/$50n}o] bx\y&OaD`)UԆ3hTy@ $4 OL|8(PyO(2-m+8yOtC)/ءP T}[?w+][u%vu A_*ǭȲ3_(0d'dlJǵVŞ59QDV?[ZgL }S|V dM^Ϙ,:'pȋ>Cn o3}Ա}S@Ϭ`M=JbR;i˨(3! ̋uqGi^zlTt:Cc Ě0Ѣlɽ8ޒ"gB?Y4Ɗ4-^c %s @+[-^E8۹\f*>ߊ6H'揬XX{e\˧fX^;?_5u4^wy8lm%a 9J vڝ'QxT`=ʴP`!l KǠdAª?ײ}{!-tAy>g6PzXbB?´&BertPzNI״FK9XdYx/)%?(e\{7[,#=Zf@$tAky4È WEz\Ti͚}2x(6hxde 4)>$;dr@霨>w`H);ڙT5gM<&QCV"VGyEsCFft$ةb]a~jσ!ZN?wCEӑ2kTNBKDc^E4̞J7+[F+ai'Dބ&YD~S*5ڶaϜ9ُD; ldlY-lZQ-C 6/ XC fήR2ẖKy v\4Jd0%*Ql͇[֩Ӧ!Ț÷O1Ca].eILB63p; |탸'[T J$As}sT@^P2j \2< 04FJ aTװ5(MS1|aZ_[qMl k:eB:6u,|4Ȟ1i?]./} '鳜MpXA_ ;rv'S̾P#~OhpVS ˆ+1oZѺ(# #7b1ώԷəGZf4 0\ SS'3R i3 %~AD):#|sp;OL^0,P"y.>D C2oZ9̈́88Q}@|b+z䒓5\q=]e=. c7g9 {N7Z&I_ ? ߵ P}0mApf}0nPOzhW̴VɼVR*2#"?y2}ʛlғµ+6 5(og&Qxu;n/d z#;SUA`/tȦ "n[1~x^ΪT7e-lQKXp5VcOendstream endobj 329 0 obj 3741 endobj 333 0 obj <> stream x\[oǑȷ%l.ݍL80d#ELI #w/3T  A>u~'&_gɋ#{r?v9#va;{|Tfʝr2ғzwvu'NDuTL(ey.`%W|0W0o`-<u @o8P;<3,?0|3=6D]Ν|?V$]]A<-TW+%Crp) )9zdONiRLjYf~>$f_T0>+b=2DVd\M~~=Jֿ vȈ0V{00Sd<~:%G_q2$f\ 3ޥ_0ARBރ K]Ltu_LmX8$'l(z*ZXL}.hd3Z% D"3NlJ*&t3(Y'+` ML L@"1z OT'l\Ty7?21&R Ӄ{)%md||/_;'m~rFGTCexΆVו\r`B?9뛍C*Ul-!JI fUb f7H+=~39fp3`9g[|M=bjK H !b{&wi)Ro*[% VAi\h{v g%飀 @緒qۑ>%&)1aZ)1:Tñɵ[ՓqN?F<ӽ+r⻃MqC@ٟR_&eu8A[Ѯr\#174eUàY}z^U5z.q|e s&BV(A? çkgр&ܟ2ȵ9:EJ,16oL2;(:8`8t8+Ny2- _|!e\_9~v,#b~ 2D5xuDPݍ4^ f1P t׭C|ΩpmP$\] ,Lica! +$ada&/m+z)mA đ_i-9ߛ^p2\0Ƚ>HsbAy>c nj8#ro\{ӵpR'l{f1,f"xG{)+:+,áwfwM*T7o"k4␚cpҩ~=qrC4`zGB7 st]ZEovK ^,]ޓV3]|8CzNڍd 4Fd-ݣm>icgw[ܼNBUBCf 6ݨg~?Bi3z08?I2QB}Iz ޣ= +ǰm_@Jk}2kbOvLSnz`?7nyEP?Wsu:^|C`~v_ʝ46N4e$,rD*^sЕRx=CR'(w ?|} s3G$3JM^,N *rSrI ?$ Iɂǿ_'2#8VE%b.[>Hjbt:x6-"0YBY픉)_z|"mX}h^:WPS]W]KDK-E 1y 4AaW{RQoՈ|-ڥ-[ߊ.b5L>`eX 75r0ehh]w\mEEjQ*LcqOWaUs FtYcV*\Dm<0ɟeu";@ėy1y*ńpg,hK&6wA|Q z*'iqtVGַAm}We܁7G8utjEg'c0 c?^r%rҊΦ Kl*V)A~]NצjO>@AZRM{\|?M±.e-~@T~ݩNUF䋓MAV(/MmE' ٗ-b(–7 ;:%lYH2mo JkEp/f&&%훴Ilj& a#_e ҽ:pPFFR"!g˃i5 Af s B J&M7ea>ԇ(>L0a9ua^%PE]etn.WX鶑q[LqS zIR-`sL.f qEڥȤiκN 'Ka.B\r$ҶF z}HN&&Mx9H%hV?]ԥ-m[1l4e|2mJDLd6/UAߓ#Σ{_owu,ΔbCWݭ4Keu`_eIhSo~E:Ѡ])=񵪫^*lil۩M993vH Zc)|0ްL[ƥ9kw}S)+.Ly]^ ISnCwdW3u^LZxV)m M~ulV󜧐frt0= =9Xu`U m9xX*ێD'rtp1M][xikg0ӢҖ@l꽇úXwmd%iD͇"D$eL -hUfs˭ʲ9͜Oͫz޻UhJwn+"ȳ"ȦWdfMLuDÿ I+[ aIMa8cjm&Ɲz[mPJpF`u`}+NFqBvfk#So_5^^׻wB._ȋr/2}EAb 0@XڕIW.J=ήtsJh&(2kf-/#{6-[>l 2ơ)SƇ„ͫ:]6( ^;}dHZkݳW}Q3s4?h:kDZ3<,|N"$R)XH-;3R0?[SȎ GM%_t_z_JTMa\k=-_rOOs;?9?w ʸQIbj!I'W ;oT|名w||pOj's^ӱߔsX?ݞuқzy'1t|ڙb=S[>l;,O9O=t<'AOGfvH({^L쮎jΒ{2>q38]rK7fŃS5\5ߥG 6|)JFח'{`(( i-ʬ|݂=cf>RpB4˙ZC377Lq6<#8ߍe|H$u!c|%`= > stream x՝]%_Ay cGd .d f _bNV;; <ؘ~L$L&_~/~r/y'{p>#awr^Iʗ=e+xW%!x97wo/.o^J^\5m׷/>18s4^ڣĖ|\JϜv9jwn r_ |o *,$*㝒у䤗_ÕzN[|Kk{o~Tyԅ~QޭWZuY @bN'.p*>xFkPܛ|{:ʁׯ_|wqտ}w.qޛ_605eV~wNO_ܨ_/7'$~? e\l.vW>?%m C.mU4+pKI˹1ԄoT?GHq T776h/9:]F["RqM;~YRZ֯>{}t(^e'y3I9 7/Ҷg `g lB/F/b/!Pcp2' &y+$Dj,Z-K-˖mX˥ԤX=ϯI߽~{;%'r4:z:8+a}q(:j>/}yEw7/3ʅLJIn%rRFaK^/Tٌ%G>b-MlW\Hw(q:?J)k}_u%o&y]ӹc9 /?gQZ< /߾YovGB Α@kx7߾ovʬ8pUX7L=ǥɼFP.E>Y-.)g_Vqܯ V"5a8a(y~rŋz{9FKC28+%dX5b9Ǎ.r#ҊrdX\q5pdXT&;ɰ XHEX3"aŋwppHSr)` ֱ_ hzxA*JAQ=3VNQZ!`@ kVM8;UX{<qF]{8aQ`!.*y"M;ғnQ[s>l#>Z aQeȰ ;?M*c?"MbV(ZJJbOZt\ '&u#bHևP&!5k?zfZ3 `5ivZ3 `}ZW;wp.uv `~6Rtu|$ Tx `CR}^*ά5ff Q!+J Uhc:*G71:2q4WVq'êuoˮrdXE+5$G69`D6IU[ZFdE &V +MAm]t*x` 15$:䔬7Lh'6 -A8.RVJ¸H ZEaJТEJТ(c350.RCq ֨FpǍpO2C'*,jt Q퀦N8`bu, O(XkΞ)'T'B S(|= Xu;{Zuwkј+ %v̳^ٓ41;X+l[(@%`J?JJJ*JjGYX+B8i~TR6wg;2NNَ vd$L$Fsw#â`lG"V8DR"noGnoGEގHvVv["x{;Ӎ# R>i w{N$fzpSIs}3])Ob-V8HаրH v'b*i8,?s5WEA!7XBTˤ=+CsPyáZZ<2ܩ>2T$H>sFʫF̚t_K%s`FʳD)ܝb,VH gT ٱ7nH%X*]>S:O-:VRF0Aj%G+P BТvuKZ)qsH:SŁ$^&RpT6  Pb%jaX:ϽXm0$dI )U:DVc:0j{tQ U찷I9>o١"uN(MͿjbk!(k8qBՉ^ՉRG1h0zɅR*kyUuީT&0h'=C4$ ^eB28aQdXtnVB0~ؾdXqB2/# :17ULHX*$T a&ZB9'spE,WE;K* K XtJumi_? mGGlpAQ,!<淆>ȴ<"d) jʃQ<va^#fȃX>$Q X< V X4Lh  TEE X4`H X;3JeW}!ZpAU N;xJB6Jf$`Qw]#XBx,!`QؕXBJ}<:ھnQDݎ-aؙNXc-!`Qw$@:I8tE j\[(mH*'gơC_l-!`bL@PgT8/JZKXƭ%b-μ$XJuzM]wDNM;8a9 H=Vؗz" SOE}_c!OU㱐 kE O7y2zN"f7L,]n8X˥զp A7phg8͵WRۦ5k,z?"q%`e hhf,!`KXu5rd\~u$qc<>m_ 癑xy] zY ~D֪|91̓|#OF]0-$ F @V菒dX\rdXbȰrr#*~>L7\Nqw$o}07z'8p; X0˃Ł6xUQX(XtpZxBn \ NRRSx"#Tp`Rx-,3 J“pC*'7-hJ_HGMslXnh jż -8SV]s X-SI'Q^`aR[G!7;Im75<$F [t`҂CxJ n %VXKDxB n%V,Jg׶(1%`QU\&#w ,jxUEgbU\+1 XfJLNHi=h4| Y*ywupːOǧH?i#١^sjݠK%v)I<|-.&''N'tq%4;Dm{C9eNs(\;]+vqӔyafx*_-+8ZHܞ"]pa[ XVdtU *[:X!HxS̴*ѧ%ZWBwd;aΆV_ ` Z` XGl-!`QV0]B}9k 1Eg nDb%sI"?Ĵ9ID&J)`)Mk[El'{^f;[ZIJ G'E!V$`gYV8:c78Nf s3@^?A&~.Z;06+:=d(`;XBj86XvpI 6E:/3bX))'fWH%X)x$JT:^! U~k AL;/dѩ6&kG$L-dzwNq82 Z{I #հO@d냔ʶx>`^wh3D1oEo8IX|%Z ¤"O zXB ӥdYW,P uHE<nӑa0]H~B2ᤞ'b;p"!1]Hv~؇-}zL{1:yuNbW}XKɲtGBIn/b@L1˷-61ox%xkE\zG%`J9O}s&5a-!osHƝ︚?iBk땠\ϨX܌JJUVu}rǟݘ.!ƺ mrm\omS;X{D,~pVUU7*7\Pb,~g)t^Hkيfz*>g,yn q Ӄ6;*A e` b0wY4LbkF ǼқoUl8b6 h5|"7 X'(AgXB1]B5V:l9kjk`oA~6y`m+CN/C Ab9 X jϛ`Lbk)l'ɼLzJ8J%,x\IcUq}4KX ^,!h5_^B5-UKj\kB{I> J7'Ao, `IO8:՗SMMw bYN;NYhy` 1]B՟CUq0ɩ+RB{CfI݋o녀U'cWBj0=:}/,^] X0 Zv|;/$oqLR:ywkNᰈm8vNu C +ֱ^6 ڴv`/~vN7L!ho5XGr{d 3ΝM:7d:H5(ɵJ: 1INV]_cI+ `mZGmd6JSmAro4LVɮ/TVdxKZLb-KnV!y/H׾<Z LbFs8BRB%` k3:-c:Bk$oX+lU)$`nC~+\6 Z LV̸mwƱc]@v-mtt-@vG WzNV<)$`Lq]$`+LcɶUTWɡ -px-)*!h%Iʸ@:n $`3*!`J}!v^L[B0 X`VqK&%LVsK&VIl`AV1snARjµB% n $`5`k-!-\B-!Lbw0o}_z! eEALb%ꇰOTbLbídIc9p=0>ۜk╠ LVE n$hEuEmIdd`c]HpM$_C&~kEh`kn"Jn"`EX+EXEpU"˒}ڠQ̇{)x$inɴ[7dǭD,naUna>n.$b5_^HV1\v#G"v?޼%6yb3gܮ9zjc/b7= гX5rfşL2ߺ0Wxoi>@W#s_w}k~I "_zD#Ux"_ȏݘ&ņLX4 Z'x'V_ RRVŋ>ˬ1bnn${3UbIЪ> B>bIMNmr7&A`l7 X<;Jfc7 T&ɡ!PVMu.ǝ,aEmT b[PS|Y 1H Sd~X1Jv5 H#IT^WX_<Rs+QXI(KIɒ}v2DIJbE'Ji?BjEsJŻa49%`^.%`9%h5W^J5,m,Wj'IҫIj.SVpLV psI*.SVJ.Sb,gZ($RUY$`KvBJOVsQrvQxq KX$2ks%0TwMVq˴&A-UwMVs!k_,/%ƺ-U@hT#juI[ 4 X-tXWaT,C1SVuQ(ŨN X1Rb|3pWpx~$yXg1 Z C;:6LxJXiw  >YVMb{H-+J:vn!hU)\\;%`QpxHxbMk.Lb{R-+Jr]LVq]LVu]LVuU{k+ o.SbcwyM9^g!;%`Zë!0SVqxK<XZHS]\Y)ݚ$OoY$8hfv\9 ZxJfg(O Xb<%h)+.Sob,a#Qv$`wJr;0LV.S/oVqc֮oP$()}<Ɏ"*Er_=\Z}pkgLW1V(I.k߸v_D2;58 .sD2vjD2p92,pw,b$b5WV"m9DZ̸<<Hv'=o $IO*.s|kHլv&pǻ6tkÖq?x]~;~F| /xg_y?^Ps=_S|t=;F:6t73Yo Eu%oRR CpI;>Nix3Go_b77֞H1$wmU;ʖ[{il^@}?8L)G>q,4ZQ;fo(&_sthïÿ}q.tٯ_|w.۟=M?7._t~R:wbW/_PZōSye_KeVO`>߮[>c|6yzy ~~fꜺ~nڍr\7}?ʽއW:/]/km%=9%ٹ7KuFkۂ[wަ`)ZiRN5*jP ԅsMxDM򯷻k?LV&LʊAmyB{Bl4h9Ԗ1&ࢹm =0\-?)|›%x+ ZRYamq>sn7/Xё]5+ (o$FZC/> /i^߸n{~w#@|St· 竒4#8핿|eN ?_ߜSy{AUz7҈Ks&lxSr$w?=Tm=auj~R>YF mTЧ򷍰Mbs=Sݍ/~rHvh\/3W{7"-O2n|\tIިv[l#VO H"_oeثmZ0}~j47WTOVdf0񴩦ab$tL~3jfc9VM;z5SiJ,x_=ŗ/=V__Q}F&fêEϕ:])S}}> stream x]Ks6Wي_UIURSf%?*XrlA|@wDN0, _7F M?˳o?gdt{YqTu<(4G7gH8FY,],~944?+ $G?]/_?_#|8-'(_ꬠ| (J%I8WKr|3otVypu:I,>TWU`Zd3a4iLi:Ģ@Vuẋ=T1(IÌE! _CB@F@3J5+T!ec]Um%4蒙OUzOH;AC#g('Ȃ̊y/z?8I+P)Fܤ1\hݑ9P m":wapoߧUp< 6 {z31d3%0 % "}VyeEy1ܰF8iqԮNC*4l!{*k^x%`(GmBT di؀UA'Ξj'4T3!KDUgrW>mwFwcW:ڪ43 5 Y4bD8]k[\'3>Zt!é4_]ڏEon u(N{+TqwIR]KB g!E 3"BA!b9CI'uE$Z/Zp"6BWHa ;P  집{xlW㟗vu) Ƭ! sWX*6Nw2 o͞+5|&p> mœQ0 sP<EU>Hkx][3Ns廡N'g=ԑL8.{~1K]Ѓ?S` E4?PUL4,4 bə/)H4㽃;l S=snsރvױQ,yMRe 0;ܝDw" Jkղekp,I*-Hk8^Eάh~ @H+F] _)8ƴV"7χ&{id MH.l9s0]35X 4:5iv}> stream x][oܸ~/vюѭnY`MM|wzx 5GPӱg?aHCJu2ɬY?[e19^&k?'_gq9)*rs>DyŤHhV_6^ޜ΢di߶Ӽ6ABHG󏵤EY\&sPX? ,Mρi3wtXǙ/h^ر=,ťxV SϢ*KV գi>CO\jg-'/ t _D<<<뭣1+*v“UXf uqKNmhhhx1}J`)b#%bh~,2߹ -9i^`g@~F>Α4"V&X/7$N8&5,1@zCׯxfr@fp+4NŭmO$3T91 @c\򛻌0g@\[5b}ڕŁac^VhUnZ?ϣ4wi^ j ʼn[.w{Ƹ.]F$fdž<0bɕg8:ةz`.R!emL7S-F>ЗO.|1}W(SR^DL,ʻIJ%Y5]QO9 Tk(Z/yLPMh J%}q xY1 yl/$Q9K%Lr\)PK }ۃN{@[pcD> š3F(F ,("P, G%UDVw}P0ɂ99;wfԻyJQe)s;ӕ8nu$7>Eh(:hVl"ObޅT[ 8o-nI'M;ݦW^+ַSeBݫJ BшGO)TF vWnO]@te`YWC?#Tn Ɣק![W)?Π۹%݄HwM.j7:q-8q|_nq'ž8=t/'v11 = a$E^@?t%{[n7dI8'(1*hJ%3 X.Pw&50bJ4JG?7@` _YB.7?G$Y+H>${CZ0m@BG(í,2ivM(Β16o|?Yܠ4 *S&~/U6ünGC˙f@9'Lm\ga-?+bݙODh+1$¶*&ܶWT H;FAÍ h,G nF|J3xfK<P@6to49z};Wj9:|r+6e\D O(9){uda(|eB!+ w"Z` mVCa\=p)ë<TeؕCI9D{Ǖ<|=_STJAx e~g[&mQVmo<%溏;[W%Q4^/' bIw7B\ost@ J+̈́-}̽2e-reʾ˰eʾ֗Osi <t"$> )87+jfT1n܄RC 唢x$ v *R 7;eU6wҲaË4WII`ҮZ[8Bh"?Gw[Dp ތqmu7&&l8MK>\CLP:UFIdrF0<{D)f)eLgS&F*n`~U_~w0 ]o3O,*(Zk8}ƣF.ΤęWR1_ ^ݐN]Iнu/4{6fIHP*TꆸbhHq m^Cmq8Xܲ@++%ӽzyGfٶw5ADheذцhCiU%V2_v%s-Y  'ׂæh> kJOIrVL?}["yY:pd1?iU8 ݘ]USlMFgqO0·1ry<rx*{ /&SnGpU Cx:Cg#?_U0e|A[Q>ﶔv`\ BIMi2B2VhCg6|Yg$Hy 8~48r޽ih;̈fY˨z2Dn<p~xHŷǪPUicKN;yY˱_d˓P(&^.`uaC :iQS<)r?i蝩EDA"E<u&+l"ч10|&j~^ˈ_F2|{dʌUi>ͪLG[kF\&p^w H]&%-ws*g ̅lm{ @b_b}ɯWWʾsӍnen&ۧ⛗jF>o,4.j|2'Ӵʮo֪Jb^m]yڿendstream endobj 350 0 obj 3061 endobj 354 0 obj <> stream x\ozԭמ^ݦbi$nb=A:*AdK8{\!W=YR>%a6lūvj ~\.5_͠/7 \4Ӎ[;m;.|B r#̟1̟`?<^̳Ma| 0(B7ڑl:xŠ>%E∰nOtyDO;>"?\o6bۣ*"CH{b̑R~${{![F*i8SqH[a0a^xQFm<= w`b d8%Ja{ɳw ҫ߿(/(騮zJu?!ÅRlDZKz ir.TU,pQDЊe:_}tξ][ޚ'(Pa~{*&v4ZmmkUPU+vǹwv8͹۶3;M{a'l cvzDkn͐}L-"#rĀ~cٙn'~1&Hl [ӊ܅a[mS;l;щ.2IlqlSH Ewu3% ,+^edc>& 4&z J(HQ 7I'gL_S][P$D[N<*K|P,`EoԁR t&ȏÂ`9dɃ6=a\2Əli8ȵ_`Oۛ!EF7!jZ aO ܓ:#ZEs&AT&:SހPA*J}FRٛc QaGPPDs^ !ye0xgzOos 1 ZG}{*= 淣;D%#Rjq'i؁"(rFC݅i+P)q=PM*ԪUj:JHDX{i A,5"R8B=}ez67l{_Ӱ{!g0.x<;0!<-P&kIR,WU#e7[G<r> CM4P!GXREƒJ(x Ppv 飌㼠tKzADW4WㇲJxyXU EFTS8"97$?%zs|5T\dQ:(Z[2w='i^Grt uyŧ0K2  z\W'ֵ[Wv/& 異O$umUŽ D9o"CW'j\`Ze٠/铹OZ3eѭo \} 2vE=U^!F  3vQk;t9QAuo~+_D-VvhzfS+T{ d6]D87v\u}y?ښ#TkY1+H8tT#_W g{,|{-+yf6臟ykC)'4&028+SymjW9t;VT̼\1rBNrx"@sg5; '+J+`0xB]pg6nzGDu27uː6)76 0s-N_o:Mh\@y$%d q?N3Jia } K,2eZi" Sk粲Azk"Tq!\ٔ,<'#K6CLιUҴ+JTRPW 9 1m ֞ø>V@X(atZnphgH#ҼWƛVO-\%*tyH-um81g]{[fMV@<$٦دOz"vw$|qwQ~Ya+NR9$^ɍ)< Χc~c:.Sv`k@ƒ?g+^Ogf^Y‘'R6--ASX4#bH ky JܓX+urC}+g1~3"3pT?tN)ž؉ˀ+hJ GwV*U}?!hf?P|z}#F9S> stream x\Ks6`V\ZG>)>Ȓm#ɖR[ߗ$3Q` ~|,,no*g7ه_7T|@U*"f7tO5SX$2o?n-(ɒ4Mg9-|~ 7~y{kU.0)C.N[FYi]`]K=3wRˆRTsnB4/'h߳#duq*KOBB/hN\SW12 ZAƬaHtMO~8#O S= qp!#=i٬oePW9W>;v;–6]ch_YsGГM 7IGđa,#ZCG#f: A:x9$4^iЊ&=`t#Kq KPk wL{ R(2!Lj~:YRoVW!c؇W57}cDOn3zX;gM87$`ڑ"* "$.TQ33\q6KkCe OkGĒ&GrDoّ792zߒ`{dۚh{˙Lnlk]:8C~` i~qpg)!D{`.zy)-5 踒IU@pC3?O ϛ61uԐk?mn kqG0v gPP}1XU;0P4u|I4Vp*,FQ^qs2̡F:dG5CL9[jU'Q+qS0qTM%>I&E-H,w@n{̠]+02 p5l۽"9gpeAiHAv U"'(DG'm:6G"AP*ڍΚhM}@ #ɩ 12i2xgxBJa3c!Owzeſᇸ_@Zd'G&:p PsW) w6+ $,_*:zk}תjRX5&) 櫳_N`RªܸߘFXYy'b%Gi7DJ=8VBZ0{Š-FoOu2O9ݲhzEVؑ1|bybB.C0bUco^`Wlp6f ק#֩ GJxv <w?&捒a=nP=ej h=+XIH\w5 6/ 14p+#ᨅI Л)MS@(ZSL*M\)#'~d&_[r:!@^⛾Vgn"iu izEpwSA*b5]5~M•%;Kj0CuJq  @  Y? ?u!;#e*nnnNOxC #ipPt x_!rd"}_`a#b 2PL}lNyąTB8$i~4뵎r#7BtQRE*Ljdtq81I%9"sDp( cBGc-=rS}-t<vԬBb_މf{_ ڬWs\uF>OI' H.9^S/TD*O<OӔplfasmb9Є0%;`zh `b~?-(ulmvH;Z<H@NjK4uIGy>pOöm1{ώB~x\&}X{ V)>ā;<˜t֟Q&c]%84a 8.T\]YF~\pYʼk FƎfAVҜ0tꜣ h& v *Id砂7F*etK"bWBGx\R.{JkܬBDw_V <OtKv7-Z=\ { %߅daU9fO!9]-bcx\>PNH߫yz„' k9龇&W)JCy+ `y3LUc 0F Pn}y|`Ql(Mڊ#&q c˴#zVGiu;TAT<\IV*R6 e@\`1$I3Uϫ5falN{~Qzx?yRZ610vc]!'eWUJsFJn0AjFCe*l=P%g=w_޸ e9rQ#@ds܋RB$r?X&7j~@Ȝ!'F7rX/p`K/A}+?fvQ,7f:NԞf,4^[E9X4:Tj8D 5 'anzk`^<ՠ̲۟3%QY 1^9Ft F/yKDx;v - A+qg!KK4)! A  -`ѻ.l>S=E@/a?OWu5ï?"7jH}' (ɨk"b-|h[*m_(Sa& e_>l7Pc(=K1,C1HBS_+""H~D"UɾqDzxmO0$qkg^ChGItؠ=)=+O`[;u/Rm֛8G8&<i+w5 S7'|o㷆oŜO^dM$VQ{ UyZNVi{Ic{o?Ϳendstream endobj 360 0 obj 3349 endobj 364 0 obj <> stream xM6m c2+kXY(^^.$=|?9@ݷ%yv^DVUf!o^{{-۟oo mux}u\_~y|.}~.k{=_%7{vx7~ӄ6P?o^Ѿ|3XY#حϽKw?N{v;wPCY_~s?]_?}oZ~ܷ?_+Jo|jpۗ@+&7YppQ?8~wOfHlz+quuNU믪IO]l}!gՋWb3* y|E-kScY޷}ӟuýܗ\~jߡ49/qӴ|>|I[iI_]{?SOrLnO啥X{gw6O!y|=~h_a]w~ƟdׇL~;k'>My]j_}G/P/Qj95z){ޡ0~W NaOɦ߼}hhhuDeA3Vyh5Kl1>{y}mȭϦ ngaп %1!TO!zՕ^^x?_'ᗉwO- a M>rk?Z:?Z:_C&߿gx~8j೦ /_}]OG|Űum|'ky~H+OC?mN߼<ܻ?c\ sN(_\~x?yi~լٹ2![seGkGkGk?՚K:̾>B̙}?!>IwtZ_w&́y9>6#k CPqܺ1j渂O/ߏqgۿkk}]z_j~mu#*_ok۷'ygo?o\Zukv-_+\/՜kl{L}ǑW_(E <̚{p~򺕽- 7-soqy}{u֗ڶ9mRz~׸ٷ;ٖsZK~G>s5uoRFoe. ~={TqIˑW?yG_>gM_٭n{{o~lqY}9u۶_]ȯã7^zܳJߗܾoU~o=p?ұ9yϿ9us}}?8O4۟aaez4yOd[~)(:znY;֮7-=~ݓr߽ڟ'v߸o`)_az8QyWDi˭ S;m9^+v'I7z5'~=WnSU|ޏiACm,Wjsbu5_{rlrgIMk9`snNݏ~WCN}zx;3Ef\0g\3>Z*]tO_Y*Kqsf\n=q԰qރh=囿OdNo|3G92eȴZYܤt/{[Vsy[0Lq#= 0<~|z}_]5{Lަz3Yx瘨l97BVL7y[/Uv1\rWy[>|g2bnPS~{unjzoS[M\{l~Mq0J7c4avZJ|+wt1ds^҄aLٟs= óyG-=n9Ym8YZl\~5S}1,2m;ols=/>[9+,~qwX9U 2s?4Y^vVE8,YWWݺl+aU{hgǕ싂/ظzK_q',kh v-]FFهþabsE싊%e̋A+[yEln0. m.cXz>wWMn A֜{&ۢbyR+CBc&@=nziUdE9mQ4_YeJ{0u-nB-1dm!Z=`b޲~.VwN=s\=J m|%䶽+$zI+H?B rHoH5e٠j}snfsMji8քMWm-nMe[hAjI ޷`isP߮޽RI6%q%,ߐp+zфo#^x'r+zg>9b$6>2!ˑp-vxf6&}Z,mݛc2$nM͙B rZ7$̷Lm8mwZÕ ׾>}&B}ѽS,NV7f$xezYB­葚0rS.qy^Żkq<a0s c~v㖵$[s=io~ҸvB3#6G"\]ж{ |YFcf48+& ̌'4YWH5-4(>u㠖POsH%n3Mt9{alHmm|%dNHN=[hAi 7x!ȴ!^f|c{_-[⸍[Bia~4- _JNG+/NZܰI-9VpBoѸѡ>?99?yf X`ᇙ.$M`][͑Z0-TԐ.T#UuHVDZU )(7}g25`d9Tյ !oqNZi}d/m +kn!Vsk ͮ\ԏJ)Hs+q.0`a>,?*#$A!Ŝ5pϗ8%%~3z` BwO@8e?&}3Ł%%60"Y; 'lFVU87$~`yEcfui;U:i>FȰaQhDpi:[p+}Kԑj/~~F13w/s0Y$@5!^aaN0Aq}태86"#\wNY#܃}O46 X/?hQ>JgdDC&z^3-0#q5 Z[ &ZRBG]dF`w- r'1%p:/3A-)C[}G cXP#|3 ŋFI{sc {hi ҐP;a!a_|7fFV3;ӯqAӔ 0n/Wj鏷jXbsf.p GZdL+zx)Al"Mv:%)B&pX ~", OXKl-q&s@h#ؑmC0= 'aߥ4.{hz)7Lޗ/%ߓ~["9A$AL S$aE ,KA-),i.lwdnre gH5{ji|ZFOj?A[T.{5)}qNcUhOՃ޹]t x, 5,w64 L rPI(~T=Yab)%P@ڛH~ѺGAraM8n`~}5) H~oF?1Cɱ. l !;\Ɛp+z a^  ;>c]L`x, 3f$ Ç  DNsВj?-R.бLcd]:#䀭! l !ۋ8 5j?28!b)ݲ@࠳~#Yw2Q>`qqC6 !!tAq=ANbI7=]0N56D]~$]oԌ&˒,%ܓV3k" _oQUVb itZCZCBf8Ddh;dLM5eVYv[}Mf˙82$.h+bwKNBbkr.[22?"!AtWunMǖp[{⠖PI~@2d'~gcFę~LG0~ۖ;qk틃L1JdDv\͟~hNzFO%қ!)aI,θAjA g,˅=.݊cfI0@"ې$l;ц0ࠖPQ ڞ l-%!d7}&tgy w)CiLvKK|J |#nE3[hA G%)e]U^2,GNĤچx%Jp#^<2;s,le&bOix688B9P_ -iDՓe2OxIHH m'Ȏ$H8:lt&v^A-A!C>p<+$yӖSdwE33'b۷!aԆӸ8%%~'cN%rь7?>ѓ}`&-9c4$@!&NNFqHGHx<5)kzd2A!dۙO+gO|k!!@7<Ҫ`f]H!d"$eF Hk빭3ࠎP{ [E*l ,<)yi358aNi 0 #piAi >؉\دmߛ>w1j=q3$6kP+`Z}W^ڏq]WE`g=8& ;SaKp+ Q44n)A* %% )VF E[)e\o(^4ZC 82- tP'I?E!d˧8%Ycp$.C %C%*D"k7:q5IzBPnUPUm^ o zTnah$YUgrJ,֪U: $RzYkk[X+(*V9JQb_v ZRaX-ud4k AUI@)Vbza{ RsxH/Jc]Zɰ5I(J* !v5j@ˬĬ V: ʒ)׃RVH(V\ʐP)cu#d"+  k,Xu&xNptԸEȈ YՀjJrP?J=^uϫ1"^ruyR/*KME[ǫTRBh[ k2PkjBj?0k+CcU[g"$GjS:yeVj! ޷|Z{Zb9ZYu[gPNTrtmkR]VeeQZt ~,eUd u@aVU֍#q,7@ Y5+I&v+G/_(c D6+݊O~gKn%[ %/ Ip. 4~^}u ݋i0X,օբeI@U^ʬҭj_ЏJ'O O:g)+ʬtK%˄z&puetmUY=` iu"6 UUKwUm)V#rnV@< W*kxPi*gk0L\oREf댩;c:DRUjC5[#f@MVRRj':QUg)sƲ/GW4&*WMV4U[9!%.Nmrھc25vѱr]W ]*lr؃Żo R3]M/ԈVHM n6I̤B$<1]sl>%"bmn+n,#j.NJ Cr@>iBGBA^`x4|6Hh a͖y a$ Q䐖P}y@~Iafjo{^jXbH@Z5تY/5RR^8ח{Ӌ뒠/p,vj}kb%6`&a $J@ԁ ח.X~z v(ߎ{$Eo;Х~ $w)/-!![c`W#Szžx^U&dqMkZ`F#lM.A+Sx"tp\`C\`H G|8o"ǬW, ͶtXnYXJTL1Bv-"hBP SCkύ-9^q-IiJW|#j T? z MPop7 q)x*B(ˢoD- )'̸1J`dXb d dT(or."!]UkzdfP3HFX6k0dwϳT̆|2\{]gCQJɲx`vSd%,23:,ۀ׹EN\wopOhr:85- dӢbxEJe!zEcŸ.h$˛ Ӣb}[E=-E'p]QyWFdVUݹSfE "'}J棖0L܈D[1_M }y>̍l᪨X 7rF}b-)R fz m᫨Xzsj07C#a麑5̊FfI^/>ndt`6EžqFȰ8v0mm~e.fHt"xՆR`9%%~茴޸v}%H=GS&0TI4Gx<-$0me/-!-yDnNxf*.&8m/R^vޚM9VJHc£9UM:F ׳{ QI)e $Y+xr& VI@P y!C%0Pi@ʻ X;`M/$tp &+;4ե)RD:O9tGGT,r܋#X!sߥto:Y׵É8i#Ag\AH!`d J rPKJˑ+9LFJUڱ8<NAJbk$.(*ue$JˈHЬe'Z)H| %žH^̋H*6PKteP rHkHh3%Z(9^a.4js.,+Rm{ɅUʅ 8k6ϼCdLWy :Ɂ<%A4X.uR.,j#K?d]- 0b!ϗ2]#Vm?/ID ,HK2[dL~eYxЈ %/M7&jPSCD3}EU7LleٍH}e q0j/Jݍ*xVnF+fU5$AR_ 'e7ʲʲ䐒+Z^XʭMe*%ͫIGdRN)XP9Ե*SWjnH|^pA@j@ҀԐJЫ3_E'R 2_筲br'!A4W[VWߩ /)SWz0ݑ-t_ϝ8+rfLE02_oY&OD*Aq$&g"=A)d;E+3=5R#9L}e;S_K?Tov:!gue*@vefh%5M[I}$JrHG(U_r\dJzDdjKɍAE+&*ߏL RjJq*VQDYP+ꛈO8{@l%m&"J:RBE9>&[`|/0 ZBJ kU|5wCGPaovr$@, "H_ %R 1@3αMsc1 %jR,61`UM/_c~uڋrL^ A+qA~+CdL?1_Z\VJWZ-}WL}EC*{W5T"1R P*Wb+HЀԐJ2)$OXp@Bг8ynpS9T $$^4!_fht<hm8pĒ$FLǬI~I.ymD1S ˸i=_ :l{1taD,Z]}zp:=OH{rAcӈcqc^.Ik+ Bɳh[gk7!-/h[bbq, 0ZH8y3G[czҏR[4K4T$Eq@} b@P Aϟްi:ZC@텶ѯ$jp껥](CPB@˙&JTr :j5H~+l0"| ÆH{f3hqra{qWb9__ 3Hy;͓N vY@dt@ɐh!V0w( ټ&mq#Y}n 9nt$@*AΚyp-GhbEKyB)m3[r>iO̓=YJ:mڏrv%Ǧ;vx39ŁC%Պ#]Nbbİ ^i[=#_Wa%s_Ɨ33uVe:6$dAu$Tfmg| G(%RlxNk{"`2q@:J¶{\Ǜ uڋR=AR>Ɖb?Tx,NA˂k!ˑpigfuSbkx7 9EszThn288r5Ʀ#qnI]ԆX-qHoH(#+;QDk}!%JKhk_)}H'[h!hI es= &ok3vuhԭ~S;?tS* U}xw ^15l!Tvr,<EL GthA #]_|==E)b W#9+Dw&qwUHA=4-qPKJ(;@|q/`xȨv8E<ph؏jYQV1TEit˾ab)cBb^>rkji,W'5ڃ8kqhbOr@.%:.0ѝD΁!H8w!dN3Вj?I`wƨgt6AwN*pM⁓)hlZҏ|ZGbyRc~pMmG$&EȎ# at2]ЂJ'yQ#8gzaYyYK~9x%ݑ dLK0zGji,mM q@I|_& >e_[Ց_I+ܰИ<}[\#y/ƭBX Lଖ4')j/9$QRssH.Ͼ , >t~)#40Y0Ka xYrokx b<11s+HIǽA10fhI"CC]^PN!IEkR4;u&1" wfipV:4F*ډrI:r Y=g3H@c8x%^dGٔSC!cr 8ҏ*MՁ& =WӯzBUPI d_!$,{⠖Pd4 wi/g"~z!rX '%S@s?1^R9 $.#V8,ܽxZ?ޅ8P͂Hz o p 4j/]pIY*5EK 9Kܓ]@ڈ %sRBNéZRB퇬=ܕ#Vw3MYV^ ?_SM5֑滅'z?;O/k%TȊL!!V,*&43bNe+}~cʹe`:>liࠖPQϭnw,L>.3@HC4l"T 3όm6e1HLfO/=/'ž`C\6 T=Aj@ 蕻l; ^n(q]~5f>#[8gǫK`U-xwacE]vt"q O7; 4Tx0&࿇~*$\ҏȎ͚KYoC+4ޑ6ǹ={.G6@<8PސPe_(D(=ux@*7{FD7NS¶iH-A-)lD |::(xd NlI]yD!a~DN@qHKHx<7}$r` ;vd:9P @OM ܭMz3Oj/3{ϣPn gSnpx(&躛~*hu=54z7xP{Þk 7os6şi eޘU {]v΁f*C*׳Nz%rrT.MﰦQ>icO5H2%lH+)Bеj)p2ڏ%L Kfe yF^t(>r ED79N/;F Wm8gZZRBG9)2 <8 "*n|'C u'k Y6ĹYh鏷PRj'Js*Kd`fXv3XZH~=Yגv`lt\g+ƚ~[Viw"%l ̒PZ2' l=H^uY ǹ^ Dp@IJ((- '|5^IS,, ʑo9gjX]RygascC:!!dCZ$汁*j=H-A!CK聞ߧyG|I4 ?Px( , XlkOm8 lZRB퇜Ua,o{o^hS*$՟]HB/8Lϣ 0Hm[j/Q]S#Xh#XIcW[BVT#X# ndP;g\[Ȏ7=CV `!'Ǭ &k K]d>ĀhR[j/c& ^鵞8*YSiB"mr̞#&taRwH|D5qf"qb0s ȊHXX0:AZC@E,ZB3M 2#/7  ` ІY jI y+ V_gv&ӱ_#Ѳ%, D p:V!-!ox'cܽ ".Glc >e|k;|GN#tņ8p$6Jtx‚+8KxCiqHxB FĄ-h)cz,$@8@"s8^! ENsL ԑj/@! -[ùn4 p8p@$1@ PB?[hAi 9>c!dv6v(6ãCFD 'Pﶧ6xdP{ n7yծHSF W &2skV=4FgZRB/"ı߅Dm; WOhQhBS}ӗ#54l%)j/mǜٱC~Sm ٶ'y^r;S2+ĸVrMk'øO Tj2>e]kwuC~$%PpLCOD/$2KpkzԆxM q@KJQp4@Lm9" ޞwD#Ƒ;|MN[89ܢI\.}# `L7+1CE׬I{o Y-BIn5Zp-T YVy=5sXF#r tK'$vzynxh1Mq@CJ(]uxP )'2$fq-q%Q\Oje:Xq$imd(H ;3S$l9_1wdl&9l8~ r .?,r6ڴ bP*CCBjF5v1Cfɞ q 8/Msә2:ݳbk~y\\qfLJ'?0 #qbVؔN `3f}유t`xL҂C:6Zw |ଭkYmCgqi]s 6PtX8KڂĥwgkHp. ީ@-qo!%t% 8Km.ii ~2k#A58Qɒi9vtV8?A$yȨq A]RRj'cY/e6$. wea`:++q W'.A\ꨮYJ!eR6 ZnA[FE-!-!sC''m A\4tRL]i?B\OR'uҌsd @ AC*)#c®A]VdO =:8K . G >fv[_2ll+chA]X=G@ yF ^x L@E-!-!c'of@d?yگbWhJx& ->{/vMD.Y`ƐeM3-AM³;4BĴvxzI }A6;@|ڧ# xv.)~I}zWdtN/f}+  1!f]>Ё Tח.XڬC{޷ؗum ^WIz#8P8HUJl14*-!!cށ7omm&v6[m?jW˷=b6-_vڟmy[Cz-u}!bW µzˏZˊ`$p$Y^|^y?_^ۛ&);GqW'̈uOկooydm7նidofpOӷϴc535ahvqٱA#s)\嚈 H}\@*d.G2{\{>Oi<nKownu,7w?]smڧ't%Bb9| Dy[۲z'~{w-ͯ~vm7{I܀c'76kwW|;f6VodzYtwe:M'3X憾qimBSmmcNCЉ|enS1W3@n;ݳ?jU>)c&o1Z '3,D}bƵY [r>1\ʋ k}e/Ze 8\=j~iLˋIн`g-;0Џh0tdpxf}?LKoM,o-`EST²~6^Uϓudয়ݬv#P13|@Yw;3sBK?j΃YH 3.sAT p |~^LRi!V &?V zQ!25~%>2qY`^N\ZzCB-AF5]U<; A7^AK>IPmh(-!-!/_};cUo֍c&ocy?\5 E.ǚP h(!!vmߝS!'/?{妆Mc;HM9;Ec[#GmPϪ j'E2a(t mmp_#G?PmKK1 H+Ds"fH~G'1 IߖV.;/;}O3% †۸Hol{(?: 8p` rxϪ:k\--B\ 8[!Tv.hB=\;ٯxi5q(X`]>Ni= N͕XW\Տ ! !vSr0`)s/>\=7cID BL-) f7GH7#[^7=2 OGr ;h*$4G']@ M=KLրDNX"͎ 3<@'˞G3&^sm(18H8%$_4u2-/u9io -k%TӇw.pw@) FFilLDz\9f]>=E/yەp#mFRBB@97cNrK<C$ Øxe.xs#!9bl C805@ho#O w1$̴'}{(_]:!%F#=NJ,v_)`8qx 7fZ`Km8ͮ]!-!;c.n L\``cEq98-CՋ{S!a/b -!yc{P_6M$̸>lr {&,hnWy`1 #ڧB;ވpE[W0{3ڧBx.,lO> /ykSóYh}iΤhh`hf}h w!E(߅!&C)ǰgZ y`y#"E<0 h'fza}Sz\ Yo&;fo) **3O1FI =_a{3aYᳩ=c-`0Npֳv c:34'̸|g־h*XvֻK|DgϦbvOwsZIb=-z ٖT8r0y1(Y0z1v.rv&GKr.gwȏEK݃gaZT,1~\o}cxq/ih~Ll_L+wLVhU0 n |=Y+\W, Xc?R'eWlLNWĘ(X80:1ƛW O3w goN򑎼ÍϐXMɲLYV?J ~,aYYd?Kc,a8 P|Ywj+.&F?9MÓ8n8I' 突& mQ14y>,y!@)%Ep B@,b~ kޙ+JG9+ϵM `I@Pl ̈' Vy-疂"nwlb92Da4b Kzv!#S%R3^Gv+~%q pD22HJCZG/x ; trGXnCx5#xq{&[LD~"!^R@NE<UxpR0]|>Cc? oPUt1t 0PrQt)v.g-sˏnF"$*dX~iqqH]Hkx0VOwTaP16TL:wTaPKUàC#98T\}VB<&kyU|GۗFfHq x"{(>ټ8_]/߯7@r bXdFiQ)ڮPD1U Xc?C/F "m1ZXբi5`<0g0PD1Ӂ/<xiֆ/ w w q=…)RS?\]:9p{na8 ЃpwǢ8j@Zā .=,S.qy_`bA!T8vNvi 7EG2CBF &䀒P:~73 X9y0L<9Y ?0,lBA j/ oezT8\;,{h'B-]I`` `v7N,%!!sS; !X8KN|x{X<D2G)lBRԑj/X#KF<|/ ksS11Ka#1!@4EI@P41 t YR `0膐B/ &NN0uwmqP[6ąMwBg t#q Ѳ0!6"ZZRB([m|!!/!vO3)A4cA0%0BmD 1  1A"<31|̢U1 ¥.ry$89..c>xJkynW8J1pD~m'RC`h `S W#W\qgf365,-A-) .0!;WS`)jxl-zPhF A/0&M(jXJJB@{dF݆\FXWyI{N17N6Ѹ8z  ;i tߴGG"%@d$w a]#s@KJ(΀$.g,VPw:;0N~Xp J0 Ԇ@(Ixf3ȅt"/' `8ݟL-D=0@) pK54^N,_cb%eKW@`^$>c*7J.ÃAK8Sи 6{$*$-i%`h5CY|䀎%"P 3:6XmX$8,m 6w(Fb!Jw-N̎,ײ܄\Qn<+`ޓvsf>?LWaW[@Ɋ[n=mGPрBj?\!ؒY=pnl~f/8mj5G!W3 ـXps U W<OIe(ؓAMa1̹}IwZ,@-+w>90h<穈^Lt1i-Nc}F劣9 zGi %I:| lf0)4D6wᄱySsӰLgmq *AHCnzOM8 ɧbpHkHd)0-y=n#gil!!̀A2p([ISNRG4 TQi%!p5O8Hԧh c/"K莈>!ScKm8͐-s@KJ"Jh`nq<)!]výj;F;%&l 3L +F pڀP:Avb 88Є_uڋGϔnLׁ#e~jvϞWwsȑz׳5D'/ml/e ^=\Dw4nkjp:R@V-2XκslE4d8)A ! !RN0-!-!K$ady5N&|Ay|BV kh 6v 埵}Mf?9^ϻIWxgtڼq;|| 4BԹp 9x:>`?ic L.3@d 09;3 x {9<xۋ2bbXqۧjfM&`rm_ߕ"zߺtΊDָUe|;,95إi/?90/|--?Dx8 _<FNo<.s9\3BڛB*J)\׭̒^}7v#X٣?(?NlFVgo`9I92BE{(F!WuLNDDm#1@7Kph{~$^W_1WEoSY7Ȋbt\njWO8Ncä́$R=sF7ŒFw.{pbMxJ)3BBMJfsj~7 kYl'`Yo3Ǒ &?3=\o|h'XFЎ6f {Tl0zy&wfDk2Xʞeh ?W n.;EJ_|J˂zz(KFh53Mȅ'69gM^jJiA"{dTd?9_RSJ;&<5#^xy3ǔxd.w`;#zF8V,,Q>݁) ,q"<ÿ}Tp݀P* Bp`{y {3>@ 1$Pc|ObPOA᳒zolzXolz}>٨{,sC'[.ѰE X Ăg'f 9Y1_",̃F4cK40`6 LLQz'8sBk\$KO_F3 Qf&x@#PXVyA(%QY]EA,X w'{'c+ŷ^|/,V{ak+'(!:{K2k }za$EU0^`A "Wă^X)lAw`y0^(.A`uw`dz.ڂ^Ճ:΂X$;cۺ3F$<qExYXxFYJx˳PvxMp%rB4^PUar<:C@3:2n/%gٚ~2)3F(c!ԃB&HDH[HB&Ra,4ttgz?7T9DUP8fDUe4똺3OX@;S}&0)erf44ΛfiM|޿E~3yLg̓h(Z~Fv&x " ڨ3HZ'Bz%.#MkX4UPۖ1  Z(4L!"}痍HAfYuOHKf^G׮cm[&9)쵋# *i2NX@ @0sT+HJq x ̸TQQi]lܖ10L0K X 4KviPcF-XΏGL-o !?]DVU&A%h#@b&WBH!(AIX;%$RƈDh(`ܖEh-mR$(K(MvP[MX}IC9*BY[3阸Bi9rc=!or@i5a`q(Aڅ~y҈cpy[V  3F@T~>by$MևhhNZ"2h Frs {8v4rR]gԾ<=5H,15+ಱg}GFH[,f ˸Qq2h裍t-) QxhcTn.YړuaCvb /rLBlXv2Ze;gzhҞ /eO5AQ{  1߇Hʉ6f?k6y P9 ,,<(< %<Ӻ?3# dH#uH3mD2R Q+IϤHJ'|@@erg:QI͚;x8e܆g^ eD`bH2cb`< gP=.6R~IH~F9J~K;ʚgƒhI:Ihb:%YSʔ{Pw鲕6P3K6A#m"2s{4B=MF8e܆gje)ߖc]74%ݾ-/GE-#PqK0LKX۠H?:g,#;wO (Y[VAjUnyYFӇHa&d,B XB-PKc;k4 *f54s7p҃%hdQ'3nH0 0Kش~tb‡Ȍ=L K]4-–M"@3j!Eh=4z'Z '3[C)@]3<mԛ)k"F'II֋QPшXOQ[ HaT P)HcDc YIXFYkAj3K=~vX_%\DGVaEYCY*Bg8hLᵜ\KC IӖ M"W=x8f=i/ $6%'POF;a7F+h7Mz=Hdz3Y<@"FpތdR&y`=VcZF hd (iDav@V]hEg$y "Աó!#hDXbJb4LQZ4 ]xHq1U,4ӔT{1Cth"BBZШq(Wд}1upWqy!{EH{?"qаTQEұiT@/N$WvȌ -C3?cRQE}!g#Ef܆eh=ҏ~f jL%ehq^@6K?!Tr 4yxAcM/EF.XƠ4*N =O N씠!" o6P$h<"}3BcDK;O| ޣ)Cï}4@F/bpFpRJ:6}XDR4Ѡ<= m-KSl& S"XՏto9EL&%6~ш^V$$=܌>-G,W ͕r+@"Z٠α4-4|_%iK&(fD08ENc2K#nT1ohcd[&㟪#f dȼ)To닽r_n~[-7#|WȧG#Dz4@5a9 XmJ/سR"d2µlA،)*,G3OAh c$@1،rdދr4 |4N#'#Rb3pcclo B1G،۰MG'PO9#zLISF="ض(fF( y8KFRFF-Rd-v`-d^sevŎMKŎ/J¦f&MWj^mc|_džE^xWVIדmEm6@/XG|T-n.l 94ŎECT_X b"%-v,~Ѭ#- jIH.,l/lzͷ‹nMJ}oƢ·ر o oc) |ᝳp'8,a|m9_ڱ/6_Xy5ŎQ·ƸEׅoŹ~·رޛƷرfVoM -[|cU ;Ĭ4;X|bxGW!\|aʸl *Ʒ1n޹|+Wr[|aY;^(&|jxY$ X.6 V {l`Pf9Ke 3r,êU/e#d9P~k-ɬ #8`[,gFQ0Sr,,3X.#$)o !k^@ e- f峑<"<5#^ax?+|Ő f*eca?jx!$e>$fn4gNAOzPf 6B3Tä9̥=(ETI$f8O3fagM|1Eb!hҜIa0=@,42I<`3fa|<Q~]d"љ')LtzȌ'NJLc6 Hd|&J?7Vlɦ$Na(msҮTfg1 {8Iy'wt*<$=1e,V( GQ|?(bPM>3o13nkj\lĈA|fj#ϔ="~ *,oxp;Zx6?왛r/ aM YY& ]{6٧;ق,l^'!J¿od5ؒLƒp;SPк"3ա{bc̸kx Ę5PLICI*B]ܸDleb3Vw6TyQ$ ߙV0̴|gAwɝհZZKW;^ZSZw:IZ"V?rc/p8Վ}@$_UZZ+W;Vkj"+[*ĕ1oɺV~ZJ=\+\/؋W+W;1t\}a<7Vv:{Y> R>?)X*W_XHbyܥ yjjW+W;IZ7Wjj>E(ԭ0>DTV;I%Rx%cyuownA<۪]U\V_spjJy[mXy.Վ}~TR+WV*[jx^ǫrc9S+W_kFv= ;處V4$_u+@Wh >fC 4$A2wCUa CjE1xb{EqrrC9W[{ɚ:̬K>`_ 2k2/TZ#YA>6G d52G /L/NV_IxAƬƬ@fhΪ`X }cW VL V޻7jdn AS8xבy݉U(v†9Ēÿ|5ߜ5+9sd1ޯsL9Tϼ]9W1:d[t_scoآa㜞-`llgQF 37rF.:< E$ۣ͂Qs- D Z0ARߕbR;SQu_ʞLLuR`S,7@=/ F$$b8*%ںE_L ?0E.^ަg=Xi/>*VF H e! 2esmdԧmHV!mU&"q 2 kS8*%~וY&D% 'M 3i*HBhT( y8kF\N s{Ώ&MU঱tM ӄBM$Us2Tއ&6]ׅ$ǠZT^4YA)iGjDP$p",Dg,YWžB&iM3xD`Q=s0SA38&|卵=$jʖ-y}1ATw/98H?Dp7sY]A @ a %aOqmBI{4LQ1yFjl4Č@ a g! g)֏&!DgB}T Z"ME"`pC)I3BDg3/o$ *@s;an[# [u<(qUdPкKnDZ xwLU1/c/s,.5@ S S;RuCF2$<𖗇 4g@CۙXZg̣{MdD(TO[uF1Z'Eڗs [8DAR\3J^T&" EH e!eزH&搒 pi*cՃ_ MS΅AF>7W* T8oIv~a'."ob=8S9 r,نX*㕂U$pT ZM@~PAW;PlBeևTold v@LO1lp~˔ ;uH SBR֡νKO<6;܂ucݡUTj*#{mBIA9*@b.B%"z UqSHr &HD lvE)3C,O=Lc\ü*?߅|lEN3h1.rIbMj / &PPк,ZI%!I=IN1cSaFMr Cz >69099EEɋ/'?A&HT,)< @r '- -ǴrPmD6-z[MN:=Xl{A` Q)=#~4&߲ ܈%vGz'5)kM<$%\+<)k~ޢ'9qKh':)N3mS$ZȃyE*Sh^ʚZ'nqn"r )|[uMOaa{t ۦHD@,0==&=EGc_E@&C$`YA!>=0oMP!D ` 6JLR *r9M?B$ pRX<SK'w~ H %!%[S( {(oS~UR>bDk3X NLO5{p E=K8'FS( S(KS~x]BDs+vw 6(hǂ {3啑넌)6`s/fQ|Z{.*T#L~)1eo"2!y\o~JB)3BBSd-,hBo9QYf CZveEԡ+9{*rx..2X3G9irR@-hi]h)I3Bp|BN/P. @؜É.=4G9Y.SN,m廭y#«+p5F[-F[|4M<7o'2yߌpdg9,,qfgd"\!avjpf6W, C?謢aG|f g mZ{ 4i9<ʴ:- M \4T J˴80#|˼21 ^(UODC> ,w:h@M̌0eFi6/Rz?8]:^hW&Y{bosQ: d ?>` R"g|&v#Z>LV xh& ^lo.ЍޤFL`Ne&j _k#y $GܯvgP л->Ґ~x2:r(1 Ɠ< h@eg ڼE-'}0K)en|Sˁ|]&׊'GB '` nu7"ZbOftr@&G"@l@o+,zwa"o!9wC3ՃmOY9ӌQMˉ >9 #FV-#v&[tÃ@ >A2J "̌07 Epތ9[D)!X/k@{bdRCȬb AD!RCYY2«mlһ$ 4ڪK{nfe y!k;7ϣȥen*46RcӜ6^ǠOJD `y3̸1o3AGftrV rC󇊐MDa=͉m.3Z'BcDOnly#& ul*!j>m.!l_Rdމa$VUTTdҫ0y̢^}nE9i ` &y #ڜ6 u?'t;su{'1 }.ڸmV dOY]H])re!A;뷐L3_*)l~*H03GB8r) Sfh덾g.$IԗVi61LAn'}Hfy`#<"#N4r42PgN(&De¿9Fs"M{nNSZ]"OpҌ;kMɪ'l@SGN=IF$%|K!mεz0IEh%5E' X@8D"&]YG=*W(T <\݃%͜y{#G9X _Zjf!e}X+(-9w8Z3ډ.s7`;(sAnM46; esNz0KEUkd@;L RK{6_nztE$b "k+zczd M[/JrDJYaeCc%l ;!2]f]̦pތQȉZH}G7{Kf۫wr%aR*@&dǛ ˁ1TQkejUYcU 6lƺD[:^OPǦ) u1@mB@[䤛bu,bݦ4@WLZXldza@ W:Ƒ֬B/AEKt,nQ\YXczjPPh 5(UYc~`B/D!GR^ŲPʽӄ:Yi5,~VaůNU",J{ # +BH֋L=@IUѪcZt :H{lT٦UO, t?L,z=MP! BLP)J.TJ =듵)J1TJj*R UR>`hU9ѯ(lONK8YlT8Aj#Yՙ#^g("D16e^HI>ãzïۯu3ږE<:4.k.u#dBS4}?oM.D4wgdQWP~:K]i |׋E=tA]y؟@pg%RP/Z8WymE]h/2&]c$RtMUSAY=V3ms!u#/] ɨ,,}c|!sEsw\c'NJDȡbLϯ&q3 ;8kEG`'?Æ*^CDT^~z ?{ @*[m Jקc5a+3'-"u`e[jGhMr͢7Nu#Pq3,@I9! m4g_?\,B6xwn[C"A"IWɢ uޚ0@"K&RLB\" e6)P(]-H])99TBĄ.VU1k#ߨsIn @tOUNG.ڶ6|7s<1t;Ⰼ^EG zFKz [x d!EL>C5{WAMdI #,,k"@K KCFH"H)ԕ<3.]}J xd&?̠ΩT4+D2+ y(GE7 _,{QŴ]c9* {ɄZ`I H6DYCY2B_`{S(/59[B}>c$ Gޛ)3@45F eOAIS"SKu(oWEm%!Bwr ; {0KEi`Z"pĴ'yG!j"$`0g R#sj)Oܾy +olz}Wn e- BͷXQ3VuuLBNz/g۲XO)L-)p{R^8E{rNjU ;oI#@"_!=-aۜGPFqA%RyLfQ"vAe=2oDx,]^x-k囶cԶ7t$ZQ`:եq"􇽁獱~H*1mw$g 'V-w:I煑*$J}~hyam7'煕iDϨ_AeVӱ$PЗH n˩`E x}'TvdۻiX< C`!U0. >oPrߐk7B[`m/ڰWmdv=y54<@k6Qk=튟Q˧P"s4O`+7Iڶo&AٞL͠C`|Gt0A^|.R>-&Ph\c{ gy%) B6z=эa  i nЁk/ނj;^ #H;żV/J+y$ r&낕+i5)SYj>MgLł>)[t㰅<;\t\Xii$ JF :U(rJ~̽a MƬ˃*Xy2= " o|dM yfްO G4+#mHIL>+~RMWo rӡV UmRjwGzQ=YwF ;'H/P[`o֚y b*M5^0vOtMR~L̗#ʒ%W*!Goqm[2(XEsx1fE"RTs, ϓ/r{pѠϏ*e}@cnvEKQEZXe_rpѱ\"Gh._.bc)E,RbR![/2r'ˌ0?}!^}L>g0)+~Y؃Y2«۸L͓9bB n*Bl4?oOWi#=tG[?Kr}Z;el:dgɂ,Nx$xzE JAN>^gFXuAU /t¦`y#v݂( ,P&Ee!e,;$&Yb rS 1؟)ad1o_Dl yx(ӬFX|0PO̺za2k9]? 9͇AW ; 3J;UU"+0P,X ZEJOHu', {|18HPYwώj(AKe.[ bRU*;`Ew<$[^XKu^ڃb(MJ5w(p.]HDz `^zۡRPqhD{/Hvo!/)n[ TyUvAC*BynV,~0AKY)+zv`4A-t/B Q+K]5߬\@iXrk ^TCf+eݻP3"B,h0,QP"V50HhD@eBڅBLRZ',<;zv+&Ieeճta_Sp.]0EPa`~}#,=$+ Yvl `ӵ $^g-eq2 .8k/^Tَ`M6!/z)ypiz&P`m%ދƪWPANJ;&䦋Eųi!Bv#"M6TYY2BG߄?W3x9@v7C5KHT/A6Q\$\ߠYz٩=+ >ݜnqrfPsp9 EPi&!Mrn4[r\ @{PPlx!/8j U/d,YQžh鎈l6#R7>3W(hA-CJwL("1ֆ'-_ɪ/[m{?xV%-(;0?hTsqe6zI:q,,_` /.|o({v cIlp7rBN>l" y(KE蹅P:oMsTF ?Iոw9\z3g F.<&rP# ;5>g^| Rlvy*ځ9*@E-4Ti}y]?EԫӎrQ*}f*L4o^ǣ{ԥ*2D2BR!Cz=@OAX_UlVx8݃>o]HJ&Cg훽ΩyhjFl{ ʧ"|o0 uFRz?!ӴeOpݾ9)xFH{/,܏{#\ ?=-֏>/;<\hzNG wulįAOe8n\ܧ}P =zxi `eJj]}oJu3m!C>pfRwײ&S7SX*߮}@-ߊ2@N$ã%ih_>@<`{OMIYKPω`v,y@{Vk^|h+ɾq0XifέB`s%΂=0G=0By'vJXI"@EϺ^f4Q>L:2YoN;SDlfshBd#ZY^|q8wMm18S{aNl RpEi#G^EȪPoT#4oȅ ܆vft''~f7{f /~`!=l@wpл9ŝ' KcPd f$`sB1^/(cWf%qdeKyKF pƧKJd!-0E~LV<Pxtۛ TUIJڀ͏Rz?_tZ0%25Ǹ'fH#A;m"PSA72bplo."evNx}#pJ 6 Ǥ5(h8çY [;'ݒHN%ÜJˌ:&MyumPړu vtDW/< #opTJ}^M%6oqfh G.@יfX^$9lޛf%;CdiB-t/?5:`!vzPh .< Gɐ;۠,-S$ٻI=D8U{@1H"YuޛFͷlfϣsĝWN܉ehb=quۧ"FA]5/Jߝ"`7̆b^ lTxL>фyܑ`d PҌ;P!O&#Zّq< 󱦎>O7n32˭TȻtJ YdW?Gt1~z7tzQlz@ad,|< m|o!!VgVl .1FU2 mfK`p֌{az0%Jch3?vjT dܯ-Jl&8(G7JA  j>w'IX8BȊC HZ,w9Ĕh,Vx,47(QM:K 'kh%UAi [R` "؎6x ,*ڀ[-TޏTɿN rfYN߱\>]G de)lo첬$Lq5M뤉LF֜].?g<:'L gqW(26j S>hnDH 9\aiEzxҐҎ6⸽he{V],ՏݜFJ߬A3|Ń,dԪ3=2Dž4f92H4αyppy3B b|{+L&\$S`Rr+F##, L^^śbcIUΚG%̽5w "ŠFffpQ՚(u urm{\Y;p٫FvL` u⃞n/8xq4?TW0O=IFŹ`ñɧVsߘ,oe72Es W 3G>qK2Iߔ׀/q5ڇƇ?z T"fP{AM yBo"5d_XK'(vVsT;6'9j"@VP}cMTP}a"o5<*4}Kt7?;:=AJ]T;6s_C觾i @' 7"u,"$"|W[cd|_X=QOSԉP[8n_KR82!wmqD#Pz8/w+ ;(k#^w\/#PTܱؖ܌(dF0 9(G`PY`!T1iV+DLz7LJ@I(t̨qy89FK1)2#D1cP)2s_*x씘18Z1~Y`F ?sF0'uAS MrT\0y8cd `;WV{$:񬋫1>! T҉!$2BdTw{'xcWjĪv_ZVy%W<w4"ȶL"S{QʁS%`kSan9Y?FY e:Taf"E| H} [pN򰣼 MM Rb扉sK6?)dԆ$f#6zz!!T+h0c!!8^%f!GKQ p 3@éyG>H `aA1Pq|dr`r:%4k`~Jˌ H1eE=cIF-bDH/h4e=$N ?̥J7ƣ[ yrЃh[ &)#hJ8Pތs6 |do`pLɇG781w OD0 2"==mjM#3h䗄e,ykX4%.-p9,o`'7[wq xnk_QO߼]/,q-d۵ 17-73 {(m@Ͼmi_Ǿcu|3#\mz20?oAj#?<"~DׇP@<A O1G6p(~l2lDM"xT8%6΂7"(@ѐ/ KfXh#WWXTYz-W^0Po6x>?E6g_؇X & ~@STB~c$/5c5,N펕ʼn2>؂{yzLAi$jbQ@rWBRDD-vnHƺ#[?Bz zIU&34Es%^~oE*Xd.ZdnVx>P *hx \9 }~@ f0^/qAdL> ^KaC&jXAJ@JgaK8SkB5i%T{"- `0.ȆCP V9oȧPA0+2k,b QCBm^TF`*^0ۓkX'c`Yn;y|}w|d ^\vPr:|CG u ޠhа<#e{%g^Y0mϙȧPr}duŹ4̽a|c x)7ր0h4ձ% \{^;q7RqANGAH39˗KXwb{ glNL*RV 4C%BL. <" L,yq#R0 wjK 2O x`%{),LbIC2e4揠qD cEDD9?_OZT,5xaq +;o6^H& wk%BDM?4-M+vmech leŮYZشX|trז5¸;Ji]k|`,HVD(#"5.OZҴ/Ag UP#l ,HVؚX jKX{S ŭY^fs]OIakCiRy2Ca\WزdpZ'RS֩A3բkHhBql' 7EP4phA$+z{c M㱆^ñ* Zc PĞdbӸ[k8+Xx'qQkq Tq2xS AZ 0PJ&&Nwg&염ioʐ5O yLRec5Cgm QiڈEԚxyȜ3؂:ӮgP 5z xȸRL}f;8B3 s& TV-࿇R*c5iHo>/35sZg?4){Xh v$Jߐ{TϷ.wqmuFsOPpk~p@Nvj$k@V^p9MA/iC_B\+Fv4]ơr{ќN$LA*ĉe P y3}Z ;B\K>3bWZeH u`D@;hd19]}Zrb(aAM 18 q@4 qcfr"̙4wT"\N'Ai"'q#ݼSrq4[FɡIRKR'i!Gِ@*sGxA : b~9d,!:oJ{R@dE``Ifc"6k4@bAς=CON !NLXw*~b4֐ԣ|"!sKT\_*w-#i aa =BD9)O"rbs+6tpNpNQ< 5 r>|elSKx! xI %~ħbӜ\+&hu4,H2 _ʀf~jҜ-oͅT |j92` 9v vbQah4Me/î /-!) p@ 9k9#X*ϛт"^cO شɜ>N~) na  t*~QQˁ d!.i}>/R HޙxpY/*e{)U):g*Z;EZ+:%w' yd{(/7pd.ck }L W\lœ쑇#H_X1'7r>{nrJ#& V| )ipى$_GYDu)5$-Z(|{G&:Q>{>d,⎙5 g21 ҵ8;:?~Y+Q&t>k\r͇Oe@+0/0t~_ . =8ZL gYl\S.baޓPd@H{pHufQ +l3WAkcDVn qksix1-Hb@- ˲ X  wipn,>z>qz"5v<4@yA2ia%>S.[NPA^@v@q]@=4tqO@ vnQ\;Ėj4?1ǖN`c q\ht4@ً+tƦ`0(iAmnjtXs;;4>`\Fmg~1ohɍ@N, vBxMR jpc\־: y/weփ@C} ,3sz!0]B^RZM;@5,#q?Kveuvs@(w'qKYhލ 14/ MRʀshvߜZF#'9/opK]vTi}22sf[o<;'2κmqeB}8E 1B7v:p9G p8澷?"/=#ǎ8n},J?, W\MqAh-~{lC#̏D"o컷cL1=O P5sVKXD{*e,03kkX{{qR`|diorۣwh!䮸> ;-aD.=iI((6's|̓}8(zƼzړ 8ҹ(~(e|wתt}XM^Pxvgp _ǭ+8,pٞGxA 9 V:cKR:[;yHl3z"PDW2 +-̘p"\D\@K'Zt&vb^׎|8D2߅s1,HּAZsm/ECsѯ/UОʅZp;1Fzw|%vv Ϙ3!%,<~#Gx! MrR,{8zdNy_/a &Ɓմ ʰ&rNF4S.c+Z 1vT3޷q^N[ˁΗO4.sjs$F.+}XGc2:46x^b9!?&,\]SsDZL 4g>ͩAԋ 3֏5AteϞp{Kj=D#\3 ^OpJ 9{b=f>P^Yub 3V0n%/_Ԟ p15K z>Ab>mW17'4J(  [°QˌhI^BGGz 7`< v9O)O BKXEF.I05$)6s%x[XʈAƖ|ްbO6$ydie/î LZXmg*e47,zSCw:z$ ;1IԄ2\:_j=4>YiVo+3ծDEͣeAG2^B(2\b^PC^uu\DO;{ʲ}!i˘oGX]] ).ܻT44,JT6&;3Q_+jLL j lz]@oL ]9p+˝aUJr Wi@.|P)jYi@rj%lXι:3>\*LwN)/;x@ L\ʗ"l4?kD .xH,5<*A$/]Y72 0 ;~T~^'}<&;9X^v+!,H>qx 4O/d&⣯\x;k4ⴊeN˰G;%emV7 p ԐӰP+wk}G@G<}Zgq?% D҂3BfC{Vx jKZ(;9="uruPyf0B'i3cbev^/nJHB֕tK]& 4 4r ۽ d[j-/Qns] c<93XgklEpm(|,PZ }Z q2BL3"Nmees+;|F$5^R?SO!擕qb6QZaXgX|M" r,<1{CԠF}`ԣg8H 8\Ђ0@ -҇-=S.yiKZN*Kz ӗur:qzv~xT.|4A ֞a~\%l;prj%rs `bZ[d(KvψdՔGB_4fowࢽbp@ pȡ* '"w-eg6@ =BDDcw*9! H ,KJ+;58NRuهUxyȇ٘q=ɸjc'Sf`"wӑ/CW.aecDŽ;gƼϑsp}& t&Jwdu0|`la!d+Ά̡cft 1gր֩j@lUYkתӾK28 HxjH7)l*5 P4X #2-kkȋ) z \EA!s4d( !7#aa;peI^«:n½z]iq]oa_Ȳ+l8G @ p9^n8GPEJ)tnktZ&πrM3 5\ޓ\Rv4Fa$tg՟F5,WBLכ)o fQ嗳 ̽ 2{ƴaAa2 9Ha=a"b-Z\QBvtZ?A.[Fe/+D WKe!aCZ!Ni{=dZ `gpЀAD38:(E<# Z0ك,6Y= w885@@ |,eʆԐP둂3G2nIu O R(B};H@q}BNH52N18!|X‚䍧 sW5 ;2q' zI xnoEQ2@U/?V/Ξ%j+,H>t xnv"\ƼlYNZ:"'vh8? 6wYzi<.|t ĠbG1 yk ,vy n>S]pY򻇆oYٿgXXf*e+^PN@D}1Bo&GŅw%dA^~\uB(\tnS~NVl\=W#6DtX_^N D)'WjiXЄR ] ֍wN"lU%i4aAƬ|m7 ;212'!'aBߖ/ !Xc\[XIGu fqsT jGZcf 6X$m0PShDK¥Ƀ]ijnlica z  Dߞ6DaEv1'غkuR[K/Y[,nbf9D|oliM;ߘ@+faˇB%Wlz <,6!T}GX Pe} ,>R )k9Iz#{!0l\}=I#OJXŸ鵢p ҀP+[I5Hn2V8$HLU U`Ypz(\5%,zxVND?Ϡ[}[% ?1+.A%ԡK>8^׿z4 3o+N<#'o`CmPp͑Il5=Z," !HH $bAE/A/aV@B˞s b~ Յe=/zgJ0] Ԑf]'lH\B: 9&SAc PY'2hr2l ԠPk<6b+!~:Öez;40oɠHgZVL%/!/a֞وAMnT˔V!/liU槫fm-ԝeO'B0r~*/!aCw?B|~?23̶&OOٖZ_sԶrd  H5`*A3T@ V~473;t3D=}+QL( ğ:YS«<$mmnQh}MXc_5 ~?~<v}7}o퇟Xu٧ag,B 6~k1lKH{sJWi IZ+~ IZ/_e3j?;{i{>My|g8>W|ۏ<i'ܯZ¹Yt4morO'1I ui{g- E.- Y^Vv-ݺWʞ7ӱ=m7k?&tc+cO/=6 Z߭>~?l;thz*ƺ?z󙧍\<Ygc?}/~0=0ܟ%:щngn \gǏgjs-Jk[[ JZWϖV)gؾQ&_|5*݇/M?n_J+".(+aO:~=某gURϟmw޿frjskB=~};oʒsVvM}+@'uXz{\ ;cw3;emTmUk]#o|TҚh8\bKOm Ƶ*fp4c0YXh/w[Y+Jl})ivX5hɘ3ck(A됰|Tg˲Bz Wk%WVj;`К=Ji5WJu!<ǒ5'̴}lz2, .KMS}( ֌Ҹޯٛ|'BßҰ@˰+\:kN^H~BǷϑnlG2q*y+t.{p1 xHÉCX8y2N. iKXpsir)X,P2 "M! W'/vu[3Pqʨ'(ʟ pdxF'2^0FԐ_0F=(O"wS.ԠPku;Ûg~Dp'XL8 m2QP$c l)8WR0Pk~lUg'R76[{^ȂSpVfS.C?EhZϓl<_l~ ,9q-`$oT0'^3"u%B.R`v]& Հ4sXh&Z^P^BU>  X/{_23i #Y| !^,0&h XԐP'r8}90ӧ1m:m5 T 8INXMT˸5%-zhڱƝ>pcHm}ϻkE=I2 H2ЍA% L??\]*\XNX1<];ٲ hAIn/OE hiOeѼZ2 #&6c"1fWѰ OĎ>-Ep9M!/a}H/ARh|. OiNd FdZy@K c,wxA zI ez|=%*<_˂h7"l7X8*|4%ۭԣNEbLȁXO kC40נ)yY8*,vԠP롺Oq, 1>YQˁ.nNLyX|""rhp02АPQXr`<[F{nKs vԑ\;2` 5"-JbƣZRج͞U,fiBf\$H!gn|g9˫=:- `5[.l5bhT(l_zj>>jMyGTVvB-.oVXcyFҁoA4lm"upus{hKX6GqgYG#jy|n|M~ܶ`.Q@τU pkN)_UkQDysqwZP8Hϼ)RА W7eeʌ!aVղckiyJ`)A:ҭ rj*M;h*x@ 8H=~iGFne]\ehnj gVdS RFKSTS Ζ@]mE'AV!Z 5^;´v?JN~(Tl6jDN/ҥx7fZ$3^D)^a?px\0hM۩H:ȴs)ʦb?EWĎ"baPS1~B,E1xB \x.\hcl Js0OES1Xw4"iשݫ3KYu*|;;bMycV×*"b'!Tljyc6(hWNgD1v^N#Q;o,݇S d7ЈO#%WY kAqbx>v[1z>;e-^N%̴oh쇏Niy{cl`vkfF?Z0 W0ͧ{;Q0ˣ,GC0.~%,iVڌ ﭥ^`?V=uK6W ޚWr|/lo+.۫[f|*a,Ђ/'Lu+aV\{΄QKG!ax-`-\Jîb1Z]/P `4L%,u Hq]:`>Ԕ(C?p{ =s="}ZхF&~(B?}H aOS"}:1õZOܓ=$A\ E!aV§62M_!~G4hH6t(hBM^\ ]Օq6o 7nD2d)z8afaL y q|\"lvhauo>[ʌL/, |~;y5 Zf>LJ"o"no͘xd=8.ځ6bԐglpk_, Yтy0ajD{  ~M@[ V?YKmI;L YцB,x! 1ц"4%,zn.B,# @mȻ=Уni r0!H"4KY»m+ XOBD4g,(*|@vc4! HpArj%4! aZ8Y#+pq8_q88_tj%Jb dBCBq֓ ʀF 8 !a#qG 9Oq=iJ0 HDN68",6Ԡ4PkQ{'A!/G!i`d A -0e00p$yi憰6$mqo*/1\T :\gBPɂSW`qQ Nqy:BiV`B!ۊ+!lqޞj J$o "2f('@i֢#P}B(BnE!$+P#CѧOE~ ;LszLZFD v*whbG>`ړ? U" 4vlRo&E* 5yH'Ǿ2C Ik(QlBbЀF6 '!a֢tn(N#Z2 (Z3D!Rf֊,IM(Z]ĪO-ڊ.H@f9&cEN + HtE6>L.`.R,JL;Dnx4_qۿiݠƆw$UX|'ԐPoa*Hȁq0ڲG) Hv? y$7fA.2\^P^Bưw[EI1Ltz'q$̃"cG thenA'?u90ݶ7 *XMnOCx7bc*9.?߻`.[ptj%YDrc|%c\Fk@ۅ6X| "Ga.?p95MFM~n- 40ɍ;D.6,\l4q# Z2"z秚s=mA34<,$DôftBI4zjS(\N~͉_5Nm{" iLp InڀdfE ~x|%V71‚A><]Ei4â^0 qc7eيy! :PArj5'*?:5y2 e kځݜęQ˘ I>@^4;V!FFmf&YwnM޾y Q^4G:"eֺ7[6 z)6!HMUnS5XS!.7fnR>S\us$e`7C he`xwMn-wdW!}3{z \@Fbݥ#V ZZL[ k&M !mFgyF^ANb˒Ǖ+|r1ؔHDTW.Ǘs(Cu()Z||vݍ]60! Li`{R({islX+W* $ݿw-06hpbsr;0vy 5nhArf$ {"Lq>wW(>y I}%xh2FؠĻ9ұ gq2\VgR0Pk/g? 9w O'ڎAP# -HnSCS1S.ۗ3jKZ/Y BLb7vKF B@f#»κDxM6 z5{;r4c(?*>NÖ-vJ菏=͈%7&;buUٝcV: _\_oɪ4!P?ZuRyFz6?2T,s8lݒj4#6?,# `CWIF^Y#o̴|N9FB-)gKyA*fuٗsTli9F*fZr1k#3{J 3e䍙W|rNYF>_"~A:;O<O[뭡14~elN;3g[yYNO'a_C n =hb5  i@O 'HYPԐPuP nYNd1i:Gmݘ9}OhMqDZR0P;or|:M?pچ; -N27 hY i3BRj=P óVtLN>jK ; 4 Y'r@iCAj-i06!8O{N !<M <"25Zh{N/ưyP3S橝Ɓ0@>[ OHGAV~49NX#p pH%5]*1<#CqCl 8@H8DM/A/i@r{EΒOZ1rdA2&ic=euxA y ۏj!8!c촩N$5fq^H^BGB88K P@sZeǥʃq!f1O Y+AB ZkA"4%,zxagԷzA ~'rGF0p=;#߁1k]L$k84%,zXJ3ПĘxaիלwMZBЂM{ ˮ6$[6Ozpg@^PC~BߧWf?x vP< "H#  l_'@>@#|tZx͖;eVW(Y3jSz !l3Rl4 I>ˮ hKA j-=GF+fj}~{=dA2?-uYF?Z۾F___uW'@f=5qu.+4(em 44 ?ٶj-F9HXytr c-~PQ?rɏ{/ ] jk(@_H>e'3+h:}ӿD&J}/$UN4(P ]PU0ntD@z| VX! =5A:o, e*-Odٌm;SUl9d _Z{e:e2P2Q1p{"| PgJ=- "7(*P8G}"zcxy7᯼G#Ǫ3}o$6Z|"I_G.wyKxB&z5@ur>q</Z,'"$}> +ҀP" !"Z (D#'PV ,!!jC1G*/LE%e}ځ)B>C!8$)*K7b]E'!LSO 9TDvJR@) PeʂMWqNQ iKZd% Av"_?ÑAie$<ұ0KdMm7 "5?ř90~H r="('f10ע(8ySXpr(O5%-zTrƈ,N xKwUZ KƸ$I؟xܸN'-Q@ zvRf%ECY,'") Sx! xI o:B.!0= #9%\BY`N,"4$J-y?i y J؝OX _͐j3!f4@'Apr Zf6ahjB޴۳-v'δldbiF DO'E^^+QiBٛHIv'i>Ez2&Z 'zA MR:J`"⭬*dwb&Xjp "Ma面 ? )G(@p79ep;y )@)$ '! "ȟ϶k]PCH'^Ϡzb3B9AIFRW =&SAy6E%XɼW`H2i@bc+"N S8A H  jC "~|dMN3>MtRؾ'}$}+TK a"}B&?=@J'veK,'"m:>LEUPAu$'m:H)R'n1=C0⍂OB buB} /:7J= 7h>BMe&") 0B MaY}}}(6N fCGA'! R'5 ZT`}&Ll5KVͤ4@+ܸL1 [ e $SGYg 'ui`~4D# Ih 2?Ԑ*OBN#SR?]ZEO-9| xhIL *jP7ԩv[#.zPj- ftJS;EAD'H$ATjQAIIj'isBv$tĩXF? jK?zh q7W)M$$i(Q!)!) Tx! 9G8Q`wF?].nd@蟈H">HT227]N.!mms\ anzck%]Tq#DNyQ&GόHJ Ҁ{Nd&$GʘNH$*cATMdr!Ir=툢 $ '!WE`vt$)nCPk)6#s鰭#_j2[Fb|_oWKnڙ36B'@-I 4PՀ;WNp84Sy[ݏR㺡(z ,8c|c:wA$=ikXc9L}øvgz]#50҂;qY>UE cˆe~kAv 綍x-_iK!{ .y;X;a"Y.Qq!': V[e6.|=&}V]83zaX:H yRq'ޅs˧S@h_w*ys]NK%2kOȩ^}1t#ҧg愁~xbNd5# Z&Loq0dpmZ)h2VƘ4!N dX4~$p_-ioX@g?DBN=k<_ŵIn$0@Ĺ,HI&r_ai譧2\ƾݲZ7YyUkG!oǴHБ @ohLg.PCNB*v|\O }I3o;ߡdn[;  Xܱ%I;2xsr0ҷGYSrq7nzWّFiytn?%ّyzr61v MXȩ1Xs6e5=gcy*, T4$-ZdW%vBuZ"3V,ӂSN+U3i2jf:)nJŊ+f}tZZN YZ3iŬD[K*-FIXr$o 3'a5(1 );:HưSj$8F⁂dbuāJmRL񍙖֧do,הKAǢJNXz# A^I7n ܙkJ8P#'X, ]! 䲌ХԐPAr07"Ո$ *܊rp An)`) LE!a֢ #D0Iw%"A):g K*k( m<}=!n AP>ѓƊ ;L $դCmD/!ȥ4Ɇ f^RHOEV;Q2%_X $:uȠ>{pV͞8zFOlK .RfsZ ܷܸ0, tj^ !-ȉB`M!5D Ś"'"'Ś"b`hKX(i*"?.g"107xghrpߒܸ \SAD0PHϾ&ֳ}z+;wM bbUX5 >EIJTBV;%qp$aG?&-|$a%2iZnLR2BO!l2fugc's;HU5( Xb㲄ΥԐ0PkQysKHq&\8S,4 9Dl32E1f1QZTDB[gQ+.7D Q3 Hsۈ ĸ"u.ɤ@ɽ[jOZ!Fطl& 6wi$NFE\^+&2i!;blw$7RO+*h& 7]d2M,]OVT#z! wJ%{ OXkBj'=JFev}~,HV &ↄQ$tJ^B{XQi#7&;oV/W)SЈK B!U8r=&W% I*X@)T"4%úJ=0N(#H QIBf*Ϥohd K2*Z܈C%L$3Si43Q4dj~6V*ZUk+#û'QSi3Wv֗//Qg=TT5!-*p2r #T12/fL$@JNf '!a֢y>M)Ҋ73Sic5[Kf{ۼ5X@W{jCZ(U@q ֭==X XBpi)PBW[*A\_*NlsM0P:f=}cKk%9_:f/(T'SpdbV[H9V'JNŖ3QrSUxf]v^%`b*d&>"[َ)py:hЀ) 8=+Ԑ߰P#Y"}~t8>})pݙꑯD^`3D]\Z p;.&VRę4wbar 2-0 @/657,z`;p"vgh}og4P&ȼ}f3,Y;8jr۠Bp"Tgiq (GcZ` :=Z[{r ~1D٭>ߐ F<vPI>]b^XVʕ䶆,@7+@}׳`1$*\i,"5" *x<Èl?:0yBZ#n|dn@Ǵ!pB j-a-"B|c10f`z.>O%kwi,!b4"-J.> ?:Wp1蠥\$+h@i1,#4%,z|aÜfmx_i5Ҭ٣M$/li=rVr~۵crPUUAvܶ'盧 dMh,`ZyA $kF!>mi ƜkBֶ4V F S@|F* i4%,znfg }9޷;i@Ys@|# #ْZ:-%yv`m?fP2;԰6ᵘʴf*Yp kԢ#:^O -itu=);+yܩIg[ۏ >PA^@l w\n六1pԮw;͓w]?b46O" ⽇,w joXט>s}P?^gfFHV# oa }4G7l$^@θڿb־raSxes@3{RxOQD~zF5 ZY3҇Jcݹ,HCژ xJ5%,zXyY(!ag1Jm1j_B Pw`4'.j-f ^=CK1"C{Bsȅ>d=3' x&O>J%VxFǶ dÓ~ {!~[U׏ǏgLڎ~Ͽ}ooc\ۏv ۩vbk؅{㲸Z;kgZDJ]YH/"Yk>iYZN|G\Uy|keqy[O?wx;/m}I鷿7=mڮ[^HT-~:WH E:,QORV@Ul)Z"i%iiݣֳ߭v<ߨ瞭 w7;۷M?;==s+F铺.Ɵ~cm8~?$n{FR]m]~mhgE5Ƨ*zi0˟_wLOL<+ӝ[!ۥ&7u1~|h<ǽ_7]+FO㹒6}n?X[w[=TZOJ+RVzf٭,Rp?<`c6*yVn9_ysib-?WH?(dPꞪa'/=:܇nٺ/ ZV~aKˣfOVŖֱ=a'\%V^Y~P#i)wLbK.,d ϲ~e}X>V*PXfSתrf[3lA- mGa`ւz !ƃ/(ݫk4ly,-ۂ}ˠ[ýzOM*f}<@2U +v>w%+Ye4q0U0ע3[K^=]2jgdTZ+Xn׬ 䭻^|ׯdbuVk+[ǚ+yHyd3't jPm* _*^y:r~,eÝ:Kqxc$[CtcEЇ}'v_|*7~,s^b Q!g+x+|wlC_a`ƨUm%,+@3zЂe[҉U[AkӏJ+aEwW}mKbuSW3٪XzlU,ڣg) 1Idȱ|rycX8xGyŸғرO24T0ZIh0ԓ xjYXKXܜn(Ѱs*iZ1($=%o" 8 ]YfPQz-^ɊsLʑn=geC/xg,'%F ?rvK;-oVYjٚbH$fNQ EIlo9=Z:CZxV Kirg6ǸMJifJd__pLWߥ`MvAd)/f{c \#L)@` sYMǗ? [ ( Ŷvl"@ ȫ1O4g( L pIX*bq{QN t[ r#dSke!̂cށk#1"75P{QXяYHC1HG `pȃv WWwYAFyOd'OA!$׀Ka}4ŷp\r1olG 01S"e lH`{a}U8qN+O AGa'$ ɁP̐zW X#[:ڌJC:JBEܒ7{\ٹQ(~aӾ{/lk.dQZ8 5yj[\q6 KxѧIׯ|n8R2hRlqH7 sUPȹsHKُ4װs#h+O & JdFdQUhh!i) }GFX\n\l -7.7bBLg9%`g=[JCJR@k񻐋afvz8Vp-AVrK б␖^NFVvɔKp3]8E:]2zƃ]rbۃ]k,]1S 3e_љN4FDJQD} 9*C*JBm!5݅j<;G$ms1 Oz FTQP gUT^ ӫ yb>G-ŶC߈$Ky^ͭ.-!-%׃uƺ(lgs 歹6HD S~hp {cSF38$z}E+{ '7%$qSiA#w N6$D`' XyޒWyȌ\@qEɲl4WU"g){A% Q Vyԟ#cMLy%PNo 8sp$!^fVSHOZ=,z X+p!Y1u4M4"$JvpFHGŠ94%J ┷\x֓vo^́8 ~K=fBrJ!h(tChai) ngoאj+lK\68~%%ـ(]ܥ |KF+h֜rsJZr b15 %s0Rr7Ŝc( 򶗐y@&LzkC " n«&8$ '϶^ZzSB붟펚nԽj1dA%F.ϓ6S4Y5TRz-8D4zNȻkW?ytm$4(8n#qfjN3XkE;W/W-|<ѾO6.gn* pS =4J-"ˇQ~x{BN6 MK%{9hϰSh!zٔ1T֒ޔѼqmV!BoQ'Y|qώ-W?asVF/9$tGo Q߸FIr}I <(" !M蟼"@r{a֋l,L,ɟ5^/Å;9 XCI["sL 8"|ۀPBQz-zg1J' 1 /]s>S$Pϯs;BB_) fkQ'!|x:@r |CB+ܟ.6s QFNz/|& ֛z=Z{,zXG? +me1o-AkǍ&ʴ&Z_n5-!)[X]}"wb:l'ͭ^h,Ƿ jf֚z-f Ј$p8"hYPq,vHXqЌ0 w{ ~-q z{8h~38ŕDXxGWPiQa)Woe!kr;6 s#4H`eLGX$=2Hs{!-)[8DׁoyƎXyHְcG 0"~|+ȂL x辖"@e+ V: ̴3k.s9F}|tMн$>2]&gsH9I{'9'CƦZÈ>ڊ@lӴ7ѫ*]'bÍ%-a)ç+J~->y걳1dwsMSV8XћMIx|e;!-%uV\hQc\{EpmcԢ-vrՀ#6(c.v~lr]] \XDsc4(q;VWرscŽrAW X섇b رͥqbx3|F\XpEqcQK\EVسָQUdu,}kŎE+n֘+X1(/_$KPJĎ5Fuc;V-bǨuc|գ.v,p.v|-b8&Wر5bʗ"/v,"Iqi(}3[3dյ¹8Dg*! ;% J"J:w{%0QT܅0q㢵~2jH%HHǬ"Sz\T@ ␊+N( CRiuȪ?%ՎU!(( JȐURARQz%zr 5Bӟ+Gc jW5T"np9Fׅz=."QW3WyUӥExJ*\eDa$@aTB [6s Qy2u^C?Bq6V71ˋLʴMNIR 䰖Q!FU|qXKiST*#WI qHKI`l%f0tT@oU3V8fP#%UB|JJe8| z%V.} f2/GҚѫ^7eUiCST*!WQ1HA U`w,7 Bji#^ Mf8|F$4qD ʈOIS _%-!-%ףke#/]3 Tiq+I]S76ST*!XIqHEI`Eֺ;Sϴ~^Ox;Y#XVBJ{ aE-!-%׃BUq! d1;07VB `Дbd pQTa\"Xͳ0 ;`% 9VT YZ8U?֬nޅ~;M a~ư#\r]-ǰ"TU,栒k{ D1 we"Xoq(!%(Vb91%8H(a9%z`~yLM M2d+%D@AbTQ~ưpXOҬ#D1;P +2t t8юbeDA$AATF␖x3QFWVJ d.CpL̈́($0Pp +ߥm=LBY;10j{" " ʈBQIBU f%-!-%׃sq' d$t(­t7`VFJJ%d4+ j('F4R Q,@#Y˼ XhDz2PTHU*!CYIqHG kV1A,+ZJ،eE{9hoeeD$@TDƲ␎k ,@NT,+3?SD+ŢŪRJJCJJB'2ZmN፞cH6funv%$ aT* P*a9$|ԂMvR-1{bVLQɋA :Z QL*IP*QZp⼲_BJg 8x[^n3!I% Y"2^ fKj%6]y]-TBzKAhŐU*#ZI qHKI|&cQ_J8jQ8fxH0VBJb{{QغP9=1(8ՅD^# o5_W8⺒VJ+t VRARQz%yax+Z.Jdo%9h oeDѩ$ATF␖ Z5!OutxW"\XqlI(@%830^E# UXqZB\q%ktK,q%Xi-!^f.DgMj[ qeD(tV!9$zp 9*n7#|׃82lgYvqLو8D%8(AZ`}5c?ơ~5{^~>_aal.^?Xb8g*^? 8):z̩^?Z&~>֜S_wj>>X}Vl!2 y䇀5])N/!vxyX.G%x|JN7fC^әyOinL@$n.ÎBҒ>ꁺm#z n~p$7#G^&i7!x{|qH?I5`x ?Y#< 'e<Ӂu'd 2A@Ӂ*C*n:npWkeG`^ǾS] ޹'p1x{ȧEyizX \ :֔Q]n5NI\G_0Ua^0]j/#r.␎k H.to{Zj1-Ź 5:2\ % %5rmx;ŗ +~/ )t tpv, ␊+x[e$"ǂ)䆂fY{̠ U~ְE۫|$A>Q@|,xjn1('z#8`>g- R0 @iOGc@أ A J@^C5\;pZ.7[&Ǽ R`@ak!i) }KA"|k2.R\"P@@)Jbk!(cXYߚ)*c#;9;Ʈ q:\sg"CpUpQVۛ5-Q%+XtPOIKp}[xo)8.oZTzU␖qOX6ݒΠ [:Һx}S//:+\!ZJ*!RARQz%]_psEd)p. -扛LBD-aUF.rZf'UָB=7K\}Z w}GF$?-z#5h rK %W!51 vq\[\99&# Z-ѳ)394%@dC%`qzW/m 4%4*cP4o {Ik$2qD8̸DAQz-feJջ?.Ps[n_z*@NtrJeUD A+Y;Iߥ³UΫy;/I^d|/\#v'6t,A$ut^ SfD0ݼ }xmnLo!w|\fD0פEYfTARQz%bݾuZƴj_ /7mG|ܴ7K@wtkh]|ocϴGȿٷ'J_ߟem|_}o5-b`A߶$^q˃s%pmt\kB*׺`.!Cע}Zko_8~y|t|ed_OϿA9>I//y4BƟ; x;_ aҸNx."+2/m:ޱ5Nٷ=Ј]KSKmƂS:؜>uO׷g~5W0Í<|~e~5o:3Gު,%?~ǟgwӟ>ޘ{>l4ߊGÛ0qA[/P}4{(rՇ{h&׶0v8郫c&ynFI$-xõdFŹԂ 7sbӍaXڐ=6t,zÍ{Q~{KD3džU͋Ɔ,FMqA>_1 !%gO <>}bɬԾa83 ,Ƥ, .9@Th<>|`;w oוCi)Câ{?ėrG2/c5_xWܚx ŧc$yC\+c>fYÆX Bkz]Ș0ac0Gp-1gyFW[zN'*O>hke  29Btм||x's!:'MW-E;’;}l5B|` hN xΑO\+ܰ.[6d?cwk5,=⒌:obHAA81cwCѻE Bׁ"3_ ~%:zry˛o.721Xu{ȅLk":g>6oG>m(XYLSGF6+k~|ʼ?ϪyX 6l@=Bt,(+ֱa^QjG3GF,U+_\8,[ʈ>}wB.":TV3:'Qwxwy +m=zXArذ25Bn1pn9cD4FΧ  w.Z968 |E<_SpHD Dq ԊΊ:}[CȃY⊵d+ɃgVnA)K}#NDA"g ,̓9$Zf|$1zud~Aep9f'|,A4. )aA&_BRZ=n{֥sʼnvK=~^1[po Iǽ+ FeQVۃXƄ,5CsI Ԗ ~vo5@ْg>ɓ^y(6y88pg,9tBD{<0L)x␖m$>\v^>m単;Xy$!i FNύ^86h!i) ƁX{& +fq8scD/pߐOȉkK|K-̑zCB>Ti^Ky,a s>q!.$֘ƌ:{YF?ʌ$kI OlBm7;A ߥ9 rp~ BTy'-ag:h!i) <rgG9|z;C1%1!-J8q Tn\iO-!%ãH)ybdG<dfGxa]9.aW'bsO"qQ<>Pw| reႝu oZkpk6ʸ~ Dņ Ñպ, =U }.-##f>"7 lE̱($fԹD*"3~~Ua|1ǩyJ,vs{* a M X aFzU_rjH/@Q9xI@# sIWJ@zUE:b1z\c.O`$cN^%Ef^M,R5=\ d~E#y[8^J ؑ d;be%!%%֢-4t\Ge3EiVӷeB2paImˌp2t]fR#WzhY+brN43KHhj||YT-đzCBǏ꥔gmy"t7:ܿ,3a'y;UOz`p LEj )H 6D{`Q o; \f3:栒PkkAPHlpM+}(KmD1Dž~KHzN3%0`Т9%%zxU~Fn Ad{~r1r.䐖Qc`:59zr*hJ#gC326(Z#ԣ^ Z5W bC[qq3.ujai) 8A!cS kqpӫvF<28$z`ZXؘE ==e/[ {[@2 9hZIC1HG h((:)l.x6͒{AcGYZ>N]VxDteS␾|ole^;ٙFI?ŢL)Q[ e }J@Y-!-)׃k#p:DH{G;zFeؾJx0#?) .?K5=ݔO|$}%Al" p0MNwEBD.6%2(2%/7Tؾ>`C𜻋8XLzyMtNF* )A.yZh]*V /owA} lj3XK0}~)1]Suk!iI ݺ^1óG&l3}^FJ|Ɲ m[E>+*B"'0C|  R@k>d/' A,b_:!V ^뉎'1]AFk޷ 70^9A@㓎/tګCdЪ}4^Q%]" E wP 28%%z3rK:Ž%l7*\CZJB{\^L >L3N}%_$/\I=*aA:*ZDn㹪q#5G%h`1^NUis8mߎ*Ճ35ߊMd1 cT:VPF,[V:%2Y`(fBRZ=>5si:qad sD") .cC8%%zb@6;'b1aŘk۔ ZcBE K{-e-0G ~bZMxW 3Lղ_妵̕Ur(%^iKKBRZ=ag4ovUkdB+XRƼDPǔcw2v߭8$z4KO^ٴD#0Q-%@#>ZCZJBא*luq3Q>,ă’OT4PqFV:94Н\Lt7*@5 Á%,S8$zL9<%KppJ3qHsIΡNv .#h8$zаJ*32= s' p[|>Q@>@pȍ,p\`[Z=`lO18`Dp0EWÛxi1ZzxY@L&+4 aD 䀩]!cV/!ޗミAԉ|}7Z'a<%w/Z @-UjD xybS-Jq"# IYocT?xZjVn^Nx^!piU,@F,|S̕m@ae}J\%(⯐>aX [s Iz$p]y&K:LRrzLࣉ<|-;•XK^V@vH†qelڸ[ qHKIhwhx#/Cyo4[X|a%HP¸@6c![WJ=pp1Cwn#D蜋C: ;A3%^|G`I!]k!i) |Eκ'p_yz>gxpN[[!-%գ-3rEtm9+.eKݔ2 R;Ni) CB<1d;q{ #dC8Kؼ_ SJ+$ODsW*axXx bŖ(?*HQ ZկOHje9!c62L[D6gw"ߌ\΃.=ȿ|?|{e=~_oo vf6ۿͥT}`⾿BbJI~cmUʵ2Jr \ۉ %r}hZt/\Qbg25?~_^/mk{fW_~Z~M[w/oF\i?W=޺up>d/vtIy4. 1OEs]a\@׼HB+WYFl- ϛu7[m O\.?A&+U)!mq3S+v}ަy{|gsjݟ~?EE Tox~?|s͵cW+pr5NsOx_{iA_4Hye,=MSuyM:&|xm BVa-.wMAgio_\]\.h] љS#<&-Jmox}> [.;9p=<\ோ}4H&[n?l<WBܒ7'6' tĢt&P@PD n:}bk]eFwyu~HGO,!!>7}g}b=pN@5 ON@P}v7^@HYձ[Xdm LTal= 7˭W *=RQVÂk1pGEb\qU !2du,JDf2c #'X^ZZ| H$a4,1>~\Vr!sjXmi MJD> Wؓ#yaQC?m5lXoa7\vD%S0~ёs:I="@!{D귁PbȆ\ b=K66`OmXÅ]a9j1~H Hr@zEyۗbBXqN9'"!(眂яA1F@0h[jXȹ}OHBHdsW[wѡce{<;mr Yn4ճ\[]+aHS~ hQ70phhWt+#>#n/QO(ÆJаx| } zR 9!AY .\b7r5,`BoX1aŨWèWpD.U2:0UǫE@,J<2*JCJR@jmuHՆ;Şl[VԍƲbH/=Lp^(w^%RIHzEB\(eDBRZ=nd/H\vsur`dǂXDY:P+~)Eq]_WC܊yơ/<ɱsҺPpЩ90V![+Q>JcޕdAL$.;E.xSC!#K¶ʛw% _s=)@$ݥ2(N)E*V>9S.C/K$dNR ҉CJ.%RLtW\y!֭q"IYIEDz0aEiND)w& ] V~Wtͳ‚DO5OމȳE^sfu$G@C0/Ed3QROO pC X_c9 ?7 pŨx_ k8^؆Yt,q8*NRhCw!J-QZr%oKx\IXBk[jC.5pT%ra)) ?׊e嘜%=ʁD.CC8~D)%H!G)'.5?gx)G72fL s r9Ja{~ [F)_TOOWmƙ+00ЕO:gy njv 8i,%` ,thJZB/D,͂;sāwwoc%6! # X ( ^ۻ#H}xOѴ*jїLuFN!%Re6I qHKIh`!w@u:ro|AWRGͨf$lOrRe˴6b! Y\d|N/GY@BM@FvnceO1#8+ )AYa*cE뢅8$zpe`0sAnFhq'HEpL(Y?Z@.xSQȀνn r$,@b]"yﮔ$?PAxUh,7r`3U~pE?edaI `nhSY馿xm/AfIG9HѷLuFy6W$ܡS:k!i) ݚXNnf/s9`4 XV{5Ym9]V;vo9MY.xS8V-%a}"an*cZvސ9l$&y- v=hn&yާ [՛ Hʒ@S>rc9 v\76noء9/.sm Yy(Hvv!e1޷?< a5NRB4Yk[ qHKIhha vF%Ҋf%NRh|XU!suCj |7cd's1/]GOM0&RыuD^Y7w6!aʾK7z!-%׃=rm1r`ŷxBVD]09(xERQ HKX7(_?K?=j@S{|Q*Hs$})GՒcO/I^X5x>eWbjД>:C^2־ψ׺Wi1f |(;(`,6CņRvzY936Иuc,8}LNчj촵KŽ}ص3␖;^SyKqw[Гum0S`U5uS@rcH]7n]ޗSsHG hzr6MƱkNwvyگ$>C`z eB€(z^f\\o}OD29`>q aeBRZ==.o5a#>AzT`hp-Ab nu -A--Ճ_r yǃ+ooz\Xwl I/zlXPZ ;Xeȷ␖WVyM;W#a~K({A"eBp82N8If %HAAbC׽«^Q <*0&[u'dJSsǷ QZ-8V0r`;!u0;YʁC ڃBAeBEl=@J>fXFZzv'v&q,l`:!V0KA:.xD߰e #B*=z^9ӫyF `2{J rXKJw&A7 r~/^4\,:rR) ;.cG٢9%%znPB1`9~2EHSHn},9B s< |G{_s pbdjE DɅbvcLoY̴70UƪͼVKX<= WaaK@r(II8xq^e8/-!-%}2d0#=}t62#ۃr` 2DHXlUK!G{z4C #$66l~П0[3OIC9 .y*Tq-vˑA& %e7ri 'bS~kAkI [ԷJ>r< |(@7`XB HX䰖ayQ$9ӭ)ʹ`wXઝ0'92ٹԔ}o-!-% Ol wD|j[d7Q\-\xʃvgbjДo%vAX h[ԡTJA"*t;TAs-đzͶZc~  s a92 9wÊmuk%Yl@-բ8eFy=f|Ö z]$S8$zp8T .!/wNq`C01lcVh!ז!%ڽ[qP˫ۣ  Ȋ=ͷwl4+2fC?wc+ ,zF%ae,ڼ[ qHKIhP/1쌜X.ʉQ<",@(CB9"dv,]F4\{吖ajtF2=e@įX}ZcJI8.,_ZzSBGE2^>~|G1c98FXGE K-ҴãHuF94r Eӿ"&FӳXXZ 8␖ƯQ&sr3 0KqG\%1t0T BWbI[XOþf,в k +.c^Fn^*13=&hhnQ,ADŽ^ '*#G[6R4|հV{Iq>="̭Keũ  L XhT LzaVUpŘF *ϼa  t&,b]::R@nAUjIu?\(E0J "op_7oS sc}cǧУ;zzD8bVN2I0.chn-!-%7G+mA±9wϥ]{nG,Ow\Es8(H*J A(asHEIh`aT! zD8Ja9$_6ʌse'Y7KhhNJ_#;,\8HG)IlSh YJgYAwB2>t Tl5('p9,VJÂB%C8'-N;gі%rAz -9 X&)!i Yx)mIqrHKIhȁȰ4M:$qK!6oQVPa._JYTXyгr׫z%.#%_|k]8{^sm\\@f$K I.s aeߕ␖a\th{}6}`=Ur36%^=ɤ N75|׊ٱ=ȗ|ǖ け+LKX釧2V{I qHKIhe`wcV*cueد%Wi`MY vfؗ .:\pqh :FĮcSuEՒ*QcױhFy:6fl ۊ-s!{c~Su,J<&dMP| ƆH%DleסၨˮC[.,wa9f_4&޳4v,|ɴݥ giH!D,9!畃߿4!`I,9\#[ qHI h`4j8K&Yxص}eYp+ y0͂%0 pk!i) zܬ 4< 9:QãT`pBs1D D Y␖Q %U%Z SJĠ!S50prKL`$A<90^q˳T"hWjhNk&aAg a!ȳP$dE(,{ (l ̚o%r( b'j{RB9,aK`D BRZ=XRz@,Y< ^A8S 9)L;SCA>Aedia;$zn7Vs-hR.{<.܌lL 0݂%0pk!i) N}0FιirT F丑$7X B>R>S5>W8W}O"ia3Cna,LoU^H@b=U2oUL`P&o휫Aspb ]-H1'k*V N|[&&SS1fT#`KL$@FDm!D2,R.x LPX0ǹ{v ce1!-X1k ] Vؑ>+wFsD&c;Gѧp`I*YC`(Yϩ.osqu5@nT#U31qb:Dk0L )jH%!%%ւ#!?FH*091l=_ Jj޲9LcUw%i0FArHCIUhޒ,p4 9Q׬Ɂq,%vY%0 pk!Z=bw[xת *,h(Z畐㧭\˂|kYeF`炽mdh[帱.dQldYւEw>CS"r7++81e;$\'d&ȲmS rXI赈3c'ؤKndE[畞rlx ZVD`K e␖ꁺ-Y*2m` mdٯeE1/j)-'B%FehZCZBG=PvΙ\N|ֹ;|w˔/w} ;$֗[O@,C_nj!Z=rٿw" |CrWؿwsTIM$>2ЗJcZDͶ7`sA>imgee2C-g)n'v`imA>q,CmZ=%|#>Ӭ BB77Rs;)A@E>Y'H-đzCB|߿meflF%|yBȾ= 2DY^U߿~?V31#n1+1\Ǟ1x=I@yY$׺Hд\Qbg&=?~_^=~X9__^ ~?H>?SK'?Mװ-:fҠw$Ffܜg/4}Y4cI\D:gq H*G"ҹx7. .\MZfof -4ߗh'l;[}΄;S;_ X*jǷK??fV3޿ox~?#]vnYr3~5, z;#9uÓUFK mV5 ~y:Bl~?ȕɌ`yr\oXq?3?˿͘ c񧿾|׾j_OFfjuT*#;6xƅl=>#d{Ͽk"Ǭq_c׌).Fg>#ЮysNwY_=ie+%F{|;A w̜ںnY8gT!dK7kc"R˪LD*D2=qvUY hN~FR Ӹ4Y|1h7PL\s١П3.aWOr90|bWQꘇ(c#Z5HWaP_$E)aIUv2Obȑc$D:DzmX@aӞX܉9-i: k+-mCs|F[{ň\fM_ꗰB>PցʜA|j WYǪ:r(aqߣJۘAs LJ1ϱ> 0aD<\t735=#`qb3;jX'{Btجغ"\Qn\  KoY<mD9و+8ψ34O8mŝKtm-/X8f;f9V(0Ա^DݫKZ-KVøEH,Cf٤⌠sa\ӄc/alE̽=[B+gDKQF#{FpơAlpiu7x6[Sew/@H.( ?ZB|g l:OADd*̯_z ܜ}9(ojK9[B"t|gs%[0wӰ^"b|oB /ʘi Wbc1gg;&tUo=GO1lۄQtTdk / 5h ia!wrZ]\Uz,4(NUhP+B8ڴ8Q WT+@uZ^U{zgMrMyq1 ۮ̹c@H<;ZJ` vv[=m {1nUM-!-%ps^FชU%֋ECtG[h\npL1XVh!<05(7fo# [t5]w?%](8~H!sq6r`ɰGƗwmЖpsD.bN)!2WA.N6`Ar7D>%rc)) gNY8u06jd97A~"KGrAjG|Rhjchn-đzCBM_ڌ#0rq>v(7gGzirpWo OXWZ8c␖_ ~0 N(]%f/6|c-@mß@9S1 k$psYEEґb^4 Hzؿd2vibU; yU{wz%ͽOQl {2pegm pbNѭ83SpUal8Ct|?c;x9%0`1i cZCZJB6!ቇ9(+Uc˴UsNȎl~kt GtB92#431>Q-;g¬x 4|2S=BJ}Re 0 ţ/pBz!46j2JD }5ȫE/‘>Z.U~R?+̀ıQI5//sDAA^`囓␆ЧTTsFv- %e$,)O0>H8FJmAn杉" ^r?p$G ,#}ϼ妳 ␊& ~$,7nzĮaŠXtJ QHd.$둡7jHH+p m{9WE`htDM[I0m`)acY qHKIh*>% [M={&-g%]]Fv 4Wt5_Sh#֕q16oϥ8$yTNL[:Or!t$)@-${MNrPE]_3#% (S{bIi'>XeJHz`mA8)AcZCZJB?dkl J*gœsy䉠;Ħ7NV-!7]A) 1v鬅8RoHh;j!@͸c rNrp@50rca) '֝Vrk.-!%ͣմ!;?< gd.=϶+ 6PHP(Y qHKIh`qJܩ$Lr`KmPA38䶳H!̓䅭_A|>r'2\;,9XD2Az9h>Q9%yps'? 2wzcw*SZhP8^[h[# ٷ{.tUu T3 YD"ͭ >L,t!e%qR\˛>W?" ͩjF^PL\p'w)GSqc}1I*A^ Nm!U2D r_:!=RJ/Ɲ߱F˓^ll?O~_k"MbmV#78M>0/')Wu_V߮(FV#ќ"(];*:%odqR$,aj␖0+YFNOIkyƶ'dOwJm`d6 =&G6n1y,FlpP{<ӣE{d@PP }OWpKŠؗt 5Y4)jfh٘] =sY<~Q9 K W`)cMg-!-%ͣrJZwQ&}ݟy謁.OL2QD"9|sawLt؝{@[ݒ_%KiCN5#BjsBgnt8ͫrS3i@׹8A#~ChJr [>j!@JJX屷HaJ!765'≒)Ԗ`rdhQ$pBzS{kAkI }G FVO.xT)@Ɗ6F,$%aY -!-%G[fY#|f#4 A28K/%^^>Ty=gO#>{Q#"7>WfOb7f_ A_o %T]2H'b|1dCp~I})Cr[ qHIITJsg3ޅ )9pV !JHXeH qHKIh8.U!EO{Av5[)u/Y(c HN:gfVzn|3pƞOryr Ay}@ +%X1nGj-ƉO^-:sw d%E b|1H?^&]\LZdwO;9V\0RI`Z@B .%ƌ 1X { ȸY;|`["nA44>.wֳ&TNkXЎsTDM/^;cI|]:#O2z?VmЭ8!)jBnyW7u@Puetys']^CR@m :gdRo5ȑul6*fm n7d14i.Z#^{WZyFN<0ф4ȇNI׳dc IrN`җ@4OeЦF2? {˜z[5Z9h$A4ƨ b;f8Q]m87%yxϜ% lL5eJ4 ʄǼr[ qސ5SkMg)na%6 2YJ}_gkR<2˹S'#%`͏᝖j_7WL|2}Kji mmYV$~BW4nqKcq g4 ;ȅ_"a3CZnwyOe4r;`cJqC /YxaV8ɷݕ[2n)[ٍqc265C^;# {E;uk!i) ml?^3#dd=<7 38J (_99^ZCZJBnr/Oʷ 7̱( o9 2xI{8*{v0G mt-V*O.\sֆae88 B~٣魊$]?LJAya 6pKSN|#8 8|EkTӅMVT-ȼ9,|mXb ,A {"ƂQf(,ECN:# |z~et\gMs"Ibw.X_ פ{p`j%/y U;BEI?YK>㗟U{U}Rh.%K+r?L#0: /1R6q胝m^̸O/0 HXX+%!%%x8xSGc9hƻ[BClv24ĮؽGF9Dp'×{} Ǎk n@€ݺ7 krSHCBELw(%ױ/=4-^ZF^r/-f 񰄬^dקu{a!f}l%‚kcM%‚ a4 \@᧵YvVNr/,XTt{aqG Nr/lr]3^Xz"$v{ai:ύB 9(Zzɽɵ#{aqq0\ɽ#kGVRAciPZ:%Ur/;W t$HtPfjД=짽F`vE{jG^&PgI 菐cjzj!<0ue#h0EA٪l@O`R= .W4@ A R@M8k4>IueIyhUKO=Rz$xKO %MO"By/w{Z$AMs* I/BJ@CS qHKIhN( a IG8HgMsC%Zsl\k D"  lJIH!̓Tz Lz;>ߴ[Fi-At!hP9PBR<8RsHa?…~ p­@ sJ %_BnjT;ZCzKB#/7=!½#O r k@CK0m`R:&*ZZRB+DƲ6{*aGl%0{;Tn$9zeƸ/dvt-T\`!*w'}rjCp9QDa#K`V wKQgWI9xR,-??:k]c۾+h $e]Hrm ۚF ׺Cr)\/]_yA?}Y|_ :̀uvF??ZgXv2,,IˏtANg]e>@)I"kA#H\D5."\@."뉀qqޅ܉/34u t~_$4?EenOw&M[w盶S4!MUMms0Wh#u|5??d]/טHށY$\_?׿_|3Ü>s5}c ys_ןc~FÃR|}~Fh3[~(h5>򗯑?qKI7aưw}run0yc mwL6A3M;Ŀ.֖;<_9`^LQd?fnJ_Ld;__.1 2iZ]`f_5MUעC)F`֙g#HZ4 yL󗛇{;>Ȼ?dA륙ˬgӯL¸jU5n31 }>V4%8s_?d]~gn{[O~?dkcb5?폿c'?fԯ>0rY&&8^:Eq\Eq8(\D׵+5SBږJ`>KHk+\DT"ҸҸfq)!_ӇEq=~ )\}-W[FƵ6.!ٖyѹTkw+5+t.!k,P\F*׺t?D";Zx.! uHןv 5%RJٶuT.v(\B5=G[*Uq˪)\rMvAHZQZkCZU{={/Vۡ|)#ͦ;er*N\SF}[w|a:7_Xh kOs)ְ:<9/=GMi g +K 㝈c+6aif4++I{oMw_#.:=mD6Gt!sTO٬0r94c`5lm0 rv4AEcu]b`FLuȒ)d2 EzG$q%'TQ)D}/"%`* jvXhTUd H@TԂE灹ZGn$^3o_}B3VS 8łD$%0ұ, i-CZJBbH3 ֱ,U 8߱Xd,bPF`,dQV$01~ZlBpY\ $pbB"58Ă8Sbŝhgd'KD^qf&qYr2](0G꽌{˲%6>.XYm0)A .biY`PBR)y92S sސ _ٴ>6'$ fIvAHd (c0qh!i) mBNK@uZ, !@t!WY@lL*:*: u+0{.ݯ*.If2mJHZ6AH81W >[-~U3-i6ᮙa#$M0{ZL+ZZRB?: md=2su֫8ʱHo Fn;I@pq0/06>n灑 (qxMoS[8c E X(0/56dGoH e#+҅šq$AMBA\1WG={p;E#`p O"I/ i 98.NP_)98f q@9 Yh#2s␖_Ҥxy`lKd;cnjo98I Ih %bc0h!i) m^\j#z#% :-B" p5!Y\tCj,Dk;9 :yGO.L)@t!;Vcs!vޭY*OqCë0'g @n/.Cs e޷e^#j~`8o\'\ㄯLUHdp! ;t1{xjG_@ ϵnoVw\BYS>=#p`1m9%%ypnqW'6wtLk nDQ 2]y2h:ֳr@E__e1/gTiuH?9$=%܌kӻui!i) m~z|Y㹑FK5Wggt)A II}4W*9$y,y{-:Ey\1M\DŁ'dܟ"asclvI qb2pCOE]3%N K>$7}e搖פe2w fAȰSy]9Sog9z,G"7e]|qɩ!29З$%$xb@J%a^crY qHKIhsk"d_=UYM[K3[)Do 2$̂[49Ra !!ƴ~MUH YIڡ/AWe(.|vG^A_Kv>O%50^{qȁg-!-%Oc>D,zȏO#bVg:+2)AtZD ͧ10G m1#tc l}aLx{4숝2EEƩ0G|}qQ~;e<(q/D`ߎ˜ª^%ŝZqR~_Xuf6(ZY8~_A؏aJq-c<+\xxK s5S [o>\(Q/-2W2ňseJo~@Rfw-/αFv,zyJoǘ*9<%۱bEXuLg ժPhŰn-H/q/<-c >d w#ZְVl}a;f_;bqwzOڈ~\[z.o ,t'rGCUްBlqi!:Ztqi!:zCxFCMg}ˏ2Zדc}˟; F xM0,>bŠ-=^V +ΉF*!V,Xuzc|_D?#nQԿ#s.#w"Kڇi_s,>?q5Ww:zǰyP842~j{uF~&~[r3j+6+ꜭf+m]CL{޽+JNW& /[ύ(xkuF:2,&"I$6H3{B }V$qЉ !% 1PcjAkI }<!I&yRQ Ie*2 `փGp^u0uu MK4gC:d%MH9 )9bS qHKIhF8QF0]U lTHYh#HlH i1ZCZJBcZh Bc17F<;=fdI$$Ć8A Q,1NDN>:1!݄̱%Rr B␖Aۿ Q^Í{s33#f|Q9Ž0¼IPރ؜; m\,Xeff6< 1YgF>53x5AdJ/dʃE;ZcQ@WሷM_d4̕9{``ɡ[D1Hd H@CB>yVΦ;OxPCm V 1ݷz˙! @%O۳3~U) ߭R)N̛<` \[h'EaJ%0c8ZCZJB- ,ARhAI86~a AJCJ@0MBR< y~f¯ aqNĬcTխ%vN4Xc=8$yЄxIS&=2 "1_)_ I [ޒW>J) ^2!˔59Ѳ GY3!P$tj!{<#;#LiuRʃ! gZ@K#Li.[`yB J{!-A--̓V0>-@쀾oF3!Sw3R3^8RW7$!ۏr0V3|)8˜ApN̉Hd@hk!{>yx#kQCy>U@Sspj a FGk!i) m||29 xoXa>ݹ2%ר@` n~bfwl=(~#mxgFL`pb%VC(-'C M~ˢR MH9 7S9`S__zEi[#NyI@C`BҒ<~dEaZwzp"'Qbѳ"0a!%M?¨vǀ D$>d"f_ 兦O2|=<3#8!)зԅ_ArC4##rԈ醉Ty4Z@EbEiH| Nİ܊}|oD=2!#sۑrUN 7ZCQЩ8F*2H[8cCDA^%0c83ZCZJB?d#NIkL5<4S{p3#ȲUl- 2(1m-Q }jH,!kxOy23xpBBJ#k=8>̱R<8! ƙӿ3# ca 8h eF)YfF>LysfFcfFX<3#8mȉҌ¼I93bVWfDE[fD*3Z#6ǢD0-qL}hDل,[@CJ-Rrr eG␖ȓ#n2kJGMY8.,-tfK av%0c8?ZCZRB~/qF8QCF~*?bu2ы ^1a-̑zCB72S#8suxՠgv$R.~!}168$y};LM1<|6a}t7;dDѷpe Z8Γ␖|[xv•; iGbUnIBǪ-0Cc,{d-!%)Ml&8g$1BOe K *<{˽oaq}-rr,Y`3נr=*ZSRFnQ)w-06ZGDvf : Uh%NI$r) { 1ܷbE_gܺ3פZ*i]k{-AAE^V!CH O\%"-A\!%ag␖܌$DnLrc!Mn MңO`Jo7>͕ Z@3*j1@#'*svrDڼd׊r~+94G_NuqySn#`#767^Iwqo{!%k䜇EIG8CZJBe겑5IeLK+yzCr, :A:J@E(( FyξS2O  چ W@·bH!͢dx" ?zDߊ5rM˟ZHӎG吖ѿfNmOd)>#g9m)2?U 2F߲siHtC:JBjtD<B m *%$=Vj@[Ž+JZCZJBG;0+Ef5W,9pHcr`6eso2r`7$y,}3a&v:brQ[XRzErI1H= # WjHi#Dϫm> @9i^.ⲟN9J<`\ ' mᤍ&~UdanK}7a>Ū55REy"$9RoHhܞ5*B'8u^X:Uڽ)끏{a뾑V۽Ћ%]Ǧ^31ұ]MY׆絺]B@vV{c!A\nױbkumY{WڸWGHIMY$~t>t87 LRZCZJBgi. JD#`2 '$sbSGnRh< '9JH!c-~ Q$i4bD?BJc _GJ$%IyGYZ$6>A)/=ˠ<3B}}hW<0:&)uNr< ␊&-x%$Hn]:'iT Q9𤄤/muLRz`-a-)σ/F"DuL'i^|?sȜY q/ sbDgia<}U+dc=J("kcwHMPM at.ZCZJB~kӐP O\:'Ds0f#cb s1\ZCZJB >5M |ɕA-__fXei2xEhoTJ(93S/v/Ͽ1.:'^0&\|A& m%0c8ZZRB-buLf<:'^&O06y;`k>yLqV3Sh=)zRR qސ恹ͧ] `1uZv$@v.`AږӥtHbVߗ"DG+g Vd>p)zd4]RBxdg | =Yk!kI }Z]Bht1ug"(Y\B# c{t9cR[t׏R0A/CPiuBzէ3Ju9]RWǨ}AGlvJBP*^XŚA]-^X)ܚtLчQ6;hX{v,^ߋREFֵABkdf YR0ZeUtqW_:#uiwʽ^T"?;W=}V'C|і+0`~hkStMف:n *EA~pMv!Z8Ъ:V~t FfHmw‚ԵAǘbv Jha^X^a ZCd6l:V)ANJU^Xy+jV) *)K*K9!siw\Dvf qpJ(xК)t3|ֲzhXYG!!ڢ=/ۦ(rϯeGPr6b!60ރPP01v-S[LD_=ZL's g=m4ST,x-&9bOQKep;*:U|Y~S}Y YQ>ygǕ|@B{l1M*VD.@GXo_]␖gU#<u zU77V\ Wptx:WKH mh")eB/g5IcTf]O&eՁpxcIGoU{+Z)V+ctZ#6$%F BM9@50L[h#la l 1bZCZJB#N!OkeqB:X BЁ$z<6X4%H2Be%%y 22XMHg;Hq$v󙂌a=*ͤ8R|`7XW]Y.G逳QەU9-@͂M)`cnATQ)*6?hr 66'"BR> f !jqZHȩM&ovVd8d[DHZHq&[B%ѩ"ӳ4on,At!! #LH qHR<4.<"1ObI.>sNxlUiH]",]$\u奅87%yxdu!an"'31M$N.9[ ryσ OvaE}E31rYh0..Å孅8$y?a+n"Ca[8Eu 506d1y(]kxtE"dbco# I(AF9˧␖?OQ$'!iB6孃83 ),Io5ṕ^s6F$X'c6<) R.qp >2[#YB*B%m",=kI[ qHKIhӈv% +䡓2i;J$vK"#?lB*$G*{m%R"Clc ^KU3Rh#~H}DCZ{2llz!l",$<[1HG hȍ݂S|P"ޅ$2K&bxWSh#a $1kZCZJBGkUBʌS$ 5vNDJ&, 51kZ#=pg'uP\8q``6;EH:I8i m`dDڟ'Au}>c%:MQG!iPG uA:MHHx4!-NeաZhK"a3Ah29(ȠxC#˄u0u5= 9ӏ# 1G`o$I0gl.u c+)rs2^#>CD7DŽ+U-AzL$ %DU奅8$yTOHN@xA!1G簀Bv(oAy}ӱːp#'<d "WXQ<_]I0zYx$tPj ד(z/=華PLzHpWL&Uv&@"w\$Z_{L::.Bv~w }a/%50)$D8$yIc;Dc:H8=&H$ m 2x$vc,'/-đzG$D!A""VNd eC%p kaji m}F;cNM0 6;DX;Hx r@G-$ ,;;upg ss$Z FY̑2ٵ@IU{g-/ Y?a>ų đ:ڊvXbB.w,vrbB[DzucBr>"M5LYhB&S,/JrѶB!"܌_BwJ$InI%q %CʴS v:Yӗ'䁠Eg @ҐZ3g)3rbgւբb"O $$&<|kS;LQq%f 1 nQ:;LQIP&8$yTOUɥpQK8t,@MݮS68Sxb)q T+6t osѷ=b.{#6&_n"$l3[n"O˄q}J M&8YIhkbga gDŽ{-,@tZ!IΦCJ]WMuFY-Sگ r,R <8*&4B%BEBcd iaji m-"4ajDɡKhז/+ $$@Vf*s&Lp ?3]wiYD]O-]/&=+2S9/iWbSh+!)) uˏFL.bB<ݤj+Oˏ8Nx-Ӈ.!k^CĕCKnEϻ Ěb?QK, 21aqTtXz+UItOT<>62Oe.,AE6,/C쮲!%đZ/5 \|&\V,©>K2xScV@J%n=*:R@ة|+׬$;UED^.:(ˌkYr]V! )Mu\~Y2RV@wBr'}vᓍd]v8RB;bK 5fxPδy6/#,)$׫ &56[lաv+I`4YHѼ\.i+#4;i:R@BW:r嬨rͺ\G(I^@ۧ\fakh iHm ⽳?~ \.Ҫcq/tձ5/ZcaVkiձWkiձ\RĸCCUn . :Nmhձqħ0~a>/lr8r5_Xp Eaܱqaфa=H',5_XhYKw(ƻP/T0~aqЏU0Xp(kR*ZwJJ#bV+ɥ1 +u`aR󼠨K`^ ($R+J橩Ow`ʺ0~a1"/W$("/,~GD"ʧ0YH`b4 ϶:HY2iUg1GeX>B^$J(zYj>{>"|K 8?MqT@D]A6ncg-đzCB"wSG#LwCE}3ⳳ$9nӪ$J(wYu9%%ypng[$~Ʌϼ,xnj.h%u=+(Zk,ZqP?]_okDܩfslOe؝%٬Yy 7␖^4s|ݞNl`Ǘ$966d `s*iaٛ{4Jᚃ+aKA{Y{y w⠒P'GsWU<:yuw@(zIBi%3p:k!i) m^ $䲀bmdAn m@bJ@C5R qHKIhq%xz?_Ib"Y81*!}yuSMOmaYUMuWUJ D,\KMA J@u~{*"> 6 2 ͱ<(& m 2x]*&*Z# }RS"Nzd)XXt\Hi!,h ,1\]ZCZJBlқ#(ҀI\<,w ږj#F:A:J@?eHRAb 8CsrRy4ݕO%$M`䢑T1T`16E%T@ю2[q%Y(B%8RoHhN $N:\],=ۅsl(i m\JJ#*ZCZJBIVNHGX,PS%'l,vA $Z (Sլ9$y5n]JUE?7ۣ[h[wcx.-8]+pnѶ BX%XEc̢06>]Apegt΢[KtKHz<TIL cZj!i) mH_$Q2y@`_o2Y(ȒbUQTU-uu^k nAFFf\2:⤣''+>3||hĒP<1GPTA4$Ix1E#_VO3ۧ|n%SJ諜] WuEmABDZEN:!=v\Q^\C}Vy9pE@YD_β5py *G`ECULUwh ʜ@]Jm`US&*ZCZJBǜ۶א!o_ \BXp٪TYf|lu}lƬ[|V9m2D~J܆?6RZ?p7gY1OŽŘ3lf1Q-HǦ Wc6Ha}C[T| [<X ,H懠 ~JƏH y) ѷq]{ZӕIژjģ̙k~?Ođ2n#|4eAȇ[^XC^BnҼ6sQin=YBz+2hr6[Ѓ>H>څ6k篿q5kE2*cuQh_ZHk"Ulj/a/iNrPn7 cѥ=vXD^A z3?/,:znXe機'#xqwfVx<"˩S k&0HȄj5ޯva<؈tza_.S_hya,N ya|JYt~:"X˹'s?/o"<~ya_.U/V~^X=Vt-,)}=⮲u9ɹvc~Ja׮G"n]0BqA:PF;WhDDt K;O-SS_*'`{ C,``fU7BT#KSY^ɀ,N5.Kyxa_wra In'$KQot;Xc =(n,T [0~cXwµm{K]^g=X f(V~*mO`UJ 󝥢)˴ߞů,M_a(g/~1ښQ92t,P{:⽣V3}z簉q2q,̾x imBeaf8FIkoJm !>b=&Pܭ@Q %J'/&\yrTx1]C%c۪Y"Z\2w >nc G0Bp|^Iz6Bt }lUbhS$kӠ"W~wL4-P1, k߰_M#̨I`-H`deKYa]Ba"̓Q&c>PYH9ϝ1r[Y2N4,~x- dзG9{s4ύ˂d q46t5"gfɧ_!7NO{UdA'rx4V5Ʒ:26t4֏F\s"FCEcvM -1t{! y) 9nyD#Z?o8d9E7i/r ds8sCن԰緥_xa3mVQΙgƊXp\Uc7$kPB46t5F I2kj2'3ƓͰ3Ӿ^F8F/\kwz 9( -|*QNgbΡ-5Ԏ,b+Δe:u^HC^Cg<.GYMG̙˔Y|gl͗Kβ<a7wϣ5:_=sqIq E^y,ceϰvW=IrAlAOiE^ߺFe'y&]I^kP% g :.HC.BDt)cCob>xzZ,F`"8Gy ==օVCIrV/As' :,-D΢`݂ϝiӰ: -,9䟯8D?`&9؄qUZ)VEDA[[Q! K[66 iKZhoᓍÔ/JpFBGZ|{O[iz\mZۋkzxI Z?q1$TQ|c æpg!}Ua42A ҝ°=X֗R2zUcFN$yX1shr"+MzI& .Y'S %).@B+W>̟7&\ZG="\z@rik-H>5$$rБ,7 w4ʭz?ھY9bdGnw|[vs+5XJ${H0rr) nc(g/!/eri׍Ggrn8k${<(H:t4ؿ_]h !\D(}jSD T<5XL,k80\=,>)m@J/!/eΓL,i:ESo-H`dsqXXXY0xiN/RC^BG 6D='$?όlj++Bv|xl_w~y󴳏F..|0=PCJ|}ͥdiE+R8QC|̃wL@?w~e^ Ƀ~xH &rsS '>I^w%/wd:̟NSҰo-zn7yOq*y̰y "[ǐ`aAma]ޏF/^N9Q Sb>@ᩁ,Ѵ Y#@";!66ՓҐѨi#Ipթj?_&FH ɷYfvoHkxa{~4j<ٝF" >,Np#BfiA*z(#cbah*k/!/esyt#lR|j\?J@&-Hְ̐+ncW^P^B'Of 'd Xwq4oXhhKRN,ϵdXpɷ"wF9H 9Bq)r'/!/e-b -V=e;<,5 Hd0&)1I527ޗjGYh`p9+TDǜcw^LW 7Ny[H|#’3G_m iKYhh:YLߦ9?ֈիB $w@IZ6~%,QڀXfxaZ?a;i1alb!>;^"Gxǭ٪)tgdE1"N-)Ch}ᆬ,c'g/ x@q!5.팜sR.?WrAOZj0ZmkrSQ4 yy'RQK?5s㻁[eUwy3x$&A^3MlҐP{A1&7dq~.PQ{IA Hx pa^O"| (X;k$/xbzr Xb72HH)k28y5(zo 絥|TI {T@0= P?OG{ iװP{r׳kYQ)?%ur.x+-χ!<_n9"Z\?X>D <<օ@%\<^4@%[N4p(gv`ZZw(Kd`k8CQwa\kIPZ_UK$F"ӛ]*`Q/=lSOlO ة])-^2~,Vxg 4Q+N wTS^( e$?wg)!iu1\.Fx ׬nc֠߶ 9` G£ WmF~4j¬ȉSDN)܄\F`Zm(QȴGҐG 4E=mA-` F4֛GZ :jXC~ߞ~4ŬfL'^ێO5X5$琐0wC1|{!Z?) z9${F ^`Χޅf l1 o]維s- !͂WR)$R@ʫ W I-k>Xc\ > a,L L [I!_}q-<q, W 4 jBcF}m#.1Ukc`2 tFH~CjE]_^}Q1K#I8|}~mdQE3[qXJ$g*^P^B8]gBVOr^״ &y[q$gn/!/e};Ysۂ,fRٰ(̴-q^^Rn/!/eoWœGnr)‰PXjk =.WBZB4,~2{ JK!Wb[ j([-PBAJ R(>O/!ekoq~+aʕK!Kb[x.2L >L =2WBZB4,~}`d Ȕńq!#JB"CU!G-i>H>>[_3H+`p(5)rVXE A![B` k8y3'rp 50=4*ڣƚҘמbG#J$gn/!/i}͕|Ab>8Y7 sj mec@@Xmk!EvedfbD ϊM =$N  UWO/~BB51)/2`G #%L6TQ9֏>;N!"LT &V('%Ȃ2| {fx[>suoQ7ZG Pm%~cS<ÒQ2v yY?+>2gc]RUuA Z[za y) +b>Y{gPYCdՈ|\݀X6-^H#,x_HD>Z L<8A28Jc aF+m"5,~o"+VFJ+6BmN?m咹.Hʊ-.HC.BDtl|~ǾƦg hm@*Zg06^˴w"cT%Bxqkg |-݆_\{a y) OsDڍY6$Y5/^܊ ^Q 4#=Y_|ڏ@2g_6'*D b eFЀ~7|] խmd|E$+6 A@NZHO{6{! {I o_Fqύo6>+!ȾtU_(g~?_ۯ{kO$(@⶿ 1\[dhIZF{jE]n~ҬTѺ)}H鹔Vx+E9GmL~)-sz]s-ᆵzr ԝLGݚy߶q\V)E6KsP/iVߪsNy6٧%jG}Z/޷Im;>w9zu|?Fi{=D=`,xRZ?suɟCgFοclEп?|j_ P'!(iiZMi͂2M @yr3~ roy#<$YxkiZEMi}"Ҵ 4YnZDJg؉2EKHj证Y105n iZ[Fr 2R^CoA8=:zj}^y#EKHoA%Eg[:j]/Zs> y,jZ} e$WLڸ?Z]ZOj )guˏq16K"Ҵ77ǾX4q׉o"Mk F6aI|eҴ@0SFA Ukྩ# v.sҴG7uܯ%i2}t&Ҵ&ulQ0A@3߂1=:Z-!U/Hn*ZB@l$6 }6HbcQM5cѿXmRG8{B|%WHS߂~FT{{Fqysm; E"Mik$/-"MkV76"M:7Vrcd ~@V_*&RfoiZBֈrm;5Z>3k)GA>c]0HkDw1hetTuAHC>j_FV.j~iOw@2Rޝ%fH1߂Tm3D~H"UksŎp|^31pD^wB8o n6X@"U=sK["E:R>hH8 6[xX.z 74snxikV-*]kR- xkR-jj4Du:iZކ@ M 5HcӭDV&Ҵ(؆@ Uk>t>Ӝ5$(ZD! RuTy=Fֶ.CQ9[ݙMj۰T$uo$ _S#U k*bMTp;_g"/{B5'j]#S1\C;O |oXUZ+Vyւs:yS:izai\c{X,e_Xx#;O1ޯ3O~~Eh3OzWdP}cN Vd~7ƻ ;TMLc[q-_Ɋ~ 9NN\w.A#߃aE.onAHDu?H:}J5,XVsN!*dgv f?+2H/I?**qcrU60?^G6?ȳ :a :[~m|}d2O>e}PJ9/iVabfB&A(f'»*8՘7r+,Y F]]~0~"h`6/2q jD9 Df;u}:ld&ѽeL zH>_Yuŭ52*ʇ,{Aǀ  $}w/{SMBfkXq$SFIlN&n^~DlW ;ޝ`8T Ϝ;|gH 2gs8 E^9L 4*m@J/!/aO)ۘE+QYY!aaKY,&4Y~3d·HzpeP;!!@pO <DlMSㅅ"@"~Û(m@搿EN^|Z',['2)Gr$v#lpy7+ $rx GO =g&D79P/1C{8c۶y:\ۮ< [l< [Q;ot,?};<ïʙ*p,Xlo­orMc흆;PwwӱH]xZ;>rtB @} +=ˀ*X"ucƠ1:1 74rxO"gdGgWoj/<ϑCC}υ|:5Gc90Od.eaCj8 k>#-˰c|Nyc0ԂӅ ر9)X7oPzد:oƹc16w<džspXhI;f&*1kk.Iby=84(;gcCnH1I1>{㝹1#2:~-8枪}'99!:Vf g5}&>/SRa}΅: s,92t< Ly@,l rdXhDy\ ;:"rG  0:':FfYgU>7#CǪ})CCè}{Or~CZ^cѱ2ŸǞ#DMq*Ts  ό v _CP.ZAcl;F8y&8=,v$ۂbZ +52ֶx}wym㺨jU*XmIRF[z6H6C4i u D =;Lvb_Fl^>Ld NnI NH,&y9SqrId` xW&딃Pw'\u: :ga*ZDDs0Ti8::m\80=׵F)8^;I'b/ t%|skRlN#" .t55-^g_|Lәe9§QQ,eA孰yJ :|I:z/;xtr Jٳ lhi8N9Qg$} f\q)vn2QG!%%( LNa%U.XBH!HaA3g(LZ[!tD$DP"L9! ( Ձ9C* Qαso\t+OVq/ESȂpD&)kqÌ(QA_:#sr8"^Oπ.xrld98w]˟.=`[FPj=1I<ʁP2 v1Q,8mddF(IgpG N)/t$g%cY:Az/гGEar$N`l3+[,9yh,XfM"ʱ਍ґҐli,t< Y4(F6J<`S*Y:D3W,~Ki::4dkрtBiNa?CF!W:3QG4ˀe$<YP< (L5q_2uvц2u"Ly X+ ESȂpFf ioZ0pޛFsiP٘&@' M(F62WG^HC^BǏJݯ"֙K^~9fwZ%C$NTDl# NA# ea5 "!Yd(d⒒t+h@i TZP*d:!{MP X:2L.təCD6tQ2v3v3v7┭8!wABNn)c'WZ4VȂd$YPFȜy! y) ͵@k΄7*a'D1Ɓc\i ŒYPFȜpAǼ熧&S-R%ķM{9釲j v62eG^H~BjiS\6´I9E@,/ZQ (%G-dҎ|| ;7ą(mg0"K[Ι4vmAkQ,(5Gmd򎼐>.>'fK,gnCfrd3K㳸BY|_Z9qZN&ڳ ?_45 Npl HD YY}xthM'ai!um?F?<5T}f A.aD"1፪aSމ,3|nd>.Qz/82nD`]l qn6q%%x0gˊuy '}Sϖ[E`pvȄBX;lxi@"@d8~0lJH '!iue ܐu1pG4ץ sglEC>@d(W؄lmwK)o[O@-HF%} Ȳ0674,~p, U ȓ s]EcG$vԲ )k@Fn+rQs˷C7ztb g!]cҐso(d |čiP HF%Xuiax| :%S~νhff[) bDBhlב<]m@>X)Tȃhق/̦s2;gAŇB ^fPy?_ٸ,tywƊj )LSW7dC]w @jdl2E44-NxW 95r-2ff!ȿ/Hugwi`{x-@ұ ( -5Xȹx.Y0b]LG0~i N F\Ad1G6 s1Gc)B&NYj8/%dng<[6 !+|dY;OѰߴ􏘏f"gk by4X,G\r𗖅x6 spL y) ݐ@Sυ- Luy#ԗx @-HF\r藦cgۀxzx! y) SiBQx~&Qz~G!O!h~8K  S-{MI8#_R@b q!"7pH ^x{C~Ƭ] s_$Fil\ʂdOvZۉWi2S47-~x͹5S w2?mHcmZhE"t0x|S'섗1򌄵rD]1ċ1Bc#F"=ip$ LsuX dn{ѐW!ώ ydW8@Vts-ûC @"lrBz?-n @3|(3anYc-XM@ 8 ?_vrRZ/O\ܰ[ŔHM#1R=YZl2g#CCNBFMDYoqdd,3grOSm2h|S>E7aióT~NXqjq,r슞Ha亮 p5GOŽNY6ʇ 0q]Fi24,~ϑϞ дbpS|ܤ1EhCA+#|>I47oENBp3Q_}ìGbC+0x-X^5{2AXZfd>Q4 Nq9+dk(c qRF%D|׃eu404"ޏd'[`Xrͤ_D,/WX:G͸~ہ}fЏDW?GM೦麎POoCwїKDLg 2PZ)*ܷPØg?wE$*ؗKF7d8~p]˪27iM FvbU0WccZ)XrOΘuEI/b{OiW ( -rr1P!9\2(Yg=ys|pLU>Z\>!ewEKI!sôd#dTb3Z2yxOs?4`iw&nf含trbC LѳSlr4#2>wZ8 Ȝa1tRZ'8 Z1K#nIH4@.3gXg#[|VȨx6 | )GW*Ed?n{̅h}K"iт*nN`󱋋q 3.HNBcT FYGc9'ZcÓ!7O\LsG* @f*\\މe9Y@c;& A MwLϡX1 c "F.?|bYQ4VeˋB>߫V*m@K^HC^Bg$M<Е3R%Wy|?y(sŴ<ne()>M@̣(Eh}qj09?Y:АkHi`!hqETGQCEKZ/ԗr;?g;Qf;s9A,Y&L~ʒ$)'ERz?~F>yI"P`Z ꇦqaqǑMP֋\ >';Rˇ #/k޹mC%h|7YsI)gh}pp!#tł\dlև2`1Z& -h`>EA˻Am={$d{nQ(b*9z#)?@i`>GזMPuދvTy2r"p3x(ÉD0+ fʀŁ{"PI+G}&(8!e=Ja*̩,#= YA.Skpb!@y\3ʙ|Z\f֠2к2J%-!^Ә6^Qz 2Yྉ HD egn{" { ikZhynm_m[Y'-X65?(m@q^HC^BGm|r VEl'u-Gޱi;h&Wٲy1|Lj}eZ)Fޱ޺yF,"yإ( u%aaR<s0y/,xBG%aZYջZʒ^ys q\$QO2#LVv@jIUE\LjH"rrB-ZGȮBOgD$yk\'HK!Eȫ]%Q]Q֐4лq`r<$bc9q jnv{oV8C5EBJPjrOGz6wJ8wfjc~4G/0;ȂeSjjj#) kK[@ =A9ıݬj2]Nq,[#u!+rBT QT,-d5E`zh|ɮ$r@:Jr5T+Qc|VSXD+B宕J5E` {L MrS4rφ⇪15)<+=(De@DSҐ{pHթD+FeL%*cV-HvIDPX1mm"IIeseKZ>YU-EUMT hai u "U~Ӷ~q⺊E i;eA*aUD[`DẊBRz?=mDUdHzg|k. fZijUmU݆* ikhFu @!b8LXw2˪hm݆k* iIh:$Nc)C#g^8oeF?JȂdWT4zzn4,~ptA5So \'WFGV;8 Ow?1[p=E /؉ x^$bsx.frG*/ ˱eWSb4Zn4# z?YMQj!Zf5E}fϰ,HjFX QT+Qmd5Ey! M ѷuM_/mw_ﯟ3?k|霜lnAe~ KY坑@Zq5]['?VwB<[uzӽݘ35ƭ^‚\ MONXCnuGL߾c5V;6c=Qj߹-{^Ec1 }y|-o wW>q"~< %vxVVxbr>FҀ|x km轈msp/&7ٱZfa*:w1I9 N6Y= ˧JŦkpcp=(/JL7; ?fR:YF8 \r z*dǘ*d~+1+dxNNraaka9ٱb9ٰ߯|N7ĉ0+ױW^K2/fN?ryscWɎN{ D+Vږ # )FX:|,`v`|`ae(X'V:ٱ|:.ɎqT#sbg}dfWXyRdǨLKN6 QnOvܭJ= >5E:yaש̓};b,ŝn,ױk1=[ecelXh!{8 \';V=ٱjrOvZpOv,*9k=$:hi'OUlPI;dZap{y)XmN6Āy^'~ dʓX';F-m {8csc%/9'T_3dݪ [8';ƱhaI'6!(51qЌuf3cPG gƺۗ_Od_4VMū/B IW'VH:1VHvd5tub[_a3_ +z v%meUTy?d> f^kB@O\uҰϫ3 Krzm\]ߏYvsM}2)d#Dk v7֠yrue.艦K,{c'*I%& ߢ&)h{c{jwYr-h$9t=c|I`grf .;lӅk=`i6"@u~oc {M"Qq(h,d}ppxAq!C?2-`78H>yeyi֏zVxF=񍙇qG2L<|8K>"ᣗkg%# 11I፸sDg"˙D|BD73Fi0N<iLҧ'6fD>l">!ѓ챉R2{i2%D,zbx"ɞ)Lg(Vȏr ,dm$ |ދN3UX[ XE PfE]8 BH &䈅okv,|ww~u}2(hSX5 H~`MDƲ =,|BtRZ':SDAO|bc/w;! RȂ56=_YО]cya>M `T¸BȠE {/G@͝@įϨ 4z/:Ta#"ڼ_2D-2MGP1c'/jQ_!) oG0 İO>H^į=#S"(|b՗s[mIGzi|"L >8a>qn&c)Dğ0l~_8kQ5ElzBG^7$L"_&(“k3WŐWK SI'/a7z~7l rs= _@IWœs|dl>h ֋xV(^EʅOd |l#j':VhrpW^O[sɿ'+ ɏ E&;^"ϓ멍dҐg"=hv*白JKVi(,j!$'Y"$ЂF2 iz?Z1)D z"ÞOXb-HN>#3핓/ ioZh,Zu+VYD%=h%h%LDD؝XA<|ђޏ:U$48vWkThUJ(">!ѣiS;5 N{".e/ةL zIÖ{IG*M\CԺ  )$|ڊk1E$ASр)D!֠Izщ2$\3G(e>|Q,`^br!7(|t!I3 >xzB >q|Q𡘂nSIL >" гgR1o >h ֋DE>S)@$|Z8r^'ߒԧGYf : xH'+*YD%>eba">0 $ &ϣu4>OYae=)>`I,X(2Itl]I'/LħJD|)zFH"O=55D$ OhdA4{j#4䥩Z?jP"afSR1F!7ZHY$y!,fOm$։NΔSFȣgZT N2 !%Yl2>!bӓҐfkh %Dtz#y̶5&r˴^ZߞHF>yQ(K1~oL^oPocf¯ ||q6'd -m$&_D':#bK'.0JPre  qO-$'\\4_DeBA3%_a3]mHS! p $#]ޅN\TRϔAdPa0A|F>GOi!s'F։>ʤK!ӴF|{3#9qEl@l{j!4z/:M +CDnV Pll|$V2p$+p1%Up~,=E%"W(C|(DI E&Q^"~eZ՞H2>y! y)2ޏVd 1&=Td(@\dRQ^"ғQ$S(~4ґG,d|Md#qH!l| ɂDt|P~BG)FȦG)_:b&؀L lO-$||ދJP JoIƧ4Hy` 345 NZB"IO [/X(2i1T-T|T|zE~L'`=-~&4ȂC7#,fϙ&DȢI$Ũa2EZ$|FH' SIgӌ{1:Ѹ, 4|⢐y#iH^ss$'(2)5,^x9AS$$AA/ET]6_(/-/ق "{lDžM{ɮcik y˦+HIջ !1̾,I' C{~A@q_DkyFȐ!v=I=qlHA^b!yf",0}_C#({Z7O/k Ѐk"bΣC{N$\4^B'CKBDG R2&ޒ8 4OWTOvOOZ8s9eEd /STO"H,J.\/='7+k_s=D14¸Д{|L'9)LrĹWOƫ[:C`"<+NGޒpO  HN=!˓驍$ܣRfk$yNH%Df=4R^AVјq6rO^O~'i_Njg2t5ILM<-x3t35ILMG y) Rh@m{Œ{:(=ʅuOXhmٳ$+dºgyT&INs?Hd,yqX҂HF K~8)0sNoX/7b(Y1^ho^^EM'D$k=pux>+Kڽt|CEW(aDvO.HC.}r zH9wӘr˦"<I)%=Z{(>Z,ČyD$Yd́[R2 kS^""ғSҐs&kjOX^\z:Lm=7imu3B<(TzBiiZ`iTNU'X>b:цHL=a R^a q3Ͽ#'jԹ7VZ,*?_,wxU7KY{,:6/K},RX uSPԱU9T(XVcS7OP1>[ HH=VC:8?K}<$Xxϵ>QBks6Uೇ2Q£Zc .*u,AU4ke_ uKeM-FDooE D **:'&2Q*u&zphPRcηD#pG1GaVV&jX<LO:-U&XhgU&mE&3Vc|.ytXh]&XyZmq&Uju>ϵ6Qʘju,xսkl55޳b5cz,Bb]mEӂB!*Ԫ,;Mad`2JUm5sZr"EUh5W4ɪ,n56 ^!<.l ʪ,,3,H,4uY8ʺ,t"keio6P!fn2s\l3oEc.EqqȂ:Fy kIh C'ʱ g%YGSaA)^/1TV\v-,t zXN XM:̘˃sBXKY cUUxyryl,],t!<䱸zM (FXQCLGvVfӑ4De$ ]E +W̦,[ޏF [BTY䭮Af!lVoN]wYZ <"/!/ev0g̢+rS'#l>DˀꮨvWHs?PT0}b,da+ޭpr˦*4+j!˲iG^0 EQYd\.ARQA]+j Ki?Y=pՓL~ ’*ۊB@m,ɲ.Flj^/1KQE(W.iicL 0’,;cdQ*AdYyRLZXAaRQ. -Ȓ,{ywz) mQA~]pE Y,ڂEu%Y - Ȓ,BRz?Yk߂(3Z*ʢ,ʲ,y@ ;*RT\QYE^H~B7KɔߊƴeᓝeYVVsY,B1u=]HjewM,O;iv,Pɢd g*5N YRQEYP5Y4,~#st*~ɒ+s-Utw*RTqK,B'`iŸWe1²*ǁWUW,[D Ed!*ZWd>K}i?Y=uZ{*;Nʨ\edNVt5Y ZȢ,rAvz'.YP QUM9UuEYYec54ih.*U,FTU\umd]y! M =`FXVE]Z1B"y+SUY[%l#+ iKYh%_U*o]Qzkf5%ga#" *60K?c^{;n.e97יx5؇g]uha/u>Ī*Gmd]y! y) +u}YB+NDS>/ljmF;ӡ$3>/,,=wC>/,B [(>)38>͞Ot,?yZ'`R׈rO v|haA: =lJ Bym#s%9rrB[;%D3#P>ɜ1_Q4>hʙm)2l?ٖ֐4{dC"x>Dr=yWx3e{LBºS̔DҀ&9c[.X>h}@ AXoft' jA;Zm!Jedٖ֠i z%kӶ٫mO7q5呟u-V-'AmLM`  Ry|2krur@fmk_h:mן?=\;c{_6”k`JpҶ]jݱuVD=bƖ)8e{e/덙%uh|~dܒ%u*'ޫr4Uv o['8!lQ o>]\cF 4,~hn%p|iZ}b{MpyXXfH,XĶ, :6|d^!'10:gTf-x ,yu^kpZ6Zqm>nыe4^k/li-z~|싽rlV/!i&|O,_:^5pB[t`AX}sTi뗕rζ^j"_@V'~ kvElmvt^׽Xhmi~bK:kZ/{4|6B9ʖsLJ7P }x{|[ tt WGW i'XKПsμ:Ab"uc9<&T۱xL,i<&{7h<&4cA1YF1T;4rLXxQ;xLO+foL0u"Fѱ;t9 ߡQ8<&>&~)A1zǀts{xL,;~&G47=6=cbk7<4,tҧxL=;cbҊCcb"F1wioll5;"XUA=)E$7557LL8hw%AؐMab>vջ\mfXh妘W50ck<ѳВ@-O:5W3( 6MKiQY=oВ!X>am1ty!Nhz">#2ܟ:sbsIn34^}^az&VHDú_ Wbk͇ ʭt_|RPnVf$T@Asyύt:7}mO -nfo^10z+}ia\EZ\3Ga< k{vk ,LkFkbCWZ L"6=l ed۳;=d{eAr#v/ "vmpuReڕ8jb'}ۙo]z>/Z'}\(Z'|iaPqu#eN/b'0,X6ɹ 5ӳHP[0;~ 2F5ȸ`n",QNq N&5d\P7Nqa-YX= 6~d*Hal"ufQ\&^Cdt& ְDz0{0(*L0AD২`CF1hr'S p75BZrA0 sSnv顼fLx.G.b'#"v‚oGqm.NFDIMD؊h<-X6LX6 /K,~=ȗ{|*=@"XIB\tWJf v gm^!'10::'_ 02mzD$8K |_2tK ! D hkp4-v6mY N})߷iܯ<4C|Le!bt Fm!1|MČqYB4{{=K-(D y O'9oP2L TKp"y 4Hf?֎&INză"4B~_*ԫGUC~H] D4{z Ҥ8Q((o wقFA,#E$/!10::I0V@&M{7=⨟-!1d^M!IKﭓ@kYvhMX!^tʥ(~B hbxbb(:0{1+6 bh1N)'j#Ad@,'#"h8F$'aeaA}@i+ Cn!\oѐ{@D'5(5 <`hR9K7qP#L\} .!00wMsETwR n4V=[z~;NvYN @ʹ%s8_VNI$>),BfMQNx^baC2m {Bf(nzg"1\N P3MPN`'hv /"̔S17qnXn#1IȾdxLe&(n'@~ic|tӄFDGMۉoF&mkymG)h#N⺟5ȥMę"w.5+d E5n"w 4 ; I\)q)EHtIdHhܬN pD1S#eRd&4"Y__mٴN 2a&5PN8b`vaˤB6qִN*՝+y\jH0i-.aeavbw| "fq6MY'R'nGqr%I@tz=oN4Οq˧1K->iI$uv"@)Ǟ4X@6V 亵]# 2۫VxُIV- Se`,, 򿌵- ͩlu݅|OxُewFQt>\Ir} Ϯ4=˲8.Ki~a\ 9Wll̥K/ӵLQgӈSe Eux2$mh4f'={r>^ '/T }e.=ub x߱j#V Z+V'emPD\ k#`c|-wߓxWϜ.z 2u $Xuߌ7ù,jMvu > aΩ|%@R:` Qc1[P**5bRgJ ZG^셷^b쵬8o]Il[ͲN11@]R [ ܼrM0{1V-dAjQxۢZb1[hksŮZt7zmMl |셞20gLϻhZrMC;y9BZȖv._eGk 4nUllI#"B7{|+'+S滰)踫 X$^ʿHoQ|^A]-#<J|i) )ӛoomӹΎ6F_rL oI kiW%kv6 1[T8..飁mwӰӲ0;x4Z[Y7/9}ݹ!K4qd w'YiC85WӐQƖ NJ+v{/*4(L(aDY(9hs=Z2f퉘3 - U2~U*߳=C;G}D}ϤM k&X x=T]A[ec91~m]X9:q5^BCVe]ɕ}^ WD_ acݽ}7JV(9\@N㧻Fj"{DVy&>o-gJɛB>kf@| $g˿Z=Տ1'V^GR3pYtui;AZSnGi K YW ٯy ίwN@;rvŗm[H_]ub[Gq2<"BTVP,G-DuNe\KCDMBTVG ^oAk'}¡C%οYCl9hΤ. kjmοYCNb`tbi שQ漷W)k~p ;6M(ȡF  ^8%0曢0V5XS\"9@G WF޹| ^& E,Nhϝ!>"ACݎ?s-Hh.-(н._[gk e6a7G'3V"WSRԞ&SKYKq8rTOƈHTS200SE;c>_,& In)!xJ M9|rtv^H>zZZ*:KA vJZ)قhTr[KYCNb`tbXkf ]|o_SҬ-[@6ڵHu^?ea1B!8;.r8'X@>Ϗt˪j$vN:` F;'pL|ٓV wutsqFZocA*r,~&N.dm'ke=eϣi_^o4i~Ek\x)kٻ" r P^>C蹵6Rf}7 - 6義U }PO,jTO,̚]bMe&t>YѮO,ژy}b[R'_XznƴN]75:>y*S[Z+X'_Xp~)T'9|}b"`#_׿'6/LY~``#_ljN>1+s(k _XE>U&)N_E$8}= NA_N5pB9}k'$!sM),ɼU Ҵ1 TaWI+മ}PMeM#ZЫ!~)Te4.M2 ݕ+S9a {- Y۱R>-;3WqYSMrJuL@8 ֐0;f[V!D1|92)s 8N7l/S8rP*.s&Z!D9a ^-C@b?'Bz\ O 腊z>sY@sGC>J!ZY@!)ENɇZImAn  "r㔸Nq/SFogl҆NcS(S@~LŖz%(L Fzh Àe@Q(LiHN =m[]U< 3S"hq*Nk0- ) X6/K,~Ӷǩqn+[yO-cii,^M>$6D2)->HN_z˚ y4"3?Xeqe4*38 0FqxL@k p+Ac8edH"R,aJrhoYP hR`V@rl :* ɜӠ,D SaS{c{\ZDPZT GmB(Q,x^baCs+ߎr H_XNr=i>j 06DXÔ6/а߲0q<=Btۂ,4OPN˂eq"R,b 5 Gb-S!)}|Su4ӧ,8&U1YH RMbfJќk4f'49fDDkwb/~-4ui)ez09(U9H"ҼSoaF^{YmIҗF$'SdDh"/9=tDR,VQM4e~DL0{zh"s1HL+dh}E^iS8OoGscSl AbS(S@^E·ze8Vu._X|/6qeBpZ,$ҏL,^g~~._Gk_fU]↝9HnBn.Mj~^8 XfZNj{w&q?Om5wvpm )ق6`ڃ8a ܖًP5I"!څގ[)[娫]mgL #˹z] G͸&6.X>3+$:/ƍd uCs>ܑ=\AbrFx4݅6^Wj{?_HG{!`IzisJڣ^2}7rzf7w\.]3αScZrIk`ݾOOWQ{.0D(-￰?U庖ߘY\a4x?>LKo³T:oϰOLw& 3MHb7z)_OONi;>J5Bbf?>1y~^=oX i|> q}`IOO,jy&{zlXjlk`UgTNv EOOy?NOLRA#OOʡ;(mvLWk:ʏ\^*" ϹLZxe!{<7妨Mi3k OfOP\gnFDě#aqx6#>9]ZGN'jWyאX]sWZCU{4,[?^Tc| '|F M!amLR1W1Iaԥ5ԋu174 niʤ9pQu '|`9;@P(E$c1P"zbSG>"dpNaiԽOx5LtVEr4-=O)7Ln;aZ)9,amԭ9G0a<ݞ&&[.f 3Zי |<sʵBiXʍl?X[_ף6~ϳYab^gib[ konM㊠H(V6t4GV ׌^PxX_ #*pblI "G|b1:-;$k(N$JQIr;˚ ^d3٘NpG|*4yeY9A)N$R r-.o{̄N!cWR:B:ߞx+ݷ­띬I95Gh`-(l$kTt#uYcݛN|LYphJM yi zO%dYHD*s:oe,$i)2NM^NXC>Y$edyQ_c?lJu9U ,_.70` {, cCy$O55VFx?JN11@&MTF'N!100*\'e9Jx$K9TRp 8!F$yECK^셫@c45Âz䲺^n\nٜ cbtT߆N$]ٜLkGVJ! dkFsxُ^G SI9UP+BdZ6DX W6*/k0`}Q$_ٜ|='T3j+LL,Iˉh%f?\65l\ 񐐩Ir9;#>Y(4ˆl*tӤ429g/\`% F&gș'.#gP+&+ɲLô4}@ljr <ί^Qap4TN@aea£q9)#I{59XE*gqh'O4DYQ" 8QSMTN9a Tً1]B׉#_D,y5)M39=I>+s̷h)zw'irx8Eo Qc8AH”'i)'!10Љzg™_I~geq⸳8u+8g)YYiV\p"g<~ y%iRY< c4U n9j8qiL+dniNr)ؓ)k^9Bu#,-4y˯B6`,l\F^M/01L%ȱe4^+u2~1NaMVmuk}v(`6Rn`k%f?FvdmWsΎ̞4T }'C_rH9@~cK gr7=U+}Zn*BbiiɻB`YMj#enxُN xYDEg'xfS\/:4Hr6WlsŎݺF KCNb`t[LO6IdMvq:DK.ȏY[Ze>e$D ui?`bUq[pXSϹ~"0yyـBUlI аӛݶNhfب7rT鞃dՋ̵f6QU~hjy>U+?~:M10u}|iwzuN\oZLJg"1%-mhUK~⻵ieZLj3 SaxVN\@D^q3l [DzZBX]#w.֏+ߧבmDHoy[c>˂坪S /, ūrxُڲ!@g0FT  g@m9^d _^bf|MEd^H9~;8~ ;N9~55ݕ*k 'F OTQim ˇO9/¹e|^Mضʬ8[ }d^0#E x}H6el|]ŒAzHߟ GAbVG9U6k>z{Xd"/멚j x>?.=4-! dUmS$VLYѷ4D"l نo\H7ea;x6RlxdQ{~+uTHJY笂4G#lC7M!|YNF:z6 - }{o}qh;]B7 zU5#z߫&\_* +6xd#PQ  rcAڐo5\W!3女X;!%3VJbGNTʊobkly$ s. ,h6$k Y[f?Feyզ˦T}T”[[ik*>M@{_[ĵߌ ,j^dFWYg&կH~LYdDb1Pb6p"KegZ F3:ǿ%5S֜e9,>-"T= qɛ(S 4 cirFA>VV+xz#u#fmauoW-0j!Ŷb`a,W1-!!oӳh 83sFXfL5rrmfխ,[uE#7ec\}`y#d-upc5|vbԾm %]}{[Ѭ]F- gz=U*$,6R&Gs|ZK,~ G4Wr%a:eF!Ju[@6Md-,l,[S^aeacm#wEwsͯ4uxܚ(md?ψzn)/K,~NK5YxT2O=Jٓ+e8l#%g-s5RPZ9|@^?7ex#g?ޥCR,Sֲ14" > XZ[{5֌ ﲟO̿W4 8̔%*I*֘l B>c2/d`m&[ )kܛ.Nx@< ܽh BҜ|ן?sծFNOdӡzXj E>{S20i_l&ĭ7]9D=S}72 dRַw E,Nx[:]Q=Ylk,v\?7Db-1мH~]>d}M0;1; Ul׶7'#g|:/+[H}YN섞0aB #\_0x#em/c-[mhuf^@B@/0Nr k _W!IDSP gZgl6B*H }.NGyo).ݷ7 ^[|`n Z鶀MAKd˅;nHY1. щo6F&̗܂B&?5z0_r [/01x$fzohpC[Zw`<>#jM"]pyۇbm5)ݒ_X@ \ 5>@:zs~dmS!z5!YXD1f^5џj^wK,~8k9Jr߂HA!H,~.9*ˮKH1| DƷg˿ԋYJxe]'NKSVt-CЙ~RJ+H|N8׸\E^I_Y)}= XsEz&$}֐0{1" d՟qrn1"VP@1>ߒW~")) YfIF9pFHw;-YqAm X|\tNral'%ہ60i OF,#S-<3ـ␁|W}QA(!fL]Oxp+I2nہ{M~>s6E:Oe?eE4,.hϭFCg#]~,9gD沁EpcRQRfn;15'a-X!dE kkmlx/ _<ԃЮ煶\ƢqYJYhr4d=ŏ$ /nr ^‹F(z'FIp r>W9H8q/*ij <lC+DO ާLhoYL%șxq,ݣ1H.\EC`BCavYX;gk#e 4 L 22/_Z}8eP"AuZ(9Z 祴 YX{gk#e 4dX;+Е)0oMp* kL]: -یF.戰yQj,s1V-XX<,VYoF1xُqidMGtd9"[@V3/aH3.b`76"L^E³GIQ,>ˏ/Gq2CyFM9O6pk ۽g>(+ 9cAǼ_8Xьٞe\̽b^^Oq<.^ɻRd>%lE֣-H&8F7|Ć2wk,^"ɠ[g??CI 'ZC5mAr6\B.=x'ְײ0z5Nסc;_]FnbK>nZqd|ᑴJ^ U[;뤏"r *rSj$7վ$RQ_NM+P/&71l&WzZ侱V\W侰6nF5ޭN{=-[k;a徰V#¢dm徰~{A+?^ڳaD6)T=W1?*y7 w= 1=x\\.]UϯR Oj"-j&oUk}\(ܪ*( fLUUmPުo Bl* UU3 יZQ\] LUTAX.BNmf!*8ELUT-n^*ܚV(`E$,xh5ˋ~薩vUQM*{*\HBٖ* $ dhE5ًQ"*uO qZquUU>v{7Bq\xo%U+-M*55޻JCwoUD%P D%h* ,i. `PuHUyUE&BU4 ^gwUY#>luxVe;XʂeWV4(@U\/K,~3vL=BTa[FNTQ ile4-tpq{^ba#[!K"T^eW8swgn2XxmTy@~%f-jzeb y 2`y7#` Q }tBD,SZS`!WS+4 S#h4 |"{)D癋, +Q~'!#B!ym@܂+4,Nhyu玁,;}cU?gvB@TT:m@CNb`tBq\ TF |Tm^з(Zm#U!kըtmTq@~WgV @FFH¶& sg( FTT8m@CNb`tBK.B]1&\NC&[@ FhJ+xُg{׌w!mAh wm\X@㡱Gh>J@t5I.  ]#C ӃYZa\ViG)\Za530-ppi{3'1 k1 'TdJ+,RX뼨AmdBaP  |^eqV0 R 'd ,j`ы*`D@ڨ xُkwdyH#Vo{ h+BcLGZ4--NJm#2Rx,N3aXGp8xwEӶywXY2~ъmkCjk߳+f$a VhNXe`"z#B  BE<*V{\pb ۋeg5,^d϶Mjd8l y4;@YMWL@ 0Y \FP kK,|#C߯8:/,8۵^8b|ny\Ƶ<ڏ+[.u|7۞' 0/NC ~#j$6 0mǩmwHј ;r<^.I7LV-(kwȾ q[tnvB+Fx?_q|-VkQs}Q2}7rzf7w\.]?ߟgǟ0[endstream endobj 365 0 obj 192426 endobj 370 0 obj <> stream x\Is\\sؗay~9<ĉ夼A&IJH#7YȡJt6^ll߇;|fW;t~8 ^>=ӃɎ_HfBLI:S b's C懊~852dlP#lwA"ཁs#bS.F!lTfғQ)L♗2h"odfH'oD,?@񵧧rܞǺՍ%d&cV"*Trgz:HjgO9Qb~C>2BBF<SkA0vȌ  rPp@밌hrl8,bn(睑J p)0 "ex@}VFuYـzm 4SCu:Uil3kUuo XNCP*DBZHdGzm4Ŭ9h°$LgOzlZ+_p3TMH ZG!F32XF@0~ P1v5-LfqzT`BmW:`@>+0֧1M;܏hX kH;UL,{;DԨoI) ˁPQ6Gщɠ@yG0)_>py@RJWE / ;c<ϖc4aZ$ ч4kɰFԸR r,2lGoug;Bcn]Vmoٽݭ tf{!} qAMjldTd6c t׋[i`8l8|G1Wоׂ rDFhiLx>2-d~:eWUhCFѭ =WkjlKA6S4*/̳ +e&*MGA.Ӿ qpy_ǹ8xS:HN<ΝlNthd<+p|h tG`/\ ۲;_O_wqy,n-(Z2|B=NJA꼣4,ss_F[48nA!g"$%+A=6>&3=~XKyA/%/> N(l[$K%^* y9m #5QBJW9`i/HϾV2QseqfЦFAQvRWj[^B()WCUڌmI(A" ;gPo3V5Əj3A鴽@|Z@H`+h$ϲ,gELlB*taMXȩ:G .{ݽh%jXbs}㦙jyqܬ6\.w6]Nd~g+­j] ]%~rߣjjP#R#GWAQciQ_mqXD1wBV)a\֕ w\tѸDMwf MUg͎^ev6JuQEݭ045"oQ[DÛ Bï~5~ZtOգX A>ͳ}W\sR$tM #xڤ|H(]{p5›Үt_WU#̕%Og7[vu"&*Bҥ=Nu5Ou -}[hDHM>p|.jlc&Xy/e6WY~QVp]`)ǐnV_[KsE[Ɵt!14գ[xmL8 iuY1>Y cT^^uX77 h/j3_da~ʰфa}?+Ɖ'7y0xC30#6VBcV/-^u0]w%ɏ;+O]ǫSSs"4?^nx+`G |"RF>k@X7PnPJ6!RDTYLRZ+5BI+6, : z77 'T([©yɶArd /kAph1赱~gD5ml,74e _Pᐝ$gz?*7RoPSЊ4f8@S~ѿ\WMdH5[ɕ7+ǿ[~Q4ܻmR_[f52e骴C-Ҡ}W7[ ڇe}D}dH])E׎"xɎH1T'ns[K1# _zG>/*~4_"V4}oƩ-'_E!c\iCyok }T ۲ _*6K_oL5M N]U..a}5/ol/J R=„_p+w/> stream xK&IrΦz}B3ZmAhAiA%nMbk'/B!gnnnnnoKO~w~~_|Z/oF^?-FtvoroOuݟ?ڿO%KI?Kb<( ?b"O ?{^o?}ޏ޾6LC'_~ײwWI\#APǟO~_;qq?E(PD'k/GCr!Z. .7v'}Zl~WcB|~?}V鶞뽍 wMumo 揅7}C6_s?[uNh[*Jˠ`,} c\_kʷwؿI\v_fj>Rگ=;/뇏$۪?)Og)}I~'?VX㷿An)s_ߤkՁO?om?:pU:gD/uμ?7a?+KG6QޙWc5׿j_}ZmX_yP>Y5fhkϒ_OyFy;ןӯ,~#91j,y~['ݿj<勦mŰ+/+m-O.~t4H2￘f/w5?Ťzk`k9M>Ǿ5a]_³G>0~A5:8|aQֽ}M{+ kͭ; 8rz_M׈+?i?b݅Ŀ@syo뵿/ۗ~hvah?~xe={گPOa?mzo̎x{n{߮_M_k35@BqϺ߭n2mXyYsl\?ז~$Goz; /E!Qm/a5U} 3~?oZ]6R s[2zGo z>ol#JHRaG4k{p>ޚ0[SW{"M-vxs?ҫ6 @0cZye{` <le/-1ǰmoGnt{^㫁b{6Ga- ͷ/A?P 8|rLO>Ĵݾ.ip9rS(gcGWw=y3nž}-$)8˘ g*wIOOr۾5NnmHwa]umV!;#:c$V˜FLbeTd6ts0d4Fs4܇gBB`D{}{aDSe7CZƷm)~}``|mqncJ'E)Win+8U?׼=ݹ|{mlrcwn_]vܖp`؝!;luk^_}R0we|K$ ? \)p1ZY6KȠ-σsWk:4ykgs,{pڗ"StM0= @쳊]t D n$&nLe_GU7> A{hOWF0F M d<8/7sڮ%1ݥI+iPo(@_McKCo`73^cqs{ a K-(&GڥV% X@] 2a V)2)LNF)"ÇALeR *EGYkR>BaVl!Jd Sͣl}av:%Y-63u ״شC9ش-OXeeMIL[Aa0RaGl`34ζ`cD?xmfkyikERlcPs8Gfo_g{zH""3IQ2>ѹMzaB?Ҳof)箄aU/rŲN 5ΠV#f:_:lM?(t`؊FE*! di2t2ak1CkEX8iUGCOMx d< 3ϗ01xV6_ { c ^d Y+,X)EEk녦xohӵqvzøpx\-.`fnDS͏e D<>R(5mu8q2nx:})8㜘}<\IyZqJM#1R&}U=͌uk7`?rf7``T aeR@+8bw>ksNc)|_{v@`9@LAstvDBc(۶am~yyirl븢h#!M$q 3݂i8>d$ qF?JVy4^ЕK3FI7"em{#]KkMѿW/-1ڛ}KPXnqQt/1 l _^cyKr0%G!b7$y2LC-~ 7>msK[w'8̗-Cn<C*%}s3sc2Dj>? kuBrs\ #,K-qj_eZ2)nL{ht`,qJߺz dRm3{:Ρ@88kKvLFQ04 A~f4.}AhpADȪ =FQdZAv|W`Ä|.j3WeE{*͛B4Iٜa]>mۖ UֆGc./0Uy!Pi.EXP 8|1m= }MC~!iho,wCk8jN06LC- I87ş­ߧ*]T;5E!unmT{KQ:H)y^KŴѯa _+_gC]{W]w79Qs  $v-p- -E:&Nygc쓦fW  F܅ߙ[zi(֤_ Jrt۔lrqݨ^=[1Et0 }LQsYЧ3@Օ/q/,a9jw¹ݰ)zp1Zi+]WOЍF2w ϡZUbB'k4aDjs*@dh< (9Δ}UP %qLb=[g Ҡ)*-ޚ,Ӡ ^.ҢP ̣)k܆G@b^w>.B7p8_aEZ L8Ʊ6ܷ al !ĒT*cE2E鹪Jխ[~F憭RA! =JP "A蜹V0XV2FBɴE|A.ta2"`e1 _9ؚ+{['{kQ\wa{D"pU^S]t*ϙ-vJ\ss1:O%꣜[$),8㐦x#f LpIZ:Of4 HHsh!9C7r.8%D8 ~,5 >,!_ b0q59by ޸߯ 0: yv?zp|$<9do h3npǎcZ, !=#! &XbB.Kn{{dC[2 30c$ ${,y2l#?CaqqNW:=,#Ih^QtZ8GÐF&vI. } fR=+I4Lm ̜bN P # Q7^258۹sm >1L|,yKB0c[k[хXl}8>`TW0(%8&*]@3]ƞCRvo> mɾE-o - Y|i1!ԃ1:&n]KSdƈ(eK-(t%j`P8Ϣ7Xuu5r]=S)ta;"|Ĥf؁_h; 7L! H"5U5RY 1ToQ۷Kt6vt7p drhz}>N0C)p31:s5Inw{,qv`?ƅ^0Xy]  @F̣N7wM?Tw i`xKsF5{^q\@M@Z 4yt#ʥI6eZ/VzG$o ^@I ^"-(6p|Eq"OڴopΫdcyQdIa -8F[uM3$6xbmc8U)VU 6Yq}تk)L8tܔѡoG bcW$ AS! >u%f/H|PXh?av5 _t@:z7Eu+x\a`xLŠ [fgߚ6|kЎ/63 {62H>_=&虯z,G"~1kw/{Eܓܳ`="@p1LJf&c]ql'nI*NeƙhĀL5l ys*T3XP*6kJŖRYP5+fKE ![=C! Ȓj=A W 8%޲\=]`<W!xr,̂eX$W"#HeKHyQޕ1:w+ OGn{ѿiPF >'&N栓! b0BK\z0F_3};+hnWWܿ9c雁"@pocJ>ld5,8RTNEF V$# Q(#jl/!6/\Kk(/vI77lW0x^!^ D^r(/T;M̌Ln#86b6$EeJ3B\L #%@L]6t`HM4:L LC#*fLߢۊUA"2Ts`hM3yEb? BkG!,qk}GVɔ8_labd'CaC yո.tT鯑!>b )iIm |#3#H yvI%s3IrCu1rc)?#nLO+'SF=^ .K)♃ 0m 碔#&)0CB]0=z[ICr| g$hg<vN@Bcn3Q93Zi(}D+q1*/LT0br/c",]dfd,p/0Jfхc,)(~n,O[8.P8} _@.؁*1Bv]6Xյr*k+HdSYc);HZ`Ʉ@Ek>d=#\\޶~Mk"v޾ZSW΁UXueD%@~fBK\[Gʱ0bH"Vz6A|Dg/6Gى–ٶX،D0'3Z 7/qHQVM kVτ)a/ʡ8ðn ] _GI +)Lp!~;ugiZ3PIM5X7]5LBIIEI !2R2b67k?333) [D?3cNL}gP %q趴ۃ许2yVM3b8Da'm mgI\ۣ [i7:bw>ʾU {(rÄ)p7`Lcv]}RBR<&8 + n72f@!30ǘFF، —D\BL.a 9i"8hY=ġ'z}JGR u0Q/w!> v-rkomw_61!7c0)a`@$HO_ A˯,L 0{ ) !) !)PG1捄'a}>y#nN7Ba7HR4EPTɎe&7>hmЩli`ީ$guR"Lꩂj[e"sʥ>#\)K vAU*K,P $Qܼ.0 rY}jɑsjfy9CA^<#SH@C3Xaf%aþx7R8anFEa$?4)e=ÉΟĢ>ӌ ^:EZ99r\y\Ah+ fLcL%c=r=|B`P1ށyCAQ1qR`m=1 0e5ehmQ8fᚂAz L `Mk1Ć*Vmo3"sI]Á30N(X顤BN(0b5p_(Ù#ܒ?D|p-DD?g h Hyst3?.e/~^#G|:E %"ݹ|s|Ćdp]aa0SΈ`E^=w+|}yܟ++Z8V?%O^ՇBR0C*[2& #Qw*+" EsvCm4IfED(R(-p^JDc_:7b/ep`NÀe.rG(R QLE  BCf`t"/ $> Az.wI_j%M/*Y8gclN:7@("ooğno,6ύ@qo0,y"abMY+s\!}!}S^n5Y+3k1J; e gDnIz9 bΒ1(Z)JVdDֆ jqM- @@uOCr"ڐL_+n|@fA/<}W|ZΫDs6V l-yrψֳ5"ޤ&%Q&%UMJij&EĻ&༰='IA (8"% aߣXe٫p{ ~ߙHhl@2}d 3R@aaǜf?k8jI9Q컰Twͩ),:BP fJ#R U&jG*:.hQ+3FBzgxR{9T8H .ƵāZz$y0d/c KgxEXEMvR4FQ| $]j$^ꠤ|0 >R]wGs!C5E%{(V6ܻ͠b!1KSXbq(#7w:q”'nqjBT4w,;epN'"cN.J (dgS ]Pp Gݬ t4S#qED:p5WfUE&T s˝6IUti~_[^Rފ0~Qհ F#nRWSRSr0l~QKl9EFQQat[jTVMjM[ # Ӵ?gn: QvZ(">|a`xq FakX!š$GC ! @F̣R@LZ]<@K NyJtQJL44 Uz%.T=p ͮ19s (ÛZs_}N>- <)vM ~of}Z|:SbZr|{lB|!Tj9S{ QAWBYA7B\Ȓ}. %PU9*IZе!LZZOR>ːPKs6+ 8qu}NF5)\]OR4@##y^H@ͳƘ!7/BlDZ+1;3"fāȐLJ<9#n2R8sU9٬  pceA472`E]9J1i%ֵag-i>}Shi0Ԓ6JpR4}d-iBB` NگR4z) Np0l^0.Pԋ;H y?= UŅسU#U%'=+8}_ N[ 2U2~# S|C*ixP*F~4 q .!#/ Kp g}vZטVlp?FsøSat|?%6LWԳo贽8@q `R4:!scN]Q/2 #ɲIJ0n8K+JpPi% e~OM]DY,x9[1P \'rax)fL>5P8hm|5gT,{p_k`qλa`A;({0R:4g\+o$]RJ775|5N+WjW`.7CH"y5ucl]ԉ-Hhˆ/pHˆ12L HR@!!lL_XZo 43P,{PABvtBIB!=}% S"wN݀k)S &0.pn # Q8H 7eb+`ThpD0DENE!`n(J*W=Dg(f`5z8 "5y"`C&-j|dB^ymRV:ڬjpV.N>J1@:XK0{f;0\ POk9Xw|#5<閑[ne$4{ >1]_5"1]~eO-` f G(8 7Bn)~j>b:\\F cϨri*5UIpF2 1+̕Z΢b0bތ{2clvV(يC|U{Aޓ' "ɓn lğ>K0#nfVwNn `WfPY)@J79bTR0x2{={Gק!d bts>0Oze8OK (8f{FS cCbkR+mJ `pt BU5]EXMW1XP :'TEjA>CH:i3R}^(Mjuw$[')d4X@|mwZ@Vp)0cr/ OtUK *K0~=( H ySBŒc&|bQ옊 _ R|N#їNzϔugZXl3Y7YgrpZ7yBlPź!)Gq{c_>2(^:q>j:z``8-Qe-Ecf "tOCx=I\y Eu`o 8j]a iҘ3/-JͲ#ca=20䦏R@pck3攰kc^A\WZqpߛa]!lUC]#B"akKAqeoJ~^^|d ߟ% 0 ~bmpyLn^f)\w ˅q8^=CBL#|ٝ`sY{;s <0`ܝ"0q0'+9#x8W瞑F^Cʌ] 5^qp|( -8t {ETZ}} V1bဖ.R F@jJ\LJ |v"\3) ;p3 JE~fB< lQ01Զ;ғԑE<\8{0L 22 IHF6BGQV6U_ݺ}ѵW`&<\ wuEPX{m HJԞ5)a+ <svVT HMŴ{(uA# hpSt/p^Z0 i ,),8LAQ(R2vGy5WGr#V#AWRD0RaN#)(fq)씣c`AN9qL)'05uj5޲GME#3?t~c0wHpfI(< `0F <}hsv%cYޔ;y]ə ])1KĄr' gWPX`0BǢs#T)t㴄T0ۛ;j}1 ۝*1hyKSY QNq̖{g5Fy\m6WW֝ ֦w(0ؙ`\!2 2Zn|ďte̔Y <ՃzdG\=ٵ# < .qPyF\=\Q\=k8㘍T6pk0`BJclL`m9 Ĩ=:HS"@0 #Ż1?T0{~l{0٦|#= ٰ$#݌ <'C88)f\i@'Og\2 Ch2 ] nF稓!K1|KΑ"۰eUmJUPlè((8%EGPXnq1e%y@%m 1҉/iVK%IU_" BNq7a$fbbow$wdܰ 1K03Ĩ!faoHL4)ne0M%&lK=Ж֨Q$5^/]Gm[6NuI> ۦ,,|E>gY~`؞ >%oi/o>o~w핵^#WTi{D~PZ12&g{JLꙡf*0J  1JʘJJP}x:y%xΟ?6ۿ56A>Y|'?]*~?m lrMӿM5`bh}¡80U*$P 3Q٫TLTJD)o\3ik{2W{.rZ]pWcȾԯ[7Tap&;/vbMmAlhR.D>Dœ"hO>lC1L{,R0||'[}gɂ6:C 2]>Cg[ug|SYƭ?+\t4?~κaSYd.Di{t᫧G޾{=)f{zXSӳͤ͸eɪ[}N9\H>v&C ʴ,#_> 3M -?”#檤|l1w~>xݯz6KJqµ|y*a\i|$k"ū9 r PTjd/2/TJ3fAl漈w<|Z^Ƒ|2%gf>)\>}|qMȯ.ޒQGI/QWY]z\$X.}Sy\̴\KRo<iʲB_u=! 7Ụy"g*5 Ȟ b㙕_!8R}x(PgzƶWcV-{ J}ٔG6ԯU.D_=)nѼ^^+`v7'<<+ SkaG7?ه}yk{̵'TWgMZHG/~/?//Oڞ,wg?ٿ=vSp޾Oߵ=u:wl3>L2h9wۙJqdPX̱X藧qpu٘Lq[]pB@pF1p3n3ʘjO鯧b Iv Y8甘2Q /Z(; }_֥[~I̶(%TdOK8 p{}Mk X}`^n'+!@n8o'=x=p-اy c9aF"췲‹a9$'&\`Sz9ea0"cxU6c5&kPJZi<fX)7I9AI;Y=, 1|Ev8SoR0we5ܾ"cww 8qk l8U0+XvX (X0s6&&&K.E9g#6,pHhf9hGKRaGwxÓ2 F殺jOue܆YF1gm4Ñ66DJ삜) i1q]VUöeYCO5Ja `XA  ]ʭjiʭjU .[0iaX]ZB@b0">:k|f`o({*n H* *Paer="<" +*^5}G4bmop/ECArJ&*Jx P |ƥ)o:9 c쎒J+47D\[2ȸ!͋7Ub*wUJ{ T@`\S9ú|geso gCC\_MD׭\G9HгIC2cni`)!fԑM)Dr+ZjjW')6ApHkZ-}ދӼ?_Ϻg)eP 2ҡ%}w͐ ˖ƪf,z:~OYUz=v\sfζ.ZÂ]2bh4sιg{g)0C+a0Bnx|2"}~UݮWs *X!3:ěf Bal2hzSg|8F*T=He!@H8LTDLĄ>=F~(oi/w"wZwc7  Fu!ԤF14#aN΄!-QH@ 30!ّ` 3{2@0G19#SE>ZsV>akNJ]Fg>JYX/^V #뎌!a^8g0Vcd0ta+e02`EG^^-c?2e8{ug0P^Tc9͕Y8E03y::.Kt5/^ps$Z (8b8 SFjktvz`mtKEjBaE l,Q6bb1C. LDkb"59DLlAlJRaGMOəQd)>j=@R'1R+eȼ͔@b0A)a8GyGO0|!H 7Ip\F*zbWȢ y!u*ea0"Vv0[%KD(o(]m%;ù`_|>{ &Bt48H - b`g$M#16Qל{M`=Q.VUF4Hm0ÊB@0GMzĝ#&'Fj 91o%01:Gz&2@a`lwueR0[E(=1L()N!p[vb? B<Y9(}$ݏfzYC E(Yb7Af)Dr r'R16t,fy~ /rzfOG!b7"aDeO<P{"\jw֭Tt8](8  b5(\]8BR4zE3I3i)sQ<9\480#"R@ԨbuO&91#N(šu[eC`<";9Y|O1}Z9ta:x89I ;)]N BR@84ul8mb<q1@O d< >Ӻa RA{.qBpT^ Ӹ! 6 8 ˶ADsYI!t,Eb"(ZYsRsgd MLMe4 a0"8e2E[Pu6xb9#7+|gDU1r9J!Da(U#{yCJ7W={{:6H(Nv0 f3sκg)LaaK7֛Z=Ԣ;SmyxnlZ<498b=d`W4F+A-݇_"y9ح`vViZ)tJ˷\6L4]#)(t哘H3øzcڝGGa/<;L< 2dI@D8̃P>OFԳ[->=3>յOO֟ [# +P Ii?9+i]['6_Փ>pQ:ӅOȀ%*m$mViqIC.#P^4É8PK6"ޥ-OmE ao14N棈D1,`>d:jX:" yF3ixD(O 21[ìJĆ6R>0Ւȼ](1[ʠ%!8n-bKv\^kK_Kk5v\(`0VHaG>bWNB@pG#{z;ךZs8ϭ`-,/Q pU飸T5=gJK<  /`qC >p0،A28 9}ؐ <̞pWQ9]So\ß>emOP܊ppt1Z޲v{[HE>?bROfM=b6ކ9]>P %qW^y\BLΕ;mSuިjwy+/ - &.guHLKNo"rzw7 {l"rzwA`o.1GjS: KTI)^ByҏhS/q||`` KEqV^ӣzһ e(WI= <<t8 A#ZO#܋ cq"wh½` k9]_qph( ! (B19oǙ Čt'-űgx; X@6(W&tf0? ;!b9p`P@X3D0S0aZt(8R ZR@a[z4c]-ƌPzFfqB܀\]NjnUuP\%)$9#X+ctDZ>S+HR~{#K'1F0-V) ܥ #w-(W2j$:!8nQb^tki4xM81'eQNʒH- ;% `qOY5T Uȩ0=( U91Q :D )yaB{Q O&`PO^Ws|4yĶPZOIbF0|4PX6UlbNR8y^&?S9lbN栓R@pǡgL6aRELR*}$lts&% I6&"@$܅MX(,v0GoV@_ 5!ywZ3O{[M!2c_PP}ΰ&-apn"#o" ieG.]cdUtso#Zx#B:)":-i5FVZ8ȂKXx-CBG/׈5"* >FNZ0lAؔ izayzaH#Ow;ơ'и##:=p`J@  ֑qvo );C*)R3{Z 5頁2AB,G3rSNO?}'|Ì䰌#O -8t8 +m{/Zew8(0K ƖZqEy C QXJq0ɭF 2,Y%+1c y̘ m(bOxY'+1 K,esi( &5(v!,%\ ᕛn08lO\R~.ji>B6.׭`;">eӓZȁU|go\9N ߸"9* rΥXji}4(\J5X%GL01>P %q S5D Hʥ5+S5A8&UN%ZJ"^j✙b&W4S%| ||=ϥɣe ˽<>ӯ85ܺha)qŮjnsNߞD}-^U%e#.2QR0C5`8OX筶6DY[)֨ey"3&~t  Qn呲/!gu_9:{´C( `RI87 ~qLWg1$ڵB|_(<#eMn=_ѪH32F 9lr1>]]cڐ~rۧyd/`."a)ky8MMg:k N'v0sҨZׇO8̃]C49]CY֬(#Ⱥf]t q.A5]5AȇG XC5>Z+fyQst5GUJP "AL|\5^cKmTpx@C›d2.JuE5B)kCI\TY(^̉k_53qN\#N\.%!2:oMbOB)j ǿ eug-_#㝛5"`@D=d"@0 b2Lyŝ>ygy8=!= D<7m d46x`+{ґ5&Ąd t6!Z (Z A-9Qk|`o5)]2~t1q p 5}dk 2`䑝2iZ_ҙIC|8[p.4!~Cɤ!k#$4ΗVO;*e94V;s0a s^2ùL}\CSHHLF5ژ5t3eu E{20Hص1MÀjpص0bAl^ࠫk嶳Q @`fLL<k.2%BR<9my!JDq`6HA+ Î2FaZ0 .2 !@H1GcweL LjKqX`1p،Yj.&\<p˓S^w:kzb[dदΣRjQ @@CPe [Hmbzy;{CWNci X2=Z8G30;_)}SJRaG3O'clwp(lN0CoLSxf3z[σJ/_>='04`@N2"dĔB$]bG,1kܔ(Ç=bbX#"ri"=be㓊wBIf/*J$Bp9b 򜢂Br!̣GmILopxSgopnIzL3t F1EN9;)=AAPhn0.М:D0Egson%Bq3buIoP^788zHS$p~C 滢 E2 RN/ !!lGt [qyyk\^J Ya`^Iw@^^/N1[&c8X~E/pGp]m XUwMs-UV?%'G `p^W?B 5 Q螈V Za(HTKzcP(y00h +IArM4P& d< EZܼƃ =\{H爐@ӑTT ,t% @DPÊrX 4P@/"( 2v(QHjwaY($OCRL`|b)@Jq0]1my߀#&R1,V95p.C8.2riyG1z!EJUDǔ&I]Fp ,њj z!,TTm4xQ"6DEDm΢.x]y1)e2yF< |kqUeLѾL L*x:yB) dSb1f 'l9#yNt,m_wl5E D03yWݮ> T3CϑRG&(;rE poA4'2XLaš =]}!?J7 5 }1W(1n"N~=dvDBGy r00DOP G iUְngc a2(z8d(UCjNakA&&>u JݔGUpkhHT?rh@@C^P՘f 'l+3iÔ ۚV1@NQN5ajGp siŌ rwoZ3v0Ӷ[[^EvË1 AX š$GҵPHHL_ZZݹ;E_UgE/!]Qy犪RDt<&uYc 1Xg6%?:%?{a`juPk$BFHDkAu|BR:cPJGjUB1+~S]C9XЎsdBϢdA)cc1k#ZS1d]BY`0K}])@J8U0(<4[ȡm1U% lMk5uxI"s]ީU]d@Uz/9G\U 8 Ь |ۺ;A`Ӡ]SW1vj)9v\s p$!>$!`ŏq+Li`uD2T-&1H`JX>R!`nWpTDZ3R*`W[mj8֎*p."[B< -zP?SG:X' K7BJHIwV-uSZ5 yO%&^UToTăq5RF}')yǔ}g,n%d^Dɒ('838]2{A9+xp8e(^TȨUR9Ҽ)'ちJ9GZ%%hBER9]bJBCEcBZ00脆`HGE&4D((&CՖ{Ы\i eZ .PS]1^=Ns4s(N>?ė;ct? tnp]C W?D0~P>-cƷAC>Y, EŻK!@ P?U>Y}5^xi$I{#agtM'=֤8]<85=#12G3B4x 5鉦Q{#1pe_^/^&&X](Xp8:鱅QJ`u4bHExJ|0$~_EQs6S])} Lp >}d|)0c xT8T\32D>g< P:`8Z0p \>2) |wjgXk; sݎtA[Po:BM0tBIDk? !Hi{Fy]i5oC}ɹ"YrPF^4Lp1iP3F0-DXҠZXa 08`/4In9(dyM(VH>2ҺM([ڰ#( !#%Pir/KB/ApCGĶp/{,-5Z \j!ST"@00}cd9=on,}8p>>Β¸dB,.Y> bvl6V;=k[f;NCc55huޚ-)(*޹ C¾QͱwԍТKne Fpppn]$&tw^.Xq~F<]xU ÐU_T};ptG (,7u,qe-202WC& E5Ŝ)di: iX"4ٙ<5_isP7-ީ ]?8 U ڪT~ y١z 9eɭ;S᫁ h @h`x`nY}\2\EݣB>0sgF0!+3;$g6]rb!yBQq%9-"!jSКcyO<]> $c'B[,rc(= όYu/ z=L_;$z++W "C Ӣ|wg=)'򢳔>gL25RxgA^4(Ѳ7erOU+l208C#șFC.5D沉91,u\LkZ _ٚrlnW[35+j;inL @)|u= `'? Ztve7x4Q n~!eX @!CA*:U^j﫥vrSBWҸR{](iQID`A9OC$re HOpDk6EBӢ8- Z,v<(eLj;m0S0ل4qXr̦sjyQ f#nlm8Ǿ֘%AknC<ύ<,B,f "^:@f|(^&UmXJaQV?\f%,B[`hW8:Vxr[u\\#8` ,RɁ>լQҀagTwݢf2ˣB,Q2hpruuTqQjEL0ӤOW4*K+iy%юx 55"jŃh\4 AvȺO+>kno[]c7٭р5|noY#p 59dSPpBEyB* 2Mx@ Cpy C A`An]gv>O}9{}P& l<#4#OĈ>0$q5!BUaq4 @@ٰԬPǑHr&[,;d]ݧв4 ʵ5R*S$Rɵp:IC "3h҅acv~$d.7 o=!<!OH#,ja,c,sbY(Qc#]f874BpYgG6#% @U[V,wd2rBА[HQ`AxPlƋƵB@'(LʭHRMn,>{2+ Ęĥ 1ݳw8EZݴ"mgrAY*&5@y*9^Q,^=yؚ$y e_3ge BFԬ.JdςF%kgfMr)ZC@*_(.`NAvűr+ 'k/0=Џ8^sR,qJMRlѼ$ &B'1&<[8j~fG{㷿ȳ/֏~||#t3A1y/}6J؜5BSg94+kj_YòZMABS,V+e75Ū8J!>?}|!??x?w¯|AcP5ǯ?_?:V˖.a{(Szv^\{~s?}sZ4;b(; 9L 8!,Z,zWRx AJbzuqu90iFr ! NIAQW}:Wym!i;2AoyuA`@8n=n}[͗X o8f_~nY ܍Q#M<,lٖg"k ?9 [7V^NmЅkecmn{@Mj0m;Y6]BOmإ5ʅZm,x!enGkӌDQC4~k 1^R4xcr͞2d`Gp͢p+z9pz \A΢ ~0|( 0a!0=X <`| m:≥:HO%x ~w}#W4@ W0XA)nhnG:3ϊN %9X ĴfbQHB_wwX#$CQ~ҴwuиllodFG8Ā1rgZMxkvDB;#M\ M(C-LFR;#qy '98G}}a y ӌ+6ʛ+O LZWM֨i&홞w^7=7ύ5v'ldN,2iY'K)jDU-E̹ɹFVTG'&CRAi gy$ZQbݍOQ"9K n1Jw;(ћxp=Co# ntv!rAXE|Co&r ҾtͶ0g,ځeFCm96#նcqg!6K*Z εX$&4u޺=$4pɔT&љ>HdpfBx:0XvB4t  qgD-&''&<7O Q]nȹô4#prgQ-5?fBz "|w< ],L'+1F%}k.CLZI(1?+;dރ,YM.G*%8~`H`E>ͣtz-Sh nJpvKSw5qG{ܾn Vwu*f*mdAx7>=x Wgcl = h`r`T(Ga G-m)FRVKvܰ[ZȂx@{2y/DRN"i(&3Qhn(B'k!D\V!H.ePECC`p!(8!{~)מ"Ґ<}^GMU-&X3Ij "WiC8OJ 4#m%_a+|&N%GBs9[bpKߏwBTe\z׵}nuK4,ew]Ĉ> -y׹5&S1]\S b9ҐL`ȿrRhIn͵Z{vltkon?&H' }{S&:ިq⨳RiKPk&Xt44 q"[TxZGhr^Ϩ]s^O,ދ估F`F Q8/-}8/ۤjF%̪%:Zb.uya^iq:/)|_3@,ps2yr r/[ pHq ы@dtWx_ր W,m _NZ}iRqSKWPqwݝNYraJF9̔! S09b;S-^jXc>i$t5 ޓ@)1,!&%V Sd\)Xix$+H0bbFUA aZb.Yx^{YBfni.ͱ& K1!ڃ= bAEg58+MP[l 2MNg('5D  > 6qpi xVF[ckiY;Cc:9qS_9p_m  BCf2OVPKF]빗Ө]wO~Bh}rX(Bfoٟ!x5{˝> nf[2CVPChP drmO2;Ea M 8$G^LZDe'rDR-mnEa#a6y+b,w;mBB/h;"D/Хd{8;Furi9{/!wEm:6S3R,cRY 2{;qnA*YOb ,cf5!ߝg!zSL;T[zY,^ Xm{dji9]YprV]+JwhmKsm4ClMDo cfA޷#FRn!BҀ #VhC<L>g!+2OX\pr 1@QFBﶈ}|}_%>)5Y>m[۰L|qRk2Ff> CG?Oj\40<̷:.ܸ:Ӷq 1qQ'q}*/ -} UiФ tyUhЄZ;x/xЄ2Z t@sAf˦ *JsMeՔ8"5QB(6r*˦l;S!B|mUvRSk+o l= њ$:Z!y$uuAe Ҹ`?eiµbdJJK /D6 jYpndajthקTDc{xHshr9AO\!@AAL +;; !bH9hXɁV~ !} } kX#h-x2ؤcry1rAX8:CP -WkzGՁ}8*{8(.`4rW5@*[(>{3*paoq".;5dk)kSVOvϥ=SAW^;:oBL/ 4&&wߍM![Dދ3Fz1hl^;5 NZdMЙ3FD>Adֈ*½[D%.&p&rMX3"@Td ,z|Y3 jۉP}p]*~oBWWSx///o -|Jb]vh8G|ł'G,m:? y$1$(pVOiDR+#M{A_ 3[+>qp4a5O\ ¢MB0a8br_8' ^,w[L4l11rIX%@IGX8pgaûʗ[] Cr,ov4XȫBBo ~ kU RZ]uX3(CN20~FtJڣh39G$COZf#g44@ ![(,(D7ahIYcmb,4k ś;&A6k hgp`N5p~*CDgY+k iX)f+Xּ+`]ZCxA 5F0Dܺbd4=B#}>3v 1kQ˩4fE&,̳y1~o x}}TWP$~P؁es\0X3Fr\+ } ?10i _hd_ `O¤!rߏF(L \! 5ܻ<_gus׸u|VI.C[ig72!h^ҩZtl1B.C[(HI뚧FښY5}x+oϲ~>Y,Ƈ][C4(f];,}=(}ࠣkqMpl>Ƃq9lpM2DQ-N c ԝZzm[-1ة s+NKs+FX YCV'7":gv#Б|4Ng;9{|_2F?eX%< & i<|Gd \@ܐqY7XPcA dqƈ,oSȍOD lEk<!;*Xriv4VX8ny7[ yruXyy @Jh@bPգ^ͥMм$_A P~A/gX6g8(m PFYto?N abx9@k8>.h< ,淞*gJ{hN9w*hh'#dL2MB&(D+ԬqR"#bbD8B\Ҋ"T m ̷QAu8}JP)GrgсN$$S $ouf'rQf"7! >͢UN+S6ɥ.z‚yP60@V?-"<;hzn(PnZ] UkzC7r`~ClE`~Ch~6~V%>QA UaHtNR> (DrtXCA UzFO~|T.) xH *~['4x3Ā!>ZVB z|EAPѐ= EDr= PM!Pf* ECLAѸ-b1:nrZ3\Ny(d)!`ᠷ3hļ>{^_x4YF"0`iOS[p>*ܿcXCg޹T^_i+GhV˃eF xoCWwBm,%KQPZ-*EdlNwxPܲ+PW!+ ! 1C}u{K'8"}ˑCín-F{|w=?v[vX M{<'BZr+{\4Oڏ2B?-}_%)eI&2 2=3;>X<+ ÃerDdp"sa >Z[Q!*P}Hzrk1JԸ1 r:$>FqX<|Q"͘9Ck<7{~ՔTLUf9@ek< 5DV.fG-sE~!WQ(h4G%w?0tw ['ҵglMd'l}&i#r6mGyB)}ʩE}UIX3Xο{3}Kw*5å94Y zgy!n"3@+-<q^+d (#A~$hU 5<B$FHvBA}\ju d.'h n^K?`A8S(L\GRΕmdZ`"0NiȊNQH Q4\ _v.q@ gs7,y^}[$2eM'"1J|!k5BAM? 4zwsnɅʁ5DW.6 ڣ95T߳UYQ/фvv[\"7ZY3Ԍ;h{1BW( } ;7hܖ@$p4 hA#HWߵp-G}2!R!Uh'A9/h֠ 5,(5(XT$f T|J"t *zɄD6ȋE6ȓ\I3!OcyNoս 1ϾlRg!sƛ1KkeA&Ȳ8GrXCeKZe%`L$kb5`]B`y 4%@ւ12AX%L[cq9}d2=z黫NÛjғM{_ @. dQS%z>T|K.Ou4<偧Sx4O6 nu 9_:18-,wxqcpFaR)H9q U ΠҀS*[ )Ci` AÔB)}&3z+ZViJ]l=Zcϳ5RE倭Cf H9[xwq2\K`VhnZ{/u vCK z5OiFݎ`ًx4FC_[h\)Js1y4Rp+Y{쓅sI{@ 4"$j2nBD To$s/|>aY wIy^E%+͟I.xhUvI(OQSW'ڜyQ 9F5H66P;$r!BC##`,:pQ~qA@/( X4 0-@/˂gёX3A@|~Uu?,AYF@~Xǃai+p[Nň>KYh)dn6nXld)X6Rh Ʉ4ACD轖0귾T^dPg%JWtd7}%b^DyE壘"U6n |4,_dq~sF_ Y(sojD5\jPaFc*s5jtBv:%9kԬQ1SFfר,ks =d%\-[ƗO!=GÕY9LJ\\ҡX88y~ė3kt> d:@|Av }O~:qF( ZCiY3PÙR ސ-^U/KtPԟ.?5/Mbgq:yFt,cx AQ:B%Adƒ'jr@ro1DŽ/z*[ yqfFop\maVpЦ5L`,mz(8 W9VC H9cșIC\㧳ՙsQWfvcIlVB, jOKsZDi)Bզ5Ǯvy;|HO߷t=X"=<BCO9p Qz()H92P;_,_Odu{bY9-^wHW2Wfu\D6 4ESY~yz>#RNEg)}5PejVihFQϣeo.ɟV%d`0pF3\4Ukes6cY[{븘֔ 'HAN>58y8LgJkWvݘ`A8SDÏ{AN0^34ʼohC7(.{0C#2V UZ_YC+uvWKZ}q﫥1J+EQϣӢ8h 8rPTI93l::-Eq&Z Y|yP&v`65.`6  ifCMvF)Fܠ-q֟!29@X}mYˣ5NϨ FEGdGX"/e (-:{4' R5&4+$eaIylVkTofpX(HI|EdckhDd>7%Af>%3acͧ%9@tI`>%@5PTR栵KE0Rx<1 d(Hay=vlTj @1RG-}=O4hyUWIJ 8@6kjDԊѸ2i^uuW|&/`i( pF7Jƀo둳[tk 5 pF4kls(84%$"&v|Y;sVc< LH*oPy4F˃ i4F) }aH⮭j CviځaשYEɡ#'$nёLhYwȺOe{ i(?k jPba U6I\_'1ICku22Df Iu]n2&)zx g. 9>! }Bfy1Bv4 FYrYǨY(.MŀP>N/G< vqni 8Wg!r@m.GJr )@yl W:(1K5*bg?,q^ٵ*iEt*(,FULxʉ1\E2Ȩﳨt!5dN֑'+ϓWq}kUrXz<5 I*f^8@Y ]0p;eTK q͚RfU Q]4>46 cVN(_4@ۙaz>;qK椮Y(㔕D盤(٢yI M!ObLomGt>E>(7k{7J?~߿mgoߟ~_}xsy÷5L>g{2Gן/?ۏ~}_/?_://3'_~_5֏dƩ>6k~fW&&;tOO4?o9OK{{ƦoIwp&A796,e J?ŏVX,!x xL<3 ,$$JF843ӷr 8G5ɇi1Ńd1=< xY0qqc~g#y6ˉqSczD(6HNraDRinj7=ypqF! G)1t85PE{xAlf,z>ӁԜXE]rϾ>%{#x2̈́[8hh#!T(0ڏL}/b`Sղ=3CLt }]BFu [z^cu7:pc"@oG+^xܟALfYUu8B2+m=3 ň:ъXyS% vǀ]?,khxv% #xX#u_[kĊay,kej#~8Ph˵^p8,}sV-b~fg19h-MU3Hk[y a G-}-ߑIDL9(r"[a e32Y*kdͣoF!Z*ycŔXF^N9aew͖-Uz<)ם>(/&8{p{9k̪XfLzL_@z12C JU  qLUjjf٪  B}:l\4 <Øc%uAcXurhKrA C\xM?ϩ3zGg=t `|#dȠF?9Xu:cQA'Vh}ATA!d+(p#Ljd&Ly!a1PgIh<+cm)^s3x@Δ5JXcdʃ(p$MҒ=]:xwt2$%%I} =>or /9(4|Q\Myp,_u 9Bɝ``N "$)pCz\֣aUVuO Ls!K5T5ϱ\AYE0nsH|SF`|4> nTiXoZ\H  Stf4He5 N1;[Rd!@48y|x LWzZA+&kbВa~VG.F,/Xp!dX1B. BCD;s=Jjj6Q|$g 2"j&9(D>/zQۂܫ盿2` 2q;@r -z4@Y *\/9|io]amXfkA/dsIt-Fq3#WF_"/UAAE|g/;hkeFZ@vYXNp4 2"S4zM|Fw)OMTb拢ܣImpF;S;@4h+=~@vȺO!.iDF]@m8r]Le6xG #( J潝[ q.,ly1 VeY4r,5 cOc,O"C|C'9;CiPxUs3>gR̢ 9,VU9PIhf.H3@ S* Q4$D9̄(-ȌjN : !Oao )%V;ߤ|9RēG 3yyj/ G-} eԈUX._`%kh/{@&U*_`% ϣ-%(3 Wi"Js9D(0"ן.Ǎ8W^ZလrWWـcK_&vH1ZI>{R ngwiz2J!sO ɥ ^Q-5$Dsc15c5h qιF n I-@D~2@"  ,hyX\ &&5 C@t ;!ryDb ڈJN=Ql1`2R#[UX%i\m#+XYKM kX2Q@NK߈W;.X|i^7"n#.6c5㿠P>/ƞ #B~NCƩwp w}iY>{fmz@y5: y(硄T4((4,%zH:!FYE&4bXȹF y*Icu㖇>}oѮ;)}{^^'5SQ_Ղ-Wjb.D'^_ABԨZ7)hqe28͆ޥ 6Ųyz@.%5G^=.!`ᠷ3rh]쫘nZkmp"Ā1"_e:UoݴZZQ_o<Wϼ:Lᾼ-=t Ydy:l1urYÆD1FBNg KAήp^4y.:Q9]NNNFx\<uyDzKOjǎ=}xd m:ECу'ǠKOF㖇>JѰEB֟qͣR[׬\ϣaAyb $ڒ+]B@B8X/B {@ÑEK-Y /{pfQQ155g`c#ۃe-ȘccAOnj >CG+WM5ڄ=wʖc)sS6|w:-g/6QxpJWc6( Jٻ%'W50k a616 SD@6G DղhshDS28>+c<6F1}.m3+8j9賈:Es5;z}竦}%/म(i_E㖇OQ@މYzE)r%GǓ }}@7bV,yfٿa :<lseķƄ\XLCD?W y)$\u$`a84T?Jˑ8>}8t ;+DDžrmXF7_X/4 pEX"$zuimRs|&+7MkCe'7*4+imИFDZLkOՠi-Wh+Wbel^a "iir U>:;duGDWȥ*цZ\qcraY#.+okbTbY@Y;Vj&K.[jrEbYڀu}VB(LmϟvMBQimTfnm#m6p(cVލB-j?zޖ4YL~ 2[6p#NtX$z!Y۷[o<\,SՄZURK)z*~`nN:;#cAdx4DCY$Gc3SµJ-,^d' SH 2F&  -}Bnf\R_Iz~VWbȶll4[#  ~Db 4`lC8$ `֟مlC4d!\`u|D{ |e?~Y㇕<w`y?f4| ^4Fh Cͣ%pdfHqnYp};%٣ed8\-ʪ}ʮ߅َ CB;77ceA/Zz3m+uDI>}9%#!1ACM3)(߂c.Xh Z,rQ(c$1#,oS^=(  \[}ړ[YNr 9k,C$́ ܼCAGBаP { {.{$#. {(=ֻ BC8w4|W܊hF=f3–k6esXJcRf(Kmn=F?9 }cy hNRU9žU,6kG#\\ -‹6-pZv0HN)G)a@ #b1BK- ]L[&:@aЖn0Sw `8 :(} jX,zĤ'Fҿ11sP~cCs,id?6VܖzkȵG]S*<+zBkvzHS6T''jظg5l^{^)Pˑ^F[uRf|Y>Mj"b2F8sc ؃e27Dh%fqh,R,*j#¦& 6AWpEZ2,ӳh6qzC|1 dQO.lWטl4~a:c<+ҳ_J|Y7X8H\q"#|56F X(D&T_A I6@p9(mΎPF(D:7O!p t-G o)1аmnVDPGhٯ3AG=r>a0K@,Öٲyth),!X*X#CXY}5kg*"j&ҸvAA` g}7((U-|M>D‡Z^!"'4C!j‡P8h3FYc1șJEQ9BCZC{p ĖH -| byAAPŐ= ȣ "; 4Ϣo<&L^J!Qm@ǻƚTrk m }|A=v(x) {Osf`8 (`ky;0.`wX(B`mߢIRVqr|d Y}^)EFE|U䤬Fx'F0e%6N֨JEclhNwXPܲKPQ*!K E Em!B𹏔m=q] AzE--|,)Zc5X4WW 55R Qqw5bWpNh7t*!+k Dϥhj3nUu]JٲB#2m*8M0D#i ԻSdV,^OIbM`p`& "a> ef@4nI pYk {QjpHeF@+@fDv-}y] \Bn3(y׺P ;1xh E4,peGB!`Ai!Ul֐$;gV RͲ?Adٌ"YB*N^1QA( s-xA76ܚk 8.^P4J3IyffX%)qF1]+5i7:9ѻE5\y9]X%7]rWi8V#wbȢ蚝6)++sJұ9M\EO+Mt97)ָ^8d<6',}˱8QBd_m1b!FL'A AIpY,,6gvǂ/dWvp_Qϗ5|3M?_,u=?@ |9$\hxy AvȺOA{5H HV9s "s "^q:y׺"4D " K#}rxΞ`6t*8η2ֈl1}( Jov7cbT~O9x>w{Q`@@+X[5\^%:ߝNHdq=XfYU9X3D  CEc-d@$zAC[ȖS6{ g=iJƃ;haOQ`Aknhd09<*K!*^.BpL .Cӳ7sEҽA7[Hb@ e-^0#jZ9P>@Erij3F-׋(iߜyQ W-g}W{hJ#YI,jkc$&adžǷ CG&N5Q+0uk' fa``0 f004m cY6-/4 «vYB$,;){zy ?]"H˪93Br-gϧfﱖ ~d+܋&09uyD(.lhf1l4Fj6Z'-:+@+ڬPE7bͭ]ϲp'lvRҿ(OEeٿ(R0WJdbE_,)wx ܦ_m4eJM,mfEwe60Fu *HINXVn枱Qb_}E.x|w~Ji1_r 1!,<B{xne-c< 6Ȣ^kj^(iĉR8Q]] PzBF|gЪBךX ]d UmB%]8h4,Sq2!rKX#,ZFSk͈xIshJ[rIBYO{@1J^|^ەyuEmAxhr`N@s=@( CAQ؂(J̚ÕW4wj[!.ߙ4r4@)K\Km3ݿF:ao9)L'NL`ȩ8YU,()k'04FIq(kNB[ʸKr[Jiμ^om| (W<9ƘWHs޳Uy~  > AU:?N :?W]|R .19[a";Ĉ>^k4ә࠼ ` WpSB##QDCOƣp, 804IG kIm.G6= < Cr}BQ̢|]a/ Ö#.(95g@"nY93jXÃe qၸ#gFX(HIļ٪QPe} "HH{l)fxϾ\ˁK5Bs Dnrx^AaGۤ:w+(ɝ{Ѯʼ'5>8:϶psF<:usW< /B0-B+B(tn yND>IR4)hr݋7L~.)eXײ8Qj ׾!ALij"9_//AgyL鬺"[`c&!9R1Ϣp)I{$ɒK0X8M#ȹDl#7Dqč=y[u֨+j|Z[ʿfg2-9%h^ޒ Dͣd:Q %9"YȡU9ֲ)x@v:15 4&Qq:$*Z6/__oxG!87u6M Mݯ&an!$pQq~WrDŜ q;YAǕ[ 遠JJș@5:X3D.  >,Th\I8 J,*YH%R& ^Hҽ먔Sh,`J%)j&`.J Q=!0 FY|]Nr35tb Nme/7尀q͚,y09,BIJoOY#hsҐGGd6|j X XWOY6*54r<T -}-koX"|u\N'e,iw(cICֈ !u ;!}_Y;@ vdHkrdHɥ$Povv`a $a%!, aP+&V,'>%jyh 먌-?ƕmwTfElkR&PЫ9Yal><&(m´0 -L/aF { dL# f簐BQ8 ",}cf_h2w^(߬'㷿Em׿[??˿?1?QoƧo?(ŶAp 8Rx>#;-lI*H9g1J9g 3IiPa*yJ2wmm.,ce<[}&~_fpSg=j3lD뛴,LGMm8ϵк? b,Σwo=FıMg]mnGE]tC̺iy?w>|=[og߾5,y|{%Q9:7_= \ZԴh4>RX9<ה6q+Ρ >,MI=:]Eܾ`LMd:$m|DEAن ͅ*fN#9u]B+8ޡ)P}Y94Fz7O+DII`ÀӞ(_7 Q(n`F!t,82N&00\l+SpdjUa;HAן(HUd讠d}E1FrxMoa=R#,2X %wƈF MHiQp(a`0jU+FVbѶ&tࢀM-ɕ#'gG F'`n`FadXm&Om{ @Kcо'`#mIਢq".PNApeisJ\&m]^]>S ՋPC^qAտ"0T4[ pprqӮ߀θV/<-cI`)0@zvr\!uu-fNZRE$qﴧ 0 >sg ՌKfiԓK }ЖB%_j߈K9JJE3%lopNVNkGõJNM-JSWގd%~cU@ۭѢ AbBJcSmVZ/-wO@F@[ Y#j/zmv7:]^ϘjcOn;&jtx -hGVP2AhfXQAQT˽ft:j9^;/^yq]Zn`FsEßjX_6C!!ymA 蟐F`%[EF: M={F @GFwB}28mGvpMAnO鄋 ,,:4h!/aaav}'9ETx@o0 ݒ#*?v7,fH!=bb$pE0T|DÀD[ϰ:pPa ҈^@^Œc&wHQYO͓u:A;$ gXR$N(aaFadw&C*.gȤU߳4J2]AJM_wjpN=AeӢ.P] Au8ZeNTFgX.XmI$\ǦsXͥ4N(BqMKϥG/,JLutjJT\ SH.@N X9pCYAXNG9 (E/\"6 S26u hV#NO8 2@&3%atB .( Y=tڬU{7dP=<\ec~xXĺIJY ή7<i-$ L 2sׇRwgkVꞦ %kZmI$\3,=ct$N(>!#ӽ8dtN:,GN'Tpi%Puy Xu0:vʑ~*ToHt :,$`aڪ50:pvõW 6#pX0 -i"eI7`%h V}(B0qHo00>  H2Fpp 986%*GD &UmM7ZĜ %kZmI$\}|3D 򉕔 %I@ c P^8]g]5D{3@GA7(S8.P] AeoMO`PǨO鄊4-.JkJn7*Jx@0vdTIF%fTFgT XmI$X ;9N(b3Ѕ"X0 ( E H?AȨ *9J`m{Vޞ %gZmI$T})VQŀet x]rMc *wշf^]土zt]['=R]z-Iux%Y isq0Z4$%,8 ۾gpt쾎{_ch2Զ$!w0@r|N>g HGXQC/}a']ŵH~]iZص - gѩ*Z0Z4$[qdlU^֫Gyê΃D :s@z!8`Afe7(p:^晰OlFglر*}* 6'l.AŒcV}+aEi\tF @[ |GVe'rtF f:9- CKC[\BǻooQBKPOM ֔Ѣ/ AŒ=>|:2g#~m;-r]C$>5IR_!sw˙"[P)N)I}G3/~+V/+6S>d-ϟJ~IK!r$AJ9gbba RLRr̶VQ*_yA+5 o=ok7+m]mSnv"zBNvY![sv_<1r?1'I@+8H^7 ϝ~r}q:S ~~zcyY[SK@o>L|ˍ~Zy R_<FpJ/bs[ܪf6ؑm%uLٴYBEp>>I|zvɼ>1 v,lpI(Ncm~N7DaD3690P8P%<>qsWɭ옳OǯV6vu&UZUq#l-S@AR*CIRJMR$ԑMBR!IiLA8C~NmЄRKR)4T\B*&}:J }=/.CJ14T MOMa$'1i5pW%'kdrm f5'2YLNܽL>V͈F0׽:06JTyMfwTrصr^=wT׊'‘2ei_;:(E&P&#w5C,Ug*Udnf,NRE{fgu:45E0ēsg23Oj%xᓈ0"K0<[KB3˲72\,1.:p'5>iUϾ&}$u\`;O @{@>[ > Dv%}~$}\=!2Dz $ rsMs%5(۟ –]sQ \NȤVN"ȹ'7-&=yKsOтѠ3Cc@SQMG$&dVuSR# wbGL&{:7Lvj{e ﺫ/uS ۓZ$ѓ;Eo>K='ɍYMj9I1?d=pJ,rfˁr elRyؕ d~#˜cѫz;]nD<'U_Kzm9,H9Yo&7:道2>4P|,5W0T/_衰B/g=>qVbUfp[# 4{V;2Ij, ׬'d[=rBoļu jU-'{;ӰTl?~ LZd r 3C{D S]KNz[7^}s^Ǭ!nG=b˔\ 6'W5^; fR G=E. *zG>ip|A-BO '=rBxZ?ܡFNVO)г { Q䁙e:C=ZsF#jZn>9[G͏ķ8t;aN=ZY5zbB"葓Xԋ2^*suþNzN"_yDwk۪)94&ʠ=^CZGkjb[Î>uP=.jc$IS ΤԓڈӶ:Ԫ=ju|WeR#f59~k*Sc`y$@y^"M.?"=#З"ENHmyWFp|s9d,W4]Ø5(E JE JqQRiQR\ԠTZԠ\ԀT^Ԡ5(5O_]FP||UrhKO8U\+x:Q||ʰ'-'ز.UN*&WhtK|hxb:|joø:8Onr@yY@Sg,ZN6ٷiYrY[(5uɽ%rO9/|NE2ə}}rTg˙}~?f>1Q3,X,ٿ=@WQBKho~DNњ8 vfLipr>}|a!"!leS"b?B.sx rsMȠc/q+R0Hu<9lje4e&C__7җ/S{t>./l84ZRtG+u>n[p^lbS>p۟^*o 49 z. R2_ٍs-kmۗ2)UzH.\񳖲r~rv};ʔ=r=w {^m[橭j͹??^ծ~ ל}ſΟX(eƶTXfd\NPkr~>]hOj8/u ?yD[GC%ʪU/F6Kn뷓?9q//yNgendstream endobj 376 0 obj 66686 endobj 381 0 obj <> stream x\MsFWv/ԮZݬ+VA2%YMɖ_~HS-43ׯx;Dhzi1XMF{oǑC\*&q<:>kG4*IMttfŋIY\㓦9l;dU|7op[ޙ_N͗U4+rt§53?a>ɢa-iYg&U}Y[l}L5`Km!(KI66/XX>%(lM,/jtHK1:@hjM%v)4%;PӨ,kMpJ+@ЮK0[e] wC bEBh+2\@I!}u3xS/׉S"s@C|Sh L8Mkk>L8*ȴ^v˨JLߡLZ6͋BzUu& Ř1Ávo}eI8=`qYl!P aVUQ2)q0n 7 F[S7a}'W dkXU!;~ERa&; ^ E;̶3E94C:X-kb &biƋp 񂛀7LI˩1ayi3`#;v X`k+`Wr/ަņ䁰m[I܏DRcYVzY QsZlF/[l}7˂B6Wɤŧ)JO7mXX|z}fe US0kwΦM`AYFGaa? bw!R%Y;)TֈS DKyL<a"9H9x ԅ&; t[PFp,Jz DBz?co½N-wv :+4ģ4mځlL7iruR8:ErQb\M DFF_߆@ cy,xOhtm\ĥ7jp*b59<60\- Tgp9I5tg.H֠t#! I )=#WKq&wvsdN1_}ʃ=0eqs sI@[ڋZm <6" Ì5"5ׇHj0Z?J'B79FmQ=gў$ge :2~Z uBvɸ!ܥĵeAk;HE5Cٖey`CS?=æH\v- {*헟x4EZyՂz8zYu !c#ǥ&z wbiC.r|h:ۼ Hk)u}3ÓF#jGwo<",Rp<#^!?!;PDL$K]6u v)@bSȋQ~djqS{6“{O\m9r䤢|}rӸ6;^G10c XQo֝h+=o͙4k H NI tC U8u@}s$NꭙTDtIlH*/2v$ R@ Q6R5s[TR%ԅn~ ^̬ډ>;xv0k`\JBJb~ &Kee)se/A "vǔJ=*`J'@1NQWfbGCoMwxqܹ⫥GL?e& P0?4ߚ{}DlntA7򪄚,T/gՆtPҞ;q?^ݽ%Afeخb6XYRoxIv~R0FoV["QmA@휇ޱX ڥBoXU UA4T橒8"S=%e'dلT$IUьJ_GF-JNtsRb({㠞S!tQvV.kK/&mœ3vȧˑz?wMs慇ו6:&H(А1{J e8Zks38r};<7hVΩyWxT85FVH&Q+eRRks/iG`Gu\ k:]%c}ck׌IO%FzJ( Z07u$%AV;Q 5#6=3j20DtE: ~5+J ?I*b0 * hN:n~?rD鴮SJaJq+*\D`O2DggۓWZ,Xn«?̍"ۇKڰRiFGrA.L7@YL3S4]ZTKV11ty4f6F5Q&v(U*tsða̼|;;iVy]sKw䖝Ѐ@v%^p,;nN߰^JGa0AFo}K/CQKeIQsާRXAѤӇAjBj!͑=RwKUtnPbW$K yUQ=6K}IGw1:F|PS@Së7|z7ELMJ[2#\zn2Өw|#[ePυB^` ˏg:dqoʹqw8ۢ!hh,¦GOQUyO?,&QV0-2KiA\ޏWUendstream endobj 382 0 obj 3663 endobj 386 0 obj <> stream x]˓Gr𑛯>w}YUZCrxFXBAJ7^ݕX@K蠢̬|c~<q2=7oI߽'r;F!Nn?QHJ'0:urOZ+y,7MQh͗ ᴵ5;Ek^6g;)M ~hhfdrV 2ޟ?O۷bYmW7 7n_'Wuj&A!|z@~?$JOr?z02X17"<*^e0ݢĤWz Fgv&$ra$Ti.Y">+cT{2yaÊ_ qiMk0we%2؅ yV;LXĬub]U~"@1ʜF[xA/Y X5dR\ƺ*Œ(I ]_d"^BH#%J|Y)USy(VF%MQ)diE dm'5io,x7TQE\AxD :G?ݝ`w'3'}!b4`(`J8-^L=al3SjΣ€EG %UO2tDa?P>Dul9a~ߥn iQ=v3귟'Y)3+ӚJr\Qq"rRsW1Cpv!v2)Iϟ߿8T5QDR~>kH0E1 f.zcs2ZCvEqo3G>O?dec;Ÿ9q%DxKTT q#+-/ Tk"?m%yA'&dtNUAA&J3Y&+cɾ/0OB?D/Ԣtfd.}Qk^6ԓΦ:ƒY[^G;Du#E۷ddk" 5 CG=wqZFk,%M!u_l"QmG7Z 8n49Kȿ)gLtSwF2A}ZsTb^$+Q.yӦ lO\*Ykc(j7qaTkSXQD dd98f5`-`udoH]$L@,L_R AC&V"r"tLRdhƈRmK1_F JAIXAEd;F$,*5sPDkzedslcr(K:.9P2,עZ;b&}MRDk~{fބT5sp*$? >;}P{1S5ݝM~ (4w0~ν{;uŔ@'GuМnG1|,YwUj"4^@a=̦ y'EBbZlj믔T;KRA'1X(0 #)i4EBqnvQ{xttLIƥ*B*md~Tc1_Ihx [^e}狲 g˸ߢ'GzOw@JXК:E;8/Rnݞ-5j{&yΆ۝b^^S=ogߏ0R4 ~oj0WwjԮy2ti1{2=[o,c̎q'wt&5d/F1dez NtxCe)fw+wW5YXU;sj]~S-vk~Ӛߵܢi#[I[ Ld(#)bʈtlI4v?ogt ]>3ÒFB> #ٶXYo|vrtoP1oXwdm"A΅e4^L|Zۚ{`]bmx_)*(mV] F6eײYɾiȾk_,ǭi[z;>_"0~Pn^uWƥ񓍡4a1)q LeJ!WPLK"J̿6[uk~<7@Ђ2:O:;E xp %+n7hDA! HLM }esr`auoM|G[$:+$rCwWu=4 ^_KCH:"8{}۲>?ДMŔd(AqZVٔ8>򃴂gSE MV67Y3cN.+D=95lJ1]r WmXc鿟S#cI)CH"vn;H`lzi +<$eWZQ`;&M8Ο= )fYl4˽ǔ 9B iH@N>oOZ/Ҽl$U=7k }dG1KCxCso{nߋ3%Nq}gt+);Ux6un\d6m&kݑ-Ƶ{pZ.|Ő= {rtPU^5*y֍7:9 ߿6%mZ;ޫE aAJj.ŠhZl%[9*!B *1V~;+]( 4V{d.F<]v7?8\kͷxmPg ?${Z)C~F|l~vGF'hh(OIG,y=vSb,S146UÊ(u7XK'R<:Q)qE'u)/K u~AT2Ed̰Q. ϭup3@r^Ϋbi_}r&EvE)/H' gq:-:hEo\.`pZ*fjz33,DAAQ|{\Y\v!)B]^? {\Mdn".vr *Oܯ6aP\GmX*&;i ]'q僚 UM &*(I? C~`/_\ 8Wl=YʉdXZD+wǘD?P@+wgD5 YE ]FhCGnROP Mڷ;˓5 u.WÕԹ>rYա!(Ovz@^誷Hv\c&r,0 swbڏG\Hɐ3e¬mz*[cz髳8s]l0q۟#e疯̵UYǭme}-?{)ZNN =߷- ?v_^%g^VԖGHcd@v=%ې2,!7EB$Oz=PJ;^R0!`VmP~[z=#}Kd~v3H+k8B P:ʗ`ݜnII]¦Eutz+lRLcVJSP2\L +@a c%zKFӐPG.HBzI'lzH:Cҹ&+-ds^neLѲn</%TL`IHEwPPe޲*^=gIjx:1ԔΨo|ˌJhZӺKdR[7hn\8[,%uig<A⥱&Noc},A(c!vS\.#Pw{$RBt0y8DE)]7f~4vh0l[B1N8ܖ{p7 ks$8s& n-V[-C,C\&N#UJ':/K{9$4P7X8DKZw 8.._wY.}\sK8ZySY Z22͒}F܏Ssp:0\c|3.RֻF.'+'Nm%ûYB.pC0LXΛW1]I=|. '/{3خB_2vؗgħr&I@Da!ⓕs.U]wc{$Z? ׋-o,w!sK2)|^+UEuP\&0-ZƮ'nA;#'!n1_|̡zrq͹cьƉ(˯LZf#_K-nM?DՇJ,oT:G d\Dƛ [W4-U> ǹvt.^Ňwxd68w͕\zk= H>)N_w Ovsw|FQ?FC6(> m4>KܫY:uL^p{;xD*}$D#{<vAyVja ⁨w6?#{νkˆ7GJH𙟫xT?"wDB\1M~9 6" n0o%k(WqnYo8c?C-\ [c=Pc}v958'gqO6,$[7x1)rK9DoLƉ(_of-޳%r0֑ɽK}ɭm<9qTqߖB^|| ݫM'/B3|ƃzc+Hv7VXq(.qة[Yx{$Is+L%:&>9C) [E[{u\L1UoZn)cK 9콗um1&ɻ;>A+LudH7-? ]68Ψ?Ѫ endstream endobj 387 0 obj 6962 endobj 391 0 obj <> stream x]͓q7_s09F`[CT]\d)UJb3F7(uX<FbyƋ@/ ܅J^?< ]/=<)78FÐj'' ?ڡW@Q8b^~UjK;f3śR-/9iٳRvAp%YK)E_ ҃/EQ<"RK."-ՠX4VZO?\`O8؊8aZkg|d1qv,up`72!V@XBuíY,Ht)`YG1 H-Ҵ ,` 6p4]`'Dgmeظ #t`s3Χ  D"1B$4B 3DMcܠY_Ph` C 7`qkubD®8۰2wA3=<# :^%kHx%K+H3qɞ{3( X3s4SpXc2M2*qt)QA $jr9PtafH/źKFCrc!VUp6k aGkXmdS-B`m&<UcxŢi+ԡCs?a;]:NqT ab.kWA"I$7#;س6gq"!$1͹3AaO{R3@%1_R b.k< fDRcyb"[y/[׿H3v0|6g}k &|%'}=/f5wKE,hKR;+6^\Z]Iyϊcz5"%KXbgYMoff^ZU[;:?KUO/diccgMQ4\FQa=.; A3щqT}OohdA:buH-wM#|HH+RlSԩ3b;u=YrspRo&!;+O s""nHjyॉnsh-|+r*եgSEqzS:7~3];$l\Ը7kqIn!D55Sڞ]dBHm&aUM'`ᵆ {WD c;8nĎP$v,!JOZ-'L, .Z)9\xWeR5=k5@<_jpǩ58G uw<-岿po&ѿQqԡNpI| ~ӛ j8@N!EԚ3nOx(>Ь%}^C3Gz8#{/`lJ~ގmmq1Xrxjp0ƭpTuBwuãd 7DL.zSݥ)rT+!x&5wfG'6jЫB@a|PXM16p.HbvI\-|F#K{j'[:n8߇ܧʁJ=+6k Ʋ)$L8δtVS3G䰍Vg ʺ1bX|d8GbmUY7lM䨞B64ńD!>j'2X!gd"[c-z%eyd8V8c?khb4&hJ/>8͢BPGN^I,;뷛!bRKcQu8w]x]W%8 &ܦ'늎*L$~,>~v|vعxk5=юkk j0|ƋU66A-[x%iDl@SxQ7.=^ҽu&{ DNAfSw;Af"4 ;{ȻIK;ƦyH{ w%Ӓ:yG0GCs'k8 G(\m/bI~c3ĻXaM{ߊ9 62ұ7#]Ջ, 1fqWQɣPD k6#[8洞+ S8Agpka_ˏzvC b8i/ʻYx~ LN} H#~fOVb=;0:Xs5 q>/>3gܱz }Ɩ? b'WNCߩN`nwE|aka,kqtPw֞/L~ǮX'@s>yBb6N:Ɩ&d=W瞢-Px)v5-[/Cľ0bz}bO6 3Vat:Q'OXjw Id3> wlc;4x7 s6QyQa'o.ҩO.c6u\,)GhVq[~Q@ /A2GhQoBQJibh)b aUݾ,cF*ծԋ_hC q;eF%a 4-}2<1G-Œ7qN?/lܖcdp.d I Umĕ, p/gPvGTsw Q̟|:1nAh_IZ?˰qn62CBvEXu;QY:4k\Nɣ[_{.bu3J#@8K.hJ|O>#Bba)(`u j3H+9\Թh,Q y =Y - &g3tT7Е4$-ԥ&H(#nAf&+Eȵy}_sbZzk r|=EZ ݀xC چ ySB YUhE|FM`b%}~Xê&] қFi3O*z?맜-auR1S^sDO:Ԩ$*AX\D1b>HH?ʕ|yMThqu_dH*"?'ߐ+R>UaώW{> %J'Gh,7-|C9P1xM~m`(ߑI[h#RohKBݴue>& _@&!:/HX՛m<OzQ~Tl1Q}KA/׵XƦ|Cꇍ,~M`-" Dz`6rE!)$ZLR)C@~״l{|XҲ-@( %XA/{7-t޻brM㘪)RE%ZZi70`uNer1k@'Ł [@k ?X[:k*})6HL'qSd}{rzol宛6hI#JDr%ʧTeu9iM .t~nLʐ|3R G#fuFӜ%kh? 7"EĨsNcݓ~ )R;zf;zĩ2Fn`p+& lQu#8yajՒf/Z@!0M6S3Y1_ Sv0Np>8aN>r^rˆ T~Z}NG'ʿ,]q?8gcAo8b)ÆǐcxR!ӉޒsLcWL!>Hˍ dMvcab}縱s)+)?. !s4.QᘳNC}eICCdY^OvCDYʞt>zr1]l`pVJ7YSgzJ7$R~6 !8{)DLL R圽m̧:`-B#Zo{jD:kk';)E{^ՓnɌN#MsuxUjp~&UfMbr7 o=tq_ݸB-/v)fk10zm<#'7WTD|dN&Xz\]i ֭r\h٢cu~؁H'^$3qr. s`Ѽ,b^L5QDGDxtx$nH8W_x|Š^Da-tzIN"9,R*-EF`Lq2ɦO'ddL .˩uu\v xnBl'oROpDs[IiDŽu,XvI.rkVc_ dSrnI0fGipVRv2 \s hiP8`$Xfn>˶C.H!Wzů!)2(NWn=%K.e>Zro?Zv`+_+7P|<\.W w)8;{~ԓt'l ~.o&XkɃr/K?>/^ft[?;j//>3bxGP5D <J"&RG:Hު:ZDu3QezFg9d੔W<,]>b4Gl2t~9?'6>y^x]x~Qj3sRys%oe ֮O둵.OWJN&/f2g{Kp.Fn7ҷq<@L{e,C djÿ3BQ~͹Ar&m3`AJN-]$l;7utB`۬9l)34Y.^gMx*vN(-\+='ϒxc8e5F 6xdK, CU)^Em)Vtj1@0E:X"rLN頁WI$xeqNRB[ODoHL^#iL|/*v#NQb:wx"!Џ3yaY:ɴW^d{!].a0M5@S;' vNUatN 񁟳H;TJi|a^O\)Ň>DŽ՛Ω10LU0" 3jGuR YEV~jEvbўC̯ŵʛ_ۡ⯡(ozߔZb5}-߄'.ΒR!ָL5hb6J7_$eDVweRITQmjQ@(#lh+:{ Hq#pxx` kgUy>> Û s}_'m v4GG'x(+yZvb{Mpp8"T GX:+N{&8pWIVߡ.@5[kO$pĶ;26Xqޑ"2g:aX@bzi]NfE ğOZcjYƳ V| J# Ȏz::ڻ"/Vs[XA^_şVbo/ͻ"Fev,qǖAc+bŠ_B4T^8qx-$+ Xqtı@'󎬨~TlTLRtP3@ Ͱ3caXTB]oLHEo/_3sgq%Fda)Nsp wJWXxs^mMh5J?}ڃRr CAh/jdc>~{a^endstream endobj 392 0 obj 7818 endobj 396 0 obj <> stream x˓q#|ܛ>MPVS>P$w"wu% iB*/Cq*_{?(^Ӌr_{Р8uՋa½~|Tw/vwˮh4톺{|4(e_OO]Qnx|ZiUr\:vVk.ZLt[4vTrNwh+^r9, YXu/lS=N 9Bn>ޝԞ>j/(4\~\O,Y"/O71=OӄO߾xx٧O8{m#¶b??m<pjcgm_R6}k_Ɂ[.[E_~X~ܽ]Rkp;pT-t|1iftzgCdNSR[2(5uŽ'{Te5A5J,SLFXOE,]c;e1a*g #$=H"$4!ap aċ !WshF9;b|5j샄x38) V qZ_,"B_-\! Yd jK3+ݣCZ]YQk.qw.]@hq@*}6{XN8fC`̨c_dvm3mV!ۂ :7 Xw5~6KJ.;QIzo%Nm2Vc@U#\X\V]jԻ,&,y8!jaV,;]- `}B$9ݵV0~ꂬՉ[)ցt8fƷ\ڰ+n9_5QgWDk>[q^<"CQ? ՠd|qⅦƷfY .cSBL_g fs* \Is#35Sk3Ѫg+j%0d &-;ZM)+ <-8D3;AG9n*Ǜ舱zD}y,#Okp)UF&EyZE=brмSJx0ǰܢ4Ҩ}nO}85wY~NeaaOfp\faq@E>{:#go(j?`Q17ºb4].yEo]bk`cF7pQqtpZ :,3_BSVy0twY8vi{9ȴJ'X$@gLbQdȍNⳚ}6f8bLc s}Bĩ;8tNQ l@Ʃ7iqz'kn*;3xW$t9RfU Pt*N;D{gZjyI^._Wn|A ǡhϪRVNE?,ԺCyEfoeS C3LrPqipкnX}*T^z#Ӫ*4E۞Fm1LDNapS C}7zoTkoE)"NH0qqSyľA~ⓏbTm_$wwWb8DӞɿ7Wk=hV/ -B_,¢-AG(U]3sԩZ=v]SdTu5,evߌm6"QAmbE Eꄨ-4:7U.{m T[[4m[_jc6pQ9TuթJ>/ʮmz~&0N(Xn~)L6tS):^MZ_96]ޣOC3SaIYpC:):O˺&Cqד4MEjRpF{jҊ_p'fh痋SXTcy~`VM0Ud[4^ױd$E?F[_z WIIZêXY?Vc>`٘j<_VXm9 ܬfݴ0gK9[mer/RT It*Ao?|1v!KIE]ި}xi$=/oe;vuϷg=1^Sa9RZU}z-bEI 80M@Uc`J0ux`}\cCoI;76bwX)owU~bJ.qrlSpo$1Y\wN}Ev>7I`x\7E\8é5T%*[')ߌȑ\C:Ny0k!vqzN^195?9^(rjrh8<%\O9 薼?E8D׌?z7Feb%8Z`o8Tg!1xiLP'pR~ ް Q,% B._yT&6YNXڟg g8 7o4ZC#؆7~V1=i.0HzinJg~(h68g o&WuJto8Yܸ-CtްV |qKr"V8X* ]Yҵs=FY9x#r Fz8 Zƪ*W_m5p.+b) >;s%fmψƕ>b29p3.t;$[C/rGšZQzl1iƬa=ĭi(x k=jdbiKYY| #'\-=;=0kp = =rZ6L%\^GAhC &}"3+k+z+\+ kϱfc&6D6ޘ% .տYY1e]or =X1|qkh8I`us#Țg1yoAc7HlVGr,fSmxVd s ڹÊc ( Z./φzkrh8*-{a7zY,UTsrAfZH5R'b ujJnb=X"ω?SƂsw&ysw+\)2&u>Fkb]&xr,o ӄa 49Z C9HHFpI=08V̓eN+[|2ON(\.[^ Dh[(* 2o7Kt7l EkCs ka͋|NΆJ*Gk8nv8 c\ Y@_3.^w0',i' q op.YYLjѪkbu4TUl ;[)YƲas&ǷYW\=(pm'Q-slVn·vG+>9ԍUlv8#^){fsbct8†?9ω dJLaJܽuL= o8ϔO`aYccNƖΩmđB\CfsFa']4܈7f1AoCDY7:aM-FOBLd9<A}Q9챛 z`] ,OAlmʆKw .XyrM*7NJX1;M [su4%~0ΟJq!e]Rx{̮|J3cLz^bt/ކ #o sֱܬPsbkt>1ܶ +Y|3pdڞʌ1-ɱX9%>X{i;C>SΌrv0䰓},nYyr-"94؜sDfqpC<gm0+a#N"*EYp:HR+7`Wq!"Yb?;THdx)wNk9 -Ֆn9ͥFUu6fZmvx{6ɴrm!r6ol߂ sdve\'aa7 {9*rg :C n_4u/fZek-<*6 6qB}|W '9U|XW W$+&td 9e#We98fou,]\10T's$}A +5Qc\ Ƭ6Y3{e3FbmS3Yaـ4k^({?sx+E 50nvوI91DE1ZCΑE!jΗue/m6&Ń8՝Ru=27[ _XyP%stD%!$#|_1̖r`NlMb1gQq@څ묓m2vulkp@|/KCGtٙ\M*/ ^9vl2sl2mnbx1#x4nN.3~eÙ^r%=Oȵu7B30Q8K60{=o8I^nLe~GۻN Vqo2i&gްL&h|a˄wpDk✵l~19gI:;#,ήSzΈ&+tVtݢ#xÖ3.<9ˉd反XW V_ 78|\]7iJox=Xm_4RZCl`9u\S9hЈ>މ823r )Dx83۴"m1lr잟a`sba}4kt9jgd(¤-?lk7(U"m듓V̬c,ǫ3kиhz{:oZL彾3և+ug +yJ+mT6X߿ clΕiD1`zfaUBxga{+QƔlC%\k2y >E)B1?}_pb55}ži7CI9߃>n419z9lqȭTgJغuks< 1!PwawX9/7 ܑgmu־sd[!L3>ٶ'1etvV6^7mk9榘ʺ3kepOfca:o#߳afD| v.9L1#//LRŶ,v,-nL3QnlyaOBqw◹&XȘ+sk`dv@FZ9Deg~{ `6Z=b] dS9lv)_f qorvHq3H^91&SߗHPC ƙMƩwGDxɌs 6ÁC.4u9_ $u}xjsBUi+ZXT,.ra+܈Ru6T]faz8_ 36`RTBvdy܉,u+m3:虚bWΪ;nϜY(Qr!w3Zy]s,=Np0éXHd7GYmFEp؈7.=ÙN y S Vl3* ^9XN[vls^'߬P֪@sON~G rrάsS3 YcZQ3|7q8'n{Io*a*,.+~9$VlR Ys2ֳ+Vf.eK8 8pd~тdxpd>T9y1meBs&;뜃c8@صv{ădW>;wjzL9S96.uv = N`7xg[϶i]y/3}:UnC9Ä=2LByTA͇j8sDxχ4vU<|*OUO0QinH5x9^endstream endobj 397 0 obj 8996 endobj 401 0 obj <> stream xݯqŁ<[ 审;c?(C֔C[57P`?u^Flè+3Fsս70"CGI`1Qų3y<]S{b&;:r;Чklè.0?kIwH3Cs c14+sVAIU3tS Mn|WڜukANmi>9Zb#}ŷՃkn/gZ<ءW+3;տ>=1qc. \u]:=ݲ#݊!ӆ%H=c< ;;<:yhSN HaۡY */E`/ 횜\O ȅ# Gгu ;xEX%Gn*Uj)GW?ͅpڵ!2(3J lₔf=Z̥uq#1QK_RΙ%lH/7, a#9tʹ#AuXnsXnMb"꛶QơigۜiGּɀyNF\{ Pk笒DM"L#s,mڈ7:n7)lD6O`G )0xttYBB qbqG5ϳDܗË opaETdF?&7-=f&*=S,RFaiFģSL!A>\G_fJ噹c-Sq#'$,87F@F?ފ"Bu8YϕW\(܏Cx~ymI-)qE,3"@d"V~iD=9&ZIDx!3gA]?GY2ypt+˵ffG2nn16_܊CO͌L##W2HE:shG #$g]Ϟ͂jE|^/sr'h'.9W-24anzx|[嗵u,sFd7'\6c_ً_Ė; nf1t"lnx,?w3HY;WE+c}] cL˖4X`mn}̙a4mKì9\{&P/07 ۧH򗈰yFlʋ.Ilȗ"xhw;7l,y7]o7/2᏷b!;*>qPlH0o0w͹g2S#TjxÆiӀ Pf2AobK2kXs4^Yލ7NM.f0f8 C0K!nڀQ(SkP MXegM˟f*s '܌%sȾOK33/QҜd_ ^#[bFD66=65T3 gۣ+Nxg,D|hV)L`G)26B@Nj'vXa9]!vƐyVt^ܘfUaHvJ uDW,d2F ;rx}tU逇3HG+oZ.OOxw#gۈ7嘃ޒ֩9BEZl/O3V-el'xY=}37ЦUӆ+Bt^#bP,Mhjf={Dr272aMfD+4*/E{! Vtkن7ID F*e\_3, q7g=jX7HٱmC if2;ҋ=x.{ޔJ?(˵\l%[:59 ^se47=o@mjhƵvot3YH̎d‘vFF 7Ks<#5X7;[SعX}&ܲHBEL0&vO ;#23u=7'X6L?Ջ |H⊋9.9{gϯs/%W(+01jp<Ҟo9X#9/{C,\cM_v2qD><;j^Q:OJwV㖍nv<#Uw9VYlνeeݻ->Zi_9,xAPe R1RdCА{ţ,&Ь)?750޸5la 0eBLĘY+^ Rw^:6QoF83m0 m nDEԃ~PRWJ87+.<.߭"E ~T<9fhșk`GF3$soh912_ vRBLJfMBf˭xx_#9 7߸HqQ#Π.8I{E)~'ĕu <`0ὰ5A1=xÞ6-78L}&Jq,xi}蘫EuPhF THZ-se&͝Ub-3B=D G)36UݲIFwcխ ][@haZaB_Φ&f@Ds=[f.2aRaQiw7dRݏx yD\zt"[Up##1:)tq '\~#[s0q#y(GNLuT*a",Zl3׆N;fufzƧ&S: \9$\)|:y|zXWmo"8"+3gC%Ve&8(`ks1UMq-y>,.:")TYU~HWlD '6sG)3[99 6w,0bvLlcDwh{A.dDais1i[uVD$m?]͂a\|fe ; Æ6(ްؕ.XY…,7 ^zT|k (Kvۢ+$c0byy6\ Q5pIsa]'~b b )*sԠ57B7Њ89(EB qqm.=7:4g"lW ܳؓVjOψ-e kO3=1`aF&# 9 9,#9sw'1f g:t Lu8 ɟ-!B'3Z_M=M%&xJ }>ƘY| ~M3hxo8W+q7$3߽o\qsVTxù<ޙ#Lܶ΂qh`5g}f+{j3$`90IO wIbr @ð<1kvSk #ח IEr\&!CDѱkmVN'bMx6"30CZ,).g6Sa|߰Z7^3g 0/. Tw0nȪs֑/-}-to8֖SƬvY ׏Ǟ5ܰT'-H~XU,!duϫ3gJVEP(R&©*f=@<#*aAkŞzLu:QlX o.eqwt8ax(MM޸B5tx {XrUp#QۜƝs:xA' jr@-MwSt:5.2P&bsSuav.>!>:aígTB0Y CA9ezu\;lUGU t yJvՙX=9YOJT,;LVsɤefU+!X)~km"dQ84ÔQ<ےM\f2"w ,]'n/%eztɵ~37.H(RBrq3\m; ضl}=Qwr`)-wzb]{q*ґe}Ŝ-,ڰQ$ "!ڸES.a07oteW0h7s1U1SaWE \~ 9L\FV $8+Ή{YeW Fq+V^_l$hȍxa$2O^pefgL ԼpmXīSc)V &#eJ9k t8G6H&3؃R+nOuZsF4"XaԂ j]țphu,A*u&jя0S# 'lj LDWn,2ľ?慸`+s /]9ϪEXz2-J\kn[tHn]G|xVU} 4r,ϊCPV Q}TqvYU>4SWgա臱 ǫnzHƪ{鰩;]1\.87hw.C1uf9ڹ~TzZUMi}˧w:;=0ԗ_~:]]+e +%㋽[ĻK6EGy^y( :e4qu htՎwu9}}ynli?}/Z"r6eYO}SoL=({[q;uwǬ/?iFsc9=˭խepzߪ?al4.~wJgԌso(/3?鎃h*CyBb,+Wri?>wy[7? ?{?E3͠PrϯR7I|(ԝh8Ŏì֓z8D/?OwA1VSY ekЛx Ǝөmjq\,$AM dx苣9eusjU3w{E4bs[Ηz_M_w'hy]oa>no1zqgG?#?p~vPe"gٶj02oQ7E<} x?}b/-wG61׊>F5LwgiB{wg471͍b3WϽ\я Ev`b<_,|\>B [0S]]/_^.ƋDXuHSM.b=>͢e@b:9,ůÕń|9 N;(}f9+ƻ]4pPeVr= y4oN(0I@ 9F{AfĘ8]q-M~=FR&ѼT+zx ~:u,QcܘrJgVlJ(x\guI .?A :{N9H=Pu.JwF%wd4[7|`C,gWT5npx FɖNcNXOx (D|&)})TOXI{F߹7Gn3iT-b5{S婯uS|jí-\mُ5 &i,_aѰ맸>{ؘvu.Ӗ)+0, cJPY~S;wj q\gh}id +};hv\f[*Ξ jU[I\ FXSzL,9%z`l9<)1PdG)_zVС?_u^odmNW.o_pygS ݦ/ 6}|cU|af:5HK 2L(Mif2zh'LB)pP=^y%]"{r_X X28x][L Lk:9k+|cLn$Iߩ"&Z>`]QUE`b-e.nnD_j 9,[ *iQYV@$h@<یfĹ|] Z1[p,u(ylf_^a쪮9P4c&1Z_݋g6=Aendstream endobj 402 0 obj 10764 endobj 406 0 obj <> stream x]sʑ\cq<ӻ:$ZLAI9}9EJr!04Ϳ;^|>|`<|q0N3bMAZ=|F=\|9>rKKˍ2PL*  LOiqơ*C 1e7[f\W[5A_N~]N^Kk%aj6/27c<ݿ׈';nۃ_|u*(^'xtogjfq8{VfZf1+_Y /A-R;^^o=# 59ޙ-gk9| QpxIaXX}"{܎6OVׄ ֥I=i:'6~C=[p,({vBS.-b36Xɉ'&_e)m xq::Ni`ϫs7(﷙VIg5@2=*8=!/*pCaa !PG%m _S[ /[,ֲXGg'_l[:#RZ\No>;B6^1>wˠC2-~]/ 2{^f C(0s8M o !y$5e3 Jm"+b;s#c8{& G5IݑmFm\Ju1oA Όp JKyi.&98'_Q0wB?0b6[.`uўom\MS< ΢4̟)+[^L<lBAicg# VgV3K2U{_.O]@g*=mFE/+t9&pI,뭏f8LFlNl)=b'TE: *|g7)oLn8M#HG+t>B[ܭӎV%GZo*+9'NO|͔l ! 9Y9wWG̩4`36F9if6ubzjt0m_r6+i9™2{6gr0F xiB:ʳxm2z5[-I󍇲2|hU BpQS:gփt% X/sڶ?C'9'<> 5Qxȧm";>Aĸ+=j 4WLG`ܝjB)Ő8;@b3ڲO4wkTf2]"!яi\?N=™⢓@Nb~*rFI~ǎ1Of1 *"Hr4bu5`vG+#5v '3jP4o0[Ka MezL"4負K`sIĴ01PC;`*^ ecXGX.E UN #HPMB# tΒ26ӕ_8&YF^R5t@>YaFݡܝkIv2tl.`zo#%Pwˎ]0U`(f7<*Z uQ!\5o͕J$c ,u!6źRy"8kh*+ Ѐ'O49:P|iEo318 vVhr~kDBF#3AMsM T|wC|(wb\ kPwˣ aC1BDVfX<'$b71BMvWڅ$% R>IIP$>Cyr.d&R؆kKF-DqmNSIčtC-V>CÛC90;د)r*f3ܛ2_IӖgr)!Ԗqb0\8NAQ ^lK=&m0%SZW cZ懣M/eh^O7΂9,A\Z#e>1W&~_<_ B\Ff~0XcaoW>pͿ[> Vl x0ķ1(\J Z|! y@? £xk@g݃!S$<X!̾"LDXX-.!ފ(~Q!£eBGexn^>'Ixw+L9Quk%K3KhM٭x=OnJlD2oV-8}zAU0>/,}eĬ Bᑛ\v4j]0--[7 ֌;*2 F?ܾ2]ʠ:|g(YgE \ެsu@eJ3b1oD$e:oF-5$s W=iU@uA.z0$t?K<ٽyl]-ma-D%QgI hblm#ޑՓh;u.aꪷӹ>(Tg[q>͌K`oʬŶUu"}>:|0 Q;.Z&Z.K.3iUwmZĂ+ Q!ݢV.s-mYMF+J|u *AƂx8XS:7NM0A3rʗV|pF!2692t^؏v#58mEv+ŠFMvIX Cc+srnT{v&-Tܶ8C_S%~/0fgg _Tjzng5Yl]p$P-#'z/lzif#$a0z- ,6J?\CS[&ݠd ׽]ںmh܆L]'\ :?3Hy+wZn/ẛ8rtWԅ#m,:p wWƸ2Eo>Z&VXxCkˆ¯1WrՒe]ךJΈ*X@U)6E%n?Τ_#TUBQTL X*G0FV8u 3 $}w.+66!M*j4:%wX4"}ep~UNtEmHl>r :5 ڥ,U{yFh9Kuv4vhk"W ,rPI\4XzeeH9rTgʻՏ%I_%j U6UuDmU4:Bؕ|ctr9=\#] +P rYOtOH"VҮx7M nwLh -7ڃ%Kx-bPCx(ނu?@\6z~M4o>g\VѼ,DshVrG[ĵ?wm'oo+WPH {n';K}7>r;R n!Pv]1PyW"Xx x,*~!&$#5~4_ܽsȮc$e+O3űi]ZW;C¯"ݟ lJszGω*&"Fa̴DTH lcIsd2{d-?JJ4GObOEO* Z av/zƵEGWH7Bs+M% 3*ם-fdlpoim%rާr)lU$IV99zӕendstream endobj 407 0 obj 5159 endobj 411 0 obj <> stream xͯq/gmV a HK5#Y3#%oM_XU$}l ^6ӧNMvoN}7/|ǛÓtATɋG/H-C֖7O^=t]{|xdu^.h|a ox]:+ou>{CW/·goï?V?|??}Zkx궻y˧_z> ?χd{ -{I ޻d^I扇_ggϊ|A>}o>+&qbgxߪA0H<1t U1n^{=z=OdgP0{aMKݙ(ags*HR +Hw"y' y}.P sm4|'.dlw!gf(8cjR8[;=zG{кԃIV*T4R<û=m~աjH\\J9?WB-ɟvάF ux7Ȉ5̙,O' Boӿ<,Wjٜ̀77JNW[ZcmTi19ī)zݮ!\vtr'Az/C_7)$;TUqjQuǼAYWewi$r~U5").c#M.CVuYG{h~=tU9J=9-[}.7Cjj19TM_bR8t9ry=OuߔL7קHUukz~2qH^AzFgMY-cyZYh{,u[LU_m35:t?Bm֧[ imQ,4*d?{D%B+|Fڿ9_<;1Ry<>q?yԔj O|Ma>fT_dp 1L8͜=#W *SjD8>F5G-/aJіc"O0;(r" :)T"~;f\L4RgRi }0޹/ ӠiLyZdžfXǖ4_^"9~i&[ț.yY/֙X?фv|UZߤi!ϊ)זe>Pc˪򁾤tzgmVYeӣ :LoTNnBöE~a˾x0Ӟ fIS ק]t@5ޡopl*Dgdoގ?kʸ4PM/.AK`W6DQHņ6"-]Ae9;Y"׆8yjnT !a{UUl?FgɎp|?_}:e??= @OSV͙z3czoXg lQ?[|fJlZ^ 10ȪCڼ 5:5Ҝ/g|zHlg;.Dg4lMbchJՂY:*Yg+lA 8Cg?hI1^ac 8Ե;A+}E'§D(CX 0h"wnK4ƘD 1Z+@q@xco̤gyxъet6ܫś vP0S`ŵ^^~n4֩y8{81H#y,Iזf|a[s#;o{i1EFjD˛C7h{pJFI $`B#՝4=+gvRpRJsQgh2xƻXb12k!.&aP1g5Vpac 8 DI *3U=f gɈ;i'.98őb ҏ'`Wa)`> hjQ铸6#1v<TcRYD͆tص]G!#%d@[0pLņ9 Z`W%(F0u1bv[f٫ 0T vUbc5>f?SqZ BycBB m]*c |UG3CzyE8dLvQvVa+!ah)ޔCw11f2:cѸ\+L?Ewh`6fVq&Y#dg-k`Znr|-Rxӈg~ͣ4 7ceat8 /4fʮY,3R.x` d\7j cyhn+,lv^Y&PW3 y c:HY y(Rk,-jĴdcG/3DE!abe)Cny:bƱsH939K|U1_`$BIG˘(1Ԥ3g2;R2ӽ+3x ;vqѶ%v  hl`Z&~yXr !icTb\0\Da3`-մlbO]:) C#KgRyQ 螏Aw#-\jˑ7̚N ' 3-!^|f͆V 1bx1!U.1\08Zu!/KT.0&85> MlbT3 LDcltD7@qp20č58\Ltl sJaĪ5xڡ;ɉ:nApP5$OYCʶ Nsm`}{숙 bLˌNNs2#-\fdׯ l cZ^s^-p1N.ƶtKãKN60a)^f("|x6t:Ǎ1=`DXmG !9P0&|Jq8`d)eBvRq- x x-3]i'Y9dJ `#cfO0j]cZ641J[ƌw^hRG@,6kg$ɴ<^Nգ\wb$D}-KNbkz3q -sdZ08q6xKFg9kH۞;r<+Z SؘH!B;Y3?& .~W.b.0].8ey|~WM CF5?K-^}xbɝqfLι +uL>ؘQHR&'Hjzm$[B:ف4np5 fM-[\,shlecI3d1~J<'.ZbٍLE$ɶ}[edѤ-FJqL?/ؽ)dJ>ܡ60lX7Eg aLC(3CYx6bg6l;;ma:WYu0*i1+ |`-t;a ᐛ@]4m[hvEB]&>d>[Tq!m;~&vf[p,p"?]Zh!_s+1jY )YFK8["̠Fƞпwr~'#fhnXfj0&2-fOgL0fwxRs/ '!leO+g;=ڜn"Y3Bg'S[>-c +\Ĉ~9\ή&gU3Ge`~ƕ3;!f c}Rp8Nxe\Is~ZSSk(1vY/B=Y[0o褃1mI?&I1`%ٷdʴp!)CFb9b !/,,cSer~zb (Fz%CNk<:T8 us&| Z)q P{w# .n0\P6*Crޘ H'xp”89gŰ}IQk(mouj@h& c*\jΑ)3ӫo1c"%ĺ&fo_y`9r-T9vM'C5+\)c:sqG>:="B;a^"133Ftپ5ypVd x׫tlRpŨ]f"Dy9I9+e]XI3Tn8~ zh`  Kv~Bkf¨%1a[7/#q]L<9.#zsP 8 ]-f+ɘ_ &2]-G\X#ь@><(9Ulgb$2f"8B<rZ]jZCAYVth.t'Vxۖ_4؇nooSb߿0U-Rf ̔Y ij ܚk6+*!%Q_wvp?0}n*+kH -<[$26h{m3?39!-*(%#ichC:~/.+1ib'>3?C7҄Z-mp62ó[ [$hj2sȯN#/l0' \\|٢`-q1>-‡8 H`)' ٔK=5 2-7ނgYQ< xby:8ӨxX egEC-h( Kaڎg,YjP6 Ӝ0SS9ϲ4?k^>\ f+rҁ-mLB>-0ep]㙞X=J- Ϙv32FO+2d00d@ 3<- H%C+Ţk+ibiyFw p"C[8nkϦys/d0آ_d3}.Ɩ='See?qVD cbC8-SPMhmusX p;18㬣fXr%;#s @XԩNͨz3+*t:㨕! a)Lk&$Lʱ0fI? S DD$̻¤L}2rMHR+a"XI!ߖv9?dC9cq[22Fp1 G8e/ql 8˖ eٴŷ`i{bY`g2)Y|Ɇu¹-Lj￉e9W&,ZCYѥ&Pm!?=)iewƜ:a-ߘs8z]5,ү!в5N TZ6 FgRNk"C8Y 9P-ⵍ0y>q1b[L 8$fhq1@غ0+kDYKXoErvcӊ^an@8e.ƻA`ɩΆAad+aVbq1 ĮXg*Lq1s\I"+`lXvgRSN9)g<0L#"q.aX f\5? 51`7 D׷0x ؋rt's9PRxp ڜAWW2s1pq)a2;3U87xM.ea!ƯK `*r2 đ\˩.˵V le {tv~Z}] zbnÊgDgaA_9ka*R&XY 8m) %H$đuu>.m7V8rz`5{)OENnfMXeS. Yw#'B]N X  ^pXqs)55]:$4t٘cS;.dalg }!ƥ59@cwc2(sj&1]ؠb tQ7}(<6#&h`J9Y{8|"9ײHD3NrVh5*~x ✛|< Gfc\r}LOW0 $9yJtUއt8S0>Wk6Œ$uóq7F16s‹[ò/f!;3LX :>T2d wR+~F$,pha.`LA1Gb빘YoZЙyJ%] A̓'H\`iZ3Xaja:,ظqU+]"IW#F%x +:Êx. -ao%ikȜHN.<ÿ5ɇCy]2dbٖ(Z~N4cNsU3X 欔[h,,d-T:uM,b4&Z^M]lcl=?ʅns5XC[yHMIr 8kS0be[Р}r9^Ysl2xDXZ &̍Bxq9J̈́.t. 3y:: lEsr"LW{?sB5pU[uPaX,Ĭ7 ` #sBU&pgiI&q]'`l=ccWl餠CSs4NF_chfyNPl]h| eq /I&,q@!N=Nr,Lodgc:  l㺄gxxw s&&2A.NVrj.gCcp1j9:ʛV21" b>d>ؠśKC<- ]dL#93I 1ƻSHؽo5]" _a6CD%66aaE=yDbMg*󖽅YdzNg=Cv:1Bo. ޞSbt/ 1i] #vt,coDX +JJ#q_6m-ă- oӛ&ފ=۩K[lJȱ9O*0a? Y`7Jd2T 0S|8GpŜ}h,Bu2L; ȇSOQ.pƋ=Η3yk9c5gR0TCa=eLBZ~PY>vlNw[wv5h ,vqtlrn[l1pn(LLЀPgg5v1>29"kO9~| џՉ֘#!€M/[- +c; \:I3}nYS篗luB{?Y~vNr@΀3ʌKF48zCg,'B:ύh,i}tA7VM˘1 MGVǩ/0`א*q7=yqui͈p@Etn T~8ZcXκX j [g8e1OL[ȕ5C{ N!Qb@A[8X ˘v~ bE$F)^r:Ink?zyODU{JZ<8؜ӂ ~bl᳎hR;\LONDtyRKe,Qt8hb IemgɜO%2pi8Nf,jx|.-]:oH`) >NYF"qMÛ==^1"2[g:V7Al*J?MT7O^<uysWigYʲ?rendstream endobj 412 0 obj 11613 endobj 416 0 obj <> stream x͎$ˑ`@i;7+SYf @uw3ZH^jqPUvWgٗfYՂ FGExx?v?}Ӈ?ǿr|w_n?wsn9?O[λves>}9_ _/oξn/ Omg/|āOͥ/cGmCGnÃ_>wpgogg|;;o>lps'6֤!ʷ.{fEz~/cңwzg˦Q]{6gC{6|y^^x:Of:rx:}|x:/~a cЯ ]y8B׎#Zhǧ 7{30fL96}4ßq; m؇^-`_mƞ$y[>}6|38]uىg ,~ױuz:|'~ij])y5 W.H S³8M_lxaȯ*h3n槽tf̈8 H޸G`Fy0涼.l%}mB<-kUeÔ4yH3O0d-BtcQmFa{c"qS=: ЯOL6~VOO Ur2-ħE*[~44] вǧ@c2Y۵(+OtD2#O3bGn}'u/.K;^0.SvA݇6"Yqa jGxfhYt0yjcôLagE]UfG:,* 'uG-Xв 3+ -OfRp6i1LSA~^B{}-p=x0asb7i`s2. LbzYr47zMhL9 /֙ij4p[8Ebi%ļ6x,&fƈ}UgpP#bZF}-zڜoWnI;ha1i 3S#A˒:9U'7$j65p{9?mojgZ붅z1eDQJ{#w˪e`&$#Z;l;D`8hSKNg]G|=bxŎHx6FUs66"9CixIk(t<1S(CjX cW&{Z4cy7h禭\f mҾ!HT^c7s̚θXlͱ{̉af Nwl=/)e41jN`bl="G!8˾asU|j0+&#Av]B}lr7t$(Ճ;b|y#`^7ly׺(A?{IiP\,6w{ i(|{?Vm0kZ()X4$xL7 RECL,cxYhZpEx,ִЦWcLa5ȡG^0fp.;`\}VpvdbZaW;02Q*vL^kT/H\{3Es#}ۡ94====']j؄w*%m!u;_Zij 306X3g)ۛN`37Zv1GEl,õ \>HgM@)HѤucf~/"Hjѯ5;0$nyC·}5 n3]?f[eD#5mxl,UucĜ=y챷%ѥgVyJ}d>$5g_.|U5ڊ{Bp+ zNX>묪ҊLu``Ҫ_[{VFWjZ:!aƀ1!'G[ۖw$fx-1tnϊ(āVMu4xÊw0lk | u~X;zp; F^kN&8kːAb VlԚىf>8cngGZZ3H<ˆM1C6+T^|-[r#m0{ ̴ѷuljf:/N_kC6+0jv㎉]*)ӕ6_k/2%̲lNcn&go6/H~V.(Fjel土[v:amF[x  $̮MfƼo_C->W sh1Їڧ$aK -+ ȏFG4ڜ)LjS qԭe7| 2e-PuҧڷVX]us\ $fs4-ۆIUa MaRk~:iC!Ψd3)H仍> U/V?, bXx.?fG68r~[M!aQ8)H\J5l7<;,j}弥y_*AYƧC*M"{v}A b84X: +NҹǠlfXgE1!vEnzY|!Y!Mo~ 6^ErQ&e|BGG.G c91gäp?9">ZgHֲ+Se80l*V?3(ʊRl{óUnEQIxfM̓NGҍ\v\XUFxӵ)mV"amXp(LleoXk29MRZú!;ǁ{H>S3֮Zd[^QgSrer38f66H*;6:\;CLD!.հmIʙe"y8ڳ݁'C6#upmKnhtW6/tzW0K2^uЎ*/lp28[elfqD[c4lԶ>۵L/ -QˢXXwnB6&So[$.ݬumkc1_l,NL!8a e# y\~pY+*]׭.R'<_lxw_'m%L.v\njNȵy)c "73ț[s?| S]UоPkdc-ܦ.Z+-춬39}|&횄0E;ͨ6/6]ӈxt3CH[f>l⃹h - W a{ ]Δ0y ~vhX694ja>X颭X<$y]R.zaڰb7SQkOV$3ۯZ$w_dFӒ[GQAnewb-aa)DKƷ& %G#[b.H8l{5\Zd`r&G  }E&d}҆v"瑆Ӑ!9aR{(LَeウFƱXDfl.)X[ɞ $X[_ٖ+X4Z^LO"L> Q\;قWF`NYiW1gK̊ 5v#7ӌ dltytP9S<i *M.ۚ<׭i؏֎ M:.yZmQ)XkpϞ|OZƹ6e?ݽ㚇J*+;[mu#HQ]094C路k5lhYx 0V=B cG6̺Lbq:V94k2y#/DNܸ֜ҡ/2M S$&tؙT?ge@gY[߈3~TmL2J;= c6ax7{jLK%gZkzQB94Mjv3[i# ,ۺ4C#uN fQ(ymtR3҇)[@3H`ɊgmMoeJ^>'U!0Nd9ƻ`8✵!-*=®=SG13Ik`h~-uyq1P!O1e:D{pY )"W25ls>c{qx{"z|~C{!0fqiUؐ5#\{[<9|4D'%>[m[bM[,$fa_%~''Iks|8ez[Wp_û1Sp*XRab(j,61:. xźawu[;kS0'IbH>ͻY̏ I XYaMifekLƺc7`۪{inP91pU0yczB?-'VbXR$iUò L>͢\k kXL#:ZQNeLC/#ٙlUX7G43tthuZ2hl&}֎ׯOe zĢ~B2 f-F{|OmcsQmvXTEv9ޟ:ʰ w o6Kٿ?ݎkç/ڭ5y;ozϋ+voGk~rw~gngG_;0_ν_jn?}?ңǟpe}|?o_.Cgvzi{m{z:^isxz{O7/W/3]t7/r|췗% ZOwϗֽ|9l;vv8_OO.'Ov˿.︻L~y͗=mmK v' q g#/;> F+VoLխʴp(`m"xMz '8}+ڍzRI:nl6َ(U0qtݖL^E?<=o#dWBu0GQvrLZ|/ JZh[ e?v.}Quh-,Z:};:;1rG?E0M_N>ּTI@qm]/lCsm%3W5n@oŞV~YlUX*5>gAU/N{D`"%z9Z[бk$Nvݶ4oBpq.~$(8=PLSr8[8c@x_3 -ΙFS8b$CK1SzȏιaK'Bs.y%Nz]`jbV⩽&38d/o{vo&Ư8FB7lMіTt9SCQ&[صÁ`;}߸s^q].)Uf-eFUF8G)/=-rڿƄs+ֆn8|TFro MA/(Ӎlwx{j_"vƸT[c9%1_1p@\smM EVZ_ޮeCrG\N&%$pɅm:p.8w|.>1!+,y [`as Ob Ug[;0TTgp4{ 6`>Z 渐j3{X?[XX}b^%w:w[cP9N(gP+HULeQKTmTV 5ΙK! fZyآI9p *ZѪ}l7d-3Z;ol]/ICoII$6gSd\\2V JauPPxe6K,o`*[f\5Y-,F0M(eDYlˋq*P($iڛ9i*cԨ1f9h_!:.[S][eMŹf&j#-^µRE^C^¹IºH":wnVEHZc$[0p66ꅶ^ZDWĭy4չaN:uh󰩇YG-g(Ƌ:5}3s?%Gdy$8^KAsdXmBݦB[Ld$TuԬ0V*L: )\f1Qf]AI 38p2Ƹ6X]1h miٻķùc "̫#SJt`,[c<@sHbGDdgeې6[svX<;ܤ<.2vhAsvV'&;+xJ J:pbs){4`a. og]a3pWՂЄ^ۨKG^[7pflh(gZ)㸵6 xD# &/14!mִ.1FO1WXЊ\3~s hb iʳof+ӌ[9RmFJNܧ^YC8> tZ|Έ"Qǭ.#2!J&^Sp6G&E./h3 [ &.40 9s^#p=+2uM05ڌK=\Eq2ENB.J "9OyEŹ|Qt)+hִ*q"5TFD:ʖa=dw@ʦ6f2>a'H#5Ood,vPi;uÛ[l.kÑʈFNjI2@jׂm\5kKg&` sH9VtShrir 6H%/x̺`rI֮Ww&`M.ޡ`֤*^]"Wz'3x伙 ɉHՇٙ+ED p891<`6 {Փmٗ϶f!;QΈvs*pԂy; 3eZxq?5k=JZ3 (78bђq"6gi/Xֵb/8Vزژd>Xho؄b&jڲ9MmRyLs1`hy-ۄy8wo}ŹnqKN6aG.qu$ٶ3|L35]i&u鍥r>ϪR[^` SX:R:s0zUsA`&N5^<צf;Lbpne1CɉVq,!þ ;y>gEc|_ZԶ{" ${0n5UɐN&p-щ_s3Iء,[,I66m,sE5ؐ,q^.8Yj(.Ƣ㘉Os 6[B^ ][aqӈ|sRxwBٍs0NOוw5S$$ߢ5e/svYF5gZ}F^9 }N|.&󄱂leA+ 7V4յw3(JKS?6838gtm[l+91GoQD[:ĭ5f>7ĭ'٩S] n"y/ 63u`"֓MUQ˽Y b̃kX=7Xtʖ?%[ {ݎu&n1Ns4G1ryum UMf 0('*njfc`U9s&EmIXi9;U|~gmf6zIqk*I=,s޻sq\kp݂&E\0z s!-1U!Tgmũ9ZQBa7kl?s/a7iVDI*t Fɷf^Zhl- zbk7cBdc1I05GdU9SjLZ& m߲^1NWo(90 P-(uf?vպo(XUjjeM4 kR-sc&;\]J E$ ($uD ;>r.ѢTעֆb 7'_WSS |X!-`:M$oe1zSI2J)йu ؊Lֵ^i-Kgj[˲Ǹñs f퉵?2&e,hfv-78:1KJ-=_@{TE{BBW9G`- !dMmF`މ#O#[ea0~fb]^D/FE#S{M4 fınhFEƷ9ۈ|6N>.ىEL̶5[&BfUÒU[:׆f, 2f`Pidl+NZɳwffg"Kc?(5CVNF1]W- ?u~j̡%\ߒ_1iQf]G-!szӠiصh3L0k/Rt |EJ5Gj3cFsFV}צF:޳4uƟ<(vŽ6j0+}6njD8眙5G3:*Zh42 9'G(؄37Ygfp%[<"U#mD@R [3.&q2oY]fM%mBɉ: ,kٷky$l[!gǗIoӲ󗋛8g6`%A`h6@M(ˣ-w2x 8[\ik~ \\0vYw[#ƤNJhb[TRG-& 2a1w}$ީbzFku?Suܾݙ 1C<\kY!f%ΞܺJ.&2]&P*clš>]W$a#̅ݪ1nEK'X!<3bdV$aڻ,:H(V`M[k{݃bWXZobDs6=/Zɇ A?$l Gmї/hIS #;f,'݁;6@JyNgt6`b׉  UsnQAsht[;Ӌ1PW?Z4*k&c2[ ~ W򩣌ŞuĚؔS!|ov~@ѰѢv!m&rIّ 3ըEp&sx;S$5x Tճ1]dy.'$bfX$Bҡh~IHLUZނuxm)3dvg{9ud|v]-m^qdƹ{?bˀs_)]#$ϞZccV#k l3v5-/Y mMp.-`>buŃ6o`XUDhFZ}&Ѭ.0\4[xp؁{gA{ -Ź8Eڞ`*"4s/p []8$*ԪJ3usjj+Sv=~NG~]c;lBtRʾu]a-z.uz8!1ngEDK8LH{v㓷5f"{7l@i6uE@941MiQlpsCݼ]r;Z̗NeѬU)$:[Dr"İl3r⟍4R0CsnfnQ^<}6MU$c@afzmn:I7s砲EGmel8=S'B3[L$Xkn =nm6LX/lU9u%Ń^5j3jVqn°l fc]ʽg-y6T}d?֝hc1jX;7󹶜N+pΛXKu0ԫ3[6݉9`,υO3xž.NV,SZ3vٮf36BwmG9/^VY7KX|.V$bMuVt3T ]JI_Q+ `zE|>gG ۔ժ֗gk :ٲs{-%f邶Ǐ9zצ!n5Ϲl̅-z:"K8k/,Tqr GkvSEU[=Z n8^m9gli߭觕aO'[p9PN]O\e$֙'~U1 2VKJD1D!3$/ Iz$/btWiV샿h֖8:duk'7e6> stream x_qŁ<[@#d@`"[YҮVb gn~bs"XЃnlv>uCyW;o}Iݳ?>+OxwgԠ8uuճXMCw/yŋX !6îh:톺SԠ|vH5vضJ#W(ܠ_xFP]N]/>i+xVEmtH͋xge&ϧ#n֩Ir@ևW=o:{wx_ဣql{7?pe}=ԝ!qkZ>iA1 T?sܭNju hĻ>@W' I1ŴXAkV̌ Kƶ>CS?qDč2Ԉ%ޘb48Խbbf.]sz9q\qN?9Pf}3աav -?98WaUN[1;4q3kR4`i)nR$t!Ĺ%)nbVj<450cqpxFsw5чr|Zo{@( īГ\pN|NW'Ѽq!,krƌ<,BR! J79U1Ţk)R^QLLNq]u3jp\[ypP{AE` [5b >$/S[~C[vI^ ␑1q-`Hv=gg+Ԫjb@p@)?R!y,üupgg*D9$I L y#h J~s:p!ş] g֢t,&@i 9z_B.fR ZIgߜЍ5IÂXcaЉ<ő3ӣ0u {qwpd6q/k#1@j(ZMqF۶r 5EU?%#\ș]Ôlr8V3sHR 3ϼ/=/OoBW-d`aܘCUj. z2?op<"3~Ut{5n c#s,u6Loj8t.0'U'=M&'!X\r^GX;Y:3 DlrY,_1s!Y֚]78pN.&1|M8gA< n!c݊ o&Fs3{^𝓙ubv9ݝ-sldeXeqzD*$[l,tG⌑v;v Ey}v![9v3αJƄ/i;nP,s? su 1/ IF1 $y;ꐃsL)YsgrlgmX"cη]SFrR4U낆 874#I4qVR/M(ǹ$nq~9ΙJުy= s<˩`yb]w v8d&̲ԍsaI'F`BX8_(N) }3sά/MH^XcbRĂ' <ʅ!l;  1}y"+6(Mj9|.!.+]8a4xoIj\6LY3,t`U(e鬦 6=f8W*V͑Bl&?;^Y.} >#r>qr`oE;-jǦ乊s&:1`' Yc ƨ .H 8 +u:'ySU''p)Xf9q+'fXc,'Ǹl}њc0MTNnÚQ&9bL 1mg$80,t]Bq`V\0Ƅ9:!F*PK 9fDO\ qGN<\6‚#SM] os&SpI6'_;MtÄu9Y܆iEPLXtg-3F#uHQ.xgѫO/7^0a (N].?đNS]abf\  :3Oىo4p~oHXe2ξ>ǵ' |ƾ21,kPžT'fy.C'V86~塨Κ2*YJt,Ivz03,%,!$^+l8LIO$C*\ML&[yF.4oce%9W9rErPmC6,Ce&+NG.nshVs) 8,g,ՅpΩm| $nEkv}-&BN+"q֨Xbe}XLXedVRǗ:`7c`H :Beʖa.d6:axA\v8S/;U(Nr='G;VNOd>)Owu|([X$ӓn2`d'8ky,s0ƹYq@@Yjj)G6QA+P+[ Lƚ{v}?yR9Yed]&ńY<2![-q@a";C*YjX(u.T?vk] cUC}xv SM^2f8eeHtj6?CS+#N0Gc|+]9,ٖ =Fˣ7rn5~NHus]Mќ?4Yc@Wby3 G~3Nq?T01|Nfw-,b tJR n\ngr&ęjgGSL1ljbXg%:SU6oa;3ͅ´KcDcǑ:n8 =3k~!OiX#fᜑ4lkv},FqzZL0Y'oas `CkLarfa)u5Ę 8Dz`6:l<|hςmjV! yWMV$X²/xiuƹ R]6S!b鱰؋QMqMBb ' > ៅ#C-WFh3 mLJK'oA_9)Gtu>Mv㍽mANl&>GŦ0|'7Y"У0f R f,p!1ߜ$lC 5ѵj#vQvXFcJ#ǢF?_198` g3!(u8: ?v'לhpta%kΆa\VŘ2PkbzӴ帕[%-Cl5i`1!,`AlbF)1fßP!yXa"gayi,y[o&x;efsaTo;U;gFsk]ó; Z i0\a(fg UV؆ȡ_r`g&|7`%, X/$ IՋ$9|dg|+l&:8yaNnYg# ٰ8кblαD.N#¡qIx`$P{뼇wD\QܪZsyS/,lxVN/~s!ط/$r8f0, <CIu9YbX=8^h,YGp#>tX縼݅).BЯ@p5m~3iJéLP3\Dt!F<yNGEʛ"Y#q9!9?%p̱y| N<+l0a03n9FIo OoFm/lPIT5 Kt;?ĩbN6wmxB\+9|8!BX^as \1?cGN˂ZNuG>:.B:![Pn5q3egb5.0H11ydUQw~8dv|7؃0 \8)ug$^#,_֭85;h8|Rw}{X4, kTɌ7^]:Kn7~57X,9^^(wcN&'8@ ]98ǟQ1AZ$1lK,-], ;3ag%8d\ UĹPd1dvf_]ׯ͜ 25鐴: α $Fw&a0uY:3ZQ-i8upm98E:UvXp#j8p+x]}ӛvIǩ+V̇4qB;6w@4hqu.}`` S9 ~Lw,3dP@vpYv9F4e{ɘ 1Y^XXڨblWH0v&FJy?c? ƹ_q,8Z nK1c?3XDԆr`4Ahdi BxWs:fN#, ߘum9 dhYک4O>} !C ,TrVq.U9 o YfwH̘q!4opɿxm{(<kx '8yޒc JL%{FV\C91ÄoM''CNTԫ®|k};3ȪWcr@kyS\@%_͚0e6ƀ,`hsq;ِ 3ՠiĸ̥Jg尼SY 70B#ֿ!XKq\u";m&HcO1C.&צcF``vKh3\;e29a\XyŚU;fOU ^NrXaXg;q.̘sb|~6Yu8m=s]c<26<2N'vf5NT:by!28uv MXߩڅ~^LJ0uDܳU]IN9Go|ʸY g[952\%~=% aCj=`6i1 p45nĭ Hu21Ma ff 3:%]9RG!}3zQ.k\mYl$99@z%3 8``B8ṁg@1<C^2`qf3_EN}VNVO6綹j/Ksϯ9LHX MfIU#LS9s2Tvmk=_!̸9 ûsN[gW!HSyعƴ([(98ѷu3:zdŒdmK s9c!V<;9Ѝw;3e4S;t>} 7EϷrBUž+>g" O F#BW"|c CP4 ak;̹8x{.['}āټgl{s^<GOf"ݽ|ôixqg<N=AV:|rs,Ozy]_[8ܺ*彫Ccyif}oæfآZ]s~sכsjY9j1y覛zH;pmTEG=?Q`e7=CDrioO@snPstH5qlJz^(e5AF5(=i=OO2spe}^_ӕ߈f~m[/&h-:,:$[|x5f\Rr_|]ݴ95_B' xˤv{':u`ϖNw[|6G_Qhzw`JYDL,h_&_sq8T3 >qV2Wi Wص_dv߻hq1DI0׌Q[8 U:+緂yt'H"21}ξ٪ ^qCj)V{<}Vuq^}j-9^cެެrd1—';3pOk>çPnR~zQ}7NJ@X<=nFEU?oQnPޢDEunQ"_Ÿ>mQS{RkGࡖG3U[۶gxgy}0=;?!#nRw5[YnV>hguDݰb>aVd ?qlT ;<7}7]٤fym^L<ŒDK,Nєt>d + ^Ɵހ?k2Km#.8u+_u[+g1Lm?> stream x˓q#|W6we} ; )F%zg2]U=@p4=ʯ2|_CyW^w߼ˋw翾ey7Ʈꚻ_9*q8}yOCqh꺬cqkj7v[}XEqhϏOT?Mu9}}uN-xnڶ<ǥ骝ZNwabyק6mVEa?Q?xQyi%0e]=4㽯e,?oZ\V9޵r,ScS[ӛ9 q(骔]WGǧqu_M=LksPLj=C[O}4ǪFu-.Cն;^WUvՌ:W c՝|մKw_?qdK'N)|z!a!~XouMs6ҴyuuU^N&q7+G +MVa*暧Ui}\4no· '174]]_4P5fzm|S_p퇜*pahx^I>WSKiqøþ?okUP13WN`OC>_\ˏ/ ٯ/]qz /'z՞Mpi}=oi}|'m/v_zg^Pbc#.^VkpC[*lW,z]ʻ[B_]_0ʃ(!fZvZY&g{' E ]fb&_nyӕ_vTNž8 e~7~ j2P Cؼ[a,xS 2;NKq1p8[в~~Sxs|Vʺ+ТÎYez5qgMY~ fY}XNjiRW|f`yL/ou׋׿z,bkv6̼9:Tw C踤Y%?/uYR/]ڻ 1>Tq?˗n?79ekh+F6yx8 ~<jޯ*'3clM9qox&?">~0U/=oH'CՕ]L[vP)hPhچ׳96+l /?E& XnzcOE6ЇwE ݓ5.{TcHD-8fecukbI8Cz 2t& {\̭Ôk.CyhB4ГKrAxj&@Z@lG[[i!Vۆpnݿ#g{uTlDb} Wނh#]p ̕t>-Rbhzn2@1K|inbI1hr[7 GB 6>&!*'l:}0a0|Zd8|?&yZj#{"pSŎ'W#N#^;;%cg1$Wn]’pȾv, #w ˼/ˆAK08! 5⬈Q5J-[1$!aWo:l'q"`a"E8+Ñ dOmvbIVfiח$]K%sF4}Q7fI"3pdU]q&cXkY]^ pv;#Npa증0n8Hdpx>bq=ˀj7GTf8i/vc?CF8!^$NX$@J>릿@BOY&̂ʱk,1ccuyI3L1NdGK ] SB7] ^1__4Krv8իBt {ޟ7⹁+~\~pF?Qs0Z0ڈsQ0JigUؾߍZ=xk. j:esczMU6} kMI_wʡ̬{blIz;(q:>54۝dʹ`w25{SYαFFܹ_fv`(u, :ȽK1YgT^}R=k`*S\cD̸pA=6o˥:SbOm>ɡeތ c8QzXB5IߠE?_j+fk\.묝WC>^UY|a7ug:\̹+=mΑz_se!;ύLƦ;:|᷑u/'CxY#%_95FĺuΩ܁:b17EY/9 э?88v:_\rꙚsk Ҝ"L y{B9.\҆6Yh9góΞ~FLZTeSe̫Hj37wƁ+:Mx68jkscԂ dRRY3lprxdcU,KL|JЗVnVDrnu]G:+>KЫSxnjib|1ޑ9:ofر]ͱɠ4zD %:UBgb&RVZos\b$9m6ss]@ |39ʙknUv msgps[uzf{=rm׵ nT&MurG@1s\RKnHuG3uf.ƾ >os3Bu@7u'мݥsza+>S9v dڬZ[)<ü/Yˌc~*9fw8ܷls1vfQϘ-6pSܜ5vy31V2L] 3xq| 3fGdz-rdu̝2m"\V#v^kL캬g#ˁuu4ueGpa?3;P´`{D֙ZY_ڻs(cύ#Yosu7|nsO9v+Y7`mz(y+YgoSur,1tH)gSu7F9.? 8y_7ٸ̶ºEz9\iuO9z%O97:3VٲܜUa ns%L8LΠe\XY\Z̸{=/Je:{}ND߇^>/w?^*(z}*7Uc\빮RٺڞzU/^ejjUW^ák:e޵vZh e$DOpyR9W# h׾nFm:rl'9lDo4#4SlE[0kKgI<e9} o ];K1{G|b{1p m@OS&ަnrYznKA^ `"Br7qX+M̪*:#C4[;8b1y+h++ʟX<f85e|A]L1uϬY `iOKgD~uѰ%oԭa@2PF 2 X\ $fώ[ݫaq:%Oe3UUa .3,p. ߉Q, I r<)Grڋr갊¯?aG1 rǬ9A޼uCS^d0;*t2B:,܂GHY `hW"S3qc$)U]z7EH[u3ڏMw3Hp?RX_ަ᧕]Qs8v5).Ww(h5Q;xQD #-r>y;J OV8'L,fGU?oFvǮ2pD+ ̠iexm%B*QQL"2ؖȳ.k +QL3m=.3)қQncfZ8MUnQrآu)xyY Ǵ_dKy8Ⱥ`Ը QQl1p3\ɜ[Ѕ;6?Cz \ؔXoEru#&\ (2Qî]Ix9SL`6EӋ1*̸`T 6UtaQIu D>:c.]0AER/ TOhyfj;DDډQ :cƭĤ3rb?oWz-L1gQZG 7ף4k0 دLor$GKQlrLL*?Y %Dguo{JCD/ ᒪ8՚FO^j=][]j"zF4 >&~x]_Zjbf r$&15ۻzzXf<ן~ӟ endstream endobj 427 0 obj 7877 endobj 431 0 obj <> stream x]KqʒlŔ+::cÅ(r\Q誤d-|34 ̹hp1@CEۈo[wOj/-1bዋ ܅nJ^{r+~(.h0۴^{q뛃<6^:u$R{5 5·]565T{Q廾޵],-@6u^L?K/mVp?^i*qxC6+O m(}x{y:HgXض];9u˶:#-o ߅L4)yޅ4$~fZO/'cJ}ؒɗ$ˣjM+R5םAQc MY}C8`3"uV5!54&R)a,4|}wˣ2>CH6R"1|#\v:c.Ghˇ.]mg?"zxH紣P<ٻnmD+ r'!ž{KFviO8;<&RIR}aG)yKrt 9 [uҡsn]>ȹŽ.["KJCqXM#R0iR$7&leI&;(e,6,g\0 X2&LRu&P)W3bҦ" VoQYe)W_ 3ѭب$\\r?Iǔ[ a$Ұ^Z+†̰^((lnCb c˲ +S:rk$!JRMɾm4[Wfg92 (x Ҙg,!`,n|a)vL D?\>Z*|Ll%eL`U^O`%m.NXPΪtRVz vz19]܅1 O[.v3ҲK7\` wmiax skՕ `CܕqN.,)f fx)g`4\v _6g8߯jţx]De|/QsRE.>b/f\7 4vK O۝êϰ>3wqĉb앝>O  s<>fZX])bӵM6'tثt>wC@b /4]uZ+c}v ư۾zp9cl.iT=e ˘/Ѱ3rSi cO }BT7+*k<ŪƆIS[k ӯFnlQn8K|w.b/W;7bCIT2l`Og / ;Ecb8.AP7ŏwKۀřH^F/FG0aW5TVc/f.NBk5ołՠj7^¹xw!.ob` E X dNvr]/ :3f4lhz$m?L7;7+ѭvyAj%ZuÃo܅OU.5;FiwaZ̎t~x2YlckF|[ՍS]xJ?%,ؤ:QqzU@+F\qk3U GCaaIիQ.Wd`#[.aIxy)/ZED6 l 78Y,igxyxuS6\x@;? ?kQ (HWr<2j\^A=JwQ`sN.~ar'kfU5?Q}~nCY(࡜TdN Ѷq+LcU FG5n",@Ѽ%,s8K-z͋ޗ񑷾"myP䀹 撲_D!U6ݘ>WRi= by/7QvMg4z ϛ9# &IBFE11Ae/0\B僳ۦp ls.wy;7֠dŕuM,ULoA󞩾묂X%Nv"nՋ`6Zkn`tjkfзֲYDY:|IJڍM^I=BZcmq~O땖6/:E1ͶYtSVDe#tMuG0 Q4bg[fDZJ^03fXd0c;Dҩ{wiA ;z@2SiZs^d ĬHTpވI@C%˨0sE~q^nJ03#TbKykGmE8ƤD]X$W)XBL?R>$l7z(P4I"5|GYΐrvۦea6&asVz Ϊams]e^s̾f YH2lOVȘ+57c;sԑO(Qj\"KI"OO42 ߆za/;'iGq]EN\~+RYB1ȸJk:B=ޅ50dnMx&Lb]2'142c1ue^uꂜ}S2{xe?mv-z&݀Hܛb35J5uidX*itj mQ>{M_jr*sRUi&vχIBj%0Q`틼Gy̻t2M<:=e2\燓94%_|W6siZy޺~e!Zt0tmGscپGr XVnm |:hS@S [/m mE5esXt~{amL}{b Al/IA׻-M.deƇۊϘN H'el~EI\~Fİ_ؙ@@P|F8O`/Nrn}Ӑ,O9ч>vz#z&咍1y>ӔK"v.035)Tsq2Q$LHdQ",l4V3EnbS^0"EdyXg߁>vE:fc|R: f@uE)1ի7ԻES%[BD:\1_q{.6j(^fNad)ej5Qĵklsؚ1-7sv7bJYVǀF`SnY举*OX_c7@мP~3( 7D,ZXxH ̦ [A(1 ysl~8K'DDBm|bAysw ңB4,諔NSPicGýMKH| ,'}8@>⽽3$ 'F3-0ƟkÊU_HQG Wr$b30\!*SGLަ_՝S>hqtJuCv@#/$ ]к1-9ohOutѮh7ƁFuhg-M_h9LGG8#^FL^6 'dFv8&q:Lܼ0)܄_;GA{,W+ynWkw"S1mY)) EL)c -/@|Trvg"L]%(_]*:)x;h"v?mWT]90U\qiekOB~`awp| >ˣgzId5wK/ (j_@擂຦\R]rֵ dU > stream xksUq&6\R:L2)-q;mS 6N{8h%yܗIJZ[iA O'⇋sut!P5᳃8.,s0mh8<;xiiKoliIC*B!Œ'(Ae(]Yѕq|lTAm+w +2DРcn'dc/~YHjYS@;\&tq)YY:fE|Phanue]Jۆ tلfޞ"miTKߊ߯AW=;Nvj$Ulʒk۹}w:Z'پ+zV7Ri*w%t?;+=ۣNCM"!&Y+nK-e j䡃"4|+")-<~ix/)EP }peV+*v[S0 CYп;*.]/?$N^%ev5y~.wNi0 ,/B>yuzV0vZ8<=ir4i72v sͭ5DFlFڬ!XaX>yCÅqdC1yZD 謡^ZR3/W̵ȿʐWoY`}AOz-?pC%ae6o8w(DENé@ Ɯ"]~VKM$[X)@od܁kpr?[օ`8*9 De7G JЁB m_LctD,!]20_o:?N`P |?Zԡ^FcQ@% P]FvZ.ȫҘe/ ޟKepsǰǭtu2o oiN2(VzkSa<;rwLA'Br. 1 1)1.*"o"-$SdW~,8(siѫu`{u{ 9Y)`HY-Ze˼^Ix+4 8}]yѺ@Y"N5nq2Ph+ 'Ny\Cq יz_#6zh+͉m Bl-eṰ(݆Z<0Fxcy-x"Ro"j-Os]5 j :p O<"L$Ӊ @{g!*~7i[ +fϖSx -L)/rt2,BӈCA-BCzJZ pڞN"czYF_b> MN6KSBWmʺ:6Bi۷ =t^WtrљUAU e Jڸ[(a\e=p0^Ʒ.J0&{.F8&yq"HjJI>\б)S?!1tO ܆Ϫޱl8;N *oPAYg5(Τљ|ؠ,y`9mˆ]p;2 w]؀ 0{XKgQW9&#NQ:ResLy2]T37IBhe~G~B;]LOh?Euzߟv ?>ڠjXk[sytэ? `45>v[@.,>AgZY'_Dk2jּE$_ؔFz'-еp Nn8dV ; RHt/׮VLA[#hppQ9t|PNgOTfb~};n ~j  /QV`NPa7 . |]g ׷*jˁDCw߅Ob17đTw;vFQЅ n1G"9i_!إ.! q- p /U.Q󒝪2/jl 7מZz(H(3VqWJKVnRҮS;&;Nn o1 U3/9s$YբMG_w)[;ޤ|gʗj@'qQ84R_f[Pl7bl^ RM q - i };_Ogn'e-&Ci9fL#gpgسC9' e!7r')]PX)sK.V?{&&q]qƘ v$cOeWp"8cF8_;3QWb7: 3jKK>rߟ<'0FXp12\jP3_F5$%q5!߳| ޛLÉ0}J_U7ZkUt'}ReHQ| bo/5_O| yTP* 0mq3bE^.|YeH: oܪͲXkybE5ڱ_WZrtY,C.k_p>]jh"iQYz)YFi1 S꧎I-嚛{eheو}=qi^AA~ KMyUcRk`J$m-QqOe`6qS =2JŮHf(jQlmofdB5"o@ƒCD. z2c'`##XA2,>R>#}8ɒi=w.In([gJz*z=cŘjAEx# 6[ ka[/g̳p)%ZCѰ~Q}›*GбzYc@!hO5FǏU5SťGU\Wq9^e,30ΔvW)SN$jpnÀX۟߫-8F;S(ý"~fZbgLJ ]w&۴C<:in߁YX_L3U76nj ~A7c&LoP^cl@GR,4W AKd{<> stream x\KsEW(Sx@.)*7$IIpůgw%<"vS=Y}Xs&< _ݭo?va%_o׎DžX߼YN*ƝZܭ~ڼL ] e=\j#<}u͙F{Am>Q)u盗p3֞)wSn=o^MdDkУGK.VF͗W2h&8zXaBn$OBɣLi!lÍ>^F1bB|]H h]bqu!W$Q[B0VHH'[Փ- qSv;Ѱ)+0Uw )hj,dLhf\D:0n|l5gTYx*ep I=Lב&`Ǻ7߮n8" 8 ߻ RX?WTМ%%T)-es3 홁xq,|WIppf{H-&՛76Bm͔="F;yE[dǂ2$+x> O@b޸NW@)'zmZ('5[cF6 ,<аwa :ZK΅ݧWS.pM;mnjоɸHR^{A3f,b%##HE~ o!⦪k!F8HsA :5uHm$-6x|^4Ho\3dM2PN?ܮoObgi+;Y KEO|#Nޡ|ox3r.\PnxU(dq\y}7}MHoȊK=7¨%^HrZ5r20i`:Ki&$i3ػ10X@O;~jk8o6HDYrgqް0$2Yi.,HpB㝢c:fHGoIgL:؇l/-s  O<ܦ͞S( #snѨ<>]Cp_6 y!G8)B)LQ:9 AqAԑ5;TZ.(!Ȗ1OfbTG+uZ煘r47pɃ႘L<6KpnR4YHnu:|V0k}!s\0C`(B1-\!dTRJ3ApViEvP`Ej(vDT8V`>*ctFiϑ(6g(ܸih4h$MvZXC.#LŨrl+cbKLIƹ*!sɤŠ%!:~ԾOb[TU R< }7Y}|MZǤ-f̐^4,qyf-dJRactڊ%E)x{o,6Dh}chxߠ&[]zp&h5$PSe é åSۿ& Yn,HzVHzVm|; v d`?`S2lCBͤx5V "z%HFN[+O9y2(&;!$7 ^I]$ "=$ц$|ByDE IlVZ48``RBll˧a|4=_uCӻ>iz0FaӐ³bװ7&<4Z{;Ab!B̳qx8*c8FQETk작{*N*G J[*IQ-ٵi?sۯ/'>iKO&UH]E"t:d5@yK 9Ni|~7*P}@m%/ IFNz3m:޲=a#5fX+v2Ճ[ ȭ;Sr0\ 6Dvgst4 Va6p ̳\|xtH,G]a}*sqC/׋,>_/X>e}'>r;"륒s;G_&2lr)GW[˅S>)GW5(r8{o4sP *QpP>A6vP?[;";߃QjEg3:UCdz ȯ'"ik,}I)~B<ڽǜ9羥#8'o,/Dݰҫ"|؆4ܵEow\Jlm5Յxqys+$ju"fܘu2"oeJ9_^OY}?Sendstream endobj 442 0 obj 2343 endobj 446 0 obj <> stream x\K$G8ίc$~l@ q5Al3hͯ'SQYYYYZ722_|_PL{ŗ㝼<}L{%Rǯ/K\_x^ *]| iwg6zu b\?"T]et~7Hl~d>ϗڅJ(VXW:ÆdW+ k#,",uCB.IXSv%Bzo~mJCxt~Զ>=hۇ?.+̩5$KG.dZ+_ZLEH bJ_NMúNiڨDc]I>J(ZS}M sV4 ;WEKG4/a8Vڗp,Ч? "#9ŵA/RR .=7t%v s4gm*'/1\m AF=YocK, Q5'X|Ed])@Rmhjkd&FۗJ%|q n/b<.y҃njcL!YЍJӶ4Lku Ў &#jCXKLd#2%<{&LcۭD76<1tC hMM`iT}Sc!I!-p44953"_ t~&Xhأq]#=\Huc ]a,^&&297A,^?s᥀{cN; JL ^: 3>haDC}@;kk{;%ſz.[>*f3cZ\\DC im9^aT\eV:n?3kWG 4b*A 㬏f{6ߥ6{p2aP_w"nBcMӡ(7͊t9E,it~6'ohܟ$/sTN+\%i|ln"MTls|I!Mby'cc؂__"Y҄ X3TvfI@o' )v̨P*oA 8|ͼ0z&XSU2/ɵap$lg,<9k˳Q8ob0B8 dY N׼hh|ӵܼ$QF|-c0Rѓ`yX=ڊY h74{{43E}dN[?;QWߦ?sWKkJ@3B9 Կ &jȚZ9N2$w`΋צ ck-xЉEP6~&&AB@9N7vЛ]e`oŽ!`hs<ǘ3%u<`H6ݦ\8;Z1F'g|Y檒uT'"jwuaܮD4O0}g'ԟKfZ&MvJO'7f9|ת1" +-䵷cur <-0+ `sܚ/?{=ԟNendstream endobj 447 0 obj 3087 endobj 451 0 obj <> stream x\K#9MBDp Yve`giד*ӒRR ƓV)ߙ_J dtOw;Xt#Kw+-ׇo{ǿKa,_ᣌ9V`pa 4 U6{WmxᔖL2*{D2|ls<\dR#Ͼ*Y\U%*磟QJ2jJ Ed@A-OUsEtݸ:m D* sgbʑ@$_ek~mƴ>*/ɪ4O+kv4[ϞhVә?ghr:Ovv)YwD#-ϳ"Xœ]jZ 7$9@)oӞ2ply.,):u5PWI\V,Ղ7D@5Li3BV?W!^aBD=QwDxZcJŀPQ(>}q/t!d*#M @412TjPQ8)C U@ZOZĄj_Z'͟]7-s 279R7!+gl?݃il>bv<|/4q\Lav!h_T+Il(`{%Yzc(X,yqWeytqJv-n- >)KC>D[T[LO>܍.S#b1$ ņi7Ap3&'aBS- 2 5ԂeHCd('m5tk2{AY\VLiCș{ Upw$Iwo=fp1C=]P{hw6t yXlݩߘbҸwn7\ȝ"0`^Z~Ӏ.`qƎ|4~B: U|769UOWn7~XŰWe4ژ)oH rَdZ-* w_vFc'!'^8&f2:ƨSEsHA.Wvgv\Fcj鉹?pǰ@챞N ~iQCNƏxs}~Yq&E?tct[^W\ٴWg)I\'1T9yb5%A~FV94E06E0+Xw83?fDڗ"EI%8nCrN: slG4Kb8N Erf)ޣҕm28gΏۿyKR>endstream endobj 452 0 obj 2646 endobj 456 0 obj <> stream x\K$5cm+i ! ]e3+lt&ɉt8_|H~9IN2Oo׻_Q ^*uza:EyUο=ƫpak8eT!ȷx|1OSFBp -=|NpH $Xm@! %ٓzF#) !Np~,y/:(`UdJ]ޣQ)QǑkBM՜PmQI! VA(krU@шpJL&Fڰ~xX*6E\E<"/_k>Ľ=t ڙE!Fiу6j)7_bWQ@tF(B5ݴ݈0*"r+/bkxj@LG^2O S<}U1JzcΚ pKba9:axܮ]taʋZr,w?P|_}\qހ~rU )?Z4Rt\6rRH)+.==! 5g%y %Qig"ߪUtVO2TJ磅mp*fgZ wx}L(Q,}&SiW_ᶱbQ1O6VnNqm,<嫑 H?٘8` GuHHg Fc~O8Q꽈Y׭6F |Ihr%)1> > P mmV~lᦒ{,Y1!|$4KV?^B"-9d+ $pJ&Fi[աqF*U` S84G`@]feYt̼TO.@S @9ؔ ֛r[>0Xf[E; 0M*" )Pl%$3źNnҺ_AD8OR u\*"Gb*"/Zi4 @/n A+vܘj^_^ҌCA)85 VԱ s"m(_0=6,ZEvTvl sPHQWT|%X{DS+FdHSTR-8u"ɠUۊ:NZ@^^FȒ:٨ZwO@FDL]j X^(8kȮ'9CShHeUǴQ4Э3šX >JC -[Љhh4R_O$O4'; t0BOZ)eW 27]b{OԒUOE5f!z+)t+AH5uiԒJ}]֕]"1;5Ǥ0L]+J[6NP}i-4#rNl3)wyQB =7 >4fNps@=a8*fprte^*`>M1MxE Q<')g;Pf$ҎkЊNV,p;#T!D l>l@i9=']XփzAm*yù(RD(LIfpDh5K[ ʾr jR2Ul䘺dL5#R MӪ5VSaYLEe&^)RvD+N3xjTx`|"~η91|oU:lKpN _.qw,P[DY^<ݽuR[ ,y5qƦ/|󏔼Is7Q4YC|dp> hɡ HKmdTf 1T*jz)ms[X ڕ(,c=UG^=3ffk=?(PRrB_8zrہxn  ]77]38c+ܜK{]-ֆ}FQ$h4Ie*Lc1sϴu*#.&QLT^fe=|{O& ̲mZr Za~j%S5y*:5cG+$c:|@ŒB3[koP|0*bx'w " ʹ6MYë.)lQoSjU|ACCq{zԢF ?p0W׭ A@^7p+\&q?YL0Vhl.׈tXGuU*^8kzK{Yz5;WEY'N;X:JHNO&`*I ]__Teendstream endobj 457 0 obj 2537 endobj 461 0 obj <> stream x\K$7ϯc z?\@Ye 6c~=l)SRWZJ :g ?=ÇO_A :}XI6Bs8>=|9Z>J !|u-|_CFNiX |OY}[^N`$_>6 %dяMq/ CbD'toяYd*bhB F x^]+.?f*3~lC X[I.AX)Xb6\dso&5ׇ~ ls*RJ:Y2ǕItF NL8}eR1qb"J-+Ihz+bѕyoա0o\~J*HGs>8^|MXEY{5Za^Z@RD; ]<W#m?ggwnZ *j=-Bdm *E?G؞&Љ"m8CFlT ]:9]iݕ01)kPIe x+IH 7p$\Drz?Ak Y={"YKQ RR]m4!61oD2R*W8'}4g=KZ@8>7%p 8o^^&#!eRr̋pzpZ`*Btꂮ][LF(w<"x]:̔%]@zP浝Bn JC .#ާvM #Ld P@$$f#.|*|Y,a6%4DNRyKM66n2OV0ZSݿHڪF}6θKeֆBF}/ |vZbКTiXB?"+#CQ ImRGb*);5V3A{؆3AQTŧԮvwuy\w'G6u,r;*e< 2C .+H髳})jz2@ s"6*ӺJ+9"6PBUbFQ ]NœC\A/$[>pKҫ>Ys#AϠPrFxW imAhˀe]bFS)ѧ^b|f2<U )-E( 8)olčvV=жDz1ܶ:L/ƫճ=r@??23~c巈Z/3^PlU$CZJtNB}L=w0,nQ=/RB(m}|&y^{ rt'^C63'@Zӎ)b2 jGV-X^eџ$82j4>T-JQ5fDyl1kklk!]:_l^-tRF3+$|w1ʆDc4ivZrV o=E3L;zSPOh =\n͹vyf'㿖pdWڙF* zF[G'[e:o[_1ր#,X hmV(b<>W\p5wT$A7Fnٚ kA3mm@z;T#'Mm|2vh[}T)'^edB'0\+3]ZA s{P;B$KoQmz6">5N6y͐w'~j-q@ac;S?#ћb!Z69Vtt:ko H9>Gx=fOj rϻsf PɌI=IJ[| b\'j +hϨf@d-^p*i(ȱy[]J!O ĕnD x|}h7dyo~ɓiۿe~w""JiB>ޠh$bvƜabkogF:,X#7bNBTѶ9{<}o(Wendstream endobj 462 0 obj 2648 endobj 466 0 obj <> stream x]I䶕Ou,}e{bi m`xD@( a;\-9X&n"Ƙo1´5n,OH$|1gam`È&d`KN`dx")ce%9#V#["D9Ո^wRO[ƇQz̦8_;S+k_b=yV"ʿ'V=:KOқus3;z=$ ؛;"u_Xqi-+~I BVD:@Zy},@ HW?hLD1Iu=Xťpw {waI$gur1w}QtHEy;=@/~Io{N8a+[2 (5FSPnߴpǭ/uԃ)=5.kF#1r6ctƮ8EeD/z`#SEdu;GΟ(8\uS5ႍ$Xa1ԧGwf ~33ΈplV;;[&KaQ`$ŃVk9ہu:EXuټ[ sfIK>2;g38[ 78{ 5S!x.kBC /%cf5Cap HϬ=OK'"Ng ,ʊM΁Ht!o t*WLkzL! ȗb)_ [L3Y|r49=¯1cUD9%=w5uB0LԕyD{tù%X5FV9=dJԤi"b6BOu_6f98 Km`^w g.-5j"+tt{t}tkt+t!?VL`]V)2"zW )m|ENȖh2s,s1PHE alNуJL |?=E ˂1+}=s;&ʯ#*סZo૜ $[ Ɖ U,u,q%&??`3vPDLi8׭uGia1/!%>'=?n ,&6?MZhAO/my9%Vj2+6nNd.Zd C;{I,aUVp[b8^ƜBŘ3DUo+ΰrץ+ո4Av{ FI\:\"pJ\JTۈӳf̾5ޅqg2/jYѭԬp6I- ߶wqNiT)_BE:I1X=TMiueRz6 &"P22`d9]3ʉZr u\ezxlĈv2#\D1+,uѦ O,֭,7 q%ٸV׌=&>}Zunb O.23{uYkVj8;+ajZ͖m O2_srN8j,s*vbCp+rb*8h$HzqEĐ8Z>~G<dCcA.%qp -M™Ihmʴ`*}Bh:UvNa <.)XB 6+f5-a{uN#9Yy)_8 &h^[SPZ@L,wF3vfZ#7@vWyQpO_q8,T 3N29A XJ*ax[4WOΧpԊ(PJw<_q>]]ng/$5PJޯ SWîROQɜwq;]l 5 8h}C+빺F/*Xbu/m8Ig^!.9ZMaYMc"`pޕ>Vt*ߕ< }N/jՇhe1f_q s*_M'4m<_Wۅ**zHƋ6婜T ujčhԗ- PXYV1W zlW.jB;Og~D&?Ș zAt˫6.gLLČa:- 2`h)0@uŽOl87PI0jBZC \ί윥*lyŒT\:"iF̬wK#D;٥9ۗDߋ͇s@ߎVO3}'H=84M.0$:U!|/ffKwC%;ٰPE|:ɍ|9[qE_Vq)d+ fȈD~nA"6"1+Qm zmqL2ߖ:%Aqx:OG_q74 YX䉒>ͧAƶXi®1|͓nlfK8Krƥkx=$|Ԍ43AnMUnW Ƈ.x#(&8OT)*QSnۚ?߶ R- )zmn-~"W, %hsQϜ[bt}dtIY Ai"U% Y8ѳT+uB[ >bqjAz~Q ؗ00Yc@޾zsB0*oN)wxc$P RIpRvL KRVngN[)())Ё5VpjRajy wlA(;±M&!EZ!(1a GǺӴ#ZߗuYtbW4G Y/U^*2TB6crpnԉјY`]~z$h}7p /gK>;ʨ3JpLhȎjv' -K(Ʉ>@ fJ]՟6endstream endobj 467 0 obj 5504 endobj 471 0 obj <> stream x]͓8vO?!M]5G.Me/{$lL{f@ (Qlx%}|6wO_^ѻWŪvx;Gݽ~~9{g Ԉ_e'9i-R#%G}nv@T05FS'\V4D>|p)~Aۏ@Cp(꫟|TTͧ #-sRM2_S]Sh71I4'E#53DS) yz͗zr7ovlPT;CmMn8jZ26qe!q{+P}'4WzX 8imXD10Zـ(%\3Ķrj# -Z|Z]Zu@p/3Iхoė=$FpWA0mP&I0 !64OD|гiMZN-2`o1"#:X$cDO?~+a8;~'qj%2TD76 ofo D}F4O%HMU /]0TgvQ ._2gF; |cplH!j\`s~(7T2t rbnXZӌHš_X$jL?׹OpwYD0zb P̵r۞?מ3BAL8Ÿ_[f9+WG12xRx< NMrY22J>g:үl7}Ჺ]:m(ĀUi;sH897Ύ X=@2A5C+|݂)PŤMCGS+'ŜU, V[ u99JL1z4vUfr(:WғH sJkK8[ʜ9ȉ SuZN3E4W{~m51.UuU@#5fMq6 Q%)9hXdޮ5#⺜M\ҲX㤕j7Uod⨜p;J%~,R鵾v*w/ ~opIҊ\uPeg ݳ\nV'iM67LQy'b BU> las$V[G%xwհ+ Oh¤LATj>VU#h5Pk-N=8@ zV#ʲ ,WѺrL+(hUqe?.MoSWmN~ DG[ huÄq >&8yBW"43N96i-$gbg Pu;=⧨`Ưa{\Xg_P0si3F,}p'pusgbo]#Z* ZHt 1U8dyw:&nRm>Z.A 9iN Nqb!"UJt1"v Ҿb#}l "R;Mvb++P-rBCش =gĊ*4.rL+bXo,@8;čTNQ=?82uEEF[zԠ_3S` po*x֤0l{0\<,IhBC?MiCsڇA)X+I$<^#Wr5PbDzl_Ϩ R1Hq=e1A9QlCYEГ.`/vDh_YWa,]zU{>^Uf {U8^6ifQeK+Í&RSh D39NVbOozWtGEi[ҽ?FH׳dhX]c9o,S48k,ղ'S*gA"2Sr`Ir$=(+֝/\u8 o 661Q\eg.N:a տDMUAJ}\'(CrE=xTN<3,wq /_ j&մS5V>x*gl<}7w/Ҩ_̧@A "s=S #?'p=1~F5s,"yqVrt5_{oSs|A>?WFۨ, &ɬ42|,J sȄA^F}վ`k3bn l+zgq8c[+Ts#>'(M?q   [w4kspa'ޟ5^ V(bwIc BC6bڇVUdZ9z,j\\p12V<(^C_q'"R t0"! ؘ#ҥӽ>n)b&\ZT=g!b%VD)6&<>5zgch,`f _hȔ(m$K Zj05\JET;pUV"5 ?|Ǫ%d5 KA!KtˆJ4BϤB x gT1S@flJ,\uw]fN0&u#^X$CDZc]$C&NsrIW sud0l_MƈI)><Ƹ; T)̜= ҋj |d4l&[ qkEb jK+> UȐ(>wE B޲YH"U<B`G-XJj9k+DYZ|{}'XpD =&Z3s41Toz ƊV;l5hIB1QtKa8TʛX}?[2T~Xy0cwꍳu%\q批d {UVMIΊq[n;Inǽ+.[.FcF`QƇڦW1јя U p ů}+bH-e:\]YӢUΕn-$fF-\?o#́VķǠ~C -@RpMlp KE[= ^1n33g>~0<+Jqf-s( GFO&ec_!?3 bb&B= 2S+Юqc,IcF] ;8lS-|Z\ù -ȆPaM=ʋzFy )OLHG?Jƈusn mD@BM)$zJ{ V ٬W. ZÚe:`3V\nf.`Ed{vYUR MB sPӖeUJ 8K3Bt>bDO)mݻQ0= e(1vo-:bOJ[:F%㬣J["ܵ3pIu6)*>f0ޞȃ0ZvB[b2g&Iw+>H+ a/yfkC:|-ا1!*z-ݥ.Ub 2~¢\$+$=nQ6F82)Be6%j}иWn镖BaX=T\-ilt--Y^)-+`L&4/#SӉ`Q.À4mdxJ&% "71XfyK"X=Xf K8kDOȸZq@p9\Ku(}z\Et/uj"̄Di.mAB%P Gf/k8;M8>),Z++9`6[HXJu^DOjAZ N82pIiU#*f43g2mmz)zehEXn*ٺxq97A O:|NU`#p]p83TFaQ&Es_,rv2*vIi;]Qɢ:# %)۔g82n/2gE[v–Y/\J,b״:(,&7| lv՛PIڞu CWEB~kMVU{?qR7?߿(4ʈ/ rHѳ@ɛRyՙ% ZY>c'?, aE1jM87CZOG?)k?79k}.W 7.wb {R([Ug:Vv=?/ay+7ah=",*\gE3,UԱNqܡ NvGTuAy ?'sqΚDU ~wN?Yd8/$lqnm:8>MT4&90eg{ ܫG9H$;_PO*_,ݐNib ѧ@mwf_N`c>k80qKgAm"=E(KatqqZrs!O ๾oendstream endobj 472 0 obj 6093 endobj 476 0 obj <> stream x]ˎOKf~& A @Az`=ӏ·{sIIDZ%۲EdRɣsmA [P`o>\~0pDHB].5bqГ%Nka}OALB7߷P'|a->vť#Vk--sR.å0|=??RQWajwIwr-|=+mAUGcz{GF-g? _+okN'4lx]$369[ԏ\8W TDzqz֍6yd6,^Bh D5<⛻ZRkVZgo3M[m{"\ְZw{8w!,X녔8׸/¥0Z\D ʪ@" (8`A&bxOmi>MVf}/B,vj _O3~t)Vq6ņ0`a0^Ć[EHWp&fZv(p8Q׈x;iZGqs}mrka4)[Ʊ/І`fgY>.A/SI#!"7&V8+`yESvCH`kY>MlS Cv+ y<4d(Cv@! zie,,%0ݾ;~YBןm$ɸ^^$=T!WFMkNY"`c%M̈5O㻟Kv.iEAx!9X<WOUW-#ļ=zJ*Eۉh=s=y/_+414)ar/}GL <ȟrplEHykr>pOxL%2*y#0`9WɶݱdTӼ> dry(_F:s /qs>͉X#_m3!7"|1q4ﴋSr4{E̞4D:ևbm/n+nfk R_EC=~ ii-.j2@JK!(@07cwiOU``]UMMc2GոwQDZB>o4$LR :F1u؉?bc&3fs/ 41f ,ykwx-% ܈͜؀sL X }qQF&k0(yvJ; 3>k0{.|('aO ed4m(v }bz@ɐrEk̨ns Fl"Ǎ "pp711q|hI. "ϒ3J:NC%刑U#;/4o9M0[91~`rLv K/dJIҁM |avph_ΩBdJ\Fh.S2uF?%N6u[37^~Ư <d`MSQxz:t2ɔ%^6h,1PGFܒ9}׈W0@'({8j֓ChʽلH;:5Lapm9*bf!vk @Vz^@"*ˁo0M9g:\\d.kL,VzwGʪ*h9Bn)*ѐ@[$7 ށ# S rf/ԂpVF,!YMQ[Iuœ [㫶̇k-FTAav?!D o| XWɎ({'6:9{*D0<ֱ2 :I[m0MeS(qFlD-PͰS쀚Hy#o/;ƛK~!LM8Y |d( TA|"sʼnDh`6[x?u}9ݽpap$Byp7 YBFg]lgi 8w(*'Rn<b'009ɸ<%Éu|@L\l4 ɛ4ءĮI#z&7OGދnip]/Cq&z2׺4CPp O%3SRa80=K5ecQeMXx"%@[R7<\ҸIPDM+-C_eH6h eJF{0DUD@AJ PE auO;uLaMtfu<9;#|)DL|-d$;mfwRqG˵x#c\8lXU#iLvDL~wH77ވOxAE P IRTfBʍ<̾o`:]7g*ـSHH&zoOВH=vU.|o6>NAul'2c▉jlɸB~j%m2[g Bfvj`ZײUK+ nLvX0$>M{4P2*g8GV;+HNmQ%6*xX|ƜkH3ln؝jEn{K:؇F@bnWA>BvT%k|8fl&ê7*zX}ɛ\:c=:fjY([tя26>h 55c\=,M3ED3ۇ@W39@wEIvʁMƼܟ $qa" I.Wz/" y4nz/¡0ŸO*n0]˃/kKOc˒ljn^/*m9?`!L;M8vNힶw.ϳp-Hz.ipUS'(']5Q 6$;7$#Na2HZ@TY?QfHԞD5IlcٮzPNvlJxkSEf=xs6xQbsBa2Ũ> ܻ[Ơ1wE=PeI_ px`1ʵ'|?MaιM^"|%{yc5E5Z4dH<2="j!j92HZck΅FZjΈ̝ա(^+M޸JvԁWB!V]RП1\t߳pG2nFYќfe*MJ=8@/8-!wo,bRJ<@|ˉdz*١3?zE' %jsU78E:0`@!K2bTL+cq jN\M/E׋Le،291ycxzZcT"E8#ҥ]?Xendstream endobj 477 0 obj 3900 endobj 4 0 obj <> /Contents 5 0 R >> endobj 15 0 obj <> /Contents 16 0 R >> endobj 25 0 obj <> /Contents 26 0 R >> endobj 34 0 obj <> /Contents 35 0 R >> endobj 39 0 obj <> /Contents 40 0 R >> endobj 45 0 obj <> /Contents 46 0 R >> endobj 51 0 obj <> /Contents 52 0 R >> endobj 57 0 obj <> /Contents 58 0 R >> endobj 63 0 obj <> /Contents 64 0 R >> endobj 69 0 obj <> /Contents 70 0 R >> endobj 75 0 obj <> /Contents 76 0 R >> endobj 80 0 obj <> /Contents 81 0 R >> endobj 86 0 obj <> /Contents 87 0 R >> endobj 92 0 obj <> /Contents 93 0 R >> endobj 97 0 obj <> /Contents 98 0 R >> endobj 104 0 obj <> /Contents 105 0 R >> endobj 109 0 obj <> /Contents 110 0 R >> endobj 114 0 obj <> /Contents 115 0 R >> endobj 120 0 obj <> /Contents 121 0 R >> endobj 125 0 obj <> /Contents 126 0 R >> endobj 130 0 obj <> /Contents 131 0 R >> endobj 135 0 obj <> /Contents 136 0 R >> endobj 140 0 obj <> /Contents 141 0 R >> endobj 145 0 obj <> /Contents 146 0 R >> endobj 150 0 obj <> /Contents 151 0 R >> endobj 155 0 obj <> /Contents 156 0 R >> endobj 160 0 obj <> /Contents 161 0 R >> endobj 165 0 obj <> /Contents 166 0 R >> endobj 170 0 obj <> /Contents 171 0 R >> endobj 177 0 obj <> /Contents 178 0 R >> endobj 182 0 obj <> /Contents 183 0 R >> endobj 187 0 obj <> /Contents 188 0 R >> endobj 192 0 obj <> /Contents 193 0 R >> endobj 198 0 obj <> /Contents 199 0 R >> endobj 203 0 obj <> /Contents 204 0 R >> endobj 208 0 obj <> /Contents 209 0 R >> endobj 213 0 obj <> /Contents 214 0 R >> endobj 218 0 obj <> /Contents 219 0 R >> endobj 225 0 obj <> /Contents 226 0 R >> endobj 230 0 obj <> /Contents 231 0 R >> endobj 235 0 obj <> /Contents 236 0 R >> endobj 240 0 obj <> /Contents 241 0 R >> endobj 245 0 obj <> /Contents 246 0 R >> endobj 250 0 obj <> /Contents 251 0 R >> endobj 255 0 obj <> /Contents 256 0 R >> endobj 260 0 obj <> /Contents 261 0 R >> endobj 265 0 obj <> /Contents 266 0 R >> endobj 270 0 obj <> /Contents 271 0 R >> endobj 275 0 obj <> /Contents 276 0 R >> endobj 280 0 obj <> /Contents 281 0 R >> endobj 285 0 obj <> /Contents 286 0 R >> endobj 290 0 obj <> /Contents 291 0 R >> endobj 295 0 obj <> /Contents 296 0 R >> endobj 301 0 obj <> /Contents 302 0 R >> endobj 306 0 obj <> /Contents 307 0 R >> endobj 311 0 obj <> /Contents 312 0 R >> endobj 316 0 obj <> /Contents 317 0 R >> endobj 321 0 obj <> /Contents 322 0 R >> endobj 327 0 obj <> /Contents 328 0 R >> endobj 332 0 obj <> /Contents 333 0 R >> endobj 337 0 obj <> /Contents 338 0 R >> endobj 343 0 obj <> /Contents 344 0 R >> endobj 348 0 obj <> /Contents 349 0 R >> endobj 353 0 obj <> /Contents 354 0 R >> endobj 358 0 obj <> /Contents 359 0 R >> endobj 363 0 obj <> /Contents 364 0 R >> endobj 369 0 obj <> /Contents 370 0 R >> endobj 374 0 obj <> /Contents 375 0 R >> endobj 380 0 obj <> /Contents 381 0 R >> endobj 385 0 obj <> /Contents 386 0 R >> endobj 390 0 obj <> /Contents 391 0 R >> endobj 395 0 obj <> /Contents 396 0 R >> endobj 400 0 obj <> /Contents 401 0 R >> endobj 405 0 obj <> /Contents 406 0 R >> endobj 410 0 obj <> /Contents 411 0 R >> endobj 415 0 obj <> /Contents 416 0 R >> endobj 420 0 obj <> /Contents 421 0 R >> endobj 425 0 obj <> /Contents 426 0 R >> endobj 430 0 obj <> /Contents 431 0 R >> endobj 435 0 obj <> /Contents 436 0 R >> endobj 440 0 obj <> /Contents 441 0 R >> endobj 445 0 obj <> /Contents 446 0 R >> endobj 450 0 obj <> /Contents 451 0 R >> endobj 455 0 obj <> /Contents 456 0 R >> endobj 460 0 obj <> /Contents 461 0 R >> endobj 465 0 obj <> /Contents 466 0 R >> endobj 470 0 obj <> /Contents 471 0 R >> endobj 475 0 obj <> /Contents 476 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 15 0 R 25 0 R 34 0 R 39 0 R 45 0 R 51 0 R 57 0 R 63 0 R 69 0 R 75 0 R 80 0 R 86 0 R 92 0 R 97 0 R 104 0 R 109 0 R 114 0 R 120 0 R 125 0 R 130 0 R 135 0 R 140 0 R 145 0 R 150 0 R 155 0 R 160 0 R 165 0 R 170 0 R 177 0 R 182 0 R 187 0 R 192 0 R 198 0 R 203 0 R 208 0 R 213 0 R 218 0 R 225 0 R 230 0 R 235 0 R 240 0 R 245 0 R 250 0 R 255 0 R 260 0 R 265 0 R 270 0 R 275 0 R 280 0 R 285 0 R 290 0 R 295 0 R 301 0 R 306 0 R 311 0 R 316 0 R 321 0 R 327 0 R 332 0 R 337 0 R 343 0 R 348 0 R 353 0 R 358 0 R 363 0 R 369 0 R 374 0 R 380 0 R 385 0 R 390 0 R 395 0 R 400 0 R 405 0 R 410 0 R 415 0 R 420 0 R 425 0 R 430 0 R 435 0 R 440 0 R 445 0 R 450 0 R 455 0 R 460 0 R 465 0 R 470 0 R 475 0 R ] /Count 88 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 13 0 obj <> endobj 14 0 obj <> endobj 23 0 obj <> endobj 24 0 obj <> endobj 28 0 obj <>stream  scnrRGB XYZ acsp, desc`wtptPcprtd rTRCt gTRC bTRC  rXYZ gXYZ bXYZ descadhocXYZ ,textnonecurv '1;EOYcmw+8ER`n| /BTg{ "9Pg/Id-Ki)Jl@d"Iq  > h  B o ' V  H z  F z P,eK9v.m,l1t>T)qL,x^I8,%y#y & } !-!!"9""#J#$$`$%%{%&:&&']'("(()N)**~*+L+,,,-Y-...//s/0O01,12 2}23a34G45/56677}78n89`9:V:;M;B>?B?@F@ALABTBC^CDkDE{FFGGH,HIDIJ_JK|L LM,MNONOuPPQ2QR^RST$TUVUVW&WX_XYZ8Z[w\\]Z]^_C_`a2abc&cdwe efug ghyi&ijk2klmDmno[ppqyr/rstTu uvw:wxynz+z{|f}&}~j,x=ʅY"눵K䌱Nb5 ݕ^5 暿sO*áaB#̨|bI1رIJyhWH9+źƶDzȮɬʪ˩̩ͩΪϬЯѲҶӻ . h  B o ' V  H z  F z P,eK9v.m,l1t>T)qL,x^I8,%y#y & } !-!!"9""#J#$$`$%%{%&:&&']'("(()N)**~*+L+,,,-Y-...//s/0O01,12 2}23a34G45/56677}78n89`9:V:;M;B>?B?@F@ALABTBC^CDkDE{FFGGH,HIDIJ_JK|L LM,MNONOuPPQ2QR^RST$TUVUVW&WX_XYZ8Z[w\\]Z]^_C_`a2abc&cdwe efug ghyi&ijk2klmDmno[ppqyr/rstTu uvw:wxynz+z{|f}&}~j,x=ʅY"눵K䌱Nb5 ݕ^5 暿sO*áaB#̨|bI1رIJyhWH9+źƶDzȮɬʪ˩̩ͩΪϬЯѲҶӻ . h  B o ' V  H z  F z P,eK9v.m,l1t>T)qL,x^I8,%y#y & } !-!!"9""#J#$$`$%%{%&:&&']'("(()N)**~*+L+,,,-Y-...//s/0O01,12 2}23a34G45/56677}78n89`9:V:;M;B>?B?@F@ALABTBC^CDkDE{FFGGH,HIDIJ_JK|L LM,MNONOuPPQ2QR^RST$TUVUVW&WX_XYZ8Z[w\\]Z]^_C_`a2abc&cdwe efug ghyi&ijk2klmDmno[ppqyr/rstTu uvw:wxynz+z{|f}&}~j,x=ʅY"눵K䌱Nb5 ݕ^5 暿sO*áaB#̨|bI1رIJyhWH9+źƶDzȮɬʪ˩̩ͩΪϬЯѲҶӻ .> endobj 32 0 obj <> endobj 33 0 obj <> endobj 37 0 obj <> endobj 38 0 obj <> endobj 42 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 54 0 obj <> endobj 55 0 obj <> endobj 56 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <> endobj 68 0 obj <> endobj 72 0 obj <> endobj 73 0 obj <> endobj 74 0 obj <> endobj 78 0 obj <> endobj 79 0 obj <> endobj 83 0 obj <> endobj 84 0 obj <> endobj 85 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <> endobj 91 0 obj <> endobj 95 0 obj <> endobj 96 0 obj <> endobj 102 0 obj <> endobj 103 0 obj <> endobj 107 0 obj <> endobj 108 0 obj <> endobj 112 0 obj <> endobj 113 0 obj <> endobj 117 0 obj <> endobj 118 0 obj <> endobj 119 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 128 0 obj <> endobj 129 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 138 0 obj <> endobj 139 0 obj <> endobj 143 0 obj <> endobj 144 0 obj <> endobj 148 0 obj <> endobj 149 0 obj <> endobj 153 0 obj <> endobj 154 0 obj <> endobj 158 0 obj <> endobj 159 0 obj <> endobj 163 0 obj <> endobj 164 0 obj <> endobj 168 0 obj <> endobj 169 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <> endobj 180 0 obj <> endobj 181 0 obj <> endobj 185 0 obj <> endobj 186 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <> endobj 195 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <> endobj 201 0 obj <> endobj 202 0 obj <> endobj 206 0 obj <> endobj 207 0 obj <> endobj 211 0 obj <> endobj 212 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 223 0 obj <> endobj 224 0 obj <> endobj 228 0 obj <> endobj 229 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 238 0 obj <> endobj 239 0 obj <> endobj 243 0 obj <> endobj 244 0 obj <> endobj 248 0 obj <> endobj 249 0 obj <> endobj 253 0 obj <> endobj 254 0 obj <> endobj 258 0 obj <> endobj 259 0 obj <> endobj 263 0 obj <> endobj 264 0 obj <> endobj 268 0 obj <> endobj 269 0 obj <> endobj 273 0 obj <> endobj 274 0 obj <> endobj 278 0 obj <> endobj 279 0 obj <> endobj 283 0 obj <> endobj 284 0 obj <> endobj 288 0 obj <> endobj 289 0 obj <> endobj 293 0 obj <> endobj 294 0 obj <> endobj 298 0 obj <> endobj 299 0 obj <> endobj 300 0 obj <> endobj 304 0 obj <> endobj 305 0 obj <> endobj 309 0 obj <> endobj 310 0 obj <> endobj 314 0 obj <> endobj 315 0 obj <> endobj 319 0 obj <> endobj 320 0 obj <> endobj 324 0 obj <> endobj 325 0 obj <> endobj 326 0 obj <> endobj 330 0 obj <> endobj 331 0 obj <> endobj 335 0 obj <> endobj 336 0 obj <> endobj 340 0 obj <> endobj 341 0 obj <> endobj 342 0 obj <> endobj 346 0 obj <> endobj 347 0 obj <> endobj 351 0 obj <> endobj 352 0 obj <> endobj 356 0 obj <> endobj 357 0 obj <> endobj 361 0 obj <> endobj 362 0 obj <> endobj 366 0 obj <> endobj 367 0 obj <> endobj 368 0 obj <> endobj 372 0 obj <> endobj 373 0 obj <> endobj 377 0 obj <> endobj 378 0 obj <> endobj 379 0 obj <> endobj 383 0 obj <> endobj 384 0 obj <> endobj 388 0 obj <> endobj 389 0 obj <> endobj 393 0 obj <> endobj 394 0 obj <> endobj 398 0 obj <> endobj 399 0 obj <> endobj 403 0 obj <> endobj 404 0 obj <> endobj 408 0 obj <> endobj 409 0 obj <> endobj 413 0 obj <> endobj 414 0 obj <> endobj 418 0 obj <> endobj 419 0 obj <> endobj 423 0 obj <> endobj 424 0 obj <> endobj 428 0 obj <> endobj 429 0 obj <> endobj 433 0 obj <> endobj 434 0 obj <> endobj 438 0 obj <> endobj 439 0 obj <> endobj 443 0 obj <> endobj 444 0 obj <> endobj 448 0 obj <> endobj 449 0 obj <> endobj 453 0 obj <> endobj 454 0 obj <> endobj 458 0 obj <> endobj 459 0 obj <> endobj 463 0 obj <> endobj 464 0 obj <> endobj 468 0 obj <> endobj 469 0 obj <> endobj 473 0 obj <> endobj 474 0 obj <> endobj 478 0 obj <> endobj 479 0 obj <> endobj 18 0 obj <> endobj 21 0 obj <> endobj 487 0 obj <> endobj 488 0 obj <>stream x]Mn1 F9En0 !o`T^ 8( 2Qܾv~n<suY'E)JQ=鑮)+ :$?'WtkݨA2@> endobj 489 0 obj <> endobj 10 0 obj <> endobj 490 0 obj <> endobj 221 0 obj <> endobj 100 0 obj <> endobj 11 0 obj <> endobj 491 0 obj <> endobj 30 0 obj <> endobj 173 0 obj <> endobj 492 0 obj <> endobj 8 0 obj <> endobj 493 0 obj <> endobj 22 0 obj <> endobj 480 0 obj <>stream xxt׶<B]fHB `1wْ,[Ψ۲,۸۸! B 禐q;n}eZ3gd`2SB[ɱ{/PәԌqԳ2פ &xnmӰ)?d EĤ }VX13FfnJNL<#7^ ŧg1s=zZ=3Q %e͌v Z:38Y, sg[E ]g 㒅3|?d0oM_'\/ڐ138kSvNVqt^vIB$ݗ*H K/p-^lJccc6#11<~F(eFc c=c# c#UF0c!c5fbVRvNr1&2O2&3SO33 .c*cc:c c<|e{\¸ױ XW~mœ^'O^ԓO5O9O9YgZ9oofO7įxDӳ[M~k3vh~l-o2Oţ/Sɣ :,m00Ľd!ְ?7^`tÓf7 H8`y[~qh`!,] 0:RCHЂRx ST}ĒQ+d6fdjDB} ͕& .BCgmZ[LxaPk>u`.R*Rt2A L[^y["#?=/GᲐ.̿ m!}!$arN7WK THsrB&S+o/:S9\* !@6Udĵ:Z;HV bPg@0 ,-5ا;xa*2<-ij8c'}{!d8qZBI@?g8dκ/IS E?S?s]HVR`wZE;Lm\n?r={oϽzxB6弄x#,x._!lwr:◺5&)EvG13|m)7U[RcTqz [_Yq \;zG΄Fq6_]-¾d;1 |czV:;ĒHT,8)A?pZ3 1D.JP 9i05l3H` q;e@aX\LE4p  6y\MXqpU@ʼn]`Jm\[ew<>\r:fw ) L;t|!g&N{R]Ὢr ö܀M$MI({9$z}c[~t+ e'0zd΂aN:*/:s0e;̤NǍgيXq$CdAoiZE^&J>MM j^'#z)a!]R^8"Hr@(5p."k8^DSr7.dY&!hE8'Wn>Ҋc*Ȑ/4622 qjǦ|EM"db8A['7`婜>xzsX&F}yv,=%႞+۷p2_Q!V鄀hcIFb 0L^)aUlOsv JPN֙zRrV=4]03݉E2JCAcG?EXXYt@HbQ'iA3tNd]] 8N-t4;.ާƭ6[ ՠQq!bKe]WKOjڜtEَD4%e; 'vgXaeU)YkibVڬ`m哧yH]&ƶ7F}=|"wV~r(dFe \#E4c͢B ֈvR2# IM,ҝjt;u;|`GݏybN"R 0eLsshf^hrwNr5+A5J~E~>jg3.닊S2Πvʵ%kl 'eq퀨͞ơ^\ML˔B +4JۆW7D%*̌lJ 6qǫ A;=dzQr(ʼhU1];QS/zw|z qP6B3Մ65ȮqؠAL9qtWSyLV;,RT0QJڎU\wn]ivܥi[)HLgVԚ|G5]=-'3$CzjM6Ժ>, ;|(ll@DnϢ9ՈPu[3o\ Ց3x9jܑ..I4.HZN$GS%Kq7<`l2vO]_TN9[%>j696e(6ˊH>dӫmD,_afM^b"[ǭfۯ:uY$G8& ? ^ Ԡ4o[*O;P',_7H|lH R,v@L?MV/QNR[:ZYPi>.?FZ$e uKm<Ú6M|'p*BB9|qrg~*jOj C%!jw4hN0N|~z pVU (0Z$f<Ŗl@T(SAYV(B@$PRBĺ,u*=d=1;Rj2:]%h5#x,kA$jOPeP|!JCdD0Xn|:՝Xom9 qy&d`QCԔԶWx#5R7D&[#_ w$f@YV BDRRzAcqKˑdTnԱBHlԐacR[*`@LzޠBNEx,(V%j:< `&7!kB&vet}C%Y/J2;LDeHRz=AJQgpAԺ }cbPz0xp'""|1;k]c"6tp+-v06coq[,;XWQTF852)"4/,LQ>*G2nVmp+|a0xf ;d-+k=A4k[3D~tΚ .8536э/N115{m2 W볊p@+ 8 ,;>/ ٨u*ЩY;rrdi=UxXTjrl4:4ޙLHBbTjqmv!ҡAM9 \QMiGW1)gw X]!Y~aets|VSz? p@}/i19Mr`? EB3/^#%$k@p~O3>BOifG@= [Z.7\F|^p=z;3$M>\g:#әkϴF`^d`V.@x1RVd3A0/b; hGsۣx닼fu&3IMok408n^0۟,48z==:+ښyuU葯ާr6&nshƝw:q&qM~z.4w`eDJaDm#Omͬ*Jʡ1z~f򻭷zۚf( t9Kw)B-jNiv̦7:y /3Q/F:%d +vy<βx %em*a6c3ܡҝ e/=FՔqT j`r ȰiSHP tNR,_93E5-K\@偣eF{uMnKuJm*x T_4'=v3iEܶ+djLS7><(D%Ҫo"JlK\οO+H(%*K*V  $m+wetUj΢}adfez׆>vYE`0:Yc6 Iǂ)t^\ɟ (co_W7ld߆}8N4%pܝ+ go9^q:Z>5/\T.mN9=7 uH_Ba}btWzy4z |eMI7I5eKj*@C,ShDkAr5o069A\>x%+A3okķ[. KFvѓCu4վ#[6%,ݶÊ$]M7 VlGFAu8Y4ݏU+.;o>;-;jԏ3NKgVd;b1# Tyy*kZ ] {Wo]!U8-K=Z@p?lg֮H(NNjY֣oS}L7Zs EXyc_PBJS1d[Ac0姵 Ge ۹&G4~mnPɣ[&1?]pz*qϬOUw A웰36L[Wo9*.]NW* YjKO ܝ~)S>P;\\K3,%uFU]Q}q >񍯺! {.ͥӓhs[zsܙ{3C@Jfٻ 1'>3?N,fk}STNˤI ƿ]F endstream endobj 20 0 obj <> endobj 481 0 obj <>stream xmS{lSU/ gR\ya6c b& a<5۵K>n`41a4A!sS+sO^4P4M;:kϠ4ZA+cs|:`bI{~Nzު,_J"I|N3MR;^ HOP -z\.3h.`*=[ZÔ^Fm|ܮAaѭr]c}6ܻ텃Scsd(4P`O.s" 0f}7Zq{.@A$bzq9q4d3l (,# 9\R[܎r ,'W m+mLD||> endobj 482 0 obj <>stream xcd`ab`dddw441U~H3a!ܝnn7 }=\19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMUMB9)槤100010301297e{ 'tOsDtv endstream endobj 101 0 obj <> endobj 483 0 obj <>stream xM]HSq8qARn`֜ZZ fɍ&ؙ21#Zjq]!. 6.=/RnއGB(bߵCͽF˜ $$Ss{+ /XX07eM~vʉHw(:BJXɺYdWU5c~F0-c ;lѾENxBl+R -D"bqv'VsYx P'^ȁ'!!9X%wv;n~iFNpsC+oy:g؆.x8g2Zz:-#\&hew}9= )mj]~>Ų h;Gd0净_'y930nOOeg~ªWhGN|5coPtؿi?%E(G/uj !7.2|W,T)_+%Xtb 97΋|.ڤKKe : endstream endobj 12 0 obj <> endobj 484 0 obj <>stream xy Tn]QbTӍ yDƦT7 43 2 24 N8%f0$f219{ 77wV-X:|ABGH$a1O{D .a8qlTSpLrO$<<0LB8H$3&6->,T:{N9O=5O[tk`߸ I vu$DFD'.wwGFFŪ\CǼ"C"\׆E$>sO_]qa1]# <^]bڄu6$oL H ܜE5dj{zgخ^Q޳W7i3}EYde1F$O;' 7b1M&s/b.M8SwDew؜pttlzc.΢)ȋԫ8R ck@ՆHCga~rj"/*P؎q+ nvǵ5VQ A~h]RD[<3,F[:?m*z:􄳑uoׇW Z.dhp_auF-X&AXAFF^DHeh[@% %6sF:|s)'ԍ0rGG*ڎP ]Srh*n 5xəgdFRx}|+Un( 9iaiI4#DhhzÅI/_༥leV4 9xT [_W:4 IN?6ml,Dc\+MdֻZKe](Tq(>\!w8j۟:ls巡GbRXF7椡/,~ ʁƲg ,bv%2t tּ~d*zu=9%W1jI4u|}{{u/n6kXw p4t!1DNkׂpkl{;GU{v\Zހ\x4_,\Dsx^_ *\Opx?a`:0ůٷMxQ˻m .Y(&!csljKVghKTT> yc0i)f58C[= 7 8 KF l`YӀ8=s" w`~6`=^ulc\>G+_ɴ; AK)ŀbIJF0l9iyox@u(F]xl7!'zۏ5d%T(JM):dl H <|ESmNP*b:`L |x ~4Ę6i\)H<szB "dc8*T1x/pϸy0np_q>V - #pݺx왵+ f}CvW#q2)y >[*s6Қ`Kzhc{:HM1*JwHqh$\pGh4E@HXfa}\"ܛǺ;ᚻgW6XMHg|"Q,0p.&ACQL9O4%@Gx WKoFՀ@_A2 -LPjdT7 miyHHw{ȧm%VBx|Z{$p2pzhp7*9hXA8 y=pp;䱔EaNC0(&u\Gi"Bd>`Hd!"gU0@vkXp~´%R6fK)-zJWNtSABKs˿|R^?kgr]t;&seBx%n> {K}jbɧt{\2!d\d2[SLnRnF19$Kŕ|? !M/lW55xU2zk(./pfzߝ0fs9/C()&H[oKGߒ Bp΅ | )JK3e|b_, O_͕,곹P$esb5-Dћ ty6K{ k;La"rŪ8e"_>va}i9#|a&ԃy8|Y ϾFPLyG^zXiweE JSlZ@h|9%ԝmU Z5~XR Pi r zoWK_Itj*5 P lo*ˤ8JMcw9'm~t^gRtnv9]=W#$/6W}#w;vT*/?ٗuEG{Nm nRa鿸!Z!76%=FTP, œR)W;oKPޢFC$pnu-RzU:9ƪN}%W^BىwMمLڼp } d-gt n*ΚYg ܐY +ѕy: (VK%?v߄xO0v8a*-'E.! &?!;qRhpxJQw24,3 sނ/:$%ۤ?eU+q. /X1N# =Ȟ|Zg~1evrp6ksѦG۫"4 D>g3pZ ֯{H86p;=V*_$/ɰ&ɯ=YTjAD/;IB5"6=Qߑ_CS2cc 6%eyq N‰xE5Fd'LWKNAܝ|Y,ΘMXI} F]V0s58 :7V Qh;Un|pA ׂ烵r+rBvo:ϼy+ſ]|8u\b.2:Y &A%?N[#Ӡ#RJ*)q0+-!pQF9JHnHkp WC!\}q ߘ <-x1s^~MQ:7.*7`Ka) :. ҅2-31 8*x oQ4LIs09C%+sw@3žRhsPŞsw$??}e06w-D/'A\Yc>*mkZU 5)1d`&D O+(2.-%;,^þު灑kЙ _6"':K$\6HyK|R'h{("5f@s_98%uaFyP370\&awŚXwDotWʇm#iؚizow}/:Z+U%]E"XHJ9`3)./\'uDO-S`vS&8~>9g8ۅP7T6i>M SqKq (yuH~2}NVu2xe|F|A>?Ts}3TZSpT0?c8S81~ pF' jiގ@Is^Jނ~4X]+ť_'x_ݤDj#ӷK2HAt&Eg7-F ]4͑}aE6T&ŻFao{KP]-UWq'鶮.Ӕ0:%EjC 4o0d= iv;gx<6Uxf d}[Zipi>51ȨcS8"jcPW=2uPl*3XSI4a$U+\;s7%'Mh!YQWVy#ץ7dMEVSj0EFs L:QO9Wx' 9^hA )g0jX`)T`dhq<җ8aap:XCXv\j Y@+CyHxGgIXЫUߠ"kxF|KŠJj=)ϳmp-`÷aTifUU}"tH| SGuzkVI #!kmYw9#gXK<Лe/J)?Y^Wmh;~J48|Hq8dA˞+]|J+,+'!7!'{p(=kyzqCj|}֮=V540 ḔwPRYŚ խ'΋E/)8M:o'h7J;{7WKy`&Wt9& r5܉0D;B:u~dz #;7 Rڻz{UAJ<6UCϫ*foҿD94$0njkxqWշf~R_;}9"/.aϓy&b [UEcCPCa b@JdJ' --?Gم4=H4UoFx̼5QOt<ĈzqAx.Hk܂ s+dkWUWn)vS:|["o`2faqO༨Խ}e@Z+I &'AAI;לkg a3WHnpP M?f}FqqWG@CZUͿMЌE%t+Rgq$8^\_F8:N2:CJxn fΐm$NM{3U*_?Z\xB+Sˀ8!m1R+A+ %-f8>A> ޒ RK㨟d~_׵7hv(=!ۡFo堊|7 z3^}6~OSu5[OվVZRex ;+a8_i1|y_ZE> 8\roP2*τfOgթnvkR8~ IJ?*"+WW0cj#8ɞsb0hZ=`8N,6kdy R 0wl֚J }L\Jp#tx'p͔Xb+':2 B3^7$;l~ɓa$H Vf3-e'=z~c7ʨ#X{zg/ 4?*/nr';V;mYG\R۪Ž)NJ݅3 yۃ(*ζj[b2} #r훏Z{/+Nt 9i4]'Ń]Bc&9yq# |^ĭL'SI"-:7RY-6Rʸj\FM8|Pk;NsVxSoG8g|^>\'Bߠөc튤ƴjJ~BrZ;`M[?w[`'wOK>zB~Gwww^|S@zJ( /Ƣ#&'`ob;aaP(O ?}-n3?g%m8mP~b:a_ gBhwrv[IMl5)tY@ LC.Cl4 7l endstream endobj 174 0 obj <> endobj 485 0 obj <>stream x}Q[l QibUu#vSTQF\"WD$3ggO39朱MM\zڭݵV% "%=xAf6u{rr}PT XZ/E [K% n)ΌB֚ݚ9ƩSFlOE0i`#kMu$kgЋ]RLQK6䖁oQN-l_Z\m<(.s|OH?{ LŹf6獷^bW=wCэ[rkz+/˜#EnFׁ󽙙>įX <[{S犽%pFo4;Mơ.[ҷ|ÍH`jl.lƝ|bńg=}g  bT endstream endobj 9 0 obj <> endobj 486 0 obj <>stream xy XĘ̴*ZhF4Aܗ֥Vk]QwdaKr@@XvQPYDݺիj[[L|=@dfΙ :x#=(5;5ㇰ`8 Z2~f%6F"<^puPpLwtN3f͚ۙy/vyuzGWT%?(8#0|j|!k/`0kWwwwn.W?k;HgXϟ;w޻<5'z?#qeUAΫׄ [>>rCh7Cb7{l{ߝ~L]:m32ݼ̙;o >Xh6'}D6b11J|DL&STb1IL'.b&D"vل3xp!{ŽK#=>X@l$> &bO kmbaK 'D baIM!bb|b1"v/<1vHĐ.Gܡ~) ?#T[C퐷o svtoGZL(9k'ƏݖC, "Q8z#͘YL8qVí׏5a YZ'$$K#=nn9lci3fVWI'&,2nb+^i}G s[9F;ۼޅF Q1JS! j($'ՑZo,1PptM ۄ,v͔9RC{\>ڐ̤bϙ)hN ,:OxϾ?ѪA1(co uh:p$|kY4325&R^)锰+ j![3S(T~Βu-5ʁseK &ۯ e <3D=v&?PôiuSI U?H|qA5!JeoNF>hQR$&E(B8;N`ܢoր:K(&$y= A4IxLyXљ l@xD$$IMF*|%ڐ|6ZxXu)8Qa];5RDWcq%AsCZ+Is4ZAK.аp.T~7TdE+4 Vtz}`^$Ԃ=.i5<'aCS'hY. f.h:7*\Bzwt4-I[G@ *u<y~-o:d0 c3tBhWtu=<\puiaX>\dE!8M!`_:r]2Z~ۿ+zg'-D_[*UȺv j] [;)ȟ<$WF# dk[JIht+isǾ/Tp3 ]X޳F:6l/*V ?q H_(I*Q|PuJT# [,9X:@yD\ %jٟfm7 ȎEKJbT-HM`,;Č2*ұ3R}iJ`RTуuGD]wWL N/rot (4B883 y !,$8>L7G!lN lr\ec#I\nIwqN6#uogFsVm&pE [l9>tg=PLPe'R#Wϳr1@INE<'TUP'TB/pS9%X~7Vt7  T[A$;ikZp+ '$e\8<);&30/.2t'R45-w7?eσ.ЛVgkEA Ob01o@FmT ѲS/͸3V N" PO@O?}Q/6JC|/^\lTwƵS{&R}N]U톍z5;)鈔$ߞ\ <(Gg5x*niiaΌ:ff8rci@ )]go؝P(-CSQԦy6KoAMp- }f^Q%T@izZ̕0f* ”I[.;t HK<"=]/^_4j#W6ݫINˊCӣg<)p4{MH!1ˉy6@ RoA$^m 'x%l?o$~VNK+#W)"paՃ+|tdGF"UH&t(5l5"Њa!b,(qS}0 ^; Xi "Ã܁7ʋ+M(J'( vο$gU?XS=̮Me*ān MYʑcQR\'<>D`8@az(/7H}R#63&e2+-/Q4APW:CA\YPbĄ!+Fȷ't2[Ք~IC7#(v"!(!PX \&0M5"q~"XUa-ɀBCN3~:6> LoR?Aϫ,jbxCXqxb]/.2\b~R$,2gd-NH[Hx\ДjLS$S2-AcEtB\m XVN F]'S]O#ࡤp.?:P_֩wਧv1}/."KY8 <uȻxTZUqgyXuo> >Ŷ5=HM:.ϿAX Sk* jFPG:`OĂE)iظ8T*Aaa"ki,}?eeXF!%m/O24!*JR,Q'8’zM\ G²"SQUvs/hZ)%&$R=p#CĜBlJw"'FyW`W|8Fs&2AdIvRߋTkĭ[C'QP]V-6'u !<KJLGwz5eB : $_w@$vjA5^[()KuT&+ֆA}; ^AGV[Cyn`cϵ} Y}?5$zFɽp_ifſdd.m,!m4ہT7oYc\dN<^n4*fO 㗦)p;g1.)<䂿1~Rd FavHWXt4ߔ]X qAm~EIE8YRTauZeʃShj<5R[fG gd $ :[;Lh4MGNE~%0z"k(FXW.Y w2 [$ 7}~( sU?;+?^+)W_AohlKٚJIG,t#=,a,c&sγmvX * 08p(=dROrU ~\-zvE"GVi=]lllWS+'[ZUm&ó+0~.`3XٱNfqr| )$+a^%$x,8{hqkOZ Z t ˯1UKuYMf^<Nն70QhYzǎ\o~Ͻ{-헥4 F]ԝbiQIsp@1y q4 ;ߐi)d8}9>5W\F'䘥w.iTu?%LCE5$9U4\F'>-\pY|);~.{tpj{Ovd<|@6q|yn9!*U2iZbL/c .N\låAq:Y1'Žy=-npz % L<> ~|G&p_Uo/hя!!!5յ`S@Q'c*>>&% ;q79.`iGsٽ@-[aҒG%)~Bu i`2"mss8WA˟NYcPԻՀ"w-)5ؼxmnay|^ȟ3r_`zhH8M:C|.Hّ排>%qى  6UWՆT╛;b00d]#.(rR?aNhnA|U3\[968%sWATbɂnanCNei'f1|}8_Ҍxb)xw`yLڮ*H~K{:  m0A4Utr;z r|xvkgο7=puTNjؽN>ztc) x;'4; 8$?Xh4؏e%tfW}Udm$ BI/aZ$CXzZ#%K}Z#A았$~ϲd.<3hIHWב?_Wt2Z<=3Bրjj׼ _,:tHW-DH!qi*|=Nצj sbnn^kf@AX]tY84̀[FC緿[Qp]ї߇n $ 76֟yn\xCķ?[ظA|&/\2/dh=hL2hhcn^(:%FqZ'A E%\$24|GQT&~!Hp& afwEȁрJ|d Ɍ,0D\E ԸZH6l!&P4j ss@ffi:ZaKv\eP/X`NT'S2?8T )) S0Y%}M;z !Ks/!;Z} bWj~؛q''x,xp#m[?j`X\v r7,;"zxߔ LҨɚL&7֫45NR{3Zi``chu0!df'r <9x݊g|ȴ`@y3@]S *P{3*אVWcB7 êTRiu5ŃЏ%@EY阽0+0aAm:ͣ /Uwy'ݯp؍-+"",j2"Lh-[eS].AsaІKo(x?gۏPZ~=PQl4`*s5 !}NVDdty?NIIOj{Ypby%jW56n ISzk2!kϚ~n=k~QB-8t ,6;rDSMpt?cpқH%E jsǎ WD4[MTY'_`"8N Kz.5]+:IIR(^+;HqiV `DOv;ea岊39^:1'RZmךڊONu̫*$<9k:Ώ{<gdJFFhO 妁7 vGWM2 ]P1Kq&)8 g!7n@L^Y4BL4uHݝ ۻU$WRʠ} >@NO{nq͙y.0C>׫se(cwU8n_ ( oG`pQ䖟.~K@1 07bvN`Qxh68wa>UB]0M Sid2O7UJX.j4rd,n S -:6)"#j?p&?\8Q<#aDt .{D4lr XWx;)gRH-rh OovicJZA7u=op"Yn)0FFFDEKF[yuM͔kQ^boyG+(wUxn8 .'$FgMҗeѼɧR-aR?Y) endstream endobj 494 0 obj <>stream 2014-09-26T17:54:23+02:00 2014-09-26T17:54:23+02:00 dvips(k) 5.98 Copyright 2009 Radical Eye Software bagplot.dvi endstream endobj 2 0 obj <>endobj xref 0 495 0000000000 65535 f 0001308241 00000 n 0001355560 00000 n 0001307499 00000 n 0001292640 00000 n 0000000015 00000 n 0000007663 00000 n 0001308307 00000 n 0001324883 00000 n 0001345125 00000 n 0001323316 00000 n 0001323880 00000 n 0001336558 00000 n 0001308348 00000 n 0001308378 00000 n 0001292800 00000 n 0000007683 00000 n 0000012210 00000 n 0001321663 00000 n 0001322683 00000 n 0001333376 00000 n 0001321726 00000 n 0001325602 00000 n 0001308430 00000 n 0001308460 00000 n 0001292962 00000 n 0000012231 00000 n 0000024804 00000 n 0001308534 00000 n 0001312128 00000 n 0001324546 00000 n 0001312162 00000 n 0001312194 00000 n 0001312224 00000 n 0001293143 00000 n 0000024826 00000 n 0000043662 00000 n 0001312320 00000 n 0001312350 00000 n 0001293305 00000 n 0000043684 00000 n 0000259222 00000 n 0001312446 00000 n 0001312478 00000 n 0001312508 00000 n 0001293486 00000 n 0000259245 00000 n 0000264429 00000 n 0001312604 00000 n 0001312636 00000 n 0001312666 00000 n 0001293667 00000 n 0000264450 00000 n 0000290577 00000 n 0001312751 00000 n 0001312783 00000 n 0001312813 00000 n 0001293848 00000 n 0000290599 00000 n 0000292838 00000 n 0001312898 00000 n 0001312930 00000 n 0001312960 00000 n 0001294029 00000 n 0000292859 00000 n 0000298201 00000 n 0001313045 00000 n 0001313077 00000 n 0001313107 00000 n 0001294210 00000 n 0000298222 00000 n 0000306548 00000 n 0001313192 00000 n 0001313224 00000 n 0001313254 00000 n 0001294391 00000 n 0000306569 00000 n 0000314230 00000 n 0001313339 00000 n 0001313369 00000 n 0001294553 00000 n 0000314251 00000 n 0000321904 00000 n 0001313443 00000 n 0001313475 00000 n 0001313505 00000 n 0001294734 00000 n 0000321925 00000 n 0000328023 00000 n 0001313601 00000 n 0001313633 00000 n 0001313663 00000 n 0001294915 00000 n 0000328044 00000 n 0000373054 00000 n 0001313759 00000 n 0001313789 00000 n 0001295077 00000 n 0000373076 00000 n 0000377759 00000 n 0001323614 00000 n 0001335625 00000 n 0001313874 00000 n 0001313905 00000 n 0001295241 00000 n 0000377780 00000 n 0000393570 00000 n 0001313993 00000 n 0001314024 00000 n 0001295407 00000 n 0000393593 00000 n 0000397946 00000 n 0001314112 00000 n 0001314143 00000 n 0001295573 00000 n 0000397968 00000 n 0000402725 00000 n 0001314229 00000 n 0001314262 00000 n 0001314293 00000 n 0001295759 00000 n 0000402747 00000 n 0000406306 00000 n 0001314381 00000 n 0001314412 00000 n 0001295925 00000 n 0000406328 00000 n 0000410039 00000 n 0001314487 00000 n 0001314518 00000 n 0001296091 00000 n 0000410061 00000 n 0000413026 00000 n 0001314593 00000 n 0001314624 00000 n 0001296257 00000 n 0000413048 00000 n 0000416779 00000 n 0001314688 00000 n 0001314719 00000 n 0001296423 00000 n 0000416801 00000 n 0000420831 00000 n 0001314761 00000 n 0001314792 00000 n 0001296589 00000 n 0000420853 00000 n 0000425413 00000 n 0001314834 00000 n 0001314865 00000 n 0001296755 00000 n 0000425435 00000 n 0000428960 00000 n 0001314940 00000 n 0001314971 00000 n 0001296921 00000 n 0000428982 00000 n 0000432542 00000 n 0001315046 00000 n 0001315077 00000 n 0001297087 00000 n 0000432564 00000 n 0000437007 00000 n 0001315152 00000 n 0001315183 00000 n 0001297253 00000 n 0000437029 00000 n 0000440823 00000 n 0001315247 00000 n 0001315278 00000 n 0001297419 00000 n 0000440845 00000 n 0000445384 00000 n 0001324616 00000 n 0001344036 00000 n 0001315353 00000 n 0001315384 00000 n 0001297585 00000 n 0000445406 00000 n 0000448748 00000 n 0001315472 00000 n 0001315503 00000 n 0001297751 00000 n 0000448770 00000 n 0000453362 00000 n 0001315578 00000 n 0001315609 00000 n 0001297917 00000 n 0000453384 00000 n 0000455848 00000 n 0001315697 00000 n 0001315728 00000 n 0001298083 00000 n 0000455870 00000 n 0000469252 00000 n 0001315792 00000 n 0001315825 00000 n 0001315856 00000 n 0001298269 00000 n 0000469275 00000 n 0000472944 00000 n 0001315942 00000 n 0001315973 00000 n 0001298435 00000 n 0000472966 00000 n 0000475911 00000 n 0001316048 00000 n 0001316079 00000 n 0001298601 00000 n 0000475933 00000 n 0000481917 00000 n 0001316154 00000 n 0001316185 00000 n 0001298767 00000 n 0000481939 00000 n 0000487132 00000 n 0001316286 00000 n 0001316317 00000 n 0001298933 00000 n 0000487154 00000 n 0000492751 00000 n 0001323457 00000 n 0001334997 00000 n 0001316381 00000 n 0001316412 00000 n 0001299099 00000 n 0000492773 00000 n 0000498908 00000 n 0001316489 00000 n 0001316520 00000 n 0001299265 00000 n 0000498930 00000 n 0000503513 00000 n 0001316595 00000 n 0001316626 00000 n 0001299431 00000 n 0000503535 00000 n 0000508610 00000 n 0001316701 00000 n 0001316732 00000 n 0001299597 00000 n 0000508632 00000 n 0000513495 00000 n 0001316809 00000 n 0001316840 00000 n 0001299763 00000 n 0000513517 00000 n 0000519832 00000 n 0001316904 00000 n 0001316935 00000 n 0001299929 00000 n 0000519854 00000 n 0000522866 00000 n 0001316999 00000 n 0001317030 00000 n 0001300095 00000 n 0000522888 00000 n 0000527899 00000 n 0001317094 00000 n 0001317125 00000 n 0001300261 00000 n 0000527921 00000 n 0000532569 00000 n 0001317226 00000 n 0001317257 00000 n 0001300427 00000 n 0000532591 00000 n 0000536833 00000 n 0001317345 00000 n 0001317376 00000 n 0001300593 00000 n 0000536855 00000 n 0000541537 00000 n 0001317451 00000 n 0001317482 00000 n 0001300759 00000 n 0000541559 00000 n 0000545464 00000 n 0001317546 00000 n 0001317577 00000 n 0001300925 00000 n 0000545486 00000 n 0000547659 00000 n 0001317641 00000 n 0001317672 00000 n 0001301091 00000 n 0000547681 00000 n 0000551290 00000 n 0001317747 00000 n 0001317778 00000 n 0001301257 00000 n 0000551312 00000 n 0000554222 00000 n 0001317866 00000 n 0001317897 00000 n 0001301423 00000 n 0000554244 00000 n 0000648685 00000 n 0001317939 00000 n 0001317972 00000 n 0001318003 00000 n 0001301609 00000 n 0000648708 00000 n 0000653660 00000 n 0001318078 00000 n 0001318109 00000 n 0001301775 00000 n 0000653682 00000 n 0000658252 00000 n 0001318184 00000 n 0001318215 00000 n 0001301941 00000 n 0000658274 00000 n 0000663628 00000 n 0001318292 00000 n 0001318323 00000 n 0001302107 00000 n 0000663650 00000 n 0000667409 00000 n 0001318400 00000 n 0001318431 00000 n 0001302273 00000 n 0000667431 00000 n 0000863823 00000 n 0001318495 00000 n 0001318528 00000 n 0001318559 00000 n 0001302459 00000 n 0000863847 00000 n 0000867662 00000 n 0001318658 00000 n 0001318689 00000 n 0001302625 00000 n 0000867684 00000 n 0000872693 00000 n 0001318731 00000 n 0001318762 00000 n 0001302791 00000 n 0000872715 00000 n 0000886296 00000 n 0001318850 00000 n 0001318883 00000 n 0001318914 00000 n 0001302977 00000 n 0000886319 00000 n 0000889760 00000 n 0001319000 00000 n 0001319031 00000 n 0001303143 00000 n 0000889782 00000 n 0000892917 00000 n 0001319073 00000 n 0001319104 00000 n 0001303309 00000 n 0000892939 00000 n 0000897149 00000 n 0001319146 00000 n 0001319177 00000 n 0001303475 00000 n 0000897171 00000 n 0000900594 00000 n 0001319241 00000 n 0001319272 00000 n 0001303641 00000 n 0000900616 00000 n 0001093116 00000 n 0001319349 00000 n 0001319382 00000 n 0001319413 00000 n 0001303827 00000 n 0001093140 00000 n 0001097278 00000 n 0001319477 00000 n 0001319508 00000 n 0001303993 00000 n 0001097300 00000 n 0001164060 00000 n 0001319596 00000 n 0001319629 00000 n 0001319660 00000 n 0001304179 00000 n 0001164083 00000 n 0001167820 00000 n 0001319746 00000 n 0001319777 00000 n 0001304345 00000 n 0001167842 00000 n 0001174878 00000 n 0001319819 00000 n 0001319850 00000 n 0001304511 00000 n 0001174900 00000 n 0001182792 00000 n 0001319938 00000 n 0001319969 00000 n 0001304677 00000 n 0001182814 00000 n 0001191884 00000 n 0001320057 00000 n 0001320088 00000 n 0001304843 00000 n 0001191906 00000 n 0001202744 00000 n 0001320163 00000 n 0001320194 00000 n 0001305009 00000 n 0001202767 00000 n 0001208000 00000 n 0001320258 00000 n 0001320289 00000 n 0001305175 00000 n 0001208022 00000 n 0001219709 00000 n 0001320353 00000 n 0001320384 00000 n 0001305341 00000 n 0001219732 00000 n 0001232994 00000 n 0001320459 00000 n 0001320490 00000 n 0001305507 00000 n 0001233017 00000 n 0001243969 00000 n 0001320554 00000 n 0001320585 00000 n 0001305673 00000 n 0001243992 00000 n 0001251943 00000 n 0001320649 00000 n 0001320680 00000 n 0001305839 00000 n 0001251965 00000 n 0001258791 00000 n 0001320755 00000 n 0001320786 00000 n 0001306005 00000 n 0001258813 00000 n 0001263092 00000 n 0001320861 00000 n 0001320892 00000 n 0001306171 00000 n 0001263114 00000 n 0001265531 00000 n 0001320980 00000 n 0001321011 00000 n 0001306337 00000 n 0001265553 00000 n 0001268714 00000 n 0001321053 00000 n 0001321084 00000 n 0001306503 00000 n 0001268736 00000 n 0001271456 00000 n 0001321126 00000 n 0001321157 00000 n 0001306669 00000 n 0001271478 00000 n 0001274089 00000 n 0001321199 00000 n 0001321230 00000 n 0001306835 00000 n 0001274111 00000 n 0001276833 00000 n 0001321272 00000 n 0001321303 00000 n 0001307001 00000 n 0001276855 00000 n 0001282433 00000 n 0001321345 00000 n 0001321376 00000 n 0001307167 00000 n 0001282455 00000 n 0001288622 00000 n 0001321451 00000 n 0001321482 00000 n 0001307333 00000 n 0001288644 00000 n 0001292618 00000 n 0001321557 00000 n 0001321588 00000 n 0001326028 00000 n 0001333713 00000 n 0001335219 00000 n 0001335884 00000 n 0001337012 00000 n 0001344265 00000 n 0001345702 00000 n 0001322294 00000 n 0001322392 00000 n 0001323082 00000 n 0001323398 00000 n 0001324462 00000 n 0001324786 00000 n 0001325501 00000 n 0001354104 00000 n trailer << /Size 495 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 1355765 %%EOF aplpack/inst/doc/faces.pdf0000644000176200001440000104541613516603655015210 0ustar liggesusers%PDF-1.4 %쏢 5 0 obj <> stream x[n~?saM ; %Ô(es33+QN \5GuS͟bA?g|OOg2P|~:.?AZ3Zo.Qiux~Q6zagN)kkj+aës1 nx`*;RmC>:?jGŹRs%p+s[pG,7K־vJH3|kFsjtQvAuڤN汨r]w/6 ,R ܮdžSrtnB +_FlED3G)CFoOhM(Bj|0YJljI̡#-{FNicF)||~L6t#sͧGntF)ʪ7yQŠHiWԎl%) vFe J?a/I0ep`/ Y#k'Y"oz(=#AhE{fnSiFm";JlEy8(>Ϝ2`ɪ<,Ñа5|ցڈex P08F!)6%iW_][61Z,'袶"b $cgx7[JiǒHla-1VkBKͫ gWfGx5_y757ܴ$"#wpZ&TM}&\ PuޮQWpd1\eɪ 5!{8-bD m]=Ɲ=ʊr=bD6GhD.nAL ¾%: ,5GpȽa:%L@FAM)[X!hC626jeDX݈Q;Vď~^o"X0[H+1JCuvt?ͺ*ʼn`egұ8ޛtG|5b=+v,g/*/)N!yEgsՁ+V-8\$(`0 ! DeRR^g>-W ^㪓'^j\P]WִE݆4F9 |«<|"_XD{:1g/iSvc;Q)%znU%ƅ&{h'{ ɶ]J@S7@/+`,!]D˥6k{V2;Eh=8 @hq=A] )hlZ&=ㄯvBڦJ!e6(%A^bAiaAopܴsI {q-׬RCZfTCb7-4FYO936lޙV%c>|٢EAwX,f;O,48Р4 2Zɍ1ؕ^*82 :n#I݂԰sI-r>ŰgI5 ='wՒF$`?kpikՅỡcosƧ.;!'x;"it{f&30WsvnfbCX1G-]LIj#Yan"gbҽsxkiPC7 \Hv|d^|tKD̯χU[a\|QIu-UI9+ ͨwѴ{35-(&nsTVS~YXpEѳ[)pFRFDEٽE. B\ڪ ٣raq>1Kv{eRw,@})([%[W)׷sqRgN=XyxtJhtKj#N5C-s3޼|F.@wJ qK*n֗eo %JrE~%uq n<`EՆk%E_FgkozZN Dkcu !FmYjܰ,++Zr}LOc;eI*n0)ϻHHOQ~PC|?;0Alv2z5~5N <{4rA3p@UxmJh9m[!|qP!;F>Gr>ϝ#fMxw\fV{Y ٥k|wf Ywizw:_@^ߏZRH(jiZ\V&ݛJZ.mۻUՈZiNRZT$ʿuk S~2p2ID݋D2 'ć{ 'foŞr1ҏb&o4g~pc=1!J9z;ue=Mfխv h3KդN8~Yחendstream endobj 6 0 obj 3654 endobj 25 0 obj <> stream xɮK9 4Nl NJBf=-V{K7Ev["XU,cK\|Ҭ^W?UrC`v:%[1:2\t˃nc)~pce|};)n}@f 0czCHջ^XxSw `ڭ?luEZ׈":1xpv9W^Ux=fRmhQ2i@ߊ<M )hƭmkd½`t3WJ&qDޗ/(, `_΍AwyLH4D>3@4]s5 >JLe= 4#ެܖ(v#07ӌvYlj'lgtUjo h >00&du]$`-LDDLGgyv}j}o25, ?<|Pr0 2JD".f oys">o<|?[fTqYwMYƀeoS\NqejcNOK|+Rs\c"Kl 25Y-bo5ms&2a}ߥӴ|+E iqDC><<7yx,<^;,&gMy6sC1 αhN1?`AUdVU+L NpBnPѝ" A>V(^Q%2Q\hPA le:bS)1VRY8g>H B^"R1m* OJiН4qBQm9*6 9q'eZ翛<3g>_qk,M9\'ZN`Q}#@I1/0{ȷVQPEhi$[ @}fSdjS!'39M3Qf8 Ct7EVbPod4NݧhΪ }ҖNtYd;E ѵ*!D1'l9=Z{՝ /cmPWEC0՜ABo;x;\)p?ڬ}^j[3v.cH6وBb^ڑ3^Ep'x'R^d$rTIFmGy-7=UCv<>϶_8RKp5C(y7,*P=ۉKUwh)4'y%c4*,J!O&5d[dl]R-?=FRP\1rLJ@f3*TiQJ4jk ӌM?np#!ag/)J"1ۍ4]%˥VHU1Z!y2(dg-) Ks^aB -WfgOXg_JuoJݠBzG)s).s JR<) rWŗqo$ɡ2ƈx 7@5*%0p,Xik'Q^:i>qu9?uҊn_OediN``!meٲE6XKnho{$vwP s|}Kn^" >8HLbCBc= qPnҀw٫aKG`FzZaZ&*-[%c"I,+r-QH ( zaHJuW@$1qb_'Mi CܓRxx]t0 lK/m6Sʄ| kkPz  9ΟmxV+oGHr{ˏpY+2㨽F${𵃮Y7:wT7ױ٥1NΝ 1M IM8Jz€+](5|z{ra[޹%T.iiA8Ǟ= ak6PY%5spT@KPuALj$vQ61F%07q[>h}}Qi}"VwOUw&c*\ϛDk{8\*&N;ޘ=i&TO*&k4v1=nJ ,VI%۱F&&1[m!pL~l7UN[lMvhH”౗U<*#C8O f nT2,]upL={M@w1T[Y"ѕ7cWkҚ v\pş-ZkBP#QB V݋7)o{gF{`I@q5l1b Ҽ"7S+;DQ9VI20H>EA94.eQ t!"V;>4Α,<̽@0&QR5ُyX5xr%""k1JF?["FBm2GA$ Bkh8o!%)wBC|ɮ.`_g I`yG3`xp`R#/9˼{;E16źDNnTcx,`Cα"OaC>JԠЯ$ wGl!NQOV0Az&cj]7PXM y^Б<7tgJ/vx0D}tL%DyJ U4,UUi摋_=T$MQw|}9i;nbHѱz)b%:mGY,kAWxG!yMY rYBjhr7=Kn6 ЊʖvzAD]4 YkQ`K Pao-R֓`wm[{%MP,@C~gy־Cɋ~уrO*G`.F@8jwh=$sJLڂ4%,Dx:N`=P_J@#y3㮳nU|sxW_h?endstream endobj 26 0 obj 3406 endobj 34 0 obj <> stream x=Kqwe/4Cnɵ7YჼyHm浚=U$Y,}#:>: ],IJ?̓8_{~ߺ~x&aճ8Mһ'4;uprV^w&6^2χ4Oˈ7|wvwgbX)ypr8Xxc3I88uT>R^ϓqÄ/t#Z)ì;IC8|Dʹp >3>5=uhi&wif8ڠ2y+a!2tg?+ew2G& .}#4H[I4 Hpr @Ej|x B|^Ih{E0,n-BIZ,B'Bh=_ hMx`0ҷtK( Il*|94eG8 '(I`u6;<7DxP}V G  3Vpw"je]ܾ̊w!"* egEwԏ0׫z{Zo7@ZNciBq$֓5`2p6 I*Sܶ4T9)YSY+ 1b!N\slmi ze1, J"}p2ZWBbb7B>$nsk'n=ϊO&N\++SZ7/UͨV 7SKiUjde/Ft2qgPϦMOoo6BY߆QacV3HkfBq~ lQ0Cn38V6q:t!nCj g7ꭞ#4Mf fpK5g5I<>%X]6+,N v5(!Mx,&-U=ϔ!UF4Z UcԓԒ>h/lm 4B/ &ƶ5EVIu렊XߖoJơda/AȆ E@D`H9+e=j@'(O`f#PO=!NlfC}AnQ%}Ώeb#bvpsf"uB4D(ɪA?V-:`0q Z V>NBe@zE9B#1)?' <@'ZQih!ziS f_ A[i/ ʔ=G  8, 䉫ջ4/'d_Of 櫓ҵlv]e_9МT"(6ߖ&!2:kAN޻łfrJ)ڰ|Q*@]{_T򖎮^ ]wi<ڼu/"b}=NAp6=.%L9k&}>^I;k/®@g<}}Clut94D-Ѡ;]U%a^@õ[Ӄ;T/zĺ0ſI_0Qݲ/J|nBػx.1[?;L }GYu1/K4/']=oenm?ACchs0q8It}. 1dyS;*"^>zKK_&ҭl_BaIx|wϛ})!(1'?KD &쮟 Xs^h\\{jbʈH`'ac%#E AV2Ei)M"kݏ]*\Tx5(lfkY`Oz`ӑ.r)#[?b䓦x+j-D<]tȆHtUd9@eץy\(ŭ0H5}ŚȸQ' 78&lf tAmb5k2^r@Ӽk5j 㐷\&,@G}C|Ō|F٤$|ucp_ףܕz={i~'^ w}+R6@O8=C6Qv?(^mkj1y=&a?\j\sМ7CVa7d8B, 9s!8)~ѝ{!4ؾebmkB0C~gM ('˷f,dʞLnjxc}#2ۋ-74ݓ6@^82pw+{:̭"aSJ/GG* J +͇"]d_͛SL z?ܕٮ5{n29# ,@M_©7& v!su9;wr|m;G09JٕKf^KG-gv.+e.jv?4[)oJui+<% Ms.M+4r߷SQ@c?yoQ=i г\h/#LP/LiM=&}Z',.2SAZo#qr]&k u*}!{]gsW~Чd,!3pMG)< ZMۘ_wۼnNl$T)ؤ#2~ʕSi KENM2[p`:jiL+DL8E6ӠtMy6UqS|e! '6Ά)5o#`~$$%(=Y4OsAZM6LJs599|6i?F1bCCu=1yd٭Yv77KvP(45e;mLsw;uʚT>l1}"=~g`vJHӢ_]gRơj"2b,䱛|Be'~ 딵5 0?lZo>'\NS$z0XnyZˢQCvx E$LڠB$xg@1h NaLKĎA+YY)b*͢HdueRiD,ӣ~p D~K5 \X5^5޼,F''fǓcфR7ʂZ4:U/ԉR/WO#nh)M]1 a_iAu*lt)PݧUĦY<_Dȫ @o ^ _RQ)@\-Dc%BEcI0ξZ¶jVzThFVegy2D:pJRyyZV~5FaE^0H/L $U]ۀ iz ȓU6|5&x,SySN++>!'4okˆ.R}Yo`4) .Zz!uʌ ^?#v|4O:5XY3z#H gxڻ;s*?gS2zqwZ" *Z%ViJ *˲1FZ^{~ eԔ5tExG!ĈRd=ymnܰ.0ӣ %a!Z^(My_ija1OV! w1ٝEJco" h4Aaxoqldx=DňN emJ*gR]'{~-IP5 n' =pêJ%D<]sAu˖ ~N-ͨxO?I(f p6E_zn}_e`N*ZnP1i6"L>lfϼPZG96<: :/Zpb&^ Jy=\]גf~V'WxРi<:MA[Â4.o-C#!o26T;w-s"q@rF٣]d<_6WR gH| UB7C,u]W@ǜr m\^$Ȁ+=oJZW`wVo {/ b6%fxq1vfv)z,K`F-g1pF'Raa$9\ŠAɒp-=t$Ui^TJD6K~1"$aT'Xd_Wq؆Z/3zRf"HGב'FY7UmT<^d'LJth|n&na< *3ÂhUlyQ#\?XSÛF.@pUi-FU ¨ϰ*c\t䥱6+2 ;N]mP9+QrcǚT528r"U:z 5b^ԃK@NI;SREƏ>X=٣~AiPbU^veѿnXI~&1'5Gi'uGԯ7? "&cS,wI\}~;jĔ&*ĈMWC;ysjc~'-3,s|w\<%_4# ^-J3b>ӭݓ$s2KGi %{ah<iR_> stream x\Io3\\"؇%0")DҤA{^-j陡{kWSJ)?ۓ/5O髓OXiu/0SGZ<+)8+N qzͳ3ZX& |P? dzh7_yً<*eXr&Ć4u~V͈[4;1YvɅ4noq46SO@~#r ?F3+Q:#L@c?s;M2x\P&0sQ7OOW0ZZ\_/𡉒|cݵ)$7OQ'#]&!N6y.ZC[!s\.yC4"KOahG16*{/hauR )~IZC 2><<|Ndz 7'*L<x}bs\w'kPC>1Rts@;hu~zQ#Tj!"Ã:j%y]ǻT^E!/[q8 ^~qB"u調qu*wbhH1RAeXjiՀp W+ã qBk=½khl>K&jpQEHikgf$pgb;fJ {\uЄaVƭ PY}rdԀy?x:2:9BOnC5~ͤP {Uu'UN2XK:)T,G4-wLU4=ЛAnM!wyM/7eK6~%gWAUVcM`^ oDA"j,B>- F?dZ|'b..?EJ+7X]mbF䁆ְUwVa}D֗2_4m& |B@ %Ha,q-Qj߫ZSye+oPe|(reH B:&qk?B$3ņ1pS>ZSPF:s i\)i=UY!R yOLL먣I'ق'm ~w2yr,@18SuN࠿?^hmr巗Ry Զ,efK-n(Y5' $y*S )]9.# V`|ms%&ehvpHAE@)_د5$ؐjNSƋ3:eAìI-n[QYf5~>βͫ<eywk-|@6#Etā˩)#[DE=cC$u9YA{D:]CWw]Qc5s* o@lP}i6L53`pu<)l=h:f +'Y0j[PRѢc P~gx4!jGi*zqw7@I<[B '/qsfIgA4BuBEsBWxuV+2T'3P\b*C2n \INna3$QqI 4H]1B4#DquYcr_H۸R1P& T\"2,12 &ΊyGV*K A2S!)+Yr`1,W}1y or#[5z+#<_g)(lJb+O!"QNpOg(9$:Aͬ~`ؤlPua QJLHP7Y68K3]44Pfv 푏X ) ;J,:ee HjdcֱLkwH8+D5=YݤGR$ɞv!uT%ͦɺ QjX VTE YNp[糭!j]{F-uÉFԴdA!>6y؄0fC]!\`E ^ >awCH/ -`,`GqWl9#{&fQS4 ZG|x)@l)FN`['Ie7@9A ~Bqơ=/uǘ+1z *?*ӢH~%/oa ڼqo{5F=y| (29:a٪}@h灝 e#pH8T:LMzm>}fSOɍ"^^*, P7~bb%ct #(o;Z]n;,">Jw$R y]ɠbGfX9J@=QuSBF KAJI(S(஫^LV!^"@<^GY +DG $SẦ#2RV؅QU646(x&ԇ 3J(|x eC!`E@됪yGd$}Ba|s'DtȻi PLzy9+R߱LT}2"LG6mKy{5skq^4A"BexYGv1$SsctjfATՃ5WD2ӸʭR,k %i.v INuW;m%qpb| Mɘs)۝PW$401K#lXQ压pZƠw fz@>anײ .EMAov?/.o"w pfb|Au &T8{#

a˨T_ZَK|͍>t]9Fr{Ctn>4[-~?nWEg2] Oww@77)1bP*UU (FS}s3@{6.<)G|hB\g%NPrEe=X[F"nam#*[f<29Kaa@ײ|q&bMkїҁ ѾD,L<ņz DbF{2hYG((Hoy_ !@uQ#HO<(h]׌vxWZȣc^c[wP.8RnEEO$(pbg`P9y}{@GI#)5 =JPqmF\ '.(SOǢ "Zα^&{9stA1lu JuG]0emT3 jzB5#fYMMstqy9BL_"L iyU&s%{4vݗ] ?\h"Zjx洨y1_I^3P~F]n8Vme_ '.sှrke
iT5娲ѵR*U?#nzij=Q}Aьt"< (a@60}2 ]\/mn J,BPG\x\b>nAxSUy5,~Qnv;pul;pRt{vVnk~>?nw'lC˟M쓺r[iU4"j1pT* )~e" endstream endobj 42 0 obj 4051 endobj 46 0 obj <> stream x\KokO4p[mf@" ru-Rjb{n3cKhȪu0>k¿o1fr=syq11ng'{i$qΙ!Ycb 9#j!,k[.oK)[֨֓;ΏSvŲa(kY YZi *lUV,EbYsoҴn~ XO-F 49oba}%?08R7ѩwXzQk~S2nJɌDiZdX co)V̖$NKݹ]EnDu]љY;AJA4 ]s]9f=ŵ6y/%lTR贾wPL{ar+6bU9̢:@vnuzX5Ih6^- &\&7,9Me+z#@{JTtyzeW섉?!drM&y=4V LN*Xٮ|wdPx&5\~N?<1AosYn=ʭ C>0{rOVNv劭k ^3ҌbZm4AbH+.r+:\Ò7gcbؠw 9K 56i0. ]m n?vcRt{`S7V<4Xn *!T i8mc:tp EDv:1tXeuw5 SV*EWh?x޸{Q$KB  C+%LՁ}2?j.lxeX`$<{» I0LJ'x1N8'Ym8jd ρQuC EA{Z&*c*njʉCH^p>DjĭϷT}$gfE0@m_1rR~>grL^gq&dg#~!~~Kd|ATA|UVp8#ETzE yLN58K0+O'2yQ.{d #O0>e&O2yw*6bG:/H b7ޜ@Gb r%l[ED▐05aU !bwI*UWcF ĝcr!'dGT~Xwnv3x y>}Jmd01`C&.@StF&wc ŷk7.? a{؎R{`'jqv|I(TÀ.c2Sh$Iߢ'܁ƕQZ:c;r&siCΗjm8V]&-\BTLl)$s\toaP*:uH(lEz`)~AqO+))X"T$ƌUoIBril%/ʪwPcu&MQvZT˧P ,UbxVڃʲa28QZhBOև8qS3B/nX }!>UHY#8cW _}<~ݮڊ}!^:!k(̗XK- >L} [$HVM!2M&';c=gupCx)h;(yZMƣsXby]KO5zH ~x1Epx+ɧR[Ux\rRmITfMCl}%Ra# ʭz 6K[\ x^E[t6Xu[K)Sz( + ~Шj;4o\x+n Ǫ0k#G]c  %>/?-^{l96|r{Z֛aJ=Owy:F*lG 4BeG[Ύ~Hit6ƤtL󃲐G2u&k9 |s%%kd~b ]o10]WQ{*H;_G' ?x ]/ݿ:㑠p8;IAګnpW V_l#ycl\U"Y-'`s vn9U)ƍlbPŨ67i2 ]+u҃ 'jw! w.OC nT&x[0pWƑWg)F@SF0aT8fDb ǃP84endstream endobj 47 0 obj 3472 endobj 51 0 obj <> stream x\Ko9{r3һlY 9,r<9_߯JjQ"[U;AP$EQ??gufucf?Y?\gk9;8#ٌ1]5 UmbXF*3ÓV7|~[#Kp["y;B/FْLueAg6X.vэ2 uIgZ⧣D[ϦXŴda]EmA\ƙ䕭Sߜ WnOmƸ4S,XY//֑J8'7-̯܊Ԛ E}[4qLz&`z,jV۰<[نV<&cga#V#?y;R@ߊKuxe Tkl:|"[sr+0R.7 `aUE&;FN1r'=y:9uSGP>WdoM,)%͛dIaU  @ 20`T`i  FܨĨ(99=D7 z7{̾c眨Gv͐sh7'|#Yk!0Ey:iHCkC/)l1hJݾ] 1W͝v(md" %!i˝\ml= H R08@h.^#KO;,Y2cC#E޲(QQ<݃RV]pw84:|+8%9 bm;\!c0XܾՁew&=໹Ep`p[[e0٪*.^l_x87*wŚ'QV7Lx^ǁI0Oqx$D3OW{8^@AwvWNzMW'^yH;QiMk>G$?:IOL)^sB_fQv%rbx^.BS\? wȵKŭX.:OcK0H&}ўjPҠ=:(H~G؍m$"5m%yw)8];Z[B&j}u ~[S/E=JG[QjJqv"v_RE-@ij *,Gu*$&U'pƗ0X'/VҺ;+6:6\Wvl*ToźA])[(:8v:6vOW: nt?w:q|}Yݪy%Q,%wk׮:4* .ړɢ&|pc̐Qvv5_N$-08wQ9 k9g'ZmƻCťS5 זֵ32h")g8wy]7^1-搀8 M*ĥa&lTC Բ_ -!eed~jTyL:=GD 疔 .[HwdÞBK#S`y֓HFof ' RFE8ݱ!B xKZH5Q*FX'sU'5[R_]`AtDHsE-&@sBb_b!^ -^)WVxI dЃjA)+pKr2Zs.{6@ knx]M~ a#U69 .,X`VD,Ey) :|Ϧ <_ma/fgrEZ6Zx"C7_g0? tHK D vM2&&÷o;#[$ls.l=#Ek|}ZұxLZBrz|VoX(:E[Ţx\^ƹ* RΉR.7e(';q`;& VwXP gA&oRAa:BPR>&C|t$(B$P>q& {1C ^S* |LG!9)z%J(^&&z/q ́*K;n-OyHXcXB8iO;yiq6 yvzXEq6*K^"}cBMUu6,d 1-vpyeGu"uy(v|f,o7477i$R:yؼb^qӾU&>RݟlYendstream endobj 52 0 obj 3003 endobj 56 0 obj <> stream x\oړ SY~I\ EEn$NlG#5!cI6j'Af(r8owߣW;^;?៣W=Li2;ݮ=xxl@ +YӖIvi4" /ӂ4E]Y8UZQÂ4 ÀL0ܟ l Êj 89x9'/&p&-EIs/s24+qx}_?fyˡh#Iz'x0=𬷥C :z2(@k]NWEm'Gp.06ΰ=܌ t/^ ĬވQKزlpW˕jfu}iވҼIF@0#mI F~FSx$Rݛ`w6" , /mZitnzW9j,0|m_ϸh:uf[ FXt*\W櫿YaUmōK;Sak0>RT ==D-o[M[/IN03Mq0eDWhD' Y_2?n_ÝF4Wy|]3ktY<3tů,uzxQ2)FJt`ia|VQOs&lDԲ́?Nʆѭq6$Uf\8DELA>w\KOpѣ% cz.2FU鼴F`wABw1n/N˸"Z3cPV7|zq֠AdEo =ٕ, S #J;B~bAjv Adn;<ȰSO[g2[7 BK&Ys̄A n2َSZ*;>#xf6Eyp9"vüO(2n&<,U5T̿sE}R9N9tK- `!wYi4k)Hƛĥer9oEQWyO!KQPMsBajׇ9{.oȢ7_(Y@`ȧ音BY; 4ߌ0oK @]#>Jӂ,3nҰ]xͣpUc]( B5(!'}]svT "o Vuie~Nj].>H:p(χ%sÂKДG8Zqi?m#GhU}õH J* z_4gpX0|\vOf/89ov>* )?o&x~^(/>yKs@h6޴<4dP>Cٙ׏1_&'ݩ޾h) 5YypH9z S8p/a0^4|'0~v(E2_jeP0:s]R*AiϛFqbs% ?ધs.hxBuWOXi^vo[ ʾU*AS|iؕשMpNQDꂣ1kW";6xpE~V,e;mD(] dӶxތWlܥF(>TIM􆵟Ĕi(u<Uݖ*By*T ^dHlO2 kι tetSʐL  6mʵh`V&}s=?3 =L%?f\e{UMMTFQhSڏJJynAm=qhUɥ0K%Q2r_fMM*0T.ˋbF5*fTCvuӐ/r0*f̮ "{g{Zd,vzV1!la!˅]ϧ||.Y`ksvܥӚsȵ2IеϑES }r2j+6'pbbsC?oQ˫p@m~ 5ֿ Mndab+CA"z' h;N.^'j Ѯ_F|L_|wWPɺݕbs5X }"!|{*F`GCkRƻd\% Z- o5AۻFGtfj5ϕ8tL]LuiԷ..+.o7Y;ǒ qw*&t?KfI}e7⇚E<+b8sf;Ġ6@aX64Leu,qÊ3+jǞCvg|X-*raC)\p8Ÿw(NypݹYV4ȕan/QËʫɪ[2IP؅aT}.G.^p'΁?$?Qߜ߸MBNq}kEmXKWM_4o8Ah^ssiFHͤ_U3!8{. ?KC>{1],N4|ߦkET5Fi:SrRi]3(_,彵-۔ glow6(c%"7(_{- \, S}NGzfjW 9c7t5iuq)CK1 Q O㶢=z1H&m^b*Qb=nWMc̻]oo,C,X6Žo"!h)6epm*k7ƢʒnlG*/g悻p5b>D͑7-xh`zBі DAn!BNrU]7kРaNJ=nُ6譇TsY'IYjW?%'A M^ 2lqɍŻ+O  _@o%E- BِM|8t ;"ʞCh4lHv|hCCS[Ƈp&-.wrMn_Q7m͔{ּFTEixg˟voJui` hj] 4 -͡li7a$-P1 (Nu e զ;pܧ@•i~uѩL%5FmZ))ڽН4[QGMp(U<7h AmpOHv'yG9c qV9мwoĽpU^9 (N [ z4T LGC*\˚e61X۰m$|+EࢼntRZ`k6.[cZ>j|ȵӳmV5CX00 W&ܭIWb~4[0ƒX3 U>1Bcvw\p D +3߼n۪[rMW;EQendstream endobj 57 0 obj 4478 endobj 61 0 obj <> stream x\o ړYejHP:ˎ>lK$%ww~'9m "|wevlW;w;*qlojv]T;qU)Zv6EiγGmڪիSj-</=)&::kE0; 02_Fֈ1\%$ kf;b Fj`x*ʪZ}A]&Ҋ0wԢ0B֩ݵ"Whҥ1ήNeQۺgU]1?w1՝̬."AW])'84We۰=ɾGU֭>lmel;[Uڞ04UMeVyHAXPSڲZ'v.9ۭuSBjt#:@ֶq.iZ]Ô~uvgy:i|nqhtˆz&,~ |6/:iӍ_*uըN<ʚD=#RQV}5a9# -.)5Y`Y_euL\*u+ی Ȕ&i=Mz_Dn"ݥk󑪞Aqx[$ڼY:%]}zvٶ#fɰ Y/t2%!` P@M f!nho>_7uM;H[r hmj05hqut%z|ѵ^Ƒv&\ЧCQ*,ϖ W븸^K XBT]A~ӞY5ݨJu==5U ػB"<&6~=c#-ݹq[E߳[CހY/#-ud~Ȥq20MYf4u+X>aH:"coRvP)/VZF^ttQ&z4kqSԪTޔVb;K܆ Nx]%F]L,zTh#.(0].{U3nT-V8Pk$xppCط$([GfGG:Q>Z(G%h.݋ T%}_FT9D*Si/,.z;':땮SG, WU9dM]U)U獼ղU[+E2`mnݘ(2?nK+ Rc^dsZx\#4K 7+ Hv^I+Zj}JD#yMiRLc<z[/ |#Nq0tD6)Y D)=S̳-P9 S ' ^ dr`lTwCqG قsBl1 _VG؈suQd 3\g'p w11Bme|:e.d"K~f>"v+5:X/V&\wg?C=V!\z@?k}nc^x0G9]DPWr[!dt DVCNݛRur$87j]Bqs 4h->_Q$~94r8SL5 SgRYޥPCM'}m(8DV`mPCLc&8?. ryJ]!+#77j 1(d}尕iy@#^5?ȯ4q6zR;Vx/2'!4?bF},g6͗q^A WB@Bq\BKq\fp0{ahok5 X @)(H 4#@C,◯@L"8.\Fssr6x Ww6C]e2FYg"5ӊj:<8ֶiqfN;qN 9t~f. x۬33H,pvCCb RN 1h=dˍA~)ڧjܻK/-v˗q1?|˕-g\MfvA7G|IPl*( ߣؗט6tPDŽ!#\ȷ`Yy~ V~a="XV"g! Ohcj}A81Pl8vLh/tqoƾXځ-'c۬ڑN[^9KN+8 3x")K{4Wy3j@YT6 nㅮ8x9[Eh~AHD>cr~l/J|E.OS@p?̨Am` A*ŨV)7}:'Mr~ Ȏ(o侐ݠG7r. .sq r0$1K#/D klna̎%SO.qG֧Iٜ9υCS~:Q0 ('QHetj^ZSTghfS3{8"-%QrTP%o3Fe݌QBX*hi5$ny7|V9Oh# Hzw$'|,qCS!W"So 0|hcono֭':{[|:!MX9300Le߱nS2pv+槴wLxWKn-rn$vlx6kn(@7r15- W{c?*\==.+?Cj=U6[#\n>=W(eո-=\kSMV ?%w9<ɲenzMX\>Uc6Ы fMfU[Λg Y'- b A= ˬy GQxWR5(vqD^Qcv|>/NŸ~j8itQ-Ï3'}3Q|g‹wOnۺq]u $^'^5+wxujڔݺ\>„K}eڡ.^nz;>LP>ZWЇg>}V6:x7*x31,#ڥq3[\?@xbu^"~'3)xv{7N Ƞ7 ;LgllvYj^>Y"_::;xf1bųWnSͪ|'FaNe = *0]W~MXw{ t9gpI γ ?deI; ,-?G?}OExkXNP:dW0t`?㌼|8]oÓ Dvъ$PXKDr״pB)Z?al9q4LK1SĮ}~w9 4_Fg9"C|B6Pȅeg)MLVۀ7|]}O *pw\nwv;c kuse:!Zɏsu8?~u(X@HrUꖹOn'>.=>!pM-1Ow H>? /&Ӂᆒj\|L?ȳxI> stream x\o༜lfI.PGEiTmINbˏݝ$9 !Pp83޻EUE=]^Tӝw;*qsx뾟څ+]zV2Mڔ5v=jՍ]AvzyFO ,hB ^1#%_G{Zq""'e|^xJ ;}F5?ݢѮԵA>3V2>7a2d+gUB/DV ^*]c>y-";=25_DfCO"=&YDT3R@3'Bub9k{ql,[he˒ULVe2PZwBIF0?7jn9 ׇC:|`nc]'i˦h3z) +0NV'Z1·Wz3 g 4@&Ĭ.ъ@S¡q3<8P 9"<G±6' `cn)`'2SA$Pds$ {2Vqn(a1V +c{ۍiC;:6p -cd97PЄk-;RT Ĥ1v3&-5ܦJ񴸝*r- ܒB !^$ !-2!l!O/!{ Eޔmz/.*+"N O"L5gⲌ3q3$ĿS 7sO{o8J{F*{"wp-c~$ Ev$WVo׊e)-G= 4zTqSK*.H^ xz%kG3 +2Lns+iހ׆~>axN$ZL}Y;P_ڰn)"B)5s'*ZSVO_ {/YIS}.G4 >@Po=G8 ~: p|Y%4_OCs @p C%@KqOf% svk:3j( 9@%%鹯Ѻlx[ۘm/HwIP68|,6 [Ed\sW? TծW}2կ?_v]1me'sx`)'24,1<)A!A'yQi[CIOaur26c$Ì:gv-1qQ >]`86]o.DW~LWqϺ^Ƚ$Jj/w>2h]+}Wn2<8h >uuLUL}5.=(jGжlZ/>NLO |<$0+mg:噀pSiMN;]9=QF#I)64P*'SJDJ.>3 FRTߒGrB |4.9^\7Y4s{j`AD]&H{VAJ#g(< g)c_ x~&| fvI䒪'e;=bTY_LcH cѱlȜ. 2puÞ71 or$HgM^[-^3+3uJRa|n FB^V0 ܾ+WsCted GfzPKqjũK6-@0`CcdW>f+22(#@w^%mBe< şl k_,>LbigQ?!}1hWcxkPG#Bʔ"m⌟+:h0^Nr ʌ7+|0WBc'?!mkV"C(_@}eHtC6sLHW<\8{)2Pόrvyoq;I\nbDO":> stream xrE.V!;a-mE(RJ;^ɲ >P:ӯ״>V{~=W-n&ZL>NDcͯ_f@*`bNJŴqM}> liXPf-Z طS@YpsPK>n[k4Ҳ)XFV,\iÙqGW-q7&BP[E>L阱޷nOԊyn"uG Ld!'>#%jxǙsIi%@VV_@tND!gwMVրOF0nMU _oE">I:P&t8$6UwÀ8҆ 7f-)e (DR *7b.`ÆA؜j3"0+d裋$! ey8.!lLJ\0[j&C Va|J݌WÍQi 9.ƨB8lx5Y ?w=A*`=vΡM97Oz©~[O{uG։X8P޺ tѝ8| Zlf2`5p; O__X" | AN۠20urYx'Z]n6E& йq;qT$J 'u&g_Of/ƎB@b&$,\aiΒ\vfIq؉}? oR܊TˤkV> stream xˮdɒ6asSQlAA+V7LJ^Q} ȌCGq+Vn-Ƕ[oܿ-|+G~VbQ nH%=m~+B,?Q\#c|G=#߭=[ j02a7 h B'OKGOh1YmZb<ȚLxoE 1=@~x^,vX7:C\/+/kG*Fzʃ~(07Mr=@}G@EZzLj}Fߴ,>!ShUyu:[U)8^$BZڟ>ȑ23-[@ Egrcf!O$s:'Y0YvX Mu,85hivO=KOK ^ֿF=S%вzlܾ0ƃex #,Ibװm5=1c݃!}<*5Bd:^-tMRz8WA yqbG4L+3N#!%Ĥװc {"GήcP E֟j!=HэBgOؼs:YDŽq#;5鲉jo Z+Zpa|+92GiXY[ڴ2Cl)ߖ6`+(■ -'z2Z(2菜{m=F =u R YmrT[{.w@ö;П<,E7F >aU3(0?K:y۶E%^?@hRjߴ6 dLQKU-y\ld72 aD^/t޳Yb%5}n.e Kֺy{e|{BgLӒP/[O č?6:=j ͵OA~1hDc=PzOrO<˿9ZS_ƹzze:=/eq&Eem/cjy`y j!HxV߹1ja't:hmjt?H7k\}@ɻc`?sˈv%_~c >u`m%;[6ܷR-u`m{e6|32+G|74VϽ(Ek%4z&Cn!CS2C!/ᅳڈ{*<LjqOm!U{9·Z~|"hO)}o勁oaYzH5JXH_o?.~WW}uZǿzMhTY~dN)Az l ZpߗrxJr/&x+ay E_+Ϣ"pZtME?K%)RV o_tꛟ_}?QR{F BX뱅O(pd! 6RGouLHy$ڥxB woZ}F?U{{IGO#/Cf~86Znߐ @/̹&:yBHԺ*=p*0r]?2 t 3FHMT\d.&F md h_%=1/|0l \! xʼnk!Ӊt!lǹv Vo!>#Ls믯cĴY39]!V;vtZWKM? /9XcN!? E5/,$)7@Ewq-@BtL2 H2t!*2#*#EUBto'85j̿@YFhH2##jB?ӜUPXc V0"0ڱN>C *// YWXiB>|M~E8̇9b`EPV}D? ֻneO/e/eߋF9Bif#$I=]Avwfb@cdƳ[S mm e#MZ]mntksk'J>$U;␧2D3^(_\f18  # OfӨ 6*y`짅]9ɵ4ܾ~Ong:s-}&gq!W=TAB)kEW"9co&_5S!$k!{>4Ôԗ7 tz?4 ,q0]Ԑ'7pqRZUxz#P7ZўaaޭB#)(.~J- ^LbkK8JNjY2Ǟrw #}tQO~ 8GgA ~ee/A.Q/Q!o& @b|F~^weĎ7)e9FGζoJE{kKtJ9}U|o`P B*vgߍG!~K`Re> FƯ7*pBAUK ۨh+]SD޳|Œڳ|z}ruIDz䏴dyv2FrоG/!.taf$ztc>VU3Ua$~b^3aifC1 Qg{nLAR=bA-qaq %<6q_Z͵a5]_ L*ZŮDL9(4GGʋfg' %&&'*%_lMo Ў"tAa}L+d G"s'&&8P9|o!&dUfFՌRIy:# J#Q_&i.9jAzZ38 nz^@K(WʈD@Ҫ&O y N/-ra"Pcpp:yDUFx`-IȓJ$\Ky{K~{zw*M'/"*.'bCU61IRcWT VG uy(2\3ML!|x43T)YB "l{f’G^d9=Ui!]0N$r/*J87 .\~h2Q8n9)MPI2amaI^QI**U:jӔP`zSNZheL({ό}z| } Y 76B9x>c[Xd7xqoG7gd|6瓹//ll2lf_٤碁BTA! Isv~,,>gg ٧.itThR-0[d:F&~LOf"V?\$TQ]h7b[~ENְ=k]jOQǓ(Thzݪ.mhӷM8a&jr FG:?>LLڃ1t!d?C((ZlGޥ]1*=}sQJYlG)q FAh~α4sI}fIWY4׃le6fhUl\Wj<5a(M^vGNvLm3N7CVnO;Xwrz+1 O΄WFD{9>Lִ) A7r&9t'SŅT)쾟I$!E3p5F̘ м3Ӟd hc:'"eA!呣Ih`W񇍺i%cijU2?y!SZjn~RL5 }˔w' 𬇴MwI}!IiӰX)*04K[^8yh\kygkHwf?AMILË"`4{q3n^Q"'(cSMdN}!;rQFBGΆ#eFϪP򲘉z cfgr`|r]v_v;_Ք(GD# H2`CL/@+6)*B2[#5*`Ր,3%T!۶5^DZYJ2-&KY9# L(FZk& D`r+h˟\N@z#5Lq& f}^0(3N/0.^[ғ;U#EJŦ^tJ6 T%x I!}7"]|<9" P|8]v_v;_|FWqxKN\l1ٳ{Icge]tF$wg},-!dєia@BJd[tDRAH"?#PVOHz[>Dŀ"ՔD:MU{NM]^[ghujZ2&.l{\ #kdhJhN(Q_Kʥ}Pt;JI\L%%/dNȸ~rsS{.sjOfq,t̡&sȲjdyD㥦hoϱ9̩& ^˷S+Qw(<Ɍ*fz29VFMg+ml%󞞒y/Al4 &, ԨkB߈*fRTFf#وbd62pf#///X~O-Һ!SDIh 0KȅdEU$[+֎9({"J{KR?2Ȯj!)Q8gS.Qi7$rzI|S(3'!#?#QgJImmd[vuvӄad=Rgmpu*iTҭYGˎJkHɎ| /nt|{k4H%p(ǀx %osB2"kFgwOXj19$3,CkXfQv<M&pp0**{K͛Gsώlp3\uH[ք=`yil=ʂ=CeكcSUqPU^͵k|\^9A`Bjv(1AYkxVV|G&㜄a^vs֍;ŮuPygn['T5iI*&NJ$7.H0GTBx Sy$h{!Wݵ |ڸ{C O0k:5Ll˂zqqV/Xet\?o(l!02M#eohGdtCR,jjRِ5s|PfdHG ѓy#I6ŀP]+u S/QVJTʈj4ڲ@zL2=Q~AT Q0 a)@JT *n /[Ď/BFf'܈ 7GTOQPK_^%%IhۙYH:e9tlز,f5%/$hP;jj'[l>Qԏ9I봤(@ܛR`<7kvz8iqm s#뮓Mq.]<7(y<m\_ :RRS_B۟OE Ʌ:[Vt~i$:#&FBdLbWggPFj,j?ce<~;2Ra B(Q4e!K8ʑ!$9U8j/`&!Ũg3 |&WЩ)I3m2GS~_7wcVڞ_AkH:S-E*\v+Ɉ4冓B'%fuFE5*q:3azLW01tO9LzV65k6_l>t./ǿ_m&][R3Z22u2)*`zƜ#jI!f,)|!W> aH.9TjύRg֏XlYݤBUKgv&VnPm!s9tc6ciN,"@YVH}ϩ5uwF1Un0*vK_hK"a{0-gQ'&uJ5zнqk ≒p=R:%k?1hyik+V|C]~_~~"O` /}gR n޸rh&/(r 6yequv >{2RarmRLrvÅi(AHTC8Zs"9) p%:&ݾnצ_@6r{v͖+&>]e5 *AEUm" LΧLڡjT}W|9hqIV-'>gݿ~; ~y{y\M9!ΘO[g7˔gmGS =Gᄥx"I2pYkS5ݬP mW=e?_^ξg}3Βw4Z E_&lB~rH{u H3of{;eUsWמam.[ijtNBz{Fj{ns=z=æJѤ–6ty?H+g:N*7w5n%󥕇K&2k!BB>a~WV6hW1կIg麗 ;䔛=(똫R9>o/|gRz"Ivvg Nf:hfRB1YGj{nٳ]gWa_Peꖅy>Z)L1+O=F=AeޫB7Ò}I( !/}\xS88rr=9szsGF(|!\{2MS2%G"zr6G M*Ȗd1XQђ, 5#ELdm!;hfU'Cnvκ%j)˄JT]]'$[Q'8Z˵Jzzޘ뽄1_[eܢKk!sU8KNN+k[ITn@*JzPD^FlfTA%Fr䝍Cx//ߐ/ukl,J&H,JFY1ie*g2̓&-&$6V9/D5vR:Wf!yLh3!˷ 츈U4At~̧Dح-]rv3$Pe~&996w+ټt=G>=4Cs؈T684"sILEP=!MbsPɆSnoE,o}+\s| #>?]+V+Z_G\^;M<)$\b5D˔SI$SHI.a,OL_ 5EAPV]ɷs8P%Co5a ,̮ئĸ7ݴ$'[M(tkљ @[@:'?YRx\%YJF>5Hk8[;M2Zwa _[ocW%mqLF@WtF@j@8cvxr2p@rM*6y'p5,5k"k":L֗K:Ir[3N:S%S)48u($|H zic|ȈoTFby!32Itq *T^sLVZgNwȧ y'NelVr%+5nuWw#Qq.{LiSf.$C DRCϚMUVZCs(w {&5g;x4lU#%./ߞҿ__SڸVc2gLݎȜs2y"7!wDn1(scr]dɵ[ɵ`4:LJ+arɵfvɕr-+׆2T=7Tލʻc n\ v,lk4.&+Әk2wesYudVl2+O6KJ71Ҹ|eeaɗ__ES.ɑuW$ ﷋$Hn`oe),DOkuw l)V҆\)0߹ ע07#3g}FZ:EN) Gr.a 㮫\NIW'KLdPM䉤/ri\x?8Sb#+D!@d=F )*ixӐ,D"1 w0cZ* =b+N(kݵi)UBh;F%)r0bz5HH ^NR4 \s݈BV#j%?RJvHT,]Hϭ82m(c]=.iG.ǖ[=I8-'^&ӌTYq[cC:,tiǓk.xp3-k r-m-/#//ߖ/8=4ĵZ`o<H2$0N&k!H*`Hc7;Y)D-'ӛޠ[Lg 4=DBY׮ؐI|F(\-:kGYZ=RnB"Hxs,X =ڇPٴW_8vb!9qt /=^g=T.$2) $Ym"2eN5ks{ ݮ 1>3 xci}6 Ɲ= iG$KhT3 "9DGiBh# +lK>7FHk$*p(xSnEe=vq$=:4$XiXXl>1VpH2漐m]Tqvz,:dѵꚨ .DNqÒJu6P]deF]̤d|UV~k̅+Q(o!)Ÿ:7 ͐2t}G.Y.N)9O ɟs!BЗoH>]W#yV !Ӭxf%@VR %H0癑u5 x#B ^g Kd$af$֏ !؜HtYf#3iۈ&uF^H t  3#1ݘ@HgFHADNm#  r#Do#Pl}k C>lH/F+{D6mm|t|~|9qBҕmn}EUoζڳatMAMƾfdzjk Sا>MI2R̾Hei! múSG&wrR<"; )vK7"'U`~q;`lnzoBolA0u \vhRm:aVm [;"-eG-9s%%/D湄wV(˷Bx@U@ HPaW) Dm ZW.cWI!<2 :sYM)Rq #- +rȎe/Ui^qI>wL잸0îp_s'Y(NvyՁi[}C<4#g8*VmpAsSim}4) <TLтUˬymdj'I 542iE/Y4雊OlBKhtmHחI= t;ra֛vs2'# @rOtiTg2p:|g%dɍ2ޢ0Ǯy$Hzͯ'.3 R"vDEߴ6)Ug*ш dhEp" qrs7f/6?*rЃm[E /Yբ ,sZШp] QpyAAjzolRswf—Ma ͱh g1I\

hF`hܺJֻ[Yz:7s~[Z6OqG$o+@bƲAs{xTo+Nv6 $8YEg,WG:9uC'EXVXv*Q~m,@wx pnTj*{zj*{ TS1I笢2֛4wJ!J4lo$#&cIH|s})¡/ k ځWDiy)lYbn\Uf< 3 7ШڊSTr6jl(Ս)йr+ `VMC?1ǧk..2$rrM0`ed0B!)Fc@TY%[T@$=^9´5,PRkB25i[H,$ўlxN W62"k{ȕGb:Y[GyΑ6س)lUݱG.O(ܓzJN395.h Z^BxҸhߦYEOǧZ?3JӘ68܇"oLc 3%Kd<1HC+f![u5HtVY]C!Kp@4,NDve䪱Q+YФ@xS>-!CP'3]mʐ&Y2^~utd 2KIv:QqcR!.۔@Bd3G/(BxR$&z,$5?!UV, IS"*r7NOݚ~ia/1VT2뻄އ َ]ȧ,3Kɵ?is}~(ڼ؅v3\h k8HMb-Y| w{f1 ({`?M3 m B!nو r7~&dGc6eg:Z|0 ewoFƵ~uhmȝn ց {):ZȾzH*UU||6u|NL998-Wggӽ[c mrMMo[x٘nd~B$YRMVO:tI&wBG;FV$ht|u@BӞiOs;䁒6zb[OuMF@b?;)h'$5j(BL&wp9ݥU}. ;wʜ!n?rr=p><8\?\_JH_gqoxa5ԉH1dftlXK,LjZ"@9"(g 9 ar985 @ rW<"l&0$sI%]@"i0%\|,7-,]NuYC5Ը:mOE/+Ga'+=w/fq UtTI~V4:aT3&OWL9I9S`oYy`WOO@gW/+}mk6l|s]_toiDIiwvkfX`vL%JvvHHY \zG"Ÿԏ@`3^CȎ5CQ(yn sԕMv^ykZ?d` L|3]\HюQ@ԅ':^HA4Q [Cw݇:*% V׻vMB^Ze(nTÌhr0h|nPSw4!Iɶ^ی ]4ҞU2!!υWk4.+cD#pxd_UG/^|j;Pm%WWx:bPO +7Z_Yz\S4kJ1Σ18N1?Vik(uzf!y' ]}T 8H~P2}tABٗ_ٿ_:_::ShxB)}{:vb7Cfl:pXG@ۙA \Vs]jYPlk8ODZ ۷ܑ!)y:ѹ36õl@dlՁ| bPlֱY62v ]Yi\69MTeqDn\6Mu˪eadSYdTVBn*~|5%%W 2;*g  @RE0+^80i  'Wj#ͅ#'|=Ϳ$˒H=VJ- 9\aЄE!KQ13R" HVCpp- zLo}K@Ev,e2q/+iiR@ľstǂ) 7B堄UR}@,!D99b$Z| kh22+0~_i)[ Kyَ @hx I͓k"J#|EXZ)N3J]?YvXiwhP7]jP5|FaW1ĬZX;nfc4EBlL; jFbw~'V;c6btfc4؟:q1ٴpf5FJ'޾ȋrKXi./ÿNr÷G (a?4Y>jRp8xl!mNԢ'#U>jZcc&.eҨ轂bمSd@7³&ي zo,1]C}]Dz$Uh)SPuQ4O|R !.D5}Hתz܍SͰPcQlaV[`=n.n/dnT}|(xuGI7 d{Dl.ʱuoQlN}Qk-Zuee;3ŁʃN"~0lLF/%e8SLJT;R>U>;]b U6&AzZ䎚uq2"[ ҪU5N_7rt FR!H]#w/"c1$b@-~H4H-ui&p9ޭEYw1Z}wR1*n#+Ы?G, [e  gjM0#!wXqR$).X5ֹJJDP,gId%@$B+|G2 Hcjqt-sgS.1Es֩d7R Yש$vߙUtmJIKΰͳx-YFDmR"9npf^4*oENL[*B;r B"|]N]SqʥĠ,-6`D<}8Jݯh6n(@Sf|ѭ 9T{8s\%:%o.c*Y+=C^ .D?r Z (&3}8 Tpd*rS v>6\廇=VL\[VFZrl9d3Goyr''PJJk[s8 ^m/ I& LZdc\5g4gC-6;׋3u6 ;J1,7D E l /YU-6NtXl] 2[2]h&h9yI؏v]3rctO>Z_C_7[ݢ@)[J 7v ,^}^3=g^ ɳQS2Xz!P7&OɎhiub }#=oXW)Qk:t|]_vG+dU)SL@ 'v!YJEzE2]_J;kS<؅\ɯ^Hrd滌 A$b4P-L F E5a9m7fNPC5^ jCM7>}56'I&iR=r ۵R=cg78v]grml~EVٗYR#*za%Cen98zh@^sEdƀQH `he [dÕL63#W}r--cNmZj2uK,02\,ӽnZ˕LjTw'KICbKF nʀXd'|"DZ+οDlU^(IFpmg/'b}B簓ka' [%ouدB$PE $Rwhf!B h\9*$X)X졑!'%:Ibӗo//)3yPH8F]eTF왌L Kk9*#A<,Ih-J'Ox7]˽S2ṌShEsdT $GO 8mC޸ccmLu d[1$n1j5;DbL6MFeQhb\V&7ٔʛ;#Aȗ_ȿ_"_""spd#DN6SSI  W+"ES1ȍTQ*ohn#h4st%ZWߝL/j4ENj0]x˚9pD8;H$@F9\T֏-=#hg:F1:+֎r./_ѕP""7a3kJA٠'o.QrHLI`U9ݭYˬKIEtPd'g!l[ӥ$NpBQfIo/*ukƅhT`!ef!'"oֲ+Ie'ȗ o9 J=gpŚ$Ffw> H/.AfB c! މJʼnXCuKݖ(,EՓHJz" U>sӘ\Cy{Cs~srmʴ! opI#)Q0tF]ELUʷ3j$ ^ZUiԻ/l ji8V`VFң3PX4(Р4T H -MYȽ^ DYBv!iY,$J0 ۺt|h,C>ti?Q9^(ε!#rtdU!D}v/`; Ӑ]M9rJh}u_f_ff~|u B9\BG2Fv:F7BHRB#x3g !9Fpu8B/C^HaV L$y!Eټ)Te67 \M˻[Z,sS"+[*d !MdU&vYտDVm"+6'e__~i|i4fP Od.4oSyPЧ90{b'LKVNnqdF"sD$,0cqOͼ6!W^H>EPm& "gjL}HcC:Y XJ[r޷H:~ :lתvϪ`lߜ۟J&WϷ1JI8iYQ5-I\cy%% kτ%F<0Ќ-UDYf4{,$փŁa HkVAJb~|dmgwCHbhsz!DwP4g2JMf6Wk0enQQlfͨHTmFzo 00{Qm{Qm1:}t ʛǮ%%D #\iL2DY \MDw2twtM#UF28g>:$!UP:c+9Si_Ū7N%=R_HJ:3in} V:(ˢ Mwx:2"\Bj v"Z=gYuˆaW;"JcE%/ b -U ۂYjAnC6xMkq%%~]l>-a'UVŦ$(r_#__9_K'F[YE<8j!iaTB9Df Dc..]Gmr>xKt3v<68\$]3A.IGLW6B?9麔 ʽٙX…%J}>k J@7CClkD\q!B䚔  GUDE7Hs{H#v|/$}=ME4z$KT#4pjIB.=B}| Ǯ@ @biQ g %aѾ$#eE")(E7ˢu3[. Қ/"/T(p!b!HĐr1Zsy+H&ex }FǸr--OR\v_v9_yr@3^3|5H.5B(*44Q!LfG~1BBr6dR!$m3hg3qF=E]Mm䌆{,֩VC}ep$o54eW߹hhthFCѐ:BP!]m2_怚 Tg2ĥ,! g1^j16jb2 %t7 =k)RR>|}9;_C&-z[aU'pxK:ȚlJ^J!`k}žhdjITPwˮnI _P(E]N$'0nvxv/`!!k41޲Z6Pퟵ] {H=j{f/W#}7:)DDM/Qb^(r!3UkTpxqS>j1!ԅk0/][u}~TlzоdfvN!}9;L173SėL!cұ I*UriP2l4 X.bUSue"dy,\I\n+7Mfe H|KH ֒q4c7xB.nIm 1%Te8xgDQ%{qX>4$v z՘ՙPhj8jO&A\F0VOXLJX%q%euW0}KK@׺P]Bf*9gxjFS NtNiuar03"KCxqpuYnFNp1rqA4Ae|e,Zn4yq!^z]Rl )jסqZ| gc͡I9%fVXsnקF sdˢ<k$ ,GU 5K-etS6OP]LI~(Yr+ZhrWSR^ Y?qťϗ_ϔ:V ߌ6_ڌ^''#0FćU78`hN]du3Qf,ɪ6%L O`~"'0FG{BkK#4#2Bkgl3>6u*g泊tYž|Vm>7J㳲iY|> /f58j6D|Sҋgj2ekH~.Ăl9c;ٔqS2<,ïEܓMb?9HEȽ5!&X@1S,^{L S*p_GFח8+a$ӛ'Gf{MDFShwNHEY2`8FbB.qKKHn`/ &yl߻ҸEbGCD$SΎ3r晴'O9P'AL9I!=rHfOP1RX~ ݯ2G9=xʬ[r;`:UR觼 ~̶ x͟*l<t-*ʭ? p.g.g3of Ʒ2b6%Ty$\;c"kq,DvQee؎7&L:uν#]L}4`{T#g@oy  Aa(kv~goM]mʝZtеhZNZ^V{Vm^!@vw/G)ߟ远о&٥.53l`LL=#VVjh M҄z+ H3Lj@8KN6CIBꑔ&qh \ !{ F9yz/]t_t?;2M&H @ tOG-TJ~4Z_"?Ux;I!H, P) v _8a.})R^Nr j9hgz ̎ciOY_;&,%u'fKg}ESL\[6rh/Y =Ep" MAmT; f r=4|k_HcwwP ah C:B>OOObX8tqhꁬ>rhqAq~qq`9 ^@F`/T4r+F〦Y 4LO!ԇ@NB:7n@62 dud[@6]M_KC5;f#aHl +F6GȊdFǟ./?ٳ(R uw7` FA ۏ=Nung'Fp HQD+2.&$ET9% :yDj"c c&l٭x抵@Zc"g5S((S$D}kL]_xY۔Ou/h/ hpIw%j=MWM~E=$Ţ4gðv?o:OZ %lT*q`}"ԣRd/_\买~ZX?t'稲$+U.o*dǔ+U QbHFqzgwZBnfTX;wǕ4$q>,8o@nW% /8@B`FHBYe1ucc0J4 ciXcJ5❤i@hc@}mhc۴QPnڜ}tr!t!~!! C28?E†.`J|)KH6G:$rh=DB)*&6GQ%m|Js7mHU0l3X Yg*yc1t/(':qzU`}*i"hP dVVb4%IhG3PEN/Kkm4+s!5Ɇ շod._ĭQ Tu}A4d@pQGfd)q5yZҤ3ފ2S&d Oo׹ PWSw9Y\)"E3"$'ʈ"2FX cDNte+fhQ*THĮ0=#PۨvO HH5I֘R>TJ@Ҫ~F) (Aߊ4'@c#N5֍ *4=Qjb|if|eh,C(/ +C( UWBKqxBnS2-un..Dx?0`/,Ѵ) Kz>IE̐u7uRfi)7^L$S $͵* KSOr%CD -A%^;)Cy0"ptUbI*T&K`!׵ mUx ڙ9D2qKro+PeN70r]ZwV%UYĕ˝ JS;>)%9ӥz; ҄ AYɃk;a46Raz\$ -Q5ß[Km˛˛g۞EEԔTATD+E&$kY/D"dkYC9V׀Nz&4Kb+yҭ&e0r+f]\NZ]k`t*4zZ8cID Ⱦ6=R#bA HCD%JĄzݽ14\u+@2`~#5zXN(9V= ) mcv`(܆=Oc>Ú'\_\aBB@Ӆǀ2'k4 :8{HԴbfms#7fܟCdȗFHde\F^RX")sI"rC>>Bb<&6oza) Dɸ *H1+n/AUvYu%:1V;P¢IQa(qy(I&-nzöyQE8mߛt`߭xsai͊7_\<5M>о~jh?'ktAsvЅ[8}ܳvcK3/O08oER5wt3G\WL]B3KL1o%DnINS#%cĪ;NGuXc~z3FIKؤenҨ*6iT]MU!|KIޤQl6XhڬQi hmwqOJnu|ƽIoQHN;%~Xm9] v;L~pW `RK2+) +Z,AKve.er-nKŝ""ARn{ 4xaP]R?hWEɽӏeL˜yOŪU=.EzDt|LQeyã CI+#UA`nH2LKK?:!5|A|AGc\+/9E C1GYVF(̼NQ 7[c߆+eK=-ZXh-ID; )L;+]'`ߊb&xy-!#D6 O0IwsZLZ] aJ#{vI\i?$I jǗ`u4ou!cIbiЁera[g8;- ~('\ \ a)ͣ ?&lp :4+ eQW鑆mAw 2aP$?qDDyv5c SI  mf!IW5J]r/&ֆ՜Z·VRsw=B*@OV-}ppR$ַx$c(ޚpH9f0uħ͊g^%WJRr:ߠܟx{^BM^b1^ *٪6ɴ[I_$I ntiג<̯1 4|(ςZdl-9k9֗((ON']p_p?)oW Lc} & x|W)}[K+l$xc5yQI"Z#[T@#q#<> ZDȯPL !$Jʻ2Ulƒ1_:oEoTb9q7 *9E!A[^E]\ ӎJ v##۠!=Ú^^EM\sF1Q#"j͌jvjLN%ئ)ƙP Fo4@w4jdnT֥ [#Ozkjc!ܳ˞˞ž7ƸrP}D-:3ZT bE} ?GAlHko-bLdr4!9s*mSr 8!:Rk$ɭ1Hx=Wa!Y( :"b.$ߪTK8_d{Qמ!CR5kO7j]GͭfN19񯒭&>Yz(^UYӫ.cUI<vo9to] \δ%Xg@Z0:ץ%W}V'$LOvyry :А Y00i<P## Z h%[R Ih-IJ>IΗ**Oh./ޏ=S a;*F)rٚFZC9Ih3J~F1,giƇZ }2;-mgb?9b m*)L$M9tx!KFEa/:w=Ga TP xUϦi V'qG#'XyG}*,[;\2ʰe( HG@of:Id%&?='7^%vqtF'CcR>(CpV؏3z Cr5Mb9ԘvibV)#jx oN><S#(4@=E Q=+ExPZ=E0cDE !)Udh+%5X7+! 1>59n IWϐ@cHMh@UOIݣQ(gA0 ]f\f<3>Ihh~64종9pV@]e7(tTz#4FNz8ѸOCZ IxZQA|LbH2yRd,XlZ&pQ񩤅1(I^>I|^eG%9ΔJD^Yڸ W@u@ay1vh ҡ9輵ڊ_6"5a.JT_|7`JoP}/8-MCGO iqpc>Go#CטΕ!尹?ʀ$U:zD1hP/M>aE#Li7QfTgɠ"\N]bȒzfŝpFC7dFU$ ^xDY*':<3acR!@Dz(ʸ%m i |öe4[֞]C_٣^y"Vm5}RmUЅ&ys>e[q!Ac5bOaoi1woIgv}~hh=S5|'[)=W^(*w3F>i{EqRԤ JW#RN"sg~z4\:p)[LM:QiY R<"qvWcRԯ/}rq("7j9cJzA.* [W#&[akRKuVcX5j,jh4Bqhz[ ضd)3?fiEm$! ?-9:4}"yt}~vӆb<r#^b,! :@eG̮+5r}Gu{N|rg7ZD/|عX)EEӣ}zx5- Dg8:ZSJ6q2e9A0iQ䗉-rTOs` nCG vNpf+)+ʹ0,Xq0UZtKK;_6nO=ޒsIͮCҪ+eC)UN"v[]e& m?6[~컕BAʚ \\<9Q>~rp?$R'LT1 cOs0 H'LN1 7sOHbyo mDRݏt93 CLyN(=]Zp;\u]Q|ǚ/["|/YoX ?n.d~h|1=_LWU4$bYb5."(Z"4ec9M&&M]h_h?5HRqEaֳ3]i!$Mw!5~FJ%;&ꑝz!}_|UJ׿ks=FlNKϔNK>)>#4&Kwdv]ui묇 AG+p#2nTK"GS'/xG{\D gvnkPQ8ϿmF@nr٫ 8N<1 ]4ST,uF3-f܇7?5NSm P8!oC-H v'k]\<7MR|}~W%$$ah|7?sT iW lJTK':%8̨%2,uIn͋ $ CU\3{7bO.]->J:J0;QHrуY4ƹd 8I<#/t|=d.`C}s 2\*v?WUDXY-f%CUNmɪ^L0ŽO6==<˓˓.sc>Sr I=f6$p{($|Q6/rGdqL gnw-!rKP:.gRT`'"d#InEE-Vf#H>d99xeTʫ 8ȭ!Ô %Q0$Fk?"S/>v['$AϿQ u׬CҌ΁MUL7 Cd"" [o濧 آ[+TkI*G/HL?kKXr:I70 9L$$OLo~^`?6Il>?CZɂ+]V @#M% ԃ,'8RPOɂ* K3-VNJʞ*b{X%J˅*B$H @BLΧ,X«4v=JcLi HK[Ƨ@IM"Q߁r# ՚Rވ{ ǹI J./?9-Lv1E~K[NnA|$!nU z )VV,r]`JyL R ΀,KAˌwnK ѷ&)yи)Š>(o8z͋H~vn[6U3R[X)$T;tSfN`kbV[NzOLi+?Mqa=AwB@3qrAύq7h >FgNNGcRo|L\RXc8~p9ۜӝ,Y\Nc.V[ͅ:Õ3cDu,&va%w!ɣs~/ˍFtO(X 6Œ( K8m%}~ U##>DuI[3Dկ*zbnZ24a+ V*eLx8-6 eQNoaQN++ϕ'>h0HuĊet(c&1P2鱌-y,#ɟ'm IC00lomd}l44" ͶPC)l 34R ͦxCGl34 ͆1l`hVm4+&7O~XX0Xt|A^FKj\,!!?.JNGbaCMr6 IU,p q*t.w!Đ#gY>eh3ju0$qlɂ,v0cq?+t;ȟKPp!NhF0r:ecY\q}kG=zyIΏ/rLpYcMB$hv%%T$ajw1M˺r5F[N R6TM\-]ۯlڹ[_\|}(t~cc6,9@Mm_4@:2@'mx 5A)!u6kϖt< Y zu@7kuQ2L~KX}ǚ-'FVǍ56Ac-X4Ҙ*5.cj(bJw1ƌg1i FÉưd1i FW}Tc˖˖/]_d8wmָpv:c T`3%-$S8Q*$AFN:k65Pr^=3G% SO$49yYH*ٚ)OV߀FMrvhK"x 5@xwJu[Ald%qD)1>%ѹ@[(ܺWMMaZl+s-TN !yx!Jh7 wJ X`ҁ#N1X 7=f*LLyz|71iX)sp0nԇ`zVBod,90h#$^%7RϦA5a DVhǰz溿e.[w{TֹG'>3lS9@6yxIds(dkޢw?(UΐdCv6dCT>uTTyz|XMѨ(Ӄ'*3H"*SGۦ3Уɟsνrפ,~l>HZȒ;/̏* ɔ(GOݶKHunk(AkTyP,9.)p;Ft!J[0Ny^Dɍz,]lq:.d$&!ߖ$;o#?܃%"iI`4%\$r"Yͳ ł.Jb*u7/O.O'oMύ&CH0+aӏq³uQ2YpY$T# nK##Ȏ./?&~`@HQ0<S3(dTg+@qqH`Hj%Dn V P#A\IVՀY qR$IJfRyjU ?֣=#LmDa:aJBD!IqEiPX\OL i;:opo*z.Pj`p\{9[gV%%MO Ls+-L$>HhSA'"WTTDqJ鋙 qdp/%[IB=[ 3E7f⇌pY-ΚheϤL<-/DKI|$ S{OJX)zY䷂4.qREYhe$9XBPDuLE[/?zN0Oww<.IxNy:N$ѯ=Jgf%٨φ4Lk*el6drG\3˘\K⻾Lysv}~dpkYs07Y s'*%HuY7BkuK\=p%`gc夤"_AȓQ*8I55R6Hkd'яf7s?$]:]OT%cAGV5 %h듢.kAvd+a %а44>sR |[aIS_M)sI*PM؜IԱRF K*3| a-~~ D!qYLݰOgR^ptYrY,ycȾ~jd?[\'wjTj׻Ṭ˗.ɔ-FgyDxN`a]4͕X“QGMG%c ! IҡΐQ͟IL훦aY3Kg#p*">KuI%̒P״3,j3{+rIGu( \ثh;2Q#j={&&Cܴ[eIi9.וֹ!$ im lj 34&NnxWmC./П./pc(S;)qcǹKp+{}Ǚ81ّ͍8Ns8YG=pۘ8r#P^`rc ɹe ɥ$'SL.K{U(;IFV~:By}CYgP֕n426U_ͪӍfFfYѬ664+ 6* 'C!Nl44||abb`F΅` iDuH FbWS˦YLlL /KLq? Li"T .wsga4'2ũpUܥEQ CBZygK"z:&ɊB{+iF\}=p=A#f69/]vҡz-t95ں[Sn h s_g69=!Ej`Uu'hߵʵ;TTyz}s}~ W[IMgIgC9Q7qS&eJsYpR&Qǘt4lC1QitƉT3&f>ݔIR(t5 |7ccLbї06ƾmm6ct1 cjk3F5ZߌQlƈ6aԾ0MÉƠ6sBQ%%ʓmCҌ3JmdӡͯfvsVF [* "vC,)⊥>)ViD4߷䒹 yǷsNXE)*bM^)νiHђُw$п+U%z! vDBRf#"ҽ$L}"F"LkZ_V- "Q(۲Z2ޖvW:ic,K H|2=^\-Hm,2nE]9I\/M.*b`Ț9Jr"\LG+KK'E./-k+ɱ.Ŕ%K"FϒDI:/ZbɱdIʒ%i)%8BersYN2bI) q-8$_=GHq!IJv$!,/X³%{ʒ%_&a -*,!U%KPh^O*1E_ ̤"Zy8Y{!SI xPfB{Q*:bI&m Lodt Y3%\G:G""OL7KX_X_X?/LR'  kRT+CFògI RDkЌ;ЭE9J^iu|Ӯ9<(M)&WEvL'Z|,Qzf*$ 7?@dIR _I嵗Yrkr,:E"ENRxފinx7 n 25?N HM[ ;fgngٖ)A tƑ8PPgx[k'b3;tyry<~sbw6( Ҳg^֐[Fn?WjRse?5H~S_5̐y<]>x:9g-/?桳{cJ5Ϩ9_y5bb_;.w9߽~z= ΀b/(~_c57qm__y?O[cKO篩t9e"h:_nXzO~/x4f;(S_[HZkco|gEN8鵡Ar匯 [~!cX?| g`D ǿ_#ٚA;\=n7M̠֝0D@4U˖|m~A<7f/{5z|Wp+--U'z4 zUpzrs+)5wN#ZYVh_}onp׊?eo#e=?>vPgX7Y%_N˩HD$$'aKs@zhke75ҁ_{4d\{_]$ ʯ.jDo_g+{}Eݖf^KBn׿A~)B endstream endobj 77 0 obj 44866 endobj 82 0 obj <> stream xˮfׯf· { 0F4|'Iϐ("g???Gnm?J^+OrLm|-+~>_oc~U^u:d}墒伺JWwnko *#Dr9 ,")_-mSlgs*he5\HJȯ$}ڼV|ҽ'؂RyD^2=V^? L(soIv_cTa㤌v6rd=#·?)3uuz>9a]$)Gֻz? YyFڑ~8τ#3[Dqi~@5ʒޅz?wqE2rDJ_}to{ uo={o9֡N>N;%N;mN36Ovt8JݔEF% 8)ǑI~ Y^A 'gJTRm:,(U& N@@2IVqxsm>l^٧Hc/ug#Y\>=IZqy"i|n,<̓>wf|)FV_zʖ5zFzHQPRq;՟?/g=ng X7 1T޹ݩ\ Ip猄$? E}qȻ\""ɑq.ӗ3[툸2 G!IqI+!~#76َ#nMp½9 ~r­+g+x8>fc;θ3;ge뇐o]:< YU}2Y8sC4Sx TӖza$0-1clY[գ;-:s*=@\$Þ%+YI_OoWӗEt>JN`ʳ8y'gf15MjQ, ^:tLI%M$pC:XS'Ђ~6c+eaD?hD#vd<ޏ'~_s`}ͩ5urA;cp6T"ߘT]+f+̾IH\z%nN4|qvGYҤI n(}ϗm|[N:k wgC6_ Y;UdV~'U|,:JhיΉ۞I[WGRuWe RZl| iVLii_QMb}fm^yAy/M>,_.uW_9$gi9QeK|S !rЅ HgjjOI.v$̙0ˊUsAUqe*ɵ]L23&,*iMdsg^)eѢnff}נm%*SA Waw\:`<.9߼9C5ݖyp뷋 o(:aO+RL. X*w&M3g,fܙ<~$w@([΂ș-Z/,vVڄ paGglD{O4,}z@45]Ir0IA0DSf6C,]ItMdbJęrN=ruwH6gY"&lA6.S#84sLŔ'i^74ZtT׾76Gkrfy$?<}tG EoSZ7\~l :D]+Y y }6mg.]6#WOe-={حޱ@;~dgE"Ljc.j,pql ٤EV ůk[r@ز?y)S*V/JcۘJ&Ud/z}õ\h- JgY8rBw>T/96U7kN+MgvoviBM·0RA"ٽs!0<] Ɵ^ ւ.3:.;ku(XqTt"o8=ct%/FjME %{egGJn?GIyQrIJ ިS@5/*1.7׊dy&O"t~w⋻apq7T.ݐs܍ʋKK]6W7>6n+Qt&,&*zYغIl-fQ2*8UR/:Ixr_ Ɍ`#'M: <8S2`Fk0ٟ~絒I}$mo8EuC;7Ӛn~8I[OC%HCT.ߎ?68~;u=~wTjUpYO2o^t?=3ƼI%{ #7Cwc̑0xϲ^,Nx9YPJ:L]7#0:g'٤P3v W9gAw޳xa[h_9#WBov=ݛ{3v ݻi.uڽ۝vGivAq&݁s/2]TR,QSÝy pw$ lӐ$ ^`E< @ vJ{p"D8QA 4ZmQ ukMg|y-@Z施t[\D͟rtiX/w'ŹV !n1 Y>zG0Iz]|4xH9$p.^g8XO`Q _o37U>Jp%&=' |)3r{!O%R\ӛXtƭ/2*e2pj99%, yggx i™nl'8aȳCK OAn΂ٞh^ITŒG3nsN[ 4`cxEOId_OTĉi+ Hg CjVy[Ug!8Ur7 #nHk HvJՄ;C1 Rm I J) }|w]& R!ˆ[Wa2pBddQ~caC??X&{yN07y 9~gtǚ5,cJѸ^<4w%~3OUk.%]pV4 d񌌮!dл*Hc#̠<*C`(cF(-j䧯4HJ*1So,ókx?WŹ㍔ynHžJ8:35-}>&jPT $YEqStT W 4hrdES/MZ0*{g UAbIi V3&Q7’YTf*&yðeDѴ0rF55p9+,o0oA 0I&QĿqYhg'Q%r'a'kbLb5,2Бln]Vå+CPah#bǔaV B5kXљ@ 63*k'H,{T]4Jf"f#ЋD'.~D 3\bU+-`-ުfŞ5vp\jG`9 []N@b8%b;Iv~ Ж9DfnQ"S5x}JyS0^ Hڀ 5쒴抜.ՕiaړT*\&5XudW\**ixߴ BuaZ_GRWy2iS˾ӏnz2[&\FCEta#Z'"$6Ns|ɒӽ`K5(@zHAzZp7H p^5PS?I@;J4:W ^i#KY]Z}5 5B=N, h]\؏0)1Pd}12\GUM4ς1OYwGiC8Pb ܂~H n#~\˪d/8H$ydS׆Ix\*1Xgrt'wix}̭m̔܎;^d6ypmN8CCG`SpU?NwR:3vIoof̿G!s&{T(_aaRE ]ڛ9Sف"F`oL5rn&xνX#h'\pxo,OLs0Q^ry(/ /#0ʋ@y0+P^$iE{* 3DjJT0U2S Łs>xqO%prmO&is qvȘj$q=lS1y69ׁt[jw΋U#Hxsy)d;R.=3S. n\vE5=@ TsDs-EpߡE-;[|e4li&;mtwȒ\:MI1\I7ob3 1]Ci"19P$)1 Nj,:]AAm _H,+S?3=2̞4+f)ش-:_~fۏzz11>^ a9}ҶcT?TU2#)nDR*/$.VU- S(`ʫ̚:B4x?7yֲ(oJQJ}^^Y h%ag~zf[ ghfZf_f;WmT>[ hf xH*;ˊY2i,ȉdġ#$dX;:Lxw͊XCə  W4Xc[Tw.6As.#942@=^BvSYv]6ۍȏbjћ4PUT%~'Cy.N$:Sc㦱}fx x{0RFCnNu17UiimZ*1 gv w|t7UZ sA"ǠzJR5;;FD\MxCѽ֌ ҖZg^5=|k~WzUt8h pUF5㤈*_Ąi7=<#/7{Mb叾q#Lr9oD>l9eОȇD>TƃG>*qF>95/j@}XfquRyH&SB7a$]dIF޹Tv(zڝ9nb>62\njh.,*9DU{rA˓gڍ4$ $嗺T;i*)*`ZHto F^S޶fdD}=tnJr'2?[9n}^;24zG{SCYȅWBiqJ'ధDg޶Gs/G%`{XN;VB.ϲ/XD+.)0XofmL/֛8m0Yof*p[u1̲6μxD`ݯ2N?itڽN7hpڽvSiq}vc9pڝyrڍ AyaӪ|oW%i]ogbN$ >Ŋfۅ|Bng@|(/Z61nd#7[N}A0cr=q-߇sYy3KdsAoyrsʌH'߰V8 n#j6ΰ,i0[*CSw*o#\N+_jR`sD2ŭNcݑL/._g ӵE۲G#ٹ*'ݿz'uH1ə<,_.xP|q,k.nP~c]&#m2]82'cLƷX#RcJnuOw uo uֽ3u0g;aw}pv@iwvGiwvGiw* b:WZ1 \ Oi:^cŜUU~4%Wz`\Yb~VOmo&`>w.6w^/vJ\D}H XLOI6طHd_Ur,pl ©Jhh+ Ha%iJk}*bޱ|8 /.*'9lD,t?},k`:"B6BYR:l؝2mGҾ4wLaD#إJE7u,ӽJ78-Ín\&p+mo*#~DK_ wƳTh GoXwx$֨qsY)ϲE,?o"O9QIg $g3֛:XC)i F+%vxIѲ X0ԻJTv.lAceY2!ţRrd3db#EBEPxkL{TchM|~豽:-chɠ =.۹ YY5ʔ&N<`VGd d_1cl5[8dF1`H]G YJbd?1i J,}&.t쏵ϛbj ^1U)Miq9f(gɹo|f K1uh1kFdw -9: ,A|וgS%-wEuwEC[$=-Olk׭bրS[ZmHB8\ UZ ʪ&pI0 px p9)>v\RoI g$M5s:D*_ro`D:?yBM0ɯ*.Uݕg5(?AZq}kˋV=N/{Pk5(B+3{iA$AVT2U_E^E29 y{OWLCb@:;ERyѵj\ 5d wTiRJɓT~$伷}갔EغV43Ic֌"Y,5$+,Uʒx\}6JO Y'3ߪD IB͊C P)0fs\B<ʳYf'ӫmKsY&MCIg StY|XL쬋czg:z*ޙy zGM@zG zg2KzgKClIZww u` +vwvκp֭u ;;n}za/6*tK% pҝ'Ir6'~X!ZJ0ee7+7 Ͳ#T%SbN&"Gd7 HX!-wF4(R ާl6o8}Jȃ iyq.l_I;O_^L^Pm ̤u[9-OoikX Gfz:#y(ma4RViVԉ_~:L鼎q^GvKHLi>iOiL~iʑvv>$wL7أ\ՕiWT8g3ij#"=.'+_v~\*>i4ڽ FipڽvQg{v=Giw v'i48~l>?YKI4,A,9'DJ1#H>z GKDYdV>d8Ӥzk1fYG@~Ml9HUpZU > 6Al~*#䌒P0^~cQ5Hcc7brnk0 P7\p>XYp)(#s_P"F7B{r*Î}Y,5ҎT_׻N9pN` Ax!Pgy9'ǦJh7"mZ8 OEôXYJb-i6 KYy[ߺ␇+$G=u1*n;/Fe|Ip pjCn~_$TQDS"VR+Eұm(mԊ@wj|6-زJVjǶtV$3R+Ժ4pG/іiT,3|CڂP#\ަwNXs]HZ+PИ.eYQuaEaAUNԔ'Jg;S۴lތP"%$W ,`|I 1T`wUJT v>,[v:EhOv gZlt\'ZCgګSg]>wGNv #ѕVj[\JDƢ;6Qs<>~wdDwxERli@Q5d]KXQqC%(#Ռ` .铒iWa.Y,gw30zj_zJd׵ @f 3٧|}l"`m;t}lY3hA#%ky&qkb3}!J&UboqK5>3}c{ 'eo;, qtBtKϳ>m{7fjc# ˌPfz%1I 'd`*4*?к+ Iv vb#Se,"`BR8Ps!1솕3jH9~?*2Wa"H!瓻^wKt6LJ_˜f`V/fѩ_k$CC5;i}4gK`~rtCކxHQv*w+JޟE粪 Rf0T/p /E5aU-B÷Z_t(-|%%cdL1ҁ`H-p/0أP@7wiZ1[X|ս]ҧ}ИȚ &.eX9k#T;A:B>!` ݶ ?`,+d( ֌h~S:dJ H-xx_wYH4iW-wUUX)Nn2 xCEOg>&*˟GEbe,6.re㛇3d'"J0 R*Lk;ev'}Э%=uct~ '$_t-#Z \ ]IB9ϑt%.yFL~\<<36r.*x4WJs9;;tr6\Kuĥ:Rny)ۨ\m.@9?PNF.ѥP1_cQ3SY6׸" <)n_< + 5KZ$/cx2x+UQ:en*1- jS1AGW@{2cjfsO{/-c0kfU:s+4h~$mr*3 Q6 |la<җ#)p_֊xl+ +.Ì2/r=imZC*HGY<*_^SN-J)f,)3tf%BTqw Utu*ZK:ٗ=iWxSo0#85 N kj]XӢ݋ˣydHDG_UuqF!z~hA-|?o$MƎ(ݾM(vgA0,F2._'PἿAH # M~I !!2: l-Ώ(%hvDzƞAHZD1 P>:\kbe*)eyR>o SfvU7d׼MIkƢX@:JP:\?ΨA^qT_emBem&+j&4\iX"p CVIRdՆq< k H:U`vdZkj3L+2mW.)߮Bu3U$ieEɫ$Vbe:I+epG8G44 NQ#z%P[=/o#r yEl UVYߘFNu=CX~ <}6AV[d-jU4!M7oR($iz{~c=e2vb* 'n;j6."Z/QVt]*JOYL<‚l zY2JTg&zd2b:7{_J<ߨ~!r0R? ? eNk<$C,Z`A"Xb>"@-ޛhS"(IU FjICժ+xVMEv8?خ5apE6y_VvNRZ< [H6ftB~/~Y>uۈ5ng[&Smgױq^;n{"8&sY-#i% t|DzT(uIJD]G%tM# HB@HRK ^a꒹o:ߥWk[uK&$8F%]+bj'qJ;.1W`ߋtwto uҽ3t/ݻAnw}\t;#݇IwtIwtA<ߘvA8~A۔rtl-w.*?oІBđys4]~\f۟yV__%p^@fô:sY,ӶE@;,[]rQ& lfۭIym\weu!.ZqpWr=ÿ.헡bCk(/WƟ"._~ԖqIˑqڝq _ȗ-1EbO4{DC1u6*oL1ECXޜ6)IT-r H"[]z9{G8Y.~WCJt0s}xs'8$V}x ~oXiA?W<&l/DE=)f7XEBq;ݻ N$!>R߉NyYgm\-$z=ڬ,W/ջE=iMp]ԁY+%| rBq+"vޘ13Q@ǾN^= /G6b"Ch脙+ŬPn1voLš @Pͅm` odѢqQIԈuE2RO)ZUѥ"/cټ/~T9ַ',F!Y9m pC`+lfYZPbOp(I Ep6Kˋ$3+E;a؜'.n:Ÿz^0pcp$B %w GR2 c elCukkU*-@~%\jĪQ;*UqmN!6@aKrNmS>-P>s']e(sKݍ#qs,Z|.&uAB|nQvΥHsrr\ʁʹ):]G5P.$>TQU?5@Z brR*vZvs:S||yOݞeaL kNǡ+Oq' x3?pΰL6ҧF)Ȃkx8j(y[LjpEv4HAcmKm-CWp]O}5&]Q-һ6 M]s]8Lq=YkƇKi r.eH5EZ}Wm)/%~@ z ax`H!=Y,KB$Ҧ"_h{3&U&v ץ=ت{Uĕ{n=d]o*`a򜝾 VD=OO}P틧@Y[ᷡEdOnά uD%vnzYa7f1%V&nTժlIyqdǭY3W*FEWRYS{AbFX^5[)?f׿ӣ6 ^G682F7ė桻XJዒKnʗ;jy~X'%lu)i ,ݲZ7FkFTO#MtVkD]Qo;V.WK"V6f.yEb mKos/YI~ 1UƺY;κ7Y:w}{;>6nCƺc;JXH:/n;EٜOT,p} *TI\%Em.EOJ&,L3;LL)SNVfXhG&:x Ts~lIe{\5;[Alwn6MӽP_޲&X/oʾ±#,,s5t30LKN4ʶ;L8)9KzޚeLv퇕gz*m-X,Om;l尋$]Ma %=^q[HҰy) 8 `ͪ$Nx2'p/ Z");~%Fhw6ӽpܽλw{:λ;b_ K\3*y܋%1柔)AUh>~aS91Hn[bsfF\6 I#uunz۰s^մ[;ȡZF:,9dZFL5u8$U1QײvVYjQR%읣zMެ>tEݯyUgO$>+JfJ﮼Y»$dS^7oRm"F/2P|$U  8pj&MK빒l$5 n;*+jJe18<`#k>vȶE$W&YK$~_~S LHvRWwo|+Q' 7pŷg -]OW8@~mfq)wPf3AC@Az4$Vu![72Y ?.:IuN[[ Jl;axCxI,-Kwn,R71XI{ž5*cL,6[ITO۴U$n9LSkgTg\}!k"Fd=Jmy f4(DnWXi\ɌwyfҾ:xJ=#V%Gsa6䴬u|0m23İs-5&}ݤƛf!HK/LRx4 o%1AnU{/-w9-s.J[Ke_0Υ-qg^[Hr[ \g>@id􊀥JJ]$;r^ 8 60Υ 8ouKOh*u%uuG]F!]Ña7 !eFa:삗fp[a#RJa{?ݴi:zD\oYx4K%@`)![ [T$S4DV_|$$+^!謝7ifEt,5𬎳jx(e[a4}^@(H*6N%yewV23=ΰ ܥX>LLStή$QxQR+`ocl}7=)QrlBk-ofs]zHr5{:!Y030›@` 0iwQj :v?2qX8?Bo%~E. Sש!\b?Yk(Jod@BX׸5\BhYuP]% LJn,OK_"/ZCt9,֩=R% doPDvvJ)CC,8:*SYC6ǃB%1zC;u_J:^$jUe[)qY(>\> 쫱Riԧ+NfwnUeKKgyG Д?;mj⠠ +fI& tpūIQ`iyq= XP`23.uA[Hyq&C@,Zwh́mHW7#]xs#Mp]FH{/=.:[u"6]U:cs5_8 ιwsT{_ Jos8 9@:ߠ4CHI9R-g*$ծ|YK}a6u6mʹ7_Fy_R]byxz p$:& J?u|tY߸M+5Sl; ٬ʴ"֥wnMWF8< "wqX<jɻ,~8#daj{G2 v$| @륫#b P}uhW2٬.FgQ]u4{8i"ЮiWKκ_cmv{r`t޼+v.ֻ." ܋lupca+ĭGvaw&rGulg8L aߚd[%md7\pؘ& ?aPUl|z" |k@^T9+gWÏ$O*kQT!I޸o؋rm1do Ԩeہ}~oWi}r˩iMBGh%;:SCfnOc&/2JW1|g;<| yɇK޸]?Bq~xf.^T%\jٙhJ@'+h;Txf˺dTA壶8k#ѢzrW8dޫ47I~/j(F-'UN K 9BWA쪎;F8FE4^p؟3]yҐD C@j4T!JFvXzwppt?VކD5hڪW*tTKݮ=q"s"k@47 05SB¼ +VڞY/CL,a!&J|-,iVљ~"m%f>fz~ܬrŞZ6͜yl|P<݅\V`lbCFHo)*9 4D- 0J,!(٥t8ESZE35Kyp,^sR& vSg kB(H"(s3Ri%:rf9?\Gպ6lV05H<:AtOwuotֽ/u/gYnw}h.6|ub+vD.eXr ˺!yYuO&8yFv Io65,\065t&}vgjp/f*tItP l&.۴:|a]%qO~hZ|۝41A*"'K2ѽsO/{C(ݖlu\7<ېXޫ%Y8 |>bj b Ra) Μ W_D,?~Ȼxp*/IO% w׃f|Ww'ߨទw9>"ZnDڵ戴aiHnh]F%Ү1V]iDM5κYg;~κYv:κn]`{ Qs}uQwPugQ7.E U=ۊqB53|Qt\ob#APBo&SwGl\H=l{ۿy,Dr:0 ʣ,P_*"9¼ZFz wM:b1طJM3jX_RtJWU$%>HXoC燾8Kاb'(ahBe9@FPPbw!x ktq*08sNꢍYMEƛMɇO*nL,&{ӎe+\0i5%Occ](L^v#n:eGqXae3(|*C*>٫1gZz\DT3=,E-LtTnDr3ĭQ-C߸jH\QuW罳4>],zPr[L2{Cҥ$;UR$~;^qp;Z{E < H~5;IEYMJ^DJr &@)0utpKD3#ws .UC^~B ]RQUt(bǑС8h27ZSM+*,~CX:$+|Y̴45sT7jG@]pB1D?+Ⱥ3+2Jy%'Gj"$L؍zd Þɔ6*gk32!HM$:>iK1"!RCC"M5]#ib$Y 7<{_J9ipֺpM' wp wk^T8Xىn;{$i57bXR50۽_um:]D&1=Y)"'p;$T*Ebu{qΠ#!(QYu6 ݾ^o~6 1ZV.BUm,"⾢E=߮) Ŋ_S(b{Y~[7H4^z'%ߎLkuV#-bc6{Ɇ5[l#y]lS'"7R RIpf_pGY% .CjN8kwquZ_AwW ؈^WN8(pH .Et,q)bsd%θ_rS/{ soc`[O9ޙNSc>F C|8ΐC9âe~0`Y Ӈ0NZ,g^D@*jfR ey"b0bsEph18"N}z. P}BfA&;4%e~r('ƭjh&ļmn^Һ*/Zd-d2[ϸ8'/Vm& vV5ЊՑu 럀p*#,ʛZ7DʥTLr?w|`G W|A$VK.UtO#Pd# ¤0_y211[2+7sr] GoSq3G: θw3}{;>&Cc;/!Cθc;7\&ht*z"0Tߩ༤,`_8a; 5B~뒈*@Ъxԣjhf5;63{]0f+/ێz n), ֶ]eɊIOWݚ|V0 (?~$ 6F'd2^5wX?<]jTp ɭ$*l2/Ţ[ǻk! NPkb/a\a5]-FK""0Y3b$I%#lK4>~ (pND^aI;D4.+=VKc,O ink}^8%>݉e>U1WAHT! p WͳRކD/=ԢB.ˆO|tdֈ5&c\Xc;tGlg*wq\|dŬfûp*' *O%@N-?'m7Ӂԯ2;e r1AƥZ>H6V Ւܾf<O2gVg$VdM_H:#A<;Dc},n,e*lA,5M<7lSx xDkS weI75:K;($cu6v8EA ^lO~ShL1=\[qbGSL \A_Q*}Jq^@c[1g~ל\5 V>d䉵P(M/@^}bs]#_um)ja4%HC~HxJXѮ0Dɛ|.UhiI`$u2C@ɷbI%|Ua[-k4yOSo章#(,xiK2ϮH~p&hh95HX&<մHhyyŽ">QzYwʒ]B+L?^ܓX>/EJ%W$9C-IcL?8mLCF5ݑ,$uw<t (,*9GJoFX=A7WG =yȝ}7|QzfL䉤Y$O0Z2 erHb:O&d1UpV枓y}$)dw$[}їU*$m=l$;~rqJH9o_I-CI>,jYHBᣍ b蠱9Y*I{6_Ad^d T^EIֆ5̀$XVpO FP^=iI_kr Ip'=21[Ac]iJciAoDV9M/OZEZ}a=[z 'GM+B6jMuZ."]k`<0Kڿ% bQZCdWDt7#yL Hw#ݟr{ˎt#{hHA}tׅ#H7:]tGM:ppn987j95[~>UK=j 5]kPP~Z,C%9]FQ%nDszI6#97.U2"A1зnf1r=KL9vK=:FfVHQlUeƣ*Ce.axe-ots)mȓ伦,xB%t]JNg;Wgܕy!PH#x#Ԍ; "{\Vބr|7rOW|}E[t)7Zg粐L(%nǹx3\\#Rs"ű2.stq.7Vi!6R1(/8!7@;нtj@w]]]tW#H19}~CġPr;H j?D78e*oW#ɅV-VK _,1kUm8nc/rwG6~qmDE|. lv!0J% ̭C3P 5$ YyH٤ @"YC~7 tڭ I,0zJ̞%K|urq g)J7 QרT ƥ<ɨC/EL1j$Fjf@` 8&eP$ɷözN#p*/XūBxgMj l/U|8~>Geb$[;S}vmBmbF`ٌvż, Ml|z&]i~0UC 37PӢ%LC5j8277UjHaB03B$R?(4EXD69yUYzHiyt! = n+ .K]̈vI.Rǐ]?.luFKҌh7"/$¦qs}⇯h6gpYF5GkX`d#]$Fn[v`.c)4FE]ZTqk|Lv&4Nے6ڶunTG~FM p̼D2Սw$*M2]{&oS Z1Z5Tґn::gBYEuZJ̴t2iriڭ܂ȫv.7jˍQEI9f̊=f+V9H>3+5ΔWU,bL09 g3'hgP;1̬^L|$օሲ֍P^t7 ̛[ڎxhѸf}U"/k^j٭cІ0mHZWhs<|`r\|aFǞt&wt2aI_6J"Z2sGc߈}' )RJs s2 d6=s=B2༣[.k˺[yGsY/҈8}et1GzĹ2۵s i–\q~$l8;̽s8wE8]Wsקu8yq9}zānHr /}'y絞7TQ|qisꈘ7_8xW(yˏD8\:Bxh$sښ?~T$̖yIZlAPG;\gMDޯ<t{қSR [*0hN./Ɔ)IMRGٟ*Bs>3NBHf9V_SXvSXFf~>9crg65;MA~>|'3TVčwMNq]ww/wyxW'NxWVJ[SʊxpwM!'wuww1כu;.띷w QLGrJvGOg3h?(0h2* /e[{}s~$ִGH)^HIJVo&fO' .^W=֜i<(d]2 @$d#HiXHPRN.`LX[aYreŎڱLhYg|l۲z$M,q-Ǩ%5JsvTָ3ZIKgҐUWI!9I:-<+LWn ^X}R(WGgfx00CVT{a%l ,;n,av<ic-rT73W &wQ0nKT2m:\q}نJ W~.IݫՂ o|ο 0Ž+2Ot a T#8[/]s8Ӧ=ά 8 "^5D1@N`(io/b`L(^y e׽iWY.aƜivs$!4,3HR6\B3F>g3:"0YtK3V+1Jf+\فJI](Oegx$ٸ7 ^L#W}|Z ZlW3ipԊ, ņ>H;2Z.L+Gթ;e|`_dt9^e`30rt] x!?Q{̝$wou) Y VAY[ ug5/[2cZ~>"].p & ]ۅ/隂Ս"n.7T>Ho[. -Ӓu7URzC5]'Ctw@' z!.]H-2Zz+ t8g@]Dq.09\ %¼]ykA |k]dyjkDkDCR (̵QPࠜfQ#(7[G |m\c w)՛m,˶+qav. AEOa@&22`[ i4 z*iTt]kLڗEY@j&-qI"y*C}e!L> 5W鑘6:(B:оqҥ;:,*3wbmi|z#:Jt pD^}_Ht"ޱIqeJ12n)5E@Y1)Huz)eq@NT,waj=w8ebG虘[aLQJnJ*BnKWϾВ&E\&>QX8-adX?ј}CŻvވ}'<4̥|LL| 'Q4<%b+a'u[gsYg8yq 8O q֖t0 4 Y0Qy&O,@v[[1zr.nOff0n87 ԰^0 T'xhi Q8s5L{vP?өN|XG9j~q]SHĽLFZ]i:"}N싓)iZ<"ha,ivF$`5>BR!2H:- ]Pw0O䩜1d8SE7-\Y}Mp1(W=LLj#s&8k Kq$7ya@_0Ťz. Ln[6L$*S Ęgg2JMm.SJ2^sQ=LQ)(%L bhowޙZ3wwydUj!a%tp#&%r\;s\Tۼe`BJTA}IBA_E+KvMLM]LhMH @TjSɇYlN=HI/wg֙Au2:H2XH w< L Cy/EI^]禥Cb CJ:SK4z`[<6:/'Γ&wbIP$j6ƺtj[5/4fR4ׄ? CP rmU@dd>@fT#3R3jg, H TDƅtQ3犫E\|tld\$9EòmMAp.WZzt@8Ŏ9m!Fa8#s1yP;HF^ܬ=|B/ Fn\1@ܼ&jSDEx sW)~N,vIeZ̢1Oļ^3F߅3fG-ZDHFgB+ތs_f2̔ q2Bѕ.ߩ۰+A4KéL KѲ [8ꠛ`ROm%lhi}T2IOmj:m9in ěp .(6/GWI$0'vb MS"->6  (4`\[ Ȳ # aA!VEHVptSWIٕGP96P*Z)^^ >,[nFMrjP,Κ} 6gZrmq|Ss]/~aDYeŵ#CZF׀Fp~l=Wʈ(YzH%O˗b1%v ]-fddLzp i7pCjK"Wg8 _HZݩNC|V>&|F-+EkhjJbtإY!% ɔxfXI95t$->j6Dx"8U`D9Ξ.bH9 2q*YH ~?g0G~e] +,PvV#bL>d.ͫ1L5|û'IBߴ|;z4!ǥy\1ᨼw&ج>e9N0CFdPrhȾH / 8_` 8q0_%f,p̗/e'nzuk8g }҉]@#8_}I >s7F2[9]D AcB8W!7@;ҽt#H7U8][tר!ݕH19}~ġnHr;о2u-AZK>=xЍRL7ZX$QO2NjH>)dKHQo5V)J+P+"T/d m<5(7n^'^sIe<≡ai1 0Gz&.DEjb@0[N*A}M:1;7эw.1u<OA`w8L7!ānXJR Ml%*1np[3{Wie8^5X`!Nw鞔8mpWZgItVasC89oAfeY`%xZ*QR1 ЧH ,W%q|j6ze =\ `Vg^⊼g%uvh یZ_ 3&O;`+pJx[Y4tn 4Y #4Ah.pIm;O e[&ش>e5`H'a((G:7vu4& oW׼2Pr>3sAe&T"shјcZtPgAjtd.!*f{hZIM,x$٫TWwYewuZ1 &1XgS 7+valA V%|$0iybd v2SQG^s+N R߹4pWXhx 3dU=R6-fM56yRc6RW79;[]Mf$/*e:nH & cE hH|*L01 d O*y/ԋ$^efI1pVt$v>&k@zaZvS4-xˎm]2/؍Y"^h]dᚅ}@FtJ @׆З[1m:'8 Eui\uZcπKG^Tbji +Nuꊥ o)%`HNE8X/ZgEˆS?u? `ITmcTt_g;RA{ O.*U1XQ.2IfQm yseMImúӭd{\Y+6H&LTl̂w.w2*x>3Lɱ&&ÏG[4F'}FGRn^33IM<3<,VE9HҲR4aZ. n-m;cE:4ԱDn&ZM Eqk!m.|I({!-l EnPN 46%u!S$J3 2A4kc&9 {i#G  \piނu9{$[W]\ 3Us]nr,#O2gc]{Ʃlx- }Ufh*-cg "54ghfHM\ o (R\-.!8XzMwỳ1L> \n2k`AWυ(Do8[sr]G#PrPnHr@w|; 1Ȁǵ8\dΓ +/l#V ˱^z'cjboibg >l)ˮrfodNŷ$6\H$4V{ض:$&}8H?v!A]x |A]>vA]APoߢCN,%F G\m˒_~S \ԕqEK8DB2qr@M.)#1C7@W;нwtG@7E8]Wtקu@yq9}~ㄺ2 9l쿉r1M备0o-#B98![HZaR"\UyG\{7pUvgɰ<$: EKh׉rW vr4`$ ט\#ۡ1Dȳp.(^^>,]@Qf,A OϥO33>+A0qy2's )fRAd߉ T@ݫgpP;Al$$+vᘸ5n[ŹWLlVlT;f5&,[eNlά@Ӱ -V2!(j$dJ ӻK$Ȉ?U6)ge-_^xtL W3B֌S`QgTWC֧%oGjv`aX/呠{t[8EaFSRs.Tp78eFۊ`|1-BQWEM5z10` vanic`7_g;T۔-ߥ+=i{{}%jy"tn[X?Jpj2B%ɭn]-@*DSDekX^d-i'h1%+S^$L:Od +/ R7 k&9(6*L: -^ J&X[f!5H(- `<e 6L^}3<~p#%/P٧mrʼd@Y 8igHZV$݈DcYEç&YٶFM-KҖnrsL~i$ГH$a>ؓ[VGj̐8ORC5/k 5Ԫѱ(+^$0ŸchX-6O96vCSY7zԅ D1} \NkQJUԴlq+>i4ҧ7k< O'!l,V3λ:LwRSؐ4z6Xѓ m ~y̧\aJK}).рf7S],q|$'_f(\W)ɼ`KB9YXwV<n.@$s@;d%*h$BP.G@S~G}aj );@CAk%WmNa V3݋GbRfFi>{"9ΰ`P Jv C+O;ALs {2&rs|^̘P"/.RdQ|Hޟ1!G|N~~0{FϿO淿SȝH˯x&]R K^JٚSAC#_|z~S{o1`͹g9^9>A.?ŏ8gg}c5Of{=x-سu a?)>roik1ݳ g ȟ{(8G?_G?HC|~?>'IuOÑ7St#:x>_~OU;O|y_H>d5.s\kӿ?Sj,xm߽zsTaEϭ/BL÷~>ID(~V%9SϏO__h+^|AOˤ{__$sW+hM.endstream endobj 83 0 obj 41382 endobj 88 0 obj <> stream xˎ9r$?OKi!/[ٍNJtB?47w'%4UB#+/N#t:Kx/ǿGŗVK5gԚ/4_Zu|HyLԗĿq?g( {򯿮ƍ^k q/):^/~K~[%Θ_g\MLid1}KfK:SXՊc\)KH)^C}imה)ɯy#%$utߔ꿉,g6+'dT_۠$cye1ִFG%$P`5V*:~{&ljBzaȯe5ڤԸ ]cWQ_8h,u{ofR_{$FJr]Cz&5V<f <,}чn^c<Vyp V@.hU+ֶ]K l.{*Yg8~ 5g=7:EѐAuNZX=]\Ryxbsw۰0Ogrb/*B: ȇ} ryJ-VcJ.-EXq]=>+B0LLUYڠɹ'hcu.ķN,xh 9rvd! K'9+qA*5ԽV*hȖ[N$'\NҘi8g~"h:q㚰!}cn k/dM&kKB1`["բI&׫؉6V#f,,spPl'}rWa}%gUnťpbgZivfkPWTTJ\:ͥª$tu&YPjV4 "ҢLa f.vpSjPrkVS}6fQjTN=VXm-q#W)U=7r)X :~`l3HCYW<+> `_sApBd~1ʓ룎i׋ahcJS,jMɳE6݇<BfX5WChYcb!]ɲQ&iɠ=^2LvcXM91Y14k~Y'A];FHAg k \KY?S FxιUY7bEZ(SKU1!861]D5*]L kRM5ZxRU0jUy/i -^LUjXkjb}Fw~m4?D>K~ko2K#.'n2:AЅe&VS.epHzފE݉Dɽq=rfC̸Z읈i\γځflY}“Eg=,;TΞubms_?JjvmPajɯQw 'όM_~Q-NϸXZ#ZK1-9Cͪd4^ 6zkU AIȥ&Kf}gY)Ӗ ފ.M]֒geqiteu849݀!Zh<[u9|+(Dѹ,wKוm\cнz'Ng]2[9X= JlJ׼ h6fE<y5blޓ5_7A.E@?Ak!(^LūSψm f9g_q%[vZl4A%TAb5UX9RpOlK{/5c yLAN~#'Uy!vDk^a9Z~vHH_,5dV+qGn1:oKt•I-~7lXx\{)~j#e;LͣkpSHi',͆A-F"6"7#F]U/ȁ (Մ>Kj.9|α H|6S3 -Y\:)L 94p}sˆj0G\=Y)?b[#8 #0 ekc8PULKᔼdΤľAdZ`/]Ai.xos};[ q#Ⱦ;,fw'1]QbIXVizHςZ}< \PE :$Gzw?И:Shr:ZJw&/j $]J5Y.EV6vn ap{nQZ9o! 'eدđ;Xѣ'cA⯇LJ3#iF[jF|7bG'=赻ii|2;:a_eG/ɼBێF {;ͥ`v|i ̎~.;NT?kۧ.x@t;:E/|#UhnXIka/^ҮR.mt2a$閨4L=Lvl}LI.4ldS7Ew8cL^y.s*k }ɬe2}st%;Nf&ݶqB=]/9 G&q\dwqN֨1j܎TϳiGw\8X2{8'W4 V!G:+O& >6i"zMYњ ٥-Ӣ_ Gtt$لu$ F5SJDrP,$?HHaQDˡNzc9T}MX+zaou%Hf k'3"7]ͳ/ZgKr`فeht,@XFdn'%qXF ^;!))G]ayWnX T,>se]ܭ-a1(3(u(; ʎDz#ɱhs,;"7j$?H&H~{ [ wprPuFӈS_3z5S%ihAZ ŒvFMfaGri'^I|-GL*آv=3PuI̊,^ŜU5E}^/I53%]? JQwGoY];:P0]5Ò."[ǧ?}<ٳ1t\80;5lvT\/ai08+*9%r_9~ n,hT)jcGe ^pW>0;xa9^ؕG.$tU+MYPb 6zٟ*ZqU.nt* b-C?B6pW6T^!7nXv7t ^_ot~M^)9Qf'L SĿɫh/z3~yrieSu+-jH{ Y c69@ߋ2IIS^ !HaXEAh`$_7"%uE~DvlfC*u>_%kzT8.>{yu4큝+,fz\x*/ǪC#ĐN @,n`:_m$]Ж6DZKUJ^ A/?$?HHa]u]$jeT`Y,cvİًG" -j_QA'TϨv%VMI䁵(*w Dq*@I`CvI| +WݼԘ`wa4aXrM$}~ԝtqt'MHwL>^?FOS#@$5dBYײ=o@#T6y{CҚ؈a _Ab\^M(F%SفtklIԒ\D*3 K_#m< _|bLcsBHF@H9I2KzlIR~= |L &]u`tzdFʅ +.sieGB]YMWyGqk֧L @s,N=%d\TtC40 ٍBTVWH>ٚ4k ;$Y:R&[aMƱ&<~ `72J5hD3HTxcx͖|9>k'$hfHb> zZἩ'!)*'7a'u4C"Y$D8xws4&hI ؾg2$% cYt|bFqr#2FW e @@I'^Dze9XLP#QXƃ fOPFnw|;Nb}!;I,qy23֕˶LuWHvM|fEjq$?v/~1즒YFRFsDWk CnLfiAi,2H2,## F>ua2L ]Jfnl!)S&gxUyO}F-Nɪ|+CYc}c_sG 0rSR@&A4Gɴ$Ys00,4u4,)F,SC\@ A#oidv+XH[jEBIr_}UE)cD}72uTh){U='$ eѭ*f[2r}YG,6Z( ^mN H EꖦBi-16$_|)LW RcQ&h㾔!lynpA$kd_]}!PY o?+S^t8oК\D\qr77 ٭Ux`YV0W]@f0$5[.#Ń\:ED?Ų6 GmI]z 3rQ> jѡb lsHJ(m35 ڪs~G Q:=d1I|%w4qKɑs^ 9AHxi n-qx'0HrOOr8FfSI~s7-t~pBI֢-L$` Tv4vY)75}TLvVJ G5!D!8J|_ *r”.zРP,ӥƣnYC_ "'uLq gT$$蔇+{e΃Hs%[!9Rf <"A"*HB_Ie$d5F>5]okՈEc&n G ejW9]-gm![/p>i 4$Ye187IjVAp^f{BrЕfP g=]6Ht4"`8t_/VO8fWɪx k"4)lv$96w>js' ͝x67Ns7/lӼft`Cft/#F7B܋SA2.Fjqݹ֍nb\F7 2NGf,$ Rx{jMhZ` ^Rİܢ-z.L룛FW c*^A >Ի (eOԁԛWIy?g|R(XRd ޜK _Nr_)vA ;«!/댈 Y*\AO˽qR':%f\6Yy)#@#>Xg#fJ4f*t=zGS19b0 \o *Yз4K8g'px(&ƒ 1W59$.l _Il[r];rCR WPd`YyL?~{;w+0 e}kt@e22cȋ/,'^X^goұ3_jm,FVXFo:F_N6qeFY"f\~Y@Ӊf\lUV͈8>GW]+w4[7QbuYuzY~Y߁gϊ 'Ct@};-:ܖ3eFT+i*Gk0h , bj) EhQ̃R^ZtsV樜H|S׼"@Ӧ̶|F>m!d 2Y)nZkh2B^ u2GsX/\D~;9P-ԥA*):7rPBkX =t9ć7w巟&BaT4GIp kiF 9OiX?~/c6٨|?"STJT/KJy E(Vbe-ݒ"3I,D,YTn84sE4P@"Oߗ@s4Ip$hja7aTX`M!$9J2E4ٖz\vEsc7x4qcY_ʼ4ڭLK$Ay \֩OG| a 5<]'_oyM'A{oZ2?͇ ^uU~iܦ Y2:4rY$I"X K"IÂ3]Beci8m4^& \0 H7KMwg:kvucS\Ts FPE;[N`REU-v/M{4rЦ\'1ҡImd:V`!]I!їFbȢ7)&0ld*QvKk/-Y[NbzDz"$jwID:z|չwig/SKڰ˴2SWjˠѺǦӯ=~EҾC j8>X+8xa֛:o`U`AñlVr7~'P#V}k /AZ 9z?}??pei|K)J_cǏ_??>JL* *钝UҾUϓԋ>:R'ɕ "RgaI& Z-%}"A3O;m)FI7 S|)a^N3NV2S0H''伃3WVTNrN!\`! qƲ$.hI&ÎrZPhIg8rl<$S+%g޺#r K!!؂0yzCkvUI\Ty5, MZ 6sQʁ&fXѡzVv7vՒ>J^1OzK aZKF;JGSI$B#o5gwa J2fSeBIS%Zx%$SY ng%!DnE5/ @e1Fk5hY2"VIQ < n|%[/+H^P7qdeU>c%=ڒRJJǨ!^y\+ͳayNWQ<[_mNN^W\+<%yAsv0~ROYcnM]|jc<~-`7%_;F>P?HTV"t%u\?_̰jG4y DU&EHtrcZ$ЖQWSv{).l2^\7Y#8N Fb"YAqH'2j!2g Yp'YX)#nV4@|$^YL׷r8OAޘ-č?%U1]箆w[wR ֺKCcyɯxBZӗHКv_k,ŶRa 3_u͊jWL74x;в  j87>" Ǹ*.Z)3D3=:[Z.5{*䰀{86dž"ՋFv`fdc.%O17:,)+$"] Ѹj+ f]oDCMޖ,}'P~y,B0\3*O.Y=|ArF&vZh Ur>874Q$)0O)̎&KA3 [ktOMڋ)( .$o։*^pM}~jf7V򋾡Y<fYRjfX9YRJhP vT?=`ANRl-@/BpTl5.E2l ~L[*d,ڰ;-;c!TKQRFId}KM҅cIc"]#œms&uW 3 z39 ͊E_O\1&2 q"He#ۡ0 n pfeUT蓫56R Acvl ߃&An^?[Þ޶7@zuGzٳziSU4u⼞/ij#zًGw|dZKwYvk@lzsH5ux/L-L3tF}t Tcsf$ʔTuLa3hh m ¤j*i2$:|9QS87Bw?k?7{$rw b[Y7wUmE5M3h(W|=)G:ݮ/{~x.3b'QNJ+*q85M%=*F\U s=~ك_ͼThHeGqmkeHb=vo)hi`m6*$GU(*4Jt^]gTMh C9z^3^p'rvؕ@1~ >4}t=rDZֵH"Rx/vC4fEt^q)}](DmC = lHa|= }@Rn|>>ܡO{HܰMo>6HeT X|ȖYd0c$234-^|O:$g5@#k^uܛeA9=T|dj\K述@XvEdXKd6f/Ъ%9CKKҢYzf A5e [ ¯kRj11<:S-UXHިZL:1{$LOXJcRi)C*_z:KF0ADۃ_3.`d*lY`,qD4B`NZ`nm"8Të!8Tô!8A#!>3C"p@yBxS[1aH0"S1i0?/ohPJL`([<}` e,-Dr"Y d D/w $)Xx\^$g/z%,v&v>ؽtio!P:aRR.q(!}:V;7A#dY 1՝$ԃ_o*(HRc. w% !%Wij-FJWCs~/0P ~$Ī>Y:)feO}6S9bjʛx#Bl38B͡-`#ҎʁCSfp'zLNb̮ w#)I'_]fųrHo ,`rvdXd3eT>?5SB}N=8B#c8a Nzpx ZvP޸K&<=~@_˭S&| dI_|,G␊UO<[Sn&]'a?꟞''j0)arKلDq29%ˎӚGYR@W}Q;PdX+z]\%4NR E3*CHg !ԛ3BBf&EEdpHV"報!KVҽ eєKfR*Tfv0Ho\I";3@)aiŎ=g7/%ņęj@ő nu 3Z^s*{e_lZJĝ>̧1RNG`byPV6k2PUIީkԍciâ%)!%?+Zƿ 'X .85X.>p~KR{=>Zt(>4 & ߾ >I0lzU͆@r4 'S,"EYK)g1 l 0l9 }{iPVP]kF50N| U w6@G*6-vSWSXcjd +~nSCX`A>]Ѣq#~BҪqH.fZ\y1؄Tȣ4J(bQɛ4k7Jg & \ʍdIUB 1<4F{L%}{1N |$lN(YVq%W ~~N \D5gi)]h8С7IҽN,!\np23W[~5OmXИEOF[nh=qIi㭒t4cA$fLz=>ը`hZthT]/G=Lzm 6ØͯiW;DJx9ȥ{TFOh? [xՍj꥽zcM*toO&w&<.!R Q 1)6-hL<objs=5$In[lģ02:TIdvdf<;{|+nz =k'4 psbKK׌})G,>FITyV'P7/k$K0=j#W:ƭjZ`n(6+AOCGI0=\ ǬjHZ h ✕ 9T~F3x'phi6 d`m$79\G5CY_luÕ+e05? EFe7 %]+xATHKϪyڢUnݩS?39f] FF9G<]Bwy`-X=:60()/g'(Qae2Cj_K1eg(=VdO֢~ .j>lwtEN遙;V_ar0t 8g2iJIGc8>p# Z=J52r)M+ep:M%kPpwlΨr>Fx>-[f2zC[fNrք"^(B^CX.ےK$O*f[AkV P+F_ oo74JJ¨g)9ryh먌>$5W'&A*f| 4s!˙<LR8Kw{Ba,s@ $[\1guISz,}+j ղ Ih'!<n܃jruJ:[8 qH“UEV@kionq"UV ?Y>0ɂ˚|^“{Ͽ_X [73Q\z+uHϒLY>ijCru3>+{S W}`ƫIR>-q}PS8QrjKQE{>&'wJc"16\ NA7@ [\Y3dѥwrܩYșY9{ C].~m7NkL̙f&wfɝŎNfrbŘɽz89R彋WF'If[xq+fC𿧫ýx*<Ԉ6G]Fd嬏ڰD>2hrGx2Vku!9\o_aӖxĹ@E@+w˸K2gCB i~wE;MH̋`mPw !G.lNdaA"[JcP mrK nlh͛.;1ݛE[~&(2f5Q[lJvV’ Knl} ,{z SR>!QOHf7tQym'@h"T 128ڐ3'dA2鯏02.0ó Z3b~+W{:N0㞫̰`MXfq^`ea'qY(ƨ,۱XO0#評48O0#4c\`vYB -10̻`W`n0['6fktlz```1`6l0T67 rfGp0?`>`~{\m\H]H2>}jng7S(MZ'04Dd%fW43Zն`dy#mXϮE88BkJֱȵ. PtS?}eK^p ;ZDψw~T7C֘>.UC3Fa2:v!NiĸHɎDz1>* KoFKk>~PQAG1+URlKFqX#򀫞8KVN#98g;^tAı< p'Mn񢣕Rr YA9q,dHı=GuSN'9d8>%Wc/p6w ǻcWص8v:j]Dq8;@I $ƚ?38s=(~PQ|&*'2 6{VzOB[)j61 o-֪KƍU!As uF@ ExQiᤍ4L7ϲKIG fx]TLnEi?V<u?fMw}w}V?;y}IkMkM,]td#%騘W:A\f[f 1^^Z$ :~yNkߒY5&pkF 9;_oune)`}F"ϡK )Q3X2 rv6@_:Y S6H&)J}IJ 49?`9H wӼi_~8f:~F4dMj4iMopy4lD%k߃%{ぷ )nr>{ ~D4ūvU \_l1fg%$X[S5$k13G-$ҞRYBQVPs-1i홑Ͳ{xFE)SI#w(5Pի$Rޤ@ 51r($ ΤtM݅@XԥitZU- 3V}ERϔjK Fi4y ^~DޖM`ۃ˿3ݔьdB3$~Ir_w?p4#ؼЌT1hF<$224^{~䗩&y ID3R|iImhFvVMhDLdG3$b9Qr'+UhF ,9yf_h}czAC3CRьB3A\{pFN&68cg@C,vs5r3 O8W!78#/XgΔl&no p-l\(%F_L l0&K {x$-;9sSd=$0c˵P} G9:d֊='dܵSz})!Y*&|4u|Nd8ێڣZqG/mۣK׆Hҩu};X1w /G ,j}(!yV|/Q<~YWe`cΩȲ(S_$.i?K`_Pbܻ>^eP_4=o|Ivf_?~S%RoJ'xjQms)1M-׾ՒHnUGL{,߉5` %CJCAͬzc  +&͉'@ĬݥLXQ:b59 ;3d2gL*e[z)r?|'&iKӚ+@iyҘrJr`j/$M}|&YjvaEn_6t!4f \-[tB|}B#{`B=Ёps ^\AjU 3g*Hd/uoǥdŦgVN܀-$t$GeqVBj0/ypq̓04!ς8>%!?`D d+\ 24-0DGac]7Nхɽ mp"XI,YƩPI{4J 'tQe% !}:6㞘qkothyVǃo,,Q^[XNn僧@Y#>[cb4* -V-N03}sbJ2gSR'.,Ra䢅 y^u܁"TI'eԤ\IlK"4- !U CNk`Hw4hr@=e٬!7GL;iT*'·Y?w0c4h9]޺0>"Cb,QپRI v++8'M{QGhM$rBD9mk5g@ќNxݚ(>cL5=3 ס9ٚ$@Bـ1~G] 쫋DҫTn&dṅ$;qBڠ1DՅ!ho6e]ø$¢~N& %ay!)C$cQgjdFuĐ;br5I\ o>v*zs*iw"9A "FHdmXSD@LQoHҴJ]ks 971-J"&CEk#q͗E8ɺ6n @7Y|bdU氎Rma$83F..%rIX,0^ ^#|#r٢]KlQ"u֢wQ 4n2\b3Xyʎ|#ӰZ[7ZXtص{9a9[)%_mNwxWD"~NyP\tº25cJ|3a>+gLiYpp-6 NMYY>YnbvˌtA) Xa cº& w6Ҡ% RMv^m޾ۻV̂_ +: u,vk63ݍ-D1k/`omP!rM-dAa+Zz^M֎"/8P뾁4R~^2YtaZ`GFm%o,=YsHWe?yxmYKYTcwwD4 f51\T#VeUq-}cѨSɍ(5/]ϲ-HhO#:59bbV}Kȁ!C%kx 7M!~cn%lZSMItbm,kOKņfvRX&(ȜɆ4ĬvF{LypkP%Ik+eN;ZuiCǢimFlB ~$Ri+IkxEs8Xo'Q;0u*' *OfUʀŊbIl+krLj/k6@UDM^N 0iS`6H':hFYojGƨju][vNR'v~2v޻џEgNlSyX [#drQGaf%g0p83Xrx jIWcCM,՞9p Z9zӘU2ʨ+suq`*ާQԪzĨf]*1X/R]FG'p v]'77F "TV 0]X Ϭ&@2'al2>#U[]icXyH]$yh6dkئ) |yU~((/xbXeO A?Ss})7WmH(b⫔̄<$WZdܥ-HNnHt<jsMZ)M.M1 J6s4t {x*Nkʩ06u& KXKԱ堕CB^q04aC 6Ǡz֓yW=efw@L✣dZ~O7%3d2V"\})/tZlD+_e#۱.-fy u-L,eVt)ywII ՖlR5CNZ!Yx,M/i7Z"ˢ؟[ HU~F/Z§^`߲?ट83gCr~T?KQ,iKP EEO%Q6(Qr'1Q{'hPkg̩C_KSfliolq0vv K\wv`7\wlv:A=If'w Wm'Mm Nf3a`LIy7b6\xMLH\X(t[lZW.MfͯSuoz'(f;C[-{TͯDlXvܙ ,kp>/4uHZ7' [l~뀌6.7h5Þ`wȴ3xr!y d dӶ ȁwaǁcD '%f턱0 cs"Ecs-8DǸ2VvYB3 -1 ]v${Gӡp(ʮRi}#f#ϑlû@6l 6ldãB_ouӠ`cpgJGFdkkc} (RH3-1W7#pULR+%ˑ@HBHzf"& n.l{..}&A\n4J0RnZ{kX7Ux魋 F4'bՈBZдxM^aU".ZU\^H/5X.D8@EHnw,)8+=~@A`ǰ+i|v80qcdk͐r<:Q b lM'/bϿq>tvX^X(@c608aJ|X$(G0]Yxm89c0ve9][W%'m6c cG6 EcGZ< ta|#Ao<`x.oA] ઊ\LEf+%_c4ij3FGUmQ{Z6RrS6 {W- bL'sHv%Wʁ\TDOF7,JwU L{ޯAĞ3A<B}YR~))F,IgQ'N}|}lm=%&[3$iς/UM\u8XҶd,,"iT!ШlNN>88ƫEM[U -1 J9q%d8OӦ^(Lw*'L SI[Nn)7a?qn6Z)i;$}AHMQzDMo <)2n^ EIj E޴NB2 RO'HD!@?6D切6@|-jjzhNUG]3O6q%Z0RY5L Z "o$λxQ*[L1?KhEj"_$޸a`>bV3ިsJSo-)*%=ͮ}IJ0N meЗf:tC.񱱯'lq%o @J2GNĩT^Ƚ(X?.~A毊fK~aiR>U`&Y|%/Td?&,qGzBd"Y|/3k+SvJG67}Gx޺&Ǩ{ֳ=+]q=>^ՎofŮP^FR!#>"3#E#`"ow%y$3$H-񅼕iA24!SBM _69iLiQvay5K"˺/VDDVV-xf:t^^RqXϡd{xku|Ǯ{lR]jjU dEv$Xȏ__J@g AGH *folACN=LE%u,F0 0%% nI*r0 [II|bIv3E1um ]{ t9b_Ё'^5=@ҩj9ف*zpiroIE$.yu(u.Tu(7kve2_%_벶/Lߐpq1`mcƶ%H."4YcΌ:cpRd[hW2?\yeW1#+F[-u;: u.I t7$ohg*Ev(G™uO$oa!N W;;y'<$וB{4u-Se[oD{ @\ʍv"Hͥ=QٴaYX?fqf6'n5kkߖ#qi!f.(95"P^iЯn;.*/s >;(HdYpdhC_z};VH8kvP0G5:DA:wC2o3H6I--*:rҒ-E#|)>uKf[taBfEݞo:p!L0hQ̿;wF(v[Cf`:cYSHr*t,WC{漒)N ze )7,?[p7(Fl7UjLxriüsޤEzC*t'vS:ތc?/MO1VI ?OT#pf^ӌSXg@j{\Z΀v\H;VaoY~KlvWSR{wY,#@_EiG"/ ɸP3š}dG(B<ݤʈU5jُĘfotj6 F$c:_܍ }YPƊY9kBws#b)йO?ƽ INߔ#ܬ4&)t F+Z(0)y$)J} &sIQ4GVd-Jo_T(av)B+0|L?+;S71g$^7nk~ K Noaұ ]Mwǖϣ^tԯNlPTXMKέh32+*-Y9b2hp"${F wkxw7>iuczrdo5 w2IZy75"V9(FZ=d?P4-<߻e/jazZ&7 H/:G!f\JhO%7v᜝|FYV3\e lO֚yF^]9Ee\Fv--_I+9Ȗsqb"w~׼Vs_xMw lId5Xp(l ?}㬨^(7WLTQ|n Q}+ݴ47 S&C4cR`v9%g!n}3AǬJJq?]mcaf :q4c,&t/"ԽXuZ0[=\Fu. {l`fRW ~}ߔq~p9 _`xNH#BSF|`}hvƘZ%SW=mk%z2GQ%ϋD_e1}('[u7\DB"EF6}Mi=>ID;ΰ<2eCO vّvh6pLNz$lS?у%M&=u#aZ4~{]]#Cvz8Jbeɽ|m5 ag ÀnBmqi >mۗp]_܋V+/k\۸ d< _/_ //8 ,:Ga]@(*4h5*`!da7_ qP0fEEY"MCx:4f'm_)c'C ;x2FZD؈Q_q;y 4725b. 9QsMJ#hDcmNY(]O*rsSS|eSickaFA` vS73(Cr/^88eA%4Ҥ6{j :q!8q\Lx9DH$~z\!H7Z̵1=`x'S)_%9oXbO+̳w32@~dQ(.*t*P2~Gp"~~v1"1ZxdB֥@Ґl1+e)=f؞]I;ق7>dB@P$cE?^x"K"$#O7c=gA⑎5aZ%K>Qnk c2!irb -"C}-,)u]5鞵KɁQ.%c(JMMQbTe)TX]՜iCʫ$em[.>ڥyڔe?y<5]$YYWM DmbʂM$xBW ʿb¨)JDu_;O3b[-r5xFN<[MK]TPߦ3J$=>ESڂ-"(u8xGrUo>)YY&(I<$尹1Ww|U-׮te67|;F(=~!+h.knV֞JҚ=u3Rinrb ԩ0I$(O%2;|Q!L;* /Wr$U\߶RfvRaω^puFD*^ٞ/K?0 \8|(nV.Eʻw__cIl>ǝKsǿ.!iwyZV҄.B2caY }rz.F"D3.f##>^_̙nAwqm\DqT[zȀn 6 >2VdW[iC0R6IRr'P4ZPXq5d-Eg/XY=:`,[I( ]uYK<΂VXnSS}ԛ'MU={W|RF3O=5NQH=i&9ﶧ8J;g?1;O" T#biz;GofPTعZ~šW1+3C%0hJ Κ4<n F m4 /ɞ̈ [rtMHQo۬|!kLZBX,bt l|BC<pzL!Ko'J_e|ˁ$] @3^+Ix _tc[vOIJU V \$~܀3b:cP/`;kJ 6;*w97MERս?*"3{90dk\I1kPUUύ;Kǭl%Gig.B שw ԟwr=SWi$Q0ڬrm;&3X,4֪G 6edh7d1vRk~ͽGW݂Kуr< }-,CXkZIM֔dsEMݼ El ̉>ǎ#7+6"ʲWG؈XZzgkZm% [ ~ԟ o^g{^C'm d1%5F8|ҢCȸI~ [htZD6zC0KG|w i~M%aAt/DcLn7SR)J]+v<{da/:6쯮1<~{f\aFLpjy̛r(³fbҮ`PŵR o?UmlST#~gRT{DzC3>vtY^:^ 7Q.K;PkIώC8L;$6x},]nSp7]be܀w]P>)Nct+9xj >UY3y!pCGdY" v$iHwt["6k$6w*͎QX:U{nd!`|AZ SkRH`t8>PKl77] 4}O UW+7=cO;{%E?+Jqs\K$jk4:}MW픢D@-Qۼn0< Q vhՓV,W;BðJXŝ8|On[sₑh1ި$/zEt 5zeܭ,vuwM܅_čubH72tb&><|-^UB+j- 6%2@K9$+0U#85AbC}RVH}TfP;Z˄f=eCZE_>gޔgu(S>'OK+b"`׫Qg۲q$I2LڇVhqY䟇dW)Ե ά:9Mt|uYYh{v/Hї$&]TNzwaiGwZqFS8ګ/^@hf yo8>UEd!3ռl:3{ -8J=3H jI6"%xM_ʶ֡εTu *I$jOvi#ߧ˶Q:5&7מ*2WCC֔4_U]/˖c\>6-!L2hk|cjTUwrj"v2zzGU6=QjTB\=]1BHf闖f;Ӳ<;.qUSq'tUo;^ܓ_۽㢵0^GSR g\lÿvwG >-YW]Y W_I=4q7ZBвdV'0p-t_R~^6jAx12i ֶrN| EcC d_|vf^a^Um{tO[xpwNM}ʥۂY0WV%5$zĒ*kĺg!c3+zp;gEW T.`Bφ % xAݷB3jԺ,%jl[ӈnQrýLĵLHY(Tm /ɦ.vv/j4?.)j2/_uĿmzV.y~Qo:+wVKP.%^ɠu|+xT<-hvb=\Sݕns==D{8CP=C8`38ucG&fQvR@D&[ܤ7(#p@T+^@ҀnN֦^"о/{}_MK~vWSuinw&WrJΉ[N˟\N ~;izByjvh(xh)]N%Ҿ/ W~{Sg}"j͏1܋'P(aOB=zwy/xW ]n PCxb62gճx~u/)C9F aJ3)0l0B,r?1N C/ցaĴY4OԳl [s"zDl\aXk8e& [b?al-鄱 *ıǻD8E$F@m_"~EpGUrC9PaC.y ,c~ˁI辁%[ 1h/_,2Xxb#1a`Q0/F^ˣ!n`F\urL#D^ 3/i]a)ī2}pR|(K .d@ASحT B`P-jE L͟J<+bQ14=d`!BSR( TDjTėٛe_큍^\E}|TV+,h~^*3&XaɊ~L~Wb6MK3q sϢ4|>Y M+(G4ҹ"M='A߰hxbMeʻ"E3aXP&$??rP%Ik#3IѸRJ-ɽ b,|ʫMiLAProٶܴ= eM/lT0 84Zm LjQ"/SEC2y|P= &%\W;)6i ͽE(%܁73N&6 I~gt1䩴Cg%fz >Ic2{.e[zZv>$KXgɌ .S 9#jaNsчD$Ԥ3hJ'V Ff[c&S֣DHj͢:_Gge$A!^leeѳ|js O˳X _݁檄9JGPy@S#Q(mq_]$P*+Bl;? _/_},R%Hlu O$_p-'ΌreKON(#SA-cy2ҝePybY$<`Fs{2r0(\]pFI^'QbC8g|J޴13ζO'.xP{=gLN>Ԝ6g̨+Y'2r͖̀+-@s@#1%G @CQ ο ?^8puh'-Jvyjzx A%揂ܳ H0:`21c.}EU{hCk$.yƳP#/ؔDŽ*1]ETϓmfH;%IyW]36gAһ靺C8 yugqq)Qi!<'F)%^i8) >Tx{` a}X{q-n?]ًp?`EN? E͔׷Af??Lghc񡼸[H9jE<=v|.z$nTVC.6顾%,UTJ^--o #g:QI$ HjqcnUO<>!05mE//͗R S.8Ѥu dJ.nzRdU:<$ߩv "Nh׺_ܴޓ^.&#EoX5bt~߉6OQtqxMxPdC&]9itsz){e6܁yNYZQM6g1cd+gF7Yxџ%Td*N2*L]Hͻ?Hwߘ:>csKA{8D; |b.jCd|#m߂#U<}x^ƎKFt-&;Q &0ͩݹ<ڮT8rk҅N7koɝHʉ%U"N~ ⬞=v_!C.'7Qnh4vD# m>-bL(&>,7J N}đk9;,$emK)\Uԍ#1_D@vzڒ|jr|;{b.w35 +%EHU50hg~~l=LQ̑^:*I_<,zVx _qxJÙ9EhCNzCF{$qwܿi5[Hi>&Wv8f9h}N츚>i0|5\v06M–]F-DI֫^{*Ôg~c{pnJl8ݙ2]*[z<;ScAݫE~^; !Iӻl{PEO%FEʦt45c#)Sz aN+ ]bXF JLBs6mUQeO"F2v/Y9в$F07"&TCC5(K/lnRL 1lBc3RRCӸy[Ԉj^ 3$ ӠFOޟr:l?v"BAz_jiQ AՀ=4Ab=;/|&3?[+HơmIq:ƞ1`{:_B-:'?/ɘ SKMܿhTKI"3? ƣQ.{4c$.^BZb@qW*t-T\uG\[an9g_dR)ԌZR5٘=mLe,U5V"d*()XxluW'W0Q7r%!p'Gn\ͨF5"4cS52]"Vr4Ҟ@ >`=聏;<.2$Ͷ=~ە,ۮגFnjĄ]f ݲc-2\m1WÁu7)Bf~AW${ֹS=D&)g0WZf6f5'cdNpw׍.y:IJMLnY+&.Z!7w3Gm B[j\qO|6>g{N%nr)RHG= sQ3@T15C溮0MGt. U%QNo_+㟿RG J]r֎LG v͔:HsZ^5'ǃ *ğh  o Q|ş4a/E5XկoYǣu及R[W%R$֪=)ï1kùbfW3?ܸ[;z%f ` NS{_Q"uavH'%FzR`BjIfsStã#͞0Q;4a *-y8wƃ-ϱecF9Y PiS^T CJ"X.$ջ%WIk]zF{rӍ!b0Zw ͅ {k|nZ u9b,tW + ?'\n|%(O~ANjɿBrn5hd:sn>h% 4CṖfxĭiۉNO͝XarIDs;FGAm4ou>Mq>y8@sh@s " 40!@s5r4c1ǁA9h<se/_4BhxA_g~[oFgC— +MONfN[(WYtG*;{B\%Ĥcu>CՌP].۔aP  0KXsȕ-CONuĽ8Wq)Kkm̂l$pS=^< '@22, zqZg-Qy}|YLo@@b3g#oHs2c'^#e//8iɠRuj˭q7'/nGY>Px7El(XQ ?  #n=P8@1=K(8;s(FUOwF(ځb́bmlŻQ?q{};@qt.P !@q*P ̆̏K8.P(%bǑx#Q`La/3~Y<f ,!NH,(MهD ,G!ꔡTWUoިޑv# WgvlkY $Yz5TE1paPoKE6=A*Qss풋+[ϳf8u| [{]d{YcTkX'™a.;I-Y|iS16φ1Z} :Y/UO9 LunԦxNXZdqac?fT= H}<h94/YFcăT^Wdʂ2C f=s!.l8OW.3愩r ȥ8+]2H[e;bu+*%%0PQY"a^#럑 >K)Wa _/_mŜN]11\ثFO nx'ۨ n97[–/LoOzQ@KO.f WĭR7@ qk2[+ʚ nMĭyFn1J c:qlլT%_Φ!NM9qSN.$!QqC]NcZÁ668nC6h8nxll>d׷e@nLz m1:\ d8^T'^00xaq y`2!0,5u'9&ģ"w[w`GS:]DDlމ (IGAW"s-ɟSf6]̧R!/UO@]%? Au YF=b@`]L%%Uy2-)NE䯋/2=qaR7 4\xɏ]UVΑ>}O+)@`mG,QcLyG^g0ƅBF:0QDnu2ir32_X`p iO2Uon%YB"Ӑl$[R׌HϞ VVsYF/c:i濄yˈ@`iSuG ( [x l!(ȌNϸt\?X 'jjK{q~qQ+֯~6 *z ܅G{&~l9\آwJ4AQ:.]UoW67 4V#ub =Nx#f [kCz_-Z@EWFԼۊrfWVˁjh-U HY3Y8+35z|6 ^}SraCC6-+pVQٵSW3cF>&Ǫ X+ 2_?īG[D-//8CE gIt+Zfj:x,zk%fk䏻 F\kOŻUmS2[O \uCSahBdRe',g}QPX;7c`4 ?w[u.9m+iu>fLƚz mp[Qt8L0 [M4k0Z͠a&w`x *Ob̈Sؽh47\ZXzlf#NO{*+NAa^0ʮaxƦE \\Ѧ s.@CcAU0 oSI-F.Mca^[[ /5JpwJq`vv[1%^+E9swK'd'O) rkź}: c9O[bDz+ص 9G;ڂ7:{,. b>Ǥ֦ue+?2Q\gd.|R'ɻەFT1o x|Ǖ>ZqkjN#틖=pmR%h5JԓLe={˱EWAP2Ě,Iwhlta&+ڊu'W{.r40wb^;8'K0F3h"o;|L@ݖ#C@'BQm`].v5U7_5=k*]b"&] Ҽ%ƹG%,{qЋ_ݺkM u׼ kU[Ўzf9CSaڽE5T b nM/\}iAEUxF789:fQY[VFg$Re^/VkާIczK7>8&5lzí@@9 @'/PH~K PBcOm-<դ=С.[PϊLP̅.mPPme7#+!bWf( $/a|sw] ˩ E%Im.G#7=~mѽmȇf-q(j8?j,DZY矚 cjS[q{73X83.Jh"ubpưcc118(pBW _]$~Q D^{ w_1ǬJ,`gj8Å>A)UhY.aݺy:DM nrԢ)ۚ;sAltջ3[KC[t8.)UҰv͊UzΚ"8$CmrרBwI}H=w1]q§Gޞ4(ȓv6R%3]Qzg(MKC_`|6-קBWWh7W X" aS@/QE`N,3ј+]nWʼn)THπaZG_voY;PVNOhn۵f/ ?^i&=0('xpd.qZBrbw8vЍtQr"[@.J,j9:6rQb( b\W>zrdvrZ-J,muC0 s [2q[G⑍[-hO9{QRo-r[ޝ7em /ڏ/hh@785ϸ+kI1WTG0xMqӝ$T"!UŹqO5ps Z ⼗'o]sGI(Ue"w.b2+i6&omH݂" f^>jN2d㌹b%oa> Z]UZIdG)q^6]Ai?ӒQC'(ḽ! yJ nS~O11YC b+v `kc;Ĭ=~qq/Su5oFfh^oԟaњ%H1h6::Ўp:)ɗ1{j/ Xʷ BIxxCq:yaabH` 1OAz))?2dA=hl7\.iLjOiɨbjv=Fxf# d2A*C>$VA^^C*=U% 廜Ϩ`۬#$FIl-. s}NKbKqfv_;n~؃>С6V9] |uPw{G5œ<4?}Yճn'E]`^;-)GSѡ$ePң{c5x$מ|}0fu1E5 bP9Z՛Iah#1h%XLM^ZvYџ̼+3KHKɷ{d>ѲYD@ZlѻM! Aѻ#zi Pr)@U.|o1֜QZF /A4j-7=OsCo6'eYyQ{fҫ &|n~s؟ѡJBlkCY <9Jckl9" ]bs_XGģ(1`^+&( a$EpMv{TgweIPJqòz@2Vcz.I-ytݵN04 AnJKHtkd+ܱn]{$->:V~,>Ws7LGK&#ƺu#D9=v_ KΎ[x8#fA|uMu\Dl|1]CQVvKѺv~ej2#Jذ\tiEږ4v]dOiF=Ŗafww!#9q3rk7DVZw{ݛu#16gF!$0Fۄr>43@bxgz,[3TT* -A VhXr|i gzPeODxIc4]]NrM*= 3Y> %]k`اۣ-hJ'6{`7;w ?";џ%z?K,\6RZd_5}Ph5|7Bx]T%;G%ySTdMJeol7 lK6e ^ (!/z቞/|>a `-o1||="?cy凅¶G-x7o=+['%2mmiE8t\U٨G0maK`8.($u xqqK~(S/LImd(1 `viDXgCj?ذDcGn(JnQPG:S7_(Mc'?U #ãH9W˭`dݹ|iy.*hI[BBʣ~^~eXp[Љۧw2jlՖڎgh8ީ 0/?q &fsg̹gwȥ6L#<E֤v" (lDcoqK8 =MqӨ^㹪?_s7_zpMNՍ`WCuO8a1H)_' Zq~5$<+ AQR_աͨ.!Zo=lE1lC8=2ړO ;&Q1x0hz%~Xtkj%>Zrۿ~qqM7Pab|g̋EFI~鼁y0"Àk_OJS lFu1z'ikhS[LJkRc4HsfIbO^ኣ"i =,ֲjF A`uyrKzUmd>/=QKu 4PC$r.ꊓ 5Wq%15LeXg1 J EHf`C yڅe |gz/ \`~:G p%pΝ6y9~ong|hN|>Мrd;|kfg/X ' ZO,Yj!eGŵYtGI16VM7Kq w KJF2>w@ɲp]Ͼ:37u'چoݫ#ߟ,(#$!i+kFv=.)C/,1yCab~r#c@ng Z[emcC>%_\xq150N̆qA@#l //8jaXNE.>cDGbo$g j>=9"55i@VIqzx=̳/s`2wWzMYIJA2#yJK3/$ #Fi.A٘NMTIꉷ>Ӕ3 Lv?AEʂI&;ܴH^b;+ml=H) J_$+3"MW.2`Cŋٿ?^$H%FY:PY,$&Xe6?I@RʖmPe<|Lʖ{xP6nPtB9~PzN$@oFz@F=-n:le?lZ'M@2Nh;mRd9@ZJ2?8~JeDZʉcs2OÔ\c0uR?p'H-=c,Ƌ_/_y?-`af]Om6M![?4'm.Ҝg7y{rxGܓc5p|3_F |9NJ\6.&0RZ˓ԲRChY m0p6g^W%(]ٞ+zV N~6 ވ^jh\!-bEYmi'g~MC1r(b>&'` 2k̴D^Lʘ\bpdO\Sqk k∂QbpM0{_\ϟ??~sխo|(nV[n0 ?oow֙;rO'tD~(3όWr#n!Y=i0ll=wq5 +5o֊[Mp)ץƢi$fZʁ]{%{5^KW3"TSxqfhCrIx{4r ԳhzK:fmD,S,K`43bAK# =uR4VYq J*lj7-m {x[?vLb{]0ʌҸ+PLEH&!~vt}l41bvŹӼȯ)(F@[Α^K,!k%NVH"upz5I㘻]{-޽DKna;! 2-`%)/_h xB׀=*݊uvNЏdZ~Ӈ/Y]Howa $}s:(MS=lteȚ(FvI;.1GcF`]*޸90>YAb%h;тųdXފ^Zv#A^fʼn^eq4eNlzyJE+BkʼnlʔuƐS֛§ƻϥ{%/oM=r|Q]>e9dٸ_~";蚎[zn`^t-Fa/!6-} t]3՝hDw2hcgS7lZb_wD^k*FwpZK2镱Fw:/٨wrO.Te6٬6/2x,/i`ڹTejm5 LA@ ,Y kҵ%]XGfsxm# ||O*] -Uw]AW!Z8`KG`)"abA+nZ!obSZ 0=J_YpTRKw͚^'{'KsI,_Uy||ëddq'?[XKd{}dмG婣*~s3-LY=jgУJTSC{iY+~."?p]qho1$vnAX!x4$xѰ%sPyT1s6Lf5CţCC`2`ON.=EwjcQYT*O#+s! ? }cj, =eJHg ;Hw=% @@ny$ZKy9f4-2%TCYL:Ѭd ]2WضE`9ց?2)}LV֏'47)>}L)Qx8UG=~3/_+#<Д&5 LjC\P 7mhkr.[ٶ.Yz~v +$۔TrZZ~^8 8(1>>'NZ52Е>2܂y)F}A<~wNd!ځ:+#NTnmd]FxYA`\Dvrnk$VtOOMg?<ؾ"kϫQ V47pkeeOS-J {Sg]1-t 0|[:P*ҁ9cLlQbD&"n~V)hK4TKT/H]%/R.56 y;ZUpܬa*ЮDxDu'lW/H/GR9[L[\-COO 'Ou]F!=P]w"O52yUA5Lo%+8Ss U1ҬGp,`Mac5˘i`c8dZ͵'ٝjcw~8}?À,'U:`ۗ̂D#F^ Vd9s3U4bX[hlxQi9nN F/W9"YKm]4;,=LLA֨c12Hͪ #- HmUd `68~=fe@7)*snKǽqq"Ovqkj#7J{`guu.UMXpUw,)"Dj#j12_U[+n|3A.`胹kt83q GTlD?O ч~d);$]1sUU-M/'Bm|t;A6 S {)ӤڒM{+D_xH(+Td׍n%dyؒ(ֲ]Bs~Ů=ax,!jw7})ҍWM5D %Op4.Mi7ȕSv=)D6*P ."S7Hz@Z@ >lu4{;}l >|fbGPq46 pJGn,X~5X~|c`;uzM9![RtɩY@"ݨL 9U >#),&%fYubb:T* XUio0x*[y46fw(q!5՟!1eR- ,} 4גte Zz̟ 3pwҩqE"cCc.pc@V+J+Ɛ/h nv-y8eJ} ,jUP`tBtUeHۨvk@%I,GRX$XFplXWʉH_P1kc}:qteHJ= I'İo9dDzݰt,{#PDzwc;̱~HZ?g`!v0;̎cxs0oH ʯʏ7o((_R!6>F̣ˈ] e.ƿbĻ@5 143H63IǜJ8} j|R.1֜HPä5gk!wuo4&>]aԉ;XV^]ݗ$jhtJr)w W9_vC[c8 $+C`stj &n ^Fr/D].'۽ 4iWrL!Orؾ嗉, DK!M\A.IUv OkA:$ &4FR,#]@;{D=D;,h0eRan Rk 4Aj{kLl6V2(tKDV WAO헒 b:?S $v# ۻ%<34iN4֟v:*?.ӌ69+Vbo5wT(7_o0~0sbj*LT$˜ oQ!F5ȓ T9zTVxIЋ 3&eDryf>nDd@IQIUbHxcۤ4K`/wd햱iJ3&2i)YsNi&+`Adhtca69z+YgTr^@V(Gmr0x|-`,%kng$9O ִXO4!lq#]v #ϗ$@d2HMS7F26vҩjU%  Fa+ /Џ7odSd,v#F hq#9{.'+H. 1aHS0m A{ʆ1$D1(mKQvŐIC |CgZ"rO\9b;N7\D"9Aðb)^AWa0$0k\9F׵ 0y YN00LaK1d I>js1Ŗ8+n ~~1|cco$M%Y$22 %YoD#nVJ&?Cצ4 M(cR0$(MK 3hUFgkfUiuO?#c\H `KC%*/eT m3]ГhoQi78\xwKzv|+|&Uh7DkO:v4hc>4Ҕa^ ëia0 3H;`ˊ h%~Ɗ0 sNo7_.?@ls!SFfHVFR.$௸i÷$ÿt(,mG;2(p1pśU*?|WX\aĐ.C@KĐɣ'r\S&b7oaBXg0Qu|G 3s˨1A !G#+pԛQ$kں}2jk$CK6O)OL}My`I~WIW,q}jK*Oi+Tü21|x)1u]C#ƥ 6W pY%. %c(n%u:X$ {"#>OK,Ǝj4|285JR8z]zW==!E/ CQ~ţWc)NBܡL*Socj): zpq*-&d-$Fm}&sy==ORdkdMUn*Gu7#,4vdUz0T3tiu$56bܦh0n8 D ?uJ:s>qe%֫_QP4q4ri'F"$g`Vcw)9.6ЀJb| 9ʩ!, w(I<]::K7$[8֓P5n`~~|54ΰ? [@2ty#wr%fq>r_Y.= EC / 2 aEhd,O㺎"o4 CSAmT9[ņK;@n34S.tGWH.W}0v18(_#U-"QC!z.ʨؔT.F҂;%"QJOY[X( ;PI[#䉔zA=:I)%/#褏`B-eakד\guYrJ-3 jT!xىkJpz2h(Bz@C \.ba<3Y|BE9&@eNL#@/ #\2o -oozD98,l].$_)„ ̂RUK:t2)#P^GW!`]2K)`b0\q!$$B'm'P6 &!yzUR`P1.ڤbT(D/L6ymqBThf@PԻ;3)T`6 bԆѾ4CcpODZ&=Zx]եDS4H`|Kw0K}sCRf0OiA *2u ՋX|\A[dEް̵$ue=5^S23k*g*Tjh`z,xFv}k1W1uAXRLP%q9[]>iZyfA:VG(r?"s=J)d'bq`:fZtzTh,H7p )&8;=RE읒pa{h̞fΚ$a]ŮIDiկjRQ0';G},t3Gg|T2ȪDKԀF%U +un9!иУ.5 +Cfm-;(M=b#Ñb)Ed';,#fGGP!ϸmpk*t\ tVdӹOO kwzl F?>5ht+.X9gsQcFuBR>EPуY \AZmj(|kK0G׃ j'K^Y*q^ Pm}yFjvu1uŵ'{ja%7n7&nUV#5sWsVS6dG.9: ]j#12e!ѨySowqKl(t$Dc9b;C2.U"&6!MM2l+ASf,TVy.U°_ `6Jm!3_cR2pQ f-q6(;0yW 3]lSQάc + fX9-e\ue60v+Ў+t>["|Jݐ^/~.g!PrlHi00k-T9MӺ9v%-6d[낭H\ \.aNu?V,SL y({I>dD- ֖/}<$Mv<"O,a׍'nzзo~[d%D%7/v- PX^m A#slل/[.%-1KI11Kڒ[2_& zoA)OӋ]o X1NVG#5;sTvguMqh ra҇XqÞ$6zߵ >! @Ζ.`U|Ey\Ep)vCÜ_މqw;u7;i5n\] ƍzQcLߎմbӷc5MSߎ,v6׷In,ޮnØ.Ӳ;1ldSt{ɥqξ^ 2@ :ħ$zN9>^zW e\a6¨CpwrD4 +WnqZm^!$A ;ܼi:ܭ*0 .ERo K0I? T/ƚ@ųb+]xTl8.pE=@&MѦ$W[ GNX3.<й7_>o0~0fK1m K2)|m/oɍשıɑɠjDBN$RcG2A!Sȑ G3G2IɸF'a|9q);]HV!?H9 do#ٻ‘H.u${m\>td^C#(q(;ʎ6ҡn @~@~|5|Ւsb\D=7_ 4GaT*sU1ዤ)R^c󈪬L@#dzZ0֍J!Q~V.{֒Y`ʬ*pבּ9MZ%Upg so#tLd_[N"4.5,/N[۫kK`xn 1DfKz>GCawc%8qH".hc>SBZZ0ƚ#Jq#FGɯ4fTc)vչeD6,7XybT+2;0Dzv;/XvbX?Dz9ݰ 5BEO, Be8 c81jXJ@-DzX;eoc[Xp,{9WDDZX1v,;RQqXv(meGc j?HJx#F@ ULAYoạ#ɼiH"UiM )UI qك@"hHJӜտKH*+K0]: &%A f1lj~5>[N*idgWIf,Vd.y0xiyY=Ĺ^:JVd`ӣC!ig%aAC'~x"%Ϗ @xNTy3hl2 ZnΔ`7o<<R]TdK^"X P{!ɢk/%Nxrc0S7rF w2ߤxv(fHg&UR4vsd~/ O MP'Pp(& ɶ2J9R9n?Xjxc+2IR4UrԊ'}DMlggdΤ|b`J TAnx $7oHfخ4u+KJv8tL:icpwבSUHf%M I%RKy'c1[d@V/qQA Pv2RlPBpZzI꟮VDVe‰ 8E/0 0Gfc.%lj-4g-`WWz]< du[M9 Mȉ[掁r 7_cqrdIP7O$HD2*.HIC2v"bHF5"А,2ddG8A5$C’ ɰr"_s$o!CCɐ0a!dKC2qA2)!]QO$D?w$#3x d,yA2(d}d|T%:!H'%g<,)ˉdk8qqx+~81a1KRI8)4zA3vӇ063/dMUtc5lX4k6^ͮT{RQE"p; t/40@'L(̆%3[納I`~a<}&(9k%C͖5`gɈ:^_ʙ`KF[ khH^ҏyU7AG?6@7AFCe}r (,q@kĮĔ<wtǸ} gGk28~")6&g #%EA??>ۿ[ZB Lpԏ__}?|W3V$N %\J ^{kKXDHGHԩ y1mI5y.\)-Y%HѹHK QDa zR/Am?hw&u%FU*h]2Jq9L%auz jG,=L#UP wn|Uޚ0zdY dWbZ^V,V썃Ba*&hx4֓:7,upoqʭIvUHtJ^RU;+q 3U:HC=j}'ѭRL`YUP2,CXBTĜd!Qm>bA,Q8C}>fѠo$`|UiMi6xy,=߬9>J7(1~HpTFR)@p-IZͺZ+SMȼ;9ZɞTw<-|mC(O6[1jP+ّ ݕMX҉ q3.= 1cIwV?VSʺ} 8ZLBVVmckTGHmH K9kAŶwɨ%zkFn+5&ΏK:ٻheJUT*TTې,Y1JYLg)!]䁸M?ݸZnXl;X>ӹaTҨ? dɰ _O[trcB?+VF4OTa9j <½,ù#8M!sVJι\ u@W)@ўA4Ѹ 1PܚU=T0q$N>ߎ 0Ae8P4ô**U84aL2CMO6ҩ+[|~!%{ fڍRh$[E鶆 =Z*@3_Ic^z{Sz{{@c`rCw!^~ӥgڑiJyФ9Ș"Xra֋*$ ?LsiHlo"%#!J5|)_Sf/h~Uin-@Y\L @-ziisBMYz&);Ypw^1L/eM%ى->8Iu豹 eMY0]qQhU 8I6ÀClui KȵeFC7C&,9&.\KZj] c)SF(yiKz^:H-ܹrlK /2?K(v/xُ' K 4daRɿkaOX-'x,jzj[n&h+[, VzHo}8KK, ,\ߺK_txN2se^2n_W;Ӯ`LZpooawv:3Tٙ;ñ;sLa꿇h9DR` FNer9pцX]n>q ;~Y]E$Tk3UAUՃof-Oڭm6P/vv`v0M=km Km]fWmhVU{>Wr;^fh7WU6=xU&&$^! -W7mzp&$^NWqDɩD/ٟ(FnxF͍:,Сdoȷ%7р$4m^* 1s_Ebgnx~*.ĝ%4ql I*HANuF( zq'FڇpĒJԩbK9%}rnrH!|[/M\D-ڐ᤿ml A%Myة&eH&Ipݖ4_VM 6ntc{+uåhjD&%^R [킁dD䗚4xaM*ѥ[2٩gӷ7oXX?XJL' pXTAnO,?]sGv@9r qCYO܊ּJxlpa6esP$氷,^IJ{ːȝc%e˱%;f[`p@{ձklCl``Vl,N6 Kˆen8~8~q|Eojpw4Т6$5bS*VTSu_:AO^P}Kė.Ke[5.ѾK@͎Nrom+7}@T/M?NhZ[$=^z" :To.-:"Ibu`O35{7AAthqRv9x7_0o~VEPm-9iQnC`F5/s`@OHd݁.׉ r\O5]o RNC141N$(>%zeo9d`lsxZ[PpyovxF5SPrdOo=#Qh:`( /ď7ot_!h ш\eyMB {JH8JNIu mXFOz3IP]"bKS$횅D=xIML.x`"7LR $X/XKt'>xAyn8p~p~DvFKC*1pWJ7M:!M fg#:2\!'kZ^ނZ$F:t4qCgYвj.rnv#N0IRRhNם# u;̚O4"+'U:~kRs H^rjʿnav   M ">b ͞fK"%̸{"y16gf9Qwoc f^l~ck˯ˢe IQ%b0-Ta kH $̓21$iD3a DBB'!"IC$RrDlZrvg*N?I2K cIѯkYՅIΠf))-RA\> *8OK̩郓% afr>E~ mɮ/ nYl>O9g ^fWTre`OrCRN~doD^CJ|Rgg/ K57,A#XRd "D"ukW痎$1VI;.,Z:!z# 6淊#d#=$MƞT&ctZ ;3#gyƨɐ&eu Z%1ubB"ɉ[q׽l:pׯ"L;P\c60J*\,VnY}h*9|6z1$8N\aTIt@oeUe\rɖ:< zXKא7_o,X~%X=Uv=:禱~Kj0c@<8DB"HA+HZdBG\7W+i8 ܯ܏7o00vYkN#-KfԐN"j;Y|Z7m9͢UQS/ʐj2V39!*:j#8)txkb(/`6fd(G#faP$F=+Gldf\Hăx|M1#>W,KԱe|5̀<4wQ8[*Vn#I T%hti\DEw@X]; x.|9hFNnyL d6[q^JY霦tK/bfmD/.Յc}kUم8+pm|0/l!4hIo&MpFڂzǮl cRp ǡ3d6Ko&&-*ښ$ւDXg_9[#W [FZLdI EyvI[.hį`a7DŽG ݊d'ʶ~I+q)E%N [P":a3,6Ks4`' SfjHQQn.CR8gG"&ɆKTȖ[bm{5k(M]6xۓBۘMJݬ6*&#ԧ*fN!`d Mϓ}wwIn2ՑTM Si$EѶ[U;FxjdއN*yٞI7C#7bY kRTVih%wrE"Onĕ=z75J.qSYi `^ņרܷ o>=URxq*BQrȚi\ Jb;P?ԥE/ U.4IW,[\5iVu,cыV;`XJ?t)*7qnEUfM\ ]QFBp'|5rV)nIHϪĴ6圻KtZCj<#h6EkR04`R(9͜ҍ#PXUoue5&D4ͶДփR'v4mn Wd==e'}M1(=e,I.Qj(O~*B˭h]U-9=tQb/i=2ΖNjC& ~8%C4hYbb(A?]mp>)2U9^?r(qJuﱤjRzL"CF'FG%5rBS5V٘q{*nR ZljrL\tGBS堗2A.b MW('.M(4a㙆M(?9p~膮 uFm$zRUuأ?c9J+pN.9}ijK4Ovh9Cc>Sb"WG_J/AKȽ́7\M?>,n4h~hv?3>CZîް $޽&Mn0ݛr*f(R ӼXLvnR{DGUo^\< Mft{]T݃@uo#sRfV/_OXkI؛$YNHȌώ?Lٍs(_C('^F-%`#x^F+$#Ha+$И6 0τؾ±MT5/6e<7R%;#Gj/N'ŝFݒ0bt` cmg{CWs (Y Y0J8tԂ zqӠ&ujLrv(3B%r/9}=%Fkf"UZ[~7p~K=y .es)]$%wSW$%Raãs1=SF7_<o8~8!9O 3 dd:ǑFӮHʌ+e7nH?y0C0Ȑ <0G2gؑ\i= 7|٬"f;KKv ^?DZqt{_8֣626z6ŠccƱhذlx@@Íůŏ7oxSK 'x[GϲC"1VGlA0Kx'tPte*,(H4!ÿݡZeT9BkVȊiK `lpb9}79Pm*j8Ꮏ^r,qpKSb0pKC;c;R6I-vZw&fNؘ$wȷa1}Ovm@Dɝ h;iڵY1 A9hoHߐ~ɐ~!|CeCFF(t86--<6n~ G;D11Jb cqw0'CBSCGqj3#P-%tQ{ݦ&m%bQ%bF5bQlQl;77mL6u6m`7m7 bFq 7o|? AA|Y-*7h*"ҵkٌ >4HFm2 pH[OFdOuZF3A1" ,n"a;Z$?Q=SZX ,djg<-]UVʈV- uAΪoxzvlW/wFk&h ne =gyT\;tAMbw10Lr]s|WcEC6LTq$ +;F/ZꯖX^Sݸqbq㗇cQ_in!!jTˈP=2I]0Lm Ŀ&W 6@D)Z`QM3/@xO$*=}HxtUCI`Vh]C@҈ܘC`7BʐrS۳}iLCeRMwx.r{JQ`6ZR0H qzE! @ DJWy,RA3&L,z" HFc,mq43st$͚:[l3U,hH=%.wSirAQʊΚa\-+f`2m}PseQҏ` 1)S*?&Ҽ$1&%{ѶB򺔭p1[[!4l;Ȩ`)G0;w yڙ]J"\jKYK fax``#o&kGZcNekI0[vVqf2dΫWx%AGbq.D>)CX$ {E?E[#ٕCNgfs&A{ͪ.±E4qʨeUcn-.Gb {DQו'd= HFV]<mͦQ.R8z?Iɬȋ^Ԗ#@%08Kb5Aj҅I4+&;-_ R?ݔO$U[r WaZh)qDȩ NWV.w*b!`ȥ0mk诐#;j;gDTYEX-O8f63.#^,y /3ada2_cSv֨jf=56%ݫ-H3_UrVW&>4$eLUtHAzۮY#d:9֗bU1wC.C#7Q7QYtGsD~zjjIٴ gݪ '5SJUiD}d&U?ׂ $wsni}y[;62$g" BncrNTMGtM$4G=1zg!=ԍС؎2PvB$>R0x@! e}M=LULn\3(W7#3]EG iLƇ^ly#8y$DYؒDҝDM ckb[*Gxh06@y+* 8<[-! 61u^`0S+QLPtnDРas2 :FB)bC1vu͔`4,gGf%#8ϴ<.Ub2.ךd).K#u \0>J|Lݿ<$jY).,Z=;>mMؠ>c,@)­`#Z vWcB4sY$.-!ObgJWFњz ɝ|AP e_]wBhǝ&`_.5}|@{PJ#'7LJF8~Fk@sNj3'3ջ;Mݸ#څ0s A| ԽC׽a O;Bw:uo(9N_[ Z~RnTjCO[6yxwp9v_oَx,f=aQI5[v(BTlX/nHyRrmY' CY# LVZG1;xa!0\pz۩HՈ74 _ً97_: %5 to1^JlRހK9DfYkrx lviIuVߩR mUrTI5VMI NsڇmD9j.f覶ȫ2 M{hSV%tc Hjj=6IrKa-=jyi/ M띱5SSè㜝;~Iz N*w`kR lD=ln4nK!W(zæLf'7o``?hjLw\;lX("/]$-3v|U_/]_Z1<G=xd1(Q"|԰"Xx~mrxFQiOi`/(4^KWBHAF7_2hƛ=UD/6јo0%s~f MH,FΚyEd8dņ !:,@[ҦotʑJ[u ,FTMjJBRȣJ|w*@dz@s3:u5ݘy"Sd92{q)IvF| gk|hPOA^)IԚI-Wfu^kB&;JKL^4mYz䮮09(rΌI-%MYm5]wXI02褉Qًr#Ai2I oY5^cq7.jp4S d(shJT]̨9 q\W&̈eңbR5"$ MXi܁|t.+;/0U aJDժOV412,N(teni< OLºM' W7_cr!0 ׄtuϓa$ÏN75ʚ~*['u'UjX2V9֫sfU0lzjoMfdvVp2{b3KƤiI((KMoܵ@?]Ŏw>iw5ލؤ#jd>Yv;v#V]كn|`\7PKYAy0Yxd  fK٘ Ծ2=-D#ct<+[t[-ҙrD%Oz_ _-HUmͭ5Gp|Ƞ@zTh -_w~LJ_A/_~_D~x]gӗv~??}>җ* |?/pK>o~ r~RoO+V/}IQ7g'v\f_7>_GI__>/ņ_~_|f?́8⢬1F{C9o~o>60 ?u =,[k7˯+|:pC/)7_ApD7 .k7H- Hku\CP~?7I>7@*^1d~~^H(Q߼2sc/oAeC|'[|ڦV/}w_~>{IJע|?#.e,##{-j־<#ex>$8?+[t~*h1>~d=b)]󓒊3_Z`P,Kk12AT{O x%8I`.uo~'R k,yƺJ9g6KotLٞ.m$AZ& CEz9s9 ώ1mFZrjZ_gM5ڵgGe?YeՄ?ap񍵲\Ёٚ(s,~;^O_ªgV8_>ZQ={fE;!:ܫ>=ӵ.#W>PmmR??>ӧώլynI>Qӫ#8|~5}27яό9_gwU%TMRg,1_AkY3ZuHJu,'|slSOfDCNk;>z`O;'-afj|'>cl_~^p+_'f_%wGGoϟ]7SM>}zy~?&ȡ}W,V}v eK.W.x=fO_[ukzdz?|ZXj'lne3+~Mu`w{?zD3iŞ*<AJ=E<T 8'usT|(l@xfJ5X_B\t?_=cgׇEH3>YY?܂s6/==OjN*( wir}>[pkOFh=҉zS\43=OΜ?;I7>'q4PD~X |? DO|Jp ?kU VOlO1&u/8Fߗ.9oF=]CڟX˾]?~bE,jӖ[Ӯuɚt|V?84k֡BZ%gߎg rCI:SٶTؓKj{}q<8'C ByJ??iG?K/Íc8_:}M3tV~wfv#@#9)g?|<{Y.3&U$,O6/?%Xbk~L |:zH'M؁CsO,VU 2=ݒ?BnXSO<>6jDFǧ'ƧΙQͷ9ؓ'\x\џ|XKOO׻ 'ؾGɱÿf?xYV}ogwu.x_qOB:#Lvߟ> stream x\KoWR |͐4Cȇr0zFf+Mv}]qf(>S]]գu$kqwlXQw ٤Y2,Y.A:c,J -%;1ڇ2|"rI4fA:]{Kg:ە= aDfyh'kep, }T2ïBl-?c>Ѝa:H tJ틚Żg* %aT xK%mgW2lÅSbO2S@f78lH ΅l|( a0m@]Mߊ1hWhiչzPƕzfAJ|" ):ܨYe\{k.Iˌj'3ޫ8ypSFKaQ䤗"liE={S֌]v:,/eV~Y".gcZ{pB= lA ]iXmob+RJr(tYI,hNx$!^n|gk*H[ٳbe('wܭA/񺘉R[+ vXzG\;-_ₐ]o@הV5m,O֜{ }LppP;suz~LOzⰇ+XY+cQIeV2 ~Iw_C#Ɖ ŽTȵEoR?z t\xLC8bYgtƝoOCh`ݡ'& @=lezzT@% f$X=@:/_`~5 /HF4?Ŀ wFaE\ =[Q%ǭy~kS7ܐōC@ _%Y;=y?Dp!!3U5o$!= \JW!yV,AgIOs)9Ԏ_tbOH4Ptp(@;ew r7|wuBBﰺ6Qfa\Hu+UtaBH"bAnn.6t'e^(O>NlOJgS-p>^ 3Z^ZǐMR+(oN|{'{F9#:`-KzQ;pN*F;kiN7'븞;C/ݪG5.nĖڜ-Kd?;AZ qwkx%~+puO `ԂQ퓤β-ݷ%^ 6V^I_+? so:qGo+b|/+'= XP[jж@wF:SW2YDN+2RmLFq=M956vc3ڦoUPVThV Y=y:o+a035P0e`<5{Wxy*\[*h(U40PNxlr iUu^谍}mY+^Jڛun$gO;E:}W6Z$(؂'zm{g[|Ag"o&I &ӣ)^NҦu0hKDm`n㭽 `,v᚛9P<]=AV3idiQ[53~~zvGUendstream endobj 94 0 obj 2794 endobj 98 0 obj <> stream x[s7~_݃|]z7m3LM>رeeגs3ow%>ؕ}! _iivr|RN6tz5u?Noo\4T1E6],'K5UH*]OKm4tv6U#ҳ4ZyzD34|IM 4a?G\I^nbgZ3|iё7bEDn$?-(Թ.,$p;҄ jZK%G-tt׍..Lx׭줯ɪ"D^s8k'.gܟ{.L=k_]E^zvXUM5^8fi⬉V46Nt-ZFNW0؆,߫]|o{! Òvz 7\9]wDZU'iIg"K"7D~$2dVҼz=L)]<%ZFZh?!`$+m-. L&d;ޣ93)\2wTZJb֟sxTVjvoipg{,J-ðG.׽+.1A~Yj8xCL&&A"c>l#d4|Q%X] O~$N>s낅MS@Hhj8~Q ,&\M^ LEb}xaZ2==5=gN,sB KblAP PqHf3`XE+8x٩_ie`^bG$}xTyE$'DT< F _JGFC6kqq@ d26Gr]etAgv;=? y+ zIav95>\7stǕ8Ľ< iMr,g=e# -u\S`\% 5@`>w25@&@m3[x>rM 2?1'ܢ<RTs:T_m@2T3qta"N*`{'G7" ol5LF]X~KVmA"B-8yH>| '^Y}pȡ+r6p-r_@ \.ܠ^қ%h+a9alyΦ0 p'ʢtKh:e4 )?opM!!`xGTaFwj=;y\eʇN9Q+=X 9$]Qל)kZ^¹W9 &ߢ8r@5[8&!Ȭ)@RYh<#*04;sφ;;Q ss~GJ3ZHW6JE4 6H1(5\R}0ώ+zNRd𱁬I>Qꙺ"ݢAJ\N(ň䊼:SʦjlH^<% y0KaG/Z,/k1~FmGΗ,Y͵JD+hHm[H#脗F2ߨٴTp Q #{ Og)o{GcJܘ "K$Z}KdIAq \ B:v;!d2tٔ;7#ޢg ) +6AWRqK؁k+"D^iLi V+|_A{ 54jg:oE]=T[xm87'rRl*?W .Xc!LUȯR':nەMȮz۳9$?|cG֠s`dƜTsHU!L6B#4CJ%a$X"\~j 1qMza.OVHGxbkմwbZR dhBwTpf"Пj~#ZlW0f 0Wv8 5!tOrĹߎd{?*ѳ~1c; w~,<'.ĸA =>Qs'ZWbGN´(J[dƔY^#I^18k˖ΊL۷/ ])F4vؘfMu#Z0'}X`tiGvܨcm2feWF*\N/Z2ɳZ7lIٻWxU$`+XKܶy.Gi(eΰkj-RgSQɛbpsWLz{2ߍ.!;۱wQrw! +}&ꐗJ6_2'OJ> stream x[Ksr5-;ZRޘビ8}HTQ|DA%% 03JbjAF>RA]5y:kv84h!23`_ sET<Sώ'wwJT4sCk gNwjB*,?oкaj7H~gFkӴ‡*Ь6D96G /\_DѾZ\[jΓF*6D}nefKbSѵ2g[_QuJYhJjđmxc1]@vXzLuKj( \<ٹ.3Cv{DKDuvGfIAwWԦrbӣw+Җ-ZL[h(b(gFӋBSHb0L k`k)L.ak3BzgloqC9{DxLCEZQ1 Ť7]4}`YVsx*F r+O5`LqY[ą*'Gɟm=XY_s7Y.?d[:b^fRB_`wtg1oXl%S/Nqp_Nx( ӑ, tL <'FoTh)|Z uME u6J nLXhSaNKHyhW\/zRju%l(SJne["5wGRZm.ǿ]}0mQKdBai[6wJzWw5QH/CyUc٤iӊ[.,Hd6yYUذ+`9D` @/Ks&[ @7.{R`Amml}\cBV욭p"Xie]o]M%fږp8T a[B8$;]bE8؀!#J:Za٬,1XYPqbPL(&oYb <8wx»RT#S#?A*]O*6g1 6=ņƊӡ`)b;1>]XUG4Ep¢Y @u 4c~D ;s醎AW;7,N[$ltWTjxǙ::v'yoL~:ܡ&i]B6rj'g`-TUâX0.DHj*♣8t=dX~έbÂzB4tVp a% =k:u8kQd9-[(B*,ʆKp6CĀ%Z8\w%O{n>@c_2 (g+ZZcJL}An뎟v42 t]8Wt6@1ŕ @PmḪ~U)#N?ݞe ն1HJ1N[Y V Q.. (GjY{A÷z,ƕ۾G  ONﶢܫ3]3s(!F$-7B[3@@<FD8T7B?,(UDc *f+ P+a3U);o.Y?n)chzꕂ+ft嶊:}[mr|N GhCp5_ JĩrOЗQ*mUK8")pײ)e aCδ fm ~-/!% oBvlÏ](20<ok  8rbÿNjobjpʿ`P2'T%D*h YV|/aEppևaAy>Ј>.' Kx9u@Uh? -$/%[|h> stream x\KoޫiW5ɴYm"pQW%?P[r,۱S3ጮ /~8q8g]~8߃g<B =(mÃ8B I5N<;GBH3yt<֌'<9v/y,M0Rx,^ya{fZWkICX}[F!Xi5(=MОцք;VUjwXj41J!8)v͎zJ1j' P U9<:&,M9Y=ՠ,ӦL_9ԧyqq8kG+=}^ "bG7L4L_'k2iZ@%~]FQVEuNNz15ՔMgQ33pDI[EUdܭ&H3E5P0SS;>E.oQW04|83́x.'g@$rD_J.TsqhxF+oqHew̚LEhZ93(!X`?ʼ-Y=E5:nʪtV9VіfćxD/2N\&a֓42.tdI1a'yEE" D ?K4TAfr- yE<=_F6ZVE#K$JaY^FfDՙJ՗?oUv)oOM +א)7}x'ft>nt敯{!кI#DrcN~G'أ mtR6BLx=ߐ "1 |/D/RXn<#CK?94k^Y_f촭=mcD*.a7s@bG^';&\3bˊSП[%9SN"؜arN;2k4sd AB+P5F_YGJ!Z*.91BҵVn%AS?o#cF^Q|"R2#|5ApdI Ce\Z ](CMv1<;2F4'm׌ iT|بN5$yͧ=K3IH#隄q)NV1<d~!=@gtDA}ke88cxɳLH)bS8w1=)-)1T p׻<ZXV}ŒW;G2nIYb^ rn,@PO+1sg ȁdҐp6|sMD 8E VX-śgHǨ닸6qlJ\krQэ*j?+kNsBN!wR;7X#đ=%|\_X7wq i]"ДSQ\JJ.*R&[Yü8Tim( ˿ 'FY SH8q],1)l0Rv6(M цݢP5>* I$%Š_CcQ%Ip{ٗ}qeF8.x[fٳ2U~^E\ 'eD_jT8q{" D_۵+ʐ@hsBڥͽ¢2O.+@8&'d\D}Q>9+\W]QCiQf]foٛR#K/& 6yl,(j_hP|irM:X)Vo֛)Ž.U$px{>5SLASX.7 'sLj1./Od/,W]K<vх mm%q3}q WP&_uSɳڵ['J2vW&DnwX]8}-jKaEKՖ/[|wq8`8b vO4IZ BK>. ڂhtB|{ib )VM97gSQq-d BmbBQ̃{ ̠"0R<,[~P~-\ٳW6v>k'eT%ٺlvMGJVlWCc{P[MNTU*(_6^Cr]e $+Bc=,cI]}q;r=~ /ڦ1O^X"SM;tJ0SQzp\ ^6I,?27g^bfr33Jmz\ls, kqPvO8UQnbxCuBC*v-ӄM%JN)7R.. gxOk}_Sx9ܳ\m)hA }%Nj߻jʰ fM;\]KZq>k2ͬ$kۥK90i}n;v& 0M-(+W򽁄R}o`!4>`tm@_kqWjp?=F׹~}%=Z3UɅn\*ݲ;z.h[Zvk٥B\TfG1XmCQm0'ܐ@femk~M SK3e+WIݸ$x!}J>AR-ARV1,~WOLZ ۯ ,P[6(Ϻ\l{}_J-i n9}.J m(CYw0o`<'~u%[OS+K,*-6lObõ▭( B[DNe/gb,L50/m7m,| lNVa៮O?>5%?Pdsn">h'kJ7``u b\|de긣lXVS*B+.8u8 Bkq~DkҬ]vOW;]e6;Y.Rs'Vjk_;rn*qˍ|g뎵nW|/.)^/RQJC ^k+&uˑ'kͺDX_Cojlxq_"l/l-"%5NV^aݶ_;M=Ό O'b( nX>n^P4ﮛgNTUw%Y:_қo9a.I^nϫT Mu;nY> stream xn.?x%O?$!0d EXR{dwHVw?(HU gbw?͛|H N/6:a7+>+F˼ 'Rl.^loakq0X/2^2{YgmE~RfOhcf3^ġBm(OPmQKCQv8&=-z,CDs=?8]YrUf?!f(OZpWf2 S.YtD-Cy^.<+: ʐ-l7<[P:䁫L/!ya:Ojc+XJް):n+F$3e+;D#EA(%cQѤ3L [R v4Y9XtW٠AaFjo $a( 0@fHn$d<<S *_b` p'ڹq?F`Db[X|njp?#6`D~'&BZi<3ST:ge'iYe3‘|=;;鰳*`5 `CCbJ*CgqI$O`:i2l4 &E0a-&X09iZ ! j-4UO )PGbt2`hT:tYng{pG VI`jIfk(B Pm׆]؏b4v8!WUҢ}2"޴xq2DQ< ߗYpA#b9JKF.Yڥ((lE9g2=*ße,.Ϭhak8pmFw6oVNTnXkt]LA9Ty>!W K֪O,FA~aD a !!P rHKh$sf x Z imsZ.e@ K30S <ׁ^b9*5?3p~3ۺ *kȒӻu嘶-wup$ޔ9ˌeٸw2O8019D1Tt%|jD "XL;ށF}\M}^1%Mf'C`ڍ鶪GU3e ;wܓ7yq3{o=\FlؐIЖ6; 23.ն;7x[51%5х2DyZop@;vBuƜi"g4{҂y5}JYA9 if{Qěom}eO=FE*Y9]t6I+#e.}Ac\q=_^*Ej(z%k@h[ t~=ujH[~ Vܶ5&ﻐg.ghBٽ$Om sDoCjA߭{h=G{,*nX,eY`W]ϢO߾hoJ+A, ڎQr2,pM; _%ms;74ͣXŐ*WwùHah9T֙X(XRxe}qxBc&5V=>a͔A3լʜ4}*p]f" slkHI]aR\-@ߴ[wD dB{%ZK]3ܣm2;%mcEC"}d%Ii4ciD!b,,/WK>p!&=I F3}|G  h|nl^]՗ZѢWyٰ;4f fjԃGucHr|B,֫O--&[`= )`F5ަ[{?}d?yyMlwIs>- m/ |`~r(`0pt7-`endstream endobj 114 0 obj 3071 endobj 118 0 obj <> stream x\Ks60UHQ\rR|P$*r$mNjhf8FF?F3ț?/oOh/N˓_OD?Q-R͉R,Ό*F,7jqv{r,VyV(%YJG~q/Dd9Z2sMvn]fk* Q7^UYYNoXTFF/VkIYYnn򷖱,5ew BUJ,Z鄐RX9,?iQwyeXn2U%K)Rd**Xݙ8CLe#dj/MmZ s-U٭õ[X ayHQUEi Ykۥ䃟 W\ ?~%?z7~KO{jB Ü)΄eh!\[^^~55Q8 ][5\9s(re1ήZ(u)[P9ը% hJѸ!Vyv( @v/c^1a97cgQdEQ,o-ƚ&ER8Q9ܓғ/1EnPކ!uaǫ+MZHhoE,CܰDA bt4ox۹{֒z-y1ka9TF :rmlǤ| ѨhlP> y:249 k@\7Яh/yw ϢJgZ 6МXQS("Q4u]dL4pIL<  al-+JJ&&,fA@:^3a/^XG R2)"T@:.%hFIAzrC OecthGHrp&4H5Hs20|b~6&N\VrjMOei^|`e޴(>Jy'yСHPxK&n v~8dB3t__aӅ[{9GV&ii΍%޼ k- $߽]ynfjX1/ge P5jjQZ`wԨ,8@u0 sa5;?lJVp|X vwM}]pgF5`Ie4)GV jf:w4ӯҠ;D070TGeמxcGDgKYbU7؏HtC hϓ&>s{8,N~(2kM|߲n{5n= ؂?_aA^7`1>s%oءތ$, @9*zU*aG|v"HH~'gωh?(+(^GU`W پCp &J;`d}k3͛i$ݚRW*jec/l~Sa@z`ǖ< Дז=pj uEvT|R}m!#vy5HOm$Fjfکc2pѳ^5$G伉HOnS,>4xwjO [}Om^f.3Q~C4J$jhFY & ʨ"e5L'{DFji?Ӆ"ʂLŴЭEߤޞK-e ؕUU!mVK81`sOՅȪ≚O0f^o|l^M7 &ݖ%}rw4xɚ0鋼A?qfzE%"؃ O먡7#f|*Zαe- G?-ԁCo~GKBFi>*g[":HJ%Ǝm-5s !?H>0? YPp2aX1/!p5\|r<=χ.{)7kIorE+%* HXNJGGc8:|KTE((8S¨0vRǏ wdѵO;cu뇮s۩ovT%1^Ђq,:++ƹ,X^ 'pVS\t{g,zL矿E D*N> stream x[s4\^>W?-f  44M4M Glzk Cziv.E%<>_<-_lbbv!/QAPZfOʥ R^-ҕpz8X=]Umt/NCF4Jj:h%5x*xhXX0d‚Ǟkd)o6a< Vaq nrHPη$?QqCXUqhb*'uR:FOz'cNA QKmM pB n[5k)"! FS$ Xϲ =!لe:D񘞃@mDQSa${W>tCIm<N-BQ?Q}R#(#ha.{|yDCc*wF"?FHL8ZF*I\œ/Z C cKAHq D;$%cw,OtڰkB fct*fp* jxͭR"V.~u(/8=QnYS`$hyCYaAҋv z@;_Dzdzp_ἓ@ErW$]=oa SF̏WnYݎrV+'=cInEN,85+y #m)ڋ]`2ɢ"2(3ۃˢ' ˲Qraź^(>2.QOu&kw*U X>L|15qQq\!? EO'M0N$Dt1z;p|8җS5,O̿xoG,w< P"\8+'eSEv1 zna1|"(~3ЬTZFV,]t2Jf4z@)+;i=㊬QTA 8DmRpOCt{l\au)F )R7eF[s8Uk `XFp뻁fR>4zE\.&Rk9P}Fe9u#mh,D;YјMh,O^ї[I&/Yc&@hD{hsl.vT'j5˽hڿ>( *ZD=<5G}G]:hQE\8r՟0j[\ȯ`)E7Ib3mVD9yH{:z;ےblw)ov,^_d(5]-TZ`Zz5(_5"fxK:G~-iTlHĉ8[x;1YcdtH߬'z"6њc[N )|^rtޝmV@~4!qC&>xo tjϙ_֢4΄T>8D:畗eS4>jZxo9tTW.:!2{/2{m#9`|7L_cC%GZᢛLy]˘Q^ } kmr^^siӔR~Jh\gK092co 2pơVӣ ade}rq/ÕOCo3V)\U^>"rƀ\2 /4-Z)笃*̙+z!+H r,e 3R9TQ{ nauCPv^QZw7&Q¸{ZʮRo`-(9ZTk-\ȈěfșK5,V=wsjyrOJvQ7,IiF t=AlFG z DY~&g >mch&Ѵӣ ϳ[E:Y`S^4 'ec]쿢'_C[I23Q/Fs %շu~\G2en#6Hcu>jN-Zs|7])b$)0 E֨UA&QVEȣ)s߰~4~PG%u1)E0\ڣ4'棆^):^‚Yv1) D1 '⿿endstream endobj 124 0 obj 2477 endobj 128 0 obj <> stream xS1̇?pqwnwDBlh)}+{ر)WWWyw`|y{cyw̯yQd#N`6gt dy&O01~ Ǡ6A8ө"#do:3aZ$;Dv v7Y "D/M2=ih]cAFt˸O8'Yv8H9WT˂ R;_X"Iu$+Ʋ9J $ivf. T}97Yq-Dd*Čoԫhs*HjYBd>Mayɰ'䴌:Ⱥ~!:3QtYBx0_sB[5q$3!'´Aq1rqq1u, X"ߌJB W$-# 4ך)t ) j#=Ct{4ۓX~+jm߮ 8_Wkt>U_gy bzk_{-p. c f,^|f4F}tjendstream endobj 129 0 obj 582 endobj 4 0 obj <> /Contents 5 0 R >> endobj 24 0 obj <> /Contents 25 0 R >> endobj 33 0 obj <> /Contents 34 0 R >> endobj 40 0 obj <> /Contents 41 0 R >> endobj 45 0 obj <> /Contents 46 0 R >> endobj 50 0 obj <> /Contents 51 0 R >> endobj 55 0 obj <> /Contents 56 0 R >> endobj 60 0 obj <> /Contents 61 0 R >> endobj 65 0 obj <> /Contents 66 0 R >> endobj 70 0 obj <> /Contents 71 0 R >> endobj 75 0 obj <> /Contents 76 0 R >> endobj 81 0 obj <> /Contents 82 0 R >> endobj 87 0 obj <> /Contents 88 0 R >> endobj 92 0 obj <> /Contents 93 0 R >> endobj 97 0 obj <> /Contents 98 0 R >> endobj 102 0 obj <> /Contents 103 0 R >> endobj 107 0 obj <> /Contents 108 0 R >> endobj 112 0 obj <> /Contents 113 0 R >> endobj 117 0 obj <> /Contents 118 0 R >> endobj 122 0 obj <> /Contents 123 0 R >> endobj 127 0 obj <> /Contents 128 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 24 0 R 33 0 R 40 0 R 45 0 R 50 0 R 55 0 R 60 0 R 65 0 R 70 0 R 75 0 R 81 0 R 87 0 R 92 0 R 97 0 R 102 0 R 107 0 R 112 0 R 117 0 R 122 0 R 127 0 R ] /Count 21 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 22 0 obj <> endobj 23 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 73 0 obj <> endobj 74 0 obj <> endobj 79 0 obj <> endobj 80 0 obj <> endobj 85 0 obj <> endobj 86 0 obj <> endobj 90 0 obj <> endobj 91 0 obj <> endobj 95 0 obj <> endobj 96 0 obj <> endobj 100 0 obj <> endobj 101 0 obj <> endobj 105 0 obj <> endobj 106 0 obj <> endobj 110 0 obj <> endobj 111 0 obj <> endobj 115 0 obj <> endobj 116 0 obj <> endobj 120 0 obj <> endobj 121 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <> endobj 130 0 obj <> endobj 131 0 obj <> endobj 16 0 obj <> endobj 142 0 obj <> endobj 14 0 obj <> endobj 143 0 obj <> endobj 84 0 obj <> endobj 144 0 obj <> endobj 12 0 obj <> endobj 145 0 obj <> endobj 10 0 obj <> endobj 146 0 obj <> endobj 8 0 obj <> endobj 147 0 obj <> endobj 36 0 obj <> endobj 29 0 obj <> endobj 148 0 obj <> endobj 149 0 obj <>stream x]A Ebn@!hҰ^а@(]x{ m]|Ƀw˕|H0dNaN7ysuQGƻODXV#8XK&X64 ڦQs!ٿ\ ےB*)B-V*)O`Tv0sJHW !,b_?V endstream endobj 27 0 obj <> endobj 150 0 obj <> endobj 78 0 obj <> endobj 151 0 obj <> endobj 20 0 obj <> endobj 18 0 obj <> endobj 152 0 obj <> endobj 17 0 obj <> endobj 132 0 obj <>stream xY\SWۿa\UP{:U^-8@q 0LNa@ž":qjkpZlmkk$B ~{O9Nx+ֹΜa8XqNC.4=p<nFXx+Bâ~"{q9Sf͘1iYg:Ow_9m-vO$ [0}X,1-TNb&oa>ա!"NM3 y օqYH芰U>r{JF]o_M\m vp‰&-wwN5u{Ӧψ)%=oq Xb1Hl"&I+1BCl%܈)6b9XAG Vӈ*b:I|L8 }b 1XK%y$A @8ABŽXD &C%Pb1E NEb$@X51!F&91xśǫmbmmo}&†bl"9U?` hnn`!hfؙᣆ Ղr~!=~=b=2o#dsW88s|MɌR@\$"#-r MF &PYN D5=:<,Wp6YmX"ǟ9x\q' ǽ|BF_")zw ֜/ i"d3m2?MV꧟=<zٺO~k.3[S$\=޸bI{t)NMLNei@' ۭ݆񼣐 Z;o7G(wDxjƜW]ΣW]W.^Pfd6ŐPPC_tKߟe"N1hϣ&@Aӟ;ݣYzE_]?yzdf%+D ?̈́{lLh؏B'Z+u, ApP(edI54O\ !i\:iΌ za2na6z:ww%,ǒ9yMl߼(1in G@l~PQ"b$G:c`»z^f-lg>HCw޵ˈ>;HGO @A%(h6KnvإSKzq$i&TD+EJ~Y1 Z+-| E|2:W 6r;:c$jN^q^$D'ELRnmE@uh`,Q0p< 2ߩ3+(֊d%ƔB 2K*ް?_0p8&" *@Ꙙ -=`]lUI]^*6XU٠$Zn2jU tlp=j_o;H:ھm∕5< 4$ddqmom leM\ܶg{'=|d4 ͱk o.464,kB=c@)V 4t;6դDTV36#GCV ܣ(6ojyg)6Xkg\ T[e>+ή0tqGaJTyGD'9*r.|Lv~s4p,z@qW_T Tٹ.D{8t(bm| ) q2'ٵ PsWt~h! gU~*@U4w4f6q_4=0g z^g;nG9[:W#lXP'V P@-F ,쾆\rEEBPss3@u9JN2~1T r^:*h@ 'd@RRǸ50(28WrJVP,2U{ zi3-~CE JF)&=Wںz ڬovx'7~ymOa&, GH!}Wq""Re pl(6B+:)]Fn"KӱR+t:Y!8'ZGPm!p?$yskV]~xIr~:&ZVYD V1*'!u'#>Dae`ټ">z=`GS< \v}%t]xk_ PW[gY{ڴOeJ,G#P71װn}u"pX΢2J|Agw 8xM8 5Y~ 5&8jR莵҅s?>uOETaG#MxbٗpD{$~aAX| i. iD1!K~G#xF_:N }hs}_nc̭_?(sE+UQp(۶k$—],%[JקO~ugtɉ5-}&i?D/ݯXI'g7.gx7DCMph?#19ʔ#ex~5yqI:);席%{%M#o}sthnݚ|RPkA9kK0ܠk/@+ PoTO9(#'TǸ0HƗ֜I2eH 5z^B; zU~@&OvSb\w(JB q_ J]V'wkf ]Xy[W;% *)}+oq'gn-qB)%'W|qHFTrt%@}VTs8P+S4I\,'䅺j ҳs TSS?cyH͌9Ţ}rMVT֞*(^aZQCN d0Y@"I_p71W2@{k<1B( 1} dy*9b%" dSDybdu#<[s[hP]= B ' KTmxڃPtbfvqS5guw}G׉g3z_Rhp3,*|֡w8otT5S]w2^ $h‡`KqqrXNJ&i~wz,x%hV,|Fϐ&&)W=g{V'WЫ778$lq>N (mQY&>ObË!q١0('Lˠa+2jTz\i@u s5+0%'N6^ԃ/w^c\ U8Vfmb~ /OÊQ`P;ioIQ@.F|,}xG?i*58 |ےJN̡kP%*dh%! t uy٭ڹ:Z5S4648, dÅ _Ŧ4)!7c1'_|q3..8fg稁$yӍ!OSpseJZ^}'[<(p Knd`6"kG?y$Ydsr?JFTeBvS4d}Cvm5@8Gx${ERpL s5Eh j*eja!.5B9zQi4XoU1fzbcaO(r3 0=] w`?(MN) (Tk5 mi= F%J6_B;HBVsn1^tBGhMWj@*v9 WNq8oZaږk.z2Kp GaYQ2Т3ٰ/k22@1ePdJi DJXϞfjb5S5u缲rhz;2T5637pyuy٬ ]?0Cwc\?y K`7|yNM< =.RC l:෥Qk6,Xӻ.阅n_׮_y3ÓqWdo޿ y?7H@HBGpPI3p.SiP03b<ܺ`=c2ǚ. [4y n|UQYjBqLp`J*Cw`@dm'!1 g5ǏPh|`wluN$.ek LRAjV,S[63Kv‰piL,7bnȗ xw^?'DX4%]k̬/`Jpid}Y/Ѿ'Cm̾wBׇFSOz`kMHwW{UHϨsqkR}vϻR T2pHoA'h Mu7nÚ3Q"MTK[h`>j:5 Xƛ,@pai)p:u#PȃK H4 bD U` endstream endobj 15 0 obj <> endobj 133 0 obj <>stream xW T׶BNQS8lU anFd> -cU %8!]1hb|&|S{ۘa%_t{g}% F"KVxp3tGIуפ@?_-)Xdc0 cIL%1af̝;gL7NoFGE;҄Fi: դ:M|#\7}zrr򴠨i1a 'MuJЄ; MO q8 uzi/nKbb5N+bBBft̒إ wF[n댙g>g<ˬbV35fye&qe60Ke'żbwf6YD1=`^a̫3Ɍb)j<%9?h:]VVDOG`WsRkƺ_[ȆrFc6sl0Ͱ/"j|~Y$bt2NHޝJ?I^\Zު?fh68 'Zw8T򏈳l* ,x]_C%p2K#('2">9fG9QD%f?2ui_P%w.6W'-Iퟆ?2w KgԬBTⵜvQa4+hWbF+q'dHv'8'{(=fՁ;:ׄWGzȹa)? K*I3$5KݝͿz@\$DрPÐڭOȂ4j7It0pN sǗj EpPE$1S(E6J8WVw(+={NnVeVp »wu~UTJ%0RCU?CIxO E. =¨%,d6%QI6a((1z]xnF/j꠨V9kqRB`M!**Mޚssgʹz8&zN>2v9)hy=ԼW`<U54@*͐tr_.āFpb8/z84.RTqJpyUԟ7&D-G)l42x7(A%H`lg-0p9IS#*@Ӏe_~~VQ(5SE|J_Rn`q/%c}m~F米2۩8QH?9hE ،ԭ&CT Bi#ȚhJ:* >GqދP*n㭦5\8zߓ}<NF>qf׳}S 7M=Gqm7CTG m@-U5I(K{8Ljb S- ?EV C8賒"H[Ri Y00AD[ %/IrAI_1k5<>-O3M6Q7O.Nqv4?؈YmXrU$%rG>.sOȠj~%如9u`#8JƈpHx 6\NG{k(t2t\utbڲOuE;o KQfKm8(FUsB~>C'& +XœRewXsP`xx``KxWی4u-eg#uY$K5yǮ$ @rrve򛷬.B.2DU߆(IX^z}l6y[DVl^_NAo,1{t#ν'*u@n\ܸuV)n*DT4s-O"92A^8Z~p^vEI\[8J9'-Ȋ(8dV")MvQ3۫m{ zݾ 5 'B٧6;Q^U&0L"OC]1_,Iq KPՁQ%q^_[mͨrb i3Pqb%2ؑ!ĚwY J|Jǀ=I*9;>4 G讒N"Re ejawpxH.Y]% pDf AA:YD'*HxD^*Vb<VYwY ۩ȹȅ]=GQ%rȎO*C]WX},|C]k ;^=C-UM$(c'#Ɏ%3em6c&AAeGQi3p]gȂc[{?vYo9ܽ/ oq9Z.WK9b 3r$5LWxdhI}=tp=[cg9|7ѾjGs˴-ڲe&"=WU2H 5=Fd){0kJ3APGs0tzxst>ڪ,;ħchw\Wp'@|<ʫ 'Ma?4jrSc!ik;z!2̝MxOFOag Wh*}#:R $:ZH.* -{&9~R88ÛμyOb1\0סG|,-,$PR0PW-pbVYEE6.BQ@&:.; {|/ Oϵtpqx Dbf.H> endobj 134 0 obj <>stream xW TT?0shQoPnhef(P4P|FQ"f@Oax<!补2eiiZ}Zw},fۿ>f#HXOWX.Nόhڀ `gcS67a&Vٝ qr xEDTNުU  R$8"iB_9)^>$:$*.$K*"i xj"vƄD9ykC",R{yTtLl\jڄaվ#s[y<0f*2ϼlb2 ƋyYɬb2w毌7808ig3$ƅb0%+$F,aqG^qIK,Æ׹ʑA#F >궝^n?T }jLs t%ⶁż`4D>S@MF˂X 1f7Bhs h$H\esc?C CsXrKL#2_0 hk% %RMFxz 8BN˔|V+^JדP"sQSR4Y e1KKN*6I7>'E7u Hd<ț'oUmco;жRS ~-^pM_56aEr.@;_ 9˞'W-GNid ęd& Yt@ʌT8`P9sհŰ]gg/]WtګrcZ!W :aifqB1voټnvG ¼o$]AS,Y+K䏞rHyQ*kN#ӹ[$8lj3Wx~g 肣q'Ƒ98(Ͽ&b?boQ@x #¶m] 8q0<17B)? \y_}Hj/~J,wz\M4P74{w:3̢SL@*ڋK*OCZ;i*vAf?6g*2p,X\!mEFȨ6d.t1 ²{A[ojp[a8Js!E`:ocњ׋$w04oEQN.9 q%'kՒ*NqLE_v~NY1]>{MU""_k) eG7)C5 0m-y9߳7RGRw >qYzkC!PngD"E><"p6T@ zXo+نL 2[eg, Z `PE-k̬ (0VsT=' |~eN9 dg' TdRJXlcG}96 U9sr2!:AH_ "r5XLQPM|H* c_k '/%Ì nRNSW.g_bjIhhj4Wi+̅uP!A,Y@n'RW?jP(MPcJPz$h>-2?=?R@K G K*A3Q)SK][WtA{Yד#`㚫,fj=o4B3Kq!;@qe(%d*>UU>Z: xj*+v8'*wG|~;!r=✕YdYlXLGyeW/O@NaYu6z Cqƣ츷qiRӽo%{ԧnjvYezN^6٠5}?7.)W{0fj6z#YN^P8eJGj%|puHH)dGBCqK-ΦR,1Ʌm)kyGPom!LBN, irsiS,MYF$+۶W; ^l&4Q2Eb(pz`89Og8 s[o&[->m"?d0ݰ5CORe]B|S|k2[)a.n uIf_`iAG!uɇ{X6W)P p7Nog@ Yܾ<-?Z t-ezCnTR?LG%JxV+܅!G$'P'Wxx7‘5]=iԴB5 mi9l>dYR8O f]#sAJy~ D*oPS}w.+)& mZ7=_XF*y0/q*NԧhW* [*tqNN !\lV@A}Yi~PZAnehs:7"tUI"G)^?+D)E%r5آd`kQm7%vv s endstream endobj 11 0 obj <> endobj 135 0 obj <>stream xW TSgھ!{U@ν8.QV+X .,B !PHK@ "P@DKݨVCj.37P,3̹$|g c"nG!'ґ +3Z>NMEI)P dEIea!r88,hB5bYX`#@* ?"F/ ˥D,3!>LE#ʼnEIb}EEJcbGTX&!b$J*o70Svֈ8.tZx26Jl#9bJk7Gbp"6K“XFD6db 1xFn{ijNi˵a b ((?(9sA,3R'3ҭ$,6鰉~hCz|3 :YIswz28ퟮ2P7Q\[d4 !!iDSzL ~yH&> =pKoGکBmlQ$?o7!GJAT9$D*BWJdABGF^ g+ً$fm_ǎVVs4!Gԟ,Ėx%"$exV^lF)hBЏ}Rut6`(kh6;K0j$F)hcƓV֖{NauC(Snp+hh w6!Ch[({0]˔uXeoM,u*/@CV"gUɩbl*~~0 io,w-3Tsu]$_ar2 2>݄ 5BM&<NJԯ[of O?t*~6MW1#20A:l7P !>[|1D1*@$@Hb *Y}HAΪF2Xpc%"f&@)HVrejy@Ʌ|t.:v!2U D@$Þɣ*m$C*++E\b-QKV@k_:DT;@ -84O)R(|MA?kg8fͻ.p?GƷK@:fNnZ;G.y+H)I1.Lvg Wڧ>c琁w$oP.^$ZcU#ڣݺv>;$ޣ\VQ+[4z/ح䖘1`6s\v#;UϸdB:+F6d276[GjhЁzTixE@L e_Cj5d !ߛB'ӂaoL>ctx‚YfrBvMȺh?(34%+ ('|VGo۩Z׽o֝#t&L-jLPqG 4y94{Vm(|$FrW9@9!7 %5?zmh x v.I;SDF/ *`v#Z=]>5gQW &[=^u_7 hnWWGa@)eW&++CLX"'&=Y Q#E}!+4zM&x񣹟Y|WbڢBzՑ4Ǚ" ?/emjG{"WnFͺ3ؓ Enw/pSYgqjBĽJ, ?Ej>If[QfC~&s~`p Ԓq%%TJ^z}e%Ǽ}WՇyj,cƒ)-` V7"N!6ӷ$aĪ}_m^hU>9c># > ୤Oj!? LO2GdT=> ӕ&CQU*h^ƽ<ֽTG%vؙurNgfj o|̓P,I,H-( F%\VV9h{N@=GZsW{S*Fޣ?i󲋠 C+F+Ze!A^ZiK­B2?Kd%v&&@.1V錥'|:W-waon@NdW~^7f. #Fr3юl\ܑ IBlTTQRgrss ( d6[MeiECɘ'#!r2I\YPPSh6Q[dAMr#GXC)3SY kV*}zafIYnqIycadA1 }Lͬ!C{oxfX+ ^LֵGV4gW0@a|~6 e^U~PuD1>Rm6tlj)ŵ܉H:Fhr*Cj%5ԭkɋ ;_E=Wiw}l5dP -Dޘ>{K`Lq;f/\Wܮ;1|J]wO̊jcEc]zZ &IPn~aJzIĘ8?#,mJ2?b%A `lc14У68{KFA01H=& uU>%|\4Fdq ?D!w^Z*J33=pS 2v?lwȾ k̟ޅ:+q|F^z\51%9s}wmWj"u|3ҩEC ^x7O?0fe_j gs7?}`1چO[,q-2&_Tj͇TM>::i_Gom4 {jb#}o00Yg{ }RtC']CӮb!Z*xH3iO|| s@QŅ"PB&Nb&Z.5XO0Y[VZsZUv endstream endobj 9 0 obj <> endobj 136 0 obj <>stream x{PSw%{nש7>P-]؊AwbHImAH0$'@1"UD-PFV[]g][Vw.㏽`t휙;^!H%E"H 3}$7~ Ι"ʩ(9yBB9y1ZQPdea eF(j#zBYڠ%*tJmAVQ& xh5|R/Ӧ+9AL+ rERN'xb1H D2X@,#+D,'o _}@^%+$V ,!jSJBy^ɇ^s`WxkﱶR"׈ xM~JL4-- -9d<nj\pi?(KtM}jf72$A n;םN[|snfᎬ&̷T% RL `=]L1}> ap%{$%XIuQ)a1 pD|jCw{5ljv:N 3h4a[<؅vwI'B!W̖[JK-Y)@c"!!ю2ӢfcCqs>d!orM@lϦv[u^SV6V5{/CE]$ׯp4z},kSe*q"nqYE6z둠 ad<8:[{+︓* 篱IJ6y.n?ϏÔ͂U@-&rrtS)#p B?I1.w/䉏v_ŪP=ᘼݣiuj'ž{ZRs`ޝ=6[9wӳc@JRu$*fPwCYGaE//ac"Vg*gz Lx\j# (,0yPk_GLTSؕUg_/ ?CVa6lE.7* 5<ЅU7vuJPRQ#Qp|{[F)5~ 293:`o z|{pl[UꍐiAFƉf8Oxg-9RY//G"ai67 –O "g8[$\g)%6$V]02jbC ߆s"d;S;\c;NY$:fStlGHffmnT) v:]@#g Op +$ֻ N!m{ItFM|ׯEі9ƕ3hu{[Ymic0؟ #m-i?N5j& S⿗k endstream endobj 37 0 obj <> endobj 137 0 obj <>stream xcd`ab`dddw441U~H3a!c?nn?ą ~.Ș__PYQ`hii`d``ZXX('gT*hdX뗗%i(gd(((%*@ܦs JKR|SR+"Yqa'Xȸsϙ?~HtE/vO^ܽ.zZŲn0330#^lԼnߢES{'N_쒵5TyVHn..d9N-*̎[䦧O9w%S;:[:܋9RW]8q| 8O6{B߉Wq]b1ùd"t endstream endobj 30 0 obj <> endobj 138 0 obj <>stream xX{|SeN tR#fpϩ`A@QE"((,ii4IiM6mJiR(`KV@Q\QA]y_:ힴx?{}}C͸FgmزcӊGc'̙`f&$2 qF޻WCDQ4^^Pέⱋ)ySVYziʣ<&e]YIْ/.(S/R^.cRR*aP@w &=V2/9FCQߖ]4؝0jWrW-9:.Joj R[6mp0 z%Hwi#hMܒ{XT?ӏ.bsXV=\u91g{4`ΗJs\ v\k'bkAt]/ BLy1? A@ZЗ9Da_sfWsE\1/k:,U^_ ͻzC}{uߕA2A%JO.n9!OXj1-trx"{ov)]xN%CG7sO_i$tB+6le wl!FB*K H'Pjj -JR@4|lDr46=FNRVfG?i9Tx޼?Zl`kRq ~O3Yk5YT^a2Amjd,Q9l?`Y5\$AHI4{y1N{G[Pr [995z8i};5~`7:X/^dvZ=߅ʄ$=J5CL!`ApuDs!͹q@Sw pz̨'{oJjTKPU F@z__d@-`sZ;G&oD9-Y덼x-Q ys+3Js_,S05>5:V95Bδ-B"zfb~;?ƙ=]_\G/UFpGwt\跁[Yh 9 ']Ä{9zwD}t4U}L`JCcVFOUɍ #X 'xkJ^F<&a+so4FKЃq/` JٸfW|{َ[3z=݇NɓbUdwP(0 ΄odY@Y?ndU%׼>_nR%Gm߫><A~wp`6~P*b$.ISksxv ߵM>wERF _Qođ #A771$c _Gr ^L+*P:Eayu˄56T[o!.ORvT DB>A{QETk=n]5")ܨ鈪̽l&tuBЂ F=ֆ}K5\Fԯ@vRV=2e{koi *}ʆ@gnSby7[ fnJ(@H%KKXs|2W#`ز"PȬF,f`*g EGn2C׹'>e V35r6+o_T sVuU]?_\$nJr|G'.e/ gTU6R ﭯ. 3ܬ*ݺܝC>*5pw3v^~邖elr}rt?'-BQ'd%raI tܓw%uxjc|f.p开hH^~=co] K{^Y^JAMiˆcP߅==ݢ)M6n FO?&cZ[ jugc/mHŔ02~W^ΛhPup;;=oEՀVy4QN9~ɱƭh_Oǡ>>?F!]Us 5fi^ɢ׷e_.e _͠ wz桌=dI@2[V,qlp 49rI@W@ KnWf l'QWaKn"+SڧSh쉗+^r,8J}JVӷ@-غ|>.^lFs ϑ===,Aٮ"0PO_jo@Z~F$J?CYUSsj Ap2#AH4ZQ|/.G-Dt I%e%}hG$^XʣDz&Ȯhj945GH{y 'JUʵRM_uD? aOHJj U%@l*xZ0}Ce[DPb=-}9ި-sZ2u Yh|%vj:eVcɀ[u2cʕ om( w+Wnó99iiT误w$B4mq*ZIr4kw}gu47풺"{P@4S񇾾DQ(txb)*H% IH'ٯ 2#u.7( Uoyh7(ѯL'uاpZrW9]]C#~ETd0kp&j]Zjw?]U$JrDE} [2Sی+L2A+ %Fp,tdFԄc*x{h\5^B޹L|Ğ"z4⠾T Lg٭z wqQ&S6+CBr=8@1AwxZd5JQ肻 :%QMhMT'Ou:ZD `oP~oGiO'4^*|ם=*V$ޔjo)+\ue0RЁu4lC0 =L-km :xtz).\Hy/{69G,C'ei*7o >ޜ ɯ/(*XZeݔU{,~?L+KwI/asK 6PEmC(q͊ι83cu qvȑHK%d endstream endobj 28 0 obj <> endobj 139 0 obj <>stream xEPkAGZ!ikv@jJA"ŠAtL`MTKhBtt$5Г^x!^:9k03}5 ZRع^1g9;b^k[i&>\GHT?O XѺG_cb"e722KΣHGZQ{p33\mjK endstream endobj 21 0 obj <> endobj 140 0 obj <>stream xE]HSal;ԒFuιҐI-a۹nvٙg+WAn9#:3͜E]` YQ!E]X}8-z{&S^uI *˭U6 l] 8wszy[U`,L^QQA[Ĭbv0F`ef!0;8L 8W-[&lw9jmv#+SƺX=Ĕpb4~z8-h?+9j_߄NDdC .oFELrIkS p endstream endobj 19 0 obj <> endobj 141 0 obj <>stream xy XSSSA V[yy2#!"!J<! 8P:Vjm7߿zo{$眽ZZ(n@ ]j8nB/{-HBikc>7Z.%B"S憆Flr5iiSG9M7n`^!N<}=ȋ 'P>QNæGE}2vltt1~ 5iOO6o!QN=},c;748L,'"ECB  ra"mK=b>طc7:}a{~:lsqr?E} pe??߸dIoIwl3y]G X/-?Xʦ!DCz5j&6 UuC= *&W@lV `FE {်Ue%v,Y= |.lu[,`m[{OuCOX\N`yP氶ڻk/~ ZJrykVq8^"@A.4SPcbI~%-_ilOj<~:3>O>B Ehket(Ńh F&%3g}D\:iĮc:S&TKGhQgٮ8ZQm(gE$/pĈJ#DeA#(Ud"4Wc c"m穠J%v{uս~kSXbl=6m 4C4+9FV5JYorJut23 Rc~]]PN|m-JB*Dl30W`1<еҊtICh,@ Rߣ xd&"4.Ř#O)7F|bQ_Gh-kP܎zSN|) ہIX v 5/C)+ZЖد.'p|#;%udR-*8ٿ1>HiRr@ LdI~] 8b{BS zv>\CI~RSE-S`}~Y@LdIzOzWUVL?PP@'|N۰ .a26ԟx/^͓hr~RgɊ*+xDH?$2}al!SA9,) K !঍ը6ĒrP%9P"_ ='k׫"!BjbUnR4 Ԕmb*8*Zwlˉ:+?j25ӺGc1Ŀφ!C=ss" $1v^4Ybz؛1TW"yp6Š$cAI?z8إԆ@[oHnIyNC^K.*h}CH|epuj,<@2FAjDgH9yX_d[(EYFH:{@iY莨9]os {-~Hwi4sAtH㖪5g|0Xt2#ecP XTMn-fWEoQ 2I{viwQh[^g,ck+Qj(cĐ> ^]PjtE%J4:]Ώ|␓QgSYe ] m/ BUVP0ILڊr4`OX lP5e.-)XT'2ٚ'Cp \_Gm rwhRT*xkgTSpIԥҪU_ ;|#m#[x$i %h$8 Q>;ߣp.O+C'-Mm \1_|OWE\"6 ""}eoS0==Wj*h]Κ}RmjRUX}6ifo=+Ъw+T״G_Es6'M",v<%5|Cԁ Q^H7 PQڢ, ך"*$3JIWeN-S +H.-˪(Iv{zp:)0c,c&IJ FAAP)9.p x1sFv/7$^_íY ɼm& m2_`?ZpȁMt/E L^3opPҖ*n߲#s^:R#n'̗?UFQi|.W[ z` pA'xyiEwP' h]LKoWtD4-G1% [wA,%wL%k2!/I)j|ll't=~uѽ;-zeď|~9~#'Е:Qm%G ]iZ#f"CaapS0R1xU9͹$! ށ}MˊINjGO_GnF7F m8T:9_\28!ԉ>>2z$Oq8b#~\3Ʒ<6 ;tLc;(K KEh$X (`b+$~yZt/} -Lx@.3;@y@Q@!lVq[ _mz2ja'4Ulc@cL"\WR[N4bz/HjmZ&]Nf=ܪ-7ke,&ZL+$NLޑa;>_:Ɍify!߱b,FdMhl+zBi1/)Hnz{yКA_fKOc 5J6ܚЯb*9'ItU&qX;OBao?B1ߢs!0K:gɼL#_|_Km/Bfi|3]3Q#f4Ypcc.^ΟD1]EG-~ (I|j)55'=lXxxIX07 FF ԹKIFR2;ߢd9`]kI!SYRm\ J@ٍިOg,N}B,^ݒTmFu ۞½-&3]E'^*G~c?v0JFZK UFheNz]1lᒭfǸ9ӑEd`XұqcA_9x2۸P< X.CV#[g{Wہ+r%b%Ow}5OtEfoK0ꖏpLXzTuolcG{2^6 (, jPʢ!&N,"DCY!+S^Do4{̃ad%yJpnz^Hcx5GJpwd+zvQzS%x&*x痫[g=cE| t6dXaExu8?3;jm5u]%r9ٕ76b,hb_ۊo)@Qh = 0``4 gbqIo\ɩ.E!6;D ؑ>jz_d!瓂 QULg@pfp+_dWjW/8ĝ: hMlmgrt% -UU;TVr_m: ýLt$x5=lWՠ9oOHݱpyҚK@>coE6S^O|I_'/ ݞx|G3gbjMzC!WHL4rL:>Y2]i2BCJT5lgĝ2YpDoU򥿤!dLc>$20}H>|˭ FMp5a4dֿmfN4n+yu޸H3S3s|s+!Rd$HW:-5~w=dB1נ,196m:Z/O#ŇʌT5i蔍ы 6gЩH#^10KL򊛎ނv0nΎ-zF9#7|3UG%"XYg HO<d#?! oLW;@uTyLy?Z򠟸9[l%Mǻ+[[ \U&w9Ǹ/Y.z{?'r΅>zzR>%/mP\{,3qxM!/y3_]7Hȇ3c3X!v*P1IԳ8lA~Vu( c4`<%!)ہ?;L1ݱv *!1ڇE2:nީ%Z/]>n*M![v8>stream 2014-09-26T17:54:10+02:00 2014-09-26T17:54:10+02:00 dvips(k) 5.98 Copyright 2009 Radical Eye Software faces.dvi endstream endobj 2 0 obj <>endobj xref 0 154 0000000000 65535 f 0000231148 00000 n 0000277918 00000 n 0000230942 00000 n 0000227516 00000 n 0000000015 00000 n 0000003739 00000 n 0000231214 00000 n 0000235666 00000 n 0000258925 00000 n 0000235153 00000 n 0000254946 00000 n 0000234626 00000 n 0000250691 00000 n 0000233957 00000 n 0000246382 00000 n 0000233372 00000 n 0000238542 00000 n 0000237895 00000 n 0000268776 00000 n 0000237695 00000 n 0000267634 00000 n 0000231255 00000 n 0000231285 00000 n 0000227676 00000 n 0000003759 00000 n 0000007237 00000 n 0000237061 00000 n 0000266709 00000 n 0000236297 00000 n 0000261975 00000 n 0000231381 00000 n 0000231411 00000 n 0000227838 00000 n 0000007258 00000 n 0000012899 00000 n 0000236140 00000 n 0000261234 00000 n 0000231476 00000 n 0000231506 00000 n 0000228000 00000 n 0000012920 00000 n 0000017043 00000 n 0000231582 00000 n 0000231612 00000 n 0000228162 00000 n 0000017064 00000 n 0000020608 00000 n 0000231677 00000 n 0000231707 00000 n 0000228324 00000 n 0000020629 00000 n 0000023704 00000 n 0000231772 00000 n 0000231802 00000 n 0000228486 00000 n 0000023725 00000 n 0000028275 00000 n 0000231867 00000 n 0000231897 00000 n 0000228648 00000 n 0000028296 00000 n 0000032587 00000 n 0000231962 00000 n 0000231992 00000 n 0000228810 00000 n 0000032608 00000 n 0000036040 00000 n 0000232057 00000 n 0000232087 00000 n 0000228972 00000 n 0000036061 00000 n 0000037578 00000 n 0000232163 00000 n 0000232193 00000 n 0000229134 00000 n 0000037599 00000 n 0000082537 00000 n 0000237554 00000 n 0000232258 00000 n 0000232288 00000 n 0000229296 00000 n 0000082559 00000 n 0000124013 00000 n 0000234480 00000 n 0000232364 00000 n 0000232394 00000 n 0000229458 00000 n 0000124035 00000 n 0000205475 00000 n 0000232470 00000 n 0000232500 00000 n 0000229620 00000 n 0000205497 00000 n 0000208363 00000 n 0000232598 00000 n 0000232628 00000 n 0000229782 00000 n 0000208384 00000 n 0000211211 00000 n 0000232671 00000 n 0000232702 00000 n 0000229946 00000 n 0000211232 00000 n 0000214154 00000 n 0000232746 00000 n 0000232777 00000 n 0000230112 00000 n 0000214176 00000 n 0000218324 00000 n 0000232854 00000 n 0000232885 00000 n 0000230278 00000 n 0000218346 00000 n 0000221491 00000 n 0000232984 00000 n 0000233015 00000 n 0000230444 00000 n 0000221513 00000 n 0000224244 00000 n 0000233081 00000 n 0000233112 00000 n 0000230610 00000 n 0000224266 00000 n 0000226817 00000 n 0000233178 00000 n 0000233209 00000 n 0000230776 00000 n 0000226839 00000 n 0000227495 00000 n 0000233275 00000 n 0000233306 00000 n 0000239170 00000 n 0000246713 00000 n 0000251028 00000 n 0000255280 00000 n 0000259170 00000 n 0000261462 00000 n 0000262286 00000 n 0000266976 00000 n 0000267896 00000 n 0000269266 00000 n 0000233864 00000 n 0000234395 00000 n 0000234567 00000 n 0000235068 00000 n 0000235581 00000 n 0000236055 00000 n 0000236733 00000 n 0000236821 00000 n 0000237409 00000 n 0000237636 00000 n 0000238409 00000 n 0000276464 00000 n trailer << /Size 154 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 278121 %%EOF aplpack/inst/doc/sliderfns.pdf0000644000176200001440000231434713516603747016125 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 1411 /Filter /FlateDecode >> stream xYKs6WHΔ0&{k::F39tzmִ<e.v!CU{Zz @.voGoNNɤJZƙRhɜBk./S8uE+crm l fp'8feɩl2)Ech#wY|lqpQjυyO(-j?>yp. .4u1 xupH8,˝?njO RvODS匱WkC?^9I qn"(XbQyU$2࿞ N78BQ |V*/c~Z1wr,9#2ELS6&+3Ay4߭XVf H9^:PE'l5hX~2OQ| E̩pMvFs;kI|pB6VhqVʿ2/}[ܰ۸0 -:Pf0CP  aժD`v)+UJ蝏>{]AT4 ],ǿɤA4Lb)%iֶY,3G_q;oYx``@-96 }$q] oa ~n:ȕ6]g|bT=nD_8Xs@3z1s-}=nw D5 e$o~W fҔ~/Hb>#4}rY=`D&N6˜ud<bmo4v$_CQE{O)?|]$ih~HI5ymP>z ,W~3cӔ}f1?t/[!_-c~п΁i fp}KōSօbC)]Jі}m4mE|H(Eߗswv4 2͘^HHʛPAH˜$L)/FΖ#WiWC]LvB‡vqR9Le-j'l] N2|(T[ZXO%ka;.. ibaŨk90ć%0 K0ѦC&So hRK; ><1P0] mlKi0%*("6{R 6KJ́D.Fsv K dCux Lo}0T=E,jz> stream xIo@a<}9 !DBb9͢8P/{3tRۉi)eftrt|fG8hr1bHACw$9x^0Eg*/tϳ9Y6E8; Mě n.^Ox>\30yq|vf(Th_ǁiY|Hkp۴W t.R62tv6*D HJKMr+( F1^AviK\UXW%,*ZXqh-=zMY,rt Zb ΩA1Yfnf8P>FDO"8"bQ=O<-[TqjMsnjTofS߀ξ^cXL?/xg4 LU[# w Z \%1٢Hny-%\nB/[]~*,pcڟZo>8´7P h[(P A>@P0Ac{ !յwNS#@^`J (u'|@s E= 3K> W 67]xG䝵cg*rzg=!DϷZ<Zoɖ;lt{% p>pg~$1w_RdBֲ-^hT( $4(:Pͽg=N:^F(|QRDq7P6." 4$فI3Mń@l#j4m-J(m[B)Sm (%Sr)C]iu۸R|1|Y®ZƤqX[%H{"(h:v)ۙAvB4TRNVQ09C/4=E> stream xڝWKF W(Y4-Р)S 򮱲Zr6/?>:9yI'[m0ϊUpūnwإf`OK[ X_O똫X'hwgWW'WJ`_s=L/?? 928\F\\خ& h'wqg]ԲӀ ^)ԃu{ !8CG;YK^4*@ir0 ![>`&M۠cFN# MsɗƷ!^J¼k,-]5[`,u ;o!Qnݑ]ww #7S`29C6``+DEvfMzPN✕SݚrP\F%[Dhp}͑2BA@4mfhv$-6xXOFf8ZL}/R cjf?K_䋔ӹ<zY.Ix{ٱ?8tGpeQ|X W6L`{y4W:g.G ̮yc*1ykD>>Gi$-;y oG,-3@9M+HeaB9 :%Na&he~Yva[5_%=x~mf"\?z94Y܏R&xFN}+”ghgIR桋\dH H'N_SqoUMBs_;0ksO"O[]e}8?Ȣ&F1zM&c͒ݢ'ɧH˗96.%tkrђTԯ2~5Pvlt^qX℣H$Qn^pmF"1x0AwQKW#,<}a endstream endobj 21 0 obj << /Length 879 /Filter /FlateDecode >> stream xڵVKo@WX5‹g]'$8 8C[4I8 qҖٝM6u*kc73;ۏ YnTԿ daDQt!T(-bS*NB\l5/1oozbg L TـGN| ڨbWOJk -UʴDIrџʅCC09!K9<뱌*Ye?%M' :Y"V'Zs|ܺcfMk%RuYP,p$[;]I2=ymE~EEa9ƪ? QLN\T ,,:$2 (= c0栮96x^л)NQldwv korM1=E+&-4D()ސRG@RʦƱ$ܟONRVδ ޱ8HA .l-|oD0^ ܖ-pGvpA\=ab8}*kl$X-UJr1",Z2񅳾rKSdۆ˝tʣQR)H^Εi4m5ˮ|"Y^MجXc9my_Y /◶UEw׾OL pC*^> stream xێD}"#ճǗB-< $E4N6[!s{x$f<̹ϹM>)TdhcT43Jg6ST0Q#;{TsxjA:[/4iydRm9b4+!{GVrEQ XniHJ5o'$ZVtA5xțr$P1-=)s&I'ha`kbmlc1#fG4JuzH$4)-CǭPq̣k(ɥZ8adYlQ/LO75.VM4O 2ĹFͧa$#/zWYY hW-eL>$݊Q|^8hˌ]r> stream JFIFHHC  !"$"$Cg'"Q   !1SU"A3Qau#26Tbqr$4VB%8Cst; !1ARSq3Qa2Br"#C ?Mt$O;* R·m (BD"Çq 8ie)šĥ{'C'yZeN L@%}g̋M&B/lN/OO}o1{4tFKlzуZqGնOQ}j֣ORSRBߦPimޑ5\BpъuhS=n ({<+ﭖN'rHW[xVBk[S8%$¶$]IZU'k^^a`lQAB VC,\-qBm( ն FҎݦ576=7,*L&}^chCtBF@q*_xWQEN]E֯}kn1۽"kB63]a-4b 8I ^ҝF+#_MjΩ)Z6O~کS{/xϺVv~ ‹&. .VBҧ;[CRAN߼ K򟶡bxzv:xzv:c]BkMDWr3rV2qsnȦxDKMkM68͝7ixdqoBe4Qxl]7Vņ C=ņ C=>+NHאK317*}ɳ{݅~˓hu[\Gh;gh :t䙥ՂLgh"o~/gmZh91!ڞ!ڞ0u5g4]U]/wMRŤka PFJF K_,MLt;eDSm,'m@aVcņ C=ņ C=!0@jaܫC{rDK%"2 IS1ꑢvRm|^n=\f9>7$ltMՠaO|taO|ux s9Mʱ_om-%&31*/":A!ZDu<Đ~ξ_MT hޛ{:eY/QO/QO`S$| 3q7*truMZPDRP%@Mw5*2Ձսkl6qJ*ej Ċ,0^,0^pԉhih="F` 7*'A)LYN!5']5F:uH_rlawmZ (N$Y/QO/QP8W}Y7.'lp8u&Ny˳̩0K%rR@*_G9:Z$/6\d;E1{7i{;jAO5Y/QO/QUA>q]4N$PrWɗ۾ˋ.-$hd6I:+W? ,0^,0^7J1iz5$[r&5yj?jPu$r[!9~>Vņ C=ņ C=`WzE*?>E}Txzv:xzv:_u^d_1mʦ=etXs ?!v;`u2]вUaO|taO|uDl9-AiFi#ܫU72a1hmR$RkmpOծaO|taO|uL<++ b9 # ­G/",XZqP *:kˍ%̜ܹKd!JPHpjBv^igMIy$լr9],|{Ǡ!4,%ZJז֏}IңV`a0S)ܛì*I!C'ARJv$]f]N;%\Mje dmۧ;o[J#dZ?)KGBF5<7;|b\~TybYZRբZѭt@X:Wt؋_ ø.ew8lHEKAZm{2 8}i7jLęl[aie%(!+,8BR+JMZl0zV;"W{aOMA )m;BNJS=pr3cx+T7kɭhsCqFIR.F.JR(JRv_ktAU)ݗZJ1ʘ_3a~[]Yng8ᴥQJ@ԓ\+?1'mXlOZg;6$ /DlK,-*)jg嗱#YWK}"]J#+RJo'}x{; eW)OBq( 7i{s+krؑrߙLn8YQHaRjNj{; a گ8k}N6N`^zvȏuFp] n]lE흑x=`;gdGDQX:vD{NE흑G$vm %#RI DX)JQ)JQs_ؽ \Y^i5 p8!Ԅ+oŪ[7 =$tzwpM}%oWZ\Bp-F{νNEɝL*a[rjddmV[siH{N8mh\ $'ٔp'd0Z&\oǘnb@" [1jem]I$iDZ%ׂb/:=S4v.-[R-AAX,mh4n\,m"ğnAPP`"; ;=~EfSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fSM{GҔ!ܙ7o.O)ǽ#i1t|)L ]ɓvȺl{>fS3AAxu<)C72n6\`e,.⊖T${|xۋ=7JS8oWrdݾl> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( +vLɨ>çQʱ2n%G<\_~#>R_cL__*WX>c.6U8'#Q\2{ ^i<>4ч T[S<.on$RxY*6@9'Ey*i &=I(baĨF$>Zd=uI|${;]{0hQ@Q@Q@Q@Q@Q@Q@TrO / K,h>ȕV8=J+?Lt}oloydIvg8q(((((((W?&L7f:gw^qYUq}"{Io`0Wr@䑜ci~X|?yIu~o[R:/vIď+VS'r+iׇ֭ȑ{TcPAuNXv#Aeom!AW((((((((x^oiALnfdX`:혐s tE>c{AIyEk ı*f`P?Vc4yV^V6AqxXvo 6WћzIҤM ulrWq@ .qRHXu"Y-kHl3*I4w]oggY| HƒNFG׋Mu{m}e5E#؏Y xۮ;WE^CO~>%yV_i4ϖ3Wc +Wvc9GF*I)5[EQ5{-wLQӥimdgUf9V(A r;U=QEQEQEQEQEQEQEQEQEQEQEQEQEBVmiy{ ڤ 52TFU*: +/\!Эn纸[kkkHI, Uf,@aU擤.nf7Uck:1`Yl|5Z=<3V60ۢI&KmNH穭 ?#M].mtHZ;ުXOz/(((((((((((((+?X4z-u+:8I*" =T (L𾓤j26%[`Vb qCEu]s!+']P/_$O_?W pu|J"Ҹk)5?G^VY^V^o$|zGGyD?J殶/$A_W5u GEQZQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s!+']WA\9? WTKW\wHlx>+Ofd3ו=id3ו=iׇ[/7_^|5"ҹK]m~GQGx~AEVEPEPEPEPEPEPEPEPEPEPEPEP\ߍ4 ivp[-+lY \9 d$8ʰ܋#5W/"=-&.' -)&nx)d3Qꢀ)k—:_Նhd-+>I>HU[xO²gn[+`3F%r(|cܤz0;Z!+']P/_$O_?W pu|J"Ҹk)5?G^VY^V^o$|zGGyD?J殶/$A_W5u GEQZQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r~?izmY+E?,y挀bHPt[Oa6"i2Q|SR2|A#%zHh`x{F,1cDٺSda3p1?ᨠ{G>'k2,`Yvɘ #\k[?xf)oiYw,ͥ;cw(6υg?6gI{)]IuBȧnXr9? WTKW\wHlx>+Ofd3ו=id3ו=iׇ[/7_^|5"ҹK]m~GQGx~AEVEPEPEPEPEPEPEPEPEPEPEPEP'I𶝭hrn>eMo4}`ycJ& cMsC]Gnmm$ $R(## Ycp u"ˤk4 o.q%ȑ?~\5a|W?g+ozӬ?g+oz|WwRZh"1I.fXuUQcP H`_҉*VJF;|[竇̱].w̕kS^$ַZ4]#A'Wpw!bթXzZ\[kv1Hۺp-qjI 02XXʠk"lA<7V\[J6 dGk ((((((((((((+{i:7%$kEo4q2Q3pspH¹?bt6S{=N >%XHHfL0 0#me6H$ _ؚ (}ZW]BvqWAxO²ajX5?O^ͬA#4s]B&&Iv|͒-w 'ןaccc,bN: WFq[5>?HK_ȫmZumZu/%ۯ(zWl?*>_҉*VJ??a5\FVscQMtX& f)%#K<𑉡rŗUD}iEG[qo,sA*H2AG9((((((((((((_cӼ_hE} wɷwy&]EcBxXN`$VeJ6Nqހ9 O_HٿgongjV,̺2j śK6_ǃO5'/&=-59!:F F>a?2%ȑ?~\5a|W?g+ozӬ?g+ozӯ_>nĽ##3B|uQ>/҈п/~Dkm:bc?ӮyYw5u{϶[첷D/6qAVv!a^SXJ_-hӿ?½sO<5`_ 8nXoG噬1ܱkߍ)qV)9mb,s ,ҨWl䵺̅H T*X`A"{넕RMڌ;9 . c [=Sb((((((((((Zj]iBDK؞ +m<;96 VP5W' N[5Λ770ꓴ6(<\tXd0, h5x%ȑ?~\5a|W?g+ozӬ?g+ozӯ_>nĽ##3B|uQ>/҈п/~Dkm:bc?Ӭ?g+ozӬ?g+ozʟ/OgN=:QpcnQWYcI(ZRR9:rkUsZѥ'JN:]br^Z:\'SBj++\F A޽Ra9HĐ\D@ : A2A+C2@%\Gdy{Vωk׹fAbMߟD}&SSZmwn36,qjQ|0@c' 2J$wԯ |Oi&i4Hl IYѭ6.ִeCƣO%^O2ګlkާR j[MKBԕ}M৞T3NdQ6tw(ZZw<=jvuڮY%O1 \΀gjڵoatΒ+ͼek2{ j=> C I$JB=+O I֩;ExωkE߉,ҥԮk]*䆔AH=8|6c_C q\Vc;Ǟ5;}:W,ͧD.F@3X]%vJJw;8^.ES(((GǞ;:V̫*çJB3JRQW2`'c >'RYn4R]u$\ Fq(Tp* !Əh!(uXdӡnFОc.v +Z[/V68s"(*Qp l|C1Omc:8#4IX]vS&ѵzTk .aCU3p%$$v~y\Ǫ]qT7 Yg@ijÞ@Lj.u+]'~ox/ J2#Ue$*7Qy8 V^xEbbkFMIW# gF}Ex[x;tϲ3ǻtjw8u^>*mR}FTK.MPwE*ʣgZS&#/UwW[7Y63Gz筅]R7ˈa :Nnjĝe/d$L<}ImilgɅۍgsJnomwd~!O~c30KY8$ νz]{<t#bO6 _u7rA0{nq}5a $h/ h~A-*OΖyo;q?|/?győ>H,M&rG:WV٫q--ӛZU7g?qy΃&5 k5K 9_LqF#90q| Ufoɍ,>N?}=9n_Ij>c'lg{}&@[zOB, pJSZ6Zտo_`Iϝ@ ܓێk-|G<:3_p5UF7V8dv{K^Gvt"P?$ryvA1t>'ƕɯ@_Lv(~IBd T75^K:-w6ݳnϞ:;gI|Uh:]4Vh*3* &TҤeODr4Y>c;q~H?"ђ x̖$K\uUkM'[nqeݏ?X{={ 䪧{N_у\ొH=6njrЏ.½8' 9ԭ4 ɬ6XK iaOxޜnvVrIFBHppAH=dmFo>ktQ˴1?9b\sI k6KJ#FllT?8 G< Flͩp2_%_ۏHy9?3g9xŶv[Og#$ *ps+~&YѯFX/m䷑ ԩ#7$gӄgY38Tizڵ'_}nȈ)wcwq~{Eqz,s ؓ%1V d;o^F-F/p.% ˀ(s?ANM8"TңKF6ɤ.!hn?Nミz}O k{8QW? *tk._і y-hyCu*H5RF%jqKXTRJ*>/(+m~uޟ{۬PF YAREnQ@ޛT!յK60Pv,YWp `e?lh|'cٝy_6go͊ (l7Cog<ݿ-n rNHY2BZQY(߷I"/y6y{xݻg!}>gvsآ ( ]c-Z[Ŵ\}D*AE93ghdlQ@OxcTִ˩z64K]:Hnc+qI2I2CY`S*xrƴp-6Byo0,nq_61)f?78-5PEPY~!H&}vX Ɠ4UU A!\֥rXxzkZm\IiɜD3ĞÞoGxw욐KKi$:Dr8h:`LFUvWpȽzE!o4kB(((((((( endstream endobj 38 0 obj << /Length 1398 /Filter /FlateDecode >> stream xڵXKo6W9@%Bˢ] E/Ak+v E{g8CEnHșouR*]Q;_UvY^j1SqF B6Zv#vµ#E#gpuL(2Nd9t\[z|b0!uwVj.+mu>7N0lQv)v*񒙅lsu#w HA[j6f kr(ŊP;`1uyƗhlPEtN,jv`3o8Vݒ?G4tzVYsi YQnk?IQ7:8rS'2T7R~lBbZ ٮ hB< dA%* *$.bQ9L kR1jR͎R9$@z_۰ܩU-I݆oLJ_`[4 h : i)5@ځ@{v)TH\_הBiM pIU ;alXDm |V nJZbomFj;PQysa&Ңo% oMD 'SCUIjEj!%ILPTvMꄗ1TN=z酅!{QQ+ɬ}ijϔځ\a`NLWX/o6'<+KtFƍ#{$V Hج?z,龇gκ/̖ѧ'(6Y\V kFXPU9Vc\2V܎%fu;0{l2tC2Ѿm(S"1˭;̿<d|"VN/*TӌψlޤpOM>⌉Uy-x{ glC?Iִyơح >A(k;@S{U> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( +>qjM|v+2)G"t j.(ScG88$l3&pbWbԵfZ4سqHm-ce>]A,Wn4O>"4k.%W&I,pdbJ*2L5º&ikm#M6yTQZ|)8=ihR=.r(fye*9UQ^Wƻ+Ťqͦ˩2;G@>co1_\|UL>/w=\%4$qơxeNP'(3>UүKn.S@ jH>`s4JgF-E;@u #8>.QEQEQEQEQEQEQEQEq*ab 6Jn$[(+4sP^ (/oy6].>Xb(٣.;CQl5YP̋P]>Hd d8NA@e'W'>;6wIp*mVPTJ0\ʁҤƶ4u &P,sYZM+;*$rI \=K [ƩJp%J[8Ѧᵛv;_@QC`$g{(Ӿ-Qէ|#]M[IT@0 ?x/[-m@[ s`ެCL}-İi𷛩5˨Ma)om v@EX4ox[me&XUM Ӆӻ R‹rԾ٬=3ZN$#y UCxZz^uhfK{H+n0y7WGBo< ;dgRI27*sV$: |_̯q%J KF9:s@_  huTԼc$nf3ӧ52_/d J9A\Ѿ(yu k,ll& Xt 11,6m,\MSoZ$pI41hm{gXE(ܥ@#=} 4/m,5Dm tVNK[URk'ټBSc1‘qY[x&Լ߲[#4_Зx9 GM>5RQE<Z gJeUO,IzSfO xHZodɹՓyTSc;$NXv#Aeom!A^wŋSX7o5,y+,~pߌ5?Ǣy_/w|[u2:z(^wndɠ88 ¹~2ir)"n}nen((3}%C6~$S3j7[1_&| 8#еɦ^yWFNڛyśQU(ܼ9+^"F1d /Ϸpl0NQE|57χ-.#&nm76$x@\^\9? WTUyc=}FJ)$qO409PpD_< uuu{ZZG}4\[#G xT<g(+^]˦.qN5ԓ@c 2)^4ŧ<sbnMn=BcƲ!ےquBkYCao}if,K6+ + ~oׂ;<'Maq}ix\4K]6+%~_א; (/ơbX"D$0ϡx4t::/MG1w^D1]YCo3H#OʊHh?I|/} SfmےmPEyޗM$fvnӁ]'%z>ׂ_jV6_e7}G~Ǜ1\Q@e-4` 4FD*q1;F4ۆk9#+#8J(OZփ<,FPaJ6Rr4(]Sz.j{˹JB(ZJ(' *E-tI熿k (+<'aY? C! VO"(((*9_kHc`*ҁ~}ks.C$,LGW${ҹ_!$&F1-*u  zdL̀0 qϭcxsJTy kU=%>\ ~ExEPEPEPEPEPEPEPEPEP?O'UZ+' *E-tV4y+h cz`]$;[̲ |ѯ iwvobKE[h9wlrP_t3VkIoG^_2?.1fb#3 blx:ucq}/m BthƯ{&*((((((((O<5`_W?O'UZ((?d++<'aY?: ( ( ( ]Fkd]2x*^["=@+{<$hZQz_5%w؍"F (՘ƺ)&ݑ5Q@(((((((O<5`_W?O'UZ(>{nVh푁;0X\9? WU[f[6 /:X[Nl&mv_9? WTQEQEQExeZ>HuX؃ =z{萿1ܨn | O rI66vX8~O>oVʫ`-~m+ϥVwtA%Qòt?B2ҘZ_ԒmV#72ф`<5(V*7VdM~w<源붑Acyys%U! U %2Jh^$ӥ;n[YI>I$vyvLF0yςZm$ڴD`#`ܟ~dy2>5CϦek8Oʏ\4^]k>"KHidv<\7ːJ ߉OuOeRB\GFwhO kgdE1 ا;\*UGs)|c IQ(\TQEt@QEQEQEQEQEQEQEI熿k $_ K]kVws\-aFd*b y/ETO]ś͆!PC'>dYkxV,e+fGRQGNN}CW)Swu+ݵkkmq[ͧ7Y'L e܊OJ6َw|K<[Y$WD1W34T H'ӬKm3Bm۴ qJ+ţ:4;]vjBTTtG_&E$z*z2=FAPiG_&ycw:kUi'&y& *i Jn:dl<WEH-B"77l|zlt5C~,W378W2N W\;."'hLgw:`OA\;Z5Ԡ.am ۤXQJJɌ*<,2z5o{ѓ~^jsEsڌ0H++Hvr"\OEZFWVWZ(2 ( ( ( ( (9<RA\?xkV)k;⻭v -NR.n$k5*m]nwmgo,[z5-[MѭT-,`g]L)lXqkmZ:x_CDOg Ѫ$' pi}coku U Eg>+y=XȂ:?27 *9? WU&O]_חz. ]Α!BCFٴB p[/Wn{[l .D r;M0XiG %dtTd\5i] #)$nvbYrIQM%Ս*NEU^yx__mDG6w^y.zWK=1?ÿz.KF,yytVFЖf>$ZG_&?hV˭fyk差ȣx~A;~_HTޗfF O/"co݅~e֗o ɸrdr2 Ylkзo^Ag,V4[EPo#~^2{/_Ð.ekk'iiv@`+&FM;wTע%:H#mo/bFA{]X~X_KE_pQEQEQEQEQEQEsyZ襮<RA@s~4.|El{خegX/s)*r.TIEq~Ηa% cepO4FUpjxCEu]s!+']PAEPEP7WPYwp 6F;UFI砢8.|ƲF#r8<55EpZΧqk 4hnm*-rQ$5J=.Wm]$Mek\SJ{ bU?b3nS 89{jōŞ dzSJ;˸g*F"(lVVIUg')w (V7"O 4vS*|5Y>)CZ [TgFڼ=Wd!Э2oҙh/xAֲ>=z}?F*TԿ, a@dƬ )NX7̦A~9+#N1o4jd 0)첱cF1$\ߦׅdI~1[UTIhҤDW q.92[j<3nx7nfF)${7mue88͟O%D'w][vXc% 2YnťtQEjpQ@Q@Q@Q@Q@?xkV)kO<5`_PEP\9? WUW?xO²tQEQEdE k'm^e֥r]r[Fhk6k|K__[ 'ʀ4M&Bo2p p 8SxnN?/R%7wi-p|X1fec:jra.U{rQElyEPU 86fe0 8~j5}8%*iV?ٚE}߷l߆Otk^=z֩?RsՔsP4?BF~+6$ϓ^xNu?oF[ՋM&S5}336FB}rO2|Ey& UZ[md2~Jk|,ćXKϳFҟ쥴 ,f 3;fud𽾧`dmw`@Ҿchccel2WNYu o{ E@*,|=)5khCZ &f2}:_'M\u7dk::Ņ[_ZDBH܌S#_Z:ū*YC.GNxF<[hNd),MGf]KJ쥤伋 ptrjƯh>,ΣgXO\n$.Y09 ; ( (z`s,i`Gp$ 2Ig$@׋4!P.qF\0mٴxɨ\jR\^%ZgRFJ/" ]UJճjF{ߧQEQQEQEUM7Mld0]@,@U)Y^s5+3ߵf]ٻWo1! H=3Jvq>fe(p5`=M˦~F~Жei%Ӓ_0~^3aYɨV0: 8PYo;s]rZ7ϬY#r&(S.C}B1DQ[GE MJy;̱,x.lԴĚBm-WnnEP (' *E-tI熿k (+<'aY? C! VO"(?'[>tzn9KʻFQ|YF Ӥ B~]b('W_ֵd?z֩|?QEQQEQEQEQEW+[]6;6;O2N1+sF2zmg#1kDN=DvF$'z6rx{ 6EKɬ$Op?aF$q6}ٱ']:$b$hLnk.J18=fOQݲb tW#Y԰^[:՜XʲI 8PYHnk5Իvԫʊӗo妾XYA-档 ^]Or` JȪ(b7zm>=GMYb&@ Fqߚ4[\+ĹX䳃t2 :#am:~ v`cXa6Z7UYXdMMQZ\ܸu)]B_Ɣ >sƥrWPE_[NnF*ir6q,u_ZG]oPԦwUWe\O|Aq?5u4w}RMqv5N*2*;zv (8(O<5`_W?O'UZ(iwK٭ [K{zYg2HYF\sH/^+5M!rotȄ.OsH/P /,$MK` ,p_^ҹ&G]V!YH#ޡҟUӵ+]P&/ң$Q[q;r6!u$K(WB|*r#FvLxI9Mx䍃+{r#4b %+֫5vsjWi} Kmm$eIU$gՓoV>ٲw<n|o;jl*Y_Ѽ{yF.Ҳ4l9qsײi=ˌlߓѲ{~O\ݗ&7Z2:4 kp"FѦbHsqP\?;oJ@j\x~ ♯ Tth exm9<|Jyx>?wϊOo1fxV-eDtR9_jٌ3|vmSRc~;x#%o߭:\c\pG+W?DjhU,l9Mݱ3D=aI]m83'y n`?]m?;hg&67\{;ͬ7ڥNj#Yn$cPňd֥ؗ5-!<:7 ه&6H2s/gӎ?wf%x|Kcj}֟(Kcr` @_o/5O Yb@><#u̐twn57_<9bA/q|}z {k&@P4Mf >qGQysET kygtv\;n&lhC]yMa>i]/͞އz,~.^z-[&-IԾm88mc\u{[vOT7)8G󯥺u\{#?1ikRѣE-3iMk-ғ콿=@$7ĚOLضiO;{q~s}׼Yugq=67Arspy 랔rK[x~ oRf1v9cW| ̹~;웱3׶WO+b>LM};̽|U}u\K. AtypX$Xodc9n}M7%TOmRoblj/-w}U~xgQ5.,VT/.Im ! ͏8,Y,qÞ*u{)5m5 V7?y#"ܓWI?wC4UbVgƝ_B4V"^%ۂXB=xGH~/sA=ݚ>n\I+".p e G$:Wۿe8FCsj%ꮋ"H-̌OeI k6KJ#FllT?8 G<>&6_I{[A&е s4Kr`T. <6^x?뛲|UcuEġypEX_cSy'.}M7%Q`rm$Q :DtbKH'+v-3fya۷~ 83РAEPEP^O2D]jQR}v->YizlW_k>tP+vR31X8ϤMjX. ksyRx5sMټb/'6+f+ "WzڕiHbYځ]Kħᘑzjtֹiaom*C"gV YM\w'M5p$<_dII_.088+!Z[k 4]2ga2ٴX'64wrEp~!X{RjieY$swuOj T^g<;ߗ9Q@y+K{sA:kCԌ&[6Kd#S&Ƙx@#*u'K '/#h8fQx?]}/Vqom^cFiGv~%i*, b¤j-FkIu9cKe@"0[t{P"J(_ƚ}esX]]kXI+.@o.'ns]E3N ~zyEy>/vKG )ѵJ=E,yFFbN.YMaȫudZJ@bҴ<9$͙J(Ě*JDt{qnĸn ba> stream JFIFHHC  !"$"$C'"T !1U"AT236QSau#$Vc4bqr5BCst%G7 !1QRq3Aa2rB#C ?&]8eAJRVME] Ts9tȰ!_88IIAT2̧ JB3E!\BNy//B[4'&vSjR%Z0;-H_|/ޮڈyETO? wFY*QYV25\I?!஢/ޮڒY<!]oӮ2a ⨧0hlh9fghL&N4h%ǥ5#y')̟ WEbƧ/R]?{!஢/ޮڛc1 @/Yr#CN:t,U%vo}F]D⯿r (zix+1XS¶ wYNBJW1KIJ5 Dr%$tNDŽ;W,IV$..0iܕ+|Ƞ(TĎr (zix+.Lě9r=2R;JkJR w%@QP[lq0ׄU6eЋ0.\dhiǞIVN!y(}@slkToҖ|Ւ|!ԶŸ0x03;NF1ecܬ$dkRBIvZ0S'JUjneOY^pspza."0aj4(%? Q,T<*Q# O+Yv)I|*O9s6~9]e?½&u.S ˤ}>B\ölKKn$K`qFFyhtD=)nŞ9nv&(تE')F[ٷ;R0+6(Z~efF_}u+殰sazzSNZPMB2rꥂK晸' S5"-7iק-j-]=_Jr24gď#N#[sazzSq\{xN ڮ?9yrmk-RiP9I _q&4Xڰ]q4Vv b-:Zt]1͆!O{t,֪O]cO+^יq)IFO2JR7l/_,M(&FQ~ B@D]1͆!O{t Q GSo9i}b7[m,E6eb-( #$PKŨv_˺~lvO7$iӥ?,ߝu6=ӛ CҞ녕z]|~տ}[K1MFfbU^Du BJ:@:^w*J2RsN\9D=)n`^Od{u.WߟtruMZPDRP%@-Gyk/*2Ձսkl6qJU `^Nl0/QJ{ۮZnຜ ;_Cݓ}z}*T3Rs4dIx7Vyrmk-RiP9I l0/QJ{ۧ6=*wOuv(8CfdTLNy˳̩0K%R@*_GI9Q$ƗV &*ALE?RVYz+9D=)n`^R2}/'7u;fO-ZL_ܩ|>PaBORG2|f莀2v9tuzUG][͆!O{tdscr{yj?ZPĉ6ZhCi t%#|fÛ CҞ͆!O{urݎ2QN]^'+殰sazzS[ϻ/.YWjrcYXJI:NBapc YS%- )I :@=*>l0/QJ{ۧ6=+e5]/wZ.77"^V Aʹ$VZfJ..MQɧHYl0/QJ{ۧ6=i[-5ຝ^n4?棋4yְT)\i R qYj*9geNn\M%[e %(@ $l0/QJ{ۧ6=׋*Tw_>^E|Cf3>BP Hu6=ӛ CҞdlWf˒Idʫy9~}r~VvOBRIܓH9f"v:{vQQEIm@g5+Vj9&{ CҞ͆!O{uE,E~nm/X5T)VuU`;kF|I^+zBTsQ'xmwҰ{Dm!R{F7J2艿qη:ZK(AB–KڈBN@^^_ '; eexxǚXmd%q9TiI0g X޹"N9 e+;im)k) 8Ԕ~ҫe `qg kDDp|JVG NiPTW`ݫ :(q9!OuXC-)KBHP]*+w-\UaH,^jq\7Vc@%Iȶ RDΡ\ p޵ۭx;yjJqOCN*I:o3f@U6 ĘA[c0l8Yf7$mkB+c$:l )T\8ZkܱG!TZm1h87JCRB@u +.}Ҭ-Wa<,kYF1M[mPI |99o\p8+q*7ˬPqe)CiB]A!*X:-* mۤavY+&{n,V ַ}p!j. I9S<ؓ V.:6~*ٞKg Ks%6u3+r)JJR쿕Tv_~ȃDVGgKF>>0?`D Y,J.oҐZBBri@)JP R(ew?J;VD%RZ;:_o"4D;2؂,keUX#1=(e 4BP  dnνƿ{:롩mPџk#?X)YKI mr>xA`N\Qalfr7^H*DF}iJ) I dmr>}'+YcʖX7=d3ogZB8Ε#=^>#?MG~RϵOSk3r>,rˢ)@)JP R)@)JP R)@)JP R=+]"N쿕TVΗH/|}(5] \ܭ!kʎ3dj6GwM\֘8}$8;Z:u$M- %#bOmvvLX2@ϒ%A8[caÉoZYV=磿RP!ĸ*Vm soU`ĩQIǙr?C}F mZ^?oӻJ^wxsi*xҍzs:sӞY5 O ׁ^Qho-jd- A;=$|t50).,qN!*HB4IXLYGE-0 yHVH*⊕jR3'=$>QaԻ&(ZZRJ tC1gTgTOބOҌ[ٯM [-wU\J6B,j\?jV?_SO V?_SO /O%-HRJRR()JJRR()JJRR(QZJwew?JjvtDi}SGqη=Ut&q#ÓvMC5i V NiR, ~61Oa[زȻ9zqV6[hL& # V9fN /@ Ro)!.GK井S!IHIAHu%"1?PUWܿ1.2Zψ\e\%9 (Ғ%JSum9W q|{AJ@4ݿ3JpJh}wqηu]yl:mOWm)@6['Ϋ|-UJP w;dvҔo|i>u]yl:mOWm)@6['Ϋ|-UJP w;dvҔo|i>u]yl:mOWm)@6['Ϋ|-UJP w;dvҔo|i>u]yl:mOWm)@6['Ϋ|-UJP w;dvҔܺ7V-༙> stream xڽVK6WTb._c6h{+[,˱{l%+vzjJp7OdLfBTƹGJccGRP!Ɗc#7~=Ow3*lwcKƬpXU`S]=;csa!oTb*L>[6_tN`J8vo1wDK TXĬRU7Va/< G]h~F@X53bd` U{ܮ3ˉ5][u1E~> -Q%OS$7&d]pQ)6 ܈;TC$%:pub!bDCv^;9(Yb4 HŀN$A٭7DM-|0zi{ՐSTۮFV@)#b$%/@Rs so XA j#3nS }D"ժɉNGN/i1[ џ۔s fNu]=۾c-᧍6o3j)?%O6ID辠}r6tsdm|b F8Qp\g-kSՅJ|ɬZLGm<!=w %!f(ܟWQ8Ȭ !%'-L[t*Ub` } 1N*))4UT^W4,#smEGcXGѣ"h)a!F†ž_LUEAL=S{Hٴ5&&;@0|9ϴI J4PBFi}P%ES>]nR7RSHQ$$SY۞q͹]3C xN<=)6S7vS:zIiNvrZ#p8[[0>ɟKÕ j7xXcюSzV=)#kepՐk*-UEQ]p-*U1)t8 bY#!-,4g]z}yPQsZ2U5{OvclwHOW$J.x7o^{M% W?oWgZ endstream endobj 34 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 288 /BitsPerComponent 8 /Length 13285 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( +>qjM|v+2)G"t j.(ScG88$l3&pbWbԵfZ4سqHm-ce>]A,Wn4O>"4k.%W&I,pdbJ*2L5º&ikm#M6yTQZ|)8=ihR=.r(fye*9UQ^Wƻ+Ťqͦ˩2;G@>co1_\|UL>/w=\%4$qơxeNP'(3>UүKn.S@ jH>`s4JgF-E;@u #8>.QEQEQEQEQEQEQEaZGw4 pȞh8 iV9W뗾VXK9]eYcUJByD}OmP ^6=tn'H)dRdXs+~/ɢ~$M{BǴH6έ*N22OXF^G[巵 p<RN0ºǯ= [Iqc>.]k<4A(vGgawu&vCHI‹OY~%`#!֍=Rh}_.l[ՁsWLr|+gwYcՕDy1ev Nk,?hm^=RMM}=-EktiK!̡ehV>Ʋ}d%63)8d5>^#MG{xcIKw)ۃ}Տ[,uk \M?[H[lhpぃ8{Gžl?"ms& (cRu;kdHpAplbK(RMG @غ/p}y}9c +~*UZ+J)ߑ`K} wW7M~ú]i[v9@827:tPZOotGJ4< q #E(:uB?6OOZѼgI\I>bFTݴqwܖzsH>jZACyiڎs/k.b|=` V]VjFYJ3k p00y'(?#N~";/ G:A3iPQ~RPN9'c߆<#M7C .|tz0]EcjkzUpoPxnr2*|iw_![.5+ۋd&bKC #nqWN&-:;ipgIg dW-p1ۣi"#}P_6#s`!%en9wZX(K꿯-<[eY~ui)yU4 n>t; 1(wJ0HQ@oo76\m]#/̽s\c$1ͦeuw$d`bա!Â`݈( мKᯉ:fᘼ?ɚ;}Uݘ!,y8Ķ&hťޓke-͞=ŲK$]G`\B1!@"׮Q@_Ɖnl_n7lٕy=\ޫ;Puminu;[A#F) #tKXwp m39b޹\?xkV)k(sH?d+((((^GiW+4VмePI{T;gqaZCvoL%Αxlc7on㈃Y+z7\s 5Qo;qE!Mm%Ճ}Ar@=] pq d ku v Y#lXdztܥ9K3leYU@eA{Zj( ( ( ( ( ( ( ( (9<RA\?xkV)k*.$ʰġK3U@C! VO"otZᠳFpD/fP%NWB^~a~!+']PAEPEPEPEPMG4O\BV8eZpữՓcj E )?MBuc՛Ӗ=uBouaWWo<_(:`7YZ6X.[G %ZgKrQyw!j{áh0I4!-J E{_aaݧEfaY]r:0'Ti:I{y@A p H RTnW?ğ\^rEMIH]y£3b>((((((((( $_ K]syZ襮 48u{d{In@E"22 UJ :-%'ܞ j}6czIf8 ^4<[Xii;QA,p98?ƒZ#Ftxau(! a2rBkZG{}6#gieU#?(w`9<v* ~K<>!}(Г;tm=:?2'dF`C FA=+9]?Q "!6&nxlCkv7īϟ?֝%fm.hcdyɴgnʚخ~oxE-uGcuD&9F20tfEPEPEPEPEPEPEP?O'UZ+' *E-tQEW?xO²tCEu@Q@Q@Q@gkSYxsT}i,ʄQZ5NtCKwkѧYO*H#$Tfdh'~f6VpZ[ crNQ2y+_ڎ/>}ώa+ `OΤrJ`pYz 뗯.>N7ͷk;FBOhɶQEY{bE*^Bkgc/#$rJi:b.KHdAXwЃW4m? W el #i-^$Bx5FN)uWݯ<[n"[=8$h2(xB0A A<7V\[J6 dGjJ#]`odHl2Dw+r~((((((( $_ K]syZ襮 +]#Mk:.,Hḙ}v;:jG#HoD5q9@dHܺcH| sH?d+(((+\9K#"bY77w-'ᝦ/%:O.'gNPKN=+?7?*mWqG<ʪF~PrxoMjC}ƍ dUh1UQ@eIoe:ȇ;s(NG{VtMt+^GXw0zaف#V<>>z;O2), G$0%ؚ͈CXjS2#ɷ˜: c*ybr[t~1F4iWP9"4Ȝ(YiX}ZvzAEUQ@Q@Q@Q@Q@Q@?xkV)kO<5`_P'I𶝭hrn>eMo4}`ycJ& cM|I 7w0J:e$`p7ZEk7Hײi\yb̍02.Pƻ { w7zv6pG9w mV8P 4S[ﵩu B żQeKg"&_`I'!F9? WU_O|d4=Z K,9T%F#X3J_WӮYᛙudei2@#6$m)h(((_z(bPqZՓ|o~68`YOR:n r*zǦi:t'}*np@'!sH՛mV[՗ mGHF00ݚ*(( :ŜMż s}Re!c׀OCӡN\bY[0΀;Yy9rt-Gci#qVB^^A"+nu5]6'qY92$C?vV6sim tac)XU.CF@2EnO> w$Lg {cֵ!|Sm>KE *((((']{9o%Q6Ʒc@>E 3G mY斺y3B3d*냔efV8#j:Lmԥ-"_\I폕4&Z>Sshz}QEg8QEQEQEQEI熿k $_ K]QECEu]s!+']PAEPEko-ıH^I$`I$3Jm>#XSsoai3UFf8R,@4u-6/i#$R ,$ w팒XJmCT]HQmy05:s;'GƬ;eFD᱾J]kQEFEPEPEPEPEP\lQ;-[jeß|/VfLr0z)5r'xx3? ˢyos g1$'cc0lŠ(HQEQEQEI熿k $_ K]Q\ߍ5vs5+iooU 4lI` (4W?xO²ekw:Fkvd.M۾9>yeÃ6W5xO²tQECuo-QRHPF Ab,DpZʹ<Rz$UGm`znml88j\fVjk֬?\jzċ>k86Fx8"@rj՟Q4'ͺ#"(ڬX.0r$+MMl 5iKTŮ0+C((((((K=N6bE*Xgo(F׾H AlC\6jk!t;Ds ,hX ꪞj HB8x)^)#lt!H#!HqOsHVh,5 ' R\#{2Hc8ݭ0ɨb ;gIboq0q15\%C{c&f7j< Ţ䑁:oZm/7䳔#\u!E.[|:{~ejϯ߯#RÛ@n<>i  I#\s7ph SPҵK+x dYXsrZkkܢ&>o>ş4.wq-nm)|'8tjA^qkQEFg?O'UZ+' *E-tV^C[;up֑YY)+?X4z-u+:8I*" =T ?rxiW:e7bPꥒXt )x`:xw{e-rXx&-S$ӯx_I5uhgX sww-̂0K +1U8AFjmOa{ՅٹF΍PzJNsڀ46^x?^j5WdHD$Jz?wC4GaAU&Td,|3gLZ-ʳ7^ؼĶw#9bNOSޤu ";KoWt=7: 䪧>*mR}FTK.MPwE*ʣgZKD:'QM:M6^x?뛏gnlQіm.N6@?q<8}M7%S <'c KK$[s^ss1Mvþ!&-7>oS.`ǟ~5bY.X` a@.[q$ *R^N#'Nw}HyxCz$c}yo;ΐیgϵ [|Uqǝ,v}=8^947g5@ֺ},_)ˮ&<€ 懥׿ؐO|y]o=4<3v^!ޓդ>o_`nϑ}ns7ՅϊH1 Af?n[Լ?蚥-}K{uJbұ/'3>0GA >|]'& &Ѯ|4˜:.anm2?!uW9Kl~,w~ 5xYTQi4۵-̡֔K+dmNrSOdž!Ӯl5/d-Ft':\ OAH%^i/?t7F~>3z,IyyZˁ?|I7[I?\خ^fxmr_حԺȚK[#$`?;HcVůcd` /< ˂_6nSdӵIy :wmQ*NӾ_|!OxrC q #r=Qk7:7qo 62y:wE+#,6Q;*"Nt 8 ?ZOMY]GFh&W4cdh¡IXHr>?wC4@4-B[nZEsyeo@sgp*;G~M+kWk^ZF. YNF6GTP\AW>&4u'MAٗXJMg̞Cm3Yy=' >&be''v?F6L(-+f . |дOiO}+o7n.d82kBQ@Q@Q@Q@O?HԬuKCR7fY 15TI+| c( ( (1YCu?g>|3m15> stream JFIFHHC  !"$"$C'"T !1U"QT26ASVau#$3c4bqrBCst%57 !1QRq3Aa2rB#C ?&]8eAJRVME] Ts9tȰ_88IIA*fS%jF~_w"SIK['NdZ+5< ^)zVZ7yDyu_]<Q~va?kU6eЋ0.\dhiǞIWsJ> 9m7}{k7w%nQԩ5ceCჩ9gJyBRWfܴkJ^*'!஢/ޮͶ;= cV.)IJ9)i)Fд ȒNYdI;l&f&-mrK8;9gDgoxaQr42KyAC( *O9d'1G2*w_u %[e0*\x1!M组(oqeu_hZߙ<Q~veXpQRlDn%q[9/^ZkzCl4~E($~*i)S7>MүAUROgNwIS8cI0* V~dI X, ( A*~2[aȒ -}ꂊRmZHԣtH5č͏rʓ mDA$xգQRԧ*)r;NJ9ɳox+!஢Ѧ~qk`R\d6 im(IQȫƾHWz3ҹnjQ$gY;+7F񟮥:tԮ\sZ3]ޭ͛+ ,]0.6Bҧ: Rrݞoo~xY-y-ѺMw.Kޭ͛+72cR).)A?)OMMd,KEp:/DvK]:_[`i P;ӺXduOGm 3$'Q3~ΪҔ3.צsE,&WQE_Y0~cDu +RFyI9~ZwF7e)j )]'IFRo;ղ}z[~+ Y*g~@H/f v0>ԶŸ0x%03;N'#2᱌nVkue5b!r[-i{N^ U)r@ Y *W7OQ²~,1u ;fsQɝ6MmÀ]o̥9+It('•J ]zOY>r'﹛l? @t^o:V)ez{>B\ölKKn$K`pFFyhn5usazzS}Y=7sMݲ\LQUZNRnnw&"`VmPWÛ CҞ͆!O{u:jA5Eˆ .rjCfs+ .qLgTDG ^e,tWvq+˺lx#N#[sazzSq\{xN ڮ?9yrmk-RiP9I _q&4Xڰ]q4Vv b-:Zt]1͆!O{t,֪O]cO+^יq)IFO2JR7K&Ngl(m A!K ֠"O@sazzSvͅwGVXm)1b-6K"2 IS1摒u(j'*ݱ=Fr241#rF:Sr-PsazzS9D=)nY['%[oW-Eĺ_ff%QGY[ $+4}oG.wY$ItA%P wb񉒫n! X[ֶhɇE]Ь]=͆!O{t ^ ʰ9_9]7׭O]]qA)L9N!'+ĘϋRMiBO+$HІӒ@JGMu6=ӛ CҞe+NW^OS+]a͆!O{tv^]IǢ,tH,8=.uLnKRA+tz>J>l0/QJ{ۧ6=+e5]/wZ.77"^V Aʹ$VZfJ..MQɧHYl0/QJ{ۧ6=i[-5ຝ^n4?棋4yְT)Ů4Ed8kYq=q~d6SIlCC$ ! J@ n CҞ͆!O{uʶU,u׮(ٌO(9t?]a͆!O{t?<ٲ互Y2^}__\])6%SPdoRw$',Yk爦ݮ-λݸ'IZKf@@,VR7,S޶7wcyq&8)LeDƒnt*I{ݧb+3w(6Njg%%.2H YRFv›)ר{I1"'HUn1 V+pƣ; l]x,HO@}} x-ʕeIG 34e9׭[t,9R]Дd̒r V A(W;4XKL0!R^[=-ΕזKGm;u@lZlylvӾ^[=-ΕזKGm{!L9)LIl+I[.|Yx3Ҕx'DΕlc8h|2Zr5gQrW*?}wqi\Sg/NsmkV/YXzg+Qmܘ1b˟N-%֔ aK%D ! ' /zW//jNvR":n9iaKp[isXSR1$bX$hsZ1BҐ\ ):ֲ).IH*,l>[,AucȐ޶cȐRӚT3w=a|nŇGAAGDBNJNHuSxKJRВjJ;ۮ*$/ 8qd1d[y)AUgPmk-i3ǭx;yjJpO:.JN>L*8B]BsFy&֮Rv-bYٿZCn,[9\C)X;iJP R(emw?J;6D%RZ;:_o"4F׹~1'^fd{ vnqiKZ '-樮Oⵧş(vh I@UF#~/F};+a֘sy4iR I'TW'ֿ5]/ n(RGѓW#X>Y}  9znZnXV4u)4GQݞMz{}k.@cCNwl1)DJQ',,`;g#x&|K,ijw^m@ j_@k;ްuNGlDvVΔQ=zvDGel@k;ްu[^-$xGj;)himfI9_5_I0R( | 8_Oɝ rn\\Cѯ=;KxoNG\6ۚe2 C.46RsJ =nǥYG؞`iq!KFizLINJJBu(ND O CFn76/N-B\32Rւ~VNjͥ_m N # ƾZcsC2$GQ!IRiIlqqT+#fPkCH%SmaJTRVj#_ld8SY\:a. Om [ҐT µՖy;{6u<|CĹrw \xgYSjq$Ko0˙6=(.7+;qN8۫Ii,m fѕxkufK3nt&S- Zu!G3aJw;kŞ=~'N%Sv^;..N41Q ,()Ji+鋭qZn.7ga.Kh~(yӋZm@%$տJn$3E^wKf*dXқK%ˡZQ$~ יP˭&qΚ/Æ6q|"VZRk@HNV()JJR쿍Tv_~ȃDVGgKF>> Gf]Eljs#4Kf7WGe HJ ¹׸7.^܏8܏`e,gr>sr>sX{sh֬}4L%%Ɇ+mheR\pk9c܏8܏`SV P܏8܏`V7\[Գ.)@)JP R)@)JP R)@)JP R(emw?J;6D%RZ;:_o"4D7.ZC0+zf Ր9(qGwM\֘8}$8>0ɭ:Y翦^Ty*Z}9fy)IC} خXS8߆7K$1w*Z.U)Bt6J@̃iqF yO%NҕeZOk' O7u>!D8kZ-$%E9rg.+سh 5*3سiسh 5*3سiسh 5*3سk}n2 &ڟr]B\.gzue=Cg qÐ_P޽ZZ%RXMm[޺Bb=<ɸNIqΗ&%Ŏ IPƘ8‰4b 5݈(/) Ւ`3 -^ͧXnLqƣ"-ŧKmn%*:R@o@ƨ+v.) B4@D@qtUCw9)Pm:R&Mݿ3Jm ?#[6iO,_ηu]}|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:Rq['Ϋ~w(|iyl:R{Xfw8/&O ZC/((ffD3 RVp/GS? endstream endobj 49 0 obj << /Length 948 /Filter /FlateDecode >> stream xVK0WJmpfSZ,I.?yM8`%3ߌǑE,"X`o_"ZHA"4wr Wn}]|G&EU^DF[FEFܑ!NPï+eS9EW[ )jZ BNb}S|,X.?_z+ᤇH>7 |:x5 'qiaCE *E^@Y˜* az0.V2$ Mwi 1ZNDnÁa@ߖʳg<ՙMZӥOs.aJ(Ͻ+c[Oi/$ns} X]3ΣC[cD  bi䑘N#&F [tlLF'ܡv$6Rs,aRͰ :Dh H\#[}q#b=d԰awhq&#orgr[Z߲Gv9opqSdKjr]ڑCpa@t 5BBOy4@[6,79!.s/w]bv׃2`o4` RM#)p|<#ER Jٍ}=&(¤s}t0 ,p cKj(LB=:Xt RSh˅].*mτB + jċB?k \*tF5Ҭ|c& p[5 -lCȝ'oH ыJo97g`]%Sw !O>UÀj(&4MGKQnrOK?R%Ͽ?"Tzas25z endstream endobj 39 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 288 /BitsPerComponent 8 /Length 22609 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K_ 4{3P4V2h.ǔN;NEpX:ak74.tUUt?}"'aQ0Aћ9?xkV)k/мn?)$_lu$o~z~Ɖ@M4PlkL1 F$c7wb4>RJ\R,k{zπOFKKk/ܨ*dM6?Cy6[n!6h[i-E5/*Tݴ+h$yR(bRI#TP2I'\y'$]HQF<@BRQKisݷd{^躿#|+  -Z>]2vxrѯ!Y68%p}~ ׁ|=qqi-I$ĤJyw1E0ƱDAP8V?xkV)kZ9쒲[~z+#$A<BNjG47l}>y9Q UNF0 !iqLHaq JTg]b@###QW<Zxf]:z[]eI! $3?  jjlgؐbayck#n`UIa>=W N_+N>m?mݜckJAE%>[_*h.WTZáڬr\#{g@X6>MnX,4 *mOSȳo&m(A=HV+# RXePWR2#][G^U{< SCt?Mx?M5Q\8?/·^džiLy$&gcI+I5'T]G?xkV)kOЩ&A<B(OЩ&A<B(OЩ&5xFi|3,7 BH<oq0+]p7_l_ { yKaxdg w(8noea[Ѻm|.MI'gj0sc(NkgI _n 닏 hO.lI%L%$W$kYVM3&ޯ#LV??xkV)kjWmuWCz SCt?Mx?M5QX  h*h.  h*h.  kG|'m Y;Ci"AW=I%v\o{OF{k Ԟ\ .6;琤A֍G F<5oT{oNѥ哲_˱O'UZ+' *E-tQEQQьycrK@O<5`_W?O'UZ)HwsP9$U "Tӯ.))7C9@W''sXڧ%hJUY9D$nWplH%8_kiV[=v+-/JXg"ㄒ϶D#k#p0@ *XԾ ҿKE+q"@7>x(+Ӽd?ywg3諑޿vn3<j&(?ioκ(9e)yi$8dY?,/''h²2`O]\oO`ӽH*rFٟutG+ӿGqNi+v4z>ۚ^yZ襮<RAP`e^iXK;¨I)'+h$yR(bRI#TP2I'^]47$bko[R)dqƏFݤuᰮav &Z;ߊ#~ 1#{_VG$Pġ#5 `ږ(8P0: }ElL0_!&㷘QE\_ >?o<RF\O|!Ϋe1 ԍ} |q\q?TՖ<.oli@>i,,3=B% nDbfa3Z, '"Aoϫ_]ZfOyqdU 9 \{^mk;+hZ#'5ԽmizI;Y?5uR7 Gp:Z>sE72qQr3^Ykhv4,.-u$g1p' g^_lg;wuy|v:5m4u!Q9m`nSmen#S1>j+cޮ ]fɯqx-KMRX> H8?+q et֗p@+(x)bje}o{e5h~ -#V:=k4^\; ]8.~U I$ujZ-+Mp$NfGc!J$e'pR?awxwVWJGO'UZ+ʧ:^"Nl hPHssx>\kzk:ٴi.saP3J0 Ϋik}Gef [=V?cxrxy* dk璋vW(o/[:s β"AJ!9 _$|;\^iڝƉkvMguVE`X ʹ1#m;فMF^=Լ=g5Ωw$GĊ]" ,bB3Z<7~ڤy$Z%Զ/sYP*3'*Ib35L ZQmV7GuvOI[lEdnd֚OUgklQƾ޳XaC%E,Q]HܿxrEztz]Zڜv-ѬrNe/z gx;GMьd~d|sdgnW&6N|^~g$ܓk}>\?xkV)k*0-M[]H45&XKnpĮ {a J<';)=nKvhZ(WS/p"ڸ,v`=`[+XvgfBR|]gFC,"e3_͵dU WAI1(HB(v"8 "% qUE8%i{kB ~mol1(((+{i?XnJIxBwr3ֺz~hn}yYdpe%FO~RIYo ]GPlƥHzL}Uuʒ&ܑ÷bk;vU-5 \\xd1] PC[ }ejz* R\ٶnvkcG'KMOi:kM |8Ugi;I*p#oG|Ccڨ$$Iue\8>mNaܜq onݬe+4ykMB= M*L/"11YAYF:FmV7F7'bԎ1, >|j_TDۺ{=Q^x¹.1gH7?7cg۷{z/MĢw =R`0=Ap=sa5;;z4͚((="{WJV2K,5 BiZmȊ mkkQ$d L~qbėH_P6˾Ӹ53q ^C!ou()Ոa5b!Ʃc؃*'z/% J4 ) -9^%F.0qficui:Da)rK|ݝwKv}UJ*VV:+*h.OЩ&2: +*h.OЩ&: +*h.OЩ&: z<:lڄ1%톞I%) I u# .6/_'T]\??iH经F帱{Y-[6hH~ f:,Fi&o~?/W?'T]G SCt?MdIQ\ SCt?Mx?M4Q\ SCt?Mx?M4Q\ SCt?Mx?M4xI熿k $_ K]svZÒ"Ϻ"%', 6>|v^kZA3ai . BI8<˸K_D8ѼMA{s"N[wTLS]I`՟Ėp^5{;rߕPUY鯔eʒV6|3NQEy&EP\?xkV)j8ѭu؅Gaw\gg% ּ $_ KZդ/$tQEd0(//m4WĠANX̀,gТ(׊~vGbEWXQEQEQEejvڮ>Cog y`W#@sk\"ݽwe}:MJ<=\$CfO'bXt.9}o'wcgmyFnZ'ݾNcQ2|g){'GI-H[w'g9X>ߜOm/PVl(x@u #8>Z]>}cïbIsul#PigV p41]Jy@$t*yH 0uyR, ;0Y7ͳI_}Sll.,n-bheLFG#zTzfeiu[@#:'$$qּW]^X0ό#$"b'-`?je8zcgN9U#VW]WuI熿k $_ KTrQ@W%{Í]aYVїލiyI*vke{ ?y ">Wui?|M?R'!UAOw.pW"HBGjQ@IEuW-.XC+Q\<;]-t0M6:knKfEUMp2 O,֞ݨ Z$8D#gPP0<uShzٴā˹Č^y'z".xt[Sˁ.nnJJ!21rK1.8p3Uox*}VvwJ˪YuקwtQEyVV MrMB;hCcr`1Sx8lm$Ny%Zg}~aHd7o9 oxw*gZi-_N_Sw|QI,od'OO"t4 ._ůIfEbID88nq3^e|@Y`e ɧrːIs` sT5kB:5XLT>A;p7g#oORJ1'wW'爕]kmw}:yyAltw!cc.=rn+-qo 8:mk.eRս,Ծ{XᧇRO/QEVW$9ϰ~~fg9ݟlcj0?iG+}ݿz9qg^om{6Gkk&㧢)s :xÑ{}>@7,,6%weJBݥХO\o o<+\ϝfѿ_]U Gm]Tw}s CrSklU.r0ʄk|xUQt!XB˅}F=}G ̞yZ襭-CX䵎.KV(#1,̪ s8yu?r*1sFW*~^eK Y_U|;,5(C3#c?(:֒>"gV෵,!kBOٔ {^Sj2Ikw,D4e'21}:|_|HЮ#YdK+֎!: ԤrI eLyo'nϗmmvjkƘ,ṔӒ{4v=t] w:ÿka$;\o ӅvP*mFkbR%$l~tݒpNš֬sh(%gME*N%'^ mZ_ﴩv] FG@U /#pX ʴ'̛VI7{mJ\BT;U峕k_F+xc@|7SiqI$Uw&ElLp]v0hd%kd򓒕m}ӽ{k߁cТ&ü! /9$I9 $_ KV<9.%U:]#KiD,e 9 g?xkV)kWIN\EomVUE2Yci8Rp$z :O.&W;QA$rxr%/Q[JoykvRu'LT*A@A9wA9"0LK_O51o6dR[suEpBj@AOXBڽ^" ( (BrF0L"8&w\Vb;*ڗZƃx: v2NE3@2fB7˔r0SԽ]]m/wv]X#XZ5oӲKevh:4gChQm-꒥qNv>#nxoE 3mʵ=>u/ ϨNokFnWJT*qЫv:FxYd[$WXg1lnvj¶\wI{ZϮKgwNQpwi^;ᾚ[BcV72u^$[F;W֚ 7QĐ] nMʰ鍣URU[[OÕ.#CTĎ7n $_ KIQnZkg,T:_i$gWݡQEPKjuśն3H`_"hcr`:d>ҴugnUڍuGɯ(+K^3]O\Bprc ༫5vY<iYHhaPPNT-JXgNۿ_>v_zk_w Mh'NVIoR+?=o^]k5*ixiHM&y`dPd) F3|jxR]e,[umk"V  =7:_}.{U>4w=4ifx)_gyr3Soaok=GH1&/B'.@/g_=z}ꚕiM5V$Q\s +oyR(bI$`!RI']p nY|erznIppC(۽&I㹠"8 "% qUE8%iZ?"_WYYV (QEQEr>yiml좟wK99<RATi+W.CK6yiq6+@ ,wcY{hicwjѤv&!gU $8jb]u}ވRGhŸOn[)-U$njTzӵ ]cXYtNϬumʌHͅw yHT^.%Ļ#hTʋ>f=ϭ uX,7lsB00ĎVjUuN7->lIeO[G/۷m11Ej6[GD\+h#(bPTP0RW)nа+}w.GEuOIv8 p]syZ襧%맦( 4/Υ906}~cgk] agkýuadeY27((++SЬ]+NK( xt/O+zdHV{{aw3 Ÿapqִy^_L xѦ]2KJI$I' SCt?MyZ襮 4?C'T]] 4?C'T]Ziw2iE=L1JU'՞F5ǎtM6;~wgs^7ܫQǯֈSPJ/?#Xќt]bOA<BXXtҧ|}*9$s*;6Z\OqKsf(*V26֩;#Ԯ K{w0kp(UP,׷__C`:U{~C>!Ҍ+ދ{y4זv02TdmGP _n 닏 hO.lI%L%$W$kvB׶7MaReFulŚ>Uo%{ ̱ p=OV[VQ7KU {ZFW{+6視'T]X͟,x'/k|=%FE,@\}Td=>.w5:X%Ƅ82GgflԬk[i{h +vm 7 $ $38zomM.z? t-SV7 danYw1g|d{AR[(;>6:_tk{I{[E!l0k]̖^wmkqdRh8h0ŽVQR'Q@/jxS׼ c4N6{ȄF3S qRz.ˋ+&6Ҭ.n.l.>%d IW_/Ie^iXK;¨I+$t"B$Tvy׳azbN3k-"k)]e|j^-ڕօim/n i"MnW M>i\}/~ ׁ|=qqi-I$ĤJywAI1(HB(v?<RV=I$oYY,ݮA<B?  k*h.OЩ& (*h.OЩ& (*h.'|o/[]\1aBݱ lc+-J\6ކ.# Fk./Pe$_| $_ K]syZ襫z>uE{{ȂY0;sd%9rr[X~ 񏇼/k:6I`(-#8F3WuFM'GH)mnBN{p2pzW͢WԵ 'IY#,v;xxA n%7M/[iҽ8iUvK_KDwأx),6Ѧs,uPc-^yxfk; _5KiW}ᄌ0ْ-hSiZ>a{~߲֓fFI)wr"AZC?+G2?6w~ ѣ.m~ç}Ycf1dݓmb@,7xR k}lg'V,ȠyBWQ9TSϿ+MɥR|9^]5-ReB%-n\n?ù˂sG[ ac\ .A_/5MN58Z%3o$A\ ퟘ`𝞽`/d}ydMt_! TV6+:89sUmW魯$}}7;~=[^u}Ƅ'g#g-1׭SSz&;_ڊ(Di~ |;Thԋ2H`4$9w8xG).YY"+ʼua/kNYvֶOCgO<5`_W?O'UZ:|<43PV-r&(܊}Ѽ.x9[N**{ķeufQ֤|*!%*bLaqq+Ow-s*1G!V#̪TJC:m> QR5c'RwanO hk›]i^TpdqA^jt5{&'fOK8IދF%ښGjE4,B|JW`1`/_giИlm qH#\Kڦ"Ei?=n (WFM!}AI pz߆x;Jmaut7y a~ 0:ZA{uO^a3[aFPuCڢiqdUfi c8+Tee\x[7tm&?]u'[ sĻȬT0x.N]7eE=nTV+doLf\& mmA3-O(K3CRC.GR ,bIT!}=mE/{^yϖ͜?R!i>wSkݼW~k z28ڤwmϳ/ 3<⦯J4GU5$];_{vZhQZAEP?O'UZ+' *E-tS%8!yc5, rI'Dᶞ :;9m).Gd;29]HMv}=]oW⯉?chRf(8P0: "8!Hac5 p֘Wb$7ݽ.`J(W?O'UZ+' *E-tQEvgnk(ƣzH&BSrr0nj`䁂Or?.kEW AEP?O'UZ+Uս ES$=+o:4^-]FthSćV6'n9"n}[Ej+=+_fW9v#*AHȕp>7|cqk}LJw\a Dwd]|E(}v&^2GOEWPQEW?O'UZ+' *E-tQEV7i @ijP6u1\ZvlbC]?!M3 A#H,B#x,HOQ|uYxbtլdVіeW|.TFApLdkʃ7~7ms(4M?f^jvpӆ^Ēb][oJ}eՍ6KG#`>GR] ۽<RA\ᯇT{gI*TI;7k>?$1foO"FߛMkH`Fp*ӝUc}?!9$z=Q\Q@Q@syZ襮>̳l`XD -I zXyԧ:h$ͥ4X+Q@Q@Q@=x7P?,/DOoDF vFe nY:p G-~/Z|nIR^Kn1*-op5 xѦ]2KJI$I'_iMiP:]G6pNp35y1rٹ'Ϸ}15$[_|$},ّ<ij_ŐY79^h|=L/ 3;nHw5'T]\rTHW2h?p8YAT8*~Czy&j{[k;饶9#fEx/-T=vc9}j0/-n#У , ۏ3E\gɷk-;_"9TW[|f]Sjǜ!Y|-. 2Z nB' _!ců'7[u{ <[4=J<R%O7mvד\̣DCp>XT8FmؤZǁ;6t-;"/$aV~_瞽zft|vou[/YwE.zfi3j lb]F}*3nvq$rI<7K#Cbرؒ@UNFm-:.v[1UfpTEH# ('@݀t{`\[@lVe^Z|F+Ov,An4 nTVIWܧm3]?lٌc.? +pMῧALӎ)%gnۧQuҬnm?W:@QH! pܾ0'5O F m?SHvۿk!XI͏sxRJto zz$JЩ۸$0ۿ *y\>ksi&lV0 @Al \eY^-ٷ'[GMK:Bk]Ceܖr^Z(2lV'=1oi?.ɳw]m c2=7OЩ&A<BbjeZGWׇt 3SM𮟧GQ*xqaZ"HBGjQ@p _n 닏 hO.lI%L%$W$ksOЩ&TaV˥WI'tW?'T]G SCt?M`AEsx?M5kAx"laQ`J9 ppKkJ˷~-!w+G$9{"hB~9 F3'=50")#,>hWzq6&"XC'I t߂ݵD]1.O dlt6!^VzLf/.#1M$Kӳ18oB*pWK4+3 +~ΛbJj_dA*&:3ry мn?)$_lu$o~z~Ey~n$-n["m1FQLK0pg'sXvqa8&;!bhl.cu`Fv (V{ +úT+żK]:,Sh0lrC9P]#H[d,Ze8m ɳn ~h(6rgJ [mw*Q'wv F0|SzUҮm&W-*Y'#9);7o˾_<RA\?xkV)k(((O<5`_W?O'UZ(((( $_ K]syZ襮 ( ( ( $_ K]syZ襠((((O<5`_W?O'UZ'ľD#I+O P*$$cxp璍M٢ OX.~<*_G<;w;{f7&a/'x7wWx?| b[~>l}*QRwΊT=ywc3/~ϙ_;qu˙^֥̟W?O'UZ+y W+?c*'{VЇ2n[F6C5{Y`0~Fќj83:xA ܣ2|z#hK.J1Snו+Þgd߻9ޛxz|{O&w~󧢲? ?϶ygwxwgw1Z'AETI熿k $_ K]Q\TyHipܐ͓1 ^nkEpu?Mɪp?<78k<-yGGʇo_?7-W;v9\,o{W?O'UZ+' *E-HQ@Uo˗?ٿGٷϵTc{((O<5`_W?O'UZ((((O<5`_W?O'UZ(((( $_ K]syZ襮 ( ( ( $_ K]syZ襠((((O<5`_Wxs>">ۋct#2`YBճN>Wa &m6#Yg' xBzha*׊-fImվ{4NT.]OG^1vQ`WÒ1H1 IxΞ q%kC% `"ǕK-E&u#tvQEpQEI熿k $_ K@a65^>v]oRͷ*x8'ZPv'pW]֭5Gܷ$jjTbyq嶯YwMzxߌc6mV)L_^qROQ\4t)12lO&X3!Pr2m~@w $<ͱxcf̓ݨ lWb$PI)gO68G:;+-˸wAr'o&5h&Q=41\#}t >,sNj/oG II熿k Ěg4K/ifyQTlÀI$Ǎ> stream JFIFHHC  !"$"$C'" Y  !1U"#36AQSau$2V4BTcfqr%Cbst&58RD9 !13ARq2QSarB#C ?&茺r')Ja[ˊK 6RtIQ۠"Çs 8ieӋCJ$ze8-1V9pq2,4 uz~r~|c%e1ɖQ]+ZbXem~kxWaEU騌wy>Ȣ 5a}bkdBj^lHGoU]yI?x‹N]WpYV4}77'dGxWaEUx‹Sl>My@Sf_- FƜytg: C ')]Omw&n脰:<<tul~x;t$:3:V;Ri;Džv_^w (J5;=db wYNBJW1KIJ7 NtE$uNǔwڸbLɥd% XGBFSI5k{͐`FEr_f5» /үM;Džv_^qn ۮ4) 1@mv uֽc*T{NItmIh1-HZV)U#P4? ^"HM|8ZIS8%$¶$]IZU'/xH6(k$Am"K\D2[eC **mHo#rMփ$nl{nfTMj$J #VUJ^$7DV+QSRCr6Mx‹N]WX{[)f~ҒWlKM-XmBJ]CuZȤx/iN]FMESҵqdm>IjO K@z&u5 ?FlvXQdܐaHZTv N5:mOZXK^ _7Ss!K^US୓fn7eoZM椸}u5|Y-6}:#]}W"hJfGTxn`ۣ>A{az*RwJ#_|J- "#QֹMOx‹_Y0Ͷ=\V$II$ 7ߌ_{,n-7R@R H/V3f}JV-dJJAKsq_"_& va}mIpaI}[aDKFjxA;16KKn$K`sFRFh8u^,0^t_Ub^Vͼ(QmԄL ղ Zϖ:" ,0^tO/a:{שRQukLMNHGEr6nSN.r0i-isnpvp-W u􎏷JFݻG鮜uA!Ozaz[U\rZuRV³rlawmZ ۸ :t䙥ՂLgh"oܽզ,0^tO/a:{ע][.zL_l*:yBxn؀(#D#a}sk剼~NglHm+a!K ޠBOP1!Ozazn̊Z֍͑2qBP H =ņ CΞc2J^-$2*kN6~}r~0eۢhrZe? KG'Nt y۵Ź{۷t*Kh$:^RQ׉5gX`<^,0^tXG_^w'Q\F=R™e)aeI"{]0$s{ԯdSz??/ ;򮛳^s{97s~ɹ3<ܲi~elXK#.hq^ֶ7-%1fd8|)%ޣŌa'^('AJ^ҸAdKrzEm(/mʊf %A Odel˅ݎF{!~tɊMeեkפ{.4@^7^Ritxe BH{84 99#:ͧrd\d0C8YJRm Rҕ@Iq%$vvg7%^y%LPNkMT#]*!c7_-ܧdss6z{:se!$_$]9a?/b6BozHSkmJ@qQHVM`nqsLm09%*j?87ԍO^Dzal6&,+j+A%NX*HڢߪQM3aTwGbli*؊R8 HPJv}!mx_ɲѣ֗287 ($@viAٹe,XU޸ڔR (>Py&yb;Joɦ)CQt!*BTMe %dK1kЛƹ@Șz'=?;iZP›IFù);T RL;Я7ymsӑ)-@eO$/UhJҔ( ݗߚ U)ݗߚ U+TƎq]Ck?1'XlOܵ;";a4R$Ya4kqhΘ!BwmH]:u4><kcdkͱ--'e,f?[ У[pCCдJJT{OҌǫ@`ȽP5im%5˽kѷI%.$nII_H$?0RIO?( SOgi'e|q R6h1R()JJR:,YП632mM> m(h'<4,LBca64JR JJRRڭkͶ sZsE P @#Qe(lZYYךzB@RI:M%ڭPrߝr]a*v?8FB5 {)@)JP RQZ~*Z~*cG 8.!(5ۗVqn~ܺԝӻFe,)JPgJff,Xya T(I'xő\zmCRm+I:uGQ\,_$3["]ж-N-%A`qH$J@@Q\KݿM-8<9) 0$))R(Ҕ()JJRR()JJRR()JJRR( ݗߚ U)ݗߚ U+TƎq]BA܋)6kJn= HJ»39o4ZGZB("wsa?r֟`RwNﺄ  7%o05IYK 7ӕ8qL[R:kDF6-Iv='KߢYO8iKߢYO8jM==&Kd:-JY%J-OI4%ӏtyN1oO;wǞ:;\6v5elZYYךzB@RI:Mxþ]?5zk׵sd٠ۻ]pҀkƯV-94k-ʚ 5q}I"`L6AHt^ޭ@"ܯchVgt"*4ZU3_/BTwy[/Vml;cKa. AЀFK5el[a`5# iQQڄtdJRR*v_~hTv_~hTS8^av sc2ƭm:qJ%I!PA\o7[n]XjNPC?DhDhGɌͯ]1RO7I :٧G> ܾ ռYdW&PT!K&G'|Vݪ |59>/~#N#X)@g>/46=()JJRR()JJRR}6%鸁J)'B5G0RQfiG0RQfiG*Wv_~hT'u%Vr6'iPLOx5ӯNV/O0Oϸo7[n]Xj=ƾ{rRwNﺄ  R)@)JP R)@)JP R)@)JP R믊H~#u32r\2[:Х$uk5%K&I(8-uސ֟3眞ț2|n;eN]DnN-qj~;R:%y勔6>Q)u[ - ġJ $mPi>Jw5cy.Ʉ<;$3C KY\k{VҲ %%}6|~Doͥ9z}J1Fiƾ{rW͑l?>:Ǣ\_^KjVҠڀ:+Muq5~LJ8Q"+"stCsKiiT ƾQ OGk?X&~%GⷛiiT ƾQ OGk?X&~%1x~+yF Ҩ|?5~LJbVt#P/Gk?X&~% Џp^}VG|?5~LJbVt#__J> stream xڽWKo6W(5CE6@{+KyVZֺ))vX]pksDS6"B}[Z^ fs}BgG:lMDb&@63DsP"8s[s^ "vڃ7䧋IM[S~LvJ(L ky(z,Pa'*AKSOD(lw,ٹZ*L 47Շ9/ kPd!;(0NKfYp* -thEEjτ!b#Ң2lycGʞ(~2k԰ (CsDq]Ouwu z`L>niȖx5Om!rc˃FEL u 54}Upnu ߳pJwZi~P7RQ9[3DԘٹoL: sdtL:b $b9.[okSKSv97a##k_D0& }@idgQ%BEKߍӻ,G|ҀÉI=Rؖ9߭G/G2z(WD,a(Ϭ=)8jF+e-6-ga>%V EVo|Gk+)fW/.~&nNP,=89tT0{s%S kI ` * &1 7$waUy1U,a.+WeǺ_*mP^PN>D77R4+U$= ?( ^C)E e\ A&.q/HƧZ>b3E7JwD~,_-_" 3f:2~ݭG4 endstream endobj 45 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 288 /BitsPerComponent 8 /Length 13039 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( +-{Wm4˛[QʹF!!B8φBXp A1i6\sicL=F&<[sTݱn K$o#|aUH# ϒq/~'Y-w6j$ v@?|B!H nDkz Gǝ][!MW3NOo;> vBvgԵ==([A,NK`P-ͽ}j=d"a.s(+F{]xcI4Ķ"BH$V$s'oq_ವ\>7 ڣ6ŒhQTRZ+.S|Nsq?1#OqEq;+ÚK=V,IdpK(vL*䃑z DӼ96gw}'O&u4IZ'H(v@8PIMV}K3o1szdzh59Ttw78뚍Jò9-i%F~1!0 Wn5+ F7v=㴌xRY $sNo.-.#HdWO ~BH}^}6X"Xv \eW-3B}BT*EO]~ݟ|Gs4CY7]$YQ pA9sq^+%֮4@P2!WT5J<3a @{Ԛ׀uh^*h<^``}N30 I0+Zh+k4&~eJzu䶯'4=ԦYr8}c$)N9k/+ nH.\IX+dgܱ}}úv7siX^5<1A)ʒ2zwLӯ k"#M8޸< bk^鼈y$# ݕT*ʱHrh]T*=g~_K[,4ck2Ui}|ôeS9` %A9 xRKTm셱ew[߸I'*B~vc|KK[eDF2pr0r1 s u[Wn."6䳞0y]Pʰ$v6<'aY?: ( ( ( h!@\+`X2{؀jJ(O \=] 7*!I@%Xi (&êC˨Z&2oѦQ+wE AƅQEg&F w;.ɓ;[3GhQEQEQEQEQEQEQEQEQGծHbdUYJ\(rې\gШ?O_OнECuk h\X`z-ma6AkkvAFw}bj(!EsעúK4ws͌31=5_>,;KY xZYREnm4ݙ4QHsH?@Xp= (}ey1.O H##F8e ڳ9Ww0Z!H仐>~n߷I[)QEQEQEy?.a7 %u!o;b1pzF&\\A|]Ffw$|:7+j^N|?/QF>5܋)1n 78Suco{40b;9Ve9 kQ򣾶l˽1vu0aļ#xf]f5YvLͥJFnc'hj̒ķkdc+Xك0 N3Y~!+']PAEPEZj6:<ڶ|ϳfX/\ghQYw/SMrhgt\|ÑР { /VW rm_bjw||s_#_fQ ?NvϓZacj[ϕbsk5Wry/D?(;~߭tQYvZ> W}.tAo`m"P`q!q0rhvosI;3,@b0N 砭J(([ZC}(EG82PkMAmfD n$ Hw<wkӒ<<뭟}zibSiw7gקzwt"dŠ(HQEQEQEQEQEQE~ BxIy-''kﴹG z| ɍ#RSWG b|='.7W3;9$I,>R<`W?xO²tCEu@V]6Id e'RKRēF2EuDͧx`o#`IPFI)%^>GۼGg3*c'WF})7JM<26naU88nxlc?'wwns5_E^jv1[vF-L. A lPEPEPEF&u bd'q-1t<bSeF7Mo(%Ok˯gםnvmsV謻gQ3gם0\3& 8GCS\+Y_U.?l_k7y>M\OM6X3ƇY075b蟂Mh_0QTmR:\ 2w 1#+eY6ŽV!R $ pJ\E]:W:f >dHag wY-_[KsXOA0ˇRԆL2ʎ'Weӭ;ݤ*,#=EW<'aY??#R5]RxV;tެT$jsv@8?Wn2 ? |8ZP~w};KwW 9/?{o(揵?/%d>пtF\XϦoOzwb ZУh*}2p}B|C4ͬNZ(1nqEezoqep"y .dv]J(}q&qbto)"^1_.BIʎs|v*0rM*q%us \K /"@zB!Fj{Kiӧ( Wt!f9 virMz*A%o"s1g^A9*-Oby57?#ݏznjObNP߻[>U,./.>yspI1N>yO#n+pm+*#B71 d(dū5mU../#lεq02)8U&"F-# <;;sds]khr pmc:c$.dU)E߯eϦniZtS_鳾FD7sK]Z= q\1f-!qݣ9瞘6u"Kr/[k}zP^k-Eg-Ȟq2?rX9{Fux셜7YP$1<2NM_[)Rh/l`YI~Hv瓜ȯ$֮,[N-$K+I9Qr1󏔲F[^ߟM^)Q@_m#Ndz|>(]vX%[opII$H.WR$v\sR0AXHG}Mimܣy"%yΑ6(|-i";\;L&Lj9? WUW?xO²twXӴ_M7&wCow~rkB((((qK7? ww'RM[˳?FZ×xeBc*Ρy_L[B8A!A'Smc^fRr_2NqNNTܒ/jQYkVqXTf2s8$gF429Bz?ۿOkejgӚyYJ.΂F1A:fcVдJr,I $Ny2Zu:4j2B_q9@H}|ƛi~ wɾ]mٻE۾uoNGۏ=Pޘ5kS]Whc<oi6::i,(b cc<^)+K.] ~=~eGPM6f HOR2I$m}>=GMYb&@ FqߚTkjnUmZVa,n,V#>W 8{ AJ?]~ES$a][6OT9tdXayX1TR"l@2IMVt}Jȱr $G N8JvѽM%$F6?2Vugu^iyug<; n`ߌKqF~KoѢ)QEQECEu]s!+']PAEPEPEPU5=NFӥɵild8U);Bʤ ($7WPYwp 6F;UFI砢8.|ƲF#r8<4=BQcwJK u2^GNEP.=g>8[i],W}cOZG{[!Lz9'] ({Eܖ 0琹ՊM%k&hJfg_MZ˝pH<PjCuuoenwActE\ RMB4eKO;?;;Oݷvqc9S9ϲ|mqy#[F-w^aES3 ( ( ( (YI}%]בYG@~bElX(QEW/]yoS#Om2!a#eLAL⺊.64{y-ԯEwj^8#e,Xǰ ×`e6xʗ\LJKԿ[\M˳,Lb3hxCEuYW>(4k/{dy;cdۖKFh>,ΣgXO\n$.Y09 ; ( ( Vl"W;q3ST?eg>ڼ+7vN . ս\Z\E<DհppGAbx^Y"J8ʰ<A)Voio&vUu$ѭ,MES$m.7ZIgQv \GFE̺TMw%I25THyC=[1ϥ> +NYsC*9P0r8d֐4V̭XF>R;cEt9Sog^_lg;wuyMEf խ<ʁհr2@55Pvڭ?E/w3z_>O#mV͹WQEݮmڕ6hM4 ̭]< `3ƥ-֭[?nfEh+22`Ơ;dFO kouy+ dh)рdaAEhW/Z{,Ჳ\_}ğ,*;8X`goQ@w/u\xXԶWvyFc9N sug!}>gvsޜ=v7,c'p9(/QZy%kZUDj/7w[HUP"aB?Jmeu6V̵m;LOoRĥ~^1\rj1]Cj1*Kv6>Է87(/:Ne{Otx&T'3˴I&9$ K索o=y^fxq=sX(((((((Y Oka4ζ~h.fo*EYV4 e*ˇ%Pk>$fI"{a[uzdfb K MMJlbTޡEy<3xj]нGy h%\؀d%ςoG=bNKw<Ku#$\˒|[y0Qmahu RC?*9B91jpw6?|K ;yrr\4m d#.?jo}T^AVӧF<F]'b (M#Q5 mB\K^Iז9tcɸǚ?6Ѱ)OUYfqXuH{7i$ź >Po4fcojJ!뷿kԭ$r#n%XXܺ " @@|Oh5#[&YDGLp% 7rcC]К v^;Č!\#9,fNF+r(((((( endstream endobj 46 0 obj << /Type /XObject /Subtype /Image /Width 295 /Height 146 /BitsPerComponent 8 /Length 10703 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC  !"$"$C'"U !1U"T236AQSacu#$Vq4b7BCrst%DF7 !1QRq3Aa2rB#C ?&]8eAJRVME] Ts9tȰA_88IIAfS%jG~A_w"SIAK['H}nb:Z9+5FkI'<Q~wӘWaERY83 'e.HW[x;̦XCe)9:'*3NY;[thL&N4h%˥5#')̟+WUbƧ/R]?{1‹ǂ /֮c1v ̾Zf%ˌ 8*ݜҤ/%N|4Mv|jMݺ÷(T1yV2Ԝ3yFƵF)jY+x+j1‹[@s LZ[M "ڙ%\rR Bi _V`%Yfͼnz w(peXƏ(7S0Ǩg]a-~:;-k~dsWaEYa EKmq@^` ~^A5axh! U,P['>:CHQgT$YOjw)Ӧvj䃜l6oKwԬ(aw$h<ըfH: [},GŒןrn/=>*?flޖ_?IqJ  k&dZ,m}:#]}W"HJ3#}/Xq %̴RTE9dJ)y{ډʾ/7lOxq\'x#F:Sr.9Pta{zS޽:0=)^Y['%[oW-Eĺ_ff%QGY[ $+4}oG.wY$ItA%P$ x&b񉒫n! X[ֶhɇE]^_Ԭ]=ц!Ozz ^ ʰ9_9]7׭O]]qA)L9N!U'+1gYJy6I?X;H#x66RR>5`^N0/aJ{׮#qru:v ]z9?tWM_uF=ӣ CҞV}yu'ʻWCRIr 0eʙ.hYJIج0=)^`^P,t8Kruh\Cbqz1Xx>LF)6Вx)\3ˍi}(5G&!dp<k0=)^`^QllSKw; y/",XZqP-q(%J+ )e埿Zˍ%̜ܹKd!JPHU`^N0/aJ{ׯUg\| ksG'(g}@GQ˨z0/aJ{קF=P͗%ԒɕWzr02I9-2 #'I9fr_Ww6o\9^OFώygg x`gҵ0;rh琉6ܶzZ; +Y -x`gҵ0;rhd)4])-i+e=)JJRRjVۥ&nMb9ȫ@dA@4TZV^WmC7Xz#ȷIđ.pX4=l8š@JȔu%`@:W;c/T.᫕sf#qQߖuJqA԰S9fy%)Jt _ܣ299h (Z k iUg=c{&{ ޯi"w(g%¦m%,-?kkO?)mPzvDGuzy0EZ*uzqFnsî%JJi,H9>9e$wWo̳$EiFAJ@QˇVf>>kixj M y1Rs?@z1N>CiHBa9Yϯ:x`;g#a Õ''O: x`;g#/X;( göz";히Ҁx`;g#xlj쥡$M|y&JRR( 㡼1׏v~9{s~/խ,22k+r\_k t u%)=eC[4*lG,} ]1pKOCo|Z?*i c9$#eǻ?~e@VMO 5x7.7.>$--Mm-a%([RR2ufx׏l X‰r-p̬4Ȑ_Pi'i@Bp,Xsڱ )w'%Z8i< jҵKfA QZc1/Wg^#;>@aTڜo <MJ7mˍ>.ě۫Ii٢909ǫ*֝0Kѱ5=cl0|ȎGAu8kP*Z[Zu)EYjP R)@r_~DS/kDAU+U#KDH#.݈"F^[q9J3zyl2YM%BJR@\k7.^ or>3{񟀦#?X)@g|g)V P or>3[iv|ȸ_fSq|fYB5: JB3liJoU W!nN3|iP8 .-5  # J or>3Oཫq-=Fq1-Fr+);4u[q':}usw,Qmll2\U%Pm!ldS@́aor>3,r˪)@)JP R)@)JP R)@)JP R>~]"O uTVΗH/|}(5] \!kʎ3dj7G]\֘8}$9=;Z:u$Ϗ]- %3bOس-XR<͋?m?3bO 5*3س-s6, kǍ^,W!>ڨx]-Sȷ9 o&KNVINJ 9 6al[쵋VW8we<4b8ꂵ*JA$,s:Rw!YsKg]+ҤmC,N8gA fN@@Wfzgw t`6p!4iMjJBBE^Pg;ؾ e"wF;Áz^qJqJNkV:rώuUE'dA ׆ln:NjRn3)MԵd{ @R<͋?m?0j}w KcP OPRN5#,3gC"RxzB irKAVDP֣o{nʾCqLraeƇRԲ9k$8K=bo7cٟa嗟`8^nQSjVd$$f{fxݻlirEŌDyY56J$qHG @i2{7}ozgy]]\z>Hiz.JVkiR<*-ƣ-Cg.+@8 wS8TL\I'+ʳl|ŚaaqJ-RdYm6Pl咉4?9o.q妶ϕW3=y:՟ NѰnjNW:վst6_QN!\A,kg&۽jwM~Vdh,rAi.0JQ)IF(fxӶkdl|E|ȹH>)m+CK mIp!W'3(3_6m*<%O}!5'%>lAYAuĸ Y,\ 5IsێqĶҧmL`H^EvMѦiHmF578Qy:JRxo{7 VkN:o5<ۊs&PJ,4JLGNdi$ zg`a3,.Jqh S՚dʢ 75=9npJ7?kkO?*P?a4R$Ya4gqD qLfֽ!: ]Yp٣O)O) V>?P &ܵE5{ǺW}1BPKm'9O2\ KiImi)Z9$(F"??Ql}MSV3kqEJ5) _,G/v}܉iZ5E?@o.!jF=t*R)@)JP R)@)JP R)@r_~DS/kDAU+U#KDJ< }uCW<MwˮCBe,)JP R)@)JP R)@+4 %@ǁՆ֏>a `C 9dL+m8h]m5/Isȁmo0Sx?׶N%:[؎ŒM7lqgTL![dEY(qN#baT~fr]f !MmۥB R) Ԡ/ o0U< aǰ;mp *@YBIu2\sJԀ4'%)am\GUYo]0C7#a}o+ $_6Ŗ&E՜ۍBa4$,2u{ ?2 ]TRt L㙥xJh}w:c~M:dor?&7_! Qi=W27֏n_V a|Q%0 ̅37_! #xF6m@ #y~cg|97PT uxIuƮv6sQH''!L[1!6lEmbي1$AjzJL$4"(0+%%HP9ANG?b[=yrn^ou %l642R*δ27֏nNkGܷOɦMbCi<ٶ` ;{hҤmN-IΥjq@%2zdor?&27֏nL ĆґDFm+϶nUB3:1^e%S\GJ.0"tr[}\2cK:Mq(BRu Oګy쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJP wUw~]y쟵W}7{'UJPo b^ncKHy ЬȀFc R.g endstream endobj 59 0 obj << /Length 865 /Filter /FlateDecode >> stream xڽVɎ6+tMy 2A !V ؖ#|F[9%!cի*ʦ3 Q j-V_  Bb#&~S2,>mԪ}u5 kڥ%5oiNkikJ:^*%ȟg c˗> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (Ϊ\@N7'4*9*F; 1 HeE,Tdpf&Z($sDWS aQsӭ&,W#p#S3CpQICF@$)O / K,h>ȕV8=J)K*Y,p2H}I sK$m$p.EqQQ sWv^GB-GB\s'j9=SpQtyu99#ҙ{/aq7!f<w0GS㸧\`ǗQAr8=)}o.&o>q's u<;|k:cmNoNON۔1^QҎHdOI͍8]9O7'sۂ8dFGN8|pPr(8nO<qɟ;utM%xyzs}ECq7=}Jle# qL[N?T7yS'`͔FZojr0n*$u̞TJtPD]ҌoQK'[P2AL6O*%o:(s".FA܎B͎-O ʦS}G֥%Ai/ 7!ȻQy?2i<z_:oC>%w0k~ePxe[,zWbn͌Eo,r[C8t{=[,zWbn͌Eo,r[C8t{?3ӧzFl2 2q߃.~`2:tH͆AFN0{xof WL48ʝΫr>f06*D i2ƛSvGڼPY/VaG@ddɇa1px)ypKE>ռF>x=G'i?>lranp0ccJsC ̚~ \vF>hE;_sᗎz |ɮdcS?7;xg%(_znůkV q&erIg#U{}B?259F7Yʧ@wj!TL7PIgwGe?~)gC}.)Cv ~ea멻XnrdӜv䏡LOcV_&oCew2sr>fR8= 6؝aIaVD0fX|*w8G#l##mz{jRَZncn$1(# y bGwďTi'ۓQo2!|ۯ+it4z9'p{v ]oqןiA<۵ o2^;{CQ!y0|R?r݃בкi6KntQڼx~5ۨ`]HC> sWv^GB-GB\s'j9=SpQtyu99#ҙ{/aq7!f<w0GS㸧\`ǗQAr8=)}o.&o>q's u<;|k:cmNoNON۔1^QҎHdOI͍8]9O7'sۂ8dFGN8|pPr(8nO<qɟ;utM%xyzs}ECq7=}Jle# qL[N?T7yS'`͔FZojr0n*$u̞TJtPD]ҌoQK'[P2AL6O*%o:(s".FA܎B͎-O ʦS}G֥%Ai/ 7!ȻQy?2i<z_:oC>%w0k~ePxe[,zWbn͌Eo,r[C8t{=[,zWbn͌Eo,r[C8t{?3ӧzFl2 2q߃.~`2:tH͆AFN0{xof WL48ʝΫr>f06*D i2ƛSvGڼPY/VaG@ddɇa1px)ypKE>ռF>x=G'i?>lranp0ccJsC ̚~ \vF>hE;_sᗎz |ɮdcS?7;xg%((=u7k>[MW\:sܑ;cw۩OKNqے>1=[|U 50ʝ;G=H2bvީ'stڢɅ[c] msԎC,'mRw7A}!Kf:ů>ռ*LߺImmr'}x띸9^wWu I6䍼Ȇ鼯'ۓӡ`Aڐ7w/^ϡ$nԁx˹x:} Dv$ۨ`]HC> sWv^GB-GB\s'j9=Spכn iw# ?x(7)]<]y dE q̟+OeGqӿ>lqnprc܎JeEhˉϜf8 #O#;q]F,:Np=^X\Mmc2>Q8*OM);վb28=>:nRw|ezpz}GJ: !>'_67v>Ppܞyn㹓?1:w}NloA|<s&~b2:tS=4 T"e)Qfڜ77ʭq1o*^A;{QPMOhi/6R%iFmq|w 2yQ+yCwJ2X G'8pz\?m,lqmB|U0:G>ۙ<̈,ޣr8= ˶O68>d*O#Zr>dt,h|K"aF#iˍ: I|Y EFO=At}"Ull`u^߿)?63>unO=8}ll`u^߿)?63>unO=8}wl?$GN7(~ӽ#68?³[!ȁ_0[X|*w:;WÃتy+ |oeNU93gjpz@Ck'gtS[̈́a#/'r~& F:F0}tY/VaG@ddɇa1px*WA _2kD2r~O^;%&_C/(]/N8e㹞 ((ݬx`nu79^r2x;rGV -n+?.FO9nH5naVD0fX|*w8G#l##mz{j_&oCew2sr>fR8= 6؝aI-bO69$mD0GMy<ܟz%yߍ_|1'ے6"GΣnO֗CNyj@߼eܼvy>8=R.5ؒn iw# ?x(7)]<]y dE q̟+O^m0}0ܧ?uw`yut.Mۯ{+2|v#3߅q's u<;|yu99#ҙ{/aq7!f<w0GS㸪ƿ#=66ܤVlmIޭ(/D|cڃAry=#Ldtޣ: ){pG̙ӽL_O[[N?T7yS'`͔FZojr0n*ſxyzs}ECq7=}Jle# q2G\DEdE(9`6{]p]yŵ $TyndV2"dzNp=..Y<ڄ `u<}j_QTг},\.6z'-%fD3Y|# 6O'\m<iXU7ax~+HV%<8O'ղ7ax~+HV%<8O'!?0:wf ܣ'=<R#Ndd no"ocMG#l^~Cb@-,iq;Wh|͝alU uO5o6|QtFOv 1yқk'gtS[̈́a#/'r~& F:F0}t]?2 |ɮdcS?7;xg ̚~ \vF>hE;_sᗎz[( (Ok6;K;nna'hmnPyr72`Y YXzn<0|}DD}^w7fK,s4F!<Ҽ<88+@MZXmtK|L7$2r#0qC$nԁx˹x:} (9'p{v ]oqןj#$/6F>G~PnSx<:M&mΊ=>V;Wž;6:ݎzcԭ%[,NINw7^Mۯ{+2|v#3߅q's u<;|yu99#ҙ{/aq7!f<w0GS㸪ƿ#=66ܤVlmIޭ(/D|cڃAry=#Ldtޣ: ){pG̙ӽL_O[[N?T7yS'`͔FZojr0n*ſxyzs}ECq7=}Jle# q2G\DEdE(9`6{]p]yŵ $TyndV2"dzNp=..Y<ڄ `u<}j_QTг},\.6z'-%fD3Y|# 6O'\m<iXU7ax~+HV%<8O'ղ7ax~+HV%<8O'!?0:wf ܣ'=<R#Ndd no"ocMG#l^~Cb@-,iq;Wh|͝alU uO5o6|QtFOv 1yқk'gtS[̈́a#/'r~& F:F0}t]?2 |ɮdcS?7;xg ̚~ \vF>hE;_sᗎz[( ?_0Gmw}m$<{BFFlT[x{M-vZsW 28l| Uf?M~*oڍR\;,r2}OCO:IXI1=[|U 50ʝ;G=H2bvީ'stڢɅ[c] msԎC,'mRw7A}!Kf:AV%i/1Ha[>V>erkH3|}KvCx]#,v5 @ Gbx6/|We}zFoK2䅤!aWMŷ=3Tƺk2IB$*NH>dpٹ{ zFrrH\<.-mOWtPi#L*ݸ*Q\/U$^|-MXM7o*Y`{|Aoh3=ȌiY m/SI[u|vOs{dW:W46-kv_%jfY T W M&mΊ=>V;Wž;kF -;?Aӿ>lqnprc܎JeEhˉϜf8 #O#;q]F,:Np=^X\Mmc2>Q8)_'۔1^QҝM);վb28=>ȟ|pPr(8nO<qɟ;q>'_67v>Ppܞyn㹓?1:wZKq ~Wr o*{DLy(M3mNFV㸘w/ NϨn&O)M#6aѾUn;H<̈,ޣr8= ˶O68>d*O#Zm̞TJtPD]ҌoQK'[P2ALK9|2J_:oC>%w0k~ePxt,h|K"aF#iˍ: >*Yl60:|IڊX:'p>zYl60:|IڊX:'p>;6_g#Ndd \dtޑ r`?Y@-,iq;Wh|͝alU{ټe72sy8= !γ_:)ƭ09?SNctc#O#>:SmdΊ}y#}zOӠ22|ðaS<+A/5|B||v'wA/]/!˔.ȧk~nwt2ZKqQREPXzn<0|}DD_&oCew2sr>fR8=G.'K gBH?31 89$pzUB㥽MGh^?];k@c#̻QV;Wž;=gRJ6ޛ)2C.Id̃>Kp'kdX^Gw͎<X u{LȰyq3y;d|qV}u'۔1^QҝM);վb28=>ȟ|pPr(8nO<qɟ;}co]i McI,IA9<kC?1:wZKq ~Wr o*{DLy(M3mNFV㸘w/ NϨn&O)M#6aѾUn;H<̈,ޣr8= ˶O68>d*O#Zm̞TJtPD]ҌoQK'[P2ALK9|2J_:oC>%w0k~ePxt,h|K"aF#iˍ: >*Yl60:|IڊX:'p>zYl60:|IڊX:'p>;6_g#Ndd \dtޑ r`?Y@-,iq;Wh|͝alU{ټe72sy8= !γ_:)ƭ09?SNctc#O#>:SmdΊ}y#}zOӠ22|ðaS<+A/5|B||v'wA/]/!˔.ȧk~nwt2ZKqQREPXzn<0|}DDGU{r~,}p=Msq$nicnlՈ\𨫶?҃yj@߼eܼvy>;QG,۰Y7)Wv^GCC@.?5-&ؽĉ,nBA0 洵v7EPcY s%iCF$ Qov;~ #< E,d *FAS} N\`ǗQAr8=)}o.&o>q's u<;|yu99#ҲĶ7W[^hʟi?uxĐS 7_GSn[|偮!3wH̪19;K('Ԏ|\>'xM_d^yV1'̖5rp_i X. ;CFGN>'>< lo )ry=#ӧzw/ NϨn&O)M#6aѾUn;~Wr o*{DLy(M3mNFVdʉ[ΊȋQrm99#кidcjH28QDEdE(9`6{]p]yŵ $TyԾ_$-%fD3Y|# 6O'\m<OPZKBgIJ.Fmr6O̸yeoVc8>LWԑKryqOgeoVc8>LWԑKryqOcCgu_q&~`2:tH͆AFN0{xGN7(~݁ D i2ƛSvGڼWȁ_0[X|*w:;WÃتY<8%|jl#yy<4̌6907F8b116O: |>G^OM:#'͎L; юu<`RHd]/!˔.ȧk~nwt2PA/5|B||v'wA/QE QX~'hXn m`{rAڭphrݬx`nu79^r2x;rG|G}'ڶikvFB":!lΖ)d.E?dc$#,fM%vLڊ#Ƨ%h&[WIDl0+C!#2WiQKgdR cp͒0 O:T:}6\^;FUT;wgi9GO[e13\r61I6ǂ9prk]F+z6<܁Ȇ:'ۓj+gma͎m̈a#x=?ZА8=R.4Aڐ7w/^ϡĐu`L )aAN~x'ngK򮠲  1 )UUUܝͷQ|.nC.im>0J;f? ž;. 9Y׫K{wiw0%3JGHUTtƻm䷛Ş!$IXo'Y9Kc 4ZaVҋ_O,-SY3W%&\jI!#B`~b2:t^;,Yֲ4oX7 34bFGNOFgJ;[N?T7yS'`͔FZojr0n*ſxyzs}ECq7=}Jle# qs'9t rsGuv'̐eSp>Mʉ[ΊȋQrm99#кidcjH28Q}G/IPZKBgIJ.Fmr6O̸y΅ωd](mռF>x=G'i?>lranp0ccJmuO5o6|QtFOv 1yҥt?%&_C/(]/N8e㹞_2kD2r~O^;In *@+Y:2VV7K"Omzv[2(ݐj2^q] oŤƒKJ[a#>nRLvZڎ{m}N u)XB r ]Ur6ɴ !2ܦn# vU9`r*dWcPsݵme/-Oq RJ>GHi;̲M9nFL);>J8#4{;8nc+qIs ^ GL8= lN0nUZ*bf)5+/uElm2y͹y #u^O'RV'ې7>GU{r~tB@rO H?҃yj@߼eܼvy>;Bma0.!9˯#ܞGњ$ Q^h>}1nu`L )aAN~j0\M B9-d7ntn6Tw9{Iu>XMY!XP@rPA:)btmSK 2j쪺UVcmU b^-8#jdfl0Id䓞Cvä ١X UZBl:ǁ#bjn}GzκMA䑡kgcĤusЏ6`xu-|Uq=. @XG'sT9޹U>BWKºIf:s,ZAqR,I#qvPV% =7_Wc|EyyΥqY{w:.%~jL2ۑ rI!d#o ^ki=$Mq"1#|8'p/׼s4,|$ĉG&[$e#CZ>&4Ovc^ eM (7 2ߘ]kRaM[K'm()sMSZ?wſxyzs}ECq7=}Jle# qp$oVcaŧ\mx#YŴD KK"l$ǩ#;Ie&-&2$*Ed' yM]Vv: <̈,ޣr8= ˶O68>d*O#Zm̞TJtPD]ҌoQK'[P2AL'%}* I|Y EFO=Atг},\.6z4,DgհSu$~lgj+y`|ܞzqgհSu$~lgj+y`|ܞzq]~I ;3anQ)sӧzFl2 2q߃f`C{7`̱Tu]6v?yUf WL48ʝΫr>f06*O: |>G^OM:#'͎L; юu<`Mγ_:)ƭ09?SNctc#O#>:T_dKe 1E) w3KMth_.P#4_"psoX4DJ3*<Ǹtidd)Go&:^P+7p$ Fp}jVri (ckN˪tj >9v٬=u7k>[MW\:sܑ*[3ջɅ[c] msԎC,'mRw7A}+|U 50ʝ;G=H2bvީ'stگ&[16 D0y<ܟKQ[?k lsn@dCWiА8=R.4Aڐ7w/^ϡĐu`L )aAN~]4%_:(WkdX^Gq's u<;.0|˨ Q㥛9 ͭ]cw*,Qh98䊨|k:nj4:f[ZOg\]jew>Hv$kfchpIo9'$mpp$;,Kd$J?tb-Z@]R:ªߒ+C` ꤮;NȶfnZtw1.tbHK挲(-_6IAҵ?m,lqmB|U0:G>Fg bw?#0+!(̐!?m,lqmB|U0:G>iY[K9 _$-%fD3Y|# 6O'\m<OPZKBgIJ.Fmr6O̸yeoVc8>LWԑKryqOgeoVc8>LWԑKryqOcCgu_q&~`2:tH͆AFN0{xGN7(~݁ D i2ƛSvGڼWȁ_0[X|*w:;WÃتY<8%|jl#yy<4̌6907F8b116O: |>G^OM:#'͎L; юu<`RHd]/!˔.ȧk~nwt2D>ግ%Mw1Zuo B^aa3#'  [L[a.IXd e<'M_uϮS~뭎5);H.{?!N(+]MdžSs#'$}a멻XnrdӜv䏡LOcV_&oCew2sr>fR8= 6؝aIaVD0fX|*w8G#l##mz{jRَ͵O69 o2!|jZXdcr"G꼞nO֗CNAڐ7w/^ϡ$nԁx˹x:} Dv$ۨ`]HC> sWv^GB-GB\s'j9=Spכn iw# ?x(7)]<]y dE q̟+OeGqӿ>lqnprc܎J] g}Ǻ6p9' ӝc.tG'8pzS/e,.&D6\L|1ǀN(ywP}u2;g|Zp_s KbDh&d%^P030 nRw|ezpz}GJu66ܤVtC"}NloA|<s&~b2:tQ|cڃAry=#Ldtަ{ji--]'osӟ*0ESd-7͵9n7to[b߼Uܼv=9>ʞ>^l6J2|SwFU'x &m}[W2 P+Bo8~k)߷+:Fگo徂Y'{ߔ$IWiY1#AzW^XWezޣR8= 7cѮ$;yNĀ+W2Ծ_= ᧈ"ׯ˛{ĺũa`69Y!EiCry9n8aXh0T'ٙ0c cm-4=%2@fO7h{+o_颌E_7RGvι-y==.\|@:Wvyysa.֖nX*n͌Eo,r[C8t{KM6_g#Njp1ƳĒm#gUy KHIjr4sӧz>%,lUB8BrNۉF96qn/f WL48ʝΫr>f06+O\CN ;B[n_c$8[M+ťvCk'gtS[̈́a#/'r~& F:F0}tY/VaGwR񍽮tk ([ZJp2PI۹AE]o_F|W/m2% jƲ,|;{< [Xllk I'$y$I'I'|kˉu{.I8D. VN_m[>ET(+]MdžSs#'$}a멻XnrdӜv䏡LOcV_&oCew2sr>fR8= 6؝aIaVD0fX|*w8G#l##mz{jRَ͵O69 o2!|jZXdcr"G꼞nO֗CNAڐ7w/^ϡ$nԁx˹x:} Dv$ۨ`]HC> sWv^GB-GB\s'j9=Spכn iw# ?x(7)]<]y dE q̟+OeGqӿ>lqnprc܎JeEhˉϜf8 #O#;q]F,:Np=^X\Mmc2>Q8*OM);վb28=>:nRw|ezpz}GJ: !>'_67v>Ppܞyn㹓?1:w}NloA|<s&~b2:tS=4 T"e)Qfڜ77ʭq1o*^A;{QPMOhi/6R%iFmq|w ,--3;K0g84,#oCՄ¡簚yXnF dwDI&jwIk9r]mkX=۷ ƦFKu^vH d#Y;]hWZ{KX$o&IrbG;R~^)6i4+ۥDH%>R$Ѭi(ތ ]SܵNٟr.Ca1nSt a˭ͳ7)t^-.P^3dkɵvk!=V|r>.gԍvfLY_aUƩO 5ŌC!IvRI$QM.hVb .p\Zwi$3ar22vҌ'l}|/=jXM\['>ǡWc -\xSEMYf"3A3FX\Ԑ-o~+}.ORrQH16%w.tGOX"[c21FAHIz /?->OsU6W}_ջ>h~&_ZnمA+"rXB ;kMVPgBa%0z$I?4;b4|_jeVv2ehW72jpץBvb &FbA2rw?$Nm"/6m'5>K/m>]H$X% ZxvTP#7t;_w ;TG#;vd:nFR{h>lHA \ݳ/\`pŘG[1hy&!wF#>:SiKn}3|7[zJh֗fO o lI z |ɮdcS?7;xg幘QE @gN-b`EcN2C ȹR3]%k—:_Նhd-+>I>HU[>\}֡؛KK'ͣ,aY̬ #+EtY6 #סLL_&oCew2sr>fR8= 6؝aIm^mu-%`[yUdh "[{IÎح`M7%UmlHniRtS;Ta# sS: ){pG̙ӽa5pu>btyNNOO8ǭ8@5L9e*W/r;rs$VJfo*^A;{QPMOhi/6R%iFmq|wB~KhR "]y#LWԑKryqOlwYXkZ*_) ry#NyCi݀ oDߓ.}zB ?#EkKf1EVնr:&l2 2q߃b_y)WLBNI'nF0x9▞|cqqq-Xm:Le8Ƀq<WC{7`̱Tu]6v?y\aAUct?MTڵγ_:)ƭ09?SNctc#O#>:V#Zxۮhs:Ƕ?7N>ٿ.sQ@Q@p~;+k6:5m{qEqr,T*IV wP-&WiVr( KyK ;O?CSҜxav+Yr~QTcPEPEPC]B .𤒼jl'Lgvsآ(((((((((((((((((( endstream endobj 51 0 obj << /Type /XObject /Subtype /Image /Width 300 /Height 189 /BitsPerComponent 8 /Length 13646 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC  !"$"$C," ^ !1U"23AQSTu#$4Va5bcfq%67BDFGt&CErv7 3!1ARQSaq2B#C ?&茺r')Ja[ˊK 6RtIQȰdu šĥ{C'ڨeN L@ 9~3E!\/|N/O\p_x2VYcQ)]iڞ?'Q]+ZXens| (*'))Щ!Z^pO 3t]Z9b⫖t~]W» /ʯ=IdᘲvRI ~we6[@qyqFUuWkvx1^ Չ"aƍ8h/Ms$:ouV'OɣQ?d7?GxWaEUp‹Sl=M|"$K8*u CIזi]Omw&n脰:<<f:OP'R9 iIDu1v4kxtvkw (*Q~Uy6,S=%e9 )\%-%(m BH $馊Hӱ[je3&Zۊtۼ:k],Rj;ՠ`FErcj5» /ʯ=;v_^z[\ipSu2Jc=Ҁ uֽc*T{NItmIh1-H+@ *ԀfBAiDzop‹N]W1hGb\ |P}j4qNңආeHU24bpЄm}{qts I9jۤґh;<+ӸxWaEUZCn{PXj3R0|(⺵;QjO3o/;;e=ћh9p1:—Vǖ[t ?ut6IDb=DEšB62O9<+ӸxWaEU]Zl8tIG&Y_hTR TU1ٮ ATٗB,Dqӏ<^ꐽ?`yEpjmtj%#w?'xWaEUp‹R`7eŹ_q[S :+JZ(V!+̫^X33Ûy*)QU"D)yq5 g]J&+Va529<+ӸxWaEUXϪ^9lZ35šFq m$mHQ9顭1\_26T JHu `r҉;*c4RQ?ѪDv_^zw (*2dL^w-u<|MS* Jx(wA5ڎ1kƭ&ŕp6cY˒YIJեP15 XF(%Qէj`* ʖF*& lFҷo8zֲ? (IP'QotHz!$ŅE%ybN<"u@qIJR4Ԓ5>n|XëEJR 4|(H⧢c?y}MzO՛7WoIqJ  :imyn7rӯ[  OD"DUO+89%*r.3m-;!ĕt$]G?r}?VlV[- $ I3"ru;o%OhFQLv7r9γ/RYui<29ОZzha,(kۡAf6#:j-VY31-I*BukIG=#Q{_]W$IDJ R]åj7kd8Pz!,g%od[ֆJ@*]Z#ZdYy[`^(R%yަE@*,7i0[owwyi ĬsK{{v'XPUF8p0$0ꬑsӉ=U+&X.I1פiQBԸ *Jxk0I*Ԙ^E%QT.Rkۮan*$Pa,:5* x9Wa1!(S6umRVg\l,{!-a-R7 uIG_ˬja:? KVz*Ӳ[%sU4J5͹ZPB+R4kUa:x0{ySޝNkZhyi:!%ʕqZf9̬d)ݑL-7ͭ4nM4^['tK#.IwPaҵ5t R}X*YC܍Ɯ<%Ҵ)m{JT7Z/a*{ӧ =֟bbd֝KfJoF7kGxb;1-BBUZtBj/+SlT}M[/a*{ӧ =א̌>Fen*x}nEI>#j 0^TO/a*{ӫ/ rSO1UG* ծQ]!Ozta:m(D& ]iCN[lƶXďbGw]okA=d~hnשy3nf[B @B@JH=MZ_/a*{ӧ =4rz_,qըTU%vwQ_TP^Nezn3%vHm֗Di|7J†Q:> 0^TO/a*{Ӯ^Q}nO_*K "l=n_Έr = CʞT dWSMK75.5WQ.}u^um;x6R*JI`ycl{굕d^.!# !Ҕԍе9 #\[FneY%t.7KRZdwbɖy (B,N}gJ7_k]9V itDcw`lj<"{{ |u*Q枳_:Xw^]vEfnxӳ)m@=vr^RR*Is@$s/k:~ʕ^%"[2Kn<6DyMT-)݆6.Vq-VI9S;pmoGa-9XQ [CR@H.[lvJ93]c1ӵݍ- \y(QP~soԜ=q4)JRV8joQ@L)JP Rme>o?me>o? N$_h% wߗ]S[';~vmBBa+ x#W5.p|w'Nۻ pq4F=hQVP>W/#_#Y[zuĩI@BtԄ^kQ'ڿgwѬcg1n)GN]Zg,Z8d6)P;K M4kזzמәPlؒnKA GQ*gv=tpw GO2:%X;Sa<jҀw`;g#NlDygJYH5;ްv歝( g{öy"<հnXF{@tAMOkY?U)@* leJ1:}0iKo6UPHQKojJ Ҁl_ z'nqLG%5-{q o(}JWXq▙v'u[\F#p(TAZtPٰbJRy$-r%6G@P%#t -KRw}cmf1+v %|PYṼඅzG4H(evض9xe>VXEnkqIXBRBw=;ԞZtyb΄)Cji@[nCE%I< AAԠ99:,O\[\49a DuJ<11Ң"9Vk&No.:W;qE!@l]AR9/S 0lV%%H$tЏv{Aܥ0aa枀%A[i(QPIDe}q[TڜW>&֖-Ӕ3[<-@Ѵ%CxJP R)@)JP R)@)JP R)@)JP RYO[.}%YO[.jc7gF{`^cJ}џ[9 Z7t#Pu?5.p|w'Nۻ}|?_N(jS)#T+Zũ:k۬}/~e?}/~e?7}_FX.㶷]\)d(I>&wS.>zwWɼUid\rA)BIJ%Ă?A4gMڧ}|?RjP7jo I@F{+AX ,hHl \i$zW,C=w^+? ?~Ӆ?Vh ( NY0R'8QfJ4GO՚+? ?~Ӆ?Vh ( NY0R'8QfJ4GO՚+d+ͻ0_E*PBޅ@(]:%:yy^Y0R'8QfJ4GO՚|}t+uu?%jT e)hꥬ?`dp{g@~pe>o? N$_h%{AM˫UU96.'m`f3ڕe\ȶT^V3 U%1x JIq7$[#dvw9%訌e!O4h'MR'Mkzvg9vA?tҙo~J.HSz-`JMuXQ]mwlH\|>qv:U +Y VR}e8*l7L([qwJIr$ ϰYvٷ86>%*j?[,+DoԍO!\ f!mpMX+Q\O(8%,ҥ>ۡiRŲo,RkQ s-b^&rrKb,w@}2zZGα$rg},pm5.:psCIN:FI|7%Xnn87sqeo'yxk=<ݻliq^3̷+ ']ؘ*L.k,)M.B񒕔$z?ʨSW>7;P ٭GAijޣm̖lv<N{W5H[Xc>\z%䶥nЩZkƳW;_!3*DH8絨i'ڿgwѪQ_(|ħ|?[;;qy^]~q>;;W5J<+vCgS7޷2^W_O~Nq>;R Gk?8&~%<+t_ӿO~T¾Q O Gk?8&~%3x}}#(yuW4_(vCgS¾Q LzwH;qy^[.Ǯ0nYq:IRP53r;%硇\J)jMHH:5|?~pLJfFQۋi'ڿgwѪQ_(|ħ|?>v}w}wjxW;_!3)_(|Ħooe.jF}w}~pLJxW;_!3)[Gn/+˯'ڿgwѧjFG|?~pLJfFQۋi'ڿgwѪQ_(|ħ|?>v}w}wjxW;_!3)_(|Ħooe.jFw<t^wDQDy:ՍNƦ|?~pLJfFQۋi'ڿgwѪQ_(|ħ|?>vXhtiw)(I*//=g /jFG|?~pLJfFQۋi'ڿgwѪQ_(|ħ|?>v}w}wjxW;_!3)_(|Ħooe-IY/2Qmx&'HU:Ȫ15pT¾Q SQbd 1drbHozuDd6Bz#Uisڸe endstream endobj 63 0 obj << /Length 758 /Filter /FlateDecode >> stream xڽUK@ +r ̎=ת]U#,hB;lo[$74X[TS7#KBJŲc//*nVwMZE<Ĩb&g=l6RumK*[*&OOã ,+HŐ* &TE6j u|{xvZ{Ykk"զ=v"͑V:TeeՈBf:ߎ1X/Q|kNie3~h'h!2,>+ٻPK{ӗQӁɟ&+/e& dQꩠO?k BəHU P5t}ֶtqc7deA푶咛!3nCƁxZS+֬5+v˚{] qNgt̠8IٞaE(h}m/&iSHV7o_gS]nXvؽ.甿ޢRqYK )Eۼ''y JUQjghbjk]h5E=;J]LClyu(eaݩO-ߵ/\g< c2']1"*ܰzĮ; 2m}Qr&hP[;z˛<68- 8mۛ)444=LdeyxK#"UˀD\O FA sICALF endstream endobj 55 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 288 /BitsPerComponent 8 /Length 15580 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( _6Xd[ql ٠<[o|ȸ+1xݭԢ5(ǜdDOz^ ';A=2i7;>iic.m*Sc PEP "YK*0 nMox]ze|wz& B>wrgXF9*ZTŢ2)cHPr :}d[E  kNJ٥j(TsOT *vbG= ܐ*Jg'\5{JQEf21%a2FViVzLH(aEPEPEPEPEu<&e@eae)# 3{n>EPEPEPU[Mk'#xv%>=5W8Š((ϛSCe9M>n<+>vs6QEs #jqg%ٳt+q">@^s@_%q$ D?0w 3ǟE%qGGݥԒ~!LTzqV<='CG?:$|92X\i1J`[@hy{eko-ıH^I$`I$椠 fPM:JeH#$dodV! JhW0R$mpG*J@p8x(Jԟǁk{so׌^ ?V8@y>\݇>$9(ʱy\ppIĻ!^LI ֒Ĥ֣gPpyRGOQ6t{X4Y.kj R^Cѿm+&]F4OΣ՚pǷz%S5(u[WdTKp r=ӥq?,x?-fo3WQ!@sqGQ UΣxLi":cyك ^>rG@ ?gO.-h%6 8 s]u4!&կ&|.ݫ=ys^mF|+y`emPs>#cBzuD>(x{Y %M+ bd{mqsMt\K]ݜ?qk7W D,QӨ>A⽋(hZ;,%,{pa|(w96z3>8lpAS 7`'8!8J<<}UW Ng:lDMES:)ݮ弥`Ϡ zOV|Ksnۿbۜg urBK0`X;؂+ֳgâi?VYo#'dA9_Z<3|$)cwIUX;aS؃޸O>-wtKXtB'IY| (r}x*x%~ḃf*B$6y<8q׮|IԡҾddk7c;ڞH.3ힽ+Ͼ.6xq%mt"~oqv#|Dz%oٵ|$x.Nx>hv;Iivb6'uXXh]ˀeU=@- #^_˃?؟fyqzC|1n%a;˂V<|Syws6ytM+Lᶉ]JTHߪ˙2WPNGѼ;I51}o(UeCN{ <5MWH.50Bt @'>Ǻ6^dHi #hc1x187@hmQHbD*œ0IOGC<7(^ cF +ap;Erz*yך}h;&6۠4<_ c7\l-7ߙjC$f47).,=h $d^+h}v{ou<iBÞ_j tk˹"JTtl.29he|X-/<3zLdÛ=ɎW$ f#o™nm<,[G$F8S_@PEPEC(mcP7nSO6yqrvrNK-/HaTiε9rX>O兜~e֟q ) ѰQ# ?3r,SC DpvFՠ5&Y $粒͙*9(q4Pt$);SW9{aҍ U!YHP|S/Z֒dzdz"ak0!\4P0 n9KUχtikD.!XC史pY@`Ʃmj5/ ~Yp^FCp^9ޛCSHm턶YRic9lE \A=XxH5n%uG`e- 5+dѴA Yjʺc!Ե='_ }0ZL$FX2Xg'9Qϯz|qxKD[q2FZ)@ m˱ڟ|9:Ƈ'tյ]i-4)٦< 'H|@ iYA\RiƉD4_Zm۷֮ pTik} uk3o\m6GNtN"FW.8}{A+BGWlދՎHŻo9,@*0*">O"ib f"0fFL6 vk+c[CEԴm5+8-^81I#7]1q[V }3NI )1ڊQmZ>y^/$4q QXPՠzSRA ) #]ʙ#C$si /tYoy{a Wa9$8bNHCz}Ux[FT}<a>ծCJ@3j P\7ޥ < b3#D~5HMK!2,K5ىɸtǜ)$ ӴGQ-/mԂLƯ29:ry$W|w6Qܤ ukeX0$[x[SƖ->W&J#hf`ٹn#uo hw3"ܝ7m`Õr')o٢"y{+ݷ1HID{rA#>j?=klT0lcEܸ8lܿ_zuͅ燴9-nxfO`C lzU?N 6np5J$Hie96㩠;k/Ķ~>m[Ij-QG N3٫`煾 "" mEXu)gh(W *unR`nbN:b#:[iՌwvbTYH*z8$t&0i|:_gNhr̸8*+!=Fס( ( ( j>&b.?F"[?*Ry#>z򎢊((>O\iXw"2$s1>kspǜ)g+ .4_ i&e.On6&[6PB|򞢊(+|~-7?.HNdfzgoP¸?=>>?-ۯ6P(EjkH {{5sSۣI N@vI՗cT{V-JTy#5\GmnyG+a@Q@~ftHlh˫8) ,HH$jz J(?xGRb:vmQEr/4]2'7K-(x၏!A>gX`OQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV-uDiAz<T; ܯ3.ɯ%eH76$h՜Ʋ [w2HQ\Wſo.lgCjI$*d`LrB+(((((&ދ#N0є¦m4Š(AEPEPEPEPEPEPEPEPEPEPYi!.,?>{y %bRs21+ӧ(ƥK[KH`]2[<7-+Hu.5qn9+l?"LHtY":MGqPEPEPEPEkz)ғ_fӭs%;B$IV"62IE]P*qDܿWc y%#U.i&|ec2%C8<]%yΗ&?:iI+A`#>WQ8'i|]k^2oya{%B#6# $'tcJIF[?7Ru+K]:J( ((((($9(ʱy\ppIĻ!^LI ֒Ĥ֣gPpyRGOQ?m7PaoeZ\i_p̮зj0ʑ}+c]-lR]:ݦe^`,!_©30]F3I+N^zZXxvHͱ Jv 뫨l绸}AI#`$sRԕ*J|^>w&XjV[lHBod!'FApHtM]J. JQL2Ks:Ʊ<H=Gs~[/M5xUFGV7 cX,O yZ]H) 0*r$kmKolj}^'=_;_Úo{Icrd :%vךTKw=y2jlw!$!QeTI.s8^y@Ҍ|}|49i;kkgL[eɁ'V1r'@6e0 ~j5-IhY2Ab8~&{+N_\C<7Ro:K p <$[y>(J*zlnQ[ƲCՃmFsZ5ŧiu' 2&6Xϕqg?4_18贯iڛQ<[O4SG$ 0G$pr;dUѕ(jV}Uܢ+c ( (?_moc3 *Jb+F.YP{2IJc,"rWGF>Y;+o۵]O[)fkXc˴Th ]2͒IZ5Hh"љmٕ@ nKY='m?_/v 1zcb+Oa͇ceK6wd񌚝+ - 13Qds4m ^M_Xy۫[?-* "VScq vTU{(KUE%Oo[yo5<1weL<{eWanizţK¬r#cy#' Mt/r4l4m 8##&uv?jͽrIc!IN:D*N2sNDюqQK﮶VWWEEaejK]O9 .[3]r+Ff@Y͜[NzѐSNd(ki$r$5k_7_MoTQ~\Ne6'|~@fbH H\]EU)lcV4׳aEUe2T:tsgѫ$HȒ6UX>Vƥe2T:pH'*1FΑ؎w6YT~f;(z7mtkh:co}>:tI$w6'$sօa~M2IvXy ;mnR۷h9irUE{5.i>4I9n4h9hwI?o!,}>kŤ?/-VVwcd{n#uwncA=\b5^8M'ːmlqujed$Bd 'i' xIhK5 64Se-QqClԟl?ȴ}s7"kQ~ҾJ~k+%hoC[T?a<P'r-h6Ż6qJS@æHl?ȴ}s7"iw%N?*ͥj^'hTeCKIDFydpۋUyӬNh#KgX`OQEQEW-7{xZ$QDȲ;[* eM~E2Q@;zAy?8`cPbOV8>SQEQEě٬ u,ѺXؙov34\ gVX l_P9}wwd˓͔<~pǐğ3q|(+a$9(ʱy\ppIĻ!^LI ֒Ĥ֣gPpyRGOQ?m7PaoeZ\i_p̮зj0ʑ}+CĿ>58wnێ3(sGz VQ.#$х),SUi0-:8^.mpTʰ A%JqWZ^tOEVc (mS~%仒2C2. .8^$jӝIr]׋txN[MIdwi u 8`.iKO jզ{/GU-8!U\Fc cb<7a_]Zyzն+E J`:jbAXoWf^_U*7՜?!]xVuׇͤ6y 6ZxgP>^V:^K$;e1+ +y%}֣0DӤ$3",FV P UUч/[4TZV~Z?4sB+?`uHVKg$69*Qxȑ8ſm,_~B)5ʩ[ vrqu.\:LpѬF8+` `Y]ïiD--3$g R5E< C& B5=/>ktZ6ov:+5 {Y⛋al=.OcMp 9x Iύ0"c)5(WMޛkԺ3v VQplO, bXL 5MRsfE6u)SX#c=w_FЬ㽇QYQE4 1Yߐpz8UۮgnHksm5.o\= 4#}9隶]_ɧm2 <$e&Tƹ14Nv);+aYpLj R:r$v;V$l|Yp{L y QgsE#͖U|NJ`i[7p_ڽ{|dTC9V Ut-QQҬm\n$dNzЦNra!#>幖*w)Wi,۲I; m{]CUZkm]U%#B_]j@E9b$dT[s]+QZ=[byWB6]2֯O$g#*e}8QXZOZ٢:i01q r aXݴ8&}s7" COܹM)Y~M!g܂OZ)YgVmXԟ6Tv])Pr074t\kW$m&ujh HJA\p5~h9hg?oEb8э/ AEsl?ȵ^V /#zTe-+ɸ}۹Ou Bh9hg?oEh9hg?oECϬi^E}rׂ!#@<H5>h9j _F6$['զV;pfrAWNr%8m岿s)Qq!-:1w>N d  4{oZT1e'`ݳfT'jų%TQǡٽgc2U9-Wwھ6cekYT axZfZgx* idپmܧ{bϽo.,Xb<./oth0i, M@_0:kr :?.%$;Q@dxc}s7" CYTRI#xZfZ>h9k!s7"ֆ{yi{ e\ 2V* ѐ€4*,VMTۧ,PFzsdԜv`QE ( ( (8s7 KKyӯ&.T\":) y'ue>&kpu(.-88HAż#79l~cP_ٴ928"JBEp^R((<s N$-|:gnLBJ>U ǜwV^{2$u ۉd{ala\|)-:`( ii:$6seqDYٖ$$5`ʽPEPϫYϷgJ-2ɣ8<~|wS-[[ 5wI] iyKs{(/lN uyG%!Vve X"8AAEQEy3ҡu̫hN>**wU#-b DDO6{$7;<" "dJ0vyEe{MI!.#$*̱! |^>U5( (8x_R֧nUԦfDfvUh@pJpC=ŨC<86Yer9,sHՂ/*Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ endstream endobj 56 0 obj << /Type /XObject /Subtype /Image /Width 295 /Height 189 /BitsPerComponent 8 /Length 14543 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC  !"$"$C'" Y  !1U"23AQu#$6SVa%4Tcfqr5BCb&RstG: !13ARq2QSarB#C ?&茺r')Ja[ˊK 6RtIQ۠"ÇpqN-%+t:y~ Y Z࣐?W|Ȱd+-'?s+,DZlN>uѢ%Z0v[+]6o'Gw_^ڈyETyo?kdBhԲ3s#ŲZIGw_^x (:%bܒ:YlE:GGCdSOKvx1/Lj0F[ts$:nNGFhD,յQQ~u{i<+81O^ ATٗB,Dqy%]YݪBP@u7 -PGRYoT=;$:v3ixtvkx (:Q~u{k7Lv{)lcom BH $馊HI-qęJ-mrK::k],Rj:KFckGyQ~u{i<+ԏ\ˎw`]nqMm)ZogiP]kߞaX&<2GdlFԖSԁhEZ5CԓH-({^y,_2<+xWqEf=tt|--EPm- 'ܩ< G:*> hoT\#F/: =HF޷{.a)'5[M:R:-]W#»/ίmgi EAaH- #jRy+yyml~ ]XS[kql-(a@ϏCdF#DZZb#ZViGJ?Fl޶د~3+}bZln_ KPO@)SY7%cms;%xr.ݯ6IZ,duOGm 3$'q5WegHeiDЪ"5kj9Q~u{k&Ǣ:ڄ#] $y? FkcqiFRUo|HO$~%l6o[wWk"RU佥Z v[ }X-ل &-%(mZ5S̏t1\63dljX\.Z{^ۧj tPv Fq6sB\T9~ލ:3ӜƜILjUn RTBH* !\&+8Dh? WaL0ĥQ:ZM? @vIKh=ϟtv͒GۉE#aqRΩ#]xhv^l0^ۯ~UNhblWUTU({6tjB&j@ OĭH믎 =!O} 5)QVD$xW*WqZf9̬d)ݑL-7ͭ4ۿnݦ+xdqoBei=cE#nݣ鮜A!O}y{zn)k/:K|rlawmZ ۸ :t䙥ՂLgh"os{wMi=f<`=iO6/qZ{0MMt&/^~Tی!OZJ7l@B}R|乵?t'IQE6ߥP'Ua<`=i]TkVѺ3&ng#2i3boynChdSfZa*f"ҀR4N> _Oxo+#.I_orH۷j}ΚZl0^ۧ ==?_#}on1.dǹ5TfyV* *$SIW]/QYO%B FNߦ =!O}}[ҘЗjn*˝dI79ja@jpv(Gn<Χ3^xɒn! X[ֶhч]1ح@ȑV{͆ C֞tavjEZXkDKRFaV⫻& 뫮7JDS(SsEtN[ M.<\C8Dz[w']N@Ǜ =!O}pZ|k}^\ ^:`񴛂߷rzԴp.L*!)RVOFѯ|#2u.;=O8f%CU-JBQ: C%J!KvTY1Pq.$)'E$+Eh5AK6#&-ѤŶfmHoVQ$yNRGD]m6j7t~&Ĝ‹VJJ *ON5qmT&MmW%V(am$/NvW83!rUZgmҺޝnLD]!E*U{yYMgˉpiÓ9֋qW%B4:%Dq}98Jb؜xqU# ķ5O NN*Owi$f2Շ\dd20aey*iJ(Jh~~@>ÏNv{eۂq2޷qŲڔ(Ms]:wضK&ĞI#"{,6)KKmέm)j\T($9kx0G? DեCM7omKZR${'u@աkԑ*1xf|7"=EBH;4pU_yg9znZnJi`Sm^@X9e${+Cnj;a< [օ)D5'|Z'޿5gĺe,.cv/iN6yh4q=Qy=`;g#[:P'lD{)힨el@k! 6 2@ HI$vZP ze*/KwJg]m+4Ssj\&T%a)n,% u HxK)ȹd":5+ "I)y@m* mhV'Ҁ6hz9׍᰷.) ;% * N_k$AU+TƮ8.!#@̻vAB7ۉԍRU,V=(e4BP  hr]| }urRw^ Z܏}BnG>\ EcsM%<6Ts;އw_ɟ/,{񮻳^'W廋OKne,vn#P[ϨT V=b(FDvx)n%! ԍ9:%"ݣ1 -[YTwTZZ֝ V@HА 1r?9 u`)~s~#P[ϨV P܏}BVNvW()JJRR()JJRR()JJRR*_k$AU)ZhJ1# >J< }urUjVLk+{f ՠ:(umv{-,[LDž֙m;,i[wtQw^ Z, ޺\.4AeujcpIB9G.jo'?ym8uqU=lѮJB!mbvѐ6-/?otzJ RGJXHl^8X-S"Dv[䰖S)}%:% s!6k3e@m̤un)י +)Ht䟧 k[/(7-jd- A<=@|G]9j6Yi׶&?M?jTgg[^x,4k@IQem{il-m&F|M~e0j}w Kc` O` ~IW#ٺ_~.7mF7'];5icv|u|og6mK]* dkѽoYBѹZ Rˑ\@V g1A|XɷoZJG)*JG@p3]m.iIjʚVq7ԍO!ZKx-?><.u_ťCy?#֣ Е,ʫoGK7#n6lB-Q~C}R8Ӏif9oxَ9pnL&^DbI[}Ũ i/wMKi@uw[dK+d6'Ou8ξ#᠝WN9q&,XlLAqS%Op wj93{q2,KYU\", j$JtGD[6s+,2a[gFR+(`)ݻ`)ҹ]l)$O[\7 Ǖ.2;E[-8 MHͫ,6֛2S~|pRTӫJ} $A@iY,h'4e2qIVzZ$5Lc7~ΫGg宺|:Πvތ/v-,>Hiv/hyqjAyK R(34á'nZ@1V?WJJB$u5YǼv{kn\SlaB @Q币UW;Ƹ.9ob2c-=.COzڐSilV<$Wls5g}eI0w㲈BIRʎB[ؠ.W8ǔLGgv׸{ֻǥϲxel2\a.ٚĄ'F^B$iԀHXJyk-omjyTgܡ3nm›\9Z-Gz}٘Zu<0/S~= bq_~Qz hj@$T0w?J<2+]"Z5pat ~cOڱ8_(UB+E)rEH*T_k$AU+TƮ8.!(5˫ Uo'[.5'u@ՠ)YK|)1Ggu5]nۼnNvj>:Ðv95hèbuŦR (%jRfU<&.t Ҕ()JJRR()JJRR()JJRR( ZhJxeVD%RLj}?YMs] Sq0XHBU0?_*mkmi BP{; ??jb֟?׻VM槕|?RjVRsʗDiKߢYO},㉒.@^n4r܇PL%+#T ?AFyRSm8LۿRn3ߝ_Fyi_tJRVvOj~sKޡjy_ɽC&/z_&TgMݪbL,@Ch'Aۡf-BsXT:T_k$AU+TƮ8.!a~@[V?-jӬ- T5`~{:9ua;w͂ RGN#XevR."QyW[+vn_,i5lL<۩Y5'n4{4g^V7L:v9xZw]9 hmJi@g?7uI`H)$~o~#X٠M$! y@)JP R)@)JP R+q(M hWL:t>?ON?ON?R2+]"^O [KSk mjNҠS:j5nS_o0Oo'[.5W_ynԝ׻Ve,)JP R)@)JP R)@)JP R)@+?!_q=I"^X>+q:x)IG-jO#81G 1]z/p⡽$zK!#DG( ,Af'ƒX~8uǜݵ/rt'^Zt??Ţ^#[omu.912s.+aǒVsTs^ιgjv<*6]M!㖐,m'8?PʋzBZ|מt{"n41\閅9uBY:88+P,TJ@.0F<ilH(0(($@kդ5*eՍ_FW->$7).er^sܷm+)Y;BRWh W$Fm)$Fm+TƮ8.!Ӽ }urW͑l?>:Ǣ\_^KjVҠڀ:+Muqu~Lʴ8Q"+"y򼿴_(|ϼ|>[/*y;!A3)_(|ϼOo1^W@ wCgS'ڷn/+J^u~Ly;!A3)[cP/:G{?H&}< {F1ۋҨ|>u~LdVyiT ξQ yO:G{?H&}2x}|ьv򼿴_(|ϼ|><>վoh;qy^_UwCgSξQ yLj7c/*y;!A3)_(|ϼOo1^W@ wCgS'ڷn/+J^u~Ly;!A3)[cP/:G{?H&}< {F1ۋoC_(|ϼ|><>վoh;qy^]ə(Ǜ7t(PˊI'B?XXfG|>u~LdVyuf^}]߳TξQ yO:G{?H&}2x}|ьv^}]߳O/q>٪Q_(|ϼ|><>վoh;qy^Jzz߶ͥjD{:n2=qBnd5u)릻4M+emkhʻQ:!ZR^? endstream endobj 69 0 obj << /Length 900 /Filter /FlateDecode >> stream xڽVɎ@+|t} n܀q<3x@B#dzՋ>΁2v քBbQ+反7owV{|d Uc(o3Y*N_YeDF{Bޮ7oDVw j]},eWnx} $nDvuo?~e$<hC!:到ɌR\dބw'a$S2^&`PEws;p~MFnɑ.2{2 2֏FzHKCֵEoO)hU4&McF8v<$z\[:}*wÎ:=+ (T$E.kbGcǖT,'l}wwPdm(8Gi>٤vҌ]FL-V@$r2S .s=/rN[#rٟǾǁ4X~)7eq- 瀌“m,xL1oLvN'8[Jl(z]f`X18Ow<:ǒ@vCIʗƒӮIM ,h@;wñ+Q`޲4GU['t θv¶LȠg-Xƒ3ŁLqK% ឋֆeVS~o #LڥF[Y f|@s̸iA$f`9M>1OX™t)-xpڕQi2DϕFd^< 0§%))w/ʧWGPKW<(OsJyX^Me,^r/Qy-x1ߩ|8nZ endstream endobj 60 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 288 /BitsPerComponent 8 /Length 18088 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( &FoE|N^1R=kb^_hwW6]A,H ckT`ߠ#?Q.xMFi㌴R aulw|)"2H!yb2Q##G}aggiݬ AS C|ŢN#X=Um˶Tdl-?X ۲'@1GqcagYgaiy rI8Q$5$C3/&em+;YGbGz=Gĺ|kq-6 Fή&[ 2Jd*ղm|;f-RvREEo~] $9/,;9, 1"6#*x8 ‹ =2;; H--c`FIŽI'חͅ#WPK#qvU>w9ȧkg>> [OwXцI䉉TÌf"H!yb2Q## ռG4I#C+ qZ;X,)-CbÒT` 㬳;Z5=1H[Fmҷ0z]Fh'Xy>noqg=}M\n巸9 I]H#P:X;6֗z}}UЄ.Ÿ.$BvI]oM] c}IϾ1r^m|}Yv~t{{-M6\ "̸# 1>ր<"@ԬM>}ON0]ivXhA y:l4NkB`dBRF1ڮPEPEPEPEPEPEa(&KK]Mؑ0,?w!oBRQdap-, +M( (7ĺp^N]IX.@ IH@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ڌ3dڣu9E*ûQ@"pqHe_:AuD\G.A\Sx=JH:3 +GDM"TVparCIciT/ComIWlUߵy_Y8\a((--֜ny*TNY2Áa +><6S[-Z |.ʶ60ChPEP~cd2LE#m)ff.A%6goN̉m~؛IcjPEPEP?y%FU(z7mtQEQEV||Ceme}ϛfٻ{axm{w$70|JT{*m#}8UyH%TT%BhQEU{ߧ\<Ǘo'#xFܻX;bޮyS$$_uaTob4g|F1 Xn!aǶƣ:Z|y[a>S3m| ]N읊(mg'kuM #r0N# b ( (3;!͞evX˳wvsE|N]y:yːF8o<Cҫ|CZ'c?0޻n~UkPE^i0} 2'O"9r 򞇃zP}"?"խ#ّ1 "O|cc#m] nۧlP6ON-h@Q@xAѮTwWI8#>Ƭi۵ƗZ_@QeP#8 P]=W6Һ [d7N}}%ٙm18=} vQEQEWuiˉϸ,w8p:_B'o߻(9ݽu$841n~V^envv GͻmX]0ɽ]A)<) 841n~V^envv GͻmhQEU{X[0)[.vNko-ıH^I$`I$_ CrȚ 1Z֥p,P !lix P_}:k ;e~Q8GZT˖W#LF72\x04edv;U# C!FFc(+H# yNI|$q~ll$>e~\jcm\0:U/*7iFs8ڙEPEP>_̴ݱ>nvn|Ⱦobnm\G,3#F?)or+|CC"ݹY}B$V1!idsAج{]7|iPM_Zv>X9M$(ϽͺRmo>Z6T띛#%WvSYQLbJOx߼ B4(Ksmr9a6 >x9K|`$bh.1,os][pˍQ v=g}X|phܼ9oEnۧlP6ON-h@Q@MF7P$1,1ӓ~^QEsPo_J+*FWA@Q@XK +Kב6k E"1m'=;椿uiˉϸ,w8p:_TtF'loJU.ۏ0VWYqXȳ6#YPH*dewesrh]0ɽ]A)<) 841n~V^envv GͻmX]0ɽ]A)<) .6x̛#-v۝hY2N{`,eRA ger7!Wv#ܬ'Xӭ`G2kzwhVMI[ w,@}6=A֬і3ZZ_2q][^cA5_|7mvܲ}ۊ>s?`wc2(y`EEii9Kwnn#/.Бnsw>s?`wc2(yH(,~ll$>e~\jcm\0:U/*7iFs8ڬX8<bigyIRmQ9U|߲Ǧߴ}+twjB(iB |('mE A$qe./FU*um$Cdb{Zs$kKS-JĄ!WS0@*ZxgDbZ|o|IL*y`ȕV8=;|KJ_| ˹89nv_ƽ{X 8d O]d]ɱn zsxV!60i#Js.6E-*)6BjKvKw^A mf01YCypqciq[ 0 \cT`{Kĕ#Lb.%XHقy1ˑR6*m-j_tUo7|,HPXۀ6\nJ>UQ-E,rnl.źSA,EA^1/Ƽҿnϕwx|g>\۲[ pxduy]I;~W.+?cbp04+>ȖJyVe1wsaYURN 59& sqʡ#8̟}h#M{x Z鲴v,zz`c5kXϳH?2fd#>jm#Rcddm67_i.*eN]aoĩͱ{/5K>9NC1z6E.`R2F!S#+,Tm\1~-c].@KI 1eT#herN|8`z+ټe72sy8= +.~ ߚ3cQ̀:= [Ʉm_{sNvC=6?y[w߳Ur./X),u}0(U?pnwӇ.X~}~o<;Ӎݪ ϚLx?3'm<<3L+>i1(nopx3cc?y3ˎHZMM/-엖燎i[ƻqe5H+Ǒ'۬W\n//Ͷ>v7273&oo>n._sB7ے1,;~m|]i,PL\ǩ{3D̫>ѺD(C5oyM3}\8o1$cYv&5 Gq$]VY"_uA~-3$ϼ} j'8Q[pˍQ7'ā)dde6 8jNգۣeE+#"1}# >'Bv_1.Tc;h_⛘aKH6P"x# U,b4|?~t]ݰۻnX|*oq|\5ޜvxʬַ$ Jݩw Z޽08K9"#;uo*Nb;n၏-nتiNDbYFu, _uG̑?U1qv:jo{WO S.8!rw np5ꂶ&䌝VhaPq祭\.b"d.lwn@N7ڄ('fa56p ls302$2<mg *}ص4fK; 8ıHeH)7& [.3FlD2PQryz_@zP^o_YveA,,F$SK}3Ad vw =0k2AZIx 2-21iQ-&2HyT Vb(NnqQEF!Ea^%Z6N}\ʶXc,UK<*PIhz:˥ݤ msmwY"@88%H*Ch=W6Һ [d7N}}%ٙm18=} vSŋq'"öù<}Y|C˸̑?`snalrzL63|Gƽ#CQ@T3nګufjQS{㾰d"!.(Md / rV#sHk9FX"SsQYbv6XzEЋ˨yP|׌ 1gnTE-x%.wwB~XG8F Hxߗ"&*5ztkl[Ku3+hU8,ʡA+@Z\er6TCnj_״[u[OM-ob̊(_\y.Vˍm:2VަNn7m_WtKr;xu{tV;15pK4bL õ~U.C; ɸXu?Dh8I#%'W*7rvcpڳz\?ikmo4!1"STjӳb,6߮۷>_6U̒ox]m4AyqI|||ءNdcNryf/w*WoI7gyqpˁEs;i2.$i[-΃#:0zb'>{_GO}g"h.d\IS!Hdm;$c dVc$1ė*w3j9o_:AuD\G.A\Sx=J{oIx3g˳w7K%K~R,Jis-kb[o,qpN축iY-1 3yRqw9ȣm7%y)kıE >O끎֕g$k T>UNF&:2Az{/ͷ3VuxN~ctî\C'ɟ w\F{%K[vVʵ&eUZ ,7 ][ol໷}O` ҏӄ[v/z[OZ|V-~ŏg׳?[coZr? go_'ھi'}I9($*$lp#$(99mY-- _l~?f3iZVKi^2;!mRYr P2+DJ~]тWw?Z-ǗEۼ3bEIq2XZg8QE_Ig( siw-2C-)e@9SV4}NlMcWB<1;Չ< Т9(z7mtCѿm+ ٯuFx$yЬA]6 峐wެ!vk O4!IH4;nm;͓OZީoפ`{FHd!|UAo=Xi/5EZ6e1yh@Sܿwp˦[*bhaI"9P);0xK>m{Dl-o'8 lFPnvR(Ck~W2ou]g2ܖJql"qr%W4Ԛc;پt2i>T&M GCMցss$:쓟}_~xo-7ʱ7#=@4FTP}nIjպy𦬃X^UG,@ V`ꍿz{y˛\Grv6+z|Og/G_NN }._V['-i"yOmäl㴴ʷ"8NEQ€*}XI+}#+nfA]ђB(QKb*VOO5+5_IF7"ap8L懺=9Eʀ5H2ce\PUբ|i?:fuռi6(L.G ՈcK iIŸY.PRW8Qp83MN[]JOR)>j+l]̉>NSnG"4>{?n7yl߻)2$wua};wk‘ĭ9lM٧\Opݹ]~ѧ\h.ȝ<#k7zY:ScĚyok6gd3W-T r,YiI!_Xz|ޠJa3 I>$w JؐpqO_h*mglݍTgq\5˛[s{{.nNR_5vo\'ˁkSı-F #2x‡ۧQֳ;T|/v?ٺ]xIv,cME~Wa;xEem:VUP( Uf4+?J~ ywr~Yn60?c{ZVVG,')n=!u(g`J|(b#n &iq{Ft er\#!Hinu!-?8yԅhPՇNnS]58q_ŤGo$%IaB% c maTZv JCԊ@@)ءڡGIPIrVJ$o73vh:9$J:${dP1:n/<'|yX˕wVœqQo}S/7RVV_cn7(W9OEf_t m>ej5P}cQK{ϵzdkFXv|!ˋOuZK{[˘'߹=s?+{Noi>o>d|iKc1fg0ivW7zjYR2426!nN~|6ʙ&ѭ)<і[O%?6.3,j}ۓ6.[ɂ%yJ"FpŌlYάN iuwckM' 7Vm3 S_, |ٚ>s\]}Z7Xۢ?tt$SKP8wKINo6x2?2D򋵷06O=+֗VYW DR ni-"s[HQvWX0J̫ydVWqUc()Uw;k~k$5OspBu$"z˖[e9&/P18H `Pb%_[Ǜ; ǵSS;F9|ņx0ho& J8n)qk-"mVFϴo۶Ǜ; ǵSS;F9|ņx1#"qqn1ڮ8 K+dbŊi=Rt6,~ll$>e~\jcm\0:U{ ?]\Ickg헓7/?4znm ϲ6zB|oMbp|͒x$I!f-̋%]G•_Oqr((U36i7l{[M-՛L(eڣlɐzq土b=cbHgF@+d|;q܀gCѿm+>]z_NcWg.]N3a@̑^!TiV>(m򍴩AV[G2rI9RPh7Jy1TP]4:Y";Isy˦ґ;@vÑYYw)F4WFe5OLkkWIⴉJVI ō\8LҔ[/sAsdFAu3`ʅ[?* Ͽ}չ-os~3 뻦YQEgCMn~.~ߐ˗Z_ubK ržm1p(:eB&P]w/Hc"̒y eo0% F*6WpY^yjb?~TɷoD5f\lk֧D<<6詹0O ,\MW?.s!hda][(@ǝmavKKG6)ٝTQ6B1;U7& ؞6Xi wB,aK!# =Apmӿm\slm66t*V+^W]{aO X.:|H<<öù<^viO"AIH6'X;^bJŭe-vp[]~p>NpuqiE[Gl[ `ӱU lYCaU[p .衪o^SmcݍqA<{r9=jgӮgL\N}q`WO#u:UF+lXA$Uϧ\-|'s:GN HDNKfyguiX*M/oB%KsiZǼ:ϗ}n>xؙl1QmYmmjin7T`#f:",x!KՑ%8Fή?( 816*0_]:2US!A,e9UA(}"aվU^{ QEQE;3~]ծo ɸalQ@=W6Һ ? ѶPwW;1mZn-}}oօQEgǾlc淹?{wC{_Bݬi[6yd1e{Ǚ?/ZР(((~-UӗfgO|6XqY˳{y_3|@_,T8->}cQMT^d? ʗMq/-lgʝ7Jdܯ( ja~`5>}cQMT^d? ʗMq/U=R鬬txëU}%sؤsgy:O.8gϖ9p61P9`ǁ@ m #@dXIRQEOLkkWIⴉJVI ō\ 7p3XqGSujWuiˉϸ,w8p:YyS. oQ_M-cyVEI|e30,yy HUaI(,l Fqn^q7TQEQEQEj7eb|;wTq $x&<7tp}6'Ogr.J1@Q@Q@Q@cNLnayuk2nkjdppA[PEP[}oY~ΜnZ]:-NqY1 cӀ27aPEPEPEPEPEPUm~,rImú;Պ((((((?D|yۘ1>wmȻ*8gRy$<6e;~?nB ( ( ( ( (lz֭Ziz>4}۴ZUtk72$`b q\h9hrV(R4I؀11%$%sl?ȴ}s7"AEsl?ȴ}s7"AErz4ŷDҖK{gh5Y$ueH6 PEPEP^g߳xO{wRZ%b=cćN='MTTOMBd-¢W^8gHW{JEPEP/e&3kOҮ1wutQ#G@QWS/K s<0 lS*/<+ |=ϭ\((]s'm;RQkfZUA,%aPAH߳xO{wRZ%b=cćN\Z^3>i&]l$eNTADzN6hɲ[Dpόr((;Ԯuw#k"J:[-y͐Moiy{V:{]DBlUۀ |Ӹ-c_*O~Ξwק$zN6hɲ[Dpόr(6Xi wB,aK!# =A(/[Mzo{{=7gi0)ՒY \!MezΩ{{ Y֩ @]H\c `k.-NNҬn,`Mn{Fڤ``: Iu [>{Gm$Ы-rʃ=(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ endstream endobj 64 0 obj << /Type /XObject /Subtype /Image /Width 447 /Height 60 /BitsPerComponent 8 /Length 9793 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC  !"$"$C<" L !U"1AQf27Sa#34u$qr6BVb7 Ra!1QAq23B#Cr ?Lt5@)Li(Q@6.I*77QD4ie]CJw|ئI@t(1c K[&]}_s+,DZJN|.5 7 \G8uBXveGYI[ʇRnF|! (|GJhqPP{l:+BUlȩJ"EbJWRRmh@)Ēmk)#ds:62XHʚ* KAXޛ^6$X\ 2;Wr`F[#a\ گ~ Ep(_j- %iYZip)Ҙgz7%B>)U*mSR2X&-"ԁX8@H;2B@҃Y}c* Wâ/^hYOPՙ4|%t4 m 'Y8Mű_v7C*!S9KcORzqXzJI:RH::+BU Wi BXj2_e+SUT@'y''9vvl69pՅ;[`)iC&CEOB6hq4W6}tWߋ]LJd4t$ls<1e} ШlRҔP7QP݉j☧<FO%dhiǞIWVsJ(}od&׈%#EItW߃a\ گ~-YBӔ)V 2DiKSBQ K@% ֐\Wte3G6si*\ a*& Sh{Sw\(o?"Ps5V`s8â/^P{9p3@ӒŪIkCmC8TҒl6(o%+D4<'sWfqT1BABY*ܢt~j} MF8\fWW~â/^P{y~d$\]=J#B1\2_J*ZqoyaJj#9JMJɥHٌa\cÑLJnp_/cTp bJGckQtCyn8@ӽB $ȭ= E~ Kw)qTܥ8,xXzu_\Z]JCo2RKwq)ԟm2Cƒ (ZSܯ&! CRTJTb?}1z%a}m8VꗥavQ+H$%nť}8̩hDV:+BU Wnߴ_8!YZϴUa\ گ~ Ep(_jkw nЅdvMg*ϰ Wâ/^V5G~B;&gtW߃a\ گ~+E#[hp!YY:+BU Wnߴ_8zɬEY}tWߊƷ~/=VGd}P{l:+BUc[hpkw+#k>V}Ep(_j6}Ɑߴ_85GB5h>â/^yvMDTJTlU?nǗTD49: 9G)!]W$q8VIɹ~ HY 2U"uĨI)w" ).Bҧ: u}vVIɹ~ |ЏVE_oI(\t#.Ðtw'v0pu+Ɯ[4=J?M̭Yi}KPOR=l:+BUĵs<$K2g" ШqIE͔/1B/o.!E*iv%YQmz\V$I$}O;+$fdۿ n-3e)j )^'cfI-Y KP 6OD\ yM&  ,^֞?efIWe*EF>v<FS$.SwI-k#PR7XX̤$dT\tb֟ۺ\r@ VLViAR, xca&%H+oć49j~I1LK`DIm>'_ OsNx~[ Zt/diR ..vD"0*Pr-ߏQ^6L2=;a\ iߏR kMiƒ늴I(\E|T1TɥSܑL KMjiצۭᏖq6K.C.kԍ:tk}y0ˮ4ǃɆ]p'~% :IĄz}0e٢(r-1O¡A)y`ޤIMmpo&uy0ˮ4NJFRO5,Ȏ$(ٴŸكB튒 )u]]FBaMS *Mphç.ӿ)vA k0VF&%I&-#u-4kTXs?Be~Ơ// <wzP?,,8se@91DZ'bOmג t8㯭)Zt6$>7.{2:TTe2B:.t-ތ8Sq{_Po͹Eu>$4isy,TǼ;:%iRB :)ZIݩ䶃b҃mۡ6!)+֒oN9V˲3**hI0ND4!/.b6 $#N&̊32g Tr d:DB"ouTK6**UMљ%˚.~iMvT4L{)A!7i=.Dۼe qI+.ru<\tWEL<4YBRu+SDBg$kQzchǚbk0T"azad% аIBF6[p͛%EIC3]3 Sn)&BM-2* )sgM1[q RJV^dthY%F:jgNE[SLCKV$)K SUxxʏ_Qu O2,ЙPPFbrkDhJL R>ZHZ$ ,6S2mrkFK]""ͮA.5k`,Jill- dsSù!fИgBPݦ9NIdKI[AD{5:E6[Z[{`*l [k,nNm7ƹRAy}4C԰ tjJlGtTTaMlnES0m;0 Bí{P oA RlEoQRbHGiqf[ ,[(Z-@sݵugQKcq RVqHAuYBnu nStaS9sE0=B̲&+6^BmӫJ$!),t섡#GD[~kC2w4C6)a6**)MԵn&$Z 29xT}]B?/S̳K4&T,!Qzjv0-ROD&wx3⌆~j=- z7l%H@)3komDG*0eҚF[ CA3TpD!eDY&pyinRY$VQ3aΑMV֖bX p) V#[j,ӛM1TPh{_M1F,"lZ(3)Syl[d3驝9mNޑ1/^Z,)NIW"*>@eG/rE?4BeBBf7m u(q00iJkA!jhl7w;꿑N(g鶩ɯSn2}.=vT6Hy=])e41NBTEBa Oy@^h%U o7 4f1<q(ui /bEe5iͦR*X(4S=bZvp6NIM~foLJb-A2C"ͻHқDwF<0E?$׿tc*YL~j1m{F?3*4&QDͩF`b[t 7n6.\tGtCPԤq,E]NFj鶙6FoL:CMݗh}(najxCm7~~,xCm7~~sGⱙWb( Wc&6!G}{;_RcJ#\Wѳ(::t̒|yIP"@]L*Rȩr\#Y2[ $UƢHf^Q*O ːTSSQ})Z+ia= Q Z<@QX7joOV'EI*&fkD_flŝqv H? ػ_M|CgsG%7刃}'ʢ!%F'mx\F=>ܹj7V7!`7!a?"}'Qa}zvzmx\F (vXyMzvzmx\F (vXyMz拉rCr]0\@RՙR$|l?̋[}'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>ly\?\Lfa.0"w`?"7aڮOkWkWw`?"7aڮOkWkWw`?"7aڮOkWkWw`?"7aڮOkWh$9o%)=Ye)K?G-Ⱥr~E6.Oȣ ma6UnCUnCr~E6.Oȣ ma6UnCUnCr~E6.Oȣ ma6Y'4\P4,ğźXVk%JWS. .w[}'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>lp(T2ރTd9nn;ǁ} (r~Enk)\A"tHҴ  r7!a?"}'Q6U7!`7!a?"}'Q6U\]QPNbe(ge%jmAVH\z7!a?"}'Q6U7!`7!a?"}'Q6U7!`7!a?"}'Q6U7!`7!a?"}'Q6U(T2ރTd9nn;ǁ>Ⱥ-9R:ⴭ2E6?x{}'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>l^>l }'Qo0݆Sj?^>l*ߤ$>>G endstream endobj 65 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 288 /BitsPerComponent 8 /Length 10931 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(3=wGfY#5~~Zxg6 3ǖc$bI$IIEPEPEPEPEPEPEPEPEPEPEPEPEPEPEN=V]Rm2;qb@d$@t' ((OTPmJy0A-ZlPM ;|dLr ̤ndrEV6Ejqv궏,FoD/cprA'0B pFgDdI ʬA`P U$w=*J-DdV6v}}"߉m1g=}MvCѿm+ow: M;z`roc񶷩k1h7vQYL~Iyet*ycM|SwOhW!3] ;?O'`Iq2(M ܒ ?h74-wzox䶍"kVD/v IB6!KwO9!iLyRż+ߠ\Oqi1:C#Av$ 1 zl y|;ozLZ~*ol>Tgv[cHS>x?z>VIJn q  uK}mڼk ٷn1=Ejx{#W:v#;Tf=~Wc]K87tbL KX#pIhM?: ]B+Y}@]otK) "bC`!No\kA .*A-!'`ׄt q/DEg!7}IT>P0 (((/-etM'R>.e[E,1*WE|($qV4=rv{[,He`H!4NJ`i]sPo_J(((((((((((((((((,Pj~:O#XL3xut4D` Im^9<-+[=2; 9TX~!!% x].YI[EEVE:E 9pq,Qik $9XaP(@$kj6v|$[qGOQV,o;8,.໵;&A"6  88 ¸,Zom5-5ŤO=~ah1hٜĬQZӵU-`/t CvN(z7mt7Wn*o3-qH1F3; (((((((vYhsc+>7@ #,2y@pylIb94TE:gD~k걙@gzjQTѬb&}A-[cW(Ál*ko-ıH^I$`I$1Oj.c2q *6T2G<2E7M.RԚ9u)#$m QY"ev[ It(R4,\~Uՙ+.i bA\!I$3T#[`$C$NZPEP{~ѧ\h.ȝ<#k7z\~=GIA,ZlK_e,l$(?UxPOJ.Vk*c9TtC vǂmk[O羧Pk?͙W؃hP pƧhߕX9n38=X,㳰<h$(d"k_XgJf{iۦ1% y =#ˆic3@o3*}aggiݬ AS$CkoQH8Ppb C :mSY;~pv“]GPWP۵vĨݏPo_J+ѭtz_٥ү}{b[Lcv׶3z (((((((\ILIڊ cc'{Mj3jt8dSlBƸhÛ{O/R"4a1 "Ld5=?dW .APVuQ+0dP[fNcv7[m[Nl`;!.p7rK_]>o.ӣ&沍C̊`+*=Ynz.n.;,LsN]㻽u y" ADAh5麽q8Gpmڊ'?CCu@65mJF.FK0 E,@8g\G8Df 4rE# pISVb((((((*8 +{x$qơU 8IEsPo_J+*FWA@Q@Q@Q@So&{I.7,) vlXM(y6ZIi,|0Q+`ʧ*.QUῳ .vpQr3ր,U=[RFѯKEQK2@.|]oʰCH̑.zǺ׊ 5pGc=A3)SmPûKIԯM*}:PydYE. q>l09&.!ayK/,!h{Q*\q3r]QEpC E<ϾVUm ;UFO`jյFYmV_6q >dqA<ܱc8BĚ{y,%,D#9B~fR߻\;/uJOkhVmBpwWU86RmR->5 dk ]x#^ =*QEQEs/peJ-k#ޒaKaei>9Ӥ`aյ B8bR+̦)Ll59$d!K3:#"HTnUb zJ#Tt-QQҬm\n$dNzТ((/JQq\k3{r5 (ݰ Jc".w)+~/#iuvMqpdd?~jZwz%]ʓbYڸ_݁5NIt->{s$04͒r }jQEQEqzTFY;ۑ_\m@FRS.wN_noqg=}MhQEQEQEQEQEQEQEQEQEQE> stream xVKo8W(#>E=moM,+;RB )rÙo>>dQ' eZN5VX і4_i\& ,XludZ?Osk[s#_PZ(;0XYM9^SXRlAb !uؠP]p5us#6-QJ]1%QnigvOZ꣧/do5  ll lXڕ}O|-sZL>J;fknbQE~}qu 5Dxڠ)l4^v5vJei2)h ޔFp9ZPB)j!kJЎה1rԍ;x5&ƶx69}-W5/Y2KVZ-ll~i@LA8f)p endstream endobj 66 0 obj << /Type /XObject /Subtype /Image /Width 295 /Height 146 /BitsPerComponent 8 /Length 9748 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC  !"$"$C'"T   !1U"T26AQau#$3SVcq4Br%5CbstGR7 !1QRq23AarB#C ?&]:eAJRVMEA$D>EGq :uRNP2+PJ7 ϙLq ^lxIJ١8A4F_~u9V%);ޢXCZqGͶO }Eu_]'))RBx:Z9+5FkI'(ji=Q~vԖNI ~we6[GƌWEzx[tzd4&V'l4v_6kJcSQee~w#=Q~vӼz+Ik*2hEH.26qUɜRNwi8Mv}jM a۔u*xx t5,|0v7 ҞPTپw-u׊sI=Q~vӼz+1ZS^Ҷ wYNBJW1KIJ6BЀRN $RGH$xNӺ[IqęjK[q\@{grV7Yʎ 9ŕ fh8t+'%wEu_](jjG.7|vM. nCiLgP%[e0*\x1B3!C@w}W\px춅订]EWmo8cc=2j@ ۍa!Gkoߌk ݢ4{&9㱩oV VL;LIýf|R=Q~vӼz+WZ3TѴ<[} pIy*A*B' T$Ä+ 8rȝTkK}|\7,%y\B0)DVbJ#'J] v஽'>OI;fO+BP,WÎմrc}>ܹlږ =H0GOͻ͆!O{ug,i7v˵q1FVW-i9J5͹5!@ O̬M|rE|h^Nl4/QJ{۩VJ FW7}.\4TWsW=iṷ2t3[)!Q{68͝n1|K#.Ig*F87溃 CҞ͆!O{u>Sjw{ ~ɴ:-#AKK GPHR5Ղ멦JPSm7g/gmX'c CҞ͆!O{tYW'T-|c?xz{ο^f*mr-%[O0n%l/[_,M&F")m B]1͆!O{tB Q GSo9i}b7[m,E6eb-( FhWoBe?i<#rF~3BsazzSpO_>Kco1_o~vL{QFhelD@:_w*J0;;xss CҞ͆!O{t['v۩u}G.wY$ItA%P h9;ƦJĀ5`uoZ 8mtxBh^Nl4/QJ{ۮZn躜 ;_Cݓ}z}*T3)9ƤFs|a}awO<6[eq)iahv I l4/QJ{ۧ6=*wOu[Q"p@֨=QRgS1aaJPaҵ-d $"ȅ" 2%1QDvRZ{(m+t]g͆!O{tBԲ݉EG ܽR=}/ʱ\³f\ǩҗeRFq^&mmj9Q?9&ߛ CҞ͆!O{t\A4.- \乾'ۚl4/QJ{ۧ6=V}{u92Ǣ,vNH,:=.uLnKZRA+tz>J>l4/QJ{ۧ6=+e5]/uZ.7"^V $V}i}(5G 8 Bw'WsazzS9нD=)nO*iئvwɧ",XZqP TqK9se4m40!)BH tWTsazzS9нD=)nYVʥs!k]u9?+1iRG9нD=)nh^['Cg6\RK&U^kߡ+´˷E&~*,N䝒qk稦ݮ-λݸv$e-joPJTR+gL_fN%5[ Ӣs qRf:"BSC) %KMo5.Qvfq+5g-rS O%Jq)HKI  g4/jdfSjHv;̨a+a`6RH89 s]pZ2dFۃrTH֒!gnq)#6E4ZJ[]ا"%>8_yenRY?Q'xC`gҵ:h6zZ;h +Y -xC`gҵ:hd)4])-lXw=)JJRRo'y,o9nHJU&Bt 6NTJ *rgE4%JCm\>#Jl%ipvUBű3nY߃1-F2bȐCHOӍ QH SW>Z/plOk2..{eƖ͠QN3Jt:dž _6ۧVv+yeفƞq ?m;rٰq1ټɍDCxơߓqJp9ozoL7k~4wJ3m'! +b3t6=K'wpM,\;aƹTG[BCR0E uҩ? '4nwgU@`RsaUeYk*! UkOtC"[jsZfQ^ەišZ ZKKAB? Ӏ/zT?mᵶβޥY22)IZRNTcvL€R(QJwemw?JjxtDiw^z7ku= -jTJI8ja~] +ZYAKo/!CCQ=c>'Nو+Z{Pn"I!/422FGAX[qem+ǐtGMz`;*9pzjh=ftUx- KD@?%z|=}kw٠>omLK&)[! qd>Lk히ʌ~5ޜ\Q3jN[1zvDGe<u[:PGlDvSQ=zvDGemy4xlj쥡H H$ $M)@*7:NW#pe},n|dW4ƸHVÈXe)~s~W#p+ϸV P\}±VN1_()JJRR()JJRR()JJR쿍QTv_~DVGKFz|~(5wˮjVM5G^!8ڰ9awM\֘:}$ 8PkGgi 9Ko/!CD64+kjŸxi{me,I* ݣ]_KNzwʷ=:%lYl  *):C}FmZ^YCcӻJ(^x5zs[7m(qV:=- 륹-Q̒('y'64+k՟mvjTgڳwV~@IQjOk}n2 &ڟr]BڞS)lo)|9R)@+C]x[33ےoqJK%䶕_ӆ u\unơ, L8%ǝ1C[{!;[)8qњ[|y~y >?5OEJҡdG5,nJxұ}ǜm+fjR2NwFRk@V\/gi%C#x}QS???J5of6M5lUrl0Xږ\67>jV?_SO V?_SO /$O%-H RJRR()JJRR()JJRR(QJwemw?JjxtDiw_/w_XAShNCL]#F#u+CJEyr1c*_Yp-gZC2l>) B6JpBRr@qtUCw9_)Pm;)H&|Ҽ\=aDofҵZ<:_O"4;7.oWtY_JIaMA}i 6ӎ9o[)Tu_98$`Ry8=ii'm?Գ}fĆWp{K7ӞNzf`T|$6*瓃޶Yp{K71!)U<R4瓃޶Y7_! Jo<R4 Hm, U'm?Գ}9oMbCi`Ry8=ii'm?Գ}0*nCK_[O,sNy8=iiSuXNzfs[O,sL ĆWp{K7ӞNzf`T|$6*瓃޶Yp{K71!)U<R4瓃޶Y7_! Jo<R4 Hm, v?Wp{K7\3pxPv`(,uL Ćw?F8LѶ4EH__E.-86Jҁ5ykGn7_! 5f:i)0Jèj:!@䶂 ps N't"|7.@K6ll2! #J$5瑾zi#}mh-1!pm-&4u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@9|-UN_;dvҔ>u]OWm)@X5yn'S#)!׆#)VA)JV+_yp/GS? endstream endobj 70 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 288 /BitsPerComponent 8 /Length 19347 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( +]8pY[vC˂ybeFeu `˱}niz{*"h1:L\-gX 'Vmi5r_%*CBϚA= tQEQEQEQUﯭ9.LB$f$I I x-h%@WR2#4%Q@Q@Q@Q@Q@Q@Q@Q@Q@N #ԯfeK9`(?g/ۿ,UJ6*ӛKYQEIQECѿm+~J`i]QEQEQES4MfRFrL:CA#Iacoiqv$0vdpV(C^k2i0O#ݢH$d!]UU pAJϵ4-F{{}nSqfHhQEs/Γxj엂S7UX6 l+m`((((m } Y1H"B2vD2 5TҬe!䶍!M)8$p p0r(( mxU&dB `պ8U` #?2<~u%bj͜K}pnbpO+'n侳u==w՞WI0_-CO t ǙߐB5U{Xپg~뙥VQEQECѿm+~J`i]QEQEQEQEQXzg[Y-LHTdhYV`%:.ws2YIy7Q!DŘ'EjU946mRR]>SdWm Qy_n}jv.A9Qw*4E9!H @5((((fsy'kk3'j(%'OCm{ I"n`TPfBp~V8 jW?qiV}.ylc$Hh۳ tPEPQ\ZMєgHjrm$AZ\E<$~-M 11N:d yV$+ u+)IE9= sYڄײ_@,p!XX&8%x8cwB:$׮Hfb?uڹ#sԃ]擕vT*Ts6~M';Q@/Ş׵-\\M'*8EVUpRdr)Qm hW1OpeɋAhvFv8Un;Po]X|CӬj[kHĶǕu|9+0%cs@ &W8ʜ 2ao:/籞8oq &Xa@(((ƣs#b7"e,(agoysy ]mD.хÖgX _ i1]j:|дHة7~|Ü A\ߍ|1s ]ZM5YW9*:sѮA(;]ͫ>%z#,lQ$l#MBƗĚXX RDC2v.`2{4mdPʹ\o i"^Z{2OP]ۈ(6zevvZZǝ$ OV(((g%RUY[IԮwZgHX)RG\O6Q$L`l#3UܒF8Ɲ)Jj-ߗg5K]gwK2:A08$ jUIд}60p,I$O$Nx^3KsQVQL( =OUviW1"6&#*x8 ¼Ɵu/\7<yvy&aqIQXrدc*FWA@_eqoQn/~Z+ԟݶo@lxn⸷9$l]H #㯅F[ũEn$/6|O㟂:Fgւ<9W B:9%A`h+4/yV<.$dS ((/:T։51ۼ-,FTeWVdt aU&m;F{{xL@.rI#=O^Q@sZnuu紖'l–d y(Rljp1f!&-"J# (efhql3]sm I!%r_~вn@QYU,Ũ^2"U'*ɾrkی#cWG#uy qn}l.y?\mN~մuKi y-h ԩ# hy{䐈i`31 8 djQ\߅YhQ42^Y"w.3^^o<2w[N(aSSo&{I.7,) vlXMj:Ή %)}]7Έ`T0jדi5,vt̪HANIz5_ڍΫCwym%B\# <8PNH N2@#u[kgv'zr7#󍊯kg} "Vo&@\цFAU((((*hv$!f-#NO^}R^ [9g(ddg늒!3*@q>"I5R+SQr'4ZyUB"O^$k]owhgΣ>*u5KdAV8a3K-ovux*2$In1U,Tm z{Ǟ,8YM}y;JE]ˈ(0n{xDMt:.HF*ˁyUw6TjWMUk)$%}xs;앞}xSkvWz}jSI奵C3mߕԩ-.sq+zzŷ+w> Q2pW|MҬu=[JyfEԓswHXAIe$1ebr([@񯆴_W{ J+l T@W8T۽9R;:W߭ץm/➍t h%Xjw\;U y.Xb#H#f,#mU94}zk(eqG+ߣ6alW?V, \jȞdfDe9 s((((9'ʹ ==jJuhvHb̤gSFo5)v ϰ9bN4 Ht{k1}5d-k8 8ڗ\ t[ |OX U( xa%VBRN”Xr>uw-K+owi袊Ts  !y$($s +S>j1X] 準#2%qqƌ8%ssfOk֞%Ѡ, YVnT7a̤;(z7mt>Klo*%K2c;Ipz(񎥩i^!$jZ[OkR^R%@'*N攩I]+z/^Zac4Ex?|o%.6cycYZxma{c1M223yȮ_ 2+ rEhRxYg.؝q4lnh /mC@ݝŝK>5;i0kXxm<)lS:NM=>-u]駣&efե.$hto4 1׷N'AgsdPc@(喻k]'`mNY/o ɷq,8|U-U4[#O ²yxͻ9;;Ѽ1sj7EmZu8+#"@7!.Tgۊȣ5in]Ӧ/;JK^ӕ.~oԚiIj3 $2C! Vz5xw]:[ڸ[ecsھFEkꚥ`׷"V,@T,`֤k9<[h_i*pyuYԗ4عW <$ׅFpEEi6 FcYWJoS^?Ң\ $FR&}~c&{]Uyx*qf,uX;v_xU^EqKu_ P Z"Z%ʩV 9W$o:d:foQĖ(˻=AlzqQIF!Grmuwj\b)$Jֳֶ[V[Sc9IbuxC+`z{ul[V ( ( ( (*Cq$<T$[;Vh[r7C=J5KvycK2VI,Sf18'{@J_`Ԟf>#SÑǚ=CJεI.ڹ;AEUFs٠"t.# p)x<qO&{k#qcli.1|etcTk)Z]nݤ#6GBN 246FF;xB E 8Q@=W6Һ ? Ѷ'u{M.(Ko6tYJ[p̬< wde.UsJ4Zv}x=zE[_K)&g az8'8"^3^"6eJbm v̊Zc8#ϝ#Um<8<⼟ⶣoY[j(n5F!21eFm3(VpA=rY\撪MQZ6bom_\+6O ,^veAWlC|`Úb$/+xJ!*K9[[Cz+ws+kyggm\3gVHn 3NВeOX'g qiQ-קJ,rcӡI{9>fnv)j:2Ӵ'm,Ƭ|)Ck3|=:·w`4ݖ.wnѹh:ceU'î234dWlYckjtG;BX4.dKO zM5'^Vܯ}aggiݬ AS$CkoQH8Ppb-5 dk ]x#^ =*zt֭<+qdbB0JT2|߇,`^]IwoD#JK܏alW7~$%>tQ, lؤj̸T9)٣<xoⷃ$ψ%_dIg2'΄pG0aǀlWÚ֭X 9Ec-nlPd  :!%R+l 8> ?eq #2v FaKa3 ')Eꌫ5ߖym}!!whKi408ϓw1$yW]zUY]k3n{<`۲A?I$ׇtqP]J/&-d1rA'$ubҍZi;z]+_ջ2xiVZV{w袊Q@Q@6@*> )KShb`p,|Pvgi`Iɥ{1I\"NI?ma-Z'I l r1ӭLIBu#0iiBa #Uٲ~Q}3Zu^n*!r1ՊWVMlq䒕HJͻ~ETQ@Q@=W6ҍBumT9wOsHAF*6kqV/? Ѷ4qzuj”I%WvG3=O\]m} ^ b3ו7ѴoIYwT{ i[~a:c!,B†kza:'l,pw),\/m_Z_/yo$O%h$ :fB5S[$z'[w?aV2I޾iz xSBNw:њr&bO$䁒盚&Qs44ݤnҨxu {$O!dϒANq ejQu(x [a$6$27ƿ"/y5I%&}? N 5.y +;hT] Il x ĒI$IU4 _i:YÝ?dĂ=`h ZI+#s'vf_tWDKywGW1 p `lӴk+/').dT$3j ()ɤjB"hTʋ 3psW( 񟈞Ӽa5(ńF'#oa>X`ĜM<;he02l#S$ݬmFp2սq灵++=Wm/2W.UG% .rl9KD rEi|щ ,?1r!sDԴk1co^GYY]Ipyx`N*<ⷁt :."Ky&-~REvop# ׏4#~k}?#iDYxVW,U1ʿl1nhFլIH p<ʶrYH2 jn]h(A\ I)|_ħ#{cJj?X'Z;yۯxzZZ/}.ocx`x%IaC$l]H #I\[FsQ@B.kƵ @{~bcHgKnnz Pzz%u:UGm-0Rc1յZBn5+l\$=95rKG eg#6WptVn=me Vg|27$SRVwn&qb%o.ER4 (9_U֗^Ңm} cvOF $q  lxkXT鷦KE)#*dFp7(>Y!f?+J m15wN*_!Þ{ 9''=W6ҹ?sm[ bMv#>HC-2JViB]9F2Rrv+M~/Eٜ$Z d[jvYo`?Z>Eor[^2$(Q*NA,:EXa@Q[ו?hF_N[r' :mj.պNZ:4vI3RƠo*ˇ<fݸs¯}KCJ|3q݌t@j>B-z xz J} hsU}mkZ+GŕC$o8Xd>7s sQZ((((>MudKUrOrMr&[OͱkYE Tj-szfXEʱEno\3YJ[uJQVVxMԟƫGGx>#)xiq168<<;w5 Ukgv-[6wqjI׳mnu]3kWi[nuZ%< KqhViFwj%`vRY#,T!!~x^\::q N%V2;玸>E;;ݚVMSM&ùOqV:CxTT]CY\>| DpA' SvZz;7ך3]ZM,DQ$SQt}4&6EݴG}z Hx@ EqOG$: N95~ҵo./Tn.P`QmWTy菬Lx0@h90iJgݾz|.xHo4V)r`99fE ӳg<d=?7V o.-(e?U\s?vu[iWEj7 |}O'82^ͷV->s|U$*^GtoT3zcGy4E<) 8^z @\dΒdʔ{e+񶅫(ƗeFmJ`Hr]NiL((? Ѷ鵹]LBfHZHR2sTg'p 2Hƥ=W6Һ ֍WJji^:Vّ v0H`((wTѮ5'vvg5'(Ӿъ+fLK˻.g0*Ǣ<`x?Ht_lU)cP8?6"5N=EԥV+>=8="slݝg3YB/T!R+m+зEV!EPEPEPEPQ7VEJ$E `*J(N4uC*Os=/5J[+n 4Z{#ܬXm`\.0}?v uQk"* pqYk6<)<ɨ{k%hno>d ]_xRjOګ&HΧ,ڽ]7oĚmq5tXYf9qdl7Kg|Ka_i.~!.n5 9; ڮ<̌!~c+-gQ XZ3VmBbP،VOx7EwQ^pۘeMQs9J`i]qkClmq_yd{߽wD9{ *g%~dcrn#8 G=@xHDZ٤ܿY(q>8u_k^_~Un[MRkc{Ki$Oi>#u1b#85nDvMU.ղnS>`G\ۍ rp8Ox[D+kF%UX9gQ{iq5և`ns4[,I.|q-f9!36 jfRܪr ЂySXz:V}/f{^wc1#~iu?m_ɮYA5&=3ZeB;ݙ NsdZ~=͌QF"<#ލDi8B]W:=喕 ڮ"ܦ|r'n3לz:4mV1R:e 2КQIqQw^<;v-{-ݺeFRІ0{ׯ gRDeI?..v*񸪅(e۝[GY|^G/#o)̠?g >o0?;G#Q!Gxv[y[4Ѽ[WVUl)xUO1iNomB!ٿs*,3˶Ë ۳(Vζz{G:榣A(g-?-)t^ž8it\HbÀ9)"prB]]kKc3HRIjaaIW4G mA7na"00HT䯼!Mݾsa+=~ͬF#wv9vhת(Z7u-_k|ETUgIaS|۳wzyo>)4)c&uicc J9FXTrlgŞj V` HͧU4ra$K(1m*0*~VLWG8R\׺W]ysA9t5וי⟇^E˱ߌu~5[N\*`((+E9RK}䯖Y"TFHq򜿉xrKգ'kVi2 _)*F9ҹ~IGcJ5nXcec @R<[oqsA*92<Gl,8- ;!1.I' 8$ƬQ@;GG횬e OݶvșD/`[ {Og&Ǒo,PF!mFNݙ!3ugu$j]^l$hf?iRwbkO~{÷t֑\yK67:6cmj9۔È9A<~o07*'|Q|nR|/^XYvrYAwk&7 7s~ 떷V#z3"To~f@ⲭF5RRiD.zd|:5ѭ;m\X$ w c8E\ uOGt'h6ZXʳ@H$ ][K 7>Owt=*;1pG,b/N $pr [*Kwi{=RI? ,v7+ݟ }ߺ>AXˮGXo |@_"UuX?+n l@񟁴_iicE 1>n !e񝤂0@x=@#GIEPkͼ~ n4Veܻy?LsOcn\jwz,%XG1zgL\0<;%wZ[o, 4lyQ!'1'R{jךciXYAwuvmg0")%,X#w +[ݤ2G)#=zSo岆fd,# 0s}k޳:}~cMazJ֙p>3k;v(ʲU}+iw8!Hac5 p? CGxZfZ>h9hxZfZ>h9hz6oi+XYT6  5 CT={ZU\Oh̏q JNeXl8l@es7" C@s7" C@s7"=[^V_jY[q"ǬJX)bmVQѯ䳞H;fRr QӨ~Ӵq.̲8]Irc#Klav CGiXFl[+r (3׷ڜZkrDCЀH`2Ft q{*GCȑ}-N杜'1R QI;/,;9, 1"6#*x8 ©xkAҟ~in>{T ;]}s@^:Kf F[P#(+m2bQT#]SFOV}36zUm$qۘ SZQE^=:Io>宲\8b =u*I'(͗ 0 |1.'ym"h%BG"WR0ANB3geXZVs 6dR 1RQzP߳xO{wRZ%b=cćN='MTTOMBd-¢W^8gHW{J@Q@q6OZV7|QLt.ʴ9Slp;v*aYv~t{{-M6\ "̸# 1>ր8n;30\XͭY5+|q(RQ`14gr%?}ݿzqZQE-h]qgPK` =_/ujBJ)%-.~se,1ٱyFq?|®*wh 1'o61ZŚ$wp^Ykmj4,;աӶ (m !Lri:lڤ:}Ȯ2¾2(((((((((((([nܽnȠ*OG>o^k((((((( endstream endobj 71 0 obj << /Type /XObject /Subtype /Image /Width 295 /Height 189 /BitsPerComponent 8 /Length 11825 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFHHC  !"$"$C'" [  !1U"A236QSauV#$4CTcfqr5Bbst7DFGRev9 !13ARq2QSarB#C ?&茺r')Ja[ˊK 6RtIQ۠"Çs 8ieӋCJ$5C,pZb@s(+>dX i2){dI9cTJW&ZwEthG9jc֌c|[]W1}Ȣ 50>~Q.6'1[r^RO<+jӼxWaE,3O%.䐮xzLXCe)::':5N<ƺr2 DÍ;Ilsh/MI u'X?&FfD,յ (ZtQ~zmc'ɯ( la"\ӏ<^!z(|u7 -GRYη͕vG! (&LԭxN]W» /֯]fb3]SrRRh@)S$4I`;ű66X2iY%Iqq@p=V8@uQБ륒jMZ^d8X\ټGx‹N]W|\w;wv. nCiLgPy8C]u~y`ʕ퓾Re]RZ%LKR֕ pj@H RK gjHox‹N]W) Y5xC#AC-2r )uT} F_um=F޷{wA0m]O])Hx‹N]W"faoPκ;i֢Ԟ'J^y;e=h9p1:—Vǖ[hKJ&5rrHNɾY,n˝.Ñv}m%@O_ g3#}PAPI 1YǝJ#Dh hR5wa2+D_S\ЖkE6r$%½&u.S ӬA;16KKn$K`sFRFhu^,0^_Ub^Vͼ(QmԄL ղ ZϞ:"*,0^O/aJ{۩RQukLMNHGEr6nSN.r0i-isnpvp-W uzGG̏%#nݣ鮜uA!O{ta[U\rZuRV³rlawmZ ۸ :t䙥ՂLgh"os{wMY=Ufi(ݱ PFJG歅%ͯ&Q:M"),'z  =BNj =ņ CҞ뵻2*jZ76D$fQUo/V,6KE6eb-( #DPK͸+voBe?k4#FݻStN:ՠax{zSpZKs[|V±_om-%&31*/":A!ZDz }˥ +# A(I]߷_u9!O{ta-sLKF'5Z[ truMZPDP%@Mljk/2Ub d!zm0╸:P8*x{zS`W =ņ CҞ\KNs5jaZپQ\/U+ɈCx O+q3o&Ӏ,}Fw =ņ CҞ04j*&1޵rZ_pDXεM-q(%J+ )i鯞K9se4m44B$:x{zSđRdSwwf9ofkNۖKG;rh:Vn[=-BsERVҶ\ Z?@g)@)JP W,/؞irƠb]T Qܑ :N)+BBRҝĭH)NBbmŞaB̺="hfXE%mYJ nuP(i\#r%'gZrc\w!B 69#sⷧy:juWˤezl|uenm/ ))iS{BW$oB[%)p\"t?~lQn!ϼ1IY4ܺ:Yf;am4uemIE)rͪ}<ݦUoM I[*i%n'p) q Bռi\;!*N=kqmγ9=r6 ׏/dDݬBm^^^܁/q!2XBKl%A!|#}s'Gsmre묤`ː6dH} $u〒5'@ O-3fL[DY L8rRPUiNA;ACd$ J/ߥVcyMĹL;wmaIm**!KB@QW$sɗkш]5z:m)B6o=kRn,+c6+$H|WI pQP.ԍX'AI9.}.mbSmwi XByOE ԍuRT{DJ;DJj# m{~?@Dجcv]ۜqpR֨%DjIӉ?1'XlO൧ӻFa=x=`;g#[:VRƳa=x=`;g#[:PlDzՃn&*:o{de5nƧ#qAF$xup6?fKȳ[Zqt6ƪR'@fC2{z+aR:Cx=`;g#[^$xGj;)hmmjI:ì_5_?@`)@)JPk=r.1w(!vw'/.R-vV*B I]§tجȼ[(;\y,Mj:VRۈ$$jOS9A佖y.̱\n2#2;=.sl5CBBU̴аt %1y4G`sQ.\; 9,(yGjvu Rq+}-| sVYV'u. seH-kHJ$4\y¥r3r/䑭d4̄ս)K h =HHQYY?5u:P1vg^:Ey[mh=@-ᮤMi>NYbYd`kvƚz9 LK %hp;;iuP'Xےtrip3nbW΄G6 hWH bEw~=wqz{[Ll)!ڒVB:P5DYx4l,o~Mɬn-"KE.!t!ʀKz2։S^QQ=\1Ǜ^Ȍ\fvkK+ $(^ =8Ǭ7y$cH6+'Ե(%;ZKpq#Eh06pe-%٘mϔ1KL6—@)@)JP RQZ*Z*cG 8.!#@̻vAB7ۉԍRU,V=(e4BP  hp]{}uՆu43) t) QRyvrf^gd8wkbږV8е!\k)bW|)|+NSy9iYyΡ*dhP[ij$oJSz$顑KEFc[(-M; c|)|+( .G}.G}°R|)|+( .G}±VNuW()JJRR()JJRR()JJRR*v_~Tv_~TS8^av Gq~Z=G^ǙBqh0],j;o0vwrA]xwNﺄ f}МeWKTl-Ci[) *  k{Vm%%DZI{߮9dlv2ۜ&.0ĮvZZZ  ~P'ty r{M56}RCen:TĄt$ tN -9-i:8%EA'ϱ_UdI{߮ҡcdܖYLI hi i]kПWyOt6Yi׮?M?jTgg[^w,4k@IQemz}n2 &ڟr]BB#^8|cfFLNInMq-0JZItQZ,~σ?I|TAEEvc/\f*+1V W2 )%EHkjZo q |q{ֻǕǪlHj=#ܞz1q&d8[.$P JL6r3P6huaMZ[->;1gMc0{ \jۯs*6!'nR7jhi4댻XPNHi*(\tIB:AH9:aeQdMLfvRa* иA yDAnW[F_{ɤ̲JkqpuX/'JY G*X}=|XR%d\XX-dK7wdg6t.fft{|FYaf){-&3J\*ڣ/:*i|֬޹o}S!AmKVtt-+D䷔8yU6jr g!dU,y̶'TRudբ\Nv<8~GYqs~eE]aSQA[Ф!gG hRtԁ<>33*Do!iJByղ"Ҥ7rO)Xkնu,(.w}/jumC5uryɯ(8Ճc̽p5p fs %䕔oX P j9MN947J\Xe=9[n!ԝPAHNSF.'#9,\g&R*eu X:j O q |q{ֻǕǪ%ߑ _(sն% a YJ̤谍t: HؼGL± l\-_|nR66oؓJRR*v_~Tv_~TS8^av sa?֟PWP)J\e TfƬ}$XpK:c0 ݵ kMt֓w} hDҫ}LjRj[e+ȸHS9!iRԵ Vuu?jP)YjSuiSdJBxJP R)@)JP V˧E%t257cSe()JJRR()Je-w?Jwe-w?J1Fiww˫ UoG[^]XjNPC Q`~l,ŋ:,! $R 16eE]aVۨP*J 8jj]9˻m;YfʍKȌQ8Mz|mn&()JJRR()JJRR()JJRR()JJRR*v_~Tv_~TS8^av r,r9)$q!*N? ,P8NN$) D R q~?@D80#NPCMKߢYO}t,N>dҤjK͸n J)!B](~:X 8Rگ 7dX2V~1 /z_&TgM槅|?RjP 7%o@5I@F|/Kށjڦ.|$\ Bܤ8@:<5П]g)JP R?(9a<ێXkp.EMp6b4Sk,JzjW,|1B׋u\eN4}ͥtq%=cV%6 %dsiڎq`j5'AV|vMB^+N-6-a!j ٠*@''^@qLPm9VBˊvg_K(PS`%Mhq.))Zs w5N)gə)#~mux<[ZY$uh'þ]?5zk׽s6h6n43:t'M2Ț SpAY=tjy_'{GfEÅsLn!iR- )altI3uwt7.PZr;HRx%LPgE)~ cwzq77W~jb5زLf*QRuK P$@qNXs̷n3\YBr $"1p6HQU2|6S eT7(SlxrŹP \Ze38IINx1tEi^2TRdA94 V~j?94 V~j?94JZ*ĺߕ> ָZ֤* 1:MFtӪcG 8.!35חVq~ԝӻFe,)JP R)@)JP R)@)JP R)@+?!5_q=)"^X:D%Nq66)#c]HI{?\׺g<9 ]%nau %Y %*Xc>\z%䶥m* R]7_(|̫LC""'7I7=D^@kvCgTqx~+yN^@kvCgSⷛa-/*x;_!A3)_(|̦/o7H;axZ_UvCgSƾQ L^nv𴿴_(|̧|?2?#iiT ƾQ OGk?h&~e1x~+yF Ҩ|?25~LbVt#P/Gk?h&~eOq>TƾQ OGk?h&~e1x~+yF {w}x{w}5~Lx;_!A3)[0^^p"7fҵX"frCn7qI7 2]ie:]n&2ZZ'ҮNWrR܇ endstream endobj 78 0 obj << /Length 2175 /Filter /FlateDecode >> stream xYI7W(!-bdI &@7?R=ڠn9Omd7?LƘl.UŪ_$[D$3nUyV,*gv:˕&~Z>WxT;,W6O=4jjAgwljn0x9G:jLΧ/,Ve4be ȡ`&ah͔SݢLM{ç)R4h(ߕw8 3/*39Fe9s^?0]Ҫ_7K Q٢l^67l4М9 ~N͜O$D=_{M0C*-99txiP@|l佩'{<|g,T];4k)y-dgmORڼEeWch{!_X̗H0M\)Q*@$sȱR0MA}D޹z$RgPH?<ku!M<88uSt=l*J[ ۘS{%Q#|ch|G`Mþy.iީ7U"^O3 #*N~"źe޼P15PS-5ez}~L)SGЋfd *P4,lND ֟xF3T=O@覚Lo4 RTسFOH&Wt ((?goEKTA'C)"IFe&|\Bb`;rîܫ@ eHLɲ-ǀGA2]Gnk@A"ҕVA@vi|!DTetX4x u7OASOԡ-}wfكprw*,GHyYO"U%ܩYqV .F ;8:@9w2Krd7oh^MbjNۄI&hnh?Mr?o}z ;to8x*)X|9gUc-,}.>>%]єD/w]Z,s{O^9@a+GnvB5_| %>+_@ ǧ0KIc"';hTeCz qt;*3mV[seӢGl7,j}u_6K ${:89b2;w;rNZwLxXr\ܜbN'Ops:aRf$U؋/oG endstream endobj 82 0 obj << /Length 2329 /Filter /FlateDecode >> stream xYIWtC$Z3rKɡ$+*n#>o#Hn5 $X,-ߦ޿"T~}] * _lK,őx^4˕-EOĊ7^xw34Nj'j5vīX{lQXhT^G׶ڦþ7ut,G5SUVӀ$,..X/&~n[*up1tI F֩)PYh?vg f\/CYY2HwxFH׼W9*F]*љp.FB뿇l8<Sz:Wƹ*\`;AG +^ƒLԨp*b#.C4n ufB3_޳C9ܾ d v AD6F#|QSѼ(L8mH~rɏWQ6t<|T&W:ΆLAllρe_иM\|%O2x`=Ri' NBv+9cRGrg2 08mN@= 9H~6a\5){f$:FOt7Sob$cTnFIɎs#ogBp3e7S,R|Q= $0ϪyrRa$M3W}@ųYĨYcaǚځGp*豦ԓI :xDL6K8ЕD_O/d b* az.niUݍ9*l #PL&^[lSuT}Hy[Ý!m~c//Ln6_$n1$TAy)V'bKI6lYa'|3&hn+9a 0sճnۨLUEҖ"n\7S}]k l;G);q+S|En`?Vפޣl[i%ntts >D6ř}/ l^J[}%j ђCy]T4{hmfŲn,VS#{ٍwd(Eu2yU': 8(tOfY=|ẢmK СsZ.#Y; :2XsNp_pSc05I!\!1~isXy!Wini9׎fuǃ'FB9|TSQV_MP.ۃ&Ğ0ّ([1(MQ\Ld AK:%q8Ҿ6*+Ixls.ۺ+P٨ MD`bc+65O}!] B3rAӾ[`Jc g){(F.p&V?~W$߂ޗTp [%Fگ օ-һmrzHlYy?j=mBKR͌d jm`Kg> KȻ[Cçֲ!hNNTM=& e(cJ>4ӴB ?1M ^k k[Sc.,Kt6k'@4{h`:pL&k0[e`Rr<.|@ endstream endobj 86 0 obj << /Length 1596 /Filter /FlateDecode >> stream xڵXo6_fo1+%Kj+v6[,;I}mK !<ww^O/^eT4F6 z67J6Σwc=zM x%ft+Ct+K!K͑{Ų|mm)?Bbi@r^2LߢTDǪJVo_ (F VDo} DFN$EjRL⦕6dgNĨ$ITQÂ(VI?<>:0\ŸbϞĹ`%*T=33Ofx+saCv+ModaW2}BXC:OyZhz!ܒnN]9:)$n eK鑔X@f 0Pؕ Sz @{cI MdWtS3rl[6/-+E4rqNDb#ur+H@CSS[%?n}u5QC.٬\Xq"z8J@z "pٌE v[kv!RhQ5_%:"3NrD;Rq㇈"ԍ+?;'@8Y2fRMv\ДTY> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( (+MѵR{GFdu*aF Aߑ {V>Aҭ^ Iyb^D'ɖV> cCezZޙ-Id4+u 3ߛa:g:Lc2ų+p}mGZIgo&HL%~ov+>fosk$M i7i 8? \9uEᴲKM*og˕ 9xg9+󍧂ku+}6Yt.a2qI92ȒxI.AjWZTM ^M VBf 8'nSM$uygD`ہ8X=<9nCڍ.Lo=A. O\{Ea'nY.{Qd&;ᦙmMKUu9(vU8 JP-OZ|yz~h546-@̞lZ'$!Hj4'ԧIRB_RM># 0!NWmcuac 0żduP(R!?L?$Q Bf": +T3\_G$: (SsYE&k(w"_dg~p61{1?6qjK$9|#\Je;ilqqʬyA/k*LΖіɋ/dܯOI7?5oDgɣjZHE8ec*1 rM˟w- ^|@KAvKQq ރ@5ŵƠ53m$#<:s@MsFI>Gi]XMMTҞ!=K*nBp3r1о#Aω|CezZy/iY"rij_G1Kof|&2{GvsOTtMq?WԼG$oooxG^PYx\)uw/p%Qi Y; .}#~ ߈Wz]JFՎN#h鷌<9Y}fwiA,r\a$`J}_ ßw1ӆs(7{eW+npdw9o([x{3Iy5`>g\>Q+-f¾JĞ)"h#&v/( sH%CjZi՗lZiF^_\Bf0[(-#"C>A>_ _l9MmAsa 2cx_k>F-7Kc$dY!k t*pA7az5u uI%pi˴  ||+O ]j:Moo{k\BmwݱHnӃ};x]h X<  [h!JX*7ʊsvڷ'5oXDY1.p 8=G}/)5֩ rX*yrnS<m5i({jVIBĄ$)9^o+=gÓoUܵiOnN[1@UP+T3\_@CЙ/HSsYEtW? Bf"HuO5eQ\$: ?!?L?$PAESu(uTY x#Y 0@Q@s!+']WA\9? WTQEQEQEO@iZu M=kTwtF ~s9l5n#9E1bR.UPN1󜰮֊Jk,ǚ.. Ty害ie}Eheksq,&7HVN;WVN!=Ijtt6Tc*E5tIu ( ( ( ( ( ( ( ( ( (9<RA\?xkV)k(sH?d+(~%b^Hx @O-<;WA@v[ @Mr4mE7$O1˯|g1šSZ&La0?)+!Bf+CE>/ϫ[G[Jic #E!rVr;_BzOZ䷺׹AIx%E)Q*ø,efԦmiuX6 Be]& ^&HmFw7C1]oΓO .xM6Og"Y-ʱ sxcafcDk{|ZjU+ -tpQ׹-sټUv)kD&q`m9 Q ^}6 =Bb2j˹F vQEBןiMlPĖ,QQEQEQ\}MwhfD@N%0nsƘ#PEPEr~6Zi6Hfp2l2ǀTr7r03{uh( p @O4OO<5`_W?O'UZ((?d++<'aY?: ( ( (2u M=kVN!=Ij޷Ong?'%Uj+*E5tFEPEPEPEPEPEPEPEPEPEP?O'UZ+' *E-tQEW?xO²tCEu@Q@Q@Q@:o&'W_ֵLwDo[3*E5qzV^>5+6oI8ǓwA{ ;zľ(x.  GaxnÆMM'MTTO}BBT^xW@{ZmPhlZvsvl;NNNyɠ\hMMkh4, Yp*6vg-  _*3(/z @Q@Q@Q@Q@Q@Q@Q@Q@?xkV)kO<5`_PEP\9? WUW?xO²tQEQEQEd?z֬_BzOZ1]oO}M7%UmmuCNW)d]l@){7"8=ϱ (~0i* (OVNѯm{{y%=m2!.I#^}M7%PAEsct?MT}M7%PAEsct?MUOLQѭ]n'F4*+r8ePه'(~0i* (~0i* 76M6ʗ'Fl d8ʈԞOeM7%Q?wC4@M7%U;Mbti,ME#oT(~0i* < $_ K]gZg''inv2qg5@Q@Q@x ^6c"jN^#j:\$d Tb\ X{%3'i?lұw}v6k}]s@ڲ}f'o/qvP^w˭cBt}J].M{y-Rye(b1s1nP?-o=y^fxq=sO֙hbI 7w<nqX $[-ޛsqioiK|֡)Y|Df@sPhܝB"]|>ǹ[If;KuU$l&5X~ Oޛ7/y8f|v׬Q@ak? ɽa2%0,B#V.[iB{V&%Uυ,D&0˭,hλػ3m! (,F?|7 7}Eyo3cدh1'Ct??hF|3]95O +?ß#e2e*AG# ]%//O6dz;x> stream xXKo@WXAH)Jv؅^*7P8&iS$gw=v׉7qA, ;17pD/pC碕OIWf:Nԫ544\>x*MeÝ,T\ l)H H 8t ثT1@kk`j d1BImp]sb@!h5LSSgukI @^kPz27x"l?ӗ-qSaKxZ$gbh,&^e(R~I=Mjs冀.'ۥ@`=N +H ""x%}U3&bPͲA-g7-)gKNZ+ #Dy#@˜tzRؒ ^5~f,s="FTR8lU،ٌMRI[I]LZeIZcݥU *j%,=bOצpiA ({:z^Q-ef&GfMe~{.HN/dL4/ Og L6 pk[xlc%>F 5mYGK qʌK5c匢UjZ0,Ԛ!2!EhŬl}{|-ȿfpR[PlVI0 Xl.s7^6k&it0YniB|z%'c>lcO{{fso>;O(NIq1ĬX;hySAE V/woOU[2hf׮3$54k/=ٲ3V=~c[05yQPcdblT'̰jsdTg/"~CHB&<gn8WIGCj Gqt> stream JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ߊtOFڬvR ogx8OZ ?Soaݫ^}7,w>lqgŞ$|=,mlt;8'ỷ`%%p/N"níqٗC?9*n0}Zm--'0k7Lλ]t>4゚ߧ4+myi4K!lHmDvRxڼ-&㏈:γkXa'СY.6"$@8iݱoi.{ЯmuëZPx?ya~:v=6Ӵ+$[+RC0$F>PzP<9mҬ=N)f{՝0@;6 یu\Osk>nvA4?)eF @')xwcҼKqV7`'朮/vIōVYOA7QƋN;33m L2z Onyw=Ԟ~,y8¸W5E?Ë W :H7ڼ/7pcMxL<7WYhu QUx(T<͛qu8\95KL|+kخft< ѴaW+\RcPXGCm [뉖"YUQ̐ S֧5H?a>w6vV(͐ WsՇaH]O^O\jZv[s* abPo0XGf!kW~.S?CP`e@*Y|J&x$:~!Ho $ $A8z<+:\}P_I6>TQƘ:9!rΧxWZX^fxCUȋS:NZ3V/>_#' Fٷ~5itGsjХрE4qIdB]4]2@}UnP_4b[i͐ k)gv 5um*5Ho~yQe2"a r_9$T>3Іg& [ #UBUzOյ}'Mk/Hfm|@? z׉n)Dn[2αb96&N9=ܫv )o/uos&z~5jwIu$r!wԌHucjoõҵ+]cD6ə# PH T@c>BeFF,Kse|N|O;iok|eCa~]Ĝ{/_7^#Ci-Ŵi9Ĭª!8*e_Tm .\HR EcCqЩ9~H\Wc3T*@' eQ@Q@Q@Q@Q@Q@Q@Q@Q@aW<mwwvv2E#\*'ngg߇='~i-vWv23Ǎug'|[U$p] U㍬6 P^jpWDӯn$A]q3mE d-޽>[x.}V9_6[ʼB%mZ졌haTs G<'x^tGu߉V^EnxWl1?uTl==\<wa|+tUtYLf$B?)fIM1arŗ/CU5/?#ۿYcwG޹bX-0+f( p*pj5ȯ#I]y]|ş򗂠O^iiìj77:,gguO\?9}Ǟzt Q֙w7F0*|>wUgrI7O mYm Uޝw\qXcxH)!HR; qɪiuD)Es0-1S'5o$qPD.3#>=ct6ڟzi+eL!d>`w(4QEQEQEQEQEJ]M:8/#BKK{Y1; @gzJjs5I݋;~c*۔d`q+:oK[:D&\,Rħz(-fRIiH"nM5+t{x.ݠ1;*<\Q8|,^-}rt*Q ;@ww099n ;sH((>%>{6hIfYSj oO{\q*ğYbsZԫJJϘgX5N)Y??=ޟB[⶛q}ij&n"Y$[}8E'l,:^kNa[)mZXfdaEZЧ(ͥ׫>Ons(?d++<'aY?: ( (3{ hҘ hҘ{וDPͺDAŚ[$(ۂ(5M!rotȄ.OsH((U#?%+O_?X+2;?Ss?Na[)Na[)2ϡk*E5tIu (((((((((((1}_St/(BrȨws+dpsjka^;\EB4[U&9–†9Rgץe46 ;B gsh>,ΣgXO\n$.Y09  C! VO"(( W$ ̭?OI`Ozgkhsn23&AT5rVTsP,}Pa? t h\Z%hm#+, !N8ʡRYWJ=SJ5{Hu?:w-mGmomH +Q!׭s]UI}dg,ZRmR+ϱ ( ( ( ( ( ( ( ( ( ( C! VO"sH((U#?%+O_?X+2;?Ss?T5rUǔo>XP?׬C\^_ď ŏ/kC![/渪~?e~SkўEWjQEQEQEQEQEQEQEQEQE ’<ϲ%fm-;U`Ojx^oiALnfdX`:혐s ji:3 .N39? WTYk!m1J:wkenˣdnk?WӮYᛙudei2@#6$m)h((U#?%+O_?X+2;?Ss?T5rUǔo>XP?׬C\^_ď ŏ/kC![/渪Num3_g-m*(~lgF2zcuFUxPgGѴWUo Wi[_3^wq4k_Y!-26*& 9s^-Cz 'h}/N5B׬gK/ 29&l_w9 8uo\6TP-ݒ(wV\K󣆊J]?XΞk^*5*J:m͈d.1cIM9kdcqK#'ą<wCwkFS(o._w\^ s@zY?W/WQPfv ??kԫ~?eשW?ݡ}YO(Y}qx7\˺&6*px8 uآ/{fJ[CM?xۘN=ҼǾ#"[IŽW2^rHqa*Fk8 xRKTm셱ew[߸I'*B~vc&ѵzTk .aCU3p%$$vf&ƕڼC"yLr+s: VOΥkc%!iUDw*Vf>'O~0i*UޤnsQӫTj3Y5oT~/ >&/afa?8x~jKq"̙6tU*oU _*?]aAUct?MT<7G VOK"IMX0Wq?wC4GaAU N[NTj3Ydឩa-fOʖ3Ѯ\,lH8: zGaAUczo5_7Wu->'Gy_qpFgçu -'ub¨տfS~jy%=#HlaK-?wct?MT}M7%P8u,8U _*?G*[k/?~0i* >D/'GuTOل6MoU _*?]aAUct?MT}Gkr!f-nDq5oT~U _*?]aAUct?MT}C _٘Ox#r 2cz6~&>sdڎCo rtiAIs~0i*a*1VHN4d~0i*KeKy=P]J3rFp} \?;oJ~0i*Qe¨տfS&?;oJOa?٘O7FC5 +T[.GFGSc Xo+?;oJ~0i*ï"Tj3Y5oT~/ 䪹JI߫G^%M+L (0wuTOل6M(B%jjE=* QŠ(M((?Ə >}7~Ѷ=Ǚfyvخl7Cog<ݿLh(z|$Z,Lx]:B7:jEMxĦm؇ e2~mr#=nuwmnZ p#( 0=]h`u_Eܮ|$*K*laN&ETmh;A4\]AVzV^XUajnt=^e}uP;7I!BUkcr:S #Raa6]O~s?ĹQu*e@Wi;!` 8@؂$ƎELs7cQz_d".c`;^V"wqe2_iS;. ,elX–@6ϕi- A?a/ (84\yTw8NuڂhF1\UJ8DUSP? HS~N5̸!ma- ujiH3  !$ ByEAp$E.NIgզT ᓝ8))+ͩ;>MX@7I َU0)W7:8AuHD'KU^tlQl,[I+*#Xf<{/ sZs8t`jgT(V8 >ᾈӐ$ 7e}m_2U 7lpI;<{_.X.8LGNyC>pcM2d zx vD㒠5K<:1Э/$+b50<1(0- (tST "9Ӹ8/pզiw%CLW ߸LQej׹q.1 T$aADȡRsg/< ^,|l7RYWJl仕{[ ye枥O 9 N[it;ApϴaWN \5(ˊNԶq哺Y6΀ GeF{=,;hv"}YHK* T 嗉@sd/NjP TBI鶈A<,im g))ƈyjKZǞM7>,L bX ?}ڴ&s q;;'~qW LiBլw _uO+QM+o |#>Pq6byZ䟈K'LJt&^@GtQJ$m]|Fo ARLuʂX{||U: lmTeϊZ%p?.O VaL\|9صcoz P&q`Hֈ.IDxd^YJ*!WW*9+)F2;W T (Z\+kZǕ(8\UА$:pW sUZs_s;ז&""S+`j^]aj9h19 C%eM !Hg1isx!ȢaVl=]avMp(LL].5V.Wl )gu'{!ҍh%tuZZv%fۨƔiuW2jwu^X@n˗u@7%=ImA)%H|yɅG CnrT-}c,Jb}pqtvׯB3M*§V">TZPu QUW̿9|/d`M}Wi$;|0nB)gt NIjVp&Sb/Sn B8!yBibO)@˧ W!}$d>t`봳> stream JFIFHHC  !"$"$C'"U  !1U"ATcQau$236SV#47BqCbr%5Fst7 !1QRq3Aa2rB#C ?d|wJB6RtsY >lpie['9JY Zأ?0`)VK['<'>Oy(BfҺnڼrVJRwEFei&~kx+jwy?("g,~A?2ϭ/5ΩVzzyYǂ/֮wu_]e0y)wBߧ]e2-QN`8<64嚺+ݞ k+!0;dL8ѣ-SR8|BtV)[jy>R,ou_] (Zj0| ̾Zf%ˌ 8*ݜҤ/%N|!9Mv|jMݺ÷(T1vʇ烩9gJyBRWfܴkJ^*N஢]EWmfb˜FKrRJZJQ- fr$Y)#dyNø[ qębK[q\ X✂G"FC3VV%jpVNK;W<Q~vӼx+j(ˇp[\4) 1ހӰ#T3:0Jv L jKDj@ҲN jK(X-~:m)]EWm;ǂ/֮\a ,[!-EPm- 'T哊pU_wʐb4a 6i܄lERn7jۤVJܥu_] (Zk?+Hb-5#[@FթN+.d9T瓶SC)uaNymŰtz>\Ƞ(TĮwu_] (ZjŦÅ1&v~fLЩRԥZ5)<s(plq0הU6eЋ0.\dhiǞIVN!y(|slkToҖ|Ւ|)=]EWm;ǂ/֮ڵrp˜+E2J"䥠eIJ3y*)QU";c>{D)m3 zum]réW;ǂ/̫֮j*^m-n+'2eykTY6 W1AmA{Az*RuJ#?/YZReܮwpߤ (Zk&la莺ⴡ%jH"I'>Ozc^M2|Q5rD ?vl_D{JD5f3+ei`cKjL[ KP 9'dfgSǎI1lcdljX\.Zz^ӗf rPVC Ap_S]vs=c{݅?smZ Ө 9rLi|`i[MZt]1͆!O|t:,֪O]cO+^יq)IFO2JR8%H_q.6XLQ:M)m,'Z =c Cޞ͆!O|u6MZ3arňox"Y/8lL5%LZPFIԠQ9WoBe?&i;b8$iӥ?yqκ Cޞ͆!O|u=.j}bqm-%&31*/":A!YDYz }𯂊sSa<%)9^Z\9D=`^Od{u.WߟtruMZPD$5J⁞Z׬^12Ub d!zm0╨:08+D=`^]aqQtu9VBw++& 뫮7%"Uةg)9I,ђy'!RMvp˓hu[\GhNB$HWLsaz{9D=yW'|SooyD Q1;z.2b4Á,x%I~1$Vo_,mX.d;E1|tn֬$WLsaz{9D=G(d_OMnwRj[;|z]|>PaBN GdMydruzUG][͆!O|t:dscr{yj?:Pĉ7ZhCi t%#Û Cޞ͆!O|urݎ2QN]^')+䮰:saz{[ϻ/.YWjrcYXJI:NBapc YS%ݚRAՂ:@=J>l0/Qz{6=+e5]/wZ.77"^V Aʹ$ W P;\\N8 5`^Nl0/Qz{ʶZk6)u;iG,haSm TrQK9se4m42B$:+9D=`^^,eRι]zOQ ϴ B@)#l0/Qz{6=P͗%ԒɕWzr02I9-2 #'I9fr_WX.R9fC*qӍ%lkQ$̓1dȼ\a*UŹ \[ɎV<ˉq!I9)!Y+!9 {y{/CFbY]2IEjsJO+0B 2JYIc+lY~B\ZqvScәaǛ[Z%2lAo rF{dŰnz4 Zm JWݢs\ $OID>aO?@Dk6w]q{ Z܆)J(rkS?kyEx~cŸqCRkT= r)mPAΚuPQ)I#>+դa6AD2ov X=o=N2jNf:ywB\P% G8VR ]Z"" V! $. ,BrX:쪦$K̫[lݻɼGqI-9$3@*@Fx=`;g#X::PX:짃{;*Ng{;)ʓʕݣďMG>X)@g~~}G>MG>X)@g~,rˢ)@)JP R)@)JP R)@)JP R=Tv_kDA"U+U#KDZ;C{:yu]\6HN6C| xtœQ'xaC;ө |zimPoW⥡k^7gMxq'C}KF WTp)ŏᶙٻl[W !eJ*j1ͣu|2hճӯmӳӟVr0H 2TOiqb΋)<+u(--@ G 8 F.'ٜܖb3[Ky2A9RP\r0勔{l!ZpԤ>46ېH>aO?@D֟ \L&R,&Tx0 n5`Za.<פ'VYˣ:[{y{;4zh?X+Vp+NTİmZ,(- d')c@ǩM1W:߹`Cr6nuNn0S{JFK faej'B@,Xno{c{%ږ̸̠PU9rXFa$x,=7@ǩZO+(b./np\qKO) '6Idzjcb\eȵb ʸJr@Q%!)HJ$%*'5ڛǠcԨ|twˆMC*HJJF@>@/9J?ͼz=JoRV|b ')޼4唄6Y0.R JBrBZĈ{} 6Xoj-8[|;ɶ` ;{EѥI786MVu+S-A( [Z>ź~ 9ob?7_! J?7֏nY{f !G5ilBKV|̜p>MbCi+\bF%xo=þ;--6ΜZgʠ9ob?7֏nL Ć|rAff=ըAm`jC+iKl!aƔˬA-I#g4^F0+.[@Sn I4BT)ZIRmMP7֏nNykGطOMbCiVBerBBƳYMK1"AZkoKS)Q k^CnlSnĖ+NX&K(C 2ʳPV7֏nNykGطOMbCip\XF'TINڜDWŅ;hQH'Wmy,ߛZ?so L6Ic[byף[jH2JRT˙89ob?7֏nL Ćaal|O1s&6Zovh fѕY+L[Z>ź~ 9ob?7_! R-+O֟{=\nSd!M2/OIjdN^^1c<[1!IXS.XWasq6bjRJ'ԐPiJv#Nb"o\[q 59ZBFIJRKn O17֏nNykGطOMbCi?m-{l-^< KP~"^"[w$OmơqlP SN$FykGطO<[1! = p_Mlu%,TZ. JRs5o-DcxnLN6r!PuIQ)mjN[?QAZRC瑾}ts[Z>ź~ 0*nCMU+!b_k^s[Z>ź~ g]};dUv}iJ>]yjRoOWm7{'ګ=UMw(;dUv}iJ>]yjRoOWm7{'ګ=UMw(;dUv}iJ>]yjRoOWm7{'ګ=UMw(;dUv}iJ>]yjRoOWm7{'ګ=UMw(;dUv}iJ}> stream xZ_o6P8@ĚDI:`Z`ð'bˉQ,矻|%˲4M1)c~zDƄl u"BL`<|p(TpIErm~㲀{k(#~\3x,b><{.}:&TG /y X8y>|!2X @)6>L4 J_sW=_f ;h s+.km  iɊ9> S8\"3FxA H#:8 06cp"D ԾdV_[זVe.dioNVbO!@ K~y+d; *MT,{ t3iGBG#f \ݡ,7& |0ݑhOSV.tN-ؽG!$X#"T`cBǪEk,$u։;Bf׶lQ* {φ|>2i fuiBBmMhqmk*`p8 &V-u$fP@PQӴ,<eV:,[Y+y vǥyuγBt~aDjX5W*'\sKɻ`(o<]j:'؃az{ _ywwb|xttlQ͢f @7hY۵ &lRG>b%n"sWYWZkh&'o3;.z鿭{][g2^;M&r&l]PsMI&Q/yuvg'@m&ѨSƽy&<yCʍqSқok6DQ睽Vo띧Lo@.v jQ*.]oIm먑Ff$TL endstream endobj 104 0 obj << /Length 3459 /Filter /FlateDecode >> stream xZYo~p}20l#N % v gv-ϧ>HHZ'@!h~}ߖJW77ʘ6i}cf*5?X*eo niit֭6w?v[>=v~atva?(nZUwZ>,lLt4تG.[ZK]gt#4WY/IS,'x=|/(!GUkk.zމ r2]G~An d[t8~)X9ťǢ%;܌vtBT#jQ6oJxLT}6]nBNZ[mA` ~EIcеZgl7,"x CLФ3.sdWu=8UǾWaS l~@c%׸{jAr-| m F*qJw"Fڗ.o=O`]G<>D "}x.D/{t[Y*~pHJS 'elÖ5+B+:2lCxёZ痋eEc ѶQAUkQ|SnW4E`36Ll$ xBL7r@s8ҠNc;>O&|W iZDa,Cy0݌;D8RF`;Q)&po/4ITRՎWzV؋%L7a4*pgG UqBO؍n_VhƁRJkv^uNNQ6;eх};8ڢH+#́R9V 9W`,e_((SbQHϞLj(/aĸSzX<}Qn̽PA~|ZSf__D>X&ֻE?K!>"8T'% {e(!/ZCI vzMp2SNn#8=+.󈚄] ι7Wau8@$עhBV`$SXө*Ńy8̥G✝;V#Z `{Bi@>&DksU®] F(ERR~\1'/Ur MK]E+'*Q\p<_HнTL}3tt>HUC|}n`@PU찓'38ju|tTBOxpEp7;58mtC9$].Lh=6 6mύ 7]HڹTnʏjC:~\7!/&E ?3d"cTHp,RM7P(;Ss^gonD0Wb>|wQ\)58{N|^%%8|>Vr/M쑱+$F8jP(UÊ_qTKuZr~+ѷ*G!Ze!v x)ACa.& Μ E ؝E;β $DѾ6!8;N=.YL 0̛Ty" Zn 9l>8>W\7,'-pr13Z{Rѹ8qiX0SJr|v/u%ɏI!NhsvoHrOym@ڱU!ک|q8󃔰0؈u^,FRJf`]lSAՆXu>!83.e#+Bl$s&i_|t+pf>V{m1hRz6ՠm= 68ʠRj4~·E5bF\:/o&`sH*0r04Fe[8ꦁ0b뢆6*R`B#m4iH#:"?QPkWET;=G>j&/Ke)Ɨ:.+p *XAR~=^D.T{u۩ZQpCh`waM< Ц6fBQlrqA2+8Bni;Q[:uEŲ;qv" B \@T%CKd&Ѫu ę_QjP&ru7׵g[Ɏň][aI?eT3N@织''-23Tݰ4uAgD SIǥ:^H8>{b߾t;uYd__j煽tEB&q,i9>OfjLnȎ"zvgHfv稚sۻٴ W'~ ^5U=4c@fpxWЈ=:5uu2'rU(}{:yɉ^X6wZi;\a#"XNx1kظp?L ݘ0pr`|>p+%5|u6*d}ai򦚤£z-aD@~+%5 Q.昫"?mF7yI]a#'%gvRUJ~ 3G_5K;~q|dUvQ?qP]+6*J^m}*5-Aws?v2_8『[_TUڋ8wwyU?J-8T`ZwYYų%%)&3!jCZTD?FlRWP?/MKX}I VÛ}O= endstream endobj 107 0 obj << /Length 1953 /Filter /FlateDecode >> stream xˎ6p6`7kEish,z(\كv\Kwf8)~mEIqygoo8iѼD~/}NjhڻgVBZ-COnZ/vm 3̠8w7ᅭ оИot7a*[\ +OcéO_1Ź7*Jޢ)U m!^ifv2'ɽf|+Wͱd{{ m.%`&HA(ObkEvt `fDc^LgN O~w7QP+&$ؓK0ܨlD8"D:o aʴ;,~ݎˎ'\th<Nr} P?0Ǻ>Yv%㞩uewZΨG:ڢTg98A\BG~˿. JŸd ֩&9f7P޲e/g|q#yLZbHHD8QR/`HŖ]5)J5ek r Q.Ƴhi,5ɿycKZVl2ެ"/gm 80 H*#@X,|FK$a%7v"׃fneFbBK&N"meN*4M8? mFp9s$qq^4:u\b-\fM,$L-. D ycM`)Q. ےв.N9z)}r;g yj`J] eCܭ;E2^q~Ґpgco۫%_蠩 hm$-TkP_.Y=#Вvz h_ظ+NkS'D`ڈ|_4_ESZ}>ޡa4N@U!uIA9؈AB?ʐsȧtsW75iqs!pF8TV>lv0Aju9`1mI`d>M"/1xHR>UT,gݸܰmRH&rTv̥u3B7,nLeO ^4BQrE[:ǽY2Ғ qÒ{kArGeNPΪ-EqKþl/'whxc!ؗ]liāa?<#=|3Qڰ7wΛ)jqj qQ|QzE#Y͜p##u76> vc 'R;gZ~$4wݎжUb)|yW48zfr=IEi C ڸFձpV(z^B/-4BY+9㭈V]m`Z.Rp  L43B>#!8a0(8sC*&q1$:ksh.2EBzM/>^ x endstream endobj 110 0 obj << /Length 2003 /Filter /FlateDecode >> stream xr6P ՚pmC2m33MD-TI))бhcy/YTՌKɲ4dVuek&/5ήziYdP}~2 ̇z)~5 !+i,>KN-[cɹtZ~LAS΢ld/UV 7![Gs7ԧFm^[8*iuNG+L"xW'Vi; &vB#]"ͺ-2{ ո:!֠\h֙;ɷ_OQQa>ý|΍w`RwꦛsdQGkM4ۊn\=AQjpt1}DfE,N c'V#͜C޶2QGu~>VK&;yN*=?~c endstream endobj 113 0 obj << /Length 1376 /Filter /FlateDecode >> stream xXKo6W,HJ6]=lY#sJ#Zrl1="GC΃3c|z)˔zy xzYihhh%Gh3h܇q5;hҒ߆A,dcQqޢ[^ xȲ8:%2,Qª&9KrDmIZ+,P--hf u8C=[b}G5%68B{F#z}sGP>.U3\SsTw UmpDX)PȞt)vq=ŧo{.#$٥)1g*M{ &ecLש7Gmv=wy0jstwĭ'-Nӻ YDM~"b#`:xcdY^Pe4 C48}Z OY}y% ]P[턬|[]7˘̒_kDcjN$IDT#Д7=K|~~q#'AN0TR_k1a⏲^[^(P`>7G3+%$2PQ]R_}of̮X-I抳 >Py}_fv98ԛPySY,e I!͵?l6Y:*J˹]ƷH,4ْA-06=o C}\E`p {԰ T)thYY,n4Eu AXL$v#ɼ6!ji3b%*^@͡RE!"2qB4K]0Nn)q?Tu'ySm.Z% lG}$g1H 9Kӣd ŖIh:0[ x"j LÓlV0Qp"G5$GI\IF0 `2%G~/#NrA)QQh 0iK-. k޳#,ˑ!bӫT"Syg4<ޑ « qߡ2`mࢄdx<@%&(E,+Ge&R]dW*Ӝ.p ]&΂Ɠ ӏQ¸@TwB~rijVQE ۘw-GM{[\0Sz|LY^m6oԅ[YmL!y-wSU8\{[1 '@8EpI$f endstream endobj 116 0 obj << /Length 2508 /Filter /FlateDecode >> stream xv@fDLc-8q^7CȘ"S&(J8 B*z~NU. wv5;әVsgEi.ٛA6|wv5w1Ԝ!2Py((JU0MjetX$Pt64x-HgkKh hhShw[V~v2?ƶ ^`2p{B$yuz!Rfڭ ɘBU!\xRj6d*O[CjVZW] ~\mm_N^kFF?U&aV2uB:sX;VQ#i}6H,đ-nN>lu`3ĥ \+!P%^<] *FIc'4a:M\sCkڥ 12(]GeRR,ua>] z#pdT2Hi.Uf:zoY؟0vrD{+*éPd~-)U!K>_H_G}mw/x(igI}֒WQף O~ )ǗM@_EN,y]urTp~%ߏgYK~;oQ])i /U^T`ua * 4vLДYFX§'0y4N Rn=mC Ha~h*a^xpǣK^lHkQF! [ᔌxv>^A+;E!m 0y[fm@*b!$%>HnJbRq0 ޖt.1 {?E#]OEܡE amI;naTV=:EpPͶs+{ #\ !COJH*mLjpqؤR43RÑM_ +7u.d;B^+G2pG>ʕYJa0'Y}>!NHPt-W40ϼ,hbG}F(hlx`+Z˪f㳩E6>E.EZQ﹚HhJ0L3$=-CօL&<֦YV=+ ̐}r1̺%`B6Ǎke{7&>DK"2cMgbu?п6ל*8W䥲~̽<>&BE4gS!Z6ܥ},b8E sW/^)g=GMV"&{vb'{;r 1DSLd YS/ti 拪+'YxrN9̖.NFռׅEۥҦW!d~59TU~WeP$[r"utm(N<q$sl c"FɟFǽ|ENSSaۘw0+應XB,+>ʙ_2감;RdS( ~ ֤^SsUu./@ΐt'_vh_{OH&WeoNVe-rGw'hn ٣rv1K lӖAXKUWu [F'&6;~L<Բ)h x9TtD7EeOn8?lo60ܻi?gMt'Zl%}ǒjM)dӂM{)_Dײկp:&8MLKnJs!49q<O饈4u߿Njrֻk?=^{k{ctіvv~٨Gpw¥<1kwKFz'}Dp<̛Le%ZlB.;ewyʓyC`1)V3}פU/kfS UtI>?Z4%A5,Yn{E 'l4Z$4ڭua.󳑳*#rُW 7 endstream endobj 119 0 obj << /Length 2169 /Filter /FlateDecode >> stream xr>_̉JL +/ڭL'9btDUS$ڪ=14~_n>|>\JV7w+Hl-(_ݔ:d:O=ۧ3G IBZjj]TAv6k[,w' ܽg]\iTREݡς%Up۳;9|(J&J(eVBFɤ-"`l䠶"I}gƱ`s?CZ-e`=G0J [*/k 2f$\ 01VyxNO{*?&\?Xiq8^&@CnM wbdN'#sIVRڃX'ER5[)kWuۺtM X՘~R4woU NNGqS94OǓm,KA,Ðŋ>K9 ibe5؝}]<VnIVn~#4m#t+bCN __ò51C' 1mܽPXw]+0a혙k}>q4-rVoe֜UDӖr|b*NtMCĵVIf`0E&rQğI`4NK8o{r?\|HrtE[꺾*zҶo$ vw3Z{e$9>uƈ4 T.xD.dصRC=p_^_p??5y G1ykj:;L1~KmQ]->f X0{a2foAz^Wxjn.#⺚q ޓ7>yc)\^[xGo,v|G1#a8] 8ѝ-#iUǸ[;0\"s\7Ӆ;}Y5*;x7bwVy%:'~f@i4"wAcd2=As0Nn}cr24."F#w#?I23 Ps2{3|^/gͷ$7N_Cseݓ92j( [-"b^z$3bN:05ƾ:99Voi~`-{#3 dne4ZmDQӭb͇e endstream endobj 123 0 obj << /Length 1493 /Filter /FlateDecode >> stream xYKo6Wј)6͡vPKۃb+; !9(qS{ "K7Ùo̷돼<{4HbB3Mz?ЋzC"-˻ bLĨĸc'\_193#Q?kX~5%l@\iZ:LY (ϐ>ͳ\= +' I[aRcF<"vn)0KkSw]!F褕DR|֙;6=)Ґakwڙ[TJaCpLbPROcKE^W_߹ \6#Šlԭ3qBf ܀%8v^c7!v% cPSagӬ#wC& ZYO=뉒)cA}*7h g뿗8ח17Cqꮆo[播 qy*ǔ Q%h^='@%!I ޯ6[-#G"#L;C5 ϕ|{VoE̩ YX3N(6B3 ,58BW XalP>YFx$NTvPXb@M $턱&ǟ2{X8%,M?2+yb)Vl0d9 .)e*fU h4qG_1YSŬ$l Mq z bWЎ́4$y,b* I@NsTI2"H@!?.e NhaS^>̴E@usL8{tPbsAFOtp,<҄d8;M-78P0YXA@Et:GqVӓ;U*^[v;8kr˞)ʗDFsO> stream xZKo6WK؊$ze v{-E181o_!4)M@X"9y|3R< ^A0M{(t` ¡Ao]Ւ9k)kkkk_ϩX]Zz0W[ʥrzN깽:8>8A9A3UIpkrY[* P),U_UEռ#qG#q{>Zh ]9(7S7n9LUȊǧīYd3 @#%B §-Y3u ĭ+`z a(%,JՌg( aѦwAD ^ XbsΩAtL؅MT9mW3|-H!r4TXF9qmMk b37. X{ɚI)eP鹣?@K3j <NU a %JGi\G}9?ɱ@2Y7|A?bЫa>uuDQpg{Ys$Rz:s!d_^z烙]k|2 9(= u-Rjy"|,+W1eFעc3_{q*7"o3p8<  K É>!1%y9zGEK-~;(X2uɠijۖ\ EȆܖ$t'T"AjEYѭk+S)ٟb/\mHIІ)!mN5S&C<. ;xá Le\5u qN9n<~MoF$'~ڐ\Iz;ZX3PH"OQ}03-T6rg$S,.[j>2PM@5$E!!7"m곶|d}yy!d"1>Hdaƒ%'-]hhރQ̔R`1YǸ^"Ϩ=o N_+r_@p)yP a0r#a=Oj, endstream endobj 129 0 obj << /Length 2132 /Filter /FlateDecode >> stream xڵYKsD0beҌ@js[b˱\ӯF#I6a"i_?ƹ}&G'I4BQTang;񟷿$ è```3J{𺁱 Zz#g丅MQPI'y>$*9)OP޵~byOty7LxN[!H[]e~>6~OTx(=ßz-_5G7CvEZ´ u^"!nXTR8@: 7pӬM{#Cz[vh6,*!$mAACQ.YAqT1V)+˖%<QyR+~ r=p, c;LTk{-+X"bl LjF)*dZV}v!J)pqpo yROAOޣǾSf -P!ʤwԸ2g)a/iX Z$MyJhdrdbEM`kVAA]nhr(Mvp T b& $&ڧ sS~c, b|.|ko ى^hrUJ4S۾`2Z9k+j TGS*+9C >cIv#K7P4%*R*-կN!*3BTƫ5:0*Jb%3dII(qׅ}Hc8ᖃC(񅈍@|Q?5ۥE,<{}F~`pғ P]əy z*Oٗ&pyZ!>}d,U8aJa3L LmareL;꿮D{L^4;c{)C[9o}9IŠ(7r O Cq&đE,S@+mQqTJ!p@wiޜ/eĜt}&- {YcYD`m .7k0$3_lj[6~1[7D6$sٙa޽P Fy](GO-˙Cg9qN~nS})4v:?0־Nzy; a9HR1{E~6*C(]֪vϮ"8̢*|7V.\ewC}n]Ye_U?\C=K\EK3te sOdtYOX\QYi{x¶&[G [W#w.${}k{Ԕ>3m`dv#ƩLk(Z]\ ҟ$SnuB>/eńݕ0xs,d5\*{‹%meⰶJ̗q8[Yf 1IjG'z5G\׵ 70~;?`|@[>B2u ˳)ҙ_Z󮱮.刣DKiEQS MbaE6 R8n9^cCC!w{mjQ,Xs1f~I݉:dH{f]/}g!XbDm0u-Ν6w-֞+Jwq0Ndǰ롩%0ϸǴx/WNYS/0J#d ۮ{uRУ@nE˶<}g9c +/B2u&;?99NȩW]Xt; =9}9=^=5{xi OYmLDiqC{\x.39Q(]x`u;vOorSWJvC3}CԪvڽr_WO[xs߿ܱ_d>ttvy3ح-A˅n1S%;LJI"iSSQTx/4&:PS}}`e{ endstream endobj 132 0 obj << /Length 1975 /Filter /FlateDecode >> stream xr6PCB,ɦL;:^N$GjE;3by PVlox//޼u"w~ݣRY=YrBK;.O. j79<|y2(6'4gz&깱S5L/{efDyçzN HUU!Q 5YBNڅ 78b XN qRVsm$do}˜XK'/FiNBa{ "BmV/;;$sE/,)9G?.VNJp^)\ IvO*`ְ1W-xK]D֍gt9Ki ؉#wsb9aT9ukճ<>xUɥ\#K%PV*Ep9B]p}[gbGwlBحzCD1-{* %ua7hϑsj(^V`K]ݘp0|He軵nMmh݆W5v# ^r@o!|L&'ƶ`QB YVŇJ!pL ړׂ.$lgvWL>^p`V/b̚De#@o%I_\u2yܝ2A0a}Xn|w0ƛ} fNW SZc$zQ*6<nOүcTR{WQD\$#+Y0/Hͤe+H4@-KR< .(]~ y!9:k^;jbі 넜9'zڶNj'QdodbmPWf>EeN}t%G0%#p~J"mfH3ikY,;* +iLRU"QɀOǘ |Z$@e;ќ:֘J u?FL--1 Xv:N^WuS }fǔq,pxv}x궤XQ dʆ!: ,(]2Y)SsFZH}}/lRS1 qסh P 6ރ$:\ p{0v@Q7ԁw#.n˾on[YH1)@V/SQ SlՔDC=-]T#{F$no2QKU,q7BJ)#*_O\ : c=Hxp5 7@lo(jzycCZTG-/A5#j xo "  3I/~=/֝ endstream endobj 135 0 obj << /Length 1388 /Filter /FlateDecode >> stream xYKo6Wދݮ%Zߒ]@W-;E{)j(eRv6ir y|3s"zIF)aI/I#BӤ7!ruP~lUu%\{q"@cMxE-:ĐI~_FXDbA{ a r}/ם\sLWZ}vp/~J`1e-Im%hhWMmsI+࿆ 8U#2NfrJku)W*tڡWGpֺ',D=s pXQiON8b%.pD @N2 ?k3gV͌Sr;AZ!Y{eRC7UmqMnN2tL+4᧾DC9 Y&dqe"I"D/ 3ZʛIq6 E2(}#Tc, ٚ8F@T"I1YC/(I!'pc҈;H;93]yp+RFQ)Àe\kh(bs|H4)!ׅ d!}SXJN *KV~}i $}es l (%V9Q"_Н `N`@#. *CծK3ʄK-P29 R| ;F>Z('XrvWq㏊r+y#vd ΢$yT8v.k4C,%YTISScg)zҌ5^&] ~yΑ ѠD2\ZjdoMjN Msdu߃;V/K5:0JM-&4u`Mqt#P[ӾQd`bMt6f> stream xYo6_a/"=lmvPh~tA`<8 4Y,gw"OİRUTR[5vj|Q"-OVcKq;G%n3"o@@{WD.IX 17A80(N?OEGEichEZb\% (y1׊j4f7FhJ/_;pF;֒IX`8#Vxw,l>`VU7 1_wޗ6Hj\H2 а\L&= ֆ,=ּdgw:馭ɢ 貋D ^e(7ІH[(ƅ ;)<8=Fž,L$ F(QwYwEv܍=$ 01Qy1s"^%r,d~Ip.'6,޳[66`Cú2X^LQҭd+®=}B=>cG;\܋)(;w.&>fz EF<詧`U +&*˾O  8r잻W䜗u_::ټcF^ڊb}j^%O8yаiǷD:ktj6&6jX)ٯIДͮN}iO[ 5r]w3J-)7,3^ 1w΅AZ^+Y7+--Y:^В^2Mgל҇-S2f./5;L=ZH-<>vV{_λUswSap{fpI8 ) #筢ߚMYrt۳Udt) ,U[| *vj <Ͽ̏߅աkzUSݱX,.owaPo8 Eq*g4 $IH@Vr,p{xD?IanfKhz ,f(g[E\P\ ~NSk60oykI\5E*S@ ҔSحmGe> J8Ku'#" HfA/q_TlIKZjUDs\P7~Z<1!P#bkhgbZ(~P+>ՠ&fmM ۖ$0 V4BDC2Шsg<nLyZCae^a%<ʄ<;{L5,+V|ecGZBXip"з(η־e3 UMQ7;jdwC4 4§xD!^(w^S.@c\ju,ٺk464S*@k(7GeӉOHȾed"2wN<<3 XkjP?6^w9E _7ZG4(n53Slg8A!I2^54 E> endstream endobj 142 0 obj << /Length 1231 /Filter /FlateDecode >> stream xYKs"7WJ 6 HN%U!gn/!6Nj3!0c{H2Xj}TwK2~+v0[Y FgFֽ3<~߅! [`20'ܙ|0t3I".7 ĉ$Xdn,>"g'V9 }7xed։S{nٗIA9Of%sl>هKF6ZI 5Wp{ Ü;{ )<*)=aCޟ.aо =Cl"ޟn}?ӖU!n s]A&ievcJ6g[?(ku \xAR QDŬQ.9tba>\'nPc,R˽:&0rNA+S{@ihy!=(9}CC>T7"M3/x#VV}!ӏZ:ݓ<(|AEI`H+O'|5'Bf ֫Jf m6Pe*E-! OS@/P,Mu ow*%} z>`9֯BT<׼|II%zȁ%/ RbMvGtЂ:?^M_l᫅9qѕGx3\?'#!!!\3J\覶+G\8V UJEUk\Z%SEg3+_K_Ωvك]}QWs+ҨdXSיY7V.iضizp~ڽnz zܾ&$YƷkvM~9S+G&}=%0(h!4#c3X žB]A@j5^i)/$=![^zO͗Ƈ ejb|V;'9ܵ8; Oei ؐ$wqVs!E^v :/6utN endstream endobj 145 0 obj << /Length 1552 /Filter /FlateDecode >> stream xYKo8WVH=,--EbaŖ lDr_CMdSҐ3M}]QN򔥣rDLlN#BbuN_tPg$OeL}1Ck1N-TN(M;O޳X񛕼i)oK3[U꒏ڇ$X'$D0d~TIQ)Ҹhd:IIʘ/u#FzC(HiFNK,#4ՔZ 7ϯEAtExmг`g70طɜ0(Id|2ڒ0EB'0UHA,?m=#? 4qx])= p:ݷ%)%е^U .% ~Es7GA0 SzfIęi<ݎ$,7*H~۰qKyY |/7~%'_SF1+Šwk狈 Y!16F JW:u 2 !O޺ >sSsL >:F"\x;Ox ru{Xe٥2j{ =c7aB֮ˁei5^pl( 7(n!8AopCcEArG,ЂRW{`#fJ$Wς7FR {riPvP2hY ^1AlgQrќL Yרø]roJQ6^|06Gȷ{I#~tbd{t"zU)2WavҞ=.7<оUk6Qu3[;ˣh9S0ܾ|=BO pN#$AEy]#k)P1^a7q/T W|[tFdZ=gYǒμw;) t(Gn*KԞ-o#' pta{dTqmn+{Rp$ӮIcO9q+t@{F8nۏN_xHp};42 <( /.k6 endstream endobj 148 0 obj << /Length 1831 /Filter /FlateDecode >> stream xYKs6WhDAM:4^΁hK[Xr{ v?z.F9+V9S:L2tt=?9JF1OXx¥ =[K00q*d4+eGGTb(Fq$(I38$1BE/DZL%0gQV#;TU Q"$\L 0 [E iE83k 3glQnښB0e KMVEw΍2hy1DI+Xd_OaOGX0ϙqf֮qIyiдԷM)jp~UG9\̈TX \lC+A,:[[ ,"ZS"a8Oeq+4D!.C9$ͺǪX#+*qr QÐ8 .,$ꇥ.uYatc€BHGG3 b >{r24rgkO-1*O۟7h\wHME2oUyX`!vS솎4@X؅Ǯ&5ͽ,iڻGO +Zq݀i~[m4pLa4^QB2UKz^8o}r]:InOCTu{XwlO;T=Z-W,)PK poWη ]޷?To|msQ>pi9:;pa,y7X0>:\·ſJlyE5 W =>j9k,Nvm|}(g Ķ2-e4c*iv ? Pז endstream endobj 151 0 obj << /Length 1410 /Filter /FlateDecode >> stream xY;s6+I$L<7L$-Q^#Rg;, Aɺع X~)˔ŀGqTD   $ =}0eqf`.Q5pueי&Bv cccLz7ȧB>[~dw=Z8.#d3R_zm'T qC >s(Sâ `*1+#pҨ'?¶ѐX(^+B5 \f`8+ܐ׼ Ҁ27O*b$ ["{ꈳDɳyAN{^" D0ESR·Ifq] T9by$!ԗZP"k{Q7XSUZ '}+ rNjI$=c:M>|Fkև4ϤUd5fKE"ũ6漶>'wNɑp&D@#ϚOd|]xZ\c Y`Z[iw+S)ܳe^fcf*Eϱ~:k$U3H{m\D69ڐǩvyi KW W`́ɦo\'=u>(?ʍE}M5oӛFI% endstream endobj 154 0 obj << /Length 1691 /Filter /FlateDecode >> stream xZKo60")QP Ʒn#V`9[g H8um| 9Tͻ&"3&M#Sdd-dbFsi$V:¶m*lwo[nڶ[VnyFKjm;tPmm)؃2ơ޻FHE4 {aIqq㦖:y];R6L:Ddh"CřC6Έv~j$֨MDSF"6ϊX!¶ϴ$$=2fl/veBg߸>abc |imȌlca걎c&I2`>Hr]Ot`bhGILk%"b-q,G&KZZYxZ{wl6wp#tdS'J cy1RoU6 T`SD 0JkG;ڹr~5[,dgXƥ9잗[.m#PI, ˓x PjCqdْoqT_J괻vdW=csd'dI8̂_6";g%5G1d $t):N]T^X|ys {|Y4|+׷n\ǵnI ]mZ84gs57TOR-!ػZkնA6X*Yӵ3z7qvݶ\9@!d %[$Y3J(Y#l[␈#FLw9RQ8 0_1 "奓2"},oY*C{hE}fBx[BN6j6ZpֱHe淥XLtG20 -$&2Q"a".VIst奄uNp'TiѠm@C`{{0Z.2=\YK\Ɲ3ƞ3K°pyT/o.kB>_Tȣ6 }9ǎWް㚱5lΰ4X yмKr{;SEC E@u'a( Og ݽh߿z]"U]t?ri)LyȌ-IW.?)2J+mUdsg^L'2Om ;he1>ʾs۾p{Vu-xFzm$W#c#o;FW1=XgLƊ@c7>d5&Ov Eeõ cJ>Zc.U !)3ۊ DT, l5->/ _Θ7>]cCW_'OK48UuH#'΁Sڂ*OTC^;t=/'u kGB.zȵqBֆKYl.<-\ϸ+Ksq=戊ż{o+׬~DvBճj0 Va?K0h-LDZkto~57 endstream endobj 157 0 obj << /Length 1486 /Filter /FlateDecode >> stream xYKo6WΡ@DDIzhA@M> kXi{CvbfqH|A9ϼdGd($Oo½{4Q.Z%ڷ ϩhhs *?fmԧ.tWN\&DۈvrSUw"n`{#giu+L" aj{'ϏRϧL(GceA%J.8$AJ P#F0&yY5RDaqz&,&ʾ4T}6*ksg6rA\}&6DQ?dH!ZX٥#$ Zj ` @5/5Ba LQ*)%pvIlt0@ &Ӏ$f˸Ҍ01; CÔU9m]0paQRA7>( ibկ#|d ݔ{ȑwnB { SVW"p2C:BQ.U섿le Cne ُ-&p]>Z u8~ [:~̞-*sNAeĒ<?*ɌѡIJ!ٲ'yu%M=f^+XϠ: 36k#гS Sg@zVǁ-Ԫfwtp-Q,R$NY*1nk3F & 5j%J11wힸU "E2EĪ@%4ZpRx gMl{v TT^\jm7x<]Ve  ϴ+ծF7h^;a5w垲ORk3¶NxaxVMGa%zRwx8Ug!sx9d -h'xpv7%[ F:ԽCdY +w&kESIA]uύODdJѮ;F/G%̂~nܹMc.Mvƕ;@ R]r5gm0;6wx8g@c ȏmV(#TQôqO`ܢ]6*Ӻ~j%gG_R2PO(騧Ia_md% H?{.lH+r:^9*Z4=$D,$QF]> dKT:D+·@x9Vs hP}DJC_ZU}z檰V#5mP#o0>0TfxzG 6=>úslnȅ05h33GFy'٫ٲ&ԯJoeTlFiʣK 1& .mWFʚ­4pGI#d=>?И$UoI# )war/e1 endstream endobj 162 0 obj << /Length 1597 /Filter /FlateDecode >> stream xXM6WE,F$E* (=u{[6,'Er(S6x$聖,g8o ?~xZ#Jl9Ұ\#]H =-F''~egT兏\VC{ڇILV𺃶lzϙ̵I9e9JuƸ K$\4u~P_sTa~* 2u0VQNR%||X5ȓD?]\%$g>8k qm`Zk(F5VTQ 5B0ɋكUJ^${-8ۥ{ZHй" p~ȼi7+[}Vd`dIPBlqmmgmeœ{_FwBVmҎw41>{ a WD̀HfVu?z;a'خI>6 bȫ{UF\DAdn3?sSy &P[RX^BL9?#mmY8Isiz4ZQ °m"eM.ש*p`\zպFv~)bcr `XkG4w05~Β){]~<6 B k ʬ}&]Hўhxc3Ԫb $ Jwv K*yt'cD2㖖2B),1`)S8(]]=qYS jkו]lk'Ju67<s$L8D,!,Yя^EԸ'&mF@$Ǟ$՞3sMq8' yfTa;,^Wvwd/b1 ?g=!cCCAޒ`+RO*3b]?g|>á4tY$ˌq o=) E 7L /8EmtߧP眏\B4JqWo]QNuq`%n)~5`q7A񳽫CH~;_G\-gK,:c [["`P!1@9Lge>!lh.l˳W~\ (dDiPO$o endstream endobj 165 0 obj << /Length 1817 /Filter /FlateDecode >> stream xYK6W ĊHJ "hEdY5ֶkc^>Pl&)z ,adQ[ԗcYڊAZ tF,y8kPȫ'hdChN;=.!S8^`XH֊c"MH.T+樓-dW^ةk׃ 5<ơ;n&y:i(=8bRj!5<99.8$ |0މlzppmZ#ߙ~xPhep\6VO J%`V\J^j]zn #%0^]ch-T!T ѤVm<9N/P=XU ҵjPw~g0HX3XE= 'pE6x`6Tfa ܢvQ!dPv(w\4=^c/wýp4QkR#)?@mz)Q8Xzܐ/@G9|C[TSl_,]{뗈EQR#/[9y8,PTCQ9odߢno;|n%&/"A-y:4Lz|wAB/h^.e|e?,*¹]Ǟ`' =5-bVC(Đ/᳽JJABmusA !i0&Hn!gskViKp鰩ͳCl.+2EK0;t?cu> stream xYo6_ax`6+R>%@mOE=%-ȊcLq4>N%;aAuKS$bNJǰEҰ57ރcdFU)1HΈF <_˽?=%&6נg zސ@*݃2  I$u\'sA'/߁躽{Y3~=s.Dbi1B[n(1XD-؇s@}Ex2'`(. ?kG YTԊRR K8 yKg)Fuzf=A# T,qQa^|v~i&hvE'}pe)&:>>~2anGB zSAuGtYesCRّN>?#օs[1._sxƜL]1n% ;!d譢^#0]삄65]4%cTwJEœnz bg$fŰt<Yk Dkܒp,lXFU)Q#24dR芔XFģGqNƦD4-H?zӹb r\5z+ث7[ɩ VN/"%9PWD .&eҮ:W0 @xC2pJIuYu|n4(Y4rWA=(גa"_ih4.sB^entιU2@ڻ3m}j94z=,RŁ(8xiItBNnz '7 ^jQͨE#-Vs[re@E Z{`ֵ*4k.' 6Sr\qgÝŸE[@} }wfA5;mĥ`,ݐ9RVzNwjqV<@5 endstream endobj 171 0 obj << /Length 1724 /Filter /FlateDecode >> stream xڽXMo6p닖Т{* ˲-pH$*.Kp?\^dp0_ pb ,`ތ({J\jq=\\$BܞW XURr|wσI‚&ޔ%Qlʴ B뀻SqQ ;gZ:'I;xgvMϳ.'{pSO"5E/J}Ql_+VcFjit PK#P,ە})_TX} zt G=w𘞍؏ťeăDCAr D-ߣhf}u(W;n8$ Sy'5I xU.ɶ'$F} jLCn(%ֽýE8XChM si7euG3ԫ/J0d\5bG#pqOȺ#ip`Gz`ڔ |% 7)#6 W>?bߪA9kb4#$fmfE(r KXe{d0n@U.ZG`N[BWg!̔h^j4NZgky?>_SuEJ2wq|O rBͨoIL?T2N۔)麕F%;p2MT|kƸtT>;} miE#4&طhV=蜧e f/aP{q&)/iA%of+VGkK"vۺlDMR#\ Ѥ@KF~W ;W?v[JO;M]ZKzyr I  4n< rUO@l#XFv%rH Y0Y@yӘq.tڤAL3EH=O|_ 8$ < !h+#.|?؏A>Ժ\ j/5gi{kTfz\lx7b 6-@J;b%,<]nO%dSlfҫ AJү1I.U0dc&Q{ҝYt0clAq?p|(JPID'1 !9J7,Nl!蔘 Hu]tO}YAB5Ȑ]Md%Bb0)v)jU0G\( l=϶@t%;ަ9ĦNb(%~ ]Ыjyq:IWr%T1370a^zJWɪ(DrI@j09UGBmr[!x+Ef C{b(Mc%K!"ݘ#OJTDX9v)ƲV")x/* '@7wK6bS@F3e' A*>+IH:xF8AqH:cԮ!DV!;P_mX\")˪E\P!'+Wױg%gPơPerLAu!qAÜwwGɐT\Յ7){8$AD:Fyn ${}FwnU!M #6=eps|!i_t& endstream endobj 178 0 obj << /Length 1582 /Filter /FlateDecode >> stream xڭXKs6W(DBHIc!3ɡ@QDfߋ]$@)`oէoIoJS?-^|8M#L'źw&7p_Mp2|_~ $sG@/u\ &B7$|'"RdXO}i K KgDfZ =GRX*VIFUR9?KZ{.:IK4ԑDl mXA[q0ʰ^9dxrVi[^!k#گkj=X0 X=wlŞ;nU{UB{P cfJ'F+OʹY;f}8Y m;w{xi䙾,U/6ΚA}@N](ѱ6WqyS`e38j s57H0:Àg:iӘg7&H@Ҥϋ81U66sZV>;n9˃Hchݐ|}.]|9hOɱ{`yhv iܰ6AQ6]N{!Kx۬7'p7NA bFS2 Rx .Y endstream endobj 182 0 obj << /Length 131 /Filter /FlateDecode >> stream xM0C|ō#\nE9 @ta,U9lA PKxG yͦy=-Mr_5#}o!"24GT jn_& endstream endobj 11 0 obj << /Type /ObjStm /N 100 /First 859 /Length 2013 /Filter /FlateDecode >> stream x[M7ϯ/u*[BB! ""! ED@$^`Q\#W 8.zr.8ǒQGGIL.dI]Pl:\Dk쐥H1WQ1I B.]CxTn$䃳%''6BAKr(mE.aߠkT( 5/=JzU̚\ GA-A֬`Pۃ#q1,1 eF; NRJ L' k dC)>҅$ a`oF1bm<1@1#hS;Hfd̤@S*Hcf% ]j.a#^ az^9&X40G6_JbwYaVEDab>'P YǜQ 2Vcdk1W?M1%>Y,\hO0T()C/so3CrGp[ aNڙAYXim.}a{1m.޿ݫ{LZ~G;Tt~Z=|X%?4xlji¼xS6SSa_h^^}W>r?I@DqSuU3j"5;bWd3РfY_?Ô0P)+HOm::Os_ݫ6׶.fO^cIA#rq5ϼ0aOhkC$';]IZa!#BBE+{BkSBR7`y!ɫ4H?.bdgZˆءaJ/7M9z txW+p @ISm)VEe-~n@J369| 6E`{G  hyj}t}*[2rYuV+"K,e%:q r^a+gB=o./r.gdZ~W爭 ڇP> M^ƹYD ']L[f /Cs˷W]wu,܈}.0kex/]Fs蹁off7Y[5d 59וD)'^ ;̥:^ӹ>+~ȳbÚ`91ɖx?//?˭ :}x>Kg\1TEdC%O%dVA D]?D) Y>=HM(դeGBvZ,+h|@gOv}g"E{zF I \ e\L8_̐%nWD[5a9<mh*g}j3-j}\9$KH-КjeNB;G?b Hh0RbYNO3DhCX_$)_"J&u%]y߷753UE9HU}~J^BEV}rͥ˄Yk:a_miasZ(Oś5m-B*k#gХ0ļ|jP}fLoUEYU0Ar4>&(aYO0 <T/M6D+Ўi{É7 SrKoZ>`WKٲkkF')veXR2xSN^{0164]4DZ} !31q,FX jl"6)Sy5մgaNm8-m"ZVF:ujTixGI)zN:RoaXrԠ- 5{-U$ͶZnr ~͌2ɶ6_@>m<< ~D`OA\Z஼ʛQj=!hfk:ӵmor}[MI endstream endobj 208 0 obj << /Length1 2011 /Length2 15672 /Length3 0 /Length 16909 /Filter /FlateDecode >> stream xڌt Ƕm۶ӱ*mtlc۶A{9?ƽƨ99+ e53+ #3/@LAT GAnj 9& 1gL`uX8yYxEp,fff.Nn 4du/G࿔,?sqtp2~n@?*7caYLVp{?l e?_>NIUDRRN?)W)* a0r0XX8\~ۏ~Bv PgAhۗ3q)߈$lm7Golge亹~n._߫+`ku2Ɵ boa2ZHZy͔\M-=.khV@e 3}n9R?)ao`ז~v ɟf@M1rrDqDF&".f߈$7b0I>?FLտIo`R/0>}xLEՍ36gYݲX??>3an/ܜaI >j?gvueῐ 3ǿ՟9~? ?"eLB@wr|]> >}]ϥertz8Wnٺ~fZ0O^kMݜ?]=w  4[[v0 nz`8X8ʠaYsFS(6֏y A Nsёf:w :5C fj;ɍ'=^k9k}z'Uڑ0DU/ak;\Md6o o Y|s做 uN0ts0 Mp_־dߨ8k&ˈ,?wAnSQKHiv< D1JzW|SGP#f~%C)Y^$+v:G;wi/)(uFD1VJ|8eͫV-T۽G%),ΉQ)\y~v4P{:V)lϢnq JpغnqW7sdh4h3XDƪ3Yo֨d$v۬d{1~CTjyabJ@o:U~b=l3镬˃R*57"K%㼬$;Ny~@}޾;Nrk%U}5QJLh)V{?-= O~-zYrN<] hXBKjęF= ='o6iCoX7{( lpw>Flƒl2Pk\ D^"pϿ>O$7}`¼R"Scɺ !e8-{pLL*f>Q0 8PEQFg*P6p5~uys& HS(m m E!\?篋Nm3KM3x?Kے rMWxott9nL&I`s<Y{l#[w?F,IȃXbtwrfqDkZR/ |M'ʮȁSܮK tϺ v~!sɣkv\޴#SĀND)o3-Djbҭfqe_']z6g Fm-$Yp^{䦺/4 lAuoo̗[+-v(#ֹǖl :X/TE$99Yc/DLnrotkuD"$g>W8̂o'*EGtm`Uu=$K CWr]d0ЪC'\0lC [^CtnZ_T1Eg/J/7#5%D,m2Zj wQr!2!iz eTKy;D Bs菬A῞Ҡ8zX}ަ.6RbMi/6ad>x`Q׬骅}2N1ۊ#*ކ{_"{l*) YT^s;?qda0;[\zah75lq]e˾Y{A2qέ(5^$6j5\2Oꖣ)[cACk\4d_2Q| dT"UJy"Q(&b>EmFk52@oDfGvUH? D[Lg3~4VY9fЌ8_#ne$dA,p+:Ntrwp5 ZGBE=9;,NsjuE%#)4rNћD]u{lr;Mno}a|1q y*Pw/IP;ۛ$x]Q%坛ԋևƞo􀽦J8ӆzBZaL|qͤǪv[545zΣZ,} s% ^Qk47zAg3Bv '{nv}97.YlJ&C#u۵N'lCBWy1Py8^{YAkA EUFYj. D˽:/in_6 "هbH\E Eʞ ߊ q<|1 }5m{&?n !3@Q\6VWw _%cӣݓU"Ƭ?P_jr91)LɊGӣ'!`QITkj,Yf~Ix7D+R0&DXd}d.zwk*98D쨜q 7[u+ZҸFf-=_rlFZ 8G&}=g8$ʁ]gwqZyδi2 n^1bk=ei~kz2GxĹ/ز{B8xdh_x}_/ 9U6^~@pb"'KSO.}0U$qiPL#]J!7EJ"OJfFv?RAqgׄ^(._#T2G pu|2%ɷ4WcT }:SIG?I!jw5zN{;$:D9ty[ |ևߪkP2*AP v%<1/(x)MiAejUBcghBx;CSU%gGJ|8 7,F~ O[ Rj+Q}]ɦo;z @2$[ڡ/\okqFjBmV1Ϯ 0Ls湰]fgQZ*8 J#{sظuklNxhFp,;zOBk+4X FBbЬ| T nzJ+, i fL )n̋9:Kn &?~tCcfb˅|DRuEC:d"M8(@'vAdU @Uar5q̘{&eF(46ZfàV3 yr[nJ1Vf.z|H`k)n?b͍HR!O4W<u؇~ 0^!xgZYʭ5gW}dnoD #B6TƇљtq?"=Y]d(c%{Bp,\¤P,%/: N/g 8hŐ'^7}N}Mg$1xVM+r$\6\)9l(ATcP]}:MBlׇZ PE>/Sǒ;jKfԜbaꇭ<Lxnzl&Te1i1 \<"ש,W#1 WѲ\7 %WvdVZX3DEi9%.eF7j!d=)ÏeKE[ꅵܯתK]y i.أg*$d5uyzJ"/H‗S|MW!!gUI\Zɲ瓡SWF:D5vueJDN8j,@Pcǥ/ ]9@ϒܢA9- _J$jۆ4ɑiN{@W}/uʈh:S*/G¦n.ɚѩtBQOKw H/G])k7sl~5_{]n~X?Md_~M/83Vag[@mzlc&;`pI##cR"Tߛ!B6k'FhY:#RQpGNȳ;[c\#vqM6i\p I 2ENl;ټ`{WTےk?iÄ $ \yJkm3si29~,-"4~HmQ .S{v c2RB2ڍ!~ssXt9Ըғw)o2LaTƎFNEb~}џtw:uyJԀ5j l!!cMu/Ӎ?EvYF :{1>"*ONf9^Zħ+d 6#U7GދVRQVΣ=sĄ;?bSugށ#|`: ta媺l,fJ``aCV8!ԛ,u﬍~\:\mEфTLUF۔61FII*ՌR+k %s(#l(J?\ (gEggO02Wvl1VzF؀h׷T f^b^P.b+ GUyzV5389ɮdޯ]ni˟zNWR뱎v0.lI :6p!":~}FwO|BeS@st]fBkSG;J~mALwc.BX*Vy/Q.pJ)I 9 :iGQ*EJT7%HLTssd|y":NxqI}KQ}D;x*ȸS˿wͱ/bur]wE3\3JEjYDL i#(W~s m \"ò@bylR{PIY1Vﺦ(,!#cQ ih|zOe$Ž1KF*+,u4Km}35!Oz؊\l95VѭƘ-'%ipʆ'fEB۸;Tؐ:8{c"3NHkfw=qJ1>$[MG‚0e_m Qw|5k"8@TI|#?"obsJ:<٦~w!wJ*% b$C^ʠIdi*Ⱦ>aCazƩY+ Qg65 0vN¦p}}Bb1Snjݬyأ+?:oWe^)T!C6X)?PB]LL х 5z_S(za8#%{/y Z`Wؼlߍgk7/{#EU\IG>X?~QY+jI'd 67x(J|hics=L^&BiC4(Poީu׮ O?[Dy8'Պ_2Y"gV{%J{kq Hd9i^owݪuu%PKdmJL=}2p.ӠLǝÔXh̥sKU*&K ¯O%д;uYLs<cA-I?NWcŏ`w(fY7 ׼ hEI{E\khc=|@m.Eg72>Lw{A l:Lk2~m5j"R?کg#^_`DYp3'V,ĵfbNZ0mUt2%"A4tT:%pf~9~Q>c;o1{QB%$ͩZ ?67Qg(Ta1Lu31$NVSG>ӟtŦgP^bIEEf)R6KbnXl#N֨AQ^DR '?Nʘ)YA̩kwtjbsICI 2^c o p[r,،K%\5aA$\rcSLӑU8]ai-Nܾ4POvOxı56Aawq1s2D,pp}SF6ڞ]!-_XxPZctO:Cm4+2;~4HS=-aZK:ILJC7glb8BW!6Oao^#/K-*4Z"-Z?~S xY6d)N~QҿWL:i% x^2a @V/sb{a:2+Ć(l v^q,j~t3g vje=8Q·Mտ #f+8Ai9x #fnXek.DW Jrw)%_l,H( Ykܣ\iip +ďdg%o es0I[ծa`|ѡvYY#hw=nƟ|'7[۝}3nAkw"^MF,\m9K g-o*ޝHs$)3ױC9ş4?2WݍaSCrߚ*-]6報Grl>6f <cd__Hau㨼F5ֈ_O30ŎKd(L{A~B3_!RZez!8[ȳi;e)ޫԛB~x7_1CѳvÊم[xlCLx=ȘsmCXxza"7X9uF?X!MZrES\46$s暷Ҵ1}^ŚtuZ,e}k `ܖM">JM:؋`b Z/cJ2MXN0껷o !NU+Mz\uX:'CbMMG^g4;J!{:k5nv8hRdʪ[cfoH?_ۇ81EV .G*Xa< wC:z G1b! bV ["WڼdXNؑh:P+Eh&%+\mB3yIKWFx"_\tJ0lFEym1./e7-6^II~_*;3s^@چwC@Gv~2+I4NPV[~qpq4@ϔTh?g!kmR7X"'qY`blje4?~K-̲%Ù Hc:|!s[Q,(Cߵ(e|7s׼~Nb:H3yFK KtcfJ-8>N/ZpMFʷ( xP1ƝuVwKp}^Kd, KzMEؿg"IRAx@r?鑃;+ǿ j+gO䀔.) A =U#Pd^'[2,i<ޅ[iFgh֟ѯ`t^N{ |NywG<8yͲ _ Ֆlf}EuzH樈5y<<޼zQXT|,Q9]\?-zbbpdɴ!ϔ iEڟw\:x'~6XJH;n=[hI03Dy!Yo W?cO۾#tke.CUK^sZDξFT`b]1WWڸeM* `wo"]A747}l]Y!2S |ۋsT9BG^g%p0C!U jiQx{_5mнvć* WYAa0wG3G.;B =oN%WlPf0< ;SIH&$eb"X=9Ѻ3T-y&W!,>ٕG8eYOJDbmɭ,n+%8 ^(L^?[!?i~R:QPlB\:ExD:j"k Y%%7etL`\i@ 9ZREAgP{C&|[޼ bwdK Fz&d71}2HKKyPo aVV1wx 6[*_ #ٶn<`]ǭL9 8ȁY-<ņ;l4 5K9-4)!ˬ u#ZX6%e;`G0ηAct#I93R$*ʬ͓ !c$L(VZ~{bJ}&K,^d &['cMU\N!1NhV:w8r;ΏS#T{.#Mz6.? O "%Ui5?/v+sJ새d>^=y2o~u{n*J:;-01"ć7Ix+e ~;x< bH4,ūΐ{ԬjGa\x~Xk0b|?ǙqR4*m!+f'U E-E0ߑMZn2k*S]08Crג@Oֳ|cFVS>`ψMG*imP|LV1ӉWMS#itŗJ9zř K& xuP;zyH)5ƕ?LR[u2ӎQW/x56}m7rqjQP~y>PNlpѹzC(1TNi)\g9FT< ɋbMk7H0Ju }(8 l,Dzi ͟9hLgq՛)]8~U$6H?(YMv)vD/mF5'u)\֟ HcG󬼜IIUC hCA|` Žʴo~ 尡`vVo-#F24 ѾӱSjCŕw)}/kI%ak3ʿu$wbMK+Mʢb-@GݳrS=[U1J;!P,f`0LS ȉV)KķJ[&Pi~%PҖ'g>V2[_x^"ԕMaPZכr7aPDjHFɦM/~t/lY *ƮoDTSdvWƀXL$쥽:5#k)Okl^_IJ-d!W+;M5q 1; X+ O.3*|(ႭlرnB1.7cT(+ֻLudRCr|UYJxlIIL\/أ~x`̬$/m; AK ׽wAo2;]|гkJ Z1.rL*#mNbYSۜVO_Ʈ̸1 dTӼs?@Md$nhhslP L(C(IFŘ ]H`m(E΍PI/vv~6Ũ8ߗ/R0SlYv=-@n^U_̏k-FȨHt/kjHķJѵ4Z|X7G:Vk"}h%I&7ms?I }p'^WFϋ|u(a'<&Qmt= {uoSDc#'D=0-:dd^ j߀nq܈$u8LcOt$(7h_~{;s"߮ W#aw0,ENL.Ι?9G0Hv`h_0%J0$}Cu,PpGK U\Fo=/^Bњ>(IdQyD޼RJbo(ƺY‹P4xPHńA k~0 :_'vhD-F_I|SwQ*#;?+x -﹏Kt[oyFB|8n G`VNGKum4yLlzʹwCjY5ޚc*Ǧ# }B&uw}yFv9O‚&V5}v~ҕ5ɥxD.*/8;mͺ}]4Nž5 Ƴw|Ȱ70kd4 N_mDfdP|d%* . @9vZC *B o"ƨ4%|@V6Ew8O .G"FR[:ϹFRx̳CEWT3k;vvqJ*7 pFܻi[GW ҂q삾,%Fw&|uߙjڈ(,Ɗ\'A eAZP鴸"}r/aO&6&yoCЏj3˔幠1̞j+e?3rL6*}8pVl=`af"83˳BL2HdBX_n/R;gmb"XO^k"ǩNy_#dL ,B{#?U{U,} e<>8VE{.J_kZ,:Iyׁd\Us%.*" 7OP^ 3?g$EϓRd:-VKgt9_1@8>-CقMܒ̺ Ŕ~ZxBzyb8%윙d,DhW17_C <]㹔sh>Ƶn0AN"|}PA8ka}Jc%gazE#R&8Cӎa4&ܚ_n!'9^dUiM7h5OFA){-a:n*o7J#}NK`Wv p+'-čW:-ke+$RԈwM&_| |p|s&FsQ3+ endstream endobj 210 0 obj << /Length1 2140 /Length2 14877 /Length3 0 /Length 16163 /Filter /FlateDecode >> stream xڍTZ ݽqwwwwwww%;=@Νk5vթ]49* Pޕ */`bbe`bb%'WrKtvrCha3v ;dl̬ffN&& <1cw+3<@K.leaqLܜt LƮ@MmV@WIAg`ll!@Mr]@3_ vKc%YZPu0w0v> V@{7{33t@h7Yo0307ݿJde`cSS;Gc{/+{ -(!J07hlonleklAW aes1urtuapK#_i>,no&`gwu>1+gG߽}6>AVf0ssdTrrJacؙ89@'ԒԼr2e02~q1v\݀~>t/efYLVw2}3鯿~03{[?]1(%)" ggг3YLͣdl:Jۛ;.O)3@o. ;qW)+ߊ$lm77cr\?@c/U8ؚ_.[V.V@3%+WS˿o_fkeTrpi331v|<.3/cyHq{S`l1J,u4zk !q~sgؿn(o`8Q쿈 (1% S#N`AF? }Ԣ_EAuAF:hQ7𣁌_ ,%}AE` #_~7P,?t3DžX~hgdPgP!C!G?Juǂ:% !O!;}]>?GIH0Z:]2=qA8#@sf9;@SؕESPx'kQ8w=!BPdrNC^Z%z9nmhKRn}1LP<94Ut,\?HO&d -CƅT1 Y?Xs<|^ ,K,}y|lO4HwsSD2 ~'1>:, X\zppt oQg(|DRe|Jd£K :ꈻW*Ʀư D+vfLEFmUsQ9Kg_ a]_1泜Cl\OX"m Co?uD.q, rR6$%,{"vq>\MMICިi M2[~2:F}+%ޯsl"j(-t٬B8a#k1&EʢZP|<-b*8M4!;gMqQjd%nKMdLgCD0)HՕS@R1sJVͤžHnLy45FPgl*o ?0rRCH3u{, Fi(uO(PL|NiWyﭙ*Y::vXuA#zv GOpp^3!!R:W'Nc3z@yACF)Wׅ 0j~ KS22DT6V12۝BxDõA(:6ڱ ,=A1\6p'l1gn nS0s_N6k3men*,ϲk4\-wS[_4Y5f$oSFlm(tT-QT~W%Ҕ-M+} c'@'_mP9 .P㏂O *KnJ;5+CG]d63s]J͠NT׶A'R;LFg6Gw~KC-!p4(*n},3E - vv4 x-O2w]zZm ՙ/+4-x<#w)-rm ?ur~}n\4 C۹~o<CLVkHeCg'Iț$ai j%ܨTlw}@F0+6¨xHTfl( טdgT4h ul.f^erW/'8館NxƃlX`(($K !Y a8B/ә΄`0Z,2"5{t܀iyN xIv\buCq^Y6nȪ $ 3h Z]7'xlnGɔ/sI D,Ms!ڛ*f⠪$UǢҘCp}F= bG Q4;l=3#(]q3(pw>doe<}&#;4#nr&g/20҂|Őpj. ~nrFˁ]$9]spgW\^h"p||Ykul19Ȥ>5q:J/1=Un 嘎lgR=vҝw 0j}L]b*y\g:.BNc!3)pA^SإZe}W'@4:pG:+)V@$!Dw8ow$ݲ1rDJZcMKruMgރNɱeY֫7T 5 N/Wn*^_ll1(7Kop'S?v?Ѣ65xʹD$a>|>EP3R!Z VL\bTd<yrx8o a[U;X+F c3[1SY*H撄G92V*AGiq4viĹFpX)8tiR.ov"zUүX g2c5?ξt@,n6o2>"p#pMC^Q-FE&mL7 9SmZ'ZlR@HȪ嗫dKt[{_WIj-,"e2uTM?2gLlAG$ȭs˔`ڽMXF47idC[~ӑ1>ߥr0rV9𢡄Fmڧˈ4 s3YHp-SP] ƽه*˅_;!}_,=IHgG244͝Y %olO^~kS͏ chͮ#nR 4? yh~jܗ1jx%|J}_1쐛4owCЄ\essE) ee07Q@ (Jݤ}oCiIx@ͰT.*8=nIė/%ftI7QmݡCu&m',>A[q<5gʧX yZ|Yp#-,I!|6:oDm: j*q~r( J૏eO[V Pd1I!^yw/RV,[뿰Yc.[neY ;klͱ>۝48KFV֫UG܄aI=4ו¨] g4+{qۚPE$}!,u#pBҩ"V*qÈ?&Yy_.'"#O6cNW w3o ”ƶ >=S!.bn]Rb@G;Isܮ !8q3 GvK ؁^oz,AmQ:Ųf7[AЏn R .&/3P@|RN|Lws]rx-B],kl%㡚S@76OhUH7UFKK93 r tp8Ő`2;P.7ts)D1SNⓣV"uC[j`j މ"^NñZmlQBUr_xԕ`z6 Y2-zlR˼N%)u X٪ ~eiZ%ro??nMF.rz${=sX7jc+qw.f9s&DXKtɞZϥbxۙI ~[)DGlڗ}UBo^K8~.A f@DL^u& /^07^VN,Fz^;`[pm#[Cv[ߊv3"պ2vTisO8Y-oFv9 B s@"\~ȹ KxLH4,(}]d(VJZPPi>@n,GX.k?MnH2U !Mն]q2 ~[k"k>?ʣV  B7:<WI:uE&&7δccb+0711c$h 6J vgP%8zBHVhGwK\HC9t05H#C-AZ&V ǧGQ SuR[}iCf{@\&-9`:. ${Hpgv"pST(ztjoÜ dlG(}IJG<[L9;G^ıߌ^#XH/20v{^sAd|Vz@Q^^Z˜PL t0IXf*HB&1{Fw,apY43xu䝧WRwWS-s=F\,CvQޣ Qs"O$Hԣ}17 TyC\pN޶|vb[gXlg;,tu_&:4O6E{YI'ب8Ƣ΅{-־\ֶ 7ady `C"g:1kKK<ӘmikQ]%]0 ǤN4S}Vs*'B -(?**4CO]:#nYI_}a[2g8gPov';n}͜Eh@硽T!OgI)ݽ'r#qT#vVVU[ǽ \2~d`adB3 `~-B8l.&SeCȄ%\LzNd<.Iid] [_L#!Ƣq}mߋP~^ܷQa r smkw`-31P]Y@s]9t+#cg*ҥ!4 xp~,W桃B%_نM˯ϖ0pSn|k4wweŸXdshtn&B,k0;al+d!w_8I%ÅX滋H@Sa+W_+Etan sV!# 3Ad b1*g+̻|HO/T']hs]~x4<6\1lSF |?/N r/T#*Hd4#8vmLVyNIZ Sѩ&tK658ij84-%'7ӱݷGed+ҭY/4ܞQ_<)Ӻ3*l||.*gNdҖhLkn2"| tU'z)cʝ9ۿ2GcUB@QI_) eff3/g.ٞ]@x6 Q,MgJIOy H(mC i ٸ84{.4nqM7s]pacxGK>I< =.g|v-ҸA,e Td!3? ޛ̕KmۅkEjx=2wpX] PI2ɣ zxsʞhlL2[4Q9=U9MLcԖ4Zg2}jOf)(k  rDRgOuˈx=l롞Ŕ%H$-?هx{J!aYkt3^#çbwmǼnE4TK惄v^׎|,T%s{htIDa}6)m8𐧀$0;gɋI՝WCϪ%8PdAS?: dW=P׵x +loe$r-pP!lϾ.dia.hRy `(7NțKHx3L^N0x Dlaf@pf%?|2L ZG4vwMKukHCZ IqEo!ZMOCG܃V+UY.̥P*59rȆcZ:C]+6f J4ӓ,Utc~"A Id?pp ]Njg3AO p+^Bxh}.X <,yi'2o#*y׻=>(oMG)$ m;sE:^-둑02FcOU mnu4FK9@DI?s> .UlN+Za?$ -LfEV//єǐPay 7޼-618פNuy]k3=a8c *ٗN[I?ZJe 꽭OFyL>bPBbW~n0,%ؑV>JSk^ ^<\ kiOoXpv 1a%8, A8w˃=6paj%ꙻq)?H=.sO>("`N?dr3:4O q⴨o1dC?r08T JzmjEަFyҗ:61I:Y$YD:WvڍtPL G_HÖۣ'a%S\42ߴU-J/PdL^tdabA.VBGP4c_?,tFLo8M??Gf䜎G"se2=|KpϡR jzdD RoΞ{{& [@)ឭ˦.$捙j52u1Uחgg?G|b^QT܄ #>[凝`A޷=g32h jogӈm߶P(՛k 6aK`1!5m 1IMv^6m|C6Nv8<'> wZquU{V:il79Hjh}CͮDC S8{OOЅF|T@y颡BhYqM-܅Y&D,z-*~Q?!W֗EXxMGVEhLP5TWv"co ȨupӘU?jE!(RZ(qZlcu~|R^SLX˹FmN|Nl,5*c'q՜X裋ɨ&s {so{E?s~lbÔ&@dp"yȤQ0ai.#ܿקȚ箮JwP{["pSur/Yz=L.J2B3NIya*3]5bw*v׸۝V6ا`,EI`k)'өl@Z-Em`i9!sLtKy%)Վ񽺕Kш鮋*!0foecKl$^##ZNia(  c˱ZÊBk(鲽~=AZܜV).~gEa`h* L}(g,ڥ>,N̮-]po,ːה>`6:)lpRlYYH46 uPK 5Mx{<+QW\FS|`%R@KhxQ@;"ɤ3q~K L/HUM2< $Fl\v33vgoȝ-GN9qS͂l.`H'#b\j|ǹբNwAUȹ:vӖd)X\r՛і@%@.(gw'{.nɒ 8<ܞ<ĉM$&Cū d$nvC6,د!`8˜3sJA E P Z|V|Bga6"u_N/$7]& [Jzp?x2r|/ m4Ą8,ғx ϳH. -^ N9~NyDHQJ\7U%&u9cA1x기_[%\ip9h E pޖ|wVQuH!RKN1ۥu{![6/x 1^+rd FF1, aN/EV /OFsmbz$Xɽ>2Gg]^?KF9ڧ&605(1-p{b8 K%\GT"~‴ί6w+ra|qnLY!n􅽹=q6w+Q+Ӱd*Ul g.6*An"ט#'j+@^B$)>g;JQ*h"[|>'9+߱"6d2G)M"g}*9PjOHTV9}?c%mr!Gͭ_)bV_Qf'ڲCj7Qn_iksVa5N(TQBe'HXA9\u-__nvv(6ConEi/#>r$Q0^X#?S;\>_v`feZNHxzi)Q3Eޑ6+ppuMBmm5]x!V!ȞΚ I;lhy%r9Wԣ ?~Zi9j endstream endobj 212 0 obj << /Length1 1394 /Length2 6057 /Length3 0 /Length 7006 /Filter /FlateDecode >> stream xڍwX}? i7FIw16RR@I Cq?s?uھϩ׍;ƂJ(:  *zzZ`D\\e `( T0p(S@=  PHU[Pc\*(aRR~\ Aqp|Fh!8uBP c/+@Fp,luiM8 (;Ż!m >;XKh#u.+_P 傆"H{4PyPO Cݡg t(P]w?, @BX_VGⰀ"0p޽ @-!v?۰uC np-? o=I]pO/4SBmvp uq7)`-Hp2~'0[_#V3S6P(OPPD$ƹE?|v(`?_5!ϟ 3> O]8L_3h3H7C]^xk/f߻EU ůOiAHUGxm p0ߴ7p$ {@eo Wk?e8~Y}"@(ā>`=(,D.@|~@;s`ԅ?uąa0ĿOkpO8 ~ u8Ub\%8+"8VbIWZJ2͙ѩTVtWv=ʛ%v ȡna0}qpi*4U+AY2t9[ u}1_=+okuwV2J~hk1%>d9AT~Mٮc@G ,M۳ mo85!VU1٢?ݷh}l4l/8lYI`b }FWE~ȋ jO>Ěf"4?53;M']@(^yg&8wpjhVrx7B8sgx¦D%3: eRwiDE#2M 7}$+w-v^ե=Z^l*)< heŪx{,x.YJxwY|K0% {(uɇ}*[ '{A /Pؓ--,>MRy皌D`Q?%{b.J3#6>!."Z)0+E*?A<l$v(-NֱL}Q!D.$S֞= nU.+ յoʬ% '#d;f7904f?_lc yCSJmEvԔWF!7^Վ/u`!WI6]m9ڕP_.rgBa ǔow n{2[ŠIhvӖ@YtcwifWi#MKL5CH>V7~}T `k{J9&fLIGB;{:0vD٬^dQ=yE)?lVĜv1h(_reaA=,}w6 ]yp6ȶFsXQ1꽸;-N< kdwckh8N.xC]l$VqZ'mc:a o"7ښe9x8|0eiA),Rz ;<{yu:YM sÎ4㗂'>Q[ܑ==ỹRe'_fV!P_<&mET:3F/WB "pk3wBoqŅ.ڝЮֆKMMN+mqL5X io#?'\PUH +DnǁAL>6C"pj&a{orQI}!*Zߦ?=eۿL4~lc ؓ5.WJbī$-4)g+,>0WP侨4cn ː=qTH w( f2W.bC@v/^b2{}q{޻{QtMz[Ţ|M}~BRekoJ@;imd%I< }2e{KaT\$ 㤜9pU#iG{qĞt~+ꂜ7mo4y;dn8:Q3=$;[hpT˶0)$3Tkxń#TmRQW@ n(vp\0!nWFF3ag@n6p"4w$T]#DqӛwAu LW|g> rudWrqG7p0$ {|dBN{eM.~`ÔgsQac̕5ﶠ9jT7&`Ŧp!a)BqKԽS8˺M 9t],`{kj 7q|IuJq ٱkgqqg&^u<`f&cR~!'hX9]F] m[;-9s;&9B=ZI^]+ xH޿Ğ e$4@mtĝh?3zfyE:@Ħ*kzooȧ^xuzy([[f1;;y7ZԣG[ϙ7fteiZix12k3&MSI =hx |R<|XDBN;4տ{iѶI=L]'N R K gҦRjnB5Io?.9{N-<1hJ @RMu&Ľt|'vӿ4Jm7L媽ߋ@;뻚߈ZzfB 336jԋxZJ5欟dEhm1YܝS]5])5~U}٭p֯_ڈ%nsMD'-xYP?31WjQ,J'ByZ"]5GDUg-TywcI6'8K+)u >I*3rjM$@X @^oV{2OXB973AmyiNK{Ouث]bJZ{s}\N2jN$'?[%d3I%rmend3'Ut:ү2h] L_oWCUGipjzQZ:s2. vזge7Wr lxʩSNo{a~Eq*dեUa or&Qla K3B>#Hr /Y[Yo=GsSC˩9*5\xϗTVΜ .Og*ҁR9+~Rʈ\cwN5m I#E#O pr-F1_k!pBC>Ԟ`RK=p 9Qukk ā6#lcT]w{migLec:|h~eힴԎVj&5ҺGmf$]'Ң!jz+Loi(f,1Hs{Ku[\-6ɛwhPs^W,[fN]Vz [(?SywD&\Pmy5,bq[|GHJ:/plO7^ʭ%*ִmX.bJy43wFdj - s1ޤ4捵%ž?Ŷ*[%c; #C Ԟ?Nw3@]$g~gD5qj{yW }s8%ɖ5q t HuXgswc=vN 8yMA;afD3SUҍTX]hϥ\4Q豎[-zߥ'SOg9aƁ[,7*Agn5RLޒPx%f˷ܬWV4p֛L&"\%Aٻ.趆ö,TrRd9Z$O0T7B(8U2#W'*l5AjKc%8ODmi֚)OџK/yxY,L?șŊ|=WzW|r 㳿i __=EH崵gLAMn0<"$]i|%[d֕~st$ۙWQ"Qi8ˠPߎw L;y67]|;Gg T3F(dpNSٹbl\$ۙL3_"R2Ǿ=E~м)M!Y!禶kNγ*+X7r^kXKVԼphRx06 2-V(|n*K1rsqg'<"sݙp\Pg 48;e\Uk4w/8t.ԎtXw18E(8 {NE>3)r !i#.*Q>I6G%𡱗Y8;(" wGecyIQ"^kB7?]xc Xy)6/&17ΠL߈*".|FQ'ЌC-vUM!BX6AҮ C^:s2._yܲ@1ECtql+lv 78Wq9{OɪwTt4)n8Ltk./IѸWbO1 )@ʄ,oHڶEIYԧߒ>ohyLBВ\;X!Ȓdcm龕/g-<@BHB7&4̎(Z'9NoXggM! [1^崿Rq,#<:ziƞMGL8:Pp.v׫84|b9~+ʬ.k& VÕF P.yYR yZ>{lB4gP€ ǒ 2&SKr\klu>m){VZwa 狋eM$hA-۵/UB>xut 4( UDjɧܽHKtۄ@sogU.vCJemJ)h\}D-bf`:ML3Gw[ F%u4譾nMB I:wu:LC=>=ºF@%03;f:2%MQ:dWOEZrߠ?oA/o,:eV8wiP.&?cn9!\}; xKN(&*>G:toj =6S|8kQ`Cdq`zT$K#u+oFn{fD]`*۪/:}[VWFf^ſ"%6nm-NԮ5hmK jAqFĝye|I3 h[09Y0:sX(Tn{NmPyk(tA A/!=q9[3lhns[ZiжmObh;|Bly mf/o[B3sj&*@aLF8{Qi3 ^AǛP˟TuуjjGAe=kS?\cغ^F\+tN1݇V^>ҵf&1lEI'1D^Gx{ssM$%D};׌yr`~Ju&Ka͘j$$ W)?m̭)?gBPlRWI?TDI,E=~N\B '젏' 8#/ۨ !$GZOp/5G uB Fy<OL4aA/i< LJ=g@rN*ˡݘy^|P ~OaM b:MZAH+52Pxv+|A+6tnrV-j9f3;Y#7&c2mk#R [/3 GIE?aTY|K}Y?%htz׮6Qo0l쐄j K@:UB׾c+rT"wr MDS͓ endstream endobj 214 0 obj << /Length1 1391 /Length2 5943 /Length3 0 /Length 6895 /Filter /FlateDecode >> stream xڍtTo7-! 8R7FIHw0ƀlAZSANF$! Htg<={}usseV0%$򚚪b0X sr1jrNC G"< t  O:E`,/G$Jq[4A5$&G:{v\PY'   W q!p)%0gq>>www Blx;#rY~ Ђ8L"zH;p( E"a(8@OU Cqpn +;"!O8`w4@}aF!n# s@IV w<4wƠAh~ݲ"ZC`S`Pܵ{٬+6vu3@]\a ]p*la0XTDPTscVRf8,f*uMģJ};9=:.ҭ< 92q&CtC9eLCrͥϥhᴷD\=AŭFzlx|z\<ṟ8"Iw#AG#Ϫ؆d">6^bd)5:ۚ CԌ/K?>ݕe$0oCu9nVV,~P; ]pf!*<6y6'_gѮtocHz4COQ&bw܊EN/ NZxCc[9=C/HkzLY0jz!:M_+w3YsdV5?tkA(BMk)gs Uj:4CRFCj)pr + eGE1 ,8rF /E ; 5,k=üTfttYDrئsQ1^Wԥ8h{2h([7b-@}%\hz}u,>|s~X[HˡU)bOPr@.TuػJ{(z NZR]#Pߌ*Ŀ% +djvzn8Jiy#:[rF|) r@jG@][NmPװ;ă=qKq[煺*PG2'~^'9ywC@̃ (JOCàAyWzAr3șW@4ռȚ#q^ ΛYWė1ꒅc+d,u̧%6 T7[.&{_M-KG.X`,nj\V6xJ _uhb3 S3_ǧtuƋ@qK:yXgjqJ߸x:>?OK-*l\d| ApR'usqe0b[T;o}ԂH>#Uˋ:1%x妟Yn{_Ycl.mO` rD7A6AK>o=˟#(GK{\w8|ZZoxe i]ԣNL;6iTLG 5#db/cwfZXM^=Y?q2#G̫g]^}䃅&n{dRg-6(u+M%mtѥA!Sy'n̸3K$(au7trSqg~&6'3ՉWU"<YQ06iH"gnͫWf&P2Fá#9aVuuzM]ke,}nA?M=8Gѵ˵W>biyUdDo6*;X N[DÐ_c6I)Zx3=eqU G?-" 0%eXn791AyNPaJvRI X)8J`56GJ5N-Y,rJ_S.F:!-ݝ(7=|rD ֲ9gVCNu2Ct{vsNm&J,GIc;->\G-Š$dsx>rZ_`xZhnp;' :ya2=Mxg楯  g::{$S|e̽rIX'ZS%J4h(:ÐЉ@c}ô U Y t|BzM*2}.sۓ &V2勩) Qln:<6-̆DD0+6%tOe$U lH.'IC UD {WJR˘eL'H`ΏP^nK ;5cFJ16垖x1DC3dN=skx[N DyAUg5;Nrv)7W,y~t8&~u Z,0j 0eH0Q.\%òVgA0!/=Ku74 Y%r8ij)W."o}u?OWT<&ϩn?6VYmՈɡvQ~ؓDm-=NbhF߅ I6l'rJ÷F:F/vH̷;D,]ۤn>~%[!s)aq3 >ַIv,厊O~ /HFh",pޑf,&| ⪐VK)ëʾ):pf\_<ɘXH難f&D;M7M)F餦GCtGE e9QFoPt <GDS=3uFƔI̻RL,?ESН~w80W]IyJusTR_p~<8j`x:%$d=8\^%'Nጒ:Qר/+GNn?'h(x/u(yڞcA*M\)&ώۢ-,WKW.%j .KU;U.pbo1r%Zgr|hMJq1ݹ?3c2,U!ȍ^Eʞ{Qzr7 16JMɎ_9JDQu"יEi4sYպ-563ݨ k>D#-A3F8Z$R"uPHw @o܍\Ҩ.{u G1f|4|+lAUbzţO.at)P5/6RRcގhJ5c?y[|mK!gދ`mvxBRPhXph^LmMS $UUT}kvW Q"u$+, =yfؓ<2?э ,rmޠF.x==#N|l+&oc+ZN.oɥhֲQ3Q 0;S:pw땁sޏ'VJknz8(Q7%fW>`NӘ–P,Ȭ~$FzϑDuN1NI6|[h%oS`2m&&1G&>%qȻlƧ?]ޢ?`!|J1v9tJЏdžLi,|TCP+g5!m^^>§Hc+zyONJ d['*h;033vVxqf(A%$&+[^"fVN3%zOlJo?&Ppnw[L}3l0$O%&T+H\k^vr"&X\=}G]NNFR`ؕk24-цMÎxSd^lYe[ݾTL; i6#Z|^X >x(Y){/$ThJ7.F<|q?,G*ʞM(SM;IC#e\mPXrc0䓥ƳAZ%Kʼl [Ma!)ҳhEi՗Ғ7,|ZG. >u`MeAG׳N*ZkpWޠ+^H!waICη9K,C TU[{yuxBH҇Fv> stream xڌP\ -ܡ![$  w Ang9yޢ|&#VT27۹13rD䔙,dd.6ԁNΖv8\@2Q#@`bffd032r7@ G:Ó;x:Y[W _![@h hbdP7x%7;39?- t:M  ja\  l,Mv W;S"% Ppc,-߽03޿,ldbbo`diig0e]<\hFv lAFnF6F enR wy&N.Ζ6KdM겘-w~N@P="L],]R6́.6FFF.0`MT T l8}V7gbZvAb?4|'K#hM^v65_au 5 *NXMcfc0^2Q4wJٙԦ @7=hk?Kh`^moے]ml6hi]]@ g:mh倦[+b:!;sYhhbb϶#W}e6v@E{gߏh4K:-kУRA!LM3;4dbx3n%0ٻ\|fN'`-0A? ` 3Ab0HA2(.A A(T P?ĩ@F(?gҙۀ?V[?` ԅ? _2Pam[[abcd7f (_7@6~]AaMhHW@FPVAPfA4C3t2AIl_jP1 2ЛhL:@XAY;] ;yF@[h45oBk[{@u LZ.)\Xh-$FM^@Ȝ^ee[6@ۍ.mD7p"Qj5Bsfv ݩwY%pԾ,N9 ݇%< 7tj 3QYDr$CCti?Ю%r>Cz~e.`d?gٷRcseU/-]͸3ǂE0#27]S %`\pf&h'l6ABV)޽H OG|s ֯lJĻQtC}\wwGꏗßT9Br?u(dw9+JEA7q:4N#L; #:ĩ$"cCm!>j+SK_n-oh9n8Qcg\%rH]*,ixYf0j4B*hP XC(Xy /I?YrC踫Q(P6_衖jD']{9W T:_Njb(A_4w'gKS%ԧ-^w`"aЯ76q)ccr#'GQl}8I'c9P:לL|.`+ȈOV=qoo#1iJ/XQ[,` :t$5?eRgy:#fʵz$={ pbֳ/4xEv==gB]J2-dZ#`ڱ\ҝ~ʒz(:ۥ{iz[U@ 0Aʺb@Yuȝ 6j̇U`Tخ1.@Q?g0ʹi'Sc&TRe-Or@X_^ma6Y+~l;{@yN~KI.C&OO;&rrS/:Z&PmIz+ԅhS}}2jC{Q|لY*3Y֮I.n:]΄z RNۭ[p#Ɉ?JPlCic^ٝbs6n SP/兣 !0,M^#JNTJ<^hoΆ<\B މxg!!x<: 0`<@+F%+qn<`d|6 8'NG kEY{Iz|%fcKi<_tf$oAUk[^Mr|0?`9I~(PM#9++25?%p4}kՏ! !T &qWؘzuL^~nW݈awK%N\H1운D*D\L?ޗpMYˇE|ϙ: FX,*4} <Hށĝ~2H".z/"bGy}dJ}(e_IYXNc) w*OV4 Ogo͂gh3x!1k\ո*p(ekR3zE+UE '*%SYb9ԗܙʷp|QN]8q*LҺG;rU//_ W|W;~ GV@Zt!}K)#xα|_sE1jӠBG*]"l.&,e |AT|E0u< HXoؖ$uIfu&RL9[_ #)oJ=0h\u*9%I#l=+,q"݆z4Jd l:O}BUUurMyRGރWTfӻ^醍y;R&`*IoPmqnv`hA;e,FBĞm;?giгL=.'^>m1HJ?-!(MB80s#P{}ol꫏G[$$츈R|Lds^3q-䖋Tt yBB -7Dl{O L4outB&aG6urW_?.Niy[@TPHoV=*z'AU\M8#.Y(XCf68<IuXvznM|uoՊi=qq7YПyUo 7t}yca-.m@!se.jbNDÙ1wnS#B^WF!XV#G{ _h4@م;NaFF.JAo:<#r&y!c0+!1L;_v.hqm}D4U"olJֱeO\5}m~l>nkxt*o/zSٷ)'6!7VMf%iyWiS@kqqSTשv_ ZJ*8HEÔy]^o~YsIięfLCnMA[.;-N0DE5KB-ԵEXuaH@>,t(|?u6I>wݭFWU UJ7։tIGq,Su ZLgo Mu-=>j~ -u|rDMK>[䷢հ0ܕk[~nJ$h"N8Ea  "a@%(@E̶~UiD=}ן$DI9V!Jα)LPd* x|lLrM2]ferJ" ?vAा؃j"^/&;A8Zy 4Hjyn+ɹ).U3% 7ujoT Ёf⢍_VjU!UC}_h"0Dob^=sw,m3 K.gZ[l_ =c!ղ|(4C$>K!?s/⢖bŜ%^€`Q[9+a9\zdJk'rгZaƓ;U9Z(5 AŒ6g{Df8xH /;$>JSeO{+/g >:By۶!/ *}|8 :KkW&+Ϗ>У.VLBN]ӕ8cn=2D>pWu_f<+mukr ZY0#۬;o]Va {)"]˨5?T=j[7.臅^&DC{8ˆ G'v*- #rJ23d􅧳{\!DfȰR,k)FW IPa=aN͌]0/MI*rtcUij Ո. &ELƫԼiEs4v?ʠit1=,Sר/5fzU@RNq佂}{V b>n%ց BH#Bh+Ծ MF7NZ.GYFx"?G1eCg0nvM-EMB*ZYI"̝%JfIE efH6[u9 j=vn ݫbB%[)E)/4ǫϰx~mnz/CBzǐz!C> zɴA69eFئ\kpQjdĮJ"CQ= 逫F]p 1Yؽ]([ 9XUPCwǥXP;Szf[U{w2+p;1m7j8pPF?ya|[N:hI6w˾xHtg_N2R,iIzbm[CַqÞ8AK"KUl6EMR^+yt X㸨_aM:/LX:"JL*v]:vڥev1*J|U0,;XPE0ᠦ,;\E"q":~/LDATǻ3Z"j%~; {J^X$| Ԭ`S؉'zc4X`4jМ>S6~uY^Renwf:.(ƪ34bۼPnǞiIQ#`MeXp~d}4![ ~kWrn, .Rsk0dZO.dA3&G)(\#z'<>?’JF,zA)HY(?aW-lǨX%80E*huۨV0Ηĥ Bjkx hk1IVɖl"e&%>P(p.2ZqgKK[w/q#2oz N}Sg|an -w X[l}DKh?R3D7ţV"^1?>8+ uKd ߋSQjV[F=f)H0>8 0s9x`(B"'A q*uG2}Ek²r@'-˒5n RQI ?$!s7NR&,r[+Uy_#×ܒ3\C#fLjSM2 +xMDOͩ.X3I,nmZ[t,+קyG[nyz=XWܕNCqIVki:+B6?ɮO,KOYE>&;˓5ǪV>uZz5ETj<>ɳ>s߬_)%k4MfF]Z&PkbSy]CY6vA;Rufnh ٓX]WAG͆KٕրKBV;k ~]V^ˉl*ejk* OjgV[Mj.'9F-zv5eXx~V(#STnM8[)K_&0ԒW1&p#+QP7JMlQ5׉?6N%Xᚴy~ʿbaAP^vP9p@zf=LªqǽxNȁH-_R <4d72$e_aۛBUd(!GC5*ѯD:  qOqV.,%+ cHS*U9c'0ޚ"o$bY^o4or|.%T@tfl۔άo6ܭvS'2=fƇ/?.E5GE4^cD@{.P!@W E1t*uVHK584EZo(,`fzp3j= x$4r\{w{;@Ru-aӭ1E{4x]ޓ<@rt7k^[*5#ʂ-H4*c@F, -^KǎXkan9'E&O|BhO//mB,ۄgvU"-Ffo>NǍy}cui %TN=nCiroAw`سϵoK1:Y^d A}5a;/ԓӽ`jXc qbO<7睊n;`RDN,##V 0!Kl[,Fx_$T^`,#17ֹm{]cv I3?Q!kxĻ.K+B'&crn4]HFk/fdkM۱/r`],Ӓ_Ic> g+#rOV@Xh8!VzDs8g -Xr$O䒂vb~?h!QΫZ>,2nɡ*L9~2 3b畏97n>|AZ:-ʝ UlehB誜^1UN*$_^ʖY|pYo4ų9Ѥ3vIPJ!Š^*Є4QATl)s쳧%nzaDcAҵm&fY!z%󥍔 g2}sz"a{3>py7 ;24Uy ʃ0GyNo*^׹͘>[qHxa^ѬmlFJ%Pba3 %K)[QVvUR'}rI:_-,7Aq (8/Ih][!wkS1%Aj5cd$N_G?\(6'*>#ZnhöeJ0 ć"V08hފS s yu'8uv/=Q<"~T m3}sP,jCn# G ZYOШ(eD5ou t;oW//1UBSޫUL, WI$RS5P [ c=*YtN+DۯVՓl:tt m q3iLjPeC|=ExP\}HkzLHFb3s]#؂&Ha'A6=e(H&NKzjh8<Ѣ<, 9yM1t^)<2CA`MTnd^߼""1崛eD8p_~2-ՖouYu+0Uð9a IApLY`0KJ Oyf1. bC,C$GGfp 3&9¶W0ѭFlJC֖!8Ba[iCӱa- t ҐTڙoUk1Fݏp F7:ŗS~䂲qxlC^vO^hQ%-nnOFH2qw1aA% l\ u6_iYe%Eq|%y!?lYݺM/@=}.JzA_p#T}k6i9/ o waEZA4 byqEm0붃,eg՜d`" UFݍ&G޵Di8?TGL 3.ey xgPZUY &R_|^j3JL䃩5KJF%/}tI|Bl!n;s+egwZTo5 .O}a`H>+xL`j_U}VqqeXŽuC+V.v|wK*wW/^ '\gɞP$V< }W^`CS =VF_>E.K9OK-"N`I֬nDBF43 0Ȝ/$i;r5:oԩAm}hV\ C"xnB}aX'J9}S16#tqzNؓ.?|]}$M)OomٹДfk!dή" S%󴓜!tݕM(&1gJ LI qsugo6/uGeO Gӿ #KFz_: ȍgzڐ3Cj+pQޕߎ{D[:L4#'/8VH `ϒ#!\ U¥iCE>7ģTr9%ݣ/)"txr9ec >=@" hxEStS"a#;c^Ϩ"/bᢚdewfRr$˹JgX))HHynQc>UX&Mu,LVtU*9YTk ɮtjTxmNijU%1!Azd繳gi{Iq5x^(,e;d$-yrjGzg`=&+'kt᪭@b:جk_n[TOLW^+t#%J12dfu̝jy٨Ƅ7gz]ˣk)N7G_1LsZe*3%_r2*`ZBd3jBV021)D1Nu \tTt\t\@@ .49<MNwXtUQ>׺5iPsbx~ޢ]AQVesȨh6+䬂qc+AZ'\rx5ď z6-Z$vo,3>}"!1wCՋE,Bܦ&<pp4vS̸2{^K7S Qlh "L ~z2rC !X:5T65R) 9ma$:A:ؒ:ڸE{84yHF},<0;0#8Dϓer1˱7za[_ֳ`/k%iOi-YkOdᡵkA;2xTE`}ɠEa%-Q5:ȳf8If^q \5;k;h!E}I{Uz}vqN"Oʘt c]H!a\|h;}œ^|Aݐ4Ɋ }4{'3ch|`/RZ⤪XB[VlqMmz!:K* SadT^(n¼26J-ٟ3r Iu?~_~w8;7ؒl7B3*YYF", zm5-3!b] A"]8dCv Zݡe+7^5⥴ 'nzfZ1\](fv_7"M bI&K}ߵkxbm/2ѧ7aWE:%tya՜5,aF&⫷8F=kTA^.euxad݆DLUH;nsŠ\bPGΪ!S.`uԴ˛/36 C:V EW#w3QX15XҺ NZ~4lEBl{rcoq6-l3;)Л)JŴ'%Tn&ŎI'++V,_9{g;M?ԍ_82k܀yb]: AͷE./¦lZU˅zf|&jղAU0"mBȢ݅z<;Ȇ:+BU% 81k3\["tTm Yf*:ɽ{#u|;>j"/>7;#"E.yξ#.%sSחOSFni*vF6~M1Bg* @v VcI StZ, o5*>*Et &"UiBa2KVd%[;r|pGgP׭? eL.P3`GqHbS 1Ƞ9^,`t;"Ò:|BaL' ;aMX-N)dlbM۵c5`sMktY~5,z@w`Ns"OƐ>Ş`+vV#"'Kg'܅y&,4˳72qJz`-Ùx5Yvmm,Ḗ'.6-*ڱJ=(UsV- C}3ȬH/m30[$!ò -h,ٻMz`4e] n(ٿXy44rE A% 1HV:5˄C1\|zk(V >"QpX +10q@~,8q86|[Hs%<Z Zp@{UqM|Utwљ?v^KN`h (ɞĔw}=)kS38<F`hv9Kׁ`DFYΰ'on>r< 4."ђpC'b(LC53IMf5PxOOx"&bGF?O}3Ag̀. ㋳QV.#ʔԁF!\-w_ƈ}ٹ!p,x;D6?|xڐ奇dg1>.!Ru㼘Nƅڷɘ; "MV{My;%BݰuB"~*q 5]ć4Cǣ֪F)'gLݛ/\WEc߷ғ㾒- KQ}E]$m#m6UmH{s ]O'^2mXڽ]8!JSY(cFB/%<0>|&HT~Zܵ*NŵԔG^qVM l7"GvJ}d]$5[^SPA;/ rfMI]~z, {ɇ>t T]9򝗚=9<_Ep+geת䨩tx%~+#Hhvea'ˈ F'/^ @`}+TYt"AL(|"a& t`~'XZ^}3U..L B Z{uY]STUԼv|ؠSٓsqy@A$D 13KQ<>V[2ѽ5maLj0-g-G;@C3i`8+NLG(@.jΊoQ$0{A2?3Nn#ش 0BxƗ 89aj=޸It^I$IJg2Na(ɂJ?~cJ4,Ԕ\ m# P5@kɮ G[.{hs`7b&M2q՝xDc?d@2|#4!˅LaR@ݵd+%9 | PzD{@~4e 07H=k $*Li'TRsWNPRJs4lIζݟ#r`qw1L[!V"XѦ#Dqϧ[1 ue&("z^cSI-\jZ$[E~$V3E?/] o40QP(b^†)Z n` x<65.%FF&7y4&cȣCbꄗ_ .C97#{LJye%Zf!qL=V Nj."El(f,C:q;D,3.WS^O*xWv r.+u.t|0o:s['Mtn^7ZcI5ju:Ml1=4<_ !"P 9#lg3@/ s'OWN\1.Bx-#RϓqI H/,ϳƌ]aVb8d$K,Sś3<9s;(n=od)9&Kp8ZP8hxX8gn#'/ht[NQc> 6 gg"[cHbG7Y%ڰno8oԛyDDݥﳰK&o&vEûraܵ*T<*/(];*jNj Sp_ITV-i.M*\)I {8Gvj}i->  E艉&ZK=˾6<DbFv+,GG:#{SȢX2:H% rPMWGYllSI'0⟇Mg}; Rx1ePhڕ6D_$bHM)t9#'n&NZkTXcŬIHZl[ >"ݤ̤l,Bl {(OވZ5-9|n z!ʳ.#G[]0 z,{42p|6HK^#:ss`lf#AB_OpLBrCF,.fyŵ)c2]M8@~Wꐰxմg/5 '4E->ؤ4ЈfI*i骆q+iZAi٧5B 6?qcˢcoUvUy~X /Ǟ=h@ G/k^Pٔ|m`l,cv5fC a:݄:˳/'|_i> Zɥ\Jiz) P;lHEB\}bS˯y Gfc.T_bϓ-Xr CC30jI:H49q@/+_*^A|ӌ!}+pI"IDЂ%w]ղ1@Sq =TA$kY 4U-{{oBK)$3);Ԗ%mUn *`@J^=N>?hGQ~ TuQs& 9BD󒙻LɷOnՆX6TVBӀ^5^Yhݏ2:>Bt#VZ S`bNp*)L?`Z+&xIT7U؉deI2)2x4 CVsB~BojC60H~;[B3{o离D>^琢}#SgQʲ?.sio~@o <C>ፁm8ww}JW~TMrIzYWJrj܂Cq7(]Dž=M74_VuGա1n_쇓|16z,\[qlw_ MD [ҸRS+W:ޅEf쁗A偩*-R<t08 xQͧpy=Yea{A}.$3ê0URw+v7 =[?f e&ۖDŽ/213؝Q c\Mt~N;Qm9 P6Xf:SFU=xe4LɋG .W>E\Ù#QB-voFτXob !,<={Q~1_V]B^@6?`qޟmZےml*O\\{Bx5:&,yrb/h6[J>p`[](Y='CЄ DXK_)ӵJN<~is~E)\\GA.S8LcV>s37˓o3a_a {;).j5|.@OC@%פUrZXտ &dxMܳw-y3D3DWz9ׯD{xz"5b(}v73IJUJ56Q{7Dy AG\Xo}X4C̖ƭ FdR[V:Mp&t);ƭDsX D}oE7;Lő2:SNۛ "=Z.vPHY Ph7(_k(3tB ͸iݡ<2` zul^,+.d.>r(89ꚗq~hk]_055I㋉g "7UZ.͕F7W;K}W5/k# CLJix DK?$|Pª}f*N7=)p#)Vz¹408 ?bPV:LFTUD!tW,?9=0ާ ?l 8Phcp9p"!V,#撶=!ߴqx$n})zJAFi[L$O dVܦlOn\Y] Sv;Dr 8h endstream endobj 218 0 obj << /Length1 1732 /Length2 10145 /Length3 0 /Length 11254 /Filter /FlateDecode >> stream xڍT-SJhq Cw+Zݥxq-Rh̝{VJ9;t4jlf`9 ';P ف@.t::-/3: q A `?4 `:<X:(?COP j ~H FU>Ϳ"E8n8 >w{O\qqwԐSn@{G@hN+)h73tyfY_I_Q=c3s~13Hς]mskB˹̀ t[j7Ydλh 6ˆ{N]Fm+މ1=ݸ#)"⻨Vb_Jk'-fά GU;:^ 힛:]TFZ=p k:jho8|N=ۂmh7C+VMeZ:Yeֺhь,{ ++yMud#uf0صž>!Ht5)Gq]` 2yˤ5!LUmWo~li=JV}+DS@nBJ,?!$61,Tc#6{{lոGy1Ƃ}BůZ}ЃB"ekdٷN$b6@ɵ z}{{2a2Osf|bǚe95u}c>tN-s"(_FsoˆBxЯ))僬NgD5'IB-fI^?wb~wEG)xj"V._ m08:,L θe||F$2uv6mRSɶJa[ܥkuٺ JcbBޯ[{r&Xz.>oSGYk;\hҽ1r6ԊS5:%S$SzCs GȇO0{pR{S3x gR Y#6QA 2/ǟӯY~[I%Na%X<$?No5Ğ AX:=0z vǏ}5[ m UMiyє1oř-׮|^L2˞ vI aAm3vb}JQu9Lch(mT}ȞGѤD5kh_6[K3Jk&]%=G h7h5I4(˅5zti>D+/TLrY.j'4'3 I?[M1#7f]z$\ak!ZCOFLڅ_*wGJf7 Ѹ&rSikWcjƶ:WE/JB^A|bBU0Z@_)E*%F5$<`8+DqWL*σ!G1]4{ʚbj#틞oXQ_/Ĵ:m7\C%Mct8TgVTE(vоpc&jov}K}GG>uΠq5Dn30I\}+QHcR"tt6OsL}:var}j"4x+ {SUa[7>- h'(XGEtՌܒ>r ەKVZ +{l؃˒~^cfGtʐLs{ԖY (WcͰQ㾤 2Y2r(&Cٰsd}D1;ҵfxL1p!ퟣ-^T쮷a%ՖNl I|N̩,V6v.cB\E. ri4"NGmrޤ@YB[?Rf}.~m'8ՈP3jv$ p]rp,yݣ3/I>^hxt˂,kG <<f* iz;OjUǕ$Ōr<)P]+,T^=M 68%kKp'Dr@Ƃv^+~2/@Ig;%36.} #BQy9(p"SDYjKaLyϢo;i> 6*]z*<(FfVϣ^ } Xu$'?ڜz2eӝtL/+(hK={E)2_f:@TQm bPz1J>=~PpDw@(cBLÌeI{.M245CX=8=;>Zh0ŽƜoZJt7DhuBۘMiHP8{GW JrKΉ/b ?z |Eգ*F"Y!*Hb+zke#q1[yuϢ J٬b̧ ]E]4q#/|d5 "hza bv"53uu(f*QLʰ8Rt9ys<(80[gQtZ7[Np|ɩ_cQ4%zL΍Rg@<;.3h>;ث0~v?h5o:a$B%abP+Nl[ FsNXmW6va94˿a !?ɣ!h{4uH%iw|Jp,B"ɟ}MƢjDEӾsp+a{N%O[ *Dħ!r~y4~u-nШBTM7nلkyh ƞ0F.H1*nyKMv (7!=% : dMJ]Pf|W!&Mٺl{cfZʵ=uxU^hS3C+1UQ x%"0Ҳk:k2 D'S@sAH@Mp>W,w6ՒH7L554#aװOKn{*cWq(<ǰM*[{'qS%Fk+@}ej7?<Ϸ@%19Rkہ)>'%,-TIхJ h}w^Ѥ _0a^qrOp3U kV)aa&8i/b]u;|2F7u7, BzPGͿW.dj~qcsdVƙ}{}.$eKJ*{Ke=5c(|.Հ_;@'l܏Ў/Ww;Z(Z)!jkLgzEy?0dd8"bIO@L"r(2 3f@'z Ʃ6Dr_ȩ4VV=WU0?ڙ\bҭDZ`AHD1^ bqH.߱1)Huymc7Vw& GkECPG)@V$qg\Up~Ő ÈN9}"/aB~y=6P5{˒GB;ǵ1I+rC:2422g j GftPLli̛{eaz4ԾUH˰`ar0Y\hees1ibeЫƴx:Q c uŠbj, 8D;-壃LUG}6#,RV7ƸZi7~pL)k4FQWa ( Y\\ kNQfdq{fCX,ce\ 1Zq)#?bmG0 Kz-)PM7Dy()8i6wZGjŰƅ3#-IW`׺rwDS( ymuC3L4nt+jɂYyz7盻n+;#MyY253?NomMCs@ѥjՌ~6tja#b8 vI'Ҳ·~]@Z/v=x. F=Cw#hF R#]W$((6G1ҘA oTm՜eaYzizgb6hi%!MOl\K5)jtee#n&f!RYd<:Mӗu~C&YCaATyTWpI{FE%onpr|h G8yc**A2TߩI |.; Ѵ jX0 OWU䬘 *L")*f)=QYD_WsZ?F0ұ_`t'޽rn[p^K`k-Uj0R^wUWf+l[8ȬG ^'jq<9g쁚(,$8o'thUV@}vh4L4f#4L o{f_I` .~hn"x{i&&u,H2|nLG[3if]G',̈4OϭV'|1{bj)96z%TZ C$ra^BRڱr\WY=Od_ F%B[{7'ڀ~pV|P-B-wUr{09&ݖo^Yn6'2C׉~_(XQ0շ\Z/:94_D~:R#QʥPv9=!*~Ϳ38:ƭ)6N[untvDd~,Z9VQړS0U}Fa맋[صFfF&q#쥨C~2i?OkGl5w~VJ~ڕ9 μKX3؆sKڙN 5s塐Z x Ԧ]f( U pS(r=-7KIt! bwn\6/-bymxq;j]˫Ihcx7̣9t Q#Fi&u.ԛFG%mwl5yۚQhfek$Yz2SYfhȟyP~f; YT =6V]nOƮ#={f?}@#mJx'H$FGڢ\WyN̷j(cXmpGoԽEO<oO_滏3NIXv9ԭpH);K.킨t+jJm,Lp4nNC%Ihf*Ɓ<&bWX.T\Ea~Xtx:罯 QU %@pRzˇTrVNzN$8dvqo,28,z'}r?q^>*[aL`p9)#ѹRV(b},XAE[.+!)%1HݦZ#u盅/l"Ż[& .I*M͡&uP#aFPiųkc!|-z.57ջ䌈EfC-~{7h;ڮ䕙bNK?q'z> !Gr] k4ʬ o@3S:Lۨ cf <'cIkٵ~_84vF4Q0{SN.g@$c-B6/ FA@I3…|hQ<+??xXz,Ah(K?g5O'"9:޷. xi*CѼko#Bl7G4gGTZGKYPᐡfB <җQ5I'Rfg~re ^9IVu4NƾgqǬ`NqA_eŶn)C)u2W#y'RMYUP]&J凉}߬Xe|ZgWp,lZLř+H:'Zc' L%}_ K睡`?H=]|'ګ5eD|uRyM@%<V|㔐ݫ`5=ZJvRoʵhq/͒]3o}O j;~C~x\,vhږdR*n'Tvdu:=$lU zV`:/oz'&k(Ձ.6)GN|lk7Nt7KVF8*4Z$eC,p9dp2yrE juxfug#JH;T9Ҋ[;/@ٍϒ|hT6&HKtws dɍ]KGrLp3șR6HfFzLO6T-' ^jg7m;qB4Zs\iʘe N~uCCZ[c yoN^21Tܯ ])Re!bfEfh^b\q-i[c O M\Za2rR77`Xwܫt =ғ~Am@ccKVz!9jAjE TT5{[ځ 0iko5|rjnI;sBSٽ2OkN/sK/L"V} 0 ԑ)ƃ󾄮P ED#|v \&H 5%N4-#X=dX0x-b|⎥㌺e™\lS81"#=VPd2u2x xt@eHw%m7^u \+u,b:񑄹Lrt<#8n3ci/ zwT?`,A 2[d7+3%gckD`fóځX{]u"g\/ JgJeLeٸq91TO޶;cy`v՘Ɔ+eY0Hltf'fFڢE.\#oTa%xb4Yʠ>a 7UǦ{eyFSvkk!Cյ[b)fϥeQS#*5UcGD'J0ÓG+h˅^𵙣L&֯ͨ vGDE},Ю,hmQ*t+ͽ>¤cF|ZkB}˰y#vm> $9x9%jo6 L8E[j|>񞑳M'ϣlZ,*x\^񵐞3X }m&=ٞbrkL4?pxΝT iE?s'_"D jZArFYOlC8cy}x.5Woz xlhFR;@f3I6+,|RY77!ؤ,c2-CМj[-iEnu =sTͻ6x&". TwZ鼛e D~9FfЖ2.sڜzsׇ67DӬtObjذTY- {:6oߜFeq[:=(M,ٶaѯ=ֳ^W {7@xƚZTyGHFݜ+[W$Q"uG5WeZ*.iT3cw?kN o^-]8eMwm"&q`UU\ؗ:%G3 Z CJUj [G+`yiJ*T9\=J, %l_ S?E22"bty (Pycl7eiɂ x=ȜcI1#l<]Gpƫ/VAvf8c'r;G-wHC VW>Y*nO_L,g*]&! ZEꟙ#anE#B셵 ~fM'f׾M z':8|՛ѽuUf/{bFސk&R<I'ZyES TB7mɆ7ߘf^6og zhHywq\(AܯJyr> stream xڍP.{EHq^4wbJqť;Rri>sL=Ko>оRdd`PgVv/V lیArtàt9?٤̜aP FW@@lPf( ' ZI#5z#h(9[ Oo4a@0(腬X N0G+fr9,A@uƊA в;eׄY:9O;0uzpZO/h+TAп `=+ǿMI6a{3jہ2J3@3;'S)OfquSt;;:~iP I:;aO >݃ܠ^K0w.lP H^'lV g;;;/?~ky؃89~:,-AO?^Nf 럎F 0`C1dY0dOFOA<|ٔt> ; r|E wIZ4 R=߲8'OYo߂d\?n3'ͺ8?_  fO{ N2`whXk^2;0sU,{,?.+@ y0st4`'i-@4 `cœRO,aO&q4lձYr@<6?  D|r؜yl.t3Q\C ;8 T\W O&3x-:b~dH\s8؅%M!Du];{8ɝf ¾^rt2-]o[/ .|jn=5%_GBvw+(bޗL׎zP8Cc1KLBƈw3sq95HDŽs`3fsLөĀod^ѼWѧHFa pW;^6cRAûW>(h2-h!Mu2XsV eˑda*!{ꗈI:%>. mVҽ|uԦE?.f"UKmYIM14AL^(t5'y7SP,A=?a ۚ9j|3_xb"8r`і0"hoIL+ԅVL,XS2真ļB_NM8vjefZrٿU:F4| )b1Hqʨ`bԢ3j8bO^Zט4o<Ɖ+lXVյ̘*#?Ou* d-ƥ6nu>t? b}},~j5_/*&AKfu߽hq Ef*["qO+0LU$_I~\%c+uA3$W;tzOØή8,RY,;1sYk6$iw{%ӯ_ui Uړ|5uٽV7eg>$KT]EHkS[7qQr)+e1a Bounf_೉x֛.f>|'Aa&XG8tTKBh"~.Ň0 K302%-Y 2iwkI׏'Sם`|18wiJgJ wo[a6G+)MS"!YsSJqLyX}AplIb#c60.eީB X҂,p0FMս~GQ25QUHqJ" xdUٍD2!?#Zm1oҘl7N*1"|ߡIuBp::ĹbCPsvDJr{凼RGLa[bއ"nz$,2*"^,$񰦩jP _Wd8+ !s+*8U60[$)Ѝ ot_/nž?ݸ&778eQ:\}\,_6 ĞL{[ƄSYX赢<Kbɱ\F̙9)=2vC;+RPUfK0 n /ڐC+(8C)RXr뾱v0|~k_ppXK^ψ&jfN;k$U/VrO%1;B`4Np7* mFIPn uO22F1z2^ 8/=Vךin7sm!7b1]H@# '>z;x,8X#t1 WwjxGDI70=Xw:pg,_;Di\(@ ]ݠҍbǰK`UaZ*թNj^ot!^4ئ\rO@ʲd\!*b!EE hHzoW*kH1*)HSR|H_>U?SUr<8"_Im:ʐM2OUU J]GԄkX+\KΩȝK4'UyPOAQHˤA&Յْe, z8?: .sNΊyLI7} 2G wbi{lGɿU(^K(|D\^r&^+3"7(w5&TRY2AKYUmn A)jΆRM$ޤ+NҒrj*;ėM=Q'33^ _h_!^/$L~D4ό>k^ͦ,6LD>ltr."Q{)(qUrw{#rBl=wz+N$G%0([\'OA.j2_J4ޝ7\wk19UQ6剿XF}7ɹ́޶vDJoV( -j7ى,\%hER˺/V4ydPrޅw &ːnQp7 k3FքYB^/v:1Ն)=$8ZaRW9l1/)ZV y9+6Zr6Z+ .p#NU~ |6BIcS; 8֕9LMR71~̳uuZ#k0sub,Q q.^{u!X~JIY b× ̀{)Y/њl}4nIK"7dsS|7SE~nd8-xQ}K^T6{*EzTW"\>$Gj@?w:K$#tkTg ]i*2#U'k \؄VC&@3 !K&\ic;}ؓ Qy|9q9?nsdQ2u ܏6&tf g#I\ V5\B6\IS/ 1kU*M4zGW2|+Q9iD"%Qm.=̿BJ9$l+̨*㎥~6J궱1Zէ(l8V6%T\NffL }#tϹ#k{Ɍ\E_Oe _.e1㜑7}2tfe0Us>>]IZߍ5{ )]8[-俺4`jI>T,ZwP)ނ ѭM7⡊|pv] '[>IUЫoOi%WM;s(fJͳ$Xb <ͬpxف/P Bact"~r8Z||6.>yƔ8S硆9z{Cci|=ÛkY҈)6U‰Z}<]N"mnAC/_!UZp 1X z*^H-D`'VPn±if7cgD\q6puY%3gQ=њh+Uj\2K1x*7ޭo{)-j.&>o+a&"MSF'ƃ 4ݶksm#1*;Vt'(c3(s˕-'쉹#-8:s5_fϷ̳̍z΢qD'zEFty,H6ϙ,TEbz阑ʃ=lӖǡܹY4ٹjʛZI0?):ٚ|#w 匏SJtڬ=q RSdYA28H_,D$5ڳqߨKқ^C#SGJP ږA_7Be%mGۡ/bl]Zrl&ܣHڼ)y"\7ԫH(5ׄxxbm ~˘ͫҊ;3VKB2^A]-#1˟"4RF#L"ڀ_*wsKcx):μxk}ߥLůoFxwQEkzEVزGD%&jr+Kobevna"d Q;{ I x ]ɸ\{PF㹸3B5 fG| F 72l~p#8Ԯ`Joy,xJȑf\k ?<Fm,#v}Ucb#ϴk`P,<Ѿĭ&gXϹ? R?okBϋ&O\5RN<.e2VA¹ddn-Ґb\`tܢ ~G 'dd] DW廻?=urMgAEFֹ2?1̳VHkn^Qq̼Jr/AE^КXN⵲'Xm]<&`O*}?BBp̼͋FB*V -$ա6H~GKJJ`vɻhD_%@ZNh~U&:"]7%HLN/Up#<.:ZQEzs,%:0h5 lZMlOlIqRKCf"d%VM0Iﵡ/qldJM'(rnKIjҜ#4Tʞ+M:ΌD!L:-z[;oaUcOKBšu<=$Q!rKw"w zJې?*u]C~% v19`}kFpXH0c^(O[]!3'8f5y.<n-mȳ;*J7!0U=Xc݊e'ߢ9Z\ڦ4`ِo-LS5aW8e}°kj<QS9Wq͐|p]X1 ndd gnLp* ǯWͥ^.;{ T{ zN6|$9b9zyVߖP@~\f4:b Lvlf.e|%h~hÖ8l3 Zq0岱#rG30b}b~&Wn4̟vK@RE=Y$$ͥ\JI<˭jJ%L IS:\M y7B\_Y-1}Ipo-  ŀϜ}M{7cq ]4G]{u=Y1A@Wu+AJӥmZRarN@ =0|V"r+'0`]^0-+Tb /9aEL\in(܀m`2Iٰ/LbGF?SY8RP6tyyA7nݸ.n)QIoqѱxHlbAm_ :'b$٬#Vw",B+ CJZCD)1]e8~&9YjI,h35vf]Qx F'D.=d}>έʮ R^*7߽G'蜠aH T|&HQNJH=fj6!~9HQu 2Le54F;f:(ȡiHiuMټn,lpBt#0魛d(6i?CYolftLmf#GfJxoNSWsb18 U 훇iȒ3!/GCS2gv76~F90Jp9Gw-_SݱqEa޺[`ݸRpZL龐J_҆V?5b) @I2ŝ-gֱd?h/s9yQ$s Op2g&; O7V;/?jӦm HRLdrOoިl/$>Dv[K] O`Rh4Uħ Mqj"rhVcę .%X/k# Ƞ76iaij_ P(DAzXݱ0!w'Zss.4ovox haNȽ)T)_' fOpRZ;ՏM)ŧp M06o+sM?_(TVmВ endstream endobj 222 0 obj << /Length1 1375 /Length2 6202 /Length3 0 /Length 7142 /Filter /FlateDecode >> stream xڍTTkA@{HNnnD@A@:[z߻ֽk}{?e攴Y`P'G ËȨF@@P\F= 74d@b2* Pr|PH#/E\ c r`P3.4E `d8~$@p9j9 #ZC0K0,lGnn777.sg.9+ hApWW5s¸p:`?6fl :# \V 8PwA(Q owYr6698C=P5˩p!s/Es3 ioj[ ~'n#:gK8 deV0+?0dCanP?gk0W V.ܺP HQ/ $7fBxxxni˹#7F[^ p@ـ{G ?w`w!x@ϯ߿OHnY[IZCJWwII^|N^G <Ӌ9,xUZEv_ 5}O_j0$cA n#c4m [K?`_r$_]HO? 8TaI M;ˁAV`u- i'?dȭG>H>KϐPKկ#o/ r @ H<5 k|nk0H "CG.o* V@ Kik畒Tnb/RY9f-.X+2_-O%?.˲Hx}kҘt}m5لeg$du7 5Ė^=zjcS|\s.yMͭ A%QFo-(4lć'oFhq}yF_Ly.:S2PPР1yIm'+=*z L"oZuHBY<7մ;?MGDX()I#"  5X8sǃ!BU]G6cթ-΂[I4RRj}5튮J|]/Q>cĽ[-M#* ipk_%ީQ>WdvXjʛKhCwL"WT'_.9TxrARgU6`D-Ek#ݙ]a9BtC2[CբD2[acDt&'XZc A9u]Krw|qx4Ej39 Z}F3Е0 cyłƊ,7Z6&  =~+8ar'#!_&~jlƼFzYſwʍCLX\cîk K2FW%DA7)!_vwpJM껂N4=cU-o ^氌U$:59:G hl=LFd#+MjXFA hh5&w2})/EgWm3C"2j˒CS {K@B+  QШF 9ud:k_3c]P5kR8f{{i}]3w5 ."XZ%A`ٯMSo :D%<b5q]'t #i4:]꧖͓dQQB8%#ٱl̄o+sUӁG GD7E}|n /bυ|fvDSmsa<0J3߈.M4,lݒ93_Vy-\m!qV5ޥ:p+}68tll+*(WDt^n9jO"aKpw݊syg~˹n,~]Mg{`[CB=S9SiYuwK\;9׶-oFC"D${ċc-Yl.@nφ$8rIZ lջ8~[CMjުʎnG1uTu7p4c-ǺpԐ̆V UB|u]줧7K-TElW;:CNqԿ&̕<.=p?1#uܩKҖQtQN1U Hnv-{{8?*j`dteћ me~vJKc19P>̵=}"kUʋuj[!6;v.}mUKwh_}}T?cݑ.lTݤᝎkLIJ,iW=ycwԏ֐ 8ʷ[Bbk@mTpKUO2^Jސ~Zt-n/fO󝀋L%2΍ȉ|^I!f- .֌YQQX^:Q*vP; $䖋|PՔ$Bmz#໦=7'3?< z}̰9Wz]hB{[M񘣷%[I6LJoh I'8Vzɘ>Fv٢c%j$)^N8+VPM rq.]w:4?b^e C;}~[HD"nWq+;IFQb#~Q ,Z'e*btz\[|ʫW4^mh1k]e#PM}8)(g o~EӈizԑN(FpH2FR'/v \#ԙ/ BS!7VьÁG DIQ}9Z܊ͻ4XzCgP*%sM븧t6ޥOʣ {Ie1PaOgh@fXZ͞/,h+Y5f쬡bm7iF OEv9BnЕdy _iZh8bV_>ݼz<ڥAO0s9fG86I η|͋tVbQN]3[o1Npoy*DŽ{J]@Z]=\>xN.P1??[Fy4]>QרEag4KޭAVc~(sB[-ܭ~4q]$H2e4v\>>'J\ob@-QT'a 2澵MmrGx.}ڼh=縲;|C17.VY(^5_l8Еz "{r 4h-[.cf*&G0DfݘĎ|,LՊXsD'[_HP+oL9qc֑/Ü&!ɧrb¿< p~hP}wO@̚lcotv%Q>LN3`$q71WSBқ"qa V/}0lJÍ[(C3EG6k6JICZ![%er9@$a3ҢmtRךDS`V0`y`6n~F sRu6aw(&u3yo`Kb`7ԁc6AV8o'FZtL1fӮ98+Bm4襥3TaER[n O%_J:Oۣ+5JpV/T2w{y|[I3s 3TZ`65&M2]gB3mm/#Zx]~maxؠ0Px8<ᇗAAMg k`(k*>Ell|mml<|ء6MhטZ6U*vz (o&GepHyJmef"%~/q8j+jk= m')KpU zA: VSɸ]s tzѲ"qV,6 bf© /n}d:0f .QhS0ejٛPevntfgB-O&V2n2Jcze)9[uw7g5z:B Dca2 |1p=ӸG%h4|qJ/G7i<;Z@<_*9љW!4˥~sJ1^*[O5 ZYliX h=b;}SKwOݤ_`O]pgKq .2́]mbsa/JsNuEr*{x˯)#?tJⳒ&a41QX)z6Ol0O|M.0~XL㣑n!XǠ]C3N;g\k68b%wiēYuf?cK*ڶʳf;2JuHYhfEz_"{=#wB!/GA34Mwv@rˏ#起OMxB\'/$Egj_w>Bt$0p"ndra: xkiR Y(Ƙm-b7>܇*{GO]Irfʝ,ԎC1EKJ[7ϞX73޲?^VIiBzr\>zخoujfF2+-U%AG3{g {)N O \|*eB6N /| j0ʩd>YM# 4lCa$\v` jgѡa#TDgƇX6d"3ȂǷ("qXx;3>PH>S >.̛!z8̾m]_(XoXe]GQeV& m|Ŧ<1$vAUUV+]trp@TZ/B;~ۻ$I]?{?:?؇fbnNPAg̮H#FeԬrh+6yz41 &T /=Z!^ח{](\͜$PwdUB/qRc]B/$-h{w 6P[%Ep 8PЀ Vl~-yo4iLJ^E'nt6G!zr`}8PT&(NO:Z{W.4G5ؾ 2/x/ \R Cy1f{n>ڲThqKS~UC̝Zr?i9(X\ ~ wIk!*/_)z?a i55+..XP>T83 <;A[iꫦs0]\d4R3In *ӭ 3DQ/R[3* ~h6Z4UFqfrjݵm}> j _#![ SkMXGaGte'rhW{In50>&T =VΌ߿1`xlhFB:HU'}3Ψlsz*߮)Ӱt3-܈%q`zq{2Jk98fYy}[1Pnb&U y҈J#/lWR̼^iL2n@vFRcX+% Aʤ"L% I endstream endobj 224 0 obj << /Length1 1895 /Length2 13144 /Length3 0 /Length 14336 /Filter /FlateDecode >> stream xڍP5kp6݂ w=8wwwww 9TdlmVFf##;m.: TcyPQ99i X̍ l2Nf@ JF@'JAmdEOJg`Hg`KIp5w2(.@cYk_Hf2+ٚ88+s#G16@IB gh#;O"s l lmL&V@4 G_DɑB?i>6YXh>asǮu66z6116#َ^(!o6S ݌$WvE21igk067~y:N@oFNC ?@Ꮣw0wh1|4#?O:elkc_K/!$/FPnOZfN-+ Y ]߱6&KS˿O߃A \ P F_mW_wi]_,X[Wgޗ׸͝7+d16VDsGQs7ٿZ_v?fenu4sh1UFG?E?濗153]Llw#@OƏ14z:[_;4[5hQP%J73CLI2n;eWϓZxgXũI_}x^^~MhbnJVF+٤_JiT"fIs 3氉haP/ݐf~ϠfMJRyF1xjn2E?y)39vhbߡNy &Jb-x/5qf!$"2U+F4T.3fWl@s èlы@sfV2H[c'F s[SĜ/z1,!il*EhdTMo:tEM.I܋Ϫ`bؔlA$2ɣd}/xnޔ "97S{anR9f/}ƾAP|9U_*Ӧ$-==$=x賫\4# %DCMώ(> 2@B!&jy7l$S`Kʌ*ӁOB *mhxP®#G{~LǕ屃;'(1ߺ~ ww="eLzl]+j/~=")_S_֝R} k#*TB/vgz,~^ٵ[>>B>[UsIv4zT,R/jl0QlGi-spyJT34on+Trĉ pN_IGI9v_rs\U,BֿBL͡c FZPgwgbl)hydĩVGnKe(>-絔ކ@ ^3a($ݻޮe̦b? CgMz $iE;< ?a{'F:@պ g0d5 j%ݯd6Φky30[]?)AG?a+u7 NS a[u6LD-+h&t]hKjnMۅ̓mXXޙWtMEQNI11̡dΪ{&fwoQ=ёRofzUjcݫj?SA?dA:護gLb@zfwY=p5A[XL *2e%ūb{ r$69eCr@ݯ@;.I[{i i d=ށrsLSLqNDJML~P`\t%CY+`fJ CxQ'1nQE'= ϑ8ώ6kNjp6/)E]ZpC 3xȥ=zhiyBf-wʏ>Y!9 wY>5,kb&p ,朥efm'Xgj3M|r'pTz,VPAEa5R-l X]NYFeOkMp?9]?صlz*5|n"=+,%H=.kM=Wy^+v. `bTHt$Ni8jN0V#ןk 7ǥWS[ǥ00tFrgnw6l~=~ qO}7*8=S>s´PV^, ޽Y'/)Dpbc7L< =y8Gqm܋oI$p5)šWAˈΐ]r)̻]B$nLgRQ0 VƷ2/1$[Aʚ,PDv 8 }O|МaEfQ(pҌ' b$ ) U:_h$ 9|Ή#/&ΛzjlM)z[6LZX HdV q O-~Vk0<_."zoӆ(njZM$up(`"h>Ϟw7t=\HqS W6ōjpX@Q%%A0GC8'Щ^^sm2UqҷQzݵ=H)G>^,G9\d.Spc܅VDIr낖Y`"|E q90JLqw Nc@ ug hx2Ug|ҕ[ !|״X<|O(ʣ2M+=o}l _ ?AwTq3耉T~Rz)ڙRiGCtDLGHC@qhhhy*,gD!>?fFRyϙ+ :oxOxoVw^ff q-o4ȃ6 tq!Le0Y.{l4y3s2V'hxu/&l t߅>dzݯ 95窜۰HocGw9İZa?U]YĺB)Ʒ2-Vb߱sABݰh\?V^B9,,]S"+SvҸV-ήiz<{uO/mHǂ.@`c fA*Ač-4~o!Ivb<fYDP,e>֓Ɔx@3 j<7<962eW.ѥ&ut< G/UjQf[,^_Fj*#wRHp؄%,G+P MCt* O,StΊ$t|:o$MbeDjj\zeJ^f Q8w0IWs?b9n} lԳ$ wTitGOJ[?-AhH8c;2fwvLpAVW؃ʒH@>H;z k X3y\v8? 6oaS*Um4QiskVۧT"IUOU\!0H[*fL,n ͔''J CP0W}#)nьz ]kʨu֍)t,5eH%; "a+t:n,!/E=0cpP"6ݒI w /@fGc%(B`--PPޘr@w:f'enz^(^lGf[_kEyIZ6xD V.N)g|FSV_ #2ϋRꀗu:Bj c:8}c2#zRp\K5 V%GXBX,QA;EU6XcR 3 R:}NpWkclH6S+@Ōo_lwޖ]]圩d-A܌3RUf8Ļ9'Prǯ|nsRɐc{t:3 6rre 0 zLbZblZfD>A 9p]U͞* CofcrxZ ,6|mPpzЪ(AEOW`!N,c= q Z^~{\_db5HRX[n%ƣp"DRȇaZVQ75 o4ILb{wiuޫ: ftiơ7L8r}OBM$]jxd"03R=(P1jQȼa,o2lpNeA8,|ứ&ѭbfRV4]zqq}?xiܖh\H.t5X7XˁBɿkIAjxqy˥7~@Ԇ}{#aub*' wiz@eVo(DGk5E3]Bzxz~4]դTTZ[F! '1ѥե 52ckq:;)Y1 Fă$ڭB{;A  <-:=P*A ĊZ , RxȚ :xP-i,t wA]LryՁ e"K W}[ĆA HLVw|S@TppJg?ZnlLsȡ>>B^&i@"³VRb7Kn+ P5,@z])3qх7I]@J:gXY~䪁$mq^j#0qfղϽ-S[?QSrmZzf&Xꉴ! c޴Z&;<(ts7 ,Wd27@{@8; ߋ< }z~̂ΕKik] r fwOiry2nM4 T" T맶HZ{6{K5 EYT\{5[8$.Yg&8Ƙ6A*pVY%h[̩_fZ Tuke@*{*ʗ(gIC7V1{ڬߴɂyT q7 >b@6*h_I:*yd'/37]a8F?>4$~dHV8NzEe.CPL,xi#=Ix'P8V! dmY/Ö5;}x꩷ /S3FC3QGMԜ% A6UeIWlq!CP[\`CdMf1zؔKlYb$c|;OT CbXV-@H\Tu5RK3xhpq- DGA'ULսG-g׮sTJvZ&C< .0 (NzAQqPIo ;ֲ<>O _aAvzpjL6> t`EIn;(kwUaaN&ehԉYFRR&w(0Cuz= D%ZV5G½kbÜ96@m,/^&8^WR>8J'pn*x/GaE'E!ރ(fp2$Il`jWhjdZk&YI@-ĤlqPO)E_B3H6{㚎߶V0ɻ!|vAu _+rcɆAҢ1 i[͡Ü[I("EGJ$ mx^[ RЅRy9}]mBxsl_!ݺ׃z\>zr2{y3mlaQc~o@3vvA>c7_ֵᆼ+y8qUU_xuSB:y!|)BH03*^y)>"=H4lrڷש|ID#d󢓕yx [ε09LJzxsRT6c4{PdJjjCڣSnCd6xxL=87O2 w(,JϐU]+zK LS/E~߮^֍mߎ@p8Xn+$4Ά)6$XONǮ2jS[UlOpf,퇠|ϔ2,x6,Yȟ/fo%W뫉>#8_NYO1,S!K OO0*z #com>TI'N6!kչCX-bsUhw`8B}FШr0'$%9)ؿeY p`$nk>EO~rR Lux_G+v9j^: ֶMA4nfǢ+!4+4sd-~; `[F 5,[DL)#2"{zX9 "q팊7]s(mQ+<1hd!SFV1iL'\5eARgu\PXtOIh5>hhz<犇 i_EuoQ{NlN챆xuut qh-hĆ- Nlwx}e cWbxk|bZ42EVX!=[MtRo$2j(M9{VSpg4AxRĿYv6 lbřjѱFcܗkzcI`٣l)ż,PE tQ&쟃E#/7,"{ٗ. eL#Q$UC#^Jb!-A:qa eđe~KSrߞ+~A%RjT9-vb4Q4=$Vxȃ2HX <.C0qHZ5g] cnΰ4clO5gL͠2#hķ2V\, UѷVn3aNP벅{5$P@ c@rc∈۵J[G| Y%OU9̋qmooZb|ǒ`Pl^ עzH5i7 !NB只mM!+Y6q>e5X :˦$zq7=7Su<#F}^oWMeX6cqNjB&E`|\8RydЏâ_)|4Y^#QùEU~tj/r8iUP[ xZ'N.ЯAFt}!07[N S[U3 >dB*Ly ޢ&VLhkV0)Y_pDK|_v˅dwr\M4'K]%Z&<qM% A?[ S/ƚ~–Hն5y1!C#|38O8vTD8kJ& vHW77x@`UmAnsTH#?keIuƻ*Hё$֯ rΐj`|'5Ek=tԮNdmhD́ Ck74>D#ōqZ2liYA@mePT+M@:5kܼ~@EI$Nѓ ap_kFQHYnGuoV!6&y 1OJ : PY#\%e 7|}1wS]XRsG#^.稑fYq$WZF0$MD3ى^q-VI( ðUr ֊>HA.&@b:~j;kڠ1e  g(~-oLюe&E1Mד w^gZu].˂@oss$Y'r*"6ȂXZ.N} y`p1a[q8]`v-)D:NrO$qPf(x1- ܍C:~E4C|$W)R\dChܚmPVWӴB: $=mWx,=s򤟠`Rrpr:[Ģ9$%tߟOR~r7}юE83q 'DG"IYߏ`dz LǤ=hۜvQq~}Ɏ͉!8M.fm%Y:b e#f0I8fF_9f_o`RxǑj85- *X f#2`#Ωni:( $!lGͯahcD3)ϵ1@Z X*nEc* G ҍS]Qe&xGNR׸ nD3E^O,GW Ż f)$bkV:$1X:Pyz:LM TS X*l T2oѳ#0fi?i[ֺtn",M:c~B uxcl/颀2$|\Y8ViGv7EbͰBMx'^ڤ}&S8aQԕ=FCm%,4gEw) vM< zpT ϟCN4*1lLGB]8cx R2Y\]B@Tv CK1F7ږ1rs :0l&<;EY#Elh{녷ٚ;VFo]4K\ %edU@eD>'sdz'tae}}!okU41v񊷥Xq/$aR}]~nz Aܔɣo8BAKM+@72WOiؠ`f?EّZ_ @#YfX G\$+`إH&s{"sS=4d`1D2l9%n֢kx̉?b [FqO"Fh8*qZWŹ:# =ũT'BXyQƵ&1&φ\'$[?XYCDR z]^~ ľM,YSp YkE;iMx^N.?3 f$LDd LZ9UzulK*TwB ʹHFᔓleK,}7'3̰"9NB6LLJ,PD,Iw@5Ɲ:܂4~P\`d]$=L> stream xڍxTT6Rn[A$aaARJA:$QR@ZZAB) }}9oZ{s]s]{fmN6cA%=T@ d]cK @D&04 ꁂ!2P*"]O8 "HȈHʀ@($7!`p8U0'g4߷(A=`0n00FB`P?RqFen(!< C;FP A&D 8P9ho0„x":`Cu6W?ѿ!G } xc[J3P;%(+ f*H77("՟* 컯uE a_c8x "`H\Dtc,+#uO8/z1*Ebo9/B`nB1jPB8a-(r[t/; :X0z`@aDqP,"S C; H s,FjG{Y '߹R37ҡ6ryƪof~}[lV/<*|oʨo>X0,Qu,[̈́_ڢé_Bygـ;ӑ Fvg2]]wpI/9:%TYb^͡XZ)Ƕװ42U7$9iaqEScm  Uw'w6֔Fvf/^,DU}lM?SJ#%p1|uyU_nG)\.x+,>RI8Vlx.^oMGqx|dM!OKxj %fÛf/LrZ0ѰJi^(vieM$~%,GTX2Y'J`4yVAe-7*590X09FzsG -7N$ѫ:pD}>ZViC7>V-n u+OfхLgrQ^=exFo=6C3WLggdKoulxͳJR6i&2ͭ). {"2Fs4T9CKٶG%FJ 8>hw3^Vwun&fעXLȅnwtn#j]2J $w~m\>TLނ'2Qߙy=;[ʁ ۮ K+F{<36 l˫nXcd0 ?ԄQ$,zݤ<X\ڗ|'Yw`wN攅v=R`Ҹɮ!H\d ߺIP.el*fF̗jd#9߲Gw v#@)O7}oZ}){ѪXn }[703h9V\&jx0ߢ Ӽ*2 A<2k|V$:vay.FҳkJ'&zB9@,?Bz`ݔ~ǛR%?]|MBz?e2<({2̐tt0-&Q*A}mIː,|{ұ3Z .{ڧT>.mBx"uϿjUu ህ5"'Gw&,;W𠂟EIc $Cboe8D~)FƧ[TsQ'sb{lÚVP{hh H*_}{. ilLTXn=YÓ?/H1kNBv _7_dz㣒},pF~\dRUz ]PZU&}PUGWe smNi[-zZBӷRnR{^WU~9Ca !QL1(WBkצ`G #hMt28EşI;[ͷb݃dp"/!btFÌIG*EoV ݃mUXU N޻/˦9X𾉛:N<0 < ?#`ЋʖR1])XN\K8Pdڦyf mar&PQ:(w-[JMj1~7٨XWpGi*Hl͐f[!ǡZQmckj+z-Ytw<嬭JU\yY`X͢1[tfDrrXޭ=8^Ԓ+;p 7}b)+~FZf]R?f(Toisޙ q;ZIm}E5L0BoȸIk^Zѹ-Z;EJ&2C\ajŧqSzʁzrI_9)s9js ;b^rkJtҝ,N>@M^Ƭ|Yׇ<;D] )ɻ P,= 5m5x?rmofS^4m#jj'y0\;|QLY?6^wn_0qFWsv).$'Ĕ(/RK01n뾬 ' MgOV-5YER5[l,'HpMT]82cTp?h6XTkP;]8-О7pnxhՂ5lBphB"ϼn&{=\f2atUBIq t3ΩƳdI7_{}j#CUpڐt< i 1`pIdا~N'Xe_xo7^3NK9AnXp:PH~t8}xjRn7 j{y/yzu{ݑ q"j5//Y$cLQf+|7?Ī_jx8Ḧ Kh!x^rc^*?cO ,l} 2^c=foƜ|cPCB#.L[~pnuP͓ IvnPdGfPp(b^mV(H܊➊M2*\T`|9`gjDnJ4i1WUlY=2?H_xH4 .}bj ?p:!RߔQA'AH]DUܬJ>TKʇ_UtbXr=g)%cZ|NoIJ಄##'κ%}m@#ͯ&YG+o}֚'pc y~\2鵣WN)1yc '6 )bߺo5y"q8^h ,ǃ{Kt3]h4p_Ghpk䟝7pcJ wlwDLF3TYG1-QX̩M.m *l>{kN3 9Q\Z1=@>q|"lVRQ^d?q`pȊfZ'ƹ;ޒw).J#gf},jT-gD36F=$&a ,O: ߣL KlX|㝷Ǽ0R&\_|`#ܻv"Z æ,=1nqӃҠzGYwvÎ9W ތnz /veə-+Zt*W*8uynUr<3:sRtBMzru.j)Ͳvd^9o.֚XAfB1.q+Ux1h/O$Z{MS*oҏ|>ZxBޭͪ*1Iڱ,kj'nmV2%1j5Zfk^D~MZ/F@ o\OT/Έg8)}(w\0jC"vWSV ߯z5e!w|%+l\> m+":.uznĞt?@&$GfY*=L : QrF2[7 N&:s*9~Z3殿ىv(w%~zD,-;6>ǻ%n4x𲒝^ɓ(S ,~߷P*wH@]Z5æ}sƓ:c8eK)ŀESJuaL:LtBNIK-r2hXftAtE~H$ju ;Yyۓ0I AZ] U\+ǩ>JRZg5>PG kǤ *\Z%65҉?GLX?oNמxTy9Am8 .Pؖly~aZʹ^0W@:W=cnz]kJQ~a+|; ©yA|nLy޷A8EWz:ʣi1ʏ=.8W{Fo|Rٳ*b"+6 'J2DDcD& ^|2^/9kΤ\ Hd:2PJx_]k^lv&\{2N< flέ/RssOS'd=/xHp#,UhN4.jk걀h &hk+9Va|rG_Cy TP G8u Aq "--SY&n{CSOیVw5* h,1Ehnp endstream endobj 228 0 obj << /Length1 1435 /Length2 6278 /Length3 0 /Length 7257 /Filter /FlateDecode >> stream xڍuT6R ! !! 3 13CwH) "%-!!Ht[ֻּ}ac7S j8O_Pkd. .пf)!  "@-PH\ZHBZP(,((/ ) Ty @]~Eؔn>H#Ϳ>`.p+ @] r!0()8eh7i///~+tzЎ@C( B>Bt`;PF{ b .00Dx!P$9HS P_FJW7w\@=5~7C~A.(& 0ߕj@HŏjQW)!WW(O1#gpj&`{@5UB0&lP4PLPJ\\T uBA;~1!܀&0{(C<@4\ :dǘ֘#a@KA YcA]|=_3]#S ?ۧĀBBb@ )`?`O&S-U_p 09Cr+A1A0GCo E.H巛p\a.>z1E`dohu{5 2 Pj0o(D;/P} nD /3@ax/ AH$ 0f~BAB޿ #И = 5V!L vbA{/_翝@c&H$F )_ `p᭧t^|_?iI2CRuw0],r|ڟ{t۪3'd1MKwEi/A:JǬ>1GגeDzZU;jBj ,>&aJC?VkŽ3gb~onE@04Ž%(ӜX&d_Xxכ._]#^INCŔ7OC$G Ů$v\L5}=g)v ɹxɡZe$n-2|p®&g#W@xnQB)~eb|ZC-Nmh>r銁O 1'uGĵqƑ5t-@3sNuC4w|d,z7VFȺ7>1"[Xk zbp`.!2AZ侍6_J7{.8eHhqvO$EWAu:VnjT ocݳß#}kvo egNy_z> n rR$+iTy}IqQ8w9@qM}G_HeP,^cpv7>2֟lG~-o2;/`F&̝P&bnYz_MDs"3qܒٓ9ƮIY2O7C3/zv]J) LKi Sdm0Z7IMy9(LAa?zEeZ뽎!m\b|KGHhDPKF*QLEӌ\^$H8!2EGЁ[;3Rn4A l!K%/slIBkGS#i 4Y} {D.!ȼI Y?:nJE|P1e Rl )FpQ ~H|u*kտ2Zb;q<; ,%XҤ/ -HZ'.µsn5zUoq旫P 0r.tݭb=\_d؃K.}!DqH oռx}ePb(m)p˷ܸI6ۇZi6Š`CVwVS͏W=t6mqK-XLr=wghmqٺxEZ2~7}bLZs*~/ڞg8++܉_ anU:H@|{'mlqmѝ,ʳ6!+]l~K3̟|,,dl#S\XYLO`QHq^ToR A8jO-"t^ST<) Pܕe %L@mb7<`Q~G,dRdqcMk=ė/faw/[3_yy2S}|!X|2;^gk|u޾ לeHEMWɞN}T4iE4=K HW\ e*SCH(d=/L oTXM$ ߙ̶~e.['^V^ 0sEa/kAr ш86 $e>鳱cwWr(s7^a˰Umފ藘g/ӥz\MVԮ}ۨL?LcT褃7sGux(]Z0 >K}&=|%y/>ڨGMԵC1ˋ;>v4q>ݗ-2\kd kft'LċwkstkTz٦(^{UR|Ia7s,3OK>{ zn!n88ιBg q(}B}H`:Jvm͖1D[Llam7{Ώ REa SV`XccʔM`\յaD".7[ƵB>A#![c'_t&mHixK(H$SS΀,|~\YndR/..y{eu]1c2h>@҇|͏'П~vر~PVB D{"F˧wK;QkpejF̩T'2]T~~"O5wb<9f6{54w% t ;*ҁmy:йDb|%V2utKϪ۲g%5}Y7_Nr<)7_WD"aC*c%PBFtH[Om[ʮoqco;oV)t6g*ͯu˜W=gG}-ЁQ%}^Q +0{92fN We&Z3{c^o^ܤVyFr$1ʧ^% =Y[Vpz,KfW?kLZ5%s6^N%MZ$(~_,B."4NO=DŽ8qZNdqyK( 9-5 \C<{ #W6z?O$Lfvß(rI+`EUЌ1 %c8Xr|ޭc4|VVuMzi?DJMUzk.E4$.'#(MXF)m zOX?t }N*2_58'je#c>-~ĉIJ_j(7'? '~[Hu|CHB6B 5-_iR~\<)d_iaWKm 6  \P |<L pldwm֗ b{6(DzWMl#q$czpGKh$1Z!YT G؏6Q}Zd!9n+iGVO,vڤaS3BuFا'6]DLykqK[O7'+OǑ~덧JUC2j1W4J+ǵol>ڰn--cήRjU2dQgЀCO< èoZO<uX+Nb*3qp99)Eos*Pa|aLހ)ۍ} Lьľ,('y&wU,  5xdÇXgx{yx\fs }#%7 ~^@|->Xt6V.Nn>I ź2wJ;>d/I79گcҏ׹/B[aWTL֪b=b2%!x(|^F@5=4iWoxا^C:oknLhNOSS|o]d7v &班Et X- )z/m(*`[T[VTUnBG}kO*>]$ Y,9LjtfWK?TۈΛI]1NO9o@Yv3;>=o1"i3fsџiǂNyY&ZE੊xvdIAt:9<)=4XhIq gheܨ9RbьΆܿ0_A9>C z<5{G.\X i"6fW^8:pHFmtwؤ'X k aC1ZrSnQlt- j4ʕUofD\DUquؙvi]+ه@T0}M! ;˷qUg5AW aM;փ| aۘ~u /^-I:u-X.gW$ߚw?}<~$nS}" KWb${5D$t-N*9p'kJk[Wp}EM0V;yWȾz8?g+H͐nV!A ΔXŧ͎'_Z^T*mJZ (|I kƷ:5'SbJOc D"5h/@n)a'7> A/ G]s?n,f(P%H6Ƥ!zV2*$.7q7q|Jr6Cp1dHKQD +cǗ}%R'$IJ'.d,òbյwyC}(?Hc{ō]Mj{GkU95?ؿёWGaYsVIqPAh3QĴNYᵓɞwu3fP8r$KcCFjꖊzŢ?Y›j$37bF)9[,:6Xe"^ҕSX}>SV{±0jvדPih>xk#6]ُDM;y[^ChF<۹U:Q}uU;o͓mlSf7mD&J*̞޵E~bЊܞU.ZHJfhМY;(P#<4+Ʒ28yRLAw_b`gS֨KZ?Il*Q޻)w7n1V> stream xڍtTTo.-HI tw H 3 3 )tw R" "tt w{Y~y8LG6hZDE%EExx̠䯙BCpE@AM pIˋȋEEED@O(` C!h2 uv/$Ps `ĸ@q;0)`|_Aʋxyy  q@' U02a2 npxQ p4 CPS]}!CC=ؿ H  w8Aa0#@z0#;s @[<4Ebh(W"NY @C4ٯ4(w>":Gx.pӯ"X9ꁅjLd9C0)Q9ii)Q o惄~q!HH o+211 !P8?k\QPo(N{b_Ͽp#0WX?SWGxBrR11Ii aпiWwL!p#r[Q)Q%-.7'~Ca> 8b10@TKȟ5XFu1@ qbcr#?v_!F4݂/ 7_ 77?Ղ_s&.% P@2Qĥ~bC+ " G`p.\'W[pyΎ( 01iA  p\e Q$N'XG4?RaQ(V7D6 Rs k9QcZ$kJꉔN_y3dH3\1ɟ!o7ςi,q2iQ Il6D6|)e:%V .+rw@LZVA'ʖ*e55 2,g۞4]ҕL7|8{蒞5xե4JSo2GN:L{:W|O#0Kl=,:SZ8H9^ϧgx]FPelm|4sx>7^\Y= 3`WmnK]-U 528eIrNV;E.ѷ/=>ʕ]oʙ9]PǛ#O;7suܿ˚ʸ13QdfF] JEe+k*n< Չ_o)oL=p1L);$OQ*Ȭ ~1/$tLi *4\Ƴac`3#@JCR c[7ЉY2G38 !6WT@KRkKyOooOUև@o^O#L=8J"SGWFuNㅗru37 4^'% Sj8+a_чs쫖4^pfՖ@)'ٹ`@ ^N TJݸ +*|k(gge\D4:PcQ|¦z׫NHw1u-nIw˘Sb۾V ]=d/[6 _26;Tbʯyn-q j!x)ak dՒ[ +0 u٭8"Mҷlԛxf]7Ź&h8|z;]Ή ҦJ5f#kaETBpj/p4։x>EJ?Iŵ:vi`hv8O#2>A4\SxvgS9Hϸ*@2F6"V=knvʗ!1RHv'|/.7$B?Q7'2]d7fW|0Yk~lӥg+ >-ٛDIغv,I=;7)Fm ~(x\Ɗ@33&Wi*{!z++5'WW{UfdyKˌp;\rε73%c}}huKc>ŹL==O?)Ֆ0}1zΦGBzҀsb.iZ/ٔdo8=o֢vZ9#(89qHކ4H4y.wDdduqjQt>L;ܕ8uV bMcG0!A7NNMIs]^ @ӧ93+zgRs煶7}Yɒߙ`$/SxIEņEl}rڊPYEL8A3}1wAY1$=> 9LI,vpM̈́hM]g+9?^@z]#zcN Kl*g\pw\ Uq;}5#y[3Wje(:oB]S}LbђM-aEN}XU"A?w3GPG\9\LJebvo=ZZsh>fSc[wʐHR=}*,Z`FyvG=9z$̇?C^h32#TFM&z6Q03Tl|sX>Akf>^ ;_CD"WAUqJB4)7`6p#0S]͈A{oiF]2k$Nc405d%KBC":+#j6f )(8?Kd_0Ex}}sR 4x]ピN\1% /:r2$HQ<UࡈUz]u2 <pws"ooA_v4أ’' K7wba-!@zUbVaG3k{wHa}s2Xl.<ݍXXpc9pz^ssrTfD>YTS̡a0%(q&a"db\\飱 +j <-.JR7gh1py11nH*٘5 t"B|1!$HO1__>g}^y7VSK.Vw ȸKQVeZ2k*(țop'=׳3=÷ev~)yj/q1K |fc~1mS<,ӯ:VhoqUxȠ^? Sk }`cѩ\K^)ө"X,pvmBQk9q֝ 6*|Q0wCGyUE `:k:t@zZ)* JtfV؛և:FXtO2du ,ݾSuUv3NG3hS^Eay9ΦT&]kQ6G;VTۚ-T-Xs& t5v( R9Xu8=ר߾Чrݘ?ەO_{Ϥahý.. Oc Ñ[O|:I_+c%ӆ hHaQgX5Тcݼ|`GQƙjpTCMߕ]qۯC~nw5QϊGgR~V}’d[o"WW^&)b OD0 kz7R1ngƩDt2<]qZLgM_qmZp3}?o( 욍QF ܟXP}5Ymm*$3w|ddZ?e"QJZ.E߭@zlPcW67v?'G,&#%YOGF׺)=G B6HނLMqRjN a**+AfGFd!ut}mŋ¥l',<\3Մnkxda<{mKγ  =ñlKa{@pSuóGVh0^EOHb{\4HEث a#Nz0wNlMyY2S_Gy㧞Ps-P}+2Ǜ*/~nݯf؜^(S.//B ,F)lccqr?9g8_CԞ3W6cd~Jl,(G L8v.iOy@zb,Kw> oQ!yȌX+,;⫬_-Tc%CN,:jFޫO7nxOWy^;߈Įg&d?.5HF^GbJ v>$MKmJg+7/gGj)z;ҩ`?zo(sX6R6ȗ-c3="䠮_1g3S *H A=֫'hSI$+k'/u^ZJο%s4Ir*53X9y'-Nߩ,'1b0*mc87 \o'Lomc'vR`>j:+ ތڞ $K})?15y]&{d]%-ߦdc%{7-kQCV䛱P7,ɲ!Ҵ##osINx9~lȨIqt -5X/GP=- w.B`:.b͑ytW\PēN*K(UW,o_]Yz(_4E2s>Q *{Q>f)Łqmafy]^`~ Lø @';㣾LSR3D pr{[#mh#jX"*x t]d&a+1ύV[U^ݽ 廴q jocYEgq͞ |oܧ4Ntq37xQi*u#MМ v͚OlT>ixlnL?{ž$Vv+0QFߍEüWʉt2VG+cJܩB F }&A2.Sj+7ۉ6_Lj>t2 TJo#ٽ%RDQJ&ZSA}~;َoc2!-jb![jF}jVEm^Vmت5TVXXI} oZE T~8w,ƫnTOlceBحyR(')n9+Bn/n!_sKos.g}(.=UƪwCS}ٽ>UHrB/$!ΞgnTngg$݉$o$[y6k]z^uӍ(lymL'w/݅Y+Kdh I,CÅD{Dߏ򷞷&-@Գ3IYa)K#U+&)Ry@E),9bW8T4-l=?zFgNB{ݺ;<@D?B%eOQz ;wBsvD^7~d60*+`n/s&xgqṡ}+w7ފ/Ƌl^;aj51 x{:k;//vK7oZ3^||/8?csDͬS&eE(^ SsM3WzA>!F<@ n?'<&wCؤnО2U|WP>'|zby0ۿ/ZV/y#.g&ikEUJ,q~6ShFdoVkBC!q>Q(%O([Z yL+;1a"3g7׫-+bUU z>TGDTu_FOi>H O9yDFqAXBUcq$-W҅g̐eR5JY`*ٔ4zkW}OL"8cL$Ԣ\f xgSwV$}enDz*dd,+ގNdrV@`Pn˟_fgXtk)j4^l  endstream endobj 232 0 obj << /Length1 1584 /Length2 9413 /Length3 0 /Length 10450 /Filter /FlateDecode >> stream xڍT6Nw70t ݥ 1) )-"))%()ƽ_֬}>هE J Մ C/;1 C%PBP6EꞨ=]B!Q  " f#P$_K-@H\1yWhAPPm!.- R(-qE <dx0#@zxA ІBnM`C0@أ!Pf #C(~nDC 0=!ey=ÿCzPH$?f% G! O?w_ߗ Gxap;?ڰtaP5ſ9&(XPPP $>?60u|C `4f#GB'4FBB;- `u ߿L^~B?~^Y+w+*iO |G @H$x|<u#V nU9d5;6^Pn.?ϐ?*HO?_ sq\Oh!gT_yW yý e!a>P;]/e7c\`p. ㅹ:߿"{iE1l (%{ OO1p>pc AŊ?!Bb8ho$t/C  `x?^@?}f?}f@>3PD'c3 @A>P[idSMxEG߇A"ĽG1'x&J^z Rbg;&^5::[Jյ`۬RH_ 5=A?4۟Z h?>w?>">.W/"X\:11a"V֊'mj#ć[z@o谵n'2ov2hX&86:^s?AȲIfmmĩ;|T[ITX}z/dž뛥$ob񧘹d?a0WigY 2>a,دc 䬉 ]c1[0xևahpf\BGPF-],1WL;l#{*+`  Epz21-tm2k=MB4LyT\D:j^L.58ͲV# XE'n"-k02R\LR^<4CX8giBŰ9*ymLQ?fsZRQO3fq"ZαIw(uqY>c Gdi##19(",Mt&O7¹ Z֝G)ooT>lY0Z7=otٕYT4Lppx琞 Ei|gmb+@W=d+mɤk(AW"e}'}<+e3O~JCkKyO_[|)y3XڂȈV,hpxc- pt!Ɋޔ|xL$4vw1ۄb,-M~7ib,qJxɝOu<.J~ ; N!EKVfR߄ʅKdZR1U!f`v--2.x۸׭0u󊉱9⶗knʕ <%IiǫqI */q5?HGv0#r>]) CS%ZŁZs8s.Gy.f]fBy#d* V `@dh:ag<_ݯj+Ϭ QK5.k閄yU#{$V&_xG#m:H_i ~-\an{ݓCǺn١V? e2jٜvڟ?4Xi-تt;z!'٧ֻ0~6B H2қщjk>T tPt+Q>$z!-5>痣 §`'"?`YwH탋ދ0ss|Ys*M`vݧΨwP{Lq%>kײxg?eCǂ)tn$s`HG?dSXԪ:~{B@7:4%&y6V+Jsޟ|I45%T(O}LMliЁ₞'"߱u]ɲ.>؈[[#CPauO`%Xan .8!+A[oP'P #rsj4h\%i0oNWzE)W^G2"Gtz&9XQ^mFG9MΫOl@\UoˬtA4K_AQ5kg"߅V;dIK'?N+ʘ|yGv\ֿ0$va~d5AMyg#ukG82F bBeH綛\Ű(:_Xk`~t=eƯ P`NN.MKSv-= ݑa³f౗GU+dR.8ʋvxMoy*10kQgdܗB>[ccRi 1\qx喼&ĮhDUC$R==O':oym^F]vKCq}{ws4j&S#{ #_ [~{bGqVr$e7TFy\\O B+Ur ܄YĨ;}Kˆ! žT;Ó+֩}E ؄uDvg1]A*qH/&യeZiiVFhL  ٍKɝԟ#{xL ֶX s؝KWq>[(F'mO^Rnp؎bTh"KttW/D^I+SMo.^6#yb5_[8Ƌke89p3OHL.[ .aFqy|Kh _ZNUNfA5H{|<,K%ƭE5{C5Zj9~ avmöබ2`KCGNӻx~9ðe%JLҌlA0lN!UiSD/I FbW)TT,3\(<;כÞ`^L\:koqulYxӏ/#7# ̐o_sjIU:ӗ5Ȗcs}>XT*TUÞ& ]O{GOt8h*~]#obӕ /,bE9,z\v+Lb$Dys7\GPԭF";Ay ?W&U5J.0Mݡ> td}%?&U8Y"R m@H؜&YsbRF֝ƎQ uxߒI2o iN T"n!+-Gg~@k)tէ2_Ru2rf d>NogjH+^U񓸧w&.b(D7mh?);XEY7})Jb-OL.,>sYܤbze%$ n+Ƨ6P\i4b{|R"6EӁQFNӬ_F|CK7Uw͵^a䞁eȪЎb~oUʕm*LE*wD;6a>F_ˑF->.l5}SMF{5kh7a<2\9,?U/KaEK8r)0Uaғd1ßEHty@ wgIŎ*#p|"_kԴ5rBF6F sNv{:5Ln2S6sf(l`oo.=#[۴@ZիAl<%%\Ust&ޑp_aO*wW?CxL.C:f=Hp<cB&7$DaT>MJx U\dzd3ÆCZ ʊ|=45;K&.#־L5c`2rSAq~2o4E`0֒e+bٷzj'mSkonzbM~tb]ɜ*eؼ'7n7FY >{ŻhT}øb۹#XE΋'@a9&IyhJzɯ1}C+a9;ަ ~4U;䙺lU,JBk[cfNPt:}dvK;)VxR}܈'Dhͥ+MRuQ ,txQ]{Zsw#DڛDeE-W ֚i O_RF 5oDvې~G1Zԥ0@`b,v/D#t[Jo>![NKHV^Oy[ܸs(GL5'0Qf(Oke.a결б5#at[DJKR,PUOMo),ڡJw?z_9Ozd",h 8I?M3ʗKo{Wlxs;!%DόݗcM+};0INRēa{F5'~h~T'8?1d:ЇTm}Ό],&8'mfLbTpx:V5]%7l.RrF[oSJ\1}שUɈczk*'$CXc)@hĘrJlCHo^RdwԢw 2qUtR6z[<"p`K}+D ЇUd,&mH2H܅6H&c˘v)ܷ;Jx #mtˏyة_I*qT: ^E.tɥ=.87qA_pq q!ᛵ_~U:}$xų3״9 ٍ&tqQriWukR^}i֙ Fg܀QM!G[k~/C>\_cu$V/@n;{3edtD%¿JNPCu_{ V 2s#6}{QCd9_+ޭ$4i]O&%IXzWK`Oq6JOX_Lm2Ogv<17j@\[Bm|9mǝ׃=8ƒih*`貁̇_Rk&>J?ţ4[&Ó~ L- <)@eZ+Fll>SU=^HL̓!nw꓍3oR a x?]Yp9%^l".,gaϓ~:(23''9,S7L⺛إ?[3PJ/Ѝc>+'xJM"<,|ʻsPCY33ɉ-}҇MAiŷ•ujfkoFA5Qm1蟝G3&D~JAwz/p=m%v}(SpNnPSz.٪eěD*ucy!5ߗ1Uz񏒬A>U'*G"4 Xbe1q䐭NjB7; Kjoj=933}$7%Sb\Io]ÊUZ x/qWLWGIQ둅it Z\?*"~pTph2y9hOs%ʹXXE<-%kh[:%|YaC58OƊza9GJZj=?&>T,.av|C }),Z.:yܣnVLI+٩D{eŦy6;XR?xϳf:d)5Sl17gV'n]ƃ׭*&ӟ#J0++[rw?zJ7b3IcO}n=ݵmUF2-Q ϺtsIN9WN9?O-ha%sL>qdˮlzNmTPϒ@'genpy L6`>kz@ *2A+u]G838 pЏŊSNB9T)ae!ΫEa|Tu0M#Ip㵼H BFg|ס ?ßnXiCvn8 V.tےˢ3HΎd ?dYaE˅J?eu;$#1*gAxkl %dwn %AXr^N΅]>gpd%jSL,F;$@FSX.eݖal -sl܅D`/ܩwz T5da SKS BpD5qX-gQ9yS-a.gü ;^ҮT'9"Gn7*>^ƴ Mxg0`S6J*ڇsj\ +M-٢Ic9BQ)]vTKd B6KI5*h ҩbI=#x9冢8^hp AJt災内tʽ,j ' zŒvMި.㾇H:ո[08K1A j7z˖/ |Yꅖ֖Gvk FqݯU&>Z%:Q*m;"^nS(I-fٷL~֞ ӳ ;ttĶR3{٬6⒠cA5PNБaroMkfDdY endstream endobj 234 0 obj << /Length1 1414 /Length2 6869 /Length3 0 /Length 7836 /Filter /FlateDecode >> stream xڍvT4"5R1t CPRR"݂()JIwHҡ{{o[Zyp )#`jHF$ (@1a PquqPh8!(sS`q:H@$A@ @@a&Cq)#}QpG'6Zx|t B v# 0BB0u`ܥED!nha$ q0k`. g2a".otxCP0!{ p9 s!_(A+ - _@+y]!v׀ߝCjCCQpw Z w5ȯ2קWF4ѯT(}Eܬ k8t1A=Gp<0ȯƾA/~HwE䇆x',"p(`s#~9/^sz=Y(i1%%OH@HI׋,mO.Hձ_?k"Y Cr+ M)7"7;;!npW߿kzb⿡f?Ձ=; @p&H\(G}`p eM~I#_ߖ, b\?׼]?UE@t&zGA D7}mid0N\p@~]=E S ]hB]7W;[0 J47ʄ9WU*2y D2x}1Q=?{dVc_EK]i.ӟHն9})YV aHHaNc}*kS]+oPyʢy= zggL δEuu/mKQv0֥J#7%,=h$`h/4Ⱦy;pn.sGAɐI[{+}PfM!7QR[{yZ. wE>= ,G1w=H=-l% ` vXKn.a`>[.rMæR+[I3*Q} xvc@!ʰ t#[u^<0\ƶbandM 3DZň]Vp;' "}HfILF'cD%b6 vЫٻ$i-?sh_q'a'XQW5'"x< SS޷&*s~H5-tudLI'͟PǶ'뷸Xu:{|Q8>խJy#UybdKb 0O`r*rujA@!%R!}|,B*BQ(ܲAe\Z6(O&Bd9Ü#*7_Af˳³XE8^̕ov6q5+oKУe͑=,Mh bi7Kⲥ*MKu )xY᧎tj'/?~gpllđndOVTy^ܿT #*MA |/:G/8!P>jxQ@p4QOznpB,o g $q[\z%uTc>,ψ 詃f >z֕C^χ66ɓWޭ/ݩ ~W'Ch=/e&%P3G)lr@] G6X37Jm(R$Aڤ {D>:vއCtvv2wBUG~p\(xL_@θfnU^1frwNJ*-s ]!^yvQYgF ]4lY;q5z `8S ()z&wM('V IJށ_)xEo[3/v.J;0Eb:L eǻ;g0ܞq*/^6󋽳Ggew&8D-pޫMTz}0^=UR'㷑k ׏`b(1X?FO 8?Kaܸ')tH`Ol<$zO ЗX^90~lC"mn郾Pjx9P{wR\ȕEUHv{ V }dpLSTf- ׊˗_83&rXux6_$:l韏>΂v9$ h2?x诰:Z0 G$M/Ѡ?nj?j|W.Ё.nLC}?{WHQB"㜢j` /U~Jj{+[:j䃈:C[SɔOze>:2hq'pnQnF4 /@ӔY޽f*H5 Uԗ>ϾVi_ _ZT~((+ZihyK&-zh|O'x"׺׶VZ۲ rn. ОJ#T4=5e5t☓\ckH>H9"bm<'|-id?ao|U@p!p*ln~,I>e+T+jP6HŖ_MZǣxcOif:#KԂrƉ6 *l7ڝ^GjfU;F#goHe"QA=f͞oѐM { $Cߔڝ}%j$M J&$oL M)_a%dߑR}eG~o@x;q7/ bdFnF""ޗiٲ%6T )=AۇdY֋NRVX.q>R/M-3 }IRĴ[59&kuq&,mZ9OH3,,a*|!8Z u("= ES4+C<h,͡Yμ/ y6.sP^vŁ2}D1Y|&FJC[c.xX)_)b nJ 4$ !$@2avG|2<#PӞԋ/"7u$~>`U,b}04f.y(45]ge.U cި#IUe!y%Y!譔N&C/E2ɩT}Ix;Z>5n 3dlIvĚY^%X7V6)Fv/4 ޫ(FIs8Gcߌy@}t)ZoZZ޾TI|dO΂xn>KQns l6-+ W֒2ֽ{q?Ż@5Utaa L!9;jyT*n\M+U[2}CE!Nof?p`&Ḻ_&ET7MۗW%u῰ ~jSR 3}LfCz1\0}q<ĮKXemCDtmj\EIŽݾjsҰsaզS%pJ& uJsR6?)EG$O{[6m1KbSҲ#r*"!u [RpNʘ0#ejc 4;["7[q׎{ 95ƁXJ MG-¢^q0 wR_` f.| ECDۖ)VzhĿTsM94βJUw2|uEP%bm6i5o/>ގ2(ta+Vˋioxth~ÁTcB;9g۝N˖B^>rՔ3sKPz!CFs'U=ȷtK8`˓՚ƭ8&鷻CcM ais;?i:A~:W&ɛtO@zݳ:" w7OViɨrC\4 T9dB8rcȘ`-˜꜂S{l*3x\:)E'_" bj`b7Lq)Vԏʉ r7g+(9Y=ɊFXZdExIdOT-Q_]6p.I,0ܰϽE S2$3z^k(^fNSR&ɗ mQD`MwYlUW^ER~zġ_ pY6NY{m"0 BU}[u_csrB v>ꄿQC}A KNͪ _in^$prU1}V&1h0_QuЁ`0cOX0^U`2/=b+zry'}pN3ooIθ.:4XƱ |Q2x>EE=U{(wk!jFJ~Mѯ qڈU]K OxL^G#{q؟2Egs@3=/ѕx"HuV;z~`?>Ֆ)Q@/qr}"[[#+a73rKq#ն# nWWnr[QR3bcYwqbBhv8VRR=IzM!xO8ip(9 |?z^p̖.+- ]ό]t[X${VҸRw?`p7?QZ?(SVeli ugE񑉺ZR'Fb M|7`8 }y)DEQZuD/_0'8s9վz$r ̚z!i3u~3Uf.1VEJ L?AȪ pNS8>Szh'h0wb:'Ok Im o {so$'(,Wl%J4ڔKu䌢&m\-[&! yr `!Pd(gޛߛAyŞdHE ػ,M'7JskSof5j,j`;ge~U f]^o?fSrm5eEwpRkdku(&u6Z\8DEP^Xl,S2}Nw|;ЉD]8quH4\dMz$ZYg R²Hf>xљP?B:oBbKbjKy 9C|JV9\3aC)݌>1ͅlYTcΪ)#TXj<"s?,}cܺT*p+_llVذtgJX\c 6rgX'i}ō{򘻙ۥ-4)Q>bx9P-uLacDxHMVxʴ5s&$"7wWoXh&3VtOR.;?cVh?ƾ*].p]R5oe@Yv&PU?u?LX~݅Xp/>s}1<~;{ަ;W߇k?ɽʂXd$ŋ{$nގ|j endstream endobj 236 0 obj << /Length1 1814 /Length2 11752 /Length3 0 /Length 12887 /Filter /FlateDecode >> stream xڍPٶ-#qwwwww6qww4{%XGι_^Qƴ5\c.RBeZA[#-#@XVELOJrc'U:8lmv:D dmmRVFf##;m". ,@O*lk23wz;>ƔFNNv@ @hv@tr! Jژ8f6a(YJג}S-@uX~WWsM6Y&Zg}[{ie& gt2|[A7121m9܀& 'c%]Yl o[헱˿\sEmmM~++m!Mn)@Ogcx`jZ9 M!Nv r|ѿ@ooz[KnN0F?z?[u? +77V7B7V67V7v6f`GoToToNo7Gg77.7-/_0vvpx{7%݀K AAՂ8?&X"n`wE\y# vE>l"36Yj3XmxEr/շCxM#>;83Iwui0ۘ7+ Rb_<!k0?!onϣ P1,.Jc~!橨"}G AC,-$3B=C;8IW(>֤6W&´Fq 4Df0OPjfgQJPAtY2`Xn[V:\/JȌD~wm W(.N^\Thϭjȁe&ȳPRe\TpڔOs>[GɪJYRDϛ!3=.GGxg&R+YnK +[G?|_ՙ Xs{y\1>T>LSk2|qFnyql&K=er0.^0yjξqLJΒ| cyAU%k쎺)$.c?O%9WQe{TQ-zHha!% >! 4-m&o\}g9"-Aq7E,XgZIgG(Gi`RFH`y]D\-ԯvĞ m 7SصB=cy'4?^{v̵d#%y c0qcDmz>#D+3."DCPө$. w{ V.lDuc\XDٗ:xoˏuTk!-\ȿ'&#XT:'gЦaQ ~rwQRJGvW v叆)*f :ʔ;8 %5 P[ \0쥥Hz-*F[GLI-f<ȑ2Ԑ߹SZZCGX_1i;i%y>OMlp*ve$i'4IFjGxm\<'KWKM,z ŦCi~A C,k"K0D9Go;*5q0epbM37Q"L"&r%+M2e1v/,Ǵu{e 9ĆpW7^' R+"V >0dva(? )*J2!qձ8O޴@hh*zI}܈4ϭ _!C鿕wQR::譚Zxil)GV6М_ܭCnl}#6_ p2"iĆMuz,uX0D]*|%)ICZ\3. $DS?{)zÍ7>TY4sߝtC3m$g̫#R=8(&3C7fA*\v j!OKSsivgj2iOy* .ݷ|".S1*%TƏi;A+ a XBx%Io-Kž >w sz %1{Ir(y}zYVT Тыr稺{=z Zq͙|JRSǫ53,8uMtBnfǴns]O?:dJȢcU-E1l^ĭnety#" 5,Vz`ٿȱBWMO b`d^-IJ^y$h=ȱɭܾR|Hq+eGi(X.+>]nP=X蹯@kޫzy.!6rxm:PBnb۫!C4[; B]6ΙRU4hq~몗ͳI^\;G&ww8\~.왐)XMwy= .ľe@#Iְ(XUD(fa.=8! mVRIKhxd,aV4)hj_A"Bx!=Jߏ}b8%ѲM7cN5J/0~D.uW)_<'U#э=UŸ^NMpg(Jv~ }K3kO+x ]B&u' :%R/,;޸L7_Zj2[&TMV̔˩Wo&;*ZSm4r:`g| dQt>97 01Y ;z9WpUr |?4 lG{?!Ev2Mq 4vj2:tL;?T&<7K?[){m_mMإn~vAXRG,g6&j˫P 8y؃2n`:Bg J7Rv"cXH@.&zޒ"4Z8ė<ˡ-ʅ)*kģf`QM7"d3!c8v[k~{ %,ƒZPꌀ=Nw(*)Ҷ%#Ue'3& HӈTȩcUx`Va)*V, o^,Kq/d2C?ܣPHBy`oq%A4:pX8p l'ɩ&F}%VJL7 qس7]3b(JsJۜQ%p#` .q:\it>>犼39[H`2Ezk4WHmy|(J/v(V#uoȼhX/A5netZU~~OLxmM3o=#)(Ϗǩ67U9ʚvN^Z!\+gOijkF.?ةt[.ǫ=w 3b#$ͬؗ"즪AYJ+ێ Huf#|-Z)sCq][{3УTv@mlWW,oc2,"U\-èTZUNH3YM0t$,qz,eЬ`&UaEՆ)^ ;x9s|-oHh'uߦR#^HzVXaF2 +*N0wo]Y5 +di2YQBGvܱ]ҹZmJO#S [Om67rBQ?GވQesGMq{Tq%k_;z T*1%nl>~IeSxCRwƒ#N KDX{F%IQ4I]:G [֔sI[߫ô)E ymIJpvh v0w)C1Ks1eFTdӈnN(6E ,^\Jq_Ksgi;A\)$%̀ a1{erwL 2Fξ\å4c1lE `J=]jOss<('cEY8#R|dweɖGSd};R`R ޶*IUcMkA:F>Mk,޺_$rnhpFh$prDɣBPAfzFP>~5S +B ?Z9v'EG߫+ y8<,uϗB[Cxنo2N$:FH xa wsI2< MUșR\uDHjpAHUQ_W8A J8(=] YYC՜X1JjR~f_h^F8zaT(6딸 ;o1{BT\йǂg4zVFO(Ufm^xVRP? PoWvcspVY;]=kCW\Qy#/Jb&V@[H$d4ƗGb͡l|5=?ycZy79$*`yTc8Geg$ΤA/cȜ?\t٫턊J2Ę=Kzcd>=x32fTy fDw6;M3Gx $4RIr&eʍV~p2Y{!ⵄƕdۿ 3an87A3ImfFj-\%l؏|9JT;#ٜ+m(PV  UIGPPCd#fF 'އOD*#҇u$ĉZ*bN\޵tѸgNkMPF(([@7 a% .+Fq7b8ae';g}U m d{3_cG!&b0{ %L!iW7"˻mOX{F.$>C)DxE"]A9g/iAqɓv~g%Y»;f"? rǓ[PB['7l.*3g˨:q|@~F k$ RuCA.G+_:dScgWKæs H뙖! %1hâ7 w\4㊂4.vy0pŶf>& Zf$q҅uuwI4.c':1b>22F5H91SE<S\%!8@m#´3 |.Jx+{AϘ^Hlj !շv\df!rO:caً_sKg 57d92:. !ܞ}TV yuE>$kTKDJy~G,Ymz]ݞwUkTʧ%Qܬl^rr(, d7f:u\?-,*wC٦Vqduh*<"6MLq`\D_0o_8s7eu\'l%Z}Bz14sMk'qTMFXā%o>a2)^FAT֥:bQ3vZvQC-JX0S81D/T]={@40bҢwʣ%cjr Lf 䪜EW%;#vW.Qei_(M)8̔R`=,[}n!ոztQօLD3WydP>[vݟFYa VsyEiMLcJOt'RD=*P}斍 i ;P,`9q< j Ѱ1zmQW/!18 HV5c{Ÿ$t5E2yxxwܦ~XWrT3ܳw@j0fF4|kU?ƁԾɚ8b2 p"Yc7E~RJNt>hCŝUy)(hcJQY[K1 Szw#]v%wNXi` $5,ܷQ܏sPP>.5\v.zif,{p4p)Z/ahT[zcesH']Nu0q{ZprTw|\cu"yV;:LӭJ}iVĄ*vHn: p=X%?{"%0Fg[c%Qqw!\`a0֑ʿ*Q;JYQݓ&Σq w+|E6)YzTt'~,ףR|$bR|iAQ m`g-7A\t + ZmOzj|![D PAա1Jz%bVXz\Z[oJC1Ф`ΙueZ$XK!U7QS6b^so>BX1nVҶz~(xR/$89e6Jr)-I׎]a?]@CN5vȀC!@gNc)iYz@8>y7%*l{zIsS{v„Gd%ӈDGt,Z2dƂ&k]!vc=B2tC;cMT !WޘOl=wBu@YuOv _ Xp@?ﲸIjD9|95jbF)\-[^$=qaz5wCֽNm ^R::VQf8 ,KUX2h/:{QS]B][Zu"I+2a &f`Gtد7eSR%gA²;2oH_/Rb#|؂vڻaT@D髾0y[zuX-IC$gzb&2gkcI`zF\m"Y@\ŧOC|9"]Z0ʔWh`bԽ]!ɫÐ՗MTs[cw90g1ُox)++<|.ح6f%MvȖ |b,yAM7 +qzfTӮENrl =<=+߃dcb-3G(HQJrGnG?'t}i#(P,F\!>|X5Cnzܛwİ8^V[a=fi.8;dz.n(젆aj t)]ajsȴfk嚠%Nnj\Winwc3R6-}Q1w{ m4_8pGۛ@(iEB9'GhԕzEܡ!WT40CH$ :`t.@WM|dy_j;Ld]?焗$9qsOm~BX#=lC1hR[fa&?CƱ$B:b{X3InPV*oE] 5,#:w%J6 J)sEf_Ayl/qf:\;\kUV~ҞÑm R-k}yyUy D$B5bu\,=>q,ykj$?4V>֘z #.)Lƍ,@EG$q[@CJ vzU2l}8FeZH={1\k*m9VbʍJ(+YrW1eдp:arF1!BՁqsEȕt"[#MZ$j[{w{}D (eVv' UPOn߃i>^GM\/R?p$gi݉ת[FTD^Jܠ8N?P&qdO kO3 7]}Զ+8<bG ia6j,9T8;+c!ʜ( 2$h5c0P5 "^r""8:8˻xnƁQ<s >L1zK7 =JwGS>Yggɨ0M]'c0>ɘ "b([Ǿ2=!1݆5mH6͡:6~qtWh.k3L/ڂmKƞg/qI*Fa 3YlkIFZ :ye] cLikQG* lEj.~ٯs65I%S<9%P;dd}Ϯabߧޣmvϡg`Dh7NuPT2m\kE֫rvcd|QBe5eE vyIgU@]Qz\\e_?-bةչ#GdQ'MY}p+hoыC1b"w!#g#VM wnʎCJGTCc*UZ\n8j^J7d!>|R ,\_2H Q.J+ו4׺\kÜ9vW(% \In̒A+jM \<&H"7¨!őӡ] +aL< |+0H*?qkaଛ(-0pL cKvh0°qcN g> stream xڍP =0  0  Npw  ݳgwUUEyٙS+K- <KuoA#7eߎuoE.66cڂm |[^#svxPKc4?|3ɞ%@0Eb>s3su=3B.ψsY襷ns\ùH-$^9*!^uzXePxX9L︫I` $)K=U c ђ23qވ^ƒiMx v#i^9 Fz$S"oN`B-YdRMQiރc=H0_Sc6in,.Җ^m_^A^؏Dh|B19nٛk_)o-Õ+.E,J "FԧU:_Ė*!I\4Mћ[r Цԏއʤnn'm Qi_^Y=. ˒7N+5N36V8m9{Ivzg V[zO~U9X0kesmBOE֘d+KzZ6>di6}3NZW?W_WlEAE#Ej\#8T泠Omg:WR.e߿p:,lj}/ȋT?:|hb3M:s?BwmI]2158%>K2=$ka- ?Y_q$@5-$3B "0Si_a9]dCs,k,IXvQE_R7q艠'Ç5X&É5W&knٓ RSD=_j DR/ =D0[rtq4qvm~\zLG4rԥm(96{ogα60gƎx;o#gT+i\^ATyCuCރ\֫$vvíY}GI'r>ֹCv#]/>[l?cԕzWzBW5)x^*P`՚\iOFhiBC\]uPopY*Q(gXOy)v(/~HO P+Nv 6 YL)SˆF^h,.M8u6l. XEy}0֤1T=]r4-m[T7 9XYRLJ{^2j<sEf ubhY-zotIr.ln#ʕ_+*.73k~[LLE01U! k8(ܗ֚hWPMmniЍ+Wf'-m4MO1V@*!| =\.{uYDfdy1= 1W0#~fM.w#nŖȌ^_6miMMVRdY*{|?6nze.]Fk攒`/,gXaaX}zR7Z upnPOj}+@ѥzO8+m5`}n!ƾ†.6ZJᚣ fN w5>Lݼ#0٢aobPW(U4\Ϙ}cMyDweϞ}y=_XeAS*+=̑OHBk^U?znq7V85 %|^Z4^Jsfd*7\׍GY 6|17SbCE:uY\eLYܴB: ͑,,mhOb( P]Gp\&|īyd7 7̮ID{tnϾg4eF7\XQ2o&Ћл;#)*<61UMI= vDWE_@)$&"qcx/!'YsE6p81OU"ݨKCc ]c 硚0|㳉y?CEa +_GtL 2y5eLzB*5%Azʻ%L.o|2vY} '!ozIq.0TY9j")Wº]Ū#rmiQD<;\4E_zkT\W|8 R^_G~@Gב]榍9NmUB61ܺU Է PD geVX/6[FHW]v,~%=E͝`r$O$mUuȭ5ezyz09䵍cʯMΝOwԫglxz54NZ @-tzlMW FjR+f*$ ,>b*8 JCKTBvӼ:J]XeZ53 tc/ }[H:=WZ~zhHL~ %ɑ4h^uyQ'b0iÚm2ʯ?!E'Rۧ}_P;pp^b*I[[.`BVyPt'lLPvT(0jೀ35+YG>7#~)u1UY >VT# |Ž % O_Q䍙kLP| IrsKa*7,r|#4Nwヒ[5ći3D%!7B6Ke)Ӡ"T:i,"AǙ#ZYU+OMkr\XH~(åt@ѕCT>}#v:Bj րN,C_?4'e،^kx1|d@%_UEgKJu z9~Vm@k|Lkc5V b+,!)!gQm{Xֽ5u.旛(rp"8V(C3k?|;ᔿZC#;$?gT[Z BO2 :*w}C͟3D]!ÉMIT"捼dKk>X :ÿw9h75B@޼W9 sCd\Ӵ$% 2mB` ty.\x*I2p<,uvO[,SzCZqATv(M~}z\꬯&X*"=?r֚*P|9IҁhpwMAލX  oM{x Kd"N\3³I c,@>>sSQ_Lwg-Mu%Ô2d#sPE0$BowJ ;>O6Ѓ,+h0Wd .( "lzBo_(~٘;MB 7 }a 4xX  c/:X+5(.=;zk#GVkv9:|ptߒ^y# xk\?*1Ik)Ӣᑡu3l#AF)mKH\GT&]MQ8e8gKTB{Пy1z\NUͭS KY6I=̌2 [&].607SVq,h im;P%q5]tU ׌]S# %kn=^U_9uAS湡k23 L9i[փ0R|8"i9 peVcov698ad:V^-oA5(֬zvwH((GŻFUd_gq \t0v(*ݔft$))L2v&5Hf-^p&txǫ;:+/y~?g/7q?x{KIMz ֊"yJ۵Ci5i6T24sw@^<Nz9lŒÂX{7é{> {9I]9JGi}2@V/IK(B}4u#lxlry.k<3Z*'LHS/}0-Mȇ-ED:kƀ(X;126QT( ] V]Yfk-lv%w*;%:[5Lwn1LUJш;I 37*ZҦLqS7!)I^h : 2 aH׊uGE </ҿ `/G3 J!}|@NAOq;W˾A]5@d$vnlqj{kZGqu{/[ᵗts)MEtw[$czJPan3zҳ,tva:3yN%}"lR31BtgMˣԲ!~ SЫCʊ!Q4Z+^96xaY{)SnJK !͛Gٰo=,]ؤ4m]Q#q =j?.Tm07=("](pɿI//dʀ_^ c6?H^6T2*`uY TP` urTz v*Z{ip瘃b.Ԡ ?3)6.}:γ.›e4\+CGy}9nx UWb>^a;3W D5V=ĦiB.Ay-.p w$7z0^Z2"ݍFqK=@e~0_`V[K\<aZܝAn/MlՔ`[5ts_kA1.e< `$˯BN.TEm]/5/y8Ã~{7ròSfPU1'O#L{0Cճ[CvʣH֫o3:ǭ/KerhߎiڡD(5{zϫM8vDžu|b#@E5lRFz4/ * }>pM&wf'W  Tݰ4(M]V]p 9]uD?=|׼'!Fȟah[ *l_D2{? Ҩ2p2|XcvR_uI^):!&EP0ؤ]L6Qb]D*ETϭ\tYwB}36V7qHUhS_D)AIQv捽VziL![ŃY܄WkسB/zڊaK*떂-QinT'J}Tp?<~غ.Ecb7ZtMYRyJoD=LnBFTn2(VC1y O,\ӍҤ׀`v0G7U#kOfa/oNN.̓V2=|WS$$WЫDAx]ϵH @޸x5Hx2uX7CGxyflw%e #?6eTjv/mRpqqA\yδ;>U)SK)BS|r'b~m#͊$C >xCcU0 z\$&<3SY}<OdQnGYޛ~U D5$a|d%)~< \ZyR^} GAHNhLItÖp RABC{5q?v.bX< E~4!̎yq={\+Z53 p~ b&c~ӄbY t࿝-ŬA yPӊ PH~LR1<%\w4" UhOQJ?P *^vd #j†l{ǝG$}2vsf~Av I}r)$,$hST0c]Jf xƋ8ܼf{$Gֹ8}4 n^'i|UE7{o&jM`dH/Vocg~DYo.J6)e@H敼3*FPyHB%c?l,8 80=b:Ŵ`z}Y_IiORbp.8jO9|Wh@</Y=nJݎ+BJ/^:ϡIvc-M-Տ[oW%ƖOE;O N4_^|\ >:5Ю1CĎ( ]q~XɈ# ["B~lgNSG€)5cݎ]`srjDEg@ŷϣU]|IO7au Q5/mN%ܸ~GP/x[be1:=t9*]_1+Uh;w *\L11E0%VJrInPp~ ido%==N$xdLjlq|Ս/{6;c~= T0#J8BȌZL dmL6ckVNo@eDQLCĜq 8+W5~R-Bh>Ks=5Dj#S%;C@/5|m}Lqk.y=u‡33Dtԧu)02,NӹR4.\-ÞQ1=ӛ1PmI`(Yk|Yki]/EGkKyTȼV塬HxWG.K̀rEÃ{"qJWP *كfLtZ:9ܧuCȌ%ixQr<;Z톷BKj_%wr[ֵQ.`~!㟿fڬS]:L~EULǶdk,2J*~-of4c`GqNh\}Jp%Zޟcj#cl/}i\A/rNN]Fxy/՚q)|qEA5L|t5'`ԍ=^߰q HAHyT`Md5eEonE@\|WpS͸KCx>8J#NS gj9͌ o{Q;l{f֫"AKusp#br0ނK.bl/NT:=ϲ];םrjD^~}ӱ-02nu]%t ەOljq8veZ5wZeos(>'w۩}N)o$U5Gd1\:R!$ q[}/l=cT)b?k97ہ|g7>@128йI?K"L3^ʳ5)߂S=7F˛9Al2JR-'j.FG&( !)yJpYTt, M/Xgtr|LЦ+b2 G* 944BnŏwhH]J,`Aāeo]91O 6K>=KJ0y 9,欗)yxi2`o6b Tw#8ŭ |Wc-8˥cbީN %0Q' ǡ0㮱[ːOڛ't9 ʳeT:)sQK(oH.#m7Y ,6 #:L[ЕXUusRtɠO2/'ڮ\^7%#6P> <( y)jA 6 -#ؒ2M'}|0*:XvUHki'YZ'ؤ>3c58IJ5'Jz͹NW'0:ua>^yֶcYY8|Z2X *罒E wd6Pq8D6~2Bw'ݹ&GaP;=Q =="XAB~Q# C㽢K֓g Q isE~ߊCQa&sfe' .yf<_y"y~TIX)C!x03qUZ%u{ BhYj >?+U0/^˅%$[Ժd 3 w)8EΈx;LLs 4+OD]乵vٶmz>৺nyK7Qo3m߄r5%Ȳ!Qn}E_0aP{"23TKE= 4rWaڽx;KD+6~Fy/r9bun?n)I Jm̑`lf'eΪ ̃f؄E XREѯIoo"S]ě;C=[ 2y5aaJ3O<}7w:HM;5OOxjhգۣ?o8LĀ6Fd`&(KUZ ݹaaHh`)}fd w9ƢL F/N 6$q) 5\uzKG'Jл PǿF8JJWޚ^2FlYlܵ6T`XWgFri`xS$4Ttcsuc_?Ytzs_ ,L46!&YhHTMRZCYڤw+35=]g€ل\7=~V0"r;t,EIq\?V}˒ Wަyj8YU KG|"A{rz4;Buj5Gsb߅?E>bU^Erp9Rzǫ\}wI6ZvsPfب=?տZ4Je@R<Ԛ,nR>C&`%xi lp}./k#m0/!< )A=AQ"_Y+{oO`OpBioµ_٭T>$Z}Yg|̨B;of&잕dWM ,_F=HYʋB>v)Di+,-H}k>{k4'rpZg$,26^ek!xNsNI!ЅLҝa?gSk8X /Ra;AQ/ K5||o 뙇SqYjFjZJ>]`}1FγC7lAcv$e0yeV}ޘ~tBVUѨ!ytհPs<Վk ?&Rlet(s>W.^y-FTIΓXSfŏꪥ-H, 96'㑤2y>:_R-{:<06"B!3DYBuPOp."?d|w1JBĎdڪaf)y $33z3큨a"vqND R'A(Eo +2*Xd ?0EՖZ#3\E}'S?pUOڃ~-)0mĨ/SD͆JmM:ie-SkەSBbqKgAsrjk騑be>ГDÃAӒ2av a\pw{4 x5Bu$)דHy u! ASo/Oq|u]$c&&[%6((H|"<,es.k2vD#n 'Z|$ 9â)8t,he26kJNP&O.~:CG>~Gdy5Hob,b~_}#Nk3>SBvSq+M(uڦb5b0fj&8U;rX%I_ڝ*R G˲W%x{J4X# T7!kAL!S].C'ş>e qD}c5[ b>M4]kP!le# b]-f1",4 -V|,D&Y3 &)H"B9UbLCC֦\K]6.םHWm+(b udӆ?ևq^8So endstream endobj 240 0 obj << /Length1 1656 /Length2 4016 /Length3 0 /Length 5037 /Filter /FlateDecode >> stream xڍt 8kؾDNl *̌};o} ~ffkB)*يdYRzJBR5kKh99f~~^3h+FH"ʀBepijRvC"6 m:H hJF>X!  p8 +&HʀDR!C? t %%&CQH<`x`p($8C@RzP(DeJJ!qd)q R<K CŠ3$k4)?gn*,<CՁ3&9I6I~BWv"#BpD$Ļn HQ(&"d=HW:GH@O@'5EnNC?f]7rh1>D5M?6w 22<`NĶ>Cp @c`A7 HFb oA 4wnƸ'~=.?ϑ04CqŰV&f'SKJ"IiY@NZW4O!ލ(l~J_qw.3]@rp Ʒ2oGz>XOG@/]>蛀/,bР^C xw? @? 4HAyOaA<4 n,$\(/AK CߝWţ%$+IZNDз!b&'P!}`@l_Cn~"E 0P; =vT`?Aό ;4#e.ŽVڤ^#(; }F [:vD{~lN~AA>tP*eOJ5Ҳ/Xώ~V]_Ɋlx?>9#i0(%FЇGO\G%96f&>v.2x*TF 㝩SUūE,bR1^a9(cDfjm͎u"EֹxgF?HSiӧ'y]ځXka'קY-V E KSYY*Dp>.kqIi'$ukYQ>Gָkh[ vۺ]L0"לe'X4uc99FOFQ#Hah%/./ 7 7z.6,v53/fwt6CEU~GZgE i]a:$T+ΪK,O|6 i%$[T-$,u/8xVUzBgp!ʹ*~h〾I6|y g6z>>xl4M;P=[Єb#mm _Tۑ^6Do;Ϝ}fNyp5; q4}'J\5&>'um=U*)b8KZv+{oH7*:̀~eۏ:ߢ>ՙ.Nِ}XxMҕC}ƒ*CLBi|U gW#O⩡Vg o?5*ڭHg+jJz0]"9Dϻ9iy( @^57OJ UrG'֛F:{>,|Wui5n&rMj%Uj=ݔM$s} kV;N է5L̩>}UE LiX7YW^&fٿM#2@I']C_3\N\0%7Q3{|1rt~ e99T`=3-Wec0Hè/]Ed~!K,&@l5y2Fhtl J7{[Y-H.+ Z+mMql6^LO'(i+ܲNx@Ӟ̥lž|'ztSfba*|(K^Y7ZW{] h"OЧ JI~/G|{^9SXcwl}b̸ↆV|I?#){ZZy/LS͙ק µCV \yc&2.tysc>;۾^9ۿҒ˂L뉅/k[P1Nu4 %: S킷|19=SRmZQE<&swY+<ϰy~/(675.WEӌu%3Z]ϨzWn.k`/(U9U$dj{!x`.Č̆淈-d{^[ޅ`JmL m{B֫S,R`*Ź(Nk58& k=ijM4dxyr'4VCƐc7~>K̦gn-g'}5afwH^[,Ѳ[{g\!n,}wmsCS-} Eh*d҉" l_>{z-ʵ\Z]]} .h^A,q>(G q&cDj|IvV>35Qkv\˳SfjNeOfQ1ċbtѴɏo d%'E]b -y]4$ͿXp9,E3dC5՟4_[VglvYlzJR=~i^gcid"5|؀<vg:<W*9`Vo,e=7?<A^S"*Y;_inyV-~VUR˜Vl^5KgX$JՋgus.Or,t,Gfn%D~7[_BE5,Lbe+ȫ8 VU-Sh(: DGCXv躜`4()W_PR0r:(v{;]t13_= 5=O2ɍt/A-)F(wG<_y&rǟbP99TqȠZDS9+f,N8_e˕bdōLVPpų\޽N9e^P](r-3\_,I_'[yX)I$r @˟g)X;.FxHb|YFۡ+Ӛ #BiYo|+<̈i<$o;xQe'k2"b>z5aozMgܮa]ίW[ᐾxj6tQ׋`t~">|O53Kjf;D/C%߅Deΰ?wù~ry D(JbׂK*=nm. ~fsy> ,c\#DqvI)ʘ+rFюy :cm4If"YByg*:' G666V9T;5TE T_v~p9NSCG[m)/2ӂ:FkY2׸F G-،Z,ް_p pႃrfUH[zs:Kɖ{ЯvO٭JRUhمkURbb.7Nq}1x 챺sb&xnO?׼`WxTfR䃕0fZO`@fyL;ODC:{T pzs8xRmؠQ~4KV)FZ؀N]Bco2wlPx`bB$&| Ik9S*x'إMbMӘD^c9ZJSTa:5Y]oK?ͪ8ˡF| zf-uIkUp$jʧ.kI./UgJzw|oӺ lpp]܍'ԈN4Xi׎"Z=Y ,(+q)Zbn$gb0MjxGq̮n T~)Zޛib'1=-Z#CYU# {ۓzu,=_F9m3HʚY4hЪGW6-, f +-GoIzt Es>i^tO%Yo[޺"'k9ëX*JiY8z[c yn hYɟ~=M akOؓ.lKUѝ;Ð>\y2HײxK@aMx6 k{T0&ѕ q n4y ?gx'ɩq~ 8'L}k12i\3B0GBυN-kT:xLAVe:W^̅IxT%g9unV!YA~[ۛb:IaΌZeHeכKr{ endstream endobj 242 0 obj << /Length1 2257 /Length2 8766 /Length3 0 /Length 10089 /Filter /FlateDecode >> stream xڍu4-{dkoŵQu5vHFdFfJʞQV!;+w~sxs|\&bj({6 K(4 -,R||+o1)MB*aA0X&3D!׽\ )HF$ !! Єx#($̓OF8:ai/@*ˊPsP`8ܰW9 aBP qW}||!n((qL8r@Ori4?s|Gm|ºBpo=F! ]Xb]Tu Uݲ+\ߘ0-ʤE.^!*Tj8(sd׌T+vk|Xa`S~!=uœ4&#7+㻵>x ]̟w). RG{5{f*%uft0`&}$ލԞЪ:+Z' }G!DνĿwh%{Dϵ9`F[ϠMtB(N' P=ꄐjuS230jXU>{y@ʰ.׸{sY<᪫E!&=Oytd[zv9h:i <^ <DG83GvP)^򊎹\@AM<>[44WONÍ9,{pJt0<'[Ngn_V`p slmm M3WVZ Y~Lim\ޣ۵ G:v+y#?ȼhebH$-Px֣ѕ1_TՀI ے?ٝZ~`^U9r{aC4 !^TK:Z]a1ժљʙTw5gXD둛;UCۥ]tъa/xCh=WcWsj].KOm^,Ip_l#@D|P2+ Qȶ! fz=xov:Tv7+WJ`@v4kgNQG#t(™p XV㩘e0mwl8RWvI3FR 5s n@4V1(̖-kdQ(az N#R"Ki1IVM5(6vqO-x%'6#*v)AFeu@bZ_^:nث99.NUq߈g-σt?x &a3~iqmV'>gZr”LM.̃%+e~uLt%;duu-m{UG~Rۢ tNJY`f^.QEs,kRmQT +bm._>KSr_I(( .S/K,y@?~w=>d>啫r;TG.hW=t $P!f`DQae(x5mʊj2)58u[oS a4JS޾"ϟiRsl]p'fzmƒvrt*"(2xvx [zr'-86( mtX.c2?ߒ&Sھ % ]|-sf eT:J"x`|>|r~}wV.}$w--#eKȌzP:MUZ!c͑;nAqwFX,]CBk;%HuQR Ika!L՝"N8nbu*N5-O, efvʯU+{ѽj_aw=7({%"Yz>$-+g~a;~!\rŇ!-ck㸒zytYK$?fH2 ;jQKsF5.ۤFVdTEff5&x{ְ*7NU%vW- {&5VDsl .;wB/>l:BW3y@,kĝfkq"T6f xwyfŝELyEVi!Ci_yW@MROW*ʖ?D7zݫhL]+Dž4Ko{ DVExB||0zK%5D.2 -qR4fS-TРjL# 4Jd)e;w|Ssh\NhKx7/߫=JecQǹTIoDcMܫ4=}9#J,7g{sbHAnzSgN!?.n PwַTpDsυ"l){ PK?b{d[\jM41x"pN*KHq;^q Ka?7NO3iq)\R$謣nnH9VpUp>K<ڂ`ê4c#yƍNaGk݄>'Tm e}iOf\` qQ~ [m]/d2QbOjy4b Q@")a~a1 ;}=G)~QӚ>OnU2TQ_ͽҊ= ^~s7؄}СjJ4Zܭ!O?37}xS.Z明z~cr̜&K]VyXhsz䑛^[A3Y;Ɯ=*]Uܙ'dZRkK^׃.[8=]8KT_ǍdZlc;ے.JT^27Z ̽#:d?tj3ɏ]m 9y?tH Ajfw'Tvu $T`pqID0*z~S5`K}58"#һ͗F|"^׌}֍LJG?Z6ګQ?fK:wWo G(pNςFC Ki*odOvϽY֬76o.8MߋR# _u1fe0HEZ3P룸r<] W&Lh+oɠ*ZKGggY曞̟Ҩp,gI2ʮȋkwoe(.Hj7;;hlx!A)w/Wϋ4sϝMX8FW[xkm S}*>J[g<~+|[,\l{'exP񖏬/=)9%8hC6o9_B1'.2L:w*KGUE?!K=?=WSǣa:.xWՆhZrk|~_"SoSWoxcϤ\ŀub^UCKwELQwq=޽q 0Q1%ecl *ц5E>~Z>ͣsJ^Q05 'y\^Eu>U3%%L=gVZv:aHn{/._&B);Ff_ܙ9IZSa Tsظ>wY섷'CpvAﵢкs3w*棛bC4%>b d9<1RI`| b8Rz<2ok:,5 R"\dsr8)SR8",.CM"G]j2Y|AU[^8BOvs.n(RʰaܪG|rK8Tb* 1+6 ^J G}`TZzεmL8rPBn:sKdA@# =+dP}H cKrPTB; e\z:>q`%1^% 3[-QT[-)ywnw%Oϡ?\_V1A/yCMZR>:9y&\j0 tL0kd\4 opU=]ooZ1o:eHϛ~j\VDyz84٪yW I/c gA:.V\ -ԴG&^ ey&>|)k2Eu<{i'd%$LPS.܍VZl*=MgkLR=N/krL%BtatOa#1)"T"{a.8)Y G^ WJDviH Vl>ʍn;{Sf?xϟ0nT齅(`m;aM.KKf;Uʗ6rm*$h߳9]KO%/g]<Tpl:Vx7ax'[Aʜ\͆kK/vֆ֔# +)q\.}wl!T2LLQx.~Ʊ=*m8K^xp^YtS#_./n#JiAIq0K5;NvY5!k$slَL|fbEC!!<JFN߻*)\NMY>H*U}b_:惪i9R>ONlXDMK7 DoH\+n0~&.qn?Wk<捦*]\ȋ{c~:]*Co=}/0Sd]uqB"]E#%J۽O&ef1z x-Zqk8f-^> stream xڌP\i$ !8ݝhܝ܂KpKp ?|VST5,_ϻֻ{) ZĬh2JJf:&$22%S ?b$2v X&tX[$-F6.Fv.ZqDN:L( rZL V hP609'% =3ҞΘ9 -AwFDP21[hm  S=d'(JH>ـ6ntW S֖6@+WS+cILhehao :M-`*@pgo`gj`OgojE_a,Z [[Z~'bj2Jɚ[Y;[L ~5ahClej,B-39X8 [Wx%W_ʿܻoήFj"N/b뀖6uk705503pW`1xL&@s{ Y~[ַ,@FYFe[lr='qso/bh`m;a%ЯM 3Ck ?kkO2=?I~mÿQ `~G[:ϴ`Iz_nП&v~&dXfo&XZz0t6 |-&RulGI 1bd7j[ a`gaGguSdֿϘL$fdo X~G`wa4ﴱ9q 翥+a|3Ǡqp>D? 2? w8p Sb7pד|W2@Z6bV 3(َj"ۂ]=|Uyݍ`@'("ѓۏjG(&qޱU=oivݟlU|̡ $2m9䲱o?T- I!?M҆+i|&O%s%D:sA{!A8 gsXgRdߎGK}5E{@:q̚YadF€DC _װҕm7{4; yҌm}MM\rhkȗ3+J[zytCֺ=Ibô$텣Bh⮥6AL22/c2*Ϛ4HO VQ#RAxC&)αۛżڻĨ oM8$7D,*<|IܩS;7-C1y$溡S Sof'{.P#\ TdLI_M.6fM2NH w,BeAyш>GX67{fNm.K -RC DWmۇՊ0ңj- _s:5t.{ۛ4ҜG\SJ51OiF<7v!7~g =ZPMlvμ{l=F(,Ub-3ҶD m7ؑgELBwzBrT9`sHbLJ>!כּ)ިδ+< kSPj?Jmc䙼8^E\i}vA^7GW g$mF6LkNESfΞ WxKi;SCbKZ#XBE\{I_\lg7G)P(7Cإҟ|6rv_ǥՕz2YLDO)>Ň}&~ﴢؼKҥ,:q\zD{B n pS` ~J$"+b Uſr5 @-?SiN̂As5onhu̢!75O_-!G| f.E}#R؁}h@RQ?Z.)[0 椦)))vWe2饌MYM~͖ld\ qf{^Ay9I#G S-{hgn$?ɲ12  FWHk; Zү3Q h-N5#{2*Iv;8RK_ ;ZYn-x͛n};SfB |PChٻZtU$5{#,%~g#+_e*?3Kg670+`t/)P`$xCZznZƖ{__g4[W7'Q]$qD~*3ͶTR.qh-U.y~@[-X ?hkjYYN!,!w=݀-m 2mH\ȟߝv{`I'dwLpӸ Ҏ' ?sq2 j]Kd_v?.x@D{ 껬)ii9!R WHbi7ӭ=G6Q|22P0L0hܻ+cYfZ^5}y:iC!F݁ӏm1/BtDZ>14?|ssO8NdwS|V-¿䘗Is#KQ.NHwM hgweZN},7`waxSt5ru+K~:,2Z> K\|s;m$"8k?%w^7n!N [ZCdx wnϽ޹E PdYS ]I%. *H8%8V5k[?MJt"Yc~-s4LџxH()F'1WA$=-Mʗ^3Cޕ>3eF[8~~oc/LH!{BDڞ CbˎU-Y&⎐01ۓ)ǼS?f23ОܸiU}+߀V?5nBOi,wRrr}|h8uM//];-ye2yH׽Z?Mֳs *R!VLY QC^;,BeY`.*XY`dPvQIN}MJ** YB±m* eq ޤ\n!]zee=v:2v|eI';K/Q҈u*bLxooxQ[ݾH=-EQj8[4ݱy|^i5zZjo'ezpˉbGGThQk'UgxeRۈ\b5_*Lqj&$}dZNt(doթEŦ%a4*hJ'. 6ٙڜ _؁{T }ƅwhZ\q N+m ZΜٞLrOlX/1g[vDhd*XG0^ 3G6ƽ]>x|s 8;YLJ]];)4L' RrT9:u> } \E&Es#x1/H{ހ@h:O~mOiCv4F4b'LD_(,ҢOm15ܸZg:ŒG0<55rUFz nsS#3b%}3&UQ *ss` < q,BJ T5q҅E]\&C6+i}gк&}nN%X>xtL&S~;[СKEAw3&ާN b@xT"֙t >fz t2B҂;l2S:\L\6XJ'G(gs䀲=kP?y(j7NӬ-/{ ʫJ2uу/=?AxT!47,kA{[4M"r5 ڦRvb Sa6gnc #kQFn~1{up|'*R"J0[v=g'ϹZT>؇N5mBvtTq7Yq.oɗN03'SZl@% ٝp4O+7ML!MNu,tŖçumβNiX"^vzb~Halʛu)?H[v7:s FF4t5ꁫVRB-A٘İ;ΚjR@:i߯U؞Rf;*B''1QmyM/a>^#Nw0wꚔ3R SȘG,Pom"cOn47TԸE#EȮ]:Yߥǂ ŭ M@]+h)2cW}q3g4%?>eX:Mh; >s-bXWidž`}?^W^xC!'ר(dC!t&nJfzݲ@cz1' 9H铕^ۜ ڐ#AK{N~d]K+q-A9LF<`iv<~؉հRRXpzJ0ǡ>ly{iiynmQ(ݾSE7t aMs{A Z;;UK/Qp 6yx `ɴQ V4Ի$*tau=nȄ2V@)kiŦٙw7&r&"g QI_/vC5#\*r<%|AR4&m&t3@oD:K>й@L" }/_F7hZM} ?1v b6ʺF> 5ξ0=d];*]謘h`Dq>UUߊuDA|Z9cʇh"2ݯ_G䒰8-7u.:yw5i]" < JrvZkVlj5վE8בzRBM`ƈ{(uXTfZ6iOTif%es.!jjg mزi>VH.\4k0Q̾n 53>ALTK\gqSIp7T&Э4gz1n[# -RLc/@,CKǑlvzt76Co:\[m9a3jrxsA,soI4?(T5 0c[KaR|r䧔n:9os܏+) wێFŽcm$)KNrZy'xZTf0}R*E}I8PQVlSㆇi[(Ꝫo׶|6g]TcKNҭ36FFq[xp~+L1(Ǻ- "R; =]H.y7cEVl0 >Nnn D_i7qȊ%sxDrD8x~<gţ]8p޵a.:u5:"rmJ~S)LeNL!?`6N3'4r06̲޵cRSٵ]ВESm\-g<WINywX^2uf.Vҽ/3zS{6SqH~WAL0i-됒t-(mJK`6 aQK:tʗ3/)Kޤ [9Ĉ\Zv2,Wad@νExNP6*}`͹-=)HsH%c-XS>5 5"QKXKY0FLjњF 2 a'<+R*,qIw?7oKWcd7㔊g^B;QPyC(&mU>_f<e17cN@Y1Y0FsC Gu\#lIwI#̈́| ϿiAKZN8 teq4lAB ~v" 'ܼ;cJWȬSq%O~oU[{>~׷ȕ U`]].AfT(Dk#訊7Ds.PߛG bFJZuNf4Zl]!|/ #L|%q (*\WLγKsV3 B@p*@lXPv0pBڔ`*͵:!KSNd|\V&|Vrywk+ N1uhZm'zQ WQo[<,ݛMjDG+I$jއGk` 8@_@yZTt)_6B6#鈙u?:`S2,. 8Y*@5O A՝mA;}@6,CIpZ '@%7ZI6GpdL[x潽l.ks^U>4 14p;E֜u8d+bΩԪ#^D+mz1ll kSʱSKJ >F^E͐ L܃knGqX˨fm2ܚ Ω=g%"x?-  oOyQ]bgu7&g;W^td5цf9dn耯ehl~z[ W7U[XCJ8 |(p&ʙr]"٫ؽ٦WkU^m4K$zuBGy,Qq&z+ !tcyDotpqZ0Ty 1U';zGJ;VBvL![q*8=4^4Ğ1]&C-#f|_`o :lj gV}R FPeOW`Qf,5B;;JRى+O|,궲7da,2'9KH62@SnC7D*;e;[k5nC _GZL/[ONbwz ljYB]c83i}ss~p(O!_zs_>ޤ&(&IK˂2GҹV?ߩXzqO;A6dx궈0 wr '98="kϭ4;9ؐvw%m"Iw!w@'v3HK$3\T|XH5 H.~ڐ= HS҂:WJmPLk3CˬD!9T fQg+8Y(J"Zxs#t&x4<8nV[dB+~`&$]xY QJR\a팷k9G+%gz?zLj "MoWy9SS6\J_򰃷0WSjGg 4ʠou|n GJC|" U:߆EdyG`̰y;;LЋ`[Lx25<ڵ+q쑷MK$(- R 1PLPc!l\5VƝx}__?:}nNAޯ^M[[G tA&7W՞LfQ98|V u<'Ogy=%Wh-IizurA ր{՚ q:1=y'ba1/&b#ݯ, f6 Q% _@4 iE" uRneU_73Ul[E!sԀ6;N,W j-x~.[à)}]i$zwMԃc^;xIGwm?>Cgٔ|,*`@:zE!QAѥT2՛`9W66:gZ mnԇƒPn"]|; @3:/|]2yAi/s#YOm 6GÜGFc7S.E̽QȪsv!tri'Ay%e~?@@OʢuќxãC*2"8Cq+t5WtO|ŁW1k]^5`YIr]Vir,pHuwj=E؁(:Y+{}{pVͱglQ#$iwG\hUs. l. Z4qtIڍwrj욢̷V9Gf?YJNK|2XD|*q2`^RYNͅ6l;%AI6PğQmmnY8 '-VqB$sa}nf8C9D:dAtLeUeu.Ajd52^I8hR щ/8MG^7$˝yxFwǔh2)nomV϶S++;)bץȲN(k.!E\ִp|Վ] -vS&΢R%Jxz|)PP}!Tl)$)FhD9O~˯ar*Q)=h+ѽKe .Q$7nߕ3"TWGU'rt/I>ܧ==xKh^$v > {͎of\ykst "9㾿Q frV~fƿp!߸u=(94ܷmMiN]o.U~l Sy`+zD.&qSBRԷKjyoy\!x4Lt,/k゚dP 1!"mLPjiٔ>0E0E. 󈥲U˸/Lܐ* (/bOMUDfqLBP1ЛSpb zgR? -̛i|# ̐9K aZ/7f"qTO2ǎHuc"-Ld6)V5Pb%^B1WjJ[CїS6PDZ?>zXܞ(p/DڮW }R_ 5\GMu?ZCO59BI"qw&(QQuݧ̣ouL8/ْ+:4ȡ}|7tuW-8AO bg_?Mg&8'┘.jP񢢹ċ(6׻06x9VW#Ji%60#7oc+b3^XP}|(;+?zq?,Cx|#\ iK/zڵ4>h4%A ʻN/C}3e3w|`UǬ>Gt|?ѝ CqaO002(ѓ<\i-Dg:]Gt@VZx1 3R55CI M'*Z}Y3kVA L=}kp?z 2LG3 u9w-(Lqkу; `@s!= ojJQ[Ԗ6sJ賤^}Zb87x狵e/osGg'[hڰza(}=Yn3S ~VNnm8tW,-#Bʫ\K}ή҄=_w[ W%@!;_,z(Hy3or[أXy(=rly]w /BUugEWݎ"ljQJ HlîZ>J03j"iC3TpȌ.5aHhaa!P3-K?_]3>dɇ+lk;?JTF . Fn14\&_" m`6(4i\?eiɥPZXUVsiQD vhϬ;M9EIwꑓS֫s5 ?|:[57Zh|ɂ4*8kyȱaCH(ۺ~WvF3/iQVvSWue9#\.Bsv4mMgΞ#ݙcܱMyDFΏ,|E~SG+BzVsLXXD&%&Sly:Z#Ȃ[D&NS j>Z=GQTEP#ZKhַ1/+aΜ-G+(gW2"&P3v[deVR4g C$r|(ߍfH=0|\<|ߥr]H;ъF{^3B]>8u vvDzLhTx>\oAG9.=@/qdئq_ŘztAGjdIfsĪEkf̄Cˠo_x;%}G7q b?42NۈͿk!P0uA,g)k~҇R jډ˻+,]}^N*"nէ6WaKU&t۴s%1n"5NQt) B[0GgERXN F^< WRwky1g=-SWJ^/2l1]5WX .]Bcb%{:FVxd)r$RG/6#&lmTËUͦ5`i֒]?)/f`u.+ZOP67;8~}kX,Ž!tԙS q,״s|qb>Ŏf:񢺝oˈ*13-C2q_i\T|͈I[p=𷔧_ B vjߣJ-TbEq:5Dk 5cK)@·#(zز֒ܤYa$?Vև;sv"Â$M2h ]X^nkXS4" %' 958}j.U]OvH#]&2[?~|Ek7|]0"lM &MƘ{XF T!EJG<B6ܜoɟ ,8˵C/CuQ51xί:~ JkLWVV)_0(ԜeO$~M(" :'29S.`Ժwe`!S *1&&>GT2Sn?MAF׺7GܺGlEuL)eJxX" 9b QZQhs0Or3Ð2^;z\Pk%bMyl|k-ǠZ8Rg[M)&5?vWrxMbќ!q1C嫩+ƣHvg?A]'@(C`yd;^ cgg [+ N-0y*a)^*I:NPSV q]4ʂle* |``A,QEQۓ!GHs'8M(3ӄ%E3.x. c:vOtt/zDl" >B# ҭ1jcXƒow\M/YcˍĚMJP]gwmns,&Ģkmkv=Tq)~37)ٛ Qo4X( :=B#Il%`Iƕc?*uVѱxEZ2e#{Æ.X Mov&/9_Ut%AvЧj;5zI^BYSJRv1RD1:OGġYMH=K ( ZFa0Sf`k|.n8|xk YBc`"YPyC&&r/+nn'/d7 ̽clL%לJ =G {`m6Kq7x`wP *} q[p?z'(x|_[z\ >66)Ug ߰B li`1L>Xxs iWG85Sݤ=X!Y[G$֪O]\'쐪&{Dۚin=ht&M0>)Pa#tpdGV=*r1{ͺkpڡ8"l)9-<'ق GRoj9@ 悱z}O(cSP:ayS,IK(Lh}1a135|"{67k"}z_}[M)ӈ=2LF|/ދ[$|14^#{ +7(MkCJ`kkn4z!X1 )]v@&,(rK]&U9V4}H+q]X{^2 9C(`fGON96,$̧zbroŁtaD+öG/5Y>z-}E\wEmYbj ZX>e҅ɡkϯ3Zu)G$l͏FEVءym˳ӆHR~j_H5l[[4N>O;ɳ5ioC-Y#$*LVA\61W-g0QXȦGKL%uZe1MM:w@җdvG6`%Q|wiN;FƇCv^׍cVr[5g G*EL/״zBRf6S LxRiJ(ZL^9~5-}?_e.s|EiYUN(p5:cv4LlP- gNF>h7Jz @mR% ֌M;Л`Ó4K)NC#H)dfܐ@[;J[{7H:_K}?JCޕ9W%FR=R ۩换 i<~nw slm%E?Oh)^fRHݥasZ:]q>P`iCP&A楳p^W C< ~ 2zˇdrtm1~ sKMR! T}d; ިyjDFU8>.$L|#-&&;zX/r=V2h(ݸߵK/-nOȚ8oE.Z;2V$,<8zTEED^*"v:.B_#awfz;(*76/&|džYh t%PGGo 4[.xmeҀc(캑!)@* CB]{Շ.f3 SJ׷f0КwTGs"" VD# P/Q+VD'CRCpUi޾ޖޫK=Q*IC)V *í]Oq핢s싇 %EÖ0Ԑ:0ShAUq :Қ6(f`s}†ou P:7 RTV 9&蟿~K}ɛ 7aOdbcb$-T4$^S!]7כ{/?xH`c3aͫ|Z LAVy{sl s^ n-4/ૃ?~~`Bae,6/ՇN4>ުst"Wu!ʨT3tNtXU}Ţ!Г*f\߅^JpD%hqXa5nt-Vz۩]?%#O `*AtFȿdngFz݀41MWB뭊(c"-6vF*4:6ho[Qk~?ҵJ#w뺽ǘ^cg3|{2˃E[?T1ff+ex뇴aE#DqE:ߥ4!U?,k5Ja8]k&tZId^U ߨx_t #KC(-~~.lትJzK#r~-I łQ)+u*ك֞%, ߼=sUF0=7(<1zyt dYJ}À@kApP#SRl>6tN.V"}t?溶'"-^kQv~];& XW'=nd ^+otCad~.Ks{mF D|RD&l4|֔v :>R LRqg6hGM!@Y =C"YS:7 f\y,٘?j]ԾDDgND΁ҳ(޿a;1Q:t%8ư[F^8v[-7 endstream endobj 246 0 obj << /Length1 721 /Length2 4672 /Length3 0 /Length 5264 /Filter /FlateDecode >> stream xmrg4ju :ѣ D%.E13 3ѣN"D'щ5DF^7]Zz>쳟˥A!0HDT`n `P<V2`pb 2^ `@D!c ȹ*➋`+\7"=`tBTʹ @F`N6NH@ CqA- p'0h8oM8?Ю,Z-A t4x5â>_//u'!p$ A!dM m<?wt-w p f?wrCQ t1p 0YP_z9 $N醀#VB- ]O?ڏcN;z?<50 ⯽bP? \""X7Oa#i|žc4׻9$ #d |r o Y {igKX /(lok} (V{"B-XOΞuZjuӘ'OM{$ަ,}'OίmE3;1|KyzI!TB3`eda0$3;6/3?=KqrytnEGu2rHtn%MbԈpsڧ BJ ;`e`FX(8WD"Q/]*\ұaRƨoV@~CM…bԙe3'3'>]}TJT!{QyŦr؞{ } 2%.Evpz#J, Jc9u}-*;\pf4ѫ&wϯ,3o;!@ LGl** 7$WWpYQ5Ϛ5# o9-ͰEq?sHf =R=]q'b."_{88  8ixxs=e26R>-MԜy$l$Hr*ReK\w:(_``M:ǦBԲmhR@NP >ѝU%' 13atLjgt4O ")<u@VoYA38IG 4_?)o~[u.ᅬpLw$,ttQ[ \6Qb})Ŏ72K@w>T8~5,N乁c-Tlv#$I2<-fJLZ摳lru^Pd<=.m1MMf+km(=[3/71,(m}!\.·ڔe=D{ωM^ E2 !w/3+H6= M4A'Z,Dƞi*s\F. ONޜՍ 6 ۹,W!#%Xfo߷90 )!Us*@>i}ޟ|Gv-z C-d9Du1N,tA po%ǞMݩvIeʾ&Ĵ6flVk;;v^-YlM.#&l^D3 KYOhlu9ZM:IQtf\jwwŶLaG|-;+qm@٧ N4 8$ZTcg3-KVn*?CmY;S^cyס8'"R\R.E(/^,j&Ny[뙧}x0Q;>vdJKo7f>!ʏs5hr\TesnX͈S)lY,W%!%?b:I9;D>b60*/꘤p&8y\/+5D 8ǒܚsϩRXKIHdݢxN m& V}ih6{͎Q z|yń'<3reh;Xy3E ="A`.jbZ_+2f%vI^ف7Ҥz3q|Po_-g畈 eWGߚ&PJ/$/32pDqDwu&:`O#4) =lp7X\~\m+r-]hQ"eG>xTh "#Ud5i\*!' xAE@}oU4gnş5Y,tl:/IZo8io'"v){gdXߟ;ٺE+u7{</&Uiѝ*v|0l (kN1S#k>w?{Y9Ay|'?8*Yf dW(jP ]~:e!=0iټ౱]PEf-|ѝ6%~R)'ryhz`v,z5bphѵ1[$1ʪ{Jb~Կ s;_<9|9t*ʝX|Jy~>M۩^L(ݡ ֣KHڪzԴDjt³ޘy&m=t9+r[lS3΄QDgy+3f^x_hiޠdd357hm Oڻ;=F!}7;\+9n"jqK5T灁?"(l ,A]Dn,,fhaP)Feɻ3o52i@{;H8dg%lo VUÜ{#gZ#K 2f}{UZIݴzEW1M;7I^_w󱛍^1cŐ=!m endstream endobj 248 0 obj << /Length1 725 /Length2 975 /Length3 0 /Length 1535 /Filter /FlateDecode >> stream xmR{4Tk_Hn|Ba̘1IiBB(f|8̜G{+Z-HIW$-%܃hݵ{}HAR,d3LXY,br-,(- !`,`;mxlFFRb5 RP,ǥx<* əܕI5@("P)e<_/`  b)*ިbq D$@c:)9,I p{. DPD$X$EhJ$DLm6 bbڶCyhGV[.dXrqYH``QHJ#EX$ekB"@A09t"7`-Z'eر9wl=o^9A@6e4>&D 8'GVn)QP2pwU |bOjR`Xc|oإOY1K u]nd:lVOuk,$=i}ǭs-[/vc5kjy o7AW5DvT[շln鱠Go}ߵ%{Иwĭ|н9;fzjUOn{K CgǹµNnќ5u1FI9mV]/qrKo8A鵽M~>E~;T9413LGc]ypx;aKWhV[{"<}U%D]ꟍ[=M4ѸE;;)rv>O\˚yb7ܞtj tv]TZ TUgNq@T3FKLUHx zn"uQefJ7L$|*cd4SE&n^]܉6{$OtEuƁiG{vK5'=]H9wzVkoY74y/sR+z@yO;]GVUN=lImsZU+&S џ6eu뭴 W'<|sF+CT,LvjAY] y ݓ[x'Nap E1lqj~1xp>^xq_hsZ@o2cJlh%>m}Ŝdb;ݖ'K"+XpY٪WfoYYXo2PdRpc0zG eLr2\s!`Ú^N]Qo2^XB+|hZb&urIt̢"CgE|ns\}O76ԮfF޶9Wv ͎ endstream endobj 250 0 obj << /Length1 725 /Length2 17177 /Length3 0 /Length 17743 /Filter /FlateDecode >> stream xlch]-Z]˶m۶m۶wٶm۶m}bI9ř"c:+{؛00s+*+s2A98[ 8p⫙+3033@ {8Z;Q;jm`lacሯjgmjadBKO > 5 #|#;[cqr7[WG:ˈ( *) KSn_Q;em?XutE olaohbfa E/$lMY6voBN'GC |c.ֲ6&Bv6.&2v&6p6G [OIX]LV3Ș[MUc;[k{?<: I)11El-lNXg𿾌;=F_-E ڹ{020p3033?t\Ml-?0Aq[URP0Nj!Z ]c=(c]J<4ęLNE`Ul(ׇހbɂF;oSN1g\H: 1Du"į->يQ!ehPU#̙ܒ`i_[ iiϳV; F Z Za [IumbXXb űL^ ];\s#֪/v876d%)ޗt8}7Q h}20|)8dn '[!4 y'iy3Ozyws;ᇈ<eۙت:tRa|QX)@M$>m+|$G&\R-Ν@ ʱk:s6ovR-QtuѮzV# C lo2"|UuN΅V/U!MT-\ k; 3(>JezW7'=~1M]|ܧ E{uGs~{7Vjn0;I<DO<7v'khrުhWH˒0 +@$L\yp? L$ctyFDD}S^)zp5ViP%gԈ+ѡ'McA8PL:[*S ߆϶J!b9 5رH &z<;óE4OrsX LbZRm,*U,$FֻQsbeH(*[R\ݯ!4EǯMkdC2d9?(I˿G$>Щ')–,YDH&!u81Zhml#/]׻ll@xla\W%D؇`p06Ɖk[e-~؁JP 2.&uYLYr9{SL@VjL]f*Q]z=0@Iih &:[~ !&&/I\n`L &vkH8K.Ӈ WW[14*X DpN&ķFet;J8 `6 J*TF~6'Qa]Ӛ>NKy)xI#EM`h9@|mS9&  ?F)^GŔ=/"8Frc,:}ٓ^F%iUUKiwxͧ4IhznLꄭ3 s~M7@#,vZI/?n |>,);xŜn Z}ہ0V 3e  kg\ }v7`' S,I,9t v-t5G~L\PLjV'jzF?5b?_w[iv7bFW+Gz0gOq-!yUJ/ f@aciHV4MZ VQ;{+T Ӛv"RөkXmeD1@D{.mJlYZ3 UTVr̄N7!JΥdnHKZY֢@; ymjPآxZy(͸ u&>oVt9dm*F:e<}]/kI -hZ\y̧lr,;1r}1&싂@qrtx8&(e=eR8g]E&(-lXҀw\oYs6Z^%_mvTP{v^%ʗzEGU"DBV}^Id4d1+Pa\r–25((*Td*Z)~@fHO) ِ8"YtTP*ʍVxLDە}d*3q5kf4llzv~5{ }eLvO 3 2Jin?jFї}qmpk/)ě`챼3Ƭ&״+8~6yhib 1.-酖GCU=T=q*js6}av-"ڋ=q#%Rb͙P0IvJ0I6cW2xsy>ʈK* oBAl`W Ud SH, mouݴ\ZQ-=j^_yWY8}فcS=WeWLPc.dhF|$R}EoIޮZ^Kk'@8(y"m>vUm ޒ?}Amoo7h" ƲKůMCx|bϐ.ѕQ D OKC ꆺ]5Λ1 =*C3+vU 61NwxaZx;{mF!$ɉ뛝6'8ii˧~jӆϊ_n6Z2AX]`P%;0ILպq̑F0A{D+9KaDMlL\$z1ǧ|jfc9>6m %juݨE82O9 }3PNoKݧPчLkW݆t;X^\qW'56;rebk$bnpC7q_?=I};Ɔ]w9V]#aʒI< /K>mlP S1glJ8Y:h2M$>K-K+G6}oV~UWkA;8D!%jV"Za-$[%;UnA( Ͻ }P$P%'5W_ETTGaX f DY! f $=l̴kORq%V7R&o1 ^;x'!vY$35rI`0@Uj(!G]yjMj6; +ƄVҀq_i?T$n} KY8=Dr5 y"- Q;щ<[pwy}ϜSR|XD Gt%638B keG\fi{HQwأ R wt]j5v^-+"CgMrjc|1CsK"0:ꎖ!S84-co8߈޳6)/.j%H{)yHLX(RvXryfާfCFw:3!OoO;CL9rDC]+ Z^lk)7FЭ<O+'IHWxR}G~ %XRV8nθ9Ń=ô?@%g&O"zX?~0B39t&r6:H Ps^"@a;&龁"CyPφn=7I`X{٬-QkRU" 89lfOa(P]m@YSu+[NTغ"%Vt~5i$Y\Q+n$ǑZ <'(H_-kzFsȅF4NpHL~n62wa~@E,3Q0b1'buc[vpç,1O_Rko}ᵤD2hnT,wY@2?# l|K]WXkF{AU,_Fi˰I&w,/M}3Ug8AHs6&Tbr I]Y%?ш8"ks5{wƚg/ ՔhxklJTS.(uĮ?#rı(2z`I8gl"[2ډ сS̐KZC [5I<~BQjSf\׳6Buwz_/:5Bs[\.%Y>4@gi ~_? Un:co#A!\0f,QfR BK\XD<s-&n{wCbck^⫬7Q@QM9 R>xW!fzZ{ɎC5.^N<>trY=2*%| =8*g!'H]'/8g1& c;^d^Mt T 55:l0 3i/ :^ Y,əmT!)aƴbJ 6Bƻ)>dfBT/̬i@@@\>|H\{ؐϔz ᩻Y=Qg+]]9*)*0ex\DO'f#EpLߥ+nǷSwL[.:lYжT\Ckg2G)-,2m 2ɪvWU<\8[dHVvbvv6've`Y#Grw0!BDCǍUR)">@)|c1y.%=тUz͘R8ݤ {'6Qy KqE-4!ڳsSȈbjp꺯m 04TPʋȐcٸ(O]_}u.wNUdݪ  Fõ2ITO@R*!+ԣOWMRpcR )L0%uAu7vW8B0OPoEyL]v0e y H mSk#pA>>&8|+.0f'D YD_Nt^bDm!xt =.n"u|B><+ E$V%H#y8)|ZL<"Cja85@nLOu7[>auO';Bd3?[ֈ4)HDxrP›+Ζ_>x-CG|mh_/-Pm͕QS=+gtyzw aƣM}}lŅPzO=h"@ nC(?2f~BV~T Ya/5筸POt){L+A8:l 7땡F#c+-?"ʕ$)f#StH@f҂M4zQJv}!'`@6Hu4`MB# W#4P>sƫ,[`15Z-jyMv~b0cO8[T&*D{/f'q9"Rʜ'Ր[ďxv7Nl;G׎ *E2EbGvw8֎R U%P\CJkw]D3Nq1$(6|qf35TƮP΂7r爿9uf_8xm76Tkv@{,1JaٱdACЊ ].6yrrn3ce#-:gc=-f}wNWۉ%.$|- 5%rfZ604ѝ _#Cr[x>HPK8Jna:4)[*Ԁr. I1G4khlp%cbT*p<lq,^EDƄtCoF32?hKAk =fYVr5g M@yNQ9TI{QEV|&ٻ{YzM)\@ 5.Kv%̟}1mA v e P#D =LRTspo1 y!t| @Utъ8ydH韆 T-.C`|R3'HFH$J؝>M&A$GbY~V\[ ޵ KIaUQcԒsU?rھwxqntu!PGo71%@?U` %6<#`WϘގ#=X)WkU<*Ag JEO"V["|Bw>v؍FcȴUr[KZwJ.*vJ%:{ؔAfЛ[#=z7Wb {zL {ySɛ cZ2| ӎ9Y+͹`R(2 X(/q$Mfט A<1Fg:&jh6Phর?b@䮎=6VUKV0Vi |-P et^u~^(䦁* 7 EaYr^Fw:AY _o:1՗o=/YoM>P|ݎн>M{&EJzc>yH*Dׁ]2Ö,.x[#J nvo=>eWYySá{ h]FǾ \"d#,uh>})H!1|FNZn])m1Pi47B2D_>, ߏ!xKaz"mFOo8Xaӿ\o#4Q$ϋIdqtN++#p\0{q3Z! H<_9Tira`fz0puloΏE(=Ytm[=)!!<&c{hvY?jRu+j?鹯18 MYV&JOU/0[1MRI4_0<?|7LP]6mQS,F ĦP;Z*i~xe7dTG?]wԜ<^NM,5eFՑmM_ćI`xyM6vrok==0ohU' ݱS+ƫA/.w#tnDHyڄE X-}9!x0E@XͬYfS$3d?{-PRP:qeʷhRڃ(Ɯu"S8ׄv`N(07;ݷq'FX12>OWJNtey=mɀUT6{H_K{_'r'ORڴlt:J 3q%wt*.#9 YG(`j(yLεpӥ`p M(ơ\DI+g.Sf{ofX9Xkh.Ϲy0PvFiKjDʟ:?O5 vYCvN>A(Sq6WݦMn17z8vQF (fl%SWx) 9[*Cq/ZhKuNq"8Ze pH*ٳ`r.$:a.9`d>.[Þ?< RZufǔAP 5$.KW$Ql8+mYFKX6UZKOCi3Sq%uUfS/2t~G bND-˅Se]J_oU˘nQ_κf+o[ &/f(FYTh˜P5GK?vfV_Clxǜsu}g)'syi~΅VUVo!l‚kTa$ȡoH^'C]pN:փ9$Qx0.4}"u?e͈ޭylԽ%f'A$INa.ܗ qoN˥3BN6a_@<'Z4^i7X ]}TT _d֎J9`H;=W|o).1H&XB-]&OEimwE6O㶮 /9 `I?OAȳ<9EuJ0NJH t]>ހYnCez ]ǧ9R~ՏRa6X^w'us@=E:b>D`"Xf7jQ@*CS W`=.lC1n(eUJ̸ S™ u~[ބ+(-3zE:7m\;o#D7qn` 2Cm.ccp6N_/\w Gg*XWN?$-ܿ<F4偁%%x@Lss̔9 niRX* -1+#|\Z\93,m!l^$Et2Z,г{=|hdOv+E֫/I %(d^*JU X߆^&yHum~FԐ#Ȯ䏵4T _2d@^JF,m5!s߸9@KVNpx $4{tXݡP娹V<ɱf~Ƃf#Z1̑yw4ߦ)~:`n' :G(:B^("Td yA/,Idך3Mw⦨$11ٖl{&T($G1,06Of*!q@W;}Rӯ~9iRܛW8rfũǭOzA9k7<$m8Z:Y@ .iku0u&HR z'b"ȴ7ۨOF(D`CxGOh2ӁXn|$p00y\=%kOL7}uP+'cҔ\iYҊ +KciKY$a -VNl탺4ۇi}fMpLM:xeW)]Dy}d86)Z[C$,y|!{31O^NvheJjJcPl̶S2ʋͩSr'J4]7}k }f CvE$rDsDYups>I|Hha—F tzX?$0Z/kͨ,`ު%Â/Sa}iҟ昽$>z}2%ȊP4rUhst-}LXPyL|EB0yZHAT{+#d.T}3B,uP %2̫w& oK cr@3>[5 ]/Gʍ|c ]4[BP3@C9L$) Yܽ~Hlʗ}dL/^[aGۀzcl(hтp8.ᴕpܨ ƌb;D`<M(Ԭ7B@g~>ܚX!AV | "?+NI=T̴{b\f;ymZ׿kK y o*e6_ӢCDS3P9Nfa̡L "R4`D ׫ԕmäVLL-?%Of_0ٜy1po 1t#ܭ"ѹMF8W t˒2 nuUށ^1 7t1C-0*ؒUS6y[_f@rνYDܘ'ãU0H˃;4 Hc7U(zs[!8Tl HLTW@_ 4KF3h#8'_[4Ega"/N{ʽ%L0e/yCAn:!XN wחSrZ_~R$Jy/gA/S"bl ֳWQ;D0Al߷f!iW*fp`qj9xhR ۓQslġx\ڍ @@tiZ[ jґv.&hpuo1)f>;>AY;E3"Re@\u5›R]"8U Xzki*fajE'xf?N`;Zm=K \S+@95 i2-fK\1JkMvpn0m}|s+nytEODd7˒fT VVa5?6Sޛ߆~Hŝl7gG Ae$SD>9Ad/ʄS!}IY>5 }Iu"||Gm8}1>dOw/NgkZNu8 p)ŕU8F @eP@ E8#oN^q3zIΑnx md6pWSwصeqEٕ7\ms]r m`Pt]E^X$ik1Rǘ՞bݽHh,Imi4[fEذhP1W('#E+ !aնjmq\G,e2]H~iY%#ZZBd9(^|+SݩF}=nѯ+ˠ @qkҾTrjxc KvkIuO5j[3)ͅf@ᰇtğtG΅*{??"P7%Է&ܸ&ep.rgԏ "|c<;&,D|ImŌR{X 9;xQg "Z (ԚMG4EPg҉x9[ m5_3]k“ʐS3Xm8w񏈾86P !hq@Ȣ\$[g tV".woBקoY@;SVNPh{JHP]Tm$"^Hroh"Ȗ \ 4a$r\jϠזQ̍w6;4kB;lDW [VnČC0KO3F "6Ԓ~!W4mfzkv ^\U$jT6T//XkP*8W(o7 $ͥ3)/0 E֥ дݲ#J1BV14=RVF˵HoUGxgYeAw[N*>1xR P%Nd#vW"NСo~ 8*>;i*W w~?{RuyTb2J?:Zn2; @L^z@fu[񸣂+nCQUgyC1CIzj.(A,R=NDMxP 4!γ4YPhNmYTh~:IG:I\4cOu>;aj^%i}2Eri㔅#hc ru: c=˨h+0Ot9PD"5 Cx)( _ ~@_9#ߚby*!PK-lpj{KTIFRr]3$%P  "L 4MޑV-7k@pskh39$>9G=S3SS\7f ˔%왗PVһT@j2yoKy{;CkC>oYzi=$;tbj58h 1AI͒FeӆKU0oTB"Tjy퀮KN*Nݞ],2= vnb\-G=vf{NX) O` ʮP;2jMVVm0n- ι_X.LqoS%FFޭl~hQꇮAߐ;xxN+8/dw3Uz%W&]5'X.2sM &q¸F}ElH͉5fқnGX˽ m&.[cfo$ϑWJi 81M==io'FQVńVB88ћfʟj=K/L 5@ZƮnd^j]?4[CsȺYalaJaS{N.@TX;R&2Āy~Lg ݒ.QTJ(o P޹ ʧuww)ww\Qd^Ǵ`>=ii"LƲP#}  8؍A:ƇjYqD:snλO>Kp:poB ?rMZ|Pf@F~B Vs1y# s9:|?DX05IjsBe@K.UFIDAV:_XI"rB6/ְ輏(Tpy$=r['hͮ)'Tۼ>ô띠h&30D=0Q=GLaN=Hv^-+s_v lּ؆6uxjPP1Iw=?67}AuC|Bz_䍎RW.Bzc͚bo,{LnnO#VH#E߹ƌ>~ XPTs jhP1Kmap*:1i)ԈNOO;2MV& [ַ t:ג~SX^RƱ_adӇT@lϝ[砚#:ϖÍkB,Wr"ga Ed.u6cqA6x!5nO2ijVhj~ ܍ۄVoonĬѯ7h{D'Dg s0X )#A]tEkFB6?(/I1sy_^بxsUQ#ᯟS<?T,.𹕆=府gW0 >}gˠeykEE^q2$yZ,zD K D:{ &gibn2]>Z<6r91D;۸hrZO^ʊLK(-FuUxW.'-5hGJwuz+k%t.= J+Fr0`BuWɄf WS aPe> 0hK^rBf(|1//p#GxC*{ixZu _VT(ctv6[x[l1;V t!BcV15NB;sak^,I2 WTUڵ%$I!HղH۞c&hC>SCCl nw;4p_(9~K%0b&eo?;R@_lKdr |SbRԯVj'H!0TɿX?!nn %DS*ѸII ;cQ գ1}ʫ4-z[L4 F 뵏1fVnG:5U(8>Tm@sFfrC{[hĆ\Z ToUm(mo-[~L JDl?n?ݲ9 ^YxeE2'&r e80W6lB8w/T|"G0)FP{JW{Y.62qڻf~#Ʌ:=b3t݈*rYfb*)8OlE>xӬhY wA,ZKMW ,ZYF_~qEh qV&,LX*Xh-ONCQgz&;URЅmauKxG%N F‚ΖN [b: BF endstream endobj 256 0 obj << /Producer (pdfTeX-1.40.16) /Creator (TeX) /CreationDate (D:20190726160215+02'00') /ModDate (D:20190726160215+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) kpathsea version 6.2.1) >> endobj 200 0 obj << /Type /ObjStm /N 65 /First 590 /Length 3455 /Filter /FlateDecode >> stream x[[S9~WnMRT !$ dRy0M&3~EmO[j];GGG1eJYXᩊ% 0_Ȳ@tiԠ#4?[ q!Q$^A-p."L1Ҁ .2P EJ4.$ C= 047Ȃj0j7M#, G{z3SZoڔ\1IsTΥ00(L|D jI j<%j (hup8pyLOGX[ܟhnKV&}pBJzuI/m2XFVϬG5d [#t2$e'`+ʹ`?<#D hčJn G-AzKa1;͌PF>@ pK,ܞ%wY-Z2r4ip K7o6P I3ڸ G(C&QVK2Q$# DgYWܬLOG8`mhU0Fah1[DX;.Li CRKB>9F֐ۉ@n_lY=b-l7Ƣ\c X>FD/A _fya8$a%2PשLi/1j+H qyYb8<'XJpp,cF<_8ӿDQMUk)a^r-i8d,zF#Xg3X ?-zH0VR`D*IB%xX(4J[Le-Mqi㙉*)ϞQOpxC2FS?)E?͠6K8C~3棸OS:K޽#B z^v&'lP?G lexւIL[b[8DąW4ITëF|_*ut?F@܊ѰwGWb,&bR}b.bz3*1s$7.7k9U{/OBpFP Aq%;s 1<q >`@jH 񨆰, |=@Mj|4*_k2^ekC<+:W۟>2a]T 3bZuW=e]#Eק;QuL9Ө?]lgx#"8`>[ r4 FZA /n`ZMo\ )xj2.ߺ&e=\kno$kD3H(ǘ՘{bvZ+:Y 0y(t  ߂fߎ/ Ѱ-hXQhr^ltTTT·bhQ,ബвu:Eןv>x`,LXy5` /'p q]{}@YKk˻57m҃j2Psorf)Ҟ{&iI%VŞqؕ1ͯCxNudrpyj VyEָ pDD3ݯ;b:IϹgO.N}餼Eo/`_䨔5uoN[٩%-1Lw.>bT7r_Ǘ\WU-%y_kX>LWT A[ cRYڵLmǟw JXߝ-F *ێe~0hý'ItAjőGt!N8P}_B]r_ 6W _1Ⳏ9m]2e<@)b#Dޤž4j/3Q"OҋT,7Xž}@M8ξyYd|Ke\Gvmw2g.3o\E7ekЛ z՝{}L̸W j|>0{|s.xNҙw¯{㌮)3mw&%=w5qdph`ݹ7ܵ|:ћw;MK.}˸7.MvuσlXc5.G#[Lvkydwڴǿvk}t-ܨ|ѭqkrpwki):ӛy>Xߛt_KY}SeH:f!rZސ'K˧Hw]M }ǘ㟨+H/ N o _!η``9samy:H~ du-t)rBC%Z#K+y‰I6c x%>l]5W,O(IU|+"<"fi鱥f6&=s0.k endstream endobj 257 0 obj << /Type /XRef /Index [0 258] /Size 258 /W [1 3 1] /Root 255 0 R /Info 256 0 R /ID [<4954641BA8A0F71C82C90955E2454C53> <4954641BA8A0F71C82C90955E2454C53>] /Length 744 /Filter /FlateDecode >> stream x%IlMQ{V'JL 5OEWbJ  C$V!14Q!C, $,D{_=s1D @ 2. 22 $`R UsXϬx0J}ު'dLqҽ$7Bs R э\xH:L^WvP#dUK\uuH/ RɱM$nqP# 28aVS|HjWqr}HxRQD 4S?i1 oGj5LKH?x{g{w`uq1 yT)'(=CV `[(% |r-0T&*$a+UIgԩt L˴.?ݗ:صwj]T'`4+O\t"'Oˏc:LݿK#SHISI#J4۔ aOg {Z9d6yG^~̇ޤt!Y{[;iXEF,ڡ%qjH֖ed9YAVUd5YC֒u'F.e?¯6?0J|W4C4VQі~VQh{ DS ?Ww2~,(ʆ>UQotn)ʅ}MQb?EU(*@lM>+!STPQ?ē~V!P8Izns 尅 endstream endobj startxref 627967 %%EOF aplpack/inst/CITATION0000644000176200001440000000032313516603655014007 0ustar liggesusersbibentry(bibtype = "Manual", title = "{aplpack}: Another Plot Package (version 190512)", author = c(person("Hans Peter", "Wolf")), year = "2019", url = "https://cran.r-project.org/package=aplpack") aplpack/inst/src/0000755000176200001440000000000013306503546013436 5ustar liggesusersaplpack/inst/src/walkman-r.jpg0000644000176200001440000002326113516603655016042 0ustar liggesusersJFIFHH ICC_PROFILE mntrRGB XYZ acspAPPL, desc|cprtx(wtptbkptrXYZgXYZbXYZrTRC gTRC bTRC desc"Artifex Software sRGB ICC Profile"Artifex Software sRGB ICC ProfiletextCopyright Artifex Software 2011XYZ QXYZ XYZ o8XYZ bXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( (ebQ <~# +y6;+R5RRX,bw6.%'n+%uylpQExGEPEPEP> $tZ(=p7ctU59RԴr w{{{jҒ:&:tף((((((((((((etMi  +qxV&b0\(((((((((((+3,&ӵ TT`uӁӿ_3^ΰ[BF=|_xjM<{#xuMnYP0Bty%G9 k袸*TIsHIhŠ(:((}Γ7cNE7]=:Ƽ~*NbU$Uy OP6w#䪯CL#`$m:((((((((((|{kVvm; x!˿ #9_>oJ2F2Aϵ|^naQAm(5{h(ϻ ( ( ( ( ( CJJk-#~_ŪBiQ_H~,QEQEQEQEQEQEQEQEQEp$IJ\ 2{zOWPhYpxV*%++~G<1Gm +(((((}vk} Km2LT ^TٟTizj ï rAn( LnWx@4/k^l4٢9h4m%s rN0yKTPv#g$d5<(5><Qו% =[i$).:p d$D=r}<[-YH.[ ld95\1ug,pj- kۇy˳``dz*[WQ<ϰ_ZyLqqJ+=N-mKڭѝgVuD֍N{5|isT?d˨*}kQYEPEPEPEPEPEPEPEPEP^ZK8oѴDw8 n=kko$)a%Le US$f-տc渪!p{ɫ|:(0((((zvu}2Em Xgb|S"^趩[5:ٴ|EW͟Q@Q@Q@Q@Q@Q@Q@Q@WI:)h-C c qQf0c_J9Ey>(dId`2O:Mj6v׭f0pr gs 6sMѡ-Tp7yvo!FqЌpF=R񯂭|YcJBW.鬯`h.amuy<Ɨi꼿"Q\QE^k VԬ+rAzHWҚ q⼝8e8`Fq+7P/+_C|4/LSi|mcۃۀ߲>g*`9I~o:(@(((((((((w!k7.6F[wy?H|Q/&L*?3OB:ZVTݞC{\䨢Š(מ*Q`U$Vy GR6Ve]1srr;x8{s~%,6 _^ >h+x'XUblЀ,3[|[&U+us.Xrk֭.Zr~Ge/k_EaEP_TiV?ٚE}߷lh-aip(\Y##O.#ʮ/7%Q^EPEPEPEPEPEPEPEPE 6Vs> NQp9(M#hɦ*|FԑMx=l^Ğ"XlF2p{dޱ/g$˖' (\(XX]jwY@R5O< _D)IE9I#M-q{karFPA(k+;B!t;=.-[,$,Ixh׿쩨?#3JV^M@kq=ebzOkİ{~pvwy+_^^6~\UW0qTQ]ͅQ@Q@Q@Q@Q@Q@Q@Q@y_vv2I[H U1Bn]t;Rq- ,@8|ѪjWs]$.ܒzNqչ#ȷ\-bfm/J(sp(\EvEwQ)ϐH!snWCoZ#$G#u" KtqIڪ0O=whK쏒XZoޞKrj(s󰯚cq[k (Ox(YQA|Kr6s2::bsݘ1ZV|+i+jQUh Rey3/B zWӦEcqsWzò (2|S"^趯:#x>Wdq&9\y^fcLSAC(0荫xwuDw}vPJpss1Pi3t86f ~*W%m'&aEP ((((((((񷇿%͔k?A 灻=b h半8)Ak YKFN]ۀː3s]_z;Qp7_n?$iL͵#: >~k^5yYd{,d;u7onV}_o]~ Kt<,q@pOM} =kɛ̸W`(8Q3ܓp!4 2\ĭs~s7Qڽp}N "_eKsscBo(Š(Skifl2\(D2;ܢ4Z7i-γĺ6ۣl ;炸 ۮ15_N\/z3*1< gޯe)ЙQ|}׵h%>-%-#wf=0EtB۞>esj[% (<((((aplpack/inst/src/doaplpack0000755000176200001440000002156312236136142015324 0ustar liggesusers# doaplpack: Installation script for aplpack # pw 11/2011, 12/2012, 10/2013 ## version 1.2.9 # a+b) DESCRIPTION-FILE DATUM + VERSIONSNUMMER in diesem Verzeichnis aktualisieren # c) doaplpack-FILE: VERSIONSNUMMER in diesem Verzeichnis aktualisieren # d0) ggf. pdfmake anstossen: s.u. # d1) $HOME/R/aplpack/doaplpackl starten # d2) Rnew CMD check --as-cran aplpack_1.2.9.tar.gz # e) upload to cran: # 1. mailto: cran@r-project.org # 2a. upload by konquerer!! # ftp://CRAN.R-project.org/incoming/ # 2b. upload by ftp # ftp ftp://cran.R-project.org/incoming/ # ftp> put aplpack_1.2.9.tar.gz # ftp> bye # ========================================================== # Paketverteilung fuer Rechner: 138/20/21/102: # cd /usr/lib/R/library/aplpack; # cp -rp $HOME/R/aplpack/lib/aplpack/* . # ========================================================== # Pakettest: # cd /home/pwolf/R/aplpack # echo "library(aplpack,lib.loc="lib")" | R --vanilla # library(aplpack,lib.loc="/home/pwolf/R/aplpack/lib") # example("stem.leaf") ## ; example("faces"); example("bagplot") # cd /usr/lib/R/library/ # cp -rp /home/pwolf/R/aplpack/lib/aplpack/* aplpack/ ### CLEAN [ ! -d aplpack/R ] && mv aplpack/r aplpack/R ### BAGPLOT #source("http://www.wiwi.uni-bielefeld.de/fileadmin/stat/wolf/data/frabo12.R") #bagplot.pairs(frabo12[,38:39],trim=0.1) ## ??Error in 1:pg.nol : NA/NaN Argument echo "library(relax);tangleR(\"bagplot.rev\",expand.roots='',expand.root.start=TRUE)" | R --vanilla mv bagplot.R aplpack/R/bagplot.R ## notangle -R"define [[bagplot]]" bagplot.rev > aplpack/R/bagplot.R echo "library(relax);tangleR(\"bagplot.rev\",\"bagplot.Rd\", \ expand.roots=\"define help of [[bagplot]]\",expand.root.start=FALSE)" | R --vanilla grep "^[^#]" bagplot.Rd.R > aplpack/man/bagplot.Rd # hdepth echo "library(relax);tangleR(\"bagplot.rev\",\"hdepth.Rd\", \ expand.roots=\"define help of [[hdepth]]\",expand.root.start=FALSE)" | R --vanilla grep "^[^#]" hdepth.Rd.R > aplpack/man/hdepth.Rd # bagplot.pairs echo "library(relax);tangleR(\"bagplot.rev\",\"bagplot.pairs.Rd\", \ expand.roots=\"define help of [[bagplot.pairs]]\",expand.root.start=FALSE)" | R --vanilla grep "^[^#]" bagplot.pairs.Rd.R > aplpack/man/bagplot.pairs.Rd # plotsummary echo "library(relax);tangleR(\"bagplot.rev\",\"plotsummary.Rd\", \ expand.roots=\"define help of [[plotsummary]]\",expand.root.start=FALSE)" | R --vanilla grep "^[^#]" plotsummary.Rd.R > aplpack/man/plotsummary.Rd # plothulls echo "library(relax);tangleR(\"bagplot.rev\",\"plothulls.Rd\", \ expand.roots=\"define help of [[plothulls]]\",expand.root.start=FALSE)" | R --vanilla grep "^[^#]" plothulls.Rd.R > aplpack/man/plothulls.Rd # skyline.hist echo "library(relax);tangleR(\"bagplot.rev\",\"skyline.hist.Rd\", \ expand.roots=\"define help of [[skyline.hist]]\",expand.root.start=FALSE)" | R --vanilla grep "^[^#]" skyline.hist.Rd.R > aplpack/man/skyline.hist.Rd #rm bagplot.Rd.R hdepth.Rd.R skyline.hist.Rd.R plotsummary.Rd.R plothulls.Rd.R bagplot.pairs.Rd.R ## notangle -R"define help of [[bagplot]]" bagplot.rev > aplpack/man/bagplot.Rd cp -p bagplot.rev aplpack/inst/src/ cp -p work/bagplot.pdf aplpack/inst/doc/ ### FACES notangle -R"define [[faces]]" faces.rev > aplpack/R/faces.R notangle -R"define [[plot.faces]]" faces.rev > aplpack/R/plot.faces.R notangle -R"define [[faces]] help" faces.rev > aplpack/man/faces.Rd cp -p faces.rev aplpack/inst/src/ ### MS stem-and-leaf notangle -R"definiere [[stem.leaf]]" ms.rev > aplpack/R/stem.leaf.R notangle -R"definiere [[stem.leaf.backback]]" ms.rev >> aplpack/R/stem.leaf.R notangle -R"definiere Hilfe zu [[stem.leaf]]" ms.rev > aplpack/man/stem.leaf.Rd cp -p ms.rev aplpack/inst/src/ ### SPIN3R notangle -R"definiere [[spin3R]]" spin3R.rev > aplpack/R/spin3R.R notangle -R"definiere Hilfe von [[spin3R]]" spin3R.rev > aplpack/man/spin3R.Rd cp -p spin3R.rev aplpack/inst/src/ ### BOXPLOT2D notangle -R"start" sc.rev > aplpack/R/boxplot2D.R notangle -R"definiere Hilfe von [[boxplot2D]]" sc.rev > aplpack/man/boxplot2D.Rd cp -p sc.rev aplpack/inst/src/ ### SLIDERFNS #cp sliderfns/*.Rd aplpack/man/ notangle -R"define help of [[slider.hist]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.hist.Rd notangle -R"define help of [[slider.brush.pairs]] and of [[slider.brush.plot.xy]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.brush.Rd notangle -R"define help of [[slider.split.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.split.plot.ts.Rd notangle -R"define help of [[slider.zoom.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.zoom.plot.ts.Rd notangle -R"define help of [[slider.smooth.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.smooth.plot.ts.Rd notangle -R"define help of [[slider.lowess.plot]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.lowess.plot.Rd notangle -R"define help of [[slider.bootstrap.lm.plot]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.bootstrap.lm.plot.Rd notangle -R"define help of [[slider.stem.leaf]]" \ sliderfns/slider-stem.rev > aplpack/man/slider.stem.leaf.Rd #cat sliderfns/*.R > aplpack/R/sl.R notangle -R"define [[slider.hist]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.hist.R notangle -R"define [[slider.density]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.density.R notangle -R"define [[slider.brush.pairs]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.brush.pairs.R notangle -R"define [[slider.brush.plot.xy]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.brush.plot.xy.R notangle -R"define [[slider.split.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.split.plot.ts.R notangle -R"define [[slider.zoom.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.zoom.plot.ts.R notangle -R"define [[slider.smooth.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.smooth.plot.ts.R notangle -R"define [[slider.lowess.plot]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.lowess.plot.R notangle -R"define [[slider.bootstrap.lm.plot]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.bootstrap.lm.plot.R notangle -R"define [[slider.stem.leaf]]" \ sliderfns/slider-stem.rev > aplpack/R/slider.stem.leaf.R # Snw-Vignette of sliderfns cp -p sliderfns/sliderfns.rev aplpack/inst/src/ # cp sliderfns/*.jpg aplpack/vignettes/ cp sliderfns/div.jpg.pic/*.jpg aplpack/vignettes/ cd sliderfns echo "library(relax); weaveR('sliderfns.rev')" |R --vanilla -q cd .. ### cat sliderfns/sliderfns.tex | sed "s/\\.ps//" > aplpack/inst/doc/sliderfns.Snw #only### up to R-3.0.0 cat sliderfns/sliderfns.tex | sed "s/\\.ps//" > aplpack/vignettes/sliderfns.Snw ### SLIDER cp /home/pwolf/R/work/relax/install.dir/relax/man/slider.Rd aplpack/man/ cp /home/pwolf/R/work/relax/install.dir/relax/R/slider.R aplpack/R/ cat /home/pwolf/R/work/relax/install.dir/relax/R/slider.R | sed -e 's/require(tcltk)/#require(tcltk)/' > aplpack/R/slider.R ### NAMESPACE: wird generiert echo "exportPattern(\"^slider.[a-z]+\")" > tmp.tmp echo "export(bagplot,boxplot2D,compute.bagplot,faces,plot.bagplot," >> tmp.tmp echo " plotsummary,plothulls,bagplot.pairs,skyline.hist," >> tmp.tmp echo " hdepth,plot.faces,spin3R,stem.leaf,stem.leaf.backback,slider,gslider)">> tmp.tmp mv tmp.tmp aplpack/NAMESPACE ### pdf-Vignettes cp pdfmake/*pdf aplpack/inst/doc/ ### DESCRIPTION # Original in dieser dir. cp DESCRIPTION aplpack/DESCRIPTION ### CHECK + BUILD Rnew CMD check aplpack; ## Rnew CMD check --as-cran aplpack_1.2.9.tar.gz Rnew CMD build aplpack rm lib/aplpack/R/aplpack.rdb Rnew CMD INSTALL --library=lib aplpack_1.2.9.tar.gz cd lib; zip -r aplpack_1.2.9.zip aplpack # old suse: zip a -r aplpack_1.2.9.zip aplpack # old: zip -r aplpack_1.2.9.zip aplpack/* > zip.out mv aplpack_1.2.9.zip .. cd .. exit 0 ### MANUALS generation of pdf manuals: ## cp *rev pdfmake/ cd pdfmake ; # revweb sc; echo "library(relax);weaveR(\"sc.rev\")" | R --vanilla latex sc; latex sc; dvipdf sc; # revweb faces; echo "library(relax);weaveR(\"faces.rev\")" | R --vanilla latex faces; latex faces; dvipdf faces; # revweb spin3R; echo "library(relax);weaveR(\"spin3R.rev\")" | R --vanilla latex spin3R; latex spin3R; dvipdf spin3R; # revweb ms; echo "library(relax);weaveR(\"ms.rev\")" | R --vanilla latex ms; latex ms; dvipdf ms ########### maybe by hand: ######################################### cd ../work echo "library(relax);weaveR(\"bagplot.rev\")" | R --vanilla latex bagplot; latex bagplot; dvipdf bagplot; cp bagplot.pdf ../pdfmake/ cd ../pdfmake/ cp *pdf ../aplpack/inst/doc/ ########### end of maybe by hand: ################################# cd .. ## sliderfns manual cd sliderfns echo "library(relax); weaveR('sliderfns.rev')" |R --vanilla -q latex sliderfns; latex sliderfns; dvipdf sliderfns cp *.pdf ../pdfmake/ ## cp sliderfns.pdf ../aplpack/inst/pdf/ ## up to 3.0.0 # cp sliderfns.pdf ../aplpack/inst/doc cd .. aplpack/inst/src/spin3Ra.rev0000644000176200001440000002006213513045523015467 0ustar liggesusers% cp New Report: Thu Mar 8 15:52:37 2018 % New Report: Fri May 13 10:17:27 2016 % New Report: Thu May 12 15:55:04 2016 % New Report: Tue May 20 09:39:33 2008 % New Report: Mon May 19 20:03:59 2008 \documentclass{article} \usepackage{noweb} %\usepackage{psfig} \textwidth=16.5cm \noweboptions{webnumbering,smallcode,longchunks} \sloppy \textheight=25cm \topmargin=-30mm \oddsidemargin=0mm \parindent=0mm \author{H. P. Wolf} \date{20. Mai 2008, 180308, file: spin3R.rev} \title{Punktwolkenrotation} \begin{document} \maketitle @ Die in diesen Abschnitt definierte Funktion ermöglicht dem Anwender eine Punktwolke interaktiv zu drehen und zu betrachten. @ <>= <> @ <>= \name{spin3R} \alias{spin3R} \title{ spin3R } \description{ Simple spin function to rotate and to inspect a 3-dimensional cloud of points } \usage{ spin3R(x, alpha = 1, delay = 0.015, na.rm=FALSE) } \arguments{ \item{x}{ \code{(nx3)}-matrix of points } \item{alpha}{ angle between successive projections } \item{delay}{ delay in seconds between two plots } \item{na.rm}{ if TRUE 'NA' values are removed otherwise exchanged by mean} } \details{ \code{spin3R} computes two-dimensional projections of \code{(nx3)}-matrix \code{x} and plots them on the graphics device. The cloud of points is rotated step by step. The rotation is defined by a tcl/tk control widget. \code{spin3R} requires tcl/tk package of R. } \references{ Cleveland, W. S. / McGill, M. E. (1988): Dynamic Graphics for Statistics. Wadsworth & Brooks/Cole, Belmont, California. } \author{ Peter Wolf } \note{ version 05/2008 } \seealso{ \code{spin} of S-Plus } \examples{ xyz<-matrix(rnorm(300),100,3) # now start: spin3R(xyz) } \keyword{misc} @ <>= spin3R <- function(x, alpha=1, delay=.015, na.rm=FALSE){ ################################################################# # spin3R: simple spin function to rotate a 3-dim cloud of points# # pwolf 070831 / 080520 # # # # arguments: # # # # x (nx3)-matrix of points # # alpha arc of rotation # # delay sleeping time between rotations # # # ################################################################# if(ncol(x)!=3) { print("Error: data matrix must have 3 columns"); return() } if (!requireNamespace("tcltk", quietly = TRUE)) stop("package 'tcltk' is needed") #190715 <> <> <> <> <> } # end of spin3R @ <>= bw <- 4 topl<-tktoplevel(); tkwm.geometry(topl,"+0+500") f1 <- tkframe(topl);f2 <- tkframe(topl);f3 <- tkframe(topl) f4 <- tkframe(topl);f5 <- tkframe(topl);tkpack(f1,f2,f3,f4,f5) f6 <- tkframe(topl); tkpack(f6) b12 <- tkbutton(f1, relief="ridge", width=bw, text="up") b21 <- tkbutton(f2, relief="ridge", width=bw, text="left") b22 <- tklabel(f2, relief="flat", width=bw) b23 <- tkbutton(f2, relief="ridge", width=bw, text="right") b32 <- tkbutton(f3, relief="ridge", width=bw, text="down") b41 <- tkbutton(f4, relief="ridge", width=bw, text="clock") b42 <- tklabel(f4, relief="flat", width=bw) b43 <- tkbutton(f4, relief="ridge", width=bw, text="cclock") b51 <- tkbutton(f5, relief="flat", width=bw, text="------") b52 <- tklabel(f5, relief="flat", width=bw, height=bw) b53 <- tkbutton(f5, relief="flat", width=bw, text="------") b61 <- tkbutton(f6, relief="raised", width=3*bw, text="EXIT") tkpack(b12,b32) tkpack(b21,b22,b41,b42,b51,b52,side="left") tkpack(b23,b43,b53,side="right") tkpack(b61) @ Für die Rotation bezüglich zwei Achsen wird nur eine 2$\times$2-Rotationsmatrix benötigt. <>= alpha<-alpha/360*2*pi; ca<-cos(alpha); sa<-sin(alpha) rot<-matrix(c(ca,-sa,sa,ca),2,2) @ [[x]] hält die Daten, [[x.o]] die Originaldaten, [[xa]] die 2-dim Projektionen. Für die Anschaulichkeit wird ein Andeutung der Achsen mitgeliefert: [[A]] beschreibt die Achsen, [[A.o]] die Originalachsen, [[Aa]] den darzustellenden Teil. <>= n <- nrow(x) if(any(is.na(x))){ if(na.rm){ x<-x[!apply(is.na(x),1,any),,drop=FALSE] print("Warning: NA elements have been removed!!") }else{ xy.means<-colMeans(x,na.rm=TRUE) for(j in 1:ncol(x)) x[is.na(x[,j]),j]<-xy.means[j] print("Warning: NA elements have been exchanged by mean values!!") } } x <- x - matrix(apply(x,2,min),n,3,TRUE) x.o<-x<-x / matrix(apply(x,2,max),n,3,TRUE) - 0.5; xa <- x[,2:3] A.o<-A<-0.5*matrix(c(1,0,0, 0,0,0, 0,1,0, 0,0,0, 0,0,1),5,3,TRUE) Aa <- A[,2:3] plot(xa, xlim=.7*c(-1,1), ylim=.7*c(-1,1),bty="n", pch=20, xlab="",ylab="",xaxt="n",yaxt="n",type="n") lines(Aa) @ <>= i <- 0 ; i.max<-60 cat("exit by button Exit\n") delay<-.01 if(delay < 0.015) delay <- 0.005 colors<-rev(rainbow(ncolors<-30)) # first view ind<-c(1,3); x0 <- x; x0[,ind] <- x[,ind]%*%rot; xb <- x0[,2:3] xcol<-colors[ceiling((x0[,1]+1)*0.5*ncolors)] points(xb, pch=20, col=xcol,cex=2*(1.5+x0[,1])) cex <- .3*2*(1.5+x0[,1]) points(xb + 0.005 * cex, pch=20, col="white",cex=cex^2); xa<-x0[,2:3] # info box tkmessageBox(title="ready for spinning?", # icon="yesno", message=paste("move cursor to with the desired rotation", "move cursor on 'EXIT' to exit",sep="\n")) # loop repeat{ Sys.sleep(delay) ##; if( ((i<-i+1)>i.max) ){ break } cx<-tclvalue(tkwinfo("pointerx",topl)) cy<-tclvalue(tkwinfo("pointery",topl)) widget.id<-tclvalue(tkwinfo("containing",cx,cy)) choice<-sub(paste(sep="",topl$ID,".*([1-6].[1-6]$)"),"\\1",widget.id) if(choice=="6.1") break switch(choice, "1.1" = ind<-c(1,3), "2.1" = ind<-c(2,1), "2.3" = ind<-c(1,2), "3.1" = ind<-c(3,1), "4.1" = ind<-c(3,2), "4.3" = ind<-c(2,3), next ) x[,ind] <- x[,ind]%*%rot; A[,ind] <- A[,ind]%*%rot xb<-x[,2:3]; Ab<-A[,2:3] #; dcol<-c(rep("black",n),rep("white",n)) xcol<-colors[ceiling((x[,1]+1)*0.5*ncolors)] dcol<-c(xcol,rep("white",n)) points(rbind(xb,xa), pch=20, col=dcol,cex=2*c(1.5+x[,1],rep(3,n))) # 1* # points(xb, pch=20, col="black",cex=1.5+x[,1]); points(xa, pch=20, cex=3, col="white") lines(Aa, col="white",lwd=3) points(xb, pch=20, col=xcol,cex=2*(1.5+x[,1])) # 1* cex <- .3*2*(1.5+x[,1]) points(xb + 0.005 * cex, pch=20, col="white",cex=cex^2); lines(Ab, col="black") xa<-x[,2:3]; Aa<-A[,2:3] } print(cex) @ <<*>>= axis(1); axis(2) @ <>= tkdestroy(topl) "control widget closed" @ Testbeispiel: Zufallsstichprobe <>= <> x<-matrix(sample(1:333),111,3) spin3R(x) @ Randu <>= # show planes of "randu" random number generator: random.gkg<-function(n.max,m,a,r,x){ res<-1:n.max for(i in 1:n.max){res[i] <- x <- (a*x+r) %% m }; res } # randu: res<-random.gkg(1000, 2^31, 65539, 0, 100000)/2^31 # define cloud of points: xyz<-cbind(res[-c(length(res),length(res)-1)], res[-c(1,length(res))],res[-c(1:2)]) spin3R(xyz) @ <>= tangleR("spin3Ra.rev",expand.roots="definiere [[spin3R]]") @ Some tcl/tk special: <>= txt<-paste("set x [winfo pointerx .]","set y [winfo pointery .]", "set win [winfo containing $x $y]", sep="\n") .Tcl(txt) widget.id<-tclvalue(.Tcl("set win")) # or: cx<-tclvalue(tkwinfo("pointerx",topl)) cy<-tclvalue(tkwinfo("pointery",topl)) widget.id<-tclvalue(tkwinfo("containing",cx,cy)) # original TCL-Code: set x [winfo pointerx .] set y [winfo pointery .] puts -nonewline "Mouse pointer at ($x,$y) which is " set win [winfo containing $x $y] if {$win eq ""} { puts "over no window" } else { puts "over $win" } @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \end{document} @ aplpack/inst/src/pw-esch.ppm0000644000176200001440000010056713516603655015540 0ustar liggesusersP6 # Image generated by GPL Ghostscript (device=ppmraw) 105 105 255 aplpack/inst/src/sc.rev0000755000176200001440000003457512410241757014600 0ustar liggesusers% New Report: Tue Sep 23 11:52:30 2014 \documentclass{article} \usepackage{noweb} \usepackage{graphicx} \textwidth=16.5cm \noweboptions{webnumbering,smallcode,longchunks} \sloppy \textheight=25cm \topmargin=-30mm \oddsidemargin=0mm \parindent=0mm \author{H. P. Wolf} \date{Version: 11.04.06, formatiert: \today, file: sc.rev} \title{Boxplots von Projektionen} \begin{document} \maketitle @ \section{Gegenstand} In diesem Papier wird die Funktion [[boxplot2D]] definiert. Mit dieser läßt sich in einen Scatterplot eines zweidimensionalen Datensatzes zu einer beliebigen Projektion der Daten ein Boxplots erstellen und geeignet im Scatterplot der Daten anbringen. @ \section{Definition von [[boxplot2D]]} Die Syntax der Funktion ergibt sich aus Kopfzeile wie aus den ersten Kommentarzeilen der Funktion: <>= boxplot2D<-function( xy, add.to.plot=TRUE, box.size=10, box.shift=0, angle=0, angle.type="0", tukey.style=TRUE, coef.out=1.5, coef.h.out=3, design="sl", na.rm=FALSE, ... ){ ########################################################################## # boxplot for scatterplots, pw 03/05 # # xy: 2-col matrix # # add.to.plot: if TRUE => plot(xy,...) # # box.size: height of box in mm # # box.shift: shift of boxplot in mm # # angle: direction of projection in units defined by angle.type # # angle.type: "0"= angle , # angle in (0,2*pi) # # "1"=2*pi*angle/12, # clock-like # # "2"=2*pi*angle/360, # angle in (0,360) # # "3"=arctan(angle) # by fraction: delta.y/delta.x # # tukey.style: if TRUE outliers are defined as described in Tukey (1977): EDA # coef.out=1.5 # outliers are defined outside coef.out*boxwidth # coef.h.out=3 # heavy outliers are defined outside coef.h.out*boxwidth # design: if "sl" then parallelogram else box # ########################################################################## if(any(is.na(xy))){ if(na.rm){ xy<-xy[!apply(is.na(xy),1,any),,drop=FALSE] print("Warning: NAs elements have been removed!!") }else{ xy.means<-colMeans(xy,na.rm=TRUE) for(j in 1:ncol(xy)) xy[is.na(xy[,j]),j]<-xy.means[j] print("Warning: NAs elements have been exchanged by mean values!!") } } <> <> <> <> <> <> } # end of boxplot2D @ <>= \name{boxplot2D} \alias{boxplot2D} \title{ Boxplot of projection of two dimensional data } \description{ boxplot2D computes summary statistics of a one dimensional projection of a two dimensional data set and plots a sloped boxplot of the statistics into the scatterplot of the two dimensional data set. } \usage{ boxplot2D(xy, add.to.plot = TRUE, box.size = 10, box.shift = 0, angle = 0, angle.type = "0", tukey.style = TRUE, coef.out = 1.5, coef.h.out = 3, design = "sl", na.rm=FALSE, ...) } \arguments{ \item{xy}{ \code{(nx2)}-matrix, two dimensional data set } \item{add.to.plot}{ if \code{TRUE} the boxplot is added to the actual plot of the graphics device } \item{box.size}{ height of the box (of the boxplot) } \item{box.shift}{ shift of boxplot perpendicular to the projection direction } \item{angle}{ direction of projection in units defined by angle.type } \item{angle.type}{ \code{"0"}: angle in (0,2*pi), \code{"1"}: clock-like: angle.typ.0==2*pi*angle.typ.1/12, \code{"2"}: degrees: angle.typ.0==2*pi*angle.typ.2/360, \code{"3"}: by fraction: delta.y/delta.x } \item{tukey.style}{ if \code{TRUE} outliers are defined as described in Tukey (1977) } \item{coef.out}{ outliers are values that are more than \code{coef.out*boxwidth} away from the box, default: \code{coef.out=1.5} } \item{coef.h.out}{ heavy outliers are values that are more than \code{coef.h.out*boxwidth} away from the box, default: \code{coef.h.out=3} } \item{design}{ if \code{sl} then parallelogram else box } \item{na.rm}{ if TRUE 'NA' values are removed otherwise exchanged by mean} \item{\dots}{ additional graphical parameters } } \references{ Tukey, J. \emph{Exploratory Data Analysis.} Addison-Wesley, 1977. } \author{Peter Wolf } \note{ version 08/2003 } \seealso{ \code{\link[graphics]{boxplot}}} \examples{ xy<-cbind(1:100, (1:100)+rnorm(100,,5)) par(pty="s") plot(xy,xlim=c(-50,150),ylim=c(-50,150)) boxplot2D(xy,box.shift=-30,angle=3,angle.typ=1) boxplot2D(xy,box.shift=20,angle=1,angle.typ=1) boxplot2D(xy,box.shift=50,angle=5,angle.typ=1) par(pty="m") } \keyword{misc} @ % pty="s" // "m" # 140923 vorgeschlagen von DT. Ohne Kommentar. <>= if(!add.to.plot) plot(xy,...) @ Benötigt wird eine (2,2)-Rotationsmatrix -- [[TM]]. <>= if(is.numeric(angle.type)){ angle.type<-as.character(angle.type) if(all(angle.type!=c("0","1","2","3"))) angle.type<-"0" } w <- switch(angle.type, "0"= angle, "1"=2*pi*(3-angle)/12, "2"=2*pi*angle/360, "3"=atan(angle) ) TM <- matrix(c(cos(w),sin(w),-sin(w),cos(w)),2,2) @ Als Standardposition wird der Rerotierte Median der rotierten $y$-Werte verwendet. Nach Tukey: Die Rolle der Quartile übernehmen die Angeln (hinges), ihr Abstand heißt Angelabstand (H-Spread).\\ Ein Schritt (step) ist das Produkt H-Spread $*$ factor z.B.\ mit factor=[[coef.default==1.5]]\\ inner fence: [lower hinge $-$ step, upper hinge +step]\\ Ausreißer: (upper hinge + step, upper hinge + 2step]= (upper hinge + 1.5$*$H-Spread, upper hinge + 3$*$H-Spread] =(fence, fence + 1.5$*$H-Spread] sowie entsprechend links.\\ heavy outliers: (fence+1.5H-Spread , unendlich) sowie entsprechend links. <>= xyt<- xy %*% TM ##ermittle empirsche Quantile##= z <- xyt[,1] if(tukey.style){ z.stats1 <- boxplot.stats(z,coef=coef.out) z.stats2 <- boxplot.stats(z,coef=coef.h.out) z<-c(min(z),z.stats1$stats,max(z)) names(z) <- c("min","fence","hinge","median","hinge","fence","max") outlier.heavy <- z.stats2$out outlier <- z.stats1$out outlier <- outlier[! outlier %in% outlier.heavy ] }else{ z <- c(min(z),quantile(z,c(0.10, 0.25, 0.5, 0.75, 0.90)),max(z)) names(z)<-c("min", ".1", ".25",".5",".75",".9", "max") } xy.q <- cbind(z,median(xyt[,2])) %*% t(TM) if(tukey.style){ xy.out<-if(0>= # d. steht fuer delta.: d.xy <-apply(xy.q[c(1,7),], 2,diff) d.usr<-apply(matrix(par()$usr,2,2),2,diff) d.pmm<-par()$pin*25.4 if(design=="sl"){ <> }else{ <> } @ In der schrägen Form wird im Weltkoordinatensystem ein Boxplot erstellt und in die geeignete Position gebracht, was in der Regel zu schrägen Erscheinungsbildern führen wird. Im Weltkoordinatensystem liegt jedoch ein Rechteck vor. Zu beachten ist, daß die gewünschte Boxhöhe in mm angegeben wird. Was ist zu tun? Zunächst wird zu einem Vektor, der entlang des Boxplots zeigt, ein in Weltkoordinaten senkrechter Vektor [[d.xy.s.mm]] konstruiert und im mm-Koordinaten überführt. Dann wird ein Einheitsvektor senkrecht zu Verlauf des Boxplots in mm-Koordinaten [[d.xy.0.s]] erstellt. [[d.xy.s.mm]] zeigt in die gewünschte Richtung und muß proportional zu dem Wunsch [[box.size]] verlängert werden. Vorher ist jedoch [[d.xy.s.mm]] so zu strecken, daß seine Projektion auf [[d.xy.0.s]] einen Einheitsvektor ergibt, und deshalb durch die Länge der Projektion zu teilen: [[d.xy.s.mm.proj1]]. Zum Schluß ist eine Retransformation in Weltkoordinaten notwendig. <>= # d.xy.s.mm: bzgl. Welt-coor senkrechten Vektor in mm-coor d.xy.s.mm <- (c(-1,1)*rev(d.xy))/d.usr*d.pmm # d.xy.0.s: bzgl. mm-coor senkrechten Einheits-Vektor d.xy.mm.s <- c(-1,1)*rev( d.xy/d.usr*d.pmm ) d.xy.0.s <- d.xy.mm.s/(d.xy.mm.s%*%d.xy.mm.s)^0.5 # Streckung von d.xy.s.mm so, dass Projektion auf d.xy.0.s von Laenge 1 d.xy.s.mm.proj1 <- d.xy.s.mm / (d.xy.s.mm %*% d.xy.0.s) # Boxsize: in mm real.step.mm <- box.size * d.xy.s.mm.proj1 # Darstellung in Welt-coor real.step <- real.step.mm/d.pmm*d.usr @ Die Idee für das Box-Design ist etwas einfacher. Nehme den Vektor, der längs des Boxplots zeigt ([[d.xy]]), transformiere diesen in mm-Koordinaten und ermittle den zugehörigen senkrechten Vektor. Verlängere diesen Boxhöhenvektor gemäß der gewünschten [[box.size]]. Retransformiere Höhenvektor in Weltkoordinaten. <>= # Einheitsvektor zu d.xy in mm-coor d.xy.mm <- d.xy/d.usr*d.pmm d.xy.mm.ev<- d.xy.mm/(d.xy.mm%*%d.xy.mm)^0.5 # Konstruktion eines Boxhoehenvektors der Laenge box.size in mm mm.step <- box.size*c(-1,1)*rev(d.xy.mm.ev) # Darstellung in Welt-coor real.step <- mm.step/d.pmm*d.usr # real.step fuer Boxdickenvektor @ Der gewünschte Shift verhält sich zur gewünschten Boxdicke wie der realisierte Shift zur realisierten Boxdicke. Folglich ergibt sich der zu realisierende Shift durch Multiplikation der gewünschten Shiftes mit dem Quotienten aus realisiertem [[real.step]] und gewünschter Dicke. <>= # Boxshift: in mm real.shift<-box.shift*real.step/box.size xy.q.orig <- xy.q xy.q <-cbind(xy.q[,1]+real.shift[1], xy.q[,2]+real.shift[2]) if(tukey.style){ if(0>= # Boxplotkonstruktion hs<-real.step/2 xyxy <-c( #min:xy.q[1,1]-hs[1],xy.q[1,2]-hs[2],xy.q[1,1]+hs[1],xy.q[1,2]+hs[2], xy.q[2,1] ,xy.q[2,2] ,xy.q[3,1] ,xy.q[3,2] , xy.q[3,1]-hs[1],xy.q[3,2]-hs[2],xy.q[5,1]-hs[1],xy.q[5,2]-hs[2], xy.q[3,1]-hs[1],xy.q[3,2]-hs[2],xy.q[3,1]+hs[1],xy.q[3,2]+hs[2], xy.q[4,1]-hs[1],xy.q[4,2]-hs[2],xy.q[4,1]+hs[1],xy.q[4,2]+hs[2], xy.q[5,1]-hs[1],xy.q[5,2]-hs[2],xy.q[5,1]+hs[1],xy.q[5,2]+hs[2], xy.q[3,1]+hs[1],xy.q[3,2]+hs[2],xy.q[5,1]+hs[1],xy.q[5,2]+hs[2], xy.q[6,1] ,xy.q[6,2] ,xy.q[5,1] ,xy.q[5,2] #max ,xy.q[7,1]-hs[1],xy.q[7,2]-hs[2],xy.q[7,1]+hs[1],xy.q[7,2]+hs[2] ) xyxy<-matrix(xyxy,length(xyxy)/4,4,TRUE) segments(xyxy[,1],xyxy[,2],xyxy[,3],xyxy[,4]) if(tukey.style){ if(0>= x<-y<-rcauchy(50); plot(x,y);boxplot2D(cbind(x,y),angle=0,angle.type="0") @ <>= data(co2) plot(co2,xlim=c(1940,2030),ylim=c(300,400)) h<-lsfit(time(co2),co2) abline(h) boxplot2D(cbind(time(co2),co2),angle=h$coef[2],angle.type="3", box.shift=5,box.size=10,design=0) cat("RETURN!\n");readline() data(co2) plot(co2,xlim=c(1940,2030),ylim=c(300,400)) h<-lsfit(time(co2),co2) abline(h) boxplot2D(cbind(time(co2),co2),angle=h$coef[2],angle.type="3", box.shift=10,box.size=10,design="sl") cat("RETURN!\n");readline() xx<-(1:50); yy<-10*xx+sort(rnorm(50,,30)) bs<-10;bsh<-20;ang<-9;at<-"3" plot(xx,yy,xlim=c(-50,100),ylim=c(-200,700)) boxplot2D(cbind(xx,yy),angle=ang,angle.type=at,box.size=bs,design=0) cat("RETURN!\n");readline() boxplot2D(cbind(xx,yy),angle=ang,angle.type=at,box.size=bs,box.shift=bsh,design=0) cat("RETURN!\n");readline() boxplot2D(cbind(xx,yy),angle=-ang,angle.type=at,box.size=bs) cat("RETURN!\n");readline() boxplot2D(cbind(xx,yy),angle=-ang,angle.type=at,box.size=bs,box.shift=-bsh) cat("RETURN!\n");readline() xxx<-c(-80,-30,xx,95,140) plot(xxx,xxx,xlim=c(-200,200),ylim=c(-200,200)) boxplot2D(cbind(xxx,xxx),angle=ang,angle.type=at,box.size=bs,box.shift=-bsh) #boxplot2D(cbind(xx,yy),angle=60,angle.type=at,box.size=30) #boxplot2D(cbind(xx,yy),angle=30,angle.type=at,box.shift=bsh,box.size=30) @ \includegraphics[width=10cm,height=10cm]{scbxplt.ps} @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \end{document} x <- rnorm(50); y <- rnorm(50); z <- cbind(x,y) plot(z); boxplot2D(z,angle=90,angle.type=2) aplpack/inst/src/pw-esch.png0000644000176200001440000013625713516603655015535 0ustar liggesusersPNG  IHDR  9 )iCCPiccxڕgP} mқT) HYz^EY"bCDi Q)+X X,"*(GL{'?zw93" ~.06|G$/3 Q@%:&K \ JJ  @n3/f_>L~ {T|ABlL.?-Vɏagس>؄W@+pHKOowF,{ӿ3]xY2( LEP-c0+'poP<C( ZB7\kp}g )x!"t J:#qB<?$@T$ Gv"%H9R4 -OrF ,'PDP \ @ףqh{*=vл(*Dߠ `T)czs0,c[bkڱ^l{ 93c8=2p[qI\7}x]% f|'~?H XM9JH$l&:W ÄIH!HXD&"^!HTɘL # HVeiD#-h&rKG"/Q)kJ%REiܠSST՗@NޢNP?$h:4Z8-vvNkat}/~I!/&-MVKdD(YT]+A4OR=91XVZ bcb q#qoRV3D 'hBc%&C1v27SLSLd0O3&A$,rc%XgYX_R1R{ڥFc;GȰeddt<!;'ǔ˝{*o?&?(࢐Pp]aNhXxYqVdTtE5[e'yeyeW,!%M@Ujjj꼚ZZSu:G=^FnnMiM7<6q-VVCm6G;I}TT'^V.k{Xwx~ŪUhz\l6 }~~[50 M Iic35~y=ߙĘ1yl02mg܌on6kfa^g>ar|8[x {m->[Y ,Zagdj5FsM̚5*֑ BMQmmK;Uhfi67{Оoi`#X8$TY9ιyeUW~177[ۼ~GKOOguk|Ե}OϾ_ZW~F~~ jf-; C B M #5-sZwpTixQs !yå#7GGF,GzG6F.DEExxo+gccccccgW%8$$KtMO\LN:ܑBJH*ڟ6^.̰817g"3{LA`0K+kWDMvms⹩t64w|3n3os_r-- [Q[n+6eI;~)0,(/3xgoB].ڊDEcv!ᇡ=TV]|İdWzG~\w̬>¾}?Y.^W>y@WoWT:$VW\_3Zk_Q'_np#vGKM8QXWMAM9[eKH=!rۖ/kvkt_:̆oqwxۑk|G G?yK϶Nj=|!W_;fK/_>M-WWJ-33gg^zM{v ·O[L>-,qi̧9^Y&.W}J.P cHRMz&u0`:pQ<bKGD pHYs  ~tIME7IDATxgeu~k㮿Ϧ/<ޑ ,:IӭPc=Z1nZR%RE ,!l*WV=v5?ν/_ JK}kZ{o38偸p @pˈ;.#82@pˈ;.#82@pˈ;.#82@pˈ;.#82@pˈ;.#82@pˈ;.#82@pˈ;.#82@puϲ Е>ڧؗw@S|=Xbv. gw&/KRxY@=xb}w_aLg5@:@}wA jҾ4 |C|tqAtt~8F%+BOy{/1|*&x~qHi<39YKyx=~Z{<4C-]v=ǠK䪆W=t1(*1{fsZq<)'.tq,g<=1:dc:EY`ŞQ6µn@P <^ë>ދzj\Is FBJ4퍍V]fY&E @_AMO@M { ҀmLCFĀp<5p qf81B|l%@Pc(&dD$pI)03с8">ΛB0OWY8oBӂu7"[OOXsyͶ\D @@#"L.)ܕ oeHZ]\--P#aH8#x, I/W` gGzp8}m'~y`7*oN@laD:,a^y?@U?>Jlv(0P1P: &8*W|v2>H㡓Q{˓} ~䶟˿qzl:4wמv1Cn$@={@{@ ;iJڟXȼ4G%pM`?f&oZ!)'Xƕnfxۻ9c广_q%@"xP 8X_p \}J׵"b9JwϿMr,,; !{̟O%Xm veoy£i:ZNgspOѡ Os\,@pj!z=O\tSq :g@ i=>ag<]Y=rQS]^ȃFXx{^{7JDFadx !![/~1a}w?E<1t2X R ?;ԅXgجHg1qE-rKGW[JJ]_p2,xA(_`wgK[: dx!bjP!Powo8zu[elUn$uEYfWUxzyGpA(-[Ea -o~e?, 3wK쿨Cn ]36[?w7^v@ `@r(Ѩ**p`T#nx| [Ae@Bn?48gK -0 $fj*{)%Ts~db rYK`Xſbg^:tdsm k˗>󕶁#0 Ha6#N?J ~` CaK? vY0* DV_݋{ *MۂbGbDfa'fbzB gK@}wgMPɤjP?QzEe5@h?#i@^ @yT<$sCo 4pmULg$[\w?@!40E{7oBSeYieD*JkzS_Aup,Zr<(ϰÈ,f炫^>3k3.nji^1Uhkۤ3'5tgCЌwۙ̈q=9'Α!=.!KO1p Wg^t<*f]@ 6 `_r+ >AhzɃPAz &5?ym7>?G*F\;s }S3OE {c~5U#/Pq[Ƕ7$썲 +g;K:f1|./(5{6Ia:Vc}y#ZTiy~<:Da4 @.o6{^6kp\?28fr7p11{YM͌Kx]kS\Db@x4E/'b_eiyC;= f%XV@T>*|m 1f0 :_"A?0hDֺfBF#VQ"~"gM굺Er:zjyڳ pVK@!޴~$0Cؙ+/_NL, )@0[f.[mFt3@]JP6uTY{>CG=Gwn>h"=U,Rt kmi5C94(9W" Cs1#?~܅=! hMBAP!B !b@ /,8h0?LpB$N.vz~Cǃ"0ȸ6f=OpbNBx)=m .p5W̗k%zv0b `VmETpv.!bLΓ-Y^"dBD@X +`F(XG!4`!3y'*'g>'x(@ Pꣿְy-cg=+M%]F&=hrA=Ṫ|ъ aq`"~,5$l_n;:/3Egj.:gq]p, L!a묋vH`٫:@\0 x&1ݢ9 zVW[ϊHI -}XEW!건q~H{UpF :(5UayӉ j+ËJIz8 (y5<_jS#1{\o @8UBh] JNm7 n侑٤01/DLkĘj D`c ` !pvV gXONTEMc|,WCÛ5=P$ 3.Ma1ES77:vx 8WZ8N+PYu&!iO {rb%T̩p#QU AAH83x@rF[IӝO-cMI[*͂vHmabf)Jȇ!_~m`3 I+I5p*6њYpsZ #H]s1q*GB?%ieY| 0Au7dA@0d<  8SmC@H;n#\uchLs8r+3@J:d rFVBdO4Ww?п}=ל[,6 *0@,5ݹY\{>7o"klclArO0p_8؃=`NM.Z3|"By% :@\7NÀ !Ȇe0Zw&]T& 9<ˀ2rly@%3App FCbpċlu:z4RYiǬr rˍn;>aRЬB^s B#D{U0- jކOb H (Έ;c7P ꅢZx#QReʝB;lNhDDj -1wJK@o'[yG 嵀bh U'utTVRa}~Ͽ/םfjo<+t΅ΑE/{>co޺m$|t@S/qFpQI7/wl*OĊP`iwX0/{|;2Clb{ tyxAv|&[.[)btss fA6q]:- x^6 105Oyo%,>;7iBV#祫}SN sz[wCOzC7kV!)3nkP0vT1pnZDPĒ|]" #KG& 9H DgbR6xYl?0\V?O|s4JTլuϽqB3Qi9>zhY@ZB6 TZ,}7nm(HjXC:I4mj}Boukp!wx吇FnJ߻˂{!f4i4YL[Mz[J u$fdYw:% ՝YoQd𤎘!B)e$gn0 ' G+cF+AE8F O3oa4b]ǀ3:Lw3 ~U4(u{<#tIh犪j{|#~ H6ђT{p#xY1_廲?/!B6 p6O'NޗO4-˧Ɓl)YVj\J4=^G>ZlI:{Cp=Y";W׿|}N\' HAI`H/?5E;_Xa;ΑHjB5@U*+Ͼ_0zQWe$@E2`(BSo}ċn W @%Pu^BDquFe%~;L,v QT;lYYxÖ8RpӼYsGk;Fl*=Ql}5MܔC=Ar[oYf9 BxB}1~3%@[ۋAJ {ߝcSR?̯hg&dDѴj!z~amMJ(@ OƒtE84&O~{d1u fr J>dݛ羾vIS,/8jTGq:_וq>CoXF{Nduع2H nvDڣE71J+ $}^凿 xlm[ b(k$ BtҤ 5 ZcGIt Dgz "dYTG,Jkt}L@.n^xq1X %(n4VD&C>K' GMSl4 |րlaoo/:.c9HW'R2LLCp:^pMUd CYGY Wx `1K¢IІa~fC;㻲≢8C !%Dz!5$L g{oTc[y AX:H{ \(,_|ug^ʊ ;.-BU'v.|TE'M˃VQp. vuW!O'rz^16"rPl-X TC袔.I-H P i?$ YE0\j/,.BE;4Pqg{'+@.bC *X? nr ؄x7]deY k^M`kPO~C S`c, Cˊ5{Y5Vc7QVp Tf] P|/ѫ'yAi' ZC[oefUMAWMy>VFGo+sJ&CӏDoyw7vHcN:l`8Bi>%`8˦_OZC'I7]VsRz,ȢA@r{!5X$a&@66 |V%B'}U'"@sY@Z)i>@^9@K<$0hFX5z*|c: ]:APZO'e(#ŕdkDP!AKl}#XGzV;TFgW/칅HNTf~fnm l k{ǓGeZKC$`QOLCwW酞1h…F 'V苺,{[o7맘m} vh>luCB? R̓ ,fL;ጠGv6He`h,ivMt BL*Kqm/U_'v `=$" 6.+unuygJx`{a@@E'cBq3҉hb 2 p]3xc:^#¥N0@0p.#/D.ΏQ 2,6/֗>pEf6$,"%+geG3nLۯW-u4&g.շW/Nbo$m|c xG‚*ًDYЂ]/z h8#'ֆ[[:J8#` eX@ƅc'Hрayy?$A+A2а$qb7]|KG:>aQ#oPH SI"#JtFO% M!䨖PPRXd%^p `=.f.xF54Y\wq@N]rIA(eU6hqM7۟?s;E hQU HXJd}U7tK|6L4vԜ!k vxٝXalKJfe@JPeG"<ɍ8wW~+M˶"& Bm,<yշxۡcG1ܦХhv6ʉ;Emel%+8ln@un_B :ZZ-5&v~LJCXo؅C =0KMΑ+(0ҹIT@.o[-e`* K{j+%rg;fWv^T|8dA5+^juCnMn{_ݲfnl !cB6-RYRH"9X''__^zn OT cC{n KeE~(@a# ģO|bs,͔#BHދr.󬀳h$h "ӉۻreR#$(Z V`EtTNo83%'s( [KpUqKQyzԌXA-4+~{\Y*%AF"k&9 ,[V@PiDp؇w{_nاj64Pv,繮Q0m2*@Eh-b>q㖦x*&a= >CJdn{zw,Kd ̞*\Nh~g>"(!n1bI*>/G L 6gKs(%̘DaOhpj1HtWp%;/5c ʳ-?(yc'V~O;L@.6PHQ£Ǯs;^vºƨKXH/dy慬7Gu y :8jEft} /ZG77<9.Zc,jm3_Vt'.X' ~jO10_\<֍}z{'?*aܘN)񮪪ɤ$@G212Ƅ ә\责,;l|]smX<:;H7goDvRq#bp-(•`iv;z?P~5?z  ##$) XViʖΑq:ΫQC*~iQd Y8ك`IQ$5ü-⥟)4"/45@D`QUpGBJ=׿q}~YŜgDBJXRҞhY $.vP9 eA.,moU!n6V:mVZ;+(c^;. *W5I{Qk8n댚 c7\?~[p"73%]+}2uv^fA Vkt{vݙqNem]Q]켭ͨ,M^SgoYA\ v_WJG_|?:_'D?wp`Y r2~ x@@!p*!2]vK6^b9ҹ|\XcTYʪ.,| Uhh/7.gU m&,cO "ȩ0z97 ?^[q"1:5vTԻ iĝy|)?ZE֩KORBn@ӼO @^:&(Q߸w\tT7 Ip6dDf}~|ӯƒE-l0YjI#}->Z0(gg9FEn@ g:Lix@y!Xiix޷<;c5ZtHWfVa3ʑZii"b""r%LCo(w7K#zsg$L*G ]AiTЅfV gChĈPBj=3gl&c F}PUiZu yH +{]m3p(U! sK ˃i)RJEZJBJTB*䳙4ϞW>fca`5cb,g)Y O$Y tX~^'Dz\Cˇ Y|jTn-zکcDy` LL3` J%C:Bx @PnN{>] [Y͜կ'QTh0NnBq埼÷' VOx<qA(G(T$m/tkƧ'JF^ R̛2>. սý;Da!ڋ0 |M'x#gttY! QS#{E÷(s‘#G6I??5 '~GQ˒PLYx R^H 4!(wyaCƺi_hK]X{OphdzoNk}bZVi#@$0Βl][>Ni",!0/O"ZkRݮR*2i|oZ[QdPQRgQJV+$L7SҥcǎyElq|:Q <;CA,Kg$irPޠB~?D~'_G+sslR`,Q2r:*zn`eYJ)]/Y ' WA`vkk`D#1⇰q2hIФ.@%%0V#nyw׾!9cQ $* G$giJb9'$}яdYhX!f3q繯S J Ă_i.5={ ?{ޱǭVcYyӟ~?\Dڀ-8ulNdx B db'7˳Q+uxL1A&Az[X4`N< 'T3FyJfy!j픠/_)Y^~-Us0ڡPwFITJ%jc5>ﶇ{tyxpM56N Qp`bжέ ҺQ-:edV r$ Or D'4r^թL>0i'nCޢ/sB,ރBDޙNx?q6 EU _~ `+M:J$D$2'=u""K-p$ĻF"*4|!L%<(Hf>p>njxϜ޿>|#40e,e #Yr/k_]>ZTEYKnp?WLyq3hѣ|g[Cy5i^ !"8«ݪ1?՟ҋo[nF3B#aJ@S]w|V=/I`Ta+%AJY,$x1y=tSU9 v,.^' @f3kj4&ZLpmU)ys\x@[F![ϗnۏ<5ۈ3F;,4(/cSY4 z/{GuHpuEfۇb9We$EQ,--"bh -aƀrJ``z9Y\eJ6 { MS: s_1 &RJ)hL1v=TUFeQسl3֛ ϺL@7z0m3aqj8Da;=g@@p?a0T@qm|uF&@oo}; ł֚0P{꥔u@87/X ITAXpc@\}LoE:륏<#@-`R /_\Ӆ@T;ݽ7}Uks58Ԅ K`Qc*Ax^Kԍ8廋:95 Q̏u*~O!Q(vf4#5q} txϮ;z˲ꕙ"4ZkNGPx0{,ZlC8*)x5Kn.RNׄGBݰ`F N UK@An ^/737-@ 5'OؚFX2b@Fs>>%'m0W}:IFҔ@|h1ti BX ֽ2˛BjPqcuE-{7tP<2H<$ g<@T;2Ł2MK*/켟oY3+2%D 2ߏG æ *<ۄzmɏyt>NT4򰈍j$t k?!8Jᓱ勉}D4J_I6uVW7C8 R?k*YDhVڧ(D]@`R,hV"Ĭ#Fl x` YULx+uCNl&Z g0_=X@n,8F q`pJqM_/Ѳ;+}鞌}&`a26D0-G:L tDh6k'68SeKŘ!<a5f -1Y35A<*8w0&0ı06Tj1)UUv~4m3^٧~YDְr(0XY$ÑqFaAw(Ga(\0B9/DHM97^X瑯~n2ߒ|JוVap+&cIiKb 8/+Dp~0}z d bSg@ԁ փ/t3X C(D9bJFA'IcU8oxmϱ$@T 뼃w8>8wu_uǝ?;/o׵5ٚTg"^z"ORÇnnĀ4'ҋxzd!FֵA&B_mk-ag* *A£b#)`šDa˝O>?A!Ȑ 03PBI=1":4TbL3f.fǁ`iNK%e~x H0@/[ZTH~Fi_*G:[ p7x;[KG<;1Kd * hzC{ 祔Z~08g{]['w&_k4~ rH&2.3K䌲KZ]+7AIn={Y:X2:Nni{yՁ(>" IB̻_:k-ib$ CULs\d\b4OS /֭g02ƕUƚVVcK묔ՅFCm?_f_vP leh4"TȰ[CzR^?{o5x%B JH8m_6; @7@#H 3=0lb1~!:/ٗG{۔Aۡby_߾'SvdarPk6ڄDA 5!H Ix\eE`m@Ԉ ̄:f͆>waqDah RJ)ԲJ͍q__>L;B\Ѝ2njU`p=w\a}i45o[zД!u,Ĵ0}($u !<+k50"o@~r)?A N iDN^"I|>s eN.U {^egWOFE67 Sf C2#b85qf^ҺʳulgzػǷ7{A\ƣt|L;!Mց9FZQMV轟>ud;2Wz>q$QJ ]ݼfsM@!(bT-&[(LQR*_ռ3RQ{Q$XH J`#T@ LƑ;V0yϊc\KD A= 2Q3;>7(< `Oz˟_ eЖ xhjpI0R$lT/}k5dž,a!AD"-+خ?]O;uĐP*Jާ>0\Jۭh<-MѰ!l phv)/}_G!iDP(.ߓC48<v7E%b=3V\HPuT&yf!$pPWO͕F/+ !YQU&q7 Cq{5iE2H(i*r-duEG@:(#%KIleUi:f5( zX6@gAn/~¾"g 7y8jD I#8.X +׳C?! $ˑA؍  b(]oʯY`O7q\2kөպSUC]_ 4G>wOVh +,@[)f٨*\jthyyvϠɹm o^,1X1^ 8Dc]XNGт}'?F "wOafCLReg1u,DP9X$`'x T^Vk:N 2vzo]`(2$g`r Q"Gb!f?k #f*iff/Ϗ*/iPSa7 00Nb6z*c!fk{4ZXZFeYa4 zxoz[?♪*(#QkHA{xC JX_߽ybv+u֡$ f=>`/nKR@: |˩ܘRqolTM{ufL-fsƛD3@aa:q9Zk|i͋r{xm B*ʂPb5-XHvKdS{:Z<員X9 X8>J-/,'_~"KDtf%#7s@`1_/),} nmh,BkΖl^,$&6_K V^E  PԹ ra06tz#+`1狋ǀC8'#h5jBr0kY Z:WpsM[bk9neVjZ,P*$VZJ8}^UpK8A>47Z0I>q\Om&`K,ļE lha8-яDK|mg [\™*Vmw[q `JkwZ5Zǥ7n@L"H VƕXWUܼ;߾z#bv9G[Ҵ(^YY-3*GgyiNvΒYQ՝h4q$hmIB DsJ/ d8PL7l(a/,/5J9L(rH$g'3l߈ZX#ՄԳ+yLQ N>n]X 5rPY~yÞ~vWHYY_/|*lC4acXu=TmmU%}yu#1ݩ䮏cH AUR 8DG:|~!t6T 97?+) h! P^#?r7 n&auPBYr➖WH!Δ0fqwhO;˫KGNlSO&z_?{axdyiS/{՛?šNX -ڀs'>?p}w)F|#,`aN%bŒ S88a@~W+7{FeuCgJtx*Ǎ$h7S|rKG'/WoSZ싑 !,DTPP8I+SU\yKx?* bps+}pWqBl:a<0oN__'E^yhefe̡x [ڙKG3A,@9sk( JĄfWo`';'x[M5N]4b.#'\5AJY7tڪ~lgύYhۃ4U5ݦ[׾7_Gb"`UJ]Q p0I"D@]=<àdv,d,RŐidb%mڝƹi}ⓥsna`(Ȓ`QU2𖳪%7쭏OHbr , ā[[./LO|>+PvAy_{>rG PJ9sBkm$A!fq4jAS ^9A 4әcuw_~ !@< p2;9!~s5ʷAD_(g!Zl+![[코Acii}б:CKC`=&KxXiX`'_᛿2BћĕZx:Ya(naY/;bQcPJ`' 3|@}`)"s?V2Ejv=zU²@qbR܂mξxˑ[#D#`am<=t)s~&[氚˔j#3!<(neunmӂ# )KbA,vdv H{k͛FIY]6Fh+C( ȯ?mZRHjP]kq?j03yniZZ($| LK3xWDF7KnOi J`wH8e|u^_ُ}ekA9Gh(,^00ƍhбi*P Jb!ha;ojJ]LtsFU3{i9WzL E7vG76ZxO?@{ h >bޏH@Zk5t 4pSӿ% r_gZ`&k,@CnZ{zêOGT@8"kzv9YF%M!BC3{s'"*T4_9~ϿM GO'3vsDRƭ)mX^eіY@/RؐU8j*c,%Dq Uh3Omhd5C@%lYW5f @4,!/5/p [ACWB9֮VɯǢVombQ ?.AP%e-]V?T@ǜ uݴ9]bSX. J2%Mý':XxBGt%./fM%{렍cBchڀD  x @Z`b楦Rlno{tfuRp CWbXtЭ&y Jkbu][,2O5/%M[!:VcqqŨ^_]/zѻ>;n#ߙbҖdL(D5E;S@>X9dUK[77=R4e04r[vPBm~F1 b?լM7BCkhϖ:.s1$vO,/ {ˋ('8UsP5'_q5"B*BM HݠWuAz7pj5X0,p@K.!PÁU Sܵ}bCffmcBž:X+l͠wKp[Udr|@fN$&مq4@ȱ ̦YDQ3hg/Z < 1|R]6`ADk  @MÐ.0K3'4ɪ"YK >N֍~#0I܋7X;+_;׏q5 $(…P1$yX ܯWUjj\oGy:4"%+ kw}^V :qR)dSX< Cny'_pX߈"_<+Zx"!j 71"UcG]Gh$DXj(:] ͋0)_t1Y{+O5p_̕pIwz4&D V۬B9tk=GiZt۽NG,_z->pr`AaKIG0 `^W^Zh7Gc h/4 V*\٨{.`ɧէ/ daxk|S5!{)o{~\oU-% k_bHFO.bS +CZL:gW[=qڞV+75,B!,^Z(/av/Sosϲl&nD@٠fpvRjkV 7FluR-/p}A?DBj-&(JrW_j0ԑG:frsqs $ ȗ-x~ A@iSiV_@#y{C{V `^CRE7DwvC€{IUZ_'QH(@0JP*QpP2L3kŲ,UFI # z+^kG"`ұ&zP"3X<|8OΝ 3@H Ѣ,ǒw]o-wU.o+Y%R2E9@$"c0Iwn,Nk0}Nx8+tZ?Їg)A`MÏ *kK%ܩG#~O?Vb8PP@Ô/oy;vjHa n<a_fɀM%j6 Go%rc\laf )ZX͎ig/sV]Wx}8ppP@S jd܂]a3)ey Խ+>Gp83~d`б#Etuc߾ګGN|ʶאF%*j r0!W+Cb\m%# q`~D ߶^ù dUSa@OQĎWǬٙ`4H[`! K7݊{>vۿBK’9FwOV9Rk,*&-Eb VI˼5S=74#̱>̠YK3ViJ_X(w8-Xh/G^?{ɕW0)%%Z6-q7j/{]'dn˞I8k8[X0KV@xt*ݟ\L ?q`a6-@ }H0m)?4/.  `Vmxɣ-IJL±ɔlO`/+ "ID0YfȃFQAw*N|L019٬A>,: `' Dt%IWù4P`]UJ FYteTU[ZȧY6I Z-N?Wr.TNwes4̈́Q1R>L;u?ԣ҇e=?qs 1 ƺML$ԇ3SӅQxp; ,"aܝ}@:X2D_ޟ܎?l,Q]B;ާ V3cDDw@6оk7| ,9YZ ³gO%6_ۖ2W2;@{y[ٿ )\QLs<h`BҞ C =/ B/dM|Jgo]QII г'A(dZx5+_,.-FSa0XɡѢ8vrZY$DKG^w|qw= FJG&_XGn1+$L2Ack]_dn d䋺^A/vzN+i/bI|; |Pj@9L7J(+v*mnUnP}K w,P C8ԍ[dZ(8eݞ :Qj4Q= ǟt|BQ-]2ȁZ+.r#|yۯ|mp1Ұfo`<ȅdd7vj[SA U͔DlOۛ?^>2ʠBs"gä#Xl$B|~y^* q(Ƈ =g"vB-_Ŏ7M>5O qORa. 9P걍+/QH;yԖ:q!W (< ;~oS3dY(Xa\LGiR cgA ?lw SRG<eܡآ,[n7s5d~]NR+ GD10 4uL2 { cZ8ȹ9yQxMht\nAsDFNp-4Z;=SFI0~frG=o kXĎ u]ۂe.0:UT2-@u˄[QՄ@X|42լBdYsL)3pL+?he)L`<a 3-{qQ֡dh~߿굯x"E57 @VٍAuX=ticiy7h- K&4y EB($WcQF 'T_‚NS/t8g@Ag7-21,H } _B5n\?;nCY[p6(n Y:IfV%Krb"/Nvv#PLaVc3u)@8U'+`+{?lp2*wz:͘=ctCLFX@F;rmR%8GίRwu9* ';K^sd8dXbL8 ͭkowK ^P1E( LS`1?ufWAoӗ p0^Hp4NӺGqZ/}K{L0$4UF5+d_}^jF쬑h1OCZ S?3f!kulfj//ϼkϜj?U:G喡BfE N¢9\` V5^t,q 6xl'V!u %6.td%Uh_.L/ !%I8H1Ƀcha'N Y2 k-.cMAo8=tťQ3c @ܲ@ g/ǰy7.,04t(ST xȳD0 7ϟfEDzpGLAIʈDzQ ͗~|K=zl<7`k@(zDo!`El4Ñrj!QΧ`X /Zu+u`Xs E.nukT/C< aʆH%")_vn^4:FXl3 uBX}Ķ5/Ͽ{;M++;9cU3SY^Y.ga BdsgN:PKܯ?-^qkVu4foB`G`5@| 4ր2s5 굠[O_W'֟׉¸:)SxJ[juΪ?BxVjWڍ僟z%Iřa̡2'^ٿ)Uj ĝɳ)b 9h6Ֆ`z+@,|C8.ϻV+:}!%Te*/)O~;l۲ QuW͊-,v߽53Y,2@;8[vj[o|vDMslCr&|ѣ A굉.q}aYΜpTcg[ǏHæ'``?. 1f%Hsus3+[+ّ_NשJ풻4x9\9;* e^Q ~}kI3(sd}ªw T[,K߳tF)PȤ}ijKW2U~@P$0RX0z742eQϿ܇ʿźdb{ k .w˟tٵ][8DX:t|k_?vNwq'w\Ӆե9&k+;n,b|dR( BLPh8JnBOҩs#r0Ro"9&ŷ/;G㻋,Y{L"1,-@Ikg+?SG%ܤA`(qq"8X)8E ,( Ha|8n=~[(9)dʭ:t`+dsNS^ӷ^wÝ_z0>}&=9HZ <@yV .KVZEkzZ@@0!L,o>TZӬwhfz\Y޷yjD'G{>zj{B=$͛ak{`㪾R&痝?3"<ְ1IDATLƹZ`` <}Y|ƱԅA0 mWi˻́*˞ O Q;˷-HzO"ˆtk'O' CR` DNV:q |͍ CkPpVl A z?x'bQ)ScS2uCA2jMє< ip86GCvZFY@8ac4܀<B_^oͅ4IdgZcX$&jd]7_s33AiG/EMC^"0ʖ*gSFEw v d<&&)2I_\dn [cF6/f{js!)863@8,& F$\4>a؍)Ee+/T4>@H4A069vإr ^8ZiLhzjv7@4wOUbDN 8,e2٘:3/?4@3C{_^]} +[^REΜM&Ao2z"tpܴ3 03| "A VXO=#.ͯ|[CK:c$$ ^'s j0!Bڈ~ lk,q8U% α# O{߁\r3}[!jf5?8P [|7FMo[CV?vh=ݖ]Vw#6讴k붗NFɁ9N +%`a,n;b\5y岂6kl67{4MKZyZE@ZtHm-_W_?&zpaTLT,n&I7/N=z6>8bh5!Wb[2bbZ%%V28KD )/-φ'^!~0R  HYrG/OGZzygTxMa(pɦT&r!B<ڳUQh2Ɋ<i:δڍ 3?|Ypӕ{~h,_GB aᙰӲ9ǁ`OKnZlbХ 4L8`!EJ ,rpO>W- Naʍj}-}߹\l$ euBKر0egrnzKə*=]X)&/^Em[?޷mdbeY 9rL)"(YtΟ7:뽭}-,C㌵}"~oiiqp4p*|~<cZ:0Lɤi t􊵫rwzޠf uXTqq pY;ս6 $&%@2*Pa9tKArD%2U=ҠLԲ;Wy*m#vx'󋷽aa?fzު[%09IM|(N O0W惀1012#$P>y*k'>{Gn{foKqflvukkk8(TYOwӯ4'x !n(߯e02QV!k؏/\ >{OqcX,a"'@ -,;=kۻq$[hfj&h[/ٙjy8ڭn663@h[-rc -˺<玹j 7cK6IR7,766@v姟~7u}kz)[ӽmUJQz!+ɑt-ZD16qTt^' \x^?* ~5D=)eΜ9cE2WZ.Faq9H;wB0qDL?ɻ~w<.zS=rgO򝷼7o-l 6nCB@%i[9V춙w~Ј|Ų55t&ӏ͗6y&Y2m6v=v6c5|d{Gdz3i19TocCBW~p@.B@C?i()X+%!iA!4_.Q?*H.c%obyUqjs',Lɨ/ʶ̫oK?{0^Mܳ9:#'+k7-xkUNuֈ^h|+onqx eaJR+oq`ZEuU.Ξ-Zp[KizLk/o`f /|$+wJVPC[?qz G;ΏfD (9 c<(i8@Jf%5={}\u*3Ӥ8s'Ys%#Hvì#kiThzlsm ,7J=pvc/].6)`ʷ}6IR &=)xz[ȓrQَn7 Bpw }N7# f ;-zaq!~V2=~޷,Jb r[N,3;d1br8+{`8HRyD$[ ›~[roӪRĒ5TU/ᦤPa&ZG#x^@ZiD{炕w/ʾf P/rTqrzl5ǣ@NeN>wSeA'^9d YC;өk L~uʏ5tpB/M0xJkfR! W19pg13v jA:Z՚^ٺog}kOpÕQ?[^Yyl9G'QfEerÜa0藨0#t_'9{gD:h]y$pdmb̂I3$:5l_яEBH;f@j iFPPG_-ӷo^0!LZ˝Cejng.ર0| Sf^ck:3A z?5ڻoU~xaj60[n9@`q~*_y}=@gt ]/! M<ψb;pPlOnOOk0YgVp>,Y d0!ҽ(^3^"nY4- P:9HƜ!AP%"W śoA-Lbw3vC,@UKxjD2Sp'nۮ_MdaL7WD{F<=Wi'& rn(@ Ok PkeϢun@]&ӬCAH^T\l@,_f|ʖh}#'BLx(8s߆_y -ޅ҉mKc[M;?:7rOx!5/aFsh1rHY~tLԳ@:W.L#XA*P(,aLKO̟z'#7+)<-0HV}rPbi,~ܓ HXԁ-3Ƭn88^d\lcH@*O$qCdž gt K eJ8|N_-7guY%Liq0A,Ѹu󿿎)Gv R0(rf}ij8Gwj/1=5t4jB> hM`qO0KXӯ+oS7^}"8XZjXRS/s[@X-o}},4D:zϨJ?. lAܩp0L>oQ( ]¤(rkęY8 9H#Я׶n%n_m$PT@}s-qb8(`` TĪۈbp3GoMf7]9M◊;r<Øs32Hqgӧ]^ϴl׃am1!==7mw[-,s9GI-{-_xbrN:@ 㕺pEO`cS2U$HnT6-Z1)(Wk),XkABMaa9=^_Q Pʙ+I 9_]@sE * ;=~moӍH[ 8G% MM"IRPD>ܫ;]鷮O_k]~ORuqxON䗱1@&:1bX E/!x5ReUS ; au>5p5 Z NY $4K|0Ɛi(hQ;L1{Lz|Ih#,ìs򥲴[=]X0̴[:+~fCa \k*}C@8^u຿t=gړ^ +۩obNUҎヿ񎏿pH}Oӵ1 q)%9K.f)Gb[IT$Nb,PfYmzyrv؉0 2SbWcX%n| XڂYF8aᙪ 1ǫhvC/˦_6 V2G0#4;MUX)Qc 8tE ю[I2ƉGmM=ϋY<``!٪p0}_~䩇,@{f0B8̶ٗ1( 짘j j~ sIF@O^霬N @n6P-?.A$-{-X6 \!~ajE$*ƻ>yYߣl+YU^PF5YmYū?FfmC^b] gV$d8 #1Y?gI.ђpVq]2 47(C5]""V&R,aIPtՂXBC\|z?"s X]žFX)au* v`  H:cUYi>ܘ^-EGڵ؜Fd0-C_<Ϝ#.C,t,xDF6X˵&?-~gQ[ I>*ڡĐ!ɭDweKgɂv:ʅcȝi8s8Ja'΁\߻ɳ/1&@8@jaIXiL5)Vk_x_xw ǻm6 ~=r" NbmbSZ8pȁ\ړNƌ'ok[q8*8QG;ը(Þ0Netɿx08<4Gv_03% %q .T+^q/\u0eџQ` "^XgT (۸[-_~f-\"{IiJpvP)7t^{o~[24U@^N"jFWu/gGDR /EU,K4E vIR{L Gds F+pM,2_zg%!IXdm>:!q΀G+97AD7v9NxZZ X_G)@fc7`K!Kd@H& RKr)?S?󏞰 ZGJK !0߼8h_\`/ a4ɹCЬu@Xv<_VSY][G,c } ۾Oijg5/@2N*/¡XDE/}&4x9 Q55 aoݷo/):in3OJ`RKd]r|.Wk+Io5L̠rdd~͖&O0Tb8=!:JS%8yQiPuظخ'( }!ŔAv3^wzt% M$,Yu"es= vWylȔ:HCD`)h 1&͠g'''kFfT2 A (MH$Y "73Is(.|=)> :j:U,801vSt>n+cW,.F{?pcn 0M/l-Ə,rGѢ/%O Lʢw|7{V\Һ4D|\,r_9 F K-h眛9VD :Q 1j5hi 3pr?S RSZY[p‚38&5,xAވgo:V|)`9b5$Uvjs>0iP7 6-ϜBgR<)T%uW[{|H] (fSy*\ހ_ Pr #QXe-)3?;?$M$`EgW,NY^oT1p00@٬5A5I V3+?~Qr$cK ~w"]2iB,Ry'*z r ڏ}~o4徭3@\øhS{T(zskvo8Az3W(?/o9s0j;"urm VCgPc>*.f]tj0L2^z8ba<Ҽ [<אu(P$V t[LNv'km,)텃haOyWvXJm孫W}_QmlCpp ! *a-]~nyd9ZMthg G 8i0  xMd^u;viܵ/eoh>(RooG7}LWĞdO1XXĬpՒ;x(Q309 1Yr:OøLnĩW︢|W{Z(je?r.k`CpMg8-΀Ȁ) Vpb/~?.L*y[rsVs~ bDMԋ^#({*IJLi6|]#Op8nv`gӽqG  AszzwBY=|j6…,bP9oDjʘ10QX}ǎrwЯfe8z|i9 v>;$5wʍ#{vk}|g8;*a{)4[Hf.Y p(u.=/] 8uZȀCx@Hց3ϡ5xxT0əM5Z2(UJrI'.\`w[vdl\ YknI>P{Glp3'.B9ߛ 8 "*cpʋmܙbsCh^:p2EU>k84`8Gȸ%2JaXN=/ a.5obia-lf=/ʕzÒ3{[oP&&AE'!KARQ5@XvqwB4 GQ4ǔȒCؙٙpVLmfv,Pb9Vڙi\ҍ.2*<F`c|x 3{-;k/edU׋Ha>?u̟`/u0e2.iDvi&0 g4 sUȮ1{1wZ'i\TJNoƍub6Y\@É2udOhǙzdCBs's4U1,B Lg Gg*qxQ$sE|lйK6?cYK8/l`;@1ZړjXAЖ s~|#sn" q!!"\ͽfpϸf=X̢Ih7g2hɊZ/!v)8 8vMБ@=1 pb9?$N`P2Gjgt8dwj+Aga' *C-a}wGۂlqSԂ'dȘᘽApL\z ,,FB 0_̟`?W Zvg!PYyؙej\!=q8vN]̂Qmypeܢ=2[eJ5h5bK~Q0hX> 7|vOeInRU`bq~~!w@!ms`p9&SQ+B:;>aR!=8yԏDd5rT*=$v~#:7 (Ep.-lhD_eO Cճt݋gs~|6gd>D32؜9̹6gd.9s. s͙s lΜ \`s\@32؜9̹6gd.9s. s͙s lΜ \`s\@32؜9̹6gd.9s. s͙s lΜ \`s\@32؜9̹6gd.9s. s͙s lΜ \`s\@32؜9̹6gd.9s. s͙s lΜ \`s\@32؜9̹6gd.9s. s͙s  L %tEXtdate:create2018-06-08T10:50:43+02:00|K%tEXtdate:modify2018-06-08T10:50:43+02:00[-tEXticc:copyrightCopyright Artifex Software 2011Ŵ1tEXticc:descriptionArtifex Software sRGB ICC Profile 2tEXticc:manufacturerArtifex Software sRGB ICC Profile\~=+tEXticc:modelArtifex Software sRGB ICC Profile1(IENDB`aplpack/inst/src/R.pnm0000644000176200001440000014416313516603655014371 0ustar liggesusersP6 150 114 255 ü¾Ŀ}~{|y{~x|~x|~y|~y{}xz}w{}w}y}y|~xz}vx{uwzsvyrvyrvyrvyrwzswzsuxqtwptwptvpuxqy|u}Ŀķ~}||||}}}}}~|~{}z|~y{}xz|wz|vy{vxzuxzuxzuwytvxsuwruwruwrwysy{v|~y~{}˿}}}~~}}|~{~{}z|~y{}xz|wxzuwytuwrsuprsoprmopkmniopkuvq{¿~}|~{}z|y{}xy{vwztvxsuwrtuprsnprlnojkmgjkfopk}~yɴ~}}||{{y{~wy|uwzsuxqsvoqtmpsloqkoqkqsntuqyzv²~~|{~z}y{~wx{tvyruxqsvoqsmmojjlggidgidrtoս~}{|xz}vy|ux|tw{tvxstvqqtnnpjjlgfhccdakki~Ȫ~|{{}yzww|utyrrvpsvpqtmmoiikfgieijfmnjvwsȵ~|~z|yyxx|uwzswzruxqqsmlnihjedfaac^ficz|wѳ|{x{~wz}wwzttvqqsmoqljlgegbac^`b]kmhү}zxzx{y{y{y|z~~}}}}}~~}{{y|x{}wx{tsupoqllniikfdfabd`hjfoqn{yv}ut{stzrv{tx}vy~w|z~|~z}y|xzvxtw}rv|ru{qu{qu{pu{pu{pu{qu{qu|qv|rw}sw~sx~tyt{w|x|x{}}~y{~wy{vwyttvqoqlkmhfhcab_\^[bda{}zÿΨ~|sxqotmotmounqwot{sy~w|z}}|zzxw|ttzpqwmpuloukoukotknsjlrhlqhlqhjpfkpgkqglrhmrimsimsimsimsinsjnsjotkqvmqwmqwmrwnrxosypuzqw|szv~|}|}~|z}wtvqpsmmojikgegd`c_Z\Y_a]y{xֶ}tyrnsllqjnslpunrwpsxqw}v|{~~~{|~yy|vuxrrunoslnqjmpikngimegkceiadg`cg_dg`eiafibcg_cg_dh`ehaehaeiafibfjbgkcilejnfknginghnfhmfingjohkpimrjnslpumrwptyrv{tx}v{y}}{y~wuzsqvonsmjnieidac^]_Z^`\kmhʮu{smrkhmfinglqjpuntyrx}v~|~z{~wvxsrtooqlmojikfehbbd^`c\_a[]_YZ]WY[UWZSVXRUWQTWQTWQUWQTWQUWQUXRWYSWZSX[TY\UZ]W\_X^aZ`b\ad]`d^`e^af_bg`dibdibejcfkdgleingkpimrkotmpunsxqzx}}~}x}vrwpotnmrlikfdfa]_ZWYTce`}Ÿquoimggkeingnslswpw{t{x~»ƿƿ»~zwztsvopslmpigjdce`_a\\^YY[VUWRQSNNQKMOIJLGHJDFICFHCEHBDG@BE@AD>AD=BE@CF@DG@EGBFICHJDIKFKMGMOINQLPRLQTMRVQTXRV[TY^W[_Y\`Z\aZ^b[_d]bf_dhafjdhmfhmfinglqjpunsxquzszx~~|x}wv{utysorlknigid^`[WZTXZUdfcگ|zptmileficjmgoqlsvqx{u}zü|~ytvplniegb_b\[]XVXSPRMKMHGIDEGBCE@@B==?:<>9;=8:<88:67947957947947968:69;68:68:58:59;79<7:=8<>:=?;>@;?A=?A=@B=BEAEGCGJDJMHMPJPRMRTOTWQWYTY\W\^Y^`[`d^bgadibejcinglqjpunqvosxqv{tzx}x|vqvoosmlpjdha\aZX\UX[Vac^~{Ҵsxqfkdehahkdmoiqsnwyt|ý~zsupkmhdfa^`[WYTQSNJLGEGB@B=<>98:547213..0+-/*/1-573?A=JLITVS]_[dfckmiqsoxzw}|}|z|xvxtprolnjgie_a]VXTNPKHJEFHCGIDJLGNPKQTOSXRW]W\a[_d]af_chaejchmfkpiotmsxqw|u~|}}{}{x}vqvojphdib_c]Z\WSUPZ\W}z̬uzsdib`e^dibkohsvoy|v}z½þ}ysuohjd\^YRSOJLGFHCBD?<>967224/24/683;=8?A@;8:524//2--/**+&+,'450HIDbc^~zînqlZ]XMPKIMGNSMUZTW\VX]VZ_X_d]bg`ejcjpfmsioulsyozv{|ytyrlqjilecf_]_YVXSUWRgidɩþtyrbg`_d]dibjphpvox}vĿþvxsgid[]XOQLEFA=?:79424/*-(&)$*,(:<8QSOiif~{ʼy~xhmgX]WOUNNSLSXRY^X_d\bh_djahncnsjsyow}s{x{xw|tqtmjmfbe^[^WRTNRTOgieȨIJkph`e^`e^fjdmrktxr|z¼xzufidVYTHJE?A<9;6450/0+-/*3507;7@EBTVTrtrں~}lqkbf`]b\Z_YY]WY^W]bZch_loflpglqguzq|x~yx{sqtmjmfad]Z]VSVQNPLdgcͥáy}wfibcf_gjcjlgpsny|vuxqcf_TVRHLH?D?69413-./)**%&&"12.W[VδoqmX[VTWRX[U^aZce]fh`ilcosjrvlvyo{w{wtyphle_d]Y]VQSNMOKab^ϬýǾüy~waf_`d\dg`lnhtvp}~z¾žz}vfibUXPFIC8;403,),&!$ &)&BEB|{ںgic^aZ^aYcf\hkbmqgrvmwzs{~wwztfhc\^YVXSLNIKMHlniÿŐingX]V]b[ejcnslxzuþĿlniTVQCE@9;624.),&!#(*$KMIvxtѿѿҿͮqtm^aYad\hkcnqisvoy|u{~wvxrikf[]XQSNDFANPKɠǜgleV[TZ_Ydhbptm{y¼z|w]_ZJLG>@;683,.)&(#(*%350TVQ殷ďΡz|vlohgjcilenqjsunx{t~uwrce`WZTLOJGIDMOJײΛfkeZ_Y^c]glfnrkx{trtoY[VGID<>9350(*%!$&!CE@ܟ|~}}~}||||||||||||{zzzzzzzzzzzzyxyyyyxxxxyxtssrsv|ʚuvpbd^fgalnhsuoxztz|wuwrdhaUZSHMF?D=dib鸺ԣsxrUZTZ_Ycicosmy|użmojTVQCE@8:5.0+%'"572gid٘|um}hxeubreto~ӯklghicopjqsnxzu{}xrvp`e^MRKCIAFLEotn֡չsxrX]WY^Xae`jniuysžhkeORL@B<572+-(#% #% 572rtoڕ~­ڵᩰѤʢʠʠˡ̟͟͠͠ʟɠȠȠȠȠʠʠʠʠʠʠɟȞȞȞȞȞȝǞƞƞƝƝƝǞɞȝȝȜȜȜɜʝ˜ɘœ}wo~hwbq^m^lmxþvvqopknojsupy{vzxjohV\ULRJ;B:LQJݸĿſ\a[TYS^c]loiuxs}þhkdORL@C<571*-'!!CE@ےwРœŸƣʥ̢ɜÔ~t~hrak`jgnsyҤxytopkprmuxrv{tsxqhmfPWM?G=BHAdgcʠћbgaV[UZ_Yfjdsup|½ĿikePSL@C;470(+$ #"%SUPےwٺ‌coYfySauRbvScySbzTbyTbxVbxXbvYauZauZ`uZavZawZawZawZawZawYawXawXbwXbwXbwXbwXbvXbvWbvWcuWbvWbuXbtYbrZbrYbqYbrYarYasXatXauXbwXczYd{Ze}[f`khroxz~pxdm\dyZasgm}ծ}rsnruotxqx}vsyq]dZIQG>D=CFA人ۮv{uRWQY^Xchbnrly|wñkmhPSM@C<581),&"%("NPKܓy٫Vcz.:O%2E%4I&6L'8M'6N'6O(6O(6M)6L*6L+5K+4K+4K+5M+5M+5M,5M,5M+5M*5M*6M*6M*6M*5M*5M*5M)6L)6L)6M)5M*5K+5I+5H+5G,6H+5I+4I,5J+5J*6L+7N,7O*5O'1M(3N.9T8A^JTpbkxu|go_g{YasT[lz㩪uxruwqx}uxvltjV]T?F>7:5mnkǦ͂]b\W\V_b]jlgvxsŹqsnSUPCE?692+.' # #JKGݒxݭYe>JbJWn`oevbscrcrcscsdtfudtbrbqdsdrcreserdresesesdsdrcscscscscscsdsdsdrdrftdrcqfsftesdrbp_m[hVcP]yITpCMj>Hd@;14.')#/1,ܔxܭ[gGSi]i~ɧٮ߰௽߮ޮޮޮޮޮ߮஽஽ᮽ⮽㰾䱿㪹ܡԚ͓ǍujxXgKYxLYxeqyjt[czLThBHXW\jڨzyv{uzyuysUXS894?@;޷ƍUYRUYQ`c\nqjy{v}zY[VGID794(*%-/*fhc۔yݭ[gGSh]i~¨ط᯼ܯگٯگگگگܯܯܯް఼߰߱߱߭ܦ֟Л͙˘ʖɐĊ~rapM[|TaeqnycmQZoFM^AGUcgrʙ~|z}xx{vce`FGB;<7^_ZҦļѬv{tQVOY\Ueharun|ɵhjeMOJ?A<02-!#WYTܕzެZfGRj]i~å樶ӛĔęɝϖɌ{etSaR_kvhsXbxLTf;APHNZ{}xy{vqsnTVQ;<7@A<əϐchaRWP]`YilewzswysYZVEGB461')#!#,.+ݕz߭[fGRm]iĆĆÇÅֿ﫹֌sgrdnfqhqhphphqhqhphphphphpipjpfldjiolrry~kzZg]hbl`jPXl>EU>CPcgq⤦}z~{^`Z8;413.{yW]VTYRbe^orj}yϻhjeNPK>@;.0+$&"^a]ܕz୹[gHRn]i~…ĄńĆÅǬ޺饴р\iJVmDNeDMcGPdHPdHPcHOcHOcHOcHNdHNeHNeHNfHNfHNfGLeFKdGKfLQkQVqW]zbjktr}y|zx~{jx\hamfqV^sBIZ7=KAEPǙ|~zfic?B<,/)}z⻽mrkRWPX\Ufibtwoʮ\_YFHC9;6+-(/1-ەz߭\gGRm\h}ƒƒҫڣЃYf7CY,6J*3F-5F/6G07G07E06E06D06E05F05F05G05G05H04G-2E-3F06J5:N:@UAG^HOgS[taks~yujyr{fsfshtZbxFN`5;J.3>鲳orkNQJ.0+lniմchaQVO\aZhlewzsÞorjQTM@B<461(*% IJHەzܭ[gGSh\j~ҠΊhtFRh)4H/'*#.$.$-$,#+#+","-#.#/#/"/".!-#. (5)1?3:J:CUDNaQ\p`lr~{sixix{xmzep\dzLTf9?O)-9jnvɕxztac]13.^`[ʯ^c\QVO^c\kng{~vοcf]LOG=?9/1,!352tvtەzۭ[h~GTf\j~~Δz]iALa&/A #"-;AJQV^W]cV\aW\_W[_W[_W[`W[aW[aX[cX[cW[cUZaV^dXagW^fRYbHP[:COFzemuR[eMWdS]p]ip||bq[ko~Ç}lwdnPYk8?O(.;HMVÐ}psl9<7NPKsupZ_XTYRaf_otm|ȫ~{UZSEHB572%'"ikhەzܮ[hGSi]iNJs~]f|DL^+1>$SW]ڠltWatYe|jxwUecr„ƒp{irT[q:@R)/<;@Ky}ۖuzt<@:GLFeiczyY^WV[Tchaqvo~ĢuysQVOCF@350#% }|ܔyܮ[gGSj]iƊt]e{EK],1>$[^d媰nw]ihv{Sb}VetƒvmuW]u=CU*/=26Bjnu矠x~x?D>DIC[a[w|uX]VW\UejcsxqptnNSLAD>23.$&!"$ ܔxܮ[gGSj]iNJs]e|FJ]-0>#Z\b퐘lwiwxƛWeN\vhuŠ|owY_w?DW+/>+.;^bj쩫zyCHBDICX\VsxqW\UX]VgletyrҿorlMRK>A;/1,(*&573ܔxܮ[gGSj]i”ȉr]e}EK_,1?$Z\cȃp}ˠbnP\v`kÍpxX^v?CV)-=%(4WZbﳵ~{HKEHJEZ\WrwpW\UY^WgletyrҾmqjNRK?Aܔxܮ[gGSj]i”ȉr\e|DK_+1@%Z\cޔtϥiuQ\v[fĐt{Y_v01,+-)EGDܔxܮ[gGSj]iLjq\f{DL^+1?%Z\c靧wԪkxO[rWc~ƒv~X^u9=P!%4!$/X[`EGBMOJjlgŧx}vY^WW\Uejcqvo~ѿorlNSLAC>02-,.*HJGܔxܮ[gGSj]iňq[fzCL\+2>$Z\cꞨyٯixJXlSawȔ‡s{UZq5:L#1%)2`bh>@;PRMxzuЬ|z[`YW\Udibpun}twqOSMAC>13..0+HJFܔxܮ[gGSj]iňq[fzDL\+1>$Z\c眥}dsEUeQas{ΘdžluNTj16H -+.7lmr񼾻8:5VXSܱ~^c\X]Vbg`otm~|z}wRVOCE@461/1,@B?ܔxܮ[gGSj]iljr~]e|EK^,1?%[\dܖƺYi{>P]SeuzŃ՞̅emGMb,1B'45=}~𷸶|340ac^꺼chaZ_X`e^mrk{y}X[UIKF:<7.0,/1-ܔxܮ[gGSj]i–ɋt}]d~FK`-0A'\[eɎFWh6IVZm~‚ƄǂǪݣЅ_f~@FZ%+:>@Gﱲxyt/0-qqoĿgle\aZ_d]kpix}vó_b[MOJ?A<24/(*&ܔxܮ[gGSj]i˜Ɍu}^dFJa-/C([[g⛣ó7HY6HWdxǃɃǂ–̮ߡ~V]s8>P#1 NOUꪪnoj++)}Ȑmrk_d]^c\inguzsƺilfRTNCE@794)+'xzwܔxܮ[gGSj]iNjt}^eFKa,/C)Z\j䮶ɐ|.?Q?PapȅȃĄɡխܘq|KSg/4E(cciᤤ~bb^11.դw|udib\aZglerwp|½żz}wY[VFHC:<7.0,fhcܔxܮ[gGSj]iˆr|^hENb*1C,X^lݣ‘ŻFWj.?SQbw}‡ĆƇշ窹ֈ_jBH\%)9~ϣuusSSQKKI㻽}}{kpi^c\ejcnslzxǾbd_KMH?A<571OQKܔxܮ[gGSj]ily]iGRf1N_!0ETd}wɴ܋`j683RTOܔxܮ[gGSj]ivhwhvaoYgYe~eqsvwxxxxwwvvwxz{||¦Ҽ吞2BR!0BAPfpθktIPc,3C" (*/EEC>><ﴶ|~y}z~|punejcglepunx|tſrtoTVQHJE;=8FHDܔxܮ[gGSj]ivetbpl{wxŦҸyBPb .A8F[dsǭڿ㟪u~NVh19H , \^bط__]FFDffdѡ|~y}z}zxkpihmfmrkuyr{Ľce`PRMDFACE@SURܔxܮ[gGSj]i{esYehuĜÜĜŜƜǜȜȜȜȝɝʝ˟˟ʠʦЬԱڸݝbp-:M&:@K!&2  +,1զopl..,rrpΚ~{y{v~|zxpunjnhpslxzs|ýmojWYTJLG?AIe/:U'2K%0J$/H#0H#0H#0H#0G$0F$/E#/E#.E#.E#.G$.J"-J ,G-D!1E'9J1CSGXhhx㫺ٞȍx\h~JSg>;EFB豳}zuwrvysy}w{x}~x}vrwprvox|u~zĽľy{vce`SUPJLITVS}|۔xܮ[gGSk]i}ÏŽŒ׶ి֓oxRYqGMgDIcBH`=CX7=P/7G(0= '2&226mmpӬ~~\][/0.mmkӢzzxqsowztz}w~{}{y}vuxqwzsz}v~zĿz|wegbTVQMOJY[Wړxܮ[gGSl]iĢծ߯߬ܭެݬܮ߮߬ݩۡӘʐËǮ۪ҏgsGQa3Awwy̫XZX243VVWʎturrsovxsz}w~z|~z{~wx{ty|u|x{þ}zhjeWYTOQLY[Vړyܮ[gGSl]iæ׳⭻ڭڭڮگۮܬۨآҜ̖ƔƓǍÊȆȥӘvMZj.9F$/%&)#'"%003/3CCFS`bk~Ʀnrk471796tvv춶}}{npknpktvqx{tz}vz}vz}v{~w{~w{~w|½supac^UWRVXSnpkޕxܮ[gGSl]iِtjvjvjvfrdphtjvjvjwp}x{grGRj3E\LTkYb{grxzrgws|iw`mv{xyu~pwkrkrnsntx}ʭ}~yUWR02-%'$gifӧxzuhjeikfkngorktxpz}v{~vz}v}y{~~u{ulqkejd^b\ehbܔyܭ[hGSl]iЕ|^iAI^&-="#,9?FMSYRW]QU[RW^RWaPVbOTcDI[;AUBH]NUl\f~kwy|jzgwo}lzYf`mt~t|krbiagho|pqlLNI,.).0,lnkݡ{}xjlggjchkdmpitwpvxrvyr{~w}y~z}}|w|vkpj`e_`a\lmiْxܭ[hGSl]i…ʎv\f}@I[%,;"7=Dtx}~bgwQVhNTiT\s[gp~xfv`owo}YgHVsZgyyqyho`gZcw_hw|߿¥ghcBC>')$02.dfdⱳ{}xfhcdfailfloioqlrtovxrz}u|y|z~{~y~xrwqlnhijfkljsutޖyܭ[hGSl]iljr}^g}EL^*0=$QT[֋chzRZnVb{dqvvaohvo}jxVdCQj9G^>MbP]siut}fo^hS\rU]lsy}wQSL23-'("683~߸moj`b]egbikfloipslsvovzsx}vyx|z~}|y{vtuqnolehffjhtwuyܭ[hGSl]iȉr|^g}EL^+0=$[]cחgnXcz\im{q\jguvm|ZiEUl;Ka=LbGTlTa|coq}ycnPZsENaIQ^ipyy|wehaLOF*,$*+$LMGĿmnjegbdfafhcjmflohorksxqw{tx}vx|u{y~}z}xquqlqminjikhjmlqv|}xܭ[hGSl]iȋs~]e|DK\*0=$\^cڒdn[ggtxYg^lw|p`pP`yBRl8Gd7EdDRrcq{gsS^xDOcHV?HRFNV19=$$*0,UYRʗuwrdf`^aZ_b\be^ehajlfnqjqtmquotxqv{tx}v}{}yvuyڭ[hGSj]iƉr]g~DK_*/?&Z\dܑam}hruq|Vdlz}ydsVfbqes]kLXkCM]KPXaʩjlgVXSVXS[]Xac^bd_egbikfkpinslqvosxquzsy~w}wwڭ[hGSj]iňr]iCL`)0A(CFNludk~gnt|tWeesv\l^mhv`lR]rCL^:CRT]gĖprmbd`]_Z[]Y]_Z^_Z_b\cgafjdhmfkohnslrwpw|ux}vy~w{yyxڭ[hGSj]iÇs]hCL`(/?%/2;Z]arsvz{zz{x{|wz|vy|vz|v{~w{x|y|z|}|{u~gn~dklt{\i\jrgw]l`mgs]hLWj@IZFO\r{̡tvsWYUTVQVXSY[V[]X^a\be_cg`ehagjcjohnslqvotyrv{uy~w~y|zxڭ[hGSj]iňr[f}AJ^*1@*48@_afy{}mtbi}ckq{o}_mcr|xdsYghvdpT`vGPc=ETT[gڼhjeVXSQSNSUPXZU\_X_b[ad]bf_cibfkdinglqjoslsvmvyqx|u{y}|~xxڭ[hGSj]iƉr\hDL`+2A)6Bmrt|mubk|bknxsUdfwyzixZh_mdrWbyHQe?FWFLYعprmTVPJMFLOHQUNTWPUXQV[RX^U\aX`dZbe]cf_dicfkehmgknglplmtwozryڭ[hGSj]iȊq|Ydz@J[(/<!9?Bpvt~}zztyukqnaggX_bW_g[drai~hrvhw\mou[i]lft^iR[rFMa>DSfjuкvxr`b\PSMILEJNFLQHPTLTXOVYRX[TY^W[`Z]b[_b[`d`bilhso}yڭ[hGSj]iNJs~ZezAK[*2=!29:`fcy~y||w{~uy|svzqswonslingdid`ea\b]X]XPUPGMJAHIDKPNUa]dwenny}Zibrzjy`oangs\f~LTiBHZJO\wyظtvqce`]_YWZTSUONQKMOIMPJNRLOTORVPTWQUYUX_bblzlyyڭ[h~GSi]iƋu[f|CM],4?#)01KQN^b]be^^aX[]UWZQUXOSVNOSLKOIGLHEIFBGB?C>:>96:74:85;>@FOZaqdlirvbpZjj||gv\jkwdnT\rKPd?CSTXdǭturZ[XNNKIIGFGEGGFIJGMNILNKNSW]ftkwyح[h}GSg]iȋrYezAK[*2>%$+->C@KOJOQJMNFKLDHKBFI@DG@AD=>A;;>:9<97:7574/2/,/+,1..33=AG`drhmelnwu`p]oyq`mcofoahOVjBHYHM\nq}~~pppccaVVRIJHFJNU]kgry׭[h}HTh^kƉrZezAK[*2>% &)497@B?AB<==6:;49;38:247002,-0*02.463>?BG{qvahlv|[l^ptvcrZhitclT\tJQf=EURXfۓyۭ[hGRl\h}Njs[f}AK^)/>&Z^dckgqo|gw\mfy|l|[jcpdo]gRZqBJ]EK[ptڒyݬ\hHSn]i~ÅŊs~XczAJ]+2A([^f𨭼zemlw|{bsYiyzhxXgbojwVazGOe?GXEK[ܒxݭ\hGQn[g}Ċr}YczCK^,3B(Y]e㓚ajfqro~Udkz|rYh^liv`lR\sCL`;BThm|ޓwܮ[gHSo`k‹‹ŽđƐŎˎr|\e{EL_,3B(X[dlvcniuz|^m]ktȒɏƌÍÏĎͅo~dscqhu\hKVkBJ]JQ`v|ܓxۭ]gT]yvͮ߭੸ܪܫݩ۫ۯݳs~]f|EL_+1@$X[d۔gr`ko{v\iwѱⱾ㬺஼஽୾୾୽߫ۢсeskxbnS]sHOc:@QPUcܕyڲmvowӰݯݮݮܭ۬ۮܲݵޥ̈bjCI[).=&Y]ft}_iitymyЯܰޮݯݮܬۮܮܮۭ؝njybmPXl>EVBHVrvܗ{Ѭyؖ˜šÞck~AHX(-;(Z^f덕jsfpnxy ŗlvYatKRcCIXFJVؖ}lsioovlviuiumykwiukwlwkvkvnxjsX_pCIX+1=%Y]dɂclhruzhsdofqhshsisjsjsirjsjsisitjukvjugqck~\dvRXiFLZ?COjnxחzxoxahRWlPThQVkKSgHRfHSgLWjKUiIShJUkJSkIRiHRgKSfMTeKQ`@FS-2="X[a뜣elendn\h}MXkGQcFPbGQdHQdHQdIQdIPdIPdIPdIPdIPdHQdGPdGPcHQdJSeLSeLSdIP`FLYBFSMQ\{~֔jrU]qFMa;@U47J68J8;N38J08H09I2;K2;K1:J2:M18M07L18K19J4:I8>K6;F)-7 XZ`u|bj~MWj;EX1:K-6E-6D/8F08F07F07F06E06E05G05F/6E/6G/6G/6G07H07G07F18G5'm7$t7,s1$u2"w2&w3#w2"t-"r- q,n,p,r.q,"t/&w3(|L7jGnOqXq\qZqXqXkX}UEu7*u.#v.%u0 x0"v-"t.s,s* s,s1q/s/ s-p,!n-#n,s-t-q.o.!t-"s,"s,!u0!v/!u/!s/#p/"s1"x?(f}~{qme|ZoObF}P:~N:_DfK~cDyP6l4*k0$l4 p9%t:/p2&p3 s1"s2#s0s,p-p-l-!o,!r,"s-&s0'v9,aIjQkSlXq[qUwXrZm^hWp:,u0%v0!t0w.!v+!t,!s* r*t-r. r,r*!r+"p+"n,"l-n-q,q,n- p,!t+#r,s.t,t-u1!t2#v/$s2$zI6s}}~xtuh`oO`E~W:{S6{M4wG-x?)v7*s8)w6#x8#{K6wU7vS2yN1tB/vG1vL,U;`O}VBsJ9qB1n7+q.&p*"m,"m, n,!r-%u0's2&s6+vA.kPn\oUrVpSsRvSuWoWpWsG3s.$w0s.q-u+s,l* o*p)o(!p)"p+"p-p,n,!l-"m,#q+q+n. o.r,q+!r,u- u-s.!p/"w.$w0&w8-eFz||}v~wuqhbuUfJS9{K1o;%q7"r4(u3*v7,w?*xF-xC-wD*u=,t3*p/"r/!s2!v8&u@+vI/xJ0xI0tA*}S1[>gKnVoXmVdLm60o,%m*"n+"p+$o,'p1)u:*t>/{RBmRnWpSrRqNgFdE~^G}ZDbKaJq5)t0!u.!q*!p,q,r)!q*!p+n)!o*#p-n-p- o,!n+$m-$n+q+n+!o-$s+%q+#p*#p*!r+!p,$o-$r.%p,%p/'s8/i~~yqfzSoLb>T3yQ-vI2r?/v;)y:+v7+u6&v1&v/%r-#p.$o0%q6 s<'q;(uG,wI2s<.p0 s0r.r- t4#zF-vB-xI1o<%o6'{M5|^%}N/zU1xS:eFkFp='q- q+"o+#p. o1#n8)rD.xQ<|^FiRoV|hE|dG~cM|fO|hL}cNhSdMjU{TAq0 s-q-q+!r*!q*!n*!n*p*n. j,o,p-n.q-r*"n)o)p*q.r.q,!n+n+o,!n-$p."q-!p- o+#p-$r6$`D}yzpo\tW}^uSnM{\;zX7wT=wT?dF}T7{K.vA*xC2x?/x;(u;%t8&v6*u7*v:)u6#t0!w1%p+t0s0q,$s,"r+ r-!u3#v:"xC'yI/xF+s4(s*%q(!s+!r,"r/!s4!s:(yG,wC,t<'w=)t=&xH1}U9a=w;&w.$t.'s/%t1 r7 r@'xQ9vTB{aJ~iLjMjQkP{gIw_Ev[Fz\K{_L}cNiQ~ZAn0 p-q-o*l( m*"n*"n* n+p-o,q,p+n- r- q*!q, m+!j+!n, q- p-$j,l-o,!m)"o. q, p/#p-$q-$r0$q:%i}y{xna|[zYxRuUmQoK`@uP@|^JyZ?tI6tH3yM8wP9tN;zO8wD*vF+s@*v=+v9)s6$q6#u3$x6$x8$v9$u4#r2 t/ t,r.s.s/ q+!t, r-#r-p2s9xB)wE'q4p,q*"t+ t, o*p-s6%vA-r>*s=&sA-tB0rA+s?&r;#yA+n-"o.%q/&t1%s8"yO0zZBy_N|hM}kJ|iJhNxaBxZvYF|cRiRvO9n2"m+o,!q-!n, n* n+m*p+#p, n-o,m+p, t."s-%p-!l,"k*!m,"o,$p*$q+ n*!k-!n-p0p.o0"o.!m,$n.!p5 |M0|xjOdG~V?uM9tI4yM<\D`CbGfJgIdE{`DxT?yP?rF/t;(s<)u>&wG,wH3s@+t<*q=,t=/t=)t:(s5%s4&s1$v3!v8$s7%r2$o0p/q-n/ o-s.p,s. u1&s4#p1 q6%q@)rD(n3q,q,!q,"r*"n)l-p3"q;.q;+o7p9#tB/sC+o4$o6#{J.m2 m.$s-&u3%t>'vP9y\E{fL}nQyjKzdKx\ItR=uJ6vF-wJ4uL7vTAz`LiRk@1l/#l-l, n+ p-#o+"n,m)p*#q,"l* i+j-p,q-$p-$o-m,l, k* m)"o+"n+ l* j*!m+o+n-m,"j,$o.%p-#n/$p3&kN}lqYzP@wE3vB3xA.wH2xP8{V>~]Db@e>bB}^C{T9}Q4{O.zK+t>(wD*vF)wD)s;%s8)s?.v?0w<.w9)u5&v8(v4&w5!v7#s4$q/%m-"o,o-p/"p-o,p,r+t2 u8%s1$s3#u?(wE,q3 s+"r)#p,$n,!m+ l,o.#o5)uC1tC'm7 q8 u<&t5&o1 r9&m2p-"q-&o1%uJ2xZB|eI{kM}oRzjO|dReO{^HxTCq?.r:'n8#rD1vY=ubIi>1k,#p/"n-n+o+!n*k(m* o)#p,p-l*l+ n+!l,$m,#n, n,k,"n+$o+n-n.o/!o.'o,#q+o,n,!k+#n-%m-%l,&m-*t@2o{fd`?wtL9t@3wC0t@,uH2wQ;zU?~`?f?~c<~^@yS;vH0xH,xF1{O8yM7zK4wI*wC$s8u:({H0yE.x>-y8$x5"w5'w8(x7"v5 q4p/o,!o+ o- p+!q+!k+k,"p+"p1!t<+q4(p0&s7'xA)s7!o,o*n+l.k-l-r0%t5)vA1sB+j7$j0m1n.o/ xA0vE.p."m.$k2#uN8yaGzdKwjI~pM~mSjUkMmNkVyVAoA/k7)i:-oR;xfItTDj0+n+#n-#l+"n*#m(j'j) j+!m+n,o,p* o*"n*%o+$p*#n+!j-$n*$p+"o-!p."r3"m1#l.#o,l*n+l, l+$m,&n+%k-%o3%|M@y~|}ytS]W?ysWao?3uC3tE2uH3yR5zW3}]6|b$m6%l,$n+!m*o/p='sC,m0!p-"p5(rE1z^IydIxkG}lOoSmRkLmQ~jR{gNvXDnD7oF7{aJmRnOtK:l/(m.&l-&o+'m)#j* f+g,m.n.p.p- n)o*!p-!o+n+m,"p+$o-!p/p/q2$o1"o.p,m+p.o.p-#n,"m*!l,"l-n4)lU{~wfaDZTr=/r;+q9+r1%r/!q1#k2!o6 p3"q4$p8 r:n5n/"s2'r4$o1n/p.s/#q-%p*!r*q+p-"k-n,!m-l, o, r. n+n.r2$K;yvtoPf`HtnTx`{jyjuT@rK1tM2vV:zaC~cH{]@rJ:tK:qI5uO9vM:zS:xT6xG-vD/xL3tG2vD5uD4s@.s:&n6 h,k-n-!o, o.l.o."p,q*!r,$p-"t3#q7!n0 k,n-l-q9(n:'k.#p/&r4(q3'n1"q/ l,!m0%q;'vJ,q>&n7'p;(r7%r0!u2#q3$p/n.j-#m-"l. qB0wZ?sV@vZCxcIqXlMmK~kN|kO}lP~mR|kQ|kP~jRlMoMpTkVrUoT}^CxL7zK6r;&r4&s4)q>+qD+r;)o7$o<$u>%r<$p9'q8)r8%n2k-o+!q,%q-&q,q*o*m*!l,!l+!n- o- s- s/p, l. q2#s5%eR~yprmQyuRupN{uXzbiv~dLvI3sH/tR7y^C|bE{^?uX@sS=rL9tO;wQ;yYBy\BxU=wR6wO6yL9yH6yJ6tE2q<$p4!n-"k,m* l)l*m,n+n*o+ q,n*r-"q.n-p3!t5)n."p/"w?*u6$r,"r1&r2&p2&r.$q-#o4*uE/[6wJ.vJ3xO*q=r/ u1&t2%s0!p,!k(m+!o1#uM0xbCw_C{bD~eLlRmPkP|lN}lSoRnRnTnUnRmLnOoTiT}gNlQ|cGpJ/sH,p@-s:-u>.rH.vQ5tG4tI5tC2uA,s=$n:$m:&l3"k.k+m)!p,&n.#m+q)n( n)!n+!o+!q,#q,#r- r.!p/$m2(p1'p2(u<6j|q{b{vWtoP{vYz^zaipxV=wO6uU6u\,s3%r/&v4(u0%u*&s.$q-p. w,&v/'v>/xI.zO.yN7tP:|T6s=&r6&r5'u7)r3"p0#p/%n+r5!{T2{a=uV5wT:~`E}gHjOkR{lQqXnTuYqXrZqVoPnOpNkGxX?vW;{\FqJ6sF6oD9o@8vH>{VEfWsb}etL>u?+t:"p6!n3n.!l+%m+%m*#l)#k+#n-#q+"o) q* m+"n+%k,&l-%o-q-!m.#k5'r@2l1&p6&}J2~zdyc~x[xsTzu[}vcyeygpx[tOz]E|^H|ZC}]C|bB|`B~aAc>~e?}b@|[-tC6tF1uE-xH1tG/r?*s8&zE1{K1xB(q2 r0$r0"p/ p4 |O5wM5o?-tE6yV:jJmLnSnTpToW~mT~nU~mT}mS|qK{oJ|jNrXCrSE{^LgZn^zirw{{vtztep:1r5'p/#n,l*n*!m,&j)"j("j*$k+%p-%k*"m,o.n-$m,'n.(l-#m/#m4'tK3^Jj7*p5"p6%jU{~oy]z\zvU{vYwqVslT|u\ybirwZ?xS<|XdF|`>xY4~[8{[8}]>}U7xN5sB%u=%t8r0o0k1l0!o/%p4%o1%n/$p."n*n*n+p+"o,$p."r4 q/ o/$q6&s8$t2%p,!p+o) n)o+u4"}P:dJ~^FrI5q<*r;%q=!q7"o4&xC4zN;sC+n8%q0 s1r1o4%N7s=,q8.uF6tH5gJpRpVq^pXmX}lVs`{djjnqyx}ytpimnmqykt~XIs9+o1'n,$l*"n*#n*%l,"k(#m*$o+ p.%j+"k,l.l/%n6*rD2pH4o@/qC7}_EwZ?pH0m1$p2*s<0{~|f{u]~x]|`}c{sZvnWzrY}u^y_i_uK8wL0uG+uH1|V?uO6yP>wM5uB.xF-yK*s?#u;#v;*u6"u4!r3!p/q/m.n- n* p-p2!p2!o.n+n+m*m*n+ l,o+ r+"s3$wA+t:%s/&p+#o, p,!p,r,t4&X=aGz\C{Z:tF/q:"xE"q8o0 r<(xP<{T;uE+r8!t6r2#q6(|K6p=.s@5uL=lE9gWuacqqyv{xxuqpnmssnklminr}m`Om^Ivm;8p.*o,&o*$q)%o+#n-n*!o+#r-o- m+!l-m2!p?/wQ9yZAy[BrQ5qE2}]A{\8tN2o6*q1$s4)UIz{{_yr_}x\~x]za~x\xq[|u\{tV|uY{bqvV>s>,s>v>&xC1uB.xC3t;%r7,s8+t8's4#s3t4 w5%y5!t2p/s."r-q, r.%p-#q2!t7%p2m+n+m)i)h)n*!q(#p)"o.p6"r3!r+!q+q1v8'q0"r-!o1&o=)xQ0yR7tG0q?0q9#t?%o9%p7#r?)|\B}`FtM8sC3wCzNBg[l\ueqw|{urpjktqrsokmlorjcjomluodXIoeOs]sgj.3p-+s,%r+"o.#q- q+ p*$s-#o/o.o5|P/sO3tV*pA*rC1zP9YDiU}gks}|yurmmnnqrpjmspookfkjjmjjllmq|w_ujUj`E\P=y{VOo.-r-'q,#s,$u+"t+!p) q,p.l)l/!sA)xY=w[Dy]E{cFzfIvZ:o=,o2'q7+m5(k1!i+p4#uF)m~|e}y_wrZxsW}a{a{_|bybzpZvnVvoQcY>}p\mTi/#n.#q0"r1s0!r/q/l.p/#r/!q.#p/q0r1p/l/o."n/&m0%n0"p2r1s1"p/n/%n+"m+%i-&k/&l/!m/k,l,k.k-"n1$m2!n9#r@*s<&s?)m>*sB4wE5}T=_Ns^~cihllrqqqtuoqrqklnmlkjoonnjmmklmonloqljs~mdOmdKXL4PC0^VFrl82r,*q+#q+#u+$s)#q+ q,r,p*"p,"r7#{U=}bI~fF}kCjByR6q8$q1'm1&n6&k2 i.m0$m3%\9xy~|~u}[|yXzvXzvYz[~x]ya|ezdwbumSsmMRK-YQ8rmE2m/(q0%q."q."p,!r.!r0 p-#p,"r. t1&q/p/q1 r3 q0o2'o7,o@5o=,m5&o5)j1)h4,m70q=1n>3mA3mA1j?/m=.i7*e4,i8/l>0rG8tM<}\Luc}empmkib[\T\almtrvtglnlgilleiprohmknkhhklmopomowy{]|qU`U>LA,rfO|qZgWo2*s.s-$r+'s+%r,%q.$q+r+#q+!p1Q:fKzY:yP8vG,q5%t5 p2"n1&p2#m2k0l/$n0&v?/W~k~{]~{[}y]xtY}x\|w[za{c~e~h{vYsmPIB(OH+neJ~hn50s3'q.!n-"o1%p/&q1#r0"q/s0s/$q0#o1$q4&q6+n5%xE4wN:y[Ly^Iz]IvYKuZNv`OzdS}eU|dU{hSjVqY{bgkfjjgacb`\YZ^b]YUW]hnqrosnprmnqljhioqjllkjkigikomnmlkwlgqiOtmV`VDYOzYE~cNnUq[s\o\q`xj|gmxxxxxvrjVVRT~TRZYVWZZ][ZTSWjlrsvtsrpiopmjkllikknjkorrnkpopmkiovoS{]ulTxoWulT[S7E<%WO2ii0)o/'p-%n*q-q,o,m-!k, l-!m/ m/o0o,r0q2 q.$q,"p+#p,$p-"r/ q.p2!t5%t8)WEz~~~q|b}y\~z^|]~z^}x`{ua{v`ztYzc~a~ayrZLC/SL/WO/g]Aol=/q1"p1"q/t4!r4#p3$o3's81r<5xPA}_JlRvY{`dopuwtumrvnieggfcZWVUQPUWT~QTVVTW~PUVilquwvurmmoklmmllmllllnpqsokmkljnrfriNrlJtkOf]?aY9_W5KA*ME1{b^Nq0,r-&r-!p+m+l+o-r-"p)#o)#p+"o*o)r-s1%r,)p*$q+"p,#q. p,!q.!r/$q.$q1"q5)yZ~e{b}`}c}d|`|a{b{v_wrU}w]|`y]xpUQF2UK1XO0[O7}rYyhl60p4,q7&n;'o?/sD5{THdW~jqtttvnjkigeigiomgdghdc`WQRQ~QUTQPQRQRU~QRR`lpsvssqmikonfhmmikjgjopsmpmljppnwzsYyr[wqRmdF`W?c\>haBVN4SL4tnXxs?5o-%o.q,m,i)n+p)p+q,%q+"r+ r)!q*r-!q,$q+#r. q- p,"q,!q-%s-(r-%m0$q2%r>-qw|bye{f~ye|d~z_{b|b|wYwrSxrV|uY~wXwrMOF2VM2VN-[R9h]Gmm\hYsYnwonnnjbgicceihniggbcjhfjkic[~NW~QP|Q|T~RP~PTRRVTQQS`oorutnmjjmosllllkjgeiiinntqjfmltr|w]}wbzt[qkMaZ=bY>VL7UJ5`T9i^CymT|ck3)q.o,n)!m)"o) q(m(o+"r,$r. r+r)p*o)!p*#q-#s1'o-&n+p,"m*#m.#n/!p1#s5&V=~~k|w]|vb}xd}xc~yb{h~ydzbz`zt\yr\yrWxqPe`>RK3UO-UO+XQ5_W@fncW[_dfefeceggbaceniggecgefjllgZWZW~R}yR|P~|NONSYVRSQTP[lnqqrrookonllmilmhgepklknsqhhmnwmg}ezbslS_U@XN8h^EoeHhYbX?f]C`W;nl?.m,#n)#n,(l*$o)n)l(p+q+!r*!n)n+o,#r-%q2(|Q5wR5vL-uE,o7*o.'p+(r-)s/$v2'|A1n}{szuWys^zu]zu^|w_|`|x^}xc|xa{v\|x]ytWpkIUO0UN3_X<^W;b\:b]>zw\rdekfgf]ad_]`decckgdgecgjhcdggb[U}OT~V^~[U~U~XTSUVSUTQPTZimmupmprmheimlnllljmolmnohilnusa{vX~y[{\zs[}w\uoNzrTmdJg]Ch]H`VEeZ=tiKmh-#n+ n*!n*#q(!o( n) n* p-!r,p,q+!s,$t.+u;.zN1vF)tB%q:(q5*q0&o-%r.$q.!q-%v4-TB|h|u`{u`{ua|wc|v_zt]|w`zua{w`wq[|w^urMXR8TL5YQ[R8iZHm, k)l(o* m(!l+m+l) o.!q-!q)#r+&z90P@zQ:|T8xO4sF0m1$r+!n*r+s.!q."t2&p4)}`u{c|v]ztZzu`wr_xr]|x\~za}xb}y]}x[z]c^BRK5YR9^VAqiLqlFnkItoVueiegfbdgbadecbcjhgghgghejkhkhaTVQQQUY~OKLRPU~RSRSTRSXUdnknnmjgmppjlmmmjqmompplmnomqwz_ysW}w]}w\~x]jb~w[qjNxXwmVxmZqgPh^Ci^HkbMzq<8q+&o( m*i*m+p,o+!o,p,"r+#s-(}E2zO9|Q:}]<{\=Y?q5'q,#p,r*u,r,s0%u3-xD3v~{lup]{u_ys]|vbxr^}w^zt]|wd{w^~{\{wY|xYYT:QK2\U;c\HleOtoMvrPnkakgb`agda^bgihehjfhijhgggeaa\SQNMSSR~WT~QRPQMNRSUTSTXV[ikmomlkprolnppooqnnpoojkjnmtkvoOrmJxqWy_y^i}`rjN{rY~t[wlUyoVtlOodLodJpcJ~b{an/*q)q* r+q+q-q,r+ s-%s*$o)"u9*uG-{T6}^<{^=VAl.!q-o+q-r+ t+#s-$p0-r50]Ax|~fwqZzuZ|v_{tc{ub|v^~xa}xb~y`~x^{v\xsVQK3YS6`Y>icHjcJvpPytWvcbdaahjii^`^chlighgfgdgiijif]USXXTVX~SUTST}R~MNQTXUNPTSQWjkpqjoqomompnmkmqrnpponkjorzxrXrjNwqSztT~d{`{[ysStkR}s[waw^|rY{qVvmQqhGypQzoVizO@s-*u*'s*!q+q*s*%s,&p+%r,'s/%u:+{N4_>}_ByN9p3%r0r.q,!q,#o+"r, o.m0&r4'w;'{Y}~~ywq^ys\yt\wr^ztczta{v^{]~{]~z^~y^zt\wsQSL8_Y?d]CidHpjNvoSbsdadgdhheeaaehjecgeeifeikgkje]TTWWRQS}S}MMT~XWV~RRTUQMRO~KNZfpurpnnnnnmokmlkopnrsrmmkouii]DvnW~uZ}`z`~w\pjKunPzpY}tZ~vZzsOvnJumKwpLtmLzsW~v_riRqs>:v.+v,"v,s*"q*%q*(p*&m(!q0"yG7xL:}W>pA0o2*o-%o-n-n,p,n+ n*j, n/%r2%t1&u?/p}{~~}jto\xr_xs\|x^{v]xt^yt\{wY|yZ~z`~x_|w[ytTWP;c]Ce_DlgFrnGxrTrlffkfefecfeejchgaehgfhehhjlgc[URTUOJN~NNN~QQUWRMPRTRUYTSZ]ilmurijklmoilqmmkisrpmnmmxzqOocJvkTz[{tXwqPpjLslQqjOvlSukRxqQslHkcAyrMnhHpjJxrT}ubxp^pv`p3/s.$q-p+ s-&r)$o(!l*!p/!~M5}Q:t>1l0(o/$o-"o,#m,j,h+j)o,$n,#k+o. p.%s5(W=}~~w{w[up[ys]{w]{w[{w]zu_zu^}x_|x]{w]|v_}wdytYhaG\TAiaImgDpkFrlMtgeijhcdgfgcbggefdckgfjgbchhd^TSQSRONOURN~NRTVONOPSTVWVRUUikjprkknplllnrpollttqtsomvvoT~xZ}vWvoQvpOwqOoiMqiSofQzsVtjLg]@i`ArjNqhLkbHmeIrlNzsWy\~x\k|SGp/)p,"n+ p, s+!q*m) n(#p2#m1#o-$n-(n/'q2&q/'q/"n2#l1k*n+#m*!n+m+m."m/#p6%|[|syt\upYxr_ws^xu[yv]wr^xt\yuZ{w]{v_zu]{taxrY`X@bZHg`GhaDg_G|cqfdfjihebef`ahlnggekhghhabfd_XNOQTQPUWXVO~QRP~PPRSQRTQT]VSV]iooolprqqnolopklmpqxsskll|t[{uWmeBe]@h_EqhKyuOwqNslOpiLdZBjaFpgNf[GkaFngIpiMsmNztQrkPysYfoj9,m+$l* p+r,%q(%n)$p+%p-o.p/r1'r;-~W9{N7o4#{G.q<'m.n+$l*"m-#n.$m/#i+!l.#w?)t{}gzu]xsZztavs[xuZws\zu_{w\|x[xtZyt`{u\zt\qkS]VBmdI`Z=\V9keDtcdfccfgecgbacegkfchjhgefd^deYQNNQUVYWSQU~PMM~OPQR~QSTTRUZWSX^lqrqoqtqqppmqmkllpttryrsd~^{UrmFf^Ai`Li`JmcGsjItlKe\@h`DkcBd[CdZEriHtmNslQvpOf^EibMyrX}u[lkUj/(l) n+n+!o+&h+%m+$m*!n,$o4*rH>}aI}eHyWn/'n.!l+k,f-"f*$l-"m-&vJ>gR}gO}dMwU?nA-n5#q1$o/%n+$l8(sI8tL9rQ6pL5m<+k2#m6*fz~}iytcxsZxsYwr[xs^xtZxtYzv\yt_{v`vq]xv\|xZ|ZoiP\TCiaOsnVb\Nmnecffgfbabecdijdaedhjlhcdb^VROPSQPO~NOQTQMLLKLLPSQRROLXZXWYWflhjnlourqvwxx{}|~~zZf_IoiO}wV|tPqhLg[GncN`V?VM7\T4NF'`V]S>\SCaXCbYFg_HlfLogJmgEtnNtnPphMriMh`Ce\@aWf]C_W:ZR:JA+XQ6aZBe^@TM0ZT5b[@e]Ad[=JE-MG.ZQ9mi5,o+!m*m, k,o-o-!j/$o8*xM6|\>pG0oA*pL/uP9o:'sB-l9)n0 n)l(k+k* q,$q0%m1${K2~~vmhOa\CLF2c^KuqTwsWxtYwr[vsVwsXwsZicSsn]rmUoiVogSsmTyuY{u[{w`}cbbdddedadgfcafea[VVRWUSQPSTQOLTY~WPMSNSVU]Z^gq|hz_g`Ib[AUM1_V@_SA_TAj_LpeOh]FcW?WO0_V(o9#pB'yR/q/#q,#m)!h'j) o,#o+%r0&q2#p2%r4$wH4}V=h,#n+#n*p( n( l'o*"q+!t+#q-"o.s0!v6)^y}~~xs\hdFlhHfbHjeQqmSnjNnkSvsTifJtoZwrYxuWzvXzuY{wYvqWplQzvZ}esfhjfea]bid`_\[XNONQSQUVXY]Z\afhittzzs_xsYjdMngKjcId]I]TCe]GiaEneGmeIngIhaBicDTM2PI/MF*YS7lgHc]BZU5NH/HB+\U;y`dk4'n.!m.#i,"h+!j)l( n+"n,n,!o1"YFwO8i)!m)!j'o' n( p("n("o* p*!q,"p+r+#s1'wD(n~}}}|srmWd`Db`AbaFtpUnkOmiPto^xt\miPwtU{xYwsVxsVxsSvsQtoQ{vX{cmq[_a`cb_a`XUSP}NTNKPWX~OYbjtw|~{lztZkeMf_JrnNuqTurSd_A\U@YQ@nfLqkLmeMibI^V<\U>RL0ZV3a[?vsMjfEKE2IB3wrX{am~^Ph.$i-i,!h,"i* j&n(!p,!q, p5 _Al9(q+!m(k' l(!q' p'o( n*o,r.$p,$o,&p-*o3&aE}}|~}eokWb_HnkPqnUvrUtqZsm]ws\xu]xu[xu[zwWvrWwr[|v]~{\vrQzY{_rk^]\\b\URSTRSRRRNLQTYV[y}{ekdRvp_zu]xsY{w_nkI]VA_YBoiLniIoiOf_G`Z?hbEa^4\X0]Y7spJlgKlfNicLwqWwrV{wYrl=5i+!l-#l,m+m)p)$p("q+&q0&uA.n.$q*#m)o*!q& t(r&q(q+m+p, r,#o+#p+"o,#r6'dx~~|zzu]okZmkRpmRrpTusXur[vq\vrXuqWvrWrpQqlMqlSuoU|v]{u^smU}x[bq\Y]XVQNMMQOQP~SRKLNQS[[a~|uzrj|ugyh}x`zu]upUniNhcDokHngDj_Hf`GlfJjeIXT4a\=d_ArmOjeJuoTvpX{vY{wUxsUf~fk4)p0!n,l*n*"p*%o)#p,&q+#m+!m(!m'%l)#l( l&o(n'o+n*n+n, p+#p+#l,m+"p- {F6o}~}lsnXnlTonQqnSpoKrqQtrYvsXqnPgeFeaEg`FkeMmfTunUysU{wRzuS~x_jhWSOPQHLPOPUR~LOLMSVTSVWn{xqh^|X{_u~sn~ibtqX|b{w]|w[yuUkfHc[HrkR{tSlfIkdJsmN\U?hcFniLvqSoiPupOroFtoNqjS}`]Om/%l, m+n+ k+"l+"n(!o("m,!g) h)"m,&m($k%m' n("m*$m)!n*j)!o*(n+$j.#l-%i+!p5'eHz{~}~z~crmXolTmmMqpPqpSsqZtr]nmRIH142'DC0bY>cY?qlQtnSniMwsLlgGpkOlVVO~NPQJ~{L~SQP~OQPONSTRTSV]}y~}zqi|XlRgGdG{\D|aB{`?w[?z]B~bG~`NtY}}~xtXcc{e|b|d{v\wrTgaJuo[zuSytTpjLzvWsnPQK4gaCg`CibJogPibFiaDsmPleOrlSxrC6n-#m-l+h,"g,#k*"l+k,#j,k+!m,"p*#q( p)n)n)l)$m*i*o+'l)"j-"l,"l.j/p<-ey|~{qspTolTmlOmlOroSrpXrp\trXqpR[YCEB4EA2MG6UO;qlNslVvpUokJGC-[W?eVTRSPMPQO~LM~LNLMPRTNTVWf~ywqjvXfFZ;yF)t?$q7'l4 m1p5!s@'uK6zVB}]C}\CwXCuYAyZ=xZDhPku}edeeh{a|w\y]{_zZmfNrjPmeGvoZVN8nhImcOf^Gh^Li^KlbIpiLmfLmfK{tW~eh0%l-$n/%j,h.j,!h* k+"k+!l+ n(!q)!r)!q)n)l)m'!k(i'k'"m) l)i*h-m.o0"}I9y~~}|bpkVpkUokSifJplPsoSrpXqoWsrUjiHheHdaMkeUoiVxtYtoXxs]wtTtpShaWYSPONPON~SSOP~L~JOPQOVWTs}{sjgwYgLQ=xE*u?'r9#l0"n-$n,n,p+q-r.$r/#q0#q4#s=%xM2aA}dEvYAwYC{^F~^?aFcHjPv~~xilkgb|w\yr]vnZphQldMofOpgHjbGi]TVJ@mfJd[Ie]Dd]DjcJjcF_W=leIngKc\A_yV?l1%m.#j+h+h)f)i*k,l* n("q+"q*"n)!m(n)l%l&l'l&l&j&h*!j+"o- r-#q4'pQ}x~~}wzu`niWpkWrnVgcEpmNspQsqNtrStqVmkJb^Da]GnjTzu\|wYytY}xY|wZ~yarXJVTPO~MMMQTR~P~P}KMON~NQ~U~S]}{~}zg[tPbGR:wF,t?+m6$r3$u1%s1$p1!l/m-"m,"m+"j,#k+ j+k+ l*m)m'#o,%t:'sA&sK/zZ>gK{`Ez^Az`ChJ}bGaA_=gIz}~}{~zvkng}xYwqUmfPzaqjOldMibJrlJpjLskRWO:e_BkdIhaFgaFngLf_Dg`DhaFd]BaY=meJgk;)j+$l-#l-#l*l*m(k*j(k*n+n+!k*!l)m(!m&"o' o(l)j)l( k-#k,"o*#q+#p.$p;)et~}~}|~z||lojWokQokRrnUqmXqmTplRnlPrqSpnVRP77585$C>-KE-WQ9faBsnM}w[}dfSNWUNKQ}HM}NPP~J}I~KONQ~OPQQc||z~zne{YoQ]?M0w?%v=)u9$s4$s2(r2)m3'n3$p/$l+!m*m-m,o,j+i* m) m+k+k-#k+ m*m*n+p+"p0)q<*tI,wS:}^G}eJ{aI}dJfI~fH|`F{^CzS5xD0sV~rlzeuoWniKyrY{a{uSoiJkeHqkMqjRicGSM4ibJb\>d_=kdDicBh_E`W=i`ElgC^W7`XC{dtZi/%m-o,%s.$o+n)m(k'n+n)m(n)"k(!j("k% l' k(l)k)n(#n+#l-!n,#n*!n,%m0"P3t~|z~|zbpjWniPqlSsm]tmatn]rmXqnVonQpnTb_Cb`A^ZDe_Ld_F`ZCd_AnjMzuZp^WWVTV~R~OJ}L}N}N~I|I}NQQMOQPTTlyRfFSc^@faBd]A]T@leKkoF3n0o,o,o+p+o)n)n*n,m(m' k)!k,$k*$l*!k)o)p(!n($m*"n1#i(!j( k* o,"t4'lM{~~~~|}~~xuoZpkRpkNsmRsmXrnUsoUupYtpXsoUuqYsoWplPvrWuqUsnTrmPupTxsU|uZpOSVVWP~L}K}J~K}M|M{J~M}P|M}J}M~Q~P}N{MWZk1s2#u5)t6&t6#s1 r."p- o,o*m*k,#j,#m.#o-&p*'q*"p,m-k*i+m+l+l, o-$m-$m-$l,$k'k)m*n*k(l*m-n7qB(xG5{T<{_B|d@q^?t^D~eMfMiMfJ}[Ct?&s7"t7$~P8sgzd~x`zt_voWuoUvqVwqZsmVoiQhaInhJg`Gc\AjdCe^@f_Cd\Cd]D_YCd]IhaI\UAg_HytX}ah;$i-m,k+n+"n)!k'j)k,l'n(#m'%l(%n'"n(o+o*o)!m+l*!m.#l,"j(!l'm) p+&r5(g~{~}{~~}}jpkUplQqlSqlXojTnjPqnPsoSqnUsnVupZtpUwsWwsZyt[{u`zt^yr^xrUdbRQOOTN~I}I|O~M}M}N|O}N~SM~H|JP|RyKzP`]=p.#r.&t3%w>)p2"n- m-"p,"n-o+ p+"n,$o,o+"n+$o*"t+q+o*o+n*n* p,$o.%p.$s/#r.#l+!l( k&k(l'm)!k(m.o= tI0zR?zY=}bF}fG~gH~dF{fHybDzeJ}gFyT;u6)q0#p0#q5)m\~oisqroQtpUxt[rmUrmTqmPf`Ed^Bb\Ag`Gc\D`Z>b[Bb[Cg`IYPB^UDjcHaZFe^InhM|uVoRj0!l,!j+!k*&k*"h(!i( l*j(k(l' l&n'p+q.q.#p+#o-l+!n)%l*"k) j&n(#q*%r.%yG5}~~}y~y\okTpkTojVqlXrmWqnQsoStpXsnVtpUvqZupYuqWvrZytZ|v]zt[wp[vqXqXPPMOMH~J}M~U}O|L|Q~S{O}P|M|M}LK|P|N|Ncq:$n-!m0%p6)s:'q1%r0%n0!m-m0l,p,!o-m,m* r,$p)!o* s* o+n+n( n+$o-$q-!r-r+s,!p,"m*n*j(j( k( l)m1uG+vN7xV@z]?zdE{iC|fD{cDydE{dB}hI|eCsG2q1&p-!o,#s0({G8n~ooiyu[uqYwsVrlPmgNidHmhHe`@b]9c\@f_FgbFb\Ae_BjcLofWneYpjSsnRkfJpjLdZ>eqI6i/$j-"d' ^']%e%h'h'h)g(j'j&k)n*!n+#n)#m+"n,#j' k* l* i(j*"n+"q- v7(kU~}|}z~|qqlTnjQojRnjRpkXsm[to^tn]uo]toXspUwtXxtYxsWuoUxsVxsTytYxsW}\fUQQNNJIIM|O}L}K}R|O|Q}Q}I}H{LK|NyOX|Xj- l.%o5%v=-q4&q/&r0'o/"k-l,o.n.n.m+o) o'%m(#m)"q*"o+q+"p)$q+$p.#p.o-m*n)m) l(n)l'n("n(n-o7'wI2yU=zZEy_@ydBzh@|fD~fIzdA}fBhIwZ:o7+o-$o-n.#p2&v>-WE{woic~z`wsUsmRtmSibFngH[V8_Z<_XB[Tr@-r0%q/"r4%r9)q;&t<(w?*}K9t}}}|pom}i}w_wsSkdHkdLleLG@(KG*MH,JD,UO5SM;hbIniMwpXvpWvqZvpXpjNc^Dd[GrkR}sMBn/)i+ j+m* l("l("l)m'm(l(!n)#m)k)h'g&g&k*k*m* l(k*j* m,o+q-$r0'pZ}|}}{}~~}kpmPmjKliNjhQlhOpmOpmPqmSrnTrmYwqd}xc|xatoRlhFvqTwsVuoUtoW`_LQQLJK~KN|M~J~L{N}P{L|MzROLPOL~M_gJp/&u8%xB'v8%u/w0u1 q/q.r.o-q-s+s*!q)#q'!r) r+r-q."t0#q.o,!m+l+p-p,q* n)"p)"q)"q*"p-m/#p0'v=/|T3\:bDjKnTqSmL~jD~jDgG|WDwH:s6+r/$s4#t7#r8%r;(s<,s<$t>%]D}|tsig~c{`f_HxrUupS^[9NI+LF)NI.UP4TL:rmMf`DkdMpiRi_LmeOe^Ga[De\Hl`Owbrl5(n-m,n)#n)#n,"m( p'o'm(k(j(i'g(f)g)k+k*j( k(k'k(l,i)m(o+"q3.t~z~~~yzv[miOkhKliNmkOmkNomPqnQqoQsoRsnZvpa|x^zvXtoRlgKuqStqNtoQsnRfXRMLKJOML~M|H|J~LTM}J~ROKMKH|GcyH1o0&o5"t9$t/%s.!s/ t/!r+!u.!r-r0!r.u,s*s*#q)s* r+r-s-o/i,"k*%l)#o)!p*p,r, r+!r+ r*$p*"o+"l-q2 zG/YhcGmiMb\Bb]@a\Ed_Gc\JdZK}hqcNf+#h+!l+#o)!o+n&o&o'o(m)k*i*i+%g*!i) j* j)j)!i*"i)!j(i*h)l*m(n-$SAu{||}~|~~}{tplOniOjeOjeRkgPmiOqlRqlQolNokQsnXsnZyt]{vY|w]tnZsnUrnMvqRtoOeRQ~NHK|K}K~NOJEJQSNPSPLMONN\l0%m,#p3!q0!r,$q.%q-"r+ p("o) q-r.t-"s)!t,!q+r* s*"u,"q+"r-"o- n-%n+#o* q*t)!r*p,"n+ m+l* t/&p-$o."s: zO3|[C~cJgLjKiF}kC~mH{fE{dDxZ=wN3t=)q/"p2r5 p5!r8$r9&r9$q8&p7&t:(wD5u}}ynac|^tmNldLtlUwoPi]DjcInjIe^HmfNy_lgNidKidMidMieIc_FhcMidNsnT~zdzg}qIAf+$l("m) n(o) k'l'm&m(m*j)f(h( j)l)m(k(!h)"i(!k&"k%!m(l*k,"k-t4$mQuvz|}{}~~~~~|}enhTpkQojPlgRmhRlgPokRnjRnjPqmQsoTsoTsoVrmRqlSoiTokPrnNwrTa`SQP~LO~O}L}N~M~OL{KR}P|K~M}K|I}LNP}L__Fn'(n)$p.n/p,p*!l)!q*"q)"r( s+v,w-v+r*r)o&q)r+s. q-!o) s*"u+%q*!r,t+s*o)n)n+p- q,#q+$s2)yC,~Z9y^B|cIiIjKiI~hI{eEyW>yT:wN3tC,q4$s/&r/$q0"n0p6 q9$m2"s4't2%t5"s6$RD~pe{`{_{uWkeIxrUpiJi`Jg_Hf`JrkWxsX~f~xfyf{ud|wawtWwtUyvUzwYytZ~z`~zbdqg5-i)g)j'n'm&l(l'l%n'm)j)j(k(n)n)o,#i*i) l)!m(!l(l-l0%m- o,w;(huw|~~~~~tupYpkWniPojNniSnjOnjLnjNniOpkOtpRtoTrnSrnNrmNojOplTplPtnW}w]oTOS~U}M}I~J}E}JMQN|L|R~PML}J}NONR}Qms?,q+!r, p-n,q+q,q,"q+!p,"p(!q) u+ w-v,t(q%m'n(n+o,p+r,s+ v,#r-s+ s+n)m)"p)q* q,$q,!q-$t7/S:}\:cAhGjFiKiHkJz\CsD2uD*yG*q4#o)o)!n-l+k,m1l4!k/"l-#m/$m0#o/#r4,p\}ym{c~y^|apkQmfKb]@e`EibGf`JwsWzwYzvX}y`|x]{v\zwZxuR|xW|yZ~z^|x_{b~{^}y`pdVj.)k,$f) l)!m(p'q'#p&"o' n(o(o(p(n(n'l&!i(!k)"l)"l( j*l,m+#k'$n+$s2'O@svw~{|~~}~~~{dmiMohTpjVpjSojTplRnkNplTqlPrlRupTqmPokPnjJpkLrmSqlTqlV|v]dnOORUSN|N}J~K~K~OO}MzL|I~K}IN{SzRKJQr]o.#r+p-m,n+t+q,r-!p,#p, q*"r+#v+ u+ q*p)s)m*j+k,n.#q1#t4$q.u0r0!r-!q.l,k-m+n*n* p-!m-$uB4|ZA|`ChFfHhJkOjI|eAvQ8uA/r='p8m0o+o) n+j*f)h.d/i/!n. m. n, o-$s3*wA2p~{nff~buoZf`Ib]EhbJc[FrnR{w[|a|_}|Y}|[|y\}z[{yU{xYzu^{va{w^{_}y`~yb|evmB8n.$j+l, m)o' p($n'$m)o(p*"n+#o( o(m)l(m*m* p("n* n)o*n)l)!m+%p-%o2*sTt}~~}~~~}|^miMojRpjWokUojSpkRqlSqlSsmWrkXslYlhKhcFlfKqlMuoQwrZxs]}x\q`PNPQVQQN}L|L~NO~O{K{J~P{MM{PxM~L~L\}O8o)"r) o-m+n* q+!p+"o+!o+!p(!s+"s. r,s,r*o(o(m+ m+q/o0 s3&t2!r. t0!s0$s1%p,p-p,o+n+o,k.r>,uO5|^B~dH~dIgLiLjRiHc8wO2wF4o5%n-n-n)"n* o,k(j+!k,"j. i-m-!n.#m-#k.#m1"t6"W;x}yihce|x_z_wr\plUwt\|wb|x_}y`{z[~|^{_}z_zvY}y\}_~z`~z^|xZ|x`{c~dhygl2,m-"i+ j*!k*"i+#h+$m* m'l($l)%p(%o'!m'l)l(n' p'q("o' s+o+m,l+!m+#j. u>/o~|y~}~|||{x{{sspSniVojTqkZokSnjLqlOrlSpjOsmXngQkeLjdOkePpjPsnQysXzu]|x_zesRPUSQVR|T~Q}O|NN}M}I~K~Q~TzQ}J|G|JKzO^p6+q,o+r+q)r,r- r+"o,%q+"q)p+q/o,s+s+p,q,p+ q,s0p1q2"s0$r,%q/$o3%n.!p, r.r.o,n+m,l7uL5xV;{`D~eLfIhJiL~gMdF}];|T9uC0o.#n)!o+"m*#m, p,o,o+!o-!m."m,#n,#l. k0$o4'o6)t:0pXDfSqZbgnphe^cffnsqmr|sn~k~h}d}|`zwc|ze}{a}y]xvXyv\ywZ{w\{v\xt]wr_wr\zv[xt[vtYxtXxtZyu[vrYyv_q{WCf,!h*g+d)i'!j&#j( g* j*!k*!l) m'n%o'#p("n)!l( m(j)l(m) j*!m* k*$l*$n. }L=uu~~}z{|{{z\lfPibNhaNd]Jd]Jb[Gb\Eb[DicNohTqkTrlTtnVrnPqoJtpMupPwrWzt`qbTQLNQNO~M~NOQM}NO~P{N{O{O|LyE|H|KYoPi(!m) n)p)#n' n*k)k*l+r- q,$n)"r,!q+o,p-q-q,r/p/r-q0t1s/ r/p-o/n/"q/&q/&r0)p2*o7-pD2vU8v\AfNoUyZtVyeilqnorhefXTWURSVX\eooppon~}o~ihi~e}|b|{\{zZzvWvtQ{x[zwYxs\yuXwr[xt[upX|w_zv\wsXwsXyu]xs[snYvr[~y^sk=.j*$m*#h+f)j($h(e' j) l)!i'n( r*r)"m' i$j'h#j%"l(!m) l+o+l*!l)!o.n1%y^{{~~}}swsSkeKc]G`ZBb[Ge^Ke^LibOleQoiSniQpkRrmUtnWsoStqMspItoOzuYzt]wYQ~ILON~M~KI~M~O}Q~zM~MNM|MzN|OyK{J|L|OirJ.n,#n*p* p*#m*o*p+l.n.!q,%p+)o+%q-"o+l-l/n,o-n.m,!n+"l/r4"r3 p1n.!k0%m3(g1&g0$l92uKA^Lv`iqrquqsmd_XVZWUUQRQUWRSSX_hjmqru}ufilh~b~}_yxXyuXxtXzwZ{w[vrWwsVyt\wuVtsQzv_wsWwuWtrVzwZtpSroTur]xs_~f}hh3*j+ g*i'"k("m( j)!l*l'j'l)o) p(!l& j$j%i$k'$i)#j* n+m* k(l*!j,!k.p?,q~||{y|~}}{klePgaKf`Ja\?c^Df`LmfQoiTpiWojRqmQokPplQrlStoXsoTsqMspHwrU}_hQPMJIJL~J}KNP|U~Q}L~OJ}K}L}KzM{KG~Nel5 o*!o)o)"o)$j.l.n-m1o1 p.%p0&q.%r0"q0o/ n.&q/&r0#p1"n1&k1!j6"k9(sG1zQ7]MjWw_impupgfgigd^ab]YVXYUQNORUVVYSTWX_ionlzx{jinj~|f|{`{z]}b}ybxvXzwYxtYwr^yt]xuUvtTxt[wuYtqTqoVsqVsoRtpUup]uq]wq[owYDc+h*i)i' m'"l)"k&!i%i(i)j' n'"m&!l(!i#j$l(k+!l)k'l' h( g) f+ f,"k0%XF{}~}~~|}~|~}{v_icPgaLf`JgaIgbGkeLniMnhOmgPlhOolLpmNrnOsoTtpTtpUtqRupU{vZk]TONMEHKLMP}N}O}N|H~K~JL|JH}J|J~J]eHo0i&o( p*#p*$n-#p.s2t3q0$p1q4%q3)m1&m6n7%q;.yH8U@gTs_hkljpi\WRTW[_^_gcbe]\]^[XRRRQTSQRQV]WXVW_gims~~}{i}g~}b~|f}e~|g~{gzvezv_zw[xt_xrdxs]xuXurXxtYuqWtrUqnUolQtoUsoStoZsnZsoSyuWum>0i, j+i) j& l(#k(%i+#h&k(l&o'o( p(o+!j(!k)"m*o)$m)m' j( j(i*g+ l.q6&[}}}}{v~xqlRhcKg`MjeOjfKlgNojQpjQpkOniMokPokPplNurQuqRrnRsnRsoRxq^}w`hTQMPNGLJ~G~LP~P~Q~M|M~NNL|K~I~MM~PisD/r1 p/n1q0&p-%r1"o2#o7%r=.sC6{O<UHlVz]epojli`Y~RQ}SR~RVSOSU\`^[bbbec[WYXTVORQTSPWVV\[VWTX^a`v}nk~c}{a|zc}{ezwczwfur_wt^tq\upZusWtrXusYwsYuqWvrVrnTqnPtpVurRsoVsmZsoWxsY~ht[i. n+l,k)o)#l)"k)m(p*m(o)n) o'o&j% l'#n( n(!n' o(!m(!k(i*j+l, l-wF7y{~~{}z~|hidOjeOgaMhbNjfMliMpmPnjQokOliJpkQqlVrnQrnOsoUrlVsmVsmQqkP}bbN~|M~MOQLHKS}O|O{P{O}M}O}O~LK~M~G~~F~J~U}[i:&p;+o>1tG7}TBbQrXfjjkkgZSN|O~T~P\\SQP~S}RP~O~MNMRV[^]_b`acc_][ZWUTQXTLPVWVSSOPOSWZWw~yf_~|a{xd|zf}{ezy^vuXwwZwu]xvYurWuqZxtZxtXwsYwsWsoTrpPvsUroSuo\tnZsoXto[tn\pvQAq0%o,n+n(!l& m( p(r+r,q+m) o'!o(n'p)#o'!n%l' p) m(m)o,q,"m,"o."t3(cF{}~}{~|z||~~ssoVidRhcNhcJgbKgcHieKmiOokPnkMmjJojPokRolNokLtnTpiVrkVqlOmhLgWPNNMWTPQR~T}RyRzK}L|O~MIILGG~E]haptqk_Y[SPRMOTQRPPSSUON}JzL{L}K{K}JMPTVZ_aeffa`cdb[WWV\UTYUTTRSSQQRPSTYc~r`~cin~~dzz^{{_|{bzxbyw^{z[vuZwuYxtZtpWtoZtoZqnQurTroUuqYsoYrnStoZnjUxt]pm6(q.n+k'!m% l&#l'm*n,l*k*m(o,q/ o+#l&n(l)n*n( n'r* s+$q,%s,$t,"w:%lKw~}~}~}}{{ilgQgbNjfKjfKieIkgKjfLlhPnjNmiNmiKnjPnjQojRrlSoiNicIjcNmfPvoUk~SPL~QSPOTR~OQ}R|J|CI}N|MMLKIQOSWSTRRQSQPNMQLOTPN|M}zLN~L~O}N}L}zI~S{O}J}N~OT~TQRX`_deea^[Y\WXVVYTRUYVYXSVSWWVWYarp}h~e~i|zb|{_ww]zxexucwtcvt]yw`vt\sqWtpVvrXupXokRolVpmVsnYsnXplSpkVojYoiZ~ilUj*#k'$k% k$#j%"j&"f$g*e'j(l(n.h,j+$l*!k(m+j'm)o* r*"p+ o+#s-#q-"s2 s:&ay~~}|~{}}w|[jeRe`MhcOicRidOkfOieKieNlgPlhOlhMmiPojSpjSpkPhdHieJlfLrkVj\}ORORVQQPO~O~PS~K}I~P~Q~Q~NL~|LM}QPMOOMHMPMILFKMNMPKK~O}O~K}I}O}NM~|L}S}PNNMTSRRU]a__\`]YZ]UVUUVXZ[WUZ\Z\\[YTY_hy~|}h~f~|b~|e{ycxw^}|izyevtatrZtq^vs_vtXvsXvrTtpTsnWpkVojWrl[qkYqlZqlYrlZqkYoj\{xL?l*l' i&!g&h&j%j'k*j(i'g(g( k+"k(k(k*l(l+"k+l+"m,!m,o,#l,"l,o-|F.s}~~}~z}~z|}wkgJieLieNjeRkeTlhOkgMhdIkgLieKmiPkfRniQlhNniOmgNkfIjfIniOzuWfTOQLKN~NGCNT}QL}K|Q~Q~T~W~RN}O}N~L~}I}|D}LM~LHLNG~~EIJMR~O~NM~LKPRNOQ}M|K}L|L}K|N}LJQSUVTXY]a`b]WTWSYZZTZ[]YY[\W]_]^]]]n~||sgg{ydzwdww^}|h{{eww\xw]vtatq[tq[spVsoUupYuqXspUqmUojVpk[pjYoiZpjVpkUojTyrate/"i'j&i$j'k( m( n(n(k)l*m*m*j)h)l*n)n& l)m*l)"l)!p,"o*#n*p-q0_Bt|}~{}~}|eidDgcFieMjeQjdSjdOlfRjeMnjNieMkfQlhOolNnkNpkLqlMojLpkIqjO]^~MJGHMO}LHGO~Q~TO~M~RPRRPOON~}D}{G~}E}F~EG~G}H}}F~}J~NORTN}I|{A~|G~|KIPP~JKPOOOKKMMJQSUZX]]b^bfaZRWX^^]XYYWXZXSU[[^_[X^s~{f{e}{a}zf|{byy_zycywbzxa{ydsq[vs[vq_tp[qoUrnUsnZokSmhTqkXkfSkgSojWoiWniNqlVemPd)m'n%k'h(j$m(l)m*m+m,m*m*k(p(#p$n%l%m)l( l%"o'"o("q+#o+ p-m0_}~}{~}}uqVjeKkgOkhPkfRicShbPjdSjdPkeOlfOnhQmiPmiMliKsoLtqPtpQsoNvqReSKLLLNMK~L}KMJ~JRSQQ~NNLQRP}K|K~|G~J}zG~|F}{J~J~}H}NRS}RRK~H|{H~{L~MHKKH~JPNPQR}O~M~|MMOPUZWY]a`cf]XSSV]^ZZ[XWY[YZ[XT\][Ze|{q|d}z`~|c{z_yy]ywayvdwt_qn\sp[soXokWqmVrnUqlWrmYkfTkfRmgTmgQmgRnhUlfPjcPkeMjeFopE3k+"m&#m%m&l(!l'o(l&n)o)p'o+l'!k%#k#k"o'n&o(o(p)p)"n)k)m+p-wC5w|y~~~vlhTfcOifQkgSmhSmhTlgQniRmhPmhNjeKjfLkgMmiNokMplOsoSuqTvqYxsXhLKOSNONJJONN~KO}M~NPPOR~T|NN~MJJO{M~N~QN~K}N}QT}QQNL}M~NMJOLILP~QSN~N|L~QVSOQUXUX`dfa^[XXYYWU\[XYZZY[ZZXUY]_Ym{jyw_yw`zx_ww^xvazvhtpepm\nmUrnUrnTroSqoXmhXlgRniRgcKf_Ke^Ig^GRG;UK>aVGVN7IB)\S5fh2$o' p& m( i)j*l*m*p* m&j&j+l)k'!f%k#n%n&n'n(o*n)m(j)n)p+ p0+lP{~~|zzx}}~|wjfOjgMhcLidNjfNkfNniQniRokQjfJmiLjgJjfKplPnjOpmSspStpXvpX|`bNN~LPPNKMOPL~KNNLOQSQPQ~M|H|y@|I~N~J}M}SX}Q~NM~OOLIKLMKIJQM~JK|N~NMLL~MzS[SRSYVTU]c``[[VX[WTUYXV\\YX[YWUSVVY]w}~vu|zcywcvt[wt_ur`uqdqn\sqYqoSolQqmSokPoiWpjYjdLXR=F>-D<+?7*<1$@3%?5'G>,QH7`XFrjTt`Ep+"l' l*"k*!l'o,k)k%m'!k(j)l* l(!h& j%k$n'k%m%n'n'm'm)n*p+r.%r:*l{{ws{|{yyxx}xbgcKfaLgbMfaMgaOkeRmgTnhSmiMmjLokPlgPniPplTqmQsoStqUysZkVNPMN~O~MKQ~Q~NNK~KM}N~QVVRNP~M}zH|yE~{K}JII|RT~PMHHGJNM~MKNP~}NPJ~}F}|I~POMQN}M~{QTTUQTTVUX]^\[YXXYYWX\^]\[\YWZZUTVTY`~uzuhwtcxvawuavt^soVqpTonUrnWqmQjiNieMnjWWS:JD/ZS@f`GuuWz^fnh}]mLdI~S:u9,o,&k*#l)%j("l' l)k)n(#n($o(!n'i'h(j( j&h'i)j&k%l'n*p*r's* q,$o+'q6*dG|~~|{||~}~~~~{tytZjcOhbOf`LgbJkeNoiSmgSniTkgKjeOlgPlhOnkNqmRsnUwr[y`iO~FKON}O~KNO~|MO|PRMOPX[VUQ~ON}J~zK}yJ}GIN|QQJIHDGK~OQLKPS}SPIJI}L~N~S}R|L~NMRP}QORWYY[Y`b_YY\ZZ[Y\]\]\XU[\]UT[]_l~~|oxrgyucuq^qnYtqWwu\{y]jkkig|btYhM^HwW=oK2j;&d1i0k/o/s/!s,p)%n+&i%$j%"j'l(j*m) n' n'!m( l(k(k*l) k%j&i&o'm&m'm(p+"r*$s-%r1(p90yP<[BsT|~~~}~~{}{z~|}}||nqlVidOhcJieJjfJlhLmiNmhQmhRmjNokMniPniPmhSsnVys[aUC~BINNNKNO~O}Q~TW~S~NQS\XW}T}N~N{N}J}J|D~M~O~|M~LJF~H~J~K|I}NPMM~NQ~NMLR}N}L}O~|M~J}K}LOTR}{M}KQVWZ\VZa]WSV\]ZVWU[_]UTTW[UV`W_|~|}~}{xxwzvitZfN{Q9tE-m9$n2!j)k)h. n8$vL2qJ6qE1sF*t?'o/"q-p* q( p' m' k(i'j%j(h'l(p+m*m)l)m*i)k%k#k#!m& n&m& j&j'm,n0#n2&o7)sI1pF1j4&k6$nzy~{{|~||~~|}~zlifOkgLjhNlhMmiMokQnjOnjQlhNmjKnkNnjQqlXupZ|w`fOHLRMLOSNNPQL~O~T~VSRYZX|S}M~P|P{N{O}K}N~R}M~M~MI}F}I{J~J}HN~RP~NQLNKKM}L|L}zJ~IL~LMLQQR}SWXW_ZV`_UVTUVTW_Y\a]YVUV\WX][d}}{z|wwkx[fRYES?tC.r9*p5(l.$l*$l,$m+!m,%j)l)k) n*$o4$yS:|bF|cG~eFwY;vP1j0o/l(j#l%j$i(j&i$k'm(m)o*m* p+m*j*f(g'h& l)$m)!k(l(j)h*j/o7#i:#nE+nC*i2$i*%l-!M=v~|w|{~}~|x}zZkgOkfUlhRmiPmhSniSmiOmiMolIqnLplRrnVtpW~aeTO~P|PLIOOOMPQQ}S}RVX~VYZQO~P|Q|OzQ}RPNLLNSRK}zJ}J}H~I{PSN~MQOOMK|M}N|J{J|L}N~R~UWSO~STXZ[aYW^[UWWTSURYa]WXZ\WV\[^]^n~{m_pVaIV:zH0w@*n6$m2!n/r1's1*q2(q.(p,%o/#m*!n)#k'l)"l'!h$ h'l* l* n1Z9z\-w>(v?%n2"m, p,"p*#m(!m)"n)n+ m*o+o*m)!m*#m*#m+#i(#j'"e'f%j&i%j&p:$o;%r5$k)!k$!k'j&g"j+{M6xV7wN2p3&m+k'p)!n)!m*n(n*o*n)n(o+"q-$l+!l*"l0%o4"p/p-m+k(m)!l-s>(m='o?.uN3i8$i)k(h*h)g*j+m-{N:t}{}}~~||{zw~|VmiNkhImiLnjNliKnjPjhMnkOqkYwr`cf~{RSUVSPQLLPN~MNN|M~OR~SW[[UN{M{T{V{N~IIMS~PLRN~O{P}DEKP~S|UT{KzIxL|NQ}L~O~P~P~yMTVWTRQQUSQSUY~XUWUUSUWZZWYVXUX]^VSSZYp}zsoiwZfJ\F{P:rG.yJ+u=%r8(y81u2)q0$p/"m-n/!{D.yM2r@*m2&t6$t;&r8(n-p)n+!n*!m)!n,n+l)m, l)l*n+!n+$m+&j,#m+!m*i'i'j%m, xB'n/"q,$o)!o&l'j&j%h(|M7sO,sH(q<'p3k-l(j'!i+j*m,n)k(p+ n.!n1 l,p/%p4)k5#k4m/l,l,o,p.s;&j6!q>)sD)g/l,g(d'g)h&k' k*!n1*oW~{{xy{~}w~~~~otpTjgHkiKliKokQokPmiPokQsnYzu^sZSNQUVPMGILNJ~KL}OSZ[YWRR}R|Q}RxRzK|KKJPQONMN~M}E~HMS}P|I|G}IM}O~N~I{F}M~R{O}PRSU[YXU~QTVPQRYXXZYVPV[XUVZ[Y]]^\WUYb}y~iOrH1sE+sE/yF3yE7uB4t;.v;(t7%p/$m-$p,#p+ m)#l(!l(k'o+v:.r3#r0!s3t7$x?)u7s.o,l*k%!n+"n*n(l*k,$i+ l,n/"n/%r0%q-o*m'm(o'q+q.k'm' l&n%n'l(k'n+wH3z^@rQ6tL4uL3qJ.j>*i:*e2$n7$m:%m9)q:'q5$q0"o0#n.!t7't=+s@,o;%m2k0k,!n*!n-$o/$m0o9&k3#j.m.h,j)!j' l% m("n+"m*&n5(oy~|~}v{}}{~zemiQplPnjOokQpjTojRsoVtpX}cvXUJIMRQMHLTUM~}I~J}NXXVYWRNP~O}K{M|I}HRPNLPP~JN}P}K~I~MM~O}KINK~K~NNP|O~S}SSXY[a`\U~SY\SPQU[[\\]TV[VPS[\VWX]^[UWkzs\pnG.rA+sA,u>/s;*t7)o/'o/%l+m*#p-$m)m' j'"i("m(#n'p( l+"k(o,q0s3"r4&o. o,l,k(n*l(n(p(n,l-"k, m+o. p/s/"n+"l)m)n)p&n%o&!n'!p' l'j#l'k)k&l*rA2gMz]CxT>vQ:}]AdG|^DqM:uM:{XByY$n6$o1 p7#p?,wG5rA.sA-n4#j-k+l' k*#l+#k+ g. i,"i(o0#n3)l-!j( l'"m* m+n.$m/#{P9x~}}}}z|w}|ywz}_qmPnjQniSojRmhOqnSwr\ibQOIJOQNKLMNRO}K}L~O~T~T~U[V}MIM}L|L|MzL}JT~UPJJ~KL~O|P|L~IHQU~PM~KG~D~M}N~yPzT}U}TW[_hnjkqiX[[SUUWZTVZ\VTQQUVYUNV^]ZVXwhTK:tjW`pD0q<&w8)u3%p.$n.$o,$m,!n+%m,$l+m)i(i)#j( m(o*l*m0o3q2p.p,"o*o'!o)"l'k)n)l(m'm'm(m)n*p,"q/$q.!o,n*o*m'm'!n)#o&"l'!m& p(k'l&p)m(l&n.!yL8uM:yK9yL7zQ6uP4yV:xW;zYE|aJ|cEtQ5qH2pA+r<%tJ-vW2uN7qA1m>*s<(q3 l+k)h+"i- d(f&h'j%m,"p5*m.!i&h'j' k*"j( j-n4$uS}|w~}~ztz{}{tvrVniRojRniTnkRroW}xfp\PJ~JNPSMLLIPM~MM~MJ~M}N~RSTPH~LJK~zN~yN|QT~U|SMGF~GI|O|PL}KOORNJ}L~MR[dijouuwysooomSTYXWTRUTQVYZXWTQS[WOV]ZTT^ztnRhbJLA8mtL8p3#q/$q/!k,"m-"m+!k+ o+"l+!k-i*h*i)!k+"n,!n/ m1p6"p8"q6!n,p)o' n'k(l)k(m'n*n*l(m(n+p+p*!n)#n) n(n'o(k&n(n(p(!m'"m%m%j&k%"n%n*m)n(r1&m1&m1$l3!o4$q=&m6"p>&xI3vI1wT<{[AjKvX@rP5{]@}f@uV8uG4pA+k8#i4!j-i,l.!l. i(k'h%i$l(!j)i'h%g'f& j(!k'!i*k+!txV>y_DaFtC-q<(n> h3!e0f0j-k* l)l(i'j'k'!i&h&h'g'f%k' l'!l) o,$p,!~Q3y}z~~~}}|}|v~apkVrnUqoRsqYmaRPPLMPTQOJ~M}JLPPPOQQTRQOHEK}Q{R{O}S}ZVRR[_bhhntvstqhonhgghijjkhjhhmowa^Z[YXYVSVSTW~OPQR~WUQQQSUYT^~|v[]UCd[KPF6oeIazWDj2%k3k/l,j(g*h,o.m+j&j)l0!m7%m>'pA*i6%j-!o.m1n-l&j'j'k(l' n)!m&o(n%o&m(l*"l' n)"k&i)m)l("k%i$m&m%k%l$m%l&j$!f!k&!m(#k(j(i(h'j*n9'u?)n4 l.m4j2i*p7!tC/uP6zQ8sA)rC-vT8xY&k1"l/#j1"f*g)l)k) g(g&h%h&j&h$h&g&g"i#"j%"k*"l,$m2!{_yx|}|}|y~y}svsXroZtq\{y_ygSOOMNOOPLMRPRTTVVSRTSPNLFKS]`guqv{ximmjdejedkhhkokkldhhklY^ZV[YSTUVUWST}~OMOWUMSSSVUWg{`YAa\CaXHbZLcZBibDlg=-f0$g.i-j+i+!h/&m3"i-#i)!k1 p5(n0 n5 uB)r9)o,#l*k(l'k%!j%m'k'n'!o'!m%m%n'!m& i%i'!k)"k&"j( j( l("q+"n*!j(i$k$g$h&f%g(i%k'm+ k) j'k'n*j&x@3zO?q:-p8'pA-yU7tS7sL3rE/m9$p="q<v?!n;%qC.xO5l8)m7(m8$j1 i/"i,i-"h) m(j(f)f&j&i'j%j&h$h$k) h%i%j'i*$m-!t<'suz}}z{{z~~puq[vrcopaWPMOPKKMKNRV[^[\ZXZ``amqtu{x}}}pf|hgki~eccbedbijfgl|chht]SZXY\XVVXWV[W~QOOVUXU]WSOP[v{of`E`[DZR=g_O\T>`VDohOt[g4&i0g- i, j+"p;,k8)l1%k."j1$h.k*l/pA(o=,l)$l+m)l*m'!j&k'm'l( m% j%!k'"j&l( j("i&!k( m'#n'!m($k'"k(l'i$h!k%e$c%d&c%i&l(j&i%h(!j*m)l,zJ9uB5p4%o5%vN6rP4{`@|eF{`Fz_ErO4sL0l:h3q@,n:&l.#l2#k2!h/!h."k-l+i)j&j'h)h%i(i'h&l(i&j& j%g&g(j(h+ j+o,&UFvqz~|{z}z~~{kzvhxj[UVPNRQQPTT`efjmouw}|hh}f|c}g}g}decbegggjjfddklwVTURZZWW[XTPZZSQQUXWX^[WMN^~|he`Dc\G`XLI@6vnRKD-toVgrM;i1 h.!i-"m.#r<,n9,k5'k4!l3#l.k+p4vH+m9&o, p)!p+ o+p*"m'l(k&l% k"g$ h*!j( m( k&i'k(k& l& n)n*o(m%m'l$k%j&i'i%f(i%n'i(k(g(e'k)n0 uA2m4+m/!o4!zO.tH&rD,uQ7}_<~hHxdGz_CqK-m>(sD0p?+j0 k,h.j4 k5!k.$k+ l+m'j(j(h&j)g)k( k(j'i( j(h(g)f(c-i, m)%m-"sVuz~|y|wz||xmygZW\YZ`glpux~zffbaf~fdhfigghdiihe}finjXSVX]YVUUUVNVZZRJNOONXVQOLfva\EffEgdDzvbto_upUqoRnkRzwbsc7)h/"j,#k-m8(m;*g3j3k0l3$n6"o=$xL1l3#n+k(m)p+!m(#n("l'!j& l'!m$k' j,"k)l&!l&#k($k$m'l$m&m&o'l&i&j%k&i$h&h'f)g'i&g'j'h(h'l'n- o1$l/'l-$o- q1j/k.#m3$p?$xQ8a?{`:tM-vI0vH/sE.p;,n0!h+i0 l4!l-!m+n+m)m&k'j&i%f'j) j)"k)!k,l-j* j* k)h*!i*!n*m,r<-q~|v{}}w~{vrv|~}}m}a|a}acchmghgiifcfheimhs\WXWWZWUT~P~|SSPTVRKIKIL~LRS~NRUxkA;'e`D`ZBjeN{vZ|a{w]zb|joy\g2#h,$h,g/l4"e1g/l9#m>+n>'l="q@+k0"j)i(k(l*!j)o( n'!l' l&l' k*!l+!n*k%k$"j%"n'#m#l%k'l(m(l&k#l#j&i%i#j&"k)g&k( i%j%l(l& m'p)#n(#m)&m&"m*n+l*k&!l& j*k/!s;'xK.tH*s@&m5o;(p;-p5%m.o2 n1 k+ k)l)j&h&i%k) k)!h*l+!n-%l)%j*%h,!h,"j-j.h/b(e,c,i5$zX@~~{{|~|b~z`}z_aeefgfeh|ef~ad~be~g{adhr}|MSWTRUQOML~}NS~M~}KPJK~POLNNNQP~}MZ~~|iTN7IC,hcDkeMsmU{b~ycxs`yu`zx\rvPAf+$h)d(f*g,"g3#iB-f=$h6 l9!m2"i("h'"f'i(k)i'j&m(!l%"k'h'i+ m-o,m&j$j% k'!l#!l&n)l'i&k$ k#i$k%k%i#!h&$k&!k'm(m)k)i)l)n'!o(%p*$o)"n*$m*j)h(#j( m&j%m+m(o+!s9%wF*rE#oB"tA%p9j/l,!l.!k,k+!k( l)!i)!l) m,k-#g-$h.%f+!h) l.'e.$e/!i;+lD2tS?^JmZejo{||y}~~~u~b~a~]}|[be}eaa~}`~c~e~eddd~jiffie}|N~R}TQKM~MNPRONM~M~MKLN~~MOPN~LP~~Q|Tj~hpkM~yYQL.]W=f`FleLpiRvp]{ub|vcvr[{w]vh3+m)"h)!d*!h*"h4)h;+f6%b3j9&f,!h'h(!h(i'g%e%g$j)!j& j'g'k) m)m( l&k#k#l#k# i'm(j$l(n%i#m%j%h%i$j& i%"i(h(j(!k+!i,l)k(%o)(o*#m+"m+#m' m(j'i)k)l&l'm'm' o/#o6#wJ)xI(u?"r<#p7'l.%l-k*k*$i("g)d+!c,d- h6+m@9uLD|YJhXsdjovz|uromjzy|~}z|{{xng|^|{[~_dbd~d~chhg~cbcdmjhjsU}O}SSNJH~}F}LRLJ~KO~NOL~L}~K}}MNOK~LO~|S\z~xsTQJ2TL6]W=JB.WP2ibEohOc[FniKvr[up]xw\im[j.&k/#h0!j0$i2&g2'g4'p@)l2%h&"j& j*i'j$k&i%j&j&g"j%j)l'm%l%!l'"k%l$i#g f$g%f%k' k(l'l&k%k&m&n%k'"l(#j)!i' o2*p5#m-m&o(n(!m(#m+#n)!o)"l'!m)l)m(m'l'n(o-m-#l3%r:$l8!p<%i7'i7.k80mA5tQE]NoYv_m{}y{wunoihontpqrw|{{~~~}bc}``acd|czfjgdcebbdgjlloUO}NOR|R~P}{G~M~K}J~M~MRNONJPMMLNN}}K}N`~pjNicGaYDJB1JB/]V6gaCicIibIlgFurUsqYwr_ur]pi@2i0$k3$k3$h0#l6,k6,k-$j% i%k'k(k%k$j&j&l'j&i#k% g&j&"k$l& k&!j%k& l&h!g%f%g& j' i&g'k&l&k'm'k&h%!l*#l' m($o2&q:"i)o)o* o*$q+%r+#n*q+%q*&q,#m+ m*!l*k,"j/#l6)qA2zR>^FpTyalx}zwonrpspnwtqnvtpnmolpqzx~~~}~~w^}`|aggc~ddjed}feccogghineOH~L~K~|L~zL}zM~O|zL~{KP}|J~}H~~K~FMGGNQQONN}zL}MjykjbLjcHh`HbZEf_DicDi`Fg_CgaCf_Fxu]wu]xs`so]{b~ce7(j5$j0o>*vM:n;3l)'k%j%j(j)k&k%e#d$h'g&i#l(h&g$ g$i(h%f#h$ h$ h#h'h'g(h(j(f)i'!j$!h&g$j'"h%!j'l)l("p4&tA/j+"o-n,o,!l, k1!i/$l6+r?5zOD\Nj\xdllsvponoorpmjnpqnusoqvrrttrmnnlou{z}y~}~{~~reb}c|edc{dehcdcc`fnhbhmsXLK~M}L|M|M~{M~{Q~zN}K~G}{I{zH||HFHJ~GNQQQO~M|OVxztV_WBhaFd]=_X?kdJkdLibKg`Ff`Ka[Htp\xu^uqWrpXvr[rcJh3&l6(uN:yVAj4)n)%m%j"!i& l(!k&k%h'f&h$#i#!k%j)g$ i#h%g&i'h#e$i%!h%!h% h'h) g)h)i* k& k%$i'$f&i&g&!h&h*e+f/&g2'q=2wJ:aEkQs^mnpkgZ_y^yWXZgjqpommrprpppopmnpwttqjlkpnnqz}|{}z~gde~a~hb~d}cb~c}|]abc~^ddgglpl}P~|K~|F~G}K~|P|O}N~{O|QNL~}L{zJ~}KNOU~VWSQP~N|N}Whpg`Jg_LaZ@YR3b\@gaCkcKldQmfRmfSmgQtn\|ee~|g}ihsk?3qG2w[=xX8l6)l'&m"j%i%n%i!f#f'g'i'#k&!m*h$h#i%i&h&g&h%h&h( g(i(j*h*d)c)b*f-#g3&k;/vK?UJ]QmYbclolbX^{Y~S~SyRzS{N|R}xR}xS}wT{P}R]kqpjqrpnklnpqiknnpnmokkmjmps~~~~~}|}r}_g{d|^_b}gdb~`}z_`~f}f~}`gbfhmua}N~H~}DFL}MN}MN~OL~}H~}L}|N}PX~PPV~|RSOJ}L~S~\uxo\^VDb\B]W>VO6[U:jdHohQngOpkPuoWrnUmhV}h}h~o}m~jp{cvTCvYCyY]V:^VXQ6]T;f]CkdImfPlfPpkPrnRzu^qoPfbBheFnkRpnYzzd~}ejmv|gLrL3sE0n9*h(i$j' j&!i'j'd%e$e'j&i' f%d'!d'c'f'j'h%g#i* rWb~tR{Q~zN}xS~yS}P|M~{H~O{Q|L~{H}zF~{E|L~zK}yH~zJ~{I{vL{tO|uO}uOxOyQ|uG|tF|vJ|uMztK{wJ|vEyvA{vFxQ{V[flnnoqsllouoljk~jgl}jmkjw}y}~}~}u|g~{e|_~c{`ge~db}`bcdehjj|f}bhr[~ST}T{N|M~M~K}LO~ORRP}}M}}KRRRP~PO~N~N~zP~zT}yVq}zoiIXP7VO6YQ4[Q8c\CkeInhLlfLmhKrmPrmQlfJniNlhKojTf`Kc^JrnVyx_zygpgkI3oB,m5&g%i)d'd&!g&g%e%g$i%j&!i(!i&h% i%f%g&h'i&i&l,o8(k~xOyK~yP}xR|vR|wMyuG|xG~zH{vK{wI|wL{wH~yL~yNzO~wL~xK}vL|vM{wM}uT~vS}vM~xI}vGwIwL~vN|uN|xI|yG{wEzvGyuG}xG}L^ellmopmmrvq~jolklonlno{~{zyxy}y|~}~}jef~|b|d{c~ed~dbecdfehkjhfbl|R~zU}zS~|M}zJ~|J~IMN~NN~OUT}}L~OQ~Q~OOQM~I{xK~zM{S_}~~q_V>XN5WM5XO5]Q;cYFe_IgcGliHroLqoOliKmjLsnVplRojOidKlhMieJqqUvs[{zdsx`GtE/j. i%h$g$f%#h%i&h&h&f'd&d( h(i(j(!g&i% j%i%i&k(n/#~S=j~wO~xN}wP|vTzsS~yO|xDwrBysH{vH|wM{vJ|wLzuO|wS}vVyP}wM}xJ|xOwU|uU|vO}wJzuJ|wLyM}xK|xK|xI|xH{wF{wFyuI{vH{xG}}MZ^dlkonsvtqkm~pknonmpv~w|uxzy}~~veb~a~{b|e}c{dde}f~|f~|c~}b~ebheff~eff}yU{W|yM}P|S~PM~}PN~}MOSS~UR}~NQR~RHNN~|L|yM}K~Spl|w[b_FYSBYS;[T;aZEg`HhbLkgMhdHd`DgcEhcKkeOidLd^GgcDc`>VQ6\W>RJ7c_GqrTic1%g&#j'j&h%g$g%h%h&i(f*e'e'g(i&g&h%j$$i( j(!j& f#m)#n.'qa}]}tM{uO}uP}uS~vPysEyqC|uG{tI}vJ{tJ|wIzuI|vLytM|uQ~yP{wK{vL|wP{vN{wIzvJzvM}xM{wH|wL|wL{vM}yIzwFyvCyvE{wH{wGzvH|yP~|R~Vammlswtrno|kkkkpkr~{|z|{||~q~d~z^|^e}e{^|x]|afi}d~d~edfidebfq^~|QQ~H}}I}{O}R~PWSNMOKTPNMQVSQK~}I~|L}{KTun|f}ydokXZW@RN4TP7[V;`ZBc]Cb]A_Z>\U=YQ<_X<\U@]V@ZR9_X8YS7WR5QK0C=)G@-nfQdQc*!g) i)h(f'h'f%i'h'f(c'f'i'k$i$i%"j' h+j*i)g&k)n/%v?3k~wStTwR}tQ|tL~xF|vF|uHzsG|vD}vI|vJ{tGyM{tE~vM}uVztO|wMzN~wIxK{tMxrMztI}wH|wJ{wJysKysKxuEvsBzuIyuJ{wJzwH}{JzxI}zK}{Scdhklutpn}ikhlqmq}~}x}~~|~~~{jzf}xb|a}d~dc~\|y[}eh}{d}|`hdaecd{bit}R{{F~}IJMON~|M|zO~QM~J~}LI~O~PMORTSR~|I}{H}{K}yRb|}zr{e{y^}{aspZidPa]E\WB_YDZT;\V<]VA]V>a[@b\EaZE\V@_Z@`ZA[Uc]>c]Ed\L`WHbYK^VJa[GOI6d]Jf`Pa[Mm{[Dg(j($j&%k%"i%k'i&e'e&e&f&f%e'g&h'd)b(d'!g'#g(!i*$l/%m4$uK8mwN|vF|vI~xH|wEytGyuF|yA}wB|vF}vI|tMyM~xJ|tKxMxS~wM|uF|vF|wFztC|vFwI{uExtF|xHzvHzuHyvEwsFyvFzvIzvE{wFzvL|wMyvJxvHzzL}NVhqroprsqkmw}~{}yyy~}}~z|~~z|n|j~h|c{c}e}e}g}c~a]{z[|_dc~a}bfeemrTQNK~NJPN~P~NKM~~J}}G~~LR~OKNRU~O}zK}zN}N}Na|w}{e~a~czxayw`yw^|z_wt]xtbtp]pkRd^JXP?`YCdZMcZJbYJ`XLTM;b\ImhXnhXidT|ybtj92j(%j'%i)%h(h&g&h%!h'g(f(e(!g'f) f'd&e)h*g)f(j)"i,"f,$h0']HgyM~xJ}yGzvH{tJxOzJ~xF{vC|wGxL~wJ~vO~vO~wKxM|xJ|vGvWzsI{wF|vGzrH{tJ|uQ}vK|uK}wJ}wL|vIzuF{uJ}xE|xG}xM{wIzuJzvK|zK}M~Sanolmsvsmmxz|~|{z}{||y|}|xf}d|a|^~|a~`~a|i|y`|{]}{]~z_|^~_}|_`}d~hgelc~|LPO~R|T}NJK}QPN~N~O~MMYT~LPST~{R{xO}zO~|LUo~n}i{x^xv_xvayw\vu\yvczxbvs_so\tn`haRXQ=]VA]WA^XCc\FYT9mgPkeUniVkfQmjVycuec)!j&j+#j*i$h$i% j&f%c'd#e#d$d&!e'h(h+i0 i0 l+ i)e+ k2"n8(~]Y|vG{uAyt?|vK{tNxK|vF}vF{uE~xJ~wJ|tK}wIzIzP|wI|wGzT}vN|xI}xF|vJ~wP}uR}vM|tN}uP{tO|uM|tN~xM~zI~zI}yK{wI}xO}xP{wM|yJ{xN]lihotrsnqz}}}~}zx~}~x`_}{]`}|^~_~_~}c~}a}|_}czx`~|ce~`|{`~h~f~gevX{U~QO~O|O~{N~|I~|I}{NQNQM~NP\]QQR~P}P}zO|Q}Wb}~~|zx^xvYsqVvt^yw]sp]wtbzwbywZvu\vt^sqXqnQ^YB]XA[X9[X;_YCnhOlgQniUniUniYokXloI5f%h(i(!j&g&f&h& e#!e&d e"f&f) f*j-l3#h6%g5#j0"d(f+!h2j2uF2o}vN}vHzuAxK{tLwQ}vI{tG}vLwNwOxR~wKxM~wMzuL}wL~wPzuM{vI{vM{vOxtI{uO}wR}wS~yNyO|uP}wQzX{O~zJ{K|xKytM~zN|yI}yK|xQ|W`i~i~lsrunsx||~zz}|{~|}h~`}`}z`~zb}c}cceb|y^|ayv_|xc|a}c{ce}e|jjm~T|yO}MLI~P}R~|N~OTROMR~~UY]YUPR~|Q}T}P|P{XohyuYup\vs\yvYxu\vt]xv`}ycxvasp\qn[vq\snYmhT[V@[W>faIjfMmhSlgShdPlgRniQrnSfe2#d%g&#g( e&g&f$ e#"f#c d!d'b(e+f/m4h6#h5"i2%i2#i4 h2j0o4*aJj~sS}wJzM{uK~xM}xI}vK|tQwP~wIzK~wL~wM~wL|uO|uN~wR{vP{uR}wO}vM~wKyNytM|tR|tM}vM}uSzPzR~vR{S|N}yK}xN{wL~zNyvMzvP~zS[dkmsutux}|}~~|}~~|~~}~~d}ya{b{e|c~e|`~`~_`}b~|`~|`|e~b~{`|e}g}ekpe~{R|yL}zL{L|F~H~N|Q~TQ}L~|LO~T||TTVXPPT{zM|T~zS~S[z~}zu_uo_wt]yv]yu^xv^yw_ywcur_rp[ur^wt`sn\rm[to\^ZEfbCkgJmhRlgRmiOkfQjfQhdKy_hWa%h&"h%g$h'h$"g$ c#a#c#c&a%e&e*i,g-h3%i8$n;$l<$h1"j-!j2&i2hxW~vN|J}vH~xL|xEzN~xN}xK|wG|JyL~xJ|xIxK}vK|vO{vO|wO~yP|wLxtE}yKzO}xO}wQxQ}tOwO}uOvRwQ{uL{wO}xM|vKzuJ{uJztF}xM}{U_g}jnvsvv}}~y~~||n~z`zv]~zb{f}yb}a\~|Z`a}b}yb|d{a~z`}y]~ya{c~cjt~]|P}zI|yH|O~NM~N}QVP~|L{{KKMPSTVPU~}P|{K|zP|zP~|RfrvrXmjNusWwtZur]ts_xu`vt_tr]ur]wt`vt`us]wu\_]Ab_CieGjgKmhQmjNjeSeaSdaQjfVsnC7c%e'd%e%h$f&c#d$g$j&j'k)j(j'j(g* j4"o;"m?"l5$j,$l0$i,xD4n}uL}wI|vN{uN}yJ}yC|wF}xF|vH{G|IzI~xIzu@{vC{uIyM}xM~zN|xMzvHzvG~zK|yO}yP}xM|uJ|vI|tNzsN{vLzuJ|wN{uI|vG}vG}uJuN|O~{Q}Vdporovz{~~|}{~}|{ezc~z^|y[c~yb}y]|x\~z_|z`~b|`|a~z_{^|x^{b~zc~z^ajt}T}{H|yG|K{O~P}L}KP~Q}P~{M{zH|}F}}IKRZX}L~T{zMzzI}|M}|M~|Pvy`\>HB1IE.XT8pnSwv\vt^tq]sr^rp[us_ur^ur]sq[YU-gxRwN}vIztD~xFyM}uJwQ~wKwMyLxKxO|vL}wKztM{vL{wL{wK|yH{yF{wH|xL|wL{vJyuG|xL~{M|O|P|O~zJ~xS~vQ~wN|vJ|wLzY~X^irsxwx}~~}}y|~~{}z}yz~}~~|}z`}y]{xZ|x]|yY{_~^~]a}`~z`~{f|wf}wdzg{h|d}b|_|^jfMK}L}H~|J}|H}P~JBF~L~S}UUS~}SQQRQT}Q{xM~{S|zP}Vq|~ka]DifIhfJXV@li[yxcyybxwaxwawvaww_ts]rqYut[pnYonWqoTfeKUT9$;7D?)OJ3yuZ~xc|y]|_~z`}y^ze|c|c|a}y_{_~zaz_d]~|J{yJ}zO~|MNLTW}|N}{P~}OO}}N~L~LOSR~V~SU~S{wN~{O~{O[{nuqbmjVlfW}{fzxdywezygzyfzyexwdxwgutbwv`vv_tt]qqWijK\[CWY@PO6FD1URAb`JeeJspRq]k+(j%#i$ j'k'g'g'd$b"f$f%g)j)l'!g"g!j% h&i%h'"g)h,!h(n/#hUa}wUzWXffinv~}}}z}|{|{~|{~}|~}~|}}~||{~}}ziRG8NI0>9";7?;!\X>xt]{x]|y]|x[zvZ}y\}zZ{x^{y^~|^}^wu\wuZ|_mV{Q~{Q|zM~|J~O}{QV~S{zL|zS|{P|{S~|W}|R~NO~O~Q}~T{|ST}|R}yQ}zO~{K^~~|xuqVa^EifQ|zc~|e}|f|{g|{gwv`yxctt]qqYiiPeeI^]D[ZAXW:OM7C@/;8&40"72-XVBeeLcdFm{SBc#g% h$k#k$h&g#f"fi#i%j"h!i%i%h%h&g&g*"i,%f+!f)!g)o4)lwzw}|}|~}}|~~|~~}}}|}y~|xy}~|}~~}xmiMQI6NH2:4#@:(ID-rmX}x^}zZyu[{y]zvZ|[~{Z}{]~}^}{]~{[}y\~a}bi~N~zK}yN|yM{N~{Q~|V~V|}P{}K||Q|}O{|P{{Q|}Q}P~M~MRRTQS}zP{yR}Um{}~{~pebIhfMttXzxb||e{zhyxevu]sqZiiHYV9YU;\X:WO:NG7C>(61.(+&/+2.$85(PL>`^JkiPnj8'l( l(m'm'j$h$f%e"i"d!b!f g"h$e"f"g'j+"e*$d' f'k&#o)#vC4t~~~~~|}x~}}}z~|{~}y{~|~|{|}{tMG.QK4SN4D<-G?1TM9lfSye|w`yt\zx]{w[~{X}V}^|z]|y]|x]~ya{drb|yLzwG{wH{wMxSyU~{T}}Q}P}N}~Lz|M|}P|~M}N~R|~M~PPQP~G~}M|zP~{UXu{~}y~zw\WU"=:$LI-]Z8e_Mun[|v]dhmkcu\hQ[AxT;l@.i5*g.!h#i#l&!l'm$j"i#i#h#d#f$f"g%f$e#f&g(d&e&f%h'f'd&g(h3&i~~}||z{|~|}~{|~~|~z}zz|~}}}fbCHB-RL1SL/UP1VQ/XO1ZT:vp[}x^}w`{w[}y^~y]}y\|z^~{^}z\|x^yd|dm}xR~zQ{P|P}zK}{M~|H}{I}|M~}P{{I}|MyzK|{Tz|N{~H}G}J}L|~N}O~~J{yL~{U~{[Zq}~{{y^VOD^YIfl}wbhmomz`r^aPxQ=oC4h8)b-c/c+ c) i-!k-h,h+i*"i' g"j% i&i'k$j#j%j$g$d%f'f$d%a&^$_$b(e& h$"h%#f(!e'd'f%j,$wH8x{}~}|}~~|}z~}{}}~|}~||xz{y~}z~|}}z~vvsHD%MG2QK0OH0TN2UN0UL0TN:ibQzc}w`~y_}x`|w]}yZ|x[}x_}y^}xc~yag`}xR|wP}L~R|RM~M}{N~{LzyHyyH||LzyM{zOy{Lz}F}KLN~M~K{{KywM}|P~\c}~z{|~yyow]kT^KoJ8iA-jC0e3"g.d,e+g'j*e*e&f g$e&!e)"d* c(c'f&g$g#f#h&i%!h%i%i#h%i$g$d% b$g$e#_$b$c&c% f&g$f&f*"a"d#f$g(!g,"dS~~}}~{{~}}}}{||zx}~~~|~}~~{}[FA#MG0OH0QI3PH/QJ2RL5QJ:g_PyaytZ}x\}x\z[z[|x[~`~z]}x`~yboV|R~zJ|G~zM{S}zN~{M~{J|zI|{L}|MxyL|{RR}P|H}KO}MO}}IzyNywN|{N|Wj}z}|zo`ZtSfK{V=rH.q@0n?0e0#f0$d/%g0#h4'i3'g2)g/"i*h)a&`$ d%f'd%e$g%j&h'"e($c%b&b&f%d%d#e!g! f!g#h#g#g"h"f""d"f!d"c#c"f$e&!e'f(!e%c'a$f$f&d'f*!l7,j~||y}}}y~}z{~~~~~|||||~{c]AD<*KD*OG3SK8RJ5QI4NH3VO9tn[}va{v]{wY~y]|\z\zvZ{]}y]}y^ao~O~O~{K{xH|zMzwL{xJ}zN~N|{J}}L}}M}|Lz{M{|Q}~T|}Q}O~NOO}}JzyKwuNzyNXsx~{prlzbkS\@|U9tJ5pA-n<#i6l?%k?)i?*mA&n=&l5(h.&e'f*g+"h,!f/f,f,f*e&d'`% _# b"c%c&c$g%j&g(d% b$a%b&f#e"c#g"h"g#g"f#e$f#i#g!"c!c!f%a"d%f& f(#f- f*d$e'e&h#f$ c%b&j-$wG9~~~~~}|y}{~z}~{}~~~~}|~}|~~u_XCG@(PI)RJ/XQ9SK5QJ3QK4`ZE|vZ{vYyuV}yY{vW|wZ{v[|x]}y]~y\|cl]|S|P|L}yJ{wN{xM}zP|yR|{M|{N||L{zIz{Hz|Lz|Oz{U}}U~QQQ~PNzzI{zM{zR`}{vlx]sWiK_F}Y:vO3rL0oH,k7+k6,l;1m<5j4(m2#o6%j2"j2"k2#i4"g4$j<-mA*kA%hB-]-#_&h,!g,"i+!h,h)j(h%e#c%c" c!d"b"e%e#c#d$c%g$!g#d$d' g$ f df h"i"e#a$ c#f"e!g!e b b"a"e&g+!e( c'c%g%h'g$h! d#b#d#e%!l2'z`z|{~~}~}|}~}|}}x}}}}~{kwrX^Z8MF+TM4XQ:UN2TL4SL9oiSxrW}x\{wZzwU{xTzvXzuZ|x\~z^{]fn~}M~|P|SzQ|xJyuNyvKzwK|yK|{J{zM{{P|{L|{J|}KyzO{|N{|PQ~N~ON}}M{zMxwFzyPqrRHA/QI5TM5SM-RI3UM>ys_|v`~w^}w^wsUxtR{vW|wZ~z\~z]}xbjf~{L|xN}xRzS{O|wNzwM{xJ}zQ|zQ~P~P~O|~I}~N|~P~O}M|~M}M}MM|zLzwKyxF~{Rch5"i,m/#n3&g4"f6$m:'j=,k;.g:,h;-h;+b4!e/"g2%d/%c*$f-c,a.#b5%g>,b5%a/!a) c+e.!i7(rO1mK1d;&d2 d-c- c+ g'h&g'e(b#b%b#c$b$c"c%e'f%d%e%h%e%c!c"cc#d#"f#h#h#h%h%e%e#f"g#g"d !b!b$b%c#f"d!e%c#d"c#d#g#e$ i('j.%~O7s|}~|{zx~|~{z{{z}{}}{|x}~y|~|}y[vrRWR2KC.QI4UN0TN.ME.`YAzu[yu\|w`yuZxsUxsWzuZ}w]|v[}y]}x_lW{xL{yJ|yK|yO}zK}H||G{zJ~O{zO{zN{zK}|M~~N~M|~L}M}N{|N|~L}L~}L|{IzxExuG\hKe-f(e,"h4*h;)h?&jC-lC1jA/nI6mC2kE.f<(f4&e2$c.&c)$g1)h=,eB'gG)hC,f7(b.#c+"c'!d& b(f=(oOAmM;b1d)d*c*c%d$c)g/f,c%c"b#_!bb"d%d#d!f# e#d"b!b#c"c#b! e"g"f"e!g$e#e$f%f#d#g"!e%d$b#d%!g%h&d#d"f$g"g"f#g$g$h'j/ zYv~~~~}|{z|}}~z|}~z~|y{|}{~|}~|}~nvrRvqWRL2KC-QJ1RK/QK.RL3[U8kfBibKofZohRxsTwrTwqU|w[|xX~{Y~yas|zMyxKzzF{{G~}L~}NI}~G||H}|J~}L|{P{zO|{MMM~Py{Jz{Nz{Py{Q~O~~NzxJxvHupIke>*e(!f+ g2'qC/nD+jC+hC-fC/gE0eB.iA*hA*j>-m<*g7(d4*f6(j:,mF3kN/kJ&j;#g3%h2$f,h+f'e)c3!jF8lO:b1 d'd'f' d&b)a+d+a)a&c"`"] ^ `$c!d"e#d"b!c"a"d&i)d%e c!c#d$b"`#_!b!b#e$f#!f "h"!c#\"b% g%e"d"c"b$a#f%d"g%f&d&!h,&tD5k~~{~}|{|~}~zx||~}{~{wwz~}|~z|~~tnQibG]VbZ;c\?mhL}yZ|^gg~|L{zKzyJ|{K}|N~}ST}~P~~M}}K}}MyzM||L}}L||Mz{P{{Sy|Iz{O{|S|}T~~O|{M{zLxvH{Rca,"c%#b*#d2%d:%hB*hB/e@.gA1c@*fD*gD)iF,jB-jA,lG2eD3mM;hB2nI6lP2h@%h/ d+ d0!c)h*i,e)e) h7*rS3d5f(e%d&d*e,c)a(_'`%d$d$e"c"b$f#c$d%c#c!c!`#`$c&e#h#f#c"c#b"`#^#a#a"c!dc d!_"Z#^$_#b%b!e"b" b$d(g'f&a&!a$h*'i.(yN8||~~|~|}}z~~|~~~~}zuvz|~~}{na[=[U9ZS:^U@\Q;_V<\S>\R=_U<_V8`X>_WB^U=\U8\V4^X6^Y7d^BojN~z[oV||I|{K}}L~~L}|OX~~V~P}}N|~Q}N}}R}}O|~P|~N{}Q{{Sz|Kz{L}PQ~M~}M|{LywI]~aIe/'e+"e+!d-b5#c7%e9(a8.jA6dB.jM2lM3kO5nO2qS9pR=nU>pVCiG5iG0iI.b1#a* b*d1#_*d)a&`%b$c)kC(g9$b%d%e'!c&!d(!f&a&b)`&a$c'e%f&f%h$d#b#b"c"b!`#_$a#c!d"_d!c!c#b$`#a#^a"bb!b!a"_"_$`&c&c b!!b#!b#f$g$h$d$d$g)!l1(l3,p[||{w{{~}~|~~~xtzzy}{}~|y}{y{w||~~}yz~z~~}~}yZYO5[R6_U9bX=bW?bVZS5\V6\W6b\?ibMtoZpOJ~N~}N~~K~~N~VR}OS~S~R}}N{|K~N{~G{}O}Qy{H{~Iy}D|}HN}}NywL{xOiqG5f1$d,#a'"b'c)c-!c0#c6'kC5hH4qR8qR9nR7nP5nT8pV>qVBgG7b:*g@,b7"e- b'd( d* d(g*d*a)c$a"b,a)!d%d&d) e&"e% e#c%b&b(a$b#d"f$d"f#d#b"`$`#`#_$_#`!b!c!ac a d"d#d#b!c b b!` a` c!b"`%c%e# c$a&c"b!ag$g$g$d%d*d)$k96wx|z}}w~~y}{~|~z~~{zz~~xz}~zumL^N?_U=cY>e[?g]AcV=eZ=cX@cYBeYHaUFcX?^U8ZQ6[U7_U=e]BibGngO{^e~O}}G~}L~}M~~L~}JU~UTRRQ}O|KP}~Q~U|M{~I|H~HKM{zNzyOYz_h5*b+d'f% d$b#a%e+e-g9+jI5mL6qP4qR5pS7oS:nO:j@,g8(d5'd:(b3"c)b&c% f&#e("h,!i2!h3a%a#_&^$a$d%d%e$ g&!i$!f&!a'#b%e'f&h&c#_"c#b%b!`"^"_#c"c"b#a"`!_"`"a!a c!f&c"a"`!_!b ade"c!b!!b"!a! ]#^#b!b b!d$f&d(b'd&e%!g,*XR}}~{{~z|}{z}~~~{|}{{~}|~}}~~}||}qj^H\R:cY=cZ=d[@dZ?`W;bW@dZ?bY:cXAe[EaX;\S3YP4\S7dZCibHlcIohMj]~}M||E~}MKH}}JS~}RSS~T|~P|~N{}K|~MyzNwwO|L|~I}H}~LQQ~|VzxRfxO?j,(f(e'e#c%_%a& c(c'_*e@-kJ3nM0lL0mL2lE3k=.g2!h3$g2'd3&d0#e*!b'c) a%"a)"c0#g8&h8 b'^ _#a"b!d$d%f'f*f+!d'c% d% e% d$ c$a$^"b"g#e#a ^#]"_\^a"_ ^$ [$]#^_ac" d%c#a"c%acf#e%"d$ b% _" _$![!^a!b#a$b%f( g&"e$f$g)n5(nT}zxz{~{y~}~}}|}}~}}y~y|}|{~}zv~~~}~}w}~}}|~~wce\GaY?bZ>aX@cZAcYCbYA_WD_W?aX9]V;]U9\S7ZR2YP5^U9e[BibHkbFrkOnWRyxH|{L~D{{ByxJ~}S~S~S~P~S|~M|~M|~Kz}IyzOxzJ|~KL~KOQ~R}|TzxSke3*g)'f)d)c%a$`%c$d&b+d6$c>+c>)eD*kG,mC,h8'd,f1f6$a3%b/&e- c*a(c)`'a+#b/$d7)c5$_&`#^"b#d#c##c$d&f-#h5!b*b&a#b$`$!`#b$"^"_"a"b#_ ^!]!^ Z\ \] ]"\" _"_a `#a$ d%h$!g$h%e!df g$h%e%c$b#!]!^ `!a#a&b&!b&&g'$h%g!i'h* l6-u|~|{~{|}|z{}~~{}|||z~|vuzz}y|{y~w}~|~|~{{~~~~|~xxrOf_B_X=d\=]T8e[@e[FbY?bXB\S6]T4YO4[S8ZP7ZP8]T<_W:e^CkdIqkKhn[Uz{F{zJ||GzzH|{K}|N}|M~}O}}K}MN~N~P}~Q{}J}JM|~M|~KK}}I||IzwM~ZzVa,!e,$b(c)!b'!a$"`$ c$b'_*f8$d;'c8&^3#c3 f1 _(_'c2b4_1$^*%a'a(a(c&b'`*a-d5#e5#d*!d%b#b ` a"_"b&d(f/ d0b)_$_#^$^" ]#"]" ]"^%_$a!"d"$c#_ [ [ ]!]! ^"`# e%$b c!`!_#b$ f#f%h&f$e d f#g$e& e$d%!^!]!]!d$e&d%a%#a%"`%b#d%^%!g-*uL?y}}~zz{|{~}yz{rvvz}w|zxxwx}~{x|~~|~~y}{|}}~}~~nibBb\:_W>bZ>]U:d]BaY?_X;`X>_X9ZQ7\Q<^T<\R=\S;`X?e_?haEicIlhIp][XR|~L~~PzyO||L||K~|R~}S~}O~~PQT}~T|}RN}M~N}}M~}K||IyxH|xO{tTkpG1e+#b( `& e+$e(!c%$`$"a%a%a'e2 c4$c4&a+d*d*`&a)!b, c-^+]) `'b(b&d#c&`&c+ b1 b.a%b$b$e%c%b&a"c&d&f*e1a'c%c#_#`$!\#!]"`"`"b#c!d$b#b!_YY!Z!^%b% c""a `] \"_$c!b#b%d# e! e d"f$#c"&b"!c%"b" _#!_!e"f#d$f%a#a#`#a$a("b''f,-xjy}~||}wy|wzx~}}uy{xvy~{y{xy{{uv}~}zyz{z}~{|~~}{v}{{x{|y}{y\g`>^V6_V>cZAWN5bZ?bX=aY=bY>`Y@`XDaWEf[Eh_Df_Cf_Ef_BgaFjdGxuUn]^Z[T~P||N~}M}}L|{O}|P}Q~~O~}O~}R~}U~R~OP~MNP~|M{xKzuOzU\c0e*"b%c( c)e& d"#f'#f&f'f&d+"d5"c1b)b%a&]$]% ^#e(`(a'a$c'c'c'd(e+c*a)a&]#a$ f%d&a$`$a"d"e%d, f8#b/!e* c%c%_"_$e#f"d#a!!b"b']#a#`a`a!c%e&"e'"`$] [ Z ]"bb a$d$#e e!!d"b# a!#`"!a#!d#"a$ _#c"c!b#e%d%a$a$a'#d)!b%"j+'r>3q|}}|{{y}~x{~}||z|wy|}~}y~~xsv|}|~~zz~~}|~}~|}}}~~~}~vngHe\?bY9aWc[Ec[Fe^Fh]Kj_JndHldGibAf`?gaCkeFgk_[X[VS}~P~~O}~F~~J~}P~M|~KO~}N~}O}P~P|~ORRNMyvHxuI\qGk1&e) d(d&e(d%d$ b%!d'a'c&"e.'e4"d2!a(!`#!a# `#a#_$_#a#c$c#e%d(b/b0a."a-b+`']#_#c$e%b$`#e"e"f)e1"f<'c5$b) b'`$`#_#f#e "d!$c"#a#]"]"^!``^ a e$c!c$a#!a!#b!!^ _d"a a#d#f% e!"a c$`"!`"a" d#!h""f#"g#"e$e%h'd&d(!b%c+$c*%`'"f.g0#`Ez}}}~z|~}|x}~zxzwyz}|~xy~|wzz||~}{~~{}~~}~~~}|}}|pbUAd[A`V(a*d&b#c"b"b"a`!a"b#_!^"_ __^ `!c%d#c!d##a!"a# _"`%c"`!]#_#f$g$"d$!d#!c"c" ac# b# d&!c&%d%#d$!b%_(!b0&l:.oD5zTC\KkRx`gxyz{{{{w~}}}|{~~}|xsy~}}zy~{wyu|}xz}~|zuu|~}x~~~|~z~wwYUI7`W9]S9aW>d\;WM6_V?b[?e\Df\CcZDe]DcYCbX?d[@e\Af]@b[`V=[P9`V<^U9\U8[U4[U5a[Bia^[[XXZ\~T|}Q{|M|}OU~~Vz{P}}W~~XS|~J|~NSW~WO}|NzWc}bGf6)c3#b1#c."`+a'c%b'`&"_&$b)#c,!a(d'd&_$b%i*!e*%d%$f$#f#e#c'e+f+f)e'e%`$_%]'b$f"f&e&e%!b$_#b$c'd*!g8&e='_3"`)d'e&c%_#a"`"_%^$]"_!a%`#`$c"b"b"e%c#$a%$c&c%^&#]& _(`)`.g9)pC4{SAaNoW|cnpmjc^\~]yT|xL{wPzU{vO}xL~zU{xOzwM}|Qf|{|z{~}{z~w|}}~~~z{zy}{vy|z}zzzz~||y~~|}{~~~|kSM2RJ/OE-TK7SJ9TK6VL4ZR8\S>ZP7YP3[S.[T3YO7ZP6TL0XO3\R5ZR2^T&h:%b4#c-e*d&e(d)!`&]#b%a#^!`"`%d)f'e$ h%e"c#d$c$c#c& _"e'"h-&f2%h;%`.^ _"a%f(e%c$b$c$b(b,b2b+g(#e$"f$$c(b)`&_&]#"\([*Z0!f?,oI:wWKiTs^|dgjiid~\}Xy^}zV{S~zS{V|X|W~zS~{PzwL{xK|zM|yQ}{PwvHzxG|zLywIxvJwtP|xRyvIxuHzxIywGywO|yQdsy~}}zz|z~|zy|~yz|}~yz|~{~}~{}}{z~}~~~}uxmeL^WARJ8RJ8QI7PI.F?$XP5b[AbZ=]S:WN3UL5UM5RH3QH/UM4XQ7]V9_[9d_~Y~[~Y~W~X~V~VZ|V{~Px|L{|P}P}~V~~]|~P}Mz}K|L~O~Q~|S}|S~|W~{Znp]CeE3cE/fC*j=)h8(d3d+e)f)f,`*]$]!a"_!_#`'d)e'e#b"a!d"d!c"b#a#c%!c)$f2&b2!g9&a-a#_ ]$`' d(!e* `*a(c(b*_+`,b.#b4(g:2rH6zWA`GnWt]eorfcdY~Q}{Q}zP|yO}yS|wU|xP~zT~zT}xV{wRzvM{xI|yO~zU}yN|xIywGzxHzxF{yH}{OxwHtsExuI{xHzxHyxFwuFwtIyvIyxHywCxvGvsO}{Tsu|{{z}~~}}{{xy~{~~{}}{|}z|}{|}}{|wz~|~||}y~}~}{hibMaZEVO8OI3SM5QL/JC*JC-ZT6d^:c[?_W=YQ6XQ2^V,g7&f/#g,i- i3 `&b#`"_%]$a(b+d-#c'c#a!_ c"d$b#a& b' e)f+"f2#d9!iA&`3b*a&\%\*^0e9)kE.qK3bHjTu`kljicb\~Y~{M~{QzxK}yM}yJzwLzvP|yQ}L}{I|zK|xRzvSyvP{xO~{SxvLyuO{wPxuJzwIyvL{xMzwGyvHxuJwwEvuA{yIwuJyxHvuGywIywFxvBxwEyvHyvGywGyvHzyAyxFxuSez{{x~~}v|~{}~}~{}}}wxz{~|}{z{vw{{yzzv|~zz}}~~}~~~~~|z^g`MaZEZS8PJ.VN4SM2QK5HB,SN.`[9a\?a[>`Z8XR4^W;`Z8aY;[W:]Y?rpQjQYT~T[`XSY[~Tz~N{~P|~O~P~N|~L~T}M|N|~O|}N~~U}Y}]b~\pU:jR3kP4jL3mJ1kC0j>/g5)h/#c- a- _'c$d&`'c*f,g1j5&f,"e)#d& c%b' `)"^)!_."]+ ](b2$e?1nP=y_E|cIlLtZjmjjgc`}]zV{xQzvR}zR|{I{yJzxJ{xM{wOzxK|yMzxHzwH{xIxuHwtLzvI|wJ|QzwNwuIvsHxuHyvHwtHvuDyvKwsLvtEzxJwtPvuHvtEwuGxxHwvGwwHzyGwvH{zJywKywJvvEwwEzyOxwIxvLyvLxuGyxJwuL{yTnz}~}||}|{{y|{z{|z|{zy}|{vy{z~yx~||yz~~|~xw{|~~||~~{~~{~}sniPibMb\DWP9[U9\W:SM1YS9_Z<_Z=c]Ad]Bf_Ce^D_X=XQ8[T9]W:^[:heCea\^^~[\Z\~Z[]Z~Y|~V}O}K{~K~T~U~O~P{|R~V}~U|}P]rueKpW?oVZT9a[?c]Ce`Ee`@g`EiaJd\C`Y@\V=YQ:_[=jhKoZZ[]a\S|Z}\]^\\|RzI|H}P~Q{}MP~W~~[Z~UU^jo\GoXEpY?pX9mT:jP7jQ6mM:g?0b4#[-_._.g8$jA1wXC}dMqVy\{\fdggfdf{^{[}yU}|O~R~}Q~|UzxS~|U|yV}zW{yUzwRzxPzxP{zM{yOyxMzzIutGvsGvtFwvGxwGwuFzxGzwLxtOzxLyvIusGvsHxuKwvGywIzvNxuMxwIvvExxGwvFvvIwvJyvP|yV{xT|zLxwGvuJwvJvsKwvIywKyyLxyHyyGxyDxxGwxHywLyyJxwLwtSwuQxvMwvJ{yJxvG{yMm{{{|{wz{yxy}|xw|}x}|}~}w|}z}|~~{v}{y||s|~}|}}|~~}~~~~|~|z{Xe`HhbJc]CXR;WR9`ZGb[G`ZA_Yd^Cc_>e`Af`Ee`Dc]C`[>]Y=_[Bzw^kX[~Y]\[~Y~]|Y|U}W]]W}Oy}K~K|LTXUUYXYfzOq]BpZFqZEr\Cr^F{hMoRrXwX|]ikhdlb]Z~Q|{M{xQ{xOzxR~{V~}W}W}yY{wX{wX|yT|zN|zP|yTzxMxxH{{NxvKxwIzyDyyH{yMyxLyxKyxKvv@uuAusJurIvtEvvAvuAwtFxuFwuGvsKvuGvvCvuAvuEvuEwuI|{LzwPxwOyyKvvHwwJwxMtvFvwIuuLywO{yOyxGxvJwuMxvNxvLywPzxSyyOy{KwvKxwJwxFx{Fz{KzxNxwLyyPxyJyzBwvEyxI|{L~}Sx{{z~{tz}y|}{y|xv{{x|}~}w~z}y~yx|~~~xvxzy}}y{}yv}zz}|~~~{~}wx}zrrnNe`If`Ge_H^X?TP6]VC_YC`[>^Yb\?c]EgaIjfLkhIbl\\~]]~\}]~X|S}V}X|X|U}X~Z}V~R}Q}V}V{}V|~X|~XY}V~W~ZZSVY{|Y~X~X~Y}R|~S|}S}~Tz{OzzJzzMyyJyxIwvIzzQz{L{yOzxM{{IwvJzxJ|zPyuSxuOxwIyxP{yR}{T{W{xQyvKwtFxvIxvHwtHwvHvuIxwJutGvuLwvJyxLzxQxwJxvGxuGwtEvvDvwDutButAttDutJuuLwwJutJutJwwNwwPxzNxyLuuLwxMwxKxzIsuFvxHy{LxzKyyQuuMzzKxyLxxPwxQwxMwyLxyPyzTz{V}}X}~T|~Mz|Qy{SvwPyzSz{SvxQxyPwyNzzWkzzy||y{}~||~|xxuvx{|x{yz~~{v|yyu~~z|{}{}~|{~~{{y|}z}|}~~~ysnhId_?b\@`Y?aZB]U@XQ9TM6]W<`Z?]W=_Y@a[@_Z=_Z;`[=a\?c^BfbEokQo_UV~Z~]_Z}W{S|U{X{W|R}S~Vz}Uz|Tz|T|}U}~TUY~YX~Z~]~Y|W|UZ~]}V\|}]}~\|W{{T}}U{|PzyOzzJxxFzzHzyHyxLzxMyyFyxMywP|zR{yNzyOwuJvuHvuHyxH{zM{zO|{O{yR|yR{xMxuIxvFzxHywLxvLvvFtsHtsHuuCvvEwwFwvGvtJxuKyvHvtBtsFtsGvtFyxIutEwvGuuLuuPxxRwxQxzNz|Uy{Tx{LuwGvxJwxLxzOvxOvwN{}OxzMxyPwvG||LzR~[~aba_dgehgcfffcf`}Waz~{}|z}~|~}~w{|yzzzuxxzz{{tzx{}}{|z{}~ywz{|}||}{}~}~zy~z}}}}p~xU_Y=_Z>^X`Z@e`CmjMcb~YZ~Y~]}][\}[|V}Z|^~]`b~Y|~W{|V{{U{|T{|V}}[}Y|~U{X{X|Y|X{U}U|V|V}U{S~Y}T}RS}~R{{Q{yQzwQxvKxwHxwGxwHzyGyyF|zO{yQzwQzyKwvDwuGvuEvuFxwJxvOzxLzzHzyLzxL|zNzxMwuHywJywNzxQyvRvtLutGusKutKxwLuwBxyBwwBvuGvtMusItsDxwHwwEwwFvvFwvEwxHyxLvxIvyJvyJtwIxzLy|Sy}Qy}U`ekmjonoqpvmnosnmknqmpllknm{{}~{yy}~yz|}|~{~|{y}|wz~~yy~}z{~zyzyyyy~{yxyuy~|{|~}~}~}~|{}z~fc\Je^Md^JaZG]W=ZT9XR9]W;[U[V:UO2RM0ZU:_XB\VA[V<[U;XS9^[;jgFo^Y[|YzS{V\[Z}^}\|X|[}[[~X{~Pz}Ox|Kz}M{}T}WW}V|Y|^|Z|]}Z{Yz~X{Z{X{W{X{V{~Uz|X|~WxxW{z[{zZyyTxyOvwJuvNxxQxxTuuMvwLxyOwxMvuMvuKvtKwwGwyFwyGyyNwxOvxMz{SxyNwyKwyLwxPvwJxzJwyIxzMvxKwxKyzP{|RxzLyzOyzOwwPvwIsuCtvFuuEvuJuuHuuCtt@uuFutHuvFvxFtwEtxFy|Sajlnoosqkjnjnnmnpoqonsrpkinto{|}uzx{vyzvtw~~yxxov}{vzzvv||{|zxy|vuy}v|~{ywux|}y{zx~|~}|{{~|}}}|}~zz~~}}}}}wunb]I_[F_ZE^ZBa^;TP5VQ:\X>_ZB`[Cb]A_[Bc_CwtUi}W{S{U}W|W}Z|W~Y}X}^}`zX|X|X|S{Nz}Nz}Oz|T}X}~Z}Y{}W}Zv{S{Z|U{SzSzU{Y{X{Yy~Vy}Vy~Tx|Vz{Xx|UvyXzzXxyPwxNvxKwxMwyL{|Py{OvyIvxMvwOwvMvuKwwGwvIyxLwvKvwIvxHvwMzzTwxPxyMuvJwxMwxS{{Sz|LxzOwzOwzNxzQyzTz{TwxPz{QyzLz{PxyOvwJwzGuxEuwDsuFsuDtvHuvKtuHtvIvyKtwNvzMclnnpponpmkonnopqmpojnnpnkknnr{zy|~||zwz||{xx~}zxyxqq{~yxzwy}~yx{yx}yx|yzy{xzwt}|wyzz{~~z~}yuu|zx}|{z{|~}|z{|wt``[E^[C^[?^[:\X:TO7TQ4[W:]Y=_[Bc_FcaGg]~V|W~Y|Z}X}UX^~Z|^|a|_{U{Sy~Q{~Ny}Nx|J|R|~V}Z|~ZzWy~Vz~V}[|W}U~Z~^~^{XzVw|TyRz~R|S|~V}YyzYxyWx{MvyJwyKxyQvyJwzN|~Q{}TwyPwxQuvNwwKvxGzzOxvQyzPxzLvwIwxJvvPwwQwwOxyOwyLxyNwxOwxNwzLuxNvxQy{Uz|UwyRxzQz|PxzPxzQy{NxzKyzLvxJrtHtvLtwKwzN{|[e{}[^ddmrpnnrniknorppppnmlmomkhopppuy}~}~~}u}}}|zq{|z{{|~}z{{{{uzwz|ux~{x{yw{wwwwwzy}|}{}|z|w~|zx|~~|}}{zyw{z{~c^K[VDZV>]Y=\X=XT;VR7UQ8ZY>^\CdcGijLo~UY}X}WzW}[]YY[~`~a`]Y{~Ty|Ox{Oy}Lz}P~V]|\{V|\|]|]}[}X~[d}_}Y|W~XzU~V|P}Qy{T|}\z|Xy{Rx{PtvNwzOtxGy|O{~U|}\\y|PvyOz}MwyLxySvwOxyNwxLvwJuuLwxQvvRwwPxyNwyLxzOuvQwxSy}MwzMy|RxzQy{QwyRwyTwzQx{PwyNuwMxzNyzUwzPwyUb|]_guonkqsrnqnqumkrvwtpopmmnpprsty~~{}{~|ywux}|~x{uxy}}zwyy~}xz|{}{zytx}{}{z{{wzyuvqx~z~||{||~|z~y}}yx{~}{`SQ;UQ:WS:ZV=YT=YTAXSAZUA_[EdaF{z_j}WZ~U{V|[}\_~[{V}Y|W|X}Z}~]}V{~Oz}Ry|Rz}Q|S|R{~U}ZzUzVzVz~[|_|\~\}^~_~]|Z|X}W|TyNv}Jw|Oy}W|\zVw|Mv{Lw|Lv|Hv{NvzV{~[uyWwzTvyTw|Qw{MxzVvxRxzLz|OtuNtvJvxPvxTx{PtyLuyPy|UuwRy|Vz~Rx|Mx|JwzOvyMx{Oz{UwySz|QwxV{}YXmllsrrpqomprlklrqqpojtuxtpuwx|zyvsv}||z~{|~yxz}|z|~||~~yzwu~|yz{yuyz~{y{|xy}yy~xxx{vouuv}z{}{{x~|{|}}~~|~}|z~~~|{ymqnNUP=TP7UQ8VR9TO9XT=]X?_[Bd_Dma{}W}X{W~X~]{\~]}Y{Y}X|X{S}X|}X{~S|U|~X{~Sy|R{}P{~T|UzUyU|T{Rx~Q{X~[}[}]}\~\}\|ZzRyPyOzQ|[}[|Zy~Xy~Rw~Mw|RzRzSy}Xz~Xy~Xy~Y~_}_zYy}[y}ZxzV|}ZyyYwyPwzMwzPxzUx{Rx{Rv{TxyZy|Uy|Qx|Ow{Iy{Uy{R{}X}Y~\folhlmmqptlllhuvtqpurw{}rz}}~{|}}|xv}{~|w{}{x~xtu{|x|}~|yz|{~}t{{yxy~{{z{||{{~|zyyv|{uywxz{{{zz|v|}xy{{}~w}~}z}|we^[;VR9VR8TP5TP5UQ5YV8]\>heFj^~\}W|W}XzTzSzR|V{W|X}V}V}V|~T|Pz|Q{}V|~S|~W|~Z|~W{~W{~U{U}T{Qy~Uz~Z|Y|X{Z|\~[}_|[{RyNx~PzS`hmf^`ddbcfdjurmpplfih~^{Yx{Ww{Tx}Xu{Vz}Y|[}bghpgjlmmmolnnoopvppqw|~}|~~{y~~~x~y|||~zz|wy{yzzzx}~|}z~~tw{|~|}y~{||{|~|ywx|}{y~urv|{~~vyvut}}|z}z{{}{y{~{~y{|~yq|WYTBUP;TO:TP6XU9ZV;]\>urTi^][[|V|T|T}R{W|[}X~X|Y|~Vx{Pw{Ky|J{}S{}T|~Z}Y|Q{T{W}_|VyPw|Vz~[|Y|W|Z}\}^}[|X}WXX^kopplinrpljmnprqrqnlqonieikgiptwvvnikouyzuwy}xzyuw|}}{}}z}zz{|}{}{wy|xwx}ty}|zy}|{{{xvy}|{z|y~~w~}|}~yrv{~y}wus{}zz|wvzww}}z~}|}|}}z}~}{~z}}|||}{wmgcGWR9VR8VR9WS;WR@_\Ag]Z[W|V|X|X{U|TzV{W{U|X}\{}Wz}Oy|Nx{Lz}Rz|T|V}V~W}V|W~[}[zV{W|Z{Y|Z_}[~^a`eplgnwrnrplrrrppoopvpmopslkroqtsttuzz|spu}v}|~~}|vsty{z~}yzzy}|zz~~|~~x{|zqq}uswywwx|}wwu|}||~yyzyyzty|}}y{}{x{{~yxxvxzzuyutsvvz~}z|wvyz~||~~}~v{y|~}~}}{~~z~~z{x\RM4UQ8WS;WRYW>XVVT=k`}U|Ty~W{Vw}QyWz~[|[|W}X{[|\zU{N{Nx{Kw{Gz|N{}O{|R~W~V[]}Y}X}Y\jtsnpqvtvsompsuuvswy{{xw|{~|}{{|y{|~zy~~}v}{|{}vvyy{}~}{z}|{{w}~{x}~|{~{}yz{}}{vy}yy}{z{uwy}zw{xvy{vuy||y{z~~|y|~|ysuztvuqntttwwuvz~}{yz~{~}}~yy}|}}|~}}~||y~}xqqpRNK put aplpack_1.2.7.tar.gz % ftp> bye % ========================================================== % Paketverteilung fuer Rechner: 138/20/21/102: % cd /usr/lib/R/library/aplpack; % cp -rp $HOME/R/aplpack/lib/aplpack/* . % ========================================================== % Pakettest: % cd /home/wiwi/pwolf/R/aplpack % echo "library(aplpack,lib.loc="lib")" | R --vanilla % library(aplpack,lib.loc="/home/wiwi/pwolf/R/aplpack/lib") % example("stem.leaf") ## ; example("faces"); example("bagplot") % New Report: Wed Dec 14 11:38:04 2011 % New Report: Tue Apr 14 13:12:40 2009 % New Report: Wed Mar 29 11:00:59 2006 \documentclass[a4paper]{article} % --- LaTeX preamble ============== % --- title page =================================================== \title{Stem-and-Leaf-Displays --- selbstgemacht} \author{File: \jobname.rev\\in: /home/wiwi/pwolf/R/aplpack\\H. P. Wolf} \date{Version: 2013-10-30, compiled: \today, file: ms.rev} % --- sizes of non text elements =================================== \renewcommand{\textchunkcommands}{\normalsize} \renewcommand{\codechunkcommands}{\small} \renewcommand{\Routputcommands}{\footnotesize} % ================================================================== % --- packages \usepackage{graphicx,mathpazo,courier,alltt,amssymb} \usepackage{graphicx} \input{uml-ok.tex} % --- fonts % \usepackage[scaled=.95]{helvet} \usepackage[T1]{fontenc} % --- commands to control the layout of text and code chunks \parskip1ex \parindent0mm \textwidth=16.5cm \sloppy \textheight=25cm \topmargin=-30mm \oddsidemargin=0mm \parindent=0mm % --- end of preamble ============================================== \begin{document} \maketitle % --- begin of document ============================================ \renewcommand{\textchunkcommands}{\normalsize} \renewcommand{\codechunkcommands}{\small} \renewcommand{\Routputcommands}{\footnotesize} \maketitle % 20150429: change of computation of the location of the median % 20111214: exchange of some lines so that argument "reverse.negative.leaves" works % 20131030: error mailed by John Fox corrected in stem.leaf.backback @ \section{Einleitung} In diesem Papier wird eine eigene Umsetzung eines Stem-and-Leaf-Displays gewagt.% \footnote{Hinweis von DT: {\em ...aus Velleman/Hoaglin: ABC of EDA, Seite 15: It is easy to construct a Stem-and-Leaf-Display by hand... It is not nearly as easy to write a general computer program to produce Stem-and-Leaf-Displays.}} In der Tat enthielt der Weg der Programmierung einige Hürden, die inzwischen hoffentlich zum größten Teil übersprungen sind. Besondere Herausforderung sollte dabei in einem verständlichen Code sowie einer Auf\-listung von Tests zur Sicherstellung der gewünschten Funktionalität liegen. @ \section{Die Funktionsdefinition} \subsection{Überblick} Der vorgestellte Vorschlag lehnt sich eng an {\em UREDA\/} (Hoaglin, Mosteller, Tukey, 1983: Understanding Robust and Exploratory Data Analysis) an. Haupteinsatzzweck wird in der Verwendung ohne weitere Parameter gesehen, jedoch sollten bei Unzufriedenheiten oder Sonderwünschen durch gezielte Setzungen Varianten erstellt werden können. Hierzu stehen folgende Argumente bereit: <>= ################################################################## #Description: # # stem.leaf produces a stem-and-leaf-display of a data set # # # #Usage: # # stem.leaf(data) # # stem.leaf(data,unit=100,m=5,Min=50,Max=1000, # # rule.line=c("Dixon", "Velleman", "Sturges"), # # style=c("Tukey", "bare"), trim.outliers=TRUE, depths=TRUE, # # reverse.negative.leaves=TRUE,na.rm=FALSE) # # # #Arguments: # # data: vector of input data # # unit: unit of leaves in: { ...,100,10,1,.1,.01,... } # # m: 1, 2 or 5 -- 10/m=number of possible leaf digits # # Min: minimum of stem # # Max: maximum of stem # # rule.line: = "Dixon" => number of lines <- 10*log(n,10) # # = "Velleman" => number of lines <- 2*sqrt(n) # # = "Sturges" => number of lines <- 1 + log(n,2) # # style: = "Tukey" => Tukey-like stem ( m = 2, 5 ) # # trim.outliers=TRUE => outliers are printed absent # # depths =TRUE => depths info is printed # # reverse.negative.leaves=TRUE => neg.leaves are rev. sorted # #Author: # # Peter Wolf 05/2003 (modified slightly by J. Fox, 20 July 03) # # rounding operation for comparing added 29 March 06 # # 07/2008 NA-values are counted if na.rm==FALSE # # 10/2010 rounding error in computing of leaves conremoved # ################################################################## @ Das schwierigste Problem ist die Erstellung einer geeeigneten Skala. Ist die Skala gefunden, können die Daten als Blätter bzw.\ Extremwerte identifiziert und im Plot angebracht werden. Zum Schluß ist das Ergebnis geeignet auszugeben. Am 29.3.2006 wurde ein Rundungsproblem behoben. @ <>= <> <> @ <>= ## ms <- stem.leaf <- function(data, unit, m, Min, Max, rule.line=c("Dixon", "Velleman", "Sturges"), style=c("Tukey", "bare"), trim.outliers=TRUE, depths=TRUE, reverse.negative.leaves=TRUE,na.rm=FALSE,printresult=TRUE){ if(missing(data)){cat("Author: Peter Wolf 05/2003,", "(modified slightly by J. Fox, 20 July 03)", "03/2006 additional rounding to prevent misclasification", "07/2008 counting of NA's, 04/2009 improvement of rounding", "syntax: stem.leaf(data.set)\n",sep="\n") return("Warning: no data set found by stem.leaf") } <> <> <> <> <> <> } @ \subsection{Skala} Für die Skala wird zunächst gemäß der festgelegten Regel eine grobe Zeilenzahl für den Plot bestimmt. Dann wird der Bereich, den die Skala abdecken muß, grob mittels [[boxplot]] festgestellt, sofern keine Skalengrenzen beim Funktionsaufruf angegeben worden sind. Mit Hilfe des Skalenbereiches und der Zeilenzahl läßt sich die anzustrebende Größe des Bereiches ermitteln, den es mit einer Zeile abzudecken gilt. Diese Größe gilt es mittels passendem Stamm und passender Maserung umzusetzen. Da im Folgenden die Position des Dezimalpunktes für das Stem-and-Leaf-Display keine Rolle mehr spielen, können alle relevanten Variablen transformiert / normiert werden. Mit den groben Berechnungen und den verarbeiteten Sonderwünschen kann dann die endgültige Skala erstellt werden. <>= <> <> <> <> <> <> <> @ Zunächst gilt es den Input zu checken. 080711: Zeile mit NA-Zählung [[n.na]] eingebaut. <>= rule.line <- match.arg(rule.line) style <- match.arg(style) n.na <- sum(is.na(data)) if(0>= n <- length(data <- sort(data)) row.max <- floor( c(Dixon =10*log(n,10), Velleman=2*sqrt(n), Sturges =1+log(n,2) ))[rule.line] @ \paragraph{Skalenbereich} In der Regel werden beim Aufruf keine Grenzen für den Bereich der Skala angegeben werden. Das Maximum und das Minimum können untauglich sein, da eventuelle Ausreißer zu üblen Effekten führen können. Deshalb wird, falls [[Min]] oder [[Max]] nicht festgelegt sind, diese mittels [[boxplot]] ermittelt. Die Spannweite der nicht-Ausreißer wird auf [[spannweite.red]] abgelegt. <>= stats <- boxplot(data,plot=FALSE) if(missing(Min)) Min <- if (trim.outliers) stats$stats[1,1] else min(data, na.rm=TRUE) if(missing(Max)) Max <- if (trim.outliers) stats$stats[5,1] else max(data, na.rm=TRUE) spannweite.red<-Max - Min @ \paragraph{Normierungsfaktor} Zur Darstellung muß eine geeignete Normierung der Daten erfolgen. Hierzu wird intern ein Skalierungsfaktor [[factor]] ermittelt. Der Faktor zeigt an, mit welcher 10-er Potenz der Stamm multipliziert werden muß, damit er den Bereich der Input-Daten abdeckt. Das Maximum der Daten reicht nicht zu seiner Bestimmung aus, da Inputs aus [1,989] zu einem anderen Stamm als aus [980,989] führen. Besser ist die Spannweite als Ausgangspunkt. Diese erbringt im ersten Fall 998 und im zweiten 9. Im ersten Fall könnte sich ein Faktor von 100 ergeben und die Zeilenstruktur [[0 | xyz]] bis [[10 | xyz]], im zweiten ein Faktor von 1 bei Zeilen der Form: [[980 | xyz]] bis [[990 | xyz]]. Weiter betrachten wir Daten aus einem Intervall [980,982]: Wenn wenige Daten vorliegen, werden sich die Stämme [[980, 981, 982]] ergeben. Steigt die Anzahl Daten an, steigt durch eine feinere Maserung die Zeilenanzahl. Bei 1000 Werten werden nach der ersten Regel ca.\ 30 Klassen benötigt, was zu einer Faktorveränderung führen muß: [[9800, 9801, ..., 9802]] mit Faktor 1/10. Nach Regel 2 benötigen wir dann 63 Klassen, nach der dritten 10. Im Fall von 5 Werten liefern die Regeln 6, 4 und 3. Hier ist eine Übersicht: <>= anz <- rbind(dixon=floor(10*log(n,10)), velleman=floor(2*sqrt(n)), sturges=floor(1+log(n,2))) colnames(anz) <- paste("n=",n,sep="") print(anz) @ \begin{verbatim} n=2 n=4 n=8 n=16 n=32 n=64 n=128 n=256 n=512 n=1024 n=2048 dixon 3 6 9 12 15 18 21 24 27 30 33 velleman 2 4 5 8 11 16 22 32 45 64 90 sturges 2 3 4 5 6 7 8 9 10 11 12 \end{verbatim} Wir erkennen, daß gemäß der ersten und der dritten Regel der Unterschied der Zeilenanzahlen eine Zehnerpotenz umfaßt, nach der zweiten differiert die Klassenanzahl um 2 Zehnerpotenzen. Wir wollen ausgehend von der Regel die Länge des Intervalls bestimmen, das zu einer Zeile gehört. Dann versuchen wir dieser Länge durch Kombination von Faktor und Maserung möglichst nahe zu kommen. Ausreißer dürfen dabei natürlich nicht berücksichtigt werden. @ Eine grobe Länge für das Zeilenintervall erhalten wir durch Division der gesammten Länge durch die anzustrebende Zeilenanzahl. Wenn eine Einheit angegeben worden ist, ergibt sich der Normierungsfaktor mittels [[unit*10]] sowie zur Erzielung einer 10-er Potenz durch einen Rundungsprozeß. Ist keine Einheit angegeben, ergibt sich diese aus der zur Zeilenintervall\-länge nächst größeren Zehnerpotenz. <>= zeilen.intervall.laenge <- spannweite.red / row.max if(missing(unit)){ factor <- 10^ceiling(log(zeilen.intervall.laenge,10)) } else factor <- 10^round(log(unit*10,10)) debug.show("factor") @ \paragraph{Zeilenintervall\-länge} Nun werden aufgrund der ermittelten Intervall\-länge (im Zweifelsfall eher etwas groessere) Intervalle (und dadurch weniger Klassen) definiert: [[delta.tick]]. [[z]] zeigt schon eine normierte Länge an, die mit Länge der Größe [[0,.1,.2,.5]] verglichen werden. Der Vergleich mit 0 dient nur der Absicherung gegenüber pathologische Fällen. Als Resultat wird eine normierte Zeilenintervall\-länge aus [[.2,.5,1]] ausgewählt. <>= z <- zeilen.intervall.laenge/factor # z in (0.1 ,1] delta.tick <- c(.2,.2,.5,1)[sum(z>c(0,.1,.2,.5))] @ \paragraph{Maserung} Nach der hier implementierten Auf\-fassung gibt es nur Maserungen aus der Menge: $\{1,2,5\}$. Die Maserung [[m]] ist der Kehrwert des normierten Tickabstands, so daß Tickabstand .2 zur Maserung 5 führt, in einer Zeile können dann 2 verschiedene Ziffern auftauchen. Wird jedoch die Maserung über das Input-Argument [[m]] festgelegt, muß [[delta.tick]] angepaßt werden. Hierdurch lassen sich übrigens auch Maserungen wie [[m=10]] erzwingen. <>= if(missing(m)) m <- round(1/delta.tick) else delta.tick <- 1/m debug.show("delta.tick"); debug.show("m") @ \paragraph{Datennormierung} Im weiteren Verlauf wollen wir mit normierten Werten weiterarbeiten. Deshalb transformieren wir Werte wie auch die Extremwerte der Skalen. <>= data.tr <- data/factor data.tr <- signif(data.tr, digits = 11) # reduction of significant digits 181128 Min.tr <- Min/factor Max.tr <- Max/factor @ \paragraph{Skalenkonstruktion} Die Skala ist wie folgt zu interpretieren: im positiven Bereich bezeichnet eine Eintragung $x$ im Stem-and-Leaf-Display das Intervall $[x,x+1)$, im negativen $(x-1,x]$. In der folgenden Tabelle lassen sich einige Beispiele ablesen: \begin{center} \begin{tabular}{cccc} Min-Eintrag & Max-Eintrag & Wertebereich & Spannweite\\\\ 2 & 6 & [ 2.000, 6.999] & 4.999\\ -2 & 2 & [-2.999, 2.999] & 5.998\\ -6 & -2 & [-6.999,-2.000] & 4.999 \end{tabular} \end{center} Zur Ermittlung des Skalenbereiches runden wir zunächst die transformierten Extremwerte ab bzw.\ auf: Der erste Skaleneintrag ist wie der letzte eine ganze Zahl. Die Produktion einer Skala ist mit [[seq]] kein Problem. Jedoch müssen wir für die gewünschte Interpretation eventuell noch zwei Modifikationen vornehmen. Denn im positiven bezeichnet ein Stamm-Skalenwert die Untergrenze der Werte, die in der Zeile eingetragen werden sollen. Im negativen wechselt die Skala die Bezeichnung: [[ -2, -1, 0, 1, 2, ...]] wird zu [[ -1, -0, 0, 1, 2, ...]]. Um bei einem gewünschten [[Min==-2]] dieses noch unterzubringen, müssen wir eine entsprechende Zeile ergänzen, die später bei [[m=1]] Werte von [[-2.9999]] bis [[-2.0]] aufnehmen kann. Entsprechend kann es vorkommen, daß als Maximum [[-2]] geplant ist. Dann wird ohne Korrektur, wie am kleinen Beispiel zu sehen ist, aus der Obergrenze [[sk.max]] von [[seq]] der Eintrag [[-1]] werden, der jedoch überflüssig ist. <>= spannweite.red <- Max.tr - Min.tr sk.min <- floor(Min.tr) sk.max <- ceiling(Max.tr) skala <- seq(sk.min,sk.max,by=delta.tick) if(sk.min<0) skala <- c(sk.min-delta.tick,skala) if(sk.max<0) skala <- skala[-length(skala)] debug.show("skala") @ \subsection{Displayerstellung} Jetzt sind die Vorarbeiten abgeschlossen: [[unit]], [[m]] und [[skala]] sind definiert, es liegen transformierte Werte vor und der Erstellungsprozeß kann beginnen. @ Für die Erstellung werden zunächst Ausreißer erkannt und entfernt. Die verbleibenden Daten werden im zentralen Plot eingetragen und zum Schluß für die Legende einige Infos zusammengefaßt. <>= <> <> <> @ \paragraph{Ausreißer} Ein Wert, der außerhalb des Bereiches der Skala liegt, ist ein Ausreißer. Ist der erste Skalenwert positiv, so sind das alle Werte, die kleiner als der Skalenwert sind. Ist [[skala[1]]] negativ, dann wird schon ein Wert genau von der Größe [[skala[1]]] nicht aufgenommen und gilt als [[LO]]. Für positive Maxima sind Werte Ausreißer, die größer gleich [[skala[n.sk]+delta.tick]] sind. Falls das Maximum unter Null ist, wird ein Wert der Größe [[skala[n.sk]+delta.tick]] gerade noch eingetragen. Für die Tiefenberechnung ist es günstig, die Anzahl der Ausreißer zu vermerken. Die Ausreißer selbst werden auf [[lower.line]] bzw.\ [[upper.line]] abgelegt. Zum Schluß werden die Daten ohne Ausreißer auf [[data.tr.red]] abgelegt. <>= lo.limit <- if (trim.outliers) skala[1] else -Inf lo.log <- if(skala[1 ] < 0) data.tr <= lo.limit else data.tr < lo.limit n.sk <- length(skala) hi.limit <- if (trim.outliers) skala[n.sk] + delta.tick else Inf hi.log <- if(skala[n.sk] >= 0) data.tr >= hi.limit else data.tr > hi.limit n.lower.extr.values <- sum(lo.log); n.upper.extr.values <- sum(hi.log) if(0>= <> <> <> <> <> @ \paragraph{Zerlegung der Werte} Stämme werden durch Abschneiden gebildet. Für negative Werte geschieht das durch Aufrunden, für positive durch Abrunden. Die Blätter ergeben sich über Differenzbildung von um eine Stelle nach links geshifteten Daten und Stämmen. Die Differenzen negativer Werte sind dann aufzurunden, die anderen abzurunden. Übrigens führte [[ceiling((data.tr.red-stem)*10)]] zu Fehlern. Weitere Checks haben zu der oben eingebauten Rundungsoperation von [[data.tr]] auf 10 signifikante Ziffern mit [[signif()]] geführt. % 181128 <>= stem.data <- ifelse(data.tr.red < 0, ceiling(data.tr.red), floor(data.tr.red) ) # eps <- 1e-12; leaf <- floor(abs(data.tr.red*10-stem.data*10)+eps) leaf <- floor(10 * abs(signif(data.tr.red - stem.data, 5))) #181004 , 10 leaf <- ifelse( leaf == 10, 0, leaf ) # 181004 probably not relevant debug.show("leaf"); debug.show("stem.data") @ Der Vergleich von Dezimalzahlen wird problematisch. wenn wir an die Grenzen von Dezimalzahlendarstellungen herankommen. Shiften wir 0.95 durch Multiplikation mit 0.1 um eine Stelle nach links, erhalten wir scheinbar 9.5. Jedoch stellt sich 9.5 nicht ganz genau ein, wie nach einer Restbildung mit 1 oder durch Subtraktion von 9.0 deutlich wird: <<*>>= print(rbind(" .95/0.1-9.0 ="=as.character( .95/0.1-9.0), # as.character((.95/0.1)%%1), " .95/0.1-9.5 ="=as.character( .95/0.1-9.5), "floor(.95/0.1-9.5) ="=as.character(floor(.95/0.1-9.5)))) @ \begin{verbatim} [,1] .95/0.1-9.0 = "0.499999999999998" .95/0.1-9.5 = "-1.77635683940025e-15" floor(.95/0.1-9.5) = "-1" \end{verbatim} @ Die Differenz ist relativ klein, kann jedoch wirkungsvoll sein. Deshalb können / sollten wir vor einem Abrundungsprozess ein Sicherheits-Epsilon addieren, um dann auf der sicheren Seite zu sein. <<*>>= eps<-1e-12 print(rbind(" .95/0.1-9.0+eps ="=as.character( .95/0.1-9.0+eps), # as.character((.95/0.1)%%1+eps), " .95/0.1-9.5+eps ="=as.character( .95/0.1-9.5+eps), "floor(.95/0.1-9.5+eps) ="=as.character(floor(.95/0.1-9.5+eps)))) @ \begin{verbatim} [,1] .95/0.1-9.0+eps = "0.500000000000998" .95/0.1-9.5+eps = "9.982236431606e-13" floor(.95/0.1-9.5+eps) = "0" \end{verbatim} @ Die Technik, etwas Schmutz zu addieren, erscheint nicht so richtig überzeugend zur Lö\-sung der Dis\-kreti\-sierungs\-unge\-nauig\-keit. Besser gefällt die Idee, die Differenz von [[data.tr.red]] und [[stem]] nach 10 oder 5 Stellen abzuschneiden und dann erst abzurunden. Falls sich weitere Probleme einstellen, kann ggf.\ auf die erste Lösung mit Addition eines [[eps]] zurückgegriffen werden, denn die entsprechende Zeile ist als Kommentarzeile noch existent. 181004, siehe Bsp.\ Maulida Yanti: Es zeigt sich, dass Dezimalzahlen wie 10 * 4.30 immer noch zu Fehlern führ(t)en. Diese äußerten sich darin, dass [[leaf]]-Werte der Größe 10 berechnet wurden. So entstanden aus einem Datum zwei Ziffern. Zum Test kann verwendet werden: [[x <- (-101:101)/100; stem.leaf(x, m = 1)]] @ \paragraph{Blätterzuordnung} Die Blätter werden gemäß der Größe der Daten auf Klassen aufgeteilt. Die Klassen für nicht-negative Werte werden durch Zählen der Skalenwerte, die kleiner gleich sind, gefunden. Hier ist es für die Vorstellung praktisch, daß die Werte sortiert sind. Negative Werte werden nach der selben Logik zugeordnet, jedoch wird dazu vom Maximum aus operiert. Damit leere Klassen keine Probleme bereiten, wird in jede Klasse zwischenzeitlich ein Dummyelement plaziert. Anhand von [[class.of.data.tr]] werden die Blätter gesplittet und die Dummyelemente wieder entfernt. 6.8 ist nicht gleich 6.8. Deshalb wurden am 29.3.2006 Rundungen mit [[signif]] in den Vergleichsprozess eingebaut -- nach einem Fehlerhinweis von Dietrich Trenkler. %Auf gleichen Fehler stieß Michael Hallquist [[mhallqu1@binghamton.edu]] %am [[July-08-08 6:55 PM]] bei der Verwendung von [[stem.leaf]] %aus dem Paket [[Rcmdr]] von John Fox ([[jfox@mcmaster.ca]]). \begin{raggedright} Betrachten wir bspw. den Wert 68, dann kann Folgendes passieren: Es wird eine Skala erzeugt mit Schrittweite: 0.2 durch [[seq(4,7,by=0.2)]]. Dieses liefert selbst bei [[options(digits=22)]] die Werte: [[ [1] 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8 6.0 6.2 6.4 6.6 6.8 7.0 ]] Aus dem Wert 68 wird durch Transformation [[68/10]] also 6.8. Leider gilt nicht [[seq(4,7,by=0.2)[15]==(68/10)]], sondern: [[(seq(4,7,by=0.2)[15]-(68/10))==8.881784197001252e-16]]. Der Skalenwert ist also etwas größer und die 68 wir in die Klasse vor der richtigen einsortiert. Dadurch führte mit der alten Version der Aufruf von [[stem.leaf(2*(24:34),m=5,depths=FALSE)]] zu einem Fehler. Ein Runden auf 10 Stellen neutralisiert die Ungenauigkeit. \end{raggedright} <>= class.of.data.tr<-unlist(c( sapply(signif(data.tr.red[data.tr.red< 0],10), function(x,sk)length(sk)-sum(-sk<=-x),signif(skala,10)) ,sapply(signif(data.tr.red[data.tr.red>=0],10), function(x,sk)sum( sk<= x),signif(skala,10)) )) debug.show("class.of.data.tr") class.of.data.tr <- c(1:length(skala),class.of.data.tr) leaf.grouped <- split(c(rep(-1,length(skala)),leaf),class.of.data.tr) leaf.grouped <- lapply(leaf.grouped, function(x){ sort(x[-1]) }) # debug.show("leaf.grouped") @ [[paste]] regelt die Astbildung problemlos. Jedoch ist zu berücksichtigen, wenn die negativen Blätter in absteigender Reihenfolge eingetragen werden sollen. <>= <> <> leaf.grouped.ch <- paste("|",unlist(lapply(leaf.grouped,paste,collapse=""))) # debug.show("leaf.grouped") @ \paragraph{Display-Skala} Die Konstruktion der Bezeichnung für die Skalen verläuft in zwei Schritten. <>= <> <> @ Für die Bezeichnung der Zeilen werden negative und [[-0]]-Klassen gemerkt. <>= class.negative <- skala < 0 class.neg.zero <- floor(skala) == -1 @ <>= if (reverse.negative.leaves){ for (i in seq(class.negative)) if (class.negative[i]) leaf.grouped[[i]] <- rev(leaf.grouped[[i]]) } @ Die Zeilennamen ergeben sich aus der Skala, indem negative Werte um 1 verschoben werden, die Klassen [[class.neg.zero]] bekommt den korrekten Namen [[-0]]. <>= line.names <- skala line.names[class.negative] <- line.names[class.negative]+1 line.names <- as.character(floor(line.names)) line.names[class.neg.zero] <- "-0" @ \paragraph{Tukey-Stil} Bei [[style="Tukey"]] werden spezielle Symbole zur Stammverschönerung angebracht. Wieder führen negative Werte zu Fallunterscheidungen. <>= if(style=="Tukey"){ switch(as.character(m), "1"={}, "2"={ h<-round(2*(skala%%1)) #; line.names[h!=0] <- "" line.names<-paste(line.names, ifelse(skala<0,c(".","*")[1+h],c("*",".")[1+h]),sep="") }, "5"={ h<-round(5*(skala%%1)); line.names[h>0 & h<4] <- "" line.names<-paste(line.names, ifelse(skala<0, c(".","s","f","t","*")[1+h], c("*","t","f","s",".")[1+h]), sep="") } ) } <> line.names <- ragged.left(line.names) @ Damit hinterher die [[|]]-Trennstriche untereinander stehen, ist eine Auf\-füllung mit Leerzeichen erforderlich. Dieses leistet die Funktion [[ragged.left]]. <>= ragged.left <- function(ch.lines){ max.n <- max(n.lines<-nchar(ch.lines)) h <- paste(rep(" ",max.n),collapse="") ch.lines <- paste( substring(h,1,1+max.n-n.lines), ch.lines) ch.lines } @ \paragraph{Tiefenermittlung} Die Tiefenermittlung geschieht über zwei Zählprozesse. Dabei müssen ggf.\ die Anzahlen der Ausreißer ([[n.lower.extr.values]] und [[n.upper.extr.values]]) beachtet werden. Die Stelle des Medians liegt dort, wo die Tiefenvektoren, entstanden durch Kumulation von [[n.class]], sich -- graphisch gesprochen -- schneiden. Dort kommen zwei Zeilen infrage. Die mit der kleineren Differenz zwischen den Zählvektoren ist die gesuchte. Der jeweils kleinste Wert der Tiefenvektoren ist festzuhalten und das entstandene Objekt mit passend vielen Leerzeichen zu füllen. Weiter sind Tiefeneinträge in Zeilen ohne Blätter zu löschen. Nebenbei werden die Positionen leerer Zeilen vermerkt [[select==FALSE]]. <>= n.class <- unlist(lapply(leaf.grouped,length)) debug.show("n.class") select <- (cumsum(n.class) > 0) & rev((cumsum(rev(n.class)) > 0)) depth <- cumsum(n.class) + n.lower.extr.values depth.rev <- rev(cumsum(rev(n.class)) + n.upper.extr.values) debug.show("depth") uplow <- depth>=depth.rev # DT-median-error #150429 # pos.median <- which(uplow)[1] + (-1:0) # h <- abs(depth[pos.median]-depth.rev[pos.median]) # pos.median <- pos.median[1]+(h[1]>h[2]) # debug.show("pos.median") depth[uplow] <- depth.rev[uplow] pos.median <- which(depth == max(depth)) # 150429 debug.show("pos.median") # 150429 depth <- paste(depth,"") depth[pos.median] <- paste("(",n.class[pos.median],")",sep="") depth[n.class==0] <- " " depth <- if (depths) ragged.left(depth) else "" @ Zur Information werden die wesentlichen Infos in der Variablen [[info]] zusammengefaßt. <>= info <- c( paste("1 | 2: represents",1.2*factor), # paste(" m:",m ), paste(" leaf unit:",factor/10), paste(" n:",n )) @ \subsection{Ausgabe} Zum Schluß werden die Ergebnisse in einem Objekt zusammengebunden bzw.\ ausgegeben. 080711: Zeile mit NA-Zähler eingebaut. <>= stem <- paste(depth, line.names, leaf.grouped.ch) stem <- if((m!=5)||sum(select)>4) stem[select] else stem result <- list(display=stem) if(exists("lower.line")) result<-c(lower=lower.line,result) if(exists("upper.line")) result<-c(result,upper=upper.line) if(0>= # Chambers, Cleveland, Kleiner, Tukey (1983), p27 oz<-c( 60+c(0,1,1,4,4,4,4,6,6,8,8,8,9), 70+c(1,1,1,1,1,1,1,2,2,3,5,5), 80+c(0,0,0,0,0,0,2,2,3,5,6,6,7,7,7,9) ) data(co2) "bd384" <- c(2.968, 2.097, 1.611, 3.038, 7.921, 5.476, 9.858, 1.397, 0.155, 1.301, 9.054, 1.958, 4.058, 3.918, 2.019, 3.689, 3.081, 4.229, 4.669, 2.274, 1.971, 10.379, 3.391, 2.093, 6.053, 4.196, 2.788, 4.511, 7.3, 5.856, 0.86, 2.093, 0.703, 1.182, 4.114, 2.075, 2.834, 3.698, 6.48, 2.36, 5.249, 5.1, 4.131, 0.02, 1.071, 4.455, 3.676, 2.666, 5.457, 1.046, 1.908, 3.064, 5.392, 8.393, 0.916, 9.665, 5.564, 3.599, 2.723, 2.87, 1.582, 5.453, 4.091, 3.716, 6.156, 2.039) repeat{ cat("Wahl des Tests:\n") h<-menu(c( "Ozon - m=1", "Ozon - m=2", "Ozon - m=5", "co2 - m=1", "co2 - m=2", "co2 - m=5", "bd384 - m=1", "bd384 - m=2", "bd384 - m=5")) switch(h, stem.leaf(oz,m=1), stem.leaf(oz,m=2), stem.leaf(oz,m=5), stem.leaf(co2,m=1), stem.leaf(co2,m=2), stem.leaf(co2,m=5), stem.leaf(bd384,m=1), stem.leaf(bd384,m=2), stem.leaf(bd384,m=5) ) if(h==0) break } @ \section{RD-File} John Fox wrote the first version of the following RD-File (some small changes are done by Peter Wolf). \renewcommand{\codechunkcommands}{\footnotesize} <>= \name{stem.leaf} \alias{stem.leaf} \alias{stem.leaf.backback} \title{stem and leaf display and back to back stem and leaf display} \description{ Creates a classical ("Tukey-style") stem and leaf display / back-to-back stem and leaf display. } \usage{ stem.leaf(data, unit, m, Min, Max, rule.line = c("Dixon", "Velleman", "Sturges"), style = c("Tukey", "bare"), trim.outliers = TRUE, depths = TRUE, reverse.negative.leaves = TRUE, na.rm = FALSE, printresult = TRUE) stem.leaf.backback(x,y, unit, m, Min, Max, rule.line = c("Dixon", "Velleman", "Sturges"), style = c("Tukey", "bare"), trim.outliers = TRUE, depths = TRUE, reverse.negative.leaves = TRUE, na.rm = FALSE, printresult=TRUE, show.no.depths = FALSE, add.more.blanks = 0, back.to.back = TRUE) } \arguments{ \item{data}{a numeric vector of data} \item{x}{first dataset for \code{stem.leaf.backback}} \item{y}{first dataset for \code{stem.leaf.backback}} \item{unit}{leaf unit, as a power of 10 (e.g., \code{100}, \code{.01}); if \code{unit} is missing \code{unit} is choosen by \code{stem.leaf}.} \item{m}{number of parts (1, 2, or 5) into which each stem will be separated; if \code{m} is missing the number of parts/stem (\code{m}) is choosen by \code{stem.leaf}.} \item{Min}{smallest non-outlying value; omit for automatic choice.} \item{Max}{largest non-outlying value; omit for automatic choice.} \item{rule.line}{the rule to use for choosing the desired number of lines in the display; \code{"Dixon"} = 10*log10(n); \code{"Velleman"} = 2*sqrt(n); \code{"Sturges"} = 1 + log2(n); the default is \code{"Dixon"}.} \item{style}{\code{"Tukey"} (the default) for "Tukey-style" divided stems; \code{"bare"} for divided stems that simply repeat the stem digits.} \item{trim.outliers}{if \code{TRUE} (the default), outliers are placed on \code{LO} and \code{HI} stems.} \item{depths}{if \code{TRUE} (the default), print a column of "depths" to the left of the stems; the depth of the stem containing the median is the stem-count enclosed in parentheses.} \item{reverse.negative.leaves}{if \code{TRUE} (the default), reverse direction the leaves on negative stems (so, e.g., the leaf 9 comes before the leaf 8, etc.).} \item{na.rm}{ if TRUE "NA" values are removed otherwise the number of NAs are counted.} \item{printresult}{ if TRUE output of the stem and leaf display by \code{cat}.} \item{show.no.depths}{ if TRUE no depths are printed.} \item{add.more.blanks}{ number of blanks that are added besides the leaves.} \item{back.to.back}{ if FALSE two parallel stem and leaf displays are constructed.} } \details{ Unlike the \code{stem} function in the \code{base} package, \code{stem.leaf} produces classic stem-and-leaf displays, as described in Tukey's \emph{Exploratory Data Analysis}. The function \code{stem.leaf.backback} creates back-to-back stem and leaf displays. } \value{ The computed stem and leaf display is printed out. Invisibly \code{stem.leaf} returns the stem and leaf display as a list containing the elements \code{info} (legend), \code{display} (stem and leaf display as character vecter), \code{lower} (very small values), \code{upper} (very large values), \code{depths} (vector of depths), \code{stem} (stem information as a vector), and \code{leaves} (vector of leaves). } \references{ Tukey, J. \emph{Exploratory Data Analysis.} Addison-Wesley, 1977. } \author{Peter Wolf, the code has been slightly modified by John Fox \email{jfox@mcmaster.ca} with the original author's permission, help page written by John Fox, the help page has been slightly modified by Peter Wolf.} \seealso{\code{\link[graphics]{stem}}} \examples{ stem.leaf(co2) stem.leaf.backback(co2[1:120],co2[121:240]) stem.leaf.backback(co2[1:120],co2[121:240], back.to.back = FALSE) stem.leaf.backback(co2[1:120],co2[121:240], back.to.back = FALSE, add.more.blanks = 3, show.no.depths = TRUE) stem.leaf.backback(rivers[-(1:30)],rivers[1:30], back.to.back = FALSE, unit=10, m=5, Min=200, Max=900, add.more.blanks = 20, show.no.depths = TRUE) } \keyword{misc} @ \renewcommand{\codechunkcommands}{\small} \section{Test} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Testen ist eine schwierige Sache. Systematische Aufrufe werden sich hier besser als Zufallsaufrufe zu eignen. Zunächst empfiehlt es sich schon während des Entwicklungsprozesses, an bestimmten Punkten Öffnungen einzubauen, die bei Bedarf Auskunft über die Innereien während der Bearbeitung, also des Prozesses, geben. Dieses ist im Code umgesetzt durch [[debug.show("xyz")]]-Konstruktionen. Jetzt gilt es die Funktion [[debug.show]] geeignet zu definieren. % 090216: debug.cond explizit eingeführt. <>= if(0>= tangleR("ms.rev",expand.roots = "", expand.root.start = TRUE) @ \subsection{Diverse Tests} \subsubsection{Fehlersituation von DT} Dietrich Trenkler hat einen Fehler gefunden, der auf Rundungsprobleme zurückgeführt werden konnte. In \emph{verteile Blätter auf passende Klassen} wurde 2.8 mit 2.8 verglichen mit dem Ergebnis, dass 2.8 größer als 2.8 ist. Deshalb wurde am 29.3.2006 Rundungen mit [[signif]] in den Vergleichsprozess eingebaut. 10 Stellen sollten reichen. <<*>>= debug.cond<<-"" "a" <- structure(c(12, 29, 49, 280, 78, 41, 49, 308, 70, 57, 41, 37, 275, 33, 267, 37, 33, 57, 37, 41, 25, 41, 53, 74, 57, 53, 37, 49, 66, 70, 134, 33, 57, 45, 62, 250, 37, 271, 37, 41, 12, 70, 25), .Names = c("Acerola", "Ananas", "Apfel", "Apfel, getrocknet", "Apfelmus", "Apfelsine, Orange", "Aprikose", "Aprikose, getrocknet", "Banane", "Birne", "Brombeeren", "Clementine", "Datteln, getrocknet", "Erdbeeren", "Feigen, getrockne", "Granatapfel", "Grapefruit", "Heidelbeeren", "Himbeeren", "Holunderbeeren", "Honigmelone", "Johannisbeeren, rot", "Johannisbeeren, schwarz", "Kaki", "Kirsche, sueß", "Kiwi", "Mandarine", "Mango", "Mirabellen", "Nektarine", "Oliven, mariniert", "Papaya","Passionsfrucht", "Pfirsich", "Pflaumen", "Pflaumen,getrocknet", "Preiselbeeren","Rosinen", "Satsuma", "Stachelbeeren", "Wassermelone", "Weintrauben","Zitrone")) names(a)<-NULL; aa<-c(rev(sort(a))[1:5],sort(a)[1:5]) <> test('stem.leaf(a,Min=0,Max=300)') @ \renewcommand{\Routputcommands}{\tiny} \begin{verbatim} stem.leaf(a,Min=0,Max=300) 1 | 2: represents 120 leaf unit: 10 n: 43 2 0* | 11 14 t | 222333333333 (15) f | 444444444555555 14 s | 6677777 0. | 1* | 7 t | 3 f | s | 1. | 2* | t | 6 f | 5 5 s | 677 2 2. | 8 1 3* | 0 \end{verbatim} @ \subsubsection{Erfolgreiche Tests} Als Datensätze wollen wir [[oz]] wie auch [[co2]] verwenden. Für den Test bietet sich eine kleine Unterstützungsfunktion an: <>= oz<-c( 60+c(0,1,1,4,4,4,4,6,6,8,8,8,9), 70+c(rep(1,7),2,2,3,5,5), 80+c(rep(0,6),2,2,3,5,6,6,7,7,7,9) ) if(exists("data")) data(co2) test<-function(what) { cat(what,"\n"); eval(parse(text=what)); return() } @ Mit [[test]] lassen sich bequem einige Tests erledigen. Von hinten beginnend testen wir, ob [[style]] für [[m=2]] und [[m=5]] wirksam wird, sofern es auf [["Tukey"]] gesetzt ist. Damit ist auch gleich ein erster Test für [[m]] beschrieben. %\def\endmoddef{\RA\ifmmode\equiv\else\unhcopy\equivbox\fi % \nobreak\hfill\nobreak\small } <>= cat("style-Test-start\n") test('stem.leaf(oz,m=1,style="Tukey")') test('stem.leaf(oz,m=2,style="Tukey")') test('stem.leaf(oz,m=5,style="Tukey")') test('stem.leaf(oz,m=1,style="bare")') test('stem.leaf(oz,m=2,style="bare")') test('stem.leaf(oz,m=5,style="bare")') cat("style-Test-end\n") @ \begin{verbatim} style-Test-start stem.leaf(oz,m=1,style="Tukey") 1 | 2: represents 12 leaf unit: 1 n: 41 13 6 | 0114444668889 (12) 7 | 111111122355 16 8 | 0000002235667779 stem.leaf(oz,m=2,style="Tukey") 1 | 2: represents 12 leaf unit: 1 n: 41 7 6* | 0114444 13 6. | 668889 (10) 7* | 1111111223 18 7. | 55 16 8* | 000000223 7 8. | 5667779 stem.leaf(oz,m=5,style="Tukey") 1 | 2: represents 12 leaf unit: 1 n: 41 3 6* | 011 t | 7 f | 4444 9 s | 66 13 6. | 8889 20 7* | 1111111 (3) t | 223 18 f | 55 s | 7. | 16 8* | 000000 10 t | 223 7 f | 5 6 s | 66777 1 8. | 9 stem.leaf(oz,m=1,style="bare") 1 | 2: represents 12 leaf unit: 1 n: 41 13 6 | 0114444668889 (12) 7 | 111111122355 16 8 | 0000002235667779 stem.leaf(oz,m=2,style="bare") 1 | 2: represents 12 leaf unit: 1 n: 41 7 6 | 0114444 13 6 | 668889 (10) 7 | 1111111223 18 7 | 55 16 8 | 000000223 7 8 | 5667779 stem.leaf(oz,m=5,style="bare") 1 | 2: represents 12 leaf unit: 1 n: 41 3 6 | 011 6 | 7 6 | 4444 9 6 | 66 13 6 | 8889 20 7 | 1111111 (3) 7 | 223 18 7 | 55 7 | 7 | 16 8 | 000000 10 8 | 223 7 8 | 5 6 8 | 66777 1 8 | 9 style-Test-end \end{verbatim} @ Test der verschiedenen Regeln. Wir probieren sowohl Datensatz [[oz]] wie auch [[co2]] <>= cat("rule-Test-start\n") test('stem.leaf(oz,rule.line="Dixon")') test('stem.leaf(oz,rule.line="Velleman")') test('stem.leaf(oz,rule.line="Sturges")') test('stem.leaf(co2,rule.line="Dixon")') test('stem.leaf(co2,rule.line="Velleman")') test('stem.leaf(co2,rule.line="Sturges")') cat("rule-Test-end\n") @ \begin{verbatim} rule-Test-start stem.leaf(oz,rule.line="Dixon") 1 | 2: represents 12 leaf unit: 1 n: 41 3 6* | 011 t | 7 f | 4444 9 s | 66 13 6. | 8889 20 7* | 1111111 (3) t | 223 18 f | 55 s | 7. | 16 8* | 000000 10 t | 223 7 f | 5 6 s | 66777 1 8. | 9 stem.leaf(oz,rule.line="Velleman") 1 | 2: represents 12 leaf unit: 1 n: 41 7 6* | 0114444 13 6. | 668889 (10) 7* | 1111111223 18 7. | 55 16 8* | 000000223 7 8. | 5667779 stem.leaf(oz,rule.line="Sturges") 1 | 2: represents 12 leaf unit: 1 n: 41 7 6* | 0114444 13 6. | 668889 (10) 7* | 1111111223 18 7. | 55 16 8* | 000000223 7 8. | 5667779 stem.leaf(co2,rule.line="Dixon") 1 | 2: represents 12 leaf unit: 1 n: 468 8 31* | 33344444 70 31. | 55555556666666666666667777777777788888888888888899999999999999 135 32* | 00000000000000001111111111112222222222222222333333333333444444444 187 32. | 5555555566666666677777777777777778888888889999999999 233 33* | 0000000011111111112222222222233333333344444444 (40) 33. | 5555556666666666777777777888889999999999 195 34* | 000000011111112222222222233333334444444 156 34. | 5555555566666666777777788888889999999 119 35* | 00000111111122222222223333333333444444444 78 35. | 555555555666666667777777788888899999999999999 33 36* | 0000001111112222333333444444 5 36. | 55566 stem.leaf(co2,rule.line="Velleman") 1 | 2: represents 12 leaf unit: 1 n: 468 3 t | 333 15 f | 444445555555 41 s | 66666666666666677777777777 70 31. | 88888888888888899999999999999 98 32* | 0000000000000000111111111111 126 t | 2222222222222222333333333333 143 f | 44444444455555555 168 s | 6666666667777777777777777 187 32. | 8888888889999999999 205 33* | 000000001111111111 225 t | 22222222222333333333 (14) f | 44444444555555 229 s | 6666666666777777777 210 33. | 888889999999999 195 34* | 00000001111111 181 t | 222222222223333333 163 f | 444444455555555 148 s | 666666667777777 133 34. | 88888889999999 119 35* | 000001111111 107 t | 22222222223333333333 87 f | 444444444555555555 69 s | 6666666677777777 53 35. | 88888899999999999999 33 36* | 000000111111 21 t | 2222333333 11 f | 444444555 2 s | 66 stem.leaf(co2,rule.line="Sturges") 1 | 2: represents 12 leaf unit: 1 n: 468 70 31 | 3334444455555556666666666666667777777777788888888888888899999999999999 187 32 | 000000000000000011111111111122222222222222223333333333334444444445555555566666666677777777777777778888888889999999999 (86) 33 | 00000000111111111122222222222333333333444444445555556666666666777777777888889999999999 195 34 | 0000000111111122222222222333333344444445555555566666666777777788888889999999 119 35 | 00000111111122222222223333333333444444444555555555666666667777777788888899999999999999 33 36 | 000000111111222233333344444455566 rule-Test-end \end{verbatim} @ Test von [[unit]] <>= cat("unit-Test-start\n") test('stem.leaf(oz,unit=10)') # test('stem.leaf(c(oz,-oz),unit=10)'); oz test('stem.leaf(oz,unit=1)') test('stem.leaf(oz,unit=.1)') cat("unit-Test-end\n") @ \begin{verbatim} unit-Test-start stem.leaf(oz,unit=10) 1 | 2: represents 120 leaf unit: 10 n: 41 0* | t | f | (25) s | 6666666666666777777777777 16 0. | 8888888888888888 1* | stem.leaf(oz,unit=1) 1 | 2: represents 12 leaf unit: 1 n: 41 3 6* | 011 t | 7 f | 4444 9 s | 66 13 6. | 8889 20 7* | 1111111 (3) t | 223 18 f | 55 s | 7. | 16 8* | 000000 10 t | 223 7 f | 5 6 s | 66777 1 8. | 9 stem.leaf(oz,unit=.1) 1 | 2: represents 1.2 leaf unit: 0.1 n: 41 1 60 | 0 3 61 | 00 62 | 63 | 7 64 | 0000 65 | 9 66 | 00 67 | 12 68 | 000 13 69 | 0 70 | 20 71 | 0000000 (2) 72 | 00 19 73 | 0 74 | 18 75 | 00 76 | 77 | 78 | 79 | 16 80 | 000000 81 | 10 82 | 00 8 83 | 0 84 | 7 85 | 0 6 86 | 00 4 87 | 000 88 | 1 89 | 0 unit-Test-end \end{verbatim} @ Test der Extremwertsetzungen. <>= cat("Max-Min-Test-start\n") test('stem.leaf(oz,Min=65,Max=83,unit=.1,m=1)') test('stem.leaf(oz,Min=65,Max=83,unit=1,m=1)') test('stem.leaf(-oz,Min=-83,Max=-65,unit=.1,m=1)') test('stem.leaf(-oz,Min=-83,Max=-65,unit=1,m=1)') test('stem.leaf(1:12,Min=5,Max=8,unit=.1,m=1)') test('stem.leaf(.5+(-7:6),Min=-3,Max=3,unit=.1,m=1)') cat("Max-Min-Test-end\n") @ \begin{verbatim} Max-Min-Test-start stem.leaf(oz,Min=65,Max=83,unit=.1,m=1) 1 | 2: represents 1.2 leaf unit: 0.1 n: 41 LO: 60 61 61 64 64 64 64 9 66 | 00 67 | 12 68 | 000 13 69 | 0 70 | 20 71 | 0000000 (2) 72 | 00 19 73 | 0 74 | 18 75 | 00 76 | 77 | 78 | 79 | 16 80 | 000000 81 | 10 82 | 00 8 83 | 0 HI: 85 86 86 87 87 87 89 stem.leaf(oz,Min=65,Max=83,unit=1,m=1) 1 | 2: represents 12 leaf unit: 1 n: 41 13 6 | 0114444668889 (12) 7 | 111111122355 16 8 | 0000002235667779 stem.leaf(-oz,Min=-83,Max=-65,unit=.1,m=1) 1 | 2: represents 1.2 leaf unit: 0.1 n: 41 LO: -89 -87 -87 -87 -86 -86 -85 8 -83 | 0 10 -82 | 00 -81 | 16 -80 | 000000 -79 | -78 | -77 | -76 | 18 -75 | 00 -74 | 19 -73 | 0 (2) -72 | 00 20 -71 | 0000000 -70 | 13 -69 | 0 12 -68 | 000 -67 | 9 -66 | 00 HI: -64 -64 -64 -64 -61 -61 -60 stem.leaf(-oz,Min=-83,Max=-65,unit=1,m=1) 1 | 2: represents 12 leaf unit: 1 n: 41 16 -8 | 9777665322000000 (12) -7 | 553221111111 13 -6 | 9888664444110 stem.leaf(1:12,Min=5,Max=8,unit=.1,m=1) 1 | 2: represents 1.2 leaf unit: 0.1 n: 12 LO: 1 2 3 4 5 5 | 0 (1) 6 | 0 6 7 | 0 5 8 | 0 HI: 9 10 11 12 stem.leaf(.5+(-7:6),Min=-3,Max=3,unit=.1,m=1) 1 | 2: represents 1.2 leaf unit: 0.1 n: 14 LO: -6.5 -5.5 -4.5 4 -3 | 5 5 -2 | 5 6 -1 | 5 (1) -0 | 5 7 0 | 5 6 1 | 5 5 2 | 5 4 3 | 5 HI: 4.5 5.5 6.5 Max-Min-Test-end \end{verbatim} @ Klassenzuordnungstest: <>= # debug.cond<-"skala" cat("Klassen-Test-start\n") test('stem.leaf(c(.7+(1:12),4.999,5.0,5.001,7,7.001,7.999, 8,8.001,8.999,9,9.001,9.999),Min=5,Max=8,unit=.1,m=1)') test('stem.leaf(-c(.7+(1:12),4.999,5.0,5.001,7,7.001,7.999, 8,8.001,8.999,9,9.001,9.999),Min=-8,Max=-5,unit=.1,m=1)') test('stem.leaf(c(.7+(-5:5),-4.001,-4,-3.999, -3, 0, 3, 3.999, 4, 4.001),Min=-3,Max=3,unit=.1,m=1)') cat("Klassen-Test-end\n") @ \begin{verbatim} Klassen-Test-start stem.leaf(c(.7+(1:12),4.999,5.0,5.001,7,7.001,7.999, 8,8.001,8.999,9,9.001,9.999),Min=5,Max=8,unit=.1,m=1) 1 | 2: represents 1.2 leaf unit: 0.1 n: 24 LO: 1.7 2.7 3.7 4.7 4.999 8 5 | 007 9 6 | 7 (4) 7 | 0079 11 8 | 0079 HI: 9 9.001 9.7 9.999 10.7 11.7 12.7 stem.leaf(-c(.7+(1:12),4.999,5.0,5.001,7,7.001,7.999, 8,8.001,8.999,9,9.001,9.999),Min=-8,Max=-5,unit=.1,m=1) 1 | 2: represents 1.2 leaf unit: 0.1 n: 24 LO: -12.7 -11.7 -10.7 -9.999 -9.7 -9.001 -9 11 -8 | 9700 (4) -7 | 9700 9 -6 | 7 8 -5 | 700 HI: -4.999 -4.7 -3.7 -2.7 -1.7 stem.leaf(c(.7+(-5:5),-4.001,-4,-3.999, -3, 0, 3, 3.999, 4, 4.001),Min=-3,Max=3,unit=.1,m=1) 1 | 2: represents 1.2 leaf unit: 0.1 n: 20 LO: -4.3 -4.001 -4 6 -3 | 930 7 -2 | 3 8 -1 | 3 9 -0 | 3 (2) 0 | 07 9 1 | 7 8 2 | 7 7 3 | 079 HI: 4 4.001 4.7 5.7 Klassen-Test-end \end{verbatim} @ Jim Albert mailte am 12.4.09 folgende Fehlersituation: <>= #debug.cond<<-"all" <> y<-c(0.99,0.96,0.98,0.94,0.98,0.98,0.97,0.97,0.98,0.96,0.94,0.96, 0.96,0.96,0.96, 0.97,0.96,0.92,0.98,0.95,0.97,0.92,0.92,0.96,0.95,0.96,0.93,0.96, 0.94,0.96, 0.94,0.90,0.92,0.92,0.94,0.92,0.94,0.94,0.91,0.94,0.87,0.91,0.93, 0.84,0.90, 0.93,0.85,0.87,0.91,0.88,0.89,0.89) print(table(y)) test('stem.leaf(y,unit=.01,m=5)') @ \begin{verbatim} y 0.84 0.85 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1 1 2 1 2 2 3 6 3 8 2 11 4 5 1 stem.leaf(y,unit=.01,m=5) 1 | 2: represents 0.12 leaf unit: 0.01 n: 52 2 f | 45 4 s | 77 7 8. | 899 12 9* | 00111 21 t | 222222333 (10) f | 4444444455 21 s | 666666666667777 6 9. | 888889 \end{verbatim} @ alter fehlerhafter Output: \begin{verbatim} y 0.84 0.85 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1 1 2 1 2 2 3 6 3 8 2 11 4 5 1 1 | 2: represents 0.12 leaf unit: 0.01 n: 52 2 f | 35 4 s | 77 7 8. | 799 12 9* | 00111 21 t | 222222333 (10) f | 3333333344 21 s | 666666666667777 6 9. | 777778 \end{verbatim} @ In der Tat muss in der letzten Zeile des Displays [[9. | 888889]] stehen. Der Fehler geht auf die ungenaue Darstellung von Dezimalzahlen zurück, welche durch Addition eines kleines Epsilons [[eps]] vor Rundungprozessen behoben werden kann, siehe Chunk: \emph{zerlege Zahlen in Stamm und Blatt}. Nach Integration dieser Verbesserung erhalten wir das richtige Ergebnis, s.o. @ Negative-Reverse-Test: <>= # debug.cond<-"skala" cat("Reverse-Test-start\n") test('stem.leaf(-c(.7+(1:12),4.999,5.0,5.001,7,7.001,7.999, 8,8.001,8.999,9,9.001,9.999),Min=-8,Max=-5,unit=.1,m=1, reverse.negative.leaves=TRUE)') test('stem.leaf(-c(.7+(1:12),4.999,5.0,5.001,7,7.001,7.999, 8,8.001,8.999,9,9.001,9.999),Min=-8,Max=-5,unit=.1,m=1, reverse.negative.leaves=!TRUE)') test('stem.leaf(c(.7+(-5:5),-4.001,-4,-3.999, -3, 0, 3, 3.999, 4, 4.001),Min=-3,Max=3,unit=.1,m=1, reverse.negative.leaves=TRUE)') test('stem.leaf(c(.7+(-5:5),-4.001,-4,-3.999, -3, 0, 3, 3.999, 4, 4.001),Min=-3,Max=3,unit=.1,m=1, reverse.negative.leaves=!TRUE)') cat("Reverse-Test-end\n") @ \begin{verbatim} Reverse-Test-start stem.leaf(-c(.7+(1:12),4.999,5.0,5.001,7,7.001,7.999, 8,8.001,8.999,9,9.001,9.999),Min=-8,Max=-5,unit=.1,m=1, reverse.negative.leaves=TRUE) 1 | 2: represents 1.2 leaf unit: 0.1 n: 24 LO: -12.7 -11.7 -10.7 -9.999 -9.7 -9.001 -9 11 -8 | 9700 (4) -7 | 9700 9 -6 | 7 8 -5 | 700 HI: -4.999 -4.7 -3.7 -2.7 -1.7 stem.leaf(-c(.7+(1:12),4.999,5.0,5.001,7,7.001,7.999, 8,8.001,8.999,9,9.001,9.999),Min=-8,Max=-5,unit=.1,m=1, reverse.negative.leaves=!TRUE) 1 | 2: represents 1.2 leaf unit: 0.1 n: 24 LO: -12.7 -11.7 -10.7 -9.999 -9.7 -9.001 -9 11 -8 | 0079 (4) -7 | 0079 9 -6 | 7 8 -5 | 007 HI: -4.999 -4.7 -3.7 -2.7 -1.7 stem.leaf(c(.7+(-5:5),-4.001,-4,-3.999, -3, 0, 3, 3.999, 4, 4.001),Min=-3,Max=3,unit=.1,m=1, reverse.negative.leaves=TRUE) 1 | 2: represents 1.2 leaf unit: 0.1 n: 20 LO: -4.3 -4.001 -4 6 -3 | 930 7 -2 | 3 8 -1 | 3 9 -0 | 3 (2) 0 | 07 9 1 | 7 8 2 | 7 7 3 | 079 HI: 4 4.001 4.7 5.7 stem.leaf(c(.7+(-5:5),-4.001,-4,-3.999, -3, 0, 3, 3.999, 4, 4.001),Min=-3,Max=3,unit=.1,m=1, reverse.negative.leaves=!TRUE) 1 | 2: represents 1.2 leaf unit: 0.1 n: 20 LO: -4.3 -4.001 -4 6 -3 | 039 7 -2 | 3 8 -1 | 3 9 -0 | 3 (2) 0 | 07 9 1 | 7 8 2 | 7 7 3 | 079 HI: 4 4.001 4.7 5.7 Reverse-Test-end \end{verbatim} @ \newpage Mail 29. September 2018 from Maulida Yanti, die einen Fehler aufdeckte, der auf Rundungsfehler zurück ging. Diese Fehler sind am [[181128]] bzw.\ [[181004]] behoben worden. <>= debug.cond<<-FALSE <> x <- c(4.12, 4.12, 4.26, 4.26, 4.29, 4.3, 4.31, 4.39, 4.39, 4.4, 4.41, 4.45, 4.52, 4.56, 4.57, 4.6, 4.63, 4.64, 4.73, 4.82, 5.08, 5.29, 5.51, 5.62, 5.67, 5.78) stem(x, scale = 2) stem.leaf(x, m = 1); NULL stem.leaf.backback(x, x) stem.leaf @ [[stem.leaf()]] shows 27 keaves and one HI entry, but there are only 26 data points. @ Fehlerhafter Output: \begin{verbatim} The decimal point is 1 digit(s) to the left of the | 41 | 22 42 | 669 43 | 0199 44 | 015 45 | 267 46 | 034 47 | 3 48 | 2 49 | 50 | 8 51 | 52 | 9 53 | 54 | 55 | 1 56 | 27 57 | 8 Read 3 items 1 | 2: represents 0.12 leaf unit: 0.01 n: 26 Read 16 items 2 41 | 22 5 42 | 669 9 43 | 19910 12 44 | 015 (3) 45 | 267 11 46 | 3410 8 47 | 3 7 48 | 2 49 | 6 50 | 8 51 | 5 52 | 9 53 | 54 | 4 55 | 1 3 56 | 27 Read 1 item HI: 5.78 \end{verbatim} @ Rundungs-Probleme bei seltsamen Konstellationen stellte <>= debug.cond<<-FALSE <> options(digits = 22); d <- 10 x <- (2990:3010) / d; stem.leaf(x); cbind(sort(x)) stem(x, scale = 2) stem.leaf(x, m = 1); NULL stem.leaf.backback(x, x); NULL @ \begin{verbatim} 1 | 2: represents 1.2 leaf unit: 0.1 n: 21 2 299* | 01 4 t | 23 6 f | 45 8 s | 67 10 299. | 89 (2) 300* | 01 9 t | 23 7 f | 45 5 s | 67 3 300. | 89 1 301* | 0 1 | 2: represents 1.2 leaf unit: 0.1 n: 21 10 299 | 0123456789 (10) 300 | 0123456789 1 301 | 0 __________________________ 1 | 2: represents 1.2, leaf unit: 0.1 x x __________________________ 2 10| 299* |01 2 4 32| t |23 4 6 54| f |45 6 8 76| s |67 8 10 98| 299. |89 10 (2) 10| 300* |01 (2) 9 32| t |23 9 7 54| f |45 7 5 76| s |67 5 3 98| 300. |89 3 1 0| 301* |0 1 __________________________ n: 21 21 __________________________ \end{verbatim} @ Hier noch einmal die Testaufrufe zusammengefaßt: <>= <> <> <> <> <> <> <> <> <> <> <> @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @ \section{Back-to-back-stem-and-leaf-Plots} Naheliegend ist die Konstruktion zweier Stem-and-leaf-displays, bei denen die Blätter zweier Stichproben zu den beiden Seiten eines gemeinsamen Stammes eingetragen werden. Es entstehen dann Plots, die wie Bevölkerungspyramiden aussehen. Mit Hilfe der Funktion [[stem.leaf]] müsste sich schnell eine Umsetzung finden lassen. Um leicht auf einzelne Einheiten zugreifen zu können, ist zunächst die Ausgabe der [[stem.leaf()]]-Funktion gegenüber älteren Versionen erweitert worden. Wir gehen, wie folgt, vor: \begin{enumerate} \item Kombiniere beide Stichproben und ermittele mit den gemeinsamen Daten einen geeigneten Stamm, der zu beiden Stichproben passt. \item Berechne für beide Stichproben getrennt die stem and leaf displays. \item Extrahiere aus beiden Displays die notwendigen Größen. \item Füge aus den Einzelteilen das neue Display zusammen. \end{enumerate} @ \subsection{Der grobe Aufbau der Funktion [[stem.leaf.backback()]]} Auf der groben Beschreibungsebene ergibt sich aus dem Vorgehen folgender Funktionaufbau. Wir definieren hier die Funktion [[stem.leaf()]] als lokale Funktion, da sich möglicherweise jemand die Funktion [[stem.leaf.backbak()]] kopieren und ohne das Paket [[aplpack]] verwenden möchte. <>= stem.leaf.backback <- function(x,y, unit, m, Min, Max, rule.line = c("Dixon", "Velleman", "Sturges"), style = c("Tukey", "bare"), trim.outliers = TRUE, depths = TRUE, reverse.negative.leaves = TRUE, na.rm = FALSE, printresult=TRUE, show.no.depths = FALSE, add.more.blanks = 0, back.to.back = TRUE){ <> <> <> <> <> <> } @ \subsection{Input-Check} Wenn nur ein Datensatz eingegeben wird, wird er doppelt verwendet. Es werden die Namen und die Anzahlen der fehlenden Werte festgestellt. <>= x.name <- paste(deparse(substitute(x)),collapse="") if(missing(y)){ y <- x; y.name <- x.name } else y.name <- paste(deparse(substitute(y)),collapse="") n.na.x <- sum(is.na(x)); n.na.y <- sum(is.na(y)) @ \subsection{Kombination der beiden Datensätze} Es ist kein Problem die Datensätze zusammenzufassen. Jedoch gilt es ggf. geeignete Parameter-Werte für [[m]], [[Min]] usw.\ zu ermitteln, damit diese dann explizit für die weiteren Berechnungen zur Verfügung stehen. Dann erstellen wir virtuell einen gemeinsamen stem and leaf display und können über [[sl.xy]] auf alle wesentlichen Informationen zugreifen. Insbesondere benötigen wir die Variable [[unit]], die die Dezimalstelle festlegt. <>= <> sl.xy <- stem.leaf(c(x,y),unit=unit,m=m,Min=Min, Max=Max, rule.line=rule.line, style=style,trim.outliers=trim.outliers,depths=depths, reverse.negative.leaves = reverse.negative.leaves, na.rm = na.rm, printresult=FALSE) h <- grep(" leaf unit: ",sl.xy$info,value=TRUE) unit <- as.numeric(sub(" leaf unit: ","",h)) @ Zur Parameterermittlung führen wir die ersten Schritte einer stem and leaf display-Konstruktion durch und können danach die notwendigen Größen zugreifen. Hiernach liegt eine Vorstellung über Stamm und Maserung vor. <>= data <- c(x,y) <> <> <> <> <> <> <> @ \subsection{Berechnung der Display-Elemente und Synchronisation der Stämme} Die Blätter der einzelnen Stichproben finden wir durch getrennte Aufrufe von [[stem.leaf()]]. <>= sl.x <- stem.leaf(x, unit=unit,m=m,Min=Min, Max=Max, rule.line=rule.line, style=style,trim.outliers=trim.outliers,depths=depths, reverse.negative.leaves = reverse.negative.leaves, na.rm = na.rm, printresult=FALSE) sl.y <- stem.leaf(y, unit=unit,m=m,Min=Min, Max=Max, rule.line=rule.line, style=style,trim.outliers=trim.outliers,depths=depths, reverse.negative.leaves = reverse.negative.leaves, na.rm = na.rm, printresult=FALSE) @ Das Zusammenfügen ist mehr Textverarbeitung als Berechnung, also Fließarbeit. Zunächst extrahieren wir die relevanten Infos aus den Displays [[sl.x]] und [[sl.y]]. In den Stämmen suchen wir dann einen Eintrag mit Ziffern, der in beiden vorkommt. Anhand dieses Eintrags müssen die Stämme ggf. geeignet verlängert werden. Entsprechend zu den Anfügungen müssen auch die Vektoren mit den Blättern expandiert werden. Es kann notwendig sein, den ersten Datensatz vorn und oder oder hinten zu verlängern. Gleiches gilt für den zweiten Datensatz. Hierdurch erklären sich die vier If-Konstruktionen. Nach diesem Chunk müssen [[x.stem]] und [[y.stem]] identisch sein. <>= x.stem <- gsub(" ","",sl.x$stem); y.stem <- gsub(" ","",sl.y$stem) x.leaves <- substring(sl.x$leaves,3); y.leaves <- substring(sl.y$leaves,3) x.depths <- substring(sl.x$depths,3); y.depths <- substring(sl.y$depths,3) x.digits <- grep("[0-9]",x.stem,value=TRUE); y.digits <- grep("[0-9]",y.stem,value=TRUE) h <- match(y.digits, x.digits); h <- h[!is.na(h)][1] # take the first ->[1] only otherwise an error occurs, see mail from John Fox 10/2013: x.pos <- which(x.stem==x.digits[h])[1]; y.pos <- which(y.stem==x.digits[h])[1] LZ <- rep(" ",d <- abs(y.pos - x.pos)) if(x.pos < y.pos) { # x vorn verlaengern x.stem <- c(y.stem[1:d],x.stem); x.leaves <- c(LZ,x.leaves); x.depths <- c(LZ,x.depths) } if(y.pos < x.pos) { # y vorn verlaengern y.stem <- c(x.stem[1:d],y.stem); y.leaves <- c(LZ,y.leaves); y.depths <- c(LZ,y.depths) } x.l <- length(x.stem); y.l <- length(y.stem) LZ <- rep(" ",d <- abs(y.l-x.l)) if(x.l < y.l) { # x hinten verlaengern x.stem <- c(x.stem,y.stem[-(1:x.l)]); x.leaves <- c(x.leaves,LZ) x.depths <- c(LZ,x.depths,LZ) } if(y.l < x.l) { # y hinten verlaengern y.stem <- c(y.stem,x.stem[-(1:y.l)]); y.leaves <- c(y.leaves,LZ) y.depths <- c(LZ,y.depths,LZ) } @ % test statements for integration % cat("x.stem",x.stem,"x.digits",x.digits); cat("y.stem",y.stem,"y.digits",y.digits) % cat("y.pos, x.pos",y.pos,",", x.pos) % style <- "Tukey"; style <- "bare"; @ \subsection{Output-Generierung} Der Output ergibt sich aus den gesammelten Zwischenergebnissen, die alle textlicher Natur sind. Es gilt also Textvektoren vertikal und horizontal zusammenzufügen. Hierzu werden eine Reihe von Hilfsfunktionen definiert, die auch an anderer Stelle hilfreich sein können. Zuerst passen wir die Variablen, die Stämme und Blätter der beiden Datensätze merken, in ihrer Größe an. Dabei werden auch die Blätter des ersten Datensatz gedreht. Dann fügen wir Tiefen, Stamm und Blätter zusammen. Im dritten Schritt komponieren wir die Informationszeilen, die uns Anzahlen, fehlende Werte, Extremwerte und Datensatznamen zeigen. Zum Schluss wird das entstandene Gebilde per [[cat()]] und als explizites Ergebnis ausgegeben. <>= <> <> <> <> <> <> # komponiere Ergebnisvektor line <- paste(rep("_",max(nchar(result))),collapse="") result <- c(line,info.line,name.line,lower.line,line,result,line,upper.line,n.line, if(substring(na.line,1,1)=="N") na.line,line) result <- result[grep("[^ ]",result)] # zeige Output if(printresult){ cat(result,sep="\n") } invisible(list(info=sl.x$info, display=result,lower.x=sl.x$lower,upper.x=sl.x$upper, lower.y=sl.y$lower,upper.y=sl.y$upper, x.depths=x.depths,y.depths=y.depths,stem=x.stem,x.leaves,y.leaves)) @ Die Blätteranzahl an jeder Stammstelle werden unterschiedlich sein. Gleiches gilt evtl. für den Stamm ebenfalls. Deshalb werden zur Erzielung einer rechteckigen Struktur Leerzeichen angefügt. Danach enthalten alle Elemente eines so vereinheitlichten Vektors gleich viele Zeichen. Zusätzlich werden gemäß Anwenderwunsch weitere [[add.more.blanks]] den Ästen mit den Blättern hinzugefügt. Zum Schluss wird sichergestellt, dass die beiden Objekte mit den Blättern wirklich gleich groß sind. <>= x.leaves <- expand.text(x.leaves,fill.right=TRUE,O=add.more.blanks) x.leaves <- rotate.string(x.leaves) x.stem <- expand.text(x.stem,fill.right=FALSE) y.leaves <- expand.text(y.leaves,fill.right=TRUE,O=add.more.blanks) # Zweige egalisieren x.leaves <- expand.a.to.b(x.leaves,y.leaves,fill.right=FALSE) y.leaves <- expand.a.to.b(y.leaves,x.leaves) @ Für die Umsetzung der Angleichung finden Hilfsfunktionen Verwendung: [[rotate.string()]], [[expand.text()]] und [[expand.a.to.b()]]. Die erste rotiert einen String, die zweite macht die Elemente gleichgroß bzgl. der Zeichenzahl, die dritte expandiert einen Vektor auf die Größe eines zweiten Vektors. In [[expand.text()]] werden erst die Verlängerungswünsche umgesetzt und dann eine Angleichung vorgenommen. Das Auffüllen mit Leerzeichen kann prinzipiell rechts wie auch links erwünscht sein. <>= expand.text <- function(x,N=0,O=0,S=0,W=0,fill.right=TRUE,sep=" "){ # bringt Elemente auf gleiche Laenge und ergaenzt Leerzeichen in den Himmelsrichtungen if(0>= expand.a.to.b <- function(a,b,fill.right=TRUE,fill.tail=TRUE){ # expandiert Vektor a auf die Dimensionen von Vektor b d <- length(b) - length(a) if(0 < d) a <- if(fill.tail) c(a, rep(" ",d)) else c(rep(" ",d), a) n.LZ <- max(nchar(b),nchar(a)); d <- n.LZ - nchar(a) LZ <- paste(rep(" ",n.LZ),collapse="") a <- ifelse( d <= 0, a, if(fill.right) paste(a,substring(LZ,1,d),sep="") else paste(substring(LZ,1,d),a,sep="")) return(a) } @ [[rotate.string()]] ist wird mit einer impliziten Schleife in Form von [[sapply()]] umgesetzt. <>= rotate.string <- function(x){ x <- sapply(x,function(y) { h <- nchar(y); paste(substring(y,h:1,h:1),collapse="") }) } @ Jetzt können wir die Kombination der Tiefen, Blätter und des Stammes ins Auge fassen. Falls ein richtiger Back-To-Back-Display entstehen soll, ist das Zusammenfügen etwas anders, als wenn der Anwender lieber zwei parallele Halbbäume mit einem Stamm ganz links bekommen möchte. Weiterhin ergibt sich ein Unterschied dadurch, wenn auf die Tiefeninformation verzichtet werden soll. Je nach den verschiedenen Fällen merken wir uns ein paar markante Stellen, um für die Platzierung weiterer Informationen eine Orientierung zu haben. Außerdem legen wir einen String aus Leerzeichen auf [[LZ]] ab, dessen Zeichenzahl mit denen der Elemente von [[result]] übereinstimmt. <>= if(back.to.back){ if(show.no.depths){ result <- vecpaste("",x.leaves,x.stem,y.leaves,"",sep=c(" ","","| "," |",""," ")) } else { result <- vecpaste(x.depths,x.leaves,x.stem,y.leaves,y.depths, sep=c(" "," ","| "," |"," "," ")) } end.of.x.leaves <- sum(result$widths[1:4]) end.of.x.attributes <- sum(result$widths[1:4]) start.of.y.attributes <- sum(result$widths[1:7]) # falls x.name sehr lang space.x.to.y <- sum(result$widths[5:7]) end.of.left.stem <- 0 extr.width <- end.of.x.leaves } else { # parallel displays if(show.no.depths){ result <- vecpaste(x.stem,rotate.string(x.leaves),y.leaves,sep=c(" "," |"," |"," ")) end.of.x.leaves <- sum(result$widths[1:4]) end.of.x.attributes <- sum(result$widths[1:4]) start.of.y.attributes <- sum(result$widths[1:4]) # falls x.name sehr lang space.x.to.y <- sum(result$widths[5]) } else { result <- vecpaste(x.stem,rotate.string(x.leaves),x.depths,y.leaves,y.depths, sep=c(" "," |"," "," |"," "," ")) end.of.x.leaves <- sum(result$widths[1:6]) end.of.x.attributes <- sum(result$widths[1:6]) start.of.y.attributes <- sum(result$widths[1:7]) # falls x.name sehr lang space.x.to.y <- sum(result$widths[7]) #- 5 } end.of.left.stem <- sum(result$widths[1:3]) extr.width <- end.of.x.leaves-end.of.left.stem } result <- result$result LZ <- paste(rep(" ",max(nchar(result))),collapse="") @ Für die Operation "Zusammenfügen" wurde die Funktion [[vecpaste()]] verwendet. Dieser Funktion kann eine Liste von zu verschmelzenden Objekten übergeben werden. Diese Liste ist zunächst zu identifizieren. An den Verschmelzungsstellen lässt sich eine Fuge einbringen, die über das Argument [[sep]] beschrieben wird. Sollen alle Fugen oder Verbindungsstellen gleich aussehen, reicht die Angabe eines skalaren Wertes aus. Sonst muss [[sep]] ein Vektor sein, der einen Wert mehr als die Objektzahl umfasst. Denn die Fugen werden nicht nur zwischen den Objekten eingefügt, sondern auch am Rand. Ist [[sep]] nummerisch, wird die Angabe als gewünschte Anzahl von Leerzeichen interpretiert. Zur Verschmelzung werden sicherheitshalber die Elemente eines Objekts vereinheitlicht und dann mit der zugehörigen Fuge auf dem Ergebnisvektor abgelegt. Damit später die Information über die Größen der Teilblöcke verfügt werden kann, werden auf [[widths]] diese Breiten (in Zeichenanzahlen) gesammelt und mit ausgegeben. Um eine zweite Situation abzubilden, können für die einzelnen Blöcke, die verschmolzen werden sollen auch Breiten vorgegeben werden. Für diesen Fall müssen an das Argument [[widths]] die Bereiten übergeben werden. Dann erhalten Zwischenräume eine Ausdehnung von 0, die Blöcke werden um Leerzeichen erweitert und dann aneinandergefügt. <>= vecpaste <- function(..., sep=" ", widths=NULL, fill.right = TRUE){ ## ??? # vecpaste pastet Vektoren zusammen xyz <- list(...); n <- length(xyz) LZ <- paste(rep(" ",200),collapse="") if(0 < length(widths)) sep <- "" else widths <- rep(0,n) if(is.numeric(sep)) sep <- substring(LZ,1,sep) if(length(sep)==1) sep <- rep(sep,n+1) if(length(fill.right)==1) fill.right <- rep(fill.right,n) result <- ""; w <- NULL for(i in 1:n){ #print(fill.right[i]); cat("n",n,"i",i) h <- as.character(xyz[[i]]); h <- expand.text(h,fill.right=fill.right[i]) if(nchar(h[1]) < widths[i]) if(fill.right[i]){ h <- paste(h,substring(LZ,1,widths[i]-nchar(h[1])),sep="") }else{ h <- paste(substring(LZ,1,widths[i]-nchar(h[1])),h,sep="") } result <- paste(result,h,sep=sep[i]) w <- c(w, nchar(sep[i]), nchar(h[1])) } if(0 == length(widths)) widths <- c(w,nchar(sep[n+1])) else widths <- w result <- paste(result,"",sep=sep[n+1]) return(list(result=result,widths=widths)) } @ Mit Hilfe von [[vecpaste()]] und den Blockbreiten ist die Erstellung der Informationszeilen nicht weiter problematisch. Es muss immer aufgezählt werden, was zu kombinieren ist, und es müssen die Breiten in einem Vektor zusammengefasst angegeben werden. Falls der erste Datensatzname zu lang ist, soll der zweite in einer gesonderten Zeile eingetragen werden. <>= # compose info line info.line <- vecpaste(sl.x$info[1],sl.x$info[2],sep=c(" ",","," "))$result end.of.attr <- max(end.of.left.stem,4) # compose name line if( nchar(x.name) < end.of.x.leaves) { name.line <- vecpaste(" ",x.name," ",y.name, widths=c(end.of.attr, end.of.x.leaves-end.of.attr, space.x.to.y, end.of.x.leaves-4), fill.right=c(TRUE,!back.to.back,TRUE,TRUE))$result } else { name.line <- c(vecpaste(x.name,sep=c(end.of.x.leaves - nchar(x.name),0))$result, vecpaste(y.name,sep=c(start.of.y.attributes,0))$result) } # compose length line n.line <- vecpaste("n: ",length(x)," ",length(y), widths=c(end.of.attr, end.of.x.leaves-end.of.attr, space.x.to.y, end.of.x.leaves-4), fill.right=c(TRUE,!back.to.back,TRUE,TRUE))$result # compose NA line na.line <- vecpaste("NAs:",n.na.x," ",n.na.y, widths=c(end.of.attr, end.of.x.leaves-end.of.attr, space.x.to.y, end.of.x.leaves-4), fill.right=c(TRUE,!back.to.back,TRUE,TRUE))$result if(0==length(grep("[1-9]",na.line))) na.line <- " " @ Jetzt müssen nur noch die Extremwerte abgehandelt werden. Da sich eine ganze Reihe einstellen können, sollte man diese ggf. auf mehrere Zeilen aufteilen. Die Textvektoren der jeweiligen Extremwerte sind dann an passenden Stellen aufzusplitten. Diesen Job übernimmt die Funktion [[line.to.textvec()]]. Sowohl für die Lower- wie auch für die Upper-Werte müssen die sich ergebenden Textvariablen zum Schluss wieder mit [[expand.a.to.b()]] geeignet expandiert werden. <>= # compose info of HI values ## split HI info of x in smaller parts upper.x.res <- line.to.textvec(sl.x$upper, extr.width) ## split HI info of y in smaller parts upper.y.res <- line.to.textvec(sl.y$upper, extr.width) ## unify x and y HI values upper.x.res <- expand.a.to.b(upper.x.res, upper.y.res) upper.y.res <- expand.a.to.b(upper.y.res, upper.x.res) ## compose HI line if(back.to.back){ upper.line <- vecpaste(upper.x.res,upper.y.res,sep=c(0,space.x.to.y,0))$result } else { upper.line <- vecpaste(" ",upper.x.res," ",upper.y.res, widths=c(end.of.attr,end.of.x.leaves-end.of.attr,space.x.to.y,end.of.x.leaves-4), fill.right=c(TRUE,TRUE,TRUE,TRUE))$result } @ Für die extrem kleinen Werte sind die selben Überlegungen wie zu den extrem großen Werten anzustellen. <>= # compose info of LO values ## width=space by depths, leaves and 2 outer and 2 between ## split LO info of x in smaller parts lower.x.res <- line.to.textvec(sl.x$lower, extr.width) ## split LO info of y in smaller parts lower.y.res <- line.to.textvec(sl.y$lower, extr.width) ## unify x and y LO values lower.x.res <- expand.a.to.b(lower.x.res, lower.y.res) lower.y.res <- expand.a.to.b(lower.y.res, lower.x.res) ## compose LO line if(back.to.back){ lower.line <- vecpaste(lower.x.res,lower.y.res,sep=c(0,space.x.to.y,0))$result } else { lower.line <- vecpaste(" ",lower.x.res," ",lower.y.res, widths=c(end.of.attr,end.of.x.leaves-end.of.attr,space.x.to.y,end.of.x.leaves-4), fill.right=c(TRUE,TRUE,TRUE,TRUE))$result } @ Für die Aufspaltung eines Textvektors in Zeilen, wird der Input zunächst zu einem Element verschmolzen. Falls es keine Beschränkung der Zeilenbreite gibt, ist nichts zu tun. Wenn der Input in eine Zeile passt, wird er auf die angegebene Zeilenlänge mit Leerzeichen aufgefüllt. Das Vorgehen ist, wie folgt: Der Input wird an Stellen des Separators [[sep]] in Einzelstücke zerlegt. Dann werden immer so viele Einzelstücke genommen, wie in eine Zeile passen. Passt ein sehr langes Stück nicht in eine Zeile, wird dieses gesplittet und eine Warnung ausgegeben. <>= line.to.textvec <- function(vec,width,sep=" "){ # wandelt Textzeile in Textvektor vorgegebener maximaler Zeichenanzahl um vec <- paste(vec,collapse=" "); if(width==Inf) return(vec) d <- width - nchar(vec); LZ <- paste(rep(" ",width),collapse="") if( 0 < d ) return(paste(vec,substring(LZ,1,d),sep="")) vec.sep <- unlist(strsplit(vec,sep)); result <- NULL; imax <- 200 while(0 < length(vec.sep)){ if( (imax<-imax-1) < 0 ) break h <- sum( cumsum(nchar(vec.sep)+1) <= width ) # +1 fuer Trennzeichen if( h==0 ) { h <- 1; cat("Warning: word '",vec.sep[1],"' too long ...",sep="") vec.sep <- c(substring(vec.sep[1],1,width),substring(vec.sep[1],1+width),vec.sep[-1]) h <- 1; cat(" and has been split to '",vec.sep[1],"' and '",vec.sep[2],"'",sep="") } new.line <- paste(vec.sep[1:h],collapse=sep) d <- width - nchar(new.line) if( d < 0 ) new.line <- substring(new.line,1,width) if( 0 < d ) new.line <- paste(new.line,substring(LZ,1,d),sep="") result <- c(result, new.line); vec.sep <- vec.sep[-(1:h)] } return(result) } @ \subsection{Some Tests} @ Wir definieren eine Reihe von Tests ganz einfach dadurch, dass wir die Test-Aufrufe von [[stem.leaf()]] abändern. Hierzu definieren wir zunächst die Funktion [[test()]] so, dass sie statt [[stem.leaf()]] die Funktion [[stem.leaf.backback()]] mit doppelter Verwendung der Daten aufruft. <<*>>= debug.cond <<- FALSE test <- function(what) { what <- sub("stem.leaf","stem.leaf.backback",what) cat(what,"\n"); eval(parse(text=what)); return() } <> <> <> <> <> <> <> @ Als nächstes schauen wir, ob die Veränderung weiterer Parameter klappt. Paralleles Blätterwerk erhalten wir mit Hilfe von [[back.to.back=FALSE]]. <<*>>= test <- function(what) { what <- sub("stem.leaf.","stem.leaf.backback(back.to.back=FALSE,",what) cat(what,"\n"); eval(parse(text=what)); return() } <> <> <> <> <> <> <> @ Wie sehen die Displays aus, wenn auf die Tiefeninformation verzichtet werden soll? <<*>>= test <- function(what) { what <- sub("stem.leaf.", "stem.leaf.backback(show.no.depths=TRUE,add.more.blanks=10,",what) cat(what,"\n"); eval(parse(text=what)); return() } <> <> <> <> <> <> <> @ Für singuläre Tests kann folgender Chunk verwendet werden: <>= <> "a" <- structure(c(12, 29, 49, 280, 78, 41, 49, 308, 70, 57, 41, 37, 275, 33, 267, 37, 33, 57, 37, 41, 25, 41, 53, 74, 57, 53, 37, 49, 66, 70, 134, 33, 57, 45, 62, 250, 37, 271, 37, 41, 12, 70, 25)) stem.leaf(a); stem.leaf(a,Max=70) dat1 <- c(-2000,co2[113:130],NA,NA,500,600,700,1000) dat2 <- c(-1000,-10000,-5000,co2[170:140],NA,NA,NA,500,600,700,10000) dat1 <- c(co2[113:130],NA,NA,500,600,700,1000)#; dat2 <- dat1 dat1 <- dat2 a <- stem.leaf.backback(dat1, c(dat2,dat2,dat2) ,m=2,unit=.1) a <- stem.leaf.backback(c(co2[113:130],NA,NA,500),c(co2[170:140],NA), m=2,unit=.1) stem.leaf(c(co2[1:50],NA,400),m=5,unit=1) stem.leaf.backback(co2) NULL @ <<*>>= <> a <- stem.leaf.backback(dat1, c(dat2,dat2,dat2) ,m=2,unit=.1, show.no.depths=TRUE,add.more.blanks=0) a <- stem.leaf.backback(c(dat2,dat2), c(dat2,dat2) ,m=2,unit=.1, show.no.depths=!TRUE,add.more.blanks=10) NULL @ <<*>>= <> a <- stem.leaf.backback(dat1, c(dat2,dat2,dat2) ,m=2,unit=.1, show.no.depths=TRUE,add.more.blanks=0) a <- stem.leaf.backback(c(dat2,dat2), c(dat2,dat2) ,m=2,unit=.1, show.no.depths=TRUE,add.more.blanks=10) a <- stem.leaf.backback(c(dat2,dat2), c(dat2,dat2) ,m=2,unit=.1, show.no.depths=TRUE,add.more.blanks=10,back.to.back=!TRUE) NULL @ <<*>>= <> a <- stem.leaf.backback(dat1, c(dat2,dat2,dat2) ,m=2,unit=.1, show.no.depths=TRUE,add.more.blanks=0) a <- stem.leaf.backback(c(dat2), 1.02*c(dat2,dat2) ,m=2,unit=.1, show.no.depths=TRUE,add.more.blanks=0) a <- stem.leaf.backback(c(co2[1:284]), c(co2[1:100]) ,m=1,unit=1, show.no.depths=!TRUE,add.more.blanks=2,rule.line="Sturges") a <- stem.leaf.backback(co2,co2 ,m=2,unit=1, show.no.depths=!TRUE,add.more.blanks=2,rule.line="Sturges") NULL @ Beispiele aus der Hilfe: <<*>>= <> stem.leaf(co2) stem.leaf.backback(co2[1:120],co2[121:240]) stem.leaf.backback(co2[1:120],co2[121:240], back.to.back = FALSE) stem.leaf.backback(co2[1:120],co2[121:240], back.to.back = FALSE, add.more.blanks = 3, show.no.depths = TRUE) stem.leaf.backback(rivers[-(1:30)],rivers[1:30], back.to.back = FALSE, unit=10, m=5, Min=200, Max=900, add.more.blanks = 20, show.no.depths = TRUE) NULL @ Error mailed by John Fox, 30.Okt.2013 in [[stem.leaf.backback]]: % install.packages('car', lib='/home/pwolf/lib', repos='http://cran.r-project.org') <>= # style <- "Tukey" style <- "bare" <> library(crayon,lib.loc="/home/pwolf/lib") library(carData,lib.loc="/home/pwolf/lib") library(car,lib.loc="/home/pwolf/lib") data(Moore, package="car") with(Moore, stem.leaf.backback(conformity[partner.status == "low"], conformity[partner.status == "high"],style=style)) # ok "ok" @ Here is the correct output: \begin{verbatim} _______________________________ 1 | 2: represents 12, leaf unit: 1 conformity[partner.status == "low"] conformity[partner.status == "high"] _______________________________ | 0 | | 0 | 3 444| 0 | 8 77766| 0 |77 2 (5) 99888| 0 |89 4 9 0| 1 |01 6 8 333222| 1 |223 9 | 1 |44455 (5) | 1 |66777 9 | 1 |9 4 | 2 |01 3 2 3| 2 |3 1 1 4| 2 | | 2 | | 2 | | 3 | _______________________________ n: 22 23 _______________________________ \end{verbatim} @ Up to October 2013 an error occurs because x.pos and y.pos are vectors. \begin{verbatim} Error in rep(" ", d <- abs(y.pos - x.pos)) : ungültiges 'times' Argument sorry, evaluation not successful!!! \end{verbatim} @ <<*>>= x <- Moore[Moore$partner.status == "low", "conformity"] y <- Moore[Moore$partner.status == "high", "conformity"] y <- y[y<9] stem.leaf.backback(x,x,style=style,unit=1) # ok "" @ In April 2015 Dietrich Trenkler reported an error concerning the median computation in the following data set. [[stem.leaf(x[1:90])]]: ok, [[stem.leaf(x[1:91])]]: wrong median. <<*>>= x <- structure(c(7.1, 7, 7.7, 6.4, 6, 6.2, 7.9, 6.4, 6.2, 6.3, 5.2, 4.6, 5.3, 8.6, 4.9, 6.1, 5.6, 5.6, 8.5, 6, 5.5, 8.4, 6.2, 8.2, 5.1, 9.8, 9.2, 6.9, 5.5, 4.5, 6.9, 6.1, 6, 5.2, 9, 5.4, 7, 6.4, 9.6, 6.9, 5.7, 5.6, 8.5, 5.9, 7.1, 5.6, 8.2, 5.8, 6.1, 6, 8.5, 9.5, 6.3, 5, 7, 8.3, 6.5, 6.1, 5.9, 5, 8.8, 7.2, 6.1, 5.7, 5.9, 6.6, 6.7, 11.9, 8, 7.3, 7.5, 6.1, 7.7, 6.7, 6, 5.8, 6.5, 7.2, 7.8, 6.1, 8.4, 6.3, 7.6, 6.4, 6, 5.1, 5.4, 6.1, 6.6, 9, 7.4, 9.3, 7.9, 6.4, 8.3, 6.1, 5.9, 7.4, 6.1, 4.6)) <> # debug.cond <<- "all"; cat(rep("-",20), median(x),"\n") stem.leaf(x) ## ([1:91]) @ \section{Anhang} \subsection{Chunk-Liste} % list of code chunks -- remove next line to disable list of chunks @list.of.chunks \subsection{Objekt-Index} % object index -- remove next line to disable object index @index.of.objects \end{document} @ Dokumentation, Namespace?, offene Fragen: mehrere stem and leaf displays? \subsection{Reste} In der Entwicklungsphase wurden noch weitere Funktionen entworfen. <>= expand.A.to.B <- function(A,B,fill.right=TRUE,fill.bottom=TRUE){ # expandiert Matrix A auf die Dimensionen von Matrix B if(!is.matrix(A)) A <- matrix(A,length(A),1) if(!is.matrix(B)) B <- matrix(B,length(B),1) if(dim(A)[2] < dim(B)[2]){ if(fill.right) A <- cbind(A, matrix(" ",dim(A)[1],dim(B)[2]-dim(A)[2])) else A <- cbind(matrix(" ",dim(A)[1],dim(B)[2]-dim(A)[2]),A) } if(dim(A)[1] < dim(B)[1]){ if(fill.bottom) A <- rbind(A, matrix(" ",dim(B)[1]-dim(A)[1],dim(A)[2])) else A <- rbind(matrix(" ",dim(B)[1]-dim(A)[1],dim(A)[2]),A) } LZ <- paste(rep(" ",200),collapse="") I <- seq(dim(B)[1]); J <- seq(dim(B)[2]) A[I,J] <- ifelse(nchar(A[I,J]) < nchar(B), if(fill.right) paste(A[I,J],substring(LZ,1,nchar(B)-nchar(A[I,J])),sep="") else paste(substring(LZ,1,nchar(B)-nchar(A[I,J])),A[I,J],sep=""), A[I,J]) A } append.blanks <- function(x,add.on.the.right.side=TRUE,add.blanks=0){ add.blanks <- max(0,add.blanks) if(length(x) == 0) return(x) LZ <- paste(rep(" ",mh<-max(h<-nchar(x))),collapse="") LA <- paste(rep(" ",add.blanks),collapse="") if(add.on.the.right.side){ x <- paste(x,substring(LZ,1,mh-h),LA,sep="") } else { x <- paste(LA,substring(LZ,1,mh-h),x,sep="") } x } @ <>= line.to.textmat <- function(vec,width=Inf,sep=" "){ # UNUSED: wandelt Textzeile in Textmatrix vorgegebener Breite um vec <- paste(vec,collapse=" ") if(width==Inf) return(matrix(vec,1,1)) LZ <- paste(rep(" ",200),collapse="") d <- width - nchar(vec) if( 0 < d ) return(matrix(paste(vec,substring(LZ,1,d),sep=""),1,1)) vec.sep <- unlist(strsplit(vec,sep)); mat <- NULL; imax <- 20 while(0 < length(vec.sep)){ if( (imax<-imax-1) < 0 ) break h <- sum( cumsum(nchar(vec.sep)+1) <= width ) # +1 fuer Trennzeichen if( h==0 ) { h <- 1; cat("Warning: word '",vec.sep[1],"' too long ...",sep="") vec.sep <- c(substring(vec.sep[1],1,width),substring(vec.sep[1],1+width),vec.sep[-1]) h <- 1; cat(" and has been split to '",vec.sep[1],"' and '",vec.sep[2],"'",sep="") } new.line <- paste(vec.sep[1:h],collapse=sep) d <- width - nchar(new.line) if( d < 0 ) new.line <- substring(new.line,1,width) if( 0 < d ) new.line <- paste(new.line,substring(LZ,1,d),sep="") mat <- c(mat, new.line); vec.sep <- vec.sep[-(1:h)] } return(matrix(mat,length(mat),1)) } line.to.textmat(NULL) line.to.textmat("asd") line.to.textmat("asd asdf asdf asdf asd f asdf asdf asdf a sdfasdf ",10) line.to.textmat("asdasdf asdfasdf",3) A<-matrix("aaaaaaaaaaaaaa",1,1);B<-matrix(c("asdfadf","asdfad","yxcv","adsfasdfdsf"),2,2) C<-expand.A.to.B(B,A) print(A); print(B); print(C) @ <>= # old lower # compose info of LO values lower.x.res <- lower.y.res <- NULL ## split LO info of x in smaller parts if(!is.null(sl.x$lower)){ ul <- unlist(strsplit(sl.x$lower," ")); u.res <- NULL while(0 < length(ul)){ h <- max(1, sum( cumsum(nchar(ul)+1) < (n.LZ.x.depths + 4 + n.LZ.x.leaves))) u.res <- c(u.res, paste(ul[1:h],collapse=" ")); ul <- ul[-(1:h)] } lower.x.res <- u.res[u.res!=""] } print(lower.x.res) lower.x.res <- line.to.textmat(sl.x$lower,n.LZ.x.depths + 4 + n.LZ.x.leaves) ## split LO info of y in smaller parts if(!is.null(sl.y$lower)){ ul <- unlist(strsplit(sl.y$lower," ")); u.res <- NULL while(0 < length(ul)){ h <- max(1,sum( cumsum(nchar(ul)+1) < (n.LZ.y.depths + 4 + n.LZ.y.leaves))) u.res <- c(u.res, paste(ul[1:h],collapse=" ")); ul <- ul[-(1:h)] } lower.y.res <- u.res[u.res!=""] } print(lower.y.res) lower.y.res <- line.to.textmat(sl.y$lower,n.LZ.y.depths + 4 + n.LZ.y.leaves) print(lower.y.res) ## combine x and y HI values d <- length(lower.x.res) - length(lower.y.res) if(d < 0) lower.x.res <- c(lower.x.res,rep(" ",-d)) if(0 < d) lower.y.res <- c(lower.y.res,rep(" ",d)) n.symbols <- if(length(lower.x.res)== 0) 0 else max(nchar(lower.x.res)) lower.x.res <- append.blanks(lower.x.res,add.blanks=n.LZ.x.depths + n.LZ.x.leaves + 4 - n.symbols) n.symbols <- if(length(lower.y.res)== 0) 0 else max(nchar(lower.y.res)) lower.y.res <- append.blanks(lower.y.res,add.blanks=n.LZ.y.depths + n.LZ.y.leaves - n.symbols) ## compose LO line lower.line <- paste(lower.x.res,substring(LZ,1,2+n.LZ.stem),lower.y.res) upper.x.res <- upper.y.res <- NULL ## split HI info of x in smaller parts if(!is.null(sl.x$upper)){ ul <- unlist(strsplit(sl.x$upper," ")); u.res <- NULL while(0 < length(ul)){ h <- max(1, sum( cumsum(nchar(ul)+1) < (n.LZ.x.depths + 4 + n.LZ.x.leaves))) u.res <- c(u.res, paste(ul[1:h],collapse=" ")); ul <- ul[-(1:h)] } upper.x.res <- u.res[u.res!=""] } ## split HI info of y in smaller parts if(!is.null(sl.y$upper)){ ul <- unlist(strsplit(sl.y$upper," ")); u.res <- NULL while(0 < length(ul)){ h <- max(1,sum( cumsum(nchar(ul)+1) < (n.LZ.y.depths + 4 + n.LZ.y.leaves))) u.res <- c(u.res, paste(ul[1:h],collapse=" ")); ul <- ul[-(1:h)] } upper.y.res <- u.res[u.res!=""] } ## combine x and y HI values d <- length(upper.x.res) - length(upper.y.res) if(d < 0) upper.x.res <- c(upper.x.res,rep(" ",-d)) if(0 < d) upper.y.res <- c(upper.y.res,rep(" ",d)) n.symbols <- if(length(upper.x.res)== 0) 0 else max(nchar(upper.x.res)) upper.x.res <- append.blanks(upper.x.res,add.blanks=n.LZ.x.depths + n.LZ.x.leaves + 4 - n.symbols) n.symbols <- if(length(upper.y.res)== 0) 0 else max(nchar(upper.y.res)) upper.y.res <- append.blanks(upper.y.res,add.blanks=n.LZ.y.depths + n.LZ.y.leaves - n.symbols) # compose line sep=c(0,n.LZ.x.depths+n.LZ.x.leaves-nchar(as.character(n.na.x)), # 4+n.LZ.stem,0))$result # name.line sep=c(n.LZ.x.depths + n.LZ.x.leaves+4-nchar(x.name),n.LZ.stem+4,0))$result # n.line sep=c(0,n.LZ.x.depths+n.LZ.x.leaves-nchar(as.character(length(x))), # 4+n.LZ.stem,0))$result # upper.x.res <- line.to.textvec(sl.x$upper, n.LZ.x.depths + 4 + n.LZ.x.leaves) # upper.y.res <- line.to.textvec(sl.y$upper, n.LZ.y.depths + 4 + n.LZ.y.leaves) #lower.x.res <- line.to.textvec(sl.x$lower, n.LZ.x.depths + 4 + n.LZ.x.leaves) ## split LO info of y in smaller parts #lower.y.res <- line.to.textvec(sl.y$lower, n.LZ.y.depths + 4 + n.LZ.y.leaves) @ <>= set.seed(13) x <- runif(100,-300,300) stem.leaf(x,reverse.negative.leaves=!TRUE) @ \section{Erste back.to.back-Versuche} back to back stem-and-leaf plots <>= library(aplpack,lib.loc="/home/wiwi/pwolf/R/aplpack/lib") # library(aplpack) x <- stem.leaf(co2[1:100],reverse.negative.leaves=FALSE) y <- sub(".*[|]","",x$stem) maxchar <- max(n.c <- nchar(y)) y <- sapply(y, function(x) { n <- nchar(x); x <- substring(x,n:1,n:1) x <- c(rep(" ",maxchar-n),x) x <- paste(x,collapse="") }) c(paste(y,sub(" *[)(0-9]+ *"," ",x$stem),sep="|")) # c(paste(y,x$stem,sep="|")) # st.neg <- 1-seq(x$stem) %in% grep("-",x$stem) cbind(a<-stem.leaf(co2[1:100],reverse.negative.leaves=FALSE)$stem) @ <>= a <-stem.leaf(co2[1:100]+5, unit=.1)$stem; print(a);# print(9999999) b <-stem.leaf(co2[1:100], unit=.1)$stem; print(b); print(9999999) x.leaves <- sub(".*[|] ","",a) x.stem <- sub(".* ([^ ]+) [|].*","\\1",a) y.leaves <- sub(".*[|] ","",b) y.stem <- sub(".* ([^ ]+) [|].*","\\1",b) x.digits <- grep("[0-9]",x.stem,value=TRUE) y.digits <- grep("[0-9]",y.stem,value=TRUE) h <- match(y.digits, x.digits); h <- h[!is.na(h)][1] x.pos <- which(x.stem==x.digits[h]) y.pos <- which(y.stem==x.digits[h]) LZ <- rep(" ",d <- abs(y.pos - x.pos)) if(x.pos < y.pos) { # x vorn verlängern x.stem <- c(y.stem[1:d],x.stem) x.leaves <- c(LZ,x.leaves) } if(y.pos < x.pos) { # y vorn verlängern y.stem <- c(x.stem[1:d],y.stem) y.leaves <- c(LZ,y.leaves) } x.l <- length(x.stem) y.l <- length(y.stem) LZ <- rep(" ",d <- abs(y.l-x.l)) if(x.l < y.l) { # x hinten verlängern x.stem <- c(x.stem,y.stem[-(1:x.l)]) x.leaves <- c(x.leaves,LZ) } if(y.l < x.l) { # y hinten verlängern y.stem <- c(y.stem,x.stem[-(1:y.l)]) y.leaves <- c(y.leaves,LZ) } append.blanks <- function(x,add.on.the.right.side=TRUE){ LZ <- paste(rep(" ",mh<-max(h<-nchar(x))),collapse="") if(add.on.the.right.side){ x <- paste(x,substring(LZ,1,mh-h),sep="") } else { x <- paste(substring(LZ,1,mh-h),x,sep="") } x } rotate.string <- function(x){ x <- sapply(x,function(y) { h <- nchar(y); paste(substring(y,h:1,h:1),collapse="") }) } #x.leaves <- paste(x.leaves,substring(LZ,1,mh-h)) #x.leaves <- sapply(x.leaves,function(x) paste((substring(x,mh:1,mh:1)),collapse="")) x.leaves <- append.blanks(x.leaves) x.leaves <- rotate.string(x.leaves) names(x.leaves) <- NULL x.leaves cbind(x.leaves,x.stem,y.stem,y.leaves) #apropos("rev") #cbind(x.stem) # alte Version von vecpaste vecpaste <- function(...,sep=" "){ # vecpaste pastet Vektoren zusammen xyz <- list(...); n <- length(xyz) if(length(sep)==1) sep <- rep(sep,n+1) if(is.numeric(sep)){ LZ <- paste(rep(" ",max(sep)),collapse="") sep <- substring(LZ,1,sep) } result <- ""; widths <- NULL for(i in 1:n){ h <- as.character(xyz[[i]]); h <- expand.text(h) result <- paste(result,h,sep=sep[i]) widths <- c(widths, nchar(sep[i]), nchar(h[1])) } widths <- c(widths,nchar(sep[n+1])) result <- paste(result,"",sep=sep[n+1]) return(list(result=result,widths=widths)) } aplpack/inst/src/pw-esch.jpg0000644000176200001440000003123213516603655015514 0ustar liggesusersJFIFHH ICC_PROFILE mntrRGB XYZ acspAPPL, desc|cprtx(wtptbkptrXYZgXYZbXYZrTRC gTRC bTRC desc"Artifex Software sRGB ICC Profile"Artifex Software sRGB ICC ProfiletextCopyright Artifex Software 2011XYZ QXYZ XYZ o8XYZ bXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( *[d"FDdEH-#D edy d&ЧvM&[?MO\"MO\",!(OyS??HyS??H]CQ\&ЧvL^<};Ϧ$M89e=;}QoICWtk!s/٤XaE nxU')'-M+z^Sӭ-nI}nFd֬R4 ( ( ( ( ( ( ( ( ( ( ( (/▻xw_<p?B'-y_|Pc$:l%S,!`Yd^AcopAxb5U"O/ W<'vz%q?<?vKByU_gQ^G _d.'5G>?}0gQ^G _d.'5G>?}0gW=ޢoM$H,8x8S#a\oKט|ʨPr76rv0pGc_sp] gXSNz@qdN%,^h;%*^+p.Gqd,ą/@sUVa޽sGm"R"8G#NNUx ՖK9$zy7~I?z:|z(`Š((((((((((zuͅ~eO ɸzU(xjo xGy'o#[lq7+Ұ诎~^!uޙW,y'ar@U2ֿUD8GpՇ,+NÚ֧fvzspH<Pka0STPOD۱B i/7c27ğ V4xV^Y$~ W,J7OOpS\"-;N:$ߓL\ 㕕x[ҚYD(x.A`0OEcuS05& 7t䵱ϐ ڽgzugfUIdlrH1^MZ/Xc2zz8Vkt)Qko4;1}fgVׂV<@4Q +XPb'+ L,JNjr,8Oܖ_Ú'u;ͨ˥Hwu"G#ul5ޝA4sB%đ38=y󈲈gmL/VKo~MN&JT_ϡj_Ek.a~T[G5kTW.IY", PAiW4]\'Vѯ5*a1 {J/Y( Oo[ؗQmY0OG#;X+c88;T χoy?zݏYB55v!Zfg?wyhƒ?iW^}(?!5ӢXi>Sze1I^~/9pFA@ GGY O]? ?&D<3BQ4_  ŤlU|G-x\Qө>^䐂J3+Gdu!=VмE;h5KKyYB+a5 7q ֩WIYm%yeʽxΟ]ju:.cDcmy N=(’!t?) h2?˧BiBiAR *#7VsۍN'k$yܧo :_=j]ދʂ݂ɱ A ;?{KƼvƛX]CC'vL N+[tRtl# ).m⻵t ȹ#*F -ya+4|,&"5WM:hoΔS A¿=]Fv'Sg4FTQEEQ@Q@Q@Q@g5t;"7>%sї (ummWүKIZ)B#.@;Xa ީ$E{o!|af1"*T.x%U\]~㰑ZKEV ( ((((((((wc&~ }(pwI1<)fv8 ROa^cy6} bX\2p};׭C7u%% ltN3xf}'W ::nf>Z|/,h>/Z,KpX7+ }?8#j>jOmTeGȌOʬ3dX{ЗMWoA}5oQ_F}0QEQEQEQEQE^SӮl/#-nxfMnF0dҾ7q_Mk9L{nRE}^Gh_i$9g9ǽùԱv'lʴ9|]_MNiu;u{wV]동@ gԆ=)SZOcy ݳm#8=&?*RT*o6=*"5{O*%{-NMUڴ sccm,IM}> OO)8Pq;jy#h)Qdԫ# #z|GP5_54؊&M:;6:/'=3πq+KzĚl.i/򼍗<~RI^t cSwgT SS3>x/H~IeGn %b~p Ybi#׼?ỽj=*@ҡɒX R@9#r>] /"q^Ko%ܗydI,p<0)חpXY\^\ooK+$rx5E|ogIsKCHⳳ4.Q̈́GˍY|9\d  lEeemYii oD^S=-foSexn(XY,Wb-ώ1S/_u4YhAoɞHR2~TV sVZA.(̞mHnFnQ;2 g_{=ג_Q_L}PQEQEQEQEQETs ռG4I#C+ q>>*Ѥ(ueFN>V cr+ oR揺s yP?=~ٗpK㆏?39dw?u Ϣ͉Xk 6 uwdZ8 ,N$A>[_ĻDɒ28 ~E&B8卤ʷ< 5^;K_?_[ú:ʹKx[$$s2 +(c֥IBIؑlOO K+q¼\UwU~yEQ@Q@Q@<6\K0DF dOkYumNmj7z- pGrCaWfRHd5t$dԎrVnqw!kjQ\EO j[S[Hk)r&nb#8c1uGIcftp88RLW,ȧ0;hDQy$I$I$II?}?~_OͱƟ/?"Ji|Rw"5]݂,dy sRWGMErCh* Ȭu<Ȥ 1v (}p2WP+V/4GUbp{GmPUxI;Q_}F*F*QAEUQEQEQEQEQEQE?/,le8;$P''}q\ů 2gԴڅ\>xܽc,䙋~Fu!,aul58$9 =@|ƸA{҆e`쎤2#}Rg^/sPzNLiֺͲH>0KM XJʹzFOJދ%#dȿ 8yjWpXIZpz5>*YO ռW4x䍃+s_ڰdw{lS=p`03e}oi7yv<>vXrp_PHl0^jfXK{fG+ydvu v)8RpXb6Р7 k;ҩHOz-MkIh,:{lK{JiVTr&F(RƬ@.8C^a}oryQ$о7#T2\NpTM U*`S,V?5*>t9(fFfns eRyᵷX$/$0UE$xs\4r˫jskW1[i< ʼ+0jFS'f'Ko%ܗydI,p<0)חpXY\^\ooK+$rxj5mMm"!l#Țql=_o A1a(鷛y8DhSug*gRM3qUƇbX;B=(#H"EkE Y @6R&2"Ν˯QiPGQ=H` eyVU9S"@TP0Ma0DbQ*rU^3N}]XJ*i-AC=[QEwQEQEQEQEQEQEQEQEO|[+A&d= YҼ8zOwa n>q/$K&Ov{W*0_e7_ws9eui$K3p8^A?tWW2RF {/u0Hٹ3C`p7c~qVFb#Q^?WWqi5de匢a'quշ.-$ӥhv;A u1 cѕhbIMqhIV,^A.0 cf{zy#$K[Gy8|)&RrldSPA"( 74b$/!]4S{w  aӔ+"]<"˼ ˯QiPGQ=H` eyVU9S"@TP0ۑ`?&kQQEՅQ@Q@Q@Q@Q@Q@Q@Q@Q@|.e UI2KrYqd1+υ񇄯t_2G#yC?+3ex`qQD]z)$}| X{ZdXexgHfIUV)# , <4'Ut=_C4,yH#lrUw_GWБ&uݮ"09$`ޕ"l*StݾhiƦY^MXx8n9dh$Qq65Xn.xάXL5]I|Q^q{_E4S0 crCK91BWNcbҖ&6^糷 NEJgMȱzcvec<_գ$XH$ڭcxἲCJٮ$ʔxۻˑHd|wpx8ilvۣ;!K1ܒkg3Yվ}_ք yI!QDžEىSVo=GzqK7x0-0G65y~X n6]2t.rLy%# p3`jߢB0U?E#EY * ( ( ( ( ( ( ( ( ( (>yZV0$Vڃ\r񞮡c$^F|3ܶĺjɂ|2>[9?*VhJ28S1^oXmh >d_AzsͱО 'n;׵Wק ][0ir\ IXy𨣻1 ܐ+Er*.RKRŮ>GY֊b烯_tLφ|B躽J ؕx 2}E{&7<5jIis [3.; iѺ߼m#?' sGy&kn@=r p@=Xz1T葦 =%J D|Y跾}Ic[G '۔ Щg@9B/VZZӮ`#s7܃._뻞gYlO=_` "7e̥BW~ksl<2[&KGAJ@kռi?ӌYair=%8$P,<6UR@lg8⽦!($ qUE81__ZmׯŇaO/Ȓ(O`((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((aplpack/inst/src/tm1.jpg0000644000176200001440000000555513516603655014660 0ustar liggesusersJFIFC       C Kd"6!1A"Qa2q#$Brұ-!1AQaqb#2 ?R8{GְHB4fRNshTK Qik▖+و4(f&dmq7ZRtxhUsn"ɥ~(X1  }ٴv% DjDFmO,$>~I6)*J!I =E/k먯.A#jw-ե۲HKHeֿfJ0Us=*ۉ%@a#Êd]YO␪1F O?$" $!K8WN%9RNbA'QRGv7PPm+a'R5iE5Qnm Zr?YnޅղBݞl7iAdA^q<ZNP4 %Wr(l6*I^ טP|\|%3U_E:ncP0)@Z2VOQfBxꄍ:-aۡHooR6M$ Ea$A:W:G#JLԎ֑23U;Qq%*KOb)` z-re^Mqi'i`hԙ1cSBH +hN00I#ZKtvG'#MgPFPˑvgfWvVe---%R I@'GCRZp@b[PN9L+WܥƔ #p̢ JR$~#8CRuaܣ ծJ[~SuJI 9Qֵ܄pJړ8خsڲk*ƝhSJBqkGZJeL8}h Uk c'YWkd0lTU򠕕 hC來<D#:(qY}~ l,"rj룮hJx(qЎ.hn<9q]Lb(  Aùh֗ߜnBVI"?N=)V_RZLi@ǿDBpR96PPt֒:m/k{hKqJ}(_;PqlWc2CaR9QS=?B cПne֨S-l$r8VH83i U"9V݁Fa*O Hԫ @}ggI)߷±A폊jW~L7?#pî)  6DdGyRu-%`ARRn9^S3, *JN8gRKwh?k]O>J Fyg`I<nh~=h+>t[0Fy*O'>A5D&\(- @}O?D.!Y=|K.OEw\[uup sӊ}+DzڴÓPTE) @SYy`ޤ~Q٢-薒NAE갸xy!9JsDmw!;uyNV.Sݻjcuu梬v䖭ȪZ\R A+=ȩbYB8eTOc)MNZ!&ݨq)iD%I +#b2y>G51ih*zMdv  q+* iK=?$QͭOӸR~j=z"Y;>= fns<-readLines("sliderfns.rev") fns<-fns[grep("^slider.*function",fns)] sort(unique(sub("<-.*$","",fns))) @ \begin{verbatim} Wed Mar 25 10:12:18 2009 [1] "slider" "slider.bootstrap.lm.plot" [3] "slider.brush.pairs" "slider.brush.plot.xy" [5] "slider.density" "slider.hist" [7] "slider.lowess.plot" "slider.present.density" [9] "slider.show.density" "slider.show.norm" [11] "slider.show.normal.density" "slider.smooth.plot.ts" [13] "slider.split.plot.ts" "slider.trimmed.mean" [15] "slider.trimmed.mean.plus" "slider.trimmed.mean.simple" [17] "slider.xyz" "slider.zoom.plot.ts" \end{verbatim} @ \newpage @ The next subsections contain a sequence of screen shots showing the some of the slider functions in action. \subsection{[[slider.hist]]} @ [[slider.hist]] computes histograms. The number of classes is controlled by a slider. As a special feature [[slider.hist]] has a [[panel]] argument. This argument allows you to deliver a panel function which draws some additional plotting elements. In the following example [[panel]] is used to add a normal density curve as well as a \emph{rug}. <>= <> slider.hist(rivers,xlab="x",col="green",probability=TRUE, panel=function(x){ xx<-seq(min(x),max(x),length=100) yy<-dnorm(xx,mean(x),sd(x)) lines(xx,yy); rug(x); print(summary(yy)) } ) @ After moving the slider to position 17 the control widget looks like this: \begin{center} \includegraphics[width=4cm]{sliderhistwidget} \end{center} @ After releasing the mouse button the graphics device shows the following plot: @ \begin{center}\includegraphics[height=6cm]{p2008-Aug27-144152}\end{center} %

@ You see that the fit of the normal distribution is not very good. Perhaps an exponential distribution is a quite better model. Can you build a new call of [[slider.hist]] with a suitable exponential density curve? Hint: You have to exchange the line of code that computes the normal density values:\\ remove [[yy<-dnorm(xx,mean(x),sd(x))]] \\ write [[yy<-dexp(xx,1/mean(x))]]. \newpage @ \subsection{[[slider.density]]} [[slider.density]] computes density traces. The parameter [[width]] and the type of the kernel function are controlled by sliders. Like [[slider.hist]] the function [[slider.density]] has a panel argument to add further graphical elements. In the example [[slider.density]] a normal density curve and a rug are added by the [[panel]] function. @ <>= <> slider.density(log(rivers),xlab="rivers",col="red", panel=function(x){ xx<-seq(min(x),max(x),length=100) yy<-dnorm(xx,mean(x),sd(x)) lines(xx,yy); rug(x); print(summary(yy)) } ) @ If you want to select a width of 3 percent of the range of the data and a rectangular kernel the slider control widget must have the following apearance. With these settings the graph will be very shaky. @ \begin{center} \includegraphics[height=7cm]{p2008-Aug27-145612.ps} \showwidget{sliderdensitywidget.ps} \end{center} %

@ @ The parameter settings [["width=20"]], [["kernel=epanechnikov"]] result in a much smoother plot. @ \begin{center}\includegraphics[height=7cm]{p2008-Aug27-150508.ps} \showwidget{sliderdensitywidget2.ps} \end{center} %

@ \subsection{[[slider.brush.pairs]]} [[pairs()]] constructs a draftsman's display -- a set of two dimensional scatterplots. This function is really useful for data sets with 3 to 10 variables because dependencies between a pair of variables can be seen at once. However, sometimes it is very interesting to explore two dimensional dependencies of a subset of the data points that are defined by a third variable. This idea leads to the function [[slider.brush.pairs]] which computes a pairs plot and allows you to define an interval for the values of one variable. After changing the settings all data points of the visible interval are recolored using the color "red". <>= <> slider.brush.pairs(iris[,-4]) @ \begin{center}\includegraphics[height=7cm]{p171340-Jun-9.ps} ~~~~~\showwidget{sliderpairswidget.ps} \end{center} %

@ \subsection{[[slider.brush.plot.xy]]} The function [[slider.brush.plot.xy]] is a small version of [[slider.brush.pairs()]]. It is suitable for three dimensional data sets. [[slider.brush.plot.xy()]] computes a two dimensional scatterplot and chooses the color of the points conditional to a third variable. Therefore, you can start the exploration with [[slider.brush.pairs()]] and if you want to concentrate on one of the scatterplots --- e.~g.~for the purpose of presentation --- you can call [[slider.brush.plot.xy()]]. <>= <> slider.brush.plot.xy(iris[,1:3]) @ \begin{center}\includegraphics[height=7cm]{p172434-Jun-9.ps} \showwidget{sliderbrushplotwidget.ps} \end{center} %

@ \subsection{[[slider.split.plot.ts]]} Time series often have different structures in the distinct intervals. Then it may be interesting to inspect various subsets of the data. For comparing different intervals (in time) you can split the whole time series into pieces and fit linear regression models to the various regions. The function [[slider.split.plot.ts]] has been designed for doing this job. By sliders you are able to define a point on the time axis as well as the length of a time interval (strip). Then a time series plot of your data is computed and it is partitioned into stripes in a way that one limit between two strip is identical with the selected point. Furthermore, regression lines of fitted linear models are drawn within each of the intervals. Alternatively [[slider.split.plot.ts]] allows you to draw the main characteristics of the subsets of points. A mouse click on the button [[fivenum summary]] of the control widget will add graphical five number summaries of the data values of each region. <>= <> slider.split.plot.ts(as.vector(sunspots)[1:100]) @ \begin{center}\includegraphics[height=7cm]{p173657-Jun-9.ps} \showwidget{slidersplitwidget.ps} \end{center} %

@ \subsection{[[slider.zoom.plot.ts]]} Some time series are often very long. For inspection such a series you want to be able to view the data of selected intervals. [[slider.zoom.plot.ts]] enables you to choose two windows of the whole range of the data and the function computes two time series plots of the two sections. With this function it is easy to compare the structures of two different regions of a time series. <>= <> slider.zoom.plot.ts(as.vector(sunspots),2) @ \begin{center}\includegraphics[height=7cm]{p175158-Jun-9.ps} \showwidget{sliderzoomwidget.ps} \end{center} %

@ \subsection{[[slider.smooth.plot.ts]]} The function [[slider.smooth.plot.ts]] allows you to smooth a time series by running medians or some other operations which has been proposed by Tukey. The implementation is based on [[smooth()]] and the operation is applied by clicking one of the buttons of the control widget. <>= <> slider.smooth.plot.ts(rnorm(100)) @ \begin{center}\includegraphics[height=7cm]{p180443-Jun-9.ps} \bigskip \bigskip \showwidget{slidersmoothwidget}\end{center} %

@ \subsection{[[slider.lowess.plot]]} [[lowess()]] is an R function for analyzing the trend of points in a scatterplot. The smoothness of the computed line depends on a span parameter. Because of the algorithm is time consuming [[lowess]] has a parameter to fix the number of iterations to be done. The function [[slider.lowess.plot()]] computes a scatterplot of a data set and lets you select these two parameters by an control widget. <>= <> slider.lowess.plot(cars) @ \begin{center}\includegraphics[height=7cm]{p180705-Jun-9.ps} \showwidget{sliderlowesswidget} \end{center} %

@ @ \subsection{[[slider.bootstrap.lm.plot]]} Sometimes you have fitted a model curve on the base of a data set and you wonder how sensitive the result is against changes of the data. The function [[slider.bootstrap.lm.plot()]] draws a scatterplot containing the curve of a fitted model as well as some curves that have been computed on samples of the original data points. The user is allowed to select the degree of the polynom to be fitted, the number of bootstrap samples and the random seed. <>= <> daten<-iris[,2:3] slider.bootstrap.lm.plot(daten) @ \begin{center}\includegraphics[height=7cm]{p181236-Jun-9.ps} \showwidget{sliderbootwidget} \end{center} %

@ \newpage @ \section{General issues of the implementation} @ \subsection{The structure of slider functions} The last section discusses some slider functions and the reader has got examples of their application. Now we will explore the structure of the slider functions. All of them call the function [[slider]] to create and to control Tcl/TK widgets. The widgets consist of sliders and buttons that are linked to R functions describing the actions to be performed. To demonstrate the usage of [[slider]] within the slider functions we discuss some examples now. As a very simple one let us build a slider function that prints the trimmed mean of a data set depending on the trim fraction which is controlled by a slider. \subsubsection{A very simple example} In this paragraph we define the function [[slider.trimmed.mean.simple]]. It shows the usage of the function [[slider()]] for doing the jobs \begin{itemize} \item create a control widget with one slider \item define the effect or the action to be done in case of a slider movement \item link the slider with the action. \end{itemize} Before going into details activate the following code chunk, please. It will define the function [["slider.trimmed.mean.simple"]] and it will call the new function with the data set [["rivers[1:50]"]]: <>= slider.trimmed.mean.simple<-function(x) { # general initialisations if(missing(x)) return("Error: no data found!") # function to update result compute.trimmed.mean<-function(...){ # get slider alpha <- slider(no=1) # print result cat(paste("trim fraction",alpha,":",mean(x,trim=alpha),"\n")) } # definition of slider widget slider(compute.trimmed.mean,"trim fraction",0,0.5,0.01,0) # initial computation compute.trimmed.mean() } slider.trimmed.mean.simple(rivers[1:50]) @ Move the slider named [["trim fraction"]] and observe what happens! Now let's take a look at the definition of [[slider.trimmed.mean.simple]]. The function consists of four instructions: \begin{itemize} \item The first statement is an input check -- business as usual. \item The second one defines the effect of a movement of the slider in form of an \emph{action function} although the slider hasn't been defined yet. \item Then the function [[slider]] is called to build the control widget and the action function is passed by the first parameter. \item At last the action function is called and a trimmed mean will be printed. \end{itemize} You see [[slider.trimmed.mean.simple()]] mainly consists of the definition of the action function [[compute.trimmed.mean()]] and a call of [[slider()]]. [[compute.trimmed.mean()]] fulfills two tasks: fetching the actual value of the slider variable (trim fraction [[alpha]]) and printing the trimmed mean. [[slider(no=1)]] reads the value of slider number [["no=1"]] and then the value is assigned to the local variable [[alpha]]. The computation of the trimmed mean by [[mean()]] and its printing follows. \subsubsection{The main arguments of [[slider]]} A slider of a slider control widget is declared by six parameters. The meaning of them is found in following list. \begin{enumerate} \item [[sl.functions]]: an effect function which is called after moving the slider \item [[sl.names]]: a text for labeling the slider \item [[sl.mins]]: the minimum of the range of the slider \item [[sl.maxs]]: the maximum of the range of the slider \item [[sl.deltas]]: the increment of the scale of the slider \item [[sl.defaults]]: the default value of the slider \end{enumerate} These parameters are arguments of the function [[slider]]. The following example has the same structure as [[slider.trimmed.mean.simple()]]. However, the action function computes a plot and in the call of [[slider()]] the names of the formal parameters are used. <>= slider.trimmed.mean<-function(x) { # general initialisations if(missing(x)) return("Error: no data found!") # function to update plot refresh<-function(...){ # get slider alpha <- slider(no=1) # compute mean tm <- mean(x,trim=alpha); m <- mean(x) # construct plot plot(as.data.frame(x)) abline(v=tm,col="red") text(tm,1.1,adj=1,"trimmed mean",col="red") abline(v=m,col="black") text( m,0.9,adj=0,"mean") title(paste("trimmed mean:", format(tm,signif=4), "\ntrim fraction:",round(alpha*100),"%")) } # definition of slider widget slider(sl.functions=refresh, sl.names= "trim fraction", sl.mins= 0, sl.maxs= 0.5, sl.deltas= 0.01, sl.defaults= 0 ) # initial plot refresh() } slider.trimmed.mean(rivers[1:50]) @ \begin{center}\includegraphics[height=6cm]{p152540-Sep-2.ps}\end{center} %

@ @ It may be astonishing that the argument names are in plural form. This indicates that more than one slider can be defined in the same way. The following section will show you an example with two sliders. @ \subsubsection{Buttons and slider variables} The next version of the running example --- [[slider.trimmed.mean.plus()]] --- demonstrates how two sliders are implemented. To keeps things simple a second slider is defined. It allows the user to change the color of the plot. In addition three \emph{buttons} are generated to switch between three graphical representations of the data: dotplot, histogram or boxplot. The code is a little bit longer. However, we are shure that it isn't very difficult to understand it. <>= slider.trimmed.mean.plus<-function(x) { # general initialisations if(missing(x)) return("Error: no data found!") slider(obj.name="ptype",obj.value="hist") # function to update plot refresh<-function(...){ # get settings alpha <- slider(no=1) mycol <- slider(no=2) ptype <- slider(obj.name="ptype") # computation tm <- mean(x,trim=alpha); m <- mean(x) # construct high level plot if(ptype=="dotplot") plot(as.data.frame(x),col=mycol) if(ptype=="hist") hist(x,col=mycol) if(ptype=="boxplot") boxplot(x,col=mycol,horizontal=TRUE) # perform some lower level jobs abline(v=tm,col="red") text(tm,1.1,adj=1,"trimmed mean",col="red") abline(v=m,col="black") text( m,0.9,adj=0,"mean") title(paste("trimmed mean:", format(tm,signif=4), "\ntrim fraction:",round(alpha*100),"%")) } # three functions to react on buttons b1<-function(...){slider(obj.name="ptype",obj.value="dotplot");refresh()} b2<-function(...){slider(obj.name="ptype",obj.value="hist"); refresh()} b3<-function(...){slider(obj.name="ptype",obj.value="boxplot");refresh()} # definition of slider widget slider(sl.functions= refresh, sl.names= c("trim fraction","color"), sl.mins= c(0,1), sl.maxs= c(0.5,13), sl.deltas= c(0.01,1), sl.defaults= c(0,1), but.functions=c(b1,b2,b3), but.names= c("dotplot","histogram","boxplot") ) # initial plot refresh() } slider.trimmed.mean.plus(rivers[1:50]) @ \begin{center}\includegraphics[height=6cm]{p152654-Sep-2.ps} \showwidget{slidertrimhistwidget.ps} \end{center} % check %

@ @ In this example vectors of length two are assigned to the arguments [[sl.names]], [[sl.mins]], [[sl.maxs]], [[sl.deltas]], and [[sl.defaults]]. The first elements of the vectors describe the settings of the first slider whereas the second ones fix the parameters of the other slider. The buttons are implemented by a vector of threee names ([[but.names]]) and by a vector of three effect functions ([[but.functions]]). To handle the state of the selected plot type a slider variable ([[ptype]]) is created. During updating the plot the actual value of [[ptype]] is found by the statement [[slider(obj.name="ptype")]]. After changing [[ptype]] it is stored by statements like [[slider(obj.name="ptype", obj.value="dotplot")]]. In this example the effect functions of the buttons only consist of a statement to store the plot type and to update the plot by calling the effect function [[refresh()]]. In summary there is a simple structure for implementing sliders and buttons. Slider variables can be used to communicate states, values and other information. @ \subsection{General Rules} In the last section the reader learned the syntax of the function [[slider]] and he will be able to write slider function of his own. To achieve a similar structure of the slider functions introduced in this paper we propose some general rules now. \subsubsection{Names of the slider functions} The names of the slider functions of this paper always start with the character string [["slider"]] and end with a string indicating the job to be done, e.g. a statistical procedure or function like [[hist]], [[pairs]] or [[smooth]]. \subsubsection{Formal arguments for data sets} One dimensional data sets are passed to a [[slider*]] function by the argument [[x]]. If the data set is of two dimensions there are two types of calls: Either argument [[x]] is a matrix or a data frame with two columns or the argruments [[x]] and [[y]] are used for the first and the second variable. If [[x]] is a vector and [[y]] not available then [[x]] is used as the second dimension and [[seq(x)]] as the first one. Three dimensional data sets are managed in an analogous way: A $(n\times3)$-matrix has to be assigned to [[x]] or the arguments [[x]], [[y]] and [[z]] must be used. These rules enable us to write some general statements for checking and for preparation of some local variables containing the data. @ Checking the one dimensional case is simple. Besides [[x.name]] stores how the [[x]] argument has been assigned by the user. <>= x.name<-deparse(substitute(x)) if(missing(x)||length(x)<2) return("Error: x must be a vector") @ To check a two dimensional data input the two cases described above has to be handled. After checking the data are assigned to two local variables [[x]] and [[y]]. <>= x.name<-deparse(substitute(x)) y.name<-deparse(substitute(y)) if(length(x)<2) return("Error: x is of length 0 or 1") if(!is.null(y)){ if(length(y)<2) return("Error: y must be a vector") if(length(x)!=length(y)) return("Error: x and y must have the same length") x<-cbind(x,y) } if(!is.matrix(x) && !is.data.frame(x)){ x<-cbind(seq(x),x) y.name<-x.name; x.name<-"index" } if(is.null(y.name)){x.name<-colnames(x)[1]; y.name<-colnames(x)[2]} y<-x[,2]; x<-x[,1] @ In the case of three dimensions the arguments [[y]] and [[z]] are dealt like [[y]] in the two dimensional case. <2 columns>>= x.name<-deparse(substitute(x)) y.name<-deparse(substitute(y)) z.name<-deparse(substitute(z)) if(length(x)<2) return("Error: x is of length 0 or 1") if(!is.null(y)){ if(length(y)<2) return("Error: y must be a vector") if(length(x)!=length(y)) return("Error: x and y must have the same length") x<-cbind(x,y) } if(!is.null(z)){ if(length(z)<2) return("Error: z must be a vector") if(length(x)!=length(z)) return("Error: x and z must have the same length") x<-cbind(x,z) } if(!is.matrix(x)&& !is.data.frame(x) && ncol(x)<3) return("Error: not enough variables") if("NULL"==y.name){x.name<-colnames(x)[1]; y.name<-colnames(x)[2]} if("NULL"==z.name){x.name<-colnames(x)[1]; z.name<-colnames(x)[3]} z<-x[,3]; y<-x[,2]; x<-x[,1] @ Time series are different from a one dimensional data set because data points are connected with times. Therefore, we need a code chunk for checking time series. <>= x.name<-deparse(substitute(x)) if(missing(x)||length(x)<2) return("Error: x must be a vector") y<-x; if(is.ts(x)) { x<-time(x) } else { x<-seq(x) } @ \subsubsection{Passing additional arguments} Remark: This section should be skipped during the first reading of the text! You know that high level plotting function have the formal parameter [["..."]]. This argument allows the user to pass additional settings to the graphics device. At once the question arises: Can we manage to pass such arguments to plotting functions that are called by a slider function? For example: a histogram is computed in the [[refresh]] function and the user wants to produce \emph{green} bars. There are different answers to tackle this problem. At first you can consider which of the graphics parameters are relevant to be set by the user. Then we can introduce these parameter in the header of a slider function. But the list of parameters will be very long because the user may be want to modify attributes of scale, point size, type, color, etc. A second way is to define a [["..."]] argument for passing additional parameters. \begin{verbatim} slider.xyz<-function(x,...) \end{verbatim} @ But there will be some difficulties to be managed if you use the [["..."]] construction. How do we handle the [["..."]] argument, how do we set default values for some parameter and how can we remove parameters that must not be changed at all? In the initialization part of the [[slider.*]] functions it is possible to modify the list of the additional arguments. To demonstrate this step we show how you can remove a [[breaks]] argument and then append a [["main"]] argument. If [[main]] is not available it is set to [[x.name]] . (Cleary there is no graphics parameter with name [[breaks]] but users used to set breaks in their calls of [[hist]] may try to deliver a [[breaks]] argument.) <>= args<-list(...) args<-args[names(args)!="breaks"] # remove "breaks" if(!any("main"==names(args))) # set default "main" args<-c(args,list(main=x.name)) @ Now the argument list [[args]] has to be passed to the function [[hist]] within the action or refresh function. Writing [[hist(x,args)]] doesn't work because the second argument of [[hist]] is the [[break]] argument and not a slot for further arguments. The second idea will be to use the [["..."]] of [[hist]]: [[hist(x,...=args)]]. But the [["..."]] argument of [[hist]] is passed to the functions [[title]] and [[axis]] and so we don't get green bars at all. Our answer to this problem is to describe the call by its elements: the function [[hist]] should be called with the argument list consisting of the additional arguments stored in [[args]] and other arguments specifying the data set and the breaks, for example. Then the function [[do.call]] is called with theses elements. Keep in mind that [[do.call]] needs the arguments as an [[alist]]. To summarize the following construction will work and is used in the function [[slider.hist]]: <>= slider.xyz<-function(x,...) { <> args<-list(...) args<-args[names(args)!="breaks"] # remove "breaks" if(!any("main"==names(args))) # set default "main" args<-c(args,list(main=x.name)) <> refresh<-function(...){ <> do.call("hist",c(alist(x=x,breaks=breaks),args)) <> } <> } @ Before we close this section we will present a further proposal to deal with the arguments. In the game there are four sets of information: \begin{itemize} \item the set of default settings coded in the slider function \item the set of additional parameters defined by the user \item the set of forbidden arguments that must not be used \item the set of important settings that must not be changed by the user \end{itemize} We can save these sets on suitable list objects: <<*>>= # defaults (these are allowed to be changed by users) defaults<-list(main=x.name) # graphics parameter of the user args<-list(...) # forbidden (these must not be passed to a slider function) set.of.forbidden.args<-list(probability=TRUE) # important (these are passed and must not to be changed by users) important<-alist(bty="n",sub="graphics computed by slider") @ Now the sets have to be combined. At first we remove the forbidden elements from the argument list of the user. Then we concatenate the important ones, the user arguments and the default settings. Finally, we remove elements whose names occur on the list earlier. <<*>>= # remove not allowed args<-args[!names(args) %in% set.of.forbidden.args] # set of all parameters defaults<-c(important,args,defaults) # removing of double ones args<-defaults[unique(names(defaults))] @ The refresh function has a very simple structure now. <<*>>= refresh<-function(...){ xrange<-range(x); num<-slider(no=1) breaks<-seq(xrange[1],xrange[2],length=num+1) do.call("hist",c(alist(x=x,breaks=breaks),args )) panel(x) } @ In the following we have not implemented these ideas completely. Sometimes we pass [[...]] arguments without further checks. @ \subsection{Density Presenter} In this paragraph we discuss some tools for plotting densities of distributions. The parameters of the distribution are controlled by sliders. These functions allow the user to study how the shapes of the densities depend on the parameter settings. It is a very easy exercise to find an implementation for a special distribution, e.g., the normal distribution. <>= slider.show.normal.density<-function(name,...) { x<-seq(-10,10,length=200) args<-list(...) refresh<-function(...){ par1<-slider(no=1); par2<-slider(no=2) f.x<-dnorm(x,par1,par2) main=paste("normal distribution\n", "E(X) =",format(par1,digits=3), ", sd(X) =",format(par2,digits=3)) # plot(x,f.x,type="l",main=main) do.call("plot",c(alist(x=x,y=f.x,type="l",main=main),args)) } slider(refresh, c("expectation","standard deviation"), c(-20,.001),c(20,20),c(.1,.1),c(0.1,1) ) refresh() cat("use slider to select parameters!\n") } @ Here comes a check. <<*>>= <> slider.show.normal.density(col="red",bty="n") @ A more interesting idea is to write a function that operates as a general presenter. The function [[slider.show.density()]] shows the shapes of the densities of various distributions. After the user has collected some experiences she or he will like to write a improved version. Before you start programming your own presenter analyze the following function: <>= slider.show.density<-function( distribution="norm", mins=c(-100,-100,-50,.001), maxs=c(100,100,50,100), deltas=c(1,1,.1,.1), defaults=c(-5,5,0,1),type="l",...) { args<-list(...) refresh<-function(...){ lim1<-slider(no=1); lim2<-slider(no=2) par1<-slider(no=3); par2<-slider(no=4) x<-seq(min(lim1,lim2),max(lim1,lim2),length=200) ddist<-paste("d",distribution,sep="") f.x<-do.call(ddist,alist(x=x,par1,par2)) main=paste("distribution:",distribution,"\n", "parameter 1: ",format(par1,digits=3), ", parameter 2: =",format(par2,digits=3)) # plot(x,f.x,type=type,main=main) do.call("plot",c(alist(x=x,y=f.x,type=type,main=main),args)) } slider(refresh, c("x limit (min)","x limit (max)", "parameter 1","parameter 2")[1:length(mins)], mins,maxs,deltas,defaults) refresh() cat("use sliders to select parameters!\n") } @ Here are a few examples to show that the idea works: \begin{itemize} \item gamma distribution <>= slider.show.density("gamma",mins=c(0,0,.01,.01), maxs=c(100,100,50,50), deltas=c(.1,.1,.01,.01), defaults=c(0,10,4,1), bty="n") @ \item beta distribution <>= slider.show.density("beta",mins=c(0,0,0,0), maxs=c(1,1,10,10), deltas=c(.1,.1,.01,.01), defaults=c(0,1,1,1),col="blue") @ \item binomial distribution <>= slider.show.density("binom",mins=c(0,0,1,0), maxs=c(100,100,100,1), deltas=c(1,1,1,.01), defaults=c(0,20,5,0.5),type="h") @ \item Poisson distribution <>= slider.show.density("pois",mins=c(0,0,.01), maxs=c(100,100,50), deltas=c(1,1,.1), defaults=c(0,20,5),type="h") @ \end{itemize} The different presenter functions could be collected in central function. <<*>>= slider.present.density<-function() { <> f0<- <> f1<- function(...){ <> } f2<- function(...){ <> } f3<- function(...){ <> } f4<- function(...){ <> } slider(but.functions=c(f0,f1,f2,f3,f4), but.names=c("show NORMAL","show GAMMA","show BETA", "show BINOMIAL","show POISSON")) } slider.present.density() @ Now the reader is prepared to take a further look at the implementations of the slider functions of this paper. @ \section{Histograms and Density Traces} \subsection{Class number of histograms -- [[slider.hist]]} In this section we propose a function which allows you to study the effect of the number of classes on the shape of a histogram. For this purpose a widget with a slider controlling the number of classes is opened and a histogram is computed. %nstructed in the graphics device. By moving the slider the user changes the number of classes and the histogram is redrawn. The implementation uses two special features: 1.) Sometimes we want to add further graphical elements like a density curve to the histogram. For this job [[slider.hist]] has a slot to deliver a \emph{panel} function. This panel function will be called after updating the histogram. 2.) Additional graphics parameter can be transfered by the [["..."]] argument of [[slider.hist]] to the call of [[hist]] which constructs the histogram. @ Remarks: The default number of breaks is computed by [[hist]]. If a [[breaks]] argument is found in the call of [[slider.hist]] it will be removed. <>= slider.hist<-function(x,panel=rug,...) { <> args<-list(...) args<-args[names(args)!="breaks"] ClassNumber<-length(hist(x,plot=FALSE)$breaks) if(!any("main"==names(args)))args<-c(args,list(main=x.name)) refresh<-function(...){ xrange<-range(x); num<-slider(no=1) breaks<-seq(xrange[1],xrange[2],length=num+1) do.call("hist",c(alist(x=x,breaks=breaks),args)) panel(x) } slider(refresh,"ClassNumber",1,100,1,ClassNumber); refresh() "use slider to select number of classes" } @ \subsubsection{Test} %In this section we will test the function just defined. Here is a check to test whether we can change the color. <>= <> slider.hist(log(islands),col="green") @ To test the panel feature we add a normal density curve to the histogram. <>= <> slider.hist(rivers,xlab="RIVERS",col="red",probability=TRUE, pa=function(x){ xx<-seq(min(x),max(x),length=100) yy<-dnorm(xx,mean(x),sd(x)) lines(xx,yy); rug(x); print(summary(yy)) } ) @ \subsection{Width and kernel of a density trace -- [[slider.density]]} The main parameters of density traces are width and kernel type. In the function [[slider.density()]] both of them are selected by sliders. The alternative idea to implement the selection of the kernel function by buttons would have required seven buttons. Therefore, a slider solution seems to be a little bit smarter. To be able to add further graphical elements a panel function has been included. Technical Remarks: 1.) The kernel type is stored in the slider variable [[kno]]. 2.) In [[slider.density()]] we have two different effect functions where the second one [[set.kernel()]] calls the first slider function ([[refresh()]]). <>= slider.density<-function(x,panel=rug,...) { <> args<-list(...) if(!any("main"==names(args))) args<-c(args,list(main=x.name)) kernel<-c("gaussian", "epanechnikov","rectangular", "triangular","biweight", "cosine", "optcosine") slider(obj.name="kno",obj.value=1) refresh<-function(...){ width<-slider(no=1)*diff(range(x))/100 kno<-slider(obj.name="kno"); kernel<-kernel[kno] xy<-density(x,width=width,kernel=kernel) do.call("plot",c(alist(x=xy),args)) title(paste("\n\nwidth =",signif(width,4),", kernel =",kernel)) panel(x) } set.kernel<-function(...){ kernel<-slider(no=2) slider(obj.name="kno",obj.value=kernel) refresh() } bw.default<-diff(range(x))/density(x)$bw nt <- slider(c(refresh,set.kernel), c("width (% of range)","kernel"), c(.1,1),c(100,7),c(.1,1),c(bw.default,1) ) # tkwm.minsize(nt, "300", "110") # set width, height to prevent to small sizes refresh() cat("use slider to select width of window and to select kernel:\n") print(cbind("no"=1:7,"kernel"=kernel)) } @ \subsubsection{Test} At first we test [[slider.density]] without a panel function. <>= <> slider.density(rivers,xlab="RIVERS",col="red") @ Now we test a call of [[slider.density]] with a panel function to plot a fitted normal density curve. <>= <> slider.density(log(rivers),xlab="rivers",col="red", panel=function(x){ xx<-seq(min(x),max(x),length=100) yy<-dnorm(xx,mean(x),sd(x)) lines(xx,yy); rug(x); print(summary(yy)) } ) @ \subsubsection{Help Page} %% [[prompt(slider.hist)]] <>= \name{slider.hist} \title{interactive histogram and density traces} \alias{slider.hist} \alias{slider.density} \description{ The functions \code{slider.hist} and \code{slider.density} compute histograms and density traces whereas some parameter are controlled by sliders. \code{slider.hist} computes a histogram; the number of classes is defined by a slider. \code{slider.density} computes a density trace; width and type of the kernel are defined by sliders. } \usage{ slider.hist(x, panel, ...) slider.density(x, panel, ...) } \arguments{ \item{x}{ data set to be used for plotting } \item{panel}{ function constructing additional graphical elements to the plot} \item{\dots}{ additional (graphics) parameters which are passed to the invoked high level plotting function } } \details{ \code{slider.hist} draws a histogram of the data set \code{x} by calling \code{hist} and opens a Tcl/Tk widget with one slider. The slider defines the number of classes of the histogram. Changing the slider results in redrawing of the plot. For further details see the help page of \code{hist}. \code{rug} is used as the default panel function. \code{slider.density} draws a density trace of the data set \code{x} by \code{plot(density(...))} and opens a Tcl/Tk-widget with two sliders. The first slider defines the width of the density trace and the second one the kernel function: \code{"1-gaussian", "2-epanechnikov", "3-rectangular", "4-triangular","5-biweight", "6-cosine", "7-optcosine"} Changing one of the sliders results in a redrawing of the plot. For further details see the help page of \code{density}. \code{rug} is used as the default panel function. } \value{ a message about the usage } \references{ ~~ } \author{ Hans Peter Wolf } \seealso{ \code{\link{hist}}, \code{slider}} \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.hist(log(islands)) } \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.density(rivers,xlab="rivers",col="red") } \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.density(log(rivers),xlab="rivers",col="red", panel=function(x){ xx<-seq(min(x),max(x),length=100) yy<-dnorm(xx,mean(x),sd(x)) lines(xx,yy) rug(x) print(summary(yy)) } ) } } \keyword{ univar } \keyword{ iplot } @ \section{Brushing Functions} % see also tkBrush in: The TeachingDemos (Greg Snow) \subsection{A draftsman's display with Brushing -- [[slider.brush.pairs]]} A draftsman's display is a nice graphics to show two dimensional dependencies of the variables of a multivariate data set. Brushing allows you to mark a subset of the data points. The subset of the points is defined by the condition that the coordinate of a selected variable has to lie within a fixed interval. By the function [[slider.brush.pairs()]] the user can select a variable (dimension) as well as an interval for recoloring the points satisfying a condition with color [["red"]]. The function [[pairs()]] is not used in the refresh function avoiding computational overhead. So the complexity of code is mostly caused by constructing the plot. <>= slider.brush.pairs<-function(x,...) { args<-list(...) <> # preparation of data m<-dim(x)[2]; for(j in 1:m) x[,j]<-as.numeric(x[,j]) mins<-apply(x,2,min); maxs<-apply(x,2,max) delta<-(maxs-mins)/100 # initial plot varnames<-paste("var ",1:m,": ",colnames(x),sep="") dev.new(); par(mfrow=c(m,m),oma=c(0,0,0,0),mai=c(0,0,0,0),...) usr.array<-array(0,c(m,m,4)); axes<-FALSE for(i in 1:m){ for(j in 1:m){ # plot(x[,j],x[,i],axes=axes,type="p") do.call("plot",c(alist(x=x[,j],y=x[,i],type="p",axes=axes,xlab="",ylab=""),args)) usr.array[i,j,] <- usr<-par()$usr if(i==j) text(usr[1],usr[4],varnames[i],adj=c(0,1),cex=5) rect(usr[1],usr[3],usr[2],usr[4]) } } # update function refresh<-function(...){ vmin<-slider(no=1)/100; vmax<-vmin+slider(no=2)/100 vno <-slider(no=3) vmin<-mins[vno]*(1-vmin)+maxs[vno]*(vmin) vmax<-mins[vno]*(1-vmax)+maxs[vno]*(vmax) ind <-vmin<=x[,vno] & x[,vno]<=vmax for(i in 1:m){ for(j in 1:m){ par(mfg=c(i,j),usr=usr.array[i,j,]) points(x[ ,j],x[ ,i],col=0,cex=2,pch=19) points(x[ ind,j],x[ ind,i],col="red",pch=1) points(x[!ind,j],x[!ind,i],col="blue",pch=19) } } } # slider definition nt <- slider(refresh, c("lower limit (% of range)","width (% of range)", paste("variable no: 1 ..",m)), c(0,0,1), c(100,100, m), c(1,1,1), c(0,30,1) ) # tkwm.minsize(nt, "450", "150") # set width, height to prevent to small sizes refresh() cat("use sliders to select variable and interval width\n") } @ \subsubsection{Test} We will use the famous [[iris]] data to test the brushing function. <>= <> usr.array<-slider.brush.pairs(iris,cex=.2) @ \subsection{Scatter plot brushing -- [[slider.brush.plot.xy]]} The function [[slider.brush.plot.xy()]] computes an xy-plot and recolors a data point [["red"]] if the value of its third variable is in the fixed interval. <>= slider.brush.plot.xy<-function(x,y=NULL,z=NULL,...) { <2 columns>> args<-list(...) if(!any("main"==names(args))) args<-c(args,list(main=paste(x.name,"<-->",y.name))) if(!any("xlab"==names(args)))args<-c(args,list(xlab=x.name)) if(!any("ylab"==names(args)))args<-c(args,list(ylab=y.name)) do.call("plot.default",c(alist(x=x,y=y,pch=19),args)) refresh<-function(...){ zrange<-range(z); z1<-slider(no=1); z2<-slider(no=2) zmin<-z1; zmax<-z1+z2; ind<-zmin<=z&z<=zmax; pos<-par()$usr rect(pos[2],pos[4],pos[1]*.5+pos[2]*.5,pos[3]*.1+pos[4]*.9, col="white",border=NA) txt<-paste(z.name,"(red) in [",format(zmin,digits=4),",", format(zmax,digits=4),"]",sep="") text(pos[2],pos[4],txt,adj=c(1,1),col="red",cex=0.7) col<-c("black","red")[1+ind] points(x,y,col=col,pch=19, cex=if("cex" %in% names(args)) args$cex else 1) } z.min<-min(z); z.max<-max(z); delta<-(z.max-z.min)/100 reset<-function(...){ do.call("plot",c(alist(x=x,y=y,col="red",pch=19),args)); pos<-par()$usr #090216 rect(pos[2],pos[4],pos[1]*.4+pos[2]*.6,pos[3]*.1+pos[4]*.9, col="white",border=NA) } slider(refresh, c("minimum of z","interval width of z"), c(z.min,0),c(z.max+delta,(z.max-z.min)+delta), c(delta,delta),c(z.min-delta,(z.max-z.min)/2), reset.function=reset ) refresh() cat("use sliders to select interval for inking points\n") } @ \subsubsection{Test} <>= <> # data<-matrix(rnorm(900), 300,3) # slider.brush.plot.xy(data[,1],data[,2],sqrt(data[,1]^2+data[,2]^2), # main="hallo") # slider.brush.plot.xy(iris[,1],iris[,2],iris[,3]) slider.brush.plot.xy(iris[,1:3],cex=1.5) @ \subsubsection{Help Page} <>= \name{slider.brush} \title{interactive brushing functions} \alias{slider.brush.pairs} \alias{slider.brush.plot.xy} \description{ These functions compute a pairs plot or a simple xy-plot and open a slider control widget for brushing. \code{slider.brush.pairs} computes a pairs plot; the user defines an interval for one of the variables and in effect all data points in this interval will be recolored. \code{slider.brush.plot.xy} computes an xy-plot; the user defines a interval for a third variable \code{z} and all points \code{(x,y)} will be recolored red if the \code{z} value is in the interval. } \usage{ slider.brush.pairs(x, ...) slider.brush.plot.xy(x, y, z, ...) } \arguments{ \item{\dots}{ new settings for global graphics parameters } \item{x}{ matrix or data frame or vector } \item{y}{ vector of y values if \code{x} is not a matrix } \item{z}{ vector of z values if \code{x} is not a matrix } } \details{ \code{slider.brush.pairs} draws a pairs plot of the data set \code{x}. The first slider defines the lower limit of the interval and the second its width. By the third slider a variable is selected. All data points for which the selected variable is in the interval are recolored red. \code{slider.brush.plot.xy} draws an xy-plot of the data set \code{x}. The first slider defines the lower limit of the interval of z values and the second one its width. All data points for which the variable z is in the interval are recolored red. } \value{ a message about the usage } \references{ W. S. Cleveland, R. A. Becker, and G. Weil. The Use of Brushing and Rotation for Data Analysis. InW. S. Cleveland and M. E. McGill, editors, Dynamic Graphics for Statistics. Wadsworth and Brooks/Cole, Pacific Grove, CA, 1988. } \author{ Hans Peter Wolf } \seealso{ \code{\link{pairs}}, \code{\link{plot}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.brush.pairs(iris) } \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.brush.plot.xy(iris[,1:3]) } } \keyword{ iplot } @ \section{Time Series Plots} \subsection{Splitted time series -- [[slider.split.plot.ts]]} Often there is a periodical structure in time series of a fixed period. Then you will like to have a tool to separate and compare the sections defined by the season. The function [[slider.split.plot.ts]] lets you select the length of a saison and one of the limits between two saisons. Then in the time series plot [[fivenum]] summary statistics or a regression lines are added to each of the sections. <>= slider.split.plot.ts<-function(x,type="l",...) { <> args<-list(...) n<-length(x); xmin<-min(x); xmax<-max(x) xdelta<-xmax-xmin slider(obj.name="summary.type",obj.value="linear") refresh<-function(...){ # initialization summary.type<-slider(obj.name="summary.type") width<-slider(no=1) limit<-slider(no=2) n.sec<-1 limit<-limit-width*ceiling((limit-xmin)/width) # plot: # plot(x,y,type=type,bty="n",xlab="",ylab="") do.call("plot",c(alist(x,y,type=type),args)) limit<-limit-width-width/n.sec; j<-0 # abline(v=limits,lwd=0.5,lty=3) while(limit>= <> slider.split.plot.ts(co2,col="red",main="co2") @ \subsubsection{Help Page} <>= \name{slider.split.plot.ts} \title{interactive splitting of time series} \alias{slider.split.plot.ts} \description{ \code{slider.split.plot.ts} plots linear fitted lines or summary statistics in sections of a time series. The sections are controlled by sliders. } \usage{ slider.split.plot.ts(x, type="l", ...) } \arguments{ \item{x}{ time series or vector} \item{type}{ plotting type: \code{type} will be forwarded to function \code{plot}} \item{\dots}{ additional graphics parameters } } \details{ \code{slider.split.plot.ts} draws a time series plot and let you define sections of the series by fixing a limit on the time scale as well as a window width. The whole range of the series is partitioned in pieces of the same length in a way that the fixed limit will be one of the section limits. Then linear models are fitted and plotted in the sections. Alternatively -- by pressing the button \code{fivenum summary} -- summary statistics are drawn instead of the model lines. The first slider fixes the width of the sections and the second one the limit between two of them. By clicking on button \code{linear model} or \code{fivenum summary} the user switches between drawing model curves and five number summary. } \value{ a message about the usage } \author{ Hans Peter Wolf } \seealso{ \code{\link{plot}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.split.plot.ts(as.vector(sunspots)[1:100]) } } \keyword{ iplot } @ \subsection{Zooming in Time Series -- [[slider.zoom.plot.ts]]} Some times time series happen to be very long --- for example [[sunspots]] has a length of 2820. For exploring a section of a series it is helpful to have a zooming function. The function [[slider.zoom.plot.ts]] allows you to define a time window interactively and it computes a time series plot of the selected region. As a second feature the function extracts the data of two windows and computes two time series plots one below the other. With this feature you are able to compare different regions of the series by eye. <>= slider.zoom.plot.ts<-function(x,n.windows=1,...) { <> args<-list(...) tmin<-1; tmax<-length(x) refresh<-function(...){ # initialization width <- slider(no=1); tstart1 <- slider(no=2); tend1 <- width+tstart1 if(n.windows>1){ tstart2 <- slider(no=3); tend2 <- width+tstart2 } # plot par(mfrow=c(2+(n.windows>1),1),mai=c(.5,0.5,.1,0)) # plot(x,y,type="l",bty="n",xlab="",ylab="") do.call("plot",c(alist(x,y,type="l",bty="n"),args)) abline(v=c(x[tstart1],x[tend1]),col="red") lines(x[tstart1:tend1],y[tstart1:tend1],col="red",lty=2) if(n.windows>1){ abline(v=c(x[tstart2],x[tend2]),col="blue") lines(x[tstart2:tend2],y[tstart2:tend2],col="blue",lty=3) } usr<-par()$usr ind<-tstart1:tend1 plot(x[ind],y[ind],type="b",col="red",bty="n", # ylim=usr[3:4], xlim=c(x[tstart1],x[tstart1]+width*diff(x[1:2]))) if(n.windows>1){ ind<-tstart2:tend2 plot(x[ind],y[ind],type="b",col="blue",bty="n", # ylim=usr[3:4], xlim=c(x[tstart2],x[tstart2]+width*diff(x[1:2]))) } par(mfrow=c(1,1)) } if(n.windows<2){ slider(refresh,c("width of window","start of window"), c(1,1),c(tmax,tmax),c(1,1),c(ceiling(tmax/4),1)) }else{ slider(refresh, c("width of window","start window 1","start window 2"), c(1,1,1),c(tmax,tmax,tmax),c(1,1,1),c(ceiling(tmax/4),1,ceiling(tmax/2))) } refresh() cat("select window and look at time series!\n") } @ \subsubsection{Test} The first test will be done with [[co2]]. <>= <> slider.zoom.plot.ts(co2,2,main="co2") @ For comparing two sections of a series take a look at [[sunspots]]. <>= <> slider.zoom.plot.ts(sunspots,2) @ \subsubsection{Help Page} <>= \name{slider.zoom.plot.ts} \title{interactive zooming of time series} \alias{slider.zoom.plot.ts} \description{ This function shows one or two sections of a time series. The window(s) is (are) controlled by sliders. } \usage{ slider.zoom.plot.ts(x, n.windows, ...) } \arguments{ \item{x}{ time series } \item{n.windows}{ \code{if(n.windows>1} two sections are defined } \item{\dots}{ additional graphical parameters } } \details{ \code{slider.zoom.plot.ts} plots the original time series and it lets you select one or two sections of the series by fixing the width(s) and the starting point(s) of the region(s). Then the section(s) of the series is (are) plotted separately one below the other. The first slider defines the width of the section(s). The second (third) one sets the start of the first (second) section. } \value{ a message about the usage } \author{ Hans Peter Wolf } \seealso{ \code{\link{plot}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.zoom.plot.ts(co2,2) } } \keyword{ iplot } @ \subsection{Smoothing Time Series -- [[slider.smooth.plot.ts]]} Tukey has proposed a set of smoothing operations for time series. Some of them are implemented by the function [[smooth()]]. [[slider.smooth.plot.ts]] supports the user to find the suitable combination of smoothing operations. Interactively he is able to smooth a time series step by step. The filter that should be used in the next step is selected by Tcl/Tk control panel. <>= slider.smooth.plot.ts<-function(x,...) { <> t.x<-x; x<-y args<-list(...) kind<-c("3RS3R", "3RSS", "3RSR", "3R", "3", "S") slider(obj.name="nts",obj.value=x) slider(obj.name="kind",obj.value="3") slider(obj.name="history.kind",obj.value="") refresh<-function(...){ # initialization choice<-slider(obj.name="kind"); print(choice) history.kind<-slider(obj.name="history.kind") history.kind<-c(history.kind,choice) slider(obj.name="history.kind",obj.value=history.kind) xx<-slider(obj.name="nts") xx<-smooth(xx,kind=choice) # plot(t.x,x,type="l",lty=3,bty="n",xlab="",ylab="") do.call("plot",c(alist(t.x,x,type="l",lty=3,bty="n"),args)) title(paste(history.kind,collapse="->")) points(t.x,xx,type="l",col="red") # lty=1+which(choice==kind)) slider(obj.name="nts",obj.value=xx) } reset<-function(...){ slider(obj.name="nts",obj.value=x) slider(obj.name="kind",obj.value="3") slider(obj.name="history.kind",obj.value="") refresh() } f1<-function(...){slider(obj.name="kind",obj.value="3RS3R");refresh()} f2<-function(...){slider(obj.name="kind",obj.value="3RSS"); refresh()} f3<-function(...){slider(obj.name="kind",obj.value="3RSR"); refresh()} f4<-function(...){slider(obj.name="kind",obj.value="3R"); refresh()} f5<-function(...){slider(obj.name="kind",obj.value="3"); refresh()} f6<-function(...){slider(obj.name="kind",obj.value="S"); refresh()} refresh() slider(but.functions=c(f1,f2,f3,f4,f5,f6), but.names=kind,reset.function=reset) cat("select type of smoothing a la Tukey and look the result!\n") } @ \subsubsection{Test} For testing we use some random numbers. <>= <> slider.smooth.plot.ts(rnorm(100),main="\nrandom",col="blue") @ \subsubsection{Help Page} <>= \name{slider.smooth.plot.ts} \title{interactive Tukey smoothing} \alias{slider.smooth.plot.ts} \description{ \code{slider.smooth.plot.ts} computes smooth curves of a time series plot by Tukey's smoothers. The kind of smoothing is controlled by a Tcl/Tk widget. } \usage{ slider.smooth.plot.ts(x, ...) } \arguments{ \item{x}{ time series } \item{\dots}{ additional graphical parameters } } \details{ \code{slider.smooth.plot.ts} draws the time series \code{x}. The user selects a filter of the set \code{c("3RS3R", "3RSS", "3RSR", "3R", "3", "S")} step by step and the resulting curve is added to the plot. The selection is performed by pressing a button of the control widget of \code{slider.smooth.plot.ts}. The button \code{reset} restarts the smoothing process. } \value{ a message about the usage } \references{ Tukey, J. W. (1977). Exploratory Data Analysis, Reading Massachusetts: Addison-Wesley. } \author{ Hans Peter Wolf } \seealso{ \code{\link{plot}}, \code{\link{smooth}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.smooth.plot.ts(rnorm(100)) } } \keyword{ iplot } @ \section{Regression} @ \subsection{Smoothing by lowess -- [[slider.lowess.plot]]} The result of the lowess smoother heavily depends on the setting of the parameter [[f]]. This parameter controls the smoother span and has to be fixed by the user. The function [[slider.lowess.plot]] allows the user to select the span and to observe the corresponding line. Furthermore, the number of iterations are set interactively. <>= slider.lowess.plot<-function(x,y=NULL,...) { # slider function to draw lowess smoother, pwolf 080525 <> args<-list(...) refresh<-function(...){ f<-slider(no=1) iter<-slider(no=2) xy<-lowess(x,y,f=f,iter=iter) # plot(x,y,bty="n") do.call("plot",c(alist(x,y,bty="n"),args)) lines(xy) title(paste("\n\nlowess: f =",signif(f,4),", iterations =",iter)) lines(xy) } slider(refresh, c("smoother span","iterations"), c(.01,1),c(1,7),c(.01,1),c(2/3,3) ) refresh() cat("use slider to select smoother span!\n") } @ \subsubsection{Test} <>= <> slider.lowess.plot(cars,col="red") @ \subsubsection{Help Page} <>= \name{slider.lowess.plot} \title{interactive lowess smoothing} \alias{slider.lowess.plot} \description{ \code{slider.lowess.plot} computes an xy-plot of the data and adds LOWESS lines. The smoother span and the number of iterations are selected by sliders. } \usage{ slider.lowess.plot(x, y, ...) } \arguments{ \item{x}{ data set to be used for plotting or vector of x values } \item{y}{ vector of y values in case \code{x} is not a matrix } \item{\dots}{ additional (graphics) parameter settings } } \details{ \code{slider.lowess.plot} computes a scatterplot of the data. Then a LOWESS smoother line is added to the plot. For more details about the lowess parameters \code{f} and \code{iter} take a look at the help page of \code{lowess}. The parameters are set by moving sliders of the control widget. The first slider defines the smoother span \code{f} and the second one the number of iterations. } \value{ a message about the usage } \references{ for references see help file of \code{lowess} } \author{ Hans Peter Wolf } \seealso{ \code{\link{lowess}}, \code{slider} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session slider.lowess.plot(cars) } } \keyword{ iplot } @ \subsection{Sensitivity of Regression Line -- [[slider.bootstrap.lm.plot]]} To understand the senitivity of a regression curve the function [[slider.bootstrap.lm.plot]] shows the user a lot of bootstrap regression lines computed on samples of the data points. The number of repetitions, the random seed and the polynomial degree is controlled by sliders. <>= slider.bootstrap.lm.plot<-function(x,y=NULL,...) { <> args<-list(...) n<-length(x) ind<-order(x); x.orig<-x<-x[ind]; y.orig<-y<-y[ind] xx<-seq(min(x),max(x),length=100) # plot(x,y,...) do.call("plot",c(alist(x,y,bty="n"),args)) abline(lm(y~x),lwd=5) refresh<-function(...){ # plot(x,y,...); do.call("plot",c(alist(x,y,bty="n"),args)) abline(coefyx<-lm(y~x)$coef, lwd=3) polytype<-slider(no=1) form<-paste(paste(sep="","I(x^",1:polytype,")"),collapse="+") form<-as.formula(paste("y ~",form)); coef<-lm(form)$coef yy<-outer(xx,0:polytype,"^")%*%coef; lines(xx,yy,lwd=2) B<-slider(no=2); zz<-slider(no=3); set.seed(zz) result<-matrix(0,1+polytype,B) for(i in 1:B){ index<-sample(1:n,n,replace=TRUE) x<-x.orig[index]; y<-y.orig[index] coef<-lm(form)$coef yy<-outer(xx,0:polytype,"^")%*%coef lines(xx,yy,lwd=2,col=i,lty=2) result[,i]<-coef } abline(coefyx, lwd=5) result<-t(result); colnames(result)<-c("intercept",paste(sep="","beta: x^",1:polytype)) print(summary(result)) } slider(refresh,c("polynomial degree","number repetitions","random seed"), c(1,1,1),c(5,50,100),c(1,1,1),c(1,10,1)) refresh() "ok" } @ \subsubsection{Test} <>= <> daten<-iris[,2:3] slider.bootstrap.lm.plot(daten) @ \subsubsection{Help Page} <>= \name{slider.bootstrap.lm.plot} \title{interactive bootstapping for lm} \alias{slider.bootstrap.lm.plot} \description{ \code{slider.bootstrap.lm.plot} computes a scatterplot and adds regression curves of samples of the data points. The number of samples and the degree of the model are controlled by sliders. } \usage{ slider.bootstrap.lm.plot(x, y, ...) } \arguments{ \item{x}{ two column matrix or vector of x values if y is used } \item{y}{ y values if x is not a matrix } \item{\dots}{ additional graphics parameters } } \details{ \code{slider.bootstrap.lm.plot} draws a scatterplot of the data points and fits a linear model to the data set. Regression curves of samples of the data are then added to the plot. Within a Tcl/Tk control widget the degree of the model, the repetitions and the start of the random seed are set. After modification of a parameter the plot is updated. } \value{ a message about the usage } \references{ ~~ } \author{ Hans Peter Wolf } \seealso{ \code{\link{plot}} } \examples{ \dontrun{ ## This example cannot be run by examples() but should be work in an interactive R session daten<-iris[,2:3] slider.bootstrap.lm.plot(daten) } } \keyword{ iplot } @ \section{Appendix} \subsection{Definition of [[slider]]} We will finish the paper by listing the definition of the function [[slider()]]. The definition is copied from package relax. \renewcommand{\codechunkcommands}{\footnotesize} <>= slider<-function (sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, sl.defaults, but.functions, but.names, no, set.no.value, obj.name, obj.value, reset.function, title) { if (!exists("slider.env")) slider.env <<- new.env(parent = .GlobalEnv) if (!missing(no)) return(as.numeric(tclvalue(get(paste("slider", no, sep = ""), env = slider.env)))) if (!missing(set.no.value)) { try(eval(parse(text = paste("tclvalue(slider", set.no.value[1], ")<-", set.no.value[2], sep = "")), env = slider.env)) return(set.no.value[2]) } if (!missing(obj.name)) { if (!missing(obj.value)) assign(obj.name, obj.value, env = slider.env) else obj.value <- get(obj.name, env = slider.env) return(obj.value) } if (missing(title)) title <- "slider control widget" if (missing(sl.names)) { sl.defaults <- sl.names <- NULL } if (missing(sl.functions)) sl.functions <- function(...) { } # require(tcltk) # now in the depends section of the package nt <- tktoplevel() tkwm.title(nt, title) tkwm.geometry(nt, "+0+15") assign("tktop.slider", nt, env = slider.env) "relax" for (i in seq(sl.names)) { "relax" eval(parse(text = paste("assign('slider", i, "',tclVar(sl.defaults[i]),env=slider.env)", sep = ""))) tkpack(fr <- tkframe(nt)) lab <- tklabel(fr, text = sl.names[i], width = "25") sc <- tkscale(fr, from = sl.mins[i], to = sl.maxs[i], showvalue = TRUE, resolution = sl.deltas[i], orient = "horiz") tkpack(lab, sc, side = "right") assign("sc", sc, env = slider.env) eval(parse(text = paste("tkconfigure(sc,variable=slider", i, ")", sep = "")), env = slider.env) sl.fun <- if (length(sl.functions) > 1) sl.functions[[i]] else sl.functions if (!is.function(sl.fun)) sl.fun <- eval(parse(text = paste("function(...){", sl.fun, "}"))) tkbind(sc, "", sl.fun) } assign("slider.values.old", sl.defaults, env = slider.env) tkpack(f.but <- tkframe(nt), fill = "x") tkpack(tkbutton(f.but, text = "Exit", command = function() tkdestroy(nt)), side = "right") if (!missing(reset.function)) { if (!is.function(reset.function)) reset.function <- eval(parse(text = paste("function(...){", reset.function, "}"))) tkpack(tkbutton(f.but, text = "Reset", command = function() { for (i in seq(sl.names)) eval(parse(text = paste("tclvalue(slider", i, ")<-", sl.defaults[i], sep = "")), env = slider.env) reset.function() }), side = "right") } if (missing(but.names)) but.names <- NULL for (i in seq(but.names)) { but.fun <- if (length(but.functions) > 1) but.functions[[i]] else but.functions if (!is.function(but.fun)) but.fun <- eval(parse(text = c("function(...){", but.fun, "}"))) tkpack(tkbutton(f.but, text = but.names[i], command = but.fun), side = "left") } invisible(nt) } @ \end{document} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @ \subsection{Generation of [[.R]] and [[.Rd]] files} The building process of packages needs to store Code in [[.R]] files and help pages in [[Rd]] files. The code chunk of this section writes these files. Compare file [[doaplpack]]. <>= tangleR("sliderfns.rev","slider.hist.Rd", "define help of [[slider.hist]]",FALSE,FALSE,FALSE) tangleR("sliderfns.rev","slider.brush.Rd", "define help of [[slider.brush.pairs]] and of [[slider.brush.plot.xy]]", FALSE,FALSE,FALSE) tangleR("sliderfns.rev","slider.split.plot.ts.Rd", "define help of [[slider.split.plot.ts]]", FALSE,FALSE,FALSE) tangleR("sliderfns.rev","slider.zoom.plot.ts.Rd", "define help of [[slider.zoom.plot.ts]]", FALSE,FALSE,FALSE) tangleR("sliderfns.rev","slider.smooth.plot.ts.Rd", "define help of [[slider.smooth.plot.ts]]", FALSE,FALSE,FALSE) tangleR("sliderfns.rev","slider.lowess.plot.Rd", "define help of [[slider.lowess.plot]]", FALSE,FALSE,FALSE) tangleR("sliderfns.rev","slider.bootstrap.lm.plot.Rd", "define help of [[slider.bootstrap.lm.plot]]", FALSE,FALSE,FALSE) <> dump("slider.hist",file="slider.hist.R") <> dump("slider.density",file="slider.density.R") <> dump("slider.brush.pairs",file="slider.brush.pairs.R") <> dump("slider.brush.plot.xy",file="slider.brush.plot.xy.R") <> dump("slider.split.plot.ts",file="slider.split.plot.ts.R") <> dump("slider.zoom.plot.ts",file="slider.zoom.plot.ts.R") <> dump("slider.smooth.plot.ts",file="slider.smooth.plot.ts.R") <> dump("slider.lowess.plot",file="slider.lowess.plot.R") <> dump("slider.bootstrap.lm.plot",file="slider.bootstrap.lm.plot.R") @ \subsection{Create namespace file} <>= cat('exportPattern("^slider.[a-z]+")', 'export(bagplot,boxplot2D,compute.bagplot,faces,plot.bagplot, plot.faces,spin3R,stem.leaf)', file="/home/wiwi/pwolf/R/aplpack/aplpack/NAMESPACE",sep="\n") "ok" @ \subsection{Umwandlung von PS-Bildern in JPEGs} Der R-Erstellungsprozess des PDF-Files verwendet pdflatex, sodass JPEP-Dateien statt PS-Dateien eingebunden werden. Deshalb ist es ratsam, jpg-Datei gleicher Qualitt zu generieren. Mit diesem Chunk lassen sich die Bilder von ps nach jpg konvertieren. Im Erstellungsskript werden brigens die jpg-Dateien an die geeignete Stelle kopiert: [[cp sliderfns/*.jpg aplpack/inst/doc/]] <<*>>= a<-list.files(pattern="^p.*.ps$") for(fi in a){ nfi<-sub(".ps$",".jpg",fi) eval(parse(text=paste("system('convert ",fi," ",nfi,"')"))) } @ \subsection{[[aplpack]] script} <<[[aplpack]] script>>= # doaplpack: Installation script for aplpack # pw 09/2008 ### CLEAN [ ! -d aplpack/R ] && mv aplpack/r aplpack/R ### BAGPLOT echo "library(relax);tangleR(\"bagplot.rev\",expand.roots=\"\",expand.root.start=TRUE)" | R --vanilla mv bagplot.R aplpack/R/bagplot.R ##notangle -R"define [[bagplot]]" bagplot.rev > aplpack/R/bagplot.R echo "library(relax);tangleR(\"bagplot.rev\",\"bagplot.Rd\", \ expand.roots=\"define help of [[bagplot]]\",expand.root.start=FALSE)" | R --vanilla grep "^[^#]" bagplot.Rd.R > aplpack/man/bagplot.Rd rm bagplot.Rd.R ## notangle -R"define help of [[bagplot]]" bagplot.rev > aplpack/man/bagplot.Rd cp -p bagplot.rev aplpack/inst/src/ cp -p work/bagplot.pdf aplpack/inst/pdf/ ### FACES notangle -R"define [[faces]]" faces.rev > aplpack/R/faces.R notangle -R"define [[plot.faces]]" faces.rev > aplpack/R/plot.faces.R notangle -R"define [[faces]] help" faces.rev > aplpack/man/faces.Rd cp -p faces.rev aplpack/inst/src/ ### MS stem-and-leaf notangle -R"definiere ms" ms.rev > aplpack/R/stem.leaf.R notangle -R"definiere Hilfe zu [[stem.leaf]]" ms.rev > aplpack/man/stem.leaf.Rd cp -p ms.rev aplpack/inst/src/ ### SPIN3R notangle -R"definiere [[spin3R]]" spin3R.rev > aplpack/R/spin3R.R notangle -R"definiere Hilfe von [[spin3R]]" spin3R.rev > aplpack/man/spin3R.Rd cp -p spin3R.rev aplpack/inst/src/ ### BOXPLOT2D notangle -R"start" sc.rev > aplpack/R/boxplot2D.R notangle -R"definiere Hilfe von [[boxplot2D]]" sc.rev > aplpack/man/boxplot2D.Rd cp -p sc.rev aplpack/inst/src/ ### SLIDERFNS #cp sliderfns/*.Rd aplpack/man/ notangle -R"define help of [[slider.hist]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.hist.Rd notangle -R"define help of [[slider.brush.pairs]] and of [[slider.brush.plot.xy]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.brush.Rd notangle -R"define help of [[slider.split.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.split.plot.ts.Rd notangle -R"define help of [[slider.zoom.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.zoom.plot.ts.Rd notangle -R"define help of [[slider.smooth.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.smooth.plot.ts.Rd notangle -R"define help of [[slider.lowess.plot]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.lowess.plot.Rd notangle -R"define help of [[slider.bootstrap.lm.plot]]" \ sliderfns/sliderfns.rev > aplpack/man/slider.bootstrap.lm.plot.Rd #cat sliderfns/*.R > aplpack/R/sl.R notangle -R"define [[slider.hist]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.hist.R notangle -R"define [[slider.density]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.density.R notangle -R"define [[slider.brush.pairs]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.brush.pairs.R notangle -R"define [[slider.brush.plot.xy]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.brush.plot.xy.R notangle -R"define [[slider.split.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.split.plot.ts.R notangle -R"define [[slider.zoom.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.zoom.plot.ts.R notangle -R"define [[slider.smooth.plot.ts]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.smooth.plot.ts.R notangle -R"define [[slider.lowess.plot]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.lowess.plot.R notangle -R"define [[slider.bootstrap.lm.plot]]" \ sliderfns/sliderfns.rev > aplpack/R/slider.bootstrap.lm.plot.R cp -p sliderfns/sliderfns.rev aplpack/inst/src/ cp sliderfns/*.jpg aplpack/inst/doc/ cat sliderfns/sliderfns.tex | sed "s/\\.ps//" > aplpack/inst/doc/sliderfns.Snw ### SLIDER cp /home/wiwi/pwolf/R/work/relax/install.dir/relax/man/slider.Rd aplpack/man/ cp /home/wiwi/pwolf/R/work/relax/install.dir/relax/R/slider.R aplpack/R/ ### NAMESPACE echo "exportPattern(\"^slider.[a-z]+\")" > tmp.tmp echo "export(bagplot,boxplot2D,compute.bagplot,faces,plot.bagplot," >> tmp.tmp echo " plot.faces,spin3R,stem.leaf)" >> tmp.tmp mv tmp.tmp aplpack/NAMESPACE ### DESCRIPTION cp DESCRIPTION aplpack/DESCRIPTION ### CHECK + BUILD R CMD check aplpack; R CMD build aplpack #rm lib/aplpack/R/aplpack.rdb R CMD INSTALL --library=lib aplpack_1.2.2.tar.gz cd lib; zip -r aplpack_1.2.2.zip aplpack/* mv aplpack_1.2.2.zip .. cd .. exit 0 ### MANUALS generation of pdf manuals: ## cp *rev pdfmake/ cd pdfmake ; revweb sc; latex sc; latex sc; dvipdf sc; revweb faces; latex faces; latex faces; dvipdf faces; revweb spin3R; latex spin3R; latex spin3R; dvipdf spin3R; revweb ms; latex ms; latex ms; dvipdf ms cd ../work echo "library(relax);weaveR(\"bagplot.rev\")" | R --vanilla latex bagplot; latex bagplot; dvipdf bagplot; cp bagplot.pdf ../pdfmake/ cd ../pdfmake/ cp *pdf ../aplpack/inst/pdf cd .. ## sliderfns manual cd sliderfns echo "library(relax); weaveR('sliderfns.rev')" |R --vanilla -q latex sliderfns; latex sliderfns; dvipdf sliderfns cp *.pdf ../pdfmake/ cp sliderfns.pdf ../aplpack/inst/pdf/ @ \end{document} @ ===================================================================== <<*>>= system("notangle -Rdefine-tangleR ../../work/relax/webR/webR.rev > t.R") source("t.R") tangleR("sliderfns.rev","f.Rd","define help of [[slider.hist]]", FALSE, insert.comment=FALSE,add.extension=FALSE) #tangleR("sliderfns.rev","f.R","define [[slider.split.plot.ts]]", FALSE, # insert.comment=FALSE) @ <>= slider.show.norm<-function(name,...) { refresh<-function(...){ lim1<-slider(no=1); lim2<-slider(no=2) par1<-slider(no=3); par2<-slider(no=4) x<-seq(min(lim1,lim2),max(lim1,lim2),length=200) f.x<-dnorm(x,par1,par2) main=paste("normal distribution\n", "E(X) = ",format(par1,digits=3), ", sd(X) =",format(par2,digits=3)) plot(x,f.x,type="l",bty="n",main=main) } slider(refresh, c("x limit (min)","x limit (max)", "expectation","standard deviation"), c(-100,-100,-50,.001),c(100,100,50,100),c(1,1,.1,.1),c(-5,5,0,1) ) refresh() cat("use slider to select parameter!\n") } slider.show.norm() @ To simplify things we compute a function that sets default values of a [[alist]]. ??? <<*>>= replace.defaults<-function(new.args,...){ defaults<-list(...) for(i in seq(new.args)) h<-match(names(new.args)[i],names(defaults.args)) if(!is.na(h)){ cat("found"); defaults[i]<-new.args[h];print(new.args[h])} else defaults<-c(defaults,new.args[h]) print(defaults) return(defaults) } slider.hist<-function(x,panel=rug,...) { <> args<-list(...) args<-args[names(args)!="breaks"] ClassNumber<-length(hist(x,plot=FALSE)$breaks) # if(!any("main"==names(args)))args<-c(args,list(main=x.name)) refresh<-function(...){ xrange<-range(x); num<-slider(no=1) breaks<-seq(xrange[1],xrange[2],length=num+1) do.call("hist",c(alist(x=x,breaks=breaks), replace.defaults(args,main="hallo",col="green") )) # do.call("hist",c(alist(x=x,breaks=breaks),args, # list(main="asdhalldddd"))) panel(x) } ## slider(refresh,"ClassNumber",1,100,1,ClassNumber); refresh() refresh() "use slider to select number of classes" } slider.hist(co2,main="red") identical(alist(x=10,b=20),list(x=10,b=20)) @ <<*>>= slider1<- function (sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, sl.defaults, but.functions, but.names, no, set.no.value, obj.name, obj.value, reset.function, title) { if (!exists("slider.env")) slider.env <<- new.env(parent = .GlobalEnv) if (!missing(no)) return(as.numeric(tclvalue(get(paste("slider", no, sep = ""), env = slider.env)))) if (!missing(set.no.value)) { try(eval(parse(text = paste("tclvalue(slider", set.no.value[1], ")<-", set.no.value[2], sep = "")), env = slider.env)) return(set.no.value[2]) } if (!missing(obj.name)) { if (!missing(obj.value)) assign(obj.name, obj.value, env = slider.env) else obj.value <- get(obj.name, env = slider.env) return(obj.value) } if (missing(title)) title <- "slider control widget" if (missing(sl.names)) sl.names <- NULL if (missing(sl.functions)) sl.functions <- function(...) { } require(tcltk) nt <- tktoplevel() tkwm.title(nt, title) tkwm.geometry(nt, "+0+15") assign("tktop.slider", nt, env = slider.env) for (i in seq(sl.names)) { ## dat <- c(no = i, value = sl.defaults[i], time = round(proc.time()[3] * 5)) ## assign(paste("sl.dat.", i, sep = ""), dat, env = slider.env) eval(parse(text = paste("assign('slider", i, "',tclVar(sl.defaults[i]),env=slider.env)", sep = ""))) tkpack(fr <- tkframe(nt)) lab <- tklabel(fr, text = sl.names[i], width = "25") sc <- tkscale(fr, from = sl.mins[i], to = sl.maxs[i], showvalue = TRUE, resolution = sl.deltas[i], orient = "horiz") tkpack(lab, sc, side = "right") assign("sc", sc, env = slider.env) eval(parse(text = paste("tkconfigure(sc,variable=slider", i, ")", sep = "")), env = slider.env) sl.fun <- if (length(sl.functions) > 1) sl.functions[[i]] else sl.functions if (!is.function(sl.fun)) sl.fun <- eval(parse(text = paste("function(...){", sl.fun, "}"))) # tkconfigure(sc, command = sl.fun) tkbind(sc,"",sl.fun) } assign("slider.values.old", sl.defaults, env = slider.env) tkpack(f.but <- tkframe(nt), fill = "x") tkpack(tkbutton(f.but, text = "Exit", command = function() tkdestroy(nt)), side = "right") if (!missing(reset.function)) { if (!is.function(reset.function)) reset.function <- eval(parse(text = paste("function(...){", reset.function, "}"))) tkpack(tkbutton(f.but, text = "Reset", command = function() { for (i in seq(sl.names)) eval(parse(text = paste("tclvalue(slider", i, ")<-", sl.defaults[i], sep = "")), env = slider.env) reset.function() }), side = "right") } if (missing(but.names)) but.names <- NULL for (i in seq(but.names)) { but.fun <- if (length(but.functions) > 1) but.functions[[i]] else but.functions if (!is.function(but.fun)) but.fun <- eval(parse(text = c("function(...){", but.fun, "}"))) tkpack(tkbutton(f.but, text = but.names[i], command = but.fun), side = "left") } invisible(nt) } aplpack/inst/src/bagplot.rev0000644000176200001440000075734713513105141015620 0ustar liggesusers% New Report: Mon Jul 15 15:32:55 2019 % New Report: Mon May 28 12:46:16 2018 % New Report: Thu Mar 8 15:19:42 2018 % New Report: Fri Sep 26 17:51:36 2014 % ToDO von DT: Noch etwas: Als multivariates Mass der Streuung koennte man auch den Flaecheninhalt der Huellen ausgeben. Die kann man nach der Gaussschen Trapezregel ausrechnen: %charea <- function(ch) { % x <- ch[, 1]; y <- ch[, 2]; A <- x - c(x[-1], x[1]); A <- A * (y + c(y[-1], y[1])) % A <- 0.5 * abs(sum(A)); A %} % New Report: Mon Sep 22 19:34:26 2014 % New Report: Tue Nov 5 10:04:00 2013 % New Report: Mon Nov 4 11:24:22 2013 % some pictures removed to reduce bytes % New Report: Wed Oct 30 14:52:58 2013 % New Report: Mon Dec 10 19:35:52 2012 % New Report: Mon Dec 10 11:38:35 2012 % New Report: Wed Dec 5 08:54:53 2012 % New Report: Mon Dec 3 10:18:50 2012 % New Report: Sun Dec 2 17:27:31 2012 % New Report: Sun Dec 2 13:36:56 2012 % New Report: Sat Dec 1 14:25:11 2012 % New Report: Fri Nov 23 17:47:45 2012 % New Report: Mon Oct 29 09:12:15 2012 % New Report: Sun Oct 28 09:32:56 2012 % New Report: Fri Oct 26 15:15:24 2012 % New Report: Fri Oct 19 09:55:59 2012 % New Report: Thu Oct 18 22:20:49 2012 % New Report: Thu Oct 18 21:02:41 2012 % New Report: Thu Oct 18 14:13:37 2012 % New Report: Tue Oct 16 19:36:52 2012 % New Report: Tue Oct 16 18:46:26 2012 % New Report: Mon Oct 8 17:43:04 2012 %\renewcommand{\textchunkcommands}{\normalsize} %\renewcommand{\codechunkcommands}{\small} %\renewcommand{\Routputcommands}{\footnotesize} % New Report: Mon Oct 8 16:19:58 2012 % New Report: Thu Oct 4 18:31:58 2012 % New Report: Thu Oct 4 18:05:37 2012 % New Report: Thu Oct 4 17:06:48 2012 % New Report: Wed Oct 3 11:34:34 2012 % New Report: Tue Oct 2 20:07:38 2012 % New Report: Sun Sep 30 09:55:59 2012 % New Report: Fri Nov 4 17:34:40 2011 % http://www.defm.fmph.uniba.sk/~katina/StKaFSS2005.pdf % Literatur-Abschnitt einfuegen % New Report: Fri Aug 31 10:17:51 2007 % New Report: Thu Aug 30 09:57:34 2007 % Report: Wed Aug 22 10:19:32 2007 % New Report: Tue Jan 9 17:17:25 2007 % New Report: Fri Feb 17 13:02:38 2006 % New Report: Thu Sep 15 19:27:10 2005 % New Report: Mon Sep 12 17:03:31 2005 % New Report: Mon Sep 12 10:35:36 2005 % New Report: Sun Sep 11 20:09:28 2005 % New Report: Sun Sep 11 08:52:43 2005 % New Report: Tue Sep 6 08:02:12 2005 % New Report: Wed Aug 24 16:51:01 2005 %% ?? jittering controling by function argument, set.seed by argument ?? \documentclass{article} %%% alte Name vorher: "hdeep.rev" \usepackage{a4wide,graphicx,mathpazo,courier,alltt,amssymb} \usepackage[scaled=.95]{helvet} \usepackage[T1]{fontenc} \parindent0mm \title{A rough R Impementation of the Bagplot,\\ Data Peeling, Skyline Plots, and Graphical Summaries} \author{File: \jobname.rev\\in: /home/wiwi/pwolf/R/work/bagplot} \date{Version: Sep 26 2014} \begin{document} \maketitle @ \begin{center}\includegraphics[height=10cm]{p2007-Aug28-172719.ps}\end{center} %

\small \tableofcontents @ \bigskip In this paper we describe a rough implementation of the bagplot. The first section shows some examples. Section 2 compares our bagplot function to the solution of Rousseeuw, Ruts, and Tukey (1999). Then the arguments, the help page of the function [[bagplot]] and some links are listed. In section 4 you find the definition of the function. In the appendix further examples for testing are given and some old code chunks are listed. % 2007/08/31, 2009/02/16, <>= "bagplot, version 2012/12/05, peter wolf" @ \newpage \section{Examples} \subsection{Example: car data (Chambers / Hastie 1992)} The first example is a bagplot of the famous car data of Chambers and Hastie. In the code chunk the data set is assigned to [[cardata]] and [[bagplot()]] is called with some parameters that are described later in this paper. <>= library(rpart); cardata<-car.test.frame[,6:7]; par(mfrow=c(1,1)) <> bagplot(cardata,verbose=FALSE,factor=2.5,show.baghull=TRUE,dkmethod=2, show.loophull=TRUE,precision=1)$center points(cardata,pch=16,cex=.8,col="blue") title("car data Chambers/Hastie 1992") text(cardata[60,] + c(0,-5), rownames(cardata)[60]) # Nissan Van # h <- which(250 < cardata[,2]) # text(cardata[h,]+cbind(250*c(-1.2,-.91,-.3,-.3),8*c(-1,.7,-1,1)), # rownames(cardata)[h],xpd=NA) @ \begin{center}\includegraphics[height=10cm]{p2012-Oct29-144231}\end{center} %

@ To integrate the data point of Nissan Van into the light blue region the argument [[factor]] has to be set to 3. @ The Tukey median of our bagplot function is (2810.431, 139.879). Splus computes a slightly different point: (2806.63, 139.513). In difference to Rousseeuw et al. our bagplot as well as the bagplot of Splus classified the data point of Nissan Van 4 as outlier. To get the Splus results you have to download [[bagplot*]], the car data and ... \begin{verbatim} Splus CHAPTER bagplot.f Splus make Splus ... > dyn.open("S.so"); source("bagplot.s") #; postscript("hello.ps") > bagplot(cardata[,1],cardata[,2]) #; dev.off() \end{verbatim} % no longer available: % For R have a look at: http://www.statistik.tuwien.ac.at/public/filz/students/edavis/\\ % ws0607/skriptum/page134.html @ \newpage \subsection{The normal case} A bagplot of an rnorm sample with one heavy outlier is shown by the following code chunk. <>= <> seed<-222; n<-200 <> datan<-rbind(data,c(106,294)); datan[,2]<-datan[,2]*100 h <- bagplot(datan,factor=3,create.plot=TRUE,approx.limit=300, show.outlier=TRUE,show.looppoints=TRUE,show.bagpoints=TRUE, show.whiskers=TRUE,show.loophull=TRUE,show.baghull=TRUE, verbose=FALSE, cex=0.6) title(paste("seed: ",seed,"/ n: ",n)) @ \begin{center}\includegraphics[height=10cm]{p2007-Aug29-154943.ps}\end{center} %

@ @ @ \newpage \subsection{Large data sets} What about very large data sets? The algorithm computes some of the quantities of the bagplot on base of a sample if there are more then [[approx.limit]] data points. <>= seed<-174; n<-3000 <> <> datan<-rbind(data,c(105,295)) bagplot(datan,factor=2.5,create.plot=TRUE,approx.limit=1000, cex=0.5,show.outlier=TRUE,show.looppoints=TRUE, show.bagpoints=TRUE,dkmethod=2,show.loophull=TRUE, show.baghull=TRUE,verbose=FALSE,debug.plots="no") title(paste("seed:",seed,"/ n:",n)) @ \begin{center}\includegraphics[height=10cm]{p2012-Oct3-114555}\end{center} %

@ @ \newpage \subsection{Size of data set} The time for computation increases with the number of observations. To illustrate the run times we measure the times necessary for rnorm data sets of different sizes and plot the results. @ <>= <> nn<-c(50,70,100,200,350); nn<-c(nn,10*nn,100*nn);nn<-nn[-1] result<-1:length(nn) for(j in seq(along=nn)){ seed<-111; set.seed(seed); n<-nn[j] xy<-cbind(rnorm(n),rnorm(n)) result[j]<-system.time( bagplot(xy,factor=3,create.plot=FALSE,approx.limit=300, show.outlier=TRUE,show.looppoints=TRUE,show.bagpoints=TRUE, show.whiskers=TRUE,show.loophull=TRUE,show.baghull=TRUE, verbose=FALSE) )[1] } plot(nn,result,bty="n",ylab="user-cpu",xlab="number of data points") names(result)<-nn; result @ \begin{center}\includegraphics[height=5cm]{p2007-Aug29-112957.ps}\end{center} %

@ @ {\tiny \begin{verbatim} Wed Aug 29 11:29:35 2007 70 100 200 350 500 700 1000 2000 3500 5000 7000 10000 20000 35000 0.480 0.480 0.448 0.473 0.476 0.492 0.472 0.536 0.564 0.608 0.712 0.728 0.896 1.364 \end{verbatim} @ } % end of footnotesize Rerunning gives the following results: @ \begin{verbatim} Wed Oct 3 11:46:05 2012 70 100 200 350 500 700 1000 2000 3500 5000 7000 10000 20000 0.104 0.108 0.108 0.116 0.112 0.124 0.112 0.128 0.124 0.136 0.140 0.160 0.232 35000 0.308 \end{verbatim} @ \begin{center}\includegraphics[height=5cm]{p2012-Oct3-114732}\end{center} %

@ @ \newpage \subsection{"Depth-One" data sets} It is very interesting to test extrem cases. What happens if the depths of all points are one? <>= <> bagplot(x=1:30,y=(1:30)^2,verbose=FALSE,dkmethod=2) points(x=1:30,y=(1:30)^2,col="black",pch=16) @ \begin{center}\includegraphics[height=4cm]{p2007-Aug28-172953.ps}\end{center} %

In the 2012 version the region of the median region is shown. @ \begin{center}\includegraphics[height=4cm]{p2012-Oct29-145801}\end{center} %

@ @ <>= <> n<-100;bagplot(x=cos((1:n)/n*2*pi),y=sin((1:n)/n*2*pi), precision=1,verbose=FALSE,dkmethod=2,debug.plot=FALSE)$center @ On the right side we find the version 12/2012 \begin{center} \includegraphics[height=4cm]{p2007-Aug29-143613.ps} \includegraphics[height=4cm]{p2012-Oct29-145842} \end{center} %

@ %

@ \newpage @ \subsection{Degenerated data sets} What happens if all the data points lie in a one dimensional subspace? <>= bagplot(x=10+c(1:100,200),y=30-c(1:100,200),verbose=FALSE) @ Here is a second one dim data set. \begin{center}\includegraphics[height=8cm]{p2012-Dec4-172632}\end{center} %

@ <>= bagplot(x=(1:100),y=(1:100),verbose=FALSE) @ @ \begin{center}\includegraphics[height=8cm]{p2012-Dec4-172612}\end{center} %

@ @ \newpage @ \subsection{Data set from the mail of M. Maechler} The data set of M. Maechler is discussed within R-help. Decide of yourself if our bagplot is acceptable. Maybe this doesn't matter because mostly a data set is \emph{in regular position} (Rousseeuw, Ruts 1998) and there are no identical coordinates. But it may happen, e.g. in the car data set there are two points that are identical. M. Maechler wrote in a reply concerning a bagplot question that the correct Tukey median is (6.75 , 4.875 ) and not (6.544480, 4.708483) that is computed by our bagplot procedure. <>= <> <> bagplot(x0,y0,show.baghull=TRUE,show.loophull=TRUE, create.plot=TRUE,show.whiskers=TRUE,factor=3, debug.plots="notall",dkmethod=2,verbose=FALSE, precision=1)$center #abline(h=4.85,v=6.75) @ Bagplot of version 12/2012: \begin{center}\includegraphics[height=5cm]{p2012-Dec3-173304}\end{center} %

@ <>= x0<-c(1,5, 6,6, 6, 6,6,7,7,8, 11, 13) #; x0 <- c(x0, 8) y0<-c(2,3.5,4,4.5,4.5,5,5,5,5,5.5,5.5, 7) #; y0 <- c(y0, 7) @ Here is the result of older bagplot versions: \begin{center}\includegraphics[height=5cm]{p2007-Aug31-095954.ps}\end{center} %

@ @ % points(6.75,4.85); x1<-c(6,6,7,7); y1<-c(4.5,4.5,5,5); mean(y1); % c(mean(c(6,6,7,7,8)),mean(c(4,4.5,4.5 ,5,5,5.5))) @ \newpage @ \subsection{Data sets of Wouter Meuleman, running in an error with version 09/2005} An old bagplot version runs into errors with following data set. During the computation of \nolinebreak <> ~some NaN values occured. @ \renewcommand{\codechunkcommands}{\footnotesize} \renewcommand{\textchunkcommands}{\normalsize} @ <>= a<-gsub("\n"," ",c("3 2759.626 22.90411 6 2757.461 31.75789 13 2758.931 44.25797 15 2757.411 30.47785 16 2761.720 40.01067 18 2759.827 36.97118 19 2758.398 49.43611 21 2757.411 23.30404 26 2757.461 33.81379 27 2758.398 37.75841 28 2759.244 27.74002 32 2757.411 35.40853 34 2760.734 35.47206 38 2760.612 49.05950 39 2757.730 44.51406 40 2758.798 27.33595")) a<-unlist(strsplit(paste(a,collapse="")," ")) a<-as.numeric(a[a!=""]); a<-matrix(a,ncol=3,byrow=TRUE) <> bagplot(a[,2],a[,3],verbose=FALSE,precision=1) @ \begin{center}\includegraphics[height=6cm]{p2007-Aug28-173125.ps}\end{center} %

@ On 2006/02/17 some lines of code have been changed to remove the NaN values. <>= a<-gsub("\n"," ",c("1 7766.734 38.86814 2 7768.329 34.50661 3 7769.335 21.14797 4 7768.221 21.08619 5 7776.913 17.97344 6 7768.221 22.27727 8 7771.719 43.62978 9 7773.056 20.22909 12 7771.334 31.22399")) a<-unlist(strsplit(paste(a,collapse="")," ")) a<-as.numeric(a[a!=""]); a<-matrix(a,ncol=3,byrow=TRUE) <> bagplot(a[,2],a[,3],verbose=TRUE,dkmethod=2,precision=1,factor=3) # points(a[,2:3],pch=1,cex=2.5,col="red") @ %alpha<-2 %bagplot(a[,2:3]%*%matrix(c(cos(alpha),sin(alpha),-sin(alpha),cos(alpha)),2,2),dkmethod=2) @ On the left we find a result of an older version of [[bagplot()]]. However, the central region hasn't been found -- compare the following bagplot. To integrate the point at the top edge of this picture you have to enlarge the [[factor]] a little bit. \begin{center}\includegraphics[height=5cm]{p2007-Aug31-101954.ps} \includegraphics[height=5cm]{p2012-Oct29-091517} \end{center} %

% bagplot-test8-version %

@ \newpage \renewcommand{\codechunkcommands}{\small} \renewcommand{\textchunkcommands}{\normalsize} @ The following data set was proposed by Ben Greiner in January 2007. In the version of November 2012 the central region is quite narrow and not a long yellow field as shown in the next figure. <>= <> greiner.data<-cbind(c( 1,1,1,0.7,0.8,0.98,0.9,0.85,1,1,0.7,1,0.65, 0.8,0.5,0.7,0.95,0.7,0.8,0.8,0.75,1,0.95,0.7,0.95,0.8,0.75,0.7,0.85, 0.8,0.8,1,0.5,0.9,0.7,0.8,0.6,0.9,0.98,1,0.5,0.45,0.95,1,0.9,0.9, 0.7,1,1,0.7,1,0.4,0.9,0.85,0.75,1,0.5,0.9,0.4,0.95,0.8,0.95,0.99, 1,0.34,0.6,1,0.9,0.6,0.7,0.8,0.7,0.95,1,0.6,0.99,0.85,0.78,0.8,1, 0.4,1,0.33,0.99,0.6,0.8,0.85,0.75,0.9,0.9,1,0.9,1,0.8,1,0.9,1,0.71, 0.4,0.8,1,0.7,1,0.8,1,0.6,0.6,1,0.6,1,1,0.7,0.85,1,0.8,1,0.95,0.8, 0.9,0.8,0.6,0.85,1,0.9,0.9,0.8,1,1,0.6,0.9,1,1,0.5,0.75,0.53,0.8, 0.7,0.3,0.8,0.9,0.7,0.8,0.6,0.9,0.8,0.8,0.6,1,0.6,1,1,0.9,0.8,0.7, 0.6,0.8,1,0.5,0.85,1,0.75,1,0.8,1,0.85,1,0.75,0.8,0.7,0.87,1,1,1, 0.7,0.79,0.8,0.6,0.9,0.6,0.8,0.6,0.7,0.8,0.99,0.9,0.75 ), c( 0,0,0,0.1,0,0.01,0,0.05,0,0,0.1,0,0.11,0.1,0,0.1,0,0.3,0,0,0.07, 0,0.01,0.1,0,0.05,0.05,0.3,0.05,0.1,0,0,0.25,0,0.1,0.05,0.2,0.05, 0.01,0,0.25,0.25,0.05,0,0.05,0.02,0.1,0,0,0.1,0,0.25,0.03,0.05,0.1, 0,0.2,0.01,0.2,0,0.1,0.01,0,0,0.33,0.1,0,0.05,0.15,0.1,0.1,0.1,0.01, 0,0.1,0,0.05,0.07,0.1,0,0.15,0,0.34,0,0.15,0.1,0.03,0,0,0.05,0,0.05, 0,0.2,0,0.01,0,0.05,0.2,0.05,0,0.15,0,0.05,0,0.2,0.2,0,0.2,0,0,0.2, 0.05,0,0.05,0,0.01,0,0.05,0.05,0.1,0.05,0,0.05,0.05,0.05,0,0,0.15, 0.05,0,0,0,0.05,0.07,0.05,0.1,0.3,0.05,0,0.1,0.1,0.2,0.02,0.05,0.2, 0.2,0,0.1,0,0,0.05,0.05,0.1,0.2,0.1,0,0.5,0,0,0.1,0,0.05,0,0.05,0, 0.01,0.05,0.1,0.03,0,0,0,0,0.1,0.05,0.1,0.05,0.1,0,0.2,0.2,0,0.01,0,0.1)) bagplot(greiner.data,precision=3) "" @ \begin{center}\includegraphics[height=10cm]{p2007-Aug28-173217.ps}\end{center} %

\newpage @ \subsection{Data sets of Amanda Joy Shaker} The bagplot function (version from 2011) runs into an error by using a data set of Amanda Joy Shaker (AJS): \begin{verbatim} Error in chull(pg[, 1], pg[, 2]) : NA/NaN/Inf in externem Funktionsaufruf (arg 2) \end{verbatim} This problem was caused by: \\ [[ pgl<-pgl[c(TRUE,(abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit)),] ]]\\ instead of the correct statement \\ [[ pgl<-pgl[c( (abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit),TRUE),] ]]\\ Date of correction: Wed Oct 3 12:15:01 2012 In the right figure the most upper point joins the loop only if the precision up to 4. Otherwise the point will be isolated plotted. <>= <> par(mfrow=c(1,2)) dat.AJS.NaN.1 <- cbind(c(1.852, -1.740, 2.170, 4.745, -5.858, -3.521, 3.001, -6.139, -1.513, -1.384, 1.957, -0.023, -0.495, -2.401, -7.966), c(2.310, -2.752, 1.492, -2.929, 3.487, 1.343, 2.976, -1.260, -1.153, -0.384, 4.735, 3.978, 0.103, -1.650, -2.209) ) bagplot(dat.AJS.NaN.1,cex=1,main="dat.AJS.NaN.1") dat.AJS.NaN.2 <- cbind(c(-4.66, -2.62, -3.65 ,-3.07 ,-4.91, -4.56 ,-3.79, -3.10, -3.01), c(2.14, -7.18, -0.15 , 2.67, -2.49, -0.89 , 0.96 , 0.59, -4.59)) bagplot(dat.AJS.NaN.2,cex=1,main="dat.AJS.NaN.2",precision=1) @ \begin{center}\includegraphics[height=6cm,width=12cm]{p2012-Nov5-184441}\end{center} %

@ Further data sets which run into difficulties can be found in the appendix. Here is the list of the data sets used for discussion with AJS. @ \begin{verbatim} [1] dat.AJS.cen.51 dat.AJS.cen.51a dat.AJS.cen.52 dat.AJS.cen.53 [5] dat.AJS.chull.1 dat.AJS.chull.2 dat.AJS.chull.2a dat.AJS.fence.1 [9] dat.AJS.fence.2 dat.AJS.NA.1 dat.AJS.NA.10 dat.AJS.NA.11 [13] dat.AJS.NA.12 dat.AJS.NA.13 dat.AJS.NA.14 dat.AJS.NA.15 [17] dat.AJS.NA.16 dat.AJS.NA.17 dat.AJS.NA.18 dat.AJS.NA.19 [21] dat.AJS.NA.2 dat.AJS.NA.20 dat.AJS.NA.21 dat.AJS.NA.22 [25] dat.AJS.NA.23 dat.AJS.NA.24 dat.AJS.NA.25 dat.AJS.NA.26 [29] dat.AJS.NA.3 dat.AJS.NA.4 dat.AJS.NA.5 dat.AJS.NA.6 [33] dat.AJS.NA.7 dat.AJS.NA.8 dat.AJS.NA.9 dat.AJS.NaN.1 [37] dat.AJS.NaN.2 dat.AJS.NAN.A dat.AJS.NAN.B dat.AJS.NAN.C [41] dat.AJS.NAN.D dat.AJS.NAN.E dat.AJS.NAN.F dat.AJS.NAN.G \end{verbatim} @ \newpage @ \subsection{Bagplot with additional graphical supplements} Verbose computation of bagplot of a sample of 100 rnorm points and an outlier is performed by the following code chunk. With the verbose option the h-depths of the data points are shown in the plot and some of the intermediate results are printed during the the computation. <>= seed<-444; n<-30 <> datan<-rbind(data,c(102,298)) bagplot(datan,factor=2.5,create.plot=TRUE,approx.limit=300, show.outlier=TRUE,show.looppoints=TRUE,show.bagpoints=TRUE,dkmethod=2, show.whiskers=TRUE,show.loophull=TRUE,show.baghull=TRUE,verbose=TRUE) title(paste("seed:",seed,"/ n:",n)) @ \begin{center}\includegraphics[height=6cm]{p2012-Dec3-173556}\end{center} %

@ @ \newpage @ @ \subsection{Debugging plots with additional elements} Here is an example of plots generated with option [[debug.plots="all"]]. This option has been helpful during debugging and now the plots can be classified as R art. <>= seed<-444; n<-30 <> <> datan<-data[1:10,] #datan<-cbind(c(1:100,200),c(1:100,200)) par(mfrow=c(2,3)) bagplot(datan,factor=2.5,create.plot=TRUE,approx.limit=300, show.outlier=TRUE,show.looppoints=TRUE,show.bagpoints=TRUE, show.whiskers=TRUE,show.loophull=FALSE,show.baghull=TRUE,dkmethod=2, debug.plots="all", precision=.4, verbose=TRUE); par(mfrow=c(1,1)) @ %% points(TP,pch = letters[TPD]) \begin{center}\includegraphics[height=8cm]{p2007-Aug29-155757.ps}\end{center} %

Remark: Setting a higher precision will discover a central region of points with a higher depth. \newpage @ \section{Bagplots by an alternative approach, proposed by Rousseeuw, Ruts and Tukey} As mentioned above there is a solution using a fortran procedure for generating bagplots, see: \begin{center} {\footnotesize http://www.statistik.tuwien.ac.at/public/filz/students/edavis/ws0607/skriptum/page134.html. } % end of footnotesize \end{center} To get the procedure work you have to perform the following steps: \begin{itemize} \item fetch the fortran code by downloading [[$ get ftp://ftp.win.ua.ac.be/pub/software/agoras/newfiles/bagplot.tar.gz]] -- this link has been found on the web page: http://www.agoras.ua.ac.be/Locdept.htm \item unzip and unpack the tar.gz-file [[$ gunzip bagplot.tar.gz; tar -xvf bagplot.tar]] \item translate the fortran program [[bagplot.f]] and generate the object file [[bagplot.so]] [[$ R CMD SHLIB -o bagplot.so bagplot.f]] \item download bagplot-R-function [[$ get http://www.statistik.tuwien.ac.at/public/filz/students/edavis/]]\\ [[ ws0607/skriptum/bagplot.R]] \item start R and load so-file <<*>>= dyn.load("Tukey/bagplot.so") @ \item source bagplot function; to avoid conflicts in the names we change the name of the bagplot function of Rousseeuw, Ruts, and Tukey to [[BAGPLOT]]. <<*>>= BAGPLOT<-readLines("Tukey/BAGPLOT.R") eval(parse(text=sub("^.bagplot","\"BAGPLOT",BAGPLOT))); "ok" args(BAGPLOT) @ Here are the arguments of [[BAGPLOT()]]: \begin{verbatim} Wed Aug 29 15:19:43 2007 function (x, y, plotinbag = T, plotoutbag = T, ident = T, drawfence = F, drawloop = T, truncxmin = NULL, truncxmax = NULL, truncymin = NULL, truncymax = NULL, xlab = "x", ylab = "y", ...) \end{verbatim} @ \item compute an example bagplot. <<*>>= library(MASS) data(Cars93); x<-Cars93[,"Weight"]; y<-Cars93[,"EngineSize"] names(x)<-dimnames(Cars93)[[1]]; names(y)<-dimnames(Cars93)[[1]] # par(mar=c(4,4,1,1)) BAGPLOT(x,y,xlab="Gewicht (in Pfund)",ylab="Hubraum (in Liter)", ## main="Press Mouse BUTTON!", cex.lab=1.2) text(3380,5.7,"Chevrolet",pos=2); text(2895,1.3,"Mazda",pos=1) text(4050,3.0,"Nissan",pos=1); text(3785,2.4,"Toyota",pos=1) text(3960,2.5,"Volkswagen",pos=3) @ Here is the numerical result \begin{verbatim} [1] The coordinates of the Tukey median are ( 2954.84 , 2.40962 ). \end{verbatim} and the bagplot: \begin{center}\includegraphics[height=7cm]{p2007-Aug29-151504.ps}\end{center} %

\end{itemize} A reconstruction of this plot can be done by our bagplot function. For a suitable loop you have to set [[factor=2.8]]. <<*>>= library(MASS) data(Cars93); x<-Cars93[,"Weight"]; y<-Cars93[,"EngineSize"] names(x)<-dimnames(Cars93)[[1]]; names(y)<-dimnames(Cars93)[[1]] center<-bagplot(x,y,factor=2.8,xlab="Gewicht (in Pfund)",precision=3, ylab="Hubraum (in Liter)",cex.lab=1.2,cex=0.7)$center text(3380,5.7,"Chevrolet",pos=2); text(2895,1.3,"Mazda",pos=1) text(4050,3.0,"Nissan",pos=1); text(3785,2.4,"Toyota",pos=1) text(3960,2.5,"Volkswagen",pos=3) center @ \begin{center}\includegraphics[height=7cm]{p2007-Aug28-190955.ps}\end{center} %

@ We find the center: \begin{verbatim} Tue Dec 4 08:30:45 2012 [1] 2955.184896 2.410503 \end{verbatim} The difference may be caused by numerical difficulties. @ \paragraph{Test of data set of Martin Maechler.} As a second example we check the bagplot functions by the data set of Martin Maecher. <>= <> BAGPLOT(x0,y0) @ We get the numerical result ... \begin{verbatim} [1] The coordinates of the Tukey median are ( 6.75 , 4.875 ). \end{verbatim} @ and the following plot \begin{center}\includegraphics[height=6cm]{p2007-Aug30-103133.ps}\end{center} %

Our procedure will compute slightly different results: <>= <> center<-bagplot(x0, y0, show.baghull=FALSE, show.loophull=FALSE, create.plot=TRUE, show.whiskers=TRUE, factor=3, dkmethod=2, precision=3, xlim=c(5.5,7.5), ylim=c(4.1,5.2))$center abline(h=4.85,v=6.75); center @ \begin{center}\includegraphics[height=6cm]{p2007-Aug31-100250.ps}\end{center} %

@ The two lines mark the Tukey median computed by BAGPLOT. Our median is ([[precision=3]]): \begin{verbatim} [1] 6.483859 4.741716 \end{verbatim} @ <<*>>= TP <- cbind(as.vector(matrix(seq(5.5,7.5,length=30),30,30)), as.vector(matrix(seq(4.2,5.2,length=30),30,30,TRUE))) TPD <- hdepth(TP,cbind(x0,y0)) points(TP,pch=c(letters,LETTERS)[TPD+1]) @ \begin{center}\includegraphics[height=10cm]{p2012-Dec3-174644}\end{center} %

@ @ Now we check the stability of the functions by exchanging the variables. <>= <> BAGPLOT(y0,x0) @ \begin{verbatim} [1] The coordinates of the Tukey median are ( 4.84231 , 6.68461 ). \end{verbatim} There is a difference! The relative difference is: <>= abs((c(6.483859, 4.741716)-rev(c(4.84231,6.68461)))/c(6.483859, 4.741716)) @ % 0.2826207 0.3712021 wrong difference! \begin{verbatim} [1] 0.03096165 0.02121468 \end{verbatim} @ How will our function master the test? <>= center.ex<-bagplot(y0, x0, show.baghull=FALSE, show.loophull=FALSE, create.plot=TRUE, show.whiskers=TRUE, factor=3, dkmethod=2, precision=3)$center cat("center original data:", center ) cat("center exchanged data:", rev(center.ex)) @ %% [1] 4.708846 6.540282 old computations \begin{verbatim} center original data: 6.483859 4.741716 center exchanged data: 6.483912 4.741755 \end{verbatim} The relative difference is approximately 0.07\%. If we increase the precision by [[precision=5]] the difference is reduced as we like it: <>= center <-bagplot(x0,y0,create.plot=FALSE,factor=3,precision=5)$center center.ex <-bagplot(y0,x0,create.plot=FALSE,factor=3,precision=5)$center cat("center original data:", center ) cat("center exchanged data:", rev(center.ex)) abs(center-center.ex[2:1])/center @ The results seems to be identical for we get: %[1] 6.541650 4.708349 %[1] 0 0 \begin{verbatim} center original data: 6.447704 4.723065 center exchanged data: 6.44778 4.723117 Tue Dec 4 08:41:05 2012 [1] 1.182812e-05 1.094571e-05 \end{verbatim} %center original data: 6.541412 4.708204 %center exchanged data: 6.542667 4.708722 %[1] 0.0001918761 0.0001100664 @ By analyzing the scatterplot we find that the area of the points with h-depth 4 build a triangle. The corners of this triangle are: (6, 4.5), (7,5) and (6.625, 14.125). The center of its gravity is equal to the mean of the three points and we get the Tukey median (6.541666, 4.7083333). Our bagplot function finds a result that is very near to the one computed by hand. @ \paragraph{Memory faults.} There are some other problems with the implementation via the fortran procedure because we got some memory faults during testing [[BAGPLOT]]. These errors killed the R process and some of the computed results got lost. But it was not difficult to reconstruct them ... by relax. \newpage @ \section{Arguments and output of [[bagplot]], the help page and some links} @ A summary of the arguments can be found by [[args()]]. <>= args(bagplot) @ \begin{verbatim} function (x, y, factor = 3, na.rm = FALSE, approx.limit = 300, show.outlier = TRUE, show.whiskers = TRUE, show.looppoints = TRUE, show.bagpoints = TRUE, show.loophull = TRUE, show.baghull = TRUE, create.plot = TRUE, add = FALSE, pch = 16, cex = 0.4, dkmethod = 2, precision = 1, verbose = FALSE, debug.plots = "no", col.loophull = "#aaccff", col.looppoints = "#3355ff", col.baghull = "#7799ff", col.bagpoints = "#000088", transparency = FALSE, show.center = TRUE, ...) \end{verbatim} @ The output of [[bagplot]] is a list of the relevant quantities of the constructed bagplot. To identify singular points, use [[identify()]]. Here is a short description of the return values: \newcommand{\valuesofbagplot}{ \begin{center}\begin{tabular}{ll} [[center]]& Tukey median \\[[hull.loop]]& set of points of polygon that defines the loop \\[[hull.bag]]& set of points of polygon that defines the bag \\[[hull.center]]& region of points with maximal ldepth \\[[pxy.outlier]]& outlier \\[[pxy.outer]]& outer points \\[[pxy.bag]]& points in bag \\[[hdepth]]& location depth of data points in xy \\[[is.one.dim]]& is [[TRUE]] if data set is one dimensional \\[[prdata]]& result of PCA % \\[[random.seed]]& random.seed that is set by bagplot % SEED \\[[xydata]]& data set \\[[xy]]& sample of data set \end{tabular}\end{center} } \valuesofbagplot @ %# 121202 <>= \name{hdepth} \alias{hdepth} \title{ hdepth of points } \description{ \code{hdepth()} computes the h-depths of points. } \usage{ hdepth(tp, data, number.of.directions=181) } \arguments{ \item{tp}{ two column matrix of the coordinates of points which h-depths are needed } \item{data}{ two column matrix of the coordinates of the points of a data set} \item{number.of.directions}{ number of directions to be checked } } \details{ The function \code{hdepth} computes the h-depths of the points \code{tp} relative to data set \code{data}. If \code{data} is missing \code{tp} will also be taken as data set. } \value{ the h-depths of the test points } \author{ Peter Wolf } \note{ Version of bagplot: 12/2012 } \seealso{ \code{\link[aplpack]{bagplot}} } \examples{ # computation of h-depths data <- cbind(rnorm(40), rnorm(40)) xy <- cbind(runif(50,-2,2),runif(50,-2,2)) bagplot(data); text(xy, as.character(hdepth(xy,data))) } @ The help page is defined as a code chunk. <>= \name{bagplot} \alias{bagplot} \alias{compute.bagplot} \alias{plot.bagplot} \title{ bagplot, a bivariate boxplot } \description{ \code{compute.bagplot()} computes an object describing a bagplot of a bivariate data set. \code{plot.bagplot()} plots a bagplot object. \code{bagplot()} computes and plots a bagplot. } \usage{ bagplot(x, y, factor = 3, na.rm = FALSE, approx.limit = 300, show.outlier = TRUE, show.whiskers = TRUE, show.looppoints = TRUE, show.bagpoints = TRUE, show.loophull = TRUE, show.baghull = TRUE, create.plot = TRUE, add = FALSE, pch = 16, cex = 0.4, dkmethod = 2, precision = 1, verbose = FALSE, debug.plots = "no", col.loophull="#aaccff", col.looppoints="#3355ff", col.baghull="#7799ff", col.bagpoints="#000088", transparency=FALSE, show.center = TRUE, ... ) compute.bagplot(x, y, factor = 3, na.rm = FALSE, approx.limit = 300, dkmethod=2,precision=1,verbose=FALSE,debug.plots="no") \method{plot}{bagplot}(x, show.outlier = TRUE, show.whiskers = TRUE, show.looppoints = TRUE, show.bagpoints = TRUE, show.loophull = TRUE, show.baghull = TRUE, add = FALSE, pch = 16, cex = 0.4, verbose = FALSE, col.loophull="#aaccff", col.looppoints="#3355ff", col.baghull="#7799ff", col.bagpoints="#000088", transparency=FALSE, show.center = TRUE, ...) } \arguments{ \item{x}{ x values of a data set; in \code{bagplot}: an object of class \code{bagplot} computed by \code{compute.bagplot} } \item{y}{ y values of the data set } \item{factor}{ factor defining the loop } \item{na.rm}{ if TRUE 'NA' values are removed otherwise exchanged by median} \item{approx.limit}{ if the number of data points exceeds \code{approx.limit} a sample is used to compute some of the quantities; default: 300 } \item{show.outlier}{ if TRUE outlier are shown } \item{show.whiskers}{ if TRUE whiskers are shown } \item{show.looppoints}{ if TRUE loop points are plottet } \item{show.bagpoints}{ if TRUE bag points are plottet } \item{show.loophull}{ if TRUE the loop is plotted } \item{show.baghull}{ if TRUE the bag is plotted } \item{create.plot}{ if FALSE no plot is created } \item{add}{ if TRUE the bagplot is added to an existing plot } \item{pch}{ sets the plotting character } \item{cex}{ sets characters size} \item{dkmethod}{ 1 or 2, there are two method of approximating the bag, method 1 is very rough (only based on observations } \item{precision}{ precision of approximation, default: 1 } \item{verbose}{ automatic commenting of calculations } \item{debug.plots}{ if TRUE additional plots describing intermediate results are constructed } \item{col.loophull}{ color of loop hull } \item{col.looppoints}{ color of the points of the loop } \item{col.baghull}{ color of bag hull } \item{col.bagpoints}{ color of the points of the bag } \item{transparency}{ see section details } \item{show.center}{ if TRUE the center is shown } \item{...}{ additional graphical parameters } } \details{ A bagplot is a bivariate generalization of the well known boxplot. It has been proposed by Rousseeuw, Ruts, and Tukey. In the bivariate case the box of the boxplot changes to a convex polygon, the bag of bagplot. In the bag are 50 percent of all points. The fence separates points within the fence from points outside. It is computed by increasing the the bag. The loop is defined as the convex hull containing all points inside the fence. If all points are on a straight line you get a classical boxplot. \code{bagplot()} plots bagplots that are very similar to the one described in Rousseeuw et al. Remarks: The two dimensional median is approximated. For large data sets the error will be very small. On the other hand it is not very wise to make a (graphical) summary of e.g. 10 bivariate data points. In case you want to plot multiple (overlapping) bagplots, you may want plots that are semi-transparent. For this you can use the \code{transparency} flag. If \code{transparency==TRUE} the alpha layer is set to '99' (hex). This causes the bagplots to appear semi-transparent, but ONLY if the output device is PDF and opened using: \code{pdf(file="filename.pdf", version="1.4")}. For this reason, the default is \code{transparency==FALSE}. This feature as well as the arguments to specify different colors has been proposed by Wouter Meuleman. } \value{ \code{compute.bagplot} returns an object of class \code{bagplot} that could be plotted by \code{plot.bagplot()}. An object of the bagplot class is a list with the following elements: \code{center} is a two dimensional vector with the coordinates of the center. \code{hull.center} is a two column matrix, the rows are the coordinates of the corners of the center region. \code{hull.bag} and \code{hull.loop} contain the coordinates of the hull of the bag and the hull of the loop. \code{pxy.bag} shows you the coordinates of the points of the bag. \code{pxy.outer} is the two column matrix of the points that are within the fence. \code{pxy.outlier} represent the outliers. The vector \code{hdepths} shows the depths of data points. \code{is.one.dim} is \code{TRUE} if the data set is (nearly) one dimensional. The dimensionality is decided by analysing the result of \code{prcomp} which is stored in the element \code{prdata}. \code{xy} shows you the data that are used for the bagplot. In the case of very large data sets subsets of the data are used for constructing the bagplot. A data set is very large if there are more data points than \code{approx.limit}. \code{xydata} are the input data structured in a two column matrix. } \references{ P. J. Rousseeuw, I. Ruts, J. W. Tukey (1999): The bagplot: a bivariate boxplot, The American Statistician, vol. 53, no. 4, 382--387 } \author{ Peter Wolf } \note{ Version of bagplot: 10/2012 } \seealso{ \code{\link[graphics]{boxplot}} } \examples{ # example: 100 random points and one outlier dat<-cbind(rnorm(100)+100,rnorm(100)+300) dat<-rbind(dat,c(105,295)) bagplot(dat,factor=2.5,create.plot=TRUE,approx.limit=300, show.outlier=TRUE,show.looppoints=TRUE, show.bagpoints=TRUE,dkmethod=2, show.whiskers=TRUE,show.loophull=TRUE, show.baghull=TRUE,verbose=FALSE) # example of Rousseeuw et al., see R-package rpart cardata <- structure(as.integer( c(2560,2345,1845,2260,2440, 2285, 2275, 2350, 2295, 1900, 2390, 2075, 2330, 3320, 2885, 3310, 2695, 2170, 2710, 2775, 2840, 2485, 2670, 2640, 2655, 3065, 2750, 2920, 2780, 2745, 3110, 2920, 2645, 2575, 2935, 2920, 2985, 3265, 2880, 2975, 3450, 3145, 3190, 3610, 2885, 3480, 3200, 2765, 3220, 3480, 3325, 3855, 3850, 3195, 3735, 3665, 3735, 3415, 3185, 3690, 97, 114, 81, 91, 113, 97, 97, 98, 109, 73, 97, 89, 109, 305, 153, 302, 133, 97, 125, 146, 107, 109, 121, 151, 133, 181, 141, 132, 133, 122, 181, 146, 151, 116, 135, 122, 141, 163, 151, 153, 202, 180, 182, 232, 143, 180, 180, 151, 189, 180, 231, 305, 302, 151, 202, 182, 181, 143, 146, 146)), .Dim = as.integer(c(60, 2)), .Dimnames = list(NULL, c("Weight", "Disp."))) bagplot(cardata,factor=3,show.baghull=TRUE, show.loophull=TRUE,precision=1,dkmethod=2) title("car data Chambers/Hastie 1992") # points of y=x*x bagplot(x=1:30,y=(1:30)^2,verbose=FALSE,dkmethod=2) # one dimensional subspace bagplot(x=1:100,y=1:100) } \keyword{ misc } \keyword{ hplot } @ Here are some important links: \begin{verbatim} http://www.cim.mcgill.ca/~lsimard/Pattern/TheBag.htm http://www.math.yorku.ca/SCS/Gallery/bright-ideas.html http://maven.smith.edu/~streinu/Research/LocDepth/algorithm.html http://www.agoras.ua.ac.be/abstract/Bagbiv97.htm http://www.agoras.ua.ac.be/Locdept.htm http://article.gmane.org/gmane.comp.lang.r.general/25235 http://finzi.psych.upenn.edu/R/Rhelp02a/archive/45106.html http://delivery.acm.org/10.1145/370000/365565/ p690-miller.pdf?key1=365565&key2=9093786211&coll=GUIDE& dl=GUIDE&CFID=53086693&CFTOKEN=38519152 http://www.cs.tufts.edu/research/geometry/half_space/ http://www.statistik.tuwien.ac.at/public/filz/students/edavis/ ws0607/skriptum/page134.html \end{verbatim} @ \section{The definition of bagplot} The function [[bagplot]] is a container that calls the two functions [[compute.bagplot]] and [[plot.bagplot]]. The first one generates an object of class [[bagplot]] and the second one is called by the generic plot function. <>= <> <> <> <> <> bagplot<-function(x,y, factor=3, # expanding factor for bag to get the loop na.rm=FALSE, # should 'NAs' values be removed or exchanged approx.limit=300, # limit show.outlier=TRUE,# if TRUE outlier are shown show.whiskers=TRUE, # if TRUE whiskers are shown show.looppoints=TRUE, # if TRUE points in loop are shown show.bagpoints=TRUE, # if TRUE points in bag are shown show.loophull=TRUE, # if TRUE loop is shown show.baghull=TRUE, # if TRUE bag is shown create.plot=TRUE, # if TRUE a plot is created add=FALSE, # if TRUE graphical elements are added to actual plot pch=16,cex=.4, # some graphical parameters dkmethod=2, # in 1:2; there are two methods for approximating the bag precision=1, # controls precision of computation verbose=FALSE,debug.plots="no", # tools for debugging col.loophull="#aaccff", # Alternatives: #ccffaa, #ffaacc col.looppoints="#3355ff", # Alternatives: #55ff33, #ff3355 col.baghull="#7799ff", # Alternatives: #99ff77, #ff7799 col.bagpoints="#000088", # Alternatives: #008800, #880000 transparency=FALSE, show.center = TRUE, # if TRUE center is shown ... # to define further parameters of plot ){ if(missing(x)) return(<>) if((is.data.frame(x) || is.matrix(x)) && ncol(x) == 2){ y <- x[,2]; x <- x[,1] } #180308 if(missing(y)){ y <- x; x <- seq(along = y) } #180308 bo<-compute.bagplot(x=x,y=y,factor=factor,na.rm=na.rm, approx.limit=approx.limit,dkmethod=dkmethod, precision=precision,verbose=verbose,debug.plots=debug.plots) if(create.plot){ plot(bo, show.outlier=show.outlier, show.whiskers=show.whiskers, show.looppoints=show.looppoints, show.bagpoints=show.bagpoints, show.loophull=show.loophull, show.baghull=show.baghull, add=add,pch=pch,cex=cex, verbose=verbose, col.loophull=col.loophull, col.looppoints=col.looppoints, col.baghull=col.baghull, col.bagpoints=col.bagpoints, transparency=transparency, show.center = show.center, ... ) } invisible(bo) } @ [[compute.bagplot]] computes the relevant values to allow [[plot.bagplot]] to draw the bagplot. <>= compute.bagplot<-function(x,y, factor=3, # expanding factor for bag to get the loop na.rm=FALSE, # should NAs removed or exchanged approx.limit=300, # limit dkmethod=2, # in 1:2; method 2 is recommended precision=1, # controls precision of computation verbose=FALSE,debug.plots="no" # tools for debugging ){ <> <> } @ \subsection{The body of [[compute.bagplot]]} Here you see the main steps of the construction of a bagplot. <>= <> <> <> <> <> <> <> <> if(dkmethod==1){ <> }else{ <> } <> <> <> <> <> <> @ \subsection{Output of [[bagplot]]} The following table of output values of [[bagplot]] is copy from section 2: \valuesofbagplot These elements are return as a list. <>= res<-list( center=center, hull.center=hull.center, hull.bag=hull.bag, hull.loop=hull.loop, pxy.bag=pxy.bag, pxy.outer=if(length(pxy.outer)>0) pxy.outer else NULL, pxy.outlier=if(length(pxy.outlier)>0) pxy.outlier else NULL, hdepths=hdepth, is.one.dim=is.one.dim, prdata=prdata, ## random.seed=random.seed, #SEED xy=xy,xydata=xydata ) if(verbose) res<-c(res,list(exp.dk=exp.dk,exp.dk.1=exp.dk.1,hdepth=hdepth)) class(res)<-"bagplot" return(res) @ \subsection{Initilization of [[bagplot]]} Points with identical coordinates may run in numerical problem. Therefore, some noise may be added to the data -- for this feature the comment signs have to be deleted. To do not disturb simulation studies in very large sets we replace the use of random samples and use systematically drawn samples now. % 20120930 <>= # define some functions <> <> <> <> <> <> <> <> <> # check input xydata<-if(missing(y)) x else cbind(x,y) if(is.data.frame(xydata)) xydata<-as.matrix(xydata) if(any(is.na(xydata))){ if(na.rm){ xydata<-xydata[!apply(is.na(xydata),1,any),,drop=FALSE] print("Warning: NA elements have been removed!!") }else{ #121129 xy.medians<-apply(xydata,2,function(x) median(x, na.rm=TRUE)) # colMeans(xydata,na.rm=TRUE) for(j in 1:ncol(xydata)) xydata[is.na(xydata[,j]),j]<-xy.medians[j] print("Warning: NA elements have been exchanged by median values!!") } } # if(nrow(xydata)<3) {print("not enough data points"); return()} ## 121008 if(length(xydata)<4) {print("not enough data points"); return()} if((length(xydata)%%2)==1) {print("number of values isn't even"); return()} if(!is.matrix(xydata)) xydata<-matrix(xydata,ncol=2,byrow=TRUE) # select sample in case of a very large data set very.large.data.set<-nrow(xydata) > approx.limit # use of random number generator may disturb simulation # therefore we now use a systematical part of the data 20120930 ### OLD: set.seed(random.seed<-13) ### SEED if(very.large.data.set){ ## OLD: ind<-sample(seq(nrow(xydata)),size=approx.limit) step<-(n<-nrow(xydata))/approx.limit; ind <- round(seq(1,n,by=step)) xy<-xydata[ind,] } else xy<-xydata n<-nrow(xy) points.in.bag<-floor(n/2) # if jittering is needed # the following two lines can be activated #xy<-xy+cbind(rnorm(n,0,.0001*sd(xy[,1])), # rnorm(n,0,.0001*sd(xy[,2]))) if(verbose) cat("end of initialization") @ Yuankun Shi asked how the proportion of data points of the bag could be changed. Although this may result in misinterpretations we show a way to implement a modified bagplot: % 090218 \begin{verbatim} # make copy of compute.bagplot and change halve number of points in the bag, # for example by "n*myproportion": mycompute.bagplot<- eval(parse(text=sub("n/2","n*myproportion",deparse(compute.bagplot)))) # define your own bagplot version which calls "mycompute.bagplot": mybagplot<-eval(parse(text= sub("compute.bagplot","mycompute.bagplot",deparse(bagplot)))) # example application: myproportion<-0.2; set.seed(13); mybagplot(cbind(rnorm(100),rnorm(100))) \end{verbatim} @ \subsection{Some local functions to find intersection points} \paragraph{win:} After a lot of experiments the function [[atan2]] is found to compute the gradient in fastest way. <>= win<-function(dx,dy){ atan2(y=dy,x=dx) } @ \paragraph{out.of.polygon:} The function [[out.of.polygon]] checks if the points of [[xy]] are within the polygon [[pg]] (return value FALSE) or not (return value TRUE). <>= out.of.polygon<-function(xy,pg){ # 121026 xy<-matrix(xy,ncol=2) # check trivial case if(nrow(pg)==1) return(xy[,1]==pg[1] & xy[,2]==pg[2]) # store number of points of xy and polygon m<-nrow(xy); n<-nrow(pg) # find small value relative to polygon limit <- -abs(1E-10*diff(range(pg))) # find vectors that are orthogonal to segments of polygon pgn<-cbind(diff(c(pg[,2],pg[1,2])),-diff(c(pg[,1],pg[1,1]))) # find center of gravity of xy S<-colMeans(xy) # compute negative distances of polygon to center of gravity of xy dxy<-cbind(S[1]-pg[,1],S[2]-pg[,2]) # unused: S.in.pg<-all(limit>= out.of.polygon<-function(xy,pg){ xy<-matrix(xy,ncol=2) # check trivial case if(nrow(pg)==1) return(xy[,1]==pg[1] & xy[,2]==pg[2]) # store number of points of xy and polygon m<-nrow(xy); n<-nrow(pg) # find small value relative to polygon limit<--abs(1E-10*diff(range(pg))) # find vectors that are orthogonal to segments of polygon pgn<-cbind(diff(c(pg[,2],pg[1,2])),-diff(c(pg[,1],pg[1,1]))) segments(hx<-(pg[-1,1]+pg[-n,1])/2,hy<-(pg[-1,2]+pg[-n,2])/2, hx+pgn[-n,1],hy+pgn[-n,2],col="blue") # find center of gravity of xy S<-matrix(colMeans(xy),1,2) # compute negative distances of polygon to center of gravity of xy dxy<-cbind(S[1]-pg[,1],S[2]-pg[,2]) S.in.pg<- # unused all(limit>= cut.z.pg<-function(zx,zy,p1x,p1y,p2x,p2y){ a2<-(p2y-p1y)/(p2x-p1x); a1<-zy/zx sx<-(p1y-a2*p1x)/(a1-a2); sy<-a1*sx sxy<-cbind(sx,sy) h<-any(is.nan(sxy))||any(is.na(sxy))||any(Inf==abs(sxy)) if(h){ # print("NAN found"); print(cbind(a1,a2,zx,zy,sxy,p2x-p1x)) if(!exists("verbose")) verbose<-FALSE if(verbose) cat("special") # zx is zero # 121030 h<-0==zx sx<-ifelse(h,zx,sx); sy<-ifelse(h,p1y-a2*p1x,sy) # points on line defined by line segment a1 <- ifelse( abs(a1) == Inf, sign(a1)*123456789*1E10, a1) # 121030 a2 <- ifelse( abs(a2) == Inf, sign(a2)*123456789*1E10, a2) # points on line defined by line segment h<-0==(a1-a2) & sign(zx)==sign(p1x) sx<-ifelse(h,p1x,sx); sy<-ifelse(h,p1y,sy) h<-0==(a1-a2) & sign(zx)!=sign(p1x) sx<-ifelse(h,p2x,sx); sy<-ifelse(h,p2y,sy) # line segment vertical # & center NOT ON line segment h<-p1x==p2x & zx!=p1x & p1x!=0 sx<-ifelse(h,p1x,sx); sy<-ifelse(h,zy*p1x/zx,sy) # & center ON line segment h<-p1x==p2x & zx!=p1x & p1x==0 sx<-ifelse(h,p1x,sx); sy<-ifelse(h,0,sy) # & center NOT ON line segment & point on line # 121126 h<-p1x==p2x & zx==p1x & p1x!=0 # & sign(zy)==sign(p1y) sx<-ifelse(h,zx,sx); sy<-ifelse(h,zy,sy) # & center ON line segment & point on line h<-p1x==p2x & zx==p1x & p1x==0 & sign(zy)==sign(p1y) sx<-ifelse(h,p1x,sx); sy<-ifelse(h,p1y,sy) h<-p1x==p2x & zx==p1x & p1x==0 & sign(zy)!=sign(p1y) sx<-ifelse(h,p1x,sx); sy<-ifelse(h,p2y,sy) # points identical to end points of line segment h<-zx==p1x & zy==p1y; sx<-ifelse(h,p1x,sx); sy<-ifelse(h,p1y,sy) h<-zx==p2x & zy==p2y; sx<-ifelse(h,p2x,sx); sy<-ifelse(h,p2y,sy) # point of z is center h<-zx==0 & zy==0; sx<-ifelse(h,0,sx); sy<-ifelse(h,0,sy) sxy<-cbind(sx,sy) } # end of special cases #if(verbose){ print(rbind(a1,a2));print(cbind(zx,zy,p1x,p1y,p2x,p2y,sxy))} if(!exists("debug.plots")) debug.plots<-"no" if(debug.plots=="all"){ segments(sxy[,1],sxy[,2],zx,zy,col="red") segments(0,0,sxy[,1],sxy[,2],col="green",lty=2) ##!! points(sxy,col="red") } return(sxy) } @ \paragraph{find.cut.z.pg:} [[find.cut.z.pg]] finds the intersection points of the lines defined by [[z]] and center [[center]] and polygon [[pg]]. <>= find.cut.z.pg<-function(z,pg,center=c(0,0),debug.plots="no"){ if(!is.matrix(z)) z<-rbind(z) if(1==nrow(pg)) return(matrix(center,nrow(z),2,TRUE)) n.pg<-nrow(pg); n.z<-nrow(z) z<-cbind(z[,1]-center[1],z[,2]-center[2]) pgo<-pg; pg<-cbind(pg[,1]-center[1],pg[,2]-center[2]) if(!exists("debug.plots")) debug.plots<-"no" if(debug.plots=="all"){ plot(rbind(z,pg,0),bty="n"); points(z,pch="p") lines(c(pg[,1],pg[1,1]),c(pg[,2],pg[1,2]))} # find angles of pg und z apg<-win(pg[,1],pg[,2]) apg[is.nan(apg)]<-0; a<-order(apg); apg<-apg[a]; pg<-pg[a,] az<-win(z[,1],z[,2]) # find line segments segm.no<-apply((outer(apg,az,"<")),2,sum) segm.no<-ifelse(segm.no==0,n.pg,segm.no) next.no<-1+(segm.no %% length(apg)) # compute cut points cuts<-cut.z.pg(z[,1],z[,2],pg[segm.no,1],pg[segm.no,2], pg[next.no,1],pg[next.no,2]) # rescale cuts<-cbind(cuts[,1]+center[1],cuts[,2]+center[2]) return(cuts) } ## find.cut.z.pg(EX, EX1,center=CE) @ \paragraph{cut.p.sl.p.sl:} [[cut.p.sl.p.sl]] finds the intersection point of two lines. Both lines are described by a point and its slope. Remember: \[ y=y_1+m_1(x-x_1) \] If both slopes are identical an [[inf]]-value will be returned. <>= cut.p.sl.p.sl<-function(xy1,m1,xy2,m2){ sx<-(xy2[2]-m2*xy2[1]-xy1[2]+m1*xy1[1])/(m1-m2) sy<-xy1[2]-m1*xy1[1]+m1*sx if(!is.nan(sy)) return( c(sx,sy) ) if(abs(m1)==Inf) return( c(xy1[1],xy2[2]+m2*(xy1[1]-xy2[1])) ) if(abs(m2)==Inf) return( c(xy2[1],xy1[2]+m1*(xy2[1]-xy1[1])) ) } @ \subsection{A function to compute the h-depths of data points} \paragraph{hdepth.of.points:} [[hdepth.of.points]] computes the h-depths of test points [[tp]]. local variable [[ident]] stores the number of identical points. Algorithmical aspects of finding the h-depth are later discussed in: <> The test points are delivered by argument [[tp]]. Additionally the matrix of data points [[xy]] is used. %% # minusplus<-c(rep(-1,n),rep(1,n)) , print(n) unused <>= hdepth.of.points<-function(tp){ # 121030 second parameter n has been removed # if(!exists("precision")) precision <- 1 # 121203 # return(find.hdepths.tp(tp, xy, 181*precision)) # 121202 n.tp<-nrow(tp) tphdepth<-rep(0,n.tp); dpi<-2*pi-0.000001 for(j in 1:n.tp) { dx<-tp[j,1]-xy[,1]; dy<-tp[j,2]-xy[,2] a<-win(dx,dy)+pi; h<-a<10; a<-a[h]; ident<-sum(!h) init<-sum(a < pi); a.shift<-(a+pi) %% dpi minusplus<-c(rep(-1,length(a)),rep(1,length(a))) ## 070824 h<-cumsum(minusplus[order(c(a,a.shift))]) tphdepth[j]<-init+min(h)+1 # +1 because of the point itself!! # tphdepth[j]<-init+min(h)+ident; cat("SUMME",ident) } tphdepth } @ \subsubsection{A user function to compute h-depths} It may be helpful to have a function for computing the h-depths of test points relative to a data set. <>= hdepth<-function(xy,data){ # function to compute the h-depths of points <> if(missing(data)) data <- xy tp <- xy; xy <- data n.tp<-nrow(tp); n <- length(xy[,1]) tphdepth<-rep(0,n.tp); dpi<-2*pi-0.000001 for(j in 1:n.tp) { # compute difference of coordinates of tp j and data dx<-tp[j,1]-xy[,1]; dy<-tp[j,2]-xy[,2] # remove data points that are identical to tp j h <- tp[j,1] != xy[,1] & tp[j,2] != xy[,2] dx <- dx[h]; dy <- dy[h]; n <- length(dx) minusplus<-c(rep(-1,n),rep(1,n)) ## 070824 # compute angles of slopes of lines through tp j and data a<-win(dx,dy)+pi; h<-a<10; a<-a[h]; ident<-sum(!h) # count number of angles that are lower than pi == points above tp j init<-sum(a < pi); a.shift<-(a+pi) %% dpi # count points relative to the tp j in halve planes h<-cumsum(minusplus[order(c(a,a.shift))]) # find minimum number of points in a halve plane tphdepth[j]<-init+min(h)+1 # +1 because of the point itself!! # tphdepth[j]<-init+min(h)+ident; cat("SUMME",ident) } tphdepth } hdepth<-find.hdepths.tp #121202 @ <>= <> <> par(mfrow=c(1,2)) TP <- rbind(c(10,20),c(15,60),c(10,60),c(12,50)); data <- cars bagplot(data) #text(TP, as.character(hdepth(TP,data)),cex=3) set.seed(13); tp <- cbind(runif(100,5,35),runif(100,9,110)) text(tp, as.character(hdepth(tp,data)),cex=1) set.seed(13); n<-40; data <- cbind(rnorm(n), rnorm(n)) tp <- cbind(runif(100,-2,2),runif(100,-2,2)) bagplot(data) text(tp, as.character(hdepth(tp,data))) @ \begin{center}\includegraphics[height=10cm]{p2012-Dec3-171614}\end{center} %

@ \subsection{A function to expand the hull} \paragraph{expand.hull:} [[expand.hull]] expands polygon [[pk]] without changing the depth of its points. [[k]] is the depth and [[resolution]] is the number of points to be checked during expandation. <>= expand.hull<-function(pg,k){ if( 1 >= nrow(pg) ) return(pg) ## 121026 ## 121123 <= statt == <> <> <> <> } @ At first we search the intersection points of the hull of the data set with the lines beginning in the center and running through the points of [[pg]]. Then test points on the segments defined by these intersection points and the points of [[pg]] will be generated by using a vector [[lam]]. <>= resolution<-floor(20*precision) pg0<-xy[hdepth==1,] pg0<-pg0[chull(pg0[,1],pg0[,2]),] end.points<-find.cut.z.pg(pg,pg0,center=center,debug.plots=debug.plots) lam<-((0:resolution)^1)/resolution^1 @ The test is performed in two stages. In the interval from start point to end point [[resolution]] test points are tested concerning their h-depth. The critical interval is divided again to find a better limit. <>= pg.new<-pg for(i in 1:nrow(pg)){ tp<-cbind(pg[i,1]+lam*(end.points[i,1]-pg[i,1]), pg[i,2]+lam*(end.points[i,2]-pg[i,2])) # hd.tp<-hdepth.of.points(tp) hd.tp<-find.hdepths.tp(tp,xy) ind<-max(sum(hd.tp>=k),1) if(indk && tp<-cbind(tp[ind,1]+lam*(tp[ind+1,1]-tp[ind,1]), tp[ind,2]+lam*(tp[ind+1,2]-tp[ind,2])) # hd.tp<-hdepth.of.points(tp) hp.tp<-find.hdepths.tp(tp,xy) ind<-max(sum(hd.tp>=k),1) } pg.new[i,]<-tp[ind,] } pg.new<-pg.new[chull(pg.new[,1],pg.new[,2]),] # cat("depth pg.new", hdepth.of.points(pg.new)) # cat("depth pg.new", find.hdepths.tp(pg.new,xy)) @ Between the spurts we interpolated additional directions and find additional limits by the same procedure. <>= pg.add<-0.5*(pg.new+rbind(pg.new[-1,],pg.new[1,])) # end.points<-find.cut.z.pg(pg,pg0,center=center) end.points<-find.cut.z.pg(pg.add,pg0,center=center) ## 070824 for(i in 1:nrow(pg.add)){ tp<-cbind(pg.add[i,1]+lam*(end.points[i,1]-pg.add[i,1]), pg.add[i,2]+lam*(end.points[i,2]-pg.add[i,2])) # hd.tp<-hdepth.of.points(tp) hd.tp<-find.hdepths.tp(tp,xy) ind<-max(sum(hd.tp>=k),1) if(indk && tp<-cbind(tp[ind,1]+lam*(tp[ind+1,1]-tp[ind,1]), tp[ind,2]+lam*(tp[ind+1,2]-tp[ind,2])) # hd.tp<-hdepth.of.points(tp) hd.tp<-find.hdepths.tp(tp,xy) ind<-max(sum(hd.tp>=k),1) } pg.add[i,]<-tp[ind,] } # cat("depth pg.add", hdepth.of.points(pg.add)) @ Finally the hull of the limits is computed and our numerical solution of hull($d_k$). [[pg.new]] is the output of [[expand.hull]]. <>= pg.new<-rbind(pg.new,pg.add) pg.new<-pg.new[chull(pg.new[,1],pg.new[,2]),] @ \subsection{A function to find the position of points respectively to a polygon} \paragraph{pos.to.pg:} [[pos.to.pg]] finds the position of points [[z]] relative to a polygon [[pg]] If a point is below the polygon [["lower"]] is returned otherwise [["upper"]]. <>= pos.to.pg<-function(z,pg,reverse=FALSE){ if(reverse){ int.no<-apply(outer(pg[,1],z[,1],">="),2,sum) zy.on.pg<-pg[int.no,2]+pg[int.no,3]*(z[,1]-pg[int.no,1]) }else{ int.no<-apply(outer(pg[,1],z[,1],"<="),2,sum) zy.on.pg<-pg[int.no,2]+pg[int.no,3]*(z[,1]-pg[int.no,1]) } ### ifelse(z[,2]>= prdata<-prcomp(xydata) is.one.dim<-(0 == max(prdata[[1]])) || (min(prdata[[1]])/max(prdata[[1]]))<0.00001 # 121129 if(is.one.dim){ if(verbose) cat("data set one dimensional") center<-colMeans(xydata) res<-list(xy=xy,xydata=xydata,prdata=prdata, is.one.dim=is.one.dim,center=center) class(res)<-"bagplot" return(res) } if(verbose) cat("data not linear") @ % # 121008 # 121028 plot.bagplot <>= if(nrow(xydata)<=4) { if(verbose) cat("only three or four data points") center<-colMeans(xydata) res<-list(xy=xy,xydata=xydata,prdata=prdata,hdepths=rep(1,n),hdepth=rep(1,n), is.one.dim=is.one.dim,center=center,hull.center=NULL, hull.bag=NULL,hull.loop=NULL,pxy.bag=NULL,pxy.outer=xydata, pxy.outlier=NULL,exp.dk=xydata) class(res)<-"bagplot" return(res) } @ \subsection{Standardize data and compute h-depths of points} For numerical reasons we standardize the data set: [[xyxy]]. Some computations takes place on the standardized copy [[xyxy]] of [[xy]]. <>= xym<-apply(xy,2,mean); xysd<-apply(xy,2,sd) xyxy<-cbind((xy[,1]-xym[1])/xysd[1],(xy[,2]-xym[2])/xysd[2]) @ For each data point we compute the directions to all the points and determine the angles of the directions. This information helps us to find the h-depths of the points. For friends of complexity: the angles between all pair of points are computed in $O(n^2 \log n)$ time because of sorting the columns of a $(n\times n)$-matrix. The angle between identical points is coded by entry 1000. <>= dx<-(outer(xy[,1],xy[,1],"-")) dy<-(outer(xy[,2],xy[,2],"-")) alpha<-atan2(y=dy,x=dx); diag(alpha)<-1000 for(j in 1:n) alpha[,j]<-sort(alpha[,j]) alpha<-alpha[-n,] ; m<-n-1 ## quick look inside, just for check if(debug.plots=="all"){ plot(xy,bty="n"); xdelta<-abs(diff(range(xy[,1]))); dx<-xdelta*.3 for(j in 1:n) { p<-xy[j,]; dy<-dx*tan(alpha[,j]) segments(p[1]-dx,p[2]-dy,p[1]+dx,p[2]+dy,col=j) text(p[1]-xdelta*.02,p[2],j,col=j) } } if(verbose) print("end of computation of angles") @ We compute the h-depths in $O(n^2 \log(n))$. The [[NaN]] angles are extracted because they indicate points with identical coordinates. For each point we find the h-depth by the following algorithm: At first we count the number of angles of the actual point within interval $[0, \pi)$. This is equivalent to the number of points above the actual point. Then we rotate the $y=0$-line counterclockwise and increment the initial counter if an additional point emerges and we decrement the counter if a point / angle leaves the halve plain. @ The median is defined as the gravity center of all points with maximal h-depth. @ As usually some problems were induced by equality of angles. One reaction was to add some shift to compare with slightly modified $\pi$-values. <>= hdepth<-rep(0,n); dpi<-2*pi-0.000001; mypi<-pi-0.000001 minusplus<-c(rep(-1,m),rep(1,m)) if(FALSE){ for(j in 1:n) { a<-alpha[,j]+pi; h<-a<10; a<-a[h]; init<-sum(a < mypi) # hallo a.shift<-(a+pi) %% dpi minusplus<-c(rep(-1,length(a)),rep(1,length(a))) ## 070824 h<-cumsum(minusplus[order(c(a,a.shift))]) hdepth[j]<-init+min(h)+1 # or do we have to count identical points? # hdepth[j]<-init+min(h)+sum(xy[j,1]==xy[,1] & xy[j,2]==xy[,2]) } } <> hdepth <- find.hdepths(xy,181*precision) if(verbose){print("end of computation of hdepth:"); print(hdepth)} ## quick look inside, just for a check if(debug.plots=="all"){ plot(xy,bty="n") xdelta<-abs(diff(range(xy[,1]))); dx<-xdelta*.1 for(j in 1:n) { a<-alpha[,j]+pi; a<-a[a<10]; init<-sum(a < pi) a.shift<-(a+pi) %% dpi minusplus<-c(rep(-1,length(a)),rep(1,length(a))) ## 070824 h<-cumsum(minusplus[ao<-(order(c(a,a.shift)))]) no<-which((init+min(h)) == (init+h))[1] p<-xy[j,]; dy<-dx*tan(alpha[,j]) segments(p[1]-dx,p[2]-dy,p[1]+dx,p[2]+dy,col=j,lty=3) dy<-dx*tan(c(sort(a),sort(a))[no]) segments(p[1]-5*dx,p[2]-5*dy,p[1]+5*dx,p[2]+5*dy,col="black") text(p[1]-xdelta*.02,p[2],hdepth[j],col=1) # cex=2.5 assumes suitable fonts } } @ Because of numerical problem we introduce a alternative way to compute the H-depths by function [[find.hdepths]]. <>= find.hdepths <- function(xy, number.of.directions=181){ # 121126 <> <> hd } @ <>= xy <- as.matrix(xy) for( j in 1:2) { xy[,j] <- xy[,j] - min(xy[,j]) if( 0 < (h <- max(xy[,j]))) xy[,j] <- xy[,j] / max(xy[,j]) } @ It is not faster to change the for loop in the following chunk by a vector solution. Maybe the management of the storage costs a lot of time. Besides the loop construction has the advantage of clarity. <>= phi <- c(seq(0,180,length=number.of.directions)[-1]*(2*pi/360)) sinphi <- c(sin(phi),1); cosphi <- c(cos(phi),0) RM1 <- round(digits=6,rbind(cosphi,sinphi)) hd <- rep(h<-length(xy[,1]),h) for( j in seq(along=sinphi)){ xyt <- xy %*% RM1[,j] hd <- pmin(hd,rank(xyt,ties.method="min"), rank(-xyt,ties.method="min")) } # xyt <- xy %*% RM1 # hd2 <- cbind(apply(xyt, 2, rank, ties.method="min"), # apply(-xyt,2, rank, ties.method="min")) # hd2 <- apply(hd2, 1, min) @ To find the h-depths of some test points [[tp]] we use the same idea. After some standardizations we compute the projection of the data points and the testpoints onto several linear lines. Then we look at the ranks of the vector found by combining the mappings of [[xy]] and [[tp]] and correct the ranks of [[tpt]] by substracting its ranks computed without [[xyt]]. The results shows us a one sided depth information. To find the desired h-depths we have to repeat the process by looking from the other side. This is performed by taking the negative vectors of [[xyt]] and [[tpt]]. A p-minimization of all vectors of all the directions finishes the computation. <>= find.hdepths.tp <- function(tp, data, number.of.directions=181){ # 121130 ## standardize dimensions ## xy <- as.matrix(data); tp <- as.matrix(rbind(tp)); n.tp <- dim(tp)[1] for( j in 1:2) { xy[,j] <- xy[,j] - (h <- min(xy[,j], na.rm=TRUE)) tp[,j] <- tp[,j] - h if( 0 < (h <- max(xy[,j], na.rm=TRUE))){ xy[,j] <- xy[,j]/h; tp[,j] <- tp[,j]/h } } ##loop over directions## phi <- c(seq(0,180,length=number.of.directions)[-1]*(2*pi/360)) sinphi <- c(sin(phi),1); cosphi <- c(cos(phi),0) RM1 <- round(digits=6,rbind(cosphi,sinphi)) hdtp <- rep(length(xy[,1]),length(tp[,1])) for( j in seq(along=sinphi)){ #print(j) xyt <- xy %*% RM1[,j]; tpt <- (tp %*% RM1[,j])[] xyt <- xyt[!is.na(xyt)] #; tpt <- sort(tpt) hdtp <- pmin(hdtp,(rank( c(tpt,xyt), ties.method="min"))[1:n.tp] -rank( tpt,ties.method="min") ,rank(-c(tpt,xyt), ties.method="min")[1:n.tp] -rank(-tpt,ties.method="min") ) } hdtp } @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% We determine the h-depth $k$ so that the following condition holds: \\ (the number of points of h-depth greater or equal $k$ is lower or equal to the number of data points staying in the bag) and (the number of points of h-depth greater equal $k-1$ is greater $n/2$): \[ %% \#D_k \le \mbox{points in the bag:} n/2 < \#D_{k-1}. \#D_{k-1} > \mbox{points in the bag:} n/2 \ge \#D_{k}. % outer bag inner \] %% next greater polygon laying more outer with lower depth Dk.1 contains more than n/2 points %% inner polygon with greater depth Dk contains contains floor(n/2) or fewer points %% 121026 We assume that in the bag are [[floor(n/2)]] points. In a bagplot we have usually to interpolated between two regions of depths. But, what should we do if there are no points in the inner region? a) interpolate with the center as a symbolic in polygon, b) choose the outer polygon In boxplots we can get more than [[floor(n/2)]] points in the box (including the edge) if there are ties in the region of the quartiles: Ties will be ignored. Therefore, in the strange case that $D_k$ with maximal $k$ is greater than $n/2$ the condition cannot be fullfilled and we take the maximal $k$ to define the bag. [[k.1]] is the row of [[d.k]] with depth [[ d.k[ k.1, 2] ]] that contains [[ d.k[ k.1, 2] ]] points that are more than the bag should contain. The polygon with depth [[ k=k.1+1 ]] will contain [[points.in.bag]] or fewer points. % For debugging reasons you may remove the comment sign in the last line % and can use the global variables. <>= hd.table<-table(sort(hdepth)) d.k<-cbind(dk=rev(cumsum(rev(hd.table))), k =as.numeric(names(hd.table))) k.1<-sum( points.in.bag < d.k[,1] ) # if(nrow(d.k)>1){ # version 09/2005, error in data set 1 of Meuleman # instead of >2 now >k.1 # 070827 # if(nrow(d.k)>k.1){ k<-d.k[k.1+1,2] } else { k<-d.k[k.1,2] } # this statement will not have an effect because of the next one: k<-d.k[k.1,2]+1 # 121004 increment depth by one not by looking for next depth if(verbose){cat("numbers of members of dk:"); print(hd.table); print(d.k)} if(verbose){cat("end of computation of k, k=",k,"k.1:",k.1)} # D.K<<-d.k; K.1<<-k.1; EX<<-exp.dk; EX.1<<-exp.dk.1; PDK<<-pdk; HDEPTH<<-hdepth @ \subsection{Find the center of the data set} The two dimensional median is the center of gravity of the polygon of the points (not data points) with maximal h-depths. We check some inner test points to find the maximal h-depth. Then we look for the boundery of the area of points with this h-depth. @ This procedure has been tested with the Ben Greiner data using: <> @ <>= center<-apply(xy[which(hdepth==max(hdepth)),,drop=FALSE],2,mean) hull.center<-NULL if(30){ n.p<-floor(1.5*c(32,16,8)[1+(n>50)+(n>200)]*precision) # limit.hdepth.to.check <- sort(hdepth, decreasing = TRUE)[min(nrow(xy),6)] # 121126 h <- unique(sort(hdepth, decreasing = TRUE)) limit.hdepth.to.check <- sort(h)[min(length(h),3)] h<-cands<-xy[limit.hdepth.to.check <= hdepth,,drop=FALSE] # h<-cands<-xy[rev(order(hdepth))[1:(min(nrow(xy),6))],] cands<-cands[chull(cands[,1],cands[,2]),]; n.c<-nrow(cands) if(is.null(n.c))cands<-h <> # if max of testpoint is smaller than max depth of points take that max! if(verbose){ cat("depth of testpoints"); print(summary(tphdepth)) } # 121126 tphdepth<-max(tphdepth,d.k[,2]) # 121004 <> if(verbose){cat("hull.center",hull.center); print(table(tphdepth)) } } # if(verbose) cat("center depth:",hdepth.of.points(rbind(center))-1) if(verbose) cat("center depth:",find.hdepths.tp(rbind(center),xy)-1) if(verbose){print("end of computation of center"); print(center)} @ We check points of a rectangular field and compute their depths. If these points should be plotted for debugging issues remove the comment sign of the last line of the following chunk and activate the statement [[ points(TP,pch = letters[TPD]) ]] after [[bagplot()]] has finished. <>= xyextr<-rbind(apply(cands,2,min),apply(cands,2,max)) ## xydel<-2*(xyextr[2,]-xyextr[1,])/n.p # unused if( (xyextr[2,1]-xyextr[1,1]) < 0.2*(h <- diff(range(xy[,1])))){ xyextr[1:2,1] <- mean(xyextr[,1]) + c(-.1,.1) * h } ## 121203 if( (xyextr[2,2]-xyextr[1,2]) < 0.2*(h <- diff(range(xy[,2])))){ xyextr[1:2,2] <- mean(xyextr[,2]) + c(-.1,.1) * h } ## 121203 if(verbose){cat("xyextr: looking for maximal depth"); print(xyextr) } h1<-seq(xyextr[1,1],xyextr[2,1],length=n.p) h2<-seq(xyextr[1,2],xyextr[2,2],length=n.p) tp<-cbind(as.vector(matrix(h1,n.p,n.p)), # [1:n.p^2], as.vector(matrix(h2,n.p,n.p,TRUE))) # [1:n.p^2]) # tphdepth<-max(hdepth.of.points(tp))-1 tphdepth<-max(find.hdepths.tp(tp,xy)) # if(verbose) { TP<<-tp; TPD<<-find.hdepths.tp(tp,xy) } if(verbose) cat("points(TP,pch=c(letters,LETTERS)[TPD+1])") @ For finding the area of maximal h-depth we use an algorithm that has been implemented for finding the bag, see below. <> Due to computational problems it may be happen that there are NAs in [[hull.center]]. Then will take the [[center]] computed before as center polygon. <>= <> kkk<-tphdepth if(verbose){cat("max-hdepth found:"); print(kkk)} if(verbose) cat("find polygon with max depth") <> hull.center<-cbind(pg[,1]*xysd[1]+xym[1],pg[,2]*xysd[2]+xym[2]) if(!any(is.na(hull.center))) center<-find.polygon.center(hull.center) else hull.center <- rbind(center) # 121126 if(verbose){ cat("CENTER"); print(center) } @ \paragraph{A function to compute the center of gravity of a polygon.} The function [[find.polygon.center]] determines the center of gravity of a polygon. <>= find.polygon.center<-function(xy){ ## if(missing(xy)){n<-50;x<-rnorm(n);y<-rnorm(n); xy<-cbind(x,y)} ## xy<-xy[chull(xy),] if(length(xy)==2) return(xy[1:2]) if(nrow(xy)==2) return(colMeans(xy)) ## 121009 ## partition polygon into triangles n<-length(xy[,1]); mxy<-colMeans(xy) xy2<-rbind(xy[-1,],xy[1,]); xy3<-cbind(rep(mxy[1],n),mxy[2]) ## determine areas and centers of gravity of triangles S<-(xy+xy2+xy3)/3 F2<-abs((xy[,1]-xy3[,1])*(xy2[,2]-xy3[,2])- (xy[,2]-xy3[,2])*(xy2[,1]-xy3[,1])) ## compute center of gravity of polygon lambda<-F2/sum(F2) SP<-colSums(cbind(S[,1]*lambda,S[,2]*lambda)) return(SP) } @ We compute the convex hull of $D_k$: polygon [[pdk]] and the hull of $D_{k-1}$: polygon [[pdk.1]]. % For simplification both of them are centered in (0,0). % [[ai]] will be assigned the angles of points of the inner polygon: % angle( point, $(0,0)$, $(1,0)$ ). % [[ao]] is assigned the angles of points of the outer polygon. %To get both polygons counter clockwise they are sorted %twice. (This is a little bit time consuming but not critical.) [[pdk]] represents inner polygon and [[pdk.1]] outer one. Then polygon [[pdk]] and [[pdk.1]] are enlarged without changing its h-depth: [[exp.dk]], [[exp.dk.1]]- <>= # inner hull of bag xyi<-xy[hdepth>=k,,drop=FALSE] # cat("dim XYI", dim(xyi)) # 121028 some corrections for strange k situations if(0 < length(xyi)) pdk<-xyi[chull(xyi[,1],xyi[,2]),,drop=FALSE] # outer hull of bag if( k > 1 ){ xyo<-xy[hdepth>=(k-1),,drop=FALSE] pdk.1<-xyo[chull(xyo[,1],xyo[,2]),,drop=FALSE] } else pdk.1 <- pdk if(0 == length(xyi)) pdk <- pdk.1 if(verbose)cat("hull computed: pdk, pdk.1:") if(verbose){print(pdk); print(pdk.1) } if(debug.plots=="all"){ plot(xy,bty="n") h<-rbind(pdk,pdk[1,]); lines(h,col="red",lty=2) h<-rbind(pdk.1,pdk.1[1,]);lines(h,col="blue",lty=3) points(center[1],center[2],pch=8,col="red") } exp.dk<-expand.hull(pdk,k) exp.dk.1<-expand.hull(exp.dk,k-1) # pdk.1,k-1,20) @ The new approach to find the hull works as follows: For a given $k$ we move lines with different slopes from outside of the cloud to the center and stop if $k$ points are crossed. To keep things simple we rotate the data points so that we have only move a vertical line. \begin{enumerate} \item define directions / angles for hdepth search \item standardize data set to get appropiate directions \item computation of $D_k$ polygon and restandardization \item computation of $D_{k-1}$ polygon and restandardization \end{enumerate} We determine the hulls on the base of the standardized data [[xyxy]]. <>= <> # standardization of data set xyxy is used kkk<-k if(verbose) print("find polygon with depth something higher than that of the bag") if( kkk <= max(d.k[,2]) ){ # inner one # 121030 <> exp.dk<-cbind(pg[,1]*xysd[1]+xym[1],pg[,2]*xysd[2]+xym[2]) } else { exp.dk <- NULL } if( 1 < kkk ) kkk<-kkk-1 # outer one if(verbose) print("find polygon with depth a little bit lower than that of the bag") <> exp.dk.1<-cbind(pg[,1]*xysd[1]+xym[1],pg[,2]*xysd[2]+xym[2]) if(is.null(exp.dk)) exp.dk <- exp.dk.1 # EX.1 <<- exp.dk.1; EX <<- exp.dk if(verbose) print("End of find hulls, method two") @ The polygon for h-depth $kkk$ is constructed in a loop. In each step we consider one direction / angle. <>= <> if(verbose) cat("start of computation of the directions: ","kkk=",kkk) # 121030 for(ia in seq(angles)[-1]){ <> } # if(verbose) PG <<- pg; PGL <<- pgl if(2> } else { if(2>= # determine critical points pnew and pnewl of direction a # if(verbose) cat("ia",ia,angles[ia]) # 121030 a<-angles[ia]; angtan<-ang[ia]; xyt<-xyxy%*%c(cos(a),-sin(a)); xyto<-order(xyt) ind.k <-xyto[kkk]; ind.kk<-xyto[n+1-kkk]; pnew<-xyxy[ind.k,]; pnewl<-xyxy[ind.kk,] # if(verbose) if( 1 < sum(xyt == xyt[ind.k]) )print("WARNING: some points identical") if(debug.plots=="all") points(pnew[1],pnew[2],col="red") # new limiting lines are defined by pnew / pnewl and slope a # find segment of polygon that is cut by new limiting line and cut # if(ia>200) { ##; points(pnew[1],pnew[2],col="magenta",cex=6) } if( abs(angtan)>1e10){ if(verbose) cat("kkk",kkk,"x=c case") # case of vertical slope #print(pg);print(pnew);print(xyt);lines(pg,col="red",lwd=3) # number of points left of point pnew that limit the polygon pg.no<-sum(pg[,1]=pnewl[1]) if( 0 < pg.nol ){ ##??2 # 121204 cutpl<-c(pnewl[1],pgl[pg.nol,2]+pgl[pg.nol,3]*(pnewl[1]-pgl[pg.nol,1])) pgl<-rbind(pgl[1:pg.nol,],c(cutpl,angtan),c(cutpl[1]-dxy, cutpl[2]-angtan*dxy,NA)) } else { if(verbose) cat("!!! case degenerated LOWER polygon: pgl.no==0") pgl <- rbind(pgl[1,], c(pgl[2,1:2],NA)) } }else{ # if(verbose) cat("kkk",kkk,"normal case") # normal case upper polygon pg.inter<-pg[,2]-angtan*pg[,1]; pnew.inter<-pnew[2]-angtan*pnew[1] pg.no<-sum(pg.interpnew.interl) if(is.na(pgl[pg.nol,3])) pgl[pg.nol,3] <- Inf # 121129 NaN/Na error cutpl<-cut.p.sl.p.sl(pnewl,angtan,pgl[pg.nol,1:2],pgl[pg.nol,3]) pgl<-rbind(pgl[1:pg.nol,],c(cutpl,angtan),c(cutpl[1]-dxy, cutpl[2]-angtan*dxy,NA)) } ## if(kkk==KKK && ia == 51) { cat("ENDE: pgl"); print(pgl) } # update pg, pgl completed # PG<<-pg;PG.NO<<-pg.no;CUTP<<-cutp;DXY<<-dxy;PNEW<<-pnew;PGL<<-pgl;PG.NOL<<-pg.nol <> ##show pg pgl## @ For debugging it may be helpful to plot the polygons [[pg]] and [[pgl]]. Also the slope stored in the third column of matrix [[pg]] and [[pgl]]. The code chunk can be placed at aby point of interest. <>= plot(rbind(pg,pgl)[,-3],xlab="",ylab="",xlim=2*c(-1,1),ylim=3*c(-1,1),type="n") lines(pg[,-3],col="orange",type="b"); lines(pgl[,-3],col="lightblue",type="b") nnn <- length(pg [,1]); points(pg [,-3],col="red", pch=as.character(1:nnn),cex=2) nnn <- length(pgl[,1]); points(pgl[,-3],col="blue",pch=as.character(1:nnn),cex=2) title(as.character(ia),sub=paste("kkk=",kkk)) segments(pg[,1], pg[,2], pg [,1]+1,pg [,2]+pg [,3],lty=3,col="red",lwd=3) segments(pgl[,1],pgl[,2],pgl[,1]-1,pgl[,2]-pgl[,3],lty=3,col="blue",lwd=3) @ To initialize the loop we construct the first polygons (upper one: [[pg]], lower one: [[pgl]]) by vertical lines. [[dxdy]] is a step that is larger than the range of the standardized data set. <>= ia<-1; a<-angles[ia]; xyt<-xyxy%*%c(cos(a),-sin(a)); xyto<-order(xyt) # initial for upper part ind.k<-xyto[kkk]; cutp<-c(xyxy[ind.k,1],-10) dxy<-diff(range(xyxy)) pg<-rbind(c(cutp[1],-dxy,Inf),c(cutp[1],dxy,NA)) # initial for lower part ind.kk<-xyto[n+1-kkk]; cutpl<-c(xyxy[ind.kk,1],10) # pgl<-rbind(c(cutpl[1],dxy,Inf),c(cutpl[1],-dxy,NA)) pgl<-rbind(c(cutpl[1],dxy,-Inf),c(cutpl[1],-dxy,NA)) # the sign of inf doesn't matter <> @ It is necessary to initialize the angles of the directions. If the data set is very large we will check fewer directions than in case of a small data set. If the data set is small the choice of the angles may be improved by using the observed angles defined by the slopes of lines running through the pairs of the points. <>= # define direction for hdepth search num<-floor(2*c(417,351,171,85,67,43)[sum(n>c(1,50,100,150,200,250))]*precision) num.h<-floor(num/2); angles<-seq(0,pi,length=num.h) ang<-tan(pi/2-angles) @ The combination of the polygons is a little bit complicated because sometimes at the right and at left margin an additional intersection point has to be computed and integrated. [[l]] in front of a variable name indicates the left margin whereas the right one is coded by [[r]]. Letter [[l]] ([[u]]) at the end of a name is short for lower and upper. AJS found an error that was caused by a wrong reduction of [[pgl]]. Because of the orientation of [[pgl]] which is the other way round we have to copy the last point and not the first one. @ <>= ## plot(xyxy[,1:2],xlim=c(-.5,+.5),ylim=c(-.5,.50)) ## lines(pg,type="b",col="red"); lines(pgl,type="b",col="blue") ## remove first and last points and multiple points ## limit<-1e-10 ## pg <-pg [c(TRUE,(abs(diff(pg [,1]))>limit)|(abs(diff(pg [,2]))>limit)),] old# idx <- c(TRUE,(abs(diff(pg [,1]))>limit)|(abs(diff(pg [,2]))>limit)) # 121008 if(any(idx==FALSE)){ pg <-pg[idx,]; pg[,3] <- c(diff(pg[,2])/diff(pg[,1]), NA) } # old reduction which caused some errors: ## pgl<-pgl[c(TRUE,(abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit)),] error## ## pgl<-pgl[c( (abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit),TRUE),] old# idx <- c( (abs(diff(pgl[,1]))>limit)|(abs(diff(pgl[,2]))>limit),TRUE)#121008 if(any(idx==FALSE)){ pgl<-pgl[idx,]; pgl[,3] <- c(diff(pgl[,2])/diff(pgl[,1]), NA) } ## add some tolerance in course of numerical problems pgl[,2]<-pgl[,2] - .00001 ## 121004 ## show pg pgl>> pg<- pg [-nrow(pg ),][-1,,drop=FALSE] pgl<-pgl[-nrow(pgl),][-1,,drop=FALSE] # determine position according to the other polygon # cat("relative position: lower polygon") indl<-pos.to.pg(round(pgl,digits=10),round(pg,digits=10)) # 121126 # cat("relative position: upper polygon") indu<-pos.to.pg(round(pg,digits=10),round(pgl,digits=10),TRUE) sr<-sl<-NULL # ; ##show pg pgl>> # right region if(indu[(npg<-nrow(pg))]=="lower" & indl[1]=="higher"){ # cat("in if of right region: the upper polynom is somewhere lower") # checking from the right: last point of lower polygon that is NOT ok rnuml<-which(indl=="lower")[1]-1 # checking from the left: last point of upper polygon that is ok rnumu<-npg+1-which(rev(indu=="higher"))[1] # special case all points of lower polygon are upper if(is.na(rnuml)) rnuml<-sum(pg[rnumu,1]>= ######################################### #### cat("angtan",angtan,"pg.no",pg.no,"pkt:",pnew) # if(ia==stopp) lines(pg,type="b",col="green") if(debug.plots=="all"){ points(pnew[1],pnew[2],col="red") hx<-xyxy[ind.k,c(1,1)]; hy<-xyxy[ind.k,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) # text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) # print(pg) # if(ia==stopp) lines(pgl,type="b",col="green") points(cutpl[1],cutpl[2],col="red") hx<-xyxy[ind.kk,c(1,1)]; hy<-xyxy[ind.kk,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) # text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) # print(pgl) } @ <>= if(debug.plots=="all"){ plot(xyxy,type="p",bty="n") text(xy,,1:n,col="blue") hx<-xy[ind.k,c(1,1)]; hy<-xy[ind.k,c(2,2)] segments(hx,hy,c(10,-10),hy+ang[ia]*(c(10,-10)-hx),lty=2) text(hx+rnorm(1,,.1),hy+rnorm(1,,.1),ia) } @ \subsection{Finding of the bag} To find the bag the function [[expand.hull]] computes not an exact solution but a numerical approximation. [[k.1]] indicates the polygon ([[exp.dk.1]]) with h-depth $(k-1)$. [[k.1+1]] will usually point to h-depth $k$ (polygon: [[exp.dk]]), to the inner polygon. In computing $\lambda$ we follow Miller et al. (1999). They define $\lambda$ as the relative distance from the bag to the inner contour and they compute it \emph{by $\lambda=(50-J)/(L-J)$, where $D_k$ contains $J$\% of the original points and $D_{k-1}$ contains $L$\% of the original points:} \[ \lambda=\frac{50-J}{L-J}=\frac{n/2-\#D_k}{\#D_{k-1}-\#D_k}= \frac{\mbox{number in bag}-\mbox{number in inner contour}} {\mbox{number in outer contour}-\mbox{number in inner contour}} \] If bag and inner contour is identical then $\lambda\leftarrow 0$. [[k.1]] is the number of the rows of [[d.k]] that represent points within the bag / h-depths greater $n/2$. <>= # if(max(d.k[,2])==k.1||nrow(d.k)==1) lambda<-0 else { # 121027 if(nrow(d.k)==k.1 || nrow(d.k)==1) lambda<-0 else { # 121126 ind <- sum(d.k[,2] <= k.1) # complicated, may be wrong in case of missing depths ind <- k.1 # 121123 ndk.1 <- d.k[ ind, 1] ndk <- d.k[ ind+1, 1] # number inner # (halve - number inner)/(number outer - number inner) lambda <-(n/2-ndk) /(ndk.1 - ndk) # lambda<-(n/2-d.k[k.1+1,1]) /(d.k[k.1,1]-d.k[k.1+1,1]) # old # cat(n/2, ndk,ndk.1, "k.1",k.1,"ind",ind) } if(verbose) cat("lambda",lambda) @ The bag is constructed by lambda * outer polygon + (1-lambda)* inner polygon. In former versions it happened that some lines of [[h]] get [[NaN]] values because [[nrow(d.k)==2]] and [[k.1==2]] (e.g. example of Wouter Meuleman). This problem doesn't occur no longer but to be sure we have an additional look at [[h]]. @ <>= cut.on.pdk.1<-find.cut.z.pg(exp.dk, exp.dk.1,center=center) # print("HALLO"); print(cut.on.pdk.1) cut.on.pdk <-find.cut.z.pg(exp.dk.1,exp.dk, center=center) # expand inner polgon exp.dk h1<-(1-lambda)*exp.dk+lambda*cut.on.pdk.1 # shrink outer polygon exp.dk.1 h2<-(1-lambda)*cut.on.pdk+lambda*exp.dk.1 h<-rbind(h1,h2); h<-h[!is.nan(h[,1])&!is.nan(h[,2]),] hull.bag<-h[chull(h[,1],h[,2]),] # if(verbose){ # plot(xy); lines(exp.dk,col="red"); lines(exp.dk.1,col="blue"); # segments(cut.on.pdk[,1],cut.on.pdk[,2],exp.dk.1[,1],exp.dk.1[,2],col="red") # segments(cut.on.pdk.1[,1],cut.on.pdk.1[,2],exp.dk[,1],exp.dk[,2],col="blue",lwd=3) # points(cut.on.pdk.1,col="blue"); cat("cut.on.pdk.1"); print(cut.on.pdk.1) # points(cut.on.pdk,col="red"); cat("cut.on.pdk"); print(cut.on.pdk) # lines(hull.bag,col="green") # } if(verbose)cat("bag completed:") #if(verbose) print(hull.bag) if(debug.plots=="all"){ lines(hull.bag,col="red") } @ \subsection{Computation of the loop} The loop is found by expanding [[hull.bag]] by factor [[factor]]. <>= hull.loop<-cbind(hull.bag[,1]-center[1],hull.bag[,2]-center[2]) hull.loop<-factor*hull.loop hull.loop<-cbind(hull.loop[,1]+center[1],hull.loop[,2]+center[2]) if(verbose) cat("loop computed") @ Now we identify the points of the bag, the outliers and the outer points. Remark: There may be some points of h-depth $(k-1)$ that are members of the bag. If the data set is very large we will not check whether the h-depth $(k-1)$ points are in the bag. <>= if(!very.large.data.set){ pxy.bag <-xydata[hdepth>= k ,,drop=FALSE] pkt.cand <-xydata[hdepth==(k-1),,drop=FALSE] pkt.not.bag<-xydata[hdepth< (k-1),,drop=FALSE] if( 0 < length(pkt.cand) && 0 < length(hull.bag) ){ outside<-out.of.polygon(pkt.cand,hull.bag) if(sum(!outside)>0) pxy.bag <-rbind(pxy.bag, pkt.cand[!outside,]) if(sum( outside)>0) pkt.not.bag<-rbind(pkt.not.bag, pkt.cand[ outside,]) } }else { extr<-out.of.polygon(xydata,hull.bag) pxy.bag <-xydata[!extr,] pkt.not.bag<-xydata[extr,,drop=FALSE] } if(length(pkt.not.bag)>0){ extr<-out.of.polygon(pkt.not.bag,hull.loop) pxy.outlier<-pkt.not.bag[extr,,drop=FALSE] if(0==length(pxy.outlier)) pxy.outlier<-NULL pxy.outer<-pkt.not.bag[!extr,,drop=FALSE] }else{ pxy.outer<-pxy.outlier<-NULL } if(verbose) cat("points of bag, outer points and outlier identified") @ The points of the hull of the loop are stored in [[hull.loop]]. <>= hull.loop<-rbind(pxy.outer,hull.bag) hull.loop<-hull.loop[chull(hull.loop[,1],hull.loop[,2]),] if(verbose) cat("end of computation of loop") @ \subsection{The definition of [[plot.bagplot]]} Finally we have to draw the bagplot. This job is managed by a new plot method. <>= plot.bagplot<-function(x, show.outlier=TRUE,# if TRUE outlier are shown show.whiskers=TRUE, # if TRUE whiskers are shown show.looppoints=TRUE, # if TRUE points in loop are shown show.bagpoints=TRUE, # if TRUE points in bag are shown show.loophull=TRUE, # if TRUE loop is shown show.baghull=TRUE, # if TRUE bag is shown add=FALSE, # if TRUE graphical elements are added to actual plot pch=16,cex=.4, # to define further parameters of plot verbose=FALSE, # tools for debugging col.loophull="#aaccff", # Alternatives: #ccffaa, #ffaacc col.looppoints="#3355ff", # Alternatives: #55ff33, #ff3355 col.baghull="#7799ff", # Alternatives: #99ff77, #ff7799 col.bagpoints="#000088", # Alternatives: #008800, #880000 transparency=FALSE, show.center = TRUE, ... ){ if(missing(x)) return(<>) # transparency flag and color flags have been proposed by wouter if (transparency==TRUE) { col.loophull = paste(col.loophull, "99", sep="") col.baghull = paste(col.baghull, "99", sep="") } <> <> <> <> #090216 bagplotobj<-x for(i in seq(along=bagplotobj)) eval(parse(text=paste(names(bagplotobj)[i],"<-bagplotobj[[",i,"]]"))) if(is.one.dim){ <> } else { <> } } @ % 090216 To prevent "no visible binding" messages during the package building we initialize all variable that may be referenced. The following list shows the elements of a bagplot object (copied from [[compute.bagplot]]). <>= center<-hull.center<-hull.bag<-hull.loop<-pxy.bag<-pxy.outer<-pxy.outlier<-NULL # random.seed <- hdepths<-is.one.dim<-prdata<-xy<-xydata<-exp.dk<-exp.dk.1<-hdepth<-NULL tphdepth<-tp<-NULL @ The following elements allows us to draw the bagplot: [[xydata]] (data set), [[xy]] (sample of data set), [[hdepth]] (location depth of data points in xy), [[hull.loop]] (points of polygon that define the loop), [[hull.bag]] (points of polygon that define the bag), [[hull.center]] (region of points with maximal ldepth), [[pxy.outlier]] (outlier), [[pxy.outer]] (outer points), [[pxy.bag]] (points in bag), [[center]] (Tukey median), [[is.one.dim]] is TRUE if data set is one dimensional, [[prdata]] result of PCA @ <>= if(!add) plot(xydata,type="n",pch=pch,cex=cex,bty="n",...) if(verbose) text(xy[,1],xy[,2],paste(as.character(hdepth))) # cex=2 needs fonts # loop: ------------------------------------------------------ if(show.loophull){ # fill loop h<-rbind(hull.loop,hull.loop[1,]); lines(h[,1],h[,2],lty=1) polygon(hull.loop[,1],hull.loop[,2],col=col.loophull) } if(show.looppoints && 0 < length(pxy.outer)){ # points in loop points(pxy.outer[,1],pxy.outer[,2],col=col.looppoints,pch=pch,cex=cex) } # bag: ------------------------------------------------------- if(show.baghull && 0 < length(hull.bag)){ # fill bag h<-rbind(hull.bag,hull.bag[1,]); lines(h[,1],h[,2],lty=1) polygon(hull.bag[,1],hull.bag[,2],col=col.baghull) } if(show.bagpoints && 0 < length(pxy.bag)){ # points in bag points(pxy.bag[,1],pxy.bag[,2],col=col.bagpoints,pch=pch,cex=cex) } # whiskers if(show.whiskers && 0 < length(pxy.outer)){ debug.plots<-"not" if((n<-length(xy[,1]))<15){ segments(xy[,1],xy[,2],rep(center[1],n),rep(center[2],n), col="red") }else{ pkt.cut<-find.cut.z.pg(pxy.outer,hull.bag,center=center) segments(pxy.outer[,1],pxy.outer[,2],pkt.cut[,1],pkt.cut[,2], col="red") } } # outlier: -------------------------------------------------- if(show.outlier && 0 < length(pxy.outlier)){ # points in loop points(pxy.outlier[,1],pxy.outlier[,2],col="red",pch=pch,cex=cex) } # center: if(exists("hull.center") && 2 < length(hull.center) && show.center){ #190715 h<-rbind(hull.center,hull.center[1,]); lines(h[,1],h[,2],lty=1) polygon(hull.center[,1],hull.center[,2],col="orange") } if(!is.one.dim && show.center) points(center[1],center[2],pch=8,col="red") #190715 if(verbose && 0 < length(exp.dk.1) ){ h<-rbind(exp.dk,exp.dk[1,]); lines(h,col="blue",lty=2) h<-rbind(exp.dk.1,exp.dk.1[1,]); lines(h,col="black",lty=2, lwd=3) if(exists("tphdepth") && 0>= if(!verbose) cat("data set one dimensional") # 121202 ROT<-round(prdata[[2]],digits=5); IROT<-round(solve(ROT),digits=5) if(!add){ ## 121008 ## 121130 plot(xydata,type="n",bty="n",pch=16,cex=1, ...) # xlim=xlim, ylim=ylim, ...) } # find five points for box and whiskers usr <- par()$usr; xlim <- usr[1:2]; ylim <- usr[3:4] mins <- usr[c(1,3)]; ranges <- usr[c(2,4)] - mins if(ROT[1,1]==0){ # cat("FALL senkrecht") xydata <- cbind( mean(usr[1:2]) ,xydata[,2]) boxplotres<-boxplot(xydata[,2],plot=FALSE) five<-cbind(mean(usr[1:2]),boxplotres$stat) dx <- 0.1*(xlim[2]-xlim[1]); dy <- 0 idx.out <- if(0>= <> @ \subsubsection{Extracting the R code file [[bagplot.R]]} <>= <> @ <>= tangleR("bagplot.rev",expand.roots="some functions for generating bagplots", expand.root.start=FALSE) @ \newpage @ \section{Pairs plot with bagplots} A simple application of bagplot is to used it within [[pairs()]] for the inspection of data matrices. In this section we present the high level routine [[pairs.bagplot()]] that allows some trimming of the data, too. <>= bagplot.pairs<- function(dm, trim = 0.0, main, numeric.only = TRUE, factor = 3, approx.limit = 300, pch = 16, cex = 0.8, precision = 1, col.loophull = "#aaccff", col.looppoints = "#3355ff", col.baghull = "#7799ff", col.bagpoints = "#000088", ...){ if(missing(main)) main <- paste(deparse(substitute(dm)),"/ trim =",round(trim,3)) if(length(trim) == 1) trim <- rep(trim, ncol(dm)) if(numeric.only){ dm <- dm[, idx <- sapply(1:ncol(dm), function(x) is.numeric(dm[,x]))] trim <- trim[idx] } for(j in 1:ncol(dm)){ x <- dm[,j] if(!is.numeric(x)) x <- as.numeric(x) if( trim[j] > 0) { na.idx <- is.na(x) xlim <- quantile(x[!na.idx], c(trim[j] , 1-trim[j])) x[ na.idx | x < xlim[1] | xlim[2] < x ] <- NA } dm[,j] <- x } # DM0 <<- dm h.fn <- function(x,y){ idx <- !is.na(x) & !is.na(y) x <- x[ idx ]; y <- y[ idx ] BP <- bagplot(x,y,add=TRUE,factor = factor, approx.limit = approx.limit, pch = pch, cex = cex, precision = precision, col.loophull = col.loophull, col.looppoints = col.looppoints, col.baghull = col.baghull, col.bagpoints = col.bagpoints, verbose=FALSE) # BP <<- BP # for debugging } par(mfrow=c(1,1)) pairs(dm, panel = h.fn, ...) mtext(main, line=2.5) dm } @ <>= <> @ <>= \name{bagplot.pairs} \alias{bagplot.pairs} \title{ \code{pairs} plot with bagplots } \description{ \code{bagplot.pairs} calls \code{pairs} and use bagplot() as panel function. It can be used for the inspection of data matrices. } \usage{ bagplot.pairs(dm, trim = 0.0, main, numeric.only = TRUE, factor = 3, approx.limit = 300, pch = 16, cex = 0.8, precision = 1, col.loophull = "#aaccff", col.looppoints = "#3355ff", col.baghull = "#7799ff", col.bagpoints = "#000088", ...) } \arguments{ \item{dm}{ datamatrix, columns contain values of the variables } \item{trim}{ fraction or vector of fractions of data points that should be removed from the variables before computing } \item{main}{ title of the plot } \item{numeric.only}{ if TRUE only numerical variables will be used. Otherwise an transformation to numeric will be performed.} \item{factor}{ see help of bagplot } \item{approx.limit}{ see help of bagplot } \item{pch}{ see help of bagplot } \item{cex}{ see help of bagplot } \item{precision}{ see help of bagplot } \item{col.loophull}{ see help of bagplot } \item{col.looppoints}{ see help of bagplot } \item{col.baghull}{ see help of bagplot } \item{col.bagpoints}{ see help of bagplot } \item{\dots}{ further arguments to be passed to \code{pairs} } } \details{ \code{bagplot.pairs} is a cover function which calls \code{pairs} and uses \code{bagplot} to display the data. } \value{ The data which has been used for the plot. } \author{Peter Wolf } \note{ Feel free to have a look inside of bagplot.pairs and to improve it according to your ideas. } \seealso{ \code{\link{bagplot}}, \code{\link{pairs}} } \examples{ ##---- Should be DIRECTLY executable !! ---- ##-- ==> Define data, use random, ##-- or do help(data=index) for the standard data sets. # bagplot.pairs(attitude) # bagplot.pairs(freeny) # bagplot.pairs(trees,col.baghull="green", col.loophull="lightgreen") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ misc } \keyword{ hplot } @ Here are some results of the examples: @ \begin{center}\includegraphics[height=10cm]{p2012-Nov27-173712}\end{center} %

@ @ \begin{center}\includegraphics[height=10cm]{p2012-Nov27-173732}\end{center} %

@ Some tests of function bagplot.pairs. <>= # remove "#" in next line to load frabo12 data # source("http://www.wiwi.uni-bielefeld.de/fileadmin/stat/wolf/data/frabo12.R") <> <> ## bagplot.pairs(frabo12[,40:48],trim=0,precision=1) # a lot of variables ## bagplot.pairs(frabo12[,43:47],trim=0,precision=1) # a subset of these variables ### bagplot(frabo12[,43:47][,c(4,1)],precision=1) ## comparison with single bagplot ### xy <- frabo12[,c(46,41)]; xy<-xy[!is.na(xy[,1]) & !is.na(xy[,2]), ]; xy<-xy[1:151,] ### bagplot(xy,verbose=TRUE,precision=precision,debug.plots="not all") ## bagplot.pairs(frabo12[,c(11,42,46)],trim=0.2,precision=1)[1:2,] ## bagplot.pairs(frabo12[,18:19],trim=0.2,precision=1)[1:2,] # 0 var in both variables ## bagplot.pairs(frabo12[,c(42,43)],trim=0.25,precision=1)[1:2,] # 0=var(Var1)&var(Var2) small ## bagplot.pairs(frabo12[,c(1,42)],trim=0.2) # few mass points ## DM <- bagplot.pairs(frabo12[,c(39,35)],trim=0.05,precision=1.5) # if(FALSE){ ## some one dimensional material par(mfrow=c(2,2)) bagplot(x=(rnorm(101)*0-50+c(1:100,200))*100,y=(-50+1*c(1:100,200))*.100,verbose=FALSE) bagplot(x=-50+c(1:100,190),y=50-1*c(1:100,190),verbose=FALSE) bagplot(x=-50+c(1:100),y=50-1*c(1:100),verbose=FALSE) bagplot(x=50+c(1:100),y=501*c(1:100),verbose=FALSE) par(mfrow=c(1,1)) } ## bagplot.pairs(frabo12[,c(1,42)],trim=0.2) ### one dimensional data sets: ## bagplot.pairs(cbind(c(n[-1],300),c(n[-1],300),frabo12[,c(22,19,38)]), ## trim=trim,precision=1)[1:2,] ## bagplot.pairs(frabo12[,c(22,38,19)],trim=0.2,precision=1)[1:2,] # various boxplots ## bagplot.pairs(frabo12[,c(19,22,38)],trim=0.2,precision=1)[1:2,] # various boxplots ## bagplot.pairs(frabo12[,c(19,38,22)],trim=0.2,precision=1)[1:2,] # various boxplots ## bagplot.pairs(frabo12[,c(38,19,22)],trim=0.2,precision=1)[1:2,] # various boxplots ## bagplot.pairs(frabo12[,c(38,22,19)],trim=0.2,precision=1)[1:2,] # various boxplots ## DM <<- bagplot.pairs(frabo12[,c(40,43,45,47)],trim=0,precision=2)# check of center ### points(TP,pch=c(letters,LETTERS)[TPD+1]) ### show h-depths of center candidates ## bagplot.pairs(frabo12[,11:12],trim=0.2,precision=2)[1:3,] # check of center ## bagplot.pairs(frabo12[,c("Jeanslaenge","SchulNote","Jeansweite")],trim=0.2,precision=1) ## check by construction of bagplots: if(FALSE){ par(mfrow=c(2,2)); if(!exists("DM0")) DM0 <- frabo12[,11:12] bagplot(DM0[10:40,1:2],precision=1,verbose=TRUE,debug.plots="ll",cex=.2) # check center bagplot(DM0[10:40,2:1],precision=1,verbose=TRUE) # check center } ## random selection of variables # set.seed(13); print(co <- sample(1:49,5)); # bagplot.pairs(frabo12[,co],trim=0.2,precision=1)[1:2,] ## bagplot.pairs(frabo12[,c(20,25)],trim=0.1,precision=02)[1:2,] ## bagplot.pairs(DM0[,2:1],trim=0) ## idx<-!is.na(DM0[,2]);DM1<-DM0[idx,];bagplot.pairs(DM1[,2:1],trim=0) @ \section{[[plotsummary]]: A Graphical Summary of a Data Matrix} The function [[plotsummary()]] computes graphical summary of the variables of a data set. Each variable will be represented by some small types of graphics which are stacked in a summary figure. At first we define a function for summarizing a vector of data: [[plot_single_summary]] % # plan abstract shape summary scan chart <>= plot_single_summary <- function(x, trim = 0.0, types=c("stripes","ecdf","density","boxplot"), y.sizes = 1, main="", mycols = c("#bbff77","#ffffbb","#bbffff","#77ffbb"), set.par=TRUE){ <>= if("#" != substring(mycols[1],1,1)){ mycols <- if(is.numeric(mycols)) c("RG","RB","GB","GR","BR","BG")[mycols] else substring(mycols[1],1,2) # h <- cbind("ff",c("77","bb","ff","bb"), c("bb","ff","bb","77")) h <- cbind("ff",c("77","cc","bb","77"), c("77","cc","dd","99")) switch( mycols, "RG" = mycols <- h[,c(1,2,3)], "RB" = mycols <- h[,c(1,3,2)], "GB" = mycols <- h[,c(3,1,2)], "GR" = mycols <- h[,c(2,1,3)], "BR" = mycols <- h[,c(2,3,1)], "BG" = mycols <- h[,c(3,2,1)] ) mycols <- paste("#",mycols[,1],mycols[,2],mycols[,3],sep="") } @ Some color schemes, maybe usefull for further experiments: <<*>>= # mycols = c("#9999ff","#ccccff","#ccffcc","#99ff99"), # mycols = c("#9999ff","#ccccff","#ffee99","#ffcc55"), # mycols = c("#ff5533","#ff9977","#ffee99","#ffcc55"), # mycols = c("#ffcc55","#ffee99","#ff9977","#ff5533"), # mycols = c("#55ff33","#99ff77","#77ff99","#33ff55"), @ If a title is delivered it will be used. Otherwise the argument of the call will be plotted. <>= if("" == main) main <- deparse(substitute(x)) @ To keep things simple we transform data in a way that we can handle them as numerical data. <>= if(is.ts(x)) x <- as.vector(x) if(is.character(x)) x <- as.factor(x); if(is.factor(x)) x <- as.numeric(x) @ Because of the effects of outliers we trim the data. For defining the limits the R function [[quantile()]] is used. As a consequence there must not be data points that lie exactly on the limits and there will usually a (small) region at the limits without any point. <>= idx.na <- is.na(x) if(0 < trim) xlim <- quantile(x[!idx.na],c(trim,1-trim)) else xlim <- range(x[!idx.na]) if(xlim[1] < xlim[2]) x <- (x - xlim[1])/(xlim[2] - xlim[1]) else x <- x*0 +.5 xlim <- 0:1 idx.visible <- (!idx.na) & (0 <= x) & (x <= 1) # index of visible data points @ <>= if(set.par) oldpar <- par(mfrow=c(1,1),omi=c(0,0,0,0),mar=c(2,2,1,1)) plot(1,xlim=xlim,bty="n",type="n",main="",axes=FALSE,ylim=c(0,1)) par(usr=c(-0.01,1.01,-0.01,1.01)) # ; axis(1) title(main,cex.main=0.75) rug(x[idx.visible]) fn <- fivenum(x[idx.visible]) rect(fn[1:4], 0, fn[2:5], 1, col=mycols[1:4],border=mycols[1:4],xpd=NA) # color grid() # ; axis(1) n.types <- length(types); if(length(y.sizes) == 1) y.sizes <- rep(y.sizes, n.types) y.mins <- 1 - cumsum(y.sizes <- y.sizes/sum(y.sizes)) @ <>= if(type == "stripes" || "s" == substring(type,1,1) ){ n <- length(x) y0 <- 0.95*seq(x)/n; y0 <- y0*y.sizes[i] + y.mins[i] # print(x); print(xlim) segments(rep(xlim[1],n),y0,pmin(xlim[2],pmax(xlim[1],x)),y0,col=i) # stripes x [idx.na] <- 0.5 if(any( ind <- x>= if(type == "density" || "d" == substring(type,1,1) ){ if( 10 < length( tb <- table(x[idx.visible])) ){ dx <- density(x[!idx.na]); y0 <- dx$y; x0 <- dx$x y0 <- 0.9*y0 / max(y0); y0 <- y0*y.sizes[i] + y.mins[i] lines(x0, y0, lwd=2) # density } else { y0 <- tb; x0 <- as.numeric(names(tb)) y0 <- 0.9*y0 / max(y0); y0 <- y0*y.sizes[i] + y.mins[i] segments( x0, y.mins[i], x0, y0, lwd=3) } } @ <>= if(type == "boxplot" || "b" == substring(type,1,1) ){ result <- boxplot(x[idx.visible],plot=FALSE); fn <- result$stats; out <- result$out y0 <- y.mins[i] + c(0.3,0.7)*y.sizes[i] rect(fn[2:3],y0[1],fn[3:4],y0[2],lwd=2) # box y0 <- y.mins[i] + 0.5*y.sizes[i] segments(fn[c(1,5)],y0,fn[c(2,4)],y0,lwd=2) #,col=mycols[c(1,4)] # whisker points(cbind(out,y0)) if(any( ind <- x < xlim[1] )){ points( -0.01, y0, pch=18, xpd=NA, cex=2 ) } if(any( ind <- xlim[2] < x )){ points( 1.01, y0, pch=18, xpd=NA, cex=2 ) } } @ <>= if(type == "ecdf" || "e" == substring(type,1,1) ){ xx <- sort(x[idx.visible]) yy <- 0.9*seq(along=xx)/length(xx) y0 <- yy*y.sizes[i] + y.mins[i] points(xx, y0, pch=16); points(xx, y0, type="s"); n.xx <- length(xx) segments(-0.02,y.mins[i],xx[1],y.mins[i]); segments(1.02,y0[n.xx],xx[n.xx],y0[n.xx]) if(any( ind <- x < xlim[1] )){points(-0.01, y.mins[i], pch=18, xpd=NA ) } if(any( ind <- xlim[2] < x )){points( 1.01, y.mins[i] + .9*y.sizes[i], pch=18, xpd=NA)} } @ How can get some test data? A way is to look for data sets and check them whether they produce good results. <>= ds.of.R<-function(type="vector"){ dat<-ls(pos=grep("datasets",search())) dat.type<-unlist(lapply(dat,function(x) { num<-mode(x<-eval(parse(text=x))) num<-ifelse(is.array(x),"array",num) num<-ifelse(is.list(x),"list",num) num<-ifelse(is.matrix(x),"matrix",num) num<-ifelse(is.data.frame(x),"matrix",num) num<-ifelse(num=="numeric","vector",num) num })) return(dat[dat.type==type]) } <> namelist <- ds.of.R("matrix") # namelist <- ds.of.R("vector") # namelist <- ds.of.R("list") for(i in seq(along=namelist)){ print(i); print(namelist[i]) xy <- get(namelist[i]) if(ncol(xy) < 8 && 2 < ncol(xy) && all(sapply(xy,function(x) !is.factor(x)))) plotsummary(xy,y.sizes=4:1,trim=.05,main=namelist[i]) Sys.sleep(1) } @ Some special tests. For testing the data matrix of an questionare which could be found on our server has been used. The data set [[frabo12]] can be loaded by sourcing it. An advantage is that there are a lot of missing values and values which are completely wrong. <<*>>= # source("http://www.wiwi.uni-bielefeld.de/fileadmin/stat/wolf/data/frabo12.R") <> plotsummary(frabo12[,1:16],y.sizes = c(8,4,4,2)) @ \begin{center}\includegraphics[height=10cm]{p2012-Nov27-180702}\end{center} %

@ <>= \name{plotsummary} \alias{plotsummary} \title{ graphical summaries of variables of a data set } \description{ \code{plotsummary} shows some important characteristics of the variables of a data set. For each variable a plot is computed consisting of a barplot, an ecdf, a density trace and a boxplot. } \usage{ plotsummary(data, trim = 0, types = c("stripes", "ecdf", "density", "boxplot"), y.sizes = 4:1, design = "chessboard", main, mycols = "RB") } \arguments{ \item{data}{ Data set for computing a graphical summary. } \item{trim}{ \code{trim} defines the fraction of observation for trimming on both ends of the data. } \item{types}{ vector of types of representation of the data set. The elements of the vector will induce small plots which are stacked in vertical order. The first letter of the types is sufficient for defining a type. } \item{y.sizes}{defines the relative sizes of the small plots. The values are divided by their sum to get percentages. } \item{design}{ if \code{design} is \code{chessboard} the graphics device is fragmented into rows and cols. Otherwise the images of a variable build vertical stripes. } \item{main}{ defines a title for the graphics. } \item{mycols}{ allows to define some colors for the showing the regions separated by the quartils. } } \details{ \code{plotsummary} can be use for a quick and dirty inspection of a data matrix or a list of variables. Without further specification some representation of each of the variables is built and stacked into a plot. The sizes of the types of representation can be set as well as the layout design of the graphics device. It is helpful to trim the data before processing because outliers will often hide the interesting characteristics. } \author{ Peter Wolf, pwolf@wiwi.uni-bielefeld.de } \seealso{ \code{\link{pairs}}, \code{\link{summary}}, \code{\link{str}} } \examples{ ##---- Should be DIRECTLY executable !! ---- ##-- ==> Define data, use random, ##--\tor do help(data=index) for the standard data sets. plotsummary(cars) plotsummary(cars, types=c("ecdf", "density", "boxplot"), y.sizes = c(1,1,1), design ="stripes") plotsummary(c(list(rivers=rivers, co2=co2), cars), y.sizes=c(10,3,3,1), mycols=3) plotsummary(cars, design="chessboard") # find all matrices in your R ds.of.R <- function(type="vector"){ dat <- ls(pos=grep("datasets",search())) dat.type <- unlist(lapply(dat,function(x) { num <- mode(x<-eval(parse(text=x))) num <- ifelse(is.array(x),"array",num) num <- ifelse(is.list(x),"list",num) num <- ifelse(is.matrix(x),"matrix",num) num <- ifelse(is.data.frame(x),"matrix",num) num <- ifelse(num=="numeric","vector",num) num })) return(dat[dat.type==type]) } namelist <- ds.of.R("matrix") # inspect the matrices one after the other for(i in seq(along=namelist)){ print(i); print(namelist[i]) xy <- get(namelist[i]) # plotsummary(xy,y.sizes=4:1,trim=.05,main=namelist[i]) # Sys.sleep(1) } } \keyword{ hplot } \keyword{ manip }% __ONLY ONE__ keyword per line @ Test of the examples. <>= plotsummary(list(rivers,co2),y.sizes=c(10,3,3,1),mycols=3) plotsummary(c(list(rivers=rivers, co2=co2), cars), y.sizes=c(10,3,3,1),mycols=3) plotsummary(cars) plotsummary(cars, types=c("ecdf", "density", "boxplot"), y.sizes = c(1,1,1), design ="stripes") plotsummary(c(list(rivers=rivers, co2=co2), cars), y.sizes=c(10,3,3,1), mycols=3) plotsummary(cars, design="chessboard") # find all matrices in your R ds.of.R <- function(type="vector"){ dat <- ls(pos=grep("datasets",search())) dat.type <- unlist(lapply(dat,function(x) { num <- mode(x<-eval(parse(text=x))) num <- ifelse(is.array(x),"array",num) num <- ifelse(is.list(x),"list",num) num <- ifelse(is.matrix(x),"matrix",num) num <- ifelse(is.data.frame(x),"matrix",num) num <- ifelse(num=="numeric","vector",num) num })) return(dat[dat.type==type]) } namelist <- ds.of.R("matrix") # inspect the matrices one after the other for(i in seq(along=namelist)){ print(i); print(namelist[i]) xy <- get(namelist[i]) plotsummary(xy,y.sizes=4:1,trim=.05,main=namelist[i]) Sys.sleep(1) } @ \section{Skyline Plots} Histograms are often used for visualization of the empirical distribution of data sets. However, you get different results depending on the choice of the number of cells and the positions of the first cell. The skyline plot tries to get rid of the unsteadinesses caused by the starting position. Skyline plots are similar to shaded histograms, proposed in [Young et al., 2006]\footnote{F.W. Young, R.M. Valero-Mora, M. Friendly (2006): Visual Statistics. Wiley, p207--208.} \paragraph{Version 1} A simple version of a skyline plot results by plotting several histograms with different starting point for first cell into the same graphics device without cleaning. If you move a window along the $x$-axis and represent the number of observation in the window by a rectangular box you get an equivalent plot. This procedure is related to the computation of density traces. But for skyline plots we sketch the rectangular boxes and don't estimate the density at single points. @ <<*>>= <> par(mfrow=c(3,3)) for(n.c in c(2,4,8)){ # some values for n.class for(n.h in c(2,4,3)){ # some values for number of n.hist n.s <- 9 # value for number of vertical lines skyline.hist(co2, n.shading=n.s, n.hist=n.h ,n.class=n.c, night=n.h==3, col.border=n.h!=4) } } @ \begin{center}\includegraphics[height=12cm]{p2012-Dec5-122354}\end{center} %

@ @ <>= \name{skyline.hist} \alias{skyline.hist} %- Also NEED an '\alias' for EACH other topic documented here. \title{ \code{skyline.hist} computes a skyline plot which is special histogram. } \description{ The function \code{skyline.hist} draws several histograms in one plot. The resulting image may look like a skyline. } \usage{ skyline.hist(x, n.class, n.hist = 1, main, ylab="density", night = FALSE, col.bars = NA, col.border = 4, lwd.border = 2.5, n.shading = 6, lwd.shading = 2, col.shading = NA, lty.shading = 3, pcol.data = "green", cex.data = 0.3, pch.data = 16, col.data = 1, lwd.data = .2, permutation = FALSE, xlab, xlim, ylim, new.plot=TRUE, bty="n", ...) } \arguments{ \item{x}{ one dimensional data set.} \item{n.class}{ number of classes that should be used to find the width of the bars of the histogram(s).} \item{n.hist}{ number of histograms that should be plotted.} \item{main}{ used for call of \code{title}.} \item{ylab}{ text for y axis.} \item{night}{ If \code{TRUE} the background will be colored blue. If \code{FALSE} there will be no colored background. Otherwise \code{night} is used as background color.} \item{col.bars}{ defines the color of the bars. If \code{is.na(col.bars)} and \code{night==TRUE} the bars will be colored gray. } \item{col.border}{ color of the borders of the bars.} \item{lwd.border}{ line width of the borders of the bars.} \item{n.shading}{ number of vertical lines for filling the bars of the histograms.} \item{lwd.shading}{ line width of the vertical lines for shading the bars. } \item{col.shading}{ color for the vertical lines for shading. If \code{NA} heat colors are used.} \item{lty.shading}{ line type for the vertical lines for shading.} \item{pcol.data}{ color of data points.} \item{cex.data}{ character size of plotting character.} \item{pch.data}{ plotting character of data points.} \item{lwd.data}{ line width for segments between data points.} \item{col.data}{ color for segments between data points.} \item{permutation}{ if not \code{FALSE} a permutation of the data set is erformed.} \item{xlab}{ text for y axis. } \item{xlim}{ range of x. } \item{ylim}{ range of y. } \item{new.plot}{ logical. If \code{TRUE} a new plot is constructed.} \item{bty}{ box type, used by \code{plot}. } \item{\dots}{ further graphical parameters passed to plot. } } \details{ \code{skyline.hist} computes several histograms and plots them one upon the other. The histograms differ in the positions of the first cells, but all cells have the same width. The parameters \code{n.class} and \code{n.hist} have the greatest effect on the design of the result. \code{col.border} allows to color the border of the rectangular boxes of the histogram bars. \code{col.bars} defines the fill color of the bars. \code{n.shading} defines the number of vertical lines of type \code{lty.shading} and width \code{lwd.shading} that are drawn within the boxes. Another feature of \code{skyline.hist} is to represent the data points. The data points of a cell are plotted according their x-values and their ranks (within the points of the cell). The resulting points are connected by line segments and you will see a time series running from bottom to top in each cell. The points and lines can be specified by \code{pcol.data}, \code{cex.data}, \code{pch.data}, \code{lwd.data}, \code{col.data}. To get rid of the original order of the data you can permutated them (\code{permutation=1}). The "skyline" of the plot may be similar to the skyline of a town and the vertical lines may look like small windows of buildings. In Young et. al. you find "shaded histograms". These histograms have triggered the idea of \code{skyline.hist} and the representation of a one dimensional data set by laying histograms on top of otheroverlied histograms. } \value{ The result of a call of hist is returned. } \references{ F.W. Young, R.M. Valero-Mora, M. Friendly (2006): Visual Statistics. Wiley, p207--208. } \author{ Peter Wolf, pwolf@wiwi.uni-bielefeld.de } \seealso{ \code{\link{hist}}, \code{\link{density}} } \examples{ ##---- Should be DIRECTLY executable !! ---- ##-- ==> Define data, use random, ##-- or do help(data=index) for the standard data sets. # dev.off() print(par()) par(mfrow=c(1,1)) for(n.c in c(2,4,8)){ # some values for n.class for(n.h in c(2,4,3)){# some values for number of n.hist n.s <- 9 # value for number of vertical lines skyline.hist(co2, n.shading = n.s, n.hist = n.h ,n.class = n.c, night = n.h==3, col.border = n.h!=4) } } par(mfrow = c(1,1)) skyline.hist(x=rivers, n.class=4, n.hist=2, n.shading=0, main="rivers", cex.data=.5, lwd.data = .2, col.data = "green", pcol.data = "red", col.border=NA, night=FALSE, ylab="density") skyline.hist(x=rivers, n.class=4, n.hist=5, n.shading=0, main="rivers", cex.data=.5, lwd.data = 1, col.data = "green", pcol.data = "red", col.border=NA, night="blue" , ylab="density", col.bars =NA) skyline.hist(x=rivers, n.class=10, n.hist=2, n.shading=0, main="rivers", cex.data=.5, lwd.data = 1, col.data = "green", pcol.data = "red", col.border=NA, night=FALSE , ylab="density", col.bars = "lightblue") skyline.hist(x=rivers, n.class=10, n.hist=1, n.shading=0, main="rivers", cex.data=1, lwd.data = 0, col.data = "green", pcol.data = "red", col.border=NA, night=FALSE , ylab="density", col.bars = "lightblue" ) skyline.hist(x=rivers, n.class=6, n.hist=1, n.shading=0, main="rivers", cex.data=0.1, lwd.data = 2, col.data = "red", pcol.data = "green", night="orange" , ylab="density", col.bars = "white", col.border=1 ) skyline.hist(x=rivers, n.class=6, n.hist=1, n.shading=0, main="rivers", cex.data=0.1, lwd.data = 2, col.data = "red", pcol.data = "green", col.border=NA, night=FALSE , ylab="density", col.bars = "lightblue") skyline.hist(x=rivers, n.class=6, n.hist=1, n.shading=5, col.shading = "blue", main="rivers", cex.data=0.1, lwd.data = 1, col.data = "black", pcol.data = "green", col.border=NA, night=FALSE , ylab="density", col.bars = "green") skyline.hist(x=rivers, n.class=6, n.hist=3, n.shading=5, col.shading = "blue", main="rivers", col.bars = "green", cex.data=0.1, lwd.data = 1, col.data = "black", pcol.data = "green", col.border="white", night="magenta" , ylab="density") skyline.hist(x=rivers, n.class=6, n.hist=4, n.shading=5, col.shading = "blue", main="rivers", cex.data=0.8, lwd.data = 1, col.data = "blue", pcol.data = "red", col.border=NA, night=FALSE , ylab="density", col.bars = "green") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ misc } \keyword{ hplot } @ Besides the idea of overlaying several histograms we propose different types of representation of the relative frequencies of the cells. <>= skyline.hist <- function( x, n.class, n.hist = 1, main, ylab="density", night = FALSE, col.bars = NA, col.border = 4, lwd.border = 2.5, n.shading = 6, lwd.shading = 2, col.shading = NA, lty.shading = 3, pcol.data = "green", cex.data = 0.3, pch.data = 16, col.data = 1, lwd.data = .2, permutation = FALSE, xlab, xlim, ylim, new.plot=TRUE, bty="n", ...){ # initialization of variables if(missing(main)) main <- paste("skyline plot") if(missing(xlab)) xlab <- deparse(substitute(x)) # find the width of a cell hist.res <- hist(x, plot=FALSE) if(!missing(n.class)) width.bars <- diff(range(x))/n.class else { width.bars <- diff(hist.res$breaks[1:2]) n.class <- ceiling(diff(rank(x))/width.bars) } # find range for x-axis x.lim <- (x.range<-range(x)) + c(-1,1) * width.bars # find size of the bars starts.bars <- x.range[1] - width.bars*(n.hist-1)/n.hist # start of bar one starts.bars <- starts.bars + width.bars*(0:(n.hist-1))/n.hist # all starts starts.bars <- sapply(starts.bars, function(x) x + width.bars*(0:(n.class+1))) starts.bars <- starts.bars[starts.bars <= max(x)] idx <- x==x.range[1]; if(any(idx)) x[idx] <- x[idx]+0.001*diff(x.range) n.bars <- length(starts.bars) counts.bars <- rep(0,n.bars) for(i in 1:n.bars){ counts.bars[i]<-sum( starts.bars[i] < x & x <= (starts.bars[i] + width.bars)) } n <- length(x) heights.bars <- counts.bars/n/width.bars if( 0 < permutation ){ if(!is.numeric(permutation)) permuation <- 1 idx <- rep((permutation + 13*7654321)%%9573, n) for(i in 2:n) idx[i] <- (idx[i-1] * 1234567 + 87654321) %% 9573 idx <- order(idx); x <- x[idx] } # prepare plot if(missing(xlim)) xlim <- x.lim if(missing(ylim)) ylim <- c(0, max(heights.bars)) if(new.plot) plot(0, xlim=xlim, ylim=ylim, type="n", bty=bty, xlab=xlab, ylab=ylab, ...) title(main) # background if( night != FALSE ){ col.night <- if(is.logical(night)) "blue" else night usr <- par()$usr; rect(usr[1], usr[3], usr[2], usr[4], col = col.night) night <- TRUE } # add histogram like borders # if(broder) hist(x,add=TRUE,prob=TRUE) if(missing(col.bars)) col.bars <- if(night) "#555555" else "white" rect(starts.bars, heights.bars * 0, starts.bars + width.bars, heights.bars, lwd = lwd.border, border = col.border, col = col.bars) # add pattern for filling the bars small windows if(0 < n.shading){ dx <- width.bars * ((1:n.shading) - 0.5)/n.shading if(is.na(col.shading)) col.shading <- rainbow(n.bars) if(length(col.shading) < n.bars) col.shading <- rep(col.shading,n.bars) for(i in 1:n.bars){ segments(starts.bars[i] + dx, rep(0,n.shading), starts.bars[i] + dx, rep(heights.bars[i],n.shading), lty=lty.shading, lwd=lwd.shading, col=col.shading[i]) } } # representation of the data for(i in 1:n.bars){ idx <- starts.bars[i] < x & x <= (starts.bars[i] + width.bars) if((count <- sum(idx)) == 0) next x.i <- c(starts.bars[i] + 0.5 * width.bars, x[idx]) n.i <- count + 1 max.h <- count/n/width.bars if(missing(col.data)) col.data <- rainbow(count,start=.0,end=.15) y.i <- (0:count)/count * max.h segments( x.i[-n.i], y.i[-n.i], x.i[-1], y.i[-1], col = col.data, lwd = lwd.data) points(col = pcol.data, pch = pch.data, cex=cex.data, x.i[-1], y.i[-1]) } # return info of hist invisible(hist.res) } @ <<*>>= par(mfrow=c(3,3)) skyline.hist(x=rivers, n.class=4, n.hist=2, n.shading=0, main="rivers", cex.data=.5, lwd.data = .2, col.data = "green", pcol.data = "red", col.border=NA, night=FALSE, ylab="density" ) skyline.hist(x=rivers, n.class=4, n.hist=5, n.shading=0, main="rivers", cex.data=.5, lwd.data = 1, col.data = "green", pcol.data = "red", col.border=NA, night="blue" , ylab="density", col.bars =NA ) skyline.hist(x=rivers, n.class=10, n.hist=2, n.shading=0, main="rivers", cex.data=.5, lwd.data = 1, col.data = "green", pcol.data = "red", col.border=NA, night=FALSE , ylab="density", col.bars = "lightblue" ) skyline.hist(x=rivers, n.class=10, n.hist=1, n.shading=0, main="rivers", cex.data=1, lwd.data = 0, col.data = "green", pcol.data = "red", col.border=NA, night=FALSE , ylab="density", col.bars = "lightblue" ) skyline.hist(x=rivers, n.class=6, n.hist=1, n.shading=0, main="rivers", col.border=1, cex.data=0.1, lwd.data = 2, col.data = "red", pcol.data = "green", night="orange" , ylab="density", col.bars = "white" ) skyline.hist(x=rivers, n.class=6, n.hist=1, n.shading=0, main="rivers", cex.data=0.1, lwd.data = 2, col.data = "red", pcol.data = "green", col.border=NA, night=FALSE , ylab="density", col.bars = "lightblue" ) skyline.hist(x=rivers, n.class=6, n.hist=1, n.shading=5, col.shading = "blue", main="rivers", cex.data=0.1, lwd.data = 1, col.data = "black", pcol.data = "green", col.border=NA, night=FALSE , ylab="density", col.bars = "green", ) skyline.hist(x=rivers, n.class=6, n.hist=3, n.shading=5, col.shading = "blue", main="rivers", cex.data=0.1, lwd.data = 1, col.data = "black", pcol.data = "green", col.border="white", night="magenta" , ylab="density", col.bars = "green" ) skyline.hist(x=rivers, n.class=6, n.hist=4, n.shading=5, col.shading = "blue", main="rivers", cex.data=0.8, lwd.data = 1, col.data = "blue", pcol.data = "red", col.border=NA, night=FALSE , ylab="density", col.bars = "green", ) @ \begin{center}\includegraphics[height=12cm]{p2012-Dec10-192644}\end{center} %

@ <>= <> @ @ \renewcommand{\codechunkcommands}{\footnotesize} @ \section{Data Peeling -- Plot Hulls} Sometimes data peeling is a nice way to get some insides into the structure of a bivariate data set. The idea is simple and you find some articles concerning data peeling by googling "peeling bivariate data": \begin{quote} \hspace*{-1em}Green, P.J. (1981): Peeling bivariate data. \\ In: Interpreting Multivariate Data, V. Barnett (ed.), pp 3-19, Wiley.\\ \hspace*{-1em}Porzio, Giovanni C., Ragozini, Giancarlo (2000): Peeling multvariate data sets: a new approach. Quanderni di Statistica, Vol. 2. \end{quote} Here is a simple version to construct a peeling plot of a bivariate data set: <>= plothulls <- function(x, y, fraction, n.hull = 1, main, add=FALSE, col.hull, lty.hull, lwd.hull, density=0, ...){ # function for data peeling: # x,y : data # fraction.in.inner.hull : max percentage of points within the hull to be drawn # n.hull : number of hulls to be plotted (if there is no fractiion argument) # col.hull, lty.hull, lwd.hull : style of hull line # add : if TRUE old plot is used # pw 130524 180308 if((is.data.frame(x) || is.matrix(x)) && ncol(x) == 2){ y <- x[,2]; x <- x[,1] } #180308 if(missing(y)){ y <- x; x <- seq(along = y) } #180308 if(add) points(x,y,...) else plot(x,y,...) n <- length(x) if(!missing(fraction)) { # find special hull n.hull <- 1 if(missing(col.hull)) col.hull <- 1 if(missing(lty.hull)) lty.hull <- 1 if(missing(lwd.hull)) lwd.hull <- 1 x.old <- x; y.old <- y idx <- chull(x,y); x.hull <- x[idx]; y.hull <- y[idx] for( i in 1:(length(x)/3)){ x <- x[-idx]; y <- y[-idx] if( (length(x)/n) < fraction ){ if(missing(main)) title(paste("fraction in polygon:\n", round((length(x)+length(x.hull))/n,4))) polygon(x.hull, y.hull, col=col.hull, lty=lty.hull, lwd=lwd.hull, density=density) return(cbind(x.hull,y.hull)) } idx <- chull(x,y); x.hull <- x[idx]; y.hull <- y[idx]; } } if(missing(col.hull)) col.hull <- 1:n.hull if(length(col.hull)) col.hull <- rep(col.hull,n.hull) if(missing(lty.hull)) lty.hull <- 1:n.hull if(length(lty.hull)) lty.hull <- rep(lty.hull,n.hull) if(missing(lwd.hull)) lwd.hull <- 1 if(length(lwd.hull)) lwd.hull <- rep(lwd.hull,n.hull) result <- NULL for( i in 1:n.hull){ idx <- chull(x,y); x.hull <- x[idx]; y.hull <- y[idx] result <- c(result, list( cbind(x.hull,y.hull) )) polygon(x[idx], y[idx], col=col.hull[i], lty=lty.hull[i], lwd=lwd.hull[i], density=density) x <- x[-idx]; y <- y[-idx] if(0 == length(x)) return(result) } if(missing(main)) title(paste("fraction of points within the smallest polygon:\n", round((length(x)+length(x.hull))/n,4))) result } # end of definition of plothulls @ <>= xy <- faithful; #xy <- cars #library(aplpack) par(mfrow=c(2,3)) # 1. plot plothulls(faithful,n.hull=10,lty.hull=1) # 2. plot plot(xy) plothulls(faithful,fraction=.90,add=TRUE,col.hull="red",lwd.hull=3) # 3. plot plothulls(faithful,fraction=.10,col.hull="red",lwd.hull=3) # 4. plot n <- 3 plothulls(cars,n.hull=n,col.hull=1:n,lty.hull=1:n) # 5. plot n <- 5 cols <- heat.colors(9)[3:(3+n-1)] plothulls(cars,n.hull=n,col.hull=cols,lty.hull=1:n, density=NA,col=0) points(cars, pch=17, cex=1) # 6. plot n <- 6 cols <- rainbow(n) plothulls(cars,n.hull=n,col.hull=cols,lty.hull=1:n, density=NA,col=0) x<-plothulls(cars,n.hull=n,add=TRUE,col.hull=1,lwd.hull=2,lty=1,col=0) par(mfrow=c(1,1)) @ \begin{center}\includegraphics[height=10cm]{p2013-Nov5-101303}\end{center} %

@ <>= \name{plothulls} \alias{plothulls} \title{plothulls for data peeling } \description{ \code{plothulls plots convex hulls of a bivariate data set.} } \usage{ plothulls(x, y, fraction, n.hull = 1, main, add = FALSE, col.hull, lty.hull, lwd.hull, density = 0, ...) } \arguments{ \item{x}{ two column matrix of the coordinates of points of x-values of a data set} \item{y}{ if x is one dimensional then y contains the y-values of the data set} \item{fraction}{ ... of points that lies inside the hull to be plotted} \item{n.hull}{ number of directions sequential hulls to be plotted} \item{main}{ title for the graphics} \item{add}{ if TRUE no new plot is initialized} \item{col.hull}{ color(s) of the hull(s)} \item{lty.hull}{ line type(s) of the hull(s)} \item{lwd.hull}{ line width(s) of the hull(s)} \item{density}{ density argument of polygon() that draws the hulls} \item{...}{ further arguments used in the call of plot() or points()} } \details{ The function \code{plothulls} computes hulls of a bivariate data set using the function \code{chull}. After finding a hull the hull maybe plotted. Then the data points of the hull will be removed and the hull of the remaining points is computed. The style of plotting a hull depends on the setting of \code{col.hull}, \code{lty.hull}, \code{lwd.hull} and \code{density}. \code{density=NA} has the effect that the regions of the hulls are filled by a color. Using \code{fraction} you can plot a single hull. \code{n.hull} defines the number of hull that should be drawn one after the other. } \value{ The hull(s) are stored as a list of matrices with two columns, the innermost first and so on. } \references{ Green, P.J. (1981): Peeling bivariate data. In: Interpreting Multivariate Data, V. Barnett (ed.), pp 3-19, Wiley. Porzio, Giovanni C., Ragozini, Giancarlo (2000): Peeling multvariate data sets: a new approach. Quanderni di Statistica, Vol. 2. } \author{ Peter Wolf } \note{ Version of plothulls: 10/2013 } \seealso{ \code{\link[aplpack]{bagplot}} } \examples{ # 10 hulls computed from the faithful data and plotted plothulls(faithful, n.hull=10, lty.hull=1) # plotting additionally a hull with 90 percent of points within the hull plot(faithful) plothulls(faithful, fraction=.90, add=TRUE, col.hull="red", lwd.hull=3) # hull with 10 percent of points within the hull plothulls(faithful, fraction=.10, col.hull="red", lwd.hull=3) # first 3 hulls of the cars data set n <- 3 plothulls(cars, n.hull=n, col.hull=1:n, lty.hull=1:n) # 5 hulls represented by colored regions n <- 5 cols <- heat.colors(9)[3:(3+n-1)] plothulls(cars, n.hull=n, col.hull=cols, lty.hull=1:n, density=NA, col=0) points(cars, pch=17, cex=1) # 6 hulls: regions colored and boundaries shown n <- 6 cols <- rainbow(n) plothulls(cars, n.hull=n, col.hull=cols, lty.hull=1:n, density=NA, col=0) plothulls(cars, n.hull=n, add=TRUE, col.hull=1, lwd.hull=2, lty=1, col=0) } @ Here is the old text of item Value before the improved text of Dietrich Trenkler has been inserted: The points of the hull(s) are stored in matrices with two columns and the matrices are gathered in the output object. @ <>= <> @ \section{Appendix} \subsection{Some further examples -- usefull for testing} \renewcommand{\codechunkcommands}{\tiny} \renewcommand{\textchunkcommands}{\footnotesize} @ <>= if(!exists("seed")) seed<-75 # 267 81 115 set.seed(seed) #data<-matrix(sample(1:10000,size=2000),1000,2) #data<-matrix(sample(1:10000,size=300),50,2) if(!exists("n")) n<-100 data<-cbind(rnorm(n)+100,rnorm(n)+300) par(mfrow=c(1,1)) @ <<*>>= seed<-222; n<-100 <> datan<-rbind(data,c(106,294)); par(mfrow=c(1,1)) datan[,2]<-datan[,2]*100 <> bagplot(datan,verbose=TRUE) @ <>= <> dkmethod <- 2; n <- 7 # ; n <- 30 b <- bagplot(x=1:n,y=(1:n)^2,verbose=TRUE,dkmethod=dkmethod, show.loophull = FALSE) lines(b$hull.bag,col="green",lwd=3) lines(b$hull.loop,col="red") lines(b$exp.dk,col="blue",lwd=4) lines(b$exp.dk.1,col="magenta",lwd=4) @ <>= <> <> par(mfrow=2:3) bagplot(a[,2],a[,3],verbose=TRUE,debug.plots="all",dkmethod=2) par(mfrow=c(1,1)) @ <<*>>= par(mfrow=2:3) <> bagplot(x=cos((1:100)/100*2*pi),y=-sin((1:100)/100*2*pi), precision=1,verbose=TRUE,dkmethod=2,debug.plot="all"); "ok" @ \subsection{Data Sets of AJS} \subsubsection{NA/NaN/Inf errors} During the work at her thesis Amanda Joy Shaker (AJS) used a lot of different data sets. Some of them generated situations with NA/NaN/Inf errors. These data sets can be used for tests. \renewcommand{\codechunkcommands}{\tiny} <>= dat.AJS.NA.1 <- structure(c(0.700748406122636, 0.782097051744013, 1.19494957848218, 1.47659354666956, 1.22724791287169, 1.00382641917022, 0.983568811815667, 1.18147080849842, 1.69638392994895, 1.36381369275351, 1.67400042330589, -1.52743164406772, 1.43713472021185, 0.457489585235639, 1.06120850501234, 1.22736926459841, -0.199032261571936, 1.25320782739685, -5.07269643723254, 0.759599900517254, -0.595727452075492, 2.58574663827293), .Dim = c(11L, 2L)) dat.AJS.NA.2 <- structure(c(1, 2, -2, 2, 4, 6), .Dim = c(3L, 2L)) dat.AJS.NA.3 <- structure(c(1.21436270375692, 1.55386184789978, 1.32729428163828, 1.47680716244686, 1.72291418554236, 1.90528102063964, 0.998303018606679, 1.21469080791217, 0.495428930105404, 0.601479132024801, 0.896324574152363, 1.27278770588978, 1.52735141266259, 1.14910647335179, 1.46709533703956, -0.675939111236783, -0.0650536021330037, -0.0545053597983843, -0.329967714840365, 0.530150153905253, 0.424776801793337, 0.29891373914965, -0.171700049947138, 1.29229713231585, 0.320646717249816, -0.538860964661042, 0.269317428269199, -0.389736006283683, 0.74503654054419, 0.771519741920726 ), .Dim = c(15L, 2L)) dat.AJS.NA.4 <- structure(c(0.180068704657341, 0.156415127323711, -0.18231911106215, 0.268752871104897, -0.259677941828763, 0.447044306081937, 0.139654173358102, 0.194294504003757, 0.180715843217555, -0.149964419241666, 0.0842771665747198, 0.228739701396459, 0.117234418611117, 0.398919128253519, -0.155058613969879, 0.170662664057038, 0.12835044942655, -0.0157977465724244, 0.101704076217112, -0.0119832155289063, 0.216459515446478, 0.0804200726645274, 0.0804200726644785, 0.0804200726645218, 0.0804200726645016, 0.0804200726645131, 0.080420072664511, 0.0804200726644987, 0.0804200726645023, 0.080420072664528, 0.0804200726645137, 0.0804200726645239, 0.0804200726645182, 0.0804200726645125, 0.0804200726645242, 0.0804200726645315, 0.0804200726645452, 0.0804200726644922, 0.0804200726645339, 0.0804200726645479, 0.0804200726645101, 0.0804200726645319), .Dim = c(21L, 2L)) dat.AJS.NA.5 <- structure(c(1.03264386624424, 1.43935200964145, 1.06340967405687, 1.18205321492478, 1.29045381764465, 1.07099564122555, 1.00528855057742, 1.02259077904098, 1.41187650139486, 1.32775695451755, 1.21075933215363, 1.06342740106568, 1.53134667855119, 1.32568665939877, 1.74223348891943, 0.0804200726645347, 0.0804200726645632, 0.0804200726644681, 0.0804200726645218, 0.0804200726644998, 0.0804200726645525, 0.0804200726644994, 0.0804200726645774, 0.0804200726645074, 0.0804200726644519, 0.0804200726645243, 0.0804200726645024, 0.0804200726645259, 0.080420072664489, 0.080420072664529), .Dim = c(15L, 2L)) dat.AJS.NA.6 <- structure(c(-1.79145914492076, -1.15875086612266, -1.02145627379982, -0.854737209607734, -2.0630180644543, -1.26431160321251, -0.467161238550217, -0.867490217167985, -1.733174685243, -1.36206217104605, -2.23750512199867, -1.59978736810516, -1.30707556367037, -1.51787365215527, 1.36409732158507, 0.800780289876464, -0.366433640713828, 0.623472982810124, -0.18407800191162, 1.91759096282187, 1.52365868479866, -2.19795858931089, 1.3763680877608, 0.71413153186381), .Dim = c(12L, 2L)) dat.AJS.NA.7 <- structure(c(-1.3684237236938, -1.65516109096198, -1.37767155061742, -2.15270482106296, -2.01673577099271, -1.45717405769748, -1.31497367263747, -1.39671612960134, -1.93392502174771, -1.31772046172889, -1.03987533813416, -1.74095554103863, -1.15619075490599, -1.23504913824801, -1.57444245078572, -1.29169107039609, -0.774272865420965, -1.15472111210153, -0.426034994047472, 0.044040045451171, -0.150059265667002, 0.798364894960315, 0.155943200160366, 0.426054909316406, -0.244420377195582, 0.0742031061951941, 0.187864953313317, -0.134167627888988, -0.616853735625045, -0.479504093494163, 0.461780802219583, -0.326418374472874, -0.80009727007972, 0.00335706369672206, -0.188411247333344, -0.281400532668751), .Dim = c(18L, 2L)) dat.AJS.NA.8 <- structure(c(1.54326030862933, 1.68242734109213, 1.62021301730016, 1.49573128869219, 2.2448544609516, -2.49339265803509, 1.66309449850748, 0.365554717526013, 0.175489934361358, 0.379795024522992), .Dim = c(5L, 2L)) dat.AJS.NA.9 <- structure(c(-1.05030572979914, -1.32609971632578, -1.47004504895321, -1.17533756611546, -0.825699561965908, -1.38368827499804, -1.07843553552209, -1.08677339205287, -1.06789819568606, -0.997532971074027, -1.1139926208937, -1.02960620531776, -1.05366314043612, -0.871826660071897, -1.15944810115524, -1.15542256078355, -1.14856563284775, -1.23184267390213, -1.26820019788296, -0.168976538779658, -0.168976538779517, -0.168976538779539, -0.168976538779571, -0.168976538779596, -0.168976538779576, -0.168976538779617, -0.168976538779548, -0.168976538779573, -0.168976538779546, -0.168976538779563, -0.168976538779647, -0.16897653877959, -0.168976538779633, -0.168976538779581, -0.168976538779654, -0.168976538779549, -0.168976538779558, -0.16897653877958), .Dim = c(19L, 2L)) dat.AJS.NA.10 <- structure(c(-0.257855299240321, 0.241495840089441, 0.151683453816352, -0.00715826699300276, -0.276300525209444, 0.299087905248054, 0.21222362760509, -0.167850156964111, -0.157372449527226, 0.0313798822002498, 0.287625002286244, -0.0731148899530751, 0.246472386334932, 0.139335638127372, 0.0817166713481355, -0.089577794627803, -0.047016304634028, -0.029769367795634, 0.0632066481503915, -0.168976538779592, -0.168976538779596, -0.168976538779603, -0.168976538779555, -0.168976538779563, -0.168976538779685, -0.1689765387796, -0.168976538779579, -0.168976538779624, -0.168976538779567, -0.168976538779514, -0.168976538779522, -0.168976538779641, -0.168976538779567, -0.168976538779625, -0.168976538779579, -0.168976538779585, -0.168976538779541, -0.168976538779539 ), .Dim = c(19L, 2L)) dat.AJS.NA.11 <- structure(c(-0.279565168686504, 0.491941365497838, -0.173602939876011, -0.19685818172603, -0.534170026008371, -0.190080138935935, 0.504448367630096, 0.409287965141999, -0.446390115283449, 0.108096605271049, 0.0502281783165781, -0.0393667274906068, -0.60249857258843, 0.0177317113734867, 2.04170934472709, 0.399816808193063, -0.130557706820838, -0.618570881259321, -1.41601927719255, -1.22088979829268, 0.523877087421392, -0.282333543354531, -1.1863180987787, 1.19066751374326, -0.6218183997201, -1.00761990910177, 0.508673063635186, 0.878534522971255), .Dim = c(14L, 2L)) dat.AJS.NA.12 <- structure(c(0.0831725143122457, 0.191529474941752, 0.251507046865818, -0.0192221009951303, -0.0896881582990316, -0.105353605325231, 0.304107284467248, 0.0284226018131357, 0.324852408969287, 0.189681978911082, 0.192924665588421, 0.216501756813463, 0.102104589554589, 0.1995947226383, 0.268386817882626, 0.454911374862772, 0.251383625721009, -0.0871111875686677, 0.131555626144134, 0.0383914279806957, 0.0383914279807053, 0.0383914279806472, 0.0383914279807061, 0.0383914279807095, 0.0383914279807157, 0.0383914279807104, 0.0383914279806794, 0.0383914279807073, 0.0383914279806986, 0.0383914279806513, 0.0383914279806721, 0.0383914279807099, 0.0383914279807664, 0.0383914279807609, 0.0383914279807023, 0.0383914279807023, 0.038391427980708, 0.0383914279806925 ), .Dim = c(19L, 2L)) dat.AJS.NA.13 <- structure(c(-1.20590819190744, -1.22382974805989, -1.58080060817588, -1.28952446673604, -1.20767921371048, -1.53188318008957, -0.991589312444463, -1.35053431536657, -1.08145078013899, -1.2188436509799, -1.21377170931759, -1.54066962081963, -1.01777832581906, -1.59621581438464, -1.06935674072993, -1.54695364187422, -1.40165530652164, 0.0383914279806681, 0.0383914279807119, 0.0383914279806802, 0.0383914279806765, 0.0383914279807372, 0.038391427980691, 0.0383914279806851, 0.0383914279807385, 0.0383914279807114, 0.038391427980704, 0.0383914279807236, 0.0383914279806236, 0.0383914279806341, 0.0383914279807379, 0.0383914279807303, 0.0383914279807206, 0.038391427980685), .Dim = c(17L, 2L)) dat.AJS.NA.14 <- structure(c(0.160318166551109, 0.263218455998661, -0.138069776534857, 0.0252208468543689, 0.277932015874982, 0.0136710656708733, 0.000647962159711579, -0.228205587990355, 0.0260795418377626, 0.494379739818024, 0.144061362060082, -0.00356193742019483, 0.193347502784219, -0.108300899008626, -0.0565789215270636, -0.0469199533577331, -0.117132013508576, 0.00599788278775333, -0.35256561879791, 0.196585557022331, 0.249930037147196, 0.102268077175685, 0.28243199163007, -0.0505692299041801, -0.0505692299041795, -0.0505692299041587, -0.0505692299041846, -0.0505692299041873, -0.0505692299041658, -0.0505692299041641, -0.0505692299041733, -0.0505692299041656, -0.0505692299041536, -0.0505692299041798, -0.050569229904183, -0.0505692299041714, -0.0505692299041552, -0.050569229904158, -0.0505692299041409, -0.0505692299041538, -0.0505692299041669, -0.0505692299041969, -0.0505692299041781, -0.0505692299041662, -0.0505692299041835, -0.050569229904212), .Dim = c(23L, 2L)) dat.AJS.NA.15 <- structure(c(1.24249286106101, 1.35303446092109, 1.2529486837982, 1.13531325855934, 0.619887008265003, 1.2940460006555, 2.34074761919455, 1.45421550941755, 0.956936104499802, -1.50168830608412, 0.585296679572968, 0.68291771643621, 0.0330787801226709, 1.90462809449208, 2.49356754642929, -1.32219712879706, -3.25952253738954, 1.73869249307979), .Dim = c(9L, 2L)) dat.AJS.NA.16 <- structure(c(-0.460755058165587, 0.8172066720615, 0.666905150541366, 0.456814047248765, 0.142898941396717, 0.580196552111308, 0.392025059314243, 0.220452196294813, 0.285961325782821, 0.148079552376092, -0.0164246132441168, 0.358041363875668, 0.369244534294788, 0.755606158553252, 0.49311934924307, 0.0502911457664872, 0.043349500546581, 0.291641614071215, 0.403087151593154, -0.432614236788002, -0.032990542516245, 0.357264779005906, 0.440591042018491, -0.297431812257744, 0.133180627577488, 1.24497606519347, -0.600148678309077, -0.025131963289682, 1.32877526922171, -0.545448506207544, 0.51249235983629, -0.478576084348073, 0.0327360078323921, -0.26132434104418, -0.1819501580602, -0.124514806063578, -0.102595699416755, -0.695682988205778, 0.358666355400222, -1.60192432341205, 0.73497503584591, -0.137580061878416, 0.383800300934964, 0.955350949622496, 0.0387316592056883, 0.846394445315088, -0.400624206891141, 1.48186856068239), .Dim = c(24L, 2L)) dat.AJS.NA.17 <- structure(c(1.36577751048761, 1.84110637374626, 1.46273044580332, 0.890603292480744, 1.00380665882013, 2.11373708423167, 1.98538481298915, 0.839772349488666, 1.03551838402258, 1.1535967635499, 2.45922654840668, 1.31088686243715, 0.630089939311262, 0.679477574525063, 1.30096781268714, 1.06969463567066, 0.699440804777147, 0.526202085158316, 0.277132397014931, -0.198449009192018, -0.723707623423418, -0.235996681355668, -0.106180040109919, 0.0730658222947545, -0.391357026214794, -0.0910010019808147, -0.793062255186916, 0.405657231654613, -0.699622813140377, 0.592266713264845, -0.123567967316939, -0.327538657429781), .Dim = c(16L, 2L)) dat.AJS.NA.18 <- structure(c(0.820055739423539, 0.825044475185051, 1.12973233989894, 1.16326332610937, 1.89013571843305, 2.41249951079619, 0.745546924669453, 0.998440916257689, 1.27920212914109, 1.36721277546578, 0.896465026822143, 1.17852612241203, 1.70161695059665, -0.340981977243401, 0.32773844551709, -0.0467317193372973, -0.256465718473138, 0.206359578615439, -0.277144185364196, -0.441278919502163, 0.465371783497168, -0.982940016863369, 0.688558640527416, -1.53652448341507), .Dim = c(12L, 2L)) dat.AJS.NA.19 <- structure(c(-2.274721736105, -2.31360040700328, -1.0228510082017, -1.99059049801102, -1.31737496414061, -1.63644528759106, -0.862315543463694, 0.702682539819953, -0.320663290047872, -0.00133968304916504, -1.36840172195793, 0.0808490013918581, 0.0579227376400969, 2.44016076227646 ), .Dim = c(7L, 2L)) dat.AJS.NA.20 <- structure(c(2.24578438678207, 1.07306586553063, 0.781878198073328, 2.15808651855139, 1.26756253939963, 1.01232594432679, 1.25772827124044, 1.15596430822592, 0.993492466590052, 1.21398991475283, 1.12521125864354, 0.755067728127204, 0.959561674960765, -0.752649636627051, -0.921484146717509, 0.809816131940689, 1.76520978994385, 3.2571161688332, 2.16240230089032, -0.708338857315346, -0.00221003224209687, -2.22890504640143, -1.79123438937954, 0.307984658905539, -0.0330634273167894, 1.85901605755462 ), .Dim = c(13L, 2L)) dat.AJS.NA.21 <- structure(c(0.997158538921801, 2.58062932297289, 0.614863866430638, 2.55548896378729, 0.806425741060454, 0.662335146824545, 2.22967678970452, 1.43557093540738, -2.50375040640942, 3.27181581708837, -3.89767459198112, -0.104695715824913, 0.932156665030007, 3.93619080440748, 1.81024155398114, 0.753288962988298, 2.74414751618234, 2.0770829844026, 2.94499142754969, -2.55192239532796, -17.2332615312877, -15.7526900564097, -13.9919741167054, -13.6233397696085, -12.2303905522917, -7.68402586249284, -9.6238553492431, -11.3072430635517, -5.10528693333689, -10.0963550205115, -4.15169899407023, -11.3925435233876, -13.997886342262, -13.0854158549666, -9.82199667882734, -9.35739720094364, -11.9576433206232, -8.83511037806484, -13.926459546378, -9.14978842049295), .Dim = c(20L, 2L)) dat.AJS.NA.22 <- structure(c(-13.088254941555, -10.5800843933805, -8.57828767593912, -11.5248721239085, -8.91249596585892, -10.4305909452994, -9.66201715251068, -12.3222341939441, 4.60914914752064, 0.952915862267916, 5.20414493132601, 2.50223755434026, 4.46025371090398, 3.8519647582065, 2.86091415484215, 5.31311587968197), .Dim = c(8L, 2L)) dat.AJS.NA.23 <- structure(c(-13.7879657469664, -15.1422601555544, -10.5183697346654, -7.10147218821867, -11.377301968002, -9.91384432411673, -12.0331310337032, -9.7815732749393, -10.0739615974138, -13.5628049271995, -11.5795648304855, -2.12168458607247, 2.8783494583519, 1.45294611627937, 0.129525897619404, -0.778252912180025, -0.783203414764416, -2.68358451491506, -0.38453502315299, -3.3183908103873, -0.912412393806471, 1.79654749829558), .Dim = c(11L, 2L)) dat.AJS.NA.24 <- structure(c(-5.15758611039991, -4.95032693793226, -5.5575052975057, -4.71606152028894, -4.62746507630567, -5.20432300389483, -5.98242652228454, -8.75987039739603, -7.26261090944811, -8.04075060794984, -9.97873298719759, -8.34837564693937, -9.29719884205707, -8.53967218995373), .Dim = c(7L, 2L)) dat.AJS.NA.25 <- structure(c(-4.15942747285471, -4.99475833541678, -2.72104114362262, -3.4351147069493, -3.96812138733031, -3.70752204695723, -3.00411365069314, -4.01623671401841, -4.34014333707702, -4.71108823809808, -4.17928843965523, -3.03040259208217, -9.28716524843285, -11.1286347061147, -8.03362458174643, -6.70976251463246, -8.9827956919842, -9.21890041663861, -9.79892446842488, -9.07030515716276, -7.13782769618523, -8.84132833621261, -9.83661483373639, -9.62786538035892), .Dim = c(12L, 2L)) dat.AJS.NA.26 <- structure(c(-2.18662147519799, -2.7505614660519, -1.60754752457797, -2.26027306824472, -2.38650537221318, -2.07568459110461, -1.04086205240606, -1.78899064491628, -2.85931983932625, -2.35970667583507, -1.81580903242508, -1.72509259736993, -10.569199785364, -12.1728049380255, -8.35439764174957, -7.02865542930452, -9.30218630138962, -9.51317461004709, -10.3655841923745, -10.4773551648549, -7.88325913038582, -10.1466706958214, -11.0280705022832, -9.45775467487885), .Dim = c(12L, 2L)) @ \renewcommand{\codechunkcommands}{\small} @ At first the bagplot function could not deal with data sets consisting only of three points ([[dat2]]). Data set 17 runs in an NA/NaN/Inf error because after removing some artificual points during construction wrong slopes were used. Data sets with numbers 24, 22, 19, 15, 11 showed a wrong [[center.hull]]. Data sets 4, 5, 9, 10, 12, 13, 14 are near one dimensional and they produce figures similar to a boxplot. <>= <> <> par(mfrow=c(4,5)) for(nr in c(1,3,6,7,8,11,15,16,17:26)){ dat.name <- paste("dat.AJS.NA.",nr,sep="") dat <- eval(parse(text=dat.name)) try({bagplot(dat,xlab="",ylab="",main=dat.name)}) } @ %rm in course of reducing bytes % \begin{center}\includegraphics[height=10cm]{p2012-Nov5-185200}\end{center} %

@ Other errors of these data sets occured by very small data sets or one dimensional cases. <>= <> <> par(mfrow=c(3,3)) for(nr in c(2,4,5,9,10,12,13,14)){ dat.name <- paste("dat.AJS.NA.",nr,sep="") dat <- eval(parse(text=dat.name)) try({bagplot(dat,xlab="",ylab="",main=dat.name)}) } @ %rm in course of reducing bytes % \begin{center}\includegraphics[height=10cm]{p2012-Nov5-185302}\end{center} %

@ @ <>= <> <> par(mfrow=c(2,3)) nr <- 26; dat.name <- paste("dat.AJS.NA.",nr,sep="") dat <- eval(parse(text=dat.name)) try({bagplot(dat,debug.plots="all",verbose=!TRUE, main=dat.name)}) @ %rm in course of reducing bytes %\begin{center}\includegraphics[height=10cm]{p2012-Nov5-185606}\end{center} %

@ @ \subsubsection{Vanishing center polygons} Errors concerning vanishing center polygons. Data sets have been proposed by AJS. \renewcommand{\codechunkcommands}{\tiny} To simplify the extraction of the data from a text representation we use the following function: <>= get.AJS.data <- function(a){ a <- gsub("RMS.T[0-9]*","",a); a <- gsub("[^0-9.-]"," ",a) a <- gsub(" +"," ",a); a <- gsub("^ ","",a); a <- gsub(" $","",a) a <- gsub(" ",",",a); a <- paste("dat <- c(",a,")",sep="") a <- eval(parse(text=a)); matrix(a,ncol=2,byrow=2) } @ dat.name <- paste("dat.AJS.cen.",nr,sep="") <<*>>= <> #Original data that causes the error (Bagploterror51) # Dir1 Dir2 a<-"RMS.T2 -0.3216039446622190323133 -0.5088442253636682455209 RMS.T6 -0.3189769467668709390651 -0.4593876621644119584431 RMS.T7 -0.3285935044091578549619 -0.5239886751320974589419 RMS.T8 -0.2559059546946075291984 -0.5992055256395006912484 RMS.T5 -0.2957622695531119672019 -0.5366769866153198176306 RMS.T3 -0.2574085563863388603778 -0.5202555871190320813113 RMS.T10 -0.2851383909737250643701 -0.5473508555970837408111 RMS.T11 -0.3192201201256392173455 -0.5514560438800543140658" dat.AJS.cen.51 <- get.AJS.data(a) # Data after it has been saved and imported back into R they no longer causes bagplot errors # V1 V2 a<-" -0.3216039446622189768021 -0.5088442253636680234763 -0.3189769467668709945762 -0.4593876621644120139543 -0.3285935044091580214953 -0.5239886751320970148527 -0.2559059546946079732876 -0.5992055256395010243153 -0.2957622695531120227130 -0.5366769866153200396752 -0.2574085563863390269113 -0.5202555871190319702890 -0.2851383909737250088590 -0.5473508555970839628557 -0.3192201201256389953009 -0.5514560438800539809989 " dat.AJS.cen.51a <- get.AJS.data(a) # Bagploterror52 (original data) a<-" RMS.T2 -0.5653783183505530773871 -0.08581631422484529980732 RMS.T6 -0.4965104573284281896939 0.10281100056188693936399 RMS.T7 -0.4054359073563830184739 -0.11267357439288212817008 RMS.T8 -0.5193619418570573076366 0.01898260123444787950131 RMS.T5 -0.3986393540789945899583 -0.05626916023751998147118 RMS.T3 -0.4759403757463211426249 -0.02666424121033471664188 RMS.T10 -0.4440413505805637095492 0.00682853468109060734309 RMS.T11 -0.5316323986960421743575 -0.08844450490794002195383 " dat.AJS.cen.52 <- get.AJS.data(a) #Bagploterror53 (original data) # Dir1 Dir2 a<-" RMS.T2 -0.4584929840556748459335 -0.4181620733398946354598 RMS.T6 -0.4806368903226097555326 -0.3670104855925014897267 RMS.T7 -0.4990824552495897736826 -0.3859610888430542452454 RMS.T8 -0.4225857340800127093239 -0.4779159058790974357045 RMS.T5 -0.4759390192662101282117 -0.4045462910525126631889 RMS.T3 -0.4258465780390215393858 -0.3675420112969287611548 RMS.T10 -0.4791654818900950574267 -0.4475245142534178266480 RMS.T11 -0.5025219139233927378996 -0.4142742860227112688953 " dat.AJS.cen.53 <- get.AJS.data(a) par(mfrow=c(2,2)) <> bagplot(dat.AJS.cen.51,main="dat.AJS.cen.51") bagplot(dat.AJS.cen.51a,main="dat.AJS.cen.51a") bagplot(dat.AJS.cen.52,main="dat.AJS.cen.52") bagplot(dat.AJS.cen.53,main="dat.AJS.cen.53") @ %rm in course of reducing bytes % \begin{center}\includegraphics[height=10cm]{p2012-Nov5-185850}\end{center} %

@ @ \subsubsection{[[chull]] problem} The data from "12.10.2012 05:25" show some strange behavior due to computational problems. On 64 bit machines there are situations (using R 2.10.1 as well as on MacLion systems with newer R versions) showing numerical problems of the [[chull()]] procedure. This problems resulted in an incorrect order of the points of the returned hull. The problems could be solved by a [[chull]] function that used some jittering of the input data. <>= <> # former name: sensitiv1 dat.AJS.chull.1<-" 0.488588355, 0.4788661146, 0.470541460, 0.4755196116, 0.540839656, 0.3452228415, 0.543894166, 0.2321341635, 0.334708444, 0.2329099471, 0.310019325, 0.2738524661, 0.472109253, 0.3495264831, 0.470475506, 0.4563289060, 0.239453165, 0.3450766932, 0.407620177, 0.2770376896, 0.405310593, 0.3564185094, 0.426707657, 0.2959932986, 0.474084923, 0.0631711688, 0.518166032, -0.0208338748, 0.389197562, 0.3093495788, 0.386880009, 0.3639057016, 0.425945405, -0.0809788937, 0.397119599, 0.0008433205, 0.438148342, 0.2093625146, 0.328455105, 0.2751572311, 0.461878996, 0.0668381157, 0.414704143, 0.0072959685, 0.432113535, 0.1879563919, 0.395729535, 0.1531312207, 0.333457931, 0.1964919005, 0.401687453, 0.0946544297, 0.400877654, 0.1471504997, 0.464775289, 0.2009438452, 0.549797862, 0.1277673373, 0.381226770, 0.2668278562, 0.550015218, 0.0668506110, 0.477237805, 0.0740817598, 0.458555746, 0.0775954771, 0.528883119, 0.0948835096, 0.486477230, 0.1845105884, 0.418608439, 0.0991275028, 0.431439496, -0.0954497603, 0.410785196, -0.1345022514, 0.395787730, 0.1228479500, 0.469339289, 0.1508086005, 0.503063303, 0.1850048726, 0.573604375, 0.3706804547, 0.539558323, 0.4411575294, 0.457817697, 0.4406435958, 0.389985667, 0.1327410145, 0.395020633, 0.1097348779, 0.439170368, 0.4193358276, 0.121591061, 0.4339624810, 0.335464949, 0.2473185283, 0.351423426, 0.2246070027, 0.506942440, 0.2389513899, 0.416466941, 0.2150341745, 0.445740068, 0.2102291025, 0.466276802, 0.0843550997, 0.487222847, 0.3058908093, 0.469796584, 0.3957596935, 0.377076327, 0.1589928857, 0.453156085, 0.1215739645, 0.487773276, 0.3732129409, 0.440684358, 0.4203934197, 0.408433299, -0.1617784087, 0.384397653, -0.0260943984, 0.328457468, 0.1822356067, 0.331533173, 0.2324971255, 0.476101470, 0.2588617367, 0.433777557, 0.2836051641, 0.393777809, -0.1773367157, 0.375883187, -0.0702600981, 0.495420045, 0.3007244720, 0.504617623, 0.2888109972, 0.431188119, 0.0947638338, 0.340934937, 0.1330004897, 0.420439561, 0.0483710223, 0.370461663, 0.0278395062, 0.441039662, 0.2107990385, 0.419965287, 0.2825255013, 0.439766224, 0.2778765905, 0.464379420, 0.3177810056, 0.276301115, -0.1202481539, 0.298233219, -0.0295892006, 0.395396220, -0.1763108102, 0.347408037, -0.0847462807, 0.339337876, -0.0694771178, 0.414951665, -0.0048018001, 0.459726406, 0.2059963736, 0.499616132, 0.1056579095, 0.440375533, 0.0351919354, 0.482810983, 0.1113721218, 0.432128546, 0.2362745203, 0.490179090, 0.2595651429, 0.478780067, 0.2343187346, 0.464693584, 0.2229943353, 0.391961926, 0.1504157125, 0.415383010, 0.2261420094, 0.460120520, 0.2819996100, 0.419861026, 0.1560055650, 0.439423034, 0.3700449651, 0.480516957, 0.2949836759, 0.437066927, 0.1593231841, 0.476421460, 0.1429883832, 0.271264449, -0.0995625736, 0.353000692, -0.1304770232, 0.357545439, 0.1943493893, 0.457257215, -0.0176474562, 0.427548344, -0.0231445876, 0.432522398, 0.1517096819, 0.451225294, 0.1502057497, 0.361329739, 0.1264532926, 0.435214532, 0.1010238420, 0.470582949, 0.1851516685, 0.437463975, 0.2533124438, 0.417048013, 0.3303409805, 0.384538442, -0.1572839601, 0.371303473, -0.1093184580, 0.421293546, 0.1425996465, 0.495727796, 0.0404091001, 0.302936071, -0.2205527851, 0.279745580, -0.2667278459, 0.248452778, 0.1373261412, 0.281694737, 0.0036316128, 0.475994216, 0.3916927014, 0.401989717, 0.0723050968, 0.503976003, 0.2849699244, 0.462111313, 0.1864648537, 0.451977235, 0.3730726001, 0.484357984, 0.1001568997, 0.470939953, 0.2808115329, 0.359385679, 0.2325216403, 0.494904270, 0.0783018081, 0.459803689, -0.0437143636, 0.439798527, -0.0089031661, 0.491112867, 0.3022055065, 0.418731981, 0.1857299860, 0.390291752, 0.3154725004, 0.399472537, 0.0498061800, 0.454767812, 0.3038274596, 0.435419817, 0.1737104118, 0.445882290, 0.3164461434, 0.458978707, 0.1518294804, 0.335919123, 0.0824141186, 0.412775582, 0.3319219809, 0.471062889, 0.2155976166, 0.400704784, 0.1395017856, 0.374875509, 0.2793858787, -0.138096988, 0.1904736671, 0.280579335, 0.1983484280, 0.420128402, 0.2619921934, 0.454072497, 0.3034271682, 0.395793576, 0.0050705166, 0.365257809, -0.0272525317, 0.484044950, 0.3570199113, 0.370868043, 0.1093188543, 0.461285268, 0.2632532003, 0.350116296, 0.0184022352, 0.368931907, 0.2208158238, 0.531850140, 0.2198341291, 0.416720210, 0.1982638678, 0.414312034, -0.0859862833, 0.438835285, 0.0510980754, 0.398296976, 0.0872646406, 0.306207783, -0.0149382671, 0.469371414, 0.1709586638, 0.415926279, 0.1801283181, 0.385563049, 0.2280534621, 0.445041509, 0.1062464264, 0.450434171, 0.1659846969, 0.105995009, 0.2547933195, 0.401549400, -0.0054054975, 0.068326754, 0.1883474596, 0.428085276, 0.1259003630, 0.386667519, 0.2788522754, 0.364941811, 0.1939269163, 0.388007330, 0.2488991171, 0.313310938, -0.2703923641, 0.352913354, 0.0216299592, 0.448419498, -0.0917665640, 0.431455476, 0.3508598056, 0.432434083, 0.1242010665, 0.428347577, 0.0089587276, 0.451061960, 0.1955492468, 0.438723171, 0.4033360370, 0.375784983, 0.1732615065, 0.519498731, 0.2018356726, 0.440336331, 0.1348062337, 0.490173805, 0.3545576781, 0.504040802, 0.2314755193, 0.465547217, 0.3347197651, 0.351917086, 0.3282052014, 0.487052697, 0.0902093812, 0.429959415, 0.0480855954, 0.437206119, -0.0127709904, 0.469334595, 0.2619805975, 0.405168014, 0.1902292618, 0.464521889, 0.2275828903, 0.396088688, 0.1754067895, 0.441944151, 0.2202335286, 0.464586609, 0.2507695841, 0.483560544, 0.2672001335, 0.373528072, 0.0322623727, 0.350304411, 0.0555681148, 0.495812155, 0.2023598468, 0.436919679, 0.1396848934, 0.420938210, 0.1287555760, 0.333588506, 0.1964314573, -0.008673143, 0.4936967464, 0.498878462, -0.0429958219, 0.440685091, 0.2022473549, 0.419744785, 0.1800348923, 0.341760660, 0.0975451159, 0.351905442, 0.0467315695, 0.510702253, 0.2369286285, 0.319368430, 0.0144631138, 0.387779601, 0.1468151850, 0.363116992, -0.0182525890, 0.463043764, 0.1998838022, 0.485449316, 0.2410686817, 0.351764496, 0.1236883913, 0.378846594, -0.2068502412, 0.506541313, 0.0258194329, 0.462346785, 0.0841345518, 0.197055593, 0.0611038043, 0.369159816, 0.1978663678, 0.437002216, 0.1783461539, 0.353863511, 0.1619696742, 0.378026956, 0.1140428654, 0.501398826, 0.1154449124, 0.401387838, 0.0589433175, 0.275583568, 0.0233760805, 0.463515049, 0.0876374263, 0.404737777, 0.2917370814, 0.401168387, 0.2526006111, 0.429059789, 0.1795592816, 0.353763986, 0.2162801483, 0.356734605, -0.2663552210, 0.342808121, 0.0407156242, 0.405815773, -0.1289238452, 0.475349726, 0.3478269079, 0.512681955, 0.1740650182, 0.388882734, -0.1686691003, 0.416400594, 0.0422744471" dat.AJS.chull.2<-" 0.488565925, 0.4788830230, 0.470518883, 0.4755379903, 0.540821319, 0.3452584613, 0.543880329, 0.2321764386, 0.334695847, 0.2329343592, 0.310005378, 0.2738714765, 0.472091750, 0.3495517610, 0.470453134, 0.4563524148, 0.239437539, 0.3450803439, 0.407605742, 0.2770631607, 0.405297910, 0.3564038970, 0.426698947, 0.2959717498, 0.474078975, 0.0632119082, 0.518165669, -0.0208026310, 0.389182699, 0.3093662369, 0.386863379, 0.3639162011, 0.425943787, -0.0809216837, 0.397113988, 0.0008999279, 0.438144516, 0.2093360858, 0.328446752, 0.2751362229, 0.461876192, 0.0668544126, 0.414702341, 0.0073236107, 0.432106261, 0.1879619489, 0.395722604, 0.1531447993, 0.333445239, 0.1965294921, 0.401681094, 0.0946842860, 0.400866278, 0.1471984008, 0.464762400, 0.2009867588, 0.549788161, 0.1278160114, 0.381209640, 0.2668751891, 0.550009153, 0.0668940683, 0.477231633, 0.0741204860, 0.458550419, 0.0776261287, 0.528876578, 0.0949198625, 0.486467492, 0.1845373490, 0.418601288, 0.0991622310, 0.431444647, -0.0954361392, 0.410791285, -0.1344827904, 0.395781200, 0.1228690810, 0.469332443, 0.1508254156, 0.503049055, 0.1850646603, 0.573583529, 0.3707267483, 0.539540161, 0.4411587741, 0.457799411, 0.4406425283, 0.389979310, 0.1327572440, 0.395014994, 0.1097540691, 0.439149132, 0.4193625992, 0.121568356, 0.4339816581, 0.335450967, 0.2473479868, 0.351411589, 0.2246294927, 0.506931531, 0.2389686803, 0.416453891, 0.2150714007, 0.445728307, 0.2102598983, 0.466270713, 0.0843892346, 0.487207646, 0.3059151603, 0.469777318, 0.3957816522, 0.377067897, 0.1590144819, 0.453149791, 0.1215962092, 0.487757526, 0.3732180676, 0.440667092, 0.4203912650, 0.408446801, -0.1618030914, 0.384406713, -0.0261348064, 0.328457377, 0.1821870524, 0.331531072, 0.2324458686, 0.476092076, 0.2588599612, 0.433767577, 0.2835973313, 0.393793742, -0.1773741682, 0.375897238, -0.0703216254, 0.495413425, 0.3006890687, 0.504610945, 0.2887805058, 0.431192387, 0.0947182527, 0.340937434, 0.1329507636, 0.420446411, 0.0483223700, 0.370470482, 0.0277816649, 0.441037167, 0.2107626360, 0.419959108, 0.2824900724, 0.439763007, 0.2778222224, 0.464372875, 0.3177378989, 0.276309247, -0.1202539042, 0.298239822, -0.0296142651, 0.395415765, -0.1763745880, 0.347422594, -0.0848076458, 0.339350477, -0.0695299709, 0.414959369, -0.0048385120, 0.459727233, 0.2059384489, 0.499622833, 0.1055938656, 0.440380491, 0.0351622932, 0.482813054, 0.1113387918, 0.432127974, 0.2362151044, 0.490176417, 0.2595152506, 0.478778121, 0.2342718275, 0.464692712, 0.2229430093, 0.391963529, 0.1503685476, 0.415382189, 0.2260871924, 0.460109318, 0.2820022326, 0.419856323, 0.1560030889, 0.439414519, 0.3699970204, 0.480511783, 0.2949392124, 0.437066976, 0.1592860167, 0.476422133, 0.1429539738, 0.271275838, -0.0995991441, 0.353014229, -0.1305150420, 0.357543713, 0.1943096579, 0.457267580, -0.0176971730, 0.427558337, -0.0231909552, 0.432525050, 0.1516561842, 0.451225649, 0.1501701068, 0.361330739, 0.1264174670, 0.435216894, 0.1009900092, 0.470581163, 0.1851202194, 0.437460031, 0.2532716932, 0.417040532, 0.3302983395, 0.384555065, -0.1573336823, 0.371318093, -0.1093708134, 0.421298482, 0.1425323555, 0.495736478, 0.0403531005, 0.302958385, -0.2206251139, 0.279767951, -0.2667856264, 0.248455667, 0.1372682707, 0.281703006, 0.0035824033, 0.475976319, 0.3917064509, 0.401985224, 0.0723292124, 0.503963566, 0.2849822455, 0.462099159, 0.1865073529, 0.451960177, 0.3730857222, 0.484354627, 0.1001666315, 0.470928061, 0.2808199926, 0.359374566, 0.2325365032, 0.494898857, 0.0783343357, 0.459811455, -0.0437362500, 0.439796407, -0.0088666045, 0.491099424, 0.3022186063, 0.418721732, 0.1857572104, 0.390276222, 0.3154919032, 0.399469456, 0.0498277648, 0.454754097, 0.3038404628, 0.435410153, 0.1737382460, 0.445867263, 0.3164638891, 0.458967530, 0.1518767404, 0.335919344, 0.0823980295, 0.412763921, 0.3319087519, 0.471049431, 0.2156398459, 0.400699273, 0.1395100302, 0.374861658, 0.2794049727,-0.138108934, 0.1904884369, 0.280570722, 0.1983537837, 0.420120277, 0.2619778732, 0.454057069, 0.3034526292, 0.395791685, 0.0050987952, 0.365260425, -0.0272468779, 0.484034991, 0.3569887088, 0.370863417, 0.1093298911, 0.461277753, 0.2632357520, 0.350125223, 0.0183460251, 0.368930135, 0.2207677738, 0.531849230, 0.2197869496, 0.416717917, 0.1982293252, 0.414321880, -0.0860104879, 0.438841302, 0.0510552491, 0.398298536, 0.0872398038, 0.306217635, -0.0149914778, 0.469373834, 0.1709017285, 0.415929594, 0.1800595546, 0.385559535, 0.2280161638, 0.445047862, 0.1061824345, 0.450436609, 0.1659285617, 0.105991452, 0.2547355455, 0.401561850, -0.0054767733, 0.068325138, 0.1882970253, 0.428084182, 0.1258825829, 0.386663185, 0.2788034267, 0.364941456, 0.1938777481, 0.388006007, 0.2488389434, 0.313331553, -0.2704348401, 0.352922806, 0.0215689704, 0.448430163, -0.0917932667, 0.431449465, 0.3508000866, 0.432438166, 0.1241467239, 0.428358234, 0.0088965389, 0.451061147, 0.1955063904, 0.438706054, 0.4033386057, 0.375774923, 0.1732898787, 0.519488312, 0.2018627370, 0.440325400, 0.1348568173, 0.490158077, 0.3545691684, 0.504032360, 0.2314774746, 0.465533674, 0.3347213235, 0.351902301, 0.3282132558, 0.487045154, 0.0902528398, 0.429961565, 0.0480713261, 0.437203684, -0.0127309372, 0.469321808, 0.2620019309, 0.405157393, 0.1902570513, 0.464512601, 0.2275906537, 0.396079699, 0.1754275458, 0.441935381, 0.2202391505, 0.464574093, 0.2507926309, 0.483547025, 0.2672255285, 0.373521032, 0.0323174729, 0.350304993, 0.0555592694, 0.495803894, 0.2023701918, 0.436908707, 0.1397339520, 0.420933304, 0.1287640020, 0.333577474, 0.1964571050,-0.008696645, 0.4936956907, 0.498882187, -0.0429872111, 0.440681194, 0.2022239918, 0.419736249, 0.1800517691, 0.341754056, 0.0975732594, 0.351905803, 0.0467274302, 0.510698280, 0.2368967597, 0.319367930, 0.0144749590, 0.387776486, 0.1468031004, 0.363127252, -0.0183052364, 0.463043825, 0.1998336427, 0.485445196, 0.2410354073, 0.351766303, 0.1236472952, 0.378860874, -0.2068662282, 0.506548976, 0.0257762531, 0.462348947, 0.0841091086, 0.197060382, 0.0610563781, 0.369159733, 0.1978140552, 0.437006678, 0.1782706082, 0.353860893, 0.1619473817, 0.378029585, 0.1140002595, 0.501403770, 0.1153902428, 0.401394224, 0.0588935729, 0.275594490, 0.0233006882, 0.463520128, 0.0875897916, 0.404729147, 0.2917155155, 0.401167106, 0.2525394059, 0.429061979, 0.1794993730, 0.353765868, 0.2162066871, 0.356755336, -0.2663981227, 0.342817447, 0.0406485442, 0.405826288, -0.1289384243, 0.475344946, 0.3477611726, 0.512683744, 0.1740133571, 0.388901598, -0.1687308737, 0.416404997, 0.0422453698" par(mfrow=c(2,1)) <> dat.AJS.chull.1 <- get.AJS.data(dat.AJS.chull.1) dat.AJS.chull.2 <- get.AJS.data(dat.AJS.chull.2) bagplot(dat.AJS.chull.1,main="dat.AJS.chull.1") points(dat.AJS.chull.2,col="green") bagplot(dat.AJS.chull.2,main="dat.AJS.chull.2") points(dat.AJS.chull.1,col="green") summary(dat.AJS.chull.1-dat.AJS.chull.2) @ %rm in course of reducing bytes % \begin{center}\includegraphics[height=10cm]{p2012-Nov5-191529}\end{center} %

@ @ A time consuming analysis showed that on 64 bit machines chull will not work correct in some rare data situations. Here is an example: <>= # extracted from bagplot constrution of data set [[dat.AJS.chull.2]] # hull <- hull.bag[chull(hull.bag[1:5,1], hull.bag[1:5,2]),] # print(H1 <- H<-hull.bag[c(1:5),]); options(digits=22) # DATA HH<- structure(c(0.490158077, 0.484515879715913, 0.466198439833506, 0.484154626783293, 0.46323687483959, 0.244633264125914, 0.142239809910196, 0.0631969378331613, 0.140680941993944, 0.0504172806067828), .Dim = c(5L, 2L), .Dimnames = list(c("", "", "", "", ""), NULL)) HHdelta <- structure(c(0, 4.44089209850063e-16, 1.11022302462516e-16, 1.11022302462516e-16, -2.77555756156289e-16, -2.4980018054066e-16, -1.38777878078145e-16, 2.77555756156289e-17, -1.38777878078145e-16, -2.77555756156289e-17 ), .Dim = c(5L, 2L), .Dimnames = list(c("", "", "", "", ""), NULL)) dat.AJS.chull.2a <- H <- HH + HHdelta print(H) print(diff(H[,2])/diff(H[,1])) # PROBLEM plot(H,type="n",xlim=c(0.46,0.49),) points(H[,1]-0.0015,H[,2],pch=as.character(1:5)) no <- grDevices::chull(H[,1],H[,2]) hull <- H[no,] points(hull,type="b",pch=LETTERS,col="red") print(no) # SOLUTION experimental HK <- H+1E-10*sin(H+(1:length(H))) no <- grDevices::chull(HK[,1],HK[,2]) hull <- H[no,] points(hull[,1]-0.0005,hull[,2],type="b",pch=letters,col="blue") print(no) @ Output of 64 bits R: \begin{verbatim} [,1] [,2] 0.4901580770000000 0.24463326412591374 0.4845158797159134 0.14223980991019586 0.4661984398335061 0.06319693783316133 0.4841546267832931 0.14068094199394385 0.4632368748395897 0.05041728060678277 18.147797579590311 4.315170274037586 4.315170274037585 4.315170274037590 [1] 2 3 4 5 1 [1] 2 5 1 \end{verbatim} @ Output 32 bits R \begin{verbatim} [,1] [,2] 0.4901580770000000253361 0.24463326412591374081629 0.4845158797159134222987 0.14223980991019585795598 0.4661984398335061174912 0.06319693783316132629224 0.4841546267832931293995 0.14068094199394384768986 0.4632368748395896962400 0.05041728060678277167916 18.147797579590310590447 4.315170274037585684823 4.315170274037584796645 4.315170274037590125715 [1] 2 4 5 1 [1] 2 5 1 \end{verbatim} @ The result of [[chull]] should be the indices of points in a clockwise order. To check this condition we propose here a short algorithm. We build triangles consisting of the gravity center point and the end points of the segments of the polygons and check the senses of rotation of these triangles. For the check of a triangle we construct an orthogonal vector to a side of the triangle and multiply this with the vector of a segment of the polynom. <>= check.sense.of.rotation <- function(pg, debug=FALSE){ # find segments of polygon xy <- rbind(pg, pg[1,]); xy <- cbind(diff(xy[,1]),diff(xy[,2])) # center of gravity must be within the polygon S <- colMeans(pg) # compute line segments from S to polygon points S.pg <- cbind(pg[,1] - S[1], pg[,2] - S[2]) # compute orthogonal vector to S.pg S.pg.ortho <- c(S.pg[,2], -S.pg[,1]) # check sign of products of S.pg.ortho and segments of polygon product <- sign(rowSums(S.pg.ortho * xy)) if(debug) print(product) result <- "undefined" if(all(product == 1)) result <- "clockwise" if(all(product == -1)) result <- "counterclockwise" result } # check.sense.of.rotation(H[5:1,]) # check.sense.of.rotation(rbind(0,c(1,0),1)) @ By a little modification of chull the bagplot function has not to be touched: <>= chull <- function(x, y){ # 121018 x <- x + (diff(range(x))*1E-10)*sin(x+(1:length(x))) y <- y + (diff(range(y))*1E-10)*sin(y+(1:length(y))) grDevices::chull(x,y) } @ In the experiment <>= <> <> <> <> check.sen <- function(){ par(mfrow=c(2,2)) bagplot(dat.AJS.chull.1,main="dat.AJS.chull.1") points(dat.AJS.chull.2,col="green") S2 <- bagplot(dat.AJS.chull.2,main="dat.AJS.chull.2") cat("\ncheck of bag:", check.sense.of.rotation(S2$hull.bag), "\n") points(dat.AJS.chull.1,col="green") summary(dat.AJS.chull.1-dat.AJS.chull.2) <> assign("chull", chull, env=.GlobalEnv) bagplot(dat.AJS.chull.1,main="dat.AJS.chull.1 / new chull") rm("chull", chull, env=.GlobalEnv) points(dat.AJS.chull.2,col="green") S2new <- bagplot(dat.AJS.chull.2,main="dat.AJS.chull.2 / new chull") cat("\ncheck of bag:", check.sense.of.rotation(S2new$hull.bag),"\n") points(dat.AJS.chull.1,col="green") summary(dat.AJS.chull.1-dat.AJS.chull.2) } # check.sen() dump( c("bagplot", "check.sen", "compute.bagplot", "dat.AJS.chull.1", "check.sense.of.rotation", "dat.AJS.chull.2", "plot.bagplot" ), file="check.sen") @ To start the experiment you have to source the file [[check.sen]] into R and afterwards you have to call function [[check.sen()]]. Maybe you have to open / to close a graphics device. %Here is an result on an 64 Bit linux machine working with R-2.10.1: %rm in course of reducing bytes %\begin{center}\includegraphics[height=10cm]{pbagplot-R64-test-20121019}\end{center} %

@ \subsubsection{Missing Fence on 64 Bit Machines} <>= <> a<-" [1] [2] -0.85542065713103743185286, 2.15115941176330727202526,-1.19208671093331264323467, 3.66774452282849505735385, -0.44332994411219656116785, -0.21317176141080321216670,-0.95322582716228854149421, -0.79758373937012050358675, -0.85479663725104515492603, 3.61175712324778164230565,-0.91268445485646854109518, 1.27949971450243737969288, -1.02972242035120897796219, 2.62634358700534376040991,-1.06578451786594574635103, 2.40797744493886467509469, -0.99462129329400283950235, 2.19461204176771085272435,-0.93615304864389947692160, 3.98785902813514248066440, -0.87633319305915147179320, -0.82248044322106939052475,-0.91160849529685894498954, 0.71255600189825929469123, -0.71553767273962853856517, -1.12608254028895471421379,-1.00089398608643542765151, -1.40287959852118815362587, -0.89148998709359150716125, 1.46870994188889447684687,-0.36605692591031580018779, 4.16028792021881255180915, -0.68595089215973226171030, -1.85146061828132202364827,-0.87627174984264033508197, -1.92221969981974849517314, -1.14052717980054918456290, 1.33595462421871857827682,-0.88833580137564149836749, 0.96457122750992818627225, -0.81932857201586739570587, -1.65177120947502698022902,-0.86658855088213104789219, 0.40855433537343288641353, -0.73673765728454276846549, -0.49773687235231595105134,-0.88554141220049753524535, 0.86994647442387196267788, -0.79360884407707521503994, 1.33197723079977392579565,-0.75110297829525662915984, -1.86429685214754492506017, -0.88603320865447221521549, 2.16300940412966724579746,-0.92084115961151147278230, 2.42777488875512670318813, -0.97846852292064179223985, -0.86081425133438205232750,-0.80200388417651757855253, 3.35789826563776561130226, -0.82818022245386291313451, -1.41081320281005262451401,-0.97780624886553446639681, -1.96803970412010875712383, -0.84138941333961292379229, -0.85419759131321548739635,-1.11248185778216912567018, -1.75047269918798797938564, -0.90861092700168644142877, -0.03154563313117414447007,-0.91222915501874812793659, -0.16875175646029058618147, -0.74125339243012500212160, -1.50712552710574421155343,-0.92081087305956699218257, -2.34957445097489436847127, -0.89265368839120595723102, -1.58682233425998275855306,-0.64533249051768459825240, -0.63951970842675454065329, -0.73960699012255393114401, 3.08052358043773111262453,-0.27640299765590881087007, 0.97581793030082419893034, -0.73298122428301526465333, -1.13714950165858486030857,-0.79623011220256745268387, 2.63666014221451439070165, -1.00835243230316029539040, -1.40945339148407344787017,-0.87478918062834831737007, 1.24675696471899977169073, -0.93946891162959234033991, -2.23575887285715113605988,-1.04113028341499225248867, -0.43332693763433755007597, -0.76258441597715431736759, 3.69076400280236782691645,-0.57836809658018817348335, 0.58236063011682748236097, -0.69977456904717649788239, -0.42784078420383764296275,-0.93790621478827507218057, -1.23938814395473317908625, -0.88101264064400186537540, 1.04036456759652584658227,-0.89565716239652615193734, -1.15213899494298299686079, -0.88073661348396981018993, -0.46336430056633926000131,-0.83354137703608410792100, -0.27105160655942905911786, -0.89622502713265317364488, -0.12507798123440422299879,-1.12563752613271184088717, -1.62167285494578172766467, -0.65403324811386631676413, -0.25083729123204911992673,-0.79141996681884174691390, -1.75375362795426292805701, -0.81342494079997351708045, -0.56944822640215031483990,-0.63545464068483314967750, -1.05479489085510191870299, -0.96718903796691368945915, 0.98194230723463771237647,-0.71173633102162658925494, 0.08662285463906345406304, -0.91242534533703412158445, -1.39957483199717036548293,-1.09725750173244129825889, 3.97178173324818706291239, -1.21052268010369701300988, -1.48751954527648222459391,-0.81908108031154047701250, -1.27198362461345637619559, -1.14606306248618672327666, -0.44462239094451466714375,-0.83951662234607338231029, 1.97383080095296681299999, -0.69281568011474070623024, -1.08739186954697086839872,-0.92702765377606477503747, -1.90638933837394408676857, -1.08475990524972520923086, 0.54083768868734993784386,-0.74804814036824185397023, -1.42725217807927129420875, -0.78518151235595234904707, -1.99728512981022721106683,-0.86017213803678183037249, -1.73152747779483395795808, -0.99670662779066943048889, 2.16261737623493743853942,-1.00403022304053246571698, 0.24256266822290292739517, -1.01467821900339827401183, -2.07116594995068092899260,-1.00247798450164249395300, -0.14913070069269826478653, -0.96438334576132545006288, 1.16208712645935952068044,-0.56163412128444445414743, 1.04816397287585671982413, -0.71434503938257354338504, -0.35783806034041643062693,-0.74532409405136224034294, -1.75345338759696312003200, -1.00919859412432599832243, 0.82797220034547724942797,-0.94184002120392762424927, 1.90607649321686811738630, -0.99394705183593690112076, -1.93964359388215057400373,-0.87255876098107965077588, -2.16381752759855094936370, -0.62639084886192797352322, 4.35823639371033522138532,-0.57247573658732819890105, 3.54378219433118113457226, -0.62315268461537154376373, 0.13862488040837206426659,-0.65419841565757663737202, 0.92369901723464797882457, 0.03309816698677478519208, -0.13557140974280332268442,-0.87777378708361686321382, 2.90815095470915130348999, -0.69020108684955261413307, -0.99703789671200426791842,-0.74095694478300444529850, 2.10712418212813190621091, -0.78311270974437130476531, 1.35943640789450159722662,-0.72199281436762197117218, -1.16535975642339906244160, -0.73980115615844443954785, -2.07242115308210284041479,-0.85631750269442230560912, -2.36587236356609098564263, -1.04127739104801664282718, -1.92450576638652903760374,-0.80928298412162491537458, 0.72392040011114167086248, -0.93583032355408235503091, -1.27167197741731108351360,-0.95138676011143852306873, -2.48335768309353754901281, -0.69510873525639660375219, 0.74003425362884445171119,-0.70828292764230726952235, -1.74029456843447971614580, -0.81702636955651475325624, -2.05636676767318204994694,-0.85572166595426168989036, 2.78217824845197725380785, -0.86741128291380464876426, 1.12033186184798894124981,-0.96308575187273048889836, 1.82344575383575158156191, -0.93159049564866858172962, 3.20834229131545622948352,-0.68151907982343462588659, 0.18221251081852365971692, -0.92400177982538100884824, 0.87270298176576499571411,-0.97538875480163556019875, 2.18433079669054741600576, -0.99919104266104008527094, -1.25971805320735641409158,-0.98120649708865659288648, -1.54488964063029277085093, -0.80851827734517944801240, -2.31505004467299890791310,-0.85603194542064975358642, -1.41321565504162394155685, -0.77325144466991402314449, -1.30092335913405610092752,-1.01047378468256954242577, -1.21727202974861303808041, -0.38529689209950268580229, 0.12314176482201232010194,-0.71973981721237956232784, -1.56774140839910991473971, -0.76005902450584117424626, 1.10837120469666472466486,-0.61064683153355137079643, -1.13939175278273729929879, -0.76807357828877498295839, -0.00269127688095640183602,-0.89317762193375327406386, -1.42008903399852659532598, -1.01254408420323827044740, 1.64412344792320319619705,-0.68277285288512268301986, 0.33100419868027375347452, -0.81589562866355525017070, -1.99759904852324354784798,-0.58658679506311994789058, -1.46298614773908153274817, -0.99174871126505703688991, -0.26864432863314841037905,-0.77828250249729868937010, 0.02858300289900294124945, -0.99784814492361284532507, -1.01801682773381951818692,-0.51771175060428586967021, -1.42044092792102305544688, -0.88420493651326714790173, -0.98797560290833985607861,-0.99105879193639900837098, 0.30988310585651729356371, -0.91469596088505922271139, 0.20933151735940622173437,-0.61085999973417393071884, -0.58778480744151484493898, -0.96082412847253029219985, -0.02760055760616408893071,-1.00908383642081078690467, -0.23342120830486215443678, -0.53495137426864836083240, 0.67135401711554276715788,-1.00351606601209342173320, 1.61975151820372742506038, -0.86163025367487566796854, -1.10313813559391427077117,-0.16595557271042252200921, -0.94943637498399602314691, -0.79340636091193761370022, 0.85180196502530747260096,-0.98219121347453497428148, -0.35157957151463703482364, -0.70171562990080948996052, -1.61987022813334813342578,-0.85380558130534844885062, 0.10234446964598327423079, -0.91119999758376091225642, -1.96270424211922911439387,-0.47369410497787611813436, -1.24568659795105607379639, -1.12481208976129720689130, -1.42955649956258801225317,-0.68591498029136899194924, 0.24086970329518186950679, -0.76159739005818971602224, -2.17628822407068733824076,-0.30774176753390330985027, -0.94783883220475617648049, -0.69009417166443720592639, -0.40384873023512818379643,-1.09215856416705370257603, 3.06484030358443337860308, -1.13547332040171000677731, -0.04304150012349711174053,-0.94715770497794005144954, -1.31765917652509001456451, -1.07544933888194038651420, -1.82492898459917007869535,-0.82569383227340431563590, -1.35490492090438774397398, -0.94837153414965524866886, -1.42255779965187789670722,-1.03635341123188906564678, 2.72592699650955738732705, -0.59932470879666066565505, -0.79764386660595165690069,-0.70324574408490092558566, -0.56117886859764154472430, -0.79714090859361974583663, -0.48864062578625833133117,-0.72779961394791581330566, -0.26803283834927038586926, -0.83754347161269926402838, 0.56048697226773325219540,-0.68858719457172146150015, 2.00679315949350023373654, -0.82674205334838080094784, 4.94926611751849154785532,-0.69987160072848875191909, -1.99703263637585459733259, -0.76465448238960143090281, 0.35773157027152419074056,-0.86219755182467683329861, -1.18794597298212489810965, -0.75492869446957344692350, 0.32498902518557637453256,-0.84516874464692981483438, -1.79451696945702754426577, -0.62097653530934382448692, -0.58968771620255122645204,-0.89084522505621299703904, -2.09769826909406864601237, -0.58614497755964112268856, -1.42116887519834378394989,-0.78279898917940027303075, -0.22883718172734973661520, -0.72184550479257536537148, -1.14251491700111573734944,-0.65548450442827721484917, 2.80460158305232143405306, -0.71739738939399744221959, -1.55466888276810100144587,-0.79986165711412759993237, -2.00828362990076847438559, -1.02952923424522979622964, 0.85086961179459741355657,-1.04653794258775967307429, -1.58941391932855591306861, -0.84668604625847099232061, -1.34703054251816567443711,-0.84839149177916028943258, -1.43666023259784392251959, -1.10549201237889382909430, -0.60278827664105838479713,-0.75468710077653500256645, -0.65105985980144276403792, -0.84256347947229526251789, -1.55158780120198191987413,-1.08702182244534495403343, -1.17579656519432251826629, -1.00601134978073059045300, -2.40118403419167103507448,-0.71193792804248645644805, -0.08770761907600356510617, -0.54646188412085971997101, -0.83537679656777819037217, 0.28880018017186870338264, -0.25539757411815977583558, -0.78238616974000174675297, -2.04181536457609746904041,-0.90125240262175132510691, 0.62930084060831015246862, -0.72532662485869570101471, -1.14748564835558175545316,-1.12352874453347850725038, 2.95087452398932459374237, -0.81885756448996671608143, -0.72229257598666363193729,-0.92110061861498138124915, 1.45563836704469151683838, -0.56375204542899770565612, -0.72294121136084810164135,-0.82851790233519451156496, -1.18435169808617657416505, -0.71349563374569435758588, -1.73786842359159754423104,-0.74942607595237131778987, 0.51899942217620631534913, -0.13249578359112310077528, 0.29969133883730475487184,-1.06584931484566491910471, -1.09809126239714527351055, -0.85330821795335043411512, 1.44275179489447413772041,-1.15013113475822548181782, 0.03186078936976277642401, -0.84799717846286148947854, 0.74514093268018632976180,-0.95020073072400834668372, -1.15803745550225345439799, -0.75228416807307929570214, 3.81662560019176932968321,-0.73845273625461438360418, -2.63485854127420449088959, -0.63483041132239192982922, -1.96716954625766615727400,-0.73009804114494858406914, -2.40174982350467525193949, -0.83557219788865222387386, 0.83783234926001504128124,-0.85473511925759448892848, 4.79747892203358183849105, -1.13128942768651596928464, -1.93698057434386350372790,-0.96668634873506098514895, 0.70876197175452304577448, -0.78019693666632394801752, 3.44713277528197181709402,-0.70391582361987770077860, 1.98235848995349450696324, -0.62536333039563885005663, 4.32977199947720503558912,-0.81222108274463133970045, -1.40500895686213089774697, -0.77902262249902587409878, 2.89592538144002498157192,-0.84993647888927637001899, 0.45811820144298964763152, -0.81473457118633252349582, 1.13888622052352106450712,-0.80604966503166086688736, -1.36019627870992088070068, -1.09745982191787994075582, 2.63778886293564251985799,-0.72605809403965193560282, -0.03755168934339410402590, -0.35209683987193424181683, 0.30125076379655502112342,-0.91372048589679788488382, -1.55310044858275242418699, -0.81094257708929540218179, 0.03282954100772271510689,-0.99817961036730040724763, 2.91418986509012523100637, -0.58942884669778417006114, -0.38561313655228945940223,-0.80786503023236011511443, 1.72786967610222830238342, -1.07276357918832543347776, -1.16586165844052636053618,-1.07295251746894848565717, -2.24887328562919108776441, -0.85001710054645984726562, -1.34349395653242686954343,-0.75844877067192684183539, -0.96739640833556916899028, -0.71101933649891457811520, 0.47108272238129339504198,-0.71349267860304776966984 -0.61834827276289272557364 " dat.AJS.fence.1 <- get.AJS.data(a); bagplot(dat.AJS.fence.1, main="dat.AJS.fence.1") @ <>= <> a<-" 0.488565925036412662674223, 0.4788830230285979205895330, 0.470518882899528423369162, 0.4755379903005585995323656, 0.540821318900958192266160, 0.3452584612790277618366019, 0.543880329284483932106298, 0.2321764386212968045430927, 0.334695846810999286802257, 0.2329343592006747343248207, 0.310005377685083016725542, 0.2738714764796457146189823, 0.472091749674024396821181, 0.3495517610383970796839037, 0.470453133990287764021332, 0.4563524147511247019970426, 0.239437538963621576737495, 0.3450803438560707259163962, 0.407605742194999509653286, 0.2770631606622363518610541, 0.405297909936674971564941, 0.3564038970003686745968707, 0.426698946910272269850140, 0.2959717498266932200756685, 0.474078974951626763711943, 0.0632119081706708912937742, 0.518165669459433098076317, -0.0208026309734368752835110, 0.389182699194088488336973, 0.3093662369282451640728482, 0.386863379163557341566815, 0.3639162011488026871042223, 0.425943786936054447078703, -0.0809216837347255524282019, 0.397113987796910483663027, 0.0008999279456975259501583, 0.438144515529690747879243, 0.2093360857799788921074224, 0.328446751697633210209659, 0.2751362229330584496800327, 0.461876192480900560344281, 0.0668544125659962518160029, 0.414702341447854616607316, 0.0073236107253863329605292, 0.432106260664682051420016, 0.1879619488777506675081241, 0.395722604485037765531530, 0.1531447992834467641820595, 0.333445239047859665060258, 0.1965294920673828216184376, 0.401681093963615620801022, 0.0946842859784723239746640, 0.400866278174864976158176, 0.1471984007921947890107361, 0.464762400209403125916907, 0.2009867588029477236677423, 0.549788160872832665226895, 0.1278160114450895834536936, 0.381209639768359198619407, 0.2668751891155876632133470, 0.550009152816997137769306, 0.0668940682809511938389235, 0.477231632689670060010201, 0.0741204859518660857942152, 0.458550418959452921185971, 0.0776261286842003100927556, 0.528876577973242389951736, 0.0949198625156014996750997, 0.486467492116636091026294, 0.1845373489642387898612697, 0.418601287671568234038944, 0.0991622310369848491973244, 0.431444646527195108109964, -0.0954361392183528528532221, 0.410791284509544551983851, -0.1344827904070514668077863, 0.395781199824565221856432, 0.1228690809909824266377143, 0.469332442969894070294856, 0.1508254155849814148737664, 0.503049055380703213913307, 0.1850646603028898995457752, 0.573583529063881991660878, 0.3707267482610320796787562, 0.539540160667456469845149, 0.4411587741270995288722645, 0.457799411020661739524229, 0.4406425282522002939700201, 0.389979310257221101210234, 0.1327572439545967042384689, 0.395014994054688040048262, 0.1097540690978915517428405, 0.439149131638831347057561, 0.4193625991526864771330452, 0.121568355584936352298264, 0.4339816580876698637325717, 0.335450966887692048068459, 0.2473479868463136777112510, 0.351411588546627129403532, 0.2246294926689241799877550, 0.506931530664690099818870, 0.2389686803487043320615157, 0.416453890776864510403499, 0.2150714006960237900667465, 0.445728306669456675326302, 0.2102598983137355936889890, 0.466270712549676169533797, 0.0843892346292415551634036, 0.487207645781002174345531, 0.3059151602998300689684186, 0.469777318263590537572583, 0.3957816521807506204844174, 0.377067896799580637434701, 0.1590144819105466233999380, 0.453149790799679430541858, 0.1215962091891261420695258, 0.487757526130484675430665, 0.3732180676369796779034971, 0.440667092149550854163209, 0.4203912649541739487979441, 0.408446800624878980645605, -0.1618030914002129283524312, 0.384406712559258345596191, -0.0261348063728542405470545, 0.328457377392783189673509, 0.1821870523887156312348168, 0.331531071874300753421494, 0.2324458686458765466209542, 0.476092076084575321903714, 0.2588599611500894681626050, 0.433767577422285610655450, 0.2835973312618549346808550, 0.393793741503250860347407, -0.1773741681645460421812288, 0.375897237966888619897787, -0.0703216253522565698519387, 0.495413425141699670373185, 0.3006890687220556412917460, 0.504610944570432873312882, 0.2887805058143382841429059, 0.431192387166821511357284, 0.0947182526586476392083114, 0.340937433712147242026447, 0.1329507636456480346165421, 0.420446411323254720660003, 0.0483223700436425998572254, 0.370470482089916230972193, 0.0277816648668944184141782, 0.441037167199129720440709, 0.2107626360386905817190240, 0.419959107781044338469911, 0.2824900723710290773027509, 0.439763006956421009796543, 0.2778222223877927499202656, 0.464372875417278285770095, 0.3177378989007230702945606, 0.276309247060232576753691, -0.1202539041759453086744003, 0.298239821897850698739774, -0.0296142651449498549298678, 0.395415764674621084129313, -0.1763745879581422593140871, 0.347422594070579682234978, -0.0848076458082471090760279, 0.339350476740504836126178, -0.0695299708858954784718165, 0.414959369029142932649989, -0.0048385120265832422259411, 0.459727233012242109122525, 0.2059384488751775654780118, 0.499622833076944272701070, 0.1055938656159665228750910, 0.440380490523102519073717, 0.0351622931865073623525220, 0.482813054408696429309344, 0.1113387917612616989648799, 0.432127973903995210580575, 0.2362151044188228743436753, 0.490176416856921814968473, 0.2595152506103633460732283, 0.478778121283525648355095, 0.2342718274692105751011439, 0.464692711758631471496983, 0.2229430092565458654263466, 0.391963528582289721935439, 0.1503685476363093853624520, 0.415382188531344009874147, 0.2260871923819901541108379, 0.460109318047086657266220, 0.2820022326407002344339503, 0.419856322790740588146718, 0.1560030888975831031562080, 0.439414518877366266913498, 0.3699970203676556934624386, 0.480511782736342096811200, 0.2949392123900372308931139, 0.437066976232192427875844, 0.1592860166985547998308448, 0.476422133435934369583009, 0.1429539737753039441159331, 0.271275837717732004605864, -0.0995991440991172982677426, 0.353014229438460613863526, -0.1305150420251256770942661, 0.357543712693103532540562, 0.1943096579024176095984444, 0.457267580136557938441655, -0.0176971730175275836216553, 0.427558336829375829069022, -0.0231909551915799178045674, 0.432525049981503817431161, 0.1516561841784528630316942, 0.451225648652902766588824, 0.1501701067714517889850612, 0.361330738603812651188463, 0.1264174670413595047424593, 0.435216894190775471784605, 0.1009900091897135004925801, 0.470581162898296934127274, 0.1851202194385961619094161, 0.437460030660461018925389, 0.2532716932405828513807933, 0.417040531646397594212061, 0.3302983395435944435902798, 0.384555064931715928633338, -0.1573336822941461821123710, 0.371318092688570966508621, -0.1093708133581914876408803, 0.421298482269021778989782, 0.1425323554856109675714748, 0.495736478252773005159781, 0.0403531004651603228405854, 0.302958384980159090016372, -0.2206251139096475355483307, 0.279767950817931709828201, -0.2667856263934703653362135, 0.248455666945173819781800, 0.1372682706517066586471287, 0.281703006061099270329606, 0.0035824033289076563819908, 0.475976318661099573326112, 0.3917064509029100638493048, 0.401985224405800756208862, 0.0723292124431540173201682, 0.503963566232464188487938, 0.2849822455257227660219144, 0.462099158946540189418783, 0.1865073529325808887602278, 0.451960176846561534347302, 0.3730857221547440039088883, 0.484354627447674712659165, 0.1001666314526957063391066, 0.470928061192341984586562, 0.2808199926061369366969700, 0.359374566259886285557457, 0.2325365031862380305049953, 0.494898857108408918303866, 0.0783343356748880115247857, 0.459811454891438209369170, -0.0437362500299243728285603, 0.439796406579993748309221, -0.0088666044667374890875244, 0.491099424456228894619869, 0.3022186062741255008212704, 0.418721731642468675271829, 0.1857572104407961555150308, 0.390276221729421390893577, 0.3154919031871089019070098, 0.399469455790136929174139, 0.0498277648167823605795945, 0.454754096854184497455975, 0.3038404627830221249595866, 0.435410152674876649303570, 0.1737382459751893870603112, 0.445867262786282525510728, 0.3164638890784514102527680, 0.458967529691548414838564, 0.1518767403682781125251466, 0.335919343619362931185890, 0.0823980294588803341415684, 0.412763920830580666176957, 0.3319087518713340068110540, 0.471049431246630845304679, 0.2156398459278842105746321, 0.400699272940918671537247, 0.1395100301705456957712670, 0.374861657961513439207835, 0.2794049726512318199134199, -0.138108934234092650683579, 0.1904884368528304006140672, 0.280570721977494219601112, 0.1983537836884063931819355, 0.420120277115559659364408, 0.2619778732066581627968560, 0.454057068735585156460388, 0.3034526292199665742366221, 0.395791684619125783139992, 0.0050987951562562298934989, 0.365260424959625518148698, -0.0272468778624029156487651, 0.484034990799743880529604, 0.3569887088322822310537674, 0.370863416510424204197705, 0.1093298911135483775236565, 0.461277752786707073706651, 0.2632357520089478875036093, 0.350125222763810362014425, 0.0183460251321451266182105, 0.368930134538406506727881, 0.2207677738108504150726930, 0.531849229752716645691635, 0.2197869495669303729901145, 0.416717917131823767373788, 0.1982293252409910999656262, 0.414321880482149074165221, -0.0860104879183531539910135, 0.438841302318247195035639, 0.0510552491055184659574095, 0.398298536249736545578060, 0.0872398037610459115009931, 0.306217635368917995286608, -0.0149914778112886330763143, 0.469373833730254985674435, 0.1709017284625866106573255, 0.415929594466704966038151, 0.1800595545698811805745976, 0.385559534967464867527553, 0.2280161637862092305351069, 0.445047861541811862196028, 0.1061824345291962623516469, 0.450436609467876891699234, 0.1659285616769800852932093, 0.105991451516687498757285, 0.2547355454603117408396429, 0.401561850053824997974772, -0.0054767733163579414637501, 0.068325138187451131543959, 0.1882970253456990872287236, 0.428084181655836837343543, 0.1258825829068733470617047, 0.386663185037617151973421, 0.2788034267395078646956108, 0.364941455716851159696290, 0.1938777480575513967320234, 0.388006006739891329271330, 0.2488389433599013378373144, 0.313331553203334722823570, -0.2704348400571525146141028, 0.352922805801725303354033, 0.0215689704006152803417162, 0.448430163284227911724145, -0.0917932666811329678324682, 0.431449464825348683039152, 0.3508000865839108750598996, 0.432438166022204639737936, 0.1241467238586335397609872, 0.428358234301227214224639, 0.0088965389495472245451335, 0.451061146935774315291923, 0.1955063903810788650261543, 0.438706053898136660862406, 0.4033386057135291413722200, 0.375774923167026320136586, 0.1732898787280841290669997, 0.519488312493662673929862, 0.2018627369504666646538027, 0.440325399842820874862781, 0.1348568173426236971312875, 0.490158077485978449505666, 0.3545691684017332478973117, 0.504032360432461246091407, 0.2314774746120594750564692, 0.465533674286672471964721, 0.3347213235409923770546925, 0.351902300975328263810127, 0.3282132558030887437006129, 0.487045153698114741125380, 0.0902528398319727559462322, 0.429961564597323653291738, 0.0480713260550880150390185, 0.437203684433824457666873, -0.0127309372130392176730718, 0.469321808013436481132885, 0.2620019309451309674763309, 0.405157392954838768694970, 0.1902570512550103010163127, 0.464512600773935580011909, 0.2275906537161559162196767, 0.396079698974603044980825, 0.1754275457698743490020377, 0.441935381229888457621513, 0.2202391505171113483818601, 0.464574093329662873852470, 0.2507926308999658404630395, 0.483547025428987031769879, 0.2672255285437769023459964, 0.373521032078406201026866, 0.0323174728928018809015477, 0.350304993220608817949824, 0.0555592693927829464617396, 0.495803893968995323948690, 0.2023701917822340878849730, 0.436908706786744593930649, 0.1397339520367077425611058, 0.420933303726012564283110, 0.1287640020024260756326129, 0.333577474493375381037197, 0.1964571049898150012502640, -0.008696645322344730144604, 0.4936956907050398246639134, 0.498882187348169858776004, -0.0429872110727758799386677, 0.440681193952783212264279, 0.2022239917636600992079110, 0.419736248847867643441134, 0.1800517691346032178589809, 0.341754055915502841234144, 0.0975732594081305942834703, 0.351905803459053090342934, 0.0467274302256285301027106, 0.510698280023458961451865, 0.2368967597004825731410449, 0.319367929544649598039285, 0.0144749589516537692512888, 0.387776486196835801223415, 0.1468031004190566979339394, 0.363127251904536374471633, -0.0183052364380072371541353, 0.463043824984787411036535, 0.1998336426667024767755976, 0.485445195724856781716028, 0.2410354072978813655403485, 0.351766303400639024356877, 0.1236472951599203590200560, 0.378860874310987749691293, -0.2068662281780968004163412, 0.506548976335976064433453, 0.0257762531349018247928129, 0.462348947369779106342236, 0.0841091086286257227921936, 0.197060381522191130354571, 0.0610563781132145988461701, 0.369159733288869140732658, 0.1978140552312874778095875, 0.437006678117996483212693, 0.1782706082132221037106490, 0.353860892739909282944666, 0.1619473817349794397824070, 0.378029584800037510294857, 0.1140002595451527489522903, 0.501403769547227207148410, 0.1153902428064478985492158, 0.401394224316792058715464, 0.0588935729341639457867785, 0.275594489591146629692275, 0.0233006881735083951068255, 0.463520128314569346272833, 0.0875897915931757586882611, 0.404729146503447878568949, 0.2917155154720760257269774, 0.401167105521437583615096, 0.2525394059250221090451305, 0.429061978765738316621281, 0.1794993730327074099584195, 0.353765868289411034020020, 0.2162066871434025205900298, 0.356755335938158446573709, -0.2663981226678143188202341, 0.342817446803536374222432, 0.0406485441629076960090572, 0.405826288444388227905080, -0.1289384243139815866552311, 0.475344946440783899799243, 0.3477611725526632557858875, 0.512683743910172906588230, 0.1740133571079716390261893, 0.388901597797993381355752, -0.1687308736650941221046907, 0.416404996762255230624561 0.0422453698295842117182985 " dat.AJS.fence.2 <- get.AJS.data(a); bagplot(dat.AJS.fence.2, main="dat.AJS.fence.2") @ <>= <> <> <> <> <> check.fence <- function(){ par(mfrow=c(2,2)) <> <> R1 <- bagplot(dat.AJS.fence.1,main="dat.AJS.fence.1") cat("\ncheck of bag:", check.sense.of.rotation(R1$hull.bag), "\n") points(dat.AJS.fence.1,col="green") R2 <- bagplot(dat.AJS.fence.2,main="dat.AJS.fence.2") cat("\ncheck of bag:", check.sense.of.rotation(R2$hull.bag), "\n") points(dat.AJS.fence.2,col="green") ## summary(dat.sensitiv1-dat.sensitiv2) ##define another chull function>> ##assign("chull", chull, env=.GlobalEnv) ##bagplot(dat.sensitiv1,main="sensitiv1 / new chull") ##rm("chull", chull, env=.GlobalEnv) ##points(dat.sensitiv2,col="green") ##S2new <- bagplot(dat.sensitiv2,main="sensitiv2 / new chull") ##cat("\ncheck of bag:", check.sense.of.rotation(S2new$hull.bag),"\n") ##points(dat.sensitiv1,col="green") ##summary(dat.sensitiv1-dat.sensitiv2) } # ; check.fence() dump( c("bagplot", "check.fence", "compute.bagplot", "check.sense.of.rotation", "plot.bagplot" ), file="check.fence.R") @ %Here is the desired output of the chunk. @ %rm in course of reducing bytes % \begin{center}\includegraphics[height=10cm]{p2012-Nov5-192533}\end{center} %

@ \subsubsection{Further Na/NaN-errors} <>= <> a<-" -0.5287511, 0.29140334, -0.5491688, -0.05484604, -0.3919317, -0.11957324, -0.2342807, 0.02022132, -0.3921559, 0.29079326, -0.4158044, 0.18658202, -0.2871524, 0.05062737, -0.3617926, 0.29075199, -0.2892480, 0.05695156, -0.4405352, 0.12075804, -0.3838563 0.03978882 " dat.AJS.NAN.A <- get.AJS.data(a) bagplot(dat.AJS.NAN.A, main="dat.AJS.NAN.A") # OK @ <>= <> a<-" 0.33817, 0.02979,0.32204, -0.08801,0.29517, -0.25250,0.22258, -0.08154,0.26135, -0.08324,0.34717, -0.11121, 0.35933, -0.19076,0.38608, -0.14942,0.45037, -0.12851,0.04225, -0.16722,0.29133, -0.04328,0.33022, -0.09896, 0.20654, -0.08464,0.28204, -0.04508,0.29815, 0.14699,0.30624, 0.12807,0.15477, 0.03248,0.32912, -0.07302, 0.30138, -0.08916,0.18917, 0.17526,0.23798, 0.02009,0.23924, -0.14238,0.17265 -0.11008" dat.AJS.NAN.B <- get.AJS.data(a) bagplot(dat.AJS.NAN.B, main="dat.AJS.NAN.B") # OK @ <>= <> a<-"[1,] 0.3786439 0.097738688 [2,] 0.5362123 0.339630360 [3,] 0.5193582 0.157707944 [4,] 0.3338111 -0.115373436[5,] 0.4582097 -0.043625237[6,] 0.4921440 0.074836745[7,] 0.5218369 0.102194532 [8,] 0.5172927 0.137981797[9,] 0.5433263 0.211029679[10,] 0.4827819 0.015513368[11,] 0.3460246 0.080163464 [12,] 0.4494423 0.166911911[13,] 0.5122454 0.065798073[14,] 0.4136952 0.162839099[15,] 0.4979262 0.083749028 [16,] 0.5058579 0.057943131[17,] 0.3867839 0.175866756[18,] 0.5063583 0.065406168[19,] 0.4807745 0.201581462 [20,] 0.4599295 0.177264912[21,] 0.4500260 0.105345954[22,] 0.4336654 0.197944371[23,] 0.4406115 -0.060430011 [24,] 0.4492211 0.109822612[25,] 0.5160831 0.015950560[26,] 0.5043602 0.066780298[27,] 0.5465611 0.145911903 [28,] 0.5541721 0.134060064[29,] 0.4727388 0.006861838[30,] 0.5613212 0.077141184[31,] 0.5369902 -0.024873891 [32,] 0.4378382 0.122520785[33,] 0.4252500 0.093480024[34,] 0.5039986 0.075154013[35,] 0.5216457 0.196010331 [36,] 0.4117548 0.035776717[37,] 0.5040175 0.143153339[38,] 0.4845090 0.136095252[39,] 0.2075045 0.154560697 [40,] 0.4061658 0.250111568[41,] 0.4942135 0.178913967[42,] 0.5407099 0.008868236[43,] 0.5317494 0.095625935 [44,] 0.4559603 0.135323999[45,] 0.4634133 0.180307104[46,] 0.5268978 -0.041798329[47,] 0.5831482 0.127251165 [48,] 0.4120890 -0.010194722[49,] 0.5693523 0.057730316[50,] 0.4794066 0.129579450[51,] 0.5242518 0.134452331 [52,] 0.4402205 0.097278607[53,] 0.4071411 0.115581565[54,] 0.5605076 0.094539922[55,] 0.4889528 0.155507716 [56,] 0.4570601 0.046582559[57,] 0.4699092 0.163047744[58,] 0.5025529 -0.019894103[59,] 0.5441058 0.218039267 [60,] 0.4621933 0.095914941[61,] 0.4115889 0.154296680[62,] 0.3124742 0.118646650[63,] 0.3777633 0.177376132 [64,] 0.4529856 0.316883371[65,] 0.5279446 0.085011958[66,] 0.5126856 0.142196509[67,] 0.3278320 0.199462024" dat.AJS.NAN.C <- get.AJS.data(gsub("\\[[0-9]+,\\]","",a)) bagplot(dat.AJS.NAN.C, main="dat.AJS.NAN.C") # OK @ <>= <> a<-" 0.4015263, -0.26233503, 0.4317795, -0.20336274, 0.3630288, -0.17533677, 0.4665716, -0.43077830, 0.5019500, -0.16576077, 0.4465282, -0.22522654, 0.4564547, -0.19561030, 0.5397231, -0.05622721, 0.3168710, -0.18490364, 0.4637404, -0.31444370, 0.2084304, -0.18378842, 0.5039862, -0.27860019, 0.4686724, -0.42776110, 0.4710615, -0.40642947, 0.4341304, -0.23033476, 0.5164032, -0.18469189, 0.4881164, -0.14362839, 0.4331307, -0.32284998, 0.3839510, -0.01538800, 0.4679067, -0.42500528, 0.4221514, -0.26589452, 0.4611424, -0.26542121, 0.4804025, -0.51445482, 0.5115250, -0.45830031, 0.4571291, -0.32162648, 0.3930053, -0.39147648, 0.4628674, -0.07719377, 0.4653781, -0.27503555, 0.4393759, -0.22965847, 0.4964249, -0.49612750, 0.2991952, -0.19227342, 0.4852176, -0.41668100, 0.3462163, -0.18303605, 0.4071043, -0.15098413, 0.4252945, -0.38060330, 0.5436867, -0.33408535, 0.4869311, -0.39235895, 0.4441376, -0.52603457, 0.2704323, -0.30335612, 0.3871155, -0.36949791, 0.3883343, -0.35457602, 0.4627015, -0.10874423, 0.4425959, -0.48179784, 0.3449825, -0.29517753, 0.4584851, -0.02167414, 0.4887845, -0.25134534, 0.4651791, -0.29775759, 0.4767561, -0.29090887, 0.4342507, -0.03061359, 0.4245398, -0.49428349, 0.5156233, -0.21271206, 0.4240498, -0.45404050, 0.3868688, -0.27232066, 0.4491924, -0.41249646, 0.6022689, -0.45291968, 0.4623975, -0.33215390, 0.4475317, -0.27044472, 0.4851270, -0.41659817, 0.5006870, -0.47004304, 0.4542369, -0.31246866, 0.4392972, -0.35501689, 0.4987533, -0.17762899, 0.4711685, -0.32507225, 0.3651114, -0.12669620, 0.3379918, -0.34953533, 0.4950965, -0.34470014, 0.3751116 -0.33303722 " dat.AJS.NAN.D <- get.AJS.data(gsub("\\[[0-9]+,\\]","",a)) bagplot(dat.AJS.NAN.D, main="dat.AJS.NAN.D") # OK @ <>= <> a<-" -0.4430864, 0.4296289, -0.5519971, 0.4087558, -0.2946034, 0.5730177, -0.4017741, 0.3810218, -0.2382924, 0.5786751, -0.4904851, 0.5480627, -0.4942082, 0.4333985, -0.5649365, 0.5723637, -0.4574408, 0.5466591, -0.2514772, 0.5538926, -0.2580041, 0.5321808, -0.4294454, 0.3233148, -0.5088054, 0.4833570, -0.4557215, 0.4735297, -0.2792391, 0.5351567, -0.3330553, 0.5655698, -0.3485064, 0.4550155, -0.1443746, 0.5873422, -0.4588404, 0.4143949, -0.3619520, 0.5101329, -0.5700096, 0.4911063, -0.4136021, 0.4748494, -0.3843874, 0.5453594, -0.4944427, 0.4202887, -0.4823245, 0.3963911, -0.3683185, 0.5664984, -0.3274923, 0.4623527, -0.2061843, 0.6071268, -0.2989706, 0.5654522, -0.4170459, 0.3988646, -0.5705104, 0.4594555, -0.4143036, 0.5280171, -0.4130142, 0.5165166, -0.3615246 0.4938318 " dat.AJS.NAN.E <- get.AJS.data(gsub("\\[[0-9]+,\\]","",a)) bagplot(dat.AJS.NAN.E, main="dat.AJS.NAN.E") # OK @ <>= <> a<-" -0.4062338461342518969310, 0.14754908336994210227289,-0.4641202518436023383153, 0.12300598652603220162227, -0.4930885230817930175995, 0.13041599158936770241901,-0.4908548984150178373653, 0.19042039835354312993232, -0.4413398310321014483826, 0.06415051270490622348230,-0.3790487599768575521786, -0.01908092520419982923707, -0.4525924267924343324943, 0.02382016149426484027951,-0.4568684921740411852831, 0.10729137283566912708377, -0.3600453131384418470340, 0.20299195732165442596084,-0.3786537514469233700609, 0.10782855344122767304871, -0.3691294180636163213549, 0.13757254829898393766463,-0.3634668772645677226052, 0.13779499172315048949322, -0.4460341706072293299634, 0.08927344826865776794556,-0.3931134284548397639369, 0.12375939206240904599809, -0.4400074650713454715856, 0.13572835300482041787085,-0.3687761227741535030589, 0.08977980927726944559986, -0.4477093868839493451262, 0.07732543881534685581425,-0.5047983341975119664369, 0.12008152848553328706505, -0.4912126267418248093399, 0.06559481278535840564903,-0.3162564550157994092139 0.12716570436622953721439" dat.AJS.NAN.F <- get.AJS.data(gsub("\\[[0-9]+,\\]","",a)) bagplot(dat.AJS.NAN.F, main="dat.AJS.NAN.F") # OK @ <>= <> a<-"-0.3365320800051156413524, -0.16465634271153567480539,-0.3212439795751604876273, -0.02769957746625343469882, -0.3131092390672871039747, -0.02145017540830633506754,-0.2169780789017450306488, -0.05420179428591438003382, -0.2382998530537111248062, -0.15665613626385860301937,-0.3274251750565500551637, -0.16269511294063973561030, -0.1792897122532586817734, 0.12172548044581302240097,-0.3644874055796215595038, -0.11017113099332566383826, -0.2597330667315013164043, -0.13667626910135124984613,-0.1857087775577647981162, -0.12185261831753121941624, -0.4410627956771460689289, -0.24517450662929113347488,-0.4328369531394934965896, -0.09192268795017878579845, -0.3162373978549153918927, -0.09289939950677550406510,-0.3527203678927318675207, -0.04575999789018787844430, -0.3072802538232928259987, -0.15452276450236571148089,-0.1900264843388008995095, -0.19329920713585954650249, -0.3581798974648294220380, -0.18092585691592122376647,-0.4087284209462124784373, -0.07075846280518945097260, -0.3143274825737536470882, -0.10093548347883234128641,-0.3566729290036041999379, -0.07337318053477877299873, -0.3809771622860922968279, -0.13936364479847815345259,-0.2029868237921297058346, 0.08934781459090822275382, -0.2476551957000060755210, -0.07158142266137049181118,-0.3710390854098435942099, -0.01787010019324387563588, -0.2911476980688867954861, -0.04232827341335163723324,-0.2253901616470012636562, -0.25359051915261998644269, -0.1347541765844346151049, -0.04372012527641970514036,-0.2665596373370596738894, -0.08639269553985037819466, 0.5589372043228539865822, -0.05442746424681436240300,-0.2892559615112646476121, -0.15214455887285957547128, -0.3248426515933379166157, -0.07294253882500667529598,-0.4280514652785712970129, -0.04237105698433304284967, -0.3992184363626437582084 -0.03510167488593822493481 " dat.AJS.NAN.G <- get.AJS.data(gsub("\\[[0-9]+,\\]","",a)) bagplot(dat.AJS.NAN.G, main="dat.AJS.NAN.G") # OK @ <>= par(mfrow=c(3,3)) <> <> @ <>= par(mfrow=c(3,3)) <> <> <> <> <> <> <> <> @ %Here are the result of a 32 bit machine: @ %rm in course of reducing bytes %\begin{center}\includegraphics[height=10cm]{p2012-Nov5-194121}\end{center} %

@ @ \subsubsection{Identical x-values} The cars data set has some points with identical x-values. <>= par(mfrow=c(2,3)) # 121030 <> # normalising cars data c2 <- cars[6:10,]; c2 <- c2 - matrix(apply(c2,2,min),5,2,byrow=TRUE) c2 <- c2/matrix(apply(c2,2,max),5,2,byrow=TRUE) # rotation of the data a<-4*pi/2; c2 <- as.matrix(c2) %*% matrix(c(cos(a),-sin(a),sin(a),cos(a)),2,2) aa<-bagplot(c2,debug.plots="all",verbose=TRUE); points(c2,cex=2) @ %rm in course of reducing bytes %\begin{center}\includegraphics[height=6cm]{p2012-Oct30-194804}\end{center} %

@ %%%%%%%%%%%%% END OF AMANDA DATA SETS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{frabo12 Daten} The frabo12 data set has some variables with a lot of ties and helped to discover some problems of [[bagplot()]]. <>= <> # source("http://www.wiwi.uni-bielefeld.de/fileadmin/stat/wolf/data/frabo12.R"); xy <- frabo12[,3:4] xy <- structure(list(Haarfarbe = c(2, 2, 1, 3, 3, 3, 2, 3, 1, 5, 3, 3, 3, 2, 3, 2, 2, 2, 4, 2, 3, 2, 2, 2, 1, 2, 3, 2, 3, 2, 3, 1, 1, 3, 3, 2, 2, 3, 2, 3, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 6, 1, 3, 2, 3, 2, 2, 3, 3, 6, 3, 3, 6, 2, 3, 2, 6, 2, 2, 3, 2, 3, 2, 3, 5), Schuhgroesse = c(42, 42, 44, 41, 41, 42, 40, 37, 36, 37, 44, 45, 36, 38, 3, 46, 41, 40, 42, 39, 43, 45, 45, 43, 40, 40, 39, 36, 39, 47, 44, 41, 45, 46, 42, 45, 45, 39, 39, 39, 41, 46, 46, 34, 42, 44, 47, 44, 45, 43, 42, 42, 37, 44, 44, 1.88, 45, 41, 41, 38, 42, 45, 42, 43, 41, 41, 36, 45, 43, 45, 43, 38, 46, 39, 41)), .Names = c("Haarfarbe", "Schuhgroesse"), row.names = c(NA, 75L), class = "data.frame") par(mfrow=c(3,3)) bagplot(xy[1:20,],dkmethod=2,cex=1); title("20 values") bagplot(xy[1:25,],dkmethod=2,cex=1); title("20 values") bagplot(xy[1:30,],dkmethod=2,cex=1); title("30 values") bagplot(xy[1:35,],dkmethod=2,cex=1); title("35 values") bagplot(xy[1:40,],dkmethod=2,cex=1); title("40 values") bagplot(xy[1:45,],dkmethod=2,cex=1); title("45 values") bagplot(xy[1:50,],dkmethod=2,cex=1); title("50 values") bagplot(xy[1:60,],dkmethod=2,cex=1); title("60 values") bagplot(xy,dkmethod=2,cex=1); title("75 values") par(mfrow=c(1,1)) @ <>= XY <- structure(c(25, 20, 5, 40, 20, 20, 50, 10, 12, 30, 30, 39, 10, 30, 20, 15, 15, 15, 5, 30, 7, 35, 21.66, 25, 40, 20, 4, 15, 20, 25, 50, 3.3, 10, 15, 30, 15, 10, 10, 48, 24, 3, 15, 40, 35, 20, 42, 30, 20, 35, 5, 25, 25, 20, 10, 40, 10, 10, 12, 35, 35, 5, 15, 20, 45, 20, 30, 20, 40, 25, 40, 20, 40, 35, 30, 36, 39, 32, 30, 17.5, 10, 10, 10, 41, 7, 25, 31, 13, 34, 5, 40, 3.9, 30, 20, 12, 25, 40, 40, 15, 5, 19.9, 25, 39.95, 50, 18, 25, 20, 10, 35, 15, 20, 30, 10, 15, 10, 7, 10, 15, 20, 15, 15, 20, 6, 19.95, 30, 15.95, 24.95, 22, 35, 15, 20, 8, 15, 30, 18, 50, 5, 30, 5, 17, 9.9, 30, 22.5, 50, 50, 35, 15, 3, 30, 25, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2), .Dim = c(149L, 2L), .Dimnames = list(NULL, c("X", "Y"))) bagplot(XY,verbose=TRUE) @ @ %rm in course of reducing bytes % \begin{center}\includegraphics[height=10cm]{p2012-Nov26-204033}\end{center} %

@ @ <<*>>= <> par(mfrow=3:4) set.seed(17) for( i in 1:11 ){ xy <- frabo12[1:20,IJ <- sample((1:49)[-c(23,28,49)],2)]; print(IJ) bp <- bagplot(xy,dkmethod=2,main=as.character(IJ),precision=1.1,cex=1.5) } xy <- frabo12[1:20,10:9] #xy <- frabo12[0,10:9] #plot(xy) #bp <- bagplot(xy,precision=2,main="correct center\nby precision 2\n10,9: ",cex=1.5) @ Setting precision to 1.0 will result in a center field in plot four that is a little bit too big. To get rid of this effect the precision has been set to 1.1. %rm in course of reducing bytes % \begin{center}\includegraphics[height=10cm]{p2012-Dec4-155010}\end{center} %

@ @ <>= <> trim.xy <- function(xy,trim = 0.2){ xy <- as.matrix(xy) xy <- xy[ !is.na(xy[,1]) & !is.na(xy[,2]), ] xlimits <- quantile(xy[,1], c(trim, 1-trim)) ylimits <- quantile(xy[,2], c(trim, 1-trim)) xy <- xy[ xlimits[1] <= xy[,1] & xlimits[2] >= xy[,1] & ylimits[1] <= xy[,2] & ylimits[2] >= xy[,2] ,] return(xy) } par(mfrow=2:3); names(frabo12) xy <- frabo12[,c("Gewicht","Groesse")]; xy <- trim.xy(xy, 0.2) bagplot(xy,precision=1,cex=1) xy <- frabo12[,c("GroesseMutter","GroesseVater")]; xy <- trim.xy(xy, trim = 0.01) bagplot(xy,precision=1,cex=1) xy <- frabo12[,c("GroesseMutter","Groesse")]; xy <- trim.xy(xy,0.2) bagplot(xy,precision=1,cex=1) xy <- frabo12[,c("SchulNote","EurMaterial")]; xy <- trim.xy(xy,0.01) bagplot(xy,precision=1,cex=1) xy <- frabo12[,c("EurMiete","EurLuxus")]; xy <- trim.xy(xy,0.01) bagplot(xy,precision=1,cex=1) xy <- frabo12[,c("EurHandy","EurHandyKosten")]; xy <- trim.xy(xy,0.01) bagplot(xy,precision=1,cex=1) @ %rm in course of reducing bytes % \begin{center}\includegraphics[height=10cm]{p2012-Dec4-155404}\end{center} %

@ \subsection{Indices} % object index -- remove next line to disable object index @index.of.objects % list of code chunks -- remove next line to disable list of chunks @list.of.chunks \end{document} @ \subsection{bubble.hist} <<*>>= jitter.hist <- function(x, main, border="white", type=c("fever","random")[1], cex=1, ...){ if(missing(main)) main <- paste("jitter of",deparse(substitute(x))) n <- length(x) hist.res <- hist.default(x,prob=TRUE,main=main,border=border, ...) breaks <- hist.res$breaks; mids <- hist.res$mids n.cells <- length(mids) f <- findInterval(x,hist.res$breaks) if(type=="fever"){ x.split <- split(x, f) } if(type=="random"){ print("RANDOM") noise <- rep((13*7654321)%%9573,n) for(i in 2:n) noise[i] <- (noise[i-1] * 1234567 + 87654321) %% 9573 noise <- noise / 9573 noise <- split(noise,f) j <- 0 for(i in 1:n.cells) { if(hist.res$counts[i] == 0) next j <- j + 1 noise[[j]] <- breaks[i] + noise[[j]] * diff(breaks[i+(0:1)]) } x.split <- noise print(noise) } j <- 0 for( i in 1:n.cells){ if(hist.res$counts[i] == 0) next j <- j + 1 x.i <- x.split[[j]] n.i <- length(x.i) max.h <- hist.res$counts[i]/length(x)/diff(breaks[i+(0:1)]) colors <- heat.colors(hist.res$counts[i]) if( 0 < n.i ){ # lines ( c(mids[i],x.i), (0:n.i)/n.i*max.h) if("random"==type){ lines( col=c("red",colors), c(mids[i],x.i), (0:n.i)/n.i*max.h,lwd=2) points(col=colors,pch=16, x.i, (1:n.i)/n.i*max.h,cex=cex) } else { lines ( c(mids[i],x.i), (0:n.i)/n.i*max.h) points(col="green",pch=16, x.i, (1:n.i)/n.i*max.h,cex=cex) } } } cat(main,"fertig") } @ par(mfrow=2:3) cat("co2") jitter.hist(co2) cat("rivers") jitter.hist(rivers) cat("norm") jitter.hist(rnorm(100)) cat("co2") jitter.hist(co2, type="random") cat("rivers") jitter.hist(rivers, type="random") cat("norm") jitter.hist(rnorm(100), type="random") #hist(rivers) @ <>= skyline.hist <- function(x, n.class, border=FALSE, n.hist=4, n.shading=6, main, colors, col.border=1, night=FALSE, ylab="density", xlab, xlim, ylim, new.plot=TRUE, bty="n", ...){ if(missing(main)) main <- paste("skyline plot") if(missing(xlab)) xlab <- deparse(substitute(x)) # find the width of a cell hist.res <- hist(x,plot=FALSE) if(!missing(n.class)) width.bars <- ceiling(diff(range(x))/n.class) else { width.bars <- diff(hist.res$breaks[1:2]) } # find range for x-axis range.bars <- range(x) + c(-1,1) * width.bars # find size of the bars n.bars <- ceiling(diff(range(x))/width.bars) * n.hist starts.bars <- seq(range.bars[1], range.bars[2], length=n.bars+1)[-(n.bars+1)] counts.bars <- rep(0,n.bars) for(i in 1:n.bars){ counts.bars[i]<-sum( starts.bars[i] <= x & x < (starts.bars[i] + width.bars)) } heights.bars <- counts.bars/length(x)/width.bars # prepare plot if(missing(xlim)) xlim <- range.bars if(missing(ylim)) ylim <- c(0, max(heights.bars)) if(new.plot) plot(0, xlim=xlim, ylim=ylim, type="n", bty=bty, xlab=xlab, ylab=ylab, ...) title(main) # add histogram like borders # if(broder) hist(x,add=TRUE,prob=TRUE) if(border) rect(starts.bars,heights.bars*0,starts.bars+width.bars,heights.bars, lwd=.5, border=col.border, col= if(night) "#555555" else NA) # add small windows dx <- width.bars * ((1:n.shading) - 0.5)/n.shading if(missing(colors)) colors <- rainbow(n.bars) if(length(colors) < n.bars) colors <- rep(colors,n.bars) for(i in 1:n.bars){ segments(starts.bars[i] + dx, rep(0,n.shading), starts.bars[i] + dx, rep(heights.bars[i],n.shading), lty=3,lwd=1.5, col=colors[i]) } # return info of hist invisible(hist.res) } @ <<*>>= #print((hist(rivers)));hist.res <- hist(rivers) #jitter.hist(co2,breaks=308+(0:8)*10,add=TRUE) x <- rnorm(200) cex=.2 shift <- .2 jitter.hist(x,breaks=-4+(0:16)*.5,cex=cex) for(s in .2*(1:5)) jitter.hist(x,breaks=-3.8+s+(0:16)*.5,add=TRUE,cex=cex) @ Some old chunks for testing plotsummary. <<*>>= <> <> #plot_single_summary(frabo12[,"Gewicht"],0.5) #plot_single_summary(co2,trim=.2) #plot_single_summary(rnorm(20),trim=.2,y.sizes=c(.4,.2,.2,.2)) #plot_single_summary(sample(c(1,3,5,9),30,TRUE)) #plot_single_summary(frabo12[,c("Gewicht")]) #plotsummary(frabo12[,c("Gewicht","Groesse")],trim=.1,y.size=4:1) xy <- frabo12[,c("Gewicht","Groesse")] xy[,2] <- ifelse(xy[,2] < 1000, xy[,2]*10, xy[,2]) plotsummary(xy,y.sizes=4:1,trim=.05) #plotsummary(frabo12[,1:20],trim=0.1) #plotsummary(frabo12[,1:9],trim=.05,0.15,mycols=5,y.sizes=c(7,1,1,1)) #plotsummary(list(rivers,co2),0.5,mycols=1) #boxplot(co2,plot=FALSE) #plotsummary(cars,0.5) #pairs(frabo12[,1:5]) par()$usr @ <<*>>= ##> <> #plotsummary(cars,design="chessboard") #plotsummary(frabo12[,1:10],y.sizes=4:1,trim=.05,design="chssboard") plotsummary(frabo12[,1:10],trim=.05) #plotsummary(get("Orange"),design="chessboard") @ @ deparse(compute.bagplot) grep("ind .. k.1",deparse(compute.bagplot)) @ <>= <> par(mfrow=c(2,2)) bagplot(dat.AJS.NAN.G, main="dat.AJS.NAN.G",verbose=!TRUE) # OK # x11();plot(TP) #(TPD)# "" bagplot(xy[1:60,],dkmethod=2,cex=1,verbose=TRUE); title("60 values") #plot(rnorm(20),lty=2,type="l") @ @ PPPPROBLEM: hdpeth of points + max hdepth falsch! <<*>>= <> par(mfrow=c(1,2)) ## 121123 m <- 100 print(bagplot(frabo12[1:m,2:1],verbose=TRUE,precision=1)$center) print(bagplot(frabo12[1:m,1:2],verbose=TRUE,precision=1)$center) points(frabo12[,2:1]) dim(frabo12) @ #xy <- cbind(as.numeric(frabo12[1:20,1]),as.numeric(frabo12[1:20,1])) # xy <- as.matrix(frabo12[1:20,1:2]); xy <- xy[,2:1] # find.hdepths(frabo12[1:20,1:2]) #(find.hdepths(matrix(rnorm(30),ncol=2))) boxplot(frabo12[,1]) boxplot(frabo12[,2]) summary(frabo12[,1:2]) @ bagplot(frabo12[,2:3]) bagplot(frabo12[,3:2]) bagplot(frabo12[,4:3]) bagplot(frabo12[,3:4]) @ <>= <> par(mfrow=c(2,4)); KKK <<- 5 #bagplot(dat.AJS.NAN.G, main="dat.AJS.NAN.G",verbose=!TRUE) # OK # x11();plot(TP) #(TPD)# "" bagplot(xy[1:60,],dkmethod=2,cex=1,verbose=TRUE,precision=1); title("60 values") #plot(xy) @ #plot(rnorm(20),lty=2,type="l") plot(PG,type="l") plot(PG2,type="l") plot(rbind(PGUA,PGLA)[,1:2],xlim=c(-2,1.4), ylim=c(-2,1.5)) lines(PGUV[,-3],col="orange",lwd=7,type="b",pch="+",cex=3) lines(PGLV[,-3],col="magenta",lwd=3,type="b",pch="+",cex=3) lines(PG[,-3],col="black",lwd=3,type="b",pch="-",cex=3) plot(xy) @ @ \subsection{Some old code chunks for comparison} @ <>= pg<-pg[-nrow(pg),][-1,,drop=FALSE]; pgl<-pgl[-nrow(pgl),][-1,,drop=FALSE] indl<-pos.to.pg(pgl,pg); indu<-pos.to.pg(pg,pgl,TRUE) npg<-nrow(pg); npgl<-nrow(pgl) rnuml<-rnumu<-lnuml<-lnumu<-0; sl<-pg[1,1:2]; sr<-pgl[1,1:2] # right region if(indl[1]=="higher"&indu[npg]=="lower"){ rnuml<-which(indl=="lower")[1]-1; xyl<-pgl[rnuml,] # rnumu<-which(rev(indu=="higher"))[1]; xyu<-pg[npg+1-rnumu,] # sr<-cut.p.sl.p.sl(xyl[1:2],xyl[3],xyu[1:2],xyu[3]) } # left region if(indl[npgl]=="higher"&indu[1]=="lower"){ lnuml<-which(rev(indl=="lower"))[1]; xyl<-pgl[npgl+1-lnuml,] # lnumu<-which(indu=="higher")[1]-1; xyu<-pg[lnumu,] #? sl<-cut.p.sl.p.sl(xyl[1:2],xyl[3],xyu[1:2],xyu[3]) } pgl<-pgl[(rnuml+1):(npgl-lnuml),1:2,drop=FALSE] pg <-pg [(lnumu+1):(npg -rnumu),1:2,drop=FALSE] pg<-rbind(pg,sr,pgl,sl) cat("P2", PG2 <<- pg) pg<-pg[chull(pg[,1],pg[,2]),] cat("P2-Ende") if(debug.plots=="all") lines(rbind(pg,pg[1,]),col="red") @ In the old version of [[out.of.polygon]] the angles between the lines that are defined by a point of [[xy] and the vertices of [[pg]] are computed. If maximal angle $> 2\pi$ than the point is not an inner point of the polygon: <>= out.of.polygon<-function(xy,pg){ if(nrow(pg)==1) return(pg) pgcenter<-apply(pg,2,mean) # not necessary pg<-cbind(pg[,1]-pgcenter[1],pg[,2]-pgcenter[2])# not necessary xy<-cbind(xy[,1]-pgcenter[1],xy[,2]-pgcenter[2])# not necessary extr<-rep(FALSE,nrow(xy)) for(i in seq(nrow(xy))){ alpha<-sort((win(xy[i,1]-pg[,1],xy[i,2]-pg[,2]))%%(2*pi)) extr[i]<-pi>= # lam<-matrix(runif(n.c*n.p),n.p,n.c) set.seed(13); n.p.beta<-10*n.p lam<-matrix(rbeta(n.c*n.p.beta,.5,.5),n.p.beta,n.c) lam<-lam/matrix(apply(lam,1,sum),n.p.beta,n.c,FALSE) tp<-cbind( lam%*%cands[,1],lam%*%cands[,2]) tphdepth<-hdepth.of.points(tp) hull.center<-tp[which(tphdepth==max(tphdepth)),,drop=FALSE] center<-apply(hull.center,2,mean) hull.center<-hull.center[chull(hull.center[,1],hull.center[,2]),] @ <>= xyextr<-rbind(apply(cands,2,min),apply(cands,2,max)) xydel<-2*(xyextr[2,]-xyextr[1,])/n.p h1<-seq(xyextr[1,1],xyextr[2,1],length=n.p) h2<-seq(xyextr[1,2],xyextr[2,2],length=n.p) tp<-cbind(matrix(h1,n.p,n.p)[1:n.p^2], matrix(h2,n.p,n.p,TRUE)[1:n.p^2]) tphdepth<-hdepth.of.points(tp) hull.center<-tp[which(tphdepth>=(max(tphdepth))),,drop=FALSE] center<-apply(hull.center,2,mean) cands<-hull.center[chull(hull.center[,1],hull.center[,2]),,drop=FALSE] xyextr<-rbind(apply(cands,2,min),apply(cands,2,max)) ## xydel<-(xyextr[2,]-xyextr[1,])/n.p xyextr<-rbind(xyextr[1,]-xydel,xyextr[2,]+xydel) h1<-seq(xyextr[1,1],xyextr[2,1],length=n.p) h2<-seq(xyextr[1,2],xyextr[2,2],length=n.p) tp<-cbind(matrix(h1,n.p,n.p)[1:n.p^2], matrix(h2,n.p,n.p,TRUE)[1:n.p^2]) tphdepth<-hdepth.of.points(tp) hull.center<-tp[which(tphdepth>=max(tphdepth)),,drop=FALSE] center<-apply(hull.center,2,mean) hull.center<-hull.center[chull(hull.center[,1],hull.center[,2]),] @ <>= critical.angles.of.points<-function(tp){ n.tp<-nrow(tp) tphdepth<-rep(0,n.tp); dpi<-2*pi-0.000001 minusplus<-c(rep(-1,n),rep(1,n)) result<-matrix(0,n.tp,4) for(j in 1:n.tp) { dx<-tp[j,1]-xy[,1]; dy<-tp[j,2]-xy[,2] a<-win(dx,dy)+pi; a<-a[a<10]; a<-sort(a) a.shift<-(a+pi) %% dpi h<-cumsum(minusplus[order(c(a,a.shift))]) no<-which(min(h)==h); no<-c(no[1],no[length(no)]) no<-c(no,1+((no-2)%%n)) # print(no) result[j,]<-c(a,a)[no] } if(debug.plots=="all"){ plot(xy,type="n") # points(xy); text(xy,as.character(hdepth)) h<-rbind(tp,tp[1,]); lines(h) points(tp[1,,drop=FALSE],col="red") dx<-3; ro<-1 dy<-dx*tan(result[ro,1]) # segments(tp[ro,1]-dx,tp[ro,2]-dy,tp[ro,1]+dx,tp[ro,2]+dy,col="orange") dy<-dx*tan(result[ro,3]) segments(tp[ro,1]-dx,tp[ro,2]-dy,tp[ro,1]+dx,tp[ro,2]+dy,col="red") dy<-dx*tan(result[ro,2]) # segments(tp[ro,1]-dx,tp[ro,2]-dy,tp[ro,1]+dx,tp[ro,2]+dy,col="green") dy<-dx*tan(result[ro,4]) # segments(tp[ro,1]-dx,tp[ro,2]-dy,tp[ro,1]+dx,tp[ro,2]+dy,col="blue") } result } a.pdk<-critical.angles.of.points(pdk) @ <>= # old version based on polygon of data points if(nrow(d.k)>1){ lambda<-1-(points.in.bag-d.k[k.1+1,1])/(d.k[k.1,1]-d.k[k.1+1,1]) } else { lambda<-0.5 } @ <>= pdk.1<-pdk.1-matrix(pcenter,nrow(pdk.1),2,byrow=TRUE) pcenter<-apply(pdk,2,mean) pdk<-pdk-matrix(pcenter,nrow(pdk),2,byrow=TRUE) ai<-win(pdk[,1],pdk[,2]) a<-order(ai); ai<-ai[a]; pdk<-pdk[a,,drop=FALSE] ai<-win(pdk[,1],pdk[,2]) ao<-win(pdk.1[,1],pdk.1[,2]) a<-order(ao); ao<-ao[a]; pdk.1<-pdk.1[a,,drop=FALSE] ao<-win(pdk.1[,1],pdk.1[,2]) # for display the two polygons in verbose mode we store them @ <>= <> <> <> @ Some points of the two polygon will be identical, so the subsets of points has to be moved. <>= h1<-match(pdk.1[,1], pdk[,1]); h2<-match(pdk.1[,2], pdk[,2]) ind.pdk.1<-seq(along=h1); found<-!is.na(h1) union.points<-pdk.1[found,2]==pdk[h1[found],2] union.points<-ind.pdk.1[found][union.points] ind.o.points.to.shift<-ind.pdk.1[-union.points] outer.shift.points<-pdk.1[ind.o.points.to.shift,,drop=FALSE] if(length(ai)==1){ # inner polygon and center center identical / ai==NaN outer.shift.points<- lambda *outer.shift.points } else { for(i in seq(along=outer.shift.points[,1])){ # get point xy0<-outer.shift.points[i,] # get segment of inner polygon ind1<-sum(ailength(ai)) ind2<-1 xy1<-pdk[ind1,]; xy2<-pdk[ind2,] # determinate cut of inner segment and line (0,0) -> point lam<-solve(matrix(c(xy0,xy1-xy2),2,2))%*%xy1 xy.cut<-lam[1]*xy0 # determinate new position of point of outer polygon outer.shift.points[i,]<- lambda *outer.shift.points[i,]+ (1-lambda)*xy.cut } # end of for } # end of if if(verbose) {cat("outer polygon points have been shifted:") } @ <>= h1<-match(pdk[,1], pdk.1[,1]); h2<-match(pdk[,2], pdk.1[,2]) ind.i.points.to.shift<-is.na(h1)&is.na(h2) inner.shift.points<-pdk[ind.i.points.to.shift,,drop=FALSE] for(i in seq(along=inner.shift.points[,1])){ # get point xy0<-inner.shift.points[i,] # get segment of outer polygon ind1<-sum(aolength(ao)) ind2<-1 xy1<-pdk.1[ind1,]; xy2<-pdk.1[ind2,] # determinate cut of outer segment and line (0,0) -> point lam<-solve(matrix(c(xy0,xy1-xy2),2,2))%*%xy1 xy.cut<-lam[1]*xy0 # determinate new position of point of inner polygon inner.shift.points[i,]<-(1-lambda)*inner.shift.points[i,]+ lambda *xy.cut } if(verbose) {cat("inner polygon points have been shifted:") } @ <>= pdk[ind.i.points.to.shift,]<-inner.shift.points pdk.1[ind.o.points.to.shift,]<-outer.shift.points hull.bag<-rbind(pdk.1,pdk) hull.bag<-hull.bag[chull(hull.bag[,1],hull.bag[,2]),,drop=FALSE] if(verbose){cat("bag completed:"); print(hull.bag) } @ <>= if(nrow(d.k)>1){ lambda<-1-(points.in.bag-d.k[k.1+1,1])/(d.k[k.1,1]-d.k[k.1+1,1]) } else { lambda<-0.5 } vt<-find.cut.z.pg(xy,pdk,center=center) vt.1<-find.cut.z.pg(xy,pdk.1,center=center) h<-cbind(xy[,1]-center[1],xy[,2]-center[2]); lz<-apply(h*h,1,sum)^0.5 h<-cbind(vt[,1]-center[1],vt[,2]-center[2]); lv<-apply(h*h,1,sum)^0.5 h<-cbind(vt.1[,1]-center[1],vt.1[,2]-center[2]); lv.1<-apply(h*h,1,sum)^0.5 lambda.i<-(lz-lv)/(lv.1-lv) lambda.i<-(lambda.i[!is.na(lambda.i) & ! is.nan(lambda.i)]) # lambda<-median(lambda.i) # cat("median? lambda",median(lambda.i)) if(lambda<0|lambda>1) lambda<-0.5 if(verbose) cat("lambda",lambda) # segm.no[is.na(segm.no)]<-1 # cut.pkt[is.nan(cut.pkt)]<-z[is.nan(cut.pkt)] # cut.pkt<-cbind(cut.pkt[,1]+center[1],cut.pkt[,2]+center[2]) # h<-is.na(cuts[,1]) # if(any(h)){cut.pkt[h,1]<-pgo[1,1];cut.pkt[h,2]<-pgo[1,2]} @ [[# car data: lambda==0.6918136]]\\ In this definition it follows: [[lambda==1]] iff bag is identical with inner polygon [[exp.dk]]. <>= vt<-find.cut.z.pg(xy,exp.dk,center=center) vt.1<-find.cut.z.pg(xy,exp.dk.1,center=center) h<-cbind(xy[,1]-center[1],xy[,2]-center[2]); lz<-apply(h*h,1,sum)^0.5 h<-cbind(vt[,1]-center[1],vt[,2]-center[2]); lv<-apply(h*h,1,sum)^0.5 h<-cbind(vt.1[,1]-center[1],vt.1[,2]-center[2]); lv.1<-apply(h*h,1,sum)^0.5 lambda.i<-(lz-lv)/(lv.1-lv) lambda.i<-(lambda.i[!is.na(lambda.i) & ! is.nan(lambda.i)]) lambda<-median(lambda.i) if(verbose) cat("\nmedian lambda",lambda) if(lambda<0|lambda>1) lambda<-lambda<-min(1,max(0,median(lambda.i))) @ <>= if(verbose) cat("data set one dimensional") prdata<-prdata[[2]]; trdata<-xydata%*%prdata; ytr<-mean(trdata[,2]) boxplotres<-boxplot(trdata[,1],plot=FALSE) dy<-0.1*diff(range(stats<-boxplotres$stats)) dy<-0.05*mean(c(diff(range(xydata[,1])), diff(range(xydata[,2])))) segtr<-rbind(cbind(stats[2:4],ytr-dy,stats[2:4],ytr+dy), cbind(stats[c(2,2)],ytr+c(dy,-dy), stats[c(4,4)],ytr+c(dy,-dy)), cbind(stats[c(2,4)],ytr,stats[c(1,5)],ytr)) segm<-cbind(segtr[,1:2]%*%t(prdata), segtr[,3:4]%*%t(prdata)) extr<-c(min(segm[6,3],segm[7,3]),max(segm[6,3],segm[7,3])) extr<-extr+c(-1,1)*0.000001*diff(extr) if(!add){ ## 121008 xlim <- range(c(xydata[,1],segm[,c(1,3)]));xlim <- xlim +.15*c(-1,1)*diff(xlim) ylim <- range(c(xydata[,2],segm[,c(2,4)]));ylim <- ylim +.15*c(-1,1)*diff(ylim) plot(xydata,type="n",bty="n",pch=16,cex=.2, xlim=xlim, ylim=ylim, ...) } if(add){ # 121129 if(prdata[1,2] == 0){ ylim<-par()$usr[3:4]; dylim <- ylim[2]-ylim[1] y <- segm[,2]; y<-y-min(y); y <- y/max(y)*0.15*dylim + ylim[1] + 0.6*dylim segm[,2] <- y y <- segm[,4]; y<-y-min(y); y <- y/max(y)*0.15*dylim + ylim[1] + 0.6*dylim segm[,4] <- y } if(prdata[1,1] == 0){ xlim<-par()$usr[1:2]; dxlim <- xlim[2]-xlim[1] x <- segm[,1]; x<-x-min(x); x <- x/max(x)*0.15*dxlim + xlim[1] + 0.6*dxlim segm[,1] <- x x <- segm[,3]; x<-x-min(x); x <- x/max(x)*0.15*dxlim + xlim[1] + 0.6*dxlim segm[,3] <- x } if(all(prdata[1,] != 0)){ ylim<-par()$usr[3:4]; dylim <- ylim[2]-ylim[1] y <- segm[,2]; y<-y-min(y); y <- y/max(y)*0.15*dylim + ylim[1] + 0.6*dylim segm[,2] <- y y <- segm[,4]; y<-y-min(y); y <- y/max(y)*0.15*dylim + ylim[1] + 0.6*dylim segm[,4] <- y xlim<-par()$usr[1:2]; dxlim <- xlim[2]-xlim[1] x <- segm[,1]; x<-x-min(x); x <- x/max(x)*0.15*dxlim + xlim[1] + 0.6*dxlim segm[,1] <- x x <- segm[,3]; x<-x-min(x); x <- x/max(x)*0.15*dxlim + xlim[1] + 0.6*dxlim segm[,3] <- x } } else { xydata<-xydata[xydata[,1]extr[2],,drop=FALSE] } if(0>= data(stackloss) bagplot(stack.x[,1],stack.loss) @ <>= x0 <- c(1, 5, 6, 6, 6, 6, 6, 7, 7, 8, 11, 13) y0 <- c(2, 3.5,4, 4.5, 4.5,5, 5, 5, 5, 5.5,5.5, 7) RNGversion("2.1.0")# ; RNGkind("Super") set.seed(123) x1 <- rnorm(100) ; x2 <- rt(20, 4) y1 <- rt(100, 3) ; y2 <- rt(20, 7) x3 <- rt(199, 4) ; y3 <- rt(199, 7) par(mfrow=1:2) bagplot(x3,y3)$center #data(phones) #,package=MASS) #apcutropos("phones") bagplot(x0,y0)$center capabilities() @ <>= bagplot(c(rep(0,20),rep(-5,10),rep(5,10),20), c( 1:20,rep( 5,10),rep(5,10),20)) @ <>= bagplot(c(rep(0,20),rep(-5,10),rep(5,10),20), c( 1:20,rep( 10,10),rep(10,10),20)) @ Amanda-Data-Set <<*>>= <> par(mfrow=c(3,3)) for(nr in 1:26){ name <- paste("amanda-data-sets/bagploterror",nr,".dat",sep="") dat <- matrix(scan(name,what=0),byrow=TRUE,ncol=2) try({bagplot(dat); title(nr)}) cat(paste("dat",nr," <- ",paste(deparse(dat),collapse=" "),sep="")) } @ Probleme: a) drei Punkte: 2, b) Error in chull(pg[, 1], pg[, 2]) : NA/NaN/Inf in externem Funktionsaufruf (arg 2) 17: c) Kern außerhalb: 24,22,19,15,11 d) eindim: 4,5,9,10,12,13,14 checked! -> ok Amanda-Data-Set <<*>>= <> bagplot() @ #bagplot(rnorm(5),rnorm(5)) i <- 17 name <- paste("amanda-data-sets/bagploterror",i,".dat",sep="") dat <- matrix(scan(name,what=0),byrow=TRUE,ncol=2) bagplot(dat,debug.plots="all",verbose=!TRUE) #plot(dat) #diff(range(dat[,2])) #dat @ <<*>>= ##define [[bagplot]]>> noquote(ls(pattern="AJS")) #rm(dat.AJS.sensitiv2)#==dat.AJS.chull.1 @ @ #x11(); plot(xy) #points(xy[1:2,],col="red") t(xy) RM1 @ <<*>>= rank(c(1, 7, 3, 4, 9, 7),ties.method="min") pmax(1:3, 11:13, 21:23) rank(xy%*% round(RM1[,10],digits=5),ties.method="min") @ <<*>>= dump(c("bagplot","bagplot.pairs","compute.bagplot","plot.bagplot","plotsummary"),file="aplpack.R") ls()s aplpack/inst/src/faces.rev0000755000176200001440000011271213250450451015236 0ustar liggesusers% New Report: Thu Mar 8 16:41:17 2018 % New Report: Wed Oct 30 17:17:46 2013 % New Report: Fri Nov 4 17:22:24 2011 % New Report: Thu Nov 3 14:07:55 2011 % New Report: Mon Feb 16 18:03:23 2009 % New Report: Fri Jan 16 11:15:22 2009 % New Report: Fri Jan 16 11:09:25 2009 % New Report: Fri Jan 16 11:05:43 2009 % New Report: Tue Jan 6 13:01:43 2009 % New Report: Wed Dec 17 15:37:00 2008 % New Report: Wed Dec 10 16:05:38 2008 % New Report: Wed Mar 29 13:40:48 2006 % notangle -R"define [[faces]]" faces.rev > faces.R % notangle -R"define [[plot.faces]]" faces.rev > plot.faces.R % revweb faces; latex faces; latex faces; dvips faces; ps2pdf faces.ps % New Report: Thu Dec 4 15:47:32 2003, information printing optional: 09/2011 \documentclass{article} \usepackage{noweb} \usepackage{graphicx} \usepackage{a4} \noweboptions{webnumbering,smallcode} \author{H. P. Wolf} \title{Chernoff Faces and Spline Interpolation} \date{file: faces.rev, 08/Jan/2009, 03/Nov/2011, printed: \today} \begin{document} \maketitle\tableofcontents \newcommand{\ShowChunkIndex}{yes} \newcommand{\ConstructObjectIndex}{yes} @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @ \section{Definition of [[faces]]} Chernoff Faces are funny repesentations of multi dimensional data sets. For there is no [[faces]] function in R we present a simple version in this paper. The construction of the faces is quiet clear and the reader is invited to modify [[faces]] as she / he likes it. The smooth curves for drawing the elements of a face (eyes, ears, etc.) are computed by fitting spline functions. At first we define a function to be able to plot smooth curves. Then the data matrix is checked and the standardized according to the input parameters [[which.row]], [[fill]], [[scale]] and [[byrow]]. In the initialisation part of the function characteristic points of a standard face and some graphics parameter are fixed. Within a loop along the rows of the data matrix faces are constructed in three steps: \begin{enumerate} \item the coordinates of the standard face are transformed, \item the transformed points are arranged to organised to sets which represent elements of a face \item smooth curves fitted to the sets of points are plotted on the graphics device \end{enumerate} Finally a title is placed above the faces. @ rbind(1:3,5:3,3:5,5:7) <>= faces<-function(xy,which.row,fill=FALSE,face.type=1, nrow.plot,ncol.plot,scale=TRUE,byrow=FALSE,main, labels,print.info = TRUE,na.rm = FALSE, <> plot.faces=TRUE, cex = 2){ # 180308 pwolf if((demo<-missing(xy))){ xy<-rbind( c(1,3,5),c(3,5,7), c(1,5,3),c(3,7,5), c(3,1,5),c(5,3,7), c(3,5,1),c(5,7,3), c(5,1,3),c(7,3,5), c(5,3,1),c(7,5,3), c(1,1,1),c(4,4,4),c(7,7,7) ) labels<-apply(xy,1,function(x) paste(x,collapse="-")) } <> <> <> <> <> <> <> <> } @ <>= names(face.list)<-xnames out<-list(faces=face.list,info=info,xy=t(xy)) class(out)<-"faces" invisible(out) @ Let's start with some simple tasks. The graphics device needs to be prepared. If parameters [[nrow.plot]] and [[ncol.plot]] are found they will be used for the splitting of the graphics device. Otherwise a chess board design is used. <>= nr<-n^0.5; nc<-n^0.5 if(!missing(nrow.plot)) nr<-nrow.plot if(!missing(ncol.plot)) nc<-ncol.plot if(plot.faces){ opar<-par(mfrow=c(ceiling(c(nr,nc))),oma=rep(6,4), mar=rep(.7,4)) on.exit(par(opar)) } @ If a title is given it has to be placed at the top of the page. <>= if(plot.faces&&!missing(main)){ par(opar);par(mfrow=c(1,1)) mtext(main, 3, 3, TRUE, 0.5) title(main) } @ The data have to be structured as matrix. [[byrow=TRUE]] results in a transposition of the input data [[xy]]. [[which.row]] allows to permute the order of the rows. In effect the representation of data attribute will be changed. [[labels]] can be used to name the faces. If [[fill=TRUE]] and [[n.c]] equals the number of columns of the data matrix the first [[n.c]] items of the standard face will be modified whereas all the rest will be unchanged. If [[scale=FALSE]] the variables of the input are not standardized to the intervall [-1,1]. However, the data are rounded to the interval. <>= n.char<-15 xy<-rbind(xy) if(byrow) xy<-t(xy) if(any(is.na(xy))){ if(na.rm){ xy<-xy[!apply(is.na(xy),1,any),,drop=FALSE] if(nrow(xy)<3) {print("not enough data points"); return()} print("Warning: NA elements have been removed!!") }else{ xy.means<-colMeans(xy,na.rm=TRUE) for(j in 1:length(xy[1,])) xy[is.na(xy[,j]),j]<-xy.means[j] print("Warning: NA elements have been exchanged by mean values!!") } } if(!missing(which.row)&& all( !is.na(match(which.row,1:dim(xy)[2])) )) xy<-xy[,which.row,drop=FALSE] mm<-dim(xy)[2]; n<-dim(xy)[1] xnames<-dimnames(xy)[[1]] if(is.null(xnames)) xnames<-as.character(1:n) if(!missing(labels)) xnames<-labels if(scale){ xy<-apply(xy,2,function(x){ x<-x-min(x); x<-if(max(x)>0) 2*x/max(x)-1 else x }) } else xy[]<-pmin(pmax(-1,xy),1) xy<-rbind(xy);n.c<-dim(xy)[2] # expand input matrix xy by replication of cols xy<-xy[,(rows.orig<-h<-rep(1:mm,ceiling(n.char/mm))),drop=FALSE] if(fill) xy[,-(1:n.c)]<-0 @ We have to define some characteristic points of a standard face. For we want to produce symmetrical faces we save points of the right half only. A face is considered as a set of objects: lips, eyes, nose, ears, hair, contour / shape. Each object is defined by a 2 column matrix which rows represent coordinate points. To be able to draw an element of a face very easy the points have been sorted in the correct order. The six objects are assembed into the list [[face.orig]]. If we want to plot the complete face we have to add the points of the left half of the face. For the vertical centerline of a face is $x=0$ the coordinates of points of the left part are given by changing the sign of the associeted right points. However we have to keep in mind the points to be reflected and their order. For this we use some vectors of indices [[*refl.ind]]. The vectors [[*.notnull]] tell us which points are not on the centertral line. <>= face.orig<-list( eye =rbind(c(12,0),c(19,8),c(30,8),c(37,0),c(30,-8),c(19,-8),c(12,0)) ,iris =rbind(c(20,0),c(24,4),c(29,0),c(24,-5),c(20,0)) ,lipso=rbind(c(0,-47),c( 7,-49),lipsiend=c( 16,-53),c( 7,-60),c(0,-62)) ,lipsi=rbind(c(7,-54),c(0,-54)) # add lipsiend ,nose =rbind(c(0,-6),c(3,-16),c(6,-30),c(0,-31)) ,shape =rbind(c(0,44),c(29,40),c(51,22),hairend=c(54,11),earsta=c(52,-4), earend=c(46,-36),c(38,-61),c(25,-83),c(0,-89)) ,ear =rbind(c(60,-11),c(57,-30)) # add earsta,earend ,hair =rbind(hair1=c(72,12),hair2=c(64,50),c(36,74),c(0,79)) # add hairend ) lipso.refl.ind<-4:1 lipsi.refl.ind<-1 nose.refl.ind<-3:1 hair.refl.ind<-3:1 shape.refl.ind<-8:1 shape.xnotnull<-2:8 nose.xnotnull<-2:3 @ A specific face is created by three steps: \begin{enumerate} \item[step 1]: modify the characteristic points of the standard face \item[step 2]: define polygons of the objects of the modified points \item[step 3]: plot spline approximations of the polynoms \end{enumerate} One important question is how the data effects on the variation of the standard face. S-Plus offers the following fatures: 1-area of face, 2-shape of face, 3-length of nose, 4-location of mouth, 5-curve of smile, 6-width of mouth, 7 .. 11 location, separation, angle, shape, width of eyes, 12-location of pupil, 13 .. 15 location angle and width of eyebrow. Our features are: 1-height of face, 2-width of face, 3-shape of face, 4-height of mouth, 5-width of mouth, 6-curve of smile, 7-height of eyes, 8-width of eyes, 9-height of hair, 10-width of hair, 11-styling of hair, 12-height of nose, 13-width of nose, 14-width of ears, 15-height of ears. The modification are performed one after the other. Then a face can be constructed and plotted. <>= face.list<-list() for(ind in 1:n){ <> <> <> <> <> <> <> <> <> } @ As an initialisation the standard face is copied to [[face]] and the values of the variables are stored in [[factors]]. <>= factors<-xy[ind,] face<-face.orig @ Now we have to transform the face according to the data. <>= info<-c( "var1"="height of face ", "var2"="width of face ", "var3"="structure of face", "var4"="height of mouth ", "var5"="width of mouth ", "var6"="smiling ", "var7"="height of eyes ", "var8"="width of eyes ", "var9"="height of hair ", "var10"="width of hair ", "var11"="style of hair ", "var12"="height of nose ", "var13"="width of nose ", "var14"="width of ear ", "var15"="height of ear ") var.names<-dimnames(xy)[[2]] if(0==length(var.names)) var.names<-paste("Var",rows.orig,sep="") info<-cbind("modified item"=info,"Var"=var.names[1:length(info)]) rownames(info)<-rep("",15) if(print.info){ cat("effect of variables:\n") print(info) } if(demo&&plot.faces) { plot(1:15,1:15,type="n",axes=FALSE,bty="n") text(rep(1,15),15:1,adj=0,apply(info,1,function(x) paste(x,collapse=" - ")),cex=0.7) } @ Height, width and structure of the faces is changed by [[factors[1:3]]]. In the actual version [[factor[1:3]]] have an overall scaling effect. The comment lines show how the effect can be reduced to the contour line of the face. <>= face<-lapply(face,function(x){ x[,2]<-x[,2]*(1+0.2*factors[1]);x}) face<-lapply(face,function(x){ x[,1]<-x[,1]*(1+0.2*factors[2]);x}) face<-lapply(face,function(x){ x[,1]<-ifelse(x[,1]>0, ifelse(x[,2] > -30, x[,1], pmax(0,x[,1]+(x[,2]+50)*0.2*sin(1.5*(-factors[3])))),0);x}) #face$shape[,2]<-face$shape[,2]*(1+0.2*factors[1]) #face$shape[,1]<-face$shape[,1]*(1+0.2*factors[2]) #face$shape[,1]<-face$shape[,1]<-ifelse(face$shape[,1]>0, # ifelse(face$shape[,2] > -30, face$shape[,1], # pmax(0,face$shape[,1]+(face$shape[,2]+50)*0.2*sin(1.5*(-factors[3])))),0) @ Factor 4 and 5 have a scaling effect on the mouth. Factor 6 changes the smiling. <>= m<-mean(face$lipso[,2]) face$lipso[,2]<-m+(face$lipso[,2]-m)*(1+0.7*factors[4]) face$lipsi[,2]<-m+(face$lipsi[,2]-m)*(1+0.7*factors[4]) face$lipso[,1]<-face$lipso[,1]*(1+0.7*factors[5]) face$lipsi[,1]<-face$lipsi[,1]*(1+0.7*factors[5]) face$lipso["lipsiend",2]<-face$lipso["lipsiend",2]+20*factors[6] @ Factor 7 and 8 define scaling effects on the eyes. <>= m<-mean(face$eye[,2]) face$eye[,2] <-m+(face$eye[,2] -m)*(1+0.7*factors[7]) face$iris[,2]<-m+(face$iris[,2]-m)*(1+0.7*factors[7]) m<-mean(face$eye[,1]) face$eye[,1] <-m+(face$eye[,1] -m)*(1+0.7*factors[8]) face$iris[,1]<-m+(face$iris[,1]-m)*(1+0.7*factors[8]) @ The hair is changed by factor 9, 10 and 11. <>= m<-min(face$hair[,2]) face$hair[,2]<-m+(face$hair[,2]-m)*(1+0.2*factors[9]) m<-0 face$hair[,1]<-m+(face$hair[,1]-m)*(1+0.2*factors[10]) m<-0 face$hair[c("hair1","hair2"),2]<-face$hair[c("hair1","hair2"),2]+50*factors[11] @ The nose scaling factors are 12 and 13 and ... <>= m<-mean(face$nose[,2]) face$nose[,2]<-m+(face$nose[,2]-m)*(1+0.7*factors[12]) face$nose[nose.xnotnull,1]<-face$nose[nose.xnotnull,1]*(1+factors[13]) @ ... for the ears factors 14 and 15 matters. <>= m<-mean(face$shape[c("earsta","earend"),1]) face$ear[,1]<-m+(face$ear[,1]-m)* (1+0.7*factors[14]) m<-min(face$ear[,2]) face$ear[,2]<-m+(face$ear[,2]-m)* (1+0.7*factors[15]) @ After transforming the standard face elements of the specific face are completed and collected in a list ([[face.obj]]). <>= invert<-function(x) cbind(-x[,1],x[,2]) face.obj<-list( eyer=face$eye ,eyel=invert(face$eye) ,irisr=face$iris ,irisl=invert(face$iris) ,lipso=rbind(face$lipso,invert(face$lipso[lipso.refl.ind,])) ,lipsi=rbind(face$lipso["lipsiend",],face$lipsi, invert(face$lipsi[lipsi.refl.ind,,drop=FALSE]), invert(face$lipso["lipsiend",,drop=FALSE])) ,earr=rbind(face$shape["earsta",],face$ear,face$shape["earend",]) ,earl=invert(rbind(face$shape["earsta",],face$ear,face$shape["earend",])) ,nose=rbind(face$nose,invert(face$nose[nose.refl.ind,])) ,hair=rbind(face$shape["hairend",],face$hair,invert(face$hair[hair.refl.ind,]), invert(face$shape["hairend",,drop=FALSE])) ,shape=rbind(face$shape,invert(face$shape[shape.refl.ind,])) ) face.list<-c(face.list,list(face.obj)) @ Now we are ready to compose the specific faces by drawing smooth curves fitted to the polygons. The following code chunk uses a chunk that is also referenced in the function [[plot.face]]. This function allows the user to place faces anywhere in a plot. Therefore, transformations are needed and are done by the functions [[xtrans]] and [[ytrans]]. Here these two functions do not change the input values. For plainting we need to map the data values ([[factors]]) on colors. [[f]] is the corresponding index of the palettes. <>= if(plot.faces){ plot(1,type="n",xlim=c(-105,105)*1.1, axes=FALSE, ylab="",ylim=c(-105,105)*1.3) title(xnames[ind], cex.main = cex, xpd = NA) #180308 f<-1+(ncolors-1)*(factors+1)/2 # translate factors into color numbers xtrans<-function(x){x}; ytrans<-function(y){y} for(obj.ind in seq(face.obj)[c(10:11,1:9)]) { x <-face.obj[[obj.ind]][,1]; y<-face.obj[[obj.ind]][,2] xx<-spline(1:length(x),x,40,FALSE)[,2] yy<-spline(1:length(y),y,40,FALSE)[,2] if(plot.faces){ lines(xx,yy) if(face.type>0){ <> } } } } @ For painting parts of the faces the order of painting has to been recognized. The colors are found by averaging over the color indices of the relevant variables. <>= if(obj.ind==10) polygon(xtrans(xx),ytrans(yy),col=col.hair[ceiling(mean(f[9:11]))],xpd=NA) # hair if(obj.ind==11){ polygon(xtrans(xx),ytrans(yy),col=col.face[ceiling(mean(f[1:2 ]))],xpd=NA) # face <> } xx<-xtrans(xx); yy<-ytrans(yy) if(obj.ind %in% 1:2) polygon(xx,yy,col="#eeeeee") # eyes without iris if(obj.ind %in% 3:4) polygon(xx,yy,col=col.eyes[ceiling(mean(f[7:8 ]))],xpd=NA) # eyes:iris if(obj.ind %in% 9) polygon(xx,yy,col=col.nose[ceiling(mean(f[12:13]))],xpd=NA)# nose if(obj.ind %in% 5:6) polygon(xx,yy,col=col.lips[ceiling(mean(f[1:3]))],xpd=NA) # lips if(obj.ind %in% 7:8) polygon(xx,yy,col=col.ears[ceiling(mean(f[14:15]))],xpd=NA)# ears @ For painted faces it is nice to have suitable colors. Different elements of a face are painted with colors of different color palettes. <>= ncolors=20, col.nose=rainbow(ncolors), # nose col.eyes=rainbow(ncolors,start=0.6,end=0.85),# eyes col.hair=terrain.colors(ncolors), # hair col.face=heat.colors(ncolors), # face col.lips=rainbow(ncolors,start=0.0,end=0.2), # lips col.ears=rainbow(ncolors,start=0.0,end=0.2), # ears @ That's it for usual applications. Sometimes it is nice to draw a face at a certain position of an existing plot. For this the function [[plot.faces]] will do the job. This function takes a face object and reconstructs faces either at positions fixed by the user or the faces we be drawn on a chess board. <>= plot.faces<-function(x,x.pos,y.pos,face.type = 1, width=1,height=1,labels, <> cex = 2, ...){ #180308 if(missing(x)) return("no face.list object in call") face.list<-x$faces; face.data<-x$xy if(class(face.list)!="faces") { if(!is.list(face.list) || !any(names(face.list[[1]])=="lipso") ) return("input not of class faces") } <> n<-length(face.list) if(missing(x.pos)){ co<-ro<-ceiling(n^0.5) plot((0:ro)+.5,(0:co)+.5,type="n",xlab="",ylab="",axes=FALSE) m<-matrix(1,ro,co); x.pos<-col(m); y.pos<-(1+ro)-row(m) } if(!missing(labels)) names(face.list)<-labels fac.x<-width/1.1/210; fac.y<-height/1.3/210 xtrans<-function(x){x.pos[j]+fac.x*x}; ytrans<-function(y){y.pos[j]+fac.y*y} for(j in seq(face.list)){ face.obj<-face.list[[j]]; factors<-face.data[,j] f<-1+(ncolors-1)*(factors+1)/2 # translate factors into color numbers for(obj.ind in seq(face.obj)[c(10:11,1:9)]) { x <-face.obj[[obj.ind]][,1]; y<-face.obj[[obj.ind]][,2] xx<-spline(1:length(x),x,40,FALSE)[,2] yy<-spline(1:length(y),y,40,FALSE)[,2] lines(xtrans(xx),ytrans(yy),...) if(face.type>0){ <> } } lab<-names(face.list)[j] text(x.pos[j],y.pos[j]-0.5*height,lab,xpd=NA, cex = cex) } } @ The expressions for computing the christmas version are extracted to increase the readability. <>= if(face.type==2){ # beard for(zzz in seq(hhh<-max(face.obj[[8]][,1]),-hhh,length=30)){ hrx<-rnorm(8,zzz,2); hry<-0:7*-3*rnorm(1,3)+abs(hrx)^2/150 hry<-min(face.obj[[9]][,2])+hry lines(xtrans(hrx),ytrans(hry),lwd=5,col="#eeeeee",xpd=NA) } ind<-which.max(xx); wx<-xx[ind]; ind<-which.max(yy); wy<-yy[ind] # edge of hat wxh<-wx<-seq(-wx,wx,length=20); wyh<-wy<-wy-(wx-mean(wx))^2/250+runif(20)*3 lines(xtrans(wxh),ytrans(wyh)); wx<-c(wx,rev(wx)); wy<-c(wy-10,rev(wy)+20) wmxy1<-wmxy0<-c(min(wx),min(wy)+20) wmxy2<-wmxy3<-c(runif(1,wmxy0[1],-wmxy0[1]), wy[1]+100) wmxy1[2]<-0.5*(wmxy0[2]+wmxy3[2]); wmxy2[1]<-0.5*(wmxy2[1]+wmxy0[1]) npxy<-20; pxy<-seq(0,1,length=npxy) gew<-outer(pxy,0:3,"^")*outer(1-pxy,3:0,"^")* matrix(c(1,3,3,1),npxy,4,byrow=TRUE) wxl<-wmxy0[1]*gew[,1]+wmxy1[1]*gew[,2]+wmxy2[1]*gew[,3]+wmxy3[1]*gew[,4] wyl<-wmxy0[2]*gew[,1]+wmxy1[2]*gew[,2]+wmxy2[2]*gew[,3]+wmxy3[2]*gew[,4] lines(xtrans(wxl),ytrans(wyl),col="green") wmxy1[1]<- wmxy0[1]<- -wmxy0[1] wmxy1[2]<-0.5*(wmxy0[2]+wmxy3[2]); wmxy2[1]<-0.5*(wmxy2[1]+wmxy0[1]) wxr<-wmxy0[1]*gew[,1]+wmxy1[1]*gew[,2]+wmxy2[1]*gew[,3]+wmxy3[1]*gew[,4] wyr<-wmxy0[2]*gew[,1]+wmxy1[2]*gew[,2]+wmxy2[2]*gew[,3]+wmxy3[2]*gew[,4] points(xtrans(wmxy3[1]),ytrans(wmxy3[2]),pch=19,cex=2,col="#ffffff",xpd=NA) points(xtrans(wmxy3[1]),ytrans(wmxy3[2]),pch=11,cex=2.53,col="red",xpd=NA) polygon(xtrans(c(wxl,rev(wxr))),ytrans(c(wyl,rev(wyr))),col="red",xpd=NA) # hat polygon(xtrans(wx),ytrans(wy),col="#ffffff",xpd=NA) # edge of hat } @ \section{Code extraction} <>= tangleR("faces",expand.roots="define [[faces]] and [[faces.plot]]") @ <<*>>= tangleR("faces",expand.roots="christmas") @ <>= "relax" @ \section{Some tests} Some tests may be useful. Here is a chunk that will trigger the definition of the functions. <>= <> <> faces(face.type=2); "" args(plot.faces) @ Here are the arguments of [[plot.faces]] -- \begin{verbatim} Wed Jan 7 15:08:19 2009 function (x, x.pos, y.pos, face.type = 1, width = 1, height = 1, labels, ncolors = 20, col.nose = rainbow(ncolors), col.eyes = rainbow(ncolors, start = 0.6, end = 0.85), col.hair = terrain.colors(ncolors), col.face = heat.colors(ncolors), col.lips = rainbow(ncolors, start = 0, end = 0.2), col.ears = rainbow(ncolors, start = 0, end = 0.2), ...) \end{verbatim} @ This code chunk shows different ways of constructing faces. <>= <> <> a<-faces(rbind(1:3,5:3,3:5,5:7),plot=!FALSE,face.type=2,labels = letters[1:4] ) plot.faces(a,face.type=0, cex = 2) #180306 plot(1:4,type="n");plot.faces(a,x.pos=1:4,y.pos=1:4,width=0.5,height=1,face.type=1)# ??! "" faces @ <>= <> faces(rbind(rep(1,3),rep(5,3),c(1,1,5),c(1,5,1),c(1,5,5),c(5,5,1), c(5,1,5),c(3,3,3),c(1,5,1))) "" @ <>= <> data(longley) faces(longley[1:9,]) @ <<*>>= a<-faces(longley[1:16,],plot=FALSE) plot(longley[1:16,2:3],bty="n") plot.faces(a,longley[1:16,2],longley[1:16,3],width=35,height=30) @ \begin{center}\includegraphics[height=10cm]{p182146-Jan-9}\end{center} %

@ @ <<*>>= dim(longley) @ <>= <> set.seed(17) faces(matrix(sample(1:1000,128,),16,8),main="random faces") @ Here is the result: \centerline{\includegraphics[width=13cm,height=10cm]{p20618291De3NA.ps}} %

@ <>= christmas<-function(){ delay<-.1 <> par(bg="white") faces(face.type=0) title("the old chernoff faces") Sys.sleep(delay) faces() title("new chernoff faces") Sys.sleep(delay) par(bg="blue") faces(face.type=2) title("chernoff faces -> december 2008") } christmas() @ \begin{center}\includegraphics[height=10cm]{p2008-Dec22-152042.ps}\end{center} %

@ \section{Rd-file} In the chapter "Documenting functions" of the manual "Writing R Extensions" we find that there is a special style for the usage section concerning S3 method functions. Ignoring this style results in a note and later perhaps in an error situation. Therefore, we now use the method style % \footnotesize <>= \name{faces} \alias{faces} \alias{plot.faces} \title{ Chernoff Faces } \description{ \code{faces} represent the rows of a data matrix by faces. \code{plot.faces} plots faces into a scatterplot. } \usage{ faces(xy, which.row, fill = FALSE, face.type = 1, nrow.plot, ncol.plot, scale = TRUE, byrow = FALSE, main, labels, print.info = TRUE, na.rm = FALSE, ncolors = 20, col.nose = rainbow(ncolors), col.eyes = rainbow(ncolors, start = 0.6, end = 0.85), col.hair = terrain.colors(ncolors), col.face = heat.colors(ncolors), col.lips = rainbow(ncolors, start = 0, end = 0.2), col.ears = rainbow(ncolors, start = 0, end = 0.2), plot.faces = TRUE, cex = 2) \method{plot}{faces}(x, x.pos, y.pos, face.type = 1, width = 1, height = 1, labels, ncolors = 20, col.nose = rainbow(ncolors), col.eyes = rainbow(ncolors, start = 0.6, end = 0.85), col.hair = terrain.colors(ncolors), col.face = heat.colors(ncolors), col.lips = rainbow(ncolors, start = 0, end = 0.2), col.ears = rainbow(ncolors, start = 0, end = 0.2), cex = 2, \ldots) } \arguments{ \item{xy}{ \code{xy} data matrix, rows represent individuals and columns variables } \item{which.row}{ defines a permutation of the rows of the input matrix } \item{fill}{ \code{if(fill==TRUE)}, only the first \code{nc} attributes of the faces are transformed, \code{nc} is the number of columns of \code{xy} } \item{face.type}{ an integer between 0 and 2 with the meanings: 0 = line drawing faces, 1 = the elements of the faces are painted, 2 = Santa Claus faces are drawn } \item{nrow.plot}{ number of columns of faces on graphics device } \item{ncol.plot}{ number of rows of faces } \item{scale}{ \code{if(scale==TRUE)}, variables will be normalized } \item{byrow}{ \code{if(byrow==TRUE)}, \code{xy} will be transposed } \item{main}{ title } \item{labels}{ character strings to use as names for the faces } \item{print.info}{ if TRUE information about usage of variables for face elements are printed } \item{na.rm}{ if TRUE 'NA' values are removed otherwise exchanged by mean of data} \item{plot.faces}{ if \code{FALSE} no face is plotted } \item{cex}{ size of labels of faces } \item{x}{ an object of class \code{faces} computed by \code{faces} } \item{x.pos}{ x coordinates of positions of faces } \item{y.pos}{ y coordinates of positions of faces } \item{width}{ width of the faces } \item{height}{ height of the faces } \item{ncolors}{ number of colors in the palettes for painting the elements of the faces } \item{col.nose}{ palette of colors for painting the nose } \item{col.eyes}{ palette of colors for painting the eyes } \item{col.hair}{ palette of colors for painting the hair } \item{col.face}{ palette of colors for painting the face } \item{col.lips}{ palette of colors for painting the lips } \item{col.ears}{ palette of colors for painting the ears } \item{...}{ additional graphical arguments } } \details{ Explanation of parameters: 1-height of face, 2-width of face, 3-shape of face, 4-height of mouth, 5-width of mouth, 6-curve of smile, 7-height of eyes, 8-width of eyes, 9-height of hair, 10-width of hair, 11-styling of hair, 12-height of nose, 13-width of nose, 14-width of ears, 15-height of ears. For painting elements of a face the colors of are found by averaging of sets of variables: (7,8)-eyes:iris, (1,2,3)-lips, (14,15)-ears, (12,13)-nose, (9,10,11)-hair, (1,2)-face. Further details can be found in the literate program of \code{faces}. } \value{ list of two elements: The first element \code{out$faces} is a list of standardized faces of \code{class faces}, this object could be plotted by plot.faces; a plot of faces is created on the graphics device if \code{plot.faces=TRUE}. The second list is short description of the effects of the variables. } \references{ Chernoff, H. (1973): The use of faces to represent statistiscal assoziation, JASA, 68, pp 361--368. The smooth curves are computed by an algorithm found in Ralston, A. and Rabinowitz, P. (1985): A first course in numerical analysis, McGraw-Hill, pp 76ff. \url{http://www.wiwi.uni-bielefeld.de/lehrbereiche/statoekoinf/comet/wolf/wolf_aplpack} } \author{ H. P. Wolf } \note{ version 01/2009 } \seealso{ --- } \examples{ faces() faces(face.type=1) faces(rbind(1:3,5:3,3:5,5:7)) data(longley) faces(longley[1:9,],face.type=0) faces(longley[1:9,],face.type=1) plot(longley[1:16,2:3],bty="n") a<-faces(longley[1:16,],plot=FALSE) plot.faces(a,longley[1:16,2],longley[1:16,3],width=35,height=30) set.seed(17) faces(matrix(sample(1:1000,128,),16,8),main="random faces") a<-faces(rbind(1:3,5:3,3:5,5:7),plot.faces=FALSE) plot(0:5,0:5,type="n") plot(a,x.pos=1:4,y.pos=1:4,1.5,0.7) # during Christmastime faces(face.type=2) } \keyword{misc} @ Wrong description of aplpack version 1.2.7 : \begin{verbatim} For painting elements of a face the colors of are found by averaging of sets of variables: (7,8)-eyes, (12,13)-iris, (1,2,3)-lips, (14,15)-ears, (9)-nose, (10)-hair, (11)-face. \end{verbatim} @ Chunk to test the help examples. <<*>>= <> <> a<-faces(rbind(1:3,5:3,3:5,5:7),plot.faces=FALSE) plot(0:5,0:5,type="n") plot(a,x.pos=1:4,y.pos=1:4,1.5,0.7) @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @ \section{Definition of a spline function} <>= spline<-function(a,y,m=200,plot=FALSE){ n<-length(a) h<-diff(a) dy<-diff(y) sigma<-dy/h lambda<-h[-1]/(hh<-h[-1]+h[-length(h)]) mu<-1-lambda d<-6*diff(sigma)/hh tri.mat<-2*diag(n-2) tri.mat[2+ (0:(n-4))*(n-1)] <-mu[-1] tri.mat[ (1:(n-3))*(n-1)] <-lambda[-(n-2)] M<-c(0,solve(tri.mat)%*%d,0) x<-seq(from=a[1],to=a[n],length=m) anz.kl <- hist(x,breaks=a,plot=FALSE)$counts adj<-function(i) i-1 i<-rep(1:(n-1),anz.kl)+1 S.x<- M[i-1]*(a[i]-x )^3 / (6*h[adj(i)]) + M[i] *(x -a[i-1])^3 / (6*h[adj(i)]) + (y[i-1] - M[i-1]*h[adj(i)]^2 /6) * (a[i]-x)/ h[adj(i)] + (y[i] - M[i] *h[adj(i)]^2 /6) * (x-a[i-1]) / h[adj(i)] if(plot){ plot(x,S.x,type="l"); points(a,y) } return(cbind(x,S.x)) } @ Test of spline function: <>= a<-c(.25,.30,.39,.45,.53); y<-c(.5,.5477,.6245,.6708,runif(1)) # .7280) spline(a,y,,T) #6*(.8533-.954)/sum(h[1:2]) x<-runif(10); y<-runif(10) xx<-spline(1:length(x),x,100,FALSE)[,2] yy<-spline(1:length(y),y,100,FALSE)[,2] plot(xx,yy,type="l"); points(xx,yy) @ \section{Literatur} Chernoff, H. (1973): The use of faces to represent statistiscal assoziation, JASA, 68, pp 361--368. Ralston, A. and Rabinowitz, P. (1985): A first course in numerical analysis, McGraw-Hill, pp 76ff. @ \section{Appendix: The way to [[faces]]} \subsection{Definition of characteristical points} The first step is to draw a face on a transparent sheet. Then we fix this slide in front of a monitor and read some characteristical points using the [[locator]] function, see following code chunk. To check the points of face we plot them on the graphics device. Only the right half of the face has been digitized. The point between the eyes is defined as [[c(0,0)]]. <>= plot(1,type="n",xlim=c(-100,100),ylim=c(-100,100)) abline(v=0) result<-NULL for(i in 1:50) { xy<-locator(1); text(xy$x,xy$y,i) result<-rbind(result,round(c(xy$x,xy$y))) } result<-rbind(result,cbind(-result[,1],result[,2])) points(result[,1],result[,2],pch=".") result @ \subsection{Saving of the characteristical points} The first 8 points lie on the line $x=0$. Points 9 to 36 have an $x$-value greater 0. To show the face the left half of the face has to be added. To be able to do some corrections the points are stored in a file. <>= result[1:8,1]<-0; result1<-result[1:36,] result1<-rbind(result1,cbind(-result1[9:36,1],result1[9:36,2])) plot(1,type="n",xlim=c(-100,100),ylim=c(-100,100)) abline(v=0) points(result1[,1],result1[,2],pch="*") text(result1[,1],result1[,2],1:length(result1[,1])) result.save<-paste(result1[,1]," ",result1[,2]) cat(file="facecoord",result.save[1:36],sep="\n") @ \subsection{Redrawing of the face} For looking at the standard face we need a chunk that reads the data from file and replots the points. The plot shows the positions of points and adds indices. <>= r<-scan(file="facecoord") # r<-rr r<-matrix(r,ncol=2,byrow=TRUE) r<-rbind(r,cbind(-r[9:36,1],r[9:36,2])) plot(1,type="n",xlim=c(-100,100),ylim=c(-100,100)) abline(v=0) points(r[,1],r[,2],pch="*") text(r[,1],r[,2],1:length(r[,1])) @ The next step is in defining elements of the face by sets of points. The polygons of the sets are plotted. Data input: file. <>= r<-scan(file="facecoord") result1<-r<-matrix(r,ncol=2,byrow=TRUE) facecoor.orig<-r<-rbind(r,cbind(-r[9:36,1],r[9:36,2])) facecoor<-list( face=r[c(8:15,2,43:37,8),] ,eyer=r[c(27:32,27),] ,eyel=r[c(55:60,55),] ,irisr=r[c(33:36,33),] ,irisl=r[c(61:64,61),] ,lipso=r[c(23,21,5,49,51,50,7,22,23),] ,lipsi=r[c(51,52,6,24,23),] ,nose=r[c(3,53,54,4,26,25,3),] ,hair=r[c(41,46,45,44,1,16,17,18,13),] ,nose=r[c(3,53,54,4,26,25,3),] ,earr=r[c(11,20,19,12),] ,earl=r[c(39,48,47,40),] ) plot(1,type="n",xlim=c(-100,100),ylim=c(-100,100)) for(i in seq(facecoor)) lines(facecoor[[i]][,1],facecoor[[i]][,2]) @ To get a nicer face we construct smooth lines to connect the points of the elements. The curve are found by computing spline functions. Data input: variable [[facecoor]]. <>= plot(1,type="n",xlim=c(-100,100),ylim=c(-100,100)) for(i in seq(facecoor)) { x <-facecoor[[i]][,1]; y<-facecoor[[i]][,2] xx<-spline(1:length(x),x,100,FALSE)[,2] yy<-spline(1:length(y),y,100,FALSE)[,2] lines(xx,yy) } @ Now a first version of [[faces]] can be designed. What's to be done? \begin{enumerate} \item define [[spline]] \item check input \item fix points of standard face \item draw a face for each row of data in a loop: \begin{enumerate} \item initialize face \item modify points of the face according the data values \item define elements of the face \item plot the face \end{enumerate} \end{enumerate} <>= faces1<-function(xy){ <> # standardize input xy<-rbind(xy); mm<-dim(xy)[2]; n<-dim(xy)[1] xnames<-dimnames(xy)[[1]] if(is.null(xnames)) xnames<-as.character(1:n) xy<-apply(xy,2,function(x){ x<-x-min(x) x<-if(max(x)>0) 2*x/max(x)-1 else x+0.5 }) xy<-xy[,rep(1:mm,ceiling(14/mm))] # definie points of standard face r<-c(0,79,0,44,0,-6,0,-31,0,-47,0,-54,0,-62,0,-89, 25,-83,38,-61,46,-36,52,-4,54,11, 51,22,29,40,36,74,64,50,72,12,60, -11,57,-30,7,-49,7,-60,16,-53, 7,-54,3,-16,6,-30,12,0,19,8,30, 8,37,0,30,-8,19,-8,20,0,24,4,29,0,24,-5) r<-matrix(r,ncol=2,byrow=TRUE) facecoor.orig<-rbind(r,cbind(-r[9:36,1],r[9:36,2])) # loop over elements for(ind in 1:n){ # initialize face for element ind factors<-xy[ind,] face <- facecoor.orig # modify face characteristics # head face[,2]<-face[,2] * ((5+factors[1])/5) face[,1]<-face[,1] * ((5+factors[2])/5) face[9:15,1]<-face[9:15,1] + (face[ 9:15,2]+40)/5 * (-factors[3] ) face[37:43,1]<-face[37:43,1] + (face[37:43,2]+40)/5 * (factors[3] ) # lips face[c(21:24,49:52,5:7),2]<-face[c(21:24,49:52,5:7),2] + ( face[c(21:24,49:52,5:7),2]+53 )* factors[4] face[c(21:24,49:52,5:7),1]<-face[c(21:24,49:52,5:7),1] + ( face[c(21:24,49:52,5:7),1] )* factors[5]/2 face[c(23,51),2]<-face[c(23,51),2] + ( face[c(23,51),2]-53 )* factors[6]/15 # eyes face[c(27:36,55:64),2]<-face[c(27:36,55:64),2] + ( face[c(27:36,55:64),2]-1)* (factors[7]) /2 face[c(27:36),1]<-face[c(27:36),1] + ( face[c(27:36),1]-25)* (factors[8]) /2 face[c(55:64),1]<-face[c(55:64),1] + ( face[c(55:64),1]+25)* (factors[8]) /2 ## face[c(27:36,55:64),1]<-face[c(27:36,55:64),1] + ## (factors[??]) *5 # shift # hair face[c(16:18,44:46,1),2]<-face[c(16:18,44:46,1),2] + ( face[c(16:18,44:46,1),2]-50)* (factors[9]) face[c(16:18,44:46,1),1]<-face[c(16:18,44:46,1),1] + ( face[c(16:18,44:46,1),1])* (factors[10])/3 # nose face[c(25,26,53,54,3,4),2]<-face[c(25,26,53,54,3,4),2] + ( face[c(25,26,53,54,3,4),2]+25)* (factors[11])/2 face[c(25,26,53,54),1]<-face[c(25,26,53,54),1] + ( face[c(25,26,53,54),1])* (factors[12])/2 # ears face[c(19,20,47:48),2]<-face[c(19,20,47:48),2] + ( face[c(19,20,47:48),2]+20)* (factors[13])*.5 # construct face face[c(20,48),1]<-face[c(20,48),1] + (1+factors[14])*c(1,-1)*5 r<-face;facecoor<-list( face=r[c(8:15,2,43:37,8),] ,eyer=r[c(27:32,27),] ,eyel=r[c(55:60,55),] ,irisr=r[c(33:36,33),] ,irisl=r[c(61:64,61),] ,lipso=r[c(23,21,5,49,51,50,7,22,23),] ,lipsi=r[c(51,52,6,24,23),] ,nose=r[c(3,53,54,4,26,25,3),] ,hair=r[c(41,46,45,44,1,16,17,18,13),] ,nose=r[c(3,53,54,4,26,25,3),] ,earr=r[c(11,20,19,12),] ,earl=r[c(39,48,47,40),] ) # initialize plot plot(1,type="n",xlim=c(-100,100)*1.1,axes=FALSE, ylab="",xlab=xnames[ind],ylim=c(-100,100)*1.3) # plot elements of the face for(i in seq(facecoor)) { x <-facecoor[[i]][,1]; y<-facecoor[[i]][,2] xx<-spline(1:length(x),x,20,FALSE)[,2] yy<-spline(1:length(y),y,20,FALSE)[,2] lines(xx,yy) } } xy } @ Some tests are necessary to experiment with the parameters of the transformations. <>= faces(rbind(1:3,5:3,3:5,5:7)) @ A second test show the results for a data set. <>= data(longley) par(mfrow=c(3,3)) faces(longley[1:9,]) par(mfrow=c(1,1)) title("longley") longley[1:9,] @ Now we know what to do and we can rewrite [[faces]] in a literate style. See p 1 ff. @ <<*>>= data(longley) @ <<*>>= print @ \end{document} @ Example of DT 2011/11 @ <<*>>= X <- structure(c(497, 839, 798, 892, 1585, 755, 388, 617, 248, 1641, 1180, 619, 253, 661, 1981, 1746, 1865, 238, 1199, 1524, 591, 942, 1308, 842, 781, 764, 655, 879, 438, 440, 1243, 684, 422, 739, 869, 746, 915, 522, 1095, 964, 153, 302, 668, 287, 2476, 428, 153, 757, 22, 6471, 768, 99, 15, 71, 1489, 2662, 5184, 29, 261, 1739, 291, 365, 584, 395, 1740, 438, 233, 719, 65, 2063, 813, 204, 48, 188, 1032, 1594, 1767, 75, 344, 1410), .Dim = c(20L, 4L), .Dimnames = list(c("M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", "M10", "M11", "M12", "M13", "M14", "M15", "M16", "M17", "M18", "M19", "M20"), c("Miete", "Nahrung", "AndereGueter", "DienstLeist"))) #faces(X); NULL X @ \begin{center}\includegraphics[height=10cm]{p2011-Nov3-141315}\end{center} %

\begin{verbatim} effect of variables: modified item Var "height of face " "Miete" "width of face " "Nahrung" "structure of face" "AndereGueter" "height of mouth " "DienstLeist" "width of mouth " "Miete" "smiling " "Nahrung" "height of eyes " "AndereGueter" "width of eyes " "DienstLeist" "height of hair " "Miete" "width of hair " "Nahrung" "style of hair " "AndereGueter" "height of nose " "DienstLeist" "width of nose " "Miete" "width of ear " "Nahrung" "height of ear " "AndereGueter" \end{verbatim} aplpack/inst/src/spin3R.rev0000755000176200001440000001500412235712724015335 0ustar liggesusers% New Report: Mon Nov 4 13:39:04 2013 % require -> # \documentclass{article} \usepackage{noweb} %\usepackage{psfig} \textwidth=16.5cm \noweboptions{webnumbering,smallcode,longchunks} \sloppy \textheight=25cm \topmargin=-30mm \oddsidemargin=0mm \parindent=0mm \author{H. P. Wolf} \date{\today, file: spin3R.rev} \title{Punktwolkenrotation} \begin{document} \maketitle @ Die in diesen Abschnitt definierte Funktion ermöglicht dem Anwender eine Punktwolke interaktiv zu drehen und zu betrachten. @ <>= <> @ <>= \name{spin3R} \alias{spin3R} \title{ spin3R } \description{ Simple spin function to rotate and to inspect a 3-dimensional cloud of points } \usage{ spin3R(x, alpha = 1, delay = 0.015, na.rm=FALSE) } \arguments{ \item{x}{ \code{(nx3)}-matrix of points } \item{alpha}{ angle between successive projections } \item{delay}{ delay in seconds between two plots } \item{na.rm}{ if TRUE 'NA' values are removed otherwise exchanged by mean} } \details{ \code{spin3R} computes two-dimensional projections of \code{(nx3)}-matrix \code{x} and plots them on the graphics devise. The cloud of points is rotated step by step. The rotation is defined by a tcl/tk control widget. \code{spin3R} requires tcl/tk package of R. } \references{ Cleveland, W. S. / McGill, M. E. (1988): Dynamic Graphics for Statistics. Wadsworth & Brooks/Cole, Belmont, California. } \author{ Peter Wolf } \note{ version 01/2003 } \seealso{ \code{spin} of S-Plus } \examples{ xyz<-matrix(rnorm(300),100,3) # now start: spin3R(xyz) } \keyword{misc} @ <>= spin3R <- function(x, alpha=1, delay=.015, na.rm=FALSE){ ################################################################# # spin3R: simple spin function to rotate a 3-dim cloud of points# # pwolf 070831 # # # # arguments: # # # # x (nx3)-matrix of points # # alpha arc of rotation # # delay sleeping time between rotations # # # ################################################################# if(ncol(x)!=3) { print("Error: data matrix must have 3 columns"); return() } # require(tcltk) # 131104 <> <> <> <> <> <> } @ <>= Rot <-tclVar("relax");bw <- 4 topl<-tktoplevel(); tkwm.geometry(topl,"+100+100") f1 <- tkframe(topl);f2 <- tkframe(topl);f3 <- tkframe(topl) f4 <- tkframe(topl);f5 <- tkframe(topl);tkpack(f1,f2,f3,f4,f5) b12 <- tkbutton(f1, relief="ridge", width=bw, text="up") b21 <- tkbutton(f2, relief="ridge", width=bw, text="left") b22 <- tklabel(f2, relief="flat", width=bw) b23 <- tkbutton(f2, relief="ridge", width=bw, text="right") b32 <- tkbutton(f3, relief="ridge", width=bw, text="down") b41 <- tkbutton(f4, relief="ridge", width=bw, text="clock") b42 <- tklabel(f4, relief="flat", width=bw) b43 <- tkbutton(f4, relief="ridge", width=bw, text="cclock") b51 <- tkbutton(f5, relief="raised", width=bw, text="reset") b52 <- tklabel(f5, relief="flat", width=bw) b53 <- tkbutton(f5, relief="raised", width=bw, text="exit") tkpack(b12,b32) tkpack(b21,b22,b41,b42,b51,b52,side="left") tkpack(b23,b43,b53,side="right") @ <>= for(type in c("12","21","23","32","41","43")){ b<-eval(parse(text=paste("b",type,sep=""))) tkbind(b, "", eval(parse(text=paste("function()tclvalue(Rot)<-\"",type,"\"",sep="")))) tkbind(b, "",function() tclvalue(Rot) <- "relax") } tkconfigure(b51,command=function() tclvalue(Rot) <- "reset" ) tkconfigure(b53,command=function() tclvalue(Rot) <- "exit" ) @ Für die Rotation bezüglich zwei Achsen wird nur eine 2$\times$2-Rotationsmatrix benötigt. <>= alpha<-alpha/360*2*pi; ca<-cos(alpha); sa<-sin(alpha) rot<-matrix(c(ca,-sa,sa,ca),2,2) @ [[x]] hält die Daten, [[x.o]] die Originaldaten, [[xa]] die 2-dim Projektionen. Für die Anschaulichkeit wird ein Andeutung der Achsen mitgeliefert: [[A]] beschreibt die Achsen, [[A.o]] die Originalachsen, [[Aa]] den darzustellenden Teil. <>= n <- nrow(x) if(any(is.na(x))){ if(na.rm){ x<-x[!apply(is.na(x),1,any),,drop=FALSE] print("Warning: NA elements have been removed!!") }else{ xy.means<-colMeans(x,na.rm=TRUE) for(j in 1:ncol(x)) x[is.na(x[,j]),j]<-xy.means[j] print("Warning: NA elements have been exchanged by mean values!!") } } x <- x - matrix(apply(x,2,min),n,3,TRUE) x.o<-x<-x / matrix(apply(x,2,max),n,3,TRUE) - 0.5; xa <- x[,2:3] A.o<-A<-0.5*matrix(c(1,0,0, 0,0,0, 0,1,0, 0,0,0, 0,0,1),5,3,TRUE);Aa <- A[,2:3] plot(xa, xlim=.7*c(-1,1), ylim=.7*c(-1,1), pch=20, xlab="",ylab="",xaxt="n",yaxt="n") lines(Aa) @ <>= i <- 0 # ; i.max<-100 cat("exit by button Exit\n") if(delay < 0.015) delay <- 0.015 repeat{ Sys.sleep(delay) choice <- tclvalue(Rot) if(choice=="exit" # || ((i<-i+1)>i.max) ){ break } if(choice=="relax") next if(choice=="reset") { points(xa, pch=20, col="white"); lines(Aa, col="white") x <- x.o; A <- A.o; xa<-x[,2:3]; Aa<-A[,2:3] points(xa, pch=20, col="black"); lines(Aa, col="black") tclvalue(Rot)<-"relax"; next } switch(choice, "12" = ind<-c(1,3), "21" = ind<-c(2,1), "23" = ind<-c(1,2), "32" = ind<-c(3,1), "41" = ind<-c(3,2), "43" = ind<-c(2,3) ) x[,ind] <- x[,ind]%*%rot; A[,ind] <- A[,ind]%*%rot points(xa, pch=20, col="white"); lines(Aa, col="white") xa<-x[,2:3]; Aa<-A[,2:3] points(xa, pch=20, col="black"); lines(Aa, col="black") } @ <>= tkdestroy(topl) "control widget closed" @ Testbeispiel: <<*>>= x<-matrix(sample(1:333),111,3) spin3R(x) @ <<*>>= # show planes of "randu" random number generator: random.gkg<-function(n.max,m,a,r,x){ res<-1:n.max for(i in 1:n.max){res[i] <- x <- (a*x+r) %% m }; res } # randu: res<-random.gkg(1000, 2^31, 65539, 0, 100000)/2^31 # define cloud of points: xyz<-cbind(res[-c(length(res),length(res)-1)], res[-c(1,length(res))],res[-c(1:2)]) spin3R(xyz) @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \end{document}