ConsensusClusterPlus/DESCRIPTION0000644000175400017540000000133413556150765017512 0ustar00biocbuildbiocbuildPackage: ConsensusClusterPlus Type: Package Imports: Biobase, ALL, graphics, stats, utils, cluster Title: ConsensusClusterPlus Version: 1.50.0 Date: 2015-12-29 Author: Matt Wilkerson , Peter Waltman Maintainer: Matt Wilkerson Description: algorithm for determining cluster count and membership by stability evidence in unsupervised analysis License: GPL version 2 biocViews: Software, Clustering git_url: https://git.bioconductor.org/packages/ConsensusClusterPlus git_branch: RELEASE_3_10 git_last_commit: 4ef9c79 git_last_commit_date: 2019-10-29 Date/Publication: 2019-10-29 NeedsCompilation: no Packaged: 2019-10-29 23:57:41 UTC; biocbuild ConsensusClusterPlus/NAMESPACE0000755000175400017540000000055313556116712017222 0ustar00biocbuildbiocbuildexport(ConsensusClusterPlus,calcICL) importFrom(graphics, barplot, hist, legend, lines, par, plot, rect, segments, text) importFrom(grDevices, dev.off, pdf, png, rainbow, rgb) importFrom(stats, as.dendrogram, as.dist, cor, cutree, dist, hclust,heatmap, kmeans) importFrom(utils, write.csv, write.table) importFrom(Biobase, exprs) importFrom(cluster, pam, diana) ConsensusClusterPlus/R/0000755000175400017540000000000013556116712016176 5ustar00biocbuildbiocbuildConsensusClusterPlus/R/ConsensusClusterPlus.R0000644000175400017540000006072713556116712022523 0ustar00biocbuildbiocbuildConsensusClusterPlus <- function( d=NULL, maxK = 3, reps=10, pItem=0.8, pFeature=1, clusterAlg="hc", title="untitled_consensus_cluster", innerLinkage="average", finalLinkage="average", distance="pearson", ml=NULL, tmyPal=NULL, seed=NULL, plot=NULL, writeTable=FALSE, weightsItem=NULL, weightsFeature=NULL, verbose=F, corUse="everything" ) { ##description: runs consensus subsamples if(is.null(seed)==TRUE){ seed=timeSeed = as.numeric(Sys.time()) } set.seed(seed) #distance=ifelse( inherits(d,"dist"), attr( d, "method" ), "pearson" ) if(is.null(ml)==TRUE){ if ( ! class( d ) %in% c( "dist", "matrix", "ExpressionSet" ) ) { stop("d must be a matrix, distance object or ExpressionSet (eset object)") } if ( inherits( d, "dist" ) ) { ## if d is a distance matrix, fix a few things so that they don't cause problems with the analysis ## Note, assumption is that if d is a distance matrix, the user doesn't want to sample over the row features if ( is.null( attr( d, "method" ) ) ) { attr( d, "method" ) <- distance <- "unknown - user-specified" } if ( is.null( distance ) || ( distance != attr( d, "method" ) ) ) { distance <- attr( d, "method" ) } if ( ( ! is.null( pFeature ) ) && ( pFeature < 1 ) ) { message( "Cannot use the pFeatures parameter when specifying a distance matrix as the data object\n" ) pFeature <- 1 } if ( ! is.null( weightsFeature ) ) { message( "Cannot use the weightsFeature parameter when specifying a distance matrix as the data object\n" ) weightsFeature <- NULL } if ( clusterAlg == "km" ) { message( "Note: k-means will cluster the distance matrix you provided. This is similar to kmdist option when suppling a data matrix") ##d <- as.matrix( d ) #this is now done w/in ccRun } } else { if ( is.null( distance ) ) { ## we should never get here, but just in case distance <- "pearson" } } if ( ( clusterAlg == "km" ) && inherits( distance, "character" ) && ( distance != "euclidean" ) ) { message( "Note: The km (kmeans) option only supports a euclidean distance metric when supplying a data matrix. If you want to cluster a distance matrix using k-means use the 'kmdist' option, or use a different algorithm such as 'hc' or 'pam'. Changing distance to euclidean") distance <- 'euclidean' } if ( inherits( d,"ExpressionSet" ) ) { d <- exprs(d) } ml <- ccRun( d=d, maxK=maxK, repCount=reps, diss=inherits(d,"dist"), pItem=pItem, pFeature=pFeature, innerLinkage=innerLinkage, clusterAlg=clusterAlg, weightsFeature=weightsFeature, weightsItem=weightsItem, distance=distance, verbose=verbose, corUse=corUse) } res=list(); ##make results directory if((is.null(plot)==FALSE | writeTable) & !file.exists(paste(title,sep=""))){ dir.create(paste(title,sep="")) } ##write log file log <- matrix( ncol=2, byrow=T, c("title",title, "maxK",maxK, "input matrix rows",ifelse ( inherits( d, "matrix" ), nrow(d), "dist-mat" ), "input matrix columns",ifelse ( inherits( d, "matrix" ), ncol(d), ncol( as.matrix(d) ) ), "number of bootstraps",reps, "item subsampling proportion",pItem, "feature subsampling proportion",ifelse( is.null(pFeature), 1, pFeature ), "cluster algorithm",clusterAlg, "inner linkage type",innerLinkage, "final linkage type",finalLinkage, "correlation method",distance, "plot",if(is.null(plot)) NA else plot, "seed",if(is.null(seed)) NA else seed)) colnames(log) = c("argument","value") if(writeTable){ write.csv(file=paste(title,"/",title,".log.csv",sep=""), log,row.names=F) } if(is.null(plot)){ ##nothing }else if(plot=="pngBMP"){ bitmap(paste(title,"/","consensus%03d.png",sep="")) }else if(plot=="png"){ png(paste(title,"/","consensus%03d.png",sep="")) }else if (plot=="pdf"){ pdf(onefile=TRUE, paste(title,"/","consensus.pdf",sep="")) }else if (plot=="ps"){ postscript(onefile=TRUE, paste(title,"/","consensus.ps",sep="")) } colorList=list() colorM = rbind() #matrix of colors. #18 colors for marking different clusters thisPal <- c("#A6CEE3","#1F78B4","#B2DF8A","#33A02C","#FB9A99","#E31A1C","#FDBF6F","#FF7F00","#CAB2D6","#6A3D9A","#FFFF99","#B15928", "#bd18ea", #magenta "#2ef4ca", #aqua "#f4cced", #pink, "#f4cc03", #lightorange "#05188a", #navy, "#e5a25a", #light brown "#06f106", #bright green "#85848f", #med gray "#000000", #black "#076f25", #dark green "#93cd7f",#lime green "#4d0776", #dark purple "#ffffff" #white ) ##plot scale colBreaks=NA if(is.null(tmyPal)==TRUE){ colBreaks=10 tmyPal = myPal(colBreaks) }else{ colBreaks=length(tmyPal) } sc = cbind(seq(0,1,by=1/( colBreaks) )); rownames(sc) = sc[,1] sc = cbind(sc,sc) heatmap(sc, Colv=NA, Rowv=NA, symm=FALSE, scale='none', col=tmyPal, na.rm=TRUE,labRow=rownames(sc),labCol=F,main="consensus matrix legend") for (tk in 2:maxK){ if(verbose){ message(paste("consensus ",tk)) } fm = ml[[tk]] hc=hclust( as.dist( 1 - fm ), method=finalLinkage); message("clustered") ct = cutree(hc,tk) names(ct) = colnames(d) if(class(d)=="dist"){ names(ct) = colnames(as.matrix(d)) } c = fm colorList = setClusterColors(res[[tk-1]][[3]],ct,thisPal,colorList) pc = c pc=pc[hc$order,] #pc is matrix for plotting, same as c but is row-ordered and has names and extra row of zeros. if(!is.null(plot) && plot=="pngBMP"){ pc = pc[,hc$order ] #mod for no tree pc = rbind(pc,0) #no dendrogram if pngBMP oc = colorList[[1]][hc$order] #mod for no tree heatmap(pc, Colv = NA, Rowv = NA, symm = FALSE, scale = "none", col = tmyPal, na.rm = TRUE, labRow = F, labCol = F, mar = c(5, 5), main = paste("consensus matrix k=", tk, sep = ""), ColSideCol = oc) }else{ pc = rbind(pc,0) #former with tree: heatmap(pc, Colv=as.dendrogram(hc), Rowv=NA, symm=FALSE, scale='none', col=tmyPal, na.rm=TRUE,labRow=F,labCol=F,mar=c(5,5),main=paste("consensus matrix k=",tk,sep="") , ColSideCol=colorList[[1]]) } legend("topright",legend=unique(ct),fill=unique(colorList[[1]]),horiz=FALSE ) res[[tk]] = list(consensusMatrix=c,consensusTree=hc,consensusClass=ct,ml=ml[[tk]],clrs=colorList) colorM = rbind(colorM,colorList[[1]]) } CDF(ml) clusterTrackingPlot(colorM[,res[[length(res)]]$consensusTree$order]) if(is.null(plot)==FALSE){ dev.off(); } res[[1]] = colorM if(writeTable){ for(i in 2:length(res)){ write.csv(file=paste(title,"/",title,".k=",i,".consensusMatrix.csv",sep=""), res[[i]]$consensusMatrix) write.table(file=paste(title,"/",title,".k=",i,".consensusClass.csv",sep=""), res[[i]]$consensusClass,col.names = F,sep=",") } } return(res) } calcICL = function(res,title="untitled_consensus_cluster",plot=NULL,writeTable=FALSE){ #calculates and plots cluster consensus and item consensus cc=rbind() cci = rbind() sumRes=list() colorsArr=c() #make results directory if((is.null(plot)==FALSE | writeTable) & !file.exists(paste(title,sep=""))){ dir.create(paste(title,sep="")) } if(is.null(plot)){ #to screen }else if(plot=="pdf"){ pdf(onefile=TRUE, paste(title,"/","icl.pdf",sep="")) }else if(plot=="ps"){ postscript(onefile=TRUE, paste(title,"/","icl.ps",sep="")) }else if (plot=="png"){ png(paste(title,"/","icl%03d.png",sep="")) }else if (plot=="pngBMP"){ bitmap(paste(title,"/","icl%03d.png",sep="")) } par(mfrow=c(3,1),mar=c(4,3,2,0)) for (k in 2:length(res)){ #each k eiCols = c(); o = res[[k]] m = o$consensusMatrix m = triangle(m,mode=2) for (ci in sort(unique(o$consensusClass))){ #each cluster in k items = which(o$consensusClass==ci) nk = length(items) mk = sum( m[items,items], na.rm=T)/((nk*(nk-1))/2) cc=rbind(cc,c(k,ci,mk)) #cluster-consensus for (ei in rev(res[[2]]$consensusTree$order) ){ denom = if (ei %in% items) { nk - 1} else { nk } mei = sum( c(m[ei,items],m[items,ei]), na.rm=T)/denom # mean item consensus to a cluster. cci = rbind(cci,c(k,ci,ei,mei)) #cluster, cluster index, item index, item-consensus } eiCols = c(eiCols, rep(ci,length(o$consensusClass)) ) } cck = cci[which(cci[,1]==k),] #only plot the new k data. #group by item, order by cluster i w=lapply(split(cck,cck[,3]), function(x) { y=matrix(unlist(x),ncol=4); y[order(y[,2]),4] }) q = matrix(as.numeric(unlist(w)),ncol=length(w),byrow=F) q = q[,res[[2]]$consensusTree$order] #order by leave order of k=2 #q is a matrix of k rows and sample columns, values are item consensus of sample to the cluster. thisColors = unique(cbind(res[[k]]$consensusClass,res[[k]]$clrs[[1]])) thisColors=thisColors[order(as.numeric(thisColors[,1])),2] colorsArr=c(colorsArr,thisColors) sumRes[[k]] = rankedBarPlot(q,thisColors,cc=res[[k]]$consensusClass[res[[2]]$consensusTree$order],paste("k=",k,sep="") ) } ys=cs=lab=c() lastk=cc[1,1] for(i in 1:length(colorsArr)){ if(lastk != cc[i,1]){ ys=c(ys,0,0) cs=c(cs,NA,NA) lastk=cc[i,1] lab=c(lab,NA,NA) } ys=c(ys,cc[i,3]) cs=c(cs,colorsArr[i]) lab=c(lab,cc[i,1]) } names(ys) = lab par(mfrow=c(3,1),mar=c(4,3,2,0)) barplot(ys,col=cs,border=cs,main="cluster-consensus",ylim=c(0,1),las=1) if(is.null(plot)==FALSE){ dev.off() } colnames(cc) = c("k","cluster","clusterConsensus") colnames(cci) = c("k","cluster","item","itemConsensus") cci[,"item"] = names(res[[2]]$consensusClass)[ cci[,"item"] ] #type cci cci = data.frame( k=as.numeric(cci[,"k"]), cluster=as.numeric(cci[,"cluster"]), item=cci[,"item"], itemConsensus=as.numeric(cci[,"itemConsensus"])) #write to file. if(writeTable){ write.csv(file=paste(title,"/",title,".summary.cluster.consensus.csv",sep=""),row.names=F, cc) write.csv(file=paste(title,"/",title,".summary.item.consensus.csv",sep=""), row.names=F, cc) } return(list(clusterConsensus=cc,itemConsensus=cci)) } ccRun <- function( d=d, maxK=NULL, repCount=NULL, diss=inherits( d, "dist" ), pItem=NULL, pFeature=NULL, innerLinkage=NULL, distance=NULL, #ifelse( inherits(d,"dist"), attr( d, "method" ), "euclidean" ),@@@@@ clusterAlg=NULL, weightsItem=NULL, weightsFeature=NULL, verbose=NULL, corUse=NULL) { m = vector(mode='list', repCount) ml = vector(mode="list",maxK) n <- ifelse( diss, ncol( as.matrix(d) ), ncol(d) ) mCount = mConsist = matrix(c(0),ncol=n,nrow=n) ml[[1]] = c(0); if (is.null( distance ) ) distance <- 'euclidean' ## necessary if d is a dist object and attr( d, "method" ) == NULL acceptable.distance <- c( "euclidean", "maximum", "manhattan", "canberra", "binary","minkowski", "pearson", "spearman" ) main.dist.obj <- NULL if ( diss ){ main.dist.obj <- d ## reset the pFeature & weightsFeature params if they've been set (irrelevant if d is a dist matrix) if ( ( !is.null(pFeature) ) && ( pFeature < 1 ) ) { message( "user-supplied data is a distance matrix; ignoring user-specified pFeature parameter\n" ) pFeature <- 1 # set it to 1 to avoid problems with sampleCols } if ( ! is.null( weightsFeature ) ) { message( "user-supplied data is a distance matrix; ignoring user-specified weightsFeature parameter\n" ) weightsFeature <- NULL # set it to NULL to avoid problems with sampleCols } } else { ## d is a data matrix ## we're not sampling over the features if ( ( clusterAlg != "km" ) && ( is.null( pFeature ) || ( ( pFeature == 1 ) && is.null( weightsFeature ) ) ) ) { ## only generate a main.dist.object IFF 1) d is a matrix, 2) we're not sampling the features, and 3) the algorithm isn't 'km' if ( inherits( distance, "character" ) ) { if ( ! distance %in% acceptable.distance & ( class(try(get(distance),silent=T))!="function") ) stop("unsupported distance.") if(distance=="pearson" | distance=="spearman"){ main.dist.obj <- as.dist( 1-cor(d,method=distance,use=corUse )) }else if( class(try(get(distance),silent=T))=="function"){ main.dist.obj <- get(distance)( t( d ) ) }else{ main.dist.obj <- dist( t(d), method=distance ) } attr( main.dist.obj, "method" ) <- distance } else stop("unsupported distance specified.") } else { ## pFeature < 1 or a weightsFeature != NULL ## since d is a data matrix, the user wants to sample over the gene features, so main.dist.obj is left as NULL } } for (i in 1:repCount){ if(verbose){ message(paste("random subsample",i)); } ## take expression matrix sample, samples and genes sample_x = sampleCols( d, pItem, pFeature, weightsItem, weightsFeature ) this_dist = NA if ( ! is.null( main.dist.obj ) ) { boot.cols <- sample_x$subcols this_dist <- as.matrix( main.dist.obj )[ boot.cols, boot.cols ] if ( clusterAlg != "km" ) { ## if this isn't kmeans, then convert to a distance object this_dist <- as.dist( this_dist ) attr( this_dist, "method" ) <- attr( main.dist.obj, "method" ) } } else { ## if main.dist.obj is NULL, then d is a data matrix, and either: ## 1) clusterAlg is 'km' ## 2) pFeatures < 1 or weightsFeatures have been specified, or ## 3) both ## so we can't use a main distance object and for every iteration, we will have to re-calculate either ## 1) the distance matrix (because we're also sampling the features as well), or ## 2) the submat (if using km) if ( clusterAlg != "km" ) { if ( ! distance %in% acceptable.distance & ( class(try(get(distance),silent=T))!="function") ) stop("unsupported distance.") if( ( class(try(get(distance),silent=T))=="function") ){ this_dist <- get(distance)( t( sample_x$submat ) ) }else{ if( distance == "pearson" | distance == "spearman"){ this_dist <- as.dist( 1-cor(sample_x$submat,use=corUse,method=distance) ) }else{ this_dist <- dist( t( sample_x$submat ), method= distance ) } } attr( this_dist, "method" ) <- distance } else { ## if we're not sampling the features, then grab the colslice if ( is.null( pFeature ) || ( ( pFeature == 1 ) && is.null( weightsFeature ) ) ) { this_dist <- d[, sample_x$subcols ] } else { if ( is.na( sample_x$submat ) ) { stop( "error submat is NA" ) } this_dist <- sample_x$submat } } } ## cluster samples for HC. this_cluster=NA if(clusterAlg=="hc"){ this_cluster = hclust( this_dist, method=innerLinkage) } ##mCount is possible number of times that two sample occur in same random sample, independent of k ##mCount stores number of times a sample pair was sampled together. mCount <- connectivityMatrix( rep( 1,length(sample_x[[3]])), mCount, sample_x[[3]] ) ##use samples for each k for (k in 2:maxK){ if(verbose){ message(paste(" k =",k)) } if (i==1){ ml[[k]] = mConsist #initialize } this_assignment=NA if(clusterAlg=="hc"){ ##prune to k for hc this_assignment = cutree(this_cluster,k) }else if(clusterAlg=="kmdist"){ this_assignment = kmeans(this_dist, k, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong") )$cluster }else if(clusterAlg=="km"){ ##this_dist should now be a matrix corresponding to the result from sampleCols this_assignment <- kmeans( t( this_dist ), k, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong") )$cluster }else if ( clusterAlg == "pam" ) { this_assignment <- pam( x=this_dist, k, diss=TRUE, metric=distance, cluster.only=TRUE ) } else{ ##optional cluterArg Hook. this_assignment <- get(clusterAlg)(this_dist, k) } ##add to tally ml[[k]] <- connectivityMatrix( this_assignment, ml[[k]], sample_x[[3]] ) } } ##consensus fraction res = vector(mode="list",maxK) for (k in 2:maxK){ ##fill in other half of matrix for tally and count. tmp = triangle(ml[[k]],mode=3) tmpCount = triangle(mCount,mode=3) res[[k]] = tmp / tmpCount res[[k]][which(tmpCount==0)] = 0 } message("end fraction") return(res) } connectivityMatrix <- function( clusterAssignments, m, sampleKey){ ##input: named vector of cluster assignments, matrix to add connectivities ##output: connectivity matrix names( clusterAssignments ) <- sampleKey cls <- lapply( unique( clusterAssignments ), function(i) as.numeric( names( clusterAssignments[ clusterAssignments %in% i ] ) ) ) #list samples by clusterId for ( i in 1:length( cls ) ) { nelts <- 1:ncol( m ) cl <- as.numeric( nelts %in% cls[[i]] ) ## produces a binary vector updt <- outer( cl, cl ) #product of arrays with * function; with above indicator (1/0) statement updates all cells to indicate the sample pair was observed int the same cluster; m <- m + updt } return(m) } sampleCols <- function( d, pSamp=NULL, pRow=NULL, weightsItem=NULL, weightsFeature=NULL ){ ## returns a list with the sample columns, as well as the sub-matrix & sample features (if necessary) ## if no sampling over the features is performed, the submatrix & sample features are returned as NAs ## to reduce memory overhead space <- ifelse( inherits( d, "dist" ), ncol( as.matrix(d) ), ncol(d) ) sampleN <- floor(space*pSamp) sampCols <- sort( sample(space, sampleN, replace = FALSE, prob = weightsItem) ) this_sample <- sampRows <- NA if ( inherits( d, "matrix" ) ) { if ( (! is.null( pRow ) ) && ( (pRow < 1 ) || (! is.null( weightsFeature ) ) ) ) { ## only sample the rows and generate a sub-matrix if we're sampling over the row/gene/features space = nrow(d) sampleN = floor(space*pRow) sampRows = sort( sample(space, sampleN, replace = FALSE, prob = weightsFeature) ) this_sample <- d[sampRows,sampCols] dimnames(this_sample) <- NULL } else { ## do nothing } } return( list( submat=this_sample, subrows=sampRows, subcols=sampCols ) ) } CDF=function(ml,breaks=100){ #plot CDF distribution plot(c(0),xlim=c(0,1),ylim=c(0,1),col="white",bg="white",xlab="consensus index",ylab="CDF",main="consensus CDF", las=2) k=length(ml) this_colors = rainbow(k-1) areaK = c() for (i in 2:length(ml)){ v=triangle(ml[[i]],mode=1) #empirical CDF distribution. default number of breaks is 100 h = hist(v, plot=FALSE, breaks=seq(0,1,by=1/breaks)) h$counts = cumsum(h$counts)/sum(h$counts) #calculate area under CDF curve, by histogram method. thisArea=0 for (bi in 1:(length(h$breaks)-1)){ thisArea = thisArea + h$counts[bi]*(h$breaks[bi+1]-h$breaks[bi]) #increment by height by width bi = bi + 1 } areaK = c(areaK,thisArea) lines(h$mids,h$counts,col=this_colors[i-1],lwd=2,type='l') } legend(0.8,0.5,legend=paste(rep("",k-1),seq(2,k,by=1),sep=""),fill=this_colors) #plot area under CDF change. deltaK=areaK[1] #initial auc at k=2 for(i in 2:(length(areaK))){ #proportional increase relative to prior K. deltaK = c(deltaK,( areaK[i] - areaK[i-1])/areaK[i-1]) } plot(1+(1:length(deltaK)),y=deltaK,xlab="k",ylab="relative change in area under CDF curve",main="Delta area",type="b") } myPal = function(n=10){ #returns n colors seq = rev(seq(0,255,by=255/(n))) palRGB = cbind(seq,seq,255) rgb(palRGB,maxColorValue=255) } setClusterColors = function(past_ct,ct,colorU,colorList){ #description: sets common color of clusters between different K newColors = c() if(length(colorList)==0){ #k==2 newColors = colorU[ct] colori=2 }else{ newColors = rep(NULL,length(ct)) colori = colorList[[2]] mo=table(past_ct,ct) m=mo/apply(mo,1,sum) for(tci in 1:ncol(m)){ # for each cluster maxC = max(m[,tci]) pci = which(m[,tci] == maxC) if( sum(m[,tci]==maxC)==1 & max(m[pci,])==maxC & sum(m[pci,]==maxC)==1 ) { #if new column maximum is unique, same cell is row maximum and is also unique ##Note: the greatest of the prior clusters' members are the greatest in a current cluster's members. newColors[which(ct==tci)] = unique(colorList[[1]][which(past_ct==pci)]) # one value }else{ #add new color. colori=colori+1 newColors[which(ct==tci)] = colorU[colori] } } } return(list(newColors,colori,unique(newColors) )) } clusterTrackingPlot = function(m){ #description: plots cluster tracking plot #input: m - matrix where rows are k, columns are samples, and values are cluster assignments. plot(NULL,xlim=c(-0.1,1),ylim=c(0,1),axes=FALSE,xlab="samples",ylab="k",main="tracking plot") for(i in 1:nrow(m)){ rect( xleft=seq(0,1-1/ncol(m),by=1/ncol(m)), ybottom=rep(1-i/nrow(m),ncol(m)) , xright=seq(1/ncol(m),1,by=1/ncol(m)), ytop=rep(1-(i-1)/nrow(m),ncol(m)), col=m[i,],border=NA) } #hatch lines to indicate samples xl = seq(0,1-1/ncol(m),by=1/ncol(m)) segments( xl, rep(-0.1,ncol(m)) , xl, rep(0,ncol(m)), col="black") #** alt white and black color? ypos = seq(1,0,by=-1/nrow(m))-1/(2*nrow(m)) text(x=-0.1,y=ypos[-length(ypos)],labels=seq(2,nrow(m)+1,by=1)) } triangle = function(m,mode=1){ #mode=1 for CDF, vector of lower triangle. #mode==3 for full matrix. #mode==2 for calcICL; nonredundant half matrix coun #mode!=1 for summary n=dim(m)[1] nm = matrix(0,ncol=n,nrow=n) fm = m nm[upper.tri(nm)] = m[upper.tri(m)] #only upper half fm = t(nm)+nm diag(fm) = diag(m) nm=fm nm[upper.tri(nm)] = NA diag(nm) = NA vm = m[lower.tri(nm)] if(mode==1){ return(vm) #vector }else if(mode==3){ return(fm) #return full matrix }else if(mode == 2){ return(nm) #returns lower triangle and no diagonal. no double counts. } } rankedBarPlot=function(d,myc,cc,title){ colors = rbind() #each row is a barplot series byRank = cbind() spaceh = 0.1 #space between bars for(i in 1:ncol(d)){ byRank = cbind(byRank,sort(d[,i],na.last=F)) colors = rbind(colors,order(d[,i],na.last=F)) } maxH = max(c(1.5,apply(byRank,2,sum)),na.rm=T) #maximum height of graph #barplot largest to smallest so that smallest is in front. barp = barplot( apply(byRank,2,sum) , col=myc[colors[,1]] ,space=spaceh,ylim=c(0,maxH),main=paste("item-consensus", title),border=NA,las=1 ) for(i in 2:nrow(byRank)){ barplot( apply(matrix(byRank[i:nrow(byRank),],ncol=ncol(byRank)) ,2,sum), space=spaceh,col=myc[colors[,i]],ylim=c(0,maxH), add=T,border=NA,las=1 ) } xr=seq(spaceh,ncol(d)+ncol(d)*spaceh,(ncol(d)+ncol(d)*spaceh)/ncol(d) ) #class labels as asterisks text("*",x=xr+0.5,y=maxH,col=myc[cc],cex=1.4) #rect(xr,1.4,xr+1,1.5,col=myc[cc] ) } ConsensusClusterPlus/build/0000755000175400017540000000000013556150765017102 5ustar00biocbuildbiocbuildConsensusClusterPlus/build/vignette.rds0000644000175400017540000000032613556150765021442 0ustar00biocbuildbiocbuildb```b`fcd`b2 1# 'p+N+.-v)-.I- RzAyhdS)-/L!Ђ44ub-Z Xt%Z]?4-ީE0=(jؠjX2sRad9.nP&c0Gq?gQ~8jݣ9JI,IK+lSConsensusClusterPlus/inst/0000755000175400017540000000000013556150765016760 5ustar00biocbuildbiocbuildConsensusClusterPlus/inst/CITATION0000644000175400017540000000104413556116712020106 0ustar00biocbuildbiocbuildcitEntry(entry="Article", author = "Wilkerson, Matthew D. and Hayes, D. Neil", title = "ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking", volume = "26", number = "12", pages = "1572-1573", year = "2010", url = "http://bioinformatics.oxfordjournals.org/content/26/12/1572.abstract", journal = "Bioinformatics", textVersion="Wilkerson, M.D., Hayes, D.N. (2010). ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking. Bioinformatics, 2010 Jun 15;26(12):1572-3." ) ConsensusClusterPlus/inst/NEWS0000644000175400017540000000226713556116712017460 0ustar00biocbuildbiocbuildVersion 1.35.0 Added CITATION file, updated references, and man pages. Version 1.11.1. For large datasets, the input data (d) was modified to also accept a distance matrix which reduces computation time, and plotBMP was added a plot type so that large consensus matrices can be plotted. Internal data structures were modified to increase speed. Distance metric options expanded ("maximum", "manhattan", "canberra", "binary","minkowski" from dist) and custom distance function option added. Partitioning Around Mediods clustering (from cluster package) was added as a clustering algorithm. Kmeans invocation ("km") was changed to run on a data matrix input by default. "kmdist" performs kmeans clustering on a distance matrix calcualted from the resampled data. In versions prior to 1.11.1, the "km" option refers to kmdist. Users wishing to use this kmeans invocation in versions 1.11.1 or later should use option kmdist. Version 1.5.1. 1.0.1 changes were re-incorporated into Bioc 2.9, 2.8. Version 1.0.1 was part of Bioc 2.6, but not part of Bioc 2.7. Version 1.0.1. Item-consensus calculation was corrected. Consensus matric heat maps are now guaranteed to correspond to the scale. ConsensusClusterPlus/inst/doc/0000755000175400017540000000000013556150765017525 5ustar00biocbuildbiocbuildConsensusClusterPlus/inst/doc/ConsensusClusterPlus.R0000644000175400017540000001256013556150765024042 0ustar00biocbuildbiocbuild### R code from vignette source 'ConsensusClusterPlus.Rnw' ################################################### ### code chunk number 1: ConsensusClusterPlus.Rnw:37-41 ################################################### library(ALL) data(ALL) d=exprs(ALL) d[1:5,1:5] ################################################### ### code chunk number 2: ConsensusClusterPlus.Rnw:48-50 ################################################### mads=apply(d,1,mad) d=d[rev(order(mads))[1:5000],] ################################################### ### code chunk number 3: ConsensusClusterPlus.Rnw:55-56 ################################################### d = sweep(d,1, apply(d,1,median,na.rm=T)) ################################################### ### code chunk number 4: ConsensusClusterPlus.Rnw:70-74 ################################################### library(ConsensusClusterPlus) title=tempdir() results = ConsensusClusterPlus(d,maxK=6,reps=50,pItem=0.8,pFeature=1, title=title,clusterAlg="hc",distance="pearson",seed=1262118388.71279,plot="png") ################################################### ### code chunk number 5: ConsensusClusterPlus.Rnw:77-79 ################################################### cat(sprintf("\\graphicspath{{%s}}", paste(gsub("[\\]","/",title),"/",sep=""))) cat("\n") ################################################### ### code chunk number 6: ConsensusClusterPlus.Rnw:84-96 ################################################### #consensusMatrix - the consensus matrix. #For .example, the top five rows and columns of results for k=2: results[[2]][["consensusMatrix"]][1:5,1:5] #consensusTree - hclust object results[[2]][["consensusTree"]] #consensusClass - the sample classifications results[[2]][["consensusClass"]][1:5] #ml - consensus matrix result #clrs - colors for cluster ################################################### ### code chunk number 7: ConsensusClusterPlus.Rnw:104-105 ################################################### icl = calcICL(results,title=title,plot="png") ################################################### ### code chunk number 8: ConsensusClusterPlus.Rnw:109-110 ################################################### icl[["clusterConsensus"]] ################################################### ### code chunk number 9: ConsensusClusterPlus.Rnw:113-114 ################################################### icl[["itemConsensus"]][1:5,] ################################################### ### code chunk number 10: ConsensusClusterPlus.Rnw:125-126 ################################################### cat("\\includegraphics[width=60mm]{consensus001.png}",sep="") ################################################### ### code chunk number 11: ConsensusClusterPlus.Rnw:135-137 ################################################### cat("\\includegraphics[width=60mm]{consensus002.png}",sep="") cat("\\includegraphics[width=60mm]{consensus003.png}",sep="") ################################################### ### code chunk number 12: ConsensusClusterPlus.Rnw:140-142 ################################################### cat("\\includegraphics[width=60mm]{consensus004.png}",sep="") cat("\\includegraphics[width=60mm]{consensus005.png}",sep="") ################################################### ### code chunk number 13: ConsensusClusterPlus.Rnw:148-149 ################################################### cat("\\includegraphics[width=60mm]{consensus007.png}",sep="") ################################################### ### code chunk number 14: ConsensusClusterPlus.Rnw:156-157 ################################################### cat("\\includegraphics[width=60mm]{consensus008.png}",sep="") ################################################### ### code chunk number 15: ConsensusClusterPlus.Rnw:167-168 ################################################### cat("\\includegraphics[width=60mm]{consensus009.png}",sep="") ################################################### ### code chunk number 16: ConsensusClusterPlus.Rnw:178-179 ################################################### cat("\\includegraphics[width=60mm]{icl003.png}",sep="") ################################################### ### code chunk number 17: ConsensusClusterPlus.Rnw:188-189 ################################################### cat("\\includegraphics[width=60mm]{icl001.png}",sep="") ################################################### ### code chunk number 18: ConsensusClusterPlus.Rnw:203-206 ################################################### #example of providing a custom distance matrix as input: #dt = as.dist(1-cor(d,method="pearson")) #ConsensusClusterPlus(dt,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example2",distance="pearson",clusterAlg="hc") ################################################### ### code chunk number 19: ConsensusClusterPlus.Rnw:209-212 ################################################### #example of providing a custom distance function: #myDistFunc = function(x){ dist(x,method="manhattan")} #ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="myDistFunc",clusterAlg="pam") ################################################### ### code chunk number 20: ConsensusClusterPlus.Rnw:216-223 ################################################### #library(cluster) #dianaHook = function(this_dist,k){ #tmp = diana(this_dist,diss=TRUE) #assignment = cutree(tmp,k) #return(assignment) #} #ConsensusClusterPlus(d,clusterAlg="dianaHook",distance="pearson",...) ConsensusClusterPlus/inst/doc/ConsensusClusterPlus.Rnw0000644000175400017540000004304513556116712024403 0ustar00biocbuildbiocbuild% \VignetteIndexEntry{ConsensusClusterPlus Tutorial} % \VignettePackage{ConsensusClusterPlus} \documentclass{article} \usepackage{graphicx} \begin{document} \title{ConsensusClusterPlus (Tutorial)} \author{ Matthew D. Wilkerson} \maketitle \SweaveOpts{keep.source=TRUE} \section{Summary} \texttt{ConsensusClusterPlus} is a tool for unsupervised class discovery. This document provides a tutorial of how to use \texttt{ConsensusClusterPlus}. \section{Brief description of \textit{Consensus Clustering} } \textit{Consensus Clustering} \cite{monti} is a method that provides quantitative evidence for determining the number and membership of possible clusters within a dataset, such as microarray gene expression. This method has gained popularity in cancer genomics, where new molecular subclasses of disease have been discovered \cite{hayes,verhaak}. The \textit{Consensus Clustering} method involves subsampling from a set of items, such as microarrays, and determines clusterings of specified cluster counts (\textit{k}). Then, pairwise \textit{consensus} values, the proportion that two items occupied the same cluster out of the number of times they occurred in the same subsample, are calculated and stored in a symmetrical \textit{consensus matrix} for each \textit{k}. The \textit{consensus matrix} is summarized in several graphical displays that enable a user to decide upon a reasonable cluster number and membership. A web-based version of \textit{Consensus Clustering} is publicly available \cite{gp}. For a formal description, see \cite{monti}. \\ \\ \texttt{ConsensusClusterPlus}\cite{wilkerson} implements the \textit{Consensus Clustering} method in \textit{R} and extends it with new features and graphical outputs that can aid users in class discovery. \section{Tutorial} There are three main steps to use \texttt{ConsensusClusterPlus}: preparing input data, running the program, and generating cluster-consensus and item-consensus. \subsection{Preparing input data} The first step is to gather some data for cluster analysis. These data could be the result of an experiment such as a mRNA expression microarray or immunohistochemical staining intensities. The input data format is a matrix where columns are samples (items), rows are features and cells are numerical values. For this tutorial, we use the ALL gene expression data from the ALL library. You can see the matrix d is already in the proper format. The column and row names, which correspond to the sample and gene names, will be maintained in the output. <<>>= library(ALL) data(ALL) d=exprs(ALL) d[1:5,1:5] @ For the purpose of selecting the most informative genes for class detection, we reduce the dataset to the top 5,000 most variable genes, measured by median absolute deviation. The choice of 5,000 genes and MAD can be substituted with other statistical variability filters. Users can decide what type of filtering to use or to skip filtering. Another choice would be to supply weights for sampling genes see weightsFeatures in Additional Options. <<>>= mads=apply(d,1,mad) d=d[rev(order(mads))[1:5000],] @ If one wants to transform or normalize their data, they can easily do so using other Bioconductor methods or a simple statement. We chose to use the default settings of the agglomerative heirarchical clustering algorithm using Pearson correlation distance, so it is appropriate to gene median center d using this simple statement: <<>>= d = sweep(d,1, apply(d,1,median,na.rm=T)) @ d is now ready for \texttt{ConsensusClusterPlus} analysis. \subsection{Running \texttt{ConsensusClusterPlus}} For this tutorial, we selected 80\% item resampling (pItem), 80\% gene resampling (pFeature), a maximum evalulated k of 6 so that cluster counts of 2,3,4,5,6 are evaluated (maxK), 50 resamplings (reps), agglomerative heirarchical clustering algorithm (clusterAlg) upon 1- Pearson correlation distances (distance), gave our output a title (title), and opted to have graphical results written to png files. We also used a specific random seed so that this example is repeatable (seed). \\ \\ ** Note: In practice, a much higher reps is recommended such as 1,000 and a higher cluster count such as 20. <>= library(ConsensusClusterPlus) title=tempdir() results = ConsensusClusterPlus(d,maxK=6,reps=50,pItem=0.8,pFeature=1, title=title,clusterAlg="hc",distance="pearson",seed=1262118388.71279,plot="png") @ <>= cat(sprintf("\\graphicspath{{%s}}", paste(gsub("[\\]","/",title),"/",sep=""))) cat("\n") @ The output of \texttt{ConsensusClusterPlus} is a list, in which the element of the list corresponds to results from the \textit{kth} cluster, for instance, results[[2]] is the results result of \textit{k}=2. The seed option specifies a random number seed and is used here for reproducibility of this tutorial. These list elements have the following elements: <>= #consensusMatrix - the consensus matrix. #For .example, the top five rows and columns of results for k=2: results[[2]][["consensusMatrix"]][1:5,1:5] #consensusTree - hclust object results[[2]][["consensusTree"]] #consensusClass - the sample classifications results[[2]][["consensusClass"]][1:5] #ml - consensus matrix result #clrs - colors for cluster @ See additional options section for further description of clustering algorithms and distance metrics. \subsection{Generating cluster and item consensus} After executing \texttt{ConsensusClusterPlus}, one can optionally calculate cluster-consensus and item-consensus results by: <<>>= icl = calcICL(results,title=title,plot="png") @ calcICL returns a list of two elements: <<>>= icl[["clusterConsensus"]] @ <<>>= icl[["itemConsensus"]][1:5,] @ \section{Graphic Output Description} The output of \texttt{ConsensusClusterPlus} consists of graphics, which are written to the screen, 'pdf' file, or 'png' files depending on the plot option; and numerical data which can be optionally written to a CSV file depending on the writeTable option. For large datasets, graphical displays can be quite large and plotting the consensus dendrogram above the consensus matrices may not be possible. If your dataset is large, the plot option 'pngBMP' which does not produce the consensus matrix dendrogram and uses the bitmap function rather png. Bitmap is often available natively on linux systems but can potentially be installed on other systems. \subsection{Consensus Matrices} The first graphic shows the consensus color legend. \\ <>= cat("\\includegraphics[width=60mm]{consensus001.png}",sep="") @ \\ The remaining graphics are heatmaps of the consensus matrices for \textit{k} = 2, 3, 4, 5 \cite{monti}. The consensus matrices have items as both rows and columns, which are microarrays in this example, and where consensus values range from 0 (never clustered together) to 1 (always clustered together) marked by white to dark blue. The consensus matrices are ordered by the consensus clustering which is depicted as a dendrogram atop the heatmap. To aid analysis, the cluster memberships are marked by colored rectangles between the dendrogram and heatmap according to a legend within the graphic. This enables a user to compare a clusters' member count in the context of their consensus. \\ <>= cat("\\includegraphics[width=60mm]{consensus002.png}",sep="") cat("\\includegraphics[width=60mm]{consensus003.png}",sep="") @ \\ <>= cat("\\includegraphics[width=60mm]{consensus004.png}",sep="") cat("\\includegraphics[width=60mm]{consensus005.png}",sep="") @ \\ \subsection{Consensus Cumulative Distribution Function (CDF) Plot} This graphic shows the cumulative distribution functions \cite{monti} of the consensus matrix for each \textit{k} (indicated by colors), estimated by a histogram of 100 bins. This figure allows a user to determine at what number of clusters, \textit{k}, the CDF reaches an approximate maximum, thus consensus and cluster confidence is at a maximum at this \textit{k}. See \cite{monti} for further details intepretation. \\ <>= cat("\\includegraphics[width=60mm]{consensus007.png}",sep="") @ \\ \subsection{Delta Area Plot} This graphic shows the relative change in area under the CDF curve \cite{monti} comparing \textit{k} and \textit{k} $-$ 1. For \textit{k} = 2, there is no \textit{k} -1, so the total area under the curve rather than the relative increase is plotted. This plot allows a user to determine the relative increase in consensus and determine \textit{k} at which there is no appreciable increase. See \cite{monti} for intepretation. \\ <>= cat("\\includegraphics[width=60mm]{consensus008.png}",sep="") @ \\ \subsection{Tracking Plot} This graphic shows the cluster assignment of items (columns) for each \textit{k} (rows) by color. The colors correspond to the colors of the consensus matrix class asssignments. Hatch marks below the plot indicate items/samples. This plot provides a view of item cluster membership across different \textit{k} and enables a user to track the history of clusters relative to earlier clusters. Items that change clusters often (changing colors within a column) are indicative of unstable membership. Clusters with an abundance of unstable members suggest an unstable cluster. \\ <>= cat("\\includegraphics[width=60mm]{consensus009.png}",sep="") @ \\ \subsection{Cluster-Consensus Plot} This graphic shows the \textit{cluster-consensus} value of clusters at each \textit{k}. This is the mean of all pairwise consensus values between a cluster's members. Cluster is indicated by color following the same color scheme as the cluster matrices and tracking plots. The bars are grouped by \textit{k} which is marked on the horizontal axis. High values indicate a cluster has high stability and low values indicate a cluster has low stability. This plot enables a user to view the mean cluster-consensus among clusters at a given \textit{k} and compare values of clusters across different \textit{k} via the color scheme. \\ <>= cat("\\includegraphics[width=60mm]{icl003.png}",sep="") @ \\ \subsection{Item-Consensus Plot} \textit{Item-consensus} values are the mean consensus of an item with all items in a particular cluster. An item has \textit{k} item-consensus values corresponding to each cluster at a particular \textit{k}. These values are depicted in barplots for each \textit{k}. Samples are stacked bars. \textit{Item-consensus} values are indicated by the heights of the colored portion of the bars, whose color corresponds to the common color scheme. Bars' rectangles are ordered by increasing value from bottom to top. The asterisks at the top indicate the consensus cluster for each item. \\ <>= cat("\\includegraphics[width=60mm]{icl001.png}",sep="") @ \\ This plot provides a view of item-consensus across all other clusters at a given \textit{k}. This enables a user to see if a sample is a very "pure" member of a cluster or if it shares high consensus to multiple clusters (large rectangles in a column of multiple colors), suggesting that it is an unstable or "unpure" member. These values could be used to select "core" samples similar to \cite{verhaak} that are highly representative of a cluster. Further, this plot can aid cluster number decisions. For instance, if a cluster consists mainly of members with very "unpure" items, then this evidence could be used to support a maximum cluster number at 1 below this \textit{k} or this evidence could support that this cluster is an outlier cluster. Decisions such as these are best to be made by the user in conjunction with other evidence such as consensus matrices, tracking plots, etc. \\ \\ \subsection{Additional details on options for \texttt{ConsensusClusterPlus} function} \begin{itemize} \item \textbf{d} This option specifies the data to be used in ConsensusClusterPlus. This is typically a matrix of numerical expression values, of which an example is provided in the Running ConsensusClusterPlus section of this document. When provided with a data matrix as d, ConsensusClusterPlus recalculates a distance matrix during each iteration. This recalculation is required if feature resampling is specified (pFeature less than 1). However with very large datasets (1,000's of items) and no feature resampling, this process can be time consuming and unnecessary. Alternatively, a pre-computed distance matrix can be provided as d, resulting in faster computation. An example of using a dist object as input follow below. <<>>= #example of providing a custom distance matrix as input: #dt = as.dist(1-cor(d,method="pearson")) #ConsensusClusterPlus(dt,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example2",distance="pearson",clusterAlg="hc") @ \item \textbf{distance}This option describes the distance metric to be used. A character value of one of the following metrics is accepted: pearson for (1 - Pearson correlation), spearman for (1 - Spearman correlation), euclidean, binary, maximum, canberra, minkowski. Alternatively a custom distance function cab be supplied for this argument, which accepts a numerical matrix (items as rows and features as columns) as input and returns a dist object. <<>>= #example of providing a custom distance function: #myDistFunc = function(x){ dist(x,method="manhattan")} #ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="myDistFunc",clusterAlg="pam") @ \item \textbf{clusterAlg} This option specifies the type of clustering algorithm to use: "hc" for heirarchical clustering, "pam" for partioning around medoids, "km" for kmeans. Alternatively, one can supply their own clustering function, which should accept a distance matrix and a cluster number as its arguments and returns vector of cluster assignments having the same order as the distance matrix columns. For example, this simple function executes divisive clustering using the diana function from the cluster package and returns the expected object. The last line shows an example of how this could be used. <<>>= #library(cluster) #dianaHook = function(this_dist,k){ #tmp = diana(this_dist,diss=TRUE) #assignment = cutree(tmp,k) #return(assignment) #} #ConsensusClusterPlus(d,clusterAlg="dianaHook",distance="pearson",...) @ \item \textbf{update on kmeans options} "km" option performs kmeans clustering directly on a data matrix, with items and features resampled. "kmdist" performs kmeans clustering on a distance matrix calcualted from the resampled data. In versions prior to 1.11.1, the "km" option refers to kmdist. Users wishing to use this kmeans invocation in versions 1.11.1 or later should use option kmdist. \item \textbf{innerLinkage} This option specifies the linkage method to use in iterative agglomerative heirarchical clustering. Not applicable to other cluster algorithms. \item \textbf{finalLinkage} This option specifies the linkage method to use in the final agglomerative heirarchical clustering. \item \textbf{distance} This option specifies the distance metric to use: "pearson" for 1-Pearson correlation coefficient, "spearman" for 1-Spearman correlation coefficient, "euclidean" for Euclidean distance. \item \textbf{tmyPal} character vector of ordered colors to use for consensus matrix. If not specified, a series of white to blue colors is used. \item \textbf{writeTable} boolean. If TRUE, write consensus matrices, ICL, and log to file. \item \textbf{weightsFeature} numerical vector of weights for sampling features. See help for further details. \item \textbf{weightsItem} numerical vector of weights for sampling items. See help for further details. \item \textbf{verbose} boolean. If TRUE, print messages to the screen to indicate progress. This is useful for large datasets. \end{itemize} \begin{thebibliography}{} \bibitem{monti}Monti, S., Tamayo, P., Mesirov, J., Golub, T. (2003) Consensus Clustering: A Resampling-Based Method for Class Discovery and Visualization of Gene Expression Microarray Data. Machine Learning, 52, 91$-$118. \bibitem{wilkerson}Wilkerson, M.D., Hayes, D.N. (2010). ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking. Bioinformatics, 2010 Jun 15;26(12):1572$-$3. \bibitem{hayes}Hayes, D.N, Monti, S., Parmigiani, G. et al. (2006) Gene Expression Profiling Reveals Reproducible Human Lung Adenocarcinoma Subtypes in Multiple Independent Patient Cohorts. Journal of Clinical Oncology, 24 (31) 5079$-$5090. \bibitem{verhaak}Verhaak, R., Hoadley, K., et al. (2010) Integrated genomic analysis identifies clinically relevant subtypes of glioblastoma characterized by abnormalities in PDGFRA, IDH1, EGFR and NF1. Cancer Cell. 17,1-13. \bibitem{gp}\texttt{http://www.broadinstitute.org/cancer/software/genepattern/} \end{thebibliography} \subsection{Changes} \begin{itemize} \item Version 1.0.1. Item-consensus calculation was corrected. Consensus matric heat maps are now guaranteed to correspond to the scale. \item Version 1.5.1. Version 1.0.1 changes were re-incorporated into Bioc 2.9, 2.8. Version 1.0.1 was part of Bioc 2.6, but not part of Bioc 2.7. \item Version 1.11.1. For large datasets, the input data (d) was modified to also accept a distance matrix which reduces computation time, and plotBMP was added a plot type so that large consensus matrices can be plotted. Internal data structures were modified to increase speed. Distance metric options expanded ("maximum", "manhattan", "canberra", "binary","minkowski" from dist) and custom distance function option added. Partitioning Around Mediods clustering (from cluster package) was added as a clustering algorithm. Kmeans invocation was changed to run on the data matrix by default. Kmeans invocation on a distance matrix is now possible by kmdist. \end{itemize} \end{document} ConsensusClusterPlus/inst/doc/ConsensusClusterPlus.pdf0000644000175400017540000107363113556150765024421 0ustar00biocbuildbiocbuild%PDF-1.5 % 3 0 obj << /Length 1984 /Filter /FlateDecode >> stream xɒDѮ@TQUz4+e,+[I[}Woޛ|T.֏ LZ((T廕ZРٻÎwe?<[Jᴅ`C?yBF9 "16lp7~0Lq/GJt1̀dlZjHIMi/]U5'aɽcZFPDktZ$VUZ%J=ğ?߳@(.u.@ʪ<Gi a~sdU#l*R]:JضZz8Ղ,eGR@ t?>[#DM稤UeQE͈HLcxHd= @@D5",ϽEmwGn'"ֳfn |(H_ץM-؍`KgS<iq&-Vm#\ˇDGf,&c$Ӳ2q[e#'|brbdh7Y%,OtEj2~!^F ['֢ lY 4&/O~KeHkج?1BJ`jjЙ̱ZRva&+,sC\3ͅv'nBv1%{E }Gu&43.ǴWrCH(p Ҽ汽?z3IaU 6>bH ƨEoM!:1,ڝQ>=it}1戇h%e KcޠP3 n[8Hy xOGh!*M?&1'(وPW[o7тW؞{c9c ƀ)ؘ8?j4O L L3K6NF1G6մFSOo^.zr^r)UOgY*!{v||x ѣR`r);c "Ű+ endstream endobj 15 0 obj << /Length 2397 /Filter /FlateDecode >> stream xڝY[۸~ϯK%Q)0mmm(vBcam0L}ϕle#P?ܿ}jq),w8I6-67&eYxc.?ќ*?W$ϖT?]n8>Z}wE)FX&)bFD@ߢ8E`9DCNn} 9ˤ8ָ wPmpᵐz! Yݺ 5Vkc'I1LY.ϸ;"H79D v+S,# hrOowtNeMmQ<:ˁT(A\=N`(։>ąl>k?֩,*&'#g葁AA9dpJM84+A7EXdOFFHꟙat=w /ẫt6(b@g [ )28 dyuU6R>j\0a*JlfNWEJ*RHV. g D`2|^%]f $ͻo5.LwHg2 Ee_8v`rKW*XMV1ѭz!}ͅ H@SU@0OB& Gm&h~qìG4$+`ȹeΑ:Q[. [0Qc_ z]ԨcUɅ*4*4fъB 35Īx6_Ib/˖5WnZF$ry+ _~w ?3Z)?wA;F4{+{et,'Uv6 ɼH~cTf~.$7A/Zrnb_YSQr턶%IFIR.2g!IFd2EBABf[_^lL~f!d.a.(X/КiS/Y)P,sFMDJh!vBĐ+IYBEH)J:]:Ty\;N#Ϛ<E,̹@5o" +%Kpp QBn)1ρ^aB'cM$$YU'KjX5}IUb99(.ڇ 8C^s{N a }D#?=p ;c݊a:0@(I` tӆ˘A\ʁV䂤ŵFI$4Zo5j>|{ާ<Hq':\С ˰:Xꀽ)U+5]QpWQè~N[I`C< q rj&dy9'Esj`JUK1`Ei2u)iaJcΛ&|/whGGM _Y4khW]%a]\"2e2YzC!q݄HB3$C }jVߔܕepxE#IimZ8x#DH#㉯S`ҝXi<)l|6D)s }և8cxdΡf+~ vu DvhNWZRK~?"C'(pא~ ymIlYlH^ endstream endobj 20 0 obj << /Length 1807 /Filter /FlateDecode >> stream xYYoF~ϯ.H>8~%EI 89R$v@;;7'\'M#?LG c`28zŶ\(>x*8u&|96H)OA f8L[T+^++b'`ąux^tU Zb_RDy-z9qji@l60*B\̼{@0ǒe%-&a3m|.g<@U1rZ)ZkZC IH}|s"€Dd5L'3~+ #Řϱ8Ɋ^H)-^󎻥 \bjG=3Qs?6%S<4۽rֶ&ahh޶螷</Tp$e[~l79K ji쬡^.o\H*uӧ{#}q-V ySWh8PU\x'/!%c:Ƭ'gxqR2` c}m^ťІCY :}3Lj)G;quD%ֆ=ֻ\285DFxcuϚSW;}g:@9dLyj=mK..Gl=&! 5(-(ΡО(dڢD1aeN(>~k"b=Y+Dޒ|9>^R\-%&knNZPMw n|Mε85V=t(A1tV9z+"X)m)Env2ȅ G^vux{ 4{{R.o+PٵD so#ο~뉛eQ5Y8]g羿hj)c> stream xڽXKoFWL&S@6A-P!Y-( ɕaIo^8zQˉYi&Bbbˤ2kH4BSvПCkVpC379ۿ |f޾ϭ.ka@o_MԇE:+f zѿ tÌwj80ۚɁ/Ѡݛ,oݚ&V-jPӖEm/Xȟ2i*)Ce_>fȏ+-8ni% 6ց27s,_]ߣ秸2+pK.I!\uZ &W0n>B\C\=`G,SC|]7f1ۖp8̘8Ⱦɤ0#np?G%3g۲3 8M@3b[38MBsdc2_%Q2ڑ \cˈM8."u]IO|YƱM |DZ%qr6p ~OoDgymytpwD2ִf'ɖ}+TU~(KH*0 [;-V%t:t2Ц۷WKأ߷꛳p_@m$֙Vrv(o5&,%e VaE7TTxZj=X q^%U{I "ceVڬlqcw4A0Bᆏh/$m37jZ3a Tiaz}(k W]v CW?Ϯm endstream endobj 31 0 obj << /Length 1405 /Filter /FlateDecode >> stream xڅWKHWp HyݑR]ɷ$ Cgj$TU_=yzzɝuNȘ Ks'M 6/ny{=£=#4I/n{|}̈́"G'<|V "(W,~Q:řFRXg>l=?N] QmQC 43މ!s}儎E:Q*L%( =+T@hQۢ ?8wIQJP|- Q.[d5%9 1F\𥣗Eݮ%O?$`h;@@] [8p!Ȇk Н2xKK"~@ϟ9Xj L &"E"d҂K1m3xEbhDf<ҚcE\2N525\)TN+O OV& T3\I(,<WfoRtY3u;HRxDnIM6Hq)E˶%j4oE*LP2^l016CPgAdغ8>2~.ϩh{V:hW/xV4q2usЉ<3 s T\gŇh"tԆmtˣސ(BBq֙4:^5-S|qe%2b$|r^87pt֔[ӠI.4-NI!| PQnlcZVȖ+ *eD^2_ PJ?b}]Y麆ݓ1.&nѽ7 t[X 15jg5-σ!~k#G˷k-;dAb4$f]n,)Z4,Mmp:H6u_ם~qP؄*~Epiw!>Au"jgD\sh ^n(m%& Qft*G{(t)l:E ֡ ?M~+:".OXIh t /pX( 4䌛O8RcԠ,Hi/>h? ߏÀس e ڶ2[\bm˼m%;_Q\?BЉ^ôEåG#AZCI?07T> >> stream x}TTu i3j8 -阔=6r'ԲLГNN_!͡-Cr23bVTYs|Bqo~8_]{0o/wpP!L3|T|||9NUW]p(vyyyJ)i ^ Qv[^^ްaÌR8MsGze2R)))6l8-'ݻR{ w7xcgo#55U)տȝRRR"?+O6ēꫡ|wxŸTJM>=tm_WJ[~s=mm^vpRRRFXuZre|}߯_?-CͶiӦkQJ%$$=z4 5J)u^z߾} .Կg̘ATJ=_}K/qڴiP9!!A)um۶mWJ :4 ݻWY?gϞ#G*ƍ: tgϞg}v饗Ì3fz=R7|髳fڹs?Osx:^s5-Zn]ڵKĦN0xGtc;|'VkaǪO?`6^ommUW]@c͛r#uuuG=zMþ Cf̘_=Կ;7L/_rss}cǎ}w _}Udocz-}۷w䡎m.((??S/޽{-[lٲB_|J)á}8^E_([%%%j ۷o3QJUTTv$1{۱co\|7nܸq%\m6Ǐ\#GJ!CVRU)1fԆ &Oܯ_;sΝoF) ]:uj>y{tFRRRj_}nwFFƀ|>_#)Fg_7ѯ;C}v};Ds9әûg*?҄ deeufr)?~\祭H`P߈ |mvd2>SVVV[[?ꗨ/ްaCSSR*!!r9W^]ߦM.TKKҥK#_O]sN}eʔj޴iaIoll+8p |Y-]xᅃVJ=>u]>O>y6L#|fûƶmV]|Ə{>n;}bawcʕ+OfgWׯ_ykUg6ۧ:LN>777 9rnGEK.9~x(7oO>i9?9vbbBW{w|7l٢$}{Afee;b'dC`0x+vڵa 3g<3jeH}Q?fוg* kmFE˜ttM]w]FFF߾}/+V{e]e˖[n .HJJə;w-[ Й'''Gͻ袋ۧO#Fw}E`K;gϞW^yUzr|W\vڼ<6hР#G\tiVVVrrq{ l=zvO<999Eŋ׭[***|_\~RjĉFO3W@W-Zhm~tw]IIS!h4ؽ{+~KKb4iE]dP8h{ 4E@( Bh@P" 4{"%%w1zn͛%uϧo_uCtnqP" 4E@( Bh@P" 4EIJA=E4URR{nl6<` y(B'W 4E@( ŝ* bh@P" 4E@( Bh@P>D/% W 4E@( Bh@P" 4E@( Bh1f`0s 2l6}FM> 6򆆆Қ5k,YvZϷ^z9A&t:v{bbbQQQEEExkZ9s;c biE߶ZW^{w6fĎDUyzԩ_~ȑ#SSS \AMf9|լiZfffx޷oߎ;.Ç4c4ؔ_UU`iiiAAR555m޼yĈ?t??c =9nqMiiir577\.ۭr8G={vNN9s=L8aO Nm3zn-@P" 4E@( Bh@P" yQ(}=A " 4E@( Bh@P" 4E@( fUVVl6\\\ #.\8dȐzǎ3jh)744Ԕ|O?ݹsgcc3M,mZ5M /1Czzzrr_{5C&п7矯\rڵuuuF?@Mf9|լiZfffxp ƍ2d}ݷrJf󫪪~0,---((PJ|{o׮]ǎ[tiNNÞĦ4r].VJ9)S|ƍknn;v… LPT=;&(>!8@( Bh@P" 4E@( Bh@PѼ]zid݃+h@P" 4E@( Bh@P" 4UYYifsqqq0 駟6ECh ] jjjK>s@M^tĢd;|o8g;4ؤibѷVi's꒟pV۲eˎ;S4d6W͚effaٲewq>) bS~~~UUJ)Ԥ B+VDwo'\AP" 4E@( Bh@P" 4EĬJf6`Җ-[Ǝ{y]2jh)744ԔZZZ\.ׂ ;7pvD~ u:v])UTT[on}>SJ-\94ؤibѷVioW^Ǐ߿ɓ=j̈! :TWWWRRiڨQfϞm` bl_5k^JOO0anOLL,,,| 6WUU`0XZZZPP|MMM&MKKKNÞ<l+~РA>ԩSVLPTԻ1zn4E@( Bh@P" 4E@( Bh*_y~%$=A " 4E@( Bh@P" 4E@( Bh1f`04j(7ޘ0aB 8z%K&L`'OqMiiir577\.G8GmmGѣG/Þ) 1> @ԼyF Bh@P" 4E@( Bh@P22N^{p Bh@P" 4E@( Bh@P" *++m6l...'P^^>f̘N"bS (,,,//ohh)++k7|s=2['h:NݞXTTTQQ?GyĨ:#74MX,j4-ruΜ93f̸ ӸpV׿ȑ#wytWblѷ5M /[.=={1hp 6WUU`0XZZZPP|MMMoz:+ Vy<eٲnRp=ZgBЩ1 DW/5}Ct@( Bh@P" 4E@( Bh@P O#\AP" 4E@( Bh@P" 4EĬJf6`#<2hР?[o=vQ@M@,G-[/ܱcǁ^xl^퉉EEE᥁8wC3pvhI4Ţo[VMKyyy/NJJڸqܹs#Y=hԬYmۖ?ɐ:D&j4-333dɒUV),>̘;BĦ* KKK R>d2=c`pժUG6zؓ#bSZZq\6-;;v+G}}iӜNgVVj=tЂ LPTY;&(ǫIp Bh@P" 4E@( Bh@P☌>DO꯬*@( Bh@P" 4E@( Bh@P" *++m6l...K/a8yݻw5a4 jjjK[nvZߟ>{ll^퉉EEE%?s̤$۽}vlG4Q4bVUӴҤI&Mjll|駧LbȄ Y=hsrrƌ2RfsMMiZfffx) q}݇~hZ c\AMUUU~? (|>_SS[YFr<ln[)p8׭[~8d2.B=9S(:c6mI Jqq0zn4E@( Bh@P" 4E@( Bh*NO?c@L&'\AP" 4E@( Bh@P" 4EĬJf6`զA2X'h)744ԔE޽ۨ:@M^tĢU5['E iE߶ZE^y啭u*pV8|@l2fM233' @lϯ`@)4ؔx\.fvJ)Q__ohe BzKp1TzCt@( Bh@P" 4E@( Bh@P?@( Bh@P" 4E@( Bh@P"bVeef3`qN@aaayyyCCCMMMYY2 6y^i***hI4Ţo[VM 'Y{ l_5ki> stream xڭTKo0 Wh-vӆ8N;n?>} ؆E4#)HxT-P$u&FL$6qËNxTt뤐C2zAѱHWH4[._/.VV'J2uޝ׾Zz\Vd*R)m6cC-%.3w!3:mFWQ3F\Ҧӡ?pMjݬ?%FBA2ʈzF#M.V>)EY`;L?X^LBPÎNk>Bmi>w۰\sڇ͖bfD0yC]S4 x#6沠#%!e.UsOXha_nfB{+DnfFۨEmj l9dr¦ hġƎGn⣖PЎHꕔQRX?'l#0yO[AعKY˄ޛ7m 6XD#&}l@ Fmɖ*RFS$ԥ 2}5ȝz,F~n{ ȴ s0<&%^|ZŠ@=(1tm06>r4-6+!g3AAF+ETa죟@ m̛XYC%K0FAಅkO!`I6$D/6:SU@ˈpI4N<( [P TL T-> endstream endobj 25 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 14806 /Filter/FlateDecode /DecodeParms<> >> stream x{xUՙrr!! w0Ab"8yeO;hqvhG۪UT;>ʴ 8(EĂ!\$J $ǦWds^{w˻$7ϟOOOOOO?wNi~iAAAAA={4+P\\hѢ[fdd|?sss#xztu5[gjkk/Yf˖-3gŋt9$$ 9y??o߿|]]ݷ:;;{ʔ)oG5cƌݻWպ:?pƌك7o^yygϞݯ_Ç?sccvޝTXXho'%%~;***F5{%K9^ZzuAAAvvܹsϜ9cN:5++vہ,ڰa]ן">~edd|^Ǭ[رczڵk80tТݻw|%aDkkĉ-˚ݾ tRR}̺ux{f̘z߲={e=SбMA*++,X0x>}̝;w5557I&elb8/[lҤIٙ]wݛoi?gϞo9'' ,]Ժu{5s^xaݷ{5>UV/nhh;333zٳg>>W^ׯ_(ZfP}W_r {o3~hyGG}nvMIaVC%NtUUՖ-[[J8>q3ì[9w4H< /Z^֭\x#FtW_}O?Z8t~n|;]]t{u%C@hP4`(h0 4 E C@hP4`(h0 4 E C@hP4`(h0 4 E C@hP4`(h0 4 E C@hP4`(h0 4  ݻk>|k-[յ@gN@K,Zt{wРA]]p=tuhPjj#M˲RRR AhPtqM6 s -^8N@#F̟?*+įp8P4`(h0 4 E Jiv3gLNN>vXSSʕ+kkknՕ:/ܹ333S{?9ԩS7'M]`DhSSSW\j?9sfбo߾aÆM8QÇ_}:GUUU4Љ!h 233'MOr-n߾ V`Yֶmۖ/_.}O>?t :uꫯ:f̘Vc4|p5©_zaɏ:l7n?zMi$C_5v|{vx-[{xO-%Wg E @ۿk7u~e"B ͝;7;{h%b4ѣGe!ǎIe"E ȑ#---uɣGVTTDtV88p`C\@ۦNڣGd#eeeqDg>}: x 3Ϥuµnꕰ]iv`("hܹs^C|={+ԧ/_|ŧN*,,}5ġh!???##Cɓ'k|ٲ2Lϼ=K͇>iR{_SO=5o޼T: ǣn)'%%ţp;NQQQzz|uuuUUΝ;۟GuJ⢵5z^/x}-[L<n,^xٳg{@HzzҥKLJwޢh֬Y7xMޙE ^233M#WX׿ @ӧkkkc/XQQBЕW^}99jjj.\X\\|ӧwiiѢEgϞ|7;wV&{yxyb;+*5VXںtҶ[94.ܧOūY >|gRK;۱cǎ;ܓ^Ξ=*z&''3o8pwÏ?xW.͛7o<.Ydɒ%ODX a}\뮁ίXcccKKKa}}}W лw;ݷ0|Ӽ>w}7''ޫ}=Ovx=S__|[ZZ*++mV 4ꚛۯ당m۶566yC \bECCC߾}; Bϟ|#*! ]ՒPhȐ!ɔ{ΝooذgmGpB˲[ 4~յ0[owwַ,:|c=›fϞ=k֬'O>eeefя~sA~߶sML4 Oӣ>k?]xŊ555[lo~trjjj"<:aC%%%]yݻw=EEEW\qEcccjjjssM7t]ww]UU?pŒzW|_|q}}{9?iii~ZZڞ={KرcĉuuuG7ndyyyffPTT9RRRoyÆ ٽ{ȑ#Cо} 'Ο??bO233?뮻?:uFmSRRҿm6y3gΜ:ujرvك o6{왛k?fKK-O|O>999ӧO;׮]9[Gٳg?Yjj3=z+/ ;v޽mmm-ڷoȑ#+**jkk{o>¡CZURRT]]]\\\:%%̙3vi{Ǐf(jhhiii,۴sǔ?>%%gϞvUUU.\p-***NӲP(t޽{;x`ZZZ=>ĉ4hСC ؘTRR2n8{nɩS80p\;Zܷo_~~c[ѣGfdd 0`߾}gϞ4hP?l0wj P4`A?mNd+Dn E C@hP4`(h0 4 E C>+nEW"mn|`(8P4`(h0 4 E <7ߴ֭,˺B{2tneyssεtqeboK5м>;VP+XҿS`|v7_sDiU-mҤ) !fF  |:BQ, u;D;]iT91brpZoM'*ެP9K-'o c^rBWD`(h0T8U7=M}#E@!5WUa%E9R)`uO]ߠ>iU-e:K 04*3H(r>SB! 1"k9zҘjIACҾB||:bt"_7s>X}חY C>ADD!/['THF8Ҿcaсh?Q11K%T/ :{-T9ZctJMǮ.VZFP#C@C'/3eMg|Is"̪g  K]aDS:׹ҏ]Q +Dԝ&|^l:I@' Mc_|-݈:yBLxZCQ['43GUOi)<8F}i)i^'Jn\@z*vT<1=矿 ?ڄoSeRoZ@ C% MpA)^*PgԹՙ]=U!,ŠnDJ;߾'V:{P03A-FlCKh][ 4 w ^Zz:$FvL>] HApS %*~tu"h0TDvQ!xvyMfדNȤQ.ibuiivwQ.|wx VM~'ۗMcaG"J{D`(h0TtqHZqE9V5zR>zX4&CM=@*,~ڥ645 RUj/PB`L^!دSܹO> l~{b8B=j?ԉԻI O5Q  n>'>Q{wW+st8W:"-\E' |#C>}fɥ+I&1LgU&ڋtN\uiG;֨VٽujѤIiQTX߫Յ'u&V*ʁD`(h0T8"v9{kv~zPAK ҿmfugT,)OFP}4 t+)(*DZzbw!eOS~),"Y#}I0}߮G"h0 4*] E>aK AH>x`\ApW!*oi[gY}]*PiF~/{R'.w!O} kIk:F ^;tP aZ|VGl-vH,xq?i]Q,ھa#C@gPRO-/'6H:ywHH%D:}8oApLg"Sh!C>VE7:[7 HH 룞w,>Xl'BO S(9fC4\#VP pylkEtiœ4ҕ)}Ye:#liDaD4\Pzʡ4C:^(B]nAAɧd-4fQKKL;Ur}rh(N>N;WMOX#BDVK?=)MC C! UWЙ'${NS'㏔^z-rtނ~}sJ)SN/{kPwx8 N^Dt&E^qHCoE.ъhጔ:\ٍ:{H?jGҚ1GZW)oC[趈P4`wqDCG$TҾY|&t$/\%Ey~}_򪃏3:L?}i:@4*q"hal@|p.-tD,PE8}Jf KWK@PAK)RC3-E; }:GͨG/+(FHq;#VoA[p.b E J.Ι٣]4׮H:KJstp2p_1"ҩoj;"{6!b ҿt ^|LwN:3I_:R'8SS a# ҅*m: Wѯ{ bEH1 AFyD |xyɓ>4GDB*=Nϯ49( |I}:PؓLziZL4 l>x1 v\ץ}Ŕo2W\6}D`(h0T8/MQ qq@ w큭8E.!sF아JEIg dL꺉h{KjD#l>w'sЧ~(lg%V# FApW!*[X|bYz#-A$j4 '?:ۊl%i5=re%Hoԛ̏>tD E a$MIGG)w҇ˆb0\wɦFPA 3uNkDE|SJ'jNY>֕h0T!Q4Cb S*S SPgrٻB |][+c/}^?1YKzxR_WcBJgY㞓g/S<ٹcm 8%xU} E |G^^/Й"@{ ͚@FbD`G -;zCtY痣PMg 1,T"h0 4.Iz!tR G"09]xUQ+7"h04{^(V'ڵ˱W FOB4t`DI:1b+r=B& ^Zb E b:`uJZ.P'ժz?4*t}}"F[,W ?iN{xtʩ"C@őս+:aiĐtPdpWoRZe,iLo 4*48?Xf<TO_uiD M#"JVU::+D`(h0T8~V>V*~1CZimq i@[D`G O'6!Bx^R|:꼎Q룶c :''וCI19"Zm#*"}hI3/9FVcc E |Gm4As~y$TwtwGP'a"Nߔzƛ0( P f'D`(h0]$MHG7$!"̃"PDЁ -0R14t4c[^I_T(9UB C ΍d49"J/ȲT>F:("t%>~r"h0{%p# N> aet4?*h0JX1"C@Q_4 OC=ZztOW*Q\U%1NL ! C>˳RR$d+ 5bPaT.Yj.IF"h0T#4VM WN3AM']BЙf(Eԃ̯AhP}sH7j8 zntB|uQ)E$.=F]|#C>N`~η?-iv,TQ zD`(h0T8~D_H!G̤z oR$pntV ߃%|Xpp¸"C>˳RR.th0G[*ENڗXMAhP+  }|BׄH*fXWD`G O;$WmU:{BN/-@ Ca: M+S$߈(w[z0E "6tPmF+Ҽ{bAF |tH<^c :Vl^zժH̤4g "JD`(h0T8|L:H(`]x-I/>E{l}-e"h0T#n I*D4CsHzB- WJwaf0Hh#JD`("`P*ZщEpYnEuZʉbOJoD`(h0T8rr|\BL'Q%$q;u {P"t "h0T#4VJ(̡T'%>JJsxš_|HAhPHx)͍0N~}Y ^Ja%aAMN?fG."d1O( "sAkN'&4:hخ6Ii|{  E |G-M췜HߔzKl!ᄎsCg,ĸTo %T wLD`G iM3ƒ:yco>F':Bo4;FM3n,X!C@ődn 4sKHg ;)FcҤ zS8XZ[ "h0T#$T/$cVg o\W|KQGo:';`4*t7!͙3 |lyw[R 4 .n2k=A$,\YxR'JTQOkD`GOS[OD2%="W|4bЬ):۞{?Cc"*AYEZ:}Mgs>4 u^0f+D`(h0TR8:Dw͛-˲nu=bms^PK3Vs9E`]pizF{oDi"P[P ߪ}׹BMkN٥yYZ0WZqi}"h0T u>rDqi| IO^ҙ_?(5¦34ӧߑz9z1G:?K鸢WΕNƯ?B J}4@SP`Φg# R"VsNw:3bUB>h1>s! z x P4`DRaPߊwJxi/̋Rt8ftzirSߤHIKuf)QrP>CgPWoi2~F^C 'LAE^B߹/W#ռb4ԋPbUN[!u栜4:"D |]Yy!C*}e>h߉Ѕ| ^C\>E˞3Uv\yI'~@ C#oLGGPsW:k5"TLvDs-#CAMICyE  E |G]]UA!|}tfBP{K~$LD`Gkْ"]qt Hr}OC"C%BM'`6WU _rgp: 6F鑈4 .#MA)LX~-U:N!TRZ5x 4*tJ~ˉD?p<~J*kSŶ^1;slAhPHAB$uݯSb : &x_ ; ^D"h0T#-YNPkّ:u A{.G̥0.VP4`wqtAB[7|ˉD6#ձ`fBS%-"h0T#$T$W ΎC}B`.xX^(!_sAAw7B?:!4չ\7lv-"h0 4*]dKzMK_UJﮃbw_sAA'"h0t$s@AG?92mWId[+"h0 4*]uuqAQ:Cœ"h0T#Km4C^&H3[x͠r?lˑn1ӭI⤮+?CvtL+9Xʕc{Jwvk [*po[D`p8uHAhP4`(h0 4 E C@hP4`(h0 4 E C@hP4`(h0 4 E C@hP4`(h0 4 E C@hP4`(h0 4 E C@hP4`(h0 4 E Z endstream endobj 26 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 16530 /Filter/FlateDecode /DecodeParms<> >> stream xyxT3YF& P%RV,HmQ_RV\H[k[ԧZeU^"qZaI@C2S3瞜sg'3ss=؜N'FC2d׮]lii9ɓ'322222N8!Y/WUnnnllԩS{nɍ ./F'ӦMkiiJKK׭[W]]x|B]påKϟ0cƌB~}}~1cƼ'n޼yͫ~'Ns)--N:5111--g?YSSCl#Fm>#6c 5eeeSN]bEJJʷ_O>Ȱw}+W薟}رccccMVTTDٽ{7-ޮ].]TYYi333s׮]MMM6-!!j*͖Z^^icE>}:111::/4f׮] ?Ν;srr;_2>|8!dǏ'| Nsĉo}[w}wdd$!wq:ѣGBNŋcccΝ{mB QSSح[{wܸqu1Bi !ӧO좿ނBfC ><&&裏:ӧOGFFFDDL2e̘11c8NzO??..W^))){mll$;Ύz+W|衇! .d^^!$##qذa6m˖-﫺://ʕ+W^ݸq#!d֬Y@0>SBȈ#hE6ydBȶmh\t:oN4hZrA׿r;?V7Nsٲe>+W{9Bc=FOJ[o:dP h :$$UK+ 6hr޽??^|EY__oBCC222!yyy[駟O>  t:}mӣG˗dee 0ҥKᄐ_[th:ꈣE$dff =zx駵rEEE >~:hәIYl pjٲe}YEE… W^}w ڬ\ ڵVy?3f̘ݻw8q?)==6F8~aÆUWWڵ%22rٳgώmll6q(Zb`blݺG}7 gh>K/%''GDD<#-!7|oB m.^x)S%477B"""L\#tYf0A۷;NLL?>}9266vܸq׿F1dZ>⣅K=t:CBB222~<+WihhشiSJJʜ9s=T߾}._LhcN-YW_=uݻC[[[xx8/˓O>z뵷'?q8O:/xw]֭3<3k֬_sٳ'meқ8qbbb7xc/^5jskMUTT̝;7999!!.,,?۷oLL̨QW۞J_߿|pt:zQF#G'NqqqqIIIs-++3};w<{&MZvmZZڂ ĻhhK q̙111޲eԩSf6lHLL ϙ;ol]kkkx"%Gˣ/鈑7k߾}vn7^pA1+3 6hEOteeୠ|տ ?ΦF]]{X)///--駟wAT<tbbwܱtR:e˖* @Q @Q @Q @Q @Q @Q<ɒ@3tPm}kUTT\vm۶m.s;vL,BIII;vw)=ֆ MB (TB (TB (TB (TB (TB (TB (۾}R=+**v[MMɓ]5T?>R|Gyyy.ȿڵ+<<|̙.*h'xߥR!"| (TB (TB (TB (TB (TB (TB (dvӧ%%%YYY^:8*hUL6-55={l޼yvZ_NUmmmr˽lذ{G W^yKFDD O>O @ݺu[䷯ B (<133ӵp?~;t}fڵWoA :1t>@rڅ zHhP*hEn(!!'9رc7n8`K9Ts9pX׏֮U޽{~xt@ A.OZAC]ߏtFEu7V믿K/˭N8:Jٳ[n:#qBkVn_hђ%K}%Kz655Z{aibc=,p/^X|/2777>>PAɓ'Ϙ1C͜9W WxV}_`vw,nC  .\0B=AS~K`:qJ@ O}ٱc&M2}̥K8p 66VѣGg͚*ҥK @ l}oݒyOxt)**ϏgmOHmm˼/]T{ eeeoĉ-,tM---F?쨨޽{wߺukVVVuu#^{zPAw}xذa3&&ܹsNv]+ G0eZm{p&LWZyZoUUՂ >[o矟3gN^^Jʁ :kРA?]N|.q87A}?zqB~_feerr<*h;.;'''--ǩKPAΞm۶-^^qPA ۯ_?e~~ %%%(.Z(//o֭ǏQA'MԷoׯ;ҝ;wvޝ~Z__dLw:e*--;4RڦL2zǏA Ns6lׯ_JJ .,_\Nuuuzz5k|[LZmp8V\q5BHDD/ Ԓ[ou:nΝM jM}3A͇>|pddN]]]\\E4 |&tҾ}Ν;z}{.9s̙3ܾ+VXbq *h&DVV>0MGGڵk+++WZhѢ?|y6ol?qIII.Z/?NWwزeKTTThhhzz-[ΝڻwiӦ=~)-ܒ5zh׏jjjz!@0,Xf<=::W^w8z;s޽&M2WAWUUM0I|rMM͞={^xGMjjjnDŽ3f|=˗/ommw'x"99unݺ]~]2tҥK=`==rt0lǏߴi}g9rĿEشi /PYY;#GBQQQ/ȑ#o~MNNnmmݺukEEEee/Ɵ4[01mxYfueݺu{:s.={)Sxve ?Gaaavv {{{G}̙3ԩS)))G=z4}ŋ=ztaaM7ԣGCFQ__…mccc6G:thSSSEEEFF},""Ɓo;vlt3g΄Ӈ8p`KKŋi;t򸸸'Ν;7''gΝW^߿ɓŖ;7o7os+>ݻw۷^BQQQBBv>|x}} B,--INNpȑf2AG9rcdž v%ѽ{֎O<R577oܸbݺu?OBCC,X=ܪU\/|ͅ6m8'TVV~GӦM۾}{KK޽{srr\B\\\l{E_lhh_fTTTJJ }y_vܹs5jTiiiO>~ڵEEE8zȑ#oÇ[7n7o^XWvfTT֭[8#;w.!!!..n3gdvyl6۩S-[uڵ'? ٰaCEE.\dɒE+VXfCzk֬Yhю;m6dȐM6=ztҤIƍ뮻/De~>SC]TTD~zKKKAAAIIIlllqqqmmnDGG_|pw޽8..4664""իW\ ۔FGGÖЊ5,,xR^\\p8GEEEDDٳ!!!MMMeqqqGGGkkkuu(** ?{l|||DDDϞ= !N322._<""ʕ+.\ӧO~~>!d)))v}ɒ%ׯ755hDO]RR^__ʕPz]eK(--YUUVVVF/3""8::8<Mg'''$''744DFF燄ВGDD 0`rٳgkkk_B.]I-6mZ|||tt?NOګW¸3g ӧG?![n={,--z*mѣGSSf+((2dȩS!&Lhoo'nu :H4EɌD PTG nwSacz,qQ ![$Oy\e5T!D :6/n/`)%6!eLzܩ2i.J2x-(h;Z/3N0(`}5 72paԝ P*hE|8w•|q.6eRcoc.hK;\І!hWp1_*`'*)3 CO)@QA$_>=&G.;DZlv֎y|aY~_2qcL&_XVSG1_.=,hWn4fJv6ULdgJF+S@QA;ob. wGϧw(bvέ2-2YA%7fN!O Fᶭ3#K%5]u^@QMaBf`x&p&2~x>FЕv2_3J.!XSʭS{x+d:Zgoc$2gq: @QAAF1vL wdbP#x ­ $>7 0'M-7e\Wlĸ:nA( 4n'v᧦-oI6/fR [ۘ}N/CC@vFn}"gF|sBJZ2Qa}y tExѽ] [yˬjTf{zP0Ӄ;{-tjG3I!/˞CK(REí$&ҤlّI=n} <8ZEf8"hE|JRS9W۠Ml,YM6Gh2 ;1aQ (hIÍF>]Q)x`)sj5vK^۠}3@ (T &̢M2/O}N .qZ܉-4kp[*5:L7O*vh @QA`"x7fV̝d`D/ߨ-M(?/C&lI]sn7p: 3* @Qhϳ@<'z#k-B&eֹY^Ȍ_9?PhCC&ws-@QAדF$sycTB2$$nb@>I's 76O ) I D Z4,$n`l4\7w w)1X&6D )r)mn%MПxù2ۀA( 4èP@foZ LY ɄO'}1x8}f2wO^x[9o{N J sGc#InWbs@QA:E7ܗŹ>.L?> 0wȂ^}LJ\jjt3ŀ)^+KC<d3?5knrѢ>> S3Gc4 P*hE|Gl }b̳1v#$hR`FkNs; s{4nNKM⻧?Ġyq2~fArܳȬBɯiҗDTfMt'ڦoҶ.pn B (w<~=Oŝ9ntˣ2HTwZђNB&$cI/dSNB~!zZgAF#I"hE|! D8J ?í yZn\,ܥHs\V̈́WLH1asLb\'Gx^+ ݸ}l!A 6jWV- #h$ "hEPTw~ٷm<`y>j`Fѧ 6q&A@dp0rLPdѨ)~Qr}7q0ɴ"hE|' 0p`8:`wELb{q}P9̘9n@ثK+w.SZ+V=A(*#8jn23q/.f:.hnD_-ava9 p|$?'E‹ߗI,yS|M`Ɔr &nn8+N* @Qġ3j0_˼}dvOL+L L/%ƝfF=KpJZ#7iۈgrkRpEw_A(*#W2QTLox#}#ct.nE.eȌk=l,3ZWn$}0zllV{DI$A( 4>Gk*3s}킡g6̺㠃8>Z zC-7Q>S[Mܦ*Z J &D N ]W/ŤL{"Li;2K=X$Xq .m"hE!VL]͈z2KpJb23D <@f 3Q3TM$qʏucF1˷/@Q&u韠mL'; ZAH2AFv{SC茆,#A ?B (DЁav^ &)Y5GѢT};EM6Z0 4PA( Mf0k<33M3]t va1<ְhyFK82m&f&q:d d7& P"hu)p(8vFYήkS1 bq"WPff#X4Ar*zQq(mf6F[Z}7qd  "hEP8F|S&t=djg1efȷB ґG7jǧ/ff 5KH?#}4AKjʧ wc5-41ggʲ6g󰥿LZ]3f"eD)) VTܖVG%*FܹwX/s⹏#L>½reڠ0s @QhP8Lu]rdEG|azڤe^m{`> 32%KW@Q62~yhaP.'0WW̼Oca<_W.N.F(_*No(;,.t}̢ DB (tQy<8sk:3`YP4F#gMq6ї%sRtF "؝؈YíBbzUA( :3 a>qbY?hig㩧kCW SZ&d 0#-"Dp?ޤhC*hwrQhy3~z5@QhV>`aU8#7NxM^7&}nߒC>,W DB (4qNQwS01:UsijcpvH2}`DB.u-^LP#3NL>$Ɉ7ɤcV'`jz"x}i Lb{td3ULUA( m꒙1'N0f^ ebYFq:a1wKaō2Gom1F&k av!P*hEP]GLnxu0*:Db@M{DGcfAh}~fwg'zff rEp)20z Ym "hEPu"^)Uh2Sx2sO<+W2="hEP8 wvqkym"Eׄ@Qemz_2 X:A%7?8x9+6FEr-_=v :~%1#7jߔѱq5[ 4AK$u0e #}S?۪ s)u4A (D %e(n| f GQ& *vܥHn VV "hE!V,3 dٹn})$w7T.CM0e:vcYb՘0As8Č`?2hB64N0*L!*sjq\hRp=_vV~n[6܎ A{4PA(t:],[FVw!С63(vjh33Miaz+3P?LȔI;䝄˄4A;zanN M<@Q&_Aj.n4,J"hy)4A&MrLcȇ'8xn-x T "hE!0fԞ˜۔- "hEP8 7owJ릋;Ŀ }sx݃3 @QeUPw j>B9* @QhP7<Ń;SѶOP4$Y&\IhDB ;20LgkNam=lCKz״p Q }L⨖ن>s=h"hEP8|$Ǭ_6V霴eVk!P"haZq fjalvne,@|mDB.*x3QE [ǡg4ZsK#dDB (4q4n40; 7SӫA( ꘠KЂbn^ f ?!t0;C (TBp[M ܡxn!gU0fq6h*DB..,D6\\^mS$D!P*hEC] JL P9K;[ 4lNeDB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TB (TF endstream endobj 27 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 15450 /Filter/FlateDecode /DecodeParms<> >> stream x}XUUu ""^,̗[ݫX6^:XMY=ٽFi-kI3M++MMEATvlk/y_{gu9^~b 9رcǎ1bDg/_ԤǏ''''''=zԡj|嗷r !d{CB7 F``~ϯӯ ϟ9s|zf=Æ Zcǎݴi=~لIIIwuf~wV5&&fΜ9x~~766:Wԑ#G,KJJ =b9s%%% z뫯;tп۷oONNZfͺp=/7n\XXX>}O^PP@ٻw/ݻ+**,3jԨݻw766Z,HBȚ5k,K\\\ssӧ,7|EFEE_tҬYħ GMIKK0a!dv===2tYfB>#^^^N  LKKѣ!dٲev*,,޼y7p!$11&**gϞs?~cǎBZg'N>[p!!d@0vAIII ٔ)S![nݽ{7!$!!ҥKv=##r5mU !G馛vΝ;iss9O.\… :!䩧/J{o:DQZ _yy66lPrݻo뭷vfX,=z%$''B;(vAU7vѣ{۷/S #ΝKYr%=^[[N'999vo9snG Aa8q2aB/yBȬY !3fիWAAAkk+0&&&--2fBȥK!G?vXLL_?}g}622277rʕ+W*/?8Zӧދ%:t!qqq H{{;!n۷履~:}lNsEEEM:TrrҥK_}UB[oջwoiǏ'(]7UUU<soqȑC9h Aу3'jSEN+Ǖs|M6۷o߾}V:vX@@!'(ap(ׁ8Z%}e5}Z !馛fϞ?R BPufGuȑ'|2;;/11l;wnCCàA# .  #11{n;v޽{|FFFss3!/hllLHHZ233_y &9rk=wݻywygXXXCCC^(VPX8l޼uҥׯOLL:>zꘘ%KTWWsO+))q]v%%%N4ދ~'DA jpƌLZ,!o wqGHHHRRg}v뭷6lsN+ aZ[[,(8C:cacc%! )sAرCo`DϟZ={uE4d@a.#Gk޽{N,???""bժU4iҞ={|] ]}աjjjrٷo_ll+ݚLc ,H H 4@H 4@H 4@H 4@H 4dQ]]]__ЇN:%؜ЛڰWVddɒDYYٺu:z͗_~YVVZYO6M8P&Mu7 )4B )4B )4B )4B )4B )4B )4B )4B )4B )IK/^JYYYrv{ZZ[/_#8'00pӦMrm֪ۖΝ;wر.s>hIhIhIaԾ{rrr͛'>ɓ_uHHj@jO=K.K|ν{e4@j%88822R|Z'BT)4``{f̘ -[CkmmꪫΝ lذsc@H 4@H 4@H 40*>>O>ܧ***6m)ޫWõ h!CٳѫnOL7o>3)dܸq|Abb[54`f|Me{):?ޫ첁o7nO?yv]@ &30~5#; #83=$ s=wa%"QX}PPɓǏ#ttt^s5>\駟&ɫnooG:ɍ{m^wٳ.\!Ν}Z;Ih??0%%.G߀^{ia4LAh?|z+4`ffͲZr y.C `x?x``bv^x˽e׭[gCC>|],̙3n@ޑ#GVXѳgOicƌ:t(sU}^`N3M{m,h /(((%%E[%558fu^^?n/\0qիWhn-!!᫯m۶"@\vZ655ڵ9nF@O2vbB>n P舍bN>tPYYْ%Kmmm=n ۷*(5klܺ6:6SG,(='ٳo7ޘ3gαcMMM{u8BBBBBB![n}}]/W _LL7L*?BV*rUWyJbز_|ѷU]xc6o}zƍj~t{{{||;}ѥK|R%غuk{{U:::._LQxh0ѣG+7dxl2xEan%>>w2O bRsVVVVVz }]]]xx4n=,KIIɺu!3@&_ݻwŝO=p/t~>@ݭ̙3gΜ9]ꫯCK',Z(88xΜ9ڵk@K.77gϞtnoK OOOwtZNNtRssbl.]-K]=XcccyyyYYٙ3gܻ_~c 49^]]а}vs*x ⪪h[q[ֹsӼ?czƁl6@oٲ%??UsRuu7XYYM}ђ|U\\\^YYt҈绷zz^zI6lpo@̈́ )S{DH4ooT}\/ԺWݷo߻ロi\wu% g 8x?eAy=_SRR i~;SLQRB^|Ũ(y䑣G^xlkk۳gӧTM'O~-!$;;{۶mIII~+|OEGG׮]b ͖GGG{L@oݺO?Z{Ku]~~~^#Mpp^ۯ_?… m6w6sJ'OܺukLL%}555v馛\X,ʈ#o]̀ng?r%$:ڏk ,Yrᨨ{O_Tϴ ݻ;p?@+,X0t~ᥗ^X,ɿVnkذa/**JMM2e[&6773fYYYcǎDQ/_vnԩS{UZZ:wsέYt]cc޽{/Yd˖-Z/ _+W .>|8os644̞={Ŋ.VI0a]`zm###'O?///wKÆ ۶m}w}W^ޑ:<<|4xg=W><33s]\zi={bK,=zΝ;/^(n tddd8v4緷gff{fhlْnZ\q?p޼yᩩgϞ-..۽{wKKˡC bbb<8v#G`III``~뮻\sMkkkiiȑ#i9%%%;rHJJǯgZ֎믿/))O8dɒǏŅ9r$55ٳgh111999iiiLKK;|MMMbb"= 222::5zhVYY9bz8$$$&&$6KKK{9`0''gĈ/_>}tRRRNNNJJJ^^ޠAl6[```KKĉ6o|=z*W_}U[[8uTz;v^fM7tmEGG]b͚5/V7n뮻l_|ECCÁvРX-$%%)o?..N6i$^RR2rȬ𐐐SN :2,,,>>~t !ɓ_}UvvvnnnPPФIfϞVTT|:pu&O,x}QAAG}tw3kXΟ?':u>X`clٲ;xl6[FF6hР2e |uuu˖-koo|I}>[likk;yŋܹ̙3۷o6m۶m;oifh Ϝ9|rBȜ9s B|!CBN81dȐSN]x1!!'766׷ի(,,ϯ߿8,,4 jUTTΟ?Oۈ^YYFW;wD[Oouuuccc{{;^QQQmmj-..Vj{/vzӧOZۢv…=zMgr&SUUWTTDW}}}CCC@@@KKK~JEB C$M>}#88z|駃/\YPPD'D?]III'Nhkk=ztll,!$//oȐ!_t)!f׷ѷIl6$\|Ry'Okhh())mVTTTVV644<ϟϏ***jjj0`B.]rI3??ԩS8qbdd6[ZZFE;\YYy…X:Cׯ(!!ĉglh._|ȑuuuzsssNNN^^^DDDJJJBBϟUWY, S=zӧOYYYCC˗ccccccxznnoo__9!7q#BGzk6ațB3nܸ; IO=_so\IHOOw}/~555>A4@H 4@H 4 ?f# ^񰲒sd>9|H[&bsC&c gau j+#YzPOM;n'vw1| \nnM|ꥥ]wh0QFM|2y̅‗ŤW$A )GZ-A/8vvb,4qϗǤ7H >Uqo8w We!hIfܸsC6ʃкUpWj(([{ʅ4K t3"1}"hI>f/_2QiL6;,E+8=(=<™s*ucf25%043N}P<=NLWO CH@?DB )wq+ spn^1Sp;% N NC )G4;G[|IO 8_zқrFġGn q?%̘!C/5Vz"hI>fEƉT:+Z3WZ~9]/ 4@H] ?fUxxGjL/&[Zz s)> r b>L=0p]AHl4fIH!)18t:Cމp)_MfI'ow@!#h&?Ow$]utv~y֡Qf] K?Rf1A8뮛'n>s@~:rxL=9N̙r N\@Rh$e.8;{V9N2kCJʳ.Ks;S6Ǣ_P=ع3~Aݧgx0=[+$eZŁ v3$4_r'n*=-] 1cNvq16mbNV?dv+|/Hܤ y(SaAHˆ!3C0YJ*sUXJbRwR#?.pB=@ȗdsvJRB~uߜZ AH 4ayu)=9LiiL{/Rcn.*4;G';}fL}afwdfgPTm+j½(AH<iG* ߔh Hrq'~P^Z:G`wS!Xf w$a 7RNC )4v_%ǏB4۱+R&}Vk{ TOBz`ПSB;x#2Ș~|L~މ{sY4|z˗_q;ڡe9Ji$eTUxBrܬo֘: ɂWG0VO~-&֓qB._Q [:nŶmPy.$Q`Uk@R3O7Xf "h!ɎD¡bi@OOH/n9B?{Z)8=#t[6% "hI8?=3빗ԟ _Z``rO ,iRsqҡ5~;n=+OSrSLs27GkwK&O C )Gaa?+ۧ:rzޱVXJRD2O]M#^Ƥt?p'1s=݁h1܍u$eb` ]bgD&KM=J9.1A )42OC=ЁA 1k>CAKB$|pn#ZSѽAHl47 Hס$flv5.D2[_9ƊryWWK]g@Rh$-8yQLًKRF&ع"hI6ƖW`E0*NM.q.ғ U4@Hl]Xnd#N7 @xnp.=-@R扠@Z4{&nXXHH7BGJoSo"V=(D2OƢF6Ht{hhdّ hIgpW|[^1q}P=5݇L=\9Tz<4AӿtW;?g1'*Ȁr}_ S5Nn[zB˦'?+S gf.5ﰯ hIRHt{t%⬌N;e&M ֘YSp)\9dVy'^gha_A )G6ihC&2Ή?Bw+i7Ōqj&ӸL){T?Ĉ+?^6 n!jM?MriiW\(斀8ڈAH 4cLP5te+,"hI>F~0jLW̘?GKS"hI8@ftOIg23 Ȥ !#h"8My !"hoӓ:Õ4AH 4š[^p1\ zF D2|\`4VИ:Pq!hIÉ\I_*"hI>0&FM!"hoSbdf#+fFXbn$@RO`6fwfAn4Ax>+4 4Ax8ԘH=!hIgh3NA_G7@RΙAwn4@Hb}]#B~y F_pSv&4VW@?= D !Hĕl|AHzE_#2"eψ}b$@Rٮ<-tn #h 6ʺOseT4@H]tegCZD ΃Ƹww@RFAܹw  Jkؙbr/C )GB%@u>hn ;C )42|3NI7G Q8Al =$JB!#h 0bh}}&9"hI'Sz6%#F3x"hI8R4m#I AHPEWЬ/Dzxt&nY$@Rh$e.AB5OrwC )GZԡBfS2t쬟GفAHl47W݁YcLLAH 4 š.ir;oYw\}GNބ@R,T4;n U"c.-s僋AH 4 š Rznx0} 4 A+4.fiq"p6%#Fz9=cC )GBeڐC%ֵ͔\D,5nFcWjn2νl >@Rh$e._5=#`"_ߟ:]}C%.$e:.B53A&3P@gQ@b?bxK#An21'^EP̙_!vvDB )wq0{T7;B rͽ9ux] 4 A3qQYD<@vzf7R$rВyup'f*sae/x,TCC )G̖W }02 (Փ n|mV̜9!0$S,:3{l=p+Jށ@Rh$e.\[T齛rߪgF[]嶎Y~֏r}4q9ZA0yŽD|hLo`rЉ;qo޹`WqNAqNcpT⏔[=pD2|`B0n qGZ"5>h95:驉'qz,}ҪR+=%81[N4,vuDB )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4B )4@&\ endstream endobj 28 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 14742 /Filter/FlateDecode /DecodeParms<> >> stream xyxTwE"ȾzA*>jji]RU[[j)^VTu  %',IX$lsxəIf=YY;rE]vYfffffA=|ttttts\m޽{Yw^ڿ E@pDEE;;ٻwov  _iƯC v3g311qʔ)r{eeK/4>>~ȑ+Vۏ9ҷoߴ?%%}wqGee3--->>k׮ӦM+,,ssso椤_WgΜRwv\C|.kʔ)wo?~/䒥K]6555>>[n9q}UW]%߿CCCyyyRRR6mnq !n.k.!_.˿f!ɓ-Nѿߜ!劏_~yllGu틎G)9r햟'$$tҥ{7nBov7447`{Wq=>L!DjjjUU].ʕ+-gφ;O>۷[<"hυCB|֭Bٳn{BB;vB\s5n/رcnG~vĉ^xAVTަp):,,cAyٲe9֯_t\ BLG˽v١CΝ; 1@4oBr{EEūܹ3##C5m41dȐ) @;_W!ܹs˺꺺  !yȶmۆȨԵkW}˖-B1cƸ!DxxW\1r=k֬ƏYK.R)z2@WSWXpҥKoV۝z 7^`Ayyӧ{ݻO6ɓ^w;v<~^98ŇEVkYYYׯOSO5N~_?YYY/>6>2..M6=<ӧOܹeKKKs/#GLG^LA󕔔L>k׮rKnn^QQq};66v˗/׎BSܺuvÇ6l؊+={\{ ;v>}zQQϗSRRڵk7a„%K$''}֧hdKYfuUUUv[lllJJʕ+odyزe˒"""KCA˦K/ѣȧ~/֋C=F~[|__lllrrC=TYYiq0ИHBPuЩ.--ݺu2N8!+=]TVVvwN֬Y#{5DY%2~oC. III^{o~`ďΝ?DEE RRR2uT;y;] 8g#im.\8lذ`b„ .B(4( "@h$D(--ݶm[|||UVV&Gٳg  g+EkCF㏿1c^=z[ffE]?)j;v]V:tP`P "@(4(FB @ܥKo:zhuu'|Ŧ+A@$%%}W98@QhPEE@QhPEE@QhPEE@QhPEE@QhPEE@QhPTD _ܯ_?Nɹ|81??>G֧O*w0aB o Tq(4( "@vC ܹr޽y%%%(@סC|۴iӒ%K&Ơ7O'@p>}~*ewq@QhPEE@QhPEE1P@(۱cǪULw%&&>v.2zoѢ5 mذP}􀡣Z2wM7;۷oO@F@\.?]<77"##Oׯ3f.+oiܭ[4}?V\\}2''+///O8ӟ4x]wu-;+t?077O{1!G}g]vرettCΜ9#_ ]ty] m۶ͫKJJD2??Ĉ着'xg?Y&MtܹprΝKIIYxo4qĹs\V(772,,L՟444$&&^z]yof]/nӦY111?x~^ꪫt颽ܵkӵ'NXn Xy;vرcG!D6mdɑ#GΟ?Xn{ѢE3gj/o`"@Vz5gΜT;v;õj!o7%j]5Ս9]x r-Mwy-BY~̋>|E -4Çᇝ:uBܹS֮M4)1[~mڴӧv! PZ||gϞm^PPp C9rݻb޽O<lƌ w'Oۅ_~y߾}+W V 2k֬mʗ{Z__/oV8Ν;ӭ[7WZ5o޼cǎ :^0`~ֱcÇ !۷o j`KΝ_k+;/Խ}]{;fq#Gk׎3楗^6mZffJj4iRMMM6߅ ;v\|yPK״/99YQXX /!>|w5w/((#Υ"mKuuurrBt׸ loۺu#ƍ'x衇͛wMbfÆ ڵkSk8qbĉ :{ʕ+e!7lPVV&8}%Ky{ 4۷o:ubРACj8}M7]s53gIH{1cƯ~+뮼JMq~_!Ղg}G'xEkZXXXbb ЫWԩ,pxx!C***a+V\gG||ĉ wS?EFcJ׮]P#66VCϙ3^ pӳgO:KKK=͎Ν;zk۶mz/ag\j|w4\'OVWWGH-dx#F"##_4 6lԨQYYYs̩HLL]/XBw="@8|A|xԨQ4''GN6vgyfƌ.wbcc'L7߼]tBlڴIڲeˡCFMqq-[PPСr]q◿P____K.=t{gE믿6l_,7r,,,T://oƍETWPPPRRaa6͛7oڵr;Cؿ~~~K ֬Y/ԩS}-Z?2--7ސj&??K,1gϞӦM~ay挌M6='rrr'\x׶x{wڕ4k֬Է:a;wl(==} ]^}jjj Ļv2Vǖ-[ƌӭ[>}<:<<|ʔ)/~)Irk׮5=㙙ۿzzzxxСCm͜9s̙k֬IKK pB!@uuu~ivvw1rȬݻܹsĈrѣG+++훞>bĈ:tIMOO:theeÇSRR1qqq]v|]vٙ3gJJJRSSƢ=zl߾}ԨQv0`@]]]aa!C1ի|{;wѣ߳ge]V\\6}M6}קNׯ_oO;t0lذvM81##c޽uuuYYY?pFF_^YYyСAvU;w;wN6צM=zȗ;w4h狋SRRv9tМ.2**+l\o߾uܹ3'''::z„ Mھ}{nnsnرcĈ'N8vet"_joS~yyy:tHHH2d޽{xСۻq?^jݻWZ zwJKK.]zw,_<33sŊ~ƍKJJ80{솆c6~ٲeKaaΝvǎ;gΜ???w߽; -*--}Я_)SG}衇JKK.ŋ[n֬YKKK+?̕+WΘ1C憚g.[7޸{ofqq%K~ӟFGG曥/={XO>O>dVVĉ{9nܸnkuO>d̙ k't^^ܹs999qqq񅅅ڵ?~ڵOHH8rHaaa\\\aaaTTԩSN8&),,l۶\>..Nj!kDD}TUU 4(++KqW !dy䗫jhhs=s-X^ hPEE9,jƍɓ'_dg\:k.]![|@0͵}2E.k K1rcXz V'OЖB4۷o_DDĈ#'NXPD}H#@SN5/++>|3\8Rh_>vV4ʖCАhzkc L uLkH 'zbF_ȿ}ٗ^zC+4[wXXXxxxTTT @.rPON -~ ] /o4tfcx>ϿUxWVWWq6l߿??a„/BΝ;w\νk{knoVihi?6OC9 YoC+O1GcJ;]V[YsA uUvsxG}`ݝ:hPEZOڑvMirWc}8>#EA+4:99!LsU+ڑ{c,NSk >\p~Ӊh/S<6> ԩ_iӦ`f++EUUIl^!DŽ'.>n}  |aBcz5Ň Xu; ]:hP˭ʎ sV75rqQD4%\-10}&hZ8{ɽL/n8FnLO*9 E@Qo$SXlSdKk{j6۲Ҭ[L7Zb=+d.dz4(tI8zsM M^'fcm?O#STW* SiL'1:G2hPE`E?hvгS O/}`炦zUo,2hP38k(xI ƴ24$†26lvLj)։|i|F5ҲȠ@QhPUie$++L0r0Xh\Iw#EA;C zdf=eZKi2k;ڙע69:Gȯ m%52hP49ک sY2 3m4$Ju ebV<륪LL¶>#E@QTq8sWM̆zznϺr3mWJhnvSEUM`d(2hqblddg߃YZMmjL yObka2hPE3X?͓Of WhT`Z;|Lsg4,}rieƴA,je(h+kӂN'H_|F r`Ms2gκ QtРL`LHQKc wڻ[ȋH.ٳ}qGC&n` iպS~hh2hPu`= !3LsC:-sC/aDIrCi5^nZ1LOC Y]2hPEN;Gc/Yϡah iPfеje=5B'5l׬:f4(uu3(̙Z|5}SR͈B辸ի@1h| cd?!3XcڅD ժ9wgF~cF"S]O:e;,i$:#E@Qe|X+), #ZGQ|46gg)S}M8Ab u~Ƞ@Q+v>L˶Dgv am;{ i lr@"E@QTqK?H禃$f(X\|hqCgqOӖک*A"E9~.[?a5ӉM>q\}Hj駍m|k1"^Y-$AAWV*{MkQ=fOs7;x5~ߴ^4Vqά֗ױz`0'x␷k =Ϫj^h>2hP#'-c͟)&YLJa8E1^-Ԝ^wh&2hPE\)&Lio&=Ў?hCӞsBRmhW5H0"7Ze <2O͹c4fo > E<-ynvRZ-HNg(~;HDW_\A^PvRT[AD#aAvm kϦچN}n3Keg E@QTq8a g=uZ7dVרZh(i_$/]ǢiÝZh$ "2hP9)s63Ɲ d(2h0 Sinvi'_mˇ:_&A4( ~gfgQaMok`LW̲t!,CȠ@Qd`X)e'v0FBugv 3iX EEQ0GZ=:k k-VQh[0TXp EA;aRI|t}R0Ih aɫ+AȠSʬDgO}uVrC90Ư.}AD "@pg5JΚ_Ԃa:ESR2Ƞ@Qd`*֍N+@),d(4(*gsަ6%?p9BR\gg K ko~]! E0!0a0 ,4-;0#IDd(2hg(p(,lT#`Ƞ@QhPU܆;S*8<C" _ 4( fK*6g:]{©EAȠSn*iqq4͆>'Ԇ[Q`GB4( W96#f? Okv3N e^}R`z Zdߦ; EEQš.Gf10eqAt$>M[˴ Kcz&Lf}YL4]jt*A4* E.ƺ[X_Io$GwZ˒.:XvԷ{!0Ƞ@QdPBS];xh`ܖz /4Ec(F=uA(8-d:>ۆu d <1Sk'G "vNo͚Ԧӳ3C," ҔHZA =Lˣ3iL?7>aD4( C]w?Zϱia0N/Bٳ/82{Po|'G5-~~ <9H{ M|=[OaqCHjȠ@Q.2܈Biɚ1Gk[ t!άglݫ&>=2hPu;,B/q EEQš.Y3`JG l AȠեY2h}ll1鑂1PZIsAȠUg͐&gS~:Lܘ_\j2hPELy0S@#Ƞ@Qdg7lv<4d K zu: EAK&2/62N3}^4֯ TQ4( jU]>~6g؛톫Gjݡ?ZNicZv\7@ jt3ng Q5['42_6| "Ϡeb΄#E@QCq:Z~CcmG; 50MFC˘: S\1 Z őA\n;e)S1Y_=55N]zMeYv[W ZfS4(:hu/6?Ff٦UvrmCW k/h}u帤rcLF`C3l_S/,sRO Uo8G "@PEdjx7c`Q߷nNhQ`4m+eZbs]Z-^}/Txj$0=g$t2hPr履*a]Qbif);6=tX3\P0Ƞ@QdСLG) ~qvfCA(809&>EAȠ~*_B62hPEz/AD "N7;4( #GMsБA(8 T! EA~dgɫ CB4(v] 2hPEE@QhPEE@QhPEE@QhPEE@QhPEE@QhPEE@QhPEE@QhPEE@QhPEE@QhPEE@QhPEE@QhPEE?ta@ endstream endobj 40 0 obj << /Length 1087 /Filter /FlateDecode >> stream xڝVr6 +f*/Ңizws<&v}I;w[GJ`"]5-f;s_`/Fq]I)!nu+yTE`F`H2 N| n{Eީ#=KS๩U(l GwwtS![wE3bڛjB,1Mh7evĿvk]B pO!%=fzwFoQPy3$!-D_}Xv)&|zt i0E Iv4[G@<$kxdSU|vΒ_IK&0Qœaٍcz!) 7LI#.1KM-"^:#j,gJ5Y X/Rk7,}_֟ʫD)s{"d\=fxp\ƞ8IcB *qJُB'SJX W^L)ԺhTZ`%FIU}&MD]LYt oO: Q#zcp;@G#Buz s0!#bJi|vk'Yv3d&f0$ єryt: lZFhF֥  ,۠-ti9i:a&?>Nk;b>Q{ZC2,%qtV6tvH~9VK4 iBx"oVc&@Yl AᰋK^-!NQ'#^1jts˚SCH\c[&mtQ|2<#h5υ 6Jo |OᮥxEV"fJ1DxJDžT@ ,f<}HG3 endstream endobj 32 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 27034 /Filter/FlateDecode /DecodeParms<> >> stream xg|Te${!f "* t-6Gum XiJd '39ϋ Ej$s?b}zvv;<0`~f}C.z/_$&&^ry@As}kJbChAd[[[`ٲe;v0n8WWW`AAAEEE===MW pJt̙3AAA7t{ |Ǧi{LS]ki!!!!@EEEEUUU@pp-A4TBG%Zh0id9?p}|}}Ϟ=/ٳW_0c="#FhƩLJtq9$..OOO?qݺu}5kEbbbhU7n4M}{bŊnݺꀝ;wx{{]lk֬yzyԩVWW矦{z'O>>'NJ -`IrNJ6"-`IΤjlr]"Avg@oE=FhA,qi5hA< )>R eq-/[Z@] Bqz-9?W!H4N[Teq0w!Z`ds?ֈ-YAa#(Rfz] 1/D@ >> + 1!кjTQ. pR}$~òTF%nsh(D@ )*h1l yЇ|hُ~l,6 tLBW B1ˣv_G 9}"Cqp_7=I\ƃEЂ $eNEu^Tlr|p{])@:dw 9~ 1)E`K$K|O-pE jSuОEH~/ٙIXЙ!8_$: ?q}6KܖLlW,?vtF 6 i4Ѥ> R=u$+9d{RDL8C=Oz}VHuWw(b=,)D@ ` e>cObT6q#ۛ Cΐ0."}ɮzN [Hʙ?90$ 2.=,ijӆ45-B3TR:aޓP2{sȑNx yrS |bf=8 Vs ߃$?.]i*~`IU*A\A A5P!#EG(qԅJ'<H` Xc۸G/[p*VobD{J=Zʵ.8A0$\tYhϢJn?HzdrȻMH9q̎XBעŰa]p>w{]_Z2 x_1ԏ'\B_vWܿhA5m&uQF)sSzRXKN.x.ԮZo U6AnjQ1dȃy-r/P`ofhAJ_uF eބjp ErVA6&'p˧Wݜ5"Es?'s]l.w1rxXK/3M`딄hA3֡9 8C 7drs_TYgISU `gKPKHDѥY\g-a.JHgzv'),2>q 6 jN"A(R=(w>ڳ`9pso{O ,E$;!77HjP'u)+9F@ЛL>_@)5㠊Czdl0oRD@ `v]>Tzrs">nGQp.s9xm?SBnCr, &1G3/Lr) <=[l-D ,ўE?Y l ! GC ._tR$6t.w8a:4,eCN2NPXQMBoOBҍ`F GѨ_ ȰY#6BAXX˟ƈP(ꓨ>,u>H\ Xb@vnHv9sGݑXcp'D-\㕢d! 4;^'ʕF}5`k$68x Z%M P_6 ]&TTQFĩ;N=p_)Sp9]BΔS НpWo5YK(n&Noq $$w %+8@ 5^dȝII72ȖV-BcWC>:68ᚌ8ĩ;v.(.LY,'JQvps }™D'͵&_)Vpw'[Ovľ[܇'լw%zpc|1R WVn/MnDFd8vNp>Xlu[HVp4=J/ A֕}Do3㸡<^ѕ9M $"tk?E} #5 ƅ@^`3}e6Q1D@ P#RPFFd 5\t!M*yguDp'19I #!(_[ J?8Qۡ=-ܔ[=E49 Zr73NjIM|n]وЂ6JtJA}Q oGpk26GԒMv' 9QΖ!I8/gF75uNn!mY~~tEL$uPC%6mݙ>U&9-VwgjHR>aDscFâYU@ /ZhԨQ{[o5VTTL:u5kּy(C.g(Ez|},tYh0S_Mc-FͅC} > +TE@6E/ͱ}$;9忴,S;A ORCe rl|LY ď&:v)^jN y_v ޺uĉ{8Ϟ=1~x`ʔ)ovk &(R!tWGC4v8a؇`}hnU*j(( U*JT[I^5=H^$_W|\7ik0`O6%k/([lNHMlD`MlRs2\W^kCMVYYY $I[?k׮F2dȒ%KzœTK6H5 흤G6 mk*t9(`;6 8%^9ytc}=8H ͥdID@jFl!mqFF,6$",6ђⰆT5NiH0Jo1ؙ-3Kj+UUUn-rssJW_}u鎎nnn_}OyK^ȑ#Q.H:J1TQ_Y4ўAE[/}F~o*RϒZDE jeJN^x6Ձ0f $گ!qwͱ9ޚ!`/I#`:y(>_ytWDfMSeDWOƻ1ԅS*qvFnq&Z ///RizP(rK۷/ZQQQ|ͭޚrIƎ;vK6Ν;5j,C}y+D_ {:18D1bCg:˧ܼ ڿ匳=B;a #.n*:SCc䟠8(wCF| 0P`c9_+ !ͽv# VȗP(pҟQ*fzy~|ؼyȑ#Yf=徾Q`$-3 1cPNZ#aP{a]v~za +-YQ]MJa`0{#BGMwdžA.A7 8'(L! 9')4`pFȽAhF7P IMuc3 ˾h0ZEzС%%%۶m.\8m4ݻw'$$駟1cFNp.m: hΠ>./#'nظaJ387ȮCZRKV9夗VLZ gJPj/`//hDkI$4jqsAڗKd/B% *RT]s\ W]I:, h\jժYfUTTr-3m>|ʕ+nj1qĕ+WF IT)F} 4?7`C'{3 CAsKɯp.{ؗ 7ldDͱ{鄗3AJSF%uTQW*moL #v]  Mj?t5zJYQJ%(b=W9sYU@III, zꩧz>Zh{:4PG}acT㔀 VmE$^JZ YNf9 7 c@%ڗ(Vy4 J!xѨy^HJMנ#dD#}ͮ #>R(,'Zh'$=L 't9r^(oSw|g㚌M5%j5dY {cxGC/]n)q h1Q|}d%3<=vD|'AxȝIU(T͊:D ^.'uLXPP@%ma1?% hRќPpO4 ɽ! !؅S{QʮYְHylm$G5X?-i~j-cQFJR)ʢt[$"db%FCZ%˔l\¿`;2(C/I ~toō@sd:ZdP&!H$l*J -8jq U\:Ȱu&ɏG\Hv%َVxr$|/o_;;-q HU2DunP=so!E{yWSYǁYT5lbXN~sU.oxlIcoE,ֆ &"1nt1xE9Z@E}d$' fm> K$"J dW kkX!pG /xr3ڦk*^}]j4Qlv=58ĹNݛyul,#jȩdYΔx8ĸt "1Yƃie(~2&S^8%2C #H|m;M@y-VZS%!~<8ڲ׏>3w)"З@ԩr05lw# !_ @6r9^BTld ӍxzZШ~3;H7`A?l$"b͹bCQ*HŝqV,๚OP;-zD@C†m,>RCb>G`۠+? }]F]lK'j*9U|a !<:n!M;v-6Qs,3)OT{2&(e] Բ@_zp3-qվ@72g]vBBA}aPHoW`h?ǃVA76!ȕZY="jr̢<,*NRx|hMAtD'._*R0`;s-[FI O>i:@SW*[}tC6+/xl= 8Yȱ|dSuep'`X<]s[Lퟜ(\؏G@x:8jVNdղ=l/T1 ԩ殣iD@GTF#=1iEgQ֥6|sqk3 Q!0=Hq $`<9 @C Am HWm1 ;g>/k'td\3XV&L؊b+`_s<"d'adj?F&3(߶@B^ ըQ( w4]{*kq|1P»:rI7O&e3$ΞI]PnkT~G2xߋmhrn%`5B(IbtW"2YO*Cbh| NDz޲}@y5+E +"ԝꕖW<p9SmD_L巔&u'nð j$E>ʊ"Ix2 C9 cT|ΎULm0~ ;\xeec9_TJBH\yq3.UV?hLС$&ҭr#XFH&)^wc۬i`GXyBdX0]fӠ_ٵ2dQk{>n5'-Yr|y‡ao;d^{v|Ut+R9 &ı?0gxeb#k< c@~#VsWW5>H g4*jV(a-!˓yh6o{wsW2D@ i Ao؅%> ki%g3^?n[43qj8#דB8zaķ[|נH1oV Ξd;mim\5H3>#Fxv&"[,EoP=6.fVAaO&rf tor.2~oE׃$:uaI*Rjߕ#yZ׻)וكx` [Ѡz'쓉D#vfMfm sg;=-7gR2F#~ʛoRP|ފSG~8S YKT͟!Il8Ţ8̸1ݰ73[H{)}wBZe1M›r&Q<`bRS5ݻ2%K>W6/ܛpU:G9UD;/cVϢ<MFJiFTZR>.u'-L2w᭷pw6aT3񾗈/aJ{du$E݃b+[Osʘ6>5)MS_E"Jb('_д>QhsFl1.kΤ|0>[&%|]ك1-{2ѼU Wp o!Iܹ l@tc)y+C˸ hU*>GT11ެŨn\ _SQ՛?xj4]SJ _|O&E cI:#I'˖-xy1w..lD@_.wɀ=SS-M|q=xvgKOS+]ԱtϘ'ff%?d{Hg2o'<>q5sE@_G[2| Epl03//2Us1dp@8CcH'@fDykYknr(|9~H^={wsv|D@_b3u'cڄ F>k(W2?eg%V0f+`M\)`c|.G".db>?g$Uk}U5d1%M^ʴ/9͐8޻lY9;+ٙzJcY#z4[ӧ; 瞣OsdD@_U մt^'coO۬?rU͜~[>|)V 6f"]x]֬ɉYx]}eիXBkk! Ȳ gLBz ůdž<*2>2ݤ3PTC_fuZ-VO?ߏh>u"@KlFۀyqt-w1 '}Ů͜6`L h$cLcЗYb.EPx/.]X3:v$RիyIORddJd~ >=hmaVg]CLΙ3O0b$"/?OpEFؒƃKHe$f`྄6_sx؞X~w@iZ' 6K *E_4&mdEQb7c]M+H9F1nG}=5<^n 79H'=={:#-qƬ=f v؇2xcZ\b99޸<˭O0x ub@^柲KhxM~OO-MےUvq] kʮby'' g@SլfJ8f<<6dž VM Xu@W!M;jf3h;R>J3n;RYԑGM.8,''*~p0ǬFO>)+cH^z!Mzz57>L [it+94?Q tnSq(yXl./P(3W^a64u٨1oxu{: %VnTOBMC3JCZ4x2X[Y+ɘ2g!15Y+ cGK jײªu!Sc\tnQjwFkRSw'<>˓Ob]Ə)[+y_W1z4գc ]ug.eJjo<Gk!`!1 (w\F&| *t[1|1錪G'Zg|9C̜I.Yc@F^g-y#f]w{bfF2>x9X'ҹեr%…u8Vu{)[L\_g6´F5/ٙ}hije$UǾh~re~ٙ9sxQj+%-aN35xq4.-7&}15/2Unw͗Ss4kgar:>gߟU I:lӇjTsvw'dMx˜Qsլ"_6wEFÜ9|)SŲV|f~Z5j͔-ŷ%Ծ̘W[]Q-[DKVSTĢE|)ee̛Ǜo5,Ykͷ=x`޽g̘j/y7''gĈ^^^TPCqHFjބG:-sG@i,{㲗Ηdy.Ox2;YA*ҹUH[2}:7ĶmHg *m0ƏꫯTWW[0vؙ3gr-gnL\/B4/f 뭈Fn+$z>iBVlf18嶈ZAQ2lkc9ʕ n;UI`Æ ݻw7޹sg\\޽wަzٳ?9s&ORu^nC$Td4y R,[3oR} U(%דROTeZ:#G%ip%5u@=PFFF+UHHHʒ$O6mZttw!?ʹ v Wq Ύ綯HɮtFqcH7{t6ndTq3i!Ѫ*7UzR|„ +`*/K'Lywy%Ν[TTԂK'wDB%y"5@L'Yʊ-L#yu}|7o,I҂ Ϗ~1bjPo,}=-pƎHlta`'֋tn1+VDz:?gtHZ%rU̙eoo?o<Ç۷~{gw޽t֨1+Nz"\[4_<ʌer-,ZD^wй3ǎq.Hha5rFZmz1`#GG7BFu෋uuLtrVzYZ6IQc6D\pgT(vqطŋysW#"h!;O&"ں2 iLt 6eCu22vYq]`w4]8vq#6?ƐL3@icmZ[w<8vvlFV:ED\o G='X׻)jM6=E1A>8p@p䎯?Cv3?l9BBFHWcD}jG ]N;t zloΝDE %kjjο~ڼ6Ro$zS8}5:mUW;#Q} vDv(%AP(ضW^6Yti 5Y~֠_*ݑrUů,ߥfط1cpue]`qhuQd2\ON.12/HT:Iw*u}#!Ꮻ+yzaTc=]!v]Tb ,_e llDRDAM ?`llFv6G f*_q&-ѢqtJv6FơC3,\cC$@o4_y 7* }9R]ʐ|MM`-vݑoʕP(/Ψx\\ýFqEQiC\daxCcO¦@xJWn_G_@A3DaF`ܰd lgz)OA?~<$$?>b"DA>ۻ[n-Z={3gĈImѷYyiB!^.z #Quy򧚔J_EX-; 'ッ+="888>>#i˙LjodߐqZ縃5WоͰGGw믘7L5tEEUGXZZ*ZI%Xr%u0?[_Nڔ(HChvؠ+~y1dchٳg׮]+bZVF˗/? JU[y4D2fl;=1],L`Mj? PĠbm%ΘQPMy*F뢣EjҤITo[nmѰ [K['G^`uO64{bgqV4vVk֬X﮻TMOtAAX9R)?E-f 2GLf;R (CӐx%ee 9V:;sz!* WI*5k<m׮]M4ots"IJnbܱ݈g~)%oXlv&zDzeVXd6663g4665k(i0ny`R :!jc8[iG+WܺuA_ZXX֭?ٴx^?<>.&#0Ɖh'?`PlKp"-yCѣGu_oܸqNNקN:i$iI,` "ưs| cFX>{zoپ}{zw/sΝgk׮]xxx͵Q*?sqĤ7lϯQ#=!-Ȑ'*T 7+-ŨQع3f`b·RM{bcK!s>dgg;:uZdСCRʪQή_~6]@zڊBcN6E[7kb'|#:˗cgugϞ-j2$fpS^H<7FrS1c VCχ2Ѐ[п?RSiydä{޽zԩS0̂ gc n#Ŏ bc(/èj1+++Ǒ&L; P '+R{*2BGW}+Wb,o&&&ܹkWC ' ;Hao>P 8aLN$y?۷wolgg~ǛUP#7"Sh熍;UT`&|rsl>F}T?722RT.]TRr7aVO9zR1.{ lĎ#mwHOGس9CnM-^8s*79X @d'yUKgs44M[_ /:!%ݻc*gpvv~a?… .\<:ǀ !c-F {*,3'؉MaH~$!z^Gq-~#Ci*ƜrdGHSb~DZv-ۙF ){ E8dNnTn6nS#vԚ>z&fi7wlPiWWQ%KPXJ%VDP-;QE6cX4"gL\/?o-e LA+믋/V300O_z ݻ׭[5k8::j!Rq# cx?ŋ:%K0i~Q(aŊv-7ZW5 x~A'''Ϙ1ŋG3gNDDJ Z'P3;a؉tAn.ƌoT SU㍞'t￿b -:m k{;993F}._lhאE!pNzxsƎEA6mX:aԨQR*W\߻u&v"h ̙&,XcJ|P^^z IW{obFx'0N~|9l޽b#qk?bii9k֬-[<ŋy긋СYYM=xFuEE? ŎB/gРAw//vhSSS}||>>> b! tmaO&fqaN]H]Pm;"v"aAמR$db=D+/FO~w$'N\}f;Tq_ ;y˗/wҥP=aA׆rd9v.X DJ̜e0r$֮؁&U\T\W0A{AvP72 !f GLf;k@b"vŲe>6Â֢,,HjoLP_PO.ܹEj*lҥ0%PN+(so1Eb'/p2K^@-GZJ.fT[t _e;GDL,hM s¯iM&j:6zYiiaaF|<;i]\\ܺu묭ՃDGGCTf=o񝆬[Sad1ji%ԫWom2z,`rrr\]]4OXpqvQ6l {7thL@r""""`pSqk 2I.~4X DcЧd2|MːaAH>6b#&5B؈G$&"(8-ZH,WWZ]_r#G\޽anG!v"W&arWc;kR\`bcdXЯ(8ߙ% رzlg"ǫ)õL|f;^O,b|GG3l۶ȑ#Unj߾ =zE8=q8sG_!CcTIjj]^nܸ!v"_L<Sob<|pxf =8x3 lْ;br\C\p4o5p Z 0$9:vaffW_]p;<)xͰ>EcTZ6mw/ڵ;Iי3gry`` cccsssC6 >λ 99:O#, AK `^ՠ/(l'N^hQ``ς~,((HPtuݺu'y,gRN;` V `",_^ٳhF@T{_3gΜ9s~HLwF2ZzzR|-5Ò%xۙ襰Eu)gxy!, ]%[ct q@TGL;څV0~<\\p$C˖b"I,! ⍗suÐ!06ƞ=8}ݺHC*qQ0fbgo?ƍprO?`CP%999UnrvvnҤ1:6nܸXuyzzj!+S BL`D~~R0̞Yf٠D/^?zo7o^hhcǴSXOPM#QfxM8&` 0|8bg"ia 9#B]N#G;wnzzV"JAC@E +6CwHJ~7>: 6v&ͺvZFF>x`##C Zlʿ1:C%aGCq(D۶bg"= 6ҥK[>|؉D`8]l`S86w+v(IRŋ 77lڄa5T;lmm|-*((jXe]v9`|c7#GyZf&HN;~ZִiSAFFFFFFW}.~S Mv-̛??``V$'c$3ՂG hѢ]ZB?:XD<)1|-[RS',\`4o.v,=-[7M=xsv5q۷o_^ p >E;dl݊`eO>xѭDOԩgVj `1, iDEJ%7Ɨ_Ѡ  w6A}ԺR>#Gp8.\@y9к5fFp0|}ymDhA`2;H()ABƒ?AYб#f@׮b$ ^cedU$&".HNR 66h&!(ݻ^=`A y(X×֕HKCz:ӑ(vj(,_<[hMG<DL yXP_>LKp.^_UT wwtF`a++13f< 5Ճ=и1aa!N0""-B8p`xxx߾}G`cwލ7VZy%WWWmd&"]qqzԴ^zHuVi]JJJHjRnnnIII夤$WWW##jn}ήJkkk^ADB+rrrN8T*/_>rH3gdgm%"iMMM###MVNٳgw\///sss:uxzz~bGWh޾YfÖ76GpԎ;:::6h ##Ch5;vX>Ν;ڵkԨ˗ŎVSl}+kTTTnذ!))iĉbG>h̘1eee?IN>-v"|RqqzAh52znݺ|'}))))..0ajdܸqEEEaaa׮]4i\.2e'|"vb{JB"JM_RT/޽7(///++Ӄ:)))uU/Fׯ/ApuuU,Rtpp5WMd2A---XRRbgg'v`{tƍ*3qܹW;vX6m6l;ܾ}=}tn/^->YkҤ۪U=xk׮ R|}}߯5:]|aÆ׮]_jΝ;''N8bAͣAXn]ΝAؾ}{6mo޼Ynݤ<'OVTTٳ=uԛoNuY{<11e˖zÇ7lʕ+EEEsppx*7ܲeKDDĐ!Cj{OMjܹ~zҥK'O\dɸqkrrr,,,T*Ubbk^yUu3n޼Yf ( A֬Y.tAryz* =xA?'O/+]ezAWW?TÉߞ~{gggwQ B[lиqa9hUNNN4l033S&??_R{$//oر۶m[nݾ} pҥ;vWJzkVVs_QFiii匌 ³> stream xy\TSMa]]_]ɢ"ʒE0Yjv+LvJ˛PYfd.4\D\RT\ qDdaof}1<< s_"B!B!B!B!B!B(>ߩeJSNwk(vS0(ח*oPn}m'}Oګ)-ٖj*~nZo ž b&O(f?)<}Y[Y*>m[X7fO> )DʦO1 HL)6me}^hz]uӺ[ o]ĎU-yJsyo2s2yZ&>ZXύnZw žpE+D[>ϭEӕ7iͫkݴ[}G{EIE-{}̾ʈ CPΚ>Z7V_EiuN5HbZWh>~1L[Y[|!B!B!B!B!B!$xZ# E-ߥ8yA _EEEE՞XM 6W]=Gfh3}'-G)ƇpLEnjϦjs_mlJ\diq^^K_<}M]I ~~ExI^ uIQ_$Ũ/F]}1.uIQQ`+?7G]98d)$MVupkp!ڨ G~.?kz 3/Z%wՓ Gtd{//|=fzַ x&Z`^d2k*6vZ K#9哱: ͚[c$,0.gfAF^+HN~Hǻؼmz_%|mހnmG{rkIxS׿E'}\6/~__ _W[vwqEʸ4m?y̴߲$/Vq.@?u)[k#< F6ҟk\LȀs0sM%6_wQ+ک'/~ߪ {D`}箖 Luė́9Xy؉mo |oκIi:ŗ{Cb|2_ ͊8{}x.,d+HNU z?s5.o5>oŗ|ouUǗLJl|i">2 ,RM+HN_qرcJ4SOs;?VZ]NH_ |NXߒ=|^567)++kU|i&֩3߂'[|iv~ j6ɧk.A7_l _ξ4|9fomk'KtlF7k"|zNz%tE })7RtGSKgp]ܴ.X~:|l>yIK_{x}̟#/陋nw}}̟:侎ߗHjߧ ۗ96ub~o}~44wԾf{HTki c_K#I^(/oX4ߨr5K#Iw~yF#si$vX_ξar7VR_~|9}/jr2_vge8oDHJXR 2:Nw_CT]; G_ [Zge4>l?_\|?HZ!0%6ܖF7-_qO߅o ֖iliz8/}/ }ovOfcGH ?HBde4SX:{>ƗH΍E$/pϖWSS+)JsJ%S)s} e?^6])|_8j|X ?O5PeT ?iy!#א 2?i#?'oR?i?~aI{E(KW¶0b} |V޾mg:ڷ-\'QqXg}Bn5u>d/Wߜ)~t#pL}t˶ӆURRaC\}<~ۗNf{4l%/ _ƾt 柔ȗ1uiI/'C/u02'_OK}:RR_JRڀR6OYMW&V q9?ӹA~+VК'+X.Ң\? 9+9ȑ˹_6 &׭m//6 _m/2+p%l{;_heM˴ͦy/?_~}@1~:%˫ʟskE O+/߮?2-2|ۻxXW_#Q5og^_]aq 0肯WzOK__˸QA:肯(iA||J\dX\,=4_ރ{ltz^ _]IRRG֯/nn7>|i||#04|ize~/?R'q^J _EEEEm5n-Z=j{n~Z{z7M+l& Eة֞y/| _ [j{[虪-~Q_- EB!B![7*{^w췯('{j'.Gҗ]ݳ:;c^YY:XYf?wOX=AG/{u|+}T;ҙ%۷2і*ΞtScrUOo*gM6kP߬\=TJg=vݢf瘝n);UY{Y݋HkQ-N][Ta;l2Gw?"Jc\4 VVۑ꼒7uybD]js||iuv_IB!B!B!B!B!j] |9f8=w8 |}C;Q`Lo$y|ulGo8 B!B!B!B!n endstream endobj 43 0 obj << /Length 767 /Filter /FlateDecode >> stream x   !!!"""###$$$%%%&&&'''((()))***+++,,,---///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssuuuvvvwwwxxxyyyzzz{{{|||~~~y} endstream endobj 48 0 obj << /Length 1148 /Filter /FlateDecode >> stream xڝWKo6WV`H"yMڢS AQr-;n;Ғb%(#rf8͓܇.W3*c&[?g̻媔&?`]7KH~{:oH-;s=.I"D\A%h$ FA9 srU"J1XbPhh[ ?׿fERx~'Pl~ILVcavSd.jE-X t?qqMǞc8EJf5HT1ۨ-+?r! B c@DQwi?H Ff&)s?pSeXt/k~7pa.łuIB8sL]t}w(!&wg}z5=׮JNgͳOVj kp׼oM~k9~8U%Ti? o]I}3>R}fTY̕KihR'Ԍ_ >kyjG*gsGcPO>B>Oх 9/tcT endstream endobj 37 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 7306 /Filter/FlateDecode /DecodeParms<> >> stream xytTgB!HBZa l bE_sg;czϝf>AV87 JhP@R"4(E@) JhP@R"4(E@) JhP@R"4}l6[RRww6f]l6[ӦM/Ba={ll~'?حWа@Ϟ=srrD$555==fif֭gD$33ꫯnѢETTСCsssk+**Əײen_nݺЖ-[ȉ'bŊ䈈;Sܻ{߿fffRRҨQHJJyN:M:r}SLIJJ ݻ?sy"`[n]||ť"Ҽy:ifժUGiڴiHH'";w6x}E;//naaa_}-D΁1 aÆ5kLD|ͳOb}޸ThXG"矛SD-[}?;g͚eq8/ߪ֯_/"W]u2x/r{=o;w|s=}-"7o6,X@Dw=$$$c&OM6cvԤI3}fTT'0nq@#Fx_{3fhhh>|xbbb}}IKK E5447λh"ҫW;J˖-:^>}ZDIn0?~ٶmہHrrrnrhhqo>ݻϚ5+<N>WHffw3<ӳg˗{_m׮ݶm{ٳg1ovFYh\ZZ%"yyyyyy]t9snݺHFFF]]|'%%%ZС{X}P\s;v޻í[:k,iժՈ#bbbW%%%.˛zQZZ)"-Z(++;(g.q8;w.]x-6tPԩSY_z$$$ >{cgq ֘&$$dƍ7pCiiiuu9s~`iӦ兇O6^z6mÆ III͛4iҏ9qL6c3{bǎ[322-??[nW^yJB$㩩ƘӧGDD/#GZ=~4 ]tYfgΜrΝX=~J%!(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(ezK[?zaG$ ?Ҙ[=W4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(NOOҥKddA .--}͛WQQqM79m۶^s5AAASL)((z(V:t^}'tرe˖֎~@ʕ+~zh8qb^^^zzzZZ?0NnJMMݽ{wHHK•+W_466666Z=#CCC}TWWGDDX8!g̘a:` 0hP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhPn4\dDmS8'@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP*0=gΜoq?2z"GziiiIIIZ7n܆ n޽{322 `D\(V7n\DDDvvճ? kᕕ/7l, 9s,X "]vѣr ~ tttz coݯ_?=``XÇggg\޽{/\h>}ӭK@@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) J٭kocՓ >Rc"\AZ"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R @GDDX=)`vǏp8t@o߾!C\y~6jRRS#FYFD;6a„׿胝 KV lٲ#F^x&L[oY= W]vڹs K"okz8/ߺ>|q֭x㍽{6kLD/_~G_|bŊyy< 6\}V?ͷ9eʔ:deee;vvϷ}wX5;w"Ҷmz?rF@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) J٭6$?V-7'ȓ+hP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R @_wu۬az СCm۶``K/v{jjjdd!C7;gyKW4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(>rȐ!C"##8`8 aƏ_VV6hР'Z=n?[^ve{)bj>_%" sGYU~pWq,"uy<5bܷۡEʲSY"d[Ed禂vpW{??OD/pX\m"mCDdvDd[Q"'V߷lw:kw:ZY)"k5WD<,+>kF\p4n^lߘQYv̷[_m;REDdÒ5>^DDnX]}oo=\6w]'^*"[Y]Q-G6K޺ED-zx<5ՕYkE/?UUaYwE$o{V}U gȺk9Uy/e'<Eu"ѷYq?-"KO>DՊȦC.o=N67ծ'EDVm\?"r2!"7T/km:*U;Oȉ Ӕo/j˿YUWT_{US"rbssխbpzcoh"ƍ_z%c~ɢcLk.n_,Y\v31rK]]݁z!cɓsss=1oƇ~[1k,c 7XPP#c~;!Cc^{+WVX_7 裔v}%%%w\2fҥ)))j֬پ}JJJBCCw]__?qć~SXX("۶m3z]vu:eeeAAAUUU|n߹s1f…ݺux<999Ƙ֭[oٲt4h9kǀg?Orjkk>ܫWSN7667o믿پ}~H=RRRv{tttLLL]]/55UDƎO:twUV :t"/FEEc>'_Kȑ#92l0>iҤ<$$dܹ+Wlaaa111=ýl6ۙ|lvڕ)..޸qcrrwcǎ<9e2q|𫯾ZdɼyV^t+VܹsQU\\{m۶v۞={ٓlٲpKo*<<ɓǎ-..~kkkرcg̙:tԩ[ne999.k̙=9{K#<վ}khh5jԤIJJJ/_}ӢE y茌En}H\\ܻ;f̘dKf3X=`ŋgdd,XA4(4(4(E@) JhP@R"4(E@) JhP@R"Ҭg endstream endobj 44 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 5466 /Filter/FlateDecode /DecodeParms<> >> stream xp*X"JQʉ NO`бPusL:0<(2 S:ȉʩV(ATSJ a#0(!{&Af[6yB^v}3,~Rt: ^Mh (J ',((h- 9UWWO|xNonذ!J}{7n\AAaöoc}??*5553g޽\x$I.]zEL2%IS.wU2gܿδPMsZdի_{Κ5ŋرc֭^z?|w&I2qGnQQQ#ݻcǎ_W?*O=Ԓ%K{Yf͘1?rȟ#Fw}O<NJ/$g'9UTT 2K/]`A:s+++Ǐ?hР >#I,_|ӦM;vkׯ_~$IgÆ /oqU֭[7dȐaÆM6l׮]g̘qm%IrS.wUϸtĉ 0T[[$nN2g-((w3qΝ;O0ۻw}i׮]${1cf̘qU=JRԉ'$%yyyr_ he]aÆ-[|6lXw~s/_|Ŋwqǖ-[+~VUU}{ߛ>}믧-[r/ofEEE7zb\F>|[oҥK~~=]tIUUU ڵkYYYqqΝ;l2x:K.=tP c^wuo֣>Z\\U;6mڴnݺsѢEtWm߾=Iwy}U>m>MEJ}X@H@!{!QǯY&Njv z׮]__ŋNbŊy~7VmW^=xmi&J<[oÇϞ=z;L^*ustha>:XqlT( w}CǮM} +g9?t.u/¯w%KϼӘ ;_^=4iO5+۵?\/Ӳ?U//}`S7we%=T6(G._|֭[{U:C 2dHe˖eYI{>>QՁyTs }h]h_۶m79k֬_sV||Ƈ^ok9r@dʕ+$1bĈ#$ysS2=u>y{ph UAK' Ϥyf >n 5L?or6=r"tSH'}=Im:Txьcwޭ`}/<7؅C>aC %М5fwK@|jo-L~7:T~Hg@ V5_c}_4"43Ϡ@cӚ4@PhM#>]:thoz8Oڎ36v2 yTCϠf̘Q[[;}c&I}9s5;h%O8;={Ç3*(-Qz@惩nRݣTP뎈3f 7P_zq㮽ZU i}&M8q#<2iҤ'{feee.vf r|Tʷ%[}K. V^^~wON6mڴi7GmZ6;"6NuÇѣ55߭g'[wh;s̎;N0m3?UT\ԣ˙(@p EG'[wh5kx?]M |Zx [qcw.ީ iAȭ$sgă?~W3u_:ݚ#o\}[3]ܽ]#gEz_8ֶwlcUƱq}@{M%@P @%A 4@P  ~$ب7&bh1cv9Oi| (@WUU?92eʔo}ٲeM@ݙO? 7PVVӟ6 6|gt:Y(3 +**{=|_?y/KͣGbPj?'jI8;Bu?3YS[3ۮ=iV"$pչ h (Jh (Jh (Jh;4ٳ_|/5CcWX1o޼;ׯ_K/~1.Cc.\X^^~ʕ+_x' 'Cc|7)W_}\PsgzOV'CcܹsmVPPp_\\\\\\ s1@+ݡsId}3Iu]9 h (Jh (Jh (JL;w^wu7td=+3 -Z`+WLM!@+ݙ<@Ν+++  ;K.k֬Y`>z%K-[Vs9XuLµk׾+VԩSNZsȑUL7޽4I+W6ՒQvg~%h (Jh (Jh (Jh;4{ȑ=r$CcOƍ~}Q.vft6ck'?|x{kY# (CcONǎou]Y-ѹ}.9'oTkӡ#_7^*,joט$ڱ]Tjgnmvm~veOd~/W؈S\ӈ*>I+>{KMt$zбCnH$OM5(qq]k2,>I~EëO8\$IG2?_< I'3?rңG$߽=8;༮0’s:gֱ]$u3/N:}妌mpQ$y\q8-I}W&Ndʰ8\RpTSdG=zڵk=HC5kV۶m:um۶ &s76MCy4@P @%A 4@P @fΜ9ͽévy-,_?+|ۓ'O~饗>g=vؗV>A:j:kkk|<۶mq8֭[ׯ_^x 3<_,ΝE-[,Nϟ?p"~k*++ Oؼ32#w$3f-ҌùS]]p4;;w>zzΝ]vs=#G4?yǍk׮κu ù0gΜw}nS ù9r$N_ve555gp~jaA]W^YjUϞ=s1#}7ps>sݿΝW_}O>I$???Zp\uU{ϯAgp<3޽4I+W &O܌ùS <;5k֡CLNKΝ3go߾m :-Kh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (Jh (JhSGΓ endstream endobj 51 0 obj << /Length 2282 /Filter /FlateDecode >> stream xڕYK6ϯPTE :Ɠd!9#ƒ'J\#h4_w޾wveL\e]=< "Ϟ_z::z'2Y/Ljz.x%)M޿pw?>!'+C~Zؘj̥(&M2~a{~~w7wrw/mlr"t Ӏg,T.ѩUx9eگnh1<6>0ԻyXLa~[.F_]pC":J vJ}.jM'&>(l %xL<،~$U`G< 2*цU1Sgh&t-ǬGHa[IAfHYBQu+y$KpKPԇ] &@VƗ4!! ne pa@A4#APS[&!y y)[|O]ʀMqښ# y6 Gs& `&eb;N B:.:BZvK5>^r_oU\KyƋlݵȾc/9Mp2ikQC3HWze_y>{an=(KA%fZN.R@Mn *Xf:'ځ˕rˤ 4$.ObT+>_La<υel*44\(9ޘ, 3hM"mXvfJa c1 R[?9ĸnZ6v[4=p; vŒxpD CgA6R^S7zq1L00sLu_$p~3^L? E9lY"vN\PB2%q%H/=ePΗo<0N+q?LAF1,:Wځ ;kVt*5vn8r~sd$x1}OBqUsNpݤjDh$J> >> stream x{|e' PV*/`RX`y-"ȂkZ,캸Gge+"r\jA#(-ezVPR Z msc&fL$_1<͐|f |. "@R4HI7x#""Ue:tiPUU5r޽{9rg!𵒒:!D~~b9}リ 6tmmڴ?~jjjrrol6===..{uuuӧOoݺuRRҦMyyy]t4iRLLLFFbȐ!-ZHII),,tc/_ީS'!ġC,KiiCc8pرc/?駟?fi<-1cb„ .,//?zh||̙3M6x feeumŊrrrvر{3gk999۷o9sffffYYYMMͷ~;tٳg斕mڴرc={\zl=  ,8{lnnbq{K,ׯ_Ϟ=\s`c|+777::f8p@qԩ$''n:>>~ʕ6m;vlYYY=z8p~w{Wf;w\aa)Sv%պu츸87!>#HMM]bEuullٲdf,84Pnٲe͚5 {l6ۺuZd?(={ifӦM;@-[7n܉'Ο?_UU%Pգճf9rdfff}}fBvsbX,zVgxFFƖ-[bbby &4 !ׯ_ovРAk̼֬pә3g n:|E=^?&4{;wikgVTTԻw'x"--m}j;gΜ[ۏs_Ϝ9Ӷm[ex{סwܩ,//?|w PZcƌYt[o尾Ix,X 5}G۶mC׿uCM+>>… ^B=+WڵK1qĻᄏtx)AӃq4HI )$E@h 26ݻ[n8vX Pgl6y͟?b׮] \rˑ#GFYQQIOO_?; ccЉ/ȑ#wء^wU%66֫E@(26%Ko~pct/O&@*f;x`UUURRB:{.CY֯: ¼W_^M=~ii):͔Ӫ}fWv{CoFdj #JfzOy9)[t+)Uo}9%K@Cl\dpJ.znV%@i/տ @ AG%1 z7^%dN^@'O4ᄈ,..6lf>}s=g~y=@]Z&Kz駧NZVVrJk׃߿3gڶm)))?~ddCjIMN G1h*4~۶m+Wx^@D.{~駟boܸqƍxOjbrj{SzrT%5dIV9rM~ߛZŤɒL-`u2d DRC<$A@*>+$ =h Թט%=?r]ܩwf#C+YgF _b)EU=rz+1Wv;wN2jWUmN_JF_nOcd鄠z#:rr}s*ɫ|STiR+gG2emI| hu>n+V<ӟnZZnt\oYՏ{ɾI,:42Z?wQc%lzn޼y#G1b{キsNfmm E~zEW>2=$/Mjb a74i;bf}}넛oU2AL/sו.X`РAuuu?Cg̘1c f p}Z=w}6_|:t4a*kmzݵkWu?e.9+qx7gHxwHh${j4)x{J;8~XY XrEy[U۵k׶m^x;LNN~ꩧ|R.cǨQ??$45ꃏ+fWPPйs޽{ϝ;Wrܹrի^/ctt—x/cDDD0aѣrsn&A.{wDlvڵ{ ͮK.]tQ5$0M)ñ?D+ozZjwy}6~xժUsm׮ݰaØLex6 ܤ׃ "@R4HI )$el6;ԗ^z }6+W*+7lp1 P%%%ÇWf/^{uh㏷Q|)@(ib a61c,]4""¡YNNy3jl6۬Y{e˖8q'@қ,>MڵK1qĻᄏSN>BoYn:h "@R4HI )c%޽u։cǎIyM4o޼WTTڵ'@JIIՓ%m۶[n/5kf%%%M<B3YRbb /z;vru@ hdIS&KZdO>.[lٲex3jblVUU%%% !}U$"w&KAh "@R4HI )ciLbl6;If]c׿O>QnޭBEN;x кu몪*ky睽{*7Ϝ9?? Alv5vƍ7ne@A92,,,===..O/ P?:h "@R4HI )$E@h "@R4HI )$E@h "@R4HI )$E@h "@R4HI )$E@h "@R4HI )$E@ho*̲|:48{СC[hѿR@D@JJJϟbbbJJJ6lЭ[ÇifoݻM>uIII6mBueҤI111B!Ch"%%aM_|yNX, ncǎlw>._l234 _KNNB̘1C1a„ =z4>>~̙ӦM/ ӳg5k֬^z߾}}IKK:ujCC?9yd!ĥKn|055uݺu=Ӡ^hժUvvvMvO>}IIIFaYF #-[7n܉'Ο?_UU%Pգճf9rdfff}}} >>G0bX,-[<3&LhlB444!_XEmmA֬YSSSy3g!?~ԩz跿A޽sΝ6mZc-cيz_TTO 0>ݷo_c̙uַ~G)**jrcccO:s;m~lvlrkܔ XdɈ#wĉf͚yrloFGGlWv޽G.\5jTlla\}6mwqfʲ'Nݭ[\vmԩZj߾ƍm6[vvvBBf+))B>|W^͚5k׮]^^l_YY7iҤǏ;4Pj[līW:S իW#G},6ͧ0"@R4HI )wU}}f{fѫ^oPڕm}>y zeA} fʲ^e~3ѩiI: N9ݗ~:ѯq$Lqr }yRT 2&h*._KnfX 0s*.&6*".*s_6bf|2!*)"y5~,j~ ԝ٬KJ 6XWYn 4r|pkdUS^]RҍڅF 6^wHS4^Ӓ#NXI#%9rOW<݈pk0Cu )8jMW_}ղeKz}\ywի}nużyΝ;grUƠjjj˕;wܹs^^}U?3+++(BG[`믿~ذavNNJf|jz={:}HDD29=CY5222ƍqƸ8ڿLJv1$ >E{^@??CTTkK.8q“:̔]<#ځZǠ„=3%^ow)JU2̣V mX,wVd6; 3 uM;|~2,+\Scx+W[!:~d񅡴wKmi@qx'~zGU7r4df$2YO8+ɓV}'}~V!8@c^~?!4<6d#ĶL' @)A]q;nD6*>S?2\tBȿ4ASf"W\߁Z;w]^^ތ3,K߾}?S ̮vq{>]hѢ?//e˖vFcox Z<Z;w /0qm۶}O&ޱcrU|5=&'9us2dȔ)S222;ے\wBԜNĖv;8`O/sUTT}+WDGG/_|NADGR'5 V]gnܹoy䑮]* fqix ZqJW$z}=h{̬ovu}\ ezΒ xȻ4mi}#@iW$sYA@tp ^N]ܚWiB:76fudoTZ>qz !WHv2XKy[B(e hONmJRr_F%;@g AG[lvݺuOKK裏|T#@/m\&L0p?0%%Wz1eA?al6oOLL='7>Sn{Px]}p洣"c]~=<<|͚5'N5k??SSS? Or<.>>~رǏZ߿ ,0bC8elvׯ;vҥK3w~_J\}p1y}ax6Z3 u]EG Mk^!$|2I@xzݴ M +@ 7!}EEEEEEz&N/UUUy;w v6իWu]-RWWgJJfׯ_ ٣ E-pv^>]}}2f?Ç_ÇBQf+++B;%%gϞ>B2 |$E@h "@R4HdI7oh֬26Yٳ|zT!J*ɒ>;~V>M]qq_~ibzMԹszwQ73gz$:9Ot+%M2˗###-}]Mf,믿BHELI )$E@h "@RfӮlv5N.++?Tn2Yx΢Tk3&""Nؽ;wTn={Ժ t.]6nu5k& } >b3UV|嗕5/ P?:h "@R4HI )$E@h "@R4HI )$E@h "@R4HI )$E@h "@R4HI )$E@h "@R4HI )$E@ho*̲|:4,##b޽%!p𵒒:!D~~b9}リ 6tmmڴ?~jjjrrol6===..{uuuӧOoݺuRRҦMyyy]t4iRLLLFFbȐ!-ZHII),,tc/_ީS'!ġC,KiiCc8pرcm6 |G1#xh!Č3&LXpayyѣGgΜY]]]\\}s͚5W޷o_>}ҦN`effN>G0bX,-[<3&LhlB444!_XEmmA֬YSSSy3g!v&$$!~N' ?߿޽{+++Ν;mڴZٳf;??'HKK0`@aaaAA}o߾Ι3g֭o#m ;i~mb""(=^]e3+y- QIa*"šGX*._KnfTSqf]BTRpʚpkdf?ݗcF[#ìʕn.4L]F\}񂝖q5J)}oͱh> oo z/II[ FII4Pk"ޢEÇV@ɹ{@kjjL txx/ONNN[Jx+WTWWQ.cLJF>Biڌ[juպ:Ųk׮!C8}jnp=|/^B$%%uڵtx)AӃq4HI )$E@h 26ݪUVkXXX۶mM. BUrrrN*6lضm۬Vk״3E𜱹8k׮[n}ᇕBg?;~QP xlvÆ ۵kWNNz}ii6xX@5*??ի͛77 ꢣ ^lv\l}atlV: q,SSɊ- YBY$"[SoV_/LNmZ]֖frFiWy*V7Fyx%@ ?#"K@JwUvSJh%FۻQ_n%jW.LF9\R}lt!p_6Ľ]\H]޳/-Oo?\;ג'+f.1/EęMt~~~ZZr!~_ܹ8gm!ܛMQ5JvS:d0iڕ.s%RK/ɒ>okra蹶3W|E{?߈wOW^,I WOYwҥI&ٿIvܹʔ!%y>7:@8 Qdv}; EǠ´+ 7(7=v \ܚ'$,iޖ#;_8-Rr[vJ.ƨq"|,+JLb,ccclc9/..Vd6;_R"R3)\b7^.6(I'R:=R w7ǤRbyL66YR^^ޘ1cjfU01W}Hc~-?:a)X~qNŷյiϡHOs.ktAի56Jؚ~ Ƕm7_nnE02$ \YP+O2j{מ'eU}IW{F[{2\NvqM_\r=t}A g!:7JA,Im.^EZ_o-uƗLMJo^kQ'ĻYzrW /$t`گSt/^䟰&2vլ]ICKJX0x7F20M@'TYRog vy#roVnv{:$ σ>_rLmR !F/¾d {a*\E\|0͓^@k[t>+;|RqzI~y)>ڹ.]:p?Ey2'Y!Oxz矟1cF˖-;tn}v妇%0[H :'Qntĩ&Ơ]N:u֬Y'OtxB=!n\; ~ڹ_|qfͺxbV|M>\UO Z=w}6Sw{ꩧt"fU4JSYB/^u֭3StˍUo$~6` ߲\ /m{s\9ןx7trcJ|"g"x7 ՕQ^!$EBN%h{.:i!+G\zc~xxxxxak?q݁EL.Gf7|nݺ9rm۶>)@Ef;ydVZlO[0/Tn1][<Cfkhh [lٌ3VX)7_yE3*^>֡"aI06]-ӧUf7bĈ#F(h ֬Y裏mۖdç@1<?lf=2j<zh$䴿({ЃI )$4cC0Zh1|p P.^g)+kjj/ BN>yf\]t)))Qn1xW 4!lv=zR74X,/ G/)kl6/|O>?7<]fx"))k׮C U f'׿eZ= HI )$E@hɒVZeZ´xɒ{1cן9sF C,i߾}]vݼyb 񱅅_|e@ib~dIÆ ۵kWNNzӏ=d6;^@'Kzǔ5FϿzj-Sfԩz*׃Ah "@R4HI )$E@h "@R4HI )$E@h "@R4HI )$E@h "@R4HI )$E@hkF endstream endobj 56 0 obj << /Length 2487 /Filter /FlateDecode >> stream xZYF~fD(niX$%1I,Sg)rfd#yа]utub&A-8]'xěuƋbo?rۭS`=KG~b<::펟R㬺?@shvHJh" tF'xjF~D9uhqrﯷg ".jfy(dBmC9cgB$iO|X^`_QlWvZ[)iw$jT)1^4A7oQY)z!ɚuS+5 T?Qғ]I!y 4Y {ukDRsG>щ-m*)|8. }u3j#S. h}2~>At-hGoq҇"!61Ԡ=:R7tQ/n:k(?"81Ht0d(>^2I 7wJ169eŬ-OC+@>^xt԰i[J&lO|}e/;OD@$lE$++݈h V$4ښ˪V-h@)1%JD2g$_}'EʔeN4N2` Q'+ADX l 2B>^04Bœ᜗h@& {H9F,Ww8q2 ̾|6>K|ݵG;Vp D!0YNYQTS 3P찱 ryG,Y?Nˏ&[P|'`-֛0kaV'=Hr?*96ʡW2+^DYx0( ]ۮNV=pji W r36YHp(,o  /:9qI)m)I[ntblɳ(ѦEW[ T 3qW)SjƛGTh,"a瓞5f$BP]ߟmؙ5Xi5MI@ȆGI $b?EYXX :alJe̢@C󳲊M5ȳ; @GHgn<0o6,"YG{Ԩ7'9siW.n7aJ {11|8G7\G6Fcdu9[bhfŠo#X$+ǁ#{+4,f27тB)!<{.UFKFsgIFn\2IbƭA wBxyFN/ƛ i;Dbn8z%^Bໃ?JռqJ^CA|Ζ#g1{P!8P";U&$y> ()qE]O|~'xk'fc*3hk%w`O4g 4'G a)O~>mH#`fQ k@3VYAn9V@ZY\'U|,~?OvmdpzF$fTa`P5ڡɝ4pBFgEr4ǎR~R$إ*4z ||Q\~` _k}aeA8R2Wd/VN)8c%ql[oifi(%6 O=6 ɖ=Pf:_:GKt"X46d)_1Gw*ŧT4hx1_!-QUtR?x|KX)TL9gN4NSxZ,n\>m D#5x@h Χ!U,2n['ii*)r_ 3*t Iԍnz~L"~0+]LtG*!8 D 4vP-ĥaflνtW<{Ƈe &W]#@ckj꣋?_S A,x#XPI2(a@]\`.gҏ6Iyt޽[u5 endstream endobj 59 0 obj << /Length 2501 /Filter /FlateDecode >> stream xڭYKs8WDUY Dqgfr%ZRY"U"eo?AR+,@0}S~lpfOMtĩol:?˚`}d,Y 2FƫX6GI h@֛1.0]$kF04^v+}ulGcx ;ec(,y(N`ҽ)ee ޼YW֓k$<^b+:Z׀]M9՜Yd_bFtgr ޅf4cͷ;4 fqū,;z j|FUS[,Q d̍f+H# yTIWkIxwfgc@K-9'(AW/$DO4'qՖRg6#c Pd ^QGTs a?'ذ*Izʒ̉o{`NlRK$sMX/v'<y<8~g?ׄĝؖQskJ4\U]M2J#7E' ͺo~9c2:V_ 8N|#;$bCv,ơF)LT^/df-ݼD*쒒$\?s3~G&Rz#g :K~l 󣹢0Tm B=4 gx<*M3>]fФSX"Z_hDaĩ=qmN$ hZ(XsI;DC7|"fS3_S)XQBFK,!ԝ3a´²~!17Xbtg8U{>h7d2^Kr)}|彃)/0#_`; !-[]e#R¯]Wk ]UIW)eQ\vҮPj΂CzYk!Εo{^2Tt=rJg#F ]q'" Iӟp8Ǿo9Բ(i]s] ; >͗$逞G\LWJ8,VoX`}Q'hxdu`bFW{f #lDUQo/๠E" yBhuP RkW]WZظ ||u,v#qK®F..钌bo߰H1dUZMzcq Kޜ eVQ#ho 0Jnz<7k ̡,_֞51x+k#.`B8Y(?"= zlYʈp,k#o-zwpy3sxi^3vT\q;@ 26cʖ)2!,f̹"] 슼!1ol)z1lmw+v]\i wEVeajޕk?/.QHJ*3&m.VL;Y5 )˲Ź+,+Zv%xsroשc(v r)K-9\{G.O֡V 8{%b{uC_I!ݔJ[-r}RDQ1Dz9؛ endstream endobj 62 0 obj << /Length 852 /Filter /FlateDecode >> stream xڍUMo@W)vc86j#U^0ۊa-0;ofԭz05_onuu{&A>S@'| ],&^*Ÿ/D;D"=bUwV=v g&J;g}%v򾧇rp:ŮSѾa`!T%z"-":Ujy~ ͒sci]cZJ`Qb-p.EYB $xIq0E:~˗-eh2AK6 oSMdZ7Pu%{ϷKYf | R/{#~E蜪Zn{+\0 8"H.t }J>S> QYOZ13.eш =3D3r <䣉RE aOieV1+-]$rAm9qUOTJ@/n̉7ס5 'yAK&c+[OK u";9όC]qAl ??ØE`/ T?m`56 FbF|Eɼo m\iG¨=)jJ(NDuί~mч"T }vweA (g<nu˱|ɟץ1T1Ȥ)sHU%1u"|3E?݃ 7"=`]l&F}ńB%\Abʷ Ƈk߾v\{~r}\i(^ޥ0{IR~-dFTgj9h:t?*l!q7g:!i̒T7 endstream endobj 64 0 obj << /Length 149 /Filter /FlateDecode >> stream x3135R0P0Bc3csCB.c46K$r9yr+p{E=}JJS ]  b<]00 @0?`d=0s@f d'n.WO@.sud endstream endobj 78 0 obj << /Length1 1766 /Length2 12857 /Length3 0 /Length 13962 /Filter /FlateDecode >> stream xڍPYspwww -Kpww $xKL{UU[^kS3;@Ll̬ %q6V++3++;5o9с.@лLnwqظxYY쬬|6ttH[@W* G'/kK+{hl||<.f&%=@V ? +0#dP]܁?Z(j ae/xY\]́.u9E'ÿepll t613sw2qvXXA F&v&&v&nSwWf.N WfWk?zd#1K9K8@'i4{?w/.da`nGnN,n@9ɿlE, +++7/ zY@ {~>NN6~>&@ O 0ZZ; ] ߿'@}}6YeuTj?JqqGO7 y8*&_9 G߿}? t>@߃j<MQIGobom亁޷@}Tw3_},s֮֞@skտ_r?j`bcevپ?3 @' aeLM5bLBsTitL>+.n(tՙ[.wb#}h{R/>?[`CU۟|fq 1i8jBwS:c([xzXͭ\6TC#~"S-jKh)' R&@nLʞ ;-)e5 i=OUEbHQu z9Cg/If7oB,?[I{;!ݮ,rEd MU8y~Rj# >zoyl mB}7=yqU&LU/^Fkn?MuM_9x.?3ʱ㊣g˧m.`ٻiBhO>뜒 ̽ducr"e "ӝ'D2yϳ5 %u YM9Sn8p@Ԥ_C*<M,1TzvTNظWЅ\:LWP<{^uTdŻHgK=} ܞaVY5W (`4g3װz记O wKW# 'BpgkIC}"-'C^ n1ja".ͷVE@O nTVlkQD< t2!@?sfDž؍(-,NB:QNxJ3?aL˯teYNY.FDϣ`w Zq1LiNf ,P[* N t9߼va$ZpȪ^̸Ig3(*iJ* T#??Bhw`5bo'jIGJn= M(Su̒;ջex;9hQO's=u& 6mq+K0D--HBLmS5 Xc(BlGLұWl'L3TZ,Uy%WT!>Em\/UJS2}w AND]Ӏފzw!JV*n"F&>]=LglWaH?3EwoEY'sB a\.^`}hp8 l.Hh_< (~V".6iN$CN(!ҺdoꎼﷶGY}+h`X5Q?M[D}M0_hfy$?!#ː! ٕ^L5xK6C*FpCezH! ur,!G;m >-BB\ omv7ѡ 6Ȍ,VCCgHHEdBhȁ[:JaW=I$`:׏Bwl)0_Z(Z%([Xtށo-) T-l; "ǀ҆׮χ;"EհTĭ]iI/Y:5UAoeB@C]\t+qBxs.x%NL Va/&4i-n6i ?Fyr@!2ihtT64 bډ"?sF)_{pZ9L_iXfJrb(np[a3Ky6H (˸ZO\:kQj^(AAOYCá@֢z I|WiNx\cJj帹LFEIa^TھN;`=j]ʩ_iN70i/ ahFj$?T#ɠ+ʐwfCꝛIpL*[ _%jt5%/brv^I|i83=#DdǃW3S9RQK`djK OҶBREw0{Tlw%HraeYU/}PGu3Uq0mB9'L + m\PMRwKh7+sEGЮ{U: +umuyhirAXz2?5=A5t5"**,pȿ115b!42$b6<>dE0p'jhMw|ǘ^WQ`q# ' hdU.QOe6cR_.M5QQsɣ 7zo?R2s$ҋι!Xrk0wC++P6 S(ߞK6ɪ!NKՄ{M][vsjcc(hMf^$q`ƀ?/||6\g:S^K#C\Hd׶.6)L(X|qLy2gyp]G њf<97іBzYL%`-98^6dX?Q&TvSNNױ'#ETQU+ApmB?{THo0c)/ '!r?f2K?'͡OۆeH vI=^QƊzNU^9a٥sc9lA$a`|&/\b|1O'LWMA`.XC^^i,YU[M >5PaYwER2=rEEp:Uv?e}oJXɒ|Ҩ˲\•]Q!+u![n}r.09seϱ<[T,K~? Pp groX4=MKiZN>vwE_wvds+Y)jO L*t4ϜSRZz|Ea.q(.dӉSOOʟӏ+mxPd&&-֏ kl[k ep߉Tc[GQ"kʔ bUvU] MWcijKM{8^ Ku/MF>G,.uYd T\=j \|+ VR4u[b+4 D^^?F/t_W8%kh{mqɣٮd9QJ}Cu?:$p鱌 <ѮtaͫO~9cj(x/'P`uhtEf`=%ijS ?m9 RV8SNFORꚆN7h o\bX'Dw]ڋZbI*A, sYC"NdFu~{1&Y%Hįm8eX/4*9¹Hֱ4ܬ*G.^U d@y2qٍǓrEvA"+ fbsCKB\>~.:.a +c)]ҙ1q͎+L?hsEIySvdlB곞whJsm.Xҧ=),5tJgO2Dj$5CrȤjy~kς͝, Hce_P*\;2i/ovsjEnẨԣs}Q6̢>,WF&I7V)qbAp]k|i( s/`*Rq T:8dн{FcJKEbY+ie(|p*q]-O}C3#?`Y ʕfixᰟ18D%&RUl^E fP:ϑžFT"ӻㆌxB[(cveT+$;wv=tdjHX 2CC^hƻp,E w1JH؇4 Ud`'H6>(֑eA@op9{C/$y^z+Oz@}!,OT4?(j~!@_f{"by䧱{RF83Wln_Yn8zӞpkB]gDX„7m`~p%k&f-3ym 1"V*}d!= 'J[wH;[։R k ~^s6yj$ iC{e]++iSrB5>p)4z;֌[E?t&,ğoz"nh+k9v$%9[*lsƿ~Ʀoѷ!%\#3\S~Cv1$ǟgSK}e:k ?5Y5P [?U7c2檡H-eL6ݓ^_WeϷOQ7 : bIΥWΤ^E53V:CڡZX2n[0%7Ps )R /d}4|&To/G!szC05GSߕJ O~âmG<|\Z%eA?}mծXfm=}43ZΠo[/HAby5,iF)4LZ_ح&nOUv &~ eX? z (:7 U^V*Y_ 3TwZ g+챷C+4/+|Y"0JG!:bQ>]a)M_.4tnF \A{r]JhF3UqO6~ɬg6m|` \,j=S )a{@M­S2\G%s÷l< !*xxD7S(f AyMFJۦy‡zĢgtȑPU76OTPHi Х`U> nCOU$'Q)RA+.4TM^ >-Uk3@Tǎ ?zI+wGks} nO9 ]_O&m?k-쇊ud :(Ό2Pk+/[+7 l16 Aה%|,jЅXh@.[v|ĻNNb<8%"6/Vq[tiڣ r/e"PktY8nge( Y02nh>+w4WU24JIAU:'2w(ȻG&0ߝ1 !9LVCrHa܂1S[}Kٲ66+'dn>IeRt(9twW5k83xLWh=e߁voF7gM!ʻJ!NyCmW=>KLy-`ǙFb;$Rg6N'DqdTǕ`(KM{ "/堋Uog@WDߴH}!$V5$tGvf9A`Z^s9M6|=mL?O*w \*+߽߻rp3/}r`[Et|E;5=e3A.&>2E*ƦYWyi![DaGq<cX7j[Q#6w6Zh]c0eiXD"#;싎 k< 1jqZD\^ {ҩ4p TN_գ|JPʶðGΈuȚK %a\A"uOojVy=?S8 0 h*X7|r $žQl s2:-7jEU m"VRa"M6{cQ9>xޫ6'a9u$S X_`!!0k&3+9^'|XFۗ7ftzL9C]V+|)V{(Uf@aDV/2 ) Z q,+Bˑ{mr`\pjxF I*?!͌N,)oZabWѮ920z3e!;SRPA69 캡Cڣi^|*,ǚgg*=FcTDO\tI M p -SS" .+7y~7U 5U#.Y2N?)`{b?8WY-tQdG nX]yEu)׾Ev[>ZTw;+Ɩtd sZ | r*eɟ6J3 v(UM넘@t@I-O82&C*=YRȒV# eNQz:(0Վ[^Dv\+*80 C@mL!T#)Utךn2ߒ"Ew5:x(b܏ă}bg-*6O_1ik mԥ`ZY?UV%70zb$"4 t|D1BQﻎ punJB5z}Q/PrB{>[;ѨKλtlr!O±aP%C{Sb #]yyxe2V5 Qi[@࠽&[û ~B@I8^I~-6FSY SSu=fu #h p 뫂_3Rbb̔&bp\U*Z\]IU IY2gDY"% IwaPfpK7yLr3Aₜ0[c|>}Ǐfn5 S4D4Q g*$/, K$qSN`2wqEDũXQx1oZnG@/ʄ~b/胄 |i\~[}s̵˸p2 3x%̺/GQ\ȗsU7Bw?}MGķCTI!;:>M6ۇ?rje!w7|˼ 7N:A3WȳdGFP9&6z-~%SrSZ#FӀ ڜ&@؃ՙ_V UͬvFk@gC&g~V!%k;A۳S5`ld ͽTSbmO߉;U-+gU7SWiנ$:2DI1$T[ظ@+6u9UBCIXF!,^;_Qm[GQM-c^0)skisvMdx0B7]39sBOmŁ2.=,6ɰX$-ul@Os KŠ; "W> rϐwQcPfK}uL-#w|6u:A=fHPeT'nWVG1cmʁ׻ \ E;}ՖNO?qαX~PHP`*EE"YNpSJvy7nsiZC@|@;+.cXfijWc1CLO^SN DRҵ#uBnEqL͵&D?@Y%ƬfbIl tfWS#ތT$Zrh.'me3#(:md =Ӫl'ɷVW:=vz̽=Ma{1ξE~Osqp!!t ME5VSXve)`f~^PP  v uW>"CZ2Ԯq3)֡t<@bCs}.u@kc,Uj{gG$^3XC%jS<¶Vd5e\&9έJ5Lיzs80y.@5q?pb{>e33\R#gCz1%O EAG.3m89 )Qgi`K_Qx-70SS/U|]G\hAQEl.?}Pbx9B y`ܶ#_I*@Qm1,Ag@XOPP]؋gic8'? *2D;+=W5ئʰ}a"25IONuj[GOUT.2e)~vE[Yݓ`ML]yKL,o٧e_{/GPpWY1<|bjk)G`/:|8 'C~h92 K*n4Ͽ1yM>\66"LLi9O>}HVe@ gFyQuxOuЭyQcRȉ@Iz\=*8Po(!B"thd MmTYGᴮ1oqe:CxLHĤT?9ƽR ƠҮ0eMqp t87QzHy#N4@5oj|h-WSFEA/Qu;Ħy4}AMbͲ2hhR0hrg"HaZ%"Z_/؍:lUkQ%%%@q=nȇEht-G;Ñw[*Oy{i;y/#xfD^h8%lťY^a2; &51v^BS,ImeXբB endstream endobj 80 0 obj << /Length1 2068 /Length2 13663 /Length3 0 /Length 14920 /Filter /FlateDecode >> stream xڍP- w> w <GɹaV޽zw$URe67K۹001DEXXlL̬j.6)5NΖvb:A.61+Q j`app23XyCw,ML{;3"9 1p1;Y  & %RY8L [g&{'sZ@ vr PقƄH Ptˡjor^ 6&`;W;St@lY/XXIw, :<-f6` dgdlrYڀ_ H+@ ldliFi^,ng*jok sqF>1K'k=_2L]v`i9&6s v=L,UU 8}o04q-g5¯de~?|0S{;?$&#+O""oF6#+  dgw.h~37dV$jc/:.[ o vK"6v?mt*YX5.X4K;O |eb|8.v&l+'Dd~%V7:=b5*`fǍrrBoF?X@߈ ^F<?5o FYT#vPVf`@Jז߄"~^0tWn{WR_ xY j|c/7dyUTO a_u~ux}lfmu>vu=;Wiwc@` x;b^s>-X8]ָ <&Nj\|^?!0l4oo>Ī6ZНq{f-S=*\ mէN)=+4WB$Op-Iʭ> *ۭS8_Մv|}4!;e(s]Q0o$=Ko+Tq"=0ƨGRg0az^]Ȟ|!IG=a+YcQ܅OG u16M-*]\'UhFl0(Ўrd!\+\7 -Eۜ3Qޠ޷Qȩ*yb1GtV}񊪘,8`rޛh.Fc/|/us?oo>_(a8ErwrR09hł4=g͡JkH’7Vc5?e:P_z> . !Y[pTv Y4-OfXtA>DU&gcCهrU@_R# /ny'Kf> V&LKNJG,di&wE0M]t0p.T}q£/WL)Шc}m7>Mٽl"~wjCo]SIFcFDag(-*̬ํ!sw|RM)RGg|^#Wb؁kjWyZ9~Wع!ܖn("_&Y- /uw7 qy õί3%Ocx},%\>Qd{.3$mvyR$BְI$JI.\vKs>O<}0::Ķ>&!5Aza a~vɿs3S^fVtAB ^! mV,0,6_ L6 hהc/oU4YK4ZulYG#⬾V.^K%1B^mD\)Mr-:Em#1ZMY X+1pANqAIJSz=[ "Nk|y@2XdLn)`ς[̈́7s M B' ]C3 $U/~1o?ճ<%ž48f+|SDt5BSֆ{(2+Rq̸&N5*6o?whCI4HZI ˹U(U~1l7$ܞ(/>9nFzˆrvRd)R l3?{p[׾D$4&S>z׿UZ6T\=ֱ>⾓ ?ŏ1gMD|fj=TQTN(jB5d/L3ԓ/ì9G=C:3zBHJ Yug}՜+MZ+":))h8 w#X|7GC?aFΘ!,\^8Dr2j.i0VnH;λyU,ӸhL2j8']8f1|L1y?`9j-n1ȥlz鹙\  `5*Ow{[Q^ϳ7„؈&W Q$vFyn s)(ȏP8尿Ov7*$ܮ5:l)=`tgяB8 0DfW mDkO)!=+fw.tۏJI,B) EG2$T^њCX>7#S2Q5V2D«C`:cEû9VnlvtK"oq޺ixZ8*ԗYV\}9Ɂ6"6;P=-3Z[t'bo}ʞj6Sʷo< Fo@͐zim8>|2 5f[;|$49װ>oPZ)(2cAA률*#Ós_`"Ww3jS~S:PJ0qA2J8~4~<Tn/d0ZP 3A y7Xs7v:@狯 OVyXK?^4@J{m_Qx_+D$96!7 !l17FE*V$RFɸU-ɒE%"BZڏ  yK tmͧ4QphIiRnF My˃Ij+EU.e+/d)*iEYg"ƒ?D\/Iڴ.Y3'+oU<#AqC)_枬lفzW9u^ԈBVX54` |lFqbd3? h#3zøԡISӤ)n s?47ZпG4R}a J%_0\\-@V"w(c1k H6]ދ ןv x1mup"DP9}juYKoƶw/ "_&M*mE|34U,)>myA<W lʹ]'$aܦUwHUSzRy @ן0߽.pҪ ʜ k"(/!·Ե,?p/*v^ܯjN,CzIV=,rf&ʞ< U_Ȗ̍ D8%wDR=jźmth5˶Q.|/ Lો'`Mԁz@ k>#8;J"7ϚOxA$R\(S7Ye&[biQ;@vTg{dX߸*UsS]^ܭGڀmA;4ӕ.Y c83k-: ~*jMe3׻䴏I;]k&ᆐED5/ AF7Фl.~ Qǒol@! 7^wt$$bUJ(FF$5*YL,5?e[Ar-s$J'euJ'>3q@gAҴJZCƦC7;9?M1zSMIZO82,8-vYɂZc]9F'tv2; T% BؔuL~qbs+A:Sݍ=.pICz4)=#X\NpDq٢N 8o'o,>w֫Kɩ5ݳz1Zc•V1A7tsz߾qYOزk-z[# "1+RetH%A>C3JjG4$M` vSxbh/h 6] nfH&Q Dܠ沓ro!l[ڦ<ѯjfdWš?iGq0շˡz*?(eoͥN%.wsgkt)*i"W>G8 a/|'1˥7+QA$Z9Qfaz :XP"W@i e,il5y"%RN j4PV< v~fgŬ B0ZX1 g0H<4}# |!ksyS:GߒRΦ69#lG}]hbm^ Njgy4[lAOL7sLv?޾tZn.K5Km]JF M3mX%;VohV5^aB]j-,ΨPukYs +-\XAAtyļ4?A1$elzcwʩG( RLCe!tQ9{#f icdBaP~C۶~Lѷ,Μu݊cJZ^v$mo+u&}Q]>$|Ɵl.cO4L9Se3 kwM#|Cf Kp 1P͠Hx}(_c Qgj.dO4E!P3TTT$x.s὎TnÔMe ̐0[eh)Ŏp/nAd{1\E' p:hY_>;ۊAu[}%k[ڳԶ!<4!;`NgXD~C3q|v'y1xx 1neo>ϬbC6u'SoȭgB4yņ5IN=VuudtapߧINDа;:1uHv 3AD}[+ oY)UZ2<8JF6>D/0?wȍ/40{DʵXvo1] '˗r?Q2,cFN{|uFXB>%׉}o,0.U!tdHh%jGr7e)ͧ`w=R<8f1yXǸaCϳ1Ȗg/L4kP,V8YL+׆D4y$ 0C1y)1PsIwzbZXUc(rchtdps@ Ԍhk湍$~'8Ze#bB&b 5ja%9q[.՛)THc̄d׳o\oPx 2E*W5DPSszS;ǥC%ߣPo r C m9OuIo1׶kc=;KQ"@J[v5ƛ:H~xڕ5$@jdY5E΁r)ay ~,^\O&[2D-ת=ټm7zk?vMovިܩ}˓',J)hIpSz.}m&X| } :?=v;*=V~ԑPK Xi$e{͠1)Nm%b[P3úտ0,(y|NL3ΛT2R#XTƲGZntF :yAJobN>ycrV6yӀhmw,-32zA ;K?[':vt7 -jZ=#)aI|T~%PXcGﭵFqC f#}$lϵ*ȃN1UJuQ+ls㋬הq;)Γ]d^i}8*smxzG4eQ5nVltꜱV=I=_~1Mddv[Kߣ3u%䫏jzۡU i0z6f Zk%d5;zf2T'*_XG@ӤUdM'VZx)Sx:.fU3Ԥ}Fz^<, =;sIܶzb4## >2K~t%^U Kͣʁyd>+e幜ԏ> p0,o_R;!k6S]![nU[}ڊH$x>#~T"7gB4s) I5rk?t4M0Al?^M]s~4ۀ7{_}2Nx!b'ǕG_F ,s[IܼGj%Y&E uE!`Bm˪JKw7PWL>xWBwkZ^l5nuܠX[= 㯫}\pt3[fW$NpTאkWd,&L6tB%p3(~;6"[lge>*JkUPZ hcď @?jΏmM#|BBUN;}fM+urE^虿fcqiNba 8%5p×S%w*X2\K.- AsT VY]/^vڢf˓|eXh W7a%4fW&$hB ZEql%7=֜nĔؾhO֖Xr$af-?3d@Q53*=7cj{/5Y^[3/]G|6\JXb#Pg9bux,ƚvK=]HO=0r P1uY3󎇆"}ikvs1"wi`:$k /:n1W*bUZs*c䩡em3K6/gěwz/)3/tHR4͗,m|ј@M7ϑ̕˘֦V754 ml'ͽπwj_c wkGV0* cfWDBD& W ,8l1ijat5xq=WX)8!7A_s>]Ew:8gvE2Wq,kSmo+mN5Kqju\8{'9Uu1U~n})ŲJ cI;7i6=Fg =pA*R>~t>!C >;!\(C2şRtf-#8VM-ZggV!-|SG#VgrrTti k=aY7;fp;TԲ 3 Nn'wjST}X .8}( IQM+Ǟh^9yq=2UIcw}VRVt0CwԪy%&n]mv*rC!iX3Um|wJ2.!gA]1)YGl.kf!kYi.<)tQZgynyg`{^dh)i@AMœ$+"6CT3mJK,ÕC\񰶛IhN'e.B.. H-6Bw^θΨLxSCmy&59麁Nx\񨿜i:Dɕ`bjf}',OB}\"l.=c Ftt} eӣS+R yB8C@ʥ8ϧ}p1py^ޅrFяHޛ^&$&r^>#&G&ػdX={Dqp14df^-$)]ǥȉJ~L<#$feڇ,i$}9/+$({ x1V1oy)t~nR#.W NVM\' ,mXM@ql'RUrB+Ķ(+m-S`>SnЉ -jl;x6trm6g*4ψmd lQ߲ŎW &R7Ѵl!q鸛uUx9Ww5{ЅBӟW9,p=! >:jopLH[Ӵ']~GqOƓ3~y ĜHVr @pH%T J?ͯ*H_Ox;t3\A0 YXɢ3bF0 M:_ c}ޭv-$ޜ+^:^dQ=,hr:;*|cw_xlQI_q|>v Z;@wDM̶10Ŋ#LI?ed!<ʅ4 s~='!w˨ɔ@# q^7 埳qVi|qP!Dj\ўG}kBd#2x _WtI hNxn MV~JDN^NOéY|y|L="dT )LTlJ木Pq2^gWY*V-ЗQ0؂Mb4?Hf_C{fi@eR;_U2'Ȍǧ"u UK wB\fMs*F!cݨ5`8pp/olLx&8!Z2",5,3>3vEdMˉD^e)AS'ɊtXZ ^3*K/z:cSfQ8m=|] ^Xw:Ҙŀ4]+'Q"X$t;`dÚi Ȓ:gk(/2%Ϝh3f^YNA,6H4NxbwRK{ܢim ž.g S} 0kթ`Nj|(>~J80m<)^'2E[r00f!%N(:ŃYt1z[R֜gʮvÓ #᫪.*՟vL/Bd8qj0d\qڄrM\zJ~  F+Op]ZJ$Ea._1?9NT~u)i&ǺCjG."oz&ȊGlhRIx~@Igb<ѫ'ɀwt cWliJk8%9?"fcDShBcY0j>-vBqYfBBwCpZ[S9*7nyƦFnUX%a>r86)2FYlctD/[κo3X|ptaC:q?UsOvX=P/ 樼1;|}$,'ň_lrd-"o|)l5eOٺ >Z3"GV&|KQskcn(> stream xڍWuT]K:ninQAA@nKK$䎾wwZ3gg9>7lL:@yH AZ &|Bxll`oC!R(@MjA!u7'0@PLJP\J@ $ "&PtPǦuȕJJ;``kK@arFhmЇZAG \=<<,|P,/ ;mcKg_ ?\P[% @ 4. d?? 'W?%C~[Z[C],!^`hh!<K/t;YZ! ,=!vA`_]Jhe"A~է;;B-bc7~C HO҄  @=E \@>|\.[d+ ?-t07?Fx5`CΎ4lHs>=Y uf8yM}jzuMUyj/DB"qQ߿3X P#w?E? \H 5K-!ekRqsr1,N^rvC A SA}ȩ! =A6:`nku ˇ6kG}G  :!Q1% f酇  ;BaxVL "~!R}@d*?L#Uj Cu܉  ƛZK9T5^z7t>1Pq Pq*!bFub+ P] eߔ)٪FL[u^WpM7-;ozgr\TǛ黪2쵥%߰9>GM-!!$TP!?>~" ^eGJ׀Z\!/*x5voE,}O6y]8F2u gYc?|P'Dc'uNjd&E}P:YBRۊL4g( ڜe*~E0Mjd*. f$s̆mAUO1\Bb\V3}1;Ck]y<eM&k‡Hn|5YӲrI1KF\t6>YlՓT`Q&<#-c1H:j{4To]|3/nB_}Zs5yGR=|1yG z0V T/&]GGР>4>?"ױ)akTWS{-raVBj_7^ԆmK1x~@}}px<+{]+ ' b? зQ),\_).,ѕV Լ &Js"_ZbJ (K7.Y̜)"KK:3s~|iw n2hG[M7iOQhq$f~P`:y$]~Gz+W(KZ¨8av.iFJbjH`Fs@ix<̇J2^E\>;>:Ĩz;FlHXu0@̢9G=+titUjJg%QY*m6\@X 0#|ܓ*L{ B(8Oʼa8]?BܨQ'* !舝}r*NK ^^+vo8f+=ĖM1+&k}mK[X({ X~DY:7=ۥ37hi!7OlQFauRGV'u(sX81ؤ_窖=_$: s#);p1 >ۺݑ%Tb9 xT*~xgVIG/uˍU28sUVcO@~_g:.)LsKm3WWLec2^ Jd tmO;'Ld9,pfTމf}VF.ić->J쵊|3!y7X6:ܭ<ז^s^Z,]fŝc4.8#O}/kRV2v%n\?/g)v}L5{F} w|Y]'CÉ IH|փPEڇI!:䊬CL?q(HѨJFd}*!W*)vGPEAG͈~JEJSUrx),S˚*9"Fd9 zYuP"=ygje *QoXy㏑K71yWESu*{8uHLmŴ/2i*.jRZwt4% R"j;\XGθ48֗q; .cuFO?(G:Hՙ} 1quhf2vtM S_i mY&G)€xt?T{&4 5榵XiڰM{ZpYWi=%9T1<אLnH(4%31tfR{$pY3V,<(]__~K:2\K.+Q֭EϷD:wѭ7Nqt/ 03y_zߺf.NsjzeHSq6˨_'rmwWᚊu%a?YηJ ?b 9%|M.ue5am7W2?^V| o%CNɴ0j.:βg/Vy%ݥI&߾pMxA"6"I$\KWxL|iΛmnK3}cQr%+d+^0 CUnjv?Ǭ&KJ3v{ke,.NOgylG較2? 0w2CO/@z7= >$|Q'k}U8HZUپaFEhh<.Wyߡ>G4j>R? "5xqk(쭿jjYM  T VsWRo$MZ k-[`JHNR`aIʘRl]r9/_8,֮:yٽY ??]]t!Xyp]}9*za Z*k,C'zD\CjV9pjAAj 5H%,9nqc2Pi$|N_N:=(l0svLd: ,mW^+&҉sjZѐ5`&^ؽRUl6" EåRLm8{%Aq.u[T [_!Ń-9~6Cl+xA# '㈜X^Wiw5ٜ'PŒ@ւ;ʩcЮFNeGU +Nˀm'v/ilO3Z?I%OpHJO񫐿R!4̿cxycez.k/ =g!#rR-#EfbJrxsjiXo?X| ֋D^mim9MHx<'9K,H~e#-Jڍa|lX{UNՄ՜@cq) O&$wtWd~ga[SqXvAr>E 5V%?_%g&‚gl?8Ӷ_>rkhEϞcm=z󪧷ehM߮2;)pV*cDICzx/O>jNY~gv>gޤ #+O^Ld+Tԑh!Hjsڹ›:g19~n}6;q%:"?W`q]HE'ޙŇ=sΆTk {xP=.Y,B>ΤLrid2=zZDMz\[e{W>+rq$M3:JAWQDvb}akMX;Z5UmWQC8/%-Ut56Fi)Q=d(Vr"όuR,??݆tuSn3Iz-R7J$']raF@~mS^fFhsߏ.ÃYH>CUysI=DӦҨ%(]&!> CdKۻǏUhX2Eh/ <CZП' nQ՝$ a 35jZw|Jd"6!MG)]FO<]tz3ܶ5juƻ`3y^]gaG^SU4Ə:=SpM$ӬѮM\bOq _uV3ξ̻zZ%\n4nguV:ƪf8s~W|РeDFRucV ߺ{Tf'*X(:0M\0M_HiX,):^zUZoF@[=svʽGf[&I9׬,u5r84L?wB!v_JA'M~S&Ϗ5Hwwt{&fw3S`T3Fn*$#eB/RSx_ ߇S~C/bo/o!<{&ǖv vfd~,"c_gDy3u0KO٨Rq#/2% T O;KȕǴM'bk ԇ6Ǿw՞>\/.e^ZcЁB'*F;sMhi"հ_c>xvT&>$즁] MA_@;#u4JYFKэTL f(g8|=7>AGU FimLi |Rd*:g5 0ܯQւٖkRHN`*,(f6^}OͼNS iN?Q,d=jYC{l}*]вL1UQpmEr4'f,e?tud|U+U\B3ɘWN[͡W·_7t.#'e 0vCGC<[N#8Fx ?<'x[u7ؓBH}Da\5[4tr}79'ix(#va{!/5mC,6S`aQwɇ3胀3"LA]n;g7hi=׍hWrd}ZVih֧O(OFYZɜ U,.T'Fo*>:D}\vlaQľDVq k#0t9VUQ)*(T ~O+)/n6ܝ+^;uYL(\F&V+7z4?Yί{VlLEog2 5t9mH;H`6l٥pydY./? +"zCT][n\íGj'ߴ0:s#mٌΌ⥞)cV}ܕ˓@edJ \Ɉ~/n$Wri)ư8M߷\,Khsgg/2f6:z1|hivBjWf+mG.;m91?na.@3yín/TߦKivr(#qQ/uښt^[e@:*kq΀`[UPk)e} ^S.y RDVrto^m3 endstream endobj 84 0 obj << /Length1 2590 /Length2 22532 /Length3 0 /Length 23998 /Filter /FlateDecode >> stream xڌP\ -h47!\܂{$̝dUUk~NCI bh ttpc`ad)0Y()խ(5.֎M@2q7@`eef23 /@ut"P9:yX[ZG /w=`fE439YݼCAohbb)HCv].@s&+cD[Y-Wsp4q@;k3+m@7FEd𗳉%Pgtr824suxXۙ  )0Oyf.NnvJdE겄=W~.@3P۽?WNL@L@"2K t̬~ѫ{;R*urtX[[A|]M<7w"hi$ZAw1vO2wtm|TutU%_ `d\Q6'?|e,<g jdPs4r):f_,ϫ߆b-NH/5_Һ@tT *ͭVt"vU hlff-uev@eGW_h4K:-3[УoH 3G_' 0qq1F 8,[4z&FG7 T?D99L"D#No`LI_ `XLR+I7b0F&oE7rQ@(A(F調(okF蚿(o/LEx&vmJ7zX+hU8@dfv7&/,~mT?8ATo2ֿ/ߐ#/ ? wAQXy;Y ԣ?k5Z@ruzP9;G *Dz:g,H;I6P,' U)_2k?R gwG7G_1˯lP\ rr[w8~=h97QPv&Vrtgrr1wPs<pqAs2c@^@4Ɂ|.4a࿾^@3G30/aw5" #Zh|]P`Sh3CV]nDRЖ6%H}`5'<=%o ̍|( ߳f-dwY\gwn|;)eC3*;՜rOe 1􃋧(L`h1μPo&1rF_Idb }uXc}+Y];)u 1Ʃ|EReqg}K ~y5 \b@ccͨVv]14β{Ks+ vuQ4[--hBtF)dàN:  nvk dҋZZ ]6 ѡB_H~6 9} `̬ >#<ֿL}m } 5SdzVlƙyVު}O1U0z'np̝QHuoV Dx0hVjsnE3 ܘmܔb;jޟUzFĮsoW pUJ(ݜ7%?V .9QI_&#Np^Wn߼xa7~M0oA_ڔ2іc)3w!ɍiuN oߤ/fiq|HK" J\bո)R6cpJKpHm|!LR͆OI\@krpUqH'Δ /<r(-jʙlqyV0Zt@!pf{p`oĥb*I䑆1֢E_{AEf"&;&VFY@9=q8=#=MtT:"9kI&ɑyIW?;q8?.핿e\ʀJnj~\}}MM%W!P.^J%2?;4ѥ4*2gZS;>cu:N[Io<♗3bJU v%vR [ӯO?v̢ W/drt+<|9Wg.9dlY:rKrx4Rr&bRmDދ(Qro#Y'5?Vq(SP=?T42$uNfX)-M}ѻ;(T'徛Mo-BB.>R*S cFsv]2ǭJt3vFг-i"\Q_1Ą̑p3D&a&Ӈ~QګcRNW/R2}0N?KZMbβkT`%Qg/9,)XͲفHM< H ,Wu1GzH T%PQsf˛6d-WΠZö[l8a%<,0s6obM3T1^e=Hf0ved]U@9M8-74PKjy+ŧ88m-1}emY{mPA^wPExFz#ښ}W*ʯADP@$wtvp@ۙx#a \N6Ueq|ala,Ĵe[}1q t}NA|eC*l8{|syÑ(UJJk3ġG9kdkrwy5c,:L'*cIʦS?ߛ y65  (> pyggĢ F旅z(G+HqP[P%Y;qzT>T+"72aO[=[v~Lkal;#9Xd o=?oM%#"]8xմ"^Y$2ʨ^6jLgp+|$z#>e,8`I>Ά2D^6ƛT jb$o',Kt'd|g>u-ի^̟\Cg1X$FO>,_b4dz }>;y\t"gE$0vhcyq+3&-U|7-W;Wq0d,@ 8A2om<i5GQ^f/ffkGTq~Z@%J҈dr[8zh EY|8[2,ϑn+;ƛG. ZɅG}Ha,B2 éX=1J|w(XN1x.8R1}-&S*ꦕ0Xf*2.R 9E(I[dsg17*P0FUY+N5mHϥ0_XZ;0vNˆ$DˇIЎiTo ̯QlfvpP?Z8d!뼝Z4jP>8`)+G*e7X:Be"d♡mJAα|uܢg<^ߧH Sե|+O."')X]?./tW!iZJo]3L}gHH}quNwqL-]?S0TLeP;}hDDk Ȩ{`Im.%Y7"S5.'Ucz]6I)7g{wxpw\ے:j9iv3I$Y{ߢ$CWNJ%VM"C,؃s`gt0D8/v֥&`XRGҎ8xʜYd[D/] O,JUQ6\{yIT)x 8"콫h<mnJ{TE TEMz}5ʝ¡P\ suRZOXd9|w>8PJMP֌vj.ꐛViy7s.hFWGK]pJOn" Vp -q~׌ȉ[94t.T'4"&}WqJ (hȺ/`Udtͻ%[k#|U5TYjo{Q"/VmY6_63ܖ{Kvc#slDaV]Ǜeb0"[l`Xd=q3p@eIC \Gӽ8b%Z4YgK0N3U't \nJgd2_rϬP1C@t~Hƀ0H @~9ٌn2!oUðmPP֑*#恊ycU:.:NMp m@\]>ڦ+ vR*cLuuިǪ>jr݅ `b4ٶQ0mP=#a.y;'<$|$ RFRw,EnL_b6ײT:D= ;XYXQ=*N4Iq|;lڒqq>)a YAvZh?=qA'ፋY0'U-\$#2cl4}hћ*vSKCQ+5ѦHjP ۀ&t -N}mA/.0"Hlщk{9ܛ.pAn~' AUqD=Wp){,9Jz$ x}H"˓Ȅ)gB$ ffw@ jۿ7 uT6mk'fZ_j;!RAh]c'qGS9cAq] eqj2f-? &b< (Z-e;k_ZXlƻI控wcj?x/7UA<жB[޼ itųHg^v9d~8 @-LL<2M!>RlWVWGd&D9H)MJ?w;e W:5̨B i.Ӹ35D撞d3W1;Z zGn2#Cd% cH֣^.|4Es%>>SJX F6E!3ʵZcŖ%Q5ί1ed3=_-[ MKz`R>xT`G}H 7R$u)/u'b.#Fh`iw:)N@;,ǀ?U=\%R&6gĐ)ܘ2W'n5Ζ Y~9`笔*M;;VěCG5} }ENaD`$p<.I>?9 .6q׫ZUԝT Un??k)q1X$&ݝ'bHP+X$mih& zGQY3|d;"-Jn:Ɍ@ u([FܟqBjުW|\46P2|Cou%pUC@•]N>S)oVP0IȯduDG8JG;ZϥsdRaLBW\-y1 6/ixpYpuJOԊ!{,yPDmv F> j6,gnUyzQETT#aAqyِ {Wgzf h]\By. T#~`l 6}sx f&&Xf>M')@fե7 >9_12VO _W|ո ^N~tUd)lEĮ4xퟍ_!bo7XDP)2ޱ4`*Ԣe|`"R(;"{P$<4VfFAN."MSN;%8ga%0I8Bl;8O[4%։= %}*OR`36Kg#xeȢ6cxpOfCn;Ew!Љ֛)`k+IkO^wlկg}W*]TA$h3gTI8 k:= t>i=p@ qdz2+IN1qѡNV${=qhp_G eVUa#K,$N _S y_`U\ ,{88 3^1g>L<(F[+3"%Z}O@9i>N O0pũc{v#.e[ dI+xߠ(Ʃd+edA"@$+?Rpd ޓ+  \I>K&#M[JD1m\noa5Aĵ \68&Cħ&27wokhNc:1]# =VOU?r[y0z45h!w_ewcOM5*)ZPV9k+^n>.~)I5uE2On.K/- Pb_M3l0b Pӷ-Raxڜ'E|لR~ąN&W(k>s\ RYתgm3':;EBmn4҅^9! 5L?; Ki:s3zJ<!Susl06!j͝UJ)NJgTٱŅ~l`Zl`$pwy_d~ 4y!3TNي\\=x҈^mtk殕.Tnڑ)7}H,A$!FE97\nt!E!NqX5qf>@*yġED-)A껙*xӂG ǔFUWt-mbe9ltC>#QTD0vAv;oUϋQ^~]dM2Ӿ)dmѪ~[Ro :3eR3#_rGpIXJXx%"sDfЫN& w(jߙ[ۂmؐcbxE~[\t< 'WcP[U60lڊlVnѸ\Gsb ^,{"O,3MxP~y)w[ZɤdZZHFreP_i*e)W6EUX7W;/1&#Lg3`?ħ5^_vDw%q@UDǼ~`\gm,Wjv&itgU).585nM2p&- w* nŢ)h\C;)wa5G$##01S?9tl3<>(GXO݄ʯcҤ}Ȯ5 DW)ibK*uqֲU)rWdfdc0$}#s'>4lT>hZ=,XCW.{$rdb5ŮgCG`!=z2s }H ߍXz mօ:K_#5Fc hZf"YK%z6*wKHgwidJWV"C~8z.O5 3;Cx9(qƲ`ܪ!1HLCݕl"dp'׆uP]fgK%:e(OMQy&TY,=f 9!jY@QmJ˒.V>$A3ත\'wYjC&'E7o1饟4[XI;lp+1c: ? nxlf J~T0I/ɨ-#SW\f!ՌrR1Y{ALD~S:d#3elL0}/XnbUVo)WRGgf OOw! &3+9e^ PЉaӂ't޺ؤ4`eԙΖ|hTn#jnVh S0C)e/9< >XMӾ(g($e=a\PEZгVKSCEPLOߌ{$luLQ5D_>T: h"qmuvmb7{[^cXsFFjt *m4_S͹jf k^sT}O| aSq;LNMSC ƂG˺U.N#2|6«1q.)i6H6fNY3~Ga_JZ9.d{|)О<_ q !DqM/}̹>rX_ipɘ\X1; K 胢+&} u~oZ"XmH*<_.Lx.uro=ś;h 0;&ﶽ:a[3d[ﭪP/',m#f/2:ω=cI3m)kY­ fxh,k}S.vn}( u4Q}+*9Ǝnl(}%; vW(M>" pqaOQ#<rT0ta]h\ %B_J;~~}V}~+Tt9ȨH!$^6F5-=Ip'*R]Q7%à[P]S~鹸AJ_S>|Bisoo1ekG|k-P֌|+O`Aࢮ_NxSZr#֙Iߜ*xan _1thl۲M~jv}=&u.=sŧ3tzp Xs dT*T˜*9]YIbzM; ]:.0΂b>I uDqrf5 bq&/_A 5P1oglDEƓ> M+Ap;jɦk+aqV$!,`4Cu*/jZis̩[ j3Nrj>EuwEr؃a₭={(tY xW*ăzҜdeءC %m G+F79clV?'[Rs|2Ňa !rQW [K?Δa(imqmERBLd"; Xj8TYuԼAS=Yĺb&¾.#KZiRXKmU<ν! bJeo`CKw}ʤS_`Eb㢲@ƹbNC䐝% 5KN#H7]%ۜk.ujfӞ`59>d H1K^xNJcX&OɏĺEXpF#ѽ$Y |K9^\P;n,ۿr|:vz/ vp|pcMhRKxjlz潖Kg=f׼\g:LAXY,fVlMV_>FVSގ2|"ayhu pUSGڴAR*,\|%A<^ 2\ڬGb꬙&8+׉b:DNޓ2D,7!.c|Ea=C@ʬ,)DC]#<3{u*,Ad½hmffTi' ?~.v}T3ж҅nqcφ(Usa:T8vWgk"NWrii}KBL |}hyDa_ C!x|]F)Xg 7pD=:=[*&G!o* 1N/f16˾0?QO`[x 0_{{;7r:!⋪oJ*3Sz[D[,匏5 5VU|W܁! ֗cA?:Uz>a8U_,ZY8]w-ϫ[rKkᓸ\nuQ^28S-[ZuIF`JʣLv ߚZe No)~Nb)ehh^.&>(=(*m ZF9V.dt'V1LSDnݷڤœBٽ P[dG%`+ϪkQVw:: |׽׽ Mqq\p>x!0|ݭaw7*Vy w``~4MZ\ēKQ-⢷b=DR؋*O&f%a^fS}1'ywPlW$:pR[OQx >d: }F'2PX&gԗajBm}uiBKsL !uNr[+BR6 nz'*z]lT`(a=[Ś-=NA7 m')2-/>;nQޙMSd^7qBV(Z!䏙V8AϫXeC%& _↷+̴1Gʽs⿑^PZā^Pa ƺ/7y͟x'~mylңwPX/i<w8;{kbXuU$G|l H_k8uŢwEpH:uDN'wb?kJ9яNn/ܬq)x %Yl&ԅAV2DcG(+|X%>v9WG3lgA#y[_?MŦ@`#Ӻ)u_Xpg>C;~\rU:|Z! >NIvI{oe܁G֐LT2~l斿Аc-ʧ=Gެ=9IRB҇3S;]O"$mX/JpRc 58Q52V0znR\j.!s]:˵3* 0g˿}~m>d[;dC=f7CmV%7l+<R8_tBxǽ E ا߂YGVK1K,2>u X}RV8*;gc[#+RxŇ-T>cTO,i2TiA*} "[ u>tE' |2g g0`$Dx+Q=u[_SC؟t$]O=zlY)~1W[8I&if{c2hcD9`]"C,:S!f#d%RtFEA\d_乣t%*F!'o7;Zf2-͢ 7- ՍnOK(<o28 ɸZ 6ϗ-%:j7vgVHlujnXP+ŏa,QFv,1%hܺZPhw`p <יeϹ2b9M?gtݯh$<'bfa_[/8֪ F̓"!X࠮]xǥ 4SL-Q`f)(ȆuU; $͊8@a"LՐ<8!17DX#dPIi+yq%ԁi>7L%W{ic$Kgre|$ `p+\~5Y]޴p`wLg%%␩Ү+ |_` L Yܳ跙z #cVI ܄aßQz;I tGJ(w{3:E!sTQ6FvZvOM-{BrNKI@}e$3~(T~ ρITP~yvMMX2>SӪ'] &eVvI™fXW'1Z)׺NuR+0.2<`5wOoN%/Æ&Gii3TxW|54~>\Y!~'S(#zh`0c>dٴ v}B94ǵݜIGXCv՞au&q&΂E}1:Lz Ň%_ôRE3_i{F{NnjzӠ|_ķMz2SqrD:^.T4r>\~`QdYSr͸Mwirp;̏gwKY`ޚ0sQ pHM=̜~\h 4\#)@u;.@uq?yr^֦qPux3X&!55,L+ lZ=+f<:cQ7"vDwQ=Z"R\>FR%#AB?/ȉ@;$JA60)z)J9 cf\NqޅR6;+<* (I)>B#$ǟwS~aw` XRA=lA iث]rntV$L`< V)'TkpH!s~ tC} m҇aI'ޒ^zC>%o {m7Jo8;M!".p/dnտUXZ[7\fU#RWL! tۍ&4[4 UMKYV Џ|{eQ5)Ps_MIljjx9Pm_evY+'pDiPH}qn戹O8&'<q { n8qlR5n]&uv]1ceZ?p~ݰ3C+"Q쮘lyAI (G_Q[ ܹɳT6FxJf%ԱZ?q3!*3҅P&pZl \ݹyozPA_HͭTw/"OO呼S9kVV\xu .&"1wLɸO3F'qTo%b9]*D)(6ᴓnDhǠzr7{1=]]vдYճonXVRwE}e5FlGO`'ukLf~ɑB")T1@x, IO#Q)bJND.c 𔥎m 3K-* _bWtM꣺X> 5 8mk ?3s1-館*},aҙ201x&Zk|A8TE-9kDq pw ܸLxj^ㄾ-֤9γnCha?(?m8]P ^IH6F9;{KDIVp[nڳqȯ#AȌc1&[(K̒X]G"l^k ?v {VkF5k3װPE[ClYBr㼆I }(H>zs:'ɇ/3E ._FJ#YXW` Nyo4I 'Gji䂝&u<,280 wNf~? ֧&1qLd]679V6HqOv4]Mt42ci~p^79iv)|8jZD}>z96*TWP=ٔQYcσ+0Hc`h8\O.7( g2&_wB`v@6NprNjs9C_HԄש7 ]VP9/ofQ 1)IEhIOt Wc fK,: +]- oz WEG0Uw5Of$haNH_zoz};C5o;6l@KPK2d2E7YlyV(qI OC'Cw ۸)ڨN wiHj̝%X;|IQ.;Zyx  ԟ`#mp?̽Y柣 .Qa arj<Cu)Ob~I hb=5"C_\tO[iջk  /O#WbI"bU(wTZM<&5n9HUeFy 8d+r-Dߦv^5!zdH$cH=ue4uZސcA)2hɼ%2i f@?5HbW N=QHg/Uz?|UsK  $д~t 6ɝ`8h=l ~qYZW6.3?X 4~}{ԅ/^Z +r1)0/p!l#VcI~T=&'~q:2X˒jLPgڛN3i&}pλ53N!ČFaҚ"znv[ґC[K|Ӑ |_+8>堞~2sH0CBpxK)B ~ؐ:/=edR*j)]U']r "if٪Ȱƿ +ll\8F)l9wW^վ1#٪Kw`@,;.Je hïZFv3+R+ n9dO( v2DF(Qu.4#C4:\9v}:L|*ȖĻvVOoI,$ϏySA$7.>hv3%/2)_%dԞq=ih2JV}}g7Π*4 d_RvV )`T@d]zCf ':g#ZI?㘕O^GFٜÏ <x@NW}J&BNj ![i|AӾ{]_:^IҘv\L|띝1%VAk*RaUuLRsQ']]hrU$Y!# 0͓=m_Egf͏BDFM C5m`CuH }:y"~>YkνqaI6\AYyeIû>c|(K|YuH*1wf4;nli74&ܺrTCv:4C}69A0coOv2j]9>nn ")2HE(<їm#^)+M%t;|/Pm _L$KHk幑 a*\KO^%"JNI3] c41=(:B%VLvZ_U$ 2ҜwaʝI$KNaX]1ϝ#6pc DP$6AɆ7.l%'W̺V"a kri3lAk;rʕR\/+odg7N2*a20*,yrƋX< `p6I-٢o{5uTB\pVaMyp 1`#%3tzJFf*N<$g(3# Fi;sM\}9 zi"cV__~xǂx:@+TW#KxB:V% ҹ&\ f1b,O>nkh/t ^{\@-)~WgS3:`Q ԏAAYLi^ǵ-liʘ@ւKk]TGW[~ǸOꭧ$<\zں5,g^T. $4޵(ERLbY))o#;20 u.w Ljm^ Q|v2Q~IK;Blz5 fId ،RW'ۘcLVeq9 [RRQv9Cuz5U*eވq:ުN\Xh;g-{mg~巀LqǂZz~"S4F.S֦USVra=7R@5BE!is@DܺPrLS9|h&,>O3`_i/$x۟ oq)5C=i[9 g:\FuFDL&ɰn<7J?va1n/j*y[nRbsd0Gy٪!(_b穳 .tCf%9`SlX8bY_p&E2q2VkQu)'d 5ެnh('eK\ kM(^ջߙv14@Ah`̡ݾTF endstream endobj 86 0 obj << /Length1 1714 /Length2 10014 /Length3 0 /Length 11114 /Filter /FlateDecode >> stream xڍP-  @4и'8@pwh!'@Gf̽WW]k휵 &H.Rsshٸڃ2 .6` MSv\^A>Avv';A4 Pt\Ph 6V֮e@oc# ؘe5Ṣ9hnr֮Nll@VG(3rAAT?'cEhY۸ittB@g9A oN 7 tENd#hn{ـ6 VWOWflwq|mfτ?:d%bbc{DiOYl!O2>v/?o Xڀ-,aĦ qv)HEy6cx gܚwz-/'N |Cl,A?(>.@w ` ?_>Y{ߟ=leבbs}.n '@,j@`'TlSO?_\*ϢѸ!;,7oCn@{Ϛus}ֿ sgA6nUp>cqYٸ[)?ڿ RstX8Yv/˳"pKʀ-~o'/P؟x^E ]C,!(o&)l#gHAYAq#ng9u|fX l+ >rCg..O/ϝ9 `szſ" >w/Or?'s ȟ6s7c?W,: օvHz@'Eh ,>+N; -ȵDh *ŃQkRD[z/{Dh;4TёD +-}g_ ;VnEiqS_H*.oA:'vs{CU4n ƴ4SDlx bJ)sN<Z\UlTy4PwHuz)~2zZB},^c Ykg: -u3EH]F{K,ǡ  bc`\iT&w9dn$T)ٙy\j&Fu#TAoxOՕyEHqp;nr;қ8;q}]'F,¬Vh*q >&9ˏ!5h{,UjcD!X,_a"˹PӖ8(N}N80,ÆmT`TʵnSWr MXarO@xn]8~ϐ?|p m+R`ya."0 8~E7Ό﮺iHv=8\.U b>`e 4h;< N~%xeb||I&<Am:JCJQ>0"ʭlv1)9)zZ'n<-'5fϩ{,XVgdS*H.0kt2f =g@?IlJƔz30i  Hpxw P:lzgc-Lߦ,6$SfņJ^M'%u3{妈W<6)L!1]hS'~_ӇwޔFt_b[7 32rCh`,j`h⇘z\o?eiG< x\;?mrK;VLʲ7eUI“qzr݊BH>PUF̱vw1JXO3VkxaZ|DwMS bR/Rue}x(E=Jܫ߬~H'󉪭2dYL^Ȝ+[ӹ ڗ_;|it[0Nۖ*rppDh;(_?\*%e xh4|KLUID8ΙFPċ/A{JFMU`ì5ӧ]& =:wr\diMs gNː/;< xxck,;3M8(1jxiY)7C9l'OA؎Z(oX-;McUr.q݈,wq=$&S4A67t:w V]C[X28mRהFSCˊ,Qբe~y-Y{ʭK;A}+:˘aY\E2rߛx&dAFqӟ!_r0-q (hG+ 5V /7~ "˭쉻:Lj;)VГ]q4WHT+VRcLM5JbʼۮO4ſK%>Z7cBkhGcm/Lw EJ.ADq43Vֵ[QȹlQVa*x78;2NYe%!91݉ BnJ?)%YrEK*A!|Lqq\.˪2ɤ6[;KG=W07*'̟S5`KVT ~|w`c@kc@ "\_JA.efXnnR6*t$Jk}\Nڠ U)EQRܹ/FR$:ז*A oHya"35-pĮktΆˍ]Sy@*Jbff$^b)lz,ЧpoDT@1U/u,͔]^z[ȝeFKKMox`Xⓥ4@V䡇Vl䐯XVj4<,uxK< M[lЇ2 ~q0,(PS3 g%FVH2j,UbX0 $jkYoػw 0S;Ieea1ӷ(!/ty?6j.eڶ=+n.瓾 aR$b&*I591S\ ڰg.?%jFEQcMwC82C#x lAUʹ\0v $#Ph6SWړh[Ojq x_._`G]!Կ4ژC@Ci[%2'ϊ1-7%vFKaz^}^k|׮V:yLzHJQcH2T7]Fb Jq̉3gF50r_ؼk?( }U$DF!Lu!׀l˶AE" ]/J 9n='TnDm#3!DXX7_c~Zw.ܝ~>gӓrF+#$dEx&6Wb:BR} 70ZI*^=+*Td 0}J\#R91v7ˑ"k_ b‘Gx*'(tt^Vfu6o;мlUFLeP;ag1s1h k{m NzK z W0~N R"Ub!P#"@h#rk91N0A&wՕO%rQ!Nz,}RzTwEf1E7eP(&Bk#?&Y-\ a>}hKB{f6."Lz9@i#[Z9J:#y'+ mQmr<(8X֏J Mt?%?ġ}vKYW:C(eV,$C:롸K\XE}ZAMKNSz?'Jz6@U 7P)(Tn` Vs5נUn| olQ£3r)O IG$6ȇXnu<$/n3UDŽ0[o,DCGH^aޢSXu!!k;?D2a׿V.ӆunWՐKkXpwܫ'oϭ3$&zn¹>vH{8=xqWȡq*Á*ѡQ-5=OV4&N~>bWfPV|F_ԽщZr)iHw`ƍ={[W9ZHMB2v$d.6q %h> v`BpQ6gٮj]a(\3*|:&Et_v7.֢Ma؏j54jU-#(r)of2r"OoK_l$~퍶v$ Ɗ 07TC{-GzmKUcwў^Y,brӘ^'୶|HZ%n[)EPnbb%I3W.Y%^@dh1-U &ڦȺϴEezoz~ V *>FR{M-dMܩs5,iacIn\L^|mD+y#Pңd2~ {#jq9˃_  6̿_ΏK+90uL_t&1sʛLŖD{s:YӁ'*/Zt+_ˡ[}(':!^Apofbf߻lk!\ 0E΢ê|B1@LN5 E 62;|R}Ā>R O+\0gkΌͶfLч C98SjlO- VMp*14vZ]7#Km8Θ 􂔋yQyt3Gׁo[&#S,3v(gϜ"Sc-sL'ĎTK| hN>A<m:(M.x÷DG烉>O:&7 ؿ<,͈S>Xhm7^s1ܧ*R>}l},Tɑխ7^$"u-VtKlj^FȪKݥΤDnt3gnPrN)>"29h_66{HA=p΂$Oc~ti:W}`%B\uVUѓ^=ӓ?mIS=<tյf*7|) ۭ7\'|kdCjyݯXX1.xzVdf[M6k1ph?oL+Ө;Rq91I :2{NO6]ު E]QޫC]M LxvLjp&; _T8Z2 A+#bῑ[TlnVꯙ>=-OhwGfVQA5K"d+)ҽO$fVlwțuWV)&]02^f\:!!ESGn Nt{^kNOۅ  *oBf37Eåjl-WX-Ү઀ݐWO&O(2 )eB|}<⺹[R' q7j%)ĴTPgrAW2CvZnйe靬W$'`2&ȼ4ۡ%G:Dɜ胸 _W1Ip=+1F;08:W;D l]_@.+] =Q V/͇מowm%xdw);< hLqDscS=yrY"!,B&^ >mĐ.]O {/&[T5ۻRԱ bmıKKYn&I1_ v)}\-gYBkS(%:+PJtDB/os%@m!Fnm~-dVSOxC={꘡+ hS"vZӰ 4\a_)a)`[ߊk洄]T{drra;Ժlވ8hɎ *Ԑ)Yfb ΪYoKh=(0WŚAAcKWdT/;rj|@JJP~T^ DGB^OM?D'ѥqDM-Â9liz@5N'eF@#P։t ZiIY6[>`M-A3&Flq+ňRhP6ZVL}(V%ڏI4Ko>>~TN=;&xv!Jhi"gH-b9;7.^Sl'$E|g`9J K읈DA7lyOQ|Kio3VQjT{A#?T=_,Sqmv,Hiڠ{q!ٹU\44;8Y=r?,%6喱[B ^]+!X# xh(S!|>:>k~ Z3 Ru-zWu =؝}S j/r*<%qX\Vȡhd)KD/u8Ң QAcɈn&UG*#dYw7z`N`28Op2Ŷo&zŠ\ ~5rkw._4F l5?/uk}Lf´J}98IȆdchG#ɠ[z#v%[=ss"Vd?-vӀ}QloP~|6Wз4u9PQ~j1Hd+q&[lk8m F_S &GM&|áڱKΊ!/*%lYR[ 5wkBE"8qWbCyTO~=JwxyVZ8Li-vSvJ%0zavan TZ Bn\V=ϊ^3 U,VpIٽi;:B07# +̕Fku{ )mJ'TBǻ^0hMY|Whf?LqA`L8>SV( ?\4ջqsAS̎C񸐂惑I<*}J݇O?9›9$=٦7kZ8J>lEdv s+AQ*&uGj_Aײ-IIgP.L,s_tvT\deH0q;,!nQUx;EߪT!(<.WpTgrn~}5T0_T"* 9|'R Wn9Sny[,`cIʞ[baJHhŴL*VnJZ7ثTb) 4VwòK, s{CdQePn.EX: ;ʹTG@-;}D5#7ޚ_D3Fز*{$.zub a\h^^nxc`/(.$$i1}f; LqOF:P/q;.ڒ HNnP* ͇Nœ #r+.\q4j2mTjh/rҀ"MY9{1!hؑ/1@U% IpiQiE}suƿ i>1}5bjݎü)ڝCȜ" ,Bi-W 24YU\0q^; e%f ;4;ok~}(Fq7p_%  @0 %:½Qy`[Y>[g7'j ~K";W=$ cq~+> stream xڍTl6LJJǒ,, ,K,%ݩt! R]ҥ"- >=k暹g>0hK0(( Q<@ 7.ˌŠvs"ȸ6Y+O ({8x\\@ & 80(A?&3KHHw8@YAjVp{É +' }+="asgfxAm;l0@3,=]f r N(4\?d?6_pqp_ V  l!N`*"Z9< NVߕ[䥴V ՞; wp8jW)Amd``(W}70a>n l!P_MxpA!`%ٿ(&lv`8 7ȞWz]o'/C.0C`-  y}okO3~|77=._fA|_Neey9C?퓖y|yx|@/@WY4 U'T j )aJ)gk7K Z0?\J'_Yo߂=~~?n+g_z{R vV lp_avN.hB ?bcdN(Xع=lpPoaqH9(fkøVnnV>X!q|V[N( xh` suN_H8uFBL׃9|Nȿ / >8] /Pۿùj kh ߲~7 ` 0ڰj)r/1itfvEvO_1We]H؃%t.D}=%Y"Q{rkaT]%&ߝ~#{Ne|W'W^ u}eF"vvUo˦_ř0X̒Т)1Xy̜_LS+'bykzJ.{)=1 %9$Teyߒ܅w9fX 4L;A|Te.cûAhߞ˷c)xw8kQR>qp/:f='3 AGc^>uK#b7-KgYxͮP/`ѓ5iW K43:pVw-c-0y"z7'y3DMin{~X=tG[mvo*O|(ܷS7J*B;0q`v7TodW$\YoF<_<3&)Qq܆&Vj?4ݮ tąR[`Xr ڢcA- )\6w[-K'.25jlI6YBPs FYE:AwҔCT笡hM"v5UmGKr:)g]v ա O6ޒ޳dsê̻6kq"]}j<`6{^jF]2thڏ}&97Far(Gs]c!B[fXn٨2z1L^/ȷy*DݑVr6Ǒ1$9>毴ZS)p?nG&e\WЂmzP`-hZA|YRY5?d옻x" -RM4A qfTd|Rg;4'e@A$%A!t;<5b+`xJ"jHٖ(bq—zu~bg `+ϟӠ/> l9H~+y+ēu"W G%:vI 򸘪a<6w )a7sޗQ$>}fVt4L^ZjҞ#xi18 ~q'W%^F=[AGp~3c,lw B8>| 7xlӑMQK*^?;5T{@\8(iUw]T ey\m/3Z?{`iJT>WD6U8<FWTMyT#(RonI⋩_! r@KaA6PeX6B7n)LabtYw68m M` {۟]?4lk&el9+}W7f|l  &&uo]A{׹byީvv'Q>2zҷ{J۹#ڍjF8.Sv0iNG^WC5PK{YNp6Hɗ"-)7Z\'7(!֭3E#qBtLJs,aU$*W=GHSPa ~8}T^(N1J-*hlP0MzϨKlv^jz3rXQuWhqř#7;o%$+bA<+;=Wvs BL!$# hwn?Bko/^D.z$[#9]^h=9fG#^B|ʉXE/r=iNg,?ӿ%{cIO)Z`1g%R4hz VOkfIʢgz[ "C1KI@192fʹE";1z9l$$'-;03 rÕ`y|c qP?\ hɞJXw&vZǤJڗ^&^ʣ4< Zb`SxTT-X{[] 't8+) sn+850GƖ )qkmɊ@tE`Նz/pqS/I nAF+-ñDLf:egV3 fT :Xv$] a~8n7urvic-{΢>(M𕙼s>.N41L䩕^h𙣋-YN3uEJӉA.1f#ˣ( NOKb>U>W%Hq/ˡ`!kffZ{- o i>_1PjɌ]u{, KGx9%Ëje[KUJ7SMi^8+ʈwQc%M5Fꖟvَ_7eFd#ZQ1 /M8e/5$i` U](l?Wr}jd',_S $Aih2+2a0bǢ@D} 4- -ݱR^Ҹ)eݒtʥɥa"c2+jr_ eRekY4&;yshŰG.qs4ym آ8_! !Kbkgrh-6H}=5|*X^{&gaE6Y=;~8x]2&#~]=Q0elhZƗs6l]![kV}_pL᧘ǚ)C3U+ 2DNE)ZٜjXњTxL w?ݏhV8mvj˾JTj.'yB"EmտTCx8ӗm@WBpem^Jo ĄRR'ӻ=Bae~vNJW+v%mibxuky|>6Qg#k=XjזOR)f2ǽk]D=)ub wmy븵I\1 wy)Vx%]C*t`NShEs-QZD1^) Z5_1)|?#v$MEcy{|Xa{ s~}]_ }3tTوd6,U5g'V_dfp\Qdø>? #Y{oG2SEr8/,Ej,7J<ȭ\2/ 5"`|iz؄=T:,5k0XyA8F.D]1M̲ZE3H!TAzYה}["ekܱwY >8~џ?:R!6e9Hղ_LGL } .!V cC!a~ȴgeT)\Ygu=#by`9l ?*}JQc%'og sjq{3ղ c@ cT~Zp\DPX~oVTAnZm읛N&%^.']\evJ耴Q'>EK,!U4ZOᮂ!]'+>{UIң[ՇihǬ9!PA-w>ݣ?Np]Q[= z3INj3f ]eRse YmE/dIe\T^cGKG4'L~!n~yl֚1o)4(uF*I^N1vaR )FD),gHL$Ir9MR=CQ&p%bP-I78&TJDNYc=@G*y޷v Yd9hmY-䡻xLE'u O?= f<Ε&斞RD:8K*ǎh%y {t:4ũA4QopSNj4ro+j"]0k,97_z+ebS-kԩ78eґ/#0_`d+.CKnSj9{O )Tf;h;P3~U7Ey5ԧUw k >Y: vB:qҵ泇u#BtH.Fhwa\gMfG=as!6 %~|eڂ<=Zj@LN%y cz,gaaA|u/93ܘz ܽq <ΘR6s$xy&ϨkUDs23t*9ƚԿ sSu&t k Tn`Bl̍1řt|ފ UiVWk速0nͲg"> 93s+~tNG\5{⾑3άP2cETS ľ̆Fz#ϦVeVӎeO7~* O~aOwWa#Ur3rI[_=JMya qQ:XLQ,"2S H>ˇ7sW* S/iU%#?Hwn~z&t*O&ոO0"':7Sh/Qp4 sj3'۟q4,xh^Vnо=r+oN\}'{]oe,0XzR# 2/36:MjK;EŒfYAK&&"!=vQ@* ym͠k5+שy&pd綰 , G|ޯlddVVQ3?Q>)U*UgI(*QyYt =Ÿi?vY,Z ÈFoAGg/MɭƔaXw^|ڛw53ݯG_^yg{Eb!7Ji*^vdKVA)2A~3mW!10RjtLq!̮>ʶz6>ුKHߗtdAj'>Wһ%rrRá>C-s,(V_fE)(~l &+v,YE *,YRNB9eK ~ʼ"iɪ@# ^5Klaګ˚0(`R[a| <ڏk}Pdf_T> U65n=emgY<&+B[;gA+:eg{JݑTF/2]mSRxgt%T ?{4'7-'ݍf,| hNv 5xUV #D~$Ƒ-%.XYX,Q`#]QmtnU2.D~ ޺x7fU aQz\}f-)2uT]ă+ltQq19ňݗ= l\jJm~i >@ _E㲛C '4<ő_;^m]NTlmIҴ3a^Hh'zl5錜hZ3X<b7>DpDԶzGbi 4Qh܉%$.wP"Uo۩IDt ³] O!&-c姍BNW1A>s\}VV"*o2=TmRcZ@X[wwy s;fg]bq9\lY˳gv@)j&Bin~ف"ᮾ(+UtoO`$y5 _v>U.}u\i$16<)M6)Ojj2 fNl3z}E͓/_ޢdiN]߯L*| ѷtn(U'w:$w=$H&"dDlxq\7fYq5w-gq4(,R{ki8ِ -d4Sd<xfh\iSqӬ~s4QF%~lwj4.\gR+0E đ;𬆅+]IF*j B+UӘa'6b3*#l Tu>\h3|'t*Mdf b$j%fVzyfȳt\g ŕTSp=9v_(ZTܮ@զ/~&Ʋcm#I\d C>AMv*hnhh'.g MV}u6Q!~LQ{pQqNtv1ac+M_?sٲ1uQL)!ΨDj\>:C7ޔJ _]h]s21b :QsI'j.m8m&n/:L1݈̽Ⲃ&8I D[ % endstream endobj 90 0 obj << /Length1 2435 /Length2 15302 /Length3 0 /Length 16722 /Filter /FlateDecode >> stream xڍeTJwK 94 %Hw JHww7HH\>{?Zw(IE@&@I #+ @LAM^]†@Inb A:9[%#4vy*Vv++7 '>@ :#P<,,]<+Ɣ:@dejlP0vڽy45L.c潥3;3Bnb P:܀fi$DŽ@ Pr2wq7vV@{7%W{3?@MF[Xo`ebKd`lieo0$\<\fmAonV&oo Q M\lg[%@vv@{g[9M*OmAT\5]2z#!Y],,,5FV{5Ss6o^%MAfw `d6Tloַ4z5f&{˛ -C_9 wk8"I#n`x n`2Л? ,STlAf?ͦ?͊?-'cS-_dY&]GQx?ͷ)ppw\Xx;i$ƷeevxПpOTortL_ed} otW9ĝߎ7x.N5- wпުg<;] _f_1yoslL]*׻vz@)Ȕ?ĺ!Nq{?WWL_qm 8 nyRrĕG,k  $>rv3b ŀ?aj|ȇtG3qҏw(UZ˟^wQ ^`1LIOf{8uPxjY]ĖwFsȜ3aR. &:|=c-{{JJ-C&S8q`wF\$KΝu|T2pp CJ7w<.>.?5-Ms1jjԈ|*O1=vX E؂VԸštH{ Wۄ]IMx:OC.(e5+O NJ}FrzE>4#rs~z<]ԋE|Sn}U{5a ^'MnA"x/h" x3ďӲϤ(hXV[ǧH}`"4]P5iUB{SPfT zfϑhin(^}T Zzj)+qФ tr(ʗ5˃xWh a6FR7 ~rpxQ~\ ˙CaD"br__zJ8ˈ$ HJ䓞^~㇖xV J1C#127aLo?WҩeHY@F|{TͰ*bUһ)d8z`]hf 1Ay^L22P&z ;?4sKu9t=m˿V&s0UQN&E%Jt}S +jBzO4g8fm,1 Eo&I٩lJ{G-9uȴ\VSv-wy K`өX$ʹ](ؗzIԨ>=Q'bN>,Y=$ 1m׹M_Emf[9zƨ]vuξGh&\&7y2Qh?lEk |T<ꓞ)Ԯȫ>@Aܴr9 JU)[38C :}Cx_uB/VlY-o`U$KRӥvפWvn: ]XOvN Y򺴸@ ^ @^J+Zfi_:wH豬?ѧ29 G.Ili !.L2_lȎ:$_bc!GG\\52 0LMk0>F-FfWz7᥈q'=oi$;6d!T^dݴZ#=nDr 5fTmϮ07!׭w \zWܶȾZX ߬[njm󫍳?%NW`\{Sy\0@Knu`K/ zk r05rRY>2a!COyˑx>Bo1.c>Qڐcrr`C5Z򃡾#IevU貰RKN;&lA9}m9$Qza̸wE[S *ڦ .iB lZ ,e'Wf?u`N:`) R-xZ&LkR$A:Ӈ\w=̩銔Ndm @0b 4b̅= i!8Tn>[d0|:PX9~I&-Wzidrvfa'{. Lۏ6 00B[:8S:QzCҕڌB!Jich̔mO.C+^g ht9M̺/7Z_v=16C&L>}[ȸsLJ*La3F9ea͉Z[ۘEq<'t)ZB" $(0vlm!ǰƑǯc W5nk4Yy<' &{A'!ffgMPzr7+GcgdwxM5! #$,<fyt"&$} ( H@Tùvπrݩ? ̧^ّY>_6@8́I|t" ]/j5VM#9iuŭP:3$(GfPln?4DXU彶v+t(pqQYT菱MKAZd}(ݯ]hJµr5fOtoè*ѡ]:M ܋XZJ9Bq5:m臸ؖH࿊_m𡅢dWվSLQ*_&W=^/{٢]}=S\kZQ&$zn "v3unQ1@Ԉ8_5Pr|&9l~gEX W.t9_eٺл@1G+NK֢kVPǽAm+&7{zw,WY n";;z;2pRd km-%C M%>V{-kR0K 7\uþ^G- w\iuX&cÀd`>KD)2){|&ۗbb,t=rSL@Mj.ޒ3X-6"{ OH):Ò~m*' yes ϐ+T^E`{htڗXG"D cXvtsd}̢ANc/:9F A8 ]غfT'V7trQPvrcUaU`Kjx5ZKK8;(0>$5*A*Ì1}f.rTgCԇBoYݧ$QP8;}.!~ΜD.!ͪeQ'>usen5XVK jPIyarݽŰZ3?; x|<aۓ;rשּׁUT?o2pX׵G2 3BX25De)o}UW旚`+gnY `J$22#{$tcapBx=l2?&nXNwB0֙KU6sfG@Ya“>;M7~MjchRDFv_ARQRmZ9DHdlJyHkV'㹥:겵7'A+oQGLQ5s$q./(hn-:0ϹtiT@jj8i߾nrBbwA@ (wٖW+m}3 CjH=!`_l޺W X筄ʬrt!۶s$sȱZ(œGjMc@A !1J$[%zx{)z0VVm"#;"IdSl/k}GNշpJ@7Ȅȱ0Msm/UV=E}&+ݰ[w6ȓ˚ F._OjHK3HtcLG =D ?<>#Yu? s50np ;^/qH5vv}edvFY7sč J蚙0vN݆d : ؍CzV;h?"Wv/w A8#jňեhj%=2D 0́=}){K<+qܔHAG} ܒ7r}uY7&C~^øn$lw3 9'J86P;a%;ֆdQL͒! $$EڽT("|W 4A_@ʿUـjnڎ H`f,OYN|۱X]/AY=<[၎>A]@F9Ιʾ4~Y rԆ|©`ݳ?!};2k;ZDgrZn"MZsns&F`ʒGy8 0ԗD}Q]X,92wzTjj#J+G$IRp⮄tw}Cy=ERL'CNv 0T..ґzM`AKS##9y3ՃUA5Ӊ~ZPex$n4͉[io"aH{I/*Ob$9={J"I7D\%׉GMx_bwUKW{|ߌ5$Wjj4 "vds{&/MSw#&~bRbp:2%&mbjTA[ݩ,3h)b1~hfARk= ͯ跲fvkߗtf=2LLRe#3 3hqEӐgvDJ -rGRnDYV FFVG'j$j&l"_.[SJ] i %ώfA.-tc96K&>,)&$Xmoa[pH7?vUk+y9Gu|$t3#1wHRk2pdN5Ee(e{\*;06P{!}t8~u Rq1QmAa>*\Ǣd{$1^{tIl hv\ЧBX'E5KWSމ_6T^9E#w+BZQ%"t+*8*W!ߣ(u3?\&}P%^P qfjfI 붿WH\NxWbHU6%Tjglrh_ɢ۸ςVA҆kv!)>q&wIs0&6eV);,6C3B+MEh+:m/’j-esg&Nq˓' \_uQ8.!x#KQ@etpNM- hXo%aPm?.s;b0Tݭ W,%`KceU\J`T>f/9,/\oD'Q9imcSio{|V>!"cU}}{і qć} Z+ʟ$pneZH0tdUijr5}@,콶2@q A':ze #nP0!j|؇Q"E&Y1 JK|lTni vL;xPFupJ+JC?qW3վ+# ߡ FHݕXFi%V,*tS)ިf q9˄gxNm5r޽Gb Lh qfmkʲnwZHCAgDCϖ=7KU<$j|"`m$B d̻l tϖ*,2@^V+S ۚѡAܞHq}1"K;+I7BRZv T[6n(^/GqL+5eL&|Y)򒯧91VüԁOK$R]i}'զSC }dlu>}rW;sqikġk:dv v; b^q\N!ٳ5e{K+(Fvud( ҭpD; {=ǿLC\˞]w}9уI V\v:=Uڤtu1yx7Nfb孪|qFtR3kƧgE*8v_וRK`ʁ'4:Y1qL㦳]^3+gD w<8̑bVEb,هfsTΎ}پ6x`.C~ !u=ֆ<+I \e#`eĶDŧta &g'U6+ I85u"\i41(gz!\D' RT"\x#xĠ#G][g}uZqc\{w X=;&͔'SB2~.vE*ӷvm36afE:{3eOIJʋQPAԌ5~ {`<;b[n g3Op[=QPΣ? j[n|BF3܍O5QZ3vI̾W5Ĩh1ES}J @Ze^ xg\M\`m4R.&}"/6}bǚʠl t8Ggq{L-V|GlNR)7o]ȕ$O(ۖsK͹< 36CxO% Ǡ=JQL  +!=X|n :sL&޻|VÃFA`߀nFBwyЙ0Ksx/8B9`JtE6J'f=]g=jLgv~rC?yD x4nPÝ2+2I >kTlYJUόmh,s؝}$Bz3rHs+ZJdRKwJF mSrƴ؇4^A#/۹* nYN2m=mAR+͡;ٴoFBE|EaWj]Rvt+d/4Ï7nqSI  K;A6,Ck\^U@rV!V/ޭ|X:vKdr; OfcOam6J =d̩m2WT>t:T_(i4Iӕ ֗X/%N`<am+X1\b2e|@ ݽc*$6 6`#\0ZVBuX94*'!Cu֨:AE`bݲFT_\>_ޱl$\ׇLWsٖpE3J _F92 ;|LKXhV]26C3>0vDT{;GWVUf̾qNO 6[UF&^S5:fx;PQ j+zz$8~TY&-,8!Y44|L2E>[4`A4p`jr)gvg_;kGQ{(D2#}-v9Iͤ%5>s{XX}n:S]ޖt> !aqS+JbsYUD:k.3n{Y:n8˷ag/]I; ziwЕs6N*=%&pZ [G> u+=tV֭tu*tFNb퀚apj~"; i> SKB3~qϹ(gr Ǡh pRlbfH͕<ɉ/ɃĦ3kR^ )q\f7ݒU߁tViER6\(敆xmVX7+c0Xk8X*C <}X'?Ib9|VPךgQD"/"PKDNy@)LYbFe1#mS4Tmj\twHWuB6+ hϦ$*9iikR?.Ej01)Vt#5/X=f?}Uk|*lyy 4yf_$\Hyqh@Ĉ1Uϥ~IyrqQu B}K$@-Р/R*4~.nyGd_zK6\ԵSVR"Mqި 0_i:jp^P8q^/Er_f5ҕZ-x4(aע \sT^c%1,Vx!>b20/wY g4H,FKR1JG”蟒NƁ; |o>aFa/֊oRWpgQiZ⇭h|.æ3kTԫ^Iy/QJMF1o3x#~#Oz\SB]P8AJ aGE17( faϽ[PUqͭPsUkaFP*1]@[N"!T?#-o"JsqU0nr`@eHi1 / =#{ŨAzuWfOP`)%! 2u{U>==#P7mTuJTEN`Xn󄤞C"Gir?|.Sc'Z'~ )չk᫼/hc"rcByrhf'MY;ڬCfRDckVr2=v9N=oz*"AUtᢞrnQͥN)'v1#vHy:{qvѧNCLn`HZm5FFub)M^k?F7e۰eMDf=Ϟؕ3f1843~ټ8a VO J $~06%QPpjgWת$E39G:=e'A$񾓙0^W68W7걠\}j͇>[m3 [U 2.8>&;K-пis}(ʳ4V_$ 1WOC; JmYdd(ԚA<{w#˅'0dP' FKlF3ɉqv'v3U ]dմ}J]iXJfMa9.WRz8 "Vnݛ]_.xTӰ%>B`_v)Zdž&|KG]L?SUfj ntt (@7;Twkp1f~ c.cvTșNF%)b9.Gsjd`k3M2/$6?jSCкK.X*LLItq%Ofr{K˜$Eu]rT'K?ɽDK9yaP eo` }@DBoD^@U{[!l'*n5bM&_ pI\!=AH5̍@ x~O6S0EcmS ;;/[I~5s ^ͩSRV>ىzx AX =k䊑!Р͢4ʋ:tI(Ia*_Zr `Fu.u ZD>h*R dUԭz?T8[IeKH6_( ߤSzM}Oe8y\$ā N/gRra7:C"6dd><evCp#.KI?`Hz^~}=Z (l4s2l tVsX"zz(ͽze+sY s|-Ԉ%kd Nǹ|㓾q !>CĽ;KTI@uZNp9 :6;]qJpSLȵk6߬ EƼfm3ҏe m0Uڟ 5EQ@EZ{!WIrƣX =;"c|nEܢJIva ed Y>VDT}RkzɖM~ˑ荵rK< uӮ#* 3[xE2i y 4"hu'xc*-UKg ~8M@K%l>=K$/I|?!D -zJOR,8 {M@4uױ,B42&5>0gUF~\ОT>Fc^R;/= M]\VNt% iߚš˫BG[SzT^(H/6L<飡[Ph@‡($ǶpC*U/%e /XR1 gUeo$߇}YHRg@!s/^Mk}:QNsZ˕TcJQ{>.EҖ2+s5膈87W3D;],|>^HVf7a l$ݠ\58LL.Jx 65 t#jw>rUZ(smژǨC+CS.#(Ӹvqӿm4O 6BᵺE>M+6mAQ,칄:^9 ]kq! ,_Oǽ1&7|WLqk#IOIxe;@7E# dN7G%1* ]\p׸FWR,DHYu=+#.ͶE^3%A:_3|l^)] ~Q X67QI?f L{Ύn唻2`vkTNxMr|4s\Y1`=\d_lr1:dwUmS;D ot:<)cщiKwiݶxQNՔ+n8EsҲQ.w3uUZTןSpW[xLFCΨWQ +OTD`IE2fM<ϛ#B_8}k{`L ^lz:v@z I:ݺHNݮ2="ĵlMF @\M<R;`R$_>_P.a$t,G5VPa&nUM{}CLcYr씋C\,؇<)\}/tRֽ9ՙԩ^Uդfǣշ\RZl՞+BSXnP.2C6(N)<|GBO߮.GrYQ%܇+fIkݕ[q)#9iy.O\ >~-j)u/2 NIuy{~Huҟc妢Ĉ%haB'(2W??µ6> stream xڍxTT6"̀t "90 % H()] JZ߷f=繮=6;1#Re]cK! M(o;> EGm*(4PhyB"!1)!q)  J DxHT콠]F+#}=N(to\ n8p tQ`7tE= `A(qFܥݐ'9n>7 0#^`Gzn? Lȿ @`PDxtu@ gsBBJ'W"(w=psBN|P|{/= @{Cahj{C<( 54mV;*#pW*P0ツ@᎐_c8z ¡<*0hmN`@()&&*?}@΂ ;3#@(G{(Op:8BA( wv k> ;k4p῏XPLr*)!|’~I1 @HHH .. g{>#VA$jO\ g.=`׿( /BgWݑ' ۻAahz*Eo9/nD٣ՠwB3__v(R v4@//p AGC ~ 5Ϻp؄EFDBhU:}~ (G!nP'Ahߚ} 9H:exe"71յ$hQ3glGJv54#O *"y/} Y(@ao(};}frD9M? =J6d$¶L5z @r(='aɠG+wa>da[C [>$I 44|MPꈣa5܁"'Eڽb5~Z,#)ɹZ-H %s$VH,;3EEyT++Ŧb4t-ԝA_X`.5>1_Iӱhb鱸yZe ?n}1u`;dIMn=Gjƣ*מGtr''cR~ 0ɚh&B\hB:owR*B1xR3Vt`[*$w {ݶIr8Ƴ.zlWǩmKV9[)PadK^a${׭ ņ 磌2_Ovroh4]c; K Eە? PƘZ tyBϾY]H qn;r^HI@F̹!)Q!MmBU~)Tx. i߄k/QY=i%mRw?>e@^ 5* Ue [_EDw-kG*m8іWN#[I,gG, Tun7lִU 4}i)v9;ðһN%|qQ)=5 ,Kf+?ۇ) OS{ҘreGlUu=d֜M=etpH9};PhF/j$ӕ*RԼ4l^&/us]|Ob 765lkW!",k; $NX}_`ja/TL%Y1Lz><7lZ+ְ'3.E4O-l P'NU(K9I1 iFs7Vg>OE W'(J1{N~z 񏚴!Uq~&Y䟕>;xz`1) T>]Y|1B$ZFv}W}YU s0'+ԟ]1e=²Zbٿj_؞yxj3ĚTقl#nÝb/؞spqa*ӘP:q;8_Q$KLIt eWX?1uQAn-3=50P0!Jtd?Zh8_IWq̎Vsh_+ Tm9>m_m}-?Gyp*f:%ԏ-1mL2`_yD!vFAv+/iUF4 Յ@(wR(ܺC<+{hC7v}ƘXH66︇:T-l8rV~ok&x+!H`Mm$5]_xib:6GG]|̯yAcJ rn+4pn9r''+PCĎ-(ɹ,".\̛,_-l+6d6,p-N/1o_ač3o+~j /#HM\b&;}T\ԗJxr+Ew`o^朑juΎ\4Pn;bU $('<-ȷn*TNzUǵf6e5V& 7[(=Yy$BPMӛ^yD'yoZAx@[-րͱtZOעޮ.*nD5n 0LB|E1m5GeNôɧG ۳oI~$Zy%H=?3vd܀ĬBK9Ka>K^_z5s`*:GDB. ሳNNIU0%Q\xH轧Q_ ʕrl?9LFCmG z.=s/*^1c=w)j#b0_*aQRP񜯳)GMOHvFE(ܵXLVo03m7A3望ɡVQ~=#tHٺ!NccIբv$Y'<۵Ģ"%jN3 󔲶7s˫:8!f^}2u 7)8iPݝS9 <ˬ?HT=;Bg}x@`aѴr]jcYiPY7[<#8[8}1F\ OA znO?<`y20"2:m}'Εz6e'}nIyg@&J/&UQ:Z8ٸOˌEx]h<NV,G9M`25Hx暣e(@fuEAJ4QMpLc_N}LN;mfaMRƣۙrDc]"rZ~*z:,X%xt \"c/1Oc46zU. :(P>Y]"`4[rCY߫>AZ jI^)cg(~; 3}j9+aRV3G]jSض?fIS{pi'sIvㄸlXAG'r䡺ydlr ~s=ēv]ڨc_')c0dr W} [JUճOTWPSKN ٮ^R} ϕuTqXTe2bj0eK+;>_˼=I['DrSFJG @29/֕fscpȵe&-⮟j)iێNhvByFd2} /^ME铧j_M/ X_iGFVuL[vU\xPGzlFi'W\7d\Iq0_f)>+NiH5xf ڴJcп;lr*Z 3:y\ߩm+jB{p յ 5ZbkF+PLClݑHew*4q.q(R`u=aWH)SK\$/dkm,H{?WwfED~>1B94sRImuJ)wb, 4 XLw[TX֛/Rd,bܽIm|󕭍qPzlC؉W/q6__zxvP0ĠVh!Bc{Ik;_:gnfizo9r|Uq|V+5V1S:{mÙp -LՔ^ABzmeZL@`H(qHEo5iIKukFSdh߭O}&qʢN8}$lQO8cP\KXXi˅U 2Qrc=no9jNLF$đ΋%f$efo;NKjA9żO6,^*th3Ҿp9)x[CJͲFzv }a!V35],|ˋIpý[V9~)l`eYѧFv\ I}序7宒k|>l3]JWCzq, ^cIl?P(߱{ss!Fg̠ NJexގ6/hg[箄I{}n1Gy+9M&w߼a8Igj>Tfd7ݣUEGHz&w8e|񹏝1{[hreu%+p'~*8EoYk-h×tgu0s@--Jcvrmz[T|`3iRY]j97hc4TܐPTVnCga7_}oҪ,9W/,L'Yd5_=SkŦ _fZ#x^7$~5˚0M}dv[0U;zQyAշ̧Cc[޳?|-ӎwg\(\#mbf+i'0C/t7G1mvRa4ud'y3"\V{\,Tnƾ CFo}f0¸"k d#*j{oVUK5M,KR|3);"мYO0> stream xڍP-;Aܖ! ,, @$@pA;O߽_^m3jU5ފ[@@P-+ @BISΉAG فeǠ990$@@سM{&*A!y;WO./"I t[XPN=hc3 nr!% d\hЀA0J(l 9YNVL,70r9, Pڃni vˡ@gq~qXr/_߇`wH 47;!`lH+a, "tfτ?Hݟ G?<Bjo1؟$ d|l_-C,,hŁM vtIy6afx9 Gܚ?{r:,-A?^@Wld6,v?ˏ+gY@!vylJ:Z*oPw[.[Nv'7yyTX9% v_[v[s)C 0G<_r3Od w$bg/yxV y ϳ_UY]+>O8Yo9Yٹ U0/ec* ?!3}~E ?M߈o$ 8%|c `7yF/6?s-@~?smgͳ#Ak;>rr>gvי89=?@ ځ@ sPMepu8#=h:R$[j7g\"ۧ6#oV8 lu mS" 竛-YEn]87M VG}n&XO~Oח^X2b!DEsa!ju>}7rO!s=ɳֳP^M!vP8OK`:"xh{W샟RҏuB(*,c#0}FYB}OP5{,!VYUzAPuzM{R# WyX=m4N\E.9#>.*(Kֿ% \V)@d5?+^'k–Ī+Țz@ kQ (b\uX-WB]2ܤ(IiGvu]I|tSEz[>j vt{'x|QRX:ˈZ‰N~=n}$TLJ_jMHC9:BRJjTWdcq"SXff=q2qOĎu|m(^5*-W z&cH* ՗- *Ly%OuM.ޢ45,@ \Ojnl'yLR/jyyy4qh8.CόZ\ V~\ޛ-bwhdc55wkd-!3¶!uGh:uVQ>GKݯOSVvڂ'9nmhY?ľI/:qmᴁ׮0,Ijn#Ps1\d01Uz<7;_;sݞϯ.՟r R֋wMjo>শv 9q/*UF9e94(XMd_۩Xpwӻ_cfU+uz^}c]77i$K 7j{SqTʹܝRR.z3n5A^n-)_׶.*P0XłHeJGآp]xtЗbePslCd@ E+vCDog>~3K:>i֋3AZNp8,fQ1 -fQ8 JvNRz (91(EOpk!Js$zOIZ%H"Ej)(@» ZH~MxŞ͓j,w-yCmFweD]9msgj2aEfwÈm}k ΰ`_&H`վӳ-l5CXY @梎H<8X~7R=nzu8n͠L`׍zSpQ/zsfvW*ˁ&k֞T᮹Fs@-< _7,oV+ Sn2f$º18c#WmSܡdSaFZ\Y @+qf7~ 6>M&K@~CЛ<0}5xQg)SagQg?x L&_bg9 >=sLE!`K < J!δ_om@.?8T{5ĆwvΦ^diD1]hU[D=JZC@ġ[d]#P3o-̌O 5W%Z`t0SdW8PP-Lot^f'+ r>CkO"V)^$&r0UӃ^1U\Z=~KJ]iU`)XMS֟]]##d=0}f|9WFAכY[^e`Tw(X^w/N"8Vn̞9?nñz_uzz9HzeY;2Pmq]$ ӷ@/ٕ/e ޶Xӊ|호Je򓉑efD]x,#Zq<ß51OO~/yZaӃjC)2#^97D=F\%ĭi{py<D89/ʋó4T]"2bmE\~~G4l1:($C%H(sݢq :Ƽ7G'|!sqT00@q#ӍL/v\7-$=39O kw9j>EO.eԌfy"VxU8Eȳy2pt4}dg.{|ܸ56%J»\1Ncc<<o1FD%W^G*YI1w*}[#˙?5CN&OfϠ$Nc<08VߒATx$d[_fuM[t"6yj?bvBQCCZSx5,?<Ȼn8~ʪ"DtF Ţ iVAz>rZOC-hd w&DKBJFx1 HMsjvmJTG4VM,> >~Rũc܆:A0_y~\y2Oأ}f]X@٦~b5ae;lG7c9exc60UDLz}:uC1wȷwr='\X.NlLl8~=7#91]rW~Jݛ̑=uv8%MTٽ.cd2d2WE"QlarE-뀤{kgBSPwoT˷C)¢wٞl#ŞQ'fK m<Sqߕ)#n8]ikNվ,g;_9 s>`rjM:N.-X{?H ~YY>=Bg!5/șɃ Y8d%LOz#AvT[{F .wX+q &n]SPz"K 9O {-75K:F-$ˑteo -~ٴ1q/Ap~ *e x*fE)FO*N[RϝFf9ªD1%[aPz޸O+jLpº *Hc$/!(㡂1|DM#^2b GU6 ; 'E+ǩpC~_\V=nE9%OMJ" S6"UN:oCwP?wqq+i+M5UMS \1%Ї E$fȼ UǙw# {.ɦdO/F$*H62D_NJw-(KHAS8Ǐ&W~@-MHPW&Kq͘ʼ\4j"p bзa6W&g=?Zz>ݓvޒ\J$lv&u|p W|Yت1!ftFv6>zL42D^޵e>_&&>`Xͫu?$8MRF_ƈVupPq@)h^W:3Wb;4XPv3Д#NJY͡aOѩ0U'⥘xcхTI!*DҤ e '},,б$I+Z\\ƾY$xv$?f5Qtѧ`@ɼLK'A F&'[fqUG>/Pu"jɾcr1R3ݵEs5\q51Y#ץ#io (kKZˍC!=[DgXQ1eAm+0s);v vzS3zWF߾a.WGɍ;Ok`-\Ntʩ NȽP۬')fП1ve3 bb#J1 55II@{ZMW3үqyR],P"YTŸDom#"0 Qfλ;In5 _.9O;$XJ<gOAR,p˳_sa`Hj^6Nx8[Nwe/i\ c+W/XNmDS(-= Eٓ+h2 ϑvpZ0-bLo![9£_߭)9y4f&ٙ5ވfȓT5h9<<VA$xa6iIpnF>D&Lu#Tqp%q4[٢ TB]ƎI},!.|:ݔK 'mP7`滫TJ2 ٹ&ubQ(T#SZ$BwA&'*.N3ﶶaVЇar%Q8戀3{2|QE0/F3JK88}: -;t#bxN~sOsdrl7tF/Vw - 6)65͛{H`C/!ݫh`bYMެ  7GE'Vz.]o>% o2ᙵ wGV[ %KsUnR/@'9UD}_WQ u5!w@KZQyYHl㧨'8 xj;mD|4tKbVpf2_][R[JvN|*}1pxomڶV(3weѪf(Ls)Śzw9ă$Æjm%ɰCsӶFx3E4@oWYPG$yJtB_l;MqPj҄PIb]SbDyٵ>6MhtNgԕ??}X!-Ի^ӌOkױicgng5(s˔R:.NSa'-YM?x9),-kg˼,kA{ʰnyd_Xc!T&sJ|0>˗S.$ápxڤuJkېdTt1e*Ы!p$=p#m Vڀvf0ƌ0\a_ל`zߪc8c!Qx*8{oȎ| pJ B$yw8?6< 8fk :k)ritQCz}AO$p- g2#C]o>ѿ75+mq2Q9,bKGAvM#pPVBfT2uTw_%`/QUU,0 .%y'R4Hf:L%s4j44tGn2G;,<ص~Z.cFb,WƭK)ɉ?S[a͙#i+V_Mddq <="ƚ3>2mіSQmLVk)->Cʉ$LMTĜf|럼gk M|43rOV@YFCYVLmb>4ŖnPLlށV]*x#뇇mXXIfJD+rj*[]$i O LdSY,.G©V2yYkgɵ:H~Ә؊B%~ ͒\JW z<۰zr,s}0;iC'!B ]!ٛ ~u5iѸ_6nCaAyo|G fjK]x^Z$!UN?-ڎht7eNp {\,OFW:dcdEc+;k#ND@|/Lŋ K|J\kzSdrIDt%Hzֲl me T G5`ۂny(Oї4,±Vuwiwj;ހp#/EeUEX qA7+xJX_D. 8FRckQ=1ȾG}4hVco;FHm \]ϲ`j招N6 /U4Kbٿc?-٣bv .ʐ'}(sǻқmyH}gp'zԮn\Rxx7a,,qғc:J=;%I`AVfo,t( -}LqFшg-7H|MM -_itwVawê|i.(^l5BUCIe#U(x*דsU:D.7cI+{S V}%+m BCOt4,N FY&yCw W\+X0xeѻ1kmU]SnI[\;GH>PyIm o亘x</T=T~0m)c)&J*g:񮧕? Loģ/v̇c">ᦐrgBqx4n|'LnIQ | GS[(.6^7x-31ڊ2-6Bᙧ2V>5]P%W2X:-uO SXN%EY9T;L=UF772ݚebe\:!(rdV ЩO*au:A‘ו'y%vؒFoTQ}ců.+yd_':]<,isim72io\JF6]Aɟ*]3 NN_ ))]@_Ii%{IXI%LͩY%ۊ&xRYNq{  lcF#KKE 2Ąq67+{CRb`jw~j2m=`vQ٠%hB=A؀#s[zt#JEsּ8oۯ} S^o E.Վ[fҹLLAl<^ڧǞЯtC8ftQw8F$ĩ^#@V8pPG6*ޜ#SdcBj H^p廨+-ˤ3ܳz1o52N~]®=X^Xcy2f#F d~$@g(T3VWz+WRq@:48hƬX rB0t~QQsC_ւ>Q[|%0.4;Y7ƱZ_WmluC Rv+>,KK]LQR6BgHR ^{. ER}TUSU, Fj3盒nU? ЋVG9.Z\э Bu wfn0"j412})#l-, M4AG< }ݺJi|^W .@/Wd.DOǑEdZNEZKЃN61:  ?Httteϧfx KRwD+Lo2=8.]m[qxX, endstream endobj 96 0 obj << /Length1 2134 /Length2 13917 /Length3 0 /Length 15211 /Filter /FlateDecode >> stream xڍP\ c=h.844!@p'%wȽޫڽ9טkS*1 ;'Ff^: 3B9"&h h&7rz3Tdm,lN^.^ff+33 A`^)@ :"RNoy 6p-M FN@۷&F65%BP[89212:24WK' *vhhd 5FD _ 5xX\L`[v<@h_􀿇`adodi `fi(I3:9L04qYY@RD`9--m0oc3O 4y;߇kmr235 Sg{& ;Kg6o"d@'3337+X0@[ޞ {[@oK3 vz{[`ji0[!M 4 ? F?1dgG$%(IwU V66Q,_2vf _žM?׃AogffgDHO=_?z#[K-x MZWhjl2NFo bgnAZ:JZM-L,_b? rf003rXoS|۝(ag2cX98F`;"X98,oh t&F;ӛ ;oǑrr8L n73IfibyC`#kۭjh_俈- m"!'b2|K '[_qy_1Prx31|+9ސ_o2&h/{?mjFS̛3o~ fv鰳-߳amQA6[ [kooChchoYvO09Y:\Arxrr4P]OoJ T&98ym1 h82 j!peJa\;?%TeoDzW%H=B[UZ UvZN L!2 z=;xi[C7CvR98s*sr/] Q٭Cz*fֈ_w/Ij,3:\쾰q=z6$Mpc6Xğ`CG'r}]6j<Sݻ6(4hNWp$д/x3j)U0B+BCii_vp0??@b8e^ R J/4< {k0E݊, ѧ*!stouzcqj3߻^b˿ \n&.UIՙ>6XUZ_R\7~"ae5X޻#~wzފy<:oiDan7Zn5vhFiήve*֨ #x}y'xp^A6!SU$]P,m͍ ֊nO⦂g[ɾgeDKsClqr>28!_qԹDVQ#bV㢤,C>y&`ZkXp.#i~9NTh3?B -^=R:}vYU7%#g'Mirzh8eKT}UzwE"(r?DӁ`p^to41߼4Eޗo(tC5M)(KGXxjMqd)~r*lD b!ʤAm\3KDtj0T. ~ZI}U˞" 8,((Zs=֮|vle[<<Xh›7GJhS rI YunΛ`ǹ G?ݍfEtb6m02q>D[\kًڮ0[bd`ubkכVOt4^&;T(h*9"RsJ2-h3Sknc5PVdv.OsacuKB I(!:*b "x[URb0U<DN6~9N-֢ڥx*Eg'$h[[gCQIe:_.jo<|3<Ę7$NM BBۚAȒPVUPcbUE!p>)oyW"ݭ6AMQibXaEVO /,YicWҭT6>a$ .h!^-R=_ˁ|Do0pQT;==2ev@_c 1y7i~7 buTj2mݛ<ΩcwDŽAxrbǖcr<n ]$f 8vb["2rMl8GWSoJv:}RLj~+$Au\u?̚2AC1N|hS07[:І;Xw# , 4?9c3O DB 䜆o|t/,Lb%N\OO?EH5a~ZsPfj[/-qTzlKԬEJn)vx "HE$ɐ.utx_YeK[aD[9fG$ChFL pRW%Cmd0v ϏGɩQ+ ~Ond4BqϕZAS$ )W}iE х1:a1\Uk417WAObvM:jV0n+DiTs<;ϒ!ߡc)pm+%V-+ˌd\󠨛cp: \'=́We4 YpN+\&cpeTMPXv&Y2^J_5W):.saDKQOtEUx oz Mt^=D wtDHV;7RvƱ!_഻NqԋEm`/Fh-p{,KM䬭}kFF؄5a [r#4B*ĻќwGy6<(B둑  [Ф>#C[1<+q\{8 "D#X՛ 1)]{(2LJK(,jj vO i {*xEv&c!ݩbMJT[gZH'3R"voe2FMBR;t^ x/y'38AM! kN҉+b d%I-={r,Ma y0YWc99@ߛ:6Ա'S Rä51Cgg 5hִ2b[уswgHK4]y]@X"Q: D{ ϧio$>bYdUMFϞÆΫa$ WlaO\=v!$ /yHu.;:S?T/i?M:~SL)KKݽW*{y1] kQVGB{LQnT³f3ə\p}{OYj-BBj?n8g嶎d]~o߇n. 7AѸ>i*M:'%g XSi 2 6e/7"pݜ)ݭ5Zqd`FU\Kſ = n}}̭Hڙ( %:NbaƑaӸRX@h썺'gfu1bAѥ<q3U&eKWDzOD/~|U}zY^j=5M׃pw#D;{]h6{׵ۀے 5NTs`iw')9z l7zQxX@XnvynQ":$|VyTmeZoj ;${6'?c[ ~Ârmw6/#d^cji+ʹrqUlvUxA%Sк%4"q8(c.1_$`'dϼ-W/=o,\JΧMVOnkm{CA;X|${9YqRƺ7Fs§_=,-:`׵OdGXYƺJB|ع?$*8hxUpFC%}l/w"BA F %s*&zGCcwnf8Щ yI&f/ڡ;K[ /ͣd ɯ_G ݽphLVޭNxڔC"nb\A]O49 5 1]*$6ϒP?P}~l4!vlJ5D3ד|4"9b ʨ7Eͺ\b.IT[]lȽ*,oU mts`{aɏQ7۴2M*#slb1> ;bbWId q5](iaGY}~R"j5 $SPӏY<2k1&t%+Zv! M.{&B :>*/’ܺih٧ GcayiCzPr)2oZB<8 P3 o{C9>]i}jP¹ W96,35 (u8xύL7x9񃠓S^^qgR~1H.SfnJ#uΜ-{.+^ÁH㼌. dD'G֘=aȏU^s^VURAoX"*&4𲉉) ։tΆ% zb=<(F4Pz9g}e_ݠc,06>,!w)c9dl1m2T?v:ΨU(EUQ0^?YqScpd|1@O+g~zV63tƵ/rhB-@fRΡs݁ߜQ,nK|W ZP x-7Wx"Cw&-wXOu_p`xj)xvi$Xm<ϊ$T=((;VdZ.u f.ͅs!p!SmRf'}ؔߔܾS`eZ P{z2adl\*ݕLft0Z<\MY@|I:}:].n|NEtx YUEٖJ3kY?HjC|BDU "`\J@UӉG *9 ?[OwlOUHoš"Zv_xT希݃7(+| c#Ι3$nߘE*A bmh #Q*@@yNpHPBi*ֿ 6}uC1!êdONb<[ A$DVQd*5&̦9Z"^tB#J_\_cFvsU$4l@ӋʵT%gNL^ }h;>F=q {B1|a-UHٟvd2Oa'ὈJ@b;z%J(Y=Ugt8Uhhv' ZdKg NȺb)Z%iMCL `iSc: !%pn:z/ʖ7*':<>WJn*l򯇿8]uUMG0&Lrzʚs#gcD佟46_l"&.~ś̒͏5다| /Q#Tp˕+W+ƍ+U ~8!dA/Tz+E0u{u+qϞ,Ǎ8@6~r\[;pg”vNƧF/IDwb湅݊դ䯙0`p-SXJđFsJBEKʋį 4ҁ]SS-fu^'%XIJ0 ,ɶ. (Ü2%7@ 4PC5+$UG]{ksښvͯˎ(rY Ӱζf [J%)HQD N /ݐLgp0GXn9 fk(@t(B p#EV 5HJSw.!=rJEpMC5LEOC &a '+A>2c)rl}h;;G;\= ntVI h2/L7 0 ~v OKd? Qㄢ]mt*lR O'd9v>XE"OMW7HK C )>}8ܒ г2)0QRDѲ81wP{Nup88 iy ޻C4 3*QLD'rJg#,9R A!'8'e L咪ㆭ 8y9ty8 C ݪ';qЧ;0'. FR csta!D6 %!qvgLC0|lG؋y3\7N;Ȯ]aѽDX 24- xYpnۯ/[˅H zݺTſ*@/fYR$QFJHG2Kl|׫R(b&&)umGac`\ٷ#+ܵ-%ni<3NΛd1c suZe]'f]ɩ!4/YN0b?Tw}5G)҆"#|^B0ngY&53*Z3'*CRT;Krr|FDwQǂ|.rr$>a-s|&s"-@(S!8}~6G?,[&_5V%%jHW}oDrVutnjr]E28BMv| ےHuGD- W?Z%FLC?RH (>FhWb3}c{V%*87{3b͓Z&L+R[0lcph=6oy/qPy?gݮԛ\`jBζ{ hVJ&&ԝwDm˪lG}0F֢2 ԁǹI=˒Åm䃬$ɶ P"uӻ%>_*[nAT#sٟU#5ܣ:fe hh0N-j| 2Ѽ=ֹNފA8n-#R&~^6]VT2>v LjFHo13ܤ5p\|cgr팧A42nlS+y|nȡIV6 gFc;]'l~+G.023j](9cZC ubKmr͞D^qmTl>c6lȿȍz@N;|<|^3MamzE)_&l9SC:1{Rv);yiy(VcXJ@Q-ܢ:.Ѿb'hG8rVh-kGw \Nɛks9C. oLw|D,vNHm5Aa8e| 77K74s6*_!UYJkh%HC8~7,:t^TdXL?Ѻ&ʼǸ1Ϗ_cIdxsx$Ql:Qƌ[8Ս␁D _vPud$ @u r5wck*{؎ dȃpMۉ0_\L?  ;Y Dxv}̒q~]B<6,B:9"B Z'>e.r hgejt65<"C%%vcsȻHѯֽ}?{˾u\4UvqmIⲹ2#ơo0tY+cȟ,jލXV1l|4PPW&M|a2ی5K[4Z]8y bA-:eY{:(&;V ⻉"&І|iQsN1I%3 ğd+0i!Gb8I';Y?2l)qECq@7Z F gCalL|lƍ,qd%6!ԛqV9zA]ثscɯ1^Y|^,(O!KЗ" "\td$gp>}QVMY?R=lN ƤZ˨w HU<=:7C+=gR#Will%6ASFA?A(sH&x4Dn_kvW籓0؂qѓJt5EsS#y|KzG~G =ˠN˶QE1B;vsOHJ(߁9Fr@`omC=i(m[=R ]$qPVNSGFwAbKIzA=V? ![řz;Mَ!}E ɎmL˚֦M@fӤ=yyt Z[w*8U JSWܻ+Ç!ס $Ы^ǹ t#2mO4\J犱THj]9GČd'oFEhv몸> stream xڍT 8m^UTB+{Td_ʋ1 1,f5!JoM)Iv%eI .[=ﻞzw[q=^ÐD46NN,@5h4DaQv.i:0L,hCl*hV4`hD:C)$`;4P40(^,x@ 0[ÁĠ 4`C`yA>DD -嫃Bq8$3Z *̬,.Kh9"ʤJ  .$2(,&IKo)dLh,&b> "Z8\oC <rQؐ6!~ а0=+DQ~ebiiyN##:i`VS Z`6Ş@Y3ҒFo»`,*=--T~C|,UVdƦR*OPn,xl$ D}Z,vV)>Vup q[d /IL!DmcFDٛ/I=}49Z6nwݓ.o|ʁ9b6^wBjH^iV.17pT$W>H~ޅpҐjKE[-N>2?+(;P1kdߵof0 bb3B9TOCꢙGnٚ[F_P2o~_25*OKOHhG(T5e'8eJit>h8-OȾ}8@黁y*e/G#NsyuKVYLol&}КzЙR6U'\K#+.&p|xQ zQ'sWg:w$3߆8arFYظ擨k/ j&W^ ?o]sQIz[:cؽǵ!pϾ}3tQkVosRw'ҋ^v)3obGD?Ln~}?$;u^.w|ރ% SJc jHɁȺI٫QLoqJBk|Ky8GKX6F5u;t RvߡjܚwĚSmH"XeN\;ۡKӶIKX\nᾌ_|SqyC[.ܰ?K潒>Y @\rN#Zr3= +#+"v3 x ::ׄ649]ݭ$y87Ph=ݧSIC6xu8PgZꠄd=YUMEOkZ'2ZZ|R}:vV Q-FJ>߅PsXNoyt"I m>J==ۦ 2WoL ډ4E8$7JYBǗ6d\+oګ\s3g>:4yZkxGrGSz2i8nA|Fu!LЉgl;52#KEBf<7ĝ\v ]>,(Dޓ)II|pxЩj-"f zmcP%>qU㺴8TͣۇV__dnl#J#uXws C=z}X.U '9f6~`d'`G]AE۔q鏝U+ZW`{q˜nh\`{BeOŗ!J_ɍe8**;⅚#'Pyd8qŬ .TL_Ճf .P&GKŠ؟sR-]͜ endstream endobj 102 0 obj << /Producer (pdfTeX-1.40.18) /Creator (TeX) /CreationDate (D:20191029195740-04'00') /ModDate (D:20191029195740-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) kpathsea version 6.2.3) >> endobj 11 0 obj << /Type /ObjStm /N 65 /First 516 /Length 3084 /Filter /FlateDecode >> stream xZ[SG~ׯ2=}r*&6o2A ,ί3Z#}JZ=}9mFcUF*SJֺҹWrYWT>*U2J.O=&IPTi=2vPiOt)86TރIw}Lp|וĔqa!d! DXO"YLEr0rþh!"GWyK׾!a}kCAB^ "9I SĐ5P u]ſXEc?[zUM kPN ǤIwmIh|:4u58t"`sI~M3N@1}qTM9+ f<6cX 4Gj@AGG\iO?1-P?Ԗ%%0.˷]]vo^ehxTV`J_KB!->қzIt/oހ%2/A)rG^8?ȅ~͡>CskEz&M:MLeZ/>C>RM}eCh떜9ݴE s֜TCdp; {&MSWS:;<:Ԋ7;(>7QQ7tChyIx/nAݭw$&~0M_/~i*7lZ7F|Ryj7P{z#t];% )UT+W9GTe%dg2^%ݪO{&E+2"%hDJEяƢ͵dQ&Bfk%)XڞhS0>ъVHaxw~zr6mD):F,ڝղEynlYJOvSo/?OmO5lb;h@vQkSS0߼ oxՐJ/"_<'`4lG(COWG1ұ+>;? Ώގh%Q]^0ux^t_O=|oI}P}4@Up3J1ƍt[ >>R(i2G+t6.e@9j&r#*Yg c`e8aS-QL9Jns&:H̩ESUJc̯dv>VQ'iB\*qaz9[^aC [24G^LϒO/\ʰ%Μuلy--6^r -/ l,I!T]d\RN&$~\:Hz8b֡oxoK]ꩶb^Ե"-hW@(™9(jYaʳRʁed>FDi=ӉaYOfӶuPXZN.S\˙RAL{+"'f=c+yyI{gdβDJ>ry8RpW5qDtO,}O+tVx9kɩ:.*ȕ+Q$zXX@ZCP{`x %o(}rˡmg0=;(X#BՁA -i8h8ޒ&߻f|8\L#{W?=?;O>qG>T c;Wdb~<>GS!cfy38>e5G&'ǧMo';̇vf jKmWS}Y#ը/uN@Nՙ:WCuFj&R`S&޼{rG0+vI1!5-d2IsTJbgnndɈ[݌ ֲ_>{ɇ"L s)=Yg6$4' ɷe :@|b"Šg+^h̫4\},矠W{{+yCBo˙ƘN0˷[nfQӇ#^gxp|tqz9 tf[k%~u)*+OPp"Ez属 / vW:Z?-猻O* i>0]!g+ki}Ab{H핾5k&o_JN 2dǫ}izg7,~t4oFs3ޫ,2O˜͕̣_rAaoC,S0eog);zAu3};_w\-;VwKEyf%{+Uv/%ks~A9gf#/ͭϼ;} ] /Length 305 /Filter /FlateDecode >> stream x%;3CQE'8AB$q&FAFG*ѨtF>@ c̨JEJCRy]k9GD׈@"aae@d,UʇޭH]&b!}h&H,~J;vWǤ8ѻe+].DZ!;5 ;sNڀⷎEIZ`2&áQ~>uyE:aw=fH> wc?~B+N ">Ia2BFI94L-5si,V^55 ^՚ZКu5j–Zsd`"JH+ endstream endobj startxref 292200 %%EOF ConsensusClusterPlus/man/0000755000175400017540000000000013556116712016550 5ustar00biocbuildbiocbuildConsensusClusterPlus/man/ConsensusClusterPlus.Rd0000644000175400017540000001501513556116712023227 0ustar00biocbuildbiocbuild\name{ConsensusClusterPlus} \alias{ConsensusClusterPlus} \alias{calcICL} \title{ run ConsensusClusterPlus} \description{ ConsensusClusterPlus function for determing cluster number and class membership by stability evidence. calcICL function for calculating cluster-consensus and item-consensus. } \usage{ ConsensusClusterPlus( d=NULL, maxK = 3, reps=10, pItem=0.8, pFeature=1, clusterAlg="hc",title="untitled_consensus_cluster", innerLinkage="average", finalLinkage="average", distance="pearson", ml=NULL, tmyPal=NULL,seed=NULL,plot=NULL,writeTable=FALSE,weightsItem=NULL,weightsFeature=NULL,verbose=F,corUse="everything") calcICL(res,title="untitled_consensus_cluster",plot=NULL,writeTable=FALSE) } \arguments{ \item{d}{data to be clustered; either a data matrix where columns=items/samples and rows are features. For example, a gene expression matrix of genes in rows and microarrays in columns, or ExpressionSet object, or a distance object (only for cases of no feature resampling) } \item{maxK}{integer value. maximum cluster number to evaluate. } \item{reps}{integer value. number of subsamples. } \item{pItem}{numerical value. proportion of items to sample. } \item{pFeature}{numerical value. proportion of features to sample. } \item{clusterAlg}{character value. cluster algorithm. 'hc' heirarchical (hclust), 'pam' for paritioning around medoids, 'km' for k-means upon data matrix, 'kmdist' for k-means upon distance matrices (former km option), or a function that returns a clustering. See example and vignette for more details. } \item{title}{ character value for output directory. Directory is created only if plot is not NULL or writeTable is TRUE. This title can be an abosulte or relative path. } \item{innerLinkage}{heirarchical linkage method for subsampling. } \item{finalLinkage}{heirarchical linkage method for consensus matrix. } \item{distance}{character value. 'pearson': (1 - Pearson correlation), 'spearman' (1 - Spearman correlation), 'euclidean', 'binary', 'maximum', 'canberra', 'minkowski" or custom distance function. } \item{ml}{optional. prior result, if supplied then only do graphics and tables.} \item{tmyPal}{optional character vector of colors for consensus matrix} \item{seed}{optional numerical value. sets random seed for reproducible results.} \item{plot}{character value. NULL - print to screen, 'pdf', 'png', 'pngBMP' for bitmap png, helpful for large datasets.} \item{writeTable}{logical value. TRUE - write ouput and log to csv.} \item{weightsItem}{optional numerical vector. weights to be used for sampling items.} \item{weightsFeature}{optional numerical vector. weights to be used for sampling features.} \item{res}{ result of consensusClusterPlus.} \item{verbose}{ boolean. If TRUE, print messages to the screen to indicate progress. This is useful for large datasets.} \item{corUse}{optional character value. specifies how to handle missing data in correlation distances 'everything','pairwise.complete.obs', 'complete.obs' see cor() for description.} } \details{ ConsensusClusterPlus implements the Consensus Clustering algorithm of Monti, et al (2003) and extends this method with new functionality and visualizations. Its utility is to provide quantitative stability evidence for determing a cluster count and cluster membership in an unsupervised analysis. ConsensusClusterPlus takes a numerical data matrix of items as columns and rows as features. This function subsamples this matrix according to pItem, pFeature, weightsItem, and weightsFeature, and clusters the data into 2 to maxK clusters by clusterArg clusteringAlgorithm. Agglomerative heirarchical (hclust) and kmeans clustering are supported by an option see above. For users wishing to use a different clustering algorithm for which many are available in R, one can supply their own clustering algorithm as a simple programming hook - see the second commented-out example that uses divisive heirarchical clustering. For a detailed description of usage, output and images, see the vignette by: openVignette(). } \value{ ConsensusClusterPlus returns a list of length maxK. Each element is a list containing consensusMatrix (numerical matrix), consensusTree (hclust), consensusClass (consensus class asssignments). ConsensusClusterPlus also produces images. calcICL returns a list of two elements clusterConsensus and itemConsensus corresponding to cluster-consensus and item-consensus. See Monti, et al (2003) for formulas. } \author{ Matt Wilkerson mdwilkerson@outlook.com Peter Waltman waltman@soe.ucsc.edu } \references{ Please cite the ConsensusClusterPlus publication, below, if you use ConsensusClusterPlus in a publication or presentation: Wilkerson, M.D., Hayes, D.N. (2010). ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking. Bioinformatics, 2010 Jun 15;26(12):1572-3. Original description of the Consensus Clustering method: Monti, S., Tamayo, P., Mesirov, J., Golub, T. (2003) Consensus Clustering: A Resampling-Based Method for Class Discovery and Visualization of Gene Expression Microarray Data. Machine Learning, 52, 91-118. } \examples{ # obtain gene expression data library(Biobase) data(geneData) d=geneData #median center genes dc = sweep(d,1, apply(d,1,median)) # run consensus cluster, with standard options rcc = ConsensusClusterPlus(dc,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example",distance="pearson",clusterAlg="hc") # same as above but with pre-computed distance matrix, useful for large datasets (>1,000's of items) dt = as.dist(1-cor(dc,method="pearson")) rcc2 = ConsensusClusterPlus(dt,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example2",distance="pearson",clusterAlg="hc") # k-means clustering rcc3 = ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="euclidean",clusterAlg="km") ### partition around medoids clustering with manhattan distance rcc4 = ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="manhattan",clusterAlg="pam") ## example of custom distance function as hook: myDistFunc = function(x){ dist(x,method="manhattan")} rcc5 = ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="myDistFunc",clusterAlg="pam") ##example of clusterAlg as hook: #library(cluster) #dianaHook = function(this_dist,k){ # tmp = diana(this_dist,diss=TRUE) # assignment = cutree(tmp,k) # return(assignment) #} #rcc6 = ConsensusClusterPlus(d,maxK=6,reps=25,pItem=0.8,pFeature=1,title="example",clusterAlg="dianaHook") ## ICL resICL = calcICL(rcc,title="example") } \keyword{ methods } ConsensusClusterPlus/vignettes/0000755000175400017540000000000013556150765020013 5ustar00biocbuildbiocbuildConsensusClusterPlus/vignettes/ConsensusClusterPlus.Rnw0000644000175400017540000004304513556116712024671 0ustar00biocbuildbiocbuild% \VignetteIndexEntry{ConsensusClusterPlus Tutorial} % \VignettePackage{ConsensusClusterPlus} \documentclass{article} \usepackage{graphicx} \begin{document} \title{ConsensusClusterPlus (Tutorial)} \author{ Matthew D. Wilkerson} \maketitle \SweaveOpts{keep.source=TRUE} \section{Summary} \texttt{ConsensusClusterPlus} is a tool for unsupervised class discovery. This document provides a tutorial of how to use \texttt{ConsensusClusterPlus}. \section{Brief description of \textit{Consensus Clustering} } \textit{Consensus Clustering} \cite{monti} is a method that provides quantitative evidence for determining the number and membership of possible clusters within a dataset, such as microarray gene expression. This method has gained popularity in cancer genomics, where new molecular subclasses of disease have been discovered \cite{hayes,verhaak}. The \textit{Consensus Clustering} method involves subsampling from a set of items, such as microarrays, and determines clusterings of specified cluster counts (\textit{k}). Then, pairwise \textit{consensus} values, the proportion that two items occupied the same cluster out of the number of times they occurred in the same subsample, are calculated and stored in a symmetrical \textit{consensus matrix} for each \textit{k}. The \textit{consensus matrix} is summarized in several graphical displays that enable a user to decide upon a reasonable cluster number and membership. A web-based version of \textit{Consensus Clustering} is publicly available \cite{gp}. For a formal description, see \cite{monti}. \\ \\ \texttt{ConsensusClusterPlus}\cite{wilkerson} implements the \textit{Consensus Clustering} method in \textit{R} and extends it with new features and graphical outputs that can aid users in class discovery. \section{Tutorial} There are three main steps to use \texttt{ConsensusClusterPlus}: preparing input data, running the program, and generating cluster-consensus and item-consensus. \subsection{Preparing input data} The first step is to gather some data for cluster analysis. These data could be the result of an experiment such as a mRNA expression microarray or immunohistochemical staining intensities. The input data format is a matrix where columns are samples (items), rows are features and cells are numerical values. For this tutorial, we use the ALL gene expression data from the ALL library. You can see the matrix d is already in the proper format. The column and row names, which correspond to the sample and gene names, will be maintained in the output. <<>>= library(ALL) data(ALL) d=exprs(ALL) d[1:5,1:5] @ For the purpose of selecting the most informative genes for class detection, we reduce the dataset to the top 5,000 most variable genes, measured by median absolute deviation. The choice of 5,000 genes and MAD can be substituted with other statistical variability filters. Users can decide what type of filtering to use or to skip filtering. Another choice would be to supply weights for sampling genes see weightsFeatures in Additional Options. <<>>= mads=apply(d,1,mad) d=d[rev(order(mads))[1:5000],] @ If one wants to transform or normalize their data, they can easily do so using other Bioconductor methods or a simple statement. We chose to use the default settings of the agglomerative heirarchical clustering algorithm using Pearson correlation distance, so it is appropriate to gene median center d using this simple statement: <<>>= d = sweep(d,1, apply(d,1,median,na.rm=T)) @ d is now ready for \texttt{ConsensusClusterPlus} analysis. \subsection{Running \texttt{ConsensusClusterPlus}} For this tutorial, we selected 80\% item resampling (pItem), 80\% gene resampling (pFeature), a maximum evalulated k of 6 so that cluster counts of 2,3,4,5,6 are evaluated (maxK), 50 resamplings (reps), agglomerative heirarchical clustering algorithm (clusterAlg) upon 1- Pearson correlation distances (distance), gave our output a title (title), and opted to have graphical results written to png files. We also used a specific random seed so that this example is repeatable (seed). \\ \\ ** Note: In practice, a much higher reps is recommended such as 1,000 and a higher cluster count such as 20. <>= library(ConsensusClusterPlus) title=tempdir() results = ConsensusClusterPlus(d,maxK=6,reps=50,pItem=0.8,pFeature=1, title=title,clusterAlg="hc",distance="pearson",seed=1262118388.71279,plot="png") @ <>= cat(sprintf("\\graphicspath{{%s}}", paste(gsub("[\\]","/",title),"/",sep=""))) cat("\n") @ The output of \texttt{ConsensusClusterPlus} is a list, in which the element of the list corresponds to results from the \textit{kth} cluster, for instance, results[[2]] is the results result of \textit{k}=2. The seed option specifies a random number seed and is used here for reproducibility of this tutorial. These list elements have the following elements: <>= #consensusMatrix - the consensus matrix. #For .example, the top five rows and columns of results for k=2: results[[2]][["consensusMatrix"]][1:5,1:5] #consensusTree - hclust object results[[2]][["consensusTree"]] #consensusClass - the sample classifications results[[2]][["consensusClass"]][1:5] #ml - consensus matrix result #clrs - colors for cluster @ See additional options section for further description of clustering algorithms and distance metrics. \subsection{Generating cluster and item consensus} After executing \texttt{ConsensusClusterPlus}, one can optionally calculate cluster-consensus and item-consensus results by: <<>>= icl = calcICL(results,title=title,plot="png") @ calcICL returns a list of two elements: <<>>= icl[["clusterConsensus"]] @ <<>>= icl[["itemConsensus"]][1:5,] @ \section{Graphic Output Description} The output of \texttt{ConsensusClusterPlus} consists of graphics, which are written to the screen, 'pdf' file, or 'png' files depending on the plot option; and numerical data which can be optionally written to a CSV file depending on the writeTable option. For large datasets, graphical displays can be quite large and plotting the consensus dendrogram above the consensus matrices may not be possible. If your dataset is large, the plot option 'pngBMP' which does not produce the consensus matrix dendrogram and uses the bitmap function rather png. Bitmap is often available natively on linux systems but can potentially be installed on other systems. \subsection{Consensus Matrices} The first graphic shows the consensus color legend. \\ <>= cat("\\includegraphics[width=60mm]{consensus001.png}",sep="") @ \\ The remaining graphics are heatmaps of the consensus matrices for \textit{k} = 2, 3, 4, 5 \cite{monti}. The consensus matrices have items as both rows and columns, which are microarrays in this example, and where consensus values range from 0 (never clustered together) to 1 (always clustered together) marked by white to dark blue. The consensus matrices are ordered by the consensus clustering which is depicted as a dendrogram atop the heatmap. To aid analysis, the cluster memberships are marked by colored rectangles between the dendrogram and heatmap according to a legend within the graphic. This enables a user to compare a clusters' member count in the context of their consensus. \\ <>= cat("\\includegraphics[width=60mm]{consensus002.png}",sep="") cat("\\includegraphics[width=60mm]{consensus003.png}",sep="") @ \\ <>= cat("\\includegraphics[width=60mm]{consensus004.png}",sep="") cat("\\includegraphics[width=60mm]{consensus005.png}",sep="") @ \\ \subsection{Consensus Cumulative Distribution Function (CDF) Plot} This graphic shows the cumulative distribution functions \cite{monti} of the consensus matrix for each \textit{k} (indicated by colors), estimated by a histogram of 100 bins. This figure allows a user to determine at what number of clusters, \textit{k}, the CDF reaches an approximate maximum, thus consensus and cluster confidence is at a maximum at this \textit{k}. See \cite{monti} for further details intepretation. \\ <>= cat("\\includegraphics[width=60mm]{consensus007.png}",sep="") @ \\ \subsection{Delta Area Plot} This graphic shows the relative change in area under the CDF curve \cite{monti} comparing \textit{k} and \textit{k} $-$ 1. For \textit{k} = 2, there is no \textit{k} -1, so the total area under the curve rather than the relative increase is plotted. This plot allows a user to determine the relative increase in consensus and determine \textit{k} at which there is no appreciable increase. See \cite{monti} for intepretation. \\ <>= cat("\\includegraphics[width=60mm]{consensus008.png}",sep="") @ \\ \subsection{Tracking Plot} This graphic shows the cluster assignment of items (columns) for each \textit{k} (rows) by color. The colors correspond to the colors of the consensus matrix class asssignments. Hatch marks below the plot indicate items/samples. This plot provides a view of item cluster membership across different \textit{k} and enables a user to track the history of clusters relative to earlier clusters. Items that change clusters often (changing colors within a column) are indicative of unstable membership. Clusters with an abundance of unstable members suggest an unstable cluster. \\ <>= cat("\\includegraphics[width=60mm]{consensus009.png}",sep="") @ \\ \subsection{Cluster-Consensus Plot} This graphic shows the \textit{cluster-consensus} value of clusters at each \textit{k}. This is the mean of all pairwise consensus values between a cluster's members. Cluster is indicated by color following the same color scheme as the cluster matrices and tracking plots. The bars are grouped by \textit{k} which is marked on the horizontal axis. High values indicate a cluster has high stability and low values indicate a cluster has low stability. This plot enables a user to view the mean cluster-consensus among clusters at a given \textit{k} and compare values of clusters across different \textit{k} via the color scheme. \\ <>= cat("\\includegraphics[width=60mm]{icl003.png}",sep="") @ \\ \subsection{Item-Consensus Plot} \textit{Item-consensus} values are the mean consensus of an item with all items in a particular cluster. An item has \textit{k} item-consensus values corresponding to each cluster at a particular \textit{k}. These values are depicted in barplots for each \textit{k}. Samples are stacked bars. \textit{Item-consensus} values are indicated by the heights of the colored portion of the bars, whose color corresponds to the common color scheme. Bars' rectangles are ordered by increasing value from bottom to top. The asterisks at the top indicate the consensus cluster for each item. \\ <>= cat("\\includegraphics[width=60mm]{icl001.png}",sep="") @ \\ This plot provides a view of item-consensus across all other clusters at a given \textit{k}. This enables a user to see if a sample is a very "pure" member of a cluster or if it shares high consensus to multiple clusters (large rectangles in a column of multiple colors), suggesting that it is an unstable or "unpure" member. These values could be used to select "core" samples similar to \cite{verhaak} that are highly representative of a cluster. Further, this plot can aid cluster number decisions. For instance, if a cluster consists mainly of members with very "unpure" items, then this evidence could be used to support a maximum cluster number at 1 below this \textit{k} or this evidence could support that this cluster is an outlier cluster. Decisions such as these are best to be made by the user in conjunction with other evidence such as consensus matrices, tracking plots, etc. \\ \\ \subsection{Additional details on options for \texttt{ConsensusClusterPlus} function} \begin{itemize} \item \textbf{d} This option specifies the data to be used in ConsensusClusterPlus. This is typically a matrix of numerical expression values, of which an example is provided in the Running ConsensusClusterPlus section of this document. When provided with a data matrix as d, ConsensusClusterPlus recalculates a distance matrix during each iteration. This recalculation is required if feature resampling is specified (pFeature less than 1). However with very large datasets (1,000's of items) and no feature resampling, this process can be time consuming and unnecessary. Alternatively, a pre-computed distance matrix can be provided as d, resulting in faster computation. An example of using a dist object as input follow below. <<>>= #example of providing a custom distance matrix as input: #dt = as.dist(1-cor(d,method="pearson")) #ConsensusClusterPlus(dt,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example2",distance="pearson",clusterAlg="hc") @ \item \textbf{distance}This option describes the distance metric to be used. A character value of one of the following metrics is accepted: pearson for (1 - Pearson correlation), spearman for (1 - Spearman correlation), euclidean, binary, maximum, canberra, minkowski. Alternatively a custom distance function cab be supplied for this argument, which accepts a numerical matrix (items as rows and features as columns) as input and returns a dist object. <<>>= #example of providing a custom distance function: #myDistFunc = function(x){ dist(x,method="manhattan")} #ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="myDistFunc",clusterAlg="pam") @ \item \textbf{clusterAlg} This option specifies the type of clustering algorithm to use: "hc" for heirarchical clustering, "pam" for partioning around medoids, "km" for kmeans. Alternatively, one can supply their own clustering function, which should accept a distance matrix and a cluster number as its arguments and returns vector of cluster assignments having the same order as the distance matrix columns. For example, this simple function executes divisive clustering using the diana function from the cluster package and returns the expected object. The last line shows an example of how this could be used. <<>>= #library(cluster) #dianaHook = function(this_dist,k){ #tmp = diana(this_dist,diss=TRUE) #assignment = cutree(tmp,k) #return(assignment) #} #ConsensusClusterPlus(d,clusterAlg="dianaHook",distance="pearson",...) @ \item \textbf{update on kmeans options} "km" option performs kmeans clustering directly on a data matrix, with items and features resampled. "kmdist" performs kmeans clustering on a distance matrix calcualted from the resampled data. In versions prior to 1.11.1, the "km" option refers to kmdist. Users wishing to use this kmeans invocation in versions 1.11.1 or later should use option kmdist. \item \textbf{innerLinkage} This option specifies the linkage method to use in iterative agglomerative heirarchical clustering. Not applicable to other cluster algorithms. \item \textbf{finalLinkage} This option specifies the linkage method to use in the final agglomerative heirarchical clustering. \item \textbf{distance} This option specifies the distance metric to use: "pearson" for 1-Pearson correlation coefficient, "spearman" for 1-Spearman correlation coefficient, "euclidean" for Euclidean distance. \item \textbf{tmyPal} character vector of ordered colors to use for consensus matrix. If not specified, a series of white to blue colors is used. \item \textbf{writeTable} boolean. If TRUE, write consensus matrices, ICL, and log to file. \item \textbf{weightsFeature} numerical vector of weights for sampling features. See help for further details. \item \textbf{weightsItem} numerical vector of weights for sampling items. See help for further details. \item \textbf{verbose} boolean. If TRUE, print messages to the screen to indicate progress. This is useful for large datasets. \end{itemize} \begin{thebibliography}{} \bibitem{monti}Monti, S., Tamayo, P., Mesirov, J., Golub, T. (2003) Consensus Clustering: A Resampling-Based Method for Class Discovery and Visualization of Gene Expression Microarray Data. Machine Learning, 52, 91$-$118. \bibitem{wilkerson}Wilkerson, M.D., Hayes, D.N. (2010). ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking. Bioinformatics, 2010 Jun 15;26(12):1572$-$3. \bibitem{hayes}Hayes, D.N, Monti, S., Parmigiani, G. et al. (2006) Gene Expression Profiling Reveals Reproducible Human Lung Adenocarcinoma Subtypes in Multiple Independent Patient Cohorts. Journal of Clinical Oncology, 24 (31) 5079$-$5090. \bibitem{verhaak}Verhaak, R., Hoadley, K., et al. (2010) Integrated genomic analysis identifies clinically relevant subtypes of glioblastoma characterized by abnormalities in PDGFRA, IDH1, EGFR and NF1. Cancer Cell. 17,1-13. \bibitem{gp}\texttt{http://www.broadinstitute.org/cancer/software/genepattern/} \end{thebibliography} \subsection{Changes} \begin{itemize} \item Version 1.0.1. Item-consensus calculation was corrected. Consensus matric heat maps are now guaranteed to correspond to the scale. \item Version 1.5.1. Version 1.0.1 changes were re-incorporated into Bioc 2.9, 2.8. Version 1.0.1 was part of Bioc 2.6, but not part of Bioc 2.7. \item Version 1.11.1. For large datasets, the input data (d) was modified to also accept a distance matrix which reduces computation time, and plotBMP was added a plot type so that large consensus matrices can be plotted. Internal data structures were modified to increase speed. Distance metric options expanded ("maximum", "manhattan", "canberra", "binary","minkowski" from dist) and custom distance function option added. Partitioning Around Mediods clustering (from cluster package) was added as a clustering algorithm. Kmeans invocation was changed to run on the data matrix by default. Kmeans invocation on a distance matrix is now possible by kmdist. \end{itemize} \end{document}