pax_global_header00006660000000000000000000000064141266033170014515gustar00rootroot0000000000000052 comment=d300156edb2c4ecadb73c45b0df281eadc371566 r-cran-shapes-1.2.6/000077500000000000000000000000001412660331700141665ustar00rootroot00000000000000r-cran-shapes-1.2.6/DESCRIPTION000077500000000000000000000014701412660331700157010ustar00rootroot00000000000000Package: shapes Title: Statistical Shape Analysis Date: 2021-03-30 Version: 1.2.6 Author: Ian L. Dryden Description: Routines for the statistical analysis of landmark shapes, including Procrustes analysis, graphical displays, principal components analysis, permutation and bootstrap tests, thin-plate spline transformation grids and comparing covariance matrices. See Dryden, I.L. and Mardia, K.V. (2016). Statistical shape analysis, with Applications in R (2nd Edition), John Wiley and Sons. Maintainer: Ian Dryden Imports: minpack.lm, scatterplot3d, rgl, MASS Depends: R (>= 2.10) License: GPL-2 URL: http://www.maths.nottingham.ac.uk/~ild/shapes NeedsCompilation: no Packaged: 2021-03-31 11:23:21 UTC; pmzild Repository: CRAN Date/Publication: 2021-03-31 12:20:02 UTC r-cran-shapes-1.2.6/MD5000066400000000000000000000106201412660331700144750ustar00rootroot00000000000000a13cd939a403ad7ca1b7fe07aa3d0a6c *DESCRIPTION f939fc30003967907f83c156288a15f7 *NAMESPACE 17dd70efb08bc66a08eca9c451603f6f *NEWS.md 1d776ebef00dc4ffbaaaf6fdaf86fe26 *R/shapes.R 4124d7628d2f17ed63abd4c6be9e1946 *data/apes.rda 8fa2b1d21781ff26abf96a7e5879421f *data/brains.rda ccb4182828c42e3654d674e3f416a7b6 *data/cortical.rda 10008b0c3ae43db09f53da123c3cbd31 *data/digit3.dat.rda d28b980f3574a67498e4a359ffba86a3 *data/dna.dat.rda d96f02250d2a05eaf0ebcad73feffc20 *data/gels.rda ac04b9e0e86b6ee3f3538217456bccba *data/gorf.dat.rda bc7d6257899bec46c63649ac0eca91a7 *data/gorm.dat.rda fbd140d4950b839ecc5d040144010df8 *data/humanmove.rda 94b4d2383da89a263b7a0e727545b308 *data/macaques.rda a3b0ad4039eae531cac02deff9ba1897 *data/macf.dat.rda d7cfca1fecfb4d5c5de9dea092fed906 *data/macm.dat.rda dc31340b79e001f3a17b0ee537c94495 *data/mice.rda aa00564d6e875278707b320f6b041c08 *data/nsa.rda f8bff63a002b64c23c04c45c4df74cc3 *data/panf.dat.rda 9e37cbf4373c0caea36365c1b41efeb0 *data/panm.dat.rda f41dc383274cfd0dbfa4490275933c05 *data/pongof.dat.rda 9911c6b9930b647b20c01947878625a3 *data/pongom.dat.rda 89517b82dcb32fcebb2de9ab91d1c0f6 *data/protein.rda 4e5d5faa2d55632f97d9575876e104ba *data/qcet2.dat.rda 12ba561c328a94b9a88b754dc9e91a8d *data/qlet2.dat.rda a56563d7df673153de47fbec4514c543 *data/qset2.dat.rda c556a432a547fc4e30845854c4a9e28e *data/rats.rda 9944b8ddd8840fa03f8839dd16330117 *data/sand.rda eb749bca9c91a9d346cb870e4fb3488e *data/schizophrenia.dat.rda 70f72f83d507cf8fbd0a30835e5d0301 *data/schizophrenia.rda f09f40994659259fa20a0ed7cb99ce7f *data/shells.rda 2202f383f63fea12bf5514fd2a4c9331 *data/sooty.dat.rda 2c2c36d42250b3f34a8e222d4d4f15a3 *data/sooty.rda a03a0db34a01da33fac00307f7f105c9 *data/steroids.rda 410cc000136d80ba87a663749aa276f2 *demo/00Index 5d448fe971892a3483515f40c5402a34 *demo/shapes.R 187661cd9bc47f539fe11488ee86ac25 *man/apes.Rd 8590d9043d9ab4ddbbf1b5615de2b6e2 *man/bookstein2d.Rd 43caf534efe53a155446b090fe16e932 *man/brains.Rd 1d98459f215fe87530fb33add80df3e2 *man/centroid.size.Rd bcd0f6edaa55805087fa425408721fdd *man/cortical.Rd 920cc57da48fc9f6ceff230f225bc89b *man/digit3.dat.Rd 70a3c688480c2c9aa1960d8ea8514b35 *man/distcov.Rd 78ae2e39a70b583ec19450667ff6d074 *man/dna.dat.Rd 745a3aa086294f219a2cc75a16607395 *man/estcov.Rd 0aa7454ac472b856572ad8f6935dff25 *man/frechet.Rd b4b6d3b94500e52e99fa346602c3ac4d *man/gels.Rd 30184d8c7803fa4b71e7d6b15e3ec8b7 *man/gorf.dat.Rd 619abe9a5bf87ecc32867ac3087f04dd *man/gorm.dat.Rd cb39b12f6e3aaf82bb2bf9fb09d9cadd *man/groupstack.Rd a560acbbe582cda4285edac716530a1d *man/humanmove.Rd b83ca76894d6959bcdc293101ed786f5 *man/macaques.Rd eae66ac549b345476fd3eb683e14696d *man/macf.dat.Rd 0fcd203a740a02c44ba423d990710de6 *man/macm.dat.Rd 7e8ec886d6c34ebdb81ab5b2d3d3c784 *man/mice.Rd c93330db34d3d22fe366b408ed7283e0 *man/panf.dat.Rd d611183f846a3d4ff67ef7e3969e82c1 *man/panm.dat.Rd aa923c97df9c4982094b54e1c95ecb33 *man/plot3darcs.Rd 8eb794436eea3ed408878f0f550f596e *man/plotshapes.Rd 12530792cb699ac9fd0e916ee7d5b605 *man/pns.Rd fdc32244eef51cd9340fbdafca8e67eb *man/pns4pc.Rd eebd3ba87a4b631ebf512d9a31d50448 *man/pnss3d.Rd d7f329a153fc31189ffa89da13d6d1e8 *man/pongof.dat.Rd a97ac227ce1bf25de273abbd3a71608c *man/pongom.dat.Rd da19be8a7a8e2a687cb9faea228d7ed9 *man/procGPA.Rd 7cbedd3ee0a06fd232231d43114b27cf *man/procOPA.Rd 69f39b16127ff402d7623bd258a9d5d1 *man/procWGPA.Rd 5da5984fe879dc6d5b55cc0d69472e81 *man/procdist.Rd 368e229764a3341fd8a5c98b50e01005 *man/qcet2.dat.Rd 366347b1da7d6bbdf058f178e6d55cce *man/qlet2.dat.Rd 3850b0377362e2b587c44b4a587e2bf0 *man/qset2.dat.Rd f56a338357e5ad51782ebe29dee83664 *man/rats.Rd 48966fa9148a8bdc9d21130220487de2 *man/resampletest.Rd 2185b7b48c610ab1a10686e6a52a898f *man/riemdist.Rd 687e6994dd5e5b355dba77933b60c995 *man/rigidbody.Rd 36f7c49ad5f162187046f9101041b64e *man/sand.Rd c0c2ec3509ba14a0d765eb0a73172bf1 *man/schizophrenia.Rd ed8fda94455439858da784dc70b9385e *man/schizophrenia.dat.Rd b9571afd18359f92c5724c6d44637424 *man/shapepca.Rd 73c87b3685abc2d9bdd2f9ed44c6648f *man/shapes-internal.Rd e9d48904d2c513f1cdc3cf568cd4fb40 *man/shapes.cva.Rd e4ac610121f516f3737e3ac990253345 *man/shapes3d.Rd f23d5fc6b98042f0a441f549ee5c7020 *man/shells.Rd 01a0125ce0a534ae27c4922aa5e33876 *man/sooty.Rd 6b0467ae3d2530d8c6cad96dedd2d69c *man/ssriemdist.Rd 56f0de6b0747cebfe637d52107077290 *man/steroids.Rd 89e8e5ea592bf16f5c2a06f217320fd4 *man/testmeanshapes.Rd f2b16307f2c8faa20e1f8515a132d1a0 *man/tpsgrid.Rd 4427eddd390f9e67158f4e694e5c4990 *man/transformations.Rd r-cran-shapes-1.2.6/NAMESPACE000077500000000000000000000012411412660331700154060ustar00rootroot00000000000000# Export all names exportPattern(".") # Import all packages listed as Imports or Depends import( minpack.lm, scatterplot3d, rgl, MASS ) importFrom("graphics", "arrows", "lines", "par", "persp", "plot", "points", "text", "title") importFrom("stats", "cmdscale", "cor", "cov", "nlm", "pchisq", "pf", "prcomp", "predict", "qchisq", "rnorm", "var", "lm", "optim", "qnorm", "sd") importFrom("grDevices", "col2rgb", "rgb") importFrom("graphics", "abline", "legend") importFrom("stats", "coef", "princomp", "rbeta", "runif") importFrom("utils", "tail") importFrom("grDevices", "rainbow") importFrom("utils", "head")r-cran-shapes-1.2.6/NEWS.md000077500000000000000000000041151412660331700152700ustar00rootroot000000000000001.2.6 Added in pnss3d and plot3darcs for displaying the PNSS modes of variation 1.2.5 Corrected bug in estcov for method="Power" when exit occurred in some zero eigenvalue cases, by including abs(eigenvalue) Faster versions of some functions kindly supplied by Gregorio Quintana-Orti and Amelia Simo, University Jaume I, Spain. 1.2.4 Added Principal Nested Spheres (pns) Added Principal Nested Shape Spaces using PCA (pns4pc) Updated some references in help files 1.2.3 Minor adjustment to Penalized Euclidean Distance regression function, including a different name ped() 1.2.2 Added in a function to carry out Penalized Euclidean Distance regression, which is a sparse regression method (Vasiliu et al., 2017, arxiv). Renamed the function sigma() to sigmacov() prevent a warning that the same function name is used in the `stats' package. 1.2.1 corrected a bug in the calculation of principal warp eigenvectors in the function shaperw, which in turn is used by procGPA (thanks to Paolo Piras) 1.2.0 corrected an error in apes$x[,,60] data, which should have been the same as panf.dat[,,1] (thanks to Katie Severn) 1.1-13 Corrected a bug in shaperw for the m=3 case (transposes needed) (thanks to Valerio Varano and Paulo Piras) internal expression of bendingenergy (benergy in TPSgrid) has correct constant now. (thanks to Valerio Varano) 1.1-12 procdist - function added to compute different types of Procrustes shape distances 1.1-11 MDSshape - function added to compute MDS mean shape Several new datasets added 1.1-10 procGPA fixed recently introduced error in reading in complex matrices procGPA( , scale=FALSE,pcaoutput=FALSE) was still calculating PCA, so this has now been fixed. The internal function prcomp1 now uses eigen() rather than svd(), due to some convergence issues in LAPACK for some singular matrices. transformations() :relative translations between centroids now given, rather than just translating the original to have centroid at the origin. r-cran-shapes-1.2.6/R/000077500000000000000000000000001412660331700143675ustar00rootroot00000000000000r-cran-shapes-1.2.6/R/shapes.R000077500000000000000000013120421412660331700160030ustar00rootroot00000000000000#----------------------------------------------------------------------- # # Statistical shape analysis routines # written by Ian Dryden in R (see http://cran.r-project.org) # (c) Ian Dryden # University of Nottingham. version 1.2.6 # 2003-2021 # # Includes contributions by many other authors, including # Mohammad Faghihi, Kwang-Rae Kim, Alfred Kume, # Gregorio Quintana-Orti, Amelia Simo. # ########################################################################### tangentcoords.partial.inv = function(v, p, R) { return(matrix(sqrt(1 - sum(v^2)) * c(p) + v, nrow = nrow(p)) %*% t(R)) } preshape2shape = function(z) { k = nrow(z) + 1 H = defh(k - 1) return(t(H) %*% z) } plot3darcs<-function(x,pcno=1,c=1,nn=100,boundary.data=TRUE,view.theta=0,view.phi=0,type="pnss"){ # points along principal arcs pns.out <- x k<-pns.out$GPAout$k m<-pns.out$GPAout$m n.pc<-dim(pns.out$resmat)[1] npts = 100 arc1 = t(get.prinarc(resmat = pns.out$resmat, PNS = pns.out$PNS, arc = 1, n = npts, boundary.data = boundary.data)) arc2 = t(get.prinarc(resmat = pns.out$resmat, PNS = pns.out$PNS, arc = 2, n = npts, boundary.data = boundary.data)) arc3 = t(get.prinarc(resmat = pns.out$resmat, PNS = pns.out$PNS, arc = 3, n = npts, boundary.data = boundary.data)) # PNS mean PNSmean = pns.out$PNS$mean GPAout = pns.out$GPAout # c * sd : lower and upper along principal arcs. lower -> 0 -> upper # total 2 * nn + 1 configurations # : nn configurations from negative to 0 # 1 configuration at 0 # nn configurations from 0 to positive #default c = 1 { cat("stdev of PNS1 score:", round(sd(pns.out$resmat[ 1, ]), 4), "\n") cat("stdev of PNS2 score:", round(sd(pns.out$resmat[ 2, ]), 4), "\n") cat("stdev of PNS3 score:", round(sd(pns.out$resmat[ 3, ]), 4), "\n") } rng = c * sd(pns.out$resmat[1,]) val = c(seq(-rng, 0, length = nn + 1)[-(nn + 1)], 0, seq(0, rng, length = nn + 1)[-1]) lu.arc1 = t(get.prinarc.value(PNS = pns.out$PNS, arc = 1, res = val)) rng = c * sd(pns.out$resmat[2,]) val = c(seq(-rng, 0, length = nn + 1)[-(nn + 1)], 0, seq(0, rng, length = nn + 1)[-1]) lu.arc2 = t(get.prinarc.value(PNS = pns.out$PNS, arc = 2, res = val)) rng = c * sd(pns.out$resmat[3,]) val = c(seq(-rng, 0, length = nn + 1)[-(nn + 1)], 0, seq(0, rng, length = nn + 1)[-1]) lu.arc3 = t(get.prinarc.value(PNS = pns.out$PNS, arc = 3, res = val)) # spherical data to PC scores scores.arc1 = sphere2pcscore(x = arc1) scores.arc2 = sphere2pcscore(x = arc2) scores.arc3 = sphere2pcscore(x = arc3) scores.PNSmean = sphere2pcscore(x = t(PNSmean)) scores.lu.arc1 = sphere2pcscore(x = lu.arc1) scores.lu.arc2 = sphere2pcscore(x = lu.arc2) scores.lu.arc3 = sphere2pcscore(x = lu.arc3) # PC scores to tangent coordinates U1 = matrix(0, npts, ncol(GPAout$pcar)) U2 = matrix(0, npts, ncol(GPAout$pcar)) U3 = matrix(0, npts, ncol(GPAout$pcar)) for (i in 1:npts) { for (j in 1:n.pc) { U1[i, ] = U1[i, ] + scores.arc1[i, j] * GPAout$pcar[ , j] U2[i, ] = U2[i, ] + scores.arc2[i, j] * GPAout$pcar[ , j] U3[i, ] = U3[i, ] + scores.arc3[i, j] * GPAout$pcar[ , j] } } U.mean = matrix(0, 1, ncol(GPAout$pcar)) for (j in 1:n.pc) { U.mean = U.mean + scores.PNSmean[j] * GPAout$pcar[ , j] } tan.lu.arc1 = matrix(0, nrow(lu.arc1), ncol(GPAout$pcar)) tan.lu.arc2 = matrix(0, nrow(lu.arc2), ncol(GPAout$pcar)) tan.lu.arc3 = matrix(0, nrow(lu.arc3), ncol(GPAout$pcar)) for (i in 1:nrow(lu.arc1)) { for (j in 1:n.pc) { tan.lu.arc1[i, ] = tan.lu.arc1[i, ] + scores.lu.arc1[i, j] * GPAout$pcar[ , j] tan.lu.arc2[i, ] = tan.lu.arc2[i, ] + scores.lu.arc2[i, j] * GPAout$pcar[ , j] tan.lu.arc3[i, ] = tan.lu.arc3[i, ] + scores.lu.arc3[i, j] * GPAout$pcar[ , j] } } # tangent coordinates to preshapes # preshapes to shapes shapes.arc1 = array(NA, c(k, m, npts)) shapes.arc2 = array(NA, c(k, m, npts)) shapes.arc3 = array(NA, c(k, m, npts)) H = defh(k - 1) for (i in 1:npts) { shapes.arc1[ , , i] = preshape2shape(tangentcoords.partial.inv(v = U1[i, ], p = H %*% GPAout$mshape, R = diag(m))) shapes.arc2[ , , i] = preshape2shape(tangentcoords.partial.inv(v = U2[i, ], p = H %*% GPAout$mshape, R = diag(m))) shapes.arc3[ , , i] = preshape2shape(tangentcoords.partial.inv(v = U3[i, ], p = H %*% GPAout$mshape, R = diag(m))) } shapes.PNSmean = preshape2shape(tangentcoords.partial.inv(v = U.mean, p = H %*% GPAout$mshape, R = diag(m))) shapes.lu.arc1 = array(NA, c(k, m, nrow(lu.arc1))) shapes.lu.arc2 = array(NA, c(k, m, nrow(lu.arc2))) shapes.lu.arc3 = array(NA, c(k, m, nrow(lu.arc3))) for (i in 1:nrow(lu.arc1)) { shapes.lu.arc1[ , , i] = preshape2shape(tangentcoords.partial.inv(v = tan.lu.arc1[i, ], p = H %*% GPAout$mshape, R = diag(m))) shapes.lu.arc2[ , , i] = preshape2shape(tangentcoords.partial.inv(v = tan.lu.arc2[i, ], p = H %*% GPAout$mshape, R = diag(m))) shapes.lu.arc3[ , , i] = preshape2shape(tangentcoords.partial.inv(v = tan.lu.arc3[i, ], p = H %*% GPAout$mshape, R = diag(m))) } #convert PCs to configuration space if not already in place h <- defh(k - 1) zero <- matrix(0, k - 1, k) H <- cbind(h, zero, zero) H1 <- cbind(zero, h, zero) H2 <- cbind(zero, zero, h) H <- rbind(H, H1, H2) if (dim(GPAout$pcar)[1] == (3 * (k - 1))) { pcarot <- (t(H) %*% GPAout$pcar) GPAout$pcar <- pcarot } #------------------------# # # # PLOT TYPE I # # : full plot # # # #------------------------# if (pcno==1){ shapes.lu.arc<-shapes.lu.arc1 } if (pcno==2){ shapes.lu.arc<-shapes.lu.arc2 } if (pcno==3){ shapes.lu.arc<-shapes.lu.arc3 } if (type=="pca"){ open3d() par3d(windowRect = c(20, 30, 800, 800)) view3d(view.theta,view.phi) # GPA mean + PC plot3d(GPAout$mshape, type = "s", col = rainbow(k), size = 1, add = TRUE) lines3d(GPAout$mshape, col = rainbow(k), lwd = 5) pcu <- GPAout$mshape + c * GPAout$pcasd[pcno] * cbind(GPAout$pcar[1:k, pcno], GPAout$pcar[(k + 1):(2 * k), pcno], GPAout$pcar[(2 * k + 1):(3 * k), pcno]) pcl <- GPAout$mshape - c * GPAout$pcasd[pcno] * cbind(GPAout$pcar[1:k, pcno], GPAout$pcar[(k + 1):(2 * k), pcno], GPAout$pcar[(2 * k + 1):(3 * k), pcno]) spheres3d( pcu, radius = 0.004, color = "black") spheres3d( pcl, radius = 0.004, color = "grey") for (j in 1:k) { lines3d(rbind(pcl[j, ], pcu[j, ]), col = rainbow(k)[j] ) if (j>1){ lines3d(rbind(pcu[j-1, ],pcu[j, ]) ,col="black" ) lines3d(rbind(pcl[j-1, ],pcl[j, ]) ,col="grey" ) } } } if (type=="pnss"){ open3d() par3d(windowRect = c(20, 30, 800, 800)) view3d(view.theta,view.phi) # principal arcs in landmark space # PNS mean in landmark space plot3d(shapes.PNSmean, type = "s", col = rainbow(k), size = 1.3, add = TRUE) lines3d(shapes.PNSmean,lwd=5,col=rainbow(k)) # lower and upper for (i in 1:k) { lines3d(t(shapes.lu.arc[i, , ]), col = rainbow(k)[i], lwd = 1,lty=2) # farthest negative from 0 spheres3d(head(t(shapes.lu.arc[i, , ]), 1), radius = 0.004, color = "black") if (i>1){ lines3d( (shapes.lu.arc[(i-1):i,,1]) ,col="black" ) } # # farthest positive from 0 spheres3d(tail(t(shapes.lu.arc[i, , ]), 1), radius = 0.004, color = "grey") if (i>1){ lines3d( (shapes.lu.arc[(i-1):i,,201]) ,col="grey" ) } } } out<-list(PNSmean=0,lu.arc=0) out$PNSmean<-shapes.PNSmean out$lu.arc<-shapes.lu.arc out } ######## pnss3d<- function (x, sphere.type = "seq.test", alpha = 0.1, R = 100, nlast.small.sphere = 0, n.pc = 3) { k = dim(x)[1] m = dim(x)[2] n = dim(x)[3] if (n.pc =="Full" ) { n.pc=m*k-m*(m-1)/2-m } if (m==2){ tem1 <- array( 0, c(k,3,n) ) tem1[,1:2,]<-x x<-tem1 m<-3 } if (n < ((k - 1) * m)) { print("Note: n < (k - 1) * m.") jj<- round( (k-1)*m/n + 0.5) print("Adding extra copies of the data") tem<- array(0,c(k,m,jj*n)) tem[,,1:n]<-x for (i in 2:jj){ for (j in 1:n){ tem[,,(i-1)*n+ j ]<-x[,,j] + 0*matrix( rnorm(k*m), k,m) } } x<-tem } k = dim(x)[1] m = dim(x)[2] n = dim(x)[3] out = pc2sphere2(x = x, n.pc = n.pc) spheredata = t(out$spheredata) GPAout = out$GPAout pns.out = pns(x = spheredata, sphere.type = sphere.type, alpha = alpha, R = R, nlast.small.sphere = nlast.small.sphere) print("Radii of spheres") print(pns.out$PNS$radii) pns.out$percent = pns.out$percent * sum(GPAout$percent[1:n.pc])/100 pns.out$GPAout = GPAout pns.out$spheredata = spheredata return(pns.out) } pc2sphere2<-function (x, n.pc) { k = dim(x)[1] m = dim(x)[2] n = dim(x)[3] GPAout = procGPA(x = x, scale = TRUE, reflect = FALSE, tol1=1e-5,tangentcoords = "partial", distances = FALSE) cat("First ", n.pc, " principal components explain ", round(sum(GPAout$percent[1:n.pc])), "% of total variance. \n", sep = "") H = defh(k - 1) X.hat = H %*% GPAout$mshape S = array(NA, c(k - 1, m, n)) for (i in 1:n) { S[, , i] = H %*% GPAout$rotated[, , i] } T.c = GPAout$tan - apply(GPAout$tan, 1, mean) out = pcscore2sphere(n.pc = n.pc, X.hat = X.hat, S = S, Tan = T.c, V = GPAout$pcar) return(list(spheredata = out, GPAout = GPAout)) } #================================================================================== # PNS The Principal Nested Spheres code (PNS) for spheres and shapes has # been written by Kwang-Rae Kim, and builds closely on the original matlab # code for PNS by Sungkyu Jung #================================================================================== #================================================================================== pns = function(x, sphere.type = "seq.test", alpha = 0.1, R = 100, nlast.small.sphere = 0) { n = ncol(x) k = nrow(x) if (abs(sum(apply(x ^ 2, 2, sum)) - n) > 1e-8) { stop("Error: Each column of x should be a unit vector, ||x[ , i]|| = 1.") } svd.x = svd(x, nu = nrow(x)) uu = svd.x$u maxd = which(svd.x$d < 1e-15)[1] if (is.na(maxd) | k > n) { maxd = min(k, n) + 1 } nullspdim = k - maxd + 1 d = k - 1 cat("Message from pns() : dataset is on ", d, "-sphere. \n", sep = "") if (nullspdim > 0) { cat(" .. found null space of dimension ", nullspdim, ", to be trivially reduced. \n", sep = "") } resmat = matrix(NA, d, n) orthaxis = list() orthaxis[[d - 1]] = NA dist = rep(NA, d - 1) pvalues = matrix(NA, d - 1, 2) ratio = rep(NA, d - 1) currentSphere = x if (nullspdim > 0) { for (i in 1:nullspdim) { oaxis = uu[, ncol(uu) - i + 1] r = pi / 2 pvalues[i,] = c(NaN, NaN) res = acos(t(oaxis) %*% currentSphere) - r orthaxis[[i]] = oaxis dist[i] = r resmat[i,] = res NestedSphere = rotMat(oaxis) %*% currentSphere currentSphere = NestedSphere[1:(k - i),] / repmat(matrix(sqrt(1 - NestedSphere[nrow(NestedSphere),] ^ 2), nrow = 1), k - i, 1) uu = rotMat(oaxis) %*% uu uu = uu[1:(k - i),] / repmat(matrix(sqrt(1 - uu[nrow(uu),] ^ 2), nrow = 1), k - i, 1) cat(d - i + 1, "-sphere to ", d - i, "-sphere, by ", "NULL space \n", sep = "") } } if (sphere.type == "seq.test") { cat(" .. sequential tests with significance level ", alpha, "\n", sep = "") isIsotropic = FALSE for (i in (nullspdim + 1):(d - 1)) { if (!isIsotropic) { sp = getSubSphere(x = currentSphere, geodesic = "small") center.s = sp$center r.s = sp$r resSMALL = acos(t(center.s) %*% currentSphere) - r.s sp = getSubSphere(x = currentSphere, geodesic = "great") center.g = sp$center r.g = sp$r resGREAT = acos(t(center.g) %*% currentSphere) - r.g pval1 = LRTpval(resGREAT, resSMALL, n) pvalues[i, 1] = pval1 if (pval1 > alpha) { center = center.g r = r.g pvalues[i, 2] = NA cat( d - i + 1, "-sphere to ", d - i, "-sphere, by GREAT sphere, p(LRT) = ", pval1, "\n", sep = "" ) } else { pval2 = vMFtest(currentSphere, R) pvalues[i, 2] = pval2 if (pval2 > alpha) { center = center.g r = r.g cat( d - i + 1, "-sphere to ", d - i, "-sphere, by GREAT sphere, p(LRT) = ", pval1, ", p(vMF) = ", pval2, "\n", sep = "" ) isIsotropic = TRUE } else { center = center.s r = r.s cat( d - i + 1, "-sphere to ", d - i, "-sphere, by SMALL sphere, p(LRT) = ", pval1, ", p(vMF) = ", pval2, "\n", sep = "" ) } } } else if (isIsotropic) { sp = getSubSphere(x = currentSphere, geodesic = "great") center = sp$center r = sp$r cat( d - i + 1, "-sphere to ", d - i, "-sphere, by GREAT sphere, restricted by testing vMF distn", "\n", sep = "" ) pvalues[i, 1] = NA pvalues[i, 2] = NA } res = acos(t(center) %*% currentSphere) - r orthaxis[[i]] = center dist[i] = r resmat[i,] = res cur.proj = project.subsphere(x = currentSphere, center = center, r = r) NestedSphere = rotMat(center) %*% currentSphere currentSphere = NestedSphere[1:(k - i),] / repmat(matrix(sqrt(1 - NestedSphere[nrow(NestedSphere),] ^ 2), nrow = 1), k - i, 1) if (nrow(currentSphere) == 3) { plot3d( x = t(currentSphere), xlab = "", ylab = "", zlab = "", xlim = c(-1, 1), ylim = c(-1, 1), zlim = c(-1, 1), box = FALSE, axes = FALSE, aspect = "iso" ) axis3d( edge = 'x', labels = TRUE, tick = TRUE, at = c(-1, 1), pos = c(NA, 0, 0) ) axis3d( edge = 'y', labels = TRUE, tick = TRUE, at = c(-1, 1), pos = c(0, NA, 0) ) axis3d( edge = 'z', labels = TRUE, tick = TRUE, at = c(-1, 1), pos = c(0, 0, NA) ) } if (nrow(currentSphere) == 2) { points3d(t(cur.proj), col = "red", size = 2) } } } else if (sphere.type == "BIC") { cat(" .. with BIC \n") for (i in (nullspdim + 1):(d - 1)) { sp = getSubSphere(x = currentSphere, geodesic = "small") center.s = sp$center r.s = sp$r resSMALL = acos(t(center.s) %*% currentSphere) - r.s sp = getSubSphere(x = currentSphere, geodesic = "great") center.g = sp$center r.g = sp$r resGREAT = acos(t(center.g) %*% currentSphere) - r.g BICsmall = n * log(mean(resSMALL ^ 2)) + (d - i + 1 + 1) * log(n) BICgreat = n * log(mean(resGREAT ^ 2)) + (d - i + 1) * log(n) cat("BICsm: ", BICsmall, ", BICgr: ", BICgreat, "\n", sep = "") if (BICsmall > BICgreat) { center = center.g r = r.g cat(d - i + 1, "-sphere to ", d - i, "-sphere, by ", "GREAT sphere, BIC \n", sep = "") } else { center = center.s r = r.s cat(d - i + 1, "-sphere to ", d - i, "-sphere, by ", "SMALL sphere, BIC \n", sep = "") } res = acos(t(center) %*% currentSphere) - r orthaxis[[i]] = center dist[i] = r resmat[i,] = res NestedSphere = rotMat(center) %*% currentSphere currentSphere = NestedSphere[1:(k - i),] / repmat(matrix(sqrt(1 - NestedSphere[nrow(NestedSphere),] ^ 2), nrow = 1), k - i, 1) } } else if (sphere.type == "small" | sphere.type == "great") { pvalues = NaN for (i in (nullspdim + 1):(d - 1)) { sp = getSubSphere(x = currentSphere, geodesic = sphere.type) center = sp$center r = sp$r res = acos(t(center) %*% currentSphere) - r orthaxis[[i]] = center dist[i] = r resmat[i,] = res NestedSphere = rotMat(center) %*% currentSphere currentSphere = NestedSphere[1:(k - i),] / repmat(matrix(sqrt(1 - NestedSphere[nrow(NestedSphere),] ^ 2), nrow = 1), k - i, 1) } } else if (sphere.type == "bi.sphere") { if (nlast.small.sphere < 0) { cat("!!! Error from pns(): \n") cat("!!! nlast.small.sphere should be >= 0. \n") return(NULL) } mx = (d - 1) - nullspdim if (nlast.small.sphere > mx) { cat("!!! Error from pns(): \n") cat("!!! nlast.small.sphere should be <= ", mx, " for this data. \n", sep = "") return(NULL) } pvalues = NaN if (nlast.small.sphere != mx) { for (i in (nullspdim + 1):(d - 1 - nlast.small.sphere)) { sp = getSubSphere(x = currentSphere, geodesic = "great") center = sp$center r = sp$r res = acos(t(center) %*% currentSphere) - r orthaxis[[i]] = center dist[i] = r resmat[i,] = res NestedSphere = rotMat(center) %*% currentSphere currentSphere = NestedSphere[1:(k - i),] / repmat(matrix(sqrt(1 - NestedSphere[nrow(NestedSphere),] ^ 2), nrow = 1), k - i, 1) } } if (nlast.small.sphere != 0) { for (i in (d - nlast.small.sphere):(d - 1)) { sp = getSubSphere(x = currentSphere, geodesic = "small") center = sp$center r = sp$r res = acos(t(center) %*% currentSphere) - r orthaxis[[i]] = center dist[i] = r resmat[i,] = res NestedSphere = rotMat(center) %*% currentSphere currentSphere = NestedSphere[1:(k - i),] / repmat(matrix(sqrt(1 - NestedSphere[nrow(NestedSphere),] ^ 2), nrow = 1), k - i, 1) } } } else { print("!!! Error from pns():") print("!!! sphere.type must be 'seq.test', 'small', 'great', 'BIC', or 'bi.sphere'") print("!!! Terminating execution ") return(NULL) } S1toRadian = atan2(currentSphere[2,], currentSphere[1,]) meantheta = geodmeanS1(S1toRadian)$geodmean orthaxis[[d]] = meantheta resmat[d,] = mod(S1toRadian - meantheta + pi, 2 * pi) - pi par( mfrow = c(1, 1), mar = c(4, 4, 1, 1), mgp = c(2.5, 1, 0), cex = 0.8 ) plot( currentSphere[1,], currentSphere[2,], xlab = "", ylab = "", xlim = c(-1, 1), ylim = c(-1, 1), asp = 1 ) abline(h = 0, v = 0) points( cos(meantheta), sin(meantheta), pch = 1, cex = 3, col = "black", lwd = 5 ) abline( a = 0, b = sin(meantheta) / cos(meantheta), lty = 3 ) l = mod(S1toRadian - meantheta + pi, 2 * pi) - pi points( cos(S1toRadian[which.max(l)]), sin(S1toRadian[which.max(l)]), pch = 4, cex = 3, col = "blue" ) points( cos(S1toRadian[which.min(l)]), sin(S1toRadian[which.min(l)]), pch = 4, cex = 3, col = "red" ) legend( "topright", legend = c("Geodesic mean", "Max (+)ve from mean", "Min (-)ve from mean"), col = c("black", "blue", "red"), pch = c(1, 4, 4) ) { cat("\n") cat( "length of BLUE from geodesic mean : ", max(l), " (", round(max(l) * 180 / pi), " degree)", "\n", sep = "" ) cat( "length of RED from geodesic mean : ", min(l), " (", round(min(l) * 180 / pi), " degree)", "\n", sep = "" ) cat("\n") } radii = 1 for (i in 1:(d - 1)) { radii = c(radii, prod(sin(dist[1:i]))) } resmat = flipud0(repmat(matrix(radii, ncol = 1), 1, n) * resmat) PNS = list() PNS$radii = radii PNS$orthaxis = orthaxis PNS$dist = dist PNS$pvalues = pvalues PNS$ratio = ratio PNS$basisu = NULL PNS$mean = c(PNSe2s(matrix(0, d, 1), PNS)) if (sphere.type == "seq.test") { PNS$sphere.type = "seq.test" } else if (sphere.type == "small") { PNS$sphere.type = "small" } else if (sphere.type == "great") { PNS$sphere.type = "great" } else if (sphere.type == "BIC") { PNS$sphere.type = "BIC" } varPNS = apply(abs(resmat) ^ 2, 1, sum) / n total = sum(varPNS) propPNS = varPNS / total * 100 return(list( resmat = resmat, PNS = PNS, percent = propPNS )) } #================================================================================== pns4pc = function(x, sphere.type = "seq.test", alpha = 0.1, R = 100, nlast.small.sphere = 0, n.pc = 2) { if (n.pc < 2) { stop("Error: n.pc should be >= 2.") } out = pc2sphere(x = x, n.pc = n.pc) spheredata = t(out$spheredata) GPAout = out$GPAout pns.out = pns( x = spheredata, sphere.type = sphere.type, alpha = alpha, R = R, nlast.small.sphere = nlast.small.sphere ) pns.out$percent = pns.out$percent * sum(GPAout$percent[1:n.pc]) / 100 pns.out$GPAout = GPAout pns.out$spheredata = spheredata return(pns.out) } pns.pc = function(x, sphere.type = "seq.test", alpha = 0.1, R = 100, nlast.small.sphere = 0, n.pc = 0) { k = dim(x)[1] m = dim(x)[2] n = dim(x)[3] if (n.pc == 0) { GPAout = procGPA( x = x, scale = TRUE, reflect = FALSE, tangentcoords = "partial", distances = FALSE ) spheredata = matrix(NA, k * m, n) for (i in 1:n) { spheredata[, i] = c(GPAout$rotated[, , i]) } pns.out = pns( x = spheredata, sphere.type = sphere.type, alpha = alpha, R = R, nlast.small.sphere = nlast.small.sphere ) resmat = pns.out$resmat PNS = pns.out$PNS npts = 200 prinarc1 = get.prinarc( resmat, PNS, arc = 1, n = npts, boundary.data = FALSE ) prinarc2 = get.prinarc( resmat, PNS, arc = 2, n = npts, boundary.data = FALSE ) prinarc1.ar = array(NA, c(k, m, npts)) prinarc2.ar = array(NA, c(k, m, npts)) for (i in 1:npts) { prinarc1.ar[, , i] = matrix(prinarc1[, i], nrow = k) prinarc2.ar[, , i] = matrix(prinarc2[, i], nrow = k) } scores.prinarc1 = shape.pcscores.partial(PCAout = GPAout, x = prinarc1.ar) scores.prinarc2 = shape.pcscores.partial(PCAout = GPAout, x = prinarc2.ar) out = pns.out out$GPAout = GPAout out$scores.prinarc1 = scores.prinarc1 out$scores.prinarc2 = scores.prinarc2 } else { pns.out = pns4pc( x = x, sphere.type = sphere.type, alpha = alpha, R = R, nlast.small.sphere = nlast.small.sphere, n.pc = n.pc ) GPAout = pns.out$GPAout resmat = pns.out$resmat PNS = pns.out$PNS npts = 200 prinarc1 = get.prinarc( resmat, PNS, arc = 1, n = npts, boundary.data = FALSE ) prinarc2 = get.prinarc( resmat, PNS, arc = 2, n = npts, boundary.data = FALSE ) scores.prinarc1 = matrix(NA, npts, n.pc) scores.prinarc2 = matrix(NA, npts, n.pc) for (g in 1:npts) { size1 = acos(prinarc1[1, g]) size2 = acos(prinarc2[1, g]) scores.prinarc1[g,] = prinarc1[2:(n.pc + 1), g] / (sin(size1) / size1) scores.prinarc2[g,] = prinarc2[2:(n.pc + 1), g] / (sin(size2) / size2) } out = pns.out out$scores.prinarc1 = scores.prinarc1 out$scores.prinarc2 = scores.prinarc2 } return(out) } #================================================================================== rotMat = function(b, a = NULL, alpha = NULL) { if (is.matrix(b)) { if (min(dim(b)) == 1) { b = c(b) } else { stop("Error: b should be a unit vector.") } } d = length(b) b = b / norm(b, type = "2") if (is.null(a) & is.null(alpha)) { a = c(rep(0, d - 1), 1) alpha = acos(sum(a * b)) } else if (!is.null(a) & is.null(alpha)) { alpha = acos(sum(a * b)) } else if (is.null(a) & !is.null(alpha)) { a = c(rep(0, d - 1), 1) } if (abs(sum(a * b) - 1) < 1e-15) { rot = diag(d) return(rot) } if (abs(sum(a * b) + 1) < 1e-15) { rot = -diag(d) return(rot) } c = b - a * sum(a * b) c = c / norm(c, type = "2") A = a %*% t(c) - c %*% t(a) rot = diag(d) + sin(alpha) * A + (cos(alpha) - 1) * (a %*% t(a) + c %*% t(c)) return(rot) } #================================================================================== ExpNPd = function(x) { if (is.vector(x)) { x = as.matrix(x) } d = nrow(x) nv = sqrt(apply(x ^ 2, 2, sum)) Exppx = rbind(matrix(rep(sin(nv) / nv, d), nrow = d, byrow = T) * x, cos(nv)) Exppx[, nv < 1e-16] = repmat(matrix(c(rep(0, d), 1)), 1, sum(nv < 1e-16)) return(Exppx) } #================================================================================== LogNPd = function(x) { n = ncol(x) d = nrow(x) scale = acos(x[d,]) / sqrt(1 - x[d,] ^ 2) scale[is.nan(scale)] = 1 Logpx = repmat(t(scale), d - 1, 1) * x[-d,] return(Logpx) } #================================================================================== objfn = function(center, r, x) { return(mean((acos(t( center ) %*% x) - r) ^ 2)) } #================================================================================== getSubSphere = function(x, geodesic = "small") { svd.x = svd(x) initialCenter = svd.x$u[, ncol(svd.x$u)] c0 = initialCenter TOL = 1e-10 cnt = 0 err = 1 n = ncol(x) d = nrow(x) Gnow = 1e+10 while (err > TOL) { c0 = c0 / norm(c0, type = "2") rot = rotMat(c0) TpX = LogNPd(rot %*% x) fit = sphereFit( x = TpX, initialCenter = rep(0, d - 1), geodesic = geodesic ) newCenterTp = fit$center r = fit$r if (r > pi) { r = pi / 2 svd.TpX = svd(TpX) newCenterTp = svd.TpX$u[, ncol(svd.TpX$u)] * pi / 2 } newCenter = ExpNPd(newCenterTp) center = solve(rot, newCenter) Gnext = objfn(center, r, x) err = abs(Gnow - Gnext) Gnow = Gnext c0 = center cnt = cnt + 1 if (cnt > 30) { break } } i1save = list() i1save$Gnow = Gnow i1save$center = center i1save$r = r U = princomp(t(x))$loadings[,] initialCenter = U[, ncol(U)] c0 = initialCenter TOL = 1e-10 cnt = 0 err = 1 n = ncol(x) d = nrow(x) Gnow = 1e+10 while (err > TOL) { c0 = c0 / norm(c0, type = "2") rot = rotMat(c0) TpX = LogNPd(rot %*% x) fit = sphereFit( x = TpX, initialCenter = rep(0, d - 1), geodesic = geodesic ) newCenterTp = fit$center r = fit$r if (r > pi) { r = pi / 2 svd.TpX = svd(TpX) newCenterTp = svd.TpX$u[, ncol(svd.TpX$u)] * pi / 2 } newCenter = ExpNPd(newCenterTp) center = solve(rot, newCenter) Gnext = objfn(center, r, x) err = abs(Gnow - Gnext) Gnow = Gnext c0 = center cnt = cnt + 1 if (cnt > 30) { break } } if (i1save$Gnow == min(Gnow, i1save$Gnow)) { center = i1save$center r = i1save$r } if (r > pi / 2) { center = -center r = pi - r } return(list(center = c(center), r = r)) } #================================================================================== LRTpval = function(resGREAT, resSMALL, n) { chi2 = max(n * log(sum(resGREAT ^ 2) / sum(resSMALL ^ 2)), 0) return(pchisq( q = chi2, df = 1, lower.tail = FALSE )) } #================================================================================== vMFtest = function(x, R = 100) { d = nrow(x) n = ncol(x) sumx = apply(x, 1, sum) rbar = norm(sumx, "2") / n muMLE = sumx / norm(sumx, "2") kappaMLE = (rbar * d - rbar ^ 3) / (1 - rbar ^ 2) sp = getSubSphere(x = x, geodesic = "small") center.s = sp$center r.s = sp$r radialdistances = acos(t(center.s) %*% x) xi_sample = mean(radialdistances) / sd(radialdistances) xi_vec = rep(0, R) for (r in 1:R) { rdata = randvonMisesFisherm(d, n, kappaMLE) sp = getSubSphere(x = rdata, geodesic = "small") center.s = sp$center r.s = sp$r radialdistances = acos(t(center.s) %*% rdata) xi_vec[r] = mean(radialdistances) / sd(radialdistances) } pvalue = mean(xi_vec > xi_sample) return(pvalue) } #================================================================================== geodmeanS1 = function(theta) { n = length(theta) meancandi = mod(mean(theta) + 2 * pi * (0:(n - 1)) / n, 2 * pi) theta = mod(theta, 2 * pi) geodvar = rep(0, n) for (i in 1:n) { v = meancandi[i] dist2 = apply(cbind((theta - v) ^ 2, (theta - v + 2 * pi) ^ 2, (v - theta + 2 * pi) ^ 2), 1, min) geodvar[i] = sum(dist2) } m = min(geodvar) ind = which.min(geodvar) geodmean = mod(meancandi[ind], 2 * pi) geodvar = geodvar[ind] / n return(list(geodmean = geodmean, geodvar = geodvar)) } #================================================================================== PNSe2s = function(resmat, PNS) { dm = nrow(resmat) n = ncol(resmat) NSOrthaxis = rev(PNS$orthaxis[1:(dm - 1)]) NSradius = flipud0(matrix(PNS$dist, ncol = 1)) geodmean = PNS$orthaxis[[dm]] res = resmat / repmat(flipud0(matrix(PNS$radii, ncol = 1)), 1, n) T = t(rotMat(NSOrthaxis[[1]])) %*% rbind(repmat(sin(NSradius[1] + matrix(res[2,], nrow = 1)), 2, 1) * rbind(cos(geodmean + res[1,]), sin(geodmean + res[1,])), cos(NSradius[1] + res[2,])) if (dm > 2) { for (i in 1:(dm - 2)) { T = t(rotMat(NSOrthaxis[[i + 1]])) %*% rbind(repmat(sin(NSradius[i + 1] + matrix( res[i + 2,], nrow = 1 )), 2 + i, 1) * T, cos(NSradius[i + 1] + res[i + 2,])) } } if (!is.null(PNS$basisu)) { T = PNS$basisu %*% T } return(T) } #================================================================================== PNSs2e = function(spheredata, PNS) { if (nrow(spheredata) != length(PNS$mean)) { cat(" Error from PNSs2e() \n") cat(" Dimensions of the sphere and PNS decomposition do not match") return(NULL) } if (!is.null(PNS$basisu)) { spheredata = t(PNS$basisu) %*% spheredata } kk = nrow(spheredata) n = ncol(spheredata) Res = matrix(0, kk - 1, n) currentSphere = spheredata for (i in 1:(kk - 2)) { v = PNS$orthaxis[[i]] r = PNS$dist[i] res = acos(t(v) %*% currentSphere) - r Res[i,] = res NestedSphere = rotMat(v) %*% currentSphere currentSphere = as.matrix(NestedSphere[1:(kk - i),]) / repmat(matrix(sqrt(1 - NestedSphere[nrow(NestedSphere),] ^ 2), nrow = 1), kk - i, 1) } S1toRadian = atan2(currentSphere[2,], currentSphere[1,]) devS1 = mod(S1toRadian - rev(PNS$orthaxis)[[1]] + pi, 2 * pi) - pi Res[kk - 1,] = devS1 EuclidData = flipud0(repmat(PNS$radii, 1, n) * Res) return(EuclidData) } #================================================================================== randvonMisesFisherm = function(m, n, kappa, mu = NULL) { if (is.null(mu)) { muflag = FALSE } else { muflag = TRUE } if (m < 2) { print("Message from randvonMisesFisherm(): dimension m must be > 2") print("Message from randvonMisesFisherm(): Set m to be 2") m = 2 } if (kappa < 0) { print("Message from randvonMisesFisherm(): kappa must be >= 0") print("Message from randvonMisesFisherm(): Set kappa to be 0") kappa = 0 } b = (-2 * kappa + sqrt(4 * kappa ^ 2 + (m - 1) ^ 2)) / (m - 1) x0 = (1 - b) / (1 + b) c = kappa * x0 + (m - 1) * log(1 - x0 ^ 2) nnow = n w = c() while (TRUE) { ntrial = max(round(nnow * 1.2), nnow + 10) Z = rbeta(n = ntrial, shape1 = (m - 1) / 2, shape2 = (m - 1) / 2) U = runif(ntrial) W = (1 - (1 + b) * Z) / (1 - (1 - b) * Z) indicator = kappa * W + (m - 1) * log(1 - x0 * W) - c >= log(U) if (sum(indicator) >= nnow) { w1 = W[indicator] w = c(w, w1[1:nnow]) break } else { w = c(w, W[indicator]) nnow = nnow - sum(indicator) } } V = UNIFORMdirections(m - 1, n) X = rbind(repmat(sqrt(1 - matrix(w, nrow = 1) ^ 2), m - 1, 1) * V, matrix(w, nrow = 1)) if (muflag) { mu = mu / norm(mu, "2") X = t(rotMat(mu)) %*% X } return(X) } #================================================================================== UNIFORMdirections = function(m, n) { V = matrix(0, m, n) nr = matrix(rnorm(m * n), nrow = m) for (i in 1:n) { while (TRUE) { ni = sum(nr[, i] ^ 2) if (ni < 1e-10) { nr[, i] = rnorm(m) } else { V[, i] = nr[, i] / sqrt(ni) break } } } return(V) } #================================================================================== trans.subsphere = function(x, center) { return(repmat(1 / sqrt(1 - (t( center ) %*% x) ^ 2), length(center) - 1, 1) * (rotMat(center)[-length(center),] %*% x)) } #================================================================================== get.prinarc.value = function(PNS, arc, res) { d = length(PNS$orthaxis) n = length(res) prinarc = matrix(NA, d + 1, n) for (g in 1:n) { newres = matrix(0, d, 1) newres[arc] = res[g] T = PNSe2s(newres, PNS) prinarc[, g] = T } return(prinarc) } #================================================================================== get.prinarc = function(resmat, PNS, arc, n, boundary.data = FALSE) { d = nrow(resmat) if (boundary.data) { mn = min(resmat[arc,]) mx = max(resmat[arc,]) } else { mn = -pi * tail(PNS$radii, arc)[1] mx = pi * tail(PNS$radii, arc)[1] } prinarcgrid = seq(mn, mx, length = n) prinarc = matrix(NA, d + 1, n) for (g in 1:n) { newres = matrix(0, d, 1) newres[arc] = prinarcgrid[g] T = PNSe2s(newres, PNS) prinarc[, g] = T } return(prinarc) } #================================================================================== get.prinarc.subsphere = function(resmat, PNS, arc, n, subsphere = arc, boundary.data = FALSE) { if (subsphere < arc) { stop("Error: subsphere >= arc.") } if (subsphere < 1) { stop("Error: subsphere >= 1.") } prinarc = get.prinarc( resmat = resmat, PNS = PNS, arc = arc, n = n, boundary.data = boundary.data ) d = nrow(resmat) prinarc.sub = prinarc if (subsphere < d) { for (i in 1:(d - subsphere)) { prinarc.sub = trans.subsphere(x = prinarc.sub, center = PNS$orthaxis[[i]]) } } return(prinarc.sub) } #================================================================================== get.data.subsphere = function(resmat, PNS, x, subsphere) { if (subsphere < 1) { stop("Error: subsphere >= 1.") } d = nrow(resmat) x.sub = x if (subsphere < d) { for (i in 1:(d - subsphere)) { x.sub = trans.subsphere(x = x.sub, center = PNS$orthaxis[[i]]) } } return(x.sub) } #================================================================================== mod = function(x, y) { return(x %% y) } #================================================================================== repmat = function(x, m, n) { return(kronecker(matrix(1, m, n), x)) } #================================================================================== flipud0 = function(x) { return(apply(x, 2, rev)) } #================================================================================== sphere.obj = function(center, x, is.greatCircle) { di = sqrt(apply((x - repmat( matrix(center, ncol = 1), 1, ncol(x) )) ^ 2, 2, sum)) if (is.greatCircle) { r = pi / 2 } else { r = mean(di) } sum((di - r) ^ 2) } #================================================================================== sphere.res = function(center, x, is.greatCircle) { center = c(center) xmc = x - center di = sqrt(apply(xmc ^ 2, 2, sum)) if (is.greatCircle) { r = pi / 2 } else { r = mean(di) } (di - r) } #================================================================================== sphere.jac = function(center, x, is.greatCircle) { center = c(center) xmc = x - center di = sqrt(apply(xmc ^ 2, 2, sum)) di.vj = -xmc / repmat(matrix(di, nrow = 1), length(center), 1) if (is.greatCircle) { c(t(di.vj)) } else { r.vj = apply(di.vj, 1, mean) c(t(di.vj - repmat(matrix(r.vj, ncol = 1), 1, ncol(x)))) } } #================================================================================== sphereFit = function(x, initialCenter = NULL, geodesic = "small") { if (is.null(initialCenter)) { initialCenter = apply(x, 1, mean) } op = nls.lm( par = initialCenter, fn = sphere.res, jac = sphere.jac, x = x, is.greatCircle = ifelse(geodesic == "great", TRUE, FALSE), control = nls.lm.control(maxiter = 300) ) center = coef(op) di = sqrt(apply((x - repmat( matrix(center, ncol = 1), 1, ncol(x) )) ^ 2, 2, sum)) if (geodesic == "great") { r = pi / 2 } else { r = mean(di) } list(center = center, r = r) } #================================================================================== tr = function(x) { return(sum(diag(x))) } #================================================================================== Enormalize = function(x) { return(x / Enorm(x)) } #================================================================================== sphere2pcscore = function(x) { n = nrow(x) p = ncol(x) scores = matrix(NA, n, p - 1) for (i in 1:n) { size = acos(x[i, 1]) scores[i,] = (size / sin(size)) * x[i, 2:p] } return(scores) } #================================================================================== pcscore2sphere = function(n.pc, X.hat, S, Tan, V) { d = nrow(Tan) n = ncol(Tan) W = matrix(NA, d, n) for (i in 1:n) { W[, i] = acos(tr(S[, , i] %*% t(X.hat))) * Tan[, i] / sqrt(sum(Tan[, i] ^ 2)) } lambda = matrix(NA, n, d) for (i in 1:n) { for (j in 1:d) { lambda[i, j] = sum(W[, i] * V[, j]) } } U = matrix(0, n, d) for (i in 1:n) { for (j in 1:n.pc) { U[i,] = U[i,] + lambda[i, j] * V[, j] } } S.star = matrix(NA, n, n.pc + 1) for (i in 1:n) { U.norm = sqrt(sum(U[i,] ^ 2)) S.star[i,] = c(cos(U.norm), sin(U.norm) / U.norm * lambda[i, 1:n.pc]) } return(S.star) } #================================================================================== pc2sphere = function(x, n.pc) { k = dim(x)[1] m = dim(x)[2] n = dim(x)[3] if (n < ((k - 1) * m)) { stop("Error: n must be >= (k - 1) * m.") } GPAout = procGPA( x = x, scale = TRUE, reflect = FALSE, tangentcoords = "partial", distances = FALSE ) cat( "First ", n.pc, " principal components explain ", round(sum(GPAout$percent[1:n.pc])), "% of total variance. \n", sep = "" ) H = defh(k - 1) X.hat = H %*% GPAout$mshape S = array(NA, c(k - 1, m, n)) for (i in 1:n) { S[, , i] = H %*% GPAout$rotated[, , i] } T.c = GPAout$tan - apply(GPAout$tan, 1, mean) out = pcscore2sphere( n.pc = n.pc, X.hat = X.hat, S = S, Tan = T.c, V = GPAout$pcar ) return(list(spheredata = out, GPAout = GPAout)) } #================================================================================== rot.mat = function(Y, X, reflect = FALSE, center = TRUE) { svd.out = svd(t(X) %*% Y) R = svd.out$u %*% t(svd.out$v) if (!reflect) { if (det(R) < 0) { u = svd.out$u v = svd.out$v if (det(u) < 0) { u[, dim(u)[2]] = -u[, dim(u)[2]] } else if (det(v) < 0) { v[, dim(v)[2]] = -v[, dim(v)[2]] } R = u %*% t(v) } } return(R) } #================================================================================== Procrustes.dist.full = function(x1, x2) { m = ncol(x1) z1 = preshape(x1) z2 = preshape(x2) Q = t(z1) %*% z2 %*% t(z2) %*% z1 ev = eigen(Q)$values sign = ifelse(det(t(z1) %*% z2) >= 0, 1,-1) dF = sqrt(abs(1 - sum(sqrt(abs( ev[1:(m - 1)] )), sign * sqrt(abs( ev[m] ))) ^ 2)) R = rot.mat( Y = z2, X = z1, reflect = FALSE, center = FALSE ) scale = sum(svd(t(z1) %*% z2)$d) return(list(dF = dF, R = R, scale = scale)) } #================================================================================== tangent.coords.partial = function(x, p) { k = nrow(x) m = ncol(x) if (abs(norm(p, "F") - 1) > 1e-15) { print("||p|| is not 1. Normalised one is used.") p = Enormalize(p) } tmp = Procrustes.dist.full(x, p) R = tmp$R scale = tmp$scale pre.p = preshape(p) pre.x = preshape(x) ident = diag(k * m - m) tan = (ident - matrix(pre.p) %*% t(c(pre.p))) %*% c(pre.x %*% R) tan.scale = (ident - matrix(pre.p) %*% t(c(pre.p))) %*% c(pre.x %*% R * scale) return(list( tan = c(tan), tan.scale = c(tan.scale), R = R, scale = scale )) } #================================================================================== shape.pcscores = function(PCAout, x, tangentcoords = "partial") { if (tangentcoords == "partial") { if (abs(norm(PCAout$mshape, "F") - 1) > 1e-15) { print("||PCAout$mshape|| is not 1. Normalised one is used.") mshape = Enormalize(PCAout$mshape) } else { mshape = PCAout$mshape } if (abs(norm(x, "F") - 1) > 1e-15) { print("||x|| is not 1. Normalised one is used.") x = Enormalize(x) } opa.out = procOPA(mshape, x, scale = FALSE) matched = opa.out$Bhat tan.out = tangent.coords.partial(matched, mshape) mean.tan = apply(PCAout$tan, 1, mean) scores = t(tan.out$tan - mean.tan) %*% PCAout$pcar scores.scale = t(tan.out$tan.scale - mean.tan) %*% PCAout$pcar return( list( rotated = matched, tan = tan.out$tan, tan.scale = tan.out$tan.scale, scores = c(scores), scores.scale = c(scores.scale) ) ) } } #================================================================================== shape.pcscores.partial = function(PCAout, x) { n = dim(x)[3] scores = c() for (i in 1:n) { s = shape.pcscores(PCAout, x[, , i], tangentcoords = "partial") scores = rbind(scores, s$scores) } return(scores) } #================================================================================== plotshapes3d.pns = function(x, type = "p", col = "black", size = 5, aspect = "iso", joinline = TRUE, col.joinline = "#d4d2d2", lwd.joinline = 0.5, tick = FALSE, labels.tick = FALSE, xlab = "", ylab = "", zlab = "") { k = dim(x)[1] n = dim(x)[3] aa = c() bb = c() cc = c() for (i in 1:n) { aa = c(aa, x[, 1, i]) bb = c(bb, x[, 2, i]) cc = c(cc, x[, 3, i]) } xlim = range(aa) ylim = range(bb) zlim = range(cc) plot3d( x[, , 1], type = "n", xlab = "", ylab = "", zlab = "", box = FALSE, axes = FALSE, aspect = aspect, xlim = xlim, ylim = ylim, zlim = zlim ) for (i in 1:n) { plot3d( x[, , i], type = type, col = col, size = size, add = TRUE ) } if (tick) { axis3d( edge = 'x', labels = labels.tick, tick = TRUE, pos = c(NA, 0, 0), cex = 0.6, lwd = 0.5 ) axis3d( edge = 'y', labels = labels.tick, tick = TRUE, pos = c(0, NA, 0), cex = 0.6, lwd = 0.5 ) axis3d( edge = 'z', labels = labels.tick, tick = TRUE, pos = c(0, 0, NA), cex = 0.6, lwd = 0.5 ) } else { } r = cbind(xlim, ylim, zlim) pos = r[2,] + apply(r, 2, diff) / 20 text3d(pos[1], 0, 0, texts = xlab, cex = 0.8) text3d(0, pos[2], 0, texts = ylab, cex = 0.8) text3d(0, 0, pos[3], texts = zlab, cex = 0.8) if (joinline) { for (i in 1:n) { lines3d(x[, , i], col = col.joinline, lwd = lwd.joinline) } } } #================================================================================== Plot3D = function(x, type = "s", col = "black", size = 1.2, aspect = "iso", joinline = FALSE, col.joinline = "#d4d2d2", lwd.joinline = 0.5, tick = TRUE, tick.boundary = FALSE, labels.tick = TRUE, xlab = "", ylab = "", zlab = "") { n = nrow(x) plot3d( x, type = "n", xlab = "", ylab = "", zlab = "", box = FALSE, axes = FALSE, aspect = aspect ) plot3d( x, type = type, col = col, size = size, add = TRUE ) if (tick) { axis3d( edge = 'x', labels = labels.tick, tick = TRUE, pos = c(NA, 0, 0), cex = 0.6, lwd = 0.5 ) axis3d( edge = 'y', labels = labels.tick, tick = TRUE, pos = c(0, NA, 0), cex = 0.6, lwd = 0.5 ) axis3d( edge = 'z', labels = labels.tick, tick = TRUE, pos = c(0, 0, NA), cex = 0.6, lwd = 0.5 ) } if (tick.boundary) { tks = pretty(x[, 1], n = 10) axis3d( edge = 'x', labels = labels.tick, tick = TRUE, at = c(tks[1], tks[length(tks)]), pos = c(NA, 0, 0), cex = 0.6, lwd = 0.5 ) tks = pretty(x[, 2], n = 10) axis3d( edge = 'y', labels = labels.tick, tick = TRUE, at = c(tks[1], tks[length(tks)]), pos = c(0, NA, 0), cex = 0.6, lwd = 0.5 ) tks = pretty(x[, 3], n = 10) axis3d( edge = 'z', labels = labels.tick, tick = TRUE, at = c(tks[1], tks[length(tks)]), pos = c(0, 0, NA), cex = 0.6, lwd = 0.5 ) } r = apply(x, 2, range) pos = r[2,] + apply(r, 2, diff) / 20 text3d(pos[1], 0, 0, texts = xlab, cex = 0.8) text3d(0, pos[2], 0, texts = ylab, cex = 0.8) text3d(0, 0, pos[3], texts = zlab, cex = 0.8) if (joinline) { lines3d(x, col = col.joinline, lwd = lwd.joinline) } } #================================================================================== col2RGB = function(col, alpha = 255) { n = length(col) out = c() for (i in 1:n) { out[i] = rgb( red = col2rgb(col[i])[1], green = col2rgb(col[i])[2], blue = col2rgb(col[i])[3], alpha = alpha, maxColorValue = 255 ) } return(out) } #================================================================================== project.subsphere = function(x, center, r) { n = ncol(x) d = nrow(x) x.proj = matrix(NA, d, n) for (i in 1:n) { rho = acos(sum(x[, i] * center)) x.proj[, i] = (sin(r) * x[, i] + sin(rho - r) * center) / sin(rho) } return(x.proj) } ##############################################################end of PNS########### ##### Penalised Euclidean Distance Regression #================================================================================== ped <- function(X, Y, method = c("AIC")) { if (method == "AIC") { aicmin <- 999999999 for (lam in c(0.2, 0.5, 1.0)) { for (cofp in c(0.75, 1, 1.35, 1.5)) { out <- pedreg( X, Y, nlambda = 1, constc0 = 1.1, constc1 = cofp, lambdainit = lam ) if (out$aic < aicmin) { minout <- out mincofp <- cofp aicmin <- out$aic } } } out <- minout } if (method == "BIC") { bicmin <- 999999999 for (lam in c(0.2, 0.5, 1.0)) { for (cofp in c(0.75, 1, 1.35, 1.5)) { out <- pedreg( X, Y, nlambda = 1, constc0 = 1.1, constc1 = cofp, lambdainit = lam ) if (out$bic < bicmin) { minout <- out mincofp <- cofp bicmin <- out$bic } } } out <- minout } if (method == "khat") { aicmin <- 999999999 for (lam in c(0.2, 0.5, 1.0)) { for (cofp in c(0.75, 1, 1.25, 1.5)) { out <- pedreg( X, Y, nlambda = 1, constc0 = 1.1, constc1 = cofp, lambdainit = lam ) if (-out$khat < aicmin) { minout <- out mincofp <- cofp aicmin <- -out$khat } } } out <- minout } if (method == "CV") { n <- length(Y) cvmin <- 999999999 for (lam in c(0.2, 0.5, 1.0)) { for (cofp in c(0.75, 1, 1.25, 1.5)) { cverr <- 0 for (jj in 1:10) { subsample <- ((jj - 1) * 10 + 1):((jj - 1) * 10 + 10) out <- pedreg( X[-subsample, ], Y[-subsample], nlambda = 1, constc0 = 1.1, constc1 = cofp, lambdainit = lam ) cverr <- cverr + Enorm(Y[subsample] - out$intercept - X[subsample, ] %*% out$betahat) ** 2 } if (cverr < cvmin) { minout <- out minlam <- lam mincofp <- cofp cvmin <- cverr } } } out <- pedreg( X, Y, nlambda = 1, constc0 = 1.1, constc1 = mincofp, lambdainit = minlam ) } out1 <- list( betahat = 0, yhat = 0, lambda = 0, coef = 0, resid = 0 ) out1$intercept <- out$intercept out1$coef <- c(out$intercept, out$betahat) out1$betahat <- out$betahat out1$lambda <- out$lambda out1$delta <- mincofp out1$yhat <- out$yhat out1$resid <- Y - out$yhat out1 } ###########################function for PED##################### #================================================================================== pedreg <- function(X, Y, constc0 = 1.1, constc1 = 1.35, alpha = 0.05, LMM = 50, MIT = 10000, NUM_METHOD = 1, nlambda = 1, lambdamax = 1, PLOT = TRUE, BIC = FALSE, lambdainit = 1) { # NUM_METHOD = 1 = L-BFGS-B # LMM = Parameter M in L-BFGS method 1 # MIT = Max iterations for optimization p <- dim(X)[2] n <- dim(X)[1] constc <- constc0 Ymean <- mean(Y) Ysd <- sd(Y) Yinit <- Y pinit <- p ans0 <- rep(0, times = pinit) Xorig <- X Yorig <- Y vm <- rep(0, times = ncol(X)) vsd <- rep(0, times = ncol(X)) for (i in 1:ncol(X)) { vm[i] <- mean(X[, i]) } for (i in 1:ncol(X)) { vsd[i] <- sd(X[, i]) } #standardize to sphere X <- scale(X) / sqrt(n - 1) Y <- scale(Y) / sqrt(n - 1) X0 <- X Y0 <- Y lambdainit1 <- constc / sqrt(n - 1) * sqrt(sqrt(p)) / n * qnorm(1 - alpha / (2 * p)) if (nlambda == 1) { lambdainit1 <- lambdainit } METHOD1 <- "L-BFGS-B" xi <- -9999999 c1 <- 1 nlam <- nlambda betamat <- matrix(0, p, nlam) betamat.sparse <- betamat lambdamat <- rep(0, times = nlam) ximat <- rep(0, times = nlam) aic <- rep(0, times = nlam) bic <- rep(0, times = nlam) npar <- rep(0, times = nlam) selectmat <- betamat #cat(c("Lambda iteration (out of ",nlam,"):")) for (ilam in (nlam:1)) { #cat(c(ilam," ")) if (nlam == 1) { lambda <- lambdainit1 } if (nlam > 1) { c1 <- sqrt(n) + (ilam - 1) / (nlam - 1) * 1 / lambdainit1 c1 <- sqrt(n) + ((ilam - 1) / (nlam - 1)) * 1 / lambdainit1 * (lambdamax - lambdainit1 * sqrt(n)) lambda <- lambdainit1 * c1 } if (ilam == nlam) { x0 <- rep(1 / sqrt(p), times = p) } if (ilam != nlam) { x0 <- betahat + rnorm(p) / sqrt(p) } #x0<-rnorm(p)/sqrt(p) pedfun <- function(pars, Y = 0, X = 0) { p <- length(pars) pars <- matrix(pars, p, 1) ped <- Enorm(Y - X %*% pars) + lambda * sqrt(Enorm(pars) * sum(abs(pars))) ped } pedgrad <- function(pars, X = 0, Y = 0) { GM <- sqrt(Enorm(pars) * sum(abs(pars))) gradL <- rep(0, times = p) gradL <- -t(X) %*% (Y - X %*% pars) / Enorm(Y - X %*% pars) gradL <- gradL + matrix( lambda / 2 * pars / Enorm(pars) * sum(abs(pars)) / GM + lambda / 2 * sign(pars) * Enorm(pars) / GM , p, 1 ) c(gradL) } if (NUM_METHOD == 1) { repeat { #,ndeps=1e-3,factr=1e-5,pgtol=1e-5 res2 <- optim( par = x0, fn = pedfun, gr = pedgrad, method = METHOD1, control = list(lmm = LMM, maxit = MIT), X = X, Y = Y ) betahat <- res2$par if (res2$convergence == 0) { break } x0 <- rnorm(p) / sqrt(p) } } oldxi <- xi xi <- sqrt(Enorm(betahat) / sum(abs(betahat))) - sqrt(n) / (constc * c1 * p ^ (1 / 4)) dif <- (xi - oldxi) REGC <- 0.0001 betamat[, ilam] <- betahat / (Enorm(betahat) + REGC) lambdamat[ilam] <- lambda ximat[ilam] <- xi ximat[ilam] <- sqrt(Enorm(betahat) / sum(abs(betahat))) MM <- constc1 / (sqrt(n)) select <- (abs(betahat) / (Enorm(betahat) + REGC) > MM) selectmat[, ilam] <- select betamat.sparse[, ilam] <- betamat[, ilam] betamat.sparse[select == FALSE, ilam] <- 0 * betamat[select == FALSE, ilam] pp <- sum(select) npar[ilam] <- pp bic[ilam] <- log(Enorm(Y) ** 2 / n) * (n) + log(n) * (1) aic[ilam] <- log(Enorm(Y) ** 2 / n) * (n) + 2 * (1) if (sum(select) > 0) { aa <- lm(Y ~ X[, c(1:p)[select]] - 1) pred <- predict(aa) # Use AIC with finite sample correction aic[ilam] <- log(Enorm(Y - pred) ** 2 / n) * (n) + 2 * (pp + 1) + 2 * (pp + 1) * (pp + 2) / (n - pp - 2) # Use AIC/BIC bic[ilam] <- log(Enorm(Y - pred) ** 2 / n) * (n) + log(n) * (pp + 1) aic[ilam] <- log(Enorm(Y - pred) ** 2 / n) * (n) + 2 * (pp + 1) } } best <- 1 if (nlam > 1) { ###########################################choose best via AIC best <- c(1:nlam)[aic == min(aic)][1] select <- as.logical(selectmat[, best]) lambdaaic <- lambdamat[best] ###########################################choose best via Corollary 1 with khat best2 <- nlam if ((sum(ximat > 0.25)) > 0) { best2 <- c(1:nlam)[(ximat) > 0.25][1] } #################### biggest xi from Corollary 1 xism <- (ximat) if (sum(diff(xism) < 0.01) > 0) { best2 <- c(2:nlam)[diff(xism) < 0.01][1] - 1 } ############## biggest sqrt( Enorm(beta) / norm(beta)_1 ) best2 <- c(1:nlam)[ximat == max(ximat)] selectcor <- as.logical(selectmat[, best2]) lambdacor1 <- lambdamat[best2] if (BIC == FALSE) { best <- best2 select <- selectcor } } ################last part######estimate with reduced p########### if (sum(select) > 0) { X <- as.matrix(X[, select]) p <- sum(select) p14 <- sqrt(sqrt(p)) final <- c(1:pinit)[select] } ####### lambda <- constc / sqrt(sqrt(p)) / sqrt(n) * qnorm(1 - alpha / (2 * p)) if (sum(select) > 0) { x0 <- rep(1 / p, times = p) if (NUM_METHOD == 1) { repeat { res2 <- optim( par = x0, fn = pedfun, gr = pedgrad, method = METHOD1, control = list(lmm = LMM, maxit = MIT), X = X, Y = Y ) betahat <- res2$par if (res2$convergence == 0) { break } x0 <- rnorm(p) / p } } ans0[final] <- betahat } #ind<-which(abs(ans0/Enorm(ans0))<10^(-5)) #ans0[ind]<-0 out <- list(betahat = 0, yhat = 0, lambda = 0) out$betahatscale <- ans0 out$yhatscale <- c(X0 %*% ans0) if (nlam > 1) { out$lambdacor1 <- lambdacor1 out$lambdaaic <- lambdaaic out$betamat.sparse <- betamat.sparse out$betamat.rescale <- betamat out$betamat <- betamat for (i in 1:nlam) { out$betamat.rescale[, i] <- c(out$betamat[, i] / vsd) * sd(Yorig) } out$lambdamat <- lambdamat out$ximat <- ximat out$MM <- MM out$fmax <- res2$value out$npar <- npar out$selectmat <- selectmat } #use AIC out$aic <- aic #use BIC out$bic <- bic #use khat out$khat <- ximat out$lambdath3 <- lambdainit1 * sqrt(n) out$lambda <- out$lambdacor1 if (BIC == TRUE) { out$lambda <- out$lambdaaic } if (nlam == 1) { out$lambda <- lambdainit1 out$constc1 <- constc1 } sol <- sd(Yorig) * c(ans0 / vsd) inter <- drop(mean(Yorig) - sd(Yorig) * (vm / vsd) %*% ans0) out$intercept <- drop(mean(Yorig) - sd(Yorig) * (vm / vsd) %*% ans0) out$betahat <- sd(Yorig) * c(ans0 / vsd) out$best <- best out$Yinit <- Yinit out$yhat <- Xorig %*% sol + inter out } ############################################################ # # FUNCTIONS FOR CALCULATING NON-EUCLIDEAN MEANS AND DISTANCES # OF COVARIANCE MATRICES # ############################################################ # Log Euclidean mean: Sigma_L #================================================================================== estLogEuclid <- function(S, weights = 1) { M <- dim(S)[3] if (length(weights) == 1) { weights <- rep(1, times = M) } sum <- S[, , 1] * 0 for (j in 1:M) { eS <- eigen(S[, , j], symmetric = TRUE) sum <- sum + weights[j] * eS$vectors %*% diag(log(eS$values)) %*% t(eS$vectors) / sum(weights) } ans <- sum eL <- eigen(ans, symmetric = TRUE) eL$vectors %*% diag(exp(eL$values)) %*% t(eL$vectors) } #================================================================================== estPowerEuclid <- function(S, weights = 1, alpha = 0.5) { M <- dim(S)[3] if (length(weights) == 1) { weights <- rep(1, times = M) } sum <- S[, , 1] * 0 for (j in 1:M) { eS <- eigen(S[, , j], symmetric = TRUE) sum <- sum + weights[j] * eS$vectors %*% diag(abs(eS$values) ** alpha) %*% t(eS$vectors) / sum(weights) } ans <- sum eL <- eigen(ans, symmetric = TRUE) eL$vectors %*% diag(abs(eL$values) ** (1 / alpha)) %*% t(eL$vectors) } # Riemannian (weighted mean) : Sigma_R #================================================================================== estLogRiem2 <- function(S, weights = 1) { M <- dim(S)[3] if (length(weights) == 1) { weights <- rep(1, times = M) } check <- 9 tau <- 1 Hold <- 99999 mu <- estLogEuclid(S, weights) while (check > 0.0000000001) { ev <- eigen(mu, symmetric = TRUE) logmu <- ev$vectors %*% diag(log(ev$values)) %*% t(ev$vectors) Hnew <- Re(Hessian2(S, mu, weights)) logmunew <- logmu + tau * Hnew ev <- eigen(logmunew, symmetric = TRUE) mu <- ev$vectors %*% diag(exp(ev$values)) %*% t(ev$vectors) check <- Re(Enorm(Hold) - Enorm(Hnew)) if (check < 0) { tau <- tau / 2 check <- 999999 } Hold <- Hnew } mu } # Hessian used in calculating Sigma_R #================================================================================== Hessian2 <- function(S, Sigma, weights = 1) { M <- dim(S)[3] k <- dim(S)[1] if (length(weights) == 1) { weights <- rep(1, times = M) } ev0 <- eigen(Sigma, symmetric = TRUE) shalf <- ev0$vectors %*% (diag(sqrt((ev0$values)))) %*% t(ev0$vectors) sumit <- matrix(0, k, k) for (i in 1:(M)) { ev2 <- eigen(shalf %*% solve(S[, , i]) %*% shalf, symmetric = TRUE) sumit <- sumit + weights[i] * ev2$vectors %*% diag (log((ev2$values))) %*% t(ev2$vectors) / sum(weights) } - sumit } # Euclidean : Sigma_E #================================================================================== estEuclid <- function(S, weights = 1) { M <- dim(S)[3] if (length(weights) == 1) { weights <- rep(1, times = M) } sum <- S[, , 1] * 0 for (j in 1:M) { sum <- sum + S[, , j] * weights[j] / sum(weights) } sum } # Cholesky mean : Sigma_C #================================================================================== estCholesky <- function(S, weights = 1) { M <- dim(S)[3] if (length(weights) == 1) { weights <- rep(1, times = M) } sum <- S[, , 1] * 0 for (j in 1:M) { sum <- sum + t(chol(S[, , j])) * weights[j] / sum(weights) } cc <- sum cc %*% t(cc) } #================================================================================== ild_estSS <- function(S, weights = 1) { M <- dim(S)[3] k <- dim(S)[1] H <- defh(k) if (length(weights) == 1) { weights <- rep(1, times = M) } Q <- array(0, c(k + 1, k, M)) for (j in 1:M) { Q[, , j] <- t(H) %*% (rootmat(S[, , j])) } ans <- procWGPA( Q, fixcovmatrix = diag(k + 1), scale = FALSE, reflect = TRUE, sampleweights = weights ) H %*% ans$mshape %*% t(H %*% ans$mshape) } #================================================================================== ild_estShape <- function(S, weights = 1) { M <- dim(S)[3] k <- dim(S)[1] H <- defh(k) if (length(weights) == 1) { weights <- rep(1, times = M) } Q <- array(0, c(k + 1, k, M)) for (j in 1:M) { Q[, , j] <- t(H) %*% (rootmat(S[, , j])) } ans <- procWGPA( Q, fixcovmatrix = diag(k + 1), scale = TRUE, reflect = TRUE, sampleweights = weights ) H %*% ans$mshape %*% t(H %*% ans$mshape) } #================================================================================== estRiemLe <- function(S, weights) { M <- dim(S)[3] k <- dim(S)[1] if (M != 2) print("Sorry - Calculation not implemented for M>2 yet") if (M == 2) { P1 <- S[, , 1] P2 <- S[, , 2] detP1 <- prod(eigen(P1)$values) detP2 <- prod(eigen(P2)$values) P1 <- P1 / (detP1) ^ (1 / k) P2 <- P2 / (detP2) ^ (1 / k) P1inv <- solve(P1) P12sq <- P1inv %*% P2 %*% P2 %*% P1inv tem <- eigen(P12sq, symmetric = TRUE) A2 <- tem$vectors %*% diag(log(tem$values)) %*% t(tem$vectors) logPs2 <- weights[2] * A2 tem2 <- eigen(logPs2, symmetric = TRUE) Ps2 <- tem2$vectors %*% diag(exp(tem2$values)) %*% t(tem2$vectors) P12s <- P1 %*% Ps2 %*% P1 tem3 <- eigen(P12s, symmetric = TRUE) P12sA <- tem3$vectors %*% diag(sqrt(tem3$values)) %*% t(tem3$vectors) Ptildes <- (detP1 * (detP2 / detP1) ^ weights[2]) ^ (1 / k) * P12sA Ptildes } } ##########distances################################# #================================================================================== distRiemPennec <- function(P1, P2) { eig <- eigen(P1, symmetric = TRUE) P1half <- eig$vectors %*% diag(sqrt(eig$values)) %*% t(eig$vectors) P1halfinv <- solve(P1half) AA <- P1halfinv %*% P2 %*% P1halfinv tem <- eigen(AA, symmetric = TRUE) A2 <- tem$vectors %*% diag(log(tem$values)) %*% t(tem$vectors) dd <- Enorm(A2) dd } #================================================================================== distLogEuclidean <- function(P1, P2) { eig <- eigen(P1, symmetric = TRUE) logP1 <- eig$vectors %*% diag(log(eig$values)) %*% t(eig$vectors) tem <- eigen(P2, symmetric = TRUE) logP2 <- tem$vectors %*% diag(log(tem$values)) %*% t(tem$vectors) dd <- Enorm(logP1 - logP2) dd } #================================================================================== distRiemannianLe <- function(P1, P2) { dd <- distRiemPennec(P1 %*% t(P1), P2 %*% t(P2)) / 2 dd } #================================================================================== ild_distProcrustesSizeShape <- function (P1, P2) { H <- defh(dim(P1)[1]) Q1 <- t(H) %*% rootmat(P1) Q2 <- t(H) %*% rootmat(P2) ans <- sqrt( centroid.size(Q1) ^ 2 + centroid.size(Q2) ^ 2 - 2 * centroid.size(Q1) * centroid.size(Q2) * cos(riemdist(Q1, Q2, reflect = TRUE)) ) ans } #================================================================================== ild_distProcrustesFull <- function(P1, P2) { H <- defh(dim(P1)[1]) Q1 <- t(H) %*% rootmat(P1) Q2 <- t(H) %*% rootmat(P2) ans <- riemdist(Q1, Q2, reflect = TRUE) ans } #================================================================================== distPowerEuclidean <- function(P1, P2, alpha = 1 / 2) { if (alpha != 0) { eS <- eigen(P1, symmetric = TRUE) Q1 <- eS$vectors %*% diag(abs(eS$values) ^ alpha) %*% t(eS$vectors) eS <- eigen(P2, symmetric = TRUE) Q2 <- eS$vectors %*% diag(abs(eS$values) ^ alpha) %*% t(eS$vectors) dd <- Enorm(Q1 - Q2) / abs(alpha) } if (alpha == 0) { dd <- distLogEuclidean(P1, P2) } dd } #================================================================================== ild_distCholesky <- function(P1, P2) { H <- defh(dim(P1)[1]) Q1 <- t(H) %*% t(chol(P1)) Q2 <- t(H) %*% t(chol(P2)) ans <- Enorm(Q1 - Q2) ans } #================================================================================== distEuclidean <- function(P1, P2) { ans <- Enorm(P1 - P2) ans } ################## #================================================================================== distcov <- function(S1, S2 , method = "Riemannian", alpha = 1 / 2) { if (method == "Procrustes") { dd <- distProcrustesSizeShape(S1, S2) } if (method == "ProcrustesShape") { dd <- distProcrustesFull(S1, S2) } if (method == "Riemannian") { dd <- distRiemPennec(S1, S2) } if (method == "Cholesky") { dd <- distCholesky(S1, S2) } if (method == "Power") { dd <- distPowerEuclidean(S1, S2, alpha) } if (method == "Euclidean") { dd <- distEuclidean(S1, S2) } if (method == "LogEuclidean") { dd <- distLogEuclidean(S1, S2) } if (method == "RiemannianLe") { dd <- distRiemannianLe(S1, S2) } dd } #================================================================================== estcov <- function (S, method = "Riemannian", weights = 1, alpha = 1 / 2, MDSk = 2) { out <- list( mean = 0, sd = 0, pco = 0, eig = 0, dist = 0 ) M <- dim(S)[3] if (length(weights) == 1) { weights <- rep(1, times = M) } if (method == "Procrustes") { dd <- estSS(S, weights) } if (method == "ProcrustesShape") { dd <- estShape(S, weights) } if (method == "Riemannian") { dd <- estLogRiem2(S, weights) } if (method == "Cholesky") { dd <- estCholesky(S, weights) } if (method == "Power") { dd <- estPowerEuclid(S, weights, alpha) } if (method == "Euclidean") { dd <- estEuclid(S, weights) } if (method == "LogEuclidean") { dd <- estLogEuclid(S, weights) } if (method == "RiemannianLe") { dd <- estRiemLe(S, weights) } out$mean <- dd sum <- 0 for (i in 1:M) { sum <- sum + weights[i] * distcov(S[, , i], dd, method = method) ^ 2 / sum(weights) } out$sd <- sqrt(sum) dist <- matrix(0, M, M) for (i in 2:M) { for (j in 1:(i - 1)) { dist[i, j] <- distcov(S[, , i], S[, , j], method = method) dist[j, i] <- dist[i, j] } } out$dist <- dist if (M > MDSk) { ans <- cmdscale( dist, k = MDSk, eig = TRUE, add = TRUE, x.ret = TRUE ) out$pco <- ans$points out$eig <- ans$eig if (MDSk > 2) { shapes3d(out$pco[, 1:min(MDSk, 3)], axes3 = TRUE) } if (MDSk == 2) { plot(out$pco, type = "n", xlab = "MDS1", ylab = "MDS2") text(out$pco[, 1], out$pco[, 2], 1:length(out$pco[, 1])) } } out } rootmat <- function(P1) { eS <- eigen(P1, symmetric = TRUE) if (min(eS$values) < -0.001) { print("Not positive-semi definite") } else{ Q1 <- eS$vectors %*% diag(sqrt(abs(eS$values))) %*% t(eS$vectors) Q1 } } ########################## #================================================================================== shapes.cva <- function(X , groups , scale = TRUE, ncv = 2) { g <- dim(table (groups)) ans <- procGPA(X , scale = scale) if (scale == TRUE) pp <- (ans$k - 1) * ans$m - (ans$m * (ans$m - 1) / 2) - 1 if (scale == FALSE) pp <- (ans$k - 1) * ans$m - (ans$m * (ans$m - 1) / 2) pracdim <- min(pp, ans$n - g) out <- lda(ans$scores[, 1:pracdim] , groups) print((out)) cv <- predict(out, dimen = 3)$x if (dim(cv)[2] == 1) { cv <- cbind(cv, rnorm(dim(cv)[1]) / 1000) } if (ncv == 2) { eqscplot(cv, type = "n", xlab = "CV1", ylab = "CV2") text(cv, labels = groups) } if (ncv == 3) { shapes3d(cv, color = groups, axes3 = TRUE) } cv } #================================================================================== groupstack <- function(A1, A2, A3 = 0, A4 = 0, A5 = 0, A6 = 0, A7 = 0, A8 = 0) { out <- list(x = 0, groups = "") dat <- abind(A1, A2) group <- c(rep(1, times = dim(A1)[3]), rep(2, times = dim(A2)[3])) if (is.array(A3)) { dat <- abind(dat, A3) group <- c(group, rep(3, times = dim(A3)[3])) if (is.array(A4)) { dat <- abind(dat, A4) group <- c(group, rep(4, times = dim(A4)[3])) if (is.array(A5)) { dat <- abind(dat, A5) group <- c(group, rep(5, times = dim(A5)[3])) if (is.array(A6)) { dat <- abind(dat, A6) group <- c(group, rep(6, times = dim(A6)[3])) if (is.array(A7)) { dat <- abind(dat, A7) group <- c(group, rep(7, times = dim(A7)[3])) if (is.array(A8)) { dat <- abind(dat, A8) group <- c(group, rep(8, times = dim(A8)[3])) } } } } } } out$x <- dat out$groups <- group out } ########################### #================================================================================== procdist <- function(x, y, type = "full", reflect = FALSE) { if (type == "full") { out <- sin(riemdist(x, y, reflect = reflect)) } if (type == "partial") { out <- sqrt(2) * sqrt(abs(1 - cos(riemdist(x, y, reflect = reflect)))) } if (type == "Riemannian") { out <- riemdist(x, y, reflect = reflect) } if (type == "sizeandshape") { out <- ssriemdist(x, y, reflect = reflect) } out } #================================================================================== transformations <- function(Xrotated, Xoriginal) { # outputs the translations, rotations and # scalings for ordinary Procrustes rotation # of each individual in Xoriginal to the # Procrustes rotated individuals in Xrotated X1 <- Xrotated X2 <- Xoriginal n <- dim(X1)[3] m <- dim(X1)[2] translation <- matrix(0, m, n) scale <- rep(0, times = n) rotation <- array(0, c(m, m, n)) for (i in 1:n) { translation[, i] <- -apply(X2[, , i] - X1[, , i], 2, mean) ans <- procOPA(X1[, , i], X2[, , i]) scale[i] <- ans$s rotation[, , i] <- ans$R } out <- list(translation = 0, scale = 0, rotation = 0) out$translation <- translation out$scale <- scale out$rotation <- rotation out } #================================================================================== iglogl <- function(x , lam, nlam) { gamma <- abs(x[1]) alpha <- gamma / mean(1 / lam[1:nlam]) ll <- -(gamma + 1) * sum(log(lam[1:nlam])) - alpha * sum (1 / lam[1:nlam]) + nlam * gamma * log(alpha) - nlam * lgamma (gamma) - ll } #================================================================================== procWGPA <- function(x, fixcovmatrix = FALSE, initial = "Identity", maxiterations = 10, scale = TRUE, reflect = FALSE, prior = "Exponential", diagonal = TRUE, sampleweights = "Equal") { X <- x priorargument <- prior alpha <- "not estimated" gamma <- "not estimated" k <- dim(X)[1] n <- dim(X)[3] m <- dim(X)[2] if (initial[1] == "Identity") { Sigmak <- diag(k) } else{ if (initial[1] == "Rawdata") { tol <- 0.0000000001 if (m == 2) { Sigmak <- diag(diag(var(t(X[, 1, ]))) + diag(var(t(X[, 2, ])))) / 2 + tol } if (m == 3) { Sigmak <- diag(diag(var(t(X[, 1, ]))) + diag(var(t(X[, 2, ]))) + diag(var(t(X[, 3, ])))) / 3 + tol } } else { Sigmak <- initial } } mu <- procGPA(X, scale = scale)$mshape #cat("Iteration 1 \n") if (fixcovmatrix[1] != FALSE) { Sigmak <- fixcovmatrix } ans <- procWGPA1( X, mu, metric = Sigmak, scale = scale, reflect = reflect, sampleweights = sampleweights ) if ((maxiterations > 1) && (fixcovmatrix[1] == FALSE)) { ans0 <- ans dif <- 999999 it <- 1 while ((dif > 0.00001) && (it < maxiterations)) { it <- it + 1 if (it == 2) { cat("Differences in norm of Sigma estimates... \n ") } if (prior[1] == "Identity") { prior <- diag(k) } if (prior[1] == "Inversegamma") { lam <- eigen(ans$Sigmak)$values nlam <- min(c(n * m - m - 3, k - 3)) mu <- mean(1 / lam[1:(nlam)]) alpha <- 1 / mu out <- nlm(iglogl, p = c(1) , lam = lam, nlam = nlam) #print(out) gamma <- abs(out$estimate[1]) alpha <- gamma / mean(1 / lam[1:nlam]) newmetric <- n * m / (n * m + 2 * (1 + gamma)) * (ans$Sigmak + (2 * alpha / (n * m)) * diag(k)) #dif2<-999999 #while (dif2> 0.000001){ #old<-alpha #lam <- eigen(newmetric)$values #out <- nlm( iglogl, p=c(1) ,lam=lam, nlam=nlam) #gamma <- abs(out$estimate[1]) #alpha<- gamma/ mean(1/lam[1:nlam]) #newmetric <- n*m/(n*m+2*(1+gamma))*( ans$Sigmak + (2*alpha/(n*m))*diag(k) ) #dif2<- abs(alpha- old) #print(dif2) #} } if (prior[1] == "Exponential") { lam <- eigen(ans$Sigmak)$values nlam <- min(c(n * m - m - 2, k - 2)) mu <- mean(1 / lam[1:(nlam)]) alpha <- 1 / mu gamma <- 1 newmetric <- n * m / (n * m + 2 * (2)) * (ans$Sigmak + (2 * alpha / (n * m)) * diag(k)) #dif2<-999999 #while (dif2> 0.000001){ #old<-alpha #newmetric <- n*m/(n*m+2*(2))*( ans$Sigmak + (2*alpha/(n*m))*diag(k) ) #lam <- eigen(newmetric)$values #mu <- mean(1/lam[1:( nlam)]) #alpha <- 1/mu #newmetric <- n*m/(n*m+2*(2))*( ans$Sigmak + (2*alpha/(n*m))*diag(k) ) #dif2<- abs(alpha- old) #} } if (is.double(prior[1])) { newmetric <- (ans$Sigmak + prior) } if (diagonal == TRUE) { newmetric <- diag(diag(newmetric)) } if (fixcovmatrix[1] != FALSE) { newmetric <- fixcovmatrix } ans2 <- procWGPA1( X, ans$mshape, metric = newmetric , scale = scale, sampleweights = sampleweights ) plotshapes(ans2$rotated) dif <- Enorm((ans$Sigmak - ans2$Sigmak)) ans <- ans2 cat(c(it, " ", dif, " \n")) } } if ((priorargument[1] == "Exponential") || (priorargument[1] == "Inversegamma")) { ans$alpha <- alpha ans$gamma <- gamma } cat(" \n") ans } #================================================================================== procWGPA1 <- function(X, mu, metric = "Identity", scale = TRUE, reflect = FALSE, sampleweights = "Equal") { k <- dim(X)[1] n <- dim(X)[3] m <- dim(X)[2] sum <- 0 for (i in 1:n) { sum <- sum + centroid.size(X[, , i]) ** 2 } size1 <- sqrt(sum) if (sampleweights[1] == "Equal") { sampleweights <- rep(1 / n, times = n) } if (length(sampleweights) != n) { cat("Sample weight vector not of correct length \n") } if (metric[1] == "Identity") { Sigmak <- diag(k) } else{ Sigmak <- metric } eig <- eigen(Sigmak, symmetric = TRUE) Sighalf <- eig$vectors %*% diag (sqrt(abs(eig$values))) %*% t(eig$vectors) Siginvhalf <- eig$vectors %*% diag(1 / sqrt(abs(eig$values))) %*% t(eig$vectors) Siginv <- eig$vectors %*% diag (1 / (eig$values)) %*% t(eig$vectors) one <- matrix(rep(1, times = k), k, 1) Xstar <- X for (i in 1:n) { Xstar[, , i] <- Xstar[, , i] - one %*% t(one) %*% Siginv %*% Xstar[, , i] / c(t(one) %*% Siginv %*% one) Xstar[, , i] <- Siginvhalf %*% Xstar[, , i] } mu <- mu - one %*% t(one) %*% Siginv %*% mu / c(t(one) %*% Siginv %*% one) ans <- procGPA(Xstar, eigen2d = FALSE) ans2 <- ans dif3 <- 99999999 while (dif3 > 0.00001) { for (i in 1:n) { old <- mu tem <- procOPA(Siginvhalf %*% mu , Xstar[, , i], scale = scale, reflect = reflect) Gammai <- tem$R betai <- tem$s #ci <- t(one)%*% Siginvhalf %*% X[,,i] %*% Gammai*betai/k #Yi <- Sighalf%*% ans$rotated[,,i] + Sighalf%*%one%*% ci #Zi <- Yi - one %*% t(one)%*% Siginv %*% Yi / c( t(one)%*%Siginv%*%one ) Zi <- Sighalf %*% Xstar[, , i] %*% Gammai * betai ans2$rotated[, , i] <- Zi } sum2 <- 0 for (i in 1:n) { sum2 <- sum2 + centroid.size(ans2$rotated[, , i]) ** 2 } size2 <- sqrt(sum2) tem <- ans2$mshape * 0 for (i in 1:n) { ans2$rotated[, , i] <- ans2$rotated[, , i] * size1 / size2 tem <- tem + ans2$rotated[, , i] * sampleweights[i] / sum(sampleweights) } mu <- tem dif3 <- riemdist(old, mu) } z <- ans2 z$mshape <- tem tan <- z$rotated[, 1,] - z$mshape[, 1] for (i in 2:m) { tan <- rbind(tan, z$rotated[, i,] - z$mshape[, i]) } pca <- prcomp1(t(tan)) z$tan <- tan npc <- 0 for (i in 1:length(pca$sdev)) { if (pca$sdev[i] > 1e-07) { npc <- npc + 1 } } z$scores <- pca$x z$rawscores <- pca$x z$stdscores <- pca$x for (i in 1:npc) { z$stdscores[, i] <- pca$x[, i] / pca$sdev[i] } z$pcar <- pca$rotation z$pcasd <- pca$sdev z$percent <- z$pcasd ^ 2 / sum(z$pcasd ^ 2) * 100 size <- rep(0, times = n) rho <- rep(0, times = n) x <- X size <- apply(x, 3, centroid.size) rho <- apply(x, 3, y <- function(x) { riemdist(x, z$mshape) }) z$rho <- rho z$size <- size z$rmsrho <- sqrt(mean(rho ^ 2)) z$rmsd1 <- sqrt(mean(sin(rho) ^ 2)) z$k <- k z$m <- m z$n <- n tem <- matrix(0, k, k) for (i in 1:n) { tem <- tem + (z$rotated[, , i] - z$mshape) %*% t((z$rotated[, , i] - z$mshape)) } tem <- tem / (n * m) z$Sigmak <- tem return(z) } #================================================================================== testshapes <- function(A, B, resamples = 1000, replace = TRUE, scale = TRUE) { if (replace == TRUE) { out <- bootstraptest(A, B, resamples = resamples, scale = scale) } if (replace == FALSE) { out <- permutationtest(A, B, nperms = resamples, scale = scale) } out } #================================================================================== testmeanshapes <- function(A, B, resamples = 1000, replace = FALSE, scale = TRUE) { if (replace == TRUE) { out <- bootstraptest(A, B, resamples = resamples, scale = scale) } if (replace == FALSE) { out <- permutationtest(A, B, nperms = resamples, scale = scale) } if (resamples > 0) { aa <- list( H = 0, H.pvalue = 0, H.table.pvalue = 0, G = 0, G.pvalue = 0, G.table.pvalue = 0, J = 0, J.pvalue = 0, J.table.pvalue = 0 ) aa$H <- out$H aa$H.pvalue <- out$H.pvalue aa$H.table.pvalue <- out$H.table.pvalue aa$G <- out$G aa$G.pvalue <- out$G.pvalue aa$G.table.pvalue <- out$G.table.pvalue aa$J <- out$J aa$J.pvalue <- out$J.pvalue aa$J.table.pvalue <- out$J.table.pvalue } if (resamples == 0) { aa <- list( H = 0, H.table.pvalue = 0, G = 0, G.table.pvalue = 0, J = 0, J.table.pvalue = 0 ) aa$H <- out$H aa$H.table.pvalue <- out$H.table.pvalue aa$G <- out$G aa$G.table.pvalue <- out$G.table.pvalue aa$J <- out$J aa$J.table.pvalue <- out$J.table.pvalue } aa } #================================================================================== permutationtest2 <- function (A, B, nperms = 1000, scale = scale) { A1 <- A A2 <- B mdim <- dim(A1)[2] B <- nperms nsam1 <- dim(A1)[3] nsam2 <- dim(A2)[3] pool <- procGPA( abind (A1, A2) , scale = scale, tangentcoords = "partial", pcaoutput = FALSE ) tempool <- pool for (i in 1:(nsam1 + nsam2)) { tempool$tan[, i] <- pool$tan[, i] / Enorm(pool$tan[, i]) * pool$rho[i] } pool <- tempool permpool <- pool Gtem <- Goodall(pool, nsam1, nsam2) Htem <- Hotelling(pool, nsam1, nsam2) Jtem <- James(pool, nsam1, nsam2, table = TRUE) Ltem <- Lambdamin(pool, nsam1, nsam2) Gumc <- Gtem$F Humc <- Htem$F Jumc <- Jtem$Tsq Lumc <- Ltem$lambdamin Gtabpval <- Gtem$pval Htabpval <- Htem$pval Jtabpval <- Jtem$pval Ltabpval <- Ltem$pval if (B > 0) { Apool <- array(0, c(dim(A1)[1], dim(A1)[2], dim(A1)[3] + dim(A2)[3])) Apool[, , 1:nsam1] <- A1 Apool[, , (nsam1 + 1):(nsam1 + nsam2)] <- A2 out <- list( H = 0, H.pvalue = 0, H.table.pvalue = 0, J = 0, J.pvalue = 0, J.table.pvalue = 0, G = 0, G.pvalue = 0, G.table.pvalue = 0 ) Gu <- rep(0, times = B) Hu <- rep(0, times = B) Ju <- rep(0, times = B) Lu <- rep(0, times = B) cat("Permutations - sampling without replacement: ") cat(c("No of permutations = ", B, "\n")) for (i in 1:B) { if (i / 100 == trunc(i / 100)) { cat(c(i, " ")) } select <- sample(1:(nsam1 + nsam2)) permpool$tan <- pool$tan[, select] Gu[i] <- Goodall(permpool, nsam1, nsam2)$F Hu[i] <- Hotelling(permpool, nsam1, nsam2)$F Ju[i] <- James(permpool, nsam1, nsam2)$Tsq Lu[i] <- Lambdamin(permpool, nsam1, nsam2)$lambdamin } Gu <- sort(Gu) numbig <- length(Gu[Gumc < Gu]) pvalG <- (1 + numbig) / (B + 1) Lu <- sort(Lu) numbig <- length(Lu[Lumc < Lu]) pvalL <- (1 + numbig) / (B + 1) Ju <- sort(Ju) numbig <- length(Ju[Jumc < Ju]) pvalJ <- (1 + numbig) / (B + 1) Hu <- sort(Hu) numbig <- length(Hu[Humc < Hu]) pvalH <- (1 + numbig) / (B + 1) cat(" \n") out$Hu <- Hu out$Ju <- Ju out$Gu <- Gu out$Lu <- Lu out$H <- Humc out$H.pvalue <- pvalH out$H.table.pvalue <- Htabpval out$J <- Jumc out$J.pvalue <- pvalJ out$J.table.pvalue <- Jtabpval out$G <- Gumc out$G.pvalue <- pvalG out$G.table.pvalue <- Gtabpval out$L <- Lumc out$L.pvalue <- pvalL out$L.table.pvalue <- Ltabpval } if (B == 0) { out <- list( H = 0, H.table.pvalue = 0, G = 0, G.table.pvalue = 0 ) out$H <- Humc out$H.table.pvalue <- Htabpval out$J <- Jumc out$J.table.pvalue <- Jtabpval out$G <- Gumc out$G.table.pvalue <- Gtabpval out$L <- Lumc out$L.table.pvalue <- Ltabpval } out } #================================================================================== bootstraptest <- function (A, B, resamples = 200, scale = TRUE) { A1 <- A A2 <- B mdim <- dim(A1)[2] B <- resamples nsam1 <- dim(A1)[3] nsam2 <- dim(A2)[3] pool <- procGPA( abind (A1, A2) , scale = scale , tangentcoords = "partial", pcaoutput = FALSE ) tempool <- pool for (i in 1:(nsam1 + nsam2)) { tempool$tan[, i] <- pool$tan[, i] / Enorm(pool$tan[, i]) * pool$rho[i] } pool <- tempool bootpool <- pool Gtem <- Goodall(pool, nsam1, nsam2) Htem <- Hotelling(pool, nsam1, nsam2) Jtem <- James(pool, nsam1, nsam2, table = TRUE) Ltem <- Lambdamin(pool, nsam1, nsam2) Gumc <- Gtem$F Humc <- Htem$F Jumc <- Jtem$Tsq Lumc <- Ltem$lambdamin Gtabpval <- Gtem$pval Htabpval <- Htem$pval Jtabpval <- Jtem$pval Ltabpval <- Ltem$pval if (B > 0) { Apool <- array(0, c(dim(A1)[1], dim(A1)[2], dim(A1)[3] + dim(A2)[3])) Apool[, , 1:nsam1] <- A1 Apool[, , (nsam1 + 1):(nsam1 + nsam2)] <- A2 out <- list( H = 0, H.pvalue = 0, H.table.pvalue = 0, J = 0, J.pvalue = 0, J.table.pvalue = 0, G = 0, G.pvalue = 0, G.table.pvalue = 0 ) Gu <- rep(0, times = B) Hu <- rep(0, times = B) Ju <- rep(0, times = B) Lu <- rep(0, times = B) pool2 <- pool pool2$tan[, 1:nsam1] <- pool$tan[, 1:nsam1] - apply(pool$tan[, 1:nsam1], 1, mean) pool2$tan[, (nsam1 + 1):(nsam1 + nsam2)] <- pool$tan[, (nsam1 + 1):(nsam1 + nsam2)] - apply(pool$tan[, (nsam1 + 1):(nsam1 + nsam2)], 1, mean) cat("Bootstrap - sampling with replacement within each group under H0: ") cat(c("No of resamples = ", B, "\n")) for (i in 1:B) { if (i / 100 == trunc(i / 100)) { cat(c(i, " ")) } select1 <- sample(1:nsam1, replace = TRUE) select2 <- sample((nsam1 + 1):(nsam1 + nsam2), replace = TRUE) bootpool$tan <- pool2$tan[, c(select1, select2)] Gu[i] <- Goodall(bootpool, nsam1, nsam2)$F Hu[i] <- Hotelling(bootpool, nsam1, nsam2)$F Ju[i] <- James(bootpool, nsam1, nsam2)$Tsq Lu[i] <- Lambdamin(bootpool, nsam1, nsam2)$lambdamin } Gu <- sort(Gu) numbig <- length(Gu[Gumc < Gu]) pvalG <- (1 + numbig) / (B + 1) Ju <- sort(Ju) numbig <- length(Ju[Jumc < Ju]) pvalJ <- (1 + numbig) / (B + 1) Hu <- sort(Hu) numbig <- length(Hu[Humc < Hu]) pvalH <- (1 + numbig) / (B + 1) numbig <- length(Lu[Lumc < Lu]) pvalL <- (1 + numbig) / (B + 1) cat(" \n") out$Hu <- Hu out$Ju <- Ju out$Gu <- Gu out$Lu <- Lu out$H <- Humc out$H.pvalue <- pvalH out$H.table.pvalue <- Htabpval out$J <- Jumc out$J.pvalue <- pvalJ out$J.table.pvalue <- Jtabpval out$G <- Gumc out$G.pvalue <- pvalG out$G.table.pvalue <- Gtabpval out$L <- Lumc out$L.pvalue <- pvalL out$L.table.pvalue <- Ltabpval } if (B == 0) { out <- list( H = 0, H.table.pvalue = 0, G = 0, G.table.pvalue = 0, J = 0, J.table.pvalue = 0 ) out$H <- Humc out$H.table.pvalue <- Htabpval out$J <- Jumc out$J.table.pvalue <- Jtabpval out$G <- Gumc out$G.table.pvalue <- Gtabpval out$L <- Lumc out$L.table.pvalue <- Ltabpval } out } #================================================================================== Lambdamin <- function (pool, n1, n2, p = 0) { censiz <- centroid.size(pool$mshape) tan1 <- pool$tan[, 1:n1] tan2 <- pool$tan[, (n1 + 1):(n1 + n2)] kt <- dim(tan1)[1] n <- n1 + n2 k <- pool$k m <- pool$m if (p == 0) { p <- min(k * m - (m * (m - 1)) / 2 - 1 - m, n1 + n2 - 2) } HH <- diag(k) mu1 <- pool$mshape if (dim(tan1)[1] == k * m - m) { HH <- defh(k - 1) mu1 <- preshape(pool$mshape) } if (m == 2) { mu <- c(mu1[, 1], mu1[, 2]) } if (m == 3) { mu <- c(mu1[, 1], mu1[, 2], mu1[, 3]) } dd <- kt X1 <- tan1 * 0 X2 <- tan2 * 0 S1 <- matrix(0, dd, dd) S2 <- matrix(0, dd, dd) for (i in 1:n1) { X1[, i] <- (mu + tan1[, i]) / Enorm(mu + tan1[, i]) S1 <- S1 + X1[, i] %*% t(X1[, i]) } for (i in 1:n2) { X2[, i] <- (mu + tan2[, i]) / Enorm(mu + tan2[, i]) S2 <- S2 + X2[, i] %*% t(X2[, i]) } sumx1 <- 0 sumx2 <- 0 for (i in 1:n1) { sumx1 <- sumx1 + X1[, i] } for (i in 1:n2) { sumx2 <- sumx2 + X2[, i] } sum1 <- apply(X1, 1, sum) sum2 <- apply(X2, 1, sum) mean1 <- sum1 / Enorm(sum1) mean2 <- sum2 / Enorm(sum2) bb1 <- mean1[1:(dd - 1)] cc1 <- mean1[dd] bb2 <- mean2[1:(dd - 1)] cc2 <- mean2[dd] A1 <- cc1 / abs(cc1) * diag(dd - 1) - cc1 / (abs(cc1) + cc1 ^ 2) * bb1 %*% t(bb1) M1 <- cbind(A1,-bb1) A1 <- cc2 / abs(cc2) * diag(dd - 1) - cc2 / (abs(cc2) + cc2 ^ 2) * bb2 %*% t(bb2) M2 <- cbind(A1,-bb2) G1 <- matrix(0, dd - 1, dd - 1) G2 <- matrix(0, dd - 1, dd - 1) for (iu in 1:(dd - 1)) { for (iv in iu:(dd - 1)) { G1[iu, iv] <- G1[iu, iv] + t((t(M1))[, iu]) %*% S1 %*% (t(M1))[, iv] G1[iv, iu] <- G1[iu, iv] G2[iu, iv] <- G2[iu, iv] + t((t(M2))[, iu]) %*% S2 %*% (t(M2))[, iv] G2[iv, iu] <- G2[iu, iv] } } G1 <- G1 / n1 / Enorm(sumx1 / n1) ^ 2 G2 <- G2 / n2 / Enorm(sumx2 / n2) ^ 2 # eva1 <- eigen(G1, symmetric = TRUE, EISPACK = TRUE) eva1 <- eigen(G1, symmetric = TRUE) pcar1 <- eva1$vectors[, 1:p] pcasd1 <- sqrt(abs(eva1$values[1:p])) # eva2 <- eigen(G2, symmetric = TRUE, EISPACK = TRUE) eva2 <- eigen(G2, symmetric = TRUE) pcar2 <- eva2$vectors[, 1:p] pcasd2 <- sqrt(abs(eva2$values[1:p])) if ((pcasd1[p] < 1e-06) || (pcasd2[p] < 1e-06)) { offset <- 1e-06 cat("*") pcasd1 <- sqrt(pcasd1 ^ 2 + offset) pcasd2 <- sqrt(pcasd2 ^ 2 + offset) } Ahat1 <- n1 * t(M1) %*% (pcar1 %*% diag(1 / pcasd1 ^ 2) %*% t(pcar1)) %*% M1 Ahat2 <- n2 * t(M2) %*% (pcar2 %*% diag(1 / pcasd2 ^ 2) %*% t(pcar2)) %*% M2 Ahat <- (Ahat1 + Ahat2) # eva <- eigen(Ahat, symmetric = TRUE, EISPACK = TRUE) eva <- eigen(Ahat, symmetric = TRUE) lambdamin <- eva$values[p + 1] pval <- 1 - pchisq(lambdamin, p) #print(lambdamin) #print(pval) z <- list() z$pval <- pval z$df <- p z$lambdamin <- lambdamin return(z) } #================================================================================== Goodall <- function(pool , n1, n2, p = 0) { tan1 <- pool$tan[, 1:n1] tan2 <- pool$tan[, (n1 + 1):(n1 + n2)] kt <- dim(tan1)[1] n <- n1 + n2 k <- pool$k m <- pool$m if (p == 0) { p <- min(k * m - (m * (m - 1)) / 2 - 1 - m, n1 + n2 - 2) } top <- Enorm(apply(tan1, 1, mean) - apply(tan2, 1, mean)) ** 2 bot <- sum(diag(var(t(tan1)))) * (n1 - 1) + sum(diag(var(t(tan2)))) * (n2 - 1) Fstat <- ((n1 + n2 - 2) / (1 / n1 + 1 / n2) * top) / bot pval <- 1 - pf(Fstat, p, (n1 + n2 - 2) * p) z <- list() z$F <- Fstat z$pval <- pval z$df1 <- p z$df2 <- (n1 + n2 - 2) * p return(z) } #================================================================================== Hotelling <- function(pool , n1, n2, p = 0) { tan1 <- pool$tan[, 1:n1] tan2 <- pool$tan[, (n1 + 1):(n1 + n2)] kt <- dim(tan1)[1] n <- n1 + n2 k <- pool$k m <- pool$m S1 <- var(t(tan1)) S2 <- var(t(tan2)) Sw <- ((n1 - 1) * S1 + (n2 - 1) * S2) / (n1 + n2 - 2) if (p == 0) { p <- min(k * m - (m * (m - 1)) / 2 - 1 - m, n1 + n2 - 2) } # eva <- eigen(Sw, symmetric = TRUE,EISPACK=TRUE) eva <- eigen(Sw, symmetric = TRUE) pcar <- eva$vectors[, 1:p] pcasd <- sqrt(abs(eva$values[1:p])) if (pcasd[p] < 1e-06) { offset <- 1e-06 cat("*") pcasd <- sqrt(pcasd ^ 2 + offset) } lam <- rep(0, times = kt) lam[1:p] <- 1 / pcasd ^ 2 Suinv <- eva$vectors %*% diag(lam) %*% t(eva$vectors) pcax <- t(pool$tan) %*% pcar one1 <- matrix(1 / n1, n1, 1) one2 <- matrix(1 / n2, n2, 1) oneone <- rbind(one1,-one2) vbar <- pool$tan %*% oneone scores1 <- matrix(vbar, 1, kt) %*% pcar scores <- scores1 / pcasd F.partition <- ((scores[1:p] ^ 2) * (n1 * n2 * (n1 + n2 - p - 1))) / ((n1 + n2) * (n1 + n2 - 2) * p) FF <- sum(F.partition) pval <- 1 - pf(FF, p, (n1 + n2 - p - 1)) z <- list() z$F.partition <- F.partition z$F <- FF z$pval <- pval z$df1 <- p z$T.df1 <- p z$df2 <- (n1 + n2 - p - 1) mm <- n - 2 z$T.df2 <- mm z$Tsq <- FF * (n1 + n2) * (n1 + n2 - 2) * p / (n1 * n2) / (n1 + n2 - p - 1) z$Tsq.partition <- F.partition * (n1 + n2) * (n1 + n2 - 2) * p / (n1 * n2) / (n1 + n2 - p - 1) return(z) } James <- function(pool , n1, n2, p = 0, table = FALSE) { tan1 <- pool$tan[, 1:n1] tan2 <- pool$tan[, (n1 + 1):(n1 + n2)] kt <- dim(tan1)[1] n <- n1 + n2 k <- pool$k m <- pool$m S1 <- var(t(tan1)) S2 <- var(t(tan2)) Sw <- S1 / n1 + S2 / n2 if (p == 0) { p <- min(k * m - (m * (m - 1)) / 2 - 1 - m, n1 + n2 - 2) } # eva <- eigen(Sw, symmetric = TRUE,EISPACK=TRUE) eva <- eigen(Sw, symmetric = TRUE) pcar <- eva$vectors[, 1:p] pcasd <- sqrt(abs(eva$values[1:p])) if (pcasd[p] < 1e-06) { offset <- 1e-06 cat("*") pcasd <- sqrt(pcasd ^ 2 + offset) } lam <- rep(0, times = kt) lam[1:p] <- 1 / pcasd ^ 2 Suinv <- eva$vectors %*% diag(lam) %*% t(eva$vectors) pcax <- t(pool$tan) %*% pcar one1 <- matrix(1 / n1, n1, 1) one2 <- matrix(1 / n2, n2, 1) oneone <- rbind(one1,-one2) vbar <- pool$tan %*% oneone # scores1 <- matrix(vbar, 1, kt ) %*% pcar # scores <- scores1/pcasd # F.partition <- ((scores[1:p]^2) * (n1 * n2 * (n1 + n2 - p - # 1)))/((n1 + n2) * (n1 + n2 - 2) * p) # FF <- sum(F.partition) # pval <- 1 - pf(FF, p, (n1 + n2 - p - 1)) ######### # ginvSw<- pcar%*%diag(1/pcasd**2)%*%t(pcar) ginvSw <- Suinv pval = 0 T1 <- sum(diag((ginvSw %*% S1 / n1))) T2 <- sum(diag((ginvSw %*% S2 / n2))) T1sq <- sum(diag(((ginvSw %*% S1 / n1) %*% ginvSw %*% S1 / n1))) T2sq <- sum(diag(((ginvSw %*% S2 / n2) %*% ginvSw %*% S2 / n2))) Tsq <- (t(vbar) %*% (ginvSw) %*% vbar)[1, 1] if (table == TRUE) { AA <- 1 + 1 / (2 * p) * (T1 ** 2 / (n1 - 1) + T2 ** 2 / (n2 - 1)) BB <- 1 / (p * (p + 2)) * ((T1 ** 2 / 2 + T1sq) / (n1 - 1) + (T2 ** 2 / 2 + T2sq) / (n2 - 1)) kk <- rep(0, times = 1000) for (i in 0:999) { alphai <- i / 1000 kk[i + 1] <- qchisq(alphai, df = p) * (AA + BB * qchisq(alphai, df = p)) } pval <- 1 - max(c(1:1000)[kk < Tsq]) / 1000 } ####### z <- list() z$pval <- pval z$Tsq <- Tsq return(z) } #================================================================================== tpsgrid <- function (TT, YY, xbegin = -999, ybegin = -999, xwidth = -999, opt = 1, ext = 0.1, ngrid = 22, cex = 1, pch = 20, col = 2, zslice = 0, mag = 1, axes3 = FALSE) { k <- nrow(TT) m <- dim(TT)[2] YY <- TT + (YY - TT) * mag bb <- array(TT, c(dim(TT), 1)) aa <- defplotsize2(bb) if (xwidth == -999) { xwidth <- aa$width } if (xbegin == -999) { xbegin <- aa$xl } if (ybegin == -999) { ybegin <- aa$yl } if (m == 3) { zup <- max(TT[, 3]) zlo <- min(TT[, 3]) zpos <- zslice for (ii in 1:length(zslice)) { zpos[ii] <- (zup + zlo) / 2 + (zup - zlo) / 2 * zslice[ii] } } xstart <- xbegin ystart <- ybegin ngrid <- trunc(ngrid / 2) * 2 kx <- ngrid ky <- ngrid - 1 l <- kx * ky step <- xwidth / (kx - 1) r <- 0 X <- rep(0, times = kx) Y2 <- rep(0, times = ky) for (p in 1:kx) { ystart <- ybegin xstart <- xstart + step for (q in 1:ky) { ystart <- ystart + step r <- r + 1 X[r] <- xstart Y2[r] <- ystart } } TPS <- bendingenergy(TT) gamma11 <- TPS$gamma11 gamma21 <- TPS$gamma21 gamma31 <- TPS$gamma31 W <- gamma11 %*% YY ta <- t(gamma21 %*% YY) B <- gamma31 %*% YY WtY <- t(W) %*% YY trace <- c(0) for (i in 1:m) { trace <- trace + WtY[i, i] } benergy <- 16 * pi * trace if (m == 3) { benergy <- 8 * pi * trace } l <- kx * ky phi <- matrix(0, l, m) s <- matrix(0, k, 1) for (islice in 1:length(zslice)) { if (m == 3) { refc <- matrix(c(X, Y2, rep(zpos[islice], times = kx * ky)), kx * ky, m) } if (m == 2) { refc <- matrix(c(X, Y2), kx * ky, m) } for (i in 1:l) { s <- matrix(0, k, 1) for (im in 1:k) { s[im,] <- sigmacov(refc[i,] - TT[im,]) } phi[i,] <- ta + t(B) %*% refc[i,] + t(W) %*% s } if (m == 3) { if (opt == 2) { shapes3d(TT, color = 2, axes3 = axes3, rglopen = FALSE) shapes3d(YY, color = 4, rglopen = FALSE) for (i in 1:k) { lines3d(rbind(TT[i, ], YY[i, ]), col = 1) } for (j in 1:kx) { lines3d(refc[((j - 1) * ky + 1):(ky * j) , ], color = 6) } for (j in 1:ky) { lines3d(refc[(0:(kx - 1) * ky) + j , ], color = 6) } } shapes3d(TT, color = 2, axes3 = axes3, rglopen = FALSE) shapes3d(YY, color = 4, rglopen = FALSE) for (i in 1:k) { lines3d(rbind(TT[i, ], YY[i, ]), col = 1) } for (j in 1:kx) { lines3d(phi[((j - 1) * ky + 1):(ky * j) , ], color = 3) } for (j in 1:ky) { lines3d(phi[(0:(kx - 1) * ky) + j , ], color = 3) } } } if (m == 2) { par(pty = "s") if (opt == 2) { par(mfrow = c(1, 2)) order <- linegrid(refc, kx, ky) plot( order[1:l, 1], order[1:l, 2], type = "l", xlim = c(xbegin - xwidth * ext, xbegin + xwidth * (1 + ext)), ylim = c( ybegin - (xwidth * ky) / kx * ext, ybegin + (xwidth * ky) / kx * (1 + ext) ), xlab = " ", ylab = " " ) lines(order[(l + 1):(2 * l), 1], order[(l + 1):(2 * l), 2], type = "l") points(TT, cex = cex, pch = pch, col = col) } order <- linegrid(phi, kx, ky) plot( order[1:l, 1], order[1:l, 2], type = "l", xlim = c(xbegin - xwidth * ext, xbegin + xwidth * (1 + ext)), ylim = c(ybegin - (xwidth * ext * ky) / kx, ybegin + (xwidth * (1 + ext) * ky) / kx), xlab = " ", ylab = " " ) lines(order[(l + 1):(2 * l), 1], order[(l + 1):(2 * l), 2], type = "l") points(YY, cex = cex, pch = pch, col = col + 1) points(TT, cex = cex, pch = pch, col = col) for (i in 1:(k)) { arrows( TT[i, 1], TT[i, 2] , YY[i, 1], YY[i, 2] , col = col + 2, length = 0.1, angle = 20 ) } } } # #================================================================================== rotatexyz <- function(x, thetax, thetay, thetaz) { thetax <- thetax / 180 * pi thetay <- thetay / 180 * pi thetaz <- thetaz / 180 * pi Rx <- matrix(c( 1, 0, 0, 0, cos(thetax), sin(thetax), 0, -sin(thetax), cos(thetax) ), 3, 3) Ry <- matrix(c( cos(thetay), 0, sin(thetay), 0, 1, 0, -sin(thetay), 0, cos(thetay) ), 3, 3) Rz <- matrix(c( cos(thetaz), sin(thetaz), 0, -sin(thetaz), cos(thetaz), 0, 0, 0, 1 ), 3, 3) y <- x n <- dim(x)[3] for (i in 1:n) { y[, , i] <- x[, , i] %*% Rx %*% Ry %*% Rz } y } #================================================================================== rigidbody <- function(X, transx = 0, transy = 0, transz = 0, thetax = 0, thetay = 0, thetaz = 0) { if (is.matrix(X)) { X <- array(X, c(dim(X), 1)) } m <- dim(X)[2] n <- dim(X)[3] Y <- X if (m == 2) { #xx<-as.3d(X) if (dim(X)[3] < 2) { xx <- array(as.3d(X), dim = c(nrow(X), 3, 1)) } else{ xx <- as.3d(X) } for (i in 1:n) { for (j in 1:m) { xx[j, , i] <- xx[j, , i] - c(transx, transy, transz) } } yy <- rotatexyz(xx, thetax, thetay, thetaz) Y <- yy if ((sum(abs(yy[, 3, ]))) < 0.000000001) { Y <- yy[, 1:2, ] } } if (m == 3) { for (i in 1:n) { for (j in 1:m) { X[j, , i] <- X[j, , i] - c(transx, transy, transz) } } Y <- rotatexyz(X, thetax, thetay, thetaz) } Y } #================================================================================== as.3d <- function(X) { k <- dim(X)[1] if (is.matrix(X)) { X <- array(X, c(dim(X), 1)) } n <- dim(X)[3] if (dim(X)[2] != 2) { print("not 2 dimensional!") } Y <- array(0, c(k, 3, n)) Y[, 1:2, ] <- X if (n == 1) { Y <- Y[, , 1] } Y } #================================================================================== abind <- function(X1 , X2) { k <- dim(X1)[1] m <- dim(X1)[2] if (is.matrix(X1)) { tem <- array(0, c(k, m, 1)) tem[, , 1] <- X1 X1 <- tem } if (is.matrix(X2)) { tem <- array(0, c(k, m, 1)) tem[, , 1] <- X2 X2 <- tem } n1 <- dim(X1)[3] n2 <- dim(X2)[3] Y <- array(0, c(k, m, n1 + n2)) Y[, , 1:n1] <- X1 Y[, , (n1 + 1):(n1 + n2)] <- X2 Y } #================================================================================== shapes3d <- function(x, loop = 0, type = "p", color = 2, joinline = c(1:1), axes3 = FALSE, rglopen = TRUE) { if (is.matrix(x)) { xt <- array(0, c(dim(x), 1)) xt[, , 1] <- x x <- xt } if (is.array(x) == FALSE) { cat("Data not in right format : require an array \n") } if (is.array(x) == TRUE) { if (rglopen) { rgl.open() rgl.bg(color = "white") } if (dim(x)[2] == 2) { x <- as.3d(x) } if (loop == 0) { k <- dim(x)[1] sz <- centroid.size(x[, , 1]) / sqrt(k) / 30 plotshapes3d( x, type = type, color = color, size = sz, joinline = joinline ) if (axes3) { axes3d(color = "black") title3d( xlab = "x", ylab = "y", zlab = "z", color = "black" ) } } if (loop > 0) { for (i in 1:loop) { plotshapestime3d(x, type = type) } } } } #================================================================================== plotshapes3d <- function (x, type = "p", rgl = TRUE, color = 2, size = 1, joinline = c(1:1)) { k <- dim(x)[1] n <- dim(x)[3] y <- matrix(0, k * n, 3) for (i in 1:n) { y[(i - 1) * k + (1:k),] <- x[, , i] } if (rgl == FALSE) { par(mfrow = c(1, 1)) out <- defplotsize3(x) xl <- out$xl xu <- out$xu yl <- out$yl yu <- out$yu zl <- out$zl zu <- out$zu scatterplot3d( y, xlim = c(xl, xu), ylim = c(yl, yu), zlim = c(zl, zu), xlab = "x", ylab = "y", zlab = "z", axis = TRUE, type = type, color = color, highlight.3d = TRUE ) } if (rgl == TRUE) { if (type == "l") { points3d(y, col = color, size = size) for (j in 1:n) { lines3d(x[, , j], col = 8) } } if (type == "dots") { points3d(y, col = color, size = size) } if (type == "p") { spheres3d(y, col = color, radius = size) } if (length(joinline) > 1) { for (j in 1:n) { lines3d(x[joinline, , j], col = 8) } } } } #================================================================================== plotshapestime3d <- function (x, type = "p") { par(mfrow = c(1, 1)) out <- defplotsize3(x) xl <- out$xl xu <- out$xu yl <- out$yl yu <- out$yu zl <- out$zl zu <- out$zu n <- dim(x)[3] for (i in 1:n) { scatterplot3d( x[, , i], xlim = c(xl, xu), ylim = c(yl, yu), zlim = c(zl, zu), xlab = "x", ylab = "y", zlab = "z", axis = TRUE, type = type, highlight.3d = TRUE ) title(i) } } #================================================================================== plotPDMnoaxis3 <- function (mean, pc, sd, xl, xu, yl, yu, lineorder, i) { fig <- mean + i * pc * sd k <- length(mean) / 2 figx <- fig[1:k] figy <- fig[(k + 1):(2 * k)] plot( figx, figy, axes = FALSE, xlab = " ", ylab = " ", ylim = c(yl, yu), type = "n", xlim = c(xl, xu) ) text(figx, figy, 1:k) lines(figx[lineorder], figy[lineorder]) for (aa in 1:9999) { aaa <- 1 } } ################################# #================================================================================== shapepca <- function (proc, pcno = c(1, 2, 3), type = "r", mag = 1, joinline = c(1, 1), project = c(1, 2), scores3d = FALSE, color = 2, axes3 = FALSE, rglopen = TRUE, zslice = 0) { if (scores3d == TRUE) { axes3 <- TRUE sz <- max(proc$rawscores[, max(pcno)]) - min(proc$rawscores[, max(pcno)]) spheres3d(proc$rawscores[, pcno] , radius = sz / 30, col = color) if (axes3) { axes3d() } } m <- dim(proc$mshape)[2] k <- dim(proc$mshape)[1] if (scores3d == FALSE) { if ((m == 2)) { out <- defplotsize2(proc$rotated, project = project) xl <- out$xl yl <- out$yl width <- out$width plotpca(proc, pcno, type, mag, xl, yl, width, joinline, project) } if ((m == 3) && (type == "m")) { # plot3Dmean(proc) # cat("Mean shape \n") # for (i in 1:length(pcno)) { # cat("PC ", pcno[i], " \n") # plot3Dpca(proc, pcno[i]) # } for (i in 1:length(pcno)) { cat("PC ", pcno[i], " \n") plotpca3d(proc, pcno[i]) } } ## correct length of tangent vector if in Helmertized space h <- defh(k - 1) zero <- matrix(0, k - 1, k) H <- cbind(h, zero, zero) H1 <- cbind(zero, h, zero) H2 <- cbind(zero, zero, h) H <- rbind(H, H1, H2) if (dim(proc$pcar)[1] == (3 * (k - 1))) { pcarot <- (t(H) %*% proc$pcar) proc$pcar <- pcarot } if (((m == 3) && (type != "m")) && (type != "g")) { if (rglopen) { rgl.open() rgl.bg(color = "white") } sz <- centroid.size(proc$mshape) / sqrt(k) / 30 spheres3d(proc$mshape, radius = sz, col = color) if (axes3) { axes3d() } for (i in pcno) { pc <- proc$mshape + 3 * mag * proc$pcasd[i] * cbind(proc$pcar[1:k, i], proc$pcar[(k + 1):(2 * k), i], proc$pcar[(2 * k + 1):(3 * k), i]) for (j in 1:k) { lines3d(rbind(proc$mshape[j, ], pc[j, ]), col = i) } } } } if ((m == 3) && (type == "g")) { if (rglopen) { rgl.open() rgl.bg(color = "white") } for (i in pcno) { pc <- proc$mshape + 3 * mag * proc$pcasd[i] * cbind(proc$pcar[1:k, i], proc$pcar[(k + 1):(2 * k), i], proc$pcar[(2 * k + 1):(3 * k), i]) tpsgrid(proc$mshape, pc, zslice = zslice) } } } #================================================================================== plotpca3d <- function (procreg, pcno = 1) { par(mfrow = c(1, 1)) out <- defplotsize3(procreg$rotated) xl <- out$xl xu <- out$xu yl <- out$yl yu <- out$yu zl <- out$zl zu <- out$zu k <- dim(procreg$mshape)[1] subx <- 1:k suby <- (k + 1):(2 * k) subz <- (2 * k + 1):(3 * k) evec <- cbind(procreg$pcar[subx, pcno], procreg$pcar[suby, pcno], procreg$pcar[subz, pcno]) for (j in 1:10) { for (ii in-12:12) { mag <- ii / 4 scatterplot3d( procreg$mshape + mag * evec * procreg$pcasd[pcno], xlim = c(xl, xu), ylim = c(yl, yu), zlim = c(zl, zu), xlab = "x", ylab = "y", zlab = "z", axis = TRUE, highlight.3d = TRUE ) title(pcno) } for (ii in-11:11) { mag <- -ii / 4 scatterplot3d( procreg$mshape + mag * evec * procreg$pcasd[pcno], xlim = c(xl, xu), ylim = c(yl, yu), zlim = c(zl, zu), xlab = "x", ylab = "y", zlab = "z", axis = TRUE ) title(pcno) } } } ############################## #================================================================================== Hotelling2Djames <- function (A, B) { z <- list(Tsq = 0, pval = 0) n1 <- dim(A)[3] n2 <- dim(B)[3] n <- n1 + n2 k <- dim(A)[1] m <- dim(B)[2] if (m != 2) { print("Data not two dimensional") return(z) } else { pool <- array(0, c(k, m, n)) pool[, , 1:n1] <- A pool[, , (n1 + 1):n] <- B poolpr <- procrustes2d(pool, 1, 2) S1 <- var(t(poolpr$tan[, 1:n1])) S2 <- var(t(poolpr$tan[, (n1 + 1):(n1 + n2)])) gamma <- realtocomplex(preshape(poolpr$mshape)) Sw <- (S1 / n1 + S2 / n2) p <- 2 * k - 4 # TT<-eigen(Sw,symmetric=TRUE,EISPACK=TRUE) TT <- eigen(Sw, symmetric = TRUE) pcar <- TT$vectors[, 1:p] pcasd <- sqrt(abs(TT$values[1:p])) ####### add small offset if defecient in rank if (pcasd[p] < 0.000001) { offset <- 0.000001 cat("*") pcasd <- sqrt(pcasd ** 2 + offset ** 2) } ####################################### pcax <- t(poolpr$tan) %*% pcar h <- defh(k - 1) zero <- matrix(0, k - 1, k) H <- cbind(h, zero) H1 <- cbind(zero, h) H <- rbind(H, H1) meanxy <- t(H) %*% V(gamma) realrot <- t(H) %*% pcar one1 <- matrix(1 / n1, n1, 1) one2 <- matrix(1 / n2, n2, 1) oneone <- rbind(one1,-one2) vbar <- poolpr$tan %*% oneone scores1 <- matrix(vbar, 1, (2 * k - 2)) %*% pcar scores <- scores1 / pcasd F.partition <- ((scores[1:p] ^ 2) * (n1 * n2 * (n1 + n2 - p - 1))) / ((n1 + n2) * (n1 + n2 - 2) * p) FF <- sum(F.partition) pval <- 1 - pf(FF, p, (n1 + n2 - p - 1)) ginvSw <- pcar %*% diag(1 / pcasd ** 2) %*% t(pcar) T1 <- sum(diag((ginvSw %*% S1 / n1))) T2 <- sum(diag((ginvSw %*% S2 / n2))) T1sq <- sum(diag(( (ginvSw %*% S1 / n1) %*% ginvSw %*% S1 / n1 ))) T2sq <- sum(diag(( (ginvSw %*% S2 / n2) %*% ginvSw %*% S2 / n2 ))) Tsq <- (t(vbar) %*% (ginvSw) %*% vbar)[1, 1] AA <- 1 + 1 / (2 * p) * (T1 ** 2 / (n1 - 1) + T2 ** 2 / (n2 - 1)) BB <- 1 / (p * (p + 2)) * ((T1 ** 2 / 2 + T1sq) / (n1 - 1) + (T2 ** 2 / 2 + T2sq) / (n2 - 1)) kk <- rep(0, times = 1000) for (i in 0:999) { alphai <- i / 1000 kk[i + 1] <- qchisq(alphai, df = p) * (AA + BB * qchisq(alphai, df = p)) } pval <- 1 - max(c(1:1000)[kk < Tsq]) / 1000 # z$F.partition <- F.partition # z$F <- FF z$pval <- pval z$Tsq <- Tsq # z$df1 <- p # z$T.df1 <- p # z$df2 <- (n1 + n2 - p - 1) # mm <- n - 2 # z$T.df2 <- mm # z$Tsq <- FF * (n1 + n2) * (n1 + n2 - 2) * p/(n1 * n2)/(n1 + # n2 - p - 1) # z$Tsq.partition <- F.partition * (n1 + n2) * (n1 + n2 - # 2) * p/(n1 * n2)/(n1 + n2 - p - 1) return(z) } } MGM <- function(zst) { nsam <- dim(zst)[2] k <- dim(zst)[1] Mhat <- matrix(0, k - 1, k - 2) lamhat <- rep(0, times = (k - 1)) Sighat <- matrix(0, k - 2, k - 2) kk <- k * 2 - 2 t1 <- reassqpr(preshape(zst)) / nsam # t2 <- eigen(t1,symmetric=TRUE,EISPACK=TRUE) t2 <- eigen(t1, symmetric = TRUE) reagamma <- (t2$vectors[, 1] + t2$vectors[, 2]) / sqrt(2) gamma <- Vinv(reagamma) muhat <- gamma for (i in 1:(k - 2)) { Mhat[, i] <- Vinv(t2$vectors[, 1 + (2 * i)]) } for (i in 1:(k - 1)) { lamhat[i] <- t2$values[(2 * i) - 1] } for (j in 2:(k - 1)) { for (l in 2:(k - 1)) { sum <- 0 for (i in 1:nsam) { zi <- preshape(zst[, i]) sum <- sum + st(Mhat[, j - 1]) %*% zi * st(zi) %*% Mhat[, l - 1] * st(zi) %*% muhat * st(muhat) %*% zi } Sighat[j - 1, l - 1] <- 1 / (lamhat[1] - lamhat[j]) / (lamhat[1] - lamhat[l]) * sum / nsam } } SR <- Re(Sighat) SI <- Im(Sighat) S1 <- cbind(SR, SI) S2 <- cbind(-(SI), SR) S <- rbind(S1, S2) offset <- 0 #es<-eigen(S,symmetric=TRUE,EISPACK=TRUE)$values es <- eigen(S, symmetric = TRUE)$values nn <- length(es) if (es[nn] < 0.000001) { offset <- 0.000001 #cat("Warning: test: small samples, lambda I added to within group covariance matrix \n") cat("*") } invS <- solve(S + offset * diag(nn)) invSR <- invS[1:(k - 2), 1:(k - 2)] invSI <- invS[1:(k - 2), (k - 1):(2 * k - 4)] invS <- invSR + 1i * invSI Mhat <- st(Mhat) MGM <- st(Mhat) %*% invS %*% Mhat MGM } #====================================================================================== resampletest <- function(A, B, resamples = 200, replace = TRUE) { A1 <- A A2 <- B B <- resamples k <- dim(A1)[1] m <- dim(A1)[2] nmin <- min(dim(A1)[3], dim(A2)[3]) ntot <- dim(A1)[3] + dim(A2)[3] M <- (k - 1) * m - m * (m - 1) / 2 - 1 if (M >= ntot) { cat("Warning: Low sample size (n1 + n2 <= p) \n") } if ((M >= nmin) && (replace == TRUE)) { cat( "Warning: Low sample sizes : min(n1,n2)<=p : * indicates some regularization carried out \n" ) } permutation <- !replace if (is.complex(A1)) { tem <- array(0, c(nrow(A1), 2, ncol(A1))) tem[, 1,] <- Re(A1) tem[, 2,] <- Im(A1) A1 <- tem } if (is.complex(A2)) { tem <- array(0, c(nrow(A2), 2, ncol(A2))) tem[, 1,] <- Re(A2) tem[, 2,] <- Im(A2) A2 <- tem } m <- dim(A1)[2] if (m != 2) { print("Data not two dimensional") print("Carrying out tests on Procrustes residuals") out <- testmeanshapes(A1, A2, resamples = resamples, replace = replace) return(out) } zst1 <- A1[, 1, ] + 1i * A1[, 2, ] zst2 <- A2[, 1, ] + 1i * A2[, 2, ] nsam1 <- dim(zst1)[2] nsam2 <- dim(zst2)[2] k <- dim(zst1)[1] LL <- (MGM(zst1) + MGM(zst2)) * (nsam1 + nsam2) LL1 <- cbind(Re(LL), Im(LL)) LL2 <- cbind(-Im(LL), Re(LL)) LL <- rbind(LL1, LL2) #Tumc<-min(eigen(LL,symmetric=TRUE,only.values=TRUE,EISPACK=TRUE)$values) Tumc <- min(eigen(LL, symmetric = TRUE, only.values = TRUE)$values) m1 <- preshape(procrustes2d(zst1)$mshape) m1 <- m1[, 1] + 1i * m1[, 2] m2 <- preshape(procrustes2d(zst2)$mshape) m2 <- m2[, 1] + 1i * m2[, 2] m0 <- preshape(procrustes2d(cbind(zst1, zst2))$mshape) m0 <- m0[, 1] + 1i * m0[, 2] d <- length(m1) H <- defh(k - 1) b <- m1 a <- m0 bt <- b * c((st(b) %*% a) / Mod(st(b) %*% a)) abt <- c(Re(st(bt) %*% a)) ct <- (bt - a * abt) # ct <- ct / sqrt(st(ct) %*% ct) ct <- ct / c(sqrt(st(as.vector(ct)) %*% as.vector(ct))) At <- a %*% st(ct) - ct %*% st(a) salph <- sqrt(1 - abt ** 2) calph <- abt Id <- diag(rep(1, times = d)) U1 <- Id + salph * At + (calph - 1) * (a %*% st(a) + ct %*% st(ct)) b <- m2 a <- m0 bt <- b * c((st(b) %*% a) / Mod(st(b) %*% a)) abt <- c(Re(st(bt) %*% a)) ct <- (bt - a * abt) # ct <- ct / sqrt(st(ct) %*% ct) ct <- ct / c(sqrt(st(as.vector(ct)) %*% as.vector(ct))) At <- a %*% st(ct) - ct %*% st(a) salph <- sqrt(1 - abt ** 2) calph <- abt Id <- diag(rep(1, times = d)) U2 <- Id + salph * At + (calph - 1) * (a %*% st(a) + ct %*% st(ct)) yst1 <- t(H) %*% U1 %*% preshape(zst1) yst2 <- t(H) %*% U2 %*% preshape(zst2) ybind <- cbind(yst1, yst2) zr1 <- array(0, c(k, 2, nsam1)) zr2 <- array(0, c(k, 2, nsam2)) zr3 <- array(0, c(k, 2, nsam1 + nsam2)) zr1[, 1, ] <- Re(zst1) zr1[, 2, ] <- Im(zst1) zr2[, 1, ] <- Re(zst2) zr2[, 2, ] <- Im(zst2) zr3[, 1, ] <- cbind(Re(zst1), Re(zst2)) zr3[, 2, ] <- cbind(Im(zst1), Im(zst2)) yr1 <- array(0, c(k, 2, nsam1)) yr2 <- array(0, c(k, 2, nsam2)) yr3 <- array(0, c(k, 2, nsam1 + nsam2)) yr1[, 1, ] <- Re(yst1) yr1[, 2, ] <- Im(yst1) yr2[, 1, ] <- Re(yst2) yr2[, 2, ] <- Im(yst2) yr3[, 1, ] <- cbind(Re(yst1), Re(yst2)) yr3[, 2, ] <- cbind(Im(yst1), Im(yst2)) Gtem <- Goodall2D(zr1, zr2) Htem <- Hotelling2D(zr1, zr2) Jtem <- Hotelling2Djames(zr1, zr2) Gumc <- Gtem$F Humc <- Htem$F Jumc <- Jtem$Tsq Gtabpval <- Gtem$pval Htabpval <- Htem$pval Jtabpval <- Jtem$pval if (B > 0) { Tu <- rep(0, times = B) Gu <- Tu Hu <- Tu Ju <- Tu cat("Resampling...") cat(c("No of resamples = ", B, "\n")) if (permutation) { cat("Permutations - sampling without replacement \n") } if (permutation == FALSE) { cat("Bootstrap - sampling with replacement \n") } for (i in 1:B) { cat(c(i, " ")) select1 <- sample(1:nsam1, replace = TRUE) select2 <- sample(1:nsam2, replace = TRUE) zb1 <- yst1[, select1] zb2 <- yst2[, select2] zbgh1 <- yr1[, , select1] zbgh2 <- yr2[, , select2] if (permutation) { select0 <- sample(c(1:(nsam1 + nsam2)), (nsam1 + nsam2), replace = FALSE) select1 <- select0[1:nsam1] select2 <- select0[(nsam1 + 1):(nsam1 + nsam2)] zb1 <- zr3[, 1, select1] + 1i * zr3[, 2, select1] zb2 <- zr3[, 1, select2] + 1i * zr3[, 2, select2] zbgh1 <- yr3[, , select1] zbgh2 <- yr3[, , select2] } LL <- (MGM(zb1) + MGM(zb2)) * (nsam1 + nsam2) LL1 <- cbind(Re(LL), Im(LL)) LL2 <- cbind(-Im(LL), Re(LL)) LL <- rbind(LL1, LL2) #lmin<-min(eigen(LL,symmetric=TRUE,only.values=TRUE,EISPACK=TRUE)$values) lmin <- min(eigen(LL, symmetric = TRUE, only.values = TRUE)$values) Tu[i] <- lmin Gu[i] <- Goodall2D(zbgh1, zbgh2)$F Hu[i] <- Hotelling2D(zbgh1, zbgh2)$F Ju[i] <- Hotelling2Djames(zbgh1, zbgh2)$Tsq } Tu <- sort(Tu) numbig <- length(Tu[Tumc < Tu]) pvalb <- (1 + numbig) / (B + 1) Gu <- sort(Gu) numbig <- length(Gu[Gumc < Gu]) pvalG <- (1 + numbig) / (B + 1) Hu <- sort(Hu) numbig <- length(Hu[Humc < Hu]) pvalH <- (1 + numbig) / (B + 1) Ju <- sort(Ju) numbig <- length(Ju[Jumc < Ju]) pvalJ <- (1 + numbig) / (B + 1) cat(" \n") out <- list( lambda = 0, lambda.pvalue = 0, lambda.table.pvalue = 0, H = 0, H.pvalue = 0, H.table.pvalue = 0, J = 0, J.pvalue = 0, J.table.pvalue = 0, G = 0, G.pvalue = 0, G.table.pvalue = 0 ) out$lambda <- Tumc out$lambda.pvalue <- pvalb out$lambda.table.pvalue <- 1 - pchisq(Tumc, 2 * k - 4) out$H <- Humc out$H.pvalue <- pvalH out$H.table.pvalue <- Htabpval out$J <- Jumc out$J.pvalue <- pvalJ out$J.table.pvalue <- Jtabpval out$G <- Gumc out$G.pvalue <- pvalG out$G.table.pvalue <- Gtabpval } if (resamples == 0) { out <- list( lambda = 0, lambda.table.pvalue = 0, H = 0, H.table.pvalue = 0, J = 0, J.table.pvalue = 0, G = 0, G.table.pvalue = 0 ) out$lambda <- Tumc out$lambda.table.pvalue <- 1 - pchisq(Tumc, 2 * k - 4) out$H <- Humc out$H.table.pvalue <- Htabpval out$J <- Jumc out$J.table.pvalue <- Jtabpval out$G <- Gumc out$G.table.pvalue <- Gtabpval } out } #================================================================================== prcomp1 <- function (x, retx = TRUE, center = TRUE, scale. = FALSE, tol = NULL, svd = TRUE) { x <- as.matrix(x) x <- scale(x, center = center, scale = scale.) if (svd == FALSE) { a <- eigen(cov(x)) r <- list(sdev = 0, rotation = 0, x = 0) r$sdev <- sqrt(abs(a$values)) r$rotation <- a$vectors r$x <- x %*% a$vectors } else { s <- svd(x, nu = 0) if (!is.null(tol)) { rank <- sum(s$d > (s$d[1] * tol)) if (rank < ncol(x)) s$v <- s$v[, 1:rank, drop = FALSE] } s$d <- s$d / sqrt(max(1, nrow(x) - 1)) dimnames(s$v) <- list(colnames(x), paste("PC", seq(len = ncol(s$v)), sep = "")) r <- list(sdev = s$d, rotation = s$v) if (retx) r$x <- x %*% s$v class(r) <- "prcomp1" } r } #================================================================================== defplotsize3 <- function(Y) { out <- list( xl = 0, yl = 0, zl = 0, xu = 0, yu = 0, zu = 0, width = 0 ) n <- dim(Y)[3] xm <- mean(Y[, 1,]) ym <- mean(Y[, 2,]) zm <- mean(Y[, 3,]) x <- Y x[, 1,] <- Y[, 1,] - xm x[, 2,] <- Y[, 2,] - ym x[, 3,] <- Y[, 3,] - zm mn1 <- min(x[, 1, ]) mn2 <- min(x[, 2, ]) mn3 <- min(x[, 3, ]) mx1 <- max(x[, 1, ]) mx2 <- max(x[, 2, ]) mx3 <- max(x[, 3, ]) xl <- -max(-mn1, mx1) yl <- -max(-mn2, mx2) zl <- -max(-mn3, mx3) width <- max(-2 * xl,-2 * yl,-2 * zl) out$xl <- -width / 2 * 1.2 + xm out$yl <- -width / 2 * 1.2 + ym out$zl <- -width / 2 * 1.2 + zm out$xu <- width / 2 * 1.2 + xm out$yu <- width / 2 * 1.2 + ym out$zu <- width / 2 * 1.2 + zm out$width <- width * 1.2 out } #================================================================================== procOPA <- function(A, B, scale = TRUE, reflect = FALSE) { out <- list( R = 0, s = 0, Ahat = 0, Bhat = 0, OSS = 0, rmsd = 0 ) if (is.complex(sum(A)) == TRUE) { k <- length(A) Areal <- matrix(0, k, 2) Areal[, 1] <- Re(A) Areal[, 2] <- Im(A) A <- Areal } if (is.complex(sum(B)) == TRUE) { k <- length(B) Breal <- matrix(0, k, 2) Breal[, 1] <- Re(B) Breal[, 2] <- Im(B) B <- Breal } k <- dim(A)[1] if (reflect == FALSE) { R <- fort.ROTATION(A, B) } else { R <- fort.ROTATEANDREFLECT(A, B) } s <- 1 if (scale == TRUE) { s <- fos(A, B) if (reflect == TRUE) { s <- fos.REFLECT(A, B) } } Ahat <- fcnt(A) Bhat <- fcnt(B) %*% R * s resid <- Ahat - Bhat OSS <- sum(diag(t(resid) %*% resid)) out$R <- R out$s <- s out$Ahat <- Ahat out$Bhat <- Bhat m <- dim(Ahat)[2] out$OSS <- OSS out$rmsd <- sqrt(OSS / (k)) out } #================================================================================== defplotsize2 <- function(Y, project = c(1, 2)) { out <- list( xl = 0, yl = 0, xu = 0, yu = 0, width = 0 ) n <- dim(Y)[3] xm <- mean(Y[, project[1],]) ym <- mean(Y[, project[2],]) x <- Y x[, project[1],] <- Y[, project[1],] - xm x[, project[2],] <- Y[, project[2],] - ym out <- list(xl = 0, yl = 0, width = 0) mn1 <- min(x[, project[1], ]) mn2 <- min(x[, project[2], ]) mx1 <- max(x[, project[1], ]) mx2 <- max(x[, project[2], ]) xl <- -max(-mn1, mx1) yl <- -max(-mn2, mx2) width <- max(-2 * xl,-2 * yl) out$xl <- -width / 2 * 1.2 + xm out$yl <- -width / 2 * 1.2 + ym out$xu <- width / 2 * 1.2 + xm out$yu <- width / 2 * 1.2 + ym out$width <- width * 1.2 out } #================================================================================== plotshapes <- function(A, B = 0, joinline = c(1, 1), orthproj = c(1, 2), color = 1, symbol = 1) { CHECKOK <- TRUE if (is.array(A) == FALSE) { if (is.matrix(A) == FALSE) { cat("Error !! argument should be an array or matrix \n") CHECKOK <- FALSE } } if (CHECKOK) { k <- dim(A)[1] m <- dim(A)[2] kk <- k if (k >= 15) { kk <- 1 } par(pty = "s") #if (length(c(B))==1){ #par(mfrow=c(1,1)) #} if (length(c(B)) != 1) { par(mfrow = c(1, 2)) } if (length(dim(A)) == 3) { A <- A[, orthproj, ] } if (is.matrix(A) == TRUE) { a <- array(0, c(k, 2, 1)) a[, , 1] <- A[, orthproj] A <- a } out <- defplotsize2(A) width <- out$width if (length(c(B)) != 1) { if (length(dim(B)) == 3) { B <- B[, orthproj, ] } if (is.matrix(B) == TRUE) { a <- array(0, c(k, 2, 1)) a[, , 1] <- B[, orthproj] B <- a } ans <- defplotsize2(B) width <- max(out$width, ans$width) } n <- dim(A)[3] lc <- length(color) lt <- k * m * n / lc color <- rep(color, times = lt) lc <- length(symbol) lt <- k * m * n / lc symbol <- rep(symbol, times = lt) plot( A[, , 1], xlim = c(out$xl, out$xl + width), ylim = c(out$yl, out$yl + width), type = "n", xlab = " ", ylab = " " ) for (i in 1:n) { select <- ((i - 1) * k * m + 1):(i * k * m) points(A[, , i], pch = symbol[select], col = color[select]) lines(A[joinline, , i]) } if (length(c(B)) != 1) { A <- B if (is.matrix(A) == TRUE) { a <- array(0, c(k, 2, 1)) a[, , 1] <- A A <- a } out <- defplotsize2(A) n <- dim(A)[3] plot( A[, , 1], xlim = c(ans$xl, ans$xl + width), ylim = c(ans$yl, ans$yl + width), type = "n", xlab = " ", ylab = " " ) for (i in 1:n) { points(A[, , i], pch = symbol[select], col = color[select]) lines(A[joinline, , i]) } } } } #================================================================================== BoxM <- function(A, B, npc) { #carries out Box's M test #(see Mardia, Kent, Bibby 1979, p140) #in: data arrays A, B #out: z$M M statistic # z$df degrees of freedom for approx distn of chi-squared statistic # z$pval p-value z <- list(M = 0, df = 0, pval = 0) n1 <- dim(A)[3] n2 <- dim(B)[3] k <- dim(A)[1] m <- dim(A)[2] if (m > 2) { print("Only works for 2D data at the moment!") } if (m == 2) { C <- array(0, c(k, m, n1 + n2)) C[, , 1:n1] <- A C[, , (n1 + 1):(n1 + n2)] <- B Cpr <- procrustes2d(C, 1, 2) p <- npc ng <- 2 n <- n1 + n2 S1 <- var(t(Cpr$tan[1:npc, 1:n1])) S2 <- var(t(Cpr$tan[1:npc, (n1 + 1):(n1 + n2)])) Su <- ((n1 - 1) * S1 + (n2 - 1) * S2) / (n1 + n2 - 2) S1inv <- eigen(S1)$vectors %*% diag(1 / eigen(S1)$values) %*% t(eigen(S1)$vectors) S2inv <- eigen(S2)$vectors %*% diag(1 / eigen(S2)$values) %*% t(eigen(S2)$vectors) logdet1 <- sum(log(eigen(S1inv %*% Su)$values)) logdet2 <- sum(log(eigen(S2inv %*% Su)$values)) gam <- 1 - ((2 * p ^ 2 + 3 * p - 1) / (6 * (p + 1) * (ng - 1))) * (1 / (n1 - 1) + 1 / (n2 - 1) - 1 / (n - ng)) M <- gam * ((n1 - 1) * logdet1 + (n2 - 1) * logdet2) df <- (p * (p + 1) * (ng - 1)) / 2 pval <- 1 - pchisq(M, df) z$M <- M z$df <- df z$pval <- pval } return(z) } #================================================================================== Goodall2D <- function(A, B) { #Calculates Goodall's two sample F test for 2d data only #in: data arrays A, B k x 2 x n data arrays #out: z$F F statistic # z$df1, z$df2 degrees of freedom # z$pval: p-value z <- list( F = 0, pval = 0, df1 = 0, df2 = 0 ) n1 <- dim(A)[3] n2 <- dim(B)[3] k <- dim(A)[1] m <- dim(A)[2] if (m != 2) { print("Data not two dimensional") return(z) } p <- 2 * k - 4 Apr <- procrustes2d(A, 1, 2) Bpr <- procrustes2d(B, 1, 2) top <- sin(riemdist(Apr$mshape, Bpr$mshape)) ^ 2 bot <- Apr$rmsd1 ^ 2 * n1 + Bpr$rmsd1 ^ 2 * n2 Fstat <- ((n1 + n2 - 2) / (1 / n1 + 1 / n2) * top) / bot pval <- 1 - pf(Fstat, p, (n1 + n2 - 2) * p) z$F <- Fstat z$pval <- pval z$df1 <- p z$df2 <- (n1 + n2 - 2) * p return(z) } #================================================================================== Goodalltest <- function(A, B, tol1 = 1e-07, tol2 = tol1) { #Calculates Goodall's two sample F test #in: data arrays A, B: #out: z$F F statistic # z$df1, z$df2 degrees of freedom # z$pval: p-value z <- list( F = 0, pval = 0, df1 = 0, df2 = 0 ) n1 <- dim(A)[3] n2 <- dim(B)[3] k <- dim(A)[1] m <- dim(A)[2] p <- min(k * m - (m * (m - 1)) / 2 - 1 - m, n1 + n2 - 2) Apr <- procrustesGPA(A, tol1, tol2) Bpr <- procrustesGPA(B, tol1, tol2) top <- sin(riemdist(Apr$mshape, Bpr$mshape)) ^ 2 bot <- Apr$rmsd1 ^ 2 * n1 + Bpr$rmsd1 ^ 2 * n2 Fstat <- ((n1 + n2 - 2) / (1 / n1 + 1 / n2) * top) / bot pval <- 1 - pf(Fstat, p, (n1 + n2 - 2) * p) z$F <- Fstat z$pval <- pval z$df1 <- p z$df2 <- (n1 + n2 - 2) * p return(z) } #================================================================================== Hotelling2D <- function (A, B) { z <- list( Tsq.partition = 0, Tsq = 0, F.partition = 0, F = 0, pval = 0, df1 = 0, df2 = 0, T.df1 = 0, T.df2 = 0 ) n1 <- dim(A)[3] n2 <- dim(B)[3] n <- n1 + n2 k <- dim(A)[1] m <- dim(B)[2] if (m != 2) { print("Data not two dimensional") return(z) } else { pool <- array(0, c(k, m, n)) pool[, , 1:n1] <- A pool[, , (n1 + 1):n] <- B poolpr <- procrustes2d(pool, 1, 2) S1 <- var(t(poolpr$tan[, 1:n1])) S2 <- var(t(poolpr$tan[, (n1 + 1):(n1 + n2)])) gamma <- realtocomplex(preshape(poolpr$mshape)) Sw <- ((n1 - 1) * S1 + (n2 - 1) * S2) / (n1 + n2 - 2) p <- 2 * k - 4 # pcar <- eigen(Sw,EISPACK=TRUE)$vectors[, 1:p] pcar <- eigen(Sw)$vectors[, 1:p] pcasd <- sqrt(abs(eigen(Sw)$values[1:p])) ####### add small offset if defecient in rank if (pcasd[p] < 0.000001) { offset <- 0.000001 cat("*") pcasd <- sqrt(pcasd ** 2 + offset ** 2) } ####################################### pcax <- t(poolpr$tan) %*% pcar h <- defh(k - 1) zero <- matrix(0, k - 1, k) H <- cbind(h, zero) H1 <- cbind(zero, h) H <- rbind(H, H1) meanxy <- t(H) %*% V(gamma) realrot <- t(H) %*% pcar one1 <- matrix(1 / n1, n1, 1) one2 <- matrix(1 / n2, n2, 1) oneone <- rbind(one1,-one2) vbar <- poolpr$tan %*% oneone scores1 <- matrix(vbar, 1, (2 * k - 2)) %*% pcar scores <- scores1 / pcasd F.partition <- ((scores[1:p] ^ 2) * (n1 * n2 * (n1 + n2 - p - 1))) / ((n1 + n2) * (n1 + n2 - 2) * p) FF <- sum(F.partition) pval <- 1 - pf(FF, p, (n1 + n2 - p - 1)) z$F.partition <- F.partition z$F <- FF z$pval <- pval z$df1 <- p z$T.df1 <- p z$df2 <- (n1 + n2 - p - 1) mm <- n - 2 z$T.df2 <- mm z$Tsq <- FF * (n1 + n2) * (n1 + n2 - 2) * p / (n1 * n2) / (n1 + n2 - p - 1) z$Tsq.partition <- F.partition * (n1 + n2) * (n1 + n2 - 2) * p / (n1 * n2) / (n1 + n2 - p - 1) return(z) } } #================================================================================== Hotellingtest <- function (A, B, tol1 = 1e-07, tol2 = 1e-07) { z <- list( Tsq.partition = 0, Tsq = 0, F.partition = 0, F = 0, pval = 0, df1 = 0, df2 = 0, T.df1 = 0, T.df2 = 0 ) n1 <- dim(A)[3] n2 <- dim(B)[3] n <- n1 + n2 k <- dim(A)[1] m <- dim(B)[2] pool <- array(0, c(k, m, n)) pool[, , 1:n1] <- A pool[, , (n1 + 1):n] <- B poolpr <- procrustesGPA(pool, tol1, tol2, approxtangent = FALSE) S1 <- var(t(poolpr$tan[, 1:n1])) S2 <- var(t(poolpr$tan[, (n1 + 1):(n1 + n2)])) Sw <- ((n1 - 1) * S1 + (n2 - 1) * S2) / (n1 + n2 - 2) p <- min(k * m - (m * (m - 1)) / 2 - 1 - m, n1 + n2 - 2) eva <- eigen(Sw, symmetric = TRUE) pcar <- eva$vectors[, 1:p] pcasd <- sqrt(abs(eva$values[1:p])) ####### add small offset if defecient in rank if (pcasd[p] < 0.000001) { offset <- 0.000001 cat("*") pcasd <- sqrt(pcasd ** 2 + offset) } ####################################### lam <- rep(0, times = (k * m - m)) lam[1:p] <- 1 / pcasd ** 2 Suinv <- eva$vectors %*% diag(lam) %*% t(eva$vectors) # check <- p # for (i in 1:p) { # if (pcasd[p + 1 - i] < 1e-04) { # check <- p + 1 - i - 1 # } # } # p <- check pcax <- t(poolpr$tan) %*% pcar one1 <- matrix(1 / n1, n1, 1) one2 <- matrix(1 / n2, n2, 1) oneone <- rbind(one1,-one2) vbar <- poolpr$tan %*% oneone scores1 <- matrix(vbar, 1, m * k - m) %*% pcar scores <- scores1 / pcasd # tem<-c(t(vbar)%*%Suinv%*%vbar) #(=Dsq)# F.partition <- ((scores[1:p] ^ 2) * (n1 * n2 * (n1 + n2 - p - 1))) / ((n1 + n2) * (n1 + n2 - 2) * p) FF <- sum(F.partition) pval <- 1 - pf(FF, p, (n1 + n2 - p - 1)) z$F.partition <- F.partition z$F <- FF z$pval <- pval z$df1 <- p z$T.df1 <- p z$df2 <- (n1 + n2 - p - 1) mm <- n - 2 z$T.df2 <- mm z$Tsq <- FF * (n1 + n2) * (n1 + n2 - 2) * p / (n1 * n2) / (n1 + n2 - p - 1) z$Tsq.partition <- F.partition * (n1 + n2) * (n1 + n2 - 2) * p / (n1 * n2) / (n1 + n2 - p - 1) return(z) } # Hotellingtest<-function(A, B, tol1=1e05,tol2=1e05) # OLD VERSION using $tan rather than $tanpartial #{ #Calculates two sample Hotelling Tsq test for testing whether #mean shapes are equal (m - Dimensions where m >= 2) #in: A, B the k x m x n arrays of data for each group #out: z$F : F-statistic # z$df1, z$df2 : dgrees of freedom # z$pval: pvalue # z <- list(Tsq.partition = 0, Tsq = 0, F.partition = 0, F = 0, pval = 0, # df1 = 0, df2 = 0, T.df1 = 0, T.df2 = 0) # n1 <- dim(A)[3] # n2 <- dim(B)[3] # n <- n1 + n2 # k <- dim(A)[1] # m <- dim(B)[2] # pool <- array(0, c(k, m, n)) # pool[, , 1:n1] <- A # pool[, , (n1 + 1):n] <- B # poolpr <- procrustesGPA(pool,tol1,tol2) # S1 <- var(t(poolpr$tan[, 1:n1])) # S2 <- var(t(poolpr$tan[, (n1 + 1):(n1 + n2)])) # Sw <- ((n1 - 1) * S1 + (n2 - 1) * S2)/(n1 + n2 - 2) # p <- min(k * m - (m * (m - 1))/2 - 1 - m, n1 + n2 - 2) # pcar <- eigen(Sw)$vectors[, 1:p] # pcasd <- sqrt(eigen(Sw)$values[1:p]) # check<-p ## checks to see if rank is reasonable # for (i in 1:p){ # if (pcasd[p+1-i] < 0.0001){ # check<-p+1-i-1 # } # } # p<-check # pcax <- t(poolpr$tan) %*% pcar # one1 <- matrix(1/n1, n1, 1) # one2 <- matrix(1/n2, n2, 1) # oneone <- rbind(one1, - one2) # vbar <- poolpr$tan %*% oneone # scores1 <- matrix(vbar, 1, m*k) %*% pcar # scores <- scores1/pcasd # F.partition <- ((scores[1:p]^2) * (n1 * n2 * (n1 + n2 - p - 1)))/((n1 + # n2) * (n1 + n2 - 2) * p) # FF <- sum(F.partition) # pval <- 1 - pf(FF, p, (n1 + n2 - p - 1)) # z$F.partition <- F.partition # z$F <- FF # z$pval <- pval # z$df1 <- p # z$T.df1 <- p # z$df2 <- (n1 + n2 - p - 1) # mm <- n - 2 # z$T.df2 <- mm # z$Tsq <- (FF * (mm * p))/(mm - p + 1) # z$Tsq.partition <- (F.partition * (mm * p))/(mm - p + 1) # return(z) #} #================================================================================== I2mat <- function(Be) { zero <- rep(0, times = dim(Be)[1] ^ 2) zero <- matrix(zero, dim(Be)[1], dim(Be)[2]) temp <- cbind(Be, zero) temp1 <- cbind(zero, Be) tem <- rbind(temp, temp1) tem } #================================================================================== tpsgrid.old <- function (TT, YY, xbegin = -999, ybegin = -999, xwidth = -999, opt = 2, ext = 0.1, ngrid = 22, cex = 1, pch = 20, col = 2) { k <- nrow(TT) if (xwidth == -999) { bb <- array(TT, c(dim(TT), 1)) aa <- defplotsize2(bb) xwidth <- aa$width } if (xbegin == -999) { bb <- array(TT, c(dim(TT), 1)) aa <- defplotsize2(bb) xbegin <- aa$xl } if (ybegin == -999) { bb <- array(TT, c(dim(TT), 1)) aa <- defplotsize2(bb) ybegin <- aa$yl } xstart <- xbegin ystart <- ybegin ngrid <- trunc(ngrid / 2) * 2 kx <- ngrid ky <- ngrid - 1 l <- kx * ky step <- xwidth / (kx - 1) r <- 0 X <- rep(0, times = kx) Y2 <- rep(0, times = ky) for (p in 1:kx) { ystart <- ybegin xstart <- xstart + step for (q in 1:ky) { ystart <- ystart + step r <- r + 1 X[r] <- xstart Y2[r] <- ystart } } refc <- matrix(c(X, Y2), kx * ky, 2) TPS <- bendingenergy(TT) gamma11 <- TPS$gamma11 gamma21 <- TPS$gamma21 gamma31 <- TPS$gamma31 W <- gamma11 %*% YY ta <- t(gamma21 %*% YY) B <- gamma31 %*% YY WtY <- t(W) %*% YY trace <- c(0) for (i in 1:2) { trace <- trace + WtY[i, i] } benergy <- 16 * pi * trace if (m == 3) { benergy <- 8 * pi * trace } l <- kx * ky phi <- matrix(0, l, 2) s <- matrix(0, k, 1) for (i in 1:l) { s <- matrix(0, k, 1) for (m in 1:k) { s[m,] <- sigmacov(refc[i,] - TT[m,]) } phi[i,] <- ta + t(B) %*% refc[i,] + t(W) %*% s } par(pty = "s") if (opt == 2) { par(mfrow = c(1, 2)) order <- linegrid(refc, kx, ky) plot( order[1:l, 1], order[1:l, 2], type = "l", xlim = c(xbegin - xwidth * ext, xbegin + xwidth * (1 + ext)), ylim = c( ybegin - (xwidth * ky) / kx * ext, ybegin + (xwidth * ky) / kx * (1 + ext) ), xlab = " ", ylab = " " ) lines(order[(l + 1):(2 * l), 1], order[(l + 1):(2 * l), 2], type = "l") points(TT, cex = cex, pch = pch, col = col) } order <- linegrid(phi, kx, ky) plot( order[1:l, 1], order[1:l, 2], type = "l", xlim = c(xbegin - xwidth * ext, xbegin + xwidth * (1 + ext)), ylim = c(ybegin - (xwidth * ext * ky) / kx, ybegin + (xwidth * (1 + ext) * ky) / kx), xlab = " ", ylab = " " ) lines(order[(l + 1):(2 * l), 1], order[(l + 1):(2 * l), 2], type = "l") points(YY, cex = cex, pch = pch, col = col) } # # #================================================================================== V <- function(z) { #input complex k -vector #ouput vectorized 2k vector of real stacked on imaginary components x <- c(Re(z), Im(z)) x } #================================================================================== Vinv <- function(x) { #input vectorized 2k vector of x1 stacked on x2 components #input complex k -vector of the form x1 + 1i*x2 nel <- length(x) / 2 zx <- x[1:nel] zy <- x[(nel + 1):(2 * nel)] z <- zx + (1i) * zy z } #================================================================================== Vmat <- function(z) { #as Vinv but input is a k x n complex matrix # output 2k x n matrix of stacked real then complex components x <- rbind(Re(z), Im(z)) x } #================================================================================== bendingenergy <- function (TT) { z <- list( gamma11 = 0, gamma21 = 0, gamma31 = 0, prinwarps = 0, prinwarpeval = 0, Un = 0 ) k <- nrow(TT) m <- dim(TT)[2] S <- matrix(0, k, k) for (i in 1:k) { for (j in 1:k) { S[i, j] <- sigmacov(TT[i,] - TT[j,]) } } one <- matrix(1, k, 1) zero <- matrix(0, m + 1, m + 1) # P <- cbind(S, one, TT) P <- rbind(S, t(one)) Q <- rbind(P, t(TT)) O <- cbind(one, TT) U <- rbind(O, zero) star <- cbind(Q, U) star <- matrix(star, k + m + 1, k + m + 1) A <- eigen(star, symmetric = TRUE) deltainv <- diag(1 / A$values) gamma <- A$vectors starinv <- gamma %*% deltainv %*% t(gamma) gamma11 <- matrix(0, k, k) for (i in 1:k) { for (j in 1:k) { gamma11[i, j] <- starinv[i, j] } } gamma21 <- matrix(0, 1, k) for (i in 1:1) { for (j in 1:k) { gamma21[i, j] <- starinv[k + 1, j] } } gamma31 <- matrix(0, m, k) for (i in 1:(m)) { for (j in 1:k) { gamma31[i, j] <- starinv[i + k + 1, j] } } prinwarp <- eigen(gamma11, symmetric = TRUE) prinwarps <- prinwarp$vectors prinwarpeval <- prinwarp$values ####need to rotate to compute affine components Rot <- prcomp(TT)$rotation TT <- TT %*% Rot if (m == 2) { meanxy <- c(TT[, 1], TT[, 2]) alpha <- sum(meanxy[1:k] ^ 2) beta <- sum(meanxy[(k + 1):(2 * k)] ^ 2) u1 <- c(alpha * meanxy[(k + 1):(2 * k)], beta * meanxy[1:k]) u2 <- c(-beta * meanxy[1:k], alpha * meanxy[(k + 1):(2 * k)]) u1 <- u1 / sqrt(alpha * beta) / sqrt(alpha + beta) u2 <- u2 / sqrt(alpha * beta) / sqrt(alpha + beta) Un <- matrix(0, 2 * k, 2) Un[, 1] <- u1 Un[, 2] <- u2 Vn <- Un Vn[, 1] <- cbind(Un[1:k, 1], Un[(k + 1):(2 * k), 1]) %*% t(Rot) Vn[, 2] <- cbind(Un[1:k, 2], Un[(k + 1):(2 * k), 2]) %*% t(Rot) Un <- Vn } if (m == 3) { meanxy <- c(TT[, 1], TT[, 2], TT[, 3]) alpha <- sum(meanxy[1:k] ^ 2) beta <- sum(meanxy[(k + 1):(2 * k)] ^ 2) gamma <- sum(meanxy[(2 * k + 1):(3 * k)] ^ 2) mu <- meanxy[1:k] nu <- meanxy[(k + 1):(2 * k)] omega <- meanxy[(2 * k + 1):(3 * k)] ze <- rep(0, times = k) u1 <- c(ze , alpha * beta * omega , alpha * gamma * nu) / sqrt(alpha ^ 2 * beta ^ 2 * gamma + alpha ^ 2 * gamma ^ 2 * beta) u2 <- c(alpha * beta * omega , ze, beta * gamma * mu) / sqrt(beta ^ 2 * alpha ^ 2 * gamma + beta ^ 2 * gamma ^ 2 * alpha) u3 <- c(alpha * gamma * nu , beta * gamma * mu, ze) / sqrt(alpha ^ 2 * gamma ^ 2 * beta + beta ^ 2 * gamma ^ 2 * alpha) u4 <- c(ze , ze , omega) / sqrt(gamma) u5 <- c(-beta * gamma * mu , alpha * gamma * nu, ze) / sqrt(alpha * gamma ^ 2 * beta ^ 2 + beta * gamma ^ 2 * alpha ^ 2) tem <- c(-gamma * beta * mu , ze, beta * alpha * omega) / sqrt(beta ^ 2 * alpha * gamma ^ 2 + beta ^ 2 * gamma * alpha ^ 2) tem2 <- tem - u5 * sum(u5 * tem) u4 <- tem2 / Enorm(tem2) Un <- matrix(0, 3 * k, 5) Un[, 1] <- u1 Un[, 2] <- u2 Un[, 3] <- u3 Un[, 4] <- u4 Un[, 5] <- u5 Vn <- Un Vn[, 1] <- cbind(Un[1:k, 1], Un[(k + 1):(2 * k), 1], Un[(2 * k + 1):(3 * k), 1]) %*% t(Rot) Vn[, 2] <- cbind(Un[1:k, 2], Un[(k + 1):(2 * k), 2], Un[(2 * k + 1):(3 * k), 2]) %*% t(Rot) Vn[, 3] <- cbind(Un[1:k, 3], Un[(k + 1):(2 * k), 3], Un[(2 * k + 1):(3 * k), 3]) %*% t(Rot) Vn[, 4] <- cbind(Un[1:k, 4], Un[(k + 1):(2 * k), 4], Un[(2 * k + 1):(3 * k), 4]) %*% t(Rot) Vn[, 5] <- cbind(Un[1:k, 5], Un[(k + 1):(2 * k), 5], Un[(2 * k + 1):(3 * k), 5]) %*% t(Rot) Un <- Vn } z$gamma11 <- gamma11 z$gamma21 <- gamma21 z$gamma31 <- gamma31 z$prinwarps <- prinwarps z$prinwarpeval <- prinwarpeval z$Un <- Un return(z) } #================================================================================== shaperw <- function(proc , alpha = 1, affine = FALSE) { rw <- proc if ((alpha != 0) || (affine == TRUE)) { k <- dim(proc$mshape)[1] m <- dim(proc$mshape)[2] n <- dim(proc$mshape)[3] if (dim(proc$tan)[1] == (k * m - m)) { if (m == 2) { He <- t(defh(k - 1)) Ze <- He * 0 HH <- rbind(cbind(He, Ze) , cbind(Ze, He)) proc$tan <- HH %*% proc$tan } if (m == 3) { He <- t(defh(k - 1)) Ze <- He * 0 HH <- rbind(cbind(He, Ze, Ze) , cbind(Ze, He , Ze) , cbind(Ze, Ze, He)) proc$tan <- HH %*% proc$tan } } nconstr <- m + m * (m - 1) / 2 + 1 M <- k * m - nconstr if (m == 2) { bb <- bendingenergy(proc$mshape) Gamma11 <- bb$gamma11 Be <- rbind(cbind(Gamma11, Gamma11 * 0) , cbind(Gamma11 * 0, Gamma11)) Un <- bb$Un Bedim <- 2 } if (m == 3) { bb <- bendingenergy(proc$mshape) Gamma11 <- bb$gamma11 Ze <- Gamma11 * 0 Be <- rbind(cbind(Gamma11, Ze, Ze) , cbind(Ze, Gamma11, Ze) , cbind(Ze, Ze, Gamma11)) Un <- bb$Un Bedim <- 5 } ev <- eigen(Be, symmetric = TRUE) evpw <- eigen(Gamma11, symmetric = TRUE) Beminusalpha <- ev$vectors %*% diag(c(ev$values[1:(M - Bedim)] ** (-alpha / 2), rep(0, times = nconstr + Bedim))) %*% t(ev$vectors) Bealpha <- ev$vectors %*% diag(c(ev$values[1:(M - Bedim)] ** (alpha / 2), rep(0, times = nconstr + Bedim))) %*% t(ev$vectors) evbe <- ev SS <- Beminusalpha %*% var(t(proc$tan)) %*% Beminusalpha ev <- eigen(SS) relw.vec <- ev$vectors relw.sd <- sqrt(abs(ev$values)) # ratio of eigenvalues of warps (quoted in book) rw$percent <- relw.sd ** 2 / sum(relw.sd ** 2) * 100 sgnchange <- sample(c(-1, 1), size = m * k , replace = TRUE) rw$pcar <- Bealpha %*% relw.vec %*% diag(sgnchange) rw$pcasd <- relw.sd rw$rawscores <- t(t(relw.vec) %*% Beminusalpha %*% proc$tan) sd <- sqrt(abs(diag(var((rw$rawscores) )))) rw$scores <- (rw$rawscores) %*% diag(1 / sd) rw$stdscores <- rw$scores rw$scores <- rw$rawscores ## partial warp scores n <- proc$n evbend <- eigen(Gamma11, symmetric = TRUE) partialwarpscores <- array(0 , c(n , m , k)) for (i in 1:m) { partialwarpscores[, i, ] <- t(t(evbend$vectors) %*% proc$rotated[, i, ]) } rw$principalwarps <- evpw$vectors[, (k - m - 1):1] rw$principalwarps.eigenvalues <- evpw$values[(k - m - 1):1] rw$partialwarpscores <- partialwarpscores[, , (k - m - 1):1] sumvar <- rep(0, times = (k - m - 1)) for (i in 1:(k - m - 1)) { sumvar[i] <- sum(diag(var(partialwarpscores[, , k - m - i]))) } rw$partialwarps.percent <- sumvar / sum(proc$pcasd ** 2) * 100 } if (affine == TRUE) { dimun <- dim(Un)[2] rw$pcar <- Un %*% diag(sgnchange[1:(dimun)]) pcno <- c(1:dimun) rw$rawscores <- t(Un) %*% proc$tan sd <- sqrt(abs(diag(var( t(rw$rawscores) )))) rw$pcasd <- sd rw$percent <- sd ** 2 / sum(proc$pcasd ** 2) * 100 rw$scores <- t(rw$rawscores) %*% diag(1 / sd) rw$rawscores <- t(rw$rawscores) ####### tem <- prcomp1((rw$rawscores)) npc <- 0 rw$stdscores <- tem$x for (i in 1:length(tem$sdev)) { if (tem$sdev[i] > 1e-07) { npc <- npc + 1 } } for (i in 1:npc) { rw$stdscores[, i] <- tem$x[, i] / tem$sdev[i] } rw$pcasd <- tem$sdev rw$percent <- tem$sdev ** 2 / sum(proc$pcasd ** 2) * 100 rw$pcar <- Un %*% tem$rotation rw$rawscores <- tem$x rw$scores <- rw$rawscores } rw } #================================================================================== bookstein2d <- function(A, l1 = 1, l2 = 2) { #input: A: k x 2 x n array of 2D data, or k x n complex matrix #l1,l2: baseline choice for sending to (-0.5,0),(0.5,0) #output: z$bshpv - Bookstein shape variables array (including baseline) # z$mshape - Bookstein mean shape (including baseline points) z <- list( k = 0, n = 0, mshape = 0, bshpv = 0 ) if (is.complex(sum(A)) == TRUE) { n <- dim(A)[2] k <- dim(A)[1] B <- array(0, c(k, 2, n)) B[, 1, ] <- Re(A) B[, 2, ] <- Im(A) A <- B } if (is.matrix(A) == TRUE) { bb <- array(A, c(dim(A), 1)) A <- bb } k <- dim(A)[1] m <- 2 n <- dim(A)[3] reorder <- c(l1, l2, c(1:k)[-c(l1, l2)]) A[, , ] <- A[reorder, , 1:n] bshpv <- array(0, c(k, m, n)) for (i in 1:n) { bshpv[, , i] <- bookstein.shpv(A[, , i]) } bookmean <- matrix(0, k, m) for (i in 1:n) { bookmean <- bookmean + bshpv[, , i] } bookmean <- bookmean / n bookmean[reorder, ] <- bookmean bshpv[reorder, ,] <- bshpv glim <- max(-min(bshpv), max(bshpv)) #par(pty="s") #par(mfrow=c(1,1)) #plot(bshpv[,,1],xlim=c(-glim,glim),ylim=c(-glim,glim),type="n",xlab="u",ylab="v") #for (i in 1:n) #{ #for (j in 1:k){ #text(bshpv[j,1,i],bshpv[j,2,i],as.character(j)) #} #} z$mshape <- bookmean z$bshpv <- bshpv z$k <- k z$n <- n return(z) } #================================================================================== bookstein.shpv <- function(x) { #input x: k x 2 matrix or complex k-vector #output u: k x 2 matrix of Bookstein shape variables # with baseline sent to (-0.5,0) (0.5,0) if (is.complex(x)) { x <- complextoreal(x) } nj <- dim(x)[1] j <- rep(1, times = nj) w <- (x[, 1] + (1i) * x[, 2] - (j * (x[1, 1] + (1i) * x[1, 2]))) / (x[2, 1] + (1i) * x[2, 2] - x[1, 1] - (1i) * x[1, 2]) - 0.5 w <- w[1:nj] y <- (Re(w)) z <- (Im(w)) u <- cbind(y, z) u <- matrix(u, nj, 2) u } #================================================================================== bookstein.shpv.complex <- function(z) { #input z: complex k vector #output u: k-2 complex vector of Bookstein shape variables # with baseline sent to (-0.5) (0.5) nj <- length(z) x <- matrix(cbind(Re(z), Im(z)), nj, 2) j <- rep(1, times = nj) w <- (x[, 1] + (1i) * x[, 2] - (j * (x[1, 1] + (1i) * x[1, 2]))) / (x[2, 1] + (1i) * x[2, 2] - x[1, 1] - (1i) * x[1, 2]) - 0.5 u <- w[3:nj] u } #================================================================================== cbevec <- function(z) { t1 <- reassqpr(z) # t2 <- eigen(t1,symmetric=TRUE,EISPACK=TRUE) t2 <- eigen(t1, symmetric = TRUE) reagamma <- t2$vectors[, 1] # print(t2$values/sum(t2$values)) gamma <- Vinv(reagamma) gamma } #================================================================================== cbevectors <- function(z, j) { t1 <- reassqpr(z) # t2 <- eigen(t1,symmetric=TRUE,EISPACK=TRUE) t2 <- eigen(t1, symmetric = TRUE) reagamma <- t2$vectors[, j] gamma <- Vinv(reagamma) gamma } #================================================================================== ild_centroid.size <- function(x) { #returns the centroid size of a configuration (or configurations) #input: k x m matrix/or a complex k-vector # or input a real k x m x n array to get a vector of sizes for a sample if ((is.vector(x) == FALSE) && is.complex(x)) { k <- nrow(x) n <- ncol(x) tem <- array(0, c(k, 2, n)) tem[, 1, ] <- Re(x) tem[, 2, ] <- Im(x) x <- tem } { if (length(dim(x)) == 3) { n <- dim(x)[3] sz <- rep(0, times = n) k <- dim(x)[1] h <- defh(k - 1) for (i in 1:n) { xh <- h %*% x[, , i] sz[i] <- sqrt(sum(diag(t(xh) %*% xh))) } sz } else { if (is.vector(x) && is.complex(x)) { x <- cbind(Re(x), Im(x)) } k <- nrow(x) h <- defh(k - 1) xh <- h %*% x size <- sqrt(sum(diag(t(xh) %*% xh))) size } } } #================================================================================== ild_centroid.size.complex <- function(zstar) { #returns the centroid size of a complex vector zstar h <- defh(nrow(as.matrix(zstar)) - 1) ztem <- h %*% zstar size <- sqrt(diag(Re(st(ztem) %*% ztem))) size } #================================================================================== ild_centroid.size.mD <- function(x) { #returns the centroid size of a k x m matrix if (is.complex(x)) { x <- cbind(Re(x), Im(x)) } k <- nrow(x) h <- defh(k - 1) xh <- h %*% x size <- sqrt(sum(diag(t(xh) %*% xh))) size } #================================================================================== complextoreal <- function(z) { #input complex k-vector - return k x 2 matrix nj <- length(z) x <- matrix(cbind(Re(z), Im(z)), nj, 2) x } #================================================================================== ild_defh <- function(nrow) { #Defines and returns an nrow x (nrow+1) Helmert sub-matrix k <- nrow h <- matrix(0, k, k + 1) j <- 1 while (j <= k) { jj <- 1 while (jj <= j) { h[j, jj] <- -1 / sqrt(j * (j + 1)) jj <- jj + 1 } h[j, j + 1] <- j / sqrt(j * (j + 1)) j <- j + 1 } h } #================================================================================== full.procdist <- function(x, y) { #input k x 2 matrices x, y #output full Procrustes distance rho between x,y sin(riemdist(x, y)) } #================================================================================== genpower <- function(Be, alpha) { k <- dim(Be)[1] if (alpha == 0) { gen <- diag(rep(1, times = k)) } else { l <- k - 3 # eb <- eigen(Be, symmetric = TRUE,EISPACK=TRUE) eb <- eigen(Be, symmetric = TRUE) ev <- c(eb$values[1:l] ^ (-alpha / 2), 0, 0, 0) gen <- eb$vectors %*% diag(ev) %*% t(eb$vectors) gen } } #================================================================================== isotropy.test <- function(sd, p, n) { #LR test for isotropy with Bartlett adjustment #in: sd - square roots of eigenvalues of covariance matrix # p - the number of larger eigenvalues to consider # n - sample size #out: z$bartlett - test statistic (e.g. see Mardia, Kent, Bibby, 1979, p235) # z$pval - p-value z <- list(bartlett = 0, pval = 0) tem <- sd ^ 2 bartlett <- (log(mean(tem[1:p])) - mean(log(tem[1:p]))) * p * (n - (2 * p + 11) / 6) pval <- 1 - pchisq(bartlett, ((p + 2) * (p - 1)) / 2) z$bartlett <- bartlett z$pval <- pval return(z) } #================================================================================== linegrid <- function(ref, kx, ky) { n <- ky m <- kx w <- n * m newgrid1 <- matrix(0, w, 2) v <- m * 0.5 k <- 0 for (l in 1:v) { k <- k + 1 a <- (n + m - 1) * (k - 1) + 1 b <- n * ((2 * k) - 1) d <- 2 * n * k for (j in a:b) { newgrid1[j,] <- ref[j,] } for (u in 1:n) { down <- d - u + 1 up <- b + u newgrid1[up,] <- ref[down,] } } newgrid2 <- matrix(0, w, 2) for (i in 1:v) { z <- (2 * i) - 1 for (x in 1:m) { r1 <- m * (z - 1) + x e <- n * (x - 1) + z newgrid2[r1,] <- ref[e,] } } y <- v - 1 for (p in 1:y) { f <- 2 * p for (q in 1:m) { r2 <- m * (f - 1) + q s <- n * (m - 1) + f - n * (q - 1) newgrid2[r2,] <- ref[s,] } } order <- rbind(newgrid1, newgrid2) order } #================================================================================== mahpreshapedist <- function(z, m, pcar, pcasdev) { if (is.double(z) == TRUE) z <- realtocomplex(z) if (is.double(m) == TRUE) m <- realtocomplex(m) w <- preshape(z) y <- preshape(m) zp <- project(w, y) k <- length(pcasdev) / 2 if (pcasdev[2 * k - 1] < 1e-07) pcasdev[2 * k - 1] <- 1e+22 if (pcasdev[2 * k] < 1e-07) pcasdev[2 * k] <- 1e+22 Sinv <- (pcar) %*% diag(1 / pcasdev ^ 2) %*% t(pcar) Z <- V(zp) d2 <- t(Z) %*% Sinv %*% (Z) dist <- sqrt(d2) dist } makearray <- function(x, k, m, n) { #makes a k x m x n array from a dataset read in as a table tem <- c(t(x)) tem <- array(tem, c(m, k, n)) tem <- aperm(tem, c(2, 1, 3)) tem } #================================================================================== movie <- function(mean, pc, sd, xl, xu, yl, yu, lineorder, movielength = 20) { k <- length(mean) / 2 for (i in 1:movielength) { plotPDMnoaxis(mean, pc * (-1) ^ i, sd, xl, xu, yl, yu, lineorder) } plot( mean[c(1:k)], mean[c((k + 1):(2 * k))], xlim = c(xl, xu), ylim = c(yl, yu), xlab = " ", ylab = " ", axes = FALSE ) } #================================================================================== ild_Enorm <- function(X) { #finds Euclidean/Frobenius norm of a matrix X if (is.complex(X)) { n <- sqrt(sum(diag(Re(st(X) %*% X)))) } else { n <- sqrt(sum(diag(t(X) %*% X))) } n } #================================================================================== partial.procdist <- function(x, y) { #input k x 2 matrices x, y #output partial Procrustes distance rho between x,y sqrt(2) * sqrt(1 - cos(riemdist(x, y))) } #================================================================================== partialwarpgrids <- function(TT, YY, xbegin, ybegin, xwidth, nr, nc, mag) { # #affine grid and partial warp grids for the TPS deformation of TT to YY #displayed as an nr x nc array of plots #mag = magnification effect k <- nrow(TT) YY <- TT + (YY - TT) * mag xstart <- xbegin ystart <- ybegin kx <- 22 ky <- 21 l <- kx * ky step <- xwidth / (kx - 1) r <- 0 X <- rep(0, times = 220) Y2 <- rep(0, times = 220) for (p in 1:kx) { ystart <- ybegin xstart <- xstart + step for (q in 1:ky) { ystart <- ystart + step r <- r + 1 X[r] <- xstart Y2[r] <- ystart } } refc <- matrix(c(X, Y2), kx * ky, 2) TPS <- bendingenergy(TT) gamma11 <- TPS$gamma11 gamma21 <- TPS$gamma21 gamma31 <- TPS$gamma31 W <- gamma11 %*% YY ta <- t(gamma21 %*% YY) B <- gamma31 %*% YY WtY <- t(W) %*% YY R <- matrix(0, k, 2) par(mfrow = c(nr, nc)) par(pty = "s") #AFFINEPART phi <- matrix(0, l, 2) s <- matrix(0, k, 1) for (i in 1:l) { s <- matrix(0, k, 1) for (m in 1:k) { s[m,] <- sigmacov(refc[i,] - TT[m,]) } phi[i,] <- ta + t(B) %*% refc[i,] } newpt <- matrix(0, k, 2) for (i in 1:k) { s <- matrix(0, k, 1) for (m in 1:k) { s[m,] <- sigmacov(TT[i,] - TT[m,]) } newpt[i,] <- ta + t(B) %*% TT[i,] } order <- linegrid(phi, kx, ky) plot( order[1:l, 1], order[1:l, 2], type = "l", xlim = c(xbegin - xwidth / 10, xbegin + (xwidth * 11) / 10), ylim = c(ybegin - (xwidth / 10 * ky) / kx, ybegin + ((xwidth * 11) / 10 * ky) / kx), xlab = " ", ylab = " " ) lines(order[(l + 1):(2 * l), 1], order[(l + 1):(2 * l), 2], type = "l") points(newpt, cex = 2) for (jnw in 1:(k - 3)) { nw <- k - 2 - jnw phi <- matrix(0, l, 2) s <- matrix(0, k, 1) for (i in 1:l) { s <- matrix(0, k, 1) for (m in 1:k) { s[m,] <- sigmacov(refc[i,] - TT[m,]) } phi[i,] <- refc[i,] + TPS$prinwarpeval[nw] * t(YY) %*% TPS$prinwarps[, nw] %*% t(TPS$prinwarps[, nw]) %*% s } newpt <- matrix(0, k, 2) for (i in 1:k) { s <- matrix(0, k, 1) for (m in 1:k) { s[m,] <- sigmacov(TT[i,] - TT[m,]) } newpt[i,] <- TT[i,] + TPS$prinwarpeval[nw] * t(YY) %*% TPS$prinwarps[, nw] %*% t(TPS$prinwarps[, nw]) %*% s } R <- newpt - TT + R order <- linegrid(phi, kx, ky) plot( order[1:l, 1], order[1:l, 2], type = "l", xlim = c(xbegin - xwidth / 10, xbegin + (xwidth * 11) / 10), ylim = c(ybegin - (xwidth / 10 * ky) / kx, ybegin + ((xwidth * 11) / 10 * ky) / kx), xlab = " ", ylab = " " ) lines(order[(l + 1):(2 * l), 1], order[(l + 1):(2 * l), 2], type = "l") points(newpt, cex = 2) } #percentage (need to normalize) d2 <- sin(riemdist(YY, TT)) ^ 2 d3 <- sin(riemdist(R + TT, TT)) ^ 2 percentaff <- (d2 - d3) / d2 * 100 print("percent affine") print(percentaff) } #================================================================================== partialwarps <- function(mshape, rotated) { #obtain the affine and partial warp scores for a dataset #where the reference configuration is mshape and the full procrustes #rotated figures are given in the array rotated #output: y$pwpwercent percentage of variability (squared Procrustes distance) # in the direction of each of the affine and principal warps # y$pwscores: the affine and partial warps scores # y <- list(pwpercent = 0, pwscores = 0, unpercent = 0) k <- nrow(mshape) n <- dim(rotated)[3] msh <- mshape rot <- rotated TPS <- bendingenergy(msh) FX <- rot[, 1,] FY <- rot[, 2,] U <- TPS$prinwarps[, 1:(k - 3)] partialX <- t(U) %*% FX partialY <- t(U) %*% FY Un <- TPS$Un UnXY <- t(Un) %*% rbind(FX, FY) scores <- matrix(0, 2 * (k - 3), n) for (i in 1:(k - 3)) { r <- 2 * i - 1 scores[r,] <- partialX[k - 2 - i,] scores[r + 1,] <- partialY[k - 2 - i,] } scores <- rbind(UnXY, scores) percwarp <- rep(0, times = (k - 2)) sumev <- sum(eigen(var(t(scores)))$values) for (i in 1:(k - 2)) { sum1 <- sum(eigen(var(t(scores[(2 * i - 1):(2 * i),])))$values) percwarp[i] <- sum1 / sumev } unpercent <- c(0, 0) unpercent[1] <- var(scores[1,]) / sumev unpercent[2] <- var(scores[2,]) / sumev y$unpercent <- unpercent y$pwpercent <- percwarp y$pwscores <- t(scores) return(y) } #================================================================================== plot2rwscores <- function(rwscores, rw1, rw2, ng1, ng2) { par(pch = "x") glim <- max(-min(rwscores), max(rwscores)) plot( rwscores[1:ng1, rw1], rwscores[1:ng1, rw2], xlim = c(-glim, glim), ylim = c(-glim, glim), xlab = " ", ylab = " " ) par(pch = "+") points(rwscores[(ng1 + 1):(ng1 + ng2), rw1], rwscores[(ng1 + 1):(ng1 + ng2), rw2]) } #================================================================================== plotPDM <- function(mean, pc, sd, xl, xu, yl, yu, lineorder) { for (i in c(-3, 0, 3)) { fig <- mean + i * pc * sd k <- length(mean) / 2 figx <- fig[1:k] figy <- fig[(k + 1):(2 * k)] plot( figx, figy, axes = TRUE, xlab = " ", ylab = " ", ylim = c(yl, yu), xlim = c(xl, xu) ) # par(lty = i + 1) lines(figx[lineorder], figy[lineorder]) if (i == -3) title(sub = "mean - c sd") if (i == 0) title(sub = "mean") if (i == 3) title(sub = "mean + c sd") par(lty = 1) } } #================================================================================== plotPDM2 <- function(mean, pc, sd, xl, xu, yl, yu, lineorder) { par(lty = 1) k <- length(mean) / 2 plot( mean[1:k], mean[(k + 1):(2 * k)], axes = TRUE, xlab = " ", ylab = " ", ylim = c(yl, yu), xlim = c(xl, xu) ) for (i in c(-3:3)) { fig <- mean + i * pc * sd figx <- fig[1:k] figy <- fig[(k + 1):(2 * k)] # if (i < 0) { par(lty = 1) par(pch = "*") } if (i == 0) { par(lty = 4) par(pch = 1) } if (i > 0) { par(lty = 2) par(pch = "+") } points(figx, figy) lines(figx[lineorder], figy[lineorder]) } } #================================================================================== plotPDM3 <- function(mean, pc, sd, xl, xu, yl, yu, lineorder) { par(lty = 1) k <- length(mean) / 2 figx <- matrix(0, 2 * k, 7) figy <- figx plot( mean[1:k], mean[(k + 1):(2 * k)], axes = TRUE, xlab = " ", ylab = " ", ylim = c(yl, yu), xlim = c(xl, xu) ) for (i in c(-3:3)) { fig <- mean + i * pc * sd figx[, i + 4] <- fig[1:k] figy[, i + 4] <- fig[(k + 1):(2 * k)] } for (i in 1:k) { # par(lty = 2) # lines(figx[i, 1:4], figy[i, 1:4]) par(lty = 1) lines(figx[i, 4:7], figy[i, 4:7]) } } #================================================================================== plotPDMbook <- function(mean, pc, sd, xl, xu, yl, yu, lineorder) { par(lty = 1) k <- length(mean) / 2 figx <- matrix(0, 2 * k, 7) figy <- figx plot( bookstein.shpv(cbind(mean[1:k], mean[(k + 1):(2 * k)])), axes = TRUE, xlab = " ", ylab = " ", ylim = c(yl, yu), xlim = c(xl, xu) ) for (i in c(-3:3)) { fig <- mean + i * pc * sd figx[, i + 4] <- fig[1:k] figy[, i + 4] <- fig[(k + 1):(2 * k)] u <- bookstein.shpv(cbind(figx[, i + 4], figy[, i + 4])) figx[, i + 4] <- u[, 1] figy[, i + 4] <- u[, 2] } for (i in 1:k) { # par(lty = 2) # lines(figx[i, 1:4], figy[i, 1:4]) par(lty = 1) lines(figx[i, 4:7], figy[i, 4:7]) } } #================================================================================== plotPDMnoaxis <- function(mean, pc, sd, xl, xu, yl, yu, lineorder) { for (i in c(-3:3)) { fig <- mean + i * pc * sd k <- length(mean) / 2 figx <- fig[1:k] figy <- fig[(k + 1):(2 * k)] plot( figx, figy, axes = FALSE, xlab = " ", ylab = " ", ylim = c(yl, yu), xlim = c(xl, xu) ) lines(figx[lineorder], figy[lineorder]) for (ii in 1:1000) { aa <- 1 } } } #================================================================================== pointsPDMnoaxis3 <- function(mean, pc, sd, xl, xu, yl, yu, lineorder, i) { fig <- mean + i * pc * sd k <- length(mean) / 2 figx <- fig[1:k] figy <- fig[(k + 1):(2 * k)] points(figx, figy) text(figx, figy, 1:k) lines(figx[lineorder], figy[lineorder]) } #================================================================================== plotpairscores <- function(scores, nr, nc, ng1, ng2, ch1, ch2) { #plots pairs of scores score 2 vs score 1, score 4 vs score 3 etc #in an nr x nc grid of plots par(pty = "s") par(cex = 2) par(mfrow = c(nr, nc)) k <- ncol(scores) / 2 + 2 glim <- max(-min(scores), max(scores)) for (i in 1:(k - 2)) { plot( scores[1:ng1, (2 * i - 1)], scores[1:ng1, (2 * i)], pch = ch1, xlim = c(-glim, glim), ylim = c(-glim, glim), xlab = " ", ylab = " " ) points(scores[(ng1 + 1):(ng1 + ng2), (2 * i - 1)], scores[(ng1 + 1):(ng1 + ng2), (2 * i)], pch = ch2) } } ################################# #================================================================================== plotpca <- function (proc, pcno, type, mag, xl, yl, width, joinline = c(1, 1), project = c(1, 2)) { k <- proc$k zero <- matrix(0, k - 1, k) h <- defh(k - 1) H <- cbind(h, zero) H1 <- cbind(zero, h) H <- rbind(H, H1) if (project[1] == 1) { select1 <- 1:k } if (project[1] == 2) { select1 <- (k + 1):(2 * k) } if (project[1] == 3) { select1 <- (2 * k + 1):(3 * k) } if (project[2] == 1) { select2 <- 1:k } if (project[2] == 2) { select2 <- (k + 1):(2 * k) } if (project[2] == 3) { select2 <- (2 * k + 1):(3 * k) } select <- c(select1, select2) meanxy <- c(proc$mshape[, project[1]], proc$mshape[, project[2]]) if (dim(proc$pcar)[1] == (2 * (k - 1))) { pcarot <- (t(H) %*% proc$pcar)[select, ] } if (dim(proc$pcar)[1] != (2 * (k - 1))) { pcarot <- proc$pcar[select, ] } par(pty = "s") par(lty = 1) np <- length(pcno) nr <- trunc((length(pcno) + 1) / 2) if (type == "g") { par(mfrow = c(nr, 2)) if (np == 1) { par(mfrow = c(1, 1)) } for (i in 1:np) { j <- pcno[i] fig <- meanxy + pcarot[, j] * 3 * mag * proc$pcasd[j] figx <- fig[1:k] figy <- fig[(k + 1):(2 * k)] YY <- cbind(figx, figy) tpsgrid(cbind(proc$mshape[, project[1]], proc$mshape[, project[2]]) , YY, xl, yl, width, 1, 0.1, 22) } } else { if (type == "r") { par(mfrow = c(np, 3)) for (i in 1:np) { j <- pcno[i] plotPDM(meanxy, pcarot[, j], mag * proc$pcasd[j], xl, xl + width, yl, yl + width, joinline) title(as.character( paste( "PC ", as.character(pcno[i]), ": ", as.character(round(proc$percent[i], 1)), "%" ) )) } } else { if (type == "v") { par(mfrow = c(nr, 2)) if (np == 1) { par(mfrow = c(1, 1)) } for (i in 1:np) { j <- pcno[i] plotPDM3(meanxy, pcarot[, j], mag * proc$pcasd[j], xl, xl + width, yl, yl + width, joinline) title(as.character( paste( "PC ", as.character(pcno[i]), ": ", as.character(round(proc$percent[i], 1)), "%" ) )) } } else { if (type == "b") { par(mfrow = c(nr, 2)) if (np == 1) { par(mfrow = c(1, 1)) } for (i in 1:np) { j <- pcno[i] plotPDMbook(meanxy, pcarot[, j], mag * proc$pcasd[j],-0.6, 0.6, -0.6, 0.6, joinline) title(as.character( paste( "PC ", as.character(pcno[i]), ": ", as.character(round(proc$percent[i], 1)), "%" ) )) } } else { if (type == "s") { par(mfrow = c(nr, 2)) if (np == 1) { par(mfrow = c(1, 1)) } for (i in 1:np) { j <- pcno[i] plotPDM2( meanxy, pcarot[, j], mag * proc$pcasd[j], xl, xl + width, yl, yl + width, joinline ) title(as.character( paste( "PC ", as.character(pcno[i]), ": ", as.character(round(proc$percent[i], 1)), "%" ) )) } } else { if (type == "m") { par(mfrow = c(1, 1)) for (i in 1:np) { j <- pcno[i] cat(paste("PC ", pcno[i], " \n")) movie( meanxy, pcarot[, j], mag * proc$pcasd[j], xl, xl + width, yl, yl + width, joinline, 20 ) } } } } } } } par(mfrow = c(1, 1)) } ############################################## #================================================================================== plotprinwarp <- function(TT, xbegin, ybegin, xwidth, nr, nc) { # #plots the principal warps of TT as perspective plots #the plots are displayed in an nr x nc array of plots kx <- 21 k <- nrow(TT) l <- kx ^ 2 xstart0 <- xbegin ystart0 <- ybegin xstart <- xstart0 ystart <- ystart0 step <- xwidth / kx r <- 0 X <- rep(0, times = l) Y2 <- rep(0, times = l) for (p in 1:kx) { ystart <- ystart0 xstart <- xstart + step for (q in 1:kx) { ystart <- ystart + step r <- r + 1 X[r] <- xstart Y2[r] <- ystart } } refperp <- matrix(c(X, Y2), l, 2) xstart <- xstart0 xgrid <- rep(0, times = kx) for (i in 1:kx) { xstart <- xstart + step xgrid[i] <- xstart } ystart <- ystart0 ygrid <- rep(0, times = kx) for (i in 1:kx) { ystart <- ystart + step ygrid[i] <- ystart } TPS <- bendingenergy(TT) prinwarp <- TPS$prinwarps phi <- matrix(0, l, k - 3) s <- matrix(0, k, 1) for (i in 1:l) { s <- matrix(0, k, 1) for (m in 1:k) { s[m,] <- sigmacov(refperp[i,] - TT[m,]) } phi[i,] <- diag(sqrt(TPS$prinwarpeval[1:(k - 3)])) %*% t(prinwarp[, 1:(k - 3)]) %*% s } phiTT <- matrix(0, k, k - 3) for (i in 1:k) { s <- matrix(0, k, 1) for (m in 1:k) { s[m,] <- sigmacov(TT[i,] - TT[m,]) } phiTT[i,] <- diag(sqrt(TPS$prinwarpeval[1:(k - 3)])) %*% t(prinwarp[, 1:(k - 3)]) %*% s } par(mfrow = c(nr, nc)) for (nw in 1:(k - 3)) { zgrid <- matrix(0, kx, kx) m <- 0 for (i in 1:kx) { for (j in 1:kx) { m <- m + 1 zgrid[i, j] <- phi[m, k - 2 - nw] } } zpersp <- persp(xgrid, ygrid, zgrid, axes = TRUE) # NB the following is an S-Plus function : use trans3d() in R # points(perspp(TT[, 1], TT[, 2], phiTT[, k - 2 - nw], zpersp), # cex = 2) } } #================================================================================== plotproc <- function(proc, xl, yl, width, joinline = c(1, 1)) { #provides plots of the full Procrustes rotated objects in proc #proc is an S object of the type output from the function procrustes2d #xl, yl lower xlimit and ylimit in plot #width = width (and height) of the square plotting region par(pty = "s") plot( proc$rotated[, , 1], xlim = c(xl, xl + width), ylim = c(yl, yl + width), type = "n", xlab = "", ylab = "" ) for (i in 1:proc$n) { points(proc$rotated[, , i]) lines(proc$rotated[joinline, , i]) } } #================================================================================== plotrelwarp <- function(mshape, rotsd, pcno, type, mag, xl, yl, width, joinline) { #provides PC plots: similar to plotpca but different argument #here rotsd is the rotation x s.d. , and can be from the usual # PCA or from using relative warps #pcno is a vector of the numbers (index) of PCs to be plotted #e.g. pcno<-c(1,2,4,7) will plot the four PCs no. 1,2,4,7 #type = type of display # "r" : rows along PCs evaluated at c = -3,-2,-1,0,1,2,3 sd's along PC # "v" : vectors drawn from mean to +/- 3 sd's along PC # "b" : vectors drawn as in `v' but using Bookstein shape variables # "s" : plots along c= -3, -2, -1, 0, 1, 2, 3 superimposed # "m" : movie backward and forwards from -3 to +3 sd's along PC # #mag = magnification of effect (1 = use s.d.'s from the data) #xl, yl lower xlimit and ylimit in plot #width = width (and height) of the square plotting region #joinline = vector of landmark numbers which are joined up in the plot by #straight lines: joinline = c(1,1) will give no lines # k <- nrow(mshape) pcarot <- rotsd par(pty = "s") par(lty = 1) meanxy <- c(mshape[, 1], mshape[, 2]) np <- length(pcno) if (type == "g") { par(mfrow = c(1, np)) for (i in 1:np) { j <- pcno[i] fig <- meanxy + pcarot[, j] * mag * 3 figx <- fig[1:k] figy <- fig[(k + 1):(2 * k)] YY <- cbind(figx, figy) tpsgrid(mshape, YY, xl, yl, width, 1, 0.1, 22) } } else { if (type == "r") { par(mfrow = c(np, 7)) for (i in 1:np) { j <- pcno[i] plotPDM(meanxy, pcarot[, j], mag, xl, xl + width, yl, yl + width, joinline) } } else { if (type == "v") { par(mfrow = c(1, np)) for (i in 1:np) { j <- pcno[i] plotPDM3(meanxy, pcarot[, j], mag, xl, xl + width, yl, yl + width, joinline) } } else { if (type == "b") { par(mfrow = c(1, np)) for (i in 1:np) { j <- pcno[i] plotPDMbook(meanxy, pcarot[, j], mag, xl, xl + width, yl, yl + width, joinline) } } else { if (type == "s") { par(mfrow = c(1, np)) for (i in 1:np) { j <- pcno[i] plotPDM2(meanxy, pcarot[, j], mag, xl, xl + width, yl, yl + width, joinline) } } else { if (type == "m") { par(mfrow = c(1, 1)) for (i in 1:np) { j <- pcno[i] movie(meanxy, pcarot[, j], mag, xl, xl + width, yl, yl + width, joinline, 20) } } } } } } } par(mfrow = c(1, 1)) } #================================================================================== ild_preshape <- function(x) { #input k x m matrix / complex k-vector #output k-1 x m matrix / k-1 x 1 complex matrix if (is.complex(x)) { k <- nrow(as.matrix(x)) h <- defh(k - 1) zstar <- x ztem <- h %*% zstar size <- sqrt(diag(Re(st(ztem) %*% ztem))) if (is.vector(zstar)) z <- ztem / size if (is.matrix(zstar)) z <- ztem %*% diag(1 / size) } else { if (length(dim(x)) == 3) { k <- dim(x)[1] h <- defh(k - 1) n <- dim(x)[3] m <- dim(x)[2] z <- array(0, c(k - 1, m, n)) for (i in 1:n) { z[, , i] <- h %*% x[, , i] size <- centroid.size(x[, , i]) z[, , i] <- z[, , i] / size } } else { k <- nrow(as.matrix(x)) h <- defh(k - 1) ztem <- h %*% x size <- centroid.size(x) z <- ztem / size } } z } #================================================================================== ild_preshape.mD <- function(x) { #input k x m matrix #output k-1 x 1 matrix h <- defh(nrow(x) - 1) ztem <- h %*% x size <- centroid.size.mD(x) z <- ztem / size z } #================================================================================== ild_preshape.mat <- function(zstar) { h <- defh(nrow(as.matrix(zstar)) - 1) ztem <- h %*% zstar size <- sqrt(diag(Re(st(ztem) %*% ztem))) if (is.vector(zstar)) z <- ztem / size if (is.matrix(zstar)) z <- ztem %*% diag(1 / size) z } #================================================================================== ild_preshapetoicon <- function(z) { #convert a preshape (real or complex) to an icon in configuration space h <- defh(nrow(z)) t(h) %*% z } # # # #prcomp1<-function(x, retx = TRUE) #{ # s <- svd(scale(x, scale = FALSE), nu = 0) # remove column means # rank <- sum(s$d > 0) # if(rank < ncol(x)) # s$v <- s$v[, 1:rank] # s$d <- s$d/sqrt(max(1, nrow(x) - 1)) # if(retx) # list(sdev = s$d, rotation = s$v, x = x %*% s$v) # else list(sdev = s$d, rotation = s$v) #} #================================================================================== prinwscoregrids <- function(TT, TPS, score, xbegin, ybegin, xwidth, nr, nc) { #grids displaying the effect of each principal warp at `score' #along each warp. Grids displayed in an nr x nc array par(pty = "s") par(mfrow = c(nr, nc)) k <- nrow(TT) xstart <- xbegin ystart <- ybegin kx <- 22 ky <- 21 l <- kx * ky step <- xwidth / (kx - 1) r <- 0 X <- rep(0, times = 220) Y2 <- rep(0, times = 220) for (p in 1:kx) { ystart <- ybegin xstart <- xstart + step for (q in 1:ky) { ystart <- ystart + step r <- r + 1 X[r] <- xstart Y2[r] <- ystart } } refc <- matrix(c(X, Y2), kx * ky, 2) # TPS <- bendingenergy(TT) for (jnw in 1:(k - 3)) { nw <- k - 2 - jnw phi <- matrix(0, l, 2) s <- matrix(0, k, 1) for (i in 1:l) { s <- matrix(0, k, 1) for (m in 1:k) { s[m,] <- sigmacov(refc[i,] - TT[m,]) } phi[i,] <- refc[i,] + sqrt(TPS$prinwarpeval[nw]) * score * t(TPS$prinwarps[, nw]) %*% s } newpt <- matrix(0, k, 2) for (i in 1:k) { s <- matrix(0, k, 1) for (m in 1:k) { s[m,] <- sigmacov(TT[i,] - TT[m,]) } newpt[i,] <- TT[i,] + sqrt(TPS$prinwarpeval[nw]) * score * t(TPS$prinwarps[, nw]) %*% s } order <- linegrid(phi, kx, ky) plot( order[1:l, 1], order[1:l, 2], type = "l", xlim = c(xbegin - xwidth / 10, xbegin + (xwidth * 11) / 10), ylim = c(ybegin - (xwidth / 10 * ky) / kx, ybegin + ((xwidth * 11) / 10 * ky) / kx), xlab = " ", ylab = " " ) lines(order[(l + 1):(2 * l), 1], order[(l + 1):(2 * l), 2], type = "l") points(newpt, cex = 2) } } #================================================================================== procdistreflect <- function(x, y) { #input k x m matrices x, y #output reflection shape distance (rho*) between them #if x, y are not too far apart then (rho*)=rho (Riemannian dist) if (sum((x - y) ^ 2) == 0) { riem <- 0 } if (sum((x - y) ^ 2) != 0) { m <- ncol(x) z <- preshape(x) w <- preshape(y) Q <- t(z) %*% w %*% t(w) %*% z ev <- sqrt(eigen(Q, symmetric = TRUE)$values) # riem <- acos(sum(ev)) riem <- acos(min(sum(ev), 1)) } riem } #================================================================================== procrustes2d <- function(x, l1 = 1, l2 = 2, approxtangent = FALSE, expomap = FALSE) { #input k x 2 x n real array, or k x n complex matrix #mean shape will have landmarks l1, l2 horizontal (l1 left, l2 right) # #output: # z$k : no of landmarks # z$m : no of dimensions (=2 here) # z$n : sample size # z$tan : the real 2k-2 x n matrix of partial Procrustes tangent coordinates # with pole given by the preshape of the full Procrustes mean # z$rotated : the k x m x n array of real full Procrustes rotated data # z$pcar : the columns are eigenvectors (PCs) of the sample covariance Sv of z$tan # z$pcasd : the square roots of eigenvalues of Sv (s.d.'s of PCs) # z$percent : the % of variability explained by the PCs # z$scores : PC scores normalised to have unit variance # z$rawscores : PC scores (unnormalised) # z$size : the centroid sizes of the configurations # z$rho : Kendall's Procrustean (Riemannian) distance rho to the mean shape # z$rmsrho : r.m.s. of rho # z$rmsd1 : r.m.s. of full Procrustes distances to the mean shape d1 # z <- list( k = 0, m = 0, n = 0, rotated = 0, tan = 0, pcar = 0, scores = 0, rawscores = 0, pcasd = 0, percent = 0, size = 0, rho = 0, rmsrho = 0, rmsd1 = 0, mshape = 0 ) if (is.complex(x) == FALSE) { x <- x[, 1,] + (1i) * x[, 2,] } # cat("Procrustes 2D eigenanalysis \n") k <- nrow(x) n <- ncol(x) h <- defh(k - 1) zp <- preshape(x) gamma <- cbevec(zp) cbmean <- t(h) %*% gamma theta <- Arg(cbmean[l2] - cbmean[l1]) cbmeanrot <- exp((-0 - 1i) * theta) * cbmean gamma <- h %*% cbmeanrot tan <- project(zp, gamma) icon <- array(0, c(k, 2, n)) tanapprox <- matrix(0, 2 * k, n) size <- rep(0, times = n) rho <- rep(0, times = n) mu <- complextoreal(cbmeanrot) sum <- 0 for (i in 1:n) { tem <- tanfigurefull(tan[, i], gamma) icon[, 1, i] <- Re(tem) icon[, 2, i] <- Im(tem) sum <- sum + icon[, , i] size[i] <- centroid.size(x[, i]) rho[i] <- riemdist(x[, i], c(cbmeanrot)) } xbar <- sum / n rv <- Vmat(tan) if (approxtangent == TRUE) { for (i in 1:n) { tanapprox[, i] <- as.vector(icon[, , i]) - as.vector(xbar) } tanapprox <- tanapprox / centroid.size(xbar) pca <- prcomp1(t(tanapprox)) z$tan <- tanapprox } if (expomap == TRUE) { temp <- rv for (i in 1:(n)) { temp[, i] <- rv[, i] / Enorm(rv[, i]) * rho[i] } rv <- temp } if (approxtangent == FALSE) { pca <- prcomp1(t(rv)) z$tan <- rv } z$pcar <- pca$rotation z$pcasd <- pca$sdev z$percent <- z$pcasd ^ 2 / sum(z$pcasd ^ 2) * 100 z$rotated <- icon npc <- 0 for (i in 1:length(pca$sdev)) { if (pca$sdev[i] > 1e-07) { npc <- npc + 1 } } z$scores <- pca$x z$rawscores <- pca$x for (i in 1:npc) { z$scores[, i] <- pca$x[, i] / pca$sdev[i] } z$rho <- rho z$size <- size z$mshape <- mu z$k <- k z$m <- 2 z$n <- n z$rmsrho <- sqrt(mean(rho ^ 2)) z$rmsd1 <- sqrt(mean(sin(rho) ^ 2)) return(z) } #================================================================================== testmeanshapes.old <- function(A, B, Hotelling = TRUE, tol1 = 1e05, tol2 = 1e05) { if (is.complex(A)) { tem <- array(0, c(nrow(A), 2, ncol(A))) tem[, 1,] <- Re(A) tem[, 2,] <- Im(A) A <- tem } if (is.complex(B)) { tem <- array(0, c(nrow(B), 2, ncol(B))) tem[, 1,] <- Re(B) tem[, 2,] <- Im(B) B <- tem } m <- dim(A)[2] if (Hotelling == TRUE) { if (m == 2) { test <- Hotelling2D(A, B) } if (m > 2) { test <- Hotellingtest(A, B, tol1 = tol1, tol2 = tol2) } cat( "Hotelling's T^2 test: ", c("Test statistic = ", round(test$F, 2)), c("\n p-value = ", round(test$pval, 4)), c("Degrees of freedom = ", test$df1, test$df2), "\n" ) } if (Hotelling == FALSE) { if (m == 2) { test <- Goodall2D(A, B) } if (m > 2) { test <- Goodalltest(A, B, tol1 = tol1, tol2 = tol2) } cat( "Goodall's F test: ", c("Test statistic = ", round(test$F, 2)), c("\n p-value = ", round(test$pval, 4)), c("Degrees of freedom = ", test$df1, test$df2), "\n" ) } test } #================================================================================== procGPA <- function(x, scale = TRUE, reflect = FALSE, eigen2d = FALSE, tol1 = 1e-05, tol2 = tol1, tangentcoords = "residual", proc.output = FALSE, distances = TRUE, pcaoutput = TRUE, alpha = 0, affine = FALSE) { # # n <- dim(x)[length(dim(x))] if ((n > 100) & (distances == TRUE)) { print("To speed up use option distances=FALSE") } if ((n > 100) & (pcaoutput == TRUE)) { print("To speed up use option pcaoutput=FALSE") } if (scale == TRUE) { if (tangentcoords == "residual") { tangentresiduals <- TRUE expomap <- FALSE } if (tangentcoords == "partial") { tangentresiduals <- FALSE expomap <- FALSE } if (tangentcoords == "expomap") { tangentresiduals <- FALSE expomap <- TRUE } } if (scale == FALSE) { #all three options are equivalent if (tangentcoords == "residual") { tangentresiduals <- TRUE expomap <- FALSE } if (tangentcoords == "partial") { tangentresiduals <- TRUE expomap <- FALSE } if (tangentcoords == "expomap") { tangentresiduals <- TRUE expomap <- FALSE } } approxtangent <- tangentresiduals if (is.complex(x)) { tem <- array(0, c(nrow(x), 2, ncol(x))) tem[, 1,] <- Re(x) tem[, 2,] <- Im(x) x <- tem } m <- dim(x)[2] n <- dim(x)[3] if (reflect == FALSE) { if ((m == 2) && (scale == TRUE)) { if (eigen2d == TRUE) { out <- procrustes2d(x, approxtangent = approxtangent, expomap = expomap) } else { out <- procrustesGPA( x, tol1, tol2, approxtangent = approxtangent, proc.output = proc.output, distances = distances, pcaoutput = pcaoutput, reflect = reflect, expomap = expomap ) } } if ((m > 2) && (scale == TRUE)) { out <- procrustesGPA( x, tol1, tol2, approxtangent = approxtangent, proc.output = proc.output , distances = distances, pcaoutput = pcaoutput, reflect = reflect, expomap = expomap ) } if (scale == FALSE) { out <- procrustesGPA.rot( x, tol1, tol2, approxtangent = approxtangent, proc.output = proc.output, distances = distances, pcaoutput = pcaoutput, reflect = reflect, expomap = expomap ) } } if (reflect == TRUE) { if (scale == TRUE) { out <- procrustesGPA( x, tol1, tol2, approxtangent = approxtangent, proc.output = proc.output, distances = distances, pcaoutput = pcaoutput, reflect = reflect, expomap = expomap ) } if (scale == FALSE) { out <- procrustesGPA.rot( x, tol1, tol2, approxtangent = approxtangent, proc.output = proc.output, distances = distances, pcaoutput = pcaoutput, reflect = reflect, expomap = expomap ) } } out$stdscores <- out$scores out$scores <- out$rawscores if (approxtangent == FALSE) { out$mshape <- out$mshape / centroid.size(out$mshape) for (i in 1:n) { out$rotated[, , i] <- out$rotated[, , i] / centroid.size(out$rotated[, , i]) } } rw <- out rw <- shaperw(out, alpha = alpha , affine = affine) rw$GSS <- sum((n - 1) * rw$pcasd ** 2) rw } #================================================================================== procrustesGPA <- function (x, tol1 = 1e-05, tol2 = 1e-05, distances = TRUE, pcaoutput = TRUE, approxtangent = TRUE, proc.output = FALSE, reflect = FALSE, expomap = FALSE) { z <- list( k = 0, m = 0, n = 0, rotated = 0, tan = 0, pcar = 0, scores = 0, rawscores = 0, pcasd = 0, percent = 0, size = 0, rho = 0, rmsrho = 0, rmsd1 = 0, mshape = 0 ) if (is.complex(x)) { tem <- array(0, c(nrow(x), 2, ncol(x))) tem[, 1,] <- Re(x) tem[, 2,] <- Im(x) x <- tem } k <- dim(x)[1] m <- dim(x)[2] n <- dim(x)[3] x <- cnt3(x) zgpa <- fgpa(x, tol1, tol2, proc.output = proc.output, reflect = reflect) if (distances == TRUE) { if (proc.output) { cat("Shape distances and sizes calculation ...\n") } size <- rep(0, times = n) rho <- rep(0, times = n) size <- apply(x, 3, centroid.size) rho <- apply(x, 3, y <- function(x) { riemdist(x, zgpa$mshape) }) } tanpartial <- matrix(0, k * m - m , n) ident <- diag(rep(1, times = (m * k - m))) gamma <- as.vector(preshape(zgpa$mshape)) for (i in 1:n) { tanpartial[, i] <- (ident - gamma %*% t(gamma)) %*% as.vector(preshape(zgpa$r.s.r[, , i])) } if (expomap == TRUE) { temp <- tanpartial for (i in 1:(n)) { temp[, i] <- tanpartial[, i] / Enorm(tanpartial[, i]) * rho[i] } tanpartial <- temp } tan <- zgpa$r.s.r[, 1,] - zgpa$mshape[, 1] for (i in 2:m) { tan <- rbind(tan, zgpa$r.s.r[, i,] - zgpa$mshape[, i]) } if (pcaoutput == TRUE) { if (proc.output) { cat("PCA calculation ...\n") } if (approxtangent == FALSE) { pca <- prcomp1(t(tanpartial)) } if (approxtangent == TRUE) { pca <- prcomp1(t(tan)) } npc <- 0 for (i in 1:length(pca$sdev)) { if (pca$sdev[i] > 1e-07) { npc <- npc + 1 } } z$scores <- pca$x z$rawscores <- pca$x for (i in 1:npc) { z$scores[, i] <- pca$x[, i] / pca$sdev[i] } z$pcar <- pca$rotation z$pcasd <- pca$sdev z$percent <- z$pcasd ^ 2 / sum(z$pcasd ^ 2) * 100 } if (approxtangent == FALSE) { z$tan <- tanpartial } if (approxtangent == TRUE) { z$tan <- tan } if (distances == TRUE) { z$rho <- rho z$size <- size z$rmsrho <- sqrt(mean(rho ^ 2)) z$rmsd1 <- sqrt(mean(sin(rho) ^ 2)) } z$rotated <- zgpa$r.s.r z$mshape <- zgpa$mshape z$k <- k z$m <- m z$n <- n if (proc.output) { cat("Finished.\n") } return(z) } #================================================================================== procrustesGPA.rot <- function (x, tol1 = 1e-05, tol2 = 1e-05, distances = TRUE, pcaoutput = TRUE, approxtangent = TRUE, proc.output = FALSE, reflect = FALSE, expomap = FALSE) { z <- list( k = 0, m = 0, n = 0, rotated = 0, tan = 0, pcar = 0, scores = 0, rawscores = 0, pcasd = 0, percent = 0, size = 0, rho = 0, rmsrho = 0, rmsd1 = 0, mshape = 0 ) if (is.complex(x)) { tem <- array(0, c(nrow(x), 2, ncol(x))) tem[, 1,] <- Re(x) tem[, 2,] <- Im(x) x <- tem } k <- dim(x)[1] m <- dim(x)[2] n <- dim(x)[3] # print("GPA (rotation only)") x <- cnt3(x) zgpa <- fgpa.rot(x, tol1, tol2, proc.output = proc.output, reflect = reflect) if (distances == TRUE) { if (proc.output) { cat("Shape distances and sizes calculation ...\n") } size <- rep(0, times = n) rho <- rep(0, times = n) size <- apply(x, 3, centroid.size) rho <- apply(x, 3, y <- function(x) { riemdist(x, zgpa$mshape) }) } tanpartial <- matrix(0, k * m - m, n) ident <- diag(rep(1, times = (m * k - m))) gamma <- as.vector(preshape(zgpa$mshape)) for (i in 1:n) { tanpartial[, i] <- (ident - gamma %*% t(gamma)) %*% as.vector(preshape(zgpa$r.s.r[, , i])) } if (expomap == TRUE) { temp <- tanpartial for (i in 1:(n)) { temp[, i] <- tanpartial[, i] / Enorm(tanpartial[, i]) * rho[i] } tanpartial <- temp } tan <- zgpa$r.s.r[, 1,] - zgpa$mshape[, 1] for (i in 2:m) { tan <- rbind(tan, zgpa$r.s.r[, i,] - zgpa$mshape[, i]) } if (approxtangent == FALSE) { z$tan <- tanpartial } if (approxtangent == TRUE) { z$tan <- tan } if (pcaoutput == TRUE) { if (proc.output) { cat("PCA calculation ...\n") } if (approxtangent == FALSE) { pca <- prcomp1(t(tanpartial)) } if (approxtangent == TRUE) { pca <- prcomp1(t(tan)) } npc <- 0 for (i in 1:length(pca$sdev)) { if (pca$sdev[i] > 1e-07) { npc <- npc + 1 } } z$scores <- pca$x z$rawscores <- pca$x for (i in 1:npc) { z$scores[, i] <- pca$x[, i] / pca$sdev[i] } z$pcar <- pca$rotation z$pcasd <- pca$sdev z$percent <- z$pcasd ^ 2 / sum(z$pcasd ^ 2) * 100 } if (distances == TRUE) { z$rho <- rho z$size <- size z$rmsrho <- sqrt(mean(rho ^ 2)) z$rmsd1 <- sqrt(mean(sin(rho) ^ 2)) } z$rotated <- zgpa$r.s.r z$mshape <- zgpa$mshape z$k <- k z$m <- m z$n <- n if (proc.output) { cat("Finished.\n") } return(z) } #================================================================================== project <- function(z, gamma) { #input z: preshape, gamma: preshape (k-1 x 1 matrices) #output Kent's tangent plane coordinates #of z at the pole gamma (k-1 complex vector) nr <- nrow(z) nc <- ncol(z) g <- matrix(gamma, nr, 1) ident <- diag(nr) theta <- diag(c(exp((-0 - 1i) * Arg(st( g ) %*% z))), nc, nc) v <- (ident - g %*% st(g)) %*% z %*% theta v } #================================================================================== read.array <- function(name, k, m, n) { #input name : filename, k: no of points, m: no of dimensions, n: sample size #output x: k x m x n array of data #e.g. for 2D data assume file format x1 y1 x2 y2 .. xn yn for each object tem <- scan(name) tem <- array(tem, c(m, k, n)) tem <- aperm(tem, c(2, 1, 3)) x <- tem x } #================================================================================== read.in <- function(name, k, m) { #input name : filename, k: no of points, m: no of dimensions #output x: k x m x n array of data ( n: sample size) #e.g. for m=2-D data assume file format x1 y1 x2 y2 ... xk yk for each object #for m=3-D data: x1 y1 z1 x2 y2 z2 ... xk yk zk tem <- scan(name) n <- length(tem) / (k * m) tem <- array(tem, c(m, k, n)) tem <- aperm(tem, c(2, 1, 3)) x <- tem x } #================================================================================== realtocomplex <- function(x) { #input k x 2 matrix - return complex k-vector k <- nrow(x) zstar <- x[, 1] + (1i) * x[, 2] zstar } #================================================================================== reassqpr <- function(z) { j <- 1 nc <- ncol(z) nr <- nrow(z) stemp <- matrix(0, 2 * nr, 2 * nr) repeat { t1 <- matrix(z[, j], nr, 1) vz <- rbind(Re(t1), Im(t1)) viz <- rbind(Re((1i) * t1), Im((1i) * t1)) stemp <- stemp + vz %*% t(vz) + viz %*% t(viz) if (j == nc) break j <- j + 1 } stemp } #================================================================================== relwarps <- function(mshape, rotated, alpha) { #find the relative warps for a dataset with mshape as the reference #and `rotated' as the array of Procrustes rotated figures #alpha is the power of the bending energy # alpha=+1 : emphasizes large scale # alpha=-1 : emphasizes small scale #output: # z$rwarps : the relative warps # z$rwscores : the relative warp scores # z$rwpercent : the percentage of total variability explained by each #relative warp z <- list( rwarps = 0, rwscores = 0, rwpercent = 0, ev = 0, unif = 0, unscores = 0, lengths = 0 ) k <- nrow(mshape) TPS <- bendingenergy(mshape) Be <- TPS$gamma11 stackxy <- rbind(rotated[, 1,], rotated[, 2,]) n <- dim(rotated)[3] msum <- rep(0, times = 2 * k) for (i in 1:n) { msum <- msum + stackxy[, i] } msum <- msum / n meanxy <- msum cstackxy <- matrix(0, 2 * k, n) for (i in 1:n) { cstackxy[, i] <- stackxy[, i] - meanxy } Bpow <- genpower(Be, alpha) Bpowinv <- genpower(Be,-alpha) IBpow <- I2mat(Bpow) IBpowinv <- I2mat(Bpowinv) if (alpha == 0) { IBpow <- diag(rep(1, times = (2 * k))) IBpowinv <- diag(rep(1, times = (2 * k))) } stacknew <- IBpow %*% cstackxy gamma <- matrix(0, 2 * k, 2 * k) pcarotation <- eigen(stacknew %*% t(stacknew) / n, symmetric = TRUE)$vectors pcaev <- eigen(stacknew %*% t(stacknew) / n, symmetric = TRUE)$values pcasdev <- rep(0, times = 2 * k) for (i in 1:(2 * k)) { pcasdev[i] <- sqrt(abs(pcaev[i])) } scores <- t(IBpow %*% pcarotation) %*% cstackxy percent <- rep(0, times = 2 * k) for (i in 1:(2 * k)) { percent[i] <- pcasdev[i] ^ 2 } Un <- TPS$Un UnXY <- t(Un) %*% cstackxy z$unif <- Un %*% t(matrix(c(sqrt(var( UnXY[1,] )), 0, 0, sqrt(var( UnXY[2,] ))), 2, 2)) z$unscores <- t(UnXY) z$lengths <- sqrt(abs(percent)) z$rwarps <- IBpowinv %*% pcarotation %*% diag(pcasdev) z$rwscores <- t(scores) z$ev <- pcaev percentrw <- percent / sum(percent) * 100 z$rwpercent <- percentrw return(z) } #================================================================================== ssriemdist <- function(x, y, reflect = FALSE) { sx <- centroid.size(x) sy <- centroid.size(y) sd <- sx ** 2 + sy ** 2 - 2 * sx * sy * cos(riemdist(x, y, reflect = reflect)) sqrt(abs(sd)) } #================================================================================== riemdist <- function(x, y, reflect = FALSE) { #input two k x m matrices x, y or complex k-vectors #output Riemannian distance rho between them if (sum((x - y) ** 2) == 0) { riem <- 0 } if (sum((x - y) ** 2) != 0) { if (reflect == FALSE) { if (ncol(as.matrix(x)) < 3) { if (is.complex(x) == FALSE) { x <- realtocomplex(x) } if (is.complex(y) == FALSE) { y <- realtocomplex(y) } #riem <- c(acos(Mod(st(preshape(x)) %*% preshape(y)))) riem <- c(acos(min(1, ( Mod(st(preshape(x)) %*% preshape(y)) )))) } else { m <- ncol(x) z <- preshape(x) w <- preshape(y) Q <- t(z) %*% w %*% t(w) %*% z ev <- eigen(t(z) %*% w)$values check <- 1 for (i in 1:m) { check <- check * ev[i] } ev <- sqrt(abs(eigen(Q, symmetric = TRUE)$values)) if (Re(check) < 0) ev[m] <- -ev[m] riem <- acos(min(sum(ev), 1)) } } if (reflect == TRUE) { m <- ncol(x) z <- preshape(x) w <- preshape(y) Q <- t(z) %*% w %*% t(w) %*% z ev <- sqrt(abs(eigen(Q, symmetric = TRUE)$values)) riem <- acos(min(sum(ev), 1)) } } riem } #================================================================================== riemdist.complex <- function(z, w) { #input complex k-vectors z, w #output Riemannian distance rho between them c(acos(min(Mod( st(preshape(z)) %*% preshape(w) ), 1))) } #================================================================================== riemdist.mD <- function(x, y) { #input k x m matrices x, y #output Riemannian distance rho between them m <- ncol(x) z <- preshape.mD(x) w <- preshape.mD(y) Q <- t(z) %*% w %*% t(w) %*% z ev <- eigen(t(z) %*% w)$values check <- 1 for (i in 1:m) { check <- check * ev[i] } ev <- sqrt(eigen(Q, symmetric = TRUE)$values) if (check < 0) ev[m] <- -ev[m] riem <- acos(min(sum(ev), 1)) riem } #================================================================================== rotateaxes <- function(mshapein, rotatedin) { #Rotates a mean shape and the Procrustes rotated data to have #horizontal and vertical principal axes #output: z$mshape rotated mean shape # z$rotated rotated procrustes registered data # z$R the rotation matrix # z <- list(mshape = 0, rotated = 0, R = 0) n <- dim(rotatedin)[3] S <- var(mshapein) R <- eigen(S)$vectors msh <- mshapein %*% R ico <- rotatedin for (i in 1:n) { ico[, , i] <- rotatedin[, , i] %*% R } z$mshape <- msh z$rotated <- ico z$R <- R return(z) } #sigma<-function(x) #{ # length <- sqrt(x[1]^2 + x[2]^2) # if(length == 0) # sig <- 0 # else sig <- length^2 * log(length^2) # sig #} #================================================================================== sigmacov <- function(x) { # other radial basis functions/covariance functions are possible of course hh <- Enorm(x) if (hh == 0) sig <- 0 else { if (length(x) == 2) { sig <- hh ^ 2 * log(hh ^ 2) # null space includes affine terms (2D data) } if (length(x) == 3) { sig <- -hh # null space includes affine terms (3D data) } } sig } #================================================================================== st <- function(zstar) { #input complex matrix #output transpose of the complex conjugate st <- t(Conj(zstar)) st } #================================================================================== ild_tanfigure <- function(vv, gamma) { #inverse projection from complex tangent plane coordinates vv, using pole gamma #output centred icon k <- nrow(gamma) + 1 h <- defh(k - 1) zvv <- tanpreshape(vv, gamma) zstvv <- t(h) %*% zvv zstvv } #================================================================================== ild_tanfigurefull <- function(vv, gamma) { #inverse projection from complex tangent plane coordinates vv, using pole gamma #using Procrustes to with scaling to the pole gamma #output centred icon k <- nrow(gamma) + 1 f1 <- tanfigure(vv, gamma) h <- defh(k - 1) f2 <- t(h) %*% gamma beta <- Mod(st(f1) %*% f2) f1 <- f1 * c(beta) f1 } #================================================================================== tanpreshape <- function(vv, gamma) { #inverse projection from tangent plane coordinates vv, using pole gamma #output preshape z <- c((1 - st(vv) %*% vv) ^ 0.5) * gamma + vv z } #================================================================================== plot3Ddata <- function(dna.data, land = 1:k, objects = 1:n, joinline = c(1, 1)) { dna <- procGPA(dna.data[, , 1:2]) w1 <- defplotsize2(dna.data[, 1:2, ]) w2 <- defplotsize2(dna.data[, c(1, 3), ]) w3 <- defplotsize2(dna.data[, c(2, 3), ]) width <- max(c(w1$width, w2$width, w3$width)) xl <- min(c(w1$xl, w2$xl, w3$xl)) xu <- xl + width yl <- min(c(w1$yl, w2$yl, w3$yl)) yu <- yl + width n <- dim(dna.data)[3] k <- dim(dna.data)[1] m <- dim(dna.data)[2] par(mfrow = c(1, 1)) par(pty = "s") view1 <- 1 view2 <- 2 view3 <- 3 lineorder <- joinline for (j in 1:1) { for (ii in objects) { par(mfrow = c(2, 2)) mag <- 0 pcno <- 1 plotPDMnoaxis3( c(dna.data[land, view2, ii], dna.data[land, view3, ii]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) mag <- 0 pcno <- 1 plotPDMnoaxis3( c(dna.data[land, view1, ii], dna.data[land, view3, ii]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) mag <- 0 pcno <- 1 plotPDMnoaxis3( c(dna.data[land, view1, ii], dna.data[land, view2, ii]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) plot( c(0, 0), c(50, 50), xlim = c(0, 0), ylim = c(0, 0), type = "n", xlab = " ", ylab = " ", axes = FALSE ) title(as.character(ii)) } } } #================================================================================== plot3Ddata.static <- function(dna.data, land = 1:k, objects = 1:n, joinline = c(1, 1)) { dna <- procGPA(dna.data[, , 1:2]) w1 <- defplotsize2(dna.data[, 1:2, ]) w2 <- defplotsize2(dna.data[, c(1, 3), ]) w3 <- defplotsize2(dna.data[, c(2, 3), ]) width <- max(c(w1$width, w2$width, w3$width)) xl <- min(c(w1$xl, w2$xl, w3$xl)) xu <- xl + width yl <- min(c(w1$yl, w2$yl, w3$yl)) yu <- yl + width n <- dim(dna.data)[3] k <- dim(dna.data)[1] m <- dim(dna.data)[2] par(mfrow = c(1, 1)) par(pty = "s") lineorder <- joinline par(mfrow = c(2, 2)) mag <- 0 pcno <- 1 ii <- 1 view1 <- 1 view2 <- 2 view3 <- 3 plotPDMnoaxis3( c(dna.data[land, view1, ii], dna.data[land, view2, ii]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) for (ii in objects) { pointsPDMnoaxis3( c(dna.data[land, view1, ii], dna.data[land, view2, ii]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) } view1 <- 1 view2 <- 3 view3 <- 2 plotPDMnoaxis3( c(dna.data[land, view1, ii], dna.data[land, view2, ii]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) for (ii in objects) { pointsPDMnoaxis3( c(dna.data[land, view1, ii], dna.data[land, view2, ii]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) } view1 <- 2 view2 <- 3 view3 <- 1 plotPDMnoaxis3( c(dna.data[land, view1, ii], dna.data[land, view2, ii]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) for (ii in objects) { pointsPDMnoaxis3( c(dna.data[land, view1, ii], dna.data[land, view2, ii]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) } } #================================================================================== plot3Dmean <- function(dna) { land <- 1:dim(dna$mshape)[1] w1 <- defplotsize2(dna$rotated[, 1:2, ]) w2 <- defplotsize2(dna$rotated[, c(1, 3), ]) w3 <- defplotsize2(dna$rotated[, c(2, 3), ]) width <- max(c(w1$width, w2$width, w3$width)) xl <- min(c(w1$xl, w2$xl, w3$xl)) xu <- xl + width yl <- min(c(w1$yl, w2$yl, w3$yl)) yu <- yl + width par(mfrow = c(2, 2)) par(pty = "s") plot( dna$mshape[land, 1], dna$mshape[land, 2], xlim = c(xl, xu), ylim = c(yl, yu), xlab = " ", ylab = " " ) text(dna$mshape[land, 1], dna$mshape[land, 2], land) lines(dna$mshape[land, 1], dna$mshape[land, 2]) plot( dna$mshape[land, 1], dna$mshape[land, 3], xlim = c(xl, xu), ylim = c(yl, yu), xlab = " ", ylab = " " ) text(dna$mshape[land, 1], dna$mshape[land, 3], land) lines(dna$mshape[land, 1], dna$mshape[land, 3]) plot( dna$mshape[land, 2], dna$mshape[land, 3], xlim = c(xl, xu), ylim = c(yl, yu), xlab = " ", ylab = " " ) text(dna$mshape[land, 2], dna$mshape[land, 3], land) lines(dna$mshape[land, 2], dna$mshape[land, 3]) title("Procrustes mean shape estimate") } #================================================================================== plot3Dpca <- function(dna, pcno, joinline = c(1, 1)) { #choose subset w1 <- defplotsize2(dna$rotated[, 1:2, ]) w2 <- defplotsize2(dna$rotated[, c(1, 3), ]) w3 <- defplotsize2(dna$rotated[, c(2, 3), ]) width <- max(c(w1$width, w2$width, w3$width)) xl <- min(c(w1$xl, w2$xl, w3$xl)) - width / 4 xu <- xl + width * 1.5 yl <- min(c(w1$yl, w2$yl, w3$yl)) - width / 4 yu <- yl + width * 1.5 k <- dim(dna$mshape)[1] lineorder <- joinline par(mfrow = c(1, 1)) cat("X-Y view \n") view1 <- 1 view2 <- 2 view3 <- 3 land <- c(1:k) for (j in 1:10) { for (ii in-12:12) { mag <- ii / 4 plotPDMnoaxis3( c(dna$mshape[land, view1], dna$mshape[land, view2]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) } for (ii in-11:11) { mag <- -ii / 4 plotPDMnoaxis3( c(dna$mshape[land, view1], dna$mshape[land, view2]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) } } #choose subset par(mfrow = c(1, 1)) cat("X-Z view \n") view1 <- 1 view2 <- 3 view3 <- 2 land <- c(1:k) for (j in 1:10) { for (ii in-12:12) { mag <- ii / 4 plotPDMnoaxis3( c(dna$mshape[land, view1], dna$mshape[land, view2]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) } for (ii in-11:11) { mag <- -ii / 4 plotPDMnoaxis3( c(dna$mshape[land, view1], dna$mshape[land, view2]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) } } #choose subset par(mfrow = c(1, 1)) cat("Y-Z view \n") view1 <- 2 view2 <- 3 view3 <- 1 land <- c(1:k) for (j in 1:10) { for (ii in-12:12) { mag <- ii / 4 plotPDMnoaxis3( c(dna$mshape[land, view1], dna$mshape[land, view2]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) } for (ii in-11:11) { mag <- -ii / 4 plotPDMnoaxis3( c(dna$mshape[land, view1], dna$mshape[land, view2]), c(dna$pcar[((view1 - 1) * k + (land)), pcno], dna$pcar[((view2 - 1) * k + (land)), pcno]), mag * dna$pcasd[pcno], xl, xu, yl, yu, lineorder, 1 ) } } } #================================================================================== banner1 <- function(char) { par(mfrow = c(1, 1)) plot( c(0, 0), c(1, 1), axes = FALSE, type = "n", xlab = " ", ylab = " " ) a1 <- char if (length(a1) == 2) a1 <- paste(a1[1], a1[2]) if (length(a1) == 3) a1 <- paste(a1[1], a1[2], a1[3]) if (is.character(a1) == FALSE) char <- as.character(a1) title(a1) } #================================================================================== banner4 <- function(a1, a2, a3, a4) { par(mfrow = c(2, 2)) plot( c(0, 0), c(1, 1), axes = FALSE, type = "n", xlab = " ", ylab = " " ) if (length(a1) == 2) a1 <- paste(a1[1], a1[2]) if (length(a1) == 3) a1 <- paste(a1[1], a1[2], a1[3]) if (is.character(a1) == FALSE) a1 <- as.character(a1) title(a1) plot( c(0, 0), c(1, 1), axes = FALSE, type = "n", xlab = " ", ylab = " " ) if (length(a2) == 2) a2 <- paste(a2[1], a2[2]) if (length(a2) == 3) a2 <- paste(a2[1], a2[2], a2[3]) if (is.character(a2) == FALSE) a2 <- as.character(a2) title(a2) plot( c(0, 0), c(1, 1), axes = FALSE, type = "n", xlab = " ", ylab = " " ) if (length(a3) == 2) a3 <- paste(a3[1], a3[2]) if (length(a3) == 3) a3 <- paste(a3[1], a3[2], a3[3]) if (is.character(a3) == FALSE) a3 <- as.character(a3) title(a3) plot( c(0, 0), c(1, 1), axes = FALSE, type = "n", xlab = " ", ylab = " " ) if (length(a4) == 2) a4 <- paste(a4[1], a4[2]) if (length(a4) == 3) a4 <- paste(a4[1], a4[2], a4[3]) if (is.character(a4) == FALSE) a4 <- as.character(a4) title(a4) } ####### #exact Gaussian MLE - isotropic distribution #######not fully tested yet #================================================================================== isomle <- function(x) { if (is.complex(x)) { tem <- array(0, c(nrow(x), 2, ncol(x))) tem[, 1,] <- Re(x) tem[, 2,] <- Im(x) x <- tem } k <- dim(x)[1] m <- dim(x)[2] n <- dim(x)[3] if (m > 2) { print("Only valid for 2D data") } if (m == 2) { pm <- rep(0, times = 2 * k - 3) tem <- procrustes2d(x) tem1 <- bookstein.shpv(tem$mshape) sigm <- sum(diag(var(tem$tan))) / (n - 1) / 2 #cat("Isotropic shape MLE \n") pm[1:(k - 2)] <- tem1[3:k, 1] pm[(k - 1):(2 * k - 4)] <- tem1[3:k, 2] pm[2 * k - 3] <- 10 ans <- nlm(objfuniso, hessian = TRUE, pm, uu = x) #while (ans$code!=1){ #print("code not equal 1") #print(pm) #pm<-pm+rnorm(2*k-3,0,0.1) #pm[2*k-3]<-abs(pm[2*k-3]) #ans<-nlm(objfuniso,hessian=TRUE,pm,uu=x) #print(ans) #} out <- list( code = 0, mshape = 0, tau = 0, kappa = 0, varcov = 0, gradient = 0 ) mn <- matrix(0, k, 2) mn[1, 1] <- -0.5 mn[2, 1] <- 0.5 mn[3:k, 1] <- ans$estimate[1:(k - 2)] mn[3:k, 2] <- ans$estimate[(k - 1):(2 * k - 4)] out$mshape <- mn out$code <- ans$code out$loglike <- -ans$minimum out$gradient <- ans$gradient out$tau <- sqrt(1 / ans$estimate[2 * k - 3] ** 2) out$kappa <- centroid.size(mn) ** 2 / (4 * out$tau ** 2) out$varcov <- solve(ans$hessian) out$se <- c(sqrt(diag(out$varcov))) out$se[2 * k - 3] <- out$se[2 * k - 3] * out$tau ** 2 out } } #================================================================================== objfuniso <- function(pm, uu) { k <- dim(uu)[1] h <- defh(k - 1) zero <- matrix(0, k - 1, k) L1 <- cbind(h, zero) L2 <- cbind(zero, h) L <- rbind(L1, L2) mustar <- c(-1 / 2, 1 / 2, pm[1:(k - 2)], 0, 0, pm[(k - 1):(2 * k - 4)]) mu <- L %*% mustar obj <- -loglikeiso2(uu, mu, 1 / pm[2 * k - 3]) obj } #================================================================================== loglikeiso <- function(uu, mu, s) { nsam <- dim(uu)[3] sum <- 0 for (i in 1:nsam) { sum <- sum + log(isodens(uu[, , i], mu, s)) } sum } #================================================================================== loglikeiso2 <- function(uu, mu, s) { nsam <- dim(uu)[3] sum <- 0 for (i in 1:nsam) { sum <- sum + isologdens(uu[, , i], mu, s) } sum } #================================================================================== isodens <- function(usam, mu, s) { k <- dim(usam)[1] u <- kendall.shpv(usam) uuu <- u[, 1] vvv <- u[, 2] up <- c(1, uuu, 0, vvv) vp <- c(0, -vvv, 1, uuu) usu <- t(up) %*% up beta <- c(t(mu) %*% up, t(mu) %*% vp) sin2rho <- 1 - t(beta) %*% beta / (usu * c(t(mu) %*% mu)) kappa <- c(t(mu) %*% mu) / (4 * s ** 2) #finf<-gamma(k-1)*pi/(pi*usu)**(k-1) dens <- oneFone(k - 2, 2 * kappa * (1 - sin2rho)) %*% exp(-2 * kappa * sin2rho) dens } #================================================================================== isologdens <- function(usam, mu, s) { k <- dim(usam)[1] u <- kendall.shpv(usam) uuu <- u[, 1] vvv <- u[, 2] up <- c(1, uuu, 0, vvv) vp <- c(0, -vvv, 1, uuu) usu <- t(up) %*% up beta <- c(t(mu) %*% up, t(mu) %*% vp) sin2rho <- 1 - t(beta) %*% beta / (usu * c(t(mu) %*% mu)) kappa <- c(t(mu) %*% mu) / (4 * s ** 2) #finf<-lgamma(k-1)+log(pi)-(k-1)*log(pi*usu) dens <- loneFone(k - 2, 2 * kappa * (1 - sin2rho)) - 2 * kappa * sin2rho c(dens) } #================================================================================== loneFone <- function(r, x) { #note this is log 1F1(-r,1,-x) if (x > 1) { sum1 <- r * log(x) sum <- 0 for (j in 0:r) { sum <- sum + choose(r, j) * x ** (j - r) / gamma(j + 1) } out <- sum1 + log(sum) } if (x <= 1) { sum <- 0 for (j in 0:r) { sum <- sum + choose(r, j) * x ** (j) / gamma(j + 1) } out <- log(sum) } out } #================================================================================== ild_kendall.shpv <- function(x) { k <- dim(x)[1] h <- defh(k - 1) zz <- h %*% x kendall <- (zz[2:(k - 1), 1] + 1i * zz[2:(k - 1), 2]) / (zz[1, 1] + 1i * zz[1, 2]) kendall <- cbind(Re(kendall), Im(kendall)) kendall } #================================================================================== oneFone <- function(r, x) { #note this is 1F1(-r,1,-x) sum <- 0 for (j in 0:r) { sum <- sum + choose(r, j) * x ** j / gamma(j + 1) } sum } #================================================================================== permutationtest <- function(A, B, nperms = 200) { A1 <- A A2 <- B B <- nperms nsam1 <- dim(A1)[3] nsam2 <- dim(A2)[3] Gtem <- Goodalltest(A1, A2) Htem <- Hotellingtest(A1, A2) Gumc <- Gtem$F Humc <- Htem$F Gtabpval <- Gtem$pval Htabpval <- Htem$pval if (B > 0) { Apool <- array(0, c(dim(A1)[1], dim(A1)[2], dim(A1)[3] + dim(A2)[3])) Apool[, , 1:nsam1] <- A1 Apool[, , (nsam1 + 1):(nsam1 + nsam2)] <- A2 out <- list( H = 0, H.pvalue = 0, H.table.pvalue = 0, G = 0, G.pvalue = 0, G.table.pvalue = 0 ) Gu <- rep(0, times = B) Hu <- rep(0, times = B) cat("Permutations - sampling without replacement: ") cat(c("No of permutations = ", B, "\n")) for (i in 1:B) { cat(c(i, " ")) select <- sample(1:(nsam1 + nsam2)) Gu[i] <- Goodalltest(Apool[, , select[1:nsam1]] , Apool[, , select[(nsam1 + 1):(nsam2 + nsam1)]])$F Hu[i] <- Hotellingtest(Apool[, , select[1:nsam1]], Apool[, , select[(nsam1 + 1):(nsam1 + nsam2)]])$F } Gu <- sort(Gu) numbig <- length(Gu[Gumc < Gu]) pvalG <- (1 + numbig) / (B + 1) Hu <- sort(Hu) numbig <- length(Hu[Humc < Hu]) pvalH <- (1 + numbig) / (B + 1) cat(" \n") out$H <- Humc out$H.pvalue <- pvalH out$H.table.pvalue <- Htabpval out$G <- Gumc out$G.pvalue <- pvalG out$G.table.pvalue <- Gtabpval } if (B == 0) { out <- list( H = 0, H.table.pvalue = 0, G = 0, G.table.pvalue = 0 ) out$H <- Humc out$H.table.pvalue <- Htabpval out$G <- Gumc out$G.table.pvalue <- Gtabpval } out } #================================================================================== permutationtest <- permutationtest2 #================================================================================== frechet <- function(x, mean = "intrinsic") { if (mean == "intrinsic") { option <- 1 } if (mean == "partial.procrustes") { option <- 2 } if (mean == "full.procrustes") { option <- 3 } if (mean == "mle") { option <- 4 } if (is.double(mean)) { if (mean > 0) { option <- -mean } } n <- dim(x)[3] for (i in 1:n) { x[, , i] <- x[, , i] / centroid.size(x[, , i]) } if (option < 4) { pm <- procGPA(x, scale = FALSE, tol1 = 10 ^ (-8))$mshape m <- dim(x)[2] k <- dim(x)[1] ans <- list( mshape = 0, var = 0, code = 0, gradient = 0 ) out <- nlm( objfun, hessian = TRUE, c(pm), uu = x, option = option, iterlim = 1000 ) B <- matrix(out$estimate, k, m) ans$mshape <- procOPA(pm, B)$Bhat ans$var <- out$minimum ans$code <- out$code ans$gradient <- out$gradient } if (option == 4) { pm <- procGPA(x, scale = FALSE, tol1 = 10 ^ (-8))$mshape m <- dim(x)[2] k <- dim(x)[1] if (m == 2) { theta <- c(log(centroid.size(pm) ** 2 / (4 * 0.1 ** 2)), pm) ans <- list( mshape = 0, kappa = 0, code = 0, gradient = 0 ) out <- nlm( objfun4, hessian = TRUE, theta, uu = x, iterlim = 1000 ) B <- matrix(out$estimate[-1], k, m) ans$mshape <- procOPA(pm, B)$Bhat ans$kappa <- exp(out$estimate[1]) ans$loglike <- -out$minimum ans$code <- out$code ans$gradient <- out$gradient } if (m != 2) { print("MLE is only appropriate for planar shapes") } } ans } #================================================================================== objfun <- function(pm, uu, option) { m <- dim(uu)[2] k <- dim(uu)[1] pm <- matrix(pm, k, m) sum <- 0 for (i in 1:dim(uu)[3]) { if (option == 1) { sum <- sum + (riemdist(pm, uu[, , i])) ** 2 } if (option == 2) { sum <- sum + 4 * sin(riemdist(pm, uu[, , i]) / 2) ** 2 } if (option == 3) { sum <- sum + sin(riemdist(pm, uu[, , i])) ** 2 } if (option < 0) { h <- -option sum <- sum + ((1 - cos(riemdist(pm, uu[, , i])) ** (2 * h)) / h) } } sum } #================================================================================== objfun4 <- function(pm, uu) { m <- dim(uu)[2] k <- dim(uu)[1] n <- dim(uu)[3] kappa <- exp(pm[1]) pm <- matrix(pm[-1], k, m) sum <- 0 for (i in 1:n) { sin2rho <- sin(riemdist(pm, uu[, , i])) ** 2 sum <- sum + loneFone(k - 2, 2 * kappa * (1 - sin2rho)) - 2 * kappa * sin2rho } - sum } #================================================================================== MDSshape <- function(x, alpha = 1, projalpha = 1 / 2) { mu <- procGPA(x)$mshape k <- dim(x)[1] n <- dim(x)[3] m <- dim(x)[2] H <- defh(k - 1) sum <- matrix(0, k - 1, k - 1) for (i in 1:n) { Z <- preshape(x[, , i]) if (alpha == 1) { sum <- sum + (Z) %*% t((Z)) } if (alpha == 1 / 2) { ee <- eigen((Z) %*% t((Z)), symmetric = TRUE) sum <- sum + ee$vectors %*% diag(sqrt(abs(ee$values))) %*% t(ee$vectors) } } eig <- eigen(sum / n, symmetric = TRUE) lam <- eig$values if (m == 2) { if (projalpha == 1 / 2) { meanshape <- cbind( t(H) %*% (sqrt(lam[1]) * eig$vectors[, 1]) / sqrt(lam[1] + lam[2]) , -t(H) %*% (sqrt(lam[2]) * eig$vectors[, 2]) / sqrt(lam[1] + lam[2]) ) } if (projalpha == 1) { lambar <- (lam[1] + lam[2]) / 2 meanshape <- cbind(t(H) %*% (sqrt(lam[1] - lambar + 1 / m) * eig$vectors[, 1]) , -t(H) %*% (sqrt(lam[2] - lambar + 1 / m) * eig$vectors[, 2])) } } if (m == 3) { if (projalpha == 1 / 2) { meanshape <- cbind( t(H) %*% (sqrt(lam[1]) * eig$vectors[, 1]) / sqrt(lam[1] + lam[2] + lam[3]) , t(H) %*% (sqrt(lam[2]) * eig$vectors[, 2]) / sqrt(lam[1] + lam[2] + lam[3]), t(H) %*% (sqrt(lam[3]) * eig$vectors[, 3]) / sqrt(lam[1] + lam[2] + lam[3]) ) } if (projalpha == 1) { lambar <- (lam[1] + lam[2] + lam[3]) / 3 meanshape <- cbind( t(H) %*% (sqrt(abs( lam[1] - lambar + 1 / m )) * eig$vectors[, 1]) , t(H) %*% (sqrt(abs( lam[2] - lambar + 1 / m )) * eig$vectors[, 2]) , t(H) %*% (sqrt(abs( lam[3] - lambar + 1 / m )) * eig$vectors[, 3]) ) } } if (riemdist(meanshape, mu) > riemdist(meanshape, mu, reflect = TRUE)) { meanshape[, m] <- -meanshape[, m] } meanshape } ################################################################################################ #The Procrustes routines in the next part were initially # written by Mohammad Faghihi (University of Leeds) 1993, although many improvements, corrections, # and speed-ups have been done since then. # add(a3) compute the summation of a3[,,i]'s # bgpa(a3) compute the scaling coefficients (bi's) # close1(a) adds one additional row to matrix a that is the same as the first row # cnt3(a3) replace each a3[ , , i] by fcnt(a3[ , , i]) # del(po, w1) plots point of po and joins them by contiguity matrix w1. # dif(a3) compute sum( tr (xi-xj)'(xi-xj) )/n^2 for i kk) { # qq<-diag(cov(vec1(zd))) qq <- rep(0, times = nn) for (i in 1:n) { qq[i] <- var(omat[i, ]) * (n - 1) / n omat[i, ] <- omat[i, ] - mean(omat[i, ]) } omat <- diag(sqrt(1 / qq)) %*% omat n <- kk Lmat <- t(omat) %*% omat / n eig <- eigen(Lmat, symmetric = TRUE) U <- eig$vectors lambda <- eig$values V <- omat %*% U vv <- rep(0, times = n) for (i in 1:n) { vv[i] <- sqrt(t(V[, i]) %*% V[, i]) V[, i] <- V[, i] / vv[i] } delta <- sqrt(abs(lambda / n)) * vv od <- order(delta, decreasing = TRUE) delta <- delta[od] V <- V[, od] h <- sqrt(s / aa) * V[, 1] } if (kk >= nn) { zz <- cor(vec1(zd)) h <- sqrt(s / aa) * eigen(zz)$vectors[, 1] } h <- abs(h) return(h) } #================================================================================== close1 <- function(a) { a1 <- matrix(0:0, nrow = dim(a)[1] + 1, ncol = dim(a)[2]) for (i in 1:dim(a)[1]) { a1[i,] <- a[i,] } a1[dim(a)[1] + 1,] <- a[1,] a1 } #================================================================================== cnt3 <- function(a3) { #zz <- array(c(0:0), dim = c(dim(a3)[1], dim(a3)[2], dim(a3)[3])) #for(i in 1:dim(a3)[3]) { #zz[, , i] <- fcnt(a3[, , i]) #} zz <- apply(a3, 3, fcnt) zz <- array(zz, dim(a3)) return(zz) } #================================================================================== del <- function(po, w1) { plot(po, type = "n", xlab = "x", ylab = "y") text(po) n <- dim(po)[1] for (i in 1:n) { for (j in i:n) { if (w1[i, j] > 0) { a1 <- c(po[i, 1], po[j, 1]) b1 <- c(po[i, 2], po[j, 2]) lines(a1, b1) } } } } #================================================================================== dis <- function(a, b, c) { d <- 0 d[1] <- sqrt((a[1] - b[1]) ^ 2 + (a[2] - b[2]) ^ 2) d[2] <- sqrt((a[1] - c[1]) ^ 2 + (a[2] - c[2]) ^ 2) d[3] <- sqrt((c[1] - b[1]) ^ 2 + (c[2] - b[2]) ^ 2) d } #================================================================================== dif.old <- function(a3) { s <- 0 for (i in 1:(dim(a3)[3] - 1)) { for (j in (i + 1):dim(a3)[3]) { s <- s + ((Enorm(a3[, , i] - a3[, , j])) ^ 2) } } return(s) } #dif<-function(a3) #original (slow) version #{ # s <- 0 #n<-dim(a3)[3] #mshape<-add(a3)/n #psum<-0 #for (i in 1:n){ #x<-a3[,,i]-mshape #psum<-psum+sum(diag(t(x)%*%x)) #} #psum*n #} #dif<-function(a3) ##faster version #{ #x<-sweep(a3,c(1,2),apply(a3,c(1,2),mean)) #z<-Enorm(as.vector(x))^2/dim(a3)[3] #z #} #================================================================================== dif <- function (a3) { #version that does not depend on scale of original measurements # assumes already centred cc <- centroid.size(add(a3) / dim(a3)[3]) x <- sweep(a3, c(1, 2), apply(a3, c(1, 2), mean)) z <- Enorm(as.vector(x) / cc) ^ 2 / dim(a3)[3] z } #================================================================================== fJ <- function(n) { zz <- matrix(1:1, n, n) H <- diag(n) - (1 / n) * zz H } #================================================================================== fcel <- function(n, d) { v <- ceiling(sqrt(n)) p <- matrix(c(0:0), n, 2) for (i in 1:v) { for (j in 1:v) { if ((v * (i - 1) + j) < (n + 1)) { p[(v * (i - 1) + j), 1] <- (d / 4) * (-1) ^ i + (d * j) p[(v * (i - 1) + j), 2] <- i * ((d * sqrt(3)) / 2) } } } p } #================================================================================== fcnt <- function(a) { aa <- fJ(dim(a)[1]) %*% a aa } #================================================================================== fgpa.singleiteration <- function(a3, p) { # Note this is an approximation to GPA - # It carries out an initial match by optimally rotating all the data, # the rescaling the observations, then rotating the observations # NB it does not repeat this until convergence, but in practice # for many real datasets this gives an excellent registration # zd <- list( rot. = 0, r.s.r. = 0, Gpa = 0, I.no. = 0, mshape = 0 ) zd$rot. <- rgpa(a3, p) zz <- rgpa(sgpa(zd$rot.$rotated), p) zd$r.s.r. <- zz$rotated zd$Gpa <- zz$dif zd$I.no. <- zz$r.no. zd$mshape <- msh(zd$r.s.r.) return(zd) } #================================================================================== fgpa <- function(a3, tol1, tol2, proc.output = FALSE, reflect = FALSE) { # # Fully iterative fgpa (now assumes a3 is already centred) # # zd <- list( rot. = 0, r.s.r. = 0, Gpa = 0, I.no. = 0, mshape = 0 ) p <- tol1 if (proc.output) { cat(" Step | Objective function | change \n") } if (proc.output) { cat("---------------------------------------------------\n") } x1 <- dif(a3) if (proc.output) { cat("Initial objective fn", x1, " - \n") } if (proc.output) { cat("-----------------------------------------\n") } zz <- rgpa(a3, p, proc.output = proc.output, reflect = reflect) x2 <- dif(zz$rotated) if (proc.output) { cat("Rotation step 0", x2, x1 - x2, " \n") } if (proc.output) { cat("-----------------------------------------\n") } ii <- 1 zz <- rgpa( sgpa(zz$rotated, proc.output = proc.output), p, proc.output = proc.output, reflect = reflect ) x1 <- x2 x2 <- dif(zz$rotated) rho <- x1 - x2 if (proc.output) { cat("Scale/rotate step ", ii, x2, rho, " \n") } if (proc.output) { cat("-----------------------------------------\n") } if (rho > tol2) { while (rho > tol2) { x1 <- x2 ii <- ii + 1 zz <- rgpa( sgpa(zz$rotated, proc.output = proc.output), p, proc.output = proc.output, reflect = reflect ) x2 <- dif(zz$rotated) rho <- x1 - x2 if (proc.output) { cat("Scale/rotate step ", ii, x2, rho, " \n") } if (proc.output) { cat("-----------------------------------------\n") } } } zd$r.s.r. <- zz$rotated zd$Gpa <- zz$dif zd$I.no. <- ii zd$mshape <- msh(zd$r.s.r.) return(zd) } #================================================================================== fgpa.rot <- function(a3, tol1, tol2, proc.output = FALSE, reflect = FALSE) { # Assumes that a3 has been centred already zd <- list( rot. = 0, r.s.r. = 0, Gpa = 0, I.no. = 0, mshape = 0 ) p <- tol1 zz <- rgpa(a3, p, proc.output = proc.output, reflect = reflect) x1 <- msh(zz$rotated) ii <- zz$r.no. # zz <- rgpa(zz$rotated, p,proc.output=proc.output,reflect=reflect) #x2<-msh(zz$rotated) #rho<-riemdist(x1,x2) # while (rho > tol2){ #print(rho) #x1<-x2 #ii<-ii+1 # zz <- rgpa(zz$rotated, p,proc.output=proc.output) # x2<-msh(zz$rotated) #rho<-riemdist(x1,x2) # } zd$r.s.r. <- zz$rotated zd$Gpa <- zz$dif zd$I.no. <- ii zd$mshape <- msh(zd$r.s.r.) return(zd) } #================================================================================== fopa <- function(a, b) { abar <- fcnt(a) bbar <- fcnt(b) q1 <- sum(diag(abar %*% t(abar))) q2 <- fos(a, b) ^ 2 * sum(diag(bbar %*% t(bbar))) q3 <- 2 * fos(a, b) * sum(diag(fort(a, b) %*% t(abar) %*% bbar)) gs <- q1 + q2 - q3 gs } #================================================================================== fort.ROTATEANDREFLECT <- function(a, b) { x <- t(fcnt(a)) %*% fcnt(b) xsvd <- svd(x) t <- xsvd$v %*% t(xsvd$u) return(t) } #================================================================================== fos.REFLECT <- function(a, b) { abar <- fcnt(a) bbar <- fcnt(b) z <- ftrsq(abar, bbar) / sum(diag(t(bbar) %*% bbar)) z } #================================================================================== fos <- function (a, b) { z <- cos(riemdist(a, b)) * centroid.size(a) / centroid.size(b) z } #================================================================================== ftrsq <- function(a, b) { z <- sum(sqrt(abs(eigen( t(b) %*% a %*% t(a) %*% b )$values))) z } #================================================================================== graf <- function(a3) { l <- 0 xmin <- 0 xmax <- 0 ymin <- 0 ymax <- 0 for (i in 1:dim(a3)[3]) { xmin[i] <- min(a3[, 1, i]) xmax[i] <- max(a3[, 1, i]) ymin[i] <- min(a3[, 2, i]) ymax[i] <- max(a3[, 2, i]) } l <- c(min(xmin), min(ymin), max(xmax), max(ymax)) plot((min(l) - 1):(max(l) + 1), (min(l) - 1):(max(l) + 1), type = "n") for (i in 1:dim(a3)[3]) { lines(close1(a3[, , i])) } } #================================================================================== msh <- function(a3) { s <- 0 # print("finding mean shape") m <- apply(a3, c(1, 2), mean) # print("found mean shape") # for(i in 1:dim(a3)[3]) { # s <- s + a3[, , i] # } # m <- (1/dim(a3)[3]) * s return(m) } #Enorm<-function(a) #{ # return(sqrt(sum(diag(t(a) %*% a)))) #} #================================================================================== rgpa <- function(a3, p, reflect = FALSE, proc.output = FALSE) { # assumes a3 already centred now if (reflect == TRUE) { fort <- fort.ROTATEANDREFLECT } zd <- list( rotated = 0, dif = 0, r.no. = 0, inc = 0 ) l <- dim(a3)[3] a <- 0 d <- 0 n <- 0 # zz <- cnt3(a3) zz <- a3 # print("Rotations ...") # print("Iteration,meanSS before,meanSS after,difference,tolerance") d[1] <- 10 ^ 12 d[2] <- dif(zz) a[1] <- d[2] s <- add(zz) # print(c(d[1],d[2])) if (dif(zz) > p) { while (d[1] - d[2] > p) { n <- n + 1 d[1] <- d[2] for (i in 1:l) { old <- zz[, , i] zz[, , i] <- old %*% fort(((1 / (l - 1)) * (s - old)), old) s <- s - old + zz[, , i] } d[2] <- dif(zz) a[n + 1] <- d[2] # print(c(n,d[1],d[2],d[1]-d[2],p)) if (proc.output) { cat(" Rotation iteration ", n, d[2], d[1] - d[2], " \n") } } } zd$rotated <- zz zd$dif <- a zd$r.no. <- n zd$inc <- d[1] - d[2] if (proc.output) { cat("-----------------------------------------\n") } fort <- fort.ROTATION return(zd) } # sgpa<-function(a3) #{ # zz <- a3 # a <- bgpa(zz) # for(i in 1:dim(a3)[3]) { # zz[, , i] <- a[i] * a3[, , i] # } # return(zz) #} #================================================================================== sgpa <- function(a3, proc.output = FALSE) { #assumes a3 is centred zz <- a3 di <- dim(a3) a <- bgpa(zz, proc.output = proc.output) i <- rep(dim(a3)[1] * dim(a3)[2], dim(a3)[3]) sequen <- rep(a, i) zz <- array(as.vector(a3) * sequen, di) if (proc.output) { cat(" Scaling updated \n") } return(zz) } #================================================================================== sh <- function(a) { u1 <- (a[2, 1] - a[1, 1]) / sqrt(2) u2 <- (a[2, 2] - a[1, 2]) / sqrt(2) v1 <- (2 * a[3, 1] - a[2, 1] - a[1, 1]) / sqrt(6) v2 <- (2 * a[3, 2] - a[2, 2] - a[1, 2]) / sqrt(6) d <- c(0, 0) d[1] <- (u1 * v1 + u2 * v2) / (u1 ^ 2 + u2 ^ 2) d[2] <- (u1 * v2 - u2 * v1) / (u1 ^ 2 + u2 ^ 2) d } #================================================================================== sim1 <- function(n, d, s) { a <- fcel(n, d) sig <- matrix(c(1:1), n, 1)[, 1] sig <- sig * s b <- a b[, 1] <- rnorm(n, mean = a[, 1], sd = sig) b[, 2] <- rnorm(n, mean = a[, 2], sd = sig) b } #================================================================================== vec1 <- function(a3) { #zz <- array(c(0:0), dim = c((dim(a3)[1] * dim(a3)[2]), dim(a3)[3])) #for(i in 1:dim(a3)[3]) { #for(j in 1:dim(a3)[2]) { #for(k in 1:dim(a3)[1]) { #zz[((j - 1) * dim(a3)[1] + k), i] <- a3[k, j, i #] #} #} #} zz <- matrix(a3, dim(a3)[1] * dim(a3)[2], dim(a3)[3]) return(zz) } #================================================================================== fort.ROTATION <- function(a, b) { x <- t(fcnt(a)) %*% fcnt(b) xsvd <- svd(x) v <- xsvd$v u <- xsvd$u tt <- v %*% t(u) chk1 <- Re(prod(eigen(v)$values)) chk2 <- Re(prod(eigen(u)$values)) if ((chk1 < 0) && (chk2 > 0)) { v[, dim(v)[2]] <- v[, dim(v)[2]] * (-1) tt <- v %*% t(u) } if ((chk2 < 0) && (chk1 > 0)) { u[, dim(u)[2]] <- u[, dim(u)[2]] * (-1) tt <- v %*% t(u) } return(tt) } ############end of Mohammad Faghihi's (adapted) routines #alias functions (all lower-case) hotelling2d <- Hotelling2D hotellingtest <- Hotellingtest procrustesgpa <- procrustesGPA goodall2d <- Goodall2D goodalltest <- Goodalltest # alias TPSgrid <- tpsgrid #if you wish the default to *not* include reflection #invariance (as is normal in shape analysis) then you need the line below. fort <- fort.ROTATION ################################################################################ # # Datasets # ################################################################################ #================================================================================== # Gorillas #================================================================================== gorf.dat<-array(c(5,193,53,-27,0,0,0,33,-2,105,18,176,72,114,92,38 ,51,191,55,-31,0,0,0,33,25,106,56,171,98,105,99,15 ,36,187,59,-31,0,0,0,36,12,102,38,171,91,103,100,19 ,23,202,48,-30,0,0,0,39,3,103,33,180,84,112,94,28 ,30,185,62,-25,0,0,0,32,11,101,37,168,85,106,96,21 ,4,195,65,-21,0,0,0,34,-4,100,15,180,69,120,102,34 ,37,195,62,-32,0,0,0,35,20,101,50,173,102,105,105,22 ,41,191,58,-34,0,0,0,34,15,100,47,175,93,105,99,18 ,40,190,52,-33,0,0,0,38,13,107,44,176,88,113,102,31 ,-4,179,62,-21,0,0,0,29,1,89,9,164,70,111,100,36 ,41,206,53,-25,0,0,0,39,11,104,47,177,95,111,95,26 ,33,197,55,-30,0,0,0,35,7,106,39,175,89,111,95,24 ,-12,205,52,-15,0,0,0,38,-10,111,4,187,66,129,80,44 ,13,186,56,-32,0,0,0,34,8,101,25,166,80,105,97,26 ,20,186,45,-31,0,0,0,34,10,96,31,165,84,104,90,19 ,29,183,55,-31,0,0,0,32,10,98,39,163,82,106,95,17 ,11,203,57,-28,0,0,0,39,-2,106,23,182,77,122,100,36 ,37,187,54,-27,0,0,0,34,11,100,43,171,84,106,93,28 ,49,191,53,-31,0,0,0,35,21,102,54,172,94,98,99,18 ,-8,191,57,-34,0,0,0,32,-7,93,6,173,71,119,101,30 ,43,184,49,-32,0,0,0,33,14,100,49,165,91,99,98,20 ,57,185,62,-37,0,0,0,35,22,103,61,169,96,100,104,24 ,-10,196,55,-20,0,0,0,38,-10,107,5,181,73,123,88,46 ,20,195,60,-28,0,0,0,32,6,101,33,173,84,114,100,30 ,35,202,59,-27,0,0,0,34,6,108,41,182,83,117,99,31 ,1,188,60,-19,0,0,0,35,-2,99,12,170,70,119,93,45 ,24,194,52,-24,0,0,0,39,8,105,34,174,80,115,95,32 ,25,204,55,-27,0,0,0,34,7,108,35,185,83,118,92,32 ,36,198,47,-30,0,0,0,39,14,110,43,177,92,105,98,25 ,8,198,53,-35,0,0,0,34,4,101,22,175,82,111,100,24),c(2,8,30)) gorf.dat<-aperm(gorf.dat,c(2,1,3)) gorm.dat<-array(c(53,220,46,-35,0,0,0,37,12,122,58,204,93,117,103,28 ,57,219,50,-43,0,0,0,37,13,119,61,198,102,110,104,20 ,89,227,52,-47,0,0,0,32,35,120,93,201,131,92,104,4 ,46,222,51,-45,0,0,0,30,11,113,54,196,101,117,101,16 ,85,220,48,-38,0,0,0,39,28,125,87,203,121,106,103,7 ,64,208,43,-39,0,0,0,36,22,111,67,191,104,102,101,18 ,67,216,51,-37,0,0,0,35,17,119,68,191,108,109,94,15 ,35,236,61,-42,0,0,0,33,2,119,43,211,90,126,104,30 ,116,218,40,-38,0,0,0,41,41,124,116,201,133,94,103,12 ,56,234,60,-34,0,0,0,34,12,121,58,215,109,119,112,28 ,40,223,58,-36,0,0,0,34,9,113,46,202,97,120,112,24 ,94,223,49,-57,0,0,0,33,31,122,94,206,136,99,113,-1 ,68,222,59,-41,0,0,0,30,18,119,68,204,104,114,98,11 ,65,224,56,-33,0,0,0,35,15,130,67,205,108,115,95,20 ,67,214,52,-47,0,0,0,36,26,115,74,192,114,105,104,11 ,110,213,52,-46,0,0,0,37,42,121,109,190,133,97,108,-8 ,46,219,50,-42,0,0,0,36,11,121,56,199,104,108,102,21 ,79,209,66,-43,0,0,0,35,24,114,84,193,108,115,109,14 ,58,244,74,-22,0,0,0,37,7,131,64,219,98,128,100,29 ,43,236,64,-43,0,0,0,33,12,124,52,215,110,121,105,7 ,70,226,54,-37,0,0,0,39,28,121,74,204,122,105,107,7 ,68,224,55,-37,0,0,0,35,18,121,71,207,109,108,98,13 ,34,247,63,-35,0,0,0,35,4,124,45,225,104,135,110,29 ,49,236,59,-40,0,0,0,38,19,127,59,219,105,121,109,25 ,98,195,44,-44,0,0,0,36,30,116,98,177,121,89,105,10 ,109,208,49,-40,0,0,0,36,29,125,105,189,120,102,102,12 ,61,224,51,-35,0,0,0,41,15,122,67,206,107,121,103,25 ,43,213,49,-57,0,0,0,28,20,111,58,194,112,106,108,6 ,26,249,67,-14,0,0,0,38,-11,130,33,225,87,148,97,53),c(2,8,29)) gorm.dat<-aperm(gorm.dat,c(2,1,3)) #================================================================================== # mice #================================================================================== qset2.dat<-array(c(117.98,219.62,114.52,41.93,166.15,113.59,206.54,121.79,165.11,142.92,62.07,136.58 ,105.52,235.08,109.96,57.31,165.44,126.42,223.05,140.88,169.58,156.83,59.5,138.02 ,142.83,222,132.08,40.2,188.8,115.39,236.9,125.08,193.18,142.22,83.37,141.47 ,126.35,204.27,113.2,36.04,171.77,102.43,228.93,111.75,173.55,131.8,66.26,126.65 ,99.11,231.52,119.58,44.52,169.28,129.51,219.93,141.98,167.65,154.41,56.83,141.64 ,134.14,228.48,129.09,56.98,175.85,125.39,217.57,138.01,179.29,152.67,73.84,153.08 ,119.8,219.48,122.36,48.52,171.44,115.58,216.57,131.13,170.86,148.36,65.8,138.8 ,105.62,222.74,96.27,51.3,152.13,119.07,205.02,131.95,157.36,141.61,52.35,142.73 ,122.15,202.41,128.75,32.09,176.88,102.84,220.81,119.41,177.78,131.04,76.65,120.61 ,127.78,223.48,117.65,53.94,183.45,123.87,236.96,133.84,184.24,149.04,77.96,149.95 ,123.4,200.6,116.57,28.43,172.67,97.33,221.34,106.24,175.29,122.05,64.69,115.53 ,132.4,227.96,127.46,50.4,171.57,118.67,203.72,131.91,175.25,152.38,71.98,138.5 ,123.39,216.23,113.96,29.9,167.68,105.58,202.15,114.18,172.01,133.8,65.78,125.86 ,136.83,207.84,117.37,33.67,178.1,100.65,233.17,111.44,184.05,124.85,69.8,129.69 ,143.31,219.71,122.1,48.08,177.23,113.52,221.38,122.32,180.86,140.87,80.11,151.72 ,105.96,218.06,100.46,48.73,155.23,119.51,217.76,130.01,159.11,145.49,51.29,139.66 ,115.73,234.14,115.74,56.11,168.42,128.73,220.32,135.6,169.4,154.65,66.02,152.32 ,101.73,215.74,102.67,35.73,151.69,110.19,199.12,120.24,151.6,136.36,48.82,132.42 ,124.93,222.42,130.09,46.89,163.86,118.81,197.76,137.59,165.11,148.92,67.45,139.67 ,104.68,231.95,88.17,53.4,150.87,128.76,203.38,143.96,151.59,152.11,41.85,151.15 ,123.93,242.1,121.99,64.08,175.47,143.77,211.56,155.4,173.07,164.91,68.98,158.26 ,137.21,207.27,130.76,34.56,188.92,105.07,242.85,109.74,187.67,127.43,80.29,127.14 ,107.35,212.21,89.5,38.88,151.63,105.73,196.56,113.82,152.69,133.73,46.53,135.99),c(2,6,23)) qset2.dat<-aperm(qset2.dat,c(2,1,3)) qcet2.dat<-array(c(168.59,35.66,159.99,215.17,104.93,141.07,49.01,115.13,101.69,110.87,227.11,120.51 ,165,38.35,163.89,214.32,108.26,144.79,50.17,124.02,103.5,113.13,220.43,122.65 ,166.97,39.44,163.63,221.62,108.18,147.07,54.11,137.43,109.15,118.11,227.89,128.32 ,164.02,44.22,171.76,237.29,95.93,161.44,32,131.85,95.91,126.54,222.54,133.51 ,153.46,40.67,156.62,225.12,103.81,152.44,43.65,139.01,99.95,120.7,216.62,132.9 ,148.3,52.66,147.61,239.16,90.37,164.39,32.39,145.13,88.1,130.85,209.22,145.88 ,141.33,32.7,128.49,215.09,71.39,135.31,18.32,115.62,77.48,102.92,186.28,125.49 ,130.21,18.71,136.38,201.17,68.85,125.19,11.43,94.64,64.22,90.83,184.64,107 ,130,26.8,134.24,217.41,77.07,141.93,14.66,122.68,74.56,105.14,189.9,109.31 ,134.99,22.44,116.08,205.87,74.69,130.05,22.18,96.09,68.08,95.91,185.97,115.99 ,146.87,22.6,111.5,201.74,77.67,124.1,23.04,97.03,80.91,85.93,192.2,118.4 ,146.26,23.38,119.94,209.46,75.94,125.31,19.72,100.92,82.97,87.47,192.22,109.63 ,138.32,25.44,119.25,208.88,71.18,133.17,16.68,103.45,69.21,98.08,178.43,123.71 ,142.57,19.25,99.1,197.59,62.7,111.06,3.94,86.78,69.17,79.06,180.48,117.38 ,144.57,21.44,129,204.76,80.93,121.11,18.96,103.58,82.35,90.59,191.23,111.98 ,137.6,19.71,120.16,214.71,77.7,128.06,16.08,102.22,73.54,90.19,193.21,118.14 ,123.81,22.67,118.93,207.44,73.63,129.11,4.94,104.21,71.72,100.35,191.62,119.61 ,131.1,28.64,94.82,211.86,59.44,129.47,3.89,102.71,70.28,95.52,178.71,131.69 ,155.84,22.41,112.53,207.45,68.64,118.65,8.37,97.65,78.78,85.28,184.6,114.92 ,174.04,27.44,108.13,202.49,80.74,111.51,20.1,79.49,96.21,80.84,205.25,127.23 ,127.85,20.44,119.59,208.01,61.98,125.83,4.2,112.66,80.06,90.68,182.45,108.83 ,146.48,28.36,113.82,214.92,75.14,127.12,14.06,98.64,81.57,96.68,198.33,125.63 ,139.46,33.99,99.48,220.24,73.24,135.58,8.99,105,75.01,103.38,191.51,135.63 ,152.27,30.86,138.67,226.92,91.78,137.46,24.93,121.51,92.28,107.03,216.37,131.07 ,139.15,28.78,133.63,210.56,88.84,131.16,26.42,112.92,87.97,99.71,201.01,119.24 ,153.32,20.49,109.35,201.5,76.58,109.87,10.91,91.13,74.45,85.03,183.14,119.64 ,166.02,23.04,140.31,215.68,91.82,128.43,26.01,109.78,94.61,99.14,212.09,119.48 ,127.79,22.26,136.79,202.76,89.87,131.73,26.63,113.72,88.85,90.81,198.88,105.03 ,169.22,26.47,158.71,210.32,102.37,134.39,30.64,108.87,100.56,97.55,220.44,125.16 ,146.88,23.83,116.78,218.55,84.03,132.22,25.08,111.84,89.31,94.31,194.7,129.03), c(2,6,30)) qcet2.dat<-aperm(qcet2.dat,c(2,1,3)) qlet2.dat<-array(c(134.26,224.28,122.34,36.86,174.35,111.24,235.79,127.9,174.49,142.43,51.5,141.89 ,139.29,231.38,80.82,47.82,159.37,105.97,236.93,120.91,162.59,139.69,39.92,163.16 ,151.57,219.95,104.42,49.26,162.95,105.68,241.12,123.23,181.45,133.49,60.47,151.83 ,146.16,231.16,95.78,46.87,170.85,111.77,234.72,109.48,178.8,140.05,56.79,157.8 ,150.16,222.81,81.59,53.08,161.66,102.76,238.7,94,173.74,131.99,42.42,166.01 ,134.04,218.32,84.43,40.37,155.91,104.39,227.07,112.75,163.69,135.45,45.04,154 ,141,221.6,98.86,46.69,160.43,112.77,218.15,114.61,162.83,136.17,37.06,153.86 ,123.63,231.23,66.42,46.17,140.02,108.31,217.82,118,147.98,137.78,25.35,159.24 ,137.62,226.64,96.5,39.64,164.59,105.39,235.04,102.87,169.37,134.5,46.83,150.8 ,173.79,206.17,90.39,27.9,161.84,84.83,234.85,91.6,180.59,110.28,55.57,160.27 ,117.39,233.75,114.47,42.63,167.1,124.53,229.45,135.47,167.66,150.42,40.92,142.56 ,131.55,225.48,102.05,26.81,161.73,103.06,244.48,115.44,170.49,133.86,38.65,144.13 ,134.78,226.28,110.56,41.28,170.17,112.5,231.45,114.1,176.5,139.26,51.28,145.88 ,115.95,227.77,85.99,46.33,156.48,111.17,220.59,117.43,161.6,140.85,43.06,154.56 ,133.09,226.95,99.38,40.42,160.22,111.1,236.36,117.74,168.23,138.63,44.79,149.37 ,125.36,216.11,93.92,36.95,161.42,103.33,220.04,104.98,165.19,129.44,43.48,133.74 ,123.1,202.86,99.27,42.82,157.22,98.93,206.46,111.18,162.05,129.3,64.39,123.39 ,121.37,217.11,108.09,34.09,155.47,105.03,214.66,121.61,160.24,135.04,48.64,133.8 ,120.54,232.1,85.37,53.23,157.81,109.98,213.66,117.86,169.01,146.01,38.88,151.63 ,126.42,222.64,82.96,46.57,157.34,100.52,218.67,101.9,165.27,131.51,42.51,147.56 ,126.91,220.11,105.38,35.76,158.15,109.6,207.12,117.23,160.11,138.72,40.17,142.75 ,117.87,227.17,113.96,49.9,163.19,119.44,228.16,124.54,163.3,152.93,42.17,141.99 ,125.23,224.48,93.4,39.47,166.22,109.39,234.83,108.47,165.65,139.89,42.06,144.54), c(2,6,23)) qlet2.dat<-aperm(qlet2.dat,c(2,1,3)) #================================================================================== digit3.dat<-c(9,27,12,31,17,36,26,39,34,37,36,33,38,27,35,19,30,15,21,14,21,8,16,6,8,5 ,17,40,21,38,26,36,27,32,25,28,22,27,19,29,24,25,26,20,28,16,26,13,18,14,15,17 ,19,38,24,38,29,33,30,29,27,24,21,25,17,26,27,24,30,22,31,19,31,16,27,15,24,15 ,9,40,15,43,24,41,29,36,24,30,20,26,12,22,20,22,24,20,21,16,18,14,13,12,9,10 ,14,41,21,42,29,42,35,37,32,33,26,30,16,26,25,26,29,24,33,20,30,16,23,11,16,12 ,24,39,28,40,35,38,38,35,34,30,29,27,22,24,27,24,29,22,31,19,28,15,20,11,13,12 ,9,39,15,39,21,40,25,36,23,31,21,27,19,25,21,25,23,24,25,22,22,19,15,17,8,17 ,8,38,14,41,25,43,29,38,25,33,18,29,8,28,12,27,16,25,18,23,13,21,7,21,1,22 ,4,34,12,39,22,42,31,36,27,30,23,28,11,25,20,25,22,24,22,22,19,19,13,18,8,18 ,21,36,25,37,31,36,33,32,32,28,29,25,27,22,29,21,31,20,31,18,28,16,24,16,20,16 ,14,40,20,39,25,37,27,31,26,28,20,29,16,31,21,28,25,23,28,16,25,13,17,15,13,18 ,12,40,20,42,30,42,36,33,31,24,23,22,16,23,25,22,31,18,33,13,31,9,24,8,17,8 ,9,35,17,36,26,34,30,31,26,27,20,25,13,27,19,25,23,21,26,15,22,12,12,12,7,13 ,17,38,24,39,30,37,34,34,31,28,22,25,16,28,21,26,27,24,30,20,26,15,18,14,10,17 ,21,35,27,36,36,35,39,28,38,22,34,18,28,19,31,18,33,17,31,15,26,15,20,17,14,20 ,16,40,20,43,25,39,27,31,24,24,19,21,17,23,19,22,21,21,23,21,22,18,19,16,15,16 ,15,41,21,45,34,44,40,39,36,35,26,30,16,29,24,25,28,20,31,16,28,14,21,14,12,12 ,11,42,22,42,32,39,35,34,32,29,25,26,20,27,25,26,31,23,35,19,31,14,21,12,16,15 ,5,44,15,43,24,41,29,36,22,28,13,28,5,29,14,28,24,26,29,22,26,19,17,17,10,20 ,14,37,19,39,25,38,28,32,25,26,20,22,14,23,17,23,21,20,23,17,21,15,16,15,11,15 ,16,35,22,38,30,36,32,29,29,23,23,20,17,20,20,19,24,17,26,14,21,11,16,12,12,15 ,14,38,17,40,25,42,28,38,27,32,24,28,20,25,23,25,26,24,28,21,24,18,18,17,10,18 ,7,40,13,43,22,45,31,42,27,38,21,34,13,32,18,31,24,30,27,27,23,23,15,22,6,22 ,14,35,21,36,26,34,31,30,28,26,25,22,21,18,21,17,22,16,23,15,20,12,13,10,5,10 ,10,46,17,47,27,43,29,36,26,30,22,29,16,28,20,27,21,25,23,21,21,19,15,20,9,20 ,18,39,24,42,33,41,38,35,37,30,32,28,28,27,33,22,37,18,41,15,37,13,29,11,21,12 ,18,38,22,42,30,42,34,36,33,32,29,30,22,28,25,26,28,24,28,20,27,19,22,18,18,18 ,9,41,17,43,30,40,34,31,30,23,23,19,11,19,15,17,18,13,21,10,17,8,12,7,5,7 ,8,36,12,42,20,43,25,38,24,35,23,33,21,32,20,31,20,30,20,27,16,25,9,24,2,25 ,19,41,24,45,33,45,38,38,36,31,28,27,21,23,24,22,26,20,28,17,26,14,20,13,14,11) digit3.dat<-array(digit3.dat,c(2,13,30)) digit3.dat<-aperm(digit3.dat,c(2,1,3)) digit3.dat[,2,]<- -digit3.dat[,2,] #================================================================================== dna.dat<-array(c(23.825,12.021,13.002,25.742,18.923,13.225,22.784,25.153,15.445,17.418 ,28.811,17.309,12.468,29.084,21.876,8.439,26.152,26.442,5.606,21.087 ,29.894,6.200,14.944,33.112,8.585,12.034,38.280,14.445,8.903,39.890 ,20.638,10.881,42.477,21.716,27.837,44.502,24.662,23.765,40.767,25.795 ,17.985,37.076,24.130,12.686,33.111,20.240,10.380,28.222,14.758,7.779 ,24.003,9.126,10.368,21.474,7.514,14.143,16.620,5.636,20.061,13.796 ,9.181,24.591,9.975,15.219,27.372,7.792 ,24.426,12.320,12.815,25.129,18.383,14.600,22.555,25.151,16.215,17.277 ,28.975,17.620,12.170,28.852,22.133,7.779,25.623,26.239,5.167,20.176 ,30.154,6.302,14.201,32.961,8.863,11.842,38.282,15.019,9.028,40.102 ,21.051,10.202,42.586,22.535,27.544,45.013,24.570,23.693,40.375,25.299 ,18.777,35.736,23.716,12.495,33.049,19.815,9.500,29.441,13.961,7.614 ,25.021,9.187,10.748,21.303,7.266,14.440,16.882,5.328,20.518,13.417 ,9.450,24.724,9.887,16.128,27.037,7.757 ,24.824,12.355,12.721,25.459,18.787,14.482,22.545,24.678,16.606,17.068 ,28.216,18.062,11.696,28.643,22.449,7.256,25.495,26.539,4.443,20.008 ,29.999,5.302,14.541,33.584,8.475,12.111,38.538,14.696,9.392,40.333 ,21.118,10.517,42.136,23.203,27.877,44.420,25.594,23.483,39.833,25.459 ,18.596,35.894,23.239,12.499,33.283,19.753,10.123,28.758,14.685,7.357 ,24.571,9.730,10.141,20.369,7.686,14.172,15.883,5.535,20.148,13.033 ,9.722,25.009,10.287,16.126,27.525,8.623 ,24.562,12.271,12.907,25.641,18.820,14.322,22.811,24.763,17.048,17.248 ,28.619,18.489,11.519,27.989,22.598,8.070,25.157,27.032,3.894,19.924 ,29.213,5.220,15.143,33.490,8.348,12.542,38.506,14.119,9.535,40.897 ,20.276,10.987,42.136,23.192,28.071,44.539,25.274,23.775,39.509,25.630 ,18.350,35.879,23.652,12.505,32.860,19.781,9.775,28.642,14.454,6.712 ,24.583,9.440,9.756,20.462,7.865,14.225,16.493,5.837,20.340,13.680 ,9.425,25.287,10.594,15.637,27.792,8.320 ,24.498,12.655,13.535,26.012,19.043,14.582,22.839,24.695,17.030,17.673 ,28.305,18.898,12.275,28.466,22.641,7.960,25.669,26.958,4.000,20.256 ,29.476,5.319,15.623,33.821,8.755,12.476,38.043,14.771,9.263,39.758 ,20.522,10.340,41.694,22.720,27.780,45.260,25.492,23.558,40.577,25.904 ,18.294,35.791,23.664,13.116,32.898,19.581,9.743,29.357,14.351,7.149 ,25.092,10.135,9.427,20.128,7.067,13.562,15.964,5.322,20.148,13.918 ,9.684,24.717,10.987,15.626,27.045,8.706 ,24.253,12.608,13.053,25.931,19.065,13.470,23.190,24.682,16.697,17.355 ,28.266,18.178,11.941,28.445,21.624,8.302,26.165,26.289,4.645,20.902 ,29.472,5.834,15.445,33.346,9.014,13.039,38.182,14.821,8.706,39.192 ,20.416,10.356,42.138,21.676,27.355,45.520,25.249,22.900,41.575,26.118 ,18.221,36.773,23.771,12.865,32.905,19.117,9.404,29.920,14.366,7.244 ,25.218,9.684,9.810,21.100,7.052,13.603,16.361,5.871,20.211,14.759 ,9.332,24.692,10.714,14.984,27.381,8.114 ,23.794,12.783,13.221,26.116,19.069,14.260,22.944,24.986,16.310,17.113 ,28.409,17.881,11.562,28.432,21.504,7.479,25.690,25.928,4.418,20.599 ,30.049,5.580,15.584,34.067,9.173,12.544,38.631,15.060,9.018,38.984 ,20.102,10.329,42.574,22.345,27.701,44.920,25.689,22.778,41.294,26.502 ,17.802,36.716,23.573,12.346,33.446,19.038,9.376,29.982,14.359,7.379 ,25.213,9.768,10.069,20.982,7.294,13.751,16.439,5.559,20.199,13.972 ,9.213,24.830,10.359,15.581,27.031,7.719 ,23.617,12.350,13.813,25.639,19.130,14.870,22.756,25.155,16.183,16.854 ,28.676,17.591,11.233,28.507,21.359,7.934,26.050,26.376,5.116,20.641 ,29.944,5.718,15.029,32.991,8.692,12.395,37.840,14.732,8.728,39.201 ,19.511,9.906,43.019,22.376,27.740,44.419,25.920,23.168,41.030,26.208 ,18.416,36.239,23.729,12.432,33.529,19.435,9.740,29.434,14.798,7.666 ,24.759,9.937,10.295,20.754,7.938,13.711,15.998,5.671,20.047,14.131 ,9.114,24.716,10.494,14.954,26.951,7.747 ,24.012,12.503,13.953,25.912,19.342,14.449,23.029,25.100,16.549,17.484 ,28.586,18.903,11.667,28.481,21.397,7.785,26.260,26.607,4.911,20.648 ,29.762,5.753,15.350,33.300,8.908,12.434,37.994,14.578,8.736,39.552 ,19.979,10.470,43.119,22.662,27.821,43.727,25.443,22.420,41.221,26.247 ,17.848,36.494,24.167,12.379,32.929,19.582,9.488,29.216,14.702,7.711 ,24.595,9.384,9.829,20.604,7.131,13.683,16.123,5.060,20.085,13.915 ,8.908,25.200,11.222,14.847,27.059,8.911 ,23.851,12.509,13.804,25.990,19.002,14.469,22.931,24.771,16.634,17.508 ,28.373,18.286,11.915,28.212,21.270,7.770,25.930,26.098,5.343,20.386 ,29.828,5.846,15.077,33.966,9.031,12.428,38.933,15.099,8.924,39.810 ,20.518,10.602,43.163,21.689,28.245,42.375,25.115,22.774,40.248,25.516 ,17.567,36.126,23.642,11.533,33.571,19.658,9.291,29.426,14.590,7.776 ,24.159,9.043,9.992,20.933,7.292,14.245,16.582,5.694,20.509,13.985 ,8.699,25.401,10.715,15.055,27.404,8.281 ,23.695,12.829,13.504,25.764,19.437,13.969,22.597,25.450,15.948,17.092 ,28.423,18.022,11.790,28.676,21.803,7.059,25.934,26.430,5.091,20.793 ,30.234,5.589,15.473,34.066,8.997,11.769,38.160,14.696,8.522,40.353 ,19.819,10.878,44.196,22.554,28.318,43.074,25.597,23.197,40.337,25.806 ,17.780,36.375,23.787,11.741,33.154,19.557,8.962,29.841,14.286,7.574 ,25.083,9.196,9.944,20.748,7.313,14.236,16.045,5.646,20.541,13.471 ,9.889,25.682,11.896,15.361,27.634,8.380 ,24.570,13.140,12.786,26.102,19.946,13.576,22.686,25.498,15.318,17.702 ,28.165,18.723,12.523,28.503,22.326,7.233,26.220,26.025,4.907,21.266 ,30.023,5.678,15.793,33.796,9.233,12.043,37.348,14.858,8.771,40.203 ,19.898,10.903,44.171,21.444,28.378,42.556,25.142,23.227,39.449,25.636 ,17.412,36.446,23.332,11.752,33.264,18.848,9.020,29.643,13.468,7.620 ,24.944,9.220,9.848,21.160,7.691,13.422,15.760,6.713,19.640,13.470 ,9.683,25.976,12.855,14.939,27.417,8.986 ,24.627,13.046,12.380,25.895,19.776,12.833,23.067,25.155,15.595,18.103 ,27.715,18.877,13.546,27.639,23.414,7.305,26.190,26.006,4.724,20.975 ,29.586,5.140,15.664,33.846,9.195,11.925,37.119,15.034,8.789,39.473 ,20.075,10.553,43.273,21.398,28.628,42.349,25.145,23.406,40.183,25.822 ,18.112,36.110,23.461,12.655,32.655,18.873,9.201,29.785,13.440,7.458 ,25.414,8.322,9.906,21.597,7.603,13.366,16.335,6.232,19.783,14.282 ,9.705,25.919,12.853,14.983,27.636,9.035 ,24.787,13.151,13.411,26.120,19.950,13.492,22.909,25.361,15.449,17.724 ,28.036,18.727,13.426,27.879,23.848,7.001,25.988,26.517,5.155,20.872 ,30.584,5.420,15.382,34.616,9.694,11.348,37.645,15.821,8.699,39.613 ,20.186,10.669,43.251,21.809,28.473,42.674,25.263,23.078,39.879,25.499 ,17.890,35.848,23.637,12.841,32.064,18.802,8.835,28.782,13.400,7.644 ,24.509,8.059,10.687,21.628,7.038,13.879,16.268,6.444,19.486,12.936 ,9.772,25.582,11.871,15.490,27.474,8.755 ,24.879,12.862,13.363,25.855,19.829,14.067,22.454,25.488,15.988,16.932 ,28.288,18.371,13.232,28.098,23.747,7.640,26.351,27.493,5.631,20.657 ,30.620,5.432,14.891,34.055,10.077,11.331,37.364,15.912,8.673,39.810 ,20.365,10.935,43.227,22.006,28.874,42.468,25.377,23.089,40.458,25.434 ,18.097,36.265,23.154,12.725,32.439,18.303,8.809,29.316,12.224,7.154 ,25.247,8.256,10.648,21.434,6.867,13.846,16.261,6.495,19.229,12.785 ,9.444,25.660,11.445,16.015,27.106,9.083 ,24.569,13.132,13.356,26.118,20.059,13.598,22.943,25.493,16.332,17.156 ,28.220,18.641,12.640,27.993,23.201,6.940,26.026,26.789,5.822,20.299 ,30.624,5.577,14.426,34.013,9.260,11.671,38.441,15.405,9.037,40.045 ,20.732,11.190,43.389,22.255,28.629,41.898,25.166,23.030,39.331,25.211 ,17.886,34.989,22.927,11.813,32.321,18.034,7.986,30.112,12.507,7.039 ,25.429,7.760,10.850,22.086,6.699,14.098,16.608,6.578,19.622,12.735 ,9.516,25.603,10.904,15.494,27.452,8.388 ,24.374,13.368,13.547,25.968,20.247,13.246,23.008,25.503,15.953,17.295 ,28.819,18.144,12.941,28.253,23.238,7.486,25.753,26.647,5.568,20.694 ,30.577,5.546,14.753,34.301,9.336,11.829,38.770,14.971,8.889,41.320 ,20.733,10.856,43.703,22.427,28.706,42.112,25.228,23.369,39.109,25.342 ,17.710,35.477,23.173,11.708,32.903,18.173,7.920,30.467,12.415,7.036 ,25.282,8.608,10.579,22.073,6.742,14.416,16.828,6.456,19.579,12.318 ,9.521,25.792,11.092,15.795,27.217,8.544 ,24.523,13.575,13.730,26.283,20.256,14.113,22.742,25.391,16.837,16.910 ,28.361,18.931,12.169,28.452,22.750,7.157,25.331,26.758,5.413,20.606 ,30.489,5.381,15.019,34.458,9.238,12.654,38.882,15.055,9.116,40.835 ,20.612,11.073,44.104,22.835,28.368,41.865,25.681,23.191,38.900,25.820 ,17.319,35.189,23.205,11.268,33.056,18.536,8.055,29.949,12.768,7.279 ,25.385,7.923,10.343,21.699,7.260,13.681,16.484,6.793,20.112,13.511 ,9.567,26.174,11.279,15.334,27.686,8.372 ,24.006,13.405,12.592,26.309,20.061,13.619,23.040,25.554,16.139,17.822 ,28.432,19.405,12.417,28.345,23.022,7.234,25.262,26.351,5.410,20.248 ,30.270,5.563,14.632,34.272,9.276,12.834,39.126,14.824,9.049,40.659 ,19.558,11.043,44.656,22.847,28.845,41.482,25.470,23.095,38.692,25.220 ,16.932,36.035,22.990,11.096,33.874,18.029,7.900,30.415,12.609,6.544 ,25.900,8.550,9.951,21.714,7.448,13.457,16.513,6.870,19.847,13.544 ,8.872,25.764,11.318,14.641,27.537,7.839 ,23.936,13.085,12.376,25.865,19.427,13.664,23.213,25.058,16.283,18.112 ,28.607,19.261,12.743,28.401,22.584,7.267,25.067,26.234,6.259,20.058 ,30.295,5.223,14.693,34.091,8.846,12.606,38.941,14.581,8.891,40.367 ,19.148,10.977,44.551,22.080,28.672,41.808,25.625,23.181,39.061,25.517 ,17.658,35.650,23.555,11.141,33.784,18.422,7.879,30.872,13.176,6.986 ,25.093,9.595,10.402,21.787,7.283,14.052,17.155,6.272,19.831,13.550 ,8.912,25.658,10.834,15.066,27.919,8.719 ,24.228,13.221,11.812,25.933,19.620,13.289,23.382,25.319,15.563,18.068 ,28.246,18.967,13.613,28.286,22.944,8.360,25.533,27.070,6.114,20.845 ,30.299,5.328,14.990,34.186,8.986,11.480,38.107,14.578,9.012,40.742 ,18.999,11.541,45.355,21.695,28.682,41.301,25.220,23.429,38.858,25.281 ,17.872,35.522,23.677,11.484,33.448,19.107,8.155,29.984,12.684,7.155 ,25.575,10.248,10.120,21.324,7.475,14.113,16.755,5.670,20.340,13.921 ,9.459,25.472,10.983,15.771,28.089,9.318 ,24.316,12.458,11.843,25.508,18.965,13.747,23.278,24.916,16.394,17.774 ,28.402,19.187,12.378,28.542,22.605,7.252,25.365,26.306,6.069,20.368 ,29.967,5.496,14.233,33.573,8.681,11.885,38.394,14.356,9.525,41.153 ,19.296,11.200,44.990,21.956,28.698,41.790,25.477,23.507,38.898,25.134 ,17.916,35.541,23.580,11.891,33.423,18.965,7.818,30.491,13.199,7.030 ,25.775,9.665,9.849,21.557,7.725,13.950,16.492,6.011,20.248,14.478 ,9.515,25.732,11.493,16.071,28.073,8.995 ,24.069,12.514,11.576,26.193,19.281,13.560,23.049,25.025,15.906,17.225 ,28.166,19.122,12.145,27.688,22.386,7.635,25.248,26.821,5.438,20.677 ,30.447,5.051,15.003,34.500,9.197,12.486,38.468,14.699,9.325,40.616 ,19.694,10.810,44.394,21.784,28.486,41.204,25.422,23.303,39.170,25.769 ,17.606,36.130,23.125,11.743,33.599,18.675,8.250,30.057,12.399,6.446 ,25.964,9.671,9.713,21.051,8.200,13.572,16.156,6.096,20.125,14.059 ,9.421,25.580,11.507,15.633,28.168,9.245 ,24.382,13.415,12.005,26.227,19.807,13.778,23.018,25.170,16.477,17.422 ,28.183,18.648,12.599,27.936,22.634,7.930,25.547,26.937,5.015,20.995 ,30.642,5.322,15.062,34.391,9.387,12.104,38.000,14.870,9.037,40.766 ,20.116,11.114,44.270,22.390,28.993,40.814,25.331,22.929,39.238,25.429 ,17.057,36.390,22.793,10.993,34.070,18.588,7.965,30.069,11.850,6.919 ,26.147,9.683,9.913,20.736,7.799,13.653,15.823,5.725,20.032,14.331 ,9.347,25.125,11.310,15.548,27.697,8.797 ,25.071,13.359,12.219,25.922,20.228,13.700,22.969,25.646,16.479,17.218 ,28.753,18.370,12.285,28.254,22.454,8.012,26.006,26.558,5.684,20.677 ,30.618,5.143,14.471,34.316,8.841,12.183,39.055,14.522,8.799,41.346 ,19.438,10.811,44.824,22.870,28.797,40.740,25.663,23.231,38.089,25.721 ,17.236,35.440,22.782,11.278,33.869,18.262,8.303,30.135,11.771,6.803 ,25.902,9.355,9.961,21.065,8.367,13.499,15.573,5.697,19.805,14.183 ,8.787,25.293,11.196,14.928,27.345,8.810 ,24.555,13.167,12.945,26.062,19.730,14.230,23.077,25.395,16.617,17.485 ,28.522,18.766,12.427,28.226,22.678,7.346,25.153,26.424,5.141,20.778 ,31.057,5.181,14.573,34.397,9.210,12.140,38.451,14.821,8.758,40.470 ,20.120,10.521,44.182,22.452,28.993,40.984,25.474,23.382,38.705,25.796 ,17.536,35.590,23.012,12.041,32.760,18.130,9.197,29.415,11.158,6.757 ,26.335,9.712,9.912,20.939,7.884,13.871,15.872,5.667,20.538,14.465 ,9.330,25.550,11.486,15.120,27.100,8.018 ,25.137,12.870,12.482,26.450,19.304,14.192,22.839,25.036,16.498,17.098 ,27.988,18.477,12.516,27.594,23.342,6.652,25.339,26.480,5.038,20.611 ,30.998,5.596,14.238,33.760,9.367,12.383,38.383,14.898,8.935,40.587 ,20.080,11.064,43.809,22.269,28.515,41.425,25.532,22.994,39.101,25.689 ,17.577,35.290,23.238,12.103,32.263,18.131,8.696,29.280,11.572,6.737 ,25.943,9.747,10.059,20.420,7.506,14.235,15.951,5.520,20.764,14.883 ,9.477,25.594,12.102,14.816,27.279,8.341 ,24.811,13.177,12.248,26.359,19.647,13.791,22.819,25.076,15.935,17.259 ,28.137,18.816,12.031,27.817,22.524,7.139,25.285,26.476,5.233,20.844 ,30.918,5.023,14.625,34.304,8.951,12.113,38.641,14.903,9.183,40.263 ,19.489,10.837,44.214,22.943,28.849,41.934,25.785,23.491,38.818,25.458 ,17.501,35.809,23.084,12.499,32.507,18.711,8.415,29.596,11.995,6.648 ,25.674,9.782,9.834,20.682,7.330,14.037,16.282,5.679,20.535,14.148 ,9.529,25.973,12.347,14.857,27.412,8.891 ,25.461,13.475,12.459,26.240,19.803,14.240,22.439,25.184,16.246,17.018 ,28.482,18.729,12.138,27.810,22.628,6.935,25.500,26.392,5.181,21.303 ,30.774,5.269,15.405,34.596,9.057,12.253,38.675,14.733,9.098,40.950 ,18.928,10.930,44.884,22.702,28.490,41.516,25.756,22.649,39.048,26.150 ,16.724,36.124,23.328,11.649,32.925,18.644,8.006,30.218,12.586,6.889 ,25.838,9.876,10.168,20.938,7.544,13.875,16.115,5.352,20.441,14.098 ,9.147,25.602,11.691,14.869,27.495,8.845 ,24.646,13.201,12.498,26.020,19.910,14.081,22.700,25.203,16.348,16.921 ,28.147,18.532,12.219,27.992,22.139,7.297,25.197,26.330,5.477,21.167 ,31.099,5.289,15.822,35.342,8.801,12.200,39.234,14.381,9.267,41.504 ,19.133,11.253,44.763,22.661,28.604,41.983,25.373,23.002,39.097,25.724 ,16.979,36.597,23.274,11.205,33.696,18.583,7.895,30.512,12.581,6.908 ,26.393,10.461,9.886,20.595,7.139,14.317,16.469,5.308,21.069,14.978 ,8.870,25.450,10.652,14.988,27.488,7.901) ,c(3,22,30)) dna.dat<-aperm(dna.dat,c(2,1,3)) # # # #================================================================================== macf.dat<-c(54.33203,24.10905,69.5 ,141.80250,21.59643,69.5 ,132.23880,62.78124,69.5 ,88.22106,52.28123,69.5 ,147.10890,26.61518,90.0 ,107.42800,27.77578,101.0 ,99.74427,46.85715,97.0 ,58.35540,29.57223,67.0 ,134.87930,26.38988,67.0 ,120.57150,66.43083,67.0 ,79.14922,52.19386,67.0 ,138.17850,37.67144,86.0 ,101.76780,34.47324,97.5 ,90.83484,54.19082,92.0 ,50.04349,15.22191,71.5 ,139.76850,21.33820,71.5 ,124.26710,63.79000,71.5 ,80.94720,51.47673,71.5 ,147.78980,32.26446,94.0 ,102.32870,25.23133,105.5 ,90.64163,47.04449,98.5 ,41.93115,24.83244,70.5 ,138.72930,22.35828,70.5 ,122.68840,65.04043,70.5 ,74.09913,53.69709,70.5 ,142.63240,35.36625,92.0 ,97.04822,33.37946,111.5 ,89.51760,56.40900,96.5 ,48.44877,35.75250,68.0 ,134.68970,33.55962,68.0 ,120.88830,73.77755,68.0 ,77.94841,65.53058,68.0 ,135.42950,42.75692,91.0 ,101.92880,40.64505,99.5 ,87.04530,59.04715,92.5 ,44.05272,36.38397,70.0 ,133.47320,45.07240,70.0 ,114.88450,83.74655,70.0 ,70.13158,71.71946,70.0 ,139.94810,54.24338,87.0 ,97.87708,47.19924,105.5 ,80.04594,65.13947,96.5 ,53.94042,32.50219,69.0 ,136.19530,33.46588,69.0 ,120.75410,74.12678,69.0 ,78.24210,60.88469,69.0 ,142.38210,44.35960,89.5 ,100.75480,38.09180,101.0 ,87.92361,55.80280,94.5 ,45.11740,11.62884,68.5 ,132.08950,17.75877,68.5 ,112.66980,57.22899,68.5 ,71.76939,47.64127,68.5 ,136.93780,26.69818,88.5 ,96.43125,21.78416,101.0 ,84.39475,41.89694,95.0 ,42.09966,16.11359,69.0 ,131.92440,19.70687,69.0 ,121.73400,57.71608,69.0 ,72.94730,49.99466,69.0 ,136.93340,26.92302,89.0 ,96.84825,26.58288,103.0 ,84.30907,48.96717,94.5) macf.dat<-array(macf.dat,c(3,7,9)) macf.dat<-aperm(macf.dat,c(2,1,3)) macm.dat<-c(34.82811,16.50834,77.5 ,138.91980,15.13858,77.5 ,125.15760,58.60464,77.5 ,72.28854,49.79207,77.5 ,146.19080,22.68885,100.0 ,99.30268,24.86908,117.0 ,91.79910,46.49960,107.0 ,40.40179,3.73932,73.0 ,132.23560,7.56574,73.0 ,114.63210,53.28955,73.0 ,70.66502,33.57051,73.0 ,139.58480,21.61227,90.5 ,97.93692,8.49867,108.5 ,79.90506,28.91153,100.5 ,40.54510,9.51130,75.0 ,136.61260,15.82863,75.0 ,106.90960,63.82611,75.0 ,76.19816,46.63517,75.0 ,145.02210,30.40421,94.5 ,101.72660,19.45746,113.5 ,86.97967,43.98130,105.5 ,21.11454,16.57673,75.0 ,131.52700,23.12809,75.0 ,109.44810,63.03707,75.0 ,61.73774,53.69610,75.0 ,135.91480,34.78890,101.5 ,90.65395,25.30813,117.5 ,75.66082,49.38123,105.5 ,30.79976,19.21503,73.5 ,134.92160,32.11148,73.5 ,115.81510,69.88405,73.5 ,67.15240,57.06633,73.5 ,139.56950,44.82271,97.5 ,95.38217,25.95223,112.0 ,78.97741,47.89584,107.0 ,18.88770,10.47136,74.5 ,130.35790,12.40497,74.5 ,114.85390,57.63774,74.5 ,63.47649,48.13175,74.5 ,138.25830,25.62929,97.5 ,89.01810,18.95535,117.0 ,75.67622,43.31009,104.5 ,40.28789,14.90687,69.0 ,134.29020,14.66977,69.0 ,125.54870,56.83236,69.0 ,75.68020,53.65364,69.0 ,142.36350,24.22211,92.5 ,99.44497,25.41932,106.0 ,87.63929,45.45810,99.5 ,25.38359,10.64805,72.5 ,130.99770,9.63434,72.5 ,118.65580,54.78021,72.5 ,68.79280,48.67834,72.5 ,139.77820,20.83856,97.0 ,91.36346,16.29169,111.5 ,75.55544,44.28398,101.0 ,27.93545,5.21197,71 ,130.98990,4.76235,71 ,103.16230,51.99304,71 ,70.59641,43.71388,71 ,136.03820,13.90246,92 ,91.75840,14.31955,109 ,79.95213,35.70748,95) macm.dat<-array(macm.dat,c(3,7,9)) macm.dat<-aperm(macm.dat,c(2,1,3)) #================================================================================== sooty.dat<- c(-1426,-310.4167 ,-1424,-160.4167 ,-1117,320.5833 ,-755,854.5833 ,1238,1363.5833 ,2330,471.5833 ,1435,-748.4167 ,771,-557.4167 ,433,-395.4167 ,-176,-299.4167 ,-376,-290.4167 ,-933,-248.4167 ,-1000.20254,-1601.5969 ,-1076.57007,-1266.4282 ,-1124.65334,-635.6890 ,-1193.94980,147.7853 ,-61.16474,1895.7533 ,1484.57069,2113.5422 ,1649.32657,746.7048 ,1212.33458,388.9087 ,730.79486,166.1701 ,156.62415,-383.9590 ,-88.03479,-533.8656 ,-689.07556,-1037.3256) sooty.dat<-array(sooty.dat,c(2,12,2)) sooty.dat<-aperm(sooty.dat,c(2,1,3)) #================================================================================== panf.dat<-array(c(47,-23,0,0,0,32,12,87,21,156,31,133,66,92,83,20, 63,-22,0,0,0,29,6,89,14,157,23,136,62,101,95,24, 56,-11,0,0,0,31,2,89,4,159,17,141,54,107,86,34, 51,-27,0,0,0,29,12,89,30,156,39,135,71,94,86,18, 51,-19,0,0,0,35,8,97,23,169,36,143,67,101,85,25, 54,-23,0,0,0,34,14,84,36,155,44,133,76,87,89,19, 53,-21,0,0,0,30,5,90,24,162,31,139,63,99,86,21, 56,-23,0,0,0,33,16,92,30,156,40,131,75,95,95,15, 55,-20,0,0,0,33,12,89,13,157,31,136,63,97,91,22, 35,-23,0,0,0,26,9,81,11,153,26,131,64,92,84,18, 48,-25,0,0,0,30,23,89,44,160,49,139,81,95,95,18, 35,-34,0,0,0,30,10,84,23,153,36,128,68,95,94,13, 46,-23,0,0,0,28,4,92,14,163,27,137,60,101,86,27, 42,-23,0,0,0,30,19,88,33,163,45,130,77,95,93,20, 50,-19,0,0,0,32,7,90,14,157,25,139,68,101,87,23, 54,-19,0,0,0,29,6,92,9,163,20,140,64,104,92,26, 46,-31,0,0,0,25,3,89,2,167,24,136,63,95,85,19, 47,-19,0,0,0,29,7,84,6,148,22,126,58,89,80,24, 46,-27,0,0,0,31,12,86,23,156,35,130,72,93,89,18, 49,-23,0,0,0,29,14,88,25,159,36,133,76,90,90,16, 50,-23,0,0,0,32,9,92,14,167,31,141,71,97,87,28, 40,-23,0,0,0,30,13,92,30,167,40,140,74,99,91,21, 32,-25,0,0,0,36,7,96,12,170,22,147,61,108,81,35, 41,-30,0,0,0,29,18,87,31,160,43,135,74,87,89,10, 46,-25,0,0,0,29,15,88,23,163,37,134,70,91,85,22, 43,-22,0,0,0,33,-1,96,10,178,24,153,66,105,87,32),c(2,8,26)) panf.dat<-aperm(panf.dat,c(2,1,3)) select<-c(5,1,2,3,4,6,7,8) panf.dat<-panf.dat[select,,] panm.dat<-array(c(43,-21,0,0,0,34,14,101,25,179,40,150,75,104,90,31, 48,-23,0,0,0,31,5,92,11,166,24,144,63,99,82,24, 43,-23,0,0,0,29,13,92,21,161,33,138,68,100,84,21, 45,-32,0,0,0,30,8,100,14,163,28,143,74,102,97,21, 40,-27,0,0,0,29,7,93,12,166,23,147,69,102,90,25, 49,-19,0,0,0,33,3,94,11,165,23,144,64,108,89,30, 55,-17,0,0,0,31,6,97,17,168,29,144,69,101,85,23, 49,-27,0,0,0,26,11,92,16,178,30,152,78,100,89,23, 48,-23,0,0,0,29,10,96,32,166,42,139,69,96,87,21, 49,-19,0,0,0,29,3,100,14,172,25,152,63,109,87,32, 49,-26,0,0,0,34,8,91,22,168,34,140,74,93,93,17, 52,-26,0,0,0,32,7,92,10,172,28,143,66,100,93,23, 36,-26,0,0,0,28,11,92,25,165,34,140,71,98,90,18, 46,-26,0,0,0,33,12,94,20,174,35,145,71,106,93,24, 47,-22,0,0,0,31,10,88,29,156,34,138,68,93,91,20, 47,-25,0,0,0,30,0,97,2,172,19,147,62,102,82,26, 53,-19,0,0,0,29,6,80,2,142,13,123,54,100,91,31, 49,-24,0,0,0,29,5,90,14,168,31,144,77,96,89,22, 52,-25,0,0,0,30,6,93,15,167,25,147,74,99,92,24, 42,-27,0,0,0,32,11,87,26,159,37,137,76,95,87,21, 37,-25,0,0,0,29,-2,87,-2,175,16,152,63,107,91,33, 41,-27,0,0,0,25,6,87,13,167,29,141,70,99,89,28, 46,-24,0,0,0,35,12,98,15,175,31,152,76,106,92,27, 45,-22,0,0,0,29,8,90,12,176,24,151,70,104,88,24, 46,-27,0,0,0,29,2,88,6,166,23,138,67,100,86,24, 43,-20,0,0,0,33,7,94,17,165,30,143,70,93,81,24, 44,-20,0,0,0,29,1,87,0,154,19,133,64,98,80,16, 52,-28,0,0,0,28,2,84,18,155,25,135,63,97,93,21),c(2,8,28)) panm.dat<-aperm(panm.dat,c(2,1,3)) select<-c(5,1,2,3,4,6,7,8) panm.dat<-panm.dat[select,,] pongof.dat<-array(c(43,-31,0,0,0,29,13,90,45,150,48,126,74,80,91,19, 49,-31,0,0,0,33,28,93,70,152,72,130,86,78,85,-5, 51,-36,0,0,0,32,34,100,74,152,74,131,87,73,92,-2, 48,-26,0,0,0,32,10,89,35,154,40,136,65,88,86,14, 56,-29,0,0,0,24,11,87,44,155,48,133,72,82,91,12, 49,-30,0,0,0,29,25,96,72,159,69,137,85,78,93,9, 51,-28,0,0,0,26,11,94,50,162,49,132,75,87,89,13, 57,-24,0,0,0,35,10,98,55,164,53,138,77,88,93,21, 37,-29,0,0,0,38,30,93,63,161,68,129,86,68,87,6, 53,-30,0,0,0,29,5,88,39,147,38,131,64,84,90,14, 58,-24,0,0,0,30,0,88,14,151,24,133,59,91,88,21, 54,-26,0,0,0,36,11,106,41,173,48,146,78,94,99,24, 59,-25,0,0,0,29,4,102,28,177,34,156,63,100,90,25, 32,-36,0,0,0,25,26,90,71,144,69,124,82,72,91,3, 52,-30,0,0,0,35,21,99,55,164,59,143,79,90,95,22, 51,-27,0,0,0,35,11,92,37,152,42,132,69,88,95,26, 47,-24,0,0,0,35,7,98,36,163,38,138,66,89,87,21, 60,-23,0,0,0,23,-2,82,28,158,32,135,56,90,89,25, 46,-31,0,0,0,25,4,87,34,145,37,120,66,80,89,20, 46,-28,0,0,0,36,29,94,73,148,71,123,82,74,92,11, 32,-37,0,0,0,36,32,88,81,140,81,117,91,63,90,-5, 43,-27,0,0,0,25,2,90,32,159,37,131,62,91,87,22, 38,-27,0,0,0,30,4,93,30,160,36,136,60,92,86,27, 38,-27,0,0,0,34,14,92,53,155,48,129,71,82,84,24),c(2,8,24)) pongof.dat<-aperm(pongof.dat,c(2,1,3)) select<-c(5,1,2,3,4,6,7,8) pongof.dat<-pongof.dat[select,,] pongom.dat<-array(c(49,-45,0,0,0,26,25,106,68,190,68,151,84,80,100,14, 64,-28,0,0,0,31,10,106,46,185,53,156,77,95,99,14, 55,-31,0,0,0,33,23,113,72,186,72,160,92,95,102,21, 64,-25,0,0,0,36,5,109,35,188,42,165,69,102,101,33, 46,-39,0,0,0,31,36,106,97,155,89,133,95,74,92,1, 53,-28,0,0,0,33,17,111,54,185,59,159,87,88,98,16, 47,-36,0,0,0,36,35,114,72,183,74,150,94,81,105,15, 44,-35,0,0,0,37,15,110,69,183,74,153,84,89,94,11, 55,-43,0,0,0,26,24,105,71,172,75,146,91,81,104,1, 49,-33,0,0,0,35,11,113,58,188,56,159,79,92,93,24, 45,-32,0,0,0,29,20,107,67,184,67,155,85,82,93,11, 48,-34,0,0,0,32,33,116,89,192,91,160,100,81,99,5, 41,-51,0,0,0,29,50,100,127,139,115,119,105,53,96,-19, 60,-45,0,0,0,32,36,102,108,163,97,129,98,75,98,-6, 65,-35,0,0,0,30,24,112,65,188,72,158,88,87,103,18, 54,-28,0,0,0,33,7,114,33,206,42,172,74,98,94,28, 41,-39,0,0,0,34,24,115,79,188,79,154,93,79,99,2, 42,-40,0,0,0,39,41,114,112,187,102,147,112,70,97,-14, 65,-27,0,0,0,30,17,109,62,187,66,151,83,82,96,18, 54,-36,0,0,0,30,29,122,65,204,70,176,93,87,96,9, 55,-37,0,0,0,32,25,116,75,190,71,155,88,84,98,8, 50,-35,0,0,0,26,8,101,39,172,49,148,75,87,98,18, 78,-31,0,0,0,28,15,119,56,204,60,179,91,94,103,8, 42,-32,0,0,0,34,37,117,102,181,99,148,102,83,97,5, 52,-39,0,0,0,38,15,111,58,201,63,158,89,91,95,-8, 47,-37,0,0,0,23,37,98,85,160,83,136,89,75,94,-5, 49,-37,0,0,0,34,37,115,105,179,98,151,96,80,97,5, 48,-32,0,0,0,36,10,113,53,189,57,166,79,100,99,21, 41,-24,0,0,0,39,4,128,42,209,47,178,73,102,93,21, 50,-32,0,0,0,39,27,121,73,198,75,166,95,89,101,15),c(2,8,30)) pongom.dat<-aperm(pongom.dat,c(2,1,3)) select<-c(5,1,2,3,4,6,7,8) pongom.dat<-pongom.dat[select,,] #================================================================================== schizophrenia.dat<-c( 0.345632 , -0.0360314 , -0.356301 , 0.0234333 , 0.0119311 , 0.17692 , 0.37789 , 0.480402 , 0.719631 , -0.41189 , 0.397921 , -0.140558 , 0.351751 , -0.385748 , 0.333756 , -0.655051 , 0.032181 , -0.275235 , 0.112563 , -0.506533 , -0.233126 , -0.28334 , -0.667337 , 0.0522613 , 0.188945 , -0.142714 , 0.237198 , 0.048306 , -0.340236 , 0.0997385 , -0.0161814 , 0.201017 , 0.301584 , 0.516546 , 0.510795 , -0.323537 , 0.269407 , -0.0562209 , 0.239301 , -0.253218 , 0.229339 , -0.48236 , 0.0201328 , -0.122625 , 0.048306 , -0.341874 , -0.200997 , -0.122698 , -0.62316 , 0.120534 , 0.124688 , -0.0262477 , 0.341616 , 0.048306 , -0.408509 , 0.119819 , -0.00814926 , 0.277322 , 0.39797 , 0.62498 , 0.591116 , -0.299441 , 0.35776 , -0.0361405 , 0.27143 , -0.249202 , 0.273516 , -0.530553 , 0.032181 , -0.110577 , 0.0724024 , -0.34589 , -0.188949 , -0.138762 , -0.707498 , 0.140615 , 0.124688 , -0.0262477 , 0.329567 , -0.10832 , -0.359859 , 0.0341931 , -0.056342 , 0.152824 , 0.377668 , 0.474464 , 0.673363 , -0.462009 , 0.373825 , -0.228912 , 0.323639 , -0.450005 , 0.34179 , -0.735372 , 0.0924219 , -0.295315 , 0.100555 , -0.540522 , -0.181195 , -0.260518 , -0.651361 , 0.0963372 , 0.174798 , -0.178741 , 0.193021 , 0.0683864 , -0.539516 , 0.210918 , -0.16074 , 0.333555 , 0.293246 , 0.639288 , 0.520753 , -0.301366 , 0.245311 , -0.0281084 , 0.142916 , -0.28133 , 0.128938 , -0.510473 , -0.152558 , -0.118609 , -0.0761516 , -0.379879 , -0.414127 , -0.127988 , -0.848201 , 0.246974 , -0.00592517 , -0.00203414 , 0.337599 , -0.076192 , -0.356431 , 0.146356 , 0.068156 , 0.201017 , 0.520571 , 0.464342 , 0.601074 , -0.518234 , 0.321616 , -0.208831 , 0.251349 , -0.409844 , 0.197211 , -0.695211 , -0.00797966 , -0.251139 , -0.00787855 , -0.500361 , -0.26726 , -0.201009 , -0.719602 , 0.25526 , 0.110557 , -0.140611 , 0.223261 , 0.228767 , -0.431293 , 0.230133 , -0.0439952 , 0.389752 , 0.23941 , 0.819652 , 0.641234 , -0.088515 , 0.377841 , 0.140566 , 0.339703 , -0.10864 , 0.393998 , -0.345813 , 0.0201328 , -0.0583678 , 0.172844 , -0.283494 , -0.268058 , -0.0890055 , -0.777652 , 0.251188 , 0.154806 , 0.12832 , 0.243341 , -0.052358 , -0.451374 , 0.145795 , -0.0480112 , 0.297382 , 0.408185 , 0.574616 , 0.56291 , -0.538339 , 0.31561 , -0.190749 , 0.251349 , -0.437957 , 0.169098 , -0.715291 , 0.00005 , -0.194914 , 0.000153631 , -0.492329 , -0.278085 , -0.117118 , -0.797732 , 0.255204 , 0.122674 , -0.0905492 , 0.287518 , 0.0600918 , -0.503583 , 0.121699 , -0.0861578 , 0.307424 , 0.355977 , 0.614776 , 0.603071 , -0.277295 , 0.303562 , -0.0100258 , 0.259382 , -0.293379 , 0.241387 , -0.538584 , -0.0521564 , -0.114593 , 0.0443303 , -0.343735 , -0.274068 , -0.0930217 , -0.805764 , 0.138738 , 0.12669 , 0.00182023 , 0.319646 , 0.20467 , -0.431294 , 0.153827 , -0.0660775 , 0.391762 , 0.29172 , 0.793493 , 0.771746 , -0.00420256 , 0.407979 , 0.166681 , 0.387896 , -0.12872 , 0.393998 , -0.394006 , 0.0864079 , -0.0382915 , 0.168828 , -0.279477 , -0.225876 , -0.109086 , -0.779633 , 0.126677 , 0.190947 , 0.126318 , 0.303582 , 0.208686 , -0.395149 , 0.302422 , -0.00985258 , 0.387746 , 0.388105 , 0.72522 , 0.611103 , -0.289343 , 0.327658 , 0.0743116 , 0.283478 , -0.229121 , 0.201226 , -0.494408 , 0.00608663 , -0.0141951 , 0.0362983 , -0.279477 , -0.24194 , -0.00466831 , -0.699312 , 0.339529 , 0.12669 , 0.0901736 , 0.287518 , -0.0362937 , -0.428786 , 0.133507 , -0.0801519 , 0.233129 , 0.374063 , 0.614792 , 0.671344 , -0.478098 , 0.383883 , -0.134524 , 0.315606 , -0.417876 , 0.265483 , -0.675131 , 0.0342193 , -0.19491 , 0.0443223 , -0.466226 , -0.266036 , -0.201455 , -0.735453 , 0.202987 , 0.176577 , -0.0906634 , 0.251373 , 0.212702 , -0.42477 , 0.149571 , -0.124329 , 0.345579 , 0.145148 , 0.767403 , 0.671344 , -0.00821852 , 0.424044 , 0.138569 , 0.407976 , -0.116671 , 0.44219 , -0.377942 , 0.122573 , -0.0583636 , 0.202939 , -0.283647 , -0.14957 , -0.0970378 , -0.755533 , 0.114633 , 0.180593 , 0.0940755 , 0.29555 , -0.0362937 , -0.348465 , 0.000976592 , -0.0480233 , 0.148792 , 0.273662 , 0.458166 , 0.65528 , -0.341552 , 0.371835 , -0.106411 , 0.327655 , -0.377715 , 0.333757 , -0.65505 , 0.0984763 , -0.247119 , 0.118601 , -0.500514 , -0.181699 , -0.253664 , -0.675212 , 0.0182479 , 0.192642 , -0.122792 , 0.309487 , 0.265173 , -0.3438 , 0.289185 , 0.0199632 , 0.482141 , 0.355444 , 0.735605 , 0.613122 , -0.156788 , 0.357761 , 0.128518 , 0.315607 , -0.132736 , 0.305644 , -0.36991 , 0.0121007 , 0.0380178 , 0.100555 , -0.223253 , -0.182924 , 0.0134128 , -0.623245 , 0.301185 , 0.162814 , 0.142714 , 0.193021 , 0.305334 , -0.472766 , 0.163996 , -0.172808 , 0.38174 , 0.0847168 , 0.829799 , 0.538908 , 0.114214 , 0.249327 , 0.273096 , 0.199141 , 0.0319229 , 0.273516 , -0.165091 , -0.0360921 , 0.0340017 , 0.0563381 , -0.141071 , -0.257222 , -0.0263121 , -0.791835 , 0.0884059 , -0.00382644 , 0.178572 , 0.39784 , -0.011935 , -0.440185 , 0.132558 , -0.00814926 , 0.309451 , 0.470037 , 0.542738 , 0.580994 , -0.385704 , 0.389889 , -0.212847 , 0.283478 , -0.401812 , 0.237372 , -0.675131 , 0.0201328 , -0.267203 , 0.0644106 , -0.508393 , -0.23742 , -0.196261 , -0.711598 , 0.184719 , 0.0944764 , -0.130548 , 0.269326 , 0.0844506 , -0.327735 , 0.048221 , -0.0242135 , 0.253226 , 0.257186 , 0.643139 , 0.601074 , -0.1849 , 0.325632 , 0.0160683 , 0.307574 , -0.217073 , 0.301629 , -0.442199 , 0.0803737 , -0.126641 , 0.112603 , -0.351767 , -0.153083 , -0.13602 , -0.635293 , 0.0280923 , 0.158733 , -0.00605034 , 0.217118 , 0.212965 , -0.416089 , 0.192799 , -0.104535 , 0.353627 , 0.229073 , 0.727476 , 0.601074 , -0.1849 , 0.293503 , 0.112454 , 0.267414 , -0.112655 , 0.285565 , -0.402039 , 0.0281649 , -0.0101749 , 0.0844909 , -0.259397 , -0.221356 , -0.0275863 , -0.743727 , 0.188735 , 0.0944764 , 0.118448 , 0.293423 , -0.076192 , -0.327736 , 0.0442049 , -0.0121653 , 0.160856 , 0.357587 , 0.394143 , 0.572961 , -0.457993 , 0.281455 , -0.228912 , 0.263398 , -0.470085 , 0.189179 , -0.679147 , 0.00005 , -0.259171 , 0.02425 , -0.524458 , -0.193244 , -0.208309 , -0.583084 , 0.0883332 , 0.142669 , -0.178741 , 0.289407 , 0.0201935 , -0.351832 , 0.164687 , 0.00389893 , 0.265274 , 0.40578 , 0.510609 , 0.49264 , -0.433896 , 0.3176 , -0.120478 , 0.235285 , -0.329523 , 0.201227 , -0.554649 , 0.00406852 , -0.17885 , 0.0081857 , -0.403976 , -0.245452 , -0.107908 , -0.647341 , 0.228896 , 0.0583318 , -0.0622752 , 0.301455 , 0.0603542 , -0.391993 , 0.224928 , -0.0121653 , 0.341579 , 0.441925 , 0.594946 , 0.45248 , -0.389719 , 0.29752 , -0.0963815 , 0.17906 , -0.30141 , 0.140986 , -0.570714 , -0.02806 , -0.106561 , -0.0560713 , -0.391927 , -0.245452 , -0.0556988 , -0.683486 , 0.293153 , 0.0583318 , -0.00605033 , 0.237198 , -0.0922563 , -0.396005 , 0.00807245 , -0.116583 , 0.11668 , 0.29333 , 0.402175 , 0.47256 , -0.502169 , 0.22523 , -0.22088 , 0.17906 , -0.433941 , 0.157051 , -0.634971 , -0.0320761 , -0.271219 , -0.0400071 , -0.500361 , -0.257501 , -0.260518 , -0.69955 , 0.0521888 , 0.0382515 , -0.158661 , 0.321535 , -0.0641438 , -0.379941 , 0.108474 , -0.0201975 , 0.192985 , 0.445941 , 0.450368 , 0.49264 , -0.506185 , 0.325632 , -0.184735 , 0.203157 , -0.365667 , 0.124922 , -0.675131 , -0.0119958 , -0.206962 , -0.0279589 , -0.476265 , -0.285613 , -0.192245 , -0.651357 , 0.176687 , 0.0944764 , -0.126532 , 0.317519 , -0.0761919 , -0.219297 , -0.0300639 , 0.072172 , 0.140776 , 0.40578 , 0.430287 , 0.580994 , -0.457993 , 0.345712 , -0.216863 , 0.287494 , -0.417876 , 0.2695 , -0.663083 , 0.096438 , -0.259171 , 0.0764588 , -0.496345 , -0.165131 , -0.24847 , -0.518831 , -0.00808046 , 0.162749 , -0.178741 , 0.363819 , -0.132663 , -0.295482 , 0.140679 , 0.178874 , 0.174894 , 0.568759 , 0.29153 , 0.593042 , -0.550362 , 0.345712 , -0.297185 , 0.267414 , -0.50623 , 0.136969 , -0.74742 , -0.0039636 , -0.275235 , 0.0724427 , -0.520442 , -0.239946 , -0.153262 , -0.524623 , 0.229146 , 0.194967 , -0.196981 , 0.255389 , 0.160493 , -0.435309 , 0.214068 , -0.124316 , 0.357623 , 0.267522 , 0.65901 , 0.597058 , -0.136708 , 0.305552 , 0.0763094 , 0.255365 , -0.140768 , 0.257451 , -0.402038 , 0.032181 , -0.0382875 , 0.084491 , -0.279478 , -0.243962 , -0.0167163 , -0.761587 , 0.231107 , 0.0945651 , 0.0881595 , 0.279486 , 0.00788297 , -0.330892 , 0.141779 , 0.0222759 , 0.267264 , 0.386119 , 0.484248 , 0.574959 , -0.365648 , 0.33569 , -0.102395 , 0.263398 , -0.345587 , 0.233355 , -0.566697 , -0.0180098 , -0.178854 , 0.0965392 , -0.387911 , -0.233908 , -0.12515 , -0.627023 , 0.206999 , 0.0681437 , -0.0866473) schizo.dat<-schizophrenia.dat schizophrenia.dat<-array(schizophrenia.dat,c(2,13,28)) schizophrenia.dat<-aperm(schizophrenia.dat,c(2,1,3)) schizo.dat<-array(schizo.dat,c(2,13,28)) schizo.dat<-aperm(schizo.dat,c(2,1,3)) braincon.dat<-schizo.dat[,,1:14] brainscz.dat<-schizo.dat[,,15:28] ###################### Additional functions by other authors ################## # # ============================================================================= # Authors # ============================================================================= # Gregorio Quintana-Orti # Depto. de Ingenieria y Ciencia de Computadores, # Universitat Jaume I, # 12.071 Castellon, Spain # Amelia Simo # Depto. de Matematicas, # Universitat Jaume I, # 12.071 Castellon, Spain # # ============================================================================= # Copyright # ============================================================================= # Copyright (C) 2018, # Universitat Jaume I. # # ============================================================================= # Disclaimer # ============================================================================= # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # # This module contains several modifications of some functions provided by # the noteworthy "shapes" package by Ian L. Dryden. These new implementations # have been accelerated to be much faster for medium and large datasets # than the original codes. All the other functions in the library that employ # the accelerated ones will also take advantage of this performance # improvement. # # The new code includes the original code in commented lines with four "#" # chars as a reference. # # ============================================================================= # ============================================================================= uji_preshape = function( x ) { # # It computes the preshape in a faster way on medium and large datasets # on real (non-complex) data. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # if ( is.complex( x ) ) { # # Complex case. # k <- nrow( as.matrix( x ) ) h <- uji_defh( k - 1 ) zstar <- x ztem <- h %*% zstar size <- sqrt( diag( Re( st( ztem ) %*% ztem ) ) ) if ( is.vector( zstar ) ) z <- ztem / size if ( is.matrix(zstar ) ) z <- ztem %*% diag( 1.0 / size ) } else { # # Real case. # if (length(dim(x)) == 3) { # # Argument X is a 3D array. # k <- dim( x )[ 1 ] #### h <- uji_defh( k - 1 ) n <- dim( x )[ 3 ] m <- dim( x )[ 2 ] z <- array( 0, c( k - 1, m, n ) ) for ( i in 1 : n ) { #### z[, , i] <- h %*% x[, , i] # Accelerated code. z[ , , i ] <- multiply_by_helmert( x[ , , i ] ) size <- uji_centroid.size( x[ , , i ] ) z[ , , i ] <- z[ , , i ] / size } } else { # # Argument X is not a 3D array. # k <- nrow( as.matrix( x ) ) #### h <- defh(k - 1) #### ztem <- h %*% x # Accelerated code. ztem <- multiply_by_helmert( x ) size <- uji_centroid.size( x ) z <- ztem / size } } return( z ) } # ============================================================================= uji_centroid.size = function( x ) { # # It returns the centroid size of a configuration (or configurations). # Input: # k x m matrix, or # a complex k-vector, or # a real k x m x n array to get a vector of sizes for a sample # # It computes the centroid size in a faster way on medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # if ((is.vector(x) == FALSE) && is.complex(x)) { k <- nrow(x) n <- ncol(x) tem <- array(0, c(k, 2, n)) tem[, 1, ] <- Re(x) tem[, 2, ] <- Im(x) x <- tem } { if (length( dim( x ) ) == 3 ) { # # Argument x is a 3D array. # n <- dim( x )[ 3 ] sz <- rep( 0, times = n ) k <- dim( x )[ 1 ] #### h <- defh( k - 1 ) for ( i in 1 : n ) { #### xh <- h %*% x[, , i] #### sz[ i ] <- sqrt( sum( diag( t( xh ) %*% xh ) ) ) # Accelerated code. xh <- multiply_by_helmert( x[ , , i ] ) sz[ i ] <- uji_Enorm( xh ) } sz } else { if ( is.vector( x ) && is.complex( x ) ) { x <- cbind( Re( x ), Im( x ) ) } k <- nrow( x ) #### h <- defh(k - 1) #### xh <- h %*% x #### size <- sqrt( sum( diag( t( xh ) %*% xh ) ) ) #cat( "pepe\n" ) # Accelerated code. xh <- multiply_by_helmert( x ) size <- uji_Enorm( xh ) size } } } # ============================================================================= uji_defh = function( nrow ) { # # It generates a Helmert matrix in a faster way on medium and large datasets. # The use of this function should be avoided when the Helmert matrix is # just built to multiply another matrix or vector. # In this case, the "multiply_by_helmert_implicitly" and # "multiply_by_transpose_of_helmert_implicitly" should be employed since # this approach is much faster. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # k <- nrow h <- matrix( 0, k, k + 1 ) if( nrow > 0 ) { for( j in seq( 1, k ) ) { val = -1 / sqrt( j * ( j + 1 ) ) h[ j, seq( 1, j ) ] = val h[ j, j+1 ] = - j * val } } h } # ============================================================================= uji_Enorm = function( X ) { # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # if( is.complex( X ) ) { #### n <- sqrt( sum( diag( Re( st(X) %*% X ) ) ) ) n <- sqrt( sum( Re( X )^2 + Im( X )^2 ) ) } else { #### n <- sqrt(sum(diag(t(X) %*% X))) n <- sqrt( sum( X^2 ) ) } return( n ) } # ============================================================================= uji_distProcrustesFull = function( P1, P2 ) { # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # #### H <- defh( dim( P1 )[ 1 ] ) #### Q1 <- t( H ) %*% rootmat( P1 ) #### Q2 <- t( H ) %*% rootmat( P2 ) # Accelerated code. Q1 <- multiply_by_transpose_of_helmert( rootmat( P1 ) ) Q2 <- multiply_by_transpose_of_helmert( rootmat( P2 ) ) ans <- riemdist( Q1, Q2, reflect = TRUE ) ans } # ============================================================================= uji_distProcrustesSizeShape = function( P1, P2 ) { # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # #### H <- defh( dim( P1 )[ 1 ] ) #### Q1 <- t( H ) %*% rootmat( P1 ) #### Q2 <- t( H ) %*% rootmat( P2 ) # Accelerated code. Q1 <- multiply_by_transpose_of_helmert( rootmat( P1 ) ) Q2 <- multiply_by_transpose_of_helmert( rootmat( P2 ) ) ans <- sqrt(centroid.size(Q1)^2 + centroid.size(Q2)^2 - 2 * centroid.size(Q1) * centroid.size(Q2) * cos(riemdist(Q1, Q2, reflect = TRUE))) ans } # ============================================================================= uji_distCholesky = function( P1, P2 ) { # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # #### H <- defh( dim( P1 )[ 1 ] ) #### Q1 <- t( H ) %*% t( chol( P1 ) ) #### Q2 <- t( H ) %*% t( chol( P2 ) ) # Accelerated code. Q1 <- multiply_by_transpose_of_helmert( t( chol( P1 ) ) ) Q2 <- multiply_by_transpose_of_helmert( t( chol( P2 ) ) ) ans <- Enorm( Q1 - Q2 ) ans } # ============================================================================= uji_estSS = function( S, weights = 1 ) { # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # M <- dim( S )[ 3 ] k <- dim( S )[ 1 ] #### H <- defh( k ) if ( length( weights ) == 1 ) { weights <- rep( 1, times = M ) } Q <- array( 0, c( k+1, k, M ) ) for ( j in 1 : M ){ #### Q[,,j]<-t(H)%*%(rootmat(S[,,j])) # Accelerated code. Q[ , , j ] <- multiply_by_transpose_of_helmert( rootmat( S[ , , j ] ) ) } ans <- procWGPA( Q, fixcovmatrix = diag( k + 1 ), scale = FALSE, reflect = TRUE, sampleweights = weights ) #### H%*%ans$mshape%*%t(H%*%ans$mshape) # Accelerated code. auxMat = multiply_by_helmert( ans$mshape ) return( auxMat %*% t( auxMat ) ) } # ============================================================================= uji_estShape = function( S, weights = 1 ) { # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # M <- dim( S )[ 3 ] k <- dim( S )[ 1 ] H <- defh( k ) if ( length( weights ) == 1 ) { weights <- rep( 1, times = M ) } Q <- array( 0, c( k+1, k, M ) ) for ( j in 1 : M ) { #### Q[,,j]<-t(H)%*%(rootmat(S[,,j])) # Accelerated code. Q[ , , j ] <- multiply_by_transpose_of_helmert( rootmat( S[ , , j ] ) ) } ans <- procWGPA( Q, fixcovmatrix = diag( k + 1 ), scale = TRUE, reflect = TRUE, sampleweights = weights) #### H%*%ans$mshape%*%t(H%*%ans$mshape) # Accelerated code. auxMat = multiply_by_helmert( ans$mshape ) return( auxMat %*% t( auxMat ) ) } # ============================================================================= uji_centroid.size.complex = function( zstar ) { # # It returns the centroid size of a complex vector zstar. # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # #### h <- defh( nrow( as.matrix( zstar ) ) - 1 ) #### ztem <- h %*% zstar # Accelerated code. ztem <- multiply_by_helmert( zstar ) size <- sqrt( diag( Re( st( ztem ) %*% ztem ) ) ) size } # ============================================================================= uji_centroid.size.mD = function( x ) { # # It returns the centroid size of a k x m matrix. # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # if( is.complex( x ) ) { x <- cbind( Re( x ), Im( x ) ) } #### k <- nrow( x ) #### h <- defh( k - 1 ) #### xh <- h %*% x #### size <- sqrt( sum( diag( t( xh ) %*% xh ) ) ) # Accelerated code. xh <- multiply_by_helmert( x ) size <- uji_Enorm( xh ) return( size ) } # ============================================================================= uji_preshape.mD = function( x ) { # # Input: k x m matrix # Output: k-1 x 1 matrix # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # #### h <- defh( nrow( x ) - 1 ) #### ztem <- h %*% x #### size <- centroid.size.mD( x ) # Accelerated code. ztem <- multiply_by_helmert( x ) size <- uji_centroid.size.mD( x ) z <- ztem / size return( z ) } # ============================================================================= uji_preshape.mat = function( zstar ) { # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # #### h <- defh( nrow( as.matrix( zstar ) ) - 1 ) #### ztem <- h %*% zstar # Accelerated code. ztem <- multiply_by_helmert( zstar ) size <- sqrt( diag( Re( st( ztem ) %*% ztem ) ) ) if( is.vector( zstar ) ) z <- ztem / size if( is.matrix( zstar ) ) z <- ztem %*% diag( 1.0 / size ) return( z ) } # ============================================================================= uji_tanfigure = function( vv, gamma ) { # # Inverse projection from complex tangent plane coordinates vv, using pole # gamma. # Output: centred icon # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # zvv <- tanpreshape(vv, gamma) #### k <- nrow( gamma ) + 1 #### h <- defh( k - 1 ) #### zstvv <- t( h ) %*% zvv # Accelerated code. zstvv <- multiply_by_transpose_of_helmert( zvv ) return( zstvv ) } # ============================================================================= uji_tanfigurefull = function( vv, gamma ) { # # Inverse projection from complex tangent plane coordinates vv, using pole # gamma # Using Procrustes to with scaling to the pole gamma. # Output: centred icon # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # f1 <- uji_tanfigure( vv, gamma ) #### k <- nrow( gamma ) + 1 #### h <- defh( k - 1 ) #### f2 <- t(h) %*% gamma # Accelerated code. f2 <- multiply_by_transpose_of_helmert( gamma ) beta <- Mod( st( f1 ) %*% f2 ) f1 <- f1 * c( beta ) f1 } # ============================================================================= uji_kendall.shpv = function( x ) { # # Accelerated version of the original function for medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # k <- dim( x )[ 1 ] #### h <- defh( k - 1 ) #### zz <- h %*% x # Accelerated code. zz <- multiply_by_helmert( x ) kendall <- ( zz[2:(k-1),1] + 1i*zz[2:(k-1),2] ) / ( zz[1,1] + 1i*zz[1,2] ) kendall <- cbind( Re( kendall ), Im( kendall ) ) kendall } # ============================================================================= multiply_by_helmert = function( x ) { # # This code multiplies the "x" argument by the transpose of the Helmert matrix # of the corresponding size. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # # # threshold chosen as 30 # if( nrow( x ) < 30 ) { xh = multiply_by_helmert_explicitly( x ) } else { xh = multiply_by_helmert_implicitly( x ) } xh } # ============================================================================= multiply_by_helmert_explicitly = function( x ) { # # This code multiplies the "x" argument by the transpose of the Helmert matrix # of the corresponding size by explicitly building the matrix. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # k <- nrow( x ) h <- defh( k - 1 ) xh <- h %*% x xh } # ============================================================================= multiply_by_helmert_implicitly = function( x ) { # # This code multiplies the "x" argument by the Helmert matrix of the # corresponding size without explicitly building the matrix in order to # increase performances. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # m = dim( x )[ 1 ] - 1 n = dim( x )[ 2 ] result <- matrix( 0, m, n ) vsum <- rep( 0, n ) if( m > 0 ) { for( i in seq( 1, m ) ) { val = -1 / sqrt( i * ( i + 1 ) ) hi = val hip1 = - i * val vsum = vsum + x[ i, ] result[ i, ] = vsum * hi + x[ i + 1, ] * hip1 } } return( result ) } # ============================================================================= multiply_by_transpose_of_helmert = function( x ) { # # This code multiplies the "x" argument by the transpose of the Helmert matrix # of the corresponding size. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # k = nrow( x ) if( k < 30 ) { result = multiply_by_transpose_of_helmert_explicitly( x ) } else { result = multiply_by_transpose_of_helmert_implicitly( x ) } return( result ) } # ============================================================================== multiply_by_transpose_of_helmert_explicitly = function( x ) { # # This code multiplies the "x" argument by the transpose of the Helmert matrix # of the corresponding size by explicitly building the matrix. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # #### m = dim( x )[ 1 ] m = nrow( x ) h = defh( m ) result = t( h ) %*% x return( result ) } # ============================================================================= multiply_by_transpose_of_helmert_implicitly = function( x ) { # # This code multiplies the "x" argument by the transpose of the Helmert matrix # of the corresponding size without explicitly building the matrix in order to # increase performances. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # #### m = dim( x )[ 1 ] + 1 #### n = dim( x )[ 2 ] m = nrow( x ) + 1 n = ncol( x ) result <- matrix( 0, m, n ) rowAccum <- rep( 0, n ) if( m > 0 ) { for( i in seq( m, 1, by = -1 ) ) { val = - 1 / sqrt( ( i - 1 ) * i ) hi = val hip1 = - ( i - 1 ) * val if( i == 1 ) { result[ i, ] = rowAccum } else { result[ i, ] = hip1 * x[ i - 1, ] + rowAccum rowAccum = rowAccum + hi * x[ i - 1, ] } } } return( result ) } # ============================================================================= # ============================================================================= uji2_centroid.size = function( x ) { # # It returns the centroid size of a configuration (or configurations). # Input: # k x m matrix, or # a complex k-vector, or # a real k x m x n array to get a vector of sizes for a sample # # It computes the centroid size in a faster way on medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # if ((is.vector(x) == FALSE) && is.complex(x)) { k <- nrow(x) n <- ncol(x) tem <- array(0, c(k, 2, n)) tem[, 1, ] <- Re(x) tem[, 2, ] <- Im(x) x <- tem } { if (length( dim( x ) ) == 3 ) { # # Argument x is a 3D array. # n <- dim( x )[ 3 ] k <- dim( x )[ 1 ] sz <- rep( 0, times = n ) for ( i in 1 : n ) { xh <- multiply_by_helmert( x[ , , i ] ) sz[ i ] <- Enorm( xh ) } sz } else { if ( is.vector( x ) && is.complex( x ) ) { x <- cbind( Re( x ), Im( x ) ) } #### k <- nrow( x ) #### h <- defh(k - 1) #### xh <- h %*% x #### size <- sqrt( sum( diag( t( xh ) %*% xh ) ) ) # Accelerated code. xh <- multiply_by_helmert( x ) size <- Enorm( xh ) size } } } uji3_centroid.size = function( x ) { # # It returns the centroid size of a configuration (or configurations). # Input: # k x m matrix, or # a complex k-vector, or # a real k x m x n array to get a vector of sizes for a sample # # It computes the centroid size in a faster way on medium and large datasets. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # if ((is.vector(x) == FALSE) && is.complex(x)) { k <- nrow(x) n <- ncol(x) tem <- array(0, c(k, 2, n)) tem[, 1, ] <- Re(x) tem[, 2, ] <- Im(x) x <- tem } { if (length( dim( x ) ) == 3 ) { # # Argument x is a 3D array. # n <- dim( x )[ 3 ] k <- dim( x )[ 1 ] z <- multiply_by_helmert_implicitly_3d( x ) sz <- rep( 0, times = n ) for ( i in 1 : n ) { sz[ i ] <- Enorm( z[ , , i ] ) } sz } else { if ( is.vector( x ) && is.complex( x ) ) { x <- cbind( Re( x ), Im( x ) ) } #### k <- nrow( x ) #### h <- defh(k - 1) #### xh <- h %*% x #### size <- sqrt( sum( diag( t( xh ) %*% xh ) ) ) # Accelerated code. xh <- multiply_by_helmert( x ) size <- Enorm( xh ) size } } } # ============================================================================= multiply_by_helmert_implicitly_3d = function( x ) { # # This code multiplies the "x" argument by the Helmert matrix of the # corresponding size without explicitly building the matrix in order to # increase performances. # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # # Initialize result and vsum. k <- dim( x )[ 1 ] - 1 m <- dim( x )[ 2 ] n <- dim( x )[ 3 ] result <- array( 0, c( k, m, n ) ) vsum <- matrix( 0, m, n ) if( m > 0 ) { for( i in seq( 1, k ) ) { val = -1 / sqrt( i * ( i + 1 ) ) hi = val hip1 = - i * val vsum = vsum + x[ i, , ] result[ i, , ] = vsum * hi + x[ i + 1, , ] * hip1 } } return( result ) } # =========================== # Replace original functions # =========================== # ============================================================================= defh = function( nrow ) { # # Written by G. Quintana-Orti and Amelia Simo, University Jaume I, Spain. # This code is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY EXPRESSED OR IMPLIED. # if ( nrow < 100 ) { return( ild_defh( nrow ) ) } else { return( uji_defh( nrow ) ) } } centroid.size <- function(x){ if (is.vector(x)==FALSE){ k<-dim(x)[1] m<-dim(x)[2] if ( ( m == 2 ) | ( m == 3 ) ) { # Matrices with 2D or 3D landmarks. if ( k < 40 ) { return( ild_centroid.size(x) ) } else { return( uji3_centroid.size(x) ) } } else { # Often square or nearly-square matrices where m is larger if ( k < 85 ) { return( ild_centroid.size(x) ) } else { return( uji2_centroid.size(x) ) } } } else{ return(ild_centroid.size(x)) } } Enorm<-uji_Enorm preshapetoicon<-ild_preshapetoicon preshape<-ild_preshape distProcrustesFull <- uji_distProcrustesFull distProcrustesSizeShape <- uji_distProcrustesSizeShape distCholesky <- uji_distCholesky estSS <- ild_estSS estShape <- ild_estShape centroid.size.complex <- uji_centroid.size.complex centroid.size.mD <- uji_centroid.size.mD preshape.mD <- uji_preshape.mD preshape.mat <- uji_preshape.mat tanfigure <- uji_tanfigure tanfigurefull <- uji_tanfigurefull kendall.shpv <- uji_kendall.shpv ########################################################################## r-cran-shapes-1.2.6/data/000077500000000000000000000000001412660331700150775ustar00rootroot00000000000000r-cran-shapes-1.2.6/data/apes.rda000066400000000000000000000052711412660331700165240ustar00rootroot00000000000000BZh91AY&SY(=¸•Ýÿs|tUUÿÿÿÿÿÿÿß@@@€À@@` ˜>‚âÀS€éãR…^÷DU?ÐLš4i  šOC¦„ÈG´‘¦™š§¤Ñ£ jz#B)êièÑ©©èM¡Šla¨Ó'¨茀%=!*`˜2`ÓÀ&M`žª• 4hÈÀÐhh4ihd 4dd@ˆDÑ4Ó h Ô44 €hƒ@È4~Ì`‰ ZŠ ‰SQ¨,”Â"ÊVid‘dFÛZ‘ŒU¤k³¹tÊDiTR#!¨Å\>Ë,1HpI’¹Íç9À8!-"ÇdxÑ— ¹i8\¸Ð±Ý&&<Ì-¡æo44W…ËBé$’o6ôÂc{™e­»Ì $ Bê]é Y]œÌmæíæ4œ/6³!y„›–+Zç5vŽ/ n·g ¼¹ÇK9µ ›tÞæí.Ìœr… Jµ]‹HÖTä»Z‘"Ä‘XÁn²D„„X0i„ ÈÆ#$j5%$)VbÔjE‘’ ŒÔ¬ F¢2¡!BFB0R2 Ù "F0„y{É2rÉ–—vîï%ÝÌÉ&ì¹2dÞ]Ýé—&rÍÆZîYnß9ÎnÜ0xNG5ça–A'75n[2D¸XñŒçÑïßñíxžwì?çr?GOI:¢Õ#Óù+Vêk¼³Ÿvá}u=àÔÉLj¯ò¥©s¨ñÇÃìE X¥ó­+žc­¾ÁåqšGB{níQÙiÚ‰+Kž¬3Wíâ­Åž Ÿ/ ì Öa`}|¯ÏbøQ1.RÀyì,Ñp!^ȧ2¸Žû[`£å•2U©hð(9¿eÓa‹–‚_z04[,ÖóŒ ܸÔhœID0Ǻ®h&•!¯Òÿ¬¸WmWiõDæƒp8—¼Û3_ŠÉñj;–^[mcf¤ÊîJ²byK6,ŒÚjf¯4P6ÞöíQ&ì^Zh¡¢¸³—Äb½¡ý á˜ùòaÅ„¡ƒ^’¡RÂøjœ†Ù=CBŸb”ç¨Jßw ª6éÌÚÛôÞõõ@ô‰« Á4Á…¡úGLè‡1=¼WÒXÏä|»­×îÃTù¢Ï†?$1À朜…V¿h}³*á1g×uÐ]"@EƒFùʵ‘yÛO2(IL(ì䖙ߒ2e ȰeÂíкºÊ#ë‰ÀÙå ûî„$è[v«Ëeµ¹–»v·oÙ"$›Ô‚%²Ã‚@^ϴʦq¤—ËOÃPûæ¶§Êy—DÁr{x:m‡.Ÿ},èu<¦$Ìl >6êݻ뱯ê^·¢†Aä)¼ÊJr•F,YÞ¶•V!AJCp¸Ò&ÅDÌÏ[ÂŒö ¤"!Ÿ±‡¯ go&„˜døšÙóeºÖkc6I!$M/:Îædé²1ß Èüƒ¿ÙöL%.å6Ö+U¦n£\´Q ‰»’9³#æÁS ®µ4á)Ka|TŸV³w7d(£e¿4³£Ñm’Þw.>.þ}_Ç•³æWǸäíJ@IH$ F¯~ö~é÷Å9y_Ål{Ì÷"EN­YV¦˜J‡ YãÁ둵˜ã’ß{« …F  çÃüú$%.p>CÎ$¤¼ð * êùê^¸D·Þƒ«P Jé¨ÊÕ+¨©Fj¢ß¨]pŸm†Š‚b`×ÈØÿ\€Þ¢ £X*_¦5QEúÄ@PÅŠ‚ŽÖ —Ì¢í,I]˜Ö· …áb("D€ -èªÒ‡ ƒäˆ€w¡‹wä$,´k*R‚údÁÜØ˜³yßæòê“ø9©:Õ…¾xJXAe L‰Ö£jˆÛb«–ÕÆ¥²›R•šZšËY²ÖZU,Ò©µ*j¤­›+M¯Þë._Å{üþPœå—Íæ VÁy䬫@ˆð<µzú>Éùŧ7_t\wtìß&;´?jãFÁÁŠ_”Aiô2Êõ \úÑô wÝwOq¦2/C!0]Bì`#4àŽ’³Ut®£Q M!Š#Ô#!%¢ªâ¨¨É ´^«Ó¦ÁÓ»ÑÑ•er­œ;žj¦c®f9¸@ÂÜÛt—R’’4£'‹ÐŽbÈK0n#n7vKÂË$.KH©"’]]¤!-õ32Û»Kn˜Ó Z!qn-Ü”Ìn˜åYL%Bà^gÿ³²e’H‚$»µ¥¦¥Ë­­ry~O4jŸÅð6Rµo$U2Œ!Ð.º†ÓZÝìMpư°£\ÔZ´º M5“ª®8–]b–’Yk¶A¬[ X7BÄ,Œ!N4c|@Õ*Î0ZˆµuÄ8»¦¯8ò¯©mªÒQZ]Ý`ÑŒµ.®sÅ“\†¸&§[€šÉ)sÎFfÊ'!Á³Še¢‹Eˆ¬FKF Ñ`´Qj4QŠ‹)Š,P” id!© Œ,eL*VX¥¥HLc$Ù¢”YJ„•J’eˆÙ„L1‚@¢DĦ)”V4iD’h˜¨†"cPcE‰5˜™„`$ŠÉ‘hÌ”‘£b#E…ÈÄÈ(Ø&Ã@m›$BDhÔh£PV+,E cdŠ £QŒPš0˜h¢‰äÚÝmf›Y³k4Õ*k&©K3uª¸m&Ò•™¨¶QAD!Ñ‚—û4PPÏàe’[Gµ&$m©Õ¶³Àw'ÖP^C¡-rUáÚŸrÛ@ÿï|h]j«Ô½AC.9·ïX)ÒÁ£U:¦1U™7n·˜0^ÈŽ ZJ»sþп³[0·‘Õ EÈœ.g <ú ¬Ú‰6½N‹‡p¼‡.ÑB èIÎ&½³áÒçG©ÅÂu¨Î :ÙÝÝßóÍÝ>´s÷5Ò¾^÷LÄ d„©;ÎDãhw*®Ô2EÓëLC ­<ï¨:ÞB"B(jfÆ):Æöž{Ób]³»õë¦"‘|#Èõç]}(O§oLN}䘥zÕÎ…Ò@‘û ƒ2óTxæ2¼|’aüiA^¡ Ùû°·=z4bõX®9‘blm¼ÍJv4ÙHy!!º*QCÕîAŒ´Tx4xm˜Z¸£¢#NEIP‹««-Ú)¿ BÜJ ä9Ǭ¸¾08ÓVþ<üF.,ŒÈLÚQ2£C9vun¿`ißÛÁX…àgµþB¹¬°‘š"Ä#EÍprÉ­¦m:¾*â;)‘˜Öð‘7¥…'À%²u&Ê)ÙeMG´šà’[uéÞ1îqíqzƒ´xRH'œD„2Ä?m„u ÕФ&%‚ãZ‡Ð.˜Ç î•ÃØô•!cc ™ ®Ëd*Mˆªà˜0ÉSHP„§fˆVk¥Ö"l7œ %!ÊBP QAå[D€Èˆl£@Ž¡¶Ý¼7m³%„c—mÆ” P R…ªPÑ´h,b¤#%ƒjì¹28䈈¼¶Xâê0 °@²;q3“õøÈõkÿrE8P(=¸r-cran-shapes-1.2.6/data/brains.rda000066400000000000000000000102421412660331700170440ustar00rootroot00000000000000BZh91AY&SY¼ýz;ÎÿÕÿsH@@ÿÿÿÿÿðçÝ@@@@@@à÷ûä_g=<;×Ï€|  SÈÓM!ETò˜žˆÞ”˜&M&ª{Tõ= Ñ‘ SÊBª‰ˆzš0AM¨b2diÄžªUOS@ЀSOjz§‘©“Q¦C& Ši¦À11=A‰¤Ñ4Œ@@LLF€Ð‘µ|ÿûÊ&bÈH¹85&.‚„Ê“‡Ép‘qp6²IÌœœ™$r•Ä'*ÉÆŒÇ&•R©,Eˆ™*XŒÅš”Q2rQÌ¥ÅD¥ÅÁ²`—-MUEMÀ–hH¢!?ÏòÜǘæ8¥dP‹’½5î÷½ÝØi‰q²Yg=N˜" ‰0•%;Îp88NRŽtznó9¤Å(ùÕ^o1á<‰îß'päLÕ˾4î÷ºš÷7†.«)Cï>»çzÎv…>78檡*®Ýጎ9S½îðé6By½ÝîžZ;¨w€\ aaB²i!G*E™le`„ãi5KLAV÷uØë9©y Zû`…—§ÉÊi­H'ÒrÓ&1­°ÈÇt-j²Ž@Æ€EÙÞSB{®- ¹C|«E(Á…r§x„êT%Ë$)*·±I<š$;+¡u° ÁåäZ>)²ÖˆÈ£6økìÝÒ¤ËZdm¢ÆtW‰:þÖxøb»³™`CÂê´‚Ié²vgJÚ@Þe6 ’&©)Ù˜K^¶‘W®ŽTðcùÂ…qü®Ãç;ÀeñýºíÎH½ÚÐaÌÚæéo¢­«§h¿1‰˜ÂÍB„X#)娔ƒ0üê£G¯+D´uá/©ÜëúhºáÔ¢tÜÌY‚f¶Ûqf' ów³ZëCS!¨í­n'm«®…oLœ=ÄäÌE¿I¼<ŽQJŃ{èBS€%âø>/}ÜÜ%M¤È‰’%*xÂÏRlæ”ûÕÉ;Äw(Ðxšïß;®‘žÍdvôõW%-HÙ=›™z¢û ê^ÜÐzØ-—Ë„Sj’Ph½¥C¡jçRµ´¿O®Âb±ÉÚÜw22=iHÉ# ˆ×R{öÚ«kä×:&Fc$M4$§WÎDQ“WËÒº[ZÖ×ÍôÐ ÕGß}Ëùÿ9‰0ÈO™˜Í£†z ›¸èŠ"•€è妕qÕ¤@ÉPTΊ¢)»¹ý2ðäÞ¥~`!Œ"*)Ðj¶¶ºåqmƒUàV•^WÏÎÆOw22›áù~mÖð¹g ã®d8}f `mV…-&[늺ð»bZbµ#Cåa•D‘\䀪å@Ï’I·¨y;—÷¼[x¼$Ùµp—®/†ÇSßð}™÷ÎlýhÎéo26‚sЄ¦¦oç²±@ªZf™Þ#7+é\ØÇÁðóÍjô‚ºí^QnÃ@Ív·E†¢Yi+^»éB­® Hyµ»‘I0e.W‘ß¹F:x¶Î| Ö˜Ö+|ñÖF3Lj2Ã}²„6q¤6†cˆ¤QÛKL-È`R¤4Ì+DЋ‚kã^X3g"ëÅŽ"ÜöWrˆí¾f{ß‘ßß= $-w:“Ðí¿<<ŒV´vŠø×7µ|TÛŽù„Ä8‹é¦ôÞ$'4ß:Ú’´á±ƒ¾ÄD]¸5©x°ÚºØx8êÛuŽËI¨-,œ<3 çmê;RF椶îÊØ0 pŒ½VŠ]¶KDÃWFÝÑ›Rõœ ¼O¨±Ë¯/{(%™f³LSC÷ÉÈE  åQËàŒwí:8L̼À«¹„¤" j%Y©5Õ!Mb¤HåJ›ˆ’ˆ¼R” öPz§ ÛŠKÅ…²–im†ËMcfÆ¥J¤ÍI6I#laŠ6AiQ³E³Y´ÉE’Â6Œ‚À“EiI&afŠ+H¨ÐÈA­tk\®i˜¤d h² ²3,Fب¤Í2¦”U€ £fTi©™hB¬"&1¨ÑYd”›¥ÚȤ± „Œ£“,hC4ÉЉh±¨èåÄ¢Œ‘FšX#)¬HŒÑDQÚ…!Œ‚°X€Š²“J”Ù 1ªeH$˜3Q&i¢Û(ˆfƒ&Ì 5¥”Ã&ˆ™ZILÓ)& #Ml“ŒÈ&ŠR¨¦ ˆš$‰˜ƒjbf h¥5a’ÑBJhŒ* &RÈ`ØF m4™’bÄ2 I$ka¤ÈÄÂA!6MZXÂfÒ!$Œ‘12eV! †)!dŒši0$`‹&ÈEµDJ$Àa³!0Ê!*ѲH)1 ‰[@˜˜Q¥3#ci‘HËTÓS!R1% š’Ø™ƒLŒ”h),P‘QI&Æ,@‘¨ÃMÑBLldLÂK"›3d #QŠ)˜¢Ä…2!DبÑD˜Ä…d"$HSLH,hH³¬\”ØÒE¢Í†B¤Š&XŒiŠI$4l$Œ¡¢É‘#E%E1©% ¥ (­333 ” ÌŠ-¤I#D”ŒmEˆÚCDh)’b*ŒQ©J°ŒÑ°’DF*daXQ‘RP@¨B €äˆ‚‹³PubŸ ËLÀ‹ïÓ~ ›õµšµxª!ðlÐŒ­4%# ]-mßjVP’æýCKW7¶ö¾ù­~Aìµi‰Ñ æBžb« j(a•ú#%F[V€Ór³à9œX‘­Ejù£8$ç‹õòa|”'£>Ò‚”^…ö†4  ëRU¶>¦I‚ì è’U¶Í°uVÄm7š}-#%àÕ'²®ÜÖ Û“¹¡>ÿwJ¹áÄdEӪЭ¨'flÖ­Âg¼%3eÜ¢q#/¡Áa›« ¾šVjµè»Ñ2D1 „fÄÉóUÑù*hLc€t³¯¯À:MÁÄ:‹Ï®eŠ|/‹"$] œ¼F’”§¢¡Õ¤˜ª8á;Eey*›>ËË™äLäÕæWº†è§v.âí oÂÔ…¸±‘Á¥´—m”'¿*xìµãCjmuZ*4ó} ÑA•í̇µpe­Š2[ƒÆ4êE&B ‰æh^o´tVE[OIÊF’G k0€¿ñò{Ø8–yYQà ½½soˆxNr6ñ ¹e¿ž”vÓÚt Tmço+íäÜÆl 9Ïz—lî®§,¨mâˆD„Š¡ÄHôw‰œ;µŒ†Gª;m5y¯ËÊ@v"”ÄÒï>ÝþvpÇσŒ•ÏzHPºN¸®ø£sˆM—áIÕŒ!F'«‘§‚Ë˲²ê˜žóºijƒóAcÞ¢Úc™S Oq>)=*ÄÏ‘<£:=ÙÕ)¬J<ùëÒ°åã5õˆ9™™ÎøÒ®ÊNã"†6"‡q©¿5Zˆ5è—XÖTàé4¥&K©‹ÛlaB\ ±¥ø–X±ªó‰‚òbÓÙ¨(TÈ tï`zOc ‰†]§z®êF-î;ó‹‘tGѾÈy¡gÃÓI»žÎàȉ±/ÆÒ‚qdö  mòØÇd„Uø°Á`„¹*7‚Ö™7&‹¬¦Š6$TC®Uå Õ¶UœÛ*(3ÂãUš9zñÆîÅajË*jI˜™,KÉ›ØZaì@I‹`_L;ˆ Zª©o38=hüT°8¬Bl`4dœ`cÖ¶Ú¶#¹¤Zø3 Aˆ@¹¨D¢rÞ¶õ÷L˜L8b€¬’QÔÊ ¨HHh¡ H¢[Š—“áô"$ÆIÑÔ " 9QÏB„±0›ghò-n#N磿lĽD[§=¦5¸Ùtå†WžÇ½¸!­—½YȈo£ñ³ÕÕÈ)t5ä…7©EÈ\»T‡ZE3 Iè§'‚š.F ûŽ‹=—r[µûbÓ„©ŠÌ ›mºÞÐVž-Ë?ZÛA=,LÜu#KÞë› BN*¢Iˆã¢ˆge…‰U4…¥K¿0–“©ŽŒ¯«‡Ôot¶²”Ž,V%µÙs½k·{ô,㽋Zw-«XãiH¸)ä§.Mކ[™íž‘ý,7I‘(ž’ËWì¢9@„÷ÊœxµßÎRI­šæÏ¾“~õMn i“ æjE¡€æ”g GUAd¬C†4ìB¨rÊiW6eC R¡©£ÔHÉ™È%ƒl…°¾ØZ¤—V—ZIJiª{SݱÿrE8P¼ýzr-cran-shapes-1.2.6/data/cortical.rda000066400000000000000000004053741412660331700174040ustar00rootroot00000000000000ý7zXZi"Þ6!ÏXÌäÁïþ])TW"änRÊŸ’Ù#Åߨa…ø¤T”²Yd{¹j{IãáôX»Ê¼¿¢i!!ºEòò R@Y\$žgòŒò¦™Ù[ê_M/H_õ2ˆÕÍhZ¶1ö‡Ÿ6åÁBãHÙû Ôd,#==¤0ƒ’`2Ëbñ˜+ï/5˨I’fyRìlÉsçµÉ´¦1d;dk£º'?³Ü}ÖêǼ¡„]jLHNÃ/¦ƒYÉêyc™×õæl$MñŠñ°4Ãpw¯Ï Jn`{USýMá3¦‡q1Ù )ú42W䘦´ÇsÛy"ÕYúÜÀœù§—ìbÅí8a~‚kÏÝíÚZž ½BZéíNãöõ]µsúDœ¥|éÑ͇º srâ'îcm+[ß`‘*Z‡G+¬Øüï×ÉÝRgþ¬„'%éÿ\aK;‡å¿{"-ys¬æßÀäK­h.ux÷¸{go›ãCÎß‘E ‘¼j ̧øèMJ¶ò~œ5ÅÔKäFeë} ´˜ïqD—L¹çfÑ`\=²j̃Öý^ѹ¶æOÃo]j°µH9 ž¨ÄÕ†t¬5õ¯2[P}ËÊYZÔžh]Ȫ¥mÇù™›AφîQ.‘–GG^¬jjÏ Zæf]‹j$Ur—ͺá^Åþ4oÉ/î÷@r~a‰`ŒNjÒ­4Ô­²ˆS"9”(- ÿdeZü÷LcY›Å§Íå§@XÇã™´üí¢Ç0ºîªk¿¹Võ`ÍñâV¨°µ2廇åtÈ $R?7¤‚iâûCwXIm?U Ÿ^çÙ߯¾N¾ã-5l_|„noÄ?"ì7Dcô]J…#_uö¾c†ìû©| ½}(޶õß•€›4Eæ,Q÷ü`mçes6³˜ŒÍr¿:MÞ ŠÄ}].çñIÈÄ{/ºe …ºª_ªØyý¤ñÇÁm*cp±ÛOái p]w͆ø[¨8v~ŽÂ4n™²áP©ˆaüö)¬G£¢sÓÃà¡,þaÔËÁv"2j,+º-|(åw_á´ì§ké%Y‡j_Hœ•0Þ”°1Y¿0Û ºß³Ôb—Ð=‚ZA½¸Ú”ú82)9öB¼ï– Ù£4ŸÇî~&PFûÃäÏ»`r^‰Û “M‘.*TSããoæ™ ¿ªÚCïnˆÿŠA·ˆ;Ö<#·f>0¡œ2é†jlÒÒzvJõðË6ÉrÏAŽäüÿ2°Õ`>>Ã!NÕ#>Ž#¸ó­T{ö{Ñžºj‰„ê‘È}34eÉ'ˆíA î¶“w@»7¶»;Ö$fæFuXÌÉÕT* ÀµÈáÜ9|ª›£*ð6ŽÖotëÒ* („uƧÏÜY褷éÙŽ^#Ýu×ôõ]=ŒP£ÕåI+ÄžŽÇ»”ÆÎ¼¶>ch&™8±-¦w+àƒ~D}¨HÀÊÛC&ôÕ=&/6µ©ÓWºðnY!¥ wŸCÒpSót‚'†s¸‚Vº¹Aúã?ÞÛp‰‰…¾ž—¿û¬7 ~óª²àæƒôxÏB8†œWUP¡wnˆ{Šg[F(¹~¶Ü8Na/Ú0 §Vô/j=wkmÑwð>#˜%¨tzýœ†Qߪ}#a¦XåÑ]ª&«‘Ü{\ÇAþJ³¹×Œý‚dP=:éh­=/ÁtýßÀV&fSFÍi.Ä>^¨:« Gl ÿXêî†T<'ퟃ»X̬\%ÓWT%û¹3HK›óVÓ¹ƒscŠÉRFPæ’QÝÏ2_ŠŸÿz U@ûò@¨­–J¨8¤¾Y?b*÷ƒ¨ŠRôàd¢RÓ‹(.×O,z9¨Ä´+Ää…zxdK&@&ŒÅ«z¥ëûWJ·Jmâe§nÛq*¾™ ÁYt*ÿE¯/íU‰Ùj ã Ì4KòÐh¿Í]\•›ª"|È@xJ_zò ¨6u€_@AoË,€gûZb>J'~Üoʹ¬ælV6{dØ-¯è #Ä FûØ,«øÖ.Åz+á{ä°ï¥ýQb­¼¨ˆ0Øð#Ô0VVùa:¢[æ÷Ì~¡d¨¡[u,qì¬[™SúŠ…y ù ‡ñXÜe}BŠö@EÙj*àË4²oìÆèÓ¥…KkÄêÙÞTxÞË6© ñnþžVrW},+f=ª½È^㦣Â_ض€ ¿xup"VZ¸z\ª¤ÏK÷ý]µ–‡!?J AJXóÄŸ”H” µ÷o{²•õ|mdùuˆ|¯h¥ZcdŽäKÙ Q;ùe¡6ïIžò ½$ ±ð›É—ÖÉ‚’r µåÖ9§ì€M#XÓáËì<\ilUă Ç˪|H»Æ;Ðn`Ñü†˜¨úZ•YðqA§Í9o“ÎeÁà…¨p}tú Á{n£ÙÅga–Ï= ¿[Ñœ¬Ü>å¡`÷QhuƒLÔ fÿw]"»YÅ‹xL!9cO ¯”oºo¯Ù‘fØ ]3þ*…Ó—™9Ĩ›¶ÖXÁŠ”1~ÍK ´ ßíª×:þ’Tb“ˆÍÚl^ÅÒŸ«™¿ôéÁ´ Õ…ÄnÁ Éë’!ýYºåD ¥„¼ÂX×[–6Ê}[!0ýžüXPÔ;£Ù':lUžLáÜsm_œÏeòä“N‰Q•îS ތĤ¤w³¬ryТÒ?-Ϥ Žž‡‰ÙƒÂDšUW‰üß„¿A”eø Ì ¸GÓ ½Ïq¥Š6‡kè8z÷â!–•^Æf_%L¥» %¬!;YzÜûÎ#É…c•ûã5ƒÃä7BB(THÊoaê¶#RIùÞ´é,œ±DOÅ ²6ccØíçQI"—£š;Â~Ëú°ã—Mÿ¿Ê·“ëWS¡]@:éj*>{œ¢ûÍé¡%g(ÄOÅò88Ü!¿©ËïퟄÎ1j¹C3îPË~Ÿþú¨yΦÉÉRy´4.Gs8¿WÃR°EÚ‰’N>s§=Eû_ëÃÔ€HåñzÎ=·f’޽P|­ô±ßÌŸj`¦l¤ô²+‰šU+=e²–¯÷káµ›%-:˜]Õd˜ðLÒÚ wú?õåÛ}ñUŸÆ—?mø¥€37ÂßT¾ŠÃˆÈ)„€•)ÎùPQ*ç2•Rº¤§}5•ý-*ïiú‘ÄQt*tXÝF8 Ç=%oÞ’ùŠÈÜoŒ»--õÓ.M\8¡ %‡¯£gâã|{*LÓ×B#ºx¦¤WïLj5Y"œ…V¢i²Ž«úrFßSiØÌ¯ÍSó”É“Ë?:äiùáþÑ_@ ZÙ« n²1s견˜{ã´Iï`îŠL Mà9 Ý¥šE×UÇjfò<Ò&6í>6‰oìÂZ}/Õ½›B3Ñ1&*³,6ÏÀÉøxôF+ {íâãẋ´ ÉÁ÷RÍÝ)W\lå‹ç›Ã= 6äÝè¦zàìžæ—ЖuJ´³–ÙŒ*_<¸=ÎOð7Dïé/Z ?ЙÚ<>;£5ÇŸe²½˜Þêíþ:¹3?­íèzVlËq4ÎäÊsyîNèÉ_‘ͦÃ5ȉprrhÝÕŽ$ѯùãàæ/TVÀBm¤´Iò•Ÿk’»äz['‰Ò4l,pÐYpÿ|ž;“Ë%E/×Ô¶*Ášy²Úø¦v߇K=»¹˜ÖÀžæ˜[\Vë zù11wð„ñºBÒ2ꪒ淕–ÎHøWÒCªäž®.V<4÷VìÈçµÄÀ])öe„Ö/{?AÛ:ÄB>¡ãÎãN‹Øµn'ce3{C ÖI\Q³!V£ù ³&™­]@RôéwgW_@(n+Ðäb„,Xz4zØëtœùŽ¢PÎ({˜×Kµ×S±è”j霟àª^«>·Û›Ü”ö¹ÏEOÃÊO(„Fÿë)AÑù[³ox3!šëÔVö‘ŠÑkLA„cbšÛEºj ÛÇû•L9Î4áK³ê‰0rY?‚½‘e"ŽNÖ ä~˜¦Dx8Ðç6q@×k²GaÏkxm/ón[莗Ùi/¨3´›N«9=bLábB•løV¯÷æŽíÓñäîáZs1º¤ÞF9¿ÛžÇº\ɾŠÌäŠÈõ‡…mY`¹NUï ¨•ᢠü^Ý­L€mÕ}mªé¨zÜ+·#7±è‘2·ùãÄÇ¢8àFf“ôãçA”©- j×È\´PCadQä<~Áãß úè :ÜQqÐÌ”z@=Ù;.SÍ£È[¶72Ök]2ž=þI^êF -›çJæv¸£pg¬´‰ŽšºZiÜØŸúÿ¾‡½uÒPè{öù¢ ò*ö«crÈ<Ë™sP‘]=˜(Ò>3ÑßKãeô”)€RÁ(ãk+»öÛ@M¯ûTÞàgm“Q1¬*ïBžG²HE1so¦d4†|i1©¾«ïÌ7ÛPºâÔ€»43á,õwn¾®ƒ™.ºä‚ÚÝ’³Ÿ µg³Š5×G*½h”˜W:VŽ MãÿíÉ GÒLë‘B­DÆ%Ú· [S˜u.1rZ@ÌÆ«u¨èöÆZ—¥ylb~íœÜâ7v:æŸ8ß°¸tH,!á nþnvWÔJ³ß6°vj-šMOƒUoGqÜë # »Y€Ñ¢ãeLúµmÓí$ʋśºEàZÆ$ ò±Ë¬Ö&ËAY/'Z¾Å±EðÉH×Óø{pJ›'Öq,ÕuÊ€+vêÇGé{¯›q«)™f{PY»¤E©:W Á¨W"îg—íå~*t£f L?gmC|!žù©´µ'µ{IÖÆ:Qðq7†~Ôšð%Y0á}ïÊ—± T$½KÖô–ù 8NÃÖ}GBÏ Š,L|è­‘Í܉]˜»uó¶®wB3Û$ŒÊÊÜhѳÜÈ¢TÀuAÿZ—_Ûp¿éøÊpJï÷«PC Ò6ÏÚé’ ³™6×t Ï Õˆ­ã¿Bãfÿžˆ¢ƒQ[„6zèÉDý NÍÙ,å1¡ªˆR/Πڊ©²Õ3B’LÅ‚\!}pk _ŸÃ÷³­ä˜u%*ò?ÿ•(lð5oäléžrüxò/¦…þ {L±0[i=5_âæÓe5žÄ¹ê-¦r2@}R]|º®zƒDþL©¦ú¬©,ú,lË»ÌE…OÅ==“ØHµ‘#6óQ@pëçq…çHrûú1‘u%–h„=+S7â7¾RõN»TB£Ù«‡Ñwö§áÞ°õЇç”Ū"CànAeÅ|ÂðkÇŽ·Q@=Á(‘çºà%ðŽ$ÞÖ ä[‹]O™²QÈŸ?G_óm*†Æ. ~W\ÆÐPíWÒðÙ–Ê­KÍ@%qžnäÌT/yxU5õÕ‹±°Ð/Á„|cx”æ/Æ :zKñÏ #þî[ ñÊ9).k)¨cK*Ý¥œNBªú‡îuÉî}úc›™«²•$w ®ÝÉ9Z#;îÏ S`5æ”ó‹rá'—;!lOò ø Â?cñl»9Ñï›2%ýLÉCºlɆ1$ ˜å£¡å êÞumçlãÂÃÈl4F|x[YÄ6G AóìUüáŸA#?¶Bä¯<ðŒãYRr6‚`e±F€5nsúŽþ6Æçoõ˜ü*º q|Ó[¯ÔË=ƒs¦‘MÙíEÔCEE{1…/‘FäHã¸6z¿í~†HâèIÛ«TTJæ|%T.QȽœKÖW`?»žwäbèØÌ{‰âh¢§É†ÝB5#dlFÆi•wxòŒ«z£fžNz»ïT˜¤ã'Y[ÕÖL» Ç]oŸ)ܽübP>) –ymxÀ·Ûé7·Æ\!4MeÛ`„¬ ˆöÃ^Û÷^x`xÁìØm –Sº[­WRxî…Ø,RðPS®÷±qˆ½€#¬ÚlXZãú䟜$x+ÈEÅÓ'óPYæ¦Û&n½–¢“\xç(fw~R- “$×zK½„Öo—ÎÐvôDÖÂð½vFãªË,¤…ú¤}­ÒÜi¶N‹yÂ\${ÉÃÀÁ 4ñÕ•ç㨥rúò“’GÕ]çjŽö]GÐ{ò*qý5N¸Ò):™úåÚÞX´uâÖÌÚÿ¨óDT^ï×ý©ß¨û~ÏíïÔv“´P¡TkO½½è^.çí¬jp„ÆgûÂÐ]ÙSˆa>ÐÆ…ÞàÿŸSRïHo1ä4j #Ń. 5§jÀC=f„P7ÄtS 2"D,9é¸säc¦€~ -[f¹!Ž ÉŽü-š§²% H 0û% £osu¤hÙPí:‰g :ÌŠfƒ!Cn|ŒÙ¬»ƒæéŒG_Êšëd/˜)–mª‚íàc˜ N‘2(]ŠÍ7ÚNoχóT¶|оõ¢A€ÿLõ׋)0ÞS¦P:õA×bÈî[Q €cSðë°Õ"L®¢ô½¼—(¾ý[À§1Ïç“¶X0ò.®ZV5€>s5QºˆI+]¤A“ëõ}oîiö¸PÈêŽ0@#çø¿øöǃ\[z8Zr‚ٯg2´Åi”U=¢¶DÂ}¡:ÖÆLˆž.#ob2ÄaÞٯ¦÷[”é²g°ñqñri±µ¥tFÜåP.µÌÀïÒ¢úyƒiU*€¼"Kî$rImȉz ¦ð±iôK}Jüà+^™Æp0Óøœ' ̤Ýø¯¼¨ºwü-!x)rä¿XC>e'´GUYȃ–(õX»¼9{+9ª3êa$¼«:Þí& ˜¿è|RM·›7 ïßbåчO‚©ÃjJnÈ«O"W¥Õ/Õ~´£¾ûk@½DÇFE‚kwö?AWmúØYa‡›i"ïm†.PÔ»ÑGFƒªVÔÄþ€MÒ88Õ9;ït3\• ÿ^Wƒ«„û…x¿=« Kÿæ=ý!(|H¬Õθ½X–K}ÍÏ­º2–R´ œ8 È+ÿ~ ˆÁ_+]š÷ÎLÔUÈüo´hÇ8X¢,.ªKKwÙÅ(ì* ø{û–ë¥í¯‚NFÈÑy=ÚÏK^ä6Ê §î^?Ä'×Úžè¡b"(GweS bmŒG;?K5â–2j°H£ ÂËTœ[ýþ>† åkD>ê\W±'þ¿ÓÌžU ŠëüéÓ¡qÛ4ËòÌóh=å몹4œë=J˜ýŠŽ¡*¤=igª¡^Ý*|Æ‹Ž%RØz7/`Ä Ïí Ô &CžD-f\U¨þÂ1whÙŽ/y8’¿›©©Hë“÷3° ç>œ½®WÛ«Ÿ…<-ÃFJ· ‡7‰ÃèÄ€øÚ¿Áq$ß+ݪ‰{@ºn—‹ ÂeÌæ2ð?_ý"íe¿Ç6|_ÁA_3Á3Û—Dï­2 a!‘ÕíäH¬~îêdŸÐVŽ6²?çµ¹+l;Îj~ ëÉúI˜ønûNÆC1ìšÔEç¡Ò¤.z~ÆðÙ&Kêe:¼ÒNH8‘ á¿Ç›…ŸŽ'‘ßÓ±^Ê9:åfÉéüÌRw ÙIÓ ·6Ddžˆ°ÑˆÃV¢Cžy%ò‡Ñ¾¶ âDÑž°k=ó¡˜mÛÛPÂþЬ8—rM¦2 ij’P1"0v¢RK*CY4(h?åö«U`{ÆF)pãÌ@uï'ÞÌó"@È´é¢àa™þšD¬ 0ÝsíþʞẽxN¾¸ü^ey¡Ó|¯&õµ!Ë%‚9´|˜½ Âg¡â5—ÓD\ÿÏÆ–bFÖþr¢iÑY‡´è,ÐCÒf¨¼-V‘bZ»biÂjT×¥?Æ2SiñÏCr·Ç 5XY562h¶‚ª“A¡v)O›wóò`H7b8rÞÅr=21}Ù _ÝNmIãÐ*$Z«™¾’—t‰—Ç”Mv˜ªTT[¶ÄL Q¦¿Témã¦Rïˆ?·‡—t ìÂÂÒf’†œÞs’èt£– Oƒ[ÚŽð$±¤­‡šiASÕPÈÈ®é1>Ä‘ó ¨c=j‹žÍ:¬o®\ú–èäØñ¬†tãß'+%: è–Jñ=IxÕ!.W»°ÄsäÎ0ùFººCÔ™ÅPL+B³]‡J|wW«·‹T˜•Zsßx6C’Í~¢x>¦‘ wn0ìë”´fÒì4>é1žêê|ÞñDGǰO©¿á;L×$7<ºñáN4Ì–®rH°ä¹¿þçjCRÏ‘WÛw=±Ža§ÊaF­`¢_+kEz]ÑÐ*§Ôõ”Y)ì\ñÎD¥[à®›ŠHD²dëø»h{cšÜÑÉÕï±Ël„ _{³/ÞÞ—g ¦¸SˆqiuHÛyƒwök@QM#@·)ò$¾è詸_ƒ.•‚yl!6³ÔÀ@qr–¼iå%<7"Üñ´Àé]ù U†fºÊq9©ÿ’ç®OÅæ>ˆÃÐhœ¿ógÕû¢çù œc-W„1‚ åQ!§œ±=¼ç)pèùڀВ ‹ cVúÝ[•HÅ»ÌÒÏ-UrßKª’¹‚k#G¹ìN/o rvÞPzR¶þ†Êo”W’t†á¥þ{íé8Y› iR¥c ×â‚ÄÁÇR“‹ø× ×þ÷‘P¦wy•m*êóëlzÖeÑož›ÈäÓêd~o-N)? Ó0ŰãR§•ݘW…Ðë r×j©RtÀk&n‡ŸhŸúhCs œ·E^u==½XHRßÑþÒÔú)›Ð'.ÅtzK’¹QÃDL¶ÄÿÄb#tT¸fEãúïHN³Iv¦»4ó7·X1Ÿw(N`— "áƖ[£{ Ù á¦Ò4L(\ ¶ë n›=¯9Õ­>–žh%X4:wéÑÐô©ÁrÎÏÑCƒê¼u^Îë*¡>J!CµþgŒ•m œÕ¹ú‘låàžÖH³”Q[´"Øtêc¦*è&dC$°+Ì…âÛBÂJN‚F¸¹²þŠÌ︱>ì¿{É&™àÓ<§¡¦“wg´Ú»òxHåkÿ³™°Í”˜zÿšYª0&íܨ…?:”{åÊ€õ7VuŠ­icô¬lõר©ax…Ü&éyûÖŒ4&RÒØíê›—ÃÀkeãÙ-my êuJÛoëèÍqð1¹5°~¤%œéûíç°~ß=*ïƒÕyÍŽŒ·ù°D—­›TbÐïÂqðÍS‡ã1¿˜Ë„߸î5¼¬­]¹·ÉœGÏ4ôâ×õl!ýþFƒövÖvAþ¦ðp(êO ðÍÊ |vŽMT^ÁÖÖrˆ¹…mfµ~”íÊàbІ`<^ÓK¡”ŽÊ·ø×ŽËêŒF:Òø†)$NRâ±j; ˜KÎØÙIŒ  †hÙ¢¼™òÃxõ£áÜŽ?¥ÙáÉÔÃ']júïüø²Š¹¡0ë+ÅÙ®ðºrwãoA¡pRƒ8L'€SÞáÊ-rR‹Ö†šœä̘¨psNç§r½ÇN§÷œ˜d)D› „¬¡CjÎ; ø·HRŒÐþ.èÁ2‹c’âË~ý÷­#}÷ïbh7Ã*^°Ìž“òÐ ‡ÜèêìS‰ˆWÒn9c‰¾‹Üc\áy¾Ëas08yCsª6‡`÷¡­…A.‹¯#—Ì[½ze+7·0Cé¤D‰Y¿ùúo„Q’pÌÀÇF|¢Ê€Çàš^ƒn‹VÄ!VÚ·Ø3³=Å¢ùÞþÎpKàˆ¸ývïÃr'D)s0“}rÏ×äU#Ó°á¦zS\.«˜ý˜hïl8¡Ëž/”~¢¦Y«•*kÃF¥Z;§ÛµVƒŸ€/d éØEj†¿Ÿh[’Nµ‚ÏCfU\þïü”K‘À?#´g®àç BÐEIª#Ž{=ÿüDÙ_#·êÌPPÁ¸›/C,Ô¬rs‰ÅO 3Õ#þA¢y‘iD,wwõÑŒÚ{½Qk&«tãÃVêj#•RHüd[ý\*¿›¯bQÚ¬þÍçÄÛ"ŨÄÐÑÍVÌß*&lD/C{  CÉ‚~7üþ¿Šôß¶QŠœ6̾ºvd¸IZá)u"„YÄ\Ưf¹ä¹€´µ¯›ú6äñÿÜ$v3Í+`û;ÍŸ[%–Þ.¼_Ó$¿÷‰DáZj¡¤æ¢f} žü8Šœ6Lž×…‚tß3]ºŸp÷áâéfåeäêA>ø»AB¥çm¾±ÐQîÙ§bTÎq°P«\­(cõ@…¦…>–äV•ÊpăcÉ:-—×+Ì~–)< ñæ§Ÿ³0°ÆW--F·Öx§‚%’6aâ¨Õé¡·—ï1 ü»‰† îAmDõ Òb« G gº!n€±çß\³;!&¨ÅÄAË\„sYt¯$ÒB‡¥dQéBÞ`ß;ò÷mf®Åz󵽋¾˜ð4½ͧ_Yá›$µ:r@ÄS¢ëÓ÷f‚ßå祦ŒüÏQøRw÷AˆìØï§ìe©^îL¬¡h!Sj¤{:°¥¸ ŒtïÅbÑ­¢UÊï;žµN„©j¹ç,îFÓ1WÐ>[Íõ5?–ø‹E1sçß¾‰Cß}y„Ò¯!;Ûoí¶¢ìç öO¾‡Éß’QÎFä ÝCfm‹‰ô$¦]½Êò²l¢c««Ý5tÈEψ•cò±Œº)\¤N(ŸÌ'B†%ælHͰ!bÌ'Äuz&èS˜›ÝÄH-Žl´Ÿ2U-÷é•'vŽGà눪J§‡­>y¶i}@Ð# wßi#Uåk|&X®!¯ÅPœÎ=ÁV÷‡ç¸ù”Ä”U _àÁÞ`Ì|¬Lå#©’“¾üYgÛ-SÊr8@O[¨Àî†qëfÛʤK÷¢‰ä?à IŠ!„Èàf!hM Ya2éK©‰Ñó¹|¨#²fêÀø©úÜ’“LÑ»‡[áe‘’e¨€µvóÅ È/’ã?=H§½-$¼‰ºNFS[ä÷e3Ab ÚÁåža\7u»Ü"Õ-Xô€P”ÕÿGƒyB¹Èsš+w—»?ýG&¢MuêѺ1?QnÄ ¤«žä£€íPö“-!9´)Ò?)ñ¡·Õ£6Kð$ö¨[V;­B‹&ãı!dãËUõ¿ǧ'S:)“`µ|æ&‚`¬‚s§ºé•põbíw¯Æ™–´<JÙ£ó»ÐjMÉÍðˆ©±{/ÛÙ‰ýhÓ8S5:[ã‡Cr8D'Ôx{ä'„T,yü÷úï­™O °Æ—kæÆkšI¼%#*HÕ½Fž%× q¦åýJa]íhÕ»s:$ô†¹±Êfd³r¨„¯Œu նݦ2 œ©fß'OY€Îö£“?MIdiÙ;M ªPŽ4—3Èì$p~û>Ž¬Òæuýw×$™Ýþ dõ„o]1ÎûB1ªYáûñJ¢dãŽG³ÍŽœVIH ¹ $%ìŠq ¸Û/رʑwŸíÏê.†âM>ûëO"m,Íá3‰C,‡v¶DLK¨~ø.·ùuò”VK£w³ëQ…ô{¥¦?æ¯ë°X'±,Þo)hú¤è-3{Oýe_Ô9óÀï!*à{‚Ê@r¸Ih²½ ”ÈKÇéWÚÞ Uáz ƒ2¸“v£1“áèœÆ{«`!–ÿ6ºÒÄ¿8Õb YÏ<-v¿•Ôðóݘ5DViÀßìÕÎq=ŒéK´×eñc%{fÜÿÛ1é„SŠ¹Ð—Ž&Qu¤ÛäIl-`Ofq©“ñí1eTE6^{fÓJ‚…únÌy ¸5è÷º¢ìü¥µä4yIRÛSÈú” ”¹³è% £óg£tÙıªQjx‘<÷æ%.ÌàêVÚH"¾² §"u -¦CA„Î.¼rî6}wUˆ/H… £ò¼q£q¿lý¿f ØØ·dÂõsf K«þ*’[ÇwtÌC$,‹6­4F5VR8ÁÍBѨÆvË4ÉaˆV]P ÄÓc?¯Ttè”sÒ:ëäÚÝk¶{R$Þß‚ßS?0ÚÀqAx‚*V%Œ¦…ÉyV`÷@´ÖëDà`º6ëR99•ùþwÍhéfR‘Lîä¥i÷?¦|d¶ß½¸“9û<­ºîãšU¥v}Z;DBZ@XidT/ h£ƒlV2ðzê¹÷”Rè"^3Ò*s‹lKzæŒÂÕÍT‡ùËEv Ú$V2¶";ª¥mÂâÔ êœ&ÚHN˜4¢OGØ©Rˆê©(ª{¶ùrî`‹ô™¤î*cŽ äÀ¨Ì @¨\*‚ÅuÑÞ(Ñ5¹#Êp̶ð\)†v"ÏX{ZiÿCÔ9.áÂz¾žÝfD׌uHÂgÄ] àÒˆ“õu'zÊ‚*ð£q†¤nÒ¬1P½í«JÀX×ÔJ hÎÃjì¥Ú 3a͘ÙažýŒ8ˆóh,sI¼ï|*ü¬˜äØ_†ï5AøI™X`ÛÛ³){/¶Œ¾òiÞsö>.9O€‹O2âz檄Aé"OYVO>&•îûyž[²F)šH+| fLåUX˜Ó¬H“䣘”Ÿä(sú{½¾Z/³ýX>'ÛZuÅxT!R÷kZ]¸2xèð{µB¢‚eÕ…ºgÿøí?â_B®’Ȳ™üÐÅþ}|¼ jÞZ"FN0ó:”¸¢Ð÷ͽŸP®«–0»|-~‰*‚^¯¤äœL”ˆ;Sô%TµC`5É?ä-4­3Í‹Ô.U0ãeX^4²Šù¯Ü3}…“Tï7ÓŽŸí‹ëZ^HãÅ/ßFnf>-b,‰Ê÷Íã}pLÓµ»øsÜN.qwà ” ¼Ê¶ Ò¯ YE4æ(àË^jŽ çÑ.šu‰‹»qA>‡ÒFü'!*að:Ù_ —q^Ö"öÿÆ<0²àÓÅ8¦å9[ÄþÊý«Ñ絈œÅŠ'¾£ÝçõŽÓ.:t@ÒR‡al½ÒÎä3=à§>f 'I•ñC´8¥ iëI’îÝØ Kêµ?˜Þ¨Ô6Þ‰6¤¥/ ¸Ž9yñ “P*Üí ©1>Ýy.“h§ÈëŽ=ï¾rÏK%Zó5¯™’Í!ËÍáì˚݋†ñp¥ûZðDOÀË$½Ÿ‡*®?QÄý©IÁqèa;ú;º%Þþ }TmüRÚúš§S]…À»²F"]œ º§DûŸÞ¦—tRž à _WáJS5ì×܈o'“‰ ^ú7³#äíèhcTö»bµñ B2ÕEã-×›ä(‘ÍËêmÞËóøŸ’iøzE²l¼zF·A:ÊÛz™m°7™Üúk­B'ÔSDGòž‚åƒ@.+ö'ßY45¼œJZÄŠâT$^Q몀aUbp#:¦Wz˜”YŒØí4åV¯üÑõÖ‹e;A²Èô»’1ïÕ6nüÖ“ïûÎRœám3e8vó‘Á¸„§2žE%M õPÁÒe(Ф­©2§¡ ¼Ê!t¤ÖÑI}w ¸à òøJ®Ð²îaÑh*·ižð¡AÀ‚Žg.zÄŒµç…n†*¬F›*-›š=«±Ób ¿};Ê6Š®ŸaÞM¥öï+¨×Eæ´¯×Ù…bÃË_rU£ªÂ\ýy"Í`蚎Ù,I»v’í‘xza‰a|ôrÆ™ªÀ¯°h¬Ôƒ tf+ª‡ ‰‚·ý¨.QB¡|£os­ò„êÅÿ¹õ"í™ðùj‡È@kâ¾®ÕÖ£±ÂSØ35u|ëÑ·ÕUGD~uýU±òĶÒîv³‹N:¡… yóþ´ø¯î‹ïÄzNP]Çñôl%"‹7IXN«I¬2Ï’0Ä¥¢{ ÏÏR´­vØj,ë¥RH“ u:4é û›UÛÈâmÍÖM¨- ÄÁÓ'-àæE_ ™1ǘ S€ôeŽp˜`gбÀøa‚ÂÞáèÐóPEвy›ALRxv²ðAN“ßG/°ÀFǦŸ˜>æšU¡MêŸeçV¸A:êª:À—,ÝÏ8ðÌ"gǧ³W]ªo{e4Óvs@•ljìâî“Oc™XËø“áptØà¯bë´lÞø‰ow©u1[(ùÅäÐ0 ÿPd¤ '¸HÏ…°àéáÁŸjh·-ͳDêEº²=êÙôr7‚w&mβھYlHƒU‘³€jþ›WÓ¸r&%×Aâ1ñ•+â1»³—CO¸qnmƒ{HŒÂs˜‘i"Þà&-–M’%6âöd ǘèç2¹pcˆÎYiž¬ª?JˆÐÈÍžBÚO`$4u ^ã«k7¸ÓIއ¬ÅÇ-Rõõt'N`L ¡øÄà‹OpÀA¶Õ =˜söøëL|ò§RôQ·˜í|H>]͸}_ºMR/Y…_Xð³@® k3¢aÙ—C4óÑ* ªáÔÇx òâJÍ~ öÒW8ü·e…»Ìkn2?GúNœkd7’Ø].cùS㆒tÁD>Vp˜ÔyÌ!ëî1©1 x “èÞÔná 뷬ÞhäÇ¿ÿ:Û}#’EY°üá Pî=ÕÛQ zÔ#Ï‹å¡ý,Îë^ÝÀ­ºø1ú,Ôhß ¡DÑjdH x|aS%¨åLŠv‚y’Qô\»ôž4gÛÕÝ{K1Y­0õ?l[ ß./݉Þ.´Õ=W( þH×ùÍ€µÖ¿a¬ ²¢Ã£è8pèìí?v–GLoh¶ä],¤Ë1¼Þ*ã¿ñÄ71@ÛQñc¸_Çrv¸°VÐò·œìÕ¦#ºVÆþñ">jY¦à‚ÐzOžIäæÜ§Šõ²¬-ÆtÒ¤F±õªôR¿²õ”*«Cú5]Nj?²ÿËÑb‚£:àʺ\ªÝ–5?ÜÆËF¥AÍ!'–:`…(2)zfPÆíáÚÃÉËù'r~ø6²Iª‘>„ñÑ#Ž­¼EÉY; íÙ«ÉØ%Õñ á–TPìõïÊ8ùäëÛVzpN%Y0-£ÐË!U;x§bÄ‹¦jBfSGœžš&Úýlx ÃeWÙGåõ"22µ1ìâÝ ó)Ê{„úóhŽ”µ"Zk²?›ù áë0g¢)Zo¦ë–Ç/ûä¥Éj>\À!7ùäHl¿UôuÔÌ™È[}©àŽ"4éhå=ý5}°ó£íØÁŒ–l˜ùð” HB¾áó$@ºÊéÙ̺Äüv$ñ0sž¯ù$´ ¥öïkSSç’*=xMÉ \r‰_ÚN4N#ý4`„™à~|Àµfý6¤\[}91HÙšg<â À˜™?¹ÁŸàÊlfE_Î>ÙC»Åæ~é%˜Q¨Ë8„6b¨q˜gÛ¥BL [¶®Â $ødÒ‚ì9ŒHµƒùuÔÿ©q}E껸šm:Ç*Ô`n—póIÖJqM…8£îÞÇòB€P胂›MVÓƒ¨zœ< F0M&=Ñý!áäT“Ù€™²~á^¿ž¶ÜÆ”¦–쥘ŠQO¢Ü6<˜x°f‰gïU‹­}LB÷Žÿ@y': eQž¼rV .LßÅ@hrV]}Ó fÈ úØIQóëæäçþ·ð7wtÇÒ|5¨ò@fUZè ·ì–¼ÿ®™¿V}ìAhG&¼ùÜXv8‰£8ª¯È¿@ûLéœd7ƒŽ.?­F¯÷ͼÖã*ˆ¹Ó)CGÚDq˜ášGüGæï_Dx{dÎ…+\ .ÐûZ7i›¯;¡u Rø{n¡J±P$`¨bÃû_Z˜¸ÙoEøß$±_[%jW2M˜õ!ƒ H¬‘“K»N) tÔÐ)m^DXxƘÂ÷u3€ÍÏˆç¸ _¦Ï³÷’I7kyð+½ùÿ`Û¨¹ÖPT&ÀR©ùm5”Ò sŒJÚôR€-ÖS¼˜Â-<*½kæ-Þ˜NëçOü‡"­N÷çý«‰bj…u©û3Ô’¼"©ø’0ßTîÂfe‚é¨Í¢Áôgìb^ŸÞ ,¡€èáËå=5Ä7æØr +zÖ‡€ð*öμFA8e%Þ<.îãaqsåÔ\…áRD`‹Éw÷ŠØšxÈîÁb²¾T§JZ³Bn3æ^W•Ô mB°^ÊŽÏŸñÖÉš˜Û$š½³˜œi:}Õ“-_ó“4ª7šgÌŠäë>s(ÔŠŸÈÁi¢ Pŧ$ % UDV±²Úaã6czTÆ+Y1}Ò„"Âd9ỾröšM.࿨ÿF1îýê¡IÈUª|qxÀ³¿°ƒ~Ь÷,‡K‚ý“gú §¦ªÍŒ ~;¨ÀÝQüõñÞf|ŸÇ¡=½ì5uô"Œ@ˆ„¤Ù7ÚgôÕØ[i®àÿ1aÔ•Õ ›;èOõÛ@¯ÛmÅÌѳL¹x‘ ¥¬¡¼UD Þ„þÆØ~³Ž¦J©|‚„6 ðLЋÁÁÉí7·Cc­Ù:fÞ=øï‰Xh²PÉÍþ-jìŠ0¸özkPÇJîb•^ú]HìIýGûÓÇx’FæâÞY;äÓ®ëU¢QQ ¸ßŒVŠ^²ƒ¶œë:6å8Ñhs3‹˜?Ë90zŸoð¦¨ÔÞ&D`Wx‚=aéüïû~¬ŸÉDºÆŒà¥ïKó¬¸Â.ÎìQ1Ä|¡ušx5⬃¤Ú¢R:5\°†™ û¨FŠO†iÿ›Êe êà µ:Y)Ñ%ìIËDP‰ Òi´èíɈÈ5>ÆÑ¿½‹-пK8­ðV¼Ÿ6×/ÇoÄcéÓ·_`mù·gúb ¸ÖYÒ#“I¸»%h<º#î ŠM@‚€úð°3»Xû@>8£Òÿ6~µ"þ˜qDnŠÇ;—xʱ‡ÇÉoþ BJ\kÇ,Ôö‘ áN’èöŒàøé¨ñZð åä—#ô|G«ÍSy¯]w±n™ifq½Þ×L Ò§gâØ–l(.6$íø;KÒôc€åüYÔmŸ'×@Ÿ@HuWF©|;Äú¤½åhËP]Ý/úsö¹.9ä"iß%D;½-t–ˆ•ŽšýQ¥‹ GFEø4w~\*J«Ö?ÂÛÿ‚µÙK7âHÈ+)ŠÍIá+ Ó¼v7”ª À¹SðE2Œa? ÞN±wëIFØÒé«Ö Ú¦`¢nÈÙ¤ IœÛi…µ@j|·ð[£Qa-wß‹œYߛ߯'›w<D·Kª¬­ªö„3zðy=sNõÐ=C]Œ“• Ìè8¢ZÍW¨B¢ßº÷Vç8:|™ˆ"%>òçbøæà.ç)/bÔ}h¦.䬪‡|ë<µçt&Òî_)Ä+ù œÌœ¶XÛ‚ h «31­yrUo‚ðâCqlÀI˜È“•ŸÏ¹U?ð6t£4[‚Sûo€2WDmþÊnåƒÌTÁð}¡ôCðÚ<ïGã,FÙhòí^ žk †… ã†Ñ½Qn¹óg`õûÒlMÆVÄsð‘ÀO ¹ß×¶<žž8¥´_l¦‰ñ(ú(¦¨~D¬åóé ´O´¾×뉆3¦†Œ¹–m}Ü0”o…u’“6h¼}ˆÄcXeVFº·™Í°–_ÈeÃÙÄ9e•Pv"û–ý]XX!öDtþ쪃¶Uxç\÷þ]bWŠö)±‰Q‘/'}æÄ|ˆ¢nÒ[öç[¸¡L¬x‡g?P|™™mþh!`쟕rŸdO÷*Þ/DÌ‹4rJÆcYV¤n›þ؃‰€Ís0s++†¦_ÝS‰>¶Ci yð!OW-16áÄj^õÕsé;€X9$9½ðø,bu“È÷FÎgæ çí-̜ӱc!Â̆íSÑü{ƒsCK +É1<¶˜&ÿ©¶½èªÜ \2æ6yõÓ%P¤ÄZ%]ÃåúQyCJ-ª÷Æ B^2)DÕzó‚•èZí;Ë Îš )È*õÈÓ›XÀ†}J1h²ßÓÛP°bD™%û‹S"¹8‡pfpù ::ží¥Bß¡C¡:#Å÷À0ÿkš÷Œî‡=4ÛO]-×0`TžPèeâ>Ä-#HYíô½o\9ìDÍï±!GthxS”h_²‚æ;Ùµ¨÷÷¡¿–!­U· Ûæ%èΕlº9Aצ²Æˆ¹9ÍE`&²ñHæ+-ëÌF7x"®žç—'ud‡êÿíåæÕ­ ç©ÔYœÕ2ôùeá}Îó–ÒV-±·Gœ¼G)ðÜx–$¦õþFq¶ðh cšDZ3Øä¼IíÒÊÈ_F9â2ï5ùÔ5‘rAîÕí_3h<úp'ᲬÙÕWuÿßù¿ïB‚Y-¡ÂÌSê5Šq+²Ë99 I ˆ FÐr¬Šç Äg¦Àï[ttEåNÂXÜk‚bÜruÉ%T6%MWƒ¼å-¤˜}/¿ËÉ Xyê×fû–6¬¸8à¸>ÎHIÔÈâbs‘¥ËèËЖH×Ú@ÅG ž§ïì߉Øe6™qr1ÁŠßInâÚw}ÜB¹JÅÿ¢7di½°íÂQ#$X>–šÀÉ 37d–ül[ì’¥ =»•Ú ôìÈ û¾ž¶dà¶œX/ Yðg)®­Üd:,€ (6ûqUqòD¤ÔiS¢¡ü&˜wA+ú L´œó ÐCxqÂRBR16üp4°>lä’¦9ó@›jÓü§z-“2׆^ÈM;]{P’6‹UœÑ9Y«|g"‚±¨žÁ5þ¼€–ØêÕhPûÌ3ùÚ<Ÿƒ<ŠCæpÍšÕMk-Ø\È1‚Ë£z›¡Âvcu߬)¶=†#ÔÁÑÌCIýåŒ<²õÖ}Rš‡qÀ¼ø÷-´‚pzhˆÃ’Ñö-uïyˬ•çoš–{Ž|³›0\ú‰%¸‰.d®ê$á®4±;ÞÀHÏè ›W$Y¨Z†¡z7}Äp˜WÝ”2€&-}©6@Ú•“œ¿Ú/äG¸$]mTû($÷úhÿ­×|aÍy–hQy¿>TxQ™ŠvôªFÓÈ7Õà"u)­·Vײ.tU¬ “¢Â-²ÍÁ²APŒ’Zz-¡ÙNÏFRñœŒàyºDý×fÃUG‚„k~#hm7Ö‡¬‰bš Ž S¾ßƒv—x™‹ò›7ÎB½† ¤5€k­fÝW4L±1yYIÏ&øôbì/g¼ÌÔ:‚Pb8kÈâ0àISbgšÙ0<‘¬Y¬ý`1ì“jCä³²ècH¨Ios‚ ûŒ´^íiGre½­S½{˜0L_&iW½¾Ù¤³‚ˆ’€ä0œâXmsÎRëåÚh£à[ìd‰;^ðhå7€â+U ¦‡dñ• Jpžô"å°á<¿46§JáêÙêSМó$ ŒðW«:jKF¼FeŠ{?õñf´à›Š¬¢ ÷!ÅmhÜØ³Q.2M.jg±hŒGRr¶q7â²&t–ïí¸D¥’Ì6è“|Ñ¢W·}Fß²2½ @†]ªß(Œ.¬HT8úñ¤žK Õ£µóVZŒ+åtÿåC«Šs4"ö nølöÕ(ôzº6'€MeenædÕœVnè^·›Iî‹Þqh GίÝXÃl:5ö ¸ƒú´ÄÇ}b‡°3¹¦ú&"8³rÏËÞÄ®a½;:ÑóQŸx‡'5Ÿ­¥k)7«9ð#d™¨R~D·SH1º„no{hÛ#ÏvµÈYÜÍFjRÅ0s¹0ÄÞ/Þ½2ÐÈ'pd5G&¬®ŠÒ5}ââ}²@ÄžëYúžÁãç@$SòbÿØ£Mƒ«àjÛ¦8;†å؉s"¢êeÆÊ cˆ7ÞÄ w§§[\¶úã&ÄŒÈäms¯‚#±õieñÍë¦ý&å£ÓJˆÃ:̵ê8ß§+Ü~ʼ¬$-XÞdÙ뛥žôx5«Ãݵxw†Îšy%´¸-›í¢Y»×wÚ 3pôóg…é{‚éð>l¯¬jÆÁË@HŸÆÂšZ&¹5üÛ3bûÛ!Âï6ê7üSwÎé˜\Q»¾ þ¥ƒQö³]ìË´rëŽ^‚X1Æki‰O¯’æƒH•RT´„¸æú¹)qZ?Š×Á½µ45lãPYd`†ê·{ 1±®eðá7³¨`°²YÓX]µØQgE‹"C{°‡{ËÐ>è] #p§£Ñů0ìex™Ã~¸p¦µ'¢érüëŽDÈ„î°]1‹tσyìPW£$ýÎ}³ƒ¥×Å#h ç{†ÍKô$àð¾#åõeÂdcÁæötýE?™xRQxƒÑ´ZX‘’h+6SŠ6'êwwödU;Z¦Æ\²í;–úZêî)BhUHc<ñ½“«ï^Ýó¯([»iFE7‘öÂÁèj*“‰IœÒïV["Wû¿$§!U£DÌ…¼:…–ÇŒ"ÂóŨÎàøŽE}}w2Žb=¼M<σòôØ3 ÃP¦±ÏI7íKׯº¶‰X×ÁºýÄ{¥ïx|¤y’$X‘à…ïÄǸäõ[­9OÇ5ˆÔ©Ië·XQdm…üs…_ûÍa{- šjÂÊ>ß !›…~U¼Ñ‚ßíÞÝÇ&ÄHôÿN—ž®êvõ¥<ˆÄoxNÏ ç¡ô[[LkÃûÁU¾@}ïÈ»*G@BƒWƒ‘Ö½ôP>…¸0¼[?Y§ØOÚ·,­C S¢y"®ù× O:ÛD—½ÞY\–¦ A7ØUT÷+ëð@Ê’¦[RÉeÚÙAú@#¨›ÜðÚ+5b ?u·_?ýäÓ{fxl a@qÔAP'£§–Äœ,¶pœ;¿¢$,¯›×IJ‚›°ÒÓ~¯HMn,‡7J@9öZkŒõ ‰ZŠÈ‰ Ö¼RטÈS@6ˆÈpÙ¬NhÜÞ=ºm¡d°r ˆa¦uBZÕR_/(Ú#˜ýJ›K!hj*;ØÍظ…Ôq‡ÔÕ‡tWd” Pþ ƒ¦Ænt|ôÖÎÂoчõK(kì •X÷-h, MJt:ŠIK±H#"¸ö9ïýFTâ_„†Z[–t¡êlýož`´äÏM2¿#™=´ß[}˜}ït/¥¦ÓËøxÖàâBÝ»ÓÄb¼ä¤ó'7ÿÚÓAf|î~|*šç9âÿÝ*iéæ$èãEgŽ‚uíÌ ‰`zd×NÑ­».JPnJŠ= D½Ÿ@ÛåôÃ,±|¯@Ž?ù þÑÄ–Ù†É2ƒ†,‡È4eTÕN5¶WÀ2Q€n cÁ/ŽÇº°O°C7eÃAAÊ3»)‹—7§¹¢…ýF]¨C#e”½Ó››ž´uê(A«¨Óæµyp5X Ÿ{­ÐíeõX>¯&溧SÄT¬ŸèR6úÏ¡{Hs†¡öx}-ï‰ßm¶{÷f•k R11ÿ™cÛï*8ÝûÁÄß2¥R¥ó†·ÆðÝÇ­Š²1SOïPº²sô뢹NEAC¹0œ<> yÖpAoºµÝDCm`O^ ÷]œ˜{ÞŸ­åŒnnÌþÙXÊpûTÁ[îDìâ©£O ̳¸¥W†%ߺàlÚ}&ßC@ôƒ÷¡óA*éwGdDI”à/¤w­6UÖÖ üØÌ{ò A;ˆØ‘hJßÒr4 w缊­3Z]É#*ÀÁ$êüæ,JÜY‰«BòS_Å_§@ÿ|»Œã9*Ö§ŠR‡#þ@€ɹ™•¢TÁyG.pu¡žIº-þŽ˜¦ëv׿‹0'#jOš¡Ǽ9¤wêë«öפ§q^‘M´Cá’2¾Þ,ªm•iŽUFˆÌ;N•yÀ9ô*þOÕéC"¾ p²ÚA»Qv,#¦h¿÷Ú½yrk Ý÷F“ôï*Ó š û1ÍúôÑÈh:MyÓõùG+Ùhúz/cza,ç ´caI[$e”|(ãt¶5…v¶³­ãÙyÁ¸×z°LQÑ’ ×®RªZLkz'´¸ï èHõ¥tÀHnö@EPΑRð8C¾Vº~9qW!÷‘͹½Ô ø§‰R¹ ÿØV7p㢑$ø(žéÆ"—¦Ø<ê&&ÜEOѸýŒÐžÐ½ùU\””O–OoDxTsçcã„ça ûÏ ’â@Bñ£•Dc’ްçdŒ þ1PÇòáLACÉkÉ->J°ëƒÍøL¬!FÎf€%‰õ¸r˜P駃Íc3¥!²¯#u¥ ÝØä`r0…ET5„Èigöé¡pü >“¹óÇ9·b@«Ìá7€9‹Xí3"<Ey?½‰••p™f§¨;ˆ£‰Ê{À²Ð›¨ÊsÞJÊsT3_pXýs©¾ªÈÄdh‹úÖs½OÖwr+e‚êO¡.©J®z øÅØù::û&WÛ1–çÓÍË·5ŲÓ1–-Ú¤Ê~šï¿>x*GhŠÒ¥îÔµ·®ÓÁY*@žÏµ,­ðŸG˜ Å'pLüì L^Gå!,ú]Žt^ÁÇj2ÚCÌì9zÅàçAh~-òËbb €mýh÷][ë=jbæ6ñN˜Ëv3FÐóu½‹ÝêaÕ›ÖÕÁžÿÛpà·ïö)z2‚#Y¯½ú®÷°¿ëFFɨü"™˜ †X d°ÅWèËŽK‹kÇhé³Çõ6^H"â~²ï•D*«°½ÉI1§ñ³ªŒ¥"ó/™ð‘q–á/H¬ªù%€Ÿ&þx•€àèÌ1“\Nb‡±jŽ EÉÝÀ šó94ÄúNÚä(äÓ΃=bÛÕ¼…lþ¯gÏ÷;,Yo«Îd?-NÉp‰HÍÁƒ•8¿vs9ù¤¤ JñÎÿ&ÿ~ÑÖBþ"sâ?#ðM(6æœ*ðcÍ(òËKå¾ò‰d˜VôrŒ1©e¾L¬g÷°Ÿa_üR¥®µþÄT"þ·Ï´Ð¾÷ –MC»Ô«Ÿ ‹¯sgðÚ:Ô}ó>r^ù¹œ möwut˜úÖãýZùe¢Jæh߇ÜÅÖ*ˆÖZó$í ˆºÖus²dàõ£·a˜:Ÿa¿ê÷%°Ïœ‰é/ø|ðkL6˜–Åî`뺋ÛЙˆHàr¶²‹G@n•¡ªú*ì?s0ЍðÂ<<pÛ´ÒmÞNʇÛAÓ«Š!^ ['sþ‚úúW`°ÁÒ5Éfè$ï¯øÆ[Ãx0ýbê8jy`L–)à/çÙO…C–âÔ©ý2ïTKÅåÔ‰o!xO»[KÛPÓH³Üc1;Ýg¹GvOxјЗÞÕÕ …`ð%Vӧέ›MY,ø!B:—kÊC ¬Òǧ_8ư/-VT•]ž¢óylrj3^B9Õ1dï{VóEŲá+€µ'·ê=ÙS0Ap°œhó‘ó”j”L¥# ]îg;¬‡Gã !+¯G¦Eì*ZTy h?ïÞØ$yw~B67Ÿ€Ðµ»B¼âé´.0Mƒ·ù® ÂÆE#¡Ð¢G/uÂ%Tò]þ²(þ²ðÚWX'dm˜ FºÙºw"•u?1….] ‚æ:–x›ýYOÄxžnú³3õÕ¤ºúN™ÿÈ›‘‡ÿzöͰ +±²ƒM’‹N§¸‹HôݴŒѥkܯÃiý£O~é¢ï9‰è–dûZðÓSêýÏ€ÅW/dB¯]’Û* Q†½ÎØo#Ñ,tƒú¶éB¢h¡«4­=}â÷³q;Ú-ÚÇEß®+Æ^”‰ÚÊ—Ñ$ gÙ<¤Y„Ðr»HŸ|ë2 "ÇÐ*Í/ú! ÿsIA{°|ä×ã¹Yè^±ý†—L“EHîë b5é­]pcmˆýYíïÔÛQНƒ™.qš<4Æ$Pÿb×Ab\fòi¸ªI„fD¯V O£+5WO„Ø2—Ú“(§±­òÂ{†öÀ.!¬ÿ¾·_áiEIëLHF/ª ]æH†/2:)~Îמ'Üâ6Ù~‹E@GQ¯ºnˆü¯¥ÌØ(š%òêM4ÖÇ¡2¤¥´Ù¨ÿ:ñl-eës¼«ÁFÏJëÁ²BnCI¢AB*=yB~y~å{ábÜ3 ØÉ&鵬qö“jÌ1ÃXd–fÚ.ëÄ+)¶F„(`úac#pQ@V2Ñö¢oyæ/ˆ|­mÍ· ÷¥É¼º‹0·Õ¾¥‚êÌqùåƒQA©|/»fSÈ9¯U^†…§âîGGïvÉ'ó±2¡6Üwñù6†ÕpnÌÀY¿Ÿ^±eÇSuטøWa@¾ ¼ºš’m«tñ_…¾oêÖÚ[Œ~ˆx°‹„>õ íÚÈíÆ»ªYÍtµàDØ ­}[¬áŒWd<‡N£°€ê«µ‡$A9ÈFå­Ñ&Z-k·Á(‹ärÐðÝŠ}%Ë g¥òë®>Ô%l‹6û|òåh§œ²dç>¦ÄAØ-Iwì <üĘ>Cb­b7 Mþ¥ÛÒ^M‰Ÿ/,XyZ¯;mJäCø°×4 l€Kí,4J1ˆUu’âö¼jüM “BUtëïMèÈm ÙK³¹±Ë Ä;¾§žéÓGS0„(®2À=<"^äÑɯ £b¼åŒ[xÿ˜ ¶#Ìð³hL*ƒ‹¤ßQûŠ'WŒX~³­œaŠKf—ïŸGà!÷3†]Ü%v¬§ôDàÀÂLJ Im4v5±©ùŽå n]ýâ ‘PŦ3¨C]$£C® “E©âØ’±¿û]X‘;[µxÕ¸³p#Ï_þCQ=4gýwç¡üì©7¾šî²úX.¬`Ï"‹4òylÀI„ðZ²‰+ä¾ÃͰ“ãújH¹„Jy!+)/ðýîçD…`ôÙ§>ç*š#J)uô®³Êzu>¶ÇÔq|æ{Ê­¡¦÷ðP m7Ìܼ"k³_LO's‡<×\ç&ZÛ°#€«¶µÙ®^}þ¹¨ïúôµiP…ºè§C±’ïZiè%°ÆÐ¡Øésx!Æ"> sà–µMï³î&VÙEáÉ ŠáVI¯yƒ™€ Æ °ÕWŽ$¨‚$‰½Û)’€PÑÛ@ŸÙS2ð3RxüåZXÅ»'¯SWXd#Õæ;…åW©àBâêzi;Ø4 !çœóWp·†ˆ—»ÿ Ù©áùW)v0µM Ù¹¤Äzô©ùOk “@É0ÃU~^Ø#íe9ª~ÏßâFhÙê^&¤ X´|zRvbà‘=} †ÐË—®²¡Ã‚—ÜÊ FXèL@BHó÷ãäÇï\+eí|p PMŒŸ„œœQ uõŽQ¦1Òó…å`0ó Çn»JóÙá©GCtߟºZ¯±Í~š îIøl®aø¸ð§ÝŒõD÷ç75MvPWe»…“[öÓb/g["ÓW=¯ vÄ+¤8h3Ÿf¿aA™œŠ ÷Ú4’Øi~‘s¨GÙÍáM²Ò`ð*_|hÅCÀÄ% ò üÿº•¤ðx³hÁËs„©¹?œá­c)KÍmX¥º%Ž(¯ FHÝï¢_lLub¤/èýåí«6JÏŒË5RP“ÄZa§Ù0?TËÓ?:¼¬ùÕªí£½»f½[Ëõì;AùJ‘[Ñh©ÜÊ…·Ý´¦Sbø®]½ÈŒ•*³] t 0˨ÌK}šU$8º'íL+µ¶ ¶Åq°²¦­ŸœeÈ×{|Õÿc?:¯8ps––Å¡EÍ›â\9åô‚ŸH¿ÃϪu«ÝHÏØ#ÙÜÈ™Zïؽ,×^L%ð˜S9hþÎÖ¾ê3@ÈU\ß«wÖ¹] 2æÛÔsœ ô£âº„…0LһذIñ{Y(Á¨Xˆó°­Z‚­"6ÓÚ†/€ÿ"Ùyr`ÿˆ…Bo„•Â$êþ¿×DZH­H­O¶®€ˆ u"É¡ç!™¸ÛÞµÅØæ9@A42˜u8%,3 ›W(d• Ìॆ^Ei~ ^n‡)KÓ 8—l!aV}L ¡~hܰÞL™V€¿Ü#Ç“lÁ~w™‰g«-ŸIŸïq:¤ÿÄ=9·ÔzWã2‡Éû¼<Ô½aOúâ:Œ>I4îãȯа*ÜÙ HÓT¬ÈPbbã{üQ®ÇC¡äƨéL]ëx:ŒhGÓº aC,0³p—sý“ujæ×I&;¤#Zõüßj¿ßí¤]Á°ÞˆRíVgï£"“äéྠpZeˆ¡øÉtú0ÆÏÏ«? ÷ù;¤Œ;B‡e'CÊרôåß½V?økweè*†ÚªTd»®º¤>„+sƒ$ÑŸ±ØŽêÆÑ Jˤ~)à,°. œ‰2áÏ}¦¡º!Ä•ž“c¤oöŽ;ØëÆÚ –^œÕ€ÓÌ2qñ@O‘Ô°TØ!½ÌäcK±Š6ðKý^fé»ä$%Ðè»Xõwc:&X®}x´E’#†›·C¸ƒöÖþ:ÿs…Ï/Øq6Ó"”‰ÀöË|Œ‘kWÁº=¾‘ôº¾5çÞŠ*«ê•8<'ÞÓKÞw±3jSÖûs[iÂÉçá¥н{‚ïAù„¸¬ 3[n¹P¬"bÜ-U×…(¯ð¿l~Çøð…Ì—  €2}€$ ?çÄÞ¬w9±jƒÄåa0‰É´yw^$òêO‰áíæò5¾›IŸ$\ËÇ7ÓCb#áîÉZWÕIøO ¡j›ßž8:§˜e$•q”‹s^ƒ’ÐñÞ¸±¥€·Å³©û##œwõöŽÜôlöD‰´ìâã3ÝÍ_ùѯË7•&ê3NtQL@›À WòM¦úçd»ÕGºKuNgUáIJ&›±"')‰x„Ç8Šð;4V®RÏ&Nqa-là‰ºÀwg¹;Aú7Ì µŠ{mœÅ1.†)jDoY}P$Þ9 {Z¦uvtÓ€;/LsÄÜîŠ>ÖjØõº…²ò­/Á([‚ØM}›J×ÍÏbÏüÃ}Í¿•þ#þ’ ì>m -!ƒQ²6©\Å=źü2ÛˆMدDúiÒaÃÚdšH.ÀKŠT.>óÂ|f=`ŸöéSG¸Å›íù¯o¦u4©Ù³+ÿ)‹Ã–´´ÁÚ(KçÛ»ôÌkž•ß(Ñ« ͽl]@HM½éz*ÆD3ä$`Ó®Z3Oèµ€HÔPõOo,êO=ËÕ``{]2Ís–ý‰’9c-ŠéXB&PÓ™ªumÒNâ] $æ‚blXüÞkÑa¶'ާ¶4©yå3¾h.Hhe¹|Wª>‘pp([¸µ°v“ý…]Ó›Hå¡$ž²ŽºdG4 a%Š*ŸÄ×sØáöŠSî+ÛáØ•QŽoØG•À… “ò&®-Ç–ç‹R3/Â`‚­x vþ³,¢Ó¤MÒ“ÈŽü²ˆ(  3FfZîÔ!õzí¯°n:)x%v:Ùž|¯¯ª…‡«> ­]*/@U»)ûàË™˜`ô—7”çFüïc#nYVG6·G¸å-oBœ£ÊJC•@AQk$ov®.!þùM•|8÷ÏfI&¹¸†ö&±f¬BsF§Úp7½…ë±Ó†d&]½ï)ˆ»É£æÜYº’¬š)ì܈ÚIõuüQ…ÕKäïàühé§â.“„h¯j?Ô_‹\8Dšv/xÜþÄH\åé7[òÓÁ2á=[?iêÑ;¹ýv½ ¶AKé]—„"[ç"I"Ê–ôŽt‘VÖñ~f÷÷³Q#:øÓ+À4'/¸Ô| ô7ƒ·º>¾ÜºæxÅS?æ<ûqW‰Á¦T¥r» ÉŠâ””ú;ƒzš€x Ê2,*HSé_Z[„cA™ÑÍ‹/a‚ΖZ>Ã_b'iŒßסÿB’VÅ[åÖ½žÊèœÍù@^¨úk¬ù‘¸SF·ÔrUÏóðþäxSQ\©dÞi.]¹P%-ögs~VàÐ4ÔVìÁ-›mxVü žu´k»´.BîŽu],r‚Ç=>ÄJÌiŸóqs5K¤{1…Å\XY¶ãWŒ¥ýœáÆvèP‰,Å"cçü`Æ_(³OÖäxöIj¡ôgÇûu=Äü§ê¼B©&Ê!¢ËÍýjþ9½«r“¢ø7Á(+¨fëgéÔ³ŠE*ºA¡–N$Ç«N›tK/ìfµë¨¡E¨Ù؉ ïFÕ"ñŒ‚JÇÎú9…î1éb Ù:®ØÒBœ$àT—…ÎËÓú8¿PßåU^eftZûx|I™¾ÁäH™ÖÆí:¹bíIZMÞ‚2 ¡áöJ× Á‰ĉLuŽî@̸Ð)œ>‹a'+e[àzœ–ÎV;™ö_³õ¸„²åÚ¯Ni`>‰Õq#棪s&˜™Ç² ˆgñ êuœ!MdºtITs;©fÅá=‹6†çáÁ¤ÔXìçJBŒA+‘c‚I:¬ÃžH”±6ë+¨žs} œâ±ÔmïÜ6!Se¸>ó÷eÖøû½¶ä*®|N| cäRÕ¥v—~Uª"¶É`È^ém2:Ö@òŸA|áë?ƒqáÖÆg ®ï&}–ðÏ©e[)IæPP€i®Vg˜ vJQa/ïÅ’(¥í>ÈÂŽ‹_=¢+5“HæS¢sÑ&RŒ.?ÐOä”—°ÿ´¬ >‚+mDÔ Áè å˜à¥gæ¥ÐêúÙ”¬¹Šx 7»“Ä€ ¹'j7~Á'[³ëÖ*žêá—óÂ1(JÒá¿Ïïæ²¦­JLë+'|¨…/GSFØôå:U(Á¬ì ¹Ðï¾?ð­WÈ:¥M#\u¿tÿš†¾¥–¿NÆ@¶‹[m¤Á2–ƒ<Õ=V ˆÂMõÖ !>tÔxÕ lÃI‹‹¿(v0Vde¯¤‘&ôñ8ºj¦8.xíµ²ªÌ~9à$—¬Cײ Ôý¯’`ÑZª7• B£2c’ýžOõÿÈÍ{dcRî’` ÚNd€¢…&si”6¶c_—°S£F! ¸‚X¶ u^ë\|Fú îŸW˜nrÐ}N,¼spEx~ס'ÀúéÁH.•’†d{é²<@Ó[Ÿ‘zý¯¿Õ™“‚• µc ÑlrYÛDÇ*PgOµMó$¹Ü¥†8\½b_‹ YÑÔŽMvÍD~THÿ"J5ß2¡ÕÌ ³öžqƒ¯s Õüëå£áßû‚ò]§0<©Âè;¹ÔGt£KôXhÆDÐŒMŒmª¹o€¬Uš‚œÜf,¾Z#1²îte6åâüœ®žÓv­bÂmÈþ%ÉÏäR•E¢Mè¼]±ŒåÖE~+)ô<[T9 ¿cˆ~ðßÅZÓ•Ð|6õf×+(¤WÎ2[5´Æ/HßÅ hàÄúùÓ¬/>hÐñfÃZ-Xà^16”ÔÊK‹‡pòãÏÜÆkÇÃ@5’ÍèJß“àÆàŸò:³ˆKø,'“v-ì”>ÄÒ0‰$ÿ~P«ÛlRáR9ávû<êĺê(˜÷^Rñ=¿ —7ðˆ €†º 샡–¬MÔ5“NDÀºšÂÑI¿8~6dsì…ß½0×cy†9¶äÞñ?" $}dÝ“-š3óø1¸71GòGç"û‰ôø “,E«,ÏçQ—Ë¥7Øô‚…’.H„öS†ý%º¼Ô3ù´ŒuE6Íu»[ИüŠe•þ5Ýågª×l/ÎÉJŠdMw|æ®ÅD Vµø×-øO¾;¹ƒ7"V%"¿ÉUŠgŒ¼xìvznSÁÉ̆[" ‡”Š4ÕdØ6”[r÷F†öh(g–¨:.æ&©Ú÷e#‘DR 8?Õ‚¨@†’VÔ< ´*eâ~âÿ䈄ÉZ=±×ÊÐì~o‹';KÊñD ³}Lë­»Ùærš V¬{t“j|Y»ÅÇ`8ÉÏÌ5t+B#å÷Je†|¦8™‰~å€],x3Q¥fÌR_7<‹Äÿñ|Ö!9Æuû*Æ 9…B´"{Ù;…£ ÿÖ%lðVÆN’yž9wc…áËàé×@^udk3ƒºö8ÍÐ{ÒÑ"À‹£˜>̉àW §öF­£¼&$DSy=–=˜m¶’KÜMJ¿ŸÅˆÀ¨©¦¹ r:œ@ÿÕÿJ ÷'Ÿ¤”Wé<ÒyÎpˆö¯ÀÄßeòM¨gíD ^u«£p¶²¦ %ªú•³ø$ŠYG.iâbª‚-îCY@ÄÜOŠLz\vž[ A ÿjëQÇ_í”M|~´ò¡~Àvü-bn*Ú­œÑ}&‘ËN7–«ö&Çž.˜ P[…ìMÌøì!,4‡Y Zæãù_jqIø ®¤¤©`QÛ8Ë‘š÷çWß©ö]~­ø ¥å%‰ÔÎXÇ:yî ÍØ¹åCð;®'«Ó>î=[¾ñø‡i‘¡1“~}H9¢ÿä§U}Ô„Åv Ý2 Qd¿»çßÝL9I‚¿µ¿jɯ®AÛL‹0¤˜oZM"9œºB ÛÕi+œbø²r{FÌØ·å¹#(]þ/Ç©,<=Ѝ+Û]´´ø:¯ü…œïáܘ?¯Ü]:K8t|LW°×Lézç5¼SonÝl¶é}仌ë(¯öàC£žŽ8òåyUÓ+#­íwøwÈ}ŽPPNº6âû¿N±±ø•™ÜOtþÎ#fl[‘ãkb‘ê9hwâ¤,€PX®¬— R[ìOd}¹p¾¦Ø}¶Ø›S{kßab;A)Íà©VÒ'ʸ­Hq)§Xe£¦ h1‰ÉT‡¡ébyV]¯€žÚôívÿ#ùøÿËE$70÷€>3›ëXjÓFF覲F»ã½Ïí4ž–óª¯Tz$²lF°b˜ûÐûÐrïŠ »ýRÊÕn3„'ë×R¹GÌ;¬Ý¸­†/0‚Ò–šÕŒé,QžnK„ ò¬sñ—-‰×EÍ_%`0³&¯ìу¸ÉÅĨ¡ó@?ØÑ„Úö €4e€è[\§µ"#?cáà±Ì`‘í™aÑp’WÍ“%o-fòÃØ½à=öô¨n7bЭËéªËÊ`¶^œªó ꑽј2´5>ñ?]œlüÏ´f~¬sÊA4×.!̓ÊQ-]Ñ•:`_ælùšòÄål…¸?íªòó;J?vf™è[Ȝϓ^¨ù8.¡ãÊ„È繨¶m¥‘e]4 -µá¨Ü%‘±;«šÃÀ=öÇ\B FëK8<}ÒêGöÿDd™7LÈ M4Ò­Ó8½³œcr·y–3Öþ–‚œ»¾Éì6ОÐä´%Œðy;Ö!I¡áøÐ;‘L8Jf¥Ø™ìÀdÑ^3<÷2Ïû••ælKkSq·j‰¹Û—dOë1IêAµž¡éžéww^6Åf7˜‚he›¢ÍþîBËòr! Qóç´N.¶cKǪŠlÙ³wpuR±Õ Æíxº^˜7»ià4üFØ^ˆ®köëß\ˆ!ÖöÛ†l—Ax,WÛ«Kÿ?|PöÂNIFªÎç|âÇõ‘ðôW?ŠÏqFwÌh«p ÒÔ?¬N SÏËr$³ìu¾rg“0y•–XèóW^ º(§±KoçÃ=É }ΘR€6nû¨ïÞVÛPl3(f~²ù%FmW BÖæ ’§Ê„F#à…×Jª…*[aʸgqC‹‚ƒCJ%Ô Kv¯-ìù¬™üªˆ_ßzÿgäDâòKl9€˜&d½Ì‚iŽÙBWþ‚1ÎŒè#ÄK³±Ëþ@¢AyÈïj ¾Ó›¯`/ IºùRüúdëŒFçcž´ìܳ”©ßÄ\›sÒÔNÝYDœ)·É®˜B3B=ý³è™ò\¶ÿ³Öm%–¬I¡n]?ø¯PÔu¹+,+ÿd}™šPñc‰ðîì5Ή¢O²#¨wÉ[ «…iôÏO­Â :p¡¶Ê6à œ³ÕÞ¬–fÑ Õ¸‘D(óÂd?6íÝ.»‡Ùª´Á\}»§ÙB%\¸Ì%}U:?B.!È'ôBïF™Cá59>öÎ;¾*«`Q>„ÄpÊj!Z¾0hz Ådr † H÷æz>î‹ “@6²Ó¤øú›‘Ñ9Ñó~÷í±Ò4abÖ”c(Ê ”a‰²Xh|!‹™ª’¤„$”Š.J+C®?ÉBª5x,=&1Mrq(îNÊ_O±%jΑìPwšÜ$h–Jt:î^׿>®y-÷M̬ÃjÀ§%ÚÏZHͱV á1Ñ:ºåÑMEÍòò—pï 7BIK¿ WGБTF?wËš[ùÀ{$ÅþXíÈ*è(â Ι9$GÇòà¬Qbm=^‡>ŸBŒ†¤{Á ad…Óáç¾—]I–­\q½óêhaFÓµ­Ê¸îk;:TCB®ßPGö °×䪩.& 5[ÑŒ¡C,6†Þ(ªÿœÂG+zHÁl +y¡¥™.äH­NF(J_[†ãá‡[1ÒJIv»'{£E\ÆpçµÏÅoêê§¥ÏiÖlË\’&ÿ{ïT…ä¬aÑ)há \Xþ€??Ÿ£rbì`n†Ö9•_ì©NæíùŒÆîJžBG¬\›“êZ†"¿–Ä` ÁÁSQ¨ÎìXm:b—Œ˜Å=œ7hiŠ<ýqèt¥ØòªP@¢±Öq?í÷ó"*Šç¢^¶{Ò²sÿ“Ó€Üs!íwÔÞ€(›¿ð4N—ncxˆž‘÷cþ\­æÎD7é· T“" 6Ïãÿ‘DÉÇž´:hº*wν\»B޳˜/6H ¨êa@7ŽLÈÇ ?ç̰F(k`*dÑ_—ÛM*øM(ÂáâÁ‹˜K©ã T ƒåYKÁ&¤‹ýÏÃ@—‰_ç3Ùd“[®ifö´ `L°Uï·PÀÍóäÝÃù¿µb’w“•Mš Ñ‰€jqݨ›ny”=Á?LòHÈ U þ>?_€¢µ '}0­m÷J§ýŸëžÜR”Öq*§\½p'›¶IÊtX°èoÔLùÓØJ k•ýî~ hKÁöõæže‹òãN ìj7U>µáQƒܱÿUŸ~^7à<˜ $NiÃÉ©ÀZ*õ¸Xf$ [#œª¬Ȩ½µŒäñÎá$ ƒ4W˜>•"}ßò·%ëyß¾o*îÙÓÍÝ¿©Òû»˜âX`ÄÁYÒ3 e'Ÿ¢A;ftùÓp´úø»&fO~0XÒ§o&†ûòësÛ)sŠâCbJ!ö6$-«îœ,:‰ü¦™þËš©-%â½zÕÇþÙÇ8TSrA¾ò¬M™@§‡ZÇD5›ƒê×TáòAVo<hZ{é(TÝ7Æ È‹Ä™ž{&ï¿dWûÜvU3’¨ædš <&*3ñÙ]_åifå$>íGTÇa‘ŒZ6üàiy3"ò£Ðài—BR…ˆÑgNl¡s-ªÌgEÕ©ShŸM*k]pm? ?S}@`¶’íf€cŠÌˆ€[ÌI€Àù_Ó¼"˜^\VCzµà_ÃáÄ4Áy£•nÚ©_uØqˆ¯ÄÌ®²üeÇß–)@¹Èlßî{·ìùa'R{×ËÔÇHð4>Ýj0)¬XëRZæ<9… þ\ö©×dpÇJœA¿œuU\¼Ë¾¾×uäq£VDZÊ€ò†®àÊ¢¼-ZY›$¹ŸyœC 3Gä9¶¬4fRqbÚ²Ww عtªÅ ‰îú0{ˆÇŸÀ zËn×™<ƒZ;ƒâß D o@šÕ––¥æqp€»–½ èú|™jèÀø•Ža®ú áÒzÀw:?]ùîÔc•_Be;Ô}ìQØh¶ÇQ ƒÍâyÒ#HÌä™ÄŠ… £wÅ\“1nNÆ?¼ÂìVŒ0„p“FÓ@„UWA\/. sªaµûW¥$l n(¹d‰ÖgUoûöc‡røšjêóQÕÃ~•Í´·†ë¯F{Âð<þ ×Þ"42«l Šv*ÿ6J»³%C eܽ¹ü’H£¸Hô¸xßrxÓ6ÜdÏ}p€D&OçÒ z‘:@©óh’ ÷?cKL*F9?l %„{¬ xPÝÖK§ˆ ¾V‰Ð!"õE]‡]…štÈv^ÿ'ÉBÛÊ}ñ•’3˜õÃ< ¦é£*¬Ó!N@¸“*xéhFäässÔÍã]¶'“°D#HG°tB÷Ãÿ‘… i—u0$›X@­ =ÃBãŸÄªÐÓ2Š£5Ëòo*«òž¨|ÝüKœórÐSM”êhb¢“x pô`§å ¸æ« ÒßÐ/–±à½gp• V§z¿µV5Ê€“%·SÿºÄ—"̇Rn˜÷‚›&˜ÚuÖãÞHó +ý²0oF½<$á÷§ŠðŽˆ0޽Ô^,l­]MGät7.mT.ê”.àËpÀî7µzë7y-Ë×­¯7#™_tM€g9Vx鱂áÑÄ%néªãt9FŒri.Oÿý.¸[åL¤½]õ ,Œóœ¥œì.’ãò꾘þ¯Êš vIç_–,¬œñªNLqXwé§jrw‹=ÒE9"ò=q µÙÎQ;5SgOãÃÉÝ€¨¯@gbÆŒ0j\û'»› µÏªfûD2†áæÕT/þÿ„WÇ1ŸZ/å²,qesš»K1_4ù Íè å1WÆ ŒöÊUÐÁvzåÃk2ŸMuÂ)€?¥µ‰É°Î¾øól;à`cz}wú÷Õ'*‡X`\u8^Q€‚äK  hó´˜X‹ÃO3¬s°dÁî(1ØÎ;ÃUþªLŽ˜•‘]ë`ˆ…Š…A¬,ò8=ïv,ú@æý`uî¡»ÿ»‹ áU2ÅêÈz«—@gY8»­Ú7J±E bÝ ½ðêb +¡ìõÎæ¨ÈC!>1X”mak*"’8'…Bú›4ˆÆCnŸ”{yŠ2à¢Zieþ^±lré¹y6I±CÎؤ¿¯éY—Zl»™ílnü™L‹fpÄý|ëé™3YðÝ®Á̯« v}·F‹¸–Ub1©étD”ŽÞÿî[9CKU*®ªÿloB¬ClÀJ~5«ÂFEm1¶GL¼0C­Ëûb3lêqíÛiï‘ù[î…´`ÛQ¢¾Ù—£ŒÞ츽Št%è2¥&Ðu$ò´œ"³ÿàx{ù“}œ+“zúÐ}&¨pE:?«ä0«³·Å*^ê—!rtôhoa¸¤^9y K€ïã‚KÙýUÒ‘Ùïij(g¥é$vVæ‘PÁÚ=ÏH%mid[¾<Īm$aª¬Ì®õ¸OB®ÝÊÂ6¬M"Ó}†§ó}ñð ;ÒŒb@¸µÉ·…!y]N¤±ÐÚ˜t“¹]fõîs•E§0¬úoÁÒôÞß;I•Ø[!¼ ¨Ýç%‘õb÷Üï©aú7ˆ&˜w /Ä!¶³DòÁˆ³&ôç½Öh›¥Iwbѯë˜OBÛ¿ ~a.Ñ‹Z¤Ñ!æãû96ØS¹1Ê”pâG¿?jöãÉùÆÇ>ð‰çû  ‡õJ1A© ¹µ¡ôâeG ™4‡ôÑTÁÈ"ÉP1/X‚‘ â àj-eè¾çÖhkj 1Tw:Ž 6¡jV–+›WÕâhúŒZ£+ð+¼!Û « å0&ˆ±èŽØî{ÛH"Q£Åå£é†È$f®B;Ÿ„Om„»iÒQj|J0Ëyãm±×Ò£s:[oƒÿ£‹R)“:I×ñ࢒3¨(òºº‡m﬚ÞÓ¢ÿOT‰{~uùϳ¦–Àè.Ûz£ÄcÜqDpŸ,þ[lÙœƒëç[ñýQ~[Áú„tó…õ§øŠ!-ämÂc錰u×Ïsȧ'68¯ N÷‹ìê¡ü¦à©´„FÇŒõ­•¾x?˜sŽA˜QO}d¬ÅȲ=®Ì+^NJûåŸâk”`Â,ÿˆ$B&ao(*ù,P®§§$z¦1÷Î=¥;"L;åaU¼L^—b¬«=@ßRyÝwô`î%Äúw߀<åTèûÖK¯½ù×3},g“Ÿàƒî:nÃ]‘‹Èã‰ÈK²œ• C¶:=žÀRv€ìŠò<¶AØ õf"bÕqß+ è·< ÇÎõ7Õ™˜"†¶8ÿœ!$iá­ô¯@ȳ ”eࢩ~h³ZÚømó]D’ l¥CŠ*ùÏaC×<[i€[¶{å‰^ ÂNu‘ƒK¾Sy„­ˆˆ_¸YÝ YŸ; ¨@{ç¬;°ßqhhª`aq@ôÚ åÿ[®æOZ)lÇ©>ƒ†<) —éòÆ–ÏùÁlx8 ýªÙÑ~-:­º¥Å[’ÉG£û¨VÖ”*–ÉÛŽM˜wf%ðdr­€çUãÍŸmHKWgÏÜ‘C€jaC“Ì‹jÖL›ÞÂ×Ä=δhM’°\t¾Ôm'…»\‚' oÏL{Ið;ól`_ãWøÆÍBGk®»4רjOÅÂñôÎøÛß³xó©vi+§ÄÐ\—²­Ë/|4‚íW%Ú…ž~@PqÊÁв*™^Ía‡øáÍ_ÆFŽUã°çÛ–Þ·z&:067"Ž<»ñ#ß$¿ÐkÙTÆ5:¨kWµIšú>[uXÇ· Ø:2<¶º© ž âB·ÑJö3ÅÇcš10Õ«™¢§  È’X™©OZQ¶2e·êxCRò;œË]ž£¬¦\aQV!s„uÆÁ*SQÞƒ"'œ¦°ò‘¢¦{³Æ((»Šu³DÝÐϘŒ'@¤ë©j[r V…iãý¨ÞŒòÿönCý˜º/ÝsÙ0s˜>1ï•ÕÉ0h ¢€ÛéDZ|Ï…7 öWŠ5©ø·À^¡{\à1Ë_ÃS8àU®mGV Þ<`-ñ:¡•#Ú6h¥MŽð`…¢`ˆhóИGôì¾sÂùGf5ñû~êÊ…0fÖË¢omùÌwøhæS÷+ö›ÆIìä¸wÔ"W¼l‡Üf Ò׈NJ2ß-(â'q)òK™ËYzÔå¥L8A3Sò1›Fj/|‚~‹Ö¾é|$PóëX&I‡ÄǼ^gÕÓâ? ‰Žµ¹Qermfbf{ë¾ÁMøÚÉ>²ÈÃ!îA©Ÿ,0Ñ,4•±kÜ&.f•_ü€ ]×ÏÃ÷²K•K €ÝƤЗ\SG¯ÇÅ;ÀNNEÛiìU³Àé>dL1{l³Ú!éÄÑmÀç´hß ‚ ½Öª?Ç]°_ŒR;ãù| IuÍ­oÆÈ%[|á"O²Z0hF€»p—1‚?ZÂ@{O½ïša|Æ[ÍT“¬ “‚EUr…̉ÜÑÜM°©^):èóíy>TÓ4B®CºŠÞl b>Ý·b ݶI&ºSd™,@‡ ¼5j8Ã(—ÁöÄjûv硦Ánð×jõ¾‹÷î©&ßþ…2Š9ȯ(ö†êÕrP±:™7H­·DÉ^-¯[ƒ%¿EÎ=Gç@~޹€P5Öfc³ó¤Ìëåëh¾„b7r]âh"€õ+ ;øð¦E~#[°¼Œ‰Dè ðR“kúì™_.Û`e £L æš4¬=L}×">^)4Ëcgɲ}Æß3Êê ô ìqan8·ÊŒgê "ÆEÁO÷CqF`>j6Ç“À~gÏ’„!è¬åu•ÅgHÇh ±¾Èëê¿ ßYH8p­é1µPë‘ÀUt–GHº?>/³UeDµsÛ£¼lðx¦ªù=Å?íõyýMõt—ô£tðÒ0Ï­’¯Aÿ*ánÜxK×qÒ7ßUÒ2꯼ՙ•¾áÑ,ý¾ª¢Þ1j’ ’ B–ɾ#Þ+Øù¼ÿîb6åz¶=‡Á6@kBÐ÷Koag·²¿„îM4ÑÅ%霩"îcVÆöóA޹jÊx2Ë œù×Q Bðè¢?ÁÙtǃ ¦™õ.R2P¹Ì¦[u:— áÃŒ«/NÊòÆ»'<™›’Q˜+µ5Ù™Â:×7†¦p{Opt¦‰äNsœäŽß•4@.Ýåç-tV~©…áÎõÞ9p\*áÕ¤ºŠá –Õ³9Ý8ôK~Ø~¢M6s!°Y`åkâ7‘GQ}Ý#Å‚ûç— mìŬû¢òpÑ1Š„‰ôëü¾7‡:‡z-’1žxñ+芊£q߆Ç̸GñHqi¥Ä"&È¥ÓÀ,þ÷.,îUÉ ½®O>Z-@)F‘8çA<¦ .Oc´ú°Ág–ýÇnvž ¦úÞë[›ØÔnÑCE•Ä`Øæ~Û  aQQûÖœ0‘½ÚäU£K‘›°gô€Å"ÜÙ 7xÞH‚Ü®–:s…žUü2¾b ßŽîÚ&>7 úÏx‰o!ýÍdp“íÒÍ¥#: G•“®°Œ‘="PUɼjw)^ '*™Œi¢<ÌæGýÞy?@ò¢ã?q“Ì*ðÛ‹Bï¿}§ŽÈ¨¨ð3lÖί‘±ž€³!)³ÜE?½ø0Âc^\ɨ#íOHXa;zªëݦ|öëÕû©‹tÉOCV^Ë“PìŠíÚ6Á8DõbuäT’-š…¯“H– yY1ÄI3íH­Š™4øû!´SœÔÛÆí@ ÁYN›ú‚êèSyÇ á0Ü#¬DA-Öt 9‚õ!üºµ. Æõ<ð„݈¦£tUá\¢CYò}øÂV€«šT9­qxGÞiöágŒ¼>wÖÞ0i㯸«÷9åR¤0žýZ™M:P4ß-Uÿé¦X¡ži‡¼s›ÈšåbܱQØ)FåsF9Mþœ"àÍŠÚ¿ÿùŽ^ÐhرKJUk¼´¾lƒ%{ÐrR$ÚBô)ßý\Ø#‰´VLà zF“ÖÔUô˜DÌ=ŒcFÿDÆl¹§C1¶EÊïJWt~z6ÆýÒ;ª0äÓ—UÿŠâT熯z…]Î]ÛÍtBU¨G]ŠÁŠu!6¤Âaý,ßܬ~NG”ÕкÌš^hÇ(Ú†XDCu†Ž+´XQ7/yG|A’ $W·Ÿ¦ 7¾)eàu(f¦»³/gSdǬ4©Ú>•Q“ki÷"Prt’©sa"%7‘ØNÓl×5'L¾É3È84xU.Ä :[ Ll?i’4•‡äpR¦G†¥oÊ4×ëJ(¡Td-•ú3Î-Êû]ótVm›v´ỂIoÀ.ð¬â†dÔ rQÊ#é¬LD`¡¨›hê–^pæpÇXïø}óÄÀÖj0Òo4‹úCýéÿ·£Ð·LíÈ4UÅ\YaÒú!‰¸«N‚>ÜSÛ J ±mÉÈ/‚I¡ézJϰ§› ±×ØR‡ ¢æxXP¦éțێÓé›ýN” wšš°,iÀ®OÇØù?øéKdZµ³¸«JÖ *i»Çma¶©¥ô×N‘1IémT{ºâVGFjô+γh׊:œç9¾ÞЦšÆ¯LÖ5_6D%„yÝÚÔÞõY<\OýºÜ—£¬£Ää1<øóõýYBñ%êßjØÌ–:ÈEV¿ÜÔû¥)%çè)}µp9à/æwën%-4æ.Óm1Ø?/,Uc›ºÅ’c®ÕxäÃÉB~ SùKºTð=,hœ*ûVH#ËÀŠ w9åÚéRzûsëQm† ¥Ò7"ÁI­[Z‹õdh%D Ú[œ¼ÃµçL"Âd;é­V_$¢¥X#ºÏ®ÌhM$æz°”å÷'Û!ŸÞXz ž©œŸ'6!l4y)ݼ¿€_FýcRßÇw4–O'ÏÍ|â5ÕA{YbäÔuþ¢à¶CÉH‚d²[eìMÖêN·×nÅÞp¨üù¾[:¶4åâDð¶Úí­÷•ªþ¶×FdŽéìÔØÕ"0OIÖ`­·Aéiµ¬Hþ­Tæ–ÝU:ʽÒ?²$ 'JËþYØMÛ¨TG씢Á¬1@RØMYp(ÒgO“gþéôʹîUZFž 7ƒ““gÇP¯ºë|ß°ÖÏýHj¶œ/O|êa!€o,͋ؽËfŸïT¦¸Ä|–Ïß$y*I+¹o`Z*_‡©ÆêMôf{¹oÒ¬ƒÄ”8¸¿UzäfêD'Á3^ÿ q.‹î”ufûðÚ™¯_SQÀªeöúéÏ¢8‘ÖúÊAsgÍCbÐ&ålµ¥¿òücE2×Ó˜Rô8ŽÞ»ÑXp­Q‘låtó¹2ùša+™,Ð<ö7‡››œB]…Kè?Ù­·ÙmÌ‹>§g»µrRvØ}å8`Á‰Ü0}&Â&âhÕ‘¯¹`¶EBIÍqa ( ŠÄVpÂ|!T»#"ŒøøoÛ.•§¾Š]»‚ÕT1&³Þ‘ &µ1"®ò%ßsjüâ¥âø—5Ðçd·™H»NüÚãf¼eÍý4Ëd¦Lp"‘R}Ò ÈåÚF”4•Ž/€4:ÝüCû ÀXd}ˆEà%…ü—hµ©è*5r7÷‚dÁ†ÔS —” ½Zæí§0ƒKļ»¶§œ†EÒgÝôÞ6ÄÏÓ›SÜì}Y½lR ö÷A]SM¹ç|f0L%\ñŒƒØNjó«!~1<Љ¿ß%œb܈gÎðÐB¦|f™î §v:ÛÂ‰Š“*âvfìäÈä~r­*ݾP„Vï°Õ4U¦v¢âèðUEÎ{~çÅ„j¨¶˜”ºIOvQÖ$jµQQZ,ÌŸÒP©¯W Ð){íÒqõ–œa ¦ý"'Œô€ï(H@Ú;ƒ÷ºÜv‘¤a_;˜1Pôað -ôKONŒÑñDZL²öPêv#™µ¸Ry,ñ5ÍËØKsM¶,ã÷uú­\šÛ¤K* ƒÛ±ð áJ·ÁduséMðVÙ&P5ñµÜýøÂ£B³jR‹íškªÊô~%,}ptÛ~â-þÉ(Õb…»×YW<¾cRþ„;­2ª#õQ\Ö¥sž–ê˜!*òvt4™]x€¾ÜôœÔCMN€ßû= ¡×§ùþ¯m±ÿéÍe’»}ÍrH]¶ß0r4~*¾¹,o» |?ˆm„ëÍÒzéSÓßF£üOÐö|ƒ«O ‡€7isia°ß÷G ô=¯B¶2h:ð¶ë‡sè(oûnÛ2¿Á€€=Í9áÚ!ð¶+Çþ.Ûïo³ò¼fê©°…}\(­ë—B䊆û˜Ó2€zèi|À_LÕ ÜrgIV`J3MªÖ)_ê¥í`:R—I:¬&“ʆv·Cþ*’[5‰¿ž—§~À;ñJð hPõöŠÜ„kvLœñ ÀA5sgO K˜#ÊobÕ‚á¢Ïö¬¸qI”>RnUR™<“ Ö¬o1ÙˆP^ŽÀJ“¸ÔÔóšt¡@ùÒõ}jðè­Mëê B ε^ŠXZY Œ‡]¢›V-TÓb⩯Âe(ß^öœ«N ;]“ï¹³YæVœ{1™ ˆÿ)C¢Ë{Cðï%}`ñç•–ÅQO¹0j("]bÈ<9^Íaß³îÄa<ºOϰçߢMWUÈ[«ÝAû´ÊÊ‹%ç3xù™T|×Ì äiëÌËìßä K%æ×'mqd¿©úkéI3V榎£TåÇ]T„Ì,|2''[ ü3Êcÿ„Ù ´=Ÿ yj׫ËFAu3‡Œ¤5îÇšÕ„ÿ˜ÛÞ´Gÿ“^Ö–8 š1#-Îj»‰½Ö6vNž|Kûd¼|Ö\¹Þõ¥ÒCЍ_lÚÆ'­ÅòûhnK}åGá÷0´œ¬0Í‹ºdXúî¨Ivr&?âÊü Ÿ:¬a5;ߤ¶Ö>q©R¾r¡14Ræ• ß‰™äXÆS2È'Æ\ l$ [ÐçÎ> øoå›(Móö ’!ôrÇjUg‰—ÊfN1ÁÒ¯pä0_dÖJ ú`ìnŠ¡Ü*u…7Û@÷¹‘ø~èѨB·߆ÐÌ6׌}˜ãI½|¯GÞbÌ©™»®âòÑ_µ W¦OuzM¼/ލ­N^óBD`éIO6ü Ü?¥f{üÔ¯ós%ø 1emŠ¿ëmÒüÀìÞPîs§_÷7u=%?ív¡V4RHfÍÔÚ÷`a„!žYð¾ßîq—yËØ®=JªD ,„©æÁ(xž!/ImÊŒKJ«ÛUO¯;^³qFñ ¥‚àù¼9/lIVw[\y¾ZÓÏñ4ŒQ>ä‘§!^EÆMRl”±Øòr‹Hç¬i°Ý&ۦΈÏ8ߵȰZi¹^ïFw:znµïœ{4NJgA4f«UlÉc“DÇBý…ä§ÚˆÓ’Å\øtÝSu‰»Äɱeáˆ[V¤5§/ÜÔ/ä€t ²«4B¸sl*TËGpFÒê/¼ŽçÈnϨ¾Ïaâm<áQn¹Ãl¼G7ÖuFL¤¬?ÅTõÜ5vJÄ÷ß õïKìÂdâ0¨îþU|»¡¨Ÿ?Ø1¦JŒðL·°¤O Â5ÿZuÀH0é{u`¥r*-èÿ-½Í›—}'Ý©ZziÔÔJÏ)š²·<®gÎÊæ ©èŽþ~_8!¼÷Ï‹ÿÊ4#CSïÄÇŠÂŽ5 G‘QÏ8”°Ý9‹¾Û «ª0#šØÁDÿé;è ;ϱíMrÙ‡‡EGô¸Ñ6òHÕɾtOóyدm\Àš^»bI°q­ÐJÄÛ’5Ï-ó_F—ÊÀÉíõfšouYKÖ•©Íl Ës¶™ ugI&Ϩ¦ â—ÁñÅÏh˜ÿ_ ޽«ø{Ðj5wñ²vv¨„™ŠÀÔŸœð›@›Õ}ò¨ÿâì-¡M• ÊÃ_oOÏ=ãhÝ(›ˆˆÙpp;ˆ,Þ/ßïDܽ™§óIù[¦K3ý&*`ù#†74ùWQR mÝˉ#šC¯’º˜ygÓÆ³?ñ éºZçÙHÔ,vÏv8áx1{•ÃÏFÀÂÒ_Z†°¬¢Ÿ™}ŒÄ¥áZ©` ÅOW hxø½­îg{‡ÊMýÕÆ{º¼G0¡V(‘¯K_ƒ;_ª±l¦tÞ)&Zž4^±¸©Ïë•“ÂÏ÷á6Ö#ËÒi©Oòo¢¤·7®UKË êÜUÉlÔÔæ5x6må;wTã%_¥@÷À®)ø1e‡ù¶°Ñƒt#kË0VN™VC×ÍhTÚgä.ZgæÏd@ÑKa9?Fh±½yÂä¥ÅÔžà®—,±Œ.Ú5¡ÝR‚;»Ã+Nxþˆ¹}ôô|7i€HÙMLczIÿµyN_º×)"ÆU›>$øc¿]HÇÙê­Æ½¶²ÆÏóI³=VCL~1->ÉÏP{Y;‘šÞq7JǪ|~º^h…lEÑÔîàGáTÎ!\¾vøÐ[áÔiÿ•#‡-¾ÕZi§Šü‹e¡½LE.úÎs{G³ßÏóø]Õ×GIÉK¹›ù ŠÖI]â—a—iò’Kç$°4þÝh€Èö¶ý,2YË,5)«(åÀt1Øf86-É*Ò äF…Ä1}Žþ¶†‰˜Ò6Ž6ò¡eÑÛ¤’ Sq3”¼1Q`Ò5—*rR˜xøPDþw õïrºî\º>_1Ã=ìOíÃ6ækõ¤÷®™G Íòަ/Ó@ Gä”ëNPïÏA‘YÉün,vžž&­G[ƸÃpJ‰û¹•z{ñ[d‘ÁáúLWɺY—ÍXÿ_×¹~ø×EÍ /9w’âj_Td7Üié‡'èDjÑ(^ª'ó`WZQ•ˆ¬¶Xý°&\¸+o{¡±SèÙÎÂ[&% ´¸ô1HÔ¬_Éôûï¼ì¼sÚ² l†Sz½Õªòí)~gMg›W‰Äˆú÷ÉN®Ù<\ú0©öó¥2ŸeJÖßôËø# üËöh“@š ñÄœÂj{ƒh೩0¦þ¾…má©Rÿ>< >þ›§‰Œ0C;=™BÁNÛƒØûÝ? %û—ÚærÁÐ0Þ’—ZÈ–õ…^ïÆÎÔ­D½¿ÅªfÁ¼fsÊxÚÝÒ¾—GtRÞ3ì(¾s1²µÏ¢(1Z`š?ƽzœe$ò.pÑñKe÷WN Èsm‘¾ÈTV@jRý5'Q$íÝl“%“tHƒ{h³ mÊÏã‘\ôˆÄfám3û´Öà‰µÂ%õPë>³Œ×ðë…÷O¡9O€Çι’ê¤`>£ÚØ»å|¡ýêsY: 쮬­37× ?¦-Ú1”‡9÷Ò¶@ÀÑ 4ÑÆ[R N’k´À“(Ú&¬Ìûþ-äøp±Gà´À öcãì&píùG’O>5Ôì#½¬bw†ÌþØøpÆx µÝŒ>IÛ÷1< ÍÙØg’mýð²P†Ì€èAikíNúˆeͬJyײUvQ¾˜1æC)ºëé59,W(¾] úñ,'d!}H$—ª)‰;s‹qiæm虡²Ä$~Þ™ÅÂÐ2±˜¦ëæÈ#' Ó0ÅøÉkæ¶z2ع… ƒ“N{ò:ü£œSÆ6Ç7RÊ:(OPXìßfè.?Æ0°nµ„KÍÎÂvY–wÙóÛ¹±òWƒ™uÃè]¸î0½Üî¼¥·†7ý*׬B$›‹k>‡Ô•Ķ †ë-;Fï#-}pÒ^×Î5¤jQ®mêIfT: ä…n=g)ö/6÷yJçÔ£uÓ 5ò£©8Ô2]HaèéO¬ÌßþÖûµF½x'ª±¢¬fÒ1îß|$¢|h ­½õÈ—âFÌÆ+¶Ø}Ãíã Iºª”õ±é;©&~ TræYܤÌd4-šž¡¼¸`™mà[¥HãSÝáªáKñ߯–Câ÷-¦{@­ºìE8, ˆÙåÒ+ ÏêÅt{=}¨µÊÔ€{ Ptƒàš”ŠÀÑ¢­ÿ_ ·™–}0EPlUð­^?ŽaîR&ññx!+ÌjÏ8R¥ìØÞÿN¬ð¶6­½nQjé7ßaM¢`Nìe¨>2Ø]—½xQ±G„U¨ž MÒœ#qðÖ8]»üÉ-\²‡û%ôìYBËf$sÙX»+‹D¦#3çe_ÜíeU('—¬‰(rÏ¶Ž (LAé&ëý”·CWG»»Œå*ÈòYÂYŽ…@¥o7,{Å ÕÜyêȵ\¡ç­Ðø=ïß^Iiç’6oàÖNF7ÒmØÿWƒE:ôVÉG|ý‰×5Ìo%Of¶É3Ϲ——›LNÔõ|FØñ’z#ײ.™i‰˜²‘a#Z—×'³ ›ŽÑù&U`(ìΆf²Z¿(ÎIšdÈ¥¶otvž¢,š›ç’‚–zDˆûN¢OÐàPké õ8Tãï—ÔåFˆoHw=ÆðU\Lß —è"\ȦáÐÐÇCÉTÚ­ÇÏdÝí>è¤Çcô“gçiÕ‚‘›Å5—KÃü·²ìžá+aßm™ ÜT#ú TVùäí!¬›Ì_ ð$Hq¤õ_¦o!øØéݼ‹ÉßÙ©ÿ#UÊö‹Íw\—ç¶ýzÑ,7FcK¢t#žÛ”«Ñvš[ö r`pq®+Ìž“ª_f×¼ü‹aYÂuí.»§p:ÝpÉw²}r n?ÁÍ7H m4Iˆq³˜I 2Ç*‹Å,Šûh1ʨ‡JkÉB;SáaJÁóâw=NŽuí"²Fõ±ŽÒ]VÓ<÷ðÙMš©ÐmËy=[ƒ?¡€ïZ¾öû!Û«:ËŽBîÍUÐV… ëZÓˆ°=¥ WI-Ùž`ú"#G5(¼cApÙ+bÐùgº¢@Ã&EKÆ–)݉È,ŽÐý×3µêjÌ [£,FfÖH梔%ÅJI"ÒɈF¡ eÒnˆS {à«Àý±]<–§¸§æ•Îk, ¢ϳ Ä?›é¾Ü°Ô"(•ÛORó Îí¨Doqsþ=3¤ÁüÂöSX=†aå%Ù@c†±R3Y1ã¥Æ–'Tþ¼DºÔýTý…^OcΗ“ã)™u“Øm®zƒ”,¤Zi®¦œÿ:zܤˆ/¸{m j¹ÒÄÊe,JHˆI•íRïÑÚR~=— ( 4Qó¬(‹ÍªXÕÍœ…rèÄy¿Ë‚>ŽD¼Ütœ’‚³§V ü”_øÉ—h9VVœ}Æ4aé@u˜†\‹ƒï³µd²àÜÓRxžÒ¹ó%¸[8Nƒ*æ*˜SY2,h¤°Â’pƒËK0i‹wÃ4a‡Fê¡Òö;ÙòÑäGs”º=¥f·i8¾œÈ”+«µ¹zg˜’b,žKçÈÄyö/£áÐÝ †¡ˆ3²‡Ò€‚?cÞ†Ô*¼„5ÐAE91Ð[ûÎÅ…ʽÉ%¢ØêC0a)Ä{@TÖü2µ­¸°šD¯ÙOò˜úú®ø:Óý¡ÁÁà-W/m÷¿ßOÐñaƒíèöî*D¹ô„ö €ÜŸÆêüî—A%} šoL-ö !É5ÅÞ!}£x¾ ;˜y;-í’„˜°ëghÚÁÝ 5û*ô"S‹0Z®³TæMÿµí >qÀR< 5—uUúYr%x‰ò|5ú8"Ä^x8|+ÅôUý»Õ÷¼”ÈÐ2Æ¥„Úßå¬4E%¢ÍW˜`È+÷!6yçè°ôX…[BÐe¤œËIÉßÌË×âYïß$-€’G^±¿ò}¬ t'"Í!Ô\z}dBmE1-ôBaGØ•>Y…G ¸à©Íع»KP_­ýáôÌ:I-VÑš—K „@hᣙ%nÞ3V«ˆÜ⩬´ßTUFœÈµ#*„ %8ßD À¤Öqs{`8ZƒMyâ:ö†(Ì…ÔQuÛ_–àÔ<æÔGg(à…‡:Iëâ3M4"5uÁƒ~ø÷l»~þ2ÍÅyé¹³už^{wm=Ç;†°D‘:ò½u§ÎPûöx“‰6udkþtýŸhzâÖ#áú?B#2Ÿˆ.tïgLw©Æç,±ºÎ½$ÍéÛÑ€>_^{–ïþ!B5Üzþ$ó¾é™¦<¾Œ+À§e²sgÄa Ë…4ϸU ³‡/»§XcÒ"x—¸ê[xjdAk”Úœ…ý~åðæÜª×þÃ0‡Æ|¡…V¾hc-:˜B è2‰Ô©%¡3GáöŸ— òœyÌia¿Å0*áy$ø!N>ˆ˜¬U-ò{Y\ÂÁ¡ûn°JËÚ~\H ŒD91vØã’¥V94 õ¢Aœc,¾&Âb˜óͼ½.úIU&Æ¿iôSvÂóÁÒÑÒY–QÌe÷âÏæV&ñLwVù}4êbe°Ëg^Â1èäì{*¸fjF2°¸Å-£ ¯ñÉ-X–á.5YO`äf6¤?5Ï„þD(œá_-®£•±C^Êê‡ô ½Ï‚¹I{X§¦zÇG‰ƒÈÎàÄ£Èö5=!yÿtglØP“Û†Ãlؾ©Æ ì8tjQÖò£ãP…S#ê(zŸ.¬©ÝkH'ÍüDBq¬±vÜt2ì&ã@^˜º÷h=kö]×>#ŠýªZÑÅ"kâŸlJ…˜ò¹6 « ý@RÌãv { Fiù4P§ îîí]aÊBÝÔñÜ/ÞldUÆ;6ÛÕ@TÞ¼u±<ÛkÝX eÉ€¨ë%gÐ'{†žÊ4l¸1¦úêãh¦ˆ­"è¶`àït÷oKs¼·¨/Ó9pí1vü¹}<¢Î¢g¡Ò,s?41ÕÏTÔþ|@-Èe¼„#1±WÛ!®WOÝÞì͆2–‰å‘Ô{µ|¤A¤ÚЍL¾#˜ÔÀ£ò«šX2ªnZSŸ®]•qʦ½ì¶p ŽŠCô”rJ8pÔÌ®2;{ǵ tOø› ½‡áSú;dzµ‡qO¥åýðt!qNÝ ×Ó(RšZ›Çó&‘©‚"nyL`.ÝÇ£­ý·÷:Ñ -ÅÛÄF „ñÁuÈ\ø»WYK Â¥@g•1öq±ø mš–Ã!X,¶p TÌ(*Ðc÷ÃãMö¸}©'gÿØi¹æ.Bb £÷E±æ{¦ªs4ɽÙ|È%¹¾aÚ$d”Ycmìóø8òÁ2 ‹¤Ò6“bëÏ£#ºÚ©4ZÕëv%GtTøÌjá^6 Eì¹-CŽCORŸózÚ=˜} . ÒR"§Ï>Ù§V(ÓĪ ‡ •аšJµúæk¼Õ¢Gdî+Ø»5ÇHȯ,ç)±0<&ç ·~8§åŠ€×Zˆ}Å#{õç.ôËwÄl~Ù‘,‰cĺU‡wt´­jìôÙŠž’M„BAY=ô”µ/Ä—«èÔÞw¸èË_66\Ê„TA{=ýç 75ÖÜ#\àHó2.“¯s([¤û+ óqMôº ®ˆbÜ~ƒÅ›RV¤;í‰äGHuÿ Ú‘þ r¾&™ÙýâVhç²)wkåC.šj2FaqÍnwC8æÞÓý¸*ÙÀÁ]æóÁ$¥_ˆ)„PHi;ž.§Di]†/—nõN|Á=x÷MA—IЦ?Ñ|ü¯.ñõÖd6Þõ€ÍáZýð;¯ ;,ˆRÃÖˆÝEÏ?ñ1ðe3áÈX}’½\׃»ÏÀk;ÍlÒ÷€é?o‘Å·'X³Р–PÖ£TÀ ‹â<–p\Û“çjàT]ÓçQÍ—¬ 2mð_1 ¦«ílÚ-+êøØ©>yÙ¨Ù!G7ÕXÐænw¸D”–Û§ê’†›ºÆ.<ž\E³œòòÔÏ Õ¹¿bLìøóÊp@ZD"$Ý)+¶¬ZWE*6ЗÊVÕ>ŸáŽ$Ñ4Rqf€Û´`ô=BbhD«eÕ “ÐiÝ6g‚EáÂ.`6~«rÞUUA± 1=·­Dƒr³e °,.}¢Ç+¶Ÿ I_Ûi+Âaœ¦F3Fôû Å)“(‡?Ü~Uzýƒ{€”Áp>ƒØ=TFK)ÓK©xõâštq»9>Ø%p&WF6•qrÁ¦ š}&áßÒ¸ýÒFü<ý³.ÙPdZ*§®ÿ=}v¶‚ú@ÝæÂß$±9ž‰»FÿÿZûk–ÊE Ô@Ð ®6'FA¨¿)ãÜÚUÒ4æí!ÖSë{\vÍÊ:lúS¦Æ;¬‚A†¿|ièËõ†[›ñø°šA~Óü¼JxýÔj®PŠ·îõEîÔ^Á8„¿Œ"›óCIR x3­¸DÎz‡0¶ñzVøU²-03÷ÖE†»"!Ž;¢A«Ì¦bdx2õV÷Š<ÚPàÅéPNžÞ2"«÷XGm3Âãè»x+ úö:@1T ŸÝ„’»Äú£÷Ü‚© Ìè.ÙBG9L³=ѼOÚWl7àM¯òß©Ä`MrÂÖ=äË M6©øe‘ÂjñÖàÆ!V‹_tPjè(ëË®Èô ›$ìйDfÒ)ñî}I·¾öYSðô„ÕÁùå|­íBBÜØFŽÜŒsøù{L#o氙ˤk‰{¸^ÉŒÞüà ÇkÄy±ÝÍOîüaû½ö7¦ˆÔh9]ür .7HLQœWÓc‡:¿rsX|¾7çôz \l6<ÅÛ2Ä9ëì숟’íÝÐ,TzD-<½#]Ûò .ùÉB‹Šý{¬“mt’WÖÀàê1Md—Ê11¤œU´Ëç?Ý8s …i=ºzm°Rôįs.sÅŸM…±×^À­ýûëHo.x?ØRKù˜:àhÑÜŽ;®`í'd¯6ý¹;ë3/iñ\ñHð‡ÏVÖ1´m$¦¦S~¬‚¸Œá»4ÏML½IïÛu'hóx<²‰âþê%ñc ²~•'kO”@¯´s´aDÑþ{¤ú¨Enas]¥,¦Á=%jŽ»D>ÌìÚ¡Ò}ß7ìÔ.m>VImuñh. ÈÿJ‰ï·… jT#jóðŽB—~œ°$$°‹ ’B0ñ:&ÏòIäÞÏpËÝ^Þö¾­"˜¤Š }è%"€‹è6±´úŒÇ3عóó.žƒ"ö£Ÿþ³‘B ­Ó¡9ãÎ廈¨/U(ÕŸæ@}(-´–CCŠ™eާŠA‰ÐrD%‚\‚|K÷S>kÅ÷Vi߆°[(áÊc©ÙÌÃð[?œ‹{œÂK¯^.tÓ"T>~EÖGúƒ­Ò(6Oh—Ôcò›êAC4ŸóTc/ åû—ö¾\Hã˜P^Y’ùØšdÍEPËG¡Ã=ƒJBG1×òŒ®)ò•¶¿±ysê›< c…ý1«îåM&shgo_Kë>:¿3Æù’|©0vŒøp‹ MÿëwŒ  ¿ç¯\±fü—}Èš€§„L×ñ÷×…ñàÑ–~´òØ!ó®!s2©,Jõm,€à?P¶õÏ¿*¹ŠúéGí ô¬'Ñ1¯•ôÒ0‰óÜìø¡Òf A(ÇHqZî¶ûƒÎwd-È™°œõÞ—&÷VPO2 ú¹Î-r×ÅwšÆþlAÝP¾#Ϻ@~?~x_vjÌ §‚axâ±6m,ʊH §­üáášâûauˆaV²D¦¼;¹N{þ,ˆ¦(U½A°!^Á¢R?ß)‰ˆQ’u!ò³g©ÐØwc5²‚ áP_‹Œxµ4ýât¢hN?ÉU‹0ˆTp®´ü¹¾ðfC!0²þÄ‘ãµb|Œÿ+úÎèÖ%È‚º›?þVEE@(EŸïÞ%Á¬¿³â„c6 å`Ý*ég`³û%ëRš¥ 3˜oMÂTgµvïÔƒ¤hÆ 'äMÕ9§&”“·S¨D@Ó!.ýQŸ³øv×*·÷ûóq2´+>¯Ë–©Ûªÿ¾âÙ`Çqà×,$3TcFçOJ„¾¢[u—Z;)T¶J Û[að¯i[¥ßQש‹s—æóKçòìõ^{Z)R½ßòGöæIÌãKÈlI®mÈÿ‹SÖ„‰Õe—Þ"r~Ö ¼Q´?)0$"¬>>˜\«VChô]ãKcèq·Zµ=?q!°ï³dzÛ¢ðŒ­sðнRIüv+¨sQxDõkΣ´ª¥/+9`í/'ß+bu¡|ª$1¼ž¾ Wí—èYëx:Ü«uê€hòN«ñßÎ\!°ÍÑäòÿÀ‚¡ÊÍRØð|¨_ÅÆuNiÕ¡A§6e0ž€I§9úµ‚ ØCⓉ¡2™Äj¨ÙvŸÜ"&N‚ÕÆÇ§ÅFÅ쮓qõ·sVÎ @KÈJÒXë¯\7c3Ò¶LhÀ)üþŸ³Ò t3xüóµ¥ö½k»š@3#¬vÕVÄÑÀ¼XQW]§eå'·¸28oj¶íˆþ«›yrTÜðW½”šZK²Â WPR–Öa‰Ú´Ïkᨻ‹ ¨’F8*fMG)饬7‚†¶u;®a…-ç%Äéºí?&ií%¡øêÃKæ®yQ«fa²‚uMZ‰ž0Ò·Iøüø‹ì|QF´4Ò’\Â%Sy-3çS6?Ó‹bõaKƒ_óæJø}µçh ŠtÒ×ju 刷*ß®ô3Y<ñõ|ª?¯cÃ* ¶Ö3û„:ÙÐ-AìPi6rSZQ;"ì«“h-Œžï1A!4bmbâ LEëzï>+ôwÓêPQc¥£¼Ö¨÷° # ?U–­É×~Å"“ÅBkh®ÛÁ!™«ý´·ÂB¶åÜ„Uëó¡ƒä æ¹õ¡K"éo:Á*ƒ«¥LñU*I˾հ"ÕÈ&ÑPÌb†x^¿Y•ÒÕ +,Cùh5©õ…&¦4ÊàH‰‘uhŽ€á÷á ÍëCׇÍK*”è> PÀ“ë'0Ü"/;§ ™Ár³aP+Å´íH©€O¼ðßÒHÀ‚¤—äØ Ô‡} V3;è´!/¥oï§G5T^®ÔpÐp¨¥4Ÿ%>ÂZª/•/ PÍ!MkÅSký‡WŠDÇÝÆ•Ú ‘Lr¢ ŠÑqštÌø9M{-Â9*Çê M=±× c{É›°µ ¡%¤bµ¶/£t g@…W…yz7,‰åsÊæ³&¤ø‰ ÍpYº\åÇÈÍNlhpÐÇ#¥êȶ&D¿ˆ·å+ÌМ¬òø® äœXBºÕœM\E¢öèÚ±UÁ =ÇúšzºõI?’)‘œ¢sÀs]ÛWÇò¦7Õø¾ôçè†tqA6?_)7!_þ~!JóÂöVòlß*f\Mn¤^ôtúV‰› ϪxYÓ rcQ³E|€™ýÎÌ«tê 4«xûbÇÍÉòÐ¥æ=„( 9­yÓ÷ÑFù$à ìpüÜž¹.¯ÐØ kó¤v*6À{4ÏÆR€›q™ìlò Œïh¥©P©´ ¶m¦DI1ú(R£Rƒ‰Éi.œ4Mš«]òÔ1GÄH á¶@¥ÉQ|¸ ²Ÿòù ÿÑ& õ)±ª }|;eÙ©o Ãø+€,¥(íå½ìO‡,Ícl…é (WÍ…½ç&•ø—yËÞ×X¬Ð Dé* 38z¾Ü"õí$OEØ„ƒ³F§—ù¸Bä˜-µåI”Ë0¨@Ú¦ö´Š°qr:¼’ƒ>QÝ™åoó;ÐÙž<)œªE¨Ås€ŒÖ0ŠÁT Cí6#Ò¹ÉC)»{àñd3¤*œÚ‚kÅeĤÑ#×TøY6Ê6ó5$;M Y!iººä<ïð†0¥N±ŽÐå•q"/„ÕO. Zz=F G]ªül´ŠõÛè‚°5zûVjšàª*ñ,Á”y`ŠWüKúÑŸT|9^×6— ¨}_Tûá$&œP ’™YA€žüÛ¾°:†µ_ë—§¡´ïñ(ÒÅ¿h«^@8Óâ-¤Z>áä S¨Šo†:ðª­}l·Ñ9‡yçÚk¤å¥•ôKúƒã¸×BêB¼Ô-ÿÊå“ SGþþ¬žZÀ/¶kǘvÏU@2¨…ȧ“f¨ež¹t÷ü·ïÒ†FÊW'hÙµüÈùr8ZCeD´@'Oÿœo¯Õ g‘,àKj†Ê;Cdªœ‹å|WjÉõpV÷Ó<ôä1Âá$F®·²h'“5ãÆÁ}C¾ 18‚µ'SÈüiÐ0fàšU½^òOPíÐ[LvWSÑä`n×í·b3¼% Hõ@êcµ³öûTö^Øëµ|çJq·ewÓã>~*ûv€.æ· ªÍ‰\ªx›8r°ginúÞrøÐs£“‹e©^Æñ¥‰ìX’ë ‘ÿW '`UQ7¿˜i~ל=«†È|0Ái1BM,¤Uóü"p­à­»¾ÆëOµ–o¬5 QiIÀÇ…žô;û'»¨z¼›Sk£ÞÀ¹–,daWe´é¬KªÞ©þ([½C‡²mO¿r™(¿ø™‘okæÔýÔ êç~‡Œ’ñ 4i’B¯"µÓNÆ&eÛŠ à’ß¾k¨1²®p~dÁâoŽ%tÉ„>žüQ_?O,ßö“{ #áÖb¤‡š ñ Ãö6aöMª+!_L¤Ã"›*þn޼¼KG)n†¾;+Ýïcv§ër—zj.UŸá±Ì±àIyî<ªÔàðÉD°ÀÕ Óv[G¨ËˆÄÎ î¥NU˳˜ã¶QwÔ îõM½,òWæ±Üø8»‚HÉ–2 UO[mÉ<˜!¬‡_ôÑ€FÍeâ]^'‹¬°“YΟ½QDJ×ËÁdEm´Ò[×oNe&Íž@æ%pÓФ‰#£¿~êé»›‰HÉ«XJ¿Ô/‡•zòKT3ÝpÀ°ˆ>FãüO½;‚¶¿/W§/×È>ãqzMÞ E<€üÎj”(é¾Y½°¯Äò—vßëÆ©ÂcòÕKd<^fA“A=_ŠòÀ“6³:Iýd=žÓ»n|fg=9Ӹ˦Ű[ e_¥»x0ïqZÞ žÊ âËšÒ dÜä  M"YGø1Y°‰ÑÀY–ÊÄ9Ì »Eåxk¶’µû%[–R®¾m›ûATy0Çî<(P yNÖ¸­®‚ÖËÝá`NkÂ>© : …ÿ}k)›3°îXÓPƒu4íå&"dAœ“£($IòW󯧿’o³"û†ñÎÉöÜrxÔâkë™ üƒÖPU±¢Âúrß42žªI9gàaâ:Ýí¥¤·Òk9x~êQš[Y²ÑWû®Óü\CšUئ´n×e¸©@£‚V€.vSycörHmˆÿ®‡ÆÆ>ãŠض°…®d(¦Uª€¯ûG>Ü&YSÆ¥‚ŸO9.[º Õª!‚òt)3‰êE+ƒù²Ý5‹Ü•ÓïîU„ð÷ @ŠªE~‚2²ã½ñ§º %¾EfˆšíXf]rÄJ/ѹ4JW?Ÿ)Ù ÑëéLJ‹ T3­^¼¨7RæÐcâ>öê| Ôô qi½1,S¸"TßxKtU߸ì1¥¯¾.ðr›ÿÛ2ÌÈ2M¼_hêNq‰bïÔAo*z✯Ž>ž!õ¾èy{Ú•ú¯Ì(3ê ì˜Òpûÿ²8²è èx*3Ö²ö!êížrmX]2êËÜÖ0…cÍì&§ï¬×Å­o©mŽPyaŒ-ÉéÄÉØÎÍÏ} ƒ´5IaŒHŒ`ÒzÅĆ,jƒùcQûã­P`P5Oî 9¯\øO)äµfZ1¿¹Ë&‹®»Êo˜%h6ÆÝC»€ù2Bþ0Ôqˆ f| ÷eûŒ'l5Û%p3í=kÛ³/|ÝÀ[Oo¿»aޝ—³X ”½$áÓ;ÀE h˨~Âe9¨ ßOYcYR“ï0 åf·ì?º˜¦DïˆBšÀ(b«l!ú³Ìäy¾•¾ÈJ“âUƒâD«waKâãÀ˜5Îé%éÒï.íìsiÚ˜/'7`]áz+Õ¨û-”ob@lÍOüΗ}gs<6s=b~D}èðñl,ëÍûûYÞEœ‘³AÅ`¼Ûô/¦#Ðtq½ô†d³ 6­ »TSToçÈ“_õ]çJÞ¸Ö@dp©¾o%E‡¦xŸ:€èĘ¡Cõp L¥Gÿƒÿ'sªêylî§Òâ5Ó³¨ˆk ×\åÉÊ„õ¥ÉOÓœ˜óTh<€Ü²W •&KqtNj¹è˜ëE‘©g«Ê¡ºcˆùG2*üíÒìüKWycųÍ!øgl¡—=Å2!%ã} å¿æs$ 8‹Êiõ©€§50l쪒r Ôn´—vjx×Òc—Ôt7•œänŒB" Žhp‚#~|\dÔ¾>Þ’MÿG2N |ÓèB"³_¹Nþ ÷Í.ž‚sû2øKì#Þ(swgÊ„W®ë²óôš?·ÈòÇ¡­rø#Ȃ\Õ~ëžÔÚñ‹ÛÚÀ'€¶þso÷0†-ÄÕ©S ž€Wf:Xì9%ÀI ù¬ ØðÓÉÓú[“Hº3Ž`Q…Ƭçî±$?Ýöü_ˆþi™[zI]±w«Wg’¨>~bo‘>â· u×$žý¦# ¬ØŸøDL`³ }ŃîXy“U™üE°FÓ•Û¢b^¡ýi™g$B\` /ÒûïÜ_Ø-‡ëÚÄÜ«„[˃"TXˆÓ|:­Ê N§m§—l ü>âú$2´,XªˆÙ;(¿kÐÝ[Ÿ’S>S‘ÂߘQ;wÿÜõ›±Q.Ÿô%} IfŒ]¹¾w£;”ÞÚ‡~¬EÖº ujc°†zžÂ y?±ZäJAéž·ß,ËÀ{‘ †¥+øM›Öƒþ©Ôu!ébCÅzFêX=Èó8[’ˆÔf„9 ,þ>k¸Ä:êü3VærŸÊqÉ8t¹~hfµÌÉŽH–„0‰ ú1=žxf‚!Vc¨¨0Ì6w'¨qH“{p›í'+’»ýÇzůS©9”)ÓU8i0÷ýb¥â䎫´O” ͨ'Mƒ8¥cŽV’ÉÀÚWðvYº”–{ö!wüãù´ÖQYáP¾ã‰l;0b€%™w_ßs¯ªÃÛ™Û=AÕª²ÕF£È99Æ+¥îÌæbmRVLÛ\. å²0R]û0¡ùG_|óó±"ÚÛþæ·È¨2}ïŸ\–Šò„J&)Ʊï‰Ã*Ó)—¾U{›· ´~Åk˜XÌM'×s¿xÞÁò§Ð6Ô•4,$·ú7ß&ùéçmN## ä<ûgSQër6¢Fü¦4~‹7±™£õj`DV?u¡|£/ _æí¬nCNb·—øë‰Žû[¡ˆ¨™"iZa|ƒÅ4«W}¯Ô{ãÏpYU¨I”±7Ÿ¼O2¾$%8L¹½MB·s”kž+iÛ•j-׸¦C‰úJm/÷#9ÊÑ!)¸êEZOîƒ[וp)Òšg†É€ù Fç@PÅö)‘C'¶¿7‹ÇÛ¾rŽÏ Š*fç+*„†¼k¦š»×lúôp¼q{׊ÀimQ¢ÀØL\ð=ï {–­uŠÿÜDá ­ß%in³íÂq ®sDèæ2ÛM¸µ.¼-±¶”TÀ—0 ŒL®¹èíÞ7 ~XîŒúZw«ªD¢†ŽT‰šã<÷—Ž¥C’ ÆW4öÕÍÃrG Ä»;²AK§Vñ$õOtŽåÈ~–ø”ÁþX¬Ú—ˆ|BË}úâàÄc77Ž8ÉKÒ÷ñ´¯+°”Œúˆ™WÐBÙ:(I'ܧ`ÎݺˆP±5†Â0B?0{½>ÊUyñ¥„ÇÎÙµ3bßFO„H+ÉI½Òµh[r9©LP_íÔ/Â'IƒyßÐÏ—O«%¥Ô·‘„d™SS”K¾W)¤‚æKçÐXë•¢V{@ƒ¾ó!e弿 ú“æ† cYA1~bv65ˆÓ;2Ñ™}¥v³5ƒÿ²îúFVX£Îcøt}–Ù½à3ðòƒšáÄ ­™S‹ÑÆŠA3WÇÉ: ¬|¯Ý¿`tÜrÃ.ƒíTa HJÔàÖA‡maZÓ¨VÎßÍé2ը⠣Aù5dséËl ÿœÉfÏ5‹ÐzÚ+,UÂI:wÐ+í&üãŒEIÒ µ€N¤>Ob3Ü­.mËKb3 kðºí¾Ã—MŒÏƒ÷WXÍ¥|*ÃÞä×mQóóç°˜b[Úó¯Om³²"ÐÐÏ‹íݧz+;Î8îè–HÒ"d0/`³¹ÉÈÿÝ·»CÂÊKŸ1 ±Gƒd)“ƒœœs «„3v†U«\3ø¦Œ~ ¸Š¥”^‰Uxæ21ó^†PH‹ÖZÈY é4U¯ŽY” ËHÑ)0Í]‚¨)A/¿Û ]°øå¾<ê!T*:¥LN§±²"W©ºÆì«ø¥ó÷:G°êy÷KõsÝB\zÆxÍðÈ™U½}•‹á=„稜 ɾ<­úZŽÎ¥bç<ˆÓ“3k ßÑÎòP˜‡ÙBæ™==ŸÚõx  µ¸åi´7®ì‚ÿíœ88©ë—gðœÒt;IHÜUV¥zï›}dÛ¼›)DÄ൓?Ò–ø6ä.ÝËNa¸t'¡fÑ.¬«µò D+ ÷úH‹ŒvÿÏ ¯?~ÂêF“(¯Êäëó‚JrÁÓ@ÀX ™`iÈë[ ±+(½(È×zŒàJ:.´92˸tÉòU0Çe@I› 4ß¹€81Ý„¹Š–mS7Þrî]žal9-Ûð02>O Ö³c1Òs„þ*Îp¼ð/]½pªž)˜‹ÆkØi‡ä«ãa-ãxö[Ï3Å JúF¥ð5Ñ.jÅäO®¢ÜøöžoIò‚­Ðˆ{éMAV£~ß ‡]ö¢Èë KôÎg€™²ÿ~T3ºÖtWùš„;°á'Üšå.ÂHúRŽiMÕì}ÊÕß#Ü_Ÿ0Ó¹ñD•ß¿Wº´5)_áŽJ;jHˆ@7ïFjòî!gëgîöö¨ˆáÒ±IÈk­KFêòþ,Þ½­ÎXŒ)‡%´¨s ­éµòhý+>l>ùÑ÷­køïÀÀteuR'|í™:˜“õ´"‹qŒSš²®ÇïmIë(¹v †?ô'ð G:Švô/ Äj ,oy ælê;x„ç/¢ÚTVb‚ÑÛ3_"8]%U4’{§ÍÞJü”zyð¿ÿßàæ˜ÕªÎ^BÎÕÑþî”:>cÎõ±uʆD¯òPÏ©—UBÕ™6¹/»¤–6Ù”ÅÓBdÔpî‘Íò)ùF{®¨ã£pa[Ìë|+n ’õ·Íjgf ½“1 ÝcÐI&O¬\–§Ï™ˆÉH.ö`å¹Y¤QªÂlZШØ(™ü' ðþo݆>­è]PkmÌjZº_Ï g=†1yG+xíqÍHz—Ðä¿§€ÿGAó©B‘g@~êHç˜CK=…Šž#ýô‡ñ3qÂ+öÅNj§~¥‡´Ø(M,Í­‘ÞS­IäV¶QE£»[‡¹/Qæø¼Z¥Å,³áþç Š»Æc;€÷{ûøåå ¨|‡fvBídè€Ø˜KuJØ}ž˜SˆÛÜ!½Á!ޙё/ ¢ê¹,’¢ol1wì Š9/hB|áNN€ò|áT¬T5;šÂÅ:F•ÑTz?‰%§¡1¯”Ü”+Ì Z¡f@'7o„Chx(ËÞn.&…EÖYn¿žl2ÓOÆÀ[ú8&öÁà_±Öb§Šèq±fß”p‘)դǂðl+£YûðpE+Ëî¹ @j¾ýF/bÞÏnÔ ­h2´h|ìͨynwÛ7®_#îᎋ5b\m«Êá¼Iáš‚úDŠöSÑôb3žÔ„¾‰°ñÖ”¨ƒwojzO9:Š  'Ù–Gë à’€6=ñ¦‘—v«ú_,}’ÄRá XX©ÞšíØ0Õ%›9¼ýCRìG²†ïé ~©5f·ËAA‘yòñÝñH²;ÖâœÀq÷‰Z¤Uq4`•9Cµ¤§*hu Ÿà:;Û‡ì§Ël%.Úc‹wy«-¦¤Uƒï§mÿ§~_žÅ˜Hw®,ž_vfXt-Uæˆ{•™z{9òeæÕ®‰»eØDƒá\BI¡Å{ô½!›Ñ³cë¼+„j@\vƒo¯æ.”àL;é²lWçöœÌ+²?ÒÜÎãŸ[ŠOð|ûö¬—¡oÇÉ׎@0˜žÚ¨àr[ÇOÿƒ79A4c3´ƒÀmyn²_Àÿó!GíÈØ )…Âåï¢I™<.ãê®ÄÅWß•5;–c{²Ûʾë@|>í1¢ÆÃÎëæf¥.7èthn ^ ¤Ôä ÒüÐþ£ÁúGíLmV<+ôr&ñyÁb”u¶CÜÏì+8èòúAc)w. [v­ô&ÀÁ{ãˆ@ŠÒ“ül QàÜßb$WŠAîÝcÇ¡èà+ºsD{É[ YŸ{å*ñdv×R8Ÿ2¼§*DßZÖ̹KµÕ°MMóøº â^ͰÌÂk>KN$ótž)ÿ½ DÈ”´j÷µ‹ì2·T¦ñ~ÈH°„<º]ÙuÑDFÃæ%Ðð–$·È¡ª¹Ù€’|³ O¶tÕìÇf¼ªÈBvm*C½îðàÑY?®cÎïë룃ðn“6‹S díü¾—å™˜ï º \„t¼FàÂ[¿Ÿ„bÕÿ˰DKÍg;öwEÎì!*ÿ“öÈ)œ¤E“R-2Æ"+l“ ¤ò±8›cÆÅeZŽý>cXºê 'FÀHô(Ef±?†îŸq&Ë-ñ‘öþàxÍ Zo_®RÔ)ëÚpaÏB¥Æ4Lc  <â+)Ìu5`Yñ«Ü?†* É€Oo÷S¦5ë¦BÁ¥‘§îiû?ܺøIÖ½–ýb•ós‚!‹i0›…] Ôæ'¨Nv®ÉÖ©ÆÊ,Ó´³p@±ü->zúï·IÒäjªçs),"Ö¬(HGœ-ö*êð!Ê6:4j0Nÿ|Á¹ûãfhÌ.‹Ipª%ü„XYJA¬î›þà2’w ㊰AhÍA •“TU`YÔ13¦É3n‘Â!ðΚš[,&ûRXÁ€üqÉñ¨ˆr!Y©ÕÆlIáÛ/¨wä£Ì_Ðù’Ñgµsz£ó÷Bƒì†=ñgN®ÆÂ…ÜaØv3¬…J&Ö#òúJ„-æÛP$ÃŒ%«—p ÕçƒL“¡SŽb=]ç''0lÿ²§`@!†¬ßZk·IŸ;©F KJÏw ¨Bw• múWž –<­Lr'þ&=´ù²c/xÁ"€ŠT«@JÿK°+ŠP!íy/ „äøÖÌë˜Ä‡£%æy5u–nF€Oò=1ò¹ú€!<|–è@夎¼— ÇO½ó û]ᙄŸÐ"²Üi©KË¥îXÞ/ ¡ÚIxcêæŒö78'cÁ‰B”–0ûeŒ&b]vÁž}òÅàKÂÆöÓäÝP`9î]‹5¹»©rõ©<Ï,ëèpnbš‡^þ]… «íG.&làð{¥†˜&V‡Á/xV Ø MÂ,·gfž(¦¬lµª|o¸îÃaµ"Ÿ¥Ì¾lÉÄU×GcÿZ«Œ‰ÙCçIÆcÌYîÖ[¡Â>Ž-ÈV•^žsÛ§–èhù!âš>ûn£#…ÿéO2ß{U¨ô s*½ê„LJ¾Í¾÷ ý`@ã¤ÔMH¸¾ˆþ°äŒÝFÌš±Št¿0R£#ÖZTJ„0˜ékJ»ÊÈüÍ— G®ëT¼*šÐšb|Éü¸qú¹è/ ì™]žxíþ7È]>‘'©;JŒ vœ–QÆd[¾·e9ôiú÷Z®òÂkŸi½k§1¼é¡¯µPÝï.eŽl÷¸e»%X¾y£e޳ø1“·Z§‡Ùæ¯ÁYI çåÎ|ÎiÙŽùk_ ¸þ•f°Ý8¾Ö›“Y s‡è[¿×ŠU›†·|‚om‹éB‹Å©Ò³Öl"„',µ½Y @®Ÿ ¡%Rø>(bLmÂWøÔÊyÇf&©‘áe@5y4A¿´ðóÇLjðÙ2"vôˆTò˜AØÁIK½O3±†{MÚî¹îâ/“Û‘ØÅÎŒó[غ^ Íb5 ½'tl̺3ØÛ…š§jÀ¥¦‡Ú¬˜&^Rê@{=ÓìŸ$ •MuX¸t~Ô¥œõ}&&Øp…ü¦ßõ&®"&ÂÉò!™wª+|›_P y”¤²#ámì«…Ü60 ‰ªñôN¨ëý)ðˆnÛ"ú>~±—€š\J¬~5­®©­Âÿ”èÉ‚^hN,ö×(ÂZB«IÒ׬ºéedU««EM@­ó>êšNèé;1H¨sÀÉ=²1E´bôъ푚“ïÒ0\†b½…–%gRIôÛ WñvÁ:×g¯@ƒþ.Ú{® èöâ*¥–©\¾]ADÝ UÙ2¡`>ÈŸ­|´‚?ÎhZÀ8+·”OfpqVÒ畬';‘‘ùÿs銴J‘¤%£Ù±ã ÇÒ](”s’ú X hÓ3 ö Q€ e¤_‘ íì¥ nî7Îü[mR”š”DÕ6`î.6»R¥KlA¤êìáÎL¼Æʤ׿·7F%·3B¸ †àANHpVW·úy>ß/´v—Ÿ+¾ˆ°2ù¾Ê¯öÀ‹õÈëÍ6dŒL˜aûäÛsBkûË€.7gð˜jN"ÿÉ›W‰ÂÀñ~žZG*I„¶8³êpåqúôù_ÿ×· ¬Á ^gⲸ)`iЧÍÓëŸÿ~ŽÄ@5•måýò"˜øÉzcÏ9±S°FiDÚ–*c©Â’/;ù9K¡økädtI·é¼I,µ¯‰<ŽvÌŸýcêe”õHÂY:Hø†e‚ZZ6„ñ9¹Ý˜¥ºn²ÉfÅ»öäÓ–^·êÞ”ÿ,™äÜv¿æi_pnô°Ô–.á3ÛÓD&ç‚ÝÈex£‡èÉž9º/oÎéd69sù"ca[Ýé9¿}×EüŠîo¬´2‘*[b»¥¦¥–,¶â1 Ô–Οȱ^­A|°‡ó8’îÔ1@«q]O„ÊŠX šÕ§¯…™Ì·ÿ0Úú„ô{â×vÈ=¿=‡2AÞkx`ºÂ\ðNÂ{ß •eÄÇÀâËÕOb¿ÃDFSxHgrR}ó¡Êº‘cÅEo:Â÷n1Û<ù„ÝFùSgð¾×EÝÞ\¬t»$LVÐ }«E› \_â:î2ñ|úXo æÅÍþÓ¾f²eµQñæüñdL¬ôÝXF¨(±Ç§‡Öƹ„ÁεiëäiZßPë‘M1õÍÛÒþ;oQ”qÐá7ßoSÛt¦Ê@½¼K¸ÇÉÀ”qG×J¢¡Àò`ßÙ#·L–#³šç¿<Ç5qža‡ °ˆÍ "µþ$v7#·VFðŽJü)ÂïVK+ØýL¥âÕᠶοc4Ü^˜|ÁÄǚɢR Ë½ ÷y‘ìB!K ¸RQ©Aþ=úÇo)¡`æÎ„Éåo\þ| hMeÔµÀU¬¨@©g5ìר– 6½Ê¸*¬µ t¨;nŠƒEéDf_ãàØ‡‹ì\é‚4Åoá——ÎØRáqz3¸5×lÊ ³cÒ)dúµˆÀ Âì*þ;ºÔËçÌ~6U-°sÚðñÆî¤'W‘)ü¶9<š±¥—™Ãù:ͪ,oùCÿw*¥‘µ±é½*òy \ á5Ü^ß<)+£gý ¬™\ŠÄ)LqížYIëziaÙ›Ìï¸+ÄZµì‹äxò Ç,ý ´DÔ%Èi~&ªudQýW*Êù0žÜ9ÊQÚÞjI™¥ðàÕ?“ur\,‹6É?»? H7£/Ù];6ìàÓ™§ïzÂÚVD»zÐç+Cbp±0º á§€,I·¾µN˜eÕ·¤|Z”,Ýþ;ÛòËg‹*ý}é÷õÓ&^·âB'9-@£Ä}tù÷úãbé¹Ôœ`Õ› /0Q¼x˜ÜLç%³ü +±Tц£%ªœ0yÎÇq®Õ Qý¼%ÚëhvEÞuÞâ̬7auºUTDAìOÉo¯_ã=]çPeÞ¬ï91Q¾˜ é‰,3l7åzíÎà •Í¸‚!ZƒY(žüùAž…Ô¬yìnân»»áaÈ:œû÷GÑ N¸Ò|ùžËœ’ƒu=¶ IPO . kl©d#õèaRíwm§ùlº' ÓxÐí7Í?¿¹e£?‘Pèu®'#RNQ§‚ÓV~hþ·ƒ Ík‰š9³0$ºJ‡©Í²¤_ø£ÿ¼', t|ÿæW'±i¼û )Dw i½XÄ©/'ñHF†Þd´ñ…6@ñÓÓ|¾6»{ 7ÏùGÂùÌ+{ÿü'rÖ@É…stû#âm TŽ -·Y‡üÚ±Ü÷ÃAAëµ47±”¨Rû„‡Š)T¤K6Ö[o ±Ìrä¤Qab–™ó­Î„!Çd3 2\žì0Ö5Ô“ãv?êé3>Ô/†ô¿ 3›¨³¾!¾¬]þjë\·ò6d»ÞC4Ц *J›Ýw6xrëÐžÙÆ0"S¬·À»ßŠb–!#é5òZ)$SµüƒOªsõ*nÍ•ÂF‡¹Ø†ùŠû+)¿Ô›!»HkíSi ËSyB{›¨dl;zîñÓœÏ>?üצß9aZ¯Y;½Ý-n÷Ù]e±d&À¼íry?É„¢ø÷’Ê0ÿ÷<Ímcprœeçr€D'¤ä#!Í„¾YÚ×]«Xߦ3ÂÏvð;„¬À”s©Mº› }>O_ÃMútÖûâ‘åf3 PA:iWhËjK{UL”psîŸI²=²ÑÂAðƒiî9ÑßÞ®V÷¦ÕQ)~x¯R†©ô@3Äë:` ¥ JX1dû‡y¬É# yò¼¿ºiøÈS±%m™ól0•ù¯w \F¨òfŠÊÅóÛ&´£®Uôº*žåT…2x:uë5|™j£I˜Æ&S¥“È*äùy/š5ßÚñ¦½-Z–|1D5ÄXÜY^Nt3i\ÝD$’Ÿøl™æî{=¥å´£¢wÍ}*µÃ8ӻб×"·bw½bõÉZôÒ+»Îak_2²õ&BêþÙí1¶Ã×"Ç8³ßŸ•"û¥…Ña°OžìŠúþ*¢?‚‡×(7¡UÃÅ{¨ TæÁ$x­9[?ˆb¼Äg¨c®擾3º±0A¦ÛÅÈTv%=ð ‚ï${€çGI_k(†;£,wœˆs{ºN“Ír¥Çÿh'Aªº*Å‹9é0ÿHAÈ&²Þý8`–4å ðD ½²9&«àÃ4-LÇFw"zÔA…â{žµ„óN±«¯uåÿ+!U†cÿ×#äŒt/žÀÙÆ3ékHAu@¥ê@ÂH'"§ô|øèjäÚÔçàøUÃf¥ Ÿê²¬¹¿›ˆï•“ØUÖ”¥µ]öa&ëyÍ\Í&é_¤˜Ò½pÉŽÿžRë !PR‹æØÿÙ–ßXßñ`‘JXœSw4TçSk7•弜°Ä/€Äƒ®¦d…’•ø6$“t©°!–—öVJ:v$ª ‰iðAÎ7—ïÀ°a¬}é$íMîªLÁÜ‚Ú)‹ ò`‡Oc5Ñ¿ÐÛKiû›Üªx{M—Îu²úè> Œ¢È;á6kÏaž(Ý`õUãpÄ_YwºH1TûÖÃ49{ÞÉÓØ3Ø’Rꎪµx9Þº’åÑaÁ»áÞ _Ë'j¤1¨ ±“–´ã±üSB+Hg¸ûy62 wQ7Níðfzœo¿âžNÌ5/aÅ"/FŒu ‘¡Ù² Ó—)–ëÐô;¾“\/+&t—Õ~åO, rEÏfÍwûúŠýrÑiSÄÕœ¾ÿØ]…íû"ÀY°<ç7Bï‹qSKáGåÂѱÍãmL M9tCx2Ó©\>FMj¨>øægÐT8އXëñT%Áæ–¯ÙPäPÖ$‰ýžãi/‡„^ý|Œò?ZÁnñVª¼Æé ŸÕ J^äEä­Š ‡VÝq—°r mÆôà:Üì[€^&† Õö9· høp1VÎB?¡oÒ•h‚ÔÒ?.k™­¹(MŸjã NTËŒÖ\Ì|ÇFÔ‹§Ö¬S ¦óPKH±½o©v?4m‚qÞêAõ9§¢ˆÉ Æ>m¶6VS–dë@df+É0¸ÏÚc³×ã k->,c7¸Þð7!ØÞÝÕ{û]2B6“6jdïg—#d=ë!b*9Õ•e:~²h}(€z†mä£HúÍe6lÛvÃóÿÝ=(g¤»Q1µÚ$r:,/˜{ö÷¸À$Ö Ri{?OŽ«@¹ˆxøíäpë…y®z 8©<Ü+·Ò÷+Ž™IxFT¢õS0“¹NÙˆì'<{LJF~öêÃ'ó›KûÄÙT‰%ØüBuÂÌý–…œ ÈÏ’‘½d•èäœ2"ޣЄ¡‘Рѱ©ÜÕÛ?^ƒ€ÙªÅ°œ{G^²!  µJ“ð¨@êšEJ»– #‘àçj`òó£²>ˆè‹‹‹£/´ù>Œç¥Û¹ûM#š’âœ:ìlPä>žÊŠ“Fœ›&Oñ¶?“>Éôëe¥lBÎ>›fÄwÒûc•Cûž5³â嶤[ç>‹±nØúÍ(òíýÓdûË•¡ˆÌd+,^  "TóÚBÅ$Sa²6Èß­èÙ_`s¿(¢ † Da”ôÈ0ÌΖû ·Îó?×"a‚äü¹šÄôõvi7Ä•¥Ç˜wgé2FÏÒd+8‡°Ï é‰‚Dÿ'ãâÝüò7Ì.öfŒ¯qAØÌËg§±è>VÚÆÀ†»:{Xgœ§N ¬¤›´asŠêdÎuV¥Nš§˜,Ô)'kš„ü­åDIÖQÃeòßÝ1@ý¾05HÙ'1É…Úü~3øXãD4· ©þ™æ ©)£µýZće®$‹6Ož3™Ãq`†ñOx×hÏ¢ºÊ—¥V®ÜÀÛ ´RGbÚ öж«è:Ÿ£Ç'ý’Ð2ÿ_ŠŸ8Bˆ \Y“½üq]š ° Ø¡×þ÷}ÔCGáÙËïÊ,­{÷¦“Ï·%JðÌÙL+š—²²y˜'FöÙªíªjj!|:¢µ ˆ2§!á0è 2=p¼â!„ÍK…jë^Ú5aÜöÿ‘;ˆXÃQIšWyÂi²Ü{CÍû!§ÅrðŠs¼XŒ×åoÓ|‘9ü¢ç{» EñµZ£ŸÐ7 Ç'tÍ¢CXj&†pß¡Elo¹‹y>©d.;.ÛYP±œÍY¢?€ÞÝ8Ïóš 8’†»É\ tóâ.OÒ¤ûÁÂõRyçÑ JÅdÂ.Œái‚Ø+èçMr{ {?j²ªŒ •§[cå™Nã"¢ÎN=ÿ,ä"tî¸Ï›`­!!²¢”¸RÄvaÖ|©¦®æìèVÒ¨Š\µýÒýàF¿IwTÅHß͜䀦Û°ÞãK•òäOÔŒ15°† ­ŸÖù æm¤¸Éz'ëns¢ðkÁÏT™.Ï«œúnu%‹'Ú‰^¹ýVõ03Œ•F7ŽNîÄ9Ë̶8ɯEù#µé@Yö¸1k™æ‚|!5¢ACÇíäòx pxkõAØa¸Xò°Ô'féõ€t’/Ò–‚F†+Q»U˜zÊÙ®&ÒC‘Ó=t‡>+¦×m¥Q^ïÐé¨9sù]•ÒðõÊ2ÁVe¢ P? ǸŠß†ãEG$Ÿ ’,iÀw±>¿}Ò¹v™”0l…(.Øš~·n„¨Kª*¿D¸>ëB“[Ä„‚ŽZÀ–Hé!óK¨Ò‰†˜¤°Êç,³6úqÏ÷5Ì“«âò:°[¶¶°‚ÌæáâµÍF$?è¥=¯v‡§“Ÿ­¨:Ú/*\R5Zx¥KveP‡QÄ",¡Û¨!Cá+V½f“š3~|‘~@DH¶o "t[sò€Ë¬,?ê µŒ€~rûlK豫˜k_†ÙÊ ‚ò‰Q¯¤ê›á·„Üãa{9 V´±ÚtJØšXkåH‘’äÝ„ªAšXLl;-¸1‘ÈôfN«ª ŒÏ>pI[ÐLë*:3¤Ÿ*Û1’ÛëÔ6Ì”%y+·µ4×Ѱ‰dÔ(]Boø'¤ÊfïŽBFØóäíņ½Ì*kÓi@•ïäÂZ;t©%{pĵ§3OýÝÓgƒfTi.o°.÷jà …ó]"Õm¸š:¡±qßüö¶$rî·¹mTocÜßÖŒ 8PÀÛº éÕŒ2_¢×fVÄ5B Ç«ǂòb·¢a‘Nå![ | ˜v}%f(ã{âåG ¯ºkXef*ê™`£Ì 'úŠç 0®}âÃÿÚæ-§ÜœËND”Iš |44Fb™ …vºJr|úul¥Ç{·‘)ZßÀr4Àf1Ã]ì‘™#× Wu2>ü<¸Ž5u?¶sî냉ÕÕ0kïO“Þ»U=jC†»Ûïþð,~þä8'šÚXŽV)½“i{±2ãñaÁû „yMÖûøhZßjoPi~ùÐXõ¿‹„0f17h2:V}}þ˜qúæ%yâæâMª¢ýÜw““]ñøPÆÕœ© &*™`$+á»vç—¥›¬°aËË­éÛô [Ì©"ý,vL"ÆrZYU¡Ã¡Y5t—þôéÂÂì³ç¯WÉÛbb¢”?eˆ&Y¨QWàÝ.J# ^·ì=—Î`‘Ù UTJD%HnOµˆ `ÐÞ¶„¦ÚãËzkWo8¦³æ3q¢ðªÚNÙYÒrBsáØ;t2—®*;xN~è𘙿ò?µåÞ<ñøêf—i.œ¹~WêÊT›¸ÌÂ.ûv^Ìãk}ôN” #®"Y¹hGM  ‚˜ÜàÉc*ÕÊ¥,Äéxâb d[ZûpÅLr9V‰wvÐu’·19^˜]7^è+‚2~€ö ¨!Ö{¸x¥â, 1q§Ü.âkÊð÷ˆ—/ÝC$RnTãÈ.ï{ä,ªlõA)ÌàH˜Ð MéêÊ églõǼB‰EPf|^\Ÿ0sÞ ßoyΊn ´LðÕc¿[W’_Ò [L$ÙŠP²’X¶º0ën2vB[UíÔ7 ïeÏ5ƽó5àÁ㤠Ùêè~M>0Áöÿlå&ÍyC6B¡cØ“Pï~ !‰ñ$ÛNFɹŒK•@ƒ¿ü7ÊJJRo]›£ÙFžL%šH¦¤æPwiE, ª¸â¾®õ‚>Á#öœ[A16Q¶Ä¸>ÍÒ«t)á2]5¼[~HÓÑHÌí˜ÁâHUg@xi<ÿF!Ù—›úÐÞ¦yZH6Èßõa€ ”“Ùr…N>3L$/ñð‘§ø#Á…èyr°ûr(ËîiÉ)•¼i>>Àæ^%e3¸¼ÉØŽÝ{X6Y €±àòi6´ƒöÏÖrˆ™cv±ËºŠ@\E4·ó¢ Ê'ýèãu»ŸSÅ]«ñ÷Mš¨hçžÄªÔC³ÿTƒ‚Ek3°©7zTQB¨÷ëÏ.‹( Ü´ÂÊIbãÎ6âXGZ‰.ÇU‘\£\ «‚tòÌÁ™ß•@x*¢$T\£c }P3+—P+àùö€“@S/øüø-ú|”•E@±h8ྠ0xÿOÿOïëPˆT¿§pf?ý<‹ „ú{HéØ]ñƃ¦‰:Á¤×ã8tè¡ `vùÝÍ+ï…šZ9ŠC'=¸èaƒ ^Ÿ*®.[÷Ö1%ûùˆÝ¤¯Ïg,|ò,YIøLçrbMŒÙ.)0æã„RŒ?~mK3]PŸcßNgVÂÊæn.¯øªm@}÷ ¤Ò›ƒzïzÆ»Å?ûP©Ýeþ“°RÁ8øk¢d†kH°HÊìøé†tl «EЕ%Õø-—ʃ\kÈm-Ÿ·+]GÏ1‰`oÓºÓ§ÅqnúK¢²5UÀæåîá_ç2(¡~þ#©$NMª{¥ æTÙ"rzÏö_TÊ<ž }ïün4¾ÓÛòbÀœå‹w„ÙÍã—°[åâŠiÊse ål4æÆÉŸ‹ŠÆ'â;Så)tÍÝíÿQ^=}Ž7¶©oÝÀ†&ï™.ÅZ¶ëD©71åöðEW,NqV‰Ãë†ë7… ¼) ÁXâW*¢žŒJÛóЃ䎈jÐÖp1Ãüòàëõq)xËTpœ—úד8•+#,žT‚»î!L¥Ã¥ÒQyIÛàó¾ Ö<* Ç­5Y³<=…Äiè?¦ÇzáiüVÿ´[23ÜAÆw9ä$z”µ}$xG_?t¬–•¨™ÕÎÇhÜ[陘˜Á¿ 0¼KZ…{ü3»xÚ­³(MY‡["™w ‰è„œ¡Ý rU?õWòž¯eÒ*•V€´2#Qæpàà÷Yä)Zé:ââJ­Ê)®#r&Ã=Û NŠÕ`ŸçmZ„­€HDÁ{V¸Q¦še9p q—Ôz÷U^¼K­|×®™SÖ¡džµ’ »®­g Ûwë8‚"ý¬vöX‡o°î´ʪeC@ÓTÚ1d\õUEtwê¦7¤n"hÇv÷_/ Ðe0Bƒ¹°Z6ùh=ìm9˜ÝÿÔs§Þé´…ú*P$£éó î Ú ˆy·;¬ cÿ¹šc€ÈVKÏQaï”"€q粆_«’å ƒþK1¯¿i#d‚øŠ#£¶$ã®®ÿòl’Pj/ƒ6•†ˆ)FˆÃó♨"•5>´ÀÙ¸ \¨—X*õC{»c=‡ÕötS-`*±Eå¶urú­ZFHPmxqãîhpN"±‘ãI¦îx]5¿ùÇjõþà …ã“`¨3õé¢À5b¥º ÑNèCÂ\Ì^¶ýìn¢•âž7×¶÷VUWwåŸ-+cYËØÝùGk"(Ï›ÈÑOËP³uT•ÈWÖõÅuTO²rÍ{®ÅÎØPÿBìd‡Z­¶ý¬û¶ë;˜Èàá¿^¨Fô¶Ößùèb¦§M<¹;Bg8x4SsÐo”Þ¼ ¥–þÝ ~@­ÇD:rhÄ5¦½1?QgãóBhÕÇn²‡¤â+Õy¿§ä¨"JuøS5Xk{È:ù:òcŒês5Ž>‡µ[ú™ej-ö…µ’0–“30U;(2;×X˜s\³äyû àïmD'?k‚·CjÖ·ÿž÷‘•íÅ=™‚ðÁ÷‹•WÁî( äãgê5g}m{5g ^€ÉEÖ&ýÌ‹‹¤òÊmõb[VwŽ•Î')•aƒ;ägN5{£;ÕLmÐ…Øéê èÛK¯ë§ ³z«Ð3RN“裧q"ÿ¥ Ÿ;ïTª2§Œ°#Ô,²­ŸÙ3(à(vv¬V)}VÜUÁ0Yçú\½‚z*2×.mÛ‰Oìe[÷8v¨óáÛC´ó“B”pD@×ÉHtö\Ô‡xVr¨ÆAéJ†Ôc7Ttow¯›@wëv‹7‘© æ»ï¢@)$Ž,mJ>Ò®|L~1!aFEaEz #ÛÓÕ2“þ¨œ' d[½Ÿ]Ž*ÂYdD"˜ŸÝo =©‡š‘ÝÏù$u^Â8ëΡŸ¹7%V¬Rô˜l.‘ÔliSï“é¾ ºi½{ÚÑwÕ2¼¨Re¯*•JÒ=¾ân‡là„ 0OˆCî”dn®ñ;_ô­+¾îmÜ7 °$†vMÛµüíT¢#8°AÇ_B®³Ç3¢k!ÈG #óã=ºŒ'¤‚ÿ²îåóàãÿì–O¼èÕ^ÉÃä ç¤šníu/¾°§?˧‡ á‘51TnI"C¥)|H–ÿ‹õ‚àA…½ÐY³VLGõIZ‹Ñ´4’Ž®¥K ŸN'’ÍM1šÐf K?Ãun+[B;ÀÄO¢ÊzÖRìáz "C;/Èâ8/,©×!+ºÎÆñø¶@t(ãj³´ÚÅ+SOÌÎÞPõ#?5û}nÛJz@tñzA¿×'®¤?V64¹>S‡¡¥“mɳDùe$OÖ°‰¢)2£âÌ ƒ7ŸNÆ xúr„pb ˆ¿^¼ÂÁaDUG›Åc—a™ƒŠ3»…gÙ/n­œí ½8O’¦¦_>¸,pŒ”õðlc.=;$ý†+ÛOÒE>´*Žê%—…˜9¹‹ÓkCRÅ}Çì|êg®í)À—¿ª 7òøGÌumÝ´0MÊ‘±ÊŸ”ÛD“íÓÆÛ 9LK4‰ ¸x!g¶)¼g @­˜Ûw‡øiªÁr$è÷:ýwb0-×\Ý@€Álè=1ð÷Ó\ÍÒnÿÖ‹j^vTž ^uA¥fø…6!iî¿8ZY©7†ÔŸûø’U™a²ùUèmº÷€Ë†{¹uÈÎç…?Ã’˜çæ~¸ÓluX? áZ€s,Ò‹èà÷nàànRÕmërÅŽIàÂá¥t˜š­9è¬UâLê³¹àlÊqì-¾®yw"•ÁT ìÓ[Îh€&dpñm¼SÜEœ{ÖŒ”¼­þ¯.~ÉÇ<}y|¹Ü¢F–ã/ìv'Ô¨6mÞ±æñÌ_¿‰T'%tˆûãio=…϶ÇÀìëȈª6 9çʰvjm>)Ê7 §Ë?Ùµ€†ZLDKÝ?rIø¿¢>Huké6’ŒÌZ%ÜšmFfTÐp¦52A‹Ô}pî"K±°‚¥uc-u.sHYÎiÌ ¡¬ÅÔÇãx…é£ÕÂ¥&:Üz0?t먰‰µóÀð ’žÓ3åÝäå^ñ–£îvÿšcVuîTî`ÏVBö¡0‘±ñÐçJmZ·çm4bÚ¶Í xÐÖ ȇ©¼" µd˜>G¡±:pÑü>Ë—Áo³OnÛ•S,4“ðµ‰ê€dU¨}Pˆ}L<Ÿîœ#ÿ)ìþ„æMm1>HST(óœäÜ0 ~ÅÓ•·S§xnyp{Êu+Ò¥ùªÅe&gPK&îU¦Aˆó/RkÞÓÅãÖo®^üKãÍuWìã8¹4ÄU&cÛ¹rj‰:‘µóUø 59M©1§B?3ø•y¡¯9p€ÍŒîª¹_¥3Â(YÑAyÚ•À*òÁ€¨¼?'vµµÐìí.Ÿ¡ª}ØÔ6jWj³$2ø²¨µÚÏöÔâ¦y¦>»"|ï 먫i]iØnsa—e#¯tÊ­ÎÄj· ´o2Þj©[&Ièu6+s³NñN¥ßƒkk~bßZû¨Ok|6P€†ÆÖä<±„Þ9ÏsK…!„ îJõÐ —OÏE$ïƒfèö*í5°ßÍÿHŽlñùŸ©ÖÓìY. a†ËC¶$¾ªaq‡ž§ÃG!†ÆaÇä ÿ-0Ù¬baÀ´QîÞ ħ^¶ý» ÇÎäøï ]·6TT‰š~,†vVqWå{ã4Øv®"eK‚¬(‡f3üJ£žºÜGî–¯rÇìqgj!÷[uAuÞ{µóO“Éøe³~³üŠì(€i×ÎS€ ºm@11³ÇªˆK_ž¦Ñ÷˜ýÕâp^˜é»xii ˆœ>¹BÖòAžRÉðÛ éOœ(à Ø-Ðä· tʰã¬a¨W‘Q?Û~ûùQrî…Ç«ðpiñÀæð%£ZÂS‹pƒ”#†Ý´›¸ÚFxÆC bè¶7,¶·–ù³ØÔ¡©ˆÒ tpݵUL8Ɍь3áC·Eqú€ÔpêékK‘lš¤œâë ¦qÀ:¡`(­À»t(*J»êjq?Üœ/*G—ü¦‰ë® =™&a›à¡@3‹,Cn¹ª;X® ·‹8@¸›†S9 e%4ãö‘;g@¥­ókC51÷-ÿo7Üû±\ñ.|½ßq¯g·Z"l~|L¾Ñ ³†¯Ã¢|Ø,ÞÔ¾ÌEî°i6Ó*û;õ·DB<þ¦|ÑÄx#@¨(¹ÄßÂ7Bܯ“8ZøšÈ¥;§ùIŠçykµ'êR{ªk›gŠUôˆøb˜‘,~ñjPÓÐBÏiJ”æÝ =$ëda2è²hk˜_ ¯õa'…€ŸwfÏîäOº©µ!™¡%ìG{gAj ˆú«Féã1Çü‡”®K”) Óîð9'ýŸ^5,ÓÕUÒH"QÁ&å…ŸþÆæ ¼0áƒö™v•œ/\@Ë:¤Àê“vFƒ8?´(?æÂçXò6&yZÿÈeF»±ðŸ|Vö¸HáUKÁË€Šâ!PÎð‘;Ö“ÃôìM\’õˆQ©Ø`¢Œ)j_­­@ˆ|-Óã&sgPzÕv8ÿÒä‡*ÁjLÈÆ`×Ô¬´—ºG^ˆšÙA"HzA«ª‰é93”ïR®œZÑ$㓱$­5´du«&[‘!z®/Ëü¢©•ºeЪ:Â)2lì%²¢¶)“ó¿þ`[¶·#_“G%6v1ºšä1ø"/p¦vÈêÅD³FvŒF.Ö"|•°?ÃS$zØlþl˜¾$oû½R$‘‰›7›ˆ×ÌÝzH[œ[O|ô"¯wëi°˜ÒøižPcƒ[¶ÔÕv_ ˆ’ZÀìÐá<‡Pé™Ñ»Ò&Íc0MèïRyŸ¿94ŰYI_\±šû ¢­æ+ém\ïêõ8*–~ŒvN•9ôaÉËFMaœš…ód‚yèþíKUñ¬‹(6Êpq®MG¤ÇuZ[ŨH|c¿ùsõñÇ|êËf~Ï¢¦ó‹Jhüpë/u)ê6¬Ê8n£æƒcð‰Óõ(µï~6E!cO×dWè±ï¨ ýNV9ØÂÇ_îø¤êmþó¶šï¶Um¬žFËJß’6‘1ZĦ; Òj4¸úÀ;A@¿Z›ýȸ…Ô&à8õ%ØÿBõ×Z@Ÿ .öE@Ø ‚éÅtýD¹süñhÐ̵ xmMu™gQ€oÞóô´®%„óqX]—>èr+'6Žtìó©E½H:ˆF¬é“äẔ)ýÎõbe}UÅÛõE¬f wçXM„áSöÌäºÕP|¬,9nŒ З`f½6ŸhZþÎxòÓü][*)4†¯Î¸g°Ï‹Rìk¤±|Æ9§Ã)j¯î‚g®ÞH€Æ¥Rð¡ ì†_"fÃóyÉcjl[†88'=.•plu_Ôå4iù{œ|²jeŽ¡q8*Èì4O*"ÝÒ‰ ‚sï<#!ì‚gÐòŽ>ü¤Aü((w¹uœfÞ7¦Îk•‹Ð«ØÐ ‚mntP5v¥áÂÈš ™ÏgÓ³<¾þ®®¿À€v+i ¢‡ÛÁ¤ aQ´ J²ùåÍ=—S~Kü빚ÈÊΙÁ¨"ø­83:º^*‡*Ý}4ÜA¥}!3 ìJÀ%¿\¢c“I\ÐzˆJv¥IMKj§ÇÏ鱕-4…îƒ-BÉI>˜©È…§ÁíÚ=«`Æ÷m‡’oèry¥\?çs¸æÔü ØáI§ûMdõ¤B:1ÅM(@£v> –O×XtÞ„k\×\t%ô~®ïÐ6^HëZ®g1³kÚŒ;J<„3‘‹ß~×0Ð8ñ®n\Ƭ‚,q<¥¦ŽdŸ%úœ.R?€SP­K3òjüžÈ$]ãÂ42‹?¦ñY)¯í^D¾‹Z·cqâ3½äf§aå/˜ ÕÖÍ…s:=T½Ò!µÎÃÉ!Ÿ— FÇzèuÛCԲŕóèOVÓ^tåK:P-ITÉÏLÈ÷ñ åJáÝÜûr…,ߥüä„ F×÷ÎOÁ"w‰"7Ý¿ø Dß]hºZRQŽª'u#\˜R··äŸZÖhMr>ò%]á¯g.É1©s¾[@{©ý ŸÅ\éDA[[ï¸æj³¢M'ƒCWh[T÷è‘Xé(JKÁ{ ,"ÔÁ)å/Çz¯±€?à±ÁUWMëgŽÍîDTÎë ‰ï„µ;as•´Ã曄¸×½æbËQßì'sôÊ‘}ÓÎÚFÿ±†!Fd¸Ä«"'†hBìÈóN#Žˆ“5É0«]hÃn•¢®WÊ#D#;´L"@²h$(’"ÿŒÛ¹^™«þ( *Ão™w¶f9\aÆÎ¢T”؉—•r6M-Ö;m[“JÛñ~ÀqxUµ¢å.PéÑøâ³ï¯ ]JHñ­a:üšTÎñ}¤¿‚(ü²µTfÌiºŸ+a”Ô¡1péÀØÝ°$N«ÊÓ©T¿¼ Ù† ºµ …«hfÇRèK¾h6ˆ¤`ÄŽ°LÇuÍg[ƒ²ŽLîào4ÔØ&x“òQ^}žŽÛÖ.ŽJ=62•ã¢-8Uk=ÁóÄ¿nÁ‹N€GHg.¯ÜN(>å+L¼²¶ôvÃï:@64h4·ú`þÈsáS|‚sß²* 1~OÅâÝ·.¶wfê*;yµ†g.Û1 %S¥2ÜwC~¡?]B©nÿ;ÇdµGÙ m¨.uQЧpÿƦ©6ƒŸ‡Ÿ/'ªW¯ý=“«ôªºD@s®E•,ˆŠf+%ãZøËM%ŽaËâü?µƒÆ®[Pÿ–ÑG¿¯`•^Åàx ):}tÓ­ò–­Ãò`"¦ŽõÞ}+Ž0TqÖ†|?w$/)~f•è”sè¥Ï'öA÷„t>SŽë°µ1j渵´Ñ¿2÷íïbÝ ðä&ÕÚ¹Þ÷íñÍäT«¸§„:}»ÙÑNýß Ëó!lÕùŒÀµüïù±4@n{¶¸V UŠVÅ4f†fl~­•ÑfÛ¿åß®‰©d¦vzâU²LÁúÏÄÆ ŒÁ@è[œƒê¬ŽdF­ï¥-J•_bgfeÂü{^Å85§Ynò]®?ýz+LÏb]•  )Ð tÈßn}bÈ1çd$kØ1@]CZ{ŸHç~½½ÌŽ ½GG{©BYkƧ¾j¶ñ^ž½ø€µwf¢q'μŠSs´Õ>ÜU'ýèôÆ—]æ—·´_8/#l´Ê}žÏ~Fæ×àzÔz£o?€p: `Ý•ãjƒi%¬P|!Å/Žuñ¸±¹%|§YõÉñÝùÛä ]\Gð[Á&d8¸Álô£‡ë¸¡ñâôAÊÉúßg¸pZÐa:7FËÞ¦¤-c…t×óÏ@€Ÿ6¯,å°Ôû†–ã?Å=õ›’ºi7 ñ,••±Žî²r{™A²ËÅȲC ÿvÛ‘h-hÂì8fëk±®Õ²ýŒ¯ 5AP¼X+Š3oÌâËSñL¡¡¸™‚²ÆÂh“ܸ½»Ç‚ˆvŠÎÝðƒ¹Ÿƒ=¥æ ƒê¡%û’~æó•~ËEä¶ç‘ñ¯M7ašîgˆ±UcI7|AXž¸Y^Ñ8üF×ði=Ôƒ~HîOÛ à^$ïIßø•q¥Ê;|ðþárÈÉ2^×zÿèmÜéç°‰7°JMbfùÖÛÁ!´”ÿ%àŽh‚Uvûù& ‘êñÕôÛD·üó¯Ë÷ˆî`¶ÈFÆ™™Eþ£õ–ˆ¾ZKÈBåY;}è½¹S3ÉUCÅ–¦Ï'(¹ºœÂûMf¾ 3 ë8ø‹"§bg¶·Lu«#½©‰Î·dt½Zÿ4Ét­Š‡Jc Ltx.^k<|ôè <¹V3á@‡u’XUÈJí¹FŽ£ž¾—¦⛑j—$cC¬(¹§*²k.<¯4fcåÊÙDÚÌ;É0@ôÜÌ3Y{¦·ÐG_¢r@¹ËN¹õX=V«„{ûÀ__ýõþTØ™]¹ +NT3þÍa½3‘š–é/ùÿƲŒuV½cÃ:¶óìÍ}Â|-Äõ4Ài‰c¯7m5îPLªí—P¾£ë ¿@ÊShWçiÚwÓ5ª¡an­*I'‘(LÛ/SÔs_‹# ÙÕ¹Èm¬o‚´‚M5‡Å¤k 6oD©½ŸbKŠ@äñ1Yp.TVÙ.½_ô«,,I· ó÷&Ý D¼­•R€¸áÖè=÷;7î­j(¢\z´°sÜ'd iû¼x!Ülz” oé‰Ioxנ᤬¢â#½ã(²'|‚:¸žE½34ä¡ÜÒË~N”ºTàŸ…ˆkÔ¤Åeæ ­‘éBj‡ÈÝhÝf¬£eÐ2,ïµ{P˜5f™½ ×ö©\ó¥ ÂqÑ®;× ¶¥Ã¾¶îñVhqr\£’?{ÂÀÞ©ÙúÖƒ ‘>hH/f«€h1DU3"é·“pŽ“4ÕÅ i°¦C…V(îf@ÁyÁu£|$WÎʽŽ5]ìâiåPOµ£w—<¯ùU¤ªgt¾Ø3öGÉ"œu¦–#5kÂë<—x‚•H;Õö »ùT±S‰^à NRPd‚í';^ÚZF¸DÙÎw~iRÕ][ê‰ÐÒ[<ù©Æz 7cŒœö=÷1‘­++˜8GïÏõÃ]=T®‹rm×v— ÏI‘1mÃE|]#‘H¯RÞç6+a K5j=™5,DwøaOýp¶›<É¥êöé£NÝvâ äB4¤ºNqÂ+xì£çåB&ÒòðÏÏì倿˜ff¯§¿Výæ~Æxù\Å×8©é¨AÈ;ΨùÍ᳘ŽÔƒ– õ"õÎ òn {q *AÝ˜Ï Áý¦”°ÿ›Òº®ZîVØ?¸¿*wŒ×ëC4Ž´—©n\†•' ž‚poýgû±pÑêÿýg×yr'ª™hò+‚`„eÃ? -öa_:,ÒÖS¹äØd´€%c}!øã­@«ZÁs1ºèÜñk+HÛ¥Ÿók nHtK}"Aì¯"[MºÍ¶y\ö,è„M[3zo 5‹Ò¤gkË©üIž¶ù 9 4E<µGlµU(ÿ§9^³>çÕÄýà7–bÚ¿†U­(=çä%ƒc9-¸3bó«'·×lƶõ%›•ÚòÙy 4ô篣°KôpZÒÒ%öÑè¥ ï„çÆ‹éÂ×ûßÜ Ç5Þn3Ê.îòzfüŒž~—ƒD»ÈsXDO#PõõËL`E ¥â•X·á{ó»ï…ÙfÿU3ÜÞw/óÙæ:<ô†`k• ª¦ð_?¹+®óßÚ†ÆÈBàI9ACk Ø®p„«ˆë0b 壣éܤyŸ.H2·Í’Wm¶Î iÑ©­ú5/¬âÖ…²/‘à¸F@ÁqŸ–Ò¯‘ :QdQÒ0@7jjXUnÙÍt# \²â”U˜Â¿¨v;Óg޽Ï+kã\Ó‘4PÂ.ê>­¾»äïz<ÉÒÊ3`ƒšÞÜ\˨?K˜ÖrôDêå"þø’¦ ͹R§3:,ÌÙÅ«ÔcTˆ5§–æÝO‡­bó fÇ‚®Àªug¨g*Mê|lß¾ÍJ?DÆ!è”)W)2àôÒ[¨Š¿h@\ñXr—O^©à/À’³Œª#pŠ{_ÅË¥ÂZ§¶xüÀ!þôvGÊ ½ÿϽÐ6 Ó‹oŒ>Wb)ÀRlôÓâEUËfcòíVso'á~ú™“tæér'N—Rì1µWã ä/ßB˜AÌF&ߣ½ÜJt ®­lZx›$ô—;à|Lõ·}Õs0“.¹¿Ôµf¹“¯¡ƒy´óm¦Tíç ;oH½pC r6ýJ`mw¡F*š†a7¨“Ï‚›­&°lS{ÑŸ%9º'Kû á]J BüuÈ/ó<Öc#8/~}-¸ ˜µ@»Ýî±Ù½3Âgh2 ù­=¸Öt‡]ìmÇĈàzaö•’iwšzU@ìUÏKJ»hi˜ŠCÜigÊœ ·üî ºMëˆxÙ”¨¿»ƒ²|ËLV·lŒ>ÀÈ?kg°T‚¯µ¿É……£ÿBþ’ï'MB±7Ó…°âÕ—ƒ¹‹=Äv”gÿð˜a·‹¨ôðнúgóY>׈ 1åï®PÃ?¤¼± @ʈÏ ]Ap|QA+ÄsÒxk#’‰OÔÇØX»,VêS½)ßuäè/›ó²“L5§þç>K ƒ´Ãï:_Áéµç§®Åépf°_iwß—¶À8Û0ñ±g„©Çß28=l›AÁéD…U¶(,¥€;”‡gEn_=¢˜ v8·I¿ ü¸’ʉ©ZöÜbºd™\„›µŸ‰ú}îê ž…gÒ–bÊ-¶ñ.ÿØ ÒhîTN²vãÉá-«'GýJJÁ¯¾í:1@¼ 3“:ö˜o<ñš¹!Ü t³”|:wÌãhþ¶·‹w1Ñ¥œ¤Ç Ò~Fž¯aP cN¦ùh†–ᾄƒï‹û ˜Ô#;ºË?ÅXŸÔÒ†6)7z|*ëÇ®hgžÕ¶`̇£9ô?:ÿ›O~QA€[ÝžDÅ€ñ- -CØ·½–Açމc‹Ôx)‚°j#8DëJ±Ž¼*¸f>©-vys›Œ)©9_nåU¥£Ça ²÷R¹MŒ°N×4 ü¶ 2ö} ~ú^ñ`¤ ÃÎ@Ø äŒØ¡Eç}RþØ>lFÀÖq9_¼G I$h°cF´v s¶PàOZãŽÿפ…p‰OÙX’‹Îý°Qˆ6çgž–!°ŽþÇfN¤&ØœÇ^/%GÖáС ¨^|ÑêUºÆÎ¡1\Ê ˆ_¾›•ÛóÕ#ký¶3Ú§j—yqÀ¯ýŸø‡%]9 ¹ÐµF v¨˜e4ßO‹»œö¢lZ;¯ÿi¸EŬ~2SZ W…aAF¥ågƒ õ)1Ð>ÒAÊk&pNÌY4úè÷ìíN rÎû¼ƒ4SÏg™}!ÚÐaGªð—6“ºìf~¯òF¥ÈóÁm÷‹pºI_E ²Éåîì=ÒÿÑrôëD, ¶íÍÕ)'<4›æ ‘o X•+ïÛ×Y VÏtšŒ¾ãσ–-”Ý´ä@téNc»l;Ï-éíø„Ø`Ç æÆÄ‚½{ææ ÒQh³Ÿøîs6àtÄ»“Çs.çÌ_Äq‰§®½ßØÃG\R( DD¾L/Q½¡áðVÖY+Hbu¹ä*p•äWJüô4œ 75“ÀT«—Zzn¾ Çç(†£¾yÖK»Â"Jû um] zJš½r/'²‹—ÁG1?2‘Ÿ$-2FÀ\Pù¨ÖT‰‰©ŸV§Á¯ž ÇÒžîX=žZõ FKÿëVî`XÝ>~ó‘çr\r€ AŸ‹ÅÈï§”x kǶ‡,„½…WC¸üäcS+¨Ã^™N4^Á¸V7ŠÐ?--qîd€¥nÚdغSÈ Í†ƒS·TꯙD£™>ø½vøX‚Ýc©vC?gòZËŽƒ@“žöÔò=dðÄG®©P­…‡T†NJ7çó–¥ì¼k«­“Ñe V‹<W$x¬»Ftè‰ ä¬÷Éš²O×ÝØð7P_#—So«&î–Ñ(ɺu™)ióIñd_‰w‡Oa-à¾Ö®pã Ý9@8H¿?‘”H¸»|:tcf¹Š¤]Œ—=X?ü½¶ÝnÕs¦~xý9´’Ä/,i€ ±ÑS[&ÔÉDå÷{˜­hŽ-ˆwýúÁŠzÎ[–5Vj¿pɵÖòñ¡@d²ÿüyW|]ËZ“Sµ;.F›œþ2[4†®¶ÏœßËžX¾†铲 ûêŒÛáF€™,—SPS>–ï#ÎM]Ý¢kC¯_&°¯›ºFþ&ì©üi罕ÄaCcMõGðç4½°ܽ¤E@$EºÜ"¼(ªÒÖ¢Q¸k{ƒûn¾ÈæCB꟤ÅY¦ $îµmB¡{µ7˃û;á¿JØJÁ«z„ÒÓoa7oV)yb™M™½oë[Xl»£">ÙŒQþìx’x*[ÉŸü"Sú¸c 4ýæ¯Ï54¸ø‹Ä½ƒìšá.q·ÂOô®&Sèd âfÖgÜœ~óÅÃÌs½°åw<îq£j'²¥&buÒîCI«á󅨍Qì3Óø—ñbn¸]wùCk6A¸†tþ¢1óPK®Š]ÁЃLeͪÙóHðÒ¦º_Ê\¯Bj§Ã}6ŒÆ¦*ÅòbDZ3”g%oš ]³F<œµZv JÓ¤ À…½‰.eæwÀÊ5¨CÃ[;øæ·»ÊFxu$ªgp^†GŠ[&gmüß0ËçU232?l}OFª.„û¶Êkv?\øR/d×O“ÈFOgÍFŽ`´¬[X³úýRºŸ°6jšˆx>ۥ̣ÅÃh}ìÓøÇ{ùý·†4”tF˜‰ûáÞ •±Òز¥eÊ%½¹ ÷6…kTŒe‰3Xœ’¬¸ Oš×ªÔÓ ¡‹i­Íô&Ï4éZþ ó ªº’s Däs÷NK‡ Y¹ ;Q¨ZlH¾fSkt?eiç1×€NTtí4Ëú”'-2R½ïbš>»d[×¹¯£ì¤à•fì¹£ÿíÙ=ðÉ8S‡8bk­þ,=cÃÑvíH‰©¿úh*?GZЬZ“9…þ‰ )²ÊÑ,‘Ãâƒãº†QÛj5”Iu•€²{"ùyãŠB8Ôî+íQJ´ëRDó9ÅVH„?¤Ðg$q,í0ŽÆ‰Æ¤WZŽÃòzt­Ýè=‚S–à<þWçq¼ç Q–ð*qÃÜZi p+›iLs–ö{bša‰ð.Ü)ÂÙé\â¤!žiË2,F†Uçý·ÂLöšvé›Á‡ ^ël‹.À¿Ùbš­ÐañÂÞï½n¤Å Wò8 € Yÿl6ÿ¬Ë=ƒ\ëáÔ©pßy™ ¡.So­^y”Þ¢0?öWí %ù¾Ô@ˆ)‘K9/©,eµ~ ¸^Òï” ßì ²]ÿB7–!ó1ý¦;Œn5"M‡¦èJ¹D®¸\Xq`^§†– =ööOÛ}&yÆ`x¾ÇîóÒÂs†™b¹ÞtÜTïU¡˜:ávȤ ¬‘ØõTŸöƒIw™B {•Uo¹!¤6œ{©ùúw[• /ºÕµKÕãi£2¬-Œ>~RíC^‘ ¤“£5}n¬8f£ÀKÊü1}͸ˆn{Y£ÆŠ )Y^78Ýzg¹ß>Whµ4D—ãÀ%Yï&ÓêàWŽ©tsyc¿|gTÂÊX»,AÕ¬šEÜŒOâ¦á¶ìtÿ±sÀ¨ˆ"/,g'sƒÒQYänMW/ëàAKuÖˆª…AÜrt¯ÓÚð+ßT`æó£N¦ToжX˜¾~՝пÞtLQ “á ÈÕÓö¤á¨ñ€œ8º³3\Ô¥œÞ°þ!ë[ùðç¨ùå €LôÕ,AÂHˆ¶JÙ\Ô»m_wà>鶯ˆSp•(Ùo›C0&µ/ìX ôbD‹IÑ Ÿ° ùɤ%×}ß=²3¨|÷£rp´àpy\¨ˆš}RNl ;òj¯ô¬/Ü¡"zJ=êezä òµ­ú”ýè@æ/#«ƒH©»ÐÄz8K÷ZGi)f0œ5÷žÚø/ÚS +(>âÖÖBØ:ƒ‰•‘¢ÖÄÅ$š7‡Ì+ÝGoª5h)0¥QÔ.ò°Œã‘í¸˜÷]Œ©’¾'r^*'c’½–{€ˆ«)tQ ÌÊ_§ßôC_ë×ÈŒGþí,ÒžíuBŸRLfšV¨ìÄÆt–¤Þ©Þ}`%oÕ¬óïÎ 0^¼ò«G*Uaâ} _{Íô¹*h. Ìæx¾/E+_ëqÑÁ3òA¾ÛèÔ]P®§ëjóÆKbe@jºçmUž¥u3Gçó¼êfÏ î³‡†×áŒAä µ$þæiÍ÷ر›CŠ¡RÓV@—m~ñ±¨é¿áqdϰ’¨À³¬¯9+{q M•o*éƒjÊm¢ô›ÏÝP}âðÖÕyƒMÎ23úà&AKµsú8‡üï›pÚèý±mE\œOÒ{;Ý-hÁf¾j@Fù(½»ÇÔ“àV}<9æÜÅíî½AY=þ™3÷º~ç ÿö„ËÝsFkôäÉ\Ä‚ ⬬´"Ý —ñzc˜ÓˆK‘ëíÙ„ØØ:Y»?+\×ÏÒJ™B'Òy 5kÙ= H$‡ qáî‹{Ž¥ú¨4«ûQªÞÚ¯‘L»ðtýb[v-] r5 R‰y0Í—ÊWUO]/q•:âÛ1 3©±47êÀ†ø”˜@Ë…¦öuQˆMQÖ‰š1 XŽ%uÏâó¶VÆ”¡ÖU˜øæ´±³ØfÄR»2ÞÈM…hJÁu&N-ß1s `Aÿ¨€‘~H~°³Ë¥á¥èŠù I0LÈI ¾CpúQ7ý<Æ~>óßOÂÓW”Ë.ŒÆ—tð­e=ÂhH1>ÐãüÖwHÀ(™èo< „ÁžzÈÞÆ7? „§A•½ŸÏËþUÞˆ,Á‰'Ê÷¶%D?3VjTÛçM¦…G­±J{›-9ýb\¦lF¹]EéE?w×ÎÐ[µŽsTÆÇ’",pIk›í¡ø… #uª©Ü×wÈû}Wá-/C¯ˆÍœD|pYïcîÈ$µ‡¡wÔTkz %~‚¶°—D*8‘AÙD¾æÉjÞ# ‰Ì$ÀÁ™Nׄ¦„âU,ƒ=Ärbg,DäXF”óíß’fU9à§Ê Ž×¤Ï ªm³’v—ZH^okP *?oweô̵ΞZpªA=S|.´ÎþéA/òµ”Ho'£Êl¬ÏÊ<Ñï\&ÔÒæôù,ÛþBý/©ªˆ9…ËË.a*aXléqzèêÏ»öjŽC_TžþGÞÁµ‚:y1GÖ¿Y/NЃU/s7Ò/*Óáà¹[ËŽaZÖ«d„ 5ܤ]!åžY*®"m±¡<Ì•&KV&Š?öJ÷WrFøþ¦eEÞ&\pÙÒzc"•x®·Ý Yuƒj -Ü.u¶õ–Úø™“ê`Ȭö8éThx‚æ®E!WÕýÝ|C@4@1þ]i Ì?u?@?[þc…Yµò‚8Ÿ}£sÓÊÕ›Yþ|i=U߇/,@½|ü}ñ®òúÚaFR¿åh¡¯tãéAyàÛÈ7\Aü ²ÎP(›g±o®¥÷ülüýÔWyN÷&9 ¹jÑwØÎî»·O0”ÛéfâZ)Œm´d²^nSP•™§xÙ jâ Ån][ó θJ8S²Ãb¦ÅEûÏGvA¾wN¢8ªÓé¸Qsù¦Ú`ü·0žwðQ„ͨ„ÈÕáÁAvoC2·Ã 9,4îÄö}[¨Ü’‚°÷Í»ÈÈZLÆdhÆKðy°ýïJqƒy†Á útñðZCõ8êßX—n/2´!¨mq Y‰ÓFªÕh;°#p‡1͘ã–/ä@sôšÕ8S#¾ÒžÈÈÕÒa8ÌžÁVøù.µyË4lQY²ô×`Å+¥ßÀ“.´ÂXé¿yAÀÌXÙ¾ZŒ|pS&æ{³IWxàÒ$w›*˜Û£òà¢ÕÚ7"ÓdÏXˆžéósÚú»¢àbxÖ ’ ’$(*.4@)®ÔŠ×:Q?G¿I‚ø­Y˜ËŸ­ ÛRò,ǤŒ†•‰Ñ#;Ù™’µI â½b»¦„ ;ƒ¾ÝæÆë¯r¦Œ|6˜óo¯‰¨AǨ–ð…{fU¢`Hq÷7(¶ü#kv,T®uàŒSC‹|À^ª^¦òÒ@ '¾­ùìÁ©v1µ¤ò’{œ²î‚V¸)…ö)ʲMìŸ)QÙhÞńċW¶,R¡™°ð:áâQ<ŠxäÒÑAÚš ¿Iã5DʡϮû™vÌ/.x\°<•(ÝijŸÙŽ-Õ~œ‹Ò±ÿ¼–º*}åÿI1wu0Ü8¼}IxLRG~b^ÞÑHÈáO€à©êNªÛ zÑÉúDÍ}Ç÷O¯ÒÊèÅG…hü sŸ=¾µi. ݰÈ|ŠßsQ0‘‡äuO\þ:éáå#¨¶ºó{޳nŒ‚Ýý܃HÇ Íç“ Oú— oºHúº©1³RTáhéSTKzb}-wà€—Eåñò"°¦ÊÜJ–¿¯#3GaFõ2$°4?ŽÀ‚w=ÅuºØ}ýÊå}.Æœ§Fè ³Ï«KXJœ"êÿïÄ£‰±M_4ŠnsòÀ2@0%*hÔçÞ‰±oT‚Ü ä/þ¯æ¸DàŽ å‘eÊ¥íä²{%ÿµo®½c²åN€fÕù•l½lý’¹Kîºø6Ïqá™°°ËµšG4›BÃuvòÖ]yv‡ $lŸE(‰T?d?çÈÊhy2 þP´?E1÷( X?nKêïW¤Ó¿ŽõŽ•ñ9’(¯/ýY¼3»‚$"!.š`«pýSLÍuŸ6RÆ‹®•ýÈÛGD4 >5f,ž)^»p•Òy‰+Ú>*HQ»kP^/3RvòÙ:ͺâì:°"^ò"Œôј¯hsK¶ ÚûF½îÓšðD¿ÇƲ|XDzKÂ!þ§eÈX ƒ)b°4²ü…‡[1Ç¡rÂ]×Å{ãÀ„GUÀ†ÎÓ´á5ˆóåíWÄ`*"Ò R¾¯?Î;¯…}AÃdËyƒeJÌÜmŒóÞ¢‚A\WÖ~G5œÞf7ù¿?ñß›@C䆶G’˜ÖÖ­@D²Z©=èí`¦ wäß”ª6ÅÌä—ŠVƒÀ]P Ó­{ppt ù): Klô˜¢¦>C‘`Â^((MìZ3Mj%~êj´¨/£òÍšßí1y·\G¨Maa™Ïz1—/[K{ø1jÛÆ8ƒRµ,Ï|Re†ÛvàêKJµ´mˆ2 q4Yºë0"7=(‘oNZŠÊ4ëãám­¶Õì·Yh¦2§!±|âo‰Å6#:+@ûÇ:(lýy¬ÿž´ ý;ìÔçŸc¡u¨™“ÒÃфԨFÀ?Oâ. ÆèøRVÉO3ùþ8¶ÿ›ml“ˆ÷à3=0Ò0È&ßÚè]OÕ>iØ~_¼>îªß&i]%aϽ‘’¦ýãIÝ5¢ Ëᇫìd Y o'UáéDÈÓ†}ò·Â˜gKÞ¶ z‡Èkø÷“ÄÓ£T°E IühV–-3Tð4:N‘šV¥”J ̧eÇ’_¨ýXZòí` …s0•“BsËŒXAIŽão_Zyhu¼£šá!À°NZ^Ÿ„"9.cç4Iè='ÉL±©3f@-·ßT­«‰³+²Úc«EÐDdCCö°åÄe‡ÍÛÓe„vJ^Þ’uV=ÆC›´Ï!Å,‡-fßÔR½§à \˜`#A<î cîUZw0÷î«páÿ]ºBóGz+®QÎÛ(Öâôݼ/:üü›!àòXg¥¨/J*fEƒ¥fÂÐÑ–§v0•–а ¡è9Ž̆ø'Äþ2´-”ë{¥øK^Sm‘“tÐ)Gž[ÕJÍÊ!×ʪ^U.†T¦Fº;zù¬ ¦Y+]Ÿ=D Ö'õ"¼ÀèÃW³x@NJ¨ ËRËf£„á‹–‹Ý~ËFç²S쬾 ÄÐŒ60›Ùæ>l–Æëîs“ü“òÑQ[&ÞíoÀ‰–‰D,;Š“XÍ ·x¼UÐ(±î¸"²«U•Ïzp£4Ø”Jž¼ƒ0.`ôÉyÖÊ„xáQDd¹cùpù2¼á~ãßiJëâ*p2_¶~%n@Dga€e:ÀBÉæ³®›4}”š—Ó|k–‘’XwQkÉÉ3ÌŽ ­˜*¸€#æ“\ûüµÞˆ)aqRúáQŠÇ_‹IŠVî#uÚèܰ’ü5jf­a¡¢Â^âsÕôÓ8YЃ×ã\ò–4 >eoEc· ªs’² b ÿ’<_ ú¸Ã¡„†®ã{¬VIÛ—.42²]#æØ †«¹öÑëðk×L[?ŠLZ¨ïfî¼Ä7¥ÌAëCAï릮ßmnßbåÃGH‘ïæcìSÔÊÍÈŒ’súaŸà‹ÝA×@óæ)/¬¡qR³ó‹k(ï©Ýâpüæ ÏzÁI‡6«=Ób@ Iòèê*‡ßb 'H£G[ÍíVérV^HÒ7QúDšPxê§¢mÓåáGrDV£pè! &ïl“Ô@+¸ìÅ1dò™.•*‰ó,ºf;Èä#n3õ6Þ»Jû@µ¾ã%…$ã·½†6{<,š" tŠUA¯C={vV¿þ #S—¤ÃëÒäÑ@*_¾†-úU|$ÆýQ&$ Kc¸±®uluõ™c7váÅ¥ v¤ÄŸÏ¯Ã—Ž4'fGs\<èö˜^zyU î»En£›ÃŠ]‰4J´7û½üªé)ÜÞUÓæï”T0åXv° ªT ª£!‡^þ°±FõOÉʱIkwæ˜z¡=ûÝž]ç³Áê,KNQ‚§p1óm¦/øm,(£G„’ż¯Ñ‡ù«|=Z$N@Ë­NÅõ„Þõã”í­¿ œZ¬5•¤5²Èoº±rp_ô–û@­¾Ç¤¹Ok êœ&`³$Eo6¬at¸â·GÓ…ýgFÄŸôËž‘ä7.B¢RóÅyÏ1™ßbî½@¬&dtÌée%?R54]«µc©½IT·Ô>ÍcÓä¡zQÚÖnÈɉ R´  vã-WÚº"zµ‰’¾†ÖgqAØd›ç„zÉA‘nìoÀÊmoèjB,µõº¬éó–›5ΩÓ-RÜ?Ë÷ ¶C‰Ð}†ÅxfÛ²÷ÙÚéu]b/µ°î?^ÓX+R¡WløNBÜòì…I”Oy®ìs—‘}I›IÒì´³D‚ùè˜ÔèG¼È¹p§¹xå_þ êñ—"—p9ài°!ø~1¥¤<è_•Ójɶ-`Y-Rܾ^tQÈ Úûé@Àϳ#Ý~%)Å&Þ—{®Î9ÑœF×G8+ŸÝ:Ç‘n“qô™qH²~ŸMÄ—áêÕ(l« NOj…ðàÅ2— Ó™)r;v1‡ß"Ù§_QLœøŽ!P^è‰W Å–&sƒ™ég°`ê5«ÿ$ D‚y½ˆA)­]tÞÓÿwSìÐæ³«pÀé@D§¥’àzP è4ن탲ÝoŽp>7å¥åŠB—’µýžê±Œ6ý̯?k¶Õ7ñ™17޲dÛ²"ù…“p¡—ŸÅì|‡›÷عãpã™Å„,·‡ Ÿù­á+À´®¦Å¹Ç({U0ÈNÁìñÓ—ÞÀË»$yeiò'ßü‰*9§Fw®·@Ç=­Îr/ˆ Þô€^¼vÞ\ú?Ƭ±b®tëfÇÔ˜X;Ž©ñt–>~éý™¾]0<äoEý]}ó{="–¼ÁøÝPOWˆýGy!y´0QY.7Yá«ÛFÞ5Va<1ÞC±”5}}èØ“¹ÿצbUÛ¶,G‹wyì_Žþ>“Jñ_­Q·šÇ-oGRëiX¡Ú3Õ=É{FµÁº¼‡p—!ºN¬ò-¬˜çÚK–αƘ¼Ú4;ט;á%ü±Òü*I7Tä•ÞÀlÙ†åÒq•au†'<Éàgªk‘qrâ;ƒ gjˆo«à­“)ÆŠÐô»Â‡ÄŒCã…ë á…z[óçèkRxÃyOÇQ†ë¥¹úÔiðÍæoÙH›Nߎ첗,A¢ ¤.¸Äîƒâ¯ gNªûûªqyýêÏÖgÿEÐCN¼´vL®FÌìäƒËიÈ)¢¢:¯×| 8§omªDSà D¶²"¿ØIˆ\Ä5Æ*\&Yµ×¥¬Ä‘â|Q…Ø>tú1çr¼¤4ì*Ò#…¯•;¼––&ŸŒ˜Ì` ¿ ²)‘ÄÑ7µÀ¨°L1ß{>xJÛü¶@~Žtžî20²°‚†8Û@ecÑ÷x³º®z-Ü…—ÔJ79ƒIéJÎq×Må êPá1øΣ'èMµbRðBÁ<Î[àø«ê":ùÚ=ñkõ¹òHO©¹v7Þ¶úIJbÇLLñÚaWt˜P9wòEw°¤á¡Àúrý§lÍÁá”öóÍ!BÆQ*–¸gâ2¶9)SZ'éC1á“:|­>4¿×mµ™°‰ƒfü4€*çUÓ‡ÝOÉ|¦-+õ'v™˜Ë9‘ºm>Þ¡FÀÄËØòH8=ü 3—¨@¦HðÅ¿›0~=¨£®kDw6çîDÈm#Ëà‘Î>:4Üšhþ&ß9l[ãY’uKçG>B¬~)΃ˆèërî¬A5Ý4©= ì•Ó%¦.î—÷w9Ö¥†Îëð3½Ü– âßÏ(îo'oïpû@äþuÐ)~×>ñ:öJQ·ƒç%·\@¨¿ú¾Õ¢Œ1Ñ4Ü^#_%@YæLç‚ã"ª{qè£-We› ªýnЍq£‹[—’…ÇIÃL½ê¸óÉL\òpHUôrõ›hkè>…ÎØÿ`nçT?xëšîg ³õþªóîÊÚGû¹M%>Þÿ¢d{kƒÅ‰>Ñ>™,S5N;ámóз ñKß°k×ê0¨fˆà8W.`a“®ÍA©‡Ò æ~Óê¼l߃yI"Y¦Ç*<ž Ç„›ÆdÃÛÁs`XCC-Õi¡²±Øÿý»——…>«È’/"‡¤¨rfGõ¾k0%£Rþ‘£Âz7f¥žµ´„ÆÜÇÑËDH¾—MO×ÙÜÔhlaf<ö±|°ØV–Lr¦¾ÔáËVxŽ{ŸHîv|ÿšöä7¾i¶½Ál/ÄTk¹Ùi&QPX¯AIN1í8>©†x(ßN­å†´­ø½yÄyI~"/²ç$Ææ«"ž"p¡i-2ߎL>uM¸ª¨&§›­Î`G3}IgKã:¢3³×¼S‹Ó¾'=œœ8Ì5’év;²Çµ4UÏÅÌX)ŽMëßÀDq¸ÿHÌÐÂÚþ'¥›{o?¿÷4!tF'ö€^lùR6bXÁÁßÖÆï1¸þ\#pœi»)¤ª‡ê>T E0ëÏ­™p‚bÚ 5¥6àáJz„åˆt ˆ±ì±º9<|%‰®²±ôSÓŠÄð=Øá·Råº~Ιº~QP4\œhRì€Yûý´˜K^ â)t¼ÀB¾÷q;u˜z%´u¦ ÿ’¬¬¦S'¸ÓG0a|4æÎ‚ïHƒº*Çì ^£¡` x}5?±H!ÝëåçÑHEû ,¨XŸ³ ‚âîŒ{{±$³7"=ܺ#ïÚIXþïÿúNÕÄ‚–&ýÔ,ÅdŸ´êªü'ˆeyë€Þ! Õ¶‡æ‡¬²ÆzOFØWfuOrôzc—~‰Ì(a+ñhë ¼¼"ñ¿fM#§ >áàl(`Nµ *c NŠ®R€XÂlP[£C{}`1QÕ×n ›ïØú Ó^v]A;6µŠL@¿N?ØNì!ѤbFÎ/Òd•Îù†{I@óߨwhvZþJ³¬’» E3 3£¤ç Bm^NGF!~{û')´!—/¡xøÈ\Œ+þèkê?Õ͉.2þ IP´¦ÜŠ7è_E–¥ ð¯&x·;qêÈtcÍ"*Ä£O$ Sð˜Èˆ7vY¡%3'ËöÝ„xÖ@¬³@ƒ8¦È²×Ͼ+¾½å­5¦U¥W«Ëñrðn³Šš«wA¦7³'¬C6U¾ô Ç90’b†lé+$–xö°0#׳—ÆóÙ5îßþò:q„eèJÝå£~6÷>× RÜ,‘ó<˜ÈM@„„‹·F³ Nšîg0ïoUuID7Å;¨Øæ’$œÿùF›n’°íOŒÂKì–ˆD,  d)÷²R`58Eš½P:gII*9Ä«ÀLçaw GY%ðÒ(¸!óû*Р„Må€k“`†ÜF£œÖxÎ2¼ÿÄå^D ´Áy‘7|iWx`òM!†?kØüеsÐë®QÔQv7m€q(ÒEKB¦­fº¡ ɪåØej‡Æ˜ƒFú å{AK¸ÙëÈ š’rH–ߪÓM@ó~ O§âÀî-*Úvú™¶rh%ÁV÷¸Ñ¢ ‹@ØùÒÀ[EÈô$:~c±"œ¦ãoX{N 4áBVöJ½”V8ãÌÎ׬&{ äÙ·agÛåÊ͉ÞQšÓO¾q¯ÖÑÊM„•\¨S Ç·íµ©3CŽÙÑÅ?î‰ßHô†q ͉Îùôw¶¥É(CÔèµ&¡§–M²Ûg¡ Í9ûRmüPô¢ƒs2 Ò8)pRä¸þÑú˜ú„}û'8Ü]–Zèބ«i ®k€ç–¾ ¬(ÌeM6i ø¿ŒÚ Éì‹ê$çô +îøVºaþÑ¢„Íø–õ.yì«?ÀÝC#sâ½ór“¶þâ‹e@lWpíºå Êw=‰“*#î­$P”1œóäÎ —OË´]$ÖØt7ï dïA'—F$ÒçºË &É¥èÑ9ÆS½ýßÙš‡_¦†Ú†þÝðØœn}2Û¯çÿ’¤÷zÆÒ UPMMÂÔ+EÈØŸ6Öƒ.Oˆéh÷i3?ÁF0 þE¬Ê× N–lÎ8ûù†5=×@#cðå„hÙg(ó5R§´ƒG4Zãðâ>%£°¶$#X{$Ñ-hSÚ^Ÿ ¤g!zÐÖEB u­F/”M7)˜Ï:[©O‹]:jÏšO™f~ÔQÌ7" eÞ&üøÃyá§F¿Ô=jX #&.òµb)ãý°ò6ØA{cÎÊ]¿_‘ýì-ùèÆK»œÓ‚WŠ‘v(FB@Œtvù  Â¼‘ƒq¿7À~jÅgÊáÉyM±%ó˜Óe»í5ÁËÈãl¥;­‡™$ç^¬*î÷HÂï½ÉlM½ˆBúSfôÙªâl«ûZ9gp›U¸LϪªÄV‘×%é¦)¬0çåttM—Úμ³L“_ëØˆ.²|øP%,#’Œ·$}ÚÌ:¾HdÝ|ó9мWä¿bŠ¢52ÞÛ2VNSpFÜxzM¸lk»dG –La±ÓÞP0.q˜ˆ–Ö²ÁVÏþ€åèYk*ÛZ“àB9©èóH9k>A ÿ$30K›\˜}EBª´Ü¬/Ò¦N€™Iæâ0‡"q÷|SxLþw–fÊSÏbAüQ##Ä[ݵ©ÖšHx+6îWL*€oÊE¤¬`®qeßAÿ÷é²|ê·"¡¶ø@Ò_­ ´Nî)qì§„³†‹”KóÞÙh,¿ˆe®b-"3„¦ÙJ.±}žð“°Qº¿îdän`›Û^õà7žrçs]72÷÷„3ò¬»éòòß±çŠ3U>U§gfÄiö1`del*+‹¬‰Öv«§"ýl“w˜rËP˜#BY&u%ÉóÃw)cžèÔ^‚ˆ^>;ï–êbáz;U·§EhŠF\:LÙ(_ˆ#Üog„ #zT›\ß~_£Îú÷¯Þ‚ò’ $ÒQR$àÍÌ#}ÛÁ«†e½|¤ yå¡“Ã,q=V'+æÖínÂú_ lÒªRYŸ˜xDú#dá-Iަ „/Ë7Fä?²÷IêQY¥¾ÒS»{\ûo0“ÙUÜ8y¢KÐÈ+?§°&[bñ1™‘ÏŒ²Ã˜V1×’E ƒ[GvzÅxËý\Ù?vn{óÀàWBês ãÓ5’¾(ƒ÷Ÿº,{ÓÌ×Ûfû9¸xŠ`|쿆&©k•§åÿ˜=I°(7ºf\Ð)Þ’?k†D¨ó+€Ô „t³#¯^k°‘#§Þ&øl-Çl‰jÖrNêà(z/Î]_â`ÃD[Wá0›Flhä=$^•…²Œûžp;èÕÓÏ+E T{‘DÊPúmÙ ¼@¾o8_Ã95b\!ök¶yÑ´½’ …¼öI™¢^s¾œ ó¾úó,È`‰þCcOA³ÏØšr Ø›Ü«5ãe¤ÓÑÿ8²Ï©‰{…èEè2Ë~@siŒ8ÓÝêiëžÅ!bƒ³s¶ÅJY¹5Q@¾Ê 5¬ÌÒÓÇѬlFV¡Ð¤˜þ£–õ –M]ï}®bÏØqåaIF2NHü΀2ÇÔq½ÑŽ\~|såóÎUVÜj†zä[©8<:(Ž„¬¬¿V¶#³iÒÌÿ»0Œ6x[øI‹s¶"¯â#â¡厭ØÑoZä¿/k9`8ó4â‚Ô-¢Qbb¿õŽläÿÇp*ü¦‡þæª”ÌÆ=£”}2$õÚ´"D{覫Èâ|ªþïC¦³€PˆÑ`ã®RõÞv“(†/—àfúÞüúû¹d`iÙÚ%L‚r.vŠ@A? ‘`¢Ä{ýWM©~Í Ü3ûnþ8rÓÞ0æG=›hê»ÛKo¯ÁøF_7É‘x¤Ö±'~Ëæ•rÈC ‡±;ÅlÐi7_h8·þ½†TåzzeÅÆ4Š .Ò!¢º3-§ô·i“Rxæ•ô:B'6ò´”—ÙÏÄ-ý_¶IœùW%÷·™%›Òº\zC”V¥ê¿_Èâ’’Û™ ?±(Ü4w ÓMƒ¯„€*qÉ™µÿazø)2;øÉòÔuïX²U€¨âº—Ÿ’ü±TÝ“Ú ô/œS×Ü’³Ù`X*i±Ç@|Žu‘Û£]®Ö¸yÉŸ îõõðÄC°&| tß#»ï(Ôý2ÓF²»ÞÞªµíŒc« O)úåžl½ðǷ좯š:üÑës~as!/Ðúk4ÝÂøáÞ·ZP«µR‡T/É©ú® ’ãLÐTi÷ª‹”äá>@ëZ?ùîc¿ën/F±6“ç+ñ›]X5Ö'>>ziØÿSKpJœ¾®Tjù’(Gåßs¼,˜ßÛêdÑÇ…Ñj`S>Â7ÃgïÐË À«ò6q·;†!- kižÌsàöjŽubX_Q}×UÁ-ý_3w‰pQž.LúéêõqÝ®±¾0Z˜ì Þ£{ɬòF}¿£hR¶PÄ©½+Ÿ¼Rºƒ„Â%Mµðæ¸ìFü`~æÝ^ NN“ÁH~ˆr÷¶Ÿ)÷•BŒÏ×ò ®Êh±JuI³>aä¸Ô Z€i†<Ú´¢_ éåë¹ÓămZn5~Y )–MR¬™1R­¹lÅ'û‹š(¾…©Û©íðÝ¥_¯ b/ŒçdeÿUm&9ÿƒ,£2[ ö¼µN*"Ж«  xh7^¿ªîuf“õ`ÃbÉ(º‘ŸuÛÒ¥%iÌ,¡¿\×;²*°U&'weÊy'ÅiÜl¢YJkrÿ0œŽœ†ÒÁü®Ž.ƒRñÀ½<ñ˜¼³¯«I³¡H~ÍE@sM" ××…ì;ÈXSÔøð.`"„lU)­ìœæƒ©:lhÜåsɶ3>Í?xàx“ÁmalûâÃL(p”oí—‚3cHvÄ›Óиؗ’==T"ËË,‚¶ë$9…¬Ÿ0ù}wÈ­|»~)¥>rGç­2à‰gªÈ¨ÑÞ³¿g–Û¬¹‘›^õV¡ÁÞEó[ ÉÈf7F‚5I"2¶+·»¦Ìâìyò<âÉÀÐ/DVò}võ¶h%Pz&–x;˜K‰+0r®QÏQ)ôz–0×=«¾Ëð÷þ·I¾<™›âЖÙýf£ßŠ€M’’J Ž+B¹ Íú½ ú’Á™Í°²f-r®Ñ¹w IFáÏ>þâ·,ÓD†÷ˆÌ0reM¢´l)D%¯lÉÚ±Ò§ŠLY.7!iDT ;"Êê"(6j®9š0€ËðìeÞÜhßç!œ‰a @ý©G›sø%6÷ĆsÙÄEç±·aê[ý2É_Ok4ÍÀ!1²ë²3L®´õ,¯‰×Ÿê„TpMoN¾l|dª"€"_UØò„t_)·:¹wl âÄ“óø°Yé65Mo ¥ªwÕ¡ÂãóEù’sܚ݂üÉç&•²­êæü|r -›á+,¦„3úÛ3äZ‰™²Ò¶Á¸šbæˆrʵ ÕaЃE+C‚'€Ø£içr‹ÔleH,·‚]'¾‹Š:>G›1SÈÏ>³$dÙFÊŒ8ëæ39SzúŽÅë|´N;ÃÉð!ð–T7Ë)Çî²ïa5w"¡D \AÁ —ä<¬ŽÉãI Ò¤öÿ‡b”TÐÍbv"öE'_‹YHëêÒ+3y!ŸQPSÌ<ä…jël›Wµ-8Æ!ÂÐng)í*‚¦{6¦8>G¢ør82Aë-§Xø5e¹W¼˜e*¦=2€©föþ÷6„7æê*¥Kq*UÐàEyÙê Ø%Ñ1[ eœao^g¶„¹CMŽ$¾ÆTž,ÈÞK!EÔ°œ.…ŸäæoŒ’t9ÕßT¥àÌ%l³Zf»)Å?®“ù¬$¥ðPMáÌü×O·SëD‰–ÆÙGÑ9ànji%³²‡,Ÿ2è¥,e¨O)g,ò&+>gÿ‚&&(Ø8J%È0ÍM’½7.¯#Dïé´À‹p'ÕlAüü%íŸAâbYîÀŒŸíÜX#±Ã]¾Ï†Qæ©…&5 ÷ØâøÛ0sRÚ ™' ~Ø4¤Ñˆ|´#p ¥»ˆh^€¼YvÙl)–ö/’qî6Å-ß5X“Èä9ÃÄàPòÈ¢1V—Á,ÍáÞÃcGç//Ã?Ó±ÁâS’óiQ<ÎuÞÅa·g4ÚëL§Qðh“Ò¸ÆO°?h¦DÌÎ4wƒvjȱ)feJ@’§-Êœ)&X( \JQ t¨>_Î$Iíݨ5“YÃq‰Z±AÏ.W³¢Qé‡&4—ôº¼ÚÙ×ÐÕƒøË’¼!víäfLŽ©Õ÷nÑÀ% ’ïà…§ ªòñ‘Ú1Ô»©‘²Ë×b ~þÃQü˜v^bJC0Áи˜O¸0¼vÖèUƒ»}§šséJ‹Rp°V§wÉÁÈÊjè ÙŸ∪q¬Ä©Ô‹UÑúˆa,9s;üÿ|E•Zk|9D4#|xá5Z¸Ë.½Ó&Ï¿WéQjÄrì8êm- ×¾Ë5,`ÏÕk’;kqâdôLó‰ Zݼ»ñRK.ÑbÏäŽEÏ­}äqæêá¹m%+œ¡%Þ\þÀÊu †:ùTv,$žÁL™D<L¿z>ò`Ù½.¶vQõB½ ê#i);šroŒ—¦ÇyçèŽñr#Ç´4qš'«Â³;æÝëŽ%fîiµ„¥‰kïTÎø¬·È”u#oåµC¼ë™•—×KY·}"îS‘ É©(U½C5*°Ldg˜'}ì?ŠLeÉZW¢íÑ@ĵïÙGtÅ¢•b Ò±h6¹FåY€ôÕʨ] èB ΀×%WÇÌ…/âùÜ j—ãð˲¾gò2¢¶¤ÐdOÈø™z¡ÇÕK¶ +Æ*«eº3ÑÚ+&а¼×Äăá ‡× A•9ºzË܆Dç×¹öˆ ON…;és–ÏjYåZÌóIïªÆùˆ²ÁÐѪjŸYãâyE@eƒ6É”xÈP ï„Ïh,LâcÒùè‹ ì©íïËÙB‘˜Ž¬1öTDZ•jõ+ÅA¯¦ßX{ž¡@©ÔxÃD–p Ë^ ȧ¾Š«ôÑ"Ç´\@ vž (— ™òèÊyYë`¥1,e=8˜|MÈn¾åªb$²ò‘²ó€àÔ<â‡5q™\¨> .áÍÎ ?¯sÖðBRÄÆÔimFÙ÷ùWh¼‘{"-Ö͘óX([ÌñCvÑur a%’uŒŸ3¡¡˜I1 V~¾Ýø™ŽËøX¼Å \&$þߊ£ssÓhP)™V0·ýÛÙ2êd¹Â ªRé ö.ñûžŸ¼C+Ú'èqs£¤¬ÿÑ a“Ê8-Kµ#ß,0 þ¶©Ú{å®bVÚ…±©”ÈF´;âÿµsN9ø4p¯\Z÷Rgàø¦cøkx-ú&+Õ2¡Ú¯^§yýþåÂqçn{‰îE}áíW}ø¶çç¶é E)<ÁV"É.(GÛ %ø«žŽ9a7T dD¹ŠË¦•ÂO`…ð%óê|õ>î`¥üylHnP®>q@Ë$/‚.Ži\N<œÙ4“ž<¨ÖÎïŸSòˆêÄ£Ûí—rÉ ×“aDXù‚΄ÁÑaZT\žLËQ¹–tæ™›­Ý‹ßÂpá¾ë{Å óÛ ·ù?Þ/!þ7f°>º~ê9öX¯”*8´æÅ.­“膗1[jn­6çÍÅ7³‹GÔ«%^ˆe&žk£ £ÒX×P î²ñãF®1X¨Ú ï˜ÂoY@Á‹¤éñ½¿óE­¦A4(ðÊ×ý#Ù –JpÄæÑËM“‹ìq#:àžøûµÞxö­OóÛ ˆ­ÇÅw ËÙ¡µbð Ý ƒ=aQ,b¹N*[d(Z'8¥,ßßa÷ªQ)Ý®pÜVÁ¼ÙKí„E.¨Á-Å@•íV³;o$ú¾ü3NÇÁÕ>û&G\ñ.ͧ±í¥peóÿÌgpŒ|˜Þå¢f~’ ¬—7­Í§'ôùŠÞx,âƒi•Ìa­¬% üà÷—>ŸÈ¶DRdp­w?ßhV/É]W‚x¿GÛë¿ÃÆÕoqθíkCŒuçeÇÕô±F9,ƒ»_`.BË@d5Yt;2ŒR³v§ö{*¿Ë¥²qr™L•Ä[A_îüÛ&ZaÆ!n#ð¡R/0˜§~ÙÑýSßKÞYeŠŸÓþvЪ[Ñ?pè=Q~ ®«€ûÅ¢oµ,•(H‘áâö:F‡^>+­»ö&ÀÏ´'<Š6/ ™†m뤋$ÁBÊWìr^|a#lá/Èà†L/\£ÙDìÂ`¸•šb9Hû*ìôïš>º–HÒ`@ˆÊ†üñÈЗ ‰Ñû}a¨¦–½Ÿ«¸ñÁ™ì>þ_ž6jH1Gpë, ÷ÚáÕQ±më‰nœ\ÄÀ—ØNh°Ãcb„c­s=&‘0”õ˜Uª+SüGÍc1¦êrå,ÀäÎ\EŽ«Y¤ÜûÿY†ñˬû$r¬Ñ©Ý2®õ­f?4J¨š㔇ÿæBä Aï³$&#sj 46ëý[¦[*|ä†@Jÿ›{ëz©ˆé¨Êý5hÌŽ%‹é@²[En„±å³N¾áä3÷*|ÊV8˜¹¼@i£2ù–þÓ<µ¦9R€€€Ÿ‹µ­Õ7ŽÎDŠÊ¦;|áE¦„ö«åq¥Øs Ýä®2ZÀù».p„®?–IñOFj~?&–Ñ@pÚh(Bï¿$ôö zÂ_¾9H¿9:VXúä"E{ôQ£w‡Øi¦âs“ÉíÍM}"Ë5îs¥Àþeý0â›|oÊM€QC(á@2ŒÛ3q÷c•­oj+e}Å‹ï4<µ„ MVÃ,ØNÌ£…¿í’q>‹cdjÖ0>»e8WÚàòÚ’ŸzdÜ» €"~&Ϙ®fwÿ6­bBޠ鵇›Maó€m<l‘0ªà!bºŠ!QÏd«Ëy²é£îõ«Šxh û±“{ð¾ôù‹“úüèÆ’×IÔ8sî£$€Sèî×YS·Tò?ªÈ§™w¬†â,Ÿ=­a‰Î÷_rÍÐÀRsr¾m0Üo#å±]’úK,³¨ìÒÿik(N=¬Vq>ïwàB*ž›€œwÏ+ 9 MÞé׺hD‘ ZÒ)“¼cw–¦| 27-Ë…çÓ `!+Ï Y÷<%OJJ çeÓJCN˜:%r¤À8,ú BŽ–ÚPðZ‡ ¨@Y6ü1dåð¨ÉÆE¡E¥h2 ObKÚ×T²±qk¡¢)UlIv†w¾¥R¢ìýË=œ¢Qdgñá%»+Ù¹ˆÁÆmT h°oÛ͇Nå3¦™ÖwRW¯Ar#$5ÅîMY3)ä?z¤Jµwÿ‡ T±€pùµº¿‡¥wòÎmˆ]™ŽOÝìÏó›½yÊQ‡’7ý`ß:Ç5QÆÃù_©"Y±›î¶Ñ)¤hɽì°m )U ™ßÈ­¢sþ·øao[8ÎÒϹ6'UŠî£Îkrä|æn‡µî©SJq!¸î8–i¡ ö#£ÌÏÚiÈT &J·#ÊiŸQà8§á~Í5çÜo{ laó¨µËÐ|ᙢ5w˜Ÿ’ài”î;6æóÙméùyÒžn{<ßpºç÷‚á²ï‡Q­íÜæqÙeÄ$òæa¼•2âÑ3]»·¥ž‚ê8 ^qª»Çϱ<ŒG=¢7ÿ” ƒM-©1°(¶¤Žº­´¦µDjÄ:ÔQ% ÖìwoXt2]ÃWVNP Ä¥ÊÒx, !”ƒ™žÉƒ~²ä ;gÆe€k·ð1S¹;‚@XT&œµlôß@m^;bÚö-}ßL‘[¶ÝZ†Ö¹ÔO&t„ JÅÚ„àuTB}ÓQ[chéð!Ëä‘\áá߀“ißÇ, —=ãÔ–2Oý†ùsßù­j¦å‹IŒ+Ÿü9#Ͷ ±_¦À1´×²/BуæØÏ)£DTŸdÔÐD‡™d µaúG‘3ú^ ¸˜H;`UËðçè×ß ýŒ\;$rMö[oÐjTw iX •öÜ.ÚÞé‚ÕÉ]›ËìL€LT7©Ļœ²awkLêd°;€ðó†i¤Á‰ŠÓéÍÅ#Ò¬ŸQ%tù›¬’ -e/a%³Þþß™$róÏ–Ÿû˜9]=¡cÝìH(­z¢foÿŶÇô‰7[Ùä¾e¸ÜÝ]ÆÈêi¢c•vƒëì201G^c)‹Æ_Ì토 «•¶¨Ë¿Ûâ$d·ì“Ç굆CFùS¡ÆôÚ-Í–öÎL¼;î–3‘Zßjb‡‡C<§©Ö¢±ÿø¤M6hkÖFð¬Ä@Èe¿ÞXòs àÛî{cæˆY1kNÂ(€vëe(<°¾E²Íƃ‹&UFŒ£ë£øÕ¿‰*ïHPÄ»Uh£‡=»ç,qTÐ’| 1y¹Š(ªÁS6hÙ[û¨uA47`b{ê{×úŽº(â˜X×+‹¯Ñ÷©/*Ý<‹Ö™9†â7š{ÆCØôwx A¯Äú“h^B´ çÉ|Z+Ô"TÓÔÈ tÐ:HDM4OË]Þ<ßøÇË!ý ãRèT÷Ä[0‹µ'ˆžFøÌ ¾êÑ^gaâ=|†ˆƒ™LOë‹g)‚ºýñbRÆÎ¬Çª×±èºÏo &¶:ÑBûƒš5ðÇ2ËNHÖ¡¿&먆¢È€XÇ+pêf;º±¿Ñ_TîÅ”_‹¢VAʰ,,‘ Ó&E(2ǰsfQódÀR…œ}JæÞu¬j¼*cì¤M{lÌžºKæM‡RÒö€µÇ.;v]Š;Àá?²TÜgíçî”\§êiºÊçIñó§….¸Øq!U½ƒºÇË ìüî/ÓLÌJ"Û&HHð‚Pñ†H (Þ¤#m‹Aˆ¹Ö/§x妌TBý¿‹šó×KöMQH‘Æ]»’œ{˜"6I;_ßÕï] Ì,¼ëðèí…‹{Ü´»ŸŽ°AÌ2Ù!à= 8w/í˜lË@Ç ý²Gôä§!$%Ž{9hèkHg|â1õAjŸ/,ð­Íz–JŒë¸UÑùZâ¢}`êrp){"íxYŠ‹©¨w©J×®¶bò·~»Oý÷õ¡˜fÊøû¾_ùïìߊ9Eà§™Žk«^ʘèëÄ£¶¦ ¤I¦hÀ5$Jˆ0M!o·Aû§›ðì'¿}ÖíJYHT:µÔv¤GØæ…ǽ:ˆ­„ÿ¡GÜs;ÄöuSërz&(7r%0|УQ– Œžö8tÿP,f—ñæ<­l>¾ÅÉ ]a…Jz¬Ó.»•Œ·ß q£~Äg®œóäè_¡cà o,D2ˆ¶Onôån­O9úùÁEûÐä •æK5_áç©_Jon5­“8ghÒæ«ø«Ö÷ðçÕ³DnŽ2¶À_¦ÊÈõmüWïpßî[idߨz×bFÐz6zýà­}ÂcmÎ|©ç¨Ã¼ß¾{fjYM`rX»ª€¢ºiqpáÊ4¾ìõÆ£¢ãq_Í.ܲMú¤}Jç ƒÞK/ݨޑ¿<ç\xÃ0$@±l*å4!Wž[u†B¸DMÃŒ®¥ÕõÆS­09.ki%1fWrt°ôj=ùéºå¦òÚ|!eTº19º¤|…‰ó»2ÓÑ*ÖèàMô=`îDy7²–ôb &…`“Ý´W@íï`ú)äUªeé#G|÷ŽÍìh Ÿ,”GW£ªUÿ³}r.}m¨»ÿÓª!§žr-á©Ã=øóÊ¢*9mœ‹³Cöð—4–6!8™íÀòX*¥èH"ùCKq¢Ú#4‡HnœR/Æ0\-*)Ñ%ãq\ï’Xn»fóC3¶ä뇄,6ö0éy˜tHà°¢Z‚›]*h`"$lu¿CƒTӔ囼êYƒg¡ŠeÙL[ p5D¡W™ÛϸSÇT‡ö¦7û0Ûå|^®$Á(­®Ü u›,Ç0)Æfm8 {烙ÆAÈðîôe¼Úã›É5àØæA9¯úý†¿òr2J „öFñ±â×Ïf&xÅ1œH/âw^÷Þüí»Nµ¡]kGƒ<ÜÅ¢ã¼»Ç {u¸>v­@B7V3*@1ô›`"ÅN“iÿ ØF¾ZÙ¿§<›ü>vßÝñaD‡äžÌ„VËÚ×TÖú\'nLÆxûöçfÃÀQÎS^mÖEèÂûCyüpšKÁ³cS‚IG["BöÊÖ‹g–ƌqå&¾|.rûË žJÅ&Ìý?Üy”k«ùO[XìI»}Ì´ÍêI؇@W$ îbSlëþshÔL,{Ä )‚Õ<‡µlˆ¨æÚ˼¼ƒ“›ýSEIÕÆêAî7áiWü¶¾»J–Ø uô‹BÛ¯ñÙÇ4‹êÉÏvð©½ÀoqÐt%v¹VaÓÈÈÞ¿º´çyLe€+ィrǧÏl%çÏÌ$ÿõ½ï½ZáçГš 4îðOfY¸oYd{ŽÏžUÄÄz…ÚXf6SýgïC…´‚eGWšyH陋úÐ8ôÔ Ï)Åw ¥‹Ï@›q*šG[`3±ÁÌ.&lÎ$¸.þ$ÑœJvD) ¬`- Jbh{€ýi$]nÒþáûa–LØ Ry©™ÒB9‹·týü>vNÿàO§³ÓÁt¤Žeµ‰ìÁ‹þž&j©Íê—i\‹Àª‘—ž{™o˱,Ä>û¯´Ý”MöýB`Ü.!^É„c’Å[µhø›Äàuk“Š¢^ôñ—ý=c/˜²¾Ø›F‡óÙ%€·Œ!­ú­ƒfšŸdWY²Ä¥IIᎅ Öˆ9Ðì…”æ LW‰—æÜ~þLÍ…´:ÈLîôàøÿ‘£_?ÁʼŒc¸ž RQY×e¢Œ˜¤¤¸½Õ À2‰à7›vY ̱ÔË"Š4«å)s]tVs%.¤¯¾íSž'ð‘êê%Ñ,øãÀÒpQRÍðŠC}äýBë =>ØÅøÊÄdf²·Q F.ÚðUÜe;zÞt3Äø±ÐBH8'‹F€™ »gDîñ?ûM!Ÿ ߢѯ¥ðQ¡MÝ#C¯‚WçT¹w[o,êTZh°¾†Ó9.;ÍŒ¸¹š)y± ~ÚÆ>ž„…W ìð?® Ì"b›GÞëZÇÏÙziå:Ö,§ø%n¬Ô_Ó˜>£ÝÓÉ"®`+uÚÃÿž¶~|H>k€-W%g'’^¶ˆïëCÁìPã>Ù˜±擺lâÁ7ró›v8BJ`¢Ÿ/r6#“z½m°Êê ÚC¨¢’7Xf¡ª’ôö8ÃÃ2úaþð?8rÅó0”ó3Š0mÔ^â|énù6{üî3ÆRÌÛ¥÷u  ƒñ?kûGÆ‘ýYö /ʳúÏM eñ‹U3ÃX6m^v­‰Sxõ;Eem¬ ^|™“BR2;Gv$ Ë?룎u^‘zcÄ\]änÛ=ÜþÙ jñæÀŒè‰d  Ž:´ùS7î¢òv¥z¤l]Bú»Zÿ¦ˆQ4lÇiµ½Å×!_­ñ/Žó98€¢uÙ†5®ŽLò_Üà[\kWÊ’`öoì8£ûcí<ªí ræ°ÜSó¾&ùÞàšn¦XÛd­ù]àGBŒwôR¾«×¿«¿"¹ËÇy¥'4ÀÃèON~ : ýó³²ÿ†‡É€dË%ÁT±Œko5øx3ÐÈïä {Æ ÈâÀ¨‹¸»¦RÍ¢ÒÊ<‰ðLÇUïÝàÝ/ç2ötËû²ïÿ–ù· 'ÌÁÇ„^šÚ¾áÃ@ÅŸ°âÓØóâ Åhš<¥«Äc|ǯ•\³·¶7: µ£þåÕëÆ8<¸” Ú/tq÷`{y?‘n쫃ÝÎM’».G‰²þ±¶F[½Ë ãl Á–·0 ß"ÉÅwþ"}•hU7lÊ8dRiLÃ38MºÆ­64Dë¸Íðíe¼ÔÑ'ÓÀ[?,ržèL Ó¥ Þˆ5þIè#8†Ëáxzµ@8*”¬1l.¨žè÷¥oÞ Ô…_ˆš H’¶;”ë)«Y·5ÂM_ªh×è?Yz‡Tœ±©„î±k­·½ïé`ᔃ›vng62Çè„t±HÁ'AwËžŒñOn XÛ¹¡ÇNtÊCÚžXwvš$ºß”e<ÊçlOê†:+RÙ je>DŽ츯 fP¼=g‹¤Ýì0p¼$˜;Î)ÞÚ½¬2™v¤Î—Ç3Š ®Í÷æI•,•3÷÷ÊE³]|N–܉O cªœ1@ųò=Á:ëÛ­.êÑ’¦[k¨ñ=F?¡‚7Ì™1ø£-2õ© YŽ{NQ({FûÉ h0 Ëš ’G™ÒdV)›Yv׎±oû¯tÌ#‚<631…zŒøxZÛˆÖä¨^Ì,—,TPÌTA4:7½ MÉèÿ4¼JV#F>³‹dn¢aZ.ë¯w–š¾[üZ;ÍVj£×;Wòsºßa_e~Ëð×xö­3K®Þøx?ë²eDZΤ‰z/GµqŸ”õ®$Þ¦¥…·Nøt ¸|æ…¸¨Aý2@üMq®xy8©!Cž³A?ŒA#Í/ÑS§dÛ[wAÆå¯]ñ(+‘­²H!ñ «/®’´9ç yx>þã4»¾”÷=ºj·µ@qéò–üͲÛ&ú7Y+1„-Úó€›y"©Õ-øfÎp£¸H:øXzz¶DèóÂ~lW$üѻ¥Ë˜Iá&<çA¥sÑ|QG,Ëü<”LŒÿ‰¿¤üÅ‘9HöŽâºÎi ¸ÚÇ¥VVñåaÕ‹µ  #³T­É‘ëPëD-•QǵƧ<ó Ã\ÛAM"¿@æ‰,×y¸Á¥äÒË=œ\­ ;º-Àšî!a=’ÉFç7Ç;Œ¶}—!ãy[Cóõé`Ç|³K&&(ü;¤V&ÜqWC“UÃ]½²ò€VIÖ›v#bm‘gÉ(fõØ+ðÀ>͈0Ï7†bÀš }Áí±Ü¤„qe™´¯B…« á&²èR„í¹¶§ˆ.¶ŒpXëÊNÒÑ5Z»Ñi¸øOØŒ@8ÚébÙÎI>õƒùâéîs«¦Ý@-² >ƒ£ñíÅt‘ÒA©uQN1,Bãå•wf­Éóm5|ªxx_•'χšMª3“^A–âëMðv„ˆôó‰lS/&ìá0´_®ÒQlMŸš_œ[ˆq¥{lýô§úÿ:NCÊz©«}f¢9Ë(oå|eÁ£ð¶³J Â,Å œŸwgjX_Ù i’SŸ]víË1ö÷Oê¥ÝòqŸJÄ8)8á 5ç`^ ÇéEWV(µùcóMÕ'þážÜ¡èÔ¼L¬NŽ{e 7u1OŽw*í‰õ8sª7ÎO†-ÊîpB–.ÀtMY Ý_P5— 2 oßû7Âýåù®äˆÅÏ YÎÁ·INñŒX±Äó›Ü ¸ 9Ïç„ò, ÛÆ‹ñu‡©Eo#ÑÉþÞ[Ò@6j.Öô2@VW K¿ ³o_ÝÙŽÉ?Å·ál–æU•µÕÉ[N\¥˜#º×»P¨!öB¼årc픾àÆï[0`O-P[ºõ%"áeªA”Eçì6@»Ý©]´váêÐPíÕÖ<ðÕ­–^íl%ßÙg@3–Ÿg¸zjuò¦yaH½”oŸW"ï¿)>ÂFÚRw¢a„2÷GûÇþÔ|x›hN[ãZ+e©ítaD·£Ðó'«SÿdÑ$ V1«?×x!ígåLņ¢ç˾ã]”š‘5C©Þ°Ê¬õ-”£%ˆŠrv$goŒßnŸ Þñ¬–Ø®|"˜õ»¹A{‘ ãÌ Ô:&Þ%¢Ö÷Çi¨×‡nzÔ{3ìZeM,ŸFs„ý÷EØl›nA­ÿ¾‘»—À¤%"Ó”³¸ï«'ÐúkåCá4E8ë–m/Ü$À îY$Ç5ÜWm x±g$â5{¨Ýû‡10TÞí Êaò˜®Û-š'‹Íìä7ôã7eéÚ=Ý-Åv›[U· >žÑ¼$Â9a饵á‚a)p-àWκݓu8ß9ݪ’¢OïdCqpÕ¬º¥‰‡f­_Û&'º¸Ù¦¾é‚hâ{ͨ;w’u;e6ËöE‘V¥g¸„f¢·g"êÐ`ºN7¡8œ¿=þå.ÐÄõ{Ø+ô˜“O_J‹†bÄР¾ÁÉh|6f¢!rª¤øxóùcþóC%ïà D‡…«ÆŸÁ7r#Šýª!T •Ì-¡žoûÜÆöqƒ»¤ Ò’&%.š`§²ÜzϸBCz&¥“㱫Ò]ÖærœàQ¬Mƒ‘º<(s¥Uö»Ôt“%¨°ìÓ ¡+ ¥¢ª{MTB87´ƒ=’l²ŽúG–t7LLjAâ·®ï"!ŽN\T²‡r¨ÎM×ÑI–O<ä¯ÀP nƒï]¥ËgBn+P\é›ãTsK|†?Dª,[Ô÷Q¿‚O%sñe@Oú+Î]{êÿýí1ã]2 —®CË™xJ|…Ò¤–ÂôpoýëKÇo£_ÌE?9xÚÈ íÔÿËøQ_œÔû¼›š dÔ\ÛíÃÌ7ÛZÎ2ÊÔ?o¥ê VX”Ô,@ƒ¿HY8œ™í¿Ö¨_¼îçÓýôF$’KëWó:†›º‡žbô‹CTåÒÿ¥«Ç´œ†¡FÅÍXÚD"5~€¹­~¡È÷¼Ó1?:e}ÐYTþÚ }W6ZXôj›ŠŽ7jñƒ#Æ çÆæú‘|:?°¡Xy¼„2±gòâ›·(­ICìÇIÕ£|‚õ¦<P΂Ý<—íëb¼pŠ\Nõ8ºUÌàË[u÷s@…ꇦk¯Ç|R biÝùͤ¦Ñ¦!pœn>§y¬ð¾fœiû«½XSì0æÎµÍ¯Šª\jÊQý¤‰¨,î)NO‡Lsy›7ªtÈÐј/Ñ7¿©6’ú鸌hð¤c¾bÂæ§JoåéMÂK„7r.®ç&8ÁVš:QyíqÇ9a¿^ÅÔÕ™jâÀ7á¶/l ÞöEbŠoúÏ,IYëO—Xcè¡ nëHW÷1IC“›å"]x,æ·ÄSÈ^Ù·$@ µ5v˜D½.íË{^øÏ‰Zõã~SOŒQ¶‚´¾Îx.ý|ï€@AršBX P—E®² “ã”ý×ÔH¢ üÕ€¶L~•z«ß ³ÀqPºÌNï>”òVQì²l£–%°T0Mõˆç˜‘H¾MO,4•k³Ò0‚2é (ÞèTëNÙ>Óq1ÃÕUCÖœaÈ'ç ËÊÊ‚©ÕÖOdÖ?ð_Ú±Î3JÅKdxŽÝÔ®  …dÃr¡@‘Ƀæä7›e›ªµxéÝö1|û»îR0D÷°±éZ+3 år÷Jïmj eožyãbœ{Nú¦*±É«\sɦþÉe¦E7ÇŒŽè4üß±´¨÷2ÿòí#Ç1ý‹5øåÃäLX±€RÍÄÞ\(‹Z¢š*æqÞ 2زô&FÐIFŽl*·S¤•-_ßz¸ùØ3 úÏ·£ž ¼HÔ²UÖ Nü™àŸóÊ–}zÓecY ’qΪ ßq,îßaù÷³ïaËKì7œÈÖ›Ùˆ„e’qÊ\6Õ‘lzƒ7w`,6ìºê( òÂá^ñYnÖaW ø¥ü.íU\ãKX¨D"qËÿß#cuÞ.’‚à"ÉPÐé5êûÎLÉL‚Ek-ßr+ê’.z·>YñÜšIWB5 ±&ÜþˆÇ\Y~"MË]ƒ#‘ 烼EnpZT"vÛŠœWN» ƒl¥ñ/,¬æÈеù×Ú5´‚pœVN±=uÛ½g´©†ö•ÎRbÜæ¨Ókèg«X>hú«ïEÊ„!µÞÔÍ;U4óo/0‘1hîÖ@¡“*Dô¥ãrâ:Z\žyîç )@B½Õ³@@(eÕΠ6)ë_l1—Öoܺø& ®O¼@Yjí®^&ìg+‚L&ëp‡ /ð¿tr;ud8 ¥SŒ*µ ®šÞëk²g§FìD Q¶÷¤‰ºÄa…ýyLh LÝLìRNvGCk#PAÆ€k¾G{$À9É&átdäxd”poEÊSÁ€Kn¤<âêœÉQ›<9]ºnÚo•Z¯Ý î ›œ1ì|ÆvM™ÑÍãë%6B ¡VÚ¾î¢À9ê›\V˜çE\uí!LÈ4óÜÚ'âð˜Ù¡7WõIbé½”÷™—Ûƒb˜.?ÖÌ]B{ja|…&ö¤À¢3ƒ"Ηd™Â…½˜ª~Ó¿º„±Rã2ìtÓqÁ%b0¥ÃóCdÞÒÂù’: @GO¡—y•¦nRË <[¬|{Qm¥íùzꬢ¤ûôÐkhB|Ù“ûQÂm‹f6¾±àêbƒ~Œ@Ñ)’înÞuÚgLA• ±B¡Æö ðÕ—·?ƒ¿†Â&èÕ'õ©è¿ûGÕ©êp¡WŸÛ­h“™IoøZQî&'1@‘UÕà(éž°*ËäÈG—õÓ><À5ÂÔtg£ºáPc‹~[ƒ'%„oÞ[«Ü¸ÁÔ/D”2 kåÍÁ…cB®ÑyòjÝò§6m’uäªhÿv5ÑN”톿 ƒ.¸¦4±«K¡™KÒ¬àS:ùC¬_ú#‡Âµ€®£»7ÓxÎÐ  %éþhÞxû4ök-EŸˆüF°7=!_Ėk‰bÑ5Wô!†º*;R¶ë›Ò¥î.ŸÒù mg\dÜ{“ZÚ ”trejœ¯™¹ŠK@µ#]‰8ö…Ù·ŒïãvÃPÙŽî4w`Ö›$?Õ„ͳul®Ÿû¬ø_Sc±)`ô0}þT¯n?FwU¹Ótý*éϵXî*iÃÀŽLGëœQY6¤Â@l9“ž¡:7Ô܆d@TÓEÐÇ•ý©mÈÏŠ¾TŠi!€5Oàm½ ü ¼Ê€?Âï`ý»ÃíáêæÄÜØ^tR¢gÕj$—iHÌ)?rø¦ ZKŠwtK2\R@ŠcBñF%ïÁ•—Ñv##9YÐçµSË®l^ä© Ðv# `÷YýqI{}cˇ¨tŶµùÓ{ß?)¥Ù¨ä4 Nц½Ú*¦|– ø(EylUëÄSËÐÊh¸«Wto’µúų°bfÇX›rŸý×uµ¢Šhç>>Ërñ°«Âš&dç{!Úù*¼Il h/øÄ’žmöl°ˆiR7ë Ç'‹ûæ{Ÿ5šOÜnxš-r÷w#õuˆ†½ÜMÊ ®…Î3eu®bÓf‚:ùÕ#kmÒ[š1 ñ±„ª¨œ t06¸b:qÕ¨d©Ë»×lüs¨˜Qyƒú8Îå.ó$„äæ{ÍùÁƒ[vüÙ~5•"Ë¢³º@ØXþ‘ršÃT\¸†Nžä¬Wfì>Ô_¨žÛƒ)¬Slý”äQ¬Rip¸Âžâz³Ÿ²O×ÄI¿k…Oâkùc£èO²íGáŵªTe÷÷=êS!¸]ž\ÐHE|sÐåËŸÓ ôSÞwÎìí(ܹm „õKŒElpsãů$Æ!˜ô©PU2`ª”ŸzkÃȯ¤›ô-êë…ZWn€ÁÞn–O¾ÎÿÙ?°ÇÝ K¬×{Ïê©æ6“ÛDÄÚû3åíHŠRæ‰dàÿ\ùFœžW” °\('I3¸´›BVÂZ&Û9n¢W @/X8ºwò•Á§Q1x »oíÈZc._e£ÚžuŠÿPAdËã´©[<‡såµ´ýZûN– ßr¶+'•.جC·…ü¸¤"²£ÝyUÙ6'>¾õÕÐ/‚‹Ÿ—ß.r3¼¤/ùrËCL~±V]´¥:þIè„KÅÉ;óç^€T~î+ê`åE®2/!tíäçóùV¾4ê¬ozá¾û_¾)2ôlï;D /ÚFR÷6„ØE63R4–@¦ gxN­ë ±œ·!™é2cXþ¦”ÊåhZOZo^æ-à h½#"HÄ2üí“Ú™² \S\rN^C4ãoµS\3^¡¬ê7ÌÃJ±|Ñ/ëÅDt´W¡Ã'«¶ ~Ë+-.›L¾¥Ü2óâöôÈchXyÈÁ¨e›T†°=‚}>ÊyYÜŠÇÊÙ­w­—ý6m¸qÙØâ•µ G¶à·%YyÐ`vý,Ê’¹Ù"ZÊô|èü”øwµV:!^a5-¸§zJÿ¨aŽrìuâ&xbÅt};ĦàTË”(z.ibOÆ”–ÒV~Ï÷ºÝ&>'A[Bë²&t@·^qóäÔçvWŒ¡Ý×ÊÔ·ýŸoÖ¹‘ˆLˆÛŒ Bpívùx´†j%®Zq£ÔçÖASéŠþÏ\"˜¯³21ø^µ^}r±ªëršé³>ÌJÆ¥À}ûø<牀®_–JUÍíj³LPÿ%„r½nˆûÉÆüØc=⾜ƒŸ6ÃÛv ôc5úÑ* vº0(ª«¥HJ9ès³%º‰ _ÚÐt6ßÒ骗ý®Ç,²–­¾›µÎЮ‹¥Ï…¥9ç´¾æ’Â_ÎÔŒŒ¶õÞWþ4!­·CzuØþ\FØæ²6`óX"ÉžûÀýŠ *Ó[‡1>õàÿ¹@~~WÇøÂS•Ç9ý­YݣЕ‘{ÜÌÀË%¼P¿f¹øgeµ! yw‚ÿ „›è÷û+‘VM_ûÓF¨¸OM’€ðò~Œ t;ȃ8ò ôö>Ö[cqÒ* &m¸ÖŠ¡U¼wwäGúöŽÞ¡<.™iì”c¤Óêk¨k",þj)TÙW9Ôö+¡êcp’qŽÁiǼœ×ÄqY–ÇÜb4EÓ•ê*\ÞaG ᇩc}#`Z)/˜Á~#½Ñs‚ŠZšEZr±ÀµüÒU‡¸ùÁOmŽ©†‡·¦,‹ˆã? :ÍÞ±&`qѹžt¨RŸØž—z'âü< ] ¸IPYØL«êŽ€RgÇýxW?(” ,¾(ÝIÕG#‹ÃÙ©Ó´Úm?÷5ëPv“ç%"‘ÝãEæáùßø‘²µ΂P÷>26œ» « ïëi3Z)“<8?bX0;ÃÇØ¶KÑ•3—þ‡‚À'—dªÑ§Š„HÚ¤;‚÷U5ŸìlŸ¡—0™^öz2Z÷œ'ÔØð¶¿„f*±­ùð ……´ç&’VMð¦CÕ“ŒìP;ôi÷¦:w„ß%^D²®JÞU0†µ:<®Qp4ŠÆ„ ÏÀКž í¥,c颵tÞ†ŸYHs¼”¬î³þ‘‡§åñLa¦²ÇéÍ¢¢ïG›j­¸ZX“¿ÐưÓ8ò”ö.Uqèú†’ðÝeC*ÆÁ 4Õ¦©tgS[<«!¸>RàgÕ½wuT²üG_@ 4ëº}·,µI&¹ȵPˆnS­éö‡E¾øíüú¯²%Æ;tü€ ‰;*ÄÔƒÂßJIAŒŸ½ßŽ Q͘¢ 3ûÒq¿‰Ïnlå_YÀw{Û=BÅ^¾õjŠ z$ké"‰ð[}mõÉ?êæ7÷¢ÝvPR­ùœ'söa[î/ÍŠ„Ç›þhb:úqPùµ÷gÓGb\"«ÓBÀÊá žÛ¹î¾¨‡Ù¾•[wrðrsJïg¡_}t“$iš!5Öübu¦ÁÖɰ?(ºz#¬Jlaªå*E]âü;Ü{¬Aë«Ü÷yMV7°T÷Ó¶Úû·Gl«E756žÑß²õ°„Fë\ÈUÔÇœëC8<–¥å'w–ïsýÍû,ñ@Ç Í«ÇQì¼[¡MŠ|ÏÑÐg¹|ýçöBS|ë:álÃô“$RXfuCLæXQ§²<'ìÉU³ÌþˆûR£¡JÔ-$܈Êþ=§ìÌe{F‰55ë„P{íH;iŲ>#½µÙµ]ZŒ–uÛÿþÑåážH/¬GÔqJÄÀ!ZIÃ$þžyî¢x̺Úc+Ø«„$ §,Ϫ¢¬£8É—2”\'ÓmšVíúü‡Å´¬°‡·WSL‘@•¯²Ð2^³•­)[w\Ã=È%³7”°C _êF}’lÌÕü¡8ÉWk3¯àQ¤o†’ôó%¿I¦‘¡™è3"ô˜‡ ÂSБõ\­AÆfV‹Ä|8ŒKw¨ø„öþ9ô$MsÌo"|ö~l7˜´„zû{T™"(’ò4 œAèír Y&bØxýë•Í„Kê;—PñÁ‚òàvWK_¨$DB³¦,œç×€®-pÐ3ø$±V’1™ ;`{ß¡Ùzà ¦N^¡âÉZ7t7-åM»‚£¥â–º÷K¤h­KƒâéZIÉ6NÔo–È*ÆvA“à%dJ÷²ßÚ­fciMC¢Y•­ñù6ä®v¾î$s»|ù‚¹v«¬Ÿ½ì)ÝarÚeÆaøÿÐj²kýÿ?Û2UOQ¨· ¸kÛ ÑOš {õ ©Ò¨ÿq:ÿBŠATfõ»ˆøÏšâ’kƒÿ’á!Ÿª$ DqA{ZJÊù²ÐÌH‹'%È]|ßüál ˯†C aMæ xu:*R5ˆ½ô%Þ±Âo .ÞËA¶ñÔ[™ýJy3u5Áþ£ƒÊæ¡6òc¢æ±3»Z{÷G˜U{ãË–vc¢?öÞGá0ßx °ËRMDÎê?êÍ.$NÚʸ÷±A†…M0SVå¥5E4Í$©²?ãèJ­ ÅG8[¥ÿˆEc‡-îg7 [þ¶µ·Â8v®.3BŸý-ó–r»ÅLjþM@ö–‘Ç'ùÞ„ß;•ⵑ4@W"fw¸³*cG254]¦ 떙Ь¶æxsëFžÙfW¿†Ë˜ò•ô†b¼™~:6°ü pr _Q‡2ÕøS­8ƒx-…à'Ìb&ó¥Ô΄¾Ô«] vŠÀÉ:"HtGõ? žÒÈøR«á2¡ªµ}ÌŠÀ«åŸÍÏ>œn\Cc¿Ÿé#J”eƒLªé¯xc$Èu}UTÜÀ9 TŠ×ó!Pp^l:}Y¹x‘· S¼%Üæãò÷ù¼©ŽÆvõRdÁPÉé «=z´BFÈj¦‚èUϋܮ§¼F¼töpíõeíÌ?âHUïþc ôÜâRÚ"NÅ;õûàn—• ñƇõ±í¾Ç\D@¸í‹3TŰÆ;vÝoQæÞèäDüXG„Úà§ó#=ÄDG>‰•êç³àRGzIØ0 ˰©1ä™w$‘ßqÀh‰¢ƒ?™áU<0ÖrÑïü°ä”·«f–ïûgB’VÈ‘ŽfóD jTp¤µ­ưwW´2À®Ô:ƒAîD÷×÷’»ä} ª múøu\¯ÖÌñqJ†Î;…‰gQ‹F›`XqçK?šÓ®/*Ì '~¯qÌbÞ Ég—÷Ü,pÆÕ~å-°=oN¶&ñžrä‹ùpòìA²nÃÒ7á« yÙÍGkôž³s+—à¡#‡`\«cN%JÆM å±W'ï~Ze©¦ÆäUª»´=N­*9¥ÿã®xdN2›×Ã?¹v'Š*„ J4ùÙÆàÁ÷uwd0 ¶µIôɵ[-襓kI( ƾu,̹4§0UPÑJÑä—ïŒÙ€Á=—:¼ÑÝΪó˜LÇ}AùA7¨ãe:NnbnôààqÑØo¡¯ú¨ƒRê‘"º/Í’.“_¡8€H K+bBú––YƒŽ4\~ÐÞþç°æ_ƒ)…œ½ÿm©»Ø>H\áj¿ªÆð×ñó·3=2&LÈ;î´åÆ“ï®kf|Çš‘ÑA‚2.áô6—¸±Ar®€å÷§š:x¦ Ÿº#8ÜíÀYî­ó_åTÝ®‚ðdoòXΫZt6å`À"†°«®®ä¿wÊ–¯>ü1Þˆ=¢dòϼ„Wó# 6ºm9Q£ìî1;š¼†îTð¶á5SPÈ"æö?»1WD¼òë ã`ò·ó胓«ùÆ/…4‚îˆXøæ­ 2Ç<í1Fv,g®[ï‘ì4¶ÉŽâ ÓO†)ˆÎ-¢¾°Ù# î³­i_A¯o—B¯.–¯²¡)uü0(ke ¯lU¸â1ŽI<’+öñ]ZÇû1ŒU2¢§EÐð9È[Z4ĬÈÔ+­6;'å¾€HÄõÂzáX„u£Ü8$º)©Èeª¬B‚%)ÅFå” ·IÙŸ.&8 £ëkçd7¡Q|5E…·mI.Å›íÞþ‚y&XjKì H»ð:›‹YOÑ$˜ÓWTégx4F_§½€gè{œ2O/~&õj­ëªbhÖôQ¿ë×r™WÛo‹^ý#>*cúqHI:Êð’ö,)bzr•HF Ø»§Š±Lgb_Äú¸ €ç+( û%OìYMØZØ¥›ïÖQ/#´OîMoʇ3thw÷ñTŒm”×ýSÓ‹’Ñ R„2I\$Sò£&ÆJZvû—ÃÔÕôꆳ‚ôJ>†ó®ú·Z®Æ¡'Zs¨#@ÆÜ+~¯¶ž7o¨G'°ø=:'Àz¦ø b…WÅV>„Ò`ý=øçð,ö7(¶ü:!ó“S%¦‚]š´}€>9þQI⢷omÑT°Æ‚.zHކ™5,:-P’Ä,©ã¤³‰Ù‘¯âpo°9¨IÇǯé>J9p¯ziÄoì¦\ñ½ºÖó´¬W¢o+‹}B m =E¸. Á "‡u9.%ü<»·î³ýÊ1¢¨}*ú–F’Èn pµÔ‰L.ê.=pä‰g¥é,V>ÛíÕ«€Y(Àd™‘IÀwÜ%}¼ûeeLRáÎW]§êZ™ð?j,ÈœC¹—I:*(Øãy‰R‘§’V¶Åe¡s¥8µ„HH&u·Äûù¼‹w>j\°;ü.#NQöí&CeÚ™ï9\u³‰0í¹™FYXóÚ´RJ~̆¹ íƒÌ’¿Ë¨=[Ðõ R¥Om ± \Ã…1zÙYmZÄú­Éï8ubJŠ™/Ñ1fL‹ÀæKQBÃÙÂrñ¿2!y>¾ëhývûýÇ«‘eŒ‚ÿ'ýw„%Äþ~çvìö*Õ N»kÇ„M~ãÊÁ ðK?t¹×ѺØRáîpånk@7‘Á­¥ò×a'Cà Î)†R_ÒúL]ˆW †ô²Ïਢíº3]«d d¼ä&¹V}œâCŒ´5¸?BA‚·jÌ3ʶÎ$Äeæ¼Àx7½ùœX ¼áÖ h ’ntÕ»7Ι—?LF|JýÈž:"Š¡J¢®ÆŒv¤u”&íFˆÒo-˜ƒ"œáS±u´Y‰´ê`êÑ€UÖ˜5É?¹,­ËH×ï 9þ_F/ðgû䙇wÑ%‘B´˜QµxÑh=éê¯n—:Jòå¬òF¢ê©\á/MÛ´XI­ ¹)8q¬aˆòîÊ©@óâ=#‚ û¶Ñ|"Ú?жOt ×„R9óezÏîx€Ý´ª~¥ñdÛl#ö²¨úvÞ–µ·{ ;®!±‹@­‹*¢ãP¦Øã;P17” ‰Å^Ë@* mÐ’«ð&Ž¥”`ß!´­¼šQGm uTp¤×@‡F»Ž¸,…;?£óCÒ<×X˜Ö öì–õXôrÁ¥Ï¿‰ïQ&‡àOƒþT–8­ÁZäËùØYmŒ&‚xl%n¸ISfpú•¶{\òwe²¦C[…D1†7ÇõOˆ7¼Â2t^@­oûžýÇ}p×ωbI"x•HOÈ´+ŠìÏ=É+4|Jª`ÃÂõÎg÷î`Tê/U\ÚƒìYÖœ^Ý´c‡q׉ŰMÝ¥všN‚Òšqlẹ÷ÌyÓÔRÞŸ“DÃ] @ù<ž†>ÌÃí fú7*ÆÅªÆ$¦´ãHô ÀűŠø<÷ÙzNµÜÕYË$ƒ¯#ìï”/†×7²QH¦häAœÁãä}ÙNŒ€<•0OÀ}tÞÙ8e×79ù—ÜÛý_Né·â–Z;é9v~&Øv-<Ï…¸#v6ØÞÏ/Ñ7ÈÌÒq龯((kô1©òô‡¼MVµ‡Z&ÜŽª`&†a<¡¼Á“Wôˆ•µ'K.”-2ÇkuNôýÈcK„¤þ7Ö¿…Wˆýˆñƒà¾é—Ï4ò-žÑb̧æü±{ݦٚ°}1|'Kÿ!š™:aлT2½’pQÙîz„ÌɸæéYÔâc ŸßS¾nù£»c÷6¼~ÍRûfHÜ{lÃ¥ÀtÌîÖÈÿÄiœU*§É¡ú×,ÿ$˜ÍnB.ŽeЬºwhı,=}bÿ´&¨;\–vÍ•ÁŒ[!ØðÙ#j|ù}à9ùlÿĤšg?MÁ¢+\󂇇%>m% :sõ¬c ±j2ó-©$¼*#OÂÏKy M£ÊàuCÈHý'·ÒJO€gAà`áfKî¼h+>8„†ÈùnvqÄÀ×Ë h,%¹y}MòÛ/¡Ÿ¬4û}F í¬£uü tVÓ¹²"âøZçÝ#‰Y(¢Å ÅVï}¯¹ÇojaºeLJ\´ù†xÙ×÷T•›’­£°- ¾Ð}½»iЂMúÊ,ÁQLUu‹Ž7îg”n5Ö„ÖhçŒø‰1êÏÓíÔûnnŸüL ŒÝ¡kØ™ÒËR¿ ÍmÊÿs+[GxÃˆÄ ì7NÍÝàÕ=¦(Qп&À*‡X1§"`•—§œWØNQÑÕ¿‡Ïú5Ë9«Û£% žm#r8¸k Ã(TZØ f=íè­¦›ÖÕðÒÓË4r2/Є)„2— tø’²ÿ¤å<Ú#N¡’då\Á¿âל.ÏÌžÿ€2‹5…VãÏñ. ›ÓÑ%ÑåG™wD##Æ!LW5C:ƃ[2$ýA '·Ž¾×X¾¤z;õøž,kF!®m÷•°YóðÅBß³Í2¸xuÜ¡™oìWD)bpû“'h0e;çOjv¡©¸Eʯ—œci;xH/âÅÑòŽ•@½Œ_áqE`Ga”þOuíŸúw¯þ½€ªÙÄ`§¬C+#ƒ>|,•±ð7}}@ (ÿ¡ÜÊÃ*+ÄçBmmÕÒ„ÇÙ…ÐòiØÝ J#(Ž•èà…ýÈÓ¢ÿˆÓ;¼*fÐ>=ÿ˜ØÛ¬(ñƬ…N;^·ª'§Ç‘Ç8 â"dhš™?ÌÕŠo¶0£ ]j·HÜÆ#Z¶Íú²ÈÝbNa@µx$BÚ<ç^3­õ¡OQ(À‹†j„š1k,¯ED\Á€¹Ò¼-˜iaàT­3—(ÉNV¦çá%©¸•¡,lî‰"‡ @•‡$â³)8ôK^t"ù´–ä´^gs$ÞDÏpÕS~¯Iׇò¤ð~öŒ¬4ìâËþòÏ6´©] (¸&ߨò›^Ù_Ša ?¦MÍî;™Íž¼®#²>¥¯’e#´§m!aœu<òøÌ­œAÎÜR{cÿ}·{àÄÖví…mºqLTï<ƒ,3üt [X Øä.Ç.¢n´éü톡í¼ŽŒ\ªzª„ ƒì‚ù±>ÃJé¾Âó(Z"ü\³Ê­~F; ¸xÜ!ýÀå¤Å<"F ¢€@›¹kpf–Ž sv]1nªg¶“Ê<…AÌâ•>ù)ð6z¬_ðòk#.+d2ðZê嬉So·¢•Ú/×{E‰Ò(  Â0Æ)¶p¡ÏøáäÑŒ¤?> ÷Z)öV8¹öòο} abë5ì‚hOB¨e& Š?–Ó´[,`÷üM6"¤ó‹GƒÜWåRND«ÑtP½7–»-L¦Û²éÊ«²ÈÚ×Í|Ãh0¶ˆìº–Hó…ªðüùœƒÀVÁk({_Ç æbå‰Í•±Ã© Õöà;‹(‡36Æ9Åv¯˜À%{s墭žw± úbóÃâôíþpÀÃI¿as¬”Þ†pa;S]Ù×Å”À”ðŠí8;£·oäÜç‰õ£ZeêG[Aptò)V½/lÍ) gÙß” N€ÇS0öîa`+]š·Î…þ‹ÖRyf&bK·Í÷×i”:GÂ@BGl 2Rkr_à:¬ûZ{Ý@€:"†œp©ùBå;1ë{ÙúÑá†î8æÎHßþ4ö“C¶ƒ'WÅ€à¶aNÜY& ôÍ@²¼æœP†=g¬mküG?*àî·ÝIêíä¥÷ï­ø…y2ãI-ã¨YëÔHþ‰·î€êãT‚¨íru%ÐϹáT)Ïl§ÙÈ ìK2z’Â@`L¿°¢Âa¬Í aÍdL­§L Z]ež%µhH¸ì½[29!ZÙO¶p2BhU;yê ?КE…2Òwø@‚š²‹LC'êâ ÄõÜí­‚"¤ž5¾57^<Æ2û*ƒËíë¾CqDT•œM²X¾VÁ|ëåWAàtf«×hNX”…+󬤿2x×õIÁgSǸ‘$02Û@Ê•BWÄ_Èt¾ZäÜÜ }s)OòF…çPª>p_Ûê'o<¿îºU—gá³ßRî²X¸†:¡cáA-ÇEöÂ1eRîh¢tU÷Ñ2­Tl³óLoÑ’Ï?r¦xùUÒyËÛ˜@¼º–O”8©ÚϽí—]q‚^äòŸüžÛ 0Yé=©? zniÈä2Æ›5= øÉ|0€µOkÈ]¨"ݤ:ôØþœc†Láq·Î¡Qq?¬}`Í ,éÒVX[q§„ÓË©‘ÔŒ%¤õ›ΣhG%žÅSm–ïÒ³ÑTÞ)bÁÝð^œj\ÁG®3gµX.7Ã}´aØŸ}%j›þ0`ò¿‚£B©¨³ÞÁŸª5ߟ¥¶dpß–Q£ôtYiå™âÀ†•Äòsÿ”]¡fp¥Va<cÓwEåSÔXIU—AOs Áæäd x‡o¬0ÒËŽÇß ÑžLE¹îè[>ú5"WÛCîå#¿:›mÈAPÉéôý¸© 9“ëQn9C4ƒæ!Åù#Äæ‡t4_Їµ,Qñ`mhèše¹ˆÜk•Ÿ‰>øÿÍ* ã³¶Ge°‚@!Å1]f˜R›õ™b ?ý/Þ%jÞsŽ‡Ë³9ï>”6EY‘å …Yg’&†¬Li]ÙˆFl ‰M=‘'i»‰·¤B鮦§xïTÄ8£I3ÄîS%„²‡xAFÁ‡0ºAxñÎ+Ò…©\\#„)‹¾.ŸG€íoY´½KÚÌô쬣³à—GIÈ ™_IwKÇ葪ø°ýÊ&²åÍlßeô+jQMÝOÌ‘²‘²Nwüÿ}NE~7d„|N-Bºm$Ób¸›  ¿mþ»i;¢KŒ±Ñ–V)ÀÆ~˜ ±ã9šÌŠÜ0ò{œ,˜ÚÑ t¥@è °œný¿Ñ­á6n.mܙʾëÎ^G(Ö¬ç^×Ìɇ‘Þ†jµÊ/:_ìVœ @lwXxný)ÍÙCL¢.†ž:+_ýÏ•ù{Uç‚ßVq´Ý`ÉF|$®Þ¶'“L“½<¨B!·§QÖÀœÐ×°ßîiØÊU›pv&\·œ³š¢W£˜­½Ôð´^éÛ‹ò"pýÊþJý“ñ+:÷ˆWMÀ‰(ëÔk$Bƒ{¤tÜx¿ž ÐðoáU¢Í¶Ðü´åë)˜xÃÇ:u‹c1“óMÐÖu{öÙØçmÃ$Wg8!hkšˆo?i>†bf~½’÷[¶dà¶³? ノ:‰ìcÌÂ]'7^r$ÎõJ ñ”10è¹KæxßÏJï`Ïë—Yø§'bŽDjáþ_NkMä/Ü(ÙØÑþõ¹· jÙÅ‹áiEüD‚„›i9Π Å—=f‰I™«×NÈííWrOÅvp÷~ñËêïÄ}&Vÿ¨ñz¢²œé±Êa4–̓G‹cO鈮Wœt‡5¢¸ÃrMy múp‹m¯e2R#‘xËÉ2Uƒ¡yâJèª0­µnsîÆ°óKÎ˜Ç å\¿M³Ó,(Awî½ÒùÜE]Árh[KÇdòzÜ;þ i’ÔF8¶ïžµ-XÅOgz?:(aû³moÐàqŸ^ü<š=€áDëÌ¿a[‰‡­;jd+þ<§R}ë&§"çÚ>ÛáMiçŸR&dbáù>µ°tñÛº@€UT»Ïjn§‰Ûô"´‹7š¡Þ+áíÆá:„WhϾžÍ›ä;M¬‹ðòÑŽ?“w¼Ž“ÀñöxT ®Ã¥[¥m³þ¼ŒL³ÒÓ‡ŸC°U]*I($àŽ&A½ ä!gâlà o%6ÀŸÉ¿ì,ðïþ@zu » ¯Ý«XoKCÔç4l³±ŸŽ¬îL¹Æ¼,#>êG÷¤Ý¬,¡ñ-ä0â’™6ë}RýR¯~½žw¯Páîé'쬾¯èvåž¶d”Ú¢ÎÿA<Œ›oSÊêècv𩾕“U\²… ÇRÝ+8ň Š € (àæ€ß Ò3FïðZT¥ì¸ÝýhÌc ¸ òYkëuáûö5,DM"F*hNÒmY“úB7Üen{¥*¹ayŽ”Q}9X`!ðª_ô³û|û´+­£Ý‹™€•ÏÍe4Ò!¾§úœ7ìHä,óŪÇ9ÇßH¾*pZÔª•n†øê@¿À7;ᢳo4„WÕù´8’O· ©“›I¯œdâF./¿è?Bþu’ÒÌ3`u|u•»°C‹_äQ aÖ’8Ú®ÕèÒ¢ûFP/±•ÓÞ^êÓ6Z‡#I‡h¤ÖH¦åŠGúþæØÔÜCÖÈ êÞõÆ-ç-˜áŽÇK°!H@sû8^!²ëióæA?íX×ý±¸ö´&ɰ]NV+,BÛüå²·Ø.¤äYÁüE³GÁ®Þ–N»å®¹6ÖÓVUCÅĺ©uǵ³ÝrC“gÄäÿtO°Q7,R¤¥è´Ð– aV½~õŠ3¶,!ºE€²‚ÍÇAàãqÏëP1ß sÔDÁqÃðpæóÖgÔrì:yö<}È÷OÑÆ…7}§Ã.ð;ß F6Î샳Öv5}½9DÈút-FÉWàÐM>!B…Ø£rœlöNRMäW°§,èö\̉bÛL¸‰£Þ0ù ž(ªà¤2÷^9 (¹KíÕx½Í{H¢››¨Œñº†RH?ÌT¸¡ÅU‘.õ€ŒIò@´c 1#``ÍĆpçß?Óë^kä¹Ë v¢ú4*÷0œoa•7Òpm.¢ð~ß$ì×)üBÌì†_ÍW¿IéÝ¢c£Ñ* ×ü$l¢»†U1´*âˆnÉŒC‹Ó·Ú’B‡ç0q·AÂ`€A3áía¥Dì&ìê»Ì¢’ïWBk4þû7|£6mÇ$ º¨]A´GÞ¢Ç䕌5\ÏÝc›(¼gr[á‹ó±ÀKPV$sïu$ˆO ‹ìo¥¶5¶í³¥¬é“‚ÞóY|èIˆÆz„âÍDžiö?äóØCWêâLC ì\=~ÙbÃ2зm¿áp+ æÿâw-œ¾M")º¼O:Zt–IÙìüÕ#ì6q7á‚)brRüׂßÉ”Ör}tpaX—Á'ªÿ6"'P(wÅðÔØ î9Ï8;7áNú£k«ÏË%a·`‰Jð¸3#ø®îÂX½õñÔ¿d]¦:~C:zí×ÍvN÷ƒ"–ç§X¶JxÈÔm]7ʬCïmÚÄ‚ÒHÌÝ®Ê+ÐiÊúÆßs‡x­iQÛ½›ÃJ³!„á±±||’Ñò.m²ú¥ö…¯üìMÝ ~Ô‚uÅ©¯ Mx£…ü| oS-×N*ÇŠÓÚ­ý²Â¨â"”)ñ:Æ®ÿ`g4F_Ì7T‚3kŸI·É·ÀÁ{(A¬A/=Ó~ô}Ιw§ÞéI¦:}:¸Á ¡‚»p?­ˆ?"$è­µÃÎnfÒü×~ Á|±§Q@\eÛÜ:LyòŸ fKgvÔºœÀBàÿÞ’l¼äî¥åƒRUNŒÉÖÃh  €4ÇJË,ðtwÀÕñÌ®:ñçt؉‘0aeXjŠÊ~À4þL q¢7ìÒc^÷°î!«,µ™~`§ rªZKOçMgj‹ ` %RyE†j}λ·£-\ ¥ DV š¡]€¬Ú ÑhäÇ”Š›îe =c1¥{­3z~&¥uì3‚dûÊ!( Äáx´ÀJÑa¥[l—fôÌ´ÒµM´.°ÿ7ËEI¡, |´ Í]ÕÕ„–{¡å‡NT´žRZLlÈ=}Â*‡áÃLvBÔÌüÖhår£V¬2mvˉ@™'ܺi¸+Ü Šñð“S"Û¿50U%{ÓÖ:p ɺõ7 E×ÖŸ)B§-ßþ,j {Ì ’f+×Á‹tïƒiî®±ýÓ‹™ž™*WáB%"ð`&Í[éäÖ”ù8×: ‹Dñ.¨û_ÞÚ1¼}aOsñ5E:C¤ðØUÎ ÷æzcµÅŸÀ2…·ËÞ‘bÛ$âŤÎݸÃv<gvuuÇi¸ç¡u@”Æ#1îUŠš6P‰€Oîçxè͵—°HeˆÅø$«œmÏdjÎyiÅ„±|ÛwDÔÍnG»€Ma/ Zò¬‰‹Y(½ Íóóód×ýCfå_'‹I6N¥°PkÐÉ>Ùmš›cñ…/Ñ Þ|¿L<ôÉ…'ûj§¶¹þR"€År'ÇN»Ï>qËÇù-o<ŽC&r:BÅ ?¤.W/U›kÚHÞ%£~ÎøeÊã²=ˆ†£¯)AÈ$ÂIW4kîu²£Ïà8“("8 ¤‡›DÀQ7Ï‹ëL¡cx®°y$ðƒ¯žÃ ußœã>z"ì=˜X Õn^´ý ¬gaÌ¿Z%ÓAÊ‘ü¼˜Ê~±Á²jjÀž }w3P¼ó,NvˆÈ‰{QeirFîJ_øŒ éÜìaƒa9ñ`辘$1’ñ!möï%•³²îý…G 4†@_'ÍbÍJƒüŒ¢œ3ŽTS­Ô}­É˜v9ŒWøëÿ„è©—Mç×Z¾Ì~¿ÀA½"}=Í~C*¹ÒµmhÓµ—U€CáòSa‹ùTl­ðÕkWJ–šeÖÆ1|ë®#_¸Y3„AÝ$Ï Ž2æÇeyãV)}âÏßn RFZL&9Ž¿Ôb —i÷h)”¡:Ç~-ê¦&îÄQ«×k…(Q2ªEtÀ_XrˆBæ°"[4ÁšrÊGŽ„o›s-*Çr3#‘¦îÎGA5wB¼#œvxÇo/ÍKˆ‹ÜË•jd÷x y)‡uýC˜û¬ ®(Üý²vÍÖªÄß›ÖQ¢^¹ºOêg°:ñ–×oŽ2$øgWô•b [|˜yâþñà¨A?½5*óÿЦ¿ñ8+¿ùÕkúÆÃ¬ÕRŠ{ àÍ|6å–VAÊû Ü“¯äÛ¡ÕÖí Æ+Ìü*z›®æœ¹`šu”*,IvžmÀëéo·b干ͬ\”ˆ /¡UûÍZ èLî2æÕ0ý7Û¸Û™VîP–PÅ)Ù¶~ßÔŒZ~^úOÙH.u.'&„íCìw4=§¨$ÆA Üò·ˆ²ä®QãN¬|è®Eøî>yvtØNŽnRÀ»ö{eÝf@Žÿ¶x# x€DañË8“)œk­xŽýn?'’ "δàyÖ 5âýøÇ¾ƒk —WGÍØ!ß?Oy^£ö[‚Eнì»CFåW±]~Ànë:–Ã]Kg5–÷Õ©“ø.ÞéÞ¡^fâì/'Nx%–“„=>üb!àAdÐåË,ÈBe"M]¸ñ=ú±”/*Eñù± ‹MȪ|­¬–û–­\Ý[1šÌw´uJ¨<„”ÜßM kéðo}LË!פG¾Ì ö¨Õ‰Jy€èc¯KžéÓYÓä †yÌîÀŸ­Á˜þ‚z§³¾Å·½b¼~ÓìàhÃc£„˜ûÁ ìã¢úg:qQkœ±òq¨ ˆ±Ù¢.} 夼¬Ž{ã^C@Óþ0@Éõ#É+ ¡0½¡T¶öG`Æi@vtßè‘{Ñ'Z!£^É¢î¾ÞG)ðcë³–•÷”è“!õ»\nzb²§-Á£&ãáÌ éxÕ¯ë)~gšþ ½³Õ×$½¡Öµ;çÛË£i´9Ÿ÷< ŸþÔHcŠQ-vÆ#Ç›_+£Ù'äìQy[h‹˜Ð©[ìzãÔöy—‰UPt*'jÄZ‚u–Õ0ã‹ãƒÃ“s¹˜˜úÚ¡Ò¨Æ\1Ÿ÷¿3CÀ­åòª-ñ>–Pl2Ð1ÙZ=Õdë`Wiðíé‰O ‰N”óŸ Íœª|€rêõïÑÖû|%„SÝ@I<ñúü'¦f/Nä$'Ý/éÙK|÷’Á¾¢Í¶ôãò°˜ÈIþ$§Üu YGØ gÔ÷¹àågˆ¤’jRÚH¬/ŒªâÚJÁ2ì÷æ5»‚¥pôž#N òóSóÒ çÔ¦ ¦k^›KaÀ‡œÇTý™/&ŸgÜÎ`þŽØŠ9 <µ ýnð{K þú=ô8‘fþÌ¢G9^¿„?DG‹ 8.ðù÷ÃÛeþêÏ?”½•oÂL(÷ÎM8êã^6zÝ㺧ó{wtùŒ2Ë=ض" Q±çØøª”•RÂá 3Ÿ° ÿ‚¸"K¹„×»Ÿ#êuØçÌêª"ŒN¶’ÊR VX÷QI1AsÛï<ïA¸Ôƒ bÜ'I>¢ñ^¼³5ê°žå”:݉:vZÛ«Ä“h¼w>ƒè•Æ>ƒéþ¸a®¯¡¼Óg\%5OöÙŽÿ¼˜¦tžü« ;U¿ˆA¬KÁ¼ÜŸÌFꕵÓ3‰ù |î·;–QÂôë4†r]œ!1ŽÈ>;{cOI„É{`Á?ºÿ<Ú¸TÄR‹îŠÅê.GÀC>¨®|"-—¸>qJ#ëEpt©†ü4ž ñhÕÆ¥*õ¿›™& Öj¿žUÍ]à..³# Oµ¹ÀÚ`‡ø MYÅ[Åôw[y¹OÓ6›r/tgs¨-G_†DJ ÷¤ ©X—‰8Ì1× †Ú²þ`Ãk¥f›¢#vNK›Ç&&’euà× µ¬øñoW’ŒYòbS_ÎïÆ5âP|pÃÁU* ú7Y1hyü¼<Ì/ÄC°ÕcLLÕ˜)€§ìÁ¾Z§3kµ°©ÏÒp]îãø ¿¨ÜÊSd@ß°EˆéE°ýKˆÃâÇ'qLŽ$\·:¦$³k†`(™“J²FQÕˆŸ½T¨ˆoÁŸ@ÀÿÑpŽf|F‘U^•ÿP¨ö:ä%¡‹Tï+l™üsÅ£¾lÀyȉýêWÐa¬´šÍ¾„‘,¨^ ìI‰ ©$™]¯¦%UsN6úÜíbè£G¯3„­6ƒÕÂ_¼ï–GÉ},õàßÇ,ÀjWä`5qœ¸>ö¾†^A1HWÓ3Yï8Ãj~UÚ+7ªSÓÎÅ|r(C©=•èiQ„]¨BÆB‹=s©ŠÕÁu1ÅpPÕMuz^w" ÇQU .A¸µ ‡@¹[â:a}ø÷͘u’œÖn]A+Y¸¬k¥ÔÑÙãyp-}*”xü·^êŸö{P”ðí%~õX ï¢IJåTÍGô.øtnk¤íðËÿK“ò1‡÷“™:vƂɌÜz6‚â.6Ó:¶j&"8£ŠßMDñ$Å@Um_„Xåø°%ßÝæ÷CEÀ2¡#‚¡ÝÙäñVØÞ¿´LVU’¹õ&˜ŽJx‡6‚€*£\Á(ùÀ½èPÈ⣮Ҙ“ïDU596’0eó£0(bˆžƒ=qÈPå4Î!BÇòíM^2È3Qûˆ¯hC†ÜË8ªÉÿÕÝ º1ì¶ÄåÂPžZ·…î`æ3ÿ'Ò­øÜ%8&9O ým‡¾§,ê _jé„ s!%¢]•Àý¼)Ž“ÝOe}²×k]0ß=¶ØéÑ£'À¸ÌO5m˜¼a{”þCvÀ7“=Èaæ7åR–/•0àÚ[¥/èÞT ¤üD>bôxoüãz ýŽfŽšaÞE6rS÷·Ï°bFëerïšàÎù8¿ÀÇ›0£#h˜&3C`²- å|¿bÿ˜oáúõÁÂDk‰+×çÑ ¶/a(/Ƥòž4øaÙñS—ˆ£øòR\»•Rn°ód¦*šJšœ„˜ü§Ÿ%é-²+–¡Ç·zpÛ¤$…¹ÕSóV_(è°£¡J#H6ÖÕÆŽ‘¥¹›ì\bTÿòË Vøv¸»®S“ïi1®á½“P( t ô'† Ë» Q¨dvZ¨q#È»6îõŒ_ùÉÅ&ï>-uœ2ÜyÕq×3@6C¾úQŠ+Y»näypIËCzøÄT Û†";0~w¤ŽËâ€ôþ×$Iªñ{T\Ž» ƒEU¼lÉ*펞¯b´³Mn3 sõÔ†gaÁŸoSA_ž‡†—üÅô±ÒÿÍÚ=ǹbCúôwo²ä%uœgV†Öº•C5S¢<-8ì„pˆÅ QXvRªòƒ±Ÿ®‚Å!†w¾7fJ…ºñhD«”Ò¿SºÈJ…šÌ1ìöW6¢pÑUIʧ½rÓº`?†ûOeÅœ©Å^wÓ•Bau·Z;a!à»…úxR¿®"„”ÖÏq ÌŽM$‚¹u“–{4ÀòX %6G¶t|1E®a. ˆ˜¿¥i9–ÁìîÔ˜NCvÄzèày|ßÂJt''.Š@¤OYX[Lm.s“È—€¡ºÜüò-eÍGå8Õ!7 å < ¹UPUÀþ¿G–t¤‡ÚØ©OofÆžž0ž“×òppÚU*™­EjÓþdÕæ:°É͉¯“ûlmi=êÞÕpq·áÈÙ¨å)}ûßÒ'À»M!ÿýJÿ&úaH NS5Yž¥†q1ßTLúÂF€*Ê­v®I!Ž$~Péz¼¾¸»ÚDeP&'vìƒâ¦"±ûPÌmFïŠ䉓Ãb )Å©¬”|¹oW:GúɋꕈP‚. 9héi]pwbñeëŽ Ñüâfå4YdS-&ò™sÿj óq¿8“bqEº?KÊã Fa÷®[8ŵÜ>@!k`æ}æLÎŽ@ÍÂ&WûÚŒ"dpl}RÛžð/t&þ]ÂØËÊì>~&ܨȬdƺú „~U~X&©ÁD+üþa?*8ç‘-—å¢nó© «¬¤Ù)¸ÑJâs¢Â-¸¾G-Ä£[ã֤ʻÖϯ…j0¼~kÉ LÃar5åYR¥t×M¡è@‡›@ &¯ëïàÍ€.ž¶Õ'%©“`ªQnI«*D/ZF÷éªà~ü{ìxS¢[ÁQÅÿ+ÝàRÿ,¹Þù‚f.ÃW€•–kE 2=&â‰Ws“6PžG7áÊþ‚1ám@1Jx¡˜ Gƒ+~ѪXDEÞ‹Pc†Þf¿Ûräy¨ö¯TEjLÓUöîRÒ‘Ì|£$¼ƒ89ÐÓ—{hÁµìWøŒøÁN»+(òÂ=⛹)OÞ€9ÍôaÃ<ÊpÂûÒ ’ÃàŠ½x%ÑۋƹœôGÑñXš[4bŒûfM£ŠÉTÚá4.t|zëßS„»ƒ‚ZÊ›Ÿ®ã€…ÿ6±D!Ôšê@œBwr—º¬Z}5Z—zÃÁmÛ˜ Üõ°S½rpˆûi<ˆ©I¯3=Ј\é{’a„C‚¶D»éšÖ‡Ùî €5€`Œi ¥_ëUÍCº’0aÊbJ´–5*/Ù“Ø"] ?3Þ‹T ³ Áp?µßÈÁ7­AWWÒ£iHtà)œ™žÒFü[Z+8É"™Ã¾Q[¸qf¸½‡L% ¿&ÙÍ)öÝ‘¿Ü¥£Û^ÂÁu¡÷D¿|ÓÇ.މ$Ï@†‘Öõm `­§ípn~Ê”A3¡q'úã›'¼fØW–ÓN²?ŠíÚ9|åŒõIàf' ‚ž03N™öLqÎ ÁP휤ýºfß ¬ù¯¤q‘7OæŠrÉÁ*‰˜W0:éúØ3)u&ÕCÞ€_—¥|Ûí/ykàä.r>sM­ƒ>©Wä¿Ô4°–ÆÂ_jff¡/q·½\Ï-‚­1 ä|øÇÄ•yn5ák5¼ƒòaybÏTs±dòE˜Î©±<ƒ %Ø”‹‡Ü$­¾`ôýŒ”Jql6ÿEZ&u§tr¼â5I¾xiLžàÆA jÉéA™ãÀ8¸…/­c ®å45ëÑ@ ¡T‰ÞRÌÜ9ÆšãJ[ãÛµÕ_¢H‘Ì‘¬õÁà‹|ËÜUW² hn%±E½Ð?{9/ºÿ.zþ/P—±ÿ¡Ù±]=R…úp»»HŽn2£©Ÿ¤ ¦tµ:çõsÿ^Æ*ç(´<Ħvº§x ¶D¹èÀ>H#(™U{Xâ‚Û›º'„—§G}û´ d¼l%.C¾ËtØ%yÍ»*L_p/ª0)õÃDQp ¼ä’ΕP€«`㯆ÞÁu~uŽ‘¦tlÖŠ-&L¦?µ[9*¬ «h^ ,x üpk\‡1 TNnï Ù°=Cð(oÁ<ÃTÉ ë.g£j7EÉUuîC‘š»ÆH/ ÓιmÛ$¼oŠ3Õ‡ƒàé,O•¶ô”¾8¹  8¾‹ 2ñtß~›Ï:áñÉ£àv¤GAhd£ÉR‹ë_V¼ÏîÆ‚4q„¡IÓ‚¸Ã9-óæÐã©Î2h¡lBʨýbÓÈϧÐ÷À‚®„õ@Má×Õ–O{ý^Ê%ËTuĘ«ÁG¸*Ubº°ì9@²ÔÂb4v·žc{ÿ^W‚ØÁÂlíP8¯¼7Á€ú˜Dèrýž×¯t‰‡]/œuÌÓ¥¹_Ô Ì?%Æ ŒŸr×GÕº­¡¡¦w­Y:į·HÕ/`—¦lÎaÔèfA!!õfH¼ú›XœéåaifXŠ•àZ<¡šÆP¤ú4!*”_è4°[_¬ªAêxî죆zÏìSñ|LK‚̤ÖBy ]&ö´(5nY8+¬–*kZ_Ý{:$¼èç‹]¡},–¥òisn{BÀþ‡Ê-ÏMKF#]>®Ì WGRl½Ì¯)¦Ko*\j·öu¸øŽçzS92Ü›Dl­MÂ9%ÍtÛŸd—x}åWkJ*¹„€n¦€Æ©ø ¥&ïa“NIsm«P"#ã>©e…ˆJD5èe×l@ú|Ý?ÒÉ´Ïå-1ïæöîðɵ˜62tøÑ FS!wIT}rA–ÿ8iž3Éäô° "V÷zBü˜\KO˜Bÿf#=ÅÉ‚‡Ý$íYÃVuÝœ:¦ZÓtˆMx£˜#îMÂÈ)áN:•‚4DTõû3h~U8 Œô°=y‡*œk䨵£´òÙ)õâa¡f WXU¾5ØDóñ êPRS)³‹b¿ˆ*±a/¦ëxyc£˜fcN<ø€kBVqæy_·@µWø»Uy·%Mü†k2ÓåëšWe䇌UॖfE¦ObÅ2>‚ûÞPcA7Üý¸mÙL·²žäùÜʃ’•œÂ>N¹æYd|¥Er__¯úò;Jl•Ø]mEf–‡ò ï†M:Îwƒ²¶XBöhWã"ŒÍêNEŠÝãT¬¬_«ÈÜå´ËaÊÞƒóÜ6£MãÍwë-Fš¯âÕÙNiÓW(š„ekPu#Ôÿ„ízTè-ô¦$|·þ%â ÚcJ§Éiç3ÆåôR¤ï `¶ÿðƒµÂÅ}[ ýÛ‚syC f€Ò:ÖrY2ÍweaY”AúZé|ø‰ð]Ç37⮕|“géÿ¨ÖÖ7ÈPK73=ˆeŸIÔ˜âHSvbØÈ.S€â°ú™m™ì.ž¢þW便ØÚ`Éo0Ãjy †ÿ+‚7E!”C…Ý{4€&7LÌNIðÞ­d‡£lpo”ÊÕ˜‹žË¦>ÔJñt:ü!ìdºñ—Àfèî¡x„­8D0U×Þ€*øËا«ךäV•bÿôSyÇ©ìUÜiNäá;Ǹ›¿AïÜ(‡çÆIV{ ƲC·æÙ½ë°ß9¤‡]Œ«=ä ,ÛÄb4.ÔKTÐdd£p3Ô'%Õ陃¶×(æü(­æƒGF.ÊïŸ{–Äéõ"Vd1UÚ±rŸ«Ñb‰Ú™ja³U_Ý.€J<Ø!,«Á8Ud%­– ;–wêùê³m^vQ2þg <%Îvà *B8Kú%†w™KØr \†*lIe¢îï#éŒöO¾ ÝÈû®Uƒ¹DÔþB$L;?®µÃËxv’Åí– *…´“„ŠýŒÙ„t€‹Æ0®µÄH Ú^ŒÝ`ßuQëš:ŽÆjØ… \Fž:î–¢@øSöÖp(,º2ñì;€÷šX-â/“.!¾ös[#@!…÷Û9¢n¯€ÂáOÎǧE³Ú‰*¹+|Tô™®¾˜H‰ÑÿžÒ†žÁ#Ú¬ë–3ÀÑ3nŠBÖ nÃk~`w9ŒËkÒṚ£šºîaY¤ºBÞ–¾uUG†W/^¯ôR¯z꛵é&ŒÕQ^û‡jŠß÷Ss¨*ì›a8~fu?õ+xI]Ùœ‘xö®ÑJη;Wÿ^uŽÝÊ!tñn¼'®4ì- éÃìᛜ㩧B£o>Žûm4ÃÑ­à¢CŽŒXÓò¤èôq÷µá&›[Zã{6tÈïîA2mÔKL véÚ¡Ê>@âïV8Óbn!Ú®ƒzÂrGÞ9^ä¶Ãÿþ.NòzRàài:<¼ÆN$á啿RPtbˆíçÖt× gò5™\.…0ê«Ó`0ó´"¶Mþâ²dìf4íÓFß®2{o6|»‰eÔ4õó¶âòÐ3Õ}°ñÆÓEgŸ,n x‹\”¡p NÕ~Æ ]!ÊÌϰ—Œ£aCœ5’äFUlm«'&Kxá}ù!@ã]Q™ß³Ê'v+^г[ýn©xü›‘î¯úy©ŒR›šþYÜjÞujõzmå­@Æ¥W;(ïî[4¶[1^”hÀØn[Æ~¶JâìÒòPÎ>Èx鲕Á{2ýš9ï’#n6ÕjØg1Y°iöœ¹;é~VîÇÇô(üc’Šñ+ƒ\»ÉÕ&/à­GÚB1ÎAÜ÷«ß•B=)–J/cöÂÎÆzØéfD3ya6%¢|¬–!~ÅØ 6é½n ›׋“ÌZ褌’“¢› ¼;s#’æñÝ}Ÿ¨ëý™¤û ^ÑŸÈ(,lÁpà>øp&F”J¯‘2n…IyÓò‚/)©T(0”N¼©ê?  Æ-½½>Áí©Z¼í’½/þ‡ûòÀÝF©Ê›š?;šXœw¯¶ã´‹¾É:ñŸ¥ÜŒ\[’tÜætk0ZYV,×»øõÈãæ·ÃWŒÂ‘X¸‰r›FR ª:1'¯’fTôkÆ LK„Sà»›$Š­¸9Çì,§¤-…«wL˜ )÷z%€NÉ>ö%5] ‚ Vsø; gܯ ¬F‘_RÍ Õ,I,=+°óÝç.nI”… „’¢ŒŠ¾5àÓ;hv8 å¤Õ•XäåIÏ¿Y—çæcš·gªhpŒÿ{0S*MKÖG›+yׇ«ì¦’µÓÄÞþÊlÜÑ£–‘ÖåAAiÎ=“©ïOñT*ðo–«qÕÿ–iTŠÉÏñ½Þž"øMõ±Óö>ãùÇY}¾õqæiÓ,Tå,Á^TBÇcá²›£Z}ƒ°×›Ô@èRQ+¸N²ßÖãEÈȉÇчóý‰ú=]>™éçµÖ ^ŸÇ6w`ïø 9‚=‹@êÛ`Df¸M±>%îи>ãî]¼tBÞ'¾ºG÷Û‹Êœ (XùVo=[¡}˜±]ÂÕˆ€š®ëè†CÜÄÒÞ@Þ4Ä: U lo;æ/{®ŠyK÷;”7Of±éè8Î £¤”È>£ÊìæZCÝ_Œ{"î›ñ[Ç‘ôüýR÷qôö“fíãhEëLJ+¯ÛŠãÙ ©&f»•¶êl ôZÂÇYù¹ß&ìˆnÕ¨p£N¸ñbZDÞ¹-Ý£ž;™;Ò¦]‘BE¾9^4äy<Æ‚«z¯ª¨¿„Y…s&yV?ÝXé´ñ=¼ü6ö†=µkûDeÄg"­n l†·¦t$õA0!óõo´Ÿãò†?Œ†wvcy¿ô:aB76¹Ë*Œ ÈaòeëE©-–bþíd0mguP‚Àò†2 Vï%_œÄZʾ`³_ê "”€'у“ü-?O ²"¿qÓ&ѼrÑvºâv9?s Úß+oßÈåW˜ŽwÐo{ß%ðÓ;ôeREÑÍ˳|«Hu+#iÑu¿›´õHuCÞ™S±ú ù´¾›Z‘ 5 ?röÜ·ÛzGó´HEÃL^òwãrÎ~Ô pY)ÄÒ|s+óî/™ÚGbë™/Ƕ׎„ QÖÈþÈ{gð¯žü£ª oø€¨Ê‘hFÎüB™)&"I½s/‚Ö¬ÞgIä¿bÓU96Ýpy:ýÅU³(­VÈ}Uðm;qZ&'_©½ÖhÕê[½661£Pg"ôùÁûä'¬ÜÓZ¥»¤ÝtšM ÔðäwÞæô%Z Ü]xªz·€asû¦”©WWp©Ñ2ªÆ˜nõmdÈuFUMK5&î~d *»•œJÂ;«zå©D…¨ÛÔ%Þ¥ ·mÍ¢ Ì‹ÖG¹„M˜4ÌêHþó5ÆñB”wØP)ž˜Ý%®¢‡Ï”¸.FS;fÆ5œfP™½! ¯ä?²æK¡fñ0$;"ɺeeÚÞl`Ù(,ŸõL9Ï…FIV?eŽ:·2Ú»5hŒ%!¾à„äÓY`зr檊AáÆgM+¤GQ Õ-Wl˜N<ƒ>žœ<’yTÚ`ZÌú6mU_aè)–M´hÿ=ƒKÀŸ1$¨(, pªÉz'UQÞóß(#ÎTö±¡2ó—Å7•7ga_ŒÍ $ß_Ï/‹"/«v•yùUãÈÐÀ^ꧦ U•ª¦#9ž¿­Yÿ¾•Êí(²˜T~Ân‚ Ÿ |T³eð¸ Z.‘Ù:Q­4Öæû#%/t¦ ù¸5ì½|¯.‘ŒïïPGM «¡q¬µºB ªxüTqe0²`©"`Æ¢Úw@È«¹¡„ÿjt -î mši^9:«EqM´¨DøÍÍ%ª8àÖ~øwËÔ'U%V*@_†1ùÏ{@½ŒWwÙQ]ŒB‹+Pí=«%6o ÔxP3¾d{TûÄŒïGX¿ åG1I \Øñ„ÎlÖ ™Î#ÀjuT°a9Ê%ùâ€ú½ãÓºæ [ÝjÈ©kÉ` pÈÎD‹ÌÆZû@B1k¼Ìn­T›YZ~ÇKžQþE‘Ë¡_þúùUäÌ£à{þž_˨H7зºõ\ ::š5¸^ÆeX²­S (_*å7~ªX´»t±MÔÞ³¬¡Øù&T·i°?I ð_T0‡¯,½ ²Q‚º<ÀÛb«†úAž˜TǸ¼ÉÊTž!:«¢¥‡éø´ÜêUA@‹µáާÇÿVÜàkõÝ µG"LpŠã†>‘Ð{¨h^"Út®ã:&ÀVq…k‘«¶?ø³¿Ê”NðC4…$a„#OG’Dió(óŠpþfH”ó§»!ý'Ñ všŒ‚çxj÷Î ¹œæËø©f‡ ¼F£: ±ÙT²(l ¨±•°ÃâI5ϸ{T‹Õ@[ˆ^M=£eo:^ëäÃ%« Gp›wäï®Õ°™îKüú”º¢úwp¥þ9>}¦ú7tš²k)sjò«o{°F1›È;× æ†q>AÃÇn“E3“V70>ñûv Tú'¤í9fô‚l»³ÆXMõ¹ÛXÒSmq^uÿÀ#ã“uLÖ`Ø›n¤U/a–.üºß©äéOcÇuNŒø….Ù Øï®Ý²ÁÞ)üŽ[¿jŸóé¤Q¤Õ«›r­xpB)2Å}Í$ùXÙÌHóTi·”^ ËæwÄždÉx¥]ÿ’v×,²ñغ%)ƒÁÁý‡#æä³Ãiÿ…¹6p‘'‚7û¾¾)ߢD@•ÁþYS÷¿ õçZ½/dçÌ€ó`Ó#·ì“¡ÞÔjù|ˆŸ.N [רE¢OxIÄ>c¸UgÕK5AÆx6ïåûÃïétÕ),¿ÚA÷RÆVô¶aLÈٙÌçõhæ„™OGòÛZÈ^hµè*µOyÍ"·“\åb¥”ÊÅp,Fv%FB[·÷Ï]+'îjÎWÂz{Ð¥ƒ°½-¾ÛÉ`‡ró#R§T…^RîŽSÎéð{ð`4õCÅ·;l§LΠš’ ^µŒÁls´6• g”2/…/C*÷š¬c‡ÊáiVŠÝšXcdAƒA €À#ÕC^•šÚù²‚»G¾Ý,Á¹lPŠ„×g²á¥Ë>Ï¢ÓŒ ]pØí”¼p$YŸ¿”9)tgJFg /Àf]ž¿Ónq—ÓAn>Œú ‘‡ÄYšÏ ™*Q9ÆOjΆx‚_Q\B…Ì^ÚchåW„â¹öm¾ata‚MÖ—IåÑû•œHÎë”ÅÈŸôÒJo Û} øÕësÙÍ"„éÇgB93£ ûJ;NÇ|Å̺ù­ÇW%êÛbbÆÄÛ±Üÿá›ûÿ6lC˜@¸¹¬ûÉn©ä¯ï(îÿs%6¥}lµ9ñ·\zS4@•sEÈgK¾‰,J/VêxaEŒaÔLa¦ÿV2£2ŒCx¸nÑYòµì³ª#èŽæÅ4 ÁRºtíÆ·Õ»tÇE>)ÒA9•gô ø®ýCæ°¦6rFhªeǪ̃òù¬)T@þîøw0™¥ý<> ÃðöEá„é t |;þ-ËÅ  =E+öÂ¥ˆAv,ÛZ4øcÒ#çžè§Hh ¹ßšßPfŒ88RÔ@¿o_NcSm32 s—Raëj®8úõâò®˜ … ~á pŽ=+êÜ©;ò¸OoùÙ†4ïÁeùÈhÔ.³{úQ|Ñ僪©dÒt´»žŽ#S?X•®èH÷¨g«yg¹eƒ îrÝ#ˆ®êF€8=Tê|$ü#6LZGÍ>æe}‚SOĦŠÇÕ+y½ ÙV¨­$2œÙ¥…röu]û›*bGv÷ýõ??°}Ë0ÓHÿ )Äø#ÒÊ( ÕÈÝ Ÿ›êAŸ[» 3 >ùCiW>i/E8(ǯNž-m/ÈÌI$Ò¢ÁOÃ@ÌÜ~ôŵ“è}èР¬Î(3¢?œüdE¢gÚ÷tÿ0L»òƒþH·z[»Ý_ù§ÿQJ{“…?l šXè[>ƒÙ,áT~Y±ïiI:˜ìÐ4Û®ÓÄõ9å.nç•~_ÿÌgò†•, 1ÌÂŽ‡Šr50§\4XSns±ÆpÙg*‹çb6"ý©]鸥Âô—Èo9÷¼ßÊ—wòŸ ë-<;vå{—Iò3#@tùbÅ|JµDýmƒjJ¨²%Yâ7;“SwQkÆsf|¸âÃöZƒ ¨˜A-F*ÎP•ñý¥àŸ¤`¸/FgÃûß“dYeš†úàöõj2¶ANâyÕ—Sí¯dMiT#ÏŒ£ÕjŒA 2A~·iɨ/šÖiCØ©º.ïFc%îbç© æšužÃ—‰x²Õâñ*í•’Ê0,‚éÊ×?slçc¸YEK¥ Þpzñšï T¶¤óÀt°­W¬O›µÀˆÆ•OÝ ¦HHÄ n:ÈßabÈ|7;¬ÜD’/D„»Û› ›Õœ—5v•’fŠæç1d¥£8)¼ d+`4^u­Âp5py!ðr¼) ƒS|kÔH¯˜QÛ:S¨Â)@ ÕôÛ¥•ºNâîVN¨ˆ3™*Oäüǹs®÷‰’à›>?¡P:Ñ›×Â%h=ã˜ÿÜ]õê2Ä‘}Š£òÀn—iÏ{IÐàlzGñg‰fŸyZÓCç½2Ÿ~7–8Ú“˜l‹WKu©€ŸÚ)¤˜¨u<Ï"%ïɲÈeXkÜô˜HgRÿÖbŽw…(:ˆpØKºa€80ò³dÍwÙ, sAW2çÎM%Þ(»3¶ÍwJ_ÖJ±=ìíßc>Ï,Ó,êDtÿöŠû}æM.Yš(ì¦`7æZ˜ó“ðE²¬Ž>멉î\¶ {Þpg<ÑŒëëm +PÊ_ÁvËÝWï;Û˜d,¯H:Niõ€IPºš7W’±o6ºt™hÕ\æ |óqŒ¨/ô…ñß°R°ŠÝ'Æœ2Ò%锎èén )µöý˜uÛ‰ëW„òbäd`׿»"•åœÛƒ² ÀeO¼(ìô„ &ÄäIÀý)—îüFœL×N. c=až{DR{R—ýÚj{KPC¸BxôµÑǸU’Å\R€Y ¶Vvâçuß]R¡re ÔG„Ýd$+<Í)¯Üù >ãJøUëvâíæ9™Á*;©;ãŽï!È ˆeªPüƒñBZ‰=Ÿ³<èãý±ÙÖŠ‘ue=ÚÀÒâý»+Ÿ†Á4C‹)ækæøH|œ¡øåâ øK¨aè§îŽèN³à$0Ý[ =hì $Xùî^¹äTŒÔx7` ¶«Ñö[ÌžÉm»PóNÅÙ÷››KCìŒ:À¦èÃèñOL[Þ³ƒÌO¨„ HãsR0EÞm²·îí6í)tËîy ”š@x6ÙyÝ™7‡„me}~‘ô>êÛ{´Z%æãošÌv>Ò‹ÔåÆiü•’ecÆËD@ŸpC£µZØöä J5S‘Hœ#œ¿ëŒ‹š¦Ÿm#@¼þ@$þò¾"Útl­4.tý3Î`c=û ñE¤´àVÊí&ù3¥PÏmPz~o|Øù@ÍjeäPáL÷óÐ¥qæàä°7óò¤Q u “÷»,\pY òœK„ž6^*V”Dön–pËL¦¯ÔŽ8·zØUä}ÁU?æM‚bVž½A1’AO_h‘ÿ×&ƤRs®³™Si_ÙK–Ÿ¥¬Øò²™zzÞð¿P§›ø±ÅÕ°vc5¨@ ëСÏ]aÁàêZñ'ûh"öPrñK“j”öˆ^ÄöÏ+0ìKïâõÑʃ< n†$¬ðÒq/®)9š}Ç?ƽŸÇ“©ÓaØ¢,E[±Ìë¶ê=‰åXï)l½“h²aSã­$sêÎF±o^¯µ»Ò’%÷|%†âdJazßAþ,F¦ jÕ=ÍâÒ/óR³=èq¤Ð/utïê:ÊÕʤˆÖƒ[G†HM Ê•â2¢ ý»:úg7`yX_|sÂñ=ú£lÁ4`¶™Ã×tȃÛå†Î M°Ùftkûf ðæ`ªm0àšfô°õªf^À}‚͆þþšˆÏŽá[/éo.ÞʬP‹Ç ˆú[Àå³jŽÝÚ('î™ËTä€UnòS*»ò,Ò&Fã@èÒíÆ\U¿Qn˜×g§–—GéÔäæYÙÁàg˜di¥Ÿ'Ê.Ñe6ít0ˆ*gϱr9@aÒ…Ò"ßïÅM»z¢hä´ÿЦ*EÚ‰çïN|°ÍÆ;òêKžqDcÈ0ôò·ÚóíÚ°séî‡!“Ï(Ú+X›š-œó3ÄÊ÷½˜>„ú{9=ð¾¾· e²ub~ ȾëS¾³Q•:'¸?wáX#gË BuÓqf}oöMŸ¤Â<[5±4—S-'ŸƒEmì,–GÙz¾{SG&c²ü^?HÜ¢tUÏ^a5áî꡽ÌmÁ¤ˆŒxˆI§Ì˜D…Jx,udv ƒ&Ò¼Š9ÌlJú/\Bºýé-ëŸo7¬y«5¯›E¶~)YÖsZc€NæÛéÊ)\c7õ¾¥*îëà¡hZ9sS»j†;éð,¹àB‹4_P¸‹<ì·2ésâäÈ2XiF“AZ“ÊÉ®„¼¿4rÌ3ëlìyW^ŸÜ”S·ÙxÏÂ0Ÿ¡Í3|ÿÄ H¬¹OïÌèóˆI wDS BQ€m¾—ë¿°êñÞ +þìg» ‹ŽmZ 4G¬KX\\qàE†7Rg„ü7&ò&X¡æîÁäŽ £Lü¦ÆÞLðƒ¤¨…è¼y¦Z¹€2I&LýXÁºÁ6˜Ñ§K¶þm™¥“áz‡“À»Õ¬¤¥@Eœµè÷  cjŸ 2&*–ö" ‘FYèMÆÍ¾ÛùÕ¾|YIò2cÑ”Å!x:_=¡Ü¤‚柯°·-«Qåø‘6ZÏ$–$õtÔS…»L$¢åfWFóŒBôaMu ¨¿@ÌZýÁbÁóqør2‘xüjHIºs u¼&&çSQòב Hþ^Ðh…<¶'áS[ø‘%È¿*ýåÒ3ž]ÕNl·.ˆ²‰DÓKA_%£M#rMæR˜Ž†™líΫ…¸ ‹»Œ}t¹ƒm§¤t†|½î³æô%÷•À] ½¸5/€aËá° !Úw̬QE¢!•TЃ;…uÉ´÷÷EÀŠ˜£eñ)p4æÍ-Êð¨ÄÜîþ˜©DÙaŠ¡ŒÁõ„º©a:dÚô…hÕ¿»Q«t«3øËÙZéÇuŸÂ$ô&ž^ÚíÇŽ3ÑÔ>2‡.ޤ”Ì:„Ù’„ú}nñÒ |£¾ Ð<Á6†©`É]õѨ«Ó y.¿Ö Û UiIQ!¼>èªRCHäV·mþkC@•s)à³lwÎ*þº¬y&¥ãd²€ÀŒÔ5C¾.‰~ÜgÅ1Õt·B[\êTÒ Çëé?Qü̓¥<#ŠuCó«êOdLˆ—k,œ{å¨å6`ÇÁ?unþšErqΚzsÖ -ò)SŒûzÚ sl+Ù·£ž. ‹úؚб»õ•3cYþòZ™]zº/wÈC¼œ°ðÐÚ/¢Òœ8òýñ—¯e¦ ¸;ÄuüvAP3*JU_ÊÛNÿ‡’u]¯mwTýdV ·zÐ4ó’Òc^)ìuL6ôgáÓ™ñ<(çÈ_wøÕ‚€AËŽxD®Ù2¨¡ ðP0ÁYY@™®Zýÿóz¹ÎP üQý5Wo8rf)Rñšhañq[TÒÜÁ¤Â^‚²[ :˽Üó¤ö‰(µxU~iTs±Ôêt](9ewm”ï ¿ëjØ£í¯½Jè§¥%Þ‰²sƒ':€Ù„dÊÄÔë| #¶$ )ºQhríª’4X~ÈöWªH$_ˆ‚­&»1£JÛlCÿkÝ 1ñ7‚ÎoßZ²ÕØ!îª lñv¨À/£ÎÑ»m>Á8ìþÓx»þÍ btšª4z3nšÁ?À|Ijn' `iÛ‘¹rM«=ü½a¨¶Ùã’*bî’EóÓ8‘tj•C…a¸Ïit XÈí4Iƒ)剱Ëd¼ÓòWA^¬2q} ÄŽ×V¡%{D²’Ê ^ÝJÔm–9£’V¿,6L{¸B¶ÓF :Ãóa5Óó0>: ¼¬!¼íp€‡G^ÕÆýt(ìŽ8Ö5ÒúÜ”@¥¦ÛRæsÁWÅVKûjù{ñGìVf#ápkºp6l8UþèÊ>Çh…-5 w"¦]/=~ÒX?™2ÃÈåVV™5Ù÷}MUGG¹Š†nXwç6%2R¥€P‚•½$`IîàOIè™Ú ò¡C0Ò™y4àœMH½ðÐáEEÍ.x@CÀ¼_ncØ–ÃIŸ¥ußâa°ò¾»¹(ʳ";ñÉU}ï@Ë ÿɪé6@9$ßçBÞLYpáboÇ_üɦrahæLÎÇH3v óÓŽ&Ñ( 6ÄÓÙIUù:$ψ…ýÞæ¼^ža#ŒÈ©’±kP(KA™–?ó7€%ûX¸¸”åD·DÁÔå¥GŠü¢}'Öš´B» µÓ &wýAÈcX“í‰×Hnxµ¶“ ïÛsûg÷»°µïÎJk`NÁesÉï·ÖØæÓ[ÀD%ÿ»+uÔ™rÊ' Õ|$ÿ¿5広£GvssÔÉÐÎ#E™Á7ª&”Wr¢/<Їï|Ð7uâkÃþ×ÜvŠP$D3 ½~G‚9\— kM¤ÈM°®Nï1_•k°]Ár-hË‚ó”UÈ’É4±ü 3(¶xvT0í´^ŸÝ šh³d0ûÄÓc ãLH€;æoŸŸý(gœ?B ííìÖsd™Ô(dVª%Ô_“*Ï]À‚AÉNCΈ“cîu}{àK{Ôj]4wý~ax_)Ç] HG\0tÑ䌇æ©wSÌõö³`GïUºÔ¤,sŒ2¢\L2)̬9H'zBœ€¬¼a d@²Õràq ëM络@Ç#H¼Å9ÁÁ3^`'TSsêé—ž0è³v(¦×Úò5V/cGˆ> ·F‡»˜3~¿²\ÛÐ2˜d5^ÿ0°Is‹Æ¡)¼5â¤bJK]96¤²žÙž{Ù qÓSÁ€=u{ Åe6ÐBDúWwûFKoC5!ÇŽ»^܇iF“6‚*ŽÝNsǦÖ,Ž)2T)TÿŠ«)3ÁQŠ=IþÀ%ž‚±—·œ&¶þÄ+cƒCW¥¾ ¦x¿¾@æè üDœSÌýØ#\¬5‰ë¬öáåçŽÄhÐqWI_Y2"ÇÀô2¡cÔ’ÝŸQ ˌֵ#7˜_pœïϑ߃}faófÐðÎþÔú « ¢ʪ²Q˜ºò,›3p¤­—öG_Ej†×Ú{ [ë·f Ž–‚»œöüµËµ¡.úU’e3I`w±•Q=¶Ú=íj"2c}¬{}&p «u)‹ÕDS­†ùC´pRåhÝ·—8ЪŠr2õø¹E_$˜»·QÊ‚-–.å7÷ïrœ>¯8$!ð+m7Ýü¤86ÿöçc“%q[©8añ½ Gª&À¾Y¾Ce²¼³¶f`þ$ýÐüÙQ*ëñ„ÃÏà@eÄ€¹J!]ØÔãÚ΂Ó:ñVriJC?¤žgáAÐ|€¾ÊrmÄz&Þðm”è3áh³‹ÙÍ0cQíVÚ|IH,Jî¿ð ÂãHÄE›"#JÃj›;œA6êõÜ;¤ÞNÃÀ}n7$*s`=‹Ë綯%ÇÒŽïM®ÜѺ< Áêq *eø%çwäeE>¨”w&âe+˜ÄÓ¹V}jvÌ#²`m¡¯!· ²AÁôINµ’刜m˜ R¥e„ž@Y«ÌÔZž×lUËm(ÏKQ=Ž# ÉÌX _ u'öŽñ.ŠÜçÁcl[(Ni_í·›0c)uʤ)ŒÓw˜ßnÌZ05ïd{p­C9KÅ,Ñ1Á;vOAkùˆ’xrjI­ŽÏ·‘¦0ÄĆ:˃f¥ø%6‹03³äCrå@q[Éa„tJí(·É6_629PSPYImlWû´qìž—MFç°¡gjPŠ%ÍSŸ etàÑqï¿Ã5»éK+ª‘5ŒÝó»]sÆ Ú[úÊHT§°€Å%§Â¨ï:¦²ê/MÜr¹VÙ,jGà€ñ¿(? äó÷I¢ŽAï-æ¢`’÷/ÄvA%ÊßîÙ²`×ÚSRÿL„x©+àý³…”?@ø±lÇë@GkøV1±"[1÷Ù‰|Ëëó˜#SÄØI…F “RÒ&e’|p̸‹!?L®ÚÕÆS:}TXîþrNÜ%Ý€ÔY–š%s>äóˆ/5pL`%õÜá].£)/µú4:A ÇC²Qâc]ävÙᨰbŒÁtÕ§MQÞxA'ŒlŠNÖâÔNû{ä>âXäà3eÓ~Û<1p ää‘ùöpm·_ 4+v“ß¹DÕœ}N{ß°gýíÝé&Ô·;å9ÓáÏ»¼^OS³Üú[,ç5‡ÍõkpêòIìÑ”_§Wô±j˜Ã­!yô¶Ð2€Jð“Õ†g .'‚ØÒãÛ«nJxMÓ©8;È3 ìaª2lÞZðÀBd0¸«eë´äüÀ°r3O®Ð1†–1´SÙ>-¥¡· ¸SKò‹BÜΊï¿J„$xQ-Î!Ft¸ÄuäLH¬J¼ˆÑŠh½yvÎêRj8œ2Öà!בfà ÆÚV·(Ò—ž,G†tÈta¶Ö™D¡FÎ)û2‡jàëMñ¦[& Ã5ÍD'0É‘bœ¸¶°ù` ÐÈ[Ë+JOÍàÒžNC»g¿ÚÞµ‡sY¨s¶Å§C ^(Ý;½é µ[ÎØãäµ3’ÔøGœi¢áÆKo‚Ì ^‘zëzÉÄœAŸ†×@^FÛ´&Ä·Rxê¸-° ’&Kµ‡®#s¯ªx4ˆF¸ñWë ÕÇðR#ñ£ö87‘q7;¤¿lÎd‡‰È6®þ‚ùˆ˜}ùS"ˆÔÕWÛ”p5™ª•ÄbD™Œøó*Ú§w»¸ÐŸ1‘š$°ð³Hb`¹.!H¥ø,ÆŽ !,dKw"CwÛäG´dñC'¼2«è?šˆ¾S˜Û(7a”“b­Ðsõè~:9ÿ?s-ÉÐËÐ$3Xà9ãÀMÌý/X³÷Xr–|(À¸êõ¿Ý-²=̈Hhé‡QF‹(‹ër 3nçÄÏ^ 'BÍn•å Ï”›Q²‹˜jËMB}}ìP—‹ãµ¡Î+‹pcê˜ý¢HNQ<›0úXϺIýE‚O}155qý±[±¶™ÌÔ@¢«ì 4PJM,'’à×ìI̼‹ œ*b&÷ÙÉo-ô÷Jò¡[;iwÁâ-_=¾êþ ˜©*ë°’VT–ܤ|ªÑ°Øà­üIˆ.Ê;¨ž€§«Úé<fÝ4¡låÂaôÉþ'XÅÿEÿY/©•¹ïpÂÛoâÓ'fä8À%Èó”à~Ù}{ºŠsÔGÕ[˜æ­T혫¢H$ð<üO—D3˜Èk67GA)àµÊV]¡ep¥¼Çw ä!g>úòÄ‘w5Ð?kƒ¾m³Òêšý¿œ)™§(<‡]šûàJ®V'’¡xQÈk)Œôr¡•G~£³÷•i¤¡OX6Ù†¹¨¥£g\¯ì¯6ü5¶&ÿ =·ÿ"U¯lÕ>uà@iâl¿GÇ3ÆFÈFASj¹•8>™°BYBv„*í¥ ›»]×Ò/…úz*†öÔpc× á×éS–úaÀ—=Úº[—ÎZðñßU袀T{™aü/ë¡gœ&ŽÅRð#Bc/Ó¨Cìï*3˜v ¡Ùë=$âÛ–ôý†iÄ«¦8O§‘ÈAádFWëëi\+Lz¤èúõYÈc „žÞˆ4øuiœë!MVt#…ñÉea\‡LZŠS jê÷gÐÜǃˆoÁf—ø! –}'³-ð(.ÛLY1D“@.¼ÑɦçQPT ûö¡´ã‘lø…ªç¢M°dœÕ²\?®<ÊÌdÉ‚ÕòÉ I-zdJ <¢˜iÜrÕî7P–xi{ç¸c [ö±ÆlÞœj| }UAþHo¯0:Û;ÞÙ_RvoØrÄæLbØ"‹n¥Êêù}Ýc¢ Ç¡•Š„ýÉä&®w9)Q.OnøöìöT¿Ö˜g{2„RÀxB@œ=ÚP¿ç°‚hA·öñXjží½üÑéQ„”>[ó@d2±¥ò4ž^÷Sôb8tWyñ ÀbÉN+fI³=+x) ¢VeÖâc$¨ÜÎ ò&5Ö\²V+!_Š °†ÞåH½èµîb“¹@*š»ô½×Ž’O¦v¬òjàÝðê8Ó»øKž·LnÁdoƒY˜ËíŠØý0Ù $Yì4–•̱†¡vãæk¼×ªÊ졦 ¾%|Ã#ƒÛ½°¦QÆ$pC>] æwÁŽÑ´t1í^.ö_m…0kØ#¤Êfg¼Þ¬ kPÿ‚b¤ÖóïMu›^dÙÛM°õâYQ­]i¢œM¶=$år ;qgªnEé'’B³1V:(E§ZMÌÐâ$Êc­J¾IZ5X,“ìæ ‹È1Ÿíý¹‰‡—ó;äõ/,ÇXnPüšIx¥39¯îý®h\ïd5šÅ`ùî|ø‰”zîÄéi!¯ò:UvÍ¡EádùzdöÖylv[s¹Ýwq©…©–´®eŠ(˜¿a¶—2NQ¤ï.áeRr§šz‚¬ôiV× üLsÈ…m9—ŒÇŠ·Ž\)dU´’[‚iIëCBEï°¥iÖ[v8 Ò·¾øÅŠŠª„‡$}Ž¥ëHÌ9kGMdLP„ÔÕÓ[û2¾ˆ5S¨Š%|ˆ°ä™òêåB7ƒìÞGó´{3~ ¿mÕß¿¹ZÓû ³ªú h0AãÇKšNáµ>¼²ÊÐÉïùjþ¯ä%`³"iTµ8Z0~PÂc\K[4 _Ëa?q}k|)h€ˆ°ˆâ‚¡—œaăWà´ÎÈuÎPö•?6CKórÈëbH|¨<ÌrU„º9fìÂÙFq{¨Å<û$ÀäjÀî†ý¤ˆaµZý0.j±b5 Ë,zëEw,C,qÂa\Ñ/r“V›ÝG•_µÏTÑdJ j®ïg"Ôn^\DE}CÜGQgy@^GIì;ʕ̠…žà1€@<þ «‹µîuº‡ ­¹*ÍLaZ`-ú÷üâD,ÍC|K7Ô1‚7Šôþ4 ´'úÊj@ŒÂj!Š*u{A¡«ûÃöÔ;{þÔ¥»jµ~uUÒzÕ¢pf0 ‹YZr-cran-shapes-1.2.6/data/digit3.dat.rda000066400000000000000000000014121412660331700175170ustar00rootroot00000000000000BZh91AY&SY.Õ’: Äü7DEUUÿÿ€@$¢@@@P ^pRìO&€(ô©ú)½SÙSjhõÔôЉ&€š¡ “ÕR &FLLÓ4Lhh "Jšž‘ˆ 4 2ê~À ðÛNcÈ‹S×TRRæô?Iƒ÷±ÆØ››÷z¦âã°Äj,ÕÖhHíh1R« ÀÀiÔ& CÕß<Ê“áëÐèѵ²l28ãE´¼‚"1¦’J‘ðœF}½ôÑkW@ž/4¹‘;µÆE{âé[0N™ã‹,ž, qr"^¡f 8bm ŽC4ÊL¾T0–h›È^I™ˆ³Ì;Hwr–Ó4cR̾S[`Z´zàƒW! б.͉7J¦bªÈ: „- Â4ÚÈ0|mVÍ6†,ð ›Ý£D#ÅvaËÉÅ‹×9*”: †{÷ÔŸEƒ_×Ç]Í7>þ³ê¼ôä™XEÎuá·._¼5i¡R´×¤ªü·ÞëACú(ŸQ/À@S\oë(¼@„­®E\+›ÏÇAsûôˆ98ã3Q"YBH¦ÍŒ²ÓR!4¬¿åq5-"Œl´£-:+\krñ®++-³PЦ©¶m5¦³¥Sjm* ±Eb¤‚[CKI\ÊÛUÊ+¢Mf°Äœê¹Öl³MM6̳M±Xî©ÜÇÇû¢öíÖUÓ§”…V ¢Ê,…F)"NHÔžMEÂ.˜‚ ˜å!a»JR‚—m¶Æ±ThÁ’(Ô–MLºÜ\D–4•%Œ$aKåý_±w$S… íY# r-cran-shapes-1.2.6/data/dna.dat.rda000066400000000000000000000154071412660331700171070ustar00rootroot00000000000000‹]›˜ceÕÇ—¾tXffÛ”äf’Ü´Irs“›7¹3ûf’@ŠRDDÀéeé+EšR„é½Rô£ JïÑ‘O‘" íKæÿ»û=Ϸϳ›Irïû¾çœÿùŸÿ9wËζÞÛ®1kÖ¬g­ÿàfkÕçêñ ¯ï;ôëïsY÷¶ð£y˸cwëØcæìuÖÉvxmVž·ì@;0s›¤uv¸vv9õºÛ'Ö[€u׸«ûÁ³­÷fwuÕEÖ¤s½…ÚðI­s¼ÿ¨UG_*ÚFêõîÿe«S—É{{·ýšm>¯Ï÷jåÏÜï9u›ùvsñvƒ×ÚÑîî‡÷Ú‘¡ÞmV¶£wì¾ô“?%l~ã »Ñw­¿®î_?Kûnò½ì ½å,´ÙýuÎcœSù« .úí’‡mõ/­ƒM´}{ þÂŽÿí¥b÷kOÑúÚ }¾ýÞÝÜÒN϶ú^g—ÞræÛÉ{ÇqD÷{ÕE‡¿uš ë½cŸ¶õY²[õ®U7{Ö–.¼u‹7ޱ¹³NþêËÍÅ6ñÖ5’“½ë{êú&®u×NéZkÃëmyZçé~cžå–ŸCß5úÞü™Ûîfã·ýÉyêÕìØêZOum]¯vBï83¶~šöa6•øI婞;ìksoöÌ}ˆu¾ýÛ%]W´CÝU?óÞ/loµÛ Yçï»öþØRLûr/Óùx»ô–Qµ&õóžÇÚð“sºεá»”¶æ¢Þòö·~AëÉïªý¤);8øÝè÷fÜ6ñ¿àFù‹÷ûÿ\~›˜5óÇ0ã6Ùý§»q›ÿþQwy[}lë·éÜ›«+2—èýBEç^ tžeìRs´ÆxÏ ²i­Ç¦sn*^:œëÔ&úýôQWúÚ?±’ÖÕú³üÀ'¿ßçÕºcÍ*½—Mmu³Óº‹ÛÒ+Ýwçìm³¿WÜ$èþ»àb;²šâªþÌ{Ý ïiÍz¿öÅq™8J÷¼|vÙ­ªï­ïvsl?þÿ |®:¬u•n8oÍÙ=¿¿üúû®Ü%ûvÔ¹$ìà¿íðŒ[lkˆ‹Ä¾Úw)¦xpÿKŸóÖyׯÓ>Ã@~^.»˜¥º®¿¢Î»Ð×ýôÔ¥Ö%np09[¯Í¿Ÿ‚ú_ÿèIëÝ3íû¥üjtBöÚS÷ݨëÆÿÞæ·Õþüä Y³bׯþÌ6“gˆûü¿gnhKçõÂgÒzëÊßkûéü'ö¶Ù±ã_*.ì#ÂÁvGxÑÉ^Ô{ÃNa—éªÎ¡ýOý¾õþ^½ˆ·öòÞv6·á=Úwýtᇿ£ÎµxŸü+»žüeôtÝ?Îþê§j]ær}®î–éÒÄ} û¬ ÷±›t¿|øVï ¬?­x Ê:3-?2ÄIp¥¾_yp&Ùü?ºÛ»ï|ëp½übî7Žïz¬u^TܹŽûcòÅÓÂú½Êá…Úoósù›qe¯Ê›Â¥1p=C>I¬¯ï'?Q<‡s´àÙÑû¦î›YQy"q’òサ®Ä1Ê3yò€Žšå§Mì™yJx—¿\v-¯¥<ç¡uÖÎÑõš³µÞñZïǯXû[ùsÛ*n:û=Õ3àÿùCGþݾ[çÜzWþl÷¾‡—+>ëg*ný%ÂÒRÅknåä€×ÆÀÝúe÷ÆJÚ_íyùqùZ­ÛåF^Ð~×7û±{ühW;ùÇ ?j½í ßjÍâ%æ5á`pµâ r†p7ÿ«îÛÜmG§†{ß°ƒÅwÿÆòÃÄŽZ~‘ùêÌFleMòݲk¸9çppÂ\#ü÷{°òÀU¶ˆÿ»è~ÎqZÿèõú^óÁÞ6²Á)3·Þ&ú~v†̶‰ÃÅÁ çŠË܈â9‡ú-ÊËÍ5…³9ü®Ñ¾Ë«é>Þ«ú|8l|(»¢ük_—Ÿ´W‘ÿ¶_Q>ïüAø6M|u6Öç[¯êû¼ß^ë6sµŸ|[|Kø–{~åÞ—ÇCüûà-þgÞV> JÊëåíz{˜M“obçjÿsÎè_Ÿ»®çw ø£ß;6çi[½^²HçÕˆòÈýÊg•!ùIþ7œ7v$Í=¬ç@?³þS˜I?9›!/TÖÓ:ë×Ï#vt®á¾:ÿFv†°ZÿÇe7P‹ö?z³â¦É~kð¯.»gn×ï'ä'ƒŸèü/óå×~MçQ¿QñÚÜY~˜]¨ü}Wë-Ý$\÷ ²Kõ"ÎgcòÅÁ²·%Ûsµß6~8µ¾òç4ü¶ó°plrùÝ_ûCþh[u¾>WÚA~]€ï$ɱFÏoÛàQÅA¾X{O÷+ ÿÓøÿÐ?eçõ¯ÿØBçîl«uŽ “¯ˆÏÕ¶n^6Ž$?ŸÞMç]i+ä¡ü-ZoâDáùüo Ôºøn1?û©ò^…s©¦Ï…»‰„{É?Ì :ÿùþœ;«ë~£W)_5Õ#Šÿ±µåßåÇg­u±¯s—Ö?D=4šPžÊ±/ß“=êÏ)^š«)f#þp¬ð¯¾•_‘¿TRÜâvb-å·ÖlkûkŠ×68;E>š&¯v®On/Þco®Œ >|~.í#{ä°ó(ç?L\ž_vfoe¶v·ÖYSàïõUßå“—UOÅw*ðûÊÑÊsµt}ƒŸ6ˆûàv]·²·Î¥€ß'^–ßpîQ€ßà¯+Ô­&-ü Á£ð(áYc-å9<[Gñí>"܈S'$žjÞ©:"Àoq¨pb¼=Kù3·‡âÃ_K¯uê§Æò¯ÜÅ:‡×/ieêÒêöÂÁç5ŽìR}n’ókŸ£ø™:Zø2]•tŽL+ì½Ê‡ã{ëüê÷È>þÝò»âÔEmñƒÑÏ÷üÖá æuù]°šò|¼N]ùk>¹¼h.ß‹?¥x-¤•ÿÈÞµHwØWü§±HþSÏŠgTÎ*Pï9÷ ¿oìCŸX~ýuN™䯕o(/p0ü™ð: uv Q>Zçæ{#}zíGg™ .8ÔMcžò@T‡WÉfH×5àlϨpž…1ñ9g@ö">Øü»Øs}he]¿2K8R‡„ßÖ>Úø€y[×õw^Q×»’¿Ä±wÒ§>›@ /Ÿ&œOS—9øïÈkâSÅKþíÏ?ZçavÕº›øyî<áxþ]ñøÒ¥úœG½S…G7æƒóÏŠßØOõ½öAºNû5áàÔŠÇ)t‡ù|r=]ß>ÌuȳuWyÔ[xSb¹å'Iê‘uf?7÷’/ÎVÜ”á¥iøã ù¼ï[ÂÏí9×/TçEúCåiù[íäaîgÐtƒÊ)·üéòK'Ò9¨#Τ.$ŸÝªëdð£ÊÞÔÉÔ{ና(o˜wŸþ£ò¯±÷ÿit¼øšâMIòc¸…p,ð´ž2õFú0Åmœºux“Gµ ôÎ<8ãÿXùÅÀo›Ø=‡þ‘ÃНʽU„ ÕÇÅØe¢)?kÍÖ>ÛÄa§ sŸÆo¦NÔ9vr²Ã$þa—‘/^ Îê§Þüâ¥DÝ“}§.ŽÁO#ý°ñÀ_¢?PfÖÔþßÖ>7¸Ý^îÀ/ ‘î.VÁ!3*;›K§ÁÖòOøÌ¢‡;û·‡ñËèŒ ð¸€^žÝPvª`_C½RO„Gêsºü¿JÝQ$Ÿ¸àPœú8‰Ÿ†;é{AC÷-S¤á{κþ0<"î’%T¨ß y¥¹;úþžC·ãÏüZ¼ÚA'©ƒß êÅÚ?èg¡Ãg‰ÓAú2}ÔÝýè8‰ï7‹‘þPT¼WŸ^›¶Þ7?Tž ._ò¨ç²ôÅbèƒÄÑ|ì ¯0öÅev3}¯‚Nn¨§CêÇ&º/ûÔAcàNЏŽxIrÕcá!Н}¢Œ^‘ÿã×g‡—)ž“ô[rðÍ z•!?7ée‰ƒ,|cŒ¸÷n×¹àdãG:¿ òdksê‹gäOí'”—§.VÞ™ÚFøÜF—l‘Ï,:gø^ëðš*þ^BïËp.iú˜‘®XÎïè1ˆ_•ÈYêÈað`þß»ðcžV¤â ^Š¿›ÀꟀÏ{ôWÜýÄCcè¿ R=<û;äéÒJØ?­<§ušÃe÷=3$¿6¾)Üö¯Ò¹8ŸuOÝ$ùgùwH½ h¿Þ<ø ü$~!þzòW‘CŸ¨4Ä3ÍUŠËf¤CÑïË;²K‘|âí¨º/øìÒDGž ÞZ« ï&ñÇå|òúZðŒ÷Œ+¾mÝûkô³¨;ªœiR¸•'¤ð{'+üªŸ¦ü釵÷„ûeêÇ ùz!¸7—sÀòÑØ“òü¬µÐ¸A¿«½¥øöè#eVRÜŽŸ<ªs^@3¿ïÙ¶>ïSÏ™¥QWù¬ù…~n¬*|ñ髿Á¹4uª3Gþ›ÚYë /Q\èÉåÿѹ¥ÑFÈÜK’ú5ï o*éÜÍ¹Š“æþâ_YxVŽÏ•"þ„.Tà ×'Ð+[+è~íºòPgáüÔâ÷µþö/t¿ÖRô nv‚|gö¯¯Á›JÔ;™ƒ©/Ð]càqÜ3èÁ|¸¼‰ð1ƒ^=Äyhœ`Ž(¢¡Wà«þot¿Úž²»AO2Ø!ÈÓÏáÕ¥žS//`óÁ›óEôŸ,º˜ßøcH]Fú;ýSÝ¢p”ð*M}§nIb¯<Ð,óÒèR#äÇÁQñœ¤«ëäá•3À+øz3Ð~sóÄ7³è‹EôëôèŒÔ­”òX{tipgêEùÍýúöɺnëNá†Ý_ñ2qú }ØÚáp‰zօߤ°cݶ~¬òYc#í¯F>)ýC÷wɯƒäŸ~ú“ýä ‡þK¤øçË/k¿GŸ¹^ë6ô#_ö÷Ч3¼Ž€»Càļü,ÎŽ1w‘K‰‡G}*³˜¾EÄ#ˆK³5}úËÑ|F&Â5úT©$úý“ $œ-o!?J±¾ûŠæa¨ÃrÌëøÄc#/~ü©z“~.¡3æ¨wSôïbÌÔÉó æuìQ†¹ÌM RöSW  8'k}tÀ ׯч3à’Ïkè^:h†~KqˆøZH]gü<å%æ‘ :GÔ·£¾ z¬Oß¾@žÉàW<#ކÐ÷‚yzøSоýÈ9Zßú+ údÙ×é×Fû…·6Ñ2Ä_(%ô~å{ôS±KÄw&ЧZŽâ·ýSñÇÎÖâ›ÓÔI;å—mxÐäÊŠ3ûŽòìÄî²£¡?W½™ù‹c軀)pb=)ÀÎæ%ô{úËë-xóõä|x|ßß´¾8q] ßT¡ï[CG1Ëÿ ü9`þÊC÷Ïn‡Î@6W~šÏzãä1~Ÿe>¯å#ú!zoˆ>h¨›}Þ/ SfÐ/ãðËä¿Ð'É{Áú,y%…Ž ¯.Œú@Ëóè••ç„G&êQwºôcrرWàu5ê‰üp‚<ÝZ}ò`øÃ˜øçô´Î¥Ãü@ûxÅS‹¹G‹]&¨Ì\ú›Ô‘eêóñ—$>âÌ#Ö£üŽžì¬s÷°œ‹1Ï0>P4ÏéQÿÂc¾§éžà‚ÙPï×Q/.”ý2àô(ógCøóùÚyCë-¢Eý <Ü€ë!ó !:°9Açè÷ê•Ô‡Âo‡y¯4sS!<>€•9Ï|&†1È}Gé¯Dy`ù< zeH’†fÑ;ŠÌyy)¿Gýä&õÿü·…Ûk :Ô#Ó×é¾+ᬷuüËRSßšeèA[’/îν û'Ñup¢Õ%ô+t¯2:¾‹ž;ÏœÇL?÷‹“?óð² uXõ_ÄË¡Ì3Âôoï#ø!:@bký~˜‡žœ€ï—˜_ré»G߯ósˆ^â7†º×Çßòè¨éû…Ç úŸ¢#»Úð&ñ­€þh™ë¦Á‘xô :M‚ÏçXo”— õUKG,»¶ÑÏ;Ë”g¦™ì ¶™iÝÏ<ÌͲÛÄò#üW•þ@ ^›Ç>)æâäñ:s2ú=ý÷²ž¸_A§ý±^ûÁ¿>ú@û+`× |¾Ê|¢!/˜ûàÓ1åïZÙÃ}LuF‚ú#†}æEý2ü¸ˆîœaþ¦ÞtÞº¶yƒpÏ`<ƒ'¹à™Cÿ0I¼‡äÅ]¤ MóûØ‘Z÷|ö• _”£NðÙ—ÁßCúriôµ~TD׬Œjä±ýÕ‰ýdÿ–ÕõڑΞŽüã\ÅYûLáÝ$óAö1ÅçÄ:Ì0·Í9—Àñ<úBšzß¡/W'?4Ðíú‡e옡o9B¾è[W¸ͳ9àHÔß÷£¹tìˆç/¯ƒé/y?Þ¥©ã£>Åuúqçà_ÅyâMYêÓÊì>2WÐŒøÐIÌ%|!;ŒÑt™ÃX®?/Ct‹Ú[ä Î3IüŒü·ê‹…ôËÏ2ß@\ûè$¿h2å2™c~¾^zðï}¯FÄÑy[žð¸Í|b‡yòi‡ús7ݯÍÜèdYù¦5[uáDçIášO^¼BõT].E<Ä£¹gpØ0÷^ûX¿/Ãû]t¬ùv š‹¡O'ïÀ÷ ¼¤†îg®–ߘ[eÏøëÁÿÓà»C½ûâaàaúÌÿèSg™çñ#ÞÃþBô†°%])êDøGqñ»8s¬It¤ð1ødS÷)ÓÏMaÇx±>šà¼²Ì_Wžß1ÌÃ7©s\Î#î•ÿô˜+ôàuÙ:h }£}¼òb‡ù¹iú;¾ß^Sù©E¼Úw´Ÿ üÆPUÁ"õužsHÑWŽãuø~ƒ9†`ÕïåÃ.sRCàw}>x‹ÃüÈòùɨéèøÝ1`ŽÆc¾)IðœÏõþ@T¢ÃŒÁß²ÌçT˜k4ßU ™ã áwÑs:>ºSspÑ[ãÔ Iô®">]f.|3Ê‹ ÉW êžzOÝ0Ü„¿gЃóè%æÑ<æÞk tåóÕÔçpp:gùp ÊïÄs{ûÔ™5ž0'€£ÌÇDzœG/$ÿ&à[Ãq‡z°@7C^ªlÆ|EÔÇBÏnF¸·öáŸÏsTèf.vˆƒ_)æŽCæÎjÌs”Ñ ]æeãÄÑ‚÷•?GÉ¿yôÝ!zÞ¤¹!ó7äï<çU¢?ï‘7xS½e¼±ô}Ûeæª7>M½¦ÏwnÞ´OÒ¾[W(.l\yb¿7ô|â¶^8çëáy pÝ¥ŽÎÑ÷,â‡s€5tÞþ:A}Ý"îÚ[Š7t°ó4uz‡:¤Íq ?±V×g.Õ°?{—¢çˆ¨]øY¤ÇæàqùÛ2¼Ò¥¾\H\Fy¢;8C²zÎcn¡Æ<¡^m 3è2ó™H—¦nFÿëßçtx¢pý,úܿРú_ÈSýÒPDÏ©Eý6—>†oMÂCøuíJÙ§Ä>Ó›*oÇÈs ‰‹Qž7È¡7ûÑóqðþ&u¡‹}óÄ Äc®¸F þLÀÏ[Ü·½Î­sˆòÏ4úK}»?M·v s5ð?ó<óÕѼó‹Q.M~Œ3^‡5VÞÔàû¥7ðøÐÏñô3çÜOÝgÿyæ@+Íï5éûÑ<3û,ñÜ™G­¡_7Ð_Í×9µ®Ñù·áâezgžÛü\ù²}’òáä¦zµÌSL0?ÐX¬¸ö™«- ^¢?$É»#Úÿÿ{ü{¥Åßß³û²vï¿Ý¿¼wÿ~Ñûû¿Ì6ãËA>r-cran-shapes-1.2.6/data/gels.rda000066400000000000000000000003051412660331700165170ustar00rootroot00000000000000‹ r‰0âŠàb```b`a`f`b2Y˜€#Ï â¤§æ¥ù€l ‡œpH9¡@è(]¥‹.@貨:¨¾ ¨|Ò]ª¥¡â…:j®'̼( •s€ÐÙPó+¡îÉ€Ú“•‚ŠBù…Ps >@Ý €ÒÉ0÷BÝUö•.†êÏb@ó7Tæÿ$¨þ] ¡Ñ–9%3Hñ‚˜@ ‰þÂÂE#žr-cran-shapes-1.2.6/data/gorf.dat.rda000066400000000000000000000013161412660331700172740ustar00rootroot00000000000000BZh91AY&SYhµþ$ÿÕüstEUU?ÿÿÿÿÿgâ”@@@@@@ñ9Û ˆ‰¦ˆÒžO!‘SiŒ45 ©‚ §µ"P4&ªš€õhJ˜£L!¦F˜Œ˜šhÍ!¡£0M6“CFS;å¿´Æ!1117v!I(r@ û%8C†3ÀTgäUU%DÒ¢˜©ESœU”Ñ!&Æ ¶ C@ ¹Šjt£ˆ˜©©ƒ‰ ÒZ¬\þŽX5`ÌWuRwb1:Å{^j—}™3fÁ#ká[l«,m¡Y]lùf¢ô±Ç53Ñf‚¨§â|A÷sÔ«J¬4YäãL3Ø.ÑÒÈ÷§Z ‘ øuìöl÷Tˆaô"lX;¯Ap>%1æ5ê ×’œèJÈ ÈtÛ¶Ëy¦I 1”!·Vض"Í`±rßCæ§Ã’„å/%J¡_佃 …熃؀ˆ`{Ab*+(…¢ Ⱦx£«.j\°¬J…sí_3϶ºW¨‹¬¨¥(ŒD1Œ=iÖ…_ííšµn+w¶šµ\þEʕ̾®¾n×È„&:Ñ«D m ÍÄ–¨ÌID“RŠ’4Æ4áDjX±Q¨ÑAP`ÉBªE""ª‘# Š((ЍŠ"ÅTTUDQEH°`ª²‘`°EV1"Š¢Œi%)dP~ ºQ»ÑJ!˜goC*¦UUÛ³ÙÜ¡L0 ¢H™Jݺ ã lÇô}ÏeÐäèðDÖ§BXP.–ûxgšÃ/_iK¤Ì™Ĉ+q Tò‘v¸#°ÓîsôõBER@×¼LûnR¤ù¢°sÅ J§Î8à4Ô'AŽ.»óm7䪢ø¤‹ŽãÞ qÓþ.äŠp¡ :Ñkür-cran-shapes-1.2.6/data/gorm.dat.rda000066400000000000000000000013241412660331700173020ustar00rootroot00000000000000BZh91AY&SYËr¿ðúÿßüspFUUwÿÿûÿõÿ”@@À@@@@ðŒb 8h„LšO1=COSi<£Aêbfˆ ¤h 4@ÈzDRš2£CLš'¨Â0C@0¦M1 ¢‘µšhÉ¡£@Aêz€ÐÄÐF™hÓ 10@4€Ó 0&OÚÅ.6›g,Ã%7 ÉjI|v—*”ÆáfÉÙ»¨½œXŠN×)(h »¨‘ HlB6©´Ji¶&2¥Ù…,ÔÝ·wÉmõ°v;=½-½-Ofn»^U¡íoŠGùht,üÛÁ«TnUWпP§§½4ʤ²°XCüG!ëëú×OnNw§vt§Ô ôYVIÔ(úD¢¦VÅ$ÈB.a˜óFÌ€s¹6â•)†A,³‘1Ã&GRÙâ‘ }ˆ«³>²Á4‹Ÿ—k}ñý•r@eœü¦$€ÀgBŸhÎ0E’Íú;ý3ùÔæä(t$ÝÃŒ¡×ÔÌõµéSlO[ïtq±ï†o;8+e’þÇ6íÚªøËO¥¾ºù©‹ô6ЖԶÁ!KCD´,險’JÐi´Zb& %LË•Ú.$ €µaMM5BQD‘ÄPÕUU1 L‘RSCE-QAJDŒÔ”ETd )¥™(&"*,Ó…5ÔJ‘ ô% ÇWÐÑßr¬cIõÈÃÊò7̈”d@ :EžIëlWìEk{×ègë¿;šcŽKW™¹S¶ÖÕu'®# ˜JÌRƪ®4N$è-‹e­­QÜ)€8}õÖRÇz“–¬çY™#ßÞÈÀÀÑÆËV-¹¼LÑB jɉ ©#6÷‰ŒŒÌ2"§¦óè`nJ @rE8PËr¿ðr-cran-shapes-1.2.6/data/humanmove.rda000066400000000000000000000032511412660331700175670ustar00rootroot00000000000000‹]W{PTU^|@j‘ÃhFÅG fˆˆ YW[ y¹ì²òPÐ}°»—…eAÙ»Y ×2&Ë7išM5Y Õ:ÓG M0ÇÔq gb¬i°ÁטNfÓ²ßwû£;³ÎÝó{¿ïwÖd(N‰)ŽÑétz]”.R§ ý¥ý‰í£Ck´Õë¬p9Ý Õ¡3Bïß»BÏn¡”YÖŸYvKÔZ,)-OŠŽ“x/§6,ŽoÞ¯±7ú|[<{f £ëz̯iFØ2pºòæ2áOèîë \Î]8×qåºÎzy«ùv;ŒŸ ¯>ÁýÓ["+¼x$2^ä—]‰;U³_ÖBÿæK³ùæo;1JtÜ‚>9kýø+º³=“Ä2ÚÍ üìöÝzïL±©õzê…ëDeV{¿œ~_¨£iôú‘GÔMÕò›Îúšhß)65j(Gx_Egú|cºJn‡ä'—ÁðãÄ…kõÏ`üæŒàÇbçC"põS²°Öú¡¯ãü’»`×»ù4Æ#¿f¡›sÓñ¨œ þ¦BÞżª£à¿ÜAüœ@ü/æYˆ3° ~ofýlïÂOu2ôÉìëöAßSÁ£IÛ/IÂô9êX =›Xïê±Ä_R°oáÅBΆ^Ozx•’µüiþ3ï{!W~Dzgé˜^¡> }ZÝäÛa{’¡u3ÇÊûð¿‘ø(Ñâ7Á®Û }®/ë”Çü²•\Øñ¥!3÷jëϺÕHa½Ò*Ú·  J$üh(…=M¿J¹–ìø3É!ìóÂu”ò-–Úœ½=¢¨qû¿Ã9oâȤ~Õü9â±M ó‚”{×÷iÕètQWxrË ·ð¿Myæy¹f¿ }å¤ë¾°Rí—’oG §ÌÅyy ãâ’)ï]Œúd’·´üêàgÛðî>ÏúEÇrFpç÷ƒŠ¨_Ž<&'LZøf¹0õ"ÎÀã°ßJ²7£ßÕ™Äï8Ô£N‡üÏ`^Mƒèså8ün!oWÇÑþRús ý[{ø‘Èf{÷Wïõ¯Êä½éü+G„j¡|ê'³þÙìŸÂ:âüÑ8û¢»À•Z‰¼¸ŽA¯“ø5’-Íè?û®áÎ ¦ç7ܪ“ø#o;‚á¼HìÛÕÌŸŸv¼}8ŸC^WðÇÙ þ¶›iŸx*f^ýìS/qŸ¥õ«“öm—a_ó¿d+å£8'Â^&瓺zk8?l=À¯‘¸)ú(mãÃ"Àù¤èÉœ“j òê&Ö³?Vw´>Pzá_ÛYàÍ­ñW<òáŽAýëî‡ó€#‘Ë>PÚt©ÎDëUÄag¿«ó¡ÏE{ža}Rù/×Gûœï-G‘õ{ˆ_ô¹wQ‹9)-§¾<ÎQÿ/ä?+ú«â"æ¿ZŠø#3.2øHÊe}V±Ïý*ô56AO)p&Ôö?ûÎùGØ?ÉHÞ2ö§~ö‰xÐúBÝû5/#ÿð«d$îLœCmÃNù3_ãŸVÜ?ŒÇžAü¿æNÌÏ6Î/ïvèYÉ{…Ú‚½#çmuÄoêf!/µíâü†5K³O^²Ó¾sE2†¾¢Eˆ?ðâT^Á{†ÿÞÿʱ÷ò>§ñý‘ïÿøñ©Ó9ÿ^>êy¯ZHþÓú<°yoeý¬¿s~Jœ¿äŒüÏëîN?ûÚ,QHþ„ÿÍ…È×:Îa­ÿÜÇQ?ùÌ_ÃyømÒä›q®‰~–JŒßÎùÉü»Ö…q$e“'̧±*Óà·¯¼©ÝkÔZ¼wñÞ\ƒ¾—r˜_Küל4pæwwîXâªþ¸fÀûæWñQDþ÷óÞÕ0ösØWj5êág"øÃŽºJùìß5\ýKˆ?ÞcW&ÒÞÿjî¢mØÿ«È;k?®œÒý¿(‘U6gh?òÃ…Ÿ‘¯G~ÓŒ }þùü 6ÊJç r-cran-shapes-1.2.6/data/macaques.rda000066400000000000000000000043631412660331700173740ustar00rootroot00000000000000‹W 8Të{*Z$’%톲 âµ±wf3ˆr» E”¥h¿*i¡ -’+ÚiÁ¨ÿ›)mW÷Ò¢[¹7î™æLÏ£ÿ3OÿóNSÔÀšiÕ×!œ·˜ös[&Â>óï¿év«#<³JÓ V'xÉsZÓaÓ¾BùiÞv¸;¾û=kS<8šø‰|šçA‚A" ºÎŠypãõ~Ù¤*ß.‡b1 %[O »þÂøse+¹1à¥þ•îSõœÏ]«®ÙVAí•An‰ím軼JÓ>xñ9ÞÝ ¨WN)9À2¿êÂPv ˆÒÜ~}Ø¿ R9Í.›Z_r $l@ñ¦ÐÕíê=› |µrÍ=ñA¬žuŽwgxÙQ÷e„œ6Âô"ø±«öykP}êecE3Œ”êõ´ŸWÁ¬Ø™þÏ'uø½¬úÔ»TO;ÀaAŠoJ³ÇëØÙFÁíKÞ•:/°©øÈÂ@Šgß -õØiìQË!XòÈlÜj‡ÿõ@@|Ûc]J’/Að…9´È›î±„Î °_y>þdx ôìÃÙuœ`mаzÏÛfø­«>{ª¹ž­ä¬°%pšßWÚú§¾Oó¶½ÚÖ‰Fƒ ?äɧxÍûާCc•¦k‘!VÖ°ÒÒ;u/½ZsëEÝ}®dÞ3¸]c:Ë5à½pÓÕZÇ[ð¼S’|ñx-llΊ×óc/Ëjë0/RâL ‚Z_R¼‚VQ¼ŸHnÑ롹‚°n2`Š˜wìSÁ¶O@XTÙ[œ aÒ å/Á½ïÜ}‘ßöóL«Ê>˜xýfYÌK†‘kUäè6xE<êl•Ë‹{§…_WÙ÷~mw¼Øºg©é``ó^¿›â! yß`ŠŸº¶ëI."+šäyÜùJ}ø 6©*€(š–ÓŠdålzfß+÷ÍÆS¶?8ÿôœ"•íVõc/^W@kø‘”¤hCx ˆí5nm‚E)C1íÆûÓ‰˜~(_½úña8=È:á‘ ‚Ò›, ¤t,/ußkjú‡µGì!<_¦ò”EúèaÇŽz=pÕMZîïŠðˆºˆqj›4¾tx=õñ­`£Kʹà3,÷”|¿ˆR½)ái4@ öª±œ™‘Š™qûér~›aÉ•ø‘_‡~%ѹUJ+Ǭi&¶Þq˼ †Mœ`g4Üןl–þ¥;YHñ”ú&¯@‚®ͺ¸woBÈî0¡¥_åöžI°B„Í_ ƒç2Z•+º®Ð X4Î6wÇÕ—?}«àJûwM»0×yׂ³okHŸ·u™ÑáTöÔ½L;8±ÃÄ|ä[xÏËÆµ®,ü¦OŠ7Ï@‚,FœWþ¹õÜÓTº$w¡6ä.â ΊS5mÞ—!è®^Vw†~j\bÖÄ]¸üœt8=!£§_ \+,h+vÜ¡Èü ?(ÝìãÃMð¬vj‹.\ÙÛv'ÀgÙ>Ðnƒ xÈB.•©I}Š©\óKT× Ê%}PHeÞ‘çœO 2ÝX?ë$„iÜ»M%7ÀK2ÔžÔù7eœHy8››tßdgƒ¹Ñu^ü{®‰Äëa…½'_Ãk‚©ÖBhÀ}ïªSÎ*Ã1—Õ­•cNÖ;•WY ú.ïOÏOae—¡²¸ÌG!”î2tp¶¦‰a£í”kÉGÁ§‹·­ü=>F_#€û5úB࢘–1ØdµÇ‡À7nÎúüL’ÿL•°Å· à2L4Žìlàõâò$²“ù¡Ïs)~Òz—ö%Ì­Êå0 X#ÙïB¦¶ÓnUŒñvNù–G Ô—O4aOw/yä"@Çeçje˜:}$ï²a~™”£ÙxïóÛÌ˲†ûíQ†Eï?ÀöÔÅ®’Ê"XÖIú×wd÷hYÈ5øŽ'_·ád7¢ ÁJr—T[‡ÐØÏm†7;À¶oKjêµGwþxVB- uí·›Í@×Ó¶ûhª…Yg>Ä–nP‚w[ñš…Å` ô‰û°íòR}¹ålwZ8–¦Vj#càވǓB¾hP<¿ëûæGÅ &’§ …šäÙOÕ¨±üÿqÊýø´´rtä²Èhòƒƒ¦A“|˜ˆïÊý$Ä|7_)"Z¸T:ýÛK~F$,Ž—Ð<=Vù?oO’>]¿8q‰äo´þ:Z…5 r-cran-shapes-1.2.6/data/macf.dat.rda000066400000000000000000000022641412660331700172500ustar00rootroot00000000000000‹…•{LSWÇKyƒ(œÈKP*‘ ”9 è—Wy-·¥—[ʰW܈(š:œ"ÊÄGDtòPƒâ(¸ 5q*nšm ŠÊP—ÉnÇõ™4žäÜÏ9¹79Ÿ|ç—+ ¦>4¡L8—£ÇÑåpu™¥—yè0{c†FÉt§nké擙̾"—̉/*ý@Ÿ¯³Ü>åÞŠ®ØœÉ»y£ÄkvØÜ"¬;´6Ö¶ÖÔãrûÓr/xÛüùmbéKx«/«‚8aªÖnñmD,œ¢Òó”ìØÔêìߊv—þ6¡ÉçæR÷çPr4C+ÉÓ”cšË•®éía™× ¼½ÐG=2†x§¼”‹I™^Éé3yå:älHÙÕÈU Ë‹·Ù¼QO-w„ÿ‘ôñÕ z–¼üXŒ¨Gν6ªG„Uob'ãmÏ‹'à—ç0˜¯€ÈjÃU׳¶ˆROŸ«2Ö“b½c8Ó ×ÿÒòÐà? ·=(¾ë‹Õ³­\Šømˆö;9ÚÞ ÀšT¡IU$òãõçs2@ž1ß*Ü—7ÕI¾Žø<É|ág»nBüÀ¾…ÉFx«~úܬ~Àqðçœ>øøz«”šÝ0øAæ0ˆ{l~ZÃzƲžTé4ƒ'ÝGÉ^Ð1ä†çó_;³ín ÙCñºq ûÿô¾1©¾’vP¨­—Á{ÀúJýð-x)Züžö"*°0±y¼ƒ‚åjw>ê†Cë,Ó€oŽðü•/L2ëwëSmˆs¹ÃùéÜ\ãþõ'+AÛs·ð„¦ lŠ˜q²yA» xp˜$ô$ðèd®£û1D–ˆP¹ËÚ7gAÕ³ /ŒÖ´TÁór[sc?‚ŸvÍòkÁ棤Ã[žl¾!3:ªkã,¡Lϯ›íFüÆ—C z@âWzØõžh»;ë¾ü”Wøwñž+ ³èúqÿwðí,}'-°´ibcí}DUg%U lŠÑ'n@0*2þã`7ËNɰ@XÚ5Ÿ©ë³Þ'K¹úy¾õÐ]».™™fÉLC–šW¯5ó_³ÄJr-cran-shapes-1.2.6/data/macm.dat.rda000066400000000000000000000022671412660331700172620ustar00rootroot00000000000000‹…• LSWÇËKS7tå!„?Жò*Þ[)·P¤Œ2A¥8Á8GJ Ù7`*Ve2ň­°…Œ—:Qª‚ ˆ¨°™ânÓë’™4»É¹¿sî=É÷Ëw¾sÉ£8–”%‹Å2f™²LXÆ&t×Ô˜~Ñc š³S‰©k’ôkz¬F@ò›Ü•š(â¶³¶Ü)@|袥‘;å mwíP–#A°xv©q&¨îøÅã!7 ™pÎN€ëXô·ÿ)¬Lüéúó&DD$Ýz6æá`BÚ–Ï:J¹N»^ý_ÌzPV„`ÿæ§A,g郔²ôŒƒž1MzòÜRo_jù—ùÆýFUë4"@Ô®›Ó1EÚų{$© vÿµ/Býâ—Or~õVcîˆCi­÷ïXDP—\¦zÒæeZ0h›•ÕdæcêË–d2ÞªÒ™¥ðŽ1¯'«A2ñ QR¡g¬ãÍÇo¹éuP łҭëë^ æ²çÃÑ%A[=Ü; æØ¸4Bº-ç»"Qšóà =p2k³_8 †ku ûÕ”5"‡ÕS“é¦&"à\ï¿ÍÙ¢ì Ü2—Øùx'ƒÿºlykH&?†ÍxʘüÆ0ô°'÷’ïí‚|GŸë‡åÄÊΜ.*ƒ¨[P­ò 䯖UálHjnv×ÍAŽ„Þ›r¼vñ‰âÖò¬uhßÿíóDÐ\8ßÓƒP-=+~’¦UÚÇ~àŠ”ùºÎeæÿ×SÊxŽãéש¶åU9BÞ·çªp_'d“Ÿek¬±¾­itlšG¯;—š— Bto¦rÅývˆ5_?Tqœà¶Öʽ¹ZXó¦Íú‚È*¤ïïEø¡=9ã?… YDN'¸-TßÁ/j~ÃMÉÄ5DŠ¡Œõßúä @t¢ºò°ô‘úÍ•]¬ wÍÛÈ+¯Ë»·ï…B4#+ê‚$`EÁ#“:£ÁlpUp~.±›/œÁŠ”·øÒ »*wö©Æ!œ§_n¥Ýò€úÁ™,êù\ÿÔæ[dÖÕßzþ»ÞÖ§³¶$6e-äm!DnM1âí‡J{VÑ>‡6•œ‹„¢£²½)ÏÔÝìÄô”{ˆz¬Û@>Xýt5ís¬–ÄIípöÅŽ”\{wV„â?«Þy²ï¶ÄÚ4Ë \@åAÐe·† ld¥ÄQÝÿ2X×~¶Â»6  n¬»k[Âï›]Wê£Qï—õ\u×Ðo+vhnê,dÉÑ=WR“`4ÅâJyúÐæXï¼›nQ¢ï©fŽ)˜}Ûž…ðKuiËr=óžï)K>h„ÅãÀ °Ê:Ö¦à¯+© aqKÔÖ ÔnÜ®0È´, ®õÂôM*LQË H3帅’·WƒÜꉷm+m¡Lq²×Únxu‡e„Jo¼è÷ÀcTg÷Æ“¼YáþwÖºŒ#¾–J8oásao–­—~Æë=áæŸÖþ7T>ÏbÀ×£¿üðé3jÌ7ÂIùž!q®B»ÌÊi:ô—DAA€¯/·38QÜËO¡®B‘?¤°âÈDØ¡1\ó(5Q‘ÝyTgÄ¡õòzçx'vÜfY«}ÈI#¸±¡®ù0\ÀéXŸ×”rAòœU%÷ÿ“׺…þ*à¹>$CýbÇCEaQJ\¼tøå¼À¹çʸÔ%õüÙ‚Ž´qI]_æ-3k|`ºc^©DoxD†õvò ]ßèÒbÉc+`™~_LþM‰XÖ…zù–¬É¿'47–´Æ4 áEùÕd7èhn 7¹íq˜Pì °ÛL«Ê+Q\qË,IEû^ ê´o5UÐÈâsÐCà¡o0<Îá( æ09ƒÍ•ÚmÊ=TƒÂÜ.¸Hû"‹As›ÁÁ P€Ï4Ròà 5ŸÁ¼ú¥`ÂZÝÜüÔã—'|Z`CW07ù“²wWmÛ¹I|ªxpúM–gvª}ø[Œ 4:µŸÀ{¨³üÊè\|’*©E8‰Ö22¼¦Ê½X ,CÑ{:c?¼A¨ª•ÆCóÁ­Óµ¥û…¤–l(,?”‡–îÁ#¾˜õ$À.ñ‘qÊK=æ¹@5€žJ,/4\Ê£:¥¯=m1ÊìùY =qœ:X½ÅÖ>TCCtà´7Ýô°Æ!5 ÞÒ˜Ñ[5QÕb°‘ÞšpF8EШï½EÓ?ûÃÇ~Rhþ°5)-,C=…ÕõD÷Š'Ôê4W\ó¢±öpÕλˆNbQ³;¦[?.Ⱦ÷b/Ç hy<ëáJbIÉ­íJÏß>Øddý?¨U¬ËÁ y͉º@O·ê Ø=Ò¨#ØþæîA‘‹"ÌE¼¸¢œ2'ôµ…À¢Íó˜íwd,›ýWˆ”¯¾ÞP¶”T›µàÏ ×„àäX8þâù™™.fçÒQÈub3ÈÑn¾ƒ{£ÿ»;"ëSÒ(zsà7˜t_-qõ2+ã¦íÊ%9•ÓØÐXy/ŽÐ=÷Ût•‡KX¢Ç´0UDÅÙUÞo^–¸¸¬N.Üû¹Î~n¤¸²cCO’ÄÄõÑ!Æ·ÍSO³žh\Ž=ÏPï6Ø•aãZµÞÕˆ~á4P½qÔÕU- md¯¸}//]öë#ç–5d÷½k1qÉQn­Näw‚­ý,\ˇڦAͳ>À¦é[sÖ6úQÑš=N;šåÉöåî˜{dü9æ³²BE/œ%{¼ƒ§ã¸Eë'*D èX&Ü-» i_…3Ë<ê·AÖ_¸A‚/çë!Ä~Kj5äÀ±(õ©UêùûþRwñ\Ç01÷±ùq§ax›MâÓ¶ÁîÛøÑù O[9µ#جsxI¿ýÂ&ê¥~Z² óË„hÁC»±,Á¾b_†b¹øœ«Æö Ùõi¬á¯_YŒÊ€Pú1Æp?K[ªtDÔãU½L·õ0;x Ÿ?×eÜh°@ßm‘!50c²¿–xåc”?HÆ@ í‰v¢J;JsîáÉK®Ö³4§'ž@"ûâÈF9qÍ!°`áÊÚTæc”𓆸B ÿ«ô¶÷Îq€µq^N°I>†íá¼afø¢}I,/U/K9\ôšG L@σ„ö©.§:d#6¾ã±CdÈ3ÃÇåw¼Á âÙ›ßhAï°.¦ ïB@7©M Åh†Ÿòç8Hd3òm†soÐS5ßU‡·Í¢cS~HÚbCËÔvïA¸0+ hê–¬&˜ª»bõqÓ!4MóÝè3Œ„æ-ÀriÓp)îÑêƒ(³úɃO.}yBQßë#ý)×ÔN²}ÔÓj0TÌ´ßÛ}“ÜÃWFé˜Ô¸±žgøVFSš{d>÷R5ßèUèSUH²Û[ ù!ZÑaš|ZÏ€&ŒœáKðP(ÔCööfjE¿³ÆáWhÿ¥Ö’¼ÃïZ%ÉÉUàR¯P$ÞÆ¦§lŒ†ÜUFŸ¿S¬m7ê–‰0s§ƒóKÑrçoA¤òžC“©n+Š@¢¯fÛˆ6€É\Œ#.ºdJZVÐï2ohè[ž½òuÿr)¢E’*l˜V†˜›‘á¿É—7rNÛVpÅP7?žùåêËúfíé°cÞæý‹i_~ÿ%Ó•zÖ«º[hM:ØÜ0JY–a¶mI•ýŽNIÕæCä±E¢Æ"M+ó•& =zjè‹Ð®#Ê~Ó0gù@BMñÞ½’ä1Îaµö²}º°˜–š|ë@C¸`$*`h_ÑûC*©Pº!p‡-«ÒˆH³K©É_È7 Ã4Oß|˜ŽIÜŒ1¶BCÍÌkyŸ‚J)£¥¸Œ‘é!ÊicQB9€™®LµBôä½ÑV2'ìñÌÃûAYAóºŒoHbry>µS“>álëÖ?ó9È_ÌŠf¬ÈvuwÝâý T,Ö÷/MŽ TÂ턳&Æ]9ND¡¿4“`ôj¹æÏ§Lc½¯ÝÚ9“+j¸ ñ¬‡¯ºy —‡z>Ži¡Ðöá¯Ã"(Ó>úOJMU9š¿÷6#»e¤6½Þøzô³{Á¡Æ*€ïSŠVXœ%:Ó‹ö³aÓ¦Õ¨Û4FXi€4`Ø#Ô}[w¹¥œˆ?}Ý~^Icb¹(¨ö5K)¥•ã—…PâÐÓWÙÜF²gÌ­ÚŸ¾ÊÍÖ–….þØ4íž'Èá~²C-‡oÉuöŽn%º©Ð.;ÿaŠÂüå+g̨Ÿ÷}EGMÚ?î70.²9"wž¹WͶÏb–+¡ÊW!NœåBŠ€;ÆPO.k¢_Ôl ÚÛlÏqûÔ0x>KWS;ý9øgì›Udö_ÒÑ6°Å´xl +º(zƱ õK$Víº¾Ò^õÌNZ¤¥9Ñ$­i£©pYÛY¡j±÷ ð˜{õÅe]ÁK2ú‚0¨¡q‘žå,9ï‚ÔàT.\ÿ­Kâ«9Ÿ4"­“ä~§× E¾ñÜb6%0Åï<…ÝìkgκU]ò>Çׇn$§…|DúÝ5)†U_Ã8Ø4„‚ý”8;ŸÊ¡)¡ƒ–êñlvÖœz¥®º’¶©8Î ‚˜@ކ<*lk…¥Q }(>Pfž®¸Ž0²9ª{ }n4Úg\ŒÙxÒT`jl¶ ]‘[+ ˆd«ªvµjY©& ÞuÌZª,“Ç»”VGÿœÅÊnßPrTèI1êdÁ©õM•uh…Xo ôÚ|ŒŠËdk”ÁÝ%<>:šiTøýC1k– WRÂ¿Š…$=ˆs/xMó\‹ªˆŽÂÜÝŽ3.  ·ì¦€ Ï©ç¨t¥ŠëÉþºLÅo…düÄ9#ÃÿŸÙÄ+UÜ™?O±â.Ĩˆ<¬‰#_=ÈÌŒ"[ÏÑšäÓ*M± Àê}ÿÔ—öаYËUì“9¢B« X0£â70Sû˜*4³cŒUñ¯mÂѬàoY±à®?´æ<”TêÉè‹àË{Ã[jP‰Ñ ¿-‚€?úÝé8¾1g¾õßÜÖW—óê9áÆ˜P,Æ<:qyþj/Žõ˜œM‰¥Äb)÷ñŪ³!ù–E®/䉩ßZêsBÄ4U¿yú9ߌz :&2v &4d,ËvÉǵæ9Ä·p‰]tG,”Õ3:¦ ÊZ¾JÆоc¬OÒŒU¼FY=5Ù'ákéþÔ¢zS80„+S¶[µÃ訣B3ú(öª_—ªý‰–/à„Ó÷:$ä¥ilŒi=ú:§!3o0¥ø{˜Ê•¥ò¢Sô€Ú‘³æÇ©—e×"éYS –öÍ‘!$óœ5“WJ«Î<ÊÂ\9o@%*­L‡jiÈi÷l ¶DC&F¼dâı*V˜T;ÅÙö¬SÃý—¿ w̤‰<"µñ>~Á°ƒhÂi”ŽWf4»R¶h-N˜Á­g(¾Û„øýùžê9óÔ‹üç̰ÅFgœ;‚ç5X4”jà‚Cùn™…Hï:5èÇÿÀ0ÓïB,ŒLCê‰m¢"û…Ú£ Gpp±Çÿð^›äÿ§§¸¿(W6Íp\ÝŽ’¦_¼ˆ2Ò.%¿Á.úaé¼'8 Æ=-X lEC‰b©Ë‚ w[b}øx¶Ä=JØrÞ7PCѺN8Ø&øåŽÄ:¡“L‘Þ„Ëþ?÷Ðy“„ØïïÛ#‰sÍ}ô=‡Ÿ w1ˆ7Ò@©gòœ/zäá™Q³Ú GxÓe ?õ\xhŸ÷;õ¦é|!–ð̲6¸K:^ãÖ—L¡9õÎC:÷Ãé}nEYþöª ùø'®ÕÍ=_&N¥G(û/UÄŸÞ|&¥ÌÛN½2of± eÆò7,­ðªõ"?±5a&\"À• ~‚4œî.ÛÃ`5Lîÿà Í,µggMgðüVCóá`VŠ"áWSÈÿÁ¶ëÎóNa†$91BÖbø›ôEQfx*'#Ó.‰ž2î‰C/ãí§“ÈçèÓ õ9ˆÇrH´ÅãÍj:Z|¢LM¯3Ü?ù¤%¬<{%ƒüf¡Y5ð&d,ø‹ì·þFõʆmñaF_ù#Š)ÙQÌÂ$4¬ 3· xK$.…jGË.»ÆJœ§«o€üðíÒCWf”•ÞZÉ€½#Z`M’ÿ_…>‡UÓg%oY‡ä” R~dlnH¬C¤P@;CˆwÖå2‹É_G™O…þZE=g–<~UFë~tŽgü1”ؽV+ rý¨ìØ4Txêú‚ùgùZÃׂ (fÆä' µ¬8?·;xÿôÓÔ‹ìYuzq{ëŒoôMûb9oJÌ´0©Í"’Ôþ»{¦zjTuEè£eï¼÷ô8K©Š¦° $%†¶’FäÂBËuTýðtÆ’4´FŠJ˜d  Å™0ãˇ™¤µöZÆŽ¿.Ñ]½UM_˜iUÆ%ÅþøÚ³{à w}ýó6ÛõB™óˆÍbSðA¶øË]„õ ¸-Äö£LqÁ±4jŸÅERo%kÐ(‚. k(y;ÃXÍÊÚÄìR&]emHA€ö‰¼ÍJæ/¯£èlÑÂ5½w%\w {À­&Ñ lFuaúæ“UFä|ƒ%¬Àøàï¹^$^[…#Ñx°Æi}›Ru$ï˵±…»gœt°ÓÞб"™`µ–QÜ>Ã3hm‰¶`ÈÇ=‡×“Ó" Å5Äæƒ˜UÊ Ì Øõ¼½ üä5 î ãPlÖÕŒ·Ioí¡™]nx'ð~ÐwûA¾><É^Ö“a[Ñì A fƒ‹:§ý»Y½¿àqB‚MÂ趦1òõá%CÈB dùè½Ô•q0€k¿dÁÿLÀ´õíD‘—Ôà¹Zãï Lp}¿U…ôb„øÅVÌeb1z6K¥£to¸­'È–š!^E5mª5“Ø?lÜ” þj®9¢©žçV`˜©Geò6ƒuØÓÇÎaùˆ8§(ðQÑ¢ˆû‚`9!õ'¬w†7øŸùðe%ìk£àd¢|íyÓÛ¼'Ö¼‹ÇTh[ê†B¬ë§}îXŽ ®u&sï?ñ†bÐwàâá}ÙcûãØ8Äö0OÛ:I~ßã?2”Ò\¼'1, À–m1sO`¬à3ÀCY­¢Ç¯e©‚éÝ/™¦^›,Wh?á=ÌÓ½$ä´Hsw<™Þ^–ñÑÝ:¶é½ÆàËèRQýÙ•7Éà|¡a•)hœ‘­;¤6ó.œŒû4JªšxëþnÀ÷¤)²°dlAT¢ìC.u#]ìE]j½n¸@j)ű&¢]Š^mbi˜žz¬ZõÑ:—·BÔ‹â;ÎDõ@S¬Å”Ýmx…2v@Œ™Ãç°r|‰‚ÞÓp!#]ƒ±@²³Àk­¾'ㆬ„†¢ëýi)#Òù/ªÝ_WÁåŽÎ¬JŸ€çú§ú ”PÝé=m¾W¢]{ð‚ÀsÐuÚêAô6‚ÎU¼ýIÖ[s3s£ËÆu„mÈêªzT¸‹¯`¢KPŽ¡äù¶jQ‚Ñü5Ä øGÅ>Ò¹|C¢/Ôп…®}G¥,Ê¡óø´%êúÄ þqŸ~•Êðæ‹däÕüxêi¼+µÎQTÌaó5v‡ë‘ëuÞâ”F±x‡9ˆ: AŒÒÜŽpçÇ<Ì¡4%~!\7Š pì5Ù^<†uâÅÞI3`›dÇA ~×?Я‘#R³]XŠ˜ƒÐdŽœS_âq§/®ë´6OÜ›ä4 B.k¢å!9=^ì9)…#œ»,’˜zNý7®¡S<êËÞcršûcáK±Ö1,kÕ·PÏŒuànƒ”†¡QÏÞ/»Ì.š$ޝÛ}Ÿ [° +ÕþÝw ÈÔg†XN~¥c&¡oŒt›š1õ&ÃÈKÎ/ß5ÍT%Šò4;5S[ë“›XµÑ“’Nø—)ÕZ ÇÛž-š"ˆÅO7o!á©: ¥úÃcªeßÉ)í¶i0ènÒõ‰Ó` ‡èE]œFÙ"Ç* äRH8}1²Ü§âÍïšk&}Jë`¥,¡ÕvÈRBÿÅ–nÿ3¤wRBHp]Ig&’;†ŠAùÅ~n²&‘iÞʘHQƒ¼Í8‘‹b×qѲßs Kå3Jsy¡€ÃÒêXWÿÕXg"Ü»¨ÏˆÚâþÈÍc‹1îpõ§áÁ·LCx*eR!>Œ5CžeHÞ¢·äSé€ÅÅz³ÒyI[ ]Ò±£·ü+츴¾Ðò¤Âí·ß´¹^™Tµ)õ¯Íðr²o}¸g~)nä@æýNIͧfTm³oüÀÊ‹²5Žë¯~G”ª‚ìù½ÜŠ(¼d?{çUÙí“Fò•ñ3»e?=ã)@ín=Ÿ3`¯‹Þ‚¯a%ïú2\Hªò®¨áïî ‘ŽlÛa‡èBI"ZÆ¡•è(îòªèô6ù8…‘=KâÀ™¬¹e]å \’ÿ\w’nÖìÃ4ö_šï§yi”Öõ)Mˆ9DŒ/<„Ÿ ãÙÞ<’£Ú¿|a€®7,Ïf™EfhDP¡¤óá{¯¡oÇy¤»‘àzQÌ ´8 —G ýÃ/Y 2°]}¢O m·qæºÇ“ÏÖ‡l¹““Ý=·â¡\eC…ANøfé<}¿D§ÿuú¾ûü'çs»Ù,“rsUÕüíx~i”í'ãíiÎ6P¥€¹ê´O2ˇ7ý X~šÊÔ†î'/.GiWŽË¸ 2Äfà‡âõ •|Œ¾m<'™ 'J)Ÿƒm¬`¬f}ûY:µ-f/Ð=P©l`ÃÖ­–^¯õ¶ðhs8Èü©âäjî9£³fTS9kf¹Ï‚„—áÔh£ ­Ù£'“ÉZëñÙ2¿î?¡'ÄaìÌ€Tª‚šU’Ëüë„ôš¦Õlv<¦1¹„k@ñ~—,]P'9…>Ê vȺOEÏïG·œ; ?!ëZPîºÁZZ@3Û±: EþHÈ5B2‰ñðœM}â¶oSVsʵޟªKÑ;†ºU× ˜4áXžØxë¨ð•ÕÖ£áN.+ïÆkýÝTXÛ‚µÂ¾S"NRŸ¾DTTÅNiò‰~©ãPrÛ§7ƒµMU«GÌó*:˜=³ºÈX7¬Œßs$Ò}(œ§$Ù˜Ù5¢ÖAá#3ûÖþQÖ)“)Ïä>o’“ÀüQµ=výß 7¿ª³=ÇSåÀ$!r”]ÞIÄ…GtÍÏÝt$ÞŠ(ÇÃX?ù „Bï‹'Ÿ–Eh8Ð.Ž,È®j î8û‹òG‘HY"GŒ€åN þLq$‡xPv:U’ÔÑ U!Ô#9`ÆÆ4u2CnŠ„ò»Þ€±ŒÒÈ. ò„»# ö„ … k« [mKÚí—±¯qtA@é×®¥­£iY]ø‹Oî/É€z©Ã3=ïB¾ž:Ý¥¶jà—]Ä.J²œcâ>Ô ˜Bh[U÷_ëRüHgRÿŽž_çñF&¼÷ aSüdyÕ°j¾ºàé•( ãn(€®njõo Õ:ï[ö>Á&µ-yJÁYí_Û¼šOje—ªœ¡sZýùQÚÒ,|4j«>¹²Tƒ¹èÝf ·:—$vâç#©?y{(|õ@Ÿ™†hPÙ³¬Ÿ?¡ß:ù x^OòVºªƒs)(Cdžpï„Îɱ™ØÇˆ$Rñ]JÆcÖ¿Ÿ¢êFs©:¡çcIþŽ››W$!b}Â*°†*Þ“:5ü°ÈCß§d\#Wð‘x Uñx ìó%aZÒ[ƸîÖèbÅG¡Êüt4`§º58BMÿí± )˜áb^ jASð\xÁ%¯çÚW/%¨ ´Ñ5èÆxž¹ Ò”½ÝiŸCY%܆޽UÌ­çÑý«Àýb3•Pkݬì¸H§„Tõ>­áJßÎg¶ì®v,»þ¬ÏÄÝa’’®Øzó<„%‰hCè{T¿óf2…lðºýIª_)35 Àþ‹¡ òL9ÞUô Gc¬àŒ€ÆÁðhT#›i€ˆ¥öõÔÛF-4›ümfM!ì.0}îG©¯#𾘓ˆ%”ÈïÉ;Nôüìce^Ú¥±· ò ½èto;QÅ|ŸþdBwJH…ç*œ¬Àn(‹^(ÇÎWpŸê0³Ý#R±O¨‹Í×·ä{!mâQ`¸ÔÒ-8xÝ|ÒPE‚¶ÁÐìg‚BýÜF9˜Êøîsél¯™ æ…(Ö͹À(U¶‰‰"ÞQ‰R‹ÂÚÒW³oåÍGS“ìX‡ó¡ÖIÇ Ñ.‰Z ùÑP{RíÚP*qúZt–R‚eÅÙTèûÙ߻˨õ4s &=^ø¡ßCéÏFøMFýêc›7¯uÃíÀMÝù±Jýl ":ð’þ*`ª–~y^”>>`íDýÓmñøÆÀÁ‹Ïœ<ʧ‘Ý—AûèŠÌ¡‚xÒ&ÑVå‘–³Áͨ‡_s'ÂOƼéä­²“Öó‹+ðdÁ½°Œ·[(‚üè!¤ðV‘¤µ?s¦õPº²±+Í8z!úkœÅ‹«â‰%uFüÀ®¢ïù¶N©rìêèY—÷3K‡†|’Aªß²›§ŒöU¼<Õpb‹W¼{t¦X‹?_ýE;+ãã€ùžÊò¬_ÙfÝpúmÈž¨N=ÍãƒïMdSþĈ‘7¼ìK 1Ï®~®’N•ՉथÓÇ2tÆ r©“¥]uaÉЕ2âàçß;ô@@Ó~éòµíŽV{ÍH šŽÌ•ú¼òSãê{A*ƒÇF°~ì(]ˆ XÏ lðz¹·h.™¹.E¼È^—äÚ]JÛ±zâ«3ùV!|Tc¶À°ÞOç­–9ظ^”½¼Âúà¼Å˜1:_úÒ… eS„\`ª§eÉF£"!-†0|ÌÙ©ŒËxnˆÛCº‹`å¤g2Õ‡Æ÷__ío¨/-€òÈÒð#O’wæÀ êe]vÝ0œ6Ï>$QÁ…ä9}¿[)J[˜‰%>LHpŽcïGÞÖ÷{)öóÙÒËõ!f—B:è®Zá‡Ó^£ªJ5íÇb"™°:/rÍ,"N÷ª%z@ô¬ô¸ðpÔ¤T° ŸŸJÙ²!Ò¡ÌppÊø×€¯.RÄE0¥‡¥«3ÐPðôl¥[MT—MÓÃj¯’Û€jdê*·à!åð)¾ñuöbÍrôËÄIw¦&ˆpÖù¦âoÐù>ÿD`B¦‰8\~½TÂmBާRÑ€ŸÑ:÷F£˜…Ε‹gz YÒ3f‡·úoç«~ºÜ’€PµuéÀUfHUÚs>9’Å/HñoE> ™7÷‰¬P)CrIYïH£)§n“ìe›Ã¸fo]oä e1<¸RÒ]àNmõÝ2µÇ …uŸ~Æ™qçEltæ Ìh†ÇÃ6_–t“•CöŠô©sLc‰ ,͉ Ì6PfpíÎL{`aþwþK·Œ©Hü|J1P©"-×7w‰á 9€À‹Õ¹ i¸W‡¢˜Ø †Ì¡9ý‹ØŠŠèƒ›" ¬mlŸÃ?¼ÛꯛnS¤R§aÍ*Ÿß¡kU:œ'X~f–æ÷åê«Ö>Éf.i®˜  »žÏ)º«Ôò/ÇHR˜[#bY*Èɱns}δÍ%G‹vh`QÄÚ|âØSg_qr˜ b°.²IDgHl‡Ø‹Ã©/õçê•¡mñBQÒVE\XÚ²µÈá5Å­çÓŒ8!€U¿îfºØ™yܶštå,ß”ÆÆ$¤™{)_ì®àRG¶DcÊWgR'h×&ØÖ¬xQDzÖ¶»)lŒM[¾Žö¡ÿ/–|Ç(ø¹ó¶ºAf|y¥§ >†ô>®’ÌžÑØƒzRD´p`L_E`gÅ#a &ä©9‘"®R•Aíkæ+?e)ÉËæ¤b´ñ2ÞÑŒ³ 5P)7pö­é‡§t˜aYþDaœó„¢ˆcoú/ÙUot¨ìhSù1Ë©°©§EÇÑ´A½Ã3ð÷šÌÕ,“W¢¬ÞU½mÂ)Sà”¹¬MÕ#hïTˆe* iC^¸»©éìóûô[RÿzA軂ûÌ ùšÄó,n& !¼¼JEà @£¹Ò(pQ®õuMC¼«ë$^¤²dϘÈê'½<ÒdQGÀ ž`+á6!‚ÿüI…K2Ý#Œ[lÖÑV4ÍS ââvyÅõ–`±r™Þ©}è¦A5ŒîÆ/ö`£Äz}yèñJÔ¨¨MÔ8 åž*çL¦Á¦OÈQýL8êUœÎÅVæ ufÊú“õ–ë#lí¥Ó·¥wlC#†ôþX ­Ö™Ö«¯ø¹êvøß KÒ•qMÜqj¶¤¥ g„OäãÈ/ôß™Ÿîr¡5”b²;›¹w–2½[– hÛŠiüdTèíw.ÔÜœ<ÉõÀõüó¢?5žfHvæ× ìæ 'Ñì1!ùoRwìª!káMتw 0ª’×Ó™ž‚¸‘CÙ '[µ\T/‘ê?Ê eØ<Ú–åëÁJ9«×=k0Ñ¿®êÅñ%Kw:ÏaŠõ¯¶£a®!iUs·Q¿ÌÕ$+£¹"X`Ò>Ö__¶¦uäý¿`Y¤æÊlqåS@ÿ­Œ±]â×e}ÁNïD§¡èÔGi¢üDG+™å.FFÉe}Uõ’ E&j÷œ¾ »{2Ȇ–³‡ L5óâÉq9D<åð¡© óà¶:çÈ^G‡Ü•)äó¢Ô+(Úƒ1Ö†a#™Ý´X7VæÑݾZ¿æ9+æ=è–¿8&\YÚšà¶Ü¿+Erƒ‰¯ÀE¢ ÇD‚PüÙ¼(ˆ·Ì7a Љò ˆÏ ~%RöëùÖ¾‚ÅB•Q¯Ï5:æ”oåþøG,$ÀФ NVð«Ñ€wÏÆVŠeFoŸ(/¹y:D©L%ú4N©ÒºÏè:@Î'’´ /ö{\¢ðš + P¨¨Rèà9×§÷ãÛô9÷Lô" µùKèó‘iŠä2 O¹S`Éê£öCü%R¶ g’þÙ0½øÈÕ"ø@ô;Xlœço›‡¡ç9‡aäd·ü»*Ñ–‘@µn.˜Âl§°íl*øÞ4>µ²q¶Ƈǃͷ¢§Ôf¢-õ€Qf¦ôSÇKÏøêÛu…î;3\GÙÜ»ÌCLR¬rs•¦•{­cO·È…»ž­²U„g ݇:¢½Ÿ¨0¨Ú? — ¶Ë„6ƒL?zB¾®vÐйš~¼Þk§þÙÏÐθ¥@j¼GO Î p^&ÙfgÁ84ž2Uƒn*+3®pF7x«Ö”÷iU—z#ãÁHY‘«˜YÆ8ÕBžmJö³_ò™ïñoLæl}0¨½¼$cDu]凬µkF³ÇnÇ•çþ qNÀ`é%;€Ð?èàùýµ3¡øX±]HBØ äÐX<ƒîع8Ô@*”LGÀýwu^a¾–îpõËåÕj‡ì%©–à–Ô=}',_ÛÊ8”1ÑMÞ7H´!§Y&Á÷†£èºR`ÙöŠ8º1lÑç¸* rwÄ­à¼T/6¸‡È $…ãtw/ù‹>L§‘©-2êðjÖ̓~Z zY¯5Î_¹"$Ž´š"±•ôY xj|êba㜛}±k³ïÐíš¼}Y…û–òHºEŒ–ô,Yä®"l¥ó¡%m~Oµ,ì9Œ©7#¸Ø#+cs`/zmú2…­×QuèNš #ç™Ú7.ü†ÉôÃÊæþqz¹† '~56·%ö¨kP‘ßšò DRÝ7îÕ=fðð‡KÚCÇõ‚»¶Ÿ®°ÿ,䨮Ñ;;B8â䦩LÌ¢iA  7‰—·ˆñ˜2… ®n‰r#ÓÃÀ]ÀÉ«"±9û_2ß'ÅëÑC?[!`×Õ=àEe¢Í,êºãPn{úé¢ÓÚš,ËÅŒ²j¼¿®A™š j­Üœ}I¡9‹·7û IÔ‹l‘jŽ<&ÜÕ:ÄÂAB¹Œ‘P€›ˆgì%«³.?¨ Javª‚àéìhî£"ÛÞ ½Á5FèQ†C·ôE{í %Ÿî¼zF; 5L€¸ŽŠóïáÏ5R5îfúf/ü@«:öA¸ÝQI»÷U±ýþÿªõRûÙ‚çŸ|}Ò—o×#?ÑD¾CýM³„ÖˆmB*Ì=9ȹúë%ÖYžÎ<-— ¼°¤²ÂEø±ÁýòÉïÍ Š›#ÖZU+“Omï÷Gœ¨¡Ubf’Ô¯²õ‡­çù¥Øê½IHš˜o”I.Š…ÕAf:š/Šmô³ÙÇR}DãŠÖl f#lè!kÔ¨%eS‚sQ %6 àCªÜ3tò:B‚küýßüØFVúÜè&€Y<³èÅ 5³f“ë˜Ô®ÆAaqmˆ&``]I»ÙöåÐÿ…8¹ž¹ïv¤G’Tò`3eÔC(ãWT²Y$Ã]ÿŠ‚zÕQÆÙL•b«m1Ì ÑÑ»^›±’ûb/ôépyRàœÈÖð âªÚ¤Óx‹È¬í‹2áj@ ˜®?Т÷èÕ}ÂYOµÏ‚=˜›vlúCwŽY€ ½EAW’1§EY® ô5;´‚ çÞmÖ–\´GgÝ+“r?·ÙÞìéÙô“ͪMe)`|DZâ¼áG'OyZd )äç ÌPpî׸ÀŠÆx*ÈÕñU y¡èr¯ê(®Î®çwù$°þZë…Fg…0j %ªï‡q;O6ëöIÈ Š› ÁÂfÕC!ûíŸ$AøÑG‹çƒÜElìU'žäv!ñx- ¹ïÞ@ÇKˆÆæv,¬vÛ*«¢(ÕhÆ›†í„;ÄÁc#(,{æý!®}=éºA‚A¡$ä®k‹àûõ* ·µúhÚ¸ý%Ħ$\¦Ï Ó`j‰3 ýöá=Ê=ú2'Wô÷Š3±Ås"P‘®Žês,å8º½nî,È+G´Ü}Öü*C3}ÜB× (=^7GoE÷¾uütoá ¼ÅË­Òäe @×ÐÓy¼)=E-ŽGRvÝL‚T–Z$òfÇ—rò³è†#¸ÑŽæ“H °Yb(G·¯÷Hä'Ð/îfÈ`»è©Ží²áõÍ6@ÿâ5ùH`‡}MÊ@‹‡]{ŽÐåDGK96¤  Ô¸;mÖb„LEB‹y¨üuaÙæ„N¸ú—°”*Wáÿ/{íÙeÛýz\ël·ðv¾Áf8ö?—~4]°dÚ7< ®PçÝcykÂpÂJ…¶nOˆ+à°žjZÈ)E® b6Ý;éì·Úüð/*܇’õûž:ÿïÚÖ <Ø$Á¿ÁÀe‚8ƒÆVϙᷯA`}#R0Fš‘•Är‚kÆT7fÂw¡¦ñŒ:;&üLØÞ"zØ8Z£‹øÃÒª”ÞA Ï’¯Àfºäô”zóÏ& ÿêíjºæ*“˜§BÔáãÔÚ,ˆ§hj!r–×`z {¨ÅiùÒ®‰‡y%Á»:%(CÓ“çLÓ+sn«—•º,*ѽæøWd ˆ;þêo­°vÕG92ï·Hô&Þ‘ßìXÑŠIPìõ&õ¸¬r¾RDȈæ5!å; ò?"rKì ÒTÅZë"Ö|žývN) ;Ÿ]Ó<;‹’î~ÍY1ªKÈ/ûj 0 éfÏÌÖ¯ù8sµÞP iÑ<[…~¤;¯'ÐüÕÿù©jR®nÅvˆáY¼%ßnõá&íEÆ(À×ÞÓmß -BÿÍôÛZ{r¿V¦¶nAS’YOÌ@ÞUò…ê¦q%45ä9h«òù¾¹øøf¿‡j™c¾½h Þ¥‹ÛŽ-)„KÜ‘b1_8æ7õ¬ÛëòNÕåcT ðàŒl XFÓiƒŸò]—¶ª©Ø³†|€n–µ<ç_¢îT[Þ9Þ—7Î6úbÙJ©a5åË>%!!oÀÊ9±¡Š“ÅG‹ß`pLÔàtöhòfZ×J’Y»žà;LiŒK ;ŠÞX‡äú4Ó¢9¶pnµ]„_ÚœZ…ž…nÔxÑTÞöLÍ +ØLãm†9©®ÙƒTKöôOú€nôëÒ­è’LÕd˜‡“û"tÉe$Y{[K—ú …ìWùšÊO%Ë ÅÛÐÉmÚöÏßû½-¥àÆ'TÙBîY ö¢JË“¬)ÈúàŠÎ"(YÁ‡"vþJø•Ü«×djäs{Ñ<Ç/ Ä…LA/À/¹¦„QÛS x^ìÉ Øë‹zŸdD.Ö”¬]FEÎÂðƒc[¨« °¶ŠþSÅKó¨ð拞„J;íßÀ.åN·¯àuˆÞFŸß܉r4>óÈ’ZA:o“¾½YùHóS¥ŽLƒ»Ç¿ÊÞABƒîÏždã«lÒ6;²wB6鯒ÊÌ/\þÌHŒ'`š¹o0+ƒ7zŠ`µYà[$ߟ‚ÈÛI`”ÞÈ(€<Þ‘¨KuÃPOî%¾øûCƒÀ.ìf;o|š¼y6ž~Y5±ØH…èÐÕî2'{ ý´pa¢Ãä ¾U®ÀnÐ6qÓÉüÂ÷‹'ø­&…Ó{4Û?¤–øŠpæô/®-Õª¨¢ÈCn¾Z>Òt(ß>ç´¨d½“7£‰¼7,bß],ŠËq_Ò\í+Ùj› NE-ÁB±íJ`6tý«–C¢Á_VQãÙI¶/0z¨¢DÎúûn1eÄÌìï ‚}]5; "{lŒôº¬¥þ›'uv'Q#SδÊìã–)õl:LalAbûfŒ·®}Rñ_Ë:’=“ LBW9ØEù‡¦BúßµÍ Rð mUÒ¨Ï!ÌšˆéGúšh´uLD©™ ö|\DYÿÊ£¯e:"tEæ}lÊ7®>ÞwˆöL¥¿a<%w±>†„äêºY.ê´Â? 0ÌŠ2ñ›Öà»!°³X@—ñ}‘‚òþ±b‹FÛGõÑήM6ÀUwe(œ)Ð ƒ­i}ÿÍôØ^•ê Rלå±t1Lå„ã›Ç<œ”ŽïÌ‹%<@úâËÏàÞ8½[ß°Pägb rÛý3\Ø$Ød‹ÂÕ籨Åe¸ùަvaÒƬýµÔqòI&hËl€õ³2¥6t¼Љ}[wòjø‘CzS4úu¬Èô5¿áè]X)uÖ.‚ÎÀ^·Ð¼ð•b° È5±Ï’3õ:™è"”~ ’ÞÍd˜© Àeƒ’DЫÒ]ü u *9^óû§[áf6ôàÀ©“œ^¶Ü!;µœ…f2®ñeMñØÜ° ²*éc~Ã/úhNËHO À‡hEQêç VS@*!}ßr¡@S “/L4®@Ñ7x[UÑs®Ì•¢µoVÓ•QyÀû")"8ÍÎÑÍÐ3£\¹à(sê¥Z*j)%_Ê7Só~¯ ­…ã¾Ê»ˆ…ɽ‡9€C¢Ú©‚çŽt¬Cè]¬yvJEß;¥YIÞ¥Ž›Ì$ñ À ŽØ÷Ø>«‡*ÀêÀ±úgÊ&ñx”ñSÆN†#ä.„¢¼Ã[EŸ0J„,›?Û²ð<°Tbý­¶\`¨ð3>Í¥½uý³ôg°§'à©Ö_m÷ÃÊèÈ+*oFïÔc/!XÂî?Ã(ª™ TÖíäz(¢¿51„¡mGÎÿpÑêXsÇ~Ï‹¿™™¹Ýg]便ÍHIMÜK|No†N8=á(’1´õ©?è¶CÁg!™Ÿå?œ i]¬:Ê\côõÖ<Ä»œ+²áõï‡Ä›qûwQüR Ý›yÿ%À ¯#hÌGhpx¤˜Óóìg-ý<峂rÂTá/š´¯PZ:WÙéÿÂcóT®O)Vk²mÙ…úQõch<ê pð÷ôrk  ³ül„ ”{MRÔ w êX}¹¦#!Þ7D…3 )‹;‹‰¶Åüˆ„»Ë¾ßo­7wÄ—æ™Æ2= 4‚Íoz ¦Ÿ1Ü&+L¢5—|Ò}×òÏÛ¶ˆèþýË™d> ™Š`¨F`8Vó½ªÛ”f¦ÖÊ¡ AA÷ëzóT1Ø@þW¶‘_˜½HÞÅÍMîÈW$3iô:ææ {0|Ý*,ÃlÈBbl·ÂÕõð,àW€]h“ºE ÅÌë)¤•3Ï›Ÿ%ÛNBçU2ÂK–<¾ë-*vÇÜê|²Žyîq?ùä…`qúö`éH;®hJоLð#:¯/ÏÌhÇà þbô8·ŠHÕÂÒ]øè]¿¬)žÚÃTžŸüEm7Áœ÷ƒ2NÇ#Aö…JœUw^NnѾ¡!aªƒ@€£õ†ê몚OèÌ„sigHÔ]‹²ªúŽMMÁa H‹H×{TZn° A+ÊF—zÛ¥f¥wÄ¡ð‰Û$;_~£UÿO| H¨ÑH»YªGY3RicZl˜)k^§Ü?«†+ÍÔ^ˆ¬S ü›Œày´›F~R_W·†Ì—ê3oÊÈ¡iѺºc˶Þ$âUÖŸz®©cóÛœRaÂÌŸ!|‚vòå†`1»B„Í øÒ_L»i+00àÎ한!¿ÙRqgiû†lqx" ÊzãU«•–.vÕ¥X£yó=ã”úäÙA£íXBö¶Feúâöýú²Øµ—ºØ§×ê¨xF™¬|°»¯Ø“›Ë¹“T´V(i[μáöÖr‰Óª,·ÿÞl= ¾X¥#‰BßleLMüö(þƒP%4Ñ  èÕ‡â¬?„Ç‹ ¼ÕÖ}ñÀ°i¹aÅbÒTgÛS ©} Âcª¨Ž2¶%ººw4IÕ|fBjždé¯iÊŠð/os˜£…§Å&f@c3¯ÛÐŒÛk ßT’ÞašJÓâ˜-/F;BǰñêDšËCǨ#ö@7°½ Ñ›qá?úÎ’e]Ζ`uRëy¼ú9«B‚<‡íìÍîÊÎÓJþìœk—ô½¬ V‹<ÝŒ§ø¹M/E´ŽG¤uܪعø“sÁ6¤~`N…;í‘àßnëZ©f³ÔcËð§ww¥ù™Ùâe‘Txã"8«‰1”Á7›(v.ÓŸâT+J`ø&a)ò©»^)cCÙòôèGZhOvY-`‚ f`U:ÓƒKº®Õ÷øÈÆJ•½L2Œn¨¡ÐZ±f5žBx3>¸ÇX„.…!Ü#ɨ䮇×iÕØ¬.¹ç^Hý-<†VÕü1Z XFÑæÍÒy1 ]*,{¹¨ÅðÐ9ÄT[ ¤gï•«gù+­o‰úmßP¢¼lïçx뀄+³d®`SQgúZ“”‚$Æ%»#$¤b/¢¨±tãù¦6i‘n&ÚÀIWìÄD–\õ앜…ePŽßLV“ qÆÃ%VŽ´<“_Ëãå7‘egœÛöÞhˆ (æÝ¥¢¾}›<ÎI—iªPˆ×vºÙx˜e[CçíbŽ)Žl‡QËm])É®ÕH”?I“h„ØÐe>¡?™E_%)Uwƒù¡¹:§¢C¡ÆN(ú UÉÑlºg“±®#†µ'vØÏÉݸ¦FŸŠÂ °/ 5Ëš{Ôâ›INƒ;F JyLãfÙ§ÂzuH¯e‹°«˜m”ÁÒ‰ùl€W5TïO–;Ð.#´ã}¾/†æb"¶ˆÃÏå Çò0?è·ÈÕoONVߟt†OÇ´pþ|u{¥k?öÂŒr[Ú*¸ÏcëÜ¢HpMi˜ðtß-»á B¾^né!®XÿØ…ÆÏ Þç#i„ئïã6}‘[i0Ž)Ææº îÿ˜Â gå?Ĥ³UÞÝÅZ«3Ó0Œª“ôve´EØA›a2»óí âû¡ÏÈt¯¡wÔ§8Ž,뮡çÞ§ö(eLÌá1Fϳã¹Lv$6Ô$Å´qé=}híË¢ÀjÇ(ðeøçÔØ‚gÃb-ÂH3_œä3Cñp¿7î_uÒÊeA}ô*  ª¸ &ç†ò˜%¼.JÓûÓ0(Ú°RJûáâ=ÔðHÎi퉟ëãÕP;†4¸y‡Qÿ vÚåË·ËJz€ÄtŽðpp"8>Á. GîÕJé(«8ægûµúy÷åtÏŒl©p ƒ¬;»)*7¼œk$f’£,EL/˜  ;¤lE¼óæ#\DŽb%›©àT÷~­Z™‰O“4Î×ɲJ¹]/yw4¤¼‰¶”Þ|¶Á8'IØ?¦it œŽ]ÑÖ´û°"ãÐñÆlÆ[¡äÉÞy cŸ Î~Öôå?Ÿs¦ò¤R=QWÏ:kâë¬`z4zû6QrV}Ú˜ã-‘Wí ƒÙ<)ÁO’jËOÑðh6( 0þå.È*úãåL¶>Ŷ‡ß;ØcÖærßþþéQL`(Ȭ=Âjg`Æ0´M›æÓáb–ªô®"TeºT²žÝ0ÃFz]žó©tm­1ýæÉä+=Û¢ÌMË»jôçßôKTB'‘7»œqVÔ”Ó&£ŽÌâ` ¢_†ÝîB~v‰’EQN^ݦ%/£ã–èxYàÈè¤5Ûßæñó€‰i2 ³×!ŽfˆÔ2b*ó_5_p ç–Q?][('\~6ü \kŠòõØ»—ÑM$zZ¹˜s^A«€ÿ÷X¶ÑÙê’Ÿ)À Üba4Q (ü„[Úü|ÍbI:]&ßvÊ/šR‹+ÎûT~ãÇœ6|¦3AEÄϦ×ïpHÚ-˜—<Ø9'kÌJÒGvØǬŠ(V¼U?OãüÎÝ€ÅõìýÌCå».K.8Rî VÍMñ¸hã„Ò]8H%åQ{‹ø`ÔÆ%NÅ_K^#Ô±”ß~4Ъƽ%8zno™s6ÑGsÆ[þÉl=„uT‹öd†NÊûòƒÎÀõŸfH>ùËtB¿çbGÅX3K.R]Si\>c!³õãßö ð×&Äm¸dÂÕåØ%Lz"õº) DmfBˆØÌwy °%;5ù_'‡­ãd-=DÆ€-3}ê1‘$ Uö‡™Y¹DÊ.=WÇB褩zKçšÇ¬SÕɧÕPYï¡âÈB*מP"n‡»¨ë“+M騄jfAÐøŸÖãØOòT“òø/ï†j‰ù÷àæ”|d¢ò˜‹¢n¡±<´;%ØyÀáÐTÒŸXÖþ[ Štyu-PÆQSt§ì9[.¿Ÿ,½U¢ž÷ólöD²õ&bp ñê~F˜¥“þÎ(ZŽÐ„ØöYx&¦‚«X#Ø};íÙCf ¬^P&÷ ².#BΉœ=Êégå3¡çœ×(çÃÁ"±1ñËý*€pÃ$0(ázþ†Ã”ÆW€ÀÜ…ªÅˆ<MÓ~m,cÚÀêâHãáé–˜ âîNÒ(çÆÐË/ܼ¦"–µü‡[4@<ümè Ð«_|9¬_¥ü\h0À ‡,¶ÅúÏ€ú=ÐuðJ˜3Ãñ³ŒÃ&hÔ¡¢'œ:'Džp“¦YÐ}<·Lõ½ª/Ú}kV ŒåËã]ž¦²U«™zõŠ?í!ךZÉ—V¯‘>¥¥(7Á“BÜoÖ8N„…·mõWÓm]u…x>“LmCèy•ˆ›m ’óÆäT³òd}Ÿª': äF×Ìžõ åÖ«Ô Ïöú§o2¬ ü SÏá¥WšI'ñ|CÂHƒÙ¶ù¢Ó~|D|É ¤#U­Ãí«®æAGäâ5»‘ËV›u•?UÄ]3©{ÝSlÏ®7TÍ·Ñu®Ã{Xv»-¶6ô;0\ëlMÒUú{; *¸ ö¥z¨+ éqôí¢Km†¼dj;ý$íû{’‰¡8D…Àt<5ckƒþÇŠÒòÑûËvznÊ"Qñ73œí§’@•G¿Ýç,-0eˆ”Õõ ròb‚àŸ6 ¯j) îœ4~6•Y9ˆ#“nðˆ Y®ìºJ.ñDÉ&™>¦ÂW§òìaùî"b±À ån[ZÔUzû¤ò†#Ê%¡*Z”BôLNá!Læ?·j>ñ9Y 8‹7dÛÙEÚ£Ñx§„h$åÉ©av‹ËsAÜDYÚKº;Âz£ÓV¿gkµ˜º!‰¬®ŠulYô„jý>ù†ý°Ûó_ãm#gœr:Ë 1û«ž_¢4‡Ùþþü¿V‰\fvWUg%±9Ÿº±Ëë”—qÞ9!î3Ó~èe@ •ó ²cöÇÜAHfFbyý¼L(T°´m6‚êc×¥Xܶ A±@åYÁíÿ—{ƒ mû¯õgvŒÌq%æôÕ¶Ø´ùQ¾8Õj÷—Š…z«Ì{Çn†6ÜÚz¹‚j¶¥`b&ÙÜ{53’Ay‡B¼(p]æ°_½`æﺫ]½&¯}·°­É…yäç¤ÏM3ǯDü vÎ'=LÔ‹kge„Ÿµ$à9í8h®…Žv+žvûE+²N¼3²O˜±©/—@ÿ®G5T©Èeu?²fç®^‘^ä·µ¥«l|‚Yð ±yä²3¬tš„Š®Ôè¶Ö)íI³°6O´jé4&bô4Ø &•Â)ñYFê›°tJµI´·ý DÆÉŠ“HšÃ@('ê'ª·t²ŠR…lCX<ÿiD÷2‹[€7öXÿù7m0ÚwQ7±${À¢&Á¹=BÀÚ·VkÛÚV$ç[# %R^=ç²fÉé:Ä›iQÚ¢´^:Å›É÷D·I3Í”›gϧ092¬{‚»ÙQͲ‰›hõ£s ¯8Žxu•¿I32Àû;”éÔ’-o%9ý4YÃ’&÷—óê®ÙÞ =Š$mP?BœíêS.†J'Ý~­±c¨íÂNŽ„cbbJ…ž°~á%UÞ¤3étÉPþ†Çò“Cr¡Xíá^”9»>B‡C4kÍü3È΀ F¬ÀÔÞ©GKû•L6Øî̸¨¬ø  ¢Þ‰v‡ëÓqwyt3DFБR°šPM74ðåTAÇ`Û¢NÃÃ2}>ø¾6l5H!Y›ÝöSÏúS ‹€²¾ý‡ië öÞ߬‡Jõ» é{þ`$šþb‡GD&vGnÕì²xàGd½?õ%T¬}øÐ™Ü#ßÒ5òSf~ó­'#J}_P:¼ ],¥|¬c€Ì´X'zCÐZ´šAÍ ÈKÌPj²´0„·õ#Ù¢ÇÓnbœïýéšûÜÊLÜsðÕGwÞ‘Þ…¶¼¿Þ2ʆUh'>GU¨eq‚GZþeÜŸ>ØŽ_9à|õ[bƒ*%<Úf|« =Ÿ[éa“7©‚ï×+Aëi7~ aèëK´F8ÖUrfrÿª¶û-g‡:bö~”nKjE ßRjƒ´YŠï DEbš@ü~ÎÚ¢b¦—|æA˜q ú>žÈ`M…gó«Ì+p åè$èa#?¬Â³U‰3[Ç ‰£÷l(‘¸ ­'=¸ùî0Xo:v ôõT±Gqø^¥Cž¾ñÕÍìºá·W7 Y.ýÇ[¹† ~^”¨hºüG¢ÜK ",2rI­æ¾}õhÄM]avSH©œÝ1¾–t#éußH '&Y Qå^)·ùwr°Iµµû‹„nK° #UEIsÅÞ‘þ%ÙŸÂ9‰³­ÞxÔWÒY±`ªGÅØ%ˆöã¸q¿Úú“Xå$iÒ5Ôµâoཥ0O6þ Û¥/ñIC«éQá·üÑ4g.¦F”Ž~à`–á…ú•ûR%³ñýM³i~‰üýh,¿5ë Bû <É:¢;.N’`løì#D#P „ÒÛÝ® ·!å¿¢döZߣ>¼®ÛiábêG_û?áJ¡»ª[ÛisVnUÝGZA¿ˆª½ƒxê²­—åf[þ§ëz"·u8hXÔz,o@ÆnQÙZó¥PÓƒz%r>É$ànÍÍæ¨-qRÁ–âA§ÞÓªµF' ƒmrþê…ŒðODÙ^.¥ÆúÔXPï’C-USM3£¹dT”3¢ÖÑúÊ»Áà,…Äì=Î I4`n›Á9ÈAN"y΃3·LerüÔ[)'¥ …`!vXK/Ö$%`ŵ8’  Fúm€]î.ÛE¥ñýÉ'$MÄõàIñüXòRGíóÖÆÅw¹d'–¢¨R¥Ýø  L –ï^J?á 뤿©Ô;q |ô i‹ ÌÉàtW¯„ïÍ«ÕÓ­É]->hñ…9¤„ûh<ƌ׃!ª3sÛbYãVjVcß5‚‡f¥‡4ÍHVH2L2“Ëbzª“–Á]dMVÈÞoMú¹$Ü?æs„Ý@›Xz[Õ¨0ó)­$«ë»œ»ÜÒ¶1_À½¡‡Û¨ÖW’0›¦ï¿«~'Br¿°Íã×baŒ›G¼L­Ì òD/á"k½l´¹v(ìoß—m— Nâ†ìýÌ Ÿ>~”sü¨Ûã`ù!°?˜XÔâõçC0eŒ”7š†ÁƼ6ÕÜÝty/¯fËl—*Lo”ˆ¥cb8í]'÷V¹ŠîÂ?ƒíìÓpì›æÑ¾_÷¼¢K#Â?ùz¾„køê×cv:rQ›o²Ø÷íuІ"3F/”Àh÷Œ|¢lø>]Ô#`b.*oŸž(68´ÅŠ0ߨÃiÒ˜:nýTm"%²ü{ñ×™Ïô8?™ ^ÅdšVÈ„K{›¡òÓýÒ×T&ƒ9âÂ’\‡VKÞ¤bùѸÜÏ_ÞÌqûÜÄ–S*èc³ .{03†Ô´gI6šLމYü¹.—æ~’¾Ž ÑÐ :2Ï+õÖø¬¦/’ož<ïŲ²A¡*ÝÈ"L…éë”Cç;¢ÒõéMM¶ ‚OèÅ&ˆx1 ªT|¨IYSaç‹8ˆ± QåŠ 󃇦«cs—choÙ¹YqÃ]ðýƒ\Æ¥šÕl_ëž×|)9yù²×r”ß8Ïï(Ež®?Qbk®Mõ™!$šè-ß%™yhô—¸žœ÷ßÓi~¸—øëzНã:+xvÜÿÈú®íò¤aÅ Šï•à|"¶úDöŸ¹ l^ØŽûì ‡ì‰~•Ff&Twì²TëÅIR ø#´7¶ÌAúëûi’sÒΖgçLÛ±‹ °‚ê+jLš ceà•¡êãøK!xæÆ|~À1BûÌw¦|mÑÁ¬pÃäKp’ÀÒáõì®ä‚ùÔ"À­öxÌ‹j8„䵿£=QÕdwG25WX¸±Žç¸ë3LéC¨Û÷AÝœá0%¢GúPìÞ:Å/äÚtX\Ôù0(§DÅb8<4}"¾l +[¸÷]%©Jߺßz«í5ú*çM o2°Øy^nÃÊ, ÀÆÅ×~ל„¬BÖU(-†é¢£,Y^†ÇO9Ó­ÀÖÝ;*‹àÜù·#ìʰp?ýH~èLÕ(ÿ$åLÚmá/Õ°{ÈDVŠ!2VTÿ=Ö"y²üûØqèTƒQ!T7ÍûÝÒÌ|¦© ÔŠÑ_ß.¾O²†Ó·¼˜/ß¶MèÉS†'íFÊæ=â‹£ð2ð¿†j©¥ÿ¶t¤@ZÀTCŽàÖ=NÆñ}Òoè®ÄcDåüW&&ñžàã4¿¿Ú¥ÒM—©\ehx‚úLáM2L7[1îÒ§ûíóꟊ Bûã×Òë`¡úd¹âðW'ê° o¡œ‡öµ[²R÷ÂBz|á;\(½ð²TRR>vxæ,Xd»/b<<ïiÝæ?ùX´ðôÏGDY •|¬±Žš‡~À±/9ƒØÄþú¨ ²=ÕËæÐìê²Ú|€Üí¯Td’ÖL“7ócƺê3a«ØzœÅ1æòŒ”h¼EKªòÅXA~´’µr{3é~èHÂ?׬ë€T: Z4tø¿-˜;=:ó*ÓìvP fÁuŠ­4Äå£5PüƒÊ‰ÚA¨àTøŒË†ép¼g½B_ñÜ¿»½ÙrÑ€”ß¹vÜyÖÒ¨ñà`.Èþ'@X®5³MúõÇòˆ¸ÍÆ£ãKÕ/LAÑòPÏ®d;éÑÕTßãÿy°¯ŽÚù¼åüþ~2·áü:ΫÃ=÷ÿ€¡áGý­v+«©ñ‡¯(/BR|öcýØzµžôDµf´ê'NÆ1@ìôúþJpûw…i”ê ZÇÀR PÄÈ@aV©ù.6˜Cäp>×XÖ~âÌoÆÀ…ŽJÊÂ;„RnC«ó9oȤ5 RÞš›Úlç´Á¬Î*”8¼„hôýȘ›í-!Ùõq5g7]àW–¯˜)ÓC“Ûð¢]3žƒµ©Ë̪·ä>Áë ·vkzÏ·2sc&Jq„ÃG\Ô~csW¼ôuë@gE\ó0œ÷˜ísÁFñpG´Æñ™†G²OMúr´Š/Mqƒºÿu§%²óÖÞ÷(—ÎôTDyõ~Fó$:•×GØ0þ†Ö3î=bA.ç»b§ E=›ƒEôýz]ƒLtþâyÄUG#1%[±ö}Þ8²è6“ó°èFÿ„%¿vUgšp>\Ÿ€Á—þ¢9ß^ë¿Ué:]:ë©qãq¦4yO&Ïl0ÍÒ=ºëc5M^q‡ƒÌ¶¬‘þrÂpÞ¬Ä*C‚5 !Ù·Á&Ö6|kô+™|mÕu*§¦…™ÕUg­p´ÄAVœÒiáPÿ™™„U¹MªÏÎ( ¸ÿ/îõ b^Jb,á F `&3J̲M§Óìõ4 yðþ"sbÖªä62tÑ»dÂr?Jäå£/9eA¸öŠGö ¿”ôgj³,v+v&¦çb×oº;T#¶V,IzW­n ®-_¡”“v†»mE³ôK[]Nb×þp?ôÃ$šÛl‘[6ߊô„88F©LT H²!Dƒt†¨>‹ Î-†[ocïc—v³1V «?A‡)žÓ[~ªE66¹x5o­‡¶TQ-J¡I}ÇìPê+[LÜ¢Mj7IŸmÕãÕÑ\’&ÁÐUÏU7„ŸµüDw´³éSM¸ÞäÝ^~(Ñ+æN£Y{.$¶czñË—i¿½~pÍ£Ô˜Ao7õ•%Á¸ß¬p‘ó ÿÒQHöĉÜý^>Šåì”ÐáÊŒ¦ìج¼j:µù­§±$j}Ê“7>üÁXÅC³½€yØ÷-˜Z*zÙÓZŠæÎÌ–ÎÞ‡þÈ^%] ŸàçÓà6FÝZ¥UE„K'݆¾Cè,2•GϹˆ$Ç ÃxÛ@ÅÙ¸1éö”‘5‚”ùæÑtE–‘_ªŒVH™ýÈ eh?î¢Ã±è‹)G¯ïÃÃúx®Ä!:j•h;PŸ†xIQ°Î\*Y÷eɸ{Y<ãÙÅH¥qWÃ×'n« Í*N–â‰Oý˜­ ]cêäyF’£‚õÇGÌ£¶ÏHŸ›Þ¦˜ÞÑZÕ¨Ö¦Áë,­_l•gÅübÖº/ÒV´È cnÂ;Fõå£it\”¼Ÿ–zä$ 6ÏÇsh6Žœ©RŸCBŽŸÚ;ÔÙ…@±BÌwí©‰È$K9õ^IïT™VVã]ôQ#ÕE¼ÅDÊDbë$WX]Š–©ÊÏÑ+óŽ´g‰~O0ÝŠºñ–´P< OS¯¢œCR’ËGL]"—ÖÑ!?úEŽæõX__6h×/s#¾pœQ$§ƒÇ|ÁºR~~”nòBPM1—«ùÊË%]ç­ÅòùÒྦ£ÿñ 5ܕ†âögzDHEL˜b®ÙbÚ4}R€•k žÖ ÷èøìyæÓf2É7ÿ?¡^ìÎnêo‚x®µ„›Èú°&wðyþ7ç~iÁ¹\u£¡’üžÉó2@æ«®Ùš†+»Öñ–qÍ¿lR3?‚p£I”.j~ÍçyO¢b¢åØ´ i¹T‘ͼ¹ã–™È,6z§)ˆñë¢Þ.ÑOkÞ¤Ày#‹·+ñ5¨'˜enÓrµ=f+ù;†Œ\ðù"¾È“Uá –¸a@m™Õ­·.Tšœ¤•¨ªsBÏô®ššà­\”—‘•¶n+ñGýÒðÏ Ž®õ>>~ëNékÊLtNx77ÌOü «Ð‹I'E §rÊ+xó|}_Éñ¶‰<> °`g]møÂÒ£ š¶ Á{ä¬i*•ËkÜ-ŽÌ=sû˜†c´ZŒ ô£,ÝAÏ 1ƒºŽô½Ò«§È‘øïS¨DflâIœ©ÎçÜ$Oñt;“)1e›õ &à›L¿N“boŸ’ºkÙBjö0ÌèØ{' 5JêÈ ÞðÀ€Ù‘Žºøè¢97<›i2ž2‚Sœ¥ärýrífÕ ¬£§Vfª—’È ø3X¾×…Ã’Áj\R‹Œ]4ä´‚"6öø ô„µ1{…‡#‘@X.Âÿ=¨8Ö;aÃ\–9䑳ú~ñ=2Õ³…ÈáûWC§¹Dé‰2— Oo…ðô¬^ÄàƒîÓ¤œð o‰W¦e7åí äDâ?ŠŸÔ5±è’ÞÕ¾¬‰ >%&¶^›DÖ¯UßwÔ–vm'Thò¡Czèe_Ý%lPê ªù®ž€Â÷‚{ÄPÂCk¡‰ ÈÂÄW|‘¡{1‘f#eEã׳Q„<iºüÞ'¬0õíµ’‰¾'ÌʸË__Gò=±U¬2O!ÕÙ»µÙÃ~Ç®— Xe€ÿN Ã1ÃiѲP<ØH¤ŽŒä±Á|±äSU­ÒA&ºúbuŒ{ ýëTÂ7“zÿWæG…a^a"‘ü^õR+Üö]ÓÜ04{vi1о¥L0ÙÅÏMÕ1´Cq4;ÐáymÌÀ¾¼oüòRC#é7“ U:gä@mžäàD‚[c.+«€£ ŸDªe”j\Û©3(œ¿ñ^ó:lhûÝ;ˆÑà0.G|pì~ ñCdy²2ôEÒê/y¼8ŽÔýnz~Ì4)[/9£ÍD,<››!Sàó4 ì.níWðu= " +ñ°¼‰vsm¢ S7ä,ªºŒ÷î¯o˜gÚû2…À¢:8 §Fw-4Gcï•ëVÓ˜­³k°Ó†d‰½¯ª}ìGÄì }Þª8jm·A-ˆb/AIièÔ+hP±ò÷°šé ÉšX ÛÝ2’íÉ]ñgŽémŠf]Ô)(3½<©ŸaeN;府½@-{OúÍbl¶e·˜MêÎ_Oš!Šh³­;ÄI­±ÒSã“ T*(¹#UÇjþ²çýÖ‰ƒ7rrþL¡WÃÅÑõcôZ“RT D(|,Ù2ÌAÝ•{’î¿ÌÀ‘;C±m È™X@)°uÅpÕ Q¡í´Ø„ýœÑ§c ïaD•èKÕW^ÃW¾€Çú¿„ËÆä² ìÞŒd² ]ÏãÚ‚÷?Þiò:©N˜g±D”ÅÁ¢ çÍÄ‹8Æ%šròÐ3€Ü‚ Q•êÑÈžíõ RÍN†¸:J£U4{¾z8kM· ¯´­Yç&‡Ã F\"ïo¾#þ4ÕÁJâzki¨ÒxHq&×^šÁÁ;ˆGê'nw1/îâGñËV‰ w/%¹ˆwaRf‚ÞfSx–,M«æÛRú¿:³­w™óçhŒðÞk@åBŠG &áÇVëC¹»~x»Tê?I˜H~;Þ‹2lµ ¸ç \u¶„¾72ȯö®9ð÷x~óVËqñ•xg7½XÖÌ(,E¶·ÿÅA>Ývù*Ã(G+Å–Ý^ûã÷ŠŒÏ(›½ª Fú¶7rã–¸ÌFŽ3È[þ2l?îwÚÒéPV\¿KÌÑ$EGÈG³ÚJ@ât»îwûذ?.ÏÙ¬Š7'‘¡x{ô"zˆYïd<9¯¡Ö¡‹™Ø¯4{ìâäŽ>!£7c/ÏØeÒ&6‘}²ã¶Âræ 4Ëh•ÏfP©óe~KI”Ñoi²X;R˜ů¤#ƸØ<‚¦Ò,ÈnBx%*X>\àæ„H¤êlTiŒC-ðcY^±Þëþ)o«TÉ ŽrµŸ06ÚêaEÄdÞAâ+®šŸŽ7Ý7Kå;*Ëìëlð¦¥û8~ `2Ò!Ä®U´9'§vƒÇî&Š—jU—·èa.|Ünxðfz°^ä«é`O©(-“—ø'Ò>WÛÑâ>ñtk¶év&Q/l(ðœ\ôi}[cÖ^ï7Ç$4lW;-ŽÛ~#°2Ø¡d±)®æá _‰ìM)M!wÇ_£ªN`lK—Û‚Ë5ký"¤ÕrÈõú/äÍpÛYq7ìI–DK“÷gƶ—c=øtcÏsýÙ4b2¼Ó>¨ÑõhÓw½/×´™Ép}5Ùp‰;þš¯iÆVàæýä±S™~}¢Ì¤#æ¢Ârüóøú³f¾‰âÛçüEö&OÃsµ{01›à÷ÕH4º‚½D©‰ÛÓÁqÍåè¦WµÀê‚kÜ‹YÎ|Ð/®ð®å©z˜›TfžUø£ŽDîæé¤ïàöön<úN (zW}«i;òš´´ÑÕî¶²VËÔpÈC3, 07¦ssŒË) H³¹¬,ï<äù#šœ»8໑7uÍÂ2/h‘;ù‡û½FÛkƒ'î¼Ì[Ñ Jñ|†~ fw¡Vüî$íyw²¢¦'ä!zß–¿CbsSÁ Œs´¢Ñ¸!âùŽÓ‹P’MÀAV±nÚ¼Á&+õ²ðXP½ áû èW¿½€q™’1J?_h €¡ŽWò^…9‰]·´z½¢%W ˜HÊB‘6¥4Dð·únJ&'±êÈÛ?ÿ]þZC!žÖýÅ*ìvX1©+ŽºÔ[?M[!uY]E!ÈZt,øQ÷h°ô UËí¶,„ì9ú¹n†îä“LB¹#p¡?gµ;¬!%Þ.ý4¶ØõBGÈ[H?¥„*üƒ¦øGc&ŽÝŠF”Úe‘D!]AÎ]™ðɬfÝ3áô­x88ãüX—q)|Nê«°‹…ÚñÕ–Ñ0 öë!hó¶åWЗEì32÷÷±ÌÄ4ûqZ=fé|þgFý9oôïO*­ºq‰)ì¨Á6._ƒîü½ºˆx³à”~uvƒ ;HqzÍÞÿà8Çâýªbsªûf(æÄάb°}ÍlåNˆvÿìó(…»]ç§YbÜérü>hûŒ( ¼ò?Øo MȰfä¢R›Jq[€í¦÷žY˜2 èÏÏF“AóL |ùå‰ÝU†ÃþEhïþüèóq±I‘y•°Å$Ï|µ:lÅë¼ó¯0hj›7\´°‰XÕ{õæ‹HY(;Ú;߯ë]$Rd² þBêN¸Ã}è’Pg¸RŽƒ Š9‚;·"ôF¬&êBpUSÀMfÀÅTy—*n„çðI<@œ÷VU’· >ø0_W嘇ðœC0Ö°Á[ß}Îê•»ûjN¥wåøÜ6øôu¯^ùb0˜h?íÊlº¼îyÏ;ú]qMÄ¿Žæ¸0ü¾ÉRñW¸4EiÕŸ(èí!p$lxˋ֘ðB5þìl)·[H–ž59é€vÐŒ$Sú,ø6-ï#ìÛÆPjp–b-Ž„Øm꺕³Ë׌<¡Æ>^Ýõ´Æôsñ±µ A™µK®ÓvsÀ'Õdâ^.• E¡œ FÚbE¨cã#ñáµ9ÙÇÚšÈiZ{éÖÁþƒbpÎÝ'5Þ'güÛÇ Š A .àpÙî@ „,3Ц½¬œzzÎK*uÍ¥x¤Ç3ìD0Ê:¶åD·_5°.Û© Ó#@hm_ɺ${ȯA£ºj*ùG#weAeð¦šõC‰‘òïsˆrg4X›J-×gŒfS¤Oês)M`:RºÚ Þ¦¸åµCò+z)*ŸhßÉÒÇçÂìe‡Iõù0­´Qü ß66N!L‰Ý…: ½AšKÌ,°„N½6z?zÿ]Á^4E÷§ ‚S2ÚiæU;Ç®­§¥*éj?¥¿í—&¢ [/öozæQ^™šH0½PNÃÒGK÷Žª½/Á°n+»Ñ”!Ú´_I~ŒN“£`kWmÎø°½GÆ-¼'‹SíLô…eH^Ùw¸xq£=©‰'â~y*>mhŽ>`ó¢å-s"-çšä-iWB¢,”ÂA…ÍAû8}\±Sऱ›˜$JbÂ?/5§‚éÇ4$$mЦ ËG«©ÙUå8E”ÀïÇ, ‰J¾L5eö—Ò ã±}ÇbKÞZk¼—³Ò° %æ|:E؈¾YÞbüÜì˜76!Þß3¨J]’D[ײ_KW:u–WmWÈCïɶ²‹EIz³}‡qÂ…_™ŽæKa›D²Ä_²z anÖQ«øïín•so!¯1¹¡¨SQI’49ÔÌÖk{hòé6n›eé«Þ:`Wû(?¥àýmpva¶“®½¼­Tõ½š”ŒÙhµu mTÌoJ€ }H]Q9Èû–†”衤êÕÏ®ä_²nÍÔ@¾—UmæÓ-£ÿ¸­×Õw²d‚ž|éH:G±—Eìèà%f²(²MEV•5ñJGèVË™bgšdPVdnÀ=‘†NöÖÅ-7ÔCEU–N^¨{i~äje!Ì/“ížço¤Y+p¼eU÷ú¶1Jòlá +`·Ø }Zd+ЕR_Žýn–ƘD‰:ŒÐùSG&¤¥)ÔP Ä$àÛÝÎ&¨'~©1ˆÛ²Zûÿ2†’…vv‹™Ø,Dw –öü™n.²@õš7†¥ÐhDK¾–¨VpÞ>Õ~ãB´Ûøò«s‚Á.nÖÎ(ËV'/Ûœ‹ý›=é@©'³-eFnäNkp¥µFMÅ0u12jO}“ªƒe†ƒsÇ Ž– ‡—º)‚˜Œ|ùw2A#}Ô XS#¯åË$éå¹`rHéah«³]¸U하®î´a®P€cž»V\ùr>Vl;‘F@á[Z,ý¦ÔÖ‡7{È&ÝcsòIÀ¦mêš&Ïèmí6e+“›jgf"ä´ÊÑ€¯vž§wQH<í9¨<;!BèѯžßéD_ˆOÔìÞ²ÚFFSý™7H§kD7g?®¤ˆÈ¬„ˆ³FÄma¥¨×QÀ ©Ÿ¤(ØùaÌö¶¶g¡bþA­9¹,÷’lÖróJÚö'õTYÒP¸RgžÎêYݪ@ÄE?&ã´„j†ê ¡‰C•¦”'uTÌb¯ØpŒ¾è¾^õÓ¤–3™IEýC_UIMaT_u9ª‹oý%g8ZK%ý¨ŠíÏUxåÔŠ5{ p\â4Š„0 ÍìØtBvT—éMþR×Z7öÿ°È{V!Y†Ø÷èB·0 ÷sŸäÕa"Ž«&ÜÁáÿáDÅì|¦‡N‹wmò þÆËµïvB ‡×|°-ºhè®åÑŽÙ¸\Ð㨇š¶h’˜â¤Çu$¥ñ”Àû‚ 9ÁÛ©e0/6””WÐ\{¨§96À.Ö-ÐT,¡»i;axQÙOBiºF½—%á{'`vz“3vé†åÇä ŠešÛh ˜/»žæûÆ—\YãQÊZä#ƒÄM°F–‰Â_,¾­ IüÐE3*´’ÛMìÆ’Î˜Wš»Ðʺ.úššêH\ø€ØéÿÒxÌʖı ÜQòÝL±r)q‰&¼8#äÎñ¾ÚtÁ`[*„:±§ö2jŠœýÁ„‘l‹™¡wÈXµ:߬o &õæ»ÅfîÔVíµwª‰zÄÖ¾/ó¬M'ñÄzUjTê§/à­ˆ‘3n6Ѱ7H׈÷0õ•òÁíÙ÷ëW!øÀn‹Žíì‰/Ÿß’Ùj ¸/Þ:<]+̬_ã T®b‚öøLQ\òuBŽí”r×GÅt»#½ $à•²8Q‹˜…¶0 ‹YZr-cran-shapes-1.2.6/data/nsa.rda000066400000000000000000000011261412660331700163500ustar00rootroot00000000000000‹]S=hAÞû)tÅ4®F-b‹S,blrò ƒéÄ(xw;w;?;{{1ND”ô@ÿÅNA£`E#‰vþtSBRY(jQu&ßT̾™7û¾÷}ïÍŒ( ú%ß󼬗÷r^6g–ù¬ùdÌ~­±¹‰“œö˜å{]Xyy‘V{í ½¡ë[÷ˆoáÉ÷Ëg‚)ªÞï›?ü¹CI—ÙŠ'‚IsBqðÖŒŠNÏÇÉãÀ©„ð…ÒÇÅÖt×'ùqj—]yEì.,÷_æžTçÛR§ìñä2Õ,L‘Äþ WÓ”Nƒ¯>н1,ûæ©öV´aÃ^ÇïðÅ–›fÜ"QKì Áϰ^jðåGè›ðU³à/>ïX„¸ô;òÅWÁ7²åÝIœà—ð?Ûoá¶QÃéÑwÀO—°gq®ú±Ú®>)¬ú¾©§àU±}«t`ëð®¿r³ã3‹x¹´zÓ–æ(ÅÛaÕ7èb®¿| }-·P‡Æœã½¼ââÂSȽ@ÿÊû×Ì!_}õH–€S{Ž{"–àg›Ð—ÆeðҗЯØõ•ŸžÌ »¿þЏxuQ; “͹¾?Ï’Ó3þýMÞ€Wr¼ùuð’G§êt$ðë6ê¨{»w¡®'ÄýÛ÷¡o8{€Ã\ýø#Øò"x4ŸAOÚ=õ_ÐÍóÀ‘ìÙj:öÿÓŽMcÖÛ¥›ö80óÿ>®Ør-cran-shapes-1.2.6/data/panf.dat.rda000066400000000000000000000011541412660331700172630ustar00rootroot00000000000000BZh91AY&SY‘Óø/†ÝüstTUUÿÿÿÿøÿ#D@@À@@@r-†CMÊm©6Ò'”Þ LžSÔØ„ò˜ 4Ðe A½@Ó"Td4Ñ 2b€™@s £#CC!„hd4Ñ “ @0T”OP€4hd6  †—Ûè×I‚%˜ À–?—ÝË$…×R€¤bD@”÷1å$¡" <“¹†–dQDŠ …P%Jg³N»[rÙqî InŠ.2-­½Û­Á ßÑzôp°úœ)ƒ(àãÅZo„Õ²-U䃎WìIf»Ì.xÔ°UŸT¶1aº£Ç;û*ue»cHV¶|ñ9¾Q3¤©ƒóÜõCÅ/èB‘¥]*jÜ•×ZŠ Ø‚ ¥†òÂvÌe¢ä4ø &Ð{C;ý§±@N¶P×}lXÀŽÌ#›>ÞB£± ÿ MÌ"†yÍœÀdBªD †PŽ$8GÍh肞·íÙÈ ðÔêr ¦‚%™"@ˆn·òùEÏ‹Á†YZ HðÈÊå ¨žoP¢Ïš—ŒòtS—,áÉN‘Y1†I!¹±cÃ$’cX(i1%'æEÁDQÅLÄÕ L2LEQT”I@UU%Q˜tå}©©†m\ ¦r®/&tDª¢Í]PR]MN>¾H¹¿í?Û6\¹BÓ%·f­¸ðP—ÓWï’¨ÈÌým”˜VMÝù¦Ÿ ±~{BIãHcU»Œæ© f4´¹í·Ý?âîH§ :àr-cran-shapes-1.2.6/data/panm.dat.rda000066400000000000000000000011751412660331700172750ustar00rootroot00000000000000BZh91AY&SY©GMïÏÿÕüs4dEUÿ÷Øÿù#D@@@@@@‘S…Øfi&“i4™z&š`i„Á ƒ A¡jŸ‘OS)!¡ C@h4 ©ú’¦ŒÔщ‘„DÉ„Á4À!£ÓF©DÐ2&€dЀdd3Hõ>¶ÉüH P (I"HA*ÆgÅÛ ¡Ì'Awx¦‘^—båÞ3‚!! RAPHYËÆ´«;§kvÔ6v (UT7ƒ±ª,×ew˜µ-¨eº.â¿z÷^Úi` jìpºS÷$SëÚ»v¾,‹Oñå^iÍ鑪ö@ª/ߎDZYwMHŒNÙ4âvض«ìdŠó%¼üê#ëfÙ.¾¡†SÍ`œ1lo¸#޵ºm«n» í5ëo¹Ð(Ѝ‰¯d’udêh•¤y w{"oÉ¿oV0‹šÒúgÈ g€U4å8eÒá0 ‘DɈíxd]ÛBQÊ´Ù¼ü™@yðîG*0ÄCDC0,Ì’PˆËæ_}A‰3æ|@ É—1j[0 “ÎéÛƒ IB€Ò¥“$&Ì=왂¼ pÍcƒÂLÁ60XÃ1Rb W‘1MLLÐÁD”Ñ0@QMPÒE10Õi f…N̪èî`W¥®ôõúš Ÿ"¢Ù5P fþôšŸÁ§ m`‹ FjÈ^ƒ—Õ+‹j‹ Ú9-My³†ç,ýÇQ&ÍJTc¤8Zs’#$†½T«ÀN‹(PtÀ¸×Åż]ÉáBB¥7¼r-cran-shapes-1.2.6/data/pongof.dat.rda000066400000000000000000000011751412660331700176320ustar00rootroot00000000000000BZh91AY&SY5Ñ(F(ÕüstTUUÿÿÿÿóÿ£Ä@@@@@r82Sý$FOJcFž¦§©ä&š ©äÓPƈ`4¦$” hdÉ£@hÓ‘¡ˆ`Mb Fƒ0IªDÈQú§¨ÓÒƒÔOQ¦ 2FÒL)÷ƉP!ŵÞÔL kµ4*„€H)~‚ª¥$ („TR‘U–©$MHP:˜`Ã! `ŒÌ>}4ÜÖz·Ê(n¡x°®Þ,ôÉË@ŠQIŽh¤a1¦ûÑ6 â͉IÅÔ®ÌbæGÝ›kç–‰–Ú³&ö–kjò¯¼âu0°ØÓ¯F³)Ýç;Óèa-È"B¤z–ÊqÛÇ[©‚ö;l¨¬²Û/á §Ç““µ_&•ŽO·À÷€eᤠ'8¸h JsRHZîh¤!'ha…öBI™ s• "0’J˜Nš&H~Rõr’Að 6W˵ÍzHᤠè1"ÄPb0Dm6ðfÞ7n*åôb³îåÉÑ¥·=H¬½G¤P(Ÿw01”Ò(ÑÔ°ÌÌ€Úå„ ‘Œ”au H°P ((±(бb0PEDUF" ÅAEXŒDX1‹Š TT NÀŤ„“"þ BjM-7` $9n gÏ{=Yô]f쿜]³aövRX»øÚëc›Ö§ßBC+·L>sœ´«p‡C ùË÷M$Ϫ@¬k¬¬™}ÉwŠ‚9ž/æš(<>…ª:ò @½”¥ »ƒ+"‹{8°awø»’)„®‰B0r-cran-shapes-1.2.6/data/pongom.dat.rda000066400000000000000000000013351412660331700176370ustar00rootroot00000000000000BZh91AY&SYo’f¡!ÕüstEU~ÿÿÿÿÿÿóÄ@@@@@@ðŽÀÄ5SñMf™“M”ÐzFêi¦‡”44©ú) š2i‘£`†€dÂ20dÁ4244 È ѦCÐ ‘IêÔȘI‘€@0 SCzeõö±ƒb uÈv¸KñÇܤ¶V¤Pªì!c©‹"ÚhM4Ø -p ¨Š´ ŽÉQÈZ´¤´ŠT‘¦ Œ£‚i´ 1 †‡±²mmÿ}þë]”ÍT’Ç¿¨¶]ý4|Ù…zò‰[-IÐù'¾×*6hŽÿ.æ÷=K.Í€”Îü¶Eäÿ£zKUtvöwV–[M¡Ëû W0&Sæ,fch-¥d†¯¯´#‹©RL"•+ §1Érû6€d€ZøÚÛÛÏS=žLþäW³«í½¾ÌP®>xѹ»¨;q» þªîFÃDK‰CbïÆ|Œ ÎÕXýþ]_¥õÞ$)80ïrÀ”PQ0¬fÍ~‡Å­õ‰ö-–îè_Â6x\›äEòÕ“ælAb•{W*¸F4(AÄäNƒiåGDéZæ8Ћ+XæYêe™›–,ŒósÀjÄâJùÚ$ÊB• Š¢&fŠª ŠJZi )b‰¢‚™†jjX¢ˆ™*‰ˆJZT ‰-#¦i™" ’>Å´ t%@ÓÜ r¹gÑåË“¼LáO' hLàçÿæÝö¯ÝÑs8¨¦1âL ’ÌyS§ƒý·œ ƒøÍá54Œƒ¢Î±;b[Î^:Ùã0B ¼TP•‘`áQÅoo)ÚÖyàÓÝ{OG5r½&¦H­%SyŠk¡ñ£“9lÅÏê£$ŠŽC¸ZÇã§b+W´½¨Z b¸¯ ×3õî.äŠp¡ ß$ÍBr-cran-shapes-1.2.6/data/protein.rda000066400000000000000000000354101412660331700172520ustar00rootroot00000000000000ý7zXZi"Þ6!ÏXÌà¼Ð:Ì])TW"änRÊŸ’Ù#Åߨa…ø¤T”²Yd{²` ÒùU¯u D_••Óѥ㥺‡ÒšFG©çw`1@‰Yo[šrÆg}Y  ‡h!~¥ÊÙrë8 U×ö˜ïâñRù÷±TÞ…G˜@¢Y×(fí… âþM*Ñ©s#¸N²'Ž8ݨ¹ÌòŽˆOK1f; †þ}7cP »á0¨ÚµulŒfý˽6ÍÛ%9|íž·û/Þ§Ïð³£ãÒlàl»¤WõïÑ4P“ü&SظœLþmÒᎽB=6RèàÏ÷ù°š·9ºÐÆEtnNá¿ zÖ@ÌKñ¯ö ›@÷<˜‘a"‰kÃFÚáÁeP©‰Ä–*ˆ[ÄeŽWÖ<äÏpM>Æ¥¿7[xß_L?›ˆð˜œ`€¶Çî~šK/Nm½hÚ¼&ø¦Yéf»L0î“…lòɰmpsèÝߎFIGmIV°(æ,r^ŒÓZfD¶¼%RÿúÅ]šq*{ö”*ŸÔ©A™}’í(ŸÃE!X¤*…X_ô“Ûæ(TÆÖªteEe*ÜÏÄÓÐqÛ´¼SØUª›^ÒPõTµ¨‡ó$‰F5íײ>§süãáKxD¡áäZ¾Èóô“‰åVŽHÒÅÄ’\_v̶WÇ‘²¨¡,´€6=ßÎ` b#^"†þà-×?t—½ëû £³j„@W1t)YÁf–׌ïõ¼”7ÃØ.}, åg¤p™¹ÁQn¯Ë[Ÿlh.NÛÝ4Vfå¥N@ƒâÔå.©7Ý„*I¯+&íê) ûÙX)’röVCĽåLôqcú8×`¼% ¥Ý‘nÕñ."ká+®•ǪJ,äÿO ?®ý4±S‰Þm®4äºjÏåò×¼°¥ ¦¨£Ë#H{m@< Ñ5¸®xV4Å…–ÌìsR `q 0a† ô 0p¬·ÿ¯“‰U„ŠÂ…@êÙŒ+Ç©ë5w¯xWÆñóTÏÛŠŽO’€Át4eÂç¥Rç ~eÈ/M ö@m«Š†¹ü¤ay3èvÿµæhk èEÀöpkU3¯o{fRîCeàÅQáóº…ó#c6†Æ7wÎZ£"üNtqš³ƒC#ꇥ\®Ëv›Á×û,ÜW#fØ4=ãœêY¢áuÔ“_L<ùûQ×6è˜PŽ£ó¹Òè=¼@kOðÎÖʲ×cu¼4báy÷÷áhê£Í~xhS›¦Sݲ—JÍ+žªþOüwµñ D:˜N¨µ§ÁËò5ͳdšÔ•(w·…nô”«(1± ™)çêC€#OC Ôž+N]Ñå³ß˜•´çÌ9‰b&-Q´q;þת#ª0¶íVF"¼Ù'Ê‹³ç¨Š2U)È¥¢m0Kú›’Å›i!%6dáj¼C 8èà&‘—'¼¢ÿ•Ÿç>ô–yЀ{€(Ák¦š•V ¤ò¾*N?;Zº¬ÇQ½ïJᤴ± b›Ñ)ˆd¿";W 0â{Úä×kY£±l@݃Ñj“Z¿ô¤²#²…m© ˜R4ÀVøÔ¼Ê›ä-zúãD61êxž|ý†š¢Ãq{Ü$zéNŽNÏý„Ãp§ºÖ1Ú‹ÎØBÏ¥Y—áÍç@>F¸Ðâé耩 B؃DMÇ0!ÅT;<:×é–]²xÔRïjŶŸŠï«`)¼ ë)&èé½Î‰C\ýÜ!/£1ÎΘÐ;ø•åUa“‹\ŒAýa# íýæF4Ê2‚8[yªlãnÛXR#=•ktè™0(GG|¸Ì¥ãìZÖýv>TT<ˆ×ÎpŒ½rBÙ^3½Óºß‚Ù·ûï­Ô õH²&ÒB•MÁÁ(sžBu•Ó)$mÅø35øÃ_`H•þî©t¢y þÛ«Ë0ßн:P[V×[нӧ¯´ì¤v€ Ì©ƒ ¯S{f¡–Å•ÁYc–g5ãyò9yMS'ÚrÏ¢‘Ÿî ‹®–è?±WLgŠ«™¤ÒD{åÓ4Î`y6t  i  ¨:[Æ÷Y2Ê÷À7ÒG;4)ÓGÕ‰ýàry™ Û_ãJÚÕF÷‚‹÷“PÁR†:ìQÊ_¿) ĸK} ¦'4 « (Æ—U;7Äœ®äÇR8‰ú§Ñtò %Ì ¥½|œrñ /l]ù¢ú}…ßÎ%=Ëà¹-C8¼UD×JUÎŽ ƒ ´hT͵Äá®ÿu5HÓ¹ZÓ=™ø%ä{p#]8YÌjÏÌuÕµ×áiž¤XhÆ¢ulµ)u1íª3LŠÁn3g¹‡î@öÆ×Rèyë0z9™gPÖ ³Ê+…;¨+e®l9½RÚó컄óEµV&úQ¯ç=î.2¥rU޹)Rb‘Ó%$}‚}üä®=ê6&ZS·i¦êçûGÞ.ñpÍGÙp¶ηkåѬa6_fN~Ò1p–…X"åÁ^vê>7/é~6Nsظ¦„·uehãý ßÛÖN÷ßê<·\Ð=–•œCÓ¾#¥í ãþnàšií'´ý¤ü¥€¬÷nßÛižŠAƒôv²³’ß½ß2œâ´æ÷éíæ\вEÁj·Þ:«l‰žÀ¡S¨ï§k;eE%µc~Bº\<ßÍ™«·V…IhÔÖ\w Õ]*ÒÃñøŠžäþgÔb¾ç0z¸Ò?ˆÉ4-Œ±‡ÁSÚj¿¯©ñ_¼j†1ÝÅ[ÙKw ŠH©º‹¢¸{Q-åJüä´}úál½Æu®Ý/BïXåÛ¤üu蕚ïhŠe#ê¡§^!O‹¾óŽž>ì%•}Ûà `¢·XðbRÅÄVûÃÞµÎÓѽàÑÐÖ°TVÊrİ™ãÉÏ«²¨âCv¤†fÝ/2ª&k@eúù[‚ëjRÚçtµ}VÛé¹K–€¬Ø¡ƒð'þ8¸SŽ-K½šXºZoY&C‘Ì'׋bVHX·±2éAG%v…3kÑšgUŘ'ƒ°Ë¹³ÚÛ¯zrfó ¯][‰Eäo•pÏc³> "M6ëŸ#]éH¬¢J˜§ŸŠ‹Ò¼{> ¿H‘pÕÿáÎU€%®½‘ú4èŸE”1 ƒ/¡àd†æöÑP«IRx³"ç Ãà.îÖ—fZ¢èÉÚв¦WÜœ§ý¨ÁöÒO:@ËJĽþbSn Ov†ËíÛPÒqcÉçS~"9 :¢£KWmék\€ ¡ÍÀ@e.5VÝÿßÝ¡½Dµ™o@¥e\ÊGð[²M|øþGfA«ÅRKµ¨;GPQíìÄq÷5W_Ó»P]º¸w•N¦™¼/}•Ô¼µ·K†QЧŽQƒªA\甸ŒåPÖ¬ú›Ã¥ «@yl^GµüÑô¹LŸ¨®»k{v"`pÙ{ø“¬!œPPâŒkhòfÛbàBkÝâ!Mö&¼-müU,oŸ> Ä7x—¿N~Õ}Ï,; ¦S§ÂñÓÀ 3,»½ÜÄ3Ýo“ÇA,sìv$rBéøù=$ù•+ì€@ª™Y.ÇðAÂíÑ2 ñÁV×.ÙJ4ΰ€ž‡d£ã'ÅØÈ ÊdoWèJŽ|p"ŒMbÓÚú`.Ðÿf£ &nºbfÊ)khP+»Ü7IÖoqgêÄîCµâÛVxÊ×Å2¦£`Ûuà@ì¥$’Pë ÚtÉ#5Ø»øœ˜Gáún­ÈMVÖRaýNª'šütÅÃ÷L“Ì,@=¶Ï‹%¢Æ–t¹Äá[Šd¿ %Ö&ÄßÖ¸Ø,ŒbÛÃÄ¥Sص› O= ™˵A ïN'Ÿ¹€ûx¡3´Kà@É®æØ†ù¹Ør4²ÊÌ›}Q>†‚ì™ækx½o®äN«˜«ôËúHæiLõ+› i 4ª¼©é£Ñ)s ¯ƒ.º Ò^iÔ ÙŸûLJ£}kqtö}s´°¦‚˜¥Ÿ •?´FÜagx_çËŒ€å|o2M§ZšmL?pJø¯›ÃZ…Ðr-aÒ=çĬǥŒÏ ¾J#Ò”Ãùky”0I¬ ;ΜOpÄïÜ~]êD¿¤Ò`ÉÊÉôí®¸ÔjŒuï`Óì×®“ß•õ²º'êRÜ/51…ÛLv@;WqFüýdèdœOwþLfš¨Ïf4/ŒeIÌV¶D©r--tzym¥ ,ô  ô´<åÓMüäbtà/{›è…¸‚*ÑÍúK±PÿÆ Š_%‰¥ÐñM>L"Õîž½íG0Æ(É·ÅêIJùK#Ìvóyµ; B¥…0<÷@OêA8‹%¡à·KÄPEÀK´a&*N´|ÖbÿuœÅÈdòÐöE„Øö ì5àq‹`Ìü!õLÞSCߺ ¾šËrÄ£nÛ¯›Næ.K»ìë幈nþ 8tšƒš¯Ý…%›æ{Ûø)÷yÄ-KÔ¢ iŸK]”ØïÜüÏ+ФŠÉë]†ÔÝÏEÆ=×:xuÅQ;aßì—ï5¢ œ€_5D‘Â-ýa©»ü¤¯&¹‹`l¦cŸjÒN TÉЗmc¸-\+ƒÖ-£¼-&"à’K0œ8Äõ…A!¹ðÿ±éE7ò¶<?? û–>Ùè®DѹlDª{¸29J›_Qî^Ù’V’1hU&Óq}C•úýêtGÈú܃*²ùDœ˜½0ïÅ·×ayù‡ua±(þHÆy=Û —£7¥']£?L¹’<ô­ìÛ@M¯ìºwŒ–p;oJ yáVX eÜ×m ‚Üâ¼ìîûj%„Ã)Ž…†ºHަ ·ì#ј›¡(Ó GoŽ0⵨T°ÐNÊ/dŠ$_`zè:ÝrB4yJ½ëÕ΋(z‚Qd À°YV½íàÛ|‘|`¢©‰ïÍkJ–‡ãY« U±EB‚|f?i„Ê~ ½&65JYiÝõa™¼Þá¹D¡½”³ûiexbLý-çeúS55ØFàÀyA>,ÿ×|1Áõ=$2fq6»Q—3ŠÙÐo6Òƒ ?ZÇz96«—,"„múq¢A‹;ýä^Khѳg£ÞÎÊ"Zñª]b¹q*nZù6ôðKWÓÁSZšÿÀ¿´nžz5_Âň3M¯ø‘L[_ÿ*û´Ak?`š@krºrô ÿà€!î¾”Œ$Z¨£møUbˆü:”S¯]ù¸V¿“ãI<i ë»øÑ¨º'7ÅÌæ¾ÏïÀ^¯Ïåû~¥vZyÉ•ýØi¸òÁJad83bG`!DœPÀôÝ™›Âº!ÎÐeÓâfnÄoGâÒ(\»MÀÄΙÿ£’óvì¢ þË‚¶!ŸÈ±HZ@-;èlz¶}N© \ÈË[P-²Ä!Á—QDf•'ЃR˜$lioªwܼÏÌ=WK¹˜7iJµƒó¡N³¢ŠÛjj½u¤?QØeu¸– †Ù‘Rª)ÏÀú‰Vwɘz©Ó…ƒÁ;5” …:® ¢ ¿?X 4ÕÚŠX±¬¤1´ dº8p’ P”_¡<¯ÑÈ9Ÿá±ð•k00½žßœÓ®?XÕÆ/À†ãµ ­>‘¿nâæT¥†–7¹Áöý:HQ%ÔWo(âý…*wèXÉá¹–ž¬¹]Z¥Ø2ÛöÉCGœ|,AMIMƒE±~:ox>:û\½o!r÷4_~+±„ÉPÂô$í$rT òK:£‚²N¬;›ïk˜Ž`MUsxzp{þÀ?CTõÖW£°8R¦‰vïÚT¨=Se3þ,ae¹í³7~ÿGÇÃ(qÚ¯ „TÆ”¹ˆÆgËÄÝ\ˆè)¶’0{¶T]^íN±ï¹xP°¿×lý;2™ƒoõš¡yg©”R‡k#bWËNñ6yƒË³Í°Vî̾Z‰ŒÄ…Ì0^îŒÆ³CŒû«ê ‚]ב.LéÞ vPìŵâ01W4>â,´ef!Ï`³~4e´Cd2‚~/ÎnMSb+V¸ ´8Uî—Ë ·;}me=e-\R³b¯*{­mDWmõ›Ë¥wi™ã~ s-qcsÆjh•†x¼dFÂ¥aZ>c:P<·yÓ3¬ÆC½<5“Y!pЋֻ,†úg¦¼Çyîï]:ÚÆo«a¦ˆ,…wáiOý¼×Òž°‘ô’ÿ¿¨—¼‹Ue<ÃV`~±Hè–TBj|“ò%pT¶{º[šSÝÏU­.é²HjŽošá÷ÊÑÂY0À’ö=Œz©ÓVrHÉMf%6‘˜ EòÕ=ÊïM*…f~uo*}sm„‘®Ù]¿ÎÓa›0¨¦†ÈˆNdSØ´³§ 95½4DÉý’¢éÿÜˆŠ”Ëy¨‘óÁ ý§£QË%Ñ37݃~¢½V^TëÃ/ t“c‰³9{.×—üRÞðfßs)‹Zpz cí(rgoX<Û…¡Ìk-Sara6 -ÛÕsô <¾R$T¼SÜÌ–‡Ú½²XŠÂ„ú… x\:}×ô!ÿWéŒî\$få3*Ì¥IŽ_oú'/ e]ٻĸ¦¶À—Z£¶º¶œáÓ3B¨Æ®OF–ý™w¬Ôƒ½\u›ð­ïbÁ]¹!»IX÷ã·¶†<³¸Ÿ,L¹zJoΡIàYåÎ8[B kªn¶ ÃßÈð4꼞\¥f™Bœe±z¥£³Í’{[¥K2†KÍóÔŸ Û¢`Ç|f²«ûAÃظ¹=gŸÊ`'ƒHÁÔ•ä²oÜmðqÕ™Ëðbo€2¡Ì½‡ˆÇ•'G¥\±ñç>ª<}æÈkA»=bµ’§!ðÑRŠ“äY`w4®Ñƒö^äE'R‰;büËìïÚ€%ÐÒ<a7k'©•D+èDØ?õCÝWî¼öõ¦%Ó"~}$3wXÉW÷?ÈA+h„|8aŠ3Þ×õŸ ý;­˜Âý=ßA>èR…aIƒ\Ð_¹æ±ñâs†Ø'Šg>Hø.*Ï“¯Í8°²å0|9OYTå{gs*S“ ÄB33б5‰ê— þÜ£HžsºÏtà2³‡ŠŽß“}E¶6¡ X¨%ªÝfõ1ËKB…úMó¢Wû¿wI…˜2ãçD}­øüñ„Bi ‰™™¢nQo p†Í)K\^Ò"xU>;Ÿ¤Ôè‘úZd›{÷‰®³vOC¶óÕLè^çz¤´à—ßšDyªÇÖ¶Œ:ç—=¶àRÙ>—ÞÌ+Ÿ—v¼jŠg ïqa˜¤÷Æ¥JJënÏ¢h¾Éü¡jmpÉuÖ—¤N®Ô&…Çq¥V­úúÃò¼óyý(ðˆT©eÜÚ)Y.†G’Jý¯^As3‰«Ç[€ã°ºlVF,Á¯¤ïÚ¤$:UXíd56ñXƒL´BKÖU#2ØgV7Ú4øwÌÔlÊkéU¿úÈA–÷E G§7» ÖY“Á2¬&x¹C——=‰”.×ßsäûâœÑY‡P›æ©}Xª_F®°U SíÖ´þÐ&q~¦ü¢L´]Âá„úO‰2xyFÏŽ—Q•_£3ã•ï»Íµ¿.!Hƒ«l†ô³—òdÞBRÞ%Ï2ßÈ ²ŒÝê#ôÚ•Ž ä7´­4¥ 3X‘NAG—úÏ ÎG’¼ƒ»5 öVDê;Ï~È­)ºÞ@)"ªˆ‚H\¶+Ý{r<Ç·²¹«û΢3d‹ÈVŽG®$ØmÏ76Ó’M ¶æ”c7ðT FгΈàIuðå£zgʘæX¥À¬™ë¤ìQ#êf4ãÔ¨òÇQªU‘gËïWLÚ¤Ò´u¾ÂjkÝz©ëbx/ÑPÍ’,•õÜ"„_j{A3*˜f$I–€8Ÿ[wìŒ~hT¬ká²Uqžh@áÓàEVjðµÂËù ëkšÒ¨ÿÞÇ8Y€ôÐÑŸÝc¾^Â~ ¥,Õ'Êï,CD…ôõŒä³Yªƒ‡v÷üCß¾NÎ?»¤?l”æ—E‹©ñIGáre¼¬ÇVä»bOÉ5l %P­NÏ´k„dgƒêLÒéF“|XåÔhf°£Oç äµ»Nêñá¡Ñ<„æŠP)eº¸ ·Ì ýÅ +cyñÇ&ûºL.š+©Û»›i•u\ÙgÍ:$ŠM ÐR Æ®†°8Fküµ0 ƒæcÉê ɵFÞÔ0,TÿF‚1ºåÍ™œ6(c’æ”q1땺OuJ•S#TíánPÍ ßŽ˜”ù (¨èi‚üG §We“œ X޲ù 9ãtôJÞBM„ýøÁé-†µ>Q;ÒÌ,ºè¬­ã~ÆÉ ®áÇRIJ{RÉ^Pd뇶¤ˆžaÇu§æÌ[ ­¿¶á¯\âcHâ;£½¹ñz/"€®àt:®²ê¾`Ëù·òzð˜¾[Í*Π¬]îÑ+z|û§,TW8ohŽÎ5Ó·¡Ó:j;"ýï™êÔm¼GH®ãMX ¾Y×Ù¾ósçäùÑ ­~·¶J·øJŸÖ™-ü4 ,*»ïÌhÐú„(ˆæïÊ?jñWB~æeT¹~ »ƒ§Èr 1ÓQÎè>ºA$¡#lÖÁAæí‘‹tØåî¨H¯5ãïøP ¾_ÖŸf©¡;ÊA; æ0 x5.Ñ 1p-…=uw°±…"­ÉÆ•lBô%%ï >•¶9o1Y&LÅÒ¯P&¡©&ÒùAp`3ÓI…ÿ÷H ‚éûÏaIQ{}ÚVE—ëÇ[z^CßÇïµ+4ä»k¬Bh夶Ü]r!·9Æ2„±¤U5Ïb:25r¹Ä¢i1õþVˆc±ö»d°oÛÔys£R?Eí“|³é•Ʋ:ŠlžúÅãâ7PÇhÁLyû×< `Mî;Z,¨&ª_Øäñ9÷vŽÁ¹óŰbönB` Íüïõñqß_Ø}ߎ8Íù‘Mgâ—hwb:±ú¢ /\¿$Ø©m’üfjè­(ʼe§]æÐàéìû·tõ Zß!$ˆï]k„TÉ>Ù®ï¹ÃÞ+b&#@ëQxDg$8a}¬˜)k†…¦… }=yñ‘¨4?•´h[–V½¿þRéþ9–ÞœWr1â|²ZƒsîÆ 38J=·J–E¯ñ銭Üû˜ €ÀøNyQc¢ëÝuxcH+·eIçJÔöª˜28óp¼éF8 Òå²›½„Ç2\Â@Ò›=ÉV'f¹%4’¤LÀèˆÐ’>\ã”ÒÙ€à_ûËâðZjAóéõp l漞®Ì 8y‹dý7ÆÈ4tÝ LŠdí¢Y§ÆkG‰†BoW6GÚ¬Ù vBÄ8zäϧºÀÊÂÿ0·^°IN”Ö°vè½'å=j¼‚Ë™­TƼ-˜Ì´¼b ©òšpnZò€gg?I¶ižÙwF¡%GýC²4§¢N3G^žIÅÇÉÞ–£ÇúR¾M—‚…!ášF@«±ðïM•÷¿$¾é©fukwlùsÁ¬_‘”tA÷U½b^WäpE= ôÃùÐ)š±iq!^eµçɬ˜c0­z&½Ã*Í¥§WSèO©nL®¡K¬Æ]=/íbŒ åZù!²úV»ëÉS¿ãïºlhSýNQH2Ýâ çü’æUPmãt­ñŒ‡ã€xDòÛXSyY›J²Üã2ùe_,rq®¬sn…þpÀœEÇU‚ù/§ØÚ¸ͳ±G+ ׄzO‘ áŒ=ýâa…yšÞ½QŒ$¦"-\y oæŒß'¥:†‚³"Ý?}NI«™fqÝ…{T >D16øž{î¿t·^{` çs¯éu&-&$ÞiK½‹êèôê·`SfxÏoÈLòÿÐá[T¡•¹½Ñ8Äö-1>{Áçš3ÛHyÿôºÿ>rv¢Í£j+¡ v¹±ôÅ·[ÂÀ»mØäÝ {ë˜ÙÙYXÚë¹ØÖê(í+×í]—îâjuT£+Û·`²Ák-$Xª$€fÂIÐqŸôâFàN¡*ß¼±q•eXú;øˆeé•o—ä”9 ’Ç|%&S )Ð —77OÊÆÖ'Åab½ü¯ÕÍ#ʸÆGJ4ØB¤g„ƒKE šà…®~S¹Æ:”ëßçA±èõeiBŸ× þY@Ï>w•œ¦ÏX/T”Aö´%¢b7Ĉ:7ÝXN‚LJʼn0+[Ö_§]ÆòQ`ÒX`¥‘B‚¾Å­&s _lö¼_B½Õ"ÐW2}|²XøÀx罨ÆL*&KR¤[q±qéÔÎ"v SAjRƒ¯ý² ¬eà:æî" Q»Yá´žû•’¨Y‚á瀲")Í~Õ!’Â3«¶*Í”¸0G¦éJýYlžó=`¯r°äüˆ†!&¸¸uèýó-ÄTƒÉï…2_ ôÜñº0 Øà9µÜÕ ú{°–lð©§È¶!ÕÒ@v®ðrâ!g€ÏˆoúîýQLÜÕïµý®¦–Meµ^’y–.3kÓ&aºüË  dùcVõˆABøÇîO÷(UbxÊ$¢… ´X.öµ !õË6HëÎ\Eýú  SL»H™Ùõizµ‰Õ«ˆ«º~Kúé÷¶ë’6äsÍ6o}<î!†C‹#-U “³ÇùÁÂgJRÛ PV™;©ÿÓ{ªœOo€TÍæÂeÈgµ–—kîl¢$†ã42Þ–Þš¬·®È¥Of7ÓÄ#KüD‡¶_Ê.1p2A{‚^ÙµO ¸·Û¯F•f~™ê@E)LëxæÀ*Ò=¥qIÞ“þX<$Ô0:e÷œd®_Žo1ußFÝ}´­ã ùîz2‡Öˆ ¯dVYuÿ›¥ ÑX× SàZóðþ®ˆu?ACJÎôÜëz—«ÜcʃæsC" (írÕx=1®ºû;É7²§„ËC|A?éÜñ>‘†É”R‘Üò³7Íï.DRÁ5´{ Ã#¯=û¥NÅ•\wÙ{_Äl¢åpÕ˼}ï:¢Çq 6àQmhnY§/•U$ݽºqÑЇš¸T5LMÏû¸KæÉÀWæ¦CkûÌ‘·+„é¢óÄyqg¢9ï8ïT~’ÅZ}ì@ÚGŸÕY÷ÛÁݰ ¤÷]¶õ’7ËÇä&&!Hb7è”.FŒ¤0$¹YQõÆÓˆëV¼=i—츄Id>“1HBí÷û>'•*ÎäŽ °¡gWg.­ôèÈçOJ ÇÓñ•ôqФáä€Ì\ º’I:àú~–ÈÑÅf½z/@^ü®¶rûå© ‡ù4P‚Û§ÿ~Sš>Ë‚êåX#Ï^c© 8ºp«ð½$W^¸¯éø¦‹µŽŒx™þÉ$ò^ÉÛ.úmv®¹-°›’·Q¨+ ŠÀˆ=iø;ñ’O“G*HÊÊO(jC’¾•!d„î¹â†úv› –Lä`«?eNT¥O·I}¢üsÎÔ“\³þç²`Ó@Y)6NE½‰&½µcž¯Œû çjÐ\Øù-ÔÛŒ>Ð<âÜ#Ës8¢Šš[J¼µ i‘ì”Ëû$U5bøò{"¹Ó}V¥ ‡_ ïÐP¾AךdžŽ'´m%ô`ŽÆX®Ã ÞÐWÀÃP­ÆDì™KÝ€ä³4º¥}Þ»âwÈ\Ÿ&[D’L 'vlÉÞ±Ï.½'[ü<Ö•U<"~Ãijö¥q½Åéí·'––ÊjöâJÛ­,z¹žøN½7ü&KìÇG hêÞ©*ãr¿«dêû¬´Wì¤Ý‹È‹­æ½±x•$'ÑYoÖÌ0œO¼F½ð 9ëº*ëøß8›<àšh Ô:ý +w€Âô—Õÿ@Ê·Y`ŽÉaQë.“7À&DÇZkø=\¤.†fW ¸ý.#˜NNåÙ€ó{°Ég*?k£³#¿ßz5Jó+`ƒÞå$I3ͰkW˜Î”­„ÞxÓ¶QàSÁÑc¿ù_륎{ä<ÙW̸*ĶçI3õãŒ(U¼™L¬¢{º<›EÇ"ñ³¾‰·6{Ã×l±ZåÜ—]£;Œòí9rLô2¼k|+Q°–.OoéWÖ«5¦7)`µùxͶB^„PâìžeÒó¨§àhr–@Ò-ÏùÈ{ZQ‹`ÖRào¬«?ÝuQ±èÜ¢)Õ¢Ã6L‹àûn¬A‘è äp¦òã¬Ár×಩Þ:·…“þè #ó©Í JÇD±Ÿ Ù^ Qf:c9IW“|//$ª]H¬"ÕÒÕ{ñ+Æzóâ_Ç–W@Gí v}* NP§]\nö$°Æå#U•0)&:DÁ̘úÈÖe¤NN¨‹Óÿ´÷„ ‚[¼Ë3^(\ï‚*ßómÚÂo,š Ãd,àOæ!cªfµ.ϳšüÈÌ»å¬õ*òeÐEw1ÝE¼pÀÖsN‹ø2¼ÄŸ™ÞÙª„;)ÔÛ½•²Zo(Øá&"7ß/â൑I»×BGš}3¾‰\ŽðÑ:áo7òŒ]Ÿ”ÂÄ.·±ÎÉ~s<¿UÌ‚önnŽ »ŠÏ¦Ì¯#Ÿ#G/ëÍU?³`5|ÜtÄÈ´…A¤}GçÎsÛ¾¹l» ¿JÊt”& <ËýÌÕÆe2]…J&»k œÑ## Çw3þn ï2ÐäåcEçRaµŠ°öËèsEýÌ®@ñšß,·^ÚðñM€¿U’ÍŠ¾Óõ¢hÅØ˜êáh‰7yW#ÿeoòð±j ^mÞJQ&¸¼Å†bíÙ½ŸÄÁÕãH€\P\¯vV8&¿‹áæÊ…üÕ štá% ¡e  í~"wõ­4h ‹ÀÑrñ/X­I ‘—±%ñÁ¬ã;ÎÌ.Ëž+ËOPÅ “ÏÅgKû€¤(Èß“¤ŒHlôªõŠÞr`&YÒ5ሡF/I3:šS»)mú³i44ÃÉ(ð¢.´ùy{1þŠJ@–º{Üñfÿljy"õ·¥AŒ²>u¬@6!ô%ë+hýT6¥‚ðå·ÿmûÒ Ä/ÛBwØ^× £w§àv%™oN2‡³±©âËËàu1¥Ù9–<ŒˆI»JdÎø¦™ªÄâk#åµ>pâüÁX_ˆi‡cð—sq{KÔ`¼i"C”1Ò‡|£mCâ+îä•s¬ú›]‘¦­Ô™qAÌÄÒÁië£Ü6íÑ0Eƒ/:ÛÛ„Z°¿ḩ)ÕŸÞ( üþÉü×Sþú,X‡Þ Kýíô^à‚ÿ)»·lÉF«25Áˆ7 Tå*é²ðGzÈJLŸß«Ã¸…ÐrÚàê”×»äwë^δ4`Q: dN±º—æœÆé (Èïe¶îy¦Œ‰XÑŒ‡—3Zã šÊGÁ,À |£ æ]îŠ œb& OÊí"ôfu|äøjBÜöÛƒ€ß Ú 5ƒg³ó{äuBÆæy‹­—(Å푡ӫ´¯Pbïnr¥5r±k¨½î)!Iz䲜!‚7vî7%—n7Õy˜bh„´›-eƒyðÅÂZò^ý†ÛFºÙˆÕÜX>ècRCß=uº|œrLÄz$ò¾°í;[¬ø:%ø€èCŸHÔPAô 9ý,ß§pazC8WÉ•ñw„ÞÎÄ´uJlh® _­r=‚¬`PlˆÊÔ`FÃ6û"J|ëzqÆþ…»®}< xÜëÛ»tHšS+ v«|yÅËx²Ì0 B ´GpwKÁC=x$ˆ´Ý¢x_Ù3)éGXQ¥$V@îÏ„6÷–ö¸çëVäõLßâç*ÃY¼ E¶3Y ¥÷´ëÑØÒ¶KmCdRâûs†Œ-º…C¡Ð»„mM(GݬÊê‘9€¦5–UÝ-&ÿܳ1F ¡æ˜f^Hó8þŽ¢Yi Ãýx &«/ó¹-hctžÒÓyù¯ ½Zϸ™?žDÜiwxÇr[ÝÒŒ1¤ëIxõPi4{~Q+ð]Bá“MO¤?¹²ô¿=¥B%)ºÕ1jZâ‚É díÛ¤ÕpùÝK•¸ íO>^ÇzE¶fosÖ °å¾c)ãKå:ºÂ*WcHŸßÃnNTu[õ×¹¤‚Žf#=®iŽM¢u»J³P•Ïê÷­K~0SõyÁÖ.ÕÛ X˜»F`£%P«kŸêðHŠq‹z¢æÛTPþšè6ë« £TýMnÞp7Ý““šû)eFƒ>ÿ§æ«ëÃEÝ®Œç yJ«é/ë®Y Pÿˆ±ÝQwIô9VR)kˆóFdzÌwó†,ÃC¿Ê› ¤ÞÙkÆ'˜jß °*ž‚­Œ¦ =5ˆl¢ãÇLÙnýÛÜ@n4Ñž.‘l¦ DóQÖÐŽ ߀Òr¾ÔÑÁÚì—ÔÒ~èböú§Ë´ËŒ™õGDcà"ÝwÏ4úí°¹7º5zL;ƒE#Œ\KÂX™¼ŽÚž¾ç+ÛÔ=ø÷°›ÝŸóLÔ3ýÜQ_DE¨%äkùaB”(AYòЩЉàÓð…YáFúB¤Þ ¥1ÍI’‚NÂæPiÖ¹ô" ºWãEž:UÆùâ¶ÃÖ¹ÑsYÖKôêMÀ25<Ù'¯v ›ŠuRAÏ5µ ˜0AyQ ÙAA‰Á‘ÃdÇö臯¿ÒÕ2[H8ÀÞÛc¿¯þWX V‡÷ B²Àd‘Åw?]&s}s=Pøã¦¶¡€†Q*ë1 A’H¤q@‚Ûr@òׯ›ýNéÜÏ-ú{ÇÈo³P#Á &«©p¯®åÈljäuÑù×yi>0 ‹YZr-cran-shapes-1.2.6/data/qcet2.dat.rda000066400000000000000000000025731412660331700173630ustar00rootroot00000000000000‹]VklUÞ¶€P,EZMHL-ÁbUZj[Y Þ ÒR­uö1;»³³{wö=»%m¬bZMÔ„ JŒ‰Šñ‡‚DðÑø€HD D V5Ê¤ÔØT£”ˆÅ¾oè$»wîsÏùÎw÷z×iÍåZ¹Ëå*uÍr•¹JËì×Y¥ö_‰=Ÿgó©¡æÆd|È–Y`¯gEjÑD×hõˆH\­žèáU›k(¿Šî'ºœ*ÔOÝ…Ö;¿v6kr`×wå«E|çjçEDŽ+¿ØBÿz¢µÎçA‘|Åå<"ù(öé ±¾áz[kýE:‡ïù§1_»|Ì~>Ö è5G¬c¤v¢{wØÏK"9^îŠäpêóóÞÕŽA¡o€\ö×Àþüû6Œ×„iÂN¼ö-Ð'˱ž|xS`_ðoè.à^‚\þð­¿8ú÷bžl9Òâ<"¶Ó63}LÈw /ÑèºI$žžÐ_ïùòÚeð‘¯Âúºp–bž ŸqI^ÈŸ|£¹þ›·úâ#îpĽB“vaÝ¿{üੲÆ&’Û07o†_R.³óøô§z•ÓÎò­¢Y~_þeº±.BÀcý€¼“?C.2…ý¡±‹EB®Çþøµ°§¸wÙÌ ÿ™jàlÞ~ruÈÏØ} î}u?ü Fü¤àø)ìûÖAOñ{wçÌGàÓ3Æx4@OüìEß¿aú©û°OŽC¯1òÞ·€ÇͼP¸ž¹ ü»o¹ƒÜß ¾´Ù°SÌ·ÈðcêÓYG> üµ3ýŒYÆÙ½úríÀãºÖ #ðàœÉz3.·—c ëÈÿ1üÈ^üíqä½Å¼Ž‘‡¸gY—Yì÷Ÿñ%ð+ŸÁ~Ó(ùéEÓ½ð%ù±Xgr7¾‡Î .Úfðýýé+è×>Ÿ}Ì¿JÊ)=À•Þ>[˜Ù÷°®þÀ»ÌgÎ øÍEÐ/k±ÏÏþÙ< ¼þça73ýmÅø¾Èzío!Ö›ºûôæ} ê-Êxú ð³‰ùî5QÙeoaþ[ßb.K€;ô øT·7ã)äi”ýÆ8Ü^Æ¥ê(ô*çY_”s3Ïs\—K™÷ŒÃ ðטbMpðö2o*k€OyøÒ*æ¬7‹y(WŸ·¡?8ü’Ã~bqŠ,¥~Õ‚¼qËT‡;‹ï¹óÄÉsDËa °î#ìC©#°§Ïe¾¯@[sýÎíAüWãÛ‡úÒÏaîÇ>â;Éú¸H“X¿ÿè[È>ã/é“k-æ¿ xb!o"·!?TÆGoúÙ»‘!æËqø¿œüû“XÏž@¼;"Èë{öOöEýS»úcÅúÝ=ÚYŒ^Ú[r üyoæwÈ æu~ ôÊ?a7̺ †œ¼‰¹Øúâs'ó/xæùùài Ï…‚ÁúgŠJè ¼,žûIž—û°Oe|ôM°§ò~`Ÿ6~B<’ä7¾•çùèñ”‚×àë¨ëÉÿž û“¬`¿Ä~ùa0ž1Æ'Î{˜J<žW9çyœ%ïî»!Ÿc”›˜Ùxï Óï ö«ï'kØB¼çäÙ¿<¼‡Y<7äï•<Ï4ö›¿›Ìgƒ÷ûáJöO•çS–ñiçý6¯ ¾%ïƒ:ù òž&k¯òô¿ vY2×oΫý›sõ.îrÕØ¿ç÷/ >PÙ£ r-cran-shapes-1.2.6/data/qlet2.dat.rda000066400000000000000000000021551412660331700173700ustar00rootroot00000000000000‹]–mˆTeǧµÕ {¡¢hÓü¢EVn’­m<»3×Y·°ÝmÆy¹wfîËs'gïu,ÓrUÄ‚ú AFeTlA…nYfI¶™ºB_DJA)¬6("º×ßéKfž9ÏsîÿüÏÿœ{î eŠKRÅT"‘hI´&’‰–dô³µ%úº$²çD뜱Ð_·d±vÖE>—GûíÊ>4xn{Ç^U}þóÖÂ?”¸3¾TsCv¢}ã)剗>µr"¾T8{&r\¤zG¢íì„2X £UûóÅèÚ©œ)pœ}ñq»ràäîÂöÎHu¾®š»ðÓCñöã*=ƒžá,•=Kœò8qª]Ý£»O¤”ó(¶ö;öFÌ•û+ûåëÁÑÕz|©‘Ä©O`¯ºÜ`»ïUx•ƒ(ûÁóªúm w“²ß%_÷¯ˆÎÌåÄ)\ˆeR¾)úRq`U/‘÷Â'ü‘5»]Ì Ä1«à;[ñ÷&Y݃øç|Ñc)vó8<ý=ð1–rœ„GÿÓä]z/úîS…-ÔÇÞŒ¿ÞO]íψŸ¿<½MÂÓå~-z®ØÎ~ÐÏ~ævø—¯£Ö‚ÿ3¼<…í¼ÂZ܃z®ðÌ|]SJ—ѱ÷)xï£_¶?ëNøYor¿3+ß­¼åR—³ø 줾Îò ¤ÜÍð¼GêžÁÎ^ójú "ú8ËÈÇ;§“óâ<ÎõsÄi:Òÿ·rž&^˜£ÓG©C¹^IêdŽ{>þ$8«_ÀOw ¾ôQ]â݈óÆAò_þ:ç¥V‹m>K\=*ßzYž‹Óà†Ò÷z†û3 GsüŒî¯ÍÏþýÝ)â;’Ÿ=F¥màê»Ñwd«ÿ y§’¸Ò7]2JÐÏúçÏþ˜ºº­bOÃßÜŸo?”>«_ ß•röáŸÛ’ºYOâﬡ_\yÞ­¿éüô‰'¼Ñ]wÂÛþ C—ì-ÔÛü¿Š oç%ü½AÑç5΋ÓÄÕmèØ|¿x+þ›2Ÿ2ò<›_bWd^89x»ï_MæLa£ð½ }‚­ô•~ƒºŸÈ~’¸½¤nLj[¾OæÛbüméתÄ/Ï“ç°!óP÷€3 s !:k°‹ROó0«½ÿªÔµZ Ž9‹|½µà /ÝÆyŸè,§ç2ÖrûÕ‡¹Ï>O[ægõfæK^âx“ø¾?º¤G©k3Iýúw¡—9Nž•õÒÿJúçwêP“¹“}½·±ƒ<¶~ \£^Á÷̇¬ôii>û%©‡=*øcð¬}$ï/™‡Þôkã4õ×Rό̳`›è#:˜uéŸUò~‘~q¦y.*ëÑÅÚ$|ëÔ?”y¯ð2?ôñëû *òÜÖDgïFy¿ nMâdþꯤÿeîëÈÇ:‡WÐçé}àš2¿Ìx9O Ÿ{ÕÅüþ÷&©Íh™ÿŒ>—^ü¯“H\}þ‰?ÿ²k±š r-cran-shapes-1.2.6/data/qset2.dat.rda000066400000000000000000000021631412660331700173760ustar00rootroot00000000000000‹]–klUÇ—¶ZY#A£5!"%5%!$ZsÛ®nÛ,q·TÜÇÌìÜÝNg·RÚú"ÅW >0h"šjT|ÄG0¦«Ô(‰|~Ð*Ä5  R ’Tgø~q’íí½{îÿüÏÿ¹Jt»š<Ü)yJßGÏj ž‰…Äo/áž-sÀéÁÞ‘ø2ýàg¤ g¹×{Tâ”{½ÔAŸÔ{«Ô[n;:ZWâGKßÙÏË|ºCömà7³ï$Þ¹÷Wò°Ì‡Ü‹K=™ðÐÍÂo\Þ_ìÙ[¸¿!*ßÂޫȼú‹óØ ð+³ÔA×qÙKe>K8µà~ÅÞºÀÞzLô?EÞû„Ÿû:¦îâ~¿ÔoRÞ/ú¼ÌÁ xÅqé³ýâ÷fîÙiöe‰¯?NYâì‘÷µw ¼Ö8yÈJ¾s2·ó‡à›ßO¾²?ï›~.œA—Þáï\C¾ãíèÖ· >íñ“•ú0†dN*õôïEÿÿûS[ôªÁ² ü7ø\zñ·N$²$øÌ†ŸÿB¾õo r-cran-shapes-1.2.6/data/rats.rda000066400000000000000000000046641412660331700165520ustar00rootroot00000000000000BZh91AY&SY_Æÿþs|DUE~aåiwýÿÿÿÿÿÿÀ@@@@@@@@@@@@A` P(ƒï{Έq$„(A DTü‚` Òž¨"žB&‡¤e hÈh 4шõJj`™˜š €&F€`™ &LL‰‘„)HD† 3Ô€=&FšhÐ @€Â@  &’H‘©Šå¶@ÕÉ9ÄþÚðŒ °r®ŸØ°ËVZJÁÌ2ˆwĘºÊÜäÅÙ’â{F1•p—94ˆŒb®²-Š+8ØŒì®0†‘)Œ!¨•ZNëL5)w'f–öX €Òiè/RtÃæ±ùˆ^I.¯lÛ;Ö°KŒ•€@bÊAlĤŠjÄ™hD¹Îæ†+~¼¸Âdªí+/–ëLªPÒNlé‘AÇ\¹Øi84€ßÚîä¢'|Zæí0I§ÅÀ^±p»ÚùÅ“g!|áûò5¶u0ÓD.:].‘h«ÇIÝÁWi€ïñœ` 8ªü»(á j"dŒ&󉈂ÂÑ5óbpå‚J¿¡ eŽý¬•G´1l1´æ¶²Õ¤£4Ñ'˜Éy Lg( –¯UáDùVÕ=ªZŒÂ1ÆzåF5$m¡Ï ºju» ͳk°³‘”f¹¬¤kkW&oA˜âûÇÑæ¶o¬ ÐmfSáã€Í¢üºÚ\`਋1:á[U§NITÁÓ–úñ^í.š˜˜& Ç€çVÓ=‹· 'EˆºRλ…[R 2ÝrÅce—{\ÑâÊØ1âLoFÀÖvoÑ€HˆZ0è×0t%Ùµ+\8j§§¢Ø™åõ)µ ÛN å¦`A¥‘¤,C`1—=¬!| ¥¹U%T9`B&¦šˆÏ/P_3_G²ûÑ/Å`ÐPuÙáAi®*EoµôÕÁø¶ ht.šÂ«a3ÆÍ„›qkY‚§ ‰-m‘·`„éT#fÚìå Á ¹KÊ–H\Ci#;8!‚<@º8%KAF­+k%PûDgX_›˜ ÀrÎÍ @ÂII«u˜Ë;ó=ó\5G‚­ÈôVùt0Œ¬òÅp²+\P™X¬CEeD1|+‚ŒÛ]Ê:F(Îð±.¸ ˜&v "žÖÍž@…j6SÞ£! ii1μöÁJ$é-¸ÉÀœôÆKUßsTªu¦Ùºöw"³è¨LIÌj#FœN®·Ä×[¢ïøtëîÓÐίg@t€á'ìàz@| <@xëη€ï€â®à…ä¯R]p`8ày@rp@8ˆ`@'” À€óñNcˆuwwIˆ–…IMŽ‘±/P°GÔ=Ã$A¢0:¾"ŒI– ÈTTˆ rDÈÍRØÛøDUePedcEØ'茪">àmÓ*A™JŠÈtkáñw€êü¿Þ5~mÓsÔC¤1UuWèJÄO> “Ã&˜¦xUb·=ïe øi ŸŒŽãÝÒ)Ãã1"èkC‘®¢âr$¡Fv#T ÑÏ¢ÏD;4°N ­ÊËpd 쀮3¾sŽ]\RØÚ£h[J©Z«-­J±*Q ­os»'r¼½®Þåå¼½ÍÝÝíz;¶ßk¶ÙÝx÷jý)ôBúhH@‡§ìXIˆ‡³ízC^ÂVÒIöóÿ,ÇõÎßêݬP7w0UGdŠ¢:B¢<ÈÝ=>aεŽÁ‘7ò  c*ˆîB›•t{[»þ nÜû†” HÏ›q@ oЊ¢*(+àžìóR£9é°è矬~YƇAMfÈc6˜ÝÔ½*¨Íð͆î€)I€õƒ×§Mcïº1@7hq©¤p˜‡hJ]àl ¤!bŠŠByóÏŒYΡtib ðvdæ;百ÎÜÖÞßÙ3z§—¶+þ·8s¡Ïßbq_±PÙ: Q"fb“7Rì`O›æèoFtøúVVQé2âÞ–›Z4Í7ÝB»ÄH@n ` ¥B @Œ„0„…½‚AÈš…)¥jšR‚ ¤Z{Ä$„&„þg Ú;fg‰V‰©”„!øÎl/4ÚèUg 5Q« A¡8µ‹²^D†HʆÔvÐBm««ôvl†%˜ WÆŽNGá±g™' ŠxÀà:f#:†¼+CZ!Ñ: ~R†E;]*);Ðô}P±Âsu©8™úóSÕïYÓa¹|‡P')™ÝÖ®&b ‹U¦‡SPîĦÆÛ‚o"DV$&9v#2¼nš0„HÉÌjà`èA ÉI “L’#…QôxZõ³’‘!B…Jœ“’è†tæº},µCÞæÎ †`bd0µ.®Çˆö";œQ8Äpš°ù4ÃAµèüŒãÎn<ÌÖ¶Û49±¬6K¶>pÛ›:Τ€8z(ˆp.BH±ëzòÏ\ðC„Ûdmà»’TÄÍ®;‹eÙLdlÓf°Öç1áœ4‰$ÚX]úq(“ÃIÜñ¨w¼j)Y¦E‚‰t ™ ¶ES¶žœ=HOR^Äa×24–d™˜N´'V 'X/Õ€zG‰>´öŒœê‡¦z¨s~veÛ*Q5V´is]”AS££h§8¹ó3,*·„xòBRUE(RÒ,KQICE#AR´­ B4U A!„2ràÄc#É2Ë"±,S00H%Ì1" ©j¨èáJfí]0²Ó. Kr±«1™34hÐÃTJ2²¹T1°BŠÑ,Ë‘ÒM­Ó% ­mÊòÙ“Mmm[ud2’‘•£E›a&ÁÓV…cHæFŒØ9†e˜à”0Aa1!‰ ªä\ µÄ ”.Z0+!ZÔ*E$¹Ldˆ—3@hB‚ª•¤(‘ šA¤JP¤‘T h¤i(…T )ì;Éòz“‹Ý!œ†°²®µœš¹¶ÀlPÃDÚòrïžËùw6;“Nî*foîïЬ˜1.œÞªÛ(©¸¸ÜÆ•“w–r(‚œ­W„c€|^Ó(”ºb³Sœ Ø`^Àq'`µ9'ÿrE8P_Ær-cran-shapes-1.2.6/data/sand.rda000066400000000000000000000131551412660331700165210ustar00rootroot00000000000000BZh91AY&SY6§ÌÄ=éÿÿsL@DUÿÿÿÿÿÿÿÿÿÿÿ@@@@@@@@@@@@@A`>ðP/sàJ½Ýâ ð,Iõ„ή@+N o°ŠŸ 4Ä@! „išž€"2b2i£#i0ƒA?‘MQ1Ѧ€ÉF†š6¡êz4ýR F 422i"ŸU=E=F€i³TȈdSÚHˆM&¥<Ô~i¨¨~I=µOÞ‘T4ý&ÏB”õGä #  2 zª¥LŒ €0b`Dƒ*Ÿ€ÔüTóIÓSiMê›Sôý(4 @=AêmOQå=ºÛt-b´F‹iø\¸&‹BM¶“a·dÓ³ÒÉŒYŒ€M&˜Ø ‰ˆ 4nɦ„adÚM¤ `†ØšL,€Ha€ìÂÌM4X,€³cm1…“€dÐX,ÄY¶Úlh`‹4Ø$6“Bc,ì4 4ÆÐÚ&0a`&%þ®(Ø&õ  ñ’$1¶6„ÒÅÂíü Œu(¤ÆAb á@f2ë“@ÔME)DÔ»° Q|UÓ¢ãDrî…Q²–6ëX°åД 4;T€ Ê Yaâa éi„G@ðf‘•iÄŽYJ‚Ô ²¼Ç„d˜ò‰ÈÜâ”Â) §kHd)è™x-tÙ¢Y]ˆ!*@‹k¦aPÒRpKX&‰‘S[V’I†Ú“¶Á<¢V"8ê%(J˜ðâa¨ `U2Ü80Üãj¬4b!@kt,x–R‘.C2â€*®ŠÃ‰qÈÝ)Jœxr–†!T‹²i,Ì·­PqF(ªå¢Rî%åN\ydfQŠ«…d 1W(Ѹ0K”°BÀ0•‚4Ü Úa˜â&ãѦ£%F”~Ýåºé­ÍRÕš¬&£…«h\vcÚ¢/A<¼yVcXÃqç›.¼¥eQÿÙ•T×ÒXIJ LŸc¿*åÿ^Ú„±Ñˈ*Á öti3V&«× r¡{‘«- å½¥º=€™«Æ.Æ^l¡$r0TƒpÒCU8RÄîç9ÇB~? ŠÀxd0 ½‹@C©V¸¼.^k©¼A‚ÁqÕgŽ* &F,÷¨“PÅÓ$è¬âB*m©\c,:ck$ŽräbíäÞj›C”;I¢Ã!S\í©\7{ VµgœÚdŠMQbŠ$ãÆnÊ ï90ÞsF\È~]ƒbnõø#í¸& ñ)Óí'K±ÆdÌèÓ¶Ðï ÊæØ%âRi8 Zk5|Hœ1Áæ×sa7WŒ-Áã½ój¥bµrOTªBOqð[jóˆ¢ÉÁ²_»Ó3½ÄV‰i×nD³$òÇV¦L^mdU¦vKK–P\(ɲæ­Ì‚ÛA 3º« lÅIO0"” Ò]Ý®wŠ|w“tgÀC6çh…¡4:Ë"Sab´žZ‰k½„J ‰œ Kꉇ8£ Ë¢¬”?÷RÁ¦>>mnÓñš˜-C’ Ò”SR³l¢ß‚KŠY8Àh1Î1ìñÚâÔÁQ£®¨ Rû.¾•¤í ÁTK†2ˆX½ò£´qÚÍv¨{@ÈF¸óÿœ~ª™Óà„ìOE×6À™C­ØR¡<ÆŽYÄão Ä{_5[-ÀûL@ ! ºîði‡ØU1$„[ %nMx#…©Áh¨žS¬Æf"e‘éi™ƒnˆºê¢èí<à¤çKÀ8Ž$e&óIÍï¸S‘Ö9îödÅÈ¥Rr – K U¼SIÄw–ÖmáF™®3´LƒÉ4=ïeàá+îòšNR­ºàÁlâ·5mbENÜ2ˤzŽ’8 rÄG««fáÄØ3(’ ’ÖLU²º{NÛT”êÎVô2UÔ: h`Œ‡j[šHBªâ©¬cÀâáiÅZM0qçK ¬F·£è&MC2ÀbØ8´ ¦Ì@ÕÈ€ÙvUn©¢«Ä%@p´_'+‡8‡A&êd±|«›wJ“däвáq÷-¢%^™ŽÑ £5Ìg]òŒù}hrIÖ»8§ò6×½SÜËUî…ˆÞ@tï¼Ý uo^3¬’ÂÛnÓßifëïjædõ4õiÑZÀw>^®dW€’•RPòTña™‚iÎéº^çÁÒs§OÂ|Žm2µÍ9§JBÈ$”’cM;Æ“a3…Þ[Èòæhɰ÷µŒAÊ^™å¢\*ª×8ÖBâ Es±ŽÓg2ä½u m$’;¦IÐï"œ9ìë<1bB¦6lK¢3JZÁa“:öv+IÉM<®yërë²’þË ”¡¾¼7t œ^Ï6tpj‘8ÏR‘×L³«öU&8>R>éZèTñ@Œêé2j“RUµÑõÒ@Ì"¸áö:’ú"«¶R¢*íªòP¬—Ã1X9ñNÆ £iQµv„ξîДÎÒ ö‘µJ¦mò–iåy¸ÛœçES0q¹ºQA×Ä«j·œÖE–‘ÎÅTrꌆüpp$½ÂÕ~ µCCn:khØ»æ~ͪü’–€µEJe¸+æî!ÙrïÌ65ŒA™ó6 ‘¥ÉÎUµÇ£è÷Àµç=ÊD`uL%cê+Æ"¤œŸ=ìÍ/c>‹=¸E5dpFMÛÞz,”U–6+æím‰¤÷Æv0Ù2>§ãbqye Ù¨átÛ)Ú9[8‡4Ø“ÃVuÖ|šFw'ÆŠ…)­¹ŠÛžn&û(Í6E“+™¥§cCO‹àNJe!z‚Pæd#¨IÊ kr@“ª„p¤oÊ®RYø6éÕÀj5Ê20çpÒì·å½ƒ7„=ÔÎ…2E—׌#Y´«5!xNP“Æó®•¾tDT­uxk‚ÈU†µ™"íð¥@R¶Þ73ç0Qíys>ÆÖZÃy«‘œ\‹¶»ó=áhJJØ_€’Ü)åŒYÅ ý3ªžÃј0¥#ºÒ{bòdœíÔ¼fr–äæ™®|V] ÎÅO[X·çXäk“(T–ãLUû+d+>ôÔãêu:½ï|ä‡ü^/YÞ3ºÐäò ¦‰áÉÝbxN8J“Í ðв)8iâ±Æ*'OBh%.P/š§}µy!ºzãN»’0ó; ;Ïm"ùKµŸ]ÀäQ}Š÷‡tˆÜê÷¢ qŽÑq€SÎSPôƒÓ¡©3É ×Z%¾{t9Ú7*MŒ“ùÓ%užHf¸ÿ:/}Ó/.ã\bBÂ4wè‘nØÄ}– ¹ç D=–qù+Ò¯BcqûF åH@Þ{V”Žg«zþrß1ÀÍú3Ð÷:ß0&ŠüAqx/Ù—ú\¼Ç…n¡Më¹¢*Ïõv$ðŒˆ?4y¦©Õ#ç¿¶Úåô;ÂÉöê>/Æ>Ñ4^Ü42úf…ƒïQï…~îZn|?àm§¤ak¸£?ºíg¨*ùÞVLÃ…ýXf¤µOìËïâm"}ï¼ßiÿ3$&_ñFß÷ëÊëüt"êã%Úè"kÆE?Ìú¹Iz%9?î¿‚C$1ÑüŸÐq!ÞþÎÜ3ð||œƒÏÃÂa÷¾ Bâ„‘ê|Ÿçn±Y $ƒ×8š[êž™úeæ² <I$I®¬]’G#„–8ØW'°ÌÎL™"q B@ @‰4 #=“"É4 ŽY(³cc–‘m˜µo_BÖQŠãZ O¢D6¨Ñ4 'zE¸$Q‡gä™Ü;q–N#†GfJ¥õ16ûU‹‘sCNªÎô"‰»/'•¿!åK¶ÞMÖèÁ­dMÒáÀì@Ðé†6©)oE: ¶ÅÁÀn7©ž#}À¦ŒÉ>殮qÖ*‰ZuKWq±÷TÂÞøÖ\½uâîj.YDÙµiJ(EµSÓ'9 pÓX›M=ÅA’òÞ®›¦£mM·[×+J¼Ò2ô®•¡±‹L^ ˆni" MÓ J¤äÒ%m‘1&1µuUz\­4öðFW7PÝà´b˜,²pa×ô——=·´ß(šFø=êšL œÒ‘€ó`Í›6¹m‰ÒmÕ­ý‡v7aB¡>ç È!©ˆe¡N‡ N#Ð$mzkJ^›m¶µþ]ÜHéŒ{Ѐ¶‹£.6C-«vÂÓ·ËE­ŠÊËÛoÖ^äÇì÷O™ÒªŠõ/>ov'͉‘ã™g|¦«’ b… !¦äò‰ò V‘Sãü‡p¯^•Ì™W×x`Ñw .^¨®fp(>¤2•®](dO~öïdï~¢î˜*á<õO©ÙI Ó äƒ–qè-/R])‚ІTü<&@!»ÕïNûZ‹†< f-”mäkîKÀåOÁø;¹´6{/àx`Êù*Ãw©15úö÷,[%Īl§´aa¹.wµ­®»õStžÕWô¥v?¦|r†?ñ™Rl÷»òæT®[ëïÏ-rÓ&›‰³\¢ïï¿yˆù ˆ[ŽKŽm:ïK¶Î-¦ÍKUZ£SKÆàG“ÍâYuÆ’l`6&ÆÒ3,mŒ‘!™ALAÀ‰"“0“126%a¥)£!!3!È€d±c*"DÃ1¬j2bŠHƒF¤ÁI¢6RMj$£F‘(¤³3"Ѭ–’”Ø“Š€‰1cF4F1¢¢ˆE‚ Q2Ŷ4•@lQPX6H°b¤Ú,‚É)±h*Ñ© Ô•DXÔ2Ñ`Ô–ƒ¬b‹EÆe%´lF¤ØŒb¨£EFÄ‘V6Œb¨6£VJÆÅ ¢Òb2UѪ#hÑci,Zˆ1´bª6‚¨¨¢¤ÕŠ hÆ*™hÛ¶5F´F¢ÔU*5‹5£[XÔkQ¨¨’+FÖ5EETUj6¨¶ÆˆÛF±jÆÚ™¬lm£mƒVŠØ¬XÉÑ´Z±Z-©*±¶ÆÕÆ‹lZ6¶*Mh´[EбdÚÆÚ66ÔbÒZÁ¨±Qj £RZƒb5XÚ£EhÕŠ5h ÖŠ6Š-ˆµ±«I­b“TlZ+‚–«±´bÔm«‹Q[bµEÔmFÛ mp*-EhÖÆÛchÛZMQ­E¨ ÕZ(Æ5·ôÕ·ýa ·võâ'zCw Œ’d;±vÒ<ŠR_—ã6¾y~2sÌbßC¼Xh—ž˜ªå™…=,Qq”®¯z•yœ»¤yȼ×TÐ Uwæ¸"ÞbDtÔNDtˆ =Ý6|Ý3¤éèo ‡kÄ!%Øi µ¢Óc§Âš™:©»6lô½¨BS|êiÒi‚Fš(j™H–šêf£!OM¥•ùkdÖzy>‘C1-µÊôëÂÄôã(µåØ ·mPlØë´OVÆÐמ=“\]½™I±uã<áÒ8“Md:¦q"0›g†ÑÑë,j†èÑ>Ë`;20ûqŸ6y+¬ámLó«¹{;dPULl›6ãlÜptŸNãÏ2yÌç;¯˜]ÛhGGºŸba$.Ü í%Øb@QlÃ^as0°ÄŒ Ûx08"`p`RÁѼwå"gèÂ#v漄fk± _ˆI -xHYކ´ÙšÜÓú ghò/AÕ3s7U…„#ÑÓè6ºfj©9 ñUoâø©ºQ47AwæDr%G´±×·óι(f ñ—Ã@?€‘8pÜèHwÜñ|è¹³q~]ùbwïä”,×Ü Ú^ù¿¸]ê¼w© Ö\U^s|!Üúq̦¨ :ôx‰ëä§<üi…ù~zÏ¿£a@|²V¦¸þÀ0¿ ˆZhZóß/”Au®õÆòˆcù~nêWOæ ^a%4éçA.+î<ÝUó¾ËÙûÐJn&²À´ õŽD½ÔZ¬OàÁ⢡ü{è‡@©ïq­sƳ Ü‚¾Q³Ãò]Dê¸oÊÏjÃd{NêàAÈ—pèÖéÖâgs’ü°ÃÁ^n÷½³MÃÈ‹nmIæ©?j¶í~ÓVÅ2Ϲ ÚWéUS×p;þqô‹”./’2x¹ŽVw—zÃ'Æ Óm·íOÜŠÂpª„±§õö{ 4 û׳ÌgŸÙì¯T~ŸœBjj©ÃÜTç!ަÑMPÊK „±£‡‚Ç,n·F®}Ý?VlK“‘;l±mŒØ&›[Ö¿ÚØ¸.Ë4û}ƒI±±¥ÙzàNveR³ìÆpÉlÊáªGÙþŽ­b£ƒMö=K„ÛÙYÉ·“!8i@>G•Òç%›‹¯“SÑì/JõM RDÉ4®¿…? ‹çi úfÔihã¼O´UJ›ë/¦(¸ôšQvIÕyw]eïˆ@l¨M:™{ÝÔ#¸ÛN—RwU-ð3¨=ò ®§ïœìV¥›?}šš›VT2¨ªQ`®ßJÖ&›ÅldE·‚$ ·¨÷ŽîBZûãC§u½¡…ºQ†ÒМØ/~ÍŒ\ØÖÍ£›åãLÙ–V1ðPI©Ìümüúœ&¾zvoç.½ß[,Ó¶m°3ÎqýO€õø|¯å;œ<>SØæ‹ÝxUw|¦2̓ÖJ¥°¹·ªáÎ}d&õ’ÛXš»kÝ€›ç=d0çÄô§V¤îWÇ+OÜé¼F’.Þ³Sò!°=$ßi™Q‹·ÄHĵâ .,,Œ?¤Ž(Â’Ë¡ô¬™·U c»=Œïg}AGÊ»ÝЪ ¾^fÇßS9Wqqä!~ã¾NWhen\PÓÑzv›5úæÊOÖÕß½€ÿ+×Å(õ s>9¾Ka>%°™=ûñx½þF â^¶½q¡‘ºãâw'¯UíQ‘ºpž§êlOÔÁ!ò¤>?É}KS³mêÔ>+s]6ÝÒ œ·Cˆè½AVä59•ÅVJ…zW»èz1@o`4ç {"!moLX²6óÎó^‚`%ƒ¥mn˜ ’øêí?ËÖ‡G8‚àiÍàï»ÁpLM ƒœ ¨›ny쯣x±p+-/®kqÁèÙuxRÁ£»/'&l|5´øSiéÞlj<šm ä¤OiÊÕ×jÕqyôºë½˜ãÒ‘誴vm“n>‰^Þ\«ë’©ÞU=*-:}tŒèr üóOƒK}Vj7ÕQÊú–¾pê·¢ÚnêëÔß#ä×­óìŒiõìò®T¶¶žÿ*©~õ÷&V7¶_(®‹øÛõ±âhɼ޾Œ¯u¾·Ó.GtØ»¹ÓU'<¹Ûi‚ç9”‚Mó®v›×Íl†¸1Œ!e°C(>÷ªõ‹¹"œ(HSæbr-cran-shapes-1.2.6/data/schizophrenia.dat.rda000066400000000000000000000122701412660331700212060ustar00rootroot00000000000000‹e˜y8Ôý÷Æ‘²´Vh‚= >oxO"uÞ•6ÞG!©ì‡jÆiE,ßïD:©xÌ<ù ¯@Á^Iùg:> n·P¬V…&=‰¨ =F—ÊnŒEís{Ø?cÐg{ÀIÑH&3ÓÆêÁö$Ãðp™ $>´>—1ˆ5šüõ ;‘ùqLÍ7&p4Ðkç­¿ïÿ~Φ¯>T@MÁ;²‹Á4ôܽwSt›³›ý¼>öb2ñ»yöR5$ïüWsǽ±«ëûÍÝ^\ˆÖ&¢É¼²HëÕp5 ÉF´ÙÐz CJÚ|Zb¢ˆÑ=)ÇO{Š­“Ïd"¬Û6q½¯®1Bô -·7¿„V—“[2=Æ¡ï­÷n È}ÒY‹ÕtOÅSgoaÆû|2ý>gK0£‘¸ýÖŠƒn|Ne¸û9ÿ¿zJ’¯í¹r{PðaÍÀüI_ö~76må÷Ubb¼'礘Ö6´ö/òqž™ƒ¾^Æ¢ÃÅôG HßøO£G‡<–•šÿ¹`”ýL^³¥Ãñ¿zV<ÛžC–Åž÷ ù§f1™ÑÞ@Ô ©ÜóÛ ¸`àþŽ ·•Û¡åf˜žhÎõ0‘vâÚœ:ÎTC^Âgéaðoñô''nn¬–=Ûu9û[&ˆÞÈ‚Eõ`ÖgXXÐÁç‘©qžå‹Üm5 "¨(n~ìKè2ÝKÔÞ†ÁäÌžB’î,os;ê{«¼N¤ãßÖݘ`¤^é+ÛÊÀÞCŸêVF¼Brò±tOÕdÈO|0ïÌéF$ô|—)Lböˆç®•Ø«‘·dêœV†®k 3µje@×h–:ô$qÉñ÷ƒÆsÆ”m)]P~HP/v ”þ’鬸;_ÝbÝz̺ý¦Åe±Ís‰ŸÑOgw¶³²F—ý³9Óµ-áYuÞ­ø1Ôþ4³ˆšÑA‘ì<è¿¶hu„‚ 6é„Åú õc ѱv:O©œú÷Œ(aωºÿäb‰ùf2WŸ<2ô?r™Î4aéé‘-ò¡1†!xk[5Z&F’ -@{¼‹ÎfÒ+¦>MA†ã› ²\ 'ÁÇûn·90U~)?†æpS­ëY€,,²&ÿú¨Ù£P•'ŸÓ:#ž¡Ç†¸åùkF"R“ÖÛv ‡Ì¸MÓ HÏùÏOÌò<úBÉKÊ ëDk¬Ï°û§3¯Ú‹G;ö„[¸(<®ÀÚ‚¯g3z`›rßñ5îà HmŒÞõÉ‚‰¬J̰‡kJðÜNVŸ&fG‘×ÙP†ïÇo,ûõ1y >”ÂU䨇íÑzŸÜ£ÔðÕÿ ³ÄÃÐðâû‹­cË¡ßgv«UÒ*`ÈÜçö}V´âŒWôÈЪ¤qf›˜Ûb¥A¯Ž E²£¸=R‡ûî8^»`äÔÖ˜’a PMËÊ3ÒÕŸwÌ]³€1žiqFuÞ*?j®P9޹ £Z;#ò ì‡€ ó7>,llF¾ð7H__ßjµÀSú¬,µ/\Eªx%÷k™TÌ­YêžÄ}ÈËœi:NPjW+»:7Õ«Ÿ9ÚL}ÂÒ#˜öî^êÔ!hËš±ÿ@„¾y¦4ÁwvÐÌrÁHöùT½ä  Óö¿bߨ¨†4ˆoäP#‘R¿‰go&ŽüÖ!àù‡ruܘÔ4yJv ”'Úˆ\#-‚&ÞÃÞ"ÔeÐwfߊéý±WY0g`K!mY8cký¼²8ÈLœôþÈúùÄøÆÊ­ç±Ûëèíë4q,þæð­ª+È'46;=Ä<ײPÏe ”þ…=kLVÞ<¨ƒ¹K®Ì?etâ±²;u©kXu„šìƒôC‹ø•;U;Á€†ÊQÃoA˜”½Ç2°û(¼Êtæsˆ¬EJÀq¯]ǹq„H ÷·‰ƒR%K4wñ„ÔJ%ï™z@ɤ Ÿr×AS2mÎY€™¼'¯.‹ˆ”¿+Ìw}ü.¬|¿8©„üÜp&öª.÷Þ_q‹O|ñ6.Ú‰´ŸeBÝg 1¬)yÔ-ÊÊ·fšÊºƒ95jù/kh¾¶Ü}ÙüG,½H¨y^Äô·WÝìùåÍsÓó/PÅ=†‰oèPSFà ´W—÷‡tÓîA|x:Äш _˜”ú¥Kpв"HÑF‡}>µ¹»ó|ƒ&“^ÒÅäæ(aORà©ÿ\‚TŸH°:d-ªÈ}þIÇè{Gh«±ûÅi§üSž(h ¸úÞuv=NbËÞ9p~ZAKKy­ä =ùüÙn[oíÊ´&³}hÅŠ†ÍÐòñå‡Ù»0pë•ͽl0‚8žZí`õÓKäKg“/$* ÎWv1g^eØD} ¼ˆ”…í̲ù¬¹ÑÌúO@ˆ^¦*:X†ñáÂn"<‚P&\Æ´.!©EªÎb@ƒ¥7KÍ‚©ØµÙ$D´Ëv ‰h¸l¶’›3Žëïà@ôÜ QcõOcxóð7줿 ïŚ퇢¡æÛM‹}©_0O!Ïa<»ŸÕß·«ï¨|Àö헼¢ ›¸ŽWH@y˜Br€’»žöþŽÜ[LXºÓ>uÆêtè¶èH åœQ©AÍס|þ'#X±It•в K ( ò‚ê5oún”BÝnJæ@ô TlwÍã¯úš/§ëê'aøÁâ[šãèÑܽ|ºÇÊ~YG,î’¶Þ;Œò/•Ó1¥—æX$ŒTIM”ïÀü—õ7H‡ ØèQ4?#ò…Žkk1êÛƒ÷…t#‘®·WE?Ëp»Å—¡ôKâ*ó–.K°ž×)Q!>WOd¤Y4ßËú=!‹Äz`kžN ñÛ]¶PVµÅDm6ÅžýegºcØòHµbæÇÅ<ìÐSï¦N¦ûm—®ýÄŠÈÝÚ:¶)Øüèw]ac¨æaeWùßó:õËC+ì˜ò\¥µ¶èqMôÕÂö- ý)Á®§¨æW!XDŸÚ_(ò [ 9k¤ÛÛч:5šÄ‹ä¨©nV¤Âß§¹?ˆ›¯¿?,AƒƒÇ©ZD V;hìVÎfÏ3ÛKrýè÷v혔€Ðû²Ãc­ ¡ïDæáM- þá8r»÷)U# *qßXèÅæ·ÈæÙÉ\Íx$íÚ*ø•ûžÚöûB¹úÌ‘ÐGÙ|ý*~þKã2¨|46–ZùZw?g%¡Ø©_Ö-ÏÑÅÎ?],ª9Q%ƒ…!nš/Y|ýhßçýá,½Íæˆk»î©È͇Ü'œÒ‰ùìüCõ}ñqÉ8+÷ùØš_í…Ë_‰tèëBë_î¾kón[ÿYh>ö`RÏVÖPâ×>7fñë4ÕÁ•$Éùnö6àQ‘´Ä”iˆ¶Ó1§.OcÞïzS:“lãBXJ4Ã|æ.T-wNó¯2+ÍÇ&¾€Ãá4O«‹Ø^9YpÝ" KZ^²ˆÅiÂCφ-±ÓÔ]†!¡ÿA€C—-¶¶•H®xü Ÿ¶Sg»I×™²"g3¦õÍä~h:Ä7HÊÂVa›rÖBöùtp¯ QÞ S—’ïÌ¿MüÁÇnÌDaôŠW /”/lÖ‰$kaLaù¿za¼˜œcùÔ׆]Ï@÷ZÞÍ—Øõ¤– š¨Þ‡úÚ+”y% u\Úê±à0ùêecLö c\rjXŸóçql:¨'%5›ƒ}9ßPÞ`¡vØ[ž+JØú{nb²O`d›áW Vp׿7)bõÊŠTQ?ö>¤Õh“)KRX̰ڦÉeÔªQY•>èÚc§k|uê›ç‚Ó]v=•" uî],>³Ó>òÅÆ_ÜjôQ’­BòÍ¿'à Unª›¡=<Ï2]ˆG1/vu·qÄ!ððÓ˜»Å]ÅWAk±ª¢ÀÎùØ#Pù/×ò¬×¬+’ kÅöªt—Öí™Ø45«S )s[‡6vžû›·“òÝ.›Ha¥>LJeXó>ŒÇÿ´š2æÖ$ t K}­Í˜?ºk‹¼ÿÓÛ«å\tùæB À¦e oúï›ïMrǘ8uÕú§¿û[ÞÆ?K4bûuúÅ‚3jE3Pø[W@Ì*ônÜö:¨Ízµd°G.©/b·=V¿<ëžå‹-ç…ƒ¸u²ýºÖ­E~g±ëÖ:Ù†´MH||k|xOR¾±oÁR9y£‰sh6PQd!7Ö ¼›ÛH@æN•´Öëìþù;èë6í¾fÆâW=•‰)C €ëXð'ÈOß²y…óÈ !‘Üê³±jã.8ËöƒîÊ_ Œ¤ÎKÜ¥ÆèqßõÛm•Ul?h9Ðèšt-©#Ò'ž?óÂÀÉ®ÅçÆ¡O^k‘úXbg%v=ýºÌOˆvïðŠê†ªÙ—Yy/ºé„?6äÞÿp^Ê{jr·]?©ÄO)EçôT±ôÛª!Yj/”sV~_3¹Vc Ö5ÁÞaÒê öÎÙ{Y96Í_®òEröÈóí#®·Ã¡·Æ‹øÉÿí__û&Ó=„s´!rHÇ_OsJÏbb²õu—N I÷½„í"Ú‰}ňMÛ¬NEåÏüe®^e9#ÔM¶|mŒòɹőo.+?þœÀÞ¿åü™_ʛ KüpøÔhÖ¾^]ÈW¸¸º¥¾*ïñv®=–uçÂüƒ,MÎ<vŒ·„c6æ…Kc™ûKj ‡ dùÏÓ±ŒÙ€åÜi![¬ÈØZ0qy2••ç.IŸpeåŸ/®2¼vÙZ°)ælB±rƒc¿]ÚID#mîx¼£àQã퓟²b€ñëñ:Bß¹¥¶‡ËöK®<ìùCê M¡cˆÃ–]<©!?·Ž‹(kޤ™¾Þ.Åþ¥!þmÝ9áÐ2–ò<Ä' *´ÎAù&òÕõÊ‹€"ÒæÜzKºfG j(W°å¡ËYÝ ƒxµÄž"}íÊ…KNa߆Ө”ßÌòë¹0M~ éT,åž zP{{üúkŽÌ•ñ¹^sv÷ÿYtϳ¶±gÝϽüsŸ{[”uý˜»þ "ß+r-cran-shapes-1.2.6/data/schizophrenia.rda000066400000000000000000000124201412660331700204340ustar00rootroot00000000000000‹Xyb?ßÙê¬õ‡ógNÙ[[× ýº˜ƒk±1±‚ž"ÖeŠ r\vÜüðs8¶ÚqïB`n6ôïp†!Åp .5h½äÿÔp¡ 0|D»ètÕ• vðø Œèè.(¤¼-/2 Ar‹àã7äpÀ¨Iœ,Ñ ¤ß¿ƒqNÙëU—$@øA‰Û/Ô êÙ¡›œ c¡«x˜§ GÛLÎt³6ÌÁÒiòçWYd¦-±§ûaÿgŸªškH}è¬ú¶À{ä}Ó_òGÚê]K¬}Cbéåt ,ÛëL>®°L¼øõ,Fz•âΟix7¸ÝL¡Zšt$§ þôØ—^˪ÊçöÐÞBC¬Í>gC MMªCèÃtýƒ¥› ¾àîÉÓéƒX“¯Î_?·YÞª\ ôÞ¶Zãïyxåçbüü}9Ôä¿¡¸êMBÏÍ[WÄÖR°9«ÙÏûC/&‘¾›f-TAʶWê[n½Â®®ïWvxs!ž4Kâ•Ez¯š›~H¢õêÖ}‚PÜ~èÓ#ŒêI>já%ôN>£¡Ø¶–ë]uz¦­¿¶î´º_Ÿá9}¯mE¹ïpc @î“–PÍ–½×j<T/­ÝéÙùÉðûœ%ÉŠBÒæ«‹ôºqð éáçòÿâ)Nº¸ëüµÅ@ŧUËo¬ÖOÆ‚Ðw;°iØuEÆyqŽ‹k¼ÅÆÖþy¾ÎØ3µßW{,ƒ«jÈÿ,ó^2^M~rææÆjÙSM‘ñØß2>Gìr&T™UfþxŒù|žªëU6ÏÃF ʃ cgÇ<ƒ.Ó˜Ý$ÍØ|GÎtÿ $kOó6ç3±£¾·ÒûXùmèÐŽFÚàù¾Ò Lì=ð©nIøs¤$IóRN‚¼„;³¬,±ªçû¦|©T exm¿\½j¹ &NkaŽ•­¡Æ¶@«èÍT…žD.9¾3~ÐxÚº1¹ ÊêðÅ,€’_0݇å7g«š­\…™×^¶ø£,¶y-ð3øé‚£.¶vC'Ñuïtödm ¤{Užq/zµ?MlbnðEP4+ú/Î[.¯„MZ¡1~ÂýMrªÌU@§î-ƒ;ŠØs¬îò?9úXlºŽÂÕ·™º¸Œ§š°ÄbdýšåÔÌ\= _øyÃÔ-˜cfVʃðzçýær¥£˜?ª±-<Jº|ãÂÆfä {‰ŒUõ­–s®crŸ¥¹æÙ H“¨à~±)sjz$rŠ ]ËYJlker–¥AãÚzU«ÃÝØÁÒ­ZøaãCßÜJ™8mâ™SvïIÐ7˘.øÆš 6Œðgç§ò}˜¾øúFÅÔd@b ‡J•©õkyV^ÏÀ‘ß8LjZ¤õÞ~”GHÔ0ëX(Q4GSW/H©0Rô™ª”J<û)g%4%Ñg˜XI»rë2IHÅ­7EøŽ£¯ßÙ%ïæ!­*/'L…½Ê‹|ö–_âc_| ·!ýg©p÷)}Ì¥¨Kv…Ò² Ʋ`J‹\tÇû$4_\ä!4û>7=I¯s˜öú‚»ç 3 ½ 0È’€á ‰Ä¶­ÅÐ&vdüá²MÀlÒ*_ÇÆ[ΊfއYéP-5rDø0Öÿ¢þX2T¨l¤óã~«]©P+÷ø´ò…oPžufÅ8?´þj»œ0rò€ý=ãtTÈ“¤IAå1rð»D;,¹<ðH:†­Š'Ç–™§â“¨1?»Ii¤ö{Os`ÁÛ,CA‰Âx†‹%Ò[6;e!Þ;Kκ;[÷‹óΚU‚¾2÷‡æ!09FQžZÀº#Õó>ÒšgºçE^ Ix“^2 ¦´Š7ÐN \ßÐN½! qai 2G#6|aQë.ÀAóò k-v~jsvÌ æùMF½äª0)Í‘ZÃ^0$ÏRÿ¹i¾ž¡ Èœ#\žóä>’0vЗa÷S ç¼^(¨'¸ìÖ%v<ÎâBo9?=¿¥¥¬Vr…~þl;‹·vÇôb³|éE úÍÐòáÙûÙ›0põ¹õ­,:0ƒ8Yn!êˆå-ú¥ (ÓIgª öºìFRö×q,«Ÿ¨ïkÕ7”Þcûf{ïÐ(}Äæ9ncå’P*Ÿ (ÉŽ§}¿÷z#wš'¬,ŸC‡v‹–T0šÏ• Ô|Êã8‚åkÅ–*í´Æa™#¥AÞP½üeŸãå¨ÛA͈š‚òµn¹üÀXþÅ¢®~†ïÜ-¼ª>†žÍÝ‹&{Ü ôW›u¢.Éà“»?"sËÖ§N;Ó0¹—îX(‚4)u”ëÀ¼×U—É Èà~?3ò„~kkÑÚëý·…µ#¡³["S% ãï{ö¦Õ'ùÿ2ôOÎ/W\E‡–ß¼EàN;ùx¡¡G5?€WòÅRïŒïA±I\„z‡VïI5Ž+ÆúrJ…@Š¿¶}tÖRv~qˆ' |â…ò¹ Åò:õÂÝü† ½ýû¨«¿¨”}¯ƒÌWýç™zTÚfˆ~c#ÎEoÑÁnù÷Ï…¢<#h>CHê=Fï×눆建¡©!.¨Ï<ÔÜÅ}ꨔtÍ5 ±…EŽVLÏÁø6B¿Ý9™!»›ÀÛP&³‡à» —mó§?€i·‹]ø_½c3?¿éùld=ò¸/ -"´D3 LFlÌø'hÞœd³È èj?õ¦œµ†„<¶Wªa!¶vKC‰³¦øeÕ¹X2}MÝS™Š-IQ?–¿H‡'—R¾)Åú{ƒæÂ-Wé’º4iüÞðW_ÿÕ;]{êlÐòĪ!!»Œ¯CvÇüs_u wWÁ´cš&4Ž|¼äµ»jÜkÖºšÿÕ£w%áµV¶>$1 >ò=ÜŽ—#jÎã‹qDÿŸ ƒÁãcâáâÐ#Â耊iÚ:}s3`ÚÛ=è'_„×9±ÃbYP¤²òcqC'P¯œy¶¡ú(<6«úž°+We¦¼ »±g_pëØaÙ‚‡‡³~\Á¨± 5Ÿ¨[Ñ«ÁUíN^Óâ ÕE~H5²;¤§³H±õu—°ˆ@¾ò è ÷ÌæÝÌñ?¸ÝUØüÖ`¹mIl}æ®pۗǬªu³µ¾â`¥µ´r¡7GMî²y„~Žæa¶ó äKÂRkÓsƒeò‰÷uBL˜ÏÍ ™©fÍWßæbÝ®ysb<±5W+™ôí&›¨KÛ¢#×cÏÞÒSw݃±F|Q„Êe¨~Ú­ùõK²ë~j:›UùÉ ÷Hlþ½=mFÔÙ^q{Ø”‹…{Q;ã_ýÖ";- M©ûÛ«N6þˆ•ý²îx3a± ›n·Ù_ü‰å;4µl’±ÿèáïÚ"†PqØdd odÇN¬Œ ñi¶j_E€²­0|k¡?t汎`u"9Ƨ_î^7á2ÓǺšy:oÄ–cǽ]òK..AÑU·NÃÒ™17¢+vbÍCW’JU÷d#ÔÕ^¯M-\†m±[Klù0¿¬ACë®õÔ"3*æ³ã¡‘J‚I£@]®-~½hç&]At‹ªch8 ²cå骚bý±“9–Óßq¨>únEWÙßü@ªÃÐ’x; %?Qj­íFlÓš}µ0¤yïý”dÇSXó+,dLì-ý„­œ52ííè˸71šÈ‹”ȉnÂRa4„íQß›¤u—Þ”¤C±ÞƒFЪÕvìÌ"òóØÆ^®ý^¯x+- Œ¾¬°K}è;–q0Z]ht¥Ýgß„²¹/Ïõdë·ˆæéñõ8$nß ø•ûâUµí½eªS‡îÝßÏÖ×Ïãæè>3,…ŠûoߦT<…ÖO'4;uK»·rt±ýO¡jŽUn‚wõg„¾¾¿çóÞ0o$“Eе ]·”äfCÎCNÉ„<¶ÿ¡]úaÁáû|mLÏö‚Ç確ÚÐú‡—»oZ¿ÙØ šÜ×±†åÔ¸O }@dSå>œO”šíng žå‰ ŒYúØh3}ÂaûsǛܙh'¿B“£˜¦S7¡r‘KªåP7“ðzô‡S½,Ïa{Åxþ%³L,nyF(¤‹ =6Ç^LUuÝŠUýw»l°µ­XjñƒXð¨65ßÈÚ.ÔÅÙë0µoÆ ÷CÓ¾‘@r&¶ŠX7P2ç²óӱϣ.dç蘰Oº1û,4ñ¹<U£ç%¹jx¡ln³VE£ Ê^é„òbR¶ù#w^kv<Ý+xו۳ãI,4R¾ õµç©S[Þa¿ÁsÎ`ñÕËFíBæ˜Ôİ.æýöãØ´_GZz:ûÔös¾¤¾ÄÍÐ×<ç±õwßÄ$ßÀˆ6ý¯@+ç®gTHÔÒâ1?ö<¤Õ`­1),bZnTç²Z娬Rß&èÚe«mxaê›gŒÓMv<¢ qúM >¶Õ<ôÅÚŸ^môU”­DÊ•Ëç¾Çã eNŠ»¾< Ë4ž‹‡17fY·aøðôÓ˜¿ E]Ew— @k‘²‚À¶ÙØ#PñŠkQ2Ö«×J‡¶b{eškëæ ì?œ’Ù)PŒÔ™)ŠcÛÏýõÛ‰yîFÒX¡Ëñ^hÑïCyü-Tä93&‘g`hÊ MæìAèÐ^Qè“ð/Þþð[-ç<‡+sͧXæ¼!è¼g¶Ù£cU¹oTAÚŸúîoy÷8Á€Í×içò­T § à7®€”YàÓ¸ñ+tКujïl¹ľðvXýì”GNäul9#tǽ“Í×µî„ò;…]WWÊ6¤®EÒƒ«cüPõ0ùÛ!»,‘Ûjð±Çšõ”Éõof&q¹S)µõ»~þöÆÊµ;.Ú†úUGéã„>PÁímðYgÈK[¿n±Ë.È !“Ýë³°rͬšk^bO”š«Ds=T4OÜÝyQ“àÝÏyqS#(³^æ ”qLሇvšÛo6Ôýö3ÿêQůŒ1Ái6tWü*`l$wÚs—¢çm·o×”–²ù e_£[âŤÈ{òتŽwÍ?=}[5„øHÐG€p ìxþòu©ßV Ù¾ÁóÊ«+§ŸeBÆ­¨¦cîüØsûýi?ì©ÉÙxé¸.>%žÖQÆ’oK‡di½PÆYñ}ùø¨²|+¿ze!ÐâíÇ-­°w†ÞK˰iö"¥/RBس•oi•-½î4œÇOùwžøââ·MÝCX>£6D÷ùè‹IN™i¬QH:yɵ(DÓ®Ûc{‡¨fB_bÓFË‘#@ýÓYË–šO ·CÓõ_Ãr|fp$ ”+BeGŸT±çoÙúWãεaÅ~8|b4sO¯6äÉŸ[ÖRß·x;W‰‡ºÓ¡þAæÆÀ`=Â["ÑkrÃd°Ôã-cdúÏÒ2^eÜ©!ë-)Øš?î0žBø¹s‡Ò>ºþçKºÛÀ& ^!4¤l äšP¨…œà˜¯GG•Є¶’QHŸIO$Üo¼vüSf40½^'è;½Ð&ý`ÐÁ•‡ÝÈ]÷b’éÁâ¸~;OÊ~ÈË©ã"Éš"ùCÆõÕ¯bÿÂÿ¶îlHwì y›ü<%>ê•kœ†²µ” «vΪh›KëUYèšÕ«¡žÇ–ÓU].ªn˜¯Ä«!þ+–¼/XpûV[ b^3Á×3`2›üâÓiXÂ=c t öÚØ¥˜³É÷RÍ©ÿ5ìžuÒÚnfæ=³ü³Ÿ9-Fl?ˆCóÿ¬9ÿÇëÛþãçØžr9eëL¬þ™Úÿzp+û¿Kg«+ÿuÏl+[ ç¿·°è´…Õ§ß¡ýçåöv§þû8]ÿž=ãäpñüïÛ8~ü.à¿YAr-cran-shapes-1.2.6/data/shells.rda000066400000000000000000000005641412660331700170660ustar00rootroot00000000000000‹ r‰0âŠàb```b`a`f`b2Y˜€#Ï ¤ÙŠ3RsrŠ „Áª˜ø€tØ€Ò·[åv¾ne@öw4¾êÑÄPs&ÌÂPdŠÜ¢Í°ø:—mÁ õ×PÍË?#¡þÖC÷u"U1Ô?Du'AõPÅáêÑÂa>È•o0Í·-ù Cýáy$¬ñ CýcPð,¾Ž¡Wøã \êŸT<\é~áƒ3üqø—ûq™ÿ GúÁ¥þy 8@‰vÏs°s¸0Ôß[D´ú«¨á€Pr¥û: õWPÃ.+<¯£Ú‹PJ&_íß0¡” Ì)™¹@ŠÄ„b´(ÿbP!êà1Â!ÀJ£ó@è@( <¿JCùÁPùP\4T]v:JG¢Òh^cÍKÌM–w  R$ÈTZe±gV¥B½ù¨œT?r-cran-shapes-1.2.6/data/sooty.dat.rda000066400000000000000000000006241412660331700175150ustar00rootroot00000000000000‹ r‰0âŠàb```b`a`f`b2Y˜€#Ï ¤9‹óóK*õRK€jø€¦y0€Àizb „nŸ¦&G@èE&zZ„î€ÐÕõi º¼B÷j@èâ´Ugç5?9Â:Û–ý„C g¨QbŒC×–U3 öñ9Lõ õ™ÏîP[ ?ОšvÞñÓÆl]± ¢¿F«Aè|ˆyúçõZÈw`Â%÷y’;Lœ4—UÓdíIËÏ̈gû~Àoª˜±‡öK‡éFI_gÌs˜yÔ/#v{¶Ã¤as”·Ouh»}¿ßÝÀ!yòOÎì=˜,ÿ_ã›z µcÖ~ãv±3Ù’-¼~w`òÉmUü¦h¾Û,”7½×!©RQ·Üp‚ÃÜù̉Âþ šEÁþk]œ§·ñˆC…_'Ó=F‡”£…¥}ŠÓ”ÿHò½| aÝ›ý£ÃL0õÍ“óG‹ æ”Ì\ Å b18.!øƒå`Íãr-cran-shapes-1.2.6/data/sooty.rda000066400000000000000000000013661412660331700167520ustar00rootroot00000000000000‹U”kHSaÇ›:&¹,I "²"º ÌK‰Bñ ‘:£˜Ž¤Dg¢YŽR™ÓeÕÌ4§²9ËK¡]„T¬6ßÝ4A ºh_Ô™PQ„v¶çïœýÎóœ÷ù?—÷=;yD¢ A" RA"%âO€hËE•êteñ½B4ú¸5Uð]ÜʈÍeD“ÍOÖª!Þ‹'Z/ë6«Âh}@Ô×÷K ú§ºŒy~¨úÎ!ÙKV&WÇæ^ÙÊêŸö·+ fQ©Ól92Vmðû¹I«.x•üƒ×+†(þò*wu¤Ç›’»¦Ž÷(¸ùu /Ù2›[:ƒöÆ?ä-½“¶œà?\e‰ˆKÝÿ…µÅ¦æý²u±v¯ªðÌp1kùžÙ±sØÂ®OgÏ7¥(™¶õ¯¼x¤gJW¦~­îöhœ)‚·kù×%Þ:1T¹ÞÜÆ³Æ%m,Ï¥1³Înin8Ë`w›üý™Ô÷K¢<¬BU/—̰|ï¥ò[‘V®_ф奿á5G²³¸ù@úùˆmÌ®¥9ÚϘ; º?ùÊÆdDísýO;è=wGO ^I¶» ñØ?¯ž8Vÿ0Ñ¥ “ —‹üÞø³q˜‹s~ìyèIºÖü¹Jó‹.Šõ=Š·ï,ù^ËÄ{Ùwÿü¢ÈÌŸr-cran-shapes-1.2.6/data/steroids.rda000066400000000000000000000453701412660331700174340ustar00rootroot00000000000000ý7zXZi"Þ6!ÏXÌátåJº])TW"änRÊŸ’Ù#Åߨa…ø¤T”²Yd{¹ Nbó† «Ö[Ó [° !Ï–^ó¿¿5$çöŽó–É==ûˆ¿u6rSö‰„+JJª¸\8TËdàòã&èY1ÄÓiå³§d£úí jôš~;HÆ.ªÖÀQ "5´ZôÁ§ñtÌ›Â;­“™2Ø Õª Y©6¢&xT+…ç™~E•ÀæÈ­Wb‰&å°*ÞÎ ²Aùg#Û- òÊÏ W?‚& …š+›œyÔ€E<4(Õ‹t Кjq°?=JX„½ƒqØþÑè,ñY‡Uûè ¥PÐ×téyÜPŠ…Ht[mЛ©š6EÎ¥…&þð.¯ÿ—£Æ™œ+DŠjoD%ÿ:hðÉ´P‡R~4*µ_ÒT«£ÍÇa0º›ÜŠn`/ÿÄïÝM}¸æˆrÒªŠ‡lˆ¿–|rCÛ±tª5û«‹÷áßÐ ŸvQŠ ö,lï»`_@ãoÏ“øˆ•ÄXa• Ji4Ï;@œ?¨k%Õ7 2ÎZ©ñÁ楰υ¡d€“•pg¢&Å!ºc‰ûfꡆº-Ý3Ìñµyf- üÓô¥‹9 îŒ ]³}¶-3OD™Üþeß"Ã!ÈU 06òö€Ò\&Ꜭ†Ó*îýz.ëZãû?QÓ7¨R¯¡`êŸ%•a²ôRô»˜†êªpÜ·å0:Õð>óƒ{ë„©N#©ií?x»à¸ô§À|!¡Ï°àr.Ξ½€€³#Š9¬#˜Ü;• ¶4±¶L– c]B/£\³DÇ#üÉþ—£Ê3gÖý† “øìóÉ'Rx´¨x»VŠI\ó"陸µ”(¼…OjBÃ{Ø+·È{±üæ+Òs¬kÎ*×aH£ «PA<h* ÷$‡$³M¬j) ªOÉ’)y˜.Æ/uøÊÒÂHîËÁQÞN=ÉÐq4 Bh—kR¿U¬ÑAõ Šônzá}»)§?þc~À÷@?j­JQ-Þ )Gì§_]Âüiº_rÒû‹‡X‚Ÿ7¿“Ái4Ây6KÐCc1í;Hz·Õ Ž® ÚŒ<¼¼´ÜeŒÛ-à *ÀmäZHFÒµÍuzyÁ,—(ÑpOù§jœÚ·•œì-çÂòu|9&áÆs] 3—ÂeÐì$`ߟ¹¿KÒÀ%“”Ž‘0èȳ€E!X°>ûOóu{ÜÑhò Ų–j.ï³s\*oàÆB±,¬ºª£˜`ž†˜ÛàtW6‘ˆððÐ1¥uSå­ÞpÉ!Êq¬Î•}àñ“Þt4ß%Óoåö{ªì~qR6Ò$ýËK†ž$“Õ€j@2`}v†M³S¸HŒðÌn | cC¢ýý›k0M@KAûüÎÀ.ôð]Íb­›»h„’_ûßì Å>¦Ù†7ÍÄHÕ<2Å9ÌDuß&w*\ƒLº/™‘) &ê醺0R³Yö´O§ ŸW&šQ®y”– ì¶i»¦7’QR”߯Î0T#ñ¼Ÿ6VƒÊë¾ñïPuö6=$V·ë9ëXïïr²FÛâÜ5¸'dùhÅÖþVðßëÙÑ"5+ W&cÆ/k}¡l·º/Gy“Hª ¼Qßà&Ý*³ÿ 4=ÕØyL<4WNÁLgIÅÉzCÖÝ÷ë]BäÌ‹P°ÜïŒ'7÷ÖvRÊËïÛqÙòÁÂ%êÖñó°Ó&9õݘiQODüâñ䄬S)üJ¶NåA= ©û½\W…öf#±û7á>hÃ*£c¶CU+-ŒÕúFJ ð`ªjH¸l“]ƒIî?£Ž«Î’µÍü˜‚ÃŒ²¢<.-j*õ¢òñhZvÉe³úžbŠ›^À.²Ëd4 5Qã)qßW’üóœ?Œ«ä*;vc^D ÇH–ú‡TÌWšŽ?˜=&)ìb¦yo«Ê¹t{ MK-~Á£ªƒžS²ûS×HSÛÞC1dŽ?öN¶l)Ÿ3³ÖaajpŽ%¤D’ÚmWáÔt´Œ)^øÉG×üQ“²¥N;1bƒ} 4ðQóön|LZÛR$5l°—´/îÒu˜`»É±T+NÕ>~w×ÕPs›mèî² :•× î§¼.4f@ û,¶-®àÀfãø/Œ®|þšËbw­Šõ$qÙèòå“a³ar+U© ¸|Ù)!:ñWñ8²Af ¯ Éäá­¸¢,ÕÅ1×–^òt¡`°â î°1q¨ø)ñ>ÁمIÚû Ör*jv¹,oiMÀ…R±\”šL^FY4jn0£$Ö£°DÎY–S23†Ã A×3vR“‡J\ëî\ïüÖvçÂØõ¸–ù£Ðã⸞îm?Õ„búLF|kAlÛo|ÑÆª¿D;l”,°¡ÄG¬ø™Þ±ï5u¥N†N¨+7Œ~!ÎtŸŠ)@s®YÔÄü:êiž„ì¾Ñ¨ûUlÑ ©ÊÑzJyG¸{œEc'׈ù­B ºO£—ä¿ìÔÀLß½'öªE`4¾N«T$âØØ>S”Á DjµS«¸t¥ÏO<†kËäü‹´‹Òž!† üøewÛöbõ ýùòãTIS¶ô#!Çf ìç­pô•cùB‚ ‰6¡3Ý@wÝi}BÛÕïéïjÏ—ó>!ÂØˆZ~ýÊ—1Ï|¼à¥J¬«ââë,Ô¬PØd˜µ8R¹¸ÍwÇOÔˆÂ=R¼cP~ë =nf)F2!ë;C½š›txqë¿-ô.OÿõQKÝ‘˜èª3Q3Óÿ"à¬MNâŽñz¼ßѽªÀIßrš ™CÊ*M(ŠË\¼ÿÛæ`7˜Œ?­NÅ{jÓÂq\©3{áÿõFÒ³#Jiú¦•gU š”¹‡O¨hùÜÛÚÕ3GÅj™¬Uá°rïT0¶²Z ÐI ›óÉwÒ¤EÛ(ÆŸ©¡dÄqP(‹~ö l?&á¾+žPš0vxJxªH,å;s`fý™s*kª?¯|Ær©ÒÙ;0朧ïè §Ív¿LÚÉ鑃°<µ™È¾ .ÏÊô|)ÚròAëWÙü&uåà™{€Â :'jÛy;²Ên– Mª”õñÌë8Oã¬ÜFi!d©MÃÂíšs>M¤sÕ Þ¼`-BÿAå^%$õ…ýÿOµ¶¬¨ßÐ\ÏržC­ñ©ËEeÑmoqù×Äæp"¼îsD©ÿ-àÅZê–ó#{&lª›ÈÄPSø¼¾†0‚=;W¸Ë„Ï­2Iõ Æÿ€áŒ©ÒxèI”О%0Ä«”£wÅH` wLz(@«ÒÜ¿<+Ž„[ÀÇê!+ÌOçn.ªM·F¶EJ›5gOÃWkqÈ“ØúÓRõCÏ,™GX™¾kÁ< âAX·‘=2›7QìRôF2;øÕ‘.DÓªÛF…s‚™<é—Î,5eM,u÷ã~’ôuã;xå_1ÂäÃGÊ=Û¬ÝCŒ(¶i±Ñd.½X™bûv¢?ÑÄIÌl2(OÃÊ‹–"(ù~ñ„AÜVÕÍÔy_O¹Žò´,/_ŠerzŸo›+QðOÈÁYÅéñ ®º=fÛO_†OÓß/9)> YÚG-î©t´«Ë£æì£Ž\¾)ØÇ ßEªÀØ [(‡·¹”`{Ðt¿š»& ÷Ël}€iÄ´G ú9Û^kóÈ@×jçmǰWĪܞqCóþ—¯Æ"þýò2—¼zèQ\ ö«§îÜç;Åà,:Ç3Ô™ÀÆšVé¬S¦¦(zêsŠçl ®CjHø­h°zå‚kOV =F–ÂÚý·Ób™L0“ ×b"ìH†$3î‡MÕù Š×ìp~Rø‰~¶Õ1²¯Ú‰/Xy“Fƒ–¨  HàA4ïŸrZ(«–F?€"3—mC‘Z[‹´²Ï•G¥ Þ×r1°[™5BéÇñh»è>« T½°Ü‘Y?Sµá ÉË[ýf×!³Ä÷ìê³YÇŠ¶.*z‡üšb5\½j?Œç“s=´oßÅ™ði¸a¡ìmæp”_{ z€”A %vbTŒ@œKcüÖ¢“‹k7çrd¡¥†Û¾l¿×ÚdCWü gÇs;òRö–VWco¡ÊAŽÜQ”<\î÷Š:çãV8²IÔ­G6 aU­|Üò0ÙcñËpþm¬MÅ’Œë¨Ü¾Ù¿ÛÍ›w¶±¦ ¸ˆñbrkWÿ(¤ÆßÿBkmÆ €˜úªÃï»;/ ˜f´)dJ1«ƒs±!5v“¾Œðllxú2`ˆÓ\cÏ››ô«ô<ìV‹ò¥jÒ¯ùy ©#xl¹'XA®ME]?îâà 3¨/̛Â|T2”¼š@ÄŸa|"a g2¾ ºhquË%Ë£ÙXÍgZQ¹ª’Ôe'lÙ½6‰ÇxñH ¿·[åPÙ8‡¤ßgM9ÇÒùú“<îm‘ñBûQv,K-skº“±[©¢óŠ—Ï‰+™A´- ú;è*ô7dúQ´8c“Œ¡Œ.u'¥ªWÅ h“©¥\2×Gêñ ‰m8„ˆ‚oI}ò úœ`ò S­Æš©ph^ÑBüt]RõÞcäLܦŠÿÛÚô%áEªøË1–È$×q†UÐÞ\Å[ŒÜ1:ö2ÂE²dûúVÇÃ×™–ÌÊ¡°Ír˜éí²Äj£#aðû\jæ×ø4ËhDNV ºñd6ÐuÜÉ›ËÚD @gCA󯇤ö'Õd}[q/Þ #º—½•€ êK‹Ò2nké!?mIèEcèA›‡¦ Íʼnfä#h©t¥Ú¹ïOd§bÕ+n´ôóü™öˆV^Ga:yd‘Ó«ïœgmÞÌÕÈMٔ纹u8f´1u¯gGø0uo(í’.uõŠG«zô—€÷ Oºê—bDA uÚ&oúÁXI%*­LÒ¤Ö¢ƒ’ŽëŠ]qNvÞ«fi(bèèh­MÊ3‚cÁ’õpr躿¡øÃòŠ#rý£n£¡1¤«m%ú1öÇs|GJ“ôÄÑàðמ•˜ŒnÇ 4^Õöbï¿Üþ1©a ç´^Œi\QäôvA¶Rd‰†L¦#`›ÆSSL!¨cäËxó4‘÷ƽa±¶ùPflØ`Ø“óBM¡gB+FÌlw»ÃkbÞšNÍ=Ü›>¨iŽaƯš`]$SµÙavÅéd+Zç®çÒûŠÿ)CžkFƆàþöjr€< ¢|”®YÑ!°tvX¿5½PÐÚæ¢šÖú‡U&Ó),ƒ ÷¸=–Ë¿Š&G37ÉeÙ/oÁÓB£RÌEXe=—»*FúT0VnÝYn‰a ¤õ‹Áðv<«D¨Ú4ãRùÖŠõ5} 6©Þ†Î:ãÐú¨B“ƒ:‚1¤6œöuÚ?¡%ßýÒñBÐÐ÷‰×Ë—½´“Dw‘éœ^ü¾E¬”lt,¶Æ¶A/¡¶ÆÜP/¸*ݺ®é´#Ãð’BŦî`ŒM“ 6çRPCH¶j8^øi½ÝÎý93IL1Ø‹5…q”ÙÒwÐÈcцšK£!EãÕ#èέ)ÿpnú¶*iäº2wð³K-¬ñáܾǼc?ƒné,7*oŠV’n?nˆ¼­aa®sË~îoúÀíCßåð&`g±¸N~9Öœ!íÉ2T†ž=¬œ¶' KÚ̃œu90ÞÙ@ÝâúæþËADgfu:öw?.üøÂŒ™ö¸~1kÑ´žÅÔ¦y.4Mouì&v‘ËÌCÿ¯ÊŸi­’¥8º‚½­>(Ú&4ŠâÄzá8ú"yIߌa¹f÷1zU ZÈfjØ” ^Í^:°¿x# –iÓLPT˜¼'‡Äpèåç"æôs_ÈÛ}yލá¨ÑPˆ4¨üJeØ’^ËÑbäåLXÇÏ{€í“ M?Ñ=PøÎ¾cÈÔ…Ö¶Ô6•‘ ÃòtIà–a•y¬Iä±qÖ`.g Ìé+P¹¬˜˜’nS¿-¤”.•6±."Óÿ­ü”š“'„;òÝÏ0ex«5v5š€jˆã÷æ W"‡ §ã1U¤†xzE/l ´¾¤¾U1lu¾)ñ:`©ñ&˜J}í§§©ß ‚$a ¨–Â6XÿÓ2'1ørößK€œ´Óó#h»š„X‘Ÿ^––ÓàÅÅN§@w8„«,#7¤BW¨èdØ]aéúP仿¦–ÈR¼)LbÛ‡ù¥n‘–ÓF¨ƒ¿Mñã²çMX‰p _%"D\ÆMÎðÈTÀBÀ8âqÒLP);ÌQ}eˆm‹ Ãéûk ßIhå"Óé{ý„ä@ÖGIí ùë©÷tŠ!{y³}P¯uzôó„´€rnL'1”G‡¤ñh?ïe§H•”Œ×‰z—äÓH±¨ŒU¼®môæ<ÕîêE¡( ¾ 6äaÃїʈÈ0- ^4, |üuïêÈÆXø¾ÀmsČϪÃèíÕ‰÷¿–E 3«§=ÖÏ9iiS›e8@ôìûÌ’u´h’Ʋ²Rd…=œÛÒ7k`Ç…ùc~ÿÄp78¯¸°Á†ë¶¤SRTŸ{;áÉbŒò0bœ»MÝ{äój‚³ú=b–@~uûPªKCO™Â¾5ƤB?*˜dEÓ†ÇÅt>3åÊ]:aýi§ ”‘CÜ7ŠÊ.Ü…Ð{œëdŒB£cÿˆÊ ’¹ø ^믦Ò²a§Û–ý38-”ѺxR1‡>/‘ZÞÞ©=/ú(¸¸Îâ#0:‹ã¨T`¤«æ 3ȯé·y‡œø´Wàǘæ0‰UJaÆÝ rl qùòí¹]÷Ö%x¯Ä6+‰™ÓÂ/2¶”+¡°‰‚Ý»QÊ+˜`ò•u™Å@nfúÍM±I¾óÙGd µF@rÔzTÕŸ;ÍÑ^gñÞh't•"‰ÜæJgû†Ž*¤øKJ Z$±Ÿ¬¹‘hSÛpò5€¬s]åÑÈH×ÉñàÃÛ zæOû„*M;ÙP÷:.sˆjVêµÞ“§jZZNnÈ'ó”C¹‡GEb– ƒ="øÚÖ¬Cè0n@q´m¸;l.§ã¶Ñ%¨MõYšPå°ÕNêœ@÷¦wjº“ÿó—Ôâª9sHñçrÒQ®.æùïà³;ÃCHsëóôvÏBH²°6ª1°¦à°œíÌÛ Ï0àÌ„¯Î\ Òp4UF®(ÇO-USI­ ºO½mÜ 5iÅ_ëµK±Àü}WßÍ’^¬gÕ&êYí£'8Ž0d•—ý  öˆÆò£ì %âšöºígŸ·}œ¡ÇÎ-䎾³Ô½syDÊÞa%Þ6v7«p|lДr ÏéÍÆaöITÙÕ•£6A¤è*Ì›0´" §Ä_ÏÖ¥)î  {‚›fÚä£S½ñ!f—øAãµ^ðOY+t;’¬“õnH…+Ú ®'éÀ¢x¸üAžg׌*yÂn.Œl}N'𤸖°üÀcÜÜóv”|ï^ªr =›%ï¼fu×!áݹVלüæç÷égó;¿áŒ0µKK‘J¿i£¸…zûcןÖp–ã[éA3]Rñi%Ç%»Ãì¾ó2ÿNøóhBKN±Ý‹{í´ûkpJ®j/$;ì¼°C¿ÂdPã&;gôÌžÝuàѵmÈ?• 1¤ “NuÞ”éÕÅàL?,ô¼L˜S‹Œn¢ƒƒBùã¥i­þ<-€Ú_œ:)ŸnÐXj(ÞE …]yܲHHfg…ª'¨;'tÕ`á²®?ºx.‚#?J“ Ú\g9ûf’A. >)“`âýôÃ{Pü ¯GA‡8ýæ[ĘW7¡ J¨t&¿ç:Ðb¹ 8rÊú·föGŸ(Óé–³¾ëÑP¿÷"K>™’‘¤¯è£Š ¿ÉÀšñôgÖN*b³.ŸgoWUÌ-é“ÔÃzX€·šfp ­‡OôÌcÎTuï:fŒœU‘бÊ9•ºŠ×Ñwˆyú~×åbZ&[/ŠcÙ˵¯ENËâOÏ$Ü[©–é´Š‘W³‡­tX`,¿ûG÷±˜úx ®FC¬Rù*R±Üã?Ìß°ÊÅÏz wsÄUGYÁät1ÎÞšrEŠ ?@¨:Ä•+±Àf…¦pÌ¥¼wÏZ1Ê'{p—AL|1I’ ã/2òHM±íꇢ*Nì0:%eÉéÛãKÎè ãÞ(’£«‘ìâ¨ìrÅÜ–4äô0áb±š.øLy©'Nýïüü0%àh€ÌY¾Õo¿ÆaN"YÔõˆKÕ”¾CQ²R¡VßïúÃUñãêü´5 zªi¨À‰²º<×§>HØYî9"R*DÕþËËQ·v) ýãľúyY+}@ƒœgE2Üoö¢ Ï—”-¼‡ñÕˆÕ…‘|/öM׫¦Ní'*ëC3íI¼É¨$B•ç¤_Íiÿ!²&î|kDQEr ‚'ÑQ£åX)ºÓ ËÿS•°SVŽukŠ>a½~ß½LˆÇyˆm qà¦áÛ†èпzã ¿'$9çêé°ÂzÌñnö‘…¸›lXwÞÄQ=¢«¿O"ÙRopé8¬táEüõ.g ŸÚ´\YçÓáÓôó$ÕiK°&“½Nƒ\g,.ÐT‹as ¹]±ä$H´ˆY}n3Ó„h%¨؉á]Ç Ä‘¾Ñn÷”'-×±Ä ïfÊù!ÚˆiŒyTäºeÜó{öË€)n-š±®ö.ÉHd,ï‹wNê9ä™àMuVåà>A¸± ¡È.½¹=—?çØ®n¤v{mŠyLÖpB¦°¡¦†í2Ž`ôÞ¾êÉÂUÁT?ÆFgô{ª(fü²ë¤iÞÚ#òô!Ô:çªëEn¿õsíþbº'tØ.ÒTž¿Ùí-®8Èû¸×V|þëvínIUårpŽѳ̭yM:(ÞðëfÓ·ƒ{ O]oŸ ,(¯§²z=šû\І4´Ì•–}¤ráÊ÷*˜’ìçi°Ù¯$vcMÚ²eËB7±é¾˜Bû‰óáyEQv´ëGb{ã±Wš8ù½~Z °s\:U—ìoŒ;õˆ¤P ͇–Ô¦vè#Cá¹?ö;zÑœ;Oˆà'ñÞ×ÙTQ××[1:hœ,Ö ”ÿœ®pzæë¼k9°~Ñâ&öŒðÑñ†MIJÁZß<­†#X4© Vú»›Ã^WÇ6AÖò4E _°}q(ï"GœïÍ •zSwtx۔ψ½Ma0ñQçS]ògØþdZ«M„rI™ƒ(Ž Líæêìqº…q°ÖlÊUÓGÏÕ í67>KJÙãéa…(¯¿§¶>qeW‡;wÏëÖµØ,K„´áõª~F—‚@×N’klŒ0FJ"`¬)A†ô%H–xå¹çŠº'<‚…Õçc2SƒVy| “wáqóù2i¸(mà>jg¤“M*ç­mf؇mAéˆÄƒðôjÅoÙå^êÒ?À£T!4×òF»®œC¹%'ÖÖSFî+¨ìWo’©^wÓÚ#På/›‰Ý>}»>%¿‘²Dt{$>^4c-†Š«ùÿ‚…¬@§œ^‘„àóFkA¾åLK)R?˜<^—KƆµ7LiFöÕ7x’­A}¾ ñuijEåÛÞ[7uéhä+PœÞl u-p›½`Ŀ֙Œt0šC°<&7þ$GÌT48˜ zf.Ô•Ë`{9VØÿCÞì° æ³‰”a6ä©’(dÞ: ;Å A=ܶW ¥QÁܾº‚|êc æÇ…qqJýB›£6âݤË_ÙÉñôXÕÞèt¹‰eïÒ ‡Ÿ,‘%’0áiâ-è>¤¨Äo·.›‹Æç˜¬™€1÷+ÃÚã|UØä·8\äá©E¼kT²;ã'·““:cª×Üf7sËäH6ì>¢ôcRL[ù±}Ku”‰l¤ZU®õ£}/±”x-žc<Ü€¥ÒDàñôëqd¤¶›/‘,Úq;}ÞÁ›SØX!®Uÿ’nëí‰ÀÆ,lŒmÌàò;ÄòïVPõÃu´ef-›ýèF´ŒJiÅ Éü±‡ÎÏ"äF‰ë9¼‚%ﬗ ê×'r)ˆ¸œÂÛN[xüë™ ®“½ây°°÷̺€†EKxò<¾¾Ÿž¬pU ÌÎNað Ñž.+26O‚ºùËôˆÝEßp‹#žøºÎ÷cÖQœq*ʼvAÄéØœÈ¡c2 ”¥2F‰n_!Áþ¸Mu¡èoqy¦t¦ûF¥#dÒ¡Yˆ!.üÎ>T'"As¦c««Ôé 2ÿ(ÉÝæÆ7–b^º!ñ†Ñª¦©|ÑbC¢Ð´¾ÜÙÚ¢êé™C„ú§ ’"ižc‹’xt«èøµß¬6˜„CºëëÌpѸ÷ÿMž%ÄãªB£Í(õã—Ô”e®âH 9–›ÕgOdˆÞùÂ27¿±§ ”ÿBSè5Ž;o8ÖÜ-Ó àÜ’À¡ÔÛç¯ÿîÇšö©/”y'ëoCz8ë8‘ªŒ"‘ʱ'&[ÔÃÚq™œJÂ3wð×Y€­‡û^ÙFŠyB}ÛÔ…M´tµ#vÐFôîxS‡–Üù’«`ÄåK1x8r·Ž«9&Om×NGî ¼Å“‰´ é«_½g”‡%#ä©Öos àR:08Â1n{»œ÷.eü†_|Y]Úôß[æ7ý(õvßbŽËÒr™Ñâ`À1àR…ï<<‘Eie~¼u€@wØûÛH1¥2"Û”Yí<:­Á Xnîsg O*{ nq·AŽœH$9´°ñ­í”Ý®wÜ}vÙ<Ç.ªFC)ÞAQî,Aúr©z–D]‰3ÒI0b÷ þYº†þ*ªûùÂ\³¯jÐËÒ¡m§t–܇|fÃà7z*å'ä’Ÿ3Âr÷O”5^ÈÌ)Ò¬äÍœØë¦+0³,Š9ãz•Œ@ …@9Ö×sÌòÚÆÊÙK·¯Ô~¿É¬#茲Å;×–Mh;æ=û&b³ÔKoÏBÞ$‹"<|³M YÚ=ØãŠI”Ͷ¬‹Óå_Ù½öƒ>•åÁgL’q\]ޏÂ"[žÔÀí¾´ÎÕ^0ßDO"&~3-Z;‰ôÛUŠ“™—ÈhQÖàý#ÎKÏU)áD;³'EÊñITY=…ÃoV4ùïE–B†º!Ÿ«“)æZÿ7åNÓ<;I³÷¤Ž~f¤ßí17è > `Eøú*X —9•-}àýRr`r)]Væƒ~e…²€œëÑÙ~éÐ%w 5ýǶÝfÉy ú…Yé¬AH“Ž9ë*r~÷ƃ¸®Zœî÷²¾_é¿^í,Y „í!›•ø4ßD̬¯ÕÐBú¦I~T§m²(‹Ås}74~44Ç3ñ(í™|ÄR°[Â…R<_6IoŒµ‚ëão¨eVV`y ö>EöÍòbÔ‰]*иz9˯ÌÞ°Û`˜²Ú]¬Í‚HŽ95’? oÈ•‡nAG&ÒG®Õçw‚&Í">=­uî~(MÞÿC²Bº+‘/lšñâL^gÏÁfWc_Òm½Ð;M•…ß*“;þR¬¯ö¹lŒ[¶v4kqk‘ SLÞ9dS¼–Ðj/ð·h×g;÷íÁ*Σâ"rÖ¼ˆs¼ß“}ƒÂh8ûJùXPýºº§—\ÿ“ùjËøˆÎÔu!‚|Fe'©¼%)a¡:O®nI¹ O¤=¾µ¬ô«#‚W)? Ëd.æC6tqÒdë=Í 2­÷˜^»d]Þ1èfS‰ö>‘ÝÇ•¦žÛjç0¶Ï]·Ãéáé˜*ãXök3?þ]çlx¦ú—"cšì»Þ¢?`­›Ï´ü2â#ÃÁ‘7fkx ƃ*3*ÙÖ›`"à±8*’°LÄ …ÛmDíöÑ• „ðìá>_÷˜½M¿Áu¨‰0Xø9MØ™¾óo؈²ìÝä ŠQ³èŒ˜p;jrA ôü3ÑN “ï»¶,äøøº6Óí>i‘eBÌçn㲫‡>¬|19$Ƭ€L®ô26=²Ô vŒTJE ñ ¸y6ÒÍýjL^ôŸ&¾aÇû¡PwØ—›[XB4Â+,”^5Æä\ZÆ+\IîG ö€HG–_]í¼%»h¼ŠbXFŽg-jÈšÏDÊÖSti Á`á?ž?ÚAÉÔÆ>}aL À_R°Ž³Ð·mÊ:¥oœr)ùM}ZÅQ84Êïš®åS¾§ðõêËö¶l¼ØkÚŽ@T22~Ò¬ÜÝ|S΂÷¾pÎ4ä üŸ  BU-8‰ÓHÛ_Z à‚æ‚iÓ|>N XòÅâ)€çh÷­œ "q? ˆ…m9çTF›OÁ4Ý9AÝãÅ©@YG0InVà9›Z´˜¿Yzê6yÆáÜü›@AÌøff(¨™F¹ ~4é ÓÊ&0·%Òyôn¦æÉ%±¢/<ÁÆI-ŠS|5Psø:ÍãëH½Ñ¬w/‘¹S“ªµ?¤þÅ\ÿmÞ÷¹o"””®¹ÔŸõJ¿qÜü£ ú5@PtA|jc…ä-k°æ­ ÛÆg¡A(ž‚^1#I:Ú[ºÏÇ"Š÷ã6F9¨Òó)VêËøjëPCh&FÖø5s—£,ë²^€˜r “)]4€wãÒö-û]y~p‹õåcðñG¸½…·|xQT9ɦ¯úŵe#xBQñ¢ãã& Þ¶¹¦³öqq5dÿT"§¶>¢ѧå•X¯±Ex Ùt„ßöñgíÕð•Æ§UßK=,Ru\éìóôNrú§Ý–W»VÓ¡P½!ýÞ:9â7£c¸ØF«Ñ˜ì‹Æ†~®T‹åvɱБãs;¥U’š—bÄNPÂâ›*­ÀÆ®k@Н1à|¾ ðþê¿È \eq÷=9M-úg9߯ÌËT# d%Lz›‘ÉÜÏÿþ ðéòÇ >àþH é=GÕCð=kÑí¹Š\º2çZ'Û @$(’ú:‡N9a"ŽóL¤RÆ:G1_ÏðjÞBÐ éYå—“g ÀbƒÛPpáúº|³Â^œ'úç‚ËœÝéãÃIè;“ºèƒñw¹¼rѱª”€ˆ‰þv°Ci§v0iLÀ¾n¡³[f,ü@6ª'x®v:Ì.öJèån˜0j8ÅÈñháa äÎÔ€èÕhë–XZŸÏG i“F?¬W¢¢Q2ÚR?­¯ ©wûÍÀ>’`|@ûå™ `*‚º lÁ‹t…¾äÏ“J2Ž‚„¬Ä|_à¯ä[fÏߺae<¨&ª¶%Ši‡7À¡Ÿ ÐgòÈœ¹B¡'tʪˆø´©AA‰oèÅj÷“2ë^ëjTâoúqÈÌ›»Ê¤5m-r£›*›ZÒ(n=ƒUŽHy­1`½-ß ‘„;PÍ9H·g} E£˜è,°›w² Oå ¼½üKo¼F¬ó‰áiÂLPOŸƒæJâr÷ꊡèYqQ;Õ*:FuJ àö‹•T"RìÈï4ñý…ˇá.6²#Èâ¾³c“`.{ÛS*,ûdOyÍú±ìþxßW £ òy‚ÄEˆŒé—Xõr‡Èâ/Ô¹D?£UÌvÙˆðV´&‹F™äàÚ‹{µ¨>ôõ:O%7QûõʨÂür­w ×ã™ñmzÙâêÄc²7Åø€t,˜á£æI{ ôÉm^ËÔRi¢(ÈÊ¡«:³`©:Éô˧«R9?CqûƒŒFÅV‹4ª. ô¤4Ön2‰ªÑÁµëÒë>åVðSý=L}ÇuçMí ™8ÙãþŒsñ‚²ì›A:B©!Ç þ¦eÉ%„2Â|Êop:t粞±þÞÇœçø=_ï{‰î툶»¤¦ðµ x來g®ŽlÕEFÊ{õoe¢ù‚Ÿ4H¦úZ!—õ“î"b±¸<çH®·@ÆTÜwwfX½êaÓüêUI-E™ÓüíîêUp­>éüü–Š‚öiÑ+¯b·y—k:g q?ý±’¯Pü¯Ôc_Àÿ»XÅt5Ê;µèœ¶6[ú†Ó“ ž‹’çÓH~u‡?£?ÁðìQ ¨¯ÂñŒcŠýΗäfž ©)XöÐÞ[Y1¬¯ÓÇíÅ´†-=OHá—BAí9)5n|§÷¹(éJWK|ËÉØB´òº5Eì‹Ïq…WšIdÄóÿ+Nö|óÝ›AŒ]jŸÁr*GX+ÕF1¦Ý†«-3Io’)ž_êò]pòEÇŠ˜Mu ݇âÈ_Ë禙‚ÞõI°@àÚ"«•Ò_ª 7ç.}ÄŠímÅ–Aæ#–&~W8'Ó¬t·œŸn øí©®C.MƒX-ó5”¸8ÍΖõ·îèˆû£4L¼š¿Z¥8g;=üb9ˆÎÑòÌü4㓽ë#É5NΟxžqou´â}.Åq´cÄ–3f5‘¨îÛÝ^¢cÐZCbܘâ.ðÖtÜyp)”<‹©xq±:wéY¼ÌÅFÁ¥ÁØMϾÁ¼¶§§WòÂVÀ^~¾f†>=/γ½T¾Ý±^œ(¸ÔêYVJLj¤,צ]yö]ÞlKOt=Pölö­ê6Þ‹=ãdÔñÍϹs TxoÒË«ØúJŒk{^Vcèé+É™yËô~^FÆM¶7åüøJ&’°[f‚þ2ÃuºÚyT´ zò1ŽŸYÖ*uåâ5×,ÜOô×sÀë¿Sâ\#;ƒt24Òñ€g\05ÝÜÙž3±<ik›ô-5M2\ösJ°óƒNN#A5lúì ã 7m=Z½G¥ê¢ãÔRØ”^ÐG]Ð ngŸ/ïðäeLH¯’˜4„ý„òµµSY@EMžzÑ÷å+¬Ói9{Þ6wÏþ¾-‚#¥fTÝgU}¼=ZN‹Æÿ›ˆt8ž’z¾fù÷éd¤GlÆ+Úáó@~ w§6Ë£êÁ\ØL0ƒÇâûA«ñç¯Ó}ýôÛ=ÔÉ̘ €-*ò ÷ÃM!rk~/ Ö§´îwà¤gUÞ¶¹|Àñiiž1÷cõƒô+ú² iKœªo¢m"’ï]k×@|ö° €OHpnßï  õnYr¹2/ãœ#.¡'³;÷ô{pI*wd^ØÍsŠ5c®' & DD² 1™Å6Ü[ÃÊÖÉ¡ÿ!9 ëD4W¥[ ˆi$0“œ©F› 1%C¬ V|§ ìÐjÉ»g9Ó|ÙQýì°I*²dUæWû‹³i¦+‹œµ;¾1³CŽÐÃgýÊ籜ùp|P 6Za”ñs¿ÊêÕ&»LxÒ…5|l³uQj*‚„4†ÓYÛA@d+ôßJ!PŠ…‘{:>Ï]eK‚[<‚-PúQ¼¼ŒÚÙ—ácàŒV¡í4‰ý—Н]ÕB[¼ä›#bã'ZÀk@ãˆk"&¦Úƨ9µñ͇©»¨Jñ<ìÁ‡º««âÙÐî¡ÇÌpG³ÝG|1Õ}ü(} L‘c l“ßkwtY”ŠºîaRž{Æõ¹ÅšŒ\]§xIâ¥9lZå¤N5LßRi6AªÚä,µ´«¼âF ŸsÀsŸSDD¥ÐHÀ%ÏùÓ®ho3¹àçtL•žë—ð«ÝýÎ÷”L>?ÔZw÷5 ±(Ó„W …ó×Lm†"4ç@Î×iýµ7âk·0J ìcüvªQ€¦k)•CkÁš/›=kj;/¢Ý9t½œBœcu‘‘Olz©sMRe¸ßÕÊ|d¯1²À.Î_Zœæû;ZÁ¼\Xcù/àün4ECG $'[ú IîÿÈ˾ݲÆú··MWítß]<‘ á»,Ø™‰&§Ãöe$¯¯&˜cL‹ûüf†ßfˆªšÊW}]³Ñ¦ìƒF:Ì©–yiH&ÓlBÆôgI§Šðûƒ@œ ÝËüfïPÖ×$òïËÑch3û 82óüXpÙÝdP«GÆÝã©‚Mÿ¸/µ5]ãU[ìÓM [gYíÔ/Åì)¡Ù²EaÑ£‘qãVö2Þ]•}ÂŽ|fï˜–Ž•~¢¿å..J,5ï^RJz íŽéxjíJ+B|EMŒÂ¡„ÿ{çšV¾ÎOX~iøIž4ui ;V~%i³<ì|µˆŒ‰/ÅÎæ%8åPÝòvzPIv}Q¬¥&‰2ï”ÙyYhIž•2Œ#¹iÈËÝÿx˜©Þ†Ò @|°&>'ÄÈ ¦W£ª¯vð‚õ:¿ºbÕ‰Btðs{²~ÒôUbãè•ÜE]D¢a…GáÔE\@¹eú¼*×Þø¬yÑâûBgi4÷žîa°h´Öç«ã¼Bm>_-NøcøÊàüCìñÇ­BlTTÔ gÒ’ t×dwº½DPPŒñ½µ-ðOm¥[b,”è«¶Ô^ Y(‚1O.·n÷~<­ôœ¡ïë£aéí³P/¶eòs{Í:u]·âQâžGZOf¹F§¨Ô̬§Í­_-ïÀËÑ-Ô4§1?é3­ZáÔïc”ÙÁæc:Ýû©þ&̪@ÁåH={%ÏèÐÅ—ÀåƒêÝ/Ó0FÁÅ.E»˜f­Z]˜jId¡÷0V“þ²¨2a?l,à²(ʽYU8šÑ…–U-¢nîN 0"_PIa¹jÄI‡lf,ˆžÉùûM¦,ÒnWkL=ùVª7îûE~ú8Îi3 ×Àv² Ãn狃㒼;þ¿mœ @{ªÑÚúéÃÉèÌÃç,xÝœsª·ë1où¿P>”–çŸ,cšIºµ‡ì Ê´‰mxz?!¿K Ð^G)>+ïB”/* Óò]¢©¦jËæ/cF•Þ:Ý Ð Üêr‚©„,©Ö°™múÕô/‚Ô‡&‰Ý‰ªÒMåKÈ4݈î!è  9Œˆ˜/Éôf Û>ûƒO¯‘é©(†‡H¿Ë"û‚Rññ; fö%ÓH¬’)ëÒ7UáÇåW˜À‰ôRÆœ#é7¡!V)Â:œÌrIß9þ}0ètvêEã3$#7]nrxnJAf…¬þ‡ƒ•ÀU Fæ69³ü}¥ü^$£MpQ{ú»äiƒÅ3…çòØ}’–¨ÎV¬$&x[9á?½OÜù®UÄTw\VJŸ,ÌNRün4²ÎEÙ)‘z@®~o~¤›÷hµa÷!ÅßÑ0H :¸¡@r=®§@ónˆöòjóHŸà!9ß÷JÑ ôªAtŠ]/‹H$â ‹ìè ÿ­ bä_I¿B‘Lü5¯ÕWeе€zÛ Þæ•ž~tv$ ªïûÉ.DÃ#©¢eòKŠˆŒÇuóGGG«9O¯â£ ŠÄ¼¨_~zãWhœ]ÂîذPG¬ …ê;°µWã³Í²£³]Pû>owc[ ,ÁóuÅ Æ–¥UPf=b²§ãÕÊšÊ6ÇÈ0 yË{ñoÄOý%ûì%ÆùyúÒüË@Ò f®n]®v@ïIŠü¸bnýAîÏtŒ(‹¼–(¼±šéßÒÈãÄzøÉ› UPdðš|™±¾fŠ"=×"æ"™Æ“‚ŠcÛÞÈçîdϽ§«ïés¨A—…i«A“‘A¬ºlX°5•ž< ,@@\™¦ˆ¥Ì0mulù´…/?¨•‹í"‘­/ÀOh¬žGyBïhÿ'Ë#.Ñ“8Ä#¬]¼00Ý·½s?謯‚Ó7È{gû mÚëá›lJ“(¦žN9]`‚TΉÿiiW5=6w¿£ãõ u,/óRñæKÏX}$Ý`©9£iM¿cZŸkÿ:.UhŸQ6Vö (ÑçÞF§ÙK ÜNHZ×#úž‘)ÒbyFÛ@ž4¨(Ä|3 ¤^s0§ÊI¯á^«c¼šUí‰ós`‘`Æ€1("iÿ^Ò;Ï~¨ÆtãÆ0p&ºõaß–x¿0øa¡®|ºà|ÚAÃû3Á^š‚(6•CÅΆ÷ì€q9™F‚x3¹z^M.þlº¦0µ·¯j’}jI7°t¼® aÏ\·ï Ãä‡V`X©w œ` Oßµ[f÷IΉ«³”M¦ŠNãá^åØü%ÄpèPÈpŒ:”2úgm…\f:ΈOZ&1nél¯¾µPQgÛLl½”šSÆã»þèÕÛp Éæ²¥»œ¤ª´öÖGlè¤9š0Få÷CÒ™†õß!rA/>Q–ùµò…MÛ%543T³Ë…-©ò+ƒúMšìÇÿ”ø<ß•Ïð˜Ä]op’:nÿu²‡,„š#ISmŽ­¯Œä]ÇNk´ÎÃñ£}× _ÞÛÕŒ.p½g>ˆ‰\í@i·ÛÀƒ:TÃøÒ`öfn(Y–Ú߼Çû¢÷9ÖÂñ>±Ã1ú¦^dÎ}-惺³:܉¶L‘5Là[æß(¡Í\"D"Xqßm;ÐJxךŸìöɹ÷T›«M…–+‹rÊ*€ÈUˆ׉”%ú&ê{+OþÛ7 /ê«õ..fÁî–kÔ±Á:@ZÈd5>HC$Òáu@º í\uGv}ìÆò“Äú¶Ïsp®³¸F UÕÒ-ëI×ÂYÍ×…¥\š,a݃Ӏ ª¼ßê¿Ý+í¦\EœôÚØºðX,­CwÈAðòe$ÂbT¹ä~Y¼"pФ]³®†W3§"O¯Oüá9‹ðÒhhâ§1? %‘+‘Å¥%;ã'ù¥Mÿ/±}ð[Ž`Tg¼OõŠÝg®0 ‹YZr-cran-shapes-1.2.6/demo/000077500000000000000000000000001412660331700151125ustar00rootroot00000000000000r-cran-shapes-1.2.6/demo/00Index000077500000000000000000000000741412660331700162500ustar00rootroot00000000000000shapes Examples of statistical shape analysis r-cran-shapes-1.2.6/demo/shapes.R000077500000000000000000000033511412660331700165250ustar00rootroot00000000000000#2D example : female and male Gorillas (cf. Dryden and Mardia, 1998) data(gorf.dat) data(gorm.dat) n1<-dim(gorf.dat)[3] n2<-dim(gorm.dat)[3] k<-dim(gorf.dat)[1] m<-dim(gorf.dat)[2] gor.dat<-array(0,c(k,2,n1+n2)) gor.dat[,,1:n1]<-gorf.dat gor.dat[,,(n1+1):(n1+n2)]<-gorm.dat plotshapes(gorf.dat,gorm.dat) gorf<-procGPA(gorf.dat) gorm<-procGPA(gorm.dat) plotshapes(gorf$rotated,gorm$rotated) gor<-procGPA(gor.dat) shapepca(gor,type="r",mag=3) cat("First 3 PCs for pooled gorilla data") for (ii in 1:1000000){a<-1} shapepca(gor,type="v",mag=3) cat("First 3 PCs for pooled gorilla data") for (ii in 1:1000000){a<-1} gor.gp<-c(rep("f",times=30),rep("m",times=29)) x<-cbind(gor$size,gor$rho,gor$scores[,1:3]) pairs(x,panel=function(x,y) text(x,y,gor.gp), label=c("s","rho","score 1","score 2","score 3")) #Some tests test1<-testmeanshapes(gorf.dat,gorm.dat) print(test1) cat("Highly significant difference in mean shape") gorf<-procGPA(gorf.dat) gorm<-procGPA(gorm.dat) mag<-2 TT<-gorf$mshape YY<-gorm$mshape par(mfrow=c(1,2)) YY<-TT+(YY-TT)*mag tpsgrid(TT,YY,-150,-150,300,2,0.1,22) title("TPS grid: Female mean (left) to Male mean (right)") cat("##########################################################\n") cat("#3D example\n#") cat("##########################################################\n") # Male macaques data (Dryden/Mardia 1998) data(macm.dat) out<-procGPA(macm.dat) par(mfrow=c(2,2)) plot(out$rawscores[,1],out$rawscores[,2],xlab="PC1",ylab="PC2") title("PC scores") plot(out$rawscores[,2],out$rawscores[,3],xlab="PC2",ylab="PC3") plot(out$rawscores[,1],out$rawscores[,3],xlab="PC1",ylab="PC3") plot(out$size,out$rho,xlab="size",ylab="rho") title("Size versus shape distance") r-cran-shapes-1.2.6/man/000077500000000000000000000000001412660331700147415ustar00rootroot00000000000000r-cran-shapes-1.2.6/man/apes.Rd000077500000000000000000000020631412660331700161640ustar00rootroot00000000000000\name{apes} \alias{apes} \title{Great ape data} \description{Great ape skull landmark data. 8 landmarks in 2 dimensions, 167 individuals } \usage{data(apes)} \format{ apes$x : An array of dimension 8 x 2 x 167 apes$group : Species and sex of each specimen: "gorf" 30 female gorillas, "gorm" 29 male gorillas, "panf" 26 female chimpanzees, "pamm" 28 male chimpanzees, "pongof" 24 female orang utans, "pongom" 30 male orang utans. } \source{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. O'Higgins, P. and Dryden, I. L. (1993). Sexual dimorphism in hominoids: further studies of craniofacial shape differences in Pan, Gorilla, Pongo, Journal of Human Evolution, 24, 183-205. } \references{ Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(apes) par(mfrow=c(1,2)) plotshapes(apes$x[,,apes$group=="gorf"],symbol="f") plotshapes(apes$x[,,apes$group=="gorm"],symbol="m") } \keyword{datasets} r-cran-shapes-1.2.6/man/bookstein2d.Rd000077500000000000000000000023461412660331700174630ustar00rootroot00000000000000\name{bookstein2d} \alias{bookstein2d} \title{Bookstein's baseline registration for 2D data} \description{Carries out Bookstein's baseline registration and calculates a mean shape} \usage{bookstein2d(A,l1=1,l2=2)} \arguments{ \item{A}{a k x 2 x n real array, or k x n complex matrix, where k is the number of landmarks, n is the number of observations} \item{l1}{l1: an integer : l1 is sent to (-1/2,0) in the registration} \item{l2}{l2: an integer : l2 is sent to (1/2,0) in the registration} } \value{A list with components: \item{k}{number of landmarks} \item{n}{sample size} \item{mshape}{Bookstein mean shape with baseline l1, l2} \item{bshpv}{the k x n x 2 array of Bookstein shape variables, including the baseline} } \references{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. Chapter 2. Bookstein, F. L. (1986) Size and shape spaces for landmark data in two dimensions (with discussion). Statistical Science, 1:181-242. } \author{Ian Dryden} \examples{ data(gorf.dat) data(gorm.dat) bookf<-bookstein2d(gorf.dat) bookm<-bookstein2d(gorm.dat) plotshapes(bookf$mshape,bookm$mshape,joinline=c(1,6,7,8,2,3,4,5,1)) } \keyword{multivariate} r-cran-shapes-1.2.6/man/brains.Rd000077500000000000000000000014721412660331700165150ustar00rootroot00000000000000\name{brains} \alias{brains} \title{Brain landmark data} \description{24 landmarks located in 58 adult healthy brains} \usage{data(brains)} \format{A list with components: brains$x : An array of dimension 24 x 3 x 58 containing the landmarks in 3D brains$sex : Sex of each volunteer (m or f) brains$age : Age of each volunteer brains$handed : Handedness of each volunteer (r or l) brains$grp : group label: 1= right-handed males, 2=left-handed males, 3=right-handed females, 4=left-handed females } \references{ Free, S.L., O'Higgins, P., Maudgil, D.D., Dryden, I.L., Lemieux, L., Fish, D.R. and Shorvon, S.D. (2001). Landmark-based morphometrics of the normal adult brain using MRI. Neuroimage , 13 , 801--813. } \examples{ data(brains) # plot first three brains shapes3d(brains$x[,,1:3]) } \keyword{datasets} r-cran-shapes-1.2.6/man/centroid.size.Rd000077500000000000000000000011421412660331700200110ustar00rootroot00000000000000\name{centroid.size} \alias{centroid.size} \title{Centroid size} \description{Calculate cetroid size from a configuration or a sample of configurations. } \usage{centroid.size(x)} \arguments{ \item{x}{For a single configuration k x m matrix or complex k-vector For a sample of configurations k x m x n array or k x n complex matrix } } \value{ Centroid size(s) } \references{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. } \examples{ data(mice) centroid.size(mice$x[,,1]) } \author{Ian Dryden} \keyword{multivariate} r-cran-shapes-1.2.6/man/cortical.Rd000077500000000000000000000022371412660331700170370ustar00rootroot00000000000000\name{cortical} \alias{cortical} \title{Cortical surface data} \description{Cortical surface data, from MR scans. Axial slice outlines with 500 points on each outline. 68 individuals. } \usage{data(cortical)} \format{ cortical$age ( age) cortical$group ( Control, Schizophrenia) cortical$sex ( 1 = male, 2 = female) cortical$symm ( a symmetry measure from the original 3D cortical surface ) cortical$x (500 x , y coordinates of an axial slice through the cortical surface intersecting the anterior and posterior commissures) cortical$r (500 radii from equal angular polar coordinates ) } \source{ Brignell, C.J., Dryden, I.L., Gattone, S.A., Park, B., Leask, S., Browne, W.J. and Flynn, S. (2010). Surface shape analysis, with an application to brain surface asymmetry in schizophrenia. Biostatistics, 11, 609-630. Dryden, I.L. (2005). Statistical analysis on high-dimensional spheres and shape spaces. Annals of Statistics, 33, 1643-1665 } \references{ Original MR data from Sean Flynn (UBC) in collaboration with Bert Park (Nottingham). } \examples{ data(cortical) plotshapes(cortical$x) } \keyword{datasets} r-cran-shapes-1.2.6/man/digit3.dat.Rd000077500000000000000000000011311412660331700171610ustar00rootroot00000000000000\name{digit3.dat} \alias{digit3.dat} \title{Digit 3 data} \description{Handwritten digit `3' data. 13 landmarks in 2 dimensions, 30 individuals } \usage{data(digit3.dat)} \format{ An array of dimension 13 x 2 x 30 } \source{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. Chapter 1. } \references{ http://www.maths.nott.ac.uk/personal/ild/bookdata/digit3.dat Data from Cath Anderson } \examples{ data(digit3.dat) k<-dim(digit3.dat)[1] n<-dim(digit3.dat)[3] plotshapes(digit3.dat,joinline=c(1:13)) } \keyword{datasets} r-cran-shapes-1.2.6/man/distcov.Rd000077500000000000000000000026461412660331700167160ustar00rootroot00000000000000\name{distcov} \alias{distcov} %- Also NEED an `\alias' for EACH other topic documented here. \title{Compute a distance between two covariance matrices} \description{Compute a distance between two covariance matrices, with non-Euclidean options. } \usage{ distcov(S1, S2, method="Riemannian",alpha=1/2) } %- maybe also `usage' for other objects documented here. \arguments{ \item{S1}{Input a covariance matrix (square, symmetric, positive definite)} \item{S2}{Input another covariance matrix of the same size } \item{method}{The type of distance to be used: "Procrustes": Procrustes size-and-shape metric, "ProcrustesShape": Procrustes metric with scaling, "Riemannian": Riemannian metric, "Cholesky": Cholesky based distance, "Power: Power Euclidean, with power alpha, "Euclidean": Euclidean metric, "LogEuclidean": Log-Euclidean metric, "RiemannianLe": Another Riemannian metric.} \item{alpha}{The power to be used in the power Euclidean metric } } \value{The distance } \references{Dryden, I.L., Koloydenko, A. and Zhou, D. (2009). Non-Euclidean statistics for covariance matrices, with applications to diffusion tensor imaging. Annals of Applied Statistics, 3, 1102-1123.} \author{Ian Dryden} \seealso{estcov} \examples{ A <- diag(5) B <- A + .1*matrix(rnorm(25),5,5) S1<-A S2<- B%*%t(B) distcov( S1, S2, method="Procrustes") } \keyword{multivariate} r-cran-shapes-1.2.6/man/dna.dat.Rd000077500000000000000000000004211412660331700165410ustar00rootroot00000000000000\name{dna.dat} \alias{dna.dat} \title{DNA data} \description{Part of a 3D DNA molecule moving in time, k = 22 atoms, 30 time points} \usage{data(dna.dat)} \format{ An array of dimension 22 x 3 x 30 } \examples{ data(dna.dat) plotshapestime3d(dna.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/estcov.Rd000077500000000000000000000040441412660331700165400ustar00rootroot00000000000000\name{estcov} \alias{estcov} %- Also NEED an `\alias' for EACH other topic documented here. \title{Weighted Frechet mean of covariance matrices} \description{Computes the weighted Frechet means of an array of covariance matrices, with different options for the covariance metric. Also carries out principal co-ordinate analysis of the covariance matrices} \usage{ estcov(S , method="Riemannian",weights=1,alpha=1/2,MDSk=2) } %- maybe also `usage' for other objects documented here. \arguments{ \item{S}{Input an array of covariance matrices of size k x k x n where each matrix is square, symmetric and positive definite} \item{method}{The type of distance to be used: "Procrustes": Procrustes size-and-shape metric, "ProcrustesShape": Procrustes metric with scaling, "Riemannian": Riemannian metric, "Cholesky": Cholesky based distance, "Power: Power Euclidean, with power alpha, "Euclidean": Euclidean metric, "LogEuclidean": Log-Euclidean metric, "RiemannianLe": Another Riemannian metric. } \item{weights}{The weights to be used for calculating the mean. If weights=1 then equal weights are used, otherwise the vector must be of length n.} \item{alpha}{The power to be used in the power Euclidean metric} \item{MDSk}{The number of MDS components in the principal co-ordinate analysis} } \value{A list with values \item{mean}{The weighted mean covariance matrix} \item{sd}{The weighted standard deviation} \item{pco}{Principal co-ordinates (from multidimensional scaling with the metric)} \item{eig}{The eigenvalues from the principal co-ordinate analysis} } \references{Dryden, I.L., Koloydenko, A. and Zhou, D. (2009). Non-Euclidean statistics for covariance matrices, with applications to diffusion tensor imaging. Annals of Applied Statistics, 3, 1102-1123.} \author{Ian Dryden} \seealso{distcov} \examples{ S <- array(0,c(5,5,10) ) for (i in 1:10){ tem <- diag(5)+.1*matrix(rnorm(25),5,5) S[,,i]<- tem%*%t(tem) } estcov( S , method="Procrustes") } \keyword{multivariate} r-cran-shapes-1.2.6/man/frechet.Rd000077500000000000000000000040661412660331700166610ustar00rootroot00000000000000\name{frechet} \alias{frechet} \title{Mean shape estimators} \description{Calculation of different types of Frechet mean shapes, or the isotropic offset Gaussian MLE mean shape } \usage{ frechet(x, mean="intrinsic") } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{Input k x m x n real array, where k is the number of points, m is the number of dimensions, and n is the sample size. } \item{mean}{Type of mean shape. The Frechet mean shape is obtained by minimizing sum d(x_i,mu)^2 with respect to mu. Different estimators are obtained with different choices of distance d. "intrinsic" intrinsic mean shape (d = rho = Riemannian distance); "partial.procrustes" partial Procrustes (d = 2*sin(rho/2)); "full.procrustes" full Procrustes (d = sin(rho)); h (positive real number) M-estimator (d^2 = (1 - cos^(2h)(rho))/h) Kent (1992); "mle" - isotropic offset Gaussian MLE of Mardia and Dryden (1989) } } \value{A list with components \item{mshape}{Mean shape estimate} \item{var}{Minimized Frechet variance (not available for MLE)} \item{kappa}{(if available) The estimated kappa for the MLE} \item{code}{Code from optimization, as given by function nlm - should be 1 or 2} \item{gradient}{Gradient from the optimization, as given by function nlm - should be close to zero} } \references{ Dryden, I. L. (1991). Discussion to `Procrustes methods in the statistical analysis of shape' by C.R. Goodall. Journal of the Royal Statistical Society, Series B, 53:327-328. Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. Kent, J. T. (1992). New directions in shape analysis. In Mardia, K. V., editor, The Art of Statistical Science, pages 115-127. Wiley, Chichester. Mardia, K. V. and Dryden, I. L. (1989b). The statistical analysis of shape data. Biometrika, 76:271-282. } \author{Ian Dryden} \seealso{procGPA} \examples{ #2D example : female and male Gorillas (cf. Dryden and Mardia, 2016) data(gorf.dat) frechet(gorf.dat[,,1:4],mean="intrinsic") } \keyword{multivariate} r-cran-shapes-1.2.6/man/gels.Rd000077500000000000000000000007331412660331700161700ustar00rootroot00000000000000\name{gels} \alias{gels} \title{Electrophoresis gel data} \description{Electrophoresis gel data. 10 invariant spots have been picked out by an expert on two electrophoretic gels. } \usage{data(gels)} \format{ An array of dimension 10 x 2 x 2 } \source{ Dryden, I. L. and Walker, G. (1999). Highly resistant regression and object matching. Biometrics, 55, 820-825. } \references{ Data from Chris Glasbey (BioSS) } \examples{ data(gels) plotshapes(gels) } \keyword{datasets} r-cran-shapes-1.2.6/man/gorf.dat.Rd000077500000000000000000000013541412660331700167420ustar00rootroot00000000000000\name{gorf.dat} \alias{gorf.dat} \title{Female gorilla data} \description{Female gorilla skull data. 8 landmarks in 2 dimensions, 30 individuals } \usage{data(gorf.dat)} \format{ An array of dimension 8 x 2 x 30 } \source{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 1. O'Higgins, P. and Dryden, I. L. (1993). Sexual dimorphism in hominoids: further studies of craniofacial shape differences in Pan, Gorilla, Pongo, Journal of Human Evolution, 24, 183-205. } \references{ http://www.maths.nott.ac.uk/personal/ild/bookdata/gorf.dat Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(gorf.dat) plotshapes(gorf.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/gorm.dat.Rd000077500000000000000000000013471412660331700167530ustar00rootroot00000000000000\name{gorm.dat} \alias{gorm.dat} \title{Male gorilla data} \description{Male gorilla skull data. 8 landmarks in 2 dimensions, 29 individuals } \usage{data(gorm.dat)} \format{ An array of dimension 8 x 2 x 29 } \source{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 1. O'Higgins, P. and Dryden, I. L. (1993). Sexual dimorphism in hominoids: further studies of craniofacial shape differences in Pan, Gorilla, Pongo, Journal of Human Evolution, 24, 183-205. } \references{ http://www.maths.nott.ac.uk/personal/ild/bookdata/gorm.dat Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(gorm.dat) plotshapes(gorm.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/groupstack.Rd000077500000000000000000000027051412660331700174210ustar00rootroot00000000000000\name{groupstack} \alias{groupstack} %- Also NEED an `\alias' for EACH other topic documented here. \title{Combine two or more groups of configurations} \description{Combine two or more groups of configurations and create a group label vector. (Maximum 8 groups). } \usage{ groupstack(A1, A2, A3=0, A4=0, A5=0, A6=0, A7=0, A8=0) } %- maybe also `usage' for other objects documented here. \arguments{ \item{A1}{Input k x m x n real array of the Procrustes transformed configurations, where k is the number of points, m is the number of dimensions, and n is the sample size. } \item{A2}{Input k x m x n real array of the Procrustes original configurations, where k is the number of points, m is the number of dimensions, and n is the sample size. } \item{A3}{ Optional array} \item{A4}{ Optional array} \item{A5}{ Optional array} \item{A6}{ Optional array} \item{A7}{ Optional array} \item{A8}{ Optional array} } \value{A list with components \item{x}{The combined array of all configurations} \item{groups}{The group labels (integers)} } \references{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester.} \author{Ian Dryden} \seealso{procGPA} \examples{ #2D example : female and male Gorillas (cf. Dryden and Mardia, 2016) data(gorf.dat) data(gorm.dat) groupstack(gorf.dat,gorm.dat) } \keyword{multivariate} r-cran-shapes-1.2.6/man/humanmove.Rd000077500000000000000000000012501412660331700172300ustar00rootroot00000000000000\name{humanmove} \alias{humanmove} \title{Human movement data} \description{Human movement data. 4 landmarks in 2 dimensions, 5 individuals observed at 10 times. } \usage{data(humanmove)} \format{ humanmove: An array of landmark configurations 4 x 2 x 10 x 5 } \source{ Alshabani, A. K. S. and Dryden, I. L. and Litton, C. D. and Richardson, J. (2007). Bayesian analysis of human movement curves, J. Roy. Statist. Soc. Ser. C, 56, 415--428. } \references{ Data from James Richardson. } \examples{ data(humanmove) #plotshapes(humanmove[,,,1]) #for (i in 2:5){ #for (j in 1:4){ #for (k in 1:10){ #points(humanmove[j,,k,i],col=i) #} #} #} } \keyword{datasets} r-cran-shapes-1.2.6/man/macaques.Rd000077500000000000000000000013421412660331700170320ustar00rootroot00000000000000\name{macaques} \alias{macaques} \title{Male and Female macaque data} \description{Male and female macaque skull data. 7 landmarks in 3 dimensions, 18 individuals (9 males, 9 females) } \usage{data(macaques)} \format{ macaques$x : An array of dimension 7 x 3 x 18 macaques$group : A factor indicating the sex (`m' for male and `f' for female) } \source{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 1. } \references{ Dryden, I. L. and Mardia, K. V. (1993). Multivariate shape analysis. Sankhya Series A, 55, 460-480. Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(macaques) shapes3d(macaques$x[,,1]) } \keyword{datasets} r-cran-shapes-1.2.6/man/macf.dat.Rd000077500000000000000000000007621412660331700167150ustar00rootroot00000000000000\name{macf.dat} \alias{macf.dat} \title{Female macaque data} \description{Female macaque skull data. 7 landmarks in 3 dimensions, 9 individuals } \usage{data(macf.dat)} \format{ An array of dimension 7 x 3 x 9 } \source{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 1. } \references{ Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(macf.dat) plotshapes(macf.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/macm.dat.Rd000077500000000000000000000007561412660331700167270ustar00rootroot00000000000000\name{macm.dat} \alias{macm.dat} \title{Male macaque data} \description{Male macaque skull data. 7 landmarks in 3 dimensions, 9 individuals } \usage{data(macm.dat)} \format{ An array of dimension 7 x 3 x 9 } \source{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 1. } \references{ Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(macm.dat) plotshapes(macm.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/mice.Rd000077500000000000000000000023041412660331700161470ustar00rootroot00000000000000\name{mice} \alias{mice} \title{T2 mouse vertabrae data} \description{T2 mouse vertebrae data - 6 landmarks in 2 dimensions, in 3 groups (30 Control, 23 Large, 23 Small mice). The 6 landmarks are obtained using a semi-automatic method at points of high curvature. This particular strain of mice is the `QE' strain. In addition pseudo-landmarks are given around each outlines. } \usage{data(mice)} \format{ mice$x : An array of dimension 6 x 2 x 76 of the two dimensional co-ordinates of 6 landmarks for each of the 76 mice. mice$group : Group labels. "c" Control, "l" Large, "s" Small mice mice$outlines : An array of dimension 60 x 2 x 76 containing the 6 landmarks and 54 pseudo-landmarks, with 9 pseudo-landmarks approximately equally spaced between each pair of landmarks. } \source{ Dryden, I.L. and Mardia, K.V. (1998). Statistical Shape Analysis, Wiley, Chichester. p313 } \references{ Mardia, K. V. and Dryden, I. L. (1989). The statistical analysis of shape data. Biometrika, 76, 271-281. Data from Paul O'Higgins (Hull-York Medical School) and David Johnson (Leeds) } \examples{ data(mice) plotshapes(mice$x,symbol=as.character(mice$group),joinline=c(1,6,2:5,1)) } \keyword{datasets} r-cran-shapes-1.2.6/man/panf.dat.Rd000077500000000000000000000010521412660331700167240ustar00rootroot00000000000000\name{panf.dat} \alias{panf.dat} \title{Female chimpanzee data} \description{Female chimpanzee skull data. 8 landmarks in 2 dimensions, 26 individuals } \usage{data(panf.dat)} \format{ An array of dimension 8 x 2 x 26 } \source{ O'Higgins, P. and Dryden, I. L. (1993). Sexual dimorphism in hominoids: further studies of craniofacial shape differences in Pan, Gorilla, Pongo, Journal of Human Evolution, 24, 183-205. } \references{ Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(panf.dat) plotshapes(panf.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/panm.dat.Rd000077500000000000000000000010461412660331700167360ustar00rootroot00000000000000\name{panm.dat} \alias{panm.dat} \title{Male chimpanzee data} \description{Male chimpanzee skull data. 8 landmarks in 2 dimensions, 28 individuals } \usage{data(panm.dat)} \format{ An array of dimension 8 x 2 x 28 } \source{ O'Higgins, P. and Dryden, I. L. (1993). Sexual dimorphism in hominoids: further studies of craniofacial shape differences in Pan, Gorilla, Pongo, Journal of Human Evolution, 24, 183-205. } \references{ Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(panm.dat) plotshapes(panm.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/plot3darcs.Rd000077500000000000000000000035451412660331700173200ustar00rootroot00000000000000\name{plot3darcs} \alias{plot3darcs} \title{Modes of variation plots for PCA and PNSS} \description{Modes of variation plots for PCA and PNSS based on 3D views and arcs along a mode. c * sd : the extent along lower and upper principal arcs. The lower principal arc -> 0 -> upper principal arc has a total of 2*nn+1 configurations with: nn configurations along the negative principal arc to 0; one configuration at the PNS mean; nn configurations along the positive principal arc. } \usage{ plot3darcs(x,pcno=1,c=1,nn=100,boundary.data=TRUE,view.theta=0,view.phi=0,type="pnss") } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{Output from pnss3d} \item{pcno}{The number of the PC/PNSS component. The default is 1, the first PC/PNSS} \item{c}{Number of standard deviations along each arc} \item{nn}{In total 2 * nn + 1 configurations: n configurations on arc from negative to 0; 1 configuration at 0; nn configurations from 0 to positive} \item{boundary.data}{Logical for whether to use boundary data or not. } \item{view.theta}{Viewing angle theta} \item{view.phi}{Viewing angle phi} \item{type}{"pnss" principal nested sphere mean and arc, or "pca" Procrustes mean and linear PC.} } \value{A list with components \item{PNSmean}{the PNSS mean} \item{lu.arc}{the configurations along the arc} } \references{ Dryden, I.L., Kim, K., Laughton, C.A. and Le, H. (2019). Principal nested shape space analysis of molecular dynamics data. Annals of Applied Statistics, 13, 2213-2234. Jung, S., Dryden, I.L. and Marron, J.S. (2012). Analysis of principal nested spheres. Biometrika, 99, 551-568. } \author{Kwang-Rae Kim, Ian Dryden} \seealso{pns, pns4pc, pnss3d} \examples{ ans <- pnss3d(digit3.dat, sphere.type="BIC", n.pc=5) #aa <- plot3darcs(ans,c=2,pcno=1) #bb <- plot3darcs(ans,c=2,pcno=1,type="pca") } \keyword{multivariate} r-cran-shapes-1.2.6/man/plotshapes.Rd000077500000000000000000000027351412660331700174240ustar00rootroot00000000000000\name{plotshapes} \alias{plotshapes} %- Also NEED an `\alias' for EACH other topic documented here. \title{Plot configurations} \description{ Plots configurations. Either one or two groups of observations can be plotted on the same scale. } \usage{ plotshapes(A, B = 0, joinline = c(1, 1),orthproj=c(1,2),color=1,symbol=1) } %- maybe also `usage' for other objects documented here. \arguments{ \item{A}{k x m x n array, or k x m matrix for first group} \item{B}{k x m x n array, or k x m matrix for 2nd group (can be missing)} \item{joinline}{A vector stating which landmarks are joined up by lines, e.g. joinline=c(1:n,1) will start at landmark 1, join to 2, ..., join to n, then re-join to landmark 1.} \item{orthproj}{A vector stating which two orthogonal projections will be used. For example, for m=3 dimensional data: X-Y projection given by c(1,2) (default), X-Z projection given by c(1,3), Y-Z projection given by c(2,3).} \item{color}{Colours for points. Can be a vector, e.g. 1:k gives each landmark a different colour for the specimens} \item{symbol}{Plotting symbols. Can be a vector, e.g. 1:k gives each landmark a different symbol for the specimens} } \value{ Just graphical output } \author{Ian Dryden} \seealso{shapepca,tpsgrid} \examples{ data(gorf.dat) data(gorm.dat) plotshapes(gorf.dat,gorm.dat,joinline=c(1,6,7,8,2,3,4,5,1)) data(macm.dat) data(macf.dat) plotshapes(macm.dat,macf.dat) } \keyword{hplot} \keyword{multivariate} r-cran-shapes-1.2.6/man/pns.Rd000077500000000000000000000044471412660331700160440ustar00rootroot00000000000000\name{pns} \alias{pns} \title{Principal Nested Spheres} \description{Calculation of Principal Nested Spheres } \usage{ pns(x, sphere.type = "seq.test", alpha = 0.1, R = 100, nlast.small.sphere = 0) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{a (d + 1) x n data matrix where each column is a unit vector in S^d and n is the sample size. } \item{sphere.type}{ a character string specifying the type of sphere fitting method. "seq.test" specifies sequential tests to decide either "small" or "great"; "small" specifies Principal Nested SMALL Sphere; "great" specifies Principal Nested GREAT Sphere (radius pi/2); "BIC" specifies BIC statistic to decide either "small" or "great"; and "bi.sphere" specifies Principal Nested GREAT Sphere for the first part and Principal Nested SMALL Sphere for The default is "seq.test". } \item{alpha}{significance level (0 < alpha < 1) used when sphere.type = "seq.test". The default is 0.1. } \item{R}{the number of bootstrap samples to be evaluated for the sequential test. The default is 100.} \item{nlast.small.sphere}{the number of small spheres in the finishing part used when sphere.type = "bi.sphere".} } \value{A list with components \item{resmat}{the residual matrix (X_PNS). Each entry in row k works like the kth principal component $PNS = the list with the following components.} \item{radii}{the size (radius) of PNS.} \item{orthaxis}{the orthogonal axis v_i of subspheres.} \item{dist}{the distance r_i of subspheres} \item{pvalues}{the p-values of LRT and parametric boostrap tests (if any).} \item{ratio}{the estimated ratios. Now unavailable.} \item{mean}{the location of the PNS mean.} \item{sphere.type}{the type of method for fitting subspheres.} \item{percent}{proportion of variances explained.} } \references{ Dryden, I.L., Kim, K., Laughton, C.A. and Le, H. (2019). Principal nested shape space analysis of molecular dynamics data. Annals of Applied Statistics, 13, 2213-2234. Jung, S., Dryden, I.L. and Marron, J.S. (2012). Analysis of principal nested spheres. Biometrika, 99, 551-568. } \author{Kwang-Rae Kim: R translation of Sungkyu Jung's matlab code} \seealso{pns4pc, pnss3d} \examples{ # out <- pc2sphere(x = gorf.dat, n.pc = 2) # spheredata <- t(out$spheredata) # pns.out <- pns(x = spheredata) } \keyword{multivariate} r-cran-shapes-1.2.6/man/pns4pc.Rd000077500000000000000000000035431412660331700164470ustar00rootroot00000000000000\name{pns4pc} \alias{pns4pc} \title{Principal Nested Shape Spaces from PCA} \description{Approximation of Principal Nested Shapes Spaces using PCA } \usage{ pns4pc(x, sphere.type = "seq.test", alpha = 0.1, R = 100, nlast.small.sphere = 0,n.pc=2) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{k x m x n array of landmark data.} \item{sphere.type}{ a character string specifying the type of sphere fitting method. "seq.test" specifies sequential tests to decide either "small" or "great"; "small" specifies Principal Nested SMALL Sphere; "great" specifies Principal Nested GREAT Sphere (radius pi/2); "BIC" specifies BIC statistic to decide either "small" or "great"; and "bi.sphere" specifies Principal Nested GREAT Sphere for the first part and Principal Nested SMALL Sphere for The default is "seq.test". } \item{alpha}{significance level (0 < alpha < 1) used when sphere.type = "seq.test". The default is 0.1. } \item{R}{the number of bootstrap samples to be evaluated for the sequential test. The default is 100.} \item{nlast.small.sphere}{the number of small spheres in the finishing part used when sphere.type = "bi.sphere".} \item{n.pc}{the number of PC scores to be used (n.pc >= 2)} } \value{A list with components \item{PNS}{the output of the function pns} \item{GPAout}{the result of GPA} \item{spheredata}{transformed spherical data from the PC scores} \item{percent}{proportion of variances explained.} } \references{ Dryden, I.L., Kim, K., Laughton, C.A. and Le, H. (2019). Principal nested shape space analysis of molecular dynamics data. Annals of Applied Statistics, 13, 2213-2234. Jung, S., Dryden, I.L. and Marron, J.S. (2012). Analysis of principal nested spheres. Biometrika, 99, 551-568. } \author{Kwang-Rae Kim} \seealso{pns, pns4pc, pnss3d, plot3darcs} \examples{ pns4pc(digit3.dat,n.pc=2) } \keyword{multivariate} r-cran-shapes-1.2.6/man/pnss3d.Rd000077500000000000000000000037651412660331700164600ustar00rootroot00000000000000\name{pnss3d} \alias{pnss3d} \title{Principal Nested Shape Space Analysis} \description{Approximation of Principal Nested Shapes Spaces using PCA: 2D or 3D data, small or large samples } \usage{ pnss3d(x, sphere.type = "seq.test", alpha = 0.1, R = 100, nlast.small.sphere = 0,n.pc=3) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{k x m x n array of landmark data.} \item{sphere.type}{ a character string specifying the type of sphere fitting method. "seq.test" specifies sequential tests to decide either "small" or "great"; "small" specifies Principal Nested SMALL Sphere; "great" specifies Principal Nested GREAT Sphere (radius pi/2); "BIC" specifies BIC statistic to decide either "small" or "great"; and "bi.sphere" specifies Principal Nested GREAT Sphere for the first part and Principal Nested SMALL Sphere for The default is "seq.test". } \item{alpha}{significance level (0 < alpha < 1) used when sphere.type = "seq.test". The default is 0.1. } \item{R}{the number of bootstrap samples to be evaluated for the sequential test. The default is 100.} \item{nlast.small.sphere}{the number of small spheres in the finishing part used when sphere.type = "bi.sphere".} \item{n.pc}{the number of PC scores to be used (n.pc >= 2)} } \value{A list with components \item{PNS}{the output of the function pns} \item{GPAout}{the result of GPA} \item{spheredata}{transformed spherical data from the PC scores} \item{percent}{proportion of variances explained.} } \references{ Dryden, I.L., Kim, K., Laughton, C.A. and Le, H. (2019). Principal nested shape space analysis of molecular dynamics data. Annals of Applied Statistics, 13, 2213-2234. Jung, S., Dryden, I.L. and Marron, J.S. (2012). Analysis of principal nested spheres. Biometrika, 99, 551-568. } \author{Kwang-Rae Kim, Ian Dryden} \seealso{pns, pns4pc, plot3darcs} \examples{ ans <- pnss3d(digit3.dat, sphere.type="BIC", n.pc=5) #aa <- plot3darcs(ans,c=2,pcno=1) #bb <- plot3darcs(ans,c=2,pcno=1,type="pca") } \keyword{multivariate} r-cran-shapes-1.2.6/man/pongof.dat.Rd000077500000000000000000000010641412660331700172730ustar00rootroot00000000000000\name{pongof.dat} \alias{pongof.dat} \title{Female orang utan data} \description{Female orang utan skull data. 8 landmarks in 2 dimensions, 30 individuals } \usage{data(pongof.dat)} \format{ An array of dimension 8 x 2 x 30 } \source{ O'Higgins, P. and Dryden, I. L. (1993). Sexual dimorphism in hominoids: further studies of craniofacial shape differences in Pan, Gorilla, Pongo, Journal of Human Evolution, 24, 183-205. } \references{ Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(pongof.dat) plotshapes(pongof.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/pongom.dat.Rd000077500000000000000000000010601412660331700172760ustar00rootroot00000000000000\name{pongom.dat} \alias{pongom.dat} \title{Male orang utan data} \description{Male orang utan skull data. 8 landmarks in 2 dimensions, 30 individuals } \usage{data(pongom.dat)} \format{ An array of dimension 8 x 2 x 30 } \source{ O'Higgins, P. and Dryden, I. L. (1993). Sexual dimorphism in hominoids: further studies of craniofacial shape differences in Pan, Gorilla, Pongo, Journal of Human Evolution, 24, 183-205. } \references{ Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(pongom.dat) plotshapes(pongom.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/procGPA.Rd000077500000000000000000000136031412660331700165310ustar00rootroot00000000000000\name{procGPA} \alias{procGPA} %- Also NEED an `\alias' for EACH other topic documented here. \title{Generalised Procrustes analysis} \description{Generalised Procrustes analysis to register landmark configurations into optimal registration using translation, rotation and scaling. Reflection invariance can also be chosen, and registration without scaling is also an option. Also, obtains principal components, and some summary statistics. } \usage{ procGPA(x, scale = TRUE, reflect = FALSE, eigen2d = FALSE, tol1 = 1e-05, tol2 = tol1, tangentcoords = "residual", proc.output=FALSE, distances=TRUE, pcaoutput=TRUE, alpha=0, affine=FALSE) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{Input k x m x n real array, (or k x n complex matrix for m=2 is OK), where k is the number of points, m is the number of dimensions, and n is the sample size. } \item{scale}{Logical quantity indicating if scaling is required} \item{reflect}{Logical quantity indicating if reflection is required} \item{eigen2d}{Logical quantity indicating if complex eigenanalysis should be used to calculate Procrustes mean for the particular 2D case when scale=TRUE, reflect=FALSE} \item{tol1}{Tolerance for optimal rotation for the iterative algorithm: tolerance on the mean sum of squares (divided by size of mean squared) between successive iterations} \item{tol2}{tolerance for rescale/rotation step for the iterative algorithm: tolerance on the mean sum of squares (divided by size of mean squared) between successive iterations} \item{tangentcoords}{Type of tangent coordinates. If (SCALE=TRUE) the options are "residual" (Procrustes residuals, which are approximate tangent coordinates to shape space), "partial" (Kent's partial tangent co-ordinates), "expomap" (tangent coordinates from the inverse of the exponential map, which are the similar to "partial" but scaled by (rho/sin(rho)) where rho is the Riemannian distance to the pole of the projection. If (SCALE=FALSE) then all three options give the same tangent co-ordinates to size-and-shape space, which is simply the Procrustes residual X^P - mu. } \item{proc.output}{Logical quantity indicating if printed output during the iterations of the Procrustes GPA algorithm should be given} \item{distances}{Logical quantity indicating if shape distances and sizes should be calculated} \item{pcaoutput}{Logical quantity indicating if PCA should be carried out} \item{alpha}{The parameter alpha used for relative warps analysis, where alpha is the power of the bending energy matrix. If alpha = 0 then standard Procrustes PCA is carried out. If alpha = 1 then large scale variations are emphasized, if alpha = -1 then small scale variations are emphasised. Requires m=2 and m=3 dimensional data if alpha $!=$ 0.} \item{affine}{Logical. If TRUE then only the affine subspace of shape variability is considered.} } \value{A list with components \item{k}{no of landmarks} \item{m}{no of dimensions (m-D dimension configurations)} \item{n}{sample size} \item{mshape}{Procrustes mean shape. Note this is unit size if complex eigenanalysis used, but on the scale of the data if iterative GPA is used.} \item{tan}{The tangent shape (or size-and-shape) coordinates} \item{rotated}{the k x m x n array of full Procrustes rotated data} \item{pcar}{the columns are eigenvectors (PCs) of the sample covariance Sv of tan} \item{pcasd}{the square roots of eigenvalues of Sv using tan (s.d.'s of PCs)} \item{percent}{the percentage of variability explained by the PCs using tan. If alpha $!=0$ then it is the percent of non-affine variation of the relative warp scores. If affine is TRUE it is the percentage of total shape variability of each affine component.} \item{size}{the centroid sizes of the configurations} \item{stdscores}{standardised PC scores (each with unit variance) using tan} \item{rawscores}{raw PC scores using tan} \item{rho}{Kendall's Riemannian shape distance rho to the mean shape} \item{rmsrho}{root mean square (r.m.s.) of rho} \item{rmsd1}{r.m.s. of full Procrustes distances to the mean shape $d_F$} \item{GSS}{Minimized Procrustes sum of squares} } \references{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. Chapter 7. Goodall, C.R. (1991). Procrustes methods in the statistical analysis of shape (with discussion). Journal of the Royal Statistical Society, Series B, 53: 285-339. Gower, J.C. (1975). Generalized Procrustes analysis, Psychometrika, 40, 33--50. Kent, J.T. (1994). The complex Bingham distribution and shape analysis, Journal of the Royal Statistical Society, Series B, 56, 285-299. Ten Berge, J.M.F. (1977). Orthogonal Procrustes rotation for two or more matrices. Psychometrika, 42, 267-276. } \author{Ian Dryden, with input from Mohammad Faghihi and Alfred Kume} \seealso{procOPA,riemdist,shapepca,testmeanshapes} \examples{ #2D example : female and male Gorillas (cf. Dryden and Mardia, 2016) data(gorf.dat) data(gorm.dat) plotshapes(gorf.dat,gorm.dat) n1<-dim(gorf.dat)[3] n2<-dim(gorm.dat)[3] k<-dim(gorf.dat)[1] m<-dim(gorf.dat)[2] gor.dat<-array(0,c(k,2,n1+n2)) gor.dat[,,1:n1]<-gorf.dat gor.dat[,,(n1+1):(n1+n2)]<-gorm.dat gor<-procGPA(gor.dat) shapepca(gor,type="r",mag=3) shapepca(gor,type="v",mag=3) gor.gp<-c(rep("f",times=30),rep("m",times=29)) x<-cbind(gor$size,gor$rho,gor$scores[,1:3]) pairs(x,panel=function(x,y) text(x,y,gor.gp), label=c("s","rho","score 1","score 2","score 3")) ########################################################## #3D example data(macm.dat) out<-procGPA(macm.dat,scale=FALSE) par(mfrow=c(2,2)) plot(out$rawscores[,1],out$rawscores[,2],xlab="PC1",ylab="PC2") title("PC scores") plot(out$rawscores[,2],out$rawscores[,3],xlab="PC2",ylab="PC3") plot(out$rawscores[,1],out$rawscores[,3],xlab="PC1",ylab="PC3") plot(out$size,out$rho,xlab="size",ylab="rho") title("Size versus shape distance") } \keyword{multivariate} r-cran-shapes-1.2.6/man/procOPA.Rd000077500000000000000000000047721412660331700165500ustar00rootroot00000000000000\name{procOPA} \alias{procOPA} %- Also NEED an `\alias' for EACH other topic documented here. \title{Ordinary Procrustes analysis} \description{ Ordinary Procustes analysis : the matching of one configuration to another using translation, rotation and (possibly) scale. Reflections can also be included if desired. The function matches configuration B onto A by least squares.} \usage{ procOPA(A, B, scale = TRUE, reflect = FALSE) } %- maybe also `usage' for other objects documented here. \arguments{ \item{A}{k x m matrix (or complex k-vector for 2D data), of k landmarks in m dimensions. This is the reference figure.} \item{B}{k x m matrix (or complex k-vector for 2D data). This is the figure which is to be transformed.} \item{scale}{logical indicating if scaling is required} \item{reflect}{logical indicating if reflection is allowed} } \value{ A list with components: \item{R}{The estimated rotation matrix (may be an orthogonal matrix if reflection is allowed)} \item{s}{The estimated scale matrix} \item{Ahat}{The centred configuration A} \item{Bhat}{The Procrustes registered configuration B} \item{OSS}{The ordinary Procrustes sum of squares, which is $\|Ahat-Bhat\|^2$} \item{rmsd}{rmsd = sqrt(OSS/(km))} } \references{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. Chapter 7.} \author{Ian Dryden} \seealso{procGPA,riemdist,tpsgrid} \examples{ data(digit3.dat) A<-digit3.dat[,,1] B<-digit3.dat[,,2] ans<-procOPA(A,B) plotshapes(A,B,joinline=1:13) plotshapes(ans$Ahat,ans$Bhat,joinline=1:13) #Sooty Mangabey data data(sooty.dat) A<-sooty.dat[,,1] #juvenile B<-sooty.dat[,,2] #adult par(mfrow=c(1,3)) par(pty="s") plot(A,xlim=c(-2000,3000),ylim=c(-2000,3000),xlab=" ",ylab=" ") lines(A[c(1:12,1),]) points(B) lines(B[c(1:12,1),],lty=2) title("Juvenile (-------) Adult (- - - -)") #match B onto A out<-procOPA(A,B) #rotation angle print(atan2(out$R[1,2],out$R[1,1])*180/pi) #scale print(out$s) plot(A,xlim=c(-2000,3000),ylim=c(-2000,3000),xlab=" ",ylab=" ") lines(A[c(1:12,1),]) points(out$Bhat) lines(out$Bhat[c(1:12,1),],lty=2) title("Match adult onto juvenile") #match A onto B out<-procOPA(B,A) #rotation angle print(atan2(out$R[1,2],out$R[1,1])*180/pi) #scale print(out$s) plot(B,xlim=c(-2000,3000),ylim=c(-2000,3000),xlab=" ",ylab=" ") lines(B[c(1:12,1),],lty=2) points(out$Bhat) lines(out$Bhat[c(1:12,1),]) title("Match juvenile onto adult") } \keyword{multivariate} r-cran-shapes-1.2.6/man/procWGPA.Rd000077500000000000000000000073231412660331700166620ustar00rootroot00000000000000\name{procWGPA} \alias{procWGPA} %- Also NEED an `\alias' for EACH other topic documented here. \title{Weighted Procrustes analysis} \description{Weighted Procrustes analysis to register landmark configurations into optimal registration using translation, rotation and scaling. Registration without scaling is also an option. Also, obtains principal components, and some summary statistics. } \usage{ procWGPA(x, fixcovmatrix=FALSE, initial="Identity", maxiterations=10, scale=TRUE, reflect=FALSE, prior="Exponential",diagonal=TRUE,sampleweights="Equal") } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{Input k x m x n real array, where k is the number of points, m is the number of dimensions, and n is the sample size. } \item{fixcovmatrix}{If FALSE then the landmark covariance matrix is estimated. If a fixed covariance matrix is desired then the value should be given here, e.g. fixcovmatrix=diag(8) for the identity matrix with 8 landmarks.} \item{initial}{The initial value of the estimated covariance matrix. "Identity" - identity matrix, "Rawdata" - based on sample variance of the raw landmarks. Also, could be a k x k symmetric positive definite matrix.} \item{maxiterations}{The maximum number of iterations for estimating the covariance matrix}, \item{scale}{Logical quantity indicating if scaling is required}, \item{reflect}{Logical quantity indicating if reflection invariance is required}, \item{prior}{Indicates the type of prior. "Exponential" is exponential for the inverse eigenvalues. "Identity" is an inverse Wishart with the identity matrix as parameters.} \item{diagonal}{Logical. Indicates if the diagonal of the landmark covariance matrix (only) should be used. Diagonal matrices can lead to some landmarks having very small variability, which may or may not be desirable.} \item{sampleweights}{Gives the weights of the observations in the sample, rather than the landmarks. This is a fixed quatity. "Equal" indicates that all observations in the sample have equal weight. The weights do not need to sum to 1. } } \value{A list with components \item{k}{no of landmarks} \item{m}{no of dimensions (m-D dimension configurations)} \item{n}{sample size} \item{mshape}{Weighted Procrustes mean shape.} \item{tan}{This is the mk x n matrix of Procrustes residuals $X_i^P$ - Xbar.} \item{rotated}{the k x m x n array of weighted Procrustes rotated data} \item{pcar}{the columns are eigenvectors (PCs) of the sample covariance Sv of tan} \item{pcasd}{the square roots of eigenvalues of Sv using tan (s.d.'s of PCs)} \item{percent}{the percentage of variability explained by the PCs using tan. } \item{size}{the centroid sizes of the configurations} \item{scores}{standardised PC scores (each with unit variance) using tan} \item{rawscores}{raw PC scores using tan} \item{rho}{Kendall's Riemannian distance rho to the mean shape} \item{rmsrho}{r.m.s. of rho} \item{rmsd1}{r.m.s. of full Procrustes distances to the mean shape $d_F$} \item{Sigmak}{Estimate of the sample covariance matrix of the landmarks} } \details{The factored covariance model is assumed: $Sigma_k x I_m$ with $Sigma_k$ being the covariance matrix of the landmarks, and the cov matrix at each landmark is the identity matrix.} \references{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. Goodall, C.R. (1991). Procrustes methods in the statistical analysis of shape (with discussion). Journal of the Royal Statistical Society, Series B, 53: 285-339. } \author{Ian Dryden} \seealso{procGPA} \examples{ #2D example : female Gorillas (cf. Dryden and Mardia, 2016) data(gorf.dat) gor<-procWGPA(gorf.dat,maxiterations=3) } \keyword{multivariate} r-cran-shapes-1.2.6/man/procdist.Rd000077500000000000000000000026051412660331700170650ustar00rootroot00000000000000\name{procdist} \alias{procdist} %- Also NEED an `\alias' for EACH other topic documented here. \title{Procrustes distance} \description{Calculates different types of Procrustes shape or size-and-shape distance between two configurations} \usage{ procdist(x, y,type="full",reflect=FALSE) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{k x m matrix (or complex k-vector for 2D data) where k = number of landmarks and m = no of dimensions} \item{y}{k x m matrix (or complex k-vector for 2D data)} \item{type}{string indicating the type of distance; "full" full Procrustes distance, "partial" partial Procrustes distance, "Riemannian" Riemannian shape distance, "sizeandshape" size-and-shape Riemannian/Procrustes distance} \item{reflect}{ Logical. If reflect = TRUE then reflection invariance is included.} } \value{ The distance between the two configurations.} \references{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. } \seealso{procOPA,procGPA} \examples{ data(gorf.dat) data(gorm.dat) gorf<-procGPA(gorf.dat) gorm<-procGPA(gorm.dat) distfull<-procdist(gorf$mshape,gorm$mshape) cat("Full Procustes distance between mean shapes is ",distfull," \n") } \author{Ian Dryden} \keyword{multivariate}% __ONLY ONE__ keyword per line r-cran-shapes-1.2.6/man/qcet2.dat.Rd000077500000000000000000000011521412660331700170170ustar00rootroot00000000000000\name{qcet2.dat} \alias{qcet2.dat} \title{Control T2 mouse vertabrae data} \description{T2 mouse vertebrae data - control group. 6 landmarks in 2 dimensions, 30 individuals } \usage{data(qcet2.dat)} \format{ An array of dimension 6 x 2 x 30 } \source{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 1. } \references{ http://www.maths.nott.ac.uk/personal/ild/bookdata/qcet2.dat Data from Paul O'Higgins (Hull-York Medical School) and David Johnson (Leeds) } \examples{ data(qcet2.dat) plotshapes(qcet2.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/qlet2.dat.Rd000077500000000000000000000011461412660331700170330ustar00rootroot00000000000000\name{qlet2.dat} \alias{qlet2.dat} \title{Large T2 mouse vertabrae data} \description{T2 mouse vertebrae data - large group. 6 landmarks in 2 dimensions, 23 individuals } \usage{data(qlet2.dat)} \format{ An array of dimension 6 x 2 x 23 } \source{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 1. } \references{ http://www.maths.nott.ac.uk/personal/ild/bookdata/qlet2.dat Data from Paul O'Higgins (Hull-York Medical School) and David Johnson (Leeds) } \examples{ data(qlet2.dat) plotshapes(qlet2.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/qset2.dat.Rd000077500000000000000000000011461412660331700170420ustar00rootroot00000000000000\name{qset2.dat} \alias{qset2.dat} \title{Small T2 mouse vertabrae data} \description{T2 mouse vertebrae data - small group. 6 landmarks in 2 dimensions, 23 individuals } \usage{data(qset2.dat)} \format{ An array of dimension 6 x 2 x 23 } \source{ Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 1. } \references{ http://www.maths.nott.ac.uk/personal/ild/bookdata/qset2.dat Data from Paul O'Higgins (Hull-York Medical School) and David Johnson (Leeds) } \examples{ data(qset2.dat) plotshapes(qset2.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/rats.Rd000077500000000000000000000013221412660331700162020ustar00rootroot00000000000000\name{rats} \alias{rats} \title{Rat skulls data} \description{Rat skulls data, from X rays. 8 landmarks in 2 dimensions, 18 individuals observed at 7, 14, 21, 30, 40, 60, 90, 150 days. } \usage{data(rats)} \format{ rats$x: An array of landmark configurations 144 x 2 x 2 rats$no: Individual rat number (note rats 3, 13, 20 missing due to incomplete data) rats$time observed time in days } \source{ Vilmann's rat data set (Bookstein, 1991, Morphometric Tools for Landmark Data: Geometry and Biology, pp. 408-414) } \references{ Bookstein, F.L. (1991). Morphometric tools for landmark data: geometry and biology, Cambridge University Press. } \examples{ data(rats) plotshapes(rats$x,col=1:8) } \keyword{datasets} r-cran-shapes-1.2.6/man/resampletest.Rd000077500000000000000000000104661412660331700177520ustar00rootroot00000000000000\name{resampletest} \alias{resampletest} %- Also NEED an `\alias' for EACH other topic documented here. \title{Tests for mean shape difference using complex arithmetic, including bootstrap and permutation tests. } \description{ Carries out tests to examine differences in mean shape between two independent populations. For 2D data the methods use complex arithmetic and exploit the geometry of the shape space (which is the main use of this function). An alternative faster, approximate procedure using Procrustes residuals is given by the function `testmeanshapes'. For 3D data tests are carried out on the Procrustes residuals, which is an approximation suitable for small variations in shape. Up to four test statistics are calculated: lambda : the asymptotically pivotal statistic $lambda_min$ from Amaral et al. (2007), equ.(14),(16) (m=2 only) H : Hotelling $T^2$ statistic (see Amaral et al., 2007, equ.(23), Dryden and Mardia, 2016, equ.(9.4)) J : James' statistic (see Amaral et al., 2007, equ.(24) ) (m=2 only) G : Goodall's F statistic (see Amaral et al., 2007, equ.(25), Dryden and Mardia, 2016, equ.(9.9)) p-values are given based on resampling as well as the usual table based p-values. Note when the sample sizes are low (compared to the number of landmarks) some regularization is carried out. In particular if Sw is a singular within group covariance matrix, it is replaced by Sw + 0.000001 (Identity matrix) and a `*' is printed in the output. } \usage{ resampletest(A, B, resamples = 200, replace = TRUE) } %- maybe also `usage' for other objects documented here. \arguments{ \item{A}{The random sample for group 1: k x m x n1 array of data, where k is the number of landmarks and n1 is the sample size. (Alternatively a k x n1 complex matrix for 2D)} \item{B}{The random sample for group 3: k x m x n2 array of data, where k is the number of landmarks and n2 is the sample size. (Alternatively a k x n2 complex matrix for 2D)} \item{resamples}{Integer. The number of resampling iterations. If resamples = 0 then no resampling procedures are carried out, and the tabular p-values are given only.} \item{replace}{Logical. If replace = TRUE then for 2D data bootstrap resampling is carried out with replacement *within* each group. If replace = FALSE then permutation resampling is carried out (sampling without replacement in *pooled* samples).} } \value{ A list with components (or a subset of these) \item{lambda}{$lambda_min$ statistic} \item{lambda.pvalue}{p-value for $lambda_min$ test based on resampling} \item{lambda.table.pvalue}{p-value for $lambda_min$ test based on the asymptotic chi-squared distribution (large n1,n2)} \item{H}{The Hotelling $T^2$ statistic} \item{H.pvalue}{p-value for the Hotelling $T^2$ test based on resampling} \item{H.table.pvalue}{p-value for the Hotelling $T^2$ test based on the null F distribution, assuming normality and equal covariance matrices} \item{J}{The Hotelling $T^2$ statistic} \item{J.pvalue}{p-value for the Hotelling $T^2$ test based on resampling} \item{J.table.pvalue}{p-value for the Hotelling $T^2$ test based on the null F distribution, assuming normality and unequal covariance matrices} \item{G}{The Goodall $F$ statistic} \item{G.pvalue}{p-value for the Goodall test based on resampling} \item{G.table.pvalue}{p-value for the Goodall test based on the null F distribution, assuming normality and equal isotropic covariance matrices)} } \references{Amaral, G.J.A., Dryden, I.L. and Wood, A.T.A. (2007) Pivotal bootstrap methods for $k$-sample problems in directional statistics and shape analysis. Journal of the American Statistical Association. 102, 695-707. Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 9. Goodall, C. R. (1991). Procrustes methods in the statistical analysis of shape (with discussion). Journal of the Royal Statistical Society, Series B, 53: 285-339. } \author{Ian Dryden} \seealso{testmeanshapes} \examples{ #2D example : female and male Gorillas data(gorf.dat) data(gorm.dat) #just select 3 landmarks and the first 10 observations in each group select<-c(1,2,3) A<-gorf.dat[select,,1:10] B<-gorm.dat[select,,1:10] resampletest(A,B,resamples=100) } \keyword{multivariate}% at least one, from doc/KEYWORDS r-cran-shapes-1.2.6/man/riemdist.Rd000077500000000000000000000023761412660331700170630ustar00rootroot00000000000000\name{riemdist} \alias{riemdist} %- Also NEED an `\alias' for EACH other topic documented here. \title{Riemannian shape distance} \description{Calculates the Riemannian shape distance rho between two configurations} \usage{ riemdist(x, y, reflect=FALSE) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{k x m matrix (or complex k-vector for 2D data) where k = number of landmarks and m = no of dimensions} \item{y}{k x m matrix (or complex k-vector for 2D data)} \item{reflect}{ Logical. If reflect = TRUE then reflection invariance is included.} } \value{ The Riemannian shape distance rho between the two configurations. Note 0 <= rho <= pi/2 if no reflection invariance. (for the Riemannian size-and-shape distance use ssriemdist)} \references{ Kendall, D. G. (1984). Shape manifolds, Procrustean metrics and complex projective spaces, Bulletin of the London Mathematical Society, 16, 81-121. } \seealso{procOPA,procGPA} \examples{ data(gorf.dat) data(gorm.dat) gorf<-procGPA(gorf.dat) gorm<-procGPA(gorm.dat) rho<-riemdist(gorf$mshape,gorm$mshape) cat("Riemannian distance between mean shapes is ",rho," \n") } \author{Ian Dryden} \keyword{multivariate}% __ONLY ONE__ keyword per line r-cran-shapes-1.2.6/man/rigidbody.Rd000077500000000000000000000020001412660331700171770ustar00rootroot00000000000000\name{rigidbody} \alias{rigidbody} %- Also NEED an `\alias' for EACH other topic documented here. \title{Rigid body transformations} \description{Applies a rigid body transformations to a landmark configuration or array} \usage{ rigidbody(X,transx=0,transy=0,transz=0,thetax=0,thetay=0,thetaz=0) } %- maybe also `usage' for other objects documented here. \arguments{ \item{X}{k x m matrix, or k x m x n array where k = number of landmarks and m = no of dimensions and n is no of specimens} \item{transx}{negative shift in x-coordinates} \item{transy}{negative shift in y-coordinates} \item{transz}{negative shift in z-coordinates} \item{thetax}{Rotation about x-axis in degrees} \item{thetay}{Rotation about y-axis in degrees} \item{thetaz}{Rotation about z-axis in degrees} } \value{ The transformed coordinates (X - trans) Rx Ry Rz } \examples{ data(gorf.dat) plotshapes ( rigidbody(gorf.dat , 0, 0, 0, 0, 0, -90 ) ) } \author{Ian Dryden} \keyword{multivariate}% __ONLY ONE__ keyword per line r-cran-shapes-1.2.6/man/sand.Rd000077500000000000000000000024041412660331700161600ustar00rootroot00000000000000\name{sand} \alias{sand} \title{Sand particle outline data} \description{50 points on 24 sea sand and 25 river sand grain profiles in 2D. The original data were kindly provided by Professor Dietrich Stoyan (Stoyan and Stoyan, 1994; Stoyan, 1997). The 50 points on each outline were extracted at approximately equal arc-lengths by the method described in Kent et al. (2000, section 8.1)} \usage{data(sand)} \format{A list with components: sea$x : An array of dimension 50 x 2 x 49 containing the 50 point co-ordinates in 2D for each grain sea$group : The types of the sand grains: "sea", 24 particles from the Baltic Sea "river", 25 particles from the Caucasian River Selenchuk } \references{ Kent, J. T., Dryden, I. L. and Anderson, C. R. (2000). Using circulant symmetry to model featureless objects. Biometrika, 87, 527--544. Stoyan, D. (1997). Geometrical means, medians and variances for samples of particles. Particle Particle Syst. Charact. 14, 30--34. Stoyan, D. and Stoyan, H. (1994). Fractals, Random Shapes and Point Fields: Methods of Geometric Statistics, John Wiley, Chichester. } \examples{ data(sand) plotshapes(sand$x[,,sand$group=="sea"],sand$x[,,sand$group=="river"],joinline=c(1:50)) } \keyword{datasets} r-cran-shapes-1.2.6/man/schizophrenia.Rd000077500000000000000000000031511412660331700201010ustar00rootroot00000000000000\name{schizophrenia} \alias{schizophrenia} \title{Bookstein's schizophrenia data} \description{Bookstein's schizophrenia data. 13 landmarks in 2 dimensions, 28 individuals. The first 14 individuals are controls. The last fourteen cases were diagnosed with schizophrenia. The landmarks were taken in the near midline from MR images of the brain: (1) splenium, posteriormost point on corpus callosum; (2) genu, anteriormost point on corpus callosum; (3) top of corpus callosum, uppermost point on arch of callosum (all three to an approximate registration on the diameter of the callosum); (4) top of head, a point relaxed from a standard landmark along the apparent margin of the dura; (5) tentorium of cerebellum at dura; (6) top of cerebellum; (7) tip of fourth ventricle; (8) bottom of cerebellum; (9) top of pons, anterior margin; (10) bottom of pons, anterior margin; (11) optic chiasm; (12) frontal pole, extension of a line from landmark 1 through landmark 2 until it intersects the dura; (13) superior colliculus. } \usage{data(schizophrenia.dat)} \format{ schizophrenia$x : An array of dimension 13 x 2 x 28 schizophrenia$group : A factor of group labels `con' for Controls and `scz' for the schizophrenia patients. } \source{ Bookstein, F. L. (1996). Biometrics, biomathematics and the morphometric synthesis, Bulletin of Mathematical Biology, 58, 313--365. } \references{ Data kindly provided by Fred Bookstein (University of Washington and University of Vienna) } \examples{ data(schizophrenia) plotshapes(schizophrenia$x,symbol=as.integer(schizophrenia$group)) } \keyword{datasets} r-cran-shapes-1.2.6/man/schizophrenia.dat.Rd000077500000000000000000000027631412660331700206600ustar00rootroot00000000000000\name{schizophrenia.dat} \alias{schizophrenia.dat} \title{Bookstein's schizophrenia data} \description{Bookstein's schizophrenia data. 13 landmarks in 2 dimensions, 28 individuals. The first 14 individuals are controls. The last fourteen cases were diagnosed with schizophrenia. The landmarks were taken in the near midline from MR images of the brain: (1) splenium, posteriormost point on corpus callosum; (2) genu, anteriormost point on corpus callosum; (3) top of corpus callosum, uppermost point on arch of callosum (all three to an approximate registration on the diameter of the callosum); (4) top of head, a point relaxed from a standard landmark along the apparent margin of the dura; (5) tentorium of cerebellum at dura; (6) top of cerebellum; (7) tip of fourth ventricle; (8) bottom of cerebellum; (9) top of pons, anterior margin; (10) bottom of pons, anterior margin; (11) optic chiasm; (12) frontal pole, extension of a line from landmark 1 through landmark 2 until it intersects the dura; (13) superior colliculus. } \usage{data(schizophrenia.dat)} \format{ An array of dimension 13 x 2 x 28 } \source{ Bookstein, F. L. (1996). Biometrics, biomathematics and the morphometric synthesis, Bulletin of Mathematical Biology, 58, 313--365. } \references{ Data kindly provided by Fred Bookstein (University of Washington and University of Vienna) } \examples{ data(schizophrenia.dat) k<-dim(schizophrenia.dat)[1] n<-dim(schizophrenia.dat)[3] plotshapes(schizophrenia.dat) } \keyword{datasets} r-cran-shapes-1.2.6/man/shapepca.Rd000077500000000000000000000046461412660331700170310ustar00rootroot00000000000000\name{shapepca} \alias{shapepca} %- Also NEED an `\alias' for EACH other topic documented here. \title{Principal components analysis for shape} \description{ Provides graphical summaries of principal components for shape. } \usage{ shapepca(proc, pcno = c(1, 2, 3), type = "r", mag = 1, joinline = c(1, 1), project=c(1,2),scores3d=FALSE,color=2,axes3=FALSE,rglopen=TRUE,zslice=0) } %- maybe also `usage' for other objects documented here. \arguments{ \item{proc}{List given by the output from \code{procGPA()} } \item{pcno}{A vector of the PCs to be plotted} \item{type}{Options for the types of plot for the $m=2$ planar case: "r" : rows along PCs evaluated at c = -3,0,3 sd's along PC, "v" : vectors drawn from mean to +3 sd's along PC, "s" : plots along c= -3, -2, -1, 0, 1, 2, 3 superimposed, "m" : movie backward and forwards from -3 to +3 sd's along PC, "g" : TPS grid from mean to +3 sd's along PC. } \item{mag}{Magnification of the effect of the PC (scalar multiple of sd's)} \item{joinline}{A vector stating which landmarks are joined up by lines, e.g. joinline=c(1:n,1) will start at landmark 1, join to 2, ..., join to n, then re-join to landmark 1.} \item{project}{The default orthogonal projections if in higher than 2 dimensions} \item{scores3d}{Logical. If TRUE then a 3D scatterplot of the first 3 raw PC scores with labels in `pcno' is given, instead of the default plot of the mean and PC vectors.} \item{color}{Color of the spheres used in plotting. Default color = 2 (red). If a vector is given then the points are colored in that order.} \item{axes3}{Logical. If TRUE then the axes are plotted in a 3D plot.} \item{rglopen}{Logical. If TRUE open a new RGL window, otherwise plot in current window.} \item{zslice}{For 3D case, type = "g": the z co-ordinate(s) for the grid slice(s)} } \details{The mean and PCs are plotted. } \value{ No value is returned } \references{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 7.} \author{Ian Dryden} \seealso{procGPA} \examples{ #2d example data(gorf.dat) data(gorm.dat) gorf<-procGPA(gorf.dat) gorm<-procGPA(gorm.dat) shapepca(gorf,type="r",mag=3) shapepca(gorf,type="v",mag=3) shapepca(gorm,type="r",mag=3) shapepca(gorm,type="v",mag=3) #3D example #data(macm.dat) #out<-procGPA(macm.dat) #movie #shapepca(out,pcno=1) } \keyword{hplot} \keyword{multivariate} r-cran-shapes-1.2.6/man/shapes-internal.Rd000077500000000000000000000124431412660331700203340ustar00rootroot00000000000000\name{shapes-internal} \alias{pc2sphere2} \alias{preshape2shape} \alias{tangentcoords.partial.inv} \alias{multiply_by_transpose_of_helmert_implicitly} \alias{multiply_by_helmert_implicitly_3d} \alias{uji3_centroid.size} \alias{uji2_centroid.size} \alias{multiply_by_transpose_of_helmert_explicitly} \alias{multiply_by_transpose_of_helmert} \alias{multiply_by_helmert_implicitly} \alias{multiply_by_helmert_explicitly} \alias{multiply_by_helmert} \alias{uji_preshape} \alias{uji_centroid.size} \alias{uji_defh} \alias{uji_Enorm} \alias{uji_distProcrustesFull} \alias{uji_distProcrustesSizeShape} \alias{uji_distCholesky} \alias{uji_estSS} \alias{uji_estShape} \alias{uji_centroid.size.complex} \alias{uji_centroid.size.mD} \alias{uji_preshape.mD} \alias{uji_preshape.mat} \alias{uji_tanfigure} \alias{uji_tanfigurefull} \alias{uji_kendall.shpv} \alias{ild_preshape} \alias{ild_centroid.size} \alias{ild_defh} \alias{ild_Enorm} \alias{ild_distProcrustesFull} \alias{ild_distProcrustesSizeShape} \alias{ild_distCholesky} \alias{ild_estSS} \alias{ild_estShape} \alias{ild_centroid.size.complex} \alias{ild_centroid.size.mD} \alias{ild_preshape.mD} \alias{ild_preshape.mat} \alias{ild_tanfigure} \alias{ild_tanfigurefull} \alias{ild_kendall.shpv} \alias{ild_preshapetoicon} \alias{Enormalize} \alias{ExpNPd} \alias{LRTpval} \alias{LogNPd} \alias{PNSe2s} \alias{PNSs2e} \alias{Plot3D} \alias{Procrustes.dist.full} \alias{UNIFORMdirections} \alias{col2RGB} \alias{flipud0} \alias{geodmeanS1} \alias{get.data.subsphere} \alias{get.prinarc} \alias{get.prinarc.subsphere} \alias{get.prinarc.value} \alias{getSubSphere} \alias{mod} \alias{objfn} \alias{pc2sphere} \alias{pcscore2sphere} \alias{plotshapes3d.pns} \alias{pns.pc} \alias{project.subsphere} \alias{randvonMisesFisherm} \alias{repmat} \alias{rot.mat} \alias{rotMat} \alias{shape.pcscores} \alias{shape.pcscores.partial} \alias{sphere.jac} \alias{sphere.obj} \alias{sphere.res} \alias{sphere2pcscore} \alias{sphereFit} \alias{tangent.coords.partial} \alias{tr} \alias{trans.subsphere} \alias{vMFtest} \alias{ped} \alias{pedreg} \alias{sooty.dat} \alias{MDSshape} \alias{distCholesky} \alias{distEuclidean} \alias{distLogEuclidean} \alias{distPowerEuclidean} \alias{distProcrustesFull} \alias{distProcrustesSizeShape} \alias{rootmat} \alias{distRiemPennec} \alias{Enorm} \alias{estChol} \alias{estShapes} \alias{estEuclid} \alias{estLogEuclid} \alias{estPowerEuclid} \alias{estLogRiem2} \alias{distRiemannianLe} \alias{estCholesky} \alias{estRiemLe} \alias{estShape} \alias{estSS} \alias{Hessian2} \alias{iglogl} \alias{Lambdamin} \alias{nsa} \alias{protein} \alias{James} \alias{select} \alias{procWGPA1} \alias{rotatexyz} \alias{objfun} \alias{objfun4} \alias{bootstraptest} \alias{testmeanshapes.old} \alias{permutationtest2} \alias{Goodall} \alias{Hotelling} \alias{abind} \alias{tpsgrid.old} \alias{shaperw} \alias{BoxM} \alias{Goodall2D} \alias{Goodalltest} \alias{Hotelling2D} \alias{Hotelling2Djames} \alias{Hotellingtest} \alias{MGM} \alias{I2mat} \alias{TPSgrid} \alias{V} \alias{Vinv} \alias{Vmat} \alias{add} \alias{as.3d} \alias{banner1} \alias{banner4} \alias{bendingenergy} \alias{bgpa} \alias{bookstein.shpv} \alias{bookstein.shpv.complex} \alias{braincon.dat} \alias{brainscz.dat} \alias{cbevec} \alias{cbevectors} \alias{centroid.size.complex} \alias{centroid.size.mD} \alias{close1} \alias{cnt3} \alias{complextoreal} \alias{defh} \alias{defplotsize2} \alias{defplotsize3} \alias{del} \alias{dif} \alias{dif.old} \alias{dis} \alias{fJ} \alias{fcel} \alias{fcnt} \alias{fgpa} \alias{fgpa.rot} \alias{fgpa.singleiteration} \alias{fopa} \alias{fort.ROTATEANDREFLECT} \alias{fort.ROTATION} \alias{fort} \alias{fos} \alias{fos.REFLECT} \alias{ftrsq} \alias{full.procdist} \alias{genpower} \alias{goodall2d} \alias{goodalltest} \alias{graf} \alias{hotelling2d} \alias{hotellingtest} \alias{isodens} \alias{isologdens} \alias{isomle} \alias{isotropy.test} \alias{kendall.shpv} \alias{linegrid} \alias{loglikeiso} \alias{loglikeiso2} \alias{loneFone} \alias{mahpreshapedist} \alias{makearray} \alias{movie} \alias{msh} \alias{norm} \alias{objfuniso} \alias{oneFone} \alias{partial.procdist} \alias{partialwarpgrids} \alias{partialwarps} \alias{permutationtest} \alias{plot2rwscores} \alias{plot3Ddata} \alias{plot3Ddata.static} \alias{plot3Dmean} \alias{plot3Dpca} \alias{plotPDM} \alias{plotPDM2} \alias{plotPDM3} \alias{plotPDMbook} \alias{plotPDMnoaxis} \alias{plotPDMnoaxis3} \alias{plotpairscores} \alias{plotpca} \alias{plotpca3d} \alias{plotprinwarp} \alias{plotproc} \alias{plotrelwarp} \alias{plotshapes3d} \alias{plotshapestime3d} \alias{pointsPDMnoaxis3} \alias{prcomp1} \alias{preshape} \alias{preshape.mD} \alias{preshape.mat} \alias{preshapetoicon} \alias{prinwscoregrids} \alias{procdistreflect} \alias{procrustes2d} \alias{procrustesGPA} \alias{procrustesGPA.rot} \alias{procrustesgpa} \alias{project} \alias{read.array} \alias{read.in} \alias{realtocomplex} \alias{reassqpr} \alias{relwarps} \alias{rgpa} \alias{riemdist.complex} \alias{riemdist.mD} \alias{rotateaxes} \alias{schizo.dat} \alias{sgpa} \alias{sh} \alias{sigmacov} \alias{sim1} \alias{st} \alias{tanfigure} \alias{tanfigurefull} \alias{tanpreshape} \alias{testshapes} \alias{vec1} \title{Internal function(s)} \description{Internal function(s)} \keyword{internal} r-cran-shapes-1.2.6/man/shapes.cva.Rd000077500000000000000000000023611412660331700172700ustar00rootroot00000000000000\name{shapes.cva} \alias{shapes.cva} %- Also NEED an `\alias' for EACH other topic documented here. \title{Canonical variate analysis for shapes} \description{Carry out canonical variate analysis for shapes (in two or more groups) } \usage{ shapes.cva(X,groups,scale=TRUE,ncv=2) } %- maybe also `usage' for other objects documented here. \arguments{ \item{X}{Input k x m x n real array of the configurations, where k is the number of points, m is the number of dimensions, and n is the sample size. } \item{groups}{The group labels} \item{scale}{Logical, indicating if Procrustes scaling should be carried out} \item{ncv}{Number of canonical variates to display} } \value{A plot if ncv=2 or 3 and the Canonical Variate Scores} \references{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester.} \author{Ian Dryden} \seealso{procGPA} \examples{ #2D example : female and male apes (cf. Dryden and Mardia, 2016) data(pongof.dat) data(pongom.dat) data(panm.dat) data(panf.dat) apes <- groupstack( pongof.dat , pongom.dat , panm.dat, panf.dat ) shapes.cva( apes$x, apes$groups) } \keyword{multivariate} r-cran-shapes-1.2.6/man/shapes3d.Rd000077500000000000000000000024221412660331700167450ustar00rootroot00000000000000\name{shapes3d} \alias{shapes3d} \title{Plot 3D data} \description{Plot the landmark configurations from a 3D dataset} \usage{shapes3d(x,loop=0,type="p", color = 2, joinline=c(1:1), axes3=FALSE, rglopen=TRUE)} \arguments{ \item{x}{An array of size k x 3 x n, where k is the number of landmarks and n is the number of observations} \item{loop}{gives the number of times an animated loop through the observations is displayed (in order 1 to n). loop > 0 is suitable when a time-series of shapes is available. loop = 0 gives a plot of all the observations on the same figure. } \item{type}{Type of plot: "p" points, "dots" dots (quicker for large plots), "l" dots and lines though landmarks 1:k if `joinline' not stated} \item{color}{Colour of points (default color = 2 (red)). If a vector is given then the points are coloured in that order.} \item{joinline}{Join the numbered landmarks by lines} \item{axes3}{Logical. If TRUE then plot the axes.} \item{rglopen}{Logical. If TRUE then open a new RGL window, if FALSE then plot in current window.} } \value{ None } \references{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. } \author{Ian Dryden} \examples{ data(dna.dat) shapes3d(dna.dat) } \keyword{multivariate} r-cran-shapes-1.2.6/man/shells.Rd000077500000000000000000000016351412660331700165320ustar00rootroot00000000000000\name{shells} \alias{shells} \title{Microfossil shell data} \description{Microfossil shell data. Triangles from 21 individuals. Lohmann (1983) published 21 mean outlines of the microfossil which were based on random samples of organisms taken at different latitudes in the South Indian Ocean. } \usage{data(shells)} \format{ shells$uv Scaled shape coordinates (Bookstein shape co-ordinates with base (0,0) and (1,0). shells$size Centroid size } \source{ Bookstein, F. L. (1986). Size and shape spaces for landmark data in two dimensions (with discussion). Statistical Science, 1:181-242. Lohmann, G. P. (1983). Eigenshape analysis of microfossils: a general morphometric procedure for describing changes in shape. Mathematical Geology, 15:659-672. } \references{ The data have been extracted from Fig. 7 of Bookstein (1986). } \examples{ data(shells) plotshapes(shells$uv) } \keyword{datasets} r-cran-shapes-1.2.6/man/sooty.Rd000077500000000000000000000012371412660331700164130ustar00rootroot00000000000000\name{sooty} \alias{sooty} \title{Sooty mangabey data} \description{Sooty mangabey data skull data. 12 landmarks in 2 dimensions, 2 individuals (juvenile and male adult) followed by three individuals, female adult, male adult. The first entries are rotated, translated versions of the 3rd and 7th figure. } \usage{data(sooty)} \format{ An array of dimension 12 x 2 x 7 } \source{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 1. } \references{ Data from Paul O'Higgins (Hull-York Medical School) } \examples{ data(sooty) plotshapes(sooty,joinline=c(1:12,1)) } \keyword{datasets} r-cran-shapes-1.2.6/man/ssriemdist.Rd000077500000000000000000000023461412660331700174260ustar00rootroot00000000000000\name{ssriemdist} \alias{ssriemdist} %- Also NEED an `\alias' for EACH other topic documented here. \title{Riemannian size-and-shape distance} \description{Calculates the Riemannian size-and-shape distance d_S between two configurations} \usage{ ssriemdist(x, y, reflect=FALSE) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{k x m matrix (or complex k-vector for 2D data) where k = number of landmarks and m = no of dimensions} \item{y}{k x m matrix (or complex k-vector for 2D data)} \item{reflect}{ Logical. If reflect = TRUE then reflection invariance is included.} } \value{ The Riemannian size-and-shape distance d_S between the two configurations. (for the Riemannian shape distance use riemdist) } \references{ Le, H.-L. (1995). Mean size-and-shapes and mean shapes: a geometric point of view. Advances in Applied Probability, 27:44-55. } \seealso{procOPA,procGPA,riemdist} \examples{ data(gorf.dat) data(gorm.dat) gorf<-procGPA(gorf.dat,scale=FALSE) gorm<-procGPA(gorm.dat,scale=FALSE) ds<-ssriemdist(gorf$mshape,gorm$mshape) cat("Riemannian size-and-shape distance between mean size-and-shapes is ",ds," \n") } \author{Ian Dryden} \keyword{multivariate}% __ONLY ONE__ keyword per line r-cran-shapes-1.2.6/man/steroids.Rd000077500000000000000000000031101412660331700170620ustar00rootroot00000000000000\name{steroids} \alias{steroids} \title{Steroid data} \description{Steroid data. Between 42 and 61 atoms for each of 31 steroid molecules. } \usage{data(steroids)} \format{ steroids$x : An array of dimension 61 x 3 x 31 of 3D co-ordinates of the 31 steroids. If a molecules has less than 61 atoms then the remaining co-ordinates are all zero. steroids$activity : Activity class (`1' = high, `2' = intermediate, and `3' = low binding affinities to the corticosteroid binding globulin (CBG) receptor) steroids$radius : van der Waals radius (0 = missing value) steoirds$atom : atom type (0 = missing value) steroids$charge : partial charge (0 = missing value) steroids$names : steroid names } \source{ This particular version of the steroids data set of (x, y, z) atom co-ordinates and partial charges was constructed by Jonathan Hirst and James Melville (School of Chemistry, University of Nottingham). Also see Wagener, M., Sadowski, J., Gasteiger, J. (1995). J. Am. Chem. Soc., 117, 7769-7775. http://www2.ccc.uni-erlangen.de/services/steroids/ } \references{ Dryden, I.L., Hirst, J.D. and Melville, J.L. (2007). Statistical analysis of unlabelled point sets: comparing molecules in chemoinformatics. Biometrics, 63, 237-251. Czogiel I., Dryden, I.L. and Brignell, C.J. (2011). Bayesian matching of unlabeled point sets using random fields, with an application to molecular alignment. Annals of Applied Statistics, 5, 2603-2629. } \examples{ data(steroids) shapes3d(steroids$x[,,1]) } \keyword{datasets} r-cran-shapes-1.2.6/man/testmeanshapes.Rd000077500000000000000000000071741412660331700202700ustar00rootroot00000000000000\name{testmeanshapes} \alias{testmeanshapes} %- Also NEED an `\alias' for EACH other topic documented here. \title{Tests for mean shape difference, including permutation and bootstrap tests} \description{ Carries out tests to examine differences in mean shape between two independent populations, for $m=2$ or $m=3$ dimensional data. Tests are carried out using tangent co-ordinates. H : Hotelling $T^2$ statistic (see Dryden and Mardia, 2016, equ.(9.4)) G : Goodall's F statistic (see Dryden and Mardia, 2016, equ.(9.9)) J : James $T^2$ statistic (see Amaral et al., 2007) p-values are given based on resampling (either a bootstrap test or a permutation test) as well as the usual table based p-values. Bootstrap tests involve sampling with replacement under H0 (as in Amaral et al., 2007). Note when the sample sizes are low (compared to the number of landmarks) some minor regularization is carried out. In particular if Sw is a singular within group covariance matrix, it is replaced by Sw + 0.000001 (Identity matrix) and a `*' is printed in the output. } \usage{ testmeanshapes(A, B, resamples = 1000, replace = FALSE, scale= TRUE) } %- maybe also `usage' for other objects documented here. \arguments{ \item{A}{The random sample for group 1: k x m x n1 array of data, where k is the number of landmarks and n1 is the sample size. (Alternatively a k x n1 complex matrix for 2D)} \item{B}{The random sample for group 2: k x m x n2 array of data, where k is the number of landmarks and n2 is the sample size. (Alternatively a k x n2 complex matrix for 2D)} \item{resamples}{Integer. The number of resampling iterations. If resamples = 0 then no resampling procedures are carried out, and the tabular p-values are given only.} \item{replace}{Logical. If replace = TRUE then bootstrap resampling is carried out with replacement *within* each group. If replace = FALSE then permutation resampling is carried out (sampling without replacement in *pooled* samples).} \item{scale}{Logical. Whether or not to carry out Procrustes with scaling in the procedure.} } \value{ A list with components \item{H}{The Hotelling statistic (F statistic)} \item{H.pvalue}{p-value for the Hotelling test based on resampling} \item{H.table.pvalue}{p-value for the Hotelling test based on the null F distribution, assuming normality and equal covariance matrices} \item{J}{The James $T^2$ statistic} \item{J.pvalue}{p-value for the James $T^2$ test based on resampling} \item{J.table.pvalue}{p-value for the James $T^2$ test based on the null F distribution, assuming normality but unequal covariance matrices} \item{G}{The Goodall $F$ statistic} \item{G.pvalue}{p-value for the Goodall test based on resampling} \item{G.table.pvalue}{p-value for the Goodall test based on the null F distribution, assuming normality and equal isotropic covariance matrices)} } \references{Amaral, G.J.A., Dryden, I.L. and Wood, A.T.A. (2007) Pivotal bootstrap methods for $k$-sample problems in directional statistics and shape analysis. Journal of the American Statistical Association. 102, 695-707. Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with applications in R (Second Edition). Wiley, Chichester. Chapter 9. Goodall, C. R. (1991). Procrustes methods in the statistical analysis of shape (with discussion). Journal of the Royal Statistical Society, Series B, 53: 285-339. } \author{Ian Dryden} \seealso{resampletest} \examples{ #2D example : female and male Gorillas data(gorf.dat) data(gorm.dat) A<-gorf.dat B<-gorm.dat testmeanshapes(A,B,resamples=100) } \keyword{multivariate}% at least one, from doc/KEYWORDS r-cran-shapes-1.2.6/man/tpsgrid.Rd000077500000000000000000000051561412660331700167160ustar00rootroot00000000000000\name{tpsgrid} \alias{tpsgrid} %- Also NEED an `\alias' for EACH other topic documented here. \title{Thin-plate spline transformation grids} \description{Thin-plate spline transformation grids from one set of landmarks to another. } \usage{ tpsgrid(TT, YY, xbegin=-999, ybegin=-999, xwidth=-999, opt=1, ext=0.1, ngrid=22, cex=1, pch=20, col=2,zslice=0, mag=1, axes3=FALSE) } %- maybe also `usage' for other objects documented here. \arguments{ \item{TT}{First object (source): (k x m matrix)} \item{YY}{Second object (target): (k x m matrix)} \item{xbegin}{lowest x value for plot: if -999 then a value is determined} \item{ybegin}{lowest y value for plot: if -999 then a value is determined } \item{xwidth}{width of plot: if -999 then a value is determined} \item{opt}{Option 1: (just deformed grid on YY is displayed), option 2: both grids are displayed} \item{ext}{Amount of border on plot in 2D case.} \item{ngrid}{Number of grid points: size is ngrid * (ngrid -1)} \item{cex}{Point size} \item{pch}{Point symbol} \item{col}{Point colour} \item{zslice}{For 3D case the scaled z co-ordinate(s) for the grid slice(s). The values are on a standardized scale as a proportion of height from the middle of the z-axis to the top and bottom. Values in the range -1 to 1 would be sensible.} \item{mag}{Exaggerate effect (mag > 1). Standard effect has mag=1.} \item{axes3}{Logical. If TRUE then the axes are plotted in a 3D plot.} } \details{ A square grid on the first configuration is deformed smoothly using a pair of thin-plate splines in 2D, or a triple of splines in 3D, to a curved grid on the second object. For 3D data the grid is placed at a constant z-value on the first figuure, indicated by the value of zslice. For 2D data the covariance function in the thin-plate spline is $sigma(h) = |h|^2 log |h|^2$ and in 3D it is given by $sigma(h) = -| h |$. } \value{ No returned value } \references{ Bookstein, F.L. (1989). Principal warps: thin-plate splines and the decomposition of deformations, IEEE Transactions on Pattern Analysis and Machine Intelligence, 11, 567--585. Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester. Chapter 12. } \author{Ian Dryden} \seealso{procGPA} \examples{ data(gorf.dat) data(gorm.dat) #TPS grid with shape change exaggerated (2x) gorf<-procGPA(gorf.dat) gorm<-procGPA(gorm.dat) TT<-gorf$mshape YY<-gorm$mshape tpsgrid(TT,YY,mag=2) title("TPS grid: Female mean (left) to Male mean (right)") } \keyword{multivariate}% at least one, from doc/KEYWORDS \keyword{hplot} r-cran-shapes-1.2.6/man/transformations.Rd000077500000000000000000000030231412660331700204620ustar00rootroot00000000000000\name{transformations} \alias{transformations} %- Also NEED an `\alias' for EACH other topic documented here. \title{Calculate similarity transformations} \description{Calculate similarity transformations between configurations in two arrays. } \usage{ transformations(Xrotated,Xoriginal) } %- maybe also `usage' for other objects documented here. \arguments{ \item{Xrotated}{Input k x m x n real array of the Procrustes transformed configurations, where k is the number of points, m is the number of dimensions, and n is the sample size. } \item{Xoriginal}{Input k x m x n real array of the Procrustes original configurations, where k is the number of points, m is the number of dimensions, and n is the sample size. } } \value{A list with components \item{translation}{The translation parameters. These are the relative translations of the centroids of the individuals.} \item{scale}{The scale parameters} \item{rotation}{The rotation parameters. These are the rotations between the individuals after they have both been centred.} } \references{Dryden, I.L. and Mardia, K.V. (2016). Statistical Shape Analysis, with Applications in R (Second Edition). Wiley, Chichester.} \author{Ian Dryden} \seealso{procGPA} \examples{ #2D example : female and male Gorillas (cf. Dryden and Mardia, 2016) data(gorf.dat) Xorig <- gorf.dat Xrotated <- procGPA(gorf.dat)$rotated transformations(Xrotated,Xorig) } \keyword{multivariate}