circlize/0000755000176200001440000000000014236536475012075 5ustar liggesuserscirclize/NAMESPACE0000755000176200001440000000760314236521236013312 0ustar liggesusersS3method("$", "CELL_META") export("$.CELL_META") S3method("names", "CELL_META") export("names.CELL_META") S3method("print", "CELL_META") export("print.CELL_META") export("CELL_META") export("add_transparency") export("adjacencyList2Matrix") export("adjacencyMatrix2List") export("arrange_links_evenly") export("calc_gap") export("chordDiagram") export("chordDiagramFromDataFrame") export("chordDiagramFromMatrix") export("circlize") export("circos.arrow") export("circos.axis") export("circos.barplot") export("circos.boxplot") export("circos.clear") export("circos.connect") export("circos.dendrogram") export("circos.genomicAxis") export("circos.genomicDensity") export("circos.genomicHeatmap") export("circos.genomicIdeogram") export("circos.genomicInitialize") export("circos.genomicLabels") export("circos.genomicLines") export("circos.genomicLink") export("circos.genomicPoints") export("circos.genomicPosTransformLines") export("circos.genomicRainfall") export("circos.genomicRect") export("circos.genomicText") export("circos.genomicTrack") export("circos.genomicTrackPlotRegion") export("circos.heatmap") export("circos.heatmap.initialize") export("circos.heatmap.link") export("circos.info") export("circos.initialize") export("circos.initializeCircularGenome") export("circos.initializeWithIdeogram") export("circos.labels") export("circos.lines") export("circos.link") export("circos.nested") export("circos.par") export("circos.points") export("circos.polygon") export("circos.raster") export("circos.rect") export("circos.segments") export("circos.text") export("circos.track") export("circos.trackHist") export("circos.trackLines") export("circos.trackPlotRegion") export("circos.trackPoints") export("circos.trackText") export("circos.triangle") export("circos.update") export("circos.updatePlotRegion") export("circos.violin") export("circos.xaxis") export("circos.yaxis") export("cm_h") export("cm_x") export("cm_y") export("col2value") export("colorRamp2") export("convert_height") export("convert_length") export("convert_x") export("convert_y") export("cytoband.col") export("degree") export("draw.sector") export("fontsize") export("generateRandomBed") export("genomicDensity") export("get.all.sector.index") export("get.all.track.index") export("get.cell.meta.data") export("get.current.chromosome") export("get.current.sector.index") export("get.current.track.index") export("getI") export("get_most_inside_radius") export("highlight.chromosome") export("highlight.sector") export("inch_h") export("inch_x") export("inch_y") export("inches_h") export("inches_x") export("inches_y") export("mm_h") export("mm_x") export("mm_y") export("posTransform.default") export("posTransform.text") export("rainfallTransform") export("rand_color") export("read.chromInfo") export("read.cytoband") export("reverse.circlize") export("set.current.cell") export("set_track_gap") export("show.index") export("smartAlign") export("uh") export("ux") export("uy") import("GlobalOptions") import(graphics) importFrom("colorspace", HLS) importFrom("colorspace", HSV) importFrom("colorspace", LAB) importFrom("colorspace", LUV) importFrom("colorspace", RGB) importFrom("colorspace", XYZ) importFrom("colorspace", coords) importFrom("colorspace", hex) importFrom("colorspace", hex2RGB) importFrom("colorspace", sRGB) importFrom("grDevices", "dev.cur", "dev.prev", "dev.set") importFrom("grDevices", "dev.off", "pdf") importFrom("grDevices", "hcl.colors") importFrom("grDevices", as.raster) importFrom("grDevices", col2rgb) importFrom("grDevices", rgb) importFrom("grid", grid.pretty) importFrom("methods", as) importFrom("shape", Arrowhead) importFrom("stats", "as.dendrogram", "dist", "hclust", "order.dendrogram") importFrom("stats", "as.hclust", "cutree") importFrom("stats", "reorder") importFrom("stats", rnorm) importFrom("stats", runif) importFrom("utils", download.file) importFrom("utils", read.table, packageDescription) importFrom("utils", "getFromNamespace") circlize/demo/0000755000176200001440000000000014015721224013000 5ustar liggesuserscirclize/demo/00Index0000755000176200001440000000012514015721224014133 0ustar liggesusersfoo For demostrations, please go to http://jokergoo.github.io/circlize circlize/demo/foo.R0000755000176200001440000000051514015721224013712 0ustar liggesusersi = 1 while(1) { cat("\r") str = paste(paste(rep(" ", i), collapse = ""), "https://jokergoo.github.io/circlize", collapse = "") i = i+1 if(nchar(str) > 80) { cat(paste(rep(" ", 80), collapse = "")) str = "https://jokergoo.github.io/circlize" i = 0 cat("\r") } cat(str) Sys.sleep(0.2) flush.console() } circlize/LICENSE0000644000176200001440000000005114015721224013055 0ustar liggesusersYEAR: 2021 COPYRIGHT HOLDER: Zuguang Gu circlize/man/0000755000176200001440000000000014121171565012634 5ustar liggesuserscirclize/man/rainfallTransform.Rd0000644000176200001440000000241514214333136016606 0ustar liggesusers\name{rainfallTransform} \alias{rainfallTransform} \title{ Calculate inter-distance of genomic regions } \description{ Calculate inter-distance of genomic regions } \usage{ rainfallTransform( region, mode = c("min", "max", "mean", "left", "right"), normalize_to_width = FALSE) } \arguments{ \item{region}{Genomic positions. It can be a data frame with two columns which are start positions and end positions on a single chromosome. It can also be a bed-format data frame which contains the chromosome column. } \item{mode}{How to calculate inter-distance. For a region, there is a distance to the prevous region and also there is a distance to the next region. \code{mode} controls how to merge these two distances into one value. } \item{normalize_to_width}{If it is \code{TRUE}, the value is the relative distance divided by the width of the region. } } \value{ If the input is a two-column data frame, the function returnes a data frame with three columns: start position, end position and distance. And if the input is a bed-format data frame, there will be the chromosome column added. The row order of the returned data frame is as same as the input one. } \examples{ bed = generateRandomBed() bed = subset(bed, chr == "chr1") head(rainfallTransform(bed)) } circlize/man/convert_height.Rd0000644000176200001440000000114214214333136016126 0ustar liggesusers\name{convert_height} \alias{convert_height} \title{ Convert units } \description{ Convert units } \usage{ convert_height(...) } \arguments{ \item{...}{pass to \code{\link{convert_length}}} } \details{ This function is same as \code{\link{convert_length}}. The reason for naming this function is \code{\link{convert_length}} is mostely used for defining the height of tracks and track margins. } \seealso{ For pre-defined units, users can use \code{\link{cm_h}}, \code{\link{mm_h}} and \code{\link{inches_h}}. } \author{ Zuguang Gu } \examples{ # see example in `convert_length` page NULL } circlize/man/adjacencyMatrix2List.Rd0000644000176200001440000000076714214333136017156 0ustar liggesusers\name{adjacencyMatrix2List} \alias{adjacencyMatrix2List} \title{ Convert adjacency matrix to an adjacency list } \description{ Convert adjacency matrix to an adjacency list } \usage{ adjacencyMatrix2List(mat, keep.zero = FALSE) } \arguments{ \item{mat}{A numeric matrix.} \item{keep.zero}{Whether to keep the interactions with value zero.} } \examples{ set.seed(999) mat = matrix(sample(18, 18), 3, 6) rownames(mat) = paste0("S", 1:3) colnames(mat) = paste0("E", 1:6) adjacencyMatrix2List(mat) } circlize/man/rand_color.Rd0000644000176200001440000000361014214333136015242 0ustar liggesusers\name{rand_color} \alias{rand_color} \title{ Generate random colors } \description{ Generate random colors } \usage{ rand_color(n, hue = NULL, luminosity = "random", transparency = 0, friendly = FALSE) } \arguments{ \item{n}{number of colors} \item{hue}{the hue of the generated color. You can use following default color name: \code{red}, \code{orange}, \code{yellow}, \code{green}, \code{blue}, \code{purple}, \code{pink} and \code{monochrome}. If the value is a hexidecimal color string such as \code{#00FFFF}, the function will extract its hue value and use that to generate colors.} \item{luminosity}{controls the luminosity of the generated color. The value should be a string containing \code{bright}, \code{light}, \code{dark} and \code{random}.} \item{transparency}{transparency, numeric value between 0 and 1.} \item{friendly}{If it is true, light random colors will not be generated.} } \details{ The code is adapted from randomColor.js (\url{https://github.com/davidmerfield/randomColor} ). } \author{ Zuguang Gu } \examples{ plot(NULL, xlim = c(1, 10), ylim = c(1, 8), axes = FALSE, ann = FALSE) points(1:10, rep(1, 10), pch = 16, cex = 5, col = rand_color(10)) points(1:10, rep(2, 10), pch = 16, cex = 5, col = rand_color(10, luminosity = "bright")) points(1:10, rep(3, 10), pch = 16, cex = 5, col = rand_color(10, luminosity = "light")) points(1:10, rep(4, 10), pch = 16, cex = 5, col = rand_color(10, luminosity = "dark")) points(1:10, rep(5, 10), pch = 16, cex = 5, col = rand_color(10, hue = "red", luminosity = "bright")) points(1:10, rep(6, 10), pch = 16, cex = 5, col = rand_color(10, hue = "green", luminosity = "bright")) points(1:10, rep(7, 10), pch = 16, cex = 5, col = rand_color(10, hue = "blue", luminosity = "bright")) points(1:10, rep(8, 10), pch = 16, cex = 5, col = rand_color(10, hue = "monochrome", luminosity = "bright")) } circlize/man/circos.genomicRect.Rd0000644000176200001440000000633314214333136016645 0ustar liggesusers\name{circos.genomicRect} \alias{circos.genomicRect} \title{ Draw rectangle-like grid, specifically for genomic graphics } \description{ Draw rectangle-like grid, specifically for genomic graphics } \usage{ circos.genomicRect( region, value = NULL, ytop = NULL, ybottom = NULL, ytop.column = NULL, ybottom.column = NULL, sector.index = get.current.sector.index(), track.index = get.current.track.index(), posTransform = NULL, col = NA, border = "black", lty = par("lty"), ...) } \arguments{ \item{region}{A data frame contains 2 column which correspond to start positions and end positions. } \item{value}{A data frame contains values and other information. } \item{ytop}{A vector or a single value indicating top position of rectangles. } \item{ybottom}{A vector or a single value indicating bottom position of rectangles. } \item{ytop.column}{If \code{ytop} is in \code{value}, the index of the column. } \item{ybottom.column}{If \code{ybottom} is in \code{value}, the index of the column. } \item{sector.index}{Index of sector. } \item{track.index}{Index of track. } \item{posTransform}{Self-defined function to transform genomic positions, see \code{\link{posTransform.default}} for explaination. } \item{col}{The length of \code{col} can be either one or number of rows of \code{region}. Pass to \code{\link{circos.rect}}. } \item{border}{Settings are similar as \code{col}. Pass to \code{\link{circos.rect}}. } \item{lty}{Settings are similar as \code{col}. Pass to \code{\link{circos.rect}}. } \item{...}{Mysterious parameters. } } \details{ The function is a low-level graphical function and usually is put in \code{panel.fun} when using \code{\link{circos.genomicTrack}}. The function behaviours differently from different formats of input, see the examples in the "Examples" Section or go to \url{https://jokergoo.github.io/circlize_book/book/modes-of-input.html} for more details. } \examples{ \donttest{ circos.par("track.height" = 0.1, cell.padding = c(0, 0, 0, 0)) circos.initializeWithIdeogram(plotType = NULL) bed1 = generateRandomBed(nr = 100) bed2 = generateRandomBed(nr = 100) bed_list = list(bed1, bed2) f = colorRamp2(breaks = c(-1, 0, 1), colors = c("green", "black", "red")) circos.genomicTrack(bed_list, stack = TRUE, panel.fun = function(region, value, ...) { circos.genomicRect(region, value, col = f(value[[1]]), border = NA, ...) i = getI(...) cell.xlim = get.cell.meta.data("cell.xlim") circos.lines(cell.xlim, c(i, i), lty = 2, col = "#000000") }) circos.genomicTrack(bed_list, ylim = c(0, 3), panel.fun = function(region, value, ...) { i = getI(...) circos.genomicRect(region, value, ytop = i+0.4, ybottom = i-0.4, col = f(value[[1]]), border = NA, ...) cell.xlim = get.cell.meta.data("cell.xlim") circos.lines(cell.xlim, c(i, i), lty = 2, col = "#000000") }) circos.genomicTrack(bed1, panel.fun = function(region, value, ...) { circos.genomicRect(region, value, col = "red", border = NA, ...) }) circos.genomicTrack(bed_list, panel.fun = function(region, value, ...) { i = getI(...) circos.genomicRect(region, value, col = i, border = NA, ...) }) circos.clear() } } circlize/man/inch_x.Rd0000644000176200001440000000052314214333136014370 0ustar liggesusers\name{inch_x} \alias{inch_x} \title{ Convert unit on x direction in data coordinate } \description{ Convert unit on x direction in data coordinate } \usage{ inch_x(...) } \arguments{ \item{...}{pass to \code{\link{inches_x}}.} } \details{ This function is the same as \code{\link{inches_x}}. } \examples{ # There is no example NULL } circlize/man/cytoband.col.Rd0000644000176200001440000000055614214333136015505 0ustar liggesusers\name{cytoband.col} \alias{cytoband.col} \title{ Assign colors to cytogenetic band (hg19) according to the Giemsa stain results } \description{ Assign colors to cytogenetic band (hg19) according to the Giemsa stain results } \usage{ cytoband.col(x) } \arguments{ \item{x}{A vector containing the Giemsa stain results } } \examples{ # There is no example NULL } circlize/man/circos.barplot.Rd0000644000176200001440000000303514214333136016045 0ustar liggesusers\name{circos.barplot} \alias{circos.barplot} \title{ Draw barplots } \description{ Draw barplots } \usage{ circos.barplot(value, pos, bar_width = 0.6, col = NA, border = "black", lwd = par("lwd"), lty = par("lty"), sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{value}{A numeric vector or a matrix. If it is a matrix, columns correspond to the height of bars.} \item{pos}{Positions of the bars.} \item{bar_width}{Width of bars. It assumes the bars locating at \code{x = 1, 2, ...}.} \item{col}{Filled color of bars.} \item{border}{Color for the border.} \item{lwd}{Line width.} \item{lty}{Line style.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} } \details{ If the input variable is a matrix, it draws a stacked barplot. Please note, the x-values of barplots are normally integer indices. Just be careful when initializing the circular layout. } \examples{ circos.initialize(letters[1:4], xlim = c(0, 10)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { value = runif(10) circos.barplot(value, 1:10 - 0.5, col = 1:10) }) circos.track(ylim = c(-1, 1), panel.fun = function(x, y) { value = runif(10, min = -1, max = 1) circos.barplot(value, 1:10 - 0.5, col = ifelse(value > 0, 2, 3)) }) circos.clear() circos.initialize(letters[1:4], xlim = c(0, 10)) circos.track(ylim = c(0, 4), panel.fun = function(x, y) { value = matrix(runif(10*4), ncol = 4) circos.barplot(value, 1:10 - 0.5, col = 2:5) }) circos.clear() } circlize/man/circos.xaxis.Rd0000644000176200001440000000045214214333136015536 0ustar liggesusers\name{circos.xaxis} \alias{circos.xaxis} \title{ Draw x-axis } \description{ Draw x-axis } \usage{ circos.xaxis(...) } \arguments{ \item{...}{All pass to \code{\link{circos.axis}}.} } \details{ This function is identical to \code{\link{circos.axis}}. } \examples{ # There is no example NULL } circlize/man/circos.genomicLines.Rd0000644000176200001440000001020014214333136017006 0ustar liggesusers\name{circos.genomicLines} \alias{circos.genomicLines} \title{ Add lines to a plotting region, specifically for genomic graphics } \description{ Add lines to a plotting region, specifically for genomic graphics } \usage{ circos.genomicLines( region, value, numeric.column = NULL, sector.index = get.current.sector.index(), track.index = get.current.track.index(), posTransform = NULL, col = ifelse(area, "grey", "black"), lwd = par("lwd"), lty = par("lty"), type = "l", area = FALSE, area.baseline = NULL, border = "black", baseline = "bottom", pt.col = par("col"), cex = par("cex"), pch = par("pch"), ...) } \arguments{ \item{region}{A data frame contains 2 column which correspond to start positions and end positions. } \item{value}{A data frame contains values and other information. } \item{numeric.column}{Which column in \code{value} data frame should be taken as y-value. If it is not defined, the whole numeric columns in \code{value} will be taken. } \item{sector.index}{Index of sector. } \item{track.index}{Index of track. } \item{posTransform}{Self-defined function to transform genomic positions, see \code{\link{posTransform.default}} for explaination. } \item{col}{col of lines/areas. If there are more than one numeric column, the length of \code{col} can be either one or number of numeric columns. If there is only one numeric column and type is either \code{segment} or \code{h}, the length of \code{col} can be either one or number of rows of \code{region}. pass to \code{\link{circos.lines}} } \item{lwd}{Settings are similar as \code{col}. Pass to \code{\link{circos.lines}}. } \item{lty}{Settings are similar as \code{col}. Pass to \code{\link{circos.lines}}. } \item{type}{There is an additional option \code{segment} which plot segment lines from start position to end position. Settings are similar as \code{col}. Pass to \code{\link{circos.lines}}. } \item{area}{Settings are similar as \code{col}. Pass to \code{\link{circos.lines}}. } \item{area.baseline}{Deprecated, use \code{baseline} instead. } \item{baseline}{Settings are similar as \code{col}. Pass to \code{\link{circos.lines}}. } \item{border}{Settings are similar as \code{col}. Pass to \code{\link{circos.lines}}. } \item{pt.col}{Settings are similar as \code{col}. Pass to \code{\link{circos.lines}}. } \item{cex}{Settings are similar as \code{col}. Pass to \code{\link{circos.lines}}. } \item{pch}{Settings are similar as \code{col}. Pass to \code{\link{circos.lines}}. } \item{...}{Mysterious parameters. } } \details{ The function is a low-level graphical function and usually is put in \code{panel.fun} when using \code{\link{circos.genomicTrack}}. The function behaviours differently from different formats of input, see the examples in the "Examples" Section or go to \url{https://jokergoo.github.io/circlize_book/book/modes-of-input.html} for more details. } \examples{ \donttest{ ### test bed circos.par("track.height" = 0.1) circos.initializeWithIdeogram(plotType = NULL) bed = generateRandomBed(nr = 100) circos.genomicTrack(bed, panel.fun = function(region, value, ...) { circos.genomicLines(region, value, type = "l", ...) }) bed1 = generateRandomBed(nr = 100) bed2 = generateRandomBed(nr = 100) bed_list = list(bed1, bed2) circos.genomicTrack(bed_list, panel.fun = function(region, value, ...) { i = getI(...) circos.genomicLines(region, value, col = i, ...) }) circos.genomicTrack(bed_list, stack = TRUE, panel.fun = function(region, value, ...) { i = getI(...) circos.genomicLines(region, value, col = i, ...) }) bed = generateRandomBed(nr = 100, nc = 4) circos.genomicTrack(bed, panel.fun = function(region, value, ...) { circos.genomicLines(region, value, col = 1:4, ...) }) circos.genomicTrack(bed, stack = TRUE, panel.fun = function(region, value, ...) { i = getI(...) circos.genomicLines(region, value, col = i, ...) }) bed = generateRandomBed(nr = 100) circos.genomicTrack(bed, panel.fun = function(region, value, ...) { circos.genomicLines(region, value, type = "segment", lwd = 2, ...) }) circos.clear() } } circlize/man/mm_y.Rd0000644000176200001440000000102514214333136014057 0ustar liggesusers\name{mm_y} \alias{mm_y} \title{ Convert unit on y direction in data coordinate } \description{ Convert unit on y direction in data coordinate } \usage{ mm_y(y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{y}{The y-value in numeric.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} } \details{ See explanations in \code{\link{convert_y}} page. } \author{ Zuguang Gu } \examples{ # see examples in `convert_y` page NULL } circlize/man/add_transparency.Rd0000644000176200001440000000065514214333136016447 0ustar liggesusers\name{add_transparency} \alias{add_transparency} \title{ Add transparency to colors } \description{ Add transparency to colors } \usage{ add_transparency(col, transparency = 0) } \arguments{ \item{col}{A vector of colors.} \item{transparency}{Transparency, numeric value between 0 and 1.} } \value{ A vector of colors. } \examples{ add_transparency("red", 0.5) add_transparency(1, 0.5) add_transparency("#FF000080", 0.2) } circlize/man/inch_h.Rd0000644000176200001440000000042014214333136014344 0ustar liggesusers\name{inch_h} \alias{inch_h} \title{ Convert units } \description{ Convert units } \usage{ inch_h(...) } \arguments{ \item{...}{pass to \code{\link{inches_h}}} } \details{ This function is the same as \code{\link{inches_h}}. } \examples{ # There is no example NULL } circlize/man/reverse.circlize.Rd0000644000176200001440000000225714214333136016404 0ustar liggesusers\name{reverse.circlize} \alias{reverse.circlize} \title{ Convert to data coordinate system } \description{ Convert to data coordinate system } \usage{ reverse.circlize( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{x}{degree values. The value can also be a two-column matrix/data frame if you put x and y data points into one variable.} \item{y}{distance to the circle center (the radius)} \item{sector.index}{Index for the sector where the data coordinate is used} \item{track.index}{Index for the track where the data coordinate is used} } \details{ This is the reverse function of \code{\link{circlize}}. It transform data points from polar coordinate system to a specified data coordinate system. } \value{ A matrix with two columns (\code{x} and \code{y}) } \examples{ pdf(NULL) sectors = letters[1:4] circos.initialize(sectors, xlim = c(0, 1)) circos.trackPlotRegion(ylim = c(0, 1)) reverse.circlize(c(30, 60), c(0.9, 0.8)) reverse.circlize(c(30, 60), c(0.9, 0.8), sector.index = "d", track.index = 1) reverse.circlize(c(30, 60), c(0.9, 0.8), sector.index = "a", track.index = 1) circos.clear() dev.off() } circlize/man/inches_x.Rd0000644000176200001440000000112514214333136014717 0ustar liggesusers\name{inches_x} \alias{inches_x} \title{ Convert unit on x direction in data coordinate } \description{ Convert unit on x direction in data coordinate } \usage{ inches_x(x, sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) } \arguments{ \item{x}{The x-value in numeric.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} \item{...}{Pass to \code{\link{convert_x}}.} } \details{ See explanations in \code{\link{convert_x}} page. } \author{ Zuguang Gu } \examples{ # see examples in `convert_x` page NULL } circlize/man/highlight.chromosome.Rd0000644000176200001440000000054214214333136017242 0ustar liggesusers\name{highlight.chromosome} \alias{highlight.chromosome} \title{ Highlight chromosomes } \description{ Highlight chromosomes } \usage{ highlight.chromosome(...) } \arguments{ \item{...}{pass to \code{\link{highlight.sector}} } } \details{ This is only a shortcut function of \code{\link{highlight.sector}}. } \examples{ # There is no example NULL } circlize/man/circos.points.Rd0000644000176200001440000000364114214333136015721 0ustar liggesusers\name{circos.points} \alias{circos.points} \title{ Add points to a plotting region } \description{ Add points to a plotting region } \usage{ circos.points( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index(), pch = par("pch"), col = par("col"), cex = par("cex"), bg = par("bg")) } \arguments{ \item{x}{Data points on x-axis, measured in "current" data coordinate} \item{y}{Data points on y-axis, measured in "current" data coordinate} \item{sector.index}{Index for the sector} \item{track.index}{Index for the track} \item{pch}{Point type} \item{col}{Point color} \item{cex}{Point size} \item{bg}{backgrond of points} } \details{ This function can only add points in one specified cell. Pretending a low-level plotting function, it can only be applied in plotting region which has been created. You can think the function similar as the normal \code{\link[graphics]{points}} function, just adding points in the circular plotting region. The position of cell is identified by \code{sector.index} and \code{track.index}, if they are not specified, they are in 'current' sector and 'current' track. Data points out of the plotting region will also be added, but with warning messages. Other graphics parameters which are available in the function are \code{pch}, \code{col} and \code{cex} which have same meaning as those in the \code{\link[graphics]{par}}. It is recommended to use \code{\link{circos.points}} inside \code{panel.fun} in \code{\link{circos.trackPlotRegion}} so that it draws points directly on "curent" cell. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/graphics.html#points} } \examples{ circos.initialize(letters[1:8], xlim = c(0, 1)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { circos.points(runif(10), runif(10)) }) circos.points(runif(10), runif(10), sector.index = "c", pch = 16, col = "red") circos.clear() } circlize/man/convert_x.Rd0000644000176200001440000000420214214333136015125 0ustar liggesusers\name{convert_x} \alias{convert_x} \title{ Convert unit on x direction in data coordinate } \description{ Convert unit on x direction in data coordinate } \usage{ convert_x( x, unit = c("mm", "cm", "inches"), sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), h = get.cell.meta.data("ycenter", sector.index = sector.index, track.index = track.index)) } \arguments{ \item{x}{a numeric vector.} \item{unit}{supported units, only "mm", "cm", "inches".} \item{sector.index}{index for the sector where the conversion is applied.} \item{track.index}{index for the track where the conversion is applied.} \item{h}{since the width of the cell is not identical from the top to the bottom in the cell, the position on y direction needs to be specified. By default it is at the middle point on y-axis.} } \value{ A vector of numeric values which are measured in the specified data coordinate. } \seealso{ For pre-defined units, users can use \code{\link{cm_x}}, \code{\link{mm_x}} and \code{\link{inches_x}}. \code{\link{convert_y}} converts on y direction. \url{https://jokergoo.github.io/circlize_book/book/circular-layout.html#convert-functions} } \author{ Zuguang Gu } \examples{ sectors = letters[1:10] circos.par(cell.padding = c(0, 0, 0, 0), track.margin = c(0, 0)) circos.initialize(sectors, xlim = cbind(rep(0, 10), runif(10, 0.5, 1.5))) circos.track(ylim = c(0, 1), track.height = mm_h(5), panel.fun = function(x, y) { circos.lines(c(0, 0 + mm_x(5)), c(0.5, 0.5), col = "blue") }) circos.par(track.margin = c(0, mm_h(2))) circos.track(ylim = c(0, 1), track.height = cm_h(1), panel.fun = function(x, y) { xcenter = get.cell.meta.data("xcenter") circos.lines(c(xcenter, xcenter), c(0, cm_y(1)), col = "red") }) circos.par(track.margin = c(0, mm_h(5))) circos.track(ylim = c(0, 1), track.height = inch_h(1), panel.fun = function(x, y) { line_length_on_x = cm_x(1*sqrt(2)/2) line_length_on_y = cm_y(1*sqrt(2)/2) circos.lines(c(0, line_length_on_x), c(0, line_length_on_y), col = "orange") }) circos.clear() } circlize/man/circos.initialize.Rd0000644000176200001440000000553014214333136016545 0ustar liggesusers\name{circos.initialize} \alias{circos.initialize} \title{ Initialize the circular layout } \description{ Initialize the circular layout } \usage{ circos.initialize( sectors = NULL, x = NULL, xlim = NULL, sector.width = NULL, factors = sectors, ring = FALSE) } \arguments{ \item{sectors}{A \code{\link{factor}} variable or a character vector which represent data categories } \item{factors}{The same as \code{sectors}. It will be removed in future versions. } \item{x}{Data on x-axes, a vector } \item{xlim}{Ranges for values on x-axes, see "details" section for explanation of the format } \item{sector.width}{Width for each sector. The length of the vector should be either 1 which means all sectors have same width or as same as the number of sectors. Values for the vector are relative, and they will be scaled by dividing their summation. By default, it is \code{NULL} which means the width of sectors correspond to the data range in sectors. } \item{ring}{Whether the sector represented as a ring. If yes, there should only be one sector in the circle. } } \details{ The function allocates the sectors according to the values on x-axis. The number of sectors are determined by the \code{factors} and the order of sectors are determined by the levels of factors. In this function, the start and end position for each sector on the circle (measured by degree) are calculated according to the values on x-axis or by \code{xlim}. If \code{x} is set, the length of \code{x} must be equal to the length of \code{factors}. Then the data range for each sector are calculated from \code{x} by splitting \code{factors}. If \code{xlim} is set, it should be a vector containing two numbers or a matrix with 2 columns. If \code{xlim} is a 2-element vector, it means all sector share the same \code{xlim}. If \code{xlim} is a 2-column matrix, the number of rows should be equal to the number of categories identified by \code{factors}, then each row of \code{xlim} corresponds to the data range for each sector and the order of rows is corresponding to the order of levels of \code{factors}. If \code{xlim} is a matrix for which row names cover all sector names, \code{xlim} is automatically adjusted. Normally, width of sectors will be calculated internally according to the data range in sectors. But you can still set the width manually. However, it is not always a good idea to change the default sector width since the width can reflect the range of data in sectors. However, in some cases, it is useful to manually set the width such as you want to zoom some part of the sectors. The function finally calls \code{\link[graphics:plot.default]{plot}} with enforing aspect ratio to be 1 and be ready for adding graphics. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/circular-layout.html} } \examples{ # There is no example NULL } circlize/man/circos.violin.Rd0000644000176200001440000000307014214333136015701 0ustar liggesusers\name{circos.violin} \alias{circos.violin} \title{ Draw violin plots } \description{ Draw violin plots } \usage{ circos.violin(value, pos, violin_width = 0.8, col = NA, border = "black", lwd = par("lwd"), lty = par("lty"), show_quantile = TRUE, pt.col = par("col"), cex = par("cex"), pch = 16, max_density = NULL, sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{value}{A numeric vector, a matrix or a list. If it is a matrix, boxplots are made by columns.} \item{pos}{Positions of the boxes.} \item{violin_width}{Width of violins.} \item{col}{Filled color of boxes.} \item{border}{Color for the border as well as the quantile lines.} \item{lwd}{Line width.} \item{lty}{Line style} \item{show_quantile}{Whether to show the quantile lines.} \item{cex}{Point size.} \item{pch}{Point type.} \item{pt.col}{Point color} \item{max_density}{The maximal density value across several violins. It is used to compare between violins.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} } \examples{ \donttest{ circos.initialize(letters[1:4], xlim = c(0, 10)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { for(pos in seq(0.5, 9.5, by = 1)) { value = runif(10) circos.violin(value, pos) } }) circos.clear() circos.initialize(letters[1:4], xlim = c(0, 10)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { value = replicate(runif(10), n = 10, simplify = FALSE) circos.violin(value, 1:10 - 0.5, col = 1:10) }) circos.clear() } } circlize/man/chordDiagramFromMatrix.Rd0000644000176200001440000002121514214333136017516 0ustar liggesusers\name{chordDiagramFromMatrix} \alias{chordDiagramFromMatrix} \title{ Plot Chord Diagram from an adjacency matrix } \description{ Plot Chord Diagram from an adjacency matrix } \usage{ chordDiagramFromMatrix( mat, grid.col = NULL, grid.border = NA, transparency = 0.5, col = NULL, row.col = NULL, column.col = NULL, order = NULL, directional = 0, direction.type = "diffHeight", diffHeight = mm_h(2), link.target.prop = TRUE, target.prop.height = mm_h(1), reduce = 1e-5, xmax = NULL, self.link = 2, symmetric = FALSE, keep.diagonal = FALSE, preAllocateTracks = NULL, annotationTrack = c("name", "grid", "axis"), annotationTrackHeight = mm_h(c(3, 2)), link.border = NA, link.lwd = par("lwd"), link.lty = par("lty"), link.auto = TRUE, link.sort = "default", link.decreasing = TRUE, link.arr.length = ifelse(link.arr.type == "big.arrow", 0.02, 0.4), link.arr.width = link.arr.length/2, link.arr.type = "triangle", link.arr.lty = par("lty"), link.arr.lwd = par("lwd"), link.arr.col = par("col"), link.largest.ontop = FALSE, link.visible = TRUE, link.rank = NULL, link.zindex = NULL, link.overlap = FALSE, scale = FALSE, group = NULL, big.gap = 10, small.gap = 1, ...) } \arguments{ \item{mat}{A table which represents as a numeric matrix. } \item{grid.col}{Grid colors which correspond to matrix rows/columns (or sectors). The length of the vector should be either 1 or \code{length(union(rownames(mat), colnames(mat)))}. It's preferred that \code{grid.col} is a named vector of which names correspond to sectors. If it is not a named vector, the order of \code{grid.col} corresponds to order of sectors. } \item{grid.border}{border for grids. If it is \code{NULL}, the border color is same as grid color } \item{transparency}{Transparency of link colors, 0 means no transparency and 1 means full transparency. If transparency is already set in \code{col} or \code{row.col} or \code{column.col}, this argument will be ignored. \code{NA}also ignores this argument. } \item{col}{Colors for links. It can be a matrix which corresponds to \code{mat}, or a function which generate colors according to values in \code{mat}, or a single value which means colors for all links are the same, or a three-column data frame in which the first two columns correspond to row names and columns and the third column is colors. You may use \code{\link{colorRamp2}} to generate a function which maps values to colors. } \item{row.col}{Colors for links. Links from the same row in \code{mat} will have the same color. Length should be same as number of rows in \code{mat}. This argument only works when \code{col} is set to \code{NULL}. } \item{column.col}{Colors for links. Links from the same column in \code{mat} will have the same color. Length should be same as number of columns in \code{mat}. This argument only works when \code{col} and \code{row.col} is set to \code{NULL}. } \item{order}{Order of sectors. Default order is \code{union(df[[1]], df[[2]])}. } \item{directional}{Whether links have directions. 1 means the direction is from the first column in \code{df} to the second column, -1 is the reverse, 0 is no direction, and 2 for two directional. Same setting as \code{link.border}. } \item{xmax}{maximum value on x-axes, the value should be a named vector. } \item{direction.type}{type for representing directions. Can be one or two values in "diffHeight" and "arrows". If the value contains "diffHeight", different heights of the links are used to represent the directions for which starting root has long height to give people feeling that something is comming out. If the value contains "arrows", users can customize arrows with following arguments. Same setting as \code{link.border}. Note if you want to set both \code{diffHeight} and \code{arrows} for certain links, you need to embed these two options into one string such as \code{"diffHeight+arrows"}. } \item{diffHeight}{The difference of height between two 'roots' if \code{directional} is set to \code{TRUE}. If the value is set to a positive value, start root is shorter than end root and if it is set to a negative value, start root is longer than the end root. } \item{link.target.prop}{If the Chord diagram is directional, for each source sector, whether to draw bars that shows the proportion of target sectors. } \item{target.prop.height}{The height of the bars when \code{link.target.prop} is turned on. } \item{reduce}{if the ratio of the width of certain grid compared to the whole circle is less than this value, the grid is removed on the plot. Set it to value less than zero if you want to keep all tiny grid. } \item{self.link}{if there is a self link in one sector, 1 means the link will be degenerated as a 'mountain' and the width corresponds to the value for this connection. 2 means the width of the starting root and the ending root all have the width that corresponds to the value for the connection. } \item{symmetric}{Whether the matrix is symmetric. If the value is set to \code{TRUE}, only lower triangular matrix without the diagonal will be used. } \item{keep.diagonal}{If the matrix is specified as symmetric, whether keep diagonal for visualization. } \item{preAllocateTracks}{Pre-allocate empty tracks before drawing Chord diagram. It can be a single number indicating how many empty tracks needed to be created or a list containing settings for empty tracks. Please refer to vignette for details. } \item{annotationTrack}{Which annotation track should be plotted? By default, a track containing sector names and a track containing grid will be created. } \item{annotationTrackHeight}{Track height corresponding to values in \code{annotationTrack}. } \item{link.border}{border for links, single scalar or a matrix with names or a data frame with three columns } \item{link.lwd}{width for link borders, single scalar or a matrix with names or a data frame with three columns } \item{link.lty}{style for link borders, single scalar or a matrix with names or a data frame with three columns } \item{link.auto}{Ignored. } \item{link.sort}{whether sort links on every sector based on the width of the links on it. The value can be logical. The value can also be string "default" which automatically adjusts link orders so that links have minimal overall intersections. The value can also be a string "asis" and it is only workable for input as a data frame so that the links have the same orders as in the original data frame.# -link.decreasing for \code{link.sort} } \item{link.decreasing}{for \code{link.sort} } \item{link.arr.length}{pass to \code{\link{circos.link}}. The format of this argument is same as \code{link.lwd}. } \item{link.arr.width}{pass to \code{\link[shape]{Arrowhead}}. The format of this argument is same as \code{link.lwd}. } \item{link.arr.type}{pass to \code{\link{circos.link}}, same format as \code{link.lwd}. Default value is \code{triangle}. } \item{link.arr.col}{color or the single line link which is put in the center of the belt. The format of this argument is same as \code{link.lwd}. } \item{link.arr.lwd}{line width ofthe single line link which is put in the center of the belt. The format of this argument is same as \code{link.lwd}. } \item{link.arr.lty}{line type of the single line link which is put in the center of the belt. The format of this argument is same as \code{link.lwd}. } \item{link.largest.ontop}{controls the order of adding links, whether based on the absolute value? } \item{link.visible}{whether plot the link. The value is logical, if it is set to \code{FALSE}, the corresponding link will not plotted, but the space is still ocuppied. The format of this argument is same as \code{link.lwd} } \item{link.rank}{This is argument is removed. } \item{link.zindex}{order to add links to the circle, a large value means to add it later. } \item{link.overlap}{if it is a directional Chord Diagram, whether the links that come or end in a same sector overlap? } \item{scale}{scale each sector to same width } \item{group}{It contains the group labels and the sector names are used as the names in the vector. } \item{big.gap}{Gap between row sectors and column sectors. } \item{small.gap}{Small gap between sectors. } \item{...}{pass to \code{\link{circos.link}} } } \details{ Internally, the matrix is transformed to a data frame and sent to \code{\link{chordDiagramFromDataFrame}}. } \value{ A data frame which contains positions of links, see explanation in \code{\link{chordDiagram}}. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/the-chorddiagram-function.html} } \examples{ # There is no example NULL } circlize/man/circos.link.Rd0000644000176200001440000000736714214333136015353 0ustar liggesusers\name{circos.link} \alias{circos.link} \title{ Draw links between points or/and intervals } \description{ Draw links between points or/and intervals } \usage{ circos.link( sector.index1, point1, sector.index2, point2, rou = get_most_inside_radius(), rou1 = rou, rou2 = rou, h = NULL, h.ratio = 0.5, w = 1, h2 = h, w2 = w, inverse = FALSE, col = "black", lwd = par("lwd"), lty = par("lty"), border = col, directional = 0, arr.length = ifelse(arr.type == "big.arrow", 0.02, 0.4), arr.width = arr.length/2, arr.type = "triangle", arr.lty = lty, arr.lwd = lwd, arr.col = col, reduce_to_mid_line = FALSE) } \arguments{ \item{sector.index1}{Index for the first sector where one link end locates } \item{point1}{A single value or a numeric vector of length 2. If it is a 2-elements vector, then the link would be a belt/ribbon. } \item{sector.index2}{Index for the other sector where the other link end locates } \item{point2}{A single value or a numeric vector of length 2. If it is a 2-elements vector, then the link would be a belt/ribbon. } \item{rou}{The position of the the link ends (if \code{rou1} and \code{rou2} are not set). It is the percentage of the radius of the unit circle. By default its value is the position of bottom margin of the most inner track. } \item{rou1}{The position of end 1 of the link. } \item{rou2}{The position of end 2 of the link. } \item{h}{Height of the link, measured as percent to the radius to the unit circle. By default it is automatically infered. } \item{h.ratio}{systematically change the link height. The value is between 0 and 1. } \item{w}{Since the link is a Bezier curve, it controls the shape of Bezier curve. } \item{h2}{Height of the bottom edge of the link if it is a ribbon. } \item{w2}{Shape of the bottom edge of the link if it is a ribbon. } \item{inverse}{Whether the link is inversed. } \item{col}{Color of the link. If the link is a ribbon, then it is the filled color for the ribbon. } \item{lwd}{Line (or border) width } \item{lty}{Line (or border) style } \item{border}{If the link is a ribbon, then it is the color for the ribbon border. } \item{directional}{0 for no direction, 1 for direction from \code{point1} to \code{point2}, -1 for direction from \code{point2} to \code{point1}. 2 for two directional. The direction is important when arrow heads are added. } \item{arr.width}{Width of the arrows, pass to \code{\link[shape]{Arrowhead}}. } \item{arr.type}{Type of the arrows, pass to \code{\link[shape]{Arrowhead}}. Default value is \code{triangle}. There is an additional option \code{big.arrow}. } \item{arr.length}{Length of the arrows, measured in 'cm', pass to \code{\link[shape]{Arrowhead}}. If \code{arr.type} is set to \code{big.arrow}, the value is percent to the radius of the unit circle. } \item{arr.col}{Color of the arrows, pass to \code{\link[shape]{Arrowhead}}. } \item{arr.lwd}{Line width of arrows, pass to \code{\link[shape]{Arrowhead}}. } \item{arr.lty}{Line type of arrows, pass to \code{\link[shape]{Arrowhead}}. } \item{reduce_to_mid_line}{Only use the middle points of \code{point1} and \code{point2} to draw the link. } } \details{ Links are implemented as quadratic Bezier curves (\url{https://en.wikipedia.org/wiki/B\%C3\%A9zier_curve#Rational_B.C3.A9zier_curves} ). Drawing links does not create any track. So you can think it is independent of the tracks. By default you only need to set \code{sector.index1}, \code{point1}, \code{sector.index2} and \code{point2}. The links would look nice. Please refer to the vignette for detailed explanation. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/graphics.html#links} } \examples{ # There is no example NULL } circlize/man/circos.triangle.Rd0000644000176200001440000000141714214333136016211 0ustar liggesusers\name{circos.triangle} \alias{circos.triangle} \title{ Draw triangles } \description{ Draw triangles } \usage{ circos.triangle(x1, y1, x2, y2, x3, y3, ...) } \arguments{ \item{x1}{x-coordinates for the first point.} \item{y1}{y-coordinates for the first point.} \item{x2}{x-coordinates for the second point.} \item{y2}{y-coordinates for the second point.} \item{x3}{x-coordinates for the third point.} \item{y3}{y-coordinates for the third point.} \item{...}{Pass to \code{\link{circos.polygon}}.} } \examples{ circos.initialize(c("a", "b", "c", "d"), xlim = c(0, 10)) circos.track(ylim = c(0, 10), panel.fun = function(x, y) { circos.triangle(c(2, 2), c(2, 8), c(8, 8), c(2, 8), c(5, 5), c(8, 2)) }, track.height = 0.5) } circlize/man/circos.nested.Rd0000644000176200001440000000467714214333136015701 0ustar liggesusers\name{circos.nested} \alias{circos.nested} \title{ Nested zooming with two circular plots } \description{ Nested zooming with two circular plots } \usage{ circos.nested( f1, f2, correspondance, connection_height = mm_h(5), connection_col = NA, connection_border = "black", connection_lty = par("lty"), connection_lwd = par("lwd"), adjust_start_degree = TRUE) } \arguments{ \item{f1}{A self-defined function for making the first circular plot. The function should have no argument.} \item{f2}{A self-defined function for making the second circular plot. The function should have no argument.} \item{correspondance}{A six-column data frame which contains correspondance between the coordinates in two circular plots} \item{connection_height}{The height of the connection track, measured as the percent to the radius of the unit circle. The value can be specified by \code{\link{uh}} or \code{\link{convert_height}} with absolute units.} \item{connection_col}{Filled color of the connection track. The value can be a vector with same length as number of rows of \code{correspondance}} \item{connection_border}{Border color of the connection track.} \item{connection_lty}{Line style of the connection track borders} \item{connection_lwd}{Line width of the connection track borders} \item{adjust_start_degree}{If \code{circos.par(start.degree = ...)} is not set in \code{f2()}, the start degree for the second circular plot will be adjusted to make the distance of sectors between the two plots to the minimal.} } \details{ The function visualizes zoomings by combining two circular plots into one page where one is the normal circular plot and the other one only contains regions that need to be zoomed. This function automatically arranges the two plots to make it easy to correspond between the original and the zoomed sectors. Since the function needs to know the information of the two circular plots, please do not call \code{\link{circos.clear}} in either \code{f1()} or \code{f2()}. It will be called internally in \code{\link{circos.nested}}. If \code{adjust_start_degree} is set to \code{TRUE}, \code{start.degree} should not be set in \code{f2()}. Also \code{canvas.xlim} and \code{canvas.ylim} are reset in \code{f2()}, they should not be set in \code{f2()} either. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/nested-zooming.html} } \author{ Zuguang Gu } \examples{ # There is no example NULL } circlize/man/mm_h.Rd0000644000176200001440000000046614214333136014046 0ustar liggesusers\name{mm_h} \alias{mm_h} \title{ Convert units } \description{ Convert units } \usage{ mm_h(h) } \arguments{ \item{h}{The height in numeric.} } \details{ See explanations in \code{\link{convert_length}} page. } \author{ Zuguang Gu } \examples{ # see examples in `convert_length` page NULL } circlize/man/circos.raster.Rd0000644000176200001440000000570714214333136015712 0ustar liggesusers\name{circos.raster} \alias{circos.raster} \title{ Add raster images } \description{ Add raster images } \usage{ circos.raster( image, x, y, width, height, facing = c("inside", "outside", "reverse.clockwise", "clockwise", "downward", "bending.inside", "bending.outside"), niceFacing = FALSE, sector.index = get.current.sector.index(), track.index = get.current.track.index(), scaling = 1) } \arguments{ \item{image}{A \code{raster} object, or an object that can be converted by \code{\link[grDevices]{as.raster}}.} \item{x}{Position of the center of the raster image, measued in the data coordinate in the cell.} \item{y}{Position of the center of the raster image, measued in the data coordinate in the cell.} \item{width}{Width of the raster image. When \code{facing} is one of "inside", "outside", "clockwise" and "reverse.clockwise", the image should have absolute size where the value of \code{width} should be specified like \code{20mm}, \code{1cm} or \code{0.5inche}. When \code{facing} is one of \code{bending.inside} and \code{bending.outside}, the value of \code{width} is measured in the data coordinate in the cell.} \item{height}{Height of the raster image. Same format as \code{width}. If the value of \code{height} is omit, default height is calculated by taking the aspect ratio of the original image. But when \code{facing} is one of \code{bending.inside} and \code{bending.outside}, \code{height} is mandatory to set.} \item{facing}{Facing of the raster image.} \item{niceFacing}{Facing of text. Please refer to vignette for different settings.} \item{sector.index}{Index for the sector.} \item{track.index}{Index for the track.} \item{scaling}{Scaling factor to resize the raster image.} } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/graphics.html#raster-image} } \examples{ require(png) image = system.file("extdata", "Rlogo.png", package = "circlize") image = as.raster(readPNG(image)) circos.initialize(letters[1:8], xlim = c(0, 1)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { circos.raster(image, CELL_META$xcenter, CELL_META$ycenter, width = "2cm", facing = "inside", niceFacing = TRUE) }) circos.clear() if(FALSE) { # NOTE: following takes quite a long time to run load(system.file("extdata", "doodle.RData", package = "circlize")) circos.par("cell.padding" = c(0, 0, 0, 0)) circos.initialize(letters[1:16], xlim = c(0, 1)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { img = img_list[[CELL_META$sector.numeric.index]] circos.raster(img, CELL_META$xcenter, CELL_META$ycenter, width = 1, height = 1, facing = "bending.inside") }, track.height = 0.25, bg.border = NA) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { img = img_list[[CELL_META$sector.numeric.index + 16]] circos.raster(img, CELL_META$xcenter, CELL_META$ycenter, width = 1, height = 1, facing = "bending.inside") }, track.height = 0.25, bg.border = NA) circos.clear() } } circlize/man/circos.connect.Rd0000644000176200001440000000721114214333136016033 0ustar liggesusers\name{circos.connect} \alias{circos.connect} \title{ Draw connecting lines/ribons between two sets of points } \description{ Draw connecting lines/ribons between two sets of points } \usage{ circos.connect(x0, y0, x1, y1, sector.index = get.current.sector.index(), track.index = get.current.track.index(), type = c("normal", "segments", "bezier"), segments.ratio = c(1, 1, 1), col = par("col"), border = "black", lwd = par("lwd"), lty = par("lty"), ...) } \arguments{ \item{x0}{x coordinates for point set 1. The value can also be a two-column matrix.} \item{y0}{y coordinates for point set 1.} \item{x1}{x coordinates for point set 2. The value can also be a two-column matrix.} \item{y1}{y coordinates for point set 2.} \item{sector.index}{Index for the sector.} \item{track.index}{Index for the track.} \item{type}{Which type of connections. Values can be "normal", "segments" and "bezier".} \item{segments.ratio}{When \code{type} is set to \code{segments}, each connecting line is segmented into three parts. This argument controls the length of the three parts of sub-segments.} \item{col}{Color of the segments.} \item{border}{Border color of the links.} \item{lwd}{Line width of the segments.} \item{lty}{Line type of the segments.} \item{...}{Other arguments.} } \examples{ \donttest{ circos.initialize(c("a"), xlim = c(0, 1)) circos.track(ylim = c(0, 1), track.height = 0.7, bg.border = NA, panel.fun = function(x, y) { circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[1], 2), col = "#CCCCCC") circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[2], 2), col = "#CCCCCC") x0 = runif(100) x1 = runif(100) circos.connect(x0, 0, x1, 1, type = "normal", border = NA, col = rand_color(100, luminosity = "bright", transparency = 0.75)) }) circos.initialize(c("a"), xlim = c(0, 1)) circos.track(ylim = c(0, 1), track.height = 0.7, bg.border = NA, panel.fun = function(x, y) { circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[1], 2), col = "#CCCCCC") circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[2], 2), col = "#CCCCCC") x0 = runif(100) x1 = runif(100) circos.connect(x0, 0, x1, 1, type = "bezier", border = NA, col = rand_color(100, luminosity = "bright", transparency = 0.75)) }) circos.initialize(c("a"), xlim = c(0, 1)) circos.track(ylim = c(0, 1), track.height = 0.7, bg.border = NA, panel.fun = function(x, y) { circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[1], 2), col = "#CCCCCC") circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[2], 2), col = "#CCCCCC") x0 = sort(runif(200)) x0 = matrix(x0, ncol = 2, byrow = TRUE) x1 = sort(runif(200)) x1 = matrix(x1, ncol = 2, byrow = TRUE) circos.connect(x0, 0, x1, 1, type = "normal", border = NA, col = rand_color(100, luminosity = "bright", transparency = 0.5)) }) circos.initialize(c("a"), xlim = c(0, 1)) circos.track(ylim = c(0, 1), track.height = 0.7, bg.border = NA, panel.fun = function(x, y) { circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[1], 2), col = "#CCCCCC") circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[2], 2), col = "#CCCCCC") x0 = sort(runif(500)) x0 = matrix(x0, ncol = 2, byrow = TRUE) x0 = x0[sample(nrow(x0), nrow(x0)), ] x1 = sort(runif(500)) x1 = matrix(x1, ncol = 2, byrow = TRUE) x1 = x1[sample(nrow(x1), nrow(x1)), ] l = abs(x0[, 1] - x1[, 1]) < 0.5 circos.connect(x0[l ,], 0, x1[l, ], 1, type = "bezier", border = NA, col = rand_color(sum(l), luminosity = "bright", transparency = 0.5)) }) } } circlize/man/circos.genomicTrack.Rd0000644000176200001440000000060714214333136017012 0ustar liggesusers\name{circos.genomicTrack} \alias{circos.genomicTrack} \title{ Create a track for genomic graphics } \description{ Create a track for genomic graphics } \usage{ circos.genomicTrack(...) } \arguments{ \item{...}{Pass to \code{\link{circos.genomicTrackPlotRegion}}. } } \details{ shortcut function of \code{\link{circos.genomicTrackPlotRegion}}. } \examples{ # There is no example NULL } circlize/man/circos.heatmap.initialize.Rd0000644000176200001440000000231414214333136020160 0ustar liggesusers\name{circos.heatmap.initialize} \alias{circos.heatmap.initialize} \title{ Initialize circular heatmaps } \description{ Initialize circular heatmaps } \usage{ circos.heatmap.initialize(mat, split = NULL, cluster = TRUE, clustering.method = "complete", distance.method = "euclidean", dend.callback = function(dend, m, si) reorder(dend, rowMeans(m)), cell_width = rep(1, nrow(mat))) } \arguments{ \item{mat}{A matrix or a vector. The vector is transformed as a one-column matrix.} \item{split}{A categorical variable. It splits the matrix into a list of matrices.} \item{cluster}{whether to apply clustering on rows. The value can also be a \code{dendrogram}/\code{hclust} object or other objects that can be converted to with \code{\link[stats:dendrogram]{as.dendrogram}}.} \item{clustering.method}{Clustering method, pass to \code{\link[stats]{hclust}}.} \item{distance.method}{Distance method, pass to \code{\link[stats]{dist}}.} \item{dend.callback}{A callback function that is applied to the dendrogram in every sector.} \item{cell_width}{Relative widths of heatmap cells.} } \seealso{ \url{https://jokergoo.github.io/2020/05/21/make-circular-heatmaps/} } \examples{ # There is no example NULL } circlize/man/circlize-package.Rd0000644000176200001440000000545214214333136016323 0ustar liggesusers\name{circlize-package} \docType{package} \alias{circlize-package} \title{ Circular visualization in R } \description{ Circular visualization in R } \details{ This package aims to implement circular layout in R. Since most of the figures are composed of points, lines and polygons, we just need to implement low-level functions for drawing points, lines and polygons. Current there are following low-level graphic functions: \itemize{ \item \code{\link{circos.points}} \item \code{\link{circos.lines}} \item \code{\link{circos.rect}} \item \code{\link{circos.polygon}} \item \code{\link{circos.segments}} \item \code{\link{circos.text}} \item \code{\link{circos.axis}}, \code{\link{circos.xaxis}}, \code{\link{circos.yaxis}} \item \code{\link{circos.barplot}} \item \code{\link{circos.boxplot}} \item \code{\link{circos.violin}} \item \code{\link{circos.link}} } For drawing points, lines and text through the whole track (among several sectors), the following functions are available: \itemize{ \item \code{\link{circos.trackPoints}} \item \code{\link{circos.trackLines}} \item \code{\link{circos.trackText}} } Draw circular heatmaps \itemize{ \item \code{\link{circos.heatmap}} } Functions to arrange circular layout: \itemize{ \item \code{\link{circos.initialize}} \item \code{\link{circos.track}} \item \code{\link{circos.nested}} \item \code{\link{circos.update}} \item \code{\link{circos.par}} \item \code{\link{circos.info}} \item \code{\link{circos.clear}} } Theoretically, you are able to draw most kinds of circular plots by the above functions. For specific use in genomics, we also implement functions which add graphics in genome scale. Functions to initialize circos plot with genomic coordinates: \itemize{ \item \code{\link{circos.initializeWithIdeogram}} \item \code{\link{circos.genomicInitialize}} } Functions to arrange genomic circular layout: \itemize{ \item \code{\link{circos.genomicTrack}} } Functions to add basic graphics in genomic scale: \itemize{ \item \code{\link{circos.genomicPoints}} \item \code{\link{circos.genomicLines}} \item \code{\link{circos.genomicText}} \item \code{\link{circos.genomicRect}} \item \code{\link{circos.genomicLink}} } Functions with specific purpose: \itemize{ \item \code{\link{circos.genomicDensity}} \item \code{\link{circos.genomicRainfall}} \item \code{\link{circos.genomicIdeogram}} \item \code{\link{circos.genomicHeatmap}} \item \code{\link{circos.genomicLabels}} } Finally, function that draws Chord diagram: \itemize{ \item \code{\link{chordDiagram}} } Please refer to the vignettes (\url{https://jokergoo.github.io/circlize_book/book/} ) to find out how to draw basic and advanced circular plots by this package. } \examples{ # There is no example NULL } circlize/man/Subset.CELL_META.Rd0000644000176200001440000000121414214333136015707 0ustar liggesusers\name{$.CELL_META} \alias{Subset.CELL_META} \alias{$.CELL_META} \title{ Easy to way to get meta data in the current cell } \description{ Easy to way to get meta data in the current cell } \usage{ \method{$}{CELL_META}(x, name) } \arguments{ \item{x}{name of the variable should be "CELL_META" } \item{name}{name of the cell meta name } } \details{ The variable \code{\link{CELL_META}} can only be used to get meta data of the "current" cell. Basically you can simply replace e.g. \code{get.cell.meta.data("sector.index")} to \code{CELL_META$sector.index}. } \seealso{ \code{\link{get.cell.meta.data}} } \examples{ # There is no example NULL } circlize/man/circos.genomicLabels.Rd0000644000176200001440000000516514214333136017154 0ustar liggesusers\name{circos.genomicLabels} \alias{circos.genomicLabels} \title{ Add labels to specified genomic regions } \description{ Add labels to specified genomic regions } \usage{ circos.genomicLabels( bed, labels = NULL, labels.column = NULL, facing = "clockwise", niceFacing = TRUE, col = par("col"), cex = 0.8, font = par("font"), padding = 0.4, connection_height = mm_h(5), line_col = par("col"), line_lwd = par("lwd"), line_lty = par("lty"), labels_height = min(c(cm_h(1.5), max(strwidth(labels, cex = cex, font = font)))), side = c("inside", "outside"), labels.side = side, track.margin = circos.par("track.margin")) } \arguments{ \item{bed}{A data frame in bed format. } \item{labels}{A vector of labels corresponding to rows in \code{bed}. } \item{labels.column}{If the label column is already in \code{bed}, the index for this column in \code{bed}. } \item{facing}{fFacing of the labels. The value can only be \code{"clockwise"} or \code{"reverse.clockwise"}. } \item{niceFacing}{Whether automatically adjust the facing of the labels. } \item{col}{Color for the labels. } \item{cex}{Size of the labels. } \item{font}{Font of the labels. } \item{padding}{Padding of the labels, the value is the ratio to the height of the label. } \item{connection_height}{Height of the connection track. } \item{line_col}{Color for the connection lines. } \item{line_lwd}{Line width for the connection lines. } \item{line_lty}{Line type for the connectioin lines. } \item{labels_height}{Height of the labels track. } \item{side}{Side of the labels track, is it in the inside of the track where the regions are marked? } \item{labels.side}{Same as \code{side}. It will replace \code{side} in the future versions. } \item{track.margin}{Bottom and top margins. } } \details{ The function adds labels for the specified regions. The positions of labels are arranged so that they are not overlapping to each other. This function creates two tracks, one for the connection lines and one for the labels. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#labels} } \examples{ \donttest{ circos.initializeWithIdeogram() bed = generateRandomBed(nr = 50, fun = function(k) sample(letters, k, replace = TRUE)) bed[1, 4] = "aaaaa" circos.genomicLabels(bed, labels.column = 4, side = "inside") circos.clear() circos.initializeWithIdeogram(plotType = NULL) circos.genomicLabels(bed, labels.column = 4, side = "outside", col = as.numeric(factor(bed[[1]])), line_col = as.numeric(factor(bed[[1]]))) circos.genomicIdeogram() circos.clear() } } circlize/man/calc_gap.Rd0000644000176200001440000000206314214333136014652 0ustar liggesusers\name{calc_gap} \alias{calc_gap} \title{ Calculate gaps to make two Chord diagrams in the same scale } \description{ Calculate gaps to make two Chord diagrams in the same scale } \usage{ calc_gap(x1, x2, big.gap = 10, small.gap = 1) } \arguments{ \item{x1}{The matrix or the data frame for the first Chord diagram. } \item{x2}{The matrix or the data frame for the second Chord diagram. } \item{big.gap}{\code{big.gap} for the first Chord diagram. } \item{small.gap}{\code{small.gap} for both Chord diagrams. } } \details{ Both Chord diagrams should be both two-group Chord diagram. } \value{ A numeric value which can be directly set to \code{big.gap} in the second Chord diagram. } \examples{ set.seed(123) mat1 = matrix(sample(20, 25, replace = TRUE), 5) chordDiagram(mat1, directional = 1, grid.col = rep(1:5, 2), transparency = 0.5, big.gap = 10, small.gap = 1) mat2 = mat1 / 2 gap = calc_gap(mat1, mat2, big.gap = 10, small.gap = 1) chordDiagram(mat2, directional = 1, grid.col = rep(1:5, 2), transparency = 0.5, big.gap = gap, small.gap = 1) } circlize/man/get_most_inside_radius.Rd0000644000176200001440000000037714214333136017652 0ustar liggesusers\name{get_most_inside_radius} \alias{get_most_inside_radius} \title{ Get the inside radius of the most inner track } \description{ Get the inside radius of the most inner track } \usage{ get_most_inside_radius() } \examples{ # There is no example NULL } circlize/man/highlight.sector.Rd0000644000176200001440000000407114214333136016367 0ustar liggesusers\name{highlight.sector} \alias{highlight.sector} \title{ Highlight sectors and tracks } \description{ Highlight sectors and tracks } \usage{ highlight.sector( sector.index, track.index = get.all.track.index(), col = "#FF000040", border = NA, lwd = par("lwd"), lty = par("lty"), padding = c(0, 0, 0, 0), text = NULL, text.col = par("col"), text.vjust = 0.5, ...) } \arguments{ \item{sector.index}{A vector of sector index} \item{track.index}{A vector of track index that you want to highlight} \item{col}{Color for highlighting. Note the color should be semi-transparent.} \item{border}{Border of the highlighted region} \item{lwd}{Width of borders} \item{lty}{Style of borders} \item{padding}{Padding for the highlighted region. It should contain four values representing ratios of the width or height of the highlighted region} \item{text}{text added in the highlight region, only support plotting one string at a time} \item{text.vjust}{adjustment on 'vertical' (radical) direction. Besides to set it as numeric values, the value can also be a string contain absoute unit, e.g. "2.1mm", "-1 inche", but only "mm", "cm", "inches"/"inche" are allowed.} \item{text.col}{color for the text} \item{...}{pass to \code{\link{circos.text}}} } \details{ You can use \code{\link{circos.info}} to find out index for all sectors and all tracks. The function calls \code{\link{draw.sector}}. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/graphics.html#highlight-sectors-and-tracks} } \examples{ sectors = letters[1:8] circos.initialize(sectors, xlim = c(0, 1)) for(i in 1:4) { circos.trackPlotRegion(ylim = c(0, 1)) } circos.info(plot = TRUE) highlight.sector(c("a", "h"), track.index = 1) highlight.sector("c", col = "#00FF0040") highlight.sector("d", col = NA, border = "red", lwd = 2) highlight.sector("e", col = "#0000FF40", track.index = c(2, 3)) highlight.sector(c("f", "g"), col = NA, border = "green", lwd = 2, track.index = c(2, 3)) highlight.sector(sectors, col = "#FFFF0040", track.index = 4) circos.clear() } circlize/man/circos.trackPlotRegion.Rd0000644000176200001440000001220014214333136017503 0ustar liggesusers\name{circos.trackPlotRegion} \alias{circos.trackPlotRegion} \title{ Create plotting regions for a whole track } \description{ Create plotting regions for a whole track } \usage{ circos.trackPlotRegion( sectors = NULL, x = NULL, y = NULL, ylim = NULL, force.ylim = TRUE, track.index = NULL, track.height = circos.par("track.height"), track.margin = circos.par("track.margin"), cell.padding = circos.par("cell.padding"), bg.col = NA, bg.border = "black", bg.lty = par("lty"), bg.lwd = par("lwd"), panel.fun = function(x, y) {NULL}, factors = sectors) } \arguments{ \item{sectors}{A \code{\link{factor}} or a character vector which represents categories of data, if it is \code{NULL}, then it uses all sector index.} \item{factors}{The same as \code{sectors}. It will be removed in future versions. } \item{x}{Data on x-axis. It is only used if \code{panel.fun} is set.} \item{y}{Data on y-axis} \item{ylim}{Range of data on y-axis} \item{force.ylim}{Whether to force all cells in the track to share the same \code{ylim}. Normally, all cells on a same track should have same \code{ylim}.} \item{track.index}{Index for the track which is going to be created/updated. If the specified track has already been created, this function just updated corresponding track with new plot. If the specified track is \code{NULL} or has not been created, this function just creates it. Note the value for this argument should not exceed maximum track index plus 1.} \item{track.height}{Height of the track. It is the percentage to the radius of the unit circles. The value can be set by \code{\link{uh}} to an absolute unit. If updating a track (with proper \code{track.index} value), this argument is ignored.} \item{track.margin}{only affect current track} \item{cell.padding}{only affect current track} \item{bg.col}{Background color for the plotting regions. It can be vector which has the same length of sectors.} \item{bg.border}{Color for the border of the plotting regions. It can be vector which has the same length of sectors.} \item{bg.lty}{Line style for the border of the plotting regions. It can be vector which has the same length of sectors.} \item{bg.lwd}{Line width for the border of the plotting regions. It can be vector which has the same length of sectors.} \item{panel.fun}{Panel function to add graphics in each cell, see "details" section and vignette for explanation.} } \details{ This function tends to be a high-level plotting function, which means, you must first call this function to create plotting regions, then those low-level graphic function such as \code{\link{circos.points}}, \code{\link{circos.lines}} can be applied. Currently, all the cells that are created in a same track sharing same height, which means, there is no cell has larger height than others. Since ranges for values on x-axis has already been defined by \code{\link{circos.initialize}}, only ranges for values on y-axis should be specified in this function. There are two ways to identify the ranges for values on y-axes either by \code{y} or \code{ylim}. If \code{y} is set, it must has the same length as \code{factors} and the \code{ylim} for each cell is calculated from y values. Also, the ylim can be specified from \code{ylim} which can be a two-element vector or a matrix which has two columns and the number of rows is the same as the length of the levels of the factors. If there is no enough space for the new track or the new track overlaps with other tracks, there will be an error. If \code{factors} does not cover all sectors, the cells in remaining unselected sectors would also be created but without drawing anything. The \code{ylim} for these cells are the same as that in the last created cell. The function can also update a already-created track if the index for the track is specified. If updating an existed track, those parameters related to the position (such as track height and track margin) of the plotting region can not be changed. } \section{Panel}{ \code{panel.fun} provides a convenient way to add graphics in each cell when initializing the tracks. The self-defined function needs two arguments: \code{x} and \code{y} which correspond to the data points in the current cell. When \code{factors}, \code{x}, and \code{y} are set in \code{\link{circos.trackPlotRegion}}, a subset of \code{x} and \code{y} are split by \code{factors} and are sent to \code{panel.fun} in the "current" cell. \code{\link{circos.trackPlotRegion}} creates plotting regions one by one on the track and \code{panel.fun} adds graphics in the 'current' cell after the plotting region for a certain cell has been created. See vignette for examples of how to use this feature.} \seealso{ \url{https://jokergoo.github.io/circlize_book/book/circular-layout.html} } \examples{ circos.initialize(letters[1:8], xlim = c(0, 1)) set.seed(123) df = data.frame(fa = sample(letters[1:8], 100, replace = TRUE), x = runif(100), y = rnorm(100)) circos.track(ylim = c(0, 1), bg.col = rand_color(8)) circos.track(df$fa, x = df$x, y = df$y, panel.fun = function(x, y) { circos.points(x, y) }, track.height = 0.2, bg.border = rand_color(8)) circos.clear() } circlize/man/circos.updatePlotRegion.Rd0000644000176200001440000000271014214333136017666 0ustar liggesusers\name{circos.updatePlotRegion} \alias{circos.updatePlotRegion} \title{ Update the plotting region in an existed cell } \description{ Update the plotting region in an existed cell } \usage{ circos.updatePlotRegion( sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), bg.col = NA, bg.border = "black", bg.lty = par("lty"), bg.lwd = par("lwd")) } \arguments{ \item{sector.index}{Index for the sector} \item{track.index}{Index for the track} \item{bg.col}{Background color for the plotting region} \item{bg.border}{Color for the border of the plotting region} \item{bg.lty}{Line style for the border of the plotting region} \item{bg.lwd}{Line width for the border of the plotting region} } \details{ You can update an existed cell by this function by erasing all the graphics. But the \code{xlim} and \code{ylim} inside the cell still remain unchanged. Note if you use \code{\link{circos.track}} to update an already created track, you can re-define \code{ylim} in these cells. } \examples{ circos.initialize(letters[1:8], xlim = c(0, 1)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { circos.text(CELL_META$xcenter, CELL_META$ycenter, CELL_META$sector.index) }) circos.update(sector.index = "b", track.index = 1) circos.rect(CELL_META$cell.xlim[1], CELL_META$cell.ylim[1], CELL_META$cell.xlim[2], CELL_META$cell.ylim[2], col = "#FF000080") circos.clear() } circlize/man/circos.initializeWithIdeogram.Rd0000644000176200001440000000773714214333136021064 0ustar liggesusers\name{circos.initializeWithIdeogram} \alias{circos.initializeWithIdeogram} \title{ Initialize the circular layout with an ideogram } \description{ Initialize the circular layout with an ideogram } \usage{ circos.initializeWithIdeogram( cytoband = system.file(package = "circlize", "extdata", "cytoBand.txt"), species = NULL, sort.chr = TRUE, chromosome.index = usable_chromosomes(species), major.by = NULL, plotType = c("ideogram", "axis", "labels"), track.height = NULL, ideogram.height = convert_height(2, "mm"), ...) } \arguments{ \item{cytoband}{A path of the cytoband file or a data frame that already contains cytoband data. By default it is cytoband for hg19. Pass to \code{\link{read.cytoband}}. } \item{species}{Abbreviations of species. e.g. hg19 for human, mm10 for mouse. If this value is specified, the function will download cytoBand.txt.gz from UCSC website automatically. If there is no cytoband for user's species, it will keep on trying to download chromInfo file. Pass to \code{\link{read.cytoband}} or \code{\link{read.chromInfo}}. } \item{chromosome.index}{subset of chromosomes, also used to reorder chromosomes. } \item{sort.chr}{Whether chromosome names should be sorted (first sort by numbers then by letters). If \code{chromosome.index} is set, this argumetn is enforced to \code{FALSE} } \item{major.by}{Increment of major ticks. Pass to \code{\link{circos.genomicInitialize}}. } \item{plotType}{Which tracks should be drawn. \code{ideogram} for ideogram rectangle, \code{axis} for genomic axis and \code{labels} for chromosome names. If there is no ideogram for specified species, \code{ideogram} will be enforced to be excluded. If it is set to \code{NULL}, the function just initialize the plot but draw nothing. } \item{track.height}{Height of the track which contains "axis" and "labels". } \item{ideogram.height}{Height of the ideogram track } \item{...}{Pass to \code{\link{circos.genomicInitialize}}. } } \details{ The function will initialize the circular plot in which each sector corresponds to a chromosome. You can control the order of chromosomes by \code{chromosome.index} or by \code{sort.chr}, or by setting a special format of \code{cytoband} (please refer to \code{\link{read.cytoband}} to find out how to control a proper \code{cytoband}). The function finally pass data to \code{\link{circos.genomicInitialize}} to initialize the circular plot. The style of ideogram is almost fixed, but you can customize it with your self-sefined code. Refer to vignette for demonstration. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/initialize-genomic-plot.html#initialize-cytoband} } \examples{ \donttest{ circos.initializeWithIdeogram() cytoband.file = system.file(package = "circlize", "extdata", "cytoBand.txt") circos.initializeWithIdeogram(cytoband.file) cytoband.df = read.table(cytoband.file, colClasses = c("character", "numeric", "numeric", "character", "character"), sep = "\t") circos.initializeWithIdeogram(cytoband.df) circos.initializeWithIdeogram(species = "hg18") circos.initializeWithIdeogram(species = "mm10") circos.initializeWithIdeogram(chromosome.index = c("chr1", "chr2")) cytoband = read.table(cytoband.file, colClasses = c("character", "numeric", "numeric", "character", "character"), sep = "\t") circos.initializeWithIdeogram(cytoband, sort.chr = FALSE) cytoband[[1]] = factor(cytoband[[1]], levels = paste0("chr", c(22:1, "X", "Y"))) circos.initializeWithIdeogram(cytoband, sort.chr = FALSE) cytoband = read.table(cytoband.file, colClasses = c("character", "numeric", "numeric", "character", "character"), sep = "\t") circos.initializeWithIdeogram(cytoband, sort.chr = TRUE) circos.initializeWithIdeogram(plotType = c("axis", "labels")) circos.initializeWithIdeogram(plotType = NULL) circos.par("start.degree" = 90) circos.initializeWithIdeogram() circos.clear() circos.par("gap.degree" = rep(c(2, 4), 12)) circos.initializeWithIdeogram() circos.clear() } } circlize/man/generateRandomBed.Rd0000644000176200001440000000131014214333136016461 0ustar liggesusers\name{generateRandomBed} \alias{generateRandomBed} \title{ Generate random genomic data } \description{ Generate random genomic data } \usage{ generateRandomBed( nr = 10000, nc = 1, fun = function(k) rnorm(k, 0, 0.5), species = NULL) } \arguments{ \item{nr}{Number of rows } \item{nc}{Number of numeric columns / value columns } \item{fun}{Function for generating random values } \item{species}{species, pass to \code{\link{read.cytoband}} } } \details{ The function will uniformly sample positions from the genome. Chromosome names start with "chr" and positions are sorted. The final number of rows may not be exactly as same as \code{nr}. } \examples{ # There is no example NULL } circlize/man/circos.track.Rd0000644000176200001440000000055714214333136015514 0ustar liggesusers\name{circos.track} \alias{circos.track} \title{ Create plotting regions for a whole track } \description{ Create plotting regions for a whole track } \usage{ circos.track(...) } \arguments{ \item{...}{Pass to \code{\link{circos.trackPlotRegion}}.} } \details{ Shortcut function of \code{\link{circos.trackPlotRegion}}. } \examples{ # There is no example NULL } circlize/man/uh.Rd0000644000176200001440000000046414214333136013540 0ustar liggesusers\name{uh} \alias{uh} \title{ Convert units } \description{ Convert units } \usage{ uh(...) } \arguments{ \item{...}{pass to \code{\link{convert_length}}.} } \details{ Please do not use this function. Use \code{\link{mm_h}}/\code{\link{cm_h}}/inches_h` instead. } \examples{ # There is no example NULL } circlize/man/circos.heatmap.Rd0000644000176200001440000000640214214333136016022 0ustar liggesusers\name{circos.heatmap} \alias{circos.heatmap} \title{ Make circular heatmaps } \description{ Make circular heatmaps } \usage{ circos.heatmap(mat, split = NULL, col, na.col = "grey", cell.border = NA, cell.lty = 1, cell.lwd = 1, bg.border = NA, bg.lty = par("lty"), bg.lwd = par("lwd"), ignore.white = is.na(cell.border), cluster = TRUE, clustering.method = "complete", distance.method = "euclidean", dend.callback = function(dend, m, si) reorder(dend, rowMeans(m)), dend.side = c("none", "outside", "inside"), dend.track.height = 0.1, rownames.side = c("none", "outside", "inside"), rownames.cex = 0.5, rownames.font = par("font"), rownames.col = "black", show.sector.labels = FALSE, cell_width = rep(1, nrow(mat)), ...) } \arguments{ \item{mat}{A matrix or a vector. The vector is transformed as a one-column matrix.} \item{split}{A categorical variable. It splits the matrix into a list of matrices.} \item{col}{If the values in the matrices are continuous, the color should be a color mapping generated by \code{\link{colorRamp2}}. If the values are characters, the color should be a named color vector.} \item{na.col}{Color for \code{NA} values.} \item{cell.border}{Border color of cells. A single scalar.} \item{cell.lty}{Line type of cell borders. A single scalar.} \item{cell.lwd}{Line width of cell borders. A single scalar.} \item{bg.border}{Color for background border.} \item{bg.lty}{Line type of the background border.} \item{bg.lwd}{Line width of the background border.} \item{ignore.white}{Whether to draw the white color?} \item{cluster}{whether to apply clustering on rows. The value can also be a \code{dendrogram}/\code{hclust} object or other objects that can be converted to with \code{\link[stats:dendrogram]{as.dendrogram}}.} \item{clustering.method}{Clustering method, pass to \code{\link[stats]{hclust}}.} \item{distance.method}{Distance method, pass to \code{\link[stats]{dist}}.} \item{dend.callback}{A callback function that is applied to the dendrogram in every sector.} \item{dend.side}{Side of the dendrograms relative to the heatmap track.} \item{dend.track.height}{Track height of the dendrograms.} \item{rownames.side}{Side of the row names relative to the heatmap track.} \item{rownames.cex}{Cex of row names.} \item{rownames.font}{Font of row names.} \item{rownames.col}{Color of row names.} \item{show.sector.labels}{Whether to show sector labels.} \item{cell_width}{Relative widths of heatmap cells.} \item{...}{Pass to \code{\link{circos.track}} which draws the heatmap track.} } \seealso{ \url{https://jokergoo.github.io/2020/05/21/make-circular-heatmaps/} } \examples{ \donttest{ set.seed(123) mat1 = rbind(cbind(matrix(rnorm(50*5, mean = 1), nr = 50), matrix(rnorm(50*5, mean = -1), nr = 50)), cbind(matrix(rnorm(50*5, mean = -1), nr = 50), matrix(rnorm(50*5, mean = 1), nr = 50)) ) rownames(mat1) = paste0("R", 1:100) colnames(mat1) = paste0("C", 1:10) mat1 = mat1[sample(100, 100), ] # randomly permute rows split = sample(letters[1:5], 100, replace = TRUE) spilt = factor(split, levels = letters[1:5]) col_fun1 = colorRamp2(c(-2, 0, 2), c("blue", "white", "red")) circos.heatmap(mat1, split = split, col = col_fun1) circos.clear() } } circlize/man/circos.rect.Rd0000644000176200001440000000235114214333136015337 0ustar liggesusers\name{circos.rect} \alias{circos.rect} \title{ Draw rectangle-like grid } \description{ Draw rectangle-like grid } \usage{ circos.rect( xleft, ybottom, xright, ytop, sector.index = get.current.sector.index(), track.index = get.current.track.index(), rot = 0, ...) } \arguments{ \item{xleft}{x for the left bottom points} \item{ybottom}{y for the left bottom points} \item{xright}{x for the right top points} \item{ytop}{y for the right top points} \item{sector.index}{Index for the sector} \item{track.index}{Index for the track} \item{rot}{Rotation of the rectangles. The value is measured clockwise in degree. Rotation is relative to the center of the rectangles.} \item{...}{pass to \code{\link[graphics]{polygon}}} } \details{ The name for this function is \code{\link{circos.rect}} because if you imagine the plotting region as Cartesian coordinate, then it is rectangle. in the polar coordinate, the up and bottom edge become two arcs. This function can be vectorized. } \examples{ circos.initialize(c("a", "b", "c", "d"), xlim = c(0, 10)) circos.track(ylim = c(0, 10), panel.fun = function(x, y) { for(rot in seq(0, 360, by = 30)) { circos.rect(2, 2, 6, 6, rot = rot) } }, track.height = 0.5) } circlize/man/inches_h.Rd0000644000176200001440000000050214214333136014675 0ustar liggesusers\name{inches_h} \alias{inches_h} \title{ Convert units } \description{ Convert units } \usage{ inches_h(h) } \arguments{ \item{h}{The height in numeric.} } \details{ See explanations in \code{\link{convert_length}} page. } \author{ Zuguang Gu } \examples{ # see examples in `convert_length` page NULL } circlize/man/arrange_links_evenly.Rd0000644000176200001440000000230414214333136017320 0ustar liggesusers\name{arrange_links_evenly} \alias{arrange_links_evenly} \title{ Arrange links evenly on each sector } \description{ Arrange links evenly on each sector } \usage{ arrange_links_evenly(df, directional = 0) } \arguments{ \item{df}{A data frame with two columns. The values should only contain sector names. } \item{directional}{Whether the links are directional. } } \details{ This function only deals with single-line links. } \value{ A data frame with four columns of the sectors and the positions of the links. } \examples{ sectors = letters[1:20] df = data.frame(from = sample(sectors, 40, replace = TRUE), to = sample(sectors, 40, replace = TRUE), stringsAsFactors = FALSE) df = unique(df) df = df[df$from != df$to, ] circos.initialize(sectors, xlim = c(0, 1)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { circos.text(CELL_META$xcenter, CELL_META$ycenter, CELL_META$sector.index) }) df2 = arrange_links_evenly(df, directional = 1) for(i in seq_len(nrow(df2))) { s1 = df$from[i] s2 = df$to[i] circos.link(df2[i, "sector1"], df2[i, "pos1"], df2[i, "sector2"], df2[i, "pos2"], directional = 1) } } circlize/man/chordDiagramFromDataFrame.Rd0000644000176200001440000002052414214333136020100 0ustar liggesusers\name{chordDiagramFromDataFrame} \alias{chordDiagramFromDataFrame} \title{ Plot Chord Diagram from a data frame } \description{ Plot Chord Diagram from a data frame } \usage{ chordDiagramFromDataFrame( df, grid.col = NULL, grid.border = NA, transparency = 0.5, col = NULL, order = NULL, directional = 0, xmax = NULL, direction.type = "diffHeight", diffHeight = convert_height(2, "mm"), link.target.prop = TRUE, target.prop.height = mm_h(1), reduce = 1e-5, self.link = 2, preAllocateTracks = NULL, annotationTrack = c("name", "grid", "axis"), annotationTrackHeight = convert_height(c(3, 2), "mm"), link.border = NA, link.lwd = par("lwd"), link.lty = par("lty"), link.auto = TRUE, link.sort = "default", link.decreasing = TRUE, link.arr.length = ifelse(link.arr.type == "big.arrow", 0.02, 0.4), link.arr.width = link.arr.length/2, link.arr.type = "triangle", link.arr.lty = par("lty"), link.arr.lwd = par("lwd"), link.arr.col = par("col"), link.largest.ontop = FALSE, link.visible = TRUE, link.rank = NULL, link.zindex = seq_len(nrow(df)), link.overlap = FALSE, scale = FALSE, group = NULL, big.gap = 10, small.gap = 1, plot = TRUE, ...) } \arguments{ \item{df}{A data frame with at least two columns. The first two columns specify the connections and the third column (optional) contains numeric values which are mapped to the width of links as well as the colors if \code{col} is specified as a color mapping function. The sectors in the plot will be \code{union(df[[1]], df[[2]])}. } \item{grid.col}{Grid colors which correspond to sectors. The length of the vector should be either 1 or the number of sectors. It's preferred that \code{grid.col} is a named vector of which names correspond to sectors. If it is not a named vector, the order of \code{grid.col} corresponds to order of sectors. } \item{grid.border}{border for grids. If it is \code{NULL}, the border color is same as grid color } \item{transparency}{Transparency of link colors, 0 means no transparency and 1 means full transparency. If transparency is already set in \code{col} or \code{row.col} or \code{column.col}, this argument will be ignored. \code{NA}also ignores this argument. } \item{col}{Colors for links. It can be a vector which corresponds to connections in \code{df}, or a function which generate colors according to values (the third column) in \code{df}, or a single value which means colors for all links are the same. You may use \code{\link{colorRamp2}} to generate a function which maps values to colors. } \item{order}{Order of sectors. Default order is \code{union(df[[1]], df[[2]])}. } \item{directional}{Whether links have directions. 1 means the direction is from the first column in \code{df} to the second column, -1 is the reverse, 0 is no direction, and 2 for two directional. The value can be a vector which has same length as number of rows in \code{df}. } \item{xmax}{maximum value on x-axes, the value should be a named vector. } \item{direction.type}{type for representing directions. Can be one or two values in "diffHeight" and "arrows". If the value contains "diffHeight", different heights of the links are used to represent the directions for which starting root has long height to give people feeling that something is comming out. If the value contains "arrows", users can customize arrows with following arguments. The value can be a vector which has same length as number of rows in \code{df}. Note if you want to set both \code{diffHeight} and \code{arrows} for certain links, you need to embed these two options into one string such as \code{"diffHeight+arrows"}. } \item{diffHeight}{The difference of height between two 'roots' if \code{directional} is set to \code{TRUE}. If the value is set to a positive value, start root is shorter than end root and if it is set to a negative value, start root is longer than the end root. The value can be a vector which has same length as number of rows in \code{df}. } \item{link.target.prop}{If the Chord diagram is directional, for each source sector, whether to draw bars that shows the proportion of target sectors. } \item{target.prop.height}{The height of the bars when \code{link.target.prop} is turned on. } \item{reduce}{if the ratio of the width of certain grid compared to the whole circle is less than this value, the grid is removed on the plot. Set it to value less than zero if you want to keep all tiny grid. } \item{self.link}{if there is a self link in one sector, 1 means the link will be degenerated as a 'mountain' and the width corresponds to the value for this connection. 2 means the width of the starting root and the ending root all have the same width that corresponds to the value for the connection. } \item{preAllocateTracks}{Pre-allocate empty tracks before drawing Chord diagram. It can be a single number indicating how many empty tracks needed to be created or a list containing settings for empty tracks. Please refer to vignette for details. } \item{annotationTrack}{Which annotation track should be plotted? By default, a track containing sector names and a track containing grid will be created. } \item{annotationTrackHeight}{Track height corresponding to values in \code{annotationTrack}. } \item{link.border}{border for links, single scalar or a vector which has the same length as nrows of \code{df} or a data frame } \item{link.lwd}{width for link borders, single scalar or a vector which has the same length as nrows of \code{df} or a data frame } \item{link.lty}{style for link borders, single scalar or a vector which has the same length as nrows of \code{df} or a data frame } \item{link.auto}{Ignored. } \item{link.sort}{whether sort links on every sector based on the width of the links on it. The value can be logical. The value can also be string "default" which automatically adjusts link orders so that links have minimal overall intersections. The value can also be a string "asis" and it is only workable for input as a data frame so that the links have the same orders as in the original data frame.# -link.decreasing for \code{link.sort} } \item{link.decreasing}{for \code{link.sort} } \item{link.arr.length}{pass to \code{\link{circos.link}}. The format of this argument is same as \code{link.lwd}. } \item{link.arr.width}{pass to \code{\link[shape]{Arrowhead}}. The format of this argument is same as \code{link.lwd}. } \item{link.arr.type}{pass to \code{\link{circos.link}}, same settings as \code{link.lwd}. Default value is \code{triangle}. } \item{link.arr.col}{color or the single line link which is put in the center of the belt. The format of this argument is same as \code{link.lwd}. } \item{link.arr.lwd}{line width ofthe single line link which is put in the center of the belt. The format of this argument is same as \code{link.lwd}. } \item{link.arr.lty}{line type of the single line link which is put in the center of the belt. The format of this argument is same as \code{link.lwd}. } \item{link.largest.ontop}{controls the order of adding links, whether based on the absolute value? } \item{link.rank}{This is argument is removed. } \item{link.visible}{whether plot the link. The value is logical, if it is set to \code{FALSE}, the corresponding link will not plotted, but the space is still ocuppied. The format of this argument is same as \code{link.lwd} } \item{link.zindex}{order to add links to the circle, a large value means to add it later. } \item{link.overlap}{if it is a directional Chord Diagram, whether the links that come or end in a same sector overlap? } \item{scale}{scale each sector to same width } \item{group}{It contains the group labels and the sector names are used as the names in the vector. } \item{big.gap}{Gaps between the sectors in the first column of \code{df} and sectors in the second column in \code{df}. } \item{small.gap}{Small gap between sectors. } \item{plot}{Internally used. } \item{...}{pass to \code{\link{circos.link}} } } \details{ The data frame can have a column named "rank" which is used to control the order of adding links to the diagram. } \value{ A data frame which contains positions of links, see explanation in \code{\link{chordDiagram}}. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/the-chorddiagram-function.html} } \examples{ # There is no example NULL } circlize/man/circos.boxplot.Rd0000644000176200001440000000304514214333136016072 0ustar liggesusers\name{circos.boxplot} \alias{circos.boxplot} \title{ Draw boxplots } \description{ Draw boxplots } \usage{ circos.boxplot(value, pos, outline = TRUE, box_width = 0.6, col = NA, border = "black", lwd = par("lwd"), lty = par("lty"), cex = par("cex"), pch = 1, pt.col = par("col"), sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{value}{A numeric vector, a matrix or a list. If it is a matrix, boxplots are made by columns (each column is a box).} \item{pos}{Positions of the boxes.} \item{outline}{Whether to draw outliers.} \item{box_width}{Width of boxes.} \item{col}{Filled color of boxes.} \item{border}{Color for the border as well as the quantile lines.} \item{lwd}{Line width.} \item{lty}{Line style} \item{cex}{Point size.} \item{pch}{Point type.} \item{pt.col}{Point color.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} } \details{ Please note, the x-values of boxplots are normally integer indices. Just be careful when initializing the circular layout. } \examples{ circos.initialize(letters[1:4], xlim = c(0, 10)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { for(pos in seq(0.5, 9.5, by = 1)) { value = runif(10) circos.boxplot(value, pos) } }) circos.clear() circos.initialize(letters[1:4], xlim = c(0, 10)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { value = replicate(runif(10), n = 10, simplify = FALSE) circos.boxplot(value, 1:10 - 0.5, col = 1:10) }) circos.clear() } circlize/man/circlize.Rd0000644000176200001440000000207414214333136014727 0ustar liggesusers\name{circlize} \alias{circlize} \title{ Convert to polar coordinate system } \description{ Convert to polar coordinate system } \usage{ circlize( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{x}{Data points on x-axis. The value can also be a two-column matrix/data frame if you put x and y data points into one variable.} \item{y}{Data points on y-axis.} \item{sector.index}{Index for the sector to convert the coordinates.} \item{track.index}{Index for the track to convert the coordinates.} } \details{ This is the core function in the package. It transform data points from data coordinate system (in a specific cell) to the polar coordinate system. } \value{ A matrix with two columns (\code{theta} and \code{rou}). \code{rou} is measured in degree. } \examples{ pdf(NULL) sectors = c("a", "b") circos.initialize(sectors, xlim = c(0, 1)) circos.track(ylim = c(0, 1)) # x = 0.5, y = 0.5 in sector a and track 1 circlize(0.5, 0.5, sector.index = "a", track.index = 1) circos.clear() dev.off() } circlize/man/circos.axis.Rd0000644000176200001440000001174314214333136015353 0ustar liggesusers\name{circos.axis} \alias{circos.axis} \title{ Draw x-axis } \description{ Draw x-axis } \usage{ circos.axis( h = "top", major.at = NULL, labels = TRUE, major.tick = TRUE, sector.index = get.current.sector.index(), track.index = get.current.track.index(), labels.font = par("font"), labels.cex = par("cex"), labels.facing = "inside", labels.direction = NULL, labels.niceFacing = TRUE, direction = c("outside", "inside"), minor.ticks = 4, major.tick.length = mm_y(1), major.tick.percentage = 0.5, lwd = par("lwd"), col = par("col"), labels.col = par("col"), labels.pos.adjust = TRUE) } \arguments{ \item{h}{Position of the x-axis, can be "top", "bottom" or a numeric value} \item{major.at}{If it is numeric vector, it identifies the positions of the major ticks. It can exceed \code{xlim} value and the exceeding part would be trimmed automatically. If it is \code{NULL}, about every 10 degrees there is a major tick.} \item{labels}{labels of the major ticks. Also, the exceeding part would be trimmed automatically. The value can also be logical (either an atomic value or a vector) which represents which labels to show.} \item{major.tick}{Whether to draw major tick. If it is set to \code{FALSE}, there will be no minor ticks neither.} \item{sector.index}{Index for the sector.} \item{track.index}{Index for the track.} \item{labels.font}{Font style for the axis labels.} \item{labels.cex}{Font size for the axis labels.} \item{labels.direction}{Deprecated, use \code{facing} instead.} \item{labels.facing}{Facing of labels on axis, passing to \code{\link{circos.text}}} \item{labels.niceFacing}{Should facing of axis labels be human-easy.} \item{direction}{Whether the axis ticks point to the outside or inside of the circle.} \item{minor.ticks}{Number of minor ticks between two close major ticks.} \item{major.tick.length}{Length of the major ticks, measured in "current" data coordinate. \code{\link{convert_y}} can be used to convert an absolute unit to the data coordinate.} \item{major.tick.percentage}{Not used any more, please directly use \code{major.tick.length}.} \item{lwd}{Line width for ticks.} \item{col}{Color for the axes.} \item{labels.col}{Color for the labels.} \item{labels.pos.adjust}{Whether to adjust the positions of the first label and the last label so that the first label align to its left and the last label align to its right if they exceed the range on axes. The value can be a vector of length two which correspond to the first label and the last label.} } \details{ It only draws axes on x-direction. } \seealso{ \code{\link{circos.yaxis}} draws axes on y-direction. \url{https://jokergoo.github.io/circlize_book/book/graphics.html#axes} } \examples{ sectors = letters[1:8] circos.par(points.overflow.warning = FALSE) circos.initialize(sectors, xlim = c(0, 10)) circos.trackPlotRegion(sectors, ylim = c(0, 10), track.height = 0.1, bg.border = NA, panel.fun = function(x, y) { circos.text(5, 10, get.cell.meta.data("sector.index")) }) circos.trackPlotRegion(sectors, ylim = c(0, 10)) circos.axis(sector.index = "a") circos.axis(sector.index = "b", direction = "inside", labels.facing = "outside") circos.axis(sector.index = "c", h = "bottom") circos.axis(sector.index = "d", h = "bottom", direction = "inside", labels.facing = "reverse.clockwise") circos.axis(sector.index = "e", h = 5, major.at = c(1, 3, 5, 7, 9)) circos.axis(sector.index = "f", h = 5, major.at = c(1, 3, 5, 7, 9), labels = c("a", "c", "e", "g", "f"), minor.ticks = 0) circos.axis(sector.index = "g", h = 5, major.at = c(1, 3, 5, 7, 9), labels = c("a1", "c1", "e1", "g1", "f1"), major.tick = FALSE, labels.facing = "reverse.clockwise") circos.axis(sector.index = "h", h = 2, major.at = c(1, 3, 5, 7, 9), labels = c("a1", "c1", "e1", "g1", "f1"), minor.ticks = 2, major.tick.length = mm_y(5), labels.facing = "clockwise") circos.clear() if(FALSE) { ############### real-time clock ################# factors = letters[1] circos.par("gap.degree" = 0, "cell.padding" = c(0, 0, 0, 0), "start.degree" = 90) circos.initialize(sectors, xlim = c(0, 12)) circos.trackPlotRegion(sectors, ylim = c(0, 1), bg.border = NA) circos.axis(sector.index = "a", major.at = 0:12, labels = "", direction = "inside", major.tick.length = mm_y(3)) circos.text(1:12, rep(0.5, 12), 1:12, facing = "downward") while(1) { current.time = as.POSIXlt(Sys.time()) sec = ceiling(current.time$sec) min = current.time$min hour = current.time$hour # erase the clock hands draw.sector(rou1 = 0.8, border = "white", col = "white") sec.degree = 90 - sec/60 * 360 arrows(0, 0, cos(sec.degree/180*pi)*0.8, sin(sec.degree/180*pi)*0.8) min.degree = 90 - min/60 * 360 arrows(0, 0, cos(min.degree/180*pi)*0.7, sin(min.degree/180*pi)*0.7, lwd = 2) hour.degree = 90 - hour/12 * 360 - min/60 * 360/12 arrows(0, 0, cos(hour.degree/180*pi)*0.4, sin(hour.degree/180*pi)*0.4, lwd = 2) Sys.sleep(1) } circos.clear() } } circlize/man/read.chromInfo.Rd0000644000176200001440000000354614214333136015766 0ustar liggesusers\name{read.chromInfo} \alias{read.chromInfo} \title{ Read/parse chromInfo data from a data frame/file/UCSC database } \description{ Read/parse chromInfo data from a data frame/file/UCSC database } \usage{ read.chromInfo( chromInfo = system.file(package = "circlize", "extdata", "chromInfo.txt"), species = NULL, chromosome.index = usable_chromosomes(species), sort.chr = TRUE) } \arguments{ \item{chromInfo}{Path of the chromInfo file or a data frame that already contains chromInfo data } \item{species}{Abbreviations of species. e.g. hg19 for human, mm10 for mouse. If this value is specified, the function will download \code{chromInfo.txt.gz} from UCSC website automatically. } \item{chromosome.index}{subset of chromosomes, also used to reorder chromosomes. } \item{sort.chr}{Whether chromosome names should be sorted (first sort by numbers then by letters). If \code{chromosome.index} is set, this argument is enforced to \code{FALSE} } } \details{ The function read the chromInfo data, sort the chromosome names and calculate the length of each chromosome. By default, it is human hg19 chromInfo data. You can find the data structure for the chromInfo data from \url{https://hgdownload.cse.ucsc.edu/goldenpath/hg19/database/chromInfo.txt.gz} } \value{ \describe{ \item{\code{df}}{Data frame for chromInfo data (rows are sorted if \code{sort.chr} is set to \code{TRUE}) } \item{\code{chromosome}}{Sorted chromosome names } \item{\code{chr.len}}{Length of chromosomes. Order are same as \code{chromosome} } } } \examples{ data = read.chromInfo(species = "hg19") data = read.chromInfo(chromInfo = system.file(package = "circlize", "extdata", "chromInfo.txt")) chromInfo = read.table(system.file(package = "circlize", "extdata", "chromInfo.txt"), colClasses = c("character", "numeric"), sep = "\t") data = read.chromInfo(chromInfo = chromInfo) } circlize/man/cm_y.Rd0000644000176200001440000000102514214333136014045 0ustar liggesusers\name{cm_y} \alias{cm_y} \title{ Convert unit on y direction in data coordinate } \description{ Convert unit on y direction in data coordinate } \usage{ cm_y(y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{y}{The y-value in numeric.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} } \details{ See explanations in \code{\link{convert_y}} page. } \author{ Zuguang Gu } \examples{ # see examples in `convert_y` page NULL } circlize/man/convert_length.Rd0000644000176200001440000000243714214333136016147 0ustar liggesusers\name{convert_length} \alias{convert_length} \title{ Convert units } \description{ Convert units } \usage{ convert_length(x, unit = c("mm", "cm", "inches")) } \arguments{ \item{x}{a numeric vector} \item{unit}{supported units, only "mm", "cm", "inches".} } \details{ This function coverts mm/cm/inches units to units measured in the canvas coordinate, e.g. how much is it in the canvas coordinate for 1 mm/cm/inches. Since in the circular plot, the aspect ratio is always 1, it does not matter this conversion is applied on x direction or y direction. This function is mainly used in the radical direction. } \seealso{ \code{\link{convert_x}} and \code{\link{convert_y}} convert absolute units into a data coordinate in a specified cell. \url{https://jokergoo.github.io/circlize_book/book/circular-layout.html#convert-functions} } \author{ Zuguang Gu } \examples{ sectors = letters[1:10] circos.par(cell.padding = c(0, 0, 0, 0), track.margin = c(0, 0)) circos.initialize(sectors, xlim = cbind(rep(0, 10), runif(10, 0.5, 1.5))) circos.track(ylim = c(0, 1), track.height = mm_h(5)) circos.par(track.margin = c(0, mm_h(2))) circos.track(ylim = c(0, 1), track.height = cm_h(1)) circos.par(track.margin = c(0, mm_h(5))) circos.track(ylim = c(0, 1), track.height = inch_h(1)) circos.clear() } circlize/man/draw.sector.Rd0000644000176200001440000000462314214333136015360 0ustar liggesusers\name{draw.sector} \alias{draw.sector} \title{ Draw sectors or rings in a circle } \description{ Draw sectors or rings in a circle } \usage{ draw.sector( start.degree = 0, end.degree = 360, rou1 = 1, rou2 = NULL, center = c(0, 0), clock.wise = TRUE, col = NA, border = "black", lwd = par("lwd"), lty = par("lty")) } \arguments{ \item{start.degree}{start degree for the sector} \item{end.degree}{end degree for the sector} \item{rou1}{Radius for one of the arc in the sector} \item{rou2}{Radius for the other arc in the sector} \item{center}{Center of the circle} \item{clock.wise}{The direction from \code{start.degree} to \code{end.degree}} \item{col}{Filled color} \item{border}{Border color} \item{lwd}{Line width} \item{lty}{Line style} } \details{ If the interval between \code{start} and \code{end} (larger or equal to 360 or smaller or equal to -360) it would draw a full circle or ring. If \code{rou2} is set, it would draw part of a ring. } \examples{ plot(c(-1, 1), c(-1, 1), type = "n", axes = FALSE, ann = FALSE, asp = 1) draw.sector(20, 0) draw.sector(30, 60, rou1 = 0.8, rou2 = 0.5, clock.wise = FALSE, col = "#FF000080") draw.sector(350, 1000, col = "#00FF0080", border = NA) draw.sector(0, 180, rou1 = 0.25, center = c(-0.5, 0.5), border = 2, lwd = 2, lty = 2) draw.sector(0, 360, rou1 = 0.7, rou2 = 0.6, col = "#0000FF80") sectors = letters[1:8] circos.initialize(sectors, xlim = c(0, 1)) for(i in 1:3) { circos.trackPlotRegion(ylim = c(0, 1)) } circos.info(plot = TRUE) draw.sector(get.cell.meta.data("cell.start.degree", sector.index = "a"), get.cell.meta.data("cell.end.degree", sector.index = "a"), rou1 = 1, col = "#FF000040") draw.sector(0, 360, rou1 = get.cell.meta.data("cell.top.radius", track.index = 1), rou2 = get.cell.meta.data("cell.bottom.radius", track.index = 1), col = "#00FF0040") draw.sector(get.cell.meta.data("cell.start.degree", sector.index = "e"), get.cell.meta.data("cell.end.degree", sector.index = "f"), get.cell.meta.data("cell.top.radius", track.index = 2), get.cell.meta.data("cell.bottom.radius", track.index = 3), col = "#0000FF40") pos = circlize(c(0.2, 0.8), c(0.2, 0.8), sector.index = "h", track.index = 2) draw.sector(pos[1, "theta"], pos[2, "theta"], pos[1, "rou"], pos[2, "rou"], clock.wise = TRUE, col = "#00FFFF40") circos.clear() } circlize/man/circos.info.Rd0000644000176200001440000000245614214333136015343 0ustar liggesusers\name{circos.info} \alias{circos.info} \title{ Get information of the circular plot } \description{ Get information of the circular plot } \usage{ circos.info(sector.index = NULL, track.index = NULL, plot = FALSE) } \arguments{ \item{sector.index}{Which sectors you want to look at? It can be a vector. } \item{track.index}{Which tracks you want to look at? It can be a vector. } \item{plot}{Whether to add information on the plot. } } \details{ It tells you the basic parameters for sectors/tracks/cells. If both \code{sector.index} and \code{track.index} are set to \code{NULL}, the function would print index for all sectors and all tracks. If \code{sector.index} and/or \code{track.index} are set, the function would print \code{xlim}, \code{ylim}, \code{cell.xlim}, \code{cell.ylim}, \code{xplot}, \code{yplot}, \code{cell.width}, \code{cell.height}, \code{track.margin} and \code{cell.padding} for every cell in specified sectors and tracks. Also, the function will print index of your current sector and current track. If \code{plot} is set to \code{TRUE}, the function will plot the index of the sector and the track for each cell on the figure. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/circular-layout.html#circos-info-and-circos-clear} } \examples{ # There is no example NULL } circlize/man/posTransform.default.Rd0000644000176200001440000000167014214333136017244 0ustar liggesusers\name{posTransform.default} \alias{posTransform.default} \title{ Genomic position transformation function } \description{ Genomic position transformation function } \usage{ posTransform.default(region, ...) } \arguments{ \item{region}{Genomic positions at a single chromosome. It is a data frame with two columns which are start position and end position. } \item{...}{other arguments } } \details{ The default position transformation functions transforms position to be equally distributed along the chromosome. If users want to define their own transformation function, the requirement is that the returned value should be a data frame with two columns: transformed start position and transformed end position. The returned value should have same number of rows as the input one. For details why need to use position transformation, please refer to \code{\link{circos.genomicPosTransformLines}}. } \examples{ # There is no example NULL } circlize/man/adjacencyList2Matrix.Rd0000644000176200001440000000113514214333136017144 0ustar liggesusers\name{adjacencyList2Matrix} \alias{adjacencyList2Matrix} \title{ Convert adjacency list to an adjacency matrix } \description{ Convert adjacency list to an adjacency matrix } \usage{ adjacencyList2Matrix(lt, square = FALSE) } \arguments{ \item{lt}{A data frame which contains adjacency list.} \item{square}{Should the returned matrix be a square matrix?} } \examples{ set.seed(123) df = data.frame(from = sample(letters, 10, replace = TRUE), to = sample(letters, 10, replace = TRUE), value = 1:10) adjacencyList2Matrix(df) adjacencyList2Matrix(df, square = TRUE) } circlize/man/circos.labels.Rd0000644000176200001440000000377014214333136015652 0ustar liggesusers\name{circos.labels} \alias{circos.labels} \title{ Add a label track } \description{ Add a label track } \usage{ circos.labels( sectors, x, labels, facing = "clockwise", niceFacing = TRUE, col = par("col"), cex = 0.8, font = par("font"), padding = 0.4, connection_height = mm_h(5), line_col = par("col"), line_lwd = par("lwd"), line_lty = par("lty"), labels_height = min(c(cm_h(1.5), max(strwidth(labels, cex = cex, font = font)))), side = c("inside", "outside"), labels.side = side, track.margin = circos.par("track.margin")) } \arguments{ \item{sectors}{A vector of sector names.} \item{x}{Positions of the labels.} \item{labels}{A vector of labels.} \item{facing}{Facing of the labels. The value can only be \code{"clockwise"} or \code{"reverse.clockwise"}.} \item{niceFacing}{Whether automatically adjust the facing of the labels.} \item{col}{Color for the labels.} \item{cex}{Size of the labels.} \item{font}{Font of the labels.} \item{padding}{Padding of the labels, the value is the ratio to the height of the label.} \item{connection_height}{Height of the connection track.} \item{line_col}{Color for the connection lines.} \item{line_lwd}{Line width for the connection lines.} \item{line_lty}{Line type for the connectioin lines.} \item{labels_height}{Height of the labels track.} \item{side}{Side of the labels track, is it in the inside of the track where the regions are marked?} \item{labels.side}{Same as \code{side}. It will replace \code{side} in the future versions.} \item{track.margin}{Bottom and top margins.} } \details{ This function creates two tracks, one for the connection lines and one for the labels. If two labels are too close and overlap, this function automatically adjusts the positions of neighouring labels. } \examples{ circos.initialize(sectors = letters[1:8], xlim = c(0, 1)) circos.track(ylim = c(0, 1)) circos.labels(c("a", "a", "b", "b"), x = c(0.1, 0.12, 0.4, 0.6), labels = c(0.1, 0.12, 0.4, 0.6)) } circlize/man/set.current.cell.Rd0000644000176200001440000000123014214333136016306 0ustar liggesusers\name{set.current.cell} \alias{set.current.cell} \title{ Set flag to current cell } \description{ Set flag to current cell } \usage{ set.current.cell(sector.index, track.index) } \arguments{ \item{sector.index}{sector index } \item{track.index}{track index } } \details{ After setting the current cell, all functions which need \code{sector.index} and \code{track.index} arguments and are applied to the current cell do not need to specify the two arguments explicitly. } \examples{ pdf(NULL) circos.initialize(letters[1:8], xlim = c(0, 1)) circos.track(ylim = c(0, 1)) circos.info() set.current.cell("b", 1) circos.info() circos.clear() dev.off() } circlize/man/circos.initializeCircularGenome.Rd0000644000176200001440000000106714214333136021366 0ustar liggesusers\name{circos.initializeCircularGenome} \alias{circos.initializeCircularGenome} \title{ Initialize a layout for circular genome } \description{ Initialize a layout for circular genome } \usage{ circos.initializeCircularGenome(name, genome_size, plotType = "axis", ...) } \arguments{ \item{name}{Name of the genome (or the "chromosome name"). } \item{genome_size}{Size of the genome } \item{plotType}{Pass to \code{\link{circos.genomicInitialize}}. } \item{...}{All goes to \code{\link{circos.genomicInitialize}}. } } \examples{ # There is no example NULL } circlize/man/read.cytoband.Rd0000644000176200001440000000356214214333136015643 0ustar liggesusers\name{read.cytoband} \alias{read.cytoband} \title{ Read/parse cytoband data from a data frame/file/UCSC database } \description{ Read/parse cytoband data from a data frame/file/UCSC database } \usage{ read.cytoband( cytoband = system.file(package = "circlize", "extdata", "cytoBand.txt"), species = NULL, chromosome.index = usable_chromosomes(species), sort.chr = TRUE) } \arguments{ \item{cytoband}{Path of the cytoband file or a data frame that already contains cytoband data } \item{species}{Abbreviations of species. e.g. hg19 for human, mm10 for mouse. If this value is specified, the function will download \code{cytoBand.txt.gz} from UCSC website automatically. } \item{chromosome.index}{subset of chromosomes, also used to reorder chromosomes. } \item{sort.chr}{Whether chromosome names should be sorted (first sort by numbers then by letters). If \code{chromosome.index} is set, this argument is enforced to \code{FALSE} } } \details{ The function read the cytoband data, sort the chromosome names and calculate the length of each chromosome. By default, it is human hg19 cytoband data. You can find the data structure of the cytoband data from \url{https://hgdownload.cse.ucsc.edu/goldenpath/hg19/database/cytoBand.txt.gz} } \value{ \describe{ \item{\code{df}}{Data frame for cytoband data (rows are sorted if \code{sort.chr} is set to \code{TRUE}) } \item{\code{chromosome}}{Sorted chromosome names } \item{\code{chr.len}}{Length of chromosomes. Orders are same as \code{chromosome} } } } \examples{ data = read.cytoband(species = "hg19") data = read.cytoband(cytoband = system.file(package = "circlize", "extdata", "cytoBand.txt")) cytoband = read.table(system.file(package = "circlize", "extdata", "cytoBand.txt"), colClasses = c("character", "numeric", "numeric", "character", "character"), sep = "\t") data = read.cytoband(cytoband = cytoband) } circlize/man/circos.text.Rd0000644000176200001440000000447214214333136015374 0ustar liggesusers\name{circos.text} \alias{circos.text} \title{ Draw text in a cell } \description{ Draw text in a cell } \usage{ circos.text( x, y, labels, sector.index = get.current.sector.index(), track.index = get.current.track.index(), direction = NULL, facing = c("inside", "outside", "reverse.clockwise", "clockwise", "downward", "bending", "bending.inside", "bending.outside"), niceFacing = FALSE, adj = par("adj"), cex = 1, col = par("col"), font = par("font"), ...) } \arguments{ \item{x}{Data points on x-axis} \item{y}{Data points on y-axis} \item{labels}{Labels for each points} \item{sector.index}{Index for the sector} \item{track.index}{Index for the track} \item{direction}{deprecated, use \code{facing} instead.} \item{facing}{Facing of text. Please refer to vignette for different settings} \item{niceFacing}{Should the facing of text be adjusted to fit human eyes?} \item{adj}{offset for text. By default the text position adjustment is either horizontal or vertical in the canvas coordinate system. The "circular horizontal" offset can be set as a value in degree unit and the value should be wrapped by \code{\link{degree}}.} \item{...}{Pass to \code{\link[graphics]{text}}} \item{cex}{Font size} \item{col}{Font color} \item{font}{Font style} } \details{ The function is similar to \code{\link[graphics]{text}}. All you need to note is the \code{facing} settings. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/graphics.html#text} } \examples{ sectors = letters[1:4] circos.par(points.overflow.warning = FALSE) circos.initialize(sectors, xlim = c(0, 10)) circos.trackPlotRegion(sectors, ylim = c(0, 10), track.height = 0.5, panel.fun = function(x, y) { circos.text(3, 1, "inside", facing = "inside", cex = 0.8) circos.text(7, 1, "outside", facing = "outside", cex = 0.8) circos.text(0, 5, "reverse.clockwise", facing = "reverse.clockwise", adj = c(0.5, 0), cex = 0.8) circos.text(10, 5, "clockwise", facing = "clockwise", adj = c(0.5, 0), cex = 0.8) circos.text(5, 5, "downward", facing = "downward", cex = 0.8) circos.text(3, 9, "====bending.inside====", facing = "bending.inside", cex = 0.8) circos.text(7, 9, "====bending.outside====", facing = "bending.outside", cex = 0.8) }) circos.clear() } circlize/man/circos.clear.Rd0000644000176200001440000000104714214333136015471 0ustar liggesusers\name{circos.clear} \alias{circos.clear} \title{ Reset the circular layout parameters } \description{ Reset the circular layout parameters } \usage{ circos.clear() } \details{ Because there are several parameters for the circular plot which can only be set before \code{\link{circos.initialize}}. So before you draw the next circular plot, you need to reset all these parameters. If you meet some errors when re-drawing the circular plot, try running this function and it will solve most of the problems. } \examples{ # There is no example NULL } circlize/man/circos.arrow.Rd0000644000176200001440000000755114214333136015543 0ustar liggesusers\name{circos.arrow} \alias{circos.arrow} \title{ Draw arrow which is paralle to the circle } \description{ Draw arrow which is paralle to the circle } \usage{ circos.arrow( x1, x2, y = get.cell.meta.data("ycenter"), width = get.cell.meta.data("yrange")/2, sector.index = get.current.sector.index(), track.index = get.current.track.index(), arrow.head.length = mm_x(5), arrow.head.width = width*2, arrow.position = c("end", "start"), tail = c("normal", "point"), border = "black", col = "#FFCCCC", lty = par("lty"), ...) } \arguments{ \item{x1}{Start position of the arrow on the x-axis.} \item{x2}{End position of the arrow on the x-axis. Note \code{x2} should be larger than \code{x1}. The direction of arrows can be controlled by \code{arrow.position} argument.} \item{y}{Position of the arrow on the y-axis. Note this is the center of the arrow on y-axis.} \item{width}{Width of the arrow body.} \item{sector.index}{Index of the sector.} \item{track.index}{Index of the track.} \item{arrow.head.length}{Length of the arrow head. Note the value should be smaller than the length of the arrow itself (which is \code{x2 - x1}).} \item{arrow.head.width}{Width of the arrow head.} \item{arrow.position}{Where is the arrow head on the arrow. If you want to the arrow in the reversed direction, set this value to \code{"start"}.} \item{tail}{The shape of the arrow tail (the opposite side of arrow head).} \item{border}{Border color of the arrow.} \item{col}{Filled color of the arrow.} \item{lty}{Line style of the arrow.} \item{...}{Pass to \code{\link[graphics]{polygon}}.} } \details{ Note all position values are measured in the data coordinate (the coordinate in each cell). For the values of \code{width}, \code{arrow.head.Length}, \code{arrow.head.width}, they can be set with \code{\link{mm_y}}/\code{\link{cm_y}}/\code{\link{inches_y}} in absolute units. If you see points overflow warnings, you can set \code{circos.par(points.overflow.warning = FALSE)} to turn it off. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/graphics.html#circular-arrows} } \author{ Zuguang Gu } \examples{ op = par(no.readonly = TRUE) par(mfrow = c(1, 2)) circos.initialize(letters[1:4], xlim = c(0, 1)) col = rand_color(4) tail = c("point", "normal", "point", "normal") circos.track(ylim = c(0, 1), panel.fun = function(x, y) { circos.arrow(x1 = 0, x2 = 1, y = 0.5, width = 0.4, arrow.head.width = 0.6, arrow.head.length = cm_x(1), col = col[CELL_META$sector.numeric.index], tail = tail[CELL_META$sector.numeric.index]) }, bg.border = NA, track.height = 0.4) circos.clear() circos.initialize(letters[1:4], xlim = c(0, 1)) tail = c("point", "normal", "point", "normal") circos.track(ylim = c(0, 1), panel.fun = function(x, y) { circos.arrow(x1 = 0, x2 = 1, y = 0.5, width = 0.4, arrow.head.width = 0.6, arrow.head.length = cm_x(1), col = col[CELL_META$sector.numeric.index], tail = tail[CELL_META$sector.numeric.index], arrow.position = "start") }, bg.border = NA, track.height = 0.4) par(op) ########## cell cycle ########### cell_cycle = data.frame(phase = factor(c("G1", "S", "G2", "M"), levels = c("G1", "S", "G2", "M")), hour = c(11, 8, 4, 1)) color = c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3") circos.par(start.degree = 90) circos.initialize(cell_cycle$phase, xlim = cbind(rep(0, 4), cell_cycle$hour)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { circos.arrow(CELL_META$xlim[1], CELL_META$xlim[2], arrow.head.width = CELL_META$yrange*0.8, arrow.head.length = cm_x(1), col = color[CELL_META$sector.numeric.index]) circos.text(CELL_META$xcenter, CELL_META$ycenter, CELL_META$sector.index, facing = "downward") }, bg.border = NA, track.height = 0.3) circos.clear() } circlize/man/circos.trackPoints.Rd0000644000176200001440000000303514214333136016703 0ustar liggesusers\name{circos.trackPoints} \alias{circos.trackPoints} \title{ Add points to the plotting regions in a same track } \description{ Add points to the plotting regions in a same track } \usage{ circos.trackPoints( sectors, x, y, track.index = get.current.track.index(), pch = par("pch"), col = par("col"), cex = par("cex"), bg = par("bg"), factors = sectors) } \arguments{ \item{sectors}{A \code{\link{factor}} or a character vector which represents the categories of data} \item{factors}{The same as \code{sectors}. It will be removed in future versions. } \item{x}{Data points on x-axis} \item{y}{Data points on y-axis} \item{track.index}{Index for the track} \item{pch}{Point type} \item{col}{Point color} \item{cex}{Point size} \item{bg}{backgrond color} } \details{ The function adds points in multiple cells by first splitting data into several parts in which each part corresponds to one factor (sector index) and then adding points in each cell by calling \code{\link{circos.points}}. Length of \code{pch}, \code{col} and \code{cex} can be one, length of levels of the factors or length of factors. This function can be replaced by a \code{for} loop containing \code{\link{circos.points}}. } \examples{ circos.initialize(letters[1:8], xlim = c(0, 1)) df = data.frame(sectors = sample(letters[1:8], 100, replace = TRUE), x = runif(100), y = runif(100)) circos.track(ylim = c(0, 1)) circos.trackPoints(df$sectors, x = df$x, y = df$y, pch = 16, col = as.numeric(factor(df$fa))) circos.clear() } circlize/man/print.CELL_META.Rd0000644000176200001440000000040614214333136015600 0ustar liggesusers\name{print.CELL_META} \alias{print.CELL_META} \title{ Print CELL_META } \description{ Print CELL_META } \usage{ \method{print}{CELL_META}(x, ...) } \arguments{ \item{x}{input } \item{...}{additional parameters } } \examples{ # There is no example NULL } circlize/man/posTransform.text.Rd0000644000176200001440000000235714214333136016607 0ustar liggesusers\name{posTransform.text} \alias{posTransform.text} \title{ Genomic position transformation function specifically for text } \description{ Genomic position transformation function specifically for text } \usage{ posTransform.text( region, y, labels, cex = 1, font = par("font"), sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), padding = 0, extend = 0, ...) } \arguments{ \item{region}{Genomic positions at a single chromosome. It is a data frame with two columns which are start position and end position. } \item{y}{positions of texts } \item{labels}{text labels } \item{cex}{text size } \item{font}{text font style } \item{sector.index}{sector index } \item{track.index}{track index } \item{padding}{padding of text } \item{extend}{extend to allow labels to be put in an region which is wider than the current chromosome. The value should be a proportion value and the length is either one or two. } \item{...}{other arguments } } \details{ This position transformation function is designed specifically for text. Under the transformation, texts will be as close as possible to the original positions. } \examples{ # There is no example NULL } circlize/man/circos.genomicPoints.Rd0000644000176200001440000000770714214333136017232 0ustar liggesusers\name{circos.genomicPoints} \alias{circos.genomicPoints} \title{ Add points to a plotting region, specifically for genomic graphics } \description{ Add points to a plotting region, specifically for genomic graphics } \usage{ circos.genomicPoints( region, value, numeric.column = NULL, sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), posTransform = NULL, pch = par("pch"), col = par("col"), cex = par("cex"), bg = par("bg"), ...) } \arguments{ \item{region}{A data frame contains 2 columns which correspond to start positions and end positions. } \item{value}{A data frame contains values and other information. } \item{numeric.column}{Which column in \code{value} data frame should be taken as y-value. If it is not defined, the whole numeric columns in \code{value} will be taken. } \item{sector.index}{Index of sector. } \item{track.index}{Index of track. } \item{posTransform}{Self-defined function to transform genomic positions, see \code{\link{posTransform.default}} for explanation } \item{col}{Color of points. If there is only one numeric column, the length of \code{col} can be either one or number of rows of \code{region}. If there are more than one numeric column, the length of \code{col} can be either one or number of numeric columns. Pass to \code{\link{circos.points}}. } \item{pch}{Type of points. Settings are similar as \code{col}. Pass to \code{\link{circos.points}}. } \item{cex}{Size of points. Settings are similar as \code{col}. Pass to \code{\link{circos.points}}. } \item{bg}{Background colors for points. } \item{...}{Mysterious parameters. } } \details{ The function is a low-level graphical function and usually is put in \code{panel.fun} when using \code{\link{circos.genomicTrack}}. The function behaviours differently from different formats of input, see the examples in the "Examples" Section or go to \url{https://jokergoo.github.io/circlize_book/book/modes-of-input.html} for more details. } \examples{ circos.par("track.height" = 0.1) circos.initializeWithIdeogram(plotType = NULL) bed = generateRandomBed(nr = 100) circos.genomicTrack(bed, panel.fun = function(region, value, ...) { circos.genomicPoints(region, value, pch = 16, cex = 0.5, ...) }) circos.genomicTrack(bed, stack = TRUE, panel.fun = function(region, value, ...) { circos.genomicPoints(region, value, pch = 16, cex = 0.5, ...) i = getI(...) cell.xlim = get.cell.meta.data("cell.xlim") circos.lines(cell.xlim, c(i, i), lty = 2, col = "#00000040") }) bed1 = generateRandomBed(nr = 100) bed2 = generateRandomBed(nr = 100) bed_list = list(bed1, bed2) # data frame list circos.genomicTrack(bed_list, panel.fun = function(region, value, ...) { cex = (value[[1]] - min(value[[1]]))/(max(value[[1]]) - min(value[[1]])) i = getI(...) circos.genomicPoints(region, value, cex = cex, pch = 16, col = i, ...) }) circos.genomicTrack(bed_list, stack = TRUE, panel.fun = function(region, value, ...) { cex = (value[[1]] - min(value[[1]]))/(max(value[[1]]) - min(value[[1]])) i = getI(...) circos.genomicPoints(region, value, cex = cex, pch = 16, col = i, ...) cell.xlim = get.cell.meta.data("cell.xlim") circos.lines(cell.xlim, c(i, i), lty = 2, col = "#00000040") }) bed = generateRandomBed(nr = 100, nc = 4) circos.genomicTrack(bed, panel.fun = function(region, value, ...) { cex = (value[[1]] - min(value[[1]]))/(max(value[[1]]) - min(value[[1]])) circos.genomicPoints(region, value, cex = 0.5, pch = 16, col = 1:4, ...) }) circos.genomicTrack(bed, stack = TRUE, panel.fun = function(region, value, ...) { cex = (value[[1]] - min(value[[1]]))/(max(value[[1]]) - min(value[[1]])) i = getI(...) circos.genomicPoints(region, value, cex = cex, pch = 16, col = i, ...) cell.xlim = get.cell.meta.data("cell.xlim") circos.lines(cell.xlim, c(i, i), lty = 2, col = "#00000040") }) circos.clear() } circlize/man/circos.segments.Rd0000644000176200001440000000227114214333136016230 0ustar liggesusers\name{circos.segments} \alias{circos.segments} \title{ Draw segments through pairwise of points } \description{ Draw segments through pairwise of points } \usage{ circos.segments( x0, y0, x1, y1, sector.index = get.current.sector.index(), track.index = get.current.track.index(), straight = FALSE, col = par("col"), lwd = par("lwd"), lty = par("lty"), ...) } \arguments{ \item{x0}{x coordinates for starting points.} \item{y0}{y coordinates for ending points.} \item{x1}{x coordinates for starting points.} \item{y1}{y coordinates for ending points.} \item{sector.index}{Index for the sector.} \item{track.index}{Index for the track.} \item{straight}{Whether the segment is a straight line.} \item{col}{Color of the segments.} \item{lwd}{Line width of the segments.} \item{lty}{Line type of the segments.} \item{...}{Pass to \code{\link[graphics]{lines}}.} } \examples{ circos.initialize(letters[1:8], xlim = c(0, 1)) circos.track(ylim = c(0, 1), track.height = 0.3, panel.fun = function(x, y) { x = seq(0.2, 0.8, by = 0.2) y = seq(0.2, 0.8, by = 0.2) circos.segments(x, 0.1, x, 0.9) circos.segments(0.1, y, 0.9, y) }) circos.clear() } circlize/man/get.current.sector.index.Rd0000644000176200001440000000041714214333136017766 0ustar liggesusers\name{get.current.sector.index} \alias{get.current.sector.index} \title{ Get current sector index } \description{ Get current sector index } \usage{ get.current.sector.index() } \value{ Simply returns the name of current sector } \examples{ # There is no example NULL } circlize/man/circos.heatmap.link.Rd0000644000176200001440000000173214214333136016757 0ustar liggesusers\name{circos.heatmap.link} \alias{circos.heatmap.link} \title{ Draw a link between two matrix rows in the circular heatmap } \description{ Draw a link between two matrix rows in the circular heatmap } \usage{ circos.heatmap.link(row_from, row_to, ...) } \arguments{ \item{row_from}{The row index where the link starts. The value should be length 1. If you want to draw multiple links, put the function in a \code{for} loop.} \item{row_to}{The row index where the link ends.} \item{...}{Pass to \code{\link{circos.link}}.} } \examples{ \donttest{ set.seed(123) mat = matrix(rnorm(100*10), nrow = 100) rownames(mat) = paste0("R", 1:100) col_fun = colorRamp2(c(-2, 0, 2), c("blue", "white", "red")) circos.heatmap(mat, col = col_fun, rownames.side = "outside") circos.heatmap.link(10, 60) circos.clear() split = sample(letters[1:5], 100, replace = TRUE) circos.heatmap(mat, col = col_fun, split = split, rownames.side = "outside") circos.heatmap.link(10, 60) circos.clear() } } circlize/man/circos.par.Rd0000644000176200001440000001315414214333136015167 0ustar liggesusers\name{circos.par} \alias{circos.par} \title{ Parameters for the circular layout } \description{ Parameters for the circular layout } \usage{ circos.par(..., RESET = FALSE, READ.ONLY = NULL, LOCAL = FALSE, ADD = FALSE) } \arguments{ \item{...}{Arguments for the parameters, see "details" section } \item{RESET}{reset to default values } \item{READ.ONLY}{please ignore } \item{LOCAL}{please ignore } \item{ADD}{please ignore } } \details{ Global parameters for the circular layout. Currently supported parameters are: \describe{ \item{\code{start.degree}}{The starting degree from which the circle begins to draw. Note this degree is measured in the standard polar coordinate which means it is always reverse-clockwise. } \item{\code{gap.degree}}{Gap between two neighbour sectors. It can be a single value or a vector. If it is a vector, the first value corresponds to the gap after the first sector. } \item{\code{gap.after}}{identical to \code{gap.degree} option, but a more understandable name. Modifying this option will also affect \code{gap.degree}. } \item{\code{track.margin}}{Like \code{margin} in Cascading Style Sheets (CSS), it is the blank area out of the plotting region, also outside of the borders. Since left and right margin are controlled by \code{gap.degree}, only bottom and top margin need to be set. And all cells in a same track share the same margins, and that's why this parameter is called \code{track.margin}. The value for the \code{track.margin} is the percentage according to the radius of the unit circle. \code{\link{convert_height}} can be used to set to an absolute unit (e.g cm/inche). } \item{\code{unit.circle.segments}}{Since curves are simulated by a series of straight lines, this parameter controls the amount of segments to represent a curve. The minimal length of the line segmentation is the length of the unit circle (\code{2pi}) divided by \code{unit.circoe.segments}. More segments means better approximation for the curves while larger size if you generate figures as PDF format. } \item{\code{cell.padding}}{Padding of the cell. Like \code{padding} in Cascading Style Sheets (CSS), it is the blank area around the plotting regions, but within the borders. The parameter has four values, which controls the bottom, left, top and right paddings respectively. The first and the third padding values are the percentages according to the radius of the unit circle and the second and fourth values are degrees. Similar as \code{track.margin} option, the first and the third value can be set by \code{\link{convert_height}} to an absolute unit. } \item{\code{track.height}}{The default height of tracks. It is the percentage according to the radius of the unit circle. The height includes the top and bottom cell paddings but not the margins. \code{\link{convert_height}} can be used to set the height to an absolute unit. } \item{\code{points.overflow.warning}}{Since each cell is in fact not a real plotting region but only an ordinary rectangle, it does not eliminate points that are plotted out of the region. So if some points are out of the plotting region, \code{circlize} would continue drawing the points and printing warnings. In some cases, draw something out of the plotting region is useful, such as draw some legend or text. Set this value to \code{FALSE} to turn off the warnings. } \item{\code{circle.margin}}{Margin in the horizontal and vertical direction. The value should be a positive numeric vector and the length of it should be either 1, 2, or 4. When it has length of 1, it controls the margin on the four sides of the circle. When it has length of 2, the first value controls the margin on the left and right, and the second value controls the margin on the bottom and top side. When it has length of 4, the four values controls the margins on the left, right, bottom and top sides of the circle. So A value of \code{c(x1, x2, y1, y2)} means \code{circos.par(canvas.xlim = c(-(1+x1), 1+x2), canvas.ylim = c(-(1+y1), 1+y2))}. } \item{\code{canvas.xlim}}{The coordinate for the canvas. Because \code{circlize} draws everything (or almost everything) inside the unit circle, the default \code{canvas.xlim} and \code{canvas.ylim} for the canvas would be all \code{c(-1, 1)}. However, you can set it to a more broad interval if you want to draw other things out of the circle. By choosing proper \code{canvas.xlim} and \code{canvas.ylim}, you can draw part of the circle. E.g. setting \code{canvas.xlim} to \code{c(0, 1)} and \code{canvas.ylim} to \code{c(0, 1)} would only draw circle in the region of (0, pi/2). } \item{\code{canvas.ylim}}{The coordinate for the canvas. By default it is \code{c(-1, 1)} } \item{\code{clock.wise}}{The direction for adding sectors. Default is \code{TRUE}. } \item{\code{xaxis.clock.wise}}{The direction in the x-axes for all sectors. Default is \code{TRUE}. } } Similar as \code{\link[graphics]{par}}, you can get the parameter values by specifying the names of parameters and you can set the parameter values by specifying a named list which contains the new values. \code{gap.degree}, \code{start.degree}, \code{canvas.xlim}, \code{canvas.ylim} and \code{clock.wise} only be set before the initialization of the circular layout (i.e. before calling \code{\link{circos.initialize}}) because these values will not be changed after adding sectors on the circle. The left and right padding for \code{cell.padding} will also be ignored after the initialization because all cells in a sector would share the same left and right paddings. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/circular-layout.html#graphic-parameters} } \examples{ circos.par } circlize/man/get.current.chromosome.Rd0000644000176200001440000000061614214333136017535 0ustar liggesusers\name{get.current.chromosome} \alias{get.current.chromosome} \title{ Get current chromosome name } \description{ Get current chromosome name } \usage{ get.current.chromosome() } \details{ The function is same as \code{\link{get.current.sector.index}} and should only be put inside \code{panel.fun} when using \code{\link{circos.genomicTrackPlotRegion}}. } \examples{ # There is no example NULL } circlize/man/circos.trackText.Rd0000644000176200001440000000276114214333136016360 0ustar liggesusers\name{circos.trackText} \alias{circos.trackText} \title{ Draw text in cells among the whole track } \description{ Draw text in cells among the whole track } \usage{ circos.trackText( sectors, x, y, labels, track.index = get.current.track.index(), direction = NULL, facing = c("inside", "outside", "reverse.clockwise", "clockwise", "downward", "bending", "bending.inside", "bending.outside"), niceFacing = FALSE, adj = par("adj"), cex = 1, col = par("col"), font = par("font"), factors = sectors) } \arguments{ \item{sectors}{A \code{\link{factor}} or a character vector which represents the categories of data} \item{factors}{The same as \code{sectors}. It will be removed in future versions. } \item{x}{Data points on x-axis} \item{y}{Data points on y-axis} \item{labels}{Labels} \item{track.index}{Index for the track} \item{direction}{deprecated, use \code{facing} instead.} \item{facing}{Facing of text} \item{niceFacing}{Should the facing of text be adjusted to fit human eyes?} \item{adj}{Adjustment for text} \item{cex}{Font size} \item{col}{Font color} \item{font}{Font style} } \details{ The function adds texts in multiple cells by first splitting data into several parts in which each part corresponds to one factor (sector index) and then add texts in cells by calling \code{\link{circos.text}}. This function can be replaced by a \code{for} loop containing \code{\link{circos.text}}. } \examples{ # There is no example NULL } circlize/man/circos.genomicAxis.Rd0000644000176200001440000000332114214333136016646 0ustar liggesusers\name{circos.genomicAxis} \alias{circos.genomicAxis} \title{ Add genomic axes } \description{ Add genomic axes } \usage{ circos.genomicAxis( h = "top", major.at = NULL, labels = NULL, major.by = NULL, tickLabelsStartFromZero = TRUE, labels.cex = 0.4*par("cex"), sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) } \arguments{ \item{h}{Position of the axes. "top" or "bottom". } \item{major.at}{Major breaks. If \code{major.at} is set, \code{major.by} is ignored. } \item{labels}{labels corresponding to \code{major.at}. If \code{labels} is set, \code{major.at} must be set. } \item{major.by}{Increment of major ticks. It is calculated automatically if the value is not set (about every 10 degrees there is a major tick). } \item{tickLabelsStartFromZero}{Whether axis tick labels start from 0? This will only affect the axis labels while not affect x-values in cells. } \item{labels.cex}{The font size for the axis tick labels. } \item{sector.index}{Index for the sector } \item{track.index}{Index for the track } \item{...}{Other arguments pass to \code{\link{circos.axis}}. } } \details{ It assigns proper tick labels under genomic coordinate. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#genomic-axes} } \examples{ circos.initializeWithIdeogram(chromosome.index = paste0("chr", 1:4), plotType = NULL) circos.track(ylim = c(0, 1), panel.fun = function(x, y) circos.genomicAxis()) circos.track(ylim = c(0, 1), track.height = 0.1) circos.track(track.index = get.current.track.index(), panel.fun = function(x, y) { circos.genomicAxis(h = "bottom", direction = "inside") }) circos.clear() } circlize/man/get.all.track.index.Rd0000644000176200001440000000040714214333136016660 0ustar liggesusers\name{get.all.track.index} \alias{get.all.track.index} \title{ Get index for all tracks } \description{ Get index for all tracks } \usage{ get.all.track.index() } \details{ It simply returns a vector of all track index. } \examples{ # There is no example NULL } circlize/man/cm_h.Rd0000644000176200001440000000046614214333136014034 0ustar liggesusers\name{cm_h} \alias{cm_h} \title{ Convert units } \description{ Convert units } \usage{ cm_h(h) } \arguments{ \item{h}{The height in numeric.} } \details{ See explanations in \code{\link{convert_length}} page. } \author{ Zuguang Gu } \examples{ # see examples in `convert_length` page NULL } circlize/man/circos.genomicHeatmap.Rd0000644000176200001440000000504714214333136017330 0ustar liggesusers\name{circos.genomicHeatmap} \alias{circos.genomicHeatmap} \title{ Add heatmaps for selected regions } \description{ Add heatmaps for selected regions } \usage{ circos.genomicHeatmap( bed, col, na_col = "grey", numeric.column = NULL, border = NA, border_lwd = par("lwd"), border_lty = par("lty"), connection_height = mm_h(5), line_col = par("col"), line_lwd = par("lwd"), line_lty = par("lty"), heatmap_height = 0.15, side = c("inside", "outside"), track.margin = circos.par("track.margin")) } \arguments{ \item{bed}{A data frame in bed format, the matrix should be stored from the fourth column. } \item{col}{Colors for the heatmaps. The value can be a matrix or a color mapping function generated by \code{\link{colorRamp2}}. } \item{na_col}{Color for NA values. } \item{numeric.column}{Column index for the numeric columns. The values can be integer index or character index. By default it takes all numeric columns from the fourth column. } \item{border}{Border of the heatmap grids. } \item{border_lwd}{Line width for borders of heatmap grids. } \item{border_lty}{Line style for borders of heatmap grids. } \item{connection_height}{Height of the connection lines. If it is set to \code{NULL}, no connection will be drawn. Use \code{\link{mm_h}}/\code{\link{cm_h}}/\code{\link{inches_h}} to set a height in absolute unit. } \item{line_col}{Color of the connection lines. The value can be a vector. } \item{line_lwd}{Line width of the connection lines. } \item{line_lty}{Line style of the connection lines. } \item{heatmap_height}{Height of the heatmap track } \item{side}{Side of the heatmaps. Is the heatmap facing inside or outside? } \item{track.margin}{Bottom and top margins. } } \details{ The function visualizes heatmaps which correspond to a subset of regions in the genome. The correspondance between heatmaps and regions are identified by connection lines. The function actually creates two tracks, one track for the connection lines and one track for the heamtaps. The heatmaps always fill the whole track. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#genomic-heatmap} } \examples{ \donttest{ circos.initializeWithIdeogram(plotType = c("labels", "axis")) bed = generateRandomBed(nr = 100, nc = 4) col_fun = colorRamp2(c(-1, 0, 1), c("green", "black", "red")) circos.genomicHeatmap(bed, col_fun, side = "inside", border = "white") circos.genomicHeatmap(bed, col_fun, side = "outside", line_col = as.numeric(factor(bed[[1]]))) } } circlize/man/degree.Rd0000644000176200001440000000040014214333136014345 0ustar liggesusers\name{degree} \alias{degree} \title{ Mark the value as a degree value } \description{ Mark the value as a degree value } \usage{ degree(x) } \arguments{ \item{x}{degree value} } \value{ a \code{degree} object } \examples{ # There is no example NULL } circlize/man/circos.genomicIdeogram.Rd0000644000176200001440000000166614214333136017503 0ustar liggesusers\name{circos.genomicIdeogram} \alias{circos.genomicIdeogram} \title{ Add an ideogram track } \description{ Add an ideogram track } \usage{ circos.genomicIdeogram( cytoband = system.file(package = "circlize", "extdata", "cytoBand.txt"), species = NULL, track.height = mm_h(2), track.margin = circos.par("track.margin")) } \arguments{ \item{cytoband}{A data frame or a file path, pass to \code{\link{read.cytoband}}. } \item{species}{Abbreviations of the genome, pass to \code{\link{read.cytoband}}. } \item{track.height}{Height of the ideogram track. } \item{track.margin}{Margins for the track. } } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#ideograms} } \author{ Zuguang Gu } \examples{ \donttest{ circos.initializeWithIdeogram(plotType = c("labels", "axis")) circos.track(ylim = c(0, 1)) circos.genomicIdeogram() # put ideogram as the third track } } circlize/man/circos.trackHist.Rd0000644000176200001440000000561014214333136016337 0ustar liggesusers\name{circos.trackHist} \alias{circos.trackHist} \title{ Draw histogram in cells among a whole track } \description{ Draw histogram in cells among a whole track } \usage{ circos.trackHist( sectors, x, track.height = circos.par("track.height"), track.index = NULL, ylim = NULL, force.ylim = TRUE, col = ifelse(draw.density, "black", NA), border = "black", lty = par("lty"), lwd = par("lwd"), bg.col = NA, bg.border = "black", bg.lty = par("lty"), bg.lwd = par("lwd"), breaks = "Sturges", include.lowest = TRUE, right = TRUE, draw.density = FALSE, bin.size = NULL, area = FALSE, factors = sectors) } \arguments{ \item{sectors}{A \code{\link{factor}} or a character vector which represents the categories of data} \item{factors}{The same as \code{sectors}. It will be removed in future versions. } \item{x}{Data on the x-axis} \item{track.index}{Index for the track which is going to be updated. Setting it to \code{NULL} means creating the plotting regions in the next newest track.} \item{track.height}{Height of the track. It is the percentage to the radius of the unit circle. If to update a track, this argument is disabled.} \item{ylim}{Ranges on y-direction. By default, \code{ylim} is calculated automatically.} \item{force.ylim}{Whether to force all cells in the track to share the same \code{ylim}.} \item{col}{Filled color for histogram} \item{border}{Border color for histogram} \item{lty}{Line style for histogram} \item{lwd}{Line width for histogram} \item{bg.col}{Background color for the plotting regions} \item{bg.border}{Color for the border of the plotting regions} \item{bg.lty}{Line style for the border of the plotting regions} \item{bg.lwd}{Line width for the border of the plotting regions} \item{breaks}{see \code{\link[graphics]{hist}}} \item{include.lowest}{see \code{\link[graphics]{hist}}} \item{right}{see \code{\link[graphics]{hist}}} \item{draw.density}{whether draw density lines instead of histogram bars.} \item{area}{whether to fill the area below the density lines. If it is set to \code{TRUE}, \code{col} controls the filled color in the area and \code{border} controls color of the line.} \item{bin.size}{size of the bins of the histogram} } \details{ It draw histogram in cells among a whole track. It is also an example to show how to add self-defined high-level graphics by this package. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/high-level-plots.html#histograms} } \examples{ \donttest{ x = rnorm(1600) sectors = sample(letters[1:16], 1600, replace = TRUE) circos.initialize(sectors, x = x) circos.trackHist(sectors, x = x, col = "#999999", border = "#999999") circos.trackHist(sectors, x = x, bin.size = 0.1, col = "#999999", border = "#999999") circos.trackHist(sectors, x = x, draw.density = TRUE, col = "#999999", border = "#999999") circos.clear() } } circlize/man/uy.Rd0000644000176200001440000000056114214333136013557 0ustar liggesusers\name{uy} \alias{uy} \title{ Convert unit on y direction in data coordinate } \description{ Convert unit on y direction in data coordinate } \usage{ uy(...) } \arguments{ \item{...}{pass to \code{\link{convert_y}}.} } \details{ Please do not use this function. Use \code{\link{mm_y}}/\code{\link{cm_y}}/inches_y` instead. } \examples{ # There is no example NULL } circlize/man/circos.genomicText.Rd0000644000176200001440000000604114214333136016670 0ustar liggesusers\name{circos.genomicText} \alias{circos.genomicText} \title{ Draw text in a cell, specifically for genomic graphics } \description{ Draw text in a cell, specifically for genomic graphics } \usage{ circos.genomicText( region, value = NULL, y = NULL, labels = NULL, labels.column = NULL, numeric.column = NULL, sector.index = get.current.sector.index(), track.index = get.current.track.index(), posTransform = NULL, direction = NULL, facing = "inside", niceFacing = FALSE, adj = par("adj"), cex = 1, col = "black", font = par("font"), padding = 0, extend = 0, align_to = "region", ...) } \arguments{ \item{region}{A data frame contains 2 column which correspond to start positions and end positions. } \item{value}{A data frame contains values and other information. } \item{y}{A vector or a single value indicating position of text. } \item{labels}{Labels of text corresponding to each genomic positions. } \item{labels.column}{If labels are in \code{value}, index of column in \code{value}. } \item{numeric.column}{Which column in \code{value} data frame should be taken as y-value. If it is not defined, only the first numeric columns in \code{value} will be taken. } \item{sector.index}{Index of sector. } \item{track.index}{Index of track. } \item{posTransform}{Self-defined function to transform genomic positions, see \code{\link{posTransform.default}} for explanation. } \item{facing}{Passing to \code{\link{circos.text}}. Settings are similar as \code{col}. } \item{niceFacing}{Should the facing of text be adjusted to fit human eyes? } \item{direction}{Deprecated, use \code{facing} instead. } \item{adj}{Pass to \code{\link{circos.text}}. Settings are similar as \code{col}. } \item{cex}{Pass to \code{\link{circos.text}}. Settings are similar as \code{col}. } \item{col}{Pass to \code{\link{circos.text}}. The length of \code{col} can be either one or number of rows of \code{region}. } \item{font}{Pass to \code{\link{circos.text}}. Settings are similar as \code{col}. } \item{padding}{pass to \code{posTransform} if it is set as \code{\link{posTransform.text}}. } \item{extend}{pass to \code{posTransform} if it is set as \code{\link{posTransform.text}}. } \item{align_to}{pass to \code{posTransform} if it is set as \code{\link{posTransform.text}}. } \item{...}{Mysterious parameters. } } \details{ The function is a low-level graphical function and usually is put in \code{panel.fun} when using \code{\link{circos.genomicTrack}}. } \examples{ circos.par("track.height" = 0.1, cell.padding = c(0, 0, 0, 0)) circos.initializeWithIdeogram(plotType = NULL) bed = generateRandomBed(nr = 20) circos.genomicTrack(bed, ylim = c(0, 1), panel.fun = function(region, value, ...) { circos.genomicText(region, value, y = 0.5, labels = "text", ...) }) bed = cbind(bed, sample(letters, nrow(bed), replace = TRUE)) circos.genomicTrack(bed, panel.fun = function(region, value, ...) { circos.genomicText(region, value, labels.column = 2, ...) }) circos.clear() } circlize/man/chordDiagram.Rd0000644000176200001440000001704314214333136015511 0ustar liggesusers\name{chordDiagram} \alias{chordDiagram} \title{ Plot Chord Diagram } \description{ Plot Chord Diagram } \usage{ chordDiagram( x, grid.col = NULL, grid.border = NA, transparency = 0.5, col = NULL, row.col = NULL, column.col = NULL, order = NULL, directional = 0, xmax = NULL, symmetric = FALSE, keep.diagonal = FALSE, direction.type = "diffHeight", diffHeight = mm_h(2), link.target.prop = TRUE, target.prop.height = mm_h(1), reduce = 1e-5, self.link = 2, preAllocateTracks = NULL, annotationTrack = c("name", "grid", "axis"), annotationTrackHeight = mm_h(c(3, 2)), link.border = NA, link.lwd = par("lwd"), link.lty = par("lty"), link.auto = TRUE, link.sort = "default", link.decreasing = TRUE, link.arr.length = ifelse(link.arr.type == "big.arrow", 0.02, 0.4), link.arr.width = link.arr.length/2, link.arr.type = "triangle", link.arr.lty = par("lty"), link.arr.lwd = par("lwd"), link.arr.col = par("col"), link.largest.ontop = FALSE, link.visible = TRUE, link.rank = NULL, link.zindex = NULL, link.overlap = FALSE, scale = FALSE, group = NULL, big.gap = 10, small.gap = 1, ...) } \arguments{ \item{x}{a matrix or a data frame. The function will pass all argument to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} depending on the type of \code{x}, also format of other arguments depends of the type of \code{x}. If it is in the form of a matrix, it should be an adjacency matrix. If it is in the form of a data frame, it should be an adjacency list. } \item{grid.col}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{grid.border}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{transparency}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{col}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{row.col}{pass to \code{\link{chordDiagramFromMatrix}} } \item{column.col}{pass to \code{\link{chordDiagramFromMatrix}} } \item{order}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{directional}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{xmax}{maximum value on x-axes, the value should be a named vector. } \item{symmetric}{pass to \code{\link{chordDiagramFromMatrix}} } \item{keep.diagonal}{pass to \code{\link{chordDiagramFromMatrix}} } \item{direction.type}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{diffHeight}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.target.prop}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{target.prop.height}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{reduce}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{self.link}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{preAllocateTracks}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{annotationTrack}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{annotationTrackHeight}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.border}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.lwd}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.lty}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.auto}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.sort}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.decreasing}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.arr.length}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.arr.width}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.arr.type}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.arr.lty}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.arr.lwd}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.arr.col}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.largest.ontop}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.visible}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{link.rank}{This is argument is removed. } \item{link.zindex}{order to add links to the circle, a large value means to add it later. } \item{link.overlap}{pass to \code{\link{chordDiagramFromMatrix}} or \code{\link{chordDiagramFromDataFrame}} } \item{scale}{scale each sector to same width } \item{group}{It contains the group labels and the sector names are used as the names in the vector. } \item{big.gap}{Gap between the two sets of sectors. If the input is a matrix, the two sets are row sectors and column sectors. If the input is a data frame, the two sets correspond to the first column and the second column. It only works when there is no intersection between the two sets. } \item{small.gap}{Small gap between sectors. } \item{...}{pass to \code{\link{circos.link}}. } } \details{ Chord diagram is a way to visualize numeric tables ( \url{http://circos.ca/intro/tabular_visualization/} ), especially useful when the table represents information of directional relations. This function visualize tables in a circular way. This function is flexible and contains some settings that may be a little difficult to understand. Please refer to vignette for better explanation. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/the-chorddiagram-function.html} } \value{ A data frame which contains positions of links, columns are: \describe{ \item{\code{rn}}{sector name corresponding to rows in the adjacency matrix or the first column in the adjacency list } \item{\code{cn}}{sector name corresponding to columns in the adjacency matrix or the second column in the adjacency list } \item{\code{value}}{value for the interaction or relation } \item{\code{o1}}{order of the link on the "from" sector } \item{\code{o2}}{order of the link on the "to" sector } \item{\code{x1}}{and position of the link on the "from" sector, the interval for the link on the "from" sector is \code{c(x1-abs(value), x1)} } \item{\code{x2}}{and position of the link on the "to" sector, the interval for the link on the "from" sector is \code{c(x2-abs(value), x2)} } } } \examples{ set.seed(999) mat = matrix(sample(18, 18), 3, 6) rownames(mat) = paste0("S", 1:3) colnames(mat) = paste0("E", 1:6) df = data.frame(from = rep(rownames(mat), times = ncol(mat)), to = rep(colnames(mat), each = nrow(mat)), value = as.vector(mat), stringsAsFactors = FALSE) chordDiagram(mat) chordDiagram(df) circos.clear() } circlize/man/circos.genomicInitialize.Rd0000644000176200001440000000554114214333136020051 0ustar liggesusers\name{circos.genomicInitialize} \alias{circos.genomicInitialize} \title{ Initialize circular plot with any genomic data } \description{ Initialize circular plot with any genomic data } \usage{ circos.genomicInitialize( data, sector.names = NULL, major.by = NULL, plotType = c("axis", "labels"), tickLabelsStartFromZero = TRUE, axis.labels.cex = 0.4*par("cex"), labels.cex = 0.8*par("cex"), track.height = NULL, ...) } \arguments{ \item{data}{A data frame in bed format. } \item{sector.names}{Labels for each sectors which will be drawn along each sector. It will not modify values of sector index. } \item{major.by}{Increment of major ticks. It is calculated automatically if the value is not set (about every 10 degrees there is a major tick). } \item{plotType}{If it is not \code{NULL}, there will create a new track containing axis and names for sectors. This argument controls which part should be drawn, \code{axis} for genomic axis and \code{labels} for chromosome names } \item{tickLabelsStartFromZero}{Whether axis tick labels start from 0? This will only affect the axis labels while not affect x-values in cells. } \item{axis.labels.cex}{The font size for the axis tick labels. } \item{labels.cex}{The font size for the labels. } \item{track.height}{If \code{PlotType} is not \code{NULL}, height of the annotation track. } \item{...}{Pass to \code{\link{circos.initialize}} } } \details{ The function will initialize circular plot from genomic data. If \code{plotType} is set with value in \code{axis} or \code{labels}, there will create a new track. The order of sectors related to data structure of \code{data}. If the first column in \code{data} is a factor, the order of sectors is \code{levels(data[[1]])}; If the first column is just a simple vector, the order of sectors is \code{unique(data[[1]]}. For more details on initializing genomic plot, please refer to the vignettes. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/initialize-genomic-plot.html#initialize-with-general-genomic-category} } \examples{ df = read.cytoband()$df circos.genomicInitialize(df) df = data.frame(name = c("TP53", "TP63", "TP73"), start = c(7565097, 189349205, 3569084), end = c(7590856, 189615068, 3652765), stringsAsFactors = FALSE) circos.genomicInitialize(df) circos.clear() circos.genomicInitialize(df, tickLabelsStartFromZero = FALSE) circos.clear() circos.genomicInitialize(df, major.by = 5000) circos.clear() circos.genomicInitialize(df, plotType = "labels") circos.clear() circos.genomicInitialize(df, sector.names = c("tp53", "tp63", "tp73")) circos.clear() circos.genomicInitialize(df, sector.names = c("tp53x", "tp63x", "tp73")) circos.clear() df[[1]] = factor(df[[1]], levels = c("TP73", "TP63", "TP53")) circos.genomicInitialize(df) circos.clear() } circlize/man/circos.genomicRainfall.Rd0000644000176200001440000000413714214333136017500 0ustar liggesusers\name{circos.genomicRainfall} \alias{circos.genomicRainfall} \title{ Genomic rainfall plot } \description{ Genomic rainfall plot } \usage{ circos.genomicRainfall( data, mode = "min", ylim = NULL, col = "black", pch = par("pch"), cex = par("cex"), normalize_to_width = FALSE, ...) } \arguments{ \item{data}{A bed-file-like data frame or a list of data frames. } \item{mode}{How to calculate the distance of two neighbouring regions, pass to \code{\link{rainfallTransform}}. } \item{ylim}{ylim for rainfall plot track. If \code{normalize_to_width} is \code{FALSE}, the value should correspond to \code{log10(dist+1)}, and if \code{normalize_to_width} is \code{TRUE}, the value should correspond to \code{log2(rel_dist)}. } \item{col}{Color of points. It should be length of one. If \code{data} is a list, the length of \code{col} can also be the length of the list. } \item{pch}{Style of points. } \item{cex}{Size of points. } \item{normalize_to_width}{If it is \code{TRUE}, the value is the relative distance divided by the width of the region. } \item{...}{Pass to \code{\link{circos.trackPlotRegion}}. } } \details{ This is high-level graphical function, which mean, it will create a new track. Rainfall plot can be used to visualize distribution of regions. On the plot, y-axis corresponds to the distance to neighbour regions (log-based). So if there is a drop-down on the plot, it means there is a cluster of regions at that area. On the plot, y-axis are log10-transformed. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#genomic-density-and-rainfall-plot} } \examples{ \donttest{ load(system.file(package = "circlize", "extdata", "DMR.RData")) # rainfall circos.initializeWithIdeogram(plotType = c("axis", "labels")) bed_list = list(DMR_hyper, DMR_hypo) circos.genomicRainfall(bed_list, pch = 16, cex = 0.4, col = c("#FF000080", "#0000FF80")) circos.genomicDensity(bed_list[[1]], col = c("#FF000080"), track.height = 0.1) circos.genomicDensity(bed_list[[2]], col = c("#0000FF80"), track.height = 0.1) circos.clear() } } circlize/man/colorRamp2.Rd0000644000176200001440000000271214214333136015142 0ustar liggesusers\name{colorRamp2} \alias{colorRamp2} \title{ Color interpolation } \description{ Color interpolation } \usage{ colorRamp2(breaks, colors, transparency = 0, space = "LAB", hcl_palette = NULL, reverse = FALSE) } \arguments{ \item{breaks}{A vector indicating numeric breaks} \item{colors}{A vector of colors which correspond to values in \code{breaks}} \item{transparency}{A single value in \code{[0, 1]}. 0 refers to no transparency and 1 refers to full transparency} \item{space}{color space in which colors are interpolated. Value should be one of "RGB", "LAB", "XYZ", "sRGB", "LUV", see \code{\link[colorspace]{color-class}} for detail.} \item{hcl_palette}{Name of the HCL palette. Value should be supported in \code{\link[grDevices:palettes]{hcl.pals}}.} \item{reverse}{Whether should the colors in \code{hcl_palette} be reversed.} } \details{ Colors are linearly interpolated according to break values and corresponding colors through CIE Lab color space (\code{\link[colorspace]{LAB}}) by default. Values exceeding breaks will be assigned with corresponding maximum or minimum colors. } \value{ It returns a function which accepts a vector of numeric values and returns interpolated colors. } \seealso{ \code{\link{col2value}} converts back to the original values by providing the color mapping function generated by \code{\link{colorRamp2}}. } \examples{ col_fun = colorRamp2(c(-1, 0, 1), c("green", "white", "red")) col_fun(c(-2, -1, -0.5, 0, 0.5, 1, 2)) } circlize/man/set_track_gap.Rd0000644000176200001440000000071014214333136015724 0ustar liggesusers\name{set_track_gap} \alias{set_track_gap} \title{ Set gaps between tracks } \description{ Set gaps between tracks } \usage{ set_track_gap(gap = 0.02) } \arguments{ \item{gap}{Gap between two tracks. Use \code{\link{mm_h}}/\code{\link{cm_h}}/\code{\link{inches_h}} to set in absolute units.} } \examples{ circos.initialize(letters[1:10], xlim = c(0, 1)) circos.track(ylim = c(0, 1)) set_track_gap(mm_h(2)) circos.track(ylim = c(0, 1)) circos.clear() } circlize/man/circos.update.Rd0000644000176200001440000000056314214333136015667 0ustar liggesusers\name{circos.update} \alias{circos.update} \title{ Create plotting regions for a whole track } \description{ Create plotting regions for a whole track } \usage{ circos.update(...) } \arguments{ \item{...}{pass to \code{\link{circos.updatePlotRegion}}} } \details{ shortcut function of \code{\link{circos.updatePlotRegion}}. } \examples{ # There is no example NULL } circlize/man/circos.polygon.Rd0000644000176200001440000000227514214333136016076 0ustar liggesusers\name{circos.polygon} \alias{circos.polygon} \title{ Draw polygon } \description{ Draw polygon } \usage{ circos.polygon( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) } \arguments{ \item{x}{Data points on x-axis} \item{y}{Data points on y-axis} \item{sector.index}{Index for the sector} \item{track.index}{Index for the track} \item{...}{pass to \code{\link[graphics]{polygon}}} } \details{ similar as \code{\link[graphics]{polygon}}. Note: start point should overlap with the end point. } \examples{ set.seed(123) sectors = letters[1:4] circos.initialize(sectors, xlim = c(0, 1)) circos.trackPlotRegion(ylim = c(-3, 3), track.height = 0.4, panel.fun = function(x, y) { x1 = runif(20) y1 = x1 + rnorm(20) or = order(x1) x1 = x1[or] y1 = y1[or] loess.fit = loess(y1 ~ x1) loess.predict = predict(loess.fit, x1, se = TRUE) d1 = c(x1, rev(x1)) d2 = c(loess.predict$fit + loess.predict$se.fit, rev(loess.predict$fit - loess.predict$se.fit)) circos.polygon(d1, d2, col = "#CCCCCC", border = NA) circos.points(x1, y1, cex = 0.5) circos.lines(x1, loess.predict$fit) }) circos.clear() } circlize/man/show.index.Rd0000644000176200001440000000050614214333136015207 0ustar liggesusers\name{show.index} \alias{show.index} \title{ Label the sector index and the track index on each cell } \description{ Label the sector index and the track index on each cell } \usage{ show.index() } \details{ This function is deprecated, please use \code{\link{circos.info}} instead. } \examples{ # There is no example NULL } circlize/man/genomicDensity.Rd0000644000176200001440000000305114214333136016100 0ustar liggesusers\name{genomicDensity} \alias{genomicDensity} \title{ Calculate genomic region density } \description{ Calculate genomic region density } \usage{ genomicDensity( region, window.size = 1e7, n.window = NULL, overlap = TRUE, count_by = c("percent", "number"), chr.len = NULL) } \arguments{ \item{region}{Genomic positions. It can be a data frame with two columns which are start positions and end positions on a single chromosome. It can also be a bed-format data frame which contains the chromosome column. } \item{window.size}{Window size to calculate genomic density } \item{n.window}{number of windows, if it is specified, \code{window.size} is ignored } \item{overlap}{Whether two neighbouring windows have half overlap } \item{count_by}{How to count the value for each window, \code{percent}: percent of the window covered by the input regions; \code{number}: number of regions that overlap to the window. } \item{chr.len}{the chromosome length. The value should be named vector } } \details{ It calculate the percent of each genomic windows that is covered by the input regions. } \value{ If the input is a two-column data frame, the function returns a data frame with three columns: start position, end position and the overlapping (value depends on the \code{count_by} argument). And if the input is a bed-format data frame, there will be an additionally chromosome name column. } \examples{ bed = generateRandomBed() bed = subset(bed, chr == "chr1") head(genomicDensity(bed)) head(genomicDensity(bed, count_by = "number")) } circlize/man/inch_y.Rd0000644000176200001440000000052214214333136014370 0ustar liggesusers\name{inch_y} \alias{inch_y} \title{ Convert unit on y direction in data coordinate } \description{ Convert unit on y direction in data coordinate } \usage{ inch_y(...) } \arguments{ \item{...}{pass to \code{\link{inches_y}}} } \details{ This function is the same as \code{\link{inches_y}}. } \examples{ # There is no example NULL } circlize/man/circos.trackLines.Rd0000644000176200001440000000377514214333136016514 0ustar liggesusers\name{circos.trackLines} \alias{circos.trackLines} \title{ Add lines to the plotting regions in a same track } \description{ Add lines to the plotting regions in a same track } \usage{ circos.trackLines( sectors, x, y, track.index = get.current.track.index(), col = par("col"), lwd = par("lwd"), lty = par("lty"), type = "l", straight = FALSE, area = FALSE, area.baseline = NULL, border = "black", baseline = "bottom", pt.col = par("col"), cex = par("cex"), pch = par("pch"), factors = sectors) } \arguments{ \item{sectors}{A \code{\link{factor}} or a character vector which represents the categories of data.} \item{factors}{The same as \code{sectors}. It will be removed in future versions. } \item{x}{Data points on x-axis.} \item{y}{Data points on y-axis.} \item{track.index}{Index for the track.} \item{col}{Line color.} \item{lwd}{Line width.} \item{lty}{Line style.} \item{type}{Line type, similar as \code{type} argument in \code{\link[graphics]{lines}}, but only in \code{c("l", "o", "h", "s")}.} \item{straight}{Whether draw straight lines between points.} \item{area}{Whether to fill the area below the lines. If it is set to \code{TRUE}, \code{col} controls the filled color in the area and \code{border} controls the color of the line.} \item{area.baseline}{Deprecated, use \code{baseline} instead.} \item{baseline}{The base line to draw area, pass to \code{\link{circos.lines}}.} \item{border}{Color for border of the area.} \item{pt.col}{If \code{type} is "o", points color.} \item{cex}{If \code{type} is "o", points size.} \item{pch}{If \code{type} is "o", points type.} } \details{ The function adds lines in multiple cells by first splitting data into several parts in which each part corresponds to one factor (sector index) and then add lines in cells by calling \code{\link{circos.lines}}. This function can be replaced by a \code{for} loop containing \code{\link{circos.lines}}. } \examples{ # There is no example NULL } circlize/man/smartAlign.Rd0000644000176200001440000000062014214333136015217 0ustar liggesusers\name{smartAlign} \alias{smartAlign} \title{ Adjust positions of text } \description{ Adjust positions of text } \usage{ smartAlign(x1, x2, xlim) } \arguments{ \item{x1}{Position which corresponds to the top of the text. } \item{x2}{Position which corresponds to the bottom of the text. } \item{xlim}{Ranges on x-axis. } } \details{ used internally } \examples{ # There is no example NULL } circlize/man/get.cell.meta.data.Rd0000644000176200001440000000471514214333136016461 0ustar liggesusers\name{get.cell.meta.data} \alias{get.cell.meta.data} \title{ Get the meta data of a cell } \description{ Get the meta data of a cell } \usage{ get.cell.meta.data(name, sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{name}{Only support one name at a time, see "details" section } \item{sector.index}{Index of the sector } \item{track.index}{Index of the track } } \details{ The following meta information for a cell can be obtained: \describe{ \item{\code{sector.index}}{The name (index) for the sector } \item{\code{sector.numeric.index}}{Numeric index for the sector } \item{\code{track.index}}{Numeric index for the track } \item{\code{xlim}}{Minimal and maximal values on the x-axis } \item{\code{ylim}}{Minimal and maximal values on the y-axis } \item{\code{xrange}}{Range of \code{xlim}. It equals to \code{xlim[2] - xlim[1]} } \item{\code{yrange}}{Range of \code{ylim} } \item{\code{xcenter}}{Center of x-axis. It equals to \code{(xlim[2] + xlim[1])/2} } \item{\code{ycenter}}{Center of y-axis } \item{\code{cell.xlim}}{Minimal and maximal values on the x-axis extended by cell paddings } \item{\code{cell.ylim}}{Minimal and maximal values on the y-axis extended by cell paddings } \item{\code{xplot}}{Degrees for right and left borders of the cell. The values ignore the direction of the circular layout (i.e. whether it is clock wise or not). } \item{\code{yplot}}{Radius for top and bottom borders of the cell. } \item{\code{cell.width}}{Width of the cell, in degrees. } \item{\code{cell.height}}{Height of the cell, simply \code{yplot[2] - yplot[1]} } \item{\code{cell.start.degree}}{Same as \code{xplot[1]} } \item{\code{cell.end.degree}}{Same as \code{xplot[2]} } \item{\code{cell.bottom.radius}}{Same as \code{yplot[1]} } \item{\code{cell.top.radius}}{Same as \code{yplot[2]} } \item{\code{track.margin}}{Margin for the cell } \item{\code{cell.padding}}{Padding for the cell } } The function is useful when using \code{panel.fun} in \code{\link{circos.track}} to get detailed information of the current cell. } \seealso{ \code{\link{CELL_META}} is a short version of \code{\link{get.cell.meta.data}}. } \examples{ sectors = letters[1:4] circos.initialize(sectors, xlim = c(0, 1)) circos.trackPlotRegion(ylim = c(0, 1), panel.fun = function(x, y) { print(get.cell.meta.data("xlim")) }) print(get.cell.meta.data("xlim", sector.index = "a", track.index = 1)) circos.clear() } circlize/man/cm_x.Rd0000644000176200001440000000111114214333136014040 0ustar liggesusers\name{cm_x} \alias{cm_x} \title{ Convert unit on x direction in data coordinate } \description{ Convert unit on x direction in data coordinate } \usage{ cm_x(x, sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) } \arguments{ \item{x}{The x-value in numeric.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} \item{...}{Pass to \code{\link{convert_x}}.} } \details{ See explanations in \code{\link{convert_x}} page. } \author{ Zuguang Gu } \examples{ # see examples in `convert_x` page NULL } circlize/man/circos.genomicPosTransformLines.Rd0000644000176200001440000000355014214333136021376 0ustar liggesusers\name{circos.genomicPosTransformLines} \alias{circos.genomicPosTransformLines} \title{ Add genomic position transformation lines between tracks } \description{ Add genomic position transformation lines between tracks } \usage{ circos.genomicPosTransformLines( data, track.height = 0.1, posTransform = NULL, horizontalLine = c("none", "top", "bottom", "both"), track.margin = c(0, 0), direction = c("inside", "outside"), col = "black", lwd = par("lwd"), lty = par("lty"), ...) } \arguments{ \item{data}{A data frame containing genomic data. } \item{track.height}{Height of the track. } \item{posTransform}{Genomic position transformation function, see \code{\link{posTransform.default}} for an example. } \item{horizontalLine}{Whether to draw horizontal lines which indicate region width . } \item{track.margin}{Margin of tracks. } \item{direction}{Type of the transformation. \code{inside} means position transformed track are located inside and \code{outside} means position transformed track are located outside. } \item{col}{Color of lines, can be length of one or nrow of \code{data}. } \item{lwd}{Width of lines. } \item{lty}{Style of lines. } \item{...}{Pass to \code{\link{circos.trackPlotRegion}}. } } \details{ There is one representative situation when such position transformation needs to be applied. For example, there are two sets of regions in a chromosome in which regions in one set regions are quite densely to each other and regions in other set are far from others. Heatmap or text is going to be drawn on the next track. If there is no position transformation, heatmap or text for those dense regions would be overlapped and hard to identify, also ugly to visualize. Thus, a way to transform original positions to new positions would help for the visualization. } \examples{ # There is no example NULL } circlize/man/circos.lines.Rd0000644000176200001440000000737514214333136015527 0ustar liggesusers\name{circos.lines} \alias{circos.lines} \title{ Add lines to the plotting region } \description{ Add lines to the plotting region } \usage{ circos.lines( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index(), col = ifelse(area, "grey", par("col")), lwd = par("lwd"), lty = par("lty"), type = "l", straight = FALSE, area = FALSE, area.baseline = NULL, border = "black", baseline = "bottom", pt.col = par("col"), cex = par("cex"), pch = par("pch")) } \arguments{ \item{x}{Data points on x-axis, measured in "current" data coordinate.} \item{y}{Data points on y-axis, measured in "current" data coordinate.} \item{sector.index}{Index for the sector.} \item{track.index}{Index for the track.} \item{col}{Line color.} \item{lwd}{Line width.} \item{lty}{Line style.} \item{type}{Line type, similar as \code{type} argument in \code{\link[graphics]{lines}}, but only in \code{c("l", "o", "h", "s")}} \item{straight}{Whether draw straight lines between points.} \item{area}{Whether to fill the area below the lines. If it is set to \code{TRUE}, \code{col} controls the filled color in the area and \code{border} controls color of the line.} \item{area.baseline}{deprecated, use \code{baseline} instead.} \item{baseline}{The base line to draw areas. By default it is the minimal of y-range (bottom). It can be a string or a number. If a string, it should be one of \code{bottom} and \code{top}. This argument also works if \code{type} is set to \code{h}.} \item{border}{color for border of the area.} \item{pt.col}{If \code{type} is "o", point color.} \item{cex}{If \code{type} is "o", point size.} \item{pch}{If \code{type} is "o", point type.} } \details{ Normally, straight lines in the Cartesian coordinate have to be transformed into curves in the circular layout. But if you do not want to do such transformation you can use this function just drawing straight lines between points by setting \code{straight} to \code{TRUE}. Drawing areas below lines can help to identify the direction of y-axis in cells (since it is a circle). This can be done by specifying \code{area} to \code{TURE}. } \examples{ sectors = letters[1:9] circos.par(points.overflow.warning = FALSE) circos.initialize(sectors, xlim = c(0, 10)) circos.trackPlotRegion(sectors, ylim = c(0, 10), track.height = 0.5) circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "a") circos.text(5, 9, "type = 'l'", sector.index = "a", facing = "outside") circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "b", type = "o") circos.text(5, 9, "type = 'o'", sector.index = "b", facing = "outside") circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "c", type = "h") circos.text(5, 9, "type = 'h'", sector.index = "c", facing = "outside") circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "d", type = "h", baseline = 5) circos.text(5, 9, "type = 'h', baseline = 5", sector.index = "d", facing = "outside") circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "e", type = "s") circos.text(5, 9, "type = 's'", sector.index = "e", facing = "outside") circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "f", area = TRUE) circos.text(5, 9, "type = 'l', area = TRUE", sector.index = "f") circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "g", type = "o", area = TRUE) circos.text(5, 9, "type = 'o', area = TRUE", sector.index = "g") circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "h", type = "s", area = TRUE) circos.text(5, 9, "type = 's', area = TRUE", sector.index = "h") circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "i", area = TRUE, baseline = "top") circos.text(5, 9, "type = 'l', area = TRUE, baseline = 'top'", sector.index = "i") circos.clear() } circlize/man/circos.yaxis.Rd0000644000176200001440000000370614214333136015544 0ustar liggesusers\name{circos.yaxis} \alias{circos.yaxis} \title{ Draw y-axis } \description{ Draw y-axis } \usage{ circos.yaxis( side = c("left", "right"), at = NULL, labels = TRUE, tick = TRUE, sector.index = get.current.sector.index(), track.index = get.current.track.index(), labels.font = par("font"), labels.cex = par("cex"), labels.niceFacing = TRUE, tick.length = convert_x(1, "mm", sector.index, track.index), lwd = par("lwd"), col = par("col"), labels.col = par("col")) } \arguments{ \item{side}{add the y-axis on the left or right of the cell} \item{at}{If it is numeric vector, it identifies the positions of the ticks. It can exceed \code{ylim} value and the exceeding part would be trimmed automatically.} \item{labels}{labels of the ticks. The exceeding part would be trimmed automatically. The value can also be logical (either an atomic value or a vector) which represents which labels to show.} \item{tick}{Whether to draw ticks.} \item{sector.index}{Index for the sector} \item{track.index}{Index for the track} \item{labels.font}{font style for the axis labels} \item{labels.cex}{font size for the axis labels} \item{labels.niceFacing}{Should facing of axis labels be human-easy} \item{tick.length}{length of the tick} \item{lwd}{line width for ticks} \item{col}{color for the axes} \item{labels.col}{color for the labels} } \details{ Note, you need to set the gap between sectors manually by \code{\link{circos.par}} to make sure there is enough space for y-axis. } \examples{ op = par(no.readonly = TRUE) sectors = letters[1:8] circos.par(points.overflow.warning = FALSE) circos.par(gap.degree = 8) circos.initialize(sectors, xlim = c(0, 10)) circos.trackPlotRegion(sectors, ylim = c(0, 10), track.height = 0.5) par(cex = 0.8) for(a in letters[2:4]) { circos.yaxis(side = "left", sector.index = a) } for(a in letters[5:7]) { circos.yaxis(side = "right", sector.index = a) } circos.clear() par(op) } circlize/man/get.all.sector.index.Rd0000644000176200001440000000041514214333136017052 0ustar liggesusers\name{get.all.sector.index} \alias{get.all.sector.index} \title{ Get index for all sectors } \description{ Get index for all sectors } \usage{ get.all.sector.index() } \details{ It simply returns a vector of all sector index. } \examples{ # There is no example NULL } circlize/man/get.current.track.index.Rd0000644000176200001440000000043014214333136017566 0ustar liggesusers\name{get.current.track.index} \alias{get.current.track.index} \title{ Get current track index } \description{ Get current track index } \usage{ get.current.track.index() } \value{ Simply returns the numeric index for the current track. } \examples{ # There is no example NULL } circlize/man/names.CELL_META.Rd0000644000176200001440000000043614214333136015552 0ustar liggesusers\name{names.CELL_META} \alias{names.CELL_META} \title{ Names of all meta data in the current cell } \description{ Names of all meta data in the current cell } \usage{ \method{names}{CELL_META}(x) } \arguments{ \item{x}{use \code{\link{CELL_META}}. } } \examples{ names(CELL_META) } circlize/man/fontsize.Rd0000644000176200001440000000033114214333136014756 0ustar liggesusers\name{fontsize} \alias{fontsize} \title{ Convert fontsize to cex } \description{ Convert fontsize to cex } \usage{ fontsize(x) } \arguments{ \item{x}{value for fontsize} } \examples{ # There is no example NULL } circlize/man/CELL_META.Rd0000644000176200001440000000124714214333136014451 0ustar liggesusers\name{CELL_META} \docType{data} \alias{CELL_META} \title{ Easy way to get meta data in the current cell } \description{ Easy way to get meta data in the current cell } \usage{ CELL_META } \details{ The variable \code{\link{CELL_META}} can only be used to get meta data of the "current" cell. Basically you can simply replace e.g. \code{get.cell.meta.data("sector.index")} to \code{CELL_META$sector.index}. } \seealso{ \code{\link{get.cell.meta.data}} } \examples{ pdf(NULL) circos.initialize("a", xlim = c(0, 1)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { print(CELL_META$sector.index) print(CELL_META$xlim) }) print(names(CELL_META)) dev.off() } circlize/man/inches_y.Rd0000644000176200001440000000104114214333136014715 0ustar liggesusers\name{inches_y} \alias{inches_y} \title{ Convert unit on y direction in data coordinate } \description{ Convert unit on y direction in data coordinate } \usage{ inches_y(y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{y}{The y-value in numeric.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} } \details{ See explanations in \code{\link{convert_y}} page. } \author{ Zuguang Gu } \examples{ # see examples in `convert_y` page NULL } circlize/man/getI.Rd0000644000176200001440000000131414214333136014007 0ustar liggesusers\name{getI} \alias{getI} \title{ Which data that \code{panel.fun} is using } \description{ Which data that \code{panel.fun} is using } \usage{ getI(...) } \arguments{ \item{...}{Invisible arguments that users do not need to care } } \details{ The function should only be put inside \code{panel.fun} when using \code{\link{circos.genomicTrackPlotRegion}}. If \code{stack} is set to \code{TRUE} in \code{\link{circos.genomicTrackPlotRegion}}, the returned value indicates which stack the function will be applied to. If \code{data} is a list of data frames, the value indicates which data frame is being used. Please see the vignette to get a more clear explanation. } \examples{ # There is no example NULL } circlize/man/circos.genomicDensity.Rd0000644000176200001440000000604114214333136017363 0ustar liggesusers\name{circos.genomicDensity} \alias{circos.genomicDensity} \title{ Calculate and add genomic density track } \description{ Calculate and add genomic density track } \usage{ circos.genomicDensity( data, ylim.force = FALSE, window.size = NULL, overlap = TRUE, count_by = c("percent", "number"), col = ifelse(area, "grey", "black"), lwd = par("lwd"), lty = par("lty"), type = "l", area = TRUE, area.baseline = NULL, baseline = 0, border = NA, ...) } \arguments{ \item{data}{A bed-file-like data frame or a list of data frames. If the input is a list of data frames. there will be multiple density plot in one same track. } \item{ylim.force}{Whether to force upper bound of \code{ylim} to be 1. Ignored if \code{count_by} is set to \code{number}. } \item{window.size}{Pass to \code{\link{genomicDensity}}. } \item{overlap}{Pass to \code{\link{genomicDensity}}. } \item{count_by}{Pass to \code{\link{genomicDensity}}. } \item{col}{Colors. It should be length of one. If \code{data} is a list of data frames, the length of \code{col} can also be the length of the list. If multiple sets of genomic regions are visualized in one single track, you should set the colors with transparency to distinguish them. } \item{lwd}{Width of lines, the same setting as \code{col} argument. } \item{lty}{Style of lines, the same setting as \code{col} argument. } \item{type}{Type of lines, see \code{\link{circos.lines}}. } \item{area}{See \code{\link{circos.lines}}. } \item{area.baseline}{Deprecated, use \code{baseline} instead. } \item{baseline}{See \code{\link{circos.lines}}. } \item{border}{See \code{\link{circos.lines}}. } \item{...}{Pass to \code{\link{circos.trackPlotRegion}}. } } \details{ This function is a high-level graphical function, and it will create a new track. If you have multiple sets of genomic regions, you should make sure the density ranges for all sets are similar, or I suggest you should put them into different tracks. One example can be found in the "Examples" Section where the density range for \code{bed_list[[2]]} is too high compared to the range for \code{bed_list[[1]]}, thus, it is better to put the two sets of regions into two separate tracks. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#genomic-density-and-rainfall-plot} } \examples{ load(system.file(package = "circlize", "extdata", "DMR.RData")) # rainfall \donttest{ circos.initializeWithIdeogram(plotType = c("axis", "labels")) bed_list = list(DMR_hyper, DMR_hypo) circos.genomicRainfall(bed_list, pch = 16, cex = 0.4, col = c("#FF000080", "#0000FF80")) circos.genomicDensity(bed_list[[1]], col = c("#FF000080"), track.height = 0.1) circos.genomicDensity(bed_list[[2]], col = c("#0000FF80"), track.height = 0.1) circos.clear() ############ draw the two densities in one track ############# circos.initializeWithIdeogram(plotType = c("axis", "labels")) circos.genomicDensity(bed_list, col = c("#FF000080", "#0000FF80"), track.height = 0.2) circos.clear() } } circlize/man/mm_x.Rd0000644000176200001440000000111114214333136014052 0ustar liggesusers\name{mm_x} \alias{mm_x} \title{ Convert unit on x direction in data coordinate } \description{ Convert unit on x direction in data coordinate } \usage{ mm_x(x, sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) } \arguments{ \item{x}{The x-value in numeric.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} \item{...}{Pass to \code{\link{convert_x}}.} } \details{ See explanations in \code{\link{convert_x}} page. } \author{ Zuguang Gu } \examples{ # see examples in `convert_x` page NULL } circlize/man/circos.genomicTrackPlotRegion.Rd0000644000176200001440000001313014214333136021010 0ustar liggesusers\name{circos.genomicTrackPlotRegion} \alias{circos.genomicTrackPlotRegion} \title{ Create a track for genomic graphics } \description{ Create a track for genomic graphics } \usage{ circos.genomicTrackPlotRegion( data = NULL, ylim = NULL, stack = FALSE, numeric.column = NULL, jitter = 0, panel.fun = function(region, value, ...) {NULL}, ...) } \arguments{ \item{data}{A bed-file-like data frame or a list of data frames } \item{ylim}{If it is \code{NULL}, the value will be calculated from data. If \code{stack} is set to \code{TRUE}, this value is ignored. } \item{stack}{whether to plot in a "stack" mode. } \item{numeric.column}{Columns of numeric values in \code{data} that will be used for plotting. If \code{data} is a data frame list, \code{numeric.column} should be either length of one or length of \code{data}. If value of \code{numeric.column} is not set, its value will depend on the structure of \code{data}. If \code{data} is a data frame, the default value for \code{numeric.column} is all the numeric column starting from the fourth column. If \code{data} is a list of data frame, the default value for \code{numeric.column} is a vector which have the same length as \code{data} and the value in default \code{numeric.column} is the index of the first numeric column in corresponding data frame. } \item{jitter}{Numeric. Only works for adding points in \code{circos.genomicTrackPlotRegion} under \code{stack} mode } \item{panel.fun}{Self-defined function which will be applied on each sector. Please not it is different from that in \code{\link{circos.trackPlotRegion}}. In this function, there are two arguments (\code{region} and \code{value}) plus \code{...}. In them, \code{region} is a two-column data frame with start positions and end positions in current genomic category (e.g. chromosome). \code{value} is a data frame which is derived from \code{data} but excluding the first three columns. Rows in \code{value} correspond to rows in \code{region}. \code{...} is mandatory and is used to pass internal parameters to other functions. The definition of \code{value} will be different according to different input data (data frame or list of data frame) and different settings (stacked or not), please refer to 'details' section and vignettes to detailed explanation. } \item{...}{Pass to \code{\link{circos.trackPlotRegion}}. } } \details{ Similar as \code{\link{circos.trackPlotRegion}}, users can add customized graphics by \code{panel.fun}, but the behaviour of \code{panel.fun} will change depending on users' input data and \code{stack} setting. When \code{data} is a single data frame, \code{region} in \code{panel.fun} is a data frame containing the second and third column in \code{data} in 'current` genomic category (e.g. current chromosome). \code{value} is also a data frame containing columns in \code{data} excluding the first three columns. When \code{data} is a list containing data frames, \code{panel.fun} will be applied iteratively on each data frame, thus, \code{region} is extracted from the data frame which is in the current iteration. For example, if \code{data} contains two data frames, \code{panel.fun} will be applied with the first data frame in current chromosome and then applied with the second data frame in the same chromosome. If \code{stack} is set to \code{TRUE}, \code{ylim} will be re-defined. in \code{stack} mode, the y-axis will be splitted into several part with equal height and graphics will be drawn on each 'horizontal' lines (y = 1, 2, ...). In this case: When \code{data} is a single data frame containing one or more numeric columns, each numeric column defined in \code{numeric.column} will be treated as a single unit. \code{ylim} is re-defined to \code{c(0.5, n+0.5)} in which \code{n} is number of numeric columns. \code{panel.fun} will be applied iteratively on each numeric column. In each iteration, in \code{panel.fun}, \code{region} is still the genomic regions in current genomic category, but \code{value} contains current numeric column plus all non-numeric columns. Under \code{stack} mode, in \code{panel.fun}, all low-level genomic graphical functions will draw on the 'horizontal line' \code{y = i} in which \code{i} is the index of current numeric column and the value of \code{i} can be obtained by \code{\link{getI}}. When \code{data} is a list containing data frames, each data frame will be treated as a single unit. The situation is quite similar as described in previous paragraph. \code{ylim} is re-defined to \code{c(0.5, n+0.5)} in which \code{n} is number of data frames. \code{panel.fun} will be applied iteratively on each data frame. In each iteration, in \code{panel.fun}, \code{region} is still the genomic regions in current genomic category, and \code{value} contains columns in current data frame excluding the first three columns. Under \code{stack} mode, in \code{panel.fun}, all low-level genomic graphical functions will draw on the 'horizontal line' \code{y = i} in which \code{i} is the index of current data frame. Being different from \code{panel.fun} in \code{\link{circos.trackPlotRegion}}, there should be an additional argument \code{...} in \code{panel.fun}. This additional argument is used to pass hidden values to low-level graphical functions. So if you are using functions like \code{circos.genomicPoints}, you should also add \code{...} as an additional argument into \code{circos.genomicPoints}. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/genomic-plotting-region.html} and \url{https://jokergoo.github.io/circlize_book/book/modes-of-input.html} } \examples{ # There is no example NULL } circlize/man/convert_y.Rd0000644000176200001440000000175114214333136015134 0ustar liggesusers\name{convert_y} \alias{convert_y} \title{ Convert unit on y direction in data coordinate } \description{ Convert unit on y direction in data coordinate } \usage{ convert_y( x, unit = c("mm", "cm", "inches"), sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{x}{a numeric vector} \item{unit}{supported units, only "mm", "cm", "inches"} \item{sector.index}{index for the sector where the conversion is applied} \item{track.index}{index for the track where the conversion is applied} } \value{ A vector of numeric values which are measured in the specified data coordinate } \seealso{ For pre-defined units, users can use \code{\link{cm_y}}, \code{\link{mm_y}} and \code{\link{inches_y}}. \code{\link{convert_x}} converts on x direction. \url{https://jokergoo.github.io/circlize_book/book/circular-layout.html#convert-functions} } \author{ Zuguang Gu } \examples{ # see example on `convert_x` page NULL } circlize/man/col2value.Rd0000644000176200001440000000246014214333136015016 0ustar liggesusers\name{col2value} \alias{col2value} \title{ Transform back from colors to values } \description{ Transform back from colors to values } \usage{ col2value(r, g, b, col_fun) } \arguments{ \item{r}{red channel in \code{\link[colorspace]{sRGB}} color space, value should be between 0 and 1. The \code{r}, \code{g} and \code{b} argumentc can be wrapped into one variable which is either a three-column matrix or a vector of colors.} \item{g}{green channel in \code{\link[colorspace]{sRGB}} color space, value should be between 0 and 1.} \item{b}{blue channel in \code{\link[colorspace]{sRGB}} color space, value should be between 0 and 1.} \item{col_fun}{the color mapping function generated by \code{\link{colorRamp2}}.} } \details{ \code{\link{colorRamp2}} transforms values to colors and this function does the reversed job. Note for some color spaces, it cannot transform back to the original value perfectly. } \value{ A vector of original numeric values. } \author{ Zuguang Gu } \examples{ x = seq(0, 1, length.out = 11) col_fun = colorRamp2(c(0, 0.5, 1), c("blue", "white", "red")) col = col_fun(x) col2value(col, col_fun = col_fun) col2value("red", col_fun = col_fun) col_fun = colorRamp2(c(0, 0.5, 1), c("blue", "white", "red"), space = "sRGB") col = col_fun(x) col2value(col, col_fun = col_fun) } circlize/man/circos.genomicLink.Rd0000644000176200001440000000337314214333136016646 0ustar liggesusers\name{circos.genomicLink} \alias{circos.genomicLink} \title{ Add links from two sets of genomic positions } \description{ Add links from two sets of genomic positions } \usage{ circos.genomicLink( region1, region2, rou = get_most_inside_radius(), rou1 = rou, rou2 = rou, col = "black", lwd = par("lwd"), lty = par("lty"), border = col, ...) } \arguments{ \item{region1}{A data frame in bed format. } \item{region2}{A data frame in bed format. } \item{rou}{Pass to \code{\link{circos.link}}. } \item{rou1}{Pass to \code{\link{circos.link}}. } \item{rou2}{Pass to \code{\link{circos.link}}. } \item{col}{Pass to \code{\link{circos.link}}, length can be either one or nrow of \code{region1}. } \item{lwd}{Pass to \code{\link{circos.link}}, length can be either one or nrow of \code{region1}. } \item{lty}{Pass to \code{\link{circos.link}}, length can be either one or nrow of \code{region1}. } \item{border}{Pass to \code{\link{circos.link}}, length can be either one or nrow of \code{region1}. } \item{...}{Pass to \code{\link{circos.link}}. } } \details{ Of course, number of rows should be same in \code{region1} and \code{region2}. If you want to have more controls on links, please use \code{\link{circos.link}} directly. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/genomic-plotting-region.html#genomic-links} } \examples{ \donttest{ set.seed(123) bed1 = generateRandomBed(nr = 100) bed1 = bed1[sample(nrow(bed1), 20), ] bed2 = generateRandomBed(nr = 100) bed2 = bed2[sample(nrow(bed2), 20), ] circos.par("track.height" = 0.1, cell.padding = c(0, 0, 0, 0)) circos.initializeWithIdeogram() circos.genomicLink(bed1, bed2, col = sample(1:5, 20, replace = TRUE), border = NA) circos.clear() } } circlize/man/ux.Rd0000644000176200001440000000056114214333136013556 0ustar liggesusers\name{ux} \alias{ux} \title{ Convert unit on x direction in data coordinate } \description{ Convert unit on x direction in data coordinate } \usage{ ux(...) } \arguments{ \item{...}{pass to \code{\link{convert_x}}.} } \details{ Please do not use this function. Use \code{\link{mm_x}}/\code{\link{cm_x}}/inches_x` instead. } \examples{ # There is no example NULL } circlize/man/circos.dendrogram.Rd0000644000176200001440000000444114214333136016526 0ustar liggesusers\name{circos.dendrogram} \alias{circos.dendrogram} \title{ Add circular dendrograms } \description{ Add circular dendrograms } \usage{ circos.dendrogram( dend, facing = c("outside", "inside"), max_height = NULL, use_x_attr = FALSE, sector.index = get.current.sector.index(), track.index = get.current.track.index()) } \arguments{ \item{dend}{A \code{\link[stats]{dendrogram}} object.} \item{facing}{Is the dendromgrams facing inside to the circle or outside?} \item{max_height}{Maximum height of the dendrogram. This is important if more than one dendrograms are drawn in one track and making them comparable. The height of a dendrogram can be obtained by \code{attr(dend, "height")}.} \item{use_x_attr}{Whether use the \code{x} attribute to determine node positions in the dendrogram, used internally.} \item{sector.index}{Index of sector.} \item{track.index}{Index of track.} } \details{ Assuming there are \code{n} nodes in the dendrogram, the positions for leaves on x-axis are always \code{0.5, 1.5, ..., n - 0.5}. So you must be careful with \code{xlim} when you initialize the cirular layout. You can use the \code{dendextend} package to render the dendrograms. } \seealso{ \url{https://jokergoo.github.io/circlize_book/book/high-level-plots.html#phylogenetic-trees} } \examples{ load(system.file(package = "circlize", "extdata", "bird.orders.RData")) labels = hc$labels # name of birds ct = cutree(hc, 6) # cut tree into 6 pieces n = length(labels) # number of bird species dend = as.dendrogram(hc) circos.par(cell.padding = c(0, 0, 0, 0)) circos.initialize(sectors = "a", xlim = c(0, n)) # only one sector max_height = attr(dend, "height") # maximum height of the trees circos.trackPlotRegion(ylim = c(0, 1), bg.border = NA, track.height = 0.3, panel.fun = function(x, y) { for(i in seq_len(n)) { circos.text(i-0.5, 0, labels[i], adj = c(0, 0.5), facing = "clockwise", niceFacing = TRUE, col = ct[labels[i]], cex = 0.7) } }) suppressPackageStartupMessages(require(dendextend)) dend = color_branches(dend, k = 6, col = 1:6) circos.trackPlotRegion(ylim = c(0, max_height), bg.border = NA, track.height = 0.4, panel.fun = function(x, y) { circos.dendrogram(dend, max_height = max_height) }) circos.clear() } circlize/DESCRIPTION0000755000176200001440000000317214236536475013611 0ustar liggesusersPackage: circlize Type: Package Title: Circular Visualization Version: 0.4.15 Date: 2022-05-10 Authors@R: person("Zuguang", "Gu", email = "z.gu@dkfz.de", role = c("aut", "cre"), comment = c('ORCID'="0000-0002-7395-8709")) Depends: R (>= 3.0.0), graphics Imports: GlobalOptions (>= 0.1.2), shape, grDevices, utils, stats, colorspace, methods, grid Suggests: knitr, dendextend (>= 1.0.1), ComplexHeatmap (>= 2.0.0), gridBase, png, markdown, bezier, covr, rmarkdown VignetteBuilder: knitr Description: Circular layout is an efficient way for the visualization of huge amounts of information. Here this package provides an implementation of circular layout generation in R as well as an enhancement of available software. The flexibility of the package is based on the usage of low-level graphics functions such that self-defined high-level graphics can be easily implemented by users for specific purposes. Together with the seamless connection between the powerful computational and visual environment in R, it gives users more convenience and freedom to design figures for better understanding complex patterns behind multiple dimensional data. The package is described in Gu et al. 2014 . URL: https://github.com/jokergoo/circlize, https://jokergoo.github.io/circlize_book/book/ License: MIT + file LICENSE NeedsCompilation: no Packaged: 2022-05-10 18:38:19 UTC; guz Author: Zuguang Gu [aut, cre] () Maintainer: Zuguang Gu Repository: CRAN Date/Publication: 2022-05-10 19:30:05 UTC circlize/build/0000755000176200001440000000000014236530433013160 5ustar liggesuserscirclize/build/vignette.rds0000644000176200001440000000031214236530433015513 0ustar liggesusersb```b`adb`b2 1# 'I,JɬJ MA)e祖)k(AY. Cā I5/17MKjAj^ HvѴpxVaaqIY0AAn0Ez0?|$Gs=ʕXVr7 odcirclize/vignettes/0000755000176200001440000000000014236530433014071 5ustar liggesuserscirclize/vignettes/circlize.Rmd0000755000176200001440000000023514015721224016337 0ustar liggesusers Please go to https://jokergoo.github.io/circlize_book/book/ for the full vignette. circlize/NEWS0000755000176200001440000005567214236425034012602 0ustar liggesusersChanges in version 0.4.15 ----------------------------------------------------------------------- * low-level graphics functions won't change the index of sector and track. * `colorRamp2()`: add `hcl_palette` argument. * `highlight.sectors()`: argument `padding` supports to wrap the vector with `I()`. * fixed a bug of wrong calculation of label positions in `circos.genomicLabels()`. Changes in version 0.4.14 ----------------------------------------------------------------------- * `circos.genomicTrackPlotRegion()`: add `na.rm = TRUE` when using `range()`. * fixed a bug of `na.col` in `circos.heatmap()`. * improved default order of link end when duplicated rows exist in the data frame. * `circos.heatmap()`: add `cell.border`, `cell.lty` and `cell.lwd` arguments. * add `circos.initializeCircularGenome()`. * `chordDiagram()`: `link.sort` allows to sort links based on the original orders in the input data frame. * label facing is correct now for y-axis when circos.par$xaxis.clock.wise is FALSE. * `rand_color()`: add a new argument `friendly` that generate eye-friendly random colors. * `chordDiagram()`: fixed a bug when a sector have all zero values and after scaling they changed to NA. Changes in version 0.4.13 ----------------------------------------------------------------------- * `circos.link()`: add offset when testing whether the link is out of the sector. Changes in version 0.4.12 ----------------------------------------------------------------------- * `smartAlign()`: improved boxes overlapping * `circos.heatmap()`: automatically convert the input to a matrix if it is a data frame * now validate the regions to check whether the regions are exceeding the chromosomes. * `circos.link()`: add a new `inverse` argument to control whether the link is inversed or not. * `circos.genomicLabels()`: replace `side` argument with `labels.side`. * `circos.points()`, `circos.lines()`, `circos.text()` allow argument `x` to be a two-column matrix. * add `arrange_links_evenly()` function. * add `circos.connect()` function. * `circos.heatmap()`: argument `cluster` can be a clustering object. * `circos.heatmap()`: add `cell_width` to control the relative width of heatmap cells. * add `circos.labels()`. * `chordDiagram()`: bars are drawn according to the visibility of links. Changes in version 0.4.11 ----------------------------------------------------------------------- * `chordDiagram()`: add `link.auto` argument * `chordDiagram()`: add `link.target.prop` and `target.prop.height` arguments * `circos.par()`: add `circle.margin` option * `circos.genomicLabels()`: fixed a bug when `direction = "outside"` * add `xaxis.clock.wise` option in `circos.par()` * `chordDiagram()`: now the scaling is properly applied. * `chordDiagram()`: link positions are optimized so they have minimal intersections. `link.auto` argument is ignored and removed. * `circos.dendrogram()`: support arbitary numbers of branches on each node. * all functions with `factors` with arguments change to `sectors`. Changes in version 0.4.10 ----------------------------------------------------------------------- * `highlight.sector()`: fixed a bug when circos.par("clock.wise" = FALSE) * `circos.genomicLink()`: input data frames can have 2 columns. In this case the start and the end positions of each region are the same. * `circos.circos.trackPlotRegion()`: fixed a bug that sector index was wrongly assigned. * `get.cell.meta.data()`: add `cell.width` and `cell.height` arguments. * `circos.genomicTrackPlotRegion()`: when input is a data frame list and column.index is a vector, reduce the one-column data frame to a vector. * add `add.track.meta.data()` and `add.sector.meta.data()` too add user-defined cell meta data. * add `circos.heatmap()` to draw multi-track heatmaps. * add `circos.barplot()`, `circos.boxplot()` and `circos.violin()`. * sector index are all enforced to be character. * `circos.nested()`: now the graphic parameters are reordered accordingly as the `correspondance`. * add `mm_x()`, `mm_y()`, `mm_h()`, `cm_x()`, `cm_y()`, `cm_h()`, `inches_x()`, `inches_y()`, `inches_h()` functions * `circos.initialize():` if `gap.degree`/`gap.after` is set a named vector, the order of these two options are adjusted to the real sector order. * add `set_track_gap()` function. * `circos.link()`: add `reduce_to_mid_line` argument. * `chordDiagram()`: add `group` argument. Changes in version 0.4.9 ----------------------------------------------------------------------- * `chordDiagram()`: fixed a bug when `link.overlap = TRUE` for sparse matrices. * `circos.rect()`: add `rot` argument. * add `circos.triangle()`. * all examples are included in R source code files * `circos.genomicHeatmap()`: `connection_height` can be set to `NULL` to remove the connection lines. * `genomicDensity()`/`circos.genomicDensity()`: add a new `count_by` argument so that the overlap can be calculated as how many regions overlap to the windows. * `circos.trackPlotRegion()`: cells in all sectors are plotted if `fa` does not provide complete set of categories. * `circos.initialize()`: give warnings if `fa` is in numeric mode. * `circos.track()`/`circos.genomicTrack()`: gives error when the panel function was specified without explicitly by the name `panel.fun`. * `chordDiagram()`: if the input is a data frame, it allows the data frame to have two numeric columns and the link ends are drawn wiht unequal width. Changes in version 0.4.8 ----------------------------------------------------------------------- * add `validate_regions()` to check the end positions and start positions. * `colorRamp2()`: fixed a bug when the color mapping function returns RGB matrix. * `circos.genomicHeatmap()`: add `na_col` argument. * `chordDiagram()`: add `link.overlap` argument. Changes in version 0.4.7 ----------------------------------------------------------------------- * fixed a bug that the vertical line was wrongly put for `circos.yaxis()`. * validate input if it is should be a data frame. * `colorRamp2()`: add HLS colorspace * add `major.at` and `labels` arguments to `circos.genomicAxis()`. * circos.initializeWithIdeogram(): manually select chromosomes for the common species * `chordDiagram()`: fixed a bug that after reducing the matrix/data frame by `reduce`, there might be sectors with zero width. * optimized `circos.nested()` * `colorRamp2()`: check NA values Changes in version 0.4.6 ------------------------------------------------------------------------ * smartAlign(): the order of values won't affect the realignment now. * `circos.rect()`, `circos.segments()`, `circos.points()`, `circos.text()`: x and y are recycled if the length of the variable is 1. * fixed a bug of the position of vertical line in `circos.yaxis()` * add `facing` and `niceFacing` to `circos.genomicLabels()` * `posTransform.text()`: linking lines will not be overlapping anymore. Changes in version 0.4.5 ------------------------------------------------------------------------ * vertical lines added for y-axis. * add `axis.labels.cex` and `labels.cex` in `circos.genomicInitialize()`. * remove `lwd` in `circos.genomicRect()` because `lwd` is not allowed to be vector. * fixed a bug when self.link = 1 in chordDiagram() * add `scale` in chordDiagram() * `circos.initialize()`: convert xlim and x to numeric * `colorRamp2()` is faster now. * add `circos.genomicAxis()`. * add `calc_gap()`. * `chordDiagram()`: consider tibble format as input. Changes in version 0.4.4 ------------------------------------------------------------------------- * update denpendency of GlobalOptions package * `genomicDensity()`: add `chr.len` argument. Changes in version 0.4.3 -------------------------------------------------------------------------- * `circos.trackHist()`: add `area` argument to add filled color under density lines. * `getColorInfo()`: use `ls(envir)` to get the names of variables in the environment. * `circos.arrows`: add instructions of making reverse clockwise arrows. Changes in version 0.4.2 --------------------------------------------------------------------------- * add startup message * add `xmax` argument in `chordDiagram()` * first column is refactorized in `circos.initialize()` * add names for CELL_META * add `labels.pos.adjust` in `circos.axis()` * add `fontsize()` function * `circos.nested()`: check whether sector order in the two circular plots are consistent * `getQuadraticPoints()`: add tiny offset when the curve is actually a straight line Changes in version 0.4.1 --------------------------------------------------------------------------- * add `circos.raster()` * add `circos.arrow()` * re-implement `rand_color()` * support `col` in `circos.axis()` * `circos.genomicLabels()`: regions are automatically sorted in advance Changes in version 0.4.0 ---------------------------------------------------------------------------- * add `link.visible` argument in `chordDiagram()` * add cytoband files and chromInfo files for a list of species locally * add a new vignette "Add legends to circlize" * add a new function `convert_*()` which convert an absolute unit to measurement in different coordinates * enforce asp = 1 when calling plot.default * length of axes ticks are set to 2mm by default * in axis, the first axis label is shifted if it is exceed the axis and so is for the last axis label. * text.vjust accepts strings as "2mm", "-2.1 cm" to represent offsets * `circos.segments()`: graphic parameters can be set as vectors * add `circos.genomicIdeogram()`, `circos.genomicHeatmap()`, `circos.genomicLabels()` * add `circos.nestes()` * vignette has been moved to https://jokergoo.github.io/circlize_book/book/index.html * add `set.current.cell()` * add `h.ratio` argument in `circos.link()` Changes in version 0.3.10 ---------------------------------------------------------------------------- * `chordDiagram()`: fixed a bug when the input matrix is stored as a data frame * `rainfallTransform()`: add "left" and "right" modes, and now the row order of the output data frame is as same as the input one. * `circos.genomicInitialize()`: it can only plot axes now. * `posTransform.text()`: add `extend` option to control the extension of chromsomes to allow to put more labels * `ciros.points()`: add `bg` option to control background color Changes in version 0.3.9 ---------------------------------------------------------------------------- * `chordDiagramFromDataFrame()`: now recognize a `rank` column which defines the order of adding links Changes in version 0.3.8 ---------------------------------------------------------------------------- * chordDiagram(): if not all sectors are specified in grid.col, remaining will be filled by random colors * if `ylim` has same values for upper and lower bound, throw errors. Changes in version 0.3.7 ---------------------------------------------------------------------------- * chordDiagram() now returns a data frame which contains positions of all links * chordDiagram() track.margin is also taken into settings of preAllocateTracks * chordDiagram(): link.sort adds a new option: "overall" which sort links regardless of rows or columns * chordDiagram(): add `link.largest.ontop` which controls the order of adding links Changes in version 0.3.6 ---------------------------------------------------------------------------- * positions of arrows in chordDiagram() have been adjusted. * fixed a bug that negative value was not shown * circos.initialize: if `factors` are unique and is a vector, the order of sectors will be the same as `factors`. * `highlight.sector`: text are now in correct position if sectors are over theta = 0 Changes in version 0.3.5 ---------------------------------------------------------------------------- * `chordDiagram()`: if the corresponding value is zero, nothing happens. * border of links are same as filled by default * explicitely put all arguments in `chordDiagram()` instead of just using `...` * `adj` in `circos.text()` can also adjust text rotations. * 'circos.genomicInitialize()': gap between labels and ideograms is adjusted if there is no axis Changes in version 0.3.4 ---------------------------------------------------------------------------- * `circos.genomicLink()`: ordering is cancled when normalizing the data frames * export `smartAlign()` Changes in version 0.3.3 ---------------------------------------------------------------------------- * `rainfallTransform()` and `genomicDensity()`: can be applied on the bed-format data frame directly. * add `col2rgb()` which transforms back to the original value based on the color mapping function. * add `circos.yaxis()` Changes in version 0.3.2 ----------------------------------------------------------------------------- * `chrodDiagram`: add warning if users use data frame as ajacency matrix * `circos.genomicTrackPlotRegion`: data frame will be sorted Changes in version 0.3.1 ----------------------------------------------------------------------------- * fixed a bug for `chordDiagramFromDataFrame` when there is the third column in the data frame * `colorRamp2`: colors are interpolated linearly in Lab color space * `chordDiagram`: directional, direction.type and diffHeight can also be vector Changes in version 0.3.0 ----------------------------------------------------------------------------- * `chordDiagramFromMatrix`: automatically replace NA to 0 in the input matrix * add `chordDiagramFromMatrix` and `chordDiagramFromDataFrame` * by default there is axis on chord diagram * add `quadratic.bezier.length` that calculates the approximate length of bezier curve * normalize link-related functions to make sure the direction is always from the first argument to the second argument, reverse clockwise. Changes in version 0.2.5 ----------------------------------------------------------------------------- * `circos.rect` and `circos.polygon` are vectorized * `circos.dendrogram`: supports graphical settings for nodes * `circos.link`: support 'big.arrow' mode for links * `circos.text`: graphical settings are subsetted correctly in `niceFacing` is set * add shortcut functions: `circos.track`, `circos.update` and `circos.genomicTrack` * add `normalizeChordDiagramGap` * fixed type in `get.cell.meta.data` Changes in version 0.2.4 ------------------------------------------------------------------------------ * 'chrodDiagram`: If graphic parameters for links are different, the value can be specified as a three-column data frame. * `chordDiagram`: arrows can be used to identify directions * ·circos.link`: arrows can be used to identify directions * `chordDiagram`: width of self-links are not duplicated. * `circos.link`: if two roots for a link overlaps, the link is de-generated as an area with a quadratic curve and an arc. * add `circos.dendrogram` which draw dendrograms (dendrogram can be rendered by `dendextend` package) Changes in version 0.2.3 ------------------------------------------------------------------------------ * add `link.order` argument in `chordDiagram` to control order of links on sectors * add `highlight.sector` * `chromosome.index` can set the order of chromosomes * add `read.chromInfo()` to read chromInfo file from UCSC * if downloading cytoband file failed, try to download chromInfo file * `chromosome.index` can be set in `read.cytoband()` and `read.chromInfo()` Changes in version 0.2.2 ------------------------------------------------------------------------------ * change `.onLoad` to `setLoadActions` * `circos.clear`: __tempdir__ will not be reset Changes in version 0.2.1 ------------------------------------------------------------------------------ * If par("mar") is using default, it will be changed to par(mar = c(1, 1, 1, 1)) internally and will be recovered after calling circos.clear() * `circos.text`: add two options ('bending.inside' which is identical to original 'bending' and 'bending.outside'), both support `niceFacing` * circos.par('__tempdir__') is initialized by `tempdir()` * `.get_color`: there will be no negative value due to 0.000 - 0.000 * `chordDiagram`: `grid.col` is correctly reduced if rownames and colnames overlap * `circos.text`: `font` is passed to `text` function * `colorRamp2`: returned function has an attribute: `breaks` * `chordDiagram`: assign same names for rows and columns if the input matrix is specified symmetric while has no names * `chordDiagram`: also check rownames and colnames if the matrix is specified as symmetric. * don't remove temporary folder * `value` can be scalar or vector in `circos.genomicPoints`, `circos.genomicLines`, ... Changes in version 0.2.0 ------------------------------------------------------------------------------ * `draw.sector` is modified, now accepts an argument `clock.wise` to control the direction of sectors. * `highlight.chromosome` can highlight more than one chromosomes now. * vignettes are rendered by `knitr` * set default transparency to 0.5 in `chordDiagram` * `circlize` returns value when track.index == 0 * fixed a bug when text facing is 'bending', all text are plotted in one cell * different colors for each rows can be set to `circos.genomicLines` if type %in% c("segment", "h") * pre-allocate the matrix in `.get_color` Changes in version 0.1.3 ------------------------------------------------------------------------------ * add `jitter` for adding points under `stack` mode * value in `panel.fun` can be selected by character index * change default temporary dir to `tempdir()` Changes in version 0.1.3 ------------------------------------------------------------------------------ * temporary add dependency of `methods` until bugs in `GlobalOptions` fixed * add `reduce` argument in `chordDiagram` to control whether to remove tiny categories * add `species` argument in `generateRandomBed` * change use of posTransform.text * add names for `chr.len` in `read.cytoband` * cytoband files are cached * `row.col`, `column.col`, `col`, `grid.col` and circos.par('gap.degree') will also be reduced if the matrix is reduced Changes in version 0.1.2 ------------------------------------------------------------------------------ * global options are controlled by `GlobalOptions` package * set `par("lend")` and `par("ljoin")` to their default values. * add more example codes in genomic_plot vignette Changes in version 0.1.1 ------------------------------------------------------------------------------ * fixed the bug that if start position is not zero when calling `circos.genomicIntialize`, ``major.at`` is wrongly calculated. Changes in version 0.1.0 ------------------------------------------------------------------------------ * height(h) and shape(w) can be set for Bezier curve (in `circos.link`) * add examples in man/ * add ``fromRows`` options in `chordDiagram` to control the direction of links * Now the ``major.by`` are the same in all sectors * define ``min.data`` and ``max.data`` in internal variable ``SECTOR.DATA`` * check that sector names cannot be empty strings ("") * check whether circos plot has been initialized when calling `circos.trackPlotRegion` * add ``niceFacing`` in `circos.text` to make the facing more human easy * height of ideogram and annotation track in `circos.initializeWithIdeogram` and `circos.genomicInitialize` can be set * some example code in examples/vignettes has been changed according to changes in the package source code * add `posTransform.text` which can smartly put text on the circle * ``track.margin`` and ``cell.padding`` can be set in `circos.trackPlotRegion` as a local setting Changes in version 0.0.9 ------------------------------------------------------------------------------ * links are now implemented by Bezier curve * baseline can be set when ``type == "h"`` `in circos.lines` * add a new function `chordDiagram` which support chord diagram * add `facing` argument to replace `direction` in `circos.text` * `circos.trackPlotRegion` can be used to update a track without re-setting ylim * move demo to https://jokergoo.github.io/circlize * re-implement `colorRamp2` Changes in version 0.0.8 ------------------------------------------------------------------------------ * axes labels will not draw when setting labels = FALSE * add many functions supporting genomic visualization * add a new vignette to show how to plot genomic circos plot with new functions * add `circos.info` Changes in version 0.0.7 ------------------------------------------------------------------------------ * add an example in demo codes * improved vignettes Change in version 0.0.6 ------------------------------------------------------------------------------ * order will not change in `circos.trackPlotRegion` when not specifying `factors`, bug fixed * add an example in 'draw relation' vignette * add a new vignette focusing on phylogenetic tree * support directly downloading cytoBand file from UCSC Changes in version 0.0.5 ------------------------------------------------------------------------------ * support self-define width of sectors when initializing sectors * add simple functions to read and manuplate cytoband file * add several new figures in the vignettes and vignettes have been improved. * ``cell.padding`` in `circos.par` now using degree as its measurement. * ``track.margin`` in `circos.par` now using percentage of radius as its measurement. Changes in version 0.0.4 ------------------------------------------------------------------------------ * number of points to simulate quadratic curves decreased * labels on axis in `circos.initializeWithIdeogram` is now 'vertical_right' by default * size of the vignettes reduced * add example of drawing heatmap and cluster dendrogram in the main vignette * add example of drawing error area of lines by `circos.polygon` * vignette improved * ``gap.degree`` in `circos.par` can be a vector which means different degrees for gaps can be set * export core function `circlize` now * track.margin now is in correct order * links are optimized (although not so perfect) * no point overflow warnings when drawing axes Changes in version 0.0.3 ------------------------------------------------------------------------------ * vignettes has been improved * ``xplot`` in `get.cell.meta.data` is now corresponding to the data direction in the cell * number of points to draw links decreased. * `get.cell.meta.data` can provide more meta data for a cell * start degree and end degree now consistent with the data axis. * the first sector is drawn first now. * add `draw.sector` Changes in version 0.0.2 ------------------------------------------------------------------------------ * add `draw.sector` so it would be more straightforward to highlight sectors * add ``track.margin``, ``cell.padding``, ``cell.xlim`` and ``cell.ylim`` in `get.cell.meta.data` function * figures in vignettes are all generated automatically * vignettes have been imporved circlize/R/0000755000176200001440000000000014236425075012267 5ustar liggesuserscirclize/R/global.R0000755000176200001440000012044114236527521013656 0ustar liggesusers# this file contains variables and functions related to # global variables. .CIRCOS.ENV = new.env() resetGlobalVariable = function() { assign(".SECTOR.DATA", NULL, envir = .CIRCOS.ENV) assign(".CELL.DATA", NULL, envir = .CIRCOS.ENV) assign(".CURRENT.TRACK.INDEX", 0, envir = .CIRCOS.ENV) assign(".CURRENT.SECTOR.INDEX", NULL, envir = .CIRCOS.ENV) } resetGlobalVariable() # == title # Parameters for the circular layout # # == param # -... Arguments for the parameters, see "details" section # -RESET reset to default values # -READ.ONLY please ignore # -LOCAL please ignore # -ADD please ignore # # == details # Global parameters for the circular layout. Currently supported parameters are: # # -``start.degree`` The starting degree from which the circle begins to draw. Note this degree is measured # in the standard polar coordinate which means it is always reverse-clockwise. # -``gap.degree`` Gap between two neighbour sectors. It can be a single value or a vector. If it is a vector, # the first value corresponds to the gap after the first sector. # -``gap.after`` identical to ``gap.degree`` option, but a more understandable name. Modifying this option will also affect ``gap.degree``. # -``track.margin`` Like ``margin`` in Cascading Style Sheets (CSS), it is the blank area # out of the plotting region, also outside of the borders. Since left and right margin are controlled # by ``gap.degree``, only bottom and top margin need to be set. And all cells in a same track share the same margins, and # that's why this parameter is called ``track.margin``. The value for the ``track.margin`` # is the percentage according to the radius of the unit circle. `convert_height` can be used to set to an absolute unit (e.g cm/inche). # -``unit.circle.segments`` Since curves are simulated by a series of straight lines, # this parameter controls the amount of segments to represent a curve. The minimal length # of the line segmentation is the length of the unit circle (``2pi``) divided by ``unit.circoe.segments``. # More segments means better approximation for the curves while larger size if you generate figures as PDF format. # -``cell.padding`` Padding of the cell. Like ``padding`` in Cascading Style Sheets # (CSS), it is the blank area around the plotting regions, but within the borders. # The parameter has four values, which controls the bottom, left, top and right paddings # respectively. The first and the third padding # values are the percentages according to the radius of the unit circle and the second and # fourth values are degrees. Similar as ``track.margin`` option, the first and the third value # can be set by `convert_height` to an absolute unit. # -``track.height`` The default height of tracks. It is the percentage according to the radius # of the unit circle. The height includes the top and bottom cell paddings but not the margins. # `convert_height` can be used to set the height to an absolute unit. # -``points.overflow.warning`` Since each cell is in fact not a real plotting region but only # an ordinary rectangle, it does not eliminate points that are plotted out of # the region. So if some points are out of the plotting region, ``circlize`` would continue drawing the points and printing warnings. In some # cases, draw something out of the plotting region is useful, such as draw # some legend or text. Set this value to ``FALSE`` to turn off the warnings. # -``circle.margin`` Margin in the horizontal and vertical direction. The value should be a positive numeric vector # and the length of it should be either 1, 2, or 4. When it has length of 1, it controls the margin on the four sides of the circle. # When it has length of 2, the first value controls the margin on the left and right, and the second value controls # the margin on the bottom and top side. When it has length of 4, the four values controls the margins on the left, right, bottom and top sides # of the circle. So A value of ``c(x1, x2, y1, y2)`` means ``circos.par(canvas.xlim = c(-(1+x1), 1+x2), canvas.ylim = c(-(1+y1), 1+y2))``. # -``canvas.xlim`` The coordinate for the canvas. Because ``circlize`` draws everything (or almost everything) inside the unit circle, # the default ``canvas.xlim`` and ``canvas.ylim`` for the canvas would be all ``c(-1, 1)``. However, you can set it to a more broad # interval if you want to draw other things out of the circle. By choosing proper # ``canvas.xlim`` and ``canvas.ylim``, you can draw part of the circle. E.g. setting # ``canvas.xlim`` to ``c(0, 1)`` and ``canvas.ylim`` to ``c(0, 1)`` would only draw # circle in the region of (0, pi/2). # -``canvas.ylim`` The coordinate for the canvas. By default it is ``c(-1, 1)`` # -``clock.wise`` The direction for adding sectors. Default is ``TRUE``. # -``xaxis.clock.wise`` The direction in the x-axes for all sectors. Default is ``TRUE``. # # Similar as `graphics::par`, you can get the parameter values by specifying the # names of parameters and you can set the parameter values by specifying a # named list which contains the new values. # # ``gap.degree``, ``start.degree``, ``canvas.xlim``, ``canvas.ylim`` and ``clock.wise`` # only be set before the initialization of the circular layout # (i.e. before calling `circos.initialize`) because these values will not be changed after # adding sectors on the circle. The left and right padding for ``cell.padding`` will also be # ignored after the initialization because all cells in a sector would share the same # left and right paddings. # # == seealso # https://jokergoo.github.io/circlize_book/book/circular-layout.html#graphic-parameters # # == example # circos.par circos.par = function(..., RESET = FALSE, READ.ONLY = NULL, LOCAL = FALSE, ADD = FALSE) {} circos.par = setGlobalOptions( start.degree = list( .value = 0, .length = 1, .class = "numeric", .filter = function(x) { if(is.circos.initialized()){ warning_wrap("'start.degree' can only be modified before `circos.initialize`, or maybe you forgot to call `circos.clear` in your last plot.") } return(x) }), gap.degree = list( .value = 1, .class = "numeric", .validate = function(x) { all(x >= 0 & x < 360) }, .filter = function(x) { if(is.circos.initialized()){ warning_wrap("'gap.degree' can only be modified before `circos.initialize`, or maybe you forgot to call `circos.clear` in your last plot.") } return(x) } ), gap.after = list(.synonymous = "gap.degree"), track.margin = list( .value = c(0.01, 0.01), # top margin and bottom margin, percentage .length = 2, .class = "numeric" ), unit.circle.segments = 500, #to simulate smooth curve cell.padding = list( .value = c(0.02, 1, 0.02, 1), # percentage .length = c(2, 4), .class = "numeric", .filter = function(x) { if(length(x) == 2) x = c(x, x) o.cell.padding = circos.par("cell.padding") if(is.circos.initialized()){ return(c(x[1], o.cell.padding[2], x[3], o.cell.padding[4])) } else { return(x) } }), default.track.height = list( .value = 0.2, .visible = FALSE, .filter = function(x) { warning_wrap("`default.track.height` is replaced by `track.height`, ignore this setting.") return(x) }), track.height = 0.2, points.overflow.warning = TRUE, circle.margin = list( .value = c(0, 0, 0, 0), .filter = function(x) { if(is.circos.initialized()){ warning_wrap("'circle.margin' can only be modified before `circos.initialize`, or maybe you forgot to call `circos.clear` in your last plot.") } if(any(x <= 0)) { stop_wrap("The value of `circle.margin` should be positive.") } if(length(x) == 1) { x = rep(x, 4) } else if(length(x) == 2) { x = rep(x, each = 2) } else if(length(x) == 4) { } else { stop_wrap("Length of `circle.margin` can only be 1, 2, or 4.") } return(x) } ), canvas.xlim = list( .value = function() { c(-(1 + .v$circle.margin[1]), (1 + .v$circle.margin[2])) }, .filter = function(x) { if(is.circos.initialized()){ warning_wrap("'canvas.xlim' can only be modified before `circos.initialize`, or maybe you forgot to call `circos.clear` in your last plot.") } return(x) }), canvas.ylim = list( .value = function() { c(-(1 + .v$circle.margin[3]), (1 + .v$circle.margin[4])) }, .filter = function(x) { if(is.circos.initialized()){ warning_wrap("'canvas.ylim' can only be modified before `circos.initialize`, or maybe you forgot to call `circos.clear` in your last plot.") } return(x) }), major.by.degree = 10, clock.wise = list( .value = TRUE, .filter = function(x) { if(is.circos.initialized()){ warning_wrap("'clock.wise' can only be modified before `circos.initialize`, or maybe you forgot to call `circos.clear` in your last plot.") } return(x) }), xaxis.clock.wise = list( .value = TRUE, .filter = function(x) { if(is.circos.initialized() && environmentName(topenv()) != "circlize"){ stop_wrap("'xaxis.clock.wise' can only be modified before `circos.initialize`, or maybe you forgot to call `circos.clear` in your last plot.") } return(x) }), lend = list( .value = NULL, .visible = FALSE, .private = TRUE), ljoin = list( .value = NULL, .visible = FALSE, .private = TRUE), '__tempdir__' = list( .value = ".", .private = TRUE, .filter = function(x) {dir.create(x, showWarnings = FALSE); return(x)}, .visible = FALSE), '__omar__' = list( # is par("mar") the default value? .value = FALSE, .private = TRUE, .visible = FALSE), '__tempenv__' = list( .value = new.env(parent = emptyenv()), .private = TRUE, .visible = FALSE), message = TRUE, help = list(.synonymous = "message"), ring = list( .value = FALSE, .private = TRUE, .visible = FALSE ) ) # before initialization, .SECTOR.DATA is NULL is.circos.initialized = function() { .SECTOR.DATA = get(".SECTOR.DATA", envir = .CIRCOS.ENV) return(! is.null(.SECTOR.DATA)) } # == title # Initialize the circular layout # # == param # -sectors A `factor` variable or a character vector which represent data categories # -factors The same as ``sectors``. It will be removed in future versions. # -x Data on x-axes, a vector # -xlim Ranges for values on x-axes, see "details" section for explanation of the format # -sector.width Width for each sector. The length of the vector should be either 1 which means # all sectors have same width or as same as the number of sectors. Values for # the vector are relative, and they will be scaled by dividing their summation. # By default, it is ``NULL`` which means the width of sectors correspond to the data # range in sectors. # -ring Whether the sector represented as a ring. If yes, there should only be one sector in the circle. # # == details # The function allocates the sectors according to the values on x-axis. # The number of sectors are determined by the ``factors`` and the order # of sectors are determined by the levels of factors. In this function, # the start and end position for each sector on the circle (measured by degree) # are calculated according to the values on x-axis or by ``xlim``. # # If ``x`` is set, the length of ``x`` must be equal to the length of ``factors``. # Then the data range for each sector are calculated from ``x`` by splitting ``factors``. # # If ``xlim`` is set, it should be a vector containing two numbers or a matrix with 2 columns. # If ``xlim`` is a 2-element vector, it means all sector share the same ``xlim``. # If ``xlim`` is a 2-column matrix, the number of rows should be equal to the number of categories # identified by ``factors``, then each row of ``xlim`` corresponds to the data range for each sector # and the order of rows is corresponding to the order of levels of ``factors``. If ``xlim`` is a matrix # for which row names cover all sector names, ``xlim`` is automatically adjusted. # # Normally, width of sectors will be calculated internally according to the data range in sectors. But you can # still set the width manually. However, it is not always a good idea to change the default sector width since # the width can reflect the range of data in sectors. However, in some cases, it is useful to manually set # the width such as you want to zoom some part of the sectors. # # The function finally calls `graphics::plot` with enforing aspect ratio to be 1 and be ready for adding graphics. # # == seealso # https://jokergoo.github.io/circlize_book/book/circular-layout.html circos.initialize = function( sectors = NULL, x = NULL, xlim = NULL, sector.width = NULL, factors = sectors, ring = FALSE) { resetGlobalVariable() .SECTOR.DATA = get(".SECTOR.DATA", envir = .CIRCOS.ENV) .CELL.DATA = get(".CELL.DATA", envir = .CIRCOS.ENV) if(is.null(factors)) { if(is.matrix(xlim) || is.data.frame(xlim)) { if(is.null(rownames(xlim))) { stop_wrap("Since `sectors` is not specified, row names of `xlim` are taken as `sectors`, thus `xlim` should be a two-column matrix with row names.") } else { factors = rownames(xlim) } } else { stop_wrap("Since `sectors` is not specified, row names of `xlim` are taken as `sectors`, thus `xlim` should be a two-column matrix with row names.") } } if(is.numeric(factor)) { warning_wrap("Your `sectors` is numeric, it will be converted to characters internally.") } if(any(factors == "")) { stop_wrap("`sectors` cannot contain empty strings.") } if(! is.factor(factors)) { if(length(factors) == length(unique(factors))) { factors = factor(factors, levels = factors) } else { factors = factor(factors) } } factors = factor(as.character(factors), intersect(levels(factors), as.character(factors))) le = levels(factors) if(ring) { if(length(le) != 1) { stop_wrap("There should be only one sector under 'ring' mode.") } circos.par$ring = TRUE circos.par$gap.degree = 0 circos.par$cell.padding = c(circos.par$cell.padding[1], 0, circos.par$cell.padding[3], 0) circos.par$points.overflow.warning = FALSE } else { circos.par$ring = FALSE } if(!is.null(x)) { x = as.numeric(x) } # initialize .SECTOR.DATA # you can think it as the global x axis configuration # calculate min and max value for each sectors # there are several ways # xlim is prior than x if(is.vector(xlim)) { if(length(xlim) != 2) { stop_wrap("Since `xlim` is vector, it should have length of 2.") } xlim = as.numeric(xlim) min.value = rep(xlim[1], length(le)) max.value = rep(xlim[2], length(le)) } else if(is.matrix(xlim) || is.data.frame(xlim)) { if(dim(xlim)[1] != length(le) || dim(xlim)[2] != 2) { stop_wrap("Since `xlim` is a matrix, it should have same number of rows as the length of the level of `sectors` and number of columns of 2.") } if(!is.null(rownames(xlim))) { if(length(setdiff(le, rownames(xlim))) == 0) { xlim = xlim[le, ,drop = FALSE] } } if(is.data.frame(xlim)) xlim = as.matrix(xlim) xlim2 = as.numeric(xlim) dim(xlim2) = dim(xlim) dimnames(xlim2) = dimnames(xlim) xlim = xlim2 min.value = apply(xlim, 1, function(x) x[1]) max.value = apply(xlim, 1, function(x) x[2]) } else if(is.vector(x)) { if(length(x) != length(factors)) { stop_wrap("Length of `x` and length of `sectors` differ.") } min.value = tapply(x, factors, min) max.value = tapply(x, factors, max) } else { stop_wrap("You should specify either `x` or `xlim`.") } cell.padding = circos.par("cell.padding") # range for sectors sector.range = max.value - min.value n.sector = length(le) sector = vector("list", 7) # for each sector, `start.degree always referto `min.value` and `end.degree` always # refer to `max.value` in a reverse clockwise fasion. So here `start.degree` and # `end.degree` also correspond to the direction. # So in the polar coordinate, `start.degree` would be larger than `end.degree` names(sector) = c("factor", "min.value", "max.value", "start.degree", "end.degree", "min.data", "max.data") sector[["factor"]] = le sector[["min.data"]] = min.value sector[["max.data"]] = max.value gap.degree = circos.par("gap.degree") if(!is.null(names(gap.degree))) { if(length(setdiff(le, names(gap.degree))) == 0) { gap.degree = gap.degree[le] } } if(length(gap.degree) == 1) { gap.degree = rep(gap.degree, n.sector) } else if(length(gap.degree) != n.sector) { stop_wrap("Since `gap.degree` parameter has length larger than 1, it should have same length as the number of sectors.") } start.degree = circos.par("start.degree") clock.wise = circos.par("clock.wise") if(360 - sum(gap.degree) <= 0) { stop_wrap("Maybe your `gap.degree` is too large so that there is no space to allocate sectors.") } if(is.null(sector.width)) { # degree per data unit = (360 - sum(gap.degree)) / sum(sector.range) for(i in seq_len(n.sector)) { if(sector.range[i] == 0) { stop_wrap("Range of the sector ('", le[i] ,"') cannot be 0. You might need to set the second and the fourth values in `circos.par$cell.padding` to 0.") } # only to ensure value are always increasing or decreasing with the absolute degree value if(clock.wise) { sector[["start.degree"]][i] = ifelse(i == 1, start.degree, sector[["end.degree"]][i-1] - gap.degree[i-1]) sector[["end.degree"]][i] = sector[["start.degree"]][i] - sector.range[i]*unit } else { sector[["end.degree"]][i] = ifelse(i == 1, start.degree, sector[["start.degree"]][i-1] + gap.degree[i-1]) sector[["start.degree"]][i] = sector[["end.degree"]][i] + sector.range[i]*unit } } } else { if(length(sector.width) == 1) { sector.width = rep(sector.width, n.sector) } else if(length(sector.width) != n.sector) { stop_wrap("Since you manually set the width for each sector, the length of `sector.width` should be either 1 or as same as the number of sectors.") } sector.width.percentage = sector.width / sum(sector.width) degree.per.sector = (360 - sum(gap.degree)) * sector.width.percentage if(any(degree.per.sector <= 0)) { stop_wrap("Maybe your `gap.degree` is too large so that there is no space to allocate sectors.") } for(i in seq_len(n.sector)) { if(sector.range[i] == 0) { stop_wrap("Range of the sector (", le[i] ,") cannot be 0.") } # only to ensure value are always increasing or decreasing with the absolute degree value if(clock.wise) { sector[["start.degree"]][i] = ifelse(i == 1, start.degree, sector[["end.degree"]][i-1] - gap.degree[i-1]) sector[["end.degree"]][i] = sector[["start.degree"]][i] - degree.per.sector[i] } else { sector[["end.degree"]][i] = ifelse(i == 1, start.degree, sector[["start.degree"]][i-1] + gap.degree[i-1]) sector[["start.degree"]][i] = sector[["end.degree"]][i] + degree.per.sector[i] } } } # from start.degree, degree is increasing in a reverse-clock wise fasion # so, if circos is created clock wise, the forward sector would have large degrees # if circos is created reverse clock wise, the forward sector would have small degrees # just for goodlooking for the degree if(clock.wise) { sector[["start.degree"]] = sector[["start.degree"]] + 360 sector[["end.degree"]] = sector[["end.degree"]] + 360 } if(any(cell.padding[2] + cell.padding[4] >= sector[["start.degree"]] - sector[["end.degree"]])) { stop_wrap("Summation of cell padding on x-direction are larger than the width for some sectors. You can e.g. set 'circos.par(cell.padding = c(0.02, 0, 0.02, 0))' or remove tiny sectors.") } min.value = min.value - cell.padding[2]/(sector[["start.degree"]] - sector[["end.degree"]] - cell.padding[2] - cell.padding[4])*sector.range # real min value max.value = max.value + cell.padding[4]/(sector[["start.degree"]] - sector[["end.degree"]] - cell.padding[2] - cell.padding[4])*sector.range # real max value sector[["min.value"]] = min.value sector[["max.value"]] = max.value sector = as.data.frame(sector, stringsAsFactors = FALSE) .SECTOR.DATA = sector # initialize .CELL.DATA which contains information of each cell # if content of that cell has been created, it means that the # plotteing region for that cell has been created. .CELL.DATA = vector("list", length = length(le)) names(.CELL.DATA) = le for(i in seq_along(.CELL.DATA)) { .CELL.DATA[[ le[i] ]] = vector("list", length = 0) } assign(".SECTOR.DATA", .SECTOR.DATA, envir = .CIRCOS.ENV) assign(".CELL.DATA", .CELL.DATA, envir = .CIRCOS.ENV) assign(".CURRENT.SECTOR.INDEX", .SECTOR.DATA[1, "factor"], envir = .CIRCOS.ENV) circos.par("__omar__" = FALSE) if(identical(par("mar"), c(5.1, 4.1, 4.1, 2.1))) { circos.par("__omar__" = TRUE) par(mar = c(1, 1, 1, 1)) } # draw everything in a unit circle plot(circos.par("canvas.xlim"), circos.par("canvas.ylim"), type = "n", ann = FALSE, axes = FALSE, asp = 1) # all the information of cells would be visited through `get.cell.meta.data` return(invisible(NULL)) } # == title # Reset the circular layout parameters # # == details # Because there are several # parameters for the circular plot which can only be set before `circos.initialize`. So before you draw the next # circular plot, you need to reset all these parameters. # # If you meet some errors when re-drawing the circular plot, try running this function and it will solve most of the problems. circos.clear = function() { resetGlobalVariable() if(circos.par("__omar__")) { circos.par("__omar__" = FALSE) par(mar = c(5.1, 4.1, 4.1, 2.1)) } tmpdir = circos.par("__tempdir__") circos.par(RESET = TRUE) circos.par("__tempdir__" = tmpdir) empty_env(circos.par("__tempenv__")) return(invisible(NULL)) } empty_env = function(env) { obj = ls(envir = env, all.names = TRUE) if(length(obj)) rm(list = obj, envir = env) } # == title # Get index for all sectors # # == details # It simply returns a vector of all sector index. get.all.sector.index = function() { .SECTOR.DATA = get(".SECTOR.DATA", envir = .CIRCOS.ENV) if(is.null(.SECTOR.DATA)) { return(character(0)) } else { return(as.vector(.SECTOR.DATA$factor)) } } # == title # Get index for all tracks # # == details # It simply returns a vector of all track index. get.all.track.index = function() { .CELL.DATA = get(".CELL.DATA", envir = .CIRCOS.ENV) if(is.null(.CELL.DATA)) { return(integer(0)) } else if(all(sapply(.CELL.DATA, length) == 0)) { return(integer(0)) } else { return(seq_len(max(sapply(.CELL.DATA[ which(sapply(.CELL.DATA, length) > 0) ], function(x) length(x))))) } } get.sector.data = function(sector.index = get.current.sector.index()) { sector.index = as.character(sector.index) .SECTOR.DATA = get(".SECTOR.DATA", envir = .CIRCOS.ENV) sector.data = as.vector(as.matrix(.SECTOR.DATA[.SECTOR.DATA[[1]] == sector.index, -1])) names(sector.data) = colnames(.SECTOR.DATA)[-1] return(sector.data) } # == title # Get current track index # # == value # Simply returns the numeric index for the current track. get.current.track.index = function() { .CURRENT.TRACK.INDEX = get(".CURRENT.TRACK.INDEX", envir = .CIRCOS.ENV) return(.CURRENT.TRACK.INDEX) } set.current.track.index = function(x) { .CURRENT.TRACK.INDEX = x assign(".CURRENT.TRACK.INDEX", .CURRENT.TRACK.INDEX, envir = .CIRCOS.ENV) return(invisible(NULL)) } # == title # Get current sector index # # == value # Simply returns the name of current sector get.current.sector.index = function() { .CURRENT.SECTOR.INDEX = get(".CURRENT.SECTOR.INDEX", envir = .CIRCOS.ENV) return(.CURRENT.SECTOR.INDEX) } set.current.sector.index = function(x) { .CURRENT.SECTOR.INDEX = get(".CURRENT.SECTOR.INDEX", envir = .CIRCOS.ENV) if(!x %in% get.all.sector.index()) { stop_wrap(paste0("Cannot find ", x, " in all available sector names.\n")) } .CURRENT.SECTOR.INDEX = x assign(".CURRENT.SECTOR.INDEX", .CURRENT.SECTOR.INDEX, envir = .CIRCOS.ENV) return(invisible(NULL)) } # == title # Set flag to current cell # # == param # -sector.index sector index # -track.index track index # # == details # After setting the current cell, all functions which need ``sector.index`` and ``track.index`` # arguments and are applied to the current cell do not need to specify the two arguments explicitly. # # == example # pdf(NULL) # circos.initialize(letters[1:8], xlim = c(0, 1)) # circos.track(ylim = c(0, 1)) # circos.info() # set.current.cell("b", 1) # circos.info() # circos.clear() # dev.off() set.current.cell = function(sector.index, track.index) { sector.index = as.character(sector.index) set.current.sector.index(sector.index) set.current.track.index(track.index) } get.cell.data = function(sector.index = get.current.sector.index(), track.index = get.current.track.index()) { sector.index = as.character(sector.index) .CELL.DATA = get(".CELL.DATA", envir = .CIRCOS.ENV) .CELL.DATA[[sector.index]][[track.index]] } set.cell.data = function(sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) { sector.index = as.character(sector.index) .CELL.DATA = get(".CELL.DATA", envir = .CIRCOS.ENV) .CELL.DATA[[sector.index]][[track.index]] = list(...) assign(".CELL.DATA", .CELL.DATA, envir = .CIRCOS.ENV) return(invisible(NULL)) } # whether cell in sector.index, track.index exists? has.cell = function(sector.index, track.index) { sector.index = as.character(sector.index) .CELL.DATA = get(".CELL.DATA", envir = .CIRCOS.ENV) if(sector.index %in% names(.CELL.DATA) && track.index <= length(.CELL.DATA[[sector.index]]) && !is.null(.CELL.DATA[[sector.index]][[track.index]])) { return(TRUE) } else { return(FALSE) } } # == title # Get information of the circular plot # # == param # -sector.index Which sectors you want to look at? It can be a vector. # -track.index Which tracks you want to look at? It can be a vector. # -plot Whether to add information on the plot. # # == details # It tells you the basic parameters for sectors/tracks/cells. If both ``sector.index`` # and ``track.index`` are set to ``NULL``, the function would print index for # all sectors and all tracks. If ``sector.index`` and/or ``track.index`` are set, # the function would print ``xlim``, ``ylim``, ``cell.xlim``, ``cell.ylim``, # ``xplot``, ``yplot``, ``cell.width``, ``cell.height``, ``track.margin`` and ``cell.padding`` for every cell in specified sectors and tracks. # Also, the function will print index of your current sector and current track. # # If ``plot`` is set to ``TRUE``, the function will plot the index of the sector and the track # for each cell on the figure. # # == seealso # https://jokergoo.github.io/circlize_book/book/circular-layout.html#circos-info-and-circos-clear circos.info = function(sector.index = NULL, track.index = NULL, plot = FALSE) { sectors = get.all.sector.index() tracks = get.all.track.index() if(plot) { for(i in seq_along(sectors)) { for(j in seq_along(tracks)) { cell.xlim = get.cell.meta.data("cell.xlim", sector.index = sectors[i], track.index = j) cell.ylim = get.cell.meta.data("cell.ylim", sector.index = sectors[i], track.index = j) circos.text(mean(cell.xlim), mean(cell.ylim), labels = paste(sectors[i], j, sep = ":"), sector.index = sectors[i], track.index = j, facing = "downward") } } } else { # just print the name and xlim for each sector if(is.null(sector.index) && is.null(track.index)) { if(length(sectors)) { cat("All your sectors:\n") print(sectors) } else { cat("No sector has been created\n") } cat("\n") if(length(tracks)) { cat("All your tracks:\n") print(tracks) } else { cat("No track has been created\n") } cat("\n") } else { if(is.null(track.index)) { track.index = tracks } else if(is.null(sector.index)) { sector.index = sectors } for(i in seq_along(sector.index)) { for(j in seq_along(track.index)) { cat("sector index: '", sector.index[i], "'\n", sep = "") cat("track index: ", track.index[j], "\n", sep = "") xlim = get.cell.meta.data('xlim', sector.index[i], track.index[j]) ylim = get.cell.meta.data('ylim', sector.index[i], track.index[j]) cell.xlim = get.cell.meta.data("cell.xlim", sector.index[i], track.index[j]) cell.ylim = get.cell.meta.data("cell.ylim", sector.index[i], track.index[j]) xplot = get.cell.meta.data("xplot", sector.index[i], track.index[j]) yplot = get.cell.meta.data("yplot", sector.index[i], track.index[j]) cell.width = get.cell.meta.data("cell.width", sector.index[i], track.index[j]) cell.height = get.cell.meta.data("cell.height", sector.index[i], track.index[j]) track.margin = get.cell.meta.data("track.margin", sector.index[i], track.index[j]) cell.padding = get.cell.meta.data("cell.padding", sector.index[i], track.index[j]) cat("xlim: [", xlim[1], ", ", xlim[2], "]\n", sep = "") cat("ylim: [", ylim[1], ", ", ylim[2], "]\n", sep = "") cat("cell.xlim: [", cell.xlim[1], ", ", cell.xlim[2], "]\n", sep = "") cat("cell.ylim: [", cell.ylim[1], ", ", cell.ylim[2], "]\n", sep = "") cat("xplot (degree): [", xplot[1], ", ", xplot[2], "]\n", sep = "") cat("yplot (radius): [", yplot[1], ", ", yplot[2], "]\n", sep = "") cat("cell.width (degree): ", cell.width, "\n", sep = "") cat("cell.height (radius): ", cell.height, "\n", sep = "") cat("track.margin: c(", track.margin[1], ", ", track.margin[2], ")\n", sep = "") cat("cell.padding: c(", cell.padding[1], ", ", cell.padding[2], ", ", cell.padding[3], ", ", cell.padding[4], ")\n", sep = "") cat("\n") } } } if(length(get.current.sector.index())) cat("Your current sector.index is ", get.current.sector.index(), "\n", sep = "") if(get.current.track.index() > 0) cat("Your current track.index is ", get.current.track.index(), "\n", sep = "") } } # == title # Label the sector index and the track index on each cell # # == details # This function is deprecated, please use `circos.info` instead. show.index = function() { circos.info(plot = TRUE) warning_wrap("`show.index` is deprecated, please use `circos.info` instead.") } # == title # Get the meta data of a cell # # == param # -name Only support one name at a time, see "details" section # -sector.index Index of the sector # -track.index Index of the track # # == details # The following meta information for a cell can be obtained: # # -``sector.index`` The name (index) for the sector # -``sector.numeric.index`` Numeric index for the sector # -``track.index`` Numeric index for the track # -``xlim`` Minimal and maximal values on the x-axis # -``ylim`` Minimal and maximal values on the y-axis # -``xrange`` Range of ``xlim``. It equals to ``xlim[2] - xlim[1]`` # -``yrange`` Range of ``ylim`` # -``xcenter`` Center of x-axis. It equals to ``(xlim[2] + xlim[1])/2`` # -``ycenter`` Center of y-axis # -``cell.xlim`` Minimal and maximal values on the x-axis extended by cell paddings # -``cell.ylim`` Minimal and maximal values on the y-axis extended by cell paddings # -``xplot`` Degrees for right and left borders of the cell. The values ignore the direction of the circular layout (i.e. whether it is clock wise or not). # -``yplot`` Radius for top and bottom borders of the cell. # -``cell.width`` Width of the cell, in degrees. # -``cell.height`` Height of the cell, simply ``yplot[2] - yplot[1]`` # -``cell.start.degree`` Same as ``xplot[1]`` # -``cell.end.degree`` Same as ``xplot[2]`` # -``cell.bottom.radius`` Same as ``yplot[1]`` # -``cell.top.radius`` Same as ``yplot[2]`` # -``track.margin`` Margin for the cell # -``cell.padding`` Padding for the cell # # The function is useful when using ``panel.fun`` in `circos.track` to # get detailed information of the current cell. # # == seealso # `CELL_META` is a short version of `get.cell.meta.data`. # # == example # sectors = letters[1:4] # circos.initialize(sectors, xlim = c(0, 1)) # circos.trackPlotRegion(ylim = c(0, 1), panel.fun = function(x, y) { # print(get.cell.meta.data("xlim")) # }) # print(get.cell.meta.data("xlim", sector.index = "a", track.index = 1)) # circos.clear() get.cell.meta.data = function(name, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { sector.index = as.character(sector.index) if(length(sector.index) == 0) { stop_wrap("It seems the circular plot has not been initialized.") } if(length(track.index) == 0) { stop_wrap("It seems the track has not been created.") } if(length(sector.index) != 1) { stop_wrap("Length of `sector.index` should only be 1.") } if(length(track.index) != 1) { stop_wrap("Length of `track.index` should only be 1.") } if(track.index == 0) { stop_wrap("It seems the track has not been created.") } if(!any(sector.index %in% get.all.sector.index())) { stop_wrap("Cannot find sector: ", sector.index, ".") } if(!any(track.index %in% get.all.track.index())) { stop_wrap("Cannot find track: ", track.index, ".") } current.sector.data = get.sector.data(sector.index) current.cell.data = get.cell.data(sector.index, track.index) cell.padding = current.cell.data$cell.padding if(length(name) != 1) { stop_wrap("``name`` should only have length of 1.") } if(name == "xlim") { return(current.cell.data$xlim) } else if(name == "ylim") { return(current.cell.data$ylim) } else if(name == "xrange") { xlim = current.cell.data$xlim return(xlim[2] - xlim[1]) } else if(name == "yrange") { ylim = current.cell.data$ylim return(ylim[2] - ylim[1]) } else if(name == "xcenter") { xlim = current.cell.data$xlim return((xlim[2] + xlim[1])/2) } else if(name == "ycenter") { ylim = current.cell.data$ylim return((ylim[2] + ylim[1])/2) } else if(name == "cell.xlim") { return(current.cell.data$cell.xlim) } else if(name == "cell.ylim") { return(current.cell.data$cell.ylim) } else if(name == "sector.numeric.index") { return(which(get.all.sector.index() == sector.index)) } else if(name == "sector.index") { return(sector.index) } else if(name == "track.index") { return(track.index) } else if(name == "xplot") { x = current.sector.data[c("start.degree", "end.degree")] names(x) = NULL return(x) } else if(name == "yplot") { return(c(current.cell.data$track.start - current.cell.data$track.height, current.cell.data$track.start)) } else if(name == "cell.width") { x = current.sector.data[c("start.degree", "end.degree")] return((x[1] - x[2])) } else if(name == "cell.height") { y = c(current.cell.data$track.start - current.cell.data$track.height, current.cell.data$track.start) return(y[2] - y[1]) } else if(name == "track.margin") { return(current.cell.data$track.margin) } else if(name == "cell.padding") { return(current.cell.data$cell.padding) } else if(name == "cell.start.degree") { x = current.sector.data["start.degree"] names(x) = NULL return(x) } else if(name == "cell.end.degree") { x = current.sector.data["end.degree"] names(x) = NULL return(x) } else if(name == "cell.bottom.radius") { return(current.cell.data$track.start - current.cell.data$track.height) } else if(name == "cell.top.radius") { return(current.cell.data$track.start) } else if(name == "bg.col") { return(current.cell.data$bg.col) } else if(name == "bg.border") { return(current.cell.data$bg.border) } else if(name == "bg.lty") { return(current.cell.data$bg.lty) } else if(name == "bg.lwd") { return(current.cell.data$bg.lwd) } else if(name == "track.height") { return(current.cell.data$track.height) } else { env = circos.par("__tempenv__") if(!is.null(env$track.meta.data)) { track.index = as.character(track.index) if(!is.null(env$track.meta.data[[track.index]])) { if(name %in% names(env$track.meta.data[[track.index]])) { return(env$track.meta.data[[track.index]][[name]]) } } } if(!is.null(env$sector.meta.data)) { if(!is.null(env$sector.meta.data[[sector.index]])) { if(name %in% names(env$sector.meta.data[[sector.index]])) { return(env$sector.meta.data[[sector.index]][[name]]) } } } } return(NULL) } add.track.meta.data = function(name, value, track.index = get.current.track.index()) { env = circos.par("__tempenv__") if(is.null(env$track.meta.data)) env$track.meta.data = list() track.index = as.character(track.index) if(is.null(env$track.meta.data[[track.index]])) env$track.meta.data[[track.index]] = list() env$track.meta.data[[track.index]][[name]] = value } add.sector.meta.data = function(name, value, sector.index = get.current.sector.index()) { sector.index = as.character(sector.index) env = circos.par("__tempenv__") if(is.null(env$sector.meta.data)) env$sector.meta.data = list() if(is.null(env$sector.meta.data[[sector.index]])) env$sector.meta.data[[sector.index]] = list() env$sector.meta.data[[sector.index]][[name]] = value } # == title (variable:CELL_META) # Easy way to get meta data in the current cell # # == details # The variable `CELL_META` can only be used to get meta data of the "current" cell. # Basically you can simply replace e.g. ``get.cell.meta.data("sector.index")`` to ``CELL_META$sector.index``. # # == seealso # `get.cell.meta.data` # # == example # pdf(NULL) # circos.initialize("a", xlim = c(0, 1)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # print(CELL_META$sector.index) # print(CELL_META$xlim) # }) # print(names(CELL_META)) # dev.off() CELL_META = "don't use me directly" class(CELL_META) = "CELL_META" # == title # Names of all meta data in the current cell # # == param # -x use `CELL_META`. # # == example # names(CELL_META) names.CELL_META = function(x) { sector.index = get.current.sector.index() track.index = get.current.track.index() nm = c("xlim", "ylim", "xrange", "yrange", "xcenter", "ycenter", "cell.xlim", "cell.ylim", "sector.numeric.index", "sector.index", "track.index", "xplot", "yplot", "cell.width", "cell.height", "track.margin", "cell.padding", "cell.start.degree", "cell.end.degree", "cell.bottom.radius", "cell.top.radius", "bg.col", "bg.border", "bg.lty", "bg.lwd", "track.height") env = circos.par("__tempenv__") if(track.index > 0) { if(!is.null(env$track.meta.data)) { track.index = as.character(track.index) if(!is.null(env$track.meta.data[[track.index]])) { nm = c(nm, names(env$track.meta.data[[track.index]])) } } } if(!is.null(sector.index)) { if(!is.null(env$sector.meta.data)) { if(!is.null(env$sector.meta.data[[sector.index]])) { nm = c(nm, names(env$sector.meta.data[[sector.index]])) } } } return(nm) } # == title # Easy to way to get meta data in the current cell # # == param # -x name of the variable should be "CELL_META" # -name name of the cell meta name # # == details # The variable `CELL_META` can only be used to get meta data of the "current" cell. # Basically you can simply replace e.g. ``get.cell.meta.data("sector.index")`` to ``CELL_META$sector.index``. # # == seealso # `get.cell.meta.data` "$.CELL_META" = function(x, name) { get.cell.meta.data(name) } # == title # Print CELL_META # # == param # -x input # -... additional parameters # print.CELL_META = function(x, ...) { cat(paste(strwrap("Please use in a form of `CELL_META$name` where `name` should be supported in `get.cell.meta.data()`. Type `names(CELL_META)` for supported names.\n"), collapse = "\n"), "\n") } circlize/R/circos.heatmap.R0000644000176200001440000005150614236510242015310 0ustar liggesusers # returns a list of named data frames circos.heatmap.format.input = function(mat, split) { if(is.atomic(mat) && !is.matrix(mat)) { if(length(mat) == 1) { if(!is.null(split)) { mat = matrix(rep(mat, length(split)), ncol = 1) } } else { mat = matrix(mat, ncol = 1) } } if(is.data.frame(mat)) mat = as.matrix(mat) if(!is.factor(split)) { if(is.numeric(split)) split = as.character(split) split = factor(split, levels = unique(split)) } subset_list = NULL if(is.matrix(mat)) { if(is.null(split)) { if(is.circos.heatmap.cached()) { # qqcat("use the cached split\n") env = circos.par("__tempenv__") split = env$circos.heatmap.split } } if(is.null(split)) { # this does not run because split is not NULL in upstream functions mat_list = list(mat = mat) subset_list = list(mat = 1:nrow(mat)) } else { mat_list = lapply(split(seq_len(nrow(mat)), split), function(ind) mat[ind, , drop = FALSE]) subset_list = split(seq_len(nrow(mat)), split) le = levels(split) mat_list = mat_list[le] subset_list = subset_list[le] } } else { stop_wrap("Input should be a vector or a matrix.") } n = length(mat_list) if(is.null(names(mat_list))) { names(mat_list) = paste0("mat", 1:n) } attr(mat_list, "subset_list") = subset_list mat_list } is.circos.heatmap.cached = function() { env = circos.par("__tempenv__") identical(env$circos.heatmap.initialized, TRUE) } # == title # Initialize circular heatmaps # # == param # -mat A matrix or a vector. The vector is transformed as a one-column matrix. # -split A categorical variable. It splits the matrix into a list of matrices. # -cluster whether to apply clustering on rows. The value can also be a ``dendrogram``/``hclust`` object or other objects that # can be converted to with `stats::as.dendrogram`. # -clustering.method Clustering method, pass to `stats::hclust`. # -distance.method Distance method, pass to `stats::dist`. # -dend.callback A callback function that is applied to the dendrogram in every sector. # -cell_width Relative widths of heatmap cells. # # == seealso # https://jokergoo.github.io/2020/05/21/make-circular-heatmaps/ # circos.heatmap.initialize = function(mat, split = NULL, cluster = TRUE, clustering.method = "complete", distance.method = "euclidean", dend.callback = function(dend, m, si) reorder(dend, rowMeans(m)), cell_width = rep(1, nrow(mat))) { if(!is.matrix(mat)) { if(is.vector(mat) && is.atomic(mat)) { mat = matrix(mat, ncol = 1) } else if(is.data.frame(mat)) { mat = as.matrix(mat) } else { stop_wrap("The input should be a matrix or a vector.") } } if(!is.matrix(mat)) { if(is.vector(mat)) { mat = matrix(mat, ncol = 1) } } if(length(cell_width) == 1) { cell_width = rep(cell_width, nrow(mat)) } else if(length(cell_width) < nrow(mat)) { cell_width = rep(cell_width, times = nrow(mat))[1:nrow(mat)] } cell_width = cell_width/sum(cell_width)*nrow(mat) if(identical(cluster, NA) || identical(cluster, NULL)) cluster = FALSE if(!(identical(cluster, TRUE) || identical(cluster, FALSE))) { cluster = as.dendrogram(cluster) cluster_is_dendrogram = TRUE } else { if(identical(cluster, TRUE) && !is.null(split)) { if(length(split) == 1) { cluster = as.dendrogram(hclust(dist(mat, method = distance.method), method = clustering.method)) cluster_is_dendrogram = TRUE } else { cluster_is_dendrogram = FALSE } } else { cluster_is_dendrogram = FALSE } } if(cluster_is_dendrogram) { if(is.null(split)) { dend_list = list(cluster) split2 = rep("group", nrow(mat)) names(dend_list) = split2[1] } else { if(length(split) > 1) { stop_wrap("When `cluster` is specified as a clustering object, `split` can only be a single number.") } else { split2 = paste0("group", cutree(as.hclust(cluster), split)) dend_list = cut_into_k_dendrograms(cluster, split) names(dend_list) = sapply(dend_list, function(d) { split2[order.dendrogram(d)][1] }) "order.dendrogram<-" = getFromNamespace("order.dendrogram<-", ns = "ComplexHeatmap") dend_list = lapply(dend_list, function(d) { order.dendrogram(d) = rank(order.dendrogram(d)) d }) } } } else { if(is.null(split)) { split2 = rep("group", nrow(mat)) } else { split2 = split } } mat_list = circos.heatmap.format.input(mat, split2) cell_width_list = split(cell_width, split2) cell_width_list = cell_width_list[names(mat_list)] n = length(mat_list) subset_list = attr(mat_list, "subset_list") if(exists("dend_list")) { dend_list = dend_list[names(mat_list)] for(nm in names(dend_list)) { dend_list[[nm]] = dend.callback(dend_list[[nm]], mat_list[[nm]], nm) } } cell.padding = c(0, 0, 0, 0) track.margin = c(0.02, 0) gap.degree = 2 if(!identical(circos.par("cell.padding"), c(0.02, 1, 0.02, 1))) { cell.padding = circos.par("cell.padding") } if(!identical(circos.par("track.margin"), c(0.01, 0.01))) { track.margin = circos.par("track.margin") } if(!identical(circos.par("gap.degree"), 1)) { gap.degree = circos.par("gap.degree") } circos.par(cell.padding = cell.padding, track.margin = track.margin, gap.degree = gap.degree) circos.initialize(names(mat_list), xlim = cbind(rep(0, n), sapply(cell_width_list, sum))) env = circos.par("__tempenv__") if(cluster_is_dendrogram) { for(se in get.all.sector.index()) { dend = dend_list[[se]] od = order.dendrogram(dend) cw = cell_width_list[[se]][od] od2 = order(od) add.sector.meta.data("cell_width", cw[od2], sector.index = se) add.sector.meta.data("cell_middle", (cumsum(cw) - cw/2)[od2], sector.index = se) dend = ComplexHeatmap::adjust_dend_by_x(dend, cumsum(cw) - cw/2) add.sector.meta.data("row_dend", dend, sector.index = se) add.sector.meta.data("dend", dend, sector.index = se) add.sector.meta.data("row_order", od, sector.index = se) add.sector.meta.data("order", od, sector.index = se) if(!is.null(subset_list)) { add.sector.meta.data("subset", subset_list[[se]], sector.index = se) } } env$circos.heatmap.cluster = TRUE } else { if(is.character(mat_list[[1]])) cluster = FALSE if(cluster) { # qqcat("perform clustering.\n") dend_list = list() for(nm in names(mat_list)) { m = mat_list[[nm]] dend = as.dendrogram(hclust(dist(m, method = distance.method), method = clustering.method)) dend_list[[nm]] = dend.callback(dend, m, nm) } for(se in get.all.sector.index()) { dend = dend_list[[se]] od = order.dendrogram(dend) cw = cell_width_list[[se]][od] od2 = order(od) add.sector.meta.data("cell_width", cw[od2], sector.index = se) add.sector.meta.data("cell_middle", (cumsum(cw) - cw/2)[od2], sector.index = se) dend = ComplexHeatmap::adjust_dend_by_x(dend, cumsum(cw) - cw/2) add.sector.meta.data("row_dend", dend, sector.index = se) add.sector.meta.data("dend", dend, sector.index = se) add.sector.meta.data("row_order", od, sector.index = se) add.sector.meta.data("order", od, sector.index = se) if(!is.null(subset_list)) { add.sector.meta.data("subset", subset_list[[se]], sector.index = se) } } env$circos.heatmap.cluster = TRUE } else { # qqcat("use the natural order.\n") for(se in get.all.sector.index()) { add.sector.meta.data("row_order", 1:nrow(mat_list[[se]]), sector.index = se) add.sector.meta.data("order", 1:nrow(mat_list[[se]]), sector.index = se) if(!is.null(subset_list)) { add.sector.meta.data("subset", subset_list[[se]], sector.index = se) } cw = cell_width_list[[se]] add.sector.meta.data("cell_width", cw, sector.index = se) add.sector.meta.data("cell_middle", cumsum(cw) - cw/2, sector.index = se) } env$circos.heatmap.cluster = FALSE } } env$circos.heatmap.split = split2 env$circos.heatmap.initialized = TRUE } cut_into_k_dendrograms = function(dend, k) { if(!requireNamespace("ComplexHeatmap", quietly = TRUE)) { stop_wrap("You need ComplexHeatmap package to process the pre-defined dendrogram. Please install it from Bioconductor.") } dl = getFromNamespace("cut_dendrogram", ns = "ComplexHeatmap")(dend, k)$lower dl } # e.g. to check number of rows, split varaible, ... circos.heatmap.validate = function(mat_list) { # assume the heatmap is already initialized env = circos.par("__tempenv__") order_list = lapply(env$sector.meta.data, function(x) { x$row_order }) if(!identical(unname(sapply(mat_list, nrow)), unname(sapply(order_list, length)))) { stop_wrap("The numbers of total rows and in each group are different from the cached values. Maybe you should 1. provide the matrix with the same number of rows as the previous ones, 2. don't set `split` because only the cached one is used, or 3. apply `circos.clear()` if you are making a new plot.") } } # == title # Make circular heatmaps # # == param # -mat A matrix or a vector. The vector is transformed as a one-column matrix. # -split A categorical variable. It splits the matrix into a list of matrices. # -col If the values in the matrices are continuous, the color should be a color mapping generated by # `colorRamp2`. If the values are characters, the color should be a named color vector. # -na.col Color for ``NA`` values. # -cell.border Border color of cells. A single scalar. # -cell.lty Line type of cell borders. A single scalar. # -cell.lwd Line width of cell borders. A single scalar. # -bg.border Color for background border. # -bg.lty Line type of the background border. # -bg.lwd Line width of the background border. # -ignore.white Whether to draw the white color? # -cluster whether to apply clustering on rows. The value can also be a ``dendrogram``/``hclust`` object or other objects that # can be converted to with `stats::as.dendrogram`. # -clustering.method Clustering method, pass to `stats::hclust`. # -distance.method Distance method, pass to `stats::dist`. # -dend.callback A callback function that is applied to the dendrogram in every sector. # -dend.side Side of the dendrograms relative to the heatmap track. # -dend.track.height Track height of the dendrograms. # -rownames.side Side of the row names relative to the heatmap track. # -rownames.cex Cex of row names. # -rownames.font Font of row names. # -rownames.col Color of row names. # -show.sector.labels Whether to show sector labels. # -cell_width Relative widths of heatmap cells. # -... Pass to `circos.track` which draws the heatmap track. # # == seealso # https://jokergoo.github.io/2020/05/21/make-circular-heatmaps/ # # == example # \donttest{ # set.seed(123) # mat1 = rbind(cbind(matrix(rnorm(50*5, mean = 1), nr = 50), # matrix(rnorm(50*5, mean = -1), nr = 50)), # cbind(matrix(rnorm(50*5, mean = -1), nr = 50), # matrix(rnorm(50*5, mean = 1), nr = 50)) # ) # rownames(mat1) = paste0("R", 1:100) # colnames(mat1) = paste0("C", 1:10) # mat1 = mat1[sample(100, 100), ] # randomly permute rows # split = sample(letters[1:5], 100, replace = TRUE) # spilt = factor(split, levels = letters[1:5]) # col_fun1 = colorRamp2(c(-2, 0, 2), c("blue", "white", "red")) # circos.heatmap(mat1, split = split, col = col_fun1) # circos.clear() # } circos.heatmap = function(mat, split = NULL, col, na.col = "grey", cell.border = NA, cell.lty = 1, cell.lwd = 1, bg.border = NA, bg.lty = par("lty"), bg.lwd = par("lwd"), ignore.white = is.na(cell.border), cluster = TRUE, clustering.method = "complete", distance.method = "euclidean", dend.callback = function(dend, m, si) reorder(dend, rowMeans(m)), dend.side = c("none", "outside", "inside"), dend.track.height = 0.1, rownames.side = c("none", "outside", "inside"), rownames.cex = 0.5, rownames.font = par("font"), rownames.col = "black", show.sector.labels = FALSE, cell_width = rep(1, nrow(mat)), ...) { if(!is.matrix(mat)) { if(is.vector(mat) && is.atomic(mat)) { mat = matrix(mat, ncol = 1) } else if(is.data.frame(mat)) { mat = as.matrix(mat) } else { stop_wrap("The input should be a matrix or a vector.") } } if(!is.circos.initialized()) { cell.padding = c(0, 0, 0, 0) track.margin = c(0.02, 0) gap.degree = 2 if(!identical(circos.par("cell.padding"), c(0.02, 1, 0.02, 1))) { cell.padding = circos.par("cell.padding") } if(!identical(circos.par("track.margin"), c(0.01, 0.01))) { track.margin = circos.par("track.margin") } if(!identical(circos.par("gap.degree"), 1)) { gap.degree = circos.par("gap.degree") } circos.par(cell.padding = cell.padding, track.margin = track.margin, gap.degree = gap.degree) circos.heatmap.initialize(mat, split = split, cluster = cluster, clustering.method = clustering.method, distance.method = distance.method, dend.callback = dend.callback, cell_width = cell_width) } env = circos.par("__tempenv__") split = env$circos.heatmap.split mat_list = circos.heatmap.format.input(mat, split) circos.heatmap.validate(mat_list) # qqcat("making the heatmap\n") dend.side = match.arg(dend.side) rownames.side = match.arg(rownames.side) if(dend.side == rownames.side && dend.side %in% c("inside", "outside")) { stop_wrap("dendrograms and row names cannot be on the same side.") } if(!env$circos.heatmap.cluster) { dend.side = "none" } if(dend.side == "outside") { dend_list = lapply(env$sector.meta.data, function(x) { x$row_dend }) max_height = max(sapply(dend_list, function(x) attr(x, "height"))) circos.track(ylim = c(0, max_height), bg.border = NA, track.height = dend.track.height, panel.fun = function(x, y) { sector.numeric.index = get.cell.meta.data("sector.numeric.index") dend = dend_list[[sector.numeric.index]] circos.dendrogram(dend, max_height = max_height, facing = "inside", use_x_attr = TRUE) }) } nr = nrow(mat) if(length(rownames.cex) == 1) rownames.cex = rep(rownames.cex, nr) if(length(rownames.font) == 1) rownames.font = rep(rownames.font, nr) if(length(rownames.col) == 1) rownames.col = rep(rownames.col, nr) if(!is.null(rownames(mat))) { subset_list = lapply(env$sector.meta.data, function(x) { x$subset }) rownames_track_height = max(sapply(subset_list, function(ind) { max(strwidth(rownames(mat)[ind], cex = rownames.cex[ind], font = rownames.font[ind])) })) } if(rownames.side == "outside") { if(!is.null(rownames(mat))) { circos.track(ylim = c(0, 1), bg.border = NA, track.height = rownames_track_height, panel.fun = function(x, y) { sector.numeric.index = CELL_META$sector.numeric.index m = mat_list[[sector.numeric.index]] od = CELL_META$row_order nr = nrow(m) if(!is.null(rownames(m))) { circos.text(CELL_META$cell_middle[od], rep(0, nr), rownames(m)[od], cex = rownames.cex[CELL_META$subset][od], font = rownames.font[CELL_META$subset][od], col = rownames.col[CELL_META$subset][od], facing = "clockwise", niceFacing = TRUE, adj = c(0, 0.5)) } }) } } nr = nrow(mat_list[[1]]) nc = ncol(mat_list[[1]]) if(missing(col)) { stop_wrap("You should provide user-defined colors. If the values are continuous in the matrix, please set a color mapping function generated by `colorRamp2()`. If the values are characters, please set a named color vector.") } if(is.function(col)) { col_fun = function(x) { attr = attributes(x) l = is.na(x) v = character(length(x)) v[!l] = col(x[!l]) v[l] = na.col attributes(v) = attr v } } else { if(is.null(names(col))) { stop_wrap('`col` should be a named vector.') } col_fun = function(x) { attr = attributes(x) v = col[x] v[is.na(v)] = na.col attributes(v) = attr v } } circos.track(ylim = c(0, nc), bg.border = NA, panel.fun = function(x, y) { sector.numeric.index = CELL_META$sector.numeric.index m = mat_list[[sector.numeric.index]] od = CELL_META$row_order m2 = m[od, , drop = FALSE] col_mat = col_fun(m2) if(!grepl("#\\w\\w\\w\\w\\w\\w", col_mat[1])) { col_mat_attr = attributes(col_mat) col_mat = as.vector(col_mat) col_rgb = col2rgb(col_mat, alpha = TRUE) col_mat = rgb(col_rgb[1, ], col_rgb[2, ], col_rgb[3, ], alpha = col_rgb[4, ], maxColorValue = 255) attributes(col_mat) = col_mat_attr } nr = nrow(m2) nc = ncol(m2) if(ignore.white) { if(any(grepl("#FFFFFF", col_mat)) && !is.na(cell.border)) { stop_wrap("`ignore.white` must be set to `FALSE` when `cell.border` is set.") } } for(i in 1:nc) { if(ignore.white) { l = grepl("#FFFFFF", col_mat[, i]) # white colors if(all(l)) { # no nothing } else { # qqcat("@{sum(l)} white rectangles are not drawn.\n") if(is.na(cell.border)) { cell.border2 = col_mat[, i][!l] } else { cell.border2 = cell.border } circos.rect( (CELL_META$cell_middle - CELL_META$cell_width/2)[od][!l], (rep(nc - i, nr))[!l], (CELL_META$cell_middle + CELL_META$cell_width/2)[od][!l], (rep(nc - i + 1, nr))[!l], border = cell.border2, lty = cell.lty, lwd = cell.lwd, col = col_mat[, i][!l]) } } else { if(is.na(cell.border)) { cell.border2 = col_mat[, i] } else { cell.border2 = cell.border } circos.rect( (CELL_META$cell_middle - CELL_META$cell_width/2)[od], rep(nc - i, nr), (CELL_META$cell_middle + CELL_META$cell_width/2)[od], rep(nc - i + 1, nr), border = cell.border2, col = col_mat[, i], lty = cell.lty, lwd = cell.lwd) } } if(!is.na(bg.border)) { circos.rect(CELL_META$cell.xlim[1], CELL_META$cell.ylim[1], CELL_META$cell.xlim[2], CELL_META$cell.ylim[2], border = bg.border, lwd = bg.lwd, lty = bg.lty, col = NA) } }, ...) if(dend.side == "inside") { dend_list = lapply(env$sector.meta.data, function(x) { x$row_dend }) max_height = max(sapply(dend_list, function(x) attr(x, "height"))) circos.track(ylim = c(0, max_height), bg.border = NA, track.height = dend.track.height, panel.fun = function(x, y) { sector.numeric.index = get.cell.meta.data("sector.numeric.index") dend = dend_list[[sector.numeric.index]] circos.dendrogram(dend, max_height = max_height, facing = "outside", use_x_attr = TRUE) }) } if(rownames.side == "inside") { if(!is.null(rownames(mat))) { circos.track(ylim = c(0, 1), bg.border = NA, track.height = rownames_track_height, panel.fun = function(x, y) { sector.numeric.index = CELL_META$sector.numeric.index m = mat_list[[sector.numeric.index]] od = CELL_META$row_order nr = nrow(m) if(!is.null(rownames(m))) { circos.text(CELL_META$cell_middle[od], rep(1, nr), rownames(m)[od], cex = rownames.cex[CELL_META$subset][od], font = rownames.font[CELL_META$subset][od], col = rownames.col[CELL_META$subset][od], facing = "clockwise", niceFacing = TRUE, adj = c(1, 0.5)) } }) } } if(show.sector.labels) { circos.track(track.index = 1, panel.fun = function(x, y) { circos.text(CELL_META$xcenter, CELL_META$cell.ylim[2] + convert_y(2, "mm"), CELL_META$sector.index, facing = "bending.inside", cex = 0.8, adj = c(0.5, 0), niceFacing = TRUE) }, bg.border = NA) } } # == title # Draw a link between two matrix rows in the circular heatmap # # == param # -row_from The row index where the link starts. The value should be length 1. If # you want to draw multiple links, put the function in a ``for`` loop. # -row_to The row index where the link ends. # -... Pass to `circos.link`. # # == example # \donttest{ # set.seed(123) # mat = matrix(rnorm(100*10), nrow = 100) # rownames(mat) = paste0("R", 1:100) # col_fun = colorRamp2(c(-2, 0, 2), c("blue", "white", "red")) # circos.heatmap(mat, col = col_fun, rownames.side = "outside") # circos.heatmap.link(10, 60) # circos.clear() # # split = sample(letters[1:5], 100, replace = TRUE) # circos.heatmap(mat, col = col_fun, split = split, # rownames.side = "outside") # circos.heatmap.link(10, 60) # circos.clear() # } circos.heatmap.link = function(row_from, row_to, ...) { if(length(row_from) != 1) { stop_wrap("Length of `row_from` should be one.") } if(length(row_to) != 1) { stop_wrap("Length of `row_to` should be one.") } env = env = circos.par("__tempenv__") split = env$circos.heatmap.split group1 = split[ row_from ] group2 = split[ row_to ] if(is.na(group1)) { stop_wrap(paste0("Cannot find matrix row with index ", row_from)) } if(is.na(group2)) { stop_wrap(paste0("Cannot find matrix row with index ", row_to)) } subset = get.cell.meta.data("subset", sector.index = group1) row_order = get.cell.meta.data("row_order", sector.index = group1) x1 = which(subset[row_order] == row_from) subset = get.cell.meta.data("subset", sector.index = group2) row_order = get.cell.meta.data("row_order", sector.index = group2) x2 = which(subset[row_order] == row_to) circos.link(group1, x1 - 0.5, group2, x2 - 0.5, ...) } circlize/R/utils.R0000755000176200001440000010567014236526037013566 0ustar liggesusers# == title # Convert to polar coordinate system # # == param # -x Data points on x-axis. The value can also be a two-column matrix/data frame if you put x and y data points into one variable. # -y Data points on y-axis. # -sector.index Index for the sector to convert the coordinates. # -track.index Index for the track to convert the coordinates. # # == details # This is the core function in the package. It transform data points from data coordinate system (in a specific cell) to the polar coordinate system. # # == values # A matrix with two columns (``theta`` and ``rou``). ``rou`` is measured in degree. # # == example # pdf(NULL) # sectors = c("a", "b") # circos.initialize(sectors, xlim = c(0, 1)) # circos.track(ylim = c(0, 1)) # # x = 0.5, y = 0.5 in sector a and track 1 # circlize(0.5, 0.5, sector.index = "a", track.index = 1) # circos.clear() # dev.off() circlize = function( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { if(missing(y)) { if(ncol(x) >= 2) { y = x[, 2] x = x[, 1] } } sector.data = get.sector.data(sector.index) theta = sector.data["start.degree"] - (x - sector.data["min.value"]) / (sector.data["max.value"] - sector.data["min.value"]) * abs(sector.data["start.degree"] - sector.data["end.degree"]) if(!circos.par("xaxis.clock.wise")) { theta = sector.data["start.degree"] - theta + sector.data["end.degree"] } if(track.index == 0) { rou = rep(1, length(theta)) } else { cell.data = get.cell.data(sector.index, track.index) cell.ylim = get.cell.meta.data("cell.ylim", sector.index, track.index) y.range = cell.ylim[2] - cell.ylim[1] rou = cell.data$track.start - (cell.ylim[2] - y) / y.range * cell.data$track.height } m = cbind(theta, rou) colnames(m) = c("theta", "rou") rownames(m) = NULL return(m) } # == title # Convert to data coordinate system # # == param # -x degree values. The value can also be a two-column matrix/data frame if you put x and y data points into one variable. # -y distance to the circle center (the radius) # -sector.index Index for the sector where the data coordinate is used # -track.index Index for the track where the data coordinate is used # # == details # This is the reverse function of `circlize`. It transform data points from polar coordinate system to a specified data coordinate system. # # == values # A matrix with two columns (``x`` and ``y``) # # == example # pdf(NULL) # sectors = letters[1:4] # circos.initialize(sectors, xlim = c(0, 1)) # circos.trackPlotRegion(ylim = c(0, 1)) # reverse.circlize(c(30, 60), c(0.9, 0.8)) # reverse.circlize(c(30, 60), c(0.9, 0.8), sector.index = "d", track.index = 1) # reverse.circlize(c(30, 60), c(0.9, 0.8), sector.index = "a", track.index = 1) # circos.clear() # dev.off() reverse.circlize = function( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { if(missing(y)) { if(ncol(x) >= 2) { y = x[, 2] x = x[, 1] } } theta = x rou = y sector.data = get.sector.data(sector.index) if(track.index > 0) { cell.data = get.cell.data(sector.index, track.index) cell.ylim = get.cell.meta.data("cell.ylim", sector.index, track.index) } x = (sector.data["start.degree"] - theta) / abs(sector.data["end.degree"] - sector.data["start.degree"]) * (sector.data["max.value"] - sector.data["min.value"]) + sector.data["min.value"] if(!circos.par("xaxis.clock.wise")) { x = sector.data["max.value"] - x + sector.data["min.value"] } if(track.index > 0) { y = (cell.data$track.height - (cell.data$track.start - rou)) / cell.data$track.height * (cell.ylim[2] - cell.ylim[1]) + cell.ylim[1] } else { y = rep(1, length(x)) } m = cbind(x, y) colnames(m) = c("x", "y") rownames(m) = NULL return(m) } polar2Cartesian = function(d) { theta = as.radian(d[, 1]) rou = d[, 2] x = rou * cos(theta) y = rou * sin(theta) return(cbind(x, y)) } # expand breakpoints in two points to draw an arc # x and y are transformed and re-mapped points lines.expand = function(x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { sector.data = get.sector.data(sector.index) cell.data = get.cell.data(sector.index, track.index) nx = x[1] ny = y[1] for(i in seq_along(x)) { if(i == 1) { next } if(is.na(x[i]) || is.na(y[i])) { nx = c(nx, NA) ny = c(ny, NA) next } if(is.na(x[i-1]) || is.na(y[i-1])) { next } td = cbind(c(x[i-1], x[i]), c(y[i-1], y[i])) td = td[order(td[, 1]), ] td2 = circlize(td[, 1], td[, 2], sector.index = sector.index, track.index = track.index) a = as.radian(abs(td2[1, 1] - td2[2, 1])) b = abs(td2[1, 2] - td2[2, 2]) l = sqrt(a^2 + b^2) ncut = l/ (2*pi/circos.par("unit.circle.segments")) ncut = floor(ncut) if(ncut) { j = seq_len(ncut) / (ncut + 1) nx = c(nx, x[i-1] + (x[i] - x[i-1])*j, x[i]) ny = c(ny, y[i-1] + (y[i] - y[i-1])*j, y[i]) } else { nx = c(nx, x[i]) ny = c(ny, y[i]) } } d = cbind(nx, ny) return(d) } # if x has same length as levels of factors # the order of x is same as the order of levels recycle.with.factors = function(x, factors) { le = levels(factors) if(length(x) == 1) { x = rep(x, length(factors)) } else if(length(x) == length(le)) { b = factors levels(b) = x x = as.vector(b) } return(x) } recycle.with.levels = function(x, levels) { if(length(x) == 1) { x = rep(x, length(levels)) } return(x) } check.track.position = function(track.index, track.start, track.height) { track.margin = circos.par("track.margin") if(track.start - track.height - track.margin[2] < 0 || track.start - track.height < 0 || track.start < 0) { stop_wrap(paste("not enough space for cells at track index '", track.index, "'.\n", sep = "")) } if(track.start - track.margin[1] - track.height - track.margin[2] < 0) { stop_wrap(paste("not enough space for bottom margin of cells at track index '", track.index, "'.\n", sep = "")) } if(track.index > 1) { if(track.start > get.cell.meta.data("cell.bottom.radius", track.index = track.index - 1)) { stop_wrap("Track overlaps with previous track.\n") } } } check.points.position = function(x, y, sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index")) { cell.xlim = get.cell.meta.data("cell.xlim", sector.index, track.index) cell.ylim = get.cell.meta.data("cell.ylim", sector.index, track.index) l = is.na(x) | is.na(y) x = x[!l] y = y[!l] xrange = cell.xlim[2] - cell.xlim[1] yrange = cell.ylim[2] - cell.ylim[1] l1 = x < cell.xlim[1] | x > cell.xlim[2] l2 = y < cell.ylim[1] | y > cell.ylim[2] l = l1 | l2 if(sum(l) && circos.par("points.overflow.warning")) { message_wrap(paste("Note: ", sum(l), " point", ifelse(sum(l) == 1, " is", "s are"), " out of plotting region in sector '", sector.index, "', track '", track.index, "'.\n", sep = "")) } return(invisible(NULL)) } as.radian = function(degree) { return(degree/180*pi) } as.degree = function(radian) { return(radian/pi*180) } # == title # Color interpolation # # == param # -breaks A vector indicating numeric breaks # -colors A vector of colors which correspond to values in ``breaks`` # -transparency A single value in ``[0, 1]``. 0 refers to no transparency and 1 refers to full transparency # -space color space in which colors are interpolated. Value should be one of "RGB", "LAB", "XYZ", "sRGB", "LUV", see `colorspace::color-class` for detail. # -hcl_palette Name of the HCL palette. Value should be supported in `grDevices::hcl.pals`. # -reverse Whether should the colors in ``hcl_palette`` be reversed. # # == details # Colors are linearly interpolated according to break values and corresponding colors through CIE Lab color space (`colorspace::LAB`) by default. # Values exceeding breaks will be assigned with corresponding maximum or minimum colors. # # == values # It returns a function which accepts a vector of numeric values and returns interpolated colors. # # == seealso # `col2value` converts back to the original values by providing the color mapping function generated by `colorRamp2`. # # == example # col_fun = colorRamp2(c(-1, 0, 1), c("green", "white", "red")) # col_fun(c(-2, -1, -0.5, 0, 0.5, 1, 2)) colorRamp2 = function(breaks, colors, transparency = 0, space = "LAB", hcl_palette = NULL, reverse = FALSE) { breaks_o = breaks if(!is.null(hcl_palette)) { breaks = sort(breaks) if(length(breaks) == 2) { breaks2 = seq(breaks[1], breaks[2], length = 1000) colors = hcl.colors(1000, palette = hcl_palette, rev = reverse) } else { nb = length(breaks) nl = ceiling(1000/nb) breaks2 = seq(breaks[1], breaks[2], length = nl) for(i in 2:(nb-1)) { breaks2 = c(breaks2, seq(breaks[i], breaks[i+1], length = nl)[-1]) } colors = hcl.colors(length(breaks2), palette = hcl_palette, rev = reverse) } breaks_o = breaks breaks = breaks2 } if(length(breaks) != length(colors)) { stop_wrap("Length of `breaks` should be equal to `colors`.\n") } od = order(breaks) breaks = breaks[od] colors = colors[od] l = duplicated(breaks) breaks = breaks[!l] colors = colors[!l] if(length(breaks) == 1) { stop_wrap("You should have at least two distinct break values.") } if(! space %in% c("RGB", "LAB", "XYZ", "sRGB", "LUV", "HLS")) { stop_wrap("`space` should be in 'RGB', 'LAB', 'XYZ', 'sRGB', 'LUV'") } colors = t(col2rgb(colors)/255) if(space == "LUV") { i = which(apply(colors, 1, function(x) all(x == 0))) colors[i, ] = 1e-5 } transparency = 1-ifelse(transparency > 1, 1, ifelse(transparency < 0, 0, transparency))[1] transparency_str = sprintf("%X", round(transparency*255)) if(nchar(transparency_str) == 1) transparency_str = paste0("0", transparency_str) fun = function(x = NULL, return_rgb = FALSE, max_value = 1) { if(is.null(x)) { stop_wrap("Please specify `x`\n") } att = attributes(x) if(is.data.frame(x)) x = as.matrix(x) l_na = is.na(x) if(all(l_na)) { return(rep(NA, length(l_na))) } x2 = x[!l_na] x2 = ifelse(x2 < breaks[1], breaks[1], ifelse(x2 > breaks[length(breaks)], breaks[length(breaks)], x2 )) ibin = .bincode(x2, breaks, right = TRUE, include.lowest = TRUE) res_col = character(length(x2)) for(i in unique(ibin)) { l = ibin == i res_col[l] = .get_color(x2[l], breaks[i], breaks[i+1], colors[i, ], colors[i+1, ], space = space) } res_col = paste(res_col, transparency_str[1], sep = "") if(return_rgb) { res_col = t(col2rgb(as.vector(res_col), alpha = TRUE)/255) return(res_col) } else { res_col2 = character(length(x)) res_col2[l_na] = NA res_col2[!l_na] = res_col attributes(res_col2) = att return(res_col2) } } attr = list(breaks = breaks_o, colors = fun(breaks_o), transparency = 1-transparency, space = space) attributes(fun) = attr return(fun) } .restrict_in = function(x, lower, upper) { x[x > upper] = upper x[x < lower] = lower x } # x: vector # break1 single value # break2 single value # rgb1 vector with 3 elements # rgb2 vector with 3 elements .get_color = function(x, break1, break2, col1, col2, space) { col1 = coords(as(sRGB(col1[1], col1[2], col1[3]), space)) col2 = coords(as(sRGB(col2[1], col2[2], col2[3]), space)) res_col = matrix(ncol = 3, nrow = length(x)) for(j in 1:3) { xx = (x - break2)*(col2[j] - col1[j]) / (break2 - break1) + col2[j] res_col[, j] = xx } res_col = get(space)(res_col) res_col = coords(as(res_col, "sRGB")) res_col[, 1] = .restrict_in(res_col[,1], 0, 1) res_col[, 2] = .restrict_in(res_col[,2], 0, 1) res_col[, 3] = .restrict_in(res_col[,3], 0, 1) hex(sRGB(res_col)) } # will be considered in the future circos.approx = function(x, y, resolution = 0.1, sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), approxFun = function(x) sample(x, 1)) { od = order(x) x = x[od] y = y[od] xplot = get.cell.meta.data("xplot", sector.index = sector.index, track.index = track.index) cell.xlim = get.cell.meta.data("cell.xlim", sector.index = sector.index, track.index = track.index) window.size = resolution/(xplot[1] - xplot[2])*(cell.xlim[2] - cell.xlim[1]) window = seq(cell.xlim[1], cell.xlim[2], by = window.size) newx = rep(NA, length(x)) newy = rep(NA, length(y)) for(i in seq_along(window)[-1]) { l = x >= window[i-1] & x < window[i] # if there are points in current window if(sum(l)) { newx[i] = (window[i-1] + window[i])/2 newy[i] = approxFun(y[l]) } } newx = newx[!is.na(newx)] newy = newy[!is.na(newy)] return(list(x = newx, y = newy)) } # == title # Add transparency to colors # # == param # -col A vector of colors. # -transparency Transparency, numeric value between 0 and 1. # # == value # A vector of colors. # # == example # add_transparency("red", 0.5) # add_transparency(1, 0.5) # add_transparency("#FF000080", 0.2) add_transparency = function (col, transparency = 0) { rgb(t(col2rgb(col)/255), alpha = 1 - transparency) } # == title # Get the inside radius of the most inner track # get_most_inside_radius = function() { tracks = get.all.track.index() if(length(tracks) == 0) { 1 } else { n = length(tracks) get.cell.meta.data("cell.bottom.radius", track.index = tracks[n]) - get.cell.meta.data("track.margin", track.index = tracks[n])[1] - circos.par("track.margin")[2] } } # == title # Convert adjacency list to an adjacency matrix # # == param # -lt A data frame which contains adjacency list. # -square Should the returned matrix be a square matrix? # # == example # set.seed(123) # df = data.frame(from = sample(letters, 10, replace = TRUE), # to = sample(letters, 10, replace = TRUE), # value = 1:10) # adjacencyList2Matrix(df) # adjacencyList2Matrix(df, square = TRUE) adjacencyList2Matrix = function(lt, square = FALSE) { lt = as.data.frame(lt) if(ncol(lt) == 2) { lt = cbind(lt, rep(1, nrow(lt))) } if(ncol(lt) < 3) { stop_wrap("`lt` should be a data frame with three columns") } if(!is.numeric(lt[[3]])) { stop_wrap("Third column in `lt` should be numeric.") } lt[[1]] = as.vector(lt[[1]]) lt[[2]] = as.vector(lt[[2]]) rn = unique(lt[[1]]) cn = unique(lt[[2]]) if(square) { nm = union(rn, cn) mat = matrix(0, ncol = length(nm), nrow = length(nm)) rownames(mat) = nm colnames(mat) = nm } else { mat = matrix(0, ncol = length(cn), nrow = length(rn)) rownames(mat) = rn colnames(mat) = cn } for(i in seq_len(nrow(lt))) { mat[lt[i, 1], lt[i, 2]] = lt[i, 3] } return(mat) } # == title # Convert adjacency matrix to an adjacency list # # == param # -mat A numeric matrix. # -keep.zero Whether to keep the interactions with value zero. # # == example # set.seed(999) # mat = matrix(sample(18, 18), 3, 6) # rownames(mat) = paste0("S", 1:3) # colnames(mat) = paste0("E", 1:6) # adjacencyMatrix2List(mat) adjacencyMatrix2List = function(mat, keep.zero = FALSE) { if(is.null(rownames(mat))) rownames(mat) = as.character(seq_len(nrow(mat))) if(is.null(colnames(mat))) colnames(mat) = as.character(seq_len(ncol(mat))) df = data.frame(from = rep(rownames(mat), times = ncol(mat)), to = rep(colnames(mat), each = nrow(mat)), value = as.vector(mat), stringsAsFactors = FALSE) if(!keep.zero) df = df[df$value != 0, , drop = FALSE] return(df) } # == title # Transform back from colors to values # # == param # -r red channel in `colorspace::sRGB` color space, value should be between 0 and 1. # The ``r``, ``g`` and ``b`` argumentc can be wrapped into one variable which is either a three-column matrix # or a vector of colors. # -g green channel in `colorspace::sRGB` color space, value should be between 0 and 1. # -b blue channel in `colorspace::sRGB` color space, value should be between 0 and 1. # -col_fun the color mapping function generated by `colorRamp2`. # # == details # `colorRamp2` transforms values to colors and this function does the reversed job. # Note for some color spaces, it cannot transform back to the original value perfectly. # # == value # A vector of original numeric values. # # == author # Zuguang Gu # # == example # x = seq(0, 1, length.out = 11) # col_fun = colorRamp2(c(0, 0.5, 1), c("blue", "white", "red")) # col = col_fun(x) # col2value(col, col_fun = col_fun) # col2value("red", col_fun = col_fun) # # col_fun = colorRamp2(c(0, 0.5, 1), c("blue", "white", "red"), space = "sRGB") # col = col_fun(x) # col2value(col, col_fun = col_fun) col2value = function(r, g, b, col_fun) { if(missing(g) && missing(b)) { if(is.character(r)) { rgb = col2rgb(r)/255 r = rgb[1, ] g = rgb[2, ] b = rgb[3, ] } else { if(is.list(r)) { g = r[[2]] b = r[[3]] r = r[[1]] } else if(is.data.frame(r) || is.matrix(r)) { g = r[, 2] b = r[, 3] r = r[, 1] } } } breaks = attr(col_fun, "breaks") colors = attr(col_fun, "colors") space = attr(col_fun, "space") n = length(r) if(inherits(colors, "character")) { colors = t(col2rgb(colors))/255 } ## convert all colors to the specified space m = coords(as(sRGB(r, g, b), space)) breaks_m = coords(as(sRGB(colors), space)) n_breaks = length(breaks) # interpolation for the three channels seperatedly v = numeric() for(i in seq_len(nrow(m))) { l1 = (breaks_m[-n_breaks, 1] <= m[i, 1] & breaks_m[-1, 1] >= m[i, 1]) | (breaks_m[-n_breaks, 1] >= m[i, 1] & breaks_m[-1, 1] <= m[i, 1]) l2 = (breaks_m[-n_breaks, 2] <= m[i, 2] & breaks_m[-1, 2] >= m[i, 2]) | (breaks_m[-n_breaks, 2] >= m[i, 2] & breaks_m[-1, 2] <= m[i, 2]) l3 = (breaks_m[-n_breaks, 3] <= m[i, 3] & breaks_m[-1, 3] >= m[i, 3]) | (breaks_m[-n_breaks, 3] >= m[i, 3] & breaks_m[-1, 3] <= m[i, 3]) k = which(l1 & l2 & l3)[1] v1 = (breaks[k] - breaks[k+1])/(breaks_m[k, 1] - breaks_m[k+1, 1]) * (m[i, 1] - breaks_m[k, 1]) + breaks[k] v2 = (breaks[k] - breaks[k+1])/(breaks_m[k, 2] - breaks_m[k+1, 2]) * (m[i, 2] - breaks_m[k, 2]) + breaks[k] v3 = (breaks[k] - breaks[k+1])/(breaks_m[k, 3] - breaks_m[k+1, 3]) * (m[i, 3] - breaks_m[k, 3]) + breaks[k] vv = c(v1, v2, v3) v[i] = mean(vv, na.rm = TRUE) } return(v) } # == title # Convert units # # == param # -x a numeric vector # -unit supported units, only "mm", "cm", "inches". # # == details # This function coverts mm/cm/inches units to units measured in the canvas coordinate, # e.g. how much is it in the canvas coordinate for 1 mm/cm/inches. # # Since in the circular plot, the aspect ratio is always 1, it does not matter this conversion # is applied on x direction or y direction. # # This function is mainly used in the radical direction. # # == seealso # `convert_x` and `convert_y` convert absolute units into a data coordinate in a specified cell. # # https://jokergoo.github.io/circlize_book/book/circular-layout.html#convert-functions # # == author # Zuguang Gu # # == example # sectors = letters[1:10] # circos.par(cell.padding = c(0, 0, 0, 0), track.margin = c(0, 0)) # circos.initialize(sectors, xlim = cbind(rep(0, 10), runif(10, 0.5, 1.5))) # circos.track(ylim = c(0, 1), track.height = mm_h(5)) # circos.par(track.margin = c(0, mm_h(2))) # circos.track(ylim = c(0, 1), track.height = cm_h(1)) # circos.par(track.margin = c(0, mm_h(5))) # circos.track(ylim = c(0, 1), track.height = inch_h(1)) # circos.clear() convert_length = function(x, unit = c("mm", "cm", "inches")) { pin = par("pin") usr = par("usr") unit = match.arg(unit) pt_per_inche1 = (usr[2] - usr[1])/pin[1] pt_per_inche2 = (usr[4] - usr[3])/pin[2] if(abs(pt_per_inche1 - pt_per_inche2) > 1e-3) { warning_wrap("`convert_length()` only works when aspect of the coordinate is 1.") } inche_per_mm = 0.0393700787401575 # length in the data coordinate if(unit == "inches") { len = x * pt_per_inche1 } else if(unit == "mm") { len = x * pt_per_inche1 * inche_per_mm } else if(unit == "cm") { len = x * pt_per_inche1 * inche_per_mm * 10 } return(len) } # == title # Convert units # # == param # -... pass to `convert_length` # # == details # This function is same as `convert_length`. The reason for naming this function # is `convert_length` is mostely used for defining the height of tracks and track margins. # # == seealso # For pre-defined units, users can use `cm_h`, `mm_h` and `inches_h`. # # == author # Zuguang Gu # # == example # # see example in `convert_length` page # NULL convert_height = function(...) { convert_length(...) } # == title # Convert units # # == param # -... pass to `convert_length`. # # == details # Please do not use this function. Use `mm_h`/`cm_h`/inches_h` instead. # uh = function(...) { convert_length(...) } convert_unit_in_data_coordinate = function(x, unit = c("mm", "cm", "inches", "canvas"), direction = c("x", "y"), sector.index = get.current.sector.index(), track.index = get.current.track.index(), h = get.cell.meta.data("ycenter", sector.index = sector.index, track.index = track.index)) { pin = par("pin") usr = par("usr") unit = match.arg(unit) pt_per_inche1 = (usr[2] - usr[1])/pin[1] pt_per_inche2 = (usr[4] - usr[3])/pin[2] if(abs(pt_per_inche1 - pt_per_inche2) > 1e-3) { warning_wrap("`convert_unit_in_data_coordinate()` only works when aspect of the coordinate is 1.") } direction = match.arg(direction) inche_per_mm = 0.0393700787401575 # length in the data coordinate if(unit == "inches") { len = x * pt_per_inche1 } else if(unit == "mm") { len = x * pt_per_inche1 * inche_per_mm } else if(unit == "cm") { len = x * pt_per_inche1 * inche_per_mm * 10 } else if(unit == "canvas") { len = x } xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index) ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) if(direction == "x") { if(length(h) == 1) { h = rep(h, length(x)) } w_in_data = xlim[2] - xlim[1] w_in_canvas = numeric(length(x)) for(i in seq_along(x)) { coor_polar = circlize(xlim, c(h[i], h[i]), sector.index = sector.index, track.index = track.index) w_in_canvas[i] = abs(coor_polar[1, 1] - coor_polar[2, 1])/180*pi* coor_polar[1, 2] } } else { coor_polar = circlize(c(xlim[1], xlim[1]), ylim, sector.index = sector.index, track.index = track.index) w_in_data = ylim[2] - ylim[1] w_in_canvas = abs(coor_polar[2, 2] - coor_polar[1, 2]) } len = len * abs(w_in_data/w_in_canvas) return(len) } # == title # Convert unit on x direction in data coordinate # # == param # -x a numeric vector. # -unit supported units, only "mm", "cm", "inches". # -sector.index index for the sector where the conversion is applied. # -track.index index for the track where the conversion is applied. # -h since the width of the cell is not identical from the top to the bottom in the cell, the position on # y direction needs to be specified. By default it is at the middle point on y-axis. # # == value # A vector of numeric values which are measured in the specified data coordinate. # # == seealso # For pre-defined units, users can use `cm_x`, `mm_x` and `inches_x`. # # `convert_y` converts on y direction. # # https://jokergoo.github.io/circlize_book/book/circular-layout.html#convert-functions # # == author # Zuguang Gu # # == example # sectors = letters[1:10] # circos.par(cell.padding = c(0, 0, 0, 0), track.margin = c(0, 0)) # circos.initialize(sectors, xlim = cbind(rep(0, 10), runif(10, 0.5, 1.5))) # circos.track(ylim = c(0, 1), track.height = mm_h(5), # panel.fun = function(x, y) { # circos.lines(c(0, 0 + mm_x(5)), c(0.5, 0.5), col = "blue") # }) # circos.par(track.margin = c(0, mm_h(2))) # circos.track(ylim = c(0, 1), track.height = cm_h(1), # panel.fun = function(x, y) { # xcenter = get.cell.meta.data("xcenter") # circos.lines(c(xcenter, xcenter), c(0, cm_y(1)), col = "red") # }) # circos.par(track.margin = c(0, mm_h(5))) # circos.track(ylim = c(0, 1), track.height = inch_h(1), # panel.fun = function(x, y) { # line_length_on_x = cm_x(1*sqrt(2)/2) # line_length_on_y = cm_y(1*sqrt(2)/2) # circos.lines(c(0, line_length_on_x), c(0, line_length_on_y), col = "orange") # }) # circos.clear() convert_x = function( x, unit = c("mm", "cm", "inches"), sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), h = get.cell.meta.data("ycenter", sector.index = sector.index, track.index = track.index)) { convert_unit_in_data_coordinate(x, unit = unit, sector.index = sector.index, track.index = track.index, h = h, direction = "x") } # == title # Convert unit on x direction in data coordinate # # == param # -... pass to `convert_x`. # # == details # Please do not use this function. Use `mm_x`/`cm_x`/inches_x` instead. # ux = function(...) { convert_x(...) } # == title # Convert unit on y direction in data coordinate # # == param # -x a numeric vector # -unit supported units, only "mm", "cm", "inches" # -sector.index index for the sector where the conversion is applied # -track.index index for the track where the conversion is applied # # == value # A vector of numeric values which are measured in the specified data coordinate # # == seealso # For pre-defined units, users can use `cm_y`, `mm_y` and `inches_y`. # # `convert_x` converts on x direction. # # https://jokergoo.github.io/circlize_book/book/circular-layout.html#convert-functions # # == author # Zuguang Gu # # == example # # see example on `convert_x` page # NULL convert_y = function( x, unit = c("mm", "cm", "inches"), sector.index = get.current.sector.index(), track.index = get.current.track.index()) { convert_unit_in_data_coordinate(x, unit = unit, sector.index = sector.index, track.index = track.index, direction = "y") } # == title # Convert unit on y direction in data coordinate # # == param # -... pass to `convert_y`. # # == details # Please do not use this function. Use `mm_y`/`cm_y`/inches_y` instead. # uy = function(...) { convert_y(...) } convert_unit_in_canvas_coordinate = function(x, unit = c("mm", "cm", "inches")) { pin = par("pin") usr = par("usr") unit = match.arg(unit) pt_per_inche1 = (usr[2] - usr[1])/pin[1] pt_per_inche2 = (usr[4] - usr[3])/pin[2] if(abs(pt_per_inche1 - pt_per_inche2) > 1e-3) { warning_wrap("`convert_unit_in_data_coordinate()` only works when aspect of the coordinate is 1.") } inche_per_mm = 0.0393700787401575 # length in the data coordinate if(unit == "inches") { len = x * pt_per_inche1 } else if(unit == "mm") { len = x * pt_per_inche1 * inche_per_mm } else if(unit == "cm") { len = x * pt_per_inche1 * inche_per_mm * 10 } return(len) } # == title # Convert unit on x direction in data coordinate # # == param # -x The x-value in numeric. # -sector.index Index of sector. # -track.index Index of track. # -... Pass to `convert_x`. # # == details # See explanations in `convert_x` page. # # == author # Zuguang Gu # # == example # # see examples in `convert_x` page # NULL cm_x = function(x, sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) { convert_x(x, unit = "cm", sector.index = sector.index, track.index = track.index, ...) } # == title # Convert unit on y direction in data coordinate # # == param # -y The y-value in numeric. # -sector.index Index of sector. # -track.index Index of track. # # == details # See explanations in `convert_y` page. # # == author # Zuguang Gu # # == example # # see examples in `convert_y` page # NULL cm_y = function(y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { convert_y(y, unit = "cm", sector.index = sector.index, track.index = track.index) } # == title # Convert units # # == param # -h The height in numeric. # # == details # See explanations in `convert_length` page. # # == author # Zuguang Gu # # == example # # see examples in `convert_length` page # NULL cm_h = function(h) { convert_length(h, unit = "cm") } # == title # Convert unit on x direction in data coordinate # # == param # -x The x-value in numeric. # -sector.index Index of sector. # -track.index Index of track. # -... Pass to `convert_x`. # # == details # See explanations in `convert_x` page. # # == author # Zuguang Gu # # == example # # see examples in `convert_x` page # NULL mm_x = function(x, sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) { convert_x(x, unit = "mm", sector.index = sector.index, track.index = track.index, ...) } # == title # Convert unit on y direction in data coordinate # # == param # -y The y-value in numeric. # -sector.index Index of sector. # -track.index Index of track. # # == details # See explanations in `convert_y` page. # # == author # Zuguang Gu # # == example # # see examples in `convert_y` page # NULL mm_y = function(y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { convert_y(y, unit = "mm", sector.index = sector.index, track.index = track.index) } # == title # Convert units # # == param # -h The height in numeric. # # == details # See explanations in `convert_length` page. # # == author # Zuguang Gu # # == example # # see examples in `convert_length` page # NULL mm_h = function(h) { convert_length(h, unit = "mm") } # == title # Convert unit on x direction in data coordinate # # == param # -x The x-value in numeric. # -sector.index Index of sector. # -track.index Index of track. # -... Pass to `convert_x`. # # == details # See explanations in `convert_x` page. # # == author # Zuguang Gu # # == example # # see examples in `convert_x` page # NULL inches_x = function(x, sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) { convert_x(x, unit = "inches", sector.index = sector.index, track.index = track.index, ...) } # == title # Convert unit on y direction in data coordinate # # == param # -y The y-value in numeric. # -sector.index Index of sector. # -track.index Index of track. # # == details # See explanations in `convert_y` page. # # == author # Zuguang Gu # # == example # # see examples in `convert_y` page # NULL inches_y = function(y, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { convert_y(y, unit = "inches", sector.index = sector.index, track.index = track.index) } # == title # Convert units # # == param # -h The height in numeric. # # == details # See explanations in `convert_length` page. # # == author # Zuguang Gu # # == example # # see examples in `convert_length` page # NULL inches_h = function(h) { convert_length(h, unit = "inches") } # == title # Convert unit on x direction in data coordinate # # == param # -... pass to `inches_x`. # # == details # This function is the same as `inches_x`. inch_x = function(...) { inches_x(...) } # == title # Convert unit on y direction in data coordinate # # == param # -... pass to `inches_y` # # == details # This function is the same as `inches_y`. inch_y = function(...) { inches_y(...) } # == title # Convert units # # == param # -... pass to `inches_h` # # == details # This function is the same as `inches_h`. inch_h = function(...) { inches_h(...) } stop_wrap = function(...) { x = paste0(...) x = paste(strwrap(x), collapse = "\n") stop(x, call. = FALSE) } warning_wrap = function(...) { x = paste0(...) x = paste(strwrap(x), collapse = "\n") warning(x, call. = FALSE) } message_wrap = function(...) { x = paste0(...) x = paste(strwrap(x), collapse = "\n") message(x) } validate_data_frame = function(x) { if(inherits(x, "data.frame")) { return(as.data.frame(x)) } else if(inherits(x, "GRanges")) { x = as.data.frame(x) return(x[, -(4:5), drop = FALSE]) } else { oe = try(x <- as.data.frame(x)) if(inherits(oe, "try-error")) { stop_wrap("The input should be a data frame or an object that can be converted to a data frame.") } return(x) } } roundrect_pos = function(xleft, ybottom, xright, ytop, radius = 0.1, asp = NULL) { if(is.null(asp)) { pin = par("pin") usr = par("usr") asp = pin[1]/pin[2] * (usr[4] - usr[3])/(usr[2] - usr[1]) } convert_y_1 = function(y, asp) { y/asp } covnert_y_2 = function(y, asp) { y*asp } if(xleft > xright) { foo = xleft xleft = xright xright = foo } if(ybottom > ytop) { foo = ybottom ybottom = ytop ytop = foo } ytop = convert_y_1(ytop, asp) ybottom = convert_y_1(ybottom, asp) w = abs(xright - xleft) h = abs(ytop - ybottom) r = radius*min(w, h) x = NULL y = NULL # left top 180 -> 90 df = polar2Cartesian(cbind(seq(180, 90, length.out = 20), rep(r,20))) x = c(x, df[, 1] + xleft + r) y = c(y, df[, 2] + ytop - r) x = c(x, xleft + r, xright - r) y = c(y, ytop, ytop) # right top 90 -> 0 df = polar2Cartesian(cbind(seq(90, 0, length.out = 20), rep(r,20))) x = c(x, df[, 1] + xright - r) y = c(y, df[, 2] + ytop - r) x = c(x, xright, xright) y = c(y, ytop - r, ybottom + r) # bottom right 0 - (-90) df = polar2Cartesian(cbind(seq(0, -90, length.out = 20), rep(r,20))) x = c(x, df[, 1] + xright - r) y = c(y, df[, 2] + ybottom + r) x = c(x, xright - r, xleft + r) y = c(y, ybottom, ybottom) # bottom left 270 - 180 df = polar2Cartesian(cbind(seq(270, 180, length.out = 20), rep(r,20))) x = c(x, df[, 1] + xleft + r) y = c(y, df[, 2] + ybottom + r) x = c(x, xleft, xleft) y = c(y, ybottom + r, ytop - r) y = covnert_y_2(y, asp) return(list(x = x, y = y)) } # plot(c(-2, -1), c(-2, -1)) # foo = roundrect_pos(-2, -2, -1, -1) # lines(foo$x, foo$y) # plot(c(-4, -1), c(-2, -1)) # foo = roundrect_pos(-4, -2, -1, -1) # lines(foo$x, foo$y) circlize/R/zzz.R0000755000176200001440000000135214015721224013241 0ustar liggesuserssetLoadActions(function(ns) { circos.par("__tempdir__" = tempdir()) }) .onAttach = function(libname, pkgname) { version = packageDescription(pkgname, fields = "Version") msg = paste0("======================================== ", pkgname, " version ", version, " CRAN page: https://cran.r-project.org/package=circlize Github page: https://github.com/jokergoo/circlize Documentation: https://jokergoo.github.io/circlize_book/book/ If you use it in published research, please cite: Gu, Z. circlize implements and enhances circular visualization in R. Bioinformatics 2014. This message can be suppressed by: suppressPackageStartupMessages(library(circlize)) ======================================== ") packageStartupMessage(msg) } circlize/R/chordDiagram.R0000755000176200001440000017543214177031257015014 0ustar liggesusers # == title # Plot Chord Diagram # # == param # -x a matrix or a data frame. The function will pass all argument to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` depending on the type of ``x``, # also format of other arguments depends of the type of ``x``. If it is in the form of a matrix, # it should be an adjacency matrix. If it is in the form of a data frame, it should be an adjacency list. # -grid.col pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -grid.border pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -transparency pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -col pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -row.col pass to `chordDiagramFromMatrix` # -column.col pass to `chordDiagramFromMatrix` # -order pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -directional pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -xmax maximum value on x-axes, the value should be a named vector. # -symmetric pass to `chordDiagramFromMatrix` # -keep.diagonal pass to `chordDiagramFromMatrix` # -direction.type pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -diffHeight pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.target.prop pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -target.prop.height pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -reduce pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -self.link pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -preAllocateTracks pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -annotationTrack pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -annotationTrackHeight pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.border pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.lwd pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.lty pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.auto pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.sort pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.decreasing pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.arr.length pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.arr.width pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.arr.type pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.arr.lty pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.arr.lwd pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.arr.col pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.largest.ontop pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.visible pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -link.rank This is argument is removed. # -link.zindex order to add links to the circle, a large value means to add it later. # -link.overlap pass to `chordDiagramFromMatrix` or `chordDiagramFromDataFrame` # -scale scale each sector to same width # -group It contains the group labels and the sector names are used as the names in the vector. # -big.gap Gap between the two sets of sectors. If the input is a matrix, the two sets # are row sectors and column sectors. If the input is a data frame, the two sets # correspond to the first column and the second column. It only works when there # is no intersection between the two sets. # -small.gap Small gap between sectors. # -... pass to `circos.link`. # # == details # Chord diagram is a way to visualize numeric tables ( http://circos.ca/intro/tabular_visualization/ ), especially useful # when the table represents information of directional relations. This function # visualize tables in a circular way. # # This function is flexible and contains some settings that may be a little difficult to understand. # Please refer to vignette for better explanation. # # == seealso # https://jokergoo.github.io/circlize_book/book/the-chorddiagram-function.html # # == value # A data frame which contains positions of links, columns are: # # -``rn`` sector name corresponding to rows in the adjacency matrix or the first column in the adjacency list # -``cn`` sector name corresponding to columns in the adjacency matrix or the second column in the adjacency list # -``value`` value for the interaction or relation # -``o1`` order of the link on the "from" sector # -``o2`` order of the link on the "to" sector # -``x1`` and position of the link on the "from" sector, the interval for the link on the "from" sector is ``c(x1-abs(value), x1)`` # -``x2`` and position of the link on the "to" sector, the interval for the link on the "from" sector is ``c(x2-abs(value), x2)`` # # == examples # set.seed(999) # mat = matrix(sample(18, 18), 3, 6) # rownames(mat) = paste0("S", 1:3) # colnames(mat) = paste0("E", 1:6) # # df = data.frame(from = rep(rownames(mat), times = ncol(mat)), # to = rep(colnames(mat), each = nrow(mat)), # value = as.vector(mat), # stringsAsFactors = FALSE) # # chordDiagram(mat) # chordDiagram(df) # circos.clear() # chordDiagram = function( x, grid.col = NULL, grid.border = NA, transparency = 0.5, col = NULL, row.col = NULL, column.col = NULL, order = NULL, directional = 0, xmax = NULL, symmetric = FALSE, keep.diagonal = FALSE, direction.type = "diffHeight", diffHeight = mm_h(2), link.target.prop = TRUE, target.prop.height = mm_h(1), reduce = 1e-5, self.link = 2, preAllocateTracks = NULL, annotationTrack = c("name", "grid", "axis"), annotationTrackHeight = mm_h(c(3, 2)), link.border = NA, link.lwd = par("lwd"), link.lty = par("lty"), link.auto = TRUE, link.sort = "default", link.decreasing = TRUE, link.arr.length = ifelse(link.arr.type == "big.arrow", 0.02, 0.4), link.arr.width = link.arr.length/2, link.arr.type = "triangle", link.arr.lty = par("lty"), link.arr.lwd = par("lwd"), link.arr.col = par("col"), link.largest.ontop = FALSE, link.visible = TRUE, link.rank = NULL, link.zindex = NULL, link.overlap = FALSE, scale = FALSE, group = NULL, big.gap = 10, small.gap = 1, ...) { if(inherits(x, "table")) { if(length(dim(x)) == 2) { class(x) = "matrix" } } if(inherits(x, "matrix")) { if(ncol(x) == 2 && nrow(x) > 10) { x = as.data.frame(x) } } if(inherits(x, "matrix")) { chordDiagramFromMatrix(x, grid.col = grid.col, grid.border = grid.border, transparency = transparency, col = col, row.col = row.col, column.col = column.col, order = order, directional = directional, symmetric = symmetric, keep.diagonal = keep.diagonal, direction.type = direction.type, diffHeight = diffHeight, link.target.prop = link.target.prop, target.prop.height = target.prop.height, reduce = reduce, self.link = self.link, xmax = xmax, preAllocateTracks = preAllocateTracks, annotationTrack = annotationTrack, annotationTrackHeight = annotationTrackHeight, link.border = link.border, link.lwd = link.lwd, link.lty = link.lty, link.auto = link.auto, link.sort = link.sort, link.decreasing = link.decreasing, link.arr.length = link.arr.length, link.arr.width = link.arr.width, link.arr.type = link.arr.type, link.arr.lty = link.arr.lty, link.arr.lwd = link.arr.lwd, link.arr.col = link.arr.col, link.largest.ontop = link.largest.ontop, link.visible = link.visible, link.rank = link.rank, link.zindex = link.zindex, link.overlap = link.overlap, scale = scale, group = group, big.gap = big.gap, small.gap = small.gap, ...) } else { x = validate_data_frame(x) if(ncol(x) > 3) { if(all(sapply(x, inherits, c("numeric", "integer")))) { warning("It seems your input data is an adjacency matrix, maybe you need to convert it to 'matrix' explicitely.") return(chordDiagramFromMatrix(as.matrix(x, grid.col = grid.col, grid.border = grid.border, transparency = transparency, col = col, row.col = row.col, column.col = column.col, order = order, directional = directional, symmetric = symmetric, keep.diagonal = keep.diagonal, direction.type = direction.type, diffHeight = diffHeight, link.target.prop = link.target.prop, target.prop.height = target.prop.height, reduce = reduce, self.link = self.link, xmax = xmax, preAllocateTracks = preAllocateTracks, annotationTrack = annotationTrack, annotationTrackHeight = annotationTrackHeight, link.border = link.border, link.lwd = link.lwd, link.lty = link.lty, link.auto = link.auto, link.sort = link.sort, link.decreasing = link.decreasing, link.arr.length = link.arr.length, link.arr.width = link.arr.width, link.arr.type = link.arr.type, link.arr.lty = link.arr.lty, link.arr.lwd = link.arr.lwd, link.arr.col = link.arr.col, link.largest.ontop = link.largest.ontop, link.visible = link.visible, link.rank = link.rank, link.zindex = link.zindex, link.overlap = link.overlap, scale = scale, group = group, big.gap = big.gap, small.gap = small.gap, ...))) } else { chordDiagramFromDataFrame(x, grid.col = grid.col, grid.border = grid.border, transparency = transparency, col = col, order = order, directional = directional, direction.type = direction.type, diffHeight = diffHeight, link.target.prop = link.target.prop, target.prop.height = target.prop.height, reduce = reduce, self.link = self.link, xmax = xmax, preAllocateTracks = preAllocateTracks, annotationTrack = annotationTrack, annotationTrackHeight = annotationTrackHeight, link.border = link.border, link.lwd = link.lwd, link.lty = link.lty, link.auto = link.auto, link.sort = link.sort, link.decreasing = link.decreasing, link.arr.length = link.arr.length, link.arr.width = link.arr.width, link.arr.type = link.arr.type, link.arr.lty = link.arr.lty, link.arr.lwd = link.arr.lwd, link.arr.col = link.arr.col, link.largest.ontop = link.largest.ontop, link.visible = link.visible, link.rank = link.rank, link.zindex = link.zindex, link.overlap = link.overlap, scale = scale, group = group, big.gap = big.gap, small.gap = small.gap, ...) } } else { chordDiagramFromDataFrame(x, grid.col = grid.col, grid.border = grid.border, transparency = transparency, col = col, order = order, directional = directional, direction.type = direction.type, diffHeight = diffHeight, link.target.prop = link.target.prop, target.prop.height = target.prop.height, reduce = reduce, self.link = self.link, xmax = xmax, preAllocateTracks = preAllocateTracks, annotationTrack = annotationTrack, annotationTrackHeight = annotationTrackHeight, link.border = link.border, link.lwd = link.lwd, link.lty = link.lty, link.auto = link.auto, link.sort = link.sort, link.decreasing = link.decreasing, link.arr.length = link.arr.length, link.arr.width = link.arr.width, link.arr.type = link.arr.type, link.arr.lty = link.arr.lty, link.arr.lwd = link.arr.lwd, link.arr.col = link.arr.col, link.largest.ontop = link.largest.ontop, link.visible = link.visible, link.rank = link.rank, link.zindex = link.zindex, link.overlap = link.overlap, scale = scale, group = group, big.gap = big.gap, small.gap = small.gap, ...) } } } # returns a list, each list containing settings for each new track parsePreAllocateTracksValue = function(preAllocateTracks) { lt = list(ylim = c(0, 1), track.height = circos.par("track.height"), bg.col = NA, bg.border = NA, bg.lty = par("lty"), bg.lwd = par("lwd"), track.margin = circos.par("track.margin")) if(length(preAllocateTracks) && is.numeric(preAllocateTracks)) { res = vector("list", length = preAllocateTracks) for(i in seq_len(preAllocateTracks)) { res[[i]] = lt } return(res) } else if(is.list(preAllocateTracks)) { # list of list if(all(sapply(preAllocateTracks, is.list))) { res = vector("list", length = length(preAllocateTracks)) for(i in seq_along(preAllocateTracks)) { lt2 = lt for(nm in intersect(names(lt), names(preAllocateTracks[[i]]))) { lt2[[nm]] = preAllocateTracks[[i]][[nm]] } res[[i]] = lt2 } return(res) } else { lt2 = lt for(nm in intersect(names(lt), names(preAllocateTracks))) { lt2[[nm]] = preAllocateTracks[[nm]] } return(list(lt2)) } } else { stop_wrap("Wrong `preAllocateTracks` value.") } } # values can be: # - a scalar # - a matrix # - a three column data frame .normalize_to_mat = function(value, rn, cn, default) { var_name = deparse(substitute(value)) mat = matrix(default, nrow = length(rn), ncol = length(cn)) rownames(mat) = rn colnames(mat) = cn if(inherits(value, "data.frame")) { if(ncol(value) == 3) { value[[1]] = as.vector(value[[1]]) value[[2]] = as.vector(value[[2]]) value[[3]] = as.vector(value[[3]]) l = value[, 1] %in% rn & value[, 2] %in% cn value = value[l, , drop = FALSE] for(i in seq_len(nrow(value))) { mat[ value[i, 1], value[i, 2] ] = value[i, 3] } } else { stop_wrap("If ", var_name, " is set as a data frame, it should have three columns.") } } else if(is.atomic(value) && length(value) == 1) { mat[,] = value } else if(length(value) == length(rn) * length(cn)) { mat[,] = value } else { if(!is.null(rownames(value)) && !is.null(colnames(value))) { common_rn = intersect(rownames(value), rn) common_cn = intersect(colnames(value), cn) mat[common_rn, common_cn] = value[common_rn, common_cn] } else { if(nrow(value) == length(rn) && ncol(value) == length(cn)) { mat = value rownames(mat) = rn colnames(mat) = cn } else { stop_wrap("If ", var_name, " is a matrix, it should have both rownames and colnames.") } } } return(mat) } mat2df = function(mat) { nr = dim(mat)[1] nc = dim(mat)[2] rn = rep(rownames(mat), times = nc) ri = rep(seq_len(nr), times = nc) cn = rep(colnames(mat), each = nr) ci = rep(seq_len(nc), each = nr) v = as.vector(mat) df = data.frame(rn = rn, cn = cn, ri = ri, ci = ci, value = v, stringsAsFactors = FALSE) return(df) } # == title # Plot Chord Diagram from an adjacency matrix # # == param # -mat A table which represents as a numeric matrix. # -grid.col Grid colors which correspond to matrix rows/columns (or sectors). The length of the vector should be either 1 or ``length(union(rownames(mat), colnames(mat)))``. # It's preferred that ``grid.col`` is a named vector of which names correspond to sectors. # If it is not a named vector, the order of ``grid.col`` corresponds to order of sectors. # -grid.border border for grids. If it is ``NULL``, the border color is same as grid color # -transparency Transparency of link colors, 0 means no transparency and 1 means full transparency. # If transparency is already set in ``col`` or ``row.col`` or ``column.col``, this argument will be ignored. # ``NA``also ignores this argument. # -col Colors for links. It can be a matrix which corresponds to ``mat``, or a function which generate colors # according to values in ``mat``, or a single value which means colors for all links are the same, or a three-column # data frame in which the first two columns correspond to row names and columns and the third column is colors. You # may use `colorRamp2` to generate a function which maps values to colors. # -row.col Colors for links. Links from the same row in ``mat`` will have the same color. # Length should be same as number of rows in ``mat``. This argument only works when ``col`` is set to ``NULL``. # -column.col Colors for links. Links from the same column in ``mat`` will have the same color. # Length should be same as number of columns in ``mat``. This argument only works when ``col`` and ``row.col`` is set to ``NULL``. # -order Order of sectors. Default order is ``union(df[[1]], df[[2]])``. # -directional Whether links have directions. 1 means the direction is from the first column in ``df`` to the second column, -1 # is the reverse, 0 is no direction, and 2 for two directional. Same setting as ``link.border``. # -xmax maximum value on x-axes, the value should be a named vector. # -direction.type type for representing directions. Can be one or two values in "diffHeight" and "arrows". If the value contains "diffHeight", # different heights of the links are used to represent the directions for which starting root has long height to give people feeling # that something is comming out. If the value contains "arrows", users can customize arrows with following arguments. # Same setting as ``link.border``. Note if you want to set both ``diffHeight`` # and ``arrows`` for certain links, you need to embed these two options into one string such as ``"diffHeight+arrows"``. # -diffHeight The difference of height between two 'roots' if ``directional`` is set to ``TRUE``. If the value is set to # a positive value, start root is shorter than end root and if it is set to a negative value, start root is longer # than the end root. # -link.target.prop If the Chord diagram is directional, for each source sector, whether to draw bars that shows the proportion of # target sectors. # -target.prop.height The height of the bars when ``link.target.prop`` is turned on. # -reduce if the ratio of the width of certain grid compared to the whole circle is less than this value, the grid is removed on the plot. # Set it to value less than zero if you want to keep all tiny grid. # -self.link if there is a self link in one sector, 1 means the link will be degenerated as a 'mountain' and the width corresponds to the value for this connection. # 2 means the width of the starting root and the ending root all have the width that corresponds to the value for the connection. # -symmetric Whether the matrix is symmetric. If the value is set to ``TRUE``, only # lower triangular matrix without the diagonal will be used. # -keep.diagonal If the matrix is specified as symmetric, whether keep diagonal for visualization. # -preAllocateTracks Pre-allocate empty tracks before drawing Chord diagram. It can be a single number indicating # how many empty tracks needed to be created or a list containing settings for empty # tracks. Please refer to vignette for details. # -annotationTrack Which annotation track should be plotted? By default, a track containing sector names and a track # containing grid will be created. # -annotationTrackHeight Track height corresponding to values in ``annotationTrack``. # -link.border border for links, single scalar or a matrix with names or a data frame with three columns # -link.lwd width for link borders, single scalar or a matrix with names or a data frame with three columns # -link.lty style for link borders, single scalar or a matrix with names or a data frame with three columns # -link.auto Ignored. # -link.sort whether sort links on every sector based on the width of the links on it. The value can be logical. The value can also be string # "default" which automatically adjusts link orders so that links have minimal overall intersections. The value can also be a string # "asis" and it is only workable for input as a data frame so that the links have the same orders as in the original data frame.# -link.decreasing for ``link.sort`` # -link.decreasing for ``link.sort`` # -link.arr.length pass to `circos.link`. The format of this argument is same as ``link.lwd``. # -link.arr.width pass to `shape::Arrowhead`. The format of this argument is same as ``link.lwd``. # -link.arr.type pass to `circos.link`, same format as ``link.lwd``. Default value is ``triangle``. # -link.arr.col color or the single line link which is put in the center of the belt. The format of this argument is same as ``link.lwd``. # -link.arr.lwd line width ofthe single line link which is put in the center of the belt. The format of this argument is same as ``link.lwd``. # -link.arr.lty line type of the single line link which is put in the center of the belt. The format of this argument is same as ``link.lwd``. # -link.largest.ontop controls the order of adding links, whether based on the absolute value? # -link.visible whether plot the link. The value is logical, if it is set to ``FALSE``, the corresponding link will not # plotted, but the space is still ocuppied. The format of this argument is same as ``link.lwd`` # -link.rank This is argument is removed. # -link.zindex order to add links to the circle, a large value means to add it later. # -link.overlap if it is a directional Chord Diagram, whether the links that come or end in a same sector overlap? # -scale scale each sector to same width # -group It contains the group labels and the sector names are used as the names in the vector. # -big.gap Gap between row sectors and column sectors. # -small.gap Small gap between sectors. # -... pass to `circos.link` # # == details # Internally, the matrix is transformed to a data frame and sent to `chordDiagramFromDataFrame`. # # == value # A data frame which contains positions of links, see explanation in `chordDiagram`. # # == seealso # https://jokergoo.github.io/circlize_book/book/the-chorddiagram-function.html # chordDiagramFromMatrix = function( mat, grid.col = NULL, grid.border = NA, transparency = 0.5, col = NULL, row.col = NULL, column.col = NULL, order = NULL, directional = 0, direction.type = "diffHeight", diffHeight = mm_h(2), link.target.prop = TRUE, target.prop.height = mm_h(1), reduce = 1e-5, xmax = NULL, self.link = 2, symmetric = FALSE, keep.diagonal = FALSE, preAllocateTracks = NULL, annotationTrack = c("name", "grid", "axis"), annotationTrackHeight = mm_h(c(3, 2)), link.border = NA, link.lwd = par("lwd"), link.lty = par("lty"), link.auto = TRUE, link.sort = "default", link.decreasing = TRUE, link.arr.length = ifelse(link.arr.type == "big.arrow", 0.02, 0.4), link.arr.width = link.arr.length/2, link.arr.type = "triangle", link.arr.lty = par("lty"), link.arr.lwd = par("lwd"), link.arr.col = par("col"), link.largest.ontop = FALSE, link.visible = TRUE, link.rank = NULL, link.zindex = NULL, link.overlap = FALSE, scale = FALSE, group = NULL, big.gap = 10, small.gap = 1, ...) { if(!is.matrix(mat)) { stop_wrap("`mat` can only be a matrix.") } if(length(mat) != 2) { if(identical(direction.type, c("diffHeight", "arrows")) || identical(direction.type, c("arrows", "diffHeight"))) { direction.type = "diffHeight+arrows" } } if(is.null(link.zindex)) { link.zindex = 1 } transparency = ifelse(transparency < 0, 0, ifelse(transparency > 1, 1, transparency)) if(symmetric) { if(nrow(mat) != ncol(mat)) { stop_wrap("`mat` should be a square matrix.") } for(i in 1:10) { n = sample(nrow(mat), 2) ir = n[1] ic = n[2] if(abs(mat[ir, ic] - mat[ic, ir]) > 1e-8) { stop("Is `mat` really a symmetric matrix?") } } if(is.null(rownames(mat)) && is.null(colnames(mat))) { rownames(mat) = paste0("S", seq_len(nrow(mat))) colnames(mat) = paste0("S", seq_len(ncol(mat))) } if(!setequal(rownames(mat), colnames(mat))) { stop_wrap("Since you specified a symmetric matrix, rownames and colnames should be the same.") } mat[upper.tri(mat, diag = !keep.diagonal)] = 0 } mat[is.na(mat)] = 0 if(!is.null(order)) { if(is.null(rownames(mat)) || is.null(colnames(mat))) { stop_wrap("Since you specified `order`, your matrix should have rowname and colname.") } if(!setequal(order, union(rownames(mat), colnames(mat)))) { stop_wrap("Elements in `order` should be same as in `union(rownames(mat), colnames(mat))`.") } } if(is.null(rownames(mat))) { rownames(mat) = paste0("R", seq_len(nrow(mat))) } if(is.null(colnames(mat))) { colnames(mat) = paste0("C", seq_len(ncol(mat))) } # width of the category is almost 0, it means this category has no link to the others rs = rowSums(abs(mat)) cs = colSums(abs(mat)) nn = union(names(rs), names(cs)) xlim = numeric(length(nn)) names(xlim) = nn xlim[names(rs)] = xlim[names(rs)] + rs xlim[names(cs)] = xlim[names(cs)] + cs # self-link, values are added twice self_link = intersect(rownames(mat), colnames(mat)) if(length(self_link)) { xlim[self_link] = xlim[self_link] - abs(diag(mat[self_link, self_link, drop = FALSE])) } keep_index = names(xlim)[xlim / sum(xlim) >= reduce] if(length(keep_index) < length(xlim)) { gap.degree = circos.par$gap.degree if(length(gap.degree) > 1) { if(is.null(names(gap.degree))) { if(length(keep_index) != length(gap.degree)) { stop_wrap("`reduce` argument causes reduction of sectors. You can either set `reduce = 0`, or adjust the `gap.degree`/`gap.after` in `circos.par()` to remove tiny sectors, or set `gap.degree`/`gap.after` as a named vector where sector names are the vector names (tiny sectors can be included).") } } else { if(length(setdiff(nn[keep_index], names(gap.degree))) == 0) { } else { if(length(keep_index) != length(gap.degree)) { stop_wrap("`reduce` argument causes reduction of sectors. You can either set `reduce = 0`, or adjust the `gap.degree`/`gap.after` in `circos.par()` to remove tiny sectors, or set `gap.degree`/`gap.after` as a named vector where sector names are the vector names (tiny sectors can be included).") } } } } } ri = which(rownames(mat) %in% keep_index) ci = which(colnames(mat) %in% keep_index) ri_zero_sum = ri[ rowSums(mat[ri, ci, drop = FALSE]) == 0] ci_zero_sum = ci[ colSums(mat[ri, ci, drop = FALSE]) == 0] while(length(ri_zero_sum) || length(ci_zero_sum)) { ri = setdiff(ri, ri_zero_sum) ci = setdiff(ci, ci_zero_sum) ri_zero_sum = ri[ rowSums(mat[ri, ci, drop = FALSE]) == 0] ci_zero_sum = ci[ colSums(mat[ri, ci, drop = FALSE]) == 0] } # if the matrix is reduced if(sum(length(ri) + length(ci)) < sum(ncol(mat) + nrow(mat))) { un = union(rownames(mat), colnames(mat)) nn = union(rownames(mat)[ri], colnames(mat)[ci]) if(length(circos.par("gap.degree")) == length(un)) { old.gap.degree = circos.par("gap.degree") circos.par("gap.degree" = old.gap.degree[un %in% nn]) } if(!is.null(grid.col)) { if(is.null(names(grid.col)) && length(grid.col) == length(un)) { grid.col = grid.col[un %in% nn] } } } mat = mat[ri, ci, drop = FALSE] if(is.matrix(col)) { col = col[ri, ci, drop = FALSE] } if(length(row.col) > 1) { row.col = row.col[ri] } if(length(column.col) > 1) { column.col = column.col[ci] } # re-calculate xlim based on reduced mat rs = rowSums(abs(mat)) cs = colSums(abs(mat)) nn = union(names(rs), names(cs)) xlim = numeric(length(nn)) names(xlim) = nn if(!is.null(order)) { xlim = xlim[order] } xlim[names(rs)] = xlim[names(rs)] + rs xlim[names(cs)] = xlim[names(cs)] + cs self_link = intersect(rownames(mat), colnames(mat)) if(length(self_link)) { xlim[self_link] = xlim[self_link] - abs(diag(mat[self_link, self_link, drop = FALSE])) } factors = names(xlim) factors = factor(factors, levels = factors) xlim = cbind(rep(0, length(factors)), xlim) n = length(factors) if(is.null(grid.col)) { grid.col = rand_color(n) names(grid.col) = factors } else { if(!is.null(names(grid.col))) { unnamed_grid = setdiff(factors, names(grid.col)) if(length(unnamed_grid) > 0) { grid.col = c(grid.col, structure(rand_color(length(unnamed_grid)), names = unnamed_grid)) # stop("Since your ``grid.col`` is a named vector, all sectors should have corresponding colors.\n") } grid.col = grid.col[as.vector(factors)] } else if(length(grid.col) == 1) { grid.col = rep(grid.col, n) names(grid.col) = factors } else if(length(grid.col) == length(factors)) { names(grid.col) = factors } else { stop_wrap("Since you set ``grid.col``, the length should be either 1 or number of sectors, or set your ``grid.col`` as vector with names.") } } rn = rownames(mat) cn = colnames(mat) ## make a color matrix based on settings if(!is.null(col)) { if(is.function(col)) { col = col(mat) } else { col = .normalize_to_mat(col, rn, cn, "#FFFFFF00") } } else if(!is.null(row.col)) { if(length(row.col) == 1) { row.col = rep(row.col, nrow(mat)) } col = rep(row.col, ncol(mat)) } else if(!is.null(column.col)) { if(length(column.col) == 1) { column.col = rep(column.col, ncol(mat)) } col = rep(column.col, each = nrow(mat)) } else { col = rep(grid.col[rownames(mat)], ncol(mat)) } rgb_mat = t(col2rgb(col, alpha = TRUE)) if(is.na(transparency)) { col = rgb(rgb_mat, maxColorValue = 255, alpha = rgb_mat[, 4]) } else if(all(rgb_mat[, 4] == 255)) { col = rgb(rgb_mat, maxColorValue = 255, alpha = (1-transparency)*255) } else { col = rgb(rgb_mat, maxColorValue = 255, alpha = rgb_mat[, 4]) } dim(col) = dim(mat) colnames(col) = colnames(mat) rownames(col) = rownames(mat) link.border = .normalize_to_mat(link.border, rn, cn, default = NA) link.lwd = .normalize_to_mat(link.lwd, rn, cn, default = 1) link.lty = .normalize_to_mat(link.lty, rn, cn, default = 1) link.arr.length = .normalize_to_mat(link.arr.length, rn, cn, default = 0.4) link.arr.width = .normalize_to_mat(link.arr.width, rn, cn, default = 0.2) link.arr.type = .normalize_to_mat(link.arr.type, rn, cn, default = "triangle") link.arr.lty = .normalize_to_mat(link.arr.lty, rn, cn, default = 1) link.arr.lwd = .normalize_to_mat(link.arr.lwd, rn, cn, default = 1) link.arr.col = .normalize_to_mat(link.arr.col, rn, cn, default = NA) link.visible = .normalize_to_mat(link.visible, rn, cn, default = NA) link.zindex = .normalize_to_mat(link.zindex, rn, cn, default = NA) directional = .normalize_to_mat(directional, rn, cn, default = 0) direction.type = .normalize_to_mat(direction.type, rn, cn, default = "diffHeight") df = mat2df(mat) chordDiagramFromDataFrame(df[c(1, 2, 5)], grid.col = grid.col, grid.border = grid.border, transparency = NA, col = psubset(col, df$ri, df$ci), order = order, xmax = xmax, directional = psubset(directional, df$ri, df$ci), direction.type = psubset(direction.type, df$ri, df$ci), diffHeight = diffHeight, link.target.prop = link.target.prop, target.prop.height = target.prop.height, reduce = 0, self.link = self.link, preAllocateTracks = preAllocateTracks, annotationTrack = annotationTrack, annotationTrackHeight = annotationTrackHeight, link.auto = link.auto, link.sort = link.sort, link.decreasing = link.decreasing, link.border = psubset(link.border, df$ri, df$ci), link.lwd = psubset(link.lwd, df$ri, df$ci), link.lty = psubset(link.lty, df$ri, df$ci), link.arr.length = psubset(link.arr.length, df$ri, df$ci), link.arr.width = psubset(link.arr.width, df$ri, df$ci), link.arr.type = psubset(link.arr.type, df$ri, df$ci), link.arr.lwd = psubset(link.arr.lwd, df$ri, df$ci), link.arr.lty = psubset(link.arr.lty, df$ri, df$ci), link.arr.col = psubset(link.arr.col, df$ri, df$ci), link.largest.ontop = link.largest.ontop, link.visible = link.visible, link.rank = link.rank, link.zindex = link.zindex, link.overlap = link.overlap, scale = scale, group = group, big.gap = big.gap, small.gap = small.gap, ...) } # == title # Plot Chord Diagram from a data frame # # == param # -df A data frame with at least two columns. The first two columns specify the connections and the third column (optional) # contains numeric values which are mapped to the width of links as well as the colors if ``col`` is specified as a color mapping function. # The sectors in the plot will be ``union(df[[1]], df[[2]])``. # -grid.col Grid colors which correspond to sectors. The length of the vector should be either 1 or the number of sectors. # It's preferred that ``grid.col`` is a named vector of which names correspond to sectors. # If it is not a named vector, the order of ``grid.col`` corresponds to order of sectors. # -grid.border border for grids. If it is ``NULL``, the border color is same as grid color # -transparency Transparency of link colors, 0 means no transparency and 1 means full transparency. # If transparency is already set in ``col`` or ``row.col`` or ``column.col``, this argument will be ignored. # ``NA``also ignores this argument. # -col Colors for links. It can be a vector which corresponds to connections in ``df``, or a function which generate colors # according to values (the third column) in ``df``, or a single value which means colors for all links are the same. You # may use `colorRamp2` to generate a function which maps values to colors. # -order Order of sectors. Default order is ``union(df[[1]], df[[2]])``. # -directional Whether links have directions. 1 means the direction is from the first column in ``df`` to the second column, -1 # is the reverse, 0 is no direction, and 2 for two directional. The value can be a vector which has same length as number of rows in ``df``. # -xmax maximum value on x-axes, the value should be a named vector. # -direction.type type for representing directions. Can be one or two values in "diffHeight" and "arrows". If the value contains "diffHeight", # different heights of the links are used to represent the directions for which starting root has long height to give people feeling # that something is comming out. If the value contains "arrows", users can customize arrows with following arguments. # The value can be a vector which has same length as number of rows in ``df``. Note if you want to set both ``diffHeight`` # and ``arrows`` for certain links, you need to embed these two options into one string such as ``"diffHeight+arrows"``. # -diffHeight The difference of height between two 'roots' if ``directional`` is set to ``TRUE``. If the value is set to # a positive value, start root is shorter than end root and if it is set to a negative value, start root is longer # than the end root. The value can be a vector which has same length as number of rows in ``df``. # -link.target.prop If the Chord diagram is directional, for each source sector, whether to draw bars that shows the proportion of # target sectors. # -target.prop.height The height of the bars when ``link.target.prop`` is turned on. # -reduce if the ratio of the width of certain grid compared to the whole circle is less than this value, the grid is removed on the plot. # Set it to value less than zero if you want to keep all tiny grid. # -self.link if there is a self link in one sector, 1 means the link will be degenerated as a 'mountain' and the width corresponds to the value for this connection. # 2 means the width of the starting root and the ending root all have the same width that corresponds to the value for the connection. # -preAllocateTracks Pre-allocate empty tracks before drawing Chord diagram. It can be a single number indicating # how many empty tracks needed to be created or a list containing settings for empty # tracks. Please refer to vignette for details. # -annotationTrack Which annotation track should be plotted? By default, a track containing sector names and a track # containing grid will be created. # -annotationTrackHeight Track height corresponding to values in ``annotationTrack``. # -link.border border for links, single scalar or a vector which has the same length as nrows of ``df`` or a data frame # -link.lwd width for link borders, single scalar or a vector which has the same length as nrows of ``df`` or a data frame # -link.lty style for link borders, single scalar or a vector which has the same length as nrows of ``df`` or a data frame # -link.auto Ignored. # -link.sort whether sort links on every sector based on the width of the links on it. The value can be logical. The value can also be string # "default" which automatically adjusts link orders so that links have minimal overall intersections. The value can also be a string # "asis" and it is only workable for input as a data frame so that the links have the same orders as in the original data frame.# -link.decreasing for ``link.sort`` # -link.decreasing for ``link.sort`` # -link.arr.length pass to `circos.link`. The format of this argument is same as ``link.lwd``. # -link.arr.width pass to `shape::Arrowhead`. The format of this argument is same as ``link.lwd``. # -link.arr.type pass to `circos.link`, same settings as ``link.lwd``. Default value is ``triangle``. # -link.arr.col color or the single line link which is put in the center of the belt. The format of this argument is same as ``link.lwd``. # -link.arr.lwd line width ofthe single line link which is put in the center of the belt. The format of this argument is same as ``link.lwd``. # -link.arr.lty line type of the single line link which is put in the center of the belt. The format of this argument is same as ``link.lwd``. # -link.largest.ontop controls the order of adding links, whether based on the absolute value? # -link.rank This is argument is removed. # -link.visible whether plot the link. The value is logical, if it is set to ``FALSE``, the corresponding link will not # plotted, but the space is still ocuppied. The format of this argument is same as ``link.lwd`` # -link.zindex order to add links to the circle, a large value means to add it later. # -link.overlap if it is a directional Chord Diagram, whether the links that come or end in a same sector overlap? # -scale scale each sector to same width # -group It contains the group labels and the sector names are used as the names in the vector. # -big.gap Gaps between the sectors in the first column of ``df`` and sectors in the second column in ``df``. # -small.gap Small gap between sectors. # -plot Internally used. # -... pass to `circos.link` # # == details # The data frame can have a column named "rank" which is used to control the order of adding links to the diagram. # # == value # A data frame which contains positions of links, see explanation in `chordDiagram`. # # == seealso # https://jokergoo.github.io/circlize_book/book/the-chorddiagram-function.html # chordDiagramFromDataFrame = function( df, grid.col = NULL, grid.border = NA, transparency = 0.5, col = NULL, order = NULL, directional = 0, xmax = NULL, direction.type = "diffHeight", diffHeight = convert_height(2, "mm"), link.target.prop = TRUE, target.prop.height = mm_h(1), reduce = 1e-5, self.link = 2, preAllocateTracks = NULL, annotationTrack = c("name", "grid", "axis"), annotationTrackHeight = convert_height(c(3, 2), "mm"), link.border = NA, link.lwd = par("lwd"), link.lty = par("lty"), link.auto = TRUE, link.sort = "default", link.decreasing = TRUE, link.arr.length = ifelse(link.arr.type == "big.arrow", 0.02, 0.4), link.arr.width = link.arr.length/2, link.arr.type = "triangle", link.arr.lty = par("lty"), link.arr.lwd = par("lwd"), link.arr.col = par("col"), link.largest.ontop = FALSE, link.visible = TRUE, link.rank = NULL, link.zindex = seq_len(nrow(df)), link.overlap = FALSE, scale = FALSE, group = NULL, big.gap = 10, small.gap = 1, plot = TRUE, ...) { if(!is.null(link.rank)) { stop_wrap("`link.rank` is not supported and will be removed soon. Please use `link.zindex` instead.") } if(nrow(df) != 2) { if(identical(direction.type, c("diffHeight", "arrows")) || identical(direction.type, c("arrows", "diffHeight"))) { direction.type = "diffHeight+arrows" } } # check the format of the data frame if(!inherits(df, "data.frame")) { stop_wrap("`df` must be a data frame.") } df = as.data.frame(df) if(ncol(df) < 2) { stop_wrap("`df` should have at least have two columns.") } if(ncol(df) == 2) { df[, 3] = rep(1, nrow(df)) df[, 4] = df[, 3] } else { numeric_column = sapply(df, is.numeric); numeric_column[1:2] = FALSE if(sum(numeric_column) == 0) { df[, 3] = rep(1, nrow(df)) df[, 4] = df[, 3] } else if(sum(numeric_column) == 1) { df[, 3] = df[, numeric_column] df[, 4] = df[, 3] } else if(sum(numeric_column) >= 2) { v1 = df[, which(numeric_column)[1]] v2 = df[, which(numeric_column)[2]] df[, 3] = v1 df[, 4] = v2 if(circos.par$message) message_wrap("There are more than one numeric columns in the data frame. Take the first two numeric columns and draw the link ends with unequal width.\n\nType `circos.par$message = FALSE` to suppress the message.") } } if(scale) { for(nm in unique(df[, 1])) df[ df[, 1] == nm, 4] = df[ df[, 1] == nm, 3]/(sum(abs(df[ df[, 1] == nm, 3])) + sum(abs(df[ df[, 2] == nm, 3]))) for(nm in unique(df[, 2])) df[ df[, 2] == nm, 5] = df[ df[, 2] == nm, 3]/(sum(abs(df[ df[, 2] == nm, 3])) + sum(abs(df[ df[, 1] == nm, 3]))) df[is.na(df[, 4]), 4] = 0 df[is.na(df[, 5]), 5] = 0 df = df[, -3] } df2 = df[1:4] df2[[1]] = as.character(df2[[1]]) df2[[2]] = as.character(df2[[2]]) colnames(df2) = c("rn", "cn", "value1", "value2") df = df2 nr = nrow(df) if(is.null(link.zindex)) { link.zindex = seq_len(nrow(df)) } transparency = ifelse(transparency < 0, 0, ifelse(transparency > 1, 1, transparency)) cate = union(df[[1]], df[[2]]) if(!is.null(order)) { if(length(grid.col) > 1) { if(is.null(names(grid.col))) { warning_wrap("Since you have set `order`, you should better set `grid.col` as a named vector where sector names are the vector names, or else the color will be wrongly assigned.") } else { if(length(setdiff(cate, names(grid.col))) > 0) { warning_wrap("Since you have set `order`, you should better set `grid.col` as a named vector where sector names are the vector names (should contain all sectors).") } } } order = intersect(order, cate) if(length(order) != length(cate)) { stop_wrap("`order` should contain names of all sectors.") } if(is.numeric(order)) { if(!setequal(order, seq_along(cate))) { stop_wrap("`order` needs to be integers ranging from 1 to", length(cate)) } cate = cate[order] } else { if(!setequal(order, cate)) { stop_wrap("`order` should only be picked from sectors.") } cate = order } } n = length(cate) if(is.null(grid.col)) { grid.col = rand_color(n) names(grid.col) = cate } else { if(length(grid.col) > 1) { if(!is.null(group)) { if(is.null(names(grid.col))) { warning_wrap("Since you have set `group`, you should better set `grid.col` as a named vector where sector names are the vector names, or else the color will be wrongly assigned.") } else { if(length(setdiff(cate, names(grid.col))) > 0) { warning_wrap("Since you have set `group`, you should better set `grid.col` as a named vector where sector names are the vector names (should contain all sectors).") } } } } if(!is.null(names(grid.col))) { unnamed_grid = setdiff(cate, names(grid.col)) if(length(unnamed_grid) > 0) { grid.col = c(grid.col, structure(rand_color(length(unnamed_grid)), names = unnamed_grid)) # stop("Since your ``grid.col`` is a named vector, all sectors should have corresponding colors.\n") } grid.col = grid.col[as.vector(cate)] } else if(length(grid.col) == 1) { grid.col = rep(grid.col, n) names(grid.col) = cate } else if(length(grid.col) == length(cate)) { names(grid.col) = cate } else { stop_wrap("Since you set ``grid.col``, the length should be either 1 or number of sectors, or set your ``grid.col`` as vector with names.") } } # colors if(is.null(col)) { col = grid.col[df[[1]]] } else { if(is.function(col)) { col = col(pmax(df$value1, df$value2)) } else { col = rep(col, nr)[1:nr] } } rgb_mat = t(col2rgb(col, alpha = TRUE)) if(length(transparency) == nrow(rgb_mat)) { if(all(is.na(transparency))) { col = rgb(rgb_mat, maxColorValue = 255) } else { col = rgb(rgb_mat, maxColorValue = 255, alpha = (1-transparency)*255) } } else { if(is.na(transparency)) { col = rgb(rgb_mat, maxColorValue = 255, alpha = rgb_mat[, 4]) } else if(all(rgb_mat[, 4] == 255)) { col = rgb(rgb_mat, maxColorValue = 255, alpha = (1-transparency)*255) } else { col = rgb(rgb_mat, maxColorValue = 255, alpha = rgb_mat[, 4]) } } .normalize_to_vector = function(x, link, default) { n = nrow(link) if(inherits(x, "data.frame")) { y = rep(default, n) xv = x[[3]] names(xv) = paste(x[[1]], x[[2]], sep = "$%^") lv = paste(link[[1]], link[[2]], sep = "$%^") names(y) = lv y[names(xv)] = xv y } else if(length(x) == 1) { rep(x, n) } else { x } } link.border = .normalize_to_vector(link.border, df[1:2], default = NA) link.lwd = .normalize_to_vector(link.lwd, df[1:2], default = 1) link.lty = .normalize_to_vector(link.lty, df[1:2], default = 1) link.arr.length = .normalize_to_vector(link.arr.length, df[1:2], default = 0.4) link.arr.width = .normalize_to_vector(link.arr.width, df[1:2], default = 0.2) link.arr.type = .normalize_to_vector(link.arr.type, df[1:2], default = "triangle") link.arr.lty = .normalize_to_vector(link.arr.lty, df[1:2], default = 1) link.arr.lwd = .normalize_to_vector(link.arr.lwd, df[1:2], default = 1) link.arr.col = .normalize_to_vector(link.arr.col, df[1:2], default = NA) link.visible = .normalize_to_vector(link.visible, df[1:2], default = NA) link.zindex = .normalize_to_vector(link.zindex, df[1:2], default = NA) directional = .normalize_to_vector(directional, df[1:2], default = 0) direction.type = .normalize_to_vector(direction.type, df[1:2], default = "diffHeight") # if(link.auto) { # od = order(factor(df[, 2], levels = cate), # factor(df[, 1], levels = cate)) # df = df[od, , drop = FALSE] # col = col[od] # link.border = link.border[od] # link.lwd = link.lwd[od] # link.lty = link.lty[od] # link.arr.length = link.arr.length[od] # link.arr.width = link.arr.width[od] # link.arr.type = link.arr.type[od] # link.arr.lty = link.arr.lty[od] # link.arr.lwd = link.arr.lwd[od] # link.arr.col = link.arr.col[od] # link.visible = link.visible[od] # link.zindex = link.zindex[od] # directional = directional[od] # direction.type = direction.type[od] # } #### reduce the data frame onr = nrow(df) onn = union(df[, 1], df[, 2]) while(1) { xsum = structure(rep(0, length(cate)), names = cate) for(i in seq_len(nr)) { if(df$rn[i] == df$cn[i]) { xsum[df$rn[i]] = xsum[df$rn[i]] + abs(df$value1[i]) if(self.link == 2) { xsum[df$rn[i]] = xsum[df$rn[i]] + abs(df$value2[i]) # <<- self-link!!!!! } } else { xsum[df$rn[i]] = xsum[df$rn[i]] + abs(df$value1[i]) xsum[df$cn[i]] = xsum[df$cn[i]] + abs(df$value2[i]) } } keep = names(xsum)[xsum / sum(xsum) >= reduce] l = df$rn %in% keep & df$cn %in% keep cate = intersect(cate, keep) df = df[l, , drop = FALSE] grid.col = grid.col[intersect(names(grid.col), keep)] col = col[l] link.border = link.border[l] link.lwd = link.lwd[l] link.lty = link.lty[l] link.arr.length = link.arr.length[l] link.arr.width = link.arr.width[l] link.arr.type = link.arr.type[l] link.arr.lwd = link.arr.lwd[l] link.arr.lty = link.arr.lty[l] link.arr.col = link.arr.col[l] link.visible = link.visible[l] link.zindex = link.zindex[l] directional = directional[l] direction.type = direction.type[l] nr = nrow(df) reduce = 1e-10 if(nr == onr) break onr = nr } nn = union(df[, 1], df[, 2]) if(length(nn) < length(onn)) { gap.degree = circos.par$gap.degree if(length(gap.degree) > 1) { if(is.null(names(gap.degree))) { if(length(nn) != length(gap.degree)) { stop_wrap("`reduce` argument causes reduction of sectors. You can either set `reduce = 0`, or adjust the `gap.degree`/`gap.after` in `circos.par()` to remove tiny sectors, or set `gap.degree`/`gap.after` as a named vector where sector names are the vector names (tiny sectors can be included).") } } else { if(length(setdiff(nn, names(gap.degree))) == 0) { } else { if(length(nn) != length(gap.degree)) { stop_wrap("`reduce` argument causes reduction of sectors. You can either set `reduce = 0`, or adjust the `gap.degree`/`gap.after` in `circos.par()` to remove tiny sectors, or set `gap.degree`/`gap.after` as a named vector where sector names are the vector names (tiny sectors can be included).") } } } } } # re-calcualte xsum xsum = structure(rep(0, length(cate)), names = cate) for(i in seq_len(nr)) { if(df$rn[i] == df$cn[i]) { xsum[df$rn[i]] = xsum[df$rn[i]] + abs(df$value1[i]) if(self.link == 2) { xsum[df$rn[i]] = xsum[df$rn[i]] + abs(df$value2[i]) # <<- self-link!!!!! } } else { xsum[df$rn[i]] = xsum[df$rn[i]] + abs(df$value1[i]) xsum[df$cn[i]] = xsum[df$cn[i]] + abs(df$value2[i]) } } ### group_by ### gap.after = NULL if(!is.null(group)) { # validate `group` if(is.null(names(group))) { stop_wrap("`group` should be named vector where names are the sector names and values are the group labels.") } if(length(setdiff(cate, names(group))) > 0) { stop_wrap("Names in `group` should cover all sector names.") } group = group[intersect(names(group), cate)] tg = table(group) group_lt = split(names(group), group) sn_by_group = unlist(group_lt) cate = intersect(sn_by_group, cate) xsum = xsum[cate] gap.after = c(unlist(lapply(tg, function(x) c(rep(small.gap, x-1), big.gap)))) names(gap.after) = sn_by_group } # add additinal columns in df df$o1 = rep(0, nr) # order of the link root in the sector df$o2 = rep(0, nr) # order of the other link root in the sector df$x1 = rep(0, nr) # end position of the link root in the sector df$x2 = rep(0, nr) # end position on the other link root in the sector ######## sort links on every sector # row first .order = function(x, sort = FALSE, reverse = FALSE) { if(sort) { od = order(x) } else { od = seq_along(x) } if(reverse) { od = rev(od) } return(od) } if(length(link.sort) == 1) link.sort = rep(link.sort, 2) if(length(link.decreasing) == 1) link.decreasing = rep(link.decreasing, 2) if(identical(link.sort[1], "default")) { od = tapply(seq_len(nrow(df)), df$rn, function(ind) { rn = df[ind[1], "rn"] cn = df[ind, "cn"] fa = c(cate, cate) i = which(fa == rn)[1] fa = fa[seq(i, i + length(cate) - 1)] order(factor(cn, levels = fa), decreasing = TRUE) }) } else if(identical(link.sort[1], "asis")) { od = tapply(abs(df$value1), df$rn, .order, FALSE, FALSE) } else if(identical(link.sort[1], FALSE)) { od = tapply(abs(df$value1), df$rn, .order, FALSE, link.decreasing[1]) } else { # position of root 1 od = tapply(abs(df$value1), df$rn, .order, link.sort[1], link.decreasing[1]) } for(nm in names(od)) { # for each sector l = df$rn == nm # rows in df that correspond to current sector df$o1[l] = od[[nm]] # adjust rows according to the order in current sector df$x1[l][od[[nm]]] = cumsum(abs(df$value1[l])[od[[nm]]]) # position l2 = df$rn == nm & df$cn == nm if(sum(l2)) { # there is a self link if(self.link == 1) { df$x2[l2] = df$x1[l2]+abs(df$value1[l2])*0.000001 } } } max_o1 = sapply(od, max) sum_1 = tapply(abs(df$value1), df$rn, sum) # position of root 2 if(identical(link.sort[2], "default")) { od = tapply(seq_len(nrow(df)), df$cn, function(ind) { cn = df[ind[1], "cn"] rn = df[ind, "rn"] fa = c(cate, cate) i = which(fa == cn)[1] fa = fa[seq(i, i + length(cate) - 1)] # for the ordering of duplicated rows v = numeric(length(rn)) for(x in unique(rn)) { l = rn == x v[l] = seq_len(sum(l)) } order(factor(rn, levels = fa), v, decreasing = TRUE) }) } else if(identical(link.sort[2], "asis")) { od = tapply(abs(df$value2), df$cn, .order, FALSE, FALSE) } else if(identical(link.sort[2], FALSE)) { od = tapply(abs(df$value2), df$cn, .order, FALSE, link.decreasing[2]) } else { od = tapply(abs(df$value2), df$cn, .order, link.sort[2], link.decreasing[2]) } for(nm in names(od)) { if(!is.na(max_o1[nm])) { # if cn already in rn l = df$cn == nm if(self.link == 1) { l2 = ! df$rn[l] == nm # self link # od[[nm]][l2] = order(od[[nm]][l2]) if(sum(l2)) { od[[nm]] = order(od[[nm]][l2]) } } else { l2 = rep(TRUE, sum(l)) } df$o2[l][l2] = od[[nm]] + max_o1[nm] df$x2[l][l2][ od[[nm]] ] = cumsum(abs(df$value2[l][l2])[ od[[nm]] ]) + sum_1[nm] } else { l = df$cn == nm df$o2[l] = od[[nm]] df$x2[l][od[[nm]]] = cumsum(abs(df$value2[l])[od[[nm]]]) } } if(self.link == 1) { l = df$rn == df$cn df$x1[l] = pmin(df$x1[l], df$x2[l]) df$x2[l] = pmin(df$x1[l], df$x2[l]) } if(!is.null(xmax)) { overlap = intersect(names(xmax), names(xsum)) xmax = xmax[overlap] xmax = xmax[xmax > xsum[overlap]] if(length(xmax)) { xsum[names(xmax)] = xmax } } if(link.overlap) { if(!directional) { warning("`link.overlap` should be used with directional = 1 or -1.") } x1_sum = tapply(df$x1, df$rn, max)[names(xsum)] x1_sum[is.na(x1_sum)] = 0; names(x1_sum) = names(xsum) x2_sum = tapply(df$x2, df$cn, max)[names(xsum)] - x1_sum x2_sum[is.na(x2_sum)] = 0; names(x2_sum) = names(xsum) df$x2 = df$x2 - x1_sum[df$cn] xsum = pmax(x1_sum, x2_sum) } if(!plot) return(df) o.cell.padding = circos.par("cell.padding") circos.par(cell.padding = c(0, 0, 0, 0)) o.start.degree = circos.par("start.degree") o.gap.after = circos.par("gap.after") o.points.overflow.warning = circos.par("points.overflow.warning") circos.par("points.overflow.warning" = FALSE) ### group_by ### if(!is.null(gap.after)) { circos.par(gap.after = gap.after) } if((identical(circos.par("gap.after"), 1))) { # gap.after is not set in circos.par() if(length(intersect(df[, 1], df[, 2])) == 0) { ind1 = which(cate %in% df[, 1]) ind2 = which(cate %in% df[, 2]) if(max(ind1) < min(ind2) || max(ind2) < min(ind1)) { n_df1 = length(unique(df[, 1])) n_df2 = length(unique(df[, 2])) s1 = sum(abs(df[, 3])) s2 = sum(abs(df[, 4])) if(cate[1] %in% df[ ,2]) { foo = n_df1 n_df1 = n_df2 n_df2 = foo foo = s1 s1 = s2 s2 = foo } n_sector = n_df1 + n_df2 d1 = (360 - small.gap*(n_sector - 2) - big.gap*2) * (s1/(s1 + s2)) + small.gap*(n_df1-1) if(circos.par$start.degree == 1) circos.par$start.degree = 0 if(circos.par$clock.wise) { start_degree = circos.par$start.degree - (180 - d1)/2 } else { start_degree = circos.par$start.degree + (180 - d1)/2 } gap.after = c(rep(small.gap, n_df1 - 1), big.gap, rep(small.gap, n_df2 - 1), big.gap) suppressWarnings(circos.par(start.degree = start_degree, gap.after = gap.after)) } } else { # warning("The two sets of sectors overlap, ignore `gap.degree`.") } } else { # warning("You have changed the default value of circos.par('gap.degree') or circos.par('gap.after').\nIgnore `gap.degree` argument.") } circos.initialize(factors = factor(cate, levels = cate), xlim = cbind(rep(0, length(xsum)), xsum)) # pre allocate track if(!is.null(preAllocateTracks)) { pa = parsePreAllocateTracksValue(preAllocateTracks) for(i in seq_along(pa)) { va = pa[[i]] circos.trackPlotRegion(ylim = va$ylim, track.height = va$track.height, bg.col = va$bg.col, bg.border = va$bg.border, bg.lty = va$bg.lty, bg.lwd = va$bg.lwd, track.margin = va$track.margin) } } if("name" %in% annotationTrack) { circos.trackPlotRegion(ylim = c(0, 1), bg.border = NA, panel.fun = function(x, y) { xlim = get.cell.meta.data("xlim") current.sector.index = get.cell.meta.data("sector.index") i = get.cell.meta.data("sector.numeric.index") circos.text(mean(xlim), 0.9, labels = current.sector.index, cex = 0.8, facing = "inside", niceFacing = TRUE, adj = c(0.5, 0)) }, track.height = annotationTrackHeight[which(annotationTrack %in% "name")]) } if("grid" %in% annotationTrack) { circos.trackPlotRegion(ylim = c(0, 1), bg.border = NA, panel.fun = function(x, y) { xlim = get.cell.meta.data("xlim") current.sector.index = get.cell.meta.data("sector.index") if(is.null(grid.border)) { border.col = grid.col[current.sector.index] } else { border.col = grid.border } circos.rect(xlim[1], 0, xlim[2], 1, col = grid.col[current.sector.index], border = border.col) if("axis" %in% annotationTrack) { if(scale) { circos.axis("top", labels = function(x) {paste0(round(x*100), "%")}, labels.cex = 0.5) } else { circos.axis("top", labels.cex = 0.5) } } }, track.height = annotationTrackHeight[which(annotationTrack %in% "grid")]) } rou = get_most_inside_radius() rou1 = numeric(nr) rou2 = numeric(nr) for(i in seq_len(nr)) { if(directional[i]) { if(grepl("diffHeight", direction.type[i])) { if(directional[i] == 1) { if(diffHeight > 0) { rou1[i] = rou - diffHeight rou2[i] = rou } else { rou1[i] = rou rou2[i] = rou + diffHeight } } else if(directional[i] == -1) { if(diffHeight > 0) { rou1[i] = rou rou2[i] = rou - diffHeight } else { rou1[i] = rou + diffHeight rou2[i] = rou } } else if(directional[i] == 2) { if(diffHeight > 0) { rou1[i] = rou - diffHeight rou2[i] = rou - diffHeight } else { rou1[i] = rou + diffHeight rou2[i] = rou + diffHeight } } } else { rou1[i] = rou rou2[i] = rou } } else { rou1[i] = rou rou2[i] = rou } } if(link.largest.ontop) { link_order = order(pmax(abs(df$value1), abs(df$value2)), decreasing = FALSE) } else { link_order = order(link.zindex) } for(k in link_order) { if(abs(df$value1[k])/sum(abs(df$value1)) < 1e-6 && abs(df$value2[k])/sum(abs(df$value2)) < 1e-6) next if(link.visible[k] && col[k] != "#FFFFFF00") { if(setequal(direction.type, c("diffHeight"))) { circos.link(df$rn[k], c(df$x1[k] - abs(df$value1[k]), df$x1[k]), df$cn[k], c(df$x2[k] - abs(df$value2[k]), df$x2[k]), directional = 0, col = col[k], rou1 = rou1[k], rou2 = rou2[k], border = link.border[k], lwd = link.lwd[k], lty = link.lty[k], ...) } else if(grepl("arrows", direction.type[k])) { circos.link(df$rn[k], c(df$x1[k] - abs(df$value1[k]), df$x1[k]), df$cn[k], c(df$x2[k] - abs(df$value2[k]), df$x2[k]), directional = directional[k], col = col[k], rou1 = rou1[k], rou2 = rou2[k], border = link.border[k], lwd = link.lwd[k], lty = link.lty[k], arr.length = link.arr.length[k], arr.width = link.arr.width[k], arr.type = link.arr.type[k], arr.col = link.arr.col[k], arr.lty = link.arr.lty[k], arr.lwd = link.arr.lwd[k], ...) } } } df$col = col if(link.target.prop && all(grepl("diffHeight", direction.type)) && min(diffHeight) > 0) { if(all(directional %in% c(1, 2))) { last.track.index = rev(get.all.track.index())[1] for(i in seq_len(nrow(df))) { if(abs(df$value1[i]) > 0 && link.visible[i] && col[i] != "#FFFFFF00") { set.current.cell(sector.index = df$rn[i], track.index = last.track.index) bar_h = convert_h_from_canvas_to_data(min(target.prop.height, min(diffHeight))) rect_y = convert_h_from_canvas_to_data(get.cell.meta.data("track.margin", track.index = last.track.index)[1] + circos.par("track.margin")[2]) circos.rect(df[i, "x1"], -rect_y, df[i, "x1"] - abs(df[i, "value1"]), -rect_y - bar_h, col = grid.col[df$cn[i]], border = NA) } } } if(all(directional %in% c(-1, 2))) { last.track.index = rev(get.all.track.index())[1] for(i in seq_len(nrow(df))) { if(abs(df$value1[i]) > 0 && link.visible[i] && col[i] != "#FFFFFF00") { set.current.cell(sector.index = df$cn[i], track.index = last.track.index) bar_h = convert_h_from_canvas_to_data(min(target.prop.height, min(diffHeight))) circos.rect(df[i, "x2"], -mm_y(1), df[i, "x2"] - abs(df[i, "value2"]), -mm_y(1) - bar_h, col = grid.col[df$rn[i]], border = NA) } } } } suppressWarnings(circos.par("cell.padding" = o.cell.padding, "start.degree" = o.start.degree, "gap.after" = o.gap.after, "points.overflow.warning" = o.points.overflow.warning)) return(invisible(df)) } # convert a height measured in canvas coord to the height in a data coord convert_h_from_canvas_to_data = function(h, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { yplot = get.cell.meta.data("yplot", sector.index = sector.index, track.index = track.index) cell.ylim = get.cell.meta.data("cell.ylim", sector.index = sector.index, track.index = track.index) h/abs(yplot[2] - yplot[1]) * (cell.ylim[2] - cell.ylim[1]) } psubset = function(mat, ri, ci) { return(mat[ri + (ci - 1) * nrow(mat)]) } # == title # Calculate gaps to make two Chord diagrams in the same scale # # == param # -x1 The matrix or the data frame for the first Chord diagram. # -x2 The matrix or the data frame for the second Chord diagram. # -big.gap ``big.gap`` for the first Chord diagram. # -small.gap ``small.gap`` for both Chord diagrams. # # == details # Both Chord diagrams should be both two-group Chord diagram. # # == value # A numeric value which can be directly set to ``big.gap`` in the second Chord diagram. # # == examples # set.seed(123) # mat1 = matrix(sample(20, 25, replace = TRUE), 5) # chordDiagram(mat1, directional = 1, grid.col = rep(1:5, 2), transparency = 0.5, # big.gap = 10, small.gap = 1) # mat2 = mat1 / 2 # gap = calc_gap(mat1, mat2, big.gap = 10, small.gap = 1) # chordDiagram(mat2, directional = 1, grid.col = rep(1:5, 2), transparency = 0.5, # big.gap = gap, small.gap = 1) calc_gap = function(x1, x2, big.gap = 10, small.gap = 1) { if(is.matrix(x1)) { sum1 = sum(abs(x1)) n1 = nrow(x1) n2 = ncol(x1) } else { sum1 = sum(abs(x1[, 3])) n1 = length(unique(x1[, 1])) n2 = length(unique(x1[, 2])) } sum_gap1 = sum(c(rep(small.gap, n1 - 1), big.gap, rep(small.gap, n2 - 1), big.gap)) if(is.matrix(x2)) { sum2 = sum(abs(x2)) n1 = nrow(x2) n2 = ncol(x2) } else { sum2 = sum(abs(x2[, 3])) n1 = length(unique(x2[, 1])) n2 = length(unique(x2[, 2])) } sum_gap2 = sum(rep(small.gap, n1 + n2 - 2)) if(sum1 < sum2) { stop_wrap("Sum of `x1` should be larger than the sum of `x2`.") } percent = sum2 / sum1 blank.degree = (360 - sum_gap1) * (1 - percent) (blank.degree - sum_gap2)/2 } circlize/R/low_level.R0000644000176200001440000031075514201434674014412 0ustar liggesusers # == title # Add points to a plotting region # # == param # -x Data points on x-axis, measured in "current" data coordinate # -y Data points on y-axis, measured in "current" data coordinate # -sector.index Index for the sector # -track.index Index for the track # -pch Point type # -col Point color # -cex Point size # -bg backgrond of points # # == details # This function can only add points in one specified cell. Pretending a low-level plotting # function, it can only be applied in plotting region which has been created. # # You can think the function similar as the normal `graphics::points` # function, just adding points in the circular plotting region. The position of # cell is identified by ``sector.index`` and ``track.index``, if they are not # specified, they are in 'current' sector and 'current' track. # # Data points out of the plotting region will also be added, but with warning messages. # # Other graphics parameters which are available in the function are ``pch``, ``col`` # and ``cex`` which have same meaning as those in the `graphics::par`. # # It is recommended to use `circos.points` inside ``panel.fun`` in `circos.trackPlotRegion` so that # it draws points directly on "curent" cell. # # == seealso # https://jokergoo.github.io/circlize_book/book/graphics.html#points # # == example # circos.initialize(letters[1:8], xlim = c(0, 1)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # circos.points(runif(10), runif(10)) # }) # circos.points(runif(10), runif(10), sector.index = "c", pch = 16, col = "red") # circos.clear() circos.points = function( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index(), pch = par("pch"), col = par("col"), cex = par("cex"), bg = par("bg")) { if(!has.cell(sector.index, track.index)) { stop_wrap("'circos.points' can only be used after the plotting region has been created") } if(missing(y)) { if(ncol(x) == 2) { y = x[, 2] x = x[, 1] } } len_x = length(x) len_y = length(y) if(len_x == 1) x = rep(x, len_y) if(len_y == 1) y = rep(y, len_x) if(length(x) != length(y)) { stop_wrap("Length of x and y differ.") } # whether the points that are out of the plotting region. # If there is, throw warnings. check.points.position(x, y, sector.index, track.index) d = circlize(x, y, sector.index = sector.index, track.index = track.index) points(polar2Cartesian(d), pch = pch, col = col, cex = cex, bg = bg) return(invisible(NULL)) } # == title # Add points to the plotting regions in a same track # # == param # -sectors A `factor` or a character vector which represents the categories of data # -factors The same as ``sectors``. It will be removed in future versions. # -x Data points on x-axis # -y Data points on y-axis # -track.index Index for the track # -pch Point type # -col Point color # -cex Point size # -bg backgrond color # # == details # The function adds points in multiple cells by first splitting data into several parts in which # each part corresponds to one factor (sector index) and then adding points in each cell by calling `circos.points`. # # Length of ``pch``, ``col`` and ``cex`` can be one, length of levels of the factors or length of # factors. # # This function can be replaced by a ``for`` loop containing `circos.points`. # # == example # circos.initialize(letters[1:8], xlim = c(0, 1)) # df = data.frame(sectors = sample(letters[1:8], 100, replace = TRUE), # x = runif(100), y = runif(100)) # circos.track(ylim = c(0, 1)) # circos.trackPoints(df$sectors, x = df$x, y = df$y, pch = 16, col = as.numeric(factor(df$fa))) # circos.clear() circos.trackPoints = function( sectors, x, y, track.index = get.current.track.index(), pch = par("pch"), col = par("col"), cex = par("cex"), bg = par("bg"), factors = sectors ) { # basic check here if(length(x) != length(factors) || length(y) != length(factors)) { stop_wrap("Length of data and length of factors differ.\n") } if(!is.factor(factors)) { factors = factor(factors) } # check whether there are some categories that are not in the circle setdiff.factors = setdiff(levels(factors), get.all.sector.index()) if(length(setdiff.factors)) { stop_wrap("Cannot find these categories in existed sectors:", paste(setdiff.factors, collapse = ", "), ".") } le = levels(factors) # set these graphic parameters with same length as the factors pch = recycle.with.factors(pch, factors) col = recycle.with.factors(col, factors) cex = recycle.with.factors(cex, factors) bg = recycle.with.factors(bg, factors) for(i in seq_along(le)) { l = factors == le[i] nx = x[l] ny = y[l] npch = pch[l] ncol = col[l] ncex = cex[l] nbg = bg[l] circos.points(nx, ny, sector.index = le[i], track.index = track.index, pch = npch, col = ncol, cex = ncex, bg = nbg) } return(invisible(NULL)) } # == title # Add lines to the plotting region # # == param # -x Data points on x-axis, measured in "current" data coordinate. # -y Data points on y-axis, measured in "current" data coordinate. # -sector.index Index for the sector. # -track.index Index for the track. # -col Line color. # -lwd Line width. # -lty Line style. # -type Line type, similar as ``type`` argument in `graphics::lines`, but only in ``c("l", "o", "h", "s")`` # -straight Whether draw straight lines between points. # -area Whether to fill the area below the lines. If it is set to ``TRUE``, ``col`` controls the filled color # in the area and ``border`` controls color of the line. # -area.baseline deprecated, use ``baseline`` instead. # -baseline The base line to draw areas. By default it is the minimal of y-range (bottom). It can be a string or a number. # If a string, it should be one of ``bottom`` and ``top``. This argument also works if ``type`` is set to ``h``. # -border color for border of the area. # -pt.col If ``type`` is "o", point color. # -cex If ``type`` is "o", point size. # -pch If ``type`` is "o", point type. # # == details # Normally, straight lines in the Cartesian coordinate have to be transformed into curves in the circular layout. # But if you do not want to do such transformation you can use this function just drawing straight # lines between points by setting ``straight`` to ``TRUE``. # # Drawing areas below lines can help to identify the direction of y-axis in cells (since it is a circle). This can be done by specifying # ``area`` to ``TURE``. # # == example # sectors = letters[1:9] # circos.par(points.overflow.warning = FALSE) # circos.initialize(sectors, xlim = c(0, 10)) # circos.trackPlotRegion(sectors, ylim = c(0, 10), track.height = 0.5) # # circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "a") # circos.text(5, 9, "type = 'l'", sector.index = "a", facing = "outside") # # circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "b", type = "o") # circos.text(5, 9, "type = 'o'", sector.index = "b", facing = "outside") # # circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "c", type = "h") # circos.text(5, 9, "type = 'h'", sector.index = "c", facing = "outside") # # circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "d", type = "h", baseline = 5) # circos.text(5, 9, "type = 'h', baseline = 5", sector.index = "d", facing = "outside") # # circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "e", type = "s") # circos.text(5, 9, "type = 's'", sector.index = "e", facing = "outside") # # circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "f", area = TRUE) # circos.text(5, 9, "type = 'l', area = TRUE", sector.index = "f") # # circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "g", type = "o", area = TRUE) # circos.text(5, 9, "type = 'o', area = TRUE", sector.index = "g") # # circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "h", type = "s", area = TRUE) # circos.text(5, 9, "type = 's', area = TRUE", sector.index = "h") # # circos.lines(sort(runif(10)*10), runif(10)*8, sector.index = "i", area = TRUE, baseline = "top") # circos.text(5, 9, "type = 'l', area = TRUE, baseline = 'top'", sector.index = "i") # # circos.clear() circos.lines = function( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index(), col = ifelse(area, "grey", par("col")), lwd = par("lwd"), lty = par("lty"), type = "l", straight = FALSE, area = FALSE, area.baseline = NULL, border = "black", baseline = "bottom", pt.col = par("col"), cex = par("cex"), pch = par("pch")) { if(!is.null(area.baseline)) { baseline = area.baseline warning_wrap("`area.baseline` is deprecated, please use `baseline` instead.") } if(missing(y)) { if(ncol(x) == 2) { y = x[, 2] x = x[, 1] } } if(length(x) != length(y)) { stop_wrap("Length of x and y differ.") } n = length(x) if(circos.par$ring) { l = c(x[seq(1, n-1)] > x[seq(2, n)], FALSE) if(any(l)) { x[l] = x[l] - get.cell.meta.data("xrange", sector.index, track.index) } } if(baseline == "bottom") { baseline = get.cell.meta.data("ylim", sector.index, track.index)[1] } else if(baseline == "top") { baseline = get.cell.meta.data("ylim", sector.index, track.index)[2] } if(type == "l") { } else if(type == "o") { circos.points(x, y, sector.index = sector.index, track.index = track.index, col = pt.col, cex = cex, pch = pch) circos.lines(x, y, sector.index = sector.index, track.index = track.index, col = col, lwd = lwd, lty = lty, area = area, border = border) return(invisible(NULL)) } else if(type == "h") { if(length(col) == 1) col = rep(col, length(x)) if(length(lwd) == 1) lwd = rep(lwd, length(x)) if(length(lty) == 1) lty = rep(lty, length(x)) for(i in seq_along(x)) { circos.lines(c(x[i], x[i]), c(baseline, y[i]), sector.index = sector.index, track.index = track.index, col = col[i], lwd = lwd[i], lty = lty[i], straight = TRUE) } return(invisible(NULL)) } else if(type == "s") { d = matrix(nrow = 0, ncol = 2) for(i in seq_along(x)) { if(i == 1) { next } d = rbind(d, lines.expand(c(x[i-1], x[i]), c(y[i-1], y[i-1]), sector.index, track.index)) d = rbind(d, cbind(c(x[i], x[i]), c(y[i-1], y[i]))) } if(area) { ylim = get.cell.meta.data("ylim", sector.index, track.index) d = rbind(d, c(d[nrow(d), 1], baseline)) d = rbind(d, c(d[1, 1], baseline)) circos.polygon(d[, 1], d[, 2], sector.index = sector.index, track.index = track.index, col = col, border = border, lwd = lwd, lty = lty) } else { circos.lines(d[, 1], d[, 2], sector.index = sector.index, track.index = track.index, col = col, lwd = lwd, lty = lty) } return(invisible(NULL)) } if(!has.cell(sector.index, track.index)) { stop_wrap("'circos.lines' can only be used after the plotting region been created.") } # whether the points that are out of the plotting region. check.points.position(x, y, sector.index, track.index) if(straight) { d = cbind(x, y) } else { d = lines.expand(x, y, sector.index, track.index) } if(area) { ylim = get.cell.meta.data("ylim", sector.index, track.index) d = rbind(d, c(d[nrow(d), 1], baseline)) d = rbind(d, c(d[1, 1], baseline)) circos.polygon(d[, 1], d[, 2], sector.index = sector.index, track.index = track.index, col = col, border = border, lwd = lwd, lty = lty) return(invisible(NULL)) } d2 = circlize(d[, 1], d[, 2], sector.index = sector.index, track.index = track.index) lines(polar2Cartesian(d2), col = col, lwd = lwd, lty = lty) return(invisible(NULL)) } # == title # Add lines to the plotting regions in a same track # # == param # -sectors A `factor` or a character vector which represents the categories of data. # -factors The same as ``sectors``. It will be removed in future versions. # -x Data points on x-axis. # -y Data points on y-axis. # -track.index Index for the track. # -col Line color. # -lwd Line width. # -lty Line style. # -type Line type, similar as ``type`` argument in `graphics::lines`, but only in ``c("l", "o", "h", "s")``. # -straight Whether draw straight lines between points. # -area Whether to fill the area below the lines. If it is set to ``TRUE``, ``col`` controls the filled color # in the area and ``border`` controls the color of the line. # -area.baseline Deprecated, use ``baseline`` instead. # -baseline The base line to draw area, pass to `circos.lines`. # -border Color for border of the area. # -pt.col If ``type`` is "o", points color. # -cex If ``type`` is "o", points size. # -pch If ``type`` is "o", points type. # # == details # The function adds lines in multiple cells by first splitting data into several parts in which # each part corresponds to one factor (sector index) and then add lines in cells by calling `circos.lines`. # # This function can be replaced by a ``for`` loop containing `circos.lines`. circos.trackLines = function( sectors, x, y, track.index = get.current.track.index(), col = par("col"), lwd = par("lwd"), lty = par("lty"), type = "l", straight = FALSE, area = FALSE, area.baseline = NULL, border = "black", baseline = "bottom", pt.col = par("col"), cex = par("cex"), pch = par("pch"), factors = sectors) { if(!is.null(area.baseline)) { baseline = area.baseline warning_wrap("`area.baseline` is deprecated, please use `baseline` instead.") } # basic check here if(length(x) != length(factors) || length(y) != length(factors)) { stop_wrap("Length of data and length of factors differ.") } if(!is.factor(factors)) { factors = factor(factors) } # check whether there are some categories that are not in the circle setdiff.factors = setdiff(levels(factors), get.all.sector.index()) if(length(setdiff.factors)) { stop_wrap("Cannot find these categories in existed sectors:", paste(setdiff.factors, collapse = ", "), ".") } le = levels(factors) # set these graphic parameters with same length as the factors col = recycle.with.factors(col, factors) lwd = recycle.with.factors(lwd, factors) lty = recycle.with.factors(lty, factors) pt.col = recycle.with.factors(pt.col, factors) cex = recycle.with.factors(cex, factors) pch = recycle.with.factors(pch, factors) area = recycle.with.levels(area, le) baseline = recycle.with.levels(baseline, le) border = recycle.with.levels(border, le) for(i in seq_along(le)) { l = factors == le[i] nx = x[l] ny = y[l] ncol = col[l] nlwd = lwd[l] nlty = lty[l] npt.col = pt.col[l] ncex = cex[l] npch = pch[l] circos.lines(nx, ny, sector.index = le[i], track.index = track.index, col = ncol, lwd = nlwd, lty = nlty, area = area[i], border = border[i], baseline = baseline[i], pt.col = npt.col, cex = ncex, pch = npch, type = type, straight = straight) } return(invisible(NULL)) } # == title # Draw rectangle-like grid # # == param # -xleft x for the left bottom points # -ybottom y for the left bottom points # -xright x for the right top points # -ytop y for the right top points # -sector.index Index for the sector # -track.index Index for the track # -rot Rotation of the rectangles. The value is measured clockwise in degree. # Rotation is relative to the center of the rectangles. # -... pass to `graphics::polygon` # # == details # The name for this function is `circos.rect` # because if you imagine the plotting region as Cartesian coordinate, then it is rectangle. # in the polar coordinate, the up and bottom edge become two arcs. # # This function can be vectorized. # # == examples # circos.initialize(c("a", "b", "c", "d"), xlim = c(0, 10)) # circos.track(ylim = c(0, 10), panel.fun = function(x, y) { # for(rot in seq(0, 360, by = 30)) { # circos.rect(2, 2, 6, 6, rot = rot) # } # }, track.height = 0.5) # circos.rect = function( xleft, ybottom, xright, ytop, sector.index = get.current.sector.index(), track.index = get.current.track.index(), rot = 0, ...) { # if(! (length(xleft) == 1 && # length(ybottom) == 1 && # length(xright) == 1 && # length(ytop) == 1) ) { # stop("There should only be one data points in 'xleft', 'ybottom', 'xright' or 'ytop'.\n") # } if(!has.cell(sector.index, track.index)) { stop_wrap("'circos.rect' can only be used after the plotting region been created.") } if(missing(xleft) && missing(ybottom) && missing(xright) && missing(ytop)) { cell.xlim = get.cell.meta.data("cell.xlim", sector.index = sector.index, track.index = track.index) cell.ylim = get.cell.meta.data("cell.ylim", sector.index = sector.index, track.index = track.index) xleft = cell.xlim[1] ybottom = cell.ylim[1] xright = cell.xlim[2] ytop = cell.ylim[2] } n1 = length(xleft) n2 = length(ybottom) n3 = length(xright) n4 = length(ytop) n = max(c(n1, n2, n3, n4)) if(n1 == 1) xleft = rep(xleft, n) if(n2 == 1) ybottom = rep(ybottom, n) if(n3 == 1) xright = rep(xright, n) if(n4 == 1) ytop = rep(ytop, n) if(! (length(xleft) == length(ybottom) && length(ybottom) == length(xright) && length(xright) == length(ytop)) ) { stop_wrap("xleft, ybottom, xright, ytop should have same length.") } if(circos.par$ring) { l = xleft > xright if(any(l)) { xleft[l] = xleft[l] - get.cell.meta.data("xrange", sector.index, track.index) } } # # no filled colors, just four edges, here edges colors are controled by ``border`` # if(is.na(col)) { # # vertical lines in the original coordinate system are still straight lines # # in the new coordinate system except they now pointing to the circle center. # circos.lines(c(xleft, xleft), c(ybottom, ytop), # sector.index = sector.index, track.index = track.index, # col = border, lty = lty, lwd = lwd, straight = TRUE) # # horizontal lines in the original coordinate system are now arcs and the arcs # # share the same circle center as the polar coordinate system # circos.lines(c(xleft, xright), c(ytop, ytop), # sector.index = sector.index, track.index = track.index, # col = border, lty = lty, lwd = lwd) # circos.lines(c(xright, xright), c(ytop, ybottom), # sector.index = sector.index, track.index = track.index, # col = border, lty = lty, lwd = lwd, straight = TRUE) # circos.lines(c(xleft, xright), c(ybottom, ybottom), # sector.index = sector.index, track.index = track.index, # col = border, lty = lty, lwd = lwd) # } else { # circos.polygon(c(xleft, xleft, xright, xright, xleft), # c(ybottom, ytop, ytop, ybottom, ybottom), # sector.index = sector.index, track.index = track.index, # col = col, border = border, lty = lty, lwd = lwd) # } np = length(xleft) if(rot == 0) { x = unlist(lapply(seq_len(np), function(i) c(xleft[i], xleft[i], xright[i], xright[i], xleft[i], NA))) y = unlist(lapply(seq_len(np), function(i) c(ybottom[i], ytop[i], ytop[i], ybottom[i], ybottom[i], NA))) x = x[-length(x)] y = y[-length(y)] } else { xcenter = (xleft + xright)/2 ycenter = (ybottom + ytop)/2 p1 = list(x = xleft, y = ybottom) p2 = list(x = xright, y = ybottom) p3 = list(x = xright, y = ytop) p4 = list(x = xleft, y = ytop) center = list(x = c(p1$x + p3$x)/2, y = (p1$y + p3$y)/2) q1 = .rotate(p1$x, p1$y, center$x, center$y, rot/180*pi) q2 = .rotate(p2$x, p2$y, center$x, center$y, rot/180*pi) q3 = .rotate(p3$x, p3$y, center$x, center$y, rot/180*pi) q4 = .rotate(p4$x, p4$y, center$x, center$y, rot/180*pi) x = unlist(lapply(seq_len(np), function(i) { c(q1$x[i], q2$x[i], q3$x[i], q4$x[i], q1$x[i], NA) })) y = unlist(lapply(seq_len(np), function(i) { c(q1$y[i], q2$y[i], q3$y[i], q4$y[i], q1$y[i], NA) })) x = x[-length(x)] y = y[-length(y)] } circos.polygon(x, y, sector.index = sector.index, track.index = track.index, ...) return(invisible(NULL)) } # == title # Draw triangles # # == param # -x1 x-coordinates for the first point. # -y1 y-coordinates for the first point. # -x2 x-coordinates for the second point. # -y2 y-coordinates for the second point. # -x3 x-coordinates for the third point. # -y3 y-coordinates for the third point. # -... Pass to `circos.polygon`. # # == example # circos.initialize(c("a", "b", "c", "d"), xlim = c(0, 10)) # circos.track(ylim = c(0, 10), panel.fun = function(x, y) { # circos.triangle(c(2, 2), c(2, 8), # c(8, 8), c(2, 8), # c(5, 5), c(8, 2)) # }, track.height = 0.5) # circos.triangle = function(x1, y1, x2, y2, x3, y3, ...) { n1 = length(x1) n2 = length(y1) n3 = length(x2) n4 = length(y2) n5 = length(x3) n6 = length(y3) n = max(c(n1, n2, n3, n4, n5, n6)) if(n1 == 1) x1 = rep(x1, n) if(n2 == 1) y1 = rep(y1, n) if(n3 == 1) x2 = rep(x2, n) if(n4 == 1) y2 = rep(y2, n) if(n5 == 1) x3 = rep(x3, n) if(n6 == 1) y3 = rep(y3, n) if(! (length(x1) == length(y1) && length(y1) == length(x2) && length(x2) == length(y2) && length(y2) == length(x3) && length(x3) == length(y3)) ) { stop_wrap("x1, y1, x2, y2, x3, y3 should have same length.") } np = length(x1) x = unlist(lapply(seq_len(np), function(i) { c(x1[i], x2[i], x3[i], x1[i], NA) })) y = unlist(lapply(seq_len(np), function(i) { c(y1[i], y2[i], y3[i], y1[i], NA) })) x = x[-length(x)] y = y[-length(y)] circos.polygon(x, y, ...) } .rotate = function(x, y, cx, cy, theta) { x2 = x - cx y2 = y - cy rho = sqrt(x2^2 + y2^2) alpha = atan(y2/x2) alpha = ifelse(x2 < 0, alpha + pi, ifelse(y2 < 0, alpha + 2*pi, alpha)) beta = alpha + theta nx = rho*cos(beta) + cx ny = rho*sin(beta) + cy return(list(x = nx, y = ny)) } # == title # Draw polygon # # == param # -x Data points on x-axis # -y Data points on y-axis # -sector.index Index for the sector # -track.index Index for the track # -... pass to `graphics::polygon` # # == details # similar as `graphics::polygon`. # # Note: start point should overlap with the end point. # # == example # set.seed(123) # sectors = letters[1:4] # circos.initialize(sectors, xlim = c(0, 1)) # circos.trackPlotRegion(ylim = c(-3, 3), track.height = 0.4, panel.fun = function(x, y) { # x1 = runif(20) # y1 = x1 + rnorm(20) # or = order(x1) # x1 = x1[or] # y1 = y1[or] # loess.fit = loess(y1 ~ x1) # loess.predict = predict(loess.fit, x1, se = TRUE) # d1 = c(x1, rev(x1)) # d2 = c(loess.predict$fit + loess.predict$se.fit, # rev(loess.predict$fit - loess.predict$se.fit)) # circos.polygon(d1, d2, col = "#CCCCCC", border = NA) # circos.points(x1, y1, cex = 0.5) # circos.lines(x1, loess.predict$fit) # }) # circos.clear() circos.polygon = function( x, y, sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) { if(!has.cell(sector.index, track.index)) { stop_wrap("'circos.polygon' can only be used after the plotting region been created.") } # whether the points that are out of the plotting region. check.points.position(x, y, sector.index, track.index) d = lines.expand(x, y, sector.index, track.index) d2 = circlize(d, sector.index = sector.index, track.index = track.index) polygon(polar2Cartesian(d2), ...) return(invisible(NULL)) } # == title # Draw segments through pairwise of points # # == param # -x0 x coordinates for starting points. # -y0 y coordinates for ending points. # -x1 x coordinates for starting points. # -y1 y coordinates for ending points. # -sector.index Index for the sector. # -track.index Index for the track. # -straight Whether the segment is a straight line. # -col Color of the segments. # -lwd Line width of the segments. # -lty Line type of the segments. # -... Pass to `graphics::lines`. # # == example # circos.initialize(letters[1:8], xlim = c(0, 1)) # circos.track(ylim = c(0, 1), track.height = 0.3, panel.fun = function(x, y) { # x = seq(0.2, 0.8, by = 0.2) # y = seq(0.2, 0.8, by = 0.2) # # circos.segments(x, 0.1, x, 0.9) # circos.segments(0.1, y, 0.9, y) # }) # circos.clear() circos.segments = function( x0, y0, x1, y1, sector.index = get.current.sector.index(), track.index = get.current.track.index(), straight = FALSE, col = par("col"), lwd = par("lwd"), lty = par("lty"), ...) { n1 = length(x0) n2 = length(y0) n3 = length(x1) n4 = length(y1) n = max(c(n1, n2, n3, n4)) if(n1 == 1) x0 = rep(x0, n) if(n2 == 1) y0 = rep(y0, n) if(n3 == 1) x1 = rep(x1, n) if(n4 == 1) y1 = rep(y1, n) if(! (length(x0) == length(y0) && length(y0) == length(x1) && length(x1) == length(y1)) ) { stop_wrap("x0, y0, x1, y1 should have same length.") } if(circos.par$ring) { l = x0 > x1 if(any(l)) { x0[l] = x0[l] - get.cell.meta.data("xrange", sector.index, track.index) } } if(length(col) == 1 && length(lwd) ==1 && length(lty) == 1) { } else { np = length(x0) if(length(straight) == 1) straight = rep(straight, np) if(length(col) == 1) col = rep(col, np) if(length(lwd) == 1) lwd = rep(lwd, np) if(length(lty) == 1) lty = rep(lty, np) for(i in seq_len(np)) { circos.lines(c(x0[i], x1[i]), c(y0[i], y1[i]), sector.index = sector.index, straight = straight[i], track.index = track.index, col = col[i], lwd = lwd[i], lty = lty[i], ...) } return(invisible(NULL)) } if(!has.cell(sector.index, track.index)) { stop_wrap("'circos.segments' can only be used after the plotting region been created.") } np = length(x0) if(length(straight) == 1) straight = rep(straight, np) if(length(col) == 1) col = rep(col, np) if(length(lwd) == 1) lwd = rep(lwd, np) if(length(lty) == 1) lty = rep(lty, np) x = NULL y = NULL col2 = NULL lwd2 = NULL lty2 = NULL for(i in seq_along(x0)) { if(straight[i]) { x = c(x, c(x0[i], x1[i], NA)) y = c(y, c(y0[i], y1[i], NA)) col2 = c(col2, col[i]) lwd2 = c(lwd2, lwd[i]) lty2 = c(lty2, lty[i]) } else { d = lines.expand(c(x0[i], x1[i]), c(y0[i], y1[i]), sector.index, track.index) x = c(x, c(d[, 1], NA)) y = c(y, c(d[, 2], NA)) nd = nrow(d) col2 = c(col2, rep(col[i], nd)) lwd2 = c(lwd2, rep(lwd[i], nd)) lty2 = c(lty2, rep(lty[i], nd)) } } n2 = length(x) x = x[-n2] y = y[-n2] col2 = col2[-n2] lwd2 = lwd2[-n2] lty2 = lty2[-n2] d2 = circlize(x, y, sector.index = sector.index, track.index = track.index) d3 = polar2Cartesian(d2) lines(d3[,1], d3[,2], col = col2, lwd = lwd2, lty = lty2, ...) } # == title # Draw text in a cell # # == param # -x Data points on x-axis # -y Data points on y-axis # -labels Labels for each points # -sector.index Index for the sector # -track.index Index for the track # -direction deprecated, use ``facing`` instead. # -facing Facing of text. Please refer to vignette for different settings # -niceFacing Should the facing of text be adjusted to fit human eyes? # -adj offset for text. By default the text position adjustment is either horizontal or vertical # in the canvas coordinate system. The "circular horizontal" offset can be set as a value in degree # unit and the value should be wrapped by `degree`. # -... Pass to `graphics::text` # -cex Font size # -col Font color # -font Font style # # == details # The function is similar to `graphics::text`. All you need to note is the ``facing`` settings. # # == seealso # https://jokergoo.github.io/circlize_book/book/graphics.html#text # # == example # sectors = letters[1:4] # circos.par(points.overflow.warning = FALSE) # circos.initialize(sectors, xlim = c(0, 10)) # circos.trackPlotRegion(sectors, ylim = c(0, 10), # track.height = 0.5, panel.fun = function(x, y) { # circos.text(3, 1, "inside", facing = "inside", cex = 0.8) # circos.text(7, 1, "outside", facing = "outside", cex = 0.8) # circos.text(0, 5, "reverse.clockwise", facing = "reverse.clockwise", # adj = c(0.5, 0), cex = 0.8) # circos.text(10, 5, "clockwise", facing = "clockwise", adj = c(0.5, 0), # cex = 0.8) # circos.text(5, 5, "downward", facing = "downward", cex = 0.8) # circos.text(3, 9, "====bending.inside====", facing = "bending.inside", # cex = 0.8) # circos.text(7, 9, "====bending.outside====", facing = "bending.outside", # cex = 0.8) # }) # circos.clear() circos.text = function( x, y, labels, sector.index = get.current.sector.index(), track.index = get.current.track.index(), direction = NULL, facing = c("inside", "outside", "reverse.clockwise", "clockwise", "downward", "bending", "bending.inside", "bending.outside"), niceFacing = FALSE, adj = par("adj"), cex = 1, col = par("col"), font = par("font"), ...) { if(missing(y)) { if(ncol(x) == 2) { y = x[, 2] x = x[, 1] } } len_x = length(x) len_y = length(y) if(len_x == 1) x = rep(x, len_y) if(len_y == 1) y = rep(y, len_x) if(length(x) != length(y)) { stop_wrap("Length of x and y differ.") } if(!has.cell(sector.index, track.index)) { stop_wrap("'circos.text' can only be used after the plotting region been created.") } if(length(cex) == 1) { cex = rep(cex, length(x)) } if(length(col) == 1) { col = rep(col, length(x)) } if(length(font) == 1) { font = rep(font, length(x)) } if(length(adj) == 1) { adj = c(adj, adj) } labels = as.vector(labels) ## check direction or facing if(!is.null(direction)) { warning_wrap("`direction` is deprecated, please use `facing` instead.") facing = switch(direction[1], default = "inside", default2 = "outside", vertical_left = "reverse.clockwise", vertical_right = "clockwise", horizontal = "downward", arc = "bending.inside") if(is.null(facing)) { stop_wrap("Wrong `direction` value, please use `facing` instead.") } } facing = match.arg(facing)[1] if(facing == "bending") { facing = "bending.inside" } d = circlize(x, y, sector.index = sector.index, track.index = track.index) # adjust positions by `adj` if(inherits(adj, "list")) { labels_width = strwidth(labels, cex = cex, font = font) labels_height = strheight(labels, cex = cex, font = font) if(facing == "clockwise") { rou_offset = -(adj[[1]] - 0.5) * labels_width #theta_offset = as.degree(asin(-(adj[2] - 0.5)*labels_height/2/d[, "rou"])) theta_offset = adj[[2]] if(!inherits(theta_offset, "degree")) stop_wrap("The second item in `adj` should be wrapped by `degree()` if facing is clockwise.") } else if(facing == "reverse.clockwise") { rou_offset = (adj[[1]] - 0.5) * labels_width #theta_offset = as.degree(asin((adj[2] - 0.5)*labels_height/2/d[, "rou"])) theta_offset = adj[[2]] if(!inherits(theta_offset, "degree")) stop_wrap("The second item in `adj` should be wrapped by `degree()` if facing is reverse clockwise.") } else if(facing == "inside") { rou_offset = -(adj[[2]] - 0.5) * labels_height #theta_offset = as.degree(asin(-(adj[1] - 0.5)*labels_width/2/d[, "rou"])) theta_offset = adj[[1]] if(!inherits(theta_offset, "degree")) stop_wrap("The first item in `adj` should be wrapped by `degree()` if facing is inside.") } else if(facing == "outside") { rou_offset = (adj[[2]] - 0.5) * labels_height #theta_offset = as.degree(asin((adj[1] - 0.5)*labels_width/2/d[, "rou"])) theta_offset = adj[[1]] if(!inherits(theta_offset, "degree")) stop_wrap("The first item in `adj` should be wrapped by `degree()` if facing is outside.") } if(facing %in% c("clockwise", "reverse.clockwise", "inside", "outside")) { d2 = d d2[, "rou"] = d[, "rou"] + rou_offset d2[, "theta"] = d[, "theta"] + theta_offset dd = reverse.circlize(d2, sector.index = sector.index, track.index = track.index) x = dd[, 1] y = dd[, 2] #circos.points(x, y) adj = c(0.5, 0.5) d = circlize(x, y, sector.index = sector.index, track.index = track.index) } } # whether the points that are out of the plotting region. check.points.position(x, y, sector.index, track.index) if(niceFacing && facing %in% c("clockwise", "reverse.clockwise", "inside", "outside", "bending.inside", "bending.outside")) { if(facing %in% c("clockwise", "reverse.clockwise")) { degree = circlize(x, y, sector.index = sector.index, track.index = track.index)[, 1] degree = degree %% 360 l1 = degree >= 90 & degree < 270 # should be reverse.clockwise l2 = !l1 # should be clockwise if(facing == "reverse.clockwise") { adj1 = adj adj2 = 1 - adj facing1 = "reverse.clockwise" facing2 = "clockwise" } else { adj1 = 1- adj adj2 = adj facing1 = "reverse.clockwise" facing2 = "clockwise" } } else if(facing %in% c("inside", "outside", "bending.inside", "bending.outside")) { degree = circlize(x, y, sector.index = sector.index, track.index = track.index)[, 1] degree = degree %% 360 l1 = degree > 0 & degree < 180 # should be inside l2 = !l1 # should be outside if(facing == "inside") { adj1 = adj adj2 = 1 - adj facing1 = "inside" facing2 = "outside" } else if(facing == "outside") { adj1 = 1 - adj adj2 = adj facing1 = "inside" facing2 = "outside" } else if(facing == "bending.inside") { adj1 = adj adj2 = 1 - adj facing1 = "bending.inside" facing2 = "bending.outside" } else if(facing == "bending.outside") { adj1 = 1 - adj adj2 = adj facing1 = "bending.inside" facing2 = "bending.outside" } } if(sum(l1)) { circos.text(x[l1], y[l1], labels[l1], sector.index = sector.index, track.index = track.index, facing = facing1, niceFacing = FALSE, adj = adj1, cex = cex[l1], col = col[l1], font = font[l1], ...) } if(sum(l2)) { circos.text(x[l2], y[l2], labels[l2], sector.index = sector.index, track.index = track.index, facing = facing2, niceFacing = FALSE, adj = adj2, cex = cex[l2], col = col[l2], font = font[l2], ...) } return(invisible(NULL)) } if(grepl("bending", facing)) { chars = strsplit(labels, "") if(facing == "bending.outside") { chars = lapply(chars, rev) } nlabel = length(labels) strw = lapply(chars, strwidth, cex = cex, font = font) strh = lapply(chars, strheight, cex = cex, font = font) if(facing == "bending.outside") { adj = 1 - adj } alpha.offset = sapply(strw, function(x) sum(x))*adj[1]/d[, 2] * 180/pi rou.offset = sapply(strh, function(x) -x[1]*adj[2]) for(i in seq_along(labels)) { # degree of the bottom center of each char theta = numeric(length(strw[[i]])) alpha = d[i, 1] + alpha.offset[i] rou = d[i, 2] + rou.offset[i] for(j in seq_along(strw[[i]])) { theta[j] = alpha - asin(strw[[i]][j]/2/d[i, 2])*180/pi alpha = alpha - asin(strw[[i]][j]/d[i, 2])*180/pi } dr = reverse.circlize(theta, rep(rou, length(theta)), sector.index = sector.index, track.index = track.index) if(facing == "bending.inside") { circos.text(dr[, 1], dr[, 2], labels = chars[[i]], sector.index = sector.index, track.index = track.index, cex = cex[i], col = col[i], font = font[i], facing = "inside", adj = c(0.5, 0), ...) } else if(facing == "bending.outside") { circos.text(dr[, 1], dr[, 2], labels = chars[[i]], sector.index = sector.index, track.index = track.index, cex = cex[i], col = col[i], font = font[i], facing = "outside", adj = c(0.5, 1), ...) } #circos.points(dr[, 1], dr[, 2], pch = 16, cex = 0.8) } } else { srt = d[,1]-90 #srt = ifelse(srt > 0, srt, 360 + srt) if(facing == "reverse.clockwise") { # pointing to the circle center, but facing left at 90 degree srt = srt - 90 } else if(facing == "clockwise") { # pointing to the circle center, but facing right at 90 degree srt = srt + 90 } else if(facing == "downward") { # horizontal at the finnal graph srt = rep(0, length(srt)) } else if(facing == "outside") { srt = srt + 180 } m = polar2Cartesian(d) for(i in seq_along(x)) { text(m[i, 1], m[i, 2], labels = labels[i], srt = srt[i], cex = cex[i], col = col[i], font = font[i], adj = adj, ...) } } return(invisible(NULL)) } # == title # Convert fontsize to cex # # == param # -x value for fontsize # fontsize = function(x) { x/par("ps") } # == title # Mark the value as a degree value # # == param # -x degree value # # == value # a ``degree`` object # degree = function(x) { class(x) = "degree" list(x) } # == title # Draw text in cells among the whole track # # == param # -sectors A `factor` or a character vector which represents the categories of data # -factors The same as ``sectors``. It will be removed in future versions. # -x Data points on x-axis # -y Data points on y-axis # -labels Labels # -track.index Index for the track # -direction deprecated, use ``facing`` instead. # -facing Facing of text # -niceFacing Should the facing of text be adjusted to fit human eyes? # -adj Adjustment for text # -cex Font size # -col Font color # -font Font style # # == details # The function adds texts in multiple cells by first splitting data into several parts in which # each part corresponds to one factor (sector index) and then add texts in cells by calling `circos.text`. # # This function can be replaced by a ``for`` loop containing `circos.text`. circos.trackText = function( sectors, x, y, labels, track.index = get.current.track.index(), direction = NULL, facing = c("inside", "outside", "reverse.clockwise", "clockwise", "downward", "bending", "bending.inside", "bending.outside"), niceFacing = FALSE, adj = par("adj"), cex = 1, col = par("col"), font = par("font"), factors = sectors) { # basic check here if(length(x) != length(factors) || length(y) != length(factors)) { stop_wrap("Length of data and length of factors differ.\n") } if(!is.factor(factors)) { factors = factor(factors) } # check whether there are some categories that are not in the circle setdiff.factors = setdiff(levels(factors), get.all.sector.index()) if(length(setdiff.factors)) { stop_wrap("Cannot find these categories in existed sectors:", paste(setdiff.factors, collapse = ", "), ".") } le = levels(factors) # set these graphic parameters with same length as the factors # ``direction`` and ``adj`` are not recycled cex = recycle.with.factors(cex, factors) col = recycle.with.factors(col, factors) font = recycle.with.factors(font, factors) for(i in seq_along(le)) { l = factors == le[i] nx = x[l] ny = y[l] nlabels = labels[l] ncex = cex[l] ncol = col[l] nfont = font[l] circos.text(nx, ny, sector.index = le[i], track.index = track.index, labels = nlabels, direction = direction, facing = facing, niceFacing = niceFacing, adj = adj, cex = ncex, col = ncol, font = nfont) } return(invisible(NULL)) } # == title # Draw x-axis # # == param # -h Position of the x-axis, can be "top", "bottom" or a numeric value # -major.at If it is numeric vector, it identifies the positions # of the major ticks. It can exceed ``xlim`` value and the exceeding part # would be trimmed automatically. If it is ``NULL``, about every 10 degrees there is a major tick. # -labels labels of the major ticks. Also, the exceeding part would be trimmed automatically. # The value can also be logical (either an atomic value or a vector) which represents # which labels to show. # -major.tick Whether to draw major tick. If it is set to ``FALSE``, there will be # no minor ticks neither. # -sector.index Index for the sector. # -track.index Index for the track. # -labels.font Font style for the axis labels. # -labels.cex Font size for the axis labels. # -labels.direction Deprecated, use ``facing`` instead. # -labels.facing Facing of labels on axis, passing to `circos.text` # -labels.niceFacing Should facing of axis labels be human-easy. # -direction Whether the axis ticks point to the outside or inside of the circle. # -minor.ticks Number of minor ticks between two close major ticks. # -major.tick.length Length of the major ticks, measured in "current" data coordinate. `convert_y` can be # used to convert an absolute unit to the data coordinate. # -major.tick.percentage Not used any more, please directly use ``major.tick.length``. # -lwd Line width for ticks. # -col Color for the axes. # -labels.col Color for the labels. # -labels.pos.adjust Whether to adjust the positions of the first label and the last label so that the first label # align to its left and the last label align to its right if they exceed the range on axes. The value can be a vector # of length two which correspond to the first label and the last label. # # == details # It only draws axes on x-direction. # # == seealso # `circos.yaxis` draws axes on y-direction. # # https://jokergoo.github.io/circlize_book/book/graphics.html#axes # # == example # sectors = letters[1:8] # circos.par(points.overflow.warning = FALSE) # circos.initialize(sectors, xlim = c(0, 10)) # circos.trackPlotRegion(sectors, ylim = c(0, 10), track.height = 0.1, # bg.border = NA, panel.fun = function(x, y) { # circos.text(5, 10, get.cell.meta.data("sector.index")) # }) # # circos.trackPlotRegion(sectors, ylim = c(0, 10)) # circos.axis(sector.index = "a") # circos.axis(sector.index = "b", direction = "inside", labels.facing = "outside") # circos.axis(sector.index = "c", h = "bottom") # circos.axis(sector.index = "d", h = "bottom", direction = "inside", # labels.facing = "reverse.clockwise") # circos.axis(sector.index = "e", h = 5, major.at = c(1, 3, 5, 7, 9)) # circos.axis(sector.index = "f", h = 5, major.at = c(1, 3, 5, 7, 9), # labels = c("a", "c", "e", "g", "f"), minor.ticks = 0) # circos.axis(sector.index = "g", h = 5, major.at = c(1, 3, 5, 7, 9), # labels = c("a1", "c1", "e1", "g1", "f1"), major.tick = FALSE, # labels.facing = "reverse.clockwise") # circos.axis(sector.index = "h", h = 2, major.at = c(1, 3, 5, 7, 9), # labels = c("a1", "c1", "e1", "g1", "f1"), minor.ticks = 2, # major.tick.length = mm_y(5), labels.facing = "clockwise") # circos.clear() # # if(FALSE) { # # ############### real-time clock ################# # factors = letters[1] # # circos.par("gap.degree" = 0, "cell.padding" = c(0, 0, 0, 0), "start.degree" = 90) # circos.initialize(sectors, xlim = c(0, 12)) # circos.trackPlotRegion(sectors, ylim = c(0, 1), bg.border = NA) # circos.axis(sector.index = "a", major.at = 0:12, labels = "", # direction = "inside", major.tick.length = mm_y(3)) # circos.text(1:12, rep(0.5, 12), 1:12, facing = "downward") # # while(1) { # current.time = as.POSIXlt(Sys.time()) # sec = ceiling(current.time$sec) # min = current.time$min # hour = current.time$hour # # # erase the clock hands # draw.sector(rou1 = 0.8, border = "white", col = "white") # # sec.degree = 90 - sec/60 * 360 # arrows(0, 0, cos(sec.degree/180*pi)*0.8, sin(sec.degree/180*pi)*0.8) # # min.degree = 90 - min/60 * 360 # arrows(0, 0, cos(min.degree/180*pi)*0.7, sin(min.degree/180*pi)*0.7, lwd = 2) # # hour.degree = 90 - hour/12 * 360 - min/60 * 360/12 # arrows(0, 0, cos(hour.degree/180*pi)*0.4, sin(hour.degree/180*pi)*0.4, lwd = 2) # # Sys.sleep(1) # } # circos.clear() # } circos.axis = function( h = "top", major.at = NULL, labels = TRUE, major.tick = TRUE, sector.index = get.current.sector.index(), track.index = get.current.track.index(), labels.font = par("font"), labels.cex = par("cex"), labels.facing = "inside", labels.direction = NULL, labels.niceFacing = TRUE, direction = c("outside", "inside"), minor.ticks = 4, major.tick.length = mm_y(1), major.tick.percentage = 0.5, lwd = par("lwd"), col = par("col"), labels.col = par("col"), labels.pos.adjust = TRUE) { os = get.current.sector.index() ot = get.current.track.index() set.current.cell(sector.index, track.index) on.exit(set.current.cell(os, ot)) if(!is.null(labels.direction)) { labels.facing = switch(labels.direction[1], default = "inside", default2 = "outside", vertical_left = "reverse.clockwise", vertical_right = "clockwise", horizontal = "downward", arc = "bending") warning_wrap("`labels.direction` is deprecated, please use `labels.facing` instead.") } direction = direction[1] if(! direction %in% c("outside", "inside")) { stop_wrap("Direction should be in 'outside' and 'inside'.") } xlim = get.cell.meta.data("xlim", sector.index, track.index) sector.data = get.sector.data(sector.index) if(h == "top") { h = get.cell.meta.data("cell.ylim", sector.index, track.index)[2] } else if(h == "bottom") { h = get.cell.meta.data("cell.ylim", sector.index, track.index)[1] } if(is.null(major.at)) { major.by = .default.major.by(sector.index, track.index) major.at = seq(floor(xlim[1]/major.by)*major.by, xlim[2], by = major.by) major.at = c(major.at, major.at[length(major.at)] + major.by) } minor.at = NULL if(minor.ticks != 0) { for(i in seq_along(major.at)) { if(i == 1) next k = seq_len(minor.ticks) / (minor.ticks + 1) minor.at = c(minor.at, k * (major.at[i] - major.at[i - 1]) + major.at[i - 1]) } } xlim2 = xlim circos.lines(c(ifelse(major.at[1] >= xlim2[1], major.at[1], xlim2[1]), ifelse(major.at[length(major.at)] <= xlim2[2], major.at[length(major.at)], xlim2[2])), c(h, h), sector.index = sector.index, track.index = track.index, lwd = lwd, col = col) # ticks yrange = get.cell.meta.data("yrange", sector.index, track.index) if(!missing(major.tick.percentage)) { message("`major.tick.percentage` is not used any more, please directly use argument `major.tick.length`.") } # major.tick.length = yrange * major.tick.percentage # major.tick.length = convert_y(2, "mm", sector.index, track.index) op = circos.par("points.overflow.warning") circos.par("points.overflow.warning" = FALSE) l = major.at >= xlim2[1] & major.at <= xlim2[2] if(major.tick) { circos.segments(major.at[l], rep(h, sum(l)), major.at[l], rep(h, sum(l)) + major.tick.length*ifelse(direction == "outside", 1, -1), straight = TRUE, sector.index = sector.index, track.index = track.index, lwd = lwd, col = col) } #for(i in seq_along(major.at)) { # if(major.at[i] < xlim2[1] || major.at[i] > xlim2[2]) { # next # } # if(major.tick) { # circos.lines(c(major.at[i], major.at[i]), c(h, h + major.tick.length*ifelse(direction == "outside", 1, -1)), straight = TRUE, # sector.index = sector.index, track.index = track.index, lwd = lwd) # } labels.adj = NULL if(direction == "outside") { if(labels.facing == "inside") { labels.adj = c(0.5, 0) } else if(labels.facing == "outside") { labels.adj = c(0.5, 1) } else if(labels.facing == "reverse.clockwise") { labels.adj = c(1, 0.5) } else if(labels.facing == "clockwise") { labels.adj = c(0, 0.5) } else if(labels.facing == "downward") { labels.adj = c(0.5, 0.5) } else { labels.adj = c(0.5, 0) } } else { if(labels.facing == "inside") { labels.adj = c(0.5, 1) } else if(labels.facing == "outside") { labels.adj = c(0.5, 0) } else if(labels.facing == "reverse.clockwise") { labels.adj = c(0, 0.5) } else if(labels.facing == "clockwise") { labels.adj = c(1, 0.5) } else if(labels.facing == "downward") { labels.adj = c(0.5, 0.5) } else { labels.adj = c(0.5, 1) } } add_axis_labels = function(x, y, labels, h, col, labels.pos.adjust, ...) { arg_list = list(...) n = length(x) first_label_width = convert_x(strwidth(labels[1], units = "inches", cex = arg_list$cex), "inches", arg_list$sector.index, arg_list$track.index, h = h) first_label_height = convert_x(strheight(labels[1], units = "inches", cex = arg_list$cex), "inches", arg_list$sector.index, arg_list$track.index, h = h) if(n >= 1) { last_label_width = convert_x(strwidth(labels[n], units = "inches", cex = arg_list$cex), "inches", arg_list$sector.index, arg_list$track.index, h = h) last_label_height = convert_x(strheight(labels[n], units = "inches", cex = arg_list$cex), "inches", arg_list$sector.index, arg_list$track.index, h = h) } else { last_label_width = 0 last_label_height = 0 } if(labels.facing == "inside") { offset.first = first_label_width/2 - (x[1] - get.cell.meta.data("cell.xlim", sector.index, track.index)[1]) offset.last = last_label_width/2 - abs(x[n] - get.cell.meta.data("cell.xlim", sector.index, track.index)[2]) } else if(labels.facing == "outside") { offset.first = first_label_width/2 - (x[1] - get.cell.meta.data("cell.xlim", sector.index, track.index)[1]) offset.last = last_label_width/2 - abs(x[n] - get.cell.meta.data("cell.xlim", sector.index, track.index)[2]) } else if(labels.facing == "reverse.clockwise") { offset.first = first_label_height/2 - (x[1] - get.cell.meta.data("cell.xlim", sector.index, track.index)[1]) offset.last = last_label_height/2 - abs(x[n] - get.cell.meta.data("cell.xlim", sector.index, track.index)[2]) } else if(labels.facing == "clockwise") { offset.first = first_label_height/2 - (x[1] - get.cell.meta.data("cell.xlim", sector.index, track.index)[1]) offset.last = last_label_height/2 - abs(x[n] - get.cell.meta.data("cell.xlim", sector.index, track.index)[2]) } else if(labels.facing == "downward") { offset.first = first_label_width/2 - (x[1] - get.cell.meta.data("cell.xlim", sector.index, track.index)[1]) offset.last = last_label_width/2 - abs(x[n] - get.cell.meta.data("cell.xlim", sector.index, track.index)[2]) } else { offset.first = first_label_width/2 - (x[1] - get.cell.meta.data("cell.xlim", sector.index, track.index)[1]) offset.last = last_label_width/2 - abs(x[n] - get.cell.meta.data("cell.xlim", sector.index, track.index)[2]) } if(length(labels.pos.adjust) == 1) labels.pos.adjust = rep(labels.pos.adjust, 2) if(!labels.pos.adjust[1]) { offset.first = 0 } if(!labels.pos.adjust[2]) { offset.last = 0 } if(n == 1) { circos.text(x + ifelse(offset.first > 0, offset.first, 0), y, labels, col = col, ...) } else if(n == 2) { circos.text(x[1] + ifelse(offset.first > 0, offset.first, 0), y[1], labels[1], col = col, ...) circos.text(x[2] - ifelse(offset.last > 0, offset.last, 0), y[2], labels[2], col = col, ...) } else if(n > 2) { circos.text(x[1] + ifelse(offset.first > 0, offset.first, 0), y[1], labels[1], col = col, ...) circos.text(x[2:(n-1)], y[2:(n-1)], labels[2:(n-1)], col = col, ...) circos.text(x[n] - ifelse(offset.last > 0, offset.last, 0), y[n], labels[n], col = col, ...) } # circos.text(x, y, labels, ...) } if(is.logical(labels)) { if(labels[1]) { add_axis_labels(major.at[l], rep(h, sum(l)) + (major.tick.length + mm_y(0.5, sector.index, track.index))*ifelse(direction == "outside", 1, -1), labels = major.at[l], adj = labels.adj, font = labels.font, cex = labels.cex, sector.index = sector.index, track.index = track.index, facing = labels.facing, niceFacing = labels.niceFacing, h = h, col = labels.col, labels.pos.adjust = labels.pos.adjust) } } else if(is.function(labels)) { add_axis_labels(major.at[l], rep(h, sum(l)) + (major.tick.length + mm_y(0.5, sector.index, track.index))*ifelse(direction == "outside", 1, -1), labels = labels(major.at[l]), adj = labels.adj, font = labels.font, cex = labels.cex, sector.index = sector.index, track.index = track.index, facing = labels.facing, niceFacing = labels.niceFacing, h = h, col = labels.col, labels.pos.adjust = labels.pos.adjust) } else if(length(labels)) { add_axis_labels(major.at[l], rep(h, sum(l)) + (major.tick.length + mm_y(0.5, sector.index, track.index))*ifelse(direction == "outside", 1, -1), labels = labels[l], adj = labels.adj, font = labels.font, cex = labels.cex, sector.index = sector.index, track.index = track.index, facing = labels.facing, niceFacing = labels.niceFacing, h = h, col = labels.col, labels.pos.adjust = labels.pos.adjust) } #} if(major.tick) { # for(i in seq_along(minor.at)) { # if(minor.at[i] < xlim2[1] || minor.at[i] > xlim2[2]) { # next # } # circos.lines(c(minor.at[i], minor.at[i]), c(h, h + major.tick.length/2*ifelse(direction == "outside", 1, -1)), straight = TRUE, # sector.index = sector.index, track.index = track.index, lwd = lwd) # } l = minor.at >= xlim2[1] & minor.at <= xlim2[2] circos.segments(minor.at[l], rep(h, sum(l)), minor.at[l], rep(h, sum(l)) + major.tick.length/2*ifelse(direction == "outside", 1, -1), straight = TRUE, sector.index = sector.index, track.index = track.index, lwd = lwd, col = col) } circos.par("points.overflow.warning" = op) return(invisible(NULL)) } # == title # Draw x-axis # # == param # -... All pass to `circos.axis`. # # == details # This function is identical to `circos.axis`. # circos.xaxis = function(...) { circos.axis(...) } .default.major.by = function( sector.index = get.current.sector.index(), track.index = get.current.track.index()) { # start.degree - end.degree is always a positive value. d = circos.par("major.by.degree") cell.start.degre = get.cell.meta.data("cell.start.degree", sector.index, track.index) tm = reverse.circlize(c(cell.start.degre, cell.start.degre-d), rep(get.cell.meta.data("cell.bottom.radius", sector.index = sector.index, track.index = track.index), 2)) major.by = abs(tm[1, 1] - tm[2, 1]) digits = as.numeric(gsub("^.*e([+-]\\d+)$", "\\1", sprintf("%e", major.by))) major.by = round(major.by, digits = -1*digits) return(major.by) } # == title # Draw y-axis # # == param # -side add the y-axis on the left or right of the cell # -at If it is numeric vector, it identifies the positions # of the ticks. It can exceed ``ylim`` value and the exceeding part # would be trimmed automatically. # -labels labels of the ticks. The exceeding part would be trimmed automatically. # The value can also be logical (either an atomic value or a vector) which represents # which labels to show. # -tick Whether to draw ticks. # -sector.index Index for the sector # -track.index Index for the track # -labels.font font style for the axis labels # -labels.cex font size for the axis labels # -labels.niceFacing Should facing of axis labels be human-easy # -tick.length length of the tick # -lwd line width for ticks # -col color for the axes # -labels.col color for the labels # # == details # Note, you need to set the gap between sectors manually by `circos.par` to make sure there is enough space # for y-axis. # # == example # op = par(no.readonly = TRUE) # # sectors = letters[1:8] # circos.par(points.overflow.warning = FALSE) # circos.par(gap.degree = 8) # circos.initialize(sectors, xlim = c(0, 10)) # circos.trackPlotRegion(sectors, ylim = c(0, 10), track.height = 0.5) # par(cex = 0.8) # for(a in letters[2:4]) { # circos.yaxis(side = "left", sector.index = a) # } # for(a in letters[5:7]) { # circos.yaxis(side = "right", sector.index = a) # } # circos.clear() # # par(op) circos.yaxis = function( side = c("left", "right"), at = NULL, labels = TRUE, tick = TRUE, sector.index = get.current.sector.index(), track.index = get.current.track.index(), labels.font = par("font"), labels.cex = par("cex"), labels.niceFacing = TRUE, tick.length = convert_x(1, "mm", sector.index, track.index), lwd = par("lwd"), col = par("col"), labels.col = par("col")) { ylim = get.cell.meta.data("ylim", sector.index, track.index) side = match.arg(side)[1] if(side == "left") { v = get.cell.meta.data("cell.xlim", sector.index, track.index)[1] } else if(side == "right") { v = get.cell.meta.data("cell.xlim", sector.index, track.index)[2] } if(is.null(at)) { at = grid.pretty(ylim) if(is.function(labels)) { labels = labels(at) } else { labels = at } } ylim2 = ylim circos.lines(rep(v, 2), get.cell.meta.data("cell.ylim", sector.index, track.index), sector.index = sector.index, track.index = track.index, lwd = lwd, col = col) # ticks yrange = get.cell.meta.data("yrange", sector.index, track.index) xrange = get.cell.meta.data("xrange", sector.index, track.index) # tick.length = tick.length/abs(get.cell.meta.data("cell.start.degree", sector.index, track.index) - get.cell.meta.data("cell.end.degree", sector.index, track.index)) * xrange # tick.length = convert_x(2, "mm", sector.index, track.index) op = circos.par("points.overflow.warning") circos.par("points.overflow.warning" = FALSE) l = at >= ylim2[1] & at <= ylim2[2] if(tick) { circos.segments(rep(v, sum(l)), at[l], rep(v, sum(l)) + tick.length*ifelse(side == "right", 1, -1), at[l], straight = TRUE, sector.index = sector.index, track.index = track.index, lwd = lwd, col = col) } labels.adj = NULL if(side == "left") { if(!circos.par$xaxis.clock.wise) { labels.adj = c(0, 0.5) } else { labels.adj = c(1, 0.5) } } else { if(!circos.par$xaxis.clock.wise) { labels.adj = c(1, 0.5) } else { labels.adj = c(0, 0.5) } } if(is.logical(labels) && labels) { circos.text(rep(v, sum(l)) + (tick.length + convert_x(0.5, "mm", sector.index, track.index))*ifelse(side == "right", 1, -1), at[l], labels = at[l], adj = labels.adj, font = labels.font, cex = labels.cex, sector.index = sector.index, track.index = track.index, facing = "inside", niceFacing = labels.niceFacing, col = labels.col) } else if(is.logical(labels) && !labels) { } else if(length(labels)) { circos.text(rep(v, sum(l)) + (tick.length + convert_x(0.5, "mm", sector.index, track.index))*ifelse(side == "right", 1, -1), at[l], labels = labels[l], adj = labels.adj, font = labels.font, cex = labels.cex, sector.index = sector.index, track.index = track.index, facing = "inside", niceFacing = labels.niceFacing, col = labels.col) } circos.par("points.overflow.warning" = op) return(invisible(NULL)) } ##################################################################### # # simulate high-level graphic functions such as barplot, hist, boxplot ... # ##################################################################### # == title # Draw histogram in cells among a whole track # # == param # -sectors A `factor` or a character vector which represents the categories of data # -factors The same as ``sectors``. It will be removed in future versions. # -x Data on the x-axis # -track.index Index for the track which is going to be updated. Setting it to ``NULL`` means # creating the plotting regions in the next newest track. # -track.height Height of the track. It is the percentage to the radius of the unit circle. # If to update a track, this argument is disabled. # -ylim Ranges on y-direction. By default, ``ylim`` is calculated automatically. # -force.ylim Whether to force all cells in the track to share the same ``ylim``. # -col Filled color for histogram # -border Border color for histogram # -lty Line style for histogram # -lwd Line width for histogram # -bg.col Background color for the plotting regions # -bg.border Color for the border of the plotting regions # -bg.lty Line style for the border of the plotting regions # -bg.lwd Line width for the border of the plotting regions # -breaks see `graphics::hist` # -include.lowest see `graphics::hist` # -right see `graphics::hist` # -draw.density whether draw density lines instead of histogram bars. # -area whether to fill the area below the density lines. If it is set to ``TRUE``, ``col`` controls the filled color in the area and ``border`` controls color of the line. # -bin.size size of the bins of the histogram # # == details # It draw histogram in cells among a whole track. It is also an example to show how to add self-defined # high-level graphics by this package. # # == seealso # https://jokergoo.github.io/circlize_book/book/high-level-plots.html#histograms # # == example # \donttest{ # x = rnorm(1600) # sectors = sample(letters[1:16], 1600, replace = TRUE) # circos.initialize(sectors, x = x) # circos.trackHist(sectors, x = x, col = "#999999", # border = "#999999") # circos.trackHist(sectors, x = x, bin.size = 0.1, # col = "#999999", border = "#999999") # circos.trackHist(sectors, x = x, draw.density = TRUE, # col = "#999999", border = "#999999") # circos.clear() # } circos.trackHist = function( sectors, x, track.height = circos.par("track.height"), track.index = NULL, ylim = NULL, force.ylim = TRUE, col = ifelse(draw.density, "black", NA), border = "black", lty = par("lty"), lwd = par("lwd"), bg.col = NA, bg.border = "black", bg.lty = par("lty"), bg.lwd = par("lwd"), breaks = "Sturges", include.lowest = TRUE, right = TRUE, draw.density = FALSE, bin.size = NULL, area = FALSE, factors = sectors) { # basic check here if(length(x) != length(factors)) { stop_wrap("Length of data and length of factors differ.") } if(!is.factor(factors)) { factors = factor(factors) } # check whether there are some categories that are not in the circle setdiff.factors = setdiff(levels(factors), get.all.sector.index()) if(length(setdiff.factors)) { stop_wrap("Cannot find these categories in existed sectors:", paste(setdiff.factors, collapse = ", "), ".") } # calculate the distributions le = levels(factors) xx = NULL yy = NULL fa = NULL for(i in seq_along(le)) { l = factors == le[i] nx = x[l] if(!is.null(bin.size)) { breaks = seq(min(nx), max(nx), by = bin.size) if(breaks[length(breaks)] < max(nx)) { breaks = c(breaks, breaks[length(breaks)] + bin.size) } } h = hist(nx, plot = FALSE, breaks = breaks, include.lowest = include.lowest, right = right) xx = c(xx, h$breaks) if(draw.density) { yy = c(yy, 0, h$density) } else { yy = c(yy, 0, h$counts) } fa = c(fa, rep(le[i], length(h$breaks))) } # create the plotting region circos.trackPlotRegion(sectors = fa, y=yy, track.height = track.height, track.index = track.index, ylim = ylim, force.ylim = force.ylim, bg.col = bg.col, bg.border = bg.border, bg.lty = bg.lty, bg.lwd = bg.lwd) track.index = get.current.track.index() l3 = logical(0) for(i in seq_along(le)) { xlim = get.cell.meta.data("xlim", sector.index = le[i], track.index = track.index) l = fa == le[i] l2 = xx[l] >= xlim[1] & xx[l] <= xlim[2] l3 = c(l3, l2) } xx = xx[l3] yy = yy[l3] fa = fa[l3] if(draw.density) { circos.trackLines(sectors = fa, xx, yy, track.index = track.index, col = col, lty = lty, lwd = lwd, area = area, border = border) } else { # in each cell, draw rectangles col = recycle.with.levels(col, le) border = recycle.with.levels(border, le) lty = recycle.with.levels(lty, le) lwd = recycle.with.levels(lwd, le) for(i in seq_along(le)) { l = fa == le[i] nx = xx[l] ny = yy[l] cell.xlim = get.cell.meta.data("cell.xlim", le[i], track.index) nx[nx < cell.xlim[1]] = cell.xlim[1] nx[nx > cell.xlim[2]] = cell.xlim[2] for(j in seq_along(nx)) { if(j == 1) { next } circos.rect(nx[j-1], 0, nx[j], ny[j], sector.index = le[i], track.index = track.index, col = col[i], border = border[i], lty = lty[i], lwd = lwd[i]) } } } return(invisible(NULL)) } # == title # Add circular dendrograms # # == param # -dend A `stats::dendrogram` object. # -facing Is the dendromgrams facing inside to the circle or outside? # -max_height Maximum height of the dendrogram. This is important if more than one dendrograms # are drawn in one track and making them comparable. The height of a dendrogram # can be obtained by ``attr(dend, "height")``. # -use_x_attr Whether use the ``x`` attribute to determine node positions in the dendrogram, used internally. # -sector.index Index of sector. # -track.index Index of track. # # == details # Assuming there are ``n`` nodes in the dendrogram, the positions for leaves on x-axis are always ``0.5, 1.5, ..., n - 0.5``. # So you must be careful with ``xlim`` when you initialize the cirular layout. # # You can use the ``dendextend`` package to render the dendrograms. # # == seealso # https://jokergoo.github.io/circlize_book/book/high-level-plots.html#phylogenetic-trees # # == example # load(system.file(package = "circlize", "extdata", "bird.orders.RData")) # # labels = hc$labels # name of birds # ct = cutree(hc, 6) # cut tree into 6 pieces # n = length(labels) # number of bird species # dend = as.dendrogram(hc) # # circos.par(cell.padding = c(0, 0, 0, 0)) # circos.initialize(sectors = "a", xlim = c(0, n)) # only one sector # max_height = attr(dend, "height") # maximum height of the trees # circos.trackPlotRegion(ylim = c(0, 1), bg.border = NA, track.height = 0.3, # panel.fun = function(x, y) { # for(i in seq_len(n)) { # circos.text(i-0.5, 0, labels[i], adj = c(0, 0.5), # facing = "clockwise", niceFacing = TRUE, # col = ct[labels[i]], cex = 0.7) # } # }) # # suppressPackageStartupMessages(require(dendextend)) # dend = color_branches(dend, k = 6, col = 1:6) # # circos.trackPlotRegion(ylim = c(0, max_height), bg.border = NA, # track.height = 0.4, panel.fun = function(x, y) { # circos.dendrogram(dend, max_height = max_height) # }) # circos.clear() circos.dendrogram = function( dend, facing = c("outside", "inside"), max_height = NULL, use_x_attr = FALSE, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { os = get.current.sector.index() ot = get.current.track.index() set.current.cell(sector.index, track.index) on.exit(set.current.cell(os, ot)) facing = match.arg(facing)[1] if(is.null(max_height)) { max_height = attr(dend, "height") } is.leaf = function(object) { leaf = attr(object, "leaf") if(is.null(leaf)) { FALSE } else { leaf } } use_x_attr = use_x_attr lines_par = function(col = par("col"), lty = par("lty"), lwd = par("lwd"), ...) { return(list(col = col, lty = lty, lwd = lwd)) } points_par = function(col = par("col"), pch = par("pch"), cex = par("cex"), ...) { return(list(col = col, pch = pch, cex = cex)) } draw.d = function(dend, max_height, facing = "outside", max_width = 0) { leaf = attr(dend, "leaf") height = attr(dend, "height") midpoint = attr(dend, "midpoint") n = length(dend) xl = numeric(n) yl = numeric(n) for(i in seq_len(n)) { if(use_x_attr) { xl[i] = attr(dend[[i]], "x") } else { if(is.leaf(dend[[i]])) { xl[i] = x[as.character(attr(dend[[i]], "label"))] } else { xl[i] = attr(dend[[i]], "midpoint") + x[as.character(labels(dend[[i]]))[1]] } } yl[i] = attr(dend[[i]], "height") } # graphic parameter for current branch # only for lines, there are lwd, col, lty edge_par_lt = vector("list", n) for(i in seq_len(n)) { edge_par_lt[[i]] = do.call("lines_par", as.list(attr(dend[[i]], "edgePar"))) # as.list to convert NULL to list() } node_par = attr(dend, "nodePar") if(!is.null(node_par)) node_par = do.call("points_par", as.list(attr(dend, "nodePar"))) # plot the connection line if(facing == "outside") { if(n == 1) { circos.lines(c(xl[1], xl[1]), max_height - c(yl[1], height), col = edge_par_lt[[1]]$col, lty = edge_par_lt[[1]]$lty, lwd = edge_par_lt[[1]]$lwd, straight = TRUE) } else { circos.lines(c(xl[1], xl[1]), max_height - c(yl[1], height), col = edge_par_lt[[1]]$col, lty = edge_par_lt[[1]]$lty, lwd = edge_par_lt[[1]]$lwd, straight = TRUE) circos.lines(c(xl[1], (xl[1]+xl[2])/2), max_height - c(height, height), col = edge_par_lt[[1]]$col, lty = edge_par_lt[[1]]$lty, lwd = edge_par_lt[[1]]$lwd) if(n > 2) { for(i in seq(2, n-1)) { circos.lines(c(xl[i], xl[i]), max_height - c(yl[i], height), col = edge_par_lt[[i]]$col, lty = edge_par_lt[[i]]$lty, lwd = edge_par_lt[[i]]$lwd, straight = TRUE) circos.lines(c((xl[i-1]+xl[i])/2, (xl[i]+xl[i+1])/2), max_height - c(height, height), col = edge_par_lt[[i]]$col, lty = edge_par_lt[[i]]$lty, lwd = edge_par_lt[[i]]$lwd) } } circos.lines(c(xl[n], xl[n]), max_height - c(yl[n], height), col = edge_par_lt[[n]]$col, lty = edge_par_lt[[n]]$lty, lwd = edge_par_lt[[n]]$lwd, straight = TRUE) circos.lines(c(xl[n], (xl[n]+xl[n-1])/2), max_height - c(height, height), col = edge_par_lt[[n]]$col, lty = edge_par_lt[[n]]$lty, lwd = edge_par_lt[[n]]$lwd) } if(!is.null(node_par)) { circos.points(mean(xl)/2, max_height - height, col = node_par$col, pch = node_par$pch, cex = node_par$cex) } } else if(facing == "inside") { if(n == 1) { circos.lines(c(xl[1], xl[1]), c(yl[1], height), col = edge_par_lt[[1]]$col, lty = edge_par_lt[[1]]$lty, lwd = edge_par_lt[[1]]$lwd, straight = TRUE) } else { circos.lines(c(xl[1], xl[1]), c(yl[1], height), col = edge_par_lt[[1]]$col, lty = edge_par_lt[[1]]$lty, lwd = edge_par_lt[[1]]$lwd, straight = TRUE) circos.lines(c(xl[1], (xl[1]+xl[2])/2), c(height, height), col = edge_par_lt[[1]]$col, lty = edge_par_lt[[1]]$lty, lwd = edge_par_lt[[1]]$lwd) if(n > 2) { for(i in seq(2, n-1)) { circos.lines(c(xl[i], xl[i]), c(yl[i], height), col = edge_par_lt[[i]]$col, lty = edge_par_lt[[i]]$lty, lwd = edge_par_lt[[i]]$lwd, straight = TRUE) circos.lines(c((xl[i-1]+xl[i])/2, (xl[i]+xl[i+1])/2), c(height, height), col = edge_par_lt[[i]]$col, lty = edge_par_lt[[i]]$lty, lwd = edge_par_lt[[i]]$lwd) } } circos.lines(c(xl[n], xl[n]), c(yl[n], height), col = edge_par_lt[[n]]$col, lty = edge_par_lt[[n]]$lty, lwd = edge_par_lt[[n]]$lwd, straight = TRUE) circos.lines(c(xl[n], (xl[n]+xl[n-1])/2), c(height, height), col = edge_par_lt[[n]]$col, lty = edge_par_lt[[n]]$lty, lwd = edge_par_lt[[n]]$lwd) } if(!is.null(node_par)) { circos.points(mean(xl)/2, height, col = node_par$col, pch = node_par$pch, cex = node_par$cex) } } # do it recursively for(i in seq_len(n)) { if(is.leaf(dend[[i]])) { node_par = attr(dend[[i]], "nodePar") if(!is.null(node_par)) node_par = do.call("points_par", as.list(attr(dend[[i]], "nodePar"))) if(facing == "outside") { if(!is.null(node_par)) { circos.points(xl[i], max_height, col = node_par$col, pch = node_par$pch, cex = node_par$cex) } } else if(facing == "inside") { if(!is.null(node_par)) { circos.points(xl[i], 0, col = node_par$col, pch = node_par$pch, cex = node_par$cex) } } } else { draw.d(dend[[i]], max_height, facing, max_width) } } } labels = as.character(labels(dend)) x = seq_along(labels) - 0.5 names(x) = labels n = length(labels) if(!is.leaf(dend)) draw.d(dend, max_height, facing, max_width = n) } # == title # Draw barplots # # == param # -value A numeric vector or a matrix. If it is a matrix, columns correspond to the height of bars. # -pos Positions of the bars. # -bar_width Width of bars. It assumes the bars locating at ``x = 1, 2, ...``. # -col Filled color of bars. # -border Color for the border. # -lwd Line width. # -lty Line style. # -sector.index Index of sector. # -track.index Index of track. # # == details # If the input variable is a matrix, it draws a stacked barplot. # # Please note, the x-values of barplots are normally integer indices. Just be careful # when initializing the circular layout. # # == example # circos.initialize(letters[1:4], xlim = c(0, 10)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # value = runif(10) # circos.barplot(value, 1:10 - 0.5, col = 1:10) # }) # circos.track(ylim = c(-1, 1), panel.fun = function(x, y) { # value = runif(10, min = -1, max = 1) # circos.barplot(value, 1:10 - 0.5, col = ifelse(value > 0, 2, 3)) # }) # circos.clear() # # circos.initialize(letters[1:4], xlim = c(0, 10)) # circos.track(ylim = c(0, 4), panel.fun = function(x, y) { # value = matrix(runif(10*4), ncol = 4) # circos.barplot(value, 1:10 - 0.5, col = 2:5) # }) # circos.clear() circos.barplot = function(value, pos, bar_width = 0.6, col = NA, border = "black", lwd = par("lwd"), lty = par("lty"), sector.index = get.current.sector.index(), track.index = get.current.track.index()) { os = get.current.sector.index() ot = get.current.track.index() set.current.cell(sector.index, track.index) on.exit(set.current.cell(os, ot)) if(is.matrix(value)) { if(nrow(value) != length(pos)) { stop("nrow of `value` should be the same as the length of `pos`.") } if(any(value < 0)) { stop("`value` should all be positive if it is a matrix.") } n = ncol(value) if(length(col) == 1) col = rep(col, n) if(length(border) == 1) border = rep(border, n) if(length(lwd) == 1) lwd = rep(lwd, n) if(length(lty) == 1) lty = rep(lty, n) if(length(bar_width) == 1) bar_width = rep(bar_width, nrow(value)) for(i in 1:n) { if(i == 1) { circos.rect(pos - bar_width/2, 0, pos + bar_width/2, rowSums(value[, seq_len(i), drop = FALSE]), col = col[i], border = border[i], lwd = lwd[i], lty = lty[i]) } else { circos.rect(pos - bar_width/2, rowSums(value[, seq_len(i-1), drop = FALSE]), pos + bar_width/2, rowSums(value[, seq_len(i), drop = FALSE]), col = col[i], border = border[i], lwd = lwd[i], lty = lty[i]) } } } else if(is.atomic(value)) { if(length(value) != length(pos)) { stop("`value` and `pos` should have the same length.") } circos.rect(pos - bar_width/2, 0, pos + bar_width/2, value, col = col, border = border, lwd = lwd, lty = lty) } else { stop("`value` should be a vector or a matrix.") } } # == title # Draw boxplots # # == param # -value A numeric vector, a matrix or a list. If it is a matrix, boxplots are made by columns (each column is a box). # -pos Positions of the boxes. # -outline Whether to draw outliers. # -box_width Width of boxes. # -col Filled color of boxes. # -border Color for the border as well as the quantile lines. # -lwd Line width. # -lty Line style # -cex Point size. # -pch Point type. # -pt.col Point color. # -sector.index Index of sector. # -track.index Index of track. # # == detail # Please note, the x-values of boxplots are normally integer indices. Just be careful # when initializing the circular layout. # # == example # circos.initialize(letters[1:4], xlim = c(0, 10)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # for(pos in seq(0.5, 9.5, by = 1)) { # value = runif(10) # circos.boxplot(value, pos) # } # }) # circos.clear() # # circos.initialize(letters[1:4], xlim = c(0, 10)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # value = replicate(runif(10), n = 10, simplify = FALSE) # circos.boxplot(value, 1:10 - 0.5, col = 1:10) # }) # circos.clear() circos.boxplot = function(value, pos, outline = TRUE, box_width = 0.6, col = NA, border = "black", lwd = par("lwd"), lty = par("lty"), cex = par("cex"), pch = 1, pt.col = par("col"), sector.index = get.current.sector.index(), track.index = get.current.track.index()) { os = get.current.sector.index() ot = get.current.track.index() set.current.cell(sector.index, track.index) on.exit(set.current.cell(os, ot)) single_boxplot = function(value, pos, outline = TRUE, box_width = 0.6, col = NA, border = "black", lwd = par("lwd"), lty = par("lty"), cex = par("cex"), pch = 1, pt.col = par("col")) { boxplot_stats = boxplot(value, plot = FALSE)$stats box_height = boxplot_stats[4, 1] - boxplot_stats[2, 1] circos.rect(pos - 0.5* box_width, boxplot_stats[2, 1], pos + 0.5 * box_width, boxplot_stats[4, 1], col = col, border = border, lty = lty, lwd = lwd) circos.segments(pos - 0.5 * box_width, boxplot_stats[5, 1], pos + 0.5 * box_width, boxplot_stats[5, 1], col = border, lty = lty, lwd = lwd) circos.segments(pos, boxplot_stats[5, 1], pos, boxplot_stats[4, 1], col = border, lty = lty, lwd = lwd) circos.segments(pos, boxplot_stats[1, 1], pos, boxplot_stats[2, 1], col = border, lty = lty, lwd = lwd) circos.segments(pos - 0.5 * box_width, boxplot_stats[1, 1], pos + 0.5 * box_width, boxplot_stats[1, 1], col = border, lty = lty, lwd = lwd) circos.segments(pos - 0.5 * box_width, boxplot_stats[3, 1], pos + 0.5 * box_width, boxplot_stats[3, 1], col = border, lty = lty, lwd = lwd) if (outline) { l1 = value > boxplot_stats[5, 1] if (any(l1)) circos.points(x = rep(pos, sum(l1)), y = value[l1], cex = cex, col = pt.col, pch = pch) l2 = value < boxplot_stats[1, 1] if (any(l2)) circos.points(x = rep(pos, sum(l2)), y = value[l2], cex = cex, col = pt.col, pch = pch) } } if(is.matrix(value)) { value = as.data.frame(value) } if(is.list(value)) { n = length(value) if(length(pos) != n) { stop_wrap("Length of `pos` should be same as number of boxes.") } if(length(box_width) == 1) box_width = rep(box_width, length(value)) if(length(col) == 1) col = rep(col, n) if(length(border) == 1) border = rep(border, n) if(length(lwd) == 1) lwd = rep(lwd, n) if(length(lty) == 1) lty = rep(lty, n) if(length(cex) == 1) cex = rep(cex, n) if(length(pch) == 1) pch = rep(pch, n) if(length(pt.col) == 1) pt.col = rep(pt.col, n) for(i in 1:n) { single_boxplot(value[[i]], pos = pos[i], outline = outline, box_width = box_width[i], col = col[i], border = border[i], lwd = lwd[i], lty = lty[i], cex = cex[i], pch = pch[i], pt.col = pt.col[i]) } } else if(is.atomic(value)) { single_boxplot(value, pos = pos, outline = outline, box_width = box_width, col = col, border = border, lwd = lwd, lty = lty, cex = cex, pch = pch, pt.col = pt.col) } } # == title # Draw violin plots # # == param # -value A numeric vector, a matrix or a list. If it is a matrix, boxplots are made by columns. # -pos Positions of the boxes. # -violin_width Width of violins. # -col Filled color of boxes. # -border Color for the border as well as the quantile lines. # -lwd Line width. # -lty Line style # -show_quantile Whether to show the quantile lines. # -cex Point size. # -pch Point type. # -pt.col Point color # -max_density The maximal density value across several violins. It is used to compare between violins. # -sector.index Index of sector. # -track.index Index of track. # # == example # \donttest{ # circos.initialize(letters[1:4], xlim = c(0, 10)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # for(pos in seq(0.5, 9.5, by = 1)) { # value = runif(10) # circos.violin(value, pos) # } # }) # circos.clear() # # circos.initialize(letters[1:4], xlim = c(0, 10)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # value = replicate(runif(10), n = 10, simplify = FALSE) # circos.violin(value, 1:10 - 0.5, col = 1:10) # }) # circos.clear() # } circos.violin = function(value, pos, violin_width = 0.8, col = NA, border = "black", lwd = par("lwd"), lty = par("lty"), show_quantile = TRUE, pt.col = par("col"), cex = par("cex"), pch = 16, max_density = NULL, sector.index = get.current.sector.index(), track.index = get.current.track.index()) { os = get.current.sector.index() ot = get.current.track.index() set.current.cell(sector.index, track.index) on.exit(set.current.cell(os, ot)) single_violin = function(density, pos, violin_width = 0.8, col = NA, border = "black", lwd = par("lwd"), lty = par("lty"), show_quantile = TRUE, pt.col = par("col"), cex = par("cex"), pch = 16, max_d = max(density$y), value = NULL) { y = density$x x = density$y x = x/max_d * (violin_width/2) y = c(y, rev(y)) x = c(-x + pos, rev(x + pos)) box_stat = boxplot(value, plot = FALSE)$stat circos.polygon(x, y, border = border, col = col, lwd = lwd, lty = lty) if(show_quantile) { circos.lines(c(pos, pos), box_stat[1:2, 1]) circos.lines(x = c(pos, pos), y = box_stat[4:5, 1]) circos.points(pos, box_stat[3, 1], cex = cex, col = pt.col, pch = pch) } } if(is.matrix(value)) { value = as.data.frame(value) } if(is.list(value)) { n = length(value) if(length(pos) != n) { stop_wrap("Length of `pos` should be same as number of violins.") } if(length(col) == 1) col = rep(col, n) if(length(border) == 1) border = rep(border, n) if(length(lwd) == 1) lwd = rep(lwd, n) if(length(lty) == 1) lty = rep(lty, n) if(length(cex) == 1) cex = rep(cex, n) if(length(pch) == 1) pch = rep(pch, n) if(length(pt.col) == 1) pt.col = rep(pt.col, n) if(length(violin_width) == 1) violin_width = rep(violin_width, length(value)) density_list = lapply(value, density, na.rm = TRUE) for(i in seq_along(density_list)) { density = density_list[[i]] l = density$x >= min(value[[i]], na.rm = TRUE) & density$x <= max(value[[i]], na.rm = TRUE); l[is.na(l)] = FALSE density$x = density$x[l] density$y = density$y[l] density_list[[i]] = density } max_d = max(sapply(density_list, function(d) max(d$y))) if(!is.null(max_density)) max_d = max_density for(i in 1:n) { single_violin(density_list[[i]], pos = pos[i], violin_width = violin_width, col = col[i], border = border[i], lwd = lwd[i], lty = lty[i], show_quantile = show_quantile, pt.col = pt.col[i], cex = cex[i], pch = pch[i], max_d = max_d, value = value[[i]]) } } else if(is.atomic(value)) { density = density(value, na.rm = TRUE) l = density$x >= min(value, na.rm = TRUE) & density$x <= max(value, na.rm = TRUE); l[is.na(l)] = FALSE density$x = density$x[l] density$y = density$y[l] max_d = max(density$y) if(!is.null(max_density)) max_d = max_density single_violin(density, pos = pos, violin_width = violin_width, col = col, border = border, lwd = lwd, lty = lty, show_quantile = show_quantile, pt.col = pt.col, cex = cex, pch = pch, max_d = max(density$y), value = value) } } get_bezier_points = function(x1, y1, x2, y2, xlim, ylim) { x1 = (x1 - xlim[1])/(xlim[2] - xlim[1]) x2 = (x2 - xlim[1])/(xlim[2] - xlim[1]) y1 = (y1 - ylim[1])/(ylim[2] - ylim[1]) y2 = (y2 - ylim[1])/(ylim[2] - ylim[1]) r = 0.6 - abs(x2 - x1)/2 p = cbind(c(0, 0, 1, 1), c(0, r, r, 1)) pt = bezier::bezier(t = seq(0, 1, length = 50), p = p) wx = x2 - x1 x = pt[, 1] * wx + x1 wy = y2 - y1 y = pt[, 2]*wy + y1 x = x*(xlim[2] - xlim[1]) + xlim[1] y = y*(ylim[2] - ylim[1]) + ylim[1] data.frame(x = x, y = y) } # == title # Draw connecting lines/ribons between two sets of points # # == param # -x0 x coordinates for point set 1. The value can also be a two-column matrix. # -y0 y coordinates for point set 1. # -x1 x coordinates for point set 2. The value can also be a two-column matrix. # -y1 y coordinates for point set 2. # -sector.index Index for the sector. # -track.index Index for the track. # -type Which type of connections. Values can be "normal", "segments" and "bezier". # -segments.ratio When ``type`` is set to ``segments``, each connecting line is segmented into three parts. # This argument controls the length of the three parts of sub-segments. # -col Color of the segments. # -border Border color of the links. # -lwd Line width of the segments. # -lty Line type of the segments. # -... Other arguments. # # == example # \donttest{ # circos.initialize(c("a"), xlim = c(0, 1)) # circos.track(ylim = c(0, 1), track.height = 0.7, bg.border = NA, # panel.fun = function(x, y) { # circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[1], 2), col = "#CCCCCC") # circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[2], 2), col = "#CCCCCC") # x0 = runif(100) # x1 = runif(100) # # circos.connect(x0, 0, x1, 1, # type = "normal", border = NA, # col = rand_color(100, luminosity = "bright", transparency = 0.75)) # }) # # circos.initialize(c("a"), xlim = c(0, 1)) # circos.track(ylim = c(0, 1), track.height = 0.7, bg.border = NA, # panel.fun = function(x, y) { # circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[1], 2), col = "#CCCCCC") # circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[2], 2), col = "#CCCCCC") # x0 = runif(100) # x1 = runif(100) # # circos.connect(x0, 0, x1, 1, # type = "bezier", border = NA, # col = rand_color(100, luminosity = "bright", transparency = 0.75)) # }) # # circos.initialize(c("a"), xlim = c(0, 1)) # circos.track(ylim = c(0, 1), track.height = 0.7, bg.border = NA, # panel.fun = function(x, y) { # circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[1], 2), col = "#CCCCCC") # circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[2], 2), col = "#CCCCCC") # x0 = sort(runif(200)) # x0 = matrix(x0, ncol = 2, byrow = TRUE) # x1 = sort(runif(200)) # x1 = matrix(x1, ncol = 2, byrow = TRUE) # # circos.connect(x0, 0, x1, 1, # type = "normal", border = NA, # col = rand_color(100, luminosity = "bright", transparency = 0.5)) # }) # # circos.initialize(c("a"), xlim = c(0, 1)) # circos.track(ylim = c(0, 1), track.height = 0.7, bg.border = NA, # panel.fun = function(x, y) { # circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[1], 2), col = "#CCCCCC") # circos.lines(CELL_META$cell.xlim, rep(CELL_META$cell.ylim[2], 2), col = "#CCCCCC") # x0 = sort(runif(500)) # x0 = matrix(x0, ncol = 2, byrow = TRUE) # x0 = x0[sample(nrow(x0), nrow(x0)), ] # x1 = sort(runif(500)) # x1 = matrix(x1, ncol = 2, byrow = TRUE) # x1 = x1[sample(nrow(x1), nrow(x1)), ] # # l = abs(x0[, 1] - x1[, 1]) < 0.5 # # circos.connect(x0[l ,], 0, x1[l, ], 1, # type = "bezier", border = NA, # col = rand_color(sum(l), luminosity = "bright", transparency = 0.5)) # }) # } circos.connect = function(x0, y0, x1, y1, sector.index = get.current.sector.index(), track.index = get.current.track.index(), type = c("normal", "segments", "bezier"), segments.ratio = c(1, 1, 1), col = par("col"), border = "black", lwd = par("lwd"), lty = par("lty"), ...) { type = match.arg(type)[1] if(type == "bezier") { if(!requireNamespace("bezier")) { stop_wrap("You need to install 'bezier' package from CRAN.") } } if(is.null(nrow(x0))) { n1 = length(x0) } else { x0 = x0[, 1:2] n1 = nrow(x0) } n2 = length(y0) if(is.null(nrow(x1))) { n3 = length(x1) } else { x1 = x1[, 1:2] n3 = nrow(x1) } n4 = length(y1) n = max(c(n1, n2, n3, n4)) if(n1 == 1) { if(is.null(nrow(x0))) { x0 = rep(x0, n) } else { x0 = matrix(rep(x0, each = n), ncol = 2) } n1 = n } if(n2 == 1) { y0 = rep(y0, n); n2 = n } if(n3 == 1) { if(is.null(nrow(x1))) { x1 = rep(x1, n) } else { x1 = matrix(rep(x1, each = n), ncol = 2) } n3 = n } if(n4 == 1) { y1 = rep(y1, n); n4 = n } if(! (n1 == n2 && n2 == n3 && n3 == n4) ) { stop_wrap("x0, y0, x1, y1 should have same length.") } if(!is.matrix(x0)) x0 = matrix(x0, ncol = 1) if(!is.matrix(x1)) x1 = matrix(x1, ncol = 1) if(length(col) == 1) col = rep(col, n) if(length(border) == 1) border = rep(border, n) if(length(lwd) == 1) lwd = rep(lwd, n) if(length(lty) == 1) lty = rep(lty, n) if(ncol(x0) == 1 && ncol(x1) == 1) { if(type == "normal") { circos.segments(x0, y0, x1, y1, sector.index = sector.index, track.index = track.index, col = col, lwd = lwd, lty = lty, ...) } else if(type == "segments") { if(length(segments.ratio) == 1) segments.ratio = rep(segments.ratio, 3) segments.ratio = segments.ratio[1:3] segments.ratio = segments.ratio/sum(segments.ratio) for(i in 1:n) { w = x1[i] - x0[i] h = y1[i] - y0[i] circos.segments(x0[i], y0[i], x0[i], y0[i] + h*segments.ratio[1], col = col[i], lwd = lwd[i], lty = lty[i], straight = TRUE, sector.index = sector.index, track.index = track.index) circos.segments(x0[i], y0[i]+h*segments.ratio[1], x1[i], y0[i] + h*sum(segments.ratio[1:2]), col = col[i], lwd = lwd[i], lty = lty[i], sector.index = sector.index, track.index = track.index) circos.segments(x1[i], y0[i]+h*sum(segments.ratio[1:2]), x1[i], y1[i], col = col[i], lwd = lwd[i], lty = lty[i], straight = TRUE, sector.index = sector.index, track.index = track.index) } } else if(type == "bezier") { for(i in 1:n) { pt = get_bezier_points(x0[i], y0[i], x1[i], y1[i], xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index), ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) ) circos.lines(pt[, 1], pt[, 2], col = col[i], lwd = lwd[i], lty = lty[i], sector.index = sector.index, track.index = track.index) } } } else { if(type == "segments") { stop_wrap("'segments' is only allowed for connections as lines where `x0` and `x1` are both set as vectors.") } if(type == "normal") { for(i in 1:n) { if(ncol(x0) == 2 && ncol(x1) == 2) { circos.polygon(c(x0[i, 1], x0[i, 2], x1[i, 2], x1[i, 1], x0[i, 1]), c(y0[i], y0[i], y1[i], y1[i], y0[i]), col = col[i], border = border[i], lwd = lwd[i], lty = lty[i], sector.index = sector.index, track.index = track.index) } else if(ncol(x0) == 2 && ncol(x1) == 1) { circos.polygon(c(x0[i, 1], x0[i, 2], x1[i, 1], x0[i, 1]), c(y0[i], y0[i], y1[i], y0[i]), col = col[i], border = border[i], lwd = lwd[i], lty = lty[i], sector.index = sector.index, track.index = track.index) } else if(ncol(x0) == 2 && ncol(x1) == 2) { circos.polygon(c(x0[i, 1], x1[i, 2], x1[i, 1], x0[i, 1]), c(y0[i], y1[i], y1[i], y0[i]), col = col[i], border = border[i], lwd = lwd[i], lty = lty[i], sector.index = sector.index, track.index = track.index) } } } else if(type == "bezier") { for(i in 1:n) { if(ncol(x0) == 2 && ncol(x1) == 2) { pt1 = get_bezier_points(x0[i, 2], y0[i], x1[i, 2], y1[i], xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index), ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) ) pt2 = get_bezier_points(x1[i, 1], y1[i], x0[i, 1], y0[i], xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index), ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) ) circos.polygon(c(pt1[, 1], pt2[, 1], pt1[1, 1]), c(pt1[, 2], pt2[, 2], pt1[1, 2]), col = col[i], border = border[i], lwd = lwd[i], lty = lty[i], sector.index = sector.index, track.index = track.index) } else if(ncol(x0) == 2 && ncol(x1) == 1) { pt1 = get_bezier_points(x0[i, 2], y0[i], x1[i, 1], y1[i], xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index), ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) ) pt2 = get_bezier_points(x1[i, 1], y1[i], x0[i, 1], y0[i], xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index), ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) ) circos.polygon(c(pt1[, 1], pt2[, 1], pt1[1, 1]), c(pt1[, 2], pt2[, 2], pt1[1, 2]), col = col[i], border = border[i], lwd = lwd[i], lty = lty[i], sector.index = sector.index, track.index = track.index) } else if(ncol(x0) == 2 && ncol(x1) == 2) { pt1 = get_bezier_points(x0[i, 1], y0[i], x1[i, 2], y1[i], xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index), ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) ) pt2 = get_bezier_points(x1[i, 1], y1[i], x0[i, 1], y0[i], xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index), ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) ) circos.polygon(c(pt1[, 1], pt2[, 1], pt1[1, 1]), c(pt1[, 2], pt2[, 2], pt1[1, 2]), col = col[i], border = border[i], lwd = lwd[i], lty = lty[i], sector.index = sector.index, track.index = track.index) } } } } } # == title # Add a label track # # == param # -sectors A vector of sector names. # -x Positions of the labels. # -labels A vector of labels. # -facing Facing of the labels. The value can only be ``"clockwise"`` or ``"reverse.clockwise"``. # -niceFacing Whether automatically adjust the facing of the labels. # -col Color for the labels. # -cex Size of the labels. # -font Font of the labels. # -padding Padding of the labels, the value is the ratio to the height of the label. # -connection_height Height of the connection track. # -line_col Color for the connection lines. # -line_lwd Line width for the connection lines. # -line_lty Line type for the connectioin lines. # -labels_height Height of the labels track. # -side Side of the labels track, is it in the inside of the track where the regions are marked? # -labels.side Same as ``side``. It will replace ``side`` in the future versions. # -track.margin Bottom and top margins. # # == details # This function creates two tracks, one for the connection lines and one for the labels. # # If two labels are too close and overlap, this function automatically adjusts the positions of neighouring labels. # # == example # circos.initialize(sectors = letters[1:8], xlim = c(0, 1)) # circos.track(ylim = c(0, 1)) # circos.labels(c("a", "a", "b", "b"), x = c(0.1, 0.12, 0.4, 0.6), labels = c(0.1, 0.12, 0.4, 0.6)) # circos.initialize(sectors = letters[1:8], xlim = c(0, 1)) # circos.labels(c("a", "a", "b", "b"), x = c(0.1, 0.12, 0.4, 0.6), labels = c(0.1, 0.12, 0.4, 0.6), # side = "outside") # circos.track(ylim = c(0, 1)) # circos.clear() circos.labels = function( sectors, x, labels, facing = "clockwise", niceFacing = TRUE, col = par("col"), cex = 0.8, font = par("font"), padding = 0.4, connection_height = mm_h(5), line_col = par("col"), line_lwd = par("lwd"), line_lty = par("lty"), labels_height = min(c(cm_h(1.5), max(strwidth(labels, cex = cex, font = font)))), side = c("inside", "outside"), labels.side = side, track.margin = circos.par("track.margin")) { if(missing(sectors) && missing(x)) { env = circos.par("__tempenv__") if(identical(env$circos.heatmap.initialized, TRUE)) { subset = unlist(lapply(env$sector.meta.data, function(x) x$subset)) x = unlist(lapply(env$sector.meta.data, function(x) x$cell_middle)) labels = labels[subset] sectors = rep(names(env$sector.meta.data), times = sapply(env$sector.meta.data, function(x) length(x$subset))) } } bed = data.frame(sectors, x, x) circos.genomicLabels(bed, labels = labels, facing = facing, niceFacing = niceFacing, col = col, cex = cex, font = font, padding = padding, connection_height = connection_height, line_col = line_col, line_lwd = line_lwd, line_lty = line_lty, labels_height = labels_height, side = side, labels.side = labels.side, track.margin = track.margin) } circlize/R/genomic_utils.R0000755000176200001440000003217214236510014015247 0ustar liggesusers# == title # Read/parse cytoband data from a data frame/file/UCSC database # # == param # -cytoband Path of the cytoband file or a data frame that already contains cytoband data # -species Abbreviations of species. e.g. hg19 for human, mm10 for mouse. If this # value is specified, the function will download ``cytoBand.txt.gz`` from # UCSC website automatically. # -chromosome.index subset of chromosomes, also used to reorder chromosomes. # -sort.chr Whether chromosome names should be sorted (first sort by numbers then by letters). # If ``chromosome.index`` is set, this argument is enforced to ``FALSE`` # # == details # The function read the cytoband data, sort the chromosome names and calculate the length of each chromosome. # By default, it is human hg19 cytoband data. # # You can find the data structure of the cytoband data from https://hgdownload.cse.ucsc.edu/goldenpath/hg19/database/cytoBand.txt.gz # # == values # -``df`` Data frame for cytoband data (rows are sorted if ``sort.chr`` is set to ``TRUE``) # -``chromosome`` Sorted chromosome names # -``chr.len`` Length of chromosomes. Orders are same as ``chromosome`` # # == example # data = read.cytoband(species = "hg19") # data = read.cytoband(cytoband = system.file(package = "circlize", "extdata", "cytoBand.txt")) # cytoband = read.table(system.file(package = "circlize", "extdata", "cytoBand.txt"), # colClasses = c("character", "numeric", "numeric", "character", "character"), sep = "\t") # data = read.cytoband(cytoband = cytoband) read.cytoband = function( cytoband = system.file(package = "circlize", "extdata", "cytoBand.txt"), species = NULL, chromosome.index = usable_chromosomes(species), sort.chr = TRUE) { # this function should also take charge of the order of chromosome if(!is.null(chromosome.index)) sort.chr = FALSE # `species` is prior to `cytoband` if(!is.null(species)) { url = paste("https://hgdownload.cse.ucsc.edu/goldenPath/", species, "/database/cytoBand.txt.gz", sep = "") cytoband = paste0(circos.par("__tempdir__"), "/", species, "_cytoBand.txt.gz") if(!file.exists(cytoband)) { e = try(suppressWarnings(download.file(url, destfile = cytoband, quiet = TRUE)), silent = TRUE) if(inherits(e, "try-error")) { if(file.exists(cytoband)) file.remove(cytoband) cytoband_list = readRDS(system.file("extdata", "cytoband_list.rds", package = "circlize")) if(species %in% names(cytoband_list)) { cytoband = cytoband_list[[species]] } else { stop_wrap("It seems your species name is wrong or UCSC does not provide cytoband data for your species or internet connection was interrupted. If possible, download cytoBand file from ", url, " and use `read.cytoband(file)`.") } } } } if(is.data.frame(cytoband)) { d = cytoband } else { if(grepl("\\.gz$", cytoband)) { cytoband = gzfile(cytoband) } d = read.table(cytoband, colClasses = c("character", "numeric", "numeric", "character", "character"), sep = "\t", stringsAsFactors = FALSE) } # now cytoband data is normalized to `d` if(!is.null(chromosome.index)) { chromosome.index = intersect(chromosome.index, unique(as.vector(d[[1]]))) d = d[d[[1]] %in% chromosome.index, , drop = FALSE] if(is.factor(d[[1]])) { # re-factor because levels may decrease due to `chromosome.index` levels(d[[1]]) = intersect(chromosome.index, unique(as.vector(d[[1]]))) # ensures the remaining order is same as in `chromosome.index` } } if(nrow(d) == 0) { stop_wrap("Cannot find any chromosome. It is probably related to your chromosome names having or not having 'chr' prefix.") } if(is.null(chromosome.index)) { if(is.factor(d[[1]])) { chromosome = levels(d[[1]]) } else { chromosome = unique(d[[1]]) } } else { chromosome = chromosome.index } if(sort.chr) { chromosome = sort_chr(chromosome) } chr.len = NULL dnew = NULL for(chr in chromosome) { d2 = d[d[[1]] == chr, ] chr.len = c(chr.len, max(d2[, 3])) dnew = rbind(dnew, d2) } names(chr.len) = chromosome return(list(df = dnew, chromosome = chromosome, chr.len = chr.len)) } # == title # Read/parse chromInfo data from a data frame/file/UCSC database # # == param # -chromInfo Path of the chromInfo file or a data frame that already contains chromInfo data # -species Abbreviations of species. e.g. hg19 for human, mm10 for mouse. If this # value is specified, the function will download ``chromInfo.txt.gz`` from # UCSC website automatically. # -chromosome.index subset of chromosomes, also used to reorder chromosomes. # -sort.chr Whether chromosome names should be sorted (first sort by numbers then by letters). # If ``chromosome.index`` is set, this argument is enforced to ``FALSE`` # # == details # The function read the chromInfo data, sort the chromosome names and calculate the length of each chromosome. # By default, it is human hg19 chromInfo data. # # You can find the data structure for the chromInfo data from https://hgdownload.cse.ucsc.edu/goldenpath/hg19/database/chromInfo.txt.gz # # == values # -``df`` Data frame for chromInfo data (rows are sorted if ``sort.chr`` is set to ``TRUE``) # -``chromosome`` Sorted chromosome names # -``chr.len`` Length of chromosomes. Order are same as ``chromosome`` # # == example # data = read.chromInfo(species = "hg19") # data = read.chromInfo(chromInfo = system.file(package = "circlize", "extdata", "chromInfo.txt")) # chromInfo = read.table(system.file(package = "circlize", "extdata", "chromInfo.txt"), # colClasses = c("character", "numeric"), sep = "\t") # data = read.chromInfo(chromInfo = chromInfo) read.chromInfo = function( chromInfo = system.file(package = "circlize", "extdata", "chromInfo.txt"), species = NULL, chromosome.index = usable_chromosomes(species), sort.chr = TRUE) { # this function should also take charge of the order of chromosome if(!is.null(chromosome.index)) sort.chr = FALSE if(!is.null(species)) { url = paste("https://hgdownload.cse.ucsc.edu/goldenPath/", species, "/database/chromInfo.txt.gz", sep = "") chromInfo = paste0(circos.par("__tempdir__"), "/", species, "_chromInfo.txt.gz") if(!file.exists(chromInfo)) { e = try(suppressWarnings(download.file(url, destfile = chromInfo, quiet = TRUE)), silent = TRUE) if(inherits(e, "try-error")) { if(file.exists(chromInfo)) file.remove(chromInfo) chrom_info_list = readRDS(system.file("extdata", "chrom_info_list.rds", package = "circlize")) if(species %in% names(chrom_info_list)) { chromInfo = chrom_info_list[[species]] } else { stop_wrap("It seems your species name is wrong or UCSC does not provide chromInfo data for your species or internet connection was interrupted. If possible, download chromInfo file from ", url, " and use `read.chromInfo(file)`.") } } } } if(is.data.frame(chromInfo)) { d = chromInfo } else { if(grepl("\\.gz$", chromInfo)) { chromInfo = gzfile(chromInfo) } d = read.table(chromInfo, colClasses = c("character", "numeric"), sep = "\t", stringsAsFactors = FALSE)[1:2] # only first two columns } rownames(d) = d[[1]] if(!is.null(chromosome.index)) { chromosome.index = intersect(chromosome.index, unique(as.vector(d[[1]]))) d = d[d[[1]] %in% chromosome.index, , drop = FALSE] if(is.factor(d[[1]])) { # re-factor because levels may decrease due to `chromosome.index` levels(d[[1]]) = intersect(chromosome.index, unique(as.vector(d[[1]]))) # ensures the remaining order is same as in `chromosome.index` } } if(nrow(d) == 0) { stop_wrap("Cannot find any chromosome. It is probably related to your chromosome names having or not having 'chr' prefix.") } # now cytoband data is normalized to `d` if(!is.null(chromosome.index)) { chromosome.index = intersect(chromosome.index, unique(as.vector(d[[1]]))) d = d[d[[1]] %in% chromosome.index, , drop = FALSE] if(is.factor(d[[1]])) { # re-factor because levels may decrease due to `chromosome.index` levels(d[[1]]) = intersect(chromosome.index, unique(as.vector(d[[1]]))) # ensures the remaining order is same as in `chromosome.index` } } if(is.null(chromosome.index)) { if(is.factor(d[[1]])) { chromosome = levels(d[[1]]) } else { chromosome = unique(d[[1]]) } } else { chromosome = chromosome.index } if(sort.chr) { chromosome = sort_chr(chromosome) } dnew = d[chromosome, , drop = FALSE] chr.len = dnew[[2]] names(chr.len) = chromosome dnew = data.frame(chr = chromosome, start = rep(0, nrow(dnew)), end = dnew[[2]], stringsAsFactors = FALSE) return(list(df = dnew, chromosome = chromosome, chr.len = chr.len)) } usable_chromosomes = function(species) { if(is.null(species)) return(NULL) switch(gsub("\\d+$", "", species), "hg" = paste0("chr", c(1:22, "X", "Y")), "mm" = paste0("chr", c(1:19, "X", "Y")), "rn" = paste0("chr", c(1:20, "X", "Y")), "dm" = paste0("chr", c("2L", "2R", "3L", "3R", "4", "X")), "ce" = paste0("chr", c("I", "II", "III", "IV", "V", "X")), "sacCer" = paste0("chr", c("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV")), NULL ) } # == title # Assign colors to cytogenetic band (hg19) according to the Giemsa stain results # # == param # -x A vector containing the Giemsa stain results # cytoband.col = function(x) { x = as.vector(x) col.panel = c("gpos100" = rgb(0, 0, 0, maxColorValue = 255), "gpos" = rgb(0, 0, 0, maxColorValue = 255), "gpos75" = rgb(130, 130, 130, maxColorValue = 255), "gpos66" = rgb(160, 160, 160, maxColorValue = 255), "gpos50" = rgb(200, 200, 200, maxColorValue = 255), "gpos33" = rgb(210, 210, 210, maxColorValue = 255), "gpos25" = rgb(200, 200, 200, maxColorValue = 255), "gvar" = rgb(220, 220, 220, maxColorValue = 255), "gneg" = rgb(255, 255, 255, maxColorValue = 255), "acen" = rgb(217, 47, 39, maxColorValue = 255), "stalk" = rgb(100, 127, 164, maxColorValue = 255) ) col = col.panel[x] col[is.na(col)] = "#FFFFFF" names(col) = NULL return(col) } # == title # Generate random genomic data # # == param # -nr Number of rows # -nc Number of numeric columns / value columns # -fun Function for generating random values # -species species, pass to `read.cytoband` # # == details # The function will uniformly sample positions from the genome. Chromosome names start with "chr" # and positions are sorted. The final number of rows may not be exactly as same as ``nr``. generateRandomBed = function( nr = 10000, nc = 1, fun = function(k) rnorm(k, 0, 0.5), species = NULL) { cyto = read.cytoband(species = species) chr.len = cyto$chr.len chromosome = cyto$chromosome dl = lapply(seq_along(chr.len), function(i) { k = round(nr*2 * chr.len[i] / sum(chr.len)) k = ifelse(k %% 2, k + 1, k) breaks = sort(sample(chr.len[i], k)) res = data.frame(chr = rep(chromosome[i], length(breaks)/2), start = breaks[seq_along(breaks) %% 2 == 1], end = breaks[seq_along(breaks) %% 2 == 0], stringsAsFactors = FALSE) for(k in seq_len(nc)) { res = cbind(res, value = fun(length(breaks)/2), stringsAsFactors = FALSE) } res }) df = NULL for(i in seq_along(dl)) { df = rbind(df, dl[[i]]) } if(ncol(df) == 3) { colnames(df) = c("chr", "start", "end") } else { colnames(df) = c("chr", "start", "end", paste0("value", seq_len(ncol(df)-3))) } return(df) } sort_chr = function(chromosome) { chromosome = sort(chromosome) if(!grepl("^(chr|\\d)", chromosome[1])) { return(chromosome) } chromosome.ind = gsub("chr", "", chromosome) chromosome.ind = gsub("_.*$", "", chromosome.ind) l_num = grepl("^\\d+$", chromosome.ind) l_letter = !l_num chromosome.num = chromosome[l_num] chromosome.levels = chromosome[!l_num] chromosome.num = chromosome.num[order(as.numeric(chromosome.ind[l_num]))] chromosome.letter = chromosome.levels[order(chromosome.ind[!l_num])] chromosome = c(chromosome.num, chromosome.letter) return(chromosome) } validate_region = function(df, start_column = 2, end_column = 3, check_chr = FALSE) { if(any(df[, end_column] < df[, start_column])) { stop_wrap("End positions should not be smaller than the start positions.") } if(check_chr) { if(is.circos.initialized()) { all_chr = as.vector(df[, 1]) all_chr_level = unique(all_chr) chr_start = sapply(all_chr_level, function(x) get.sector.data(x)["min.data"]) names(chr_start) = all_chr_level chr_end = sapply(all_chr_level, function(x) get.sector.data(x)["max.data"]) names(chr_end) = all_chr_level if(any(df[, start_column] < chr_start[all_chr])) { warning_wrap("Some of the regions have start position values smaller than the start of the chromosomes.") } if(any(df[, end_column] > chr_end[all_chr])) { warning_wrap("Some of the regions have end position values larger than the end of the chromosomes.") } } } } circlize/R/plot.R0000755000176200001440000006661114215052325013374 0ustar liggesusers# == title # Create plotting regions for a whole track # # == param # -sectors A `factor` or a character vector which represents categories of data, if it is ``NULL``, # then it uses all sector index. # -factors The same as ``sectors``. It will be removed in future versions. # -x Data on x-axis. It is only used if ``panel.fun`` is set. # -y Data on y-axis # -ylim Range of data on y-axis # -force.ylim Whether to force all cells in the track to share the same ``ylim``. Normally, # all cells on a same track should have same ``ylim``. # -track.index Index for the track which is going to be created/updated. If the specified track has already # been created, this function just updated corresponding track with new plot. If the specified track # is ``NULL`` or has not been created, this function just creates it. Note the value for this # argument should not exceed maximum track index plus 1. # -track.height Height of the track. It is the percentage to the radius of the unit circles. The value can be set by `uh` to an absolute unit. # If updating a track (with proper ``track.index`` value), this argument is ignored. # -track.margin only affect current track # -cell.padding only affect current track # -bg.col Background color for the plotting regions. It can be vector which has the same length of sectors. # -bg.border Color for the border of the plotting regions. It can be vector which has the same length of sectors. # -bg.lty Line style for the border of the plotting regions. It can be vector which has the same length of sectors. # -bg.lwd Line width for the border of the plotting regions. It can be vector which has the same length of sectors. # -panel.fun Panel function to add graphics in each cell, see "details" section # and vignette for explanation. # # == details # This function tends to be a high-level plotting function, which means, # you must first call this function to create plotting regions, then those # low-level graphic function such as `circos.points`, `circos.lines` can be # applied. # # Currently, all the cells that are created in a same track sharing same height, which means, # there is no cell has larger height than others. # # Since ranges for values on x-axis has already been defined by `circos.initialize`, only # ranges for values on y-axis should be specified in this function. # There are two ways to identify the ranges for values on y-axes either by ``y`` # or ``ylim``. If ``y`` is set, it must has the same length as ``factors`` and the ``ylim`` for each cell is calculated # from y values. Also, the ylim can be specified from ``ylim`` which can be a two-element vector or a matrix which # has two columns and the number of rows is the same as the length of the levels of the factors. # # If there is no enough space for the new track or the new track overlaps with other tracks, # there will be an error. # # If ``factors`` does not cover all sectors, the cells in remaining unselected # sectors would also be created but without drawing anything. The ``ylim`` for these cells # are the same as that in the last created cell. # # The function can also update a already-created track if the index for the track # is specified. If updating an existed track, those parameters related to the position (such as track height and track margin) # of the plotting region can not be changed. # # == Panel function # # ``panel.fun`` provides a convenient way to add graphics in each cell when initializing the # tracks. The self-defined function needs two arguments: ``x`` and ``y`` which correspond to the data points # in the current cell. When ``factors``, ``x``, and ``y`` are set in `circos.trackPlotRegion`, a subset of ``x`` # and ``y`` are split by ``factors`` and are sent to ``panel.fun`` in the "current" cell. # `circos.trackPlotRegion` creates plotting regions one by one on the track and # ``panel.fun`` adds graphics in the 'current' cell after the plotting region for a certain cell has been # created. # # See vignette for examples of how to use this feature. # # == seealso # https://jokergoo.github.io/circlize_book/book/circular-layout.html # # == example # circos.initialize(letters[1:8], xlim = c(0, 1)) # set.seed(123) # df = data.frame(fa = sample(letters[1:8], 100, replace = TRUE), # x = runif(100), y = rnorm(100)) # circos.track(ylim = c(0, 1), bg.col = rand_color(8)) # circos.track(df$fa, x = df$x, y = df$y, panel.fun = function(x, y) { # circos.points(x, y) # }, track.height = 0.2, bg.border = rand_color(8)) # circos.clear() circos.trackPlotRegion = function( sectors = NULL, x = NULL, y = NULL, ylim = NULL, force.ylim = TRUE, track.index = NULL, track.height = circos.par("track.height"), track.margin = circos.par("track.margin"), cell.padding = circos.par("cell.padding"), bg.col = NA, bg.border = "black", bg.lty = par("lty"), bg.lwd = par("lwd"), panel.fun = function(x, y) {NULL}, factors = sectors) { if(!is.circos.initialized()) { stop_wrap("Your circular plot has not been initialized yet!") } o.track.margin = circos.par("track.margin") o.cell.padding = circos.par("cell.padding") circos.par(track.margin = track.margin) circos.par(cell.padding = cell.padding) # if there is no factors, default are all the available factors if(is.null(factors)) { factors = get.all.sector.index() factors = factor(factors, levels = factors) } if(is.function(factors) || is.function(x) || is.function(y) || is.function(ylim)) { stop_wrap("The panel function should be set explicitly with the argument name `panel.fun = ...`.") } # although ``x`` and ``y`` are not necessary, but once they are set, they must # have same length as ``factors`` if(!is.null(y) && length(y) != length(factors) || !is.null(x) && length(x) != length(factors)) { stop_wrap("Length of data and length of sectors differ.") } # need to be a factor if(!is.factor(factors)) { factors = factor(factors) } # check whether there are some categories that are not in the circle setdiff.factors = setdiff(levels(factors), get.all.sector.index()) if(length(setdiff.factors)) { stop_wrap("Cannot find these categories in existed sectors:", paste(setdiff.factors, collapse = ", "), ".") } tracks = get.all.track.index() last.track.index = ifelse(length(tracks), tracks[length(tracks)], 0) flag_createNewTrack = 0 if(is.null(track.index)) { # new track should inside the most recently created track set.current.track.index(last.track.index + 1) track.index = get.current.track.index() flag_createNewTrack = 1 } else if(track.index == last.track.index + 1) { # if the track.index is next to the most recently created track set.current.track.index(track.index) track.index = get.current.track.index() flag_createNewTrack = 1 } else { if(track.index > last.track.index + 1) { stop_wrap("Wrong track index: it should be no more than ", last.track.index + 1, ".") } # update an existed track if(track.index <= tracks[length(tracks)]) { # ignore track.height from args track.height = get.cell.meta.data("track.height", sector.index = factors[1], track.index = track.index) # ignore track.margin circos.par("track.margin" = get.cell.meta.data("track.margin", sector.index = factors[1], track.index = track.index)) circos.par("cell.padding" = get.cell.meta.data("cell.padding", sector.index = factors[1], track.index = track.index)) } if(is.null(ylim) && is.null(y)) { for(sid in get.all.sector.index()) { ylim = rbind(ylim, get.cell.meta.data("ylim", sector.index = sid, track.index = track.index)) } } set.current.track.index(track.index) } all_le = get.all.sector.index() le = levels(factors) nlevel = length(all_le) bg.col = recycle.with.levels(bg.col, all_le) bg.border = recycle.with.levels(bg.border, all_le) bg.lty = recycle.with.levels(bg.lty, all_le) bg.lwd = recycle.with.levels(bg.lwd, all_le) # whether to force ylim for all cells in a track same if(is.null(ylim)) { if(is.null(y)) { stop_wrap("You have to specify either `y` or `ylim`.") } if(force.ylim) { y.range = range(y) y.range = matrix(rep(y.range, nlevel), ncol = 2, byrow = TRUE) } else { y.range = tapply(y, factors, range) y.range = matrix(unlist(y.range), ncol = 2, byrow = TRUE) } } if(flag_createNewTrack) { if(track.index == 1) { track.start = 1 - circos.par("track.margin")[2] } else { track.start = get.cell.meta.data("cell.bottom.radius", track.index = track.index - 1) - get.cell.meta.data("track.margin", track.index = track.index - 1)[1] - circos.par("track.margin")[2] } } else { track.start = get.cell.meta.data("cell.top.radius", track.index = track.index) } # check whether there is enough space for the new track and whether the new space # overlap with other tracks. Only for creatation mode. if(flag_createNewTrack) { check.track.position(track.index, track.start, track.height) } # if `ylim` is specified if(!is.null(ylim)) { if(is.vector(ylim) && length(ylim) == 2) { ylim = matrix(rep(ylim, nlevel), ncol = 2, byrow = TRUE) } else if(is.matrix(ylim) && ncol(ylim) == 2 && nrow(ylim) == nlevel) { } else { stop_wrap("Wrong `ylim` format.") } } # now for each factor, create plotting region for(i in seq_along(all_le)) { # `ylim` is prior to `y` if(is.null(ylim)) { ylim2 = y.range[i, ] } else { ylim2 = ylim[i, ] } # create plotting region for single cell circos.createPlotRegion(track.start = track.start, track.height = track.height, sector.index = all_le[i], track.index = track.index, ylim = ylim2, bg.col = bg.col[i], bg.border = bg.border[i], bg.lty = bg.lty[i], bg.lwd = bg.lwd[i]) if(all_le[i] %in% le) { l = factors == all_le[i] if(! is.null(panel.fun)) { if(is.null(x)) { nx = NULL } else { nx = x[l] } if(is.null(y)) { ny = NULL } else { ny = y[l] } current_track_index = get.current.track.index() panel.fun(nx, ny) if(get.current.track.index() != current_track_index) { stop_wrap("`panel_fun` should not change the current track index. Please check the functions used inside `panel_fun`.") } } } } circos.par(track.margin = o.track.margin) circos.par(cell.padding = o.cell.padding) return(invisible(NULL)) } # == title # Create plotting regions for a whole track # # == param # -... Pass to `circos.trackPlotRegion`. # # == details # Shortcut function of `circos.trackPlotRegion`. # circos.track = function(...) { circos.trackPlotRegion(...) } # == title # Update the plotting region in an existed cell # # == param # -sector.index Index for the sector # -track.index Index for the track # -bg.col Background color for the plotting region # -bg.border Color for the border of the plotting region # -bg.lty Line style for the border of the plotting region # -bg.lwd Line width for the border of the plotting region # # == details # You can update an existed cell by this function by erasing all the graphics. # But the ``xlim`` and ``ylim`` inside the cell still remain unchanged. # # Note if you use `circos.track` to update an already created track, # you can re-define ``ylim`` in these cells. # # == example # circos.initialize(letters[1:8], xlim = c(0, 1)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # circos.text(CELL_META$xcenter, CELL_META$ycenter, CELL_META$sector.index) # }) # circos.update(sector.index = "b", track.index = 1) # circos.rect(CELL_META$cell.xlim[1], CELL_META$cell.ylim[1], # CELL_META$cell.xlim[2], CELL_META$cell.ylim[2], # col = "#FF000080") # circos.clear() circos.updatePlotRegion = function( sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), bg.col = NA, bg.border = "black", bg.lty = par("lty"), bg.lwd = par("lwd")) { if(!has.cell(sector.index, track.index)) { stop_wrap("You can only update an existed cell.") } cell.xlim = get.cell.meta.data("cell.xlim", sector.index = sector.index, track.index = track.index) cell.ylim = get.cell.meta.data("cell.ylim", sector.index = sector.index, track.index = track.index) set.current.sector.index(sector.index) set.current.track.index(track.index) # cover the exsited region by fill with white lwd = get.cell.meta.data("bg.lwd", sector.index = sector.index, track.index = track.index) circos.rect(cell.xlim[1], cell.ylim[1], cell.xlim[2], cell.ylim[2], col = "white", border = "white", lty = 1, lwd = lwd) circos.rect(cell.xlim[1], cell.ylim[1], cell.xlim[2], cell.ylim[2], col = bg.col, border = bg.border, lty = bg.lty, lwd = bg.lwd) return(invisible(NULL)) } # == title # Create plotting regions for a whole track # # == param # -... pass to `circos.updatePlotRegion` # # == details # shortcut function of `circos.updatePlotRegion`. # circos.update = function(...) { circos.updatePlotRegion(...) } # internal, so we do not need to check arguments circos.createPlotRegion = function( track.start, track.height = circos.par("track.height"), sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), ylim, bg.col = NA, bg.border = "black", bg.lty = par("lty"), bg.lwd = par("lwd")) { # we do not have such meta for the cell, so we need to calculate them sector.data = get.sector.data(sector.index) cell.xlim = c(sector.data["min.value"], sector.data["max.value"]) names(cell.xlim) = NULL cell.padding = circos.par("cell.padding") xlim = c(sector.data["min.data"], sector.data["max.data"]) if(cell.padding[1] + cell.padding[3] >= track.height) { stop_wrap("Summation of cell padding on y-direction are larger than the height of the cells.") } if(ylim[2] == ylim[1]) { stop_wrap("range of `ylim` should be different.") } yl = numeric(2) yl[1] = ylim[1] - (ylim[2] - ylim[1])*cell.padding[1] / track.height yl[2] = ylim[2] + (ylim[2] - ylim[1])*cell.padding[3] / track.height set.cell.data(sector.index = sector.index, track.index = track.index, xlim = xlim, ylim = ylim, cell.xlim = cell.xlim, cell.ylim = yl, track.start = track.start, track.height = track.height, track.margin = circos.par("track.margin"), cell.padding = circos.par("cell.padding"), bg.col = bg.col, bg.border = bg.border, bg.lty = bg.lty, bg.lwd = bg.lwd) set.current.sector.index(sector.index) # The plotting region is a rectangle cell.ylim = yl if(circos.par$ring) { highlight.sector(sector.index = sector.index, track.index = track.index, col = bg.col, border = bg.border, lty = bg.lty, lwd = bg.lwd) } else { circos.rect(cell.xlim[1], cell.ylim[1], cell.xlim[2], cell.ylim[2], sector.index = sector.index, track.index = track.index, col = bg.col, border = bg.border, lty = bg.lty, lwd = bg.lwd) } return(invisible(NULL)) } # == title # Draw sectors or rings in a circle # # == param # -start.degree start degree for the sector # -end.degree end degree for the sector # -rou1 Radius for one of the arc in the sector # -rou2 Radius for the other arc in the sector # -center Center of the circle # -clock.wise The direction from ``start.degree`` to ``end.degree`` # -col Filled color # -border Border color # -lwd Line width # -lty Line style # # == details # If the interval between ``start`` and ``end`` (larger or equal to 360 or smaller or equal to -360) # it would draw a full circle or ring. If ``rou2`` is set, it would draw part of a ring. # # == example # plot(c(-1, 1), c(-1, 1), type = "n", axes = FALSE, ann = FALSE, asp = 1) # draw.sector(20, 0) # draw.sector(30, 60, rou1 = 0.8, rou2 = 0.5, clock.wise = FALSE, col = "#FF000080") # draw.sector(350, 1000, col = "#00FF0080", border = NA) # draw.sector(0, 180, rou1 = 0.25, center = c(-0.5, 0.5), border = 2, lwd = 2, lty = 2) # draw.sector(0, 360, rou1 = 0.7, rou2 = 0.6, col = "#0000FF80") # # sectors = letters[1:8] # circos.initialize(sectors, xlim = c(0, 1)) # for(i in 1:3) { # circos.trackPlotRegion(ylim = c(0, 1)) # } # circos.info(plot = TRUE) # # draw.sector(get.cell.meta.data("cell.start.degree", sector.index = "a"), # get.cell.meta.data("cell.end.degree", sector.index = "a"), # rou1 = 1, col = "#FF000040") # # draw.sector(0, 360, # rou1 = get.cell.meta.data("cell.top.radius", track.index = 1), # rou2 = get.cell.meta.data("cell.bottom.radius", track.index = 1), # col = "#00FF0040") # # draw.sector(get.cell.meta.data("cell.start.degree", sector.index = "e"), # get.cell.meta.data("cell.end.degree", sector.index = "f"), # get.cell.meta.data("cell.top.radius", track.index = 2), # get.cell.meta.data("cell.bottom.radius", track.index = 3), # col = "#0000FF40") # # pos = circlize(c(0.2, 0.8), c(0.2, 0.8), sector.index = "h", track.index = 2) # draw.sector(pos[1, "theta"], pos[2, "theta"], pos[1, "rou"], pos[2, "rou"], # clock.wise = TRUE, col = "#00FFFF40") # circos.clear() draw.sector = function( start.degree = 0, end.degree = 360, rou1 = 1, rou2 = NULL, center = c(0, 0), clock.wise = TRUE, col = NA, border = "black", lwd = par("lwd"), lty = par("lty")) { is.circular = function(start.degree, end.degree) { (end.degree - start.degree) %% 360 == 0 && (end.degree - start.degree) != 0 } degree_diff = function(start, end, clock.wise = TRUE) { if(is.circular(start, end)) { 360 } else { start = start %% 360 end = end %% 360 if(clock.wise) (start - end) %% 360 else (end - start) %% 360 } } # from start to end degree_seq = function(start, end, clock.wise = TRUE, ...) { if(is.circular(start, end)) { seq(0, 360, ...) } else { start = start %% 360 end = end %% 360 if(clock.wise) { # make start is larger than end, but the difference is less than 360 if(start < end) start = start + 360 seq(start, end, ...) } else { if(start > end) start = start - 360 seq(start, end, ...) } } } d1 = NULL # calculate the number of segments of the up arc l1 = as.radian(degree_diff(start.degree, end.degree, clock.wise)) * rou1 ncut1 = l1/ (2*pi/circos.par("unit.circle.segments")) ncut1 = floor(ncut1) ncut1 = ifelse(ncut1 < 2, 2, ncut1) # d1 is from the start.degree to end.degree d1 = rbind(d1, cbind(degree_seq(start.degree, end.degree, clock.wise, length.out = ncut1), rep(rou1, ncut1))) # d2 is from end.degree to start.degree d2 = NULL if(!is.null(rou2)) { # calculate the number of segments of the bottom arc l2 = as.radian(degree_diff(start.degree, end.degree, clock.wise)) * rou2 ncut2 = l2/ (2*pi/circos.par("unit.circle.segments")) ncut2 = floor(ncut2) ncut2 = ifelse(ncut2 < 2, 2, ncut2) d2 = rbind(d2, cbind(degree_seq(end.degree, start.degree, !clock.wise, length.out = ncut2), rep(rou2, ncut2))) } if(is.null(rou2)) { m1 = polar2Cartesian(d1) if(is.circular(start.degree, end.degree)) { # it is a circle m = m1 } else { m = rbind(m1, c(0, 0)) } # and shift to the center m[, 1] = m[, 1] + center[1] m[, 2] = m[, 2] + center[2] polygon(m, col = col, border = border, lwd = lwd, lty = lty) } else { m1 = polar2Cartesian(d1) m2 = polar2Cartesian(d2) if(is.circular(start.degree, end.degree)) { # a ring m = rbind(m1, m2[rev(seq_len(nrow(m2))), ,drop = FALSE]) m[, 1] = m[, 1] + center[1] m[, 2] = m[, 2] + center[2] polygon(m, col = col, border = NA, lwd = 0.1) # two borders #lines(m1[, 1]+center[1], m1[, 2]+center[2], col = "white", lwd = lwd, lty = 1) #lines(m2[, 1]+center[1], m2[, 2]+center[2], col = "white", lwd = lwd, lty = 1) lines(m1[, 1]+center[1], m1[, 2]+center[2], col = border, lwd = lwd, lty = lty) lines(m2[, 1]+center[1], m2[, 2]+center[2], col = border, lwd = lwd, lty = lty) } else { m = rbind(m1, m2) m[, 1] = m[, 1] + center[1] m[, 2] = m[, 2] + center[2] polygon(m, col = col, border = border, lwd = lwd, lty = lty) } } return(invisible(NULL)) } # == title # Highlight sectors and tracks # # == param # -sector.index A vector of sector index # -track.index A vector of track index that you want to highlight # -col Color for highlighting. Note the color should be semi-transparent. # -border Border of the highlighted region # -lwd Width of borders # -lty Style of borders # -padding Padding for the highlighted region. It should contain four values # representing ratios of the width or height of the highlighted region # -text text added in the highlight region, only support plotting one string at a time # -text.vjust adjustment on 'vertical' (radical) direction. Besides to set it as numeric values, # the value can also be a string contain absoute unit, e.g. "2.1mm", "-1 inche", but only # "mm", "cm", "inches"/"inche" are allowed. # -text.col color for the text # -... pass to `circos.text` # # == details # You can use `circos.info` to find out index for all sectors and all tracks. # # The function calls `draw.sector`. # # == seealso # https://jokergoo.github.io/circlize_book/book/graphics.html#highlight-sectors-and-tracks # # == example # sectors = letters[1:8] # circos.initialize(sectors, xlim = c(0, 1)) # for(i in 1:4) { # circos.trackPlotRegion(ylim = c(0, 1)) # } # circos.info(plot = TRUE) # # highlight.sector(c("a", "h"), track.index = 1) # highlight.sector("c", col = "#00FF0040") # highlight.sector("d", col = NA, border = "red", lwd = 2) # highlight.sector("e", col = "#0000FF40", track.index = c(2, 3)) # highlight.sector(c("f", "g"), col = NA, border = "green", # lwd = 2, track.index = c(2, 3)) # highlight.sector(sectors, col = "#FFFF0040", track.index = 4) # circos.clear() highlight.sector = function( sector.index, track.index = get.all.track.index(), col = "#FF000040", border = NA, lwd = par("lwd"), lty = par("lty"), padding = c(0, 0, 0, 0), text = NULL, text.col = par("col"), text.vjust = 0.5, ...) { sectors = get.all.sector.index() if(!all(sector.index %in% sectors)) { stop_wrap("`chr` contains index that does not beling to available sectors.") } tracks = get.all.track.index() if(!all(track.index %in% tracks)) { stop_wrap("`track.index` contains index that does not belong to available tracks.") } y_offset = NULL if(!is.numeric(text.vjust)) { y_offset = parse_unit(text.vjust) text.vjust = 0.5 } if(length(sector.index) == 1) { if(inherits(padding, "AsIs")) { padding2 = numeric(4) padding2[c(2, 4)] = padding[c(2, 4)]/diff(get.cell.meta.data("cell.xlim", sector.index = sector.index)) padding2[c(1, 3)] = padding[c(1, 3)]/diff(get.cell.meta.data("cell.ylim", sector.index = sector.index)) padding = padding2 } } if(inherits(padding, "AsIs")) { if(length(sector.index) > 1) { stop_wrap("`padding` can be set with I() only when there is one single sector with `sector.index`.") } } # if all sectors are selected if(length(setdiff(sectors, sector.index)) == 0) { track.index = sort(unique(track.index)) ts = continuousIndexSegment(track.index) for(i in seq_along(ts)) { track.index.vector = ts[[i]] start.degree = 0 end.degree = 360 rou1 = get.cell.meta.data("cell.top.radius", sectors[1], track.index.vector[1]) rou2 = get.cell.meta.data("cell.bottom.radius", sectors[1], track.index.vector[length(track.index.vector)]) d2 = rou1 - rou2 rou1 = rou1 + d2*padding[3] rou2 = rou2 - d2*padding[1] draw.sector(start.degree = start.degree, end.degree = end.degree, rou1 = rou1, rou2 = rou2, col = col, border = border, lwd = lwd, lty = lty) if(!is.null(text)) { # map to most recent cell pos = reverse.circlize((start.degree + end.degree)/2 + ifelse(start.degree < end.degree, 180, 0), (rou1 + rou2)/2) op_warning = circos.par("points.overflow.warning") circos.par("points.overflow.warning" = FALSE) if(is.null(y_offset)) { circos.text(pos[1,1], pos[1,2], text, adj = c(0.5, text.vjust), col = text.col, ...) } else { circos.text(pos[1,1], pos[1,2] + uy(y_offset[[1]], y_offset[[2]]), text, adj = c(0.5, 0.5), col = text.col, ...) } circos.par(points.overflow.warning = op_warning) } } } else { sector.numeric.index = which(sectors %in% sector.index) ss = continuousIndexSegment(sector.numeric.index, n = length(sectors), loop = TRUE) track.index = sort(unique(track.index)) ts = continuousIndexSegment(track.index) for(j in seq_along(ss)) { sector.index.vector = sectors[ ss[[j]] ] for(i in seq_along(ts)) { track.index.vector = ts[[i]] if(circos.par("clock.wise")) { start.degree = get.sector.data(sector.index.vector[1])["start.degree"] end.degree = get.sector.data(sector.index.vector[length(sector.index.vector)])["end.degree"] } else { end.degree = get.sector.data(sector.index.vector[1])["end.degree"] start.degree = get.sector.data(sector.index.vector[length(sector.index.vector)])["start.degree"] } rou1 = get.cell.meta.data("cell.top.radius", sector.index.vector[1], track.index.vector[1]) rou2 = get.cell.meta.data("cell.bottom.radius", sector.index.vector[1], track.index.vector[length(track.index.vector)]) d1 = abs(end.degree - start.degree) d2 = rou1 - rou2 start.degree = start.degree + d1*padding[2] end.degree = end.degree - d1*padding[4] rou1 = rou1 + d2*padding[3] rou2 = rou2 - d2*padding[1] draw.sector(start.degree = start.degree, end.degree = end.degree, rou1 = rou1, rou2 = rou2, col = col, border = border, lwd = lwd, lty = lty) if(!is.null(text)) { # map to most recent cell pos = reverse.circlize((start.degree + end.degree)/2 + ifelse(start.degree < end.degree, 180, 0), (rou1 + rou2)/2) op_warning = circos.par("points.overflow.warning") circos.par("points.overflow.warning" = FALSE) if(is.null(y_offset)) { circos.text(pos[1,1], pos[1,2], text, adj = c(0.5, text.vjust), col = text.col, ...) } else { circos.text(pos[1,1], pos[1,2] + uy(y_offset[[1]], y_offset[[2]]), text, adj = c(0.5, 0.5), col = text.col, ...) } circos.par(points.overflow.warning = op_warning) } } } } } parse_unit = function(str) { if(grepl("^(-?\\d+(\\.\\d+)?)\\s*(mm|cm|inche|inches)$", str)) { m = regexpr("^(-?\\d+(\\.\\d+)?)", str) v = regmatches(str, m) m = regexpr("(mm|cm|inche|inches)$", str) u = regmatches(str, m) return(list(value = as.numeric(v), unit = u)) } else { stop_wrap("Format of the unit is incorrect. It should be like '2mm', '-2.1 inches'.") } } # == title # Set gaps between tracks # # == param # -gap Gap between two tracks. Use `mm_h`/`cm_h`/`inches_h` to set in absolute units. # # == example # circos.initialize(letters[1:10], xlim = c(0, 1)) # circos.track(ylim = c(0, 1)) # set_track_gap(mm_h(2)) # circos.track(ylim = c(0, 1)) # circos.clear() set_track_gap = function(gap = 0.02) { circos.par$track.margin = c(0, gap) } circlize/R/circos.arrow.R0000644000176200001440000001525114121315207015015 0ustar liggesusers # == title # Draw arrow which is paralle to the circle # # == param # -x1 Start position of the arrow on the x-axis. # -x2 End position of the arrow on the x-axis. Note ``x2`` should be larger than ``x1``. The direction # of arrows can be controlled by ``arrow.position`` argument. # -y Position of the arrow on the y-axis. Note this is the center of the arrow on y-axis. # -width Width of the arrow body. # -sector.index Index of the sector. # -track.index Index of the track. # -arrow.head.length Length of the arrow head. Note the value should be smaller than the length of the arrow itself (which is ``x2 - x1``). # -arrow.head.width Width of the arrow head. # -arrow.position Where is the arrow head on the arrow. If you want to the arrow in the reversed direction, set this value to ``"start"``. # -tail The shape of the arrow tail (the opposite side of arrow head). # -border Border color of the arrow. # -col Filled color of the arrow. # -lty Line style of the arrow. # -... Pass to `graphics::polygon`. # # == details # Note all position values are measured in the data coordinate (the coordinate in each cell). For the values of # ``width``, ``arrow.head.Length``, ``arrow.head.width``, they can be set with `mm_y`/`cm_y`/`inches_y` in absolute units. # # If you see points overflow warnings, you can set ``circos.par(points.overflow.warning = FALSE)`` to turn it off. # # == seealso # https://jokergoo.github.io/circlize_book/book/graphics.html#circular-arrows # # == author # Zuguang Gu # # == example # op = par(no.readonly = TRUE) # par(mfrow = c(1, 2)) # circos.initialize(letters[1:4], xlim = c(0, 1)) # col = rand_color(4) # tail = c("point", "normal", "point", "normal") # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # circos.arrow(x1 = 0, x2 = 1, y = 0.5, width = 0.4, # arrow.head.width = 0.6, arrow.head.length = cm_x(1), # col = col[CELL_META$sector.numeric.index], # tail = tail[CELL_META$sector.numeric.index]) # }, bg.border = NA, track.height = 0.4) # circos.clear() # # circos.initialize(letters[1:4], xlim = c(0, 1)) # tail = c("point", "normal", "point", "normal") # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # circos.arrow(x1 = 0, x2 = 1, y = 0.5, width = 0.4, # arrow.head.width = 0.6, arrow.head.length = cm_x(1), # col = col[CELL_META$sector.numeric.index], # tail = tail[CELL_META$sector.numeric.index], # arrow.position = "start") # }, bg.border = NA, track.height = 0.4) # par(op) # # ########## cell cycle ########### # cell_cycle = data.frame(phase = factor(c("G1", "S", "G2", "M"), # levels = c("G1", "S", "G2", "M")), # hour = c(11, 8, 4, 1)) # color = c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3") # circos.par(start.degree = 90) # circos.initialize(cell_cycle$phase, xlim = cbind(rep(0, 4), cell_cycle$hour)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # circos.arrow(CELL_META$xlim[1], CELL_META$xlim[2], # arrow.head.width = CELL_META$yrange*0.8, arrow.head.length = cm_x(1), # col = color[CELL_META$sector.numeric.index]) # circos.text(CELL_META$xcenter, CELL_META$ycenter, CELL_META$sector.index, # facing = "downward") # }, bg.border = NA, track.height = 0.3) # circos.clear() # circos.arrow = function( x1, x2, y = get.cell.meta.data("ycenter"), width = get.cell.meta.data("yrange")/2, sector.index = get.current.sector.index(), track.index = get.current.track.index(), arrow.head.length = mm_x(5), arrow.head.width = width*2, arrow.position = c("end", "start"), tail = c("normal", "point"), border = "black", col = "#FFCCCC", lty = par("lty"), ...) { arrow.position = match.arg(arrow.position)[1] tail = match.arg(tail)[1] set.current.cell(sector.index, track.index) if(circos.par$ring) { if(x1 > x2) x1 = x1 - get.cell.meta.data("xrange", sector.index, track.index) } else { if(x2 <= x1) { # stop_wrap("`x2` should be larger than `x1`. Set `arrow.position = 'start'` to get reverse clockwise arrows.") x3 = x1 x1 = x2 x2 = x3 arrow.position = setdiff(c("end", "start"), arrow.position) } } if(abs(x2 - x1 - arrow.head.length) < 1e-6) { stop_wrap("Arrow head is too long that it is even longer than the arrow itself.") } if(arrow.position == "end") { arrow.head.coor = rbind(c(x2 - arrow.head.length, y + arrow.head.width/2), c(x2, y), c(x2 - arrow.head.length, y - arrow.head.width/2)) if(tail == "normal") { arrow.body.coor = rbind(c(x2 - arrow.head.length, y - width/2), c(x1, y - width/2), c(x1, y + width/2), c(x2 - arrow.head.length, y + width/2)) arrow.body.coor2 = rbind(lines.expand(arrow.body.coor[1:2, 1], arrow.body.coor[1:2, 2], sector.index, track.index), lines.expand(arrow.body.coor[3:4, 1], arrow.body.coor[3:4, 2], sector.index, track.index)) } else { arrow.body.coor = rbind(c(x2 - arrow.head.length, y - width/2), c(x1, y), c(x2 - arrow.head.length, y + width/2)) arrow.body.coor2 = rbind(lines.expand(arrow.body.coor[1:2, 1], arrow.body.coor[1:2, 2], sector.index, track.index), lines.expand(arrow.body.coor[2:3, 1], arrow.body.coor[2:3, 2], sector.index, track.index)) } coor = rbind(arrow.body.coor2, arrow.head.coor) } else { arrow.head.coor = rbind(c(x1 + arrow.head.length, y + arrow.head.width/2), c(x1, y), c(x1 + arrow.head.length, y - arrow.head.width/2)) if(tail == "normal") { arrow.body.coor = rbind(c(x1 + arrow.head.length, y - width/2), c(x2, y - width/2), c(x2, y + width/2), c(x1 + arrow.head.length, y + width/2)) arrow.body.coor2 = rbind(lines.expand(arrow.body.coor[1:2, 1], arrow.body.coor[1:2, 2], sector.index, track.index), lines.expand(arrow.body.coor[3:4, 1], arrow.body.coor[3:4, 2], sector.index, track.index)) } else { arrow.body.coor = rbind(c(x1 + arrow.head.length, y - width/2), c(x2, y), c(x1 + arrow.head.length, y + width/2)) arrow.body.coor2 = rbind(lines.expand(arrow.body.coor[1:2, 1], arrow.body.coor[1:2, 2], sector.index, track.index), lines.expand(arrow.body.coor[2:3, 1], arrow.body.coor[2:3, 2], sector.index, track.index)) } coor = rbind(arrow.body.coor2, arrow.head.coor) } coor = rbind(coor, coor[1, ]) d2 = circlize(coor[, 1], coor[, 2], sector.index, track.index) polygon(polar2Cartesian(d2), border = border, col = col, lty = lty, ...) } circlize/R/raster.R0000644000176200001440000002206214015721224013702 0ustar liggesusers # == title # Add raster images # # == param # -image A ``raster`` object, or an object that can be converted by `grDevices::as.raster`. # -x Position of the center of the raster image, measued in the data coordinate in the cell. # -y Position of the center of the raster image, measued in the data coordinate in the cell. # -width Width of the raster image. When ``facing`` is one of "inside", "outside", "clockwise" # and "reverse.clockwise", the image should have absolute size where the value of ``width`` # should be specified like ``20mm``, ``1cm`` or ``0.5inche``. When ``facing`` is one of # ``bending.inside`` and ``bending.outside``, the value of ``width`` is measured in the data # coordinate in the cell. # -height Height of the raster image. Same format as ``width``. If the value of ``height`` is omit, # default height is calculated by taking the aspect ratio of the original image. But when # ``facing`` is one of ``bending.inside`` and ``bending.outside``, ``height`` is mandatory to set. # -facing Facing of the raster image. # -niceFacing Facing of text. Please refer to vignette for different settings. # -sector.index Index for the sector. # -track.index Index for the track. # -scaling Scaling factor to resize the raster image. # # == seealso # https://jokergoo.github.io/circlize_book/book/graphics.html#raster-image # # == example # require(png) # image = system.file("extdata", "Rlogo.png", package = "circlize") # image = as.raster(readPNG(image)) # circos.initialize(letters[1:8], xlim = c(0, 1)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # circos.raster(image, CELL_META$xcenter, CELL_META$ycenter, width = "2cm", # facing = "inside", niceFacing = TRUE) # }) # circos.clear() # # if(FALSE) { # # NOTE: following takes quite a long time to run # load(system.file("extdata", "doodle.RData", package = "circlize")) # circos.par("cell.padding" = c(0, 0, 0, 0)) # circos.initialize(letters[1:16], xlim = c(0, 1)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # img = img_list[[CELL_META$sector.numeric.index]] # circos.raster(img, CELL_META$xcenter, CELL_META$ycenter, width = 1, # height = 1, facing = "bending.inside") # }, track.height = 0.25, bg.border = NA) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # img = img_list[[CELL_META$sector.numeric.index + 16]] # circos.raster(img, CELL_META$xcenter, CELL_META$ycenter, width = 1, # height = 1, facing = "bending.inside") # }, track.height = 0.25, bg.border = NA) # circos.clear() # } circos.raster = function( image, x, y, width, height, facing = c("inside", "outside", "reverse.clockwise", "clockwise", "downward", "bending.inside", "bending.outside"), niceFacing = FALSE, sector.index = get.current.sector.index(), track.index = get.current.track.index(), scaling = 1) { # convert image to raster class if(!inherits(image, "raster")) { image = as.raster(image) } asp = dim(image)[1]/dim(image)[2] facing = match.arg(facing) if(facing %in% c("bending.inside", "bending.outside")) { if(niceFacing) { degree = circlize(x, y, sector.index = sector.index, track.index = track.index)[, 1] degree = degree %% 360 if(degree > 180 & degree < 360) { if(facing == "bending.inside") { facing = "bending.outside" } else { facing = "bending.inside" } } } pin = par("pin") usr = par("usr") pt_per_inche1 = (usr[2] - usr[1])/pin[1] xplot = get.cell.meta.data("xplot", sector.index = sector.index, track.index = track.index) cell.xlim = get.cell.meta.data("cell.xlim", sector.index = sector.index, track.index = track.index) width_in_degree = width/(cell.xlim[2] - cell.xlim[1]) * ((xplot[1] - xplot[2]) %% 360) yplot = get.cell.meta.data("yplot", sector.index = sector.index, track.index = track.index) cell.ylim = get.cell.meta.data("cell.ylim", sector.index = sector.index, track.index = track.index) height_in_native = height/(cell.ylim[2] - cell.ylim[1]) * (yplot[2] - yplot[1]) r = yplot[1] + (y - cell.ylim[1])/(cell.ylim[2] - cell.ylim[1]) * (yplot[2] - yplot[1]) width_in_native = as.radian(width_in_degree)*r width_in_px = round(width_in_native/pt_per_inche1*96) height_in_px = round(height_in_native/pt_per_inche1*96) # resize according to the size on the image image = resize_image(image, w = ncol(image)*scaling, h = nrow(image)*scaling) # make circular rectangles xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index) ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) nr = nrow(image) nc = ncol(image) row_index = rep(1:nr, nc) col_index = rep(1:nc, each = nr) if(facing == "bending.inside") { yv = 1 - (row_index - 0.5)/nr xv = (col_index - 0.5)/nc } else { yv = (row_index - 0.5)/nr xv = 1 - (col_index - 0.5)/nc } xv = x - width/2 + xv*width yv = y - height/2 + yv*height l = !grepl("^#FFFFFF00", image) op = circos.par("points.overflow.warning") circos.par(points.overflow.warning = FALSE) circos.rect(xv[l] - width/nc/2, yv[l] - height/nr/2, xv[l] + width/nc/2, yv[l] + height/nr/2, col = image[l], border = image[l], sector.index = sector.index, track.index = track.index) circos.par(points.overflow.warning = op) } else { if(missing(width) && missing(height)) { stop_wrap("at least one of `width` and `height` should be specified") } if(!missing(width)) { width_lt = parse_unit(width) width = width_lt$value width_unit = width_lt$unit width_in_px = switch(width_unit, mm = width*3.7795275591, cm = width*37.795275591, inche = width*96 ) width_in_px = round(width_in_px) width_in_native = convert_length(width, width_unit) } if(!missing(height)) { height_lt = parse_unit(height) height = height_lt$value height_unit = height_lt$unit height_in_px = switch(width_unit, mm = height*3.7795275591, cm = height*37.795275591, inche = height*96 ) height_in_px = round(height_in_px) height_in_native = convert_length(height, height_unit) } if(missing(width)) { width_in_px = round(height_in_px*asp) width_in_native = width_in_native*asp } if(missing(height)) { height_in_px = round(width_in_px/asp) height_in_native = width_in_native*asp } df1 = circlize(x, y, sector.index = sector.index, track.index = track.index) df2 = polar2Cartesian(df1) x0 = df2[1, 1] y0 = df2[1, 2] # resize accoring to the width and height image = resize_image(image, w = ncol(image)*scaling, h = nrow(image)*scaling) coor_mat = cbind(c(x0 - width_in_native/2, y0 - height_in_native/2), c(x0 - width_in_native/2, y0 + height_in_native/2), c(x0 + width_in_native/2, y0 + height_in_native/2), c(x0 + width_in_native/2, y0 - height_in_native/2)) # polygon(coor_mat[1, ], coor_mat[2, ], border = "red") if(facing %in% c("downward")) { rasterImage(image, coor_mat[1, 1], coor_mat[2, 1], coor_mat[1, 3], coor_mat[2, 3]) } else { if(niceFacing) { degree = circlize(x, y, sector.index = sector.index, track.index = track.index)[, 1] degree = degree %% 360 if(facing %in% c("inside", "outside")) { if(degree > 180 & degree < 360) { if(facing == "inside") { facing = "outside" } else { facing = "inside" } } } else { if(facing == "clockwise") { if(degree > 90 & degree < 270) { facing = "reverse.clockwise" } } else if(facing == "reverse.clockwise") { if(degree < 90 | degree > 270) { facing = "clockwise" } } } } # rotate the rectangle, and find the coordiante of the left bottom angle and top right angle if(facing == "inside") { theta = df1[1, 1] - 90 } else if(facing == "outside") { theta = df1[1, 1] - 90 + 180 } else if(facing == "clockwise") { theta = df1[1, 1] } else if(facing == "reverse.clockwise") { theta = df1[1, 1] + 180 } offset_x = mean(coor_mat[1, ]) offset_y = mean(coor_mat[2, ]) coor_mat[1, ] = coor_mat[1, ] - offset_x coor_mat[2, ] = coor_mat[2, ] - offset_y # polygon(coor_mat[1, ], coor_mat[2, ], border = "blue") rot_mat = cbind(c( cos(as.radian(theta)), sin(as.radian(theta))), c(-sin(as.radian(theta)), cos(as.radian(theta)))) coor_mat = rot_mat %*% coor_mat coor_mat[1, ] = coor_mat[1, ] + offset_x coor_mat[2, ] = coor_mat[2, ] + offset_y # polygon(coor_mat[1, ], coor_mat[2, ], border = "green") rasterImage(image, coor_mat[1, 1], coor_mat[2, 1], coor_mat[1, 1] + width_in_native, coor_mat[2, 1] + height_in_native, angle = theta) # points(coor_mat[1, 1], coor_mat[2, 1], pch = 16, col = "red") } } } resize_image = function(m, w, h = round(w*(ncol(m)/nrow(m)))) { w0 = nrow(m) h0 = ncol(m) w_ratio = w0/w h_ratio = h0/h # Do resizing -- select appropriate indices if(length(dim(m)) == 2) { out = m[ ceiling(w_ratio* 1:w), ceiling(h_ratio* 1:h)] } else { out = m[ ceiling(w_ratio* 1:w), ceiling(h_ratio* 1:h), , drop = FALSE] } return(out) } circlize/R/overview.R0000755000176200001440000000410714015721224014253 0ustar liggesusers # == title (package:circlize) # Circular visualization in R # # == details # # This package aims to implement circular layout in R. # # Since most of the figures are composed of points, lines and polygons, # we just need to implement low-level functions for drawing points, lines and polygons. # # Current there are following low-level graphic functions: # # - `circos.points` # - `circos.lines` # - `circos.rect` # - `circos.polygon` # - `circos.segments` # - `circos.text` # - `circos.axis`, `circos.xaxis`, `circos.yaxis` # - `circos.barplot` # - `circos.boxplot` # - `circos.violin` # - `circos.link` # # For drawing points, lines and text through the whole track (among several sectors), the following # functions are available: # # - `circos.trackPoints` # - `circos.trackLines` # - `circos.trackText` # # Draw circular heatmaps # # - `circos.heatmap` # # Functions to arrange circular layout: # # - `circos.initialize` # - `circos.track` # - `circos.nested` # - `circos.update` # - `circos.par` # - `circos.info` # - `circos.clear` # # Theoretically, you are able to draw most kinds of circular plots by the above functions. # # For specific use in genomics, we also implement functions which add graphics in genome scale. # # Functions to initialize circos plot with genomic coordinates: # # - `circos.initializeWithIdeogram` # - `circos.genomicInitialize` # # Functions to arrange genomic circular layout: # # - `circos.genomicTrack` # # Functions to add basic graphics in genomic scale: # # - `circos.genomicPoints` # - `circos.genomicLines` # - `circos.genomicText` # - `circos.genomicRect` # - `circos.genomicLink` # # Functions with specific purpose: # # - `circos.genomicDensity` # - `circos.genomicRainfall` # - `circos.genomicIdeogram` # - `circos.genomicHeatmap` # - `circos.genomicLabels` # # Finally, function that draws Chord diagram: # # - `chordDiagram` # # Please refer to the vignettes (https://jokergoo.github.io/circlize_book/book/ ) to find out how to draw basic and advanced circular plots by this package. # circlize/R/link.R0000755000176200001440000007413214236425075013361 0ustar liggesusers # == title # Draw links between points or/and intervals # # == param # -sector.index1 Index for the first sector where one link end locates # -point1 A single value or a numeric vector of length 2. If it is a 2-elements vector, then # the link would be a belt/ribbon. # -sector.index2 Index for the other sector where the other link end locates # -point2 A single value or a numeric vector of length 2. If it is a 2-elements vector, then # the link would be a belt/ribbon. # -rou The position of the the link ends (if ``rou1`` and ``rou2`` are not set). It is the percentage of the radius of the unit circle. # By default its value is the position of bottom margin of the most inner track. # -rou1 The position of end 1 of the link. # -rou2 The position of end 2 of the link. # -h Height of the link, measured as percent to the radius to the unit circle. By default it is automatically infered. # -h.ratio systematically change the link height. The value is between 0 and 1. # -w Since the link is a Bezier curve, it controls the shape of Bezier curve. # -h2 Height of the bottom edge of the link if it is a ribbon. # -w2 Shape of the bottom edge of the link if it is a ribbon. # -inverse Whether the link is inversed. # -col Color of the link. If the link is a ribbon, then it is the filled color for the ribbon. # -lwd Line (or border) width # -lty Line (or border) style # -border If the link is a ribbon, then it is the color for the ribbon border. # -directional 0 for no direction, 1 for direction from ``point1`` to ``point2``, -1 for direction from ``point2`` to ``point1``. # 2 for two directional. The direction is important when arrow heads are added. # -arr.width Width of the arrows, pass to `shape::Arrowhead`. # -arr.type Type of the arrows, pass to `shape::Arrowhead`. Default value is ``triangle``. There is an additional option # ``big.arrow``. # -arr.length Length of the arrows, measured in 'cm', pass to `shape::Arrowhead`. If ``arr.type`` is set to ``big.arrow``, # the value is percent to the radius of the unit circle. # -arr.col Color of the arrows, pass to `shape::Arrowhead`. # -arr.lwd Line width of arrows, pass to `shape::Arrowhead`. # -arr.lty Line type of arrows, pass to `shape::Arrowhead`. # -reduce_to_mid_line Only use the middle points of ``point1`` and ``point2`` to draw the link. # # == details # Links are implemented as quadratic Bezier curves (https://en.wikipedia.org/wiki/B\%C3\%A9zier_curve#Rational_B.C3.A9zier_curves ). # # Drawing links does not create any track. So you can think it is independent of the tracks. # # By default you only need to set ``sector.index1``, ``point1``, ``sector.index2`` and ``point2``. The # links would look nice. # # Please refer to the vignette for detailed explanation. # # == seealso # https://jokergoo.github.io/circlize_book/book/graphics.html#links # circos.link = function( sector.index1, point1, sector.index2, point2, rou = get_most_inside_radius(), rou1 = rou, rou2 = rou, h = NULL, h.ratio = 0.5, w = 1, h2 = h, w2 = w, inverse = FALSE, col = "black", lwd = par("lwd"), lty = par("lty"), border = col, directional = 0, arr.length = ifelse(arr.type == "big.arrow", 0.02, 0.4), arr.width = arr.length/2, arr.type = "triangle", arr.lty = lty, arr.lwd = lwd, arr.col = col, reduce_to_mid_line = FALSE) { sector.data1 = get.sector.data(sector.index1) sector.data2 = get.sector.data(sector.index2) if(is.data.frame(point1)) { point1 = unlist(point1) } if(is.data.frame(point2)) { point2 = unlist(point2) } if(circos.par$ring) { if(length(point1) == 2) { if(point1[1] > point1[2]) { point1[1] = point1[1] - diff(get.sector.data()[c("min.value", "max.value")]) } } if(length(point2) == 2) { if(point2[1] > point2[2]) { point2[1] = point2[1] - diff(get.sector.data()[c("min.value", "max.value")]) } } } point1 = sort(point1) point2 = sort(point2) rg1 = sector.data1["max.data"] - sector.data1["min.data"] if(min(point1) < sector.data1["min.data"] - rg1*1e-6 || max(point1) > sector.data1["max.data"] + rg1*1e-6) { message_wrap(paste0("Note: The first link end is drawn out of sector '", sector.index1, "'.")) } rg2 = sector.data2["max.data"] - sector.data2["min.data"] if(min(point2) < sector.data2["min.data"] - rg2*1e-6 || max(point2) > sector.data2["max.data"] + rg2*1e-6) { message_wrap(paste0("Note: The second link end is drawn out of sector '", sector.index2, "'.")) } if(reduce_to_mid_line) { point1 = mean(point1) point2 = mean(point2) } if(length(point1) == 1 && length(point2) == 1) { # single line theta1 = circlize(point1, 0, sector.index = sector.index1, track.index = 0)[1, "theta"] theta2 = circlize(point2, 0, sector.index = sector.index2, track.index = 0)[1, "theta"] d = getQuadraticPoints(theta1, theta2, rou1, rou2, h = h, h.ratio = h.ratio, w = w) nr = nrow(d) # if(directional == 0) { lines(d, col = col, lwd = lwd, lty = lty, lend = "butt") # } else if(directional == 1) { # lines(d[-nr, , drop = FALSE], col = col, lwd = lwd, lty = lty, lend = "butt") # } else if(directional == -1) { # lines(d[-1, , drop = FALSE], col = col, lwd = lwd, lty = lty, lend = "butt") # } else if(directional == 2) { # lines(d[-c(1, nr), , drop = FALSE], col = col, lwd = lwd, lty = lty, lend = "butt") # } if(nrow(d) > 1) { if(directional %in% c(1,2)) { # point1 to point2 alpha = line_degree(d[nr-1, 1], d[nr-1, 2], d[nr, 1], d[nr, 2]) oljoin = par("ljoin") par(ljoin = "mitre") Arrowhead(d[nr, 1], d[nr, 2], alpha, arr.length = arr.length, arr.width = arr.width, arr.adj = 1, arr.lwd = 0.1, arr.type = arr.type, arr.col = col, lcol = col) par(ljoin = oljoin) } if(directional %in% c(-1,2)) { # point2 to point2 alpha = line_degree(d[2, 1], d[2, 2], d[1, 1], d[1,2]) oljoin = par("ljoin") par(ljoin = "mitre") Arrowhead(d[1, 1], d[1, 2], alpha, arr.length = arr.length, arr.width = arr.width, arr.adj = 1, arr.lwd = 0.1, arr.type = arr.type, arr.col = col, lcol = col) par(ljoin = oljoin) } } } else if(length(point1) == 1) { theta1 = circlize(point1, 0, sector.index = sector.index1, track.index = 0)[1, "theta"] theta21 = circlize(point2[1], 0, sector.index = sector.index2, track.index = 0)[1, "theta"] theta22 = circlize(point2[2], 0, sector.index = sector.index2, track.index = 0)[1, "theta"] if(degreeDiff2(theta1, theta21) <= degreeDiff(theta22, theta21) & degreeDiff2(theta22, theta1) <= degreeDiff(theta22, theta21)) { d = getQuadraticPoints(theta22, theta21, max(rou1,rou2), max(rou1,rou2), h = h, h.ratio = h.ratio, w = w) r = arc.points(theta22, theta21, rou2) d = rbind(d, revMat(r)) polygon(d, col = col, lty = lty, lwd = lwd, border = border) } else { if(degreeDiff(theta1, theta21) > degreeDiff(theta1, theta22)) { d1 = getQuadraticPoints(theta1, theta21, rou1, rou2, h = h, h.ratio = h.ratio, w = w) d2 = getQuadraticPoints(theta1, theta22, rou1, rou2, h = h2, h.ratio = h.ratio, w = w2) d1x = getQuadraticPoints(theta1, theta21, rou1, rou2 - arr.length, h = h, h.ratio = h.ratio, w = w) d2x = getQuadraticPoints(theta1, theta22, rou1, rou2 - arr.length, h = h2, h.ratio = h.ratio, w = w2) dcenter = getQuadraticPoints(theta1, (theta21 + theta22)/2, rou1, rou2, h = (h+h2)/2, h.ratio = h.ratio, w = (w+w2)/2) } else { d1 = getQuadraticPoints(theta1, theta21, rou1, rou2, h = h2, h.ratio = h.ratio, w = w2) d2 = getQuadraticPoints(theta1, theta22, rou1, rou2, h = h, h.ratio = h.ratio, w = w) d1x = getQuadraticPoints(theta1, theta21, rou1, rou2 - arr.length, h = h2, h.ratio = h.ratio, w = w2) d2x = getQuadraticPoints(theta1, theta22, rou1, rou2 - arr.length, h = h, h.ratio = h.ratio, w = w) dcenter = getQuadraticPoints(theta1, (theta21 + theta22)/2, rou1, rou2, h = (h+h2)/2, h.ratio = h.ratio, w = (w+w2)/2) } r2 = arc.points(theta22, theta21, rou2) if(arr.type == "big.arrow" && directional == 1) { # if(nrow(r2) %% 2 == 1) { # r2 = r2[ceiling(nrow(r2)/2), , drop = FALSE] # } else { # r2 = colMeans(r2[c(nrow(r2)/2, nrow(r2)/2+1), , drop = FALSE]) # } r2 = arc.midpoint(theta22, theta21, rou2) d = rbind(d1x, revMat(r2)) d = rbind(d, revMat(d2x)) } else { d = rbind(d1, revMat(r2)) d = rbind(d, revMat(d2)) } polygon(d, col = col, lty = lty, lwd = lwd, border = border) if(nrow(dcenter) > 1 & arr.type != "big.arrow") { nr = nrow(dcenter) if(directional == 1) { lines(dcenter[-nr, , drop = FALSE], col = arr.col, lwd = arr.lwd, lty = arr.lty, lend = "butt") } else if(directional == -1) { lines(dcenter[-1, , drop = FALSE], col = arr.col, lwd = arr.lwd, lty = arr.lty, lend = "butt") } else if(directional == 2) { lines(dcenter[-c(1, nr), , drop = FALSE], col = arr.col, lwd = arr.lwd, lty = arr.lty, lend = "butt") } if(directional %in% c(1, 2)) { # point1 to point2 alpha = line_degree(dcenter[nr-1, 1], dcenter[nr-1, 2], dcenter[nr, 1], dcenter[nr, 2]) oljoin = par("ljoin") par(ljoin = "mitre") Arrowhead(dcenter[nr, 1], dcenter[nr, 2], alpha, arr.length = arr.length, arr.width = arr.width, arr.adj = 1, arr.lwd = 0.1, arr.type = arr.type, arr.col = arr.col, lcol = arr.col) par(ljoin = oljoin) } if(directional %in% c(-1,2)) { # point2 to point1 alpha = line_degree(dcenter[2, 1], dcenter[2, 2], dcenter[1, 1], dcenter[1,2]) oljoin = par("ljoin") par(ljoin = "mitre") Arrowhead(dcenter[1, 1], dcenter[1, 2], alpha, arr.length = arr.length, arr.width = arr.width, arr.adj = 1, arr.lwd = 0.1, arr.type = arr.type, arr.col = arr.col, lcol = arr.col) par(ljoin = oljoin) } } } } else if(length(point2) == 1) { theta2 = circlize(point2, 0, sector.index = sector.index2, track.index = 0)[1, "theta"] theta11 = circlize(point1[1], 0, sector.index = sector.index1, track.index = 0)[1, "theta"] theta12 = circlize(point1[2], 0, sector.index = sector.index1, track.index = 0)[1, "theta"] if(degreeDiff2(theta2, theta11) <= degreeDiff2(theta12, theta11) & degreeDiff2(theta12, theta2) <= degreeDiff2(theta12, theta11)) { d = getQuadraticPoints(theta12, theta11, max(rou1,rou2), max(rou1,rou2), h = h, h.ratio = h.ratio, w = w) r = arc.points(theta12, theta11, rou1) d = rbind(d, revMat(r)) polygon(d, col = col, lty = lty, lwd = lwd, border = border) } else { if(degreeDiff(theta2, theta11) > degreeDiff(theta2, theta12)) { d1 = getQuadraticPoints(theta11, theta2, rou1, rou2, h = h, h.ratio = h.ratio, w = w) d2 = getQuadraticPoints(theta12, theta2, rou1, rou2, h = h2, h.ratio = h.ratio, w = w2) d1x = getQuadraticPoints(theta11, theta2, rou1 - arr.length, rou2, h = h, h.ratio = h.ratio, w = w) d2x = getQuadraticPoints(theta12, theta2, rou1 - arr.length, rou2, h = h2, h.ratio = h.ratio, w = w2) dcenter = getQuadraticPoints((theta11 + theta12)/2, theta2, rou1, rou2, h = (h+h2)/2, h.ratio = h.ratio, w = (w+w2)/2) } else { d1 = getQuadraticPoints(theta11, theta2, rou1, rou2, h = h2, h.ratio = h.ratio, w = w2) d2 = getQuadraticPoints(theta12, theta2, rou1, rou2, h = h, h.ratio = h.ratio, w = w) d1x = getQuadraticPoints(theta11, theta2, rou1 - arr.length, rou2, h = h2, h.ratio = h.ratio, w = w2) d2x = getQuadraticPoints(theta12, theta2, rou1 - arr.length, rou2, h = h, h.ratio = h.ratio, w = w) dcenter = getQuadraticPoints((theta11 + theta12)/2, theta2, rou1, rou2, h = (h+h2)/2, h.ratio = h.ratio, w = (w+w2)/2) } r1 = arc.points(theta12, theta11, rou1) if(arr.type == "big.arrow" && directional == -1) { # if(nrow(r1) %% 2 == 1) { # r1 = r1[ceiling(nrow(r1)/2), , drop = FALSE] # } else { # r1 = colMeans(r1[c(nrow(r1)/2, nrow(r1)/2+1), , drop = FALSE]) # } r1 = arc.midpoint(theta12, theta11, rou1) d = rbind(revMat(d1x), revMat(r1)) d = rbind(d, d2x) } else { d = rbind(revMat(d1), revMat(r1)) d = rbind(d, d2) } polygon(d, col = col, lty = lty, lwd = lwd, border = border) if(nrow(dcenter) > 1 && arr.type != "big.arrow") { nr = nrow(dcenter) if(directional == 1) { lines(dcenter[-nr, , drop = FALSE], col = arr.col, lwd = arr.lwd, lty = arr.lty, lend = "butt") } else if(directional == -1) { lines(dcenter[-1, , drop = FALSE], col = arr.col, lwd = arr.lwd, lty = arr.lty, lend = "butt") } else if(directional == 2) { lines(dcenter[-c(1, nr), , drop = FALSE], col = arr.col, lwd = arr.lwd, lty = arr.lty, lend = "butt") } if(directional %in% c(1,2)) { # point1 to point2 alpha = line_degree(dcenter[nr-1, 1], dcenter[nr-1, 2], dcenter[nr, 1], dcenter[nr, 2]) oljoin = par("ljoin") par(ljoin = "mitre") Arrowhead(dcenter[nr, 1], dcenter[nr, 2], alpha, arr.length = arr.length, arr.width = arr.width, arr.adj = 1, arr.lwd = 0.1, arr.type = arr.type, arr.col = arr.col, lcol = arr.col) par(ljoin = oljoin) } if(directional %in% c(-1,2)) { # point2 to point1 alpha = line_degree(dcenter[2, 1], dcenter[2, 2], dcenter[1, 1], dcenter[1,2]) oljoin = par("ljoin") par(ljoin = "mitre") Arrowhead(dcenter[1, 1], dcenter[1, 2], alpha, arr.length = arr.length, arr.width = arr.width, arr.adj = 1, arr.lwd = 0.1, arr.type = arr.type, arr.col = arr.col, lcol = arr.col) par(ljoin = oljoin) } } } } else { theta11 = circlize(point1[1], 0, sector.index = sector.index1, track.index = 0)[1, "theta"] theta12 = circlize(point1[2], 0, sector.index = sector.index1, track.index = 0)[1, "theta"] theta21 = circlize(point2[1], 0, sector.index = sector.index2, track.index = 0)[1, "theta"] theta22 = circlize(point2[2], 0, sector.index = sector.index2, track.index = 0)[1, "theta"] if(degreeDiff2(theta12, theta21) <= degreeDiff2(theta22, theta21) + degreeDiff2(theta12, theta11) & degreeDiff2(theta12, theta21) >= degreeDiff2(theta22, theta11) && abs(rou1 - rou2) < 1e-5) { d = getQuadraticPoints(theta12, theta21, max(rou1,rou2), max(rou1,rou2), h = h, h.ratio = h.ratio, w = w) r = arc.points(theta12, theta21, max(rou1,rou2)) d = rbind(d, revMat(r)) polygon(d, col = col, lty = lty, lwd = lwd, border = border) } else if(degreeDiff2(theta22, theta11) <= degreeDiff2(theta12, theta11) + degreeDiff2(theta22, theta21) & degreeDiff2(theta22, theta11) >= degreeDiff2(theta12, theta21) && abs(rou1 - rou2) < 1e-5) { d = getQuadraticPoints(theta22, theta11, max(rou1,rou2), max(rou1,rou2), h = h, h.ratio = h.ratio, w = w) r = arc.points(theta22, theta11, max(rou1,rou2)) d = rbind(d, revMat(r)) polygon(d, col = col, lty = lty, lwd = lwd, border = border) } else { if(degreeDiff(theta11, theta22) > degreeDiff(theta12, theta21)) { if(inverse) { d1 = getQuadraticPoints(theta11, theta21, rou1, rou2, h = h, h.ratio = h.ratio, w = w) d2 = getQuadraticPoints(theta12, theta22, rou1, rou2, h = h, h.ratio = h.ratio, w = w) } else { d1 = getQuadraticPoints(theta11, theta22, rou1, rou2, h = h, h.ratio = h.ratio, w = w) d2 = getQuadraticPoints(theta12, theta21, rou1, rou2, h = h2, h.ratio = h.ratio, w = w2) } if(directional == 1) { if(inverse) { d1x = getQuadraticPoints(theta11, theta21, rou1, rou2 - arr.length, h = h, h.ratio = h.ratio, w = w) d2x = getQuadraticPoints(theta12, theta22, rou1, rou2 - arr.length, h = h, h.ratio = h.ratio, w = w) } else { d1x = getQuadraticPoints(theta11, theta22, rou1, rou2 - arr.length, h = h, h.ratio = h.ratio, w = w) d2x = getQuadraticPoints(theta12, theta21, rou1, rou2 - arr.length, h = h2, h.ratio = h.ratio, w = w2) } } else if(directional == -1) { if(inverse) { d1x = getQuadraticPoints(theta11, theta21, rou1 - arr.length, rou2, h = h, h.ratio = h.ratio, w = w) d2x = getQuadraticPoints(theta12, theta22, rou1 - arr.length, rou2, h = h, h.ratio = h.ratio, w = w) } else { d1x = getQuadraticPoints(theta11, theta22, rou1 - arr.length, rou2, h = h, h.ratio = h.ratio, w = w) d2x = getQuadraticPoints(theta12, theta21, rou1 - arr.length, rou2, h = h2, h.ratio = h.ratio, w = w2) } } dcenter = getQuadraticPoints((theta11 + theta12)/2, (theta21 + theta22)/2, rou1, rou2, h = (h+h2)/2, h.ratio = h.ratio, w = (w+w2)/2) } else { if(inverse) { d1 = getQuadraticPoints(theta11, theta21, rou1, rou2, h = h, h.ratio = h.ratio, w = w) d2 = getQuadraticPoints(theta12, theta22, rou1, rou2, h = h, h.ratio = h.ratio, w = w) } else { d1 = getQuadraticPoints(theta11, theta22, rou1, rou2, h = h2, h.ratio = h.ratio, w = w2) d2 = getQuadraticPoints(theta12, theta21, rou1, rou2, h = h, h.ratio = h.ratio, w = w) } if(directional == 1) { if(inverse) { d1x = getQuadraticPoints(theta11, theta21, rou1, rou2 - arr.length, h = h, h.ratio = h.ratio, w = w) d2x = getQuadraticPoints(theta12, theta22, rou1, rou2 - arr.length, h = h, h.ratio = h.ratio, w = w) } else { d1x = getQuadraticPoints(theta11, theta22, rou1, rou2 - arr.length, h = h2, h.ratio = h.ratio, w = w2) d2x = getQuadraticPoints(theta12, theta21, rou1, rou2 - arr.length, h = h, h.ratio = h.ratio, w = w) } } else if(directional == -1) { if(inverse) { d1x = getQuadraticPoints(theta11, theta21, rou1 - arr.length, rou2, h = h, h.ratio = h.ratio, w = w) d2x = getQuadraticPoints(theta12, theta22, rou1 - arr.length, rou2, h = h, h.ratio = h.ratio, w = w) } else { d1x = getQuadraticPoints(theta11, theta22, rou1 - arr.length, rou2, h = h2, h.ratio = h.ratio, w = w2) d2x = getQuadraticPoints(theta12, theta21, rou1 - arr.length, rou2, h = h, h.ratio = h.ratio, w = w) } } dcenter = getQuadraticPoints((theta11 + theta12)/2, (theta21 + theta22)/2, rou1, rou2, h = (h+h2)/2, h.ratio = h.ratio, w = (w+w2)/2) } r2 = arc.points(theta22, theta21, rou2) r1 = arc.points(theta12, theta11, rou1) if(inverse) { r2 = revMat(r2) } if(arr.type == "big.arrow") { if(directional == 1) { # if(nrow(r2) %% 2 == 1) { # r2 = r2[ceiling(nrow(r2)/2), , drop = FALSE] # } else { # r2 = colMeans(r2[c(nrow(r2)/2, nrow(r2)/2+1), , drop = FALSE]) # } r2 = arc.midpoint(theta22, theta21, rou2) d = rbind(d1x, r2) d = rbind(d, revMat(d2x)) d = rbind(d, r1) } else if(directional == -1) { # if(nrow(r1) %% 2 == 1) { # r1 = r1[ceiling(nrow(r1)/2), , drop = FALSE] # } else { # r1 = colMeans(r1[c(nrow(r1)/2, nrow(r1)/2+1), , drop = FALSE]) # } r1 = arc.midpoint(theta12, theta11, rou1) d = rbind(d1x, r2) d = rbind(d, revMat(d2x)) d = rbind(d, r1) } else if(directional == 2) { r1 = arc.midpoint(theta12, theta11, rou1) r2 = arc.midpoint(theta22, theta21, rou2) d = rbind(d1x, r2) d = rbind(d, revMat(d2x)) d = rbind(d, r1) } } else { d = rbind(d1, r2) d = rbind(d, revMat(d2)) d = rbind(d, r1) } polygon(d, col = col, lty = lty, lwd = lwd, border = border) if(nrow(dcenter) > 1 && arr.type != "big.arrow") { nr = nrow(dcenter) if(directional == 1) { lines(dcenter[-nr, , drop = FALSE], col = arr.col, lwd = arr.lwd, lty = arr.lty, lend = "butt") } else if(directional == -1) { lines(dcenter[-1, , drop = FALSE], col = arr.col, lwd = arr.lwd, lty = arr.lty, lend = "butt") } else if(directional == 2) { lines(dcenter[-c(1, nr), , drop = FALSE], col = arr.col, lwd = arr.lwd, lty = arr.lty, lend = "butt") } if(directional %in% c(1,2)) { # point1 to point2 alpha = line_degree(dcenter[nr-1, 1], dcenter[nr-1, 2], dcenter[nr, 1], dcenter[nr, 2]) oljoin = par("ljoin") par(ljoin = "mitre") Arrowhead(dcenter[nr, 1], dcenter[nr, 2], alpha, arr.length = arr.length, arr.width = arr.width, arr.adj = 1.5, arr.lwd = 0.1, arr.type = arr.type, arr.col = arr.col, lcol = arr.col) par(ljoin = oljoin) } if(directional %in% c(-1,2)) { # point2 to point1 alpha = line_degree(dcenter[2, 1], dcenter[2, 2], dcenter[1, 1], dcenter[1,2]) oljoin = par("ljoin") par(ljoin = "mitre") Arrowhead(dcenter[1, 1], dcenter[1, 2], alpha, arr.length = arr.length, arr.width = arr.width, arr.adj = 1, arr.lwd = 0.1, arr.type = arr.type, arr.col = arr.col, lcol = arr.col) par(ljoin = oljoin) } } } } return(invisible(NULL)) } # points from theta1 to theta2, reverse clockwise arc.points = function(theta1, theta2, rou) { theta1 = theta1 %% 360 theta2 = theta2 %% 360 theta_diff = (theta2 - theta1) %% 360 l = as.radian(theta_diff)*rou ncut = l/ (2*pi/circos.par("unit.circle.segments")) ncut = floor(ncut) ncut = ifelse(ncut < 2, 2, ncut) x = rou * cos(as.radian(theta1 + seq_len(ncut-1)*theta_diff/(ncut-1))) y = rou * sin(as.radian(theta1 + seq_len(ncut-1)*theta_diff/(ncut-1))) d = cbind(x, y) #linesWithArrows(d) return(d) } arc.midpoint = function(theta1, theta2, rou) { theta1 = theta1 %% 360 theta2 = theta2 %% 360 if(theta2 < theta1) theta2 = theta2 + 360 theta = (theta1 + theta2)/2 rbind(c(rou*cos(as.radian(theta)), rou*sin(as.radian(theta)))) } # points from theta1 to theta2 # first calcualte bezier curve of which two end points are located at (-d, 0), (d, 0) # and the summit is located at (0, 2h) getQuadraticPoints = function(theta1, theta2, rou1, rou2, h = NULL, h.ratio = 0.5, w = 1) { # enforce theta1 is always less than theta 2 (reverse-clockwise) theta1 = theta1 %% 360 theta2 = theta2 %% 360 if(abs(abs(theta2 - theta1) - 180) < 1e-3) { theta1 = theta1 + 1e-3 } if (abs(theta2 - theta1) > 180) { theta_mid = (theta2 + theta1)/2 - 180 } else { theta_mid = (theta2 + theta1)/2 } theta_mid = theta_mid %% 360 rou_min = min(rou1, rou2) x1 = rou_min*cos(as.radian(theta1)) y1 = rou_min*sin(as.radian(theta1)) x2 = rou_min*cos(as.radian(theta2)) y2 = rou_min*sin(as.radian(theta2)) # determin h beta = (theta1 - theta2) %% 360 if(beta > 180) beta = 360 - beta h_auto = rou_min*(1-h.ratio*cos(as.radian(beta/2))) if(is.null(h)) { h = h_auto } if(length(h) == 0) { h = h_auto } if(h > rou_min) { h = h_auto } h2 = h - rou_min*(1-cos(as.radian(beta/2))) if(w < 0) h2 = -h2 dis = 1/2 * sqrt((x1 - x2)^2 + (y1 - y2)^2) p0 = c(-dis, 0) p2 = c(dis, 0) if(w == 0) { p1 = c(0, 0) } else { p1 = c(0, (1+w)/w*h2) } d = quadratic.bezier(p0, p1, p2, w = w) # shit, I don't know why! col = "red" alpha = - 90 + (360 - (theta1 + theta2)/2 %% 360) if((theta_mid > 270 || theta_mid < 90) && ( (theta1 - 180)*(theta2 - 180) < 0 )) { alpha = alpha + 180 col = "green" } # rotate coordinate mat = matrix(c(cos(as.radian(alpha)), sin(as.radian(alpha)), -sin(as.radian(alpha)), cos(as.radian(alpha))), nrow = 2) d = d %*% mat x0 = (x1+x2)/2 y0 = (y1+y2)/2 d[, 1] = d[, 1] + x0 d[, 2] = d[, 2] + y0 if((theta1 - theta2) %% 360 < 180) { d = revMat(d) } #points(rou_min*cos(as.radian(theta1)), rou_min*sin(as.radian(theta1)), pch = 16, col = "blue") if(rou1 > rou2) { d = rbind(c(rou1*cos(as.radian(theta1)), rou1*sin(as.radian(theta1))), d) } else if(rou1 < rou2) { d = rbind(d, c(rou2*cos(as.radian(theta2)), rou2*sin(as.radian(theta2)))) } #linesWithArrows(d, col = col) return(d) } # 'Rational bezier curve', from wikipedia # w: w1 # if I know how to calculate the length of bezier curve, then I can choose a betten n quadratic.bezier = function(p0, p1, p2, w = 1) { ncut = quadratic.bezier.length(p0, p1, p2, w = w)/ (2*pi/circos.par("unit.circle.segments")) ncut = floor(ncut) ncut = ifelse(ncut < 3, 3, ncut) if(ncut %% 2 == 0) ncut = ncut + 1 # odd number t = seq(0, 1, length.out = ncut) x = ((1-t)^2 * p0[1] + 2*t*(1-t)*p1[1]*w + t^2*p2[1]) / ((1-t)^2 + 2*t*(1-t)*w + t^2) y = ((1-t)^2 * p0[2] + 2*t*(1-t)*p1[2]*w + t^2*p2[2]) / ((1-t)^2 + 2*t*(1-t)*w + t^2) return(cbind(x, y)) } quadratic.bezier.length = function(p0, p1, p2, w = 1) { n = 50 t = seq(0, 1, length.out = n) x = ((1-t)^2 * p0[1] + 2*t*(1-t)*p1[1]*w + t^2*p2[1]) / ((1-t)^2 + 2*t*(1-t)*w + t^2) y = ((1-t)^2 * p0[2] + 2*t*(1-t)*p1[2]*w + t^2*p2[2]) / ((1-t)^2 + 2*t*(1-t)*w + t^2) sum(sqrt((x[2:n] - x[1:(n-1)])^2 + (y[2:n] - y[1:(n-1)])^2)) } # quadratic.bezier = function(p0, p1, p2, w = 1) { # ncut = bezier::bezierArcLength(p = rbind(p0, p1, p2), 0, 1)$arc.length/ (2*pi/circos.par("unit.circle.segments")) # ncut = floor(ncut) # ncut = ifelse(ncut < 3, 3, ncut) # if(ncut %% 2 == 0) ncut = ncut + 1 # odd number # t = seq(0, 1, length.out = ncut) # p = rbind(p0, c(p0[1]*0.5, p0[2]), p1, c(p2[1]*0.5, p2[2]), p2) # bezier::bezier(t, p) # } are.lines.intersected = function(x1, y1, x2, y2) { n1 = length(x1) n2 = length(x2) for(i in seq_len(n1)) { if(i == 1) next a_1x = x1[i-1] a_1y = y1[i-1] a_2x = x1[i] a_2y = y1[i] k1 = (a_1y - a_2y)/(a_1x - a_2x) b1 = a_1y - k1*a_1x for(j in seq_len(n2)) { if(j == 1) next b_1x = x2[j-1] b_1y = y2[j-1] b_2x = x2[j] b_2y = y2[j] k2 = (b_1y - b_2y)/(b_1x - b_2x) b2 = b_1y - k2*b_1x i_x = - (b2 - b1)/(k2 - k1) i_y = k1*i_x + b1 a_minx = min(c(a_1x, a_2x)) a_maxx = max(c(a_1x, a_2x)) b_minx = min(c(b_1x, b_2x)) b_maxx = max(c(b_1x, b_2x)) if(i_x >= a_minx && i_x <= a_maxx && i_x >= b_minx && i_x <= b_maxx) { return(TRUE) } } } return(FALSE) } revMat = function(mat) { return(mat[rev(seq_len(nrow(mat))), , drop = FALSE]) } linesWithArrows = function(d, sep = 6, col = "red") { lines(d, col = col) if(nrow(d) > sep) { for(i in seq(sep, nrow(d)-sep, by = sep)) { arrows(d[i-sep/2, 1], d[i-sep/2, 2], d[i+sep/2, 1], d[i+sep/2, 2], length = 0.05, col = col) } } else { arrows(d[1, 1], d[1, 2], d[2, 1], d[2, 2], length = 0.05, col = col) } } # used for links degreeDiff = function (theta1, theta2) { theta1 = theta1 %% 360 theta2 = theta2 %% 360 if (abs(theta2 - theta1) > 180) { return(abs(theta2 - theta1) - 180) } else { return(abs(theta2 - theta1)) } } # used to calculate whether two arcs overlap # theta1 is reverse-clockwise of theta2 # e.g. degreeDiff2(90, 180) = 90 # degreeDiff2(180, 90) = 270 degreeDiff2 = function(theta1, theta2) { (theta2 - theta1) %% 360 } line_degree = function(x0, y0, x1, y1) { alpha = (atan((y0 - y1)/(x0 - x1))*180/pi) # -90 ~ 90 if(x0 > x1 && y0 > y1) alpha = (alpha + 180) %% 360 if(x0 > x1 && y0 < y1) alpha = (alpha + 180) %% 360 return(alpha) } # == title # Arrange links evenly on each sector # # == param # -df A data frame with two columns. The values should only contain sector names. # -directional Whether the links are directional. # # == details # This function only deals with single-line links. # # == value # A data frame with four columns of the sectors and the positions of the links. # # == example # sectors = letters[1:20] # df = data.frame(from = sample(sectors, 40, replace = TRUE), # to = sample(sectors, 40, replace = TRUE), # stringsAsFactors = FALSE) # df = unique(df) # df = df[df$from != df$to, ] # # circos.initialize(sectors, xlim = c(0, 1)) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) { # circos.text(CELL_META$xcenter, CELL_META$ycenter, CELL_META$sector.index) # }) # # df2 = arrange_links_evenly(df, directional = 1) # # for(i in seq_len(nrow(df2))) { # s1 = df$from[i] # s2 = df$to[i] # circos.link(df2[i, "sector1"], df2[i, "pos1"], # df2[i, "sector2"], df2[i, "pos2"], # directional = 1) # } # arrange_links_evenly = function(df, directional = 0) { if(!is.circos.initialized()) { stop_wrap("Circular layout needs to be initialized.") } df[, 1] = factor(df[, 1], levels = get.all.sector.index()) df[, 2] = factor(df[, 2], levels = get.all.sector.index()) if(any(is.na(df[, 1])) || any(is.na(df[, 2]))) { stop_wrap("The two columns in `df` should only contain sector names.") } df2 = chordDiagram(df, directional = directional + 0, plot = FALSE) link_count = table(unlist(df)) for(i in seq_len(nrow(df2))) { s1 = df2[i, 1] s2 = df2[i, 2] xlim1 = get.cell.meta.data("xlim", sector.index = s1) df2[i, "x1"] = (df2[i, "x1"] - 0.5)/(link_count[s1]) * (xlim1[2] - xlim1[1]) + xlim1[1] xlim2 = get.cell.meta.data("xlim", sector.index = s2) df2[i, "x2"] = (df2[i, "x2"] - 0.5)/(link_count[s2]) * (xlim2[2] - xlim2[1]) + xlim2[1] } df2 = df2[, c("rn", "cn", "x1", "x2")] colnames(df2) = c("sector1", "sector2", "pos1", "pos2") return(df2) } circlize/R/random_color.R0000644000176200001440000001464514150703100015061 0ustar liggesuserscolorDictionary = new.env() # == title # Generate random colors # # == param # -n number of colors # -hue the hue of the generated color. You can use following default color name: ``red``, ``orange``, # ``yellow``, ``green``, ``blue``, ``purple``, ``pink`` and ``monochrome``. If the value is a hexidecimal color string such as ``#00FFFF``, # the function will extract its hue value and use that to generate colors. # -luminosity controls the luminosity of the generated color. The value should be a string containing ``bright``, ``light``, ``dark`` and ``random``. # -transparency transparency, numeric value between 0 and 1. # -friendly If it is true, light random colors will not be generated. # # == details # The code is adapted from randomColor.js (https://github.com/davidmerfield/randomColor ). # # == author # Zuguang Gu # # == example # plot(NULL, xlim = c(1, 10), ylim = c(1, 8), axes = FALSE, ann = FALSE) # points(1:10, rep(1, 10), pch = 16, cex = 5, # col = rand_color(10)) # points(1:10, rep(2, 10), pch = 16, cex = 5, # col = rand_color(10, luminosity = "bright")) # points(1:10, rep(3, 10), pch = 16, cex = 5, # col = rand_color(10, luminosity = "light")) # points(1:10, rep(4, 10), pch = 16, cex = 5, # col = rand_color(10, luminosity = "dark")) # points(1:10, rep(5, 10), pch = 16, cex = 5, # col = rand_color(10, hue = "red", luminosity = "bright")) # points(1:10, rep(6, 10), pch = 16, cex = 5, # col = rand_color(10, hue = "green", luminosity = "bright")) # points(1:10, rep(7, 10), pch = 16, cex = 5, # col = rand_color(10, hue = "blue", luminosity = "bright")) # points(1:10, rep(8, 10), pch = 16, cex = 5, # col = rand_color(10, hue = "monochrome", luminosity = "bright")) rand_color = function(n, hue = NULL, luminosity = "random", transparency = 0, friendly = FALSE) { if(friendly) { col = rand_color(n, luminosity = "dark") i_try = 1 while(1) { hsv = coords(as(hex2RGB(col), "HSV")) l = hsv[, 3] > 0.85 | (hsv[, 1] > 40 & hsv[, 1] < 65) if(!any(l)) break i_try = i_try + 1 if(i_try > 50) break col[l] = rand_color(sum(l), luminosity = "dark") } return(col) } if("luminosity" %in% names(as.list(match.call()))) { all_luminosity = luminosity } else { all_luminosity = c("bright", "light", "dark") } col = lapply(1:n, function(x) { H = pickHue(hue) S = pickSaturation(H, sample(all_luminosity, 1)) B = pickBrightness(H, S, sample(all_luminosity, 1)) HSV(H, S/100, B/100) }) col = sapply(col, hex) col = add_transparency(col, transparency) l = substr(col, 0, 7) == "#FFFFFF" try = 0 while(any(l) && try < 100) { col[l] = rand_color(sum(l), hue = hue, luminosity = luminosity, transparency = transparency) l = substr(col, 0, 7) == "#FFFFFF" try = try + 1 } col } pickHue = function(hue) { hueRange = getHueRange(hue) hue = randomWithin(hueRange[1], hueRange[2]) if (hue < 0) hue = 360 + hue return(hue) } pickSaturation = function(hue, luminosity) { if (hue == 'monochrome') { return(0) } if (luminosity == 'random') { return(randomWithin(0, 100)) } saturationRange = getSaturationRange(hue); sMin = saturationRange[1] sMax = saturationRange[2] if(luminosity == "bright") { sMin = 55 } else if(luminosity == "dark") { sMin = sMax - 10 } else if(luminosity == "light") { sMax = 55 } return(randomWithin(sMin, sMax)) } pickBrightness = function(H, S, luminosity) { bMin = getMinimumBrightness(H, S) bMax = 100 if(luminosity == "dark") { bMax = bMin + 20 } else if(luminosity == "light") { bMin = (bMax + bMin)/2 } else if(luminosity == "random") { bMin = 0 bMax = 100 } return(randomWithin(bMin, bMax)) } getMinimumBrightness = function(H, S) { lowerBounds = getColorInfo(H)$lowerBounds for (i in seq_len(ncol(lowerBounds)-1)) { s1 = lowerBounds[1, i] v1 = lowerBounds[2, i] s2 = lowerBounds[1, i + 1] v2 = lowerBounds[2, i + 1] if (S >= s1 && S <= s2) { m = (v2 - v1)/(s2 - s1) b = v1 - m*s1 return(m*S + b) } } return(0) } getHueRange = function(colorInput) { if(is.null(colorInput)) { return(c(0, 360)) } if (is.numeric(colorInput)) { number = colorInput if (number < 360 && number > 0) { return(c(number, number)) } } if (is.character(colorInput)) { if (!is.null(colorDictionary[[colorInput]])) { color = colorDictionary[[colorInput]] if (!is.null(color$hueRange)) return(color$hueRange) } else { color = col2rgb(colorInput) rgb = RGB(color[1], color[2], color[3]) hue = as(rgb, "HSV")[1] return(c(hue, hue)) } } return(c(0,360)) } getSaturationRange = function(hue) { return(getColorInfo(hue)$saturationRange) } getColorInfo = function(hue) { hue = round(hue) if (hue >= 334 && hue <= 360) { hue = hue - 360 } for (colorName in ls(envir = colorDictionary)) { color = colorDictionary[[colorName]] if (!is.null(color$hueRange) && hue >= color$hueRange[1] && hue <= color$hueRange[2]) { return(colorDictionary[[colorName]]) } } stop('Color not found, hue =', hue) } randomWithin = function(min, max) { runif(length(min), min = min, max = max) } defineColor = function(name, hueRange, lowerBounds) { sMin = lowerBounds[1, 1] sMax = lowerBounds[1, ncol(lowerBounds)] bMin = lowerBounds[2, ncol(lowerBounds)] bMax = lowerBounds[2, 1] colorDictionary[[name]] = list( hueRange = hueRange, lowerBounds = lowerBounds, saturationRange = c(sMin, sMax), brightnessRange = c(bMin, bMax) ) } loadColorBounds = function() { defineColor( 'monochrome', NULL, cbind(c(0,0), c(100,0)) ) defineColor( 'red', c(-26,18), cbind(c(20,100),c(30,92),c(40,89),c(50,85),c(60,78),c(70,70),c(80,60),c(90,55),c(100,50)) ) defineColor( 'orange', c(19,46), cbind(c(20,100),c(30,93),c(40,88),c(50,86),c(60,85),c(70,70),c(100,70)) ) defineColor( 'yellow', c(47,62), cbind(c(25,100),c(40,94),c(50,89),c(60,86),c(70,84),c(80,82),c(90,80),c(100,75)) ) defineColor( 'green', c(63,178), cbind(c(30,100),c(40,90),c(50,85),c(60,81),c(70,74),c(80,64),c(90,50),c(100,40)) ) defineColor( 'blue', c(179, 257), cbind(c(20,100),c(30,86),c(40,80),c(50,74),c(60,60),c(70,52),c(80,44),c(90,39),c(100,35)) ) defineColor( 'purple', c(258, 282), cbind(c(20,100),c(30,87),c(40,79),c(50,70),c(60,65),c(70,59),c(80,52),c(90,45),c(100,42)) ) defineColor( 'pink', c(283, 334), cbind(c(20,100),c(30,90),c(40,86),c(60,84),c(80,80),c(90,75),c(100,73)) ) } loadColorBounds() circlize/R/regions.R0000755000176200001440000000453514015721224014060 0ustar liggesusers## implement sort, reduce, findOverlaps and pintersect in IRanges package ## the reason is I don't want to make a dependency on IRanges package, it is too heavy sort_region = function(region) { region[order(region[[1]], region[[2]]), , drop = FALSE] } order_region = function(region) { order(region[[1]], region[[2]]) } # region has been sorted reduce_region = function(region) { nr = nrow(region) r = data.frame(start = rep(NA, nr), end = rep(NA, nr)) if(nr == 0) { return(r) } else if(nr == 1) { return(region) } else { r[1, ] = region[1, ] k = 1 for(i in seq_len(nrow(region))[-1]) { if(region[i, 1] <= r[k, 2] + 1) { r[k, 2] = region[i, 2] } else { k = k + 1 r[k, ] = region[i, ] } } return(r[!is.na(r[[1]]), , drop = FALSE]) } } # to calculate how much region in gr1 are covered by gr2 # here gr1 and gr2 are all sorted # gr2 are reduced overlap_region = function(gr1, gr2, percent = TRUE, count_by = c("percent", "number")) { nr1 = nrow(gr1) nr2 = nrow(gr2) count_by = match.arg(count_by)[1] overlap_n = overlap = rep(0, length = nr1) if(nr1 == 0) { return(overlap) } k_gr2 = 1 for(i in seq_len(nr1)) { for(j in seq(k_gr2, nr2)) { if(gr2[j, 2] < gr1[i, 1]) { k_gr2 = ifelse(k_gr2 < nr2, k_gr2 + 1, nr2) next } else if(gr2[j, 1] > gr1[i, 2]) { break } else { overlap[i] = overlap[i] + overlap_interval(c(gr1[i, 1], gr1[i, 2]), c(gr2[j, 1], gr2[j, 2])) overlap_n[i] = overlap_n[i] + 1 } } } if(count_by == "number") { return(overlap_n) } if(percent) { overlap / (gr1[, 2] - gr1[, 1] + 1) } else { overlap } } # how much in it1 is covered by it2 overlap_interval = function(it1, it2) { start = it1[1] end = it1[2] it2_start = it2[1] it2_end = it2[2] if(end < it2_start) { return(0) } else if(start <= it2_start & end >= it2_start & end <= it2_end) { return(end - it2_start + 1) } else if(it2_start <= start & it2_end >= end) { return(end - start + 1) } else if(start <= it2_start & end >= it2_end) { return(it2_end - it2_start + 1) } else if(it2_start <= start & start <= it2_end & it2_end <= end) { return(it2_end - start + 1) } else if(it2_end < start) { return(0) } else { return(0) } } circlize/R/circos.nested.R0000644000176200001440000002422514015721224015150 0ustar liggesusers# == title # Nested zooming with two circular plots # # == param # -f1 A self-defined function for making the first circular plot. The function should have no argument. # -f2 A self-defined function for making the second circular plot. The function should have no argument. # -correspondance A six-column data frame which contains correspondance between the # coordinates in two circular plots # -connection_height The height of the connection track, measured as the percent to the radius of the unit circle. # The value can be specified by `uh` or `convert_height` with absolute units. # -connection_col Filled color of the connection track. The value can be a vector with same length as number of rows of ``correspondance`` # -connection_border Border color of the connection track. # -connection_lty Line style of the connection track borders # -connection_lwd Line width of the connection track borders # -adjust_start_degree If ``circos.par(start.degree = ...)`` is not set in ``f2()``, the start degree for the second # circular plot will be adjusted to make the distance of sectors between the two plots to the minimal. # # == details # The function visualizes zoomings by combining two circular plots into one page where # one is the normal circular plot and the other one only contains regions that need to be zoomed. # This function automatically arranges the two plots to make it easy to correspond between # the original and the zoomed sectors. # # Since the function needs to know the information of the two circular plots, please do not call # `circos.clear` in either ``f1()`` or ``f2()``. It will be called internally in `circos.nested`. # # If ``adjust_start_degree`` is set to ``TRUE``, ``start.degree`` should not be set in ``f2()``. # Also ``canvas.xlim`` and ``canvas.ylim`` are reset in ``f2()``, they should not be set in ``f2()`` # either. # # == seealso # https://jokergoo.github.io/circlize_book/book/nested-zooming.html # # == author # Zuguang Gu # circos.nested = function( f1, f2, correspondance, connection_height = mm_h(5), connection_col = NA, connection_border = "black", connection_lty = par("lty"), connection_lwd = par("lwd"), adjust_start_degree = TRUE) { on.exit(circos.clear()) nr = nrow(correspondance) od = order(correspondance[, 2], correspondance[, 3], correspondance[, 5], correspondance[, 6]) correspondance = correspondance[od, ] if(length(connection_col) == 1) connection_col = rep(connection_col, nr) if(length(connection_border) == 1) connection_border = rep(connection_border, nr) if(length(connection_lty) == 1) connection_lty = rep(connection_lty, nr) if(length(connection_lwd) == 1) connection_lwd = rep(connection_lwd, nr) connection_col = connection_col[od] connection_border = connection_border[od] connection_lty = connection_lty[od] connection_lwd = connection_lwd[od] pdf(NULL) oe = try({ f2() if(!is.circos.initialized()) { stop_wrap("Do not call `circos.clear()` in `f2`.") } param2 = circos.par() correspondance[[1]] = as.vector(correspondance[[1]]) correspondance[[4]] = as.vector(correspondance[[4]]) all_sn = get.all.sector.index() l = correspondance[[4]] %in% all_sn correspondance = correspondance[l, , drop = FALSE] if(nrow(correspondance) == 0) { stop_wrap("Cannot map `correspondance` (the fourth column) to sectors in `f2()`.") } if(length(connection_col) > 1) connection_col = connection_col[l] if(length(connection_border) > 1) connection_border = connection_border[l] if(length(connection_lty) > 1) connection_lty = connection_lty[l] if(length(connection_lwd) > 1) connection_lwd = connection_lwd[l] for(i in seq_len(nrow(correspondance))) { correspondance[i, "c2_theta1"] = circlize(correspondance[i, 5], 1, sector.index = correspondance[i, 4])[1, 1] correspondance[i, "c2_theta2"] = circlize(correspondance[i, 6], 1, sector.index = correspondance[i, 4])[1, 1] } if(!identical(c(-1, 1), param2$canvas.xlim)) { stop_wrap("Do not modify circos.par('canvas.xlim') in `f2()`.") } if(!identical(c(-1, 1), param2$canvas.ylim)) { stop_wrap("Do not modify circos.par('canvas.ylim') in `f2()`.") } if(adjust_start_degree) { if(!identical(0, param2$start.degree)) { stop_wrap("Do not modify circos.par('start.degree') when adjust_start_degree = TRUE in `f2()`.") } } f2_sectors = all_sn correspondance$c2_order = order(factor(correspondance[, 4], levels = f2_sectors), correspondance[, 5], correspondance[, 6]) }) circos.clear() dev.off2() if(inherits(oe, "try-error")) { stop(oe) } # in correspondace, positions are already sorted by the 4,5,6 columns # here we test for a sector in f1(), # if(any(tapply(correspondance[, 2], correspondance[, 1], is.unsorted))) { # warning(strwrap2("Sectors in `f2()` which belongs to one single sector in `f1()` should be sorted by positions, or else connection lines may overlap.")) # } # if(!all(tapply(seq_len(nrow(correspondance)), correspondance[, 1], function(x) { # if(length(x) == 1) { # TRUE # } else { # all(diff(x) == 1) # } # }))) { # warning(strwrap2("Sectors in `f2()` should be sorted by the sector order in `f1()`, or else connection lines may overlap.")) # } circos.par(points.overflow.warning = FALSE) f1() if(!is.circos.initialized()) { stop_wrap("Do not call `circos.clear()` in `f1`.") } param1 = circos.par() if(abs(abs(param1$canvas.xlim[1]) - abs(param1$canvas.xlim[2])) > 1e-6) { stop_wrap("`canvas.xlim` should be symmetric to zero in `f1()`.") } if(abs(abs(param1$canvas.ylim[1]) - abs(param1$canvas.ylim[2])) > 1e-6) { stop_wrap("`canvas.ylim` should be symmetric to zero in `f1()`.") } if(abs(abs(param1$canvas.xlim[1]) - abs(param1$canvas.ylim[1])) > 1e-6) { stop_wrap("Canvas coordinate should be square in `f1()`.") } all_sn = get.all.sector.index() l = correspondance[[1]] %in% all_sn correspondance = correspondance[l, , drop = FALSE] if(nrow(correspondance) == 0) { stop_wrap("Cannot map `correspondance` (the first column) to sectors in `f1()`.") } if(length(connection_col) > 1) connection_col = connection_col[l] if(length(connection_border) > 1) connection_border = connection_border[l] if(length(connection_lty) > 1) connection_lty = connection_lty[l] if(length(connection_lwd) > 1) connection_lwd = connection_lwd[l] for(i in seq_len(nrow(correspondance))) { correspondance[i, "c1_theta1"] = circlize(correspondance[i, 2], 1, sector.index = correspondance[i, 1])[1, 1] correspondance[i, "c1_theta2"] = circlize(correspondance[i, 3], 1, sector.index = correspondance[i, 1])[1, 1] } r1 = get_most_inside_radius() r2 = r1 - connection_height f1_sectors = all_sn correspondance$c1_order = order(factor(correspondance[, 1], levels = f1_sectors), correspondance[, 2], correspondance[, 3]) ## adjust start degree of the second circular plot if(adjust_start_degree) { t1 = rowMeans(correspondance[, c("c2_theta1", "c2_theta2")]) t2 = rowMeans(correspondance[, c("c1_theta1", "c1_theta2")]) sum_diff = numeric(360) for(offset in 0:359) { diff_degree = abs(t1 - t2 + offset) diff_degree = ifelse(diff_degree > 180, diff_degree - 180, diff_degree) sum_diff[offset + 1] = sum(diff_degree) } offset = which.min(sum_diff) - 1 correspondance[, "c2_theta1"] = correspondance[, "c2_theta1"] + offset correspondance[, "c2_theta2"] = correspondance[, "c2_theta2"] + offset } # the coordinate convert is applied in the first circular plot # connection is from the top to the bottom of this track make_connection = function(chr, c1_theta1, c1_theta2, c2_theta1, c2_theta2, col, border, lty, lwd) { cell.top.radius = get.cell.meta.data("cell.top.radius") cell.bottom.radius = get.cell.meta.data("cell.bottom.radius") df = reverse.circlize(c(c1_theta1, c1_theta2, c2_theta1, c2_theta2), c(cell.top.radius, cell.top.radius, cell.bottom.radius, cell.bottom.radius)) x21 = df[1, 1] x22 = df[2, 1] y21 = df[1, 2] y22 = df[2, 2] x11 = df[3, 1] x12 = df[4, 1] y11 = df[3, 2] y12 = df[4, 2] circos.polygon(c(x11, x11, x21, x21, x22, x22, x12, x12, x11), c(y11, (y21 - y11)/3, (y21 - y11)/3*2, y21, y22, (y22 - y12)/3*2, (y22 - y12)/3, y12, y11), col = col, border = border, lty = lty, lwd = lwd) } nr = nrow(correspondance) if(length(connection_col) == 1) { connection_col = rep(connection_col, nr) } if(length(connection_border) == 1) { connection_border = rep(connection_border, nr) } if(length(connection_lty) == 1) { connection_lty = rep(connection_lty, nr) } if(length(connection_lwd) == 1) { connection_lwd = rep(connection_lwd, nr) } # make the connections circos.track(ylim = c(0, 1), track.height = connection_height, panel.fun = function(x, y) { l = correspondance[[1]] == CELL_META$sector.index if(sum(l) == 0) { return(NULL) } for(i in which(l)) { make_connection(correspondance[i, 1], correspondance[i, "c1_theta1"], correspondance[i, "c1_theta2"], correspondance[i, "c2_theta1"], correspondance[i, "c2_theta2"], connection_col[i], connection_border[i], connection_lty[i], connection_lwd[i]) } }, track.margin = c(0, 0), cell.padding = c(0, 0, 0, 0), bg.border = NA) circos.clear() op = par("new") par(new = TRUE) if(adjust_start_degree) { circos.par(start.degree = offset) } circos.par(canvas.xlim = c(-param1$canvas.xlim[2]/r2, param1$canvas.xlim[2]/r2), canvas.ylim = c(-param1$canvas.xlim[2]/r2, param1$canvas.xlim[2]/r2)) f2() circos.clear() par(new = op) if(!all(correspondance$c1_order == correspondance$c2_order)) { warning_wrap(paste0("Sectors in `f1()` and `f2()` should be in the same order, or else the connection lines may overlap. The ordered sectors in outter ring: ", paste(f1_sectors, collapse = ', '), ". The ordered sectors in inner ring: ", paste0(f2_sectors, collapse = ', '), ".\n")) } } dev.off2 = function () { i1 = dev.prev() i2 = dev.cur() if (i1 == 2) { dev.set(i1) } else if (i1 > 2) { i11 = dev.prev(i1) if (names(i11) == "RStudioGD") { dev.set(i11) } else { dev.set(i1) } } dev.off(i2) } strwrap2 = function(x) { paste(strwrap(x), collapse = "\n") } circlize/R/genomic.R0000755000176200001440000031105614236527333014044 0ustar liggesusers # == title # Initialize the circular layout with an ideogram # # == param # -cytoband A path of the cytoband file or a data frame that already contains cytoband data. By default it is cytoband for hg19. # Pass to `read.cytoband`. # -species Abbreviations of species. e.g. hg19 for human, mm10 for mouse. If this # value is specified, the function will download cytoBand.txt.gz from # UCSC website automatically. If there is no cytoband for user's species, # it will keep on trying to download chromInfo file. Pass to `read.cytoband` or `read.chromInfo`. # -chromosome.index subset of chromosomes, also used to reorder chromosomes. # -sort.chr Whether chromosome names should be sorted (first sort by numbers then by letters). # If ``chromosome.index`` is set, this argumetn is enforced to ``FALSE`` # -major.by Increment of major ticks. Pass to `circos.genomicInitialize`. # -plotType Which tracks should be drawn. ``ideogram`` for ideogram rectangle, ``axis`` for genomic axis and ``labels`` for chromosome names. # If there is no ideogram for specified species, ``ideogram`` will be enforced to be excluded. # If it is set to ``NULL``, the function just initialize the plot but draw nothing. # -track.height Height of the track which contains "axis" and "labels". # -ideogram.height Height of the ideogram track # -... Pass to `circos.genomicInitialize`. # # == details # The function will initialize the circular plot in which each sector corresponds to a chromosome. You can control the order of # chromosomes by ``chromosome.index`` or by ``sort.chr``, or by setting a special format of ``cytoband`` (please refer to `read.cytoband` # to find out how to control a proper ``cytoband``). # # The function finally pass data to `circos.genomicInitialize` to initialize the circular plot. # # The style of ideogram is almost fixed, but you can customize it with your self-sefined code. Refer to vignette for demonstration. # # == seealso # https://jokergoo.github.io/circlize_book/book/initialize-genomic-plot.html#initialize-cytoband # # == example # \donttest{ # circos.initializeWithIdeogram() # # cytoband.file = system.file(package = "circlize", # "extdata", "cytoBand.txt") # circos.initializeWithIdeogram(cytoband.file) # # cytoband.df = read.table(cytoband.file, colClasses = c("character", "numeric", # "numeric", "character", "character"), sep = "\t") # circos.initializeWithIdeogram(cytoband.df) # # circos.initializeWithIdeogram(species = "hg18") # # circos.initializeWithIdeogram(species = "mm10") # # circos.initializeWithIdeogram(chromosome.index = c("chr1", "chr2")) # # cytoband = read.table(cytoband.file, colClasses = c("character", "numeric", # "numeric", "character", "character"), sep = "\t") # circos.initializeWithIdeogram(cytoband, sort.chr = FALSE) # # cytoband[[1]] = factor(cytoband[[1]], levels = paste0("chr", c(22:1, "X", "Y"))) # circos.initializeWithIdeogram(cytoband, sort.chr = FALSE) # # cytoband = read.table(cytoband.file, colClasses = c("character", "numeric", # "numeric", "character", "character"), sep = "\t") # circos.initializeWithIdeogram(cytoband, sort.chr = TRUE) # # circos.initializeWithIdeogram(plotType = c("axis", "labels")) # # circos.initializeWithIdeogram(plotType = NULL) # # circos.par("start.degree" = 90) # circos.initializeWithIdeogram() # circos.clear() # # circos.par("gap.degree" = rep(c(2, 4), 12)) # circos.initializeWithIdeogram() # circos.clear() # } circos.initializeWithIdeogram = function( cytoband = system.file(package = "circlize", "extdata", "cytoBand.txt"), species = NULL, sort.chr = TRUE, chromosome.index = usable_chromosomes(species), major.by = NULL, plotType = c("ideogram", "axis", "labels"), track.height = NULL, ideogram.height = convert_height(2, "mm"), ...) { if("sector.names" %in% names(list(...))) { stop_wrap("Found argumnet `sector.names` is used. Please use the argument `chromosome.index` instead.") } # proper order will be returned depending on cytoband and sort.chr e = try(cytoband <- read.cytoband(cytoband, species = species, sort.chr = sort.chr, chromosome.index = chromosome.index), silent = TRUE) if(inherits(e, "try-error") && !is.null(species)) { # if species is defined e2 = try(cytoband <- read.chromInfo(species = species, sort.chr = sort.chr, chromosome.index = chromosome.index), silent = TRUE) if(inherits(e2, "try-error")) { message(e) message(e2) stop_wrap("Cannot download either cytoband or chromInfo file from UCSC.") } else { message_wrap("Downloading cytoBand file from UCSC failed. Use chromInfo file instead. Note ideogram track will be removed from the plot.") plotType = setdiff(plotType, "ideogram") # because in chromInfo file, there are also many short scaffold if(is.null(chromosome.index)) { chromInfo = read.chromInfo(species = species) chr_len = sort(chromInfo$chr.len, decreasing = TRUE) # sometimes there are small scaffold i = which(chr_len[seq_len(length(chr_len)-1)] / chr_len[seq_len(length(chr_len)-1)+1] > 5)[1] if(length(i)) { chromosome = chromInfo$chromosome[chromInfo$chromosome %in% names(chr_len[chr_len >= chr_len[i]])] } else { chromosome = chromInfo$chromosome } cytoband = read.chromInfo(species = species, chromosome.index = chromosome, sort.chr = sort.chr) } } } else if(inherits(e, "try-error")) { stop(e) } df = cytoband$df chromosome = cytoband$chromosome if(is.null(chromosome)) { if(is.factor(cytoband[, 1])) { chromosome = levels(cytoband$df[, 1]) } else { chromosome = unique(cytoband$df[, 1]) } } if(is.null(chromosome.index)) { chromosome.index = chromosome } # here df[[1]] is quite important, should be re-factered df[[1]] = factor(as.vector(df[[1]]), levels = chromosome.index) # sn for sector names, but not for sector index sn = unique(as.vector(df[[1]])) # we do not need 'chr' prefix if it exits, it holds too much space. sn = gsub("chr", "", sn) o.cell.padding = circos.par("cell.padding") circos.par(cell.padding = c(o.cell.padding[1], 0, o.cell.padding[3], 0)) circos.genomicInitialize(df, sector.names = sn, major.by = major.by, plotType = plotType, track.height = track.height, ...) if(any(plotType %in% "ideogram")) { circos.genomicIdeogram(df, track.height = ideogram.height) } } # == title # Add an ideogram track # # == param # -cytoband A data frame or a file path, pass to `read.cytoband`. # -species Abbreviations of the genome, pass to `read.cytoband`. # -track.height Height of the ideogram track. # -track.margin Margins for the track. # # == seealso # https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#ideograms # # == author # Zuguang Gu # # == example # \donttest{ # circos.initializeWithIdeogram(plotType = c("labels", "axis")) # circos.track(ylim = c(0, 1)) # circos.genomicIdeogram() # put ideogram as the third track # } circos.genomicIdeogram = function( cytoband = system.file(package = "circlize", "extdata", "cytoBand.txt"), species = NULL, track.height = mm_h(2), track.margin = circos.par("track.margin")) { chromosome.index = get.all.sector.index() e = try(cytoband <- read.cytoband(cytoband, species = species, chromosome.index = chromosome.index), silent = TRUE) if(inherits(e, "try-error")) { stop(e) } df = cytoband$df if(all(cytoband.col(df[, 5]) == "#FFFFFF")) { warning_wrap("Cannot map colors to cytobands. The ideogram won't be drawn.") return(invisible(NULL)) } circos.genomicTrackPlotRegion(df, ylim = c(0, 1), bg.border = NA, track.height = track.height, panel.fun = function(region, value, ...) { col = cytoband.col(value[[2]]) circos.genomicRect(region, value, ybottom = 0, ytop = 1, col = col, border = NA, ...) xlim = get.cell.meta.data("xlim") circos.rect(xlim[1], 0, xlim[2], 1, border = "black") }, cell.padding = c(0, 0, 0, 0), track.margin = track.margin ) } # == title # Initialize circular plot with any genomic data # # == param # -data A data frame in bed format. # -sector.names Labels for each sectors which will be drawn along each sector. It will not modify values of sector index. # -major.by Increment of major ticks. It is calculated automatically if the value is not set (about every 10 degrees there is a major tick). # -plotType If it is not ``NULL``, there will create a new track containing axis and names for sectors. # This argument controls which part should be drawn, ``axis`` for genomic axis and ``labels`` for chromosome names # -tickLabelsStartFromZero Whether axis tick labels start from 0? This will only affect the axis labels while not affect x-values in cells. # -axis.labels.cex The font size for the axis tick labels. # -labels.cex The font size for the labels. # -track.height If ``PlotType`` is not ``NULL``, height of the annotation track. # -... Pass to `circos.initialize` # # == details # The function will initialize circular plot from genomic data. If ``plotType`` is set with value in ``axis`` or ``labels``, there will # create a new track. # # The order of sectors related to data structure of ``data``. If the first column in ``data`` is a factor, the order of sectors # is ``levels(data[[1]])``; If the first column is just a simple vector, the order of sectors is ``unique(data[[1]]``. # # For more details on initializing genomic plot, please refer to the vignettes. # # == seealso # https://jokergoo.github.io/circlize_book/book/initialize-genomic-plot.html#initialize-with-general-genomic-category # # == example # df = read.cytoband()$df # circos.genomicInitialize(df) # # df = data.frame(name = c("TP53", "TP63", "TP73"), # start = c(7565097, 189349205, 3569084), # end = c(7590856, 189615068, 3652765), # stringsAsFactors = FALSE) # circos.genomicInitialize(df) # circos.clear() # # circos.genomicInitialize(df, tickLabelsStartFromZero = FALSE) # circos.clear() # # circos.genomicInitialize(df, major.by = 5000) # circos.clear() # # circos.genomicInitialize(df, plotType = "labels") # circos.clear() # # circos.genomicInitialize(df, sector.names = c("tp53", "tp63", "tp73")) # circos.clear() # # circos.genomicInitialize(df, sector.names = c("tp53x", "tp63x", "tp73")) # circos.clear() # # df[[1]] = factor(df[[1]], levels = c("TP73", "TP63", "TP53")) # circos.genomicInitialize(df) # circos.clear() # circos.genomicInitialize = function( data, sector.names = NULL, major.by = NULL, plotType = c("axis", "labels"), tickLabelsStartFromZero = TRUE, axis.labels.cex = 0.4*par("cex"), labels.cex = 0.8*par("cex"), track.height = NULL, ...) { data = validate_data_frame(data) validate_region(data, check_chr = FALSE) if(is.factor(data[[1]])) { fa = levels(data[[1]]) } else { fa = unique(data[[1]]) } if(!is.null(sector.names)) { if(length(sector.names) != length(fa)) { stop_wrap("length of `sector.names` and length of sectors differ.") } } else { sector.names = fa } names(sector.names) = fa # calculate xlim x1 = tapply(data[[2]], data[[1]], min)[fa] x2 = tapply(data[[3]], data[[1]], max)[fa] op = circos.par("cell.padding") ow = circos.par("points.overflow.warning") circos.par(cell.padding = c(0, 0, 0, 0), points.overflow.warning = FALSE) circos.initialize(factor(fa, levels = fa), xlim = cbind(x1, x2), ...) if(circos.par$ring) { op = c(op[1], 0, op[3], 0) ow = FALSE } if(is.null(track.height)) { if(all(c("axis", "labels") %in% plotType)) { track.height = convert_unit_in_canvas_coordinate(1.5, "mm") + strheight("0", cex = axis.labels.cex) + convert_unit_in_canvas_coordinate(0.5, "mm") + strheight("chr", cex = labels.cex) } else if("labels" %in% plotType) { track.height = strheight("chr", cex = labels.cex) } else if("axis" %in% plotType) { track.height = convert_unit_in_canvas_coordinate(1.5, "mm") + strheight("0", cex = axis.labels.cex) } else { track.height = convert_height(3, "mm") } } # axis and chromosome names if(any(plotType %in% c("axis", "labels"))) { circos.genomicTrackPlotRegion(data, ylim = c(0, 1), bg.border = NA, track.height = track.height, panel.fun = function(region, value, ...) { sector.index = get.cell.meta.data("sector.index") xlim = get.cell.meta.data("xlim") if(all(c("axis", "labels") %in% plotType)) { circos.genomicAxis(h = "bottom", major.by = major.by, tickLabelsStartFromZero = tickLabelsStartFromZero, labels.cex = axis.labels.cex) circos.text(mean(xlim), convert_y(1.5, "mm") + convert_y(strheight("chr", cex = axis.labels.cex), "canvas") + convert_y(0.5, "mm"), labels = sector.names[sector.index], cex = labels.cex, adj = c(0.5, 0), niceFacing = TRUE) } else if("labels" %in% plotType) { circos.text(mean(xlim), 0, labels = sector.names[sector.index], cex = labels.cex, adj = c(0.5, 0), niceFacing = TRUE) } else if("axis" %in% plotType) { circos.genomicAxis(h = "bottom", major.by = major.by, tickLabelsStartFromZero = tickLabelsStartFromZero,labels.cex = axis.labels.cex) } } ) } circos.par("cell.padding" = op, "points.overflow.warning" = ow) return(invisible(NULL)) } # == title # Initialize a layout for circular genome # # == param # -name Name of the genome (or the "chromosome name"). # -genome_size Size of the genome # -plotType Pass to `circos.genomicInitialize`. # -... All goes to `circos.genomicInitialize`. # circos.initializeCircularGenome = function(name, genome_size, plotType = "axis", ...) { circos.genomicInitialize(data.frame(name, 0, genome_size), ..., ring = TRUE, plotType = plotType) } # == title # Add genomic axes # # == param # -h Position of the axes. "top" or "bottom". # -major.at Major breaks. If ``major.at`` is set, ``major.by`` is ignored. # -labels labels corresponding to ``major.at``. If ``labels`` is set, ``major.at`` must be set. # -major.by Increment of major ticks. It is calculated automatically if the value is not set (about every 10 degrees there is a major tick). # -tickLabelsStartFromZero Whether axis tick labels start from 0? This will only affect the axis labels while not affect x-values in cells. # -labels.cex The font size for the axis tick labels. # -sector.index Index for the sector # -track.index Index for the track # -... Other arguments pass to `circos.axis`. # # == details # It assigns proper tick labels under genomic coordinate. # # == seealso # https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#genomic-axes # # == example # circos.initializeWithIdeogram(chromosome.index = paste0("chr", 1:4), plotType = NULL) # circos.track(ylim = c(0, 1), panel.fun = function(x, y) circos.genomicAxis()) # circos.track(ylim = c(0, 1), track.height = 0.1) # circos.track(track.index = get.current.track.index(), panel.fun = function(x, y) { # circos.genomicAxis(h = "bottom", direction = "inside") # }) # circos.clear() # circos.genomicAxis = function( h = "top", major.at = NULL, labels = NULL, major.by = NULL, tickLabelsStartFromZero = TRUE, labels.cex = 0.4*par("cex"), sector.index = get.current.sector.index(), track.index = get.current.track.index(), ...) { if(!h %in% c("top", "bottom")) { stop_wrap("`h` can only be 'top' or 'bottom'.") } xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index) if(!is.null(major.at) && !is.null(labels)) { if(length(major.at) != length(labels)) { stop_wrap("Length of major.at and labels should be the same.") } } if(is.null(major.at) && !is.null(labels)) { stop_wrap("If labels is set, major.at should also be set.") } if(tickLabelsStartFromZero) { offset = xlim[1] if(is.null(major.by)) { major.by = .default.major.by() } if(is.null(major.at)) { major.at = seq(xlim[1], xlim[2], by = major.by) major.at = c(major.at, major.at[length(major.at)] + major.by) } if(is.null(labels)) { if(major.by >= 1e6) { major.tick.labels = paste((major.at-offset)/1000000, "Mb", sep = "") } else if(major.by >= 1e3) { major.tick.labels = paste((major.at-offset)/1000, "kb", sep = "") } else { major.tick.labels = paste((major.at-offset), "bp", sep = "") } } else { major.tick.labels = labels } } else { if(is.null(major.by)) { major.by = .default.major.by() } if(is.null(major.at)) { major.at = seq(floor(xlim[1]/major.by)*major.by, xlim[2], by = major.by) major.at = c(major.at, major.at[length(major.at)] + major.by) } if(is.null(labels)) { if(major.by >= 1e6) { major.tick.labels = paste(major.at/1000000, "MB", sep = "") } else if(major.by >= 1e3) { major.tick.labels = paste(major.at/1000, "KB", sep = "") } else { major.tick.labels = paste(major.at, "bp", sep = "") } } else { major.tick.labels = labels } } circos.axis(h = h, major.at = major.at, labels = major.tick.labels, labels.cex = labels.cex, sector.index = sector.index, track.index = track.index, ...) } # == title # Create a track for genomic graphics # # == param # -data A bed-file-like data frame or a list of data frames # -ylim If it is ``NULL``, the value will be calculated from data. If ``stack`` is set to ``TRUE``, this value is ignored. # -stack whether to plot in a "stack" mode. # -numeric.column Columns of numeric values in ``data`` that will be used for plotting. # If ``data`` is a data frame list, ``numeric.column`` should be either length of one or length of ``data``. # If value of ``numeric.column`` is not set, its value will depend on the structure of ``data``. # If ``data`` is a data frame, the default value for ``numeric.column`` is all the numeric column starting from the fourth column. # If ``data`` is a list of data frame, the default value for ``numeric.column`` is a vector which have the same length as ``data`` # and the value in default ``numeric.column`` is the index of the first numeric column in corresponding data frame. # -jitter Numeric. Only works for adding points in ``circos.genomicTrackPlotRegion`` under ``stack`` mode # -panel.fun Self-defined function which will be applied on each sector. Please not it is different # from that in `circos.trackPlotRegion`. In this function, there are two arguments (``region`` and ``value``) plus ``...``. # In them, ``region`` is a two-column data frame with start positions and end positions in current genomic category (e.g. chromosome). # ``value`` is a data frame which is derived from ``data`` but excluding the first three columns. Rows in ``value`` correspond to # rows in ``region``. ``...`` is mandatory and is used to pass internal parameters to other functions. The definition of # ``value`` will be different according to different input data (data frame or list of data frame) and different settings (stacked or not), # please refer to 'details' section and vignettes to detailed explanation. # -... Pass to `circos.trackPlotRegion`. # # == details # Similar as `circos.trackPlotRegion`, users can add customized graphics by ``panel.fun``, but the behaviour of ``panel.fun`` # will change depending on users' input data and ``stack`` setting. # # When ``data`` is a single data frame, ``region`` in ``panel.fun`` is a data frame containing the second and third column in ``data`` in 'current` genomic category (e.g. current chromosome). # ``value`` is also a data frame containing columns in ``data`` excluding the first three columns. # # When ``data`` is a list containing data frames, ``panel.fun`` will be applied iteratively on each data frame, thus, # ``region`` is extracted from the data frame which is in the current iteration. For example, if ``data`` contains two data frames, ``panel.fun`` # will be applied with the first data frame in current chromosome and then applied with the second data frame in the same chromosome. # # If ``stack`` is set to ``TRUE``, ``ylim`` will be re-defined. in ``stack`` mode, the y-axis will be splitted into several part # with equal height and graphics will be drawn on each 'horizontal' lines (y = 1, 2, ...). In this case: # # When ``data`` is a single data frame containing one or more numeric columns, each numeric column defined in ``numeric.column`` will be treated as a single unit. # ``ylim`` is re-defined to ``c(0.5, n+0.5)`` in which ``n`` is number of numeric columns. ``panel.fun`` will be applied iteratively on each numeric column. In each # iteration, in ``panel.fun``, ``region`` is still the genomic regions in current genomic category, but ``value`` contains current numeric column plus all non-numeric columns. # Under ``stack`` mode, in ``panel.fun``, all low-level genomic graphical functions will draw on the 'horizontal line' ``y = i`` in which ``i`` is the index of current numeric column # and the value of ``i`` can be obtained by `getI`. # # When ``data`` is a list containing data frames, each data frame will be treated as a single unit. The situation is quite similar as described in previous paragraph. # ``ylim`` is re-defined to ``c(0.5, n+0.5)`` in which ``n`` is number of data frames. ``panel.fun`` will be applied iteratively on each data frame. In each # iteration, in ``panel.fun``, ``region`` is still the genomic regions in current genomic category, and ``value`` contains columns in current data frame excluding the first three columns. # Under ``stack`` mode, in ``panel.fun``, all low-level genomic graphical functions will draw on the 'horizontal line' ``y = i`` in which ``i`` is the index of current data frame. # # Being different from ``panel.fun`` in `circos.trackPlotRegion`, there should be an additional argument ``...`` in ``panel.fun``. This additional # argument is used to pass hidden values to low-level graphical functions. So if you are using functions like ``circos.genomicPoints``, you should also # add ``...`` as an additional argument into ``circos.genomicPoints``. # # == seealso # https://jokergoo.github.io/circlize_book/book/genomic-plotting-region.html and https://jokergoo.github.io/circlize_book/book/modes-of-input.html # circos.genomicTrackPlotRegion = function( data = NULL, ylim = NULL, stack = FALSE, numeric.column = NULL, jitter = 0, panel.fun = function(region, value, ...) {NULL}, ... ) { if(is.null(data)) { all.sector.index = get.all.sector.index() data = data.frame(all.sector.index, rep(0, length(all.sector.index)), rep(0, length(all.sector.index))) } if(is.function(data) || is.function(ylim) || is.function(stack) || is.function(numeric.column)) { stop_wrap("The panel function should be set explicitly with the argument name `panel.fun = ...`.") } # re-define panel.fun genomicPanelFun = panel.fun # now `data` is either a data frame or a list of data frame data = normalizeToDataFrame(data) if(is.dataFrameList(data)) { for(i in seq_along(data)) { data[[i]][[1]] = as.character(data[[i]][[1]]) if(circos.par$ring) { l = data[[i]][, 2] > data[[i]][, 3] if(any(l)) { data[[i]][l, 2] = data[[i]][l, 2] - diff(get.sector.data()[c("min.value", "max.value")]) } } validate_region(data[[i]], check_chr = FALSE) } } else { data[[1]] = as.character(data[[1]]) if(circos.par$ring) { l = data[, 2] > data[, 3] if(any(l)) { data[l, 2] = data[l, 2] - diff(get.sector.data()[c("min.value", "max.value")]) } } validate_region(data, check_chr = FALSE) } # excluding the first three columns if(!is.null(numeric.column)) { if(is.numeric(numeric.column)) { numeric.column = numeric.column - 3 } if(any(numeric.column <= 0)) { stop_wrap("Wrong value in `numeric.column`, they should be larger than 3 or character index.") } } # auto calcualte numeric column if(is.dataFrameList(data)) { if(!is.null(numeric.column)) { if(length(numeric.column) == 1) { numeric.column = rep(list(numeric.column), length(data)) } else if(length(numeric.column) == length(data)) { } else { stop_wrap("Length of `numeric.column` should only be one or length of ``data`` if it is a list of data frames.") } for(i in seq_along(data)) { if(!is.numeric(data[[i]][-(1:3)][, numeric.column[i]])) { stop_wrap("Some of your `numeric.column` are not numeric.") } } } else { numeric.column = sapply(data, function(gr) { nc = which(as.logical(sapply(gr[-(1:3)], is.numeric))) if(length(nc) == 0) { NA } else { nc[1] } }) } } else { # check numeric.column if(is.null(numeric.column)) { numeric.column = which(as.logical(sapply(data[-(1:3)], is.numeric))) } else { if(!all(sapply(data[-(1:3)][, numeric.column, drop = FALSE], is.numeric))) { stop_wrap("Some of your `numeric.column` are not numeric.") } } } args = formals(genomicPanelFun) if(!(length(args) == 3 && names(args)[3] == "...")) { stop_wrap("The `panel.fun` need a third argument `...` to pass special parameters to graphical functions.") } if(stack) { if(is.dataFrameList(data)) { n = length(data) circos.trackPlotRegion(ylim = c(0.5, n + 0.5), panel.fun = function(x, y) { chr = get.current.chromosome() for(i in seq_len(n)) { l = data[[i]][[1]] == chr df = data[[i]][l, , drop = FALSE] if(nrow(df)) { .param = new.env() assign("i", i, envir = .param) assign("stack", TRUE, envir = .param) assign("jitter", jitter, envir = .param) if(!is.null(numeric.column) && !is.na(numeric.column[i])) { assign("numeric.column", numeric.column[i], envir = .param) } genomicPanelFun(df[2:3], df[-(1:3)], .param = .param) } } }, ...) } else { n = length(numeric.column) non.numeric.column = setdiff(seq_along(data[-(1:3)]), numeric.column) # if there is no numeric column if(n == 0) { circos.trackPlotRegion(ylim = c(0.5, 1 + 0.5), panel.fun = function(x, y) { chr = get.current.chromosome() l = data[[1]] == chr df = data[l, , drop = FALSE] i = 1 if(nrow(df)) { .param = new.env() assign("i", i, envir = .param) assign("stack", TRUE, envir = .param) assign("jitter", jitter, envir = .param) genomicPanelFun(df[2:3], df[-(1:3)][non.numeric.column], .param = .param) } }, ...) } else { circos.trackPlotRegion(ylim = c(0.5, n + 0.5), panel.fun = function(x, y) { chr = get.current.chromosome() for(i in seq_len(n)) { l = data[[1]] == chr df = data[l, , drop = FALSE] if(nrow(df)) { .param = new.env() assign("i", i, envir = .param) assign("stack", TRUE, envir = .param) assign("numeric.column", 1, envir = .param) assign("jitter", jitter, envir = .param) genomicPanelFun(df[2:3], df[-(1:3)][c(numeric.column[i], non.numeric.column)], .param = .param) } } }, ...) } } } else { # auto calculate ylim if(is.null(ylim)) { if(is.dataFrameList(data)) { ylim = range(unlist(lapply(seq_along(data), function(i) { gr = data[[i]] if(is.na(numeric.column[i])) { stop_wrap("There is no numeric column in one of your data frame which calculation of `ylim` depends on. Or you can set `ylim` explicitely.") } range(unlist(lapply(gr[-(1:3)][ numeric.column[i] ], range, na.rm = TRUE))) }))) } else { if(length(numeric.column) == 0) { stop_wrap("There is no numeric column in your data frame which calculation of `ylim` depends on. Or you can set `ylim` explicitely.") } ylim = range(unlist(lapply(data[-(1:3)][numeric.column], range, na.rm = TRUE))) } if(ylim[1] == ylim[2]) { stop_wrap("It seems the data points are all the same. Please explicitly set values to `ylim`.") } } if(is.dataFrameList(data)) { circos.trackPlotRegion(ylim = ylim, panel.fun = function(x, y) { chr = get.current.chromosome() for(i in seq_along(data)) { l = data[[i]][, 1] == chr df = data[[i]][l, , drop = FALSE] if(nrow(df)) { .param = new.env() assign("i", i, envir = .param) if(!is.na(numeric.column[i])) { assign("numeric.column", numeric.column[i], envir = .param) } genomicPanelFun(df[2:3], df[-(1:3)], .param = .param) } } }, ...) } else { circos.trackPlotRegion(ylim = ylim, panel.fun = function(x, y) { chr = get.current.chromosome() df = data[data[[1]] == chr, , drop = FALSE] if(nrow(df)) { .param = new.env() assign("i", 1, envir = .param) if(length(numeric.column)) { assign("numeric.column", numeric.column, envir = .param) } genomicPanelFun(df[2:3], df[-(1:3)], .param = .param) } }, ...) } } } # == title # Create a track for genomic graphics # # == param # -... Pass to `circos.genomicTrackPlotRegion`. # # == details # shortcut function of `circos.genomicTrackPlotRegion`. # circos.genomicTrack = function(...) { circos.genomicTrackPlotRegion(...) } # == title # Which data that ``panel.fun`` is using # # == param # -... Invisible arguments that users do not need to care # # == details # The function should only be put inside ``panel.fun`` when using `circos.genomicTrackPlotRegion`. # # If ``stack`` is set to ``TRUE`` in `circos.genomicTrackPlotRegion`, the returned value # indicates which stack the function will be applied to. # # If ``data`` is a list of data frames, the value # indicates which data frame is being used. Please see the vignette to get a more clear explanation. getI = function(...) { args = list(...) if(is.null(args$.param)) { stop_wrap("Maybe you should call like `getI(...)`") } .param = args$.param return(.param$i) } # == title # Add points to a plotting region, specifically for genomic graphics # # ==param # -region A data frame contains 2 columns which correspond to start positions and end positions. # -value A data frame contains values and other information. # -numeric.column Which column in ``value`` data frame should be taken as y-value. # If it is not defined, the whole numeric columns in ``value`` will be taken. # -sector.index Index of sector. # -track.index Index of track. # -posTransform Self-defined function to transform genomic positions, see `posTransform.default` for explanation # -col Color of points. If there is only one numeric column, the length of ``col`` can be either one or number of rows of ``region``. # If there are more than one numeric column, the length of ``col`` can be either one or number of numeric columns. # Pass to `circos.points`. # -pch Type of points. Settings are similar as ``col``. Pass to `circos.points`. # -cex Size of points. Settings are similar as ``col``. Pass to `circos.points`. # -bg Background colors for points. # -... Mysterious parameters. # # == details # The function is a low-level graphical function and usually is put in ``panel.fun`` when using `circos.genomicTrack`. # # The function behaviours differently from different formats of input, see the examples in # the "Examples" Section or go to https://jokergoo.github.io/circlize_book/book/modes-of-input.html for more details. # # == example # circos.par("track.height" = 0.1) # circos.initializeWithIdeogram(plotType = NULL) # # bed = generateRandomBed(nr = 100) # circos.genomicTrack(bed, panel.fun = function(region, value, ...) { # circos.genomicPoints(region, value, pch = 16, cex = 0.5, ...) # }) # # circos.genomicTrack(bed, stack = TRUE, panel.fun = function(region, value, ...) { # circos.genomicPoints(region, value, pch = 16, cex = 0.5, ...) # i = getI(...) # cell.xlim = get.cell.meta.data("cell.xlim") # circos.lines(cell.xlim, c(i, i), lty = 2, col = "#00000040") # }) # # bed1 = generateRandomBed(nr = 100) # bed2 = generateRandomBed(nr = 100) # bed_list = list(bed1, bed2) # # # data frame list # circos.genomicTrack(bed_list, panel.fun = function(region, value, ...) { # cex = (value[[1]] - min(value[[1]]))/(max(value[[1]]) - min(value[[1]])) # i = getI(...) # circos.genomicPoints(region, value, cex = cex, pch = 16, col = i, ...) # }) # # circos.genomicTrack(bed_list, stack = TRUE, # panel.fun = function(region, value, ...) { # cex = (value[[1]] - min(value[[1]]))/(max(value[[1]]) - min(value[[1]])) # i = getI(...) # circos.genomicPoints(region, value, cex = cex, pch = 16, col = i, ...) # cell.xlim = get.cell.meta.data("cell.xlim") # circos.lines(cell.xlim, c(i, i), lty = 2, col = "#00000040") # }) # # bed = generateRandomBed(nr = 100, nc = 4) # circos.genomicTrack(bed, panel.fun = function(region, value, ...) { # cex = (value[[1]] - min(value[[1]]))/(max(value[[1]]) - min(value[[1]])) # circos.genomicPoints(region, value, cex = 0.5, pch = 16, col = 1:4, ...) # }) # # circos.genomicTrack(bed, stack = TRUE, panel.fun = function(region, value, ...) { # cex = (value[[1]] - min(value[[1]]))/(max(value[[1]]) - min(value[[1]])) # i = getI(...) # circos.genomicPoints(region, value, cex = cex, pch = 16, col = i, ...) # cell.xlim = get.cell.meta.data("cell.xlim") # circos.lines(cell.xlim, c(i, i), lty = 2, col = "#00000040") # }) # # circos.clear() # circos.genomicPoints = function( region, value, numeric.column = NULL, sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), posTransform = NULL, pch = par("pch"), col = par("col"), cex = par("cex"), bg = par("bg"), ...) { nr = nrow(region) if(ncol(region) > 2 && inherits(region[, 1], c("character", "factor"))) { region = region[, -1, drop = FALSE] } if(is.atomic(value) && length(value) == 1) { value = data.frame(value = rep(value, nr)) } if(is.atomic(value) && length(value) == nr) { value = data.frame(value = value) } if(!is.data.frame(value)) stop_wrap("`value` should be a data frame.") args = list(...) if(!is.null(args$.param)) { .param = args$.param if(!is.null(.param$stack)) { if(.param$stack && is.null(numeric.column)) { if(is.null(.param$jitter)) { value = data.frame(hline = rep(.param$i, nr)) } else { value = data.frame(hline = rep(.param$i, nr) + (runif(nr) - 0.5)*abs(.param$jitter)) } numeric.column = 1 } } else if(!is.null(.param$numeric.column) && is.null(numeric.column)) { numeric.column = .param$numeric.column } } if(is.vector(value) && !is.list(value) && length(value) == 1) { value = data.frame(value = rep(value, nr)) numeric.column = 1 } else if(is.vector(value) && !is.list(value) && length(value) == nr) { value = data.frame(value = value) numeric.column = 1 } if(ncol(value) == 1) numeric.column = 1 if(!is.null(posTransform)) { region = posTransform(region) } if(is.null(numeric.column)) { numeric.column = which(as.logical(sapply(value, is.numeric))) if(length(numeric.column) == 0) { stop_wrap("Cannot find numeric column.") } } nc = length(numeric.column) pch = .normalizeGraphicalParam(pch, nc, nr, "pch") col = .normalizeGraphicalParam(col, nc, nr, "col") cex = .normalizeGraphicalParam(cex, nc, nr, "cex") bg = .normalizeGraphicalParam(bg, nc, nr, "cex") if(nc == 1) { circos.points( (region[[1]] + region[[2]])/2, value[[ numeric.column ]], pch = pch, col = col, cex = cex, bg = bg, sector.index = sector.index, track.index = track.index ) } else { for(i in seq_len(nc)) { circos.points( (region[[1]] + region[[2]])/2, value[[ numeric.column[i] ]], pch = pch[i], col = col[i], cex = cex[i], bg = bg[i], sector.index = sector.index, track.index = track.index ) } } } # == title # Add lines to a plotting region, specifically for genomic graphics # # == param # -region A data frame contains 2 column which correspond to start positions and end positions. # -value A data frame contains values and other information. # -numeric.column Which column in ``value`` data frame should be taken as y-value. # If it is not defined, the whole numeric columns in ``value`` will be taken. # -sector.index Index of sector. # -track.index Index of track. # -posTransform Self-defined function to transform genomic positions, see `posTransform.default` for explaination. # -col col of lines/areas. If there are more than one numeric column, the length of ``col`` can be either one or number of numeric columns. # If there is only one numeric column and type is either ``segment`` or ``h``, # the length of ``col`` can be either one or number of rows of ``region``. # pass to `circos.lines` # -lwd Settings are similar as ``col``. Pass to `circos.lines`. # -lty Settings are similar as ``col``. Pass to `circos.lines`. # -type There is an additional option ``segment`` which plot segment lines from start position to end position. Settings are similar as ``col``. Pass to `circos.lines`. # -area Settings are similar as ``col``. Pass to `circos.lines`. # -area.baseline Deprecated, use ``baseline`` instead. # -baseline Settings are similar as ``col``. Pass to `circos.lines`. # -border Settings are similar as ``col``. Pass to `circos.lines`. # -pt.col Settings are similar as ``col``. Pass to `circos.lines`. # -cex Settings are similar as ``col``. Pass to `circos.lines`. # -pch Settings are similar as ``col``. Pass to `circos.lines`. # -... Mysterious parameters. # # == details # The function is a low-level graphical function and usually is put in ``panel.fun`` when using `circos.genomicTrack`. # # The function behaviours differently from different formats of input, see the examples in # the "Examples" Section or go to https://jokergoo.github.io/circlize_book/book/modes-of-input.html for more details. # # == examples # \donttest{ # ### test bed # circos.par("track.height" = 0.1) # circos.initializeWithIdeogram(plotType = NULL) # # bed = generateRandomBed(nr = 100) # circos.genomicTrack(bed, panel.fun = function(region, value, ...) { # circos.genomicLines(region, value, type = "l", ...) # }) # # bed1 = generateRandomBed(nr = 100) # bed2 = generateRandomBed(nr = 100) # bed_list = list(bed1, bed2) # # circos.genomicTrack(bed_list, panel.fun = function(region, value, ...) { # i = getI(...) # circos.genomicLines(region, value, col = i, ...) # }) # # circos.genomicTrack(bed_list, stack = TRUE, # panel.fun = function(region, value, ...) { # i = getI(...) # circos.genomicLines(region, value, col = i, ...) # }) # # bed = generateRandomBed(nr = 100, nc = 4) # circos.genomicTrack(bed, panel.fun = function(region, value, ...) { # circos.genomicLines(region, value, col = 1:4, ...) # }) # # circos.genomicTrack(bed, stack = TRUE, panel.fun = function(region, value, ...) { # i = getI(...) # circos.genomicLines(region, value, col = i, ...) # }) # # bed = generateRandomBed(nr = 100) # circos.genomicTrack(bed, panel.fun = function(region, value, ...) { # circos.genomicLines(region, value, type = "segment", lwd = 2, ...) # }) # # circos.clear() # } circos.genomicLines = function( region, value, numeric.column = NULL, sector.index = get.current.sector.index(), track.index = get.current.track.index(), posTransform = NULL, col = ifelse(area, "grey", "black"), lwd = par("lwd"), lty = par("lty"), type = "l", area = FALSE, area.baseline = NULL, border = "black", baseline = "bottom", pt.col = par("col"), cex = par("cex"), pch = par("pch"), ...) { if(!is.null(area.baseline)) { baseline = area.baseline warning_wrap("`area.baseline` is deprecated, please use `baseline` instead.") } nr = nrow(region) if(ncol(region) > 2 && inherits(region[, 1], c("character", "factor"))) { region = region[, -1, drop = FALSE] } if(is.atomic(value) && length(value) == 1) { value = data.frame(value = rep(value, nr)) } if(is.atomic(value) && length(value) == nr) { value = data.frame(value = value) } if(!is.data.frame(value)) stop_wrap("`value` should be a data frame.") args = list(...) if(!is.null(args$.param)) { .param = args$.param if(!is.null(.param$stack)) { if(.param$stack && is.null(numeric.column)) { value = data.frame(hline = rep(.param$i, nr)) numeric.column = 1 type = rep("segment", length(type)) } } else if(!is.null(.param$numeric.column) && is.null(numeric.column)) { numeric.column = .param$numeric.column } } if(is.vector(value) && !is.list(value) && length(value) == 1) { value = data.frame(value = rep(value, nr)) numeric.column = 1 } if(is.vector(value) && !is.list(value) && length(value) == nr) { value = data.frame(value = value) numeric.column = 1 } if(ncol(value) == 1) numeric.column = 1 if(!is.null(posTransform)) { region = posTransform(region) } if(is.null(numeric.column)) { numeric.column = which(as.logical(sapply(value, is.numeric))) if(length(numeric.column) == 0) { stop_wrap("Cannot find numeric column.") } } nc = length(numeric.column) if(all(type %in% c("h", "segment"))) { col = .normalizeGraphicalParam(col, nc, nr, "col") lwd = .normalizeGraphicalParam(lwd, nc, nr, "col") lty = .normalizeGraphicalParam(lty, nc, nr, "col") } else { col = .normalizeGraphicalParam(col, nc, 1, "col") lwd = .normalizeGraphicalParam(lwd, nc, 1, "col") lty = .normalizeGraphicalParam(lty, nc, 1, "col") } pt.col = .normalizeGraphicalParam(pt.col, nc, 1, "col") cex = .normalizeGraphicalParam(cex, nc, 1, "col") pch = .normalizeGraphicalParam(pch, nc, 1, "col") type = .normalizeGraphicalParam(type, nc, 1, "col") area = .normalizeGraphicalParam(area, nc, 1, "col") baseline = .normalizeGraphicalParam(baseline, nc, 1, "col") border = .normalizeGraphicalParam(border, nc, 1, "col") if(!is.null(args$hline)) { # for(i in seq_len(nr)) { # circos.lines( c(region[i, 1], region[i, 2]), c(value[i, numeric.column], value[i, numeric.column]), # col = col, lwd = lwd, lty = lty, type = "l", # sector.index = sector.index, track.index = track.index ) # } circos.segments( region[, 1], value[, numeric.column], region[, 2], value[, numeric.column], col = col, lwd = lwd, lty = lty, sector.index = sector.index, track.index = track.index ) } else if(nc == 1) { if(type == "segment") { # for(i in seq_len(nr)) { # circos.lines( c(region[i, 1], region[i, 2]), c(value[i, numeric.column], value[i, numeric.column]), # col = col[i], lwd = lwd[i], lty = lty[i], type = "l", # sector.index = sector.index, track.index = track.index ) # } circos.segments( region[, 1], value[, numeric.column], region[, 2], value[, numeric.column], col = col, lwd = lwd, lty = lty, sector.index = sector.index, track.index = track.index ) } else { circos.lines( (region[[1]] + region[[2]])/2, value[[ numeric.column ]], col = col, lwd = lwd, lty = lty, type = type, area = area, baseline = baseline, border = border, pt.col = pt.col, cex = cex, pch = pch, sector.index = sector.index, track.index = track.index ) } } else { for(i in seq_len(nc)) { if(type[i] == "segment") { # for(k in seq_len(nr)) { # circos.lines( c(region[k, 1], region[k, 2]), c(value[k, numeric.column[i] ], value[k, numeric.column[i] ]), # col = col[i], lwd = lwd[i], lty = lty[i], type = "l", # sector.index = sector.index, track.index = track.index ) # } circos.segments( region[, 1], value[, numeric.column[i] ], region[, 2], value[, numeric.column[i] ], col = col[i], lwd = lwd[i], lty = lty[i], type = "l", sector.index = sector.index, track.index = track.index ) } else { circos.lines( (region[[1]] + region[[2]])/2, value[[ numeric.column[i] ]], col = col[i], lwd = lwd[i], lty = lty[i], type = type[i], area = area[i], baseline = baseline[i], border = border[i], pt.col = pt.col[i], cex = cex[i], pch = pch[i], sector.index = sector.index, track.index = track.index ) } } } } # == title # Draw rectangle-like grid, specifically for genomic graphics # # == param # -region A data frame contains 2 column which correspond to start positions and end positions. # -value A data frame contains values and other information. # -ytop A vector or a single value indicating top position of rectangles. # -ybottom A vector or a single value indicating bottom position of rectangles. # -ytop.column If ``ytop`` is in ``value``, the index of the column. # -ybottom.column If ``ybottom`` is in ``value``, the index of the column. # -sector.index Index of sector. # -track.index Index of track. # -posTransform Self-defined function to transform genomic positions, see `posTransform.default` for explaination. # -col The length of ``col`` can be either one or number of rows of ``region``. Pass to `circos.rect`. # -border Settings are similar as ``col``. Pass to `circos.rect`. # -lty Settings are similar as ``col``. Pass to `circos.rect`. # -... Mysterious parameters. # # == details # The function is a low-level graphical function and usually is put in ``panel.fun`` when using `circos.genomicTrack`. # # The function behaviours differently from different formats of input, see the examples in # the "Examples" Section or go to https://jokergoo.github.io/circlize_book/book/modes-of-input.html for more details. # # == example # \donttest{ # circos.par("track.height" = 0.1, cell.padding = c(0, 0, 0, 0)) # circos.initializeWithIdeogram(plotType = NULL) # # bed1 = generateRandomBed(nr = 100) # bed2 = generateRandomBed(nr = 100) # bed_list = list(bed1, bed2) # f = colorRamp2(breaks = c(-1, 0, 1), colors = c("green", "black", "red")) # circos.genomicTrack(bed_list, stack = TRUE, # panel.fun = function(region, value, ...) { # # circos.genomicRect(region, value, col = f(value[[1]]), # border = NA, ...) # i = getI(...) # cell.xlim = get.cell.meta.data("cell.xlim") # circos.lines(cell.xlim, c(i, i), lty = 2, col = "#000000") # }) # # circos.genomicTrack(bed_list, ylim = c(0, 3), # panel.fun = function(region, value, ...) { # i = getI(...) # circos.genomicRect(region, value, ytop = i+0.4, ybottom = i-0.4, col = f(value[[1]]), # border = NA, ...) # # cell.xlim = get.cell.meta.data("cell.xlim") # circos.lines(cell.xlim, c(i, i), lty = 2, col = "#000000") # }) # # circos.genomicTrack(bed1, panel.fun = function(region, value, ...) { # circos.genomicRect(region, value, col = "red", border = NA, ...) # # }) # # circos.genomicTrack(bed_list, panel.fun = function(region, value, ...) { # i = getI(...) # circos.genomicRect(region, value, col = i, border = NA, ...) # # }) # # circos.clear() # } circos.genomicRect = function( region, value = NULL, ytop = NULL, ybottom = NULL, ytop.column = NULL, ybottom.column = NULL, sector.index = get.current.sector.index(), track.index = get.current.track.index(), posTransform = NULL, col = NA, border = "black", lty = par("lty"), ...) { if(ncol(region) > 2 && inherits(region[, 1], c("character", "factor"))) { region = region[, -1, drop = FALSE] } nr = nrow(region) args = list(...) if(!is.null(args$.param)) { .param = args$.param if(!is.null(.param$stack)) { if(.param$stack) { if(is.null(ytop)) ytop = .param$i + 0.5 if(is.null(ybottom)) ybottom = .param$i - 0.5 } } } if(is.atomic(value) && length(value) == 1) { value = data.frame(value = rep(value, nr)) } if(is.atomic(value) && length(value) == nr) { value = data.frame(value = value) } # 1. check ytop and ybottom # 2. check ytop.colum and ybottom.column if(!is.null(ytop)) { if(length(ytop) == 1) { ytop = rep(ytop, nr) } value = cbind(value, ytop) ytop.column = ncol(value) } if(!is.null(ybottom)) { if(length(ybottom) == 1) { ybottom = rep(ybottom, nr) } value = cbind(value, ybottom) ybottom.column = ncol(value) } if(is.matrix(value)) value = as.data.frame(value) if(!is.data.frame(value)) stop_wrap("`value` should be a data frame.") ylim = get.cell.meta.data("ylim", sector.index = sector.index, track.index = track.index) if(is.null(ybottom.column) && is.null(ytop.column)) { # if no ybottom and ytop column are set, the rect will draw along whole ylim value = cbind(value, rep(ylim[2], nr), rep(ylim[1], nr)) ytop.column = ncol(value) - 1 ybottom.column = ncol(value) } else if(is.null(ybottom.column)) { value = cbind(value, rep(ylim[1], nr)) ybottom.column = ncol(value) } else if(is.null(ytop.column)) { value = cbind(value, rep(ylim[2], nr)) ytop.column = ncol(value) } if(!is.null(posTransform)) { region = posTransform(region) } if(length(ytop.column) > 1) { stop_wrap("Only one ytop columns is allowed.") } if(length(ybottom.column) > 1) { stop_wrap("Only one ybottom columns is allowed.") } col = .normalizeGraphicalParam(col, 1, nr, "col") border = .normalizeGraphicalParam(border, 1, nr, "border") lty = .normalizeGraphicalParam(lty, 1, nr, "lty") # for(i in seq_len(nr)) { # circos.rect(region[i, 1], value[i, ybottom.column], region[i, 2], value[i, ytop.column], # sector.index = sector.index, track.index = track.index, # col = col[i], border = border[i], lwd = lwd[i], lty = lty[i]) # } circos.rect(region[, 1], value[, ybottom.column], region[, 2], value[, ytop.column], sector.index = sector.index, track.index = track.index, col = col, border = border, lty = lty) } # == title # Draw text in a cell, specifically for genomic graphics # # == param # -region A data frame contains 2 column which correspond to start positions and end positions. # -value A data frame contains values and other information. # -y A vector or a single value indicating position of text. # -labels Labels of text corresponding to each genomic positions. # -labels.column If labels are in ``value``, index of column in ``value``. # -numeric.column Which column in ``value`` data frame should be taken as y-value. # If it is not defined, only the first numeric columns in ``value`` will be taken. # -sector.index Index of sector. # -track.index Index of track. # -posTransform Self-defined function to transform genomic positions, see `posTransform.default` for explanation. # -facing Passing to `circos.text`. Settings are similar as ``col``. # -niceFacing Should the facing of text be adjusted to fit human eyes? # -direction Deprecated, use ``facing`` instead. # -adj Pass to `circos.text`. Settings are similar as ``col``. # -cex Pass to `circos.text`. Settings are similar as ``col``. # -col Pass to `circos.text`. The length of ``col`` can be either one or number of rows of ``region``. # -font Pass to `circos.text`. Settings are similar as ``col``. # -padding pass to ``posTransform`` if it is set as `posTransform.text`. # -extend pass to ``posTransform`` if it is set as `posTransform.text`. # -align_to pass to ``posTransform`` if it is set as `posTransform.text`. # -... Mysterious parameters. # # == details # The function is a low-level graphical function and usually is put in ``panel.fun`` when using `circos.genomicTrack`. # # == example # circos.par("track.height" = 0.1, cell.padding = c(0, 0, 0, 0)) # circos.initializeWithIdeogram(plotType = NULL) # # bed = generateRandomBed(nr = 20) # # circos.genomicTrack(bed, ylim = c(0, 1), panel.fun = function(region, value, ...) { # circos.genomicText(region, value, y = 0.5, labels = "text", ...) # }) # # bed = cbind(bed, sample(letters, nrow(bed), replace = TRUE)) # circos.genomicTrack(bed, panel.fun = function(region, value, ...) { # circos.genomicText(region, value, labels.column = 2, ...) # }) # # circos.clear() circos.genomicText = function( region, value = NULL, y = NULL, labels = NULL, labels.column = NULL, numeric.column = NULL, sector.index = get.current.sector.index(), track.index = get.current.track.index(), posTransform = NULL, direction = NULL, facing = "inside", niceFacing = FALSE, adj = par("adj"), cex = 1, col = "black", font = par("font"), padding = 0, extend = 0, align_to = "region", ...) { if(!is.null(direction)) { facing = direction warning_wrap("`direction` is deprecated, please use `facing` instead.") } if(ncol(region) > 2 && inherits(region[, 1], c("character", "factor"))) { region = region[, -1, drop = FALSE] } nr = nrow(region) if(is.vector(value) && !is.list(value) && length(value) == 1) { value = data.frame(value = rep(value, nr)) numeric.column = 1 } if(is.vector(value) && !is.list(value) && length(value) == nr) { value = data.frame(value = value) numeric.column = 1 } args = list(...) if(!is.null(args$.param)) { .param = args$.param if(!is.null(.param$stack)) { if(.param$stack && is.null(numeric.column)) { value = data.frame(hline = rep(.param$i, nr)) numeric.column = 1 } } else if(!is.null(.param$numeric.column) && is.null(numeric.column)) { numeric.column = .param$numeric.column } } if(!is.null(y)) { if(length(y) == 1) { y = rep(y, nr) } value = cbind(value, y) numeric.column = ncol(value) } if(is.matrix(value)) value = as.data.frame(value) if(!is.data.frame(value)) stop_wrap("`value` should be a data frame.") if(is.null(labels) && is.null(labels.column)) { stop_wrap("You should either specify `labels` or `labels.column`.") } if(!is.null(labels)) { if(is.vector(labels) && !is.list(labels) && length(labels) == 1) { value = cbind(value, labels = rep(labels, nr)) labels.column = ncol(value) } if(is.vector(labels) && !is.list(labels) && length(labels) == nr) { value = cbind(value, labels = labels) labels.column = ncol(value) } } if(is.null(numeric.column)) { numeric.column = which(as.logical(sapply(value, is.numeric))) if(length(numeric.column) == 0) { stop_wrap("Cannot find numeric column.") } numeric.column = numeric.column[1] } if(length(numeric.column) > 1) { stop_wrap("You can only have one numeric column.") } if(!is.null(posTransform)) { # check settings when it is text-specific transformation if(identical(posTransform, posTransform.text)) { if(! facing %in% c("clockwise", "reverse.clockwise")) { stop_wrap("Only support `facing` in c('clockwise', 'reverse.clockwise') if `posTransform` is `posTransform.text`.") } region = posTransform(region, value[[ numeric.column ]], value[[labels.column]], cex, font, padding = padding, extend = extend, align_to = align_to) } else { region = posTransform(region) } } nc = length(numeric.column) col = .normalizeGraphicalParam(col, nc, nr, "col") cex = .normalizeGraphicalParam(cex, nc, nr, "cex") font = .normalizeGraphicalParam(font, nc, nr, "font") circos.text( (region[[1]] + region[[2]])/2, value[[ numeric.column ]], value[[labels.column]], facing = facing, niceFacing = niceFacing, adj = adj, cex = cex, col = col, font = font, sector.index = sector.index, track.index = track.index) } # == title # Add links from two sets of genomic positions # # == param # -region1 A data frame in bed format. # -region2 A data frame in bed format. # -rou Pass to `circos.link`. # -rou1 Pass to `circos.link`. # -rou2 Pass to `circos.link`. # -col Pass to `circos.link`, length can be either one or nrow of ``region1``. # -lwd Pass to `circos.link`, length can be either one or nrow of ``region1``. # -lty Pass to `circos.link`, length can be either one or nrow of ``region1``. # -border Pass to `circos.link`, length can be either one or nrow of ``region1``. # -... Pass to `circos.link`. # # == details # Of course, number of rows should be same in ``region1`` and ``region2``. # # If you want to have more controls on links, please use `circos.link` directly. # # == seealso # https://jokergoo.github.io/circlize_book/book/genomic-plotting-region.html#genomic-links # # == example # \donttest{ # set.seed(123) # # bed1 = generateRandomBed(nr = 100) # bed1 = bed1[sample(nrow(bed1), 20), ] # bed2 = generateRandomBed(nr = 100) # bed2 = bed2[sample(nrow(bed2), 20), ] # circos.par("track.height" = 0.1, cell.padding = c(0, 0, 0, 0)) # circos.initializeWithIdeogram() # # circos.genomicLink(bed1, bed2, col = sample(1:5, 20, replace = TRUE), border = NA) # circos.clear() # } circos.genomicLink = function( region1, region2, rou = get_most_inside_radius(), rou1 = rou, rou2 = rou, col = "black", lwd = par("lwd"), lty = par("lty"), border = col, ...) { if(circos.par$ring) { l = region1[, 2] > region1[, 3] if(any(l)) { region1[l, 2] = region1[l, 2] - diff(get.sector.data()[c("min.value", "max.value")]) } l = region2[, 2] > region2[, 3] if(any(l)) { region2[l, 2] = region2[l, 2] - diff(get.sector.data()[c("min.value", "max.value")]) } } region1 = validate_data_frame(region1) region2 = validate_data_frame(region2) if(ncol(region1) == 2) { region1[, 3] = region1[, 2] } if(ncol(region2) == 2) { region2[, 3] = region2[, 2] } region1 = normalizeToDataFrame(region1, sort = FALSE) region2 = normalizeToDataFrame(region2, sort = FALSE) if(is.dataFrameList(region1)) { stop_wrap("`region1` can not be a region list.") } if(is.dataFrameList(region1)) { stop_wrap("`region1` can not be a region list.") } if(nrow(region1) != nrow(region2)) { stop_wrap("nrow of `region1` and `region2` differ. Please check the chromosome column and make sure all the chromosomes are in the circular layout.") } nr = nrow(region1) rou1 = .normalizeGraphicalParam(rou1, 1, nr, "rou") rou2 = .normalizeGraphicalParam(rou2, 1, nr, "rou") col = .normalizeGraphicalParam(col, 1, nr, "col") lwd = .normalizeGraphicalParam(lwd, 1, nr, "lwd") lty = .normalizeGraphicalParam(lty, 1, nr, "lty") border = .normalizeGraphicalParam(border, 1, nr, "border") for(i in seq_len(nr)) { if(region1[i, 2] == region1[i, 3]) { point1 = region1[i, 2] } else { point1 = c(region1[i, 2], region1[i, 3]) } if(region2[i, 2] == region2[i, 3]) { point2 = region2[i, 2] } else { point2 = c(region2[i, 2], region2[i, 3]) } circos.link(region1[i, 1], point1, region2[i, 1], point2, rou1 = rou1[i], rou2 = rou2[i], col = col[i], lwd = lwd[i], lty = lty[i], border = border[i], ...) } } # == title # Add genomic position transformation lines between tracks # # == param # -data A data frame containing genomic data. # -track.height Height of the track. # -posTransform Genomic position transformation function, see `posTransform.default` for an example. # -horizontalLine Whether to draw horizontal lines which indicate region width . # -track.margin Margin of tracks. # -direction Type of the transformation. ``inside`` means position transformed track are located inside # and ``outside`` means position transformed track are located outside. # -col Color of lines, can be length of one or nrow of ``data``. # -lwd Width of lines. # -lty Style of lines. # -... Pass to `circos.trackPlotRegion`. # # == details # There is one representative situation when such position transformation needs to be applied. # For example, there are two sets of regions in a chromosome in which regions in one set regions are # quite densely to each other and regions in other set are far from others. Heatmap or text is going # to be drawn on the next track. If there is no position transformation, heatmap or text for those # dense regions would be overlapped and hard to identify, also ugly to visualize. Thus, a way # to transform original positions to new positions would help for the visualization. circos.genomicPosTransformLines = function( data, track.height = 0.1, posTransform = NULL, horizontalLine = c("none", "top", "bottom", "both"), track.margin = c(0, 0), direction = c("inside", "outside"), col = "black", lwd = par("lwd"), lty = par("lty"), ...) { horizontalLine = match.arg(horizontalLine)[1] data = validate_data_frame(data) data = normalizeToDataFrame(data) if(is.dataFrameList(data)) { stop_wrap("`data` can not be list of regions.") } nr = nrow(data) if(length(col) == 1) { col = rep(col, nr) } if(length(lwd) == 1) { lwd = rep(lwd, nr) } if(length(lty) == 1) { lty = rep(lty, nr) } o.track.margin = circos.par("track.margin") circos.par(track.margin = track.margin) if(direction[1] == "default") direction = "outside" if(direction[1] == "reverse") direction = "inside" direction = match.arg(direction)[1] if(direction == "inside") { circos.genomicTrackPlotRegion(data, ylim = c(0, 1), bg.border = NA, track.height = track.height, panel.fun = function(region, value, ...) { chr = get.current.chromosome() l = data[[1]] == chr if(!is.null(posTransform)) { if(is.function(posTransform)) { args = as.list(posTransform) if(length(args) == 2) { region_new = posTransform(region) } else if(length(args) == 3) { region_new = posTransform(region, value) } } } else { region_new = region } # for(i in seq_len(nrow(region))) { # if(horizontalLine == "both" || horizontalLine == "top") { # circos.lines(c(region[i, 1], region[i, 2]), c(1, 1), col = col[l][i], lwd = lwd[l][i], lty = lty[l][i]) # } # if(horizontalLine == "both" || horizontalLine == "bottom") { # circos.lines(c(region[i, 1], region[i, 2]), c(0, 0), col = col[l][i], lwd = lwd[l][i], lty = lty[l][i]) # } # mid = (region[i, 1] + region[i, 2])/2 # mid_new = (region_new[i, 1] + region_new[i, 2])/2 # circos.lines(c(mid, mid, mid_new, mid_new), c(1, 2/3, 1/3, 0), col = col[l][i], lwd = lwd[l][i], lty = lty[l][i]) # } nr = nrow(region) if(horizontalLine == "both" || horizontalLine == "top") { circos.segments(region[, 1], rep(1, nr), region[, 2], rep(1, nr), col = col[l], lwd = lwd[l], lty = lty[l]) } if(horizontalLine == "both" || horizontalLine == "bottom") { circos.segments(region[, 1], rep(0, nr), region[, 2], rep(0, nr), col = col[l], lwd = lwd[l], lty = lty[l]) } mid = (region[, 1] + region[, 2])/2 mid_new = (region_new[, 1] + region_new[, 2])/2 circos.segments(mid, rep(1, nr), mid, rep(2/3, nr), col = col[l], lwd = lwd[l], lty = lty[l]) circos.segments(mid, rep(2/3, nr), mid_new, rep(1/3, nr), col = col[l], lwd = lwd[l], lty = lty[l]) circos.segments(mid_new, rep(1/3, nr), mid_new, rep(0, nr), col = col[l], lwd = lwd[l], lty = lty[l]) }, ...) } else { circos.genomicTrackPlotRegion(data, ylim = c(0, 1), bg.border = NA, track.height = track.height, panel.fun = function(region, value, ...) { chr = get.current.chromosome() l = data[[1]] == chr region_subset = data[l, , drop = FALSE] if(!is.null(posTransform)) { if(is.function(posTransform)) { args = as.list(posTransform) if(length(args) == 2) { region_new = posTransform(region) } else if(length(args) == 3) { region_new = posTransform(region, value) } } } else { region_new = region } # for(i in seq_len(nrow(region))) { # if(horizontalLine == "both" || horizontalLine == "bottom") { # circos.lines(c(region[i, 1], region[i, 2]), c(0, 0), col = col[l][i], lwd = lwd[l][i], lty = lty[l][i]) # } # if(horizontalLine == "both" || horizontalLine == "top") { # circos.lines(c(region[i, 1], region[i, 2]), c(1, 1), col = col[l][i], lwd = lwd[l][i], lty = lty[l][i]) # } # mid = (region[i, 1] + region[i, 2])/2 # mid_new = (region_new[i, 1] + region_new[i, 2])/2 # circos.lines(c(mid, mid, mid_new, mid_new), c(0, 1/3, 2/3, 1), col = col[l][i], lwd = lwd[l][i], lty = lty[l][i]) # } nr = nrow(region) if(horizontalLine == "both" || horizontalLine == "bottom") { circos.segments(region[, 1], rep(0, nr), region[, 2], rep(0, nr), col = col[l], lwd = lwd[l], lty = lty[l]) } if(horizontalLine == "both" || horizontalLine == "top") { circos.segments(region[, 1], rep(1, nr), region[, 2], rep(1, nr), col = col[l], lwd = lwd[l], lty = lty[l]) } mid = (region[, 1] + region[, 2])/2 mid_new = (region_new[, 1] + region_new[, 2])/2 circos.segments(mid, rep(0, nr), mid, rep(1/3, nr), col = col[l], lwd = lwd[l], lty = lty[l]) circos.segments(mid, rep(1/3, nr), mid_new, rep(2/3, nr), col = col[l], lwd = lwd[l], lty = lty[l]) circos.segments(mid_new, rep(2/3, nr), mid_new, rep(1, nr), col = col[l], lwd = lwd[l], lty = lty[l]) }, ...) } circos.par(track.margin = o.track.margin) } # == title # Calculate and add genomic density track # # == param # -data A bed-file-like data frame or a list of data frames. If the input is a list of data frames. # there will be multiple density plot in one same track. # -ylim.force Whether to force upper bound of ``ylim`` to be 1. Ignored if ``count_by`` is set to ``number``. # -window.size Pass to `genomicDensity`. # -overlap Pass to `genomicDensity`. # -count_by Pass to `genomicDensity`. # -col Colors. It should be length of one. If ``data`` is a list of data frames, the length of ``col`` # can also be the length of the list. If multiple sets of genomic regions are visualized in one # single track, you should set the colors with transparency to distinguish them. # -lwd Width of lines, the same setting as ``col`` argument. # -lty Style of lines, the same setting as ``col`` argument. # -type Type of lines, see `circos.lines`. # -area See `circos.lines`. # -area.baseline Deprecated, use ``baseline`` instead. # -baseline See `circos.lines`. # -border See `circos.lines`. # -... Pass to `circos.trackPlotRegion`. # # == details # This function is a high-level graphical function, and it will create a new track. # # If you have multiple sets of genomic regions, you should make sure the density ranges # for all sets are similar, or I suggest you should put them into different tracks. One example # can be found in the "Examples" Section where the density range for ``bed_list[[2]]`` is too high # compared to the range for ``bed_list[[1]]``, thus, it is better to put the two sets of # regions into two separate tracks. # # == seealso # https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#genomic-density-and-rainfall-plot # # == example # load(system.file(package = "circlize", "extdata", "DMR.RData")) # # # rainfall # \donttest{ # circos.initializeWithIdeogram(plotType = c("axis", "labels")) # # bed_list = list(DMR_hyper, DMR_hypo) # circos.genomicRainfall(bed_list, pch = 16, cex = 0.4, col = c("#FF000080", "#0000FF80")) # # circos.genomicDensity(bed_list[[1]], col = c("#FF000080"), track.height = 0.1) # circos.genomicDensity(bed_list[[2]], col = c("#0000FF80"), track.height = 0.1) # circos.clear() # # ############ draw the two densities in one track ############# # circos.initializeWithIdeogram(plotType = c("axis", "labels")) # circos.genomicDensity(bed_list, col = c("#FF000080", "#0000FF80"), track.height = 0.2) # circos.clear() # } circos.genomicDensity = function( data, ylim.force = FALSE, window.size = NULL, overlap = TRUE, count_by = c("percent", "number"), col = ifelse(area, "grey", "black"), lwd = par("lwd"), lty = par("lty"), type = "l", area = TRUE, area.baseline = NULL, baseline = 0, border = NA, ...) { if(!is.null(area.baseline)) { baseline = area.baseline warning_wrap("`area.baseline` is deprecated, please use `baseline` instead.") } data = normalizeToDataFrame(data) if(!is.dataFrameList(data)) { data = list(data) } if(length(col) == 1) { col = rep(col, length(data)) } if(length(lwd) == 1) { lwd = rep(lwd, length(data)) } if(length(lty) == 1) { lty = rep(lty, length(data)) } if(length(type) == 1) { type = rep(type, length(data)) } if(length(area) == 1) { area = rep(area, length(data)) } if(length(baseline) == 1) { baseline = rep(baseline, length(data)) } if(length(border) == 1) { border = rep(border, length(data)) } s = sapply(get.all.sector.index(), function(si) get.cell.meta.data("xrange", sector.index = si)) if(is.null(window.size)) { window.size = 10^nchar(sum(s))/1000 # around 100 major ticks #cat(window.size, "is choosen as the window size.\n") } count_by = match.arg(count_by)[1] df = vector("list", length = length(data)) for(i in seq_along(data)) { df[[i]] = genomicDensity(data[[i]], window.size = window.size, overlap = overlap, count_by = count_by) } if(ylim.force && count_by == "percent") { ymax = 1 } else { ymax = max(sapply(df, function(gr) max(gr[[4]]))) } if(length(df) == 1) { circos.genomicTrackPlotRegion(df[[1]], ylim = c(0, ymax), panel.fun = function(region, value, ...) { circos.genomicLines(region, value, col = col, lwd = lwd, lty = lty, type = type, border = border, area = area, baseline = baseline) }, ...) } else { circos.genomicTrackPlotRegion(df, ylim = c(0, ymax), panel.fun = function(region, value, ...) { i = getI(...) circos.genomicLines(region, value, col = col[i], lwd = lwd[i], lty = lty[i], type = type[i], border = border[i], area = area[i], baseline = baseline[i]) }, ...) } } # == title # Calculate genomic region density # # == param # -region Genomic positions. It can be a data frame with two # columns which are start positions and end positions on a single chromosome. # It can also be a bed-format data frame which contains the chromosome column. # -window.size Window size to calculate genomic density # -n.window number of windows, if it is specified, ``window.size`` is ignored # -overlap Whether two neighbouring windows have half overlap # -count_by How to count the value for each window, ``percent``: percent of the window covered by the input regions; ``number``: number of regions that overlap to the window. # -chr.len the chromosome length. The value should be named vector # # == details # It calculate the percent of each genomic windows that is covered by the input regions. # # == values # If the input is a two-column data frame, the function returns a data frame with three columns: # start position, end position and the overlapping (value depends on the ``count_by`` argument). And if the input is a bed-format # data frame, there will be an additionally chromosome name column. # # == example # bed = generateRandomBed() # bed = subset(bed, chr == "chr1") # head(genomicDensity(bed)) # head(genomicDensity(bed, count_by = "number")) genomicDensity = function( region, window.size = 1e7, n.window = NULL, overlap = TRUE, count_by = c("percent", "number"), chr.len = NULL) { region = validate_data_frame(region) if(is.character(region[, 1]) || is.factor(region[, 1])) { validate_region(region, check_chr = TRUE) region[, 1] = as.vector(region[, 1]) all_chr = unique(region[, 1]) if(!is.null(chr.len)) { if(length(all_chr) == 1 & length(chr.len) == 1) { names(chr.len) = all_chr[1] } } return(do.call("rbind", lapply(all_chr, function(chr) { l = region[,1] == chr if(is.null(chr.len)) { max_rg = NULL if(is.circos.initialized()) { if(chr %in% get.all.sector.index()) { max_rg = get.sector.data(sector.index = chr)["max.data"] } } } else { if(chr %in% names(chr.len)) { max_rg = chr.len[chr] } else { max_rg = NULL } } df = genomicDensity(region[l, 2:3, drop = FALSE], window.size = window.size, overlap = overlap, chr.len = max_rg, count_by = count_by) cbind(chr = rep(chr, nrow(df)), df) }))) } validate_region(region, 1, 2, check_chr = FALSE) if(ncol(region) >= 3) { if(is.numeric(region[, 1])) { if(max(region[, 1]) < 100) { return(do.call("rbind", lapply(unique(region[, 1]), function(chr) { l = region[, 1] == chr df = genomicDensity(region[l, 2:3, drop = FALSE], window.size = window.size, overlap = overlap, count_by = count_by) cbind(chr = rep(chr, nrow(df)), df) }))) } } } region = region[, 1:2] region = sort_region(region) region = reduce_region(region) # make a segmentation if(!is.null(chr.len)) { max_pos = max(c(chr.len, max(region[[2]]))) } else { max_pos = max(region[[2]]) } if(overlap) { if(missing(n.window)) { b = seq(1, max_pos, by = window.size/2) s = b[-length(b)] s = s[-length(s)] e = s + window.size - 1 } else { b = seq(1, max_pos, length.out = 2*n.window - 1) s = b[-length(b)] s = s[-length(s)] e = s + b[3] - b[1] - 1 } } else { if(missing(n.window)) { b = seq(1, max_pos, by = window.size) s = b[-length(b)] e = s + window.size - 1 } else { b = seq(1, max_pos, length.out = n.window) s = b[-length(b)] e = s + b[2] - b[1] } } s = as.integer(s) e = as.integer(e) y = rep(0, length(s)) names(y) = paste(s, e, sep = ",") windows = data.frame(start = s, end = e) op = overlap_region(windows, region, count_by = count_by) res = data.frame(start = s, end = e, value = op) return(res) } # == title # Highlight chromosomes # # == param # -... pass to `highlight.sector` # # == details # This is only a shortcut function of `highlight.sector`. # highlight.chromosome = function(...) { highlight.sector(...) } continuousIndexSegment = function(x, n = NULL, loop = FALSE) { if(length(x) == 1) { return(list(x)) } else { k = c(0, which(diff(x) > 1), length(x)) lt = vector("list", length = length(k) - 1) for(i in seq_along(k)[-length(k)]) { lt[[i]] = x[(k[i] + 1):(k[i+1])] } if(loop && length(lt) > 1) { first = lt[[1]] last = lt[[length(lt)]] if(first[1] == 1 && last[length(last)] == n) { lt[[1]] = c(last, first) lt = lt[-length(lt)] } } return(lt) } } # == title # Get current chromosome name # # == details # The function is same as `get.current.sector.index` and # should only be put inside ``panel.fun`` when using `circos.genomicTrackPlotRegion`. get.current.chromosome = function() { get.current.sector.index() } is.dataFrameList = function(data) { is.list(data) && all(sapply(data, is.data.frame)) } normalizeToDataFrame = function(data, sort = FALSE) { all.chr = get.all.sector.index() if(is.data.frame(data)) { data = as.data.frame(data) if(ncol(data) < 3) { stop_wrap("Your data frame is less than 3 column!.") } data = data[data[[1]] %in% all.chr, , drop = FALSE] if(sort) { data = data[order(data[[1]], data[[2]]), , drop = FALSE] } return(data) } else if(is.list(data) && all(sapply(data, is.data.frame))) { df = lapply(data, function(gr) { if(ncol(gr) < 3) { stop_wrap("Your data frame is less than 3 column!.") } gr = gr[gr[[1]] %in% all.chr, , drop = FALSE] if(sort) { gr = gr[order(gr[[1]], gr[[2]]), ] } return(gr) }) return(df) } else if(inherits(df, "GRanges")) { df = as.data.frame(df) return(df) } else { stop_wrap("The format of `data` should only be a data frame or a list of data frames.") } } .normalizeGraphicalParam = function(x, nc, nr, name) { if(nc == 1) { if(!(length(x) == 1 || length(x) == nr)) { stop_wrap("The length of `", name, "` (", length(x), ") should be equal to 1 or the number of your regions (", nr, ").") } else if(length(x) == 1) { x = rep(x, nr) } } else { if(!(length(x) == 1 || length(x) == nc)) { stop_wrap("The length of `", name, "` (", length(x), ") should be equal to 1 or the number of your data column (", nc, ").") } else if(length(x) == 1) { x = rep(x, nc) } } return(x) } # == title # Genomic rainfall plot # # == param # -data A bed-file-like data frame or a list of data frames. # -mode How to calculate the distance of two neighbouring regions, pass to `rainfallTransform`. # -ylim ylim for rainfall plot track. If ``normalize_to_width`` is ``FALSE``, the value should correspond to ``log10(dist+1)``, # and if ``normalize_to_width`` is ``TRUE``, the value should correspond to ``log2(rel_dist)``. # -col Color of points. It should be length of one. If ``data`` is a list, the length of ``col`` # can also be the length of the list. # -pch Style of points. # -cex Size of points. # -normalize_to_width If it is ``TRUE``, the value is the relative distance divided by the width of the region. # -... Pass to `circos.trackPlotRegion`. # # == details # This is high-level graphical function, which mean, it will create a new track. # # Rainfall plot can be used to visualize distribution of regions. On the plot, y-axis # corresponds to the distance to neighbour regions (log-based). So if there is a drop-down on # the plot, it means there is a cluster of regions at that area. # # On the plot, y-axis are log10-transformed. # # == seealso # https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#genomic-density-and-rainfall-plot # # == example # \donttest{ # load(system.file(package = "circlize", "extdata", "DMR.RData")) # # # rainfall # circos.initializeWithIdeogram(plotType = c("axis", "labels")) # # bed_list = list(DMR_hyper, DMR_hypo) # circos.genomicRainfall(bed_list, pch = 16, cex = 0.4, col = c("#FF000080", "#0000FF80")) # # circos.genomicDensity(bed_list[[1]], col = c("#FF000080"), track.height = 0.1) # circos.genomicDensity(bed_list[[2]], col = c("#0000FF80"), track.height = 0.1) # # circos.clear() # } circos.genomicRainfall = function( data, mode = "min", ylim = NULL, col = "black", pch = par("pch"), cex = par("cex"), normalize_to_width = FALSE, ...) { data = normalizeToDataFrame(data) if(!is.dataFrameList(data)) { data = list(data) } for(i in seq_along(data)) { validate_region(data[[i]], check_chr = TRUE) } if(length(col) == 1) { col = rep(col, length(data)) } if(length(pch) == 1) { pch = rep(pch, length(data)) } if(length(cex) == 1) { cex = rep(cex, length(data)) } if(is.null(ylim)) { if(normalize_to_width) { ylim = c(-10, 10) } else { ylim = c(0, 9) } } circos.genomicTrackPlotRegion(data, ylim = ylim, panel.fun = function(region, value, ...) { df = rainfallTransform(region, mode = mode, normalize_to_width = normalize_to_width) i = getI(...) if(normalize_to_width) { circos.genomicPoints(df[1:2], log10(df[3]), col = col[i], cex = cex[i], pch = pch[i]) } else { circos.genomicPoints(df[1:2], log10(df[3]+1), col = col[i], cex = cex[i], pch = pch[i]) } }, ...) } # == title # Calculate inter-distance of genomic regions # # == param # -region Genomic positions. It can be a data frame with two # columns which are start positions and end positions on a single chromosome. # It can also be a bed-format data frame which contains the chromosome column. # -mode How to calculate inter-distance. For a region, there is a distance to the # prevous region and also there is a distance to the next region. ``mode`` # controls how to merge these two distances into one value. # -normalize_to_width If it is ``TRUE``, the value is the relative distance divided by the width of the region. # # == values # If the input is a two-column data frame, the function returnes a data frame with three columns: start position, end position and distance. # And if the input is a bed-format data frame, there will be the chromosome column added. # # The row order of the returned data frame is as same as the input one. # # == example # bed = generateRandomBed() # bed = subset(bed, chr == "chr1") # head(rainfallTransform(bed)) # rainfallTransform = function( region, mode = c("min", "max", "mean", "left", "right"), normalize_to_width = FALSE) { mode = match.arg(mode)[1] region = validate_data_frame(region) if(is.character(region[, 1]) || is.factor(region[, 1])) { region[, 1] = as.vector(region[, 1]) region = region[1:3] region$dist = NA for(chr in unique(region[, 1])) { l = region[, 1] == chr df = rainfallTransform(region[l, 2:3, drop = FALSE], mode = mode) region$dist[l] = df$dist } return(region) } if(ncol(region) >= 3) { if(is.numeric(region[, 1])) { if(max(region[, 1]) < 100) { region = as.data.frame(region) region[[1]] = as.character(region[[1]]) rainfallTransform(region, mode = mode) } } } region_order = order_region(region[1:2]) region_bk = as.data.frame(region[1:2]) region = as.data.frame(region[region_order, ]) n = nrow(region) dist = numeric(n) if(n < 2) { region = region_bk region$dist = NA return(region) } dist[1] = region[2, 1] - region[1, 2] dist[n] = region[n, 1] - region[n-1, 2] if(n > 2) { d1 = region[3:n, 1] - region[2:(n-1), 2] d2 = region[2:(n-1), 1] - region[1:(n-2), 2] if(mode == "min") { dist[2:(n-1)] = pmin(d1, d2) } else if(mode == "max") { dist[2:(n-1)] = pmax(d1, d2) } else if(mode == "mean") { dist[2:(n-1)] = apply(cbind(d1, d2), 1, mean) } else if (mode == "left") { dist[2:(n - 1)] = d2 } else if (mode == "right") { dist[2:(n - 1)] = d1 } } dist = ifelse(dist < 0, 0, dist) if(mode == "left") { dist[1] = NA } else if(mode == "right") { dist[n] = NA } region = region_bk region$dist[region_order] = dist if(normalize_to_width) { region$dist = region$dist/(region[, 3] - region[, 2]) } return(region) } # == title # Genomic position transformation function # # == param # -region Genomic positions at a single chromosome. It is a data frame with two # columns which are start position and end position. # -... other arguments # # == details # The default position transformation functions transforms position to be equally distributed # along the chromosome. If users want to define their own transformation function, the requirement # is that the returned value should be a data frame with two columns: transformed start position # and transformed end position. The returned value should have same number of rows as the input one. # # For details why need to use position transformation, please refer to `circos.genomicPosTransformLines`. posTransform.default = function(region, ...) { xlim = get.cell.meta.data("xlim") segment = seq(xlim[1], xlim[2], length.out = nrow(region) + 1) return(data.frame(start = segment[-length(segment)], end = segment[-1])) } # == title # Genomic position transformation function specifically for text # # == param # -region Genomic positions at a single chromosome. It is a data frame with two # columns which are start position and end position. # -y positions of texts # -labels text labels # -cex text size # -font text font style # -sector.index sector index # -track.index track index # -padding padding of text # -extend extend to allow labels to be put in an region which is wider than the current chromosome. # The value should be a proportion value and the length is either one or two. # -... other arguments # # == details # This position transformation function is designed specifically for text. # Under the transformation, texts will be as close as possible to the original positions. posTransform.text = function( region, y, labels, cex = 1, font = par("font"), sector.index = get.cell.meta.data("sector.index"), track.index = get.cell.meta.data("track.index"), padding = 0, extend = 0, ...) { if(length(y) == 1) y = rep(y, nrow(region)) if(length(labels) == 1) labels = rep(labels, nrow(region)) if(length(extend) == 1) extend = rep(extend, 2) if(length(extend) > 2) extend = extend[1:2] od = order(region[, 1] + region[, 2]) od_back = NULL od_back[od] = seq_along(od) region = region[od, ,drop = FALSE] y = y[od] labels = labels[od] text_height = strheight(labels, cex = cex, font = font)*(1+padding) d = circlize( (region[[1]] + region[[2]])/2, y, sector.index = sector.index, track.index = track.index) alpha1 = d[, "theta"] + as.degree(atan(text_height/2/d[, "rou"])) alpha2 = d[, "theta"] - as.degree(atan(text_height/2/d[, "rou"])) x1 = reverse.circlize(alpha1, d[, "rou"], sector.index = sector.index, track.index = track.index)[, "x"] x2 = reverse.circlize(alpha2, d[, "rou"], sector.index = sector.index, track.index = track.index)[, "x"] xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index) xrange = xlim[2] - xlim[1] xlim = c(xlim[1] - extend[1]*xrange, xlim[2] + extend[2]*xrange) x1_new = x1 x2_new = x2 l = x2 - x1 >= xlim[2] - xlim[1]; x1_new[l] = xlim[1]; x2_new[l] = xlim[2] l = x1 < xlim[1]; x1_new[l] = xlim[1]; x2_new[l] = x2[l] + xlim[1] - x1[l] l = x2 > xlim[2]; x1_new[l] = x1[l] - (x2[l] - xlim[2]); x2_new[l] = xlim[2] df = smartAlign(x1_new, x2_new, xlim = xlim) return(df[od_back, ,drop = FALSE]) } # == title # Add heatmaps for selected regions # # == param # -bed A data frame in bed format, the matrix should be stored from the fourth column. # -col Colors for the heatmaps. The value can be a matrix or a color mapping function generated by `colorRamp2`. # -na_col Color for NA values. # -numeric.column Column index for the numeric columns. The values can be integer index or character index. # By default it takes all numeric columns from the fourth column. # -border Border of the heatmap grids. # -border_lwd Line width for borders of heatmap grids. # -border_lty Line style for borders of heatmap grids. # -connection_height Height of the connection lines. If it is set to ``NULL``, no connection will be drawn. # Use `mm_h`/`cm_h`/`inches_h` to set a height in absolute unit. # -line_col Color of the connection lines. The value can be a vector. # -line_lwd Line width of the connection lines. # -line_lty Line style of the connection lines. # -heatmap_height Height of the heatmap track # -side Side of the heatmaps. Is the heatmap facing inside or outside? # -track.margin Bottom and top margins. # # == details # The function visualizes heatmaps which correspond to a subset of regions in the genome. # The correspondance between heatmaps and regions are identified by connection lines. # # The function actually creates two tracks, one track for the connection lines and one track # for the heamtaps. The heatmaps always fill the whole track. # # == seealso # https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#genomic-heatmap # # == example # \donttest{ # circos.initializeWithIdeogram(plotType = c("labels", "axis")) # bed = generateRandomBed(nr = 100, nc = 4) # col_fun = colorRamp2(c(-1, 0, 1), c("green", "black", "red")) # circos.genomicHeatmap(bed, col_fun, side = "inside", border = "white") # circos.genomicHeatmap(bed, col_fun, side = "outside", # line_col = as.numeric(factor(bed[[1]]))) # } circos.genomicHeatmap = function( bed, col, na_col = "grey", numeric.column = NULL, border = NA, border_lwd = par("lwd"), border_lty = par("lty"), connection_height = mm_h(5), line_col = par("col"), line_lwd = par("lwd"), line_lty = par("lty"), heatmap_height = 0.15, side = c("inside", "outside"), track.margin = circos.par("track.margin")) { bed = validate_data_frame(bed) validate_region(bed, check_chr = TRUE) mat = bed[, -(1:3), drop = FALSE] if(is.null(numeric.column)) { numeric.column = which(apply(mat, 2, "is.numeric")) if(length(numeric.column) == 0) { stop_wrap("You don't have numeric columns in `bed`.") } } else { if(is.numeric(numeric.column)) { numeric.column = numeric.column - 3 } } mat = mat[, numeric.column, drop = FALSE] mat = as.matrix(mat) bed = cbind(bed[, 1:3], mat) side = match.arg(side) if(missing(col)) { col = colorRamp2(seq(min(mat, na.rm = TRUE), max(mat, na.rm = TRUE), length.out = 3), c("blue", "#EEEEEE", "red")) } if(is.function(col)) { col = col(mat) } col[is.na(col)] = na_col if(length(border) == 1) { if(is.na(border)) { border = col } } if(length(border) == 1) { border = rep(border, length(col)) dim(border) = dim(col) } if(side == "inside") { if(!is.null(connection_height)) { circos.genomicPosTransformLines(bed, posTransform = posTransform.default, horizontalLine = "top", track.height = connection_height, track.margin = c(convert_height(1, "mm"), track.margin[2]), cell.padding = c(0, 0, 0, 0), col = line_col, lwd = line_lwd, lty = line_lty) } circos.genomicTrackPlotRegion(bed, stack = TRUE, panel.fun = function(region, value, ...) { l = bed[, 1] == CELL_META$sector.index i = getI(...) circos.genomicRect(region, value, col = col[l, i], border = border[l, i], lwd = border_lwd, lty = border_lty, posTransform = posTransform.default, ...) }, bg.border = NA, track.height = heatmap_height, track.margin = c(track.margin[1], 0), cell.padding = c(0, 0, 0, 0)) } else { circos.genomicTrackPlotRegion(bed, stack = TRUE, panel.fun = function(region, value, ...) { l = bed[, 1] == CELL_META$sector.index i = getI(...) circos.genomicRect(region, value, col = col[l, i], border = border[l, i], lwd = border_lwd, lty = border_lty, posTransform = posTransform.default, ...) }, bg.border = NA, track.height = heatmap_height, track.margin = c(0, track.margin[2]), cell.padding = c(0, 0, 0, 0)) if(!is.null(connection_height)) { circos.genomicPosTransformLines(bed, posTransform = posTransform.default, direction = "outside", horizontalLine = "bottom", track.height = connection_height, track.margin = c(track.margin[2], convert_height(1, "mm")), cell.padding = c(0, 0, 0, 0), col = line_col, lwd = line_lwd, lty = line_lty) } } } # == title # Add labels to specified genomic regions # # == param # -bed A data frame in bed format. # -labels A vector of labels corresponding to rows in ``bed``. # -labels.column If the label column is already in ``bed``, the index for this column in ``bed``. # -facing fFacing of the labels. The value can only be ``"clockwise"`` or ``"reverse.clockwise"``. # -niceFacing Whether automatically adjust the facing of the labels. # -col Color for the labels. # -cex Size of the labels. # -font Font of the labels. # -padding Padding of the labels, the value is the ratio to the height of the label. # -connection_height Height of the connection track. # -line_col Color for the connection lines. # -line_lwd Line width for the connection lines. # -line_lty Line type for the connectioin lines. # -labels_height Height of the labels track. # -side Side of the labels track, is it in the inside of the track where the regions are marked? # -labels.side Same as ``side``. It will replace ``side`` in the future versions. # -track.margin Bottom and top margins. # # == details # The function adds labels for the specified regions. The positions of labels are arranged # so that they are not overlapping to each other. # # This function creates two tracks, one for the connection lines and one for the labels. # # == seealso # https://jokergoo.github.io/circlize_book/book/high-level-genomic-functions.html#labels # # == example # \donttest{ # circos.initializeWithIdeogram() # bed = generateRandomBed(nr = 50, fun = function(k) sample(letters, k, replace = TRUE)) # bed[1, 4] = "aaaaa" # circos.genomicLabels(bed, labels.column = 4, side = "inside") # circos.clear() # # circos.initializeWithIdeogram(plotType = NULL) # circos.genomicLabels(bed, labels.column = 4, side = "outside", # col = as.numeric(factor(bed[[1]])), line_col = as.numeric(factor(bed[[1]]))) # circos.genomicIdeogram() # circos.clear() # } circos.genomicLabels = function( bed, labels = NULL, labels.column = NULL, facing = "clockwise", niceFacing = TRUE, col = par("col"), cex = 0.8, font = par("font"), padding = 0.4, connection_height = mm_h(5), line_col = par("col"), line_lwd = par("lwd"), line_lty = par("lty"), labels_height = min(c(cm_h(1.5), max(strwidth(labels, cex = cex, font = font)))), side = c("inside", "outside"), labels.side = side, track.margin = circos.par("track.margin")) { bed = validate_data_frame(bed) validate_region(bed, check_chr = TRUE) if(is.null(labels)){ labels = bed[[labels.column]] } bed[[4]] = as.vector(labels) bed[[1]] = factor(as.vector(bed[[1]]), levels = get.all.sector.index()) od = order(bed[[1]], bed[[2]]) bed = bed[od, , drop = FALSE] bed[[1]] = as.vector(bed[[1]]) # order `bed` if(length(col) == 1) col = rep(col, nrow(bed)) if(length(cex) == 1) cex = rep(cex, nrow(bed)) if(length(font) == 1) font = rep(font, nrow(bed)) if(length(line_col) == 1) line_col = rep(line_col, nrow(bed)) if(length(line_lwd) == 1) line_lwd = rep(line_lwd, nrow(bed)) if(length(line_lty) == 1) line_lty = rep(line_lty, nrow(bed)) col = col[od] cex = cex[od] font = font[od] line_col = line_col[od] line_lwd = line_lwd[od] line_lty = line_lty[od] if(!circos.par$xaxis.clock.wise) { all_chr_vec = as.character(bed[, 1]) bed[, 2] = .CIRCOS.ENV$.SECTOR.DATA[all_chr_vec, "max.value"] - bed[, 2] + .CIRCOS.ENV$.SECTOR.DATA[all_chr_vec, "min.value"] bed[, 3] = .CIRCOS.ENV$.SECTOR.DATA[all_chr_vec, "max.value"] - bed[, 3] + .CIRCOS.ENV$.SECTOR.DATA[all_chr_vec, "min.value"] bed[, 2:3] = bed[, 3:2] circos.par(xaxis.clock.wise = TRUE) on.exit(circos.par(xaxis.clock.wise = FALSE)) } chr = get.all.sector.index()[1] sector_data = get.sector.data(chr) ## find the largest gap all_chr = unique(bed[, 1]) rho = NULL for(cr in all_chr) { sub_bed = bed[bed[, 1] == cr, ] rho = c(rho, circlize(sub_bed[, 2], y = rep(1, nrow(sub_bed)), sector.index = cr)[, 1]) } if(length(rho) == 0) { anchor = ((sector_data["start.degree"] + sector_data["end.degree"])/2 + 180) %% 360 } else if(length(rho) == 1) { anchor = (rho + 180) %% 360 } else { rho = sort(rho) rho = c(rho, rho[1] + 360) i = which.max(diff(rho)) anchor = ((rho[i] + rho[i+1])/2) %% 360 } # map all other chromosomes to the first chromosome chr_width = sector_data["start.degree"] - sector_data["end.degree"] # extend = (360 - chr_width)/chr_width # extend = c(0, extend) extend = numeric(2) s1 = sector_data["start.degree"] %% 360 s2 = sector_data["end.degree"] %% 360 # if the anchor in inside the first sector if(s1 < s2) { # the first sector go across theta = 0 s1 = s1 + 360 } if(anchor >= s2 && anchor <= s1) { # anchor inside sector if(s1 - s2 > 180) { extend[1] = (abs(s1 - anchor) %% 360)/chr_width extend[2] = -(abs(s2 - anchor) %% 360)/chr_width } else { extend = (360 - chr_width)/chr_width extend = c(0, extend) } } else { extend[1] = ((anchor - s1) %% 360)/chr_width # goes reverse clockwise extend[2] = ((s2 - anchor) %% 360)/chr_width # goes clockwise } extend = abs(extend) if(0) segments(0, 0, cos(anchor/180*pi), sin(anchor/180*pi)) # start.degree is always larger than end.degree new_chr_range = c(sector_data["start.degree"] + chr_width*extend[1], sector_data["end.degree"] - chr_width*extend[2]) all_chr = unique(bed[, 1]) bed2 = NULL for(cr in all_chr) { sub_bed = bed[bed[, 1] == cr, ] if(cr != chr) { dfx1 = circlize(sub_bed[, 2], y = rep(1, nrow(sub_bed)), sector.index = cr) dfx2 = circlize(sub_bed[, 3], y = rep(1, nrow(sub_bed)), sector.index = cr) degree_diff = dfx2[, 1] - dfx1[, 1] l = dfx1[, 1] > new_chr_range[1] | dfx1[, 1] < new_chr_range[2] if(any(l)) dfx1[l, 1] = (dfx1[l, 1] - new_chr_range[2]) %% 360 + new_chr_range[2] x1 = reverse.circlize(dfx1, sector.index = chr)[, 1] dfx2[, 1] = dfx1[, 1] + degree_diff x2 = reverse.circlize(dfx2, sector.index = chr)[, 1] sub_bed[, 2:3] = data.frame(start = x1, end = x2) } bed2 = rbind(bed2, sub_bed) } bed2[, 1] = chr if(!facing %in% c("clockwise", "reverse.clockwise")) { stop_wrap("facing can only be 'clockwise' or `reverse.clockwise`.") } op = circos.par("points.overflow.warning") circos.par("points.overflow.warning" = FALSE) labels.side = side = match.arg(side)[1] if(labels.side == "inside") { # an empty track circos.genomicTrackPlotRegion(bed2, ylim = c(0, 1), track.margin = c(convert_height(0.5, "mm"), track.margin[2]), cell.padding = c(0, 0, 0, 0), track.height = connection_height, bg.border = NA) i_track = get.cell.meta.data("track.index") # add labels circos.genomicTrackPlotRegion(bed2, ylim = c(0, 1), panel.fun = function(region, value, ...) { l = bed2[[1]] == CELL_META$sector.index circos.genomicText(region, value, y = 1, labels.column = 1, facing = facing, adj = c((facing == "clockwise") + 0, 0.5), posTransform = posTransform.text, col = col[l], cex = cex[l], font = font[l], niceFacing = niceFacing, padding = padding, extend = extend) }, track.height = labels_height, bg.border = NA, track.margin = c(track.margin[1], 0), cell.padding = c(0, 0, 0, 0)) circos.genomicPosTransformLines(bed2, posTransform = function(region, value) { l = bed2[[1]] == get.cell.meta.data("sector.index", track.index = i_track + 1) posTransform.text(region, y = 1, labels = value[[1]], cex = cex[l], font = font[l], track.index = i_track + 1, padding = padding, extend = extend) }, direction = "inside", horizontalLine = "top", track.index = i_track, cell.padding = c(0, 0, 0, 0), col = line_col, lwd = line_lwd, lty = line_lty ) } else { circos.genomicTrackPlotRegion(bed2, ylim = c(0, 1), panel.fun = function(region, value, ...) { l = bed2[[1]] == CELL_META$sector.index circos.genomicText(region, value, y = 0, labels.column = 1, facing = facing, adj = c((facing == "reverse.clockwise") + 0, 0.5), posTransform = posTransform.text, col = col[l], cex = cex[l], font = font[l], niceFacing = niceFacing, padding = padding, extend = extend) }, track.height = labels_height, bg.border = NA, track.margin = c(0, track.margin[2]), cell.padding = c(0, 0, 0, 0)) i_track = get.cell.meta.data("track.index") circos.genomicPosTransformLines(bed2, posTransform = function(region, value) { l = bed2[[1]] == get.cell.meta.data("sector.index", track.index = i_track) posTransform.text(region, y = 0, labels = value[[1]], cex = cex[l], font = font[l], track.index = i_track, padding = padding, extend = extend) }, direction = "outside", horizontalLine = "bottom", col = line_col, lwd = line_lwd, lty = line_lty, track.height = connection_height, track.margin = c(track.margin[1], convert_height(0.5, "mm")), cell.padding = c(0, 0, 0, 0) ) } circos.par("points.overflow.warning" = op) } # == title # Adjust positions of text # # == param # -x1 Position which corresponds to the top of the text. # -x2 Position which corresponds to the bottom of the text. # -xlim Ranges on x-axis. # # == details # used internally smartAlign = function(x1, x2, xlim) { ncluster.before = -1 ncluster = length(x1) while(ncluster.before != ncluster) { ncluster.before = ncluster cluster = rep(0, length(x1)) i_cluster = 1 cluster[1] = i_cluster for(i in seq_along(x1)[-1]) { # overlap with previous one if(x1[i] <= x2[i-1]) { cluster[i] = i_cluster } else { i_cluster = i_cluster + 1 cluster[i] = i_cluster } } ncluster = length(unique(cluster)) if(ncluster.before == ncluster) break # tile intervals in each cluster and re-assign x1 and x2 new_x1 = numeric(length(x1)) new_x2 = numeric(length(x2)) for(i_cluster in unique(cluster)) { index = which(cluster == i_cluster) len = x2[index] - x1[index] total_len = sum(len) mid = (min(x1[index]) + max(x2[index]))/2 if(total_len > xlim[2] - xlim[1]) { tp = c(0, cumsum(len)) + (xlim[1] + xlim[2])/2 - total_len/2 } else if(mid - total_len/2 < xlim[1]) { tp = c(0, cumsum(len)) + xlim[1] } else if(mid + total_len/2 > xlim[2]) { tp = xlim[2] - total_len + c(0, cumsum(len)) } else { tp = c(0, cumsum(len)) + mid - total_len/2 } new_x1[index] = tp[-length(tp)] new_x2[index] = tp[-1] } x1 = new_x1 x2 = new_x2 } return(data.frame(start = x1, end = x2)) } circlize/MD50000644000176200001440000002056514236536475012415 0ustar liggesusersa00e48c7ff0dcff1b7305aa8c402f2d1 *DESCRIPTION 9926ec727f4a07ad169b514f356fdd02 *LICENSE 6402c8c2147fcd3a81fe2c0cb3e94e96 *NAMESPACE ecbae436a9c6e2eb5745588c707351b8 *NEWS 6ccbe0d3f4334aea0d5a6c5411971553 *R/chordDiagram.R 8f2ca37c520428ec0982b31090436108 *R/circos.arrow.R 1d2021cde6b08e9fdf432d1ff0fea859 *R/circos.heatmap.R e8d65d99b48d050ed56ee751fe58dd47 *R/circos.nested.R 7010e38a8c497535613f8731728632fb *R/genomic.R 57efa1cf84838c4b3a57ecd5a60f4201 *R/genomic_utils.R 5dde4407239a11b5bdb839064618a2db *R/global.R 2cb730c7cee1f42958cc3daeb40e7e55 *R/link.R 17a87d767972ef027b15b7622ac8254c *R/low_level.R 654bffc04ce3f6c35e25be28c51e4be1 *R/overview.R 6f94c199975055a70a3e19c7565054aa *R/plot.R aa8b1cedc8e208dd517c4c4306e4bf5c *R/random_color.R 4221e6d6b7100ef0c64d4c01a38cbe27 *R/raster.R 61c09d065e44001c4ed6a3ea89b1b339 *R/regions.R 1a8b8f22af356e56c0b312de6beb81c4 *R/utils.R c038357543923472f125811630d19411 *R/zzz.R 01dcb8ab3faaeed687671b19501366e7 *build/vignette.rds 92eb7caa3ac39cb8e22d200aadaefb60 *demo/00Index b179ad9e0bd8b12cc3eb3d8d824a160d *demo/foo.R 2dd33425365e389a57496f49869f3c15 *inst/CITATION eef13ea142c92f213f792c4d19209c99 *inst/doc/circlize.Rmd 06a217c6e6daa59d9e7b50ec941e883a *inst/doc/circlize.html 5c236e98d9ab9b9c69ac35128dad68a7 *inst/extdata/DMR.RData 8e0c51650b8a63f110fa7b09e699e9c4 *inst/extdata/Rlogo.png 170b89b443c7cc46bd3ca64be1429689 *inst/extdata/bird.orders.RData 043060d04a2d99691467f98cf904bac1 *inst/extdata/chromInfo.txt 4f0c9bfb3a469dbbde1331b8b96fdd26 *inst/extdata/chrom_info_list.rds 64de0499795484f1b70410a4cdd3d06f *inst/extdata/cytoBand.txt 546c8a614aa66f032507b76b89a953fb *inst/extdata/cytoband_list.rds b9d788c9c3fe42c6a682550cf9916f75 *inst/extdata/doodle.RData 1f60a63d0196f803f14ef4a1ad08cfd0 *inst/extdata/download_and_slice_doodle.R 0fa8ed21bf7dd660ff7b2108d2357482 *inst/extdata/download_ucsc.R 38017124cb63b2889550644902e48224 *inst/extdata/tagments_WGBS_DMR.RData 03876883493481830c3741ee84e454b9 *inst/extdata/tp_family.RData aa2953975a33056a99acb1a2f4ead851 *inst/extdata/tp_family_df.rds b2ee792a28d263c84d0132b053fce325 *man/CELL_META.Rd d9877c1b1bfa20bb8de39302fa47c0fe *man/Subset.CELL_META.Rd 7d8493ef08ac43005c96c23cdbd1a3cb *man/add_transparency.Rd 46ba593d4d243daa37b36f7210328699 *man/adjacencyList2Matrix.Rd 3b7d5a6d29ec9eb90d9759d7fcd30f7c *man/adjacencyMatrix2List.Rd 5e09a119b800c8180d30ceeeb2dd5c40 *man/arrange_links_evenly.Rd c3650742ac360476bf847e6a833cee82 *man/calc_gap.Rd d70b39303bfe40b874d93501b8e60990 *man/chordDiagram.Rd 18cc821a03ddb3e4b9766ef18e5cdff1 *man/chordDiagramFromDataFrame.Rd 4c48cad3595daa7a60a157daebfb4868 *man/chordDiagramFromMatrix.Rd 59066bbe7d3b82fc0a01b7ff6b6f1485 *man/circlize-package.Rd d2f86e8a81e012ea4845d1386948f154 *man/circlize.Rd 2205358db4b26ca5c23c9dda0e663e5a *man/circos.arrow.Rd f700a7d9900c60d44e5182f1100e48db *man/circos.axis.Rd 97fcbadbfdebcbd1028bfaeb27d46cfd *man/circos.barplot.Rd 5f330cb15bcef8fe6ad42fe5a3f08066 *man/circos.boxplot.Rd aa55f97d675047c868abb318cc1666df *man/circos.clear.Rd 2cc8567beae256ae88cd1b287eb5ba04 *man/circos.connect.Rd 86c50d36a40233d5a6ff2248428e989e *man/circos.dendrogram.Rd dd28b347b09df5a985e6a08f7e7c1451 *man/circos.genomicAxis.Rd aa04d76c482208b71ca9e4e914302862 *man/circos.genomicDensity.Rd 9f82c3baa0a2d2e02c90483da6c081b4 *man/circos.genomicHeatmap.Rd 0ff0fa691dd22f44d242888c1ba14d62 *man/circos.genomicIdeogram.Rd 0cec98c2312916110b71db42b411b57b *man/circos.genomicInitialize.Rd f52f6cf1b53c70fc0d27b7914931379d *man/circos.genomicLabels.Rd 6b48b5c17c3753af7860bd6495d48455 *man/circos.genomicLines.Rd 5bfec610f4ecd237f114e0c55609e744 *man/circos.genomicLink.Rd 86a980cd0e0072143d4d6b3a5a3e14c9 *man/circos.genomicPoints.Rd 3b9eaf4ef36384d6a15940117ed51f87 *man/circos.genomicPosTransformLines.Rd 61017aedf72f86c0403b8d8426ddb828 *man/circos.genomicRainfall.Rd 4c7e60726e58d71ecb3cee0a6abcc35b *man/circos.genomicRect.Rd cf94a500a20fd41bd2b7fc47b113c810 *man/circos.genomicText.Rd d6e12ffffd249bd809adc7a3157482a7 *man/circos.genomicTrack.Rd 5946f492d0a0031cccfcaff4bf1e5c43 *man/circos.genomicTrackPlotRegion.Rd 2f6c904fd5a50622cb3c920389d931be *man/circos.heatmap.Rd 7e7cda9cd933675293739b8aca2d966c *man/circos.heatmap.initialize.Rd c1170360d4072d79bb17f809cbbc8be2 *man/circos.heatmap.link.Rd afdb55f3546f886b3a58ddb589adac66 *man/circos.info.Rd 858d3b65888fbb12cb07aad38e3ae24c *man/circos.initialize.Rd 2f21061418771b8760c759550a4d8e90 *man/circos.initializeCircularGenome.Rd 279db2e9777e8cb9c94414a1170846aa *man/circos.initializeWithIdeogram.Rd e81b2a2188032b2bbcef208aab22600d *man/circos.labels.Rd 810ab825cea920fbadd6581568c8be61 *man/circos.lines.Rd 8dabc0f03aacf9e7e4442836efd4c6ea *man/circos.link.Rd 193615c202cc9754c7c2cf4250d5e451 *man/circos.nested.Rd ae4bf7edee5bafd2ab8e77c008e2f533 *man/circos.par.Rd 22166753fb6dacc15ff032b02687e7f2 *man/circos.points.Rd 18779d7ec6c6a107eb281ffe4407379f *man/circos.polygon.Rd dbfb04aeb9a2cb446641093e084d6e3b *man/circos.raster.Rd 4463e060bbc3b82531196035ca86ed34 *man/circos.rect.Rd 81088a3cbd31ae2c7ba73c6788819e9c *man/circos.segments.Rd e19a65543f05ecdd367636cfa1908495 *man/circos.text.Rd e124dcd3e2c0833b804b3ddf2b97e3d6 *man/circos.track.Rd ea6c3917b059ee487bf92b7ba69a653f *man/circos.trackHist.Rd da71269a342613ba93b0d64875ca0582 *man/circos.trackLines.Rd 3ff9f68caa472484202f5c3457ed0c3b *man/circos.trackPlotRegion.Rd 984fc1b67aed95a7db52de026740a1b7 *man/circos.trackPoints.Rd b4ac6f6c34e7a5d7960a920aadfa3b2b *man/circos.trackText.Rd 4cb5a43ba0c7cb591631dd458999199f *man/circos.triangle.Rd 2045286d234e45ba2321845d07d4128e *man/circos.update.Rd 1a03c268890e74c2714252aaa63f324a *man/circos.updatePlotRegion.Rd d139d50e95c2226e317ddab1db1690c5 *man/circos.violin.Rd 2f8f19fa79f32f635fc19e5738070322 *man/circos.xaxis.Rd 8455ede9bad5f4ac949c62292dcc9974 *man/circos.yaxis.Rd a01dd6443453376581486909523514f7 *man/cm_h.Rd 7302282271c2824475d31734ffc81880 *man/cm_x.Rd 246ed277af368214c0675955db98b642 *man/cm_y.Rd 95b8c048e0a26e91df0293d9a71183d4 *man/col2value.Rd d1cc4e9320e2680e9bf8a22eb8611620 *man/colorRamp2.Rd de78374de17050c7f2cb7364aa96c8b9 *man/convert_height.Rd 93f9034a6f0823ec8e67075552d899ac *man/convert_length.Rd 7e8850bec3586f66d32e1321f519825e *man/convert_x.Rd bcfb83ab15bbcee6bd13a49ad4bd5d09 *man/convert_y.Rd 4b955844cfbba86a7d96a37710cfa888 *man/cytoband.col.Rd 61586d9ed7d3ccf7fb55ab4370c12ea6 *man/degree.Rd 33a6fb944e8bba01de4ea3f10dd0e84c *man/draw.sector.Rd 0c6387b8c2d9fae26942f6745cd3e2bd *man/fontsize.Rd a2ea4ab7c4ce0eb33d1a428b48980265 *man/generateRandomBed.Rd beb4d598b026a86d55cd5b50c22cf521 *man/genomicDensity.Rd 0ad9bd29f875c799f1a245affa84e8d2 *man/get.all.sector.index.Rd 7a802fbaae1fc6d3c13f1e372b0a3ad9 *man/get.all.track.index.Rd c03a0febbc3acf6801a0e9b485ace016 *man/get.cell.meta.data.Rd d7a67f5129f5296ce5136645abcf7ab6 *man/get.current.chromosome.Rd 637f25ee4bce07ed289b098bfe0b0cd2 *man/get.current.sector.index.Rd 714a0cbbe3d7f7dc78f11fe9f9d61503 *man/get.current.track.index.Rd c862e7d45abf5c118c3f6be3d709fdc0 *man/getI.Rd 6ca970a28be899a15697b56e01673e7d *man/get_most_inside_radius.Rd 3fd80cae4612deb0a9902f1957a7b3f0 *man/highlight.chromosome.Rd 4f01c0c33a2aa3c7b9e1abacec0b756c *man/highlight.sector.Rd 167680c86d9dda5aa6814b7a3f569487 *man/inch_h.Rd 060d3d9c25f73b9357d8d7ba1bbc6a53 *man/inch_x.Rd 5f5fccaddf40fd85a6fcef6e36af4734 *man/inch_y.Rd 0732f87bf618a00e06df72cc57775d1a *man/inches_h.Rd cfe6861896387e5e7a1eb0b4cf968a9e *man/inches_x.Rd e378413f53138db1602cfe0e09a496a9 *man/inches_y.Rd 64f2c6b78504440af1b3c3c33b6bdde3 *man/mm_h.Rd cf2878aa7b59424a6b71462c891d0bc7 *man/mm_x.Rd 5ac3b628df7144c0cab7b9894ec2c2b1 *man/mm_y.Rd 200c4d84cde94a374c41b21944981f87 *man/names.CELL_META.Rd d1c8b070e07d52985f5fed587e9536f3 *man/posTransform.default.Rd 4a46d8ee0bd1ec1d096d833a08dddfaa *man/posTransform.text.Rd 65287dfcfc9ddf4ba265b3ce77e3c974 *man/print.CELL_META.Rd b2d15b2819ba5441e88141b22c328b47 *man/rainfallTransform.Rd 58857bceebb05406d611b002bc070067 *man/rand_color.Rd cc27a678bc2538b3fa62d31387b48a55 *man/read.chromInfo.Rd 238f2f384c4f9607650d97bc050c56c9 *man/read.cytoband.Rd ab12c0ccde3baada6697ee3fdcc353cd *man/reverse.circlize.Rd b6585f5fe12451e986599fdf739c6619 *man/set.current.cell.Rd b9f51f8a371c3c88409c489ef69fefbe *man/set_track_gap.Rd cbf841e98985c9d0a7bffaaa070f1b37 *man/show.index.Rd 946a603b6ad2152dd7bb4e20b18a903a *man/smartAlign.Rd 06b0d21af45586e991595ca1bb08df3f *man/uh.Rd 910a4e5c4bd22fd5f01f29e279ba94cd *man/ux.Rd 4fbba678ce6538fa795e59dc2a0e3b99 *man/uy.Rd eef13ea142c92f213f792c4d19209c99 *vignettes/circlize.Rmd circlize/inst/0000755000176200001440000000000014236530433013036 5ustar liggesuserscirclize/inst/doc/0000755000176200001440000000000014236530433013603 5ustar liggesuserscirclize/inst/doc/circlize.html0000644000176200001440000000473314236530433016304 0ustar liggesusers

Please go to https://jokergoo.github.io/circlize_book/book/ for the full vignette.

circlize/inst/doc/circlize.Rmd0000755000176200001440000000023514015721224016051 0ustar liggesusers Please go to https://jokergoo.github.io/circlize_book/book/ for the full vignette. circlize/inst/extdata/0000755000176200001440000000000014015721224014463 5ustar liggesuserscirclize/inst/extdata/tp_family.RData0000755000176200001440000000337214015721224017374 0ustar liggesusers[]lUnnw[`ėuf&j E@MA4 o|0>4h$"hVL0AJAil53Nwfvzggss{3]!6h8.X?&b_RX6^۹aq Ne3~kv4r7ߝ7DXAoyB% DjDH&"ϙvC7/"AjwD/HsQR>xч^vRbP}w熮^0uQ%սƍjʹ"ՂCrhCT94juީ NUtȩJnx]k*l\י]ۃ '$Ǥgnzs.]ܛcMXc`38A033iw>T5hf!)xAtSI~mD+}WIߵb `NeFo A04dp2t%Wǜ_P1 zTK@M;D&.)z!C3!Yc`F7A{X0H-gXn e[C>2VwZ/W_|v%jO  r:ni_rC&rV*PxWPCR=,IPU!:`CRD8A6 \ hxT07Tf|4ص=×|ª//]#+}.> cfc>`>}WDz6"?% aʃmٕ hf${w$kDEMy#Dv?#r1vv 4S[4wp;T1wz 1!2Hl:b}\6WҞpB4|kumIvk+xqlc|ߒUX(FƨƱG TtB8myI:~I?N.w~ST,:S`Cz8x`4( B|9͊c9u᜞>e}|i7~c»~FBC)Wj05c"GYC(}1+eY2;] I@{Lf5'W~1"ie'4zFΜ"?bGc_Jz_>n#S1)IF)# b$>f|=lqiFupZ_!CZ\Ȟ13y˿qa1Ų|AŮ}J7+MNffrfޞۄ:iPuS#MrSCm-!)O|oTHO#ރ}.!Cy +|~= ,@<)tS<ၼ􇾩:(F1W~$BvJs u~R /{Wh LWLJNa.<ЇA?c8F } +C2,)V\ʭSA5#Jkz9;JӜJcm+D~!F8 'lEgwXmp\tDydnI0+=-=m!|[o [?2Ig]TݐY2iV%5quxaTHsA8wWkbB7Y>Jo>`q"W4Xqos¿$V &eAY,s* W,0ij'{v17RdZA|;circlize/inst/extdata/chrom_info_list.rds0000644000176200001440000010303714015721224020357 0ustar liggesusers]|+ "jE{_A@DEQJ5 z' ]= M AEBQosgwgvo|g~?3g9sn  NLH,l,o2!pyOH(k+P$Eu)5qZ;EM]wnea~smS,Fi㰎GXPZ6bD$X(pnzQ)2e%{[7VŮٳuM9yA)u;[3.\'5 I ) i PBű7%oPoP5O4OMzc6v|6Laإ}HxNmό~T+" \NLS. _>N ᇎwH70cBg ij±l]R`-HDim֏nL|])lqjsXkrl޿/6 'm|qthoH+k8ÐoP6N\(w : ۘc3hx[~շA|8j}yFOX]ڝp, {oq9wxs%*,ɲ[|`)䢿_+<%7+\?VYӧawcaža`^:;3mA:Irc UY{iANk c6  :ed@vG4 ha+6~I?KW͡ʫ \d*蜁|CZ4z񃒧CC^{ozN{LA1p_ iվKSyzޖ|Ǭ.i, S;6O/ l 0}^cKlL=[W ~oc<\rl<3i+'`{t) ``qC]98H0?t~ёw߉ηgg_B̀<d3Af=\/Ku# 3)ͻo ڛǻûs>Hz#x`;_~ xry%OO8:VpN y<~~Q$'`Swwi.^|/N 2ve!1=-~~{ .ͻ_8X?]w89}kߪkCyr&6z]Gt?y{z#s X~p~=q^_ŇGK1+ D}*F> };WhB8=I Tf*Cv-}ei"p>f#2')W=) imgDMFO#֡9ƖkVNQ)M6a!7NJ RX뎦bb?a'1F]HGbюUY KT4!16LY5"BbMIׄpCP2kSCa E"3 eMUa'j1"Ȳ.4b%5C3l0 Gx G{)[6+5\V CʳDV'(*!~ ( -ʱꑰ@FIp"426P 1ѡ$ЎMEh1֓d/IβQBBluIy9̸@a0lIY jya/Ȩn<*+acUAa]'i2?].jY_c +Ǻxɓ#Lfʗͣa((W" [TCU;SY"K-bzJ\љ b"cHC5bm*ZHqJe끬*(TlM  *t*Syj].ca,1d%u&N t7[IMeŸǐeM7-1S%W.<Ua XD\(4gC+;&͊,TfE1dQ"S.&~e~sfwB"—s6-̛rE;%eMUyTcX"\[>eNrYGukMbDT|_ e(7q0 E7V"[Cуf>#08OXIΑoX֘kNQJlN%'5cqSY1$aN>Yf;fU8eiH QeٱZN`i9-jqXZfM79@ye< 2#X7u@8,VF<$cbYL4eWSD V#.2QP*ٱTw'Ȏ)68\~!l7‚k!L0i E:9v&sa P9o15W9HoaC2(g 0g{Ú~ vVcmJߣ[lk+ї[_exFJd&›VL',Uɺ"ilFD8xwf,3u4;`r+ WdCv,za g 9;2C YtaF V8<[jr/縟#lBsjo-1HJdS,%+Vϴ]V"mgH+\o=[ ([ 視LRx.+Mr/sKy{U 9Hxݵu@ԔY8FӿsKqU`1=%,9ϲayQq·ugYŹK6]Y!XJt[xR).Oʛ7ywbTrҪ[UeE8x=8y&T4G-n%8,C9x~vb+v جDgo_P6LMXO54@\R`b"Ka\sw<΂jG@(k;D\,+eڇ7V*ZLUnTuЄH9Pu~VƛjvTH +KlQ##Y =v G"IH u'ˏe-rVc7i T!P?:UGkRku'%UrK=TT1tL#^=[ˋJtXމnzG=֪s1Ȳa%d~롺Nod~R+Eo/mCEn=(gT7nDZyA5ǻh/[ԜY.%5+8:DKUqQҾȆ<:'BaV4cUq%<fWUa?Q5Fqn+% kwx8CJd> n:K$X\D0V"凢J3&"0+yOVq$̵S4Ku"VuRΨDfT OVFDyvi%"J 'O>Muq:7'?Ny@ yݬ4~c8*/J|,MsemVrØ0蚋*_+;7.]+uG$׹e-5BI LPc jj&tiV53wXu,rA%:PփȣJdۺq=Xψ:yRD7s=:~ġP-?ȈOx'q=_Q]6.xԈf [_sά<%_XӜ1KD[*o\k!Ɩϵz눐`kkLka v6\Έ\/KX릤.$:O%m4s4Dz儒k [40"9Ok‹4u]9i5bhag59dt3͹-i'M whِ%  " b~vN9E~ 2{&Sv's;JrY΃Ҝ-v<$rD _9WT Ǫ46:1+uUY֤+_NrҧiLxJd; Msя_¥*.was/ Qk  yQs &nF^—c+3 CQ. qv#Ux"qU(b9>7JuƿOyZ:K1a6);/\ȖQMF3tL> 1e! ~^sn\vQ>c*GDzB:V;oų!>|?[yqeW ރ*&r {!~iW,_ gtv/rp~|;F[/UGce>'C|z*W ;s)$DqU0ߦdh/q}wB o͢吮?nhΛ<9%pDM_P?W8.\. sO`-GHRf>By9dWF7LB=+_Zxԇq^~c#TW1jOYDE1 ڂ|>_t5ѻ1c3~*| Ƣlnl\R|b~uo1kY^lǓXڰvV[E}f /_Ct,܆~ܕvʚjN襎G2c,];܍JjΏNZ)ݽ+{c{_(3G!>?7^,rt󈫋 ~c5ch!~Bt o>nv k7a|1P6| #>]EUtY뮲Hб 186#us0ǣo ɯ5Y_ a̷Sĭks?A8oYiѭ ǣeAѣc}knb YDz~-!{eS},/i9L_)c1y~-?y܂'|LJW|"W;*C`k}oz ˙À0584~˭llHGzT1!d&S1lItX߯+aeW/xhOGѸvb!{vÛ$n?o؍{8}Z֑}Yq8݆o'|D__L? DϧNGWP??2D\d9[aG1.׏8߬kh=hZ]:??Wb{W` qYz홣gj|B.dm_g?1G37.L_qo[_M ]?_b}N1$wA!>Hzf8o۟7`Ro2M0>4}xe]>[[ {uh  shϼRt̷e+[I;x>ķtעxDz<9D7 nQOi߱>#cA]Woen|kR/͡} R1}s]WBFFa=Ȟ^ĵK%D p$ljH7Kߞ z.,{j+ֿ}b̟EԯLHl7谞曉э]cVc>9`eކ %.z N:ϙ˘x<߁1~'z!~ {l_^( hVOqOGG(_m*+i*_7ݷB]O2]nA臯aG h^i[??E2 H2[pAUC5_]F\Shu 3v1=/WG迩}zLJ,ֿ7wk1ҦHj=Pvנ(}?"FzגrrF D`Lt }q-_v<XPf7q>wLW'C,Fz\X!'ZB̫v~3̈́8O54Ux+m}ϡ?ՙsp\4yk6nl&H7I }&NzR0ߞ wد+߱[WZGv\)ߎ6zV:Ir\͢0_o1o~4vޥhM~Cpt}v>l{#XK%`x }K{axM-lv,$z]{Q 'ʋy?DE>GcWh?) q[=odB/sk۾S-)~bBFLrbYٛpi1> y kKG.\ j\iөg>a1J| *bo當?ׄJ)ۺ#[p9K"U8'5m_l>臐==Tȵ`Jv Mux8ěl>?rU6v`^3+Eo f6]z3Sa'=( 3]XXHv**k}jZݟnD ]Rb\oݖ3#( f<؋sygTglP$3TlB:`&ǝDtRjt;0 /Ώg3dwѻit<253nnO2u=Gf4>^Sǐ7F`'F_]F<5Mz, O Է86';_T({nt_?Z姴Z|Cr='ϝNi{|qy`N2:CĜ:jd'5|(ঢA\dC@^yf ݍ@0E53ceSun׍d;ʇ:0ycU1Ys%kbJdÕ3KRpF5`Ljbv^\x@ǃ[͜PY2Ö^Wy66z =I1</g>ȶQͫdcwYP: L)\Ֆwm钐/krU%z|l fu!Y:?^(r$DA+fD٢;_tY2;۵e8&o4Gia qߵ=. i+JVoGgUpY϶A{3zDpV6 8\)9>]˧]|W?.+W)cu_ӯG):2貰[ 碛A1__Cn AQ*Iy{4V.m<2$oE^\CRsWs]{м*z% 8 eRT8 'l{A=KγA{nv~0/f;ܧۚ*:/Ό۞H3lczE=z* Tf%2YJM187oMX 9{Z< ZzV 9^78]E-DtO\;M甀Ln4+/F:<(ܥ5k-5G~&y{1<*sx }9)K] %xQ#ORKw ][KV[q 5rrW]TF-=!O-Z{ZKjeKgݛiO:SJ~uT`-9$HOm 9lT60Dpp|bdO*P[{5w? ݱ4ݩޣ﹩#߱uzAiS <66}ϸЏ߁N3@iVwON6 1| X+礼j(AS j_A7+`O֟4 {!p,<̵q'mI3+=sǢ i2^ :ke_F3pxE<q.ÖȁuUpK|)bVb=M,mel' ySB%V"<`}6 9"\YsW9pC 'Ikͬ\ FΠOZ+nɼj \4_u n$v肛Nub^_ 0r 9zL2@Wc;zs;Ig)(&XAꣷ|t~I>gv|TeQG\'4W~OmV~:O1+Wj bTv<2Ƀ-2|yd_ }fuo{T p6َϗ'٨D᯼4iTh-tf:s5obtp5P.`5dwa7e8lJ jO)>;jto/ gg.Y9qi,Tϕ(u_O]/l.zIۻdFRBY~t !1ꔭ_ ҅p73/20:u뻠/Ʉk5I8oCLZK! 뵃6Yho;Ӊ-J{;cC;mLZl=#σщ}'لqtȇ0#>:߹?lnvRLA lDHke@{X(u#UO$S[Jvɚ>Phmڑ1\]N2؈;,{Bpӷv k']:bZ* $2P#*#g|cuH$^aX!|!1kToԗb7V+nvdÙbA69JȾb_{OBŷ^ŗn/+8, F7߮8_CÓ*'ò)>Rlxd0jQ=^#Rȗ #o=[ H1fK~.Po]X{\`zzϟv$쉹c*5c9`lƬ/63=̚agV*m/ڴ>]2R{ 7?C״q x94GQ>`86>V]nt`吿E_!|/ f{&b`d.MZjXrMMm:#^Ŷ5b;bbYXq_#ޝH$!ƽm"p\8/-'Kh!!z =@2 /z = {&b̿~(a-L= )h8(Eo@|*wc}N>A4o kO !▞NvotCsGvyػ-`5Ow=6.oۻmj$HH}2&koJ+h&S'$%8)$'$ɓT'ꞁAK=itx2,.kVԤ!Fd9(7 FM!r0=4sFDbcb%2B=}z+͐N#8o9-N{0<'0͞&3%19N'uaYG>*1>؄+>0IRN&ȥ4]y-FӇX@bduCN]YIM%̬S&rA5JH};BCb&"b!Xz'T2U gb1#|X+kG|3b'*VT'3;1)K]Ka5QԙH8Pq9řie2,R)'.i}/QSTmDuSuçX'erE4JE^xL|$U} c ElL+Pñ> >+9/F"zln+W3ŘK Z>:(Dc\%qZaȥH 1C?>:`a)rLFd/x'HNPLaV1,zGV5_OhVD֑8 0ȂX-86#q Řɇ,4"18Էw;x{Rd-A':Y""25#R[|Eܢ2Z °!0X:`l}z ?q1c&h3Gq-QLhY˖d- UX='JyL)KaēxyH+=AxF@nAN0aKPOHA+MRG%i"$璘ĴA|U6k+3ID͸V&ͧQ\"GYP @;҈P8$8؊$wl^" 8)gT1r{h3_CA#| A7pw`F8W,gd3|}P*Dw7@S96Kj7!s3x:T{q`c#]* tXcL`SXL$d"xF#E$$vrOA>+k㸳|)Mہ,g`jly9Pp2Y'N)E 8<#y w0*vN8`ybw wCnx;{N#`'YfJDzLW+H{_K ~&B션C"0J,6q$gs:3s q`Of}ް[gS'˞}@4}.J[|ΜRF?|fy~|7w4qP>NiQ n=֚Gшo)^f]IM)o TV+\ @zV$4-,r\(9<[0$a,cwU8xQXo%'H;¤wO :d?_ X`S+AAcW _ ? hW r-`#kA @AWٿ]YG ⫰~5@uQK ˦r(h^,3D>Cȿ90_Ar*G ?ZP-~# 0A9 Kr(`\=&,̻)[?A'F_GrW=@o(Akk$h^0rP=`Ar/|.c>Ӟx:sѢbWi؜?;~lÜ9UI9O߆d:1)7}YM“/<.e鎌o[CvKSu\'S ^2aX.mܮ,xZ}]O_8T`tFnI6[ݽO@z D{19?|L0+X#_1wӸ6S4@@uiK@e&.d[˅oxs*`)2Wu7-o>3k6h X >q~¾◤^~~͢Cyǧ@.kkJ?G .8WGO\zƲ+^2 [V_a ;)>U\mSl\9btv懋XOS{}NW({Z2TEb݉Oǔie"K~j-U԰] Ocד,wa|i_e#~BƹTSC%b%aJKNJNHGEt)Y]!g؟XKB)B}c%.EzHL,~ .LWщT%l s(_EGq^֧orҳh_jؿ#^9a";b"rE6IE\EEKT?OxzBq^ܗx x\C]NOUP4[ \e)/Wi_Sn[i)w~^LĞ{3p'O 7C:X~ֱy+\/c?cO%WJ KXhuq*[(=1-n,#/a/K؅|q-!֛e!RpP|f =K.b$:g 4 w⍘LWQĞuӕ`\&#›\Mߞz~뛎xbcو? !~£(_i,j0jG_>,y>>y-M74ύ?vO|K>BG?@:M!,s/Hϑf؏#u_Cz1|X<>{j9?t?O<0)!p\|oc7)(͝y_ΠLlk\_~}15_:Q|uֳ D~7&V\b#`Oq\9Q n)w:#.EX9!.񍦈gR;}_[8q!~.cW6#QxAB ftN᫈{"^7ڙU*bZ•3 LW2Čg#lEXqgF*a2:ӨiT4*?a.!oA"L@HNNL'l yԯ Txx7lvRvE0^NO>(!=K4(<:p!k4ܟv>9\Tw?_qeyl{17{{Rd.J *&K*?l y~`P[̹3fozv5?WfM~Ngf( >-g<0)'zY]]R {+3ajfVtRmibjt$(.O`Ls/xtÝ^}OhP7{Cxo2|=? )AMӠ.mdwYjji ˰ MZWKuiU fw} ȁ[7,@(-Kav=ƆkbdW6)Caa9ɐ/kGЄ?s*-fÆ>(ԗU?Ցbc55L, 7[\w]ni ɉ+lSۼ>n'?=O}XO=@#Pwv kaDwf'蟎zQIQ2- rɯͯJm^e13*XxՓ`Tg/ˢz'ج43pi9c^_2hY{WcֽE~v3lxU Fdf[wr]acg֣%q-28{nU1e:X@ُ?>?4[&|r$/Uy~Ɏ'P+[!,ذ/%o9mr* V&n&ߴ2ק{+ -|;3~` an9A[1c$̙CCcU3B2Sr$pB6N'pՔJMyYHpc(㦃M77pkla 7ω%Y$,HUVw"_\&I)[c9$\ΤrV>hj/^N=1q44{Om.>ct5O9VgyyQ5TP"I8g%~:]Ӧۦ[C7[!;/>("3^zx݇X굾޷[Ai$fWZ?܊VNLXvM^ r2jEj3cb̨r/X9:9?gg-Ϥǒm87oܨƿx%h UHǛ*-%% 6ʒWh,#x.oسx2[>?,&xB^(֟c/!/zղ = a_~k*/p,~3^L[{ A*K1~G(g`={ nm0~Cq&t;<ig-Z$cʠ@^b[ EC3(pEnplNxj-xG9̜4O< |ds9\ۅ/tpؗYJx5Y?4rf3jg=C[?¸5} YIy-ݳ}m{pZ̺3x;C~!u { YyIyM.djBx;t%qnYxu|] z[ Wdۜ*Ʒ׽O{kd۬<Wi3aufO4)dbI6zݺ &QWeN<|Ͽ!4"k˯G>/ĝ'KuW eRp.Ξ-fY?p֯H^28|13͜k (>VMvؠVo v%s 8_zn W;i#86>]ez`ELi1r-(J# Sv`TDPx&@ K] ?;uCRmWqow8OG1RLeJ9=@s W'÷Tf%d냀7X2m!xgL6g]#!ޕ&8p{!7CP1aZ+`%]&Tc̵ɐ?NLHI\Y"L'o >Iebx|;fd~|G"POBX n5 ;!=w8lnB)}Ro|zY P>?Ziί9wa7lut6fv蔬S 8Ќsl7C^lnn@Y/ :eMAM ;iEUn6[s' '^mq-C~>lncڠ7l|_gڕ]eAdv? .GBz|Oવ٧o6J Rʧ=: {V2ʍ{!|ut?KW4 877fQ3Y/x}ۙ>2_.\Қ1(ϖiGW,vEi!_F\̨ؔ7i'MVdsn&\7'nըX%O~~ŧ{dc9_0 [Vu@C9}L"+8217ؚع ܅uEtſ+|p+7/WsQhzW| Z 𬵙6 )p3=3/B6$.ӗ7N_˿T_} I]w BzпQ7ӡ;G / _p_*,%ڛx"/l;O!✄_ [=Xbǜ $^cbYݜ42ov)@GY7\ klXet~kƄDgjVDAkEc!~Wp.?)G n%Ns'8FE+C?>8`gb_;\ЎU#Oo$CtK6z+Opܬ 8rvf8??Q<7Np.&k fNoњ=|ߙ>Fl\T׀la[oe#[9ʌௗB8$qVb.|5}J^p-9,sqsv|fmyR|~"`|{yKN|lhSv9p\mâ^i4,ò6ژ~Qq874f?x:(70\7΃vf8&HLڟt mi' Ϙ~ِٖ`{彐,dt~;!!{ށ~2=p7๧7Mme!Bg GMU }Ad7j郯϶q NA!FEDR!<ؽf4$hVn mB=qu'*vyLlkJ3En{3| jKǀ㵄j F8?sէs|Y>gYhm)Ԡ'v#vtr5m:KJ*x*[Q].w=tϙ ^?M$%f ̺2ʼ ?Kl 2xL;&zaY4{L|cGLqL`)ثqgCSA-Bklfx;WQY {05utHL57 n|l2NϮz:&w|wp Uщi^^oV3xpi7n17/Ww "WJCѥ,-&ـUCrNj<*dYu9uxo=س1o4Q?V}'0%{nϹ' 𒍉3kf_Q)6om 8ռahǎ^^P"Q~ (=_uܽc];ċ'7X_׼@? ܽ 3? oiC99p*j-[fB-cfMm%׼c߰JlE!Ҝڦ+<6 C1eQ8V<8~ʍoon3>z96(?\:lhǠ9Ƙ|'?LI14&Ɖ-OjC7tS?E7=UJ[=}2{͔l \3$褙}2d2-ƶn6jN +f@]bMG)9=e~?<=*6bLgS"c@WMYuGa2Ll 6-<qSԽ[7B]uM|+ ʣ&`e8ox3H |krt?tk?w[6򜔱%y-I6fMy6YeFd8sUcp0L4zݳi<-w U!>2+RC(OS;ff8Mk#ex/a2NU880+؛MkChys7+`/8np\7J&^_^[fVKxi6HmLtxwn ԱK^o_Hu>G_s:$tʭ}pW/R%_ bq^,>ӓsf=-b2kʋpNӛY*ϙ++1=:=Hԧэ۱ݘ#dήym^oC_ l)GTx[aoDz;csx 1g)}a˱Tcឲ‡ݩ%cw*|DSbOY]5 O_U~'5nͪYGnqK05+]-vdg,RzڊO=qlSJ'>xUt)Wzz$qgGRS2.*c,~]YEHIS|Zs7!3xI%3õHm%LHaEcaF2Ź h=,~[,| +ק;vt(_^i&LW|><ijye܈]X3O "E}>:elnQC>PGz@=Z@|P=w&bT\)/&JxD4֊O,Ɍ0$׷=*lȑ`U>(-7 b*-r2R/@l` A;&$Nޖ&DkIEeVXlz#fLD|@-5@V ',>Gf|IȦ͗aL5"̎` JwjAh. _:&R2c0%ˤI9V XeE񗪸hPT$*qm8ٵx)FKI;U!rh+s< kS1^*wz h$ dLq[1}ŝ "y0.y R `=X|O Xtx۹s@Uɿ?#`h)=EX-€I6كHJp?W R㘉+@фΰ,ධo{R _-JoIA?C)ywYUDՀ]ğU_Ԙ{a-OJ^c+"phz:4K cxG :=#P8 $w[*3S!ܳ1"Y1.(zlT`_B.;F͒S,=Se01Aa "<ȺHإ19[?;^-VAEwCnvFF-rTE8KRmAޠGD.sWEWc ::ٹ o03GQ uS㿓daKUhW.I.W18}ӻ[ [ 쥕 k3h K^ޚx*!ĺѺ*#Pۊ]Z(dKL#ޣ׈LjH|߻+_[y?0jAXksp1e) z_NL"y]^.)Z#rX53S&r.^^ExPI(zw8?:w00?z{$ȾQ_R$ u[/9̆+ˀxIqn v9$"qѸ c(p$߰_w5Ap-Jޅڒĩ6Cw(5.Q0$s 5\=9e Ԁz*I亼+nGpa=UN$%h0U" wZy)-te $Y;- ~ ¨[q\^rhW`-鏷^9]sgE(ų,8vOp&iqv::W=7 Ѽ"!^d%PH%|Yr6Rܝ8 =6ٵq8A ~-$ےTQ +~{9O`;ͱĪ^b怅v U~%ٶɀgfO0<;#jпo/cØϳ¸a_^JE|'WE|˝=?wNr'ov~Xa?6kX1u*X%ѳ> -|^,d-=X0bz_8[\~-G^ðC3CmC`?~Z?-n$,?6z~XbR|w<n9nG.,_%{9al]Xwa^աʘK0*÷3'`=v}뱞oc?MXn/Rzo~ ~ }M|l]ވ_ZM /cZ*~~qۅS a| 5,+4,Gr͡1X0ך7|$y7cp9*w!0ߗco b/VQ)e,;I{Pze ~Bp;G%0+=X~oOw&bg1ݯa9@HxoKw=E^%)_Xϖ!\ݜO6?Naң+H?l"4)}8RߓQ.;~L8厧~%~ʽWR.C̷op/o|'QDߍ ~Vl H a c ?Sx3a&tOpU W",bxFH(⧫1ߧ'c1:W).Q/[S6' '>F0_KM_K!g͏1~ͻE&|I_¤/P֐]0Ư&[ᧄDc iY=xViZ5ͤ0*wN_9DH؊0 S /?[ ~Ir`8#ZWѼa?hKLx%"n,$o9RɄ HK%~;vG\F,p(TRw.&yZJXJnJHY6遷ODHzmD6W#K ![Y4o>@H|/!YB%w!IT BZߌ#f17~&${ oR}o$lNx!׏=_z__MMB׉^':^1qBҋ{ We:aoS F)i\&/ZD|"E# $ፈ:0삅d,\BH0a5W B| ?rH_&L+GL$ P} h]YC8+Bjo>ed̟C8IB-o#xǼ_ !=Q=e~G<+hH]AXs_%L'M؏\sOHCӜllԏYҸfg̢zh޲,⟬ﳈYD,ϪIrI|.!LLLS&)X}o͠֋ *AAʠ3I̤gxfg=L'~NNfsBtiDiRSp؜?%ڟBBNu}J!c2e2dCd$7)ڙIH N4މx'$MLHMHrDH2xlY1k pHTBۘ;P&4E#RQ:SYE b!9PHg-엄y<$1b|XBT)Svr1WUľ-~ˮߊ~߆wnz.#\(YR(U(]2ĨUŸaw@rdw@qTw@stwp")P x qa8'NS|T8'N3|"b3DB3b\Ȣlf3by;ۧfV 9I۪7gɲ9[;?l[f53N +Aw@\ #`${6CMd3 PmL1. Qk1[ 6q Gm-p?3Ƭ)ov,3"ƙ9U{ֶDͦ )`ѼOAV2GSf+23|evG1)\;"sjL:d̩#w Xmi|eIr|(yc= G-CslK@G)y}cjh4P}6: jpؘuK'oJ_nG7%P{MY/6K]ĭ^%x!Pu4Ny0NfLԓ/j*xͲϕrs06xv"zH(&9Mj9tZŬ@F\VPX85rW-EVZkUU7F9n]ѝ5ETy<}h kXQXUT_U{{j-j).C%So=r=4hhW\_sghsg\o:Js溹{t.ݜN(帳y&^ˋbdbk{rSE?MY|=g5|Ģlvo7U%CL[j,l'3&lFsf|g=7OkeFsɋWYPd0^${{3K+[v@^n+${|u4:^V.4=:%?0ߖ _-A|e9OC;CM z77uZf6p4i^n-IpSpm^s!պ몲pe&}0fߒ`UґYq K.) X/Jr*K.9,Ƙ%z `z#CI,Խ_"aB;"{N+b #߶SzѴ[X"{./Z&(6_Wi5;xNl˳c>4ŰNo\Y,ʵCkwGM{nCuS-[ F}>?…C6~NDx>gпv/eVݶ:Ώ;{o9@ȄȾavxHxxɈ/zD#~'>2pT1,scޓ? o .ͧt.?tkvp7bPO|/} ݈ 3%:C?|}X yӏ_[PvtUxʼu Ż{Z`=t `jXx۞)wtRۥth zC+kݸj̅۱J2%۵mܧ 9:8ЁɎ)[q~jMS*e=kҽE&A.3=Sr~gҳǽ]bX)sAփm{}0rQ5ґ ɪҵaJW.(;^f>;9~%o[u\uo;c;wҜe(Vr%TSs~OW֣m=X-T<5}=9 pjfNg)X枝-lzݳ{銕1rSَ(+]gcPY#XJjgTԧ׽휒S:4ӛۻCf]:qA3J&circlize/inst/extdata/cytoBand.txt0000755000176200001440000007404214015721224017001 0ustar liggesuserschr1 0 2300000 p36.33 gneg chr1 2300000 5400000 p36.32 gpos25 chr1 5400000 7200000 p36.31 gneg chr1 7200000 9200000 p36.23 gpos25 chr1 9200000 12700000 p36.22 gneg chr1 12700000 16200000 p36.21 gpos50 chr1 16200000 20400000 p36.13 gneg chr1 20400000 23900000 p36.12 gpos25 chr1 23900000 28000000 p36.11 gneg chr1 28000000 30200000 p35.3 gpos25 chr1 30200000 32400000 p35.2 gneg chr1 32400000 34600000 p35.1 gpos25 chr1 34600000 40100000 p34.3 gneg chr1 40100000 44100000 p34.2 gpos25 chr1 44100000 46800000 p34.1 gneg chr1 46800000 50700000 p33 gpos75 chr1 50700000 56100000 p32.3 gneg chr1 56100000 59000000 p32.2 gpos50 chr1 59000000 61300000 p32.1 gneg chr1 61300000 68900000 p31.3 gpos50 chr1 68900000 69700000 p31.2 gneg chr1 69700000 84900000 p31.1 gpos100 chr1 84900000 88400000 p22.3 gneg chr1 88400000 92000000 p22.2 gpos75 chr1 92000000 94700000 p22.1 gneg chr1 94700000 99700000 p21.3 gpos75 chr1 99700000 102200000 p21.2 gneg chr1 102200000 107200000 p21.1 gpos100 chr1 107200000 111800000 p13.3 gneg chr1 111800000 116100000 p13.2 gpos50 chr1 116100000 117800000 p13.1 gneg chr1 117800000 120600000 p12 gpos50 chr1 120600000 121500000 p11.2 gneg chr1 121500000 125000000 p11.1 acen chr1 125000000 128900000 q11 acen chr1 128900000 142600000 q12 gvar chr1 142600000 147000000 q21.1 gneg chr1 147000000 150300000 q21.2 gpos50 chr1 150300000 155000000 q21.3 gneg chr1 155000000 156500000 q22 gpos50 chr1 156500000 159100000 q23.1 gneg chr1 159100000 160500000 q23.2 gpos50 chr1 160500000 165500000 q23.3 gneg chr1 165500000 167200000 q24.1 gpos50 chr1 167200000 170900000 q24.2 gneg chr1 170900000 172900000 q24.3 gpos75 chr1 172900000 176000000 q25.1 gneg chr1 176000000 180300000 q25.2 gpos50 chr1 180300000 185800000 q25.3 gneg chr1 185800000 190800000 q31.1 gpos100 chr1 190800000 193800000 q31.2 gneg chr1 193800000 198700000 q31.3 gpos100 chr1 198700000 207200000 q32.1 gneg chr1 207200000 211500000 q32.2 gpos25 chr1 211500000 214500000 q32.3 gneg chr1 214500000 224100000 q41 gpos100 chr1 224100000 224600000 q42.11 gneg chr1 224600000 227000000 q42.12 gpos25 chr1 227000000 230700000 q42.13 gneg chr1 230700000 234700000 q42.2 gpos50 chr1 234700000 236600000 q42.3 gneg chr1 236600000 243700000 q43 gpos75 chr1 243700000 249250621 q44 gneg chr10 0 3000000 p15.3 gneg chr10 3000000 3800000 p15.2 gpos25 chr10 3800000 6600000 p15.1 gneg chr10 6600000 12200000 p14 gpos75 chr10 12200000 17300000 p13 gneg chr10 17300000 18600000 p12.33 gpos75 chr10 18600000 18700000 p12.32 gneg chr10 18700000 22600000 p12.31 gpos75 chr10 22600000 24600000 p12.2 gneg chr10 24600000 29600000 p12.1 gpos50 chr10 29600000 31300000 p11.23 gneg chr10 31300000 34400000 p11.22 gpos25 chr10 34400000 38000000 p11.21 gneg chr10 38000000 40200000 p11.1 acen chr10 40200000 42300000 q11.1 acen chr10 42300000 46100000 q11.21 gneg chr10 46100000 49900000 q11.22 gpos25 chr10 49900000 52900000 q11.23 gneg chr10 52900000 61200000 q21.1 gpos100 chr10 61200000 64500000 q21.2 gneg chr10 64500000 70600000 q21.3 gpos100 chr10 70600000 74900000 q22.1 gneg chr10 74900000 77700000 q22.2 gpos50 chr10 77700000 82000000 q22.3 gneg chr10 82000000 87900000 q23.1 gpos100 chr10 87900000 89500000 q23.2 gneg chr10 89500000 92900000 q23.31 gpos75 chr10 92900000 94100000 q23.32 gneg chr10 94100000 97000000 q23.33 gpos50 chr10 97000000 99300000 q24.1 gneg chr10 99300000 101900000 q24.2 gpos50 chr10 101900000 103000000 q24.31 gneg chr10 103000000 104900000 q24.32 gpos25 chr10 104900000 105800000 q24.33 gneg chr10 105800000 111900000 q25.1 gpos100 chr10 111900000 114900000 q25.2 gneg chr10 114900000 119100000 q25.3 gpos75 chr10 119100000 121700000 q26.11 gneg chr10 121700000 123100000 q26.12 gpos50 chr10 123100000 127500000 q26.13 gneg chr10 127500000 130600000 q26.2 gpos50 chr10 130600000 135534747 q26.3 gneg chr11 0 2800000 p15.5 gneg chr11 2800000 10700000 p15.4 gpos50 chr11 10700000 12700000 p15.3 gneg chr11 12700000 16200000 p15.2 gpos50 chr11 16200000 21700000 p15.1 gneg chr11 21700000 26100000 p14.3 gpos100 chr11 26100000 27200000 p14.2 gneg chr11 27200000 31000000 p14.1 gpos75 chr11 31000000 36400000 p13 gneg chr11 36400000 43500000 p12 gpos100 chr11 43500000 48800000 p11.2 gneg chr11 48800000 51600000 p11.12 gpos75 chr11 51600000 53700000 p11.11 acen chr11 53700000 55700000 q11 acen chr11 55700000 59900000 q12.1 gpos75 chr11 59900000 61700000 q12.2 gneg chr11 61700000 63400000 q12.3 gpos25 chr11 63400000 65900000 q13.1 gneg chr11 65900000 68400000 q13.2 gpos25 chr11 68400000 70400000 q13.3 gneg chr11 70400000 75200000 q13.4 gpos50 chr11 75200000 77100000 q13.5 gneg chr11 77100000 85600000 q14.1 gpos100 chr11 85600000 88300000 q14.2 gneg chr11 88300000 92800000 q14.3 gpos100 chr11 92800000 97200000 q21 gneg chr11 97200000 102100000 q22.1 gpos100 chr11 102100000 102900000 q22.2 gneg chr11 102900000 110400000 q22.3 gpos100 chr11 110400000 112500000 q23.1 gneg chr11 112500000 114500000 q23.2 gpos50 chr11 114500000 121200000 q23.3 gneg chr11 121200000 123900000 q24.1 gpos50 chr11 123900000 127800000 q24.2 gneg chr11 127800000 130800000 q24.3 gpos50 chr11 130800000 135006516 q25 gneg chr12 0 3300000 p13.33 gneg chr12 3300000 5400000 p13.32 gpos25 chr12 5400000 10100000 p13.31 gneg chr12 10100000 12800000 p13.2 gpos75 chr12 12800000 14800000 p13.1 gneg chr12 14800000 20000000 p12.3 gpos100 chr12 20000000 21300000 p12.2 gneg chr12 21300000 26500000 p12.1 gpos100 chr12 26500000 27800000 p11.23 gneg chr12 27800000 30700000 p11.22 gpos50 chr12 30700000 33300000 p11.21 gneg chr12 33300000 35800000 p11.1 acen chr12 35800000 38200000 q11 acen chr12 38200000 46400000 q12 gpos100 chr12 46400000 49100000 q13.11 gneg chr12 49100000 51500000 q13.12 gpos25 chr12 51500000 54900000 q13.13 gneg chr12 54900000 56600000 q13.2 gpos25 chr12 56600000 58100000 q13.3 gneg chr12 58100000 63100000 q14.1 gpos75 chr12 63100000 65100000 q14.2 gneg chr12 65100000 67700000 q14.3 gpos50 chr12 67700000 71500000 q15 gneg chr12 71500000 75700000 q21.1 gpos75 chr12 75700000 80300000 q21.2 gneg chr12 80300000 86700000 q21.31 gpos100 chr12 86700000 89000000 q21.32 gneg chr12 89000000 92600000 q21.33 gpos100 chr12 92600000 96200000 q22 gneg chr12 96200000 101600000 q23.1 gpos75 chr12 101600000 103800000 q23.2 gneg chr12 103800000 109000000 q23.3 gpos50 chr12 109000000 111700000 q24.11 gneg chr12 111700000 112300000 q24.12 gpos25 chr12 112300000 114300000 q24.13 gneg chr12 114300000 116800000 q24.21 gpos50 chr12 116800000 118100000 q24.22 gneg chr12 118100000 120700000 q24.23 gpos50 chr12 120700000 125900000 q24.31 gneg chr12 125900000 129300000 q24.32 gpos50 chr12 129300000 133851895 q24.33 gneg chr13 0 4500000 p13 gvar chr13 4500000 10000000 p12 stalk chr13 10000000 16300000 p11.2 gvar chr13 16300000 17900000 p11.1 acen chr13 17900000 19500000 q11 acen chr13 19500000 23300000 q12.11 gneg chr13 23300000 25500000 q12.12 gpos25 chr13 25500000 27800000 q12.13 gneg chr13 27800000 28900000 q12.2 gpos25 chr13 28900000 32200000 q12.3 gneg chr13 32200000 34000000 q13.1 gpos50 chr13 34000000 35500000 q13.2 gneg chr13 35500000 40100000 q13.3 gpos75 chr13 40100000 45200000 q14.11 gneg chr13 45200000 45800000 q14.12 gpos25 chr13 45800000 47300000 q14.13 gneg chr13 47300000 50900000 q14.2 gpos50 chr13 50900000 55300000 q14.3 gneg chr13 55300000 59600000 q21.1 gpos100 chr13 59600000 62300000 q21.2 gneg chr13 62300000 65700000 q21.31 gpos75 chr13 65700000 68600000 q21.32 gneg chr13 68600000 73300000 q21.33 gpos100 chr13 73300000 75400000 q22.1 gneg chr13 75400000 77200000 q22.2 gpos50 chr13 77200000 79000000 q22.3 gneg chr13 79000000 87700000 q31.1 gpos100 chr13 87700000 90000000 q31.2 gneg chr13 90000000 95000000 q31.3 gpos100 chr13 95000000 98200000 q32.1 gneg chr13 98200000 99300000 q32.2 gpos25 chr13 99300000 101700000 q32.3 gneg chr13 101700000 104800000 q33.1 gpos100 chr13 104800000 107000000 q33.2 gneg chr13 107000000 110300000 q33.3 gpos100 chr13 110300000 115169878 q34 gneg chr14 0 3700000 p13 gvar chr14 3700000 8100000 p12 stalk chr14 8100000 16100000 p11.2 gvar chr14 16100000 17600000 p11.1 acen chr14 17600000 19100000 q11.1 acen chr14 19100000 24600000 q11.2 gneg chr14 24600000 33300000 q12 gpos100 chr14 33300000 35300000 q13.1 gneg chr14 35300000 36600000 q13.2 gpos50 chr14 36600000 37800000 q13.3 gneg chr14 37800000 43500000 q21.1 gpos100 chr14 43500000 47200000 q21.2 gneg chr14 47200000 50900000 q21.3 gpos100 chr14 50900000 54100000 q22.1 gneg chr14 54100000 55500000 q22.2 gpos25 chr14 55500000 58100000 q22.3 gneg chr14 58100000 62100000 q23.1 gpos75 chr14 62100000 64800000 q23.2 gneg chr14 64800000 67900000 q23.3 gpos50 chr14 67900000 70200000 q24.1 gneg chr14 70200000 73800000 q24.2 gpos50 chr14 73800000 79300000 q24.3 gneg chr14 79300000 83600000 q31.1 gpos100 chr14 83600000 84900000 q31.2 gneg chr14 84900000 89800000 q31.3 gpos100 chr14 89800000 91900000 q32.11 gneg chr14 91900000 94700000 q32.12 gpos25 chr14 94700000 96300000 q32.13 gneg chr14 96300000 101400000 q32.2 gpos50 chr14 101400000 103200000 q32.31 gneg chr14 103200000 104000000 q32.32 gpos50 chr14 104000000 107349540 q32.33 gneg chr15 0 3900000 p13 gvar chr15 3900000 8700000 p12 stalk chr15 8700000 15800000 p11.2 gvar chr15 15800000 19000000 p11.1 acen chr15 19000000 20700000 q11.1 acen chr15 20700000 25700000 q11.2 gneg chr15 25700000 28100000 q12 gpos50 chr15 28100000 30300000 q13.1 gneg chr15 30300000 31200000 q13.2 gpos50 chr15 31200000 33600000 q13.3 gneg chr15 33600000 40100000 q14 gpos75 chr15 40100000 42800000 q15.1 gneg chr15 42800000 43600000 q15.2 gpos25 chr15 43600000 44800000 q15.3 gneg chr15 44800000 49500000 q21.1 gpos75 chr15 49500000 52900000 q21.2 gneg chr15 52900000 59100000 q21.3 gpos75 chr15 59100000 59300000 q22.1 gneg chr15 59300000 63700000 q22.2 gpos25 chr15 63700000 67200000 q22.31 gneg chr15 67200000 67300000 q22.32 gpos25 chr15 67300000 67500000 q22.33 gneg chr15 67500000 72700000 q23 gpos25 chr15 72700000 75200000 q24.1 gneg chr15 75200000 76600000 q24.2 gpos25 chr15 76600000 78300000 q24.3 gneg chr15 78300000 81700000 q25.1 gpos50 chr15 81700000 85200000 q25.2 gneg chr15 85200000 89100000 q25.3 gpos50 chr15 89100000 94300000 q26.1 gneg chr15 94300000 98500000 q26.2 gpos50 chr15 98500000 102531392 q26.3 gneg chr16 0 7900000 p13.3 gneg chr16 7900000 10500000 p13.2 gpos50 chr16 10500000 12600000 p13.13 gneg chr16 12600000 14800000 p13.12 gpos50 chr16 14800000 16800000 p13.11 gneg chr16 16800000 21200000 p12.3 gpos50 chr16 21200000 24200000 p12.2 gneg chr16 24200000 28100000 p12.1 gpos50 chr16 28100000 34600000 p11.2 gneg chr16 34600000 36600000 p11.1 acen chr16 36600000 38600000 q11.1 acen chr16 38600000 47000000 q11.2 gvar chr16 47000000 52600000 q12.1 gneg chr16 52600000 56700000 q12.2 gpos50 chr16 56700000 57400000 q13 gneg chr16 57400000 66700000 q21 gpos100 chr16 66700000 70800000 q22.1 gneg chr16 70800000 72900000 q22.2 gpos50 chr16 72900000 74100000 q22.3 gneg chr16 74100000 79200000 q23.1 gpos75 chr16 79200000 81700000 q23.2 gneg chr16 81700000 84200000 q23.3 gpos50 chr16 84200000 87100000 q24.1 gneg chr16 87100000 88700000 q24.2 gpos25 chr16 88700000 90354753 q24.3 gneg chr17 0 3300000 p13.3 gneg chr17 3300000 6500000 p13.2 gpos50 chr17 6500000 10700000 p13.1 gneg chr17 10700000 16000000 p12 gpos75 chr17 16000000 22200000 p11.2 gneg chr17 22200000 24000000 p11.1 acen chr17 24000000 25800000 q11.1 acen chr17 25800000 31800000 q11.2 gneg chr17 31800000 38100000 q12 gpos50 chr17 38100000 38400000 q21.1 gneg chr17 38400000 40900000 q21.2 gpos25 chr17 40900000 44900000 q21.31 gneg chr17 44900000 47400000 q21.32 gpos25 chr17 47400000 50200000 q21.33 gneg chr17 50200000 57600000 q22 gpos75 chr17 57600000 58300000 q23.1 gneg chr17 58300000 61100000 q23.2 gpos75 chr17 61100000 62600000 q23.3 gneg chr17 62600000 64200000 q24.1 gpos50 chr17 64200000 67100000 q24.2 gneg chr17 67100000 70900000 q24.3 gpos75 chr17 70900000 74800000 q25.1 gneg chr17 74800000 75300000 q25.2 gpos25 chr17 75300000 81195210 q25.3 gneg chr18 0 2900000 p11.32 gneg chr18 2900000 7100000 p11.31 gpos50 chr18 7100000 8500000 p11.23 gneg chr18 8500000 10900000 p11.22 gpos25 chr18 10900000 15400000 p11.21 gneg chr18 15400000 17200000 p11.1 acen chr18 17200000 19000000 q11.1 acen chr18 19000000 25000000 q11.2 gneg chr18 25000000 32700000 q12.1 gpos100 chr18 32700000 37200000 q12.2 gneg chr18 37200000 43500000 q12.3 gpos75 chr18 43500000 48200000 q21.1 gneg chr18 48200000 53800000 q21.2 gpos75 chr18 53800000 56200000 q21.31 gneg chr18 56200000 59000000 q21.32 gpos50 chr18 59000000 61600000 q21.33 gneg chr18 61600000 66800000 q22.1 gpos100 chr18 66800000 68700000 q22.2 gneg chr18 68700000 73100000 q22.3 gpos25 chr18 73100000 78077248 q23 gneg chr19 0 6900000 p13.3 gneg chr19 6900000 13900000 p13.2 gpos25 chr19 13900000 14000000 p13.13 gneg chr19 14000000 16300000 p13.12 gpos25 chr19 16300000 20000000 p13.11 gneg chr19 20000000 24400000 p12 gvar chr19 24400000 26500000 p11 acen chr19 26500000 28600000 q11 acen chr19 28600000 32400000 q12 gvar chr19 32400000 35500000 q13.11 gneg chr19 35500000 38300000 q13.12 gpos25 chr19 38300000 38700000 q13.13 gneg chr19 38700000 43400000 q13.2 gpos25 chr19 43400000 45200000 q13.31 gneg chr19 45200000 48000000 q13.32 gpos25 chr19 48000000 51400000 q13.33 gneg chr19 51400000 53600000 q13.41 gpos25 chr19 53600000 56300000 q13.42 gneg chr19 56300000 59128983 q13.43 gpos25 chr2 0 4400000 p25.3 gneg chr2 4400000 7100000 p25.2 gpos50 chr2 7100000 12200000 p25.1 gneg chr2 12200000 16700000 p24.3 gpos75 chr2 16700000 19200000 p24.2 gneg chr2 19200000 24000000 p24.1 gpos75 chr2 24000000 27900000 p23.3 gneg chr2 27900000 30000000 p23.2 gpos25 chr2 30000000 32100000 p23.1 gneg chr2 32100000 36600000 p22.3 gpos75 chr2 36600000 38600000 p22.2 gneg chr2 38600000 41800000 p22.1 gpos50 chr2 41800000 47800000 p21 gneg chr2 47800000 52900000 p16.3 gpos100 chr2 52900000 55000000 p16.2 gneg chr2 55000000 61300000 p16.1 gpos100 chr2 61300000 64100000 p15 gneg chr2 64100000 68600000 p14 gpos50 chr2 68600000 71500000 p13.3 gneg chr2 71500000 73500000 p13.2 gpos50 chr2 73500000 75000000 p13.1 gneg chr2 75000000 83300000 p12 gpos100 chr2 83300000 90500000 p11.2 gneg chr2 90500000 93300000 p11.1 acen chr2 93300000 96800000 q11.1 acen chr2 96800000 102700000 q11.2 gneg chr2 102700000 106000000 q12.1 gpos50 chr2 106000000 107500000 q12.2 gneg chr2 107500000 110200000 q12.3 gpos25 chr2 110200000 114400000 q13 gneg chr2 114400000 118800000 q14.1 gpos50 chr2 118800000 122400000 q14.2 gneg chr2 122400000 129900000 q14.3 gpos50 chr2 129900000 132500000 q21.1 gneg chr2 132500000 135100000 q21.2 gpos25 chr2 135100000 136800000 q21.3 gneg chr2 136800000 142200000 q22.1 gpos100 chr2 142200000 144100000 q22.2 gneg chr2 144100000 148700000 q22.3 gpos100 chr2 148700000 149900000 q23.1 gneg chr2 149900000 150500000 q23.2 gpos25 chr2 150500000 154900000 q23.3 gneg chr2 154900000 159800000 q24.1 gpos75 chr2 159800000 163700000 q24.2 gneg chr2 163700000 169700000 q24.3 gpos75 chr2 169700000 178000000 q31.1 gneg chr2 178000000 180600000 q31.2 gpos50 chr2 180600000 183000000 q31.3 gneg chr2 183000000 189400000 q32.1 gpos75 chr2 189400000 191900000 q32.2 gneg chr2 191900000 197400000 q32.3 gpos75 chr2 197400000 203300000 q33.1 gneg chr2 203300000 204900000 q33.2 gpos50 chr2 204900000 209000000 q33.3 gneg chr2 209000000 215300000 q34 gpos100 chr2 215300000 221500000 q35 gneg chr2 221500000 225200000 q36.1 gpos75 chr2 225200000 226100000 q36.2 gneg chr2 226100000 231000000 q36.3 gpos100 chr2 231000000 235600000 q37.1 gneg chr2 235600000 237300000 q37.2 gpos50 chr2 237300000 243199373 q37.3 gneg chr20 0 5100000 p13 gneg chr20 5100000 9200000 p12.3 gpos75 chr20 9200000 12100000 p12.2 gneg chr20 12100000 17900000 p12.1 gpos75 chr20 17900000 21300000 p11.23 gneg chr20 21300000 22300000 p11.22 gpos25 chr20 22300000 25600000 p11.21 gneg chr20 25600000 27500000 p11.1 acen chr20 27500000 29400000 q11.1 acen chr20 29400000 32100000 q11.21 gneg chr20 32100000 34400000 q11.22 gpos25 chr20 34400000 37600000 q11.23 gneg chr20 37600000 41700000 q12 gpos75 chr20 41700000 42100000 q13.11 gneg chr20 42100000 46400000 q13.12 gpos25 chr20 46400000 49800000 q13.13 gneg chr20 49800000 55000000 q13.2 gpos75 chr20 55000000 56500000 q13.31 gneg chr20 56500000 58400000 q13.32 gpos50 chr20 58400000 63025520 q13.33 gneg chr21 0 2800000 p13 gvar chr21 2800000 6800000 p12 stalk chr21 6800000 10900000 p11.2 gvar chr21 10900000 13200000 p11.1 acen chr21 13200000 14300000 q11.1 acen chr21 14300000 16400000 q11.2 gneg chr21 16400000 24000000 q21.1 gpos100 chr21 24000000 26800000 q21.2 gneg chr21 26800000 31500000 q21.3 gpos75 chr21 31500000 35800000 q22.11 gneg chr21 35800000 37800000 q22.12 gpos50 chr21 37800000 39700000 q22.13 gneg chr21 39700000 42600000 q22.2 gpos50 chr21 42600000 48129895 q22.3 gneg chr22 0 3800000 p13 gvar chr22 3800000 8300000 p12 stalk chr22 8300000 12200000 p11.2 gvar chr22 12200000 14700000 p11.1 acen chr22 14700000 17900000 q11.1 acen chr22 17900000 22200000 q11.21 gneg chr22 22200000 23500000 q11.22 gpos25 chr22 23500000 25900000 q11.23 gneg chr22 25900000 29600000 q12.1 gpos50 chr22 29600000 32200000 q12.2 gneg chr22 32200000 37600000 q12.3 gpos50 chr22 37600000 41000000 q13.1 gneg chr22 41000000 44200000 q13.2 gpos50 chr22 44200000 48400000 q13.31 gneg chr22 48400000 49400000 q13.32 gpos50 chr22 49400000 51304566 q13.33 gneg chr3 0 2800000 p26.3 gpos50 chr3 2800000 4000000 p26.2 gneg chr3 4000000 8700000 p26.1 gpos50 chr3 8700000 11800000 p25.3 gneg chr3 11800000 13300000 p25.2 gpos25 chr3 13300000 16400000 p25.1 gneg chr3 16400000 23900000 p24.3 gpos100 chr3 23900000 26400000 p24.2 gneg chr3 26400000 30900000 p24.1 gpos75 chr3 30900000 32100000 p23 gneg chr3 32100000 36500000 p22.3 gpos50 chr3 36500000 39400000 p22.2 gneg chr3 39400000 43700000 p22.1 gpos75 chr3 43700000 44100000 p21.33 gneg chr3 44100000 44200000 p21.32 gpos50 chr3 44200000 50600000 p21.31 gneg chr3 50600000 52300000 p21.2 gpos25 chr3 52300000 54400000 p21.1 gneg chr3 54400000 58600000 p14.3 gpos50 chr3 58600000 63700000 p14.2 gneg chr3 63700000 69800000 p14.1 gpos50 chr3 69800000 74200000 p13 gneg chr3 74200000 79800000 p12.3 gpos75 chr3 79800000 83500000 p12.2 gneg chr3 83500000 87200000 p12.1 gpos75 chr3 87200000 87900000 p11.2 gneg chr3 87900000 91000000 p11.1 acen chr3 91000000 93900000 q11.1 acen chr3 93900000 98300000 q11.2 gvar chr3 98300000 100000000 q12.1 gneg chr3 100000000 100900000 q12.2 gpos25 chr3 100900000 102800000 q12.3 gneg chr3 102800000 106200000 q13.11 gpos75 chr3 106200000 107900000 q13.12 gneg chr3 107900000 111300000 q13.13 gpos50 chr3 111300000 113500000 q13.2 gneg chr3 113500000 117300000 q13.31 gpos75 chr3 117300000 119000000 q13.32 gneg chr3 119000000 121900000 q13.33 gpos75 chr3 121900000 123800000 q21.1 gneg chr3 123800000 125800000 q21.2 gpos25 chr3 125800000 129200000 q21.3 gneg chr3 129200000 133700000 q22.1 gpos25 chr3 133700000 135700000 q22.2 gneg chr3 135700000 138700000 q22.3 gpos25 chr3 138700000 142800000 q23 gneg chr3 142800000 148900000 q24 gpos100 chr3 148900000 152100000 q25.1 gneg chr3 152100000 155000000 q25.2 gpos50 chr3 155000000 157000000 q25.31 gneg chr3 157000000 159000000 q25.32 gpos50 chr3 159000000 160700000 q25.33 gneg chr3 160700000 167600000 q26.1 gpos100 chr3 167600000 170900000 q26.2 gneg chr3 170900000 175700000 q26.31 gpos75 chr3 175700000 179000000 q26.32 gneg chr3 179000000 182700000 q26.33 gpos75 chr3 182700000 184500000 q27.1 gneg chr3 184500000 186000000 q27.2 gpos25 chr3 186000000 187900000 q27.3 gneg chr3 187900000 192300000 q28 gpos75 chr3 192300000 198022430 q29 gneg chr4 0 4500000 p16.3 gneg chr4 4500000 6000000 p16.2 gpos25 chr4 6000000 11300000 p16.1 gneg chr4 11300000 15200000 p15.33 gpos50 chr4 15200000 17800000 p15.32 gneg chr4 17800000 21300000 p15.31 gpos75 chr4 21300000 27700000 p15.2 gneg chr4 27700000 35800000 p15.1 gpos100 chr4 35800000 41200000 p14 gneg chr4 41200000 44600000 p13 gpos50 chr4 44600000 48200000 p12 gneg chr4 48200000 50400000 p11 acen chr4 50400000 52700000 q11 acen chr4 52700000 59500000 q12 gneg chr4 59500000 66600000 q13.1 gpos100 chr4 66600000 70500000 q13.2 gneg chr4 70500000 76300000 q13.3 gpos75 chr4 76300000 78900000 q21.1 gneg chr4 78900000 82400000 q21.21 gpos50 chr4 82400000 84100000 q21.22 gneg chr4 84100000 86900000 q21.23 gpos25 chr4 86900000 88000000 q21.3 gneg chr4 88000000 93700000 q22.1 gpos75 chr4 93700000 95100000 q22.2 gneg chr4 95100000 98800000 q22.3 gpos75 chr4 98800000 101100000 q23 gneg chr4 101100000 107700000 q24 gpos50 chr4 107700000 114100000 q25 gneg chr4 114100000 120800000 q26 gpos75 chr4 120800000 123800000 q27 gneg chr4 123800000 128800000 q28.1 gpos50 chr4 128800000 131100000 q28.2 gneg chr4 131100000 139500000 q28.3 gpos100 chr4 139500000 141500000 q31.1 gneg chr4 141500000 146800000 q31.21 gpos25 chr4 146800000 148500000 q31.22 gneg chr4 148500000 151100000 q31.23 gpos25 chr4 151100000 155600000 q31.3 gneg chr4 155600000 161800000 q32.1 gpos100 chr4 161800000 164500000 q32.2 gneg chr4 164500000 170100000 q32.3 gpos100 chr4 170100000 171900000 q33 gneg chr4 171900000 176300000 q34.1 gpos75 chr4 176300000 177500000 q34.2 gneg chr4 177500000 183200000 q34.3 gpos100 chr4 183200000 187100000 q35.1 gneg chr4 187100000 191154276 q35.2 gpos25 chr5 0 4500000 p15.33 gneg chr5 4500000 6300000 p15.32 gpos25 chr5 6300000 9800000 p15.31 gneg chr5 9800000 15000000 p15.2 gpos50 chr5 15000000 18400000 p15.1 gneg chr5 18400000 23300000 p14.3 gpos100 chr5 23300000 24600000 p14.2 gneg chr5 24600000 28900000 p14.1 gpos100 chr5 28900000 33800000 p13.3 gneg chr5 33800000 38400000 p13.2 gpos25 chr5 38400000 42500000 p13.1 gneg chr5 42500000 46100000 p12 gpos50 chr5 46100000 48400000 p11 acen chr5 48400000 50700000 q11.1 acen chr5 50700000 58900000 q11.2 gneg chr5 58900000 62900000 q12.1 gpos75 chr5 62900000 63200000 q12.2 gneg chr5 63200000 66700000 q12.3 gpos75 chr5 66700000 68400000 q13.1 gneg chr5 68400000 73300000 q13.2 gpos50 chr5 73300000 76900000 q13.3 gneg chr5 76900000 81400000 q14.1 gpos50 chr5 81400000 82800000 q14.2 gneg chr5 82800000 92300000 q14.3 gpos100 chr5 92300000 98200000 q15 gneg chr5 98200000 102800000 q21.1 gpos100 chr5 102800000 104500000 q21.2 gneg chr5 104500000 109600000 q21.3 gpos100 chr5 109600000 111500000 q22.1 gneg chr5 111500000 113100000 q22.2 gpos50 chr5 113100000 115200000 q22.3 gneg chr5 115200000 121400000 q23.1 gpos100 chr5 121400000 127300000 q23.2 gneg chr5 127300000 130600000 q23.3 gpos100 chr5 130600000 136200000 q31.1 gneg chr5 136200000 139500000 q31.2 gpos25 chr5 139500000 144500000 q31.3 gneg chr5 144500000 149800000 q32 gpos75 chr5 149800000 152700000 q33.1 gneg chr5 152700000 155700000 q33.2 gpos50 chr5 155700000 159900000 q33.3 gneg chr5 159900000 168500000 q34 gpos100 chr5 168500000 172800000 q35.1 gneg chr5 172800000 176600000 q35.2 gpos25 chr5 176600000 180915260 q35.3 gneg chr6 0 2300000 p25.3 gneg chr6 2300000 4200000 p25.2 gpos25 chr6 4200000 7100000 p25.1 gneg chr6 7100000 10600000 p24.3 gpos50 chr6 10600000 11600000 p24.2 gneg chr6 11600000 13400000 p24.1 gpos25 chr6 13400000 15200000 p23 gneg chr6 15200000 25200000 p22.3 gpos75 chr6 25200000 27000000 p22.2 gneg chr6 27000000 30400000 p22.1 gpos50 chr6 30400000 32100000 p21.33 gneg chr6 32100000 33500000 p21.32 gpos25 chr6 33500000 36600000 p21.31 gneg chr6 36600000 40500000 p21.2 gpos25 chr6 40500000 46200000 p21.1 gneg chr6 46200000 51800000 p12.3 gpos100 chr6 51800000 52900000 p12.2 gneg chr6 52900000 57000000 p12.1 gpos100 chr6 57000000 58700000 p11.2 gneg chr6 58700000 61000000 p11.1 acen chr6 61000000 63300000 q11.1 acen chr6 63300000 63400000 q11.2 gneg chr6 63400000 70000000 q12 gpos100 chr6 70000000 75900000 q13 gneg chr6 75900000 83900000 q14.1 gpos50 chr6 83900000 84900000 q14.2 gneg chr6 84900000 88000000 q14.3 gpos50 chr6 88000000 93100000 q15 gneg chr6 93100000 99500000 q16.1 gpos100 chr6 99500000 100600000 q16.2 gneg chr6 100600000 105500000 q16.3 gpos100 chr6 105500000 114600000 q21 gneg chr6 114600000 118300000 q22.1 gpos75 chr6 118300000 118500000 q22.2 gneg chr6 118500000 126100000 q22.31 gpos100 chr6 126100000 127100000 q22.32 gneg chr6 127100000 130300000 q22.33 gpos75 chr6 130300000 131200000 q23.1 gneg chr6 131200000 135200000 q23.2 gpos50 chr6 135200000 139000000 q23.3 gneg chr6 139000000 142800000 q24.1 gpos75 chr6 142800000 145600000 q24.2 gneg chr6 145600000 149000000 q24.3 gpos75 chr6 149000000 152500000 q25.1 gneg chr6 152500000 155500000 q25.2 gpos50 chr6 155500000 161000000 q25.3 gneg chr6 161000000 164500000 q26 gpos50 chr6 164500000 171115067 q27 gneg chr7 0 2800000 p22.3 gneg chr7 2800000 4500000 p22.2 gpos25 chr7 4500000 7300000 p22.1 gneg chr7 7300000 13800000 p21.3 gpos100 chr7 13800000 16500000 p21.2 gneg chr7 16500000 20900000 p21.1 gpos100 chr7 20900000 25500000 p15.3 gneg chr7 25500000 28000000 p15.2 gpos50 chr7 28000000 28800000 p15.1 gneg chr7 28800000 35000000 p14.3 gpos75 chr7 35000000 37200000 p14.2 gneg chr7 37200000 43300000 p14.1 gpos75 chr7 43300000 45400000 p13 gneg chr7 45400000 49000000 p12.3 gpos75 chr7 49000000 50500000 p12.2 gneg chr7 50500000 54000000 p12.1 gpos75 chr7 54000000 58000000 p11.2 gneg chr7 58000000 59900000 p11.1 acen chr7 59900000 61700000 q11.1 acen chr7 61700000 67000000 q11.21 gneg chr7 67000000 72200000 q11.22 gpos50 chr7 72200000 77500000 q11.23 gneg chr7 77500000 86400000 q21.11 gpos100 chr7 86400000 88200000 q21.12 gneg chr7 88200000 91100000 q21.13 gpos75 chr7 91100000 92800000 q21.2 gneg chr7 92800000 98000000 q21.3 gpos75 chr7 98000000 103800000 q22.1 gneg chr7 103800000 104500000 q22.2 gpos50 chr7 104500000 107400000 q22.3 gneg chr7 107400000 114600000 q31.1 gpos75 chr7 114600000 117400000 q31.2 gneg chr7 117400000 121100000 q31.31 gpos75 chr7 121100000 123800000 q31.32 gneg chr7 123800000 127100000 q31.33 gpos75 chr7 127100000 129200000 q32.1 gneg chr7 129200000 130400000 q32.2 gpos25 chr7 130400000 132600000 q32.3 gneg chr7 132600000 138200000 q33 gpos50 chr7 138200000 143100000 q34 gneg chr7 143100000 147900000 q35 gpos75 chr7 147900000 152600000 q36.1 gneg chr7 152600000 155100000 q36.2 gpos25 chr7 155100000 159138663 q36.3 gneg chr8 0 2200000 p23.3 gneg chr8 2200000 6200000 p23.2 gpos75 chr8 6200000 12700000 p23.1 gneg chr8 12700000 19000000 p22 gpos100 chr8 19000000 23300000 p21.3 gneg chr8 23300000 27400000 p21.2 gpos50 chr8 27400000 28800000 p21.1 gneg chr8 28800000 36500000 p12 gpos75 chr8 36500000 38300000 p11.23 gneg chr8 38300000 39700000 p11.22 gpos25 chr8 39700000 43100000 p11.21 gneg chr8 43100000 45600000 p11.1 acen chr8 45600000 48100000 q11.1 acen chr8 48100000 52200000 q11.21 gneg chr8 52200000 52600000 q11.22 gpos75 chr8 52600000 55500000 q11.23 gneg chr8 55500000 61600000 q12.1 gpos50 chr8 61600000 62200000 q12.2 gneg chr8 62200000 66000000 q12.3 gpos50 chr8 66000000 68000000 q13.1 gneg chr8 68000000 70500000 q13.2 gpos50 chr8 70500000 73900000 q13.3 gneg chr8 73900000 78300000 q21.11 gpos100 chr8 78300000 80100000 q21.12 gneg chr8 80100000 84600000 q21.13 gpos75 chr8 84600000 86900000 q21.2 gneg chr8 86900000 93300000 q21.3 gpos100 chr8 93300000 99000000 q22.1 gneg chr8 99000000 101600000 q22.2 gpos25 chr8 101600000 106200000 q22.3 gneg chr8 106200000 110500000 q23.1 gpos75 chr8 110500000 112100000 q23.2 gneg chr8 112100000 117700000 q23.3 gpos100 chr8 117700000 119200000 q24.11 gneg chr8 119200000 122500000 q24.12 gpos50 chr8 122500000 127300000 q24.13 gneg chr8 127300000 131500000 q24.21 gpos50 chr8 131500000 136400000 q24.22 gneg chr8 136400000 139900000 q24.23 gpos75 chr8 139900000 146364022 q24.3 gneg chr9 0 2200000 p24.3 gneg chr9 2200000 4600000 p24.2 gpos25 chr9 4600000 9000000 p24.1 gneg chr9 9000000 14200000 p23 gpos75 chr9 14200000 16600000 p22.3 gneg chr9 16600000 18500000 p22.2 gpos25 chr9 18500000 19900000 p22.1 gneg chr9 19900000 25600000 p21.3 gpos100 chr9 25600000 28000000 p21.2 gneg chr9 28000000 33200000 p21.1 gpos100 chr9 33200000 36300000 p13.3 gneg chr9 36300000 38400000 p13.2 gpos25 chr9 38400000 41000000 p13.1 gneg chr9 41000000 43600000 p12 gpos50 chr9 43600000 47300000 p11.2 gneg chr9 47300000 49000000 p11.1 acen chr9 49000000 50700000 q11 acen chr9 50700000 65900000 q12 gvar chr9 65900000 68700000 q13 gneg chr9 68700000 72200000 q21.11 gpos25 chr9 72200000 74000000 q21.12 gneg chr9 74000000 79200000 q21.13 gpos50 chr9 79200000 81100000 q21.2 gneg chr9 81100000 84100000 q21.31 gpos50 chr9 84100000 86900000 q21.32 gneg chr9 86900000 90400000 q21.33 gpos50 chr9 90400000 91800000 q22.1 gneg chr9 91800000 93900000 q22.2 gpos25 chr9 93900000 96600000 q22.31 gneg chr9 96600000 99300000 q22.32 gpos25 chr9 99300000 102600000 q22.33 gneg chr9 102600000 108200000 q31.1 gpos100 chr9 108200000 111300000 q31.2 gneg chr9 111300000 114900000 q31.3 gpos25 chr9 114900000 117700000 q32 gneg chr9 117700000 122500000 q33.1 gpos75 chr9 122500000 125800000 q33.2 gneg chr9 125800000 130300000 q33.3 gpos25 chr9 130300000 133500000 q34.11 gneg chr9 133500000 134000000 q34.12 gpos25 chr9 134000000 135900000 q34.13 gneg chr9 135900000 137400000 q34.2 gpos25 chr9 137400000 141213431 q34.3 gneg chrX 0 4300000 p22.33 gneg chrX 4300000 6000000 p22.32 gpos50 chrX 6000000 9500000 p22.31 gneg chrX 9500000 17100000 p22.2 gpos50 chrX 17100000 19300000 p22.13 gneg chrX 19300000 21900000 p22.12 gpos50 chrX 21900000 24900000 p22.11 gneg chrX 24900000 29300000 p21.3 gpos100 chrX 29300000 31500000 p21.2 gneg chrX 31500000 37600000 p21.1 gpos100 chrX 37600000 42400000 p11.4 gneg chrX 42400000 46400000 p11.3 gpos75 chrX 46400000 49800000 p11.23 gneg chrX 49800000 54800000 p11.22 gpos25 chrX 54800000 58100000 p11.21 gneg chrX 58100000 60600000 p11.1 acen chrX 60600000 63000000 q11.1 acen chrX 63000000 64600000 q11.2 gneg chrX 64600000 67800000 q12 gpos50 chrX 67800000 71800000 q13.1 gneg chrX 71800000 73900000 q13.2 gpos50 chrX 73900000 76000000 q13.3 gneg chrX 76000000 84600000 q21.1 gpos100 chrX 84600000 86200000 q21.2 gneg chrX 86200000 91800000 q21.31 gpos100 chrX 91800000 93500000 q21.32 gneg chrX 93500000 98300000 q21.33 gpos75 chrX 98300000 102600000 q22.1 gneg chrX 102600000 103700000 q22.2 gpos50 chrX 103700000 108700000 q22.3 gneg chrX 108700000 116500000 q23 gpos75 chrX 116500000 120900000 q24 gneg chrX 120900000 128700000 q25 gpos100 chrX 128700000 130400000 q26.1 gneg chrX 130400000 133600000 q26.2 gpos25 chrX 133600000 138000000 q26.3 gneg chrX 138000000 140300000 q27.1 gpos75 chrX 140300000 142100000 q27.2 gneg chrX 142100000 147100000 q27.3 gpos100 chrX 147100000 155270560 q28 gneg chrY 0 2500000 p11.32 gneg chrY 2500000 3000000 p11.31 gpos50 chrY 3000000 11600000 p11.2 gneg chrY 11600000 12500000 p11.1 acen chrY 12500000 13400000 q11.1 acen chrY 13400000 15100000 q11.21 gneg chrY 15100000 19800000 q11.221 gpos50 chrY 19800000 22100000 q11.222 gneg chrY 22100000 26200000 q11.223 gpos50 chrY 26200000 28800000 q11.23 gneg chrY 28800000 59373566 q12 gvar circlize/inst/extdata/DMR.RData0000755000176200001440000015005614015721224016034 0ustar liggesusersexT[-Vw@A, !1[Uܫ@ {X۪uq{;{g}W1cmȜs)fV=+[UV(2-e c(d6aL稩PT'C.=J/_K/_=K/_K/^K/_ޥK/_K/_}K/_+_K߿K?K0.M&JDi4Q(M&JDigi4Q(M&JS^DiDDi4Q(M߉>Di4'ѷ4Q(M&JDDi4Q(M&JK314Q(M&JDi4Q(M&z&JDDDi4QOofU EՉ]|_a5yDS=#y=bC'5iJ泙h2hZ_ß`,7i_6?i+]y~t뿘ccz\?7cv2UԣU7טuH9t;4ׯlV۽գ{'뱿2x-(z.u^&H`8|{iW>zYO[lO׸՘t}f>s8|E^1_SV =מo$87c@!ł*=.нNψ :+IlgYPi[c]%H֧*;#zTi)C%ܥ܃/f`cc ߗTguchKh<:NФ?LC9>\zzӮ–RanO#l;-Z2 ex8#P3l6$rc!N5͊YNLG/Y16S CSR=Ɩ+`cw|ث7E?bkw¾ g2?K8K;|J8S0'KqNyUS+&4=JG.|ؔjT"k4Q]=UҬ>[ayi' ^rui/~1ݯ` '#w.*=fMK'c‰gkW>WE|"gKlx=wmΆllOw5m"*'Uc{".&܌&{󲉛Lks:ޜq^hO9"f(7T!9ks{ ZT*SyS^y(%fr|cK5u'?E'e}E.|U<'&:ͣ}լ]v̳&;ur]⌮2aF^?KS`3F[̿ѡ˙y% &iקlۨ,x"ݛ.!<=qa'hu,c\s󘼚iϮMݛ W}/-yEgeZ^62wd8ŠFčq,'DU ̧>RӎTyg}A76E Up;/ u%?Ay).{+GiϓcB_I./;u:n7L#ՁG?אߘJ9.9p'ss"W '~8'[E1m~E3d+1诳M 3ؿhm#@\lJi.Ohn2rI]a`Wg_'*1N}ƃNGҰAloĿ]a?ipsI{Mد%wLy'-))_1jzSWtbL-N2e#.Ri]͈C *G]+Y~T&fJIgGѾ232gȇֲNk#]:z9>3>i5r]ɗOP@k?tG3N&7aYW2>f:HܛCyd?1S9"Z5-+8)XnN\ģ{og\͵ފzY%zϸޓɍH;͸qCnfm A5Km!wp\@Vpb@y *a^V݂۫ erŗx{eپhk6@?.X0`ˏ12)ߵu~%;/1FFkAovv(MAc~>cН v x`BW5{I4YPSjqMA[2p[+N!.v^B59ꩨ-{~-<&f&dE:#:"ǴϔKQ hv /xqN=丷kޒ~=/C,znE hl)'lύaz^@]FGx~~ LܼGǜ9̿hDӋdy^ѩMz\1^^9>Í]/[}w"V+&vPzb=Ոf; ^OHoXN4C(m{YoȮݴÐjK`GӱCYOh?~VZY^ؤDasПfRNgOWQ{?M_<5l ;jOzjMSg:^3ζ>=B}'}lپlGћ)([)ٟg6x99@dmL/S-%|/3&x1ە#*H9cG$k拿r׎KWVqμ.$R32+pr t6"+Mp{p/{]ysP%Gпs ?};I?\t޼swZg+C_>1[˯zzfԟ|ż.F:|#W?w1:%kiiZ:ۿwẁzqsv&  [.XaH7YoP"댽nlmLo!L\ 9Ia4}%qxq.g#~L]. N^MQ SPSTL[{Ŵ柹Pցg.6QS8[m (7IwiKJQމ5s# '\%M+[gDR~6wCsvwq]3naMCxfFZvyEW;F=YJ;/vk_x쒎o.@c#o_b7V`<ݔ\e>n-&"~fq~<!EY5mrO[h*0AMgW,T/fo089R|kR 2 |g?:ˋm~IWi n@bH/&]d}m]XcJsou ץN+~u <"xtw)w{ZUS\_(\иcԷ5)ggޝ9뼺_im >t,Lk*x-Z@0ڷp祂.;%<|v;qҎüg W ߑOTVӤ'Z nM{ҝ4"NЫ`ޟ'8֝D[Y`tg*q^(]xFЕ\>/Ud<] ۀrͲM;Yǃ)׬K9>Ξ{2)엣i9IKn%\2By.X qǃmo |Cr/<Wl_0"9k6<(a^yU۽%֝F> 8kw|7g22NY4oa$ؐr[6[>zlh q>3Tu~[}O#\'V-md=<7OŴt;)=N]؍W%8g=g79.xN.޼Iߢݵo{U&,i⤁jv:ڠG۲r?ߣ<.b9P˴g,׳Yڍ縺)Uy4 ¯^ND1r^Xw{gd|Va>6'z[b-*C}8W9rVu#j/_;eT2z~I%O=H(㹀1lW(c7AeIk<")⯼N9PnC?U:)xQx'g'Hrr'Nb5vѲ#b.o#ƛ$^$@ qvwtDJUN:^s=6d>S,[Po<||xi)߆߭f9_R ڋԃORس<2yޫ\EU~//w3#:r}me}<9 MSyt`f1NՒAm7ςV:?_0&YO>=CоOԏ\c0Ŭl$~Hm֟G~b<2tL7bgf7ˍҙPx뿉kJΤ؞+(khI/gR^II|ޗH]G7I+ue*祐SJBK'5V-N?hvd̽&moe3>dz]`\\ݏAg*=Y} Zfunwjۣ~5WZV.RUz[y{_q*ڝq}|L%>ɺiL˛l3|S'_FϬ)X?oO↌dq#ПܖL}َ|SX_OVPI$>hzַ8mJҕvIWs&igɃay[h6ٮdy,7NĵUXnJ'oJa!CGz y^ o!#UE+2ϙ6Aɟ#ulcmW EZsSY=2.e.kpsf$x5-kbM̟|,kƉe),k y4˦GO7_s}$˶scY z6-5^]/˸hkęKyeH?QXV=zq[ԟt{K𫛜G{\#TGKԏH"l6` > .v'֩r 6{G͔͢7ZA\K?>.Mٖ3'G0xmk גJ0Qg?f4i85i=47Xލ䴑$+7QlGRlZK{M:-+|7I9*8~O^:Vj29ASҊX^'[1/ὐeϤel8J3ζ`|ˬ~9`c qx'\X7!Lfʼ|g^]Lyz6#~l*A![hgځK$u i{-y睂4{ r?W3]ufc.2ox6^yB@\rxw ztvmO]]h7!2>N\N>e}gZGMI[3Ci8X52.]ЩXPb<;m7tC<Ra, en5jK>`! W/q"3͜|$ĠFĴYy<+wI2OH΢ӔMZq#ScbJV%=2ۙb]ӱ}Os^ފq7mssv͸>j2nrӝw 7|/r(ϤPJ\63B3d\Iw: k>bs֓ݎ,_,踤Ub"}M$*{u<]C]cGĥ 侁-Uud>ad-qn~Op7o?6,رQA[!7Ua&m# 0=rs> %XOm7jgt^';ۙg56͘]d=vK=F\o9t{K|&r\\ ^|3L:ZzߙމAGc|:_ЌEGA񴗠iwF,/80v܍oyVS#_#`\}E~r([G-S}c#?j_8:E=yG=&ˉv4+]ёEOs|DzR扬'zk}g;B94Mdy1}1m< =$yGy/fČϥ~\'7[ FlGs,7v| ;e5ˏuxIcC}wl\-b'/}kd0rOS8-bܧ֨X^OiG9LdI_,~t̃K|0veZ-~GƂel{DydlA)q0/&iQߙ[N?Vs a;gq\ݼ>+{ώuבǿ:[v3[ڷ!{]LPAI*iC.!#3RhNMV"Nl.mLJp[/v;ǩk.KN3muqf瓎eY:c0˱>!ٖuL/sʈjQnW+ӾVox1l"P!QMo$Y!?d{ 0QD+ 5*1z}+55Wo?=з3i?A]kXѬ?6R津}9,f}a (Y S{r_'t{Orݿ')װ~u-w#]g" t테1SؿͨeD[f喔B+Y\[z2y{=x]JyYj);շj.!iˋJOлXpMA}ݿcFs6v]2ndherY%؞ e=qI/WY'R4 {Nl$~urfo&ڢWaCVyFrXڃO{*{5^ugw=-7\ESne(7IMy3@YHsWC={:螬^]u+{W|míL:7-ܲȧYyտ3U3eۣ\*{ZA=QATo<K'ܫC ږ兪y>l厧}vvލ<ޢWi 5z2_O;^:G@wPfB^H|?X3^"&ud0`* E~A9DՑD6qbk'V׋rYΨ UDxPЋQ$go`IM\eO5e]vy2X#ņ1~ni8LlD޷nG0x<ף\9/)C?:M}=}%*xYjG6<2~(L 7'L:.}Xh{CjrҲv/i<_옲zYR'[z.C%V=(؜zqRG%ĥ͓q!eC2ٞ# X_'G]6 xP~Y]!ZBG',_]oԭ?P^q")eZ鷋~y^3',sqMH3Cs`5X.>"KoM밞<]zFބ^aBlGB[o}cYL[°$Xof 6VoBf.uUsOlL@=Fx&mLWt8xywȣ&DFDʲ~9cǿ&\HxӇ5+S&oTnmy9l!M&eYKY^<>ЅMuaL[ߑlv敗-ﳢ-ʱ\ϏqgYҗ^|ZnWGG@_伪cPqΜ\,/~Xql|-([.8Misd}jkJO8)1N(=P~Jr}#眢"6||y?7r(_TEsaBZ9z}竌 Z@wx$5s\Tz HyjI].$G-5K 5!3%a,3d?M_sws}.޲OD`b,YlzYoD@>N>wl)C?~%qO>;R/T ԫBsWKf~[Ehr)wX8}-brywL<uy|qg̿>Y'㾥ir9rq}V޾Lt7]`{|E0cCڃzK?s-Lڏ%>v˟flyN?# uO}5O ̂h/xևGd:}c5r\96JZ b yd_%־b7 KzQ%Cg{cWzJnEAbʲN_lBCb#}{sU(}&H|ۨr?ssg^>ʾzBȧyv'!}xaD',/1cqcV0mЖzPE_9_4}!h&#Ax|n5o:7JZփ/!O.[=|׾FkS_7)C~;ʾ f/ua~Ge*+9fy[nEE.^ߢ7$ŠwnP3zߕ2,I+ρ,)Qb9+f2SnuʊI<}KXe1r6g獣-=t2\ϥQ2LKg}.MN| ﲣo1q}~_oɗkFֳj7;>%[^=v&k]rre~Eٿʿ ?ӈB5Ynhy&`% 8֊q(Sr\5pR){FGS<_Sߚ˸v W։Kγ^6ٗ@/姌i/2U,4џrnv_#ɿj` fF_e-SՒO{Ԭ2 J\oXٟ,X;# z(~, V$7uZ;9 ߈|{r;yO[ۃ&Pޗ㌷kڰon<$MCFd12O|LNBfH?2{)9 ~sdž,+򼫳!{Rna ?d}Y#dk4FƇXNhWY5ɖce]&z~v:d;BBٱG{y]OXy>,P a ܖ .a?f1||>1zv1\W-~&ud\Y"ˋl+]5;NZ$η%v-9 Y$B_ #eQce#rI]NW+l7{W:xE4~OeZ}v migvM=NN;y&s](nQnv'^a,.w+nLtI?yߘ'yoV3{^7]&;S/~?32:&tT 侾jtS学]rU9buy>IuQs?8G^)qBu b_K~ANlOP8ƅtCC+Gç$:ou=EfPOOk=KyD|}';etWfzEf>>6~QQ;y}>w,j_(u9:D?e sc]ގ]] Doڛߡ_xq߹+1{pCCۉ]vȡQc3_ITTFwD~x* DAJv|4HՊ\UuZQOm{5w(#YMkC`"tg-p&]Ldbz\&z3ɧYcrUp ^z\ܪ5ݸM.|_fWVgWlϪX{e<^&ws|#4Oc3}_y~з<[IK,ϵVi#\W7H 2>ZӢvlO$^;_ɏm]ٸ QTF?SU'.duC xѳ؝z(q'zL1i0 nم n/Cf-yx]'y0jx~Z-q^kc7*:FS76t]5=^3nک.叉˫u\{Uw+ 4}o<((ϥߖ櫓we[|]@V1:웩44G,ӐTV9J=(2:S_e]YW֯v(7mpӟ 8r|Kݒ"o;lZE}"W['kxLLzpE}S>uI_e<1ɓe2BS)A\OxD7ERq~nbVMь_FR% Wsyv/isڻnS)ءO.:V`{v${SFq|/* (k:X%?{D>wB5Q/XDYUCZ[R $PY0(L%G;1mȌ{;g:nLn#!y wMOee3eܧxNfUY%X{ q0ev/Zs6qx.Ej#qax#owXaK٫MiGJn$hV_VnR !E>짳/|E,{S~ɿwR׋sz-u9C^sP 5P!g2ε4Y*IzO8ϼ:[8I7o=SR75O[^%o{w~&̻A&~Úp|dϣ|smmӵ8XkZ宵䆌kZ ,]u_O $8S q%ZWG_mki|`;{l. >8[^;|nݤV9^+4J> 'is[T|K=n ̗}8_+[bU\_E'g;-l"u3y]e,iǶו,gTW5K7wu7^й?qEt :|mM3Dקn;P=U'~,,G1%~UM͉8yvM><-W^-?ne^v1.v#H`}޷dq+$?v|*kUʓDlkg_?o!;w"N2nG:{x :*)Qf=]?~^DyT2a1:1ǜA)sSQ՟L AFc{5>AfS7͙[s->9y@>o<͍ގ%W쏞Wypp=wKG]w괐;ųNf&'g\F?ipޱH?y/yRiSEJۮ HD9ZSΩ+zQE^W GSi}ؾ!ǥUsnK<-]UX>哞TGҏ鯊)זOfG/hO}eKkٖTqAV3rԦޠ\ȅM$OMtC"\?S57gCAwͤZ&|$'=לƲc_oruNr4*x/if77A/mw%႟?A ˽԰kT`_7ÔO^'#|HSAA^ oq~y>=By ai?y|-s~nMVksy]QG{A+_нe*^PK9K,qECWG5J  ̓x s 1hUw{(]yGd=Wnp|Tx{;ϢfhWEop u"w[S4wu~0EQg>TEyvy%O>5E|v^tͯLM=J=LyFE*zKSos6/`NvVoGͯvc.K>m/G}-Z,]ZR#F5WesfEj=zy}}/o&r)Z l^,a #ۯ՛l]v[e\ҿ 5dⵘ Q>l{A*d3+--Z^Zq7 =-9?VC&aas+9 ncv~77ӂǣOD)jV翚k?Sod9Xol-7SubOj"o'i.?h~>N|!bƋ#so_5,?x9Vfbޚfzb=͌7 èr2WJ-ُfcSUI拏DԎbڏ򾶮̯:]FOt)7d_̚OwG `7+|ߚu>u9/>0H]% ݉?wssk޹+}>'jrmG_:~O!vunN{ݏy_*L̖*Y!ߧS_7Tkwj qjā:y>L#dkȾMdQ4<>I?,'>)!V<>%i佽hiQ~i :)Xegvi.>mP9xi/ѮueeOIUru5:ɏn?~Adt녺ޑ.l|!~#-'\t]\ou79omKֶݔ۫\'|lO!?1ZޱB3}v+4vZȾq;;)+hUoP?!;^b;/Yq7o莌v\qC0UG!$ Sw_g92o"Y+(\3۹s,lWnB{cXU8}+ߡxz}*.G4~y<Ŵ?ߝ}^ݹ27*v絻q\^I]=vu%mX},X]'5"yλ"ow󼜞/-14r?Ÿz^`yq,g;D˾>f:b?E?|0̟s^o@xЗL>]rICHrM-Ssv3 W9:U̯jXBW͖TsrU.rgaUr}|wWu敔Ej|Ud9!]~kG#tq=bbM3"`fe?|;zƣu/k1'| {IEq\M.H|'_Up1۟b~J޼>37{O1MP˸rNEU/o||[!uC3W>83>)+dx*= XW97w#}#B~8,qY?hn284yjKLb.?{^Ƨy^c>{8E"ĄYn՜-7X}@gn[{eߗeYejq쳽'OjI=ϗch8=|=_|WV#|[z=?_\ϯ*]SԟWY>W9OU^|^{k y~g7 ;|_w/ c_ޠQ>%U=zj=祂V>Le]ܗ sB汞?:Tݎתy^G폭.t2nJyN:^#1җ˄gCw't;pחMZL?Mz0$㧤S8nJݜKz(wMdqr%gƥ*Me]M$~) f("Ư:ue}11i΍BM3^Q~_3$g!{~8Tՠ]dfM`;3s3=$xh쯯-?qLPmHyeq8l]|aYI/KuElg[O3[1ezRnّjOsw*LWGOů9Ԟ2%G 9>v}E/P.sܟwc/~| "_|'C> 3:۩iivas!Z?{%]v嵥=I|&VL}\pTuW޾CV~ c]+ro,d=gr9/!:{(@NYmȯ<ǯ%+݇t;F.lY?(oQuϳ>1zcZ61!2Gҏ/e_90jq#Nbyp܈V佴Oh;ϴ$uQp㟴4:^Ԋ$L_&]$79u__ɶ%9=w6Ⱥfr';P;2D9oH3R?3Ndl} 3w2zvB1~te?2؄zjjRY*Hh9Uz<"w4f ]ya֘7c.I\?]'H&̪֕!e9>YY^ H$˱y(|6|1k^Y qWvHZLv2D{碖\ gWEK_n?~ު򞯿7E0Pv hp4e?T %/ay)/f(ƽ{7qi|Mž~sƼ.>k޴; eA'$UE;K!'Ր瓒wL&IS0'M$h?Qpy$9bs%߯ORdϤMWҡhQ9y'f !B,u+V)ԑ?c=;eԴL֟i:1vf2pe(e?́F 0dZ l\Ƈ\Jd^<2ޗuG>m%h;ymXvv 'q,WÙrӞ2g<^7~U}Aר5tFk׌z0d\_FsfGֹb*yM";u_w(s麵iR2ԄKnPІ~v5Y+qng;Yv;+(w SmRd]iԮz9N侂H! e+d^2N+юVn7ezU9jX ^fӴia,kG}k9Θ47`WWP+6u&EUg:U;OL=YP?gΖuI +췂:G/=}~c0?x!;m-(Љx}o?LOS}ĩrVԣtgW~Fڧ曬ŚnO &t,ľ7hV C(j=:/}C/ WKF9%zCۗԖq-1MGIM &]ܓPwqrzlr1_vE2.X0Vp@'yyĻ2NxT/]?tƂW幍ƏI28AZO(,VN)3NX7cL=V@>uaC[zʼ.}zsxlo:9,;<7!/6$3fs~?wc30nd f|`+iZSJhcW K+tUtkR$Nqqf$>h.o:e=% yu;ڽH0"6N.zwkHsMW,od)odyy/ӋGz~ANdt0sz, No≮C-l5xk|Wa4ywΊs"iA|oNƂ?f=Ay>I9\║l$q:8lN; ZA#;ȏ YTZQNtK}:I,zw(cfq9vMyE/}9Wd_#0EkdV[e5&=w"166#F ~7<^3\e{K+ߥ}s/i/M*޾*{>Y]+D K[EKGyݷ#6;6}OND#ӓk-Sۏ\7r MV;kkǰ^C.bϘw)sxiSiﲞ~KFIsFeKF:Kv0qz ˸ K3.\8&㉖eEfmisȿN Y#mI?,f12ٵrXIDj/5`tixٗuDuI}έ$v_"ݠ {E\hx=M~ rOՑކo9g=Lw@>$* Q?')ǠZcבK_U!d}5 U?-"yʾ.a2,vw;DZȽh 5dĽhlj0'O$(Q_&($[OQ~zP/I_dz':MMy{$}wa?K}+%Ok`v8=HޟIވI}\;y o>[E~cW͕V$m9ԓgi}OXHG_Cݛ޳&w/`Y l+ lןv|Ey:K>ǃr^XO{;^!-SQԞ#ɟZv^A\hdW˸*e2hpO/e,U+>e_@b_̧;VՍѷz(wD5\~26￧*`|,rE^,#ߣSZ3|z3;:|^t}n%)7Z^ԂTFS:'{^g=2ٔMwhO}M>LovED\zH;#GcyQ'19v㖘 XN̔l^G/-C9aPMm溁:KviF{p\%Ͳoftr<ߧy{Y;{7c~ؑi5\(1}z( kbyqYy]5gʺMr,?^Jq eNIC.w-$!qaN8"B˷zLF=$NyK%)~[X㒤CO ܶ?^#?%]::GGEy^_AO C{1údуhjMy&*X5 1& Z w5!5]M. ڗR zǔ%dxː4OҾVV>v}?{J9zOd3}J89ձ,wuFCc\}t_}b WVqO0RwR!'kCʸ(=Y2/:߇:ޒSy(''|,A3Q[ eXD9+# 2(_]_'銮3$DTvFLI>"\ΒψR1Ⱦ11_:u4Q]NcT/˾x DV%N\խ_Uaj7j:bT.s,?Ԅw5"9/5稷9ωoڒķhi1;uB2m#v֗K0_g 乏;ABy.2VϟLWRv9AHq1R'3VYCsR'FͪWezdEy?ik .jy^'?|S)*Kvyy~f9oPr~_ܔYuOY^!g+d_>o#sCe8a2<_.Ⱦ9+k 1d^Tc%]}@$*d_@_ƍJY^IxlYL);Mq͠?C.`>S9ڰ\0CYU'8N+Ө/Uՠ=Cհ,G5w%%wf{U;d?S!ۧ:_ɿ|31|m]Mb\޹v|W|{ސv)<6 [wޅ?I}QP;ElO]aa:=I%q 9u[|(r~v6<5RM+7YnZx*֫)qYXm/h4iy\7XF/mRp#Τ,/X$?9֜qbrA*2sR9Wˉ}.ؗa؏揫A6_D̻':gx&SV^oyNx,=+~QԷF9Sm; ȼQ/.7JMKeԛycm˕wla/?yw7y6*S|gpӪ}6ƴd3[ ]d|+"#e_pso>|d+DՍqx4Cǚk=5[8;K=Nq<@{*9GT3^Qybow(CC涓sH9UeWhJ9oxUGyӄC+8<&X^SIO(GZBm?3؟-dBW`a#nac(@?:,$J l#UO>Xtx|7:| '|ĝFT#j0_@?kb#k:'|7%|(_ㄚVez{XJU'z]\&I5Wд*hWA+(i̇1!ʛ)F}H7n&?."VݲA7_'T5PQښ,/j|w'j/[Qȼ|g" ]6s(v./o,Mk N#_/GYS Cܐu(7,]}1X_`f +~=Γ^T~l*VE!x>H%: 3OkI;}=&+kZAtJw缇1u)+TF06%M++|ʟ_]U\ xVyU3Y{c<^x}_z>Yz(3i ȟoyܷ0|V~>%_u-D%60@d]8C"gJ\$K=uOQ_h>4b_7,o⯪.k۩fGS4&*ԧ<M^v7 L[Z8}gaۥ)] 4 兖}֕G^'绖PgG=NZz~j3Jٵ\BusٿN-딎+Q˫s6/W+[V߭H~~3,~?Rn^xPa5,3QV卤qdrf_Un:vn&̱/_c+A=.DP}cgش<}'~+6qFm}K}c __s>||JKqUxT>YT0imeKYo QFs|G86?/Xn?\_e{(@}RB~B~ r0h? 0&e^N Ⱦ<h>mz_~m@r QtQ(?*.񮰓n]@л1lCƈO=z@_}Ahs/ȦWdҫuBݽ`gz>k E_Ƞ/Bѯ5r?B1'oAA |.iSb0ly0g0d?d???AC`C`C!Pb(P(0㊡g9 džAS`/IP \& 噀_I~j6e8hM!ᐥ;á İ 3 r1CftAWf=3 5_AfHĎd9tc>q s_ ;: 6=  [  [kG 7!cSPEcql,y,bXĒXĺqhxh/bnNO@02Itto"~gb> &)S3 L.^––өTěq1[B賬+VU@VVAdm5?ҀGXA/V xY!͜Bv̄τma= f, lk6le6ِlg6lllwρKk.=e?#c؂ diWl;[ؿ-`2mG[-ʶE}y1F]{b\;e~1a>t[[{v`O;h|~?qD;Q݈EcϪ.a" bԱmZbz1]2i)tc)¥e86~ǗC72 bb gW^'W' ΰ gΈΈmе3w].g\P sE,pMB+ωWu WW!C9;wG|uЭt^= 6'' Bý`^+ xcL17Q7bA0_yPxo5v5d1i5,o?dyU(П6f?7 /hOt[Ю9@؃1IDy#ŰbWr1Mh&&ĝMMM͐fe6 z ---lb b(k+tロw+׭oEL چ6oxڰ ǷڎzЩ~y;;dmmC17؁gvƃ;#v9 x}NNj'݉~vx]?Fȳs===齈soE?zًX>p/{!}샾A_}#P>̹ac>wÆcm;>=[]A!8~q`LJ`Ka.ye_Batvs:9 ;=xzAg##G'Al=L"QcA!Cێas}qAm ?}N`q*f'{ xByyNN!Ɲ͞//gϢ`p<<ʹۺ]J`.//F/A0Vۼ9]N.#e UU\s{r_ء& :n_oOM}3B nnA`oFn#mmmĬs;UWb.]́ ۿ ; ۾"CL`!h}9@C/GGǰ sקSO+Oӧ?<-?C > 2}[:uGF}ss~v_ K̭^^WO|lb++ |B`~@П~@;mk?b}GIJl O|~ |~>cs/_S_`3_/|A_1n1W__|o~~|;w~W@{~=?~a^;Qahz zz00 j00 A'eLwY9 ]A\N.n)P   )A(=}gA򠆠>}7 JuA@N3  *Uw՛Z\@(%A \W}d B/-- !HP( Z5::FƀV5!뚐WMԉA-[hykMQn jiAup5(\aP7׃L=V:0h0VaP R+ WAzưM$t6]4- j /M!CSȫ)ܬ =50Y47K W =TD- _Xa zlB=ˁ,@[auQ I vW@vc@hg8(:^;@gОўAs@cǫ N ȷtu`@_AP_ ǻ@]`W]a]A xWIAwȴ;d`?A/Va=vT\>z^ak~@/@(x4v].?@?A ho`d1@yq i0|abd=zN@C !An(1~6!v M`S&y #2A{L`/S؏)0LQwpp\?2 kÎ#n 1̠/3؍| φ}F<v4msss 9s ġ@\f ^[!k\o:m   bA_g ;`{2 <66g Ю[A_|u ;u,⚅~!lmu0XYرh_>h5yANj>) ŝA ,br1|nkxY^?X2֗-Kǖ -A%%\,5KKQR`t ce8[yVN3qF=Έθ w^ 9î\'ztAp\`.G .. 1:pрkk;tEpmAn97؜톼nW_V"έD߻ =yO\y{D /7l6] Z _ =FVM@h}(6 ] ]`*SpeA7[!cׂ a#M!/BGd1B!B0 mRP\x X60a 00Ī0 .Pp"jEd6D#ῑSQoB,B[Q(' W7Ѩ?c0>A\ @61vF=jALŸb[\mC?_ іxx;1'$@? rO+mO]$$Pn|4 :HBNF y%dC2ƹ)k HRЇISۃЖT IŘ3> % 9al9Î8HGߙLeoɀe]&/Y,}bC6d !"Al/A;T }>>}ڰٿj?tqbl|+`\vsY7ރhAęC È`nr#cc c8w uG{C8.'x>89'`'08?_;8wcǓN-'a'a'ߞoBl:ٞonN#f~@ggg`'g`g@7g0;x,l>8pya|p8ݟΡs95!ݜGWGaq >c\c3as`!}nY A?'??PO'/?a?w~B?QOe|b//o=ѧw~#^~?h( j04: :04,-9( ˼RuR :0,YaX°@)h  Ł@A(lP*h 8°( UaX.°ZEPG`P0pPaʠN RV0Q\ST)8^T*s=Ȣx?4d Z Z0lP6Bn {Ak °QPUP5j &hCkCayAMʹ Ȭٿ -@@sAOsgd|#h'°xkZW#7r]Su-!ߖcAKAP,!°°ZZ}Tۜ Bymn+ X[-v9hmk]C[ۡv Ȼ*xm=+Wڷ!Od&aet@A !]u80k;|Ta tB: qgZڠ \rtƺ]]`]@S׺I gLv0_:BA@7A{%B6}~ AVH=}l@|z`=a[=ڃƀ`=q}/ zfz^E/k=:Po SoUa/ yMWN+ A/?@z ہ灰AAAo|`>An`AA`Ć `ĝ㡰a1 CF kbr/Sm2ELS\;]]~Gʈ/ Α=@I#q~$|>m^;7ўQ({b(ďQhd?1`4lxH?]a8 =cޱ9 qh8bla\3x7^x8~eGǃg㡟 @3A{<?1p"?<2MDxL|B|]NOLµ II3X@Sz74?휊2BS* AvPtw:|fbی d}c%~ml 9KeXB3q|& ۚi B Ra81i|`2 v? ΂0 ͆g'gٸn6x {8`6ꟃ~l6mbxb FFAv֐55|d {FkaA_mXajj[Efc-b` ygl@ m;!N.* Ϟxe{  إl6rl5mr@o!\Y-D\^.DlYx|1cybl?m^7y{.h6a L9_vKK]?>[[?~K/_Ko0.M&J҉Di4QOD>Di4Q_J+M&JDDOΉU=N [/_?:?P8G4đ-L=-#orA<>>'iH0'iOȷ'I۶$Nsk9wHooY\[X2=4MvYdZłWܘoʹw,wjRyݜBvsw̕o=:wo2KGwmNz >#/+cpW,7Ա֝z{$oem#oeO{D<9t6oe6Kop9ʷs%uUA\l=y<ǵ?kZ`WpW4l*rq^yߊ[[ޛ*1iOL֧tFp¿ٻs:󆰾)_F?I6^rU` K&n%.=rM>jQ w >?J̜Se>tvdS`~O[xb>zԭ,"vM?;f8q2em9mץSwN窺?vlڽ7YOŽcr(oC<)N/iǡ'i77i'Ꮖg؞ei/ ,3LG(Ԕ_|37+Q+]V3>E#/:hi&嶽-;`{#z$}j#a;"-4"'% %ʷ#"L #KcLiO GKIhSӾ"H>fSo#biI;Kއ(?Xʏ[)ĥ|J=)1 qzZf,rlDE|77űxr|eg!Ld\NKjS0g3' d{t/r<ߘ-R2[!68 AO̵!w KzEgJy|DO[IU̗F$<}D47k&f{WHyhĩS6 ,cB.%D۶b_': \oI^⩚ޘؼݢ~1ZO}z[A N{ +b=xo %.p$n?x償ZB>/|g#*>"qYLG:8Ro$zs)-x^ޏDN<8"кQ~3&sgue;h&9EO96繵gn>7Z5/o/' yBY?;g@W_r7(&vyz'Rse5[/%§c4@YfKW|+"eIPC9 \ H~_WFѮWrH=5/H)ǫ7z?౴CӎvUK$qjV#plx0|M`}CL)ݍsc Mf3ƛ#i);8LqQrKƑ4s#,)K,7E .3|ꇔCfN{ƙ̂7yݙ=ϫs=,u ?2ߙR&sE̯'̟ٞMZE]?e:mi+|m0YR_ g ]]m+8mFm%vHPn+2N֛V/S=`W޼zV^{ϥewQa d|='`9(Vlgʤ >Ų 2 ͵Q:6uu)]U+xkHVWmz+Vg;;|ygeS %+;K= xgs1!} ˸9A=% =$.|3i3SbcϾv^oY'h:ΞӤs#Edpѐthq=}QN9:ϵTP1P1 \$D1;V5VVvmԵum\[W}9<3gN<3OE1 >?nmyD3|. xv.Xa6*5ܾ7nAh 9.O o>#HG'zG<ž9cļxz "VIEdk&R>^i_QY#Q]P7hrW#ȡmO `}Gwy>_c' GzZa}1.ƾЦ{1tK\;˰^M uiѫOKK~i) oZ#9>msgi3:aۮ?&8+h{PymQvi6p>C@nw[{w;7tQw>5'Ю= {Vx=x"瘃hxR=3@=矕rC)rNb%iy5x52^^Ky`y8-G@{=? A~k~}C{7f*ʺ{y| ܯW+s= tv!m+eCdr~_RS(;|p/޳X~}En/9o/TpЫ#vBjsce}HrNG,CD8:@)v2/I)/cg 1`_a k#`}3.yWK=9<g}eSٟ|X KZGmmg];[^9'~U'~S)ŷ1~o o ;r݃K~Cט9íApypo;UhsL㺡?hi ~~4v0w8e19;.@~,~o9uW췴eyčᯮp 7<~D3<v:#<Uh`Pvb@m~GuUԷ7> }]_@_b%=$zXb>bPoAn^惫)Wƽ%+q0%l(= g(ႜ.|ք&ʽn|Ok?$৤'Y9KS&?j$)_YH٩5H? 4<_> >y|)o{h /FO=N=X,|M_{Wop.J%~þ{+*6ynErE:B_]u'_Ĭ^d7S97y\ m~r/]9ϵ(c[~>ϓjX;;q0T-m5Ӷ/;ڍHΈveoo W^_NK.4lC?O"mEϦ86|Gi q樇C91%ͩ}itAQ ZUZuwA=ڿ>Cuo-k;jG6ߩű*3~<qZ4((ۋR0uƾ(w Õղ(t7h6sr O {'yjRq];`~eg]\l _>{y;!nț- Wrϟc8¿p ʎB[^&!gUmQ2v͟!ft㪕@J۵CN(Q..GOR h|!쟒Lّ?[ƈ7fq,C8aq1÷KN+a~'_yyc-v3h|(~3O"e}~SɋJ*y*_m?C?TО{ }Ԣ|i(4ghAϤC[*_!>_ .C"'6^w>uΆ?c59wޓ&+៸ⅈ%NyZ3E[ ߐYkUKuO!'0\}b#cwQs5!WaWQȳ8O;=)҈~Iˌh8H9'f35Xy>6;pq昌ZڥsOڕc8> E{?CN_@'O \{ -V>|˵U!n[9oT=!&VvPߪP6t' ɟ0ގRLIMeE'W:JFfPxm,^P_8Mh&4%lS&Th·ܧ%l8L& {}}? ~Ү_}igl`%߳F}W ?s7^#|ܔ i2b"g &(G¼ w0yEƍ |VHQŠbJ"_8'6JbCR+pgi lx !Obī&^u!i#%%UuR5/ȗT%\)YR͓oR/oUڵ~/6rO6T=Vރe ~1u!*F]M}>=f(y!:;0޳&`oTK7:i(Yio ӌĵi86ޞdUQ'ޕ%&_W4͕|fSHMɣ:n?Nt{V3hK9M~t7t]n,Krą馟-HӽgzQ2"/B_~oƈo)M(-|?7(})C(q~M$̏ZI~R3։j*̃z%N+'ij5%M_j0qd3,z w8>3CF -.z q ?{~t߯9Nw[zvv^ȼ(xe [&E>kjY7W? ΂oܺ[Nyd#oi+v% ӯ! >0 q~oX~ `ydؤ@oؕ಍"߲woٹe/8~gj_g:_, 9uMoGkz։52?Ys\Z .x c:c'kSܥ<剴sE#NMP2m O3$op#~L-؊\v:A'm|Px?mBS撏q\{A42_GLǪ?02;#nKFN/k3wh̟|W绵[r#/򝮿[Z&;#A:j]#ƺ[<V#m9_cMVÛ~Q9v6}@L[O!%fÞÂ[1΂Q6/l ym~Kn!U.:j:ZFDG'm 9c~E/oq3!Iz޸qw0L'a.L9*'S, Nu*g-~YBW2ݕAI7> 7!t|4:` Av-?#< rc9!wB}rhvM80{RvѮVh}4Ѱ_\ɯNN :e2쟒y nlkDEסjgW<_z vȹqv]6\)$'ws4wܻ;܇`g¥3ɇz }s*3}֍܏/~z"VbSuGCE>yJ^gxy^:UՕ<׼vB=|ý{^Dm^?hR& Qp|/B</;y@?S"+z@v#lU}K`~h1=q~+|:nre_?$~[/ݺXÿ鎕d3B a̯K׶tb(;'}sgf~j:o&䟵RZ'u*M-7v;wЇq_{e 1 XzΙz|Wew'9?x[-G{o}Zyo| *Χc;G;EP,yaG 8Xj~R5 pR.,?L)/.߄\O/W -ba}#Hl{E!t+ƍWyzDdE`܈|= y#xȯ?jzEs0~T`.BYn+dV b<}x)w;{Y? Տ{.e{;{kk q wrgh#|vr2$^eӝTдfB]qnM.8pZGɣJ.98ϥmi7*v AO-=6䇆PT~|Gh;KM#!oBwWC:=_cnZ0wb~Fِh#0@?Fsns9τ@SB/ah >! 1#`! k`㽅X8fH{Kk#k/r]Cw&'~_Li1Nov؏şȀgIaWyyI !1ޭb9ˇ@9>ƽM> HqB =ȺG b?e+3m9掗yh|,-4 ^+ry,gy kBUh~)W]pKPHMyj)Vhk[6mvud:r'gf>Y-/V&؂11((mc8ffx2$J- (g*c>(=Ѯ,l=~|nW±D}lۈ.M&;\^ʸn hTI:TmvDLF c ڵaDTz3ccc(Ù1"UY$U}H*뷤]LѓH5fc.#TcS\?TIeߕTI5RyZj~3RE262&U-3;*1qTK8<ۓ*ÅTj{R2mc="~[ώ0#h5RGHuZKKIuيT%=;r8RiDIy/n߼wc֌%d0ސZۆtnTͶXRwJ c-cc;4;2BbJ*F&`ek c>#θLn=I mc3W~^рѐљm3Xe40c0){3oYQQd,EXKzR[r[ˇG7],\a\e\c\gY=0w4162V0:Eala} ~Tw1R0g$3X4\jòDږDImgXc9X_e .cؿcط"e|;R󲦞b 'm$0خ3Z0דlIlII`;:9k20ޒډ1r;NO}k3`|Q(=LϱEx FRX^}6fI';X]<vwvqb]w=I}c0qXwRg6Ѓ H2xim+38_e#uPsuyx<4%iH!MŪBxTEi42Nin'Lf`<'Mʌ ZmX(b&e/fpH3 XŸ4'fP4Cʏ4 %  ͨILG{[Ҹp{8x.bI_4s?f-҄6!- ;F4`i3/}#,ad c0% Gi= m ~:&Mڕ14kW3ئ6fd`Fl8ElHi0 Y42R;gH4;y Ge(a!n i6+e6|c>?BHS˘R|GH,i>ma(iU;I< mW5{L:LI0mD)r9iۦK{FFF:imd<'m sҚ'3H?Zp}/1_XF>c q*[KcTeTcTg`d1j1j3021X~ތ ohhØCځcIkՎ&is{u u'o iiv ֲ\n6h#,Gh҆Mbp ?Laq 5.36v!?_-b ʌy edE͢ `/0ސvIE%;ic58g e<_6+6=mIMڼ[-`k10X޵ulu,C!۪ZȲoחvi7Lƛ-٤2v)qvc\}K/4#G=~M3H{viϱJV:]fy.s2;^㸺ƱwioX㩔mSzg.CϾcg¸D cqi`>M"3O?c-_{0ڷlw2Ƒ#BϬY c2ĘLo[IQ2CRԁR4fh216ȘLJ5#THcRWc"F[Rjbe80K1k]a| V3RjWe4g`db𸵃H SIiqqKIi:f Hi5&EORZl-sHi]JJ-"C&)Cq U#e5qWv +ޕu=n,Sw֏|=)=^̳ZRefp\oy~l2`3)BmRθ2xc;c e`\``|"Ū2)_sXoF )ٶَcb϶pfb8LxRf"ť)H$ŗEJ@_RXHǾ^E,106<(%eR9^ƒBm7XxBJ$o?[ցaK@J2RV a3ttL_GJ^R1X,K`=ÍZ`efϲپk#%$) E`ybC: ,Ư`?8Cof{~Iʑj sRrLH)#^g3ϙ ;)9n?)%wI22\a}q\_Xl,u ֽ}S:18Vn87OrM 롑V'E\oJƗ$;R O*P"HEX(I< G,I2PKQ ĝB KHQT*Jb.G"q%\XK?h(+ BV"Y=%r|> B_&䋴TKTKTKTKTK?He|>$b?.O(/Z~< 'JN%ER"._&;+y$ 9T s'|-R-R-R-R-R-"'I'i-Q:'Ih!%2~Q_K<@):C 1'!%:'5~xt.8E, $ER)#;$bry@,gbA_IbpB.]T

Ol7!o#oH[Nwffw1.c9ڨ+z 6aΰ4aݶa3(fæ4޼x ɘ_NzGzgw!KH~w}2ќ!}z%>1DŽ }pIy)Ɓ '";i8I }F6Ť*wҷćcqH?tϋG4~ۀ{{*$o~oH=H o)%g,"=H2? ǮIgI6ҿfd!NEZ2, #&d2 `!Kl~H C](aD-#ͮVd 2e <4 <7 B>|B^ M , p %$dsCyO"V &3Ƞ42HcJUA?b >稨ש(*"*u0J5LRMTT*u@*uJ*uofoGMҗRvl la/[t-֙lst6[r[˖eK?eKeٲ(/vpvpvFnee˞$g ˌ 2* 2) %HdA aԨuebOPev^%4b|Wx,||q܍7w<Mnɳp(j)P38a)U|&*.S2 UrU͆0OUSԫflV&6+:غcl))lݹٺKulٺֲu㎰uuOa^uO:nӃ'scͽsbJR&R2Rm`=?J]QJYJ}tJUkȳ:\F^;76򖉑,MsgbvaC813ؒ{1}1WKbKZu0O^ 9y"u臙ퟍYvbV'1'0>Fza2fw>ub/0+K10ۜ/_v` DOAoP:Z.<%Ib$jZOG6;(~%~ E?SX؉ՙ(nrCI( G1]ϢQc(G1_Q(&E1t1}s 9{\b[A(&䶠W^(S=6PlH;o(@{sQ|(߇ J`G "P%D ?)(iJ} %x`,%lC QtpzNy,Ny\<R[ٔǞ}9DžpRrAl&Nyc(-Gz1QEyPR+샩vԝ )eR!tPATh=Th_ B[yT~Th/ZO6TQaT>f҃ ϥǶNh RTl=}RqQq7*ِ78GŏMQTO5م_B(k~P'*JpS ʩB*g"n." Ө DǭۯSxo/]w0>sx?fwv;N;`9Q>x w|C`=g؈Q61Iu"Im沖l[I`G؅_`5&ھG> pM ܶϝDCox))'~b !JV b*AN\Et~XAl:E{āx8?j>jM55HTs?<>jj5TʄjnL5}ćjZZVZQ-Uo"+ժj9jJEP6٨m7o-"nfujd~n07_7߼7g_J \|| 0[[B$?P!yin#ECH1)H1? ,v eP%g;" [/ߎ\5~Fwkm+񏮳ZRG"aF0[ y =ЪhU]:ZrzoV|"@ ({)"{PĦ(b3؛"CQģ%(1'@(BEQDxW"ϣQd(ErQsӂ"=HO |"PFy"ȦR~$3e)2,Snc9i0iJ&M`O1Le ̴3mM̦ |V`f+1YZ7K͖avX6:5V][~yP@K8Js%v`XY(:?h<ꋅnBwbOag`gccwaa /, c vXo fcazaacaX , X ,n7 GѺøAw('ntunt7zb6Fp#ܨÍއ&n7 7>7݋O^~ƫF26ƉQ  n7~71 Jcc M&&p!n"ݏXM&&&S&>&!wėJM6M6NMvÛ-ck[ZG G @ +-⪱-(j~"UByMyl<(=UByOEy'oSP2B5SrRx^3"iaD>̞H_*b֡cQi6zՃ@VUF%M?UfEUzP^ U{.AUU N iU$tyj ys,f-f{yy+$y+iyyG^Aez0 k]$9a<e ư9ɰy=aK$zT܍>(#3BH1wi_һ΅n4%?~ JH>]IH%LlT>V>iO:'n@]HߡB׶G+&}O'Ay~ ߮jZw>gIH~𥤿XI&-o3KtHCL7 ҿٌ!FŐo2\ 5"&S֑dd־dKd@>NTn&1O292|h#$gVsCs'{_GGCd`iAAd4 AKvA~Ƞ5wȠGd  *.%*ɠ6jCCE uQ}QCc 1TJ\F:xQ4TV*}q 1J|e #آl1X-vɖ\:̖dK MҐll]͖mηgHf/d^v I=A#H^~-Ank$(t  ^T':"C j|3ƙAo"(LES jG@Pw7uAEPF"Fc:ڝ` &1MC0N%M`ܞH0'GF=(m~?C0YR?`%cɍ&=O0+o$4[`nI0weo&/W̜R#4 _ 7 l+'X:{ @` V,k5j2G8} 'rL-!X ki(N_k`mk'X{+˜` %XM tLf:f7㷅 G9I=9U|A[ Dd0fd!2p#yԡ);siU䒅0>G2e&Ӽj5uӼv$߈///1D_p7 w[ӄJݎn7 pUk)z yJQөs TrLPTQU|<6k#Y"fVٛuԯlݹulݥvlXOl}l}'l#l]غql'lr[o@l=7>D[V4+en+%ۉsgT<ɝJ}JJ-G+g,5^^B‘e=}&cCG 8zÖ\–>ֵb]!`-B{&bfG11+"S#Zy6XY¬|0#0A0Y0۠R6"{{|.?އ4LhuYGW$jΐDԽ-aue꙰z ^Q/f1QʑEs٥4O2b;bo/cjQAx`Zmu E۾CQ.(w^vE슢7(zC}(E7Gѧ4(}GDOۢ(:?Es(,E|7NI(8Ō{b/QLX8b6gQLms=9b D1WQ̝'(&gQ4 |?b(~;b.(VEp;2AK(G'⬌Pj8-ڏ<(.yDqEq{P+}*wQ|??, (~wq/~ P|n6/@Mm(c8JO0 JG 6Q(a5Ԏ\m(!%,(aSJ8%ΰQBb%J<%m?د_nNa bW܂[ܱCp#W .R0#ŀH1/R̐bz2v9|2vy/vN82W[ R oueoGOߚ ow3v_?D" â+N0 A`VAЪ,"B%(!M(b@U"y=PDvqE$堈}E3PDa E]"ﻡȧ/PdkeD(Q&()TL4= s·wGG#Б[Б+hT;:}F+f3JT4զFlgT+?j Qfj[nOQQlT1 PeTm*멃TQݸ'ՉPY~)s:mnkT=|fJT [[P9STws{@ueP^?Տ>-Q+NBE05̷B 7}a5.=Pj<sp j|5N@5Pc!j| &f jbnI7TFֹ=fp#h!nj$nnt&7t7J^r6Fr 7F wܨc;nrƍ{rp]qc+%nl7q-7p=t#p㓗qķq0InMIܸ 7Q؊MM6c[c? ?c 7p6&/nb378 &i{$&nv%n4nn o oq{Bp30fZX0(⛩נu~*c_e(=P.z JdKGI(~ y}(fU$Z#0eO =e7pۻ@zcg?AAX٬xC(92꼃T>DP-+2MqW@8=(aeWCqѷz@]$\] ٗ(k\?}\Ų smPTex-d:v݀YAqvIUjcXc>lɗ:edUdelO4a<{ΰ,IcWnB}5t*lx WY% ۻB^gWW~ ^ Jc&mY U2_Po{ ԽU6TZi5(:8eE.O_;Oϫ;DB zNjݝE@qNj̼1-n>CS뢜Am)Sܬ9 ʡ׵>%Rj(q&(ؾT̵M[kl (<}}g\Hă?A r_9%J< |Fyw;}(d'Ɯq}&6%,݁P&_~?^@aй+$j9Q 1AZ/,KH"Ӷd}"X[2-_R`QRAAyha;YpwSāt!k۠?xʆs 2VW*.!Y߼$UI APR`Y%]AIeW-}J c͞|Kw˂DcAi}x0aߧK!u-8mp|(j.áT=k5,{;{ JWgP`2boȸ?,_'yrPSE/'[%>. )#HͭnY~'-dzo* b?( m0rEAqcK&%] !rjej~aƌP9qԣ9W8󨉕2Sn|5l⾵!q3(<^gfTκGoakSEA+Cbʌ4J>i*doo(A~uȲ3 _,!# vI^;>l|)zr&#  T0M΁p n2ƀys@? UF@qݾݿ8PB]]u= @eX:{(Iniz?&`0r.-CygAΠ,8JClŃzCކU<>$hNq,< g88;ȷU[ 97<3| >{>YEAUcխ.Zq?"9-}0d޷nEW3譝clLġS܆R-#/듫 gu @LKc:(5T}u.p4;w:=>u_^_CcP 9%#_PЧ,KW6NJңs@1|G{ة@qnK۠nCmk'ՀlfW} _EI?p=DP2)n(N4CMwYJq (ߦ}ehF9J\\?ݻ/[ ɣ`KPޕ<"(w f%@E5ˬE[SF/kKj, Ի{yBŀ"ኯ á°Ӡxl;S 'PSO[lXwj%P(ٿZ"G[v%;¡_CE%cCM}췠/Px44B(7֟is e gOރ"hg o{u ,{|X=n%(Fל aSz|FwzUBXx_jePX̞ okL2=4(+7˥5nNyk@|Zg/ 7Q|20so%^W4y1:R[5@ٽߪLv+(xfoV{M1TB9킒/V$2r.R1 +r>kBlgBã+~FA;9߲/(>~]} |ϥ`}n-ׇo;]Z*бDPٴuł8![vë^w{UAiu=v|- 7j7 aZl5m{OԴ=~Ux<PX6˜ذGDPwY^7Aɤ #u^371aaIjPyL(>8y{6th(ޫߣ޴;RVC3?YepM/s(] w\m҇1kciidDl5]~"ւyh?#CP{JV8/#/s_V<|v::(X4 Զ'v 2.|3eB'p^}9d _ֲAͻy)lCA~= P7nAA2Xu3zs:/lC _v s+V+,]OvnO͖.bgN*F(x2y-=>C#GB0x;wpwY'c-瑉Pe\axJ(2@bqѦa768 *xJz\SE {3hnNSs, #{'7&Z2վ't–NJP2xywDhJ,_-=,áfBK6λ!xnk"T g|wq\Aeo^:5 4]j!gOGS@q((7Uh P%촓Ce6|#^0k`9|o!TCU#N~Y ۓ(ԙ)}PFsxq$zHwq02# e6CT@uԘҵPdZe/ݛmj (֨Z gCA5wbPsW<ărbpL@E3Z^,쫺y \ ֈOԗ G jtJ 㜨Ww\:VUuP~ӭAJ x,> 7"iK^u.s3zOC bJy֪][^ eޗ O]j(~8kn(F*//dVsBI(~q53RY}M! 3wXְndjh<Ȱa/9v6gMOsa WޮO"O񊠠:W?x<(9(_{,%ojdF(y11wD6*઩POk=jL@eo,L[t|4mdD/͘s'š| 7<q ~v,Prٲ< (J?o%sRK}R^{-5(UD!bh1gK DV/OfB,Ƕ's-Cx*\ ߌ8T gC9A| T>İ>ِ:\ɖ97Zi|mN'q۰ys7ZFJ+ȗ=|4g{Pat8jPu=dg?*di Y[t_^\7<06{P}!`rJPWh/n_ON|dȗ&0a'}ȳ*'jj5IJx5eNa!y@u.hYv1qHM*/N̛>bx~h̩f)/[n U>ĝT8JJ>XCm /.9<$ͼ,f d'ݟ\|u"tj܅NpkYA5伎8+}a Q@jw?^rg C=P1$ -!a{@%Qw7ufTfPzݡ6kTy9fA15z(]0d/y6q_Xet|w98T} 5_oW@ٕ;ФjLJ_rP +~ ܉2 s>Ë:@Ѡ| y&XT]h>:(üd:;Zz.^A}|ѻ't"j(Zdfg\'LJIj]j%OnTw~6͇U=*pOPuz漛tB6(|L(uu ,|#sUO>ߣ>䭝a? JI\} ԏCv΃(Vƛ(4(8< >41r*"(4-9_Z揭p0M5ExBT|۶ },,Xp,[ȹ:q_ _e7C@q*wjwTy0tyE45 Yy3-~0P1v$OsdkAq` 4՗}PF0g[ orϷZ}s V +8ȇN+v1.HCIȒrEϰxR<(q"yTO\LOn#zs4PTxgمPOFsG(I)KycV@93lP>rZ-gq۪ ]bm@gWQ_-3W}W 2'}Ԯ@Q^>Pt o yv[+J ǁε,(_*PpwP4W]6@iGKl~_HBnٹߡ}}ed6nͅr@AjpQH/6V:Pw,{D9m6)̿4s5(ڥ1}lPWǣK|X>?{M_= DAP[\ kaRP;\ú*z_!už֌ Z/~vΦɗAe7<nbS=j,4^'K=_3@~W =W ,0'`"䆙[,_'>LIYfp,~җ˟Vk8L6{ ŞF۽if83zAv|Lc \R:ng& x;S)d.~,FEgn/49TT C󯪑R7ni̹MۧBέ]*Z0zXP 83n|;6_,gi <(w(҃-_vG\Ǟ'=&rWWl}uqE"wT1FcaJ EBm Ҿ4Bc'tG7s. sFƸ&Aviw_sTt/2F/wޅ%dWz8\?XhY+F+{כ uf[ ~|q~S r7C"}Z@ȺAQOy n?x²"Ǝ ai?eg.B'' ߂}>+;zU]nIO-+|4('q oK+.>Ƞr>McE?d{쉋XaE@,&5U͔Ͻ,=]{JjXEZA:{ P}傅rih=?*!'G/ȍn|/F׻Wܿmpces<#!VI!([yPpp3TTr^ m׼ C "ͽe#d)?\Ye3'켻=}m]NcÙaۓ@+$>o)3!VVPҲvBh_'/5JP8;D{:XAou7ZPgf…w@#F|_s(u}W!wHl@NLR@uHS!h+%A|ٮՠ$a9+48@Y}?@^ab@Hc3^T̩͒n6=_ZfXxg ?ߖEUC!#x}6Կ:cG%t?xcf<ݎS^vTq״TC5 [Uʱ#8| b,dBcˊzk"zC@R:??\{rwì0(9YrԦ&Վޏ,hY2,(d:sq :c1tN=if|r:kJͼ[!`^w="ڿOw[﷘BAW{ۀu9Nq(7n>twՀRQ\ȝ}dxYpP7H{ŵg!+Va]v|2}8AUMGm3>AvWN;ޭK keM s|^: 'Fyļeε'7['I=g >‹U9Qе\{xa'QmkjPt]D?W cNo%[ /)MRg/;-s?N&G׼ow]AVIr߰okB! s\OǵY/ε+~١ApKL>PʬAv K}v HGߑR RTEs2|-5!+P9~Wc!#Fn[?N$/\min񤍽@yku{Zk(eD(?L.JNlE7} kem5ݻnJfCκCs x}$'*u.\M~!ucd˼ZKcF~= $+L7/<4lIH_=,YA^a|K|d{. [2;_ Yj_n !?o_U'+8.zv_P(\G("+s\!-$bXwvn@-ߔ/M;sbT“ i!HRX(I~{n@2Ts>P ?POߚHB !+%\PF )_ ~we'R@ҩD"H*+.Gw*~2޹T wHȓHy\H( xR.G$? M\]넮 >/KyN2qtE%"Zʤ\'T$ Dߝ[Y\.}N%_[ lh}y2I_"& u~xיqOuӱ ;dzh~ZF4 Wܴ8kj0G#~)RoR~xʼn>k 'Fq?^>ݕb4?Uޠ18f]`l}vO vG#ا}g.ƻs>S|s;ިPU yoWqO㖮9/[gsn뻥kom̑(3y\2C՘_9;,DΗxzč [:}p+/ e7HZgs0oE>EB^v}϶]g.i~g(ux% I";J]L7_1 އt>S]su?!9n׷gYnܸy#gV_ʎŴ J)GBa ac0&ٔsm(L3(ogᮮ2[_OoïFOoot^TGںpM2.nن5&iњ8/^o/S.Ֆh<-;circlize/inst/extdata/doodle.RData0000644000176200001440000734236214015721224016667 0ustar liggesusersٳmוv^Pvr5,ٲdy?RU:"*(GNɖ۴ ۰`  2L $*noq>gGךk179׿+W~ʟٟOg+Ooɿşɥ+_Gzs^e{^e{^e{^e+ǟW_e{^鲽l;}ǟr玣>OiG;[uc{:d=гІߞ|~1zz+ǟ'zчs_;}Gǟ?>=\m~JOK~>5=x2Z>?nҫ+/J3+?>sпp9Gg܏ON>GOOO>GOO>G͓ o|^=|Ϳ}9z/||T?;\Go'w/'w9<{~7r❿t9z8:yGo~_^mo}37~Gok'?/3K'^nO?[6tɺWǟێN>Gǟg|hf!ȧG?:7~_<8nE>o[u`;3ouވ|ȡG?6t|~0уߝy?2~{Y_9f>U߿6n]s{i[ozu֌u᷹[cs`g=s-GÙ[?Y:x.[sOѽq3'GOW{({?_G }?==|寱 :'t9zuz9pA/ Sy׮}ϟ|^?|6-;}Wۑiǎdnd7ocO>y!s>=;wN>G\<6?@E. [،u|c3r3GG̗r:o|2'c_{?L ǟ=z9zkǟ_׉ǟ?w{?AԸ>|6̸Ǐ@w}o mo|<|Ϳrp 7wEr+vϛsUg>5jpZǫ_x58>xW7AZsGG ε??ܸ6_~k}3#>|GW끯^oDs5^32~y~ }󼶫?|/Yw>_zg^q q~!3{Kmp5෱7ǭo6-W{ݲWmݷ/uݶkyk g?3^,f3q2v-:Kg]"??[OpO`[~o?x$?o~+Zv]w{:3SvJ!|[vF^?;ڍ.ݸW|C#Cy"n?:v['~:ze>~X7ގNh87'gw;.b/H_]Z`x|-q;?:zH~B]WzcˬG7ۅN}~RnO cu.rO~pH G^'Ǿ< OSp8|I9G_8q OG7]]ici;7Ok.FM3M|F[:O⚡НCq.kN5rdWq]\o>q>t7<:͟]|^o5`1xХ`|0j|?\:q vZ# }&Eܢr\$Г@oL鱃B~2_v=G.~bhsC>g#g߅zN$;\v^Nꏺnw0g$,?Oܟ̺W??]~I~}_z[?X/zGCoz>iO:Yxaϐ6ynNW!S=_U1~|Ku7G?wɉ_~~'\~zpNn=7 Wc!y[|d/fgcW?çU?uZařϨsϧ;vE)Mp34Sf~lŹU}(;Mku֟Wڪni1zjuS{/Gu8ɍo_3&nIp~?/({#]<9q|aW˯$ϲn7睨#xHVeB?I>BE:'8Ѓ>?q"<>&gwrO\>W;ieO]yOPu?{} y#nF.[U]}%_p? ;ּcL܀\g;Nȍ/yA/J?uì+t|s8}kol=_;Pwbگ .w/\GWqK]Xu]_ꗆ'i]|_^ep{;rWta׳W<|h⬞'ށ/8<Bm]_~~~L ;eɷПk N^Ky7o&;Nܻ ك}0Gv3DCb~Z#aQ^9<Gg}Kp<}?=xh< >ٟ[qͨhVvY܁ug}An(]J9zv<̦^K\뀧ǞSC 7xj?q|<[s8 .:)ңy4"^[ Ѓgy>u>'W9 ~ğ}zmLj[qs{3"uܝ/'ap4f|q\Wl֯ηnYme=]/N4nOh얪Oq )?]v]-zDW_6D'ߕcܙ8~F=rv9Nk8?I_'GO{<_otGc~ڟ*_l3:އ;S?a%{^~zc&R]Ycg]oZ؋6qއ\~?Ӫ?zvziG|aWcwV8gӫxx콡Sa8 f=6yeBf~Щ|[!v]%"po~i}[|FOSE'y~~8quw;y=>r6L젮Ϸ⦅>)͸ٗ]gHsS7'ul|"5ppKwznKwGwS|fszb$>o?9&n^tҗ+:΍0_>֛boSþ_rh'״7~1oDcuEܮi??'bw<#7>JcֹϵLGݧ=BjɁ{_7<ͺsO3⌜ǯxJ=O~=ŷ=7).׈ T:v9a?8hΏaݡ+Gc=⿔>wrw!u n|:NOu_\of~]/1deك'uUw]\'OWڴgP2U7^-u r$bV&xh{|Sf`x5ʏ%~8j/aW"gQq{|6idwCu _'jdZ-s\*O_YB#%ܲ3}&qE/]6US.a8Fֳ|#ϽO]D/~“:o4qN6>gg}e}'ͫnC>#)uBGjv`w>rHu&#qYV8]*ewƇ%R_o{SvF>ڎG+xztz{n/y ^SH|{fjSQG/|2E}3gV3n޷֏g.+z|& {`x"W9rRcs9lhqOǔ4{i7q\Os系/8nGݿ}363\a ί{ Mؿ%?(O.^-zmG]`.$GOYOy^u<&Iɡ{?#[E/rVZQ|Nz;?[ Yu /\yF)P2?S+cX_U|cGcU =$O_&DXg|׾%?xɭ)u W?rPx=xNԹ 3Μ+5?9u屛gxQ{c}|Z7gZ]9AZu솎OikG\8#5/VF̸;=B‡牛Vg|$|Vݍ";ݲ8<3OCgwoVWGVe{+z~gxS.bb.psu{wzd]ŽNg_'|w^qF2>̾$ysd`灌E/#LlqNWs_'gZ+v\]GCYCmOhx^=zPϣB9_th>]O쓪\ױp>y7?>q+9>$$n:}`]i֛|%Q\zNu!~FQ~q;?fg揿.~YozO"~s4p??>K %yQG'Gq!vx~Sp'?J,oL\Kԗ8A~#G+V5:v.\j~N]7YKgo_mGw]{R}y6[gϩ?wn ]/>Co%>oc~w77s^#.{B{@Sl\}>E_y_dg=3ֹ}yg;yn;>뺃wG\w_tʛ&/\~y #Y=zmW?8zn%{'|v|8/1@\9g{R?*N^vкГw_.&f$xy^Rřviug{?vsy덧Wz~% =f'eKߢ+<{es9mߥmώJ|ܟ3?~۵/hqubTgH"orl9;Hэ|__7986X Wxu=*-rT5򩟿 ߦo='^>͏^]< ?Ǡ}>.u;ewCS^m }$%y '[bu8]z{Jt>>H}Ep5xQ&)WO.]ys[;vCNz%샬)a}=M =v/\K-';ףSggx`x-;NI)u—:ϑ5>}V7p6~ŕl7\u,?dWytƋ/w:qq#We%<>jᯬs.@ xQ.vp>d3Ձג{c>g𚼫:']8j<ы⽩9}({}?Bh֡ڏa7 ~؉Tz|CQǽ~xzc,Ӓ~{fލ*V9fO~GُlK^cOKH=GxOO[_q+|v2'zfj;o\\o}zw\4q0U> ' EWTTޟ8\-1Nuϋs (s#䕆ﭛuV?Ong<ծ򥋿/ˏOq!"TM^"?jx>=2+gUIu_a?ŏF/=z?ŏ[.OwSwݡ{IyD~?kuqa_mrqȣS8+W;~^z\'#:OϗsG|Wf֓}i ߗ=qe>W؁ u.U\ٍ0 W:OZqDL|7V'һalّOvVڋ]YmLjλ~^ޜSm}N<_.hGC'|ɿ_|8~+qx_>8kJύ؜!P &Nxr]eC9_eBK\:+\`B}-P&!8NuSgԁ]4^+q$N:u z7GcOBSq<}* s7tfٻfzI ;*,M]y] ԃozC}$~WOs.:!ůo7,zO~\'$.^>/| Ws|Z}IV4I}2}g# Mcnޏ[O;Cr%.ͺ>"o=#;,&oyxLJbɏ}Dv o'y+%GvO_Rx/9. <_uH:.xu&\Qeu" kmꐚh.tN;qV-hvJ |&9G~:'WGɳ?w'>rJ1uYSw(8W(/Fo{kߍ5c_'(;ucyodxI6=aoT7k]Ugߣw΋ڴgٞ+o{{Fn=y G?yzOx ?')琵7s3>|t?}?*3E[?g`Nٷ9CorGk9;d#?Ve'?7~\o;+o?"Z9wh/*@?4=}n~}_0q8#cwydہvxsVgOȿy_K-N4]x~v {@]D~C^a'}Zӯy {ۻ^Žp*Q{GN'wɡ'õ~nml"^k_"{8??ïLՃ6vt'LRQݙz# XWt{<˲6~*ϳZmosX‡~~<G=z]zMV? 2WqMaj>b{+cID\ww|ur ωs> ]ȇO ;xj:φN޷H彳#?=Ωx,?Ŏu2OyVRUWJq7U_CN䌸iٚy;//;c7 Mǹ=#T1Ir??Y#'l=9Owco }KwK<;ug_ŗΞa؇?x~)9g\z)Owe>+y>SgMy~ws_;-!~~!/a ~yYʐ';wK\KO9?a[q~?:fħ7u/6r5xy~K\IcS?- Yv\ޏ!^7͋:#?zy88]I|Tf'0u:vʁU'ߝv܋犃t>_ϖw;^"w<}3~q+|x&\y>K讞vEMc-|&}d*q^מG/3?ٟzӜ=QG#F?:䇓]B~?YW_3U|Vl |uߛ =>/!G}T8aGOmInj=^߼R^{U(+>ءc?HF&^)?d;~(}׆6Ft`օj.My>/38|Xqw< nő_Tu㩏{!|6ױ)KCy;4+ ]{fܵ4\e?Kcű3y\ TpO?zy#).Mq';Лj% 9qa֦WE¿ /YGQ;'Н>>?ԛ7Rr"cӒ믞^G+k~Lu#Sס[A}PO?j!sT?!yq#v0{`ޢߝxbu ߐxs g\v{D{EK~:$~^$FU|*~zqo-W~y9xy?Vh?+jF^;O#2zg^W#>cߍߦS᝜?z+}Î俹?qjuceWOŹF?:~B-o̎#z .e8kM7cSM^6x" 2O?5Գ-/+0ՋO+R|j/gejaOO}1~߲o_G׈O>smm4uH7W͏@n.9JyT]_9Oܑϻ)>Ŏ+y>E]'dơO 9DoOG쟲z~ŷVn;z\O\goaxSF|?ߝ:WE#mk='^o=RSS>]8LK';i0|*-^F3|..}'9'OK;|9fGupy\UW4[ī𿺔čqSoFGOrzM9;zqmG~;ǟߍ|DB}ERnU_>_C+ާ>WOPquUʿT/Ыn_$wxBw'5_>r}asc>h8+΋3~"uQgu7|Bޭ ^#y^ߐ ]뙝&Pu؛]/s~_CyFѳ_=r :E7vgQ~wx[oI^7Ѕ]pЋee{_\u꫸ԾMZq~^8mwGgÂǍkDW7丹}U E͡k{W}פ>>v4zf|:~ӬOc2>|o6s|XMz'&ONݧ靸K;qKp]yf~$=uM:W߳pDؽzvrZyO+rOxJ>~/]ov\pD/? 9Wd>|Pt%K&W/G8߅z}qfmKpu?E)/|B ~R` ?&ϵSD>O?u>Y;uD=vsvΦUnЗ*4nxG#v|sd:υ|!W|Oan u}Z owV+Ώ}^=q/g3{Ov(<_Yvn^ǎ8Vǯ}Owa gU﹙U|`o ~zN#!UqLu~#?c}u:USG3ʾ2~Kk7^ϯ =#u<5yg<3 qeߝO\|xuሜA~'n!v͞=V?F^y =^Uj筺:v<~c7bcMO<|-W}<{׻b.ľޗ{^:~Z>^Zϋ:7 })dAşOx͉k{7[_d+ȹԥU^hOHώ/|,POU߷#Oxh/B*;>p^~\Zo[|Gė/8F>Ó ^WmǗ,y?چ˹G5>|!/:Ñ=qzsS > Uq#1IrL&>j =vҿ6qz_P}vC'tD_޾qOFO_IaY<e/pEg]𓺴`b  ?cgvݹ8PSӬ :K~}g_Dgo.Y+xE?dB͹QާDo =%qDy͢ޭ:sf;z'|+DãȉK:.x7rK\=):/ĹszE[=v8<5˓KuUpVPx'7;3+%,%<']_7<3/}"nޓ=8eW 8?IOy~k^/Gc{Z)Oz*~R=z(q 8:O׽1?l^+r>{pk{z{p)}b5~~ٜ$~~Z4SW}OuÞ_{B+Bw=wo4r~,y8vlZs[/JOuG?ODOtߺdZ{SŋxR??lj]7rs+v?>zkg>o{N~-:(LjSw?~+u]ߋO-h<5~v;Ukqg=kz&8O.{[Ziïyv]xhp7q*->pb_G$.}W9ySkOY(.v|qU×yO}S>_〝g0$ĵCs>ys]pxH\B<Eu}g(&8uƓ|G~9vi7^J|u翯UySU+yVpaчbV\߉G`x/=> p~9kY|/Oߜ몟}+<Oٵ*|^͹)=]wMo_Qμ?~ Owc[s7O_ygݷACٻT@QoUpax}/'.E~&7'8!xWGY`xe{ܜ/].~:^q@uWRy\W%w$Wp/uލc_P=7_/FաMv-|f[kvg)SOuP]H]+Pvwq-c΁}g?xx$/}S&KN|nco :~_m+j;Yەi!2o~۟#$0urY}z`B =~>6ܙ|YT=4>E_h>.v#}o]@f^~?IMmt[ou~g򯻎9]C4/W:G'pzRۇg{ Qz?S#mcm9[78zƶǓqE>4pW 9s^ʛy/W/&鋜:zVf_;nZqBu#!_i~, z߾#i#Ǝzw] }vssEGCi1sXqDWw)oz_ǟ278Ϋ>7~6>pC=EO%S;⚽/Ƽw>$smqO8\[Ogפ(;7ȍꫵΛPM}Oy"}z[>Cϭ]<U5|ospa(uGgMwEij7}5gw襖g;{V{gj~ʏl/l/l/l/+>t^%.v%.B=>#u sIzU?3ez\'qQ:쨯vSBgW;ƿo/^:opoב%?v0H%v^s?+{G~^u5}o]zaO8?&se7\~oEDߗq'}oX;Fܝ~qwp[l%/wwtj{_8WʼeayoG[:ps~f\}/|687ʹ-圷>^_s^Vgٗ<ΘiEڼ2|\\uAw_D.>:g9(Yy yHo$΂k[v(n?Kj_'g<~q/]Lxn?WJ>M>~s]~>yoߠߦ[{/@n?<"G?}[YpSżw`z[-D?pmћ}9ǡg;y!p>y~<+s'}~xn{\瘧||4[N6]ܢ{k'yV˕>Ϧ 93mo:gr-c:뀿٣ޮsg_9ꜿU?g65Ne?Ƿs/ryޅ;9_3r~w$wTFb7 /|K5|O /Fش3w{e#/h\;3asnEpީ9w+z=;\pwp/_ߒı<69]\o^m{kn Oǟ'XKxiOuk_pw۴o;w<-SCmWmZe[rKg }:.89őNfǿpH}ßȼ*2?t'=^9z=:ox]UV-xR7$>=rCOp~(`WC=)cZ/p;)nC%ڞ}ɍ?Wu)3 g)+.@ ; ߫Ç-Iم;r>ux'_,9zR'mڮ:ZvzO1|h?_߫2Q?-~i=qu:k;\U/H{N>{p^Ko𴉗Ϻx>D/]_؃~/qց?".D뫎>쿩3}0vh->=K{ <탛~+q-;SO~~GGw}zmo7vWy~|7Nxp>ʏ'x N7߽?}y3zM/_Cls:yhxOv:gk'~}1#u/ON~⟑pD/U?n=k3_tCGy=ދ7w!Jw޻“'bc7Wo >^w/_'o26qQpn.> ?qo,q=]{\z֛3O+oIDYk3.?])/^G=_~ﷄWnk_ݥgد]'z Nȥ>[/zΞsp\?z{DcS)~}w|iSEw莯я^_7iy\M/d]θ^vGr~;ނ/)~?:~"\O;tg7~$o#_>\{#P^]ΣnÆ~?Po ϐexa]CЬx=%y pWi?Wmӭ'BзM 3-3y}#Op@Wy#y5m|+.~څU.7/Rg3t}Zvmzĺ.m7.A>s3sѓs=D?;'8ч=/{ пZ/x7ȗ>8J6|>;x瑏W=!W#GD'LKdTTt_*?vzqv}0r_d?(֏]с^QGguN9wOx_9K8o~_=ةD^~f}!Ά|zz>3D/yC3їӺTÖ|\ûGNOV~M>X/vOqqZœ9/~C=|Qg>^~6ܢ?{5vM"|P FM=;_cϔ>Sr_u#rI| Ѧ;>88q~=/VȻ3.*ߜ+JK z!˯gzG?wh<lUuyU>\7r?;йƕu`|'K|.S_qo?V3.{+'6iz?i} <_ŒpnE] ؝ ';i<[?%0qU'_/X|Od/hGgxJ}FMOgK!UnqhcۅG|WyUkpn}qX|zG_/l}pz/k{v3|:s=%sv8~xCkv\bږ }#AlW>J~=i{z:ɃWA<~_0^ױٓLIOz.@?qP~%?BNrO΁%O9'3p.;Ҿ=ur)ZՓN{-ޢX- 8j/(Sw7pH **^~m$jdy֏\{8$b7Ͼɧ?w54S/7]3v{|؉k+rgWM[us{1o; lu)WvN![o&pX7#RRy|{}Φfy ,DYE\ºq1M>E~p֣qUu{_[gp+[w]W#/F[3|_EA/؇]Gޣ-_ď~~xwTeW3 >};ѓZ/_v4iW~Iu[pRqjL|xi5{?Ecz㉜ۅnw?b6yGS9vlcz'v_3I 7y|~gtEWn ]/v7qӺgf<^7yIJ/6N8tC_y0\Y7zox)>YoqO|'| .qțJMuw5V<ӹdgqѕ{BGmq~JYG!9C#qwK\̊37>OxyH^)sY7vvަ޹s)ﳿ3ùYߜ34%oV2/p2+ɼl%e~+ssn<Ľ+,DX?y'HoƮ 6=&K[MgKwsz^v>o5k={%ѝ#K/:IT Ow~!v~yһ :|eť*!}oV^k\ m9 ?}gF˫DOT|+q.V!]˝'u3'ߍ;H~눿ENoSb'|vq9rWA?Cqv.ϸk}˞1'v}x88u\eّ<ܢ_{UV:~2_y uJ֋.~Q&?^W/2~x1G~jk˞}`~ Sx]+r?Rz=+9D{y#_qu7 vºw]@pRObNBy|64ŭ:Kuݪ^~k:d-gYo 6_VyN؝ qCOݢ77Z%/N`{ok5+z>7M}XWJo8T7c.;{Gt>3{6q!tQ_uYo/~ yt|//<q!}7-}Cx<Ҍw>WmO﫸=k=N`7qEoA}/Y'8Fg}gq;.Xz\ox7!=OyGГO9d]KM6y}2+l]hzһ? yMϣ}a;\wc79G˾ zn[yw'I꣟NG+>Pu j9q;F#Eo{:v =Y{&q:q_Mr=鮑o?{={3._.i~"'Bo߭gދ>s^3PNGOOZcW~bO>L/u]=8wc~M&ϴ3r\|VŊYʪ<.5v\+n 笛=K>i_-B>;)kEOt:iMNǎK8ܾ[q x8zg_J\O7k|Is ?ޭ޷fǼ.i%EUul{WSyGw~l;􂸀kƧT\e=;ƞ.NE_ r^fޙw=X*W ?8~vf^.އOJ^ o.hw^] /}/=)ܸ}E/ 3]# HtBǃ-;~P3j֕g{\AQvbǠo^O=ΣS8ER؇PA}{04~SYGr:u\tyY//u~?;&xb+‰-.yG =_pׇ^xd;\֋~?;v;vY+;KK:N}>C?uuW:f|Y)k{C+N͋8;ɾ888g=nA7MxףmN< 0ys:n pqx9>e H{uSo/*mb&K>;z;P^B>_ 7{wR_6yg׮ۑڴm'8y;q.~=>d'K+~8dZg-{?}4u]Ls?5~[z0{oe\UA}Yg1zhs^r#~ծO?ZZq+x7r}$.kC z֧_~%o1˛E/ }|oEU=D~g?~gO8.@'vCٟ/qաF~3eG5ru.c)}:]vb( G湑3Qqq.Y[އٟVxj{*]aOzmS ~kp$NR?@C[O2_w=Gby62;>g(.z;0yE^s7;K>W %OnʿbBL>I6s^`M|E>6n>,T~2DWwvշ&>L`We\{K}8uۉ]x(Vz{r؜콂|]ߗ^#OHF8>>O^U#/z}6Ne7< n f~W^ǝm䝺q^syZz|[9Z/l?um_%8Kobߌ]Oΐwj{~O8qGU^ i웚OZ?GOx=筠?竎WxB_n_W]XH]8 y=qJBwɾwsC{p'.AO?'AG%_4 ?+Ͽ=p!g9Ϥ{ ˟G?Ͽ~<9g=C.l<3oòI/?T|ɬ##q3v'~zua_=F{f*zeaϹ3t?y>|uwk_}BN+ ^칮?x={?_qZz8`WUbW3zv纎뜟 GUo> w=E;?{Q"{;W8}7pgu_}_եOti'GZ'{&_}ǭL9PM[r_=7^COtGN=M<~ӌZS{wQ GI+ua:Fy+yM=S2|e8~zR\]u`]Oj쑶~'5*x9oE~ecTq~M~hs6k=Гy~!l}zOCf5{8#;]pֹ&̎-Vݨ}a9Iu|~yחsxL{Ky"I~C'g'm?\Cv}xG}yD7rDiCovg]egw?ss#O:H/) cCDWّ﫷~>[ϥOYDsNR^v9\/'# nⷜ+;tB~Us`/7H=!)n|]oO'9gѣϡ6~_8<3oM^F?&~c繭7 K>ߧ滸"#<>ߺ#L'>7|{~s|}I}}opd|"v]L{\m7?zkQzJܹϭI>\p z5>qk ;݉V|~g'J=^NN1U_yO-/CW?Au++?r>''lإ3κ]ٵzM괉牯k9Wb|K~;FN'q޲w xfyT4I>kpoCgϫ<4O}hnae?M/s2 M/Kv'?1n~bnO ȿzË{'^xMߎ{;ԯW >8v>VD9fݝi|ZdDgЩSt;/.,~'[?xz3&mT]Ǝq/=Ŀ=|W ?9bzf};ONbѿQ~z|_ ; %vz]'{]1v ?TܖZNvh=>ៜW|J\]ɞt񥼔N IeÓxxܥo-9{"_"_y>i=u7Fk~?y>P'롎G'y3,^<~<^k#W Nfѱؑ\ n\?yӮ{&..f>Ou;\7CO=_q뎧w[uF>"q}P^*_}Z\qS^^m'o~ڟ~T8Xi?U[ϮLًeyc̺'c ~؇C>5xq]1׵§VO=~'zW9۷?Pi:xwiu(z[ҏUy;8߰޿=79Ks`h'sՁ܎-{(l=-xԍuROpj=~K]]vn/UO;SYg\ c?+<'NJ^=Pt]\=8{,x~gi7_/= O>o9xrN臍Txj{|G].v=wWǭ8_wwz' mmko_=x~nٷ5vXǹ#.Hޱ/=O>R{rA4oO/QzeUOQyU_ K_vQ}[3ߎ4E ^'rT8^ɓ> oY>;'Kإp$TQWwpN<{v|7j<>bwŕz]+.O_sP2΍y&W\Ox.׬}=苞?Y[lpqIýuğd|ߙk@׳KOM?ѷ}/̼~j<`Cf-]ʛ>ܶWE S}e y07~ZO4w-范'te>YsO7+#O OGM:/W^ ^]9 NC|s(58>[ۼ_W[͙Zwr{<~cw/׈ kE_)S_o䌳ɍ'+{ 9x_p&/d_[C7z{ ;~ιmeq^G]~52vviٷ}%~C?܄z׵{:Og]>~RQ O?$]7:e:'g&qy~#yvGoj~'c5;e]G~w>"úSoYyAk _CCm~?Cި_ cnp?_k<=b]ރL>yFfltV{St0{og'ޯQzxz}>!i݌{}'t߃eمփ{[u GN ӏ7)~p?=jx9S|/o޶Չ=W=_%7i8ډ7].|+lWGG3 7O(~/WhC5z;K|䉪cws:7#z<}%{O Oyd]n{"a1D>5/'b/ܶMU~pb>{?3si§ϴ:h;k?w_Km{3t^'ש{aH<8x諊C&u/W`6;<LJ]C7~}u}U)EWT]u6_vUm%m X-3YѽqqƓ낧:u?ƾ z?~Qfm=Cq ~ƍ>߲yg=q$ g]i^pjdױӬ仺uӣj 6Cw= rzWSWxr>짘~De*Nn}gtyz{S9OeǃYɸ:rV]Gη_Npb^u/'S Oӧw:~W|ay亮?~'Zu&+K*z>_Y>篱;_)7^x/¼#GGZnۏuē.ǥ>;c8u]?BF^Z >ĭ?=ΞuW]-9ty_-9dli_R. m!y.rCz)yyUoY}zm=sh+'So>E{'DO9CoO}R~0놧cqInw.<}9%~2_:>({ߪ^<^4^zg>'ObO6#n8j _&?d'~Zz}&nW@|~q /L;׾|' ^xzn&*.ikv_pig|deN~֦Gʎ\ʛ_/yTysϔ}Ɨcv8j緜͸OZ<dO9vWhxZ-Wz j9]_zyF<xN"~<V?+/ mF}S?i>|' O+ؓ|?%+{e/s_y7J~;m?OOpͯ/<'웶 4߮pU>r鷵=Z]zmw]z~n=ȵ>T)'OwN/,f|C*|-}P۳Sp%1㧟ܨ3Nxj{%|.sO%7zh>Z ۮ켞yGU<0riw?y.&.6oKވ^txm#ǏcZOyap;i?Ua>}.}p_LիE=+^ Y4NU?Wpo<ɓOΕzsS?9_|<]ſ7w< ~?tFW˹+ُjkSb_N]rv*yЭw]wΖ=vYy'ӎw_ r*uy{~?E}jCtq7p(nv9OW'r@>Wu}͗^{걇?v.sU\_zdߵOqC%ѵgÏtYg~{_2|cpoϺεv^Ww|񎳭U/I׊WvG}E}\~ψFC_ri3-u׊zu95.م 9n^.YzO<܅3C5^tYk*gKͻ^Y}ڦw^e{^e{^e{^e+>t^%.v%.g?Ʀ>OۙW[ۭ]uzz?Z絧vƳiW}ҟ:`.r6a뷃f>+~9g]ƙZ)ӏoQڇz3?qc?|54X?`H7g{?{ϯH&rb_ppy{?]ѭՅ`b>Ǧ[>-?j3cd o0^=ٯ'K7'7?u֗?缵wf󢲟pΛ|rsޘoiٷ6ms.}u+'~}螿ߝob?y|k4Ӿf.mczƇs^OU7zrvh<}\,tƷ~h헶wهlroWq}C[k)VN_uMa5OdyZMuWݧyh?zbo3y 9GC駲{v=}}^sqGױ:OzX>X'ϡO}c>ߧUߜGs4W<>Ϥ:=/m9g<֍mG?s+\|Jk\ο^e;չj}f#zsz@#Aj |eOᣏ{Sط'I[Zϓk-̿UJy~ەz{sVt1NJޞXx"|z|o];jΣ ?[y6jR^h&O탿9X?=\OmGgNJK%ڞ$}ْ?Q>rߠ+w_i-[sh] ΁Ľĭ~S%'5x3 1î N7C=<{'Zˮx꾳'y";/쳒 ߛ_7n:#_OIx,w_Ns<]GvZ/Ե){\{}PxRБ|&WYcg;/+ܬGczͯZv"~! <8o"^ui|eO~ok;xw@7*n =ϸDu3nq= rWvқe~o~qZߎ#w@M@ޓ~cA>v>%/77pŞpWp~o{?mV/+Ӣyw)6?<>7~ [?uPŻw˗}Dy]t0p~7nV_n4ZߴoK/x@oR1?wtq~(n?]||1z7s 3o'|dA~U qcǬ}6<{ogG/U#8b\7׺p=G ǾT_ͼ'@Oہ[PR8}б|o9G?ͣMY3X13`[[su%y,yS1q>mx—X/3rp'{UǻPݥ@U7︙q}(8Y_#>n<MKOONS:q҇?2Oz-п_G/}Ƌ-ӾO:n;ɏL֝׬~q;~>X^8kth19m_ZWg m6Now]Bޯ:KSהuAOBg7i9rN}r??O.W|hr.Mof_]U_›UY֑L?l^t$G7hI=)4ތ }vu{O:.wr;EOvM+ygw_7 ;^xxBw^Ο\׷<89<$Piݍ;h>ӏI<^^M7:d'F.~-_|~iuոn?_br8Oh5~Qr8#\z\}'w={mW9mgn OܯeeU~;څ'o18^a;@> Nk?UOwc}y9n!؟yj?XYk~̸f};m:t|-?3?w=+K=4^<8-}UoY;޽P'_3H>?ַ-;:.>|2knTrw8FguN'o ]CE9Wdgor(C'觌7~C?M7-ɗ7"KސcBxK=vC齱Kewy\7 ;<:ߎ֝3ߨu|l~}p}3! |Gw+yd{oBx^y?}o$3??{.~G2\-YryhJN 'szn.cwxu7o_ {Gޏ5y; G=:;O 9 O>ÞBWZCzs+9D?^_5-_O/;ӺoCɛ7^TՌ/~hkC$~3y١}u-M].]({ 9K{QoSg|ޛ`xs;?X'm{n^WO>Ō=WN>8+S|oQu=[𱅿z=W?ϸ=׺^k\G5;ny+~4NϱG C?^y>s |>m]:|kOU<[.x8Fv}:㹻W?_~xғ?#vGm5V(~7#k_OY֫m;vus57~v^]N}Z~z݀}7xفNH=B/zn4šg{=x||;={~d[OpzmUS+m·l{뛵񕊷TGo|syO|NSيz i|-ڏ8|riUJ~# ȍ׏W_q ?sуᗕ/ڿ$~;9l>:~WO>7OOͣO#ֶh~umz^1r]ƺnב'ObOO?uus 'cw+eYo*בG;>gٺ͍OSs|b]m|K[v tz=q}uƉOy?X/}ַ }Nok? _9}4]7|>Wv_unq͹gS`6k/Wq,Wg\+un='͟/;HnCe.9Fn7O} ?gMs܃[;u|øAm:j^hI ՙC[hCZGt͸{Ay{ '5ч/^? 'lGk?R胿;:Ɠ8''_CO{ Б~-f>p|Fm/l~'}_i>'}nwvw_=x9履><nr:/y:Oe~iO*9'z{¯Ygp;N]m_%htO1OW?_?Oh^;Яg+{#G->y~;6Oҿ 0Ov{C}.mp{kVz қ.ɷO+..?yʏ?񏆎p!9H.N>Óo4;oo|:~>aoY] N[l|W_ /gE?v(ê6׍8\G@X//o֝A s|\qrvs%_NE盰r1gkn:ݞ{QZ7)-9A_|H1xC zy]k'9{}~>}gM珮;Ӟ/Z.{}tO]zዮ\:[^=OG/g'MAb^%'#8U׳]'.73kPߊwfgΊKWv̋ް>C7fy>3q^?_/y`W$!8z;J~0tZG[q~:zS7 }εuxHpj~VC q.\ioq×NI<8@Y@>pst%qza1M{ ^s{gapz('v|qY?v!}wAK^7`_/ܥO漢=ޓ7F/Pu}C'S8to\5kO#ߵw:x!N۬[9e\߯P%b8ss^ak>"KPuFy;}C붣]g}:֍yƞ,1ynL|Zx"/vi~6JzMzTA:|99Os֛D''8zrc>O$pM3 Gpe5YS }y I} O w<ͭǹ‘y㽅:YrGqg9I.κf3{A>x W3&Ny:e/ O<};B_ O+oqg ;x}9w׸Xއre: -|J/<7}>q z%Ӄ O$|`]a[g~q"Wii7ڳ.-|@_~P }s ]Չ+vyTq~ԫ\N]i/}xb ߰'-<'lCӏcWwOZMK>u{A؜[xj}ߡ}:ksNT1W˯yD.'W"^-^_p.G3o =)uAȫ䟦?.F_x O?Y?Jlw {qqW?&rdŏ@_G -Н?hf%3#~ |7WߎNrӟ|ϙqUo_!W wy+|Fյkμ.'z_?o|yV8/C{)F:GO^`GVڇE7|c?N.Z:O0r4OQ]#\|>9g"m޳h<9J7i%C≽~yG|aǙ.ڇ+!qH?%{`'s\-}Ǻ|m\G+v.=:."`WX_룟Λ?Yoy#vx|zӳ݇f>)~Ɏ??fO8ώ[cY蝹뵾nΟn)ltV燊/f.ik[K4wk6 3kS/x7|pi~NcͧǑ-K[>•[,q=vu'pI]DF? %gOWz^j]®#}Jқw[{g; 77]g~-nŇxD՗Crʺ:Xze^I\aw%n1zGq=<3i/ɮ7;?넏^~R5[9SX?vuo`;_7>9~ŮُK=xN}u9e' w\xzo뾖z۶s>E3ȅ4A7x֗]g}wKY?_m~ɸs=]6'l~8&Nu[ܷ?d߼CD87W 7=w}Ԡ'UGH:e=qcoz 'z7Y?^}FNnRCܼ8]vSuC'g:l#-EUNEc>痮;v8y>V|E=Ѧg v<<,M] wڶ'Vx{?YG!S8_xl%OЗW~GO[Gt6Xzuy]~?ڮ߲LPxJO8װojⶡ s̓;_M성6s5ozZ_8A[{ ϥo7|ƞBy~BOٟ>lN;Gd{7GNˇ>$u`'WkWȁs=xj?!GQay'[.kZxs=|i[Z~9z<|!=HX'ϣns{7~觻 ]/&f]j~_KyNs}Nǫ9s'xٝi?5{֏</ߪr// n9W8k%vmȌVN}D~WQJ!z<~SE3mQc쭦;yz,{#8W ؏]7q˶p庎y ig4n8+{mSo: u~?g|Ke=/qUrs硋ya_MPxGiy~N{,|'qwvKnu֢?%7fp o7ynۑz߻S\Żة^ޏKg;q$msg'qNPEq>|ȗOo<~cW;[?qj<? !?Z׵]߭| ˾5n~^kּW|r?9﷟6v:sSx#g]}7_Y~nϯ57.pm!Sq^2ߎ4 ;A'5} x+?1O`'^ۊ >>cOŹ>[y6K'xzZbc\G/o|wzo%GyОg}%07׶+ь߿R|xh+<9~wq_ ~4tWSҟ7 {?fԑg[5_:ts`WYm\{&4D\sh?{zXۭpv`U_gOoTހ6#DK.G1_q Ky]yi~_>vx?7v϶)G7@Zo{'Fyݯ?Z׵E/k7Пw /Z3ڏ~O8y~8? C'|ֻWoMG~ym_|qg}G ^$g$( ߵͲO[j |vQ5.,~hOO5]99L_9`8 n۸mt{Rnγ=t}4_n=wtcG_1ud9M_&Oqgܟuz57?_ѕ'й/oyOcwq۬#8zVeOpyi?<_#yz:zh8+Y֙FOt0nNC>`?[W̺y wJgw息Б<9k'-{;o3ϕ\o?WU%1:6||p8~׺j}~ŵ;h=c~wt:湫}O.S7G8WYwn+9|{~|W+~urY_玝[gɯLKuy]2{'?ÎwÃj>:36>'k;>{O'|~ "GOt~G_81 }+~ VDW#[܁>򼖿}iƯO.ʏjǫ7|ԗOB?;:ZU=NuMzdo K?sܮw}~ɫ{km_p~a\ T'xpzuu?mf'za~k yK.?OmXy!Ib7=(.Hn''_A|/ZoZ/~Gp˿??Fs~џ(Č }~5_8F>'o얲o8w3kzȸ~h rx %;= %ziޛ=?Wk?ǡ)Ӻkxx)G?r*>7/`E}gC7m;,?x/{Z>鸠u⯠C.;b'|Է'~7rz~OWY wS*?Q wzu"?]}r6|nt<S}đ[M\兺1㳞2xI7KYW9x# Oμ9~pGOlS=D;,z/~X﷟Lgzz=ͧKjZ?駎O^ 9 3G4Ə#2놧izZ}CG!y Ogq;_#nƗQ)W~Óu0߼ ՌWMn_~uz柶+\^7'_O{}L>J ~wsyЌK̉,Cy?{g.õַG"7_z<_߫~w3a] yzB:/\kos.m_3qg>>y7O~+`m3uIc~vu0/~'zi'tg~=7W\]Dy>=ַ|Z?- GZ{J]ͯ9n?#.ºs}bKK(=NΫ}o8ysh)-DyQ<5O{+?:G>bG_?xo=$G_.S8_9-Ɠ<+ѩI_pӟ!vb=\!G>'nW\OpҸpe,~"W6|Wc~~ }~Kc })tkEƫy?w [⿫9ywޚ|pzmoyu|+}~䉶^׶{ߒE#8q&.1:U}t~<>zpƹSW.Gv陸¬>~Zuhҗ/MG?\e./\%;zK]wqG_Owv+}/o5zϖ+sZAOǎ~G}{sTN︡wnymgĿu:Qߗ:397l'?qSӗ_s]gw0<ͼv viE/8b}8eiAkr=8t`ݜWOJ] z߻^f~u[km/s]۸r=9CO3xՊ[zkb}S,q7ș 'c܌GC8O$v'nߛL?>{eW`6.]/qmk>o;~sGU7[ou RK~^ EGy~)᝿Mu/~܊[ܗ|E<:Yzyܛ<5Y]:]xE=xN//\‰(㥍'ׇ'z#SwP0SW;ߚ߂jx_Xv_pvi{p9\ ]i5Ⱦ|SU\. Q };lz>G?.:/KڮkK'3_O̓]o{<޳7O;9~뻟sN|{iFqtoM]/p\Ù8x)ĹNZng/s#nӏBۯ }Ə.P#}#ohkXikΟ=7Z:ן]m^6}Vk;;>OD?vu9?Wsua_59Ӳ/ɍ/S W2;;Znnnև%:@>#:oYT΍?x =| {So:f?_|󯍣][+m?ZոZX˓o8I?s=j}/&Ng~dGEХœWsOуDI+3qWq®R}pYQַՓX~oJ5Uk|mEiW's~COoc;ֶ< _:[nGue?.xuq}}޴5]?{>'߾O>ͣ;Gqm]襖-Wr:vU^@y۶^[o2ֿMg륵N~iĸh&~5qn{n_t}{?_:~>}˽/꽯~ :ݎKKߛ|+>]ڮ\V;te/Ⳟ:t ~W.?m?c ?=UǓ?*o'7t赡+CԿ63گ~=uZ|5vБ}&Ƚ_;~y['ږ7U?Z_wu3˕l{m!sly?ޛ|ڊDu9zkǟ_H>oK=đ{G_ϋLL&9λjyO}Ưty΃>ωKCo쟏ϯǟ8zso{O{#ww{G}?:Gs;a?8чsۑ[~@?33_vN 9{[W)?Oۮ}}E}0׺~xno-6b\+:~ZҮ9Ϻλ~v!w<'MZڥ^:+?^P[)pz~wq.Fg=]޿C/;9޳ګ7=뼯W[^ɻrOg+O?[O?xW? gbk,.~J!y;3n=L{(XlqYq}x)y|oMi}ǟ/:%"ڷ~yL)8S:d_N>17ok'jR[}R8t%8^ɤ4GJMT_#G28qB)3%6( NiRקDKR;S;ǟ=z?=}WO>G>xō]uVvf<+Jve>8Jϻ_erQA*vVlo{Kוpv *:)-{E( }{v)wxo裚WoyRzy{k*u5._-;m1߾VF8kx~?D>n_nbkmW[y[MV-w |j>{W} 'M߻un<7~m;Z?_4?>26v#R=)͞Ruuty[%j/v-^ v;6lƾmc0hٗݾO>W̱OҎΌ)͎:Ӿ'̫+|үwdJ>5re^~ptW:9rmw_V|J-#N\/n7qPJ}OJ u.ejsHs~޴s'I_'#;tK /w~En1ޑwzgaI֗ϖNJg^mz/?8U]r9z|lA'roxR|}ok8v+&[:Z V;o[1Gb x5 ON>:.b+ gJv"=l|U;<.V ꑭ,ɍ7rGG|[<ߞ-Z3o<ѣc^lyj]i[X .qS#?Zl3|r=>)9`${_qTW*~?;z S/~u='yvK7CW)|hNgId3܎٥v+nZ7^c=^{)f-Wj\KNʯ M;P ;d侣 ؇K灍KGYYW }g'Oi' Z'w=9]z+t3mۙZV!1|9)ANG7|1GgE&>xxI~A~;C2qQ<y/|ʩ[6.AG/<#̣{i# OK}jgzˮvu{zw?w~3ζc3_cȎ3=8y;xRQp _⌑Gɹs3_9pj5W[Yo|A/~~ȅwb}n+9؁ ~4r+z{͟/o=)eŋnzkq<y+م8hoxR7?L|qD"G+aĵڏەQv^@oMܾ4=T?}+rCu|ocɟUK[Ǜ䓸s>x/|b Z赉ӑ;FPQQ::O?^7{o+q/{y~Pn]= > N?/ɪ/f$1zeͼ| 87)E?bAWdWz:ёbp- qO>9r:n9zEި7|xMR!%SzHݤ /ͩk{s%+pˮoO!:Ʊc5'T\#v!^EA>Ћ^4~{/|j?=>}ܯ>ӵ u\Abև\7aϊ'z 3h<_*M>< G(pu$/:ڏCvhZz M%GLoKEGT|,uSP(p:c&__B.F/wQv~;K<_z׮߃O}#@7wաL\mW+Cr'=9MZm;Vڃ{>m{!]ϳKm5}=@}%~ 죲]H~[5AKϛ#o$طEw㏝0mnU7ݾW͋MH6yc=gC)̸yfU'wFgٗ )>+jXr-r{7ԳV=V)O+~i~rO݇_O6y{x]7쌷/cW-^r4]Ձo2_aǾ7>&O;qnncOyF^vonoxa o'}cw~3]='y" ?:M>ugn_|>H-[; 'ޘ>v ]1h?:ع?~JЇJ\mT7:8=d?9G N#ݲt˪iYYe5jDdF20paa2G D !уh错GFj}vy^Qkvmygo{W݇4tA=Or`ɿ_z=@Nމs&N!."N|~ ~>;U8'E 9_+x93vܥd繞u\H\93:‹Ey;>ԒֿqF|oUsS\]W%*/c'ij=}oX.2zIޣxbu_N5yY?y9#s C| }?Cg}|v<=b?mՓg7zM|gx={3|ygsW-ڗ?~Z>В^k?ݷoom/U/E܅Ozi!"|0.v:,盩GAwzw}8&\{ܓߧ}O[iۜ@amO>~Î~m<{˺7mUsI?GǎGyAk:SsWqNi=cs`ߐCQyFnO3z}Fzz?=Os .w._c=ǟd}1^e:l*{`\?Okk}磸YʺX?r":]?rys.x(u_[f' :OO?=.Oq&yo/fvy{ki~_b?oMo!}+G}}p:7'݅'{YG늿|Ou\{ݱzjE_܅]gWKf_#n;>i>ߟy&<s3٥rXϥ۬~~[-,?܃+h%O~\O>v_W9ɣO3\l^n).tܣWH~qݾ:e7,wx?݂N[bM[:A"7^'Qm?3w^غKv}$O3yz-?ڷ۝W=nM8;ﯽoE8?)8ʮ"K?_r<'|OߺN_kS۸AOpy/>7ѯ:s<տ4v<YN=>#o.sw܁+r-z?'<`״z槮ӟ|a^ܺ4m>~\g|?|e {O?coOt8ԯú٥k_z 'ky>=A>qwNu署>4x=t$+OQzSNl7s>>ov^׾p0#ˋ5k㳎6SՉ#Y#r`ޡ=]ߟ1~!QkzrZo!>xt={W'ۚ88ȑN?s]In;'$?1ŗN ޖN~صioKvT[#mw||n 5痲V?N6vלбyiG{igoK ./9\9b܏Ͻ'ܺd%v[xv߻B }+őp43>oittHo#}gKzm)MtFׯee<%O/g ϫ/{;wz܈Oww_u[[z 艗ϼZuǑu3|G~:#ߛǧ}obl̟)\Uz㞿FNM7$ zcO r>Q}:¼7>p:y|_tJ|}=~W'vp-Qdn'^x?}k{ٟvU ܱW|9~W"S?q_]E? 8qWnؿ6~C[m^{y9]Σ87cɯ\ W ?~="71|E3n'׉GD/u.D\w?yjn ?ՁGg!Nҿ8KyO׭O.n]_.^{o4tn]ƻv_{ڵ{;=N{|E'x\/x":r?z(3+<Ѝ脿^[ yu *\移/J>W}LĥGO7SΡÏk׏@ 6썽ʾH=kf)ā/E>Pz{8f[|$O7OpCNv_ Q{>q3ީWfj=]5{k3>d7d[~'ص1 sEV\OcXq>qo´/ǽ!/"!.r ܒ/>SrS2=).uwWp=9Eq=w=gAxi|Rnp: ݛ~Jqot91u?nsQ~O"[tO;<<;ηx FN:~ ~ h|xf<w6o[y9\ݲ[K|=hϹijݿ} tEܟu9vxex~ġ/io~JEeO8_OxB8I Oe?Wں+>O]>Z?_Y徏>>%]!uY~Gu{wN?}Iܝ/Ͻ5-'቟9q y&z='BC-^ݡ"O}Կ׎.)b:gnyy/~ޏi\|['mC=-yO^WKœ>O&^,|+fV}?']O}yZrLrg=.:ig/|w}Q\pG+-ێ'$Mr}|swjeczÓ_݇[{^-#`/s|3xzDz:v~ WW$zq<㦟^:oB\w.Ly_T\?uz齏^z݌z㋏˿*xor|߷7}jm3SwFze󧧾sWA^~#;.~>vχm9/iUzW[s[gV oqu'y\un^s}|n>\S>*=w?'~aW//[3͎/zuA9S=ե>~,:֯}sFϊ79@dέw߇"O+1ҸD8.?= Wwg\y"^H />:U%=>;WNp}`7Gp|EwY[^}ޞ6ov|O\=USyu)O~ReW?u~\3w\ќf?\yoP '_z5 \f'In*>i7=7!uo}ĝxӍ/6ϛTO|^ߋ+zO&}kg7֝<Z+4^:x7x~Xw/>Hn\:'7SOSp}d-K|ʻ}q֓bߗ~~ͧSY`os{yzqR~+ުg~g;;7D>yxZ3nsO08GjW|{~xҿ>_7xoqKy|F' _{z~]3eO[m{8Hs[SSǗ~.μduT5-;@pt{ ?|a]\/GUw¯Go^:oN>E.5W=θz~?-~l=p zzz[XG|>uGv͗=ΣwNg~ߜ6H~!8G?YqtVZ}M^mk[Zv=yΗ(ܧx)}.?ᓏZ]g6tU8WZ2ǜocι4/_Ο3'w?<7~& u"NGϳNa{>㮞]<͹[O[otēvp=̝LV4> ؏K_(;!ucנ}ho}*w_rRo:'jKO{#-{>s^f]:͓.|>c^?jn*~,G~\OӾi1]3v$8]%鄧\<9;"G){Fxs[og?\y;kMow/?tnMNε'-'W%o$~OKjOOw|x:#jUS|zq1%xڣxd+|>CW~ߥqOD/xJfKY}BW'yqE/ O7's{z箽8޹=zy''zteeu9Ofc;{>@ 7./wľW'=vyF gi)/q+zE?jΛ^jk7z#\m>_F^]/Ӿ@^^7;{3ޫ񌗽wS=wC+2.'$~K6cݙ&Sr#{_8 N^qpޚۇˇurmsŗ[?C<ﭻБ Au.Þ!}&t3sD|; /uJi7Y;ܾo})rVV<.?=!{k"uEc:q"b~&:ڧVf~佘L~szL>Yǃ'z(s'9k ჽAN{38׽ip/ś\mw'mta6K?4&5 Ʃ“yOz~kG:l1^^ANx/O?y72Yy7I>OƾxzxĩU/O}=ǐ_G<e2r~G!ث|z|Oh|+u/+λ@k3?uŗ?l}ic}iC]Or ߗ.got}\CxbG\)?)^7CG~j#_ql6e7h\Yq6/ɾï߱cу|oGl=3e}>\`Nuo>ҡL1~\/qw{cr\t9`|L?5i}@u ֧rX>$G P~Aqw>c?+6%O2q+Kob3'ܗG?pd}?υ##]:?g _Xxf_ ]A>oѨ'{4Qvl֛ ^hr|g"oFvؑ=7Sͳѝ]BN'"o/:[@i/z~=Q||un{3tϋ=/0uz3^=N+:x?3tewΥ'Kկd_#\k3/v̊O4G{&^~m}кnl#>WaϚvϡt5 ~87۴c٩\ z_-'֭>?y|+Qjwŵ g~9Ef W:oԍQs.8t0\89FOz"v\7%T:Nr8[ؼQqݿ] <'pk<-N ƅmLN|/k{~Q-jT]{ϊ'߭}_\!Wy- yd}>ٍ5d_XW>zh{[op<}i}~JEf8?79Ɵc#>?j׿7n9 _˾ʽK]'~qGqb?{=pG[_n:Y7{fwz3O?yaS'{*6^7ijav:.+ZzW?SS랋'8xϸtWÏ%˯֗ #?㶟w\x[<ү=ط~Bu__sl߻1 Omq6O^_\ [y/mtfT)^NlSM/;Q>\oqK? uxSx|[̯q(PuL/|l{Y7wzyo@<_ 78u[l:uW <ȑ3G+v"}KW׮sٕ{f~w?qI9T\zg='.'Oց$>{||qZ>Ձ/t`uc׉{?_O֯!uַu=osN%'V?}&w:w?esO97oq&nL}~̣Swk<5+h?:ic'4v~<֡|ჿ+Wcoܢ'zn<PK<GcO֓I~—<=ԍ5~<8};oG(._~<'x<}'mz\7708fAyYrQO"FO^O燝4kk'>_poyWW¯o==_<1>u7.ćՓ~-x&Ͽousk+>gzB|b'q|Ax'7y^겻Vm0"G >^U<ܽ{ug߲=ˑ.l;u?º[ow컶ޗ'_#k\d/ײzn^os(.'NwZWďW1}㩭Ux]c{ϭuI>K_cOω˭'~;]>g/Ʒ'o~nB=x{1'U_}^ O˗?z?$;\CgOGGvR'U{s''I/']ޥ?U ɓWǴ꙼`E}Z GQW#?8-zN~'7x"J炧 Oro=^FO}p? wK:?//eÿ_3_oh}g|/utkqo8}6_2t }XGgrrs>3.;߉scʼn=|<+m1qo<'EO^"7}1eׇ,.˹!ٷx;s$7.7d}y<rtSn=&%w|.7:}1b5}pƏ#~o߯:C-CL~˾)ؗ7n:Oj_֙?g}xnU';>lzC|ߏ=vWK&-Z>l|xys/v1yEmSջه8 OK÷q+ZGuoGc ^>峏K?^@/؟WL]9O<9ߍ W{߾gV3VȾX|.csOpο#z}o܌Cڿb|xq7_N>\G~/?4>GǍ??+O?x Omy}''\ΆO~Cp 9k_z9N K~?qzDG7G5oR\G~Mnqf~?ƾf'~K=/xb`{OzR$w S~({s/p <ϣ'{3 '?j|}W|[>z_}yA$_/6^\vuA8(%!ċs r~~}=Ooޛ|%4uF:Bܓ+ߊ/Ө3G]?l-F,]WǢN/BwzK\&g=Gu%.8gtASǍLwFN飏tWO+^~BP;@WoV)-'~8]7.4^?y˹'<%O\Fѣo悳v=DQ(;w/|I֏_q~`׏sW'K7W_y3t?'?sG7< .O.īic$wW2c/gO9gu3ة8]}Ϡgތb}+ݣءv}>ucQ@ΰOY##ɓk:npY~=O|>X=0ݩnNW>kcz|.s6^Q{`UW^_Ⱦ'C&OVS㋬Wq"o]n֧v^os3+սGy`X _Sc,>[~cߚ;=#xD[D J\wFO9 _/[{7y<}mAʷ^6|zc7_~kuK|ZWY/z>?uͳ7w߸:;'R7-C]#zLΫ'ZD:hk߇ 9yK^>q:t;jY>rt=y_Cq+/ԕ`ߨ#'{y?Gz[KW?oPOΞv8v=ng_okU;7OO~n  I+q}|A<n^3>i<߹u; i8*\>&==}y32/~?^qn|Ï˞/nX}-ߜ7:\G>z>zoD)+/ǎwru~~Ƕ;v .#@>ma͞@wy7 Oې-wƍ9->^|.~υ?lD<߱|~pxw\[|t5>xZnj_iZG߃_r{rqE/O|Cs8z,u~ǾxͼՇO=~Jϱ>??ꍮ_˯>[/u%Oޏ5ݩŏmE$'}_w^wF ;?tv?G?zWկٯܟ}w~}Sm;r |VY}~zǏS侽^;u({y;>绯-0$_sNBSqSI'w_>'~\ףּN/:ou켵wzݓc~}~κ<6':q[ts+O;s|7ows ?JsS}>WGiuO==W.'rg=t!u>8;wȽr~ O'zOwg=vm]:uQN9[VӶS/gEgvwg27\%Aꊜ}.u>;H:luՋ{Ci;~ʧsSi_uxw.Ϻg몦y~OocOho_PnT0Wm]xõﻟԶ=JסVo1/ywE=o>oi?Oux;~uuRo?#^=);4zȾH)~Bl?Ӷ~_s|h[W>i޺/ پ u }8|ӿ痏Nt=9l|}i ٟ18W3?ypy ۗqz|fھY?{l;吏s:^ώs|v'՗fv_^6yq}3Uv}Z_ڙožrBk}|O~[炧? =ST^ei9-}ϿO|H-8v}q㮿5~?}'jk~}Z˺:GKϏKޯWy[-9/?|=G_Es74n"`ݱ3z:߳{tSuzT\ֱ?|(vxx<;M;<]OX*z箶^6}GnN?3YGz;˸ڡCov=}ߍ+[;iioOױ|'H~ao'<;)m#ߊǕKEZ?ʉȿ彮zzs~}\?ᇟu쾍GNs=jY8|× ~GGNRJϹ9X<:>^|^9h_ށǓ]_?\>~z/.~|ƏGq'zG>d;NtŴo?g]?Aѓ=*~k>tyߏ'<5j'NO`K:*mq|ʟ_?lbwu}vhA/;倿ʑgzy(cBwX_3rvN<' /}w*/qr̓'?Fiq_y ]$OTϝI=5x'cx5`M&NCֳz܂KG/#k_}rz|Ou2>cqQ綴:O{#/ʮ(.syGu^dqZ%z/C^' ?{ϳ1p LN;|!^'rX}'p'[OvΝqkJt8;%` D? }7θDunckϓ7χͮ=忛z#<=ixJ{{ή=_kX=2w<*z 8o?O?v8[>}/D7ߊF'lynun>vI>nk=8-yok~ <75ټǍշ2y\l7z0e:߳E{>\K=&^r߽Ci#z~?w* nZH_YߊP^Y3zuߊ o`pq?zy0_{%q?x"WaVnƾx䐸&.8}'K[ߣ}{W3/<o ^qxjG{׿]yeʼez=%n^{Oz{K Zq{;,]{ߨ~~ᢷSM?)6YG|}Q<|h~{uq4t0/-yCx |'?<6/7SlYo}`]bU7.qԏz; 7[O1Ƶz$~yf~Ƿ!z}oG/[= '_ҟG@gWk mSnE:ṇy]z?~#rN/ftU?7_\TO%{­QC#GjfW?^JzuWvf#+u=}79ۼw74az_O=e k_ٹ-58/LJ?-}ɭkSh^Ҳo_TO7ߒݗTuеo=.֝d'msߞ?.#%+NŸ/}s?.q{}Z<]jqsч>oqXo8>=< ;lrk#מ3zkލ뜣ir{㙩ãy7Mɋ=)u~d88/vq7~_=t8~:at~bTؗ'@Cgt#i+/u ~fG 3;97O?kW??Z|_с\ə명+mq{n{Ǯڼ?;J^++\y.9yQۼg'z]ѻ֕]}pTkݧܺ{.Aޫ[zs]Il|oR'/y6놾2{r][Gg_;x2>ӫu\Nqƽks}t#1aƧ|ֆ/<7<: 6ur\@~ ?> <7^K~| @nO·Z<qxsfu#~#p8Q<;SK힏j~Yx3$/?z79\׸sw[Ѹ??w-uo=ofl<*qȫp=/uB~v&?]}#fǷ~SlF=C Ư>?=_2{gKl|gxD|8OE/׾ؼv<#~簻 ;F'v {`?KCY](}2כ/OGN\̞?۝ zi>Uk;ɼGF>9vqK=1'~9_=+O7z֭񔼌8|w[yda'~}_ħ젍^̹/ks=ys_Ow^QREwIyTiWQj*jݞ|j/sg^NV~~ȥކ$=t/∗sOU>3Îx)yugJcpGm#lF.<1f^[/88ZsOWNiU\_uO> ;/俎vhpg֯\#*l\~=m: CO,(.j^߼j$z+zvq~+GO~==pk?y |K?]{&7{Ggy@“55ojHZ`s?Yg2竟6t~_i~AoN73%_;߼Yv</_^埾7_.j/g֟8k=z.o}u?=zUA>u3?B{ں͉' l^0@q\jp[wI{8]KuW\Ώy,##mrjoC'ycտ*z_tSネgo.qr]sQ^C7ۺ' yËzmxS-^+޶juW|]ߋy{?K/>x3Kwg^ƅ.]8zR<ßpvvN={g*nG#뵟ap>}oߣm=G_#'x#f(s^^]\wG%Dn/RVߚs_ݹ<͛BgyG윖1ę\GjWeP~?vXgm^ld;}v9F۟x'~[-r}uě199o*/ǒջTbOO;m w.=8ĥNμ RX|]_ɟk }_K=/r>]{o/Ͼq+lN-:#=ݼ=o{ʗ[>Nq\<+^ O/wr~n:=1)DN6Lzs6IS/f>Y?[Gͣw.J}Q⇫'˹r]Y|xjޘ'ӏǮ9]I.iPg+N w?NSv#~I[;oH=4#u\=7DRgX'Vvq6f|?{/GG<џ.Os&>u+YSˮwcaiKo~:y0tE#>nRID~k~(/k}x.{_f;<ɯJB܅^6gW<;>쾥qw}npK4ÉW ^SW< ]3O ։|zmvINه~jnȻOʗ^[wOm0Q?Eޓ'>Y}r';9{º?`اs n!{=}D2=W>/3޸N>}G< 2ү:$uїٻ֡IFw߲?9M_z~4\.?E>CNg=BGq5zH|TtdYGt/T^.|ڧgT{sW?Ӷ7LE"ϫ]??VӺh=^i{7{ ?8镛i?!kG蝞g~+F}K^C?Fh#FO/5^/ǭ˸nK<~|I]u5~#?xΫ9Ʊ0և_O젭G|+׹ct_liߑ[wG<+}+f]g_5?xx鐇mOt5vwYW9xzSz'z:/t}!^:>T~kÞ7pvVqqtS_^z._.Nz}Q]7~ }#͍Qx6.Iͥ.5i싙y4_q*y^젻×:]}\<ͭ~;`W}e^{s_jR~O]qVސ?I Ogi퍻r_rK=/Ɠ]_)E pxJ]t>|Y׃w~9%ы~}ZvWj/ޭ^<wK]i?˿=O?ɻ>Nqr#~ucϡ%yc?>&ЇyהNɾ=+l\ۦG>Y`Qw3'm#Kwz}~pc'?碇"7OxWWOWg^_^TzBv? GaO9rV/j}^zm\-qƑK}.<ƙy/Nngexl[ܵm]uuxs oup~h wyY;tҟ'~B'o?O~{|?ľu`Sɶ9Sܧ~OgލGd4zoj|֡v:,^}8=Nx:ũ,x.=ƛэϵ~1qx/|%?vGO9s){90Y>d>þKG\ o7l淝ӥ?COϻQxi'9j|]];s n[?u;\u}6}'ۧ):ݧ;N*|{[wد7kOzL}{ҿGwgQ9uO.|3䂧{o:<5swđjCi oϺh١cGs}|YxNi=qtAw 9 _uWo~% 8%;ZĞC'=ǿ:S}Qڭ[]y_:¿w c꩓v-N7l:\4 ޤv~< [G!.7p%O~>+5^W_~\<\ ҥnFx:#ߑ3m[{U_'|wH{'N͊'u_.y;y=(K)ݷ)j=zu_< >m{Nח?;Rr_y|>9P>K?~Otx*u}}eoỜ8O oGzn秿͟Lr4t#_/^ys<~upTyuJxɓ־>cv}7QЍ'Oy<y@Nܸϭ; ynG]_;/6^{-r^z7~Wx<;i~{ y?xFU֮o='u}OC/Wb7=>:}N|vxNsC/v=R]eo~xNq?}ٸ OƱo~=<ånuӴ=#Sϋ(cWXr~\ߣg=>~~\z=e8%N>!sW3]<Ǧ_C 'g{ X<=~k?[OO՝ER6~EYwvGj70a1{‡Zyĕλ!re@׹ýoiS{[ޗzzj4W5o]j}H|¾O?с|'t CG(vO~E&R>|'xb/BKU\jǩ>g޻0tcw>[Qܕz;u :?3`w3.~n?WB7{ڑ IqTq}7|}qӾǍ}V<I{{_4rx:*rzt=߹_#'>uU?Oÿ[ty;Ŀu㷱wO>GC_q?q=X}zx7W$ꩵNxr]K:]f֎uЭ~Pw:ε3{cV?};?˳~?=9|?5/AnOs~K/+Οϝ?,r>9i/IpxJk\!a[O]mɏ:5oC7oFY^.?ݏ/u{+GuN_C}{M/~9{/e͑k93>PzrLb}UV߮m>tW[yh|~xy,~;gG9:O>߮ѩS7Swn]dz˟OB z^O-𧳮}7TCu ksOmzn~~:vSޟWc鄣uC~Ѕm=Oߋ^=cs[y:?'<7зW'3[9xG f_ŷ\g~:达߁/Zq>vt{q;t{N[/Y\A\پC}mޞO>UW/(C9y>x<:)4n O~4r~ø?~#S@Ogz:q oïOk'f@tc?>[?z}{=ϱD|O<.%iɡmm]u'sS8^}ÿ.r7}w&Eξ]2nW_ 9x~:U_.Mcz!8ܼ=@5?mַkws{#ߪӅSᄧ{kЋ|/p=_ƿq {〗F K>y5>I=x"?~}?'qF~/=Gc7oq C'V ?j{}6O&7vx\>ȝCSW-GL~-]?c'-s3_c~"ݲ955K^__ڡLxo)S']V/v?|}&8t/LzqKq[/}Oko{3>z]'vƧauovU7߅oSg_v:Kk= >y1_rie-=:?z&u&'g޸:%? { k۬%VO6y x/5ݟK?OA>]J}2˩?yŅ|KՋ7vƥ>Og^&G\#.N>?\m+.e[21Y8_g=F/K';Zܩ|u{5'1o1n}i_qw!]t׋؏#?aNq8vO 5P=y%s?yO.3/8i~T[b[Kh_qGŞK3{ӼWC?Y;{7njkap'݈ٝ.qS#~|-ߴ^u۴Oꑪ?\ =|د-6u{~_-<6nT39{Soky/Md.y'"v>̋ʬ񵾰|yi7N8un]&>cgc|E3e@4}g=˻-MYrSx~Z<ݓgÿ/~ɬӟκ>"/ϾчpD8㨇s#f}3٧w(bف[w%1mk]:nڮ;Ɵ>"7wzoO?rwݸ_ݡ79:$a<ӞCOΞqo>5L?GߪR+nG(?v >).w}C 9:65"OiK-YÅ:#qK}*ܦvK[g%/6O=vme#놯_|nKɸҊ|<[7c_K[?t֕ޗ|$}u{Kgg<@ή<߷>KD^'h}c<8Y?8o#6/okiͼ,ۓWÿovfqT虱\/jc0xѓҺ).\:㣏s[z u9g^}p`LT7uC?\q< oDK~סG(<><9gfOokaOz>!gqtotm.z ~͵6.uIwM<]?b'/jL }l?>v`G/~b]Q9m]qpo;j~ls躸!wf/ƛfoT<WnzwpNO+,_S^7RnG~ľ#}Ox?,_"\Nkv;_p9|[s3듉#yPpǬ{R3rvڋs=0x{y7oF?yuoRI~^䛻_r7ݍjw}{<8hޮuQ=^2Gv+=azAQGy/v>ⷵ}Нž"=1v~33%v_W~KjOY{|[ܽz1{%ГC >˾cOSţ}{9zXg o/Ӈ;OtRGzy?s|{W^֮j<> =aę}O^#pܺs3- ͸o.|ݸ@ #RvB뛋|c8yCtʳ|=Z<]O,^rNvzSsvB`:/G;/ }]_t[|%0՟O弗gZ6ϡOC㑟޸إ/=C#+sϦ{<;rx1߯N(q3vK6Q=~!C?#{N^t{ۼG {Eqū|:75?Owub[/NN{-xRlhЙǯw/g%xLC ^+/1IO67_?vgwO\|6^:ꗲC3hv(|mG≽7'8n'2&^韗y\]ޣw9a=z^b[{jHKsc=>_=o~]~]~ꥉxb}?3Aϭ=Jn$qKUg}7SD>;.r\:/WpA>{8G31wU|甈 _1菍5>=Qk!g7~%xs#{|6O O?%uAo:J##b7Zozaug\;޺6}߆}x}{9S7>7Us[iZ(nO?cw8* '#~xvƯ_[7ύS$o>3獃}6~7 Sc;vr~F=~:W r"W_Q?rG|Fɸj~v@UKvӆ/7_wSO{y=Ϸ揟J~ΌKB⇝ǝ/5^N['w|OI.}޹9U<}ٗtx7~BʑڱihU:גn|_sX[g_nTGN񳟍[j[٫>>|߃K犍ޤXyZ8ݎ9򂽷{s]̗?nkkO/'?=;_p ׸i#vt;ڲ>3m}Q//?gyzOn'y:9{8ֵG+/8߳<'qu'<nì6|~T!f"!Owhr#p쫍LCsK_%g|}ؼ790㦏*7Ie*w;#f|_S 7̓-sˍ{֥݉\;k=~>Br?F^7%6?1Ɵ/z;}zk|'H]{vq3 l=s Szx?Y\}VJOՏ'K-?vݙ'>R,;c^Z.=E{{]M@|>mܒCX6Lu9Oޯ?^33 ~Pi)8;;qZ릷#vzU,>GOyppkɇ'{rƞ[>Gk"o]{g] ]K𳸙8y&~_{>Ymwynasa 7oy=ag5.GW8/owj3.>=O?q&OA}guwQ5w_Ti||}_Z:Gxu[<8/<|km|&5P^m Cc-v:I~WOVY|U\|\GO۲̷|w{tza|Oikgf%.v}[<߿}O|פ6O>׆?~OO??ǃmMG'}m?\`~ֺn_ÿlߑCs{Zm<;}=?粫Y>ϾWwqwouA[;1g~##N.Gz_<~:+~79cxߟOn~y Oo[h=jjjjj*O}~}~q_gjuO.7jG?.zO=ϻ{i8{3q_O6_\sy#m\\97jɃ|uh'j\yؿ>=q>)Z_W{!Xȭ8}ʙʭn~iڥI͋Npom?/m~?~4ur?G?z[ׇ}V]z"p9z4ih^;i{So =~Je?}/c݇s^ޟ5>g^{۾>{JϺxdgÿo?~9'=3Z72C;^};n=xsnS:ֱݼ|7WU:nT=><ՋW3?8o]wynunTgz}|Ox?<3'}霷On7'm/zqi/qӾ_×Ksq>gg@}IYgЧ;x|⣮~0rs<50_K>CtΥ}o?OG?l\rnxܬ oe]W5}^f3>{{kr^_kO?UCA>*O3OyqG_\?ekG̓ OYʭ8 U{zm_z띑ە[<~op'ÿm/wKI-yF;}mn/<|VO+Uv+<}pC8>ut|yӚuO}d6~;~OzԼ`W:O?Z;ɕߵQ[x|qo#q#"t"n/uړW{_~7N3K'\_#nd?=d_O'gwJΛzg=yQ;u%̯v?G~'8E'|V<ڿ8Pqw=G?~'~_͗z%7\G%.z<~zck@8F#o<2p/O?9f>χ#;/i|is=~/|cv~aן\{98B?s\/߸8q%N+C0IђrQ߲8Qܥk[>>q>'x'5t:b罏E.U۸\~f_vzOG~ ^];xQO9v4| 簣/8u/#O>5q?}W}5~䇙G-ܸ߸OoO'|gCO=?u ~~p0ٸ//OG: ч/\3&O:WyެqBk#q<*=\^F8p=F>;7jg߻=Z?zӶ뵓jUO!_ޝu9g/|S08!uw)?/b\W:#v~?q=3y:f8u 'GGvyq37“uoY{I֯x{)gL`#G|Q￝=\3NNЍ}u24gя~w{{k<?ps>מNek<=ON܁?Bx1>4t#0߷ѭ~K<Ňm>}: ]7Ok{Grx:8n'ra+:79׺t;gSw~~e`G^}:3N?O5o} 5q顓R?N^x~?|3?9]b=8|V܉{'<*㋑{:X/ ~\W`ٸ΍~8D~~qͷ~s~4%Ž'>'/x1rxз5+WT*ۺ?g2tq1V՗٫A.?uD5ַ9h2|<~\jpe~wow[ 1։Ei~ye׾o>u$i|aρsKn'sD+_]w+>{SSި=o;[Og̃s:;?j|F/<}2~ rb˟×};y/>HϼQz6?Љ}'EN߹[=[йb'W|쪏~[IC:3Ay=hHm4z=:#,(o^:V_(3|iZz>f~~χ62v\dK΁<ӓ {zZ/"œqf|z|>.opsog8?cw'/կu=/>}Rw>ߓ_W˯+ӡ?w֬#cum᫕C'[si?:G/oz̛~GW{8oo['Ǭiv{?r(z_ɿ}=uV_kęWWv!wWs]qw^qm?|xRorox=yg#ַZt/#SZj֕\{no}S/'n?:K=| X{P/~'.u͏Ǟjkй8#WO~?Y9x:^C|N~OxX5cG3|o֑|ֶef}ƣӭw+]?_:7N\m~yzƹsFFCw{yӇKܵ'w9wqs;c zsg1,ZGv|sx@Wr%{=IndQGo7/Dz6~t\t_!:gu_ _ɟ]G?z9zz^$[QEOiĉC4 qSO"W7Y_MkoG7nQ~>I=EO'zS_~aM<)#Cl=0>|Mye?օŽ_ C(rwuO'Ǭ<)w9?&&>`]͋?῍E8+Iȩ}gρ\\y3^xW\k48goŃyѷOr3>N|7 Ѿokƻ~3>9mOOOu(!3]= OKO_Ƶt֟]!?k׺_|dLoغp8rqZ[Ox Qݲܬ}׀Gtiވ_Qhg,&.`H^K'|o7X8? w~ qgxT.}G촭{{3_k y`o=ߠ:Z=|tO]l>'+n#~x/HCi G~m}wMpDU4?B•yU/ =Mγo'򣖯r>=z'?0˯~x #Olx78ި''[ruHiė9tG?|ήJ9Nq>n~8%P<詹v=sǮh {|fq'.zl|%^y<7g[> ɟK߇oS{&c.=kك'['JC߻cՎ_c-g#8x+R{bGl8%Aq庿7m.sWwdk9 nf#NǂWfxzXS9Љ? 擱3i:v!9[`cȳo&w{Ҹ[c|zKR)w?_ W<C߭>ͧcrn3 H=ҟޙuZ'''?y!_<_ݏ*~]f=?'z}gM~mN=x~T:3=.עoO<1WE|K\?-=`.:5׎o룬=oG}_iO$O>9:~*{()Oi~“Ql?WG<~ϸ G Or~%e.=os#d"1'zruuzޤC4P>GqyF?| 9n~ct[mq oꉗ/W'm}\o}Ƚ=74>x 2|l^ O[9c1~y}8zL<ѿ/,ۍGεs\‰ϧ7>r?\{[?=qx?a?鴞KO{~;f7U}ݷuEu})R=En}fgkzQ_<9,l/uD2~ױ{?:l)zx磷^g47KoU翕l܏o^cm]#<'χD.<=:LG_?jS~xuƣۺ=7{eOuԝx9xd}ĥXgx; +DGgя? kOOs?YaE+x9##zJ眖G:|#Wg܋'[Gٛ'4ylL2go} _ As=ߵy ov<=kzi*zY:C%<_zZ<9삧'A7ߍ9}n|Y*;[9>r}Sud߭+Ћ}MO0 _,=op^qЗsŸ>  g;s78be־oۗ mD/GϞ;f\+?󞃞|%Ȏxix3 ~=l>&~gK<=gmyO|/q6z@\#;]̣O>a{ɟor'z~86^~v)6κ繑Gs3.S|Ͼw#֟qua|뗑=oIys{m'Y?/$OsZߛ:ችMG,g䖺=/R]ᢗ"wO+^xںc+qW ׬Ƕ5-W/{ߎt9P߲dy ͧ&|]yO^srrS~?<}~=O_Oeٟ<<O͛O}S촋6._9xav vKBI;xb<+>qSƵD.=+g!}RyY\@ˬ//;IƓ}>pa!q}m_~ٸNzXGm ǎh{>#]|G]7y_RrW?:q+wk/s>S뎻#xj֏췸u|Y;$oxZ\տ^ŧ+?.ǥwu '{x#'~.>7-~'5cy{ ^}[#<);iR·Dqߜ%>~j{OѿG*ʭ'Qs#w_@fGX~Sڞ+/u3yZ|m$_#n]wSw3/:v=Nv{{ꇲOu#ᛉq_;N}xVƿnWV=ߘu!㪷eu?V\}$M_ʾu֯;!qKvCt<գR7#/$U;_ڶn}:kӿ:7N?N;^yЗj=9k%ni5q@|rޗv_g݅\ӳ'I}~~~.~Ѻmmպ78/oaw }ˡ{O<w?/?W44+s>?ŸS՞уD_:켁ڬf_qk:ykgu\WxR>a6A.د6=7<%oW98BL=ӿ<I}Tծ+|_v?nf/z WsCAw]BS}%h[/z~je; ?-.‡:|E՞v/qkO8>hٸo<+G'u7c6ŮW}Q~[};C]淬T~+<ծwB`⚟;~{f<)C|ԣNK~l;|//{⬓d}?vwn9?.섍E~ |O1;rΉ|.ܠ[݆O]/.oc_q>(]>w~az͸;|o}֢ |쾝n'_bY#6wdkߣV/{m'z_!9jKrz,O?惿?xYTq':O:뭮W޲r<Cx7.z;/OIm\sw|5jѫ*NX֒W/ot_;giK9y;Թ*'x_.ܺݟ3ߝsS-^3-f]E?3|dnYb5E+Sb ƣй|ù蟽~GgSg?݉W:t}κhѧY5zk/kCf$|y&}z6uc=OΥt֏\Q o=_g?C'Y}℟Z<~(G/ɇw{|a|/. ]/x≝=z: X4u#'=3q*GymuN?7ߣ̮fGg{\'r=_|S|>c7s:d˺}2j |<폸[rywyO?|G^'rSNɎzU/P,='ϵ?g^lh|;ƫ_{7߉!ww塮֑}ث=*_l{[C~?t/U_c|u&67|ox}xr=no}?$ye|yZ/1^۸ox͏]\}'f^;}k9d39 ~DzNz6oW~O=>={Ώ/ _-Ư^<[{Ƌ#>|\Os:Fvܬ?+HqO=Y;a;n r筃'I[}F7s;W3'zq yk'ލY&~'9T??}a>RmOr6~g3{Yg>NvIBF!=9]Q<=!.uoNWo>m܀̫/yQ?QTk4u%q$e\o_91N8Ŀ\:pdixϣv_@۾Ww[<͹g^}WoG}G.w*Zy,|o776k?K3wp9nt֧O[/f~Eg0~1!=]/)Z$Rvs?}'ygœzO4.}Z?Okw4K.6scDOxñ#:gǸ:{vΉu;~vsDg糊; ~6tcޗsD<~N]~c18ߝzyoaG׺6?y{Gs~O _?g>տZ:~0.`e=>OX_~QN~;Ѽkjur|.w}Sg P?QP}sjOxny:|88<{tM_۲>qrxtN %|g|JϰG 3N}sGc~uևc}пu,غ4.g=ё<#͋|xo/Nz |_z5ClnC|mE|i{d~N'}QGggϮon?9#Ɠq#8l OK^v6>c/Eokƃ~7o~>Ҳ><ׯFSN'|#A{9ӹ} * OOm|G<"zgKR>O|d\o=U\Wz?to|qBq<:Op-{^\,Avőױ| a0q(<қ}O6K<ȣp^ßZxjk}yA۲O>~':q#t;lN^nM?ks]׸~>3~2/9΍C֣e}GӘ8(}sesяW<_8>zz-o&Oh0y{_mudmΡJ/^aL~=-.ɿCp%_ͷx‡G׺i=޿={&4'x)QT?ԝA-t@O ܵNGw?q3琳p tk<oJzq~IA׺G~O<#o;z=b+O[;:CJn{34O0:7==q//͛_ wOwh$B"۸KzI>]|V?|g^c?/ z}."O~݆NoPz_k^k u"+>׎Zw?2}'S9֡V۟9fW)upJn߬^]@:orn=/'iۭԖ| o7xwb#ty痃Ƒk%wu|l.{Aoo}#ɇ~V.Ǟ Neg9ك'b3|8{9r|^3g{+@Zg=KO7zNf_Kvq{\S\גsg)~_uO?7^Q`_\S's{N|Co%؃!?OӾi?;/G Oz7 OZ꾭 >F,?〫w쪣h=ў~n}yw->gC{KH.|y>23$ķW}N &{kg_sG?xOsE~4=z/ |/4|~x}yOv\׼+?豮v[pſӉ_6>u8#9\syQ<^;o+N.EOϕ/7\g=ŝܼFC0yMtA.2ooޱ邧77u'˳.OwӣuT$:rt~/;GtFƑ􋟬uY=9Geힼ`@s{ڍy`p;^]1.l3>u? 7ƿR1UG`I=r޻w>ybb Cg;dGWyA|5;K?4qpb{75z;#{Oo>G<9I Oao| L玸џ=a{/=[J8wĻΣ7?3q9u<2Ÿ[}Cxev |Əȣ;>NWgw^/o<ߒ'n3x'mBzԾEʥ=c7O/NoW^MM<cm];.'58ЍMxGfw=>]goz.~Cߗ"w.L>E?8o4ccߞ#>A\9/' wk|}GCwr?~oo0v[ˏO2^]\/<]=|s{~aj^2/Gמ琧u~/sL7/xs 3v6ƅ+(sl>wW󶎞o/=>޸ث-yh[3E?@~>Oou@?~py:G2txMs>_nLT|!焋_|L/3Xet3^r1/f??<ކk8x}1+vpOWή}Uny|2q3_4iη~ȣ}[CRyףt}.K7t2Oqo{Bli΃s_f9acU;:֮Go}j?GRY.*޴v>9'/GGE^5mɾ4ۏdW臼 '{ӿ|?h^gu~yߣrr.de[?:dz_B|{c>{ w/x֏ڡ~W_~onG}j0?ߘ3?t#wf~3Oyk$nnݑ+ɛ}NǐYSbjuw7v홙'ykRq[~wo{ͺۯnGnx+їַWz7\F>{9~)*~8 ]K#:,_ګZy6ttOaoObȃͫrW;_Fk~4Ɓ)AIl7y/nfG~+йFO|>|M'6Cryz`~nsUxxgz㎼3v'){!o o}<bWCx):i#qxwoi?O]Or@\{Q @O ֡5p}dЅ-'/Iy8~7mE͞[xM:>\X:XN:y~vZ~3׿Ct0~󩷼xO?o~-v'k?CΠs#Ԣ'`&dkU;wxu&#y CT?և'L__byO_E#7/ im>]?A_rƺ[xV.J?j=_=~0Nv71t:zhYw&' *O;ߟV/tx(?S~ЭMIiQVw3Ag|U~Qڃ?r:?+}gw;AƏg]>}O,3=OiꌝV:#A|S|EIo<<[5.`kɛ /o'j>n۹t3Nv{<z\#|зq9}oOoW_ԿcqV^G_Zrsgwqs<{+Wt~9v?x c,Nw>jϥ t~8nLÁ6wt5~߬>WqyhXzy]}r>ֱz>xOpne~Qxֵx(j6XI{8{O+yϵxƏB]p&>3.g^<}^"<|z{v{Ξyu7|OWCS(iq5o$e$"u>j\֎ w_~#vޞ}J;Fi^^ZS}+z+>=#WLpbwOom7}~O8t>]XrLܬ=[4];{ }O>ks<}֧Cc~0INڏ?oޕ/?|lxfރor6__d֍]om\KW_3ԉg|y]=sO ??%?As\|)jt G7N5j]m_:\葖ޥ/>} }OcʷGj߼iuZzvȯ_̺l=ߟ[:\PmgC; yT{z->\v^s׸~ώ2!An=ֿ3}hKr|⻶ɯ<{: _韞_piw5~NyV#~$6xRO=;oo_sm|n_]3;e}~'OJ_LJ':mSC~{;s\.d7v߻2֗O"gbJǾmOo~0ߡW=oZ/}o_|3\y-_[~_:O|y%33uk/j=vǓM֫[;reaޟ7Jo->< z_~_>qsML]˧LGk~h7M>~y{`vw]>v_qQK..\E/ӊ=u~[:u﮶[_?|ˑgo옋9iuS;O/9}~EZ~O;xOjM[ov[9j۷-zվվվl{<ܿÿ??GqվվվվվKVVjjߌ%_g?ٗx?.~x>qshU} g Eϥ}?z=W~ކ=kMkKSe߳zcjN?{_筓~$#|L|ԗ9m:ξ'ty7uaWϜ<;z_L}E>u=/yYP/gH-kTת.Ux_<'} g3m?ߓ3zCco}y6GE>uk}ꚻ>7ۧasխZ'mG}9y_Y}Ɠ|_ֹ[߻n\>ܞKNuاO7OuO^z=?m봵Zo8zu>nj]:ww>Yzy7 O8Ix}J^2/OϏYk㫜y>בk~aƷǾW3^r׹΃&oY`mc'?eח.C?y}n?dxt߾'a?|ܵbx&'{Sι>'m?|S_ov)L} K;7|}7~^ߍ`ڝG5,f޻/ Љ?9pz^ړz1۞#xg>e!7=xb_{ƮZ5rӺm`/|4~[#ɣG;_HO?,_Lt:#Kw~罻>w>/8/ףξ:~]^ynoij=U|(b/>ߠk?ߊ7s':ϣyU#qv_ ⯋|:\Z]S?>lk'>>y57Ͻ/U{v==}f&O#W;[ܰrqn8u8w".`O#?kGI9Lj)~R9~ot{Gz|u}gWNF^\xvΝlm;8:?{O^|{JO.k5I~pN/'϶ïz{ܿfȱtx]>),zYtٮ]7XxL>BGK@-ܝKD_󯦵>ygp]ί??Svs<|eK?,]oeoxb{gw~yƵ_7?˟q7K|YgCYZN$fg=BO_CЫg^k(QW}ÿ!!xs<|K=COͣn}-k׼Y)>~\={떿!ԕk~7)d'uT˟ïJ8b.O/?Y蓵H\tG|rA}Y<6nm>pj徬O?q"~zM_qu1WqkKRq>?!='9'gO+'|OO7໱[@o^Nv_G[^ɩ\?Swί?;E}l{ڮfҞ׭?j ~~|GL\s5f+x ?#}O7Z> V<þ'C`C/uF~wBwyG >vm&ts nd3{wI}=#m'j?3?.K#w.RoEx߽oZ|oާ>_Y>}_߃+WA מ=;V^ZqV駢Or>7_/;2uwn'v}[r̃ݺq=~3׿=_}oAmɺO\rWz>ry^ڣ=Ǝ:M=?a =vOyuY9b}zB[i_ĵ/~mm~{Mh3y"/xJ?[7򟽷<[?Wz7_G]A;~ģv<#?'n?_x~;2lFWz~Oy1<ɞM|z}[nu|Þ_\lW\/f?>p! ߝOCtVqŢ^I kw|agTi{?+w׸DO o[Oݿ\퇿#^pmCR?"OLˊl^6b쁞sovGyޝyx/wE\Wcy&y||HN^.d1xx+ᓏ<[;|uWxz8ns1%É#_bwoIM^Jw1S=j]3O~!jp7 Oq7xz4u㽎}zW}Vm7!I|N~ so.yڼ%œnoZؽPq_qxuk5Sb'ف#G5_>O듾<>U"xԛe<~Wv^%6r=x#ϒW_G3-o>hAN 疏^Ofهg=~d_U.:6~}ɿc$cS)^nV|ck9&v>oO/=ȵRObƯLv;^sԯN$>sGőx''רT<3fƟY3/|uVߺucf< zqK:r"ǟOyk\G㡭y=N%S숭 :o~^9q8z ^OlA|E/vk<'Dsk= Pv%k}O/|K{~S#'^Z?y:G\Y^΋37~x㗱ǝ#>?c uÇȻ/3C]j>o<7ëWAU><9˯=3YgB\a3N[>z8?=ٍ?O򦫷F߈K]爧φ>5#Ŀ7@/jq[xo~ى^/.u1Zg}y oy~\ 7]s~q+ͻZ/n7~'qgGݷx牗d7N}S?66NO/5/|_l{S-up:Yqɗzωg^1U'ȱlop+`XofAeҞ;91usaKtxo7Odz':\kvnާOwNv^E}*ɟ])N]ګ\<*N/ⰫgB(\+qf+q=9C#c3¼ΜEy]_ӛd3 v{}5y59ιz1\'/ICZ'}g>6o|%Vߗjgcje_ǩc}HC7v=wuT쐭m}/#z:;uw0I;W|#\g{7`|8 n/1ѧ)/E=x~UOgV~ '1xP'J7y|kiϋt |'O{nŸ\L+֞6cO}s'ZI?nI^3^O:G4*.`][?dޮ㗢ʟK^;G=m[}蔇W>寐u~c/y ~znoӲxȿiu3yW'>1z}^ ~xx#M\oqKoe y&v_i?ߣXWϺivObS ϊupԷ5H }ɣS@oe}ۍ|ԏƇSUO+yIOK$(NL}_OzH!~/oKWuC7W~~G{Gs'q<؇l?٥dY=uo>W猌C38C/rʟ9Uv 2}N._9y-;C?okߊ;d[gv}%C7)B/>'\?\0//=+~.xg]Z O{ɑ[ϒ<<~j}xCѭtpy..q1񌾧"y;]|CO}s]b9t'wAnZ0bA8I2xBwq~{}Do9ga9:葻x[;/ril+F~c4onux'POI؅7k8s<>j?ti O9/n$u S};vc/,ۿS?)q-3;g.xzR\Æٱp:>r]ky8~GܸgL8d|4rWE9-4x'z~ao,#镙Rqwm=Ӷo]+:'msvc.gYo'~֙g.aO.v{?:I!GL;BKk\k O0ď'xZiS'K}Jq(?wx0Os(Ŀ8]x:Cό=$es}!NIx1YVKasc賑_2`'>xdoݛ~J?4u0<D?^KmyeݵS%?_VZn*9ldTF@0$ R ERI$$D܉[Nb<#㌉O{: H#N̳֚2V'|Uƃ?0_:Qx<|nዚyx=>zBT|0[ގ_}rsixx2|niꭾ4/GoKS>7<{#x$[MOg}#R94|~}fCw\}݉[}c}9?<$q'x3<'Qsg|^}q;ޛ`Gc}OŮS?WO*\cի7O}/?S8qz#Ǹ_}YuEW=cq_.>b牟Oin~S߮O=E2oG~ =;\'P˯GG+8 n2wob=yYcZ?#r>Eg g<ݿ>Oں8{t<}]␵O9y)qȗ3Ow=`\ynx_C]W.ѯxoYm^ؑs#oرK<3~|ʗg/ogw4>!ã3Q#r?|,<S}v'95֏sxm~!%+~=Os< c~:\W.OvwiZKO7oq#0]?qx;;6䁼G>sos4uYrGegLx*?/Q~^A7u?~o{ioS=թNqi F/A>5/t[_O>_uN"_R//]nQ}DwDĻ'yÁ}?;?3^wȟ8M^< -0au~ /uS u;Zgv㪮oc.8ҿ[I{~{Cs'؇ 1vx=hOG>o]O~ !yo!9U_;҅G}}^KE7U'|NyXg,x;c' _ % >>?wq:'K܄'7czgS0oͺ)Zb '8~3[s _nݿ/.Gxx>w}y旆'p/:G y?W2EƵɪ|,.ɉƕNG_x"''^}/{u,`wѱ9uu?!Hdw5i^]s: 6|-xqVON<wxVe%R7_`OqSgO2zx`/ovך?kv]_%gY~.v+4q<[7 ;>2gp]쩿[];]<^wgƋx1NvqqL~y83pf|~i`ȯcϺNO7q+o׵˷ï'؟9}8='jGz/x?O,NCpk~w3,qvrOOz} y[̏umy~Yy{p7]](n};v]]W~^qϳߒ2>G_k?~#_w}]x}ƸYQ?*?!~;q9-O^nO|< R^[oPz".12$Pײrx _tM wߌ};$v{Vqqz;˸jaq^ 꿺GOn=>9˭<؟<'\O U^_zc/=9xk_=ׯ[zc|vt;>B2gcw*KƏۺCRxڟqS ~4~b߹| \8 b|/_} ^CSuP<)>[g0񘸔݄w?Vx"k=yOJ=o/;}tS38Y;_'}C{ڧ62u?Z;gCx4~A#L]+B;s\?xwr6./>'|OO~Sߓ>uGăܑO;ʏO<]Ϯ{J>~<6Y3n wx:Cǜpu֏|$\-o^FG2y`wN΀#YWqY}?|YoBO-ߏ~4n}wy$gq6~R gYyihxi<~Cq;5x^v97.O+Oq/~^'8[?&v]j:>y"i)u?!*ߐ-#O[;q!ze -;_\n%?Nwt=9߸ghѮgC_c3v~Xpxq}Hq9+#O4/]˾<Oڱ>j)o>F>)zu>ڽ;| Hʽ[/3|LJ`[=}n;/mo$n:OsnOP~ =v(yÓ}j[wiy]~ѭnlcݼ?܈Gu>Cܝ|G[GˏiƺKԉ4nxt߮̾0:O֟n͟ > 7󛚷_ W[GIoVy}y}+#oDOE;BS>k75Z޺}?݉Np8U8z\s5.9ݺ7#imƛ~qc۷(qu֏r"'oƓ>p)exq.x3Gu곌/&os}0&~a}H }4uJG3xvO|3iaQ99'bMS)ts{2_ܙ{o/?SѺ7zK{q#KҼz|%Əri~ oKuq)_nwL]vîS{=[](u:?q)ߛs/xg1D?E.n'$>7xj)~8G OSI=s>e~K/8/Wq.<+| /wn@4RXGyl'-?vu8x ]^W<8'{Woja/|^Ǘy}}"~gW n'?Q1u~7NqQ?OH ;k̃҃uyf8ԝÑqu#~ᇦ^$[ǁH\3"o OSߗye5Ow={87BS H=)=coqS䌞,+Ok9w#?y⤿O}i8%GP}q7.z0&cg^x_3.|<~EO\x~{ ;vI<<|7xEuk'I]ƍDn]3y6958Ûw]zUON_ԇ;ω'~z{q]}GUc{5ɭr?/yCgό-&u4=ļ[zC{c<9~9Ɏke כ|*~ʂwy V|YݒٷS|-;L_v_Op~~Ogy~'p<5iWOC^>~gʾ8ynodգ;|ix>~5nTOz<{yzC~Z`G#~{5&=y[o.ߔ ~?|O=6S?7uQS ቿEzk)V_&n{s}9c3_#|<3^qw=-yO穟>exlqfgtu9|{EW;͓K/TvG~{HE};$ުx/z$guW塶v7/vJn;xk@37}Ǒ+b;s.z2~?Eɾ9H|g|wm/zuX8|xܮΓUoqZ?a|~ug|?듖۰w&q|kz?@8›Rק$/uH\zvcQ?(?_L.zx{/x2fqm 9wqN{_2^v hOx?^k\[#]O)*]쿻+r _|S8;}U*}=OL=K=vnq_W/uU] a/nAqT߮ŸG'؏7uwx/"\hխwa|iw>NW{&%?ѓgG۞;8 "6]aƗ;~{W|?<ٳzyZ}Ug\N?{"/!H\EosW6.ɑKɍgW/|qyVN6ޘ<-; OGaֵ^<_[{oW8E'^2Wح/]7(j6_'yCh?;9qgk<ߵO&GpD~CV}^ϣkɺ ~^\+'W-?a\g³q;?x2~p5~?IUo9c}F_ _{xpzuV=<~'_Ls pl_<+Z3\]p2k7:]T/Ex=|cȑu}ύ:O[9& ??5~eG\W<Wx1uq+~q}_ch_4"/_,Lr>>lظmW}1JR}o3>/pzQ6^O5}źo' ?x:?}W{/Nq㞷7/C. ./Feu7⒱m~n7B赧 %ƿ'^[ݟLܾxKÇRi'߳ek®UOAj'x:6oo)džW?g>/<ű/Y[~ꈟ*n1<$Sܼv:KyI7hSyY7nB|/d/l~aaѯ1~g~,|z Ͻ5\yܮj♍/qo}K~~3+q7y r':'dsq vcxLG CT/goKc }ѧ+Q~ 竻m}ouKW;!-ϱ| {د^qO~G][$7慿)Nֹ9~Ko>AO&?_W䩬 H(|_)^rqO?ԁOOWl}bYk^o>ߊ6[p!TT?"[v:ȇ9ϳK$|,Wb|ݍ+˯>zğukoWz7%G?>=&yݿ?u\y$>9q{]Ro>/55xbGD=| f³6=4O}.yݟu޷q zKŽ8%5^sq0~]/RS_1uPN^߮.Cs3YG5^z|iQ}8~ar_ X{sl|y'o=+ܳ?!z<+ڋWa6Ϫ{ⷎk?Oӈ=*~_k}9+T|d lL[yK+O7Ы2_p;!$nxz7@xOhyp㰵o*~_ģ(u;_#΅Ë#3doX|:?#u{ENaR;{9\?:"W< LiyC|~B/swN?Wi?vRy`'kkWh&zogxu'gP?zˋ|V,3<|>Ps3x>M}/~+ח _>OuycWw{K xH=x&?S`DGm=C߻:O \2_5K+0o!ޭ^g6ygZYq:.o\ _pW{Z{7vSЧ_~)Rx;8l䣫GpJ5YrOvOߗX^y9}bտxW]5 c{] wrt苍y.=u뛗}`W|'rk[-?+$: z්^82>CF5ɇ"]98PӠ~ɎS{KykFol>bĉ/w/y~>8ߺvƹkv?z=G%??wej//G8qQrkVG['}5T^Q~/:!9{K?TtǣsT߾z7Ul} <7Hz({NVTa}%>R Uc{˛k߾.ğwy-=v=.Ϲυi=R֡o~_w:{ս+g9C<  G?O:Lf^r^Թw_yH~/8e/jh=¡/z_OqhԩcՉ R^UN?pOc'×X;~T~^§S#[>awgZoorU\y/oVϷ}Ou'Z}N>}^\zy3ݷ&>!|nɻot$̻y_&Ͽ{ʣn}Oq+{tOq&;^x;grȁusOUO 4}~v4?9}0}Gu3?}bA\[aOG|vOG}m?J=|{^g?8r͟Q}8=3γyyt:-s?=?V^W]!ߓs؋ <_jCԃ;_-N+CEĎ'ij.D8S^Z}<@ oS}VWo>׺.tu'%q,~>3͋ExTX?׾:|rH?8\'V_~ #l~ݩUW'?+/ޢ̛Mc~+n<ݭ>G{8s:_C3g}EE=oWh#o8_\~ߣ^\⟾WzBݿ?4:Nwú}/5cӞ{#|=Ի?z7zνxۇt.\םpr#4M;om.k&}95_߬Lrj7=qs}Pp]Ozy뺻t.}xzsNzzqϻ)G}rss]o[}jzyw^2~Î7[p?84k?8~p| |ȝy$ŏ]scþ_lϻT oy_y33RG})g>w:GNL]}gOu0֕=>DZ~֓9.SOR/ufz\̺>y庬ku~FkOzLݝZ}6^[l|q{toToSwi/wR':=õ={ؼ7#uGq<.>.`n7kk{v:lu4mGV'~S=]oGu{wnwVwo9li=l{xjuJqTk~o8r>?Zb]~Yu;Wh}GS֍<Ǯ]wg|O͞Ĵ{t/vƮz>[O~ZWޟ~yw<Wn<4> } 6;h? b׬ZA_zLo>|oٵ<)Yo~6ѧ]ѯЯ w}OiX_u;=FΜG/w=s=:gȧy#>Z<\_x]?iם:/rマ.Gioy%9~u L8Zg闵Kphz{c᛾ܟ_Xb?zze˺WVn?-oAvo7>o}>}|/x=经l#{~ox?X\~/W֕[e]8"__K[7ؗ뱋_=P:O.ӂ}pk\%Cx8;ׂ+/"gpxij:|zs^5<+rG>+?5|<ߛ~nx8;ǒ:>Oϊ;oKFcF<;G|/۱C|yU+A;7iS%o2ϗ^03}ocFyyg~CtėcOy:^ncW.?8m~{ܟ3ly[^k cX/?/}rP/﴾O_?yӏE>xz_[|K?|uxov: 8p^'?|_KxC>0G_zh:=)Nb]u~K#<ⅿP n5Ǟ7y*v ߇w|x?Kgv5<]q ~廽wJ;r%{\Ǐ{M㰉/~Cv#7{oㄗgkPC~)g3˺><ԟ]+?O O{'P} Oz7oԍY7i%׻ޠKC4>˃[:?|]S}<]Rrώgο_{oM~|KC%~›gE}{l<]xY'мbzc8c#|)Ӽ+ڮ_ܳ$\o| vܱ?ooş[ݼYz+u?u7{GqCN:o<6O^.!DޭW٫/qƎ=ym6v(Ҟ#8/W[]~my'F_m#>廖߾']Ώu/G^<\Oo5w{/u_>pƩ3.Tz|ͻCNۿxW;Tx֟"y7~]OX^GavOU<-nvV־_/ ?vC)˾Lj]ﬓcw6ީxڣO"b_j~1׾pHȕߋgb`Go]szD~q٥=}l<O췒煗xbX]bijB5.?Ϳ_ޙ_|Zf¶.xɉ>iS=eo'6O" !eݞg~ȫqs))P<'}Ó|9gy ߴz{yfůq{_W9\ٍx8jח:~~=]nx~+:_gi<_{z_gO뤚 n1n}s=OL=^M?~cya7>w=C GX}拗G8ڡ;WY)Srj`g7ߠ=7b?'|ܾڷq5}|.U=.#^Vx*χH;uvp{|N 1m~JOS@z)~)>_i%j^eO'\{vNgx_Ժx&~\ήz<~77W>"~ۏUnm')zSv=ı?">):v?Svg"G.[8ڹp{w]o}ݾۼ8xk=xpKpG_'^{I=&~2OxЮ8Ϳ|Qγo7"߈ȑOy}o+{7ݧ>W3~ڧ:'7I~v f#'cٟMwB캧ŗ}[+8I~~:7^÷f\٣A8G+G\⦉wz\꼇7?-*.oܧ.h-]~#_&~3i'~f٣W>18¯Y'~v?yxz?H߷#Q3ãc7'G'o r#rO؛|^=ψO6žӨ_߉d՛0~#S,{P/(k~}gv ax/+w=#"x9Gmys|?֟-c#;^/~~&꽩sNS=>cG o%'Sp7_}eڼlG_,gu>u[s;~`?m6ϣ)?'x'Gxu{'Q7 :ogSk/XXGwmN|z߱ۍ+-]m7/z@}ٵiv׏^_(`A`W/}+ϫ NZ./9M3O>s܏]|8u8dO'37x Zoy/9~ u!t;7 僌3qބ#寂3>y>7"Ňz1q/nK%v O0x`<=}&~5>^Ṷί#6coEn>oހ޲nI{zAvD~;׳Oqobīw}!E~7'Y|oW.gk~4q+xߌ}!ol]Wz ظZokd^}v:3;:G\Nq"G/v߰Sw@qdܜ{NP\>θ>}NO7ɓ/< N+ϋZw>~\wr~||I>6?;~#\[uB_;?N;.?Z9%x"o>[w)o.H/qF 'AVq~lxZ^N^?8}gN>O~,֍L^YG)'~*=~Ny P ^vw#퓿P#|v8 _?˺VS|y*;N[<, ~g' G>4y?:3.Y9xC~{!'gпo~׮#Xx:~$Yy 7pB/#W?񟊫ؓ#D~iwc)u+;"no>QXQ|._J~kO'r_Oo,8|3O~O/O;Sq{()~<~]3OƳ=n= W{zokp:ʌ3?<0Ŀ^}OKq?G <އ爫ة}8v~~Tw<}zډS|}wUk嗆OO?r;P,^ثHz¸ub&z\q}짥_}_#49"rG;vƏ\ޣ~h~:މ}ȧC۰/ee;s (Ӄ[?q'OO\>O#db>w6^Oxjd?|_ʋS֮V'7v(.g~9a>;z̷q'9ywu>Aoy{<8i}ieF= c6O ߜnuax8OƗRoDt<8?]?e-GM#Gշ':s.ixjq3KWOȼu7?U QJ9cȌ3n?z:Eqe}4ރ'fOd1>x>-_zx"Bs՗S>.u'P7xu&kjCh#aS?旐s;]}!ŷzq>ހp캳O}~]_P"r'S_ 갖?o'v߸߳G}c+_75N#2x>tozqR;yx;c}G3 [.Cވ>#Gi}tp ^]?uh_'Kn['uyqXF{egmO`=/1|yv^'v?7.XVdW[;,OoM_^~.v\G8uFB; ;s+q,\i/; 1 zڕO'E]7z$<-'vi;≽\+-<'.2^ONgkaQA)<|W뀭}=>wGοcW?_~\{׎zK>^{}=Gm9){weyb^3՟r/oݛ8zh|nu6_*ͼ _pG N:OX~~m/%o&nw37|x#37|wxC"}zAxa~Oͻw'+:sτ!d۾oy;R~:g}Li߮7O0>+ݷfO0vb|On};[D~gh^1G|T7OB|/-?vgoy~`]I?Kg$cg.Gv.ai7=*ocN#BAuh\{zVǣIG4~߽>5~yl~>'4.,~vJqHqvp৸yh[i/ث]p5<{$~z̧z! O5ސ/(R߈?gY;!' ̇w? Yכ:

Oѷ/^OGrOxtv-ş~,s}gSxx(ƕܶ(rsţ[_Gl_C{.NWMWnQ;BKz!8._w0ơvGY?@ˇ{|߳u3H\|OpR>b}o떖`̟q?KCK.~o3~֫٬Z?'B\ŎSH/Y'Ǐ!/ͯE ™z _}xZOG>z?4opk%wo; ͻ>B|6~ϡ曽?oV~~޾a7;gy_yZw P <}\׺O0% #]};bޯq 7έ~p?AI_ٺ.luחCp|_;5C}d7C?'}ɟ)^p b^]s<<kc%?]x#/Sg/D=stp|m[z=șκz@؋~ ;8nק~~oQmWcqoC;[wQ_ O~3s{y#q:yUc <#{o7?]5_jCy_xq~>捊٧a}N&9S~~-vc_WP= /o>vmyMo5ҞQi=~oKnfFnf^3vaEvnm<6Y~;KďgyH_]<~ ~WW;籟jKzxviHf%'^s=K}3ڧ#fr㌏0N)̮SK9\Nc(~{Oƞiq*;cHmg/<| K/.ǿ4~8m?z^ǵ>1J2rl7SVvy)|-?+wNv'^P\Mָܳhy/vtK}'n;Q;䳍o _~7J%Oux}A.v\u'}kxw}c?Y]'_4<'D#za^1+7rRlOyuڣ)Yuxs~8Ξd~^aqSZ=;?yz[O#Ⴇ?˾xnf+G?;߮cgGUy8_~~%vnʓ]1~$9«m%.z@yy4v7h3#F}+~k>ƍRxqzط'}Ӎ.o|@~ɓ7u Ǿ] x>r{~rd䫦~%\?bW7z-g w#7nYoO+aURL N qT9\ig?i a0+ɛWd5s7zyY}C'~}8cL!dv^8qk<'y=X^W<grR>{&dv}Ex;(ޑ=M.^o[o*-OسK,G7/'x]I8G!WڏV^G7C|]=9\<<:b'O2y=xy9/ĥn;ݏ n|?\p38zuyC",}c}=B.˾ssܓ OX{e+dˏֽ/wz]vouM[?VG7J7Sɞ5u='3+f>6qu2ق z'ןͿf=8_S7T3f\7 7[WW7𡩳vkwmr$gI_8u>{Yz)~?|`>do=7<ǻ8U_;u1O?/ǺU6CWGWvr~֟Nv y]5_$#87y?(!s<8?BO,޴xF~L<ȯWx:7ݿO`>ÓC^}ޜ/>uOc<6ao؏?vG~(xeMog\u|*9>LjϷ)Gt'd8.?v ˿?,}|ȸȡ1K\a]^O婶u{t}/\ԣ/ 0=!oW} .y܏bQYůgcJfogڭ9Gz4y:9O,wi Ϟn}}qF~ަ.R-^4^n;տN~?θnux'~b8x# N\=qZ\^u=G8K`+?̼{>+y3ϟgDӛ٧ /O3/3vgOu|PN?+yK8^P|w~V$N%z#'[^H_}Ƨ]}c{3\koy4JV3_>;oǻ柿>![XNj}1%?kߩ~+qvω'5?{/X{}ɏqxiޯ~xL]/8o G717O3ij/Qqf{r4ߗ;S]ֿ=wwh;E\oo/{Ǐ Wy/eC|6.ς|c/c}/a /oGߞvJK9'~!q(^:A/o?x?yW_][SOG$ī w~=O} }gE˩n;b'qxI<_b?>QzLK#֋.J^¿=pqv7G}KO."oub'?VxxRou)ѱ] o;|<<14|x<>W<O˯~j_sϼ_~fA]'uEu{uo{$:_d㆏Udw?ʓOvoeߒ zԍǟ/. E&z;όy䄝~kQyM.9߷sҮ: ^O="N׾%oyJX9ŏVԷObWv = 6byW^/x!<\׏^?o^ɏGֱWUJm˲c2,>cy9#ReC4vo^-8'~<#D/zv Cxnvq`<>C;wzk埒g_r]>u5{{#N_?2̺5/;uµ?֏~ť7uHu;8DZ_{[<\ VO[ٯ},31x]O_į{oܗ4 R=oQ' 3pi_au=/̺9-#Z;kQά/&}.#|o^%_,S_7~IF?6.u[弴xcO iWZox ..uϾ}R7}k<9_kzs=;/'>/N_e\W/l_{zy|I)~^CMxo6~:>]_x›z0§Iz+~1_ N#Tڭr]x//Z{7~ {tzJ>@+I{{yG?9&Ώ?> {Hг^~bMw{]]k^O]y! (ߋ]ܑ87'?}3sz>-Y~ࣃkX:qxkAm= yu^W/y=Gd Ϟk_k#Bȏvg׵]i8X߈:K}w[7c-Y"i|g\=]1s }RG!?aߛѻNVGsƃ|?̉WMOyG\o'[߸箳u9 |u??w~X{7jqh݆Ľ2a<%n+W+ųOѵOgOG/cI(.U'ȏy4}A6>۸1hib7+߯e>yЗpot\_Mr;^\|;w:o`S\*Y$Z=q:!(〗;\g]II>w5ve~[yh7=x+/5x2'g}||ھnhe7Yyo}aH}2o|Əر _A+=pSS\=}s▛{z#bWkǭw炻V2~ԾvCJ_|NspH/.opy)qs>u W>>]޺yƧM8G5EScj}OȯbcO#^_+Ǖs<$Owv\脫7uƞMeP/^ȍSc;ơzD܄/H܃[y{~&oj"+^o5p_K>]4n+Sɑ~!?]=96?g7.~ݞyn<䙾&Gu߲5p&z_meo}+9ܯ|K~Ax*~y.//nG<`G_\K\qa5_߾7ŗ:?>*oj5r /[*+^^i>PJ~6<?gڑG܏Ic}';~F9rǭuF]/:!z<-OQ?sa⨋]Yu>Wu#ZgcV៵|)+qR7y(ԁMjT?4vߣw#</N [ī5H>Boyooz9u.0w~Y%57[~sbk>_;?MZ{c v a?<{`[_|;g|xoqMY/G+r..O?]_or'_o_}ȗhbX,gZ ^c"#v~_rg?7ޭwf ?N8,pT;;KnDgyL~gɕo\򻓗!_aukc"Vy!9Yo./qex+ 8_&˟'~zޟzgQ{__{;O?y#aUYwaN'-Boѷ z^j7\c}i~x>xL^> ۰'] O==E/e>+gGŹ_\] TQ;})F)= T78E\⧱kKv#5~uQOG?XG~ }]vExGuTټ[/z3#'WϴFoj&߳r:v]9ٯ]a>O*'3bG\{g <X!//gwW 'zRgۋﱯ;߭8~˛&R9ﱝ:݋5v`8xKXwj8o㮩ǯwu 牧؏Wg?v >~*z_{(&x86<]׵8?'"_#\}y=qw<>c/fؓ]ȵxNF1o+|`4<^߇(n0GK杵VO?LuCiCZcu3;K,NvCtWyĉڗo W KNa_I{t^qTl}Dr3Ժ5zw_q{;OkGվ%CCdYy/{v/'3Ky/~vnskUn~ۧm@pƟWcgZzg`$υث"ݟ9<p-~zS>OIgH'"{$/+>߅_/z>wuO}Eoh\I >8Cm㟹}3'Sٺ>Cxr^s{>=-NnkoyY}8<(~K{{7~AG߭Onڧbnz`HZj1zfw5N{̓ҧ腭ӐW\`5k/\ }ƹGQgDW'J^:w~w]ej;SV}v':t4=~ke #zn~oG;ݿN>x s~z8H-~JG;vkv߾/oޯu{e<7)rO=S~vlK~U>7u^׸F~pRǐ)~U}OnN%3{ʏh_{GYx_r!}8/sgŏ1qU"']; [->̾ \}Z^]ȴܞNy$.Cvs<8=wY|=wYq#I󾸾99.;qOpG?:~m;N|<+y<]rP=|~:n޼Nz턏=wE۽~=r<^fa7k==_~yF^O8bϓru=N?8~pE?8pO?8[ug~忴O;vWh} y~%xr|,uoy˃qrO}1ޗwYߔut}}^cVsn?}@ zq>niU:Hݬ}[h=Xꐬև6ϸr^:c5sZ=S:uj]_p]E֛g:x.%/d[OO^_+,>֣c{L? |r~Gޏ {k<9ZseHn_yV?¡uWOU{Y߼Y:v~gIWzQg;ɑʇp4/]+wq7S{.9pi>t~9ps}S_]ro}4//>v2ܭȮ=\.{x3RGn0{uoş6|qd {} T;v/|i}>?O0c٣K~Q,w<Չ;^Z{Z{I S?Oqƿ>_vÅ8/=봗)bipn)}b Oɏyi}Aӽ؟k.t|>8&Yn_9/` &/<򝴗}ZO>çyБ_'yGӮgg|G_I|O=Ow؟;rs>_:W_hܢ// 2IH/o쓬ÿ|Ϳv?bǂ?v Ç O&8k;M|oy=ޥ>֑s~S\~CÜ''!-yG~ js;~%WzlOO1޹ Okޝ8׏LJx2O.x2\NB18z)婃*5\aPI;ôC\7#fvwgȾ\ 7?R OM7/Cz ?0][p#]E\T?qW(Q3\ߚ>s_8TwW_\_=ug9}x{}%~]dI~v9իMWF?6~k.s3ǯ>O_#xmŷoXqw.R?>8.z{ٗ J{1r>~cǟ[Q$n~YTqZL^[>L;y`#? Ϣ .|Cv>9[[;4qo}ֽO!;i7|mko[9o}VΖ_hk‡0]~bԕu߱_f2Iⱍ{L݅qe/֥o#vԯ$<՟ܴNpM]WtG?vǥ>dŊی ac]?]13~ݯE7Oh:Q^/|絮)Y>kpS~lNm\}ƿ%SBx#rcmBbc:KԟOK)/!N3}d~8v.0~}>:.%4~5WOwN.Qa9~=<5/ Oy:}PqW=~#rF\<BWΊ'z}cGױp~}.v ҿSʓ=ֹ??ܫ7Axq;x #ݿ}tqR<͝)\7o\?_\g[Է{ux_?^=7+Nr_x:miW7y }ѐ׍yqg'S<Ÿ#{k?o>LR8^` u(vO&?[O7{WxKǞ^)yOg># ٟϼ.o8ŽSs䟝'5xh#^[Ϻ*zxߛ3/|bPy1_vG޾vFOMez4zj'Ps_~5g_%&0OSsO՟cG:Dz+g>iy錟o'}2ص݇ک=V'<-bճ_mNpNhZ:zdYe^<5|O6 b zvϺ^S~W),(~onܑ=k=S"/Nf} vs|ϩ[_^ΞWwe1p?~gأ1xBƵ|]_=?qم'1.r";Gmxr|'$9p_Nᱸ7;"Y@_\'/y^yy?hDSM? 򀷄7zL~Yo'>ɭ糣8j7®ӧ!4+㿹SkW~]$O?/<.{ OG_l닗ˌ+yo@}/QPδ;]x Po]?:tiᒽ6.f|Dx<])??{r\;S5~%'J 7R1uy&~f7x~:-(q-}3JǕ>4?ю }g?v Zm~IH ;}ΰOև>y<3:ɗf=N_W~9aݬ_S wuꇢAP]?u=z|]g܍k:} ^|G֙;?ݟ}awf犟܇ފ~ߣs4OǶ2~qw_^O#]ύ/7*4#>[Z*^\^|^u|۵"i\ުÏG7|Z}~Y^_o=DO~ ?7Fwo';9tɿTkGX?_@k>9G7O%beĎoڅkw:k>y/H|SfxW"ԎM;/|O=]`o|ܿG[x=fY C=/`'x7?<~.!r'/u/{f8\cjO)}ô҇(=x=7oWDZuUjyqW)ϡ^̿|7z>>4>vx.WOg}{]#Q_u[/!F߱%ovsEu]FW87?'8%opx~M/wr`|/n2_?\o6^x=}y1C?%v]s8C>p~usrO͛V|7'vg?-^W|L|K\=ӏW] ']/9/ )< },~oNxz?f/wqwOr s)-?\IA?W5~"].}snu_}T~ouk{YON K??_;7qk)C3gjۧr|nx_#coo׍]Wy?b=7y ]'[:~nꅶ.#%!{{^v<;ӸHb== N+KNN'}_{zOu'dVO? *v ]xvSs6g}N. WƉg_^O8+wgwpNûֵ+[}y%#~q輗iui?=(~{t<_9bx2gnXg1/f}޶tB|Yd>ǞGko߉98rㇳ~}vux bw~q;W<Ч w# ͮ4wg\Ǐ8[s>إziW܋6;Ss=ggKSGj}s OG޸yNxJݍ+O+DOO>۸n.9KL>>3L[o~'S'~s}.Y^P{S<$f<>>4_xN?`W7pži9u=o_<=8үs›sogmA/.7.y'~|ݤ/ZN=u?/n?w4]7wm`{Y?`#vd~[vűe'C$^/|9~bK)8}w챸E]7~~~x(ތ6^8>>;w_?LO/3/kgU?÷?پDz`ׇ?xt<{O'Z=ʎ9uycv^KFSupiϻ?mvSxű#dާ}+kO۪S?pF`>%O^ċc\鱍_I?m|K?XϷs~xi9c={WG'Go>û~7IOyq"ϱI:oۭ?oïy+_S~yWrhvd Oz [;z(vO;6ouRr?v>qkՍ7dP_y\rwOzC3GoN]^?x 0}h}_>ɋz!8ɮsuG{d5x+ۺ!#s3j'>?e>׏2ƅ?E~oYOaq8oG8uơ~:Crb?eo`WG_O>8~c}uďn#/"Svi=&g/=9s/p>'6"wbh@gj.£_>r޺܏k}G߇+#GyT\G^ij[w]:S'nK~ũ;䎿m>n|I0#h\o ~鯸֎69q;c|9{.>d|3ݿJdgsK$~YڽA=:f~gG3>1~X\y<%=Cx wD.{?v~ ׇ\䊟 N?*]{X >D|yw|\C;w5^w-y _ݿeǭߋxp"{ZjyG'8gxMJ~/WG< ?oc_Iw nх8 ߘ/||7|Q]j/ 5N}TwwwN>-7i'\G/_6?]qdR?~_sGO[?~kMnK xa >z%WD}n=~O#dƿQR+Um/›xxR~qq_uG<f;GoĹg'xi/r~}w?zAwÓG0}b?=~5ޒ!\~׉=+sܼy^K}5BC/upx!EoYgEh狊y)N_zTLNQ+/c)*Es{zs>y\]ݮ7pEq?/ϗ_~|!ү3[_>iwK=(/(aԱ#wqf#\?}S<%~2 7~vJBo?=S+ϩ\mOe}>oq{ZVюڵl=W "O u=scpv]!أ"r>.׷yS>[׺D-*'rƟ~i9ǣܳ pyO ]U_ߛߍ|n~g|˻E| NWxnϣgwBSǗ봃7^pxt<'u;1~|~xrOw›6Ow\>էk>p_ϗ3΍Ǫ9gi>擿_*nE>Mkݯ|??I+p#?']׽]_~|Z78r%D/<՟o=Bc':y5^'ǎOZl̗A45v >pޫ)k:)vG@R>6;<_kgę@|'SRPYɩ?}O:ݿqzgr?|w~*rlɏ '|hIW-Mqy|q''⧰m1?ne9ύ8Z>;Ǻ/Ƭ3'pAύ$ߐUg4,/g̃Ӄ~[j=fX5qxys ;k<߸Wz叅'8*~w??z|o~;W%P'9~i?xx3y2@i|vC瓧:al؃}~Îl>^[>]o$o]oXOLዾ'[g&96J\Įop$7oy# O:~t\qF~7!'rO%;p ߑޗN !u?oJ rƑ=o;?}떼Guz1|cKG/ހh#иiڭw~^ėWOCݻvŕ̃UƇg/}[`{WG_Gu۴\'x9}"ݷқx//;'?̯俱yuS؏G P}Oy7_/>5O}ꕂCy>&$jxx!jg W#Xb:}Uq'cD/,.rbEω9+㗰}k?׋.M|8?睎x(Gik~/@~ۼ\ǩ_qk:#<ݾWN|%JS\<ѻ1x}z[w;9 zy7~ru\WwrUNWk>x`w!yߏDxbO q?r/GO'a2|- ;\GŅ}k}oy. VOS?/^}Y'vxqz`z>O}=>n&vw#W<O| O%r_6.iz~5CINyquMq}$K޿3 o'^'L\+&g N7{yc>x>\ω'#o|C[<8ߓ'>-f8'']gOēN>`$qŃWNq0G5<Ю3;yurOޞ+b?k~?8߾77Q{%/ϝq]1 VU>N&T3ƹxn/򠝭?|⧴ ʾיo:|}gLS-?xgq4z x~(}%v#ٷ^DdnK~;zW|L> qAu*:մ]j>=9M^7H#ΡOD|u5nqP? I~.x'lE2{g."G<߶|wo~ä6O*?God7?7g"䉃?m:#ZڍAc(+c7y!OB/O]HO1ɍzLu:<|'{jGMƩKlO;g;?GSא\ /~\r_me~_X^W?#{_gǖ"s:'y_Ok0%mq屫 7nk<(  -6 >'B\_g̓ 7Ó?2y<8Q|)u/vl}U~(ȱ~=>f7ؿG:~D~/_۷[Ggv?y4/㧉/{e>ֳK>|'(H^;6<|gͷp1OuC/㧈{$BOc1~컪|+rggV_cd\/{W?^cz9i zXq!'&6O=y'~^oHO-[7Ӹ=uy>Ϳyȩ…KE]'>l Nߙ×|ڏ+ȫ8IWXljX7;cTSa<ݷO)ԅ\x9r{ϟЮ/}l<WֻG|sxuK|0TƯ.tsw>$p_}=k?w\{|+[yf'_>Iϻ#?/|oKUgw Nw5?O<ϸ@*ܷ87e#~<{yz|r/^7o~rw _c؍wuqsu<܏{]Gcܩ'|_gsc^}%<_jdWӏqރ]hyK{:i~%]O{#qٯ.W?gB?͟8xJVcuoxݍco?0y='TS[;e\ZOgE>yÇ%Nϥ}t}iG]툾X>dkn:)\{so>=87H?fxu!?gqyu?|8yX .6nrڋkJ/{=#?k~W7~ _{d~c*"/hW3#O('~o?ߛz#q%6r`?+}&NǺ&8uy='RFw3ΝO__Gmoxڿ|hDz ~7.{z"R;ׯH{}P*^}?_8;=~1#9uGђo~Ƽ6Gᕛ_{(O׿<џԍ:n~tXvl7py7BD⫿S ~{b<6. ?W N Ժ ~Qo'w^ˣF|9r·3 +\V w wuor][_?0(vƛفʵn%XbG n<}}cxѿ#7SO+Ʒ{WP=OKmn;qӿtȻ◝^vu)N~+ u ʮ{O^c62Sq.<ЯSF;ǵW O4J?n7lp敦X=0<#p 7أ _Ż};>5Nx=E^[-|Wy#<q]vÉxyZa_rzGwOGO>vי7q({; <~!ݵ[\ }<"/Q2=g+x?'{ѧQ WWvpx8m)+qc}qWMn>57y|~Wo]/]}yG"Y+?;ݗӿw.~o+Ov>sEd7<˧.#ǕKWgM=E[ͿtÓ?yqnh|w'h;kD^3sO@ 㧵?0?Ӓoq{:|yqW+G1ʉ/8bsOܜYNHpOk?&v-eNطcxW#O킧a~3xw֩t-=:N_my#op.xzg-OO晟!mqDCu ~@ :xyBY?/n'%uqVv} '{v񀧇>?ruKUcSOE?d׬o|׏)ԙ=_ SO4uœx_~S os^mN O׊[~K}u\/Oǯ_Wu oM">[_pKNyԓ=vm{`/_g'q_]3ŧn|Bځ'N`U֣5Nxb/G“7f;}gwMh8=xcy}n]\d~CWh?O⎾W_vow'=cQ^Wwٳ=q|g=gY.W>r]?0q6{=p᝿u O|E~7xGSH~ c?wnVn_㣦bWO,|)~֕>{mS<Oq׵zṀ{ Ձ;;uK~Ş'e ?WoPQu3䵻fe}W._?['7xi3קΟ=S?NN8/;9?8:gq?TIcGǵן>[xͧ?dgp|ǏM{w~Nh\^{,k{Ku}׮o?~:>qN={q0oz絾%5b|%[kv^^?oHvJ>ꝿ_w2~_>~'{K}ADxxShX Iqry~:7 򃯥1&/:᝼O&K{잸<'zUUzԬ^aͯ'佛W~%xg|~m ި^g_vhsv~Q4ӭ˷zyq|@@q6Ǻ]}kNr:;qEnzc~ۯp7ŗ}{4}}m?ǽ;OnYۿr}ǎzxppڳڛoI}8<b_G/_ywϭVNj18{t|Ƴ_x|Sq|XY3]w|{9xxpK楗?ӿ?~_oyw.9imu_qt>~[[?p|Q~>q#u^ۺ:gФ9_sZesSLJ>>>=?TOwΤQoR:K8n]:Q#ԏsVziT~teD=fճ|~g==_VvݏzZGz7Jqs[ݮy]tOw_h2.|ꕻ^.Qn_W~T^؏bwO;< Xuެ+~кCNz]@>3::Dcדl=rnNWɱvn}8'/ O NJv[?̟ȸv?' Xc/"9v>2n]+]'C{~>[B?9v]ug>|v=o9_9}v_8>}Kĕ)97~?uz^=ugrǮ7ZuY仿S]N|[Gk^WOzAZN\f}W/~k~̱~k>ߥw}8^=a]ϸ4}b䍟s''=6#!qk8ן=?)Kwy2r9拿i=uk qpv!wמ}e\o{Ywy86q,OO8,ٷ쟥]n'~m /=z߬Qںwڷ:bup`|֩Ly|mO.?4x?x4we_}{xns|F=OyNƥTy31yScĻmq32vWn罙/^ o\㸸YhO:﯌<O?W9ӮWf|M?3Jz xb=Q Oe)/~O>~{m_G8;{>> w|'﮿=~}WÇ?y=]=7͋z?.x"P{g闑eoAOz_;GznNx_oq<0y?Mn ߘ i/\xη:w\zs˼,~6^7Z;!x//cJcGxp{8k9}uzpByںyrĞO]tis"/<} ~nMzwyg|<3qg~4_O᭽'{[ _R>خOXj=jyuG/t'~3wG,tџHy+{8vgi|л?3x]xZ{{{ZQVTY̏=;uB09/RkW?_ȋA68}~#uǗ1rrOEx8W9:/v}ȫqG[O?mʇk:[Jxxlǿ6~ݛ#;<wyߍ/gWn~j4UG~ɳgsŇvӍ||x .&חux9~-gGxD aH៊7Ol~iqګ߯|i^=x}.syt'u7yb5x0إcwmY&rmɏHS}Y&^.ȵy%?]]vFgMN?)r mc> 6jnd { O;"7G\?f3}gœqXO>UeJwT5UFr{?\< }`\r{ O.xsG1sɅ;?~_;iZ.j*};o.ʇ .{+<8\/GGק<8e~pw=Gaߛ_\Em|ϾwzOx)ݣ|o{LO6x}:_y.?:Gm^Y:op >ُ_޸b7G߉ou|~%>(>S/}=gߴ Y4pk_!(q> .瑫/G8<}Oҧpfa|y#>z_/?=^χO\N}6?7wrY7Ϗ];o{o[ /Y@vvK?RtYo wc2cO]~;<1G"?q/e^Opq5_ ~i~|ES3~ө )85o#o=M}x#j>]'w.fzTgմK_#q~/}9м8y~D=_?KztLJo> 7<Gx_']|~[Pj S<k^?r?fkǏoȟjkٯ&矨'.^^TwV-g}ӭ_gOe?_x:>iڸf7;=@8n<ǟEoYT;~O.Lfߕ b. Oܑ[fG>D|C?s a/Nۿ5y;\6Ǟ'Iq{7?6nNGQA/?OY\;M;<[CjOS<<-My,quxl/g^cxFά'VG<}`\?k_;dⶋ>5Zh?|DƟ>?@voo!}o?gm>]oG/*jx}!?{|ȡOx r_}Լs@Gu7o̼r~`kNE>.#ϋqy_fK۽|k3^ ozn/L|q|?&~'W3ѺV38 z>u\c)z <7+GzOu 9/zoǗF_{$7hyS7Xo/|;.y~ɿqK=ʣwM>j_ƞ7rs5ҭ>''.`9^4pYyH姚WOžط}s[9߸ODns)u?'>+׼[u| ‘~Su!?_v|7.o}.SG>|ɋ㉞/:]oǟ{+wS {_/U.:xm=}(2p\GOhQ.#K]t}Oҏ?xuϮ|u߿nB<տG|@Gnx?s/NuUn.^~zY/ϥΈZ? Ïk幼^vo}|lξO{*|y#' O}hNx;?_q֝8 xmש]E/GYO^o*R~vbJ}}!=3W ]b\xu|NqT_O:#~ya䟚/ck/|{q80e \o[W>o|6W;_8c4{t}؇;||i#n>x<:>}ɿSxbnŅ|Qٸ }~R7MuOםdoD~7ɾ&?}.?tAvW=/Zn77'NG,Aw?xO䒷^xSs^qzzvv_brͯnojxi<[ώ~YGr٧lU&*n3Oەc~e+G>ꢺoh=Ci}+uЭ{l3QW򻣯u1Gя?'F^7nV9WwČ;Y^>?-{ڳIa~Gx8K?rZTyz.u{=߸|Gk}BqPs>^Bx uG x)u[y+^q9w)j7}㟪W_AYaln7z`'>_\K~˕Ӽ? gאwz=../!A|~]9?%v_~:z|'~ }o|%'WW_G贇^]}к{]d%nYjrK~{b3?z߸яG_[yv~Zy}⡾ꎼxw[=@q_}9O }~*~>PX>%:3Z"Lm}&Yܶup>vsT/u17Փb;߿yO÷iCnZݺ3tk<\Gn\p+OG2_%}O$g}Ov־\ſcnO }S'Û}]y`?؃WdOz |Q=|zOX}Cc_s[-w(ry8gyn# Oꀶ^gOK W3~z;?N.ွ%7\q/|{ ںz͙Gól}/+䕿6xyk˃*?Odr}㺌x=xHtg nr_x}k=Ok,t|vW/c=6qdwYwgwZ>͓g0?W/ gx?.x:۞Ӹ'=;t+tx_x>tZ<=bgyC#<?,q{<χ_|dpn~l|+rߝz#LƋ|}O)>S]ګyn)+Akz!uk/R'k3G ~<+f?־,a'x3{}*ŋyظ͏x8|~poK"|o]2K~tm<%?ş:KǾlizÃ?=Os9bndBuc-q׶~?oke\8]sٹS;f:nswypo,/˭ˤBr!o鿗3xC.ϳNm;U y+f_c)xO@둭K?uA_̾ #x?>їDž'{i.80vxq]M_ep_qC\<c}'j?kg|KxݼSbVTW>{ٸEgrlߋ7\||0gJOƁ/? n?M oywO9sËY;ח{ٿwߓ+m?:>I<{_*|z=ޮݑ[GyOɭҎopmxκ},dB8fɕYx\.œ㷐?w{5;3 3x6]~ ◞2x`ﴃ&ȍxgyfvuÕcX (='ϛ|`⨙F򁗐{iOA.'ۺ+vgw?Oo5ڿ_ںݯȾև/ "[+7}˦^COo_wlޛ{[Ga}`쇎_jpf|9^y,c߾ Og|/G\{)8;8g'#}N:3'yX_<׌?z&~tG8*.k]Xyc ><mO==3m‡v}Lߋ)Nl?3/Qvgewͼgk~ח_]ދ~?Io}iO{ݲ}wqxWgxvb7N03c6oW5 ~w&zS=߿c}Gw]Xxn=^ƍV?KȫSap/ !nENĝ^ ؏3ۗ1k/ >ƽ/lop}r?zu?QqsۣgỶ?swvi7[~N} l+~i}fp7).Ms1`WƏbύ;}VQ.zc~6A}oEڸFwT_ϳ>9^cz x\S?o\8ov_x{DQ}xKW}>痐_y_{Ƀ| <&vzW~eskw%-çͿyFvūiqW]&OY:㡟>+s7oǩEGzmyh5ȼS>u5/f\[*B^ٽc?Òu 7FߜU1}TS׿9_gȿg~)ON?< . h>7Y< O8-nٱy&x(;?=ﱴ~U~=gbdaisuyyezԛOi;=ug l1㫞~X7zkGw{ ? ~ n̟_rq7xOq6{W|oȁ~.60>;Oyx}wf׮s`rݟ Ĺwߓݟo՝o=W+_sF(p$~ڟ|_c7[Ǖ^c̣X^Wc:?G3+O`z#_;GG)iSwq:;oƗ|Z>u>dn9?"ﭧa؃6C{ٷũozqY']'uC[w._3x??v\擝.ԭ0q#Gj;w?{|3^`3_~=UGW=>*\o{ #pH?Sު'>?jk[NE푟E?WGb=~6zѾxiq{ȉ:>]~SwGgSױiiqNx!D1xIK׾g[;^UxyNz5/\{kW>KqPKwޟyЃ2{==H7r/lDo_(o:f~U|'~`Sx↾!~OޜF'u2G įq$/uk!~&|=?~Z5GC1gxgNBgǮ|zzi<~dx/v YI?|X?9>ާ_ɓI}d,0yQǼ3w,W_Z?q;w'SvO8F`uN_[t?pvj{zL‘wauU'֗{kɬoq]G<K|"Ã}/{oȡy0~g ė7y+{~_t=K3N~}:}GxRp/?nړ߄R`>?Oڼۺ{֡cp_»:C,~su`+:+|\\wxy7'y3ן#=?_~~S;|Y'8 ==Qqy'pj} ||?x{|o{7g __<<|7Yiog[7ڧDŽ'gyp'KK}zaEwSݰ'tyR|7ħx>o70_CvzG|C8U^߲pɃOW1k<%~xzd>N9g~{ __j~X':I9?RףaQCo,_qRӪo{Jt˯w9S: k|ߓ#|rx=6Nͻ%tkp/&'f's"|| 惞yțg&x{3^|elax"@.ߜo}SO/O }&O nyyXɐRsw}~ssO솸oOiIp??c<~ԑS?/p߮ }N%y1y4O~`'qr|}c& g>}s^|⒜^+q sW8b6W'Wo&ס7C ﲎy2/<{w}?{]7,5u*^J_Gg|9.O\98ǝI.-'7Lͮc/OY״2_i?3_/L]] X}!xwO#r%|qag/Ẉ]/!zXgcVk~n^ђ3<|`gz|䏜99}xC_.Wxqo~*q=M=~!ϑw6W?K?x}]?x>ss~Nw=܇#o~WwvH\ W^v^D݇d':y-dYI?97.굍zOGEBޤ?kry𕼢zJu_VxQy:.瑟 c?6cML}Y/x_k-RkOc|L@Ǎz39?/ٮ]aŏL<<%9xm₯L<܏A^[:;kv>?[G>{4N'y_ۼ_~(L8QE>wSG#|a>Nw2oߧU}WғpZy5sz >_o|c=q'NʺvKCztx+ց4|7xwƮ_RGE~xu9xk~K4y$^Kߑ7%Wsxnip~ܐ~>7pN .N-NΎ^ʸ%Nƅ7@VUxJ][C<};z^; 7>g/ .ٛtSzrk3/օ=U{Åv-{z|r.o| 3Mԯ87^Oɇ\/*/S`HƸ]prGv==|=9<\m'SpU>9K{_xq}̮-KGuaqqN:yadX[on/T^;rn{Ϟo'c'< O^KOkݯ|/n=_8vyX\?~ud{_;9#Cxxұd^n/؃\";@}_} =qs~Ooo0%g>/۫}#c'x=Gjuڎ7N W/{Im^Ρyo8$ָ k^G4."4ui~᩽n7x}=slxa{>n<zqM:p>wa!I{v֭_ԩ|.xdC]|IvGw/>î{uSg?/=|./o9|My:ݣ9zs۞=}pJ7{ũ^C~?b9_ky'ܖjs%'}VSyOhxT<޷zOw>x;aK~x OW.$Oh/|>?C~yp>/{~x#E?ً,?X8U븂3 1%þ}or?1O{̗q 7~|crrx9v.y3y{[9/]ߌGu]z˃c9'<< xivqy~_4;Sӵ/b'#߯,_t|nxqxߝ|o_=}??w{F~yb#> wn<]˵'Hn:?\8;Y\|~cn:zԕxͮux)=AP}<]~Y}q; ]t<ө]d)|j}LťΙg^9GGx1t_>cașyT/O2wUC/>ꈌ!ˏ5=:_]AszG3/oK>*x$[o~Σ:zɑ_WtЌq!ns9WɅƅ}rqԟ]Ɖ{o|!3G'Y9[\{s]~&+>W?Ggz쾋kr}CSWs\[<ߕկ[\n;Nyof=|"wq1i\<1ucϓpW-{@)pHg;`nohrx#ߎGmÙ^$''x; | '9kWOiw 8Z~-q~-<}|]9<z|.23}yK|Q<.x-O^:mvǃ]?[Kש}nyY?6>vowsǼ7{Ԏ 8.u(m[n}X~cCgzuV.Hq:y"֫\ߝo}OKu[G%uBWUK^wo=qy#uɻnƺu։։wìPv}KλcBim{V.ﮫq瓛sgwmzL.3'{#Ͽ6u|k^f<[~iKods#-quaB˹r/߳/]L?z㵞8\=ݷY_>z֯O7c9j]u~/V?8o.}L:;ِǹ}:}%y |Vu (W+('~;<ڧ/AR|."~s|r>'^=s_:߶#mώ|A}ոgaj27#|{[|~NZsm<=H_|e>7r}qǟ^2 xVG~>)}.q@I5Qy2>{$gk|'nj? p7^=y:衽oo<3~;66=$x1^8KOzoa卟I[[뺶:6rd pyۮf/*kOZ;'{C?3zf).?GO^/ñuqJߺu;;n'E׵įHH=_oׁWV3{K}v-Yo/xE_y3GxgwbG:~.Zv=zk}Wo_./<;w?W3i}1O3 Og'PZ=2wΧv]Jm #;>ux -Nqʍmb|@ڡ}f ?GnNKe>W~)?`+̵'|yKyw=p-NOcOȃxՎoT?Dw<|rw9Oxګ_gp;؟l|h}ɵo<#e'~۞ c}O4>Ɠ~|y.\T{6)8)E2.peb}xȅyg6/;[W />i]Dmup"{n7n/eyeg]8?W7qk6}d7GpG_|xǎ)跳ُ.SOW.ypßgDY>+O'j<^SW8}=oZN[=k"xsOӟ_O*#im ~x})<}d3 WE~ci{z~T{2;}p{ϥ7ƅ]S}LEynS}vG7L_!ވGaq;'::=#o妸:2es{;`_<;G|4󕼏u˞t+Z|*C2_?\|/gwNWɽV3߭GٗǭwȕQ>5!;yp#y>+['qiG 4{حS_x4޷y`Vwx~|xO=:a:t#qpυcךS/8_S3nxgج[4o+z(~|z|t{'u['㈷ڧG^1yf78ow޺sz}g6{Rv/!'G^7a\uud^G2~{c7=m-(hMO<Oq8l]}q&_>nveLgrB9g~4_>{.~FvʸOkֳmg<~5|oa^'g}qC;cygK[OƇA~T]O#jqvW8[c{=+=q:Ŀ|^87ÿ6ީ=Ɖ^ں͓)3YGO+=qqF:|f}S#f?S9Owq9'kqq(hD,.N*\{<iGcځC8o#c_D OOӉ}:f<|3~a卜ҳ-}zìh_pOh{{av]lP'qYugNdx㖑k^|zko[~Y\ȳ'/zahC֟oGb3SG/-ȿ v{xí}Sy.>xγSwrzsww!p8uI8Óv.w< aCc'=HO,>ig~uS9 zi*s>2x\xb/`zK>yP:>6y_eW﯎=ů񦇷y*rK')g7n^gY;3}>;<+;W{zi<-_y߸ō=y:Gp|oͿݛG;ƞGvrx%^`^O.;;캃]sygxWB>'^H.wQ9-O'n7}6qrx:z^7qx_s`>'X};^v^.^[{^χ3|/ N?'?MphGv<?٬gC׭_P=>xɏW=\5NOy::x:اw+<կ*.nƑk7b/ȹ82/z^z?ϙuWO{ ֿy߇d~|~}Swd7߽qmQ?*? 7~}gϊq&h^=72䄝jdvOOi+{1xv;:F?Oz!3ǮpuϞSsoz9ҧ~q]m}{}M89~O={cs%/Gs]u|[IJpZW͵G-qGߓOy'~< ^=ru]s -_7[yD~n^w`v7z__ot} 򷌃dJվ/n~=# /u?0]7=r/zy&h}׬z%zuăӎgwo>wk}ycL~ty{>ō7_4}/ߛ8Cgw#OO;k)_4xjG^=w y6k?5Ɓ}?1or}q6f>>=ˢ =w멯!ZG3~g6u]o;xzh?]~~w=$ík1>{@=up?u4]|D /ծcߴ~䈟:x;\>zo|b۝xeq>L// _k=\*; |n^nv_unӼM~g|׏e/^oym<t曃8k7N.nsf۞ڧ>-w?K<߱S\Wg&O7^yM<\/#=yǯ_>:%uL7Kof\uO3<5ϖW׎0C=bW⇑Wuz}Ab?K?}AOkȕ=pjxVO>l ox .ھS?9?h\;ߟ.goNz뇚Wk~W</uyokzk uouXsT;S_p>îL?ũSO^&f"G^}?lg׿lo{i+o|k౞{ҿSz.~ͳ5{p`ug7pJ>s[_< \7ڭ}^wYyeǭYl||=[g]m^뛣%vS~h);~9g>6h/;DNk'ߊ<Ǯ5Oj0qԓ3柞:uFq‼N8AxV_C\;߯xO|uI>[۾]?[Gwi"ّg5U<7[/&66~q/_^wZ_?x$\OŞ2/lcqx6>Sq4 穃e8}>xagIcy_~apΰ]of}S˷ٗf_S9Ƨ]Xgrߝ#~wq'vy|e7;'2xn}S'qC~9Үọ8v㗬Kn׏zo4o5UΧNa^9[18ƗهKyG|gz `kģv?"~z匜_O#(i8ȕ2 Ľ~?!x=j֯xXߩ.{}N ]3߇6}8ȞN$z}5#M:?0KƷ՗w fy$^y-OO+(%%Gw>)#>7~h]~蹇1~!yƒ?4x c?:^랬:qP\H*;C^.|'|O .G#q=ų7Gxڛ O{)?Z=Խ+x'lAv\}:gpt_kCEWV-7xCσ ì_.}|(r!VKxv<ˏwB3e>q<g;`_O;nl:t< ]/=O[t'~\8g?>x/ѻ8+Ϳv'9:OӼ0vd}UF2n]3?m:#~>櫺XG:v|ꞦPWl;ʇuzœ=xfgҮCĮ瘼~i?-#s#_Tk_;O_Џڻ]os=Gy%9䧜})۞1.],t5OƓ^٣ۭO^;q!SqjgOO} obk~=g wnݠŕ~-}gǭey9#rG?8gF>7`{K;%kBCrZ#FOpuݭ< aysN},CgxS<;>8z{#c|7yoPGO|/77^r?TG:?k}SO?sO/k|agvi\u~/q?mׯ} N wJ0׽{YU򽉗5ܗ~j\mqn=}FO6_/ѻ9惝+>=vsl}M;l`#<>ĉO.~c=_Eɱݹ;yn=\'?ȟ]qǶKƍ`WE$n9~Gjwȧqr}G?ug卍C? >?<9G|#!-gx&g {<7#.~[wM]yfwvKrw0:Vg=s?%uWm¾Yߧ烃'Y|m[{ks6poWvd]ә܌_vfG.=\?}v]ʬ_'?6A~?M_XX_׀S*ޑ7}x3fڧKU\'ƥ|^~Y{dG[Gui|j'+2}%~4>/>fO-6>81έZ;Z~_z7O|#\?JsWo)WuE?xj"7Ğ]:cFOTqeP\|Y Yq[ ~'!Y=J?u]#y5cs*c#ã]]<{]#hyx'<G_%^SXǘWg:ϗclixu@|cI9C7zh =ynBn'~}e#v]cgf_wqēcSx?8œO_?OV7αx ȿ^OQ=1U}|<3|R{>dz_Myș3\3_OGgz3՟㟑_zXkK2/xyc<Y\9u#/w܍׌Nkf|+W;=ۼyd7jx=`C=,%rʮy|%NWwqcrJ~e[_=u^x_36߯/zn[O:3j="ڍo_88޸ʇu?#^48z8xg-9cYv{S?94kk's'Nz #o͇E^r<~?>7|ݯ,wr_mЉɗcX?W8 6n?7ve=<ǵq@3\mu؏qTgAO}!X=OOAN쾦䃜o^8ӑi&{+B=gq_-^;u?|; _!b?qzGko:_ET.Ŀv?1q+̣N`A덏їЧ|}>︑rո|S9NKwlW<A W3ko덮eS_{u/u6dLg?*ƃ?zi#`||9?击ngxt`k.ogvJ{N7CT]7Kf}rbwv!O}u,o{U~we)POq]/vJ<"xDY>_|N~gv^Sxu˱;|}T}<_kzVs=Î3&}Kyx='c}g<؉+_o~_8?*'x{+LO2·GR7"Q䟚'¯Ȼ:y~6nUNG`|яyx}w)yjLc>j(ӛ|۸v=(/"L}q 8O{}pfșB{e'~畗bW~w:sz{-}q]Ko_Z4_ycߚP'C}/^-+?oo=NYoBymo-7~y}$ހI=O_#~qDe"oN}d'[GNͻv>~;d\viq=;ʼny6x6gyk:~:ӏ=SP9̯ l궧ϥfM/8Gf]w?~Q9_<]|x,~%g󔫇^#$r]S;@.bG=_?0]>8>TG]/O h]}[8yhzz_zmغg׾] {..;qg^q o^6מȟvOy~7#jeNq>{zOOw{q[_m?[U[6{OO1y8طՋ=8>Z?g]?ϗyϼM<ؽLr?xrǫ3#˯nٿoxADN54y^-7e>݇}׶gRτ]=o/ x+y ʼn:]G48z C /sr=Ӄn?nw]ߺiʸl/V'f|6MCƩ'zi$Wp"_Pצs3>_z&'|Ɓ=.:/rոi+=ʙogqĮoTNdxq`ߡxx:WtS|P01_G^9mޑG_>Y<2.?ѻ˱o>su1v3~l}ʬCX]Ʌ4 {">!._a O:X W8LXFG7p?u/E3v?o?ɼ'ڣx{j]}pvZ"wCKC/&jz5>6)Nf|^n _&ڵڥSҋkW~ߓ?%~9s$/{h #\6> Sw_?Ug~L|{75qHz~$gxd'{^ݾ&kٕ֗~򭇛y-'wPGIj~?; [Ѻ{pz7Ӿi<S!:8ڸ6.XoOz58#g[U _u@[]dcs.l y'qGv("vC.nݣxkC=Xxd?갿:n+n/я>D?^Ȯ~lx;xbvI,64yw֞]F1o-,^}3lϳ aGvK|=8֞`Or痎My.NZ?|}.΃8JO=}}zU{징Q? 6G}8n YɅzM|U+bg~zDx?˸O}\-zzƓ<[8 1ǭ;GO3]qw7.7pƝw?U٥Nӭ61;p~vߒvEύ72^e`6zX??{+_xoD?n|yy䑶ޡyě Z[OG</z8|㿝cZ;%~2uXm9nrMkg|z?ʼn'ps?zv8''{z$wpܭ`ߡki?{n3S?iW<]\֋G^ Vk7}SZ\L|y?>3Y{cHٟcxB/~Xz,꓃#.\p晼늣}>A~|sO)Ѻom!.1W{.?ݟy_\;lS@>bY<\<8<;vs<[?3$=6~wE4Ƶq!n>^^M뙿!h{r{پWӬ'>9očgrgcm3>֙tw90g⁵K:~Rg b_S|wZi{=;{GGN\DfU_e0G~.BO/~כGiy|NO zBnu퍏x-9Ý>Vnbe~ q8|aO_vŭ{|x3?1=x^Wsd|CȉPS2G.uOЃqYO}se!1|V'uco:KGA;m_;YoC/l1rn~7?a\=s󬃪?˺w׹u w)z퀓Ok}A9?_ͺ?|/zkOËuڧ <4.#9$*yʻ8s=w/1Oh_U7Qp*O~{BqNk|4A陝[9?KߓmW G+wcew κ++_omgǑ]~S3xu~uOvcW[CU'yo~C!=?ۼq}J?Ӯ(UjS_jk'ޏ-z˻g+!OxLo}=X~ ǕO@f^uxv׫ŌCz37 v?M߿yq_>jOSSسk_~5u:|mW'#~.k)/FK_djӺ[>t߳-yq< nhWc6KogxZ}6GOټ|'sv1_C}1E_Up%?|w:=Ӛq;w">gQ<x]kg뇸9>-=_I=z䙗{gx:|m}~X4Q? c?ągO.{6^>3_?P3z{x7w}Gk}uncGwGa&.^Od+ ׾(xJ>Xyӵ{seyr^,^v2a澻ziOu8׺08[ϔ6/{ɴc_uE?4bVh~Jr9r%?˯d3?է. +}ILr_6ZMsxT\S}}}vƏv_?"]6{״>'Ƌ=}!{\6mn|? _uQpQqxaabک{}OinC`wu zCy9gKǝw:xŮxw|a7Ώ>Y^6_|6?pp-/ֺW_}ĭp?~y+'~\}"ox~ȏ#zN\ N>j?gܶ#qGn~=c|m~ 9g=}7Ol)}SwBO3 ׊Ljkn>oy~{m>y#'u׎x?p4Y(nh~g޼;?-7^rZ/0Y8asym^(h"y+#z'x#zx?$.Ҹ\$S;; O񣊧<>Q\WϏ:؝߯'xfA8|fh֛:z~}Qpu;>{5 _`\샦n3x9c6ΰ|+|_4}?5kѬTy8&?\[w|O7X|<*>S<ֿGvj^P=B ?5?J^3Gof޺FxC̃q<уgY>K;? ~۝ۧmGOu},;8?XKq <~v>O/Y}C<c:z}WS3</;vJ {^r:Jz?_g=|yO{xἳ8#]b;ѯQp} &+\w/={ryYml yW[|v9:ic?S}kƕqrޱ;gq3ߣh'?xxvΣ>g׭^^ [qs~:?z"~]xcygy]߅?77Eo;G9=УvKozZ|*Ws_=]<=fGO=F _m_^_MԫT>&^^yiǭ#_~l/'>'~T~/q{OO7 q:kT+i+?q3|sK;G-_z[٥n۾з+'7O<o7crxm4|"n铳tp[ߵ8V{l]ǵϻ<;.[S{uK;𸏇~Çq'|| w߽k{~=Ln՞K<~b/.D=!Auy_./w鴟}%Ws;]lxܒGn:>\]g|p-_:wwm7~x*?s[u<)><_zݏ: GZWb۬fuk^3_o NϺck3__ת3{wc?}^ڸӯO{0^}N]Z׮ˢ߾}{vm<"ROսw'8|><4[;EN'{v~~b0ukVy~8nǶh=ɑ_=^2]p4yq~ٮӷN?=H?bv3;>],g;Yȫ}=(}FC;7Nc'~IOѓM;9Yh"?}kO0oq}aϽ=oߓ]'Q!ͱqu3_8})7ݧ=yGk2Y'7: J83|SA;6Ol'~Cq O[h|}gU/k\2_~}E<;|gY|=lNԉ/{Ƶ@?<~!?Dg¯r'Gxk#Gq8ţ;xs|e7 ˛>ѻApu[g4|pi7#^px~?wW}5xz/y}'~xďvwz~8{ͣl^`nrEUR;'_^CgǑ|O݊`wI/v{`V<oZںjo3xJ}'K;<&^yxϊw<|8)4e|{M)^i{çWݩ'Z2->~(}&/WWx/51lCqx#޻w')C7`ww<^Oߓm"5cWoBυ/f=arz<C<?˸|?K+ᅲvwwv^ c>Ez O?O_7œ8#Xyڭ#?8S~{.{+O~ywZZ}iiOqu_o m~ zL{ëy@Rp)7qڏyM"R\pבPɉGTnI~7-.g:rVqE8wz&nvX?gq ^>yz'?iO{+{"_F'9iݔ:5;8\H{/sOc'_lߧ};#?G^g<7u7/>x9O W#x;Bȱ#y'ߍCn3x~{v=G}3\x {q~q5n /<&} >3gO/ԁȕW/"ybs{'񚌟8'"ԸqpO{oaw=/3qώp~;8׳z{Rb {U</8' g,Wc<啣,{0&NTr겍h ^7?d N7w;0>/nwyv +<;5.r^2?S.l\=v$./歏hi/)7>] OB7@xc1oߺ ;9Óכw#]Ovw^ޝ|yㇹ/rgo~9t#.'? cOƓ:O/G#_e ϮwwIq vc!+7\x||=aN5OsupdЧ͛Y?* ]>A+<z<|Ƽ?R&z.\GGv?e޶}k6}pc7?~?ǏS['Ʈ[z/8B[U7u޴v)W=x~gD/qd}ވZO] OͬW4g.rC\ԏ?1g+x'ݿexu<=GomGGc\1z₇}.w}ƮzG-q#s4Zb]uaJ̓qK. q$~5yǏ5o r7pF>w{~-{z?9#V;y^'z*/$.˙C=1yN'o?K~;I<2 ݏ@>7v>MOzx/#/uߟY`\xa"roܳg>)O~>|7G޸y%q;Nixaa]z\x̑?aZǾᗨY-b`Uq:C|[򻭏c(5ğ-O_?q<[WYǎ/߭-=ޑ?n^[5>~})~o|u]zK䜜ѯG|zNA]cW}ߊ'<=bgfOqfIgƧgL߿opA狟rv/r?9_Ov“P/WW'K1V g _cͷSh<mon}詍NƓ]~C>v98497s78CQW=vG8F7ٸ++&aZߋ7zJCrÌׇgj5\6C/Ї+LakSWC.K{Ɤ;~Yq+~g2]d޼q>O٥O_[ggߎ}ύy8o|r¾ xJK\0\;=\PǛ[3 #k}yaѫ\O K}F2Ń=/W&wq~O_N;{}퓟q3y&Oz䎼??$cߗB߹f?<~-x3xpÇ~mtxo^hb~L^yU/?SO?_wi~}‡||C=l?;}CNiǍ~pN@{fc:>۾{j7>]{oǾy.>_q}lsƯ\=Naهl{XNn>]JOsb_c4='T<| l]xy^k*op|vx}_s_^<'nB:{og+8Gk]~ob>~oy/|Sjp߭gi{ Ox'=O['tW򂳯M\}m_Ǹl>K{~9N+Wp#gk)"E8zܹn >;ȓ?2\ws%G]'xXO5>|uV&Ÿ[ [_@>4X'ÚL;6Hq>~%87OIS{Sgڹ:|hWώ}.wm7}wP1qx٣TxSgsJ;ו>!WH“v֋tz?5~' |KzR}oJi>Nhw%ٷȼD8|y|'eObO=z^bq|gGﳾ܈ vOJ{x۪gS҇uy }[J}ON瑫|k/sg ħݦW>Ǟ}͗s|uǣmsEu<AG~ϙ|VOoeG??r_/wt?ǷE~`8>kS9wGYѓ3x ~Ze39zOW6H~0z#<|b\7"wp8[x6~C|8<; O]"q{ةiO:gGݻ/8TOMc^Y{x+r/䛼C'?bI\?e7'(5{sدڷ8[4._[{辞w֌C* N/K oWw'̾G:d.>. L]8lytWh~OOaoFWYvsMw%'ꦝ}YܑG;#58k8q>k_~~8|a-5nƿ使?%m!^ Gu쑺G_M)yo^86nnͺD<@|G}^m|ܳo}_aߣ;Z r};"q3g}'O>x?>gx9SWNOKܯw[\'f41y^ǎчʍy&r̓+O|l<6.?Z?vq϶} gc;n''w<x;Olxzuw;+Fߜc'}{]2NNE>q do.N]ȏ'ݟ^v$)L_?lvn!=ϭܒ/t|j]bڵ8tuƇ]vd׏7u_eۍF>\|@;7z>)E'u{H~ G^GzsW\w''~;Nj};f~N{8Z?myv~\}?/p߾gY+^9Pmy"xq1o֣|}5>F[vΞ7L^ '&|Sw#\runs|< ]am|}g=aA< ~~;^1NpobwxE:+Һom">~q<7,'7^]~ #'u}/I9»ߗo/m|RZF^pguկȟG=_;O'$.-SoOg47>]q$ O z~/\#syiOw̼ȣг ֑iwuo<v~>6vƝn_|.xv%_cߟyh]ug;3#?wا~!2ήp λ<9v_'_gq$yX^=W{x?L~޼uuƁ_Uwxj)NJ'X{a;~٧nzuL>"q ֯/+x뿙w[fC.'5\^>./})之;~@#'{੟gߧy[cϣR<_uƏ>M=;'vGW pPw[s>}<4'rW__8>3zgӉk^ O39OƉC|6_L+KxWp8:9ξ8lq֡Y?#^]jYqx;𤮀_þћߙ?Zo%ϳ@<\և&~ O?q<~'s|5r|{>)"[_ՏۘɷmÞ{y4:!|qO\}5ͳf\?}vvv- T?-Mw%wyGAv,+Qtv|%sߺԟdlf_2Ə|s;sB [B>HcV?]oˣ獇{ꧏ8~Gue~/$N~4yv7yW圽~ (B _>3ˉKOș~52N5*7aw屍?=U:z[}6._E[3M.7,Ot8W xKgZK#jrߺg̓}U26ߴ^̃N7q^`'ruB_r~/rʓG姉Sooé.qIo~u9px/z8k~hD\>_/+}[c/_X?uc'8)~siqk_?zDdžty;\>WXeT3e|k3^ݾ/~]pHSzt.\x\s,q}"'3>yQq{#*=œyj[o!NGny8~<<2ȕq~>gr3Dy?wZ<:\%Owx^s_po8q9|ӏL ?7"GMNn]ޛtœqz]T {F>GPϦY]#_WNSG;'=ߝ_q O$gN5H?6x:g]'5q_^~pCΗ/a獏~<7&z<k^٧+'f›1mjp#Wd~-KpW?A9p_5?x r 8t$g6Nn!pyp>l?+lj+?wg<υ@MK77}оg4o_KSߓvYw6|Ѹ5i֣[pP>9ou9><慑KJ_}s]KaX>s_籯_%>=_4?>;G/8h%vmq؏kio{z>nQ]\9]uCc}I${e5%G3K>͛~׾G-Gé&ey3´.ٯێ{?}y;nj'i~YQZxF/OoSGw{n+'^~=or#x_=3<['B=x"oI?҃';?[VDy}S>:'ϋ7\_qwO cOx }$=Yp^~B]]yG[ge&r9o8{5O|+wkof7_zrJ/}:ks/aȕɓ'G~Kox~hDw_~Z&GzK~J;w?ʹ+s^D>nvyz?er9j;N?m^+""<{w70Ǜ}&>8Wߵkqo|n\v7vS}/4Np'˸F~8Z^yokc^NIO y_Whq C_0o4i>wQnn꾻~pkiA]SNcOm;wk<͗ OƝnlȗDċsW6&H^>^ۺ"/q|χG~g'~֯2~i}Qܧg>Wii=#W p󎷈GYݴ2.wxX$>N7>ܺ};rP~OOi{"WDc';GO7o{ ?uRzxi'6񝌻/w{~SC!yV~]HnOg^xֳ_xo;uxop-y~8>)Kۼ92Sn~hIG".q^~}]3<x!w=Wcxkc7~۸ |7ODݸOO(}e }o#7]Ʈs5u# 7ygx~7sɯ/?4~юWfP0'3O}6|~Q}@~kU<,_}Իoډ#kߔ# />8GM{e{7ougⷳ.~y|}㺙7 دG7z36ny>a^owiz 3S`Cyf_Qk}ym\.riGzxhh ^QFѓd=n.L;NkzG/})ϷSo_oi;6qyO~3^Ƈ'z!rCMU̸?ߝod7|Խ77xgGykP|H܂gsYk"&Į7dו6OYzoo?vuxB8Qq3n=ګ#ၜk|ߊ>gFN<7:1Ejߧg2;SO2<ˑ'O/\}%#o}[ÿ֮9+[Wߐ7[ȣ~8Kx:|_hNEoq[߭3^?{/)Ck‘+}?]?%=|x%c?~>*ֿw$v_[[Cw=Os?q>nZq~^;<=_N?ȵ;q/sOnqx/7b_ OPA;#a'}^8۟7v>tf\ᓼ>{.Fn'ϣ_7|ur6´`KeO{'D7ZA7Νx..@/ױwPk>'5/}:oy+F>o[No摽v׊ξa?4.}yedpk2ncWχf]N?8ZwOg<ͧo'K~v*s~>o/r5^iݣ'zc9/O4~M{Igc5GI.~DȥӇwux9n~W|qnwf\CϬ/j\G?5Wcn&ɽWma['&IE|Jx[o'ykm|[7q}ōrm00o vvOw,eO Os:z>֋o<'Tg9Ȱ}g=OѯxA7+Kxj9=En#*w=}{YqyNuf^V39 GwSO|K-r;|~9j>SW,omgHsxu|SxHOF߶}_r侎oy1L7ι y&:σW='?|8|yY8u?ǧ)I^rq9vK}Kd_wcǓbw{C0M¿%aޗ?|Mڣom]y//%.n]eXF/;g:EugO]y?%̏q2z vqNm(wG#o(gx#_y*.&U{2 O7_=;inɷ~H;۸}A)2f)Ͼ:KxI|C_|>kvo87=#?y7\)[o}'5&~z%^{׋FozW^J.Sëx4#yh=1'rཕ̃s3U?K^&wkO/98{.q>܌gS+ćf='q|Oz;&I[6zu7ߚ8҃ ux"}q=B/w'srO?ϛ?On:Nq!~,|Oy;.>>=ρSGS\ldyꊭ7_ynw"xzk!K{nU}'B8"yO69e ?|8y6.ƫx?Tu| {Jq9#;65_M3x9ygo䣚?xi'D=Q ?4~;?< ^o[7 Er=|p;9z?G)nGT7^:SK!<ٛq9?"0?cW|W{^x\N_Ab*OcvovIOR/dعprՏC<7s/Γ|g'ou_ϼ}oͼgqb ~^o*Kk|ܒW~;>ߴ7o 6qg<_{<־[';~u:=Dn^o)gYe҉s;gOk8zݭ}ɓOk<;ofwOѫ|WF~7I~7ncAҼl~7O~ݧ~} \Oii|bkxbybj"Od&~?>U=S/_{=+ϓq&Gz jw}}p>'|Dž'e|%;/CiL#t9޺nکʳ§w]''@Oz~Wp|S~>N^|w񻮳xtء\wBÏ1ov{w~wߜ?U^?~"On>/_D.w)kx:ן ^R@<#rr)@ΛY a>gxڡnDcg7Qvӛ7.ՏƫSK?2|vFƣi;~ף 1~Ze-3O^O7Op~lb'9x>y~Kpݏ8L}b೸|fbqCn>5=w&ϫߴFv|`vG5.y/_Q{ا3<]+\E>2zt߳.vƛ/ _wtW[~{~~ ޥ=G3RٺS훱93>pKm܏}a}#uw9@Nq+~³S'WHnݟݧ7{e^Wuh?ug8vo}O>^!w'?x'I*i?}^ާ}x;nOxxˮǑ_~1O{r}G_N;L]I|3|4ދ32Q]n ~W_IS஫cWm<p S' 旞bMkpgg1xX+@[+Wyy&<͏2|gG7ƥyxzzJ3a[ξ{?K/gH?߷Y3:W-u9>*<G+uCk}BɃqa7?p~Ə>'zIx+vy%J+K=Q}pOwy7.KǤ_~^?u!rj{>^[~SyzTܝwy\e)ء's=|S>?63ě%./#{e;3ݯ'E}(pSyeOis& vNy?v~:>Ȏx4}b/,fs;sM=N[oy}8x#Yq2v5ծy=PI=wrs;^_C|z3A|OcgO|q[uGoď^u{ϯʟ]=[и۬]x8ٮy+(^>勽G}}Sr~$}n}3@rn{49:<7pֽt%Gs=wf>6d˸d]y'_gp(?a884h]u:>ת9&;=>vܷgyv|^P}"OE| Q>,N-~Gx縟胭x\=bڹ ={ћ  1a>ꏆ7Qwr>gc9Gy)y!qy%q$p7gLݏw<8Yy{6||ul7פ?=s=kzN;3t=H~7#9>;oa7>{|ɾQR={5?SJ7g\Gq]Rq|6p_\\;>u='{_c<%}rv.}c݋]7?νQ1u|\p7G8{#?dm+X?IxcWV޸{kO~6_'Gc?Qu{W_G&7gO3Oq8:ioqE>_?];~=s; ק8DpWuoߖcw{z /oxh_zi;~?gˏ#^8\K>q8;.KKqWv~gOϿx/s޳>3r~z[^1qxA./6g:kocOCR/\?,/<y:>~]q`79~<<,o_=Vnp[\hߩ܌޽xm߮8ڥgy[Iӭ֫W|=_kps6=yzvGKrrvǏx[WbRO]-A?^wՏ3~y8GgVy_5oFh]UoR'uXxzi9὿Oֵe%u/NʾOSc\m엨QIݭz]cѲ;L}z2|9(֙us;[=>qȮ;1;;TrLw~7^l zW/GwuEwNw]_:֋oݸ{To~vԙx>yڵug<9ک>}Yw/w8몞_uzkYkb7鏏}o9]w~z>{?yz; >;#W_`#v>dv[?GvݗӏGw]z}jg=GtDx/㏧tf>sײO8{t_݇)_cׅ7d]9_gQ/1|ǓaG>Y?μҗrm|u{'s>wA<'''iߟEW8~/7GE_]|gOW>~#ŽKxWyӇ=.w?Wwɽuwk6)?vq~xZܟ9z2{v9WǏO~.|~! gi_8޹iǹq垍%9:^iOӣk/juY;vpn_ S;Z~Ӭ{<紋( 'cފ3O2Op%e_ӟ_h_,v g₿r Yq0{" />A{Mҫ$7'.lf񼍯j/h z7Nwpϒ!7qq&qSx73Zxy{2/gWܞ3g|rݵGkrw7.[x2Do{i8ק?o;xxv^GA^m)=wO:s!w^Ww; =8yƵyW|捿o{0ùO{;O˃;/=2m zK g,[F. uȉ,`O<N]7(w_w0{/?:V̾C3/pe;[wsm>>yS?C} {<q9S9_ݧ}/+Cu|[ꬌo?|\˿3U8z%mK?“yWOqxAOcOv{0Gv %wg]'r,g/m]Oxnɏ< 4>1:>q3} չBq 2O^gٟ~m<-ߋ^E^MOoփk|_ogKoP7r%NW~n_Su}ロkO]|>pem~? G?x//o$nb] 6}~|]c'Ǐ +Q\/zğ|/x]xM>x:}>WȧdžęKwnxvO?eb];gxi]yAqG{k \x_\c/{kS/ˇTq{T!nݞ~d>J=Kv}L.][0Lzzq¬Cb'?}䭍Y<}?5b?أ*1&.,w'ɯo9;%wÑyÃo=[ҾZ*oU-vE3.g\㶟įJ~+)\|8z*N@^3o֟Y0qȌx:?GnK}~}!x2>Yg\gޝ5~yY^]zur3r~yqӓOw/,kӮ8O|>Wyjd}?` o ^uGN4_<y SJ?%׋a{/ Ot6n8b{  3xv7=mGmdQ~"ڡǍ:Jgf|[CS؅Wrzs4~ۍ=|A3~F˳': 2Fh?*dz:]k<䉴G]B'}b#u|a7_2([ib=Gx66>^4Cc{z;{gxJ;o7Nm3gc~lgkl.Пp /}G<œ>O|_ꋓyx(]^S^Ƚ|pqT|x_[O<;p~~kW5?9?v@E>Iq9snɮOgknM\J|mvGg+hpsv|;{>r!2>wG|{_yKN8vZ.H@xzi/˙'tm~!^~%L܏}7~u_!Z/1[?e~~xȝ}iN&;G\ Oϝ﫜[o2~" 7Y|\gﺩ;}_CA7^>a~ߣ8!9xz8FgA7θux./x/Wxe}Nki|V_ Ok_ O_krI <}?kbygyk:(8ƯuIԋgNǻo+wiZ/*v]{џ٥q& ]V|8?|!ol9O//IOf*~s⫭b\+Gdﴋliq3=~_\W]x_xyK{1~':Cu?&q4yzLvg~wrrRGV8o qYu~p[^x{Fm@Ga?}xjO滿wO>pOZ\Sx=suz}"2&r)g_rc{':SDnr񀧝|;ytr~Goq{OڣyXE"\7 ?{<Ya}+wz7(r-οcϸ4?ʼ׍KgPI^Oyϸl<O?Y.M+4gz}qw}_\Nk;P ~߷~I[{'z~}_{3|)sGī6Ǐ]g߿~^` _<ĝoL=^`\蓳|9vBKS<9 nࡼΑž۝_8ԅ=JWx^f\}F.p !KOp(ݮRn}1O5Oo/~9=1|/6[O5uדxɻ}x ޾uX=U[|̟I܊7y68).͎ )b#07wd'|ų08x 9/9uUp2p>}$uώS'9wwy|P^_D/9i?3{[x4=:uo:>#Y9 x2YcA䟿r`޴^|8lN'99?oy{6?v*IN\|D?"gp 3≾^< ?;o)y?<2pƎɟ7oi+]:xB<;#Nʥ眽HG\Q> Ug/\ODu>n@[vL{<ү4\[쳺=D=^>w7gQ /\=:)ڿs/}r '7?Z0sY_Axs/w=>N~W,ySVy?_g}߮cYs.V{ WX<߼YS;g <:s}n}1jggc۷:zIu}.ꇦ!xGx ̇d: e-_#Gރ)iyo__]7{6*N.Q=ϼ7ɉ;[4Gq aEƟ^.y [}ݷDyc“~3<]ڼ KwdOv]]ׯE;>ԅ>K'>f>Wz|݁u v[un'vgrC<^G~?U}8$v1`ڿӟWS׸En=̡Sw~Py7 {+r:>#~#-(B{jM3CiOR'2{_oهH|ovӒNHyasQ !'.tx\{n|gӉ:sE޻OWWCiW ; /]W=^?gACp.Y\mc)z'7/"zyy /^#:^ÛyO˫7Oۮ٧Uwwgxx!|7e7͛: Ǝݏ;cG^88m'x*^O|n:YG=O.~3eok#\SAxN']C~ygW6['q@\C'Hݷ>xO󇧴nf<5l=|Q{G<(OyFNܼu'|W>j?a_$ئ/aGCЃr O[u-COW{[|/ƫ>q淉׉F?WZ_ Q$nb.=qдv+l&\wo~ޢ>`ѻ_O~ԅߝ)K>Yzx^RG?w]/W'W;}S?GD3c=?Qqwx2_=ęgz^u(p'_r.gkI΃+G+^ 'hLu'ϱ~GowPz'ͣD^}h_+.A|9zO~ּ۰SȻg Dr=o^纟kuմ!_|8^n<!CApXo3-?:3ߏ|SǮ9gd>WryxD#9/oj}GvԎSω_/|Q B#_4=?{:_A]ߧ~u7f]%{}[xb9g c<8;s5xE_Eɉw%U|LCpcsŻħ#{?-/]?s2xH]DY~,/Go?I}CfCDž'qEA{jg<%ro 3"Ol ;:|g?9l$^&/S{DrTNqx/[S9ߛA_K^yo:5oP#?D>|={<cGU/JQ[qU`iF|ƞmGˮ J;~gx'nf]O?̣a[\>f~~urg<;#OɶG~AzTxOG\f]]>[(u/}3<k<]g~{vufg?>͙5>[s-iLQ~gqdu +~SEgZxWs:}GO=[?=OGD~ןl7>⿊oX}WX<+"}lO?8d\'[Ǚ&v&e0?Y/;xAX06ϵaTwWc8+"%﩮7f?]ˎu2L5<+{+_su#>!_N}>x2-;_֡[9/x{|$CN#]\~ϯߕ˼K|9~v3./!j}]IyN$68IZ/?T : ?W]|ϯ?_h+=|@14cרsZ=G~Kk%?܎z^q 8>?yFϼT.q=uG-zDx?O~7yG/u?iNL}#;oAZ^=O'4?| ywh?Os5wǜ?=v}G r+R_ /o>>Fe|si)z?_ꓟ}X!:W^DO' ;Ɠx]|fS7Cokccg|pZ?_|VNp{u Y*>_{y7~t|N^h<K;ٙ}~g7nɾzYOօM^ӊrn~ǧ#>=pDo+ uEx)|!'ϭŒ>'ixb?gr.|O֣?{N sY?éx:N%\c3yo|䃺gցm֋_z.rOĿ,8Egb伆9XY|br]v? OZ^ݵE~eGgyⷰIR3G^uw;/Ɨ3Ge\Ug[f}_xCgȕ>ox'F<'Fr<'¶s^{{~'<'mw59@u6h۸O>;Pr>rO| z 8^rݾ+Du?y"~1_ZpD}fGvA@~^ io)a}uY1oG'>˷,穋8'o/{v"g9j?]GIxYpى)|O/H} |zм|w&&7`wNM0~>]U' .ɷ9Ni8K6|̜Qzu , p_ȓ]}?e{$.N_ɟR%^M|Sч#6w=b~îZg5u?{]$q,&z>ϕ=n8j<'߳uX SJv%ާY]1e6@ 7xTySh|oG9%/T`=ּgp ?/zÌjCQͣ[~Ը*|9zc~Oy>}Sد|#$/rcȷí~׮=v{Ty~cCEv~*!7=7)X_j''^{N,q:/%v\ӧpч$~C˕;~5jp@OY"FoWy-0<玎/>ă據]}_(]!v~G?v|#7RG:owOmO3QTPw lyڟʾtW緈>GboySC=L=^z;N GX<~ ?ͺOf>;:nw3*- ˁޖ>utbGO>?\7uF5/SZlDW1"v̲:B8GS;*^ a7#~XJ}Ww}N&Jno?g:3ԾWչǃo>K.p>.}ӋpSKov%k_/=>]<|}k=yŒzSg. zyf^D7`[On='M;oe'h{?/p}3SSk;^,~z4߳ONo Ho}uk“A?歹=]RiYgvM|~9[ʤHߛ~s^#yo1usʳK]H^%0ND>^ .]P f~_"wvzn/66PI?|h~x89{U~S=8r.9)ް5_[?Q|7iMܼǁŧoQC/^4:8N] Aɾw~j?O^=$H?_9*\ۮc_| ?;HT[pg?㋛o^z~O >i[_am"?~hK80?oV\w@)/;}s,T]:|~:_<>#uj7 *27F]k~nfp8F ٺNһ#/lzO;.Pz %cOd8Rg;G}_#~~'\Ĺ(?uV~wϥƾ</g5v\: z48Cwx$7tJO^yTOK:?L/#WkƗ*񧾎:[Y`Ylx~ˇ}ԳwH|\d{e~}=<~|ϯS':/EFk璏:%ysޱTr_{/?y՗?9E$?Wԫ:ܻ}%:/="+[}qÝ}Kpr|BWuBR_&ε/C]K$I>.xx%_XU/So;ȺONL 9ouƷ?sgbeKG`;ur3KZZJ_Zz~KmCY5KD|{[gˈ^׏;2e?]\p_o09~,~ujˎ/ t8觮8#j<{^ߴkkΉҋUG]o~"g|8'3O|~^&28}~Z~A>81w` ;wpl>z+OK}4#_'SEj͊Ov~ oZL~z::^ANJȻzƾoN?C܈W0/> o٬˞xr+ [ً[6.taGnR >;Jw>]qڿk8AÅ=|to<OSgy|SסV])Pv8yx#ოD.ru?g{޳rnAg~rowzMG ;^;*2߱7@`Ⱎ8_Χѭ ;žYxı{?m=ݲӝ<'sv:]x-s7q?vGǓ>{[!y:##Y8g~?*u,߸u;χ70V~^YӶ?/u$qWɣ`Zc>]>kQqIyo굆oS^#_SZwCO9?~lSO_У=ԓ{דod 2Nyuʷuxr7b:c':ɺx& KϦSo׵/෮/{sD9zWͯгEO`"T^z>篡'ku>CB}{ܽ^ώ[߳9c`p&yꗾR| ?_^_#N8&nev;1bW߱ͫoH^yQq9ٟҹw>?ڿ.w@UG zcI59?l8<8x{aG[#q΃Mh%WgSJ:K<pԭ7Jr4+~GW=]Ξ#x~Ȫ_ͮzEGd_/{ᄜ0~ {K~k=8dx*zS;6..L+KsgST=TP'.E>O\ݮ[~>i{ط_%ѣsֹrFnH|^ׁykɣۑC'<O=q]t7~L|Bxx  ]* O#ߗ?yySϿi'+.H3U<"-~#WI|Ӷ%s &/t|VrN_7_}D^Y/?\vO%t*zcUpBқ3NWÌTx/Ow-΋޵q͸Oϝ1Bߓw7YzcxHq~7r[Lԗ?BoOéSLa?~]~Vz,^v87{_k~X~Ao|~au']zVK|K~>vK 9gƹ.^:ﶾ^hZNK^}A?:vxg=u4ŕ=O^.?uz˃=b=*=w8{s|_@U4s'c? k=k;sS'~x2rv'yH.yŏj[#q&i|[7?fw.[ewXu躶7Uz=!Q'GY\F+·%&zka_:G;ӧZ]5{Y}"kW.`IcӺp@1/GSviSxuT}<$9@N[Mf[~}A﮿d|ys꼻}_@~Md,uK~/<>§q~ e oztZ^ܯ_,p/ƣnǩ~-#Su#|{, uqW3>}9ozik\ڞ]뺾ƍ<? zZ>4]z>k~xGn!s˝|{(:6GSpv:`\l= 惽3;7Ŝ/7߳úrzg>28_Oi}.J},~u -N[%OV޹F:wﭽ4O9oW9][`z]>ǚ-=>8ܷRx^<.WlΖuKTi%NT~xCqwbʑϩ |]~wXy'/{;sxգznW՞  ujD= }/*n~Xh{9-{c#?xW.]6Cf\t9$=5ݶ;$.ݼCDtZaӯ4^6,'>"Eκ~:8m:lYRVGdv=]w]>Yzf:C[}_[uͻV}t]z{ow]iٺƉ^=w1\[W{,{>s_te8͇Əwn=R?E[{uuXnj;uՃzWg>3Wg=V=xuTSd_l?5zzFzɺCu<[gul}7>~z}zdCYZZn? .pߝW·÷o9OB=}uڷtgex~_Rݳo}[?[~A ԅO_5uzUgGi}ڿ=OGnsD.Oi6O|~Dvϵ/{r!/jmܮ댧s5naկ܇_1?tZW[_o]?~_i{̓}7h&}q?Xq~>#W SGm'*互:HS9p1t|eS||{{k\yόI-+\.4?M7ʑ9WIi~!i^a7OI:)(.<-t]6󟦿~~&tz~ Um]㮭y]ߋ9E<3oͿ+3yϢz|pTt]\Z<^k}qqֻ;4־3@]Ǒu3O_#Y Oex/z]g[<5_l9GqjW?O_CZu/ /ʉ>c>Z\lo'+ OWo1V nƟߴU<5_&#vȗϢ-9#*k=7g_%*M}be'qMx8d '^o٧o[3Nx=w,9&.IW.oia#~ؗWʵ?[gCSrx}gKw[^sű%K@|~F_e.k?k. =\~f'vypN,~X-?D9W~5>|9|]yŵ,<_{MB]K{8d38t^:>DeSLkd<wЗS qmSI Oh 8j|6O'|$e*)Fvz+yK_soYd~bG:[v<獙7cpܠ}$o$q<'~Q %?s^͝eoM)AyUi:;!}︆Cp \q=a\ys]~f9lGyn) {faӭ:N.3@|ß{ӱ4u{rw(^w$ʾ>u,4rLO8QyoKWE+߰_~a~FF߳=_ďP8k@{uj4}4xZC,O]2WboCN3cٿ_=~/s+؋Cj~8~D\>oM?{ym",9~p ^]#?r\~//b?~*g ;Cֶ^b/o弖%_zyO'_c}OߌϰOp.n^fwkuү7j՟{ʜTNIC,|f>GeoU'GƯqnKwM]G_os/7O[t(]g;[ܩ˚Ewy͎:Ы/ #{t:S졮7x*$FϒO>KKD&yή㎼%/Ý;U)q\Xp3Ïu}.UYSC~=T~'YRxv.i8 Cɺbt^iϽ6v? /rV@'7W,qʓ8dxo:i{y۲N9##g {. |79Zq٧ĺI1ŽsG I-xnY@n'uYZ]߲7mL7O?)mכSᩯ~*vv/?Wk~X˟Zq>3OkOxNN{} ?{>zpO$F/٧?ynǾ&eOv+ż=3{n3|\uO+zzVdx;u7<{'yqi#;q1?.UU-_g8 ;={D2K|NNپw=R(?dw'8n(iq_z㼗~aps{޻,y~}ms{_yGу;?)WKWoy>gߺW>uf١F珞E˛~>qrS*jYJ\hwh1#1'4~:2Ɖ4{J}ݑH׬K_ѿjkN w0v{J\>O-[/$&:Y\B# :zC1,CN>YqʋnW'9xB{&d>:w~!7~{ ywOޏuO8zȟt8KR>=Ӫ< vY\|j9)=uūn\L/~>NOy"G!;\u}p%ָqrɚȺAڱCf]N!g߻CkxJ}?h>7藜5~G^.;|3~Z8%+9>t:;C|n?W{3nz_dc_?mozs)%{c3S=>crT6NFgw'zF>G}t?P;.Zm(Mw!xB%/43j\/N{ێ'-?Vr\bט_vKMu#7bG/O!R8q=z8+x+B /Cө.ܴ}}7UwUvq7_y|q*-/go-W<ޓg'v\w29W]_1nr}: :?Eu]]|t呺 FGO^f<'9O|>/rT3N(U߯~ni4b/_'~?j#>|,~&^'.Ǟ+{=%W=~^2qvCO{y>=;x睶ȑ}S.7y'~6b']\$O󶧟>񇙿Gݗ>W cObgtŕK|^c?N;'j 蟝\z %w :s!{Nmc/_]WKy>|+^ٗr~|S'.yn4N/_oEOM\oG}uwv>z~!5l?zn3>yV-< owD|_c'1G'} /ߪȣdş8~ n=C6yè禟Ct/QzQi|Y;x r.>3?\CyŸACA'ǧ}7z\'OSp&?Nxq}/OKgiC[Ƌ껸y.w=vA<^5rYF|-uC =Pqi7C)Α==xk;U3ſ#s}Z|+>E_%[SG;oW_$.>~,Լsz  >o,hɃ;_}*C{Sp=W@e7ayglUumo'LߴGNĽ_%ɿɧ/lpC N#j$ݒY ?wдZVD[$“xj4j}yrq@zwG>qeokWx#_-Csoq<ߵ~On'zsIgAOO%_}[īzߕ/F;]@5nSO?|qsC{Ŗ/K|z1~_5~O^ѥqi`OG?YC\zMwh?O7E'uƃCO5go: yF-|{rL}V?8 mVHOʿ"g< =98F#w O8m}oyoz\;Į7}{̇~GG?ij_ƯyǗc!{v-yiZx+v }?<)Y)z+ Ez|o{~K ;8o ?=7~8c'z?}G;Nsؓyw_U|4.'D盍Cvyz/ϲuUc7<=CރG\R?b'V<_G?bpJU|c2ղwy|Jy*)|?z#\~^}Q:N~nSu5z)IЅ WzIΌsՇz7<{SKh=>8b?̃zCJiT\^_-kxpU S֫ls;S?㻞gtyGg)G3p~4q?tK oN95Ro4c{:~47vϕAjzᅽ<̫sŷK?^uQ<'mGSǸw[z~p<#O/Bȳ];qZa'ٌ7|AGS{>'o=th}geu 3<8qDq8Cn=Ǿy7ЅvYmœxD\So3C_3jQ'GG!z{)uuOMpJyg[g+ƛ}|Ϲh ^u{ٗBNm ,n ?c[ .kAn zy_/KwmgA}@ËyF%̧qOZ>6 OuT߼LO`%nW<_ߏ.}?}1;Ρ_Ko/~q`O"XëOGbG3{6^?n_x<4uR~I9[~WYo_-|!O~@_k󪟽MQ=+rjB9:_^H;^6nzxġ.;7wO+󷬷ⲉ־%yG/4?ᓶ,PKikE~K_$[rxz\ 9_te/z'hGzw=+|gp?GO_V~ϫ8Y6?]i<\y]˓iXiç=ϏBv޸_9C=yZ?׭gלsz]y?EK_AofW>*q.Ǝ~[0qz?j1</>F}ϏSI+_);~[zHYd/8.*j;FIyTExU>ygW-?>;.V;s'><>?E≵~xyf 97W]797$y|.I~~4eϡY?хGo أs:?ֹ_|㩞#Jn'Z#j?sI\^Iyz衃؝;3_O|iC{z'hͼyJoLΓ;M?ێ}?V__xՏ/9xOxEvV^2O߱ '3K}DinpPyx"{#z q |txږ<%v:8JեPQBoԵweg|'GC#!ir>}>rt7^r\/q\r'?w|<ͺ),x:O[s>/uC79oͿJs]cƏijۇnw*'#=&8o%zN1Y5gnz(뱋nu~[B4O#;y ~WuwqUB֝z(93_-uYGz>j`ͮ-~Xr}nՓ~xssኝUԸj?8pW}U=8x|QÓ{3dOKSs: F~%|o~XGy߷Jn~]Gi?U9O}N-G.7fɇwv_eϯOz= '^0?~5Gn%7l;ߥFN%鎅|>Dr ~'b?!?—Z/2#7=Dt^Q 2{`k׎~SGO]^u%]=rko]#=Lo#zE,уuƻ/O {dywW˯K^Ꜻ|J$3xjS*v⴯ iGءpOF>ox _9OcI񸏇?='~|?q<ة!ϭ8V—e'cW{K~ߠW2YO/TXq /8͂+GB}q#%=hpuTu9_q>v5SLy7s yJ<_"^y#zP\?->os{4nX~&: n8%>6{{^|X:%+![߿?r|-<^ʏ2#?.4csOUr$8>On%s vS?}LONqJFU\SN:<98'y_Z<7f=Ijzw8{5xƇvWn^*}V{υ'`.;|w-ufɉM5v~eGG?wxgspcoOneߧK[cS:$ɮon ~MwO~__hN|1o8 /T>2L8a-{ݟ8;y͹i`?":?'-(<tƏ =8IX^Տx?XOU_ƿ>7fPݠ7>/=yȓ:?^]XCF_o; 8s9ox~E4!蕬_R4粻mٳ}.槙dCnTG<6u3_2VG|ܱbג39y2o:eq|{CK_)z]ܡۊ[,qӡko瞲-;ϸ'?:>8io'qK=އ }|rṏ=#!<ѓ e'{`W%x;^A;^?9}e{ˋ>os￙lT?2:J&m}zj#΀k܇|7\wkGyGWF%q*<țOOT.~NK{vv'~kG1qv~F>^LKdOc7|/`G]UOcoWw菞+9u3ugg?Jv^ϕ =:<ӑ+&9ƷOYWv? P\:_m'#<<{z#W7oxj?$$O2,>'GRPe[7;9_ݱc]7t8ͮ/υ#}~& ~G;ya p7F _=d^:㒫#O><~;|viWODN'۱sI+{_N-.{u3soS@~o'ixʺukiQ}!_C۸Y+^#ZֽquTՓ-y͒]ߏoNvYTu9u+^/T8JȌSqP܌\z++'Ӎ}AO3j\yڬ?ӭG<9D?o>O'g8ꃇN ǞKۏ +iɲ/?Oڿ \~Oz+}6-K|/>7ay3U}_.x A^y]p) W7.;i'?i|q]؍ƹ7}wjAm`mz[^+A!^Ns }xđ<~Sῒ}_G.J^?v=\[_vl*Ηh~Ca ߺ_Z?ga7>UMŽ<7>a'ue<O? O#^那I@[8I+/SĎG3|(I=A!,t<:{'z^`/s+uяY4oSײ?[ S^+{xo,x#dE~7õ&_k_0@'.cٿ_<8aZ6rap?0/z qCM+ǼC5+ռx%t=Syl݊7)OǦii~G`'07r"n8Dy/{R?7 fy:o>0{&o8ӊd߰o_oZw5|/'$x|xGd{R7':OuCGS5ޱ Z&k_w/':Wz1g W!7߼zxZ}[3Y#d#:v<n[xiP0.vqk==ꩻx?/'hO'~WЏך{A;O@]Dy~b;\{+|w ]ASΓ?&_z nO\:;r|~Yw;wl;qGu kx\ŹN'r_yק:<|G#w~:e—8C5_oKEWq3x{b ܰ>:kp2U< OpDhCW%wY^'5iCOgOKڇ1?̞Bgv? |~ΪiqùޞuEN|-yoo;}_}wS9z#ϱq$n>EA^]4:H^z/9eۘxOk亮u9_=/gW{[򗿅~GU|2uç'OMk}c.z|=%.bO׾og]GuܜB]S7:49>GN~%=8^'8!+<7{s?mO>ھ_ާn9uw{#s`aEۖM}-=2*EnCLv?~_]ug8 .=ujzP?9;GޓظSEh'Eu=-nm饶Ǻ y_esOZ,zѱCS=+wv덗e?i]/}_|},4~^C{ޱcu |d,vr<+=ߝ?#ߟ*/vQgz?dzz'Tm%T~u.y!/" E7={a%̓qg_Fω;'yC=::;x'K%='w??c[7$1xwoN@oM{yy:eע8ժ"'*uӦ.ܑg~֑9yiKׯ]?bp'2F\oLf:z^|7e:'9/r1o[Op4Uc?g}':7L7_v5W;CG7: at|/<5[{/<~Sٖ狳zŭ i{]UoMyZ~ }/ᇝg^:n_o~7GMWM?të/+?r ަ9CkO_I?~9?7dg]99|nS4vu(~LNbw'~4vs:{@w譎cGz4zLgTu[=N^]KD]7T>]f=}H߹ժ3xc G&O>Ǎ^67e t-cۜ38D> A7>\I\g~cH/GA^/~w{Tr*0Yه?Խu3?zu;A~Sۇz\o4^$Z`q[~<6gn}XϓZ<~iޮ׽O=>z|=G>|ߐg$\xYmUəY\gz z)ߎ_Or}sEKo>dS቞կƎXj[n߆#ǟe3MkGGOGā_8GO{k7mܐ^.qG7f}Aӑ2??ĞEǺ'ӌCO^m_7S!{s_iޚV܍"y/;/8F_L.>{N?:_PyꗲEu7vWKT2.q?QEx<|ys3xl},΍詬' ă/9QO'[>ێó߀}溪 cW}~|ie8Eo0WܕGSy5П<K|Fogj;~\v<ͼx/K3F.<^u(:w |?PV1gGo{)<4=.>7|Tyf> _,и+~"'[w<}IO‘ߍTrr׾j<['x4/gcMbKG[uY,_U9PG? Q}'''A85o'8h{_Fr2<qZiߋRq>z[熎O u;ҹ9]UwxcGXz]G뼛0^C&n0q xb#6u<<]suMzc);1~67-c{}CF)ݼgyߎčr엙] ̏\oУwyu=*~Ӻ>\ω3[xb7#H}=uُu!:'7/{w85v}N|8z[;챶 >؍f^&.oj|/eO˳{m|Ssy9Bvu).#GQ?:JS|y\vE[ߍ@;^g?;JS>s_XZ5qN݇|(|/I\N|. =}s}7>iZy,=)~o|J5wS =t8Xݗ.K|R]Sdi}c8.|.ܔ=NTG?cooS8i@DHy~LF`z -|oSv%N+y2,!Gͫyeo|qE=-7yN~h+\|uVηxN?5\֟n[:0͇>߮hyuzd?[?+x~qie㹯qpbȇG ^i/|11nyzqjq{qqZqK\]}ŪL{v[s]=88d'~&uZuM?oī}إ ]u^ξDu?{?.ῺwyNv8&:q|e´3iݧgqiǬ[ӿk◛a!7\CS/e;>z]e~꽗g4/||yw|-=Ϊ.<w=gi<{_qqK۶_[|zaG; .G ?[oyݹ|F?}Vڎʙ#ɩsrm{E[bz >.qXş;'{|^TlqxKmw\; kݑN;g.FN/9=t9'nvm{ҿhFClTYGKvqL /(p^wlG:n|tK;{H7as/x;OG_~cߋ4]?]zvz]ȝu|ܛ7=ԯ{߼ENC|朑l): tf=^7tCnSwz^?U?ȃy-o{\ wmo^eݠ@^hzzi==X@ ퟁ}G,U`ÅCv;&5e-W{v~$h Xy~gwYwz{tv;.qg 7'{~c|x'z>/>y>~4~M;rҸUMԿȍ?cYG3I왝={x%-7|ֺW/ y']w>%w?t=C߲g^S{ /ѼaoY۳se=_i+/ Z_|6=r={{e|;{/]ն|ٵE _>Q7=WGKNFޘ9wmp3>o8/rLJ+JxoG)׫>? 瓿yr3߃O >q~g4\,92ߗs]އ; ??y/{c>5u?<{βޑ}[n/~εOeg|R8(3 :`;;o>?댳>/m*=L/K ;qy>n<|:9t}:8tiM|/K/z;m.2x_“qGw Oy|_{>gtZ}leyhOY?ف|/mǂ3>ߧk]`C|0nr{H~׏קy߱Z4O8:i` %||,?{,)})ߣyQOʳ/{>VN3鳶Ɍ O|k<礦^[?u|Sž?>:1/7M{|xCGc2~sr>?s>˸ߚ<饹i_׌;Nn: X|#_?##7OK{MMZ~EϫY+5} ~x|o_U'ɼ?Rv|'нꎖ:?0֓姵 n> /%tw]:7}'~[>,ܳJ^}^Nj۾emwl8rƍo⽿79W>bY?xK5q/y9zƧE_Go=R#~:ӎYu3K_~xZ7~{wp%Q/7|Iy$gݧs<4zKYz :m9/ewthY'0 ^~miyۅOϝ͋,8?^~}?]-5h{s??s|O8[yur.z݊~?ȝ|W6΋GU:vi{^zp g3 |c幍/3C>s\O7{N>='8h=>Fv\ϼy.0ۂ_r_705<͹4oBϼ0ϧ37D'Oa4t0.نz_wO"k;=W?=U,`'s縲zq@UQK}\~f>8>+KLg xX yՙW}|yk5wfѳl~#mgc|qzsރOOk/7M\S v0:?Owfk v8F?9xD/x2e|_ v8Sg5]DM?_?#Nz!K\wK7@\3$|O?1w+zfmO+w}=ӲM}ݢ_\O㓹nmoďԗ78wBѴGǿ8FI3Nµ902^>pſV|>|Y=v$%Q₹O7_;ٿ6Gon}Y!dexǃ'K^띻#~gE/uxR%w8}~}쌳' Kt6jtwj[]~,3Z2~`?U9y`77y/vY׵&4ױ>7yG?k;>bCβn#ӇW|4Cm{Ӗ-j\q{{? č+Nܸg&~\(0_Kޞz߿IV+?Lw>Y=PS)'~mx}yn'rW{cC᜜c?Gg }<{>A>­u,wɛ ~o?>g/,yN{'t_:q|W_j|..?郗zre;ofo{=vÌ{յ"+ne_ү8p}G_=E_ =lHr snM=A^扼]Љ~aǩTRR_O⧝݇+t#w^F^D/|b/Oӟ7~?|߱a=7~­"q7.)ԥ9Zއ~ec_)E>ud^+9M~j{.%#_n+~~o{=e9?}{yďʮϖp3E5r|ɟo_9';[;J>k8=:N^Hr>|?~BzS>{y.IrR ;{=K^7Hwv Gp͵O--#ϼu>L~@xIJuRQr"G'~>;e}h~l{_!tN&xy>r=%|ei]?h3דo=OG|bͫx_c\=X:O$ף|WQ7؅paC;QqKS|?to?e{Y~$A+)99UK­Mi_O*N!7ݚ~w:>ͮz:ceoٿ~/ d~oxsɣ_6F/<oxjymgmSp/|'I5St;|w}Cz/@/߯n=3?zKߣ~n=`>SٴC@ve+ޚs;x<:^}Z;srgɳ7ޟq)uJx者_]1z|1n8Gg&WqO拜]qΫ9j__L yB.|,/h~O2q|O~ދ.&>/c팃~|G⃶;+q;D+z=Gޒ'y:{,볯ƌ~yo>R4mzA;%'<[gpy /텉 ~VϺiϯrOu ?SoO[}nş،sm zzCFwu}ӧ^,u՟fV}WJi??=U>~̻eO 'Lʼn_k;?? :_㋗j>n<'KxbG|w1SܢY{lg|%^ t%|<zԱޟ}0q缍37m8}f'}M^|]j\{mxW8/3]H>o='.Gߧ}pO>r5C=Z~v~!gNͼ<,Z97<?:[U?a5߫Fo_7߇{G6x_ݍ~=ڲ2.l^8_[ߝg?)>R/9VɟzJ.W×}Z>IDeJ|qw7a< " :&1҇c}{-AOQ>r?s~!/ml}-~Ƈ}]wKۇEX';^>}?v=.Jȣf\]\zcօ>|r@wz!~ \c80~5i;_ƍ:ٍgz=kv0|1N塬J{{|w&:㣎}pNЇ|zSG.~L?>+xz߲'׫/^/syyW 4'bh=i˯z+6^O>j W W͏yGތoy.vM⌃#|,܏8|#|GӸΛ'}gycrE̗?Aa.8:9ήN?G?}||vg\g>-U|_Cۛ\q ;8$w饹{:{-{½~|3}`m_%2v㌋\ޮ<#蹉B_XeQ-E/l;CKx{)c?om鉲~|eƍnT;K|3꾋p}?w]ϒWw"Gz4a?oZx -q<@M:'W7ܻ'8bWOm?=<﹒}Cי+hsj;NpCn.mϵ~ ztype߳G]~g?;>[x/-<_g'Y@r<ΏAvPb?xہ$|sYI빝WN]6OoʸW}pkSM<+,o???G0%>;nٟc{u3npΓ_uOC-;,9>3;|B5l}{uC?y^ĸ7̏z~s<992w OzWmxzlkd=ױR8Q58"ywEOKwQ^=<ߛ1~{'~9nO~T,l.gǂ'g~} .EۂkxHpG>ֵ>Yrݸ[k采{yqs3+z]BqCeי?po}] O-ʟ܇~%9ߍ݀Auv'~D?~pGm=W[O=-WﺶW?rix=\^AuOs7||2<չ8=={Vde>uyu#%V vzǶ6:x'4yvC׶^3n=~U߼cGz_Çf |o?չԯOS׎.ZqSi!ߗZ#j^7(.v׽w|^uYt~ߍ?w3]'֗KoO߾giUKxG0{cO3𳼷ڼr\|-~ {] yƑ.';>6N8"1せo1/{$k"'=>3^"׾_nۙ߻'gOGS73"f~:T\^X"?c{qӸ;gХmB'Pzʬg\x4; |e_+w2< m<݌_E>"̧zT}78vѱWh?8=E~={ދrMБ|kREzv{ G><ƻO{{,<]rD;/[ Ox>1pqD'ѩ2O}{.=LOﭟO+t"O 6~K?8tƓ~{'@Y{,O74w]GUn/'aOu\F[ x髦c'8uMw~7\9K-:n@esY<-̱;Kxdg>E} _ᇧ~ed?6/GNz>>Fv$=:mum^h|f^;Z}ogi~X:~0kjS}x'|WuEoq..n}|1E}ѵ#/ K {;㣧wۃ%}/͋鿚w=?~w|z] =~ ݚ7σCO4}l< ɸO (y<\u3n4u?I\zs Gp?ۏsqs|xw)Nc8: {̾}%=up8迮AtB{ݭOdk/?){^QtO<|o՟؁ = GO#wxSt^:0:/=x[$^AOOg|osnޛ;g >|oӲW] 7GK:/dx?}s5 i9oo_7{_O[![v{'k=Y[<_[x~Q~ %O=8g o{ޥ_v{@^p o<৫o=<_9[ r~~z_7|~w86)ɇ9¯CWrpnv“~ĥj_,~?8Ž׵t={gǪ?w>2}dZ>u\8\z>&q[vG;:Rv,;3j޴u>Ͳ_ $oACsg>?}TK'?/ףzs+>¯UFx"vxf=c9g_)yS`W>WK_CS{ Gm?n*n%3񋟈O9Ǯ7xt-zy9'|q~zOh*yL.K7촥IWs|qO wWڱ\_x߯Bѻ`}}_7;v?<-Z=Rt3K7~ =2|}^|'KJG;oF[r/-|OSW:N||-ߧuuoySOl ;=7j9&R+K{u43}7~FCwt1o~/t[|vnnI\zwŸ{O_?k&7]C'1~'??gx~{ݓ~}p%:z+zÑ7=e7eჍ<;}M ϯt;xKa|}5z}grh|#eЁ>8x :-$w= m_/\?{b?z>>nz=~{g~C?kKސ'"hy'^|g >*axK_+|BrF+S9/\ ߧ ?lt>=_v8(: f>1G?=n|vyB]8)yp nzCЍ\=]+~sN:Wz(vعOQ)&>zN~ 5m y$`pHO>w/WS?wx*{5}o9“u=fεKOWGy-{8;' k<‹x^옡s>fLFx?KKe;{ o{ G%=~?ЍVqKkC_x@|~Z|_ݶ~(u|5~Ϳo> />8ggZOmZw^=>}k\ ݍ_?s=Fǵߞ W%l~,󔍋k=P_Ӳ^;t[At􏾋4".3?~gD?ᏒO9QytRo'uwHI]!<ㇽ3P'VqaٷZ|Bߢ4y[v;߿oh<7Sv<#f=/ WoOė>ݯ\W~F<&t};zi{Z?m#]_%g!8GɁ_T]L!kFx|=]Vqys?xzs׿;Z`T7O~+[ vޅ~pEO yxO|b֡ ;:~3z͛~_qj8Z^ߝI7wC'CO-Cω NܧNuPwz:;+O2X/|?̧SsO[~`'8}|z?wtfO!%=dyZo(;>BG3^gm'|?puͮuyN{pvzu.^ywf}(/? +ek.]>7ߛ6ߩqzI?gxg~*>O_r#g}XͧC!k+5=ۭ~T͞u޸|l|ֿOt܏ ~ϔ/!GJ?}G=Q?O>wO_sYy?-pӸj<^yo>v $;Ǹ?{co~x\GHq& ·3.x7Zn:'dȋo><^?;O~7~B>}.U-}Î'n7kK):`'^<=Tv{@&ze~?u#φ]o/D~zǯ'zrɓ)N}yo9˧ _h]CϝՋ+nɩ.C/.?~cysx>&я=yX탙'vz%!n1x϶]G#S~T<%xy^Ooy跣_~Ux‡iف}^?+o G>7_g-#=oʮ7s7{M}.2yE7~ma=m%qZ'7u|s.\M= n#zθ-H7rzpo}ƻiptZέ~⋟.{iug1|xG?'zxZzA#?;~_]h=<.h8Fɩoo,ߐ[@=MI.YQ8rzB8W ]'ʿw>!O_ԏ~O.v}vG.Gks|?r~U#|_MD)%/>}snx$8^:)~Ën^?znÿCO?k[;~8'~;mQv_7p>'|(&JOl=x:Fs}nL<|rکs:qG{]%\]rjղ3)kS7CθȇS ]~п&yq gm:8gC^X"ΰO]*}2(m[ypGyW|qy.b񗼷yq~8%Au<ţEot2t& /CũQ{.Hn+FnΛ'9}z  <75s]^vDxnV`'3_ռѳ?b:Bi[o̍;7}K]?{}\}^{ Ǿcwg\/O:~<(x+uC}ဟxe(U@$=~}}u9)_pD'n 7 }:/ ^y韫~rnYyMW?zWdY؃G?ۻ}򬛅#Յڟȸ2>x/2{o#..GK酌C@݃砧qgxEw[o~|Tu.I>G{'Oz8!z;~b>G'i'~DqO_q_:wۮ7%;h;žcOݘw DGc\0oy>.؁]Dyхnyy{\%Oy({?V+ו>__>`o}Ϳ?I܀>n|hysCş#c/2Nlz .E~3Q>F%G~O^/ Iqjz޿iy^/̋y쳖}Cò;~ꭿ^ |7]5Oέe/H~j>,-e_SS`_5!R~Okܟ_%N_95'E.}v_|ocxyDÿPN2-﾿$;>0 WxWcՏ#S?8+BW(/q2cXG{ |G{C.xWZ@p Z羫q y>qc<8({/ {'9o{ܞ#prxZ~'S|kueW-U_}G{Y'r;=>O?a7潮}G7TOx{{$9O['|I.vܙ*{2~" Sc|v~_¯wFWGt>z'p"^_~Yo-x}h8/y ?ApOgo:|{x?9Y?M+me9_|;kso\Go>qoxgz7TZ?竟{ҿE~F3~'?Wqzܗ_=~BG%͸jrmE~?[poLןߘ\/=O]c>pO/tO3<ۮ}o# 9;<'8ys΢#xnH;Y=GoO\OK/=~hn. ]>yy?~9x[G As+?ыxڼ7}'>a‡W*.b^g^O_,?"G}{ߚ_|.agڿ/#B?1#'նϻpՒrgxk^uwpqQ~!':_8Ӽ\h8²~:X80C?|oOQ'Anп N?SN< kx/G_t@gw[<\;\_v|[z3<_]?KE~_->\}>g웹n;>xYUg▎7>r鹏F?q^^s+%S/o~w_NOz\t-ӣZ?C60Zoո9_swQ=/\_uEƋйs[>Ep~kq3k8O?F' ]KZ-|8 #}?Q M/&zGk _]d}c_I^e#mV?:桿yd+Ƒnn_ᏼu׊WG y[7퍙#uOmp˞‡=}pyx~fO=gZ ڏt_ޞys5?8|mM\7uy@7u͓<]8~iXۯ7U㙒}}JoNhou|Ux{E']~t]>_ƃ߳5?r{-Kތ?[ozGFvSqymg|]\ɍ~u=gH==]ٹ졢W+/W\G1\ q?Z5Oޠ?T~>>{a?6~?=rϿ/ne;R8=^eo^T߳}\Ǯ;e{v:u٧X//y/|_?n}G[}nW$\:-{Ǯߛp/7~^,5v o}wߺݫٛߺxk]#B Ϳp}yߩ[#]~gg:/f)}n?zB8pnv<ݞ}]ow?ok|WA>x]Թ.[ߍ᧟{ƣoxwʧm3Eg~kmǝ'Mѥ=cB~j-~7ظ9 ?߹r.<?wza'۞p\W|=O7ם_GW}m_Oyg֟n;S?0;:uC97X։pz65С_gnScO?]:U|KOýn2yq~?xNEÍ<n}o%=;svqCzeFm..}~jyyض__睏8ؿY,d{_c;{v?-;4?v;/'K} }v)sK}GG.9tM 7Yͳ{S?_M=03Nžig]Ԫgϛ~+>:좿g>QzN5}3Pk}yp]8s샆^:VjEwּ"ޞ:Eڽo>߸tl}sѫ֪w_y7WoYuu}_^'um<ƧޮuU:^u߽ζץwv]y#0NSw{~ѫV`=x]G>8WaCxτ;n3#oZު{j>D#WvYXz@ݷV]~ץ?'ϭF'湽nL[;z]37B=^y}xx~H}j''|?vke={çyyz_?{͹<[N>B|ly//G;O?jُ͹ h /[룴۾-7`GC.u`ڮW1ǛSDW%3dO''V\_ ַXMi[Ǒz|:H[#wyO\8wwFؿg}UӉ]8 X?<'z`.L.xjŋ| OpZx0rtE<^DOv֍|?(z_7cQӬ(3a/8Ӻ=yW!M_Թ l8e.ڒcmo ;WGSŭ1x|~E͡ZNG;mCp(gEO֗v~_^BǦqf=g[vA!Z9tǃz>W}|Kk._pָ7?SX79~Bwquұ͓(lnl/?K>W^uYO;|hy}]N\r۶~iw^&?xY r*zI{\wؒ2>B'~~,8i<qNsz=vp1^yģW{1񷝺e3.v8c\ }nC9zE٫W+Mf܋}}6jdGS[|X휎i>v~s=;#-l%_)?G'Q-'rx˾]Հcٻ%G'+x8mw z?sl<-:DbW'ē_K~Y~&}UKaxa~;Ez O,9o؇.0qڎ^6oǏo7zoX| #{>Il#'Ѳ/?̟%oYG:/:+ėwxS'(̳ g,o/:zYpS`bZv7<'>8;9E[iVzn3zi3?s+Dq.x4^ >W#oAsz˯<%OAN qexj9R|gx_#L|Qm/Wd7{mwzT_u}乃'JDZ}O(R_\v|wͧ_:^}i|k߬7uS;E?tK|~t=GIy['>nY_d_ȃ;O'?de' N~_ַ~oSgQ݃vf"7ͫ} /#˃_*)\Om 'U~Ei'/'؏?8?kqǪzAv\++>;Gy->w7\|^ߞOv}Ĺ7#cWֺ}]WU=%V<;:r O.?x()u젒=WRەn0u'8yJC?ޏ=- q,gB\qraZy4?#F??Lߴ]LΫ/!7c>q}׽ҟ&O:yv:_7\c'|ۮ>ŋ7Y;JB?:Lc?/#uMU~i3U"j$Ŀ8=>eAgϜFo~P{cz =uk,-Ȏ''uzz̧%$Zu9Bfw% >ȱ_%9{Edx*T+?O<ok߄E_"?1vye߲o{տ|hy~B凼d?Y'}_ Fo,YBosQ`3{dGd΋ގ޲14>Rq# y̏x#cŽrE]OCg;> e&!?h>Փo&^E޳;B_NowWi컅cGŇ?ag{Yma?F#ԙ y;>fPm\[I<8w)#ރ=NWoQ=_C2|>IV*v^%n6o/s}zq/"*(]C/۪:N V&nsO/ߝ{o7E/U|:~vr%zzŧI/Wz WZ<'_jE~ Oz ~4e]/Hsԑ̼'=<܄[x~5 ֣u53>wjS`+ߒaEeЇ5syOޡuW3??k\p}_/:;d[C6eߌע\7'tMg=|Ս'a?D@+A<=(o'f}6B<:6O ]G~=>揟/v]<{_m; zEmgutO1γE=K|UJ|%'xY/Ǽ5~!;q GͼoKC8Q<©Ow\x7D.K~'w:9qCv#zwM^pK]Jկ%gk'/Tx;U%ԙf]ǔ8z_0#'I/Л7M;Z ??-w|YyNꍦdxzӣEgLv<)-N(o?g)dve$oc;ZO:B؃A^z+xV=cusqg ?~bzη;}kٙ@zAOpGGB 'x±S?2J.E܌-T@ǒ8+ū ]GΈݯg<芞Tx=YJ=y8;r=_GVu+Gyܯ4 _3Ow_ůKx$؟'A{_~^ċR޳_/6ر9ɺ|+).dkt {|Y1gL<%>?brQ^3fY Uz u|wcKo1b@O<qvt]F~d7OWW!_M\oJ~yBNHoOXgk;./g/OcW?]^S_{W`]YV~Ow}G̹[C>ƿZG?N,JX+(/=꽿W?+c8G?<| 晾oTxMoI\/|s^?J|It ?/>ל乃ַnX3+y=!.'>NbG I\/&~2zm[o2ߛ?r ŃN4x {AU ;??i#G~'~u_:wS}79.Y7YW99z/粕Â[/t_ÓeJan}yZCnҗoɿ󛝧R~< zJ?-xzAymg;_ч|sBO^WC %1ս/(0T7I?Oɻ󪧏\uM%}-*_G zznɮ_>,8`?K˾;ܢ5u@}$%amQ0 G[\k\i0~{}\o4rkO 襪#_'Uxb*~c?=y>IH;j@p]lu^O~y.dGuptOky#A=GOu*ES{U_}.hijޝZu OO*#{u&:s]/$_~H?{T`Wsߑ;H@|u.ow+<ܣgb%xWҋjOWczx{yyJQZ#G>G?uv*A=˷}P;0rbh<|aGwC>ҴI|~S3 S^m;~-o]v=@{;x~d\}H;:CErOYN>[/^4Oѱ<ϝqe[.~,/k}E⃥q< xOeg·"_iT/|<q¼gܻG#%^VG?yn'}q*-uD<;ʞkycP+'nG,{<}P vr<O#ؿrxZk<ԁ-x9}x?(I}ƌO#85W=7,wO'dW|DZqE^i?/?5ut*흳ވސ^M=32/,88NNUOq0v:="{Iv4$Ѽ76YOn%9;N /z#zE:^Zq&r O;|YO!noKr}bg5ž'ɹ'፧=}E?yyĮH}1jp̓:z.x7O/vrq|l;ֻO ]:|b_/gy>GhLxRgJDgOПU|ɗlW=]wOMmS;ewwߤnA]ztu}fOv~SkB`>{3y0Fx ]ŽGGOp3 ʿi&-%g%rwK_q`kRg[|CRxWs;?4v>'q\q%3F|m'z>y/W~§U/CA#Ror)!{ɻ:(Vf@zn<Dov}>]܎^Bo[:si=Oq'RGX5Fo<#OZL޾1<3uSwཡs+:__{W[e79O׍Gtr#xOa7#W@| } h{oLŗrlH^i;g&+N&~a|W#'>u }<_4z\n!=c\gG}9?K"N_o^w_18nOݚGfZEκ+<| #k{iIձzYyD/cO|{c/3yoOZrn(<+}v>Ÿrn~־`!&_PvzxOZK=ζ7~'_SuG2χ籿$5vw4~$Kovn ?$]ɓc'||_yq>g!r(;Ƭ,=:~dKW^H7~j9㼕h۶M_ O+ O#Wg|7.'7{}䝲mO?-,_c_uM2 G>[~z^'7r2r\~OpN=v!*/~r%_nY /}{G9wg'񟦾G?"q7!w=/9D{đO W~~g~u"zꟂmXqb?9HjO^xb_'vgsPKt!ܡK_.mk?nq(FɪO$Zay8{:|JmG.詪;LQ|b`[ą1辜3UvZOc̓8F;x!RT_{Wkyc_+rN\xs#G;\~f^a]J.Wգ?gyCq'n9.woezs?qzOZ_>{r\'osa9㧳&?q}IǗ?pg_,ܒ/ PO_y3WkrY<5j=/7+_ /g Tu]4yoT|pS*cdꧬs:=Fʟky?_H]"Ez)z;9w<><^'rFKPWtxҟo[s&Ej=9~Soy6~}ͩeOjߋi=y?uīŵc+}ܗ}} }7xϪ뵽L~Af3>|/4AxS/_jn%E>z=="r_7w_Q+G/A%!>r^xu:?? ^'^EY'_8mw!;ym\]._zz_ce?~9;;a]Tiӄ'7Z&wWx+|pѷ=gGT^_]|ʸje~u=wO]OA]z"Zoz//~{"_xtC0ֺTcO}*<9To7yKӟeqkL|"Đ|d¡}:э߻s~Dc]̑DN/bm^/<?{ z'7;l<-$uս{-_qvdQ8o[Of8ǩoc7sfԓGYwr'G=<]'~;8ȁ~'NOɡ~x}w=} u'Gѧ\xo'Tq^rH'9Z|&Ino~8< KWxKuu XCZy>muWC?M=rxSoO?z^{UqGq }?7pjA.H?ȅx91z?Zſ#F/=ȁ7!L/䐝zyj>~}Nx/zN~/iI?(ֺO9N=m۝ƍm>[=_!~yZo*8r|,^e\7:!\g/؃c0/^nb#G~eo'G[u]:+ξ] $7*>㬮8ջ24>*{.X8-v~Ox}rkzL.n_ So\[]/:7;)> m q{]}:<Ƀwe>sw3U]6u)z~ |Dݧ{Abg]K~z]yR_1^xqDz=!Qu]'ݲ[K~?&gYo1\ߠɗ`q*nZ~ss_~cy0z~:_x4N'~5r䊝GM~VqY'<_|*~6uu}xF%7xcBqZ'/a-+q7sKO~#{߳:"]Oo i>_xדּz{ė8c?w;#gxiw!o ~:UD{wFç*< 33VKqzWǸNU< ^> ,%Oc]A{+I~:zD}: pȮgOzؑ5}*o]R^>|ÿ_WIbxåȷz.pS8.]o۴7fxk"?qg{4z=SI]J< }qgRhj^;DŽoXWCۗL<=Cb:Gn]x{q?~Zn%~߸.^C^+~ ¯Kqo?iv'x"-~S_^SfK-w2(O)pċf8Zz?]{;y#[9n#GW~jx?]+|Hލۦ*"'~U-ozgzq{3n8y_I7 w{wv;yDKY G7O{G'2תi[ST,'2/ȲG~_W?<3O8bID__xt<&? #U9wU/~Z-%WRqFrsL?3^Sգ/J'rټՋX{'ޟO?x }:/Լ= _y_~ITO{ѿ>z%_\>#mDzTyy>L N\o<_ݿF;j8 R|YǸ}c~?ś{bi*Ww5߆'vUS7~(sTz=zgq\x৫ۣK&..4׼85_d#]#?<+iٷh pq+ӒzXߺf|6/q-~y85H>nfvD3yu ?$'nAb@QWs %~.tF}u,?Pvs_UYĮ/ O~EOJuS@Ox̫}6=`~PAoYx{JQ͏<,uyӏoiS0_q}>|#SO?>MJ5OMZk]r[;r^\=2'DqU3njju%zO곦^M ys> 85{sWOKjONZom)̾3˧ԿxgTסqVyqoǔݺ*:os)eg( k~z7:n>JDZOβ/藼or\tI}33OO U i;_}P;wysΠ5v(z~;n7p ^o_+!F~)OXsx6GdޗysC==ݴKvX:G -Zʾ%zٶ:;MlPx6xSaߓ?Mھ,ZgyӜW H,u=Youl<S\YJ}DZ N5mnN?svi}mw]*fR'ueO$/ ~f8AxCv5qE^wKȟ\g_4z/E+ ~.wq5G{7ß;:*_O?ã<ٱ+IoZf:;'V<01niN;K}w2<1uRg?*kȉ<X=؟{A}UvC8:~Ӵif]v~w my: 㽩GYkO~[#'#M;ߛ|?Tg꡼պe5[7q#w<)sYݺ>>K|xXϭCDTy tM T(ÏcՍ`|<{aﶯZ8 >k󾈑3'zVmu^/qg_q]<9oݑV/7ǭp=xg!>GS_o/4=Zhm[||#O]yھn{'u8">Óz\wq8u\n~S?4|]u?VG9{xL3ugi|#vm/~8}u궭[]+oԑ^MKk<ǿ>93n|L/Zh|Ji=?cs^׋ȇ/ZV{&P~bϟN/]u~7ҞS~iܝn3nͻtOqA5_]~wz\뼓O?ӉSoc9wK=F}\>WG(*ܭ#d:z}]>$oi;A7^z7f3ooh)[yOZuZys|ɩRoN?է-ӥM[Oy?,tSh_g_۵y{z8J3q3yUg_7w~Ѻ _ l뽣plruUju]:G]gW_kw3n]κ{}Fs_#pK7}q~tkȮoqWzCy(k֣_꾧^[=?.yuȽ>ɺ%uK=zsȡ?Y3z'w5[=:}S|?}]ܭz^q/TTq'y|3xw=z|y/S~gp6?-'{9w,,x{Om\[7O%-3.<>|m qqQɶ?+Ӄ%xuuYo7k:}!WY7ã/~yE/!dWWg8NΞUWm'SwRvg[_}Z~q#7g?Osdq,;ŵ2HzگǍ>y 7v=qiCNrkނѮN+|MUUӆo5?. ߱sO]Yׅ[s}Ѷ57ñӮU%w!9~}*my:'r<7rv7rzpgGĥ)q$;syuAƯ~NۏE/.g_-~]U8m|powW^+>Wg|zeq/ ?# n}U>KS.2/c5yGHү]'^;rq-}U<_bN%Wz 5|8'\yg “f٧<Kw:O]0KEA]omG9nBsg +y\񱋶Qcw:nv5#eOcW'˛^f^)TI\?C/?C/}<O&޾#?!7+g>ę{6p%oCsm%%qu>R䙧P8qQKgJ=4\7v纎7nƉ=x}N_~c~,Tu߮~S?2;,zu7/ؓs<燆%X7EṣӺ.g#qi䮿ǟ.yY~!e .U|gG7I?Y^/r mOx[ǚ']Yޖ=%:;X᤮u!E|~K}ȿ61'~y)ao;rl|O3Fot (F~O뤎4R0v+ҥ|/os7߻lKW R'{ hKr,cWgKޗ4Og ??߻/o:NOGhKyW?Ʈ8(A3z}oݳ/ 69?tmqyVwuxiջv\#~UUĞU>~#u re>N'g)+;oB_%/x.}e3^Χ7Qz]xI`sxj{g+ߺ3~?G;rXqu]_{Q'i<_O?&tܦ* =uS˭x?Dlƅ]xX9fwg^f #L+f#L;>_9!_? ke=~=7vɳO| >7Y>'_?%_#cҼ2\-}`/~ǧ%~_ Ì?qh6;q3σSzy,;۟x?Ggck_%e\> ( |3//Buw3=j: 7:{rsY2^BoiQ;񝝽0xro!^¯T'/}zĝyp'~Ni;϶}zAzD=< _ۏ&7xj2ͯ G7N{?G)/2^ѳ S3zTr^i?vVAY'PSh9zӵ8c/{Uv ]З=~}'h}؇pn5^ g_*;“q>9F?=y [;pU|,4qmɟypO6/i˗yN/~g<>$༾ߴqƭuYPuE+ߚqvu7䒽Zz4X*q#zT SuD}nTT'r{7G={6JT\Wŝ#_yŕ%|ȏ. +ix_l6xzAѻ%om7{ʟKz~4?gE;ҟ:3xds=Y}?Uɸ7(}Fqm>]zW\e7ͷuxv[#+~u}Ύ:~/~3reĝ飮:DzPG^G^u]/n]q7eZoD}29vo$DZOp#w󐓑Ox}^:,=F.G^S<~1xx=6/>O~Ke1'~}t<ߤ0Z8ʺY?7Y!q'Onx?YC՗5_K\e8#9^>to\Σ'b{\䌾7rk{SۗΫ'\T|8K=)b'FO &^>?#XGy_$>NnBSG񍜱x`;F#yT~D~lZ^>/_ /m]~|S7"t/f{/M/0y<Ϳ񟦅'ޥ{UItݶ C OVyKI8qx*?wE|_<T~^=|$˺/@^ۧ}F6uoyg?0|ۿ{fƁLkOU'^N/7G/km<nf||C쉍<.Sj'A~˾?sě0.|[{};ȥ|ui>r?<3>#9 WsOF~oqn6q0uox& ?8r~긴vuxoq{7ǣ叧.ˣ\W|L݋fWt>N];c/xS>}_r{O[$7CT/}W^.u:cA;ˏb/{0xz>.?rg^;?xXg^yx2׿z.vsу{?G>yKd߽g?pZ~{9VWn.KO?H/z_|JK6E#}@~}84ylFe~mӦNzΟ ._w38|iGg7Rot$_ye؃عGh?$yǍA y772N#?yO6Wh;7F~ϸpY;)on˛ύ~_񷏕U#<ዙK_'ԇqXxFC<®Gz~O}n{%|뇶i/K>e'Z]\^ߓwS޼ޗEÛ_&_Q%;<>VӒ ;+/yv>dx=x"ȏҿG7[OC?83.xw$=8z]}rSqrn6GnD84yEO5F=r?q]_(~xZogבU3}G_z uَy'rd~as?zZ}O%Ge[߽߭{?AkO:g[%߷+~R8_&>Kܷ i?{g~4^#ӷ%{{i?v{xͱ-^OcwŋO/Wj<;}w]ϕm~[ͼwC] \/qO7CC~78G~YCx2x~cr{ׯg@\GoGO+{WÊۉ's՗?./iC2o/׏U\<ܘOqM+zAkgj_᧵ot2>K4|O=&\_>RoO^~oפ_;.f~ǧ&Uoy_fΗYT~{M_6"K|؃O=ʋ;x>q7~ۂG8Jij'xGUˎWN OJ~/xC |jᒝzoT!~ mƃ0 uB'"肧9߼&x_5Gu}w:w_ߴxҿ]2@֫~qoGw>)zmkSw?|ϕ<0oӽ%' ]'xjOimީ4Gx2|rs 2. 6hx?O5ޗmncrtO}.-y^>{S]QI}Y⡥?\~¯+|_Y]qvOJc#;5vľ}Z|x{p ?x c7v<O<| O]Oeg'|ZryζG|vSg2<5vxbPpAuS^fSgx/d\y-xԽ onzز9+x*=U?Ǚj?xJ\oZG=?k束Lλ~E\N]>8t<s<OYQi:z%)>Y2밒'l;v| ww OWdśFQU3]ѶG]'~0GM,5cgzI-񖗦?]GCw+9ZWkz޿os_g_rx+$J>ZOw o漬ufx1eާ`[ĕvgɣqlS۴ozc_cwսt^|~7L&j#[ɛw{9~a댬g g^ϫ|#~:W's2<*nz׃hxx|_ O[W<{ɥ7px8_n逿|{Ջw>1)+'ɺws"?Az^G*>u:ewG.;x‹yIwg//^ "'pk^j|փ5?]'Z kվ~wxxyjqQKo[j{#_,v߅'w'q=㌇ʧkv e'p//|Qpc+^[K];}AG}\׭n1L>|8A).?s9z>wmqf m{̳,x:4w_TKY'.KNȫ8ߋاWz_g߲}E=s}~ogָ7;-X+ew.Gh*'Z~s{a{]aOg%v#z_7>*ov:*{FN%RV"tO_;)zn''~RuQ%9Ho+7ovgx=:}yxAq/; /k6w?-y>wEo|uFߝ,x[Q4i"+!κc;4m_:m_ vXx{o >¿7><^7v`yz[sV]?bpU8:'l[Y<-qM̳*~;bOO{~*uYW'2o8?~Z|sGO?8#+d/{q~_m}Z&y/^W8|Zz]o#G-_׏cN? ;/u/u]y &s`Ey`qD&UuoIG^?>Bί=K|xo%_='rwzcVUz_ΧEnR'q(aKmOvWOr~I:-Ə{0okE4??1G}nn73'^Rv{3(oW\xV{PDDNx>“qg=OoB5Nj#)?V~9/߳y[ٳu_S\#r|!wƫkR3z?נo!k%[YRuYy'ux4q+xV\O=x,J)v}< =jk?1iדT>5c_kQyyy6NቕUG6yrHݡoNO} 3=B ._G_7o;NOޟG:OM>//yQIQcwk|IÛ[LCE{׹_K=<;@er$8gz|\g?}x<^w7ٻdf^g /z?R1oaucbU6R/cMWC2_ [ ;Yk{ՁD<^ǎns`/:΍KlīI| Ӌg+gs"+e_vz=OǏ:<_>ğ2/mG:m,vO..L^kSKgͫ\?:|ϙ7{Ȏ4o5r=F_7N<<I^ ~:h},*#k#}6u7x&}.nB}/׍'f~2L'̃xPx=xwA2rO?eG?|-g>?ZD%΀U^hiON[UY1$}kzy8SEcT'\x]~$Vbᡞ{^#Gȥ8y35lƗ< ~s1r_q%Y.|Čh=xܷ{kO.5DxZĭm@Ǚ缟M<p[1rap~~ }d_͍9=q)c+ ~*4*yK? k׵o=~&_;n*^"_/k-]Ӽ܉T.ь>}Z:I\;} zqY`.J88c: x 6ZEu>Zpg<=nJqG:b_+o^x?W,uq9<7ճzE䏧}?Z>U=o}?f.xo6~=u6Ό'^EErWNm.h>?;ۏxbx$cWة˯0gw=8d?~+GS~\zO~/i.u| cmD}Hߙ'~Ok;5/>QO>lC8W9إfy>^gK)U6x+kU: ]8;a~ا3v+7^q4u%?4r^} !'CjW:8ęF?&Vڟ)]m;oy~{_i5 7sxS1dx7wn?f;T/{\g߉{K]T~XE>ЧÞfb6*<.jx)^OR_⯽~y/8"|ܳ* >u|XY_ҿ9nc~?5rzMqtvg잧P[>W<ϱԭOxTu]G~=.yӪZL-.Y8[c񽎻},|t^-~CoS'8>hh޿8(iyt<վ.Ս^Yu~s>b_1KOcf<f[qm 9uc_VxZ?/q_WDo8|JZ<u>O.,^̮>ou _.B]Z/ӱ_D{-.%N_,^o޼' G-7pJK⽵"{/xv]_+}~ހw_|Sᅋ-͸7vrGSO}~sP~xJJ\q%lՍ:d?;ۯK'=!#sѫxjG #q~뻯zdx'7}q]<ڞG>&q̎t\:8'Gg/uhi{TP;Wo3vy SupUj}vGOqN{ηx:/?r\7/SUK_z\${e<{_kvBˏZë=ϙzG˞׼[K O/XG5-{>0ShO|A.zb= `/ig0u6Δ|+|-+[IuPkqO;~6xd=z<ơ`~7{4ߣWJvA;2"/v~\3{G~w7gǺe>g۳9|y;r~mC_{5˾']7~gK|Q\d__hrY;+xzw˶;vW?\c]m_i}a'Zr%u_Ǫ8/*qzGs`^/ίʕTIܣH7h|O~?6~|a?m$uWxy8cw7?o{<<{q|<//ooo|NXo9!;?/v>ouvU/<v0ڿ8+~m_蹋X6wng ~X5x.u|J/y,΋3/`b{=N϶ܴqڝxh;|&m#so>]ٍI|7'?;s}OC<9}Z^۞lĹz{;it=Vx߷<ۚCS޽|$q˹I<ԁY-u:䙹AuOIO;;NW>ۺZd=G>OVv#]u]o~z}vw^ !c^=}lq2]V|~|Ne:O/ynƙy뻞y]?;ͮu~+>_븝>yk{~Cw] ?󏍧>ooW==b70xis|G?h˭sA{k֫>\v_څ[H9ynXO~~]b2>}z? iȕ~zw N'}v?yj9_◿o/7nS?z?G~棯g>/?_yGkw;nu9w^8oGOߪ} n}Zxj;S酟6wW;=~W~#i>Ӆ;?T<<%c{??y{>ݑN?s?m݆[ĕ?x#]y(|5N;t8^뀟cFi{v7ǞsGܼnw'|^n~ez/[o Ɖn\n]m7o-y; ;vN޲!q8/{C]]Q)zHΝwzM?<~{oqv?oWu_eMC'?u~~omql'QW:cI՛ޠpE~΋M\o[[=ϱԿ{SeKϽyڪ_ ;ǩ{v|'\-u u^f΋3/͸ZO]nwGS?yپ&S/:33փ.zz">s߽3]?_\rxyCP?N䵻u:N]y/hyRuӽ/O~ٶ=_]=NNiW;o%q~BNW_z^zM8λ۶n16UUnww?Gs՝ۗ>N9~;'l{n+2Xd\Wxٝ5:n8ql;g\%7Sm/3u{0}w{cg~9~3i^;㺴rn[~_{Ϳw߿s9.cc=u֛ЛNPhwq{qӚOj<7{P&W,gux# %nS~Mpqqլ/-4p}o\}'s3qGO侾ןܸ6_Ӿ5DJЯZ[j:^m;zaMdzCݵ7׭q{7g3pw^\FͿ̛Udo aq^xr<ϛɭ㍟R|jͿc7xr_*?2zhƕ3^9^g S),{x;~/n_wͿ[*vrao'r*'n7mum6vLu]S>ҍ/!yw'扽~ճ%䛼v| ˞7s&Q=·ߟ򟵃nn4_#vlf0G? ȥ}Qv ߙϹ_Kc??`_z_c;$'>߼kwt\{͓sk{OyM-}3bc٧E O<_ X?Yfg!N/cӿKaKv=fܚS~Η_kׅJ.ܯD5o#3y>yrU<5)~n{P48qΉ'ʻήK#8yg$ x8t]Hq OhOm}{6%or#7 a;<|s?nί7n-~xwY{U~L]=.ަl}]!9Dݳ*Ưz{{G.+_Gy~<ÿ7ثKO߂CϵYc?E]W~qpyT®}0ϣiA/pDNwqƑ*Or]7_1Wu;6X#x|{xNX1rQWUu ۆszG?^o98 uO񀾎5ߨ_ #ˤ:NϏ~ӏCPڎS0tk;ӝ߲7~Ӵѷǧ1mDveNGso5 [y\Y9ŏß+{$8z,/WG#gWƓt܄~Kpqr} 'oT̟:scϫN#_Ã[wOv=*q^Uq"Ⱦ<8O uDzxwDaV&g;?zv _gݗ~5^ 7Õ[h}Eϡ^Eڏ_ݾWS3OY~89uY/iC<3k/U}SGz:x黎^/~~vCך_{[i}}dooz9/q'{N8r=xOOcƓ*$/oEY\O?4vҺ72V]QXxLpc;-{мsG.;<<#zSO{m'K72v}?ѷ'ӴIϷ:wԍzw c/*mRwT뙂2[pf;|,tOojy<{ggu]s_OkZGჾk߅[Ѹi4jzý<}Yg<>7绯5cS8OݹB~}xoWدa3_DzO-Gqjzqc:=wAx£9=V>Co>=N>{}W>9 WR^mbϻ~WgLJ~;߳3x~:.-u^~hƼ\OG?"n o@{|: >'>>F?vAI?A2rK)pոO䊼;dq 2om<}+;qBmȣwӇCmx}=M|vs:D<4_yeƑ_i|ۗKDkpb힩WUD?d?ߩy>g~w?cXσ5<-c^+|sfU?e|<#Qȩɯo;@_Pu07\t>4F/^?6zw/D^qS7չģhxvVO/^'ͫܧy1~}5;+G|i>c;~nܷ!g_HZ[?kqTw0~d׽{e?ƭOׅVG:}ٟG$#Ϥ.vY4U2'x6b}Ż&wݏ֣-?6lRqe5rw8׽_wz\|q5>x;Z5>s|yMxڼ7:Jx{g;A^x]o"Ըq:"pګ-9T|xcx&7tɻto˓ SͯߍGާT7;:f~;\c<]~7s_4%>ykͺ ?E^gkEϵsWώs=8X;x^g u:xxSyq~omG{-L<]Np퉳|(|Y>3'ߍKC\Σ?'s<97߻q=_mRc·'kG;kK:GϳkOGn/|>f^{_y? yZq^{JN?w^'ǷƳ|~ZϻC3֒oE=6ɿƯǑzqϔd>sVNrG:<_۟/kOZ#go|<.x y'_<͛oy÷a^//aܻ^>n1+^/?6s{{]mZ?82_[>3^ !>ɮ߼~@ƓoDj 8y៝}e?5z?cƏYGozm;ym?pծ}<Ѽ\?Ӭ?F}'ST18x 2{9uؼ{קO+73n\(pz2Om{3~9۲~qGȭm b7X~u#?aO73 `Gڿs'{:zhoGgUO7>;3~'M>˕K(Qاꍌ.z}+=8;L?3^{G3eᵏ+.,u޵Zux%?Di&Z<1<+rfȟLv7~d_,M^K4M167rp2D =#N]߰i0/ٿr' z]]>$:? y1nOѺ?91'{9͏ydz ; O]2u| n7xA.U#Owz8޳/&_i99Zo{zC3}\^Y1soW|}Hκ2{ٿ8~\>yZwN7?~τ~{NxV<NۆGkl_8n|7i_yrYq˾ͣl>\gw?v#ljxOO 8}nu73Y!{#^g{$==Our5O7u~5 oOƙ\_#j]@0S';ޒxBxD~eqxu7|$0|ė~t*[#o'@^+z7|<$nOb'\O?:>8ϝOGrO#yy?pvO_??>xӖSN4q7x} {K<{G'(`O3+/oGvqKs%񋹯:+?*.)_Yqc٣nc;FKӛ҃0Ώ<]q>q{}\Л/U|r< W7Oxqj|-x^&>>w8/H_O3.+z;|[/z#~^|oAO~'qdGxV\bɃ6*&.'y}ی'z'^Sug7vo+Ϝ~Ǐ`o5_qpU39|xz;wK5}Cxm?NWœVq~9R?w=ģmΫv-x})Ul=u, ; qx_8v;x;Mt^wu(xZ>M Ɨy7'zks6<#w~7Yxy𽯜G3^{o> <{"v|-Wqsz^83WlW_:{g.} OuWm.׺G<^͇?.Ӯu/TAxk1'q 8^,?*xGƓQ /'|84-^.|H}*~!N^ﶼO0dyD?MՃx:2uc"7On Ng|iOUe]){f>xI}^OUiOs(4f'~t :^a;G, 3ƍ~|֗'[y}+~o#???Ou8"zyulU^uٯWךo%ww3? _}7gɻ^>7nUwY;?I2ypOm:Q'C^߳}=`~yhW> f/Ss?vzijS35qs)q2~6SM7OG-=\|,x׹l2N_'v_\97)nHG]nWz8wnT5r)ZO5]>mK'|n}`O˞y_>=u>2vu?ڧy.{ Oaq x u}_Ƽ~hƣ.qiwrMycgf//]xJ\e=~я>z3a.vƋ>}]֟>/Ua_~`7fѯx`KKOZzznċ{'˽>n7^o^]yrWI_O3Z/lW?3O&!z_N;'.(~2w<\u&8:_ї~g-'eHӏ n#9V@“uO#jp9''G7 O)!==;>^㹲p~dY]wz~/=_{w7K~/^)|,8ɑW- _Mz 9//q[<:-ܲC^vo;xד<!KޯHxYa7P ^VuK?A~y}Yei`wKOjť#_*|"Wƍ}zpH<=UzBryxg8Wuߩ~?&x.L}Q'?<:.s^kꟖy3ޞ~Oˠ<E=Cy~Wx}Mw˃!n>yQ37K>NN\ 7?oo]d^ۯoG=򱽿g}qȑ=wu/~~~H|<0y. __e=xR?-y©Tcy"<~/s&.5=oc]!|\O`Ǎxv[>O>9}J=UL{޶Y:Ϯ='}`\#aWou>suǭ賮"gi>S1<u3׸8%p'~T]u\On}6k}ϞO]bUGxg∹>c}"k[r%; ү+_{i ߤO*v87(ixZ5/OG+:AɱE~WYzxwb_Zg:xx8ǞqG?{=/iqÇ#y/y޲Kg^Oykc^rO8~}.Nzݓ/ic\C+~~YI]ЮPx5|Dnin=4c?.YM~ۚ/KTG}^x~~&~xV- h=ηsgC~x+Ζǹ?^ϛ|qv?r2$? /V|<!|?G]Hڟ'_?Kc_Oþq[?,uR>]g$ro]>W/}SWd >9+dh=p O3SO -ӳO4u3_{!;ƏOğyaOc~mwrJ?Q1wْcqnᛜdbKx㲞D~?zs+yeȍ~^wqg|<}Ix8y|hرsZu po|xl^[}O͓g8t\;gv% m{C?_v9>ȑ7zocf^=1~~n䩾Px߁M8؁W}O>5W7qNvet>]UՓ,9t]um>[xxDI@}c>,\?ׅGx!ƛ~xk ]{l< mG=q.R1z|ßqv.c\Oϸ]eP>ccqU٥Pė|O>:HG2qK/: / ƙ^z]}c'p}*~05N~9?GszwS*^qW;6:'7~NLuY;^;鸆OJ egs~8<ӯgWܿ)o2-WFwgإ.uPg^6xp<@Wgt~qc~}YKNQppxD飩+7?m!8'G׀M~"gzȕ6_(ӛ)~'{sڮ/aYKK;+ܯ19<~=|]xqnǾ龇;θ{܇'o}#qUzFp[,fčJ:κ kMO|_K~}|o o!9t~F(/F:ݏY_d^ʼn{x_߯xG8H>}ZrJ>8O]ig<=^)8qٸ2xy>4]GZyH~"? Ot9~ x߿PGjޙ7xKכɱzsχя5\I+;;NΟv~'<ϸݸxOov ?:6r{<||7nbpGg\,TyA;j oEpm~{>sY?l_ k W'I>js'>w۵;\is|Q y;[-9~q~JAҸ3m co _r_6N!Op*/l̇mpj3%2mY?؅g /?=9ɗy}_;D^K#Oq?_3^#wp~x9ܻNM|@ uWo<;>}7_yʾ{z#/\|ƿyOsg+?778iu]Iuk.sT_jkKKSrL}#5;;?|x\:#x7]^-;3{g֕u]^'runiV>ékϗ~Gɓtyl}z|9m'6 OC~xƟ^\]lH}g)kg~ ǭCxvCAN:ODB?G+y$jƞ7f{=@};ϕ3O`> ;tɫ)q 7G.kgkܷq 9tzIi]O4ϩ$wEx\?xR?[z-<_ T{YaG|Jd=8<}wh~:D?óc\ݟ_ <7ܰodGzyoΘ>2^긺;$9+:]/~h? ~TA~_tg\!K~ڎ~\Okybß;|_3$xa#NM+\~[>?}B_ ׏:+~,_}EUڌ^|_p.yI7xj O懾\MO GN\<_-]?~ao}yr'm> |i4ȩ}?qoo}p<;G5c?%r73yvgmn*k\ϳ<-pze>7̏k9pܞ~]O+wx<?f`s5=gw>! ^_;Gp]q_'ܾ7N\Oߝq>On^4}/L^ .qVO{}bzM>u5ZḐOrlˎw{^KZ\pI >ŕ\g\\>|>SN|7&u*bͿW?+<^YϾ/OϜGOcWAew_'\_G':VB>G ܈t|qnt}OUD]#<\^G/t+9f*S&׹t|nYginh=~[#ˑ^G|7K'/IkR[8p G,|kG^=ݢ:.H^6<5=zɂoF}23ϋ>|x+f]nGrF.#GU7wr Rn^\y+~Q/wS.wᩏ` 9أIR^AoY/)y%N/}Z>%<5#82?C,N:o~c㒜}?Es'z 7<'}R"U{A]u?%^<#yJ yno%x2?͏s =?k''{>Y8 :mg?j} Wm::~wo7qzV܈G\J;^-J?wk7=<Q;pxݦ헑;>gލ#rҟ-uWp8yzh=[}kQ8^)|9wߎkWyrס'ʸƓzlz󦾼Equ]|h{EL?٪޿9ΚDF:!w~mN|+y{s}&j ^ouqƽ]7s^a7񹋶}sXh+/jK"/i:V|'r4 ~CM]]OI:3k]xt#<zʣ'/qA~P̸9?x?7z|<>wzӗSѱu}p8_߶xn>yλv]cQ) Nm Rr~[zA۴έ[eϗzu <žx㬣8:7~B/-w[vQpQ O=߮f?9.u]~qͿ.yW"g{ ?ä8,0lu^>b_7U ~}'^(瀧K@Q3?e?Kre|.k?rd?N8T~ ܽ^\!1KN_˓|!#ayOt8s_8qu^O=Kz>au_o4}lpnO>ug;Z;<~8F=qGr)_ 7?K^7Ϳۆ'󉲫7~ic98k|};=~ӦO_<}oGm۷;ն]-=zo9RuӼGxRz+yO4UMvpxK^~v<*xDHeto+Qz݉JrgrV?==p;sl:V㧐|Vdnwi}sg-_?8<~;ogEݵ{ %~6z%#:g~4x7y~Q'{4ޜ[0PWwͿ}ygi/U#O=0}bӺ>N~{wfXOvޗ}Y/uϔz rcB7뫵WהgެwObȕ|b r>OͿno~W?8~;RGo|O]8z^/,V{wG/[mDZ>۾Zd{?G<ݾstݹ7^n8^y^?L>s^/b%<ɕZCR㩮Neq[rE{8}z=n>[.8<_{]O뼮ӏ_oq;9u[Q'8l~?|v]FRMk?u]gko>kieL)K}Pzվ6vyH5+ }7/<~' rNoo?}J{}9?擿 TG彽`:?ww;]_Yz^P,h[npK}8m۞csyR/y|z]=ĩ|v~8_w8,y_r}rHx:)<%;xN݆Stg.^wz=瓿kڵ?Ͽ]{rx^WmNno<ݩx;;oq^/7~/9;gwyڻm=/94>Cϝ9|vu~lj-wz<4}%t8ڥsٶ{7rq?p ;\>qpǫGSC,/]UL}zuAK=ԋzԑ|_>]볲c귲bcdN:kfԥe}%7ҭZ๲d/_Yo46{i.u`Zon6u`XfPuS;}iT(/AV8ԽWϯο_u]?#tϻ:yu}~_m׍>^w\탒yu7<;<\u:ϯ~>6`T9u;=-:n:u}| k:v/ny Oռ֣X9|֕=Vh;jܬ/wuay?\u+0zq~ {f]bS_{]7`ǭXo\.:~π~hc'\ZqAƭ]4nǺ 9}pt>]ݺc됭~k~{dxCֱ{?쿖&_Ͻn>#sh?_t}Ot?z>~#~',Y>zb=N/:+Q?pN/=rO!_wqYWgG}[ hslq|7xxn~wc_vy\jwA#Ӹ75۶!B3O$/Zab4OGo4RW-y{6~}t~5vyuz6}A>yآw1qċ-{<ϻϙK,ݯy.8۬m'n'^gs?[c?u'Ӭ_O˸]GyzQot/{d{s={žzGxn{gdKq=3NG}r"_1x6ٗI_h}҇Ϳg{v.T8}ZyzAO^Y%_5zln%zߛͿO>b";b/4~cv>f?2߼{Ɨ72nc7o8 86˶oGSٛN\|ݡ{&\ɣ-~6; ,n\(7ͻ2N~ޯO,k⍋lgs} F܊}o|}y_gȗǕwtn#&C~p[׸<˳lVھmԊ4/yo6NA燿ױC;m#< Oi"d>SGOyȆ99 _-pW|\Lk]<qE! ~xD ԏWO}9}١Os;O1<=Kڗ!?gRqͺރ8Qxk<3x;4}St=Va8Q|v?zz]:vJށ\W_S+fz@Y`^6xa?/'x.oj9uO?#xb!zᏉu=<yc\ysQkzY1O۾_I92vһV'p4oyi>+]WاSz :n;Fr^p?kbo%۝$~XX>٭{{lz׹oéSGײ_/vN\XT]cOCWj]ۯͿ^C?O}\4rt<T"y۩Jiw~WM^p>3o=E΍;y]ix ?l<|z~CY_JM~Rޭ<ϴ47|sO/=}4re/`;_#X?Gu~eg湗8bY7.C3>byr3Nwz>:{T%18:/m=u \$4 W ]D.rYzy&7ryыƞ~ 9J;;[!0NT ]_N}8<ߑxđ{KlZ%䅻qpR+v[խsOھ,|\~+Y; b xrei+i{_Ç+S9p*~o?cN# .̮Ƕ1ye0]wX9hɺ=W,U=ye,9pou%p$^ 6F'jc=wx:x#.xxy)ƣb^M:_u"SiNxR7LbM_k9kǮ!/ޟN>gMz ~uQw(~qaL~8'N2񼎷%GT\~Ϸ/;;:pZ%vI|J>qSx7cť\sk'^W^״|E y>vϙ#wY59#gS'NUޮ1٩|7מx+R}/HO>UЫ_(z[ԃ>Ry䇪>S^>ot ?<.OS?9|eI\!EgI%zP?[m|Cpx)O*Q\ }/oU.v\*}!<|QǾ!gy_螲[xNa7x\61 yi_x1Ͻ |.$E>>zp"ny[=8")Wϰ[E>Ufu_(<?7zzv/7؇pyt<]5!F U;>o_`}P}+fɏɃG]?7߳+]q2?rgn9zgȇuRxx<6:$Yvr/^.o O捝yJMxq>}j:_xgGeȅx5~Cim7"݂W.upq=f_{.3zO.>dףuް:YT :vu z&L2ޓ}%f|GY'9tt>N>}ˮgvs#'W7>]7{7+]wMq0z<.'?УXqa6u\M8WT7u6}GPxsߋK~)+o;U<p~ԑjsuGyf㲮}w'%5r|Oc:ߖqϾd/ڇTr~Ǔ~y\m%_ص=z޵E;yɫV\|[C~I:=O>q O:/y#pJ_'x<;ާ?:::bɑ#C'F쑸]Յ?/??ÊW/r^~m?N;/8mߎ=W5K|w?$Wy\Voe=z]?×4z>=?㵋C  qB<[->ϟ0=Ýe/Pgڍzs֡.viw{h\.z+~.ʏ֧wvoJ(6v XO|j2vk6/+ԯwlNX,~vx ~/y(qv8S޷)q7.}:J~.>*N>#O]]g˿UOK*{J8{]z|Ku{ۧOQ^{};YWNO#HgjB9|/m.{?]v΋#xqLuz泸K/.O[yO۫;G=8XfDhGM]/O?Yo\|5;>A?c~kZG.nҒ~m6tI^a~yNHylqbռTuG{g}y84d[}p޴߲RTx9? ߓzuǣ ]PpN?|^y9 ģij>D:+8pݍ~ٸQߣOpN'$-WvgS8w[n,<Oo/yڼXP{Nwgڵ@<)UO^x gzx};?yN{\w5FލTW!nS|/.f=9:;f>. }U=׋3x/}%vg?~gugx9^S=މ#Lz.?g~59}!~eCOiI=OOx{kkV}kFo# _YL2-uk_#w7َCɿ :2}wz8;iڲyc uqy^[zro^ɇNuoZudcxu{s_N|qf>5x;T}~,W8JSpe:3BoQ_E4˿obW]<^/wpD./xI-8eIzFGT\asRWNo$?ϩz<~+jסyqSJO'Ojgm}Esu3y,qu?>ˏbG*^uSӣpGU+/7M.>Gis˷gȍQd9s?{Z.M_R|wO:}}w]_}:cŎOӧ#Wo~ +;zSx8&z8@ǝw6z_vd7]EjC-'{xDN*E̗;V}D)?K|:NWC|_gѷyYK3ܲ?q_~)r[}_UO A&Pd<*~jܝ3sd-b|e酣i'V"2v<:0yg]_J{G?9Zml9_ ~ﳪ8˫~Ҹ=ܽo|zku'=+y]ࠝo}'oO~-yyn 'o<Ʒ<g@SF0H i<_^/eoɝwŻ/9ev!Zm:wV;\0y~8[3Oڸz^trGwcNja7~<׍\[|fxֵS7O_z$(q<5>|>Xg3F)q#]4Og{6nv-ᅴq#qErK.QvYo*9uAWs3u0;O꼡^c O3 d?v遳uO]u| <==u;-|$_~c7 z~9G?WmO%}}=wm58xO~w} '3s޼Ͻ߉xz|[yޮ{G>Q|t>śgK믺16.a['ٸ]|彖s Ǔ#o:cP<xN=P98ߝa9Nc>ˇ}vui͸ $?H\\ZU:$;1> .k%3s<}f=}7:/}z6@׽]xyl>*n팟\9.qwBF~w^[yJOⷞwR15h'O;ĩ'_5SB?>]$=m潮s*}?q|8{^dpƌ8kOvŵ[x2'{mdΛ6;xc;~yοZ_.zSZ7Co—|up7z*L!񫌗q ;'LO^K7ѱy۶W}{R0uS SugC\Wq}'ӌ~>F Rz|u=%OBJuuC%ci׳koj;/qCnڎɧ##'Ho>yKO xyOln#?sg /n2/ߡi@Gv},_BٝƯ_šM]xެ?G޼Wmpq[68-E*G|, 1o۽MxO tnU|N_\c揾Cqv+TgiÌ;.w`4qQr(OLNG.a] }ė;I'Zg~÷qryK~b~`^#"358/Z|n}؂G';T O#Wi4@$ ||}}|5g#++䓝R/fL!M^?)^7%|;ދߓѫ>COvC8e߃>2Ήϼ~uǎ^bo?kl/yz%s)n"G>hU)>T4_7FM<:z+>ocp~f.1@O%ca~Tuĩԁǔȸ“ѧ^O>WiDԡ/l#O} 8'|?b<?<8h.ѬK#^"_Mvs8 ?m ?/z SJU0rIj޿;/^G%?AOŹG?/!xV)֕N G~>w8~yRz?߈g%X=q⪸(F>P7quqyG~K|mdvWW}*NDA9K=9TOPhWo\E?ÿcpE>Տ'ӦP>z=:$~HSb?d3^>On`y񷟇xwo;R]_E-kթt^-^?/qvri}k8L|ZfCȋgcGzNnoۉk7xR'9z37ӫsP<:z,G^ ?=/';0v>&?^I\]ՕYG|ciO캥I]VoޘP6x"O֑9n<˺_O/\ܫى/T^{>~՝\'|D&ZsO?y}{q+uM/n+>xoޱOOu\y.^N[ {3 WxܶިS;v ^75JR'0 PO_zx`o>|xxItm+7Nc4O-dO]5e{G%r}Ϋ>:w<(:WCC.] N86vz> }]/#R彆S".oW⫇pE~>ٖ#`+q~U*-?:EփX#_i=p;yguHOzoI=!SDSOQ_z^/ڟgˏW/?c_[[{DW]lxq{7yYuckItVvcw_dd}Y_W<8#f7-YtPZqGbVU=uB^Pyko%%fcs9o:PǷVWm3؍z[/{nWzp#u99eȿNJ6|E< /紟uwΗq_i/y)'pnipD[E=ru֕}0Y:Wb~S?3g\|ZOX Yt'ߩz qW˹_yc\_Ϝ2ՓM_;&`_ \W󹧮/fQyɋos޳n=[5<}Z=#yd?PE]?ӓGy"W?)_h2>WڿV8罚#^~ \S}zAGodS:ɼ 3/8$ ߮)G3q?ֺK\y_̿}܇_pK8>!~y}wwO'ɮzx5Q_ySIc`^qe?~T:͋_\#N*<‘y'wZAΝ|:>7^^q9|Gsn38~[p8ϡwqM~$~įWS5|_o|9q{M y"k'0~;ך?qxf[RW3r" 7D޷j]5ɸ/ިq%~Dym?z]uRW~cd/=VNjW l} n$}Y[/t?_ޓpG4Y,OKAF߳}'N_3nr3%}=zO>QTuKW₃S9q`oSEQK_ݗw/z7'_~Jn\|qG<0zS}&<ѲI|yoHYIk|ÏaQ.ɍͣ^+{7k}2>/qGsoCPt>v{8nyH)zcFQ _x<M"w~&a\/>^T{5s e?XoN^O~dY^>ȣƙأ{K?{}TB8Kw[ypǮ>Vud/ğ嗨 _ οx38絟.߅{}^Xk_/']#׉_fW1%^$wiy@bKűK$9s}~ +wz '>>>e>k?ܱ+O3.SVkycf~p@OUoG?3>ƉWO]9-O43L&έUvG‹x\pc/t>xzOoKGG6(.n&/Tqz-S_WIcZϘfw̧:q#.X?O]̷+Ǜr?ӏ_y<+ޗM?}FgOv]&o~A=?N|+8:?~z^uT w^>~f,usag'tqd}qڬW_67)?7:?xyUGz g/]x=a'xfú.%ޫy!p1qix'_YGo?u4gm}_<g8~ru_yCp]vq'`O4/X۸K>6Wvk{_r0rZŭq^[+M;[2U _1DU.󒗼 ^ ꨎbPm(DD$J̈HWfUFh̋1z^"EM_~o/۪+^=xBG)yKFLV%k/YG[{m 7Sc]JZ;\7_߿O/Էk։"~YuO!\Kn G'rxr㿛ri챳n}e3%oϛOˇ1t:CCO^dvo_5N7n_|O.C=QPz/[v2p{ñxco8o_ Ks=\.1tUJ-"z/}ѷs?E|r7_&B _SqhGXLM캅4= %|7IuɛyW;λ ky9qɼ%y(C?gGf'y#k[OV}]<ZʧOWGHZ*|~"/}̡8vrpGNn o?jOD/L>?ȯ;WzjKn v}%o>'y>q*[yN잻WyNI|W:;N3K+_eo?d_8s%ߐsq_]-lx)x"Mھ6\oھOyɱha:l;!m&%Oѯ/ῖwu{1qvtG?G1 iߪO<}^pO7%^oGZҺKX9 9~ qyk~Omg#߮t ?vv=dCSq7v]-;F~#~ϣ;QrnI8O0~SFG|4PEsȓ/n@!`zx[}OrL季|n>;ӿm:=>n't~_@i}~n?չ?ʺ7|wGs^_[Cu\¸~got]S}[yL@OKK?~6WU'nϪG/Bt uAxpTuZşc-n;hM;qm^;ܐ+yD>c)r~a79_'/k9}9zgϛ>o˯lEu8'SC=}>N#=[CGdG4zyGO2Cߗ3t tCu;݃a[<^:?9Ǚ}wީ{Ӓy!>9#QL^Mޚ\Ι:9x弗WɳK3oyϩ7yl[)V?my;g|eg]frngɓUhe{y^M8ɯ^,yi*,yC?#@oSio&E`%_Uz*:yg tCu2]":{9t|כھg~;2_ϵ'Y|,=v=}}'kU߹^랟ytFG歮0͞O}Q{ɾ7m?t]ѡ#u]D9w]?:Twu"z /m]u#_SׯX>+p7qZ߫n| OG\g1N" ;/E z6 u#~^wn_M~2ngS?mՓ_]}̼fc]GH[rƾE^>}.#rNwTG_Ex"Y۳Ogޘ띏:)ssOÇw:~y=MN)s,xɡlgƓqMVZu:uX9Ws9~#g¹BCT}V+=~xb/x.<%xJ;~u.73L!hz?}qZq5ݦs<5}yn}=zޕ[yή5^'6N]z?1!~,~>rݶy>dSm4ߎαG ]dc;g3.8oG~?[_ӭ}{^Y]2P98=r?^ _9@ߡg={cxԣ7އ;Zj\46z87{۹-}M/|\wB_|ѳs3z7|߷Fqc.nqe+ݏgpG/{OR^aU?x#ӟ3,w>ΦӜ;}_ Ey>"*?䐸LcoO9Ofh3qLeΛ,yRv}g5._qc/vHgO G`ܗxu1qE/;OwŷZ?_K<~J_Ox?yҿF>(^~+8C?g޻g;hy~Ö{%+4 +|/ǝd*z`O“־8i9Ti7zH?ݹ>-oR ;^ouvxj\]O^Kpe;>.u܇_ۼK\s^ιU0uSyoe=>f U?Z䈶yBm𵼗upz 2󥿣7v %o<Obx;Cҟ;S?szJ^3x:qqvo?شޯC"Kz@yAαVTuf1͹ ?Oz ?Oӌ<n+8>$r9zz!}_>O{T|>}e<ǵ/|kƞşϑP;7W]o:J禣 ߎa}ys]qcu'&>x"nWޞ|%|}ozW={igo9|1?<vQeS> /p|fg97}1p{{fOɓ|{-/|bG_bBO3"4|y/xjm'vm5|!_^cw<}j39szqcO|gΔ>KC>p?ʮZ˿OpXKi|oxy0>7yw-hȓޘq-<΁=}j|u|I|/9e6J70vbt^]=O\[^c;aCW(ngq >uӷvX~Q-J^;o3rdYv[>x"Wq^Sbc]-y+_8m?vY#' y{c2"-7ue{§v/O{ 1G>s4zyy,x'qY:]?R彑pr^4_|Λ!y8:OOſ7|x;m'x!?%~ƹo;v\~~tߒW[~;|?^ڧ ¯w;X/ߓ6|O]^_>;ndGp)Vz#zP[#q#7OέNЬ硓iZ7'b֫ȃ+z#ģ:~h}/AGe/~{};ou zp7xڧϝCc9y<{{1nsWiƕyw}s~ߊ_э#>bx '_ }[UV{|#_sg1#=̻E.Iu</R=I֏}r(9v_zλ/x~?o}/hM8!n;k>g^{9Z5Б|*K寋qvut- ?sˏy>Gg|艼&wg 0.|ׇN lݞ٬ɵruZ+~e~OzGGsnK⾃\OOu~h+R7|ߵWh=릿'^U,3'@zm?5y&?\A5S9}NR[tgķ_}W%?E\ ~i耞.Uz6z1=}>wk7_<ߓKZɏ8?b֩󍒟yESh~D;\>GdG?8yW<:|ߑʎm]-Mv>o5n#$?䭒7 "wݿ<;Y{$N|?%?-8{J n3qxv}3\Oug9+;6~}sår[6aB~=Fy/ zzVO^8ԶoK:at7JVVm#?Wƿ0i{ G碏 O#?m,~W\//"?'"=;rG⛕?U17>B_q! oʹ3/KH}_?zyUmA-_g]]W=jJ7>#ܮ@z{>=9A?y:A$C?zpgqHo O[%J?1.'W5 "?˗72|.ώ?]OgM⩳K}\%>T'ț>ے"URWuc?/E*X8I,:57sL+V#/s?}c}}F}9C>񦱏!|=|ЭqYwv<>Sq0zZ|'oAsYOfǍ~Mz-:J]$_w^\8_}^>7OcOĕ$yFuWS'ro O[~m[8dAFU"1HN}ur]_EnWsT\DG^u\kr_UPe7C#}x~c1BJ$w\_AaPsY}F|V9w^?/y@?#r0 r_]'OGԸڭO m\84{? ?'?8~Άsݟ%NB矔g*[?u/g<:̾;gį_fW{Ӝ OIx.)rV^^T57'v(?D-ɥSy{~*>~ ޗ߻nC g%Oǥ;z(<=6~s[<~'4r'G 5 1i#+xqt~=BzB<Ӟ7 ʫ>yG/wɏ~~SxR?ON5~n~8z>kψ=5rN'=qS';_u _xr،s.6GX[_OxutY_/ŗ/z~ ySuX/&:;p>g6_o>zNM^A|\ց~AOg?YZy/^|E.W|~_|gÓPO@$=~Lzk9fi1K[΋|#~uegהөoRyswă==;*몞Xg;t{Sx#WΏQaGzbȱdEϝ}wMȕ拍.<9uKgqXy !ߗj?"V~jnѕ4yFN粈'fnj?[z}㉼ֻ7[J\}YuCW7#?t ~煩96=7_7^&=eANIuNʂ-wE8◐gO/: @e-zasJ4,cE?},c8qAgpXNn.&?Dm"[Vߛ赩w{<~:y|&| uήz`˾nTa˯z+;9tYr!8/~x=zL;'~GOICyy_]q O#}~QHo \ݠgo7_V#GtTOӜ3qy몾cGvٶrYrsS߾蓭ϕ|l<s5N3S#6r>}̯yxVgށo c=ѾOG^K竱cp󎜛u.281~H~ wr A1vn3 /]fݖV^^gC;ߎ(DNV~Hx?3oГ-ۃ7~e_=ȧ#艼|~=*'~[gօ9ΧR_7ݶ?snC8z6O<@>1=;F/tOm?%/)u~R99O7~8$+yK&?_:\<ש7p+~,x',zpkv\ϱ|kv?&F ͖ǃC/v>se0ԸzƬ^:?:p^K~8o]8CxA7ywo.ϓACSS}_Ï[8Q+vN;/_kGGZ%;/sK=p߹O_xt>QӢ>ȣnɻ(9p9p. qKEߊ:_>QrWpSZl/f<&dlGoZծm9u70O^.q'(ZS砟SC_:;swש>:W;}df~{!h^|tM Hw[7zzrո?E=]~v%>ָ)Lgr>ؙ3{u:= }^'y/#T>"kp|kzP޻dcu>4>Wh¯.rnqG- .&_-r&xi[,bI_:Z\>z |{_- gZ? \'?rs͋_=,~?z^W?-}?׀E_<虜kNci[\j+~g%5=J\!>ϲ%z&5$~4ko O[}_L:O=Qr>(nWni]Eπ !C1փBC+;r:748s6z>m6nן=-?B}DW"vSy_Gwf9zK^%F?&{z3S{8¹O_}zWt/ml:og/;~/]ɋ';sqiܕ]vڒ"i蛿pϞ*_ʺ=Qw#q_vƓu=yW;?xo7cp%s:[Wbo}eѬ~"JgKIu8qd)rƿ(T~AzuT7~n/z -΁fƏxrw~Q7zh9SqgΗgB_Oom닟=>=:,:!g |z+O#ς'׌\G?9bGR>yuoߺ.Ngw!1/3\J~Jݝhx,xB@ԁ|?[_;ZU}swx7,Nh}巉K#FE܏Zg~trcxk7%u'VߏubO:ooy:gyƟ߳CvQz</|'Dߢ"g _|I<>os9/DO΁!-L:Mv+?؅ŸcsX\>υRxggz#>`"ZɗlY}nO`7}#~u``[?/un?\ϞrÓ:[|~}xjy,^OrU 9#`Q֝<_(oZ8_v\SCyO:6 ?#kcݳ?7ÝQ~z@釾e?;o7TsG˓[wjm.UE >~:Z7')|}6?r]/\/ ;Fφsz?ߥܗ+/ p!=\~㹏<'z }8ɩcZbs=U8'9nΡ\w<8c?e@ AU?i=;^eG8'ez2<OcWۏ~M޷1C|9Coye"?\߱|ǿP+iבsYyfgڿ mR->3%sn')΍giD|T?S˧_:Ӭce"_%:d/k\pu~Ÿ#4kY>\[q[.WcBk=gp=O_zY=w_x3iey/|QS;|O}6x;_gn\K>\طe%/zG/o;]GjFNRúǖsOZg@>Oz'g>>W/'B7-ǃsJ'| .K; awo+-/9Ugn|R? o{ƣ?~:̯ ZtCW'tg}]ȓw3S,~{8k7-~I_Ou7|:S=Yy;y=h]3zAm>K_7~ka'߬qs%/j3JՒm{SOùps, bțIO>J>|}l=x 6v6_tz?wy~}ݕү**i[kk-\zϣ۞u}m7cs]/\'ZӶ/a;n3x*\弔W'ʇݵ;]Mݸ[>_5+?]N}IN~ct,o"܏(:?ew<4%ھOuޭlt@^l>ptY\+ȿ_նzs?:<9<>n?ENѹ\?4cgqxU8aU>Ғ1KE:ڟ.iwzb>ϿAg4ȭzO@zyY/u|8[0LJ7|_DN~ol{Xz>dwrd5ۖǵO︫O9tHj",!qw{E7w"%N<]|,vzaokOM;mG;N̠}}%>P/o1C'ƛy~>bx1ys]Mq9NFTs͸'/G4x_zG:b8wOm֛^kz膿?WS_/\rϹF:|q sN9EΑٳzN۹Kr>w~ϋ\*ꉣ7m_y?9W}Ʈun%Əޘv29d^$.U'AӕZ:'YGX칢d%b'6OO|~9rARц|fy\7בg;?9x˾m\^=}˞A睟w$bZ.#<÷xX^wuu O9e<ߣz[/>N6} .?_jz]u]ۓ#pxDz/W1{C!oϴ?٧_F/R(/b}qzz-ڣw_4y[o</ev\d}4>{ _w?"ܸG>mN^9=qɷK~Q G \?~ y#Ugv~-Ŷֳ֡%:' +|;zp\'9]O}~q.< ^?`|OF.|s1^w:s/x:,~⇘m>S9츫#9~0 T~=r^Ȟ;5ErvWpV%)Q zh?munpPYRQ躮6^}{}7+G9ɏ*{_Y<{.|aw*ccupy0΁tf˺^9wG |OpmX,I}KM}TD~˳9{ju~@YX-9w/ܴ@]_ouqvc_Zom7Ƌ0Zx1Od=`|' ߼yip=% b=PsÒ7'QUW 'sf|s߼{d_nS7+>~o9rtMEpdG_1|Gs킿K֡G?E/@zj>`oۺtxέ ymX'p,,'|F^ns!y/:G{ACp~+tOu" yQ޸~n86_1_y4)~f}% _z<<={/ X{K(;Y^ sKn~/o> zAǭ3C^=hH~.{-;;K錄^xqJy>lAˏ~B/o}$w|kz&{b}[ޛI_| w/$n>|Dt&}y&:nsO ޷~=Ns?zr9zɣ\^\ϯ;>:/M#E傧7| \kG^c?!?qMI#;s#:vnעyI:̮/ ڧ__ =~]cG,9J䰸o}%8dչ* ہctJ~;~.#C$N5o/֙pn=`_FC4~/xVnz)zOq<  s–s${J1׳أWw>I}cK?T㼏 x tMpubO^:^IKkMw.O{!G.?=2>ŽL|j)z,vG^酢{䄼X{6נ{#ޒ4yW 3_$W7 FUxgaNj&ߠhstOVGyq'J|yd﷞./kb3FW=&=I;_9y|WM>9la'|w9z@W=}pxҢ+WͱOȃ(8uC[= [̸?«Fh}o'#_FɭG?=d?%_ӹϳ\4v<.y ?~IOg~蕿|o5OcϸeOǍ+?< @^kțI;r:=IKI߬_MwW~c?s o\>c:9N(*zYʿzvOpŮjyEy ygm? Ow"dr`7V+|G;~@>%a?O/#gmzdm՟&oo7iLxjdO\GGNɇ<5ȵ_?tFTrMqeYۮ}Y!!~=#z&gȎ  }/>~zߖsNQzXQ]"ϦO~Σc;~7 fehlNeo)~(mǦF7u>,~L{$WKvy3rÿ'|?CO;yeOx_$4A,~g/,ynC,T#'woh<'h#Y[- ?iRaoOE~(u ՟\#z2N>C_\r#7?~iup6zB4Ws_>C9 96r~xGMt\e(mٹO.~ycS+4~vy~szb]C+f܇?5n1_Dv\O3x7~Wr(ִOj ~[4$A:/bT=??~3|dnwx8bD/|Wx _jCqۿ/7 JN“8_U}@my>Ӻݓ+ 砿9i|;| W㝿9ot}bsv _^RT֝\ OqT~k#׶vy|Y\=:$/vai?ALv_-g|{S*;9g=~?RWx fi֓E^E%n_D\x{H>{ށ.xB׾/z{-w} >{:CgJ8jSik6uP#g^~FK$q?>zصoyik?tӫω'o*/'zeoijo_0oap!mXƵl:or5짪6n`'ſoL68௣M惧f/}"~s. |_|q~mt}MvES鷹|Cr{_SÇɧn`#gvWzyȿ |ؗ8"Q7Ɠq%TZ^OW=.į<\wx(>oǷ(/v[?8);U3wxB_u}e+#zOA޹´4Gc?v<\y`vUӍE>5.U?5=&o~k-_}!=n#V#'>v.;9r~i}ďKZ#~/U[]=@|keGև=-oZ_n/Gj[>/x}{_zoO4$_~cyd=+^a7{9 %$_~|BW׳EG[N?{[z=T<^ O$wu,{#^.DJ%8Ag*:'gC_uw%>u }_^"8qqw'QO'L۾lWvzĎߗ\}Y|׼s֪ckt7+^.'yʩ}{~s!~.!po.u:=뇾.5y,@?F\gIjZy&}mr|//;>ӿ'./HVo>W-w9E9ė؁MzТ/F_Ǿ'c=;|x' w5nqxrO{t}6<{uggb|߿/l[_Wk}ߎ:O\oCvz\=t繾߾_N_ Wziq?S㳇={:t,o=yDoK^3[3f.*z~&m_w:gzSS/_>CW}=H^}~{~]Ǟ]W~'?EKCg薟?z_4X 7S8_?vclo孽;xL]9YбsRv?;2|qrsSG_Wzz!~Ouۿ_O-=tX,#?v-9r;^O?5e;=-ܾs=W_.n}7=ZˮK?qo/>_k}۶ۡWcqz]χ}9=wGo~u^nu~Ͻۖ Wlo^xozϿw}=?gsxzӽmϽuxݗ+ƟߑKܔ~ ޕ']bX֧⑻uX]ܳ#v_szg5yKiC']N|}⸗_>6e~˺MoOe~>k/~w=]e:.k?ęSe|WT|56yK˓󅼇{󂴓Z8Wo-̹Tup9@$Yzٵ΋I;iSr6+ǖz:uY^[T)̒g {!=u{&+yjRg<#{ʬK?5y9BE JOgԪ둟ɯW˻VOngu 4ǩ#ː/:nwm^H}>t׽wӪPkH=}vf]z\ }T=狩?|yo8هosץuDծ.cW^}q!v]/#zC:]\?節uqZ#ޥ^~ySu՝i}s~AG{!=xbVaחWgW?H.kyuI~mIqŮ+l~1>jֻ1ެzZ_9c=>>WB?dP=YӇUwxY\O딺:pB?y;C_yTO{c:G!v|vn~1^Itg]zxۧ5<9f<1 zqOuussz\dG:3zWϫnp_QgoyG]~j<-rjO]gՅ:!r3sDjjv>7|!K?|68]s'sfYÌ+R>f]Rr^ˑ?tE%s~9{{ux"u.}uW#'əϵUa.Х?$t48/ݿoS"8=_9/a胼h:{s)gp`DN^c>͗*мvT}sl99ɹCY4EYG߫{Λo\ y;_Ss.7c?˾gtXrx?gÌ}gu֛ Nk[g܋ឧsX3.竈7/6sܜƾb:oG8藽 OO"iXuͶΗ+>\/rᓷ/yF?,A*N:v/s]֩~ѫq w__9n#vb9os' Lߘxs{p>΍'qY%'ugG`-x:ߋ[8h{^ȁfַX~sD xÏOW%!~hX}8$/qig*op?r6zcz {>-lxގZO[YC$bO_ף_JNYzK:×㏐3tC;?yz#s!x^9xw}#r^iyk'y+)1g^_Wpvf߬(vR#f~@ǫFOξg<=:ÌpEEtpsٿoG9p/Aw~o׍gOΡWx5GGy>=4O}|?X5zCcQקޅ ~tz =qYǭE~?ž*u"'ף{tl#͋j/'|o<8"}1w_*|' :޷O>Og]iīĕf|Uqzt*ƅZ3DgcX溶_sS칱 `]wr>Ijy'7s'n>ef~ƥ~~=x6<6x"g=epU~)N(Cpr8uD̺YGzDơ9d,DO\ȓkw@y^;wIGs:0?^zf/a__4^}V~U+M=G :@?#>GHBWĮ8n*Ur3~@Se}kZ}o}ɹo֧>Oz;Iwķ9+y{n߶Y-k!]3}F OGtPv *?u7K.|>83S7|"q7:DW$D >؆ޢ|=YQ _X8hɝO}8zu7rN|f}u⧤Wgɏ`3H^_aox̹SQvE73^z< BȇW7\oo =n/r~+m/H\㩍w٥ظy}<7qG%ѯyO-3yϼ8ti]\>گo:8GCv->c},T#ag]/;mcG-:x*}57͓E7_:k}rZi^^b=W7>,W><;8/1~:PcK,iuO;dcN'->/>4Е/=)prй:Ï}>9o>3Ao"?g֑=O?\6xC8"Z޺.ė̋Oӑx9i<'x缔:G_Wz_3p@D.|@>vgj5KuzGS <|ў_xO3Xٟ<}Gn_x>O;wOֺ.=}s#h΁euGG.;nݶ7NmtO_?s}pTyp~yzP/UoCN"OV>p[򷺞 zW.5-q%t&}g' U\_? "? <^t^'z\^>CO~~7KT|η};:g%zoMNU~ =^t,s l}ݦyYGva#|ֹEE>.6N|:n#"1z\!Sj9g5vwyi^|_z͙cC}$S:=ORӯq OolSV OGO #o=?\Ƌ| =xJnd^֡\?J~7\emh6>5Nwpgz;C/ޝ5gÓn4t_BA巠o-pbɣϏ}-?B/.}c}M[=:Fo8?r_Wd]'WDNE׵?3|]ëq?;Og^$-:q%|3?\wv<|Bؕ*_</%OJsi0+?I|=өv9i:\|5]] yvMXta'.KU[G9=졢;|ME7?T=7kߒ>[zFKǞ79'b ƃn=({|ċφ':Kt 7[~ m/'BO%}g>{k|@}=Srnyy?V/scހߢ^Z/"ޜIwr~Sq=*yao]\tɯ:u?| Gӧ.$7jCouI=yz6/r>W gW|?_Oę ɹ_J?m{1ug>:?7u9~H]ϼr^ f~ ȱu Ӆ{ĺ7WG!N^Ix2O÷w|q5He'lPr%N?gۯM^>[rM G?\h.pww.v/;)V85?U-sp܌KSxz֋s{XWW*>.g%OY>SrK W>o%=>~왌C|@Fw#ǟCŹN;1Wu3?Zf=BkO?.;Ͻ>Wo8~~pK\܌=3I%{~a8liOZxk̿|g*.NE~Yozz~}sgh<zoJ?G/=xq?~v4zIB?7"o$v*8q?~.qO}?mɩm~ո;Z['?opX@>?b؁grŸM A/}?/>a?mqq9~'G=Zԁs'vk=A?ЁY3$~~w:x2[[X[ԩM?׬_LJ\Wp?u<=zq:O#;sNc8~[ރZCv!iT]F[߶M_u<$§Oȩ+w7z\yß`p:gWӇ}'.nx7bƧQ}ON{G~xi,.HLLpE;hu?^~f~ݿuOK|5c'./j:]4:|γ_9x6r(r֌3~~s ī~y]ߜ|nz=l˺MMgp.}̇Cr?aGnߵ5/!?S*Dr}?ڮO=%u܀[ꮊCOu>B|'y-ꜜ<>=ƟZp/YWxB/O\\iiw}iO5ߌG^;]oCppX=zWOu} m<{{<9=irJ^u÷A;ݟ\ovv=SƁ[w#d=~~>?A8G'\A?繧jwxyW_ǜ//9u<[rଯuw©}в?.uky( [_gҗKCxz_x_q+~湹s}=ɸ<nL#'y>L^97x]vRusǟO⛍o8ڮ '>6-t>M?iq-rs<|}XGr?<ֿOD]綟ԾgK^RK/r nq'-߬\f'.we/i?8|w=׺#?wПߛ/][>' F/P|~w}xuy/[rGyCW_88O#2}]3~j:_zߑD/ПÝzݪPCǢ3=8&μm:} x c}r~f_{O__= ?WpTBc~7>r~./o?utɣC>j>k^RſWӹ#|~;^Ó.RRY?mْs8uJ.K_Zp7N3or]չ~q?:m=lg䅼<-Nb}aƿtٿݿO7_:C>ײop有i{:nNu^J@5Ep3PUvFEϕo[~_o@ѹ:WyCy>sO􁒇qҸ~}q[OgR _>IT"><%z?C?#p~{oAײ!xb? ?b/tgWڿy2_ݯ\AuO?W7yܓi|,rݧ.Ws-{Ώ|vlǩ_ֹs+FЗ[睿t8bE/зыȣg:dn7ܴMkXk}\GΖ0_tI./9ީZ;3.v}C7ߗ>'߈{leṡN;uӟt| C?_iz=8|nGCYO'%`|7yd\~cyJG^ݬクևkgy㵎+wN'oݚWĝ/~=AE/|RQ7r~fOG/F7ٻLBw'#|ʸ}EGp:__ϑ -BC/r";==zӟ_GIR;3_?s ͯzo9_m%dn=\3|C֝O7OI7rh߼?|G_~ȼgnu_V~}=Zo?-?.Xz]pf]U%WЇgz~/>JOďj?㏷:>~|'~+qt~7<l?>`?\xʹSw/~^q~Mk1>rnEgʟ:pE.oU (<'胾x3- J>1?yr[u_<~"нqk'qNk^_dK8W|}o>>u6<9ouZ_|ȥ/zZDYGs鿼® 끿w 7֋H}伶gSWQ?p/Ըck{ ]|ҡ_z1~@¿8t.̾n菃~{? _y~}i9}Syz?<|YzgFGub:Q|:C=Qxc/y뼟>r}$-򋝕N#S1y)}_1b|PnkuJn{̗|ѯ~y?K7w> :]4y#=]4w=Maw\|z =/=d| F~zo5Ϝ19;%/g_YK_9c{pwv_yp"}ǹ(q&g; =q~l\5؟ownɻԳTzOzOS-Om?>Oo }xo;9f7|nilrY7h~)H|=C]뿾Osy` ~osp~-8;_^re OςMs<}?߾1tջ;{37'k#%\_蛟c?|gc'}r>y~蟯 :.' OGhy=v |\|1:>ڻݿy{i]^:F/'xzr}eχ "?.*^~?}Q,WaOߴk6^|u췎7ikvSyoIgTޏmoy84%|>7/]~zwKx+xzwz^h]r m)3r 't೥/ыo$.A^4} O>K#3I?>/H9|>u~cǟų{<5JL+3o~3o|toQpP䢧kr#u<5tOLO|w<\On=9Srh}/;>گ'j?{gO#Gy?~r][Gr$y)TuOy+3o}}k=בW@.U>&_${&h?]Ͼ2.x]43/xNE~mǜL.Trwѵ:++r.} Siz%7#_j  ؕD?l?㷊WO|SyRpzgMȫ?r|5|ypq}+U59Vc{h>=uk÷Hη?mһ4Co.>ϝx|{}:q|^<~%~f5z}_c:[T_O"oY:'ϯ(F)N <'vk:zp#bZp8W l)f{^S5uC:[[g_q׷Jv3-z#GOp?t@sQ9ZK<_:/B? /uz׷k_#ק?yZW#~_ O3|vg^/&!<郳NgX8i;z_zC~gpȧkstݖqq;t|p[X~xvP}ϝ_hg1 kڎjYϬʋ/<>h;=_%ߏli'oo$f\RGV-ux ;wߵeϴk_|ܯK|n#?-KmԎ}:W<<7vPg}p_wbsc'_unEK>'YءCuM\p~x>||>b蜟;_ko蛽pO}:+-OZ.e~I7~\O%nxe]w.<7ϝ}E77 N>qL<}~Y|:;Z!Сu*9k9y37) &\LK;3譃χ8CG gYgOGR~DTqcя_LO@ɏp*/58OօsJ_|8?t>^][?(];3Sխ=#?p酉_ozն~N\g~vxQV%/8{u®'WGy9wqu4pCzp|]<ž-}M8vQ%{ߠ혍=7gZKvC?.Ї}mßw߷}9QO9jwZ/>ho]~K6"=|=?p:|طigڿ~\w|q}~ሟ:yGNį^u& ?*uy,VܝQyέ5i7cO^^3xW (;>1Ϗ\yV^""vVΛ=<g_tbs?}3kQm􀜯8?S~yo7YǮ=28#t ]xwowXmϢK،TrhK_}cN_ ?ݪpj=[&~{vcF}|ʧzmiǛCKcGxxzs9 \7|Q~{Ŷwxk?[.~Îs5ݿ4O~GwZ׻ynZBsƓ֡?r<'fr~q*8"}Ӵ}Y<-v!m鱓 `/>~y?P1]*x* Os2=%#~ _!Bt6C'z AAO̸ԇgïL\Ώ@o\9s}?9~y+֛_/\~OyH['7;5y*m>H٬?>{:_4~:۵TzY;iu:$ik;>^Nc+e}Cr<Ϸ>}>\uhco͝ nޙq{9kӏ|wݿ ?s)uwyy0kz=?fAAnyչ}ߝu'<=7w)ѼΎ'Rw佤‚ᣝJ?_?}+5ћ~I QHX+fczZ[/W_[ |/'½9;.㹏k}Uӿ;OO= ws^u<vo|+?zu7.q'rf쬬 :SAyJtsnIə9gt|E>~Giբ+8?9/p9X |'XCͽ2|_^_;co5_\{ѹ_+x߯[_x/pr} k\֭Yָ}{ϙ~ޜFuԢ#ѹ _<}Az N' _~YßO~;m<֙>f^^QX!?9?8_G?|8WAO>=xߌ?l}+zk./q훺,=y_b<=ANZ|ds?;?3{_;9gP;y+|/8zr6=БM_ͷɁckl_ݚy<~o1_;>-σ}Vw=ʼnfM̖WpH޷)s{8tތ_?f˫^z; ['\_8y-Gn['{:!{ZWЙt}zeC9u g*y+;v/z}kp1gg-`[c9'W8/3Ntg{ygv ?Tߐ7Ygz~{P7z#;>}+%rʺ3)>W ~Jr!t~ܡ1߱O3O|~AǶy? y/:{I'N^;~;'ni=sOn _/{R[6UG'gq\/g%DgWΟڏ>ǿot^7t~q81Ľ D#7>_ ~E>ֿ}$tGxsۣ姄'ΆzF4Dɏ硗E#_*1 Ջ~ҳGm]sЯ=E\~p}[ˡ{=m/|ȩ{bgO~e?߱wOω_7v?ws:vWO^,}N`Cs֝N?~[>PtA+܅'[z79(<ѡOx%GD_o{&qߎ򧺅7:&_I85x0%7U<?]"&/G~^4t>'w>_sO/[g~t`?,yG>wE_aʞCG#cSЯ"$u߼H#>~Y~~/`t'Y/o3yBG=Q|uJ6?z|Wlxu#/j}'A>Ux1 tIjMڿGp CJG(9>Wo?GDZs>wyOۇ'\g]+:/|?XyCW DW5 B<(rC7~F 3=/D$4{/O(\'.;:#߳Cծޢ}߸ >WN~=S-7x|%zb4zDs6Y;_˻uZvG^Ii+{~{_CFs9LOz=WHߧEWKƿ45SZvyɇwu8!>_?wz^?_G.KŞboJ>RORAOݿQv$?e~Ȏi?5>yk>V'>5/uJ+p9~7y~]Yt/[|H~!ܘW}o-yƿ$'-_#uŷ^q{cWӿ7\[t~r<'ߝ;-,lxZ5{_Lz^bBBu_ܲi[~Z:oi >ۿ y~;'zw}!DO~׳o/m{FlZy]lG>ŏ8tv6&ST?XOru7+u}|K?y3Ox%S =绅sz=2vhn_͋~*9N <̯EȹTO9_`K˿3)|u+ވ琳?ɗ`OKRΛ;u㛖Oxȍȧ[Yi C+:]z/t^"쯶a"]\+@߆ockvmT䟔?#:ϴ'[y Η*\|#F֏{.RO;t)!Zzn?SXG_8΋h?vUx k_znJ졖Pz<yj#<^SOXuS3%/c˭w2 ޟ8/eW>K ٦G^yټ+9_[̧mid?N;5KvQ-3uGgGG~g_- j'GH{>yN=Ǻ/ۼ|YO^W'*|i7k|8,H޹u|{%v/ pEΡSi<~b/x?U٧WgHEW蕟XUtF$,x~~uĬC=G\:R|9o;Z [^e'3{xE"o؅Dp?x {c|sݿ<x}X[-=#0|$I=<+yr /1:E.r (9}ˆTrz}ąٯunX#79h?5=N;_(l8RO'v?Lב][>g?q幅]/HM-qK]wϾJGV66Gk;q ;K}s-ӣޚ겪oR+\s]y,d'O|w0///w-*~~?㷎LN+rM:>>42:hiw[O 3wyq6T]D>=[^ۻc?gr<KP35Iwzwӡ_t^C뗺 [C@M}_/ܠÍwyO_ïy4?\V~r<{g|o=9񢫮7NZ~[_׭ΗNZ~]5_w{>`<QH|aFTܢF.췇>_zsw>8zwf7-u=5C|y~Z{>:hk}ߦiWC|+k%/a옜?ܒ7zuB _fSُwbnSu}Cʯl^k.yΏ(9{| :zm:=ߣ#e'{YONscKxnts_9gd|+:J>y+Q绤.dpn{wye]>Ey?Ga)=g]}>9wO{\s^M>}w\6uϹ_^ttnJo]oȻ{sݙmח\[ޮ߫^͹Om^+g}쳶ME8z7~jz]v/zc97a-7_oz?Uiw/w܎H\ߝ|=smrr#Ӷ>r^K]+?lx:y{@_>֭v?ӿ?~ݺ۽=nojۏfJ?gŽ ϵ*z}<U{Gk?u{^ڹj[xtp~e:6#S+'_9A{WVkw{q{7=sy!kɓ}{k$e:P~~񻺍Ǧm?˫:_G朣[ϳ<ΠU_^SI|OuwWg׽5>lW_zks}zuщy>Sn9/[\U_Z,CK;zv3@]'I!7Z_4_/퇧?z=~N]z9;g_#'S_NY/S{O&qv>7~|՟vH?~~m~h[]~wycwÝϧ׭4miwWP|#m\?7>sCo[Bk^wxW@ʼnOSi{{C^..oW!pmgt\_;/p_pozy<>>нs\@^{ѻ:pzqݿA y>c[yzzNpt|z3)ί^)|}ŏ}u}ߧ=sc|~;y]6:=ZO8G'i:M} ߈_jqTm %}Bwu8w:0_uĆ}7'q8=g#иinqw@~t  gOg?}]OCNߌ{S#|%r#֓j<ύ ^cǾo }WI?\1Ew_COÆqO ^/Ƌ=Bx\b܊+)_'x O9'Uq4-?Yk}.|q_7͏Vn6ڮG*d?݊#yN}+~Y ;^ |8 ?Ar|~9R^r1?.w"'@gg_>~_^9|*Ow_1ү8iivG_:3vYZ8*x Bo;>i?vOw]ioͺ7wv9mĽųeKKm9v$- wp~>{n &N^_:}t&=s{\rʸGO미ه¯8 G4\WzGp4r} p2}1~ogu3+z}Y? 87}Dk<ݐwY-E]q/qvϏq|3^Y/-~Z죎7 D?& WoN;Nwwݞ} w{p<<{iNӥ+]?tF籞o?ǟA9o7}UOyT6~\ۭS͟=~?;o Ag2^'γD %7ƥޠSG?H|Lx=iD;G|:C/Gq_v$?yZ|ߏ^N:]{K.=)_꾆|'I<BDcqQ}gg];:o߾[~)+?OGgb?/'~Wxj+:tʿO%;~N]o[|৆:5/|;}zG)yt?lyGjRCSX\3O#o<٩ Jk/?8]OWv"9uH<&v/ˣw^3z{Uv<+"GRWg8?7w8q/tGc|~k];@!qY|~X~y977d%Xm #|Z⍩ѿᇝ S;~g?@,oᚾ;.?נoEC_пyzm;?^zX{*ncCg較٧諃G~Yqdr)\\Oϼ&/oE53:{{c*ó\to/"jTo㦧ȫ'vB.n:П;3\y{2\c0T}SxyOO]9uuNYoyp Bc,H?_ߠCKQ 8|jA/|~3>YGY(w^ߺC? =}:zC ͹G:?_\->&^}\?ZoXI]Ky6u֡CW9Wc߅^_*Ns/d9hqˏ5qwkr=S|ZWǷfg~K~:n3Z]yGےO:}N nͦ]Β3? _B#yfч苣_ɋu > s:}6<~j}SiSSy7q'~C? ݏr^S/7?sͣ{@m}ACv?]%:t~طsTax|-iWoU3=k+Ɠ<4iSu?o\M_mr +Egߛw]yewR&>KN4ꧺn7qҎ^׭w7/)}gw/ć+|ֹUz͹/zſwn<|ZTrdx*mzN;I(Jy^Gs?碇SFOzON“㷫~v~?+tY <#}~O^ެ"oky^s>j~MD:{I/3)ev|oV%[y KqcE_🊃<~85si፾K}薜{7ɫ'n1aGOviI~R,/?9jcOǺneG0ϓi5Gu;'\3=>~֗݉޵ӗ-.O='''=~} g;?<&'H=M/y9qg8Z 'y%͏P#\gΧN÷ģ#[U9yF.M>:tKGgOڎ>9-{;-Nt|;I^':||{vNz2㨹OR׉&O{#9{cծl?.\=;Rz_#H^/5'S-9|;-rX/&"xw.OD/'K.ˑxZAwet^R|Qzx̺`l;9u|\Oxсxy O g~{,6v}ћYxíϕ?c:7<=b{͂[v=o˾w!@<κ_$q~=OWAp=O|?#/}A3#OGO'5oyXt,o߶̛Cy9u]Ώh? oܷj^Y'n ;bs'\ԿT<\xo?3˱x;OſɛC3Csޖ<U՗w~ ?<){m *˸wyQZ1F>:_?7 yƞ"yw=IW/uoz^~/'/J?Cw9`%g]1bSpTzA!%8ؚX?փ]|m?E㏩ܟwfG  =`_ȵ=y77 $%p~xZ̳[_qR0D~ÿXރ!{:~ܕ~̦+ʯxa芞ί@#gߓk>ǃOvMɧ3Aǡ'!}0~gOn|uh:.]_wuK[:yu虞^[쿖G[q^@c_/ɷ?饎ç{M:dO?;m9zTueMzbgX2\x&?2}?W>_ %zu!Kne߫3kyc &]O[ޛ'g_)O3Nf;Xoy'C佀/=Hb˿̹!$r忓[*5"OUeǮNFt]~$`N]6y=a?.>0hOn2l=GK>=j8oKs=@w$~5rKcOW?'ϳ(ܩg<^P?r fdO_'(\?#Mv;bߣ6zku:&W>B:ߠ}ϱ_'\[qf~%?ߒ˿oO/BgswoI*_;|VEAN/|1O\ou<ܭg9spo4_ֺ{Il?'t$/r/M=>hP9d[J-tylu#|>Oeo(zAխ_%韑O>OQ"{`Ə?yEBOLJ'fCOD;ف,>b?]#qtB]u\K!tHآcHۏߚew|!#>?yν \+}.ۑCr{ga=S[qo?7>AÇ̟g:?bs~57ޜg=S>}';9?/N:ob^YWOoeGʧG.W#|@~M0Oӝ#u'(yӫ:‹q~7:y09ęyv3 tA.=\x2O1<OΆL5.5x'y~KOi.VԱxʹ]g֑;V)mRw>/y>7E 4C}2:)s?|ie}1>?x7yO*/(<gy?k7.c?߯u;YG7]W>U~8߸_bя_ptF>:LOw|c+ϧ0o+}_ꩺu[_%~;/\|\<_3k^1sWW+KK?|~Oȹ7xr N<]@_E?m?_E^d_;yj쬣OGg;cĎc[Wqq ,jɯ Z@k_~jݿ΋߯3'O9'E*|_u@o\۵xsŽ[~țO=Edxx.^3/nlqvyFm56~١cq%%Cu=cNk}Dvy8dSׯSg>y]oKpz2}B bk3|:їynI} =xaZq .>]Ď< zs]wką<ɷ>[7f3PّG!{{w l >>/=Oqi^Dy7rlWO `huEۍ9B oZ7 AL>0}oA}1~_MÿǏRwKG|8\ >C ߝ#r0nX_%\w3?Px:/N83/<a=L:ZzW^D7zSuGC;AWTe+7]z }{4o:&?9~gOo! 7?6:)ĝŇyyy|պC_eG9'sһșCL^7X-я<|R7tLϱGN^3g}A/#ù' ~[ؿ}qc87nw}M~d-W7|?C}S}c'tif<_znQcV|EOI>>0qg^'nh]Щ|9^nqΌ!9y|/TyΤ?7EuC~r:r >%?/y?v|οK ~nC~:zTky8,q?Ni ?=şS|]]SAZYy#ώi?~j*>ڸB_ka/$"u%ˑx|ޞwÚ7>m $:cw _=1E.{dx*~c>s(xR7̼?r╢Ϯcڎ}“&_b9v8}~3c>zoOg<%^-~AOַ 9?Sxdw_0_.p{z!^ާߜ OOVzuu,wu\O38]c<3G~4R;9z]y9Цb+W]F9ycǜQy_h4hui8?_W~C~ 6MW#'xgGu.iO~oӱx<㑗>7s=Cwq'qY|z}r;E|f,;ps8݌#_u4-?\G_,Ss)6z>!JntWܕ'r3D_]NoRqcx''So~&|=/o U9?ȉ#؏n:?W^izZI~G^8k~]aׁ_uޛn+=}⏏gq)zqG>{6^mWG]/W^F9 |=:k>z6bG:IJf)?yϾ?_ '9|Qp^ޮ['Hz+{O]'zp<|"/cx ]'~ծKY6j?RD>kWMo)lSЌ>.߶M={ٯp$olg~C$Y\ϙ:w[\xҾ^zsBG);?=y]92Ϯ'o=x8#d^Ke!~nSveٽG<ӏU;[f%:,3/V@8x%I#zC SIO{/ȗO~AzSA|aMBڬ;/Ii~zF}qw&x"oa3TM/}ѿ_u!|%gh=5~MM?< rS8Oa|?@S5|/;cΧW Wөڝmϧ^vSOj{q}s.Ͼ|Y%k};߳{A g:OB ; swg^䓸?az痂3q)\ym[u^.\F.f?v T]=?y.?eQ;o.Ns=rgrq\u#~ˑK6y?~zO&:t]Wקe߫Oo_{K_~:B>-}=vSk3OU8(?euGkd"foO+r/)׳?<9{[wtFa83t⨻Ywt.G~_!8yniUVO3^|@:/uTe看s˧O9Oa^7|WUg_g?>W%9١~Dsū/-{_<ȹa8N~JǞGӆ/̺ $Ou OqzJrȹ73>r3a?=7J>X -/;9z_Mo7_ϙq~gј'=-?ݿ5npȹ(CWb΍ Fw]I\oN9"oG 8QI~[{8_//uxuz<&f]cuS'|u|Ժw]Mq;{ is|w"~_ovt(ggs~??8h=};}ݼЧ7w>ЯSu!ꍃ~ ?J'up9BτW]~%;_,xuSsvyӯx7D;{ȭ̼z:!pn~~>z>?_}P,5?Ns3<#G7}SoT?9^ >y'on>:GcVP-/CB/QVG_/+'h_)8}>v}|в-;[C_"Wf%'d+AU|o8RA]S&a| 8wϼλOƇN/y[V._h?19|v7軉OVI{E<^nG-F~ggxy_uӭWr|6<{ e?F>Pa+4>FH> Y~a~ƕOЃfA:=t`󎇅l{Vkћc?\v m=&NT7n?Sr}ҟ;=nz;RKx!q':sIܢ^TPK<=Я{zTsqC'聼xa緡7W>duoY:/~ez5?f/)eۗg3?ޟG7~?'ǎh+}}CAo욮GyE'=osN@\'M^y#T^~CWt"^)'_ .z#~ AoD_=9@NhQ] =73֛މ?{ᕡG~CCEN7sP~#/y_ G}.Kyr[}^?`>CNwkmגw'T| O䵖}O2/~W':Rʬgk:,! ?7['a#=};,Wr׼ǖ?'>:.n>_I{ D>O=ᬏw|z(?ɩk͉j^mvBNԥ S=ӼwoWïЗ1az$/>󟋟,y?ɳjF県oECo_pi'oz}o챦O[~v>ިk5o'Z_.?;:Y{g\x{[rN||/9=>m f2x7Cmv;=ozf pNܷdϲ[~SFߡwZgyY]zssO9; }Ч紝_Qw3~qZ-I-~>_g\Sn/~_2Ox6yţ&RU~<//B.-[/[{F{֫7S+9w*x/Cg6t^K|xg*"%7^S_w>_b ='#O?󢏲g9_cǻe'[ O/Q7uSE>Tj:r;yz%?ӣǭwj>oYϒw?g,r}: @@ɛoKN<9PJFwG>Ξ2~YGS Gu]K?i<·m.Z~;"bWlH-.~;|;'+vz񧳳Z_tn;_9pCtL-"sS>}X~ Bn]w ƿ]m>IwF*/dx~٥$ޠ>5~x:GH6s {"/]ߛ+=^Ow羓iē[Ax:Dw|Ď]=hS>C9Ƀ|п)w풯 p?;8;[{i|D>O=+hz>^*\1y˹o׏1n>~P|kCyjGC}qT~$nr}խ[sUJ|rN}E^uSӮ,:;_]x7y+%Q.yɍƟ*e{6mϙz߅|ٺg%oď;dÿ2yesi{;'v#MG|?K>~u߿ O5I>g'_'e|͟V<$~LS/OC!}'vi7z~ڙU"L4K;twyuӑʺSN[Fg&|־GZ`~,y#.z?|'Ǔb}ZGws|umKtc]}y>}t]N^-|gZk^={{~wt>7c58D/= _"7CE keݵ~oGbpW57Î^ȉL>]ѯ;/7z+g/TOߗN'3NAqy{(J==؝OO}6X|{A>?wM?H}k>n-x\ U:/u({?^F,紶Soj=UJg?{m7Cye)|s"OES/Ng(uqs?w9'¹R7uC9BݣsNߧ~g2珪S99s]ZO}sQr.3i}=}gW=ji}4[rwX#ދܱ~䯿ty/ξ96S'_uX<-xu$ѣzm93:Sw>Z7^^:/9.kut]\>sow}T w~ܝW>àПzuu鿶gk_Ǻ6lzk:ogg ssJ~0zs ΕpsM痾0Ժ.\9bߟtyir{XXƥu}nG~hK4;9x=>>j<9H}<^GSխ;9&8g9w$rpyWts',iBߌ:t~WbG=`zqѺ9O2Jss=5yc\{'_W@M:Z9{ 18_y73~lxs9U/fcO;3]G./Zǣ].,;?Aߍ}=_:uyN=:4|O]WŎg ;sP4C??K?_?s2_9vO|lS t΍Bw^wtCnl6iݷi |xGxv:[Q#rӒC?ܑ+~'7'MAOߦ8 ApM^KݝSs,:X?0?7?I9̎~.ۢ{˙ך"J>-_V._K~>{yѯݿKM_t۾{9FsNr/ʼn㡍+(/G/?o)zVCF/n'9Uxu?_?d)/A'?ctb%\JF7nU~ǎoy5Nw9qgć!uSr"t^Boy3z?G_gW!<5 :]ə'$OE9uqE~$7Eџ቟u?~ ^Iol=|EjeqtY<]G1m!v {:A ~qůvph-sz)^9x;O^ߓ,<^ctێS;tLz ~?v[}_ћ>7zbIef-_GC_ ;eKzOpO>߻GAt(nG RΆO{~i~;ay"OZ K-xwxwu~ܿ;Okm<~_߳ KIL~3m=_DoM~28?aGv{|^_{<mJ5 .ʼWL }Q-q#}ugS#F[tSeqa =wCjދ"?{pHi^ [ZMCgN?II8yNɍ~]'ep ֙vKn}cV z]ug]9W!<~?t?[i F>o.Ou6C/ϼGvʿnցȣɕ^}W֯Y(;5^,xS\o<2_^˯3M tFyrK?A_0v %/yA!R*UL)%5Q$1%N%J)]vʕS9#@<9g}TV׻̋st&G>k|зȥ;`!|e=:ww-wqB7:'|#Ost` 1r}wtB廎hw_>+=F\|zt-* ^G{? ~.g#'G4|G ydݳ?rJgpme#s .߈/c_3xj=T {ӂ_*8,=b}u_#*B]k'Cc?ƏqW;\fHO“xmy"9y?>{[?}ۿ/=|kx?~Yq*_<}Æ>nmxyV/:~x8j;~Cmߠ#@Gj{yv*>;<zj$}9 ˣ~HxOazFI=z.+>?r-o˱j?7zo5ҳǟ OEgS;“wϭuggy ﮃO֯\Gqz}kɯWo ? K{tws}?BlzwI2fcw^N?(zn#yc*?DpWy+9?+?0x} 71';?4}?S˧K>'YΟXo~| K=WE]?b7_ǟbCGx2އgXS'~8OʣO<|>oD։]^wW/~lȧOөts+9@>k*+}Sqv9UO_레D,7zJ Oy\?ȥIs)߲s=ȳ{/_9vǓ3/Z0~L>Gō ѷȡyiۏ~@(!/% OƋn+͋s|g{훠OoMK=0NL/ [S3cx.9+riS?𳩿vqOߵ_j76~ˎ۽PqSx"h+y}Nؗeoc:_~+Ϗ^!71T/LwC痵.n6}Ywg {%:Я!]T;.O3* $_u' // WKn׬>w=?oOOue;?hNmROt>E ezn ;ѐC_E[9Sv8 āڞ*O-:ZMozFj_so~Nu6G[Y=he)xѣ^XZqXtya\O:Yϛs :-N*?b]Rϋ|]q8eKy蚿&]m5rb}'I|~~ X0}߃\|/gݯ O'XX'*t>1\Y:3圈-w[ >6G =~#q4N|my[O#qzZyZ^!x n}=偍>`=7*O!r/(w8j?^J[vUW>vE]+un{^Iӌ)Пu&g}/w=Ct.B7kr 9ܸ,JN-m5nӲo~ c˟gkmZ7+&_+gz=~18 OcϜJԸO[EgNNx+};rtW[Sq>FΚoGf/fnُtg8٭w?9t%}=%պ#{kS=_?'x*zqƇ #^d9dZr/~z <>G-E_{^}o:뼏FWi@3巐A3է.'xvWœKIs?J.%C})i~-7 O։KcW Gy8f{MtW{(9㶸˫{n盻oJ};EדF &ԭ|y/gh Oֺ?]A+v;ӼLzBlU;3}}WU.ğkcgqRq:8 D/9S0?g?y}]o9n5{;Odk  |'<-Kk?%wCqվyywѮ;8z+. <>ԃt^#a8]tNozh> ^+|oggܯR9 GUu7>vq4}G,\島}5z˸sϿ.J^æu8i~ 7M/yxاtoe+?}ま?/ƹ}ܤ|| y#~q<2g߫:ξ7^ŮQƼ}@<o.kC']A?p} >'G7GGZU>w^c>u*!^WnF|;rCȹ|!<|ҬO ]xj@'O;|ׁn\?4=SkwZyA;'-:t?r_|u?O{r{Ń⏯Y7[ɾ<|YKDo-lRoCσG8zpZzQ]gW8u+?k2:8,_*_CwXp`K~.ۉ׍grbɿ/_Ǐ2 덻ّ W]>2W.~|o+|"w%᏷/υ'qPk<|J~YAv.zC_ }+Xqoi^<3OOEw7gǏ~O#sW];[|~ޛOEOߑwqR͇?wrode?ӑY?+CνfG|#~*:l}o+/< _z\_*yoK{~%oZ|~} @꾎߾OB~[UF>Ovؕ2>5!گYGae?|\V~?C~D_yN6]Wtb/%'8pGoXyѾ>u$E~9Do>ӹ(+ůqxv.+dߌ=͞j 8VN}3=z[ȑv_{J=>ٶv]xy /ǯ0w]dW?[MLۭ?%ow%e?;{AEOwcߪiD㧸';Z>m㬇ג9~{m}LH1)#8+;R㒛Kh/ouRG¹-7>~qxƯ{<#_~6rp茝G@,_ 8'Y%uυ'N$W {Twdo<~eȯm ~ns >M]ٸϥߵH3~ПK+nbGmu>緿-t~1|¼~̓l4.qZF9|n# >ۜK5xi{ZnllG?S߷}s~ten|GWyV)u+"gO?S_փ~~=yAKG3/W=~Me?7#ggѣk>^{ËK'~6rgO֑\uZ{| k/'6w^/z*<?~iՙhd_>y; #}'^c?5?ᗍLYρ4>m;O%՟SEok=ݔ}a3s21e,zN߫gk[(~;C=9Bߓa/Wwʏ?;h0͏mZB/ƳȧY~hrN_csW9rUɭȻ +>Ow3; q۫Gym^şo.gQ$h!ٷGZ'c/FU'C ]{d+Y~^vm7^q+#;)~B%tϲ#~4Ao=YOc&ϓ݄!}O%Dٽ?}GOsKOpe_Y}?;~k[p}ƿ^8,~#76yΣivKZD8uk;%}O{x<}_ݹׅ|G߳Fg;*o||^D}-'Ž?vMY+_$⧩_y}_9zش$q+q? E 67Vݵ#><D>89YOOç#:ގ?s섙_x!*inG:yuʱF&o?^*n8rɏc? ;)Ckׁm;M؉7;VK/>O8yh}{“\O5I/gIW3 t}-8?&+vA<6=Zs='9 w~CoWK{Zɯ:57hy9[>ܽno#ZN#˺;\'ϥ]|}oV]ٳ.6{"ei'~>3>ov/_/0{wsf~'eKo—|&O'3QA~u-8rG~Js1Om?Sf?`?G[?2'[~Cc]h*<{?F憐}aߓ4{u ~j<5Zr/㬼%~W~o>W7|,t2}t9ߦq@|G0M?}Q-ٗK?K̿yж\wHoYs(g,ȧvqMKpǞ=avv%%C>oy#}xWr=Ї=I*;8;^M99C}..>ޜW~w$\us/V< iyjtLEo^is] : Dw5q*xN\Ε7<.w^]AZyHk벳gy޳yK%!yr]xzTxNFE?0*>u*By(O/K5vX/9ȏ-6r1Po\g$8nCJse"O:;QqE(9,~]s{ ZS{ѷaM"Nڵm?-HM_O[v?}N;z|rhp7SΙnXS.In/9'w|Wo/m?ғɿ+PJx.''hy?ޚ|#y{rlRGggXox"TyT$qiR (l8!_=\}^?\I/ʎA>G]ٟ|zo[/#2_9|y;𓙧ɧyno'V˶kM~ cvf:[kZkiעò.۶~:og}u=O89E/GN!gdY:•DF~{/oxɧyDޯ}|>{<B==t:~/{bƍyv?d^kFnN-t9F}S1rz|JK<W~3߸6<-}ؕ?=q=z(8|N;q-' O ..@ѓ<<~ Ѹ~Л+Ai;?b΃-?2QB瘖#uq̏y?~c~ڗxS%^V@/Qٌ/uyk:.?قc87#O<}_m~>W1q/xqjeXCw%C/<-\47YeS OC]*~cQ+?XB'-_vx:Ԣǫ˝>?݋ -q_S蘞"O9~sۼ]~ ?\^ so;<ޝ߷|"Sۏ3tܗWDBV=/[Oց=ʏ}>^qYc?pɓ)+O =_O{YgW!yÃ[_cu:m>-;.5ω\|M.y}_?%^sڸɷȵ7k0G.gǗ~B^^:_.;lx/?z-yG$/2>GwgS==K'寋|ԏ6{k2+q+zpf}cS?{'+_=S/?]+M^{c?iGWjyf!dɫ`?7߹ӟz_K-rpx3r>UWS˂ߑ~opf^Ч{P'/;vrDNy}o3Sk٧l~ˎOO5{/g30e|{]x_ZOzR燼7T>`#G#:8 "_W=~Gx[x?ZѧO$w1<vk] OsM_./!uɗ>W7=U])%oS#3ߙu]>rRݔs/{:3/?gKcOT/X_H'/ s0bgVI]w<'d3'G/=}7symsop$^?e-Wd~;>Eˬsoc_\Dyi4)ˏNCN&9d9#uX<%C;^շSjC}9GyK>Q6o~kFOGsYȷ9%nH=љW|Ŀ[n-(U=ķ7vao9?~oO#K| ~ 9)zyxnʞK(Ao&[~Cu/]υ'zӯi)]癗>|F'x꣏?:κ/b=x/;>N>u,AIC;^:Fw|C'~ĭfGuxon.8 ~1x#Oގ}}qd?y /}WʟE1g6kO/qhY]̖8vw>N#7ED J *.5O9O0E_)$Ji~]l{ Stj-t1zʿff>f]c%?u^o7u.BXrMgƮ%Wq/#WbU^D+Tx|/>W 䦖f{O'3“lbOt>s^o5}ߪ!~7[l^[[痪i.r>WĽ3g=r]xǶ>`ǫێh9Žއ|-y/|xokia/x.?\K^ E,t\r"9y}"sԇN z _qOwڒ?%>Q.~nG'yxmp?pDnWZ˭.|y=;緟iOk?O^T:|$yFu^C+K$/bB/^1O[߸- 'c zAZGt|w ѽ[/m>k?}{?;/t\_YڟgJUy C; [O` xm|ozDՅmN{_Y쬍<ڟ}[f5WU=;;_>o~'>g]7п;WLqYO7^aG OyK~"m}p6]_NϠ_!x*m;WUͧߩJߡ_ t~Xѻ3 :| _t\38?-*voWכSSƯ~T|X/=Å6s/REc/pS[QSu~ 7Y5ZxLy1чqܤt#tqߧGdz89N#$`y кx^듿ɏ0_$_Y>/ho%i{}rхz%N?ü'~ϸpr\u=~?y"sRvs쟤B\Yy<>BNu哶7%rߓ%o<ۖ}4>/oC<8AnѦ_}zR#A}ʓ=~N7#7ϖ?\xj??Kщ{Om~K>oƯ=3y,{ph7o9÷1z|t;Qį_y( n[;9΃+8wɻ5_Sp5yF'~ѻOGظo?޻]E;[p=;q痌j~LAĞ?$^G^9 ;sɧzw; cU۝>tCz[Tpvݮߛo> _zm?L H_kF4rJ<|(v~ Ï}/t落WOu-OGoO;N/ˣGcnՁC\_{< g宷L<ɛIo}ӭ{DG~tgz_?!vQQtO/?rs˵c:J~=s1/s8v5.1n{ܮѕ}9=On=|~UL'z㉟\; Ɵo]?|[q7l~M5wtyΛ~x=љqS5~4qRzO#9 GϏsqϓ5?o~ya}|Cn7r煿^` Ne?y8c.uZ|ݟg~7_cOSawc?؛4爛/-:jKyȱ_mz~,?'}]w=6uUg\1`{Gso}㿽ww??u^O>ywo5u]/N> n+ߵ/gهU2kvof3??';|2 ݏxZp:O'7>x?{tอwY=wǷO5=m;_:]nڛioڛioڛioڛioڛioڛioڛK?v7/lv?V.SU<3^p]o]/;/7W^T>Gn~ aʧcψ|i O?{@"o?fZKݥ:Xe_g~̸1sާ1]iWt=ԝcݿ>S7iko7sofo;?}z_Kfڴ vgf:$ O&vx}';ԫoS='΍uR:zs쇵_V]x'/>k&[?7l_uT{?}׽7uۗ'-]]Bz} i}So.NQ);4]~_ٽXnH]d7o}]סhz=TeW]vnѭ]zowX'缛 o\wkRWL>u/uuz3KuR^YEu4zث3ԉ],qkݯ^:>W\?u]v>$]żWYz޵]֣Bu8E]o*uk>_(z{dA;tr}oNuc:Ol3Uo߿I@.'έ3OFwLuGv1vv9D^C?~E[^*?:YǦ'SzZg]^~Wq|='"Nrn#z>r볓[u慼a7 K97n|zďd8'zz!4^? Ɓn?׋+~CS͓xC:v _*:f[n+NNO`ÎG3d5vb}ϑOdx,}]z[{|OO=o\/zdwCxҲ'{?'?u%GgSNn_{T >Z8o[OwSs?dW[lxݸW!z:@WGq#ӯٿ m;sZ/n>I:o<菇roCM\ Μ{ng'?zp@yگ=owN\f{Y؇gSI-x:wEm|g鱗(/y?fekp/^t[x\1rj,_ĸw_>G~9^捿s]ȋ7^: <3Kr?x:C_=pnJ`o -#s;{8GM|}(ߓ>H7dџsp%/>'DB?\) }̞*>ex1^ r48W&_iÛ|:F͎"WKӕ$9:ƴM֓hez<ڎ>9?o{+<oIA%ϯ?Cr8}Gt{y"<{D .]Pp}Fzzģ_g9D?C|}`܇?;|7{^Б;}?~x)vp _\O`^*N\e'-~<9oxj}opz#go~=z9g'9=nK$o?2|A?ɱ7}7}-h|kgK|th}fogȋƋuJ:'k\>gƜKݡA?;ZpgpӲ?+Yɟo99zgO_gɃ9_}ֻj+K>'ye蛼/r; ([WY/Qg?hAx:?X}GkyO꥜Ow6ig:Oߨ|'=gbϺDJwC}xot }7ep/Ռ>Zύ>K/|ȫOhAA'|Ն?d[pZygOӯ?+yTP˾UbxxcQFt^lopNsAs?yx3GRH~3߫`uh_a5,<K||7Kދ~w(w>mCk[D;?]iJI^^+F/F~_N}W; 7m]^kסctN/}|ԯ=7~;3z Z? />~Ǝhqx8eܻ;?| ѯ+b{光sD?{[w+r_ :G/>;=Y_|ú_|_2'?Dp"<^C|N:ӞO_y >?:?qtI<ٿl]Uw쫡l*=ϡ϶ŬDž :zu~ 򎜂78tIzn[7y} }?==dХqvxdE?~On,?Ͻ_x*\c/gp}|y8顸lOK(FϞyw"G.{<y~'?;?M~&`?-΅; :\x9O}cGbmM5ѓ+rC /0i;7xaOy~h=鼨n y4:%'>|«}I_@')|zxVg~\ GcZA9ep Of狯nSH7is߫<^h}ogty 8l~G_<=o|3ٸY:nw䍺7MkÑw:dxb?짮e'G.ÎzӃş}Ow|os}e>߭;m19H>_8\ÿ_N/7 y>l.3_| ~=9 p'߾iӡx{cƻ{e{^EpÓkm;yDs535nh'yإ}A+䕟M>M0 @Gy$Ϯ}߆2?S8-ڎC8o!}虾Ï}oR_c_;-×sRr1\y<'΅:Ozjٻ.C.ng={m5G&82~~ez P1='~__Cǽ}p$.FɳD{.9r,_6nw^:{7z~vho9rsH.a0?+vw֍^~w޺NXy}~)~G?ʋ87Cȫ9jOh= _<9e~+-2/ݵ{hvO1׵u2.| ;.7-o9{g^My1f=Ņ~{ Z3%|x&9yox5>W@ )bȧ7fYsm6OlgGz:Y$kUuU_O{^w̪; SK7T|1GY~3M ?:oa5?uV"ΆQD,뱋5. ]uu>^|/z3rIOz8i=vuO8vO1~G:C?:{H%k-^3#'_{ν\/rʾ| F>[tCK.iwxj}zz]j?I֋\BoI[y~Nm;{3LOo3~m}]µ._;o:P4zqt^CŏSɓ|t83~?Sϑ= ?'x¿Qmo;v*<=<1S_e{t~ǯ{??6/ͿZ޷z_Χx.9h_ot?b3~$k%w3BAkݚZ^_tܴU]u38qξr.upɣ#Q~@C/qUyjGŌM:uSLiWO'~ xz5_Eyso6 zeۖONk.ۯv5k;?C\*9O'j8+ϬOo?y?:_κg>cEj{?~ :wWwXO_ziQwoC]>'\'>5>8ɥC8:k|:/uP]%}-wT)x1z+Z/|uOe~4-/]{ꃝ-O<&o~tu1.ůl>m}^Op|][OCjIY?W>{ud~u.٭-q1>GW oա3g_?:b7~5&߷q`^?Azb=R.NCe^~tnޛqKoz*{T}D΃0>_нzl_'A'7f1ʽ</K̇bϞ.yV77c?k[z_zpPvJƇg|/B |]/M^3W`xfyL>Χg=vL~2=þ⧳OxНjEhO?dc*O6x/سs;9yEonu۸"F^r^@FNe|]vծ7~^%iƋ_{oU]a>!%-w>K^t| Zgr$~yemF7ϱxCGWk|7~Lz6^? v/~r'8k{_/9.4>u1ޢ7rv<񓗟7w21oiX<]cgK/cfG %ɭ[J]cQZ~#m>?j;z>M*uѼLݐj@8E'ԏ8xb?gMWz<Ό>rN:Џoc$z]_9wpz'е}_M>}B/eg9pϓ}Yc8yt;:]}0tJ]z.:zw#M/Tx"\8a_7=c~v~;}ξj}'cuaw/uU}g}kt}G#Wtarnr]G}BmN뺎{ Nvxr_'xOD 6!ww}Vj9Ϣ/<ҿr_˱9}}G\<&nԃܢʗf_/tG/E>w}_+r.dS;ҫEx^^Z޼6zժC@;`eߤ1}jwuWEns_;~9]c5hޘ碻/6&Ng'vi_ٞK}] ~ʮʾG㯲N x.ߣ#3w]g|j0Xwf^9:3K@gQ:cO;{k{ĥ>qȹZU+~/[^Dޗ=Pksnڂo-Ȍki7 6Fٷ|_?KB8т:_]k˺*ﭏ_ OznSߓɝ7~A>`ׇjul>]-W\5WM]+OV1ϓ72z^LaWsU9`׆QC/Y%ݔ)=ȧү>͏~^OpN/ȾoK\YGrksSksoT=ſ~RbJV7̛|~ĥԉuSU~y' Л33?q|AC׹\i仒)}:'O=z/zwskq釓RϼEMng|EWlqj]͡S {mx*OӶjWt|}n!'A G~sKvJ?6(Ca.B=9Ry_u?'r`ɷ#o(zr̓}O̺o~ʎ+r_9t?G`z8I#/'(;J?̫<C~D/Ǫ+Nwoq$>GFN{u{$|?\F<~,i=iݸ`oxm<=?Pq /vM/y`9woG_-b\ g gvw_H?3/ ~q{֛}yUq OR|Rk1l{}v>tC#~2t%A~jYKmps`JDes"G._ӥG7A-?zߣ5Y~]77s\Ϗc=)}/T8<+x ~߿>Loi/z*9:xA;=m7_/w5SA@ /2#|yNЙj|K:v9RX^c7GR~Wi+4{XS3{\c3"۸DCGz_2On~7_+-:i|/n_pkK<گ{tӦF F&zoy:pyNf%3 [D3z<'K絠Q?px5f/_E\5384n}jcfO]qoHO=_ 'ٓp_SÏ;G@]o܁֛מ|o؁_CQL=s̃qZ'~GaO9iz4.mm_SPPkOlt+G?_NAs[]Ou++>M$?%yf}=D;;}D?8~G nѳu?ך_ă4ћț:i:Pyqx.|'W?}0O+~suhg7{ǧj^O> 5;|~ %DxN[g`9>w,zˇ u󀿲_*nyKћ虞KyxH?O+}3uY+0R&q? 1/}~u7f~}[Xt8ũz츼wn'ZϳN{+>8VߌܴΞ#XM˗?:t{_~=t\-ͬ9Ə_\}HƋ/gz@/?z#֏'"~Mxk~(v4 {uoV+Z[ƒ[ݠ˞~?G.Xx_xp=#~ƕc7y(b^i>}O?d;7y4rP]Αhfϗ>:8r=i]msU۶|?~eC?W3Oz?o{uoo C-w pm}[mI|?wx?hOuCL7_??q>c{˥e'~;O_߷/&pyA{=/lAǝq1/s~_xg񰮗r]xO~S˧"':.Mwpe!:>GZ8BW&!Ջʁ5 }Jk{~D?+s=\j>+\S O\/zE>sն7Ͼ:7.V֫'mP{,Z{Ac>8ޭyތ\okW~D7Kzxo/Ά{8𴫛8aUE3Zಸ۵^k;u_En2{ϔ}{l>g=Ch'>|>O{nqv}o~s[6ҺuR?d_&| f<_=?ߴ6{iOv{z>_ރ{qƧ;|ƫO7~2.gc'zf9>nعyf6Upi;~uKkaL?"sfh:iiz0{s9g][i+NS]_oGoy=nL_gދ<?t=UOޯK5{?VW;w?u}9Ez`Y7|]wޙy~x!oKcW^E7ݓMM>F>gܽ}{ɝo8s΁w??E0Gt}s o}}v~Ipu답OKч^:|S넎~>]8x^Ó^ '?1z/W% 5.F__$u>Aɫ{ HIv]y?~r]Z_o+=SoTGG?-W"GgeO,Nޚ/яڶ;[W u~N|k:ayx'"w/8IڞO~?t4N}ψV}דsg2}$x<'JƊWU7+u?pi4Wz•?C<:f \X說5֛7@]U?gy߻K} w&~ϑ:I}+˃{o I}KW'ꃑ;yj~:7/~n{=_]J#XO|pf\iܪ#ׅ>8|ož_ggΝ}9tzN|ny߰}ǩeug{{x?zf'߶G|$˖~'W!o;s}/H^ig\<9oϟ}M󽇜'G+MipK'cBμS"#xzukn@G]Iqk|cCnNd;gZﵮps0f\zxNgٙ4:Y?}wgѿzK>8{s{[3Zx_ѩ}O}Oӭ+_ '~AKPg幟i~5ܑ7>y3n8|!G?j\חkoi/=;@ڴ?b8tykCC.dw}ß?Uo3闑O;wot +< ENu-t?/|E?}O>Gɭ^yvY짪|6,=^:ϡђ׊F;3ZWR/_Zy?=Q<ʹ{?`_XߜC-6Y+3n}jya}̾{w8c#r!O|t~j}\đof~Yf_O2wȋkR;$?})Γ|.9嗉>~ xkj .+ƿ|q/O_z0\GwXGy W~zmx}u~]kGG猗=;7O;̼˟soOҭť:V\i\e*TSxƇīi]>U|~گypCO:'3??w>9f>8`"9G9^UOL^?ɇұmmJ[_n>;?e-ynK ] \ΙO߷?8=+g07fS\͋/~v|Lxk~9>{b'ߺ7zgg/pvCav";_\Ot{ד_-..sbwoPt ?qsSߒT7zTz#|ſ7oȫ8/Oʇ/FS֫^KWx<{ET=K$~c}C.=xSɧ%/@kk?ג_PxL9pO?Z㏈J9(.:vh㱿͡;v?hʃp2wW F <7ť~?<1^7:-ݫ'_obq>T~krCzek4wiyf.~~胜پ.xgdzx랮|# {<ԑ.yߘOߏZr]_~#}qgG΅OOWމSֵWoFl㮽/c<Sraz~eqeޚO|&o_N̛}@/>sn'_]¾;r?qy^>sgOw2?_-~%rE˶;:j]=DLJcw$?:?s&:.u<$Gнs_?㝡[vMfS-_eлj;Ns_qaOƗΩƅ+OatM'{]Um#Q_a^qyϊ`Rz9)&.G$:Y7t+:K~kZb.wߍۢwyUM77^Wgʾ@Gv}o[>ucp;~;zx[:z"# 'O_OqŮ{"C}o/@[?z$9nŻر|ss=:L;W?'}Wth ?¾?š 5_4XdG7nuw_`g3z'}?aO` TM>Qu>xߍGgo>=Xt^>jY/OW#?J2<`}s~ڼ\uY[϶̓==~rވo|'z&铱+d9uN76ݥƾAWѼ~4/??w{Yo~|?Iv~3~s{W~m?~CCYO^Wө]\tv >wxk۾.o=sO#_KC?;|ioڛioڛioڛioڛioڛioڛiAn[ew֭ϛioڛioڛݴ7g=7yw޴vw|pt~޴Wn? nڛ0zfn~TgowOj?]N]־L)}{o]qڷ}Wϫ}=gkmeҟek_E5խ}]}ysu?CME-үG}_}m}Yuu^/W}Z__pރz1{2uԣPDKY!.u-ݪGRuI!QG3~[6[g6=owrhN}VRO;[峺^^礪ש4}~gԣTW{UWm~{yEWfԍZک~M׃sN=[~<밴Eͼzs.]_DGwwF]E_s^/ 7SgՁ#[w]Bv]Ioz؏[g_P;|ϮWzk-\]Wmk/tХgua[*OwC>瑤s7{y Y\|?S_y0|'3u:T/sѯڪKJ;>u[>[:穗.vץ6>?ޣ~g?3ԣiz]}C/kx9ȎPW^:SO-:w>WRn`V}3nknS;v=w!U/Q}Iuv%[U/0Vv=ѳN'Ge>ˑx G798~F==yw,(p—'8p݆|һ:U}w}y}/xh/;=ҹb G:3^z ߹B=?>?G\ =Nb_ }lnw*~djOCw=B[t]Z6C%=W9srn_Zw|(_?gW?EXgSwϽ_ό?x,JOZg1Oޞ/9 /?-:(m^2?M?쩶ƻ3nr c ;>n/ͳ49>G/̼H(3;O|d"N/E_uyFc{)my3:ϣWqd9#9zHFs=#q@yƁ8)_gg|)__>{Tbwc7mtjGozb1;M?\i9~K{~EyM}q{ѡ8}}Yz7[|b7z>IO8Թg\Nzy&_cO:':ÓoCF~qEul w~у{-^Zx'yOQ?~ ;ocgNΥ;n%oɭ I̱kﱛM.;/~gu-~1ןOZš/|;x1󇞆wIt 7v~ 'v`i-~/e7؁^ Bp$%\|WOZwzMS3yS\I^g|s q'o ?Ji?y!]п|<槓o$% <;7bzg~0 #BNw3;><_|D=]ȇ奟OsWK"oc O3of}\[;ïїKkywʬX/}[u3rɞ^~wgOcĝt/|K?7Y"wOf | N oޮ_M>73/7_w.CE'>bY?ϓWG.[1N3BAo0t^M+ޢ8ypI>aڿx+;j<_kC_;>{EܷMj~I?yp /٧E/}_EoqG-~DG_M.Ŀw. [%zψϛ"_ں>5|A|S]<|_9,Cؼh]58ċ?jz7og %+5C_?wtMP)ェ觼e'cw%_OǮݪyaqy&k?49>>^ yZg|{Z:^?eL|~_Oq7ͷp<.mۡ}Ժ+Xo|ވ/3mrw}7ܡN.#z|C29tJBc8ᏠF~:O=KCN:q~{ti<2SK[[ͻx<y4-{ 1}| 8M^Fw/~>z?]k>\?\?f>_Oğ? G =6 }w?y'ymßmsi<-.돸 z_;?y;y _^'>KﴞN~'k?ĻfgUף3^}z|/_#x/$}w_oӝg\>??uIUkٗ'S'0OX.<Ιu '%pvO)ɗNK~<'t0GZO8|¿p]⮛G q]{~y8);'#rj3ht83+xj\ݙKS>ڎKSv=A|m?'8 O~ r`|#y?S~Ŀ }ߔ'15~Vvt=wl9o͸я%< _)xS)9vvQ(zfѻ8z{y! $:e=^{%;vE싚gOSvT\4nxJOX˧ Z:nW'yuHP "imţG~T\*^78˗ ?ߪ`x?L똅#SGF}go{WBzl"0uxjFCD7O3~[r +^ OU]FW"ǯ۟팼w=5<9Ծa'%sċw8w~o"sϬ4[CQ՛}s~ilx/f>CL_}Gi|{?'_/:}ȝ~=z{_?┭t߶?Ak@OUG'҇úÝq.uZȡ/,t /'qoU4I܋OLJɧ7G~C6| пa?u4>u;3ȧqrpY|.םOeOtréS/uw0[\|DiwdbĿn4g/?NmOoñ?`=)f/?f}Cr&/z')}ѩM.u*<\7߳KZ7b/~"T}g9κw' (=x/I&>66{~3xwʿz/oX_~kVշ);4zἿ!oh=4^ ;ǩZOs G߫<.g/E>oZUU/6({|w$o3;J'w-['N|SϼUBw]WV7~L9pq1hx?=ۊ㦝ͧ_3.Jo#ā?y:r=i|;\Bt[Ehhy>7~/I%:p*<5{#(na?g7r%\?}_#cp:_%^:j{*qڇ5}z23'DN3}PtG?pс6yfe}!ED<<~~%Ok,x*?VA[?-B島=!<[}3ȋ:')V8$Ws;Q烫zI#;*=h<# rFw~t(%GQޞc8Y#QǩaP|\eu0.qH<9_OC;Q 9􃾌N5뚼q~x/ynnŵ/&%~4|4riUU,WowW틒/7p AͮzǟgȧCs6i~~C~wf]o9j0tO>1z7=WG>]~}6_@qlWyƓ Gc䜣#_%ιN}:/{r:'~vǣ vEܳS>sޟ猾/Ǐ؇gOs'}^'B5]9COr<' \WX'ז|y_p O5m}3Pykyŏ> /f/ŬKwӾzޒ/y]g۲г8oWQ^ ̯WDo쟶Kŏ>8ӳy!|pѓ6}'qŞgG7ǯѓYGt.gd^_`O:1)_S_p揟^hĵ[2~yJȹ:Wx/oF$[q&YCp,Wz`Ήǫow$ǝqU`v>d7k|4sG$nW+r++?P>į4_a= yyti<Nu?;?3cwF|Vf߫<{w5_fO8y?3,uA{ v}K'GZ1Goᗧ_7Ogة|C9Zm?-~_Gu>]>O\WލЛWzO/ɛrTx<͑x"̣g=R=.vFΛhѳn܉#Y7xP⽕'/]~yn}y>3]:y^ATyn&z‚렓yO%ג>8 ◨+p}۲[AwftlWZ|3z%{?ϵ ȻcOHnc\x*}&-)Om짹ogA㠏9=%7xXvc}쓚KYo9?>c=U";{;K?/ue7;ob_97}Z'q\]mֻ?jۭ+n~Eee[*ue~ݲ~S< /%{hFՕ?dɋuwG_\·~vxw7;_v"׆ F_S)ik/<iKaWKǫI y&XG#8/_>G2b B{4vo7pMoKIy{&Eԭ7vx:G}))zʇ\wבO9/0w[:';r?NK:&j`=Cw|~g's&iyT? “$!OzCxxgOGO@Z]o޿~?{?W]𴩛~~zKoLK]}UW 7ry\恾Ȏ.i9xpޣ_SCWWG<Ǟ{k5xM| yOj=+u>5xjTu?zO~O:C<`~n]ȳ;詊?ߊÊ=h;}9ց~zr-y5//Uy}]T;Fno=_t {#s>mi#EƟ>m\Fv}v"z|?u_h<=d:=@]?{aW}KrGȥ||I%Cq_:KA]?ySSv{'Uy>]}Cu>}r<ɏ~?^yK){O.υ^.ћ:Nxʺo V\ 1*/|3HgzY:L>W|bSu-4;0p\\#>o&Jc?2ⱋ߮ :ݵMqZ'yoWf쓊<c|].tD#ď>{c֭]oy6_ɼ'TܦOWq(pGUU}mGYg=ՅH}^G(c.y>_~vuO[pl_|?wj[{_&O!"^n 78{}/iSSzw}79Sy$D\{?a˒Rv~ǎy;#Ϸ/D? }@%s:RykVAq=<@Gzf? O௒W|"'؅QeG.?>&ow֍ߎ/=>~JS3o;=?}Ըߚ4gg-6qfrq]8<g'h< Ó6|jɟ9BыRP㷔BL}Epu3zv|Eu~f_{;^0Wy}x";>@~[=ȩ1Cޘ~PJᏢw7z @GgȸgMcwG߫O7&?jp_+E$Ga]\D?s'Ǘ |~o]z:g֛SO4_R%.v%Reͣ;dc; lS_s8vWCj֟H;YɫSɾ[v~vzΆ򧈣+_/;㤟YOzy$z_93"'ŝf?q=LgO:돏Ћ}=A .ȎП}N;bO5e_?qiHA?Wt|]x;g}79pp%O|D?v5~ǎ7?-Saя+/y~~bq?1Kÿmlq ?{d?𧱓cG+鯺 yq6<~ ^ >:֣߄_ .D>͌܂#9ߛЯF?C䷉?uEK{]2vFk*3~t>Y䓸CK~R_$7gZ;R*9gӴ65x"WFo=Dޱs>ѧ=?ܨv:)iΝoPaB;I ӻϾz>L/%;+'O3ϡOWzU/ּu#ϫs022(SGl}>yvIy^yZ'vAq鄞ۏzOɥ~^w>rH {zߺ9F-󓒇(b _~ti!osÎ2.rՙ_zbx.~ow9u?.zI[VK^_WY-ǯl6~~1yRvzV]utB7?m;TA;3CzMnL%v4:[9r=VepeF>y_o/z0;4z/Ti@`Q~`rįOg95P~mU?6;vi2&gp%f}DRa?uo]qn;URi@/nӌe`u=?Ӓe7g='z=uc/Uݖ+8O{*A+`vo *,?Am[Qץ-{ow oi<}V W~?;)^Neo'RK$&k۔?7󴜣88|'i]!$[?Cm+<@~T0̣awgӯ}|DyƇ~jqy?z89\xz:Yv_[wN|5|LNt}Izgяm7$Gy絊۠Wyx u=祹N$wkѝzZ_$qD;ʫ7z}*7OS2>~s֓>~8r=!m7ke;^o^gSGgZoH^DyնWt]9|Ʈߔ/yŃm-ێџ}~+i/$?_E_ ?KkϔQg":N|}ɧ#1?έyM>ȳ-G1<{sz'U%O$ʻzL8su:t(ζoUyVxhZSypBKBdoFIgǾ7{A>\[{nPp83o!Q?$:{E+?'sgǦENθ"K.W}.H E|wS(tv\7l=|]{4x%^Ty)7L?x| x姑oߊݐ7,Ή{s}AEy/Ekt&0?驡?y!f|4ҏo<]C~#z6{'N7O4fq=r1+M>m“;|n`;qR/wxVmZ~'CK>?|a< |}Ϝyz[hg??z*Ek\TWY ug+w܏羉KogLCvy'D|? ~7g>+/]O no뼚+<ʇ 立;WO_n_!yrP8j"'yXv-٣~^U/>uĮ|>q׉7_n8x.;/˶?}d?x*:FOm?,yHj;o; {6[ɷO8=9mWgM?열>7o|g}N8#m괰c*Xw|x>ur[E> _ks$occOI^¯G>7!۝3`wz/<şWtT~\Zwt.?`9'aꬨkʞAqNorcˮI}tJō+ SM|KD/*ޖDoOxe?.F}߸.d~/'_y_]5;8;?ƾ;LGmc>^<Ώ^Eʧ3)ȩwy9>NYy3ʓG~ėڮDgN!\:{|ɾ %Gw}BI+,P^yo_g~juK璃_iz_v>FC}\*@/Fq&O^;s 9{.9>h?tX9qL./Im/q{QNN't{~}_|_<^E6?~'oxp̏8h=3q>qg&>Gk3>rx%8#~湞c)4ӓͣ=;z\׼=yaN|:z[gG-?e<įeqEO>OCz_Oѿ*?ϷȡoPz]܏6~O7x[rqͳ?A\jk!RGz^}u/=NYvIρ+tKWO.чruNc'SGF>DgWPg~:YsI;~ )T`ת/Z7nGΓytM5]WWu}zs$^\3ђ 9 ^jO5}U?Tu "Og~7u űGT|zr*oaj^*8gZCxj _#o݉_esfBoK[F> Y_V]+y]`=_O%7qLt$N<_[_6y'?#zW6yG;n+8i3:#eޙw=c񳡃G 7uh{|ܚX}O~aa'yu.Aۿdѣ~yB]C?h:+/8 z-Wg_#wo_pɻ/_8"q\8z;~OCǍ'z'8o{o<:3icj:|.>լOIceBw8)>}cѓ#3K2SɩƯ< z.Ap&nVF+r{'x2<^Nq4|,x:es.gȕg\yk{^%.[eZ W:O}WTYJ;E\K3Oi_#<ɳ=9*/@ޗ|;NşSCTxg6;5MO]/i9y۝׊nguwj~>_υ[%Sũz]ucGأl ˓}{?z< OC$ߟ(sādO[ˎzs؝<;N+qc_\WuCڟJvw|=|< GS?6}Kˋrﻴ|j-nåֽ.Y O?zݧSZx>L_?r=n__Fz&/ok>sV vum:-yK>?&WqM޷ÝldL{/M'S?/xsi:o~> GTωb__ߚ-g|?w^Zxbw^i[<ջvnȖO'Υ(^e _mMݢЧ|*~ BǴ_;Y/xl_KcVdfUuY>Htw-ly'~O[3:,Y߮'.qLZqB7zos,Zl9sh/eOzy:^gSEGⓟ<-~0-Y'z3ҊOc7ՇY$*v+^[[[is>?:}|y/:}x!~{,k?;_fgZj+ui[ouɛ!nH^r#\mFJ^Ge[޸{_Zզ=hh=w{?|;ڧf߈8xz.;o{t}k-N^pQU،;{=~ylwv]~ͲעOUrx_Rua/鏸8C'9wgbw]|;z<`/QGޗ(?ggzs͇?eۦC>ݶ_<.3EU=\QƓVIǡ ?w-vE_,8t{; m>ri;g\睾zAz,=Z:=>qxuQ=X<ϋ~yʛ!΋T1뵾w[Mzs|~shiwE[~t:{/V/j+~!$wH,yq/'Υ/Q~9~:hC#QisS:~%.Ƕfuu/:+=\)/=[u7ߦ7rlW=~i#߄?׉t<]ܮa]{yKZw?o?*y.9]=˶_n{{wmU~o+_k;:gYq*<9%Op-uQ}zk1|2b 'w*A>\^W?'_˗xiާ.|Wg]~O|jZٙWm_9vڝ|6u'Cm˶ϣא;}!gXH<]V^]M^? S{y}Xݜk$uH'?2vn Oo̞f?#^Zu(~k_:+|?q4}V]+j뵯%4i彦u.^7Nܝsy^uXi+.^z`~)whLiYSG=us[s=r~]]x~O7Zc||+>u~ku\9{|7M{޴7M{޴7M{Ooڛnڛ.8d|io6qݿ,[tM{>#tCq]K~+w.nЮWǷW~>Ek[ yGn=os;7-x:U/<^qt{QX\t>~zUguU'|]ݽ߹Ͼ<Ϲt>oYܭ O(o>dsjQ'4Lg͜sꊤf_OZu3~jשչRU$+-}.+7dmsϼh9?wهjdI}}w;,(t݅ڟ^Bߴ5 u=Xk~] ;N;:ufSGCO>sf^}?)r󱜗+-]fꬾ3twRHrqj5~~{~e:0CJtz0 {OE:}. mQص=:]:_׮`\봫C ^wtTz<}!tY|\-GAAAhzCs؟^##ԕ_⿿n< ܾ3l,FI;ţ\b߼}~7ͺ5ۃSuwot.}OpdM|}

69g>@~yF\xqu86Wmc8Ӛ/uyz\yyyMbt춝u_pnгб/Ƒ?E_ nj)r<^s#7h=I_9o}eC'' O7~н/:|ד_ܷu?yd?uuC{j\O)CM\uΆS4B[~WC[{w/̺7Zwz6x~<ջOS_ޘzEb۸i|/O< ћbw#楟Ay~Wz}K[vbr!s> mL+4ZOxϻuiOv]i޹>q/)'SK/8Gcώ_o'_Ϣe>|is=~oe9Ov>>sW>Tn=?~9'N>!>68zp~?OCgqʿW~صqwǣkj'<2q~os9'rO9G<)ߛ'|\ܷ{xr>Kc|?~>|i˻q]v=Ё8lo>t|fg߉kor=}AKoOrs OsOz$Q&/*_ ȹ(_>{_FjIC9rEG$rlU}Ow^\_IUzLǭ~?zAoqW.폸 uN~ǛߞQO>1c=Kٴ4 jYϷ>E |u\d^~yhn0\ ϼ771u/Ck{`m_W{Kr]C#rA]Os^4=B΅3|'/tZ%} Ɖ;oZw"7O9ֵZ̟5r^~t@/3 ./>7R':wOW2SۏAK F'١ǧO޿ө=~Y?|+j-&pޑo}> OOʷ[/t[Qq>7v r&~o#3al~~XypW3x9xm*;x8O]n<_V ~7}> 'lq⻕}^OK|suͫ<B3ƅtb0/>qH\<e+i!'w;/LO>KG1.po'3)qe_Mwup8x8ϹqvG熯 oz$/Z?E-OCyDq/7?ًw|5\/~~>/x/=wcnዑO>".˶GT&[q7<6mA}LK/^6~?~JGg{cynP3sy/]TᅝE%S[W}mwFO o8fƍk/f~~{Q4_+Sr\$Oϛ,;m=%^4!y:|&|w>CnOz.FgmG{]f>.k]U> E7x_LO OQ?<'{J .Щę?|nx.{8Sc=t.}6O/zZ_/=s ږO|q/G+S] ]2O(r8=5Bg~uGב{#?ۏ&nLK7Hk(CF>g\]I>/KI77|itL.g<{)uOeh.Υs=뎯.xS]lI8Mv뇫:.$7}+ 6y?x?}{U0q랗@OOopw~~t\r|?B'\=x>xh=}c(Oaq=qcVN F/cDj<}j;KݳCx:жޜa{aG*u-5tGF=wZ/M3#o@/^3$}cCcXncϾyheW~#zUTeKQzzjcM>?C{wKN߇+cW#/{5)U"{7<+K_#?O,ĿȥSUO |xsiw+¿O7&~XzrCG&8r~ggBg O/i_Z} }0x(?\Y`ZKܩpOٺk裞|z>Kr%GT$>6gCOxngO\t^_Q/D8xAj} [T~{pп<;S{?{#G;}}np_8 ȫu#O'?(;:w6[U<~Oc?;}?9;oݗm;^3mꙏ>Κ)rT'_eij[ÇBybrݢ]~dЗg%?-C~ㇿ'v1ܴ~Eoky?\w`?K~2 O>O_񓤎jczgA< {_%ܑp*Q=4_QJ;{;zy96xcgGsk?Mz`iyco׽?O/uaZF/E }[/tI~G ʎ";9IOukAx*yq_;n3<'yd}|3Uy%cA\$|f?c΅'-ȼ Oϣc|P5ٝ⾽mGgOE'|*5zOZ[O7ćg?_*9[Q>7~ ļI](;aO |i"߳g}Ƿ 2{j'Oש?c=O4rÙW->yp|Wq>o~"g+p>ʥ7/?1u}y2?=y|3^ypgeqy=_>{;,s?'wVB?8'mt֙f~31yЗ;/f2t _(OT|&kwOpz-{/IɇS$ϤW<~pjZO->z7;xAy(^y O>;䍳[ϵ~9OȻ>bOGpz6mעıO<$_y_+N|g~SyS;׾Й˹ ECP\7vٗM ~聭S'MOzN}⏘uJ!-6z]ՋH[;+ģ+~_mӮ'#i'X~ .J>z+/y[M?E~wg3O<޷G/r :.:oO,r젖;Wɗ:Oӯن.:_<;x~/mǺ|$֛<%'8oK?-.q4՝أ懝vQygi#tK~cfpz*M]Wb]XP|YOvi]Oά=#u?Gn?sL/K˶bgw'RIt:=OO3?w_pY%[򇜔:?}1𴫃g̃9Ow] 璘y.=~1rG~۴|>k_΋ɇ|GqDty)ΡZā>j[8o;:vʋ;{㷮}T[?9A^-O ~apD|wFGxZΟwA<\^vQeFg_Ԍx SE {ZtypξK<|[_^vr>|=yCwh.O<8M]-?/:짪??3쇦+~ɇm<5= SùB)ϝĿ}W3×_Y\~Vr35S'.,.G>ѯsi~ <#:v:iWz =:9Rwz[Z";SoϒPrE‘vyľxΛ_z뵼*u}_=;JKoF>E 'cH4gkCϜS|!~qﭷF&K>=1|m|3/'&x܊ϡ7> |~O #gO37'-6)ͼ]󉏗86Γ7X|j+DkW]<~Iݴx_ OMv M>iɿ>~]'xAO'Ǔ#_qޣm\Z~zm \?W_a8wht}ܲ}xC߸6<ف`z/O)yAC}Z6O ['/Z.z^vZ*|毠'?@Z׋o5n3rW:gJvM8qn}?'~8n So:8i?}'3ƍN_"* Nͳ߱k7D՝oxҟOuYOyэ낻or?r){/}E '<^3m'|BOt]IJ)x|ή _3ϝE/<%?Sgפ_TzX҇c?:F/N]̇yw>NΉ˯CF(υSr)c|S'WE=<'|I}Nm&7%>L9]O~sޯOE8I=|3,<|gZzzuyƗO?`4orʾxgs>"O='>?mx~?:w~BtY䖶 7_kg&~rߎ`/^=zss~t$髥z%C|ɧޛ~s_^ے+;мתߒj*3ğ_QO,IR??   t:` ww!Es8j}{/C~ {2c6cNU~y5*spT^rLO<6@ۙ]PŗjK٣'K׬ɲml `4ݧ5gN=@Oisg>xO|whzS4z 8;8.<ŮNl]K]w;LKI4v$Z ><>Յ;O[?}IJy 2.o[&/<ѿOqy^XCtKx9lux¼3Qi#GOeG~B>:8:ov%<=yequ~G_<"ǷG4~F_y<_2 ѧx5~ 7\K7..q<#gE]Wbmǖ2N#/+:^v|{]Kxbw9~=;3{_{&w6|؅^Qx)x//_ڒCCoOֹ7 6n=k _SC{婼mI]Ǿ䜽7彖yɒky=<\?<80>ztگq2y|.?:H~(^c!xָ/ OI-<?A}7`'ۊWO&K6x2dIZF'&W}^m7/O =Oޓ+>[DE~g~hy͋xTuZ~X4o^K/\Y<ߔݷo ߣ3.oj~Q^x:.WGev\"ύ,M}y{|'<8o\/'?]<}ۥ4<Sq;Ȼ>xJ>n!~>~bڬ x>GMSvkSr}n?P3YΏfin7Q?ɾg'Gx`DۮˢOCq{o ^"Y. O;Wϳା)~+],sʎ".5 ;*mjsۏ%:j9_ۣbj>5~$<!_T< |䋂'q)9jy2zfzu3\')5ήu;iZT<(qC xi3G5>ymgbuw^x74mI\I‡ vm|P_8z}yN;>Qwz9x7nΜ}';3;+>{?9ѯW?N.Ol>M,~(}Ᏼ|K T{ʼnk8rxj)WS:O]ט/z|->m n';^m~ϾFZߚ|,vO}/%m{8l~'-q'~_ӎx\ v1z纱Y#z87W_/]oN| }g4ogyy{=wFF#~ae>uq!;wX/x"pbStEumo;==~\+a$syF\u_ַ ~9s/~m{;{O?.-v%.[S{gFğp'8:znkٽio`ٕl~{>]vP|4Ol<+} 󆏼SC^'u"St:B/S97>>.X~+“g,7q~״?vy'g،\58\n}qu|R8Yp[_E_|[3oüǏīO?ڿs=X8 q?8l#,|.q]<.c^qw;M:I}%8t}m9v:,;,x|]aWngqg.&O7Zm~?X;\ЍCDxpvV޹H?:'LjJ>u|bU[o/ ^#=/yLxu{g-a:J1›\oyך`w*rk/#+w<\g=52FGz{yoXǎW݇f'7=8⧜=8ynH3{7j}%x'iv|>Ip~?uNM|C;;_`+Qm?ryݮa'&ڧ;zW!qw^t=Obz}`c^pr*qC)zq/VK^1C{\x4Obg 8xx^ ?]%xLqz% }>yߦ8q=^ w2Rrk4|h,uT˗_>~3~FJi?cmS\Wprx"g 7O8' 9oC@޼6ߨ姵{Y[v|_scM<} ݼbCzLu}-?3~CyD>O5.'7S'fauc\7pD7l:. \%ѳ̫'rgz ? [>+uE7&|Ɨ_^UoxϷ`߿x긫pj~" s]q<=/>>[A}xl~9S/ tO4YfJM>⛵ʸϫ>3یo>W|uω6<xu<;Uq܂l{w9z^3g7:n2kj~EW| dz8=J}~?>ݳ6QW43#ƿz)s6ޟYo&nx`$۵G^}}F>#sg2(?G~qyg]\ɮ.dֱ$Oߧ.D (x;\p{zIQ5-8(;-2_ǎַ>~] ~u󱗞Soe닏y:_#򂧝 ~Y?/} ͳ:u=O;uՅ>;p~ C>£Cjx~7O?y繺Qodꚯ򽿸-}@b~,qupw\ /O~ _R^13wĮ7rxv}_eq}r9/ :mG:?b9]'fG?IW%.ky?>OAt=u<\iq'g?Լu7n꽄L}Ϳ;OxO{"OiWxiS`g~.o*/^녎/wcŻ]v_@;{Y< ^u"d֯8f|ߏg|bv􃟏_SoINS<`돪KQo-yol>~xz!Gv/yu۟`'u`,]tkx :{*;js_)=<}7j_{`xN\ g_>'c-7G}gOr\<<o'f(ا{ԱO('u3_k|n;̼;Dݵ$="ݥ.]Wm{\뺉SȽxێvxOݿF.iƝ󋿿x7'~i^:>aYO0z,Q*qutx9ql‡ze~ծgy'= ???ɇɳt?4_~ݶvM6'ggz&Ο&"ם'mڥk<}uxF:k;$~\GkoyKo'wGru]<}^4o>O_n?Gv{;g?|i<ó<$uB[y!UKT#myG0ŵzѯÃ%~olk7Ń#xy >[DٷQ=5FK~Twfn䶯+j|'5='>w~_^]{}×/Ӌ+䓟dK;iw̒ASmM|{b?-{s4?G^mv?ʺ$#nO}i_\eu=䟖zƍ?We׶|KkU=—?^[vϷOaxkxr]g}Oeb_Dmn{ܩ-(o-OS^Fk]p~9יU-"%ףoOy|y~2n{V?Sm_zA=y_~3Cy\O5y~p~CmkZgׇvmg[WlZ|;}zN|;]9?ju/[s9yp~rA]%TzZ{{\5/߭}zjՙ_}x~cOӉ>9Fubn~-?~_8yݟƫ>ss}sS?nv?Dߜ?up{b~6e~ G!|8!^-zSoՏx?/Z/9ԟ{;Fo,cig~節5ik|6N{מjN<.h3W⧝?T|]e9ÿ=˾>Y7ޜ{Oy^馯ykoMXOĭob{M?uQ=J.Wi\yG;^ϳ6qq@~^U?=qhO;-2ߛ֧}ɽjo[Z_uj櫶jNsa|֬ ]tfa{[Wu~>_;ܵ<_`X;뒻^xW||qimtx]y7e=Ny/.{ _7gߖ_]v5-O/Akn]u֣:zTq>u~6rֺR~w}{֋[l=j>;#wMÑ7{O~2n/~Yiga3W,)ξS˿=Ow B8{Oxx;uk=uޏܶ}'qge7ߏq-W|~w? u=z/ve}5k?m>^ٯk/a(8C2ϓ0j_o_/gM3vuJ^}p]}a_q?T;{]_/~kŗWmg<~}688:5>#w~]g;զ_پ?˿W(}7{]g\?xyu^GG^)9"N‘=~n~5[<~ZZj|47}2>0~txC<;?79 yj}5rpxlևѻxۗ9J?D^'wy^όsnv}}O?q~E O{k}W%Oqoz>^}gsrt.*;qJinۧWǎC3^ ?e5(N3|۶7'_7G\/zO~9'S ˿W#=qwW=T}' z'|Я~y/}O5O>G?"GMO Zt]HC7q8{Z^T|/>5y.~'Ãc[ٷ/iOO,{rt.?of޷qg\ߞ"m׫C9_XAX㼖6ם~exq?vz~ͣy/ &I~%O׸ʸwyGo/7>yNwp峸|Ɠp?=\hq|qiF{#zּ m^ov—揷܉Ox;>O߸&~*?xjK/GxoAR^|;=pAo$^||#?0|)0|v]'F/\v1qwرK;~U8.չ_x^/Z.5oJw_z}7}pEGom#{3Yym~d^|g/A<$7gmLoqq ;6r_:?>=ĎO~k+/n1GAyO/W ;<ݔ|99,+r' 6ú~|N_7&N+j{\~]kzCv?WxPg~GqƟ0og`#W_9S^Oxko OxOAM?K<+u| Y4-B ?O^xCџΧ?p?->]4;#O+{ƿCJk:;~[p{@KJɧ벯zixj>Wlo5/#.CKʯo9pߺK cth3eM^{ g\8j'@,zӳ덮z/On_Ğ}3; xOc|4AqvmK㏈_%WpIm_p9 dw药s7 ޖ/sxQkg跶+}Ď{#@sKo>&>y~0<|6+#TQGG#clGCe^y\o?p||#ތ|+|Kqfȱ;—6s}>s|T%u2.\?.{y3~`9~1O>w|D~'LB8`/+GFϑ~6KT>O|ux{|xkWxȻ8䒽cWHK)~ 8$9?Iq[~'=nƟ]#| x?Q3ؗynL_zoYֺA#;f>⧮7ⷚg~Ʋ?w]1vu싈w'DI x¯ݍ'z6~\1~#Kc|zE;9fMHo㏹w]:օ-M6u<>7'@ߙe{xZYu:yǫ+x7N+N;~ķ~:_{z8#0hOMAO!p <_~VM\Gm<.͏c3깣GOSsrAyv=\Nt~5|@q}j|[vA<_ckŮ1?q\NjWR'7S#w囧hDz.~kOc~qXuTMݡɕqK^'*{ hZrC?>+^!7O'>#kK\Ou>;Y~߷vJL.y}NGgݛSMX/xl~)^/y$|ͧ;/.=z&""G=pGKNဿeZgqK]/|,({, O<}|=~ j_7#~;o/_.tuRo;8c}v=|oG?ȵ.;O~~\O(ľy8o8‹~qُex>:^G7esTϙSEOׂ7Lޭ^! c/5/+"֋= ?^žC$N&T:Ku:>T?ӫ#/qXdGx`=5e2NO_9bWg#< }Yʺcy ղW)\_JምǓkv\gƃ7wz{|z<j{ӗSWʏ Y~'y__]izykg7! 7˟ȯKOC-D?O Og G'ÿ?-x+~WG'agW٩Vz/o3;8ǭ>k{rtczKg~Yomni|e} /8$z]{/pD/O~MCm" Qz>[%pvF{­{]FOㆽk?ωQBmR[uFY__>}'3$}0ƍ}+_}<^@M٩{3~Σ|n%78 ܏_ =?k?_(i=3.v! 5+_{ȫ`'|A͕G__<[}}sw߭W_{2-x{Cx=0zxgI+'q?># .|]ko~ίr?wEe_zK[O7=7<5/w_~ ėا35/u##zoY?`|Go|6_٧oG^o??t݇,5/Y9}n>ry*d۳#GOxOJ.|=&o_\iO@^3nxNT<x.<k_"Nj\Gc^9w"w@Z#ƙ_`ax,;> ͓|ƾ~s˿`}!=n uʛ·/~aa6ύ'Ox󑷝O$ޜ7-qyea}'y4>۹qJa3cȪGMw:}ƣw+~$Og&eOwg]q'oQ /y`cٛݝ|қe?m}2Y;ra?qY/e_# >m{x"ܾ4`gz[-s+rÞݼl}-Ǝ_?u<8xK⡥-ƌorљfC'ه=_;_1ueZ'B^?^%窭4_pp]}=79'Y__si3܏}3NN\}~Ӂ?[]guGANu䗝9Z2n|=?nٯ|^x뉗'?HU[rF1.;OK[u~ɇM ~7t|s|苮}<_.GډOӮ/w$<{?9Ⱥw:]\պ}Kā-{ȏk˓C82~#䒟uO:ww-]yzCoO}ߺxا]\|Dmjs?= GͷžgƎS|^?|7Gqe=q5|R$^)Wc?5ޘU7d5=g5 ZSp)R+_6~O:N!OS82_/g|;w~>|6;2-@!_~?τ7oۙg?i=:/O^|O? >vɺ/ǘϏ|'^}5ӌ[?ؗQ>_;a? 5z8h<rzFnW䎜C7kͳ=_~1휸?Uw|/N!W/_} 'Z [_n}`1 QﹺSK1ߙ㌧_ǹ_'{Ӝ?w8Oыxz~ROe O]Gynm+rۭ5hn~w_ycw/Ozw7CO׺&xj3"3Ϭ7q<:E+x;ޘ:OS43sG< {(:˂+Øu{ W@o慿Y[Yܺ%s^0L[gKo4 w3C7nh=>:?^}ߍ/c \}όq0:g;c/%<~`:矐w a˯ucW{Wohѫȴ+ܺ`gWyw]y.xۗ7~ތKy{5vS)긆|w9|vxU'-yմ/|Þ,=OSOoy۲O O_NS4/uy;O~}?qq5Ɓܷ| {O]$VDУ3ndqbK8~.O5K|;8Mcio}F?gaCѯ^w/ZJ㩏; '# ~jݢ7l^#*MZr:]/cGpGuSOqs\:w!{N?u^|kޫ'x=9''q=N5O>/nY#~J xZz$ѿޟ ?DNzc\uç}cR_O}iO}ϫ=u~xKc?Eza#3'+J3n]#fY|4?|߻.q<$n}Z﫱/˶G|v+W(nWG>mCxk^}~׼KnY'Ud_Wص N۩NcޏKu]6Auֽ}'[Z~Ss=qm/.bbp?n&nxyzlx G-~#'^+o7O =. Oc^fiqW&6K]OCM`9Fw?t}xx'͝ r+־ ,;ȷqr_9Į-~P>yηfnOgS{<{KWqP٥#a={/y/}b'ka[ϏgzeϸzGR6Cw'.t{xG֯5vG\5q6pD}ǓOORy3ޑ9H,zg@Kf?z%?7>KGOpĎ3U O Sm{pg'yWQ|8ՊO]' y}S\ v ^=9V_˞6`5Ot =I~r-husϺ6;R?P<gq<5>1x891r?aKzhZz:7}"yQm?؇[GVWޗ9~y'~IG-q~ 揄5Fkxpby7ow[xs<҇ Iq5PXj?\W<*6+++=Dnm]>!/+dsoޓON[/c|q9/qj?ɐ7?yW')QNo,ysigo|Y6䋌'=9흃~;;h/OO''x؝A7yyJy=-v#ǯu>6--[ 6_иж}+\5߰|?K!NW3ρgb5=9;S4< 4== N;uőo~.T7٥E«;#䆞˄8/{ أeGuuşȟ 8:rs\En[~;Z|'ۼŃⳣ8i#K'I݌'NWGuy/rx}_WGpvvJ=uO>Wٶإ7V. *y7ys~=OE 5xO< A<揱Sx:zCb=*xcq}£C[nA:!mw5>r~bm?^Ŷ[[_9~V:xq{%qUG l?;oxqQӂZhOGл?f7}PzjΗ#x+0ķu,y}1?ockg>a>CqE+ NOķRG3v@=?<{f>%ss joO>,}>g{Eo_N:/.=V' =g<<9lxZv<&ov&N.`4vyk;}I;ڿwy)#yyK?u1vLzOOSs~!}TҼ~8v/h^%;pߪ;p\|?釼wgߙԅ!Kˎ> n_mq?eeyvjLg%qMPuyy& `OE3}h[~q{DՕd?Ϲ9o'Ha. u ' GjDod/ pgWG}kŸ3;-uJwd䩾[v*yv8nKu+CA;;֭r<6}mgӲܩVժQʾ3S}i W0uyp˞u(z;qq/Sx"O>xcA#|=[e鼠q-6/^e?qU ;6'3>>M%S*; ]Qϱ7ٗ^\zO+^t(>P#_d %i~i<׫u*mOJ,l m;!~kr 7_e{zcxNS?=cGˮ%ύwٷw/^ƾqcj]oZ?;__?'зn>𴻎#8/Ew:j>~(> k_4 s}<$O?󥮁^^dsăBU[ד^Gح}+=j _[W[y?a'<&v(ި8؛nK +/ӳs^9^gyyO*e. ~;y <3|7;ya֓?< |?E1pϋ}3@g3Wu>+}n=zUK|?/_^||.Ĕ<~/<spyxm=ydV~x7O~NR<4n|b[Ա''B=:ܟy|uI/8YY8v֣^̺6*!xbN'z}n>YT͸ey|77=狛w^ZAn'؍]Js| '~xyNǩpH]}M^]{:Oy÷8_7CaG<|}QZ|CpUuWs?j9b+=t=nx?xv~ԡ.؟"P~::N*yo^\{U?n?8(~½Gx''/ b|̫NSqϫ㬇0҂γݶ?XmT#.~%yhSw~,y{& IC{.|l#~oi탹ޟ;YkJ4=4/.xj^7Oڮ[a/Y ɯ~h{G}.ۙyQg): cgoxGN=8R2+\i}VpT~.iλmqtݕ?C C}~`N}3aЬ#Vġo O9*Ï}`t_zN<~_ rogMӟ+}?Gh={QuzUOe=zU~!>#z <l[sx_i<_x&Wf:[y߽nK~G<<7>þxN,{|97J?d>\m^4|m]~ƅ>{`tem~(9V9yEm.c?#|.W[s>v{<$ ;5c2Up9x^ޯ\]=Ͻu<˿ĉxO;{'rW&/7 R/,YQƹqXS~/׏;e]i[gQ^y")O=s;*:OޛCu' ͙~/Xѿ'g^ȁ|<ޖ[ǟe2ޒƟ#鉎Ws}yrFQ:Om_Էgg׆^/v%7|™xu<z3n'x/r19GY^󏏖Yo4vynKZn䱾R~6}'~wk3P_GGxjsN8ν&`~VvSup34:?|={yK/%q_|ETo~g#n)x2?Sy z'rSy r^PzxOoIwu;ɷx9cU{k<_N?A~JU\?)ء|pO&7Z|| ;nOe?߯f~o Ow~Ɓ= g!\<.$?KgoܩbI_ZZif~En~Y޷9c=;{|/]vi.coO>ø(޸_zwu@0M$nHu|V 3_>|W>~O|+}o[ւ?ͻ|ۿ}w[/r=Oïn^ng~K۹+>QG<| _ΌKOƳ䱣_cq6}f__i?vS=Ex/x~?:~i3?xн>7g]o^m/M$@m%~zPV}>zxdSw6_wh?;{vkxtcq<Iߵq'vzQlK}sΓ7^;ɷtbgjOmc;o}WWy۶٭Yv|{\w{ _sw?y 1:-'X'}>?:O]XO-f>9o=N|su>~/Q;qN\pzn:u^_ܱO֗-o^/]Ohz$1|;=}⼣< )sP9wW|ygcwֺ>: qݫh}ݑk?4G4اϲY;yӿ7\W۸3^}~:n{r5OEmg>[̱y v?ӯڇMk<Ͻ.pg{wTK[?oEk˹89:\|M;ݯ潯䏭c\Pթ~T9oWuO^}9ȧz\%D\`_~ Γpw'N|g?i/_}~.~푏˿9/]=2kOݳrk+>5w2߱Oy3^馯 ?~x;m\yݣ_?Wl}#࠽\{]s`OU?U{{U;pqwo\<77?up<۾_rs^;Їߝ;w_?Ͽ~ݹu۞\7cWo{G~j\wSwo^q\կ?;^~yĻ8|Oz/.$Jzvr8 z3|W_Q'O}4_y!tk~Ewƭq4U<V\Iǵ_ӌ;<]?uux|sn[.KO9OG}~;O΄2-7a/畾{ͳzcSGe_0?鲾c>nZ6y:Z/zyuoLnߑ:Rge?߫'Zꔺ.IMzcRUH:צ{{՚wgҌSKP-b^;mz,q2~^cU'cV~_~bsnx>'wUo^gu>ݺk:Ѯ?>u&>{>/1^w~?/zWޤ.FgN1ho[7>o?6z7̿qn;OXou _~ G vI/Ǹ~=ۏ;O-?DuOl_UB{ts߿]^:{S#}{ڿ~ޏBh:<ñ޿f_Ƨf?ؿ7'Y7î#~{6𳹮\:O~=yWةӍ/׽Z/{8\w}Ou ޲A\-a+཭qC5{va/ >qTY:!;3-u ;D|}[wŶyccdY;|~ުHGj:.|OƯrw^eGϻZX411a&{3ξ v=<1O=qbExƳ->Wm猜yFN5۟Z~P>;ތrȭ} Ŀٍ[{WzGa'?CO+ڌ#G.zME:7>ƙ9҅GRPuR$/|/##rXi9 |t>>Pɷ_7ߏ>9RكĿ|*9ɏ|a׳}'' uSw]78 43_qp_z~/mpP's#/Cgb>ߙ?S>wM=|{oP.7|ީrM>UvScWmK|c?wryp#3G˗᭳O4-/bp)k~bk*OƏާ :x^i=\yr-?~rrCOSOxb V=Vw{qγ/|˙i~}6s8a?;g߫7yZQujW+vzZ|>o'ytW~n+#>Z8ҟ|/ޢWv㺌&~Zhc/pn^Ot.[ oe7#yU?n< =zr/nFt3WeKA_A`v'_>y?UG ?O'gBG˹x7U_D3=wqj/{'_yqRk'߳#??I+ϙWso~}u?:MޣMˋd^wˣ5{#և4d#-[=v}\->l7KBɭώ]6$&}#+Vyz ~Gi!|W]|_9~u6ܗ^?>U9zFc~M_8>r`3r#u.=/kJ/,^q}yG?[\z>bGO{܍Z^SwM7=_Fޓ=n{n: '{z@}6P$zJ雹zD=}-u-LV 3h:)اu `v/&M{xM;<\OpS}:_g{/pѲk#wy䅼=3==;oq9R:^:p~ q./~7;^K[~3svK?^<.}9ifFyX-D{ѼO]ǿ8hIG>z?ֳg_qC<<zQ\[KȆgL]pxȵx OxZgᄅ7~9|oNot`n O8&ҿZz&z?O~>y'E]:>$ӆ~=;qKW_9x򜩛xyzz#^pqg'}طWz3~k|{O珲:?ِ'q{ծ9n>ɹ<#^  $w7x׈Sw*3~s<"~'yYx㯳Բ_?s!{ oUy1gGgz;OzǏ}?M=BKNϔ]1]קүeNԁ#}3ʸw`R/Gdzv~Wl P|]^, ~_c3GxbRWP3x8?Qv8'/ϺO$wwU<7Y6oCԿ[^_T23Om7z+3w+oeK}_ޙeeڟoxu:Q~2Qv1`wե-zPii Hx"75x򞙝{§I-9d-zxb?{_OSY O/?[<_弍<71ɹ: ݌yk7ߟDȋ~_su?~T*Ц~yu&Ax)zw~x8[_w%.}uq$=|M=h=#?;x<';ݑ^(?ďo}q/W~_l⍛“m?~ {6#~'LIxHWn^&qდKt33gzEng<~}/5+;ğ'W[g(?~A|64}{Y Ox$ owaf\Л)SeՓE|gSe߸.8'S=v邓^A[ Rue?ێ:/N7vx &?קG=|^d<<8 uhZsU<-hÓ]?8 ϹOQ ;NNQ^sD*Oݥymk޶qowCxR?J^%d_ܮ+F.j5y1}PǥX1uOпYOxw.~oU^,x:?ukſ;e#</걆OI8xJSb/O?[x*>gSŝϯMޤ}օMaqRn ߄9{>Tq,d}q8N#oZz,P%o+O+cW /B?SI;;5uCP_|;zo~g| xD{_Żv|czٴj<SE}sGOG8'qd߼8?v}8EGu_hNS>E7xNH> oY4q#{=z~>˗8>}LE3Cx"W޻gטau ?R|Lm+O޷]>3s-+evva'_I~ޭOZmG6E:s:/_qyL 2y◊`OאR|{O8C ;_#t]~㒞h'_ /sr^bf 3o}o;~Wڝoޗ,>[ O;;N]_v.^uw9-%/n'zq'HWcGcWTڟ{x}O~ssok$=),{|'փ7ZGu-DS|.}DoxoOvp}5>bw/v< 3$y_skpU-x|ϊt뼪' O]#QOj\ǒ+3}d?ױΊ`_٥;n9OmiX>W}!v~_#7#~cٯCߋ%y^}Ǔ^GDܼ_K|1e7 xWy>k?k/pS<򭾆\ _\]P'iSm78]?C ^6hcz \d=~qOAOGگj|eUTޫ}:om~@*;U5Gn<NȋxpG\q-xW/#ցsg\{^no.|Uþ'G.G?ԥw~\MMKqWgz>Ro`j!3_3~W?{+?G׶b_Ww */We _qm֥u}ة;~w'n Wߠ$ -ܰ;{~<;_7;Gy.<99)xbw\Ž5ݿmGn O%'^w!r?7x~:HrwjZ:ڹowxz]\WOxq}ɪ?z@o4ޘ[;>pW, SsSܯ|b&N˧2>wM>ԉo +ݙMwggUcr_Sw}b]*xb /)e}p*vzߨoN]tOa=<>=V u|]uuc#<= kp[7u_u)C ^xΛS޿R~@k@|j?/PU]_F9ukz>Zu/$V}'p<ԧμK'{_Upazƾ8V5S=rCӹS~ 3{zpN_uĞ?`ݯ85!ן.\OEF"qA:j7.jnO8Wy3>^\wZ~=ag+x?+^?O>8UUyB\xϑGqxRWq3K3H!9/_e_/"3X_vq GGiOˉF}_eYߟxK]pɥ::q\T-|$NүDcQܟ7 OfȁqOkiT; ʓ%K`w-5Rȧ}Z77 _^7UOwAnd>L<c͏|z'ڙOI| =^@#G}$ûU4>@`QL=9c}?SGhݫxMz=nzk ~7y6x{/wC׋=|qn>ߣO&qg^GE>@Ua8z\N]9~J^'uz6UG^O~ aGq C14;_w#v~jypE OO7b3}?'K\d?n}ngܖ:; ){\W]48sg7'~CdY/nOvqոkE;opV uiXpAO+|8^xOfSw#q ?!m]I^gR7F81}>q2 >/U]c[{{J.< p=ygxk^= ?mg/z~u'PE틭ů_ݼC{?/Su)o[qs?%W-Y~5zz<ȃR-ncޢ9uދܔJaUyOd^7x;bxWx99u:~$c<w3vy :H7n~op{ݾ+;\+>@/2P=Q} >{u>㩿 %/>fx?^34_%> .jQwUcdۭ7$Jnyk}(^_zgnT~ȡWO%q8UO~gj䋞K)Npϼt=u6i7<_'F|F'c @%rn>lw<X< %?3O\Gw7~9/Ao^~7ӓ _{f_O|9~U?|}}<O• wK-9|ea ?2_ÿu}9|,<|V\g0fx\^}C}$k߯UU_ԙwn~6ώw^YHq7/obdr7oqϋ;Ty~~c+mqà ⊼?rW/P|WAŃ%ߨC0/#{:-U/HkCX< t>j'+m:/GLHN!zxp+mg3;|8q??s*vk[irSyM~K_NxG>9ݯWn'B\0kxN u#|e_ʳO#m`<OU,b/n?nG_'XxGtC|8׺)x~.+t3h7yI-,f<˿KcGGnO^O+mI~`oWy0g|oK)?O羟O1~õ?'*xyt\ut9q{B;{:ouAnS/u>}Oo35dT^?vy;'>Q>l#zռIQ[˦"xy~9A/-\x~K_E-h+̺c~dƉhG8ox}_==hy~Q#wm>yE^c׾ϱ/Q}u/&&?ΈR-{lر;%<6\ԽV]muRn/yuOy~2|YߡNvDZ|}Ɠθ.ѧc뢭w96ZCۿWq̏˵kO'7I]@R;xT4%n~nӋߪd͗J_e{Wғ?rrWgvT+_Eo}'z^Q'_y.U3_7c>Wx$'ügXR6rUI]xy:ӯo|yQNa#ce')?X'>43/x~oϩx O___+Ɠ;<%UW0^czvx, so3.#~ ?4j4O"nxZ|ZΎ} _Y;AǓG|O7 /ܰOӎ\/彅K)m~7<~'G~>U~/@ޣ+Wݽ ufG<~8GqE?~>~3_:u}n娭~'z_<%ok=W>my\5j}Wu0?_G\|q0.y^rA^g';xon:Ooa 9n^7蓓#SCV|Lȇ񵯛H\4~`_ïzw܎ĉu.;rrrޣ5_{~yݭ0ygoP?ʮ9}]-\/xj}q[x|*.k8_{,+M(Mc4e/,~ï4+ Z?*?ZrQcr3On|.NoW~8_}2qE9|miW>/ P/:l#Q_L,{x'#׃e>z'wkzŵU.G/a^?Zvq{mNwG{?]z+p}cb^4A~rfתN|gz3O+/o^:>=ڇ?C/Kh/Sn}?gN!$x˺R q^[x;uޚ_m=r_יo諯w~ F_ޙ?qѝKxF'gu}M}9~;oxNjY_+=z"!7{P3b=՛/u+}'89^#ƥ;/> {_A#4.mOT/}|k߸:o\yn wLPSOz qs7د-k1GMdgޭgzK8gy'vM\R'-~޼2^ſv[7;͟;mxĕZb 6NjwL?)B~=//7w|8g|Wm<_ʸ%z]Eޏ6Ot^=ڋçy_5q!ysoH|Ŏ/\ƥ|:~/=MG?@ϒ{r&p_y5OI σezɍxjq4mAٯ?ы/op%7뛇ƻ|}xwx‘u~;gv,օ83*릒ivZE5&'^!_;>McNw7^#Oqy!g:o|.?ZyS vsC}˂|/SM1oב7(8uf1 nK7,I^u?q{'z y}Q#~ڸ'O'E7VoOe+Z'k7?9ͺOq-/Ǟ7ĽxTz;Ma{o>~쭗͗}kٱĕ%O3L? vqPܰwCq<ɕ=S̓}vvYW~`.^o^ɛ/W#_l@4EOǖ~5koi'+=do5y&-m[Kݢ7_MˏNyq?{ǶrS>1J|Bv~₭\ÓjϝWkwgu*d>,\簯}'x2<}x:bWL?L=솧xJ}r{m۾G>ܼe~T< G?6wj~/}!z\Gx& Ko>6.>_~5v@~[qíܿu)-gC^U=χ#/~On#i㮉QEh>eߴOx{y]|{fҋ;o hJB|N瞋mG_G(mSg7yCK\Wzb;^xw:n6]WSbݙ^3?>{O?!ӉG\O<=x/po/Sړ^{;W|Oc^㙓u`Np78iv?,+qʦh3~^/.Hg-2w7r&@?KMI WûwrvU6m{886vjy: s7ro2֑ͯ}7ʧ;.{VΜBÃ1@z~Rz}v㿑۫>mWu1e>?9!cO!Թ3糅/}sx_ξ7×9UV>+Z:r =j{'y_,יy}=TsV\_GOǓ7p[l?- xK!/:}gxq=݊\is}O韷g\wy>Z4uZ>~WvCGr;-^)u~|f%9a/@W6|Ñ|,ޝ݁v]gY>T{_~>z a:~UZqj}4^Y^ҼůO|j}{n0s]DZ t?OjcrC?ü:O|<~o~?mIOGqCϯqKZ;cܯq|+k}9Zsuv~nK/jq0x|:;n~6;J?җZ=g} M\}|5vki7~Źz[V:}Ogg>ό+18 /y|۾j\ݒOq'){u˯#j7ՕYocFm ?fz"q8}q QupiNO{sN[Yǘx~x-q̧־co]Wg<;\oiOKz.3yWOy?}g9K^Sog$v ]g[Y|#o[w"_uSwyPkcA?[R7\֝mJ9/g-~?Ͷaa{x^WoSqbz7d7?V{<;n7Ux-yX9r_oz9 T=z㿌ϙޟb^e~j=J+<>vM=#͋o:>K?kq}\s{W~>$Kzo_mGn|괏?\vgԝ^gSuc>eIo/{3rҧ?=n7>zZ'=|s߰vnrީ׫~\Z?~C<Z:o˨w.> 4u_D>eiki>D<։l2uizYv_]@צ~G]u;}ddȬQ%:꭬_Qgxo_eROWRE:&Zŷջ3vvG~z#Tw;iiUyZ3;wv_szi#}ck]W?oYK9sxNOw鯾_?+!Go9iv7'hw}KXwz;ώ]oⷍ_Ͽ:8v<':_Ms{OZu!uθiuCYPvE}"|3O>Qޏ.'e!9>{?0{]YGg̶_3sz~?\<ַ˞OJ{v/f_Pǿͪm>g^?[םyɺd X/1tg?{?]ڑ~! =0qu'◬}g>o~(4=߲3@~}L_D\{Uu!ÙC3NW_Iz*i}ytvE.}b[Fw6uOp:CſOs]rui3˹~ץs$_䈾x}|߽` z0>pdj^eybfG?5gk>rpgGWDWl?37m{-}C=.cf)?8x alϝqe#Fyy~z>{%|˟~d_y^_.~<7o= OWx"i^p|=z?ye}Or3ͼCF^r̻qE#w{>oJ?k!!q\Lϲc Ai /7}x ~3xvs^~pÿ'~XWUo^l</m[v\TYWf˝?rN48lH܄Of١o(;zy'x~K?qpҿ]⤊Q_*l;__ 47e֖_]GNGn#qO7nZ~<'.|eTU}:i}7Gƾ/^#[<}ӝo<<_x'~"//po6x{P~ ;k_C _pM<7o0Sf_*xO!u?ypQfߏE~y3擟7Qxt?|f/!>uEy~FߒӏvKSٗ ]88wɳ3x%n4QM%˼z~ɏ5;y; G߷_t{+r=c'uz?k;,5Q"?qSoz wl<2K&nQ/Z}}^Yz}uGx:C]O͛w޳p`9vļZ?y1j󨗨8ZB_'qo?oA-Ϟ_g] ^*-}y8j~o #'qR_\z .SqxGCON~_͉xڝ66u>KD>ӞNKs'` .O_boͣ%^*}͏#q !dɻ^R`g$~qzyD/%$\y_凹o >\}q?yBڳ['_H%R郇9~_q#u] gm؛K>_s=?3⩎?ܟIc:~PW4?G~}O_8qv:|\}a/ ȝ~~ _(N_>hx OV~Dw/u*8qP=㰚̷TW_yϯOgWy~^._;l/qy?+#?JvjԹOc6Kׁ?|<p6uK3jM#".:~=˽{_g|3▙Ov=z;<=pSI)\~|* cK#ֱ< O~HzuƝ׌Gi{n|/KN3?Ww5MpV=GNOWW>θ/%!{x v.z"yqGCϧ:M.oQxe v݂ xGů]⍮xiW^&yYLj7geGCf5n#++vD_OF>+K:\yu\gDƣaxIcM?`pg|;od:?kz=.}i-ص OCœ񕗊_3Of6mɺv8/|yco p:Qj.ys_}н Czu\0N&2^.~/Fh^C_ WK_p?~~\3v0,u=l~*uÎǟF/poQgx_{׭^Oxb7vm|%ψ6<{`G=3p9|G3;hЫAʯs _M>1X|s|Du^L~bO]}gw/2|wLˮzN|/x:uM踹렝7__G'{,3~<8Kʮ8Zߒ~˼;땆o8w]͏yVϧnݺs^R?ZD#Go^ǼG?IO Ni\ίşPE~Ծ#֜o=6;V~w]|Vqpp%D|" ~5{$&ol9ۑ uy+'c#u&;o~uc|O[S^jz9K,n 7b\\cm?sy?~|A{e#RK]ZEy9yPqk8~zȫ'>'寤.={r.۷FO.38_pTz<=?%xsKw}/]_?=S%  |M?V>ݑ'97۱7}z]ur;5H> }v.lPŽ aj}rſ˞~/Ei3._~m< zNw_X]P릓OoO;sw[ҏwuL۸ۿ+gٵ={5g>kZr de3gq' 9V~xf'uK>Zu]υoxkcWf hΓ'n=~T#:^k\RTG]G9K}姪"oCnگx37Ox<>5=_U#Di<'!?ɟ ':5/7>j~:6?i"u7s9V_%Yh->S.ϼZgcyW7Xj=Oqw2q ??e˓q$O[Gߛzߛqw #e>{p Ÿry~)'z|Z_g~hөW#O6[DOf,^z(?ƿS#hOT<;<| }O~ãoO`ɽv >:87| \IFO^yZ4uƉb䛚w<|wΓxsuHwPAuwos+ gmϖS%v\<>S-~bJK\xo<o8y/j]}:v fW}gxֱcA,WU=#i.lmOs{ǻ*ލsFÏq3K|Y.7x'v9~\Oo O~Y򁵮6lٙwy{_,̗nˇyQ{GOw;;S'W3+%y0{Q\xβ:-y'9>iO7r_~>uc<}OE6N-MTuUn+_}?;kx-rh~r/^cw)C-xG|TΓG/<.?%k>3ccgi;As|w[kYṊ9qYKy7d?X̟z]U޿q~(~uxڬ]<}N冷 WPbg>Bi)Ox㧺&W5͌|jYT~ Þ+yo u';5ױ4O?^y_ݟO':2sv(<?ϕbޭCHۮo4@OȕkOВSuYVsTa>k; ?6-+vּ+sGo_z)f:0y6)yx]fvS3wYQ~_$k^ ɹߝ|k!8uؿg.CCxm/Sӻ}q#ⷓw=fb?oW;nu<zqD~Y)x:hpƎ#WvTyOq򷵎33OÛGYrzps#F^A?S_m7_)Ȯxd_Zȃ8sz#f56u xZ_ >LyXOuծc=bmg<΋tK~G_x.*x~-ϳ>](yp(Nz?1p_}|x$UGu^-xw}|fz'yųElMulwꘂ[{s8&/k#9Lb^/oʟ\pْG=GWu}_{.;/='J1=',Ag~¹|w9~L<5ȯq|tƙ!Ώ>xIWlG:=}_?\vQ{ȷg繞yY}&~/]nݯѯxG\v֏q'%83<{/&4'88,yxSU gޮw6NDߋC;pO^}(W<>3zp 9uNߞ?]# ~~k9̾_mO_:Xa^ً[/;!oGgNSۿ_?Oq&Wy<3'_G0/Osۿ_ƞ0+?>.wzF?q2_~EZwΚǒ}o?5w{iZ~<ޫ-cIrN}| p > "ϸ?37_n5.n OL^k̺WOVϼ~q ? N)&7]G<_˽ebW͟e>f\3Y/:~<Ɠ٧߂'sOb n^`Qŋo F;Z?ã YӇH_Xφ7o?ѹn⺹⥑ԯ_c|z^K6峖4^vqu;jw}1x{W߿_ooS4;o_wu;z%o':כSpMϣxPwv8#x.2 ul=Oda8χr]_ӎ7'Ǒcy#pd{/?g|\8i={ w_o/g׼دߟ3[+ gg8/ ~{OwA1XPy]x<|ظ|mqM\WϕA&UދNS'3KOz7O[vΔ_8<=vObOҫQaơ5إ%y}f!YQgoNȱ8>>cO#syZ~1]"Op%;>x}1_<m#lTb~/oJ<~7cvᏴdq:,8˸8i;.j{Լ!m1#8~_R9=wv~ p9l#ӹ5N}į,9x%v |E;oצuu>k^}5Rc_꣆7><-b_25s~`~+qjֽܼgqx #POȣ/N\q*渶{>wnKqp0y3zl+丧9]K!VR1?-gK,x*=qV)^#/su]Y<3KsvnQpg\ǎOymy~/>h=[nevK?oy~b_9OTɓ#V;xpg_.rJ#ZR{;co=_h^<%׉םSVü/?ȿ5'#To+jC u7xuKd~_] | ySq"^<,Q15}>0:rb#eqzDK|7zN__[p[$y>\ĥC?dQ3=˾MpY _$~y[|J>}֥^pѓ=v!UozO[zuߓ'v]t\%VW?/?O#>sGIw7'x:8ȟ˵?w7Gk.F/Sxώig|*.ڷƼ/Ż#]9S OO\}i<'?I?Bgk7|\<W;<85?_j<~ȟ/|䉼[(8m]叚yeѻ|ݙ(tox)՟TGwXvqi۹]O?쏍o;;96Ox|[7tD~r?aƉ—89Y4A9u-_MW ^'Rm|˩y}3~xwW~3#<3uo<7O+.>W[4'p<|1gŝW7=;Ћڮ 3dD\{?Ծ//yg^9N@;ra\)<%V~Q~v><]s~uܟP㞗ȁfQݭ$48gxe=} Qqx:'4+/k Gf_3~?^,jaxO8+33xvhmO+-}x<>_r8꺿w4??).ʮw}&oL} ތ@$Ï>EȭuW#q~q^aثGgzBN u/zœ+TxJ]O?M}ȣ~%~Ow]<]f;~zw'ZUsܐcquO"j~UzGwf7W/9 *^lIUg#W(P#rO+cGwݲ+'oF7{Ӗw(ޝ'Ua睋׾f8O7`?x4gۯn[q~ϯ~mWOeq|[9~󹙿_{{ϸx]^ayCvxo=`\|ZQ_c7xsGhҎik0^Ks>~g]˃׫hN¼c@1ƦrOP7zݻuB}ϙx}y}ÒGp7vd?'6xi|ON<|ݲx9:͗=WΛw_|p.qTjpvJ닿ּI,(p'j1x~z+{iSʟOO^}yݏFأg ^#S܌X;?'AdzS͏o{y<<%n9@wx߷gn"8h,>5?$[5ׁu0 qf>7xO&Uxus>)9u>bOCN/{?~)\ b*:;hynyk=/qu|ۛI^ɫxgCn2r|6ء>OO<Og_*މ>ѣݬWy}a_n?;dmpE_\.kljUu~}П-^6i&zz~7uwۭ7ol<hY>x/:?Nׅ7ėSLXܴ=+G Swl}o_}߱SͿ/]|Q6S_oh=흷U'7_/_awXP~k1k9}y;/ol乃yC#u4{Ok\{{ukKKxվK}.ހ3u샷Ggͣ#]pG?>ޏ?Y|7OG3>bO_R۞߫8'zW\='8c+GUc{g @~93;!n!_-*:|XR=B^ⓅIw >Wti^ywޗ7.Ky2'S/k=v_/xdO>5gS9X_4<~m/]]i%ߓCvϸow O!޷;|匫82L_n~"b?~;Tc<+3ԅt݈y5X¹|ϫF4oBϸЯOpT|}gסO:. nٗ>nTK/\%Ͼ9gϊ[5xf"!ώ,_;qG^7/]z\y~p\K:ϭm{w~{'Ct|E3ίWé#OfWsnob_Zzyz߄.TܾsDZc&ύxfa/u13nczyOҴqd~IGowg~xDQW|Oqph9hQu^/˶\v^>#{:u_^v66Gh_~Q_?WoT:C_yys_ڼǎ>p>>xz}C>kw3c. [nYOʿ|^󐉳7zao7y\Əi#~=/>'j֟Oc7nOW/׌}OWfB{ܷqEmE'<? S-9zWwxJ/}?]Cpu)'ϼ95o? >y gkYgy.^9xx o/xأWp5WOj>2܎=eUѷ'xگ=Z乛uǣό=9yfv%֌ G~cwzpKkre_w֝7vg\zM]_f_(c_zϼg>,f>U0 \{?t/ty ψ]̼piD}3~AQ9^Ÿnj'~u15ފ>_e }ZSxϮuOS=Y5Z}i sqdDg<\=KoO~ا/#zis?!/z2?wмo{#|#Ͻ,{\r^U; 2r=i[181S_xI/\'ޟvyQ[*?XUYFՀC9 4 B !@PP JT*HulDIB>38H*b^8`JNgrZ{򭭻<1~ >"7 Ӣ'_~sf;7Ϯ|wʭo[Ƀ?~h{ZV>ٯʧKg{?uuZ<)r\yOĞ3^ ;F~vء~2_C5t]G8c/k-<gߥoS+|q9k'-2ާG_!x)==^ϫeu|fg]y k{C3N+'‡~wJ^M3̟V>϶D[~$B.:Z;6/Wad/^w}?Y \qĻ~/zrbaG^icy<'v+|C+?{p~s VOҫV/K<ć9/xc 985x]iiXB֡G~ӏ|vyF'y^OW9S~1>쑞͞a悟vӖ'@$l?xh]?F1^8o gVصkOz`_߻-<5owLۇNSz/\-n7y:S×g'ѡx4fWO~xvE**|GߨCh '?}>__GT?OL_=e4xjI+_akW0n=H~ !t^j/8o\:4_W[?p}w=l?Ao?G'~In#aP3O{Bz5J^_>1Cp ?ygs<嵍?د]@_fA?cW;/[-K翩_w<76O4>G';yO8{g\ޯ߁|ȫFF_%3M;OeY m-n|OgX=ܟS;?3Y޸o^;{!H =Y̼+vC>|zKϞ|sYRt茜GϮ'DO.tYnp_ݾƏ~Cni~;-3cS~%_֟7~_~:=n0[McH> _e?9;\%o֥y;S3;dקS7Df_YhvD#W=7H/ѥG&aT\#G߾W=r\2N"03<(?>onޞx7<ѳIL>e$x*"k,_=A =Q{y뗖GM.Cwwb^?N^#{J>bڃO׵?%杼]O'Kw9#Tz&~m3}<ߕ|Z<ͺ'>_g:t|Wz zy#z;^/#~{z^vAĿ.fOLỗ_CWsz4z'%m`繌EA"~$͛ze2J>;̿+Ujo(vqywß̏x2{>a?M/kz|G,7..3?7^LJ}}{_/Noq~ۛz?F'׮:S}8.Og^sϿ/=׆ǏͫFGh93g_HިXq<2sx"G5__5 =g>F;ML=>??5\_O'd=;~} 8[ә~9/L;jq;gF3O8ӛw7{ r>agC'w'ӍC^J=q+IWDߦׯ}CW'zoWʹT\_#\]N? c?ʝC/(_׸V?|5F?u< }rg= ݩ^mksggXs?\Szn=m>ω6>N_||Gg//x%zT}T<s?Ϝ+y*vW\>{]*/{U_+po\_ ^{yA_gȫNw9 ?\[/fW?aOs5ip(} d]P|~r\z#;-{M{}Ӯ[S7+G--'/i%菉'>H}Oqqeq"v#{~_?~;m /FË8xGe7㷥|nNNέtx~`_xq8]҅}UkWז}O{KgUޟ'׳O~nF<OFSo8 W{^*KtvHg>Wnh'g&pr%9v+_qF7=S? '<)>?k}|"|sK "wO'rّȟ~ݺ(?余'Em6y]{\+?饽IK{g/_NJR{O+o"yߍ_y #:<͞7s\'?twO'_zOiS||43?nѳo룏G+?_ŕE[~a/^{Zl;_*[f03b_^Y%T=Oy3%o G|}\})v<'y|x? y_[g#G??}O=g}WΫ:s͛]ӿ_L؛e~Q97Ʃ~rgg|![}z]>[y{x|7{駼]`լ0^6>MK Ou)PyV>tмKt|RWg壾gQ9>[Ss'_tG'>tW'\H-i}I7|ˉѺz=zVAl|k#C`8Ы+o̿QerV_*Ѳ?+:¾7?8y9t~:뿘yD'?/fWj׮Y<=hYp(/Tj_'\'"z. ;ѧW](C9o9ؒ]SQ׾qcOʗe} u.Nrx.{I<4Jg qGC_<_jCq[+)wޛJ>=dy[^v__f>////Y>*_ ^ے߭Kty_vW~Gm]4W/8N8ǧy%^O{W]!_uwz}0u$]y^'ns{l]W>g~ﭷ~Sm q 8`|j=úxO񹀧84^6O_/xi.{F/qlc!yx5K'/8+A@;lE?r^by|&oׁΫ]ot x*m̬xy%{m}q򴬧Ek3J<<y[Z6ߵOlog/#~g<3}c9{.;D>33߻g| Og8'zGg[ ɻ',?\^o(Y㱓ݷއ}ߵG3o}O湮7D|?7/UvS7Wz5⇞_?xoȟkdݫ2]e>'S74ouεŸ쏋s?qצߘK5s9~ fc{~zx w+g_Y*=1/C[W^с&1#|׼|~w4y ZBGzq'__}bn|Ÿۇ?{G3Rsگp~=mc}\ /;:9G^ϣ¿Гv}uz>c>gvs}Zx9's\?cCn/"gS{43ƕ\dz.+|~m䩸u}ʺ_l m~s5 ѕ߫t'q0vxZmI? :&f^Gt "JqxNw>O@8 vV장H\l9Q?_9/yHƁ牯goq#qOe}>&򥙧N|a˓8ˇo9KWY\koS¿"S?59&.\Y>kVxxx~x 9̏0A?ĝr~O!y_ 㯣_/Rާ?_,JĿN6yx:Ľkg}$8:!|Ӯ |3;ʵWּg心ϏEE3n/IP'rwɿd=yA2;r C/!yxOH.ո =_Ϲ\pk$+6 .kMt2ж^|*t ¯G_'?[o&ĝG3> +o~~'x7;xǾ:]ӳ]oyEg_g'CwotY}֏~/;9}s-;?BՏ^%}#~n{px^ýqoww;I+;‘D+AI^m}_j\{O8ȯd^GN'_:կk/tqy]pާ>ѯ0^_:ާ?&~Wc짟de[Q??P`<5zSsS~cE&K'N—|w&_3vVN{i >~6>Z=_9Cp2~uT}=N?}{k|󷋧_ioʭYs|Rz=_rG~;=ڏ88<[r_;9?_i<>] >qԯ^?z1/<]_9Swι^;q_ĩy,N/@s)^۾o܏?mW$W3/{}~h~EqO9/7=gx觼OA'^t?7㹇q=N6>}p$^yXGnG_0|c9[vG'g]g2otŅv|&Xx''wxG_K=_ͳvϵzwt8U3ޗOz=?{Dxƻ<TsK;W"?m7ɭO'.C{^_oIynSq$OƉl?;va~|!ojo@#~"z\잽R)Ӯ͇/G~~q~vyLBS=﹌^W}^x?:-H^>nt>K/t9z#)xF?MQv%+GC} z4?Y(x?tz^Yګ߿YώOګkקn[/>7zm?78yB?Q;2OM{K'W_Qӿ}'g| ]SL|CԿ1߃3b|̧~ƛԮkކ;ލOpd3]'7E^tnOz=a~U?OW*N}=PI:}`oIydqo+U?uw9rx]*#r׾;3O_1 {t3pnokwk^UٟE ~->Tߔ| _/3}Ö+Q||;-y?&~\7}:_+<>Dxy=p_GS:>hy}6 OK85z1C{[:G/g<% O8w4ϥhO$h#Pz|_7O}[[ɼ{Z܌엡??壝?|(及9G *?~y8=ߟ?S;6(v+Ö5]H@ڣS=OO0. ns|ӏoַ9/ŷ6Ư| e_MG"ڛ4c[\ty8eevnנ#J7<>>{v2Ϯ{w~'?h[}W|h<sv!YwR|kެ?GSK8¯Un@??۵43qT^]r?F~ ~ ?x|O+f' ^_!8\y3|tGyW͚b\̓z?O;0.RƫпzՇy.w|͋WYp}q t=uJ#FWՓя~/o'ui}?g#ۿ>zg;\wC/}n||՟^o-R[}G^1Ygr|s7Oxs㤿2LߝyoZo|9W=9=,r+.fi8SMk~<;%yyF_8£qQ/=r~gk<=Ut2OGr=z+yUsݸZ]{*Mv?|E;X/+^<գI}[;9gŎ}hO0ﺆ?2ON|NgG3oC;ïܹW/˕>M>=k7t3bwƋn7m ~+]E޺<*J)Kk`<_6~as&[~waߌC艵g|<OW[~,!oh㤿IG>588_?dܟMh^wͿ'5.TqzკCH{ѳkݸ/^2?3:ǛWy=~?ԇ_[U+?B? < ΊGzزv7~ 2Zs~Y*?Dbڻ\~]x2C?}P#pd.W}7;kbԋHjW)kݏLʧY×w|6]8K}^ݯ4d~|(]s?/ͼ?~\V{7{=|3 ??־~wF9kxJO'S{*xhQ;?eɛ;z8n#wX%~ |Kv}/> xCoG!w_gCGOճ9_ßJrWܠ[%o/E\NCs%=4pv?ǥkxf*gyU_t{yi?yc?O;=*|s<OwՏNkrw|!;ot<=tuKǢ8>tO0>txރKz{2q@O_ (O}v;x7/k//"9~8A,xTNOWg@OGIgqki^Wwp눬' =OpƝno;W7~pp(^,==߭^]'>C/b?]ןG)Ŀ!9_vobjߋbׂ O?qOCp?~~e1&^o໮_k mTUډV/Q~kOp5.j?9-“מy9WFᯍWܥ?zw}MdRgO_KH?NyXy?0nvs\v7ƽs~|+gOWeAorm>ѷ5[|>~mC{'Bϰ>}sj<׺K8Z<Owc}#|q:G@=zSpoѷw|LTVY?Z;~Ϳ~ǿR}u4><0_9.6\cTi??O=H;]$o_=?#g8O8>s"W'/<}QM-tos9[3NC_}'3?:{[O?]?y=.>-}_摾?vW\Sr-%j?Cݮœ=t}_= <>zI7x:7C8_m9On?݇e;\r5e8#gb'<>z7#ݏЫ>їvջ#tZ}Vl>_d^\fOix^27+}}g/\'yCk)}{d}#Wި݂n~yHsA~_vQ39~Aw+~ tgCO4|Y깛~A#?Iy:rŌ9_8o>k$r~|^vq{&򩸸-<xC. g&Џ񳳼>+_Cw?|UCOrʩk}zߙȮ1oگ7cg<~j7O_g>~z{w/~-<5O'ުo+]g~͋y ?M,N3&舜׾7kkx|}=|'/sơ_sݸ΃'?Y?r?{/|}.a;~st /pG·yQ?6ǓC3w!WP='?\R{vq*?O3p?ԟ/~_xO{zM{.|i~2>Z?}+ߚy5]׳ϋytn=s___[Voz+OGt |P<ίOT#^~ O_b4?ӓ)Gۡozs =;v{qgbcad]~ƁgWoG뇟R{<)T}=wV{#84???;oӏ?-7=o z֧}μ dO0N+񴸺ú/>{%|xۍ/w'u~*pST:z[΍~߇yq8ȩ'~Ӯn{ޣQ}Mgx݅/.goϯNI_?8;Gs_;u|&P8ȇ?j\w>7vԟ ?=w;v_ -?.^}QC^Wk'!pi]O7'~ow|yo=wqZz%`d|kGߣ'O^ԻeO3OI! BBԸ }GVNGwG0N2~Aㄯhq4_仯αюM|}f]=iȓGC|oӽxڿy<_O{'??䰟]8h=|<#{m_x\G;5rcr{wO/'_?3~V^T7d>Zzߵywɣ/˟τn>j^8j%<ծ|ceGސߜ~\+W<͓<"V~O=O] _5}@;ۮGr <]=G3oE}"t|Ľァ?O__'[>w^f<7Ov?U6j;J7n | Ͼqӯ/ơFq|y^ӷbOU<6_}Gi~WoMIvz[y$xSGBu)^Ƴ~>ݑ?CِC>ʯGݑWo_gw_σsOsaq9=pqZ:Cu |(̼ b_=J|~.}>x@skԎѯҿ57@w>\(M|Wv9l|sJ]o!ue1=ƋTԼPяkϣ~X<}~;#Kw٧nد ]wJ?G-[xў3~*z{{=Tgog߫\w^?+_^;]{}J8.rV}x"׌#'̷8? #w q${]ī%|zյKoq;A>W n^--!ȡ3Q<6ˏ Oqx3OƙОt=t{ehbgs:>Sģiqsb?i~ACȝ-~G@/ODne]d~W~ޖѷ|O~/ _t\'x:O-K}CoNGs{,x;ԃδ뙹M8?/|}O =G~GO~G`\=dڻ~ű8Hف}rxՇO;ktm<[OC~q8 B_~_9t G-+mk:~ߋ \מCtvkߧo5,roƯ]9V?J?ˡ9MyX?*;zҋqlr N!NqUzxK<|!rG?^6|XGk~`SotA>|*.ƓyAOP;ظ Y߳|.HO7d=peޞvu_'e]ehf.>']\'y0ON+?Q#]iܕcxrteQ .~Mgyn4l|\;3q くG5zsoO,]O9Or~_)|qty[W~ql; :#?zz8+_?%zWC}_((n]W~wk=x=y0}槸XrCW8SGGWrtpx=OtCO;N#7O׺G͙]o5<,V./~-Sހ{cTi RƷvnK>>yBo=g`s77vY wBWYYyU{ϗJym?Ov]Ǖ~{[x/vIzӬ׀caނ+gپs c+GЃy0?SK^}&QB5~_]yոKfS{Nmظie^?ܯB|txV>ȥKs%z>d)tG_F~g76_}4_WwO3~{kE]o _ }WCp}#I}۸eЃ~GU=_ˏ/??~Pʽ棢wtHnهJ2oξ S?}3]{WoϺ&b>G4)<>4ߌmtڼǎ_M=~LJ#tjS|X{da7ͻzޫ}jWܵlu˫wDoh1_S ^SR'?;}=_z0*֋Μ{giҼ_=a~w\p]x1Ɲʧgڕک_g ÑqQL !W˛=_'ph~swGj>·}ḍVoyWwq3G:BotICǯJ+grzq1p_?>"/1O9? f_X?쵡OOO'=*oEO&kw7go1΍v.~x2r>+_͋+|r<^N_X!m^"~9W~?/sm0DUg?>q!7kS{oEWy-:|j1^ o]>w_t=~9O~}@|ѳ͋wľ?Vȳct_o;>v}Ώzvgr4>gw??ξCgĞ?3;lϓ=gs_OyA'胼B7ӎb'OƷw+q'qOO=d齿vܯ~܀9o^ޚgfX'бxw'?"'_`ƿ}pvy2eX?`UpH裏95}s.n#;W}ܪG^7Sp-q7..wޚ7ryp6pwKro/g>׾qkxxx.=n=o/ͯW6fɦ$qW wo|47{IIm= '/dxS“~'&7ż_þ ;h~<߫_ =-\߁t'D+̃~Ot߲\[6k|'gǃC?'Cr>5Կ/ڥ~x"0> 7u#?~߫%>߁o9u΀2脞Opx}^/IW']׎>:^fNzY3=?|OtnF;N |x>ㄞ̸+}x}G~!&oW'߿X}ߜNȮROɽg~D;6[]?)?s{rx?Q82njuזރ{]˺Ώ~r1;([>7O;K9= t+9bǵ ksƓ<{pU=NoC|3"Oq >ιN[Ͻwc?WϰʣGt}4wb/bw>YI}.|[]iкFп";/yӃ\3><ؗ'zἐk>|oWy|4rT}zvz r\N;; 6T߹{OGl1~wf Nz!k_Ox㗳nc).K- FO>~~tx|X{įtEΘ3pC/7~Mr};z}/e* 1BwD;_p߫_w }koc 1GNF;EC*<8# ?<#=k :E7엍WşBE=]9?݇L~^I>=~qM/OvW6rf_zsR^9߈yv;if|Ɠ˕ɡ_|Wϓ'iy2/t4OvtyDo ߣߩ/8[2;K''?4k|"zS>z_}r8h{#BuߵsYיc)}.op@#~9x{oǘqG>}f|yC@/yj{?/}ᦟx_:>3>鹥Qy& }~KX܌ i/e? zui>g$̏yFGߝiDq"7Ywӡ|߼oiCk>/+ǧӞ/D|i[\jv=uRߖ{.Op;xAN;~_vu&\^ˉ8#D.mxp)>e\/7F4|C=}?F_pMi蹮cAt_9>,~Ϊ=/{>xhX׏)R>Е| j{?QSrЛc>]yٳKs}W=.F>T>}}qzy-_Do?wㄯdo; zoNKCIqP>+KJwRw_C?=웁tpos/aS ݽ=#o5jmm1x&7;*'|xO'x:O~-v}D\?7?wE!/'qNɟ*wI=W}Oa׼pϑsOgT`{uox:$.Cx09? k#|w~~t7r*=7;']W''HwU1ӹ#Ϲ N.c3ø<]zgAߍ~GU.yeߕ7oOW~bg4W#_Z\wkGZG_Q}~Oh{ʏʣ39S=dyg<7bt.AGӁ;0n_L?>PUt{n OپI!=o9v9V׳>?[C?Sʷ~w8i#k\3WK>r_au0~s8/ /}>wkKz*_]§>v3קdpG <8Opܼ9'=gx#3\}&hÙ+R~WDϮTo>s_I~"g[/ޮo?uW'Nݼi<>N_ornO͓)~OuFōW\k {[?~}}]wg} qy VsǮ}GGڅlipӿaJ8/d~kq?OWѓ$i:>>?^nn”Jg7#>yO/F. =3?yR>?Z>|GWrsn{擏?'\}ߚui_%8_|~/?g< up/dܿ<ƯsϜC@WCr'tuW+Optu}Olmt9^Ýx8O:_of-yre=?scE<~M;g_ݴK|?x=_;${uu.\KW/`/{]Ёkr}=+Տn~+BwKz>QEqzn~g^rizGj}o-Og/t]?.2FzgßfŅskr]?¹=g#=?j=WjC=~FvT#R??Oi_PG>CJ<=yC'5OiupHyߛGj8yh|7u+<^}x5ks7ORCd½<+}VPR;K[o;ҟϮhoK)zW=3/#7m맻mUsλ<'ECoȮWoxC`>|z>g )g|#+_U_rfﵬ\=*ol~spr;>Lߴޖ#)J~^t#.q-G+o0kmY{u=ףW3ܽ>7dM/C^ɿ;pO䛉,\K)[wr=fq_N^~ǿyF=O=?\퐯4zq^{Vυ.:)IyC9|QR{m=]8{kߙ[q>+]yy`ze<=~n~yz//o|OJcoͿ׿>y~~~~~~y+vxz||7ʥ2CFsg%|6D~ YWFgskg_"uOg4Z򍜧$S΃< ?a/~?=sD/'RҋsO}'R^Yץv}t圇>J][nuk7ѱ_q}'?:Ӕ4ZޥWR}g]ww_L+/Nl{i(aߌ_Vm}/ketL+Mo}Fz&%a샗g<.:)6fa:tn'Wzz7gZ9$9.;xm̻s-y[kG}ֺݯL/VϜOGǚu"֯[G7ȁͷnJ~ Wz \_=[ߊu*KC4rٟ@u9oػ#wK'9Ok3TN~ɵ}=r*RIA[j3{o_>^o?`%{u_:hS뿶v+N|߿|z0޵aX58?ؙo̹ߟvΡ?s RMكFX7{ O9gى?]VCK.gwRgXwvLPϾWn}S.=D?>rb0tu(yxk}yn^Q ȿY_vsm3o]rp!Ǟg[w_NU_G_#/c7KYϡҍ׳~wE^z` /֧~݇]vW߸0>|gɴ~oxg{X? E{g /~*dGpo{Y8\}T;>/OYg[;OY;l{?C3[I~g-禄WR[~c&mzi%/ߥ<4E}{jݧmyy!;GK _gO}awr~z"?2o~"wGk_%O?짳No<Oޚ|%<v'NEӃ'ȕԿӎ;DG'2{8Gs=Ӎ?ZĉƯmq|;Wz֣#6圥'=ΝO> ş%}bm C6vQpiMv!|3<1zO[<|T<;Oi}?]=H9O{k>}݊Gsq✟='ڍyͳB?$CK/E>y)y/y&5.{-}{z4;vCѯ;Cw}SMt/p۪?qk t 8vFo(j2_@9H/B6Azֳ7]EG|uO? _yYSzU]'Ao*dUIkF⿾_qc;'iw<G7/~|x>Oip{*qoTxfзh}ԇn?0rK|VWDicO_(>iSst[FɗSļ…q'^=qpsv==YzG89qUS]!:l>|q7օ_ ƉGc'ziӭE'ƛ&;B`j=^yϓ!_|w OOr޸]qKxj{Gv=~ok=s}o,w?tr׏1WO~^κ5gk;?dw+}v~_>f yJ$'9cU_5zLq|toϡg '|N:X| /g˃K<r[+/l| /c+3ΛI>+}=+|ylL^_a:&?~N gtޒk1.x֏/A]硿扒6t@Oph?[יx,~gi7~j3>'W={E[IY@~șw̛__4N-Z;?e#uMy.>N&dsv҇?T]z9a^\e|B=:K@?dN|¯\қF,Ļyn^v(wΫ}&'?y[<ǞgҾƣK@^\[g?_ﮟA~0Oc;Cp#^97ݟ }w~q3~J)7#~v su<0oIhy9ȷϵui?EO/g+.zr-yrDSʵ/g7ύ˯@CQ!g6=7Nui"ߣʧ}hl*)A͗G֎;!>?|^=2O3w6r~$Atӌuy-!6_hp|pn~Cόvt?Gm~~zS?]1 y~rmLU<a_#'Y< ]7e<Cru쪮 :MrK> z،[|8΅~*~藵6z%>yNWCܺ Jv\әwu_i>?g7t|]ŵd? )q'U6@<|Ǯh~1:GfyDG&7:]5CGK48[+L~>z^޴_ zgg;zmE>}~g"٩ƧyWit? FΏt3-Oeͻ}ay}z7{G/F/o3rK|A@E~=/ox6=,.Jo_e\z9ߣ?>$_^y>ʞ2N+yB_~jy֙}{ܗ^!ު/%|O{|Zzы}z>.j$:0]a#}wnqK{z]39TTe?ՓOjggk?M;מP=Ox y&@+~oTzw,س#x#OI2 }:]OU 6:Ҏ[BƉqկƿPg8E?;O^͏+<'qsW;X'ɳ[2=~wM}SnS߇ß?ky?5}ND~#ѻ~#y@vrx[:S{8;_Oc;S9U||[3װ/#v9qƥoH)xB?s7]Ἧ$/W{.6}F^F%y#/Kk$.\q_2tMm{=gx# ;Su]1݇a_go-7?ׯϼ5}q}68#W'NAG8u5hcg/:x\UnÿupyZdY(y|x-.;Yu?gx}]F>9<q<=?GO87/o|yO7J}Rίb/Wgo|ѽ<דny(=7~Rqv}:cg$<=*?nzFS7`W˜N?Os~ϡSa)ߗ?Q Ou'=OKOS|~ήaz%< yYп]o?^o΍| r\уp W<|D&ow^o_`}Ns:9O=r,ćxQƹq/>>ou_~k6:t[?]TpЁ'9&z[eUׅ'|(K~C~PϟV?g/uɹP+f|q*y$ߙ[wgV>]0x:,%DNw8x?y]1|=<}1~S'8?O?⧸+g㳳/ '_ROear~)~O/?DЧZ8-bx^{٫z8'4>K|QT\4zOG.JWOuԃ/W=ˣ.~][~4r^FO#}/ G/FߤZ̕3t~ ﰞm#?=-\s{> 0֟()DyZkk3~9fY'%}NtDN#QT˥m%8/9_9r.oqrW>8b=sgn?OG' ?]0;5:#jOUM?A7pRG_Ȼsz{A]<~s}Z>RC'ܔ+;e2NcSW_/k<(ﱛ[xwߔ8w1ȯq뙛+RV~ v?%y:t]_QmK'<`]We'wbpx};=wslvSG7cܖ|O~s~;%oO0+ Y|_bɩۥ/WϞK'?swEC'3q& =wE'6Nn/toiѡ~kx/'ε.!,_5=k_‘r/3tN)/Oܮs{x_O __+h}sdWa OG?S<]C<99t.#GƇ ە_վ]O|Iz5~5rEM; |л~W_|%bIuʻG7_JߵvOy4{I>绞]?ɣWcYsV>ȯ'8J 7E=DN{|3~h<c^}=~0t3d<zktg\|IؓڷxgW{B?ѧ8y~mM)Oak =s}Nsn:7ynv[7?%avG-&\qgY'Llʧw.h'b]-9Fu?v_<{A;7NC?kW7oj(zq1/gݏG~Z_v7: ~|乡{~'y3az5䁱cw}@3?dM{\~iQVR㹎yC#y;#w>d<.f{:]'E/5??>zmv;;@{юݧ-1• [r syTGֵgk Ga?=AAgRIwkߧ|:z["{r{po~^/qfW8>-(d2~wbnK_wQ<肿a_/<4龘vzGw>F ?Ş 9CCv_ˀ;jǻO5E{eD;̸nW~O݇m-Oǹa<]:˝kxG07v]6n?^nx7Qf~i y\;U=?CQ|D;c=/} )nŮtGbD/.oaa7=&[E]vx}C6?976^+.[?aG}K.5v~Xy7op@n68lXfvx{zf۵%KSJוcNONYyKٷ>_MO'k>6N|"w#xWx>q' J~2e\=7?݇]/Hz&n*<]><'zf{9߁GBrW9u?ieO5⏳i>!NtOO߳srޮ'^Qt{xy}u[}o^c7v`qCvЯ~+o>|El8|pśzځN~>?KnV֟Ŏz>uC%MkH-fq]4x[y9ϲsoӘxr_,BSV._๿W\rzwją Gϛ1r\}~~(x/VqhOãW~ss |x ?:+eg>-g-B_?.;yW>du }Aƃu~gw=Gu|oսqn}\'V^Sz+AY;ő·}D{m}? xCoONB{N싑O<ۥu7Ogt w?zܞ>u3.֓KWo}LȮ{gzu]g&u3-|2x[{,U:/gHǏj7sI 9`p~]fO7<&~ss .m.k,?3E6[ 3:y=w'ݗut?"xG{S|d~ vBOr^#ͣM_ ODGOȭ:G]ȇ]0|z'M8yl#@e𢡊H7G"w귧'w˝ϱrE^S!OC^Գ=gcpFF'q5_^_U} W'|C)qg=}%~EN+v+?[7_+9gyX7n~ҔO|yPӾ7%yNʟ\?}tz%+|6,37Nf ?wbn|tv߀Es_}cѓs/^(͛go'~؇}VvW1=C̷< \CyP9_wʧG\'OoO}cU/6=b~'b~?q-ȗgn倣{:t;Kȷ͋ -У}FNO˷ =l/y䈼|\N' w9_һ'|7/aٌ+tXfyǰ^z{&tùQQqsQ?c!/L_O'O~!jEOʁ/y.~~|i&}̓xi)NOYOxȃ=pYN^!>:nF:zCG W]1}\!gd[6~sc/I7'~x'I"{蝿4Qucg?~lS!yC;+t7bJ4)eťkz!W'YӴk5ezҳĝ¸_o']$? \>}rā̻y>O"OO]}عOәv3z .bマ_?!'}+ G|m:ﱫw_ё?/O5Бy~.37rXWK8[9BSOZ|n~wvj<4~KO9_~+'/:S 4ۮ_<[kʧ2⁻?!`O>_Pr8@@O?z7!*DNޯ[:Fgp?>qEݼv+~Co͟ήy&^e/zgڻ/ G$=wO#_}=Nʾ~\0N~GKJtA\?ļGo3 WM#vAu6u&kϱ;_@+K6[\|9+gy#9s-k<(F];GCW&|sSpTyXcdS%xz;;~ٿ~}DwG:H԰#GMpU< ^y{4 _AǐgSw{ &/ȑ+N.Od#y/|<{?] qr>qxz*g?8Onz=7-k#(q~'WSOgxZ?DXh#įc֯g\S͸3,~xg#R“N;{]w|=7?W7vk3;П_>No{gƓj/g}]ܙ|j< Oy%~?쬬޸oi]?]OF~pt%~|WV`w{>@EW"w[_k7]fC|yƑ4'yƓ?,a {OVnE:mg/8~񽙯ˍ7NpO~_a{'syyӎfSqKp25n}蓑O}e3i8$g\v?䝫KR/zu8o9Yv=#Okݴ8}ƞB?WΉo3xǖ/xϧE~:ìg?UOaW3)O 'xrΌMyCݟz7oqW]?z8%>~C |=y|A/||M\ܧW<9/z&~GO5/Do_? ?S<~W8>o#OD7rjȯtߪxG,Itp4?u^]5_>F[ CƓ1o4Z8z&}9~9%<'ҡx]ɾ&dn+mS>/k-֏ ~vIj7pꡇ"=Ɠ7wV߃'ﰃ7xbGsߚvF/?y3[|?W!>J c/WO?ѿzeIs6ab=v$x?9f>z? o>_~=Z\Wz?rJgAE~Lɏ?⥹\\Ο<ԫ]>4?0~GF8v&9p#dI^<]Z8Ri9{ye5}7Ď~q\8~ݘwc}Rw1x>>gm\鯵3/zAr|2'DvC}xj<ϑw|sg'OUO[-yy꧟i|0?x5/ԸYn3;)q}>-[RwAn?j/kA+ ?V?ٞ/ =e.Opt8'3_1ɳiy~z{'E\;'Y?@U݇E32[ݡGwHߠɋow߻O9E<= Fo޼"FCp9g+rR<+z+3:gOt~#_~jOE>iKOÞc]/5=9^/揝FP}߼ Z`y~/Zּg]`Ge6n?uG7wuѣi<ⅹ<-^ ^wmƴcuoٷnv;>_9qg#bG=KNBG,巄w7y'qNL܂@q_ Wȣ3V3ヒYF$k5>Oߡgy)#g6|_%oN.?%Z;x?r"_z38=i|o^->F |z~乓>ƫ_:iqkUׅ?~K:oyohY_g^)~[~sTDCq.x8Q]{NOӧсvmnUgzWޡ=cEl ־7 Wƽr\bO~|'xx!%?_l{3oFGٚ7kg#?%+x#ɾ{i\}O^Pʾ7HףtFow#'>|}Wkμ{nI~yQsrdo</yov]?#ߛs涜}F5_K#L>~kpTuOXWwkWOy]3;?qZzN.ơ>.|N}IG7?伳'߉wϥ_xt˯!/>O=W['q"cz ?|Y=& ]𯈏;~OI?Xeϙ=wo- }:65o޾5/.~i^z=}sh8o;>h~/|ݲ~mȩϾm~ ?J]>\N8pW!}<=_1Tg͓QotlV>ϕ>KI~_8zmݞ1BC鴃?~D_zȒܭA(Bě?л8oE}~cEpNbčWpP3?vW>6/}'1n,}X ?qn&Oo`jڍG>e]VqVzȭ]-+| z>>CRŕw=tceډ^،c';q^HN<~AL;=yz'|I;z~gs뙒Ky'ny/3㇉Ó]+lGF?9S?u>:~l}6[=7 '7-T?Cœ8*|6 _>C.~=ompO}{~9'5?v^绻^; .g<_OV%vR\b@@xvvXה<ǤWW$_L[?2yʻbș&.op!u'| G#/-G?~}/W}vkq5p87TT/D<ѧ8cv߮G+UW!G? ӿ\=qay+[aKKOu s3Λ0z+\!^4qY_>'<+[qƕk oo`_ŏZCtOz~]j5oȾH> n#zʹ葞7G:}'_7~oxo:^3OpNc`w?;|o.~׼ 83~FֿNocΫy=/x")gxJ:)-?l˗9+>=7>=/1(zmˋpη0]'Nh~=1I]9:x'Kֽ}z 1>/'-nWu#gW;KP9q-;=*^w_rK2~oI~^'ƙϮVߥ? SGW廋ɧ|k/=}݅s˻V O 79y^~,~}q<$OOkx~~OGܖ'/az4|D;u#R?~ ;8~_O5?IqzNhףʫޜ83ngẇ=D/A^Q?*uk>c[{@H8s(q}{?{`<~2 ~Ps/O+8yrƩWJxʹ ͷ7a{~}7>g9m4hs65~%ɫ#OzvÖ϶1JsBwߘ*I?o-={֎Y7o?~ʛID=_w߫!zO~-O׉n(qnu~gK1tvGvٴf[m_qȑg8SἍȹjYw>y+ytGSy!"~kKWwAD΍9!lC\m:'fw>u_:|/)K@,Ƈ/ov%r^pf}a=T4~{e|s<|n_}>z[G؇/~nIgVEɩ~>~5yr+[ߐG~蜿 `|]~N߿C>9}O8yFc_QQ?%'y}~r~\߂<˺9A<#w**ipMYMxh2Y,*+w"g?hiȡ/o jvyj^Yv{;ž:رev_@B얮#l>eM(W/Z}ƼgKep5v_&CS?3p|:8x&=;0r@p=>|7GZzE<]}0(9ҾO┫gLJ-xmN&k/GwwХP~}㚜Z4 Eqb[WLv? SyEQ#(=?@:Ss Okѥ̣_g}HΌHf?cǥ~WW_ïċĻ?3tï?KI?xO$Erz.xsU8}ެ>ž ѱ}^c<#>N8.WZVjR3nW_>_Ι||bO\}{m7aC/]9+?N|?pg$W?'p!pgY?_5?^_8شK+=m9t8^P}W}2ƑOKߥ? mo( %<%7;dypՓsuZ^}Iƞ nˉ_,sή@~v)Gk}^|);J=ͯ@W]o¾Ô W_ ?7;R<੸$Ionű8}"ղ飙s}IQҳ[^w_E㾲F ?cOIO}~,n"~?$7GɉGƅnӵϼ©|+сpH^+[܉k/uLS{O>=s{rw+:޼!̿y8W^߸_;9[tfw_.ke~@~Z??.97iwKzAT'~Nogyo?M^+{N8ågzW?=܅to{l ~tO~[9;`+k<ztc׫qN_]2zχ^~-vK2qim~{.?2yQ{7^v&{_ˈ3'^WdC}y Ob۱ ahp!x잯%N7|o~/wys{vt߻/PZRoޏW|WoK<ӟE?%9r?SKn9_wyy&-'Y9W>?(z#|,۽+?B;n(/+-k}Qq<x?h.W:8w^:>կs)Aϟ9KkwUl|[`ݝy+}\7o{ڣ?p;/uzU~?=UHNYoo~/)>l=Uѵ/^T5pQc^:KTvǥupT][Wy.]ka[θZgf֟zqG}և[߯^,ۺ8 x<7(Zwx:{_6xg#=p\:Ì뻇NЇq]){( nw[SB-Gpj<= +Qyƾd֏./۲aŜZn[evs3+:xzPy3gx{.]y3~~z3Y}e*nvn Qg~_};'8h;.PKm?~_t[~\@O#g>G:-]}_C/約l}i||e{Oι=g wֹ4떋yobM> Toj݃)YSAs\3)}Wz^~9p5nNƇ]U~?Z:Wʾgt\ٺ|-}Ӯ_pzkifO? O)ƙ}]Kkkq{1#'*_NS<<𻸙~%9]xJ=/10g8TK|]OxtZ~%LU~iՇ.Z~OYgֵkW.=O;ߞJcHoc(wwoq;'ןwK>~NgzS)n~CϏoW_3W`O;/gY~x flr|o|P<?uȍ3\}I[9K;/8(o/[%~e\OE@G~h=\i7C/!?\>M 't~myӕzV==q[zzoh~s"OcLƮo[v=j<];&o@oʥ9|Ƈ]~gw8yW|Swy-yo7{Ӹ7S+:Ɲf_Y>7{F^O?x/6PI]*c~2@_[rJ>s;S٭>s'T<L∟;~)t Ԏ_/ڱgлV˸[Gѧh^q-2[skvbeh\sCς/\lxc"Oxoz#ڼOy|BwƥIw\}U5\oy߼5|/ywz9M?'u@;5? ? Gss%=Z9@#?=g矽xV]kxC\!TSK%șOv^r>ODW=},:oΟ/NG+zMxm>\M}lw#<<y>38X=~dr>ѱ{F O3?-ʥuݻx*\G-x5>omy34^.;xx[;'ri9-G?7o8l֏bY8:+xb3Ys$H{yE;8)E.w<~u:m q*}_Ҽ4Nj/*9?B}<7Կr>+u6=1)ۦsƝE7gCF<rK; 21.}x38%in'%</TAOky<8SʼG!~W_jtk\gy1SGLBOOӏ#yA>\Ư?wn~Sx}~U^[8e/o]oa \Oa:N#ߋ't3gy8|7㻸zkL 5ϫ~\^|WO?SW?$r=> Ɓo^}$}Pw~zk ~FYǾq]~O|t| vZ{|Tn #|'8 cWƧUsxʁ!kX|$oӼ7ܐGs7=jIއt~i+kWlZ|?3oiL|`߃ߵO|oYT苧cծxzC~'Z95וW_Ol]>]|< =3?hlx.ɭʋ7p?\~COK.ǟ~ğ/宜N8?'yOqO3?:'M+vכǏƏs oRjoi*| n]78q-/n}׵WEZȇ\@?Oۼ3ϦO8"?ĕ^Z|𕮃:o~. =-}/^ױ/97B08|Gsސ܂S}tOO~1G@ȳy/e@F݉k[Sn;gr耛X߾7ϑOgw}ֽ3ύ~ovw5\~ڕG3S>;_>y_s;8Xv|_ÎP][h&w_A rz0;oRcyIᪿ_'tnI`Gbʱ!캣ĉOGfڷrgӿfXZg?EOkC9rފ߭ZpJ~-g9gr@wC')_Ż^GywW7m<ݾ7=kp^|78o;Tzs[_Q{@34:w/~6n!O=ҧq9JrwХYە =WcL]wr_ZE7>~{3xoEWuQi|ۣL|dRĻJLc[+3~x|&?~#sի3/;7=x\x>y3/ozl?r~8:N 5vؑW'|D<9]}vwv|}5G~eq;T*y/1O[f_:j Dߣ?m>ki>/r]^?Ugϲpq8ʓď'PN|R>^<Rvdr3o4l_ė߄'3Wsoy&%ՍC\jƵ벌Oz6Q#z\t_F[u->-ĭȯ+jo:paOCpf?Ws\B~}fW#g 6C?O-x ]Õ=Ob̓]5ϓc~_y2w^*B='E7}N<뭟۳?z2{[Ŝjur{Ӵią W {쥃Ί]}ZɾzW] ][EOo/'=W 3'/;SGc\q}rO7t~'UD43k~'~yms'Uz?%j~by:nr=!z>'g8G3qoko tϱquUcџ7=յط.鑛1~GrAS9Ϛ<߯o'ywcOn~q9 7mθ_><ƛ{ɍƟ0~w-1tz[Ių=tyCoI{&z#B#5~|i< >+~tz=zݕ3CQ 7x<&x;WWk;ק_gyU~ѕ%pa>"49owqY?8×j/z>.8[C 1_|}C^`3cH.1:p;/A_՟|]qMoPRVd g;QG|x#zq3}/x?ʟS~DN/Te~Uco0?A~5^/9%}}ځCCOq1spk;_=?~f~7&޾p{\߳>͸S/]|T4/bOay=˞ѻjz3}Qw|D9S!|./u=uǿjNKw?uqיyFןûZ~;)9C=wxv7|:ġ ?ށ/[v9=67pmh_/w#Dom?BƫMUƛݏwqO';/%?7J+ߍ[ߑ/pg}ϗt#<tg܌ʥN yf<1\kGIk+Eÿ?82~L킟oy3כ|QI7?qC_t׋O0N5;ćt)zIvQvnoYGs;~~WX9h}! ?~Ϻ? }5oC;=)sp7{< O\So}^_j^;GrԮu&cGw'q3ޮ+zkZ\U+V_J\wR3\;ćǍ+#2nδ_\x͎u/Gܐ7Ʃ~"ȞOZ*?+>Oϱrqp@A_rO1/V ~vUÏoOo[{*aME7;ȷ}Ŝ~$ {__?L;8$r~?\x3/71OQ{_zcr7>vWxRS>UOq?ѼQ􏏖= =㫿x,]GԟxO .ֿs_ա]Q|?hg;8~x5 /Os W<; Dpz*|ϧ;Oç3>~i<{JO>NV\>B?t׫_/yGɌﮏ/~vr V%Oetd|vs8ܾD3oQgTGRM럚~es8ՏʾsCBxʻ'|x~*ۼo-~ m_> /| G#_ЛmI(_rp׮膽Ogc9N];{~3bW<~h:Pv]x:Ñso|)]©~ʏ|Ы}oć+o黮C/n>>NwhyFwu׾棖#s\,gƻ7?zƭ㌟\O{#~/ӿweW4yʎO/GWZ~n]Sp|o=e޵GWiDœ5qk}|q6=7bs8Opu?=dʟ~G;|5G#WcCرכi?9yߜ%kKq^J8=wu>lq3.TD~}~Z|ⱏ̓]oȗn!g#9}Lji+%W|GxZމt 7{m>̷њ'xw|}D:5 WG?\g簃Q@=#8[{򴸨}||(|!?__{ӫaT+&NK.8n /rc <?}௎btW7^?ݳ/ucg#yX|3+yGw}7T]A >8]!^xiv*~#s=x;>C׾{=?XD]yNF7eyOo9Sxq O#'wq}ggi"ȭg&N? N(yF; l,=sŸ]19Qz'GߣѫӌO=p|_y8'J/΂#u~}"Ww.ga_xc Ӄt?54;IR?v^oE/}B}pVxՎw>An/W:rp+rӮyh3.+y#+`|O}ϾgA6ONatudճ}zw}oP~}pA"V>MԮ49 ׾o~R_yճgf{VOw<];]}ξ.]<|㇟xb?{T;t7.4;'\>v3d}va #7eo=gȕ8zdPzs,W{z#~`ퟍޱӃO'X<$罍NGWV:3oS_W?;ɝoˇ虋_ lW6o~ktU]GA::Zv]>{eMؽS}?ʹ4(^"q)+6N8+֟<ՎF܉aK$p9I🏜o~]=kGt}XO ? /^$=W]%7>G<@;^?3ohQvWf<> <%>Aת(?g#pїʗއ[&|+!zeq8?//tmٟc晑'7~qS:8=}<9I'~u?rտygzOzif^z>zڸw[ڧJ^< ߂uogoM7oq]?Y/_?wOW^77wkwc`^0GGꀣ!feOtE*^xJi8g> |Y#xJ~C^(o(|~izͣ8ĕ^ {G>ͯu ܙ'+W ?fL>]y;~ͫ8f>y<~ӕGs}JX{eڅ=q$z^|۸MO\wZ{-x\Ǐ~wO_=z!kG%?ා_pS}w9{47ƽ3->2A ϛw}}#'S_~'w߀'%ɸ?W6~IXDޜ)q+4ƞ^9i4'>|]“y[{'~Ǔu+yէȅ,tU唼W<ɋ:Ӹp·3xBpeƳz5.t_ NE[;~oGfW<#S?œ~{tQs=~7t8!u筼ʙs8k~og_}>sUɹCz[ ~6\^[$~?=W'yK3~~h#zuI<=~{}~+q~3v:z 9gHzŖ(Ͻi:t^*/'Vg|~7ž'UgSF5ϻDظǟ噯ڧvM_g=%>ZwCOl~:}R^Ƈ'&>uXg1ry4{'coڱxfa7zcW~NW|Ǽ}z3_S>+Co ȹE>=WB?_ OgRB6>H?GP7S\]Wps滋B=&'龦{?_P_޴e/TnKٗ WȣKW=T993\S{{K.?qg)8§fO(=^}|1zy?#yHyxBE%k<׾?GdI=(V?\[/'_~}Sz| 9zt!9#{&o/nf֝'>?z`Яwsu<ׇn/wk#Q^_D|ωvgk/%k<'пzjv>/}?3=:K4OuM Σ+\gikϑܽ:;}~]!!5^\ ~n>7kq5?0,zE}~<𛰫/'3?^ ֕l_s pG{:<?ݺ6د߿J} .=7r3C_W7ܛne8;[?;GQƇ"Wz:C'?!YN}/E~_>\9ځ q k>VFqƮGE/hWT?gה/Guw=|7wJg`_Ky3мOzk1>pe\LɛPOS{_9W4ml>WS'1|Ht~kpY=g|b/98q<_~>~^a+N_~_y5аf!?_#Q||v}𻡣kW/9ckz-xCl5sx[Cgxbo5)?/|~-?7,_In5N㯎ȅA?{hO<;485n3>c|+Kn|?O:S/:Ze7^}@ja|c6캅~_]>||3>ia;+g6ܙz.w;z~i_W_みp5.=s߮'\}n~wWZ?>Wx$j֎._{8y~[̗|޻台e|>`@?߇ //膾yvzEj7ަK~y m}N}==.=, W_/Xz?_(_4q/=g=g|t>zDW>,_gDf4=xsk-/ό,*|}rT\e^yA   @!N26r;Ogq+o~I'7ɸU^^ҸooOg7xlx8yYWG^G}qp[y<9Ou </]4kKkò,S>DKk8~MOruI]_Mi͸uY'.>?ϸ:^OϷO Gw,qk7xpľwT+wVW1z{m(~ ^4Oo罖g=F̯JjW~D+{NkJU{O}Ow10ROX~Mx:o4v}y\=z_wwp:w/Wi^}TuWU=?u=Q/~ h~7O2!ϯN-_M;;dk+eWrVu-.wvGn#ę=/./{s[7g1;$Cn5y[z_?xW{i?^t_qe~&uǼSě#_dֵ=ۇ}zI_}_={Sk| O[2rOmm\v‹l~wuox/$oDK^}}< 7oi|}}MY~#+'Z>yz[_Wpu"?Ǟmo3;`Zgn/˼4rrsp0iv/nsvtyaƓgO;OvP8 WDnZA|ޟk;=swwn;.jwmy~>73yIU9Tÿ˙G=tr/"9Z;z5ү7]0Nة2_x0g㸌o>Gg$+yAK8y*v}hO> Suq9ۯä?Z?`Wr'uڷ/?뺴cnΧ{'VڏfOq7.d_Wÿop6&?e.6ϟp7bq$?rl;p/׳aܴRg 1r_pכ_~.o<I[x/= GSwؗi.ϧƟ7<.96˗O绲OǍo^i c8mvK^yyi/;mu~gWMf< 8_߿:Wbjvk߿ܱ z7IV<ٿ$u3+[u獗޿qTL< [SӿS=*\ܟ%/p<w)v)Ruu:[O]_pqU|G9gwp}Z<%/`^DOoܢ[_^3vdyfeogﺩOxrsqSw e]WI?!}-6.zs-g[_O_}dO'=~w+mYAgMGdpDO[=suj?K9ysy$Oxy{_Dvz~v-?qR/| qv߃)qxO_'HN~vx_yPr<&_Qz[C;ܓw [B}/h'>cIS^>n_~.+Ezm:{Ϥs{{)agrcgo>8}p'~v;oƛwYtoy3jJ?rGN~|qvwO\T!gϪpڭs)[U/N3|pxv[s?rSzC<<=|)-_[DXw“~hqwkW&έ8\W{~ӟS'U~}y%NqT،FNtjy㯙_8&~r6u4x v+qa3<z7_庭'c7{q򵸸y|Ww;ڟؙG=wS-p..zOp}s[ȼ/7w2$K,7o;Ik|_!~_/. ?Wӟ3~~xY"..I3DG=G=pf}ygy|SD޺O=7OurówB;gϚ/XKPWvᅪYKeasn)OgO;=wuѿEǓ\k7w_̭#W֝ξ/ ]V罔9y=U5ޯqIqk|WkS}m9_~$.><=֮}&/O K?"p?y~4|؏mpZ?q}x?Jɫ|=ۍC|'rB;|+:\3~p=\kv0~S\<*_ί6/ɸ' >aCk\i0;{7w\Cȟ/9=שּ`?r}+oO.8F[wuw~u|䰿O\"u縟NO|o@rٺ7^>cgv}Kδq[Ƈ_|󜭳x7 |= nͧy|qtܸzuˑ~9>0K{\؃~/3?~uvisۼ$'W~_w:?&o{~Ƌp~iq=s[o;;mGZY;> ߟٍߞ]>o;]yᩜއpgx:kz\]4Hnk'=o7u0/IN.'.ە|o7?~߃]88Ǐh߼'|~<~g?{W~=^#oW_8u={|w/{{|N:wǺoĵ]/qʇ_zrGI<~8=s̅:ϱtmt֍9OϗkO77UrN<|Cw"''SyWaCruv]u_blR^uDSNM}O~~g2uB~ֿz3~~YEF.M7ϻyxDѺ7&uj>.>թyǫK'zֻ1`={LzڙSi?DԽD=f=?PpպV^V}Rsbu~[o:7uGo7{IMtc~m?H]N\=M/~iŹzz]u|u׻Aڱv㮟:kz]'+yuvlӥhg}g\K1kî'LS:*ɞ^?#{'~,Q;WΘ;]}uFYWGwҬ?bV>gz_uK}=}#0wܶ?9oo0;p돮ڻ8~ w_Op$n>μki^{þ3y[:kپgGqƭw=`GW~O;3 =~ϛ:퓱w=(>*qί1zy_aO}t聾' γ>"nʗl@q3λaf;oAkg6p>gvgqYg{{3})nL?'[Gh?H|;z~4?]E~YGy}λe{G׏ߴӥcYtqq'Fsr|7%zd3|_2_Oquy$w˟У֯'os:ɽ)2KO'\W{vܘoxT<σw晱λ~|qrd~ko[Oڡ>/n'_%~j1ED^ؕ[׳7ߍ8>l?_̝$}MO8l~/w{b9D/zqxe<,]׭^wlf{~ ox^.j#y'~0q^?|\I>\>Żү+~ v/Gq==wOxD/iߣ9_쫣?|&W:~7؛<{l^|~/fW^D6X;ؑ'毿!y^=xbj?^H~3?^i+v}=s}G6x7}{{l)5Og~O8~}̿<~`篟{[<v_Nޜb|o-5~~WFk7xr=ByƏiyZ}7N';2~ϸq;Gg[;E>͗G3Z쑾󞘿_[z4C(˟i'/Ϸ~kwq̏z/:aw_zӞ}wOgV3^g]|:ߌOqD>2"?W;ڵv]G{z?2~ެG'eOW/<O߼~;>9y 8+v麋h;ɏoy3EN{%=!wko^?9pox8yO߱g[GFW8y}~>OLwoOfk}v8|+9|ܾߺgw8{~-H2}/\8=sG1N˻{}g~73#d~~lL61Y琿O._}?)}'kG&g+_6>3^#}8?<Or=ۧ:lz'ϭ~lg]`7ֿ/r0O8\>'ruKD9iuƓok{G"OE<fZ#?9փW#F3^Sqwr|hL{;=g/Ɂ$@Z '8bYMQ~>`oG3SA}_G5[,8R}YG/c?x}n<3c~7O_7 |E<耷Oߓ2ڷ~Þ~H}//pﺹ댋~ivu;ګVy\ǞpM7ES|_=GӃ3Q{G>;Ovpi^sfy}<~7Y$=4^G/FC5c6_~yOqʎCpkq՟Ox\͗OM |v֯lB|S{3<}io\mތd]oO]1~29|۽ۧ|oQy޾-ny_q^|nܥ}pO]y杜wݧ9?L yO?=;?ڿu ?uIw?qy6gqg%^sGyf\SN~8v?@>$@^z|zN0R;7 r_^8.~Sr>5}`<ɟ~wDviO]ȸG;׍c=|5_M_vjg7c^$?cO9“ӎ.;=x[}j8qA<~etד9>3yMv~1~N~'}IיִOc7:zo~+7[.U\o~9̯2n'r,^N8^]qS?wzxsg=û-^g#WȾ'Ԏf|?8[`|/yk\9C8׵ wݷh9Se=O?{Gxμ'y7v`W`Go驹yo+~[y5r?|hdA_Otd١/n/3q<5^\|s{_\JEWE\AyO?8_ţثOrG[iσ$p> \|o^3?7ɡ_{r>kOy5%Esxm=\^#xd.'##=6=]כ~S\qP?O?{Ok4~c׋'_Cަ'K8bJxR}Rٗ{̧<=~[}Pdw=|>9utEn=}H}5bķk/l~{3|O:H{OO>gq!)< гk[~s?vY}yύ?Y/?yZk]̃_̼+$wƅ~ظR(Y/ɹ~?=c kw3Dogzn[8;Zgqc?jٜqZ<{OߣN|&yUs~pn=Sye?^]ߟz.wh6oDX9\>5`\q]>?b:3+ډB] >\z3 _ #<}ۧ|uyyo3p-Uu]?.$iw'++YU=x1+u]+G-]o69Y&kOk~ȕ=/kWq5]ez8@Or~sDŽ׺ٗGه}_~!78_]k^:kiysjr/ _#0/LJ#AT<_q`n -Ůwa7wGz~` ;>3 F޵>j{7/ܷU]8q?nqsGXG([<~;<9/xቴ5~0O=>ȼ7ICxq#po8[~^_k|蛭^ޅ<57gOC7,v3N~Guuy8 ?wrn6_*ȽyX?]n^͛^_Y~1c7ӏg޷|z~O9^ӼSvЇxh̼u]Fͼ1ȓ|= /b?~/Ny^|د}O>u ~O|˯]~^|]ŏ!Ohi{:H~am]|U'~/rG~nqq.;㧛a>]8s_c+{:Eo?7kw`ų./7qu<|yw?"kmv/a^뜇jqݷW'xoG8٣&>'}>`کR|w߻SjSwz~>W#pw7 }j9^&~z?]ɉyټFZ<0O'gUIp_Q;cxܗzwXg\uX^`?O/E.;[f;u>su~_p/#WܼøDR^&ο e8ou=|U;7|Wşu{xwg{2ίyx7˸-V|fgz϶8oeO-O1~^^bx =ރ?/O+GNڿ'4yc_Tz߸z=>]O8oO+lOmک7߿\o^G<6i|Iawx0xSg:|7Y.~Ǘg>R{ƽ?:o3sO-} vYݧqu=Co#|oqqx;so(Gա'r}o?Ujoy~O-?"w쩑ߕ\IzvJ]{@6~"Y'_O8~6&O_=^8.J>o۸בk8oz'㯰3sOraq_!|~3N>ь|GC߭s= ~ǭcǃߵ8޼u~~ ]w/C~rIƗyO}g7ˏgg\yn>p,|zc؟sK)><9zabyN M|غ~ק=M댿vm?[1Kƿ9綗o/i4͍㻼=u'xqq;Cv<.hekȑ⣌GӞ6>v8'[#k7{:Gg{Ԟ#y [\{e\333?)7ÿ;Ӯ7OzW?o{<"g+GNҗ_[_f\O,_>O僿UϺQJٕ ?xyNx 2_Ɵуp_[?zbo_H|^qDG8<:q]>/OSTu e/΃ߺ3gGzt?>޻q^n#Í?c]*^O{̋ybG&;|GpKN+{Ss+}F_'DyYqqύc*/ةs_um>.7vjS:䡧~Ιc.W]E' >kfxuݾOs_$Bda39<}c/u'>n؏?{=/W/k/vYǏq>PvW<σ)vy<_CgTΏ8{8BxUSw|af}3g8<g:ջNk;^ﱉǟ."o7/p.?]p>чGw CG }q\=u48O^?.gͺC]߬Ol}ó<K#gF"uwqթ;|5λ<}=^{Gcw]v~mRa~x_Dn~^PċY'y#޴_~}|&kɽy6>O~qt=禿f&.w9Og8rtӍ }|~vC~7<8.;Gё^nԁ׿{1<|;7*~ΰq˯ogq$қ۾*r[o|v=L?kyf. OB>m|r'g۽|ƍώyw}1~_YwtaWy0:Cti=+⭓%9rWo=qyk6u4<~5j%nvE;ȳ8־Qv 87W{ēzkًCe5K؏{G-N|ã}v?gz;Ɖ/Eˌnj9u0ώ~~rC N k7= ,.T__䃞x#8{xh<;xn8-7O878>_'jW_\EOez\}q%:G[[w~h7r_ ^T=Gސ~B_Okō^_u?f nnA]{V/w',d/)}v5r~>| O|յ}ю};\On˸smN$KGy[7^q%_~Sߐ).au_|y!w|g Z/ԕ7ao6.r<~F/QK4!w'鵧~9_rK,>ۑ|+[oܿu}?4iߪP/rNv_s':\+<'\+.}}3I3歯?pMIC㧭Г_%^ّ/ y2N'vW?!W^ay֧3o~.^zs]ߺ]sTr?zwx o/O?x|.wv'W,ߺ7ewptOC#?MƟ9[:q=w? 81$xr#}%N#Ҿ}xRW~y<"~_^>/_ Wƫl"v_Cg׌!~/}fx?nZ!}o~z?yf~1;}\?'yGӵ|mq"|<;ooo$_~4[ϽMy8eR9^D|wjCb\~+W 9'_o)~#>cm_-fw7~JϮߨ 6j\/wn}l L?ONO=s'j/x?;Gp5[澮W{AY7?Ey#G{%I\GG=O5MGǿk1J_i}WnWou?D/X/O O/Ӎv_ Ξ7Iϳvy /k6@X5~o}6-9n-+=f;"Sw&^x;_DPikȍIwx5T~M}9^;o`7;AOvOG+|cn?U#?o̧9z08Ͼ6yoگ əN5~;ʮ7=`ܮ]Dpu`GN? >חÿ_i=7Wq|Ecqo<|wZ9Svy/>['coOxr ^^|4gt0Cϩpq?ﺬKs_\q9o!0/p柆Gܻ}:q=qS'7}x2a{{O?Ӭs&Q_1 u_؃?:G^!/bZ裎d|OqW?xeo;oZʎWQN<]<kum١5qpy&Hқڑi#mmO,׀/v5wѬxnCqz x1KrGWzľ+_q7#rMsGn7_I?y?#v7v/<^|Ǔp~ܬkں:k};q/'sj I/Owa_}F/“:=gN֛\gK }R?1u}A^˛}>;Sxώ}B/ܨ\;f~|SqWkP7h z8rɼ7_DO%]}6nշ>/9Zcg?|x៴| q9y~ˏy\>¼[OY;>og<g&'÷8|k'(c>{>nv1/OzfygǾ?q'wZOa;_џ'/߽{~ʸ/ȿᕌy!pI״u;t[>e{S8 .mK<.J_ok 7>^ʼnkN覞ծ:s9ᯩ#PWkGHެcKoGz!/rz\֛'OSO][>*|惗G\q[]'>6Y< 9ߣqϼ?1}[[4>Geyx~CtGzE~}Wԙpx﹟c+}wWO[:G9{-=>!nGϦ=pFO߳uKwxӬ;5Ocwxzj _C"\ybv×þys[^8C^ͮ'|n?O=gqf>ӿ3;{Yi!<}_Eh?`f.[״܉~(xӏ2c'=N=OǾ^s\>%W_~>f׍qXy˃5~g)y/3Y(~<|G_:։<?,v>yQϰqg?{c\̼#?;{-nxp׸qѣ)ENCף%Y>=?ހ/xٸ~ƣv,z}vدONo48N} y>ȍ|G7'#).w+hj;'9W/=w?vJ3ڱyOO77zT<~X9/{r&2pů,.م->cg>ԧ'?=;Oxﺿe Dtn킋WO~/yr$~[c3뗬[gWe^3<[^nFI[y揙3v>8h{']mn&o׺"=+̧Fs<|r_1<-n>d#l6^m~ۃ[~9;Ǩ<%^<u]*y0qUv~aW;y} c~6NqgWȅֽ`7]qc<`ɿyҏq[ ׾y ڡ͏ys5GT\r7c'O#\OgмW>vPuw'^WoG>é:[ڱ[Oω{n4o{OS?W%>,Oˣgsu׮+py:ߩxZ]*sOO_ wxzos*rIG|rq^q+/;\9n]̿<6pw*93;_qYa?8c:Sr]5Nߗw~w?x]~o>~sn w_6=Hg:M.#=__=.ܼ>-Wu(ޮwv=7z8z^U^}^]s^[o1O?J{qaŸgq:?yNӣ{̙/Nsٳ~95|<ut+hݿ9ryzcOȭs(>^MM_<۲s?T 6^k#;9]v˙^בOw\޽|>lc '}{yk'z u|{+S'7{q,/>y>?F{>]>{~'vZ;OpS9/?3v3r>}}_5Uz=ϗ/{qf"7_uHic=ߛEN4pO{xޓa\oG;E ۟Q_n{V'hx-\IϪ~d~|8 0:׃]5|a9!3>M]II^|6Ʒk/Ik)!~ ?}F?q=#Icqm^T2~~^ݿʃȡy]O);;??^^? Wria<=ߺ_!'/~&MGSDžϏ|lFhpz\' wĮ?i~_Bߒ[kzy-YO}씸Mו獃z/ux?qGʸ𤎌ܬ|w#9o3WơͿvٟzamg鹟#??zyQ m}?8{I?~l@EIϮdM;ɽ_~WOo'_a֎3;Avq8u\Իgng\n<# Oc#_;AÑ#=-}_|z8 ?}`ƃ/A]˯ێ2~7_ x]Cc_v?G7Kz|?4z#y8e׎guu/xn8-~'k恿xlGѴo̎WOO;n}޷uC{x~ ='䋽X[N v↽=ϡW֎/ȩ~#p^;W{.zfGO; у~ G|I#I{'}v[߭n`^M;^>EY/8W;8Eώ_KoO_cW|jcSkkhٙi~;s]y o^yc]j?i~3Ǎ;{;6.494owz>`_٧a#8ov׼/⤉v6x\˭/϶m~/~۸ȥWvEL/~߶㳍KӞN x oo]xrw}' ^'~6yYq׏`pD7SG4W}n:yq.=ÜG9/n+o~BO'vj_3? /x:O밗7k|~kOQ|SR'/r4nrZg%aqvW׳xW{ɧz"rʯgz/jЍ+}E9:Dz(_)t?=8m[OD~k<~W{t{?p(8fY|B GG 8Dȵ쎺L9y0i7-of}Սt7?g3x-WU;O]{xjx7~ y[ރ~֓DqG^̸^6n^7Ǿ:?)q}?|a&{yx-n{f /lܿzҞ]DϳSOdsyKs6/vG8z܋''c'~+ztG=nqmO^m~lm. cO譵7hs=8=WuѶ{g~q0H.x[>bߛ7 w' Gk}y6r;]LJ~~h}c|jyzl22u{G9~~l>G'7:ݼ`?5S܉kge8sT Oͥ}lQyy:;~^d|~|<|~i'{ֺȏ{<5}۸`ӎ~tzW{8t_s?~|֞w9^[n\& Gڷ3gcZ?GGXן!kOˏͧl[;֯u'W<|l|uW=Cg<'[ _"| 7}<@|las~c/\t3؛;g48=u}#8[l?G/Lyvi/yaxz/<{>A/G$g'=O{_Wg?7ÿwu/2xx=Gv{c7_dzkzWÿsYߧe|[}(Jɥ}[_xÿ{yWr|S/}?}wg|)1z;q<=qz_}놇8_|ϓ<7w8=5pޕm%ޟw'}wv oy㽍]wz/Y]ɏǽI?o"N;ks=dz<ڵrt>~z~ pr|O?~?>gvrygcMzw񒼯]x\;'ϻw9^׾o3?Ͻ{_Z9:c +>޿K;Anp wxJ}/>Qoyw}=oF@?Kk_|yWS7ԣowÿxg߿{RϨ}?O]?w~U7ÛYn=[Y{/ чw}<Ա\kH_Ss#Y"^ulղJYGwN=o/>N>]w oUj?V[_v='(]?uA~ձӿWpTJ/z.zmQmZWޟyz*~Wߓ]GN?Owm?1 y]?Һ]?Gyzax O6v]󎻣~|h=@:Su>[:1Թ_}zLx>|/mͿAw:>g{qG/gF̯wGvzNw>Ãz:Ňquau>{k7 oe_xxͷ9xxy xODZkE~>]e<`땢u]';ؗyn4om7UhO_ü_,?.zn||X/d#qϝ}fSo$麱]BW/En諮}|׏^z.oZ.[g<~wo!GgT?Q NvFC#g=_y<_f/~Y9ߗx?#m7{en qd7y+~Nx(WDlLroՃOc}-uP<a=Mt{Q􈸉~6ϝOre>s~:Şzǜ_< O?~y)\7^jm]?x?z?#+ƭ8q~wqc|z_?z)n<kpX(8u]g;Ǔf}g_\yrΗy\O''y&˞DW#=\Gx'x,f<{?<;/ϵc~[Z=cj$_+t?:ӫܫtכ|)Ǻgq|)z~at^׾Ԟ 79W?}re+f*gC+oe_W`Y=mW6?|dk? _kyς'?^ W}GzxinₓKNreɱ~[/>9+yC҃޷Gx[8lTiy׋Iy>7OMFO}/n_~̻a~=W<ʯ<~ۣߣ*['y>d^+bVu^_gᒽ>0w/&~oT\|x%<(~ O Dp|<$:\?Ws7K?qsX/x?7~=8{wvs?y|ںz}[?y-/Pg&ϙvKY{/q/=YGq>z'CSxǧQkڥ|g~yxANE<Ŀxŷ<W ?n /m&<ۍf+wإ'c+i<|z/ɧ'NUg82>[яW?+ewPv\vf́g,>j׾ $/'?N\Cv%G Q5o[pj$Q >oes?8SO gcO+/?ō?W|'p>8qWC]}zT<]?/OcI~HA/"cY,O$`/8>}1o/u>i_Ook , Fِ}疗Lw~kɺSC/!څ?5uWrxw7_o| t[t-į?D~ġAGԿ˃ӧO<mPsu4q@To̾I̯OʣçPg7r}p^O}"p[?/gg~7>8_S}~\m?gxzhKX!,_N^H|8?}Cl>ܴ~`x޷>w7^9'=Oק=qx z>W7[Nѧƍ<}onOʮgR^ Y,ORVg O%<ة9#Fѫ# @8>(ۧxԍ7iJ] [w#e9;/3yOco?uջٺ~{s[}-w-'̓Om|ȧ8xg~w[4)f<9ͷקV6/g>> r5_K֯ħ8Ni;Oz?A6o৔G?6~\R?ߺ?w=|~iǓeWf˒xŸ"Rݗ!z|.],ߋ߿qŁu|3Eo_k>#X<SGvLF{^oBZ~9&xt<]䚾Uϸu}OC?_~}EOOq_]֯ ص'8q'(~Oױ~f_e}غ4r =U߮_ao&?uF9m?x)8OC8bx6O ?\<r^Kݾ8\q`O=/aO]'?X]_W?I8j𪇼P|[Яs|W]]cΕgW׿q!x u /\Y/B[;qw?U|(nSqxZr#΂O{~$vaA,i>K?$Nؽ/;u`sX_<#.VںzcJ W(oȏۣ߇[~g/~R=eڵI]4\݌xC|P=kib_DžV/Z_J|Su"kWUȏ/?Vy}!޹d6^ܵxOՍ7/nS^ո^:$|xV}䇞ܺ~7?9K)^9iߚ}〟kGMl?:9eX^?gvq>u=y$ϴg?<2N~Z=m^qS [O05ΈēxSǎOgy3]f*pj}PG\upZ߻w GÛ/p|sbn|򻫯j'\ѺP Zߺ?zS8qqZ9}Gvauq}|mbY]{y;FQL]mGс`'ox7b/y1|8=<gi../O,3Z}39/~ Ox'ow_ȩx3gf/v:ڽc<WYVW:_>C;o˗_םqS=ONy6#m?ŏ;|[\Yp?>G/_d8<4<}wv\:wI}/#ܮ߬<Ћ#Y?ky q7.ީ3?<;_;gٺ鴣K~_){[1C h]<uӮ>':=O~?SO:|_'X^Ti_qԱߙ}C_Nm c~R%$N෬=Z<W^iճWgu?3rsIOD/kv}遯^]:q9n]'q?vK{Hc{ȿz/W[76!o2~gxs/L[[mߌq#9w@VE~/_[7y7+wu'Sw]x;_'7}ϕ u}/5r\?θk?e`s+nv}菬-kq)`<v}?8 7qc h:0׳>L~%,~YˏJ>>m)]ow)<7x(~Ͼd8Cʏ^jw^d\?}B俿z\sƯ:`Ō^[B'v٩>2Fr;s~jY;KA#2ޛW1cuկMgczcusg$/rf~.8WY WYݸNoAY3>S{;Yм'? 'kaя#\k>3<9o5s1u|á|47}fz/,?:I]r /[@Mݝ8`5~]1RBѓi~87?KQ "gX7tbs ?=umxUC<'0/_?Z eʏǓNfC-9 Rs< Okd޶>'ߝiC#}8_#z~3O?ts_rL~cvYvM>y;\؏g7~W?!x`wٗ#_"7/é+׮=#>X#/zzO ^\ב^C^|{C>W7קNn-|}sk^iœA#b2O>{ٙ[)~<)xjwslIp&nOAN]̫M\~m]_QOvz g _vKxq*Oq^3>*<'\usy qp8|o^W^k=}}|iIƮl~^ ~?O[縎~y'qO/o-?ň}[uO< _= 8q'<&%ϟ`~8~Iͣ'_ӿCݭ6zDGܩͺ+qq}o.?PGn'}^8Ov:]+7!`[u_ x0xM];],?UԺ8֋>FzEyzS ϛc7q{z:`$uA<#<>'xꏓjuߚj܏^߼I׃'n~pYiSO<>4N껮߆_SvIw=2pȕ+_f]ߏC?G;mxɳI_ėO6//ȳ:'qbu%wtOOyOsn4t3Q&V uSo'l]/g/t]OCN]⮷캖'ch k#^Ӟ[< ?\{9~1+< lܷxG<>Oj+rbɏ?9vO/g%G =1?_X>O_kۧuh~@k6+'~$<џ]>qY<'N䯸ûhGi|d`]qdr/.;ly|oxc#E>x:;s~鷸||hCI?޺)r{y#FoScG/{jogǬ>I'OE~ r+\v~Y[~3?>7k_{b"{osyl^>U/ﳾIͫåu1`>kl~vwæwɡ#}/< $z_8̏7|sc޺~qe<'y iI/r..~|ʽ)mw7f\OtUw虮_ʼ~_^>~z?q_OO8}^xVk59aׯ5nO'^ؼC7 =.&2/~'7|5_:u:YG|3vRi['{^2ثYuu78hypv;ˏzK,=aoWjݭ`o OX|> T9}ŷ2~H~<~opwڿO~;z.1_>q?;]~_}QK|=g|;WyMWǼáx=S-.\>#JWݒzS]zYCvyQΩu;\wzO|:!j+p'y竣?[G͗#mtS~Q'з/D^{YdžcF2}9?_}*W_??!=pߗ׬]}Iz_2~QT/.~wַWi5q8#[R~GAyJz'b_}oyNӰ>[gVH."/D>ɽqQ:ҍGgK~!?{8!";=D~އoS'['B4?Dƽ#f#]_6&+N{'zf.q;̇8yԺOz.";[z3ZO{Uxw߭w_37zݢ_wͳkdQu(yu4|ݘ!GjZ^>zeė򠛟1 q>Qu"L.Gɹx ƕEZNg3wq9g#'敾ƿ?>={z0+⧩&k>?oW1rx{S?;9wݠ~s.%OߛF2:"y`%8sS7<|oY);/' OǸ+} ]޼L>07uOxU^2^XgozD<4S5qծ7OT%Dž .6 CyA>v}Cκ޺?W/9vNScc3}k;u%pǿ矘|'~\|0=þ=JyAvM}1@ޟ;%o#?ů3NRS+_}i)(~:ʴnDNյ:)u[óSpX4yOc~bGvL~w~GY\yxoY%B^ٿ/~[S@>{_N~ɓy}n}{?twͣW)#ܺ=3[Io?-xJrR{&n8Kʟan'O?_`=fuBDKNŗ܍3%y&| i=e7cۚC_|Z'.Wӷ?9y)iğ˻OoDw}~"Co[oOmV >c_ũ: MUy&'~"[ϧ/~罓M<ݟ{g%̎?_Ϗ2ӑ}si>m%Ϻ?vηx0 j?{J.ɟ_ïf_RI?]+<\݃q$?Qŵn5Gw9&^7o~xsZ7um1.7af$/$#zuyܷn?o&ᙟaEq@+bQon#oƞ9xvIݑ]/~+QG%g ֕sp_q/LO%<|6c[/dǿ}K# 7f n}?Jky98cxSy%atW>yUI?'r|>oO^7_=Xѯ9]_G'<\m|Og[IVOOz8F y#_=ӫfG|uJ~P|+o;k<3o_u􄺅gw jӜY^3I{vx 9q ?yA4X!8]i#L}\=cr5oOa軵ϮekooO_}߲u凌;sj]=DC5!O7CpHn=>LJ]]{s'謹×:2q97}?0nHև+b7-w|,>CXvSkw}W2*?~v&ygN^+fq4DNyzN>?\MvOF?.w6 .%vmS];y!ơ~PG{c/<{SUxíW$^4FnLoԝn\v_{- W{oj?<% W˗Z?y[u[h|#W19o71!~Vgy||StC>3v~͟qfoȧcfǯz3~T_O Xcz7~Yp7I\͏_\\M]=gF߭ӈQg!NsSQ}&_p~}cʬj|={]qX>v%^UMq\|_s g؅!L<4;~'?Fi1,_>as(182/''?ȑ}7/q~KyߌWqϺF<?# zGKs٧OԸjO;3CoG>qڟnIp!9S)~}vAv/(_'j~}5Z~/Y|7xj-yD/ǐUo i?MWi/?O<ůi]0Y~v O=C ?3svzW'V|$ϳ~`F. unuٟ"?A~:.kSZwzدl=G䅴~p /:-ō19O]iqE߰x^oK)Oxbv Nw׸gޫm^/.~a'Pc#x|{f쫍{vp뤵FnYA?pݺf6|L3m>SnNs8NS};rv ?8>.R ?7L|T>q==몃u~}Տ޽zSw\c_'Cq|F}IVv/P_/q=wt?q/ 773~ u?#W}_[Xyaw+p0aϮ(bo]A9_rO;=W<##"o?/!u:?Lo?O/J5ߑOozW_q43Tn+=[G9Q~ߌ_f9gv>q7N~|nUo:͇+<_ϛiOxO\U',&ST}'5y$nQ [O##>߸bq+&{Sy /1<3hGv'yak^yʍnw]x Oi#苣;[^ݑ])CueO0OZ<G}ȋ}׈wE3u[o^?qyY$_b?HMO/ɫ}[G:ݶsG|D\5RGj\uc@?fWS'{ xuSx:ASvx}>( c䖝:Ԏy7|T\__}<6v[6ux ('fW}b_}Yz}y4<-߹<=F<8IS'9߽W9uS|2>_$>k9Z6y`%?~%p+{wzrkϸ8EGo]0>Wr*.AQGڼ{'u[2uMqu&ݼxy/U}: {cӵ7rgH#9UD=%>{iL|!vy?gϴgotk$Vt߉o'(g]ߚ:YV>Dm}N{lxwqw>ҿ9þ:[Ȼ/)?,gm1Fom\=c;>}nQosRDO]gqs}?Uf_S8cqOٷ"NpT}vą#GG~T G\En^?Q@;SCkcϞG7u o|֟q<ٮ*0u>2)y=&^)3Hp)?d,cE|Wx^\Y'A^EO'?=yaƝ&g[>'yip]Y☌cMC[߮[>`-&?~ ;{ޭ}Oǘ/| c?;_>7^|ytvy@> Ͽȧ[#T~P'}|צAh"7? k}?7/7d~E%8zόhzѷW/Y>m*_ W_/<}"+~?9r|n}(ziq_t}GzZ4.yykq(=qc~@xo f7^yY/]Ygӧ?ϼ/B}W]!.bվ/7|E'/|!I?ޖ_? WQT][otf| ȅ7},8*"D<[ume /lW1w zF#q[S:Y{7מA.o;3u=?I#x9<#?w[>á#5?ym{_{l|'nGt-.HN}٧/E_[ᙍ3=+jJ?6ջxYP?p=רI}'8cgbOo0xZy~_㼼;}&Ngw$ı=6 ;ȭq]?{k'Ŀf1v~c[o/LAx/l۩ ψoOB~'pOӗ _PYD8_N\m]ZҎG)bw}*YR9.xe&O2vKwTzѷwMT!x[7>~껴z0W7cgr : u:O/|O낍As?'Ǟ/\Cq]=<[~z(`;LD=nUlC?_K]OTo}Z?;庮?MKy*o}Zo|k'9t];3?x¶x#Ӿލ:G">7'~Ocփx_W9 ={T2#Ts[ =u]'G/_7h=uOGco-r:zF%o]& *Qcn?{c:vP}֧.O;ںʭ^ pNN_3,0^XY#?8v Aޗ׍ Yprn@䕬K7\+c~Q~09eכ ħ~˅?ߞ8+gNj9/H(O䯿q|[r_"Cnኟp4W;3r|'~9ro~y zMu}Eg\Iо.S̷ʹu_GXxr>E'rÇѯߌi'bAu{uG\FUe8;ѭ=GGΒ$Kc?> z|xǸ?gW pǯG#?Sv~yq{O9OiG~p.G͋f.o\OwWϾpFK.fʻ!}7^W|f+O997xXg[G |x'W>~" _6"dԣC=b^^]i=~v??T Wlɼu޵[kvwM+'ܟ@;+S}'dz pԇv~*#7Snv}3axϙ䄝{~ir?Ǒ:'?cx' /O$/%ӈÇo?#ϙg}|^n qzŵu.P$OPTW/6_z|M#~B<}ߍ\zz_}'{Y}u~>ܺ#6~#>_#Q%<s?O8nO:;/slt_vˑ}g=AɮWNoG[򎓯8]'9^?Sε|m'4Q'>-<<8SLO<#Z2f|'H^]e=mfQ9]BGWwRwb3"kgG׿`yl}~L_9z<<.>?&AwP6hya{ħCM\^^=!?pKc)oaO]!kHg̿7)9~sT"_nogn䏽yx6{c<'P=}'d|ƧO<Ηr|0$z&'x _&^ <:>q5>KކO yorc]:㠟x7j}}Kxq|?Qm>5[E z\9_|x̏z?񟌣7:0?ran0ro1cӎO#5yGPjB9_M~&4*T=Gi;Osz-n.NW;~F;;^9WΛrCoo8^|]Wyy<^/\?<|9Lܜ ]Wt\}O]۞ixgofo ~~?q{|x׾qu[޿K;An/ggcC|}o~pu߬u8]D_u)sYݎSe?H*"G]:Oٺw?u='zO7;l.٭˘x3'q~n~Y#7;//OSG|k=d]Zc݈ZYRy::_:SNA#okzԭS_u2TէZwdzԭm`Ǿ#S޺z7}}V?t2}u苮sAz\՟YdxauS~"'\}9y^yU/ g\?w:ry|&.}wy{}v|Q׮RW{{ޥu2]פ=T?^^ޣw݁}5ֵ_ُ:rWO;sk}qܺ]ߵm)l=ڋYyX{`rAv] 9¬K%ϻ.tٸu\{$g]s.Cw?㧟A^2n ~օ:]?d|y_>?_XJOY˟u7:>7q5wZOWz!zg;7c݈տ3>GqkǑ;`=]ӌ!]ϻw=zzuW]/c#2__ϳ~޼#ͮc#8^=3v>\g\ٿD;.cƻ4jpA?6}_\x TzkKx:'Nw ̻'qy>{o[ cWa_#g{x`??zl~~x=ar,>Wi|_}c3e oi}/o+׻zWzy)<]эr~G;|K䋾5dΟ|qXгkG'ݾωW>g.i ^DF]:p5‹Krc;ijp*N›oOxWnm~g;=Ovr`\was8fħg>%~}WNz _rXON9mShO}3}gދnE]_qGɱvE<}< #O;n{;OkϪGO:?د݇+5_K?Hd_+vWnܳ#*%ܬ_12a}[ټ{衧q8Z< z8'8|gءکW /OÑy>-߾/7~|78'/78Oqa_j7*7ڥ3;qIоG,/qgc.N~/O O]ϾDG|E;+q_{=znyw8Owq'ԯ >6]h_.yAyvza5}A./]=5~ց֎ڗ+8;{BLU}e'¿*\zO>^Ϗ5D޳co88(zܯ xu~>ONB v+)?ώ|._ Wp?~*y?{z =u./ޛk:OW)O7_{%ȼkr?sOz88_lQ콈䁿Oϙ/+=qVLtr%9[[]{ˇv7G6;`SONWWO_?ŴKOWa\M.ciG롃;7;IGvg6^4͏..'<O]~g;[__5~r>ܑ}?{yz5;o|C*]'7߫n''Y[/i@v~0foHO?n>9#_o򗭇 GϋZye=V כqe~<:ܲ'#֯ËqkOs~ƃ!םCk2n!G9μʼgrCn'7~{^;}+Y"\Yq/x!7y6{ON͸Oq]j~6~P!gx[_|Hn^ϼOSd\6tO7?O믑o#w67x>!wi['Axגo#Rc./q>Q7rkKʓ{M#rS#֟^S<-O1'xi?yӾ'owwiЛp>]1TrO]ָ%x}sqp6Z<8Ύh3<1Z Up2xw~Lobċ|yky##q~{8yҷ;:y1 OurxxZ><#wt/m}K×~ӓ G^_ž7O?k*[^ɾkyˡ줮}3 E|!s.x Gk'Z_5*wy3. w6~ko7B "_>vx7n5Y_dt>{GO9~_!n/kqwvC oȎyelĽvQ9:-V<`-DN_{G诸woTؼ߿7<]yW$}^|Ru[/!qy} /Sݑi?Oaϑ\Wf\.ycTOy{ONg{z\ߺ~UJ;w|z/O<?ޣix6]_O9~ƥq3OPwO[,_s<2 O-ޙ]l<.q_8;ovgק;"CiW\U{4ZoFSop%~3|fEƓ|kS@zܵk y'CzqF~Л)y]+"GɮcWzgHG~Vű8h֍i۷gӫh]7O֡nQkQ֓,^s~UjuMl]{Vof[\~fu;xط7_<;ڿza0 cwg;#rw5NX>7Ѯ,uS;rǎ|z~`Nx}[^~!0w]Yph>]fP_i7?Q}O7O7S)vCy?yͣT0|iiS~a ?Eg2CC3\{?TK~o>g?/'u ֟o7g;ڹ--<|/jy<߼X+D͛K]`pKn;u>Hqyy/TnGruړ5?6-Wh?9 }𽳮3m}ɻ<fyO7>zq8u*rϞ_v[|* g[nSvݾt^xMu>yĩ7[k*+;o>wCylv_07ljjNx7naT{6ysM<78cg_Gh~ǯZcW{w'?kq OWv?z_yþmk#~(y-zUy='?::9o7Ɓ8T>e7<͎+7[?0/^?£un?gˑ?E_x|8{q2CC|ٺW7 [>vk؅Sg/"./:K=3_oĩ/Ѹt]yy>;Sa?W) \~bf߾LxU5q/rи ynjKoo5~7>8';NԿC)r8kZz~zzy~G>eKG׿!?ԏNC}pNww#Gѳ+7qΕ7Ǜ n*ovm_wrO֛|>!__.8ƏտC\?G‹&w%ra#01ok\ 91W`>+?|cl?c̺y)EӃWo?_)=k} OS]w7x⏄,?>|zpgE,̛8$Oa'g<8e̷~7 _˷Վo~b'[<2ڋW\}:S_w??u-?x3^^%5j3.αc-w'/T9:iY ~"'gq5yq__oa%g7 Y}K_GoS|_ȿ>r[ߐѭ\Ńo8stY)ϧ秃g^箧ʾTOѣK>U }S?{ݗ&T |'~cg#d3v3cF߯ީKxQ)ďo&rd<ϸz摚ںTi;-_gى͏ˈ-iyɇ;}4p=<_O_C1~<O?}P-JϽ;?ϋ'Ga}aƟ[ws^|aq$,o/O|rObb#ZL]Hyq:~Anhyj~>f;^c GɑxG]??'4Lz}ٿ;Ӽ_C>w}Cqxty%ϓOFoğX>䎟~]d]G{qw< Gǩ2N _ؓ.֧O??> ",r9X^Y>>Nx#_pltxJ)9bj3|auw[7<<8̼oX[=[xGB"b[>]7\?~TSW}ټA?d|ȡu?v/nm.Ї'|p-_ OSrϡ7躍3qPv+R+y~+rN?,\hO[<A}y3ow~>>,<|͋~ #A}aI/ Yp/!;SCN=G+6M^j?+X(O uoO|)tNij3W?:ۓuwj_Nԉ[>?4n9_\/pN>/9}8Y~wl~ 7q/Ү_dc|[#j"?ϯz}_́xɸ6n"Wݗ=xX{ڣC<7G(WsS[D v#݇ ǭ]3N/~bQqࡎdܑ'8`'%<3c[}o?k^@q_I\a>5O:y3/CC"¿?uSqVqӏ,κI>1rǃrr'}{zobuMZ>}~qzw}=+-ݯ {;z^;S쿷< i-o?k3=g .O '<#G3}zʫM'9q9~|~;Kczƕ<҃ߞ[wd5~O;{ *L] #s_x}<`{%|+ڼwCLͱf7;yAGyp|snG. _"7Nnֺ<}m%O?Sg}ޯX]6zzpK63n}hϬ_m>8>?@h]J}5|m&x }exY[ÿ<?{0)/,gF8zOyolw4x~#˼7xY=;KO|Ogjg6%o+k=꛱ƳǬz}?uPW=1mS{'`&Oyu?mk} O×ψ-9gy-{xz3nMRo_=i''q٧#o;ހ]]FFIx?'.&9u{@ nݗ_ _<==qX#}e8|Esqα-Giw]?N><W{y)|Û1]~gs6~1f+ϧ(Y{uN6hnt!RBoO㍫?OsSP7O'/]0aw[f?upiD.U?xbqqi oZvV/}[&Żb.mp<zM\rMjwr#+q5]4''z`M~|ߋ9Ӽe񴼗|0g+י! ySyۻr.{փ8O_B#xڿ|1kcw]|uPO>&q|. ^<"ׅ{c 9Ռqwz}vx v?d i1fMw+{Qwz;O]v]܊:i8+G<`o:~tӎڡw3]g5{Q|Qğͧ8WWw^}2>ziڧO5~B?ڋcտqWv_p Oig_{u4n>#Ď'M=v}UxՎC]WlY}o5rnʇg卵S/#;9q;N~+'O/ksp'ovyZx O,7~~>/@y~Ny;yd[KՎſo/W3|Og0Wewگ8qڱæ\z@]]i'vX?cףj'.7_'?mL2o.ލ7loG_ʿ/|ƥ<mu>ll@/[_l<?`6]4q-.Iyz_L~g]7?ʛ}ϩ}w'~zTށYOoO+/ }nv^WpxJ?γq+<{'(yIV>nbe(ܑiPzS|m\u{ˇv\:gVBb>O;ngv_ǝcvu_zߡgv /ƿ6Ҽktn{8Ti/K1vpʉ8g~]/ȏy^?{Nm0^QL#|4>ss=<~7Yy-q<^/=_ܹ^.j?Ɠ]&Gq}g\=Gjxv?K_[@_t2~)%#?xS]~.#pUvoœԗ;7{/z~'㬾Fx|{-CW>^mY%/~=! $O<~.i~b?9ڳo~uS#~|/Tf^̓O6>=*\oR&ޛ]}3r߳ލGÍ13+9vY=?ݚT.o*/xz؉dGۺR_vd5签߸-NA?{|&?1y9o~z=MIĿ{";n:q0O/u̇zYOKaxn?eE<3Kw>Ȼ 1mhS9q=>ǶjpoΏ|44u^M|3p̏#Mi{Mɻ >E\iգyȏ~wx2~/8>b1;4Ã+=GՎ~3d~3#itV<8}Ek7>qa:©gW];Dy;.-qe>kN)ݛ<ءަ][k:|OO}KS>|}^އ}Gn]>^w?)Y>vo>qә^]"JGz<3E^ ?Ӭ#,v٣?/uY*Kݿbxۼ$>z"/߸~['G>y'?`@y3I\a`xm|xV!K;<3~`?Oc8's!&-ކh\%,1yoݭ<"g@8eCy-^z)|~Nq}>Yk<=YxxG:]~ ~sgZ/6yףLⱽ;ƯGSz /*8~A&?Eξ1Nlj;yrza$zv>7;y'|aO^o&gK8>o{q/o73r㗸?uGGm1Iz< E>֏]FqKH{zo>a 7_{7=ZtQӞwp߻׾d^jFR<ϓ֮?񻖟:`8?[o ?jyŗWox0 |m=þ0󆟱yO\x#QnS4^>@Z?=n<C=DoZv?gy'N]_}|?sx e;Ϗ4[2=$=dHLwu**TE !c4`؍g'0lwL~H7R( ƿֽ{k]yŞi性Ӯ?>c\Wݷzla]U֞Þָ8Cp}?Ĺ?f>tܵ.w;SOg6 ƞZ|ؿӍ?6t!w_ź>n\zџw4_ē_z,|<׮_N}|=t৙?vԁM? |O<ȿ+nx)#6Ns/xsgct]o=yԵo>R[7Ok5\Y`q5X%xO>I<_~c?yup/tht诟i-χoةwR}sz''%Oȡ~T:qqݸJ OGԹ+(N~Ö}y_GՏlgIc_n}Kr?vy>o+I[xb./o_>Gz3d6+^q _]8CmI#[/noGh}j]u?byÏ5eߛxaï_fYnO-׌|λ>< ,>v\Ư>P'qvг&v]}_(Nmsroa:qA~-6t} ~:ޞ>WWOWS9wG<ߠx17ngZm(&.zx\+pJz}-Zo]qrl/K<`)zݖWpcW9~}|UDou~Ks|OWWs%U<'~{{{~ɧ&;.`O\ŕMoN{v&yˮ;MqqGxZM]Cq]h{7ŕ /]j+nqop-/xO7ws8>DL5`Ϲ~3 !|3o|$X%9w'ߍp}XjhœϩOZ8O}u_?7{g?Go|-j\w_u*p$غ y`>+Wz5}=/Ny~$:׹=T OI֏OG%=OR\?hnb~ 1O滺ΰyk+MϯxcsxZoou#wqA nVϤ>H;qCzY<ӦSv=v?k}3m]||GS]޳;}K6_z x̳z;qJ9ra͗e\su]s1-߆~yI)W$uF?y|cO ?!>xxogz,XUP7;^n5y/>/ĺx+OkM#5^GW~m{IQG4G#~|0^xGϽW6&ďr6F7ީE]Y^8Ћ7\95.ɷ>*%r$'6>Ύ:ƿ[h۳WT~_=~vo^n?}~79~vwƣut]{/|'7-cGOĵN?ydFk!>zw_;ؙO?OVtG?%^E^m?W7{sk=_Ǎ'pu֭_>;S۟=:~O[$~ms0^qZw'7@}fay`w;39m>ħtg{߅x_n"鵡7nF>n\wbyO~G=[~| Rcx.~kc!;^;V~o'|/g"zs{>)~"|9뿳ߩ?ߺ).#n>:Óɻ.?;8'7f^8On[C_7ż_|B|Ρ>9~]tv7~׮'ٿgu/q_LpGÏ\ב?2k7[qyqˋy~{>-\==׆ĵE.?;o\\]?qI|?6*..ѣ[;QsN㫍oώ:2xn]7;lXou'q;%qkx]ZuG{''Qv&>*ϡmK#z]_b/pG|Z=\ ' Nx8ң~kfh'+ʧ3?+As_I_!qW OC֧՟o~NPD?1emi~yG0_s O3OsD/']'i|.R;P؁ǓO]DN8!9כgb½73{j{K~$=wpJ^O|xGlSqŰi{.'x '~~s[w28Z?9H/<;_M>Տ[I|[١?n/wap8aϵj>l=Bp>t#q7x2?ӏqy^|/؛g敽Q{~3<W4v ;]'ύ>\DF\P8Y1||OI>W~*;_v;v{?/t}?g~%Aע뿌=A.'/.筟l\ܨtGg{,yQ '߸؇0<>&ONOsGy@rzA@o"]7Yg\ 8z[y!=W|txo',Yb[xȩs}g_7cOoKX`/f>O`?K}t)N=< aIC3nz_}8mOar훮sep_3pܼ/WOG5x(|ՑGoI~{$???<[gCy~g<}QOw'o$buour ~~g _4߳z~wz4uο=~1O 03qgO75W~+q5 WG\O<VN?u77]߯^?Chzd963wp.ƽtH];ݺ]ӷޣPìO9d޲5G'>pBO}+ػp_/?b=7/{QT}^]z}~P?y>ߐp s!C1\zFi#vݷv\?t0 |GAx\<&vAu>e?R_go>]Ӹ3x/?|u }#=k79p?[Yk?ėLJN/Ͽ:ro詾V\ٸuw$oC۟]{k^|^W8{:y>dfG۵ ʼn]/oy?&Eo79ȱ˹3/Uohz '{+M`}}ɟ߸и,?%'wow Gc8q?'5/|n\?|jg%mS[>(Nm^f`V^m㽃?r0O[sݸq\xO|OO^Ŀt gt:_ͼpnz%!~;82?y<|.眶vsЙ^j#7O_q;;3oP}ɿy[On}W\ދ__珼Ɵ0/ns_ӿ{iyvƎ;؇g衶xj7 6rdƾ2gu6/M}Zq7.v >7fg9N-^77g~8;VoނzG}Z=1gx;].ߺ~U~%=9/tՉ uv^̫16z=q9{8CjW,i~2oȯV_gx|^?f춓3; +/쳑.\85?>=?g+B#Gn'-w}9|ޛS(5Ks|K3}̗vl ?_w+=D|v!8unCϠ+p@kmK^vk߳7ڟև6}sϧ?%|%xE\8[wh=<}ŷ}#]w~j:Gڭg3mmoy~tr.箵;k{X{oy.?\O[\>Ǘi|Vy~HٸȩwʙF?]S\HWفo{Ÿh㣵y~Ot箪WW'ÿO^'cmsϲDVm*NnC?B^)].wԞi]|~UpҖyӕs~ ^oߡU{[<v=qڏ>=tS]O5;W"uKؖOu^2һOu".߯^^RK{gY|!yx}iE~}M];7QOc]QG]L]^~ۺ~?zEtcY=mϬz?zZs^#֛u4ZxV{O:S:7'f^#Չ[ufΜom~U_i_ k{R_suw]砾\}uO՛UG^ݰ绿W[wf]VzTuwԁ~}S/q} +z}Y|Y9D P9`WnpY:=eI.7giɣAuW8"=DCgusgkV=t=pZ>Oz>upv7>Ͼ1Is]~p mϵvqZZr_[W 3}ׁ}3tE>0~6|h?: o7_v=upb}Bov^w>/]pr}~lʋ-v]Z:7wj5u|Opopз|m~[7:S s'|M!v7|w}ѥzxyP=u`]7X? ~0<̺Δ<'/x={m<]KHGvꃑۻ_'Dwr{qׯ2|̿;_qO{|^>^DnOpA.nV6[91/}90f+:tGX)/{?~Edgo]v>{{; _Pwo;rC\OVsO'.c3K~z;Sup5}vA~λ"koďݧ5h?=޻5'=v`}>~.ܫm^j'sQ}xgs7ZƧ_ߑ3ߣwgW.,x*o\A~`^лI{gvo}>O;P}{2}>> Ϟ?'=m~_x*O5.܉7NKnF_ :7υ=61}O?~Cȣ|oaӧ2to2xuCo3t}~|n{|g|g:w 9x͋EO>8"Gȝf\\7 ~zxy4v%=ћl^*O+|j_|.}?{}?{Go'3Oc|ή[i5>瀣ދ<ѣ<֮s]WWz#~]zy}0rC! ~Tqb-1W/:7w Rx|k~OR'?exG2?<,gOp}CiWT[jgW^zϧ%j?@N[赿{:8{18d5_g+#"o.|km.Ǖ#6>Od碟~ܿ?]O'uN{4V7u6+>-}{y/Eo_>m=+?jO]kSf O~4 'z<zNuu23fK|>뽝o{z{r>=w_-r3tU<~"zM! W#ы\h޳~Ҵ?ա}]]8xT/W֧&zkE/W3w~oY71{ q<3b/?v~oWWn+{}!</T;mۚ/Ї~Av}\eKZ|Eiq4_'6vBicLj'~o8w>_$g%qG}ī}<=̃z54gՃbz9wN+~ɳ~yF<^G/Ӽ}}/x'ZiWn:>u݇ Tސ>7Y ?^=c#2t>oYrz{UhUD/}!΅>pF[āymeY^ |:yG7r|;Ǯ}ot:KxJ]<-#vyǧ3~ˮ?~D("~x?|zyԞS_s_c%z_ڙ!~2S|O8EЫq LNӐsWs\"ɷO={<~;O2_ = 3uoZuΡYK^HH`R\?w_gkG7n(5r]kYoΝY>)K'3v_/y.ѓ!voD? os<&O;rc]jsx#ߤb޵^*+wХXpzD>[kx<~1~!NA /Wn);_4O/#̯J/q |՛I]/n\.|ɏOGx:ܜۛ_5W>ixS9[ly1I\}Z'Cn{ye>Inޟ>TNL9|s O&>mRޕ$|3\)4_J8Dpo[Oz(ߴv;ӥOS?qsiUm<վq+Wqݳo,ϩ:Jra'N>W_cEzyw'ߏT^aS~<Ǐ➩'y;n=_p [~V?kM] ?~zfU/-;q y/Nz[5tGgr9'7:|#Kgwgce>)B ;蠟E׾\/7~Ko?YF +qčW_Nܕeo|^ēB}R{r7rq']g?0=_ҫ7LˎzC8֯fA/S]>7t_oG3[}W}&oeGv&yU﹋3w[O: ϱ|߿5t;w7܉v=3G|vБ|Gc7scyox\\>>Щ>̟yI1j3ank.IȮ?K~YhuOpq:1#|+{U~_GG=Opi~=SҍӍ|v} }`Z>z{AvdCb\ߛ񊇯}P}qkįh#xl]z5ugȾ;/ܧՉz7:57羓8mӡa~ oܻyŏg 8w?8}=g ?O im/6~G-kD/?g6Nz|Kߣy>??UOrLb{7:.3`YǯsM_6NlŽy>/B/kG쐝ƙ3[i( gʗOOKM3}ݧn(gwsyk=ڻcgr#'{qsy*z+>+kWC~3{f:<=f~ġ7W=z2~p,9@vkz6)?A=]Iq1DoN)pG^t?;~Rw/>7~jUkU9L|4p!w S޿}{|>\ K =E'C~aB7]/+ }}~}|'/c/L|/G4?q'G߃7oO7W{뎚5>F_<7kS؏D~ha޻^ 4.b}q;yl]o8Q/7O/{ U>o޷9yg_{bOߍ?ǧ+w!/OO<ĸ1 ]q_k*q#Z;߉^QBϐFWt)=xsOM@v}"vzWu]_fgl|ZV|^-P ?>`0~o߁9f~#|̫y)ͫ8q ^ o83{-hko'C>$-|}Ǯo\KK'q|_e7vsG/e(}({[~)K0Oc788ǚA뷌l}sk2O!g<;ۇ459q\#酯<~5yy |8㧿GDfpG+oo5/aW ?@%QKN?~G'^aIp.м+pQ Oyvɼ{\g~wAsV<'yCW<ǟph| /q%lü珂go'JW} CS4zݷ0C''r!~<8#~W <^ͳYy:Ѓ_h}}'ρ>\^\'yOZz{x^W@|:㴞S3o={d%^晽պRGϞ7^|/^˃MKzni x؋Gjre?7>{<ߋ۷~#7 rX/xy$7{]_<|+7o4:UuYGOkwO9}O/^>zz?d~?|qr^>~+|.ƉW >0SѸ}9􏸸u7q~$OǼxg(= +Y/9YgT}O.>7!O$o>~ ~w|ߑ; ]瀄Sx˧38=~!7g>;Z<9y{ND.ym<ַOx×# ?7Kӿ|9~߮w?Q>I7gWgVПKG`ϩy7~z 7|1zqFNAK<'/_HOM}~#K g;㪷͏!>=[D'moyA_x<9>pv ~qy&_~/N?;g ɯ0uoﺳy?WV?nDUG} b^sO< Oqq_qNq~:w< oxG>aW^z~tcأ;[gz׎/uSSwxz7~MS\7v_w:pU h~=T<yP\x|oosx~6rE?+@~t?i{OЃ, -ymGxܲz -ƕ`*7yvn=աSsWūpy;r{;qIuQrNg~cgx?';ͣ{~TO/E^i+'o|!xƼW}Y;'t_ҥ߳ޖ~㷽>|EL܄|z|/?} =(~85<_;v{swj73ƅѡu//tOZH| u)p{.>]LN8}sw\yb90?Ϟ}+z<k|N+]}+z;;vG7zNx/q=|^Ďe7 ? EoOjķϑe/7h~CzzNތpG2v<}Ǭ&B>C]{Ak'/-:?eq_$v2{n{֝~<~avy|Lz'W~NJZ PE .}mۄ;qt[gqg'AΠxCgky"͏WGܑ~n/>]aPvJH}Mƣ'pxq8G>}dpuKs_vFkZ%~^zH"S'"z?7d|Fk;_#7_Ɓg)~SG󆟌/o{Ov5n>\ϥo/>Wzy3pAx.G39m{'7š?|#9$^,n66wWϷWg<\8<:=<  .D|IT>}7_Z85~_E6'}7ݯSٍWü ?~A777z"gw<_~ja45] A~27}Л\kK&o.I/U8(;7x&~%}o>{`Zs.=,(n>ntPg_siZu^ovRo <)uOȱ+~ןx>G;?g}M՟#s o'vQ{}oozq!#7ܷ&UyEˍr_ <vO%<9i?3zUqmqᇍ=Gm^jPP] |gO1g_w W~G^~y|:< %{{W<^!݇.7{e¾\3;XSɼܔ?YJ} A'8@wvftSۓ֎ןt;}+^~'ϟ~zOG/vx/O7?gョGfyӼ׸y3]?N<6O󋇜sN;z~8|d:}j%tφQ=߸ؕpEn5Q?ĕ:O͓ík(W=^SSzysUں< >}_"ߓKէ+|} } Hp_[o|}{Έ:D3~S468^O{?Jȅ9>h݌W{ O5c3ETO_E. _۵wƁZ?hy|<~C᳥gֹë6 #==> 8<_+{>8Tǁ_ͯ~^{wos|֣PG|O]kߑpwvuxF~?Y{z/nQ9'{j~(8:Kyq>{}smCL,>V7~N~؏ߛ牗<}q^9 ? q~};M?)Gn(_zq~ 5NWn|}z/gS3V}ξ+5{+㤟oG|g]g@\Sr-xOGOx§]<a=ɹ߃+ ~3qVbǚtAy#sX7u/~9Ux\BIhko'[*yf$wCOg߹ߥ߭S3<ZdC_;ǟڍϳ> ^WxOq;_ޣşCOu)R/2_9~-'/CsLƇѹuŸɑƃ_[R:,tWoFw.@o^6捲oꩱ Bֽ[DoָgE n%/чV/ryc'x~]h;'rƷoW8y]ϳm~]v]ﳸC|vwZ+'|x2r ?OzqOD_6_1x$7Oa!$د+T~|xpK8}]'__F9#f}ٶ+ֻ պz8^^)E/7ρ##hŷf>ŭZž}own=qu9osxM?>z3pFoz);v9zWfֵ{Ne㖍3x{C&zLijF.yg?O}7z=&ރON++/ gxes" O7Ggȗs 2? om[{H\Ptswbo?C癲Mssȥv}|Onvώҟ,x/~4|/n;'|Îdo/|@#[qt?SKzn wv < uO_c-_W7B7g7N/Ed;v_Oy7Nx?̞Mn:j_@LJދo\!_}/šAx?y}w~G_cw?}~yOk-[o}u5R}a~W<ӮGEo4׺nr*r>3ߞgU_~'~Imqtc|1n8tM<߸;o>-ƕ߯?QWWoWƓ}jw4kscC]!~C'RG>a~G<>>r399ѓv8=:?p[=w O3Indո[f^g_< \w_޹ʼn|cqvGCG0?r ڽ|=!cv_}=嵍[ˡ{AMO' ?$ O{Ё=/3~P"~ŷ쁍HgjwrC>uU> ' O?/E6!/j3X;8_zg^\gea[ZOo#SaL ?ᅝl?Zq<=O'ǗfwHv wg˳K+>}<*U8qi7~snK֍UOS|]ЁϾ;?su[ʼn6n%+ps|MN~ ;|.˜껬WY}ޗ!q;vq_SyW8ߺg8cO=<|Ȍܹpt:/ U ?}y>_wf_yq\9V} _l}QKi /_|>E>gۼK3.ޤW6Ng~2Y47;|{Gf6;%oOfO k;^yg;Ó8}:\y"ܸ] 3xi{|f_{؟H@:Ҫ7<=A^7Do=8.,nދ.Six9G/>/aG9|Kz~ /cwpp|ή3.xuAg}ɻ[9+7V=v]u3=|m~g~g=z{u4קGU=#k0/'~7d^Pxq;$+kyyR<}~,Н<Úwk{֛#[v ďںg9OVd߾}gí](8+[$D9w3T;SquxOϝ8 Iç)nG?(|y<;#M ߍ{94^~~Oo)n6pv.Poe?h|\/!~Pϣ?>>qzykp1c7<.>JO~ܠqk.~3&/%&NW;'捜x:kO Y'dxO>j9{Gw]<|cۺ>1v~n( я?^n|zO~|7^~jGvugMy{k_̾q{oM:_?^W׹c(|Wyx{4\}΄'υ#n?gDG>i_Gϋ?xx?}g%񃖿f`WCKVqs?Όv/Α ^W<0S;]{)tW`L`,.G/BgP\wO{A~+ KgY{݃sֻs?@'t+;ܗtWOڞuIl[z</cDݷEEG +Ճu̯ML揳×j\3ѷy)*oO׭#|)mg{3ƭe{@!- }eH}:|WOqS޴?GxI=\xM??:ÓdUW2z{lZz\qcwέtwk/ÿwy[l4=W.to} |틱#υ{f8_'~{>Z==W9V{}|xhnakq}/>sϭ}>ߖ.Uw]q/,~gW|!w9<=}zhB)y'9Gybg?FG=78M^Oʋsz/ͷDzCimZΟxμMkCL>o<5tRѸ+!oR?]OW\G#82OcbzMtC'8d_v COv8jy$_e'~U3,{h>_s;@w<{ěnq?9Y=auIt G~gʥ3{9[_m -oz~wU<w?Wސ[{vŋy{w)ĭ{Wwk3m~@?3ߋ3(ygGŞC_r>CpqV`dO>˃Vs|q>[byry.>_+~Oޠ8֋vB?+<ܾˇ-eǧG#08w5=G^tq,cǧ#)&~| w M< z |x"<;}svxwylMѡy ]/4`m>-؇a|{苯y?vg1}xgsdߞ #=nNo7ハ?:c矏#߂Cv]/a_׻_hwG96^C-S/'Sq6{`Qs8μh̴?|a7׵Jo[[? ]u裏ǿOcpuipS_Ћ]}Y|q {d?u+{}op}!M~tw˺]w`6qցǻ]ƻjD~'Iϛ}8=R-{:2/x4o;?Ӄ|Bt&GqR=~M{y??{NU.aw/uܡG}_gx<ƾ&7>]>xSzi}E&|/~~[?O|ދ=)|__A3nzOΪ=J/y~̧y=Wpz;|y닆Aŵџ\3od[MKg~T~W>9~}oG^cgDgWB8\n:G<9N^SPǒîv< :rF9}qˏ&,%u@|‘}$An=g->oB7}9yģ8}~}!=+>y2fþB{?&nN?ux;|2_}T}O5d#=C]붭JN+79"]'Gӑt觉[y$y6?%>>y|{\g/L =aMV -vL{]p碗Wc.n*/=sg}Oux?Ǯ\Tpxzt}原_+Q\ 摼%}O?{O |p?p]}Cێ<6>h{X7i~jO6oGqU :/p,.H}QkP>@~ck_n"3o3<'+=B_xуXCS<]>)J/~xYROMrrOZR7!OwTx?|2r]u >pO6.wɿ'<[Dϩ~Eoot O|~}|񷻿}:TZ^Dn,8{^ eqg7f~=vg3{{z?__l\4wr!/^P Z=D?}gʇQ/{3KZ@O/=<ukcqVv/qu*O>-~vqE>2֞M\y)n[|<ɷ}-~̫""I9Mkk_-99W?1}\~!Sוy3O~t7#5Ntw羽3|N5{utiˮ={}1nӢk^`.i[ЯJc~ɋo^|/~<]_w\AҫYJuH`O[=t.G?>gW]OxE/Nʯmw3{$O?g/s&}^O>ۣw/M퇨u߿:i~E7S<]mU?|v|^>wMUҾJzP}wz.kC u6mG7{J~GW/Sho>U>D̫][$&ms#?%3>ugUqu Gg_x%%=ŝm}>W_eݫ%z㶙络>w/<hzOsMܞ[.=R^=Y{S>ɸ~ω(Gn(yW.]䍟k~%~} rӧsrT.]on~_G=+Nگ $g|>~MK]'>ĭG6׶}ozøa2~^=xbrݸczw@w·צOqp瞽L~?忴_[>"?\kb7W8-ߕU}y)E<ٓxA/WY?^|])N㹭yx~fkvl8wo=:"ώݶSWͩi9Nw诮e3wƧSy{ޘ=w,lOimnι*Զov}ebݻzǟMxӪԇڏR}]uSԣ~kvS7l&u|ws ~yvQ=w^Xv_ݰu`\}y={٭ wSuugu~yճsM[uݷ._.m}۶u}۳:yϺ2zoBާp_Z`xYaܞg=g&[uڭK}<;WmuŰzi˺>y~E/y:/v_wswsD+#׻.]G~%O Yb] ȺzZ=o>}g:mvJ{qG:;93֭܂7GC/*:z/=>G_<;zXþ_:{St'UZu8378o=vy^}P{=s/r 8{~>u9{U{wG{[ρܳq_~[<'sjSnW~~!zI?u:~:pKK?v)ߵލϼyvwGF?v-r~TqE[  |Y}[q|h=ݹW-? s)^Vϳ5teT9'Ɖ?\z>܃k+o*N{}ol9EΏ?ًR'|)^s\7[v8'>Yˮk㉡w[?j~g/,xe{s7|~Age|pY}37_C9ΏC/-I^w~!ޫ=W?9;?=y 8=pt|ڸxsdGeQxs\Sp%NA^u^~q?[_zk; _ \Xp_q82gxkW}8#q]8'b_7}>JNwwsx/9<'8Wԯ|Q?}f&>w7{oK{mE婮RN'&υ'o@N~n>}yOﶟ噯~[4Γ8!-iOcMoSVR8`zFvkgխ}Rػ8NaފSG׮sxk%~[:oM1ߜpGXvUoա"VdR!>~67u<{j3OUM{N #ؗⲇ<~W!8>o~9z~0vxWfWquڞѣ]gP/9rrpsu*'8goy9y@wxњg~҇CT~o5v 0q+dpO=q3ݴy}З'51ו'nCOyo~G?1:sB_mwOC_{y]:}?\uJѕf5.V UYA|x> Cqqퟶm,zyW;Fվ7\yW[6.eo*zb3~i[#<[⍯?7>U<?V~ϡDЇ^Z2Y~__O8`qѯ/u5 䳼gtѢ;~'ď^܈Ct߉_ծ7χ' \Oon:wjpt]u\|oY;ޭTaw\jМ|;m? ]W} uvN ٱrm8<ᇱK9B^CƟu͉m n4olw<}a_ryē:u<ڽ<|Co8?ޣV?ƿ[='0+χ977OcʷsSɴ𣭟^$ԯ:M8h}OF.ѩu#̿s ooNf룻N(K~l9Y:&+u?z8<3B9|b~hܫx:|GOEIV>hy5k3[kƏWB^'?|~s~ k_ >F_ /.ŏp 7՛߼M/d^̷u\{7/8rM^PWL/s/wO+O[®=7Ի/_}]?}g^Ş'coƣ f'#Gj;_So}k?NO繋?n} nE Ezn;'"{kxZl=r["~K_'O?ޗM~\J _O\jkns|nϼ\K"{~%qmq _p+.N 7aB_S9yF"5<ީ]We)?}{u?_3}{FyC[Y}GL`.^~7o~<;KZ$E?\ޫO*#ןo4q yɺ3I{qf}?@mۓgOn|=9IK~nySm#wͿWp'I]Լg#Fy`}o_`T恝䡖O7;pI|[yėWOŏ6q؝R7ޢg-trxz#rX=^M:W[U|( ],WNO<'yyxJy}.oX=1㿬; ˛^_ooMa%~785G{O<˷Zr G_KqYs9Dvl';5+zqNi3|f:ςWvV|vx|0;ނK/?|;"N|5;>Z7{^/zc%Ib''aԟ8X8uOjk?;͑߇jO+&OvPLdCy#sS7nHߎ[g^ܼڜo>5W=WS>r-<3{~!gyW>~En%|nߴtx߇OWIu=8o;eЯ©Zuk7Omϕ==O|<} {4b=q A'O5~zpxaGt=/[0tܸUqsI]Ncwݧwf7kCl|~WNىŴ:Ak+w=ϬSOLO,!>8=#;pM\ǶtIW}}bp9tq{቟M#}Bת75б䀗·x8?g׮x.z8O9 ռ̡xJ|/F_ ,nƾ?C//9sZh=<#n\d+%G߽06?K<|yU<]oϹ:p/CчRg~]zR' HݟV>=hIg+7ýgy_|<=Hƽ./Se]+7jׁ_<2y(F%B'Ư}-y@~W>ăɁ lq6EᏽֿxZ=<<2kO |-~ake _%0u[o;__5Zw4EW*v k<7zͻ~sZzQ?Zo~Su=6 _o>:g-?=ىcc]O:}GF|)~qȋkuV.zyɻg}{\ =.r6^2k<5ދO|Qo&`[W`ԗ~j{3[?GOO5ܣ^kב{C~½//~*8jmaK3t0ߣ~!~}O|vtOoحCٙow]> ~ʾo>|w}rN:量?no<~ğL׼;;'ʞ3zhU_]ӊ\6%G?6&>@֟'N:'~[wb?:p v}|x~w?%>xG.}{,P-|7|5Mn;'>_U/½c٭탴޹' /,̏s@~3~rp]o8P'u+z^3 OZ}1_D.?RDz.{tsxAe9#ͽ:H|mGlԙs%̓yB߸MMYG֟,>l~!A'-{snQ׭ٝ1kj9|n䔶߷xIb?'Gxծ6|^ _i}Ϳ[i.ŷA~wro>Wců>y^ow ZMqreCwvZSy)qyև }Ovq觸)~UWEQe&OMvn!NGOk)!/@Œ?}¿{i>W|ϼG~}*?s=l'x:zïqo|?w<}8fW5[O/{u_WWoO}k\sx#;}؋|96<~ԖGym\p̾Ѕ׍'{ۏ }ŏ|qWy oOgwm7{/zN~{x.:O|!7/pM>Or]Mk86A_d>3zuy?F~n/M;SW*oNl>wqd$^x9?_}kxcOߓkO'~ԣ9}kO r{(^ow>'/;D|jSɧwuw3xq8cCUG=xacA?WO+ 9MocGwˮ|q z~spc7^.-OG/ 9ڼlBx6œ maףf+맬h<%k8fZϫwп\{z;Fn-eF6'atc/;wgHr8ݏ~##w0wGHU^yvjЃ=|˱ {ys ~\몳H܃~2|.9.fO3褥ߧ Ogx}}ޣWY3GO0=nݯ>O61oݏRD?=_|F>~#ꁑq&y5>:_o៞qg^v$s<~#뙌Kݙ8#Wz;v y O{u=OvwWxZ4=|]21q gxC?v<6nߟ/0kM?E'IGOٺw$.Gg>w#yC-]>v5~a|.%sؿN˗G^ӵ4߻fyφyg⧋O[xطcțׇ.OGO9̿y癩߶~<guz/tֽkwE<'A'3i>GBrs\O/d~5q2q;y'~O꽝1xQ3o]?=?X_ڍo΁zvεf<5v yrx2n~o 3>/_oQҼiW^ ~w,_<njxĭ}?K/>yY{k4RAn ־9?SݸSd8ݏ%E駵R_>|X/I^Q轙|ZtNⰟ2y\{]ٸF]'?iF'c~Nӵ>6lpumyN9gƭuR3O+nf6$@/qfއ7zߊC7z\Y{х1zϭSw47yq ʷGSz';|^ ϳ}Oy> F>/#W̧][8xï윭~]ž&4|,>$E?AwҖ0_m{:/ppf^|^ -!i~|5O/Y`oU>^1?v; Ǘ9<ŮI>{r .\6~Ձ7ᒞ}kծy>Tyuw'B=|OG/>ʏ;V~eu :|3o>ǟ柼');f#cG-%<zփ'3uND /9*އo[P;~q/|9uy} ]OO_y3i'u{~O?uQz>Soc<?74χ'~ ^/7ͧGOᙽx/o8@7̎@gu޴?"ʼ?'8:3S_;u|y|Wݷv~ŹC[߸5㧏<&_oba_g[zZgqk澭+6nWBաz(t}*̣qY? .ze]GFNh>w=O?O^N=zk</?A^WuԶxB/v~U*/_붻_8z/s7]wY}ҸY > /.o/NRHW_t<ky_hͧ'aY{>pkt}.Όoθ v]k w΂u-J hr7_:'ٍf^|>G7rS5Y{=*/~8y___sv3mљϥ|>7tr _n{~4+$0ΫsC֧[p~YًL vY=d4[@9<5A{<9e!i[Q>Ǐz{qG~'kע=O_7n?j}^Ůaۧ|VW:|α~y~,m_-Y}+77}?/逫3fϝIv3C7o7[8xn¼x:{qcP=߻_7yO|}\Gr`)q,ÿ=vwޚo;ٞC;GJA}%?֡>_|~kķǡk_Ћ8^:kx/b%L!/Ǣ˺G~v1zWى='O cˬ /n#g~OqJ2<[ Xmry9}!> Ե υO7ʾ:agbOC_~~s<'<|twu ދ.ϧ[W3x{*e=\U9^CyKcw,#aO x%~:~ꕿ7 ᜝=ھ>N~zߘ9L|gpS3Bhcw_ū:qm?"!_4= O#ԛ?񨝷zBf+_Z$EOik`~POv?3~oK $.ur=g=W[so!t7,ɇ|>Wvz3{{.A1G}x`ϡ)r˙$~Dn_doE˿4#_̯o"\=`pn޻0ٙ7mO+Z+_*5[nWBy@.\#o{bċ)K'vIv2yϷ :?_x:Y~'v 9Q'|Ϯ~.ő<`ޚWǏ2_҇!I׮?;O#}/gXk軸/ Ň&X=/4/<˓];}/<s<{x}ea,9~5! F_S=yO}(ָ!ugvȥoo^ԞD8~yp/W׻SWO?xg9aaqzw`33^?x_>w}~18ѳ{ȩ='Ibџ ;~ ?yHl})y χ}I O9{lq<5&A~w!xNics=}+Kv<,_[jݐA,{GsUÉ9Ӓ7>~=.:αnPv>k<] >w'=to/>VI¼vu'L_Z[g?~>~>{E; /&^x+qW2rm(ODy7^7Kް=y)Eؿwx;ym3?7ױ۴>)G &};yܺ%ۢu={A oނ7[3\C=\~#=uyT+OKwwtS/J/Ó:/ľ~$QGo~Kr΍ES;4^r{=q@/|o?6NFꎂMxd{>q|uS#~RΫ[8\:Sb~Ey뎶sHY< .vpp}3S!ݎ'y}u&㏽8~fQ[r=^_9|nKmu8C/Mxq=rq#'~,+>p$^".#_{jՕwU7GM6z+>Ǩq{r-M~#Owc]R=ko'type>хW}g#|CS]74eqv S}ƵC[G ۅW~/E~ŭuc_KU_?_d?gG>}'-F oC{s؏CD/ugQW>7k$uֱ y~vG~/|SoǞb׭^|4(g}|x^D?ۿ9"O}tO˜oBgg,koA#uc'.V6//FBNz5;\_e/>x|462S$#>.[a8k9n~B{OW5z$]}K<'~){=An | 7xz1ॸ2nvI߾ş|額W˛:|v<g[}?co? 'z {nobo>9!3OH&x}q_OCx*R?k5?8;?xU׽q3Լm^*^:/߈-t:+>審<特vugiJ}>]ǹ|ST{_>\ih s)޻됆7O|NwڎOJbԍ7~I}u۷ ?\fiu[Wߺy5o&~1q o˞d^- A,L~MO?`uU[>8Ogw=o'{g]U^N9]< ߮'l\L~U#^n'8[ZkozG晲g!ͧuOd]!9q8u c_ٹM?Bv?[;"qε[gRaoWo+e^ZǕqtZw O<)yw rLd/w6/?_ܘqc:Z埊?5uN>zGϻ;cu{3=w1KuGrm粋j5?}[A'|o2&} 5pU~Nn>gyRj<,&άG<ށ'p*WRy~'yX?}&ƾ}u?%_?zҳٵ+c׮pN?b=؅iY|eoO>h'/i:Y{ Og^ʿC%x1OG dg_f==ec^yv}/gF٧Z?~8O\uW3}u;_'u}5'n||Q.8%_vݪ{n'8<}K;_w/%=(-H>w!^`ZekRc辀'[W.Nݳ34vfyrߐ/cezJ :v 9V(j?nIY+齭[g/s;vwOz[z ίZ~g 8qE|B2}yy'oM^O?S| Qx+z~Wn#ȅګ3㖟3'z ?+|GIE{9ZdkPhgk3ꉜw7ϗN_}1v">z=Y6GK'/b?Í+&qw|G~׮]=Gq_~}_my\z[,_L{i߉|smp_GUq&7twy>VNw/~7}ax/=Bm&qx.GOwz#xUSv.ZG9ᇠg'cO|58i}r߃p$o GCQx>W 7/9Nng{.ɺN߁اa1p}~{5Ѯq^ ug=;|!?dS Ae} =O?]|ߝϝ?ߜk~0z#{a[`]}iaP\_Ȟeeܯ=u#Ӈ#*yě_5~N_wL? oZQwԽo%yDF7>|m?ݧ~W54^zQ|.e{ޡ'szZv~??|7?y_v=ml̫GWko!#Oש_m]os'|w_I@7;tO̞71zD7eIq ›q7$)y-lv!~^+!޸uoJzzO;Z8!.;q uDw|W{u{#?=\ˉ7|sװ 3͗yH{W!׼~v|y_mǺk gY{)x8}zC+?j}x-'={zd7cgkxں{uǭU5P9uc'x4ti3xA]s!>Wl"y/˅a|aWzCp=7nze乇9vaw١ߔ:7u.)tx}/oQ(y>jg~!O=|Mk>#O_uzS‰7k~o Obd?{{Yc=u6JVImqtxJP?V??m=#16_K; j/Vxn~Ҟ6.w%onEWl<?<:{ā>v|wcvgy{zׇwKչc ?/Xst_{o_YQ ^h~Uk;W |g֏W9HЇ#.>mV0n [#ud9|<{8:#=q 1 _IKu舟Kn@hғ^J|~#rvox7't/Y6vyϲK t5_9CO{< B y|fXozvȑԟz jjq65CNPYwϞW'b )ȹ#dמ}0~8_œg:?kLo^Q/Wvz'y̛u}bg-M;much|KL}Gsx7\<{O[<]o:_>I_5NNᩭq U|B?|w _I)~|3t\o|k<9m[z1u_7?rw|luksMfyp.}J\l?ۊoOaɚy!Os; N\bd~C:9_~~ +wڦ-O3=%^yy:o+M|=_kOKvcB.hϳ6<L;s6nދ<F?O/y ox_jٱSμ{FW?CIƩC;0o扺"Gq:k}T_ܷߟW}=-K |>|Wt?ѧz';HK79ȋ3>uꐺ/_77ox/+W>;aWr~ETᇛ>vȑmcOq:S9W׵um:S=պ|~_}k{o}ޓg'jrߗ#8bO{ȿ7+'/O/1ϷNFƵ:>7mLn;|߻?&^v~:w{ 4[3>yUy]qzq@|gcϮ|#O޺ɾbsMgN^=>zpX]}{s}Namw]u[rӵ]Sk}4|OE͋͟{k$1__jq_9)5nx@Σk8u3mͧUM7pmY~]Iq\(*?]n>>|7V㰝~|L>x. +nx{X<,}ցQ > o^엿eo[u㗬??cŭQ7sÖ/eo:| 5gגgv޾uz>q&Αs_|k苃zikߓ_;}K?ݶzNݢߕ`u/OyGs~Pgc=⬯>d]e??yիG1۾;j;C < -b=/zl^oܫ睦W[Ͻ>(|?vY>ޖwޙ\/\]xMwgQ'~n[צ ^>gqω/Lޖ^{|moIpL鼩GGo+ܯ3xM/̞ zr?Υ6DὗuxnGz^cCLZa4;:/S:rn8GL?;=_d Ş8u[gyv.}3_1tO7~n7PCSGN>Hݗz>m uSoe}:{u3]3u;33n>uԃZ?eݪuT_:T리k^|%p玲ڇh7֯o}:CW]k[7mս;>Kk[ys?ZV/o]uW띺us}n=A]>8z実{֋Mۧ?ZKѯK;['"mX֫\z~>CK+^oss]xnIg3?WFCYk 亭 fk?}'_w}~gaŮyzЦc讥 ym޻nT[g=%O'*Z^/fwìwN]ɥJ1]=[h?:{fЗ]:X'5TKuU۱Gj'w}ok?}os~9"뮃~-tϾN 8~~ޅf=ʮsWfמc?&79b1\ͻnni侑;l?k6{XӶy?{ro1tv{2Ouj>?kݟ Zg#BW??2^cKv0'r$;J3EܝCO- ]WO3ɷo#:Oqk+Gďb-}}'<6M.'pGtgOor=vt ng7Gϳ~[;`~@HNbǐkwyr3|5kcmSq6^g݈x&^.d},ޛy^xWup;'#䉸ipzOpDzT5?|Kw?>vӧcjy,`> -<}\?= @$/wo/A\|qxyeἔC=Dpou7_S~T'qF?.bY<|?uWx3:U_Gf wpn 4nnOxץP4s5=5~z#r͞ov;pOljZ7PFu?Ԟ؛{[B%G쾥CZ@Ήo[|^rƏy}Bu;쿑+ś''"ɯ4ԁ?4PRLcqxJُfꗲ7g6z m.α޺r;{hD_<6F}KC-~"g0ϞI7<jɫs:yzuD'SyYQ2/篺?˯o;޼g靭C*xS*Zt"G~OS g60/]P{u #ϩ%g|Oϱՙ=8L=8^{CmN'gS@ы|/ xA ×+{7v\WQ*x2j:WoleOx=g>)œ[~ײ_]AEcj\<%G~y eK7} Ogq %GNNϞi|}>_Uz~8Ѽ(yO?x9λj5ދ__f]?qg68n <3r}D3C_$x+nIN=|]~$ 8:* | tWw=w7OG.[9<%z3=]K]H~獃^:$ۺ̿sXs>['|<.^/viGﹺd=؅M[Ϸs-\n!C׽yNd|INzbv]OW'R yg6rG7{U?9?6.J+n1)fo?GǻrS+Nv?g:(VяY7x_vN̋ߑ8/ϗTm(>ܙځm|w]^=3/;yIѲW?M>.pFt _w}wߙ'J/þqꕒQw~?|A^>o8>J}s7_ Gp7>w x%/]Gs[ϤC_i _[cu2}{7P58Fؗsu$tg]/5?r*>M\sg)~3>X>y_?s_~bSހ6ݼUI{xAƁ>?鋉wѓ=DpxvW$q;_nESC7?j/?yrqPJ첳x.yY(ޝo;~2T,C&-}\aY~^Br{؛Eߢ zs[??{u;y\^ux"ޣx̋h}O4KIx2 WߤW'#!_~׸x:w]>'=(+itc/pܹ^z/V? 9qxq`Թ؇=nć;k)_s_nbA Ёǧcx: ~̾ڼm|]{8w$/:/v-,w'u'W]ϳ~;Q>ţ[wu>__w]Y=Yx~>8y߭x9y^~uK_lZGHY{:iC?+Ol߸c'G[va}jQߢφ~>_drOp/M)8؃Yq Xsإœqmh[gtx~\yݞ>g'|JMLb\Lx'f>J}INЉaϺ&7KM_[J_'/o;p:>m9+O,Kz,^^/_?%=ű6N9t8౸[ӫj{\'j<|8WwFU/TW$gpzv[g;үy5PtۦzZ~ŇO]'>ݵGoU*{W<=y(\ɧ_Ƴ|Փ+Oo#%%n{sDwخ>|h>gj}}:v=%^5pN{C^%R3?{{lߎ|g+d3qvtgeĻ]?zGE|c+@x`p <ԕw|̓GkyWv>0zY//DA{riGiG|GΑ >n?߷÷=5~z_|,?y{Awky=u,uK 'K'v_Gi>#iT&P?=Tiy/4~^g_NÇ)v!@~:O#_~ʼ+zO7<ћȳ;Hˮ7c;zu :u&|g8u7 ^w#{vab}OM\ć->ow`Sgxc3]72xbG;^4s/#|(VOwѠ]-qdAI[N|p=N]Oj|z#qM~q_[z?zo~W|'# Oi{t+xB?zI'U* x-qJ7AOzwsڅSX*x"uG>+2l)ce>#헻v" =޼~\u_KGcv09AO) *m=x콽>k?=>z}? zAK{!!^.W;ik{Ou_~ fGꅧxo}{o:cv8᳎GӇ-O|wfO:Nk=Ft߀8m9KǏ't]ǼqSG7x_T~~>/_1#'z[WU9p/[s<5^>xүSӑ~//uDcuM)Nwh~/럒7*n T1|JGܯ~1 f3߇s~3}i<꠺^n'֫Of<&ΰdo~5=ճ?<;ycEϿxJ\e[: E[{\HgX<}y2/*B凫3Pğ Oq^>g=ՑW{^;'uϻn9r򣡃x~6ߵvfO|~5f%rFo3_@>t\]>>}'EGuUo'1E~|~ z־cxyb{}_^fʎZ<ǸC}jV}ema71t}>Q'y֏y{DszGxs|bA鬍qhogO|N[x~~>mqmj8Z|{կO[s@i<Cɛ^Gﻎ\O[RG+/f;?Xop>#|p7Oę5<ԯY.1G΋/_)Oq2$y%}|ѧY8F߻?KZ_x<`>ANhd⇹_\7YV._SNY7`ptK{WW>MSh׆yxҊ;?ymt{>tqT|Gq^W}879z9zqu[<~]̞?O/59? )̺JČzw+ ]__?f휮͛Oǎ/xg)_ z9vN<̏\[F4^|~?4vO#k^8vw<g}rq/Iǔ/o~8'_G9}GcArF|~^>صyFc瘯m[^i[xO =}. ~=x:ԗ_u?)8B]P7V8l;u{gv_\_8X$5Wn{]KJ<||5Զ2oqկe\Y?]Oԗ{}d[?1vV?<y)ݏ`SQxVU[!'߻z9O+#]#"2y'/5+Cc4pf;N N|,IsşI'_}^:Z8}׍LQ>~rMӇS}oZ}pUNgpE;x^:]'Dg6\K͗z%u'yCr?+wGL; SƫïIz=]1/zθ'}{.ټG w=5\a>cgl>jܰ{ofoqf>;'GP< xd|{^mz+)|qeqn\N7!~R{q=_췏s=/7]nuT{{K?G~EOW8.|Op^_!n'\ܙkKrue^' ]#:ƯO_]nZk}IO9O _Bz GnpzH[<'y/yžO9x#>El_ϙ8|8s<5<O T Cᓍ/O8;/ɞpߞ_2|qVsȻvG 켭eg1 r~OG:|w_#>Y;0ywCO`=Er~c΃Y:$H|6xc{>;{{c~4Ix{ ̓:3bf}f͓+KߋCOzy^~q *gy7Cwq |w<z8%7|'9޺y4rx:==^-^?{v瓻Rvʹ7.i+ؙ؞\<]⏴ 8"woO݈7o]a]DR#7zƯ]@<>eկ9q'8[>Ƿb〣\ /x}wߓO~!Fo?ó8ځ?*{뉲9uO8h'|[G ?Ǟ}c]4xӮs;?eIiMYߌ~0)^<=繆7U{S?>v;{~ׯ?ﹷSpD._"6q OW.[ׄ>G"z_>H_q=|eω? n.>驿n]+<\t3'{|uF7k~mT'#^k>/8l O?x_| iWc6q~ɿgA938azA߳{{dOa3<O'9 G?hz:C\JZOi<$/?;yIڕGCz}aϻ>|1ygWOLO.$^kx:Oq<|P}4|'_g>? ~=㯩:5;QT꙼܇[ =U?zƮiq|yíp#C z9X_~x=,[u'v|toSCGWu'O\76iO_u\0#uk+?i||xj@?Pj_~4vw{CZ󯌧+q/G?󏴑Ӈw㏇/{O?,yxR+OOyyME>c7 ee/Z{/53{?{[W}.z`琫_d{mk״.0xGr;S?:SR|ԟ('<'t3g9حC"_pO-x%ڋ7-{G^uq!/OYg?Q,VO;o}_׃'v^.F__ɡ K9^z ?7';l=)~%\ſ⿬N,WR?L/ӊCw}~(;t|Zsz0cWD\=j,%D<{Os.)/7qYu'}ނ<`.âȃS<կ}g[?tuoSjC+K☱ <9A???BáyqY~~ɹ#I?nkW=O"rw/<.Թg87<:;x/OSt?RѺ>_Y/\ڭALoG}~z5Nx=b_zq z>={6>5#~ /KṼ߿rvTh_o]y$Z~zCGqpXS{O?Y?1;ŗծu7Aln {]5ϣgo{~< wAyms>qVt O|RJ:IݼĻki?.X9ۂ'OpסۧhZ| j=soZ57&Lo8 {u(4wKgIj{3o<%gv>عkW ._y“8||'OUS wQS>n\6>.`oU~yRq'@?}K8!>[A@{<_p eU08+ge_c^W?~`agSoV_߳9˸ƟZ|Ky?G`y>f󾮮*@N+'/p:DM^jMYaj}tx·ߕ6KC:i3^>OF,x#G>W^z\;^H>Z#z~=ʳKl\v~"_| >WCwM[U?_P<荬#,}/ߞ'#=9jrcK~\ێX mq(8ſ;{qiLCrdAio'xx:>NS٧I[!SmU“˒G?΋>\Upop?ob3q~Yi[`[]9Sуeߖ~Ëgߺt<8'x<ѯzW4PZ#mxG߹iZ&|fY9'wᏐ|@"޶ۇrY4w7|9~z4ŧw^yzTRɽv;%Oo`gUvNW)~uHoWǭGxgYWn|/o]>?wWxOˌJ^KWuϔ^g:ߌ?9'7=7nS;~U{![jorKo!fOOs ;nSD|yo3o]o,]Cܧvk^+34ܚ'83uUy~|}9#wu0)~'Q%Gl?߾੃?jbǎf}9G£rT9;IOzD{ .T=ÿ/zo}Rh\xx%^'nxKyq~,xrK]}fGO,ś/yz7Yw8yWq=pfTOS~:Gy>z/?}zख़Ogqeg]ƙJ!  13Ŧ}ϗhOSr>h 7\ž=TIg\/O<5_JS}׹nGtA2]xJ~O?g ƓTג_*u]Q.xO5'rK=27>V3_^?%<a+ /+Y?<~N]qkEܑ>vH^# o|{kvyaY{;r=<]b|{W<~ ?ނOrol$_I=kqz^)NO=^SV7yl?w|>;'zmq,~.$> {~6$N 'W@;>@O̲%=U; zE|.ĶC;Mc>yf\j3} ^?~ntgx:y> +[~Owq_ς'5=51Tw?Ox*7|+ W߽g#q_2~ӏ]'>(_(~x/WF_|$w8i{vnW׵ow#;w`{Sگb^~g|h߹d7*/ɮhat|ZqT\^;N>+}Dž/n G=/y^gnw\>gv;/?%]b'Աr_S/#/h)xo!>gnN>3%_,~΃xhv~Xųrx`_<S+DcWj2~;{ُY`.zY.dqud$)_L>rg.ϋՁ/r'>ΎC}~}+_:4q7gc'{zL/W>?e䨟4~׃^YV>cG85/17]}}UGxyuر _DWz}(Nҳk 8ҋb7V=/N*:f~`bOWao|=w5̳#[Gk繟>V[x^~qw>ׇ_3}?oύxt{Ow6WC[mzWձ?|שuZzK;?ωre?:F~I>./xTg>= O9<:YYg?y+̮7Lޥs}N'NQuOmzu_77o=ͭ|o]8~]>{k~q޷C^}?5zs?wx}ww|N~_z}sm=x(Z.k|}.}$>^x==~$ ^z _u>ߥ8ZEۃxң]{8w9'1]f.xvdW7xjSuz+kW֎;ϝ;/2;ZܴWsWܶ+ozlf+W-yNNw^v8<]pn{u7=~z.*??|N^Vxule{~m?陱W=f~`~'Gw=s!W}<],~/nWSA}W8_Uk7J.xާax<߼ב7PѬLPWn;?d2/r[w4J';8ZxyN]w]W:Gu֗-_k`uלϩDz>'}J}S~?V;Z+,.Lݥu֭/Ku]zѣf<Ͼ7Ѯi:~H7\/z#ѭɲNm lYk=u0C{NV]oj^]^ߺ^w2uu::^G׻7{|h~EU8svUS\)z\?\:GKs~,z:&3;C~̗z|tTW~c0^J[/||~Xokg_OxZ>{syĖw<_~ow? kq'MˁxY<7om\e$YuhvWOKu>޸?/hy/^8zzcΨDz>}5sgYGz̟Ϟ<}rÛGG;uWow_/=~_Gp7Eos>MT<{\7'~KC4Y5v(cǪ~T?T^7ǟem#_m=q<>O <~}p6L7+w.Ҟjw1z]_@ۏݿkiNjv|{/|8C38|JF;;NE>:OAi8 > ?= 'O 'ӣ_n~!/y|y$Gǫ=ӆ]ʸ_䙞5>_}9_܏e;ʯ?Wq%>7lǑ-Ogp~q>˽#q>4k\.o|qS O{W87N,}w~?G1yl( T1~8qM|FKgWn?.%.Qx~YewZr}ٟ;&]~;.\|fކ{+.Tz;{,3O7Y7˥]VQ{Zǟ~'>nޯ-yh{OzA>o:W>ןTGIǻk;D90/\KYGo{Lǯ z^"O?GO'6xxW =xnp6/ysLr9cF7v_~YtzX\G=]ڷK;{}8qѿɧ0>| $O5hSi'p#C}3V&'G߀g$%ߘy',_g9 gy\'߉^gG۩7qݹ/yގ'1z;?gg!ώ?)a=䧅' <cGuigG'Ooͼxv" gw?Ԓ'Ow/ K }7?UorqxԹnǘHzOE||fBGufOR~$/ռz:TH⩉Bq zճďqċR\~ ^9 oC%Wgu'+Yݸ3:_<4<]y5oyWzEou7Nq>lxr\͸98^_pooϼ_J^~ϩS/#k<ͼ%?3GyQ=]x?R5O=_{IoYsGyY0q,~J:9㒼_Vw?7,|Oy&/xy+qB?wNgRYyͮW4|>&.GnL= pVG@ ة^_xAOd+\\NV;:4zgJ\MQ?6o։o?/?=F^ #_pۺT~ S~3~3sխCeW[?ݯnqNr<Sx|6m0ٟاOu=]O/3Np/ {?se:ߣpu; MiL;-q#oM>Y=G'uO|C쒣zO|{o'ϑL]șsS?V#bzxpVx?c>ŷ ®α>?1>|x=|W>`Wogz:~59%8v/Kxckȑy&ǭA^*=_cwfՓhoOWGbv3}߾Vq}r7;8sI-]aSEx|xڧYD>%%Os|/ȷ兴[;~R79tܿcvއ<k?qyxO~%1:#r=>Hbg[MQڮoor~ANai|]o=_IܼxFav=q 87:׸}?}v8rt>+\vI,g~bmx:k/Xr?V@yJc,81Ou^)z8G>_~܉}~3p|ho+}?q#=> npvhޟmxҏ-WR[pˎo^% S/Qy'I}~&oAO[׾ pWŷw>$gF7rOAo+O(|tq?׾>{Gr^Ùw:Rq|h~ޮyNcüc'W';Yح+>Sf_藊'/9%y.K%@^ȑv?e:^x}I]{kׂ9 y,|O >i~=wv68}+ 0Oq, g:)#⋃7yޔSo%+ wY=Ы}2?-o -]p$踳7uI3Fx]-m>~œاĻk4}.PhR?̻yԯk}z]lOSԺ^G:<r>k9t}mr>Ƴ {GYvߩ?O~,xR/qo$OPG588z}k.jޗ?u\"qew oYj\rlx"}"-g~pl[Uy뗿RUX-5u><_} 9z_wOT|:Ӄk>g}}G"gq]w/K}t˹$7YO>%Vq3_+!xCxc]/YY36?4Gٸ?}6 /;%|wj!~/ҏzˡPW%lyw]89w'HO>k,G:q w%=7Gn`w=zXv}'눒)? ps-yE<͑nf>;*|'m}r;{n\pw'oryHW wv^;~mx}{o<8~?swWRؽGw1Ց7NؗK'0k7}޹^/˿T480}ċ{}{3}ƙ} wmK/Y/yo<>npN=o]ezmh~cO·rGAUϗyiy7ڑ|̟m>'~ߴWG_2}/4>sD3v#v{=Qo?|quzӼw/9 vw:އbK{\x?97=b<]}x9?;_zבkr{s{.x=0$ygv4c̯[]w.<}GyN}?lux{s|z/>sO|╒CrJk7~G /'q|w<*|g.13zګ]>_zb/!^:~ѫ_}\'~!0Ӹ >(qcz<s_.'z4rއL;Out_>~u?.zGgƓ@NvG裏qsz)q~3^i_+WObgjG[ow?;/?}|',:^.a)xnC7>gׅG;ůdgĵ󾓙G< O?4#ܙ?CD^xq3I_9oSޣHUh>lOg3?K8Cɽ~8 vp_syƥ8vzryûO1/<^O{FOd䞾I|a' ȸ cךGOvSDR>*z']>l.h5!/vwœw7:rͮwI/[W:u?p?5r48wewGwGn:vhγ^]K|[O6eicW]'%G_s ʿo?DC$=po4>{pOnv'}8CٛK=^F.Gz2|p$.'^_>#Ooxۯ߂3gSywď<{y'Gr*qڧ'qz끫[xu~sUv\~cq'O?'x[O3Ing?#'rL^ՎK?kg"cG?~T-= ois~bvxAէ3ڥ?ׅ^'0o /mOogqs'>~{?^MO؟>v_o^;~Yy5z}j=i<}j me#_;#oodylm xqާ7AثI٧?ٓ_xƃ݁1Ήf޿P|B;]KxKz򇯓/qθѿ-X#\Oᆝp>|{FfH?O[ڧ9ָx^A!'ח_>ĭC1?_(wxR!K\|'k<}k/kO|P~i7~&c7t;Sq1Ϡ<kԸ6/?46h^K|;q()ɾSGAt| 5~ySZ>λ,:5N~h[*yʼn7eġw~tܙGåW1@W+si~qk|O~I߯GɣVgc~'NOY7nb } >|\O=rh8=qtt,Wě39X{xG?_8R;<_|UWyxz)9q!} p4y8ψ;:]gycℵ>7vxuONz}W\Ny6~8s>{/H=?/x>mrGOvݡ}YjL__DO\4s@f]ySTbxmF\|>O;y~?Ra?_}6^Y> O9<>x7Oh~{e^V>v_pb>^ ?N}U~MʎC-~:DroO=O&q?wWO{xiipHqZ_hr.'r2W ǹN=zș%B_p@p._q0xb7nͿ3;#_i}!)cxxxn*?78s}in%*'^˟Nݟzxxvn=.7/vO>*xpȉy"gF<@=.ox~>Y->'_+5qEE|_E}ĩhCw~#+y~._?6iޏgL_?7q]"c.ğ_<}'ֳ8k3_Gc?^ r>]p`5"ZO]7k3;u֟/#r8zYx[^is:);]LZGGN{]9N<~^^<_|篊G#-w<9]>}3?~dWw}gMǛ~Kw4-L{!x>Ck)׍7[[0/-^5㪟x eӯԟ1'ΰngoMv]K~f^u|n.FxwK\>Ҵ灾^;#J.ض(Oeym/WO+xj3>@?W8~xb?KgJԏ/}KorgD?T]+Oa"{Mr?W}y~^>r=i{_;rNOx|/x|>~0]~}|\O #^Ssv厝M'G7Rw7u]?ŮCnCQ]ȋ{Q_N'yy %OH]| \=-<\|B*Ew܀1n~m\?]O'r5^GA{g~Arl:*ߟ]՝:NUߒ8;i7yo[9y3"?-3tS/x;_Oy'|,oe?sG&;bW#y}Eɋ?/9O7d~}ڭ |~?Oc~H=xRGNzx.KwuU?ꬦ?pC_GJNۯ3Om:>pw?4fe~6Mz_菹o?5]úvվOFSo]w*Wk;I%='ߺޭޏc;y_ߩvI7<c_y78|,'x=|z}'֞8{ho/6Z=?9SE o:y9g%}FnZψy ^oU_nI:UgGz3qݑ~T֌W>ΌWC^_#:ybQ>u!>D /=ا3Gt\u3.G{9;AEZ#S9ƃ}+r Iţȹyvߜ7T¼|`x:bfsW?3ώjO n;eD?IovG?.Obiq ϝ~aA{1:Ϯj{HNWv cwv>|Q*.I99{&ǎ=Ssk7y`ofm~+u0z+%u='~վfW1yMy~O|W鸸c%xq<q r ^˩koz޳ g>W=!i *{彞/ ?xN?}':oW$라/D?{vgo[_Sǁ/8q >_Vw|o?{xe{g<>ZoG T?.p^<疗G ϛSz' }Ww#W}ӈ?/9hKxj|2O;[N G~E3W8w`I{c^yH;uǾi ^xkw] WV|쫥8/p:O3q~ Ppf^="/]NAIW]moyEPiS[\q\-q qߙvїNwhsTu'KG僾Re?/#7>"!ENoCG_'o})qYuw.u:c>㪿͸o|u={B~yS ߙ7-~ഫ뢻\=yzӯp^kq.Np!'αybw;N)+rHL:>xJ|~3xO9x9`_IxJA!qMvmΛd_xgșÓq=g%p@>ء+2aǯͯIoևL{;N3 /~v_xPŁz]TrHEk|mx ߛq61d,3.{x=>937[r-PuK=ȌG_:rS^ǻ+NSE;왲gpn܊Oј~+&nJ=ۯH[+s_~7zY1br@OFX+c?_⁞y+_/φZiOiޫ?_W\,u:/Nw0M!>d~O_oE6Ǖ:C`9zڕ%ߎc'3Q\8\pT5=|‘D?}WA{{8 hxg ~zܟn^<Ó8yoȟ8N|v}L3er? r娿'zG5Oʼn5OO OZ4xi*O~Tqv7/=>'O;#'nz_xg9#^ױS{}5~o=Qɝ^&ŎCμ|G;yQog^Yϯ̹W<:~~Gx"<_O8 }>i?gR)-o-QpB[|NC`z<8)grA}&+]Gc{惽s* yU-y4&M?1~ =AxK~y#:_܍|OAT<-jT/1\r_~SY|o~ZS!s^މ]5Q,uUAq{WN/].u=O֟N;م/h?_kօW\μ_s'N8\I žMOO>c{Sṃv$T|:x?#zK/.AԾ*3Ap}DC߱Mr9 NCԵQiwxFK.yߥ_O~=yQ87mw؇4x<]|#ت8YsS8/:ӌ.. Or‹^(Ь_[n[+kq? o;: jܵ5z<=ﮃN7grxKw}5?v ;wQ~׆o\:KT6qS<'ӌ_; R?>ib~c=}h?g_܏?o<<_Yg:>@v6za9O{ؿ~'Nݸ?_/ܰƑkËbI .ا74f=>GU'TuS؃Fu;2w\9Oi7I:S8} ѷþu}+>8'x=~#7a~_>ͷy|*WB;]y8#w򉯚~ttӜo<}cou@oZ d6<1>zֻ$yx ly.<~c\y|QǻPg!oﵟ__|ǝ|Ù8>iY܎J>]76Tu *7?yb=//=9Ϟ'|M;Tn9'~{>{Wz_v%0q_<|;_=}9xTcyop"_DQ?vi=UbUgS vu陎|zܼjq}u'zKX~g{xq>lƽN}6^Z̮%׮[1>W]5>~ydGxzۈ^oQ<kC~AB΍ =/1y7zٹo |nGxvug›o>zͪWTKk{'|S3n?Y>>`?Oj?sOY} 9vy.y<В u#9q:> u M/}~/S6No|NO^72Oe9]&g%zwY1{/Yw?Xqo09[zJ1*þ>Y4}[s蓶#[u{&C30y3"h= X=үw?8/G|}c|DZS'r K~Eow-Է|亓#΋opY|D >v>)ޠό>yfz%[|ZGqss7y+GxzF(Olj3O|׺5[׎'qdIM^{=QU]| 9yt";o_Jir}|,v/ϩ>#~WG|h#N>k;xU/  p`'.n%@nNh;x#FMy8R]띧_DgvQ.zOKH/u]7zx(}jϑ_~~jyj} ~'Oȝy^x<<{?7گ?5Xy6'Ÿ4_/fw^xw8oyu\\{ߛXn< n{:'_\FO_o}潱3^ٷclW#w}b/s}ԥq]>;θ'},_=^v8Z2w).;n~C9~Zv\xe4m샺8k|n?=|Sn>A5\7fެSO=n%[bu?}:o6q{[S6vg7SoW/uS~oN] qK?U\DϗM}yfzyNȧ?OGz֧m]ݽz^u5N WIު :N.anouuPn7}}[39_]|>Y3;`]0|j/ύ/'?:[՟.߫ivor[WOFxhkGWx:xqg~Nn|ZҮv7N^=CsY|oe_>Z9m{Hﶞn~^YGn4/Ӈ?Y.xWOOkw}En E61ݜ'_gؓ\:~ _uJ/<{?W]wsxa4y(W?[ٍc|Onko7:~w\On̛Oj+yu7,}bίv弊s{Fi~Ѻy'%o_d}ع=NP8WK3yyqNyY}ի>>7j@pJ>x9y/sė#7vv9ϸ^}Y/'pI{qK>8Dm;0w~n/,yE\>>' 2?u_tcGk޺ᙹb؁<8Vo׷]g9{i~*=5N9ފ^׏#|Ojo؅|:Gԁz{ԋi߼8O 7[߂ eGo4"g@vOrѻ~|x6ګp'Cz?wzNS3ONƯJy5=o:hzIxdgur\O{%^'W^}'v/C,b'=r ᅜ_zt/ܷcޒߔ~^ީq-6LץSǪ>!߷sn?3?x⍋ pM~;?B/ݸ/~ǯ ?}rl"W# RN7xk_GbWWOsች2;{2WK O7[C8PF?zD|}\yC +f=׬_z<6_w٭e 9YoڻkyzuKixῸe=>(!}Ǟm oߩx(~99;Y-u0[ܴ=~p`>]n8o?$x}0#q_}z8y|_u6qw~rS޻i_%/=s$!\z= pvg /-WJzܖqz>~;yfbU7):VZR7a ?xw}'3n2>OLb깖5酾|:l7<=/{svh#7<O/ŭGmru< ]F#Izo|;Ex]yqK|k{8b}\x?rnǓ56^xV7zky6H-y\\w;{muA=e}×)]ɓHM>6.>ƻnֿ~2twԉ|@~}?|\lIcϖp6̻z$U/}b^ˏơ7*,󓩻%pKtݑ|y6rk>57~=wqwxz:lz}ٻe~޴~ᵍ׿t{ڭ4O O╳믖 ͛_;;0/}z<'N9:^Ogjw=˾Z_z}Ըuv̾ڵsIucl2G;;.~:K!8=|#x;YwU]]z DuVĜnKklߗ|jTu`_;fw}LV{od\g3vN7{'{i^728'uueaļowpO[r=r8O;<ߗz(yʅ3oa{wGK7aWYThX;6vJ8Wd۞|v4_zO#ms<ތ;9GC}ZDUi1_Ϳ/i/X#7W\q}sv;O]uַ߽5r`3U_E+߼}䇿ϑWwu=u%:KOEn[}yޓ5s}j9<3y'g}8-ϫr5~5f:{+.kOmZHn=s1z: z~oͿ?=3x G{\}(vg_gў_ͻ'z=QGzdɟt⍹x8/uc-O},#dղOu/OwYnz`7f#&Ϯ۸6O>G'uW3ٝq7WzwJ{z'G?}4/u] dܿ޼ܷvxO0q<i#才<}{Ҧxy F95/yq?NڛFsѳ;}]?)9{x4QNӸqy>{x/hs0* wNjoiyEȅ5*^d#~ɟOuuӿI鉳/u4ٮ'7+<|WkVq?v}p9qٿ_}=3O{Ϝr/=}]n>Y#O,pc}Ig2z$5q߱SN0>i~8<$z_oH6~Q+IIxۣ g‡~'9?m>+M>_6;._}ŲG#gE}]4 OӖ3ϤZa)>KcRW/z5W9};9w4ˏ[ ^o<ױyoMP 95N<ø#w#? O.rFZ?\?"x}LI_J2+#O˩cU$߲M|7{{O7z$۾ҿ:k/]"+|6.Ѵ;G_*90nQe?OIm6}[_yeucn4x?G!Z)xj9{//qiW{U|}..^Dفhg-?-}7'Gx.}IbǾC_g{Z-ާoUƯj=gߌk~gW'9N;Foo7sz|#ie˷6~3byo.&+n>GU~Nz/h<Z/=5m7 瑋oyo~7]nW7rH|WcM|s'Fߔx]7-_ߛ|]'UvOxmR·9O.nӼݙ/{S?1v7[*{=9o'zeCy>`3y;C%^<=wgs_~~Tv?yWv1ޏ|n7=7|8;w>|}c4Ua]O{@GCȏ>ܻy.>K.W׆-酛^={}p&ڽnۛ[í5}-ũH\G6x]O)xo*Ղ^yGVy'F]ϾO/x7|`;(֌s#͛Sb_3qS!xzuY\⼟-|ָ.~q|䬜OƇ»مt7ZO[̯v-G~z38OQòKpo>n+_w7{q;LR䋞a:>_rv'Cӧm^:iD;޻OwO~{)f<|[ǎh_/ejg #"w!֙ A{'q˸7Y=-m='j{_nύ'3FҲ}ul]);w+샺5g7H_>?{>v8~q:^+gݓ#o"OOYj^4WSW/xuUj?)r~>׃y\=z{Ϗߍwu>/}-?:SY|4Gn2ơaUc>7|}ɇqo*.?1n/θkލ'NWa}6{]zp\O{m=]I^OOooKسiޛ|ρ'(F׺% -~ڎw_ORo4sn/#}—vs_ V{~iv%Ͻ$r?2˸[䕞M|\݃:qO~%1rFOOÓy:ftzOmxguk/}^y}\5>ތ{3x>puG<|}ƙߢ|6nE+z^\5Rc N;~!Lbg;l>soOOggs.}ơX<\GkO;^3^(rN.;g\}wL;Gqoة;C:CtrP:8"o*΂8G =;rH;6/l~};yk~}h/b_?oE$~1)k_ԭSwTo6vd3Now|܏\|o~~Gn-W6Xߧζ8N=Ὸ@u7~F%?k3zC#\^rl<s:Ǜwr{Nn<}W] |y/6k7^ӾP ~(<ތ{6qS^u^u?Mn.7=% N+~E ,~v8Γ#u]}{+/Wn#\c"~Bu|#>\>u| Sj䓼3d}؇־O_OkmvͱW3qyu^4<.=۱</?ʼ# %|nןyϩ7{c˱~?مOu_7_.C/f—xx ď>ząYgz!k?ԼVIźoz]XY>}sl\ٍޏ\Sq"bp&xqx/9L}ChyNÌ{ǿ\d'Sc܌;_>yꗣvn~_w?/v'.@=<n~;|yNǡF_#{䓝`'S!;vOOF/b?DZb}g~?9fS'N?D֩u\/@N?Z %K~xdiw<~x2y=vdA?:K9_R5EnOx1>tW};o5eRPGуx#ϾI_]7[{k|^N a?q-NKgFŊ'_"渳W|7ox8xl8׀#q#!I~߯'=z..>`Ҏ8?Vg6q7<۲kGq 'S?yc~|F/;]&qk¿Ï ?現PD2O:<w\Z|7dgUիg~~(ra^f|ȺW;r2OFq<;Oxs,w5*s'OϽ7~=|c>ڗ~?zz#㡾 |oاWS/(Nτ+_hgs[2~]mƛ38VN;KnwO~%S3_yStm7V8ozwl|Ro"~m|țv{jOWrߥ_uު߿1$.7ҿo~+6 TC@zoq /=7~xaG˝+:r7vu'νicvO_ȩeeqK3o;g;[#GKܛ}sʖ7F?W7^<綗J_ZOJ~vDUu~'oƯ#|iO>/}]G~R9,8߻kR^G?E{oҁ?ӱp̓uVޏD/.#<Om6q<O S/^u431p#3~@̟|%}>o3a]"eC߈++./&\:1ֵ']~R'^]'m| wGJ|QԹֽ'<Ͻ(w|7~dkݿ#N:;X~<]2?\ wǞy.=+^<%/9z=g <ݜ'"O4p:a\⇻/>0pYO#:w ><g~&kUsF>oח~6pٻwxS׹ws:BOᗍq^ ycoC.e; =;/?^+ӿ~Ї^`ex븩z|0{Z?wܽ.\}xJ?g޵/_WPc.GƟ's,~#<~Rx;3 W|x3o!~OOz~zp=> w rq_+o_GNv])ׅ'^\덖qm{T|3'T~Ը6ωT+G}_wvJx#-ԇ > o;oT~[p9|,q'3 \;'1y~6(EGgczn[{>p-_W]_?ڸF+S{4rG68ۂ/=8%4%87yoAgNMAx}>i]yy>]=u9Jzzv1<Q|=oףR";/8u<3rbWkrf&^c^CU? ?#37؝:C_\u˞_gGu`x,'D<8᥉3Ց~3?Ư뷵ד-8o<-~fz?XG/}vB$_;>y vHީ.0IGPޫeȓ&a1O#hĮ] +'}/ >u3S;;ӿǵ auRYQcwO%,Oa_Mis~ vPv9 :ȋ~\/ѯ|?K+4~lkG d'|s OO83\㏃+<_ɻu}3{]i'%N n܏>vMxq6z?5|%r]CWog*Ѽy:'z]bN~?r+HN#Oożt>cڭp*.uُԁ[/|Yo3xHP~OfEnp9qwsp'y.?D|_3ReI}~ǮO]s4|wkoo? o3Wkz? >!Nޑ]nb^>WqR?#.5~>F/! x3vP!9h+z]M7U^n~ߨFGyݎ.q^zw%?.~_N _G WdB71ěR'>c7U;JNEqė+cѫ-r--$?>O~cQO˚h{ O]_~t<76G5OmEwƑCn] RwaÓ䓇;uJ>5t43<:#+;x7YeYj_GP}xή f<ٹ+}ƣăQ\]rL>/6)8q/P#>vJ<;D<3!_=r%|W,~{/cwK/%^/.oQ]}f˙䵦wd?Q)gvnW[ O'S OGrza:e=O7(urx =r'J:S cY?xti7cF~ɗWIx^K480^vg]_ڟBܞޒh^vexj7i>Ub?ymFO^8P>ɏ>_ 9u[>={"NߟGO_N>Ի]"xɴ}Ϳ_oȱ8zۥK|Dܷg~ī:O}mx቟iw;=%?j8~:>MG?"ǾW1o]::ljϨuDs<2x=8Ļc]~Wr.?u=u˺c_$us>@txj2~8OsgoF6i܏}|n?Auy V^Q{G3Vʜ}U^d?;9xP+>' yχô_!uc-s|2zFq ?kO{O|,G=Q=Gw< -6~Ǔȱ:6QOl~1y>zS;XT|sK\pʏ3~s8W.?Q_.> 2|a͇8o5n˾T%KW\zϼǰ[8 ^:׷{O y&S#q=svH\V+D7G?<9#u|3O;l:~_~J ww܏+y?% H}Դ>DJ݂wڡ/+*Ov'q7~ӞS{.x:ıگWoG8w]O[dcGvݵ7_#?EG)N W.P<|&qwW yVq=|}zN^ךh~/;rKG|3ϙʼnģ ȇFыW?g{/SuxY4F?6ęϛ_պoī٭ާ'^IcPRJ"xWjy ?s|tj=W(V:^ǿK*e׉Q<3#_?ϓ$vD=xj=1{eG5{cAt[_>{ ç:eWPױ×3x0\;xcU ‵gMz΍? ę!!O}+S9/tyݾ>g~#x~NOK?.C^0_N~M45(|4ߘ,Rg-^# 7ǚv%V~Hac)/]/I=WB:r8]VGQOG]|I<鏼qN1ǡq}]YKN!Q~Ѻ]5حq"/+-=wzUؓɷ_eTiG8j<Yi9&7V}v8_۳[vO?~mYVJv( owŇAN]|z?$|cWލU#6ϯ|~C_e;O^=q]nG5rd\:Ιq?yGF_c~?r)~vֱcvD\zfɁzʼnW9U~!㵉p'/ o/3W#\OK{p}eC숟jG.=yT5~hOU>P'z8/rtxZe/Ա+~__bD\e/VW4~||w~\ޓ8?#>eķcS8zdyOE1~`;a_y鸔<8!%u xW>\;̛f8Ogc:U/Y z@K=`O.q;?F<#vSvExN:n=ŗ'q&uv]o^]v9+5) V=}3}%~m|ǵ٧:@;+̷Lw zKƇe"wz>ɴ$rYU~|vl=­~Ol{u˱Ļo||okOĭɚ7#WKd78r=90ظ}{=Hݿo\g\9ٱw7^\}zo>K^z~UIB~zIo'W_B>3m+uꓳuԝ:c牜u¯kyJ ȗF.O]9.U<󽯂8OOswf?שߌ?g>>!yUu=U紋/n~g;Mz{~ǻ/gZ~J=Unz]sG~[^O߾yK.;=^s?z}N/ϭ\yNr<]unӉt92<]<OO}Kt]K/=~~jY9:uxq?;.y}6qn}ݱӾ\nߥxY=ޛqߞǝ^۝_uK{Q/(^x^.k~ly;󵙿:gG{]n<~G!|O}UpEr~.èN!ZkBwRS:myut}7mܕ]=qqR6m۩.UZVgC^bރ`=}Խ[': uӬǰJԦ>UY1z#GK WGXu)֝Y2G{S=}'wI]fߥnzy.VmgS(M3.7F^f}^zR7fЪOiT=ZwWŽ]tn=Fc'vux^`Wv>];v}4^]7GٵuGz]G]=^=Y̓y<;/׍ߓe^Kw>Kڥ?O]nz2Oƿ͏{9nT[>>zyO.qg8/اg Kj\oxD<< >Ѿ{~3/cWʞ/wv__<j<zv䔟>E/қѣ3xxC=ɽ?[s>{nG7pο 8b''鎓3[{x&׮sr?d\??9kgi~fo|E~yK}N(^/dO˃7!/VjfS'osoOqX|捝g4]쫸8ﭸ_C xKeڏp~1^>0_5wgا/]q8z=,-CY1i%|F-/c?qL]~*x+x< b Y;7y6ۨ>|'賱-xݷU qqz[?tGlM=ӕʼ׭vWx]~W$^nN;\G>[ܓ>)x_z[z~*~ W#ŅOo;ŮO )z>cJwz-= Ҏ~EeynWo#C[޸~z^7'x (Gz_r㺌3~ a|ƃ;~T]C_./{S:yVL_83;,o߬:#<#xj?Wyn>k>8c?D^gG ?xb"<ÛS/qOk _߉$N32qs=$3y~OƟ?'NRO"y':jx'>өZևLy~⣕G*><ҳϊoT{Gv:O/NL/TO}/ /.LIs5//_Dϋӄ'r>U <9HټnJu#ȳ#\-=bzqu獿O8 'xxN?G3xwG[' O'~]I]?ye_OciڇyS3S!r9Ϛ[>%xI<_8a2{3Og g<]y?qħO=<xy9G]L2UOosȋC<с}Zfw_v?x]ϑwg<я7.7.%}A/w~=򨩏.>R8ė'*¸Ķp߱kn8O!e|Kolg{?%YQ8T_Af\\hwo᝟gq0x&^5G~<_K.eBo~9I~'MGow8Kǒw>(*Wx,zL~S>3nO>4$%jtT;|sգNsxz㎛ |*~s+F.gv&Ux^vԝNWT~'1~Nc3\i'd׵[K7o y^ȷ:֎n^V{3i,o:V<ֳ/foeW[i|pH}팛|轚9"v2_z=-[Ҟ줸 U|%zd׋qT~T <÷ ,LOOgѓ٪'mcةW{sIIɴ0p=P>=$c|^c`'?[@>C: |eTrZq*v_ ;(똦?Oܿ9O'puxݜgz?"~}5''GEiړdO%U^?zv}OD#BÉ'_V<*;?QLQzO3 *rq2Yrv<(>?>o[rf>SWY_88ȓj???N_"n?G&/ԼwoMKu _TLx~WxL';_^*u`]nœS)xW>|e+.e<;'p}:xټl\rCfז q~ٿ"yWK_w>mOr-F_ި:ž7]ԥn$ohOz݂-T:/C<}q^#у^j? '|4〓7Ggg<Ý<"-}vKO~ߴw/ռ˟O~״=z}T]գ- O2Ʃ$ɭyu|p>ͣS8_s!~?7{!O×'?W36ڞv=RU<1~mS_s߼?U-/)_V~ۧ*~-xZsxxM|֧yO+J_y}u;G{EYwX>*k|#v`;oOf~G{=Wq]_9#7YgZ=-xZTeCq-pH'Y2yf~x+こg]]2Ne'|e>9.!{b6wW_iV:<.9m9 61x(Aǧگ^!y縞%O8J<}OUE)z~pՒ7uc9=Eqz N;^ʮ[_4yk|i)]/y3~Η%y^nKG^g>f^ěcs>WҲWoۡvw}4OH}q؍<s>?VtNȡy5~ᩉV~큸FA# ͟#^8lٷyKU'J]~ܳ/Sx@ f^ =6?yOƣT5="^~xuR֑zn4G{</s(<Cgcjkt!8q 9Gxr(ɹ7M~G*_>gGZ5/JיxF~Ñإigޟ4Sg(#]7z~boѮvg/]ycsy8,x}(;4u׍*w}տ*K{=gũݹ_6sW6*u|m_Zo3j^\7!]W+^otyag\nW+MzC7󇏺/>pTOӯWz?&ݧד/)v1_cGvg<=|ޯd8^ 8ab}:}mʕw6v>{/L3x=+^V;vdG <~+ŌK-viia_ȁO-O9;/׬rZ=#>Gy)x^cۘ<ZgGK0oce龒^g?^C>7hO>ůRoZq6AC#~^=x1qK=㗈1o%<omk`>u2]O7٣=z_m\1x7|%'d>cߗ~ųQ؝K\%n1{|UWUd}q]z`q8@RWwS>pE8xoo3x?O({?vܱiߏ7uM+?>6Gp;Sx:O /юD/ƒX/x3c_h'Ǟ_s3?8j >M|]>CN[~ yp?#8s^7').Ur{@c5?y{?xG|zBƃwL{ƾ%|~U<:K\U>u1Wb΃, +rd'Oǧ?z5ô[\E;GI2vC| pq;.U~t^wa<;W\~fa|Iz^|gxzb;#g4RSgK:x%>G73K=畞ݩG|o'㍜;5)| P4F/7SGQzI]gcӯǫB;4sO\z#~~?HϲvgC>g7;7H]%>Syzpψѷp#?셸</ oN:%_Γ~MxWL Ƚx8V~kw_KS٧aZgόsn=Ž*y`7]ͳ{sd6X K_wb۷+<=u^lP~?۵i=p.} oqw"oW3} ׺oCۧ手UgAx WZ<A.ּ9/<`_^hv}=ܘ~=?2<Gcxԓ$O3ᾏe6yWm\|[µ˖[׫O͌ z?^ow'ćS-~*=S\{'ry]x7x2/?x#^.$N׸::}=c* EʭI|ehAWKq;<[s\g>gɁSyNel9yr#Gϳ/.zH{vvwȡiwCDm}#;/*`>_5c8=x%2z'R+sOVEb|s8?[?U/i<Ñ2^.<7{Gg.Sr-n'NIo3G}o;e~6o{ϧZ}3wzyK?NN`ȣxbx{›z xX@_~C|s?ziUi~'?: }x,8EG~z<=ÙG /z 3zuNrvt{[c}^HK+ }{'ns>\ ;B/w:;^o`—]իƓ#zmx"W}}YY+Cr%dg7>8}L{G[oxg}G$.Jݑ;G<~%-'jۍsl?p{1G<| ߷ o=?mƅ\boԗ;O;/.OK8WѼ8Me7ICS|/i>;3ZGU3MNg X^O{-a97?30P__?;'M~=y!>;s_3>xO}x87upzg=凷ލ=xGxqS}ć'xz_#>6N7KǷf<%9%x;nΏF!qr>;(%ΘGy ӎgkq6;>jx<>;o󲟭Cu}9qfcft|+Ə8h/J㇌_O<z C晞`u}#'쇺 uL n'p3;;q.poYO7~CdQ[yɱa3OSDM{տ;Gx5?,5~# qScWdK[v'}l~#. /]W?(~H^v}w}zk74_<&zd_ܾq]^O*~qQվr3_[ěN٭3+/Wg|.;;$n'?QqSz0^]go{ק08^#zzzonj3.^>}ۍ}8%*>~~3^W͗+|w/RgqE/|TTݠx#t:籿}Cܧoܗ?Gs?!}ūv*{ʮavGŦ>jpOߓ[yb7EFkh^3^*T#'j/?W;k,z^/s]K>W_Ɠ^ğǞ#3yfgSGv;_xUG n;h5vQo),~ Ni+qq{.u}/7N8z4?+W`){uxCƙ=}H_A?.c\ ΖJ?>?]F>O_p*?g_6߂/<}C?d|Uqo#됎ptxT/pL~ ?ۜwΛ?"{<up*bu?x"!o!_#Lu5ѲGƇ^=Œ,KxкvEq;|'^qsi7 w}j;x_UVܐ]v~?8YE]M*ye[~P_'9ߑBx,|sP3).H}6rPzah>q_w[ `~a/z>wxogS;޷[_1/E>GƏ'7]9a+> 7~wS:^x!$~qu_x 'I?^᛿&K"*P'1ϕj> Ƴy+g6y:ljq`!Guu=X?vx^:O4fLjICXC;MϱG䐾s~ov_?f<3|O^Ƕ췸|###&>M9s|?vw~0"K+W/\ot*w}=u;?i_'pd cGzr{$2uxsb_O;y}GCȗ9-<~3#)MC18Or]/e7yā|)>8^ G;\恵}b~c搜\?Q?¿x ؑ?sP7}'m3b/yu'f|^X~.zeo6cg#:Sw-g|pd}|ϥ/5F}ί=k޼:_}M>1#qqiើ zf~=|b/H}؟>>G7$SIt~zCu-)];|SmRW2K~q7ѿ+5إOO7<)8:n~09s^Mu~G?-;ʻyKLhzSq3ީ;#Wٗh׮=u(O:z{yׅ򟂧7rJhgVzev/c'tqTW=;׌_,>O?K^~+>^q9ygO vI/WWvtA<->x_^|q=}8^,b?Y4ra<ȣu;e5͎g]7ș>uy1zcgqpE[q;n8zyoڇn{;^{M\ʏL\n>卧QyW䂾5Kܫ3?>};Ay hyu5&[ 䲏og5pG[>m}ɉG{gOӾ;s#<+~!nU]Z;<3>'97O"|}K8. '>.?uDp>|ϧNȺчx3_wOsd{$>/|^sI7i|)8nw~J_8uMm;9;'>gާ'_O<G?G޳9NK^E.?$7p= u߮z&s_=oiaط=k sg_Ǔg8_pCo_S'6_ЃU/6OUO~x*gX?EI>,'=C]uGW4_G70gk8zx'習9W OpBkO/SIh}q$v>[/0uo0̫s>tW_a//㮟P}J-z=2_~GkN`a^e?}e7O7pXC;{Z^_mum44-JAXܵ>yG#|8$q/AO|#x|UƗ~OطuƏ.w~'?/uƃ}t==+գƵ{g}4}Oj?_qn]?? #hn5t9d捾J~ʗNf<g)}ƣTxzr'^|n׋Oe/~\52oϼ#%=i/y|r~p?~~!y5x_5Sg/_ݧЏ '?v=Q>K6yZ'Ӿd"_ޫ5ἮC'/ploH%7y_pM C/W4/.~bÓ"~fX~8`/oFO?7n g|#=m)|~||SyOʮ O&oNcO?֯`/'so^="?<Ep?G'7}O쀣lk &|4LKk~|?s&?n4Qj7_K>mu"]#v=#\>ٙ<o<*6~CyDϧ}ozj<:ҹomƫƓ݀^g/3|1xK?i~y>xOsh#!$(Gώ>...g9+"Om)oyQ_ OAuEpR~ݬgW_Bo~֓jua;~wFOniۼ_޺O^?>m|ŏ,OWGoAugwW.sm䜝' "K/?6;:;./|3>kڏ#!b78 pk>|kSzCbxi_]k~dw䷌;󆗰k)AY4l̼--ƿT/.nhmnb䄿xK{䣼4_>ە[oG2k?u|#?󞔩\ |KM~SP>028'\NWW?O߼h5ok}DﭓhO+O}Sqg>?뵗{N`d7h=L z6o+O]dX -pd|~(=pvbǣw><[|w?^, sRw7+Fo:WrKO} zSC,s8oˏX^t_]9t6??#OILB3“ Osf:-n2oS?zS\l\|]:q;O %Hg[OcO?1 OZO{}xRd`S|K߻yLzsG|=>=ǒk){_?`wgo/'h=?;/}Oϣ8+~ [7+~_+>~d=|~2/tv׻Un&>#{cdog>Vxmg^Op=op7^8˱b~x]'*?Wzl^L\I 8\׾\˗pvR=9۪ͧ})x3ŸУ"Nd#{\|[?Ի^{Kc\Y="_6Mݘi';jU|ukoZPy=}vtջ]ޟRΦϟQk~ICR״||]5OYSޠyqG`u)yG\?qOp>7յi6^dz>=%_ x9Ŀ7O92R|%5p6k5~RF) ՛_gi[={Vn&zs?}#w|qwק?px*7OPA|٭r? v}^k.{_oWu,qywDz~GT[x_7_߸4IoᵳOy/x_\Oy?o~xpd'>o:}qxD~GӮ8E5 N.ﻯNxb[~8<×< }f߻9<OO}#~d@#z1{,eGߘ_g5 w=tŬהgqX;c?yt^>{.߫{(_.wIa6?YOr/^^#wWjqcjC|ÿ|sor{o8Tuc6ܷg[F>^<v=ܘڝp_.~}'u*晷0q楓?~A-[|[điNI/O?Oϰ쁼)ypto인_"~ώW¹%ŷ[>];3o8߅'vO;<<9~0t۞SDAv~ø'lO?uszǸ'hoS0nߕrL{}US}~{Gȭz;.u|'7viCVSԋku|i>:33.+~?{}]>Gk|2|~SG^my/S#?vo?oվC1<|z4ױoϸg[;`թr(lG7+.;=5<̉u yo8u\o?}>4]I |EK?;~yώKǯ9?dϛq u>Nz$'}|];_(i?{띞waG}K׭]oVEf;^v<=<n׽qq\+ǹSCn=V^:=Vӻ}<xcCwyxkj|ڎ>-n߃W|l~]N8ߥvO/=7/e.߿x.>xyE忶./l:~//q0.Np_v 9.?O5w4'üyA{"]hgnC9~?z-WnO?{?xlտYsuXGǙ/O$.tk_޿x_nݚz=:>Yq2/1q>[/~S}e}:]ZGՋYGE?O-7RW:cuoT>WWsVfG_'=[Ov~GEZO;=T{zօ֯֍wHi=B< QG ~n4v{dGsj<ط]gumlta[篞Kq]?躮n}ק{ڣw|O:O/u#OƯAN ~~?d}'`c[?~z|{EȞ~:=ݏ_Gyzǩ~vMOG.o݇N{O9l;?SUBms\?xx]<7G^7.}':1=uhw?Y@/>mFxŮ{yπ[b]7y0==ojwl߁L?w(A~`h\g<.0؟Accix¾}c~~N;xe>g~8]3^w\fď {ǟ4Nw )fo~[;Gø>EG~șY6;qe pڱڣ\>%#;㹏~/o%q;쓲v#8yG~;.D;2rqqpkǎθ>M?_v-w O:ͱ|= w+䛞-~ޜg%?GzOG}kv]&޲.}{=RgWG+GO_{9H"~Ϗ0G'~ ƾǣ>/SЇi`{:'?p}x b@~;o/sv૵yxG+ ݜO?G8g.8|~V׽7q/1Gq/1<7>z|5z?s>_/;h+w!{N~>y&{ųmx+OWx_s4lx"VϿ_3 <y)_#oAO~udǶT_'ȯTϸCʸgx?~w<8n=3@K}>R0< {_,)si~cax?6ȃz<WǾrCo vuֵwAN}B~߫I~y~5g-h'v'q~_6lrw7^4럌>^9~Cw\~\""q~肧y<iP]~o:^Ʈ6?atn=?:ԍj: qƳӎcv일S*Ԟ#/2M\oÎc90>\| /!-8jo~xc6?%~qnuV|x:óƑ{G{*[|&Wn7h^ Y_ݗ=W.UI\~s6Gq^uڵqru-ϭ=O/]"ˮ'O^<5ߣvq<$O#c<OOi6i4IM7y/goSϺ~kgW[ԕ~П~繿~C<w565e͋8e'G;ol~~ߵ]m[oNgcË~ތ`&W#-Iq*u=Yމߕ>٧~_˿%K?W;#<'7xaOWnP1o״~7 }?~ogu_^<.`G'?yp^.nial386W}b)|9w\3ˇd~=ЯtCޮ1ᑍk7N^r F_{g~|vuYuloT7$x3R ou?? W4#x{ O|i(^$N޸I38wl\1‡Zx}x77u1{|6ޮ#DZd_y$y:$~#GpGn{(}B\c)z>x[-N|+>govK'>^~pO? qG%#G@c6{ע獃GcsY=_L5^EIWœjnj\A~<u;3~v=[yΞCMn"gvsWC/B:<ē˧k臹Pz`#W Óq2_OUss+#W[$EuxZ0_#v ~v?<ʺWyf|[Do3;߮yzoF7-18Ϗ6Y_7釉kɿzTZsp/F/?~ ^ߺ\\? w~]Oaq~tύ#^:V93#/۾֑'x82NGhG- vL}8vYok'/޵OO?>xw)|oGqmſxWChf|;y-B"M<>[1rlac_r~pd{?mAZ hx^Ozd^?x&kkg#Wc_x̿aFokq({y}y3o%c]fp p<~>0#e<eu'yRGa/7:Zq+a8M}T߮ Oz=>rƃm=e_׶Q=HOY0鉋:}Gv֟~"k7o|z/Fz/Bcv7'K;9yo=д?/֗Ý?}.>G<5=Xbڋ߃{9[;QڧW8,_?.xť܉ ^~,<ͱ{3ůɟ}zraϸC&bȯ >,>,?DNt/[̺vA^m+9@Mח v-u9رe3q~[pg7W?Să|I:B/)l]6=S^̓V{w/~_Vo뭛caKPh:_wqpΫ1<:_=ZMjJAv O8:7O#/ƳKw <8Fv7<] ;vQL0&_-Urw{O'_;J;߻Գ[qv%nG.b/>WVMG8\]ny#nx?g2_/u߻O W݇yuK!yͲ~bl2zjq[<,ë'{a'<鱗OʙwrӬK~΃x+o'wu9c?:wݎkVOxg^n|WPWx)o:Pqrs_y9p? WF<{WZo}!q/MR~m>cW>SO Osď<8K~{ތR~؛gu]+Gx5u!:OzNv{3Sx2嵞O˗?)顜|=n^N~>u Y'<ɑ]vׅd|<'~Z9Y9_g!?tO8KC~:Ju Rb7Ίr/.[_ O>O?i'υ'r)N=jwg<'bHָTw:$u|FvO~ {kI<;?׎\}WO:zxN^d3ɣi}*0Wp՛.O~z<إCQ5Kc^+*& R/xyux k>Ջ'4v|ގ~aW3qO~Co{ FQG'K#żOx|i!w=]/Isn˾?i߇n>0K ?csO^[.慿:o[ę%w~bׇrhw}ɾOm>5~J~TB#>?/}*wO_?}yON3?~'$*>ygy}ع]/|"k9]hzDq/? g,^j޾+C3nUq 넭k;ޅ?jџu oX?[U<_?)q=ydXwwr[;}?oObS}OvUg\◼>8~^_(J#?zGӜxן ^3E{? g~?\U{.#K':v}+?J?~O SG?u/viy`&}+˷?I\3~'~įĽ<_B=v}}θ}k7^f7NzCr x'6o}}ݨ3?\4v 7fݍyθ)p㪽__n//ZQq =l#OxprͿRR78,Cs7O zC:Wo|~sQq D i[W2Y? Ʊll{R^<?}O#@qn Le\OЛ?ټ}?|6VQSҸLGO[ o0ϣe?լo]5?~Ounl3[o/9;ы'yx]O>jꂲ/lH:y|.x}o'?Q~{wmNQN@;C]z$u,!xz^y*ֿ9$~0@͓טOis4?]%9x>UO}y:rWq׏7;ьC^S!ϻ}:Ի>>P)7^eNyGO__]o8Ap_?)M{/^ļ;+Z&|~B\<=w;‘_K~O<} _u6R/_ݼ؍z#? omso7z]dcxuMKCF{iyar/W~걬 O`|;6okbnɾ"xO$o?9yq⯼qOqF_i2}?r_n kpgwW /#^#u]E>5>q˧=g[j?o'.Xj7w'VO:?:OX|,?o>%//_5~+H].~1?5})<Ŵ|V]1w: 뱻cJWmߜqXcxKo7)uYw'vx_F'3ݕ3y q̟un}φ7x䌓:Q#p0h{˷w96^?qyGR|;8iˑGk)țٳĥOO^uWsƯ}G3ߨ:v4=Glմoyb-U?7? ѻ!u;NYw`viAp{YO8Ot<wxkqϘrźOԭxs&>sY|,g7 9e;o${?| N/kW>q#1y6<3pz#4~ Ru<~ȯkߌ/T;I:}bO{ߎ=~_o%^!CeӧN{ډ'Oͼ۷~o8SGo~q9|8wQx=@^!NU<彐<:O,ϡufH__s=syx vH~<ëu4>p%.uܧP _1;jjcƅ{vy?>fG3#{:ݗyyx_+}F?xxJi_j=ߚ⹾;;g66кqC8iU}zw‘rEnr_>#:_'QGȓe_}]V?A#ZON/wSO~Ƴ>P;Vg\/{ey⟏~/ >ȁuߑ=Nh>#r/>bȕz{\R[4v~907~Mݡ#g33;+2|`v<K?]<|62._<<;‹ֵO]y𭿮cήg<f<%s;_ϼ:—^'nPP?o^AȁE_?p#3;\Kp/s{|sܔgqy,{s}y/ܴށ'\}q/}(b> 'pOofaiexpt%1o;ߟO)r@W{{ҷ'޸~x7|BxnfgL2/Y}qqn<pT{֋k/<_->_{)+ǞS_/"_e^7q vy f#߃W-?>8_)~1>&|Ύy ʃ7x,;ώw#hx}j79ww~^~yo>/?:h^?py4ύ;~x uSrÞNw>f^nG?y gwi^_r>xgoo~W(JO 5̋vG('FK^|Ž,>G/7+=xiq;ptI<ԏ𭝏;Ⴧ_܆^xџf/fpwC~_}ɗxgnj/yh;7߯oǟ{y|?b\'3Nջ/'.<8O3aG+sx^< <#2N68&_k/zr"n'ylcw]O9ė{\Mk;_9{@ÃqH'K?;Oy'~:Y~ _ƕ_?Ѯ GM?5~z$`^{?N|8#~|!I𗍫;?~N:)|'.`/d}vL/>4Aw39S)q& s[" {μ{ev?Oxrϫ7ߘwoğ+Å#b~ O|;}7>M^꽉/w牋W/\~үj5~믌}s8=7+N~i97v^͓q0~- _EM{}ҸagrϮ?!|v~85.|aN}+_\F?Ƚq|-F̞7~/O岏u=:ңxogOx؅EK:<W<[cE?y vx/FW+>w>0/=~}ܺ/pGGx w9d糸c*+w w߁#>>]__QWEoWz@_>g3r^Oɾ˙{S:yYe9'&oC^ r-|:9uW3pX;ȧj^N{O# ?:_pbOx;}sMT?>COhy#\}0_~OC˸}zƟ~~>1{xjǺ?܊䜝tǍGKv|_7v8Zm_p~6:[>qyn gK?^]zݺ~a<{ 7}J~y ./uO7^ g(p O}Yyϻiy2NƓ2_w<)}Ào/Sw=}<_ɏ~;zzxͻG3䊾o*>~c~ا=K>4uv<8zG6-1O: OӼSGF~BpV?]a?s~tz]sʗl<|?zzzK+sE^(;zU{/9b\qt|4_/e =7{q| w[?u|x#z +n6n<];kcvy<6N{ޯM8'? ?"[楌[w^S)ƅc'.5֫ϟY>-O3ι؟mk~~ϔ8wX}5X?bqK~k:dO/{;#n0.pBſ/O>lku?}=A>kW 3Eɸב#|~O_FNov4^t~:.x"]'l/p;yfqi;j|k;ǀ-ϛO˸t~UOKO?w];3>yp c<|q ~Ͼ>3d~WOE/k/%O5|d?gk27qS 8̏ou[++^ܼ|ޣ0TJȹv|;OϾowA8q>y2?OGc5Gšwzټϛ\;O9&}3;Q{n|ǍWw~rl]دyy:ybϖgNxh9cU?yr|Wy"+{^,uw;iG4ϟgƷv_z]{i˿-4}gџ~f#\~7;~i_>q]9$~4}k}+%I.鴧u[כ8{1>Ʊ\[`/ߛ5}qKo}p`<)$yWG^9z{v}M'k_<__~=:rkI7~`oOy,_Gn9H[Gw"]݁r@nwx۸߻mkqb~|m1~M7 Op_߯%/߳?q}H~Y?oοÙu |~ݼGo`\Ef^~!$޹/ȟp=9]>1f9oFy۟c:m ߻?}~97r/MN9y>Ǽ;l=_xeiL_hG]z=%/G:}oy~ƎpDZWOnmmN7=E͛/k}t{?-h$^xqg8$?V;.;79d|BQkuz] c'.߿8JN3Ocgz@{wvjyom<&x:s቞)jyq&8??2Zy|7G#\|c9~H;UUތy>dN~% ~IƿW;<O#)wY7t=Sޏf<‘=2p ^͌v Nqf]G3o΃W_o2G>pѵ#ʏ/-ܑӟ]| ګn#خ+ uƃ^\@ݼF~䖿pӍ}7k<ϱg!79ݏxoW:ٸ'q2}S)_g_Mu.燯.pK<w }?|V?_~ݿHo}<|<-_>ϻ/?t#~~z&<['s=ߛՇ#i?1Wmց'}9ٛ/_Oq}ym>yy^;C$ vבzy}5:ڧGv`o[|';S'Nן0L8\*G.|C.uӞݯ8ivI.F8:~%N"wrS/M?zK} Opv/~0c7\Ə>8Ƌm\Y@F~7?x]wi.[3?;{8}4_[ȼ'~Gr._NJÎڧ#??ѿ CVoXo28gGo)s[yw{Do7Nߞ7y{97/COy׶񋴓5.Bϼ;ÿ/zuox,fK׽v3y<7.NEWqsi߶y87'C42o~{BsqwucpAO:|ga?r8(>5z﷎oo۵|崏 Oy_tyl\cbq37ޕs=>Q?㻸Q0* e94υ/h>az-e~q:c]GvW7S+7jnc|>՜ovJ39~3yf'᪸opu ;l3YZ8jHuE>Ñ?~gGz|gw꽽?b{yy{WB#zSXxo2Nۣ'. AK3^{;G}4O}~o=9zts몷-,oqt-yΌ3z]!~Cyq8Cs$/}/ƌ߽<ڙ~o?g'pe>.ϥpxyOZceg˛{8v$p?n0+~ʗq=Uw Wߘq7xRwKMr;߼/qsc{?~?rr]?yk"5{DOz}57n6Wɮ5ng_~'}wQǿϱxr_7#-?{_N ~e?>ոst<^8rG\pH+w?Oʗw}e:_|&=H_q83$xUfpiKyrOӼ:tgg{'_|伃]ޟi=Tx:/͸/#ujǜ_~90n>\w;GeO8KwigkHy.)_R^k3Î~Ws ƾo}ݟOOty^9y7"߷>똝O^}>ww5c:?uFsGx}o<ѻ=N;~0DEu]ƥS[v|_yo~cy`Z={rgςX~ߎ8G+9i]r^剜W} -=ٯ9W;c,9ؑOf<.?~;KGkg8<ѯ^w*h>kvz^އ'Sv9GzW?4G瓗"W1~F;܇zoEwN%_|kkӞDEvi#㙯W;쭿_{WOu 79 ?4qi?dS俚ngX~soom[~gk;߿Ñ[y}|?zKߝqӷ"?[yWqgލ'i={d^97zl<->~y~󾷎}J_['[u{?ݷ>?<[}@?xOg^ƟoO糿۫Ov{LE{;Y}y9oVNysEݐ?;x[x*nɇi^|^Gd ]ʇkǶǃHW~xxߓd{7z(>-x Os^xSE ~=wG37ѽxZ?~G{Wo%Ou9(^Tޞ OϩhG_wvT/GC/87wDn^>~վO/*O/e O/z|q}َ/k]m=ĉ}o {88Y|Ovz;E<_* <︝Oʿͫws蟛+VI^_Y^9s{2O^r_:D^{nx7:su>޴Ǿt~nwssͱvGnGN^7NX37 NgOa<Տq~@p^i|:^뜺ߟscct]?z]qZU]?u]_~]W]G?kQ Kx?O?O]~w/o{⭿Kߛq[Ӿ1fW|9\o+Ygu]/X: &]X;WYv:f]a=NAN|sy5wx#~8}OFUhƌm~`4~6rq\{zoIi\:Ƒ!|NKn:%[j#z9n:r{ų]dXZC.f:[qWy;Vs>7ʾ)> HqO]=gׁgL]Oّsz'ɉGֳ~Ov֞o7uv}|v }ʧߐ;9zNߜx}ێ5>}Ϯ+6T^]={3^}<]~ޱn Ov_c/ח||;t 7ޏ>>r͙W}[p3[@=VF9.?:+붍21OoO \{Z݊q8٧OWv^8^憼x<{q?JHyisN4~<Ӵ?]/={em^c~!o~@ⓝS^;O{ч9\s_DNW^OCǮ}8LUWvM>".D/Mu“|%}"|TGˇ?1'$n8݋'1[/~ ig>É}ss^x?8~ɳ㲹7Oߛ~uK{ㆷ3l6|a<<>Jky{ǯ?m>}z$|ޚF8k?wzǴ[\v}48GXprw9'U|*zYd.x8^}`>"0H.O~Q>bx7 W/߸O?ԧ=/.; =~ NuiOvJ y6^< c{_m^xڽrvg>Sqœ{(_pa%l⧹]f?n{pgm6~y{gw?_8<6^oҿnc[9v3,.<m{+.-;s{c uߘWGKy'[N|NO_@O/GGYfmF|6M]|VZoqskg>xSٸpLSgix*O#)LcuN~ηy>;x=F.ow}^_'<||2(NƗ_ڕQ<|lώ5SI<>q[y<|ޜ(_F:<*o,O}U}x?'Uxqwu:T?yuu>wJq/[9}O[8yڣ<^~} >8 _>k4>=[Z/@≮KCbOSWGqc[HnԱg:*Vĕ{8xIV?>Xu7?x/ ~.}3ڮxQS=˭ziiB{0;Ç{SS7.N<8~(xпwB>AnǕc vJv2~lkzָծ}{o\Y7'iy~q[+xQȮ_QOdj]K_DNrc_I=_83uOy>#ƏTFO,}ﳺhya{Aߢ>Gտ .ouq}^Ԟp?G1vr/};?Z_,ǟ'z>>1/uT{T7_W:G#Pv 'M/o` 䣭Owsu|bd>%o<{JcuʿnfF_cO7g&//7>;]{|=}韺]:曽/V;yܕ'wpe)v#wce㕭/tw#u3/:[?Cj]pd^oō}`߇vup}s=<|x؍c3#E^^=*Z54%X*+/W34>VW^W).<| \ph`xK̸?<8 ?[{x9^77Ww]ok^?ϝNy|#7Wg1q L9v~N%?.E3o1~?xCﱟ=x xw*~|ڧ⩸sA~jvaYz\ON^ޢ2ťzy:Xu=7z97wGY{\bwgImS^q'G/П:?M]yQo~A_;Ԯoا3@ F/.v|k3ң?vIiI0=Ga/_9v_Ioۮ仗˾Pw.zNۏQO-F:1 G7~ qT;f~_^!~][ypT\'N3ûg>?oW\!?'\>\g%^HN?^1nG~\xz?/k{;G=GSoťv|#!8X.' O<8f?G}>]'.q/>"?H\Ժ!=PHuKy}aoUְsK<=Ύ'Թl˳s^n4̏]4t~/Q4i,%~?GZ/:y#|?3nSa;O8^]=BoE~< y>onɃ:ͫW]/gO[?[PSex"wy 9w̿:Sdm/;p(^:寗=jy}Gi ׾_ƇoYǷug/~ u Uz̍ثolݭx/Gvl>O]#Z64rq1_?ӻ>GiXI;}!=|8uM ?ܼ5>?4?Z_{<ɣ=OG\{AW7'&]aRg|/M wv_x|%i/!狧ϳ}qr߼,\ޙ~  `;8zإ͸./龩Z+\=E7Ŀ+NCg{_'82'~筿py#~'6)5ip%b+}o_5ȥ.6 }+ӿ?W~a/gu)ӟK?mbӶ>qLx~4_}n Ƌ=_<=q=z# ?yd+~oQNMca?Gj㤮R'u/}5n+^8ܰ߻> ;}j?<<+y/~hG~b~`Ϳ7~J]՟xtg䄿p/_iicv?Ӿ|/NrGOlXSN>"wq'Lʼn_zۻ<Zkk^Eֽ}us'rJnnD^`9oH?}%.h1n7r|sƍ|Cxz·[7榞hwuhx9N 3;e낧 )/u7[INչ~sy_^?._ v_U~{9>_rqkW\D/-:ԙɗ,6O8vNLا֯."Ggyoy$u'xA1<^l|]xͷ{HZϢ]C~+u>j{~vt~c}Z~m2~Oۋ;x oqз}cQsY~<zd^ɧϕ>Ch>]ǝ}6GZ}_5q:VvJ!}#5׃#8#䩍~Z?3_}5yƮڥM'OMyM/3._߫[m#+36N˼VKg1><2><>{}N}cY\.}nh__]1sW/(.i{ozAgxnUb;7 <d_5_=Loڇqyv_3/.~"yb7 Oz>/='W'%>W^c2qgˏ뼦X]oOլg'3-~=G OY>H}(F?䇑C~d<=sy>-]]<~SDx _z?8'Pg|Yn/~rYmI;w0i <;>޻ϱ$k܇88gû/¯w䏽")~?*]uqkW;ԡ3WW7Qw.r>;kc-g=?ķGۏ儧] kqu|8|_ԇTk|_ xVtiszt}{se#;8yԿjze\4C_ ׏q,'cGiғiǵ{/aGyG]=/*w w`G'>G +kaٷŸ^Yk9qe?̾Lgs<%}a^?u9Ǫ}o7֟_v(jy>̷IX:8-i}SG˪'ߩouSkCux[q GN);X>"?1l;w'c"CkW⢮ooȸoo;ҷ;_9j|x |ppF.Yx"W`7|q?u'ߩ|njW>;ڏx_?oyq<)Ow OOSW/>7zԮ㇧9_]oş0}ayu.~a=y+^n=E4-~+o59goq.;u(s_N4x#Ǹ8&?3>t?>;Փ<7*4Ɨ^O8jeVq)y}A<]xڗt#^xȑQ?`ٍzC-ܨLYO]=:.n5?㏳pKyul^x:{O/vcOɬ9 ߻۾maxom>/䛽>zIu[Ygܗ~w?ޱQ=yMe\w3>젣/֟kܛyOpN{Fa͑cu2Ɨ}?>“c4*>5'~VGoޫzEsmusW۱?98+w[qq |.=y;t[OX`]Zڏ_x!uiWkU:өQo/4OG|e߮K''}DFB%~T7r^kΨ#x&?!L^%(u_IpS2;> (G#wn\vk>]`CG}73}yZxqGqGu:,xJ~Y8xڗ{}oGkP>/|ʏݟ˾D~\ߨu3w~F>3.}z/`w7Gj|"e=:Twr/^2<}^Ӻ"●|-岏VTo,W䇘>3^I@OC/v0oأOdߔ]Sef$~ſ;~ rp]~ gvۭɺoM<%|q{5w߻so};8~4[w,>>"}c<]?{:Mc{|>>|iwSqu|fSo O]3W^ߗԭPd'g<٧|Ķ'cޤc{yÃx/ (bMǭ᯻&;[Wh"zGh#.}|F;nÇ=73A;o#_Mqi#d?W} Ž3 qWoq kJPw.'.C0yxm֡ 3u #u.GWG<QG!]vh$77غ语G"{WOjPL.C|ge{)O#woރO<7?h>'}OK9K_ >6bҴ7K!Ϯr^ُ'/O\ޏ >sbE)O'_w$8*v)R G=q4ηyQn}#ovIЮmqi?[>v///G_Uq׻(kf׍_x W/E;/NO/[٩W?n|yϨ[SoԱG]qԣ.ȯ|y;Ó|@wG p9Su>;qoޜ7~~͓ȫ}7k;K_qSxބ]gxO|dկɲC88q?D̏vneۄV'|QOq?8^ޅ}Ӯc-<9OؼDӻO^D1 ']_r;}gzyAN[~Uu ;yy,;\Ǟg7>Oxٟx >' #?X=[}ZO#'S/< q~5cmwvi2~P?8u9v}OY'أڥ^g_by0~;zd<|W#/ƎX773+N-nuyR%ym9N.n~O v<1) Oe|]q"{7YBo\9'5usz<xs _'IB.Sqt/ux#|uAu1AfO<_?w8#|]}nw{An8i{jy/?'u ozy1q5Oy=)Rwn7oNȻ.x򼮗'ޢWշ-&Sy|q_)Ȼϭ='{v9ssW8;PT _>"UqW'?~::߬]~E6vm֣>CO##?wvI⇵#xoY{<ܕߓ?z_y0huANpOxNOK]?xR'U/PwvnVjNz.:Guk[~(_`7KGzՇ~'O>nاU '>o(ozoěxU>WVG} W>"QWx_9~,\ݍu>{Sa=+Pϣ}|Oym'Nw"{͟nڧ{K_xQŗuqŅ/co]Nc߿y>5x_~eUhĉU#+}.y9ߞ~ѫ j>[J;O{Gï?{)x﫩=f=3.⣮'/C]+#BG.oиHKG?9"y9w{Syk;dѸX7TV{V~_yc`յ-n@"~=_rߤw3uvTދ_?qw9oFϑ3y}}>gv﹎<4w?yUyK=Qk`\[|D~ y1o#G}oT;Zy׉NZ>ҧu7`y+s%.}o3M+~s}Uu7x]9gH?]_}#{^[c'WKO8G챣ŋڧ7T|O*y4 9{w_;w_;~;>3~~ w~7凵G)>yMţV%=)?㌣POv|n'GPx/|Dqx;x~{UKп7b7kG}~&~0Ƌ<τ~q>=cѳ3~D!KO rQ?s7}q([qxl~<{w|=W7=63O'Yi&7ܬ^:3(΁o~?ʷ}w6?zlvn0lDm:p[~"o]~4yyy|؏Ɏ$E/'ۣ?E ~`w[0ύSK/MeٛLqgg7޸>My ጇKW__Oe?ɏN=y,g^9vma?9 ս;:?#\~*Y?ySbzd_v=#fͼgx\^z;rO"<#KU&syҮg瑋Kv]y3ri>u1o.jn5ոx^{O8G1G^k=<~qFōC<.<{u?ls7Qe^[Şȣܭ^/~\=TNSOcxR?v_}8vP?cO_vtg~3}[l]0bz4 >O'ݸN/x-~7ųn䒝{w?x\uk3twgC|o0p9]|3~axEV9? {;%oxٷ/<8=W] ^ŮL~S+.s⅗OgogʟOZO#1+/c.ÏsTz}ov}fז/k^lɓ8RoP@Yo>,vw?/Żqn|%߉b7׿`ɼ<8?weeg_M=e9Ky_y.x[O~sZ>,xbxgf_&'m%z{p< ve?.z{6~ڵ%w ¯߻I<5u`mZy9r-nA"G/㿴C{mv>˙w[>[=9r7q4N)#3_⦍?~q|HUq/·h>|NsiYK#d78{l<=p[ys u[WȓOKl9 xy_^?z耧ݹu4n=O7OǶO{ G/<^ vjKڛW^<>Z[~Rn^F}^O6Νsأόx߂}nkp/'`#n[5.懨'r(qTzvo_L`髩ykt7->Ze\8 z^}W1>^=Mz}$>ZfGy5GvJ>WGoh~9ru#bSGߝҋ{~s| ?O~5)k^~t-e^~q㭋*Su83 vy#v~i7\7M|W9ZU#??F(y'˃w6C;O/Sb4+ԧ^O1V?4xTl߁csy'K_oSqG3{zڻWo%@SL]w] o~g'k}/Un},;c>K67-??kqUO.LO[(ÓE>ܐ'zHW~GEkQx@~'x ~=̫D|,yOW!ovU^6  _kh?M?_!.n]?z6y Y=?z넛[GO{x /n?~X}jG1yɕi,Y`+yᝧ7~ވ^'Oy>Oss;σ'|ὸ}to)p/{Ǟ[X$Ǒ/R'9~8~kNyꂣw`Ŵ+B3/+N|񣊗͗'U^|^z]\} No߹W_OŭL3ye[ǫ|I38͗|u'~>fw1nI<U:(c9W~(ykץ;CC'۲;x]Cw[|o ^t:|̟B_lg>c͉?/~cm&Ζg)~/?~U׾z%yxx^M.uo|3۾<2䟍{8!on9Է/Վ\:+7&J) Oo/ ?&u(_;rS\rY<݈z=ޗ_'̧8h'L;7eoRG^z٣/zvqNȋ*Y;Ł~G=}\?V=>B >ɟos+S%k|"!6ZMn٧ڗd~:<)Nף!A>_._/'7b~SO~Mwgճ|}zu}ߐ]e<ܯyO3_Qݡ*vq'h~~O38킟Sܛx<{\Wy>ó wh}iև_xY;cP=L~VNuZY}X^q1Z8oyڱaJo?[q?p{t#~2OTx:ODO=t羚UAS#ڋqkyŮ˽';xO ?Vw,y]Ǿ+_Ky#~X?vNįN;/f{gzc=x-o>Xnh9)'{lX?Q=s8:/ߋ{}>y/|hO曝`gyUr^}G?K>yc&?bWZ/~7oᇨӗ/vd*^i!.{Eqtcr%?#}(nI$/u Ŀ74_]'Wާg_|ڳ@Mf}*/kןxpvrrx]'!zϡk+u>'Sԋ6^c킧-oUdN8?9=+cLɇGŃ:-9%7O}<뢧f|6?`<}ԡ|X߃'y'37`7WNWox?t_ '~y9^x[7ϛt [jPy2LQf7{cu#.^ߜyѾz~ϟvcžߘU&rhx; wySy}v;xi(^}ܹ?qר3C{==g|v}KZַP]&˟<~7Wף~uut_p_qOmgY/h=~Ó럺gɿ/y\!gNU٭WեxvhW^ɵI~{NjQz8r7O>s^<}>iO\(:·ǞW;i~:oW7?vh~_9w?qCOz372_巪1uYs;?Gk?={㇬1zl`zɳ텷x`t)ws߷+>0/~ }Kҟau/no9-;>Oyz/?^K?>c/ߞyOoUߢnpv}Wx w*}<񐃷Ӿ#oMGu7lNbGxJq8kߓ"n^w٣''N/~=OӮ f#j߻2<gw_\<xy~ϭ_pU;u8?2z}[e;V1:C~}HU=v%/,ox_|>m~i|kOG߽=>}8衋|>VNz|ho_-9/<.OVɿ;w||]\7>8>Es޸/jo~|l\LJy>_z~@nǧyO}/o>s O-?x@y3ϗ{q+{yYoQvN[pK?Q\<~&7Ԯҭ9.<>U^=u4momS3Y_u+f+M= Wq=[s\^|%_zyt/o}ͺֱ@O\woc8?#77]~sAXwq_~\5|utϑ敿Ju{֧‹ٗ_4_5_.j[+޵o4Nj֡{xouֻu@3?SѸKy$]~uG_;zfa{vuy~zgx9}ܟ~yscGqLg_):[Tg?a9 wuڿpS'\<{GzگYDx'Zw.]}|gy`^:v/1_އz '7x N߯?^6<>ቼ]@<WA)ozl<5^'x2r&yv-y}$=lAr~ﰼ'_o<|>x£/f,e/!CZ~SxJk7ɑ^.H\#^=? =3|~_:vy;7~8;Mu>wv'Kϋ'zc'y0 n{5n^]^$xa4gx7{~jKk'^}(%<';Sx܇~7=)i&?Xpy) y(w7j&^7-&r'ixN~q!m񎟙N9~7k|8?ix﨟K}'s[G./:u|ęNw OU}7}Nǽn>˃ODw[8q;}|ŏJt7r /Wj>_ܼqys_v ,˨[Ol{|֛XfOy<: o-V o'^~ l+[O=|9ޝ=7:'X]۸nio{/vDƾg~7`}vĿޟ%߲Q^F^Ğ7vy'<.Z]qoWv[ϽӋɺO ,GO>nhpvexO+>M|#yi _pG}ݺ hBͱuLM}#^j'y[=_p\;.>#x{/_xɫmuOvco݄c};~~O^p{!z^ҿC[Py#9Oa㍓ SI౸+.Ox-e+eyc _^7u1ˣO\#wGO3G.<|#=ˏSߥ߁Q~~cϛçЏNg~xt<W/nawMwz3~U};}賽{_٧^<Bm=59m]?Go.7G6O4u2\ly'X\5~ucW5q^8\<]bwx/d?8ں펝.{??w_xGO9uߙq|qu#>u+oJOx/a|v[S}C4]wl>'K]7yn+y)U.' $}Jaw%ЃvySV>_?O=4ɕk {=?xiqY{>/"b}Ƒ,ʿ W_=l,zG Osz .|{'/ޣmoG>ggإ}~BpM[|7=zWOw2_) 8ޭZ~fHb/75nP>ȋ=z|-9㏫[\*sRګK?Skb_o4x|oc_]<3/|y _#ͻ_ _xb6o G>wϋi/}|iyC).,..yW>e>w?*;M&N8C|\|wK\SS5N*nONOG<7r~gݑ} E5^6G)s׍,iD/#Qc?0pn]E\g3λ@0~W3#ߟ[w?6.i{w?Sus{}x-b_w_8;q{LƟп;\}y;Έ?{._D ygή\'~w:]e%3p'?Xc~c񄗝?;wӜxRH/k"GH-3as7L;뇳/?կ%rzf?>|E"cwշOȋ3yK%?2zi gkw/lO\Vn;>OF~?|w?_2s^x <yc7p(؏}\?t>'.8{Ѭ\|m|B4yxSlecN}>LƥvC}uy: ߷vу}x2';aC\o__|O.<~~ҿS?G||=p㲹9_;ȉz*yKPq_;8rlGq֎Mսĵ=^s\m=bFq^Ǟ]IO/i~{O'Ogi: f}-o;3y[>97 _F^_;nԼ{{&aZa#x/4ub}l<S1D\L؏/Wyw/f<ۍ [g?;:7y&:vI?}8|D7ĿG+J=?u3Z=1v3?{DZg+Ox؝QX3x2"Q|J׿O7<>&ns[wNSx/旈3[~'g6M]O[f|>.~e3.OW'zq O#&a]18[ywǴ~䔟c'o^ꕚR5^@i)+YqDFϝاGvGW`?o^bpǯMzzIǹrX9T^y*o" ];}ng<էk=w'>4:'@񺾟{Y3jw/_>r/Xzr<ͼ6k\ .zǫn/ŏxz!H=sO^*7T7Pb~,w<꧸Fo#u>e/*#/_>)}?k[|_n_%x'QS\o߅]إYX;/#z:%~;9>Sn=N=iUSpD6yg9 /دW{)/ޘvg(>|N|4~~O<>MCf\wv?{u5xO/ׯ?s'6~]Y|oYmavW->.Gy+N#g$q<$ЃxQޫ?>B\7z(rdN5.ouFc'}DO3}l< _'x 1[7j;|K=G}\q|co6W~}ѯ{λjph<x>f]~O/Ɲ]ï=-/<{ıuUў{]x᭿q8L/h/~v߈kݏ)Y{3zձi-<=P~(nwgo*k4|q~v;re W}/4_tu'|ة> 0/x1v 띲?;ޕ.G'Ws?yypk=qG3)GX|zu*uwyf~w}j.uO-|:y~8:U~nO?_߻}ߟKma>ݨ>)NԜwkouxu~{wڝt OV;u?c\P*X^ohx9?^'R5? .|'7[qv}aW7/O?~7`gZw&ryyv'>?kCjI_nuϜg5ZF< 7['cW.[m^{/pxe_9˛t<~yoWYcKS/!|o=8 V/gEu⍭qTB/YxO޻8q5ߪH[_ߗ(Sﻁ/\@'8Σyx5~/8<]zbj}gFяiO_[JyQINыO^xXvz<?~{lN]3gkH'`]G8O˺ؓڋ]_H9ͭ[>oqJF.*ޕܸuIWO>7ѳq ?wNuRz}zz{x:ό='q﫣|s=Zwg{Ga};xO? .>̵WS7k}f/;%Tƥ%XXg$<O۾goj}䥞xO=%= ь_G߿<^bg^mm3~O~a?_v>7;xz0_'\}Χ̳vO^#,7߫Kg^⟃vWg_zeiחMn4؉}⥟G{>'~r2|{bBBD''wߍԑK\;)y\.+:,FOG\Ci/TB;O]KO'#w<#=ށ/m|YxqVŌxO8Rorѯ3G^}</,x?՟CO;7C>^ #z}8'z +y s'=nZvcz[ok)?+һpڼ ɕ8|r̓$nQB><7yP:x@z&Y<ϓ>g~LJ}07GqZgj~|\?3zbw[Vsp<Ϯ_cwpzϷѓS=/r[x>D޲O)?SQt|p4Kt q\x3}q.Nȿ:1yպfr!ڱz}<Ñky&u/#G|<%{^~oϩz_yOy=|>L^ud78|F\^Ƀ]֑y+[ɓ8NϺ>}?ћ{)>kM;7n\MWssFWz|/ _GGx2<%˯/lyOWkG?>?*/[_pr~v[Gк;2~0yk]fnw"nu䇾qǒ'Iw}e#N׸^?+}L:٭nUv_2Gs6o\]>~??'vD+]W}(}?;/!SƯuGsEO+xx]qw^]Jd#&7ݺb=G4:_#~S)*;d畞MD_!cO#W[x?<7cie}M.~ܿ]O3ų.xz"i4R|[1~^ Iay/׿Ew;_YqG'RG})r[]ɪ^κõG_ej<+{a_+7nsLlyg>>:-vnS6ʾOytKX;S\nx>˷TמdIdx4yS~> 3z:$} G~`{]i^W}@Gz/+eo9ԭ$|DP[f2=,T7ȝ<9tp|>O\x호^]ܾg&%Ow:::#q=cgy?ϝmnicqzծWyӾ{V^߇++ßAWã_3O#z/ƍr,=6;qvfاֿOpt>gI{;n ?1/o?7 ?p|G|^yG_do(n߲7sx7tK\|w/?׳Oͫ{=O:SO<7G/@'/+奪WQXY-{w:onn~|x/{z{u0Nnuq/=.qG]gwlO_CususrWȋ<7_M+麛vS_d܊y(z yz^~/]KT޺nڟ;חw>7/; =|QoN/˻ #S7+Ï+]OǏO[ɯs]tgIS]"YG~u]kGO].yqzoG\[Y>5Xxjm=nj {COug;h o^xo/A],9pk'4oK^\Wtl^uI>G;wƵַu^.7:y}_yN |uIiWyuI ͇^=?>1l3%H~%+zbݼ׃OY|y|v6:;_{|A;^!y ύG؏'8)~#qS\Yo8rYǶ8xNU&P}Ʌ[DkG|kOly:yxg_ɹV-+~|gㄣ8yvݍC8a#hz woT{v}5x;|qd7!믥u?8\ox8o'#/Oµu-?;)O?9Tɷu:x8 oh{ȯ};vrX'{ ."z]y(]>$?A\GgrѺյCO'~f3uO>̛xKd_=`|fG|¹o=ymx@ev}Tk7}kvd'GOvQ;Vs?iŏo8:/d$=}3_2uƳM99opRqO ws]>q&y2>w~}ɋFj ^2.'z>_JJ72:gs-\fd+/v|I9y#/ý&ʗOΓwfOq(;=%x_o~0;gW/g_~#yY'= LjNpC}x`xK\4G{cc7~d y'>7|u_kx[<?6`=/\?'l`wGGN/ uNkwr=+Ww8cuڻ}v?97|7nY[u󜽎w3N=Ց6~r~3{i僞Uq Y|ᷢOPAeq4r gk8 ̇|}yK[[Z?ﲯם շ g<&N7?[6Nuos<6o?f:_~IGZ ?~=>X Uc~"qyg{zE=W'Fm?ؗˬ~<]oS|[>`O=D#G.֫nR^Q {"v(xWFUq\^|;N^pC>;oz#߿e=`y|[~rgsa;YE;r$񏌗s?oN+q-_o[8O%ցQwzns7COxx><  kCsL}_.tӾ pnO<5ȏ#=x'zx ēOsS7[0ޟݼwY> ;rm{ͳdx9y*o 7Ϗ N?[8.?~X=I{Fv)~S/SG^ţC~ [WOG4k󍿶O蛾^]ڳإ[ui|{y^׭Mu {v G}O%޲oxOοƥr1#g۷mp[^#_k#? ?=8gݼOQG;×g7oz/ьsn<>eO߄ >,QQ{w7]O^W~.[^iç.Q[?^FN̗{%^ oݯWOp鑑ء_7<ߓ)/㇔3l\k?~ث=w}8?|nl̕_>S n}K ^w꟬>Iޫx]{u2ߣvƑ9o<f8/uhOfF.NÓěY>]'*S;ԯ+qzvxC^x{nOa} ~$.ޠȣ< 8)z~'m>}}|mϡ~o=u#/KJ$Tw&2?ѷ*UYH%/hBABMѴDSEɲDS%Q,dT3 7;"HVzךc1k˶); 9?ru,CX~Q0}S?_|ͺ#xn^N/u}5MBYgJ.Uwx8}Xgy.~Z ?$'_5q??r|oKzܪ>W|w⵩ނw3ʺ)q)qC[{x2~{G4nȁuxqz52q%_y=MⲸXCɷJ<_N5~i?:?DZgmǺ-gǯ:g|SWٲ#7OsSçU+Z^p[r}Bӏy;l~]_~<9sqQrn]w"oh5t?7'ӡz|揘Koiu]<%VuIspw&P%ϒzOOx};/{0qdϬMn:!nc|?spOYxZ_S==x4ס;&})ci=ߟ{r~,Kq .]~ ǽ>oq;œ8DcZ/>KX(qXUWXx!{fuJ`f]q¯Ox'rЃ?S]AU7w0/k>2%? Ob7zDΫ}[9.p,ȇ펏'.>ߓ;*86s]jө3*ظr<o?eR- +LIu'8(y5_~Gx:dv׃?VqdxR|r<[_eGm({ʿ/m]ǽ)-6<{ʮ*c)tVx /q:*>nıɹu u>hRy:n;9_xxP{q|Z>#{~xDN+/NG ^~ã]xi$b]\i rZ.O4_;%noQǰ7xZ*7O3.x3]iߋQ•yT9b ?; O[{vOpy({|/,%oD͸,Gs~92yUa3^ޖzwޮ(<ö}ߤON'~S՟<%7гNœbG&6N'~WbzI w nW~KIO>PvݝO#Չsٟh;iK?#ʯï}>m=ˮ$Qup{/Gu"t?W6]Σ'ȿSIFa][Gٯy//v? wֻ8x|}"7x`&dmy%řIwS٩EO47<:Oq;J8-yƣU\c]Óqn}\E@غem<~8X-\/9/6ֳzqCFoʱ|oEggv!j?I:$eWw Os]]ҟ~ǖ/5 j_,qg^g 7xzζZۺzG(S]0Z7|`?樂үq=9v .QqI7EY)Ge7u|u-;=ޓiS]/^<)?/_q\oVCNEcs8*,c|}R1"溹O}\m\;fѧ2/3~ng|[^ '֗Ygj$׾#~4g/<}R/{ynݾ_j|R`űߔqy_C\H Uvz|\wW}yGí7;Guѽ\׃+{#|sns|kQs:cSۧlļ|_ Zqc|;EyC=L|z.|kk~p~:[:}߾~˟w\w7{Ӑ{8G?niv.zհ?;d^~5X_Wiz~|O^?{JvD|vާ?r{ҝii ϣO} }b9<:g㔸(}8/^] W׸7ÇWsMyߵ}F^잣w}^H9u{ٵ'_ѻuqS~{}~]5؍׃=/(EXG-߷nA9>@{=n߭r^ci/8x<9:֟\.ǓX=rhv秞;yw}"/W>1<㹓Ə8IũNG]\^Õ]Ύˉq]>/xdo}<Jieyҹӂsi.?M\q;R~]Ww~]ԋ=5LݝygC9և^lmwé{}BZ/ğڏnS8۶۵xZ_ݏ]Fџiy^nԫM]byֹ{/@]}/yȫQGj]:g߫?:fN_{ S_gPHn3u3YfKH]_dޯpY5쟩:Z?u^Kzu^օQ'~ﹼ';Ny~ܘwqU缴~ꢵcw:;_xtョ#֟/W}z^^gݽk׃ul9h{vw|mڇ/usgיwg~:[^{=x:2:[v`[ӝϽ59fKY{?^gd<: u^/B>{yA-r@zݺ^IiQfkko׷nn'zs,?;-sصޡ=d?pkYoZ?+σ'?73>;v3_p:~ Lx^#aezV%9)RZW⹬z/-*J>K}|}cO١|cb׎ɱ<]5fsyQw+9rKZF#߭,g9~?É7=j.类FxZ_N-?wySdE/)qޯqYoO7yet~S ^޴o?x'xozx|I'"  z̾Vp"^Å`Eppk\>9sG9q?7o7x}/n>_u=}WjɾU/7},=}A/ ͅ9y ;dgO7W'ÏSȃOS)i삧wԡ G?ڇ3<ܷyzy%r@o,ٱ.8fm^ 3'i^~?BUrT}3]œ8i'~@wG_{n{]gOTxHܠ3r*FW]D|xWFZ'y5P#]=F:7b<%1(L=v!󣾇/diw̱m"?ƍ=T烪a3j~U!u;[>YAk_XS&J/\]⥃/~PӺne/OvN]u8E/92P]=.}Œ/Q\9"Xw;S ^kp7ʥ^su\qi?8+z̭,_ZK|,"ex <]GwvoVoBGjOU'K%YațgpT0?#ב{/=[}3,sjWv;xYi 'prsq~񀿟'{ /=]wsh=ȩuS::y7voSǙԑ>5o\x3e=ޝGc? _H:Kf<k~nŸaoC[M>uɉwkrr,ֿw;~@>h\3=zAޛjN|yq?O|{kE>/xl .v|~.Nʮcse>o?u3_.|̯: {G?wKou#{^xj\g__GO qv~'~^)}ә7qoNWޏ ڶ/8{8,sO'tqcÍg/vlы~#z7|z[/yM=?3|y _v=W_^}oi;L}=潺/ޏ>ȃ ee=Ȏ+?7'm6 a;. |/GU~'~8We7mz@8;~vidf1w[M?/t=7/r<g3*<|75W[=mwy Nk^~%;oᗸ}Su蛶+Z9=/cߟ{n<7bXɽxc+إ?#Mqgc\׸dsOa=Gۥ8z>}mwv+sƍ|x jb7W]YGՅ,v[sr_ziT񞍫]}*GK:p\4o~K9O^^|&5|px?_6r~-ޏ9Oc__YG9 mZvy=_O{qxRWǍW쎖T*8'Փbo8}m~ Qp(NG)v:oz+GU! O],:y}<صWk_£]g5~=_S70~ \\/|xv.z mӫLl_U<<ʒ/yV3ǂ9wOHH~[2^.WWIljo83#FϑK!>Dϧ2_ c/_;Fo+Wy{ 9񼉏X]5TyΙ7z݀gޗuK/eӗ_ /;!ožwճq#f<=ׂ'ק _ynq 3'>}߱s+_[`_zzO㧈GS5=n?LW<?x6|CͿ/>[KS?:z9$<}O?_ /8}s^^ qSNOe,;E6]x<u?z{ObOx~'\O,^Ctc=OUH_YGww|Pۼ->kK]ЕۧY<|7>ʟ,=n;Κ>B8"OU^2u~egWKXp:=FoDM^~}zh}!@uc7oX_r<`[a q99߳>u\[8.n}u^;^-Jfĥq2^xJ\zz8yz'ׇ_yj9Dε!67nZCF_>WwOcN}L^sm綽q91n{OKhg>񣍏u<7ex;{Ru nvx'/s?} W=6Uk&)U'9zOܭxxSӴ?ۓ#|6.#[]X933O[%}MZ< fmvF1x\GJ|\c>O,~ũ%3Q'@OT>^I\B;ェ-/蟬';j<7_j==sS]['Yz~ŧpA.R?W#]ϔesvś{|}G){O m-ǵ׻|ws|~K]]+G/8z}98Oاi͋I>*ιuŁ3o8:/]+~A [ȥfF>"l*y^S'A8Ox6}+Zz}!45wEv~{%O;B'|Y2"PA!}w_v(#_Op/ui,dO}|/%Os^>vy5αOs8ءqm*۰uyY</d{s} ?/UG#j<yFeU>?ss P&?~:roj\׼uq_qPòoOēzі7qsx2`ĞT`ߵ-ȿ=9OY@w){E>f3?s;~|X5H^lc7]< ߃/vSy^Cy8긬ƋQu)Gȴ9ߺ7Tu޵]_WG4'OvyM> yv'|Goydv+x6b;Gi#oғSx6 C'_ {VP3̫yC8*Vn㕩z%z}PC5|_g̳aWp]h׃xD܏4w_ПI7L;}jg;ow\?x9oe=vpơ;a?сu8אOz@zx̿c}}wqM?}onx}pYF!̾-]:9&z/rd33ſ++ͯa٣!;мDk|x nMg*>Oٯ}K\|?ENr? 'o~y/4pT=0U /u[~7/vI\]|g~u!^Eɣarl (<%mc.uf7:?~>ۯ׏&ԋ ~lU?zu<~g w+g8;~xy?wgK}Sna)~3O&nއɎy]7p,^<8ac%>?`]R48~ [>_Z̬7Sdȝx!7CR^>^Ý!v^_ùlA< RϿsO)I~icߌSחv&qm6e fc3;u8G?˟;اu {OF>>F.C_uוT<<mfr8~{Ό{qi?!II?uIqyWylX.DE\viy&>2ߓWcܗǽocOIsJفxxzxI|^u~l_UrC /n7o5c9z,vVC|أCxHg:p?~>v34 ֱwtLlM9;94qDuƗ>ug8y1&/xqxij⿌Y/>f奲TqOWf,ۻKfJ޸+.[<ϯμw]}ަ^c Ʊӛs|(\.}܈ww9&#yE|tY}s]|ҼO}<+OOU W{=77NyO}P<'/8*<}b'#6=I{%7Lɯ<•/s[$0)>n'y/K~ ;FwM&<7ɝ}1ێw=~~c8>vqD ~qT#^ǾeY)8sKO~˼`txt$._xyNx:}[u5΍w/K?Ss8z/|f<ɯZ7uY;J>*> pF n)PyYkx|_؇nj~@Z!u3Nw%99m櫥G聮r<.xwo}4O1]W|mꎖ.'柝I^b}#ǖد k;yW]اWW_x:莃OۇuœG~}XRμvZx4ODwEিg%>8uA]3r/_Uu0ߥ:U/|\e{jův7K=}Yeڲm;)t[#?^~`_y^>WQ@M j?si{ww ^qF# ٿo+;Aυ/{~~<ɫTg"r~W&/%7U3>CsYWܿgiS4q ϣ>n_=sp3x:k9{~hTOc:.*;:Ȼ7z䃦?3җ?n%?Ni|~o/~Ss#ƛ"ZV>V?_G7/Kx"%a9_^R<ʸO~|E?^9/wz[['wI=z{ <7,~z?"FO9V]O,_ޠ9-k=Oӑc?r\̣?]wx^?Cs9Z繯~{>8Zx~Yxx:tkz~Ҭ߿*<>}7+W>.{b?-@?Ow=›ߵ_~'s8~a Nx~'n=q '=~Ox|!|i{Gx;v^~_[<{ɓ%^OPÎOSR*[—^WӸ2Bcf=U7թ7 i<1r g>6S9~_ӎ}Ѻ:̼/g''֭?m5}/v<+{gV}'xON܎ޅγ~_xשOp`gu\'Oco^͎O_9N={u1MOw~ZV\8sy_M;-xƓ]y7zRX|={]=7{=b_rϵ^E󜅛O%s dxCoc>#3.Ywc=_\|{vmڅ_``͏tl=y^=;$orx|4اi@ ҃'s`u>g)g%/IR]Yl_?Y3cM=+N pIͳ>Kg׭5ެ_ ?3wkOG(Oh=UEo‘z#y2޿iI5q~solw \q#_WGj^&H}ƑaޫoK׿z=<;/uga0~%K_?7^x?o>Gɻd_d=^Яa?\m򚑷͑s 扼,Fדwǽ'< #鿸|1wv&ug/}qvy'oK[Z|t^/|{8>?%(=C?rRog=a'i^;IJ\o_>#n$%v7?!ޝ.'G<#r~OMx=~wqI1ʛz?[ Sg>qs7Bxu#]@ϑ$χglj?d~_Z7uZO^폗xq6z#GjN_c~qgήw@m훃[ycxms]\ O;|}7ӂ'V/xosGc5~4Cp3~{[q |X#gŧ̧牟B#O|"O+=B}?Q~8u?|"`^QO<{O~Ӯިdiy9"S=ȁx\t~\ k5`S`wk_j;/ƍǬu{ΣOޙ~vA)1ۂC{ƍ~_< gpŎ?wi_g>Ư K=sk;{'ὟiD_'zT}O/ 𨮷zOK{uJ]M]xuJztBs௩[ⷔ~zbMxySOU F/-f}wb:\gG ?}N0>ǹ? ?'y벳" qKr8F}2׊_$O;|zOǏ7 :k?z<g'~S%3~&uIÝʎu~onoû=/%Y>)ة]|N|_/ٵ+v=ïēsz/iwvjcձnu?΍uGOSW7h?N/;&>ٯN|{(iOkrWzֻ#__U$ywnj7Tg/Uޕ?t nj뼗D0UXă O}_e_(o{[݂8qc75I~<'?:w]|xp^v  ?rNN)8/q˕GKy⧱v8;v?s3N)R<,̃ ag<دz2cM>'~UOOB^Qpxb~y;w8 Ͻ^G3~oZz}b> O~H}nG.ǞP{{./0|0y|5ϑKF#?I6 oנճ#gJ}oj9>n%|'yߧva<__sdz|Z;'~:9Ư^Ο/<r9WNl6/牋V=S~7õί?&.Ғ8+7zD?k<-붵8a=I#ީ՟Z{Ėev4]Աhxg_G_OE<#{}'47vJ\9`!^-~:{vȞ76SQir{K|>e'x|Ez>{Z3xf_g'VSGRcO_.k<պOT,B/87y黱+ܺ.gI.A Ozr7Q3㏷O]~-O~Ժe_v@]4s{?U=O=e%sOEeחWG!j_.Mٻ\.d_b?ct弲>/i׎qwO;vWȷ;9.x\qKǓȱ:_uWs|cln~X%;ljM B}Swiw:z]/;~҂y3ϺX"L;.µxCWq0ϫ~񅍿C.UZy&<Q[prvxgƫmuj<5y"%?ߨ+ω7T%K^y7~UŮ^Oء1>]O׵~?tg|vX\:>q>'Iv]éc;r~ՙ#8 qı]yƅ_N!V\Hێ\}N/ 3-"ƃtss_~kgdxoGS㩯S|{Gmy{?B&ℯxⅉ]);n+^s%~Q0_*y`ǐ7zYj߄/^7x~8:05>܊_ڿnIS=^NzszR9s+8^㗽^ϓx>~utx _.Ng|_q<7ݬpoߕ#熷W4{Y^K O>-/eS[Wu]vsd_闺AJ\ϱJoIϊ=zV9/_.=]߻^.x^O7:c?VKzq&q~`;gWwȾt<>yHV.SgS ţ賶c;/q~I pri:6^xWwֿ/Ŀ &~=gJ>3(|u>xs#y9kpDG^7k{&nxN{-6N}~Bn[[x#~Ny]oy,=K4>ìo7]}:o`Oqpjvmznߓ6y'p^{q;Owj>8m|KS'we_7'1Z*F厓iGa-|A~;3Jg+ΒKop޿w::ogoh\7ω #z֣<>7..gmy3]xκy<>[/;h\YW<?ַ}9B/?@Vu%kI=r/1/#~_33&.b?wL+^&>ߪ 9L*3y&[:%뱗7R݄߻~lسc+^Ʃߗk~Z|?pCm~h>|-ږwWz %s;;yxVˡ~^=qߍx\gguSj.Ko>[V?ܸܿQ>ݺ;m0o9hy =Z!>wcw~h5ߩW ?/U_#߿~.2vs3]W܇߸ͼ'O[tx:y}6q򾌑uu P}yy?&sw˽_ӫyw{ߋoO^g}Os>=%<9f /},dzo;z?Sj~нo٧_o{s͝'ޚf]һz_뗒_7ewuq]dp8 =r/oxIt{Ͽwc7=(q)yeOڑi/{zsPݝݸr~?z|k7=yCr?mwq>g?߱zSmw}M4ߓ>d>G%K}$|㽫W|q]Ύ|Z>_|O<>rpx=/z_/=Ӈ˶y7ݞgc;tcn?yy|>mpi=h? 8}{΋ou޷v|إkl>]~zQ'j|/gQ{uL>N=cڮG_f=UM}lת.YnYV}{_ZUPguDZ/uE #y_}?:"Um>OSԟu~^g?m~=WsvV=bY_Zߏ:YYwhwm~W_k} iՑkj3f=7:\0?.RzwAz^c݀+[Y8?_7Lho+~[ןk7՗CNB^gu^zxw^c'_~/:OG._|O/֍^p|Giѷ6rϞyYρ_g^v3~}}zZvzSh .W_}!?f_zx;qy7ܵv<[9:tn~ru޵mwo;x͋G'~cy47yP  ްoȱu 6KNf?\>c#uOsw)1ύKj}F^˟:87}e>ŋryNxmֶw|}/ϩ5gw3p$Eq8‹w]|z^f:}FENC5<{8eOϑ99_vٷk>ꣲ?>L>rz/gO7'ut|ӅCƫͧ#9'7Zߓ[sSZNG|kOӊ{˿N\?Wx4x#;n7#p<*n[g|iY3=qC=Zq;6>v{O8r˾g]^=_NV:!qצ3OOׅc5.~F|ɼx96.9>ٿY]tثw{׫ݍ_hGy}ȣyᱺ>5{5 ^~t+oߚ|r۷ay>_59{n|#e>{cr=!g_W׸|l!ze;B/w]x:$Oi:ogW=GY^]-o#o7;E/UGSx|t|󗟹Q繝3xWƞNs:nk?xZ4'M%y W>k/ZxzzGړ_O+?oNgyڞWOəeqgAuc['7ǂ'ygm7vbY?꺍W~?jWS5CH}3:/:.wr wnɷoF._<Ҵ?u_={}>gOpS~ʮouCrySݺƏu}? )ĥb'E[V!TxS/Y3xٛMț[V'KU}F\<8?n=Ir,/wᄋ_-"NK̳qw=>]ZY9^J^7z&xpwՑo=?x]?_ww}y b!̫㞪?e~3;Ruy?R\s%yTwj}~Uޟ8|^}^_2Opt,vO54=|p]y؁xؒ_mo{c]u^f;>/{0}9U<:jxz,KqxuثkI*'-żϗߓ}z 'SzG>u{o4r"wƉy]u>yg>/7{oG?m|~^bo v8 找g;c'<|z8k١[;.[^F  ώ>nKGx̓^r},ռwv~q5Oug> 1v!}:uUUGd{#N|x>R8xk ~oy.Go}簟k|O Oy_OO;v|/GO%x]7vK;jWoCŏxpx~hf>z~kmœZޖ>]~#~ʹ߮m\U?sz?M'm~wҏi]/>}yo~ؼ?e;{/&4u (?ϒcrsxD~?toY<;=$y'(Gosm.ܶT<3}ėKzj g<xܒ3d3呗}1JWor[ӯ!|𴌿ƕ4##y;<p[v`W ?xO89عsN'^[iP \y𡎛]8q𻅧]q|+wt}f޿f>ԫ5GuO&lK2g8q^v :}y<+7d㩎$8y=7ũDu$h_L{OmǴFq™8|R!;ħS NS-v |q~O{}zp__Ce?' ^kuG/ߤbK>c_7ۺ:Cv&u?.r9W+W;yѣpGx- D>w|ضYF 7s_}͟qQK=r NEku xkPGzO_|>)sim OCvI} Fo;s}lj.>/q xQwGnu??_u8K;5_'uڎ::3xӍ_7+ݼ xU ;v i2~xzx+{wZdx<_8"!rz|˟T:;<v<4x:wd^.LGmG~ >vw' ~. _yc1&qW'q4u"U&%5AcKԡ?x.ˤ mնiNKC\wvN?WE#qĵt=Qg!>̏,^~p=Y҃/ˎ?l9>ݘ#y/]z/?u_]/kWK=7o<Ǿ_/?'N?}_l{}Kd;,d<[ӫ9uk;ƺ z1z=ꕊ\'rKx9^#(ɏ/N?WkYLoA?^멿'5<|SuK[_3rzszޙw(]vOj%Ч:=E/'Z3vE\Oާ6ӿq7<_OMRƿ=oIu<̯:Ko~s>9q]Sw[ OXoD̯͛W;^`<|.cgIeNOOOxj_>ףw𠞳Y+cuܶ_;x}vgew<_g盏رߝ_~e,uƫ3&up/m}:;?/Oš/pr< 4_w'z7;g_2rr.>oMśGx]kG7}7/ȗq:moZ~'q~O^=8Lq?rnĽ.=?_ ٟeMv: G>>ޝ˥4qHzS4䑳yOQ˛_Ƀ$Uޟn*xZëucz.<=\|wy߭rǣ|6^Ƨg|]O]d??5q Os㕽'z£~>?e`hv_ϭNz10ޖ_c8x+rO'ȫ'<;<~x89Ͻy֛|f_z/yK^q8kxMoOɼˋ:?+Y~ӎkorqqo4_9GO ~j\eid5G?+Os>%>3=<}Ӈg-^{o_c3w}rZ9xo[9|/>ΣO[uX@<ﯙuY?hצ>9ܧө^5r(NCX拞C~wN@?We/Vi=k+ǓqÛt|/f/gzK?|/.zx;{5?vfp:ǥp^#y+W񤕧\]yĕx9!?x$ހo߄oo˅Σ;yN2O3u՟/|'·z^"xcُާ𒓯(x˸'f_+>~>۷S>#rK~WbxP/xο$pż_ſW8}Yz)up``gwssqGWZgQp9 o^594ߣ< 7RwzݯJm_y/"<;,T^O&.7#[*e{e3cߚ~{};›Z_:/q|y+_{nRW%~.>892pN~ܺ) O?-+4F;/ 'Ozw+ny=MpE'zx"5/Sjrų8~>Q1Auk^j|_o+ xyv_}lͻͳ91|~#D?u6<“8]OG?y!GG[J^7a #ȵ:dx.9Z/){}o_|m~Ӹef\@:\ƒ:)z͓<“]Oo}r&@^=OWrH'_GuO EU~8ޞ<9'Ӓk>lmA1rgq-=C[;vu\c>Aֱ>Spe#H[)=\߱WϦ7O?/ER'~*?d)pG<^3K^7zrSq<>D+.̺Xs}r_=GQz櫏[G_r[S؇v>6wFsK͛OwOMܒ[z+;pk5q.ܨo^U'~3~ h>;e\߫kW_A叫++aᆽ1.w~s'^#9om:wz~CGst𴩻m\ȵq$qvrh4񌹎zѳ_!=S<ܳ+qyxkH<:\'ҩcćﲿ n%4vx8Ҳz=vx"o$׃gɫu'S O_,\嵍0;}Kwq}s]:7 T/-WglEg著B=;5~x?|v~zPL>!s>F\u]g@^F.?Y?uxnƩh?"yH=7^-7W뱪\ɉ9%%').~mzFz=[xx?k2.=A-ueM\i#r6_|@|YWÞ闺s{%unWy|= |>q4-9NO΅ ~-{|;YdYJ3ŏv(;nٌ;xߨ`(.s5G0ZprQ<#;<\wzsǓ_ٟ|o粗 >ϯx69?f$wfcڟ+FN<i1,~2N2?,߼_𫬃^:7ؗ0-cxy~\/k>2#ֵRyzjC1޳ds <m'us<_s_q;z>Oz~~“} 8x" q}dyyG-}Xďy'v~<quu:~&~L^ɝ(ɇrK=հ\u^y'y׊AMz o{l~,/ˆ*oOg| Os/6xg\؟~yMŷ.U {{u|7xQl|kײWUݎ)uzu^:>;fԵ3jy#F>s<.~pex*Gx9}/gr`}ggₛ O\y.?|9(~Љ$!.7y9y r+cUui;n#=*N.G~v]h~Cx= {{qg&n>᭞sOkx_o5}*k» 3Gߝ6uz{v/T7j]O7vrPqLbSDNv+uI[ةo=ioo{Ų/]}OީWTxcGN|_8Go0{ - ^vxkd݇\V.Smf]`O}L™9LWtjWx SU,~!v|՛>^z{z?C@Ku}֑U^QWݑ}q~O~ðsS}s)Oߝ_|?_w~{?'W2Xjq'w >?>U<<2o3}/'{qR"#CǸWR7N*s|κ?e?Sq_>̇87=ˮO8"x︄:?|Xl jpx@U}ɵyc1p7NQ|v<,Gi_s ȝʸ9W?KзrƻO{qy_č_ԁgV.bwr\x|>?S|DO姍y>4/8yÚ;IȁyvӷzԗW~~Ó礏[0>xz4~Y/4H#<:|2y>#~Gh{şb g|6.n\ԍd~sYzʑC#>_晏s}_xt־Gxe8׸=r6':Oq'y?E|4oq ~]~ة{ DSVj 6#/^d|;Se;\9+䝝}Kn˟yzc/λ^.OE3NɏQN?`q־#$=*zCz}NQvgOrz8[3/3+4SՊ3[?M~}v< WjSmDZ;b+|A^b:"[q\\ vܰΓG~{.2ped8_zgO?[ܪ_/c~9/]oU]~s׫'x =ңok͓pA^'w$]vb*>C5߫<-;n\ȹ/׍e {\ͳ½$~>qq pޫ[a<^<߃ѡw9q;[W{ިͳ~?{Ï ךozM~bU߭G|o쓸<2;W~<}q2.p",}?%W=oxu_OB񗶃8u=gCy3= y>)?]\b-km{[R4m? [m䫦 kWxg:$1/od̃gs;< .gϿUz>-䁜xTS|qF큸EWƅ| ߭/f,}Jik|Z8)<_ɣ<_W>o#qP)mֽEAG}x>xuCnj}|jc1}sC8(;<Ge-x06sS ֣gU]Gwp!^8u^Zu'|߳aoƏ<ы?oF2?gLmOz]ZgocۜGO_xlI/9O#R'u^!S lh?׳;k.Kn-yߢz?~KEne_uU勗zw>g}zT'Vȯ/C[L־CճzޙwuW5>kYm|ምz,~O/T~Ђ>%BU'r7=m:nv={l:mo+vQru/pwGŻ 祑Gy*v8^zuE}U(˾sÿ+< ɏdoOG}=5W~sYq^WΫ:=tj'ټo7׬/ߑ˯Fw5yzZE{k%&qyxzpd=[o<^M;Y~=x«ߒӬ'r 'g0Q<߶>kzY†:|/KwT~7Vʼn:V~G?{'>t>mm<ũ;䦟+j=z 0OpBs+zjrJ]{x"d˖K|9r+{'yrMy(u/>)ʗNoz.;xq>cp-ym<{RF;283=מG?LtEGx_z 7;^zmgى5#a>q/[Ҵq3r.%G܍SW'^o:Ro]?qۿ~y~0o6qx[/9OnR^;cy:>i8UiwOg߻/~@No<ׇ?'屳/rK~86~/<%?^z4|Vbk)Wlg߭Yc=L/7Se{˾GoW}'O/oS7+/i'koW88跹Y?nzܼ^h:Qi?⏰^vgf|>? ɑx>^ oNPl_Yɛ O}~ ɓ߫g4i} W-<>rKg^7qEN>;y#'3;{Gil'N^毹SKolLsx _H=YxWM.×<ճ&xjm6r\5#;OTW?~$?qs?,}ϱP 1bc>&Gߪ硗:_a>~(=x}/T'~n|ò.zꐳ^c>5Y\{~m'o?::߭}& ^񡪿],xtƼ|Ʒ[7p_u:zԟNI] O·}:q?ͻ*/k񫴥Gscֵ7~vx)[7=_ߓ_19y.dxޭi0[9>ok-9=/8Z767ϗK#uS#WU$Yy#g8_,u9N׾։';롌/x'pWM}J]ǖ:h\u<-ss_Ծaٗ)ア.qkOUWySދo gx&\s?+jí#Vd?><>>˱Ӎ a+^;u\wori_u֝~0\'zJ\_ۿV{Y>H/u*{_Y>?yr K8`'Wsq٧eY-]򷽞pZ'b'gz:yG?~%=}_$kwߍ ˏZߚqn=ysݖsY>.X^~; |Qd}/?2}O~5{8eoΉ۫>P?ܗҌdxqHWqfoo3q42w||u3n3o>ϐfҺ\G^6N?NǸK]<|;wp-f+N(iwzTzq|!~g|ȸͺ8'v y8MO2Nx<_m}8lW=Gߵ?y_zo<NOy|\gv]|7w5=Ƶ"}N=O/®51nr]mjn_<;t/G<|Zwsxq||5O5>g"~3|~ʼnqv{Nqՙ[nO'i_z_$xbf<ڌ6xWa5r}^yZ'kݧyAeg>sđR'3rmVOO>9~1w܌|osR W{DR]&6q:6Y9,my+s¿<ɹ$o~g<8n~x\=}ՊW5'7w^>wZ~{7_orq8-ǡ7u=yCy2pQe9o#oο=>"%wxw9x^8^_ve^y#8W<{9A}>hA}>hA}>hAm}]j??s=hqZu{{=]|^V_u{~.[xY<\{_>;p@ݍ粞{AKgSwl.zf}EkY_O֣fݘe̾o}0yG5=sϺ`yGھZ۷uJY7j? \]Z^ZOYo4͓uٗׯϬ`9z~W*5Dwr_I/G//fKKU}G5Y_l돭Gκ>'xQд㬟L~DZ!~ϋup־ww]~>~n B[\]u}>%Jb>=*oe߂ڟ[8qv>5;~GLzߨ빯gO.E <Dgz|q#ghe e o-'xi?izx/i/<+--=wx9zH\7_~8>G|eþt~N~'SOSΛGe 9dw_y}}JT~!}|f7N8y}3ƟovO>uxlre^?)%_ '|C>~ҿ=טOEEK9>z3>l*yG#x;8g>-?x7{s i]}?ׅq}$痽M?곸}LKg>)|0>i?{ȯc!jSyyE`[穷_Iso%Z~=GeVl{=ܟY<I1jq!;rug>dؿ|u9q]t^_.8>ߋT(պnOā r.*$|3Rހ~_.iXGP>w &ޢ~W[ Gib?n{]g>oqC7QOг?śZO]fzC! ?<|8~a23/. ? G죸;]Y}OO!`xhGK|%\~~uŲ~֑tbWh<7U\_x RxdWu q,^u=Sg>')罽W$o+} OͯӷyCxun^fsd^0Lp L?sO_yzGqeku^;쌼8ч#/YޝߍN"鳊\_C(Y]L6+/7џ?Gxa_>3NR<}̇<|viYQv*|ƳW9?>{~Y~jٛ?{ťؓ(M? rxQCr]=gzmi=n!8WSG"}ϓׅ+uy{v'`ة׿zCZ+G?q~Sh⹱OSkfO! G/o'΍©~OSzYts|%m`k~:u\'`%—uӪw3c .i~5bO:7Coqm7֍cOpIFOOd.tɷ\O#'|LⱣCsɕdgޘu8-x;b5r—u7|3<^_᳅ yz}; /0_>}26hpz߼w?|+S]ux6y{5xADž/ z}JG *>#e~~ڱOѳ֫-kqu\?xQٙ# V0oW?WM~xĒ/y>5~cÛ%Ft~Goo˃oGxB8\ٍ3C?h\uA?;6-wK7N7c]~FEفůr򻖶ž.8y.i|p^_u?z뮜oyQwϣ{Tw_ ',vxVCަoo;/h9e;\~%Nu"?tvwW+g9/_'g<&1gOxY߂7߮x|wt'w OQ]]8O~ЕX\mxwV܅:OH] T2J^LOܽzswj|s}^Ư/A><שi?/j?6Jl'旮 WSΓO|U36HxC~:~?~+>W蝿;K]ڿm'һ:g};Ic}>ٜ'\:ӊC?i{Gg|i䒼S~|}1 ~'_'yT8ff|]"-HOɓ+罡䅽?mx:R/tE>}J]G\y1Nw\/bqy<|/ϒ}׾o#zqw5z]wf͇x|o*97/l<:o?&St竸HWyoxO'|r.U%qruN꿸Oʯ>3Ƀ<މ]3/zv]\OysoDJwϒ%/<׸yo[OzC~\[Gx<_on+jٝf/ݏ1Ou&=Ww̳>We͍}S5Ə^I]C}R$'LCH~O>ѯ#??]DꉪN*xW'2ďxQ_U7~[G2EO}6/w]ߺGw?OS#4}<[x\-I^uݫ#^cNZ' n*{۫;Np]{(~Q[[v68R77zJܯ%U +q-qu+9Su_7q='|:lq'8vwfS(xO}=Z+ 3<{sqP}ύ.5|_6[|?gn]w0KX]|ỽ%lȝTPip(`~oJ\Z?8'x;ti\MO>nf䘟-ouݜWug?w^s&-x*~__)q>c^7}ў.-N gI|۟oTod]x:zq4q5|.u݄k_ul:>@gގu|WO|SN{\w7 n\j;3Zr/Lϓع&OK߁{_Y:"YlI;Zg٥O]~?YM8oR_BӋ3G$r~~EãxWx\þ7%trD .;\5ǥ✝ǖ|~>-Qj5y^o_<:Yq3>wkxw,5F x"ߵoֲOIE^/ېor*/놺N+ﳘ[oZs?,/p|%Y ]^ُ:w?K 3=y_w /¿^T7~)_xRgocg/u=m_Gp<~ %7/wZ[Λn6={?xO!~TNjzno·vuWo𺑇gV^T~l?d`_ ~fۙK_Z nuy7Q@>RDύx8y2^gۃܳc='6<Wߟ>y7 ʞɎ|_r|zEO,f'Wy:9‘@ːؑ+s˾tV6e^jǽ={xsZ3U*I~4q:'{ {lx2<}>_ f\:yᆞ=U]*~o^+鼬uw:7vk+eo?So*u^۝'Fjfv?X_(B%.S^˿wԽ~~j) yoOَݩ/x{<瑓#y.? &~}}=4OnU\?A ~Oxϳ)ɜvhee7畟>$W]+;+Cy<+_&Wkw>잼 >>U^ F)s>tޯ@oxqoǗ&Q`,@OIA{ n:n Wkw\Vx/b?O>}Bqpzx,OeMcOyeO7j}<#G͟w:ͮG:.3c/z?NOwz'j!qgIWW?Wu~~A3󾂍}^mއ獽'ZL]83W߯)|۲/>yoz}c/ӛ%^g'l~֍q?F?}41wG_|P71;鼷;xiE7ouD%XmGCxю>Cp!n`\G?ē+ot{3x>da3N߭^[O~R4._9}Ⱦi+zȃƝ5N ߫2=%Լ >ڧYq~ ~}Pq<  5yJu57'xjӜz3In'_mth'g~9aege寲>8s?cƟd?ݿySxhŽn`_剬Vo%G/-'f1~QWѫ#~|}jKq"/¥>O3C84.D\yCR_^zn~FdqAeQ:Uې{v\,{ȍ:m| K~OyOt~ ~bʿ3p9o0N<>օ#+>IE Uw4.w O m)96?֑O<}M ;!]O3./v=`|Ho3_\oﳳ:,Ke?M}u];{WÓ >;30vܽzeCu3x!++~{ ߛx{hy=GOF>B^ƾ7#׻}]uCiU7~8_{^.\/|V}l/rOʿs]=#e I]<'%/9Jx4vckޔvSI"uU*/!Tu2_cZ1o#h矖oŮ S5z *npָvc+㓸xΌ7OOz8I kb8l_2uOcB3oOcy>z|֪3ovo׆;<ö\v.~ ? ^eߞy]k{< #83K^G>9Kru=Y_?e\1vI}<|->}Q~c_.9N|?xJ|h ωWͼ?4ox>\ڏn/x FN |%&pf$0AI8`^z[v S菧K[8cM>9s_|sg&Wo?N⹺?vsy ȸ_OF> 8pye%'HOֺ>?u3U+K?r2瓣u}<[K=_r=u'<:zNvH /?A]8>:(%<_Tx<{Uv =|Ëuqo>i'yTxi@kq⧥>&{ _mOxrg䟾w=;wxuŧ%rC߻b{R5Z״~5{/o_O4ή_-\O/r<>|oLAn)kvcsW)yZON;]~BO:.ּp[$F'33[=~w><U^۩Exy?zW`͸,rj ^O\TuDM:nFN](>9^zY'Wq rN^ŷ;?|}򦞋"s_%\'pAtkeZn>Hg@CuهmZ֓g?82>P{}4yv)N%_Oxdp2kwU~ǯpܧNhCSw܁Ύ.qsGp.T7Od3o5-o}KO~]ϥmxO=|"7{O>{n8rRᕭ}pn+x9?T>Y7@q@rF>quq>O Oq .n}/n/U:샖gA@+ 7+c7F?>2-;K!9z#r}xs΃u=y'k=/{Ieש&ow*}:'zC?Snljc5'JgUwJ'4U\7oT7_&O3;uƛ>}'X=3q9N慎7^W#麮q*Oth 7+\]ƋGv wzģoE+DwU]}~OuXɁ\EW-/:]y~ ("S'ZϹy1Nɇ|/}c\5S+O+^?v7^~Xx85.«F<Gޡ_!6Nܩ?&ž}_, mΛUy:>S{xO=\/u⬱K37;&|]-'eyKR#u2q9>u3?WOЌ+;b\;>9?~{Nd;{WoyNz 5xWwO:vGq汏z]|CPp#cS{>w忷_v* u}~?3®OSt̏q;C݇\9q`w5(zxASG3~oTsDYAy'"w_Iy?;}je̿1?/m{*ǟ_𖼺yP8PRꕒeULΣWO+=~O2֒gx~uulpRҟW>;;e^*e߽ʇ|ӹK`?]ߺ\zo3x#}~o_\߼;%$V~{.ϛ݌y>z»珟 /O6Wg̳yc_Mҫ/n؝ ʯjquw;`|;mx-:qfGb󧲏83Nb?{ O?Uq}h>nn .𦬻'3>|-ȷ~W`&}v}//oȹL#>Wz}qj^Ϗt}v{;{.M]:GWwkȽx?YעGsZYIbSl9Okz.|o';x~[0]Ɨ>j!OmW7x_q ׵{@{k?sϭ}vmΫ?t^<9>xuڑ%^8gƍn^FOqsoxMĴY4y;#/s_뗜~]YgX~N;'ǮOPg^1Uxns$iF|-Osʮ/x"UGۧh;v ?u^fg8zw&O6Ϡ7~H+ cSxca}=xs.z ƕ87“8 ߍ+mxdY>ς/Y[%7TLs|⁵37'8/V |ܒ]\yayZק.oŞ}w]:=>g&đ3s?}?'O>V~G7ނsS<t{9m\RW /ZݸJFٯKz S۩² .>z]dY$^;vC>/[?yu;z"kzpxҋ普OO>8E>r^Ӈ/z OW,%Vkѯkyhyw|d|x {qt+ռg/`-=e#v]աN;>OɧZ{3ox RVO|"0/PxwQPm?۾z^h;n@/7/˾BgWG_{ĭdž{ ?/¥q䏩Ozk_>ߞ~Zg%?)^qY O]~݆_ɟO\~.#o~%ϖ{ :SyN8R_y?}!j>?\u\.ϧ~V?A S&2^{O3+=Ց n2oo#3 3/Y=`/cG^=3?_'4-yٕYz58=?ȿ;.9z{zЎ7ȗőC-7_L0_<h<P8'ÿuԃyO]/K<.vuɟ?MMſ-n!xś~usw+ :>}>#DO\UY}ϯ]jgz%vw'x' a_#ijo;s?gOiX<-ZXOw/30=xzڪgr@>F.ܓvK}r,o6'Ӓö_p~Dxvܵ |s}P!~.^͸?q[=]gD|;SNfG=]OO5ޓK}cֳ??~tҳ[lC]y"{\^O-xW'm)R]J=UF]yx+~6*r3;pk̸Kxn uxo)ʾlE/o=x~ޜ}t?8"7%[W+._rh}uᖞ*noދBpV!9o7b?E ~j_?{h?(^vSu}Q=ڌox<7v$q?9~_{;scʟzS笺 DZ ~Zu>S(*ٮK?}8rz^G|IO۟λwt'G^RY;<=I ^ze_ܒkj|{9Od};G8nX ]Ͽ뫮D9Uȷy?ܰ삸8I毻U}9zvq0LN7W5MxmcF\/i)xvE8L?d1^ ;z9.I;oSGGߣyuMΧ1~yf'9Cr3\'<Oպ[w6N?~6sJxqxh|'3?7i[8⿝ه{v/w{cΧȉy7a/qAx#_vHCOwƒ+|a>y{/}l\5i^5~?-bG˰P|>p]Ƨzsr&.a1O_O+H<NOs裡PuV<>-9~_wxM~fSǽ:>UqJ\ngͼi/q؛AXQ_'ߗW:Cwϖa [vᩳx?>i{eGٍ+Cu7\q>qGz}!;q!rk/|qzws{n?|#GێגYaގm7hzdS7zcÞ/u:8zEr/.{ ` W~c|Ppx]Ϻ8tyQ >O_Tu86εU_x_5"o[ܐo\r^ݯ8ɾ3߫U/~1DoEze WFS\лxߟ/Bko?u ;? Gvdx/{}FoF:K~ g;n{?ONr?` vE~AG=^߱KĎtj_}=og碑x;xOqñw>FKNjWť(]9OqgSWme=✟㋷m n"cFS=x=u9{n+umQ{ȓM!c'#y?Ƹ̎mC޳6GԺx|QB\9Nz^u `{~_Z{˾"xnc/ev/x |-qy5{z} 嫮O?y'ky+uy;{xle׊O-.A;W)w׿2wpANsŋ_Ӽs/[O,T@~y?]{JCq=?~߻U|:}ǏJwq';s@/Ǐ-u w]pR%q޶C~C=? _:C9a5 _7y|: #Oٙ_>,oW1!o|x}Ό?>g>#ւ໏oٶs\iK?dx&[F>v^q#19q.>{y(rp'/# ;|8hk*:k!둦vF{n;q'}"Hc9uȁkq?3x󂗑Sqq)ήٵ|(^i݊+1l?~踺9k^˵׿t.5ϯ߽?Ϟ{'BSs}}詮OgrO^|}:^?K\0csg\[w~ȓo?t?w\⹌ ^䌞»;l<\O}^>0-wdr@/vA_:̻ iwܡq?뼍q}=sDž6G/>#w~9;oM8zY~nmUhjϋ'u|B|GS.ߺ~U|C/sm-21:o&ï?[_"콮kڹqڹ~{H~Mk> X?q+ל8<~VyQ?$_>4Oݨ<"UhN:^]'-9}?Ii?of_ǟYOΛ7v՝}4~0}=Eu^܎j[y,^g'_lPY]g{\ߧ?C:}Z%/䁜9ٯz 9~`7}FsZ׼v}k\#A}>hA}>hA}>hggN>~ӧ=5'syOpqiۏ?;o{NyYӆqtznاxx<9uq|z#ƭ3xe]Ŭh֛ff23o9eX֛~Y:;՜?ʶi:P&;bMIbG#3I2 8+X,JR-QIQ%bDR?D$H$-3-w]H_7o=owowU]?ֺk;2x/ƨzR>ޛk{ꆨwΘwݯ}y>#'žKv9 _{J^k>X;;Tu4@վo5z/ ymAՙQF[%1,}oz0mhXΆ]MuZZ%QgMT/>yw_OϢ:{y;~뼿0N7ܷ=ṇg yTb9lW=_e0>h#ԳPqI~m2#c{^闺[u~>uA̫q7/i˼Gq?WqȩzMz^:ŷ_Z-},=.xw}zY-zOޅzEƜǷVg{1zcӪ?]8!ƮyVQD;Nms^xYiiv={z ~WlOvlD/o׸oaWӪVtm_>-EZuZ;{|UPbsz^rpim3g|O.2>9KrqܯDN8ݡqx9k=Ƕ~pw=~|ցJW_?=}qg=/܋e=ڮ<i/m'iډȇZ.p}3~x֡g[p{cgPwsUWua;ឍ_b??f|\イ}u!-=5OG Z^'rrN';F//'/O\'Nɴ5GOS<~:k8QR/'!!$GGOtkNxP+}'Rú -.tn]99o.u2Nc;/c]=sMx:S-r~x/Nw8?ؙ8~g O9Yg~koWCe bcW: XG߿i<^|5yr:z]xx+^?- DW{ FY_$a}x/-&.xGnσ̯wpigVGt\yN+Gd#xyC|;d.JSp3cﳸg:7&.֫~ZtNg~Wv$Ϋ<e+ųL9zOF?_?|5Y\:y$q_mx:u&瘷3ޞC~ ?ۿ+w}x gϲѧ򳮼{f{:DFp^Y2oUAw~wz}YAܬv.C~Cp +Yg{OcǪҿݿ>Gsj\9<{q}_$%$_}|J ߛyq-oy+yܷQzfg wa=Du[^$Iu2/G'}UNx<ϓ?s봟~`>M[.>O;'z{ի/zʸu׃kxOuE"gغYwcOɵPJw=}[װ7'0tIcK}ZeougLivT^xV&"gIǭ!L|7R㑓?q[O|p_'81Kn}gkG z]+rΏs܏]5?|.>WD;.~4|/|_7O\z: }>V|+7/ᔯ>.vr$vvqu^80k^p2=]dQgUS~k>{aCO<8 >_!iߋ~v=N;>S~oĎ菳=:kWu?q_ N5H_>wf}goP^w߱''f_$n'^q4yL(oQz_ym(i4.yg_t^c_7Ovm/?v%q龨!xG>:?QX>_׎fS4ϯG»狛e'<O&qs}q /|z?[gs^~E/#!'?bh>k'wqzc{W·}HO?{|{<_w zuzR.5sxD?7$| wο̞oz=ser).h$|[y㗷.wߺ};> ĺkx9yOݣv}zѣpĎ=֞ _xvq׋˛g<2;o@qWzѻnQ~w#/?5}za8uQ]-5O7'0y_ϜvP௟qi:G爝+N}--x'RBke'e7igw_N,VS~w&Ǘ6vm'vҾ%>_w?a:cYz/R'7/vS<7xv?)8f~X<5A>#~j޴K9nWOo}9|oo˗=?I+?aߊ87o~CGQ#{%w#GcSS?!~|!|BʮKN܁#m͸gg}T^u67<|axPwV>]\Ա~Z#~qjGw?z]>쾯~IԾ_&Nc|dGwqKCu*_{pCwc[t_<7#Ofm'9κofp%޾)j~_㿑#G7oxz_&۳އ_GȗNaH|~!hr{uxc{'~LH㚃;uv]Kcʮ{ wzo<Ëu߮ѻ!~Vqxb<<_瓇-;g::ߙd~r2*{#W~ٱ9~_;ٷU|M^3ڸe+:^n]B)<+ySd~=7Y<{,O++yďt_xFNgr?~_[7 7˻NCŷnyvܟnknȻ}o/%~?%v<}xQ]3j"oY6^'^2/i[~ꢶ3_|B{ˣx'k^ϡg緲wqg|ɭ vx e^wpξG-0n|O샆'u|q'/:gxy|bU<~adY_]:kz񱣇nc6N<m>/%oN!ϴ^>?|[ !׍)qßzxR}.< Zgޅ9̟qix^|L= 56G+܇SNÓϟ 7ُů']g =ľǡGkz^!/X/|_uy[l }K?'΃#vJ}>~Q~x8ʍ)zғ/≽OpzS7oڍmJ_y8kx`%E7yx3G~g'fGPvߨn ;f= n~jS_z.=6$Y!OFO|Zcjy׃-Y!#/###Y׮:n {z/B=OZzk@/[/"p3}OO5)l\ˮݸ} gilx2ߣ:˻6~_ܜ'<\Ϣg)s#ڵ'a)y F(?4!Nxld3[!2max8~98q-_%|g4OiYf=`/"x[?V~Homև5NGqY<}}1WM+y>]1ޏ| ؅}ۙ;Hqmx(nYfWcq|r~ =X?<_9[fތ;E/&y_C=y>+.WpU_?}pxDg\y' wz〱<g[8>fw/q ?;{cӻC屍̧~g6~^]N?Љ+Wġr~7>\q=jóQ\28uT쟤6pօśD>kx~h'3/E8j\#@G\S^;ԓݿʕySGﭧcKv} n'^ȯl],W 9 NpԸmSx.v;aӮ֩s筽˯k'7m<58Y/1Ok׍VK\v]Y2 ~,=!oiZzt/y_a=zKhFZO~q;Wx*}o쳤؉Q<Һs] &ybN|GGߗ:yW$^"o7_Cu(%ߙz%}o ޺e=b#[/ z̛vCU:~;} ~NۉWWr%@7J\G|B<~Du)\E]8fZ~8{%ȳʯN}#Cxu]<),Gr6ų]3>>u;;3^#=:)gggug}mvUpa,?^=u_y`r]jA&<%le-mbk|xCڎkћkk9qG-#s8?56;?} :>!?:v[9r]ygxb_^@t,N_1ϟw'qZl'3akkK䇖'oϓCT|a׭_盇F^x>2>a+OVzS&{WgGuurY'(_ ]Y}S7bCkn|.l7f{ɗpĭ{u%-]h[>w+yG';jǘ|/=x)[]}YzQ\$l݆;?պnϾGJdOc7qquNzƼ_ծ7N9f' O"w3yw#]/.xŲ?|_qpu"C<u5HSJpCxCW~]rYzo[Ky_a-<?>Ɂ.">>;.>/{nR<.c\!XǦ'G|W^q3y#no_}Z,N|̫x.ο3g~3_1V>qk-M݆WQvcW4k>8P EWPJ\}3ęߋ\?\]5} 8tni+}#\7?M+"_x|g7]w/7I'vѺ{O˯ O ѻkܱ]sO8ѳ|aH\!vK\zG~ǟ:p'>Eă~/ \|'U6*'懝毰}]7vkտ~wG?ݿq$wOXp|X'2m8VEoA/8֒?WO/;: ?A(><8'@v \%*ķ6 /L^|}~ĩ)]|x~Ď>C[o D}#Jգ*~q^{H*o+]漗#%|w<G_:8$dəqC/< /s8#9a__ُ_?Ix-{OO~miqO52r#G5.wG?ۍ}8:6YOxcؼjJ;O/},~p^w_!p)>ys~o/&?7*^sG:Nm〧W;ZCO͗[4{t*TP>I9?v%gkx>wt۸wa>W3xʻc[Gs)j-|\o]ȍ;|R> _׬G3xu#'<{7Ϻ1~R~|:v$xGJ_gˣ'_p<+7ǹx{?#wfooZo&,&w=?Gc\5S;?{yg8܍)ߓs_.M3l'ZzJ[k}䁞 G.Y؏WAus<0x#@N/Ñx?F=vȳ^Wo /0惝gq}4{=}gC=P9֡=$nȿ$W r7͏ωy/=819\cܯ￈|?.*2<yK"oyBo.o}Yt]Htc'3j 4>uwvwigUx'F{L^yadI#[=~y}G'yN|7a/mrA~]}SVOK|~K䑝{_pή=~zCO9?PWD?yNŮf[ګήit?Ow X'm3s᎝w5ygȽ~]_ 7͛ܧ?yMN\+Ue|] /=?z8]<>STnj)830xofe~dg&vP|<'3x\L\%𵗆Q>l?=pǎyFNֳ2}_|܇~~!g䎼MP$;>HqL\aP'g78Orӷ,&w.ا⥟y䱑+x8=+..AOz?G?[:m&>6:=7x4>_+}:}y'6vߋGyO=1vޭ-_zc'}| K񊍛rэqi]Yk<ޠ\a/בЯ{ \|qwCx\᝿sz|Jxxx59T~hǃ^ag[È3vqǃs^VO |/F?ӕ'뷋<Ӯ/qvO뗗|񟆿.sѫ>M_ߗ]]>|Ri^hO~SƷ˃~˻_cw<٩yyC|vąkϱ~+^2[e֕ا͟`6lqR,>Z;mqc;_F.]}";_N %x̎Gu?/}o\/>z7:(޴v{H4d~gGN?CN} {عs}?G=3ӇpvcxZ)Ccrzf6n~y/JScv-o˳Wk~|5zWcDכe!{|ƭ1%##.?'>8{NÕ{OѻUrSxRo:<8^\=|97)M=L/ѺXkg!^>Aq3:y<˻ Dm#7A}x?7gGO֧8'"O]KuL\xfş{nyvyGa\karI؍3<'w=?RߵOOc ?e/'xk/c: F50WYފGeX"/>+S^^n- $rYu=c(nq>OTcO9\}8;ogrJ6~ڬ[5a}us>xߤ5^]/7##$zH?vu.>K4˸_7} ?]eo3=w}xS7wwٸUx+J|O?+qfqv㎞]j$?'/n 1'y{my|G&_x.g OȻ">6yܐc+o6Zʼ[z _ߺ}1"]ȸx9v]]\5vb|_< xG?>~/Y<[M^ٗeCOra:7҇Ou+ãw<}o'wXZzka_O'O;9;?}+p"_&|I8G8'G/oq7ׅ~ yųv}M ۼKOcoo_ryحw=:<TiԸ7_]~ ~V(ױ~d<>лNq3.&8U!ռK?8 {PVzTp8+;kxv~d6(ZC?S/qq#{gOy GcOXǍw̫+^ {ߵy. _ek!z}v\XoGiŋ{@/gyr\0rǹcO,߈mݢq||O7<\Kx$.ȓx}5]ݸ=m#O3l6n7佣 z}`_]/b?"^~/'W7@g+8߮G#}y<7/+Jmrx|ߧOotxL?yt2/+m<엁3|u=+zI>~3/+ݟ0}\pi},/cݟk8zg>o|D^Dt[W3Oc=;nX<O/:&<W~߯Aw}҇~'81W>yM}ǮcwOsE*_γK}.v~_ /;{oW~>x<;w5isշ>'{ J~^}տχ [k>GKǿhݷ%xm?ݏϓWx/}oWݬ˳.y'G'q8!q~&ϵ<~`[WY;1;{>#ߓowqgS'N8?kyo^ȥy+o_v{s$&ϻvX?ד]׭=no\>osyǂxY;&^G_͸1v;m7?S}t'7울=Şl^j[9?t?T{;x$Rg&r56_<ȣ8C8=7Q~箝O|Ɏ{|[s_v}v}o+.'|8|a}JƳ^SuU)}o<|m~y4/Ư'[4ҍyAzi%uTI}[[[t=nyեߛj=9K䙞O[O1=8;·_sV|qWg}}i}2Pe6\wͧpozzsi=Hy\]7E슸oj^gH/\\WG| ^ 3x3F_ߊ'?NQM<ͼOc*gp5yܻoGJn\&w ?ЇҼnKGo?f&.{N~#|rX7HVvwV8{KkWrΟ/Fv]+~w_zh~^5^}qx:>%o^y[o뒃v?1$/m"=I?SW;4&<>/j`'s{f ~O>[vJ9t_y/&^2|-'o({;}=u\gם7~jtwn ~!к/yo;)#Ge8n\aē: v^/ +ܟ\9||o{]x2yW&vi{~]4|y{w[?3~\;Gk}gxzM)s"vjo=N]wÛGP't9'0N/bgyOSW"~gBo?5׎#"x-$8Y'¢ËYq3%4^ڸꝉK-y< o-z-j^zw#= ⢍Y7 ά 3tru\w:ev|`ĎW˞)rDOSo^g8 g\cpq#SP?lо.8orty>_Ox"ǮNroܳC<>@]߱L^'+ $g?gxrvd_9 wu?2, ~uqu}y9Wϋ?/|?un|O;ō ]Y3}XOvpuȗw|Le6Lϥ}v✇;N^o߼-_O!>O`wg-|o[?=NKg3.?Jssŋ|"q{_i]KmM7>q3.#*oS[Oo=Zy>m}PE{Nc>Yu}_Y|k%Oc=q yP֍gzҷ nȏ??"_^w̏ǼvA[߇ocΧowzVCԩq? C`늋o<?~'wJ)z<o~#vsi >'n6i}/\#k{dԺ"sKv#=׫uox·m]Ӈ]7_atvE?y;>ѸhW^W7uC\ggx?yG>uzǯ]yWOҾ1Og?^o"8e;~Α_OͳC\\=h<dq8׻Ca o׺خ ~ӿՋpsqyVŅvTLspsx~O.|޶m{޶m{޶m{޶m{޶m{޶m{޶T3og/7O3|y޶m{޶m{޶m{޶mX}[\ݶ-nv a?fgRwf?ڡ_{~>m}.xMB݆wϱr}+okS$W}~ǣە߳}}}+sI/;^|\Kq<뇝mwX9RrmwR:WW}Y|??>S;k9lO}~h_u9u.nz<:.)ue+RGm뺵ncEkj՝z=ʫkf͌cI~NKuWx+ug4X(T}zD=6N:_ϻ{7jͳVI=֧8Q<ԑh=r^U3񪇧ާz—:qƽto=sS'n<;Soo3<럺{C.ϣi:Zz|G{Z:k{zpnJkg^uS]{6T7z7|SzV_Z6U\.zo^EV0[[>Οy1|Vg+'~O V}S?\ubNԣTRح>b[3ogk=7ռgzt뎪'.(=O;}^<ճ!{Mu˶{GK=sǣs4ƾ<|0~û{>|z:so~i+s=ήw'y=>ϱzM{U=cs*Tz絩oοrt=<T~0.^ÕƙX1,/y$|?`<:> gxqb7U?$nT/=G[5uۥ-}]\Y;G~:9_zyNxe/vu]/7KޣT=33՝fę$W}rk*7eQ M\zO+r%{^~_ϲ~`~qw59U'].nOkg/u>kjEi}ϑo=Y'^%F2/>c=d~y]/_حS|wߤ/vZ_ ^O~w̫~~Eo8&o޴&O?mw= ?-O{w{CV7숫k2ϑ}V{y6q"#Gz?_i\庞:PqPcw? oľW*>?˼iⲋ#߳[x<>$=l{l}rwzt=uqwW^~3_y"8?qNxyx y}~X޼haxTV2bk;ri< :^.?7θYG:1~3; gCߏp%wbƁK׵s9!o:8_8gvϸF̧x"XowuӸ8/#'O>_7ɱ/ F r__tZx_zT>^q ?5%|MebJ3WčgΌ~?ӳ:|繞x|kyVױkgسcxy/2k4aĕ1V~C>AW6{CVds68.x{?^=(WxP|/@'v_뮳n~-+rƟbٵcVuk >7Dzoqge rK;v۾ao#K8 }b0E“/FOWy-r⊝O"_䇊75ޑX?_]?!?$t?3/ˑA8׬Mm[{FŽ_7nw;$Zpy#՛?^&x•x}b'Wƣwsqm|~m~|A~<ʉ8>tyyq\YO->._ɛmH>I^"o&nټz^C?5.o+&Ǐ(_l~3my^uw񓆫8r? ?ij-^{^ )N;??x'4~J/۸Ib]~8U_ԼcKSKA.T\տʼo> +_x^o_—GN;zwr}G~|ՎGwS';ڬ[?;n2O"Jn' wi]K<+rU;}+d>X\ynݾyk ~7gG\ /Y^.ٹ?# 8bęrg𴸪|_יxd3< uK ;O|'SֽػmqGzu_j֯'yƓoQ_ją=(N7>ĥüx>^xN%\=ߑ6//üe~KZ"FOk4V~?$<]{ g7"Gz_38y}]|ADx=g_>f;qdoM}޸a3~~jᅳ}ey}W;-ٟx}K8,o;Ǯ!S gZ!Û8IG+> Nqe]BkU>8w:8?# %q x^ g`g̷\oq!9u?^E2 gH󿲞u_R?x~kq6'|^svx>}Y//Xpe&qq%o+ǺNثgؕκޙq-8o_WNў&[ <OD܆O>ϴo/O^`<xWQ/I.> ~+|ƷAyn>2~Õ|^Ξ{2i׎=; cNn znrBo7-\-`= _(ȳO ~'n/%y^ P7y?·C^so-w_z<qvycgž7}bǭDNss8~ñ|2|Vq|~^~ˎ7EW zց3Op ?ͮ'9q&4u_Dž+y /j?Au)<_??_ݻugWw]'ßi7^ǟ7x>oV㓓yy{܋^~}dS~8gh|s[#~*;o/M ^W\_Wǻq8|笗χzovN`_\Ő=Z;EK6eœI3*GF;W+^xtSqXj=|NfOкޒ/xZe+/:_e92^Ҟ^~)7$Ss?q!gg:.}c/ }:ƃzxx g]/ :^䁳~ri:f7v뺟u1n~ƻ~yOerl֭o*>Ꮮ{'{mʽ?}^i\_gㅧ/O9{=s\>pwǸq77g<Փp~ a=Idz~Owq6m\v?~7i9 3~$;+.L?X|"O r}ӆIex"m>pí_~S3 'rS<{/3;;Bwuތ|P;e\iRƏ]?e7vȣ ~ںSoy:'ev8nz֩3\py0:qO_Q^}LOăq.K?ѱKxf_!g]ag`^g|Nu•o 9#J_xW6v+y#]rq}[})~j\IȾK|U'A\o뚱<~]b?[4Jwc;_?__%|3^2x#Ur&jw᯹ 'wC:Sgu<ƾG53/DѳW rw҃>}]z8^PvO<싫W' Wk Ɨ|~ O=4g'?/7e꺾j?48տ ˾)QJ'~J}6!7p%?[ݿ.g4֟xds8\'q3~_gȟ8+'K·wW;/,ug1/W^ܡ8L'gw/} ߦ;vN|D{Ouyx<"\' WKY4\]7&.nF_=8^w];\MDZgp7s74;%OWjom\S̳}ea%֝ǯ_~M*mĩT{EoY^/ȡfZ7FjLq W~zOC9佳#ցzʼn.N^\_ſ.{~y\.qS'ҫyGH~#}<\v'zIŕEW=(E'urK^[y݃6<Z.rxm~` g/>qGx~aCOw]373.m}x"9ܼ~͸v _q9yJ >+r?B>E?vL}wx#Ft\uep ُV<{w1 x։zH\mA.\W~Om4;E?!sk/xuy|c)#gEcu5p?;_\|%=`{yr2}|yoz7N։Il zyqSޫusOrC p'9.}k?_U^O'puk?6o^!/[>>qtC_!^dS98u/_{}k=׺i۝5o;W/OeOsWx#q,c2^η߳~"cG_xqEq;\=$ljϕ+®\]sB1/|X^HrwDNs-K"gXxi'xu}sQ7'b!} 뭿N.[ ~}<5ֳ5I~^su+WUbzo \m*Ǔ+Sſ8Y6\k] ;ԿֵlS\\;uq:Ubz'/7v>-^%Μ}-*vZ܌q -WCuOoŵJY\Ei0Kȣz/(qtUi[gx߶gq x^#cNx&.iqv?n= ՛]f,*NZ=rƯbaՇ<8='v]+υwZ'~E\=(W~ecCw>^>:]<}~/:uJ|R}O޺vj|.>죗NCO7Qob=uWy)w"WXJ􇿩q<ں;_7a1z_TPW/c=( u2~U{3^wثߍ ;[>go1a:j O|RϾGa'.zCy^7 e#WqW﵋7'~i}1;Ȯxn//;bM>YGe'Z7FB:yG\O3ORYZq19%o,~v<ʸ3_wx {>?_|xzc?|Tˎ޷`=>`Oべ#ぷZ<\bћ)Kx&;ubp/gsnW>GvWk]bp/x.p)Nl8V~>|k=\^`N嘜у*{=踜O[o޿=?l4??Mv > O^#[uw}p+>O|?6\%.c maq'['c:n]N}wKqqpr(?8><}q뾙/,@^SиʼMUߛzU|pb7^@?a{֡^g]_F٭3ڏ}[qXY54LU<0p<,׻o[yp3AϾ!P7@/b7]iŃڮ o땴[oR/n *_} ڿg8xP=׼P%䍿_^]wg'a߰q*\z=!x]z(ٚ}vޟ@nWџ_xzq=_dzgY$. ϿK7$oyU{g??L }#>y*'x /+q }gn}ȟyﭞLkZ? :k֯:w/_p{phyLy_ߋ[)~pbV=Y{; oLOaulj'Y{-: /6IS\\уŕ8ӆ<U@'߫r?86\៉{~|.L[0}h"ǾW~O^;=WƗgY CݸZ*WgW:,8Uy?_U1߷?3u1g󧦎)+ _yUUTo^}_yV疽]g޼@o~Z?O<ç9{p%8:w++K_lGkކOmWpW+n /$ߜ4o/1S8<~Ȼ~'&/woӻW{e\yZquÉu Z?|uU~h=u"'%ѳxл݋[:حm 3>y9m< qtu Az |woßٹS+Y=7ygġnqq%xOx-ϥxSny.q l8{Ojп>yk!z ;N>B7c]g묐+:^z{Jpu:GM+gmB/>ϞOOՓrƕ;e׷%Peoxe׍'.gGy(;=Y-~1\GS3;D^#{q"\+s3ϳB>6|+]7Y<ouc$ W_[\b\[S9uDx~3.xz)gv^?a<?~͸xtƟcOձw_x\KSsx-~v^ͥjNۓuF̛7ٕg~٫Oޫ*;$'Wn|gr.οt_gsj~^;~kOZzk,^'ﺋ/vLWY—x-.ٟM|}/C G>%񽌣zYC^XNζqsWt_ӽvp +v ۭ>{֫K~e\^7Nu+ @7ys^ͼ/ _g|-\-nrξ_Z+x{g3~=]~ʸ#?=#/}w|@zySc!n>u_FZW)_DS0pu})|֎ko}y|7?w}-83>a 8ƌC#|ګ]ϋCt} L\Xosb?K<Og|ʋ6GG9'G'uٽ:-xr;ypz%cO ]}%{} =r$v\45·7g/˼v ~G>ګNh<_J_['_NoZ\|36z[iq`k崟~:Rih;='?n߈pg\_'W7O|qq85~w gͳ<\|z>mA>zs׏>}|k5n3nS8bU#8CJ'=F>yjx^</쬸}3\ N15_{k}v<>.9Ops&W^?2)|}zз'ϯ:H}O3¾ܯs;yl?~r ۸]mr`I<}>U}]cg*-\5mbEwLY壩kqr>}j^t 8¯zyg*x|_EDy'_e<gx#pGj.c^פZܡ2ݏ:4wu*-' 8:Lm/IUO'L='{zX\:={^^X ľt?ExTghأC6׸Ixws~j-z{4ggmxz@asUL}a}'TWEި&{gw_T$vbAz{rm3O1>'toQ/-H]'v~W[~^iŁ/;xza^{_=z?K\EQ\N~k履F#{ DNg8ȣYƗG!\ṟ>͗<@\ٴN/~<~nӆ]xjcř>$o{^~F>]\l~7~P3uWg3gFuv'ió n@6U=h_ +ӏϼɟTϥ8|u#E|Dvg>'ULyo_~Wg•yov|ܡ߅| U1N~|^{zi[H٧=J\Wgy{uy{u8w뱯՟)άתl)q9Sx {i^zDy*}oKRgeγv\W_{޸[,y7rGګ'WC|B\&L[w/F=&zvY|di0ķȭiwñ~5u{+GѿGȋ8amGG\O޼ϫ+N8[I4.և?3q7}_}yt\ {z?>O·ƃ2x9~ %~pj]76q y Og{C؛/xT֡_wyD[M<*xfƑKxoܢxcO?~?}?~.y5>b-K:yr2NA֍rG~+8+z\o-䞞P=O;(f.250vV߻'8" ;4Hx|&?^'?ܼ|ⷑ}8?s'|G@>/˾gq~M>#h=qw<'\ #? b?^'O,&s&7'}Gɟ=_)'wpzz|S`7Oy3X}84h^97y7:nZٯ! >on&nZ >d_-cO,v s\9-?jyr½xl>z3{ xa7r!\?kx\;qBNu;g/zo͛N\1폦.u8qy:qgk'\Jro W۲cW[O|$W]^Dvzqg[g'wiygq>zboWb=~^>}k|F|=xk^鼟gcGY}t3A/<gWW-F.Am)6yZ'ww?wOv|vؽM>xןj\/.*>+~kr??HBE;4Y$vy?Nyn{xo/~K9pǘ8=>+>+Oׇw[>.nv>5;ٮg8 ~u#=|jǍGx,?%q͓_ޢ\Co>W+~'I_g2u_Oqu.|(>vkx8.gެq]q >vݏM*}Y?>歉ţo-_{qz75b]5~;FM<м:v%:~k ֏W{Gͬw~azT _UgB/zONməz;]<+KFO?3G#U`۵ިz]׊eùI˟͸7_89#szY'쾯>Ja{w N;~?ぎ;+`. ~^%(ק_ >MGS}0wqu<])np/?(+/n.Oot}g<}[+pOyQdʓqIyg)z53.?Mw_T>wF9~[|ͷ>W?]|;XogZq_|xՃiWvNR:A?";;k> x7 ݗ<ܿe YULK㟞b[MY8(_~ܟh<= a'>/wK8Q^Yn]ΛW9+_UMx:ٗNJޥ-ѣ9(2~>tNvʙO/ z0=Yoʫ>_uهOeʌ?}"/?G#~W'_ɯcw?#WwϼZwg'ŕᣍ37|-8!f_6Rŷ砾 a=:Džy}Gu<N3<߲؛}>/^/8xN"c8kԡ2??woUX^]?S#ڥ?64iw= OGZ/=E_{{c_7s݃\~,Nv"e<{q$.xk쳜e#yuoT[\m>cv&L|#?+oU޶~ ?`[<[Oa~[gQdoW܉X7yph8ρO#]//&~^_ՏOouv'34q<oa}?׏827g&U;<4ǼOwu΋Z㸩w |X#p85xl]D =c<]Wmq?Zt]8}|S{D7Nw+ -;k'ഝSxq>pvؑAwOSnx~Eg/gGY'TwÉH:|偐gT\%N-7|c]+E7&]8pY^uzl-~zC~ؾO6Ɠ̗8O&;κ *=3Ɖt{rKs]5Npn]g?ik[WDoю>ߝ]9?'gg;77K{Yyq֯1ӓZqE[c}6qSq<;׊c-?}Z;U$` zcZ?Zg>̼~vO|m{9^y?>D^,0_u۱5?ʾҮS_;qq~P(xi;0|y8mGgy}YeøӫOwmuY]|r~}'/zqӣzKx~>-_/7.˫^aڧ9nmomomomھ_am~joqu޶moCzAɳkk^ݘP$?p]T?m>֥^>B>b>yg'W|M^>!촿do;{Uyg|y2gt~<ܧH}mya~33/8syx;Ӆ}l +WPuNW/guU۾O2u([?]k?:_~U#e:#Q{JG>-?l+Bumfۿrz(s~XڌYS/cTf1Z²/ЪxVK۪߻ꪃ:?z~Mk"yS@xRBu }P^[u|~l 9;=;y=k-]jP/`߻l=}wV݃wJen: 7iƙ^z8oz`߶OnLpO}S|x˩ yxwμ: |󹌗 ,W>/9l} NyV} u`/ ><*Z8:5gm=s9_[|G?3x~Y};%q5v_Vw~/Z+~Q>GrmQWL>dU曩{zfzb}v2=NToGVg^m˼ ֺ0Gs|>Ӄ[IK~8^y 'T ~GzY3D]C|0>[zļE>I+ȯ|Zyy~_ߋW|p߻>ozݩu/3mNպ7}d!p93^A8uŁbr-*nr"ޱq <=gyA*~||ty ??+γ[py詵<>捞/ٟ|<]g߾p5p;qo}.r_OOQ?đgAywƅ;zpKSMک}W'/n0U}u}w{NG‹7eߜ_?-=7mW%N}"8yqu-Wߛ71|n}Yf%\mlaB8yO29$C<:e^^&NyCx%\=^/ 럇޴:jqi+?n\4,1K/zܘOt]mg_¼?o:G/dz^8ϯ]rv;8aw_W~kob'|?5nyЏoWqZx o}ovq?{vmGծ ._6.~/ ėN'/8!fO2TYaybG[G&.qm;~>scS} }J~V=804+>/IU59= |+:=/!n}y~j^+44恝??;zC|8r/{U\eT\^gǓWP~?{@_/u\M@v29%|}Av<]5>x9[559=GO5osZÇy'>ƎOf~W'{,qh~w/=":Ş'U~#|+v {.|C|}SgqsvW:?<Γ60x+|}4gqቮyN-+OV]a~ď+~X?%Ϲ_m_W'ZG8o77G;Fy6u]W)SreٱGW}x!p⼫ߺn9M0x|W]-"?xC㵓oѫV-nzvgunNAȸgio^87zSOϸÛ^Ouک\_;]t]ҏ3Cr{7Nk?ܧ|5ob?G.?[7y2oTn{\nz?y*?|/9+uoyNYgϼo{ K>|kp?qQx\tv =^}s?zs+;أ7|J vm` zx#Gvi7Χpuˎ ];E/wo6uG[?wW8O>{'GO^c<)8|u9m<ϵ,m{c |g+~}L^!j O?x~LSOuf_A?Ogz[Zw oLso|gp='k'E`_c'ɧMYxTu~%\Y?пn֯?qgo~ iܗGkJ?e+n2?d\wvhy`';@?6޺q O旬}?_yv?q]#|ӼzW/kW?.\f=,>\?l]~5=c]^ߗ,>>cw).|{t9 #; m/f͏/Ʌ8g\y9/7u}&䖾6|ϳnǗ9؋OYry;{p8qxVC<0+73|4O=8 ָu7^,:{AޭCW |oݯ2^$ϐи֮^Y{*ޒk'qg[~yKZ)+؁gW{E-[MՍ_sqKy89-aG{ݍxQO 7|#/ګ!}fȝ;㏍}k־G]'O~x~zU[0q≞% N9qםO_`]v_Zo^:]'q~\y2O8e8'֏X|Yg;ծ#w:;G#/_8x^\apYz<+qa7z'W{}>xȻ=#գJAq8Z\^-]b8 6YaO<9vڳq?K GW~z W:)\O6-?8 گ`}߬~mQ~=9uǛq!g޼uwVd=AN=1υ6#G8;)W?:i\÷7lJ:oƥxE5E¿O<УO'xj#쾫alƟ\g{^p#|Z_h=ߋ= >_W:~{iօO+=M_Wqh/\}0]{Otd;\w왖{Vr׃(y>jSvy[pOl\|q'/~ɺؕq5<Ew26޼'.? ˷q5/ē+G{&yOo|o<S\m~ s]r?5_xuB~{ .Oytq~ʯ#֊_ՉOOroq&^"Aj8=zBp~7G)zi[wox!;OCCSozS )g;;kgw8\?r|vsb~gz\IUߕOz+'~7@|>ێS͸8xzƗ"w~'2_pްg8EG=$~ownW o}oO>|<5x_]~uW<+_ox!獧;xOסsxum\Z\=7? xTzWq?jܬу㕙g8!+sxI|sK=<@xmZ/xoCy_>+օ">/糸~E咼/N/jF.ǯ}iGh|qlIu_Gnb|] 9<2\%~?rlݼQk=8'w]Џphǔ?Q{e![*ik׶es/xL;D;|m^=QWOpq_-l|v9? ^g{⿉#~+Q{o ^.΃3|޼{ w!|/pI>`yp4LRx*wFoYwжjx{G#r=v~?&~q>~ϯb_[.Էک<| |:q\x߻y9ɻ_!qE.KǎϢ7ހ~˕WO1'&n9.""^7YWta-N_߳WWEBr^?q~>un _+#>Ng|+:N3}/iOO?%}~u[\=wgGir"漃>|풟rT׏'>l{kKO]>~{z '+O]+q"̓r=|i&v Wyݸ SGm+~9ԱW]O7>, yήG^^>} w;솶uKa!;]UU.|ʸ=+hlFjwq̯84?]8yo<UcneU_}x}v*[/ +vij}zS^ٿ_A_lOyC^X\Q [wAxq|ggx#[O3Nk6:<|5gNpGȝ5;Ǯ{pt Wo;yW{Ǟ\֟f<+)ׯ:y[cNoDӯw4hqufWV~v ޶ÇW~'g[|q$gY'uo凹.^ͯ8UױW=ϧĿ?v耻/? W,Wpt+I8!N#k}yKuU'/qC[zjMG6.H6_6׿r=#.1Gh3z_}?c G7~h?5 ~=ׅ9O'eȅY~|ոIWux9ɻږ ~,P%^ēZn)}ΣWtC򾋸:-re~ Wm~qg>1=y9O=~xQ'{OR3븟N<)x4]\꩝誸.{&^(/w⑧y/7l־pYپj(wӮ_u9oWyE\=%qeЫ]-$wה~_~_hyp}Gg'? >}i CX>?_w{CָY:_J ~ƽq0˧/|YFj}/Or_q8~.?? ?PYy/oۉw~zCޒ|-W|Xpe|ߤ/~Eȷ;^|gvmҮ 4x<-K*/'=9| ECU7oA?;rsq޻w?=2\6hI5O=_w=]v+v>%~}O|{/Wo֟?}c6}8zLqOVo`Z+غx/>];u+|7pwyp/Y~v53$qGOO}3q@Oxyc]o$AE~^0yj}_Ѭ뙧w 7<5^7OzAyud@~K9£y˃:_=er{։Gyox 7X{䇺|n#nW 8ﻎ^iɳE˛WgNg/6~{+=wZgt4͋C8\057o W2ƛr[t. yY]\ߓ_Ivi灧q+JK|{-?> |WCacWyL{< /zxl q]W':tW>|~#?gxZ;/gipuarS7=w B~b8{ g:yS{7|yرF߈ _Kw ؽOk=k'-nq;ƿ_>#5_#{حс7^{wcl.-yӒw8=})^N~c?EHZ\Y{b'0n[kyʏra?I=kbwg-^ θѾGH]ڜOKOƕػgkǎO_~n)pw2 WÕq\z`N p|Q9#w+ߙ/rq3C~|p.x:kvDyqۉ'yrd\/vu{ 8;MS_rF+G_ ^.䝙!oNOO14np Wgbڃ{8|r1CfuC$Oi'觉?;Q\ '%1q捈{\~GwX\w|xyc&-{o\Y>/M.jqq,>x_uIp~̓36Z`9w_~p~;s[z\m\4pGw;zvyN~q"gvZ5!/g=91Lav?9^N3ngyNs[7*ǿ;y'WY|}C /pO^-ks[c6~xq8z|Mk-Njߐ#<w3/9oOS["׃x?xv^w+;'W];npuGxsWX;KyW}-6~qg;n3ǮK|-Ϸu.2O~|w'v cwi[~^qHz~9[iqEWqxysŗ}ƕݢa><~;7?q׉_2>oq~y/r?-:o,^GNN>} ~h}|1>x ]~uN֩/+qɧ>g~S{<=u{,{E<gcl&~6[?غ{ W}y '$rv#r;PQyO,?4_8/l&u[{ wz]?M?Z\M_קּ/SHo<\LwmoLls_ۊ=t=5N[8y{gy2#<2\_ ~89zX ;WiU Ǒ /p͢w]nL^]m<ٟ݇^[䠸}bv0`/?n[2Y~!n?{9mt|;_? ~Zq+;GI rit G'uYxya|yy_Dψky5kaB1ݳ"_uYv͓H|}9O1>s?yq5j鳸pēSƫRC?jxxW_䞼W7!G8]z|LSO_}8*Ǚ7h>WUqkoce|=MrqWlnGW}M!OA_:'vKW}Vsyޟ^`g;~H+Sxx~dךj_y'[GiE]эuggo}(#xEA~ax.ǯ0^9&=5_o_?{\x꺒}wrB.ZW!v#Nx [>wu= [j_'~Z~7o'/9gCq4w|'Wgu֮xOxW:,[]Ky+>+nxOͯ#Nj]2[צBŕ'@=%`(O>Mg`7bq~t8uVsgƻq~+m_V1igO|w</ yxf\/gp2;'xh\#lj?8O6)&''W]c'qq̫qC7Q敽:?kǞ/;k%7[_П/]<_p~~?8&/Σ|5~??a:}?҉;9a6ÿWY<<~{>yl\F]YO-sp_~:?}x~L_}G/_OC֙3qy6 w47w)N 3 ^IS~N30vq߷fϫ?Oֿ䟼=;O/|$|n٣[߿5R.{=2>xc^܇~ŎiyMN׬W~x^Cnه/_qռ<`7<'rw6?:CjtyieQi*x?jE72O噳%w=+f8v ?C^w>[cu v]߱g7詮׆OWp p|d|O\:?&넇8'a?Gnߞqep+ӟ#?s2y"Nnɏd/g!y.+m//M|w)șyvzYgM4g+y{f]oŻg?ٟ]`_qW[˯i~/qzƸ7sr# NȽAt]x3{uo߸c^Ю?}97<+'~tۍ=WǗ Nvy+r:z&㻸98g_?ݧ`p8bĩ'ŗWGC{xÏ =LԿH?nܿr8{W?:\@ۧ4|Q^ ^g/}yGsO.WܗA||p޸z<8!3{6W]x f^|r7U/q{w!ޑ~g8n.jׯ"?=s oW$Wg<OtyCzg5g{'w[.=w6~7Nz8e/#O#ܺ>9e_s=x% n^{|/NewZ?f47E7=7+<0s'wW\wVN~oάo}kqz.o/ȩyo=o*i=iv4V*Wx:;P?NV^]ی[|aWIןhw~+;J὎c޸cB޹|.?''8=ʍGNqT\_Ɖ#7O:?<7#83/~Pmۜu'5~{d<CE\=:iվ}7(է#E?08Iq}hܗ#pq~W7|#Ȼq£>{/?sOa'~rO`yxSov}xӷ+wA8<&.#丟e|o W+;yGtp"o$qY"''7<|V߼oި8Y PWs=<,R+pj<\Ƌ,7mʝt;L?g^*GԺ8??uC߃E37_;3ڥYW/Ӂxv7DZcG{+c׎}8oݝpaWknjyEM<|K~~{č Wxq-s?+7e>o>;znx?Om~wvB8_:1pyNx3O⇽oHG6}xʼn\~5=>i0NjmT?%>'@k><-3yo=Ɠ_]I\<,~-mvÉp_#~76y`U5\LA[]}c|wo|I3_{Gv;_p=Yy~k?g\s?W~js_33zϮ{a=<)~{\i-zH~q_^zۏG7>-q޶m{޶m{޶m{޶m{moS{m{۾ڟ%#.'oY{'O[:'T}v؇A~}M7Onuۃڞu/\\>y}:˻}/^~ofOw>mW~־W;~wbؿZ@Пe?+Mݢ%?ݿy 7x%?|\Q/}QDW]gu#=nmwϧ}hՑn1ZFsY]C}Y}8y{7 ~|V{7ގ"oU um +v6~UoﳸuQ\wc:g֟n]z/Zzq;^[Wۼspf^6_Ƥt͏}h"C/P` W[+.^HW꼨ϬUWUF?sxw=WgF?:(.=鼭D?<m}m_qv^"W\3/m,Ǝ}Z&voG:ss]z~_|->y[ ζ|L7]tѓ>7=CK1dߗ`7rNxs~b7Ue[{Lxm]zpg3~`N#ߓCysK4չ~׸ x s}Oϓ\'ɹы}_꠮?Oѳ KZZzț"'[\-]u>.?v>o=}a>1-~>7뷧'K/8ok>wޜ>_߯>_8T?9e)?ϱoyyKgcܵs s7~?4|..?^_䉿ȳ'W|:xqü;p|丞o;sۡ럘owt|]\W+'gzȱ8M G*O_Õ u:?;v}?@ɍbv+o<_O _w~?/}G/<>g%\}u=/e^ȷt=zg̣oǹW>o'x^#_.89OU93q;9X{%~ne]s>\}4}W}X\9 W7.\cw}Żv?<Q_g~tS?Gx|hCz{P0\y.Fwx7c?6es(q/_w>9Go<{=ߘ~mGmxry_qKuW g/]`a8"GwOOӏO}Lo W{gt1 r.MrCexg;k 3ͬCw8Npe\=]<ox+|=j4q#/\|n>kw%`gGz7_ |\'~X\iwɉyߌ?syCze\u<ɡ9{ɺpM<.'2#.at W/WN6x=86.ƾ?tîyNp5U\g8,!O}GXy}EO8S/VWz8[Y'fyxۙht+-^Zgd^>5a?\+gã=I?O Z~~x|'35/}xt>к5޶p?'b?oiKY{+H~;=C/CY ׼+ճCˮzgS9H˞_3?giT\C>ğw?hY{GO}?{5'<3Mӿ'3l{ݟq~ g'f\-7O8}\>_]0O*moКo|uy|=jEw>׻٭?}~[w~qA.=O_Ky5o恽[^xo{l]\'p+Gzޓ_u_оUܯ7+rK6^ Ͻ≜,^]r>|/8ٷA;~׾oNKO^w܍k9Q=i2?!/tZ>o5]]w֟֯^+u4\oד"[(#~r=Kqv:Om||#}Ϳ~;qo#_???qw_q=a=*\'Ҍ;e_[{~oc䚝g\qr߈}8}Mo Ĕ渽 OQ[}Nc N6oi'_֎wv;}WgoݿS`Nj$oSfq_x.\e OυW;ݸ}?ݿEr?wN};E7T}w}r_/g'h6ώ''g Q>>8<=ʭn}v'9'~澽q½e| U4;%c~yS:g?;)kv ־a~xI Wic _?3〟Oo gx&y= nԱ\Gq<8ӝ|'ܱIތ|ʸW?YݟF. o~g㳺ᗫ~տ+G+/]S#zv*㴸ggq0~3^Ϟsh.vC /v+xSs)wZ"zM<~:vag_8 }@O_ox=|X\­-D7}N/t7&ϧ7ϱWp^gb#k[g3^x76|Y Ί?_\uڍ~D?[܉֏g&Xigʭ ߉7~Bޭ m^ww/90Wgr} uzCjҿs]wgu7'Cgx麌x8~xC\qJ~J90G}+NxSC~kׁN>d_/n%OoLJ)D=3|3] ~ҫ]/k')XX~t|ɹ18(ݫ9|Z'ao_>[v#Is=#<~4;I.yQ~ȧW?уogWx?qmYn18 pߟu;OkZ#/a]zH >:+?j`78ׁ?>|l>1=bWx|J| 'g~yz>[~/?|>q弿8.?o kĥ?;gƞWxK/du{\C+o//$qr>2\yo_\yǍ+Ѓ$/vL|]кi7.9[!Nogȥq1˿Q sīs͟^+K3;&/׮#* W_WoL>i8/<̟zW5Go_[\\3_[\>#gx [ ~gluFxKD[~?wSr˿{ԸjSќG請dC3q ?FCYW•u4fd_,;d> "9ĉU*A_ɳj ]2o^빯| yxB խ/9k/<'~=2\E8\Q䚾zRpe| i]5|!zb\y_+lC{eEZg߈ܩNۙg~HKq#-s[]g˳J]{yk'7O?1<~W/ Zur}q#~%.3W8K~؋cwkd}#N^~fy[[4pU|eݞ* 5C|:3{-7bv}4_~æ\뜭gHWnվuy]}қ'Rܐs>WZ5]?77 Pw׎3??$ʷf3~emy7Q񘩿/?q%ҿ?s/:ՃʸsG-ݧFߋWзW`~j񳿯=*qC~h~8-8?(j֭n|GK|mN6{  {.>i>bExw3O~jKy}"vX\}q/;:Sԟ}/W}O -{8 6dsg['+]~wu_N|+8:3g7 2kxݿG~}3k>?^~?֥gةkh;AmrOInNTO^8>l\=#`6>B?幍[fxvkMM?#'|gz{_OOe=gW=7E?xD7ng Ox8u=q{p=lx/Wkw5v8߾?~,up}1-"owxu#}}eّMuo͋pg̟jOE5<~1^Ď\}#_xG\b7 Eo/|<~*۸1i|ᄿ?]`% O/|_>x•|cQqyX¼>}_-._ޫ5u?}*o>ُ7#箃i^g32~y5t_کD;<2w?onIOohGks3__GNi>qCdu'NN}r"3=O.}a.k>lƕNO+<ZE~m\g^񊼯:q8ɥ~?҇ g|ǭcɑu6 ^)~´@7}"]Y'^M]Uع'_T/$['x^ W'WQ{ڇT=8+fߤvxɾEg'^}[_hGc^==7+q ܼ%\ћ=v^Î7+zB_븼Zq*oT_7'v8ߑ{~xz gpU;=ի>>utU|f'N }p"y)ŭ+{g=GӋg(#׋g=<5!*OoS7,/zkƕݼxxŕ+R\s)qW[;G|e]ݣq|ԧl;y8~=XaC>ho'(.inïԩˀ Gv}#Ď{x_ΧgS|O:?OG #:[䔞7#("<~fgỞg_~|l~ϭsoN|=WH}D|ڳy^F{/q8cfW7+C?,|^rg=1,Y~}JuW냣rE1Gvf1t#inUSpo|ߧgv4upC.>f7h|9r{W?ճw]~{܏ *z+83pWo> 寲?~Ol>ɳׯܸb¾풗8G|PO _7jR/u W/}OIOڙjqNcKcy_SWW>x)/|>j{onڭ''ƙgꅹ7ɕ|)}\>u}cԱo=5u\-6Oniyt][I?y.؇vI}zŌ'dyN;澽yܸ>pW\(\߄Nog|k8]3×"Ɠ"!z|ޘ|o/ӓڱ~1-K:|z=q7;^ߘyf=;%~.>wxdz~u8[-O}3%?eIgWvSv6h:{~q/KvRzؓi/ogvw>*cd.y ɾG)L_xvY_wy(q=e/#=:E<#>JNi/y7Zw{͸_Ops?~?W[-c,z?پc߾ǀߴEyw߷G/|EsPc?u􇽷^};N?x1r!~|`D/{?y7[b>yu>  gs:u[g+|WB|[7O>Aȉ_}mQ|WxߍCO1%\6[eyR8û+crixrCgpӜ9~-?|*O;%os|=7>W\:P3}c~8ߪ82~|yZvi8~;z>?ȸoMCbSr_xGq7e/=̯#9sgYҏ|KD+s"g~?Mݫv[7コTE%;uwq 敂Cvs/+~Ŀ}/<<ӳ>_Oz[\lE<{ȁwKOR8+rG/qEW2.x`rFΌ'E{wf-7T%ڏv[(/-%hȭ6>ŕyoPq->KWY^q}/?ϵ~/J>/ {A.ɛ8߮ yמ/z`IvdSC.>.fx⪼.wߟ0>9wWWǯ O]: vopߋ\'z96cwgl2=}̓93z/sao{s ?_yWpg%86ټowtߢorݩWx:r~qrcZijN$yɷ ,:CqMWT{h/\O|\zO WdzG'׿K,﷾`PڱyoorY]?g~ /K>;gO[w]޳ 筟v+<ӳ#'3W~ŕo=LƇ?o\O l9=nNǵ3I LH=?~U[ۓv#D\{X*vu+_?%o.앸7>Gɡ|0! r.Nuk3# Y^vG|uI!1'y?XxDq3^x/+3_z繿/vӞ`Ro}gUy&pb0ng{D:FO[{c5pd^<\n^ّ5~W ;[g{OKf(>83mGk77O_\6z+wx5 _?}]EƷ#^ypY{߸>5r O,<~xw?q=ɯE.x;r='`O.Lš(:ϸS6.mVOw\GGFWy{0/^c9{)n@+uƃjis78ɝO}G.۴y, pG7>7|f8=Aާںx{ 1"To oܻ^Jպ~8#m;g-֓Wo"gz`73䳝'D!G|[ߔ~Y=nGo8p7yO''7>s$/E~Z\}[?䟜Ç~u}Ь8+Z_V⧰Oߟg_]5\޳m>I8=ԣ~w1~猳~ߗy= W|,^'N\i?>^#~i׫y_J;ˠw3}>3ߧǞ/xx]Y>7]i|Xz)"gie3_|˯>^{|}=GSw7~d}9KWuABx~'7.mq\0G9Ur?⥻OU(^OwdyΗ'o|42nknE\\\N63z̷X_qܼ%=h^ҏڧs坑;3={¿I;i60nE\ދ8N耫oYqu?Ty'1x+͍q>y?` WuN|/ɥ{b ƍdߞ⼷@W~߷a'7k}zpAա֞\#Y~pf͋Wi18r?⹹<ۙ?W [y|k9O~w_>>,̋c~{ 3b=o W3\iq8q0>/.ȧ|/|yC(j^cU3q~3y"7퐷::~'6OC΍s3Lތvwgsyypd|nXqyvo~OOϼz.z}Dܢ8^9sw\8,ȷ6 Og|Ñro]ֻCor@o[_so޵ Yܝ_.;ߓ;rwv/82˿8'}5oxq!z9e>]ߏ;_/%c Wٸ/I}\w ?'܏~Ͼb{%b= sm_dϜ<荞qozθ.߂/ޤV}~p9' _;I^v]3'[9(co W=4NxW-ێG.܏|GA)r_z#gc_+oڳv\<}vwD.m3ڣph<ݎ[ob݇C8vXOx.x{Uu]ڣq4r a[ܹ#}O'.vw&sy#/GCo_wxNz`L>Ξ9S|7yٱk3׾9\eCqO3yカoW5}:Q{3<ׯ0s4+ͼv=]I?VOo;ɕ=<Oq{E0HɃu:j㩝9y[{s7!pOG?uɥ< >WWnx) Wx~_=mvSw郾xqx9zX2nx^y]aq7>>f^̓[~_;ྟ>W˼s=?hȭ<}%5zqRߥo/|%wUoo896qw8Yz!>a>֮;xGxhq:K۹v-n|] WA.gG3{lgg]3ߞߟ\j:ݴ OwO3#T$e#v~>pE?=}Ʒ?3xJ:ێmh|m=gqsMux}og~W?2߻kOYœd/?pn]+cWp|,/Yzuyמky];tfΎ|8?c6SvV?|h;@]#8~oþNy.>%k=J>cxa߸o}N//lrg٘"Njszu3}by^~;^~'u,~:}]>z~dyy,DǛ[/)&\LJ]OYn{-ut_x_RJЧpN.W~jFw?Wɑ\n}~/5'~N]^Iw?\%' 8|fdzw<_b7,3/g<[\_{ ·GK)_ݧ>6AI鏼}G_|~iuY4}J/#yErBpCɗV|鋫'Jz{2.a%3o/y:YOGí0hgTjoxKz~nqq..Nw]qw{={x~}2oKNph~P3rreppy/;ڿ/Ouyo M?zCu_b]gr2?:Ogpm#./{~ޅyTǩPz@xzPz/}~q*?r?ygrqgߟ/_۽QxtS4{}e<\>~=yo;nu~kwa>ww/n w;O;g҉:k3/q=y|^^TuL{ޏQ1#Gz]ý_=o{Lui^>'^ھg𞓷_z}rx^>=ש>2SEto}-DRepön핣g}@:]\@޻iUrl׮u|ow=0]_7N}uغ{Ԏ H?.oZ?n~w}փl}O%9uH{\|.Ϯﺍmw]ȳyGO׎;ۿn{:oٺ}7=R`O.0F~8 g1p{ڍc]y{g`]W_v=F_|f]7>j^=u3=#Ayܣycs׏߷egy}5׍2i'᱿y)gˎ㹧}խߐ{\=}އO8ճf>ތ e/oGi3ޫn7>|GW|Y{Nm۫wWNy7y;:FN#f\Y(Ny|+ߝo8w>H[wG=Yz6O;q[8w񑌏yOJڍ?ѫ?{Za;~?v͸4.bo$7{x}rEn{eWv wqS_OxcWXɃz? ~Lr1Ύ}n}o['oKv||4y;~d~^癞~;=r7ٕ[y׾Siۧ#ыw3nSg'8߿< /(2?H4qqy<g.<+ʅn#y>?/g_=긢g?8Gމp_yS z+|%lQ?hɃ׻ξAz79_a~+y<}y8إ]zSSo߉hq }M*yV<>W9jƧӭ?q 4J^rKNggmQ__s0q'kOgU3%;s?"u{Wh/m>E<]\ho*#qY78ɣ,/Y|G_uc}<'~;%3xHbg_ʸG5yh~&{<Ӄ+v@y< .^7S??`~xϸз[u^ǽhWƾlpA8~pyy>8‹3 W^gOƏ~<&8ns; ŗ/-NQq [W7}t:~YD/#=*N oԮ7w!{@nGw;._[҉ߺ9|' 85^x[OO='z''<_a?_My''TOl >ۑ#}}w3~bھrl~ȍx_up:~w=,{?W%ptܣͫG}&RPއ}_PYN_oO_g׷OyW;߿tpſOj'8o'ā~zIT.'>kOoq3|'r8ݗ?mUAĻ?~Wϳ}hju|2 =݉C_ya~73?qwS>q9)W^þnGh'/_^xg֎ǝzKr'|~n~7O<ysnWOno_'oI}⌻~Lť}}W[Tn+ogq48X^?xo5?vG^O2O K`~g7+y߅^.C٭ڹulz,yXxz)z\|ᙷcVq~o$vs~fUwIgzȏiڷyB-5{W>?Zk\}?Tƻp7.~Ҿ>u{|ƍQ/H/ezޤϓqf^ <㿟wXOHn y۾Փ'v_ln#oЙwY'BjN}[=~}y7pa>7z|7~@Zz~wu95O˧ȳ|9gEwvIMp5Yws؟`z:v<vWY'|Q^:ϓ++9ռ>8z.O^\zK+Ɓz-3gh'q稽o1.} c#,/%߬ߵL_9C%>ľ%~EEuMr>{'!>vqٿ~UY\e^sC{wlnB\`%./e{۾#c,~yx_I{x[yx|mv/y)xe\M]eOv}pꀞyy? ?m~翹8䎜KvyizP<ÕzE)I8.ǻO6>_ Oa-yUqӸ"7uWJ<z\g*{^y {x/Ҹ'vTz7i;׮J'o:~Gvɭ cſUٗc|MU(Wjtu?v[9TGo8=k﮿o?&Cҋ-u9-^^7juy}t?\?rshjHiX;Wk񐟏>#Ů*2>]+>h?T~+ד?q8|[ܜ}#\W}kry^YA=zS4?g|VOGn!gsO潼/gϯ$sؽt֯8z։o| `'C{dqbޢu?9g<۾C\cv|ГɳrJwo}QWWÕ3œxFV;qvqE!׃|&/Pޱvr-yP73}ʑ!NpWc<=: w]}=-ީk~n]o[+;ǀz-0Ӊm]\77}쟸 2Gnױ/7qIo5Eo3S神R;e C^^vڏ'J\2[QyC[Nd|N\~}O־>^[S܏=cߤNK[~<>6_Oq)G-SG3_{'+_?O.Kx:8"|Wouv ﬷(יc#@px ~~t0z+$<уֻu<'yG'rC!Uu]+=Y/Rv٧g慼=":~an>䓺ŭS^gzxvO镕ۍZ?n|'ujor/l%Wtk' Wx^sj//<మq \lo4&yz'߮ɫՃX`QoO.|2)n{}=x^W?%Ds |;yNu֯9C}~+~oN"v3gGyɋy5l xO|Wnq)筻y8`Ioan-q[_뽏0ŗyZ~(O+<<ùDׯ{ߌ*kEϽ>vd~~ 47%Zvz-<@un٫՗:Ϣ=(zx³=/Z轩?OߋYLX?@ʛOoD6dܭ˥TJ:g?]Ƨ>2VvO_QI},̋z(/ώ+9{}/ɬ2z?Y}9iyeC;SgEZcE.o'CoSr}pU*x?qwٝg\[qC=7qޅ;ǧi݉oߏIݮҗg3%ƃ;[t#y'8f>F?7|?㴼={/WY?H.zA38l~g^ssYqv0}ߣu9?qʽy^>7xϞG뽤.|N|XFߋ'wɎ_nvk[e3a5pè|z_ꌿq_@,tԎ~k\<|~.1S'x!Z;ĝ,/Uu\c!G}ۺvM;Y\m~غ,<kcJ<~{Jq֝6>N?0o8o=w<'; < .UW/}퓇U\m|p3;ָܹ-G3W'Ց^WoN:C\<u#niG-yyw<ϷDʼn8z#3?kcs G8?[}[Ыx9{ݣӺOwϚ~o~v>ke3k";Ui~yu~iES>C#v'^w=G05׹xn;O7._+M&:qɿ^8x_z~GW+|ӥ9)7~o'yk3o}uUpE zn#g*!+Oz/urx䧑{PWU8%{8_{&oOZﮎg_7l>F/]>.\]\\Mq=8pꋺq!NzDܚ_]{S=RO$<Ӻ=_yY˿NWo3EQÑ#9Y-/zyawמ W'g-y@8o}@W8KP?yu{/g^w!=u>qDɎO`+n8_ob}~_wg[O~Xo0KK~y?߼7?q5[X@?.S}g£zs[Α~` ׉fLu__M}p%=g*Z"Wͯy׾/x|=?F[&Iq}/&RN:'+z>QY/!OC|῱ϩ^?f?ڳOCVL/bo}H{/@/W'_7x?熿]|ok'܇ڝmo3rngu`[K=5=<[[nRƫ1aEԳo 酯zy\],W[~q5p[Mx~ɣ9Ӈ<g3|wo gƿ;](Bϋ[#qxubz <=u:F2W\{*7W/J=)n~Y}~zx]<up?]8%\'yڿgɃx#^s3[-j>u"&ɺDr+>ߺVG%Q^fj!ndp^ݸyBUIg}~5y^K|qqGAY>,M;:(u} ['8ʓ85>=o -\%.N{◱n{;_kU<4\ |ݐwYއbrsrQ{rg_oj18=^ʭ8ntoK Ϣ)aW?~'~K=$rm=R'YHH+Rg&na{OG>=@g>s>*nq;׫?6k#.]G8'ƵgS/N-k׼E}qvFP7="GM̫S~::# ??>/oi^>VG}0ګ>cxSx&ߥ~6~m[p:/O5ukw{lrsl] J*gfw:+|G'y/i<.}Gnqv!? nGWW5)̓zv?fʹӧx'Z;6q>#r>u)z Cq'7}3\]~9W8y)Av}U7?1c\[WOJ|#;iVgk/h/_fLgqT>7؏{K£wy[tvy7^{W8]W@,OM]8u+l뷜I>w?"8w'L,T8}8U?+8 f^_9ĕ}rn@p>}O- Թ}O 4qu1k(~Ց_ӭOWai~6Z {swfgOs!Wvf3ԯ<}Rk]{7| z<~#Q~{;IRC/ xo&?9 ׻^:+0vBq`vVoQ^6O5xq+4nqӸJkq%W[g;=~+|uev{Į :/#I='v}{{Rſxz{jgo[/Ǟi5k\6}v< [ Wp%oWcO'= g*z&w[W׈cz||Yhboo/e{or>Hᗇ}⿼9qFYD\7q >5o O#ʟ/o:pWNmYhPG|F\qu0y,zh7n߬o=lߺ'߷J|Oϳ֟W\?p6Q=uَYGu;O1ysɕ4-|c?3M]>=r3|->+uCSu )./~;Goަ!m ^7߸qxHo!n&H/k^ %<n蕵'&!EVƕ~bx|9M޸r\ξG?v߇~Wsak{~3~xx~/uAe;cy8><-p)-g~k?EO۫O巭Gn=Wmx*5G{'^Ri͓O~ck\|^pv}$GayqΟOAqFpi\ﰯ^Dz6r~x9gȋvi|q7ԃ˧cn[3Ou\N|5ګ3~.gOHw+]u}I?W _Y+Od:|OϲGx1}̎{qW||u[?ė>&z/v(w7qOP }Igr{+|Hy65O߄?1ٮ˚ MɻSھ3qyV Owf}*?t~<_볍^l!33ƩO{6?=q?7mxͮ8 \4. şWjnkOf)ハ7'?W<ޡO+GACן97ś<{xgyV:|RG\K}C^Յ9}!iƱVi~O2rm gmp׬pW[~{/3i'ݼ)/[c}lZBTuJnxk*3 _O?G =Ͼǭq=ѸżM\>loꇷNv0_8톫ؼU|pcO]Jѷ.(,^֟*yNHѯ+mnME]g/u9j'zg?InNӭeoijc_F-\ѷ'Op5wvU^>է4[5wVn>ҺwY>o\O]'fGzC7n32˞#<k޳1\e׈sxc[Ǟ〧=jW|6 =z=?WkLy%-U|şζ}5_%^鯸R-nW1KW}+q H>\=Cnmg >wjjggzb9\*1׵.=8K &OQG"O'~v?{yR;U>gO{'^]ĕzٯm]}zp8<~>{t/}8ՉX!vC.i;y| պٴk퀺[em\5i3x?Fԗ y헳jοY?gMq_J~ 3lqw}.ql{5vP] P/qy=fރqz]WNseE􇸈xu7+ϫ넭^a2.\9'<`?;.-}RjqվJ;o?[wU\ˉ'ԟRo358:ZM=vYc+n O<#+}cSK|^[\ixﮊY8u=O>xz՛kvBެy ~Ko<7 ,;Ѯ[?8^l5H7v>| WpŎYWgpyY}%9>6^OׅG{>i]գvf}N,yփO]5ct^'N}کGPN{+юYZ.8x8`LsS:ݺ:Yok"kICIwIեDŽoGq=nE\[ߔ#}`eک5;EoHqzgwx:ڡ/Ht}~x>u'"鍱o4e&Wnb≍/fзuoJƿvdSN;qM]O".Z{]Zx W Õ}f!l3uR>hkNxڳ);;~̭u敟'OZ{7p%N?=zzC}zɟ~]sJ^Ro1viZO?_xS5?ݯ_e~j]>ո3=>Yc7~>^wG>ǩyMfWqao ěZ8mN,_5qg? ox*wRWʓ<=QWUAqݪ\u@CSr懝h ̗< 9gr|ȏFug>$rj5LrC|/|nqǎ-gcw~uKNZ<xq35j2;oau, rnSyxZw7g7|u_?ɹ;w}x_׫xG#gr_Oု]98g'W=GjC5K]yתg/Qqgg}xyq[=i_ Yߓnu!K>S/*\).j~c>c }y!r.#|Nȑ*}'mxڻ•sGE^x>w>gn__^\w_/Y7_(Iuy"|Чugx; &(vv#v/aC]7_6v=/ߢ0r>)GzK!WGۺxsx9.*~ 9Vw7>w_~8(\Y/3J^S_?gՓyMeה_^}FhzIA:g_WZ5G/'ՙD>j|=\3|4^+GW>g!?y`dpǮ{^Ͼޟ7_9NW''¾τ"Nûy <[gl[W?yɅx~8fi]"q<|/?)uODv;8_g֝o],Nwgދ` O5ÿqw;WQz|n¾OSľW}UHev8>7@q)nʼ%u3 V|u'8qiaߧr6{={w &O}" WsP\E/^zN~~8O@q2Ǩ;yI]-=_{^^U{sUҸp:{_0"#ɭW6SqM'<M롮%/<7".!Oy-^ g'AumDvX^k}n~Rh}y+|\ӯu.,|O޼ p~\ݼzߩ+m~޼qaC6;gxaox:asq}/u5wثCu*rAg9O|O^}+&~ų&Oڅ7,'B|gu~=yo~ >qqџ[-g??_^s\|~lӯC=]B}[=E_K8OMg~"~wW`ٍ^"ЫE]TG]{ D} QYN]}Uk_o+L8YY3}o}#SUͺOnzg"vy7qPwS>g]>_8'Oz'~:•YBVq[7x:}eϸ#Cx⥭حuyN yGǾ+797}G8O>=/^&|\O+~k Ɲ=~߷zGz _v_Og|;O3_y.Ϣ+?_s;h}B4 g_ή{ řwK Ɠ1.'~ S=wk{X`y"އO~A~#ϕkWb?]'^||??KO_y|U@ݸ:lKzٺ]~x{(^t]EWWOigYg~ԽG|\o0x xSr_vR]x;eV PHC~ΰۇ<O?R.O qb׺M88a[OzU4|[j3x} .SP|zt~};x]9ǶsyVב񣹎?ξ3׹.uw#n=rw?zuqOb`gq_9ym^8k$'l-Go2~[!Pq߬#_[ϸj8֮~ԝpJqGۣqyWZ{e| #Ocޔs"ׇx~>\7۾R?qanaߗo:yuևWT!^1qy;}uǿ:|}S}/uPW=$nc?Vz:q1\m\6q؏'x<7nq<>~(^ysO:=q0ov?a\xϿKyLJ=z|r\}px @/}p%~w?^xǫգʯ?-cƏŹGW{]q!wv3_ۯ'ʁ_<wy<Oo\UWNui>/cϼܭnq3|;ַdW֧zv{ֳգntgSoY֫:?udggN||s~ٍ_~yw뷟WuMTo?_ [g1v]Υlz]Bv/v>yGNy~-~g;gW=ǯ~pv9S=p\߲M1^[]u|/?X3^}PօϾ֓8{yYGl_˺^R?|~3\^nsoOn}\վן>}/=>õBw{\Ӯ[/֙WfW$oV?}wpu]Aߧa]Of_u,8It?~z?a\Cwcgycڵ=mO1.{}}`هc_;ޯѷ39]‘3Mf՘Wa\v}Xc_XOE^c>8˱t}jҎkBٗs~`uxD%axWb}K4}O3\XyҞ\|qΫ<~_NӎrI^sU3q`2}_Uߞk}|[gVN#˼x{;i_ر _uο|Wrg:qXbg_>bM~y > '~|ҵ*(bOqvqWˁ%9'B]u}g~Uqyu?~=߱SoI|ɾGo7ߴyg~'#GpP9<|w2m׎i>ۿ7t5<791,s}a{_緓Czv%_y_W9ZObšy%gY98؇C;W_.<-kxy~qf{g}٩sOW7͸W/'OO og>'- Wx޷cGQދJiYy8}G$I Yo5~{խ$oO䓞_/?%w{!@__'.?=x2{>ވF!^/J֟ǵ;6E^K;=~Cۓċğ*ݓO}qh^[7;ޓE]e酵3%3Z$(g8|vtx_籷xmgUySq q!c6N"ߺ|/$;|om^W1eȏhI\ɳ[䛿￳څT 6;u;|E>Ityp?Zvgwn\_~GzWW!܍IQcu}>~ H?ϛwR5?yݿ[?ʗWٓE }z:yO:?v<ϛ z'i~q$ξ:q?'s>_g}cSx~;LSrd˓;q7YMp]Od? 2_y%q'qtq+/O݅81;>}?-yɻWgWzv)6n'?ƻwp(>xƕy9[p˙wy=_ďG{[ E3q$t~9~N~88DNM~[^ǮU.‡v?;8o??D`=ν)\cpE7h??.,qɣ<3lB;逸k}'r[_{R7=ݱ7!xWꚬ[|TuY/þ{3ճDxЍ*._+9;3^m> vdؓ_m~Hu~ݸ9?=,n{}/^͕ħkxnSLe7_W|뿼G{=ޣi߇*׿vRK/T/5%ZM㊾s뗋~+O#X|hإ~oQ<9eqd~?ύqYe~nI9n],G&ڵzTv>^~a=L>Svix43x4Ğ]~_y_Q/8uL3Bn>82\Szk#ߋ/Lșq'oqw^e볞8"G.ߧ}Ӯ͛<_:|u^Of}y·?6O-^M]j~k24^|J5g>Ǝ# __WYc<|n^^wY~ǂvK?gb/u5[S=K'gy1(0v_7 W{,2xw]5uy?]㊽Z\9 uŇꗇaY~Ԍ3n\%ug?;ËC|F<8ؼc֗=~;G> vcX}亩K Nƿ~:ZM3 ~y͟lC"<6?9xOozi~* +:LRp/|m{nW]>7 c,o=𺎧vX޽[0_&_n W{'#Z߲>y\g=*vzrpEǺ uv=|?>~{oJ8⡿G>3{6C\iuL!.1SNr+ zAqvF^X'N~<6YpkOqj8Y.jkc< ϔG}o8uO6*r:2q_{r'?Z&eI~$޺|f|rm-?<;'+jg|(`8_ug-mxYދw;~۟#y5lgV|Opiuv^m毦q7'kߘW9|O1Ɵvc {O.:yS^:vzጟq ֯1|o_}rm^ .^eO:M}Ȼ,.Aތ?OGn Wo]Y={g730?X,ûUy yϧx:G<(\xĝ񏌛=u~3c7uR[PKI}c;%O]|v-p5q/goG/f4}Z4(_2;o7SǬ?9nmgkC*E|zP\H](~uK;兣ޜR[ިoR[^7q];_ ysTy{_}Bq5g.UN.I+M/o ~?ؼ W/d2!#֣7xPٺ^3D{<{O^Jܸ&_2LVoWz+z!3N㤾־?'m^}-r).EwPxy2Ξ}T$e󴞂|o^y<x/phݪyfY'~kus#곷>>dwZnE[ӼpWjwO+rK9zQo 7yKi!|zO`/Oq{q.q/q|<({ո%qȻx?z%,g/wS×WF~9Ҹ>\(uL/_wj7o~:UWTn|0<=E? +nC N)y/;;?#7~KӇk֏Q\M^q#/,12>ۺv+DkrL߉Ofߘ*~Op#/7eܸ<|8/L=koUS_WyR_'(bөv/=7]\z_}9/7 ]uw!r;_}hFÕ%<^NӰ~+HycGj -E~>d:C܁MU<'Pl}ڳ8aSI;iq%5PW??}v]|Lwׅ Oׯ1Gvy_vk^`^'_|cߞ48y5ύK3҉3}+zl>׹b??[}1k/ޛo{?/<{g<;3qu}x0N}=6o\K_9|eEV5\7zk3լx;sf-$~E}|MvYx<ڭDo!~'.zI|x* I^Z?^W8[qSׯd&xaދj]ܕ7Ѽwޓß{upt>]>J(CSrD޻ ?6o->;v ' '\n3B8+~.x1z^ɓ~h%דwU?uJ1ްI ObzEvYy2?86~BϪGGܟ<z<-߳un9}$_G֟vm֣]>c9}}o׏d|k泸h?xz#}H,y2׎#f~Y'þ02|?@hw^?/7a|q E>L?|tpp,uQi:Y_|5T[)}+pf~ ym~!?̧"ރ•ʸɗpr콚Lͮxx|? >pOe̋^ݺ3&N\9xr(bǗ3pzUp'xm\݂3/!g˳cOyʣ'1\.vjٺkVx:~ͯ!GG[%oD8vt*H?ȇs$zFɗSW_9oؼm/aq@?{%gx-gOx17񯊫|DwO|[/U{x{8$\DZ?&s/`Ƕ|6%qRW*IO~-VOxH}]|~aڡR~^_^ܼkx+>/x{/>`_6ȟߞqSufW>pKsW^~@;_^nx=~a DJov?~ȵk<ߋk<<Ծ]ܚP~$OSv¸[rCN^?yy7Gs:s^ /\bǾoUHk/y}xN-3#xˣ ^%\9cЎ{ _%ڿbڹb/K{?;+ݧ0O.fׇs]*} 麚} n< s&o}|޺M0~z`]?nų77j |L^P]sKx|< Y񩌷ywMƋ^&u9_(.cߢ7͛H:ˋ]3~pñzo|/w4sγ>:ԣo ~b7[?y_Svkoۮ񸉧[yɩKM!'ֻW \NjhP췸v[F Ə54G>-O5~>,\{ݒCY~a7<\~;~!yveoq]_H!OyW ۠'ݧ|rW\3xe*|W#ϧ. y |?E>uGW \z% .|c qt|k݄}ƭ;:$^x懵0o>WgO|OC}|z;LIx]8۱?~'xx:\kC?ǓqOTɏn,F^GY;N~99~;r&D]D/l6g7W#Vw..lkm|^[<_W㻑Sv^W4mqxKkZ{vV'xƳzr"/yߒS<-m170ogO;!+x:oo7z/_Ҭpx:9 >kq. vzf[7߻ǽ5TBuHcݻq>C&Z^w/L{v떺dU~ux~);nb/Ko~xh{v={Ƌ|yaw&\Zg(oءS]cN>Oy+x*Լ5^#;?3=?zݿey rG?~\<'uW __S 4/#|5~o+?er:G|99? Wknv'z3"Go=0?3Za~N~8$#EpB;hO3m,x'|wڹuQ/QS;{r\;tfΎgW7 Rq%#m>[zy^L.[ؙmUk,.FǴu _}f/LMM3 >yx#}vttgN݁/$yvWptiJαIQ>嗑ovGqeğҞ]I;-xTyNtW~}_2^w"{viG? iyǻ;o_eof!gŧ6yOr'67umcu.n{q>_${,.ׅnmw[">?7譾wy>dAS\9{_u=[f O9|Cț8w38}˿uGב7a/G-~$z|o>/8OS\{Oqz8!zS!qssROKnv?FzNG*Ը*|,C}7q*dO)6;yz')RL\L8;z8"ǍOpڏ6H|(>>GtLݲ|Ȟljj#['7~uרnm+H<.C׆uLs۲w9H.~-W.^9VB^xϵiW;G+|\[o'ᚼ?&r)9_v:/|kggxI}m?y[`=j::]/c׽WBOoz[ .{rGn8nrQ|U]r!ew{rqr'G蟵kZvtu6~1<퇳|1^[D>ArW0^`w?%coG~7_ckəyX- ?,{ո}p?ʯqqc;%rxYѸ`Eحc‹w'yAvbݷ)R\ux{?~p=q~N\O6޺k>&Tqu"WZk}H_Z~<-竫sX|<3cP~؋/x8ԃ8%\k_ YV5ԸƓּ*rz;JANLַ8 4_=]tR^9Y?<ܔrLJ/[z(r.غurc돛Oqp_rN73w8|/nqGd>I?Ov=Uvϒ'ݢV~r>}d|g_5~=ii>$/W^Vw _{uw}{uD=%Oۺڍwᗵnhj/&ɑ#rI~ nix\q|vu%`o}:^ӿ׺{zlpڹ]zڟUTW\=roz|'x/wk}Q:)"q\<N=~#)n:E|q8=[/Eo}ua?^xޗG_|.:fm<+vqg}՛`WM*P\? fC> įx-շxqm<|kkvD8fW򽩳m\}mֻ];a$ƇGrbGk`_&׾!onQs<3#/{_ݰ*L}JI_\mq|^u}DutaGx U'X:1qջ.k >iO?W\Gowq\G_놦o (=6N8Nzs7uQG=pmup3~=M;N=uk_>x(nn4UGNps4;u:{̟"'ȸu&|>#qz^N{|}}5~?_;<8-xW:_vq\2~Omdp+gY]}Ļnkc㙇<~wxtE|=Q4ESoY8џK]"{@K?oʿr_ÿ#oŸ ~j}x׏/zWڻ-n_hܗ2_>S'Ɖ=]܍GTWμ4$.5|:_~u{ +د|Vgœk^?#+筽ba꩙W+iq3{gƯ%١Sy]3\9oy8+oE۬nDR'uF~-x |GW>x>^Tϯ܏?~&ǧ銸8Kx8k߅Sݗ.G8bos~z.cWGW4}@x/:Չ_W{O5h| s|\_=987ҟgTOGhnp'.OK>[oqݸ=2&nA/'N{ӝ__g3q| ;>^G9#xxh#iMg?}|wL{ _ y0)Wg /],n=Ǔg_;Gr p6;9xٸNz762vēN7?>_{p<{߷t+^ >nWɸ]U_qsqS|3>s㆗=;㍛gcy3[v ^Oۼx[@~K%|oZU_wLRZkgMW}v5/c+]&\m^xc")7Wܺz|ac,~qWnGg֞nr忼1<{_N{Hš}[f;8G=G> xq Wg'Һ4>C=g8:]utx_?[اb%yoҡ^}#G6W.t!֋FJY<ķoW7uL_e6_z݊SG×/ Ǎ87ϓzWP ېonծ_ǭf?7~Rrb믩ÈWN+9G __ .!wW;?vɃ3^]uU㩴dU."GWO"A^em<wyzyDq͗艉SϒC;~ᕾX;kEğ___hb JlEgc/'/rt>{_Ns:{=6>/3?3Na㹿Vşsu&p /|&мkz ?~=;)x(7zay{i[!rGﺸ'nL*f}0?0_W/,3=qT'|{6œߎ˳#W=y$W{33'r}~ߛy?m#UF|~k7̹b8GY<Ԯɑ]93@oE~+Ͽn\"O/a@g~/eq|s#9|6^֙g ~dWpVyA,SoNșj/w^s\vc^W센ڭ1mLo3Syln/o??ٺRwqwk~w2W<{_z׼:{ O'+>r}d_;~y -s'ǮqWn\M^~oƯj~kv-y;5{6/߂ᇾlh^~N?׾uiS4ΐGO;\ (~p8ƻi~Ю>k_Y^.8n ri ^K;_yPz=5KOj^<^g'울m&v8<;sO:wӭeo=vnQ睌;/z/]#WwD>Fώ<~x'<}h=i&R6?b'g;.<^z~?}sR2qm˿cwI\q?zPG;ՋчWn^pE[}7$#cӌxqG?ѫ[O/z<_ gүG '|K~+ͮWzߕx 'ʫ7]:7.;90yz/{M N~8oI̿ƕȻx^+ Gd WK&΄1ïc==S|6ϫ'6ݺ!??Ix~y-?-?zMva絗x!*opML]F?8o⍇xs"zi*[o8__M~yy'V͑?Վggw~+?u߮91UGWJn5>}z]72.po")o>X|G.ݼ^}O^/>`p_Nz?[q\oV/Mz qEο}̃;{nA ZF^6H9}oٓ֏v~x2||ڗ^'Я xzxo>`>=!wW{|l='䋣kϮ;O-u^G׿{ٵY_Gr}@g^g;Y>cv1D>x/OZ\ɯy0>x{Ϊً~o ~}J2oy-?h!Zd?=˗9=7]G?DxhX8}Z=%CK;=N_[==vևxCn}ubؙuBa8%wƇ:k'ӿs橼nJz68R.m|n"(oz,+_W6wYzt,/:ا[J6Qo~owQ>9ϑuS]ӟ7?u0O99Yߺ~ρpi|Չ}#o*nW֞W3W= yds[WϼwExXz+v~xڡ千]!<ֻbˣmؑ#%|}_ ma}f){0~؁7NK|7Ň=nuW+e<oioӣy5H|^yNmq\u<0Yj;Ñn}bɝz^O568\Dmr|\Cp'sfkߌ~js{q[yЮq4o+7\We[?l<Y~l^;/?kўwG]|][]pe W7Mާϝ]}O[;w{?=f߻&>/ōk[6&|2Ić/c dy^w3G~}NK_O]/xߧ\>lC?>\~{W?8^>K?8~p@{ɮ?^xǫգʯ?-#:ă7xf7+{ ~ߗOk~-ǽߥv4OU8ԎsQDh/׎ks|q#c%!|߻ns=kG[Ky+ܻ^>wC?se|K>SKT]x2OqiƭGƕvum~֎9_wS}:qzG?bɫ4#O2#un=a\+'rWiGbک.RΪu{Y~:s]G _8OʾW;f,YZ8Ou !jt]Sɾ(oooy4Y1P]בu/kh}u՛}3]m>-f=|M}s=։|*;ysy>B~W__W>E~::_]Yֵo_uڧ߻8ٺ Gɴ_֕~z P{~g}iH>>x9Z/c~V_\6hi[z<&GbZgrGc/c޷cpOǹ>5ϺD8u* |g9qtz|u]LK?>ޯ?wأߵ8q o:o]?q柽'Ɓ龓{ȱ'fG.K \ ^!Os)ȯgI!^_{] >c< a|PAWV~{3xLO}Nt_gCOt6/v+*c>Yrf/勵q)yS_t? 7};ϯ]q_uÞ䔟D [c8Oow+|g༾_%vŽ/Cs{}?K?u_MO>r?[$@άv\ϴOGG_8;9w7٧"8Ʈw~ɣu|>O#ԎfgvWw  ~=+~Gjm<S㪿>׍+yF =P\;'Oy\=ヌ1W}_wKO~l?9_g'!H䝽g|l><9#@~;_gxc_^Ŏg\Fo{^W?>yZE~V?N{YnW]0j7og?#'G{_~w!zcO'&pD;px mw'^8u~G0GwzM['}/?<쳫p?C l~%,σ'׳M>K3bz q?4<]?^fQy~i~ɉ.L'3F_^:䨸:5OyoVOn¼nxo<,_*s ?`*w-/Ix?|Gol> h[2Fn|,~v>Əo&]0Gydo!8xvTo W/"}_l!ܙ_x=Lij);>;zy;^Es]Ϟn|q'x)7 ?Ly6ȮLqo6?nܶug'3ČGM7>;SwWa?O\n pG/;%|x##>K S~v^Wȓvdṃ7cw7s7ž<-y_w]9}z]~/rQz̃?z~8y)[>`'C?Nr9y<4]߀gV8ϼq==^\?03^z82㈏xY j+ut5/1yƛo~qaݙ<3w!N'n!vg|6gΖ<1wƏʭd?NN|Wg>~k>;~ {rTyÝuU+G\nWƟjAtx8>_jdmyCw{;__GH;O^^L<{vO_9er%0z<-'xB={A;'~:8_gF^{yq$Kqk/v4\5ޠV}Lk?q?:Asp~Ϲ=9rzNיv80E/[>3SN{˧~޸{o?;q_:7 /sᛇ838o0oƍ>~ׄxނ~ts^ebi~dW^gzH+k~6x:^rFkWS?׉T}o~7+~'<>E_j?|3p g[3ܩ,85$z@vj붾}+p6ȯمNӧG~-x}=ov?r>|,W{m\i+hˮӉ==ʅ|z7v~{|.OlKv~|)\4c8;5i&w֕tZG=ǏFǸߋa9Y}p˱+~_\9_OH:c[GH]3wyou';[G?>};g<~wxwżgvC_#?~\V3}0<3/_F>|*wp9/O<_ٿ/ծ 78,^.=wS3籿Ы$wcw=W]g>qx^*_-ʾ?O_ϓw,ڝqC'GǾ3vn?yWn;nx1;;ޓw{x3o)g7Ipo? ϧO3?}鵕Gq/~}Owv-U߷f~Ke/zgrN=%(V~<]%=ƙ}c7.H\;CwI X>{obN}#A>8~>#۳xȟ>d'vhp{~68ݳqpo{<q_߿~O*?zq=_x:6㣿|}C|/!'źm ?׷ WݟnNrO詭=u.k[? wG}Γyt81-^[|ygq?σ/_==>xɼPV<73^H{|7!=}gL~o}mWkr} q}֏g3\|(=Ʃߟg| :N֮?xm7{+q91~4c%/Bvk=UWoiw?[|sw(G~jׁ?N.nSp+9c_;aywG/gO7:_<37uvIc^W@W/Í/OM++/E/9kg{僉wo"ԗ-N`^<zH'sݸ1BGzO\79{MϾdWA}i=n>0upow0'g}o/;i} ˷þrA~Gȩsv]x Gx`6>qv_ן_}*׬(?6?+Kqs?Bÿ7W?䌾s?|:㱇Ƒwq+qvƫu}9;ɾEt|JuR3iO~9{zwf_u+>8wO;p%=u΃>U9x+m=j=I>O>+YC9ynx"~?]孙Gyo4u"Y܁~f}x!uͱzґ6x,{8=5n1 _g!^h< GOy~g^ χ&ita:*ΐ}"}ϸu#qw o1O9la}}OE~o>T/e_s->-Grx/=b\֎pyV'wc;/|U^_s$>_~叏^wO}o {r:໸ޡYCg^ͻq1ox?]!_|CFƯ>ѻ?p+xy > ]H8d<<=3xq GƙڗdoO~x:&Dm:7}Ls4D]f}6\9{SgÎ}~+p_z6wY y֟~8%ƹkͿ?ǭGgZo@~f"Oo98u׎Wz!߻~ճq[ox^:i'|g9{ovH}p1%n Wv=j;aAן 2N{5+{Eޟ|OOg*(K߄F+_5=a#~#عK]~3~DoNE|o~{rH/rҸe?9՞C- ~ 8z@85aO?7'?3u//8#/77>qDx ?|6..m3|!嗿t#rowo{<_\a';d@?a/N<Wf|#m} 9o٩C39$i'u&n6}__8x<78#v^>cŝwtˏ../_85;}nwHn3o)׉>O|vprIDg7goYfGUQ\^Y%oe=8UpU(~#^N\U8"xBw1qL[?F;gq>g%f~wͯ8ŕ~U>g WpcbݺӾ6xuRpq]W?pv^;zDqU+>9iw/w_Nk^ٱz?C_q_ fg'gv+ nn:Y'_qGKyv8x N=y=i֞ξP}}+hqpf>M}|y/S7_&P;6x%{8a=rxMǏa>ܑǍl\o f`)A7y&q_g:ڥ~3U[2w:}9^-Qaqx-a{~8iyֳ}->_3<çg2O&^O$%P{E^O_^os%H#ݯ~GNWxxM+j_mqqé%׸H_^?n/H^s8\\n~簷x;37'.i~F_,|| Nȷ;',$r#ڸ#~~ W+#ګy>/Ox!=˞4odaM|v-a;+^|k7}~㍧tcmyu#o^oݍӍ\W$<u oE6o{|NpF ?wJs}уvֿ0l7n ^2/  A )JT,KbQl(j&QRwUU=ەyCLTu "Vw?wuWjanΏۗ??a/KE~߬o'QjpΟ$P=O\'ua/&͎ϐEq|]?3΃o_Sv1kզ>WNެUv ]ȟkƕ8m˧~ByʓBvbUSi7yzmv5fo'Gg˺ %ңIUfgǏxx Zĵgv9Bi_MGs_p>MO[+f=+:/޾p*qᛶ\^p$Ư{ϙ7|[ns}Vy!vVR_ؗC\ruEĩ;(n<휏!ؑ} mٍſ:2o@]/$~)])osm_ƞjx)1W8IH#vWjOϻ5(~.$n+{~!yO}?Tz=O~?mفH_+j)c*L烇[D~ope/֝C7r%_~V*.q?)=H/}H K-]79/8R_nnxڡ8$=¸xbm|Cw+dx}y zatxd7qG|_-ѱ;. 3'O圾C3}n|c`(+ ߷(J?;do•uͳ`NWyBOW!_[Pu_f<ޝsg{/OZv<;.~ةC~wpn>p7ŷpee?_O{‘#/ z*u3Ov!|Nc4ϗ<~HOt|Ǵ.Ms?~v=D?ï%4zwyӮ}!:~;~k,|b1\Wιys˻Tse~,_=1ފ=zgI8.p)}G]~{Luĭۮ{>b3~%8ѝg>/6g͗C_Uh>0y%u}3K{|3}T u~~I\}®/p-?DikBry[pJ ~iƟ5wڇуCYЃO%\oص޵pkgW\A ߲u6sq=}F&{KϺi^_+v?wߣ|=[z .q7>pIo\f՜'o) r4zJ)NwW_j\?U<'uOou ߲ 1o'߱nZ=}PK/~/n)ف+uܮJчK.l-uT+W,q7?:ş麺> Ny~ψ?<=Ʈ aqW9G_' ongu]Nq告O/bg^pUj⇍WUU4tnEέܟsg=}T O,J?=w | ~_|gOK[  3ta7z;×A?]W~w9Dži|s=+_\q72_,|gmz yFOv_W;֡qſW:87'xG;ϊ^xc_=u88XGqDxi?Hx '90qs[y-Wu^z @qGOO3Z\˲wK՟A1Ih:Yg?N`-;>7Oir=~mGOoOi}_gyIٍxݾq)y.NYKg朌gv~Wi?hW%n1;¿r>΍9LS%op`)98s7〛Gcn|W?ya|4M;|}_9n~7.COyK{]oßƁ!Б<5-=xEU8ra$vN*Z/ݎ'Wվ'rо>~ 1+?vs@e{y vܯ{suxm? G]~z'^7xo8|J 7쮎s ؉\6?şG<'σƻqwwz>w||5~"3g?qoOOy.~c\=9G'jIfpn/}S޷ޛ˛$s)ܾo8 ީ׊9͢gIN'_D,}?P?OrЙhB 7bgr!v΍3lq59Ƿ7?WN~~YEo<_3ٹΟipe|O=b4w{y/_M7['Y=yrٌshz[C{r}ANt'[\&^nم͡K<u oЕoEA|E3x 꽐|Ѷ{nvyoQy< ɥ s;NoK=|v=,YEM^ <}~OUjPb)-z`$_:/xpe^?|<]ds=<\+tH5ܺ}μOKb[q..-h^*ȣOh?:?߃U8op{o\Xt:0+~~6}Bs-Kv?[+5?~ ?^j"k,*NTJ~䙖" ~u'<:wqvF_+II8myI~+o)kt}!ޱ\&Ǎ;jޅGeYsapk}Z8`w_(NRWv v/z{n^?[\p5OY?N>t7S?=0Q]?@ϱsO9ެ'9AW=Yy^_|ɋxbgscƷ݆̓iW[q )l>w:G%-}>' r'~I9hM?:^?vzmsgӸhzzx?p{Nљ︍k(+~~O:Zr+=t<;M4=m~Ε>e}ӱq̓|R=vI gŕw{Ϳ~ߵoAR?khU(ϋ~ow_/\e_+ø͖}J~ ˏb _N%.l}Ї_^ U _?'Վ/n׸nwx镝ljWu6|%?975黜GUWε>3Es?y/. ޞV\ſx:'ECrMχmuߍCz9W[iɭ3;e'KK,|0?-N1u={μ[Jq>zM}Wa/zyWuA\U<~:0v|vuHp8j|ˌgsr\~x>= /?->}w>wB<9w?t^z?WGo^GUw\_r\}vܩq8`c<:t$'WSm_}망w~l4 ,~?>k_ᐋGweF _G[}&=qj<+SҸ+EuJ8'mCvO\o}ڮwH.8]? Yǎ{r *tH^-}n{&K=gm?w׾[h^ܙ~<{8tg]orѬ?G?/x~o=d^yu/S.鱛p5W:?YOgy?Э+rm"?ȡԳx^I4y;9&8.z^Կnx }Z_^~Iܢ} Ÿ޾W3yk\&wù_uzosqjU{i}}G|_Wror,9l{q?Zg|z>ww?^6tѢ#)~F3}rN q@NjtB>gtF7+\Y^ק^Iay6>@ouF}=?Y|};A/˖]'f=~q7@[oxd\޾l돏+[?!g6gYǎy>>o9Ng|/n 2Go?K~/zm Wq痵ʹAZ$HδK֡z>=>}1i󼙧|㓎Gz=?;{f6v{3_j o7c_F睍>Z:/_,:[Cg=<ݱ?zQ^8TR_ǥ>k~'yC[뀾o ]ϷNp|V79F8NKſpM?ə_i=}N w|Hqoڪs=gz?c^|L>>!xu^q?02>ߎß  w<w| 86=l~7=\ _幍g~ǡc)9qJ?{'태)c/DnZt9f '_*n~wv`saֻgY7|߭'y?+8IܠM2 !^\|O[ xW~p%*t@'?KU7wq/·~"os~- wk~!_,y;p_WWCGʹ3;B:9Hͻߵ[?ƎZ?t{ >rsCO5k}G]|ݒ;k^E. |=q2us^u^`z ]dɇϫ5OͳGG7ُN~R)[ћyЕ>#;z~?xu&'A3kEtRקgkS \=Ϭq;+=O ?%kr<݊kY؁g?:>>tg%X㮷`[c+xȩYWrbG쫎k^W⠝2>|Z߳|z8ߋDNA}'؋ܐ;4?W|ݚ8C{֩5^|~?,>>L߱pU|C$ͼ.I~{P.?|QqKC+]:9S/bgcp@Z/|bNKO.zy[:s%>1D3۸{˺{6ѓ_t`]'g}wt}./37?,;+r:wx>z^o}?rc9Ol"~\'m<჎?=>njgqKjEr#wG>7=i|K踚W󙝍Y }Sg1ReFO?7~oa'w$ϣKxW֏~ 3'pg/yq1^r}~.Cvawyjz9?gO>o+?]}=~L{ cquueOi}5gtD7nZG/'8ƅ~GM^1O>1Gk<^N~c~gI~q ϱpсsۑ !~_cgt GRކ+v ;Qs<+o{/~GY7KpG7ٙqOgǹ5P޺s鸓<z^ ;A$1t.yˌ-]Œ_pNG XrvQ/9W߸X7mXv e|E_.gW5'{S>| &w:a}v9/y]؍#" }o>"'ɋN:-^5r!o{~m[\؃6d={}ѓ] -;O*uDCu}NhO[q3^?<?Ϋw^nAq{'h*xW+G?|4we3j/m$?y/~p?Guusat.~~/ߨym/~뼌Oݦ.S/?孬_r x"/Zd}}ҽ5z.9\ݸ~%Wї'ULYv[;?-{>Nt{_WɱZK.v=E؏d 'spH+XAW@#z E~>&>lkT7lpCOMyC :XAypp/Afo}vBeCZ#Yx1N v^ゾs^q S'4Sտ◖ߓu'~ò%\nwvu/n+=GOz]_ɯ!cX׬ܟ8I+~*#~=Eu<|6_xsc? ؟)yx }^\FxQ\--UZnm01G=t__~㹮KǕ刺wE.;A>tl A?Ϯw?Ϯ8yoߛ'yR2}3쾎G/}}~_-m}{=]5D|>E\[__y;y~Dzw-u3nzAw|\GF><[-[?}uY[Ң[~r]챜y,}5x9ѓw}8ܽ?,\M}{c:Wݿq/߾_[3yaTނR~߭x\PS K|~<;PɣƳN3|޶wzqcpv:'t.~9 yyإDz#]Wʎ[nmXHN<7͝z5O_c:qOǟO}鿺s'/_#>~ɣ?p^؇_sxw{oΝ|oߵݜp'ؿ }>9 =>˹P;_dЯ{{q3r9Y ѷ赓Gu.DZ[>ݟj=q]b˹Ϳ;ږa>7ݮJ_@{XcMn{͗pu=\kG=tUio7_ܸzk{^{ޣ_[zz^rpU<;NP[mt=χ乷L=\Dq8oB^C_;vfB}qqꨖߞG}8_¯ө_Koꊖڿ{ߧ./jUפNI=u *m?'7I<׳,z_Wwqw2u}93Y(o{e<_g}Wsѯ^2<V7fܩgQ_ٿO:UuULiE WNޙfgRʌOz>벝S5.vK;utK?ڇ_z?{_Rj|S'O}{Kuysbz?X3_ܗrukmsy/guЮS7yZuZu^^Q^]?CwU<yߓW`ć6v5?~'o |vs}y{{ o9t}>}y~#9N7}n:sO~iІν>坿 \og?}OgSΟuUJb߸ r|st*NqKwc=.2N$ٟ߼~Dyq̹es<<뾕Sӿr3rHݚ-׏8}^;}Iwh?X?9hR_\⮽Ϧik =:~߿|<#8ٝI|x8gx?]y/r5>7/zy|;]|ӹpk?[^|ѥyeCO7Yws{ò2S7fo>Y|B=#iߺJ|8x<g}zo˧4=v7}6{O,sZ0}cGisسE8|?~/`4\釽nfg'8<' k*/Ty$D?Mއ>.\?u[|>^򤅏u"_`NJgW7?ߒG{[qm;!:"Fk9l zl]Yy%G\Ug9q =;nA'8sXjYx?pA0#qdq7)ެmEE,vR9I'%?ā'^8v_u垮`߶|T~: %u)Uy+?*ܹU֓uGf ֥~viǩ?1ySѡx:?5qPrקqcv=̟Kj]Zz/v:@[gm} ߔpq?MWWzup>=ZzO||Ϯ̯qEܚ?H|F3u 8kZ䛭=Ύf6/] :O gv:NI;~0.`ob,x:rsOg8V1{Y|=#ێ߷f>X|qys'ʼn~ؗoGK7go _7__q:s{Og}ڢ]o_Е?`77]-/Y?W|viq•ȧ߰хe{i߱Eb_&W!;G|R$ȯ2?M_7?GA<[}Ư1݆Oų:n{|߸4tr;o]cwppU//+%s}xcװzrNފ%]?WS)>k?!'==w-=^z-ע+n%[~CMS}x3[=}q_;3'WMA +k\=E>z%<$ύ1Ygy.֙q5։sivܾ_w!=D>-Ob혌Ǹ{c's5ԧY7/?v7 ͔o ͏G?y;^}}>S݅uUM<ؕɮ;P(nyr-y/uWv/Jrw-݉[-qǺ$q_=]&~/ 6KTDOj;Gފss}U'}8&>A%p<էg'W<ܴ/1W.Vq߬V_mgJڗ wӡ;h+x׊uY:~v Cȡ6^N/@Wy7?tl_^%3Q] /s!6u=CM_<3{vvRcoq:'%.}:x3\O<iwptwggW覾:'MW'!GCj~3[I9$\>'ˏX܆>CM=vwOm|~O}W[pԿϺv|NЬ?"zUL]DWO2t~k{Lz}z}Of_<7r~TA_/o~:ϙ}/OSW2tWN}⇱ W t% Wj"/7~ҖǾ؏#Ǫco /}z;Jm7O -My.Ǝ`1CgtȷwoM\v+ެ.go>>/S*EOîL^uCz8~}yRrJ|8} .v,\OuϠ>kUOO+zwϾo?/o5e%+pn߲o.u%US{y'lu}s a[/yg7?KdЯL^˾S?X ywNwznD,ߗƩ_فpL}N~kp#WNɏq6tR s>Kcv~P溶'ħwIy9vmzR&xfGu]GWm/xU/~FQ8Y@=ms}ٷ~J\sx_dw]8~>:!᎞\·<zv1Ϯ#gxQ3cGc(K#W Ws_+33r呓t瓧<2gC _=kߐQ7 uJZF/[뇼qKԓK~gzVO< @}G䉼—Wd:W;\\ԟ;B@~}?C$ >Q^Ӧ.)Kω_ɋ{ټwƎt{C'n~Es }N_ыɂ#yCʬWe#1enFG%y:q#9O~ N"Gʎ>w>~'oSoKn{^< RTإ.M0uW91U&WZ;OW.񔱇5}.UM}$oي/>x^˦~E^>cP6v%~pj]_~ſowB] HofW ]uKr`ϸ>vs-m k_mygmͫ[p:>|UĞ\o"   yh죵.cbߍ|SuAy@Κ_%_k鏝W'ƅ6vz+.9ʍ"N+'*>˛w5:4 zU\!Y]P9NoL]}^78#OLbqŮzigwt: ;y-˾%~oxn\ys튿ػ;|%s_^az>U,]c'_+WN\[T\$<(=ww]'8(~; N/C2j3otx@~`/>q:' C!=$?@ފnke-ы ?q57)7vu}0~m>Ze?/m庺\1׆ D+;@|Ǿ-{yyuOC=&^1_ct]:꼳{o?ظyGE_)vD7&+䙸xzI's9լW}>'i#ׯW_oAu1]~/ {5țȋw;zi=+ϸU!v_[-yf|ybJ<g|{F[_-|Yzpm۾;%:"tkU]$;އ&|/dLOȿ~6z>UW[\Fׂ#,zoA }>,zt}|:qӜLގ>IG۝[Z~5\m'+p4'[5.E[c%֓"/IW!O]'?/q}ve*zΙG`]<z{~S3U/)f]^W˹M> /ىٗ=]z߄?xuW_;6F{poU||P }_n_}g{o#O{D]oom2?2zH&N?g W#᪯+v]ӈ_9UdٷY}uN=q;q,w%.u&nX;^~Գ:Fuy_#2\o'ce-8z&Bԡ3UĽދ=qM^8~luQ֣wޓz'*oR>v8 e]?OX~Wݪs9cNouvNo8 {J\cp:}v_Y(_->9Kz3?GywcWje>txf?pV~ǿ0uKܢ»{P?/wˍ|pN^qXGRg|ɾ/:&sݸzާZ['ʮNo5=??}^7Ƀڟ qHyWSsJz_hȊ#6Az@'7v79o\]j^S;Ρ:'zz6RsK' :o'/?ѧzϼͼGImn{9*.__?=s۟)F/|oԺE ^Xg>=rWg F ~T}N/}Hc;/SιU!vu(=򾏲 W\tB[Bή·M)挫sL>YjcX] c3.~sS2"R8nኾ[7N{[M>-qG *X~ڵfȹ8S?ܓ7W~\ڿ;t*=q ٜS֬w%#Iq>}\?CsF&lpC}w_D|n0ϧs.}NUͥ.`kw"G~!_yo(OR/Tu į+qj|uC`*LC)d<FEsµ9WƾdqRzv:v!nkxʫȝwPt >?9pSr;WY'rz}k/]ѿ,\(q)8g_;\U\}g{0sār.H˾r~8[-G{ //Q]v!y弳~O!L>Џ9wmωJҹG'r@:VG]N_>&OWK=q9{*_ EZǮwm!Agt96"Of?<ޠO%y/*>a׈u޲Oٕ_L>QvYGt\Q_'n0!gǒ 73O%Gu$~1>T!5JFOɷl.E'ay`m=-?T|G]W$nvU)uivDcG:usU^_ŧ\uy|)~pz— z&䊳A~yEN ?{H\ܮ]o/uWϏ%ٽMkF^.j躼7.?aygcXk{O:3c/ Y;~ƾ t?6ı yOj~lrGws/jpug>h+\L=ݮoo{>IO+I}ȡ:Cq5rT䯸Gc=y.3|Wp8K5e;g=Շˠu|<>Y#lqC>-+: ?<߼t_u]ۂ+V}Q5oŏU\&?Wxgǯw-$ {,|f_\9^G_N*~~4"9|1KܪyA 0t!]_=r)n]~?vW꺶 |ĉ5 VE?:m>V\O.p֝$ul\~:#3_H\evz9%@_UqX{Yu^-ɵEOK^W/3{,V~Eg.z}og8Ppjn:Kĕ@C~7ޘ p.K_Kvq| ^xg3Sy[ˆ!w<ƙx*n?$yp^O}W}9q׈C}ػp|iTbmrV|=+a=Ct쾲SЯȷf=Gx'Dk|^w]f'>p耎9os'xVω/>S.W{_IwnA<|AbǢ;P|5|:/ʮ[]'}̟o =s^>k@gqt^,|xYv2uL}ݚ:e?k{|{qc?nΫv7u9>ɮ8>=xiuzBG)6ziCƕ:Wz^ >ڝ}V#AL'~OǮgJ|Hw֛!/z WOcL%~/Jܫ5]{9!6]|\gUR~0yNO}w؃sKNO]X乃jh]H] WcfkJǨqš8q&E8kDzђOUދ0?vUeq:%; ͮ_l:a{=9^O673ωێ{ק?MC"OU]7z[kW.pzW3_뎏>>(:_Nnz ߸ნgF _{${=nRVmg|{DB@|Ҿȷ6qy#?kٷXyIq#:ܚLe_ұp.Ӫ~+>D؟_k÷9㣇2Nq گ*yWi!W*ueN]VwN0z^%gGG8W7?7_W?'ӲO!sC:C;n;q,:UzO_ ]#ؙ7ܘSƾs[v]uwױ_;'(l?+__aw$W]I=+E`/[5^#g;"=gr%7k\=R3C֍<ߺ[{;#j'#+~qn%H3~}y;?_/]?=8~鏧ȕ d~_:嵆hS<8Ӣˏ }?enKbR[wpo\Cnx;vݧ░vYǛת3wٌkГNu'~munE=.쨶owl< ū3_09vY3Q<&!#oWTRET]+Le9N/zU>~̹Ög~ߑwTC^J?uCߋ\/?7yI;}tsp+S@O:09"7jߧc~Cǃ;Oھ ~ ](^!ԿЫCE]˯תs@վW:ck:O%^K.u^pcϯ̮Uzd.䫺8t_#v\+x$iv|ˋ~ߍO~ ߓ{:̾y˃=Iks)~[uGοwd0C^5.z,y0yĉ}#N͡<=ėR\u?> N~+|xN(@3\U]=d˻:~qYǞx(l ]ѷ6uo]p%M>ӎm'e׃t, >vuu_envB{sv;"yd\i{2.>YO+"} ]+-_.˥7=Ɲz?F>WCnH 臼wd?wޫǻk/1VISnҺG|22^:Ί+t?}5v^ov y]ޅ>PA./YoKaoX|ϑ.~ጞWveTTsu+o __ ϥm}c›N␩ .бq5U~ιs:}̷?aW_pŽNʯ%~/Lǿzfd(T+~ߩziuX΅4Ozv_,G8||^f}kK}|訞+| W]7\u׈0\sd/ym>~o7oRW[̧ wײb 9nSzۑ_+>&3Q3{7v _mc/WJ/#}O_Gqe^p>c/ ?3nyUͫn;5_x;/<蜸o/G|sqS'Xo%{Y:qY'໧JGd_ _rnG3#7c>z91?័n\_~wx8x[yyCZ͇p7n'^bφϦ<6Zkc9GU W=;:`CH/rgN.Уxq`v:^$G7uG׆oa$>!:>9%_|Oqh[zhp?JXg3ffrzk\,:S/)S'y՛1헙=f]O{9tɃ˟Aro#7ű':~ ~}򆳾_;Y=cX'j.n!8+%y旦'ˎy}Zr/v`E]:yK_賫U9WBWGy@-qx=n ͎qqX_q,qe^yU~SG|߻oMo优RSyׇםq3~ ɗ>qOL-<^1=o}yǼ8'?JLq3}xGMc΍טsc<սox W?>q=Ŝ^Oe{/|qƮ 7d^GKU4&9j{gjU_׆ƫ} [/}Wg!q|6=្#7xz|%o{U;{wqz{|'ǥLQ릏+ {]zwN5኿<Wcϼjwn|D;l!#~vo; U4X'/W'=`kbop˯i.nM7/\vJio/E'S?9~hZ3u?.fᓫNrχO^g=ı<+|vf]?gg?~/Tjs m{Wf/E7^N;GWƾUϞuk2u>|3O(w=T,#OW/y7딼es9xpUv;}qv#sq]u:[u~. O/ōSG \m9;g_% ߾[qJ`q/K9gBgt'dG uW䴺/xok:]u:CUdmmףwo_օߞ]Ϸ/?bpd=seqK~A/ Ƨ}S[Ív=Vs}do鿮96sr Ӹ[ۉ|B_q>:/y|5o_6y1y|ߝ[Knxy9+.oj-z5gܓ =sw=|cr$ >;ɫvmq A\'gmut\<99G;왥Zqb>E|4F/ή^..[R^9,:8g?;c[q3֟!qUȋC<%97mqZ~?"MK롥NĜ0)F_!oOjK;A_r5秏ވriN|F=.{~|G[o?g.iU$\^o;-zwjYUͧϻ2mWn+n>guߧ}줱n_#7Z.s/e+OAKܯm/ mS$>Xwfv}ږ\o U:⏕zNoϑ#ξW{Iv]c}vBޣ2빫::$f=[Pw^9nc{^щfvަŏ1ޮُ+tu.٥iU-dzdLJ(^,s:׫oo $:}컪f\Ps_}Z[ x'-N'g޿}_]|r@35q[N.9] ӧ2|gwJ])%_b]k?/pEދ?3ޝs/7L^%G.U~W=C%HB_?וu;4vg7q f.R|ysUםW= _>ԓsyx:|-D_9ލ鋏CK9n[c~|:7oAϖs;rh~tV/z+S/WU[cxʸűǽ _.>D\;skuV.ϙia-_DZ˨G8Nۋч<<{]Y鼸x:ty&,w8/G7O\vn`cW.h睶%:Ww Niw'ozYwz=E.uy?|o_8Aq7~ˬS=O2>?+s)nǗs>W^}R4zL+Ue'Wj?nQ?F$n^/jo~85~g[wq7$Y/V`Я֍&_}1ue3>vo;t ΍i}ϸ*\ݚ~kO]ظ㇓xU}>߱E=_~u<`jW%6l=y؇G?x>kS'H_ѣ Зfp&l }e`ן\Շ~wCHm;yd서_h} Ɵ`*|;BÑ#s7)~}y /-!M/g\WG>rA?AO -B_//){9UyڻWg5y p|3n_av^?ᗈ#W77$PN/@.9h}я#OdO uUd_z;ϱќs[ZK}` .~[EuʦB_ewSK%=z8,_ゞp{9BOy:7w寧,=گ->Tהq =D?z|ZӜ/kMӶ;w/Z.yM}e̛?g?}53\bw33kuP{yХsu5y$~[1pa97W=;y;:?@O:^85~w뭭<"/ᵞk!.^wS-MQ첉 I},>up=>#Go` rgLj>/~ʑqWtAX۟ _xu?7?JO(~MO=Ǐh]Ү7N~~~Y<%LZ_rF> /uO ү9/yS.J/<盧d'vM?\5_=q'%`VvhOҭ '*>Uo5z9qЯGߩʋop~Xu=ٱOnq~Wg6t|h>w|sl{g϶h[_xG?w9%{&?-.%Uz~S%W-:=>L_Owξp78'+X;>]ЅYq{i=<諟WWyDv7k\=a}Y=~;uEq;^<ȗuSgN^8guizGhΑSAצW}oѹ^_[u'[sjی'Ӻv@GmÝޤošluEZuvKkٸuϓ]uot}c[nL:~gy-u\#4'ʮXZnR̟-_sVWS#.v ;^aoב: m|v;w;rd'xn"icz=qT7zOOuNJ=u(}~WoOLⱧ|r'Q;?ΰAq-r`K3S%$ϓ~?I=:9/fƏ9ꍫN|iCu_Yv93q7Έxv?9'9oGyX??v~u|M/;u:g\{cm9]]OǡꡎFswn˚2Ζg^}z]yY(~>}gmO7qr"8:]|9_˳jm/ g~9KwLk{^{k?k+j{ޣ_[ı:>%+?Rc];t:lw&u:uyz^|7qi{Yf>gG=\0.й:/\Ovw}V{Oby)NgΑx}9{fG$QهQ}8N(y-u|u+~iOﵲPf}αS]Ϯ^~6c>\7suݧMӺ/㘺^}mR:@u]P2_qg>sm L~uZϳo"ϛhyWFf|vzee_qO\W=s WC9gGUAݵfi?mWݿw]vw zU?quxEzt~wup~[ۦZo>^kz{wruG?sB~_9򋭃ss3ek|]w\_{&r9㡺?֏o(q,ԾS:C~}!ݿѿWJ\Ӻ.{_#q+;:o=nhߡ}ñO+BooփKv`ۃՌ΍‡'k֣qw?u_Z ^8{PѾyiCgp/~pF+7:L_Z'&|9jCzoy6{Y|O#isg)}&p>ؕ=8yv[y~]k[ oD/K?9Oy5"Wp߿8y?֯ӲOg{4Z_k73vm2Ze]'O|3c'oug::};y}(\kH_bvvOs ^S?9m͇?wc|r&>hGge n}س߿׺گ\?3z?coN>w5{QGB sneo?šn8i&~Goqcŭ;m>Wg`ō$=Ȟlj=1W}83Co=7K߃@Nh?uc\~77!vx>ɋDé: wΏ$\-gZ^ǹuYj 8:rp@oO-vOm .5~8~ѻxùmϮwJow|0T룪7>_|뤝x'0/c'K^PAqE~/gK\X<ɢ\{=v nmփk8=G ENw?X]l{}E/đaΧ ?\=\Iz/oCquq {izv)p5Y:U/`?Gsujeg7[zyzK!U+:z |E;W7!.,^ŎN\!ޱg7C2/{u|cjyօ\\O~3^r_>\\-q+}> 됋!y|2t&O\/ؗm/5>| _JNSك gإMޝ nI-t|^U/,(8/kpx\G?=R/>e9G^K#;uxGm ^ԍ:ƾ{s>s W zy7Eov\c/pۊW`)x"oGv:8b>7rȣffp/D;^CW/~OH^P^(qW{Ewؕ]$K)8gP_=:QT=|Ioq%O_B=yW\g8Zp|rՃ6,yvC/fg[cm5zFO:e;Y늯?V~?J~bT }}y>ql~SC?rέ6T?|EN=yۑCy.!?gR/oGՅq=+5.ICu}o9O3%ч7\{~v=-%ٗLyT?'8[Ȯo>ƕ88doT5eq[)>CjqVAZC:؟3書z[Kt~K؁s~?зvjGNν}8_Nj߭)± siSz8{׏s4\UzCB3Ţ +={饮+.GO+u+)y^uUg#L|x\yiv]gk8:0,Tsۓ㔾 ?s,{O|ؕ7/+u~9?ޟw'x/t>yV;rN<-pW|OvyCzԸ៿\e|/[?zuOWq.W$[F^+'^N{/kw<Q|k> =}f {[^+;@/rUND yׅ;33jqzTxO;G}~?|KP>Ey?{Dk9*^婌_ s vR]k(T19U ;p%"nA~,znUyKnckՅNKO/U7Pط11s-璳}\qOB91|/(?y/< VM-:߳+.N.8swω<&::뗽~K\Xv`n\3J泸_~~{׭n}}WӒu^7WKܾ:8\ϟwzЎۏ/z'G;u7r\ݹP'[ku-Gԅ-;,ʋF^e%X;JBO oY᪮~/}ss~w?RSJFwV󉾭x^] CO#o~-熉-q{gCn׳s]o zUᪿgIun<+U|1DN[~ =76ȝw^-yKughk2.'){.[uGV$5|܃>-n8ߌ/Kܔ]Nci#G}SO؛>Bq>tv֏=:4W];KtK\9WU~{eDnFmΓ}}s:A+v?|Dÿ]Z?4+K#ѷ햍MpW9jp &ŗ/u~*pgqTzԸ|`ǿ-M-lٗ~[#wMq>8Q|.9eu?4y)֝-eu"Zވ_V6;\~zc!)|K#OkȱFkp3W _um/>9K;'5ȹB>r F?ޱGw]>G3ɇ玫k~G{9zwv-{ X'./=n#W7g3߮h;05zM}yq%[6Jw_ULQ Ǯ\n$ߨG}7/?i]o tݏx]H !3u(K]M!]Q@ }5@kVq.م:+r\|[_ۡCp<W袾lkk?>Miw6-u?t/zR_=3WwD/_\j[>W={w;/Ҋ[r~N?oWEs)\#lƿd-p>^=(qK>w_}Wm?v-{1n'>*>YUu[<|im=D;t_xT ӎٺZ^gcn}X?׳ WÅ߬G%^v鱎_? x~nog]?M:EV/ؕUǞ ʟ[cg}vbO\z_<Oo"|P'|z}I]Ǟ| {%H9mUzܸ|OJ='3ORWxw՛=M_]};"'C맥}?ko?X5gdCGzMkԹ&::>ǓsIon ?dv.}>w9-^N/=Õkt?:Xqu-?BJIUmWvay釮+q%jӁsNpEA%oOObp\ U'vEqrVwyT y]~:OYyk}=9׉:-Ejn>n^|^#A\Mh<~o% sX^#=tMፋ:W|!^zGES6pQ~Y={ f{X';tA_}'"ž_ӏ|U'ȅc)|2\W~MW7pI>>7 ^Їs~U;:r=⢸viCz_Zw;y.}wp??ׯ| jW_qWPW2dz9b[L\I#y:Kձ-v\O|vH컹=\v\9W_<\#8oع$Pp~_gyO#CBy_un+>s=\ֺ߀_OKp܇W~Uag'Cb?پ? %>j=Q71wj{vn>wWk?0|<NVNO?T똼,y`_?n}xV>+}\.nt/m˓$WO%\J7'vO~z ]k{=m{W'׻zw^?[?ɲ/Wyu/Gݩ?s/-`/?۵[m]fˏ_yCƇ5ʞ yc%o{^fW]gi+(x#\mlgU[8{3_{7,xlGz |W^n?vGaѫ=>^Ǘ}>yri*ĵ_M=jr5rd:|s/'MLvKUc~[_We[4 \YW W?~\?G]Whk<sksyZouGyYӳNM^?dǴ}'ڞZL쾶qRxzk>|ȟ]oyzo}hZqYq_{b{P\y__'O-@O5Y~Tߏ[7xJ\-8j=TֿzZ=7χ79=3zhTrۂ)‘82?<>WgSfÕkyw~}\h'ϣȣ^0"S_3%=tM?KaȫoG.{ő؃ޮH;0vN}Mm:^w*:_)sΖs6ubTγ Wֱwk+ƃ99ͼ_ի?g C|O#/:_Ŏ7}8߈ϸs:Xg3/C6ck,\Ws 츄sL?9?/+]詙׍K=8E͹mg?߼1/_|ܚO|7ӏ #?Vz$yu-ʣϛyz^xōA5~^[M~gПq xj+vW~X9_}=//u=Wr>rv}փ8oſo _Mk?69?pE_me?U>7|`8/5m/R4x8׾|~ zut\Mqe~p%7+ykrG2#Qӊ[7ޏ#Ǐ~|>O߈zÿ%Ln:?^Sz8?o&Nȳ쳯}-?zoWC_9ӹბ C^ESgլ;\y[y!>@yNG'퇇Ofw)}('o*k*v|6ǿ _x8iϋ~c7'~:`ȅWÏ *|gr=FK|Zz@?Λt؛KpJ\?yKb7]x;qTveWPuޣe]8ws3uu^%y~+'>n>}B~ <ł /0~j?7Z׆[ѿWqس?oPa}:I|<ԾٙZs8qvTs~g-c=.#;</8OWyr{CSNc>1xǯTly3a?BGzm39<|zru<1x]u3_ 2;U꽡_ {IwMK>#'wG}+xg'%3}|bo]5k :u.Ar|ᳪm~"|gP.Q]?։^p.+qsh< F-yqб'tլ{ ƕH|3qG/"/5CGAW~}oCpUuS|s'y{GT`~|.b&G߰/ץ'x >+?'o}m?;q%O!wC1]Qٽ7+){o7:']N6Nx 'U|[8+}um\}>\ 8ATS- _wbYGezɳ 6v+\r~7꽞W$.ߗ]{fݞEqd׫}#|qz&-{KFgǙطp| SENA廋_{;~5qt?yu.<;@AݔΌG܀7?qǏ|o hUm uܑj}EH|(ܼ ?[}}Sar}'1YOܡ3g{QCqz]̛}mx7aNMhě;hr.u#m%6+~Ksmzۋ.S9#z}r]GQƷf\֓&GL{+E/rW)jTpe=y5|4ul\-v`1xq8uR?UuTmM<]|!+/'K|l^wS$Jz}, 6uv&С@`c^o+7b,R>߳s[ˋ|4>6W;7d$29{h]S+8Dw>eR7 gW|ÏWr]p1 ?OªC'+{R^㈞21<_+!Or$ihxׁ+zc}9q-]::rphimEǦUkON񧎫'9̸rGნ?;tŊǦ~u=}muc,_}.nFNUͱq?v4}\~ .cgC(FKf_7YMڿG+/|M>Dw6uN~cv'}3~Ps w~vcN⃉qⁱ?[%Љ5 k(x>>w*^%Vy3|WgOxȋ .CQo\vKE?:=ůУ2\|O-z[{vܬ#嗓_Uq?(\#,i:v}pl\|V\wcqyUe|.?HYoQvWg7[ߐG7'ʓ7㝏n<K_ ds?%g'gÝC#r>q9uFo|>kũ}u<Z\}sr Wczo|ZV5w7~i&r]>99/>ܝ3牛V/D7]ʿBg|>WZa}Ǯ!=G޹wxM?9.b%~>Z?S0o%οR:^?*<$>9U~J ~Xu|z} oYo ~e%~ή ny^7NR.չ/l|mV'{O=.2|{,\u{WuROy${O>pk_?{^b*>*Ŏ$1|tjh0;8v*TFg|O~aZq_aw[?6SC'tel [qz098 ^;;qXEɧG_խؗ=4zAyk= ~v\uHp0}3b67 ow>kBpE ӇsI,qʯ.q cLO8u3ή_ uAv|L[Ϡ7틟Wx~#j|K?;H>?} N/u~(8u\Y+Y7v3g?AȳS9#/;?nyɃ;H\/~{ ηmZp%z;gu6o]8My.w~]xs%w%뢸:ၹ/r_~y zH<[p_?7yOݬ;>_|UL\žة_B~9oYq;K<"rҟ`ӗ؋ĉ3~uI\p?[+R\?]*nw:(磿/rto+*A?wx8:;f?p<{]ŏ$Gs5K;ָ$|6uM<$u\s}Q؍5/zH a {^qr׍E_-? ~rz[V#x}]37;ߠg ‘sN\sj9q>9e:Xpz[ :ye'WAޏq]e I8}ϮHpo kћWqJ~IJ#ԅ=g_z_S:!#n?Byi&q}+ 0ǽOkCn}4D_օG/08×v5q_y?Pџv=Eۧc&|׍/>ǚ"ε3S/{Nh\ˇT_<=ҋȾ`[\S|;_THs'G͝unqbW;oN_crċ\+v^c?;-?Xx}G)n"__ISY‡?#|}n˾>CS|m>mqާr"T9_fז9J^G^R?3m"{z^cCC:_9A/3nױ's.?I7^<WS5ύ|ɗ )$;-?ރv'=ُ;?/vY}I۞J]a`>r^#?+%Ε:c5[jCNS&>3^Uݫv}bZ~w^+#k<)rjׯĎ2Y/Yqy1G||yg/2x.~{?S3c%9уլ;_Ѻ z;; ~{Z10xpJX~'OQ/*>jgf˟EOC =s?xqU]j@YN]\Ə/8D\p3Л?C7W&΃nO|w쌗H~xM(E+3|ǻsO][׻>/i%+gzW#=]͟\Awuܱ3纖3{Wbz v. Ñiri#}#7Uj|ƾ'q|e[ 0WNσHmޟq+si[ިэ~=Ƈkq]}Qɋ&k+Î+1|$^=$szo*Gv9ܾ?o\uqBהBJ^js?W4O] 7wyOi'u!;7Dɿر#_g=}&|k1D݈;wv~>w>c:2夯yɷvCb߷߬.%~ry߼{7:wԥ+PQ<һ;ms|_'wN]%b] t[>NЅN đɩ';SA[UG']<8܍K}pyN~O>P6Íć5Yo< ?:8'@=V kp|Fɍſ*\e=уGOz{nofe}ݎ + :~4%ܕ_0_@Wy[W6:q7ou&-nwS㮃C^q)T٦_b_Ҷ _grˏgZT/O-o0zQ?v؍7/qSѮb⊽Zavz鼸7RIcG7]}CCgO}?G[&7= E㪟h{X1Ur>{i"yv9i2\n}n\\%'\Ըj'eZ Ψ{ L?^c>/}ٷ[u8?+;I?G?ُ#n3pñl؃cſz>Q?J|9,mgb7͟L]e=tO3C#}m,ϛy/~8]/xFrS۞ue&v*qwpqW/;mɳs:S7<tO-=ů:3 _ṣӎ'nSn7AC?;/BM/{yə$~3_绳p%j~,~~gW_āp.ώj>!^uѯ%39yN`"|v#ufQ\|Qn_zgC[vHqלwï6'&%zI|"qgy.؁dGvy7;v}ƫ+qQ/:u{<_~~䑸P=N+֌-'oi?WΫΊ7.'{s]*?j|x^+>}fw뚺~5R'!?_&:T^Wk5+/#%_b׹>OuP#i^&8i;}]#mtiWB[Sw>pUzq~}Uk]fU<>Wϸ}诎7Xέ>)ucx Ϲpl;mzreQ=W92|ٸGos9գ3_jϨԺĹWG,/g7OFo9z'ov\~Z |>Wk{=,^<|woEݠӋ~ g= 6&' >N~|ʎ_y:uRGMsz5}c^&^o}ſC78;~+JS'@[ꃗ?k+KpyLr$Ev&:g VٵJkc݊g:Yޗz JɇB?qV=%DzsսAMaK>Ʈg/Wk驗K<9&.KF_ #pո 7b nR\*<%o17׊;ďr]wS^xzo콏 ?y_|<ܝO;QeWV~azB{[03~pyǟ5|< {.' W19H^ľ[pw5O-U-UփOgy׬EyM!;o/px. Is֋γ~/GFߩc$o샂O s>=}N=ex\즷>g]:hëj)0צ6Yqziwg?,9k o3Cؓ< 'oZnKyKqq>V N |H9on8O<)*qZ\ɳ|;vKY]~Y}ov 5v]_kf|ξή3ުq<]u~usgIs~sSο"5Yu#'ŗ+XR1zE_~Mwzcq:{w-o`Wxx3u<sȑ7|u*o-A.}䇸 7/rMsW׹cp{9 mnN%m8l9ᇰ9G&?{b'o3~ >өл>7]}i<>wosĻɣ_?ϫאׅ#psAˣ`Zv6nk۞hVw^w}ǁOZǵ)}3O~l}|Z~wfI\NI)E?_ˑ=c$.8LN=̾`Rw{lj^?o_W}xjܒ9?/z'?sbslC\zlgCxq~O}Xn7N;/{!/}~W[oqAK܏+>::kYqǣ7[Z-tTgUuK[>s+ni.M]/yصK:d_G uJwǭçL }KOm!yŝď[7WgJ7xP/"G[W/i.IruuI/􇫯x,HRJ\{z쇜~OʓE_:y4߮4{+qԟ|ᄒ<$K^O1d&?4c~CrqN G&.c᧯#e~\{1'}>_.O(g=sí;‡~}ߵo+Ǹ>u[`Vّ7s}iu>?w>ڮ»gGi90v5\ W?<^}#~|>}ZWu@y:G-7[ZϮm>vw֫i'_ڵֽxZwmӹs7m:{~Gws{ȵnᏝHOWgWۙgF9τV!j}ޓ%ewIcyoC<狌<{5>WM_ QC|O.ˋL.j]7w8`D>V]_O(/:󛒗8z㧫WY}>_;qC(Fp`g՟mߟ8z˗E??dޓ"}|Q_+?E~kBy~ :k(΋K-.iW5{^{k{ gl{ޣ_]_Vun8hCO]sAzX]:}\/{'Qu|?$P}lg}ӏuWy ?~R??u멷_Q wrp4x7MU?Iݥ|u3իc> Gy-[>nE_Пy!j=w}\\ۼ\ϼkV]}yCm=}lvȹd?(_ݭ~7o@_t2nӫ?Z•gCgtЪw]9HtS^0~WOqݨܯG?GuÇ_ߌO艾|^?R[]o#uzu_#q$\Z##|a1ziQWI:G\'/nZߓGh״>.f\|0߃ŷovJ?C7Ϲ2W蛦?ogDW-pgƇz)z{s[W=ZXoׅ~GOI֣+…>7 ֳ+>aOiL;jz0.o^粳б4w|~ȇӏV;=Ooۛ3>󂝗`x?ɳs|~݌%7̻іG~Mwïmo|z{9ȇg~Y6/z_~7B>Z?M~Xq:Zkk5Bkw:CzuonuYa߇8sCoS؇Z|a/9n'6|У?-ܿ{%wz)t ZS/秱]|m:0K`46 >sױ# w='nq"weC/ּ}q ]ɛϗl\{ԵV87>*sCj'6'[G~l/窿Oj{| a>~|$^pCxkNJ=yɹ3_s^}~sbC.-. WKlg 9zpu_֛\l_~yI=Yr|sʌ=@ſO7.߳; |ŵ-][?^S^Ӹ[\8|i;9yu"_ރ#ہݪsyDnU;-~m\3v=.O\þz[L;|we=߾'-bgOͯ :f}/׌}Em_[_[No)x.9Por0iK◽Uq 3_R4򄿈>N%ѮY-k^,9q4^2Pq؃m'9;~+\ݧN{|*zct_cu?뷿|q3 o 7}NⅩ>\wǍ_=`G4>.-|~7{i/U֩L}'c%㢿^緿Ew|Cˏ =N碏<5cmѳދA9$o%>89$q•V~}G'؃GOy9җ\Osv|t'ĕg «!p-؉Mρ3_Zߖ_.-&N ġxĂ'qSkSo+Uk1/·0~>]ueOzƭO7u]OeG =؏+@)=KNqlއR_}˼ܰ>ێ`_t^AaG_5zQgNpy>/o:/rt-K-q@/K=|*nv?=^ύDže<侼- >u=7=9A?e># =TW7G9=@WE/ Sr󷣷StpUmȝߎşj|/eygI?/{uk~1W>3{Mߪ><1Nz_=@u|Q/Tnut}۩;F.jA׽׀;On? ;K[ߣ ~9~_vFXn^8)<=ThM9 ǿZɱ*.f4Nr<=S~Οj|Wwfk8}kzR-xz~r'Jܧ|z ?Ui~>gy>xN_mqsMG܏O#M?p9Q8u_o<x%?V|wH𯿮ƵyG/С{ہڲs=? / ^p'/?9[Ƕ8-N5'ytDߓ=z%} 'M?qxrsp5гM:\Y|_0Q a:N>&{.ݨ|6NlrsG?tF=}gȮb/¡ ۿ::>~r,v`[pu_N/=]?r֬xWK҇/>2u|6=%_HzC:g*Ktyw|Ӿ'nK]{}NNe{'2}Uu?9 ׍]k~7_oo;i>ԯ<%jŸR|o^|q|RW;@Gz>s;.5~{|oRW{E؁q׍+xjkx߳Np~sǮgw؁m_~k|rE\vߓW16r<&Ny\].G7ENW#?o]Wߛuywߟ%v@Ձ۶Ί<{9xW~6q^aվeT}^ïc2? |&Z'Xͣ!z,ql|4|n)'?eى?x}ԥ>9Gi<\U^=t~O:_>׹JK]>O<|R./dOm?˩pSq>5G^Gz7ޖ}@iezOgNf ^ !>=+Wsʏ^/zl˞_Bo}q&\Iŝ?#V~2o>79:xc5>ώz =ŗs4UJN'<_\ߣ7k[_WOkO>F/YC2}UxWkZO'=tF4^sR Oq_h }'mAO '|>7^8h/ks}_;9_8n-AuxG 7o+՜ =ѿqe}WK^~J> RrYu çpg=ua'Ͽ\)_ٸ=]ߏ:ޢ_w]$6,rg|q{0;n(߅?bnUف_y3WVz+zЏ];:}~QZ_zq]v?؇Ӳ#'yy\Wݲ/؍+ t^@Tz*t%/N_6vrx:SS۱ˍ+x;}ok۸?yeO'{wz|?_#zκf<.|d._*Jo:~LnoZy}#Okк%-"YչKh~Gtej~9r)juֹ XG|A˯'⏗_6YGnu'OY~c_NjnO=G/>؋?~G=yf\:j͗?K{/qe>ܼy[|Y/N]A~ֳs;'v}pOq߿=E󶞋^Yۍ~K-*v{]p|Q3N]Oh<]2Wa ?Y@ozh{@?•PO~b]>n\[v8:wq?8G)?>ۿ63h}qdr݂7OZߟJ4{v^os^r^ >^ᧃߊc+,ecGU5?[o5zd 2x[||&eOwhݻvzJg6Lÿ\x%']+Y?\ 7}~o}i[?~+}i _/qB׋v~9L8=oic8+ew4}ǕyCOu={Any1}Nx|t\ ~? %n#gw텡GR8Xpu1\WϾޣ>K?p)N%̯'C5b,\̹\-+|GCw5~Q-%G|xpu1\YWZ/vK%CλW^8+~8EW+vq';tEǼ ;_{[׍=:[?[Gs!S//?^~_~5N̋H߿T"?ȣsY֯ Ù=;[\WW!\vcZㅡ/zy[?3zv]dd{^\֋puk\uߐ_*yy>v/>?4{>I<9q Dwpm{[v牳w<Ze7Ǐ?>^߭Kw8q|t3/z|;O퉖M|Fq'N?~~]u̸}O}$~1WY/#+C7;j9rk n]||Q\VavSWONK=+v}ʓբbn<7.^ ߢ/}?+ oM/xL G~_yj3Y-'+疫R]34zgl֌k;#I?y~/]>GOV+ȼƯ n;<\?/Cחg=uG1n:X8ӲOYvL _}ZڟyrA]<ꕲK)\>ʼ] >4KKuьz3}{7Zz{Nσ7+v. W{[_mq~Wo]:c~m?7Nr@\6v`YsތǍk9q/q zV"8k7N>}B 9fe=wzXG?Aw{>~r]qZҶhҭDEU|Q y:X?>>s=0دG,xj\^;7?r)O_@Y恿|;>؁mйMX~N3ĵ㼏Bӟ7Kt\xg|ᄊo{e~B2\ zafO$mR~8f];We:oY:M.7iI~6}=׸nO𓭗>6roq:}~SE]Wb7w=:WGo/Nꑓ8K~Ou%_+ϱ>e/ѯr^qe'q31%Sˏ1?tӯ>?\y>1^Nu4mqY}vLf>pi~W{z{:>%% 7?'h=ϮGkvs|@ݏ/ea/8;O}[We~O]o\7|wcF|>uC87Oؾ_vsfޞ~:_4σ+tgìWAmR1 :􃯖}"ߋ'=Xϱ.~wzʞsk>pOJoo= #)|K_\#;8:_-2A;=îsߛ?yXw_<{l9d#N_\wcKJۃ{pӏSv ݽyO=b'6mƻ8_ϾQM_tZO<|qEo=џ\~~'|Z>"ɹ 5s^/nRnpOpE{~ZS }ŷ֙׽'úcp?[§/>< 葓w>y,rgnzWɍE9DR̹޻m?/SA)p֋yOU~%G ߿pR~Gn0?_ğKGAt#={rsZt<и[?k ikpM_o;\;ѻ>gtL\d^>ב3ߟ/9s}4]8$~F#Uza+: 9⿶~xn+v;>i{ ]ٕmS쑲oy=~6F3p~EǼf~#CQ㊟nW9ioѩ7p_Gi߸fz?? 8V⁣y;~gdya1s7'䌣g*7Ka 'pwp}|_t.?,Pvc^k]_鯝^"ɣE_ osΙ?]3Ip^uw=ùiϋul<>UNGWV'[g|'v)QaKN?7בK޶7>̳֯ IYx9/_q3 &u&4t1/r_ Gr 4oqj.Zqa}ɍ듫J]_>r6_rE\L~j U/]{84w#}uZ\їpן;zQ\>ZrA\o|5p]s+Tߣ6r|M5>Ѭ =~\akwщgj}f^糛xp3꽩WyϧjmY/Gon=>t$ɺۭ+;91ܷW1.<_~:c=O4nrY/K`k[#ss?j}ոgwztwx_&N1|?eϠ?ӑWϓ5je+N͓x`}wpZkye}ߘ'usm}߫';?yDc<=\vewWp~2^(^q?j<->۪CewI-Znu3>텒ˆnyn:4K>v?ӷuJ|z79~q0O|G̳[pE?Fo ` -9也gdztS+>7.bs'x"wq|Ξ|+{L9ykSrEqma?zz yɒ=8k'/:Άϼ?έw-kG#e||uey,<Ƚ3> WwΏxw y޿KиN<|Ac=Zn>Fqֳ%/O/{tGP%Otdeg3_n>1$n!̎m7YǕ&F.9՚^Foel4_@7ًь,/q0.ph0 Fh+h]K/RgxDdDd0K|~S8Gi'yEtr>{9'1H'@s^rb6~G|wq{i痠1kɃ0oϷ{;> M?͛?kCM?}]>T/?P='f-/|ځ~ycM?+M/k\9?up|o|%oD]VԇRe]%v#l==_ߵ߁3>wX%#NW_qj?~~Pev~=o?5n_M'$zhڕ*u8u~\M.W0M?ao z_x0mgh {#<>?I 9|Ç.o:o=<=VOt5N/G=mÿϽ ?C/}W켷'!.joMˣWvKS}q~vzσé/oj[3b:~>o#a9{vC^yݿV 1*q2)C^',؃ө3x_n|gj]cEnzOˏ\K~E.9.gѷ/O{~|a{fiG?_s>gC/ekڥP`^} n: w澼[#|/ne;po^wV\~_#W=tϑS__+ ߠ3O,ҌCٵo?¹yWa?,?wk741tW{~w8mɵq}|;W+A~Na !=/|Z\)&!'EƧs^83##aW;x|^=ܚG=׾ǎNѽ7v\tkr|̺fF.ߚtm+WW@Kĕs7U8WӸ潶g奔>{ ƽK}|#r.tC}^k_Oy~ ?ԫ-dsSSڕ}eht]Ɏg8>0> )Mx܅_9nL!|;0+§v{Ooy<;_Cב著 O?w+S՝'A7@֟-:}mw{w:nG/Jl衱r_>Qj˺GяWC w"Ǿ?;~@o聒ogO^/|ң=W#WǞӮ ׾8Fg:cs㻉8h'z<%W'׼ ݍ78ׇ nnY%o?&NO`5߻0\rڮVmo|h\#5N;KτYv}vq}vso\|{_Ug罥;O 4}h==ߨ9:^t?uS;N;>ѕ^R?y?#=_|8?_h^{-rwK83 ^㮥?z_=EƷ{>&'Cg J߫~έK{.mI.?MhݒJ?gj^&Yˑ/[y{kp~vX2W˷;~0>o=3?O9vQk'=59m>|}3ſ~W8#$5%|}_ڏm?"Sw qD >|gg__\ g=|öwU#gB>}"g|Oßϗ;Os|lnCܧWzGkG?˸5?ܱ!8A^_i<-‘=>a ?{s[y޼ϾP=\N/}y4_wk| vI;Y/h_p?9]y_P֑yx{C!ӓFqvSx\ƯѲ]c JOh7zǯuşF.Ͼ}+:}:Bo="-N;|X~]^+g1f<ߝ~Oy8y|23K_.q;Trrn/1>Ƴq_= {ރß/}y\{n^T@_eWO?\tRu+βi&KF<~']\N }&:=qy^sV?mki?.x;q붓 ~]ti; |G=~> t_[пsCmۋK=%~^'Ep~\/ϻt~6.sq޷?o*}ɏkz4vq/y3>Ua2>kzA)曦_[{ oK\~zϻ}BWώ" zߓgtAR ]|qsK%:O}wrȵH%So|9=_P+2~ys;Phy{__/oy\9Ň Zoǧƥz?}?׫Wއ-䑟eiv&ݒ'o\2z\,yح=_=Y80>Ov9OƉ^W!')\25ypsv`֮ƕN wm'?>#/<|xV;?rۼ>9#}Yž7K'tzR?<_}t]dڣ_lzW = -gį͟~1[zq]{_ډ_zq}B퀛1u WOOkG翾ԫ;|5:+tmL\9?=[zѷ+Ʒ8oOvcﳧ?^WzWN7oo9z|'t|{_=r>OgiҧN8Sz/ \e]1}5n\ˏp\/x㱬N^xcA >4n}ӜPCM|8 :v~0x;;bڗM;xx#WkCIn'w6 ~jNy9V܅jp5x6kv/z㣖m~#m?/ W[~d=v,<#/;>O>h9DW?zY)v"Rx{[_8wOy_tP3|b^bǖek'v:-|ߪW ~3v;WT@oЧ'}:|SqvsQK{|vsց8ӛă?tj~f I,8kAɷ=Ş *q`j >Cw|3Qȹ^ƧwQKjΏӿ^Gv~#\ 9xdv[򑾻S F_[O Zbg,w=]{ MO)I;En<q폵~n?N{n c>7[O4T>ΊƖpC/c;>y\YyDn7G 81󳯗]Nw'c˿\6_/9O&7zrE ] _~LGi/{ڹ$o}O=se*gTGJv|?/rkㄯ\=/|;eG%zC3S"ͣKv-9(RWΒW8 ='0/ ??e͜72: ?wCWz|CO%W77J. >OݡƋ^"xop>5;70>2NE?gwzAU5xNr<|)'y{g:k_uygWޘi@|rO=xCؾO?-ƾ!]˞}߳ӵ~g(BIƃ~j\]?>~ _sC{u;~";/?>?a>;6rpv_vE~gWv>oIѷǏ?yew;zv>W ?cW>7v`w|/GߎLWf7^=x >GQ#I=粧S} {`#o[{x|x?)xgT/ŮEkﻏN/[_?feK~bWO>֫hWշoaNӖ6F7Ov_ɝmnnp|vMΑ'5_~'o+KGN<Or+o#Xn)ǿ[#exMČS`Eڍ/ϑ_}'\1N|U[sxϞ~Cuٟu^uw7t\׶sG?k=V׵JDA ג7xDڭ>6Nxwy|&v vUUea# }{c.H[C ;<еL>]ޟnmMD. pD/te/7C8;Zo =Voԥ-,^=q:v \9 zs7'Mmy>1K_ѫ_O;. W/I;r+|Ws KWiq>|oh^kڟ< zO,;yxpY580>\3A皞/v<?*;]J/'y%^͟ .nEU#kWnÝmqͲ.59ޝ}M^.x3VOA=r}!'}ڙzrڽ|4A/;Os8DY%O}o]oyd_.v |IqRWkN<\xP;ෲ_~Gc\y}e#?g7h{O_?*ӟMe\8~zn鱦#?y~i,ru&Eo3؛Ur\G=g-!9xrN9r8F=^|὞?'_E}ږg6qa׮|Oait~ADsY֡_;<>t\փ _>(zziA ;[q'ynӟ^WF^x  nԫz`?W_*yE;O_ɿ<~n#R7v=(\ui?'eg,q|k^tjZBo_L>+{B~ iknx~78'~{ WyZ}%C9i/1^r'D|(]إCɣ>N瀞^ nq oϏS_y*8ݹ~oE8xy_v%qyyyُpKb_ev ]۟%_ƣ$7O*g{[T|;k7yJ]}m{|e^i;dz5yϜS9&WP#}$Ϳկ_U/p/~#d'aҿֵ/y(簿Iqf[ڕ{/ (Go߿[p_x[{dyN_c~s=dG\r.%W)z_t?}Jo~ͺf׸\/?O>83Cg7/7r^Q|^n 2c$qUn>Y'7k<ӊu}>U})k"Ҟȭ)yz4F>h-?2q%R磿8/i_ /v>y |mgs:==?o<-]£^8'nW[M0>Ã[_^?{ 宾+x8㣿ø:ڟ_{xf|{蠾.l=lw[t|_O ewKbg4N_惖?=-N _[1ym'C>bg.+Ǯu/eگG7Gw[S[v}ge~+|߄ŷN\Έ/ƞg_#.qM8tޯOۮCJeQߦ̓jY0/ Fn}߿=/տEm~V~wtC冎5'Ops<8y]_6}Ҿ >2pPyޮCr:ivm +۴ ۻ|ogYsy~xo֫/>i'?v|{nj_]=%׉,/9q;wq~VN?O{,+`wڿʼn߿CwEyG={o?_˿?nAy}vrÿgc/_↑= jgu |ovE(m=;8F!>^ʅ*nyWy3x?YL~͇so*ZG|2u'lr^;$q:O䭿?H^?z.L^O'NTʡki q|En僽T[c]a%Mi>/f|m{QyJ'O^w9^e~Zdݓ<՗}z`}`ݷ'͌r\;^ެB歿'}nuܗuo{ޏ'ǣT~cx~流_.~u]xCp_ڇkdeַZuV֓T +/T埫}y߭>iuCJjztnZO<2z?~g-sb\w뷾@/xq)'ZyoY?^?>oY;W뗲k݅~ho+=zy }t$~?QO[^Ov1\\_kK?i{ }wajWYOEOϺҺ}+'>b:Kxkg]Woo֥ϵg^_3H;k?_ {eG&:3bϖ^? _ :[e:?PҲo\~C59twyj7~A.wЉ|1{Fx;[9V奔eru_;_E}awLzt}b'z繧'>8y;/W#Cs>FUݨ~Oxi&΅_{ɏݾZ˾w9/zn]sۗjߍgE72qXx;t_vض2pT%|>[&?01ylɫGg9AW.y0W"w\oRZG;qU"mZ__nG;%vo;G[gI8WsDCiz>Q3=?pf^߇n~usgi;O+}&)×@k7q"Wr@{Szqj>|lgB6Pٸׇs" ;$j_ 5g˴w]yxy6eb|^s4@+]?=K> }E^ڟu岯݇kٛ\. WjĎj\y?zy*{[;3O{sk^7];9I\<yd+~zCƍvvZ>ƓqLop>*{}W{>~ć6%nqP89vwہ-OG~>jwىG)O[.7:ݵs~pؾh~HވC'_3wv}68~>"((ySp5~j{lWB/yx[CuJ>^ _ՎNǺg8\ :մvޚ~}O\ vl~5/Gj %og^m}/ɿbW<_ym@_ŏ߹ص} 4K]礯㾜CC/?wOti;٩Ǽ#G'Cop%@/yLzpyÕٷuQ •uoxn|>e毬78 9{v|p;kv+ױF?[\ nmm K(JW~72|>8rNy~|!7{ rK+D_CR?7c:w&v\y'C?;{0w'/~O2>Cep;~؇_ᑢ_7w {;vq׫+Ɵӏƕ/|ęu,oSo׾;M|Ӭ烩:#󞭷}Ѓ$@}cGz;[N|xzbЧ}?tx7~x\94z/A)ͺ䦼3CGnӸz<3׍ÞGx[CG~kw4;{>>S~ȹ}#ɲS_R\OoG5oҹq*/`Jpte oWS\+1|n_[>ſyn'#Fg\pe7a\1y/\MipO:yzɣ'~%7 ߴ8iiq9_\M> zЫ;ŕq~[k=\ =7rk/>~/-~5\L-Wy+zOV[zG?=oS^;T6kpuv@+~kK?Ί+$wجk_~xz|z+ǎ3|ejb{vO'!q?(z%?x$+/=+brzņN.9% WqUj&^WПUN~_Džv2TR{|}{e>epjW؉槦7`ߡK[{{ON#~"nřk?;'^p5??/\~; igs3b2N׫ƍ\3N7>[N_'N_3[W6×gp_3.Kŵȑ#,qtBW)f}8;*_= <1Bt;>aU_?؏iOK;M]ҟ/z3kNzW)~%?yog"+ᣟsW]W(\7ꃫ/~>9KN}_~Ӿ7Jw/i_W=“כ~D/<:Y|o`or/+/fKJ W[\9k/'3S;8 Wk&~'vzi^oe{3F;9r^z_;k%7c~ojOo>Ï8KӃG|s}^b:aГʻȱoݾw<xM'e8'O'랬o:a\g~/y+Eq-z-۸qg7z|xo . wW5Xp~po웟_-ފ{>4|牫b'<@2lޟoQ}7__-=r8y(3_=-|:K~Why'9%\EJɝmܢn]mq.~v_c9cDzz^w:*\񗂫ýQܝ1={Nq;pU=[evegoȝ•zʼbg]_C7~'w1(v%W|T>r=KvӟGKU7 <[J8Ts ϳE]<Oo3\8ɣ^?n,WpyqEop=ON~7|A&B3\,zgSǃnJr^ƲWҸqUj=u/Eo[/G^<ʾ^S^/{=ߵsOiJ|DZ}qS?)zqqI%7[C?zz;~p]9K^7= N`Hdv̻,v5Z;}= ?7qƕ}swuM3\k?}7r@;;GY@Sޝ:)2,ps+CR='>_OԾu'<$?ZG뱚'Any*t{ߍZcv 9oLjz\?N%CO|>ǼowݯU<5uwӃo䡋f3޲ 'e):cym}=>kmy׼+<'n|UNJ \o]TOW\ s_%S~g3~xg}/AfةW?_ܷ'#d3Tn.?{N_,%~Rwq6>K\qU큫t~_|[􁯶Ϟ~%tapikxK|ƻדoO:q55>_7= nǞ2>>r9>stgUvy;/qO>ϠOǞ;|k}/r[M>w(I~~øߐ \ּ_4~#fÉy)y';ˮc엑u:黱75 r[O D#ϯ3˼=r)vzቾF:}a-az|J|fȊޞv-j}#'~&2uIzol'wd6#uk]ϳcW#rWc[.O\7w^_w>;#o ]]q+;}y-샾쫹oUSSgO|U{_ι$J?|CI8yr핇_s}q&{;jgE_]Ƽ?Uفp޳/9|%Ͽ*Ӈi;.j{C׾@{m ~<)kUqlʋC/OnO8ZU>;>?sL{~ =O1B>z{|PZp+qnT=Gޱ:ϧ.S(rGy.y&g隷;&88qnm\?+!'cr0>-{|zW!7?q{7z|ߍ;䣼|߸ڍfZN|ﳃ~R.ڗ Nex7_:.'wmw}'ӡGgN~Ʋޱ_bۇp8=yȯ< Zg,w7vҟռW!.s`xauzً'z W.W?_]\ɧ9;8ɃŌ_;|JqeWx0}d@|O>vp|]?Nk+?=q>ߔ;wiZ>ܘǭ{>*~^*qI;{~|'w-=J>Tpuv`=/n8'W^o}wz?GyS9<ŗpe  eU뫚?pun~y~Svs9W@>W8cokv/}{wX/O8Oi W]7|w*OzbtB88wC:;5籱#ղxp}e_My/L{ (/ʹo}J5/p5qA˯yzF> <?>şS?:vi9\w~iKO~K׫+qJsȞGozM<)OnA5 q_wagŕ~u+ͳt+yGD/|grśC_yF^Ǭn!樂otG[_8杖+yS9wm+nL~qCZξ?7>ys/28v| :]Pc1|۟q‹.;{}ղ^++vAe{4<3Ϟc{F۟5=_7u:z''=Iȟ~~7:(_C^8IPq&>8cRުW:O˃jysWr0| z,32%\c(D; 8×ϋiv|#}_הSR=•yd?uAzxN?9>ɳ1vhW|yzÕW?ngWe5}5q:?3l;_Iqq3|1.qyCG5ci~G wyu'ռf+z^V{9wǖ+ỻeQikAo ?|KUٳOOgft벿mg>T~&? N| Fu"WW W;Jo5';Kq|;' 8hwᅬ'97g[WqR\ r ߝCB}>D׃^]ޔӵv]iw<ϙjn¡8}k'̛}^G?w~ܱ+|>^ı#rPWWWoEjG9G¸G87iO鳥$?Arn3GO^;}U\-YSʿÇm>v܎;dC<,qv};I_woy>#vH=n<}aQ;m/o?7gpuW猫GƓĎ^1*\85gΎwA~|2;kQxi}>Zz~ȗ ^;\vv#g{=?8Tف }UO?{ zZ$ţ {Z_Aux|c6z'F_ٷ8Eze]?X-o~6>r;/\uvhWo CΣ~%wKmc$9&<{}3{wrғ/rUPm|$\eM^9]` ޖ0nkUcJ>aktv:4_+&v%{q<-J?+i~j᪟cD6Z״o6g+=|k=ogWpˮuƴ:9qGu"7@k]cO=\>|hN*1vsOJ~+z=r.vﵞOU#{=W(+O2;y /⃖K~t~8o{_o}>/§uT3%i.WJoec_ګ 罎q-t1+O8|^XRڇo]KY*sыgNa\󲿒|y޹ NWcbmF,q1_[?ӈ3_uBC~Wo.uÏ7GF~-Wwݎ}Yq ~ƽW%2g/=]mo?)4vt4C%OcY/nK}g?|,q}b؏-z/ߜkz1srAv<q|s[~3xc+<ߕ՛5pEO+n8;=] \ ]zd~<2U7F<_zi.>]}~{oOfEgq6~y]}\չ݇@r6ʮWÇO?_3Ӟer/4Kk)؃};8):į3O6vx']͢~V!;J"gvq t=O ^O&!\t!\e^rn%Y'n9 ?g?3KȁW790eӷ>gW;} GW()~O:ȷ4SC^,v s'WGG?Xv &_%ѫnO??M~2#ֺ~~玷{Gxy%n\\l8~)ng<7䵒W>Uc_oqpu[;}3D{) p>bw^cO&j8zUe&n9iWGo݇G9_R_ǣKy}|vep5'q~=z|V*4>nw};Oc'{򪴓{>S6=?N=/;z5~q6xm|'vB}t [_NջUU뿷/{o|XĈ \WC|c>!ኾT|⭚Og N~+^՛xy̳#w)E}]P,NﵽK_-a}NUÕqEtM mypn`2^=hK%[u.:CϺS~8~;hk_zm#<y|_smӏ_}c.k]2>~qVu:#J?u}7K_[ֵj7%'d粛`zO?Z^3N{[>%/;esȋʹ@'_߯dk?lqƹrNZMWW׷lW]_\=3)mp".AG9vL٥ޗb>+|ΟwrnKYYȓ_̃WEt}nį豱pH>|D㫲#.؁~WG6 <p%[[^q5n'[Yz|v;Cī(O[;s>ЧW9>(b6V?1K>Vd]k={_sUUv(Ԟk t..|p7O?\h~r~䕎4>v{x˯0odyJnw^ʲ_zz/܊ȿO=SqJɓϲm-_n]_\uNl^tX#?99'紳3q^|xʹcu.\?{7w|뜿1n)үjαwMN[{:./3s"[߶WΣч~"\F'Wzwes[<='__|ywT7s|xKt_?\ُ.JхĿJ޺oOpŮ|qh?z}hzOv@JBESrd^zkߍׇNO==ƳxpOÌ'i/9` 'WsL>=q~ʸdO}̟1n_ k8g(Ct1D㊾ƃC?f]{%p8/i/zύ+z.b}`qqJ3rt>/pEP?1лهit˸ӟՃW;|'I+Ĺ6|~8/ii7C]n>`~'5~j|qſ>o~ z~B;\rÐv=KoM:´}7<yLz>K#yNG3E^O*9%mmv1:ƙ sN8ݿZDN=w]s+U@/ 躱ϓV{7zqowp;vg'?į_|#ܝLAoi~kE 2!w7mA>򼜃lbyn'7rkupeS:Sc'!/G?]|=v\\_繹O:bY^zy~&;l^Ov?;">NmOCN>Wu>=.ߐ?<弞O~p}yA?~p?/8;{ÇsX_35d?'bi=={чs/r+ſ;z6]3zU+D3~}~ |^zjJ>vn η]#ӾN'6v?/8hAsqON~.7}=[J靲ڿ2obHu Eė*^C:\-jkGmqe&n=+/zW9oKϦ1rǃae]}Fo؇d N;qJ$/32^ꧧkUO~ww:(AN.~EJz_*.z4ke_9ynU._^z\>wgjq]2D6'|<.w;jy ]w~FG<;V|~cW; WʱG^z՞O|~W':-C8%P_h~Jj0c7Fo-o$G|-y{YG~&{}RD__#v?QQmY|g=.;Cy z0?W$~1}zކKF>O'|Wiq|8Hw%W)Mi_c=ϋKv!yN%P?%vjCE}}ӡ4+9z8y}ZE82^Yzjwq۸b#pE?<]v4Iuſ6ղE\|1-^"_=rzO GO|//r'+suoKpq | :n7fKxڿOgGH~u*{?ZI_'8wK;\=RyW ?< nziq88j4x_?f;{|ws͗I_f|xs]9?=_wgpe^So慯8>t팻znT}>X+>{=)=A`eG&z{}"Ӊ;Coq %Wr<+7.^A~Gʎ3:wr/o\3w W#;g>_;\8G|M^y先ϖO =gyq糥NJV]kEWま>~vb#'ڷ7oKۓ7>됾p5-M; W;:m}vygO|^t+iZ7%7k!~q\_e\\47p~]?gNLg|Z,>%!AУ}PUe߂ԯ]ok4/|w^e~ Ӳ~[o=.kўsͯe}TOYqDWɩƫdzƻGכM'_y&'xnnj^L=_8KCӻ|W6Nvpx}z\ k/W]ʳ1 .qx5TGJ=;w8?7Y2;o`^uθrUk ?6씾O8XAnD{ѱnqB~_Vmzu~Ӷ}Kkl|bo`b(:?K~W'<)񰵓ɇ.U=,m9tnyɥ>GɊ,獩2W'('p_wN[z'Ri񻞯yC{;<2B^9~C?b| gOϯW=Iϟ;t>]_+KOw)q.=8$ƎGӱ?y>u+(accy1 \+;/O /t8eݵ߮=v~=3#|S\Y;|>'Cv}z]7ѻ[5:z|Ǿ;UIt~<:"měU/N=C?D}?:)'7X)]،GNj{/O{S{om27|_zܟ#gJ~'+WW\:|W;R>h} kYrsvmC{;|ԹJoOzcف?3tN*O}?/_N{?.Wޏ3ʫ{zvt9$OPϞw}_ *A=_8j}NEyw-nwq? ~oTwgZ>WEA=wNYsYI'w=y@\iڗ_GqyK5yK^O}gۣϱ}}gd(9?AS^R;1w3Ms.aέsv'Ⱦ!tNSXƧno/.=?`@_[ >ELÔl}^yߚuu"{-4u>Yo5 }Xw!>j9ӓ,/оCO]b~|ȯW/}syɣ$8:=Y~s|"3Ίܲ쇃 녡 CqU:{ YX=c ߿Smhֽ|TKn?t}uYo<|i=+[ÑuMꅧ^oOrץz9kOׯC-Z*vŻ(\%w_^u ^5R^fb읔WXzWq^=D^~1y^Jsӿn vUwx7=~QK.9|O{[-V/b܌qm{Mٕ;f}č).ƃir &QrRZno>I9<}{/ r";OUeW׮_Ose}aֽ!wlqvh=%8jI^m=OIIpfO/+x*J?WJ\j>W~Qg`S< vZi$ǎjи˸g|''>~ݎ'z86}r^[$ƅз'<j><gAƼ~#9;MOY$~ۯe6N򫆯_x/w::׾qLO狟쥖SOܜvxuC;~!?/eߗO~xsWI˝X<ݲggo7ϳ_!ف>|N+CAK-ZYz5D>!r}Z괼̿OC+8W\gƉ[!d}Io?[Ol}wܼm e ?D=%) ?ĸaN?~j=[<7J኿O1S"; 3?ggy_vj̯}I> .!ػsЗ  O=#w ?=>}-}UZ-9@.KW3OOB_6vMcq7vT/e.~O7߫RW=Qzk!W =[ˏڮ׷,vAϛ?:O_a^j?j\_%N?.W*qț7Moqn27Jȫ_ ? [}VxlG]Y~Fo}vT|~g8C?EпoqqWZH^'n1O|j9y-~!N? ƿ0>)M\pꍟ5j\eXo̸b?85ᅽ^be߈c%_0#t ƭbcZzA˼W;+*^&bGbZ|WHKbƝ>o\%? 煫9~8{I)0?#%Nွ&J^z=_=ȋ7n<7ۯ .ah/| Uϋ2ĭۯ:!8!;?knVE5/n=vC~#JoЗ=Er_s;qs'Y/Pv'ة:BN6ξ|xk/tvmq5uer?$;%~bW_* j^Ը*|ྸepDS*o\<ћ|M̮s|%'<%ϳOwUq?~a=Ը:*>^]W9)Z}w^K|g8#c>0>/rqG.ؑ|^փL|=i'=yӞWW]:=\=[W6ϛoS8y:pya}Ura/|Ct#\};r.7ǘ_p@D/;}gv$>Gj\YzvW]r{y'm=>ŇT+]+z~߲{mou䡲Zu>m~^p\Fz}ɛ@v4W⹙jD|j{'U[B}Ln|<'?_h|Wun=o>;=Ifw/|ğAWjv~gM ~gծ-_`3گ5;p.+'Uq ~>rU?;mW'r>+q2SSm*݇Sq?q؛ΎtQ{9rJ..\:BrG.N?v|[=~+%^\p3w+eg#v+՗u3^Ϟ#/bw!{8B+^E4xЯ? \ѫp.ɇX?o]c?G.)=EzZ)=G^Y'Woۯ'o< ~ڭw[pReo[~qgKg*{w/W?b=}֧K{s-Nn=\迱oW))sj(yi;q߾5,+xsف&y2e;X\.&˷`3[q7_p|җ^Λ<܈gt{q@${?8vDU=W/WeW_[TYqŮi͉\ [`W|` ı5y_B#:Pz\T_WvOg?{~*=w[ϻ{ ;/\<89?\;oy{/~8WWኝ;ZpŏxyuJ2ߞgi/}xoƑId.Ov1r?_k>O8DW#7.Wη?g\^%>h\>k\wxKC0]yE*{7|høG"=d9x6gŎn9e~g.Wgw>.YwjwΆu|Z}v#~Sops;!Ve>w/kw<\{M}oomݺm8"S;;qY*;nfU遭>GW%ߕJ}ጿ|NJ5r-)0I| =jp@O+Uږ8`-؇G${q?<l7ȡ_Ƨc?>2|l?WOpp *A(S\):aߟ%,rOkI^{O;9+Ը*,8q'{w^v|y~Oy?G4rm[~ˎ}q֓ ߏY?0\{<)u-v_@bev(Ax/0rpƋ?O.wA;&>GN6uVVw w1EO8C'rx/(%]_VYkr: U띱c:o\S=jWo#7=2ٷcNC{UOiS_ 7ĿE?Б]7sO/~y{3ΝN}c.WS8x,{y[p5t%;8W}w]^[3vhyKopx)q]9}wCk}鹎ܐ'Bޖ':.ϟk[C7Wƕsqbd^ W#ኜȿ+Ռ{_+qO_,>a|]'7t]zgު|Cԯv1} =s8<&pb&[#'1⁗e6ə_sŔp-{=>a 7wS ;>;V?)/~x%02>4vTs}Ə^L%vA?HhpH7k+0\<<z{>%9?~0i#to'_|)TpUe<>F'֓M'?HT,~ϙxQeD/*_ۧ7;мe~_5/zq'O%{g:G%t^6ob3QM ?Wƿ8|[sEE8+O~yi~Vxb"^8Sg/eO6sk?鶓ѫWpW/(rnRǶ cD9NWTC{;OC<]xWC7{xO_ż}x+fo^C>:|Y<W w~2`}_f <~SpW#y/{8z~- mu8Og^8sƕU:OOO*&'>\_Ȼ#Ne^~OO/TFM/iz;xIqYKI쬚\yaxq E9ߘ9;߬C"C;#oG~0ߓÏ:.WفpWȹcz[S=@o?]x [\?)mp`ٟR}q%=^7= g+E/UܴnoqϪ'>|1r^5CbfK_]ŋz~˧j}2~[p^dpSscy#MJ8[;8xon>E?ٰ}wܧ=6o'=Mjuw=qO¼_:ϼ?.|#^9d_o3x7n_IEO-\׸ytCGY>-/??Џ//O~LΛlWl+绿wm"'jm+<}7eijgƥTyuF_]!vxc*}y򐜆ez-b/ Op%~zo n! \|xp,?%| x}͋FM~_~/[աEwBgw/tlw1(`G}߿kyOx5xizߚ8䂫cFeVFٿ:iׯJ`യKy,}c{zeN+I>?̎oOɁ}ly~ŏ#hN(m?>ȉsf7HWC#wfCwvueˌFv91stW΃ec%;<ym W=\xcg2Do|>GGKeʼn Jv3?y} A ZpUex`; p\XUr}A|'q? o?6o88į_i3Qy;{}%d\Z 9D%xHb~Aã̃FO?d^|bg]zk9bO2]ſypq]v=ƊMv|'_&n}dZo>x=+; ~2ܞ'yȾGxdM߂e~[Bg\c]ӥ ?2j Wm{#Z>GOc/zoH|0ԼOΊ~~k~xsSn G5۞ݎ;M}Z&WSkx1^_!+S2Eq 'N;-w~>d['^ 䱸f)y⡣qYN_t=}86?_U~܅᪞/IqۣeEO#G+tNJ~ߓ:藑C'258*y7g,q]'#9D[)&|,gP?%1tz^d?z%8a^X=AKh{qD}V2֝s?̛vh}_'wy J<=y.Ʃ;ϩwֲ%!x(\ͼ;\}uj>12|t%+y돞sg+BOێ?g;0 ;~4rjkIߓ/y{|||AeoeIW+_oLv-[7@7@Cy4˼Fg+ߗ_vpg'N譯?!{~?nWk+Ǐ< cK9Zc} qUCC7xOz[%"߉\%o#yDžk<._q]~y :~‹yJ~R_y.wID;{9K|γ\H5Nx2/ĸ}3Ҏ[>}2^ W;&?ŎW~%|bcwܾpƹ/nU_;?_KR~.f;{ڲU,TM; U߸gWz]un[w|^G|:;yqi9zoyr^wuCמ<ݶ '6*~yrxkdC?| y}O%>+H~kWW旇_/%cgq5c{-X'O!~׆?~4gyY1t|iO##}E_e_9eCI3>J;ϩN>o?P)vq-(.}nO?I^S8-~!PeV) >n+ 9yO5nyc>e}G?z 뜳H@~k_\g| {N|6ŭ9dW;뙇5  |-e>^ovak/ë vzl\%]&|-b/g|G.;"rn]?7_y+W]BZߘYp5…Q}$?vmƔ/,Gn7s?x8xWe= qc?r%=~t3sۜ|yp5aOjB2q3,yK5{Nh'qX7}NMi~{h)|?VZz KC|x=92꣏Gn=-y=U[ۼLƲ5_OMޗλ_ ᇛ={d䣯K{G~o4kt5cp5wbw{W˥Е~q^{OV=6=^?Ǔ7xW [T/vz뭎V8cg^`ǡ;~`7'|nK~Wo-2Oո\_=k';']AbC{}N9E.ߑ_F$+d__.h޷\u}k<>}( K[üKi;_g66{F;G|4xEQsN'Ɵ;{p=KS2^#q;1z~kqqk?L_XIWՌc*!W]-yC~?*_XcqD/<%Ov ~HeO#[i;9 S?O%S{o{n{V~X[%[W\_%4=~wgX2;8Ѯ4r[\0eO 'WT>z~mgJ_$/]dqwn[ #M߶|R77_?\R=>`/.̾"?ry+&+j|[t>s~g?G̸i>;~v/?Sz]cp__;ףo=~WN45?oZ_,<~|Eኜ•v /q?, j# \Zo]1k;'K\g^k GJYɞюp7z~}<ѯ;=}T~W߿s*;_>Zy9`cm]|4kN{3lu<2rvwxϺ_xqi\%b3vǸc|w;>Dgq0z޲r쫡O}: p/Ͷ_ |aS;go|=88ꝿ:oq7G=&T8Λ/Mψɷy(~0+| ^{\W!ku>YWVz~We8<}eBF]1=COWS ]ZOzE|$=}Dow<]p+ko eoO7zw\TJΙ[-z:u<5+w=|Gҫæ$!^U~WWzzI_^7۸⿶|wo#ڿ[ٷe7.%ʵ/GZ?u~I5Bۃyh[v$OQ;ks"|qzBO< =yw\M=_W}p}YWR t`3N=zib/sz^+?{`翢?[R: ?'U.vLaRx$CON=sȳ wJO>cҝ7eӯ?v 3z ~;4 NY\?/ehQo$֋[5qߞ8{I_{]c8##mW}Qߧ>ftP// ^Z5ŷ?\c%zk|J>|wv=z,9KQ%ϯ6@?:ρ0 {sw~ul?&~Qq GΛg}W׉S}z 㧓CU 9>Os?W^.?ٵQ?q3Ys pr+~lf ?;[ϙ|?^~s%1zz6|>eQq/r@Ojy+,q>}wW#cɳ 3?-n:[_e]@s gojރ rй<'3OW#g|g槰~j{SyƳz=?r?;}/.+nq 8+vCo_ۯZW9r/r&BgO˥[~|ᯏ߷7~^pUq* q7F>/3Uq9ޮyם?úٲsk㥽ٳ=z .|#:;4,t/{J*fJp5簑OTqƁ=jE |v@ώy#9=Gp:O \Wm9СWC&r]{M #syOyNrKCSxa^qp廱* ?WcE4qg_[~9o}3DN퇠[my?C;oCTows#H z[M}%ō󔱇;ʟF_r)qrrW;(|sQWWE<0MSσ'߷ҹ gۙmk:E/v{ kx%GMf]lyҶ{>mK?Woϡ5ڗ|_~;~9)+~ڞ8\YW^^wŧޣW{ȹ~xP[>z޹wu\'~B__-lyi??qN>g}c$ye]o|i/=69qG86ߣ7 ^F/3e:}<8p+ف 'XVO:a7zf篶=1^M<%>t:A.{^?/9_ǯ>ڮzz~Dq|<ҿK  ݃o>:bM_lyZoeƅ|o_'0t.*W*Nn=p?@x+~?{N?oא9OG>L_ŕ:=Xz͵R1_w/IO{|pxpOWӻ蛎759b,VWWZ朩,;+ pޑh/4t֮_1z?@WqV\wOIXf&r^ۯ1(lO8Pj[ טηiyСWUqyOz__;'nCoxD~'߳~}W3cG_8z%yǕx`j7 _g\X!=ȿta/Iv, 3wkK>Dmx`;N><}cwO=[w?;WHOǏqѯo󽝿;)Wj-;yHeuz*y ᦾ^OWGQԾJk_Ǐ.? G??<ɾIg'^Aw핗yEq1}bۋ?M'}\ı[%Ξyv^_yiv_CFwNJo'C{/$~OU_9bqYG3Q#t탋>z #˷yϻ\p[OFq [~)9$0wO<3Ҳv˸w{5ߟu:;xNyvv=ÿObc-=8O7ї^W⣎k,ַ\_4>*{ z>+{ }! ?<$|b7{a#9{ocyAq̳ɛu=tW#/ߝD^3%i 9vC=o^!1/J{Kv]T<}/-Jf~O}ȭzOn3WEqŽzG: q>8kj"ۋS}z_[z}xbПgt>RUlZ)#9uٸ+Oq*;N#{͎-R㞼]v>Ob ޥمんS`W;"g>y&.ZS?#%ߚڮ?ƥv{zw6yeǖߝ3Wd\5YVygw*?␾xeO3 =GgZmNE_|+܋d<СץݜVN\8+5Ď_ssCkZԞ||5uz.WoG)y];-yS;o2>S{? }w'~J?/;5'bg,^}o)>~N|@w. Gov=wxuǧmg|cxؓ>;i*j#/ݺzWpgG }{ &PW?kGC8yJ'\Unpv|G7?K/)t;:op{Ӂveσ7:o;O=c9v/K<;hWV= +x\=iy~wwh9^ˁCpHݯרW|g<qZWJ|κy5?e窷-?Cw'ڝ~ޗ/tM[v~%sp߱g|Wx%vy@L^vXǙɁ);L>Q8>T=__w˷P˧}N ~0|cZ22ξ43/V>m/|y~Ǯ{`ב뾯'm8.q |G>~x.wϣn~٣J|~{{ =?o]_eˏ]tntoֿl>;9|4/weYoEs_Gٗ~/|/o#ޝ~Ϗr#d۱Fì/b&#a'{H uRvN?l+煫CvMC%WZSlI@ڙZi_'窎?[y_] xGppm?{yCώn,x 7=)}Qʺ];{}#κ:'omcO~|GOE~ÿ'<1|o|y}xS-==ii~^?roE3;.vڎO8n_ouNKgSʛ;7;3'Kr0+Ӊkl_{[qkz;x=l?gNqr8zϫ*Ol9#]wM3s2sV}wg//<@w蹳eϜm'A~ω8v[|q|/;k9<{R9_qr+g jguN~3˦qNC| <}ʋzx9=EEyrp՞< tR}wJ (>0q.<˰n_>Я&O>Gn@ɇB^Kop|}g3y4/+zoޛ LO)cYߠ_cCyL^Y))Wڍ/^8ɟυ QvWi]ղ`lyktK><ɇ9yO;;{}vw9c^>?~~+7&퇃X9ytY2׃}}UTA'oK_M;q/}rMcu=|2E}hRhG_s~6?8C=~8|=iuhJ8o™^|{pK>N{9>^p|rdL۳)F"/Zaps}7~~n@9$ټo]/߽[֕Fm{(D^D;C;_A8#N\}#yc:ۿ3ڬ+cKh98ի|^w~r=v< \/cOËObEv~q~_%>OL"36q[szg=T5Ig *z_K/}S|JIF~܈|y*o: 5zc*ң?.<'`{׷,(d\~Xaru]A.';:Ζⴗ) s=`\߂yN[=_`3_O&Ob=x]5%dKm#8B7A~fhʌ@_cN^wWѸ?UZ\%W6&Ns _=/ȑMK?+/ ^);BMB^`ϧ&-;8 |?_:6sI/W(o_+nvn-؛-O߱ ^:u~He<+=Oot>D'|yF;a4y=_2 =cMpޣݿ\nE}~z|؁@ُOqݚÍ|'9o<]W_W_m }Qav>jkrKɩ78*?5|y<߁]W;oᯊ&~{Iٯpe>\ύ';0,Z10@}OEo<ߟֻ֣pR70pW1__|胏饎wܝB#cS‡ԏ/߅?M30Qb.MB˱_b5y-usol9_v؁79ĕNq7FSD"~+qgŏ_r>;xn8gpO<~8wI,=ƥ++~EW;q5a}(;0owq';;_:1jtMF 'COۅpqB8+×W;cӓO>||?LiOmm7:WÂӸħWW|nf\? Irzg*lZ^3:z)|>}st87˵ҟ_-nI{]"(;}?/3vƏJ}G.b~zYvj|ռx(]{kU ]~"| ˞g=<_/?^Hs;1[M;{>ў7567͸xU_ør~zxWS_s>o/oj}SWqW OcOef\ Uy}quʸOw8;GN.s_3 *1*=SOS:Z{\wG'Ëv e>`ɮ.zs6ɗw nD >'_t6 0nN%Np/]CZ_:5WZG.\ Jw e\7暾z`8"y~{| Ƈ\&сͼ" U|]8{pv̉{j~|wkj)~2??߫k;>&{;6&nLg=>Vg\U?}&;pp%_'C\у/j18j;GK'w7"#r+hovݞ1N=z}CxgwSΉ\i K屴~\@qƋ_r^vu zn,܈O[ d] z/7@{lO?-|L/W'8j ySޚ?^df÷sq'{븺Z>c;k^a2NI8jgk[6 ?wA[\|)ȝS7~?7\ *cAO Wj^"σ g=|ˎ e~;=&xxRҧ_?]w?'~4퓧®[쏡>os5Oy`?bW0j՜Kua r+}}^_ xvƍиB'N }?p!{mꗗ<:z?Z}ǥė^e)^qe{)yz}S~T-j^?\ }>u.ji(\j\5}_r2CV3]vWxvu߄Mx=EEr(^6>yKjjF?|]<^/@q}=Pn]opE.Zp58|`vbM;p/Oθ'yѼǯ⟫/ؔp#|ƞ#rѸW ȭyCյOpsϵq'g'Ӟ~zaگƝ/s-z~Y?yWPzf#?=u>~|<d rW9pJqyg<~sw ߧ7=Fǯ:{9Ϧd/a凱z>i;w|htc(\ypOp3_%zyCgL=xxUs_'/>7|S\C7كa r9wz*{ջ%ի яH޶_pZo>'3 n>N;uor~nco~?g)3_y;#k:\|~`_4ȭUnha)y%Geު.^_t4>f_ #i{ϫ`79/=ta>n_WnEt}'zxµ{tNqz/>;◎> 7~1zkqZ8S_6胃Bu\3>(^v4[w}!G_A5^;OOS\Sk$cy/IfRz-ᐟ/;E_\ͱCݍ;_R)yN}s_~k n WTwڕ'n\M\ɍqrlڭ[vA\߰~ǧGz,>Zf?Gƫ~}ӔZ; 7;\->}fGGץdOve~.gھfe\57;WÇ7z#%.>'袾'g5]ENN?_-q΂Gz<~hJ_vk}sk:ot4.?~tv ?}M\y8_ODnzg Rߍtg\oҾ?s'Sv;W>-ﵷSλ}K4~)*y%J<Wc8r/zRFODn>;ϱO#[#OTΗ`r୧~o=/z?v|'7./r=|.>|z4\ݹJp5LuTU?6>K[Ǽk yL<7?+yl_^}Ωrl[zɟ.~#GNǕ{DW{޸Rz~օo~tvN=uQ%^_qm1iO=mOp~CG.Q_ v~eԫƷoaj{//oNl}}+%Wy/?.?ۣpwYJ߇۟\DiW,0GK^/ߛߛn 7>C<^o_Ty$χWFO\,}7;IxE_/ϗ3:aɯ Õ|)[{? i-<=ߍ?7K/9ԇ__dtzbg>YW9pC{~3_QMIkg~k;g-|yyd / W!ߢ[3RBGHЃze9q}c\iG.$sG{^H}0zcH=Sv19e|ߎk'aϱohYK>::3ɴ| 'O^fp%y6jOm'>A9O+wWq?&<{9~FG/Q!~_w$ȋm9쾖O>CG^i_-5n~8߱'_7n˟;œy AJqX~J>G+'#?Ƨ򑡏tN[x7=þ$YxIqmb^).1N |gOM?;ŕ9U_Wk!68=rP?SJI/ӯ~_'rѸRwz'+;gel_ el^|Cг%e[kZ?u!^{¥^˟[}>k\x|杦 jC} e-8Cv 9W/jMr߾!K^f_xC?;n~p~p~}k=r[?y7c+{8jY_*N7؏!u/ϟW Sze_;2ܣ92=vP7W{{y4K-k[]|SKF.Dk}d\{y_8l- ~gmq=ѝ>?}|_pA/0 z GWvLO\GƋ%>P8ٞHəKxR׏S 73|~pU|=/?Ip5A7eѧm*0{| mO)g3~ƍ_~?%2 ߩ{_| +y>|G; | tPkr>g|' ?-Dt?ї{L٢qkك٧)q/+Cko7_d?ǎOco3|e˹•}V\8}Ns3oW}ZZľ}I;[LgXՋ]g|~W q >[?l9G{se.ӑ|Kn.\]tq5# vM\xo}zt/~7ޛ(;>8}~wCϓ *t~Nq7fߚis?j9owNk8z@tzGz|+;\>/Z<~(>9'M\}P絚S?|vkr*vێcu^O繜|xsiOncN|9 s2,n,17o.F_#]BܫEWw+ך؁+>d E}O2=A~<:A~95f&!~o)oxg~qoj;soqUp<gC0(#㣩?ёKpO5,94䚼:-WӏU>3~On\ sFp_wLqy3 ȹrWWmVgCW͢?^ۇG9;xp(o~f`S—}E/u{b+߁꧷w|$E ӈ{=gNr|;|~y)}&?yd[~#;Y'GG\Y{] %>ߚ~X~5re[d;x߬}5{LSg\+>7/ڸ4z^$rNqǟm.~Uͻ~9]g,uI;x.z];tO@wE2HE?3/ӽgqQ^a:8y.§z?6^KxJvƃb_ymEO=?˷t~y+N諉?GWxׯYrWy(kscѓAu s<_'nn\g绝Ioء'm?;wz}c+!>Oz~ں˙}z|\[74/Fok=%;?_~lH zD/һ0isos%~*SU~:\_L >?}voooiᣱ7xqdWi7G8f‰?g4~=M> WENqz⢍|VVb'ץwOoo8ȇFM<>O oijO|SW?J|oEE}h=e7t4m\z)[y;oĻU*/#+ߗ~/,*Enw+;;jE '_]B}0F%[\e2]7_|O/'>>}C1z-gzE{+n^;;D㿫RziWxy?-ߨx}EΒL| {r97Owv>=;%eS<zY{Izk H_/{+3_0/nǝ?|'_ _1Zs73}g2yc'_'y,*G_El|Hv$^G;>"wy򟞓܅qNI"~y5+#xg]`ag'N`#]|xG/긌|z|Dvy :?:;}ApEO?o֍++Ğ1Bo@>|q8lKE{ɟ0o5㇯G1iO<ކ 3+^iQYOM: -)+_`ŕR^1nN蚸6{p~'{~|0~}1vFZ|t\7kNҸO+7'|E̼ļh{ޔ_){=~r#7K|)kGQg8wsH틕y+οh><#O\|֣eğ_gDZn>O>_[))ڬ>e 8!do{ ^%hB7 r­v|'w~wH|Z?V{ɋGg<哊?.rE+s|Sgy߹ӪUeul}:a؉<Q B (i)LmQ%6fٓ[Ľ?5sXxOs7}?JjCu\o~@GsӇ+&oήÿGߓq?;U^E>?=WO>e<%V<ʏ?b֏ͼvG37~Zo1|ә?O.?6\j(jq>UOmq7ߓ[՛Q6)[4vG\Nɷ8s/,Noou?c6nާ|^—o[c6Z-֟Bl?\͸j gD1UOWymO%.KC繯 9r2.^~._?~?w$꧸8{iql^bOn1v>0,r1zex~=qBxF'ݟܘO< [<ߣ[?^ Oder o4y_87uCI+WO뾄<#>QC:kuBv9;%~)?:9xeVGf:z? ~ϥnEW z?U^X 9W/͓?H&;U[F^9'~nqxzU^WʼnWa~< Ŏ[Wxhߓξn>s|q_r9o5/n\^|Qnik^`8}gsڂ?zҸ+;M/f|ȑO#lNy-\}j7S67ΔzЭcyf>ɽ o9#z [Qig_C%/}0]'d}2e^/~87vόבI9~ _s>j~r_z8u^3+?>'h Jd7ݒgeҗWWQJ:/UqO].kͧ&>_~}yt^yzcixTw⠗|*\S>'@Z38b^ŕ~=~WW/=(Q6.{Gq+ܽ'r+ď/StY7yejzހ#vhjI W:eZ/:CGԸgq|mzGQZj1G- ~Aɧ^kBɏOqKO`xW~7|r4nxyuEef> |cY\“*1rj|?d;9r: ;P8qa"gȭ8^!OgAӸ~5~??C #sf8u23cx}ȝwv}׻|V_pi3/859O^jy ^ˏz?\MSŋ 4eV/_/+;c['0üggv]>3O\9‘~,eo YϹ~ȿ8>!74~75. CJD|gz`e{3mc2N7g~9EILU;7N(~=nZo ]rX =~և#?jhWde?+(]3vу~/v<#}o?k艕_qi*luy%2O$GԾg?^\ONٗ}kz|9jN~\]Sȡq%k/ 9d GnxkN{moFWpuUoራ}뾯#v<;Xraޛ7?W`mԍ3_x ?x?n~Y+os޴op(J1o^(`U~+غ{b\@~,_s\񳴫8{3/~1PK|ggc/^FOw~ǷӛWO>|kW@/'~%q*2}K |> !e7:_W\%F./9Qn>uB/QG/#x/KQY?bߓ{aǕ/>:lR]N?[]*W^\'/ϳbxzOB^|΃մbWz;s~f_ŕQ7T"'o^e_9o㴩\<*|:Dxڸ^޻Ӽ'yrC/}Sr xkYs4n~B\]^_eWo3Yu5_ n])߱uz}Ws^ʺVnoW4oiA~_G?{H:u3O ?vBlx*3O^Ϟ]?Wϒ7Pwa?/Gi}:ٺq 9濾U2Ɖ| Rgvړio܏oo¯u|_<nkem2#xoرKNv]M?U_^:/+^ /\,ϑ}V~uA]:/ثjfTnO\Jc'>y#q<_'N\7dޏWo٫WX|MLq^i[R}G#W;׾{k# ns >b w]Rn1~Wy爏-.4/HM:^yxӗfqxoNw~}ztzu xHk+q'=[~DRgʸ=>R{Tyq~6+_E9+ѱ+ۮ}<9u%U'v#[0x7(9ŷfGյ}w6=IkǓm>~v]'T߿]?~q%NZ\e;ˏA됲Nr\ezK99O ɭ: #Mp[ꨶ<".qBշ~۩@.O_g/Ⱥcn>+'毞Wb@XŌv+m*Kie=r~U\^w8H?y="p{u3ǚ7u_BCz n|&7;.Nv1~oo+n/ZqOx.D v_Tܮ K!&_|6FsͮZ^y^)^p<}k%]RG ?}Sk<;\_!( .x).qXPkhg?7 O]]aJsQg2o7]SIm!?ccwOq7-{uoG\Kݗ}ɡe?3|勼V8u|8QK{S~{,_<U묿0ߋ+~롸zcyc֛O|g=;OK'2Gy,Oix&//=+w'{_>{iOYW0>'=8{?|w}I_A䛺|wCsxۦ/m,>G\>F]w(\uGqߓ>;A:V[WǞt\%.o ?c~<_Q8}/yp= .+wyZqmq'.7 xBǰϧDi{%.˾X/߰>';^=;;|?%^|=Wu'S]?G{fQC^?o{;?_յ^I|ϺuKj~ˏ}:|7_%qH/]+:O~Q_$;߫mF wEz89~}x1s=Gz$׎K/WwjƧֱP9{੝)n3")߯g_}~N.T_Q?y\?_}LL>׾2WIxg?OUY/zN|l~ >g|<Յoݸ&#n}'[W<>sFV=gxoN/< A~^8z s)xi|#|ou/;~sz<%x˃yO=P\u/:O<Ϗ?qscn9𚇶;;꥛;x4>t:x937>f?u[.^PNR?~wx];[k|xhRi7o}ŶS7|Cooxc㫼ũ:U=i죭־,[_6n:8uesθZ>Gqׯͺ z=}{"yξ/${yg=ZF/_Wx5}/Ӻ<]?g~ǬEt>g`_A-#=::󪽇u.z7ok/<Nf"BNgX3Dѫ?^pu_^L;3ej|vtsro.3~̾W{¾96+3zrEv=۞9}7"8zc_':u\򠋯It .OO.rYO%m3+B}{Q;dެ礿}̓}pT|T82#L/8gz=߮-B^l=x>٩9os^wgoyd;LxCw]w8ݣ*u)ߝ^MG̱x"7J/t>7wa_3z:r8Cf>Ky8vr4~@/?cϿϧ~vnipeq6 xaǾ&_{vi8?=k7?Or owL{Vo/)뇟E+W]byy0/{|=3p}ϟ7̷𧋻Mz3%Ϲ|>l; 1.ۮg~3{?,w>?ھ1~2_^s\^C^i0Q_0vs:q>2oCK58?z_w=exϸ>o/ȿG~乍7oډk77_4M޸ߌ Wo;qqx5?ŗynj}p73'+7WL>8?_{\9{ ⷳxG{O?t \앸l|qǏ=2`6>HyYng7=e`79~_GqOfGEi<|l2q?lMS.~:L #XE柜'Mށk[>78o)^rG^94N#7}?7>zQm.=W>~|ɿzɱ}5]_|ƒ_qh[CZ=IĎ?oe'L,N?/~q;~ƭ|.};;*^z}[/z?ckqm9\;$̮/8Gߏ<^\ϗ70=ych<'_=r_aopeї9Mc.|3{l^>_~8C.Ow{Y^{x섗]ڙ^MⳉZ}A_/f"NL_lq(yv=9f\v^e]~=Gͮk}&;[<7xypzw'lQ|f[p:p8%}q|g㗚u+m^dJ VpQI.].狃gO䇬gg׮]0gWy f%uK_RW'O<kW7~%4׉g3>SO3/?@>}3Og|{C֕m|]#.NxԮ >f>~]r$NkMz "\y/=Kcx I=&³7>ESBA?JK|<]qUxWSmzG)US.d|ޛ5nx4= #N䋿3}*R/ !F/zw9WqP×W V}QOne_kĉ:|'U}Ή=Fܮv87uq G~V~?W'!~E=2zG\oiwѓx";~સ/zeSg;&qKN_Ͼ's%& < z~|[J|n︜p:J?Ge{Aiܧnq׉;Wٸu9yd%yͼ?Ngx#7wKyM<Y>\R^D?E~&G׬_;^emoyGB9'_GW|3I^9IU>Vya.y)CtzUiꜾO'\e懲쁸jw<͇u88%~;uxvDqZ=Ҽ™|;>EuwŃq^M?E7~Uֺs3XoZ~y8mV70H]̓>>κ1ڵy#ɸ|(jCRWoVw&nWdxe㢏SWugѸWx98 \;8~ĵ[~nqD7k֓_?Z?,vfWe_^x#=U_xwk.}qgޖ|:o_4Σ/^>k%~m\c[/^'yRz#i;_' x870d =.ڼuo

뛃3w;/C_S |0zJ\/c|tC͗$^kmGwlzm|LC3;nU%nNܼy$O;9 X?>> N1~nL<=# zm[\}c9_^ {i<E>k_%|8GW 5cwIrx}Zb8̏_Q业gO|{g}5+iԵX'e? }`=P?姑k`+69 /z7)pf'W7ZWn˲ϾOlSkog;]~uL]<֡ĉwOO__C.yu#<+3_pf?_'^}̏<ظy!uV 1N\ݺX<<}ﯙ8z/ǾW<|'}R37~_uYo俛Y;f[žKx oSͳ~[er_^G9kxc<=4l%A'"3V/nza\e_z»'yg3q_vYGO҃.xgwnP)ϒ?3o|7}//`QW*ߺAɻ>&n}L3ǡšٻ5O#aօ#jÜ/^2a=Ѹ.޹˾/ ƞ?}<Ən;4YRH8{̳{^l*5f0҇ 탳;)NVG|{.^_G&sdISKWYgK;WFyͻw{y]{Û}+O_ ~,/g1'4 c'{Ykc{x&;O0['Qgsf?8yu3+ope\؁GǕ:#??rDnغ9~Kc>m?y36|V?j=y>j0_M.])}J5ƃ3{hv㧣O|OOo|<.¾׎l#y>u%/Cx>O/o3+n_SNʞ91y]||O'W%z\/rß";*x/I=[=sr7_c;;?n]lV}[4(ul9q{6^wLU=h>w<^x =8zO":ngg]eھSơ׭S8I;WasuW5__;5zc:6Nynr)x~Ȯ+5/gdz7O{O͓'`@vu$Y'qm3OR?l~RxC>0?~>[<`ƳSFvSƝ>#4e\/;, g˺ <_::7G׍)MnDr}9kLal#'9w}G/o?fx ~e<1GGzs4 ^lWrzqu~;8nkw ~3ruʿ3B|3ޞ>vxJ]s?r|sgam=cZ5J^oQwd=~^>;@|gqp_'"WQ:u?uVZM| N~3qrP+hjUG~p0 \K Xwi珱x!cٙJ~l|ao:ޤs w_xee+6?89? Ozz=7.[<?X?j惾j~T:Q],~j~_gvyM?aū_xϛkƞ/.xOrwW%OhG<|w?\wz/|ƃlA}?9b.n&WEYE#/=X\'=r>ybwη j =G} y<7.USl=Fzm3~||x}xrn~ߊ>Y^-A)H8`şWGUg$!e}6O.ÛWg)?>~hphn'}U/ԏ3M\~o3zZ;'ճ{(湻oh0nߚv"\+/~]:z+ɧ[=f^8ﭻ _nXP>~w+ 8qT7'&#mN&䔽7ay;o'}Ҟ]r]p!@?ox>ոm|Nzo>R?>49-o ?TǼϱsvݲ}5|<֛x=\?}7O>l~dOW9ƕ7^H O&v9y'm}f\C_(%@.ٝ&1>Q>/gc綮ĺg]u^t@cW/mQ@|#?M?70x+rF0^X9wogp>?x,EoO4|0uc;F]KɝuY|^w_ukob6x\+gΛ|Ѿ3Fu|cү]W!5u}<'8~Α#z%%'.ǒqH^7N5gZY}Gkf\[k>Q=;HwqaOԯI-~evzfuyϟ>?rE>8e'~G ⌋N,F[e_jOo{!-|_6q8nܷvwy|{ r`_Qcv\O~gv0|M"v{_=]̷}-gu:߬IO1uϺ(ɾy</7Kk~sl<7B?~e|yx7]rg\%8PiExj>꡸]K˾58Y}*Jnq ;~ g寝"F:=3{/W[\3}@^r'ʮ[[yY~ēg>v &w.|Nř{+~ ;fHG7QYy{)>Cx.9Ys7>:y|8^p5>wm쓿r}^W~C.c瓝vɌ'u;u~:7.k5r=B;Y!ʳco^~jxBW*樎ǻOkXꄫ1S_S$ް.ykmq}-3yƑkɡj8~3+]2Hrz rH,곋 Owc!×[xIW}uO6_V\_~m.Wx>L_=j܂]aě+~ W\9oKwүWym?Ժoz_(M~q zz=R/BO˓gs׭wOWVux_p]pgga7lùy:Y\=Wߙm>[Giw=:ov3-{}/<#G[uuꚲo>X⒞'nK.[藺n#Jڮ9\s>όq=q;1^W#c繾y~*Q18Ws<=z,RLJoY׾ߴxkg5:ޮSܧ~UwOxï'>|J\LJqU 858}j\x98^NckeX|笻/Js-~.wȺfuWWm]au}Vߙol/fW8wWx > /~j'zuwd>dW9W~;ky?|h ;v~N\mrƭγ<.?Yr/1~$=qgTDާ񑮷GǬ÷}}Zp/;ox4}a]~9O\:Z󪮁[<ӧ >WeF>]Ǟ!?Mu/3{ڇOڗ[çŋ;{Y7l=e%w{'zzOl8lT|>7zظΌc/~?o4_.~x/׺a7nB>x|]n$ #Y o4x`owg导Ox[Yya5>xgW<_uH=zΟOԴKk7+^ܕ$F>7}g%y+y`vqKS\/_~7R8__m^LpĮOq~l}F:mJOOW>G\%G#An=!x ݒo?~M4Eok??q'>u8Õ 'uXc%Wgȉ<~o[,\nU\+ϻ_|x%`?x7xC|yr}ƹzR>vWOR7QgoYo1{#>8x]ںgGSor%<%﫲O'?&//; #?63_['U޳K'q|Ʈٗ&/֮o~׼'rGuj\}CC3z{#Oz~mΣ̫x<ܳ>{)^x%1YvѼizWSj[Wy[>qux7'#A;u ~/Ǫw>Gx|c<țgyoUkn!]lrLG]#}N˾Ɲ]3.k;S_N59t^Z.3MO7?/==>\=ʮ{oPʗz;~~?wYﱼpoxQe_sQ?}~^V|n=o /譓*n'2FoK}O-e[xy2{5<ۺHؼگ_ro[0r^~Ƴjρ+$Y|<f^&rly}Ů:6d<]2owzܺoGFo-?ďpw$N}oܕGƕ#û_G\}8uHpwgasd'>zz >MGyqu5gfǸ_ .k?{lxU/z2he~ګ_xqaWQ*nk]A>&N+r ןWg[uwۙ8~8Y]3;%=&NWױKqo{/4vdyL~ʛz S3~(v8*Og\AxNWwџ0.üouw^o?j}{;tx?8%o=ǜۮsdok(~⧱SxW~_|/GaGƝ;B#yy9?Gz .<{>p f]̣|yyM74[OWcHyIWIxՏǟ[~F\[sQይkPs>EΌ;#g;ke? WO?Sos\ټ+v=/]\~z-#9{͗O|[|;!"PuWm?1HG\fAq?7'7 ƃO<;zGu#w .s%5N5 >gtiE}/yC>~u9]{+Z]_r?=Ϻ6}W /6պ'r?n.v!PLcWfo?QvL=3FCC|xiyWv2‰ i|>^߸o$踸xt\wx[3Ox 31[ܹyIMl}گ>}_ c7Oq5<\\-nގ\N\&7dz|}z%Gcj{=M>lĭ6cQoo$p7vO3?[jG-qL{}wߨęz_(x.xzdsw!/3wF\9S#c7?˯#O]ɯRMn=iO_%DF1#k)oS[%OKuR'~n{a|?NT>:xo¹?|zˊ[8-|eq>w=+ye#(uE;oWW1|k\MzF~~7)7oixG:f=ג^|zsq, qR|SK͍ga!x<*Wpr/-85?ch<2/s ǏS}~us̸x~DoI?SC.׸e}<9j.n,/{̑_ïxK='7uz~8G4>j,7|d̃'wUvJ|n8\\i!.ĭE}CkW2qŕı/qK}^)>=fK>Zoz"7w7]m5/u<=<}yl \y_zp5+>oqzL]]w7__۬}V|u|Ӊ'kĹ/~"INqS_>Y7}Wg7ty,C@/b[ɳ.5+q/8ʹx?G/ԛ,bj>8i>Ǭk^;2_=2㳼q ٟ7x-3 ^i埖%O}WOyp=?A*{dOF6o=l_X)v ﷾lyM]IT_yU}?W?\e}ڡ7u?{x퓃_f|hڟ}μgx(MOuoZN#~~[xo"^C'օ_ן7.rX]p.WNdYc_>m%óOus1Ic#精v7^MCmո3Tw._ߚ?t*@zqv\8;aqoՈm%]yYi[Eݴ;'@\]~4n7[i<-}x9d'ox[niEzcG\7'~vG|5>\jgO3>ˏo8 +];7\Q>'W>O:*Z6z~R7,kܻ+=ǎ/Xeܗ/W%/#7 TNpW\'YG%]^~`3C+>>y~z0< .8U*yu.'˭+WW坑77u,yY y/>Zﭾ{p/_+WuH|aLҟ\ly-u-\7Zw~x'q L]oSWG;n'N'{e}江•~m쾸2oxaU<}[GTm}:7'N쒗<`yw_5\<W[o:w*[#/x2`~G3Szy#j!f}Xgi?/ԧYn=I@~T~U;'y̸3?s_7yW$މg{*\O'^¸:xyB?1{kwhɭ[I ӈ8:j9/ۧiڱ~e_sf/n.qmy:l<>vx2'6 vܾ;<#O+YD{ ^oxy“&N?x>~GB9o[x;>m(>"} slvZ֧ wGLՁm>܎.u:j^o.7q£]x{Hz|ƻW^vOxa|ՇGj7}O/u=ymdFnȟTo7O?79|xŎ$t7|ϝpaOͻqոW3f]?qOe:~_9/"nߝyrA< >䏞Ǭ8bgˣSw׏`ߛ-*3\;\>ޗ%^8Y}57O~<qQ$~ƕ~sͻȩ]mM^?n w[5^BiqcP1@;g~>P}O䍴͗#|@Y.|%>vϺm~wz֧{\޻=r=#^k| Wyo Y Ό'?ɫyO?j_/j["<ʇCЛk?`}qCwX?^>7pzv%3y>n[&ue] ō#knox~\ c[:c)o=4z wWvF<| *zN7`[~~L}g}gW\|ٻ)&cO\{:`K0;?']忲.yխ[4icj3'K7x)qUM\/x;\98O2͸s4^i|jO'mm: _{]oL?v+k|qE_]>|LNɁģ[Ew<zobW%+0hĿ>ih|xգ78c8%sW[W\$|^xQ}:g:"\~pېs!N)˗58]nG;|SzՇ q ֧K6Ouyˏr} oww ykpl(%uUc۸Q3qA[|u >uc#z ߫nr?'|wG.bvO=Xܺ )srވNRH|]jq>~3FQاt{teg3os/cs:>'r{.n^o\gOb5y}qVWRcX~88G<gWGuHv6t$Wmϭ׽Ѿ}񻫽:ڻӼƩzӖ-n/~7Ww |c+G뷈?TxבܕW>-zǛ'??e'o[<~w~؏]ޒ~l^wxù/d|~''!ƿ~t8z@}of"'~ͺ=ys:% uQ'^Gz_+uW[×}Gޖ#'m]>mp)S}2j{9j/}t\6{-!:y?yl^=_+3|g{&`u?FoOVOZ[u9FGz&u|kG(kݙ|o7P@o0#^D]On]]Q;w{wSߋ÷w<=No󍷸owy:{9K+ɍ_2{iKիqӮrȧagӯh݁|Uf~?^>nlУ*?w;գ]ncH[x::tl=yٸ;_ڿkqVC^zcqLo\=кys8¿9:h}:g+Gƛ>}xN\[8xq &u}{u{:׬ߣ?g7Qۣ i~%q}ƙ=u>hWGf|g<}?vګ=3GU;^3.0yJ=EqԼ~u;^5n [=}Spɋ7v+Nx׮3M|=Usld㞍Ê4n~ME\o#—ڻu=~߷q\{ݞ7szM?P;'l9z ߑ>>9sN}~ ayq#?zE$wn-~'/:n{~AOj -Փ]|9{">#Ouo;n\s;򭛸~>~u}e~6g< rr7rxo^p~j:޷?pCru|:|xZc[z=}~[OhZ/qzַi{}+Ͼ4}vy.ߗWsoqt+u3wh]B}묓r4ʛnenu]B.ǧq}=v>{y3nVWZ:߳Ž/{;qs\8s_'?ekk gˬd7l+׼!a_rо6ӺreArzYC~Q t<٧=L}gyo}w_x ]w\~s;owGh^]6k>d>xev_uϸ~tH~/hc۫~79g?>go#ĻxQ>XӺ_)^W۷ſ| 8e93nFUqSkύO ngӞ]w8?̸~}7›s~>F~M<WAmNGi3y[~1G3+ydE)^詍y|_os_qޜ/<oqϽ__N_s|.GӮ=vpS;C~'M|%wGv}rS&w!_@ߐZO8ց%L<Fo(#>_n_>oφ{yOz>C=+ExiG;G G ]\/쾋~#޿l(xȇq3 W]'lV=~S`q9~!5w!~ 'tؗ~8vwayZ?w?%]Cy*xn\9G}~;8[yP #|ݵ#9iI?2O+󛲟ǖg8#0v3+߃ vj~_~:ڥG]ާ+yWv:_덧/Syiy%X|/-Inb:ٽ#{ѫg.ǨrJ_?e?r4 Wo}Bl<s: /y䚜׮5g{#S%Ҹ>;nGG?]ptOKO x/ڷ&/\dڳ񊑇ݏ{i̬Ѵۼns<\+7IǓq~f\'pG+9$~"K~gv#s'pw8 ;'$c^?V;o#zRq5yr^?Ϯ7/͏|(x!%m|!oo1xoܺυ]:ٷmWpPOjQk[z:櫝羵[̓}ZV\=O+Z^roQhc!nsyşKTg5^ ߸'SOH[w8z}Zǹ-qSsgbK{,,?qBx{;#_k~G{WR@ωCEz؝?uWg9hwOq#'\Qv4V4ΰ~y֏?s]g9սen9_8:W>]3H?W&⅃ϵkqd𭳂7ޅ+x_Iz"_sܺpuE뎼dqiߍ=~Nqu$׼x{Z?Upp&1ɛWSW7GÎO} 9S'k >l⊽J-mζ~M𯩟2p/K㉯K5??xMߠ^!l+XGt?^ؽ5}Io J~3x=^A;^ OwWQ{j\|E@[qy{qM{ox7CzJ]<={O%EQ=Y1ڹֳiGŁ蕵oxS+/+X\iy_\uUz7O\qub3oyɟp5O q8''=O ־B .gO|۝[Gy:iwן7;vUr+U oy"EKEvjZ/"M.ԁx'zG~~Nx?G~Wvk@|a?'ף W˾7偍Mx=#oŮ<3>?g[9/<&ԡ/x5x/VtoCႿo^uo৺Oa2')4f(z>տ4>u[/;;x؇gf_~q?G>?W^ғg+F־$S?ܟ/GჼS=^k:~^Eك>,`/ kg]/-Ԟ ?c>U𜭻 ߼518!ȏWk~؇><&wxޮ˕>g rv^{v낻Y'N|uuș(| q8v{A4:\>Y?-#<.x'θ]t1+]M<Dttw2|W~v|4m;q${qm_凐ʡ;}C}OFoᅞcGY{o0^M:W;WSwgi->2|/zؼ䍍DDq qq ε'DNo}~yz qʉ}|x{=6GO~=ڼֳ7^TZt_y vxŕ}9.fq +qU?['$O|xnj_}xp?ﴫw[_Ҹ.~ yrMkUY^?}F~?|wl2}[_󼮯xu/8N0^)^ W^T#ѿpbA䶼#~|cz/%>>_9uU{QWq>e?َ#<z_}<xȓl=H\R<|K/o09j24oЫ_Ի=]H_;7b|5_ ~~m豷'9.]kq1~p{ O0.e~ ?^1. /^ծl> ~Swu]?LOqGW#?앸ٯ/MSڢ$2aS{~>|{K/'?;7;w?9<=6qji8+^v8Z?lp~՟ksyiwˮ\xKc/WϚl>H W&i^qOS~<,>߸8>`?Ӹ;҃;8Z;eǬ71v !ơQ|i'%m_Wǵ.y~^μEqov#gbOWs/:%8`gvu;[Zμ+C;qxy~;>yo W5|zߺŞYjȍ8O;i\co}CpCw!;7;9']ogfw}Kp%8ww"ǿ4?]a?#~w|K'jϣszAf?Oz̧^<|ӑ1_>ƽzu=5GCG3r0coy<T?-fZ%1|ygT1ש"<xS@~o Bn1 'Cy}š7uꆦCG=h~~|4>򏇎|?o.~ܟm'Mx#Ro>]> +{ί#?>w6,O3g:n{>uzs1#WNVx~]?|~mMЬWMk~8?!_3ڹxj\2qv_~+7χǯ~֏sD܂\Hb|/>|q1?5yU`~|/~#tD'4r|ogOr ?<o^Hڭ>{}. _sIBjJrϯ\^X_,/*xB%h~uYg'{k=g:72yWEkO>x=x+;NyCq]{r\:ۼ/;hb=";o#'ݿ}߯p%o>SYe/[2GF^>7NǾ{mqE/yU~{Ó~>҇\g&u>}/δ/T_5߂߯1oO嗃Ǯ]|ugOkWG$S|_qE>bZvOc4V|]y>w7r]pĞcQ^zyg+eG;o_c;O}wwݴW'|8q5 ̏x|D /Hv=W~_^~߉8bNxyw^>y~!ZǏxzʾՋxb⸵W-Gn^sf?@j\jqu-S[{eQ+y\~WQ;q/^կir䉏/vgE?Ox:.x3x//%W_c$rJ\pyv_l߅%!yUfORq4^,{8rOtox0^^j:7.qC頟]ܨ}YIe|G~>?<[^oz , {`UeƟQtةy,|>ڭt_e?RqNҜ~s8 yK"yDFz.|bs_y2AAOG o{/>5R~u6%f>>xwe%>aKyK0 Wë{u%gAw^.C~Wȿ]_cOIo;>^{go֯ *׍W\‵o/ W;ѳ1yƳU2gWy,%ߺu(47|x>?6~xWgF~@]M n8_]Wݺ7;/YnM;o4~^x:^UP [odGlK?mcߝq$_x=7u ?ɸ'7(^4N^',ȯs͸^.o8ՃE)zRz}K/;^J%y倷!H5 mG[>GUOxo|<|~2#u[/@r!^^Sg[{wf\1٫eΎ{xqqΞmK]cxӾ'x8Y¯/'z2{~㨎 ?'i|e ?H>WO|uux'W^_ ~|F}:w]G7.|e=x8.bz);uOf}4G~${γ^+"[3d8IY|}W>q#?g8|''\_8}W{&-OПcsYn Y/~|oJQ]);Kn</'@꒯:?<~!G7Sxێmrw  +~>7{J no躮oÍ>`->{1_zb׿L{~ok^.Ck>[zwogN{MG\%qۿxFe:pe>q?6Wڟ]͌/~X?fpn](ǿg"|S9ő| IjNo0xq{~ĉ6_cqĤʴK?UY\ܫs2?1;׸cbi]#Og>{"ދ+_$l>~ !w}KH7G\/"˾GS\kʫˇWO,)o;u|.<~m^?׉/OLy,z[\Hu'\{f>{eǞ[ȵ( )X7=[+]\t5^2 ;noh]4E.kKAt}+m"œc +܋?y2W8ÕƕzoG.jy\"yr&mGݢ%wEx7aݹc/q>;7mO~zmFNCr/3+Ԏh<.⿥ xx¡~OW0恗zj7P1o.='@~'vn3?}+Vnހx؏ԼoM<ifyȁm7r>6Qo9g>gG֟|`^~Wp_}I܎Fxr58cDH'/ءWv#wԳ' 9#cq$/+8<xț62Sn|iOKH_t%V\/y4yu?/n>aO[O}6^q/ƋkuxLKIܬJywG΂}kV]TÑ>$G\ݿzÓGwoL QoU|o6L}*gp '}'/5.egSɑ=U\pU&povl<ҟ9vwŁ.K:_ /\}?C+B䙴69b?;G_œ.u}y?Ǟ]ŕ:] An1aܗ/Ə/=<0Ͼ7^px7AbF_sW_P{8OM8{~_0 Gʾ2Z.p?MZ߽D#Ϣ}/\qx鸤NwOfsԉ7q߉ӟs]+n '軾ty#`Wwvy&o+;uo|م 1<о{vߦy䝝)S<N^_ԸBi8ѳOSᕜj?9_>ryk\ 85Y{z'^Ժԋe~f;p|;:mVo˛U6G.S*x/xk~g_!O/._Sy9}.<9FOie|璿_4N/Z''haS=%g9o#~쓓Ci֎GӋ8'~?Knq􁸇8/x2\o'/HO|懜ȳ~g"gћPm>l[ YWí6ryO<[C1LJxo~}3'?%48gqq9V/8cjMwH|q=}#'>ϟn<ɷsGz5_\|mu|b <ч O<`^n|*^8]]==;BC+kg%;n~Vox~s?{ouydj۫9>n]Nћ|GsW񏞼#fkq8qztrDuy}?y?YO{6gxafG~qz_Oo;[wm䛽1>pzovY\+hpظSDžrsWbF|@G g_ |=xl깗<-Gr ?ʟfcw]?s==?|/g>S_;5͗5{xpy4.X6|.$n<[DCƑMzz ?/oj^7&>NoE2j9O\n m߅ԯs1܉kKg~4 yWGISY3]iڵvgpUq7L^|yt{ٝ@z&^+Ʊu#[7L;e7]]W@꺳opu3kߢٸ ' 'q_^[, }` ^ZP{ Ǟ~`#-q 㼸+w_W1s8ơ{)v֧g sg|x>d<.G~yjY֍?~}8|bGwl-]? ^o425 |Ͽ\R\h/?qvn:z? ꗺ㽏g}UgŮ_I?Fzg _`A|-.[?SG3uiWki}[/5no^^yƋhvCKg )Wg=xOuRUV=-=o1[tϊsOYV]]GuߵO'<{qZO'xk;^F>6z\5?K~{qŏ6ߕ֍S/Tы[Wʏw87}*5.|ߋ^\$U^pw A:ﺜT"g?_V8nGZV{N' .W~}7yQDNN0um[+OS[J~Vgqk;qF?]Emj[пO9θ"o1; ^'ny/N?g<>^E/Nn/kڧwy\_;w~pOR\^|^e*W|iߔ$ο[䅳ݵ~|c#x+xxF.oY?cϋ^yޭcxf'o-xOK]-_:.g}ُ)jWk-ƿ:}*^j/#o1ؼMp򄏝KRwcrqU]xbq u,A\o$GXT}bQyv=\]xKUqu ߕ]'(FO>+^Q^EǏ=[ҋOO=~Fi=߿0׫sO׭ym+gW=s/=dwNG/y?{.g6׋_Q?b+:ٳ).% /|^ILG\,-ٱƓZH5+-^d:-NiN뮸:SC ? o?Wg#GOFxGx;\yX8?9>ؿj|օ$ofȉ$p7֝~aq%x0__4^қNyu"/WhWWw=e sճ72ϭgz՝ߚo)i= w>dw-=W_<3\'ȟ9xOvמ<}W:ڸi_o}Mv%M~3w,u\5w8T^Ox*/ɿj|eS~=9y8|#=mNV;]y"\/\y/AK]{aN:أ]w0ucki}RioW\;'33?z@O3ٿ삫S>8we~OLK'|w ߻Yp޺P2Ko>rȣ}V>ytӼbćWxyυ:73{4\9Lpd^M7yyCsRݗ l}r=oO_y_#d>.괷ucz$ؗx/\w] y)zߏ|_EG>!?sϭĵ7:X#|kG3_6^-RaM}j_ro3eș~8/q@ no xTK=jEo_-/Jw8mZAǫցgNr?x'\C}~%'bkY_2;m\3dg-xE|5"g+x!Uy6{+rK)RO\W?2]xLO9.q;vҳ+ ; Լ~xI>^@Z9y!g~?=[O|}cq.2{5'h@}}^l=js8uۋk-~z _ <_#I?gɇ }Kޚq'zj}:s^xk嵱p"N_{&n3.b\I~;;ws]cUGK'$P>W| .'/ؑ|?|8{:(v>nGվ/?sW»ŭS_qlތx<|xE!^BrX/fȋyƓ/W-߷@/>M>|5NRA/GrKߣ5xg{Uy4{rVŷ&~F# <= wr).Coh,Lq{8\&턳*+~{zovdס|mGGvtϭpd?wи@qR|k~-.9'/ [GyqkG[/T+~#^4;?>[hWAe=n=0nac|~?\x9s>??*OE}on5zs}譕qkmN9z΍#w]?wW޳Wӏ)~ S[o /߾+^7t*v[>+3^>< cȭ\Tߙ/ >1;w:;>'rU&|o|<{j?^<(ӏ?G+gbj_Ə1>Pqdk}/|Kק\$op~佸뺱>.EO'l\jx+Ǝ1y;ԏ~֏}o_{o0x /q룭vd7ڡ^8Ng9/]~~SO>W?^x{*p<<Wgҍ?p8*1.}}䲟Dyi=^?9Ug3/tvG!z2~7r<p!?᳎]7̎=#gpxxs~K—#N/e.o҇s|N\_s>_ws^{xOϿ5~ϗx }0^}jOuOƉx Wsqƴh=[|O'9^snV-.+Gx.z瑛XY;_w%D'x'jOeiyϼW]Fە_pyO t-*'>j}6?賿u}M?wǶW=$ȓ8e?Wlvr/['"c ~>o4-O:UqӾ4{z|õٍ_X|q|=?vZi]ˏ&]~6ré/yG~08"?]֥.:GUp%F_O֋6_w{TGWW+zݷÌ~V..®߼ؿ~y.~:z?쳸zԞЏf+O;w|t#ԋS\>lhyxqю?q=uGzS]+ںnO]Ѻ*׋/+ _ijy@u.}~{~:+Gݕvf<DÌq2y _}Zo?y* ڏUIOuΝCoo8|wݏ^|^=PE;]uz_Gw}Zow^iqcKy ?g{~4~g~ߣ8|۾!֍6ǩY'/tgy 3o}9G7Ǝ[ߋC߷[WN|C<SqzW<>Fx>y]u:}c?ױP9v罴qz>p{_e(j[=.n[M9ξErEً>߲םOֿ޹_vxΉG|7/k{կz9yqDpro{\ Nx~0_zyj[v25<ww_~xeNw۽e: 򭛸~>~O5$浟/,OUn^T^X_Ay\|]{˾:h7ڟڙ^j?NSS/g܎.oɳ)=~iGOmݺ:4ާW?2˷o^Q޺l }'ll} yw<|Q:kzx{<޸߶+rl><7vپ6?g똬/:5! utf̭:q7Ϧ.Ogԯ~B=nqk}g~O}t>7}9zםzgoo=z=?̷}#txOO>}+O }tþ$\̗uOZ?[z?ZswVu=CѺuW;Otw~ǯSq'\}Zg}յw] :g:ǹκ렖_wW#P|u.yxǾzZu%]uWog|v{owG׵}]Gu6?ōvN6N8t캩~_:5Cϴ&Oڱ7}>σt#]b}߬sk}/Zϐws3qܲ;'yqy>?/ʿ}TO~)wz]f~2O{2::y_(GlZK{~'\Xe|{4DZsz}}?;A//k߸g/oڳ{^y>v2+v{w%/.gv֟O~yq3Y|ɽq'<}%'9<~LƵ;F?қpd^ՑGxa~ '?Dw}C<ՏL_҇/43޻\_ؿ\^9;/<m~{>v,ǽٗgi_'NE')OJ)_ȳqyMM{O^ls4NpMyd~Ğv^5cP?;qo;{ݸS{g\"W;9^#c񟼙\=6xW۾Zqz*Ñb/5Srj+x\ۧ}Slͼx~T{? ?N@בjgkc>5\ii{I?He/r7eǷ+ǵgG989{g~~`'j#7xѿY{~^7.H^vf~'}tv~۴c{so|<W9 >Xe0Gr0rrv5x]_>N7Q~'`"獷x^Y?q_r~_/ÎSSxycx|'G<եΈ+|E_{#?5f܍u<+Gǟ'!ÞpS{xOǑWr_ ߁7׹ůeU;_!uC$2ϭzʑvƝ /fn}|t\ni$8:_iǑg˩O<՞9:|g!Wo>o7g??xnr87/Wo/2no tŗhO]{5_pnMg/죱g}WX#w p%oZL3zV$;4.Qi_vwRy95ߞs󞍷?KεNy`gWdG!x~o#y WsGq7ƉfE__٧\s˿ܯ}s~W=qyAnxW;ܯҼ>>?{z|Gλqzh}xqO+}}m˺+"p&_7q{]֥ց3/{-%n\\柝#NNA<?l{(#|sBo9K|4/>X?H/xz,\߯>A{օެ|w}}i.vPg%{u3/ƃDzqܿyz~or px~8t;܉Wk=~w?96lUsS\m7~e+Ys\%zNJi^g1r>sy,OّN7⊼{3{u'puu[wL?Gcڵ>{5q)nq_W>=qoʑ։uN?<̿yŇsʛs g}}מ9hCj5;XWy$|T;?/~{+<+]ڑNvh~yc{Y!oܟ>:\_?<{Ʒvɋ}]\ɏ[?{|ٱx;xڿg|'/ \%NqA~׮p,nu/j >h|<롸Q\uPt Nq{LJG|n/'e'\?δbbWip\,R/uM/S'OZyGߒwЏgN];Utz}Ƶ7Oe1vxx`<},\S_O8Wqe_5@gUy;~6G~#M?GN}oݲ}O2.Õ2?w3;cA_]_ƫӷf>7v_N<;͓S7'?.8~_q+ݧLڞG}'q|`]v~l<>k}cz,\nϣ_[K>8uƃZk='xh]zox/y!>$LS N{Vv^㍧v}fk|(w^øs7ǵ{r=s=gq"=+:~u_Խ?_O}j?ϟj]\g- u8o͙9䒞$d G>[iݟx|GUwfVSWH{߬_/vcF> ~n~_5o~П |&O䇞7opי_5Ը39{8[y\['ws_<om|?s>1~x;bobV>w8s/'^ظrOg&ڵg?8v~@`<E|¾ ̞Õpnz:'_C;Wb7}[}Orv^H~Ovm>=\i8:ťx6y}ٿrǟ>Swgx0^s ߛ?=yy˙}U<#7'I㏵p|q:x$Mz;ݑgrƴp5s>}\}ƙ^_8.oD/7f|ܳ_9qC\G~/#ޟ-^/pڻrw-?u:~?[<?*/-ov). dy!?ċ֎׉1y{{1*ng?˺K|'<?@_3gOz~-9!rX Ǟ:vjS7y>)#ߋ~zތu  p?{_Zc\_ƑoЫƏ".namqFGv>h=~+_[q⮗?"E WwrEO4Mts|/}ռ}"l|+rqޱe !_'zĸ7Y}Ƈ".@~v??G⍩s ]ɼӯpyٟ{Aq=]sO=~r_r_>C>H? ^5_ugY}}61{_>kE]僞[yc޾57?=spڼy"ut8Kf/u,se~Qhm +}>y77~g7ޮ;"7{=Wh_wrX!}/{ :'pO3/;dU_b_e_ٵwL\ƥ8q䋞;_9Guy2~7>o|}vܺ\l)мSy~wtc^OooW{ޯz4_~<||63b]:Λ{͢u;+vAZ~ WG>"a60d5'?cv¹柇%r<4Σ+;U\owݕ}WW"KS!+CcgS?%#MK*|zfW_a܏~\v>ޫ쫶|xm?}j</yӓjZ IE|4N)\+5ztql??njOMO0,=7?!GKv9_~*52ȋk>ju>57;pd^4m#^y"-8px _-/uKjSjw}i\s=C p}6NߘϏ3uݢ O;4=&Gͺ5&;k>y]̿'>x_zܰ7؟Wjj/~<,ko9'?>t/xA'|䏚O{=6Xzauoڣ_䇝GF֣ϖi|Nz/x;O̍QL ?/c;}SO+k{&ox[{§ sG/;h>ɼ^>d;gm|6摞OG<|Tߕ};7o=[s7^8< _Z{0}uq">^=FƑG~Aɫz̗'П1y}p5zQd= sr1Hro恮NIڧs>#SOSE^3o[+v}<؇[zqηE2?9$)zkT}5:qg|68}?~'մC Å_xLBް??;x{x;\8cx2OuWg3_g}'/_ %#r N?'|_vm#]b>W xyW=%>^}Rxћx$z!zٺ{qYn}Yq%aF[ϋ+x5~p~(.qx*놫k /%f~o]qw⊟DWᇋ+usP.mibzOe}w?|l:zC|V鏺̧x%|kLr =g9f=#k#?y\7GtqyVqk|.+~\}W#GOx.q^(zn١Ͼ?sq?jq£0u3;86{Eחnpg{IC<0>?w=q-aczK޶*nj8|7/,#ں??9…vvŅ8~We=zr\.ӯ .gwCғnoc^pt^WWopu# /R\Ԯ_yҎw5/Gc 8h>'.jw,:>+q6q*nJxpN>eUUr<;j_3/?W\5ϗ[+uk[xy7{?{,<Lv:\~y I=qhv ~gJz3dn,\9~/ǖww]@CmZ=h^#<Ôf|zwc]g~ =yi]sk>I\r8\\=g_W9'ȕ̋C?xW+G}{ُfuܵ pp|u}ŮeqB_`4y<ooeוlԴ:6@^xsoQٮ|4|-37p~w3ƕ8_ ~ ~ɿ[HWp~Σw7y}7&u <W'{z3~ߛoiE[wy嗎G#{3}o"?y/{P^]=~cG>: ?{Ivꂫ̻~?x!. o=;:)u.vꁼop5Aw#Oi][>VؼsxÙ7~yuo~5n<~\q;=Z׬7K ϯ}(81ͼO"w?84>oW\=Ok_/~p u\[{8i]֡nwy%>WYՃx{.FH/Uٱ}Ow6>jy!]oîVlb ^u8zȗyg~Ѯ<^m`~y;6\ޗx!~ϊm?M?~}ƅaO݇vp?u7sw=e 5ȹ—$>ood>:}?/OZ߿{|p >vE>X~#?}O;ںڭ I~Oc]!?lqvwݷ/? z~f\ȕqVN@v>G1\>ww.Dv:}Gz ~̃?W_|}6Ɵu[/i=#{G/8 {Ɵg]81lz#C}q R~u3G'g//~o\󜟏?6pe;8%|}oqJcK>6>[f."=p97_glz\S{ܿG23MÝSz%akƷq3+Oċ!|g܌:Arʸ_}[ǮXpS|So;_e2lѴ=:MϡO!zv|o8s_;9ؽ7nZ_1_9GjtàOk톓<˟̛y >tO]*-W3Ngݷuqu#?x\=*~% ^jo4riCѧs~?x-l??Eo~,χD/wo?l^pEGLEZ_e^h>.ٳփq8{%28n?z _^~-ڧaq5ś~?q;|Ч<_; wI|;kc|5C[u۸ ?|z ?⌋־kA3>}owzgVGo¡~1#•<#<}/s:=wv[z pDnM8j >}ܟ]_ywȧ|ydE7?킧G•:M; :8/<Я2>{vy?;<;?G.RGcS5~z\ӑ[č[z]kuq!g_< wi8x#9'x<7O0.^>=vg_KfTI}ߧ^ucA ?+_u>?htO{m^ aO /s1o4~T"W7߿w>ן;zx~zr%>;,~>s^zZ?ucx-waJVWv g}\oފWxw3Ƴvyw|Oy>;1C$ǟ~K<_&ύ{ nͻO;glw{*~ žT~v[WDw?]m=$9x_RcZwk?֜o|ޣ} |vm~ߺc~>[rjۂWߐ2+}=>L},~2\\?8_DӷyU&oGz`컸>~=Ϩí95Oy,9o]uKꂺxmr|5>lbgv֟߸k61rOƟ=ś$OpV+;+`>SK=q=q>Kz|k j><|${ʜO|+:|>OK|{=>|si]~?z{/y⯪vKcϷEU?c?ͯx;¿W`^h7;uO՗$&?ŏc|ip7>1z~4FW{ڇOawCy>?݇7;^ơu6Scxp>_1[gV:␾>.~yyxNn=d8:6{-.98k NFu߇=~ǵ{lpIϐk2_r۸:{z7WՃ`s͋ͻ/ߌ}]'z>W=v.o}܇?js0p_c6>;F k3<Gm^3}sx.=>jz }Lv?˻{Ym}ȭyI}'rSN>x=c]{>1[Ӹ۹r{|bj׍7?9nSg͇ycW_KA,^>v˼ޅ Exn}*v׎͑aK1ӏWg!_k&ظꑟLO>"7u L}Ʈ/M`cīՁӣw^wS/1;B7NQܶn=\;34oZ<~n -}i7oOe}鿣7 |CUݮ*y . Pp(! $I$HHHUU]'ڛ=cJoĎZs93scVn}g^/_*_q`؏o|zj3>G,W ύgum|Ɓ/k线\=^|?yCک|p5|a}W{=]~M\a_<]詎Lo\|^[;RK?6.o#8cj_?w}qͯ )u=o\5nvUHO5slޤz]?Z| įi\8;k+Ϯ=yny+wݟ!OƇa=QC.U駸Ba3U~V1VQ{Ng6|]??E'>gU;x;9n-w ]q]3mW\fGԾmx)<+\u|g5zx\.Goj?]Li{$~?_Gu=[I(O?ռQ7m!oC4㠗QGCO/xc7U3%㡧S >7g>&Az Wk{1tr?58isq Aoks}ڸjˏ~C6Iܺ3}vO^G+Gwa+⚛IСCU[;{~/cgzmljسE7yg}Ʊx%ozx.yg\eM?#'z^G3?uyovB~pG4Lm,w[=}me<\B7zYD<{Gxuqg| W? zp5x)vy,:W:A[_^H=}1|B>Owm_s^ou9vAܡu~Gb>e.N WC&|?O:3{`¹+{]}m@uN~gvL .]i|}qWk'~G [zկǰ>փYj]x*y3s_\:yxìuOօ=O}4ti'|^ٕ7mxּGzGB73_5}8%_ub_٣C~SqqV1th]=nYԞ6|3o'!ڸGuc?oP?;mhRwv]냯9T?Q?詮yλ]%^s]yt\E~i_uRzBܠqg~8{ko`_YGGC[?z'U>8?v_\޽y%ӢN2,.ɳzs:zg+덮p:9_cB/i~Cgv;h'8k܀o=6?\kW`cҷZ- +^<\z%~~C/v36s!O/=չ\]g9/v~BQZOx"G_;wxok>9Z֏j SNQxg=ck {9-w]>i~#+/Coiuxo@C's=zғmo@.m\]Gz'}?~>o3qv}קv ?\DtvuA]/zo?'Sďw+8bg/\ ,F'ϼ62{c}7z^gto/.~.ki_Zgz$\ߘw8Ə:o=뭜F_8:ߣ_g}jҾGo؍WB'l\mi=<ˎ8dn_pyT?>z[tǗ{eƙ=Gu䩌#tfgy 㗑ۭw7} ?Vpi~ֻl<ډbG}fc<[g4ߣ~}1|q!O߼7.wLJx>|q>_FNWoZe=ySG_._X|Zy_S'Wmyd?t^c7B=.x;.þbz_ n\{~ŕ|f+_ݕcU~wwG:X/?\5c៕CETh=/moמwȋ|>G:Ds]O[F.pB3~֓yul*oCW~'vs խs|=E@cou5 wf]GD,_?n=(HqU/V.4AQI/mn;~09Q7)~s'n}7f?}Xoӿ_هC3vc}5aCO7#otƏ8㾟y__f#>[9u{wu[+;#i?>vG䛉~#<~ ȇ>+{3+|[}#%v%{rZCw\wIXW!ת#o>_ߋoh<\*voJϼϙADo[оC7Co/>xrtn⊾ +L9$q48>3ԟ(Wzz8^i\[ҵ;O$WGa_@O[8j. gkσ<\:n}c=_Ozj]WC};|_1rK_#N%p.{e:Iv׶sNͫ߿ɓ/ov[qg۶T\~ϗy۬uwoq!.cp_:MָŇYb_ .v> }l#a[_4~,Y]_iZy_vXW׸!!~m})ߞ*u̝O{Wp5rFG?Y_\~]qſ"/̏r֎ߺm7QokmwyԱ-!SG _0#Wqu^Ưqqꩮ?eğY>;Ǐ^;#~O9puW6v 7;HN{otqȽ>0v>}ߥ9ۑՃzuomN ~d?%ALx~|?[ o}"s*^l?ormg.ӗ3{o8?=rLNn3:ڙ'潙G/񙩇]\|7>n~p7o*'^M|[7qvr;.n̷+ohox|3~4oqs\\zNtgɹ%%|yҷ#ϡw'Txǿ3׋|yӿjc9ox@S9[zAs/_ç}eE}z&nfv|Z|EdO%#_cOWO?O/c%}u>g?K ~O}m׶L\;":/clԗ9E|Y@|D^WgKB~r1S'y߷m>ǹVmwӿ/7>GާU~_|}Ɏ+{;ջm{]P\Y?qr"~A3VNJ9諟OO;jC]+:c[oԶ9u/.>#y|nl[Mbu'89<ᵙ|۩\|z {{gmgy mgg[ .ԯ p֭ lГ Ǯæsd۝Սoۊ[wm[z֭sږ wYۼ*:k}K8tg{.9^]mqu^gWud~sv;Oƍ>↝?=Oˎ<s|n쏃gm;tt>{˾m#sC|e>tvAqx9mo|?;ß3o紫WfH{;ڶm{Nݦ?H=:/=ǾC7q6UVίlk️q@xcݶ?oZeu~g1S=/:kM_o;y~wm?s1xqϹ-ƱzÏzX:>C}I{['{Əgk{R{A7TuZ/@qøo:^}/=mT xozyg{| 8=uqw\xHkf^ugh?ysխ w~wߥ]C=ץwLEg> 7ܴwoSu%9`OLJͫv%7mog+Ym[_\x3C}…g/z o?-_⤿V/CYWlzv>I[:vCͫyü6zjHGgvʥvby vWO{f6z˞sO?|ϵpUN?,u6te?OޟM?OߥNNzmٴߝ:_}I+fѶgQv_5n;3 ݵ=mZضt]˾p{}~8~+_ |{Ct-|w㡻-˴Z=d[Goڶug֕kͧ߫~4ti}i:޵>]V]u7~v?yn{:o'έt:+JoRGl\8o<>;E#w/jcMym/_m{׃7zּvR|Y7z=[]ԝOZ9'Cyk@kcq˃#վ|ߟї[nWGcOc?O͞(evꤽӿ}?|Ƭ;dY_g{ٿ{Ꮯ'?o?;ܴO}Oθw>o:~r@ޭ;ECN־+jGr/9> oӿ_;{|9Npzs;8՟ΓO#:9A;Ư|vN~/}ç30ۧYys̺gm^{c?8I|Zx{/'oo-/S೸K* ]ȝŁySρW8o߽NP w|/ץL?'x}>v9C/zJK͡i}?xt\ME\_:+~F_o3{d>Z}y}7ߟګgfv?\'8þ?||>w=;>︧_~/y*yrog>`ϣ̛}*nw)zo)EH<>G<..c<~g֡|{耛KVS_z/:p]{^_~qDUQ?%y[{.>3_+Bc3}O<6y?d~_>A?v}[wQtx4Wg~k\gVC~N[Ir@ƴkf>z֜ {vVV]~RbUp%o$-N'^~9[rxq܏%3?zu&nJr5\5<8+yLyh~_)COpnįg7?ÕՇMMjLyΏCE޻!_O*o9s=1Ep%>`|{yIq2ba@y_0=b߸ERY?`GFΘ羯gOz槳~hډg5n__Y1^\~=^rG} Ux9OA `E|]ʹKz.\<5ꦯ]7yoqYWoH5lvX ٧/g'qC\<صǼ'`;Rl2zg/|u!n y9tq퇞>cf׼/u z~ڛ9Wmup:P-y>@SpH\}z/߲^ƸJ]08C}oF}mn?upG-._Թi75rdF"qntf3~x;G\Ts%IzCzm}W*F޸]չr|sػ\wn7])~q5u>uaw\[%̋sepAOыpL?яI^᜼WuͿU~t<~N?;N䇑\%S?[|~i 8z@t"7Vop*nc&:kW+z vN?{?jC3F->ǮS_E, C{)9pO/S7Wp<ȩ?y_z~Z_^I|c7~2;wlD\~g/{8yG۰X~~c'Lۻ/aЙbgG#>W/ݷr؁/q RvyV#? I_˾<Ȼ+ jQ;2s||,\=_ߢ9OC8V?ܼȹgX[/.G{_4NE>}ieHȓCnrFǎF/O~q{_\}ɣgCCՃpvq[o4rY} Wz@rR^ ӗ-}~*s|%=qzq콤a?][^o4GcG ~ s/ߺ7l}ȭCi.~Rǵye<̓^\Z_pK/Oykz_7/~=t _W?Ix~wT7zgq{Fy3VaW&u!ov9\iё|i='}9?i.|vNl~x'߰qU ?R~Afz+4_|ǯ㷱чղqJ8?|e֍7&C}Fe#^[4YwwO'+|}xʣ[v C_n]in[g:"KWwխq u|^>2tod7N~G7Җ~fĬ?~$~3O.,]zާ>f<Vr P=ޣi\?[{p)ɍcMő\y:|D n}ȟٝr-?ꬅ1?};_~@k@G|~7boO: oKcǭג/.V߈Uw:v8Opx"z⿊ћny!>/>r?R8N'gn2'䧓}M~7ㄇ{u\C~ҁ~8wiχ8q_Cx>7h|oá׏>[gþ'OKmpWVFWAVG@}:qY~nB}f[CKǯbwѷk]gYw/|_0G?إo0>z=AZwmra5O7z߽ygNz}"mak #w|жuh8v0E9Gm4\t7-k^8[Ͽ[GKif~?yS^:;G[?pNxﮟO>q^%Oĵ=~t\xsrzS_DRrá= 쳭KK8gdgSG#|"w?z+z$96yWkq޶O[g]}^)|m+Cz"L.n=}c?![(u[oUd q1qG./9>v8nm' Wo C_z|m&]4\WcvX7ZqGGyGi]GN?*WP܀\h]qz*|=c#Uy#яG5G_ߐ䇈wz]Wy_`O{ Wsv"ŏ8]Ms/d3S~c˟OQjIkOZ^;\]pt=}6ϵ. ߒB=ps_yX'8?_о-\9~6||2.~'~;Ǿ]ޫ]'~պ)|*~r'熐7;dxָ ^&x~ Gi7~-\oJݵvaW7Dߋ|k~sn؏e8#ի|i7k|QW?m>#㷍ظu[?.8q;@]ԣkq?~U9|7u7q+Gom8 O3%[+OYz(?-]X'O|Yqorv?N>r7zx`#΂!y/^#G/c{#P^C^=>Rzv_pTy_Ms|VϪk82G7r:ʩWKșǙ7ɏ׏_⌛C}NS'Ow=z8}>cwSz0uJW|Jv\;\=C>*~^_yP .Ǿ#A_wm93K~чu7'GćH/-F? [{}R_\=n=c7/bW{_;|o&?)k,_\~e^ev~b޵m]׮/\oolZJޙO¯꧷~MC?m g!7{w|?zUj4EGsƾ@zcVaI-G?e_oq'r`Y>Ӊ?]AWU[7gRa={y/s{j/o`_`;> [Cݷd]}W;SYeڡ|U?Y܂: s8>6>]qm|.h}u W#'7nHR_G^7d/'œ[ܫod~Wwߓ3U^9x>} J j?L_e[9xCCqu Og>ǫo3G<'e<=d/>c8sH\l3ߗ?C?RR쀯 Wpֹ.quZ>|HGO\|_|BK>U:3b/=O3{ vrNɷKtE'z~=}PgYE"wjOwk[=\WGdYǭ㔧~y[DkB|_z OwǕ{>ܯ̸>=%%gze mm7zv<.d_&N8?}@c4?¯>wskgpe|}sWS'o\?_#O$/|Gϛ%޸<`W#{묃DuTY'؍nV[}oyuRz!y:?k;џUsp地*:]ձ[?vܱv{ſ`΁v2Oϱ'[vy @u{/+z3gCx_q.~U:_/?y޵re ꀫ]9кG[3=u}#?c)_cgO~?|{ mwoͼÏepf0y/|s's1?T<\yOSC S Wj߇>/>m}CX=';|xyg"/~qo}iw<ǹh\(99^pe==!F]\x!W[$>ŵ˧=LGN˗@!۸^h|[oGۡ鹉WУz95}q63o6^7=~WTnWcd~ O/N? ȷ=o_iJ=+_}?R݁z}s'{ gLy A:jv@V?|>Էg?]x;N->yI;{3˷ DMm琸n;<79홿-އ:{369c¯+ =_sh'D>sy~#AiW|1}S9}|!p]7?܉RT\xc[ݡΘxIWžC{Cso?|z |i]9K~3܋!~"ϝ׎"'[_1|")Oހ+Wp^#64=}{޼e#vGw~}%+_Ћ=OOkuSu_VOcp>e'ߞConhcs^%8Пp泸<+/Gs7ZΕjT)v8ظdޞxx֛÷kكg9_=]{~:˾c7j l"yzXz~#WjψL^̋>\g7}qe_q ?3r8?q Ío`탌y3Aɥ•>I>[?}s37z >|z?[/2 gC+-ugqC_DŽ+c~< ~yW#[r?'~W q\G?\ Of?>:g\R g㜘G~J^xW/?~[sm;G{WgW{u֟\Vm}x}U|Y>r>:MV4ԃO>6kY'khps{Ao9Wf֫}_}cscs%nf{N(yh\W_<%~غp,/腝׌NpeiOlzAgRR:yx琇|nAoߌG>FD>j*yah6_S^܍=o>D~}V|\|.ɿ#'_<7YSy^m[?;!߶~"iwx/zԅߎ|r{~"ogƙ9ϑL?*ڸ;gyz 9# W,jgP_{ƵKzǻm>H}ӒֵnzI2yM^'Ź}5g-9Y|,t$Zh\te荎ɫi<8vahqk篶b+|~[ύo.wq{iB45>\{_Tǎ?sN㾸j=6\͸5.tj^:ixuZ{5>_Ӌ䷖|>ȵځ38_[_IE|}E{[W*GU N#nþׄ_Î9S?7\=x>gj: 3[qW^Gѫg=tgoy}F쳞_kgq/'6s#z|('pO3}{x_  Wpsȟ&J~?$Ƿ~өbY^ wطſt_Vq݇W:ܯ\Gf;hRGS#ζ^Nܾb\ݳ&<+؇䁖EnӋ.u|7'fFC{;z8'z-^YW4Ns=-WU ~o%^ +ޮ"W8o&g{^.;v'953p>yW7w<>siNC]Kk}~>>WU5/tf7ԝ}ynx#f+O[.sB=s_\;i_žggC[/gNUq%Nu'q_׾mC]S{&y6WÕz qv\*:݇x!O={}['V}=f?ĩw<ƁNstgx8+OGɃԓqu}cׁcoopqv?bqbn`o}^[jgd]NOT_ד?/qv꫙<.EWqm{f}0v y\o_t_u=IӋ_c˓K*=|%_´͛?yl_3 rj]N;m}7>~qߡuX&vy/pe_jDsj鵑{u?t;\ݬe_| u˿ӒCq^83zy۰{<>7s;?C| SkU~:;o:_K|d3_8o 7W-:&r=>SWk}JxrrՁ]W*C'ꀷo>~n}kիï=kpk]]s).[S\:4^^B~|V_=ያ;7Ri~xqů-}gj?ԓ;f=bw޳ %WمkGD/DyNz_}ּ٩cK}PmzCZ}cŞG3<\y+mq5`WmU~ QqgN΋Y7b6S}#{?k8'"O|}Ͽ|[ƍwji_|} k @g= G|7qU{𦸺r-i|RL|]|u_s/oKd~ǡqƥx=mGoBc'o;Q/i;_G/˃|*v̟3bG+|Jpﭛzv`5ofczf}}3d7ڷzg5c_/yϭmE?<-=ϓ[={?E0zOO;\ݬ}7z7Ov_s_ uXꇷk;BgEu.=y2z~}[7lBSwk­Os|n 7$ .匇QY])= *vEWOkzZ_-z?8K>zo]|wepJ+vON=}B_;t_^'$/oGG2ϝZWx*O+AyWUη~}`=:ix'/;WO tA'{$yA/3~-s?>jIͿo|oEo+n' K5|yHTi W'q5k2.멎uN_u zi:gڞB~+ '~'q.&I;v/Şls#S`_ Si^Փ}F?Y"gqg++sw:'<; o4ώ{! ߟ~\qr>7nP\#k6׳׼ȍ=aϟ5?z\EGޖl?=}_\فg3yHk/y H{ q1g~>sH[3d=#|$ |w/u{S;D[{O?zpd}Cw폃_U;?ʸ ȇ_|'_bz?ʏvosW$Nxo\7gG_?+n?O|9@^zSԹ@`X[4~=m鱵?xd7Y3;M*/Y>l|.÷>Ɖ<9ğ̻87J'?_qwasL}{[O8uQi˝c_֡κ\ ><[>ʓ}Y&~b4k+bw@_|o+اW}5l~*]IN:kS0OX_i4,oQ'x{e}s~Wo{_I@n-kyG.W͎+YG월aoKM&Aߟ8qpCvbKuTǪ]ܨdWyO}_ ~jANxG{YC<0qW^d_Gz[|R}žp:]!zgD֟ޤ_#OG;`O-*n1}?#xoGU$tG?sAFćuOw8|5}'ǣ]ދ.Nf_ʡb6nGo=k\9g<g~_~'5;Gſ~;\Ӈ'I%8<|k<,\XTV&/~%vTqz){%?>f/_*zY{SN:>qq.~\ͣ}&r[ߍ3xa[(^- סsѯ 뛧*?*),[sqV7x:J +7ۯ_>_q AWG`; Lwe~==y#R:#s?H\kXq3?Gz5MhwpDγ3$rKrGO8xWg~<3h_;'5@?{p-aas~uqz<;9-*Ͼ8)!k0v1; N\r #[ b'+B/t|pJWKiWb&P=qW]}7Sw ;X\g)#N ȫyKOR-wxoίjp5+ϣq ^'@7NyᏍ󎜄J!¯sWkpi.~s8,$w%olWݥyԑ>Z?2>k\%_]W׾6Ww^u}~7?搷]q 7PtgM.޳8 ;xp;[Pv 3^5_t5sʺOo$q_x~g>f𷮍'v?_}5wO"ڻ(g_{qqU;`֮ym~7DxBCFϚ?={/ÿRlu`ùi#{z`<%:_Γn߯l7[~jݐ%n^uZ~y_w5s/f7෨> sOÑyV'G+"uR7.C}soo\='?ns$|O7Zq:Wr~J{P=EƱqiCἊʳkOCϫ\'&̟_q#[7E,Jns>ț ~ҏ9y^ }_;)c8itVO{"٫-;:pӖNj[xl]WWW/su=%-Y2o<۱܏?W9='Xk_< Ik~g&\\|—6oR^]Ǿs}q%:xwvu'o1[W2Ã|@?\`q}/q5z݇>k7\8÷'^=~F|9wGAo׳l}ϐz} ]{史qt_9K8#/^=BYWu3U/߼G?@.CйVײs]λOcZz~z!y" ߭w?{qJrX} ǿq2>m]>w+gG xZO_o=nG魧svYO~-;1yr65nd}Խ?u\[)`sCz8/rYoģߧ7QCYoq?| G;Pϫ] ?I?[Nxli gkO]L}f;xY-nfV+'~lBkb W/a{{NM]v y6簿8oq[]yz.}fu\k~Qvsx9<}8uE%8e8k]AO-㽄Rr5VS?}cwڪ/⿧!6!2]G!7oçp5V>!<+|ԕ7޽8‡}UguڇN$2ͭo8; +_/qk]>? WC9p%.6zWs.s.yoߪG+Ⱦmu%z},O .B~|W}S7 7:;̾e紥PHu!w֏%{3j$ڥko}/yyΙ˓cG<44tn|lG~']Y'y%|;Γm.G-H|/WGWEsRqzI牟tq}?ƭ_[5Ho<q<_ݶ~qr.'] 7A/¥pռ }sZ̫cx!f\W[ioC?br:dG6~8E5Q~z4.Q}zJݹ$!;b7ztu+q'5?3xdWp5up_`4np;kwT:-b/W >Cup HqM8/[`=ʯ'/]7ujO9sc]oy'\/ȏ's+cW%,}\%ySM_':. /{ '|O>vV}J?we k Bkp.:YyַWI sf쾞{sq98xőW![G8e;]\Bܹpn6~z?{_pDUXj@笗z qG _7~GO|%oM~S`#?wvzR`V%8W dZw:ʭ{}N='Czt7Oo茷-?ydpGzt\ͼ!e&q7WSVusSOpG;Kn_<'wىzwORC~{'_?I>*p:p='Nc∟þ'8Gw+۩C|? 7v:?QwR>9 ^ZZJ>}8Vz/~eSȿ?x#/H lh| \uvٹԩlOV?%M5yt'pk rL^93po|Y{k\M|+epպť7@K\7S?~ߩ_GxS/ 'Be?ƶ WI&Wz^Ws򊟽y_y v8ͣ޴ OzmSv* gʋw耯# ӧc'1k뜏OUOī{.F 'I^s#ϡ>-!_C޻ܸ׊7<>?|HN\֙A}7W;~.}.34 7gWǠײo^=zcnɹ`}uKm|Yç9x֓]H߱j0yik\9`q5|9x#d|"ٵ_;l4w:ŕ٬6\ʓvo}ܯw.N@>}м|o~S>*L[>䣡+ZoX~ȣ!o$D~_ܗ?Z> u%gug|\n3W&_(߸_p:xp>$;ND?{ׇ}j;G^7W^}->!_j?;ڹm%=3[}MP}}ސ'kgf/_} G_gyR|y'Ľ|>y+-`sxoŽ&~̏]0\l]A_eHC7Wkp O:֣GÏpeף*k3ލf_G;-ue{N:;"-.;j?}$oS7<_#"?͛Js}.+b՟]f ng;q֝=2/CS?9qyƑa~{wܱ<s)N-à1q֕>dOOys {`αzycsϤy"q [} _LyYKK]YuYL>vYݟ0|7ɓ_=Yr!&.Lϳኼ{ޕx4t:cY3+St'i~}]{'!p6A/qi}foszF>ﹺaÖ"?պ}oz Kq[#?C>}O;vƳq7K95l<05.p{_7l]vz~r?u.+zk݊? u]/r|~ʡ+/#J3z]8OylUy.ثG2XR>_e{$t_Xw>=m(u!8{ါo[|='vhko:>s7g\g^1zg[Le|9ը3Y/b?UU=zRuM]Q;؟ӯ__~\~//bD >?2㡯qt}ѣt}?Rk<}n5׿?ݵ}o>ޜ|p?OnOqΥ[gŭپ6rK\SS]=a߾.hoa\'Sm3׹O?x=F_^gmQK>{gah}\k=w%;p+.jgqՇK|q;=;+*w;՞FW?޺{ʭ܌񓍓%>.ڵzqcl}cb{^ڻʋj;{~;rţpwz^ʧ.*~nճ^{>Y}pupU=zf/]1_Z.eoKpug~upݽsC\ܵ>x]obYϧx>Oy`J;tgxx. x/TO6/گg_ˎ{K%mnw^ v%~soqJy=uŮ\x7gjK~u;Riڷ4{B{vGׯw5:9{0Nhtnc{uz=u>/_߳ߋtzd~Ϟ|a܇k'WUg^=:QUO}~vWOaߚm\>Wضy;n}IomKumU'^{vBuv?\ sպU)ϱ7Ҭ3>'1w?}sܵ]2|B2VNթY⚇;xV}coߴoZ~i\7mѣtd:o{Ql_L*n_==l?}v u߻p?^f_Ole?ʉYg~?ɑmg˱%GNF>;n?g%~5$zٸo>Ec7^gѷc'/损?\%\gG-܏i~[|e\N_љǁS}1zL~qqѓ':aō82ڃNu|ګ՗'ϯ0OmZ~]>gskd\ <{Js^ɡ-Μ̛Ÿ9~m\Mܑ\Ap&+]^jqsȃN3{ O箽~dqCwz +.EoYwQ0~{?v\\33ߞ_:ngߛ W(qv[;~߱wwj߬}?bԏ^8{8CJl\h?z/\{O+ߓG;x?3kW\ g`=*Wמq7v?r)z75?[GqyI#GG]Y>_x_tܙ}|~/kַݡ#<9Oީ3n81_zkyz+zH_¹L+'ϝ燎Ӳ.`WC|ʞu3P~ 3|AxX};藞V?s&;KNA8ZSvڸRg;CqY] ldzx3<|W4ȡ ]owXܴŁuuu[v旇_]W}!5['];v?|o_r&W\qԫ5NIqwf\ ?9_:õ/;~1; ?ϟaͬ|XW%>kGX;=^j ^ubOҫx[?m ~گ}qeΕnqW|4/U'8zU뗼''SsV so__UGD=;|{ƇO''βzfƍO.v!61+=xB:c]8 'yxeuxbya8q~OfGU<ޯ9󞦟O='>^/\n<\Ǐ'?[|O'k?u΁'a'ߛ穝8-<J#G>=j|k/5rJ~s+ڸ}'9;Ik>Zve?m辸1p#{s(1Y} >&$Ɠ[OmbG6Q7[~box{?SF?mԍ6B6>;ڟ\ޫl>pt}ݺ-r\'>W<4uSwK_'}U?b'\4ή|uw~)h7~3n? oK!^'O;|z.~稟1쇃@gVuK:7^)kuΉܸ<;Ugog܍&uO=]߬/'o?KO=H'=ſ*F=,d6蹍7Ş?>;w>Gyu~Ft>2ۉ^oуWw=x ͯu8O9iݒ_Cxx!+y{g>ݘύ';^+eo}>^l{e<čwW~/^'[ORxj*A}WW>:&&O_z-Vу??#]%_=9߿~k{is<_O~0.'iͧq8tN~G/p~ƿ gws輿{'n`77N޼-^8:N:O}p?xr.cp0/yHZ84Npw7tO֣q^|{^8C􃸢<rʇOT@A>_W7uu3'CZLW~ud?g[n/zZ̷-|~|O_#WCo3Dq =`֛3?zA޴yEڹ)t|h7!>q?"j'C*^נK̸֟|;qTTs8Z_[|+E_y]W~_ '<{_>Wo3:K#Ӹ~oE_{Ov?u|e)qj'ͣvrFlܯq#O6nadpH~k*=`o_bn[xNdo8r;܇szF]_ݞt?ߓpG{i3؁glh/\9~Z9z u>豟u?;pt78k2G.S0ߖ/x:guh;s ~Aq6um_Ezu`A E6~@_mG[&67qtz+vʗ[E.쫱/w8.顎/ڞ>k;"?;p~bWo=1q/ryZ>/OSsH~Ƕ^O:EA̍7)L}` ¯뷷/*?{:䓿>^giH\?]O~+c# 7gclgmytj>u ?OVިc?vȭq5{/n !{ ̣u8KߩWU`a:-?'iS_<;ޭnBA8:,qX8<#k1_uY?rغ;>#w6/x%Yl{_\ENt? }9]}!۸C+N_Y/{UGmݻs!bg th\Az+m -|9Z['r=k=!!~zO*N;(?J-_/W<=_j%mƷx:M|NC'Auv(+S8;r/ ۰g1v(OeX66غ7>okޫqA>7qg~-uUg{|\/Dhg>3-;^6_Eç?"=Wv؟~7qwzs/&?i![g_xꛊ%#wZWN>y/~g}zD7%>w^,A+}! O9x[o=߾dszuܧܖOX65{A=69q]Ggv\EçzEzl%|WqS>d;I{Uy W/ӿG]o}[iWk9l3znpѕ\qՉˏ7o'+3Cj}.}Sv~T:׮ᐇ_WWIOg'WWα~/\Ww%:x#Pw_.>ɳK ?[{8g=M_:st.k2ξN/AX W?hP}ӿ_D?Շ߸Օy3~'?}vC)m9ycW_n. ՅzqG|ݸ:#}oڙs='sOs#/Jo+w~AO٩ jF.ab^W4^?.n?+~'ypt֚z9RѶ#v'}s8?V\:&uU=7m}o5eg_z=}Պnyib 잿;}rkC[u4N|?] מǎv{'#_ѹJK+8eJA֣4g3`mԕgv%|,I:«j՝|q>/ī_7;S=7R]7>b_MXjcpǟTG[~9Kpgg<ߝc[x%z~^ Oﯽ)s.b/ѷpe<>?)~ze|qOX9kwdU/ÅzgP}I<}uKK8q,ߊ#i^ClSےo)}6/vi[\eט꫱'ucN?{L~{A+m{R̥ؗwЉ?'|}}_!:Kɇ#ѻGRu8uއX1Nχկ֍U\_O3/qʇg`7;?*i~$f]7;WQTq7엷oʾI>܍ *|ſ;7+F﾿gGv#}Bo竷jos8y8ޝw휏n>ͻ*݉|h7'{WQ)+oukWϻ_ e}zwwБ95~;l:#oփ`<' ?e74b;9uú࿾?~޸Ÿ<췯|o}i{0~J??_PkZ/ _jz*y+uL); j? r<2u zc:Yoao:9WiGIW[iLuZwe}GK?.{2kps|+riq5ck |g6 op=Wb=Vu}#gg]O =#N}MW/\'vGk|~=z z<;Nڅ_[ϜsQ7lg<ٺ_]_3yq _gz}wAΌu< x诎o2;w}k$?P\~џ8 f?[axqq [3xY>zT&ήWqՖk߷^{q>T|+nݸ^\uxxX%A^cS˷mS7d _/乸9m^.K~KWxR?}֣E%YWsgG>Rgb'l>jSZ8~}p pegʹ9m]v+e;؏{?GGnWO~"9(߭AcVcIgL%s߂>2N8m|ScOc+q un>7Y{9u;sj7poq8zI;h[Ž>,N >ۍk}~$o GT7+7ߙg'89"3~A 3.kW/WZraOu0^?K=vRyYW뢵/R=E\pusk1cqߊSq)rz됏a8[ _Ar^>̓wɷӬf}wʿ[?5_]lБ\'W{go>*rp-Ћ0q-—uY}kҎgCJ}(nGgڡ~kҴg_\%uvWp5r~>[ޏ>בS{Ln:g>`W KE +Dr87nÍo_.W'һr(tXxċE{u~3qm\i٭>})ywE|2|Oo=?I{GxgTo%wv{zq![O8x4/ux ;/?}oIs7Tϻ8B;ypE=zE +_6~vo{M ҧwZ=77_\y?zٽ=i@6~KFWx@ɹԇ/9O}>{f'qݯ1`= ;~Ng_?zrWNa嗳>_ zx }:qur|wu`/?UO|A滶їy8Ϸ:ŋлvu^o[-?#d~{?t;zdMظ>umY`џ'}u呓=\kxW>:RwK_|CW1fHwq9l[|֟3k~$bZ׵#+}q!G;tjޫ/yuƽqu%\=r< /Z]O'm=}/|V }?eGڞy mɁʃ3ꕓ8}eܷmm<橞!?:ϙxp5?6vZ~yke<9ۧ:{I+zs{N0|_ζSи~jW_o3~~;%^Nz;Mܘ$<|WD×ŷ߷:K3ٯ|5zC?zeAsJ}~o{,7?z֯?~j۸\j}ǟ^gkp_cC*CxUXǼ7 W6q䭷H{h:&mZ:y^~:lf\/ _.$w8ǠzY\Ok-ZO Wݟ}j[\{o}gh^/v?bq2ŇBS87fߪ`_4w&aYܫMgg\GЯAr=9zU[vsGryS'ct_k_}r5\yOY@~~6=z?+opˮ9(tCOUS~=?{q~9 O?#꽍/LH/fa >Ѝ_V|t痙sV~ Wg̗pOãWjWg}AN~o՟EG\Ikŏơ.yEf>: 8{qog'\X ff|񞹎Yy%~%N[#r:pum}5dqÕW4sGG|iɷidψ?4(}v)~{ v8[y\}T;,tOE~'6q[\c>dg;oXzs<~sq)vuz陟}-tƍ͗ɎƯF? `pdC86L>?}g`yW|ܾ3eҿoqG|n>[\]?tm}xMvx}۷[b{p-Wiz]/= s \ZOzCqxu=NR9ձ'|<}'ݟ{%޵58C~2;ܸJ~Ǿ7iq7p}"?BW^@wv9<{{fAZdlxN|?9sr,x}gNc7o|(?&\]Ç}Օ;>W/ܓ{4񰾇^GpxsEϡZR_ԡ9/r:r9r|CP~nޜ 񙝥]q3Xߎƣb3R||I{?p:{pkoq8=?~}7?C3c۳y{ɮ/~}S0ºxˏ3~:ׂƿgc/xčɥxCہg;5iƗx q}UGmpΛxS"\@ώp}D'7#_vqW=gvW~Z\D?|>MҸBg?sIC|%?3~"P~y'~Wܧ<W&ލ>vko`?Aa⃭hAuh[cySC܏| O;՛STnz1ԗWn]~NࠧjmQxM!}|i7~xy켃>:Gp]Oo {? ː+3\˾Wen'/[OeKoY}cSܲ==OcΞqzڸ"YOWC3_)k[_|7mعFWL;|{|ʞoQ?zIgsɵ{_zW~WV?|StƯoqkqU{6{kxj=ܴO??篊֜O/g{Kzna'w1{ds CgL<~'=ntsNϻ~<l^{puK;pq7DKV/G?*l?>݅eOz)Ԏc~]?n>~~؃:꧍7>8Wcq |F>u\SS y>R{==OVߌ4ov7|okͯWnw<+:w_Jy7N@Գmy>G֛zIfwEȗ5~p SN۸;=skiΜZ:urH}ヨ۶\ߥkj5?^/mi$^pn爿.@~rK7M6ټ6-~7?ziz=vνVüɏSsM%Yf;=p鉻8s睴+;z;AeW\+_ڸhΟϻfOwv/'>,oz:ԃ?^q:ˡ3'>jo0♯<5 kOk}'uE?독+-\?||9+ey~ѩj=:eSe}y/\_!?5uc}ߙy,|˝_}&kO?7N[/Z{76wfpf\p=;=EޥwƵk?t?}Z)v}a3o=\5]H\͎T/G%[87J*u?>m~xn~uny]z:{fA'/[91x\G;|=?[񱡓|z,+ၛ?\~j_w\LoU(τ+Կ׿Zy]Y 8gf#w{Gsy>f>4ڟj>R9:z<#v :_z{?q=v֯Z>#~`8y_1m870[?{/zXuU'nx|ivzDW‡g5y|8+vW]4~y5_Zcټh8/s ye| ?uivbϡ'kpd=)ɾuvxsyM{K?mG?.|7t>~^}}9+~nY싺:f_ϭy .++Nc7?o=:%_㑳~R{j|J]OVl;9~Jx|/?9ʼngyY#GC9}{Oj6zCAm=?;o݉co7O[;ixGgrnߣp57['CܺEcŷ>}iI*8nc:zO߄#ԯأ}" xZx~{vcxKCB-jk[)8oU]z+}ԏO{ѬߟF޹Xj爇0v{FuU׺3~K,Y=+4n]5S?&s|OOp8qcX90?zZChƷ_|?G͗gʟ?]<]W_蓿_sgoet_K'!^K _ƿ?ț ~ثo<Ǻ?6m"#:ºG?Wr-^_֛m|W={N3hů貸 ߟo;=sq:: };tf}C諭>kT/g;x zkxoKKz \]ָܧ?~g }G<||G}h78g}:z]\8!;|w]=ao|\= *QֳzvߓOd~^{;fUG-I78x;֙'.}go g{̮^[GJmpG^?ZyJ旮U/Wgw:"1|׼Dgm_}j'j[@/;/=}eZσ3qBq cgT~᾿[gEя}3..z]>Q\맥gbDZi?'X7ڃJBz8~J kh~I΍OZxܺ>}q/rqD_DޫbWhW|d>>z>E׫+|/9خ~]a.;). u+ogCo{|_o<_qUZޫu3tǼ0N;Cұ}۩ KK^W{'}{nωy#ȇ}o6?8ύr%_~3}W\\:<==*֡rF1v.6~bفogCC,=Uus'O<sq}(r^O_+h{:Xj{#ixY;Wp)>嵃f<>|X\Mp6:k%\n]3you=a78}Cv$zwuG/zv+?w''^/1ZWp3\'y 8_oT=|^n7u">G?пGғ/ Sat/gz?5> ߫Wkk!T W)|A~xŞ/:zag}#zx〩񇖏Wj+t>sR#7t]\ڻ䘸i0w \7)WSwNp%,(w?S[}k|5|M>sSҿ: #: ok>N?\O'ޝ?or# >Qxm\mcoӋKmcֳS9zЇ/#-~8PΧ-MUu9G/zxYϿ9b8B_:tgc.."v?~&3'|}~οd[}1g'؁\=п}뾍9tG+{ DO NXkuܺ G^ڸZ|}~ݷtfE7?~v1{}9υ>}guy==~Ӹg}W;| }jOyG.zxR/2޷u!N:ڳ .3J֯+, =Kyyy?"_﹩o.ɏo~W7_c9A>O컃}4!zW3E%.׺V>s%/>T\ǎ㯝}z_kƮeנ Wgg>s /XbT{ p6z'<_>~ч>8{il7ẏ ~)><9<~o7N5t~yK^ه~-o=#J(}Ac~GBWxoA{Nϝܬ,.Qt%RοT?Ύ5շk[)'~GYqv*~{ѓT6NxWɫgd>׌qzz1 Wv i8&qGWܶ͋C :ίUO;kg?[ڑmkgzl\_ǯ5tU59?"w_8 4.eƏJq=yL[]m(̙}o~غ>b%q~_㬽ϱ>ُ_\}~99D{ R's~;l7_g#4nQyz/|J[ _R{3 yI.Nwmѕvx;Ӿ7Z7~_"=G{d쏮k-Z>G?~׺o\m~/~O;\=::q}_ǹ7O}os9syxcsRo6AWoW؏n=GI{$-ؿmm잶+go2O׋+-\>=U.<ē/ qҳTl[e\d=ӒOoEb69An[< qϥjKf_|pNiy8~?/unټn>Ϻwg=8/ɿՃ~cMmힳu_5t}y>g O7Kmmq]'~3_W\z]qx0\ S?:]ڻk}vzQ{yぞwea8KҸOΧ'7W~]l3{3O?W7/{{ȗ~Fi~zt[NH~߶=]|og~2^뾓<ߵۖNq]$>`J-_Ͽ?y]=_^98u/{WUhܭәz6܎{ _kKzsޮ]qfo]W>%F3u83p5\'u[60lpܿuSGmnm۩)Si{vv~ջkξKz>O .]7Q:'M .#'eԛ SVk{]v_/ƣ[z){8mu^Opl?ɧB/}.oWo<@/V[GyqU<'>pg}w^ޛd7bdăsYv_V]ϼ0Wފw:kYoڳ}U7m㗞rWߞgMt?vUuc~x̓g+F{i>۶/GtlMg_)kk{g}y23sk||= S᫞Wsnxgش 3P̿{(\`7OgݟVDɑ^w|ƙv[ܶrƸǴq|hE.9PnK.aO?8}OczוݟOG{0{kȕL]?:<b[x+Y7癟D|{pdzrO+fݬfT{ gxI۸D~:C^y^<Ο>sgxdOYj_ _Ʊs]Z+tjr}ᄃ<#qZ}swޫEW+=oнÂ3m=g'?60)^gOf+=kq?*ʯGn?ʡ޿'B3; _~uAp?:6n`g܇JϳNpdw`+sܺ:?}#\h~~=>p_K* WՏ_kvy~b'Ŏ~qE㣿ٗq{~ͻq 7y]G[w<96_gF9tn33:WoEgQ4`^_zx87zz^-\s_Ϟ:n(y3 [֮}/Nyꙧx:9pyo =EN}# NuӪSVL{ =W8uI@]!?~^y3{nߛ_3qY7^|>]xxݳNU{'~a^!>=/ksBg^;~v+C~g۳/ͺз}fp'n"_NֽvCㇻǮ!gw3_Cq[k7q?"*'|&wء xgxǬϮ@W}Wf7Wjp5zWq} p٧E/'䙷|)>'齗}>~8uV~nY\uׅ\ _#ح<‰qՙ|VK>|/=?O7wK^{[t8_+ss٥pn'x}qkgϼ {w_^)(oM_Hғ~@>o{_;u߂7rZ+9q5>?=. {ո:x!zx|µq[v@׵W3y'yg ?'ũ jo3_}ns[| gW8 'SC?ӌ<s:zE}ѼoUw?~wCgo<̟2t>r%\uߕ8;`ăyЇ9"WwϬ3ub??݇_|SΤoc֛O?~[C[+wW}7D>0r };aGj W⫭5v<]On௧Gځ#_WNgW_5ξ{Jg@_<GN~#~Z?_a3 QqwOz$79^@OrmJ?ʯܳg|>X5O0?`sNWgmpvS}z/bpAXߌ<L!qz3e^\=8|܄ړ/~n|8:,gz~1|i<}]{`3nrυy?>e\v u W^C :&qZz ?Pv±_n^"xC7v\gV,f|?9Q_4| _#xo}yAɫW@_S~~2>؁AzvɭUK{ιٸu]{%Igt|XO n=W;qƫ8>;pϛko_cG3ؙjIķ<8!>SqE[Ѕ]N/:5f\@͸m~=Kiܲ;wQ#Z'F:7JO͇s|_/~/|S;:Ľ_<_yXyyQ|r\Wx[8>{B/ӲЙ<4_陹n;?jsy+__O2n7>ڽ1v|):ߵq٭Ow'$ggo_O>ٌW:n's}+8Ov&o. Epx$g\_C-3یp]4||=48~p~zzm܌}Cܸ;zXoZ\g%nwÿ5_=W3c{_g~bkg\9 70_~Z}5{-W3z6ɛY 9+zm]w׉|s_%䫸xu_3>_o/ϸᗞ4~9:?;~|nۋ+z9;@/'1"gμ wq[/}^ ^*&{{Q3}﫾ԝN$_l|ssڵC3:ʗS9|`^ >zџïwuZh~7>= [?4EIx<f6h^k_^4_xKlp3cGK%u(pO\ڛO7fzo8ޞR_?wO}b} Ů6 l\_>k/b6C5ߊoɁ֗1TcB/IG<‡2u'ujA>$ޗr5~\O>gg=]`~'r=t_̓sJKoIkc1ɿ.~UIKpoBom쒵sG6w~|EtCmnS=ՓKW{k\^2_1$>=yzm;h=z}&@[{:?yBYj>Iu'GQWbO~s>?v{xg/F_ZfAr=6͓{8'=j=\0/??fMkhal:[~qȣGOZjYQ$|ޛysWsrҶh\`/>7x>-zM z [ƕv ~I'i_ Ӈ/)@}pczc.oq'[.f\W#ujםN}qu7P=f^}??{qu~:/`|5{R>慣O_J,>ZFo|e%^/g?k=OD;X~wȳ Guɯ:W4^uv z?lu%sH^Xݭy#cr>>[?/z}V;8"_qDqo;x\~$h#kuׇC=/~̗0[7x~[?E8W?6@v)f~+~%7Oj:>T8{q(~;~v#~'=Î?n{zbW֯c/X=ÿ8'+i/'KRpqǡyGGC>Zv3N~?~7[4|Ațk\Fx9) .5|xgQǥ}y<#9})*~_lpOH<[{`.'Rc)`{Ec:{*vl>kO=\;GGկ/?p_aJz3tدk#/sס_ؓ>ke\ >^"u?}ƩtxKzszC:(+A?A7rg#nwmn?=+xG7|l}iN? ^\%@׋ #?8t:csciq7\>:՗3ny/bGɱ]gep:[*q Oq5 YOCꌏ^:sZo+n4q>o*yUO>Njxpw=xsKcOg{|[>HEx-ͣ/iCY 3. Wjy#|=9j~#:8W~szWvƫ>zκ/>\Q;CzK;}Yp~㦏c>:w3oqq'g}ߺ?%-bϜٗ諩R;z'߿u_@n; yF~iֺƳc(_4Zrp7 g\{ȅͼ=:4~?6ˇ{zO|}}̇^7ޭ<^;u4z޺=697+:׻&ne8?z' 3Zt܏O k;^8}Z0/T>"_r.KoCv&z7]{.sB,/q8sm%7i c▭muk3g—_[_'qGZ򜽨NJ޹~>|u&֮~s~Ӯ7=drYwo <GNXWW{3[o~e_yvY2լˣj28xn|gpyAoݿO~'˞|!qOzwuŏkc˒\985 _=Ƿ5N=(~ډC_|n}ѫm>9/a/׳<˶X gpUqoO֭=`cA;}+7y,g*?*G{^CCk E} W|(ՏOLoݿ.Oun]yOpCo}s,埲˿}_}nj}ܴC|brF8ơeɾ/Uko<J{798h}{6}K<ߎ]=W\<`Y5>|>막+L~g_^]8}bGo< ԾB8BOh(#{-_\VݴKUl;&`g?C;W>nW6^ktHGݟ=rsί?9`{n 6k_c3k9sx .mR}T?/;:ߓO^(:Ϭ<|۵W5? @~Ag.á\t~ uFӈ'ƫ7v]Ѱ+{U-}c[Qzw\3rFn'b?M~߸7@֎k\/H=A>Е>\9MfL ] G+|z#'*7~qCtg˳~y,}V<8~=|MSmi?h#7Zsw؇?aeNs9[ɷ>7,v7#wЏ Ezq@Nsiȱ c"ջd_%|#E;_|cyȕ슡77W~-WAZ=Y/ۇ˟q>Z '_Z]/_HGr Ï{׎؁o~?tfoT? g}) 7\ƕp WoW߁OS7>W߯e^uIoM3~v \׋^=n7pkEN3gaRκN?F[$1#WW[4@>XhZDCXzߍ5q<?!}VOބ]uLc?n}vozҵWr.\sz^\Oϱ_}ӿ=ȿ/ ]jׄ-kG {:ʩ?y RkmW;_?U="gCz88jP6Ϝ'b˺_}W/<'7?<~=v3>lV [y3~#Eo׳G_x<"d໕sp~KI :~G>Ҟwl\8yh|~n~|飍ߌ{\e_'up?=ɷ৭J]mC?-/~9!ȹP;:>oq5~򞭿$NҊ3y.b7]r3=7=|?yaH$q=Oggg1/^ \SU_=r;~7^ݗrVܛz$rJbS7fWW_ 0=pi~3 :ع /|u1~M[8 >ɣw=nV}Ďx\+1 ȳE_C,v|,=GoM^~?9غùa忝3<#qc>v+Σϣ^W+_ϧ_Ja8f#9d SV炫U;A|CZBݟww"=8W c.}\߇v)=G_Z <_=`>91^ܭto\%e~UW<[Y|$_X|sTֿ~][=xyK·=|/v?:/\KquROm_#9Sj[q؃pE>[+LmyJ~=Bj#[q/z%}^ŏ:;p|"oJx\/px ͻ&t5\ɟ8W_~ZwT?6QSߌ7pŽ[>|։N3Q6Xv'g@pqtFw:om]c{<8+}q5~ʭquoLNC wß? 첱W=~%zC8sG|*i{Nz]a5n>{r(T w$<ӷ_xs|֟ /aݿJx'3o3|pm~q:p{7m^~6;:m~p``7ej+p v&>h_ϻg‘A/x毇+|k_ޕ8*'<f?@]ۍߎj?w-_q,\~} N׵59u;oZ~iyuEN">^?r06n≠M֯yuD'˟k=W_JUp~?|m\ij8uS?=k#{5L&)z⇣ԯ{M΂ gqesy:{ME'r\++/Ʒ‰֏?{\{~@쾷qџT@/sv=>hB/w}vƭZmpqٗx[![w^J|zaGo[Et]jj;=waqŎgK;Kv*v>W2~ZOV5?`Ͻ?z:7|o0cNTr^b VnN^~eGgE8^?$:U\Cj?yjoӿO+ى?;WG3t_iSg]] ׬q؛\x=O'd+K |yu@wx 畮:Cq-xB=q Pwc+u3߻y^_.~u>|nxϛok8¯WkL?=s>{Is|e|LGF3yIn{ ՙx_=o=bGu"g?9^Jg^cλ|^;q ֙=Ni3oY ")~:Ʃs}Y vc|[jTywi>NpgDZ_=~gAsgcOاp~imzqx o>w|O |n}W ]G?Y_-6z9`|`σngG:ٸt8q FO>}E?|u[(K恎9>㠿mI|u^v|c+HVw'#g'm8/?-$F/Kxw?5o}s.•'| uC])X7#z\o3[;JS~&tď?љ~_mp!#D<.}foqvAn' G8c.#uy:iW. .kÛ8K6sN|_<U9hqW59qA|\{:Sպq'/?gdmn߭~?ոw%{^ͿnF=]͓/<9߷뎭T7>KO[XՏOV>{c _?7/©'u)/{~=x3o{y~pn3QLҿ~B5OI]\I\z^Cm33į|%Ws _ξ~^1n[<.o/}sO~mN侖D> \?'A'j]?>~A YAzMAO~ana][|޸j3Z+9nd_t~py3{.;/z>& ^_uuϞ?8B/r{sߞ3=;ܵm"'wq5q珽]qe\W}w'eᄑq5{G>zD-ߋ^`;qo5^/=$N{.V__}v=qUm}`3o|K+K s꡼Od)0y*{XŏϠo}J^4hxk܏=ߋ7O6FW_7nqo%%Ozط+UG8?N|x1sgG|5'?,[>7Wym#:׎6'K/y[%nxO}sxq5P̾@?]tS\y߁bN3,?ϭ1ziDg/g|q||n^>%n/O ё}Mt廕Yݏ:$zn>ˋ{޼uc޻=l|oPO)uZ__:?~1wU_oӑg穼<{5mqNa~50֕í gYޢ~9|"OA?/G>\!ѣ߁T{jmx}p_WVKo'O_,v߂='7yk^՗BKWm53~-=vݕq%/dzOx}ޯ|o-|Gүq[6A̺뫷>ocyOg)ó5v}wsm4u'Ϥ$羣\G# syȃS6Nxu@!WEWg~,}W_*+W|WOO+O:6]CA4Bn4ގ跮-?(}г 2}#qLO{6N88'~ʋћgzOi=e י7y_֥q]yKo\K^@uio=K| {}垖>|= 7|a?WG Wg}cs4GY~؉y<3v;㷘Em3֗\KNAƩ_x]NCו3C7zvy~!w?WoN`-n=Q;5_U?|>֯yOe=;oύ/nR2Srgt4r X[cOաͧD/%:SG>$?}e ӿw߻O3ӿWI.'{4.|>/xn_ m~3:=Om5sݙ>Wµkg< 'A~*=kܶgp'n>6zg:f~Y}g[t¯[W'v9u(uG_WYqNGsN4ۉ'8yKn>٬wnmޭew}{} W9O}q.~j?UVn,gzG\/~\WzeAr>56/7~-[| 3g]}$xO3tG?a/~WR?iϽ5rs-fȾNocqqSPиk*t3)𩌋"՛]L~>'ԺzŹp{8uWS2Uwsg3/M^78M@@sbE֟|>v#~2=|x6RP}S'i{Piڥk Wp+Ztw2wOC'pKU?Jo=]gط6hݎc/$|ln;^B ^!Q(bIT5u(Z*Q#MR*WWw~=M{5cڸq8h=V~r w̒/v9֍v8:Ѳѓ3~0fCY <Ǯ[6GOKNv<^&q?ߓe.qO\5~ό+te'4^sC|߸xQEti{x~i8xZ[y@Oq>g/!~Q, qgx!z]~I`>v =-ܟK1r5,?:TcqUy:ңO:']u=Ƕfu}=^mtWnt??u}`v#o'q7o9'Wq}5+0_@/z:>Qju ^_kk܏o彵ubGSu#~TeyXgjzޏ^.9nͷit{V?ƹ&wO ,^+w.\Ŏߵ︭}ӟzgz^M|'>uj?a?>\x>{)f/-} >m?NF%/O!>wk]G~Zo|xsE_;/gmC\o!o>sSn W@o~epf;_yDwf%\{qaK)3WHhz߿YzEj> %O̓/7'wܻ^뀯9z8mp5W_ |r;?N禸 ߢ|uC~; yy|}Wa;z~9^&NqpjߘkL9@O38Aׯvq:?c]o{$ve:+ÿ#umq>p%~mہ~WOA-ovupx~}x$;N2vO86_^yF~ƭߙ_>2jG( ?tMA/[}n}~j`}W;}~]\Ov~. cc}u"7Lb֍< Kqѣ<}WKj߱ ͟\c~u$>^q:ι~bsfZOo]=p59bZGm=n W6tC'?ƅ.)\_o+x8g=!Z;~ Flj_Wwxrs~{{=ͼI\5 _ Op:)֛mE۶CyyR΋ov-4ߎ8 n7 4K\m=yΫH~{zj43Mq}_oך}>pʧ?njr=y_O jLע;:.6x^Ig?\u ύKǸ~;źy_pKi^ПEueok/k}p $g|ν}yGw?^ڮ|>Kuަ޹r,гsҢ/==ugH_,dݡ^s~hH.=ey^[Gd|pSQNgv9>#N~ (l=yU|6>85>m߰;0 ʟgΧߜ靖Dzc9~t&߬C >ɝ/~y9~h>]Hعq[%{a>?R츪z=W{+#/~7/o:e\}nI~E_{ /r3'oK=s|O S-\Fzuk=y]|{REݧ~΅d\W?w~\z/n^''^2~thύs=SS;y?}6~'4__ o6Uo}?+2V7:t8}(=r6\mηA/tF ͓<rK{:ŗ'Çs=y"K]A~S';ix\gˑwt$艎]k9woy?{mߘ:v۸2?-捡˃C$w?}?yz: yN j,r:d)fzi~IZut__m30.[϶/U\ww׽3sp4/7_C#koYy=?xm|B0ޖ+?%ds/UMƝyӅ/u/mѩ%|]>C_q/W?GoՖc;;C~5N-*%~"Cy4Z޶> ? ߵ_Ğh{v~ʂۣӵ1/{~ ?.yvg=Kˉj-ݸg:7iOk{z;oh}Aˎ?-*.'irz+Ug֥?z]пujĬ{#6|}}S~K^6rޝ~m ?N5}6?|e==s-~4\ynףᠯFvKd.+{˿?yuK굙HoW%B|`'v|vj;>,L=\]g>[Oס[WG/~Qk0.v?s>|Fںnm7~_sZ?z.n9gεm|gW/?Ŭ'ٺ i+ϝ^i9QmGmkW:N8o9lys1V&mn#k]6nzW\qܿ>_ }t~g9>W}_ַ9ℏ͸mw\<[wMKh9;:}IףSyó~>zƣNע:t`uOہj~#\τ1h:zyn]>zYΛ\J}^n )$c}S϶;ؕozi\ob籗϶}ns7n[uq\M}=rdG>$qΗj!O{C?ܼ3c??^=y_=篧_O]ѯ'v^2rլ߯F_xW߿{W_/?^=/>_=χ~߿__z3pЏ'o sn=k~[-4N]Gםo;w;owvp>hM{ͯ'6~?MMoq\:wu9 WW=Ww WS|;?oJmgr(oݍ{Nv|?&٧ꊝuݺ?lKS/y=Wr}(ͿsswNs{лS?nT}u _T?{/Zx[[Ukaנ+~ >׫z>7s?hЮ>ԓ99yg:3zq{nH籹}uϡ>]?@Ч{O>ӒK^?y:M7M^޿vmn?T?}=ޞW+ѯ܁ޏwn{z^wѶ\[rI?wk=ޏpU;ʸ>;9y&OF~]>bws+{wzξU$_۵noOUؑ?\:=o;z^5\[9t{{y`7/gS_M~U? Vşkܻ(ٯv{/kO_{Wmͳm*7ǵKڌ흅Oz˲c~Ow=z1j7an W~wYgxQѥ=wq%uSۃҥߞwDW?wKr\#q"{>|o W-d}}?>=лa>a.;= }=3ΓȱJ|_O9K~Yы-1q݅NGr(,.]{C\-ql;@\t<]>q92?Gᑜ8f~_·;O?ev4>/oy~W(qA皐?,Ͽ*|럍j_,7ΚONゃ㢷͏?}﹇͸}X" GtuI9c3q w|R>m>H܂|yG qe2GY-^Og>)~L3߷n?ǾD<}L`<;_U-y :;P|nӿ?C\ CKA~)}z'yo;;}SEYuWЋ0ޝq븚{vop5ij뫍~ՕEc, ?hyN˅b?e}~Jlu i'(f?GG qo0Gy>rCߐwGov y}E?yO%\k>??ݝ/8&N~jU}0y?.ϸk+~ЃgLKo; OϴKU:;L~"mGS2γ{qy<+{gG۾%-9S*ߞx:}*15gNJ/ g85w7^/[uK/zߎz]T{_9t9W3OɎKy>q8%oTzs7"z |/߸e\^3>/$t%o}揩`{u!y˺Vy{UK޺?BwOz^5n1v~={=z-pΏ?qt\_ʁ_>y GG쎗g!O+Nsp?o3pUϡO7E?t붽Q>yU|oo-kh%OO+?[Ŕ7f/W:WzhxC^~J;} wof'*+.܊TO_DFnZiٗ{p5vu]aoF_M<p޲}P'w؋QO<_zGӦߍ\v}g5S_%`ߍ<'s<?ڶW W o$7'}겂+*Q2t,.o WY_p쯉z_uewgz u F]7;/Γ\ۡfYuWYp5 v*WLި%]yU듬Ls.ŏϕ^Wt<7\o!8d_}9o0Nơ?~cG>_!nſwiγtG7#r{dgTލ^sC~P#§o?>x۞[sS\G兝{m W}9O~S6/Sc~8! / t:__-ij؁CgZ>?x';@cԷKUvv²#ק.ΐӉmbpլ\o~n}%0f>'t}`}hsv.z:?bg8؁AucsgWݰK_gAy^dy+wYϟSu ߜ-׺o]֧-엞:+:Xc?ʺ5*u-NPboUoo%߫_fXoqOg.Jl<`x$]j/}]WUOyuioћ;TdXu:/oOmgC~B~CCUp2~s9'zy:i|̯q^CǠVg|xͱgKMra?|\:mҏp_KP^:W{T^yU8`7U8OWv+3u/_W-l`}q t&7!}$`~x|j}e-~ogԅ=y5N#`>؇JZ7-q_۵]^W_Hm_ O;|}SO[xg!|'EUlsi W[=ĵ>ua/T?.O_PsT*~;u+\;1:񹸻/j?A3_uX7qSW_=;|!+vp[_*O\?g9/nx αJƟO_}>Xqe_v]rKő}%y|4ɃsݿS=US\P{ot~'1t_-svq|Jzjwn#SMj9Le\#x>!@Oj]Ym*l/'|gr\7ouC姠e^GuW8H|#ub'kӳtɇs%5rp9ύ=)oE3,~sJќ'\*}5G s_+Mw/+v K9"j2upov OԯïUͺv7Nʹ 'ƌ:uܦܣK߯ɭ|+=ɾ g[_ɽ諪}>tO|.kۂG8Ǫu8vwҒ_ y< ?'jW?ߺ?Ww/qsہ +E8d^xxv(|qX]Q1>!ہ;}^Pz'=-Fn>nY?W/e?|+3G> .S/F?лז8qUP=t|C..(ʏL9VxF)cY/r?{+ ?9B m'Ϋ">kj|o1t#y9F":/v8!\:i~au/4u^˿_gUq#ߒw/寋g.NM+㼏޿<]7\Wy~5_oOo䥭{κU"|d;[}̞͹8Pk:?{4aE^gpc:5ήf}oc|Fɑ>_+XǟM?c]^zDMg7C|h~~wͲϸydֱ;v~E}ot=[O+>~|?Zߣ;9G.l݌97%GqʾSxK/wGb[¾q`up{u-Ŏy#_}VwN:aGWWqp}aKf=%7zӣIչ~\4 ܸ?N4E9x`gWnW%|OooO'u,3sw߷J:ֳKް4:NqyZqB|b:o坾 n*/p$7;o"Na@'oJ[OK^Ѓ]<m xOxY}.<>%\u8ӳw$.ߍ<;Ž!λخ[;8bSG<$~k}WX?8e=KU[~vșpƅΙ|̯ZCn[9rNҾ;|^s ݖ: w8fM=:ϻɱE?'J\>eOG nv^Hϣ_z|~Mq<\|;|:GIqužyo87ʪSQvW9z1zS! ./WƍO="N>k -ǶOEϐUWb}Ooխ=]8s>x w/Wgy ?ۢ=cԡs`p~UGBYGWGpn]ȡk:?V޳y/I<)|+;΍]>кo63|?f{yW Sq,^"sf2_~O^篍K^Aܰ\Euqo}oX]-N#8b'4f/_}wH{߃Ua&~?.OTۮ |q}+zH>ԷG9I/)ɧqۣ'u_n$.xŷ7:?t{/~j|>h\oYp%_km?y:σO=zTjc=cN-Z [\2텧C|ʎG9o9~3y3Syk?tЇ[q8=swSe,~KܸZWG&^ <]"n}#'wI@O_;yTz#'ޞiQw8?H^E}>./>2ˣ>[Aw0;{Mߢ>~ ܳ}9gWᇲí??ux qAK+nbg/읊OU?t>Hk빟O'_@! }U^ #tM{wrepk_q/MǼ}'r>;z,}o>]/-u_|AW5.ע^Y͙Gy.;f6|N&wk,XجxD;G5{11]>v+3_ =n!:߈4}߲~OV'=\.|?Ё|87rW;P~;9|pO͸ł;vױ?kr?wO<8>3~ы3^z%v} OףWEN,ɛ߭?E\=r?=0돎vs^5_w}|9<.q^]ٓqŮ|_኿CްQc]b߁uo:t݆_s_rUޕ?$ywOnM|.җRg;OF tKyp~$,Ws!=v.Y;ks[䒼kp>^A:{0F/y׌_V]@||o'7]z_yne*:ЇyW7 /0Hiwyşj\yUqpj$yjⷽ}ڑo;"K|^kK˿_rbYX)ZWu>Ov6H_W_H_mNs=p7[u᳊nr/ru2zvSw<s.νmWW/Mݛ?6ySBL~CWt j̋Ϭ{=Y; W_.zf{x,}|]oO|p^yvE셲[oWMy}{jNu۝Of>?^EwL^\+ס gA߭z8NS;9//򚑇p =?G۸|Sv#U@:CÏ&~xwF;x|"^WOa}TUpXuo;)Moݫ8|x<;_W=Xe5\N<_ƻ6|Õ8T{wn Wo䎺[v|:{L(M.?!)?Cn;ŧ-GdUCq^5fKR_*N ?Y^}֒G$y&.Cn弱OY[ސ}z(r]/Qp%H>%pf\-:aW~73/z':;#>/z޼-\uP"q+@_ܙ1e3W<9ǤA3y7t/\1~S壑;{A''8M mb}g\ >3.0S/yI#KvMq??^y7xl\]}yab훙r9Bg%cg{ڇIxF Ol;3vj><Ud^v68KzPM5:~ݶ쾥]Ok;D}ee'\(U\8pnTP=T'E}Ag[ћ}8 \٧]d]?+ɇiX7Eqp5E΄ZOSˑM*X{-nN彂;v\O?_ cyo !W-q/y,iPvM{^izK>P,w>}Nב}jyayD^ۿBި9>ƅ/}&gVɮ1/GYI؁Z>/q,qGxoPɴ~G]/}%>e_Wnvop5ZTzJ齲槥_sgpf]#v88"{{OW^FOUI}O~RA%.6xb/C[/'tdgtG7O/üѯ]ϾϮ8ɸ*%n⮻璻ёO!~uN/ݗ &3Qsh?D}'}Z;wyrYJ=:ڮ?_{MXU'?pnR?ue}[gPvd #^R{m*8u?غWo9w˞߮w?E/CN&?dq.E9|UO'??#~'ǿ3gtWgxg[0ʎwGτo_;ys_oM7ϝzid\>%'فUՕ~{Kzԉ3w 1bGe}z:q~~;>iݾo\S@$>2xނx{<9==Qvy::n]Qy6[?x(b]rى:G 7G9 yփރ?xٝz~:zH>D*ϒW0|4z?9>}k: =[:'_&ɉ_pʯ*މ֕|?zMݜ9]~oɇe>só 37|_w5|LJ tWO~ g_ߑ,>Y=J˟h{>=*g5GqzF?/l]y]^'r>CǮ;79sƿ| %:΄Yы3sP>;;"qٗޯ6KOx^⯮oAV4t,=n˞/nW`oع2;[/e?z<ȣWn^7UqΛW_3~yxOFޙ5Dn9GHM܁]H$.?-pG?8v8!vyX[G1A!>vs3#z,;U\qwo]̺fWǬx<_ܽ#3K?@ËK;WA}윜^&Ɖ/ō+v+}<ۺw/m6_v z}b.:PqEVT>ܝ^䃸k3ħ'r{g?ߣ,_WNQ>Վg|C?Ko:7}WW2qw6}Θ&OX?5\~;?Ʈ_SE^W(o,jC]={|pəΎu>ΝGu}qO\\}Mn&?H~[g7-Q8kTy,/L_ه9ľ9b7>Y_~s'pUՑ?u(?8ope6>v?W8k{Cݺzx4os;pUr{O]-vʧ79u@<z؃G6|M\~?N%N r88[!ae?{J}\_'Gv'Ws탥;zWK}oO\Z;n;OOަݸѽQu^^OEnF+]cO+TIu• ;ݾ%|/uz~/;uⲩ;犇H=#ÞM:,[_>M^=,~qGΛ+I}C> Nk%W WŹUV^COy3zƣ>*r}wk@:?>~/Ofp{~v>̗OqQy_Ob8xA\Vלz"?Kn/}|r~G^9;fݬGrɖ3{cc?*={rYt^=/cޛy_#y|W.vb.L{.r}G/բ'Rg?6<Ϲ3GA;}5uXEωv0TlgOгnswQ뾭O6vRnΟRLUswk=~QcW7\O˧0= ?E>G~.:xtn}%%ƿOGo){;WAz{__Y߱sɧSqc_8 [ {3ucw?'ف]\4t<,upqU|5~T|O!qwr۵M-k~Y7ΟO?oqskBǍ2x1_]WKYdܿ*>h;P]88u"_:xn}Ndq>e+Ppߓ;P漡ޗn}?7?YGz?fݶ/U/.ppOCC zɾU- Eܸepߋ~YOz}g?;Uw8W|}qvĿgɓ.p΄+|Os}ե/u=.ybTG_{_w9}#Mˎku;q/XֳN{xp~o_W. =Su:ޓ|Xy=.ځxZXq rHJsO0P>u>RoP=.{P?z:%_CvT\]]_ 8-١}[Y|zÖ8@#r_uy9:9H }Ёfw||aSoΎr\L:-H5{aq!wuCq~.y y/n\0W.ȑ*y/@'S~m7o'穿gOG߅ok_>/ ''wT>kWʟwb g:™i]Qb܃ב?Z7rS\+yޗt[Z{z8'_5XrW]Gez]5z^~S~?~D?V]Iw-JyOzL|kُ}>=uw1pƇƩe?K<<.f7b;5/s 3vz2rO~\ev{X!u0cǺ_uUȿ{A~r҃zTFWϭ&s)ƏOOz>>ˋ#A>9sķ/qS,]+s){B.SO_On(9xd{=]!r5v@?: ^G˼p?w۸:\z'qXa}˷&΄eG~vzV}%%b/׏d'd kK=qz|;u̿+NW;okΔ?ïߞK~KZp5AJ^mD~}ٍ;,?z*,kQTͣ'ᗾ|x@ηGǮG~g+`~[~]ț7j^ Z_>]p1;C$5r•xuo[_m."~<|foΩ0v]N#&+sجs}FCf3}[<֯O~B||=5Iݰ/6bu!RoQ1m\_oWjc︢_ҋ_&|t_#'_LpO~<>>gvwz q3#Cͯ }~t"ߓC#* 2\rj:u4sm9YwY-{.s|?w K=[v|(罻.s&~tԕ9M__a+6qFv`mRxCj׶W֋m_w-w?8Og!QD]&T7N;t>W%.9_]d9Vv~ſOoUA'=>ե6W;ON^N\ܑ7a~өGT׶>|DLGdK}L qlqUTm~gUG]1 ޲O|NU q8z x=+wu~Sw*p/8ڿ/9gp[9%^MϴxHJ95~gj}.涣9zq51hW+gt[gWN''uʷ_y'ît)}ÿn+܈kG]?r+z3;8{PRofy-n;upNvo|>qy41VoqiC&,B?[\9BpT(&U5_ygu8iOY[vg?ys[:2멮yeӟ>=~US\<ϯrش¡':O*|ֺϲJ߾KuG8I;~\]0NZQ~F]*^$WF>k!ӝ~;Ȟ׹W8}7ߙg;ρ߮N@y}rEuꢼD A7ԙ->C7h鞶`˾Y~|GC~z ?'u57yotw->6z%}}CۭxOGz|~o[?֥=ykGui6?yr1unq>߃^7snG _X_Ur7x-~ﮥ?++z[|P|޵>oֳ큝wϯ݋S}V΅SF|mE7z2.~=e+14爛:~Tw8_3x\K]ǯ%΃s=?#Dou3}Y:&:qW^^wn{<+.u~mwmŷs]{oˎ^yJq,wxn<[nm{tۿvqߺ?ę-϶뵳{\qs_.^g78u'9m;ʎ~-#?G||Km떾Չܝ<Ŏv]o?yWw͞~V=vf9C:{ z;7C}? '{8fz[Ts.s~Ssg}xO} z?yoN] :gt^کL~7ի3^5n^μ{\'ZMݖ%X]\܃~@2^ wu]Z]Q;A}VS]hڃ:ig|Dz7cawQWZ[-:~Wk]*ZƷzG3~ϵO[/{UgZ[թzT;wht}?.{+i|GϽ?`hCeMп۵}}qwMK@otl|}&ǟ{'RO[Wմs՝>{;;ξ7gR}׆=f'jK;ι?N{vخ]T9;t~v#Ocgx{TϹ:̼Ї`EJڱqN-~lžvDk7-*=0O~ov} b?J_m%,~ӿmS'tKݷ[9^z_9;Lk?ҟnW_=Xl{Yp:8}'6h o?m0Fjy?Vg5}e츜?8 >?z=Ɏt]]q.2бOƋV[kuvӑ{ _ϭ'sg\\:st:y~˗g˓^?Cs}C/?Gy}?eWK(_tM\kWό-7}/7ӧ׾Es?po<߷nssɳw_ε׸< {!~ wޛS\ߞ]O{>~3JFZ|LbW7W5^]7n͒7bwe%wCxǧp2Kӏy3FR?Y78ZϹeC=Wo{?[C@t>8m\U>wyt\EߒoG|>gGo|WEvۣۿyvZ7?6|!<:X7{"yOYmw&>R:~ Rq?Bv7^vR5|>n TOq׹mNJC9?9Οz~ ^aW{1t\a/.3zcڻs~bWWeE<_n_և?g|˟_vbˇi?=f=Q>?J眺O}s)\'\VK%QpNQ򬛼sY֙gO=\z#?ug;9My;yٟ!Џ'[_useî]j~l; Fo֑ďMfş6u2~0K?:9ˆ=cg>:|z'CVQ{:9gOһe̗ Z%!/:~@g^uEDo]c;+^}-g{D=ePNb8܉?Co\G_e|5ɱ^k9毆^7h?u}bޏR_k78;+\MxxmAy(|Ap4ǽ"~ܟ}">| _gK7ciz_yz*n¾W~`㩃W!XY{N_mo 򝑣O~)`  N:b}t_7<}N칉CY-O[]'~*3Wܾqyצĺoÿ-# <%ύ'zLpj\g`$8c wK^~#ׇ•Xʙpיq/H|S=$į\9օߓ:__y<__w|Q`\K\2-NjQz)x{9Ο|9 x/CϰӇpOop?s={oad}_v_]ڪSqE=q>Ϝy7ЧϏ_CJ/ ~:8(wߚ~Y:Ev؏CNA}o{O^٫]dTFzqg/:y |ÿ~o$CQBՍLK]-i~Ww{S\v܇'y>ٗδQlm=+|u> .I7wYbث;91^]}4{:z3Hε?y%ľ%v=yqL9n ߌ߼?桥窜zNM'|s?m=>_Y<`|^MNc_'m>йr?>=$og7:m?u\DoCu@p!m~0:s n?3>asm9:v\+gԃ ~"9'Ǿ'x蓊v^+~s+^q!q[rH W'=h?@NgΡooЭ98i٢{oiAy~u6vݒ§;EލA~Ⓨw_Y3J/σ1f%aSϷV n."zG8n[-<gM}劣eUȑw__(yy;9ǥ'0YC[r_ۃs}c4[\܀?j=G?T +w_ /7mpk<#&ǯ?\awo<񶽚GE/C^O^\Et٭pB4k;Hi{ruV㊞6vyzZuV5F޵ވlx}VWX|yƧ5>z.&?ty >}3փ=K_Z73r؝y~oqjyޚD_ ;>^q~bQ9q wWJԩsVmw 'f}T^|%~G/ˮ^ Om7u z˺`׶^^_oZv({ODC\mNU{m}'~"}ytz77Nmwv>E=?'sNH7סv}~<c8q?yz.:hዟ^]~ή[pybgaė\W4qU{t{D_?Og罰k3oB x_}83'㜷Z(zG~Х|ݶ<%n>iG';FާN~8m=wiڿU)WOu''MN}a.~^?䥸F҃ƥuOc)}rx[-^y uwup5 {WR%ɾ>>^>wuQ[}uz:'y0紜xgp]s^?wf=Ď SZuOo gg:OWZiy#_;=z,q*kkk?EH^|L82~|/ez\y>U;G_opN/mqUzW_~c_kUu/O~䩆o n<9>8q!.z܊E։=Ly$0O}.:|GmkƸ`>'n Wg_;G<>Rg1qxׇ\y߃+v:{uщ#.x'pE|'J=>}{; W8{+O'V{!_gUًtPMߝoxWE#geGw8%W=r(3~c/?uq =[=,.@/ZWU]ގ}~gįtGmOVuLmjd\8u\6(>KS_;1n^uw~ .}kl=ٷdJN.&ص+ҟZo[Kho+v}/G/?lyfaL\]!+z=M8~Eu+y5u S/%~%Ni+uzkOO?:c?&;|8齫wmп83{qJw.a;l_ x)i{]ك | u,=gX{cɛyU{{V}'[O5_ǪN m~ݭJ

o>co$nwu'xهX%!^r՟<|p5ߓa}v`/~0t'Q?8z:6|MMK?<;O{I[ڎY'q>yc^PU״wïq\?şKݑ}3n·w9cNm]9ow۶?1>v{Zĺ#CqeVwt=v}Wv!7;:wgy5{N}.]:'~\,,l=UY~7d/.?|qGz̮b%ܟ}"p5"~n΍_p%~clDU间Gi;ߕ 񉻈[<=qَ WpÏ#qՍOr^8E} 6zo~Ov9|pDt JχOxi/y_-up%^7^k1qjgK.uGQ`3ZυG/.}5VPYw9Co~;Γw{p6qŞ~oG:xSG?J?L~6𽺔%﫮ꀷoN}~~!yO E?_too;Osw~}n'_v\Ugz|m"'{n߸sLƟUz;h鱥jn>Ga[ԌNO<&ˏĺ?:?k>*ZW7i_)ܐ7l%D3O ^Ϫ;sdd;4~ف]D~U%$G_qx/bp/jϿ"'zB֗w.OqGBީ7!CCqC] |8|:~gͯ^΍+v\9/\έ祧f)cv y"vc8|)ߗ])D^Ã^n#=E= G6siW"8~玷 zP~?ЮNxC/ٟ<ا'#K/}>{uf;P+¿OR/_1{yCKxE"kzkhIg=;M{K!޷Q"W۞d/.C'j೸!9.Q,n O >'}p?5qs2F_kjջ/r%OԷ{ly߭oc1}8Rb?3^7EOYq4)s۲#;~(]vp~{y;Ib9mv^DzlEzu n{3{z3CqsE}?'D.nO_ew?sϽU|u=v#># S?l{Ꟗ} MM%[OmS;>7og\b?WWw:,qOGKM#ws|͢+sZ'^ї Wg/5.~%o7\}nП_"~G}Ny?jlwr5gr~juRuGL~uw[q%󃻶S~øĕqgʗhs΂xm9*^8?-0k( > x|v}5ήseJj[a?9}Lns, m! yhW_E_?{(̓|sQp>s>|?9îE^\z&nWr\^l&,IGksY4b,@|+dk<5u-wH>evuۭ*8?{rRoa]3m哧V5uvgH?Te>^k/~? 쥮o}Ŏ=@y$UWp'N/~\ֻrUȯsg<]l[O_5{w9]Պ# zW"_Cigg&4zD}|e|Gg?du|w}~lAOX'Y4=>ȏƕ9|o}|;/1 ,—V2v8?}|Ɖ~bo?psxK?Vyl\l惯>A>[oq:υm8!zkw~`tԥ }3<Ѳ cTލ}O|^ί踅.g݃K<I\Պ v?t|zSOM\_;+\GH}wӹ{css腗}OO3N<G\W!ROANK_8_s~w wCΧ=D_ۊeꙴ]C/~_WDu_jEވ_y1{} 낻Y\ru~6[4~yŅ ֕].O"w%}{N++zܸJĵJ&&]f? v{&q躊[`_+7cIR)oU SMu /]7o]wۢ.euH܂gb?'ky؇]WRY1]jLzu'ߩEGNo/s[>x/M6;9ƃ5tw|uGZv}cvuC8}pIu$kFvsK{qzg'-Lקy\lPɫt{ ~ڡ+>Boȃƕ{}UrxOb9\/7뺼H>/B|&N_kz|ⅲs~3=?vvcjo?mT缰k3vuuOx{;z/OfWu3W=;;Pf΋ygC+EȗDވjva+l;C#\SqI:e]||f|E>ԟ!.M?ObGC{.WkZr*pys}ο~t>>~|~YyOBvW1.P#Z|Ku3yc =ޏoSgGmwh=vcM؟ap5?]?/kZϮcGY?~uәq< ]7 ?s}֟%=~/uW>ڼ+h;?]>6`/C#|Zs#n: //7y"d> O狗$>y YN%ώM/}W@}e97al7S+N>~\}^SmE⃱#zrNǞsDG## {ȱst<ʛ_C<wasօ~'u=?[Be9LJہ>7F<㝉~X+"_CCQ}[\Ss]qUďdj?q䩺[7-ꍖxy剗D_'1##iHqG3Go'Q^.*>H zkֵ)R'*K|U9QEq*nWN}I߃n_GQUaUw]OhS8Wm]ny~u|C~8|BoS3>KOtO#8-9z$z]!{'n76uSAkM_\~4.8 Y{Um׾񶉯|fx'n^ GNߩ_<;wq ߴ: /vn2;u~o8)s˃V,. qt_?i{e$^1|ǻ  g =sn\ }7wy|!泖ܦЅ_n W~[MrG\Cޫ~pG]~_0}o|Cٱo>#Ԗ|7pUv_ۛc<ɑ/D8yv^:~c6}J\/n({W}=nQבSEoVRƕ dg9Qe±x,\YWijGCu>"_~\o9>mU}⒃'k)y~O5zxV}V]?z) ~;7t̮ha܅އTz]~oWP?L9Uzxw|a7uL7U$Qz(8z~C7;~//־HxgoÙ'pg~/wdQٿ/x?^oU<$I؉ga- I9uE=}_-j?˯?{| /UUWp}R>-{:QN|i{1K>u=As*ޗok?jr΍=8uЮO㌼v*U蕊o#/g{n|/?1?bw|#W}}3?I Ew?;~;w3!Ɵ"*]װOR}:7'ڟt*Vɸ*\:TG7&P> h^SWbэ c?UqxSQ%{m2R7$) ?q=@_wq;on<?vyxg'jK]8 ?祚Gzm\~>$Rgj75"/ޮu6J^ _3>oĮ{=]sp;G /\~Y޻}#}g(tf_tooK8z=y_P]=<]ł#G+rUq?*O|=|8iaY|Dv--L"^db+zkH\k}yOUK){C#SoϾwgpٷuWos_?T㌿TN Ƌ?q_9?UOWۜg5wJ~+;B=:o:~\#\ob ߪ[7Go|OxI$wÛqkġ[g<]#?94 ~gp~E엪G?Te^2Ct.\m֕f.u%:>m7R1rZu;m+O¯ kVMT/ף-kߝz~uL-OOݿw999D [Wg[}K>7_޲5觴:_u='|?GIkײK|g".b=ϧ/佳΃].t#j.{~g5t)9niݙ߮n׽w[?㣧i?{`*:ܱNl=@?bWv9E_zw~rw-#>G{n/y}]EѷU{u_1=Zw^,Ū%Cgv|6-=+-NS+zgJ]9CqE?y7(AكzЭ%K$~EwӝﷸyS7]zsz:i}w/rfȁ5\?GYKY_NkO`9WĹ@<1ST:yey殟39D/z׷i /t N\/΃\zi _ܭf~2{ָ/r;Z~œ3 ^_=紱 {.瓍='|Hg!S?9Wh5Н|=z#*9%ϳOt\hu;gG[aAQr[|Hq/CizjJr_m:`ϥi!3|d_q^} gu];'4W\y:F^^\޲&wז8pձJ_:U3GO?츊=V_SLϲ>\LU1qsyfr=CS;q6<]?G_gy+>8'1^k8=ˊOM?AEн n>6,(о6.=g^X.z+1O~-î\Wc]yCϲ:a=g溮ܝw{4|QO==uODzA<:oy: պ;f׫#MƏhE_/e>:^~"tdkO;.hWG)x~=c<~g?:*)ˤ{cȩW׬*KJvK|*?6v}zŏ/h|M#{~w@;*[_]B?0} p >~' oKSR+&AJ=xC/7TDׯy*n|q#6+~"5]+~7 >ȥ$Nozf^}b÷f/aϺ 'ypN|ϱ/؍mZxWu.x\Z_?$w!OU׉}S~eIܝ\y7;\4.GyI|_󇦿ح(\9/ jnT9#8QvL]gk\B~TKG8|~9_7[>K߿7㤧l=sQ}?lpa~匃Ei{d͸];pcW7p55ʯDǵ.O1iх|}g[_XOS늏->g?e/T>=;s)㝸X=~~SީiT%>T{{~+t!ɟיpk=_<0U;PWA?뜧_wZ+Z}Oe_cf/I|i;qЋ;'vu[9zԥߓc;t|>'=MNj28q}gOK/Sj٢o ~tHv>:~=;m{8.D9JgO7W츪y/uf['Jzw]ec[ 33hop?u#6^K}wM>K|u1~O|87~|U4zb ߰g] WN_Gjyօ]O񇷸bԾpz5|RWZM:+8VO\K9pw>ղg̺u|]RRWI}>N/uNQ|~"wퟰ!X OΣ Ueչqqv?:ǎ>}ߛy= _'1V&~;1x~--qUzG*}Myf>UqT" Wov.\U2M^_uIۦ`9-..Y|p9kk>};/ysy:O|ɞj~N?;wn-V?sxks3 w}5QOW!9Ws_ʸ~wi?;'C{{9׌'>Ks| 8#?[c=ZoYG)g?Dw3~c ~9g=>DOzwx-G_\rOу=\~\1Zŕ?%7g'͸UZ|q |7bٽѻ1O|Aۏ?*;<]:]WK=Goc:/,{n}\,xa;*V޴O:;޲4r+{pu8^Ru;g~w+W|pwYYW[Gog ͇܈ޛ81GϭWbGN n;OgmG_ oU6*;pw GGW1*;h#ɣ7~ëƾي;v&\Dr2.|7Rj|v.§jpmu)}v/ɗ胹-zR'߸؟C<'ֿRo_y=_ \%^Ypv`oo =b7σ7q EoYg5q'PC`]`oK +K]:|_!Uaᗶ{/\;p9/rK`p5ŧWułx3:G}4/WvQk:2\o:Uu/Di}.~ 衞3~~U;x:sϏ5?: UsG^w}z]ˑw!<0>yt*o諉/yѩj .}'yz+<*~:Ǧ_|)<>sO?g7>fo7q 宺t7N|^j{=Vԟɣ=u,_,;57z3f^Lы^]MD\];5ڏ]wxه;ܕ?q#WO/;p;pEZ'}ytU\>tqCWݣ|U>D>^z=S&=^rw\oz#{x9uZ6:ޖf~&4!g}g\mڦѓ=ŕv+]cWcG=bՒڵG=5uc^3[ޕ j7񾭹q&qa{z\GOO|·h4Y/pEqOGz]'_#u^zC?7>iWcWWϭ>Y/ e\*Gv^w@72 R'?8;c%ߓ~r:oۿ8П)g=8GQ?u\m-΍+/ =8We7.z=MdϹu%˾Hm5{d[qj3?w9b?zgc,ztUpBnL5.So츲5^oߐzd**qY[U=8~EϪOmuWE\qڠOܼC'}M!ʶ'園K凪evGsؗ0ρ>OkYZe}uЩ׉?j]Ƹrtv`':<7Z_:i/rΧG9="<_]u}W.w?coG8d;8'ޙ_;w7[GtKuw'?,N WsQn;nYӻ۾8d__\cM{$#>K=}G>zP/] jߎV<.|>Qoъ/^xzz6-ϊ޵}.<+vq~͢?з?w=Ue_*O~}Ikx뺾M<?~J]`=~g>dyo95qYtz`!d#{E/t{pƥ*;].;=\]~zn>#8_J%rWH^|+>\?v8.ٟWsFBw|On|-UCp]TCWﯯj>rH@ٙKU+ٝq\m^&ܗsNi͌k+^"AWg?$|=#\]nz=Uk<?Mg88usoL?=?]eݺ_-SaS1ܸY<Y[#DK-nץ+uOA_7>*_ȑv-8kǿgMzBM}KMf),v}KyeL|fg}{]7{m?}J}So{y_u6꺜n?Uv;n7w}ϣ{.^}}גv]YynIM\M^L_ї|m_s;YS:hͬuǿ?;wu 5P>u\{ӏE_i:*m9˯N;st"ϸ8@ŵz?RڳF?rC9y<3,\>L":c㟚7,1ϝާ3;=p瑯]W.~yrk},iyu>/NsZ^>k~ot2\qwׇp,i<8-ƻ_v>ǂkrΏ\`=Zw-~@۞m˺G[8n-^u:n:-ÊŮ%^iMϿi[SۛD׎O.s0W=7}=>յWyz?MSipuSy~p͹ 䁪#\}U}@rsfם)~## G>gYytn}n.[hxyZ[vz-'8:Tv܉SW}]z_Czs}{ޚ:7ۛS _ڷ73uv:[Y'WOmjbcל>:՟굻AՍ} Y]:YsvymM>~~}z'{j}w뺎}3KysP:E_;}nw Nc.T>{^>7.t<]k{>7OϷ?1t>>0.잫_ ߙ7G?<>g'/;AGh9]뺫֥Ycݟ>CГ~ːv?ϑvww-dvLK_gK_4Z|m?3_xvw|]NG>3~uvЗG>Ӷ}7~?7f~־BgqIOi;љkߺu[M8k#W?>uIPɃəwspů?>/w/|8ΉO˹ 5?vٿ.ݴ~7GNW>|~uHv?['|Wڼu˵Inty~[v^ {~7Kոqu};#|.֝|OnxrCtEG{f㷐줿̧/ H}>!ߋ)χn 뼚󤍳M=_8ZJ_gMqE<~.b_Nƒ%Gtr}o9u}~t:^W/9J{ nXoWYK{9w5?g/8yε#E?*qKJEw| v4ōᆜŷ_Ѻ?eSr!ϣ?#^r|+z7Q빕;~|TK ?-|鿜G}"-뫅_ߩvcŷ%O Κ='/WZ }ZwsIC?yIZ.#r3o΅k?C_;Wu.\=wf'ˮ_<+{_'| ;Kܼ'86n9us7t~x^(tykK}s9tu onNJn,t T/{2 ƅ[ _q_^_39Gu?4缹sr>Ŋ+X/zfֵ[+*w^¿f[so WRWòۃ;x>39)ʎ#> mNvySQ|vrw2^_耯suG㏜>;988? N^G;<SEo'Ki얬qm§:<{bw+?:ue_;(}_-yI\/r2M>!t?.u>y֫2/nYdsmpu>e?5|L⻎=O+`BDn%+Z2r<~_A y.]ypD j `l;ї3O녮{郞j>);…vc:WtSnrOrywy~sG^mC;.~wSqe2>zfKJKO}wG*7Er9rP!ni߶8;;n>7TlNjOv~Ӌw/g;>N-I3&rAO|.9u3|lϬ˥/JG軒sg٭|||v2 %~Vsc-G?G]la+?=A^ 'zG߸<Ξϖ;ב{Hwo~0ҬWzC:u~_Χ_WǯRD/z>F>m?^>'L/ 6:O 앮_hyN/}ƅ1_'Kr/}:,8QO4z$8D|%O'?7ߛ?zsrN_U؁ֻ:=~-r _ YGgšףF٩~t_^C'|G/VO纎oqo:RCwq Ak9s\ޏ=czu"W]>jp{:=ȇe}qrzo]뽍Z~Iw ~mҎ| }x_oY|K_Q_F-<= 4?v9Ϯ躒Z?Is}쾢K7WhݑɑՉ%8g>;֟<%G/f}ztBGJhI.3GeWu3 ]ڂΧ5C6]'vf]uUy~inp>_W=}n=g 5t'/_oBg>O\G߲? ×z }G^/ϷOm;Ɋ+Tn5~x2^xa7?d׭wUGGv\;;Ou&ueWmr~A??tGD z]fR3sΏ7<=V놟UQ멎Gd\y Oy0Qב8z:OQ>ᕋW}%g8eʯJ[veWqYuWοB| }Cnsַ'~~Wx9R\z>?e=d>qqLwp@F'6+b]!|Zo37xXU_gWUr:zDSNƕ}WS/˙g!>:-|!QO\/| >9>H?~c_]Ε^r ~n\D?rn#y;9qz'u#GvޯI7~e9>/״!W]_L%F7rƳ \ߟOأ5C—s];9jJ!9V1"ȇp~9in|Ǿy?)7ILۿʸU?WѲø߉WQIӯmUW|ĎrHz;];KU?xJ3~]so~?^ȣ4|;~\׸7vI}?^+||3~oۡ>uy22߲˂ׇ<G72_zR|O9Ѹb ^\/t]/h\}dΙym舏q7ֹSf}ogW^Yp?{%I]s%YGt Gt:Hp!?zqxGqnf(NFe\+~.D|-K|o~onpg7XvbƉ޽0uW9}Wo]ۊ\_ygq$|EO>!7#>?SHWצyցwƩ;苗we|.r~3Je~3i?VG}p peb]?H\!yZ.v&T}Ϲ:]^qk{Z~AtPV vN?gKf}zUe|p1'8?쿦rBru=}и{_G7FZi9uLC-8$'n+"G^-鷍+\+޿n4L΋o>f[x'ۧN'zWW}wǯ{ionv;¿bwb;G?#suy3*N2G:֍=֧=~}Y7D.po ɵcv0yGn|sOϻr~^xNɁ;nϧЉ=uWS]:NwӺ^2oIp{=<ߗ}C5_IO꟞7~ytчy?n:]z]~U3/rkg+oL'g~/=WvކMXoxAez٢|dowrt'oţ/Y87_vyOgEW_-[w|O.̎G==zc9ǖLO\/G3} >UZl:G:ɢW>>+:.{6Cqë*ξ-i߮o+eI8[v__WٍE~ݾZrD3̟xB'`{ln~Fdt:W찒W^? =z3N!/ə|;?к9Xrzw+:+O'/> yMYO]{0򝽉OO=ܢ p_wtna^{N3Meߓ3m7/\\CT#\R_3~!'<ܖo}~}|3);G[|5.K'޼w:?:?|YUopVy~Ӹeg_ }K>g|?/r?\7/}|﻾<~!ɹs ~$-9/y_`'%\c?9J߸ 3-?e!~g&G5O_z8Ŭ\_ߟO^/ Ao5I^v~:7cy.糓{C'oي'?y`Z?ҏX"G}v&\їms]mGg# <>[җ?uhuiʯËEo~Rˡ3j^"XGsSu ~ةƋ^OGX|AnOjo0ykg~r#~Du<Ǘ NquZq?=!/+?w+z~ڏC= o[xzu#]7p⓷:;O82^6B=,_"G[ZWσ[z2;pW];.i a=G#Uڹ~n3zFo>^au}"+J3 5{Ņܡ~n??(\Zqvr_nW艏*ȹv%==;|C#ٛQ'\?}j^]#~ g{:v:oɺ[$>[z?H/b/o\3;%g}볾1cw7|zK /;>aYOo{wّyn] :dlyLot=+zky{|'R9W~=?qY{|l86nrwO:B%?2g.\q^'|?G<@Oo_Wrh> ~s}3>B? ʾ,}\σ:3%ѭrow_ہq.}Nיuv|Bw?:3=c~m;ݿww~\Mܾ_LϞ2NJi\ٗBoT8[BnO_Wҷ\p Π_][o4Oρ qg=<׸oVWpl9wX5H>+}o~4?wz=vɻ}_<05pM^Ee-t8ue4NSK~}~[8n|$| no~#m|f٧k)0/zso_B}*?:fO1y9g<-/{3m;z5`[B??[qumԳǞ1or WC|fo.jԸ%ψ] Ϋzy//}yss>L^n~u=Cn7v]p7F\N7 y wkOmXzgqBn[' ??~p=WTd zڞxŻ}k?zy}ՙ럾?X~LJ/"\nAt*,;:=zpE|m\Mmp5t Q[zO+|lCwuhE:r2/|nW~x{e>̻NOov9<:N17?z/|ߝ읬q&OJ؁ÿ]Ϟ#uto|t\~IOKC>~5܁|EM~k>G2N8m/\{G}ƹ ~> \􅫶ȧ lh+rE:~]op22^2WƁ/ ],Y3nO#W~8v8b#>^ȯKEޣzv|H/=4W~ѕa>v(>|An?&uF7}Ts{S_أ>ߨ.ו?u|?ѯ#>%󅃫sぷ+q>+C/Yj^zu;їp$o3nbx}*C?YV#rϥk=?J+m9:}n߾6!W盃_|ώ+n# WONoE王f\(v -ےnp/OԼŒ$7^և7ζoۿ븊u4Ovt-~Q'(no>vZq >Vr?ⷝ[ |yrS\_~k\3=o|[9s^~Br'^#N}_ɬ֨"2xz뺾#Xy:?3Mq8_ۿ*~9רߓ_.A/4>ӏyx]o^cÎ/=>9k\/澅oW4_|7=#?șWJ=Y)د5^w/?N##|y ] <{>"'HͿp}{q!sգ/x~oCsJ+H_'mϏIױNsm }Vx'9J?s~?Tg +>gޟ_W_E5؝BKo/|?ZǞW~'W꾟{H+uO/+}{K}΁g^QEs|&:;"=W4z[2'~iZ:~^7N|}aw~U}=v5_D[|\ˮ^qu:}p웡krgbޖz3.mC8츤:[8u; cp(?HS|^=o7={<0>*rs۶gbW\/[z{Wo9szkvs9?~1O _3xk؛N9x+v䬓GÕu͏77?>_J%ti﹟+yd>9f\GNh;N扏:CM'yyTe{ܤC| Nƕ:y;[.|@/^? |[3->Pk oqeu}GndWGD.嗆/ZԱ }qS;>Gx*~W ӯd|-.wz<@,ypZGt>z_=Coh4|O/rnq͑GȺ|cc/+O^+,X!z+>'ɣnE{c ߒcC?N<|DۑA;ݲ._tܲ^"V݇6Z.#בa&Н/qX}{> ߽禸L :˼ۯ7^}_\z-;-1>_3?n`^5zE|1^Hm<ϸK{. }нpԥh٧Y+TH#3638z֙q ~ir=ge/ _s3{_uӿGT8]_l|):2xD߮u? 0oa'e\;yPE7{ Ɂx}O^XvBpxpj۞'eMW[pr~!#%=\/y_UKlpa>k_zx}_u>'7uq&N8#jC?,᷊FCxz4?\g6ǏGyaG%oSr|tq\Cu.|{.nv:|Bϲc;|݋B[%/uY/ w~Ƿ_\{o^p{M{~oRqIo>UgrU0SBoz}Knel#GQz{|Ϳsa}A?{v |GF.'>$'^]ޥ-?Yv9y ~G~AO<߭]-|E_񰣌ao\"V"\yr?sy xIy cf?ģ쪮_K?AWj>2O/'qטY>Utz9뱉.8.:fξ~>k!֭ ~b7kh\G;Zzvj jșс|$k\ƕ9/}x~c:3/wo~k;->>v>XE /^&q͟u _.O$_穞(=ӥ}3>#xk/C/ -^,z'F/?Ñy~gf}٭nڜGc?/#<&U&[ȕ;طb=z<0\ |krU^o3Y_[ÅG#o%ϋyJq>~;`\pɳxe/8cg}oKNyߐ7|rΌ[NrL4_5΃UWWKs 7;N8aE;<{+%_|Zw7t/=rI?~'|.j{_?\sѱ;}/_#7oMު_ZX|/%_N`7/ˏ먎ړ/xu} ˸3z}>ǿFz`uU§8W(l?qikx%Gq > x} W_3uήg7;}L}x.ϗp_@ jփa~p9LNZx~8[^+:?{hu 1 uƉnQJ{|8Y7gc }:Χ+<}82ѣmE#87Ӹʿ_GGu\k|go{x037h-eߔX8Lg77oAf?k;gqg(Uo3z8:i9#OyH3u;^~U'pz/*n'/IsWK>۶ȕyn'_I~}T}7N~g~f\_pz :F½g'.fp_ݒ;7W~߳+O\n Wc_W^e8H;8`~\/؛}N%sŗރG%^~]SL\<3u}u؃c瑇Oכu _8A?qpuŃggWϥgKϧ J<$|8>\7/븙??5^v t^]CǮJIa:㲞ď Wϋ?) > 8X8|ǟ3/Yէe#}-G#8їC'vUwտ K;\ew?1ˋiٗ:{˿/b7'G:/z8zuzzN;pTͷe{Wq 7onm?h\:Yg|J,n<;k??8!r>?:ͼ)kz/nQ6{naU_$׃h?h\}GmOr諥'>^~NCXq.(57Λ'YwܯU8~=>V8|8 O|3/\w٥e#|8^f=z_ D~6(Nr߸g|sե~{ÕċX8}iԻ>msO}\^,z'aXʣCrx}{)\4ri~\g/3{+uW|oܕq5Hg|es읪#\1~fOO?rz5QK vmɃ[nGpM4{\D?wcC}Sw<7\>[;<^q3_y>v߂[W'9= ??8wxALىe_9։o$_Sup.]HԼ{!t5^8]Zowx?Ǝۺ8\:v5'vB od׍GoqްN/F_v4)Ta7v =χw녇wq?n]+' >Tyb8.<ۮlq9+CgyOzv^:hb[Nw>\yOPyOpp*;Oˎ=oӶ0??v\|_s9ubߑO2#7Or@٧2@'reo>gK%¯#] 8-8qsj_fW(=r?yY7:Kڮ~[z|_qYyCbo=} ُ5|rG!; Y?^*~\<qsv]&?G .\bNZY/- ڧv*^o/|guv_Ojt$[g8: >}#}tٮ֏ϔ|pFx?ҿe_E~s:N0c/|Dngp5eO>'߰y':$z9o_-]Wgc1i+냣'?1OĿ\.t~};ye]~ط0hё=߹nW/-\=:miypF.=[bߞ,({'у\2cWcY7ȿ{hoYwtܤ ϼٺ.~"ڟԹuWFg"7œ+ W/ni%]|h9g?玷'n`ʹO|[V|/~fF?Z&d!WZw|a=WDw?:l{~MUqesK묃 W?}^Gkx/ yзX<~ʾ0U}.wgph<Ͽ?0ox}%zK,{r}U}CۿW/>wKMGK? :l<~ceuO=o_Q3-r>=Ss?4][7G\C?py7Tr"~7_uj ?.穸8hw?C֏~fZ|z_(Cwv8>қOmyy>3;ܵ]N=g|:剹\v?<3џWq#u^QJt)uR]~/\%}~wܮS5.r9Nl\=[z$np5KܢΉ%w ?_s޷!N1׉_;gm\gpc\W=?+< w[\_ǹqWg׬<;K+9MȦt6-uw +ID8q`eYBK1clS@a6T$^^9~Wi^~s~Y5>ij}xƸ{skK;{㯳8lk~>NpR?qyz_q+[w}c})=t:> xL[:W8ĿQKx7_:|?zu<տ'7AOkeGt|xv-y8Iv%Ǚ<w߯^l9\g}}-ԧ|'[?guSOZ'zCK8wO/gOɊVs֣Fvݟ|=8-97擞Ӓ ??? &?]7{]rL({ql71[o޶XǹVޡyp]ϯe>8_!8ovռ:\U<ٿvpp<=ov=SUKG}-_ǿr{U׮izGZ;{T.}|޺F G3\{TUn\E/{7[Y^\N]#я+'^4ڕ3~~k7l^~~wwk8[ڭp>sksۙO|csonquO#?{?z+0A({<[epv~MouJmOuR/`|ly -c;y~~C]Wuor}A;ޕ]2w֣]yO;ϙΣ3?۟îڞi;۩|~}=g׿)ނ=Ssy]bo֎N[==;y)wW=dwo.ݧϡΛ\5=z\K-<M쏫}\va^= Y{qQnV\+grm^W׽/ݟ{\3ڧk˧^zFw\>_S/=zוwzz{>xNnkqEq&u]_Wא<|VWn'}kU?<.u9SsxO륎^?ROuM?΃?; Gc?ȭW_H[mWS'j:WA _N+W|9>:O|/FN{ÿwmS3|?R_Jዑ/#7_˛_ѯ2-?~;ԫ}+uJ}ZO}ݷS/o?{_:^Odu<܎L{A_;{Nʓ,v=#Y9~0m}ɓ򛏋+s}߮z)묾/dƮNơm?}|uoscyYZxX*^4C%Onox#8D#^8镏=W??}j?7<;CZyÇ]HKXoT=l=Sǥ-<>ӚumZj߬{.TO"mwܷ5Lˋ:Ow\Wc>y\_{EϼuÙ;Ý=oCO>z\W%}ɭw'}^:Ag:'fɹ#ܭyyׇ=?Hn8>{5Q*zpuxgyL?#\m|=˃ HzۺNɋ|YO?O;.gW7/sqwq5}-.s~b>*o/W︐~;x:.K\\eݻ^\;mpU;ɯLF˿q? [;%yx ί<8-<ǮzR\䍝puf-Osy{V>~u\}p=v-Jk>~sǭQr|3?ר}=Mj$~s]ݏ]Z28ksà \f*|?N= Wl}N<32ԇo@Y<|Mq2{y|P8vx1\ _=|/kg<3iq_wx %;čxύ§<$[ܶ8S透gǞ4/?QHqrG~Sco6 W'xo|kzCpռs~WǴJu OqX-yV?y3ulw>NyOp`|ثڕ[NԪ;=i晟 ~-A2B<5~8NUpn➎u`ɹvx?דCSCC?/2n_eSwA_?{ǯF }] \I\W։/Gw'?Go?̸:iky|嵖'?ޯ"ԵΏ=vپT?|%raݯy?7$xI_F/h^/rGAy O/|7?7?'x38krq+Gx_0oR.Gm\u :/E/z:q/O\%~\;wU׸z?xwwgWG;<!_9Y\.<҇rhˡ!rN_\>inQ#։p?=?.w6˸A/?O{ 5u? mO:poaGIGE {e=9Go/{ \*yJWZᡮl/ϥn=g_#yM?|2W$)rg?n*ɁT?>u=7}^{_M?uky:Uoy;ϸ##/{Mug}w)}y۸K'xӟ%Jo~ֹ_?ӿ*f3koM}5WII-oqu??nC;GOxP\|7zuHCM'xqN]zqEU/s{]W߬xO&Ƿ?gq/}E}QS8xD?g^W뜮':`up]Jv-}˫ϖߣ^ySGkV+?P;`8*|K[#.Gc+>Q} /3.WU8h h_Ϗ!QO،#|4yϩd7yOnGu%r\i/ =A/oY⯭zx~e' X

8u=EGjc]O->/3ͼl;r|秞7Ϗ?:؃Ž'߮~{//?Y?`UlE%e'[__;'^aF_4~m󼙷??#巊\_OȇxY_?ԣMO%.}O3;3({T;Wázw+{$=z4:8yC%qBxOvy#W2/bk2}߳?xWFޖp= <[}8N+'WwIÊq|ys>$o:S<ߘ3N8YZ\YxI]q[~;IǤe=yqU.֯a2^yˎ**"Xyں?⥸b~'{4 |2=w3cz_#8}2bw79Yy~B*||=}vN;o#{K3G/SX#\?FgZނ7??wy:q{:~yV_x܈j߯#O7k`?>rƯZS_vL}w,qqp8D c^'/VqU?Şҗ?p!vGكx#ŕ}6c" %E}3zڭGYAȋ~o^vO[7eݓt?a6`x -{zaC9gGmfl؟ol5ŗ x/q v 198ᨼV=z(ׅ鋫ȃt};u/0y'nbGwXNG揾^qX? }WC_]7Wy/U73o{7=bd0zåڬ}6_FuU_:#ӓS^%? 7e` zzƕpE/s/>'=ÿ^3/S'im}HB,|x/r.x^uÏ-ͯN"?F_g|g}{^1 ߇8g]ucJs=_e䝞y=+7yUy7vyYOyg_|&8ᇖgWcw.'lxu?z[?1yXǮ+d>ݗd L\MnW_f/Ey)mzJ"ڕ:%u~ˉO"jV{gvi7OScoSg/(o0W<ߣ_;Z?ОPgN /\>YΟxc?6=6³/oQ\׵/:~ {Uǚx W-S}ק>W^8uk:KZL^.߮Yug}cbv=A𤸚u'4 )+uk9[?;.pu/Ww+']U߶~`C-O5:O7=zupRO)~fy*z]r*8^^`_pgz\uq5xq:1P\}+ n:mu[~jk?a~Du]gŎ?#G^| jA˳޿v 9%7Cey\WV^+>3n=+}]gkǛgv,{7z>8f慿Θ/yCDȯgZ׀okvt~*v>˞W^/|V oT.g~Owxk\oaEo\wrۼ7[9^ޕ5}7rO8P*vk+y8[~e[/wG8~Y}0Q^g~>e㧪#0/ƃ/<;C_Fϱ.ra/ rC| җs^q wg6^p]3x _vxq!]o©9/o}Yߓ|z[4៩b]v|q1m}qEUl<|q^93'_u}zu3+8/2NM?=vV=!6ynuַw}~N[>q:9~ |CK3瓏,DZϿ:\K\ O{ Ws; gfj^6{PG '_Ʌ([yw3Z?1EV'"?W vkguO\AcOc=zmv7eܹ*~[Z|glމ~x)kxUzUg'3p}ЮۗJo<:Kth<p6I)O'"W|Y{Wr5/ՙ],OB[ Y_O^'~vCZ_<乬 ?OV|MzK:qqXr 'x4rWs;['}ߍv?r+l\NdkڧMۡ3/no4[|Lp Wo>glWx(g~[w&7KpDoLY]A~>ݸK[c 'C MB<<*Wy/Ux'%{0o_7?yc?wK۽/ ^ړ3~qCȉxm\_. Ŀ0⢮'uZ:mwcVy~z^kyyvz ٺ4ޫ~ݑW.oNAy3|/n1rgkjCGNj׮̯~y6x/{@2x]|=r\O.@5z?c}O C~1_3v#7ig>f'O$uW8W7lzʸj&Qþ8CN`3|{[g¿xzɑߒ,⯲Wp&^>V~=y}?xo??gy1xs\ =_y v/BK_G~hkAv-'zX|gĉ?{ƒ8  1޽ٝ_zԸxDuZ*pc}W=<)~|V7i.W9i}?Gl} __ 1ubX]yW}y]?:{q;;f=ڧۏ4zbw"ϭ :8z&_O=kyګ.yW0ߋkԵ[In6ni9G]~M[ 3||༧:oxǶNy^0m<]z z}4@L\:>(?ÿyjAm3o}&]'OFO> uwMQ{>7e8s7>$zv8>&η/u_:GOu pq6\qwWpS Nowo![Wx~|CM׿6qx/S;N~4 9\٭~`W|ų·[Mޟ7&Ŷ#~κGn y/xp3~!gWa8{K-nnWO\s~FpUe~/^UQǯ/y{Ϛ8fyʷɳ:ڛ;oZ;Rى?~Ox kp%^7Yb?U{jnO?~O_Wa?~cw 8$_ypzدI[ߺgWx?v&'g᎟0p7`5n|"|xo->(ux`zVIݞ|wmxz/xt؅zr<HbLĉIW\ѩ0?p+s\M|Eʳ?k.ov/w}uENoE< G~9|o9['wlٮ_=#:G߸&8D<6اʬ4kv}gs^uQOxnuq;)o,8¾jWzѾRةOs\\?Gn~ .}xŵZ|[U@\s9\ DU}8 D!Uf^};Ce+uz._<٩y<֕y~J^qAix.8f4;Uώ'yjX?sK;擟8\fͺs}}a?^uNo}nl~SGO!??=@_ /p4|uÿ9<Gm;^W՟p^}> ~WUx>oo~Wȣ({w߈1u 3F zW?v=c>=| Wp%ޢVo WZ[G?㟟6>p5ϓ7/y5oU4Fqx=4 _U?>F-\f?̏}ծS?b=y]_ou]~w?b>o_Y^ZB< ή8;~?{t_'wѧa +|h}$\\$7KEG;g=V+غξM]qȻqep/y>no(2˳yOW]ߞZ'_?#O׳+}e=%?݅'ב'/S<}:ykOޝ:[G/%/ā Z\.kcO??y>I\mGߛy'OZfG|E{g ]_z[o\^MpU93P7?/˿:hṧtcxϡ]9 ݏ}r]~xpk[zq"M\Q?)ve/q/:#|1 Ws=y}oӦ/f };y+uA߱gq{Wx|rsvSvmћ2oFnɕ}kOEq5(k]:\?wފ7J>x7_}>??ύǯȱzvE ?}}_xv\B|z]u}:롖G_ͼl(|ȇxB~Y%6:~7_ȕ nR]ṭ_\S{_݂8gDYqooO}#֡ZW1/AG#J='u}>~Sw5z_ “ϾQO>Coba5?|OmW0ˣ!u]l]'uNq6C :?iI}} 9b/Vk^-ay yf|18/]$x7ѿz6 Os~7n҇gCv?ڟ~:&vW'-\X_)A \sGç1yfz!-B^mG¼ru֣DO.§8+'_7ŭ;|<\Nqr]{nyS 1?I7)=-98NރW E~j=RX~C<Wx\{N~ 9Oģ8c\>sR8ppvﻼ;< !<}#^;?֝?D=< >'GM\]>0udy'mc"oOޭu{-A䎿{goHݢȟ;ZԮ/G`SGu{<?E_'W\=/o];| n|\CۥmsU_)x2..H^S yI؟?zGki>k'(1*>?σ5|!c>O+-\7~l.짒~i/˾ˣO/Wvr,;gGΑor_yavjSW"+_zbw~t oWv;]?[jϧWw_;W?/:cO~V;E.*Wy>[B\ljiGv&~ny>?֯%G#pC;?[?9c={Z#\Wc}cYދ~WX}Nߏ7}iCvFDGy]0esM\kmy=Ÿszx_y|⽧d/ݳ+. |; f>2W~YXq3Ϧ^<O<9o:B[Oq{ʸ2GcٷztuOȟi]hN7p%>g\#_M?!=sʋds+1u뀓prU=N<׮Slz"{?^^0*7;u?|gnwy*8o|;|aN0qʞpv_+ڗr7N'y. N~qm}_#.<:of'a'ʳd%xލl}V~M<)/_xq*yƷ ? Wu𲛧%l/*ę/cW79/#Dv_ɞ9~)ke=}@7;M}\w"ogwcp%yط_(NNe68vU>됷.W쒼U~Wg=;? OX;k?C⇖g+uZ:)4_bv?z^yg3}~#~Rgo07M}%c?wG]2y]8z\~fIxqrǸ?2>m"v^Ye=Gw,O_(U*-懭Y:Gzu KA_>Uq]pO$k)<<#Ky{>c: _KS{uYgs:< LܫWWp蜏aƍh췍+E{aO]T=pڸgsX?uٲSߴ8Nxg\3uH:~vc;/AT.#z?x@1v>6[5|vfOZg\%}ǬS~M} WƫxʹǷb=b`߬>6gM޷q7<IZ[Ώg&n*[72?I[u^v-_%~r[vI+ Oh]W/}x=gߙ߻oL;ռ+vސ|~۰#˷;N᫼ue_GkOpu]<WY?͎zrNo7|}WBv= ~k>t oajsxQ}y]_\D1FӖqXST?P/~>B+uS}j#W'0LNxv8<<c&odƝtK7 |ӬMx7q-]߻u<|)狻+i ?q<ʃN:ڧ\+s+\c~9o+Gx:n_xxͺye|a{?/N\<|gQ|>l;߭doYS_XܒS86zU/f>6 q6||Oz?xվ[O\o].H4`o{O+;i]o:|=~=OƑ4.uZ~q[\?/S;.!l? +zH?o'~$-܊ ^ 9w<߭dogo}sצ~s:kl䮇<;ǧO{eω*맻.q N6}/|ߋ﫷 ^Ի/U?#C=},RG?u'|>͎q?NAw=~ ~^pꀫ\>W߂~^W9{3MQ_>'/gwL~ɭo.'䃞^#ȏa[|=nl{_r<~c>{Ϲq9qw}߳W?ۊKKa|K%yvCh}wt[G;Wy>[߷ ?S}ZLߋ7J{mׇݏKFپO/bӚyIO'^c<sv~xyMև?ik_k57zw}%Nү~C_ԓ B_~Smi/:{=@9=o[2'lqGo+?~:nd>ڞrxeNn娼}(_=BߎzY?+gKz3w;Oڮ8'^UNOGǕ]s8{Ot=s%}qfW=g_}{޷}{޷}{޷}{޷}{޷}{޷}{"yiXN}wzojx=_Sc=+\>=i;ccZ{mywEugyj';Yp'&k~A~}Zϳ=o9wc?٬wޛ>ue8뗭Ǵ~gݧ*Ku?4d);nűW}8JeznW/1}<?~\4~ϻ|9og3+/{ݯ~0߇~Oاc"}b~/.]Jw?a˶bLe ^D~Ƌ_ݏ5t?Ko~?Wzs W :xka_<=|wk̃q>c|Ow2O?=wrwFoۗy{U\E:yψp~x:Ýv{8>j>3$>7M rLU|o y_O:.v _ޛqz-v(-`##u㆏m\ zn|iHک3{8u]/ߜs_Ko/Y9%\Xd=bfIeK{oL9~e~82ݗ_ ~~/2;3̻q3\ewz^/}9̾WI2_^!r]Wq.}y!~Zǃ~q|#zjcwۉ{xveIPLrpWcc''~郃m\]9^|w_ޒ3sU<=)~7Mm>/x;g~Y\K{ol|~W^.Mk*v{Oǧ]j5y4/OƟ997|7h/0vEC/FԼW_*~Ut]\i_[5[ @?<%>.uGGGΊ;vCe =.=%~^R{G?gГ|w<|^SqL+8_=|?y޷qgxZ[Gi?oF͏..qx ԑn7yE+秼^y;^<u׭뀏ګ!|7#}quŕzdr v/tߖ8 /~1{\\ſ!wz?;WwBM+|M͂+.L9<﫹)>P3?J~c߬7]|Oaϋ\Ş_?[CT'`.!?n7_ոOb};:Ŗg]Sx:;Zu%8^JvG>˙O8 ^_!‡_w|~ij?2OGO|S=IE~~sp/SxwG{=' <&_xiWe|O>2y ǹ^Ȼ:ǗbߓuÑov_pe~Ň[?G֧#ڸjyaMWټo_^Hܨer־gACmg/?b_393n/?_գ9gr}~0{~x)?dqEϭK3|?z>-ߔyB;rǜ} xGG;밋~;+ca^Y?_q)_2Tr/!y%ec{ W{'=ԗ_r=%W|cy oz?|:N33Oڋؙ37~9&_XpywU/,'K:Ƈܓz3.Ms_Wg2`x_2^<|S%ޢQ˯-\grS-\ipEӵ>!Oo%6Ui[('N';8npeurG7_ko~a_>m{?z*KƏi+HN~G ]wq1|,Woyw_Q4ȓ8g7O_{=|_ַ~һu+~]<7f%~Go^?⬮vky}y{÷qz%/ OK;q۸j|ȃ:0~xO|:^?-R1zߴ_x>/z=c_r _xxkc<?'MGS&?1{z~[o|umyïI g+|\y N',on逫&_-/4v6?e5_GF_[}+kk+QgrN> ?%΄+璷_~}+9,->n[^s<ߺ8 w-U24oڮ׏''[,X߂oRgዚsgk8H1qz Iax,/?x&O규x~G<~=[usێkO= ?|R~'ߘc&θ?6C_zjh5s3gOyƗwb-oD7츼WswH[/m^C=87ǹsFgb'79zW=vg b~ >}E|KWe|]o?''[y#^ݛ '{8!YyO_]St+I^ Q?$o|'}=~'up%яC=,3+u@+k)~Ӹk<ē{q䗽kmɟ)TūJ|U//a_ кwÑk7pdw?p78 ^/_vwOmo_]|/WG:|U<?8%\_yz?[g~}fIopEލ_y^~Ko_.cy 哊7wm_ _]|K#.p]u'g8Ю:Goj㭱>GݔߵWnȑ?D\O7ʼ <7{%NؼHq''^\y]|ݬ;rIn͇qӮWo;x}_>p9~St3zջoV!4oA\zzqIG|w:jyzƟ­58X}Gv} { _A`i*P\~1'~0G-t]sϙݚSڿ~wPT}Y#?kR~븊]|DX~q5خ#5sro|YϺ<‹ϞwvbuxGޑ}U_@/qTR{0j6/x[?!'}3;Վa̓9\?#AOo!oW<ׇ#Ͽ8=jF>wp~/wqqY</Tg!j$x艭#'rɞsEom~7W'|ɓl~q"7#/_i]} 9|Gvpug/OӾ̛3?%f'+['xNr!u'~'?|Xqyμe엺t&r./K;ۈ~m}^g&o|WkǶpluo>U-MUc*|`qEMƿy'ϼãYgy~u%/Ls?v+q ˷Ϻ0\/r rx?i /gWvtՇY,m/W,/%^C|̯}Lwî }*⓻{~ǂ߻u\6~Wuv?~|y~'?(O|V7?˄[r[>3<M^_K|CuțQguO3c3xQPZ|T 7·[>)ȣ{Z{3 W o(O[/nx{#?̟`NlPWǖ'uɵgs=tqw/ VW[{"7xPc W\C-ׁomW4>P7%ry܇&OX6-/~8Oyn~l>ݯ<=^~p}wc<<}t㇇QM;o2 ߗ'w+< 0p{O?/Φr1y#>lyw=W^#Ņ寥?z*_z\_;\yA'aTQ=)v7_o_'nџS ~LqWϾk]蹶'M,Vq3N>2dW }97H>fߛJW! 9[v y7շU~xΟ^z:øg*؟f^+c揟xWj|y+dx4?gy׿'~G|?.?.Ưgٙ,_>kx2z OmF)Wouxi%< =gC ;G)Kp'_dG/[|fgi{ W'|iڥYxx~nߚncOK~v&Zy'g3^bTk<߯s#_8O$/Y{0ş])_?pu _7x3߾및~;a<rѸ3W׍C{x/Eb[}WL~ovn/7./⯷N.B?7I%~_ : 3Z 繌;D{kzDo x$f1]4w~G=Z~Ծc *O ~y3pt7/8[\hNQ)ρ7(aAL=qlⷕm~^lkrug~v~'RcUT\KLq+|A?-i$>м:򊗌[Qqԡn WC[n#my [+.݈}߂/ ~RǾgIoӻ~ﵧ?ή_3n>7>o,~!ސ{QK~_ț:/~v]ƇIs^8~8}k̃xK9qTU'%CGWNE+==7'{5u:O Wͻh]g10qyI[;|o.>z~Sp+|m٩3\K6t]o Wg|{_r;A5YvuEOs\;.`CwuxቬO>oaopTC=xU:&>|8G3^)jZjnA?w,{~xGbT>g}<T?Suvoy]wm=[>U_HovVnW-WꪼUk0CސMܵ[=RxWtX_#E߶~jᏪ|G (';kg] Mȍf?=\WrgZWݏ^۸uI.G}WӮ:SW o>g߇Xg}꩑g^v_cwߵC~޹*g7Un~ɓ-(<7ugJ[KgIq|Y=ms/svMިze7`_Eߒ/5Qzk8o݌;~;gS6U?+z~"?W\5ٗ j2_[Uǭcga6 }n]r"=INZu%zF[pKo{?+ߜ>ݟjn~bpG/g2_ρ:Aquÿy޴?~&?ʮȥP~>%\_0CûS+sߋ>?x %<+NLkvw+3Mtݿxmsp]إ=/KWՑ_}H:?+ޒ=<7?h~:|gW+'ox]~-{M>[l^q'pqzoC;MwG^J[9N~ _?uL.8~Z?X*8; W+'q:#nV/X0%Y}\+%.\S^w=6>o#n`S 7x򧣧v]{/m>Y_gܷGy*|ὅ;gxzR9ʯ+ٿyAyNC?.<㔟8݌`4},fW K?up5y r|-Ux3u+ԛ—|Z>Gta>j\n^=AP'/ݮm]<0 \c[<%{%^g W"<|?~ap)uFÿM鱏JouѵY8?;O[;~uz }OiW^x H.U\|nurB#:cU;[/˺ }y۳q||n1S<଻bǖt>u2'rS:'yP{ճ_/ނ^\2~0eEM!p^~L.>0j@vv7o&^_5rwrś<qqyg,&j>\C⏸}d7>b\mᮣo]['~&#<~K\_}FWO _rO2?_Yj}xAέ?S>}o|L?Ƀ?wC~)^z{;;Q/wmE?;5X1-4/>xx1v[qp]yz)vW#y7U~:;f~9kSƕT=e\oY=g]{E)OelNvQ9'%kswHq:^l녜77r}z>~ ~~6U1?y"3>v3vlxJܺ+vD]yyӮߕyw,_{>.ŏվy˛^F#9w_b_}JAv~ނ_\`fgcl?>6<'ryً|W[+cOs=mݩ=.i]}>7GݧfI?\aum&P_߃/~o|^o{\»ox/_b]A7~k]-|Gq<)x x叧Ŏ~z g+:X/O|WwNv%y9֋o=N㟺kz,o#ǛG<:޽.ϞOy[tv8+\~Ux ?/pCn ^ٵ3Gl]i~uyƋb/^~ Ww=>̇Z W^k ?:K},>:|[axls$. apU~WwOJC\~?w"]\ .ڡ֧W縊 _xk#0W*Nj}`&8Կk8})).=8;r!*_~g|v=[#Õ]xℽm%0_ޖ?ow_Ήv?_]=N>oq o8+qZ'Co'f77gpF,38:U8u C? W~m*=q4k<=vg﯑_94w~m3|4Z>p+wOx[#<7v';u_&,g~(\o ?ppu:A[ԥ//e|{6}s޳Zqxŕ?uy~ŕk3!䉝:s%v-OO6>~ǻN#%U{xWoٯ{6nۡkʼl%?M٫o#-w?]7׺W['*ܑuDp>wW/Ÿ~¡c׽3\σ+z=my~US[_wBÓ8F x麔wq1yp?[_O8GD|yW[?[1;'W׼fy U˙=z ?[gίzWO_ O^<?c?x:K;W?uM[=:}g/: /~]2v}o+U#BvGwNp"?izx.pK~ҸW׷_k.K :gu3m~xy vAº vfwG#w}؇s_1\x|W-Oz+OU.]yBu7.pc*8U.{oe?壾>TW?^)S}#C7<[-u&P{Zz}nSC=4"Gx&qKӳV[9q|z@׺~Zdg:]?>/cOk<}9KrvsZxx}N. Pky uoZ>~W//W!ԻA6>?9Ccq34"OWu'?W|Έ p=S@Y{WK~x?8uדgp񷎛W);n(~?;r7!y!υw)?<ٝ:xq8suWCOOk8uqpWj_wf˿|=zA`wmM}u 7=w[V6ފ_~Vc7W< gտ 99O6&.{_hC|x x{Kïo ~+\ u O{n5~uHWqv^?C\MZٛ]|:_pR\zxbr_uF+ꇸ v#.n_?y^?U'xG9_?'-үgqhr|\)ȻycIGg~~;_orYa]9=X^@<}Ccw^p]'{x}xwm{te\΃T_y˧l]ơ=}ī~P6|Vw}(~y$ڽ>'c{ '\gfvz9#Ϳǹꁵ'+iysS-藺~_OY^c=kww7lW'9k^>;ط} ?Ở<[#߷'r#~j\eXqXWٯωK|iŁqύxRy'~oya8|# [K25ضC;}#W|!Hu\m]o~j5=ގםMW}Kל%|]wgW74/OO~ _Wz;ryWrR_o|gy?J%>t :f=O>wjo>qoՃ~O>:|1'_1zuf։ZY?6cswtn?{j֗ ]?{^[De?ȩwOƣ랳hZ7u:ݧ뮳^оgzq/GzoYk,녭/NkĶYkKvֿ=3ηOgN6kǽ}w_vpc_}c_žg~q/4{/"~)7#qGh?$/c~>Sּ_vyQ_"w>by#lߎݯir|m#Ugw?[{뎿@ pjx1WҏevZ9XF>}iӓ>7o>Z}vճڽ?}9Wƻ͟E~ߜs~8y\7Siq\w?m;{n~=7A_M-W$s}?>7g,]ۿd[,!>Sm糸絃'w_a?\OZ:{vk_(BoC{y#vqd\}_}>Xާ踶HO<|V?<~Kl?n?|>k_˾![{u'=@ߚ?q,>msS_vg~y}l|!_8ņ^g\o~;_z|&S"Nڝm[Y_&qo/o!OCqOm+*^gɱ_[c~7r_ӟ' |g?SWPW~>f<ܟx6>[~^#svps#~l;s03pQ<ů^"~boͻ8OWyx"(mt^9Y?}S`^|Ra3\eNo^OmͿߋ䷋Kxo<)ry_~)>zZ~>zk'7gq۩ŕ*C/ܞ 8[;w,WGߊ7zu+[G|د-n Wi_x~2vzy/7=.qq5q pAkw:~GHvnu5h v*x.+o} xk9=ϔ=_x W'(1o\?I?}z䯼~`jUx iom!vyJ. xJ>/=)}{45jx|狫}}Wǥy'x C~ߓjq64O'wcث/,>#&?)!? ?/#ॼ_~1gl^[>.?.^Δyʸ?|Wy>innW7 WxNޗmEldǖǞɷgV}\Sa2=xjݓGo/\m >\xouI:rOY/c^ӫgqG; yPkOv{WAAʇ8a=Խ帾.kyw#E2w W'RS5eү=S'+|&\w1D/U>ԙfnuj3=~ZG'OgʼnxL\г4z,~f;IIx+|xf],bgȏ(k\ {qE3+\7rngz$rU6uAs?v5y^׼G kpeOy_OǍ7,POV~0 2|wg}?-#:y_2o_C/EI^6xO |6_uGҿWH?l͇ܩ;̷lg^6G/rO@Pp]W̳qc+bz>絛t_q'8{^~WO]`%UO٧YP=7>0߭;y3qT|&q?,, ?D~|yܺ=v#~_o#+RG=#=w]v9i++wy CZqNSǻq*}p;\yGbHܻqy_3zE?Ɲ/-?Q{Y>%r}o{gȝxuqewkr͇m|[~p]ӗ[c^Cy$S/غJj Wg~>{%^ݼF몇'_^lfh٫ӳ~WSO/yQxċzw'~׸Z| ~'g8nԽӳ;?k}ۖ3%u:= O/e.! GÏej%qRpEO_z:?^kSo׷/W=端yupE_;E;NۏB?[}go䍿:zK~+<9Q//dg?9ƃQwv Wp\g{uK_?SW߼m\m~._Gpe\nOԲ/gbgKWy$oڼY}_Y~ΑWv'޺"v$zxOv8hyoyx.iNM>@?7gWd;qxN5~b)>w=s˼/|9wwx '7uF:?/, ~_p}"7US]ވy,!.67~y-h]^~+oA #xxL?>;Uqh+%J_7/6=dVz[ʯoҬnӬ :wv~wwkv/o*>L̛ӖO~ĮzE먓;_]}~ۮ+# R9NG‡~毌g|+?lqU :Wɹx|)WxAEp ӿY28w{yzJ|mU2uISžCm7}oPͺuޖ} qWU,;c|7q"a4?~aĞA!q/9jdLSÂ+n_|u7/ Wrxp1j')<7=Jny$}G언MWA?/W_?om{I/?|cfopY>fwKsG^/q{>V9w\oJWFt+{s=K^W4o}/uݻ_>rp9||7oyyKzxi[8?o;<{Iq5~ۯWx~;2F/(^b_/\ wo“/) Hp vho~vC7ꕺ_Zg~s?W͟VfqLq=y?6rzal= *r\=7ŏ[?#}=8r=~K빍wHx]o?~[NUím{s'T^>t=xO;¬g˛o WZcħ7f/\v|⿗[q͗x`p!8c܇6oݑ{sWԽ鎫qx݂y/~(#}F f+~`M!տ0{ſY{ʸ}ʼn!-}78ⷼƾh~ʃL~q* `wĩlH^o[=3p{@~+~c*8jE2.xsw/r}S|aOڳ-Z?r+zھ[!u~[??/=c//<-onɱ}p|uM> hg+\ozW]b_aomO>|o:0@] ?jG/~ɣK<'\ga=^ohB~C]+.2nz/7W0ގ/G8ys\Ebƿo üЛSus{FOo_.<-M#/'?#= >o}gwMV~iS7S_?xwP\l<#^t]?7R'N?_8_};q kx/>gCz/A,NoݿqSW5z7AGџ ':'~Q?S=7d<'q};OmAnɋz<8,̼l^z~axǎ3~~{_/Ϳz׭Óc8m@_y!Ǝȣ~Kxpo>K9]tޜy2/` ?=; ԙ޼ux)QJՃ{O]wnv<տ_moׯ;O?ꌯ[ZD?̸^6vO2Qr^?u%wm\Po{۸ނ~/UEW<X<p5n?>\;\?wyOg}/>l}oMTwΛ؁'mC/ko"||~=zl\e<puG5Z:*.edžZN)/i~/^/һF8w~x|ԽT+<Zo(#;Pjgƍ&_]o2&F{G_mqqۋWQ\wmOɼWy5cZ_..}k\~F{r9&Oq8KOϮ^;p]?{/@mXǼOﻞ)H^^\W+Y}W&E\?y5|ŮߘGcmxQ#x/q{\5oӏO|~̓M>: 됧A'W7u./냷ͫq#OWug-q3P=^{ѥ7]mH7qhuI:]'O Iu2}Yp֏O!|];tϬ3O ~߻!\+ɏxJpK8;mp8<OE []:̯^~B} }lٝ/iv!ד{ک~vEoe>4!ގ{O꬏\9s_>wƅ^֩bOm'놻,o]<\>=?ȍ8\=nG\?\Gn _ӭ* 0^}oW7ߍgxvu}F~-+UuȿzYܳq9v?;-Ƒ_w}ǏGvOu۸u~73kquqnfZ6a>'aU9x_O`<MtyG^˸7ίu=.k(pse܏_b+q؝*q!,ɑK]!\_sj9u|ډ~OLoS&=LϒK#OveA"\v nsji3}_y=>aw}ϒVgѼ"gg*7϶ŕ%Woo}ώkHkx?qů,vq5zU#"Nj7 o`8Z W<>3/ /7Z쵸{KեWl{\/51Oxשh/qk|Wo':c~:$KĹ?I [!Nߍ\W'o'ϯ+o\ȼ 3Cܼq޿/yO;p.4_u(7ޭ{+>Wծԅ8_z.>Wy_|oLVo~uc7~ {Vp|!gI}~W'u˺Yw_U9Ʈ S7up= 3q+K/"^Ǩ'מ9;׃czʽnN{]\g^Nos^}.?gų& _>.X¾?=>2〫>_u74}e?kknYſnᆝ+w?ή?<\=U7ɟ-g3W3Ϗp| {z#z}uϵ})~_"ϻ3\M|?_y/>_uzGbKwV/ɿO?8#_W?7]UbQ_=+~O7c'~ ~Ngݟbc:[M}/ߠ_qq|y`Ưu5|ѡ>y ~ Taw<g _n3yߟ58_&nY-&>}.jy^ k8gӳ~:Gj?Mxe\od]Z<&0<xW?7;us_|;y7Gc]*r.ೆ+r^-M;Cr3a^:wW~^_N]k׾S+%_Ŀ o6~eq~ީ ÉK;N.zkou?/.ci#>޿q}=|Od79Ε/R'`g\Ώ.n?zoʻګ|pE#gc<6-u]'"q}qAyo= Կz ~aME׎3^QW8z>v^%_ӷNDjgQ?f]WgWۏd>??S מO|`8R%_gٻ79Uy|{8cy߾ׅ*;goGup_kI\55Vh_ "{R'si*߿]pE_6Ξu6n:%G`W]o_Op\#>r9",s?=z<_?^\~|m3ƞy7nfܝO?xWNqs큏^?^})~؏7YOO }T'.g?5v S7ȯY> )?l9~?s?v>[ `|GÙ_Ϗ_#M}&uO(iJߛ}KO[q?K_.^'_׻+q'ύr>>G^9˱ⲭSOGxǽ%磊<BmWynQO n~aZu[.opBȽ{#{//~};o_WW.x|Sox'}{Zq; އ<;84peu\֙}YY}#;`)\~G? yOw${G!]߮#pq>Kɓ8%<?C??|uuWs]/l粿FWsl=Ҳ}'# No~>YM܅&G} я3~/3}o;ؗ~<./!gFAyܾ9 >2p"͸O~=93:kmc7Nj6[Gq!x}So8''L>=}?qxwg|yNxb_S}ԷsOƾK_Ugkypyb5+AZ=z_#!&1d7z3;~\XC}nęirAnwp%o W],ya~^Y}52\-h,~=uwX>/xkQA7/zkyO⊾s'7ƹSOR}ؙ_qܘG~ <#z WgrwG嚗7|oO.l=2}|=)n4RH7>+UTfٳK$=/{#p&^#ޖ|\ܿgWݟ<-_m8'>/θW~5hݗ~'{N⣞O N>~#xc+>=7ke(yeDGϓ]+q]~c䤼LI/ş^ϡ.uξfs<QO+<=cOwuꅵg]AK>6? -'ߺ◺.!{]g{~쥺XxA}O. /MޭYx\xGߧQ\3𠎪XDnQ__+&NFp#΋qۼ: ~ 3QavO^>=sO%@ W1˃}qh^N੸·?:rx=N'ywZ{c~ތˮ'yIz~Bq~yUxuC[{V}w_#6 ~WƏ _jsZį9_?Y>]&ϡNX\ `v留~N:K'-lnpw=w~98$O'fnzOG^~9|#7G? :/Yw S~v^["y*gwų7-p7+\3v?>gثe|~vɟ-~|캬(xk mI9䛾ot=Uƣl&U=-?S|xzb\.U擟W|`Zy.u>[׆"?\?g7z|v?W |{~W>;m<)G>{mjva'xF_]p|c />\[ߵ|ĉ}'~l=~wּvyb|_Z '_+ǎW~˳g*k<ֹ/vk{\=l\O+r_޽S{:ۉ6:gɵ;9~{c,η>a/skyw+WpW<99gKPl35c^/̷|=?Fg_5&nRO%mӼ]7ĕ@Op}B"g~!ŏY.vcKZ?|}^Wᓿj qH{]\:9?G}2ѻ*y]?Iמm;|޶SH[ӯW"G]oy~VS.uLog<@VW?)ԕЋ{\q}qt񦧷~~x54+~r|;7!VxV}m.S{~:kՋ-^WU7Y앫{\]W#Y|AO ^gO؍ڡ o_uw+:y+uz׾/:3d- g/:v?+GY 7/\V+?x_)r>9vS\>]Ͽwn _Wwx{Sugj/8>b,yk?;N˞ȓi{+: 'nc>] -n_ֹ^U_eތy;oqpSwQ|L}`qb\?HC/k? '%pDoqaKي(a?E+EgQ=ޏ} ?ftI b?韮WloWgߣ7~"<)󊇢׷V}G /xc#Nq;<Oߤ纎p?ԃ߮^ҋ\9NNwpIzz1x-RzT|oqK7..3uquq%xiWg|Լ˷3lGn^YPwR7?u;i;7y+)-{f\q5w_q&\ՕgrqOͧ|Еk~yWϩo: ѼW?t§ዝ/Z{ֺNz?ygqJiAc3UO3/WE2IWܮӂ)w^>wGyGMvoOMߧpc׼?/!΁OvC? Ww\j+~b8ÿxW3#麿K\a~w:F{>{H>Of>{ܼ_ؿ_pŹ8%9I5"\}v_($l׃UzQ!n,?;Gg#y8uڋjgl<(ƛݖ7g@OGm~3ûɃR~DEP7i#ngmɅyi]\E8.vx wWߴ]^G?]}~iu~x7uLՙ_Hkȍ=֑yOi[uїڕr9+y}gKzg\R?]<_}|Eo~_{%~yo#q+Zo}oWx.[7CkcYrqՁg.>'_yY9!_żl!>n3o]wUu񻾾|5ë_eVmROa={~ᜟw'uNie=~UgmOYaݯ@S>9Gʾyx=>ÿ|1|^U|Y pyƁ?ᅺm9oqKtw@990?=~\4x~?K?:6|}\~男'}|>{/ u*?uH>Oڭ,?qY96Wxo>?mKV=՟q?q[3~W~ >93x_|qq>'~~BI.Ut{_>;{1ϑgdZpfw|طgG+Ƿij߷}{޷}{޷}{޷}{޷}{޷}{޷={ooo{Soooo}*a}O&{<ݷ=.=\u{3s;Yvz3gxoަ<[=1<ם})coR{i]y2OrMm.[~><~~i=UOp8a<e=xs_ܟK׻Mp8ξֳϬ;_Ev>7&ٯmɱoss󲟪}QN]?|k۵-<|#8max88cގs9Sed샕}f}\Zqޓg̟^ٻ^u?p<8ڧ}G{㜿ۗmwǙ?k^F~Yyxٯ~qhRz{23gutoߋ|To>}v_Xge-*;o{>|w?r;k]w:wsgwg>×yt{:o'vvtVwvgorLv}Nߓ8llűgW?qgB鱋mg_gv?__sy7籋_ﻏ틷?5^";xWgq7am{p7gm߫=@gXy}7맾/x#ÿf'S)4~cyyt?M8_Y'9~w?EuV|iպOY{Ɨg^wy3(?g<_}Q97G.5x|8#˿ϖ43;s7'@GvZ<[Z|w/̮4M?O?= J7@/y b3ϒwGGؾlE'n9~qOOOvZ~{qϫO_|)Gћ[x־'1)yOsq뇪3*yq>Wc_>_nu&w+7NޞO2.]z;<<{*u:ogxGD_êGj|D)ɧ/Gog <NåorJAΈ/g>䅚Qye_)Kꟍ%=wpyϜ!.j=߉[O}zKvhZo=9'o5zs:Oc'v~~r&z rěCx{ӇnGF>N9=?;}~q0\pt /gs};[<ߓ[Ow'&p|'%?pUnƷo-x}.}_\}m'#۽Y>?bg3Sa}.7iz{x“GgÅwi:Mk+nGϸuA?+ϒ? w8~=3c/'Y4Z;:~K?ȃ:Fz;ow/Twx'6R]M欽/_|ržguc՟xxG;)>#<'/ ^KWI}6/S9k<.Osv]jף]zzNzNn.,&¯Lx񓗿7 'e'#|Sq)/=u'u~lӶuqj]]SpB{ή/yx?=S߹'_Wk'{GpT׉W> N/7'y5ЋN^그Z>gMyN6z⯈׾0K=؞Gw }ɟWy|=cyRv>~}^qA/q!~?wG7'|mfK{ZCnO\x)r%? oq3}@_8${xvr G}ޓQx8臸\!޼4ҏ׺w0_.o&OGCNj\x~6_ey'u*~R?a_1[ A'u ?Q:y3^k95Tr^ߓ#wmtfT<ވ_G}9?ܖyT<>7g 7pŏkdy0|lSƓX~};9$΃_%^a1gV>՛$Ouj@v'W3bfG/pw?x{U/χ'.اW'/)<;qjɫvQ|o%&_G XϻS-٣ꁉ9:U O}%ߎ~c=?Surs/Gԩ Ox{9?Dmi;zՏ~$! {"O{:?empN?jWӟ9/.:+|Y ˊu}~}A*jE8f}o 7M]C{[4>MsӉ6&A]Ox+x^#\W:9G(\^HQb_םוK㣅<8O8SL_3îWԣK56zuR y0/wH#۲O7<>kg|C q=\iWixN*x*O;#í1 h='o>0Esď3Qyjv<3I~_(f~KT#O?u19oY<<%β>L\n= OWb7k=x~x\F;AoLKixJ 㭗/2N l]^~4Ãk译 xGo&܏|=\pmC'OÃGAq/xZ|;gS__/‹x|{Nko_`7%Ž5k?$\ӑøs'O5{d@7gS{k}*fݷ8^b%>I"G[_zVϮ7ÿj+yme䵆}<7#VSO:yG.kIo=ݸaǟׁm <_|>}O ~-N[^O5α랓q;}vSƻO}l~ 翩 OM]4w)1vb~l~uC)%?k}Ĭ6⪮ύ~,}%΁]_ !bgxس}Ү۞z︄ӿz~Ny/᧔[}Y28_Y2>xEcԵ1z ~z.3_qɯwG]ށOYmOx 8Hv)?:R_r*e/~'yWDoxv냓o_/T9>ĮO͸>{N=z1z߮I=SkyNz~>;هf\7ďq7x̼[ruNe%y,}/ 9sqe>3r}?֩x|_7~Z[;z:'/Y7ZwAidsF30;q{o?u4 rI/Cz‰puß>'/!gɹ*";q_}kݵSS'qWM]8X/<O+|="߶z^!K~=_~b5.K bz[úֻ˗G{?|D.: S`7N=[*cWw]I~#UxpyYkoAI<[)acu3zwv\ٱ%~B`)q j>c8%?[s&t_~yW<jk/=3%wa_U/j>A^=A\G?m1ȷ/8*u㪏}oNHn^ەcz{3769߻K ڵ[u /ߑY,)N c%#Z<yþ׳ǴxKvޒ`o82E]f?œ)#OxJ~Kxi+ƫ,Mה',?v7_qߪ{7u.S?D~gxo}{q˯>uQуց+;u#^ Fߟq׽>ڧyٺ'CxG^y<N'Ou˘<Jϰ/z8ˊW,U<D=b۷ovv柰/|E{#/yH!EX,bS$EIDQ3)⩫ۻ]K|o0jeVfR\k3bx9bvUӽp+^Ҽ{|f I=~||S9ȻCԉS=^ߋ?tn&c_t<1nwtv.^Gy7ONnѝ=t.˭O0Wg;]^ x~Oғ&cwV|w7ao? Fk4S`׋Se<}ָxgY%d{_;l}ۃsBnp; pcOK~v8)y<Ǩ>{7;tr<|A37}P#o$\yH-*>Ş4.q ve!ؓe?qM!v+,~c!^y>u 9ך8J> *o̷?d# O˾S J?7#-'vrL|[>Ӗ~Y~Zw|oy{#/O1H\ĩDZ%'uz}S??uZ㥇-֡տZ?5Ӆ!O.~}j*Vgl鯦c:{N:j7S-[NoF'z>WqӖP#+%Aߑ}y@>-q_v6̧߱ߋ>[N?]/y:o[gKwNewKO鮏<6ퟴh>)m/rs>ORq~o)p\.ϝ3ϑ_:{G⯤]}ܜ\sG/M&'xcd?PE}қC'-Z;lՋgWaP.C:װǑzՁe :wWߦzeاW#}S/a_`Y'~zCr9YY_؇z$.'{[W'iRƏp_܉۷u˧:ϲ쫮u?Q'%nS:Йܱ/@rKy=U^3}8O~y|iU?%G~ _g~F?GK/-~b~k 9D>Ǹ^{r<ݣ>ȺG{qsG֯\ ?|yYti>=Y|t{]:|O>vg!f~_h͇fonT O~7W9U>7K;[t|v'~uqײOoNp߭!t^o?󣷌z3N稲z_ t_gf/ُ)>D_fj뇅?|B V/Wޟ~-^z~;|jYz_D7ioZ/jyim=h͟(unut||Ǘ}i_e>p/v\)y+N!ZZǏO/:&Ax>0V'ν?MzBy?\_q=?Eל>|Fxnԑo./z}}oE+VjS8o#z!q+z|`'ٷ<<#?M]4q> }݊?RǼ#VιOtpqIW8v~#y;{.dX/y|}4v| ʿ>Bߦ|۷gѓՌkſB ?Q>H#YH{X7_;+brn=[W82^ oCv|ھzǏ|kgc}Og<|ADz7z+<8O]+}KnȳX~SFu4QAO|q>lj?[,ѸA\GN\]?pq'F>:_gs:,{3oύ_Og\еiU|υ~N|?m9o}rO;^k}upyv~?t0qΡ8n(H<پ~!:_Gw'^}'8RGB3?;5#(yJoڿXE᧥u +,dy=/oǓѥy͞k?)~G?{NG;]s<8ŊÓ88yj,< G'`Wgo7.;pnc=G_/.+ߗ]|[~B _nɝ#]p%)O4qg<츎?u>su7דMW'ӏ|س;ݭW ߻Mx muJ?soo}+o8ͯ{:}O':rø;}ΎyɖÞo|yANyvT8 f/tdw.x7FgxBWG%/EwrpʼnYnO' _rZg2mG#c_tm:SG qAM=WE/%C'q{jyIyYqr񏆧>~©'AU7R nZ%l W#~5N=~e~-}o<}4>m9D G<Ҏg\YRg%|)d_yo}/ܑ7m?B/t>T܅wfc}c|s_*zѿi~q9u3gw^+eGcgC{|0;nNmN<_/y&3~=]g {_~|>xBӃg;I?@n,+wߌY?׿:=Rcmt$8i#jW>CxgqG'k-7d6;=qwH?|ir<әwL__xuKwzDqX7rI޿6O^ '~B~K-.mt?oO>?xzq<|>}N y^}un3܇a}q3=zL?=Y#>v˓ٌ|-qtAm4ys䉬o4q!uy~z:GT8Z4􇧧J5.}Ϧ_yq,x]zzW-:G\\}O]Z T .k@/Od>[8OcǓ.Wʾ#O'םGG<߳LRCo:\oz,t ]>hc虩)ܼ+fO|u1;*qΊjvGW.pyPu!ɧƓ0!qDN9?Gu,|<+?r;<-j~s[3u{>͡2qYEgx>7Ύhͧj+{^?0]|z?:7ƺSqnSOD;q>?ΉCxuץ/Vs9F>#=A ZrCjq:7]{TfɎ/{Tz[{nK'qKw?pMN+y>`9;D?[{66z[T/h=T}_7cz?};%NS~zv|/T?/Zxq_p1΍to,yK?Ïb7W4~'/-dy)-=Oܼ>r ںŮW~N#-| ppNlڅ<'쁫;d_mW驾93:GE.|KmsW˶zoGYL?8O#}foy?hZ_>m{|Xsv}$hK㻝7 N>{]o}?-9SSl{kGh?}ޚy_T:!-k18_\s/sSnWzO[?]g܍e>ŇW美#p@_#5]H{qӿ7չ~;]G>kg3}N|8(A\'O/< GZͫ7{'S\Wr]y⃮u?.xF7Ⱦof%>1o齡|FWgydp"nORA}w3>:3x:53/T`y~N㹞q_| x>G[]us7UuBKjgs!*q8'y>qGO}̛Qsf:g?_Ň޿?wgK Dޢi g_?g>Pk9O}{|羮sGz5l/U}qmtxq7牮GzXCS:r>|kߺu/t]8y6Z>:C'ֳbwvy}uBNv}.JǡPs}Tq7\ ct}Tѵ6tC>*8k{`覞I1~珍'r݊_X!<]*Q|PǩZDJ9ҏ.Iޝ'<8Bïb>:ykydr(~g'{x_uo眫>_dxr2<?Z<|ic݂o#:JwZXˣO~9y>f؇s*W+;zs}"BSد]*ﵾ O㯝 OOo a_c.]A>6/?8|﫡E诎g«Cy~{NQ'~}݊')mpDX_zWN=ҋ}q'ql(?D~/G6~;xSG}j֯*;w/7..09 7]}m׏v8&9=YS3{ Yf}鶇;|O7c^͞OƏ{O};S~{q[8G:vE\9?ޏnojBOm'kYoC#ߘ:>xJ^zcޟ~ONx#F>r箟< ܪ;[oO87)q7˾l=)58;ՅtT^w|J+ή~q,<-]2[Onvr$_{co*ES=|c.{+xI}U 1mQ7Mbx=#O'/'vq.amԸZ#?pW9zIӹߛ{,<%EA-0Iz3|s3 mu|^=@'6"|tr }.Aqn~?}v O>Ǚ?c_#9~!'/<8qw5~?z{xq'qY i<]E'G;9H?~7_~w\i|)zz_#RJO=\xZ Xλ:EWCo}üopqO_g]*u5'gO>]Uc8[Cw|@. O[~?Sɗi>o\΁q ?ɾGZyvOSϫ^=Z1/N ׿SQ7&ž9ykp8y˧SĸxvS'GއT~?c|彃y?Us8My몏:>-f+z+o$歟g=X觻OwqZ \lK$^Ww%+K~6e7W{_yGKc Ov{]~)t]g;o)U~W͂W~DxvQ~_-ÿWet8*ܢmzO>8'?vOg[ptw >v}'/߳ _~M;s84{W}3|h)}Pth,xw=9Y\󷌟^R7ǻOptj\vYW׵:ߛ$UOSo-:%7ڷa>?N\3pDΣx魅8z_V=##T~uf?̋Ns׏c~i~߭ns ͂3z,t[->pF7x"=ڟc;(<[tup.Bo]{gGsosqƟs,OE/A_>ߏO >ЭqU DZ{r狵m'cqaw~}~z>_y\*z O^Y\-t5>|˵:>zL~]'wн/~joO7ToЛ~~s1\WxZu/9'/.>j|Xg|v^s_s]5O|Y}!zg㿽w_Ϳθ;Nd?);ʍh\C?lr?7bM>Bk1OZu}uڶG8=_ws[?|?mn]O K8͗4Oÿ7:uw%ݤ{FS3՝qOuy'/7m{]D)]<_ߝvwymwCM[~W]-8?}~]g<߸֣揞Z2Mz??s?[zCo͗yGlQ_~j{Od\Q Wuc,)>y4~{Mݍ1߬cϽ]~<4^o!};6+籌im'F폣v\K_?^q.{~>7C?gϻT~H>\LJ8F_=3.ksŽ3'9wy΋RS7̧“?s^S'^ekqU==WljG[84S7bg}eWҾ:AWu1t^~e??ay:q(fI~>uxn΃p ɬ]S>㼯p7wt{o p^ zx?^tΧM]w?zO\3d]'(~D/b{߭O;ywnz;=Ͽ̷]'tyCˍ?B/~G;~!߭>흞^{{x/sR9oxN~W]7<߮+qlù8oF:wm.u궮/VS->_ѣWc 7}vҞ7X{H>nu{ۡqKr̍ʕrucs|{dk_w6Fǵ&б|vx8៝|<[J:~;z9nO}}_}/|=y9~˹re>D9wv}C_|F߅[;l>l{p>gZ~\7>sg9Jy s/܉>ssQ-8gc^<>U>x}ފﵻdv/8}^u+;QC?\y: nC{w|'{?8u͇}_;=:=i˹kΫ<\81NsI4/eOݏsN.ykΝSy  {5uHGs~YZv|8ߗ/[C9t~/eΫws>}>'ߛyyyuA{/z9燽oc׵|b Oݯa~ȩ͹<?Z>_xw[Ͽ^d?}ى_^~:gsЍ;'#:qst~ui|sx|c5zZt|ugyό~W7ؕp\wj"ѱމ+﬷CSo =r'Lߜ| ̸\M;w) w8\ZvOsWt g>7gdNn_ɯuqox N='xs c&,\:/ڼ&r9b8M~|_ƃ7y/saO}M1DNo7/SFrt,<ao\yGiM_=Ӣnwt@e/{vǫ|N;c<~;KsRy,|mGWz0~9mMMg[o{X8'g8Į|zu?y4ȇ4O'K18s_{[8Uc0znʮ]pT;z{ȍV{`l׏?|ñӬ׋4IO_pd^ OYB\p/{ɋظٵnOc/9h1^G?;9Qd4gZ7]Ronf v5ܒơ>9KMwl{ו8u?d z{gkNcOox?9.`{rWC4Y ţO#\ӻq4Ÿ7ݏa<-uOlCwt|"+YwЃg_ɣ+C#KmÄ~yw#̗$3(A'U&.B?{&4dF z[P}-eY7v:4Fns G]pT'Ƨ]_=vZ|quuÃ-}@ߪ;=3'9Gտh[/;}uN}uGFn?O17>gƅ~9!i˾ǁ<츮Gw݇⤣\7vS/BOqԡ[qvw5\o"͟h4rk=h/_qLU{9\'>Kp$n>| oSDOw 'ެ?ԓ o]>{nt\G7~:Oxc~=! O7vrksG8P.mGWvܲ+]p:sx"=QqR1OmA _WoЃ|rRG18yOsSͺc!Gn 5O%O3W ^+U:v?#RT ^̓'N6m<95F"8J;8j_^J|'GT|X7#ՙȯ'Ey/={<'ׅNeZz9j^_v=TE~7={EO u'wx:`Oz_o#d;I\7]'J~SK 1TU}g?_)\qӶ#yYG;c/ǎ;ЗJ~O/Uhxx?|}f:^3jKn<:?[B‘>qd)V`{K\k:'~=|fzW yϿUbTscOe=eߏO|]zO'v>mx7K4M>뾜ӲE?rw?jo0qǞ~?P{#(,Ioze =*u⺉]_Ǐz\qSg Onpcqxz|z[Txj~m ~ckhwKZaq?>0.vdU(oC [^>&?z\o?r=şeNު)c?zrsᅩfu~ϢӦΑ}+G/9,DΓ{2SsOjows6(u#r9Ρ?*H|b/_[{?}ˋ?ʾ+z_חKr}Yu?W]JouJޣSgv{'>#Lc>]qYO?!NZGO8AßC#CU/$u;7GȇwG/#w3'u`Txy RO:QzJ䍸9>zΓȻ#ωng仺=F\ϵ/ۚu/%/^.э_?|ɵ_\~V$Hjdx_&Oka⏻|nguk_<>]xb_7%WؿHvh~SGI} > A/r[W~'>%ן?7yv.q7R|ώcƓS맥|q.T`/? qbTcIpv|A>;S >ž.vg_'+szu> ClZo?^ T]D_F_z)(^O:~ߣu=yP먅?R1qVSyS[x|xX7Ke#w_hv%'؇p}qn>9gĥ8yc˭} 9O>wpG;9Jm}3 >1ƫNQp;v+j}neM4#īO{9o%ϯs`xƏcSl;_~c}1kNgw?:E`9Sj,NW^B[E^Rwb^W$ _L\7;IYwNb?yr~g_{&u*,჉ޗtN*jO컩 !Ur';j]g,@gjv$Y seZPݽV=SS𲼇C\bgOc'\4v {_8oqʋzv&Ϟ|χ*FΡOBoz8zA:Eo=|_/Ou)~x}oZ+'R'0ɇ7} ^~wv OZ網[aNfQuu&T~EOn#znR;8#c,G]g}oqe Âc=9Hy.^?u+N?99GZ_O>:Nmiy_/};#n`v] ~,DNCtx_'r>iӬsTzLrn[N:.oE+Nz|FGU6u4lq|.ϣE1%^^t۸O ޖ<{}i_d~ybԻ 8zpePrΖ{* f=+B4n1r#u?tt6N{~CF9󑯞s^FOOo>E\VY#{gf_\r*,O/+?z9+Idn 0xύoj 6+yԵg9k?u0yx9A?֕\E^#&_~(w 0w>oYGsiQ Ȟ}>uߜ30E|nZ?>o.< n: ]Ol`GϜm]>>wq{''<8cA ?1u#؉_)leqW _KɛM'{w8هԽOK?/,~bGxC?r)iquF];OHj?7n|S'[瘳Uyi{kx(b:|:෍7mv'KH}KN}R1]G<9xc}*8O8s^&UW|3ctG}{ӲwAď]ٵ_O=~3:vƟ#ؕk\oJ6{S]bu@ߥcoɿ#eӠl.߼'S?fxeo!>;y |$TuߑNoO-ھ䃆:o Qx9_i驜룮s?8WSڗkōY^uHv#.*>!ߺjkIۉGFN]}5OQg?KνY~t< 9v O%r=Ip9vZ-qsl^ڶC9s;q}V#uC/b]K$.7> =IvUWJuwP?[~qv }Jē8Djӌ{#?w?C3}#jsf_>x @sg;ߍ ~ssxOxV/xygY?=Nx-~ On9bN389d\-bOS~T:BovFzi[,qQxjٯOuNr~cO-e_;?I{<4.=~#VxeOEwz'~+U?On@<:qlOu~]|P[՗+ZW^t×D/=}_i'x3<G]_:v{z#+^k}#_z :~{w; [~) w_u]n:nyÑt3պ!w^`G޵iz7[4nߕ)vqu>>G;l`[8sZn_=~ SÏ_r9G/ٞ򌅧'*>KWwĥ|)?޻Bk}=|z_~-;}~%]8i^q/OߜWݲ $p:a˯|Ni> $^reNAŎ]r?$ϫ̻h/;qyL܏77 sNxQޗQKo?"7\ߓ.E\b7:u^7=w/ǹ:]AwZﴃcv[~g4,uynj\K{m 8sެtp3U'V_^ܩP_(/!?|Ύ7Uw႞h/~bp!}_گNq)aLYOjً罿R?9OWugI}ֹJp>e>~4/v{?x'>=~}P^T<>ۮ<:t8U\9nG7oqZtp}+ҏs;n~n9=O;OПC wџ:v~cz{^-۩a{Vq$:XmsՋ~К<4Zz^| ?Z6.q7Z?9xy]\OdJkS=,(p*{s3?:vZq&wG//z7zo9̾tNڎl<+Z쫹c糷nVw漨Y͋1ԍyRSi>c:~|n6}4Oa9L;mkN+Ohꮭ77콗k|+q/[Ο>b'q5P+ĭo{Z7W^ԯ>|8Ւ};>pf5tHmή:番pďc?s߇3\{y<_)2siE3}z^rG^]Ǔd3zwt]`+Oᗢogw5uY_Ky?qƋnbwv/zosZ'kj_{bsRp?b_8߫Nt?υk/Z.r.z?˺lp{xM?ſG_w>GK_u:yяZp>WR=XY2nrES{nx;~ f<ɗ\rx:Y3șW8ag|?_~ '/>w]u>O鏝o߳a-oO.@]K{v5xgnrxɅSc|хNλ=dw;<;;uTzADǖ}'|q^HϿ毱#U _^W}m{h]>o}L~&y)CPž?^(ȗ̓}6t=~o3ƓW:6OmYG+x?ߦ!bݠp'vevC:\7^(q:9^\Ҹ:y5|)Ǝz]ZwmX';qT:z,@/[?717bOvx5z3^琟zzr挿+7J>VY_{G6qoK\u||s\KjY?I_Gxb˷ʏ2^]/mi_Hbj=G~!}~g )z?W~5Nr}x2GiE>~L,3I88 >^^3N셎kvG+yiE|yγ;{[<ͼMq?I? \qxBȡ:O֧ Sܧ~/x>Az6/_?KH.V]Gpry{.}d?ߺ/QomKyNq_cgIcO>Ӹq_̋Pxi?+=|%f}ԿA.ypAx}7!A?Qi*zj>tq$H[]x<៊okOa#߂~=q ~syt<ݷ3Wore'Gݿ- wyUrщ@u&wh}8wy|I''cvMwE:n.s]z4݇o7㊽Wy M_)ug@n=7{^bwz=OrN 9^j^DqM>>J<wzz#у3kZ#s=zt>#Ǐ#=K\Yf\G?Asyv]{/?m~g_g/u׿j 7#>WI`ƭ^;NGY=/?$38Y5o9Kٙɾ6\ޯ.6.3yo<[7mS>^ˋO׬[K<=x'i;~<7_|Hgҏ+vG=/u [څpvx|}]Wm:s7i{k7.H:m7|h5{ W䧉xZ_}s;ϗ?=´v8yD_vk3? d| s&yxރnu+7{NGeuh/u~~,^u)ߌ@{=+$\/>y~[Ws.bo ٧O׃t>>s~gѲ;{wg=L^tK))|yr{ ć+ķ5~4'uJ+Φoƥo'ƾW4M&t৸o>~=po_yt|!;>X Cw;S OW!rϹbۍ{dnSǿ?+SC'>w6:i+οяɱa~}WG:Wt\B>:^!~muo{/]uNL޴~7rށl~'~vdL5NƭիC_Pq.g~nɫ~ |}*=ԣU<͹:՚W׏43x[! %*O1ѷeO{i{SoWujΕeJ`p}kq?y.~}BO4O;jJ?zߧu%ȷUu{uA Ӻ n-?k:qv_1U;r|!7\8/n;1/{USM^lɮw Ct379;#y>{\ߓ5'̧l߲׬cSUa݌L^6vf(?%Yvpו1>"ϗt~oP'|}v3~{/?Gz +<;Et _ڹƓGSy%Gr޶Yzf~^i;SW#{IOKSI=F({aY8 ]Z252i5.?wk_|ʿS>F?rO+O |˯HG}+n(C'~ƍd>k/]~HßϼkfF׍oO;ޘxyE$2_C'qӊO>vx~7)==]ygՌVƉ~|oN=Q緊`S? ?q~!wķ{ ˦>5^p+<8s[mfP_]C ދSq_짇~~+v\~gMXqS9~Y}]xp]/>}L7ڧ{~O|ǼO3S:@r^;~E?oH\27ݹo7ȏ}^4?} Ou4y4vu]P졊KĎ־DyȷG~?/RWxC}9e^Wl}~Ɖk3e_\tQw-+WpRl=3eJc(N;}-yTWyOvhǕ$Z[m+}#A~e} 4BK@%}c't s #U}D#/SIfWسͯdߑ3Ϫ#WOc'zOTqx4^%ޜ:Sy̥'=|"-ㄧg9x:nzm9?'vsug_8ѳ^H9_=EGIE7aGgP쯪rٓun ?“8{mF?Tt7/t%ͯy~c_D>>KOD^.$_);>)~M _Tg,GJ=|f Kt p&sf|Mygxb'Ƚch'r?٭ꐾ:~:Vq%Nu솼|%a}'sy{tD {_$\';N]m5n_n=d3g=͞Pg ڧ qwd_#NվOUyj~5,v;P=RW g~}WKRG;g?|DQ]s^\N䗘ا:O=m|"u<|xe'vq3xtmx}TvM֯a!?j9v};7v[Om _>y"w޿zּ`y+:k:>~V~_%k> OZ<vu]U< l}D~A91|Gr^ u]Ps9*s xwybc<3=- _*=~u=k#l7x~NxvGZ,~gw;;}'7ÏuƏ#m7w]!Qĕ ~0?>&щ_p1ȼSyt5 SgWk՟,[goR8:KwGǥNY/xo}'jA0^]x/U?;Ou@}]{r;ξZjjW7xھ]_ǟ6wf>؃pu֓+zsȽ٧GSO=WuWwOGZz;=Z׳kv<ד93> 7>ms+pn|#~qD?G>Z=ywoQ?v1~7_$!嗲xY6] >~^;Ϗ^}!Ch_U{[<"x:~²S`_~[TqXKv=gwRxղ~vqӽ ^Jo,q}I}u^Kۗn8z >>6x~$9|yoO;k:o?>Ku-m~}/?">_-vbcK̞NفO}fD?M/8E3s'xYs:_rj}O])S#n&>Gnwt>u\u}r^sB:r?{ނ#xoNDo~V??Ɍnӂݸ:yZvu}cʃy;C|iٗyOE;;/xA3z%y7x;>ys9r̷ȝ.J;{[?|vzf[tD=8JOO>yt@K1RP-t|~Ja8zV9iEOgCs\o~S'4u[d9'Ή]?y%nl[H_~#֗?>ǹK+G~k?s .}ࢯ9 ;;UϏ%ĵ< ^\7>fya>.{=6缯q~_~yţ賜>Fߴ7j?//`os__I_F/-< Odz)99񽿻Ǔz/z|Ƨa%G;<7N+P8]UWC? Nhe״^|>^4{E2۵|KټG9+:V<3ywmYNNNm'?G7<8s]فS+5#ɇȍy.|}==O)7Ny2鳺_uam;zZ<v~?Яxn=M+>t |nIw(?->n^F~ٸ3gkO~ [߰xdpt{[;n]N>w+ޡxTۿ&H.=9xYytwuv{Kwh> e0,v8:4zt6n:[7?l͇}ma6Gz<{>܇~O>[/O?WJ7z=X]=?m|Fv&K߱_ ?v{yoӎ#Ň-e y-;:k}Zs5^^WQG~//5Q>%v;z߱=3;NÝ?.PGn<:~f?:~&/TOv97 z_:7{SQwmG]N]u>/nu>nmw|qi~qG}w?no3ߖ'w)Gn>r}?|ww ѽN_4yvw=?ySmXo==Xk{^{k{^{kﵧnϛ?o{{q.Ezߚϩn~y`u=Φ_wƉΞmA(ϟ[{?몿sov5ZC;o]!7 ݳѾٿ?ֹyܷG/cp޾gsY 9\mΗq.̴mԹ-}=c+z:GH9wgι-۟>7t=goyuN}ioaTxڵk컷o߹<ߝwT:}.!:۷@9.}> is~s gO<Ws)7Xޯ#3P9^-:xky1}|CpNœ/q_}ڹ߼/μqSk~S''4?=y,w: ֧#J}~(}\nú6|p.yW -q|q|uqnO_/}:V=Io5nХ뺷f^]}$ױs8[c'>9眒ѢO_un"-8^砧u/WWƃ>o˻֯s߷>:]l\ h]_lg>^Wzf޳pƣs{~/{kOS;;ruxvw=:<̓n{8n~|k\5zO8/ӢgY_ߗz>/_zw߿xl4-wĆCOr@pjgvQӞ¹q~>1OC ⏝nyԌ~gp\u3~paΎ9K:w^vN]8. }+ ~7}.~*</%zcryy!W?Zxſ-o|:gy"Nv_I8tio^Qp}e~o.?Y<->|e} ?NNs|z/׻N%wz+n|j|'874bW/#?ޛstOk_ _G3 9o7/f]|П}}xgl<~mkEu$<#1=Vy{KBGFܯ]L}SzLtNknq ?d>pO.I7yi߻\tz%90.x|soOl֯DY9Vqkvoɷk|\ >Dgm^6uwߧ^?A;ZzLj8;y@Ç?Yw;_ꍒOq_K'mEo\~ɼߟOU?:}oГ|zRh&^gw2 pڋU$.^~2Cީg}%pz|QoϲϦpS<[n'72~zcbz+^J˃|$O_7OnUc4+9x]|//\yP Nu['/7'^>~K8Ҿ)[xBwrz?wRMһY;#vZ{}i?>؅2yӾ5?l*ur~~ɼ "om~/7{Mtuo]S|{O9y?+cwN' gK^Oo~z ?}sG|TGpOy@:8W(?\7ol+觑=zٻ\޶>~gDƉOWJvA.?=O΋'q*vJeсܒQ|j=_ḋk q>}[g$8zzy8d O޾ϑWo+!_)#|Wn>!,~TL?և 8p݅ ]O} N'*C?OckYC7mɹ;? Osoξy9DAI՜K_eMWz&GG>_xj 诲o|JDp-slpwvA~ sCier\8'rrSz6q#{^C^v\ӡgs@յ>p~\|gȁ4ݍKϐr:۟I|<>0~໑ǸN;OlzO~}38r_ץD?O÷g#ȏ纮[tpwN"?E<?G}{uL|}ĭvA {?Z|?ȩc^≮o/gg<|_]wx!\s'9x$k]젦;cWo?.~ħ[_ Μg6 zй}z>? n>w\|\ nOJ9boF<z#=_;?0> A篟,ћַJjsOGչOU셓#Wgc~p.WÕBǥq wDW8h;sƇ-ŻBt g}q{.0^|n|{‹gOaI+Α[CJљ%<>\vF) ͹-zO_-~&oiѝ>y_Ծ'N=4.>3<.'χ\/H^k_8k_EN=R!oy59V)sz~|wG>K}uoxzz cOSOK|;Y?=O.Yy~[5ZGkgٿfޮ/WJOa_d?N?mw>gr|C?~aIEW?;{QO_A}<Ɠzߋper}|Ћ^/M_t^g:\x,;0u>{z@ơxs L]_yz>~E7Occ'FWK>Wzr?\8wjb=MplǿϸY4o~N/;O;[_ݟ<+F|/z|~.tQeoC=s/PP/MG9jاÎaO]۫߼Wj}OpSûsm4٫#<ݬmpȥ_?Z|'7ﬓ~)=G=^úywWg.c?UB ٳ{۟mqî#̓?Hz_:_Q5~Ҷvw4Nogq_g o~?.[zaK/.0ovI>~{[7}1<_/~Fg}_+r^t_`wo=ݺsЫa^˩u?s'?¯> .m=}3|dر.@0sr'e7Dޙwׁú{7_|&[8⣎׶~'zxįOR;{O:v|J_z__$#K:[r:GD%AOrOY{liq/g=Uf>/Ξ{^#7Zrn!yοm߷xOkLGڥnz>'|O|D+pRcCwzpoԺhV|Ւ<9oo8>B's)nZOﶳ?|.sr+g{#Ox7O %?q=']cs7O؟*>::['<Е]+@?|䵿oۯ{[9?1H!R'Qg}?r˷R9?8cgR<~)pBpDt\J]g|}3Maw~BYӉ?;'x@/;sJCwg{ ~+|E~{r}Rjg{s }LK['z=Yzr?S~jD/qjg{ \f<}''be->&O:vĭΙ(ju>k|zHw=}41d_z>RvQŏ{|C{r?:wʾ¡;S!sX?ڟzxԓwjߨ(#|gxţsL/9'ٗB{]g_p{} ;C{xcr5<%w/q:aBf\p#~ͯ]abur< o<۝u ga)~;tz_K9b{*/t>궝ޏD/MOgſN\}8o'ˡWݳz:{=؏~ yo]͜5?w9G>㓊_G3ȌǗܣic?9>PrC?HCW箖ϣgt1.g>;y뎿?RWm<™Kg3.S}_~?g?_.H\n!W g+;g/DOZLBG6xÓuzhu >z]?\bx7]zo#SwJ??&\񴶿_' z5?8૯-Ưp[/;|gs%';-x~xz-f^xk?5|'t$w,GsoƾGjOwt5.A+; ֬='lS+Ο~D/[~?`_+uZxyG>ߣ':+tGu9SE+OZtp^ٙv[~>{=/vSˢ7sO}#zvq9ϡsۧy㺮'G=b؍꼍)~!C9_!o{i9XS3w/ypj;^;a7rg9_gt⟲/?z/\wxS^vՍX7!!7?:|:~x67rQx?ּ\ /xv|^Pd i=m'~Emϲ\3nqyyo':]Lew=Z-u3?rX|皲<~kׯߘ]TdwsC~e7;QK?piHߑO~'׵/tV>Dھ]7w<ϧ{|~t|n:æ>z\Z7>n?Ǻ'?U5?/9sg|frmM=OEۋ?.Ts?ώ[zs'Z'g]=o3{޶>\e.OyP$3KzSřDž +/e7[ꃛe'%/0_ruOn=F%7>t?1_O\:O/?紟Ŏ}U֗h~G/z׊.[ɗlWnT>O<"7>^#9'w]:rHz_? ΉYXo8Toyϼ}޲~R#ͻu͒_8>z{ﭫuDGɧUmWԃ9ewh񛖟~y/?K@msZ//˟ZX~y0?rV-k?K8R=ϸx__[yԡ:.ޥrltZQW]ֱ׳B1|oZ S 3޴7>͸Gnuk\FޖD] ?ӯڎ~g=/m[ZG~7Y|]_3Xp|m?Ӈ&Ӻn']G7ّ@SN\Cg=EGewҚ9q\ ܏ԇw^~Yutz:dw>%X7x:[ݶ/</xk}џփ q?NoB>]G}l<\./+d7'־N{굿o:'DEWzr >AO3t'p~±߯7'j~琐 ̸ǼOJ\>~u߻ُo }^T~^YγiGjs!^C|3tlbgZkbqyf֑aպOK/9_xy/.{ߟǺ;/^?uƍ_!;:쇀're#u^E?񻿺_r>sY}Zyt?YGSrr\__O;ێcc#w:={tҿy> ?>#7|!˹~_ދ|= {3_[s.{uxڜ+~.<2@gF_u|~u|?ϱo7YÇcw~:/=\?|^f^yϠW>bޟ~e{z9zxD-{!gC^y>G_50oL?}v7{FB碿觑p{;云o~/|oѫenvnHQ>x?P$~AOߍ&Gcaw>zi֙ܐ??*=r+I6=ʾb/#Grj'կyK? g<3>Wdx8;# ivЯ@'?zzup?ipn9vdɋE?_vnkәy?~' LSpF_|K'Ο6}=#g#gKfҧ-'z;NN'FثC3Nq=cwGdسgAK8GNo=,]^h؍ <9p_gg~·ׂI'\*8[8~9;~.r785A>~u2<]=R8ð {8Ab< ~K#LYqD}^p/:K:\LGybH.#'g'yJϣ+\=/ { GvtxĂC?9H\z!FvMz]!/q/+9Co3oWoq{|Io8{<&O NOǹ̋ƷiN}uWwK+NKXGzzJ#§? ;9#qoix79w@Љ~?t=D/ B?FZoo*ܡy/H\fzX'tWz跧K>;'TxbU\Ї]Onη!9e_!\<<>##?Ny`cF`O s|<}S}|=[d>;nW >?7+觑~ށ.o?{恚/;_{z ߻%K;tI,f~x<=f'ӏ^g7<SKߓhN?g7.?ǑK-|M׺ΑC9-) |xѳ JS4|r".x!hqI^%oǓ3\wpz~7y§㤏Yyx̾"rl%GU<#8'wѝp؛w+[J<).xʇn%qg?5v5ˢ'^]o%OpS\Џ)?ާz>i~.x*? /OOj?ys=#S+Я;nBʾԧ+|W#wbǕ9uȷ/}odC~\qn`W?Pzė7?y/znēW }Ct^ GW&^OO7~3Fנ'_.8W ?=>v8;R'~ό$l GG|G71;E~>a|J>'$^8Iptx2N^:O=u\7{x2_䯇u}RdͮG/O ]:ky*b~i>؛'M%> <:_(l!Oy'^0JƟ!]?Sכo}_vq⾳.?})ۜ1`]?m/[Gld#yOoO L;?>n`'򵊟ccc@/;'q N^MӼ:8xc V^?r}?OOAI^oz v~:7 r<_<:Ú37]ؕq^ug<ͼ_c Owg䑪Jϼ}7|Պ#Y7vo}ꨢ?8VH݂#YGp;n/WezuM}:y&OU׎CcmpǮߥօ73N~*yC^kxtwj!r?6q%to-=_9wx)nI^㿉C=z#3xrf /@r&~OI6<86xgN9x*}YG·|qR_1 ~rˌ'w}yn;_;-|-ٹֵ G<ϡ7:~\jLo~ċ&<<\A\vɹ 6>'OaYES?ԃN=죗G_ʏ>_8o|[:gVp`|IB\@]>K{}9guZv^t}87#Le`zBu>{V.xbx>}S$/'gI?x,ON[l>%sgչ4TiS>gi]uWD=FדAGvow}[чcuwѧ>=i::j?!ϭs5OɃُ6&n ~y?եrC+}uVCCx(}c/pv_}>e%~"^E-q؏BROWqO!;m72\Gbfy~<_TxGDߧ?Z_8֟ï##&o?GyxOyo'ӷs =D{j>g=7r%GlAI?2]?Iӏ^O^qp2_S]I񟂧#_#x:&r'tJSscs} :7nO?{;|Hۏ >g?j\̲7O%*ܴt.?_/ߓ}Op|>/'ǎKO¸☉ ߱1'%|To.;~pq!|m=ć>%Ư}P +[O>;3>V|*"q~Gw#~Kp6vJ!:$f¦?xxm? ~Trt]Ƚq-[t, ߵ/{qf-~{=2NM⁛*^GMl~8>Ǯ{f?q~=qKތ`'Ы)̋HӉaO,v _;gOm/vg3n+>/ek`/;))xr<ũ^/gap裎׊+ϸ q|'./urk?ozn񽼛ON-O'ЃF'q9GtX O>~ v<{X]A=qQfe{~.ߙzuu{O&qGN/)COz]G}S:4zg={goKA<\O\o?|+O:ݏW^ܿXzp=~w֍>q+|Owc)m*Lnw38J鏿>xaG`K^Gi<gؙgkAĵ7x?w?}O?Uq :!߬NeWyO/sQ>=Oo)qK/G %ڞk;y-Y/{xDGx?U׹:{GƉꌂƟf?;ӦF}^W\x~x69^fu}b[ސq+ _j1>]s;?B?e_n=@+up_|UPt:\v$:yr=n~ uOh_pݷ\bo\ыYC|5yYx~㿽w'gɻOIEZOh:x?'E3}{sr8>2&!R//sQxIx>Y+uKw>E_=/t;5sс]c@gg:'% ^~‡C/xx'-;ָEp}n9\>;x!_jx\q~| oޟr]Ų)|ΉI&='>Oc/<<~:UgVx"]OާDÒ|F3͟C9ߡ3W}WM|rkd&w}km}/;ȳS:8DZ_Rsqt$<9 ߋ_W^o?$ 9yn<\y)^K>h<;O=Of.75xscwGg{֧k"pOH=}m]!C䮸29}q%:)x@u|ۼ N\]jg^}y`O~̎؝Е?_N|~uO3>_O_L{ݟX]{}>x':ӡGpWvlʾp8!e%<8Kܢpߞs ox# $~S{߶VŕŏM{`߲;~s<[mcONJ'n7z |H9IxAoίdK\8;IOF?yO}Kz{U:O|*U?BGOevs^#q^<}n;;#OScq;\v|:_ez|I#ܗY5K/rG|ug<~E̺&zVaqfЋzُ? OS=/<N+8RQx2/͞!i?>D΋uyK}yk$o$nß|;y<~So$Eoy&y9oכYqT76HNC~a8:~Y~_yK/Y'Gow~4f>h.ʏJ[ro) 9p~-RMr],.Gµ/*qe4-{՟y:/iwFۍ3yOփoѾu5~*\ g:v9@3zIռ?W 덍]^u=x=\~kOݵxZչtWj[bߟ88zֱ{q Wc~y>O?$N'TjT7|8uq?rJ/:xh;oig}ԧ w[v&yM-p~|_yOp,i|M?VS4ϿtGpung ?} '{m:gZ>~'蛦y'r4Kֱ5yu~WCy U|ϹZ~'?\mjn§CZ;g,In97B/:owLb3Ua_r8LىУ>~GA==?SCwf\g#Ӗ+Wx^q >n+0t1ۜP붋WEAy͹m׶^7zqߧgV3lxW~p#>Ҳqέ}O{DӃGSy}BoOԼ}1?'Ӝsd_yA1;; Z^ZPٍ_йiÇ;\??G?䍸|jHt3Fy]}(xb78z{nyǧ7>|{~c7ңnѷŏa-'<$\w.6/7v|9j3y]i>Ǐތ#~_WK/?sS6|sG~Rc"9'޵/U-џҷG^\>tuIzױW}?^;U -.A_v=ÿYv;ӒC䎺~voy>~|:ZV<_c;#{}o|=Ot;Nh^Z|-~s->>Y-NZ<^?sgԏ9dU>䃶Q *)γk]߯\ZzyiY _o-O.`^iz:|~"|kW_.$o_wZ~"}'o_T7,Ok,}bƮb/qېmҺ w=>^>9{]siC'%>?vdד^Vqp.vX]}Zsy_n~ݻ*<9s=o>?۱}MNčǴu_oGg<#ݵ?7mWTfcửiS?M=ȗğo˓Oi8}:gײ.s$9{jwvnsc{n9 _z˜<ըsySKGoV\ߨ{tSȞ*ptۏ_Uo'qm?/9^쳞yk}pyXs} ?syOPN7й^y8zC7ʿ^/z߇Zu]osW'#^f~9ma; z=8u˙} }7z ֧X'Z|d_Dcp}kWz~t2>ozggKzz?zߜf~!wǟ?9.xbٯ>!k Mۗj?h#A}漭3yO;?;ŇГm_u2ͬ_}nH(;OvZzиMϘs ~;_rYϡcT6?Iy}~#}S YcY?㳮XObϳs,l[s۴ 9$.>Gy];}6}ߓgku\]M̾5v6y3;9׶s1g<vҋSΓ|[G?6|aiֻus_Q~<^8͡s5{B ב[~1~1gw_^ޅ'~sx~\W9ys^Kd^< Ń_v W{}4=&v,n{Gq~u{|#:>Oqi}__ κ+˒cJ/q{3osOf5[_WM?>ҢOi[_|;W/dg_7+9(;]_>؇6zx\K9ŏy|ϯOg_۷GأIcwڢ;qGo'sCGz.9s9$/+\ㇷBO ޺>UݖMyY\>bC3~ךN*Ny}s.^Îun!9>_,oo{7~Py8Ep Op_85y9y꧲WOqƟ+Ac,)?vԊj }s߻uw+og}O=y8};rK~xΈ=4ڃg)yS _tܞOOWy+ ~UG^I?or~KPWLz =q;,~FߡuRGB1ozfAބwGTeIѷ;7W}> }u׆u"~/q7zOK5-/_$2t1~xR7tn~m~WP;G<.Sᕡ =_1~|u>KO>SCOzL9{5Or_{pavDf|9rX赿o~񊻲!-x{#~n+_x@裧J>~r}6tBԕ PZIoOCũۏށz?ɫ{cglϱ '3/' M!\N|ay N?O79?ucG%EyrE<Ƽ^Yg}zRq*z~O؝}W~z>{NU/Ocߣ4}Aot!<j C_h?Sv=/|3-?|: ';=BK<{N^⼩[Iz/>/_~bmߣPy"w?F=%7I^P"cӑ̏|.qm.zN:}G;o|g7vxuuI6ZY8Q9zf@ ]/?{ ٳ}GMsUfոc7#_eCƓ󡚾 m,yZhgb+Yy?v®7_B^S25'qr[~'I|*;=t2oV|]D{Ց9XꥒHK=K饎7<\b_7%' O \n DU?˿s5ugj_~wM9k~Oo Q~_[ת&G_U}R5KBܾ@;Ok\ xWWBO:7u&c;>IK/ m>G*{< ~k+}O삱?>riU:.q,wOVvHNgrRW>q_OWzy.y>~:fz5 }]~z\OwK?SL\ğ4Y]pT\t2v6H y7~+g##?Yq]Qz>tw+U\o0zL}{۸7;VnʫyY+s:M.up9l'MD>G=>(ϑ}}?Qy:v: {E;v2?Rz O3Oi{䐺 Sq φ>68쑯<=W_Oc_ZGr,ynj9= W?b ?'.WSdk#A?>{̓}Fy~:z/ZӫKcߍFdx|{r?;Vu:eyPOmCNЧK3>෫}C>B?#v<Ţs~ "Bku鍜 eX/s]On=, Om߼?G>Ma֑{L|qpsoٷ?:Gy O؉#-x_ֿk4Nq-8! $>7GcξCaΩa7z$X:zڟEn+|7 /Wϯ:^.J~nNsyN>ۼWoΫYS~8z$x)ȕY+^fWt}\M>&t"į#{ g [f?k{A]K=p[pS6#FD?_K'_BKg_o;gK!uz3.GS ލqq0>'JG/NcYx}Fux8w4u5]zz_{CO~g-~3|fYO~*s'-E(b}|~| >nO#oOm[gvp?Y]Og8?\OkKCOo{}UgM>r_j}=qCbxe'a>mΗ}YO~:^MG~kEr[a{؅s=tx}Mub7-,e/~ _Ouo v~8rgUIҿ0z佈C'y/ pa}'1q?yaOS|H #v'/&lN}=%%.ĢZ5N)3S{;".எ R!O;򔼳_^~yWr~O\һxY4%xj{fWOD$nV~{S| Z?^OGO'aR['z%~n#&oc>yqdcM[|s'r.+#-?( -f}_+?a D }OOYw߆/-;_y$|n[ڎGl~~Q<~_C7v% |G[7qM|P>~N𮾮fЯ~&S/PI>w4OUwzu%ϖ:Ur-_ ~9׳/;'-qcoSqr#nMw0/iO~z4znFO,tOG.h}L}?:zѣS,?)v\ڞӢٔ#;4|kyyNJ_v_C}kY~^AOqBxP'_oy~蛎>ܡ'=_xj\OL+9Wksxí^9z|!>m=c_Ws4s <7zQzW*^A7UWQѪ~&?]fO5"c^HrƺGH19.TOv*xsхo ᷊';c]/'R1fg^N_S^>/,C<\|g};GO)'|ڟg~Ao?1?+~qKS<<%viI^݊^;  A: ySL|[} >ĩmvso>/x9{jkrL^['"x#ǩS=WGA/dȍƓ̓ЯO}>,݂xbU{op OKƾԛv=Y%\$'9A]ێWGYU8z }WHf<䇸rzU܃^ gqx>iV{}cߑK=Ĵ/'~ԱDm7?g 7OKu4F. >?xV7使ӆ^mW3;=&~y^/~o-O|{o{u4$컭PX:<97B/>WY{Kĩk8 f;ybթk+=:zM^+ ~џ9'{ "O=gY5_8;.ᆝDud}O au;Ku,<> ތW\˺W{geGoXY~8?fO)qq*vYp9䓼?zGMm'Dx|s{~}H2|˓=Qx0-O~u S~'KbߩOYD\>zo>h_<͙rH?Ưsz ~]{#BOo_Oy ς'5;6_w::}So4|i4hwçԏ q4#K}p~;z/|}v~ypރɸ?wxzv4j {?մG ;?\TACibU}XU_+3{f~xeO}Н=_];.u[-ipؿ5?W֗}k:O<9?_[WJjSW1~;csűhǽ߂_>LGʛGϝ8~=ç:-Q=CGr?Pqx]~gw7ދ3qw=v}'>oV)~U?a>v>O5.z&Rn6uIq} ΪC]B/4b;Gn?p֞ Nk{b+r=9.ǩ7{/FO/c]޳}#q4^Ti֫$'y~ģ֮ 9_=s_yԉhKLx_&/#>o|q5_˽ٶ/9c/o+iQ9S!ߚsU9>{:؟Zk}~_٣WƍoUq:|.y%qy̞{u@i97<_A}VcF>_|n}_x}T'x89j}/a߈ˉ_I>7 _owUί=7P<Gg~Y&^Q[zo;U{s'{F폑r[Yvةމ/O{4|?Y'~6}~>c7jW%}Ϊ\m۪8GyվO:)>7Tq6' @:wçGyx/[z~{ڽxZؙ!}ޛTwy?{й+Ï3;(|:s }yMSZzkӶ~R_g}/^/ 񋝓T/ Wt^z6^s5}9z!|M{eW| \&v&;ꁏ~O_ _̾OqfWvO={Oй=y׼K#kKo/ZԵ_-ޓg9N3x)8z>/K޷Sï*;x!ߤc7|S#{mOO{ֵ/ŏٯѮg>=nyyH;aw&~E ?_7#g+>?wnS5h'{v8ɺ.w_s7 p ^r ;z} Y:~|x .6xO_ү8xj%΋7upC78_^\^~?E{H}"b+ůO=N٘O|T8h=8uo;< 驜>ڿ ߢUoop^ /Nv^'$6xw7So$r(~?/Rn_FO#؛w8OkSdyO~[4I<j?Uzgи=se;=g%8\΂},.oqzoBTS}~~O\HxJ<_9yz'I#{?N>/ ?K_3~tewv*=D,V\|U~Oןʿug"/Wgrx=&nŋ_OgI\eLo>7_@|\]ē>!W/'~0'g_+os^zו/>{|{bO^'/{ _~[J`?.?:<zz^ܰ>O|\g=qqĭ.uH389>w; ygr=^ev?SN~ƌ3/$ǭ~G&?Q1qBq$ ''=^x݊w3 ]9u\1ccy+}.Cd^͹ԃԍL^q~?GOg/'>J9UL|O)~ bߓS < OYב q 綍},ކzzSٗo'C[O{ .ȋ̾ķI#?3~bj7*:qvX ٗ?ͺp4ːsW܌? ?UХ_ {t:'~:Fr r {`λgp v>ꫥ7B/;xP뻮O7{s׋콻5s)O_Coqy~W˭3{Kqv"q9xg WOEO38sGxb}NoES'ώ:af1uuN,?ْ7_O?<ydU^nKr]z Ƈ.xX׾qt|rħG> 1cTSx4qļ'9|Ty[vBG,k7:9i䜼";O\ۅ/\s7:}>߲G܋@ŁK)Qx?_^ŵ͛y?ݑ:ON[c]$cumM~ ]O}>O^_?Iwˋ.378eFngFY7r}2{j9RvW+OL\ Vc&W?/Bױ{ֹIgs[x;ɳU ]WĿ&n|Y/gǧ%~/#g&y羋̺[-@_@9|#?eDtCvu҃Ml {nSGēu }Njp6׳=+OĪSr|Ɨzsԇ/gMd~:7?n['2~Aߥoh1qЗ?h|c[եGKؿWY7Gb9T6qO@[-{z?8CO:+>zW|J1?t*]BOWL|2.q%S&%¯J?~%,:%׾o{@^]1;yUL<]<"wvMo:sÙx";Mޱ!~Oϱى窏8'ޛf]^?{)n ^O}b{ά籯!v^KiCx#MފLL}E>SW5?M;xcA:\zdC<9gqDzϑ%+bYq'v,O}~gk4_~2{5禪;~k{b̺DߊޛN=YCxz+O_u@7=c]*NY{f^QCF{'S؝2]g=|ɮ/J#vo=B/'US?-RB+NXSq>/o6q_jAGПI_Nw}NoSb? G }xxqR/:z@śo:o+OK<^)n*~_x).o8j:7Uͱ^l4'yy Wc}OAمs9);!yz_Zxb7kpN/LMyae%<1qr.f!~1 ?_>%.q,Dk7[C/O~x_ 鵩gqZl~I;rLE\8\gq<&oF^_πGHi]v~Zyjkn[*~}LB~DQNȏ!u+8?;;k_%?HOw`v=٧4r=\.}sW%zy}y/#{!_F%Uf7%ou\a_vx\u>'dMSJʏs.Wr _/t<svйޟi}O%/+yWw:ݹN>ٗ3fTquvrO'W?uO7; .Vou}؏Wߛ+\=5v^?8ߊ__+$"z_gMۉ:Wcs=5Y7r=i'Ў ?ՑˡIN9y^OcV?Gv~'7>[|oc`gwg8~9O~6^BogY/FwvWQU/IOЯ_|}.~`eڬS}ÓC'r<# Ṅ[ ϝy G n} Gbƺ^St~ºˡ>:N`ǘk8Oey@~.~7_O9Dg0ǭzqzH6AG^ųђ?ϼ|O78z>=v2FC_Ƹ|Ʊߣ_G:.޵JG$5!t#ޛK|aO܀\H>:_,~HgJG/ny|t}O]K܅muˊބ|bc_)NYBK\C^Rknጽk&f_#%_N/=˯xB(&/WKӪ/Awq`Gmr8&o% yi^⒞}H_l٩nǼ<#|8 z"{P6rACC~m<]5^~ϛS㻞s*y9g?x=o8w>_p$\ߕ}Y/zsחo3ʼn8g!wvUF;ɛc|#9mO%'7y G߃,'rybA_y GZFn._r=VNʃcx:U>5D_g={cG}U#2~%._;svj幞PyYzE|<_~4>i[ϑk'_Gp^*(^ ^:8q9˟~dsS\d+i#8[e_awwo}:教}Bw)=Mb/ڇC_ysKC髇6=~R>g\Ϟg΅iƵsvO,m[vUQɼU:r  D_zyoncmsi>8gnq>5{ 9D~>}_`~a^ݹ^:9'>^݅0u̳×]a<_sƉ?x&WMPŒj~"]̬/Ԋo7=ozɲ _z7˸>eGg /|[ݺNܩ.@k]ck_{\j[~o=~A]k^}b_#t|ZDncCk9s!\o\Gu4-O=񉯰_wuZg^mwֺv{wm ] 7?w?g^Rxiyap8?vsMqN'yv|/瞨/V霛=&vMnuWmG{no\Ǒl+~_{_78p[sy:ê1|Zr`'cwSg?}.{RckWn7qm[N;[x݉N_Og>q/8܌\KWS^_g{U=x-^{N<{^{k6LtڿcwcO}洉Ӹd< ƛw-G~o;~ds]ӇgKr_6]vSuwyeq.ؼ^i{N9-,\oH0+_ե݇#j^ô;ud[y/swx&$F3=F/8SC_vЧpx^q㫓NgSwn_]Kיe'>:+rn9^GC]/3 A˽U\ϙH9oҾ$nY;T]?㜇쳘9IΙukՙ:Rp_՗^u=:9Ǯ}_:Ӿ_N񫧲y19ރ눞yT~^|׍wvw:穃<֦NZ~7'cm83 ޷g߄ȿ0d<}Yw #sQ57s$^ۺ:XUoUoz8}6K먮~+`˷mNI}un»bWk{_z;xM׷G0n{I׭qշ<w3侮COukkw6>1'S؟ OgU/E~sm}}GZޡ+B_7.d3YGiu> zej=4vDyus~g歵n~Ʒ;5֓z }S9 zO'}4}?^<ܙu{sj?u|3̸;k_3ƙ}?H;uV]oZ5|߿g?uY޺ﺶ_E6r䥑#~el6nl>(3ƾ>sO4犎e~%wZ=t&"79~7nr~4z7}Ek\Dn1.}t4y^emoV_O}x~2~hEJ;q *:8.ȫk8{ksnZ5ě!~'~:O}Aŋv|37{^9nM<<;vw|c?|d7Bw?i>C-<|v 9qvk|xOvu Lb/: g _GnzF/S ݃'_vRhkC /+x#]<\Ƨ=EM~}uKf}>Ư d{h?{^_qùDyڋ/~8ɏdwlx*{OЅ]ίcT|E^?\=$r}wJ/8.q]煟y ~KkopM_?ww7O4N;u>o7B_e;6d/3W ?[O';x*w`5O9'OЙ\'syf]o[)u'vVR̼*nc8_^~|/nY.u|^y(vo58rļ5ãW]v[T۟-"GJuJUc}N"Хٮ O\sc)|<_^~>֗vr/_xʺM]??~鳜>S5> N|bOzbǝio<]<\,_y$þ0{q纏󞥏;Ư okvc2q'ߞv<: s qsO O:#`]x |Ύ_~K0r{WޛP>AOYGmnp={iuaߤ~VO$$^gx-O_]1<o;yF>{(~]t:t_̇=/ZX||ovyoٌG GH>噷x|pľKxGZybgzbx>{,~% 1[;z&W\蕡{î_>70:)K]5#z煒p}2~%ħG<ѣ=z pS܎[Ϝ>[z˺Лݷ񧖖P-H__M?8|w/xDwb?teWOn|IDžա|Dl~v}~}ޚsm'Z߼lA:o>{7_}y }'q>Ӊ?y-X;7u8\ G|o~mm? .M./w\{ሜg?aD~^lHvog{ ;O0`?:Ho~qvL~w~''q C/ _?󈽟ںX73|,$yY.F,8Bڸ 8b~oYËus;yƧG4~v~ v&|>q#>)8?rw AOtx O<ѯKqvaCq$:~v>[7t&~~;z|ˎU<'wS8?;?mŽZ [?Z|j=-~W/r|]zm%nĎQOCܯǾ-xOGzo0jN~ϟ1!qoWQ<~6ݭ?6|8#L^]>&:#1X#Mތ?q xx}g<ϖe]3`/S 7 b-vqF+>{&ތڶO;`7q } O6Q'1wj\JoO#0xj?K4OF~uߛuc[~b#Vq+츿8x{=5{qGCG;Y'Ëu&7ȃKا$!(>K+>|[;}~ ~/\''%Y,x}`=i\mTy܎H}SnHWoo׆>qw=y\?K%ÞF#iSNﻎ U'լ4KA/r3xK}:Y/|D7y ЉR{O#Gn]/ުshcL?yԽNzȷ?߸'zvkE?8Jp2 }/7o2V<޸St68}܇'yc'_qk;NCp^%jp2b _s_Y/;.\F.cYPL~8-qm\o6NܕA>{k׹*8ş Г?ew;=~$W:^N';㾶%Hʎo'r}O?WqopoٕԉgYEwg!yCp9ٗo;88]-kߎ6⇑os}ۋ#],xza^KWGs3/\ۛr3XG~??\<[{rÊyA?$sɛc^B_>+?;=r??3̛km9m.Uvh#J/^M<1¿Mka%Q1sCye8;r~ ;>΍'Exc<'vp0u *u+8 F%yk]@.t:zz m'6vznGU0zhdZoz[W; ٷ>ƾ:>vDOފ?}>xE㛟ރ'v6<%^[J;^u 3Z-zvԺ4߷V5y?q|~~p3;{@߻.gr?󂫼}Ϳ7sp>U._[u1}݋)DOIOyUL-}>_8z}~Nqz zѯ>W^֮Z7K<[t֏x(jN^/ ޳e>:txOżv)vˬ һsxxvO"8i3[۞k{ֱˎC'EϏM=|F|)@O%o=R:zp_|&|گ~b=xҚxyOsj'=N:~W8^~}WCB4"O?%R7G8q88CG]?9u}ĕ/GN\ $>>tm_꿵/_iU+1t_S靝w|jQv%=rG:~ Oa5|N>G#)?'y`~\|Xv|ӹ42?vw'4z9\m<57vǹ%=4\.g}'&Z8s?\_?HAܭQ=>Eg|nء'~7pz]K9?vp$οտw≼dM~3[{m m7|p oH8p?z~腎9.tT?s?O z]I^c;Ds +-W;n_{ɭO7K~Awc~ ;N\>>xn[+~d!7ϴ8|+OгpuCxt^H}s?Dg?'އ×wy_oWSd1痓9\Vqj|_z 2n%ny1'zS'8WxgpSrGf =EU?W|-zDxZ]{3^vfO;Aw'sL_Z~7GȢw_ٯ5gŮ[oqk<%! nüĿ鱋 ]?8[4qy{לJ?u?gd]_'T |D>>|~_{!= ~Wk︴a!|v9y~RK?>VW={uz' ?;&Y>;ˇz;| g-9$?rd.-q@ 3 JG;|Ahُp[nzyWs3|\G \߷/-{8;>*~2x_ϧǑ8_w_4 *MO_sj<׌93>z?^v h >jTk{9~y3}y?ߓ~ FC֌/^C?_\[wiz̮Tܴc-?'ރx;\ȏϑ$ O,'|_73~:gGTP赺o?\(XK۽m!L>g~6׉Zzsx#sO'ɏϵ{sGW\m}w7 Ś.>~|k~Oܴ=_pzW~jjFw^gV|ﱲ{sy[KbvU<;j?/- ]_qG?U'oj:U}^!NS$Σ^5:OY<=:qB{; /GS?ͼ-9-CGO϶^m%i콷%NNnu*vҬA*w'q؁uM~ O$r^Aq4"\yRf=U>x5s%A<\xDU8g-s%8MoYtn{ ?G!@ tB?rz+Q;]O?^@}WyuF*>{ǎr.:'wx{tmߝu]\xo*|Ck({_=7n87-;^9Gx ? Wvp=Ljpz_ٌ89p~팛FԗI~1>-Տ~\r#٬WW/x?WW9ߨw65qsܽidg_>9\z4v3,wNW'kSG0o7)q7ܧ?Ưq%VhM1?f3|t7QzaW3\r>}K3i9H0 <痳*^n^#9{OMsyO%[ya'1|gHg{sҿ=X'U^Į_+N^O^_kiQoGMs7x3wC'D“d}/,nFn>U4n_QwOOZ:遱r>n-x|Q3/9hNOFg~:~}";۹=)~7 'np9e? G;<~jlݭ͒}^ KŌ#zj| ".5$KZoy~*=jG>Ӈ<} ܳO<7WpO5ǹD̿ACKy|N/)x3[S=m.hGEO*#gZ=8V+z=]_zm;c^)y\|bWӣd]؜cz+gio򾶡2*nSSw̿8`"nm4׹O<ȁ9?'uu17'8p=ܼ_X{;y&QoS?ϡ[I'D_ٿϢό^_6)r>Q_E\OCOq_;ZwȜ7AgpNC2=;>v>yo~:./L-dg{\"OVE\u}~Hc^S\wW_0/8{p.?oďu!8Q%C9v =Ԍ}4\=FS#N'}rVrٺ;~۽g|SUu~:Se7k%̢j? /m=o5ǧ?{8aqCvWaGθ~<'w{#'67zKwAЇ8vܰ/5jgG`](>snk:o"~| =7v'볋OvǸS79_&^']ѲS._1|n^>e=w^ w)pe\pbθ𕖿cO!:?xbtɼ:=\z=$8Sٗ1Igo>K|y 8=c- gk*;tN+'-9r֛||?]7x+.Σ/۞x8 >s*ySsa3{pEy`CtOߓwƅUO{_u>Tp9h܍]=Usif}ܒmy'(9>lwO|vޭxҍO-oi|?M\~~Kxk<:=/[Gr|[~Me`0Os#ׅό$7̯롺umϛ;PsኝL댃9q߸'bz}3>x_vFdEp|qhvz>Z|N{8s?}8E[I϶,>3\ыyBd7ѳ-gt(ϥsex3㌞CK3%>>>YoA?8ӕ"Wу^8N˒^wqqHo9W2r.Ywzk?5fɍصeWvQWxgyo`ߍgzߔ}Ug=y'.q_<=c=3}Eu~JbơC>O ߉ 6Yu~H{GUq5c3ߩdVٍ-:DĮ¿ >ŷZ<ǎ|y~×3yau}~9{~Z.O'?_K#~Zrv{ud^ d&|G|>h=e٧WtҌܥgu]7IަM~v_?LxykEn^sϮ0ؑqcf=uIoZ'7ȃa|!9W<9ރqpKu>/ru)*cs[)[7~o i[{[%?0h?2x~o]CG ߣo5vv8{-×I^>Qy;uK/_.}C'^5/Sg<8;₩/q?^vEN{~0?rj_ \GZkXu `uZƯ? .﫿[+;gQ϶=gk}yY?yC/c"vбU~6yW?{8_.\TqCv#w5DGw6vc[U5y~Kͺm|yOEH;8z|pcq{zI<}KYG~/7{OO~Szj^7~z#ϖڧ8WO? }r^d@Ipc7 _uxyg?Y>/M!zgaϥ?~ ~3{<'v':EWxBWo}k7&~wg ~#猛ͼ 6zhF5Zu?#2xӢG h?=]r|n{b?pg$-O/4QM^Grv[ux_`o9Ov/ߟ.9xяORWه ;E;kQC+i͋]LyO>Y]Au:y NOʝ<}k5xʦs(><\þ=skG'8|T-xzI^ʾxy7upUor'~Y93 #68jH֧<-z~-K~OyW87po2ov?~Kb:{} eN?zbs.雖Gʟ_. ba띝2Y~|Y!u7N3<_D^qM|g] 'z>6nP{yEswAm<o/K?ϭНx@89^_?+sE8'2هW8įM|\ܲOjcϐc>uqgiG:_ٱWp7ُ}S_=_g|#!ve_C%+y']W|i#UB_`G\X?+Qxz! ]gdoF7o܇KyH|tyo̼r3zǛ'Gwe9%`}At)~u˂+C>wZ_ux]4zΏ=9& FO_Uz6wz֭7>=qu3_UyM܏Wq2#?d|]v8O3N/8~O|~mOg-ys3'>_wQ$ns<)v\/~pT8 ߙۇC_k{s[3vȅeWQ\8ް8:⇹0{|8j KꉺN{65|:%Ɠq/K]O~?a$E+:/?|nħ^5ϺGOmOs M|:]od^Xϳ+_y2~ki\X|.뗸YGr=98S ~{p(\[Ow|z?}wO_#~Ǻ>Q7 _TkCnjr< /i>/oUv[y=ܟi;w&ܐ# 8/θaHax>[OuuA)<^/Ⱦ_C?>uOZ>Ǻ?ou|[qgy~Az<-z7cs}mpg<;ܓgrp!e>>۬%/E?x!rA}y~Gѫ۳g'ӹOpONߎs??Z#۝&o_yke%n2v5NF.8=~EҪ)9>書uůoƏ~Gײ $Wƫ5?̓@o0nv^콑O}K:{߁:>q>U9Q5*`~/\wOO7<?d7ޚ9;ȣ/|yu/q+=w-_}7ߩ[ipm?j5͌?1ܩ^ox~x O'N|ٙWg8cw??|Cx\1ŇM>$0aC<wsy;oGGzK O";bO'7 Lxzo͇sJwOZ֥=J󼎇[ϝ&.~ٸ܇o߷_ 9^"?q>W|S}2zQ34W_elO ?{pEn+׆.Ų+^OvuTqա7ύSӒ{ﲓJ4=h\|L5Ζ˴KQxbCngnj9H>o>*k? N~1Wf^Z{؟5zaz?!x|e.>vUWG9r^ӎxv}B=gɏGw§?R`/'#uAp3ؙ3-#UԳ}jx*=_jGv~݂#ykܶS;xٖߣχo=7 zoL{>2U7C/qm=3<{<#g{8z/ 񴋋cΡ ^)؁:ym-ڌoc>C w/z=G_|-j#b/)~#~}rÎ<5'~lsjG$Oȭ=:lmW좎3O)kS_םFg;}~ /HU E_Ng-G›fg;:O ^Om7]T?U~߷<_| 9K|T8:}z}3ETTxL~qփ(v?ύ`<-i8|3gs;ioG3S_WSѳ7N ָ+/Tv'^+?g#ﱡOco3WO$Ь\M8|iyj7SgOY<Ǝo=:];n?yb ?()v~j~wI_F$>/ $^0_G}^7>^yh򈾇sC4M _Wyh>o{T Si{KK͊f_/<'q73~}+Wq .;x7K|EHgyև\yzGޜޫ}Hv/׹OUݶWύo7gE몫d//#~'Σ%\?^ KXU_!ޖ]y]w3Cly1詝^驾_cmoo+T-z8W7$?87+>kKC xW1K~=GG:5We;/ɏ-~ӱםw{Pmܰr>M㮷nVv"k*G"z:gŵN|MD3\HG$|G8K||xE?[{ یAWG߲č ,-\Gprs~<'O3vk3 Wy}دO;y&8_Ŀ˱ΖzXx2'y vw8Cu݅=)<]ϱĵ#<ݷ[Ν;|gO;slj+ʇ?{a<]yB?{8f\-甞08xƏ>bH(OM勖quP~iiYuA[< >v纇jJI}5nz7"NB&>>Ǯszqq =8 *n\b㠟oJyﴍ[_zw{˶eGWNn{N|?Dlpq'Kr3_q*zg.ǿIA|OaZ{zL\>bz+3wg#Uoweu[S~x/+~s_?is}#У,>x6AM}9OYIs$z|gzTZym۾jDZy_p|YO|}&G]W~wǞ[>v+o맫EaӞ?uWpOf{{^{3ٯgkvSsϯMeזxxeSl>#q_Z|K>b7H|;ٝC'zUwo(l;r~CǻwH~/>k.cgA{N ^ߕ^>[=xS_~G:(zkZ ]]/q*<.y2e~^-UK~iџ?񟺽o;ÿK~oryᯖsJ|o[.8Jzw|O-ivN}{Si?Z~o-u'=i/ԟ?swgoD/uD޿o7N뜜?kk?~M}Qy_:Ի 7l_vWG[Ǔ駍\Qnw]b3C~9L=nIj3Ve-L9g~ia'g}_-uNA{ٷTyew_RxeN}9:[ߛw8|vƣ~U}m-Uwݲ:__t񮮺{𾃑^^lxe~ٺ_k_qkrz\0~wuzy~c|w^z})]S{IoCWyo\lz6_uK8g<>uzZz&˻}uwò~Co[~-@{>9~ͫCw7g}qO;lƟ w=>AGU?~K;C9ƹ;ױ/܊>?-Y˙%:nEpc<}X|sj}.mM;}[_X_3~:/Ƹydxu-/zܺl̝E.~`?XO|A|o-o{_ۡN??_q#}(; {rؼ}:/w^kO_Oþ.e^ŻI<֕Yq;Y֩ks}.7_O?m||9o+wB_;‘x)!G鏦籈On%/xG)Ǟp+psO\{\r3.u_C?~RڞvI:sص<4B'"˶WokwS ;.Q]s~N-\y a7]AKr1nW|Ȟ|#WiS0yu'/1y“ȯe۫귎YG'~0~ŭ_3}n2~˝妿?SZϷ鱿Cǟf/Əro=̇~~_#R?3xoڜˉNzsIXkWojG>/|_dz}nы_;=fN{-~he<2}yw=PsYeq?*t/~Og-xXt]C_^/ڒֱGs֧l <4^lq^}}Gv5?7'8`W{RPߢ_kWgֺ؇gCGSAu'S^Gw7WSp'gkBGrv\xn}~ϳĝܹ~׎Gv[yv<_c O?:zru ~йeco-Lm\s]?/)q^[")󥗭y73~~ߋ;GΙu,<^yi >8/>~-|ͮD߱}`w|yx¼oiDGH/\oظ=t3gu=^\w}.~x: y~zOx>Tκ?ENძg|/ oF{<\~\<Ѣz|ڽǰ#{zzao8GOیz<8o#u%^|G~wgYOgIzn׳G7{~xYu,o}Ɠ:] :]OZ|W'~).qDhkߏ[?s fO8WS3NoxqXO~ۅC_9/9ck' kxzGNޟq OUu_+=OLmN9NN3kOO?PC܁'08juIfWg~|Z_[o]ɵ}\4>tAzߥፉ眝|%賷gbGDWo]wsU=GE}|.La.o8!zz~Ͳ|y=콃zZ~A5>txOGNZx>o~ƙ͏ӹ|b#-̾MwGp}u|?áWg$^05'Tq58}~DNߑG:6q3ǎ/ľwt~/T<;폋?/҃2or(~ ? x5Ƒcgݝk“v]+y=!_z3LaozY^׫%ܰpzv=dF3rn~.iLtyΟRN)FO:"|r<~| &^q'nx|.;=Y?-uXphH^}%uw}U| =?pT=|p=sf?lpq6&v~g7\};_=?(ħ1i~GgZMuk?ȏY:=Z}O}:>l>ֻHM옮k)B_XIxSۥak?4Ok;u9+{/z“bWW?n=N3ב[G:̳Biѡo=wK޴k| /:k'9~:a|"5G /7zoơ5ﻚ}o?/# OO7șgmZo~wsoΧVO~7Dz31~z'>uzxi ZN'Gw'ݾx[j_pj<O>}+۳{< 犉cOWy/W#7qֿQ ~Wzwu N={R߆U\_W*[dWpC_@/>xK{ßr#;O$<չmw+nNЯc{xۜGlكE>\{eKmo^-O~}~=@o3p%`99Nm;xwXs$>qS9WO+r3Hܷ:pg|+?WDOi+}>zEo}@`gӟ /c`?]q~oOЋWu#/~v~鸃{#K_{:Χ/~e'Zyy'Czyjs3E⋮/7_r`7s=;P]?+q9k=s[ώ8۾yt ~jw6̻8A_ Z}F/?Cp֩bxj=#mgJӋ^'Ϲ8G1ot?luG֛|O}Ĺ{'Og_>iF=;9x6==>3m'|NOkn\|wy;_kZb't\g#9/z'>Jzyщ}a{_':?C/H`oO}~OC ~b:%:&^OP=D?~~ƓǪ|=>_?&8+np?w 8}/Yq@u O;Sqf}#3qzFWߋM3G{yx)ũF_OݚG^?[#S\;lǍ>nfᛎױOSKU 6N<^?)gxؼb<>k=no?CRrʺ]ꃹ|οD#A?'~'y+iO\Gx{%u3 ]ǡ.\~_?0|O'??t׺;^am|#A >B'd:>(z>WY_qsx>OM?JN?{Uq-:rtV#'wE Хxi;׌_'K]Ǟk<Ìk 0|_e/Cos8~gyr UQK]%%u O܊g:vUC>?o;q*Nq9Ž_|k ۗ>w#en;9~mxjg3v_לJ?%.3<6^'yίu| .Ѕ`'5?!tuW/>7o0~_х|%?RDo$'<?zjZ>\9{)^.?eyYݍYO0['8c~2/|N^㚟|v tR_H={|S0W}/x{7zkO+P~:zP[^HN^I}tI#wO/Ǟ$UotUxq#N]?AOރ/'uBTinI|epF]Kg3}n5xCA:k\ۣXpDya^*޸ou/U~ep~|Nw\[_|+@n O_ЃoہOu7G[}6__[y5sƛc™6s ;wdx?<wzb'Ǟ,;pd_ɉ{COt0fsSg^1x'9Cxz~s]OxbN~xɹQノ+?p]GQۓ~RvW/{eu] |`p:r G\ _{oxO(Сu7i3{Wzd}ه9G O#܈iUcShxbO O3|t^?c/|<->ytHב7Eݻq¿~Ių?'@eS ps\^G /{o?wȏSy}/OK_o yΊ6|~tk\Ɲ{>{[.vo>O=ﹽ_~Aw@0y!wOF}_!3 §_]7x#n_ȹD/c*j?co`ͳqr?|hۿz%_w8ٸ\]/~ 7W3+N?o]h\OD`s`c1O#Oei{4X#G(^}O'琉q_-o:/\^؏5ڎ_ev m;ߋ#9b1y~'/7,OC4_R9u֡:ɷթ#{7}df|G:Ό:NؽGcK]8zuwbg ^(nH_>7KK,/w8O\OjkSi;`ָ魼iG_2SY{O/u|} ~ ֓~"gzGx7iOPġ֧}Q}x=qS3nrZOcv]e[ϫ>8s?!/9R~ynꖼ/`A!xޟۭex"S_>mڝwmIx*RɌ3 y>}q_-yǍ)9T[pzuQ)gvҟk_Cʡ;yš/ם|8U$|VQs]=SˮZoIC?+r?zv|8q7  =nO/<F^-M~oⁱik=ޞ%os*{49!mć&>~>|s=wxy\~x̣R0u]aqp~GsNXլ89g 뇿nH|O14'O=?/){xI-x\٧c;u>μ78KyJU]*wQO'?o8 /~ DxXuG'O9?OuNE|W[3?~{sdG QM?[?T8j?ǾBu- g`{[ƥq8d<}PruL/o|N"S̋T;?u+.?vxj_GSWS>§ꅏ߫57G;-}:'.x2Wj>8Pwvѯ>֕A_myyOۃɞo/5דs]AEcXqy"90n]u}d[ur9drsaa;|/g5 ^{a YGq?th,G囒O!]rfGjܯ?~]w8"Oǧ-?2kLܢGh]~[uc<{n[÷YO~߻*ڿl:6x/Ŀ7y,rO?wc[^w<<"gĺY7#[?÷yu1K1̇֝=]ϕfbws?|SW+/8:g}wSy[)á~Q">)G~>Cy纶8|O.yo#_ί@|zs</;{Ug>3{V<;"yY*E^?OO=ެWMuޞ?YOyŏzzocS_~%~~;?z&זm}MY'3^CG'ݺXG\C>y)>_<݂>V~~?5󣟻CO m>:_v?{ e<۾~0^>8>dW?/N O֛ݧ_+3a7ꟿ~qg~=~݆'tYk]KW~u`urro魱W^~vSȅwq9_n-7>{Яu>ЕNByjKe=K\Ky}-;" >俙o?yï?z_UKj?_*=e=o;u+&t}ьڞiqtl1kы7SsX\:^÷ujz`~?\P#g=OY_z9BO3?~ODggWzZkqGO~'%. .'|?7u3ڎu);9ſI%G?q)u ˎy|N[;?Onn~^xyock4G7oǓɅيKOڞOOwAq}gl+q6쏢f<~ۻW g7S'y ď>xq-n9?SS, G_#uKjpq߷u7?m9ڎ5?[~sE׷y^/<_]Oxq}EWl{ޔ}7:#]vqێkQO{t:di'[W->eΞwm+<7>OC϶s+;>"؇9ve=?]4׵J޾5SSN'|OZ|eu[F}O}a/8o8q߶%yU=|J-x2/u{|n֗tT}qћU9z4ϵ݊#?="o}oXo[Gwn U߿Yv$< .vS5z=4g]#iE?w%K1?~^hyvaǩ̻ _M<8ӹ? O+:ɬW_ >;G'T2nk9/W/}vq8[oE*=n5mi|pA/8=G?}}7MgO?;5yw_x>kݡfC'܇cߪKY]~3''[wtџyC|Muxn;h\W~Jii1EoR~Or/Iy_}%ƅԅ3N|cKO)ָGy<oI?K'躶qQυAy|w7yGN}BlwxlyXxKzg=I?:3=vՍޗ_/{2=s%AsǍsa|/#>Ƴ~= +=jsЁܲoɭʛ#G]bį/“*9z >'~ ?UGzO6ZG}QqE:mOݍ<Ao~􁢣綜o +~<;n:^[c̿}~C}~O]=H{sYu+\{>>Eg֕}zZOz z>w2;\>ͼQipy;yS~莟y^ur:|;/xur,]7wֵ+=cvO} ^<sGٿ'j}|Zzz8I켷$}纼'~փ}>~P,SʎoM˶ڸj|=gqy=.CtsS}v=9A=Z%7!/!?[_==f>oxuPLr}q|ɺ3imξdÉy}  s+ m YO/۶8jo~v>(yg|қ7rcwz(4~'/Ua⯿z~JhWP<\O[?{C>~jNy͍nB9'w>7,qٶ 9n}:qђ,'V]|787Ǘy[_s99y*5|ءk^C?腿泶я}s{ހi?uԺNdC/r/]m}vSk}E?g~oj \gQzp~iٮkIFnszm\g ׳sП|W\-Ɖv^wNOw~_Aުg>/A>k|{U<S|~R3߻v뗼Xg-~/zKKvCͺ^_~Z9;&h|O#G]} 8<{OO/ ǝq?+3~aKÿ1/ѥOpdΚvKD[t߳?̣zOpiI+rY[Zu֥T|pʞ?:.'gCpj~pU_Ϛqô ֯#o魿?ˎJ>Si;qR|ck':}vu9%vEs.;'#gpjzc?e\O%z>o]Nzfҟqzz_=v/]^9~ uOH^]>БW֟~םFɽƥu?7$>1qN ެg{p`̟Ij#$p-;z&8>fW򾎲K}[_t1^qV|?vqOo}yO<^؝Ovx. aB'tZ/T_x~>kϵ}~qgsA.3k?Û3w: _/?Cݑy~x@=x\G6NbcK:7Z~iŵγxs~_NOgg<*G?οgcO7 6prSjw}:i<{~i77Nm7Sύ?Bx.nyּZzzL~o{泜{m?ߣD>S>4u+Xǎ֛?k:^<ᗕGoyޜq[㺐/}>{k{?}WwyK~_[18Y׳Ou.ϰZ|:vsÅ ?ٿY|-/3|E[sUoty#o y^opɮd"[^ww㭿t{;._L\θgy=<p^0_Os[3LN:⧎O-/;qsxz}/xoϬ+ O犗-Ӯ-8<3;-yc-<_nįet@׎/I>>i;/oW;opv}7\] ~}"z>Z|t\'sS?1{a'! w7{&q=›|ʛM>*1ů'uߩ~~EO3{g8?//xquQ>%O?+ǝ=x*\%@>k;߬_cEwܓ?'S O[_؞+{F3կzzr>]œujuٶ~[+?}<u ay}7KŎ-]߳_›mo[io}qsރޜ5A|%ϔ8݌K{8O:x[9aMvUUO\m=~%vug6|_~WOM>L-~ܧI?b3giIף'g#K?$ް}S n8cǽ䭿/NR:uEypj(Alx㛮k߶ny>`?qn>|[W|_*L|=\GkOd%1zg|Sȉn߱{#x觪_){~<b9ueg}qvy N-.~n'jpK/_Q=,£:S2rގ8}oȩZgnr!yFv ߻lxO?{myO1=كNuu?-?ji凵sx8]'G/.ȁ|?i-88) x߉OϺ伽[0v_S {K?}o}^#o_ ޶~qr!}ӊ\潜'S{oB_ CZú~/o;Hˏ0߼\G˶~?G<:K%<{p~r/~|}fbg3~oPL?5V OՏ瑗NzZW~UmYu]Eo-z]5;z۾>t_u{CC-;}-:}`RX׼ߵkO3%;u~Ws]tk;cл{}Ǯ?Z/\t߾4ޮxw:>Ȝ= oi'Su}fKwu󻭏xx-뻝:R3x7Pϐzs^WOE.|%SI]kE˽Oy>#:96n^ums^_G{U=x{x6{wk{s}?o9}]^{kwS{ok^{=G8zԟ|W:*%|+9yר籿yq]'|˶K֝ꔺJJO]S9gyC?usפ^ϷRYb!φ>?n~.9O\vse~_י/]_|ݾ[п1>^zz<|ヨ _s xa:7}kQ_ cAAz'<~/;y~~Ij\ySU^4N|c~lնWva;;w:򅜽^\sg=>+ߟDNe';nW{r_˶#v>#ٟŏ6Z|xWj~8O>dW:9tŭLZ_OgN|wo}'|>Y>|BXMl4=O() >uZ]A^ߎonou|蓟'ʺ$''xY_|L\}αK<}~'J|i|K`g{Ztu盃+KnޘsGFo5ȏW͞pޚsf짶>7<xZNs*{~uU\{-'\r:^[]#]9yo\'p/94O?{8y_cC[qLJ.u'N ^vôso߅6z2Ok;3 z ]G3?rB,nvm}~؝p陸E/Yw:^C=9-5fWr|e>_-<]G1nÅCGZ}'#M;kޛO;nߎ3>]oYz}:>/hȍ>?8;*okΖW9A뵿w{߇>o\'}.-q#G䳽/|%|z\wa_ٗY>Nwp~aX~)~_ǩڎz/9N?=q?YI`x>384>|.w_ȏNAqqC=)>8B[={vQĻu<~Ӻ~c/•q[_zxřZ.ӇƋ/==;mn~U_{6:Y'g{*yt?l)>8v߭x+MϪGw>)\~<=WV~~}?yMs[7u/Ars~ƻj_cpɾdoÃ>MY<%?/۾kz0G,Te{y !27bg[z}$G v^GK.Z/^Ku ;eׇGNɸߏyW$3?[lSYԳOeVYͼ_u1_OQƇO]oCƯ_]7.ުހv2yn;|]#q}7κoNOT'S37'9>7wug/c闫ezpy۔>◳ɗM7~WƷ[!%LMԑ;̇~n|-lџ~'̣ч ?qn~% K)Jυ#HO:_0EZG&'~y}NIgN9wrz|A>SO_z_tGRr}G:%C>x|E2߳I/ =_iE4Vvc!"f=|?xu3_ =Y>~<&9A3uK/iec ߱gɋtm6swߙjI$~u?O?z؉qms?Ÿ3?t'رNm?tls{[|>yxҹ'fEޯW ;b#B߶6-NUn.guj?9Α?koJ]|8¾'GoKpQ‡7߭/?w^884F`[ 5Y}(bTݬkx92^  '?֫􀼱/cO49!? O}., C:oP^_'!}֍>o!C-zGJXr+[E/r]=3+鹹=c'yY(ޙO|̣힎㱻ܸ35K3їNn^*e~wf^N߼`Cemz8}*-&i{syQƆ_W8'^xz#KN/|L3p,Ǟ$/b7]q<;>[ֵxD졊Oïdq>bîNy6?Qf}̋t|__ҷ9o)oux->U7z`sѼUxx뢾33Z:_聎*֏|觙×O[wu'm$g^/># ; }~qSrqȳQwʮJow|x٥pC|/>7/y&sOlyr'L&?=v:Yt/~3jC1 OM>[Y7#_'~9vNCCgws|\vz+36ȱ=>K~}ɋ7x>#{Sq/#}gƯNEWkq8uq΂y_Bs~ck朼oݛ.h, [oϞO߼:$ )r%9}O8Ӛ/4qaxOGO~5n}4zj C]n OkNܙe[}pv'<񪣄ȍѧ6u)){cSzѳo|Č゚3o }~GKr wc'KoΡ! w9 Ǝoؽ֭.φ'g%4]Tu̟Vޣ΋ޮ7_0s]3xmO빻<^ԏ$Sng^̓~#.>Z>ߣsW\oGO fqv?93noS}#cϣrOǴ=~'; gz߮u?w"?X|}g=Q/7uHyZos]ms;@/S~Cǜ7Yr_/}bKܒ1I/T8 jz l(q̡.~b _\|}}v$~`Z~'nGuc}ꐎiOu^͋\?nf' s! G?{?o2OOث[9S}qsrA_^L_4{ wu/U<9 GՖkװ֋ >_)r"/N7j7j֩SO<'?x~6y5v}>0p8zEZ\Evf{Zk~|q?W?b{;> pf~xE w'~9hz8ԓ/6QH]3qaa^C\'{{>%_Ӆktղ7GE>߽?[qvP|bwK 3w)>'S(~ y<{J8/)}t O>7F3r\xw#?&O=ztGb,q+ƌHˣEn:?|ǮrA+iϟ?_n'g3:۶kO?yOSoAj7J=d쀜K5o>_;SOk ;;O§M+vsSǜ;=t@oUsǎ5qGly 社wMlxSԺ_wy#1P~>;꜖=xB/iߢw"G\vPp5ב֏-.8FONA#}v^eo';~IޓW/<~G×xb!EnST.N\ݧo}%pjO>|ՓƟz꽥+?9xB[cF\_|Oۻ+ſOZ[ >䒸~8^/p`'? t4s)O=s=nU緬R0t/s;N䡝9N{ C]:_yKS& #>v5{7P]<")ߤ s%A|E~s(>Kvi/'rawx*{hɃZ58toÏw gºwKcs]ٯB>Yr@}dS!.d=O}0VookɧwzOّp<?#l<>9 ͓I^wZ>:_͙)D[spl|ƙkpP_Zy5聜~ĝėqhÓ|ѽ?Ppd$[^3>qIy}IE7j}<ď^yyT3;;y5x'=|й^5~"WLy=y3: 1'<_rE.ϱstޣ73OӷwU^"eH|@k||Ò5{T8ZTKZv^;wkL?9{dc>8b{v{cGܙ®sT|1tC,}2Oj;W+/Tuܻp, [3v,?<+=_pzJlxb ]Cx0cqqzjdo{Ot;|+n݂;~N|SS'uuPLoC~MNYpG88|Ovj;>`?I]_r\xgx.OeC圝%ȩ[}pZS{$GwZ߂u3Uc{`;_I^NGszi;5wvM\Y >5m\7vJ9quW*_ Nn=Ό\گCrw}Iu^n ? ?5jX赼oy_޴Yq|LFvugǘ<лCf>SZt 9a#n&qѓ|W|xw~oÇqSkS7iUTpnk#;N<$>yoLz3#'o՟k^K&z߲ w񴼟ZރfS\g?o(^5Uϔ+zObs_oi;`dz>OoAh&F;v7?Y{eKs퐾΍o]-Nsnd_s$ʫϩ}kxBCC u Αn}Ǽ:~~ؑUb^+u=x2yg<;O{ѳo]ɵNZnrO}^y;sgU}gwCq񒮧xjƯޙ~.8>.Yu3:O^H=rn{zt8zWCoskc_gO~7pe+>:=]NzT3-o(i9xb_˺(>~?M~':t-(Yv!=1;w'X~vNG*gۏgqW$䜽9}~q> n͖<,uO'&$κUێ"3mܨxoӲNz{>n3׷P|>#_c?s]T'v_S0<~28PGsWTz>/k=WaKp@ɺ\g޷oqr==ksܴ<*S#Lq;z˹}~  }zY ,t;7ڮNo\Az}I? -v98ȱs㉞o}̟ڮ3ފ~x ~xwr~3)Tܚ}/N?`A}ez]Wr}:Ggru-Ewra_ONO#xjCSə%~Zu=~'8KfO<)^~>כ7ܾ;㊾S78o+e~S뀮ů7\O7H}#j{럋|s~?U<_.`Ɲ(;'8uDoE|O¡I3|:uK}(yV~:qO'ٟ_Џ<ǩ/S Gw+/Z/<~EĮ:)TNO hwMk5.;_|_ߌ-gc߯z ~Su{f?/uDx~S_K_^{ۏ9ѽOQ< &'/SOϏυ'^C7g+wD?zZ:jѳd'6n_[~?c9񵹏}_e%7hPoDc2SӦ%ڸ.;:[8zG~j=ߜkự9suC_a.WUWtUo%vo?K4}2iϬL'~t+yKʜ ^бϏ1r~88zn/7i>/'_OꜦ.l\=[[ig}qG 3ލxտ>OYuMύ,"eE<_W\5y7dχuQT'm}3>`o\ߏ~ ĎC]Zdݵ)ǹKurys_L5upIWJD]wE]qZ8jmGR` 4㳟{ߙ<{=.ֹe_q?,{bAC?Ɵey^)qӱ\aO:mZvn _9O=#_ksxi:[Mw@%=KYώ7G{x9@x{7|~rѶZ*^ ȸؙ>ox\%'΋?fk Z't;j;ѣk<ӱ}MG[tBG}Dő\u;tfcGܠםo]ǯ~gM?T'O7,ە')于3^V?ZGvqu<=vHn>w1Sv$/ .\/COw- xDơCΛwouƞ';<}ߣ_ :.t/9|r݂Oă}{/rN{ υ=H|oyFW̋H'8ww9vw`e_-{IoG[|%onYMm׆I\U. ubUܢ}T/|]Oݪ7j?Yy>yچ~;;{u/Oq.;/S;?J}~ CoyDԁg2')B9'O^_קl$G;yFQ!W=7q~s{y?ᬇMu=,} =no/[Y8؏&ܓ;'yM]Aﱓ 91>k?_u'}O+req5`?_ַp yBO =u ܇3vHxUtrO\̓={t Yzx}h@emyӊU۩m>Nqq'􀟎/~> ܾ21%0x!? ߭sDsay6}hs>n{K{ȫv;>A?\`~Qυ#[`j]k]qK~/=}6g}q߾og;&Nn}bapfͮ?yxi>fȽ#9$WV_GpE_g#'޳kFW2>mW<71$;3~y~/h /e=_ןbony=GĿ+֕⎱Cܞ__'+sXK?znȍy%O!1Q>">v|Ù?{gޭ|oC쾪C]_? oL:w76E{/z~'Nk߻A'NK->? ߡngcG;yWyS:se5+'U~~yףǭ1%n,*7vO)xpzƿa}G?/}=|J0+A>f =^O~[O~-}>3BfydG= ͽw#/~7/ց~m+ÝzVupEGw?玞oqMԿp1=^P??|pBo*quzG[_Oh}Tćfs?rI̋<[ۧ#IO߽Nvrk[977n< okú+ApCzcɫq 1=?Ǟ9:ϸ6\5Uv|>s{O>ohOWƓ89}$ۮ[==g7/}'v "p 9i8[;޳x]6z@L;<]#|G]{.3~Gl3/⏞ٗ}\l=k5g?G񤹎ȱs N?6=H1'fxӑGٺ/8ORb\wߞȽy'n="?ʿGa?L?~{>֭>{~R]ON8όBkOu);jcy[L0>ܰ+O3>ꍿ0bb[U(͟>x??y3zn؃]4''ݷ|\ǟA|黉{Zw;k{?>ī˻=_gphfdZUKj~~OG$ox1ߟ c1n/0+Ovߑw?˯˾x]nG3rHk/G^W3+m: Gp^3v[pZ'+stގ';'< 72 7I? r)~k<9{cSS]K>??v9~蝵C75NOL^^xc/&. /_8q3 oc𮗂[Iat'̸obE>6~<σ+/}xy?dr84.~ȫyu>utk\C>/0q׾7J<>O;geWɃxa=wǯg-O\< o◘ryx'#O쥿þ ;>O7Óx'U<9`].ӫ嗢}Ooy}8bRK}  Gq o3︔=8Q 77]w}>bz/:ݧZ~DkWxa"U'W+{n郍F//7v+['.:Oq)z%^M9/|, /~H>3Ӌk`&x7Ky!rh@N~?=`Ëe~Ԍ8v|C''xɞoSO4Q[@5܍gQ1<#8h}!y" Yf0uMY'^@^:qq4>(yջ<湌_'6?ٽ{ԡL\{'K.'S7>L;wء3<]}2_ﵾDO/|Ot2xbQ] _~uK/~ Zyzyu|ؕ} ȧy/NB~jx:iρO>9ثط~7^/yևwv}:ܱkGp6+yg:c<.~?}[*^<r;9;^ӳ'xk~u]OyDN_v5=O;pLrH>ue&0O߆~^'W{:~t!|KPx O9 _=]8i6=n x"w}ξSD(7>77.K~Fgu9ל|nsKT!<w߿U=.<|Sq-_gCor"o_"uﭟyyrB/>`ٸcg9|sO3>ħw[lO<;n<#x7ͣPXխJKSWPF~?tڿ ~*oԌ~/7O'ة;rΉ'q9Jx}|o}ͿjO/}0?/qm~]oO'0o㹹ΑBiާ|zY?<U㱇~׌Xi]c_Hno|hs=“<7gx?|=S4E糙Dӗ8=F^Squ#vtF^|zyso}q?.r {ܺC{5'~!qsúyG v_i#9< O {FgGO#귽vOy1Cwx˙w_O} /\q·qloEC;{7g·~G?,ȿy 7>ջ?}^_Kr-N;~v~z9I}/}-$Ay<5WN^Yf3_KW{<8[&ӯkOTxăqOxBݭV'/i4z<zB*%?oR'ucڧ_io3;=o>}:)k7o7bswr9vT/W5t{x/¸ϣvṇ~_|= .yG[_Ok/߉}:(ܴb?_@r>经"y?Gxwt=^;+ .=|gܴ^{qd֭C4/g^ߣ5]/Wʗ\)|+tu>33}_?jU(x!cy5~}߻2v<~.w}y8}>~ix~Xy_rZ9:xv=ˌvWe|_vz۽U}y ?SۿKu4O\_Yj)ogrxIOgױ~Us,Ό3՟;cp^?&hӏצnzO>ݺYx]wt$'Kσ:\_޿z<б^;s7Ňo<_ŭUT?ox.s^y󻿨z٥wW}6g߫~w{']_7z;{vc+_y-vWȇu4w=x}Ͼ=rȅ߿387]Ym]lϸoNӾ[8ۯ>߾Ow׉Quw{繎KyO=3y?ad. 0nwi>\]}׎1zuz$9IND=гG/~9=g8 zb1x;7u>u\+oIO*wڙ_Kx\g{KW~ .VLo kOy߰X?=8ϕ r{y}zk>o>}||Ƿ5C{!3'~ļyN'];^lϜup'=3yʾx}yq'߼x>t$Ͼ}'{_'.i+Vihf]̾R[4G=~}TO58\uEꈦm~k>g~~1S#{Qmr8{y+Gr.Lgׯ|xzX~i/eߨ˪c:OuiɶιuڎV=xi۾ַT}~w{gtxC{ԁ[ϼa9s7oS%}}οkc)Fݩq|ȧﺅ!#k=tԱM}z i}Yt՜1O=v}.zlat]'̻<gȱ3}O^&?Һ['x/:oֵ<~}v]4+ƮYWf>z~>"sdW~}ԣzՑ{p{;yNF]jލWgߗy:A] :RG .WS5.۱׏\-|kAx'<3{3~?tîo:7~+ xxCwN~7o˧f7rk׽N-opo\YBuOگAn?麿k?WriGY7>EoW/:yJ߆rg=~:n#ӟ=VOD?/'<{Kx?|sb;a׋XgF_ʼyO=a~"]Oyp%> x}ſgOy?cE|tΎ NL9zNz;Tht>ߞ'[# Gͼ8=}h]g~u(ވ6~|\Q-xA+x2JNwϦ/{țv3~L\71oƟZz]?#{t(=Zyv& x* w?)<5κtk{<8Ht;;ϣ'nUk}^<}^H|Sڵn|7ȷyi{kE_ M?a|?y拜gA;Y;Ɠ9}oVI)N֮~Ϗ;#n?`ow3|/yx<]%Cyyz2<̿7zޜ3>ѿo]?]'MS_6A'J~/5>Ƶv7oG9x~هG|%8#yǎG囃+8AoMx|wyQϡg/'J;3vO/_y߻'ه?mii"oq19v=;%n0ӸG\awwOK<=yqqiy;~'~7{L>] N6;y@Xz~^wK~d33s<<_h~?Lx&;Nǝ7!?5޲8~;I̋_7S'ȃq`GZ/·䧇u|?%&uf723/ӧ3f|[u#|N.ŧ|IMya_U>orG፮׽m3;>x ?x+^T_ۙW  g#WӾ)K:$D&zO;WxN>.?k/}??$.b8ihxGgsx;95?u3KrVGB~?◽u3xG:RwސxOb_=8+5`y.=H[8麽Cmo뗊|_ N_ NOzμʃ[?~u ~ֿٕkW"ך_8Ύ{Y -r+n*#go+#oÍ;qCW~|OSw2p.=/CoC~g?zQGs/zǼn<Ɨ_| OU~n+zt[ygӧ $׍[|`>quI}O{q=rΐ7vc~lC)#Nիf?^#_?OO~qTzv?7]W'^>^pniyx3_?ԟ'vצnom~+7yY<]:sw=sbǵ[ȡxĮzч;l^nZ<'^恝]?J&w~\|ޕGm~#ud'5~/?!\ٷ>2ܯWS/Gh7k?}ۅcDoV٫;Co?&DKtyd768uT1<_&'W(E_ n:kOgOGܵk\=p“v'%F>߼Cy7zqy/:C/|nXD>7<߻?d|m<} sݮH=Rq_d8:yϕӑǶ:䟮9]d_/Į cn/ȇ{SϙݗP>kg}?SѻřO~Cw8?ZïcBǞ(l _޾<06qbW`)Co])Iz?@j?8o~@^xމM8yK*/|m׵O.u׎GR!^>63]ݷnQꙙ$Mpl^ͻgy o5WX;_wa-xJƗ^~z<u*#WφOn`m=D8^-}nOy!.3a~ E/M}}/y~gx{|zr/xGy-~OxT{AvA㲼bz=GQ{Mvԁ{qi!9}#SSuY&ӐChI]x uEՁ$gO\=<%^|1y-k~1ȷv//ǘtϘ|M?7bt߸x\{4՞9_#wcyj|8t@[~x_xhxy#k۵OK99!Qק>ddN{onyYG:ɗT/}/;7ӯ~/{}^>>ݾ7V{LkSޘ7}饯%9wfS/j?u .a>~vGZxJo w+hww3kFOyn97]F6.17/x,T\IoJuXOzh`oRhwU\uz3[:Euf_J66<6/OC_>NS;co!K]T ~ޙw-?<ɟFN8nq7x[Gx\U|#qADnɏgvD~@ZK;u|TpCm$~N xk,`+&/7x;xxM?ĩ?z!}n/7/uɿ/{~[*'wyv|O[:]w7υ֫tX<ʲg֍+~a >x'?i'1y_zonq?K?3D9y n}|n\cω~kȇPg@$.kgI)yv4zi3+q?);6Q?Iy\;տp_yfL~2|ƥl'{wgxz?X&͛ϳҗ6rrbɋٽ4{SKa{^`G[eF C>՟5=qKw:ʕĩ.!yX}37Ӵvrq x7Un}籏#9<yѻ7`xǓ=xt{#d~gGmH]_y~?|#Ol;%o*k7R_;zno/ō<&;qgyGɩ:| x83yK ?VN)F~ +vwOuw^B-oፉc@gkxJU ƙ ~,[mx18ǴgŅ_zs7/`<`^8sBfU#_])~v[ /IK>ʍW[/s4)7]GrW_.‡+}3~7S~})89[%9W΃]_g}xx{)p_7r/s{3$v]&uˋx yN>!rq>-f|>;P%>}}aC=Ԟ4v(^W|\O{{Mg}\?/~|hq߫9E|]Qa\g>Zt{+G^ک&wޡv=Z</#^C+ځOS K?#v~îGI}azqot'q_o84>\y?}\u ŕzGKANOw<}#q=q{io< vݿY.Gx6u=OO.1qJEy?_쑺]0ȍG:'qO}.n?g?@rs~ñ~ƻ[H<,>}rϡk_|>y*O7S9C:z=~/}~Ln4?rN>ZFr~Rt{c<[^vœRq_ߨ#P''#</zsZvt晞cuWG_vgƍ}\Nqcw3.O,⩼t6{^nFgzq3]իuԑKɺh>.'{!|w_Q1uo3/8k1xں[0/󮽕O~Lv|Ӎ7r|Oٛxv8!vYkW6TT3N?W.F&6<Չ_+?s>>8;]__jc{/y7vwewzb/!u\$gk~Ń?}'zߛЛ//8w$nx}ȯ?_8~Ja+=WH[ǵNa#gbWuq>%_~mB|MXyO?7&l;N%zst><׭^?UtT>8X*qqg5~A{@H>vtq0ZX>'_F/m.zfs56;|is{qpuKC|E?@̱?Kv3O.m/U]5@>/{t] ?pZ~3'zõW7'~8ѱ#l7R83IcwG?~C?7/n_{n<>מ A٧GW?Y=S]8|/{O8^u?zlKd'<ɸnu˙'яSzN(y)79O{\C O_4>yf#g>]U uc]?: +q_k+es|?ۓƓq^<5?}VW|v}f/=ؗ[QǞ'oj#oyZ|daցNb\H޻>d)9+Ou0s]8֡_q7 O3uFk>A[U1dO"G<}~3<˟غ?/8Cã1?lN*%NxXWc-ocg"uH^\3Oz޸;s7G_dk暑f_;kGUrof~O@YqXuoF.L;3[F2xRWu Z-<5λ8S.W{#(Wtc'_uF'OptW<~3ݿuƧu# (v7˥b֋exY]cۧe#=!Wmr0y=䑛Odݖv%6WGy!~6*?~%<eR}=m;_l]|\?zhշoy<{P7zkiOpT/>úC>lznGcwz%8 ^,υo7nz׌x |gԯzAqVǓ“;_g_|fg+ol,^|oU_vu'oߟQgy㋯ -wx _ncG 76̃x,_8gW̋x6~7Xqf޲xJ|'#>8Y:yׇ5@-qjb#OsQz>}%z/UtOI\8vg:}χ[OYڝS<݉G'Oz?@~gx03<A'Nپ.g;f_II*{w/g]cN'9xa{o,|yߝ%7TG0F=7IA?l>Gd}v|j?ލ߮j{kǮ/ 9iO.A|Ӓ{)o]y6n}Eb ^?ƽO#'?;.eW"ߑg^ß|xڣ@/Ƴ~t>z (l_ZzM~kfMjN Qݤ_M/ֻ$tv>[$/^ OGu~΃Nsܬn\|Nil\`Ŏ\.gqC~Qx؞'.A3g[?>בrP'=Oֿg'+ ~ȇPhR?N;Zߜ|_v,z|yˌa}g;[wӌ7}.q!'u<WqIb[wI۞ 8"JkG߻:!r ?6O=Rۯڃ㍿C ?WnhwbV/N`<~&~ɇl?v87?oPO;Wx/ȟ ~axմW~?DO'uA㞗{w_ٙ_uC/Wo]@x!N&gsbdzȞgmJڻ?q]o85~uʿ۸B5_=~/>qwx q|<|e<$}' |qwvLROzQ^vuwߵnŁ<}i~S>2qwC02>}^?xȃ4}ozi'gu<ѻQiW4o!uhaeA{Z~+cv=c8Kk=|yKݿ O3O>m\,2o\{~7[21zVxȣهF/Gac._^OOf^fᆲxg/O:ߝ_|dgY7 `k{vxyׯowh\~F>qy|'>r?,=г%څxSxg~[;oe?8 ~!2+Z?>GCz!gͼŮ3~yݟyq}]o\2dC>yV_x9/nL;rş'yis tU\==jȿv<3⌫0.K}+9~_:9(;"͸m+񅭫Osѓ<8xž6F+xo|6A̛Ϯ'o䄼Kz<'rm`}d杖4'mގ>(?:|r xyvGC%zWxIzӼoɕvu$O_ϹՕk(gȉv5›}0cgܯluC|r!y73~N})﮼dwϯޙx|=}nw~{!G#yy?WvxZ\}O'[;/Wv+^_ 䘾?>~ʿoJ hރQ<~8}Fv>o^ok|gzܘ/O㠟7x"W䈜0NwG|_;fJߋ[u|I;7.}Zvk^}7}v:8GK6NO?PiG^{?D$S~|l3 ?༭;B9<5oi\8<δC}K3ڋ U?~N55<<4o7G̑dy-z>=伵Kow|zjq[$ O\Wo}=\[<8<;#{4NgNvnN3}ƽqi NV}ͳ{xUN??oя_5~f׸o2/':x$W;Y=slܼ~84vX{1zxq\sqgF>h]?>4m=w~px;S>RxÑ/ƿu}~_tO3~|6g:Gxxo}M8Cvl`Ů|%,@[O<]\o}o_7zȎho$?*8jO_>&~#k߯>WS,~9|f||fg|6>`xZgaOԱ] =H7L{}U5w>oy36N>Rg O#9Ưn6qdFAƉu‹/&/@þ WeU<l뇶i j>i?sy;FC͇{ǰCG_HG?vױxi'>ZμƋ1pf\${wʼn]3}w8NuױuFENbjZg'Ox&nG~nW-NsCsQ>da_7>xM~망mkW;xϟNƿmw~66ums>~'2OF]uMMqx_Ow[ۧȩy0~971בgx0sqLuiCѮ!f?]GOw_}yG.9j3~C> LgAS3N}7=en>p3Dۘ~s+#Dy7_| OoLN'q9Spoh ɓz%nwsƃg>=8N;=g9ֽ[uܲk/9_{58x;;zzM-4/pD?nAѩ_?Or'x?]?tjNIV[\x[ͻOvUP9בG#7go .>ov|q4vq ??eܲݺ;r}<vկ4η'}[ө-CʧvS~+uco<p Zͫ`nw7Q;Mg 긮'~#.rxiw?q._^9'sy1/_?YgϋGǑK¾#7\W?z_Oku}l#\|OAi\mcμi\o=݌&aݗݿ+͵~ =<5N5n'{惝7>O'/bw@?4E_`q?o厼4;;Ny->}.|]5?ZN_}jkʃxL3}dWy^j_Q|o?Zz!uY\]?~,_7r ^8ֵ\OrD'$[KO:gGyFo%/ G=xhxGKU'Gُbȳ~~,nL^ȳӿ{^)m੼=S{غ"]bƇGы/קXv8ٺ_/ce8k3~QquC~dϽ5OCnw{O|zG>O{x|3ҁM/OW`'+}?s&֏_=5w*o__}{=,;#na|ǻl/ހ?}{Zwkwp6߭NLk+ sȕř/vmWSW<v!koM YF>`sS}Kv}u yOѮ _cѷL'Юy>5X'O}HsT諒O7&>#GPW=\<}$M{UzIsWm/;i\g^}'y&u/b׶QyDsW}.=;?M9=;WY;V$j-ωKw|D<.,Iϛ7o<)~g<3Sn6KXޱ9k7Z3ڏ<=I}ɩ@/cvh' Tda\W_Uvӑx.̇VoCj}nqq_öv9+o_3"174='?E&.rO/GOyǑ?}܊'}?8?kqgsKnߋ]~?Uکx9sS~4i}G<_u2SsqEIy<_ac0W; '->z}>!3do3iݣ<.9iCvm9d|ߘ뮆z%.ct/#>S?^z?u3PzL{]?Oyۺ_y?Y0{:ŭk~wډC j~ <"v/ud\؉vI\C/W潼W0Bã\߮/\˃pnnk{`g63θWԟl`S}&+g~~7AyB ~jת4kg]4/IGē x8^MEw|~׳kqI_K܂ܼDPD&ia?ƽΣ'WοYG;z6򆟇E]܇~.x 0'of_>3uV3v(:ͫμw0fڋ/-NyzLysoeoG߼N|}4}_~xy=&`lע=x2C{~{a8yq/u O'Z=\ox=)<O |_i~e8y;9=>p`H<|uxd^k7:CڞmyO<gz;Ӌo< zW{kn+;g|/u_A7uma}GwG{ _[GxΧ漵]+nCNohsYo7)r]8iywl_y!(s[wW[phw k'~=N#y}@f>^m?_h]|f YQԏ彿u{_*rT'?Gx>8!7ud^iwsszaܯQ?߻]:q.N"˃ub#L< WS[V;mogqZ3=6ewnOk^̯g>uA]}h>\|ϣܷ;:|ʳL*GZڟoc3<6T^{z<>9zg^u߇_=p{{//xyf:w~0|w`pHש K{^أ{qն3uK/tw{z8_7KhyP_Cn8|OfOvOv{`?!c>x3>dѺopx|>O><ןq~sylӅaO0s]Ӊܬ=8O?Ͼ?珞q<ɝ̇㉜g;w}sq<:/>'?o/x+{c_tcᙝ3}{6Ϗr'8北_ N?;f?[]wo*/wlAV??C㙾|GԣwG=\>o>}||Ƿ-I}x{fy|~GqK ǞEh,;?gcތösq<;g7혺~7ou5,f1:cſ=~wSz?ɿuJ?}oo}_/:Fu3{ܺG=>C>>?/~03s߾SbvwbA1uߋߝqdzOaWSɺ_u/N=<;wzWzXe:_}SGP}ߺRGzTL;=͜Sk?᭳7N~f쏣>#ꢿ<[gbݟu4R',C8>[tk<$1έ}ݏ\;msz4ټ:w]_ώ9L~)NG0'^=9I7nn;3nlvC_yyC~n߃GocgG^+_c>O0u9p^fڹ~>q+xv=.Hw]ٿozgN31g^W7Wɉ~3\~߀~aߟ>e2WG~4/Qz]ʞqsk]{v:T?v)gzo{$C}c8+8+w<_zDZ3Oo\;(߈n\c+|ɋ.Om^_;ֱ6^Oy{< B_E{:G#!x4>~'!)gwx ;~1u^f\69_^&9 /ڱNuc~'޴7旟o5X',Gy!q'bG̋X8/2cwq ~{==_S4qs/~O){y1h~s$.a;FY[|}ySþ>qg|$y}77%/v?u.2}Fss!d:p`wuWT>LG_~WpEߩo\O=痾?~v'_ ?֗Mc?UL7-O1pEoh/:n^?f3&=|?W)Onjcȟ7Gc+a1۞Wx\pnmy}|Nʋ/Xqec}㌟4^EyX'$gS][<'N^~׿/ >;| A.^]ɩxoO?s};znv<듉sh}.-.W޷?<Óq"=u=px}z?Bϼևl=g|Yxc/bG6q]r>~Gxkgz6 <g|7]5.w֎Nœi>{pOz'u'']g>£~rq7CΓgw:9|uo-3}%|?z#pRx'o<&ydñ7Oñ[JiG;$>~ u{o'TOC?fɏWZc;|^>w~/z$>y}〟7667xvip'GO/#;gv ?g6g+?LG׼|hyo8俿y]v1>?ç3y3?Ó?<| oc,oXuq>YVg6)_p/Ge<'o?&^3 ni/Kv-<`E/oW]vPC&:\OnD^c5qڣ?b~%!>uf}θ;T[Cnܕ\l>$G?]xl~~}] ?v_qw=b(L7bar}3!ηg$xS e[q8 G?w]S)]<=d1x{~뽆`gROgv`\#~;q-u%{z=ox~34{ ~?C]2bŎ̺z˫}xѼzwvx?O[eԑO4k_~oy)~c3O#_p2zMɥ̮'G|oioB?Ig OO2p6/>u/,|c m\}>˟uٯ/$w67wГ$Z}};[?l7^x=C3O@{|vN|зNf'5IC|<دx?7&x; _G?wI]˦YGٱ-CW9[1r]O_qODCM -~Swq^y$ްKX4}yOF<Ȯ_$~2Ů_ g~[ޘb|o~?GxcyG_Kak|:7Ɏ=. 8=Mϳ[/Fߑ_{qS-{w͸3~1׬We=O,ƌ~|$ N؟ {:W/S~K|tϑî2_KKϦv`xS}09r?3{'w<4 ^W8їrȧ> ? ɋڅϘ/y݃GdZs?ۯ}=?4#9ǵKszxq?c}Wng\8l]%\s'X\ɣwhxz\7>wyxoͷyþU}Az*yaf糞u#prΏ#aӋ8A^&78=//]Fnυ;O;/z|y9ߙ\ O޺r{v|>ƻ|F<Ş?|ѧP/2t~ɗNi ul)&fjw\ x0/\#y~ߗ>k}+{߯:x:@o ߜ7 oͫrG}_0N~Ư7{ݏ`y4pxgƒO:.:evM23)?]WwƁ2np~…^Dnv]rtƛ1p$>{xʹkW{6>o׹N|=N n!p<KxZO8p:ѷV<4vw</k~soo=0=Ϧ]CϺYX7puYׇ>v1^ŕ7b̛C_׉K6Y>SJ~}WN{cUO'XpR}03SWv#~uBw_?ܟqíkƒ̎:wO y+ԭo'78,~}+Sbflʓ!<ї#wc'USč$gx/8t$~ !k#Z^gnUDof5y'u*`o}٩Ō#'Eady/}FosG5ėu \OwwEU/ԯhOq|//=ߑ캗}{cƥث/+߉[L9ǧߵuO׷ ~]կ[<~C=~f8̼_Ogϋ}-o`w_ř/y|;98[oCw~'㷽>SG?ŵ?|OCʓȷ}k9oCϬ2_[3m{y\4_X ﴞuuiTn8[9g}WϟPnu|p/;䃽fZ/xZN^}~cWP0/v=S<@{ak {O۹y"x𔸄CgǷ^>X˱;GԉLJ}{?}߳!_gxe^ҧ#Ox2p|p+oe ک?ߒv]o%GS=w_&X9>I )~V٧y~EY|d~`3ϫ깟|pEKGœ'}_g/|߼fjȽ_~L= L| ͋rL?[m o&YuXxwc?kI=Oz̑g4u썸&͙_v>y}sUS}yɾA<Rkro=.^#O~'/cWه.\θw֏'?cz1yM[xf;"=}}9 e={`g\8?޷/{ZFu7qxw'w}%=+>A^رKx2u7cWO~XF]NAyq7I^bC<}z}K)R{_=[<۸ij#8ϭ~깵Gvlv_}o>^C|J>T3q-O+CzuΓ\7v;vWy}G8zř< 4v,gq}?_==o'y)G>P8p}_9}xʱ:%xqd?ӊv^sdǜ$a٫'3vj[q "S,/0E{ΎFm|/uKd=a9v5;p[<^-+1ɯ{5KHı}4>]h}v_v# : q '?uӋ#wYx6;Ӭkx<}ǴS^4a?;0jvmKō&N[x`vhX+qqۚl^Sc>x޼D<[uJ7vk=~b'vFOœS~?{'viy|zM ?;"g[c3/p&Mgw?8\o5x~ ǿvkcXU5N_Q~s!\w>;-+7E~ '6e>)I\xOo>:1oyJ|R]iPK߭7yѿx<{7&+xh;UBuwG땲.j)|Гbo}.v={D;ȅ j>{G˾wӎ 뾁oA/qC􃞑m}M|b\ӵ)7 ֯1_37oy/]ҮCxo ilxFgv }~I܎=OG^Eo/qog^71pD&+(h<GII;km=̵w]] ;I_ѷwC{r+n=aZ#WbO%_}S[ë7høq~4r{{k|x6M?_FWIT41@?wrWO)Du]ǎ{c:7d_wTިS7ةm9i3xظxtcz~ǎ/v?r~.W}O_Y< Y1tk1{z #q ?[!o:]d}MOi8'ݯu\[瘏3vӾSkO{ᙝSAG,yk28'|iD}ߏ9oi8ܮ'Ozѳ_߭Q}~f] #^Og{_u#׻ɑ9ױk/O?9Swm݇Jf#~Ay3}_'/aK{/O~_ < O?O'qIy+i?f<÷^Nvf>%ԮWD~<_߇ONghݗN}8yz=^$TzCyJpY@{“q^<*/~l<% O#$~MⱿk8[|gJ}aҜdHDKWugC?#3~wo[_;~)8ٸV|o :p7S15a\Û&)ͳszi/0__dƋy#~ϔ/<<|{~=+8ܔt}ociFOd0pXf~a%Kl=ڙ)}HY|}!藣Wwܸ/^_w׍縟z/xE_:{Zުxy6/=/n^Uer#.uO۸Z7D8zvqqrDߒ?m/8tvE;|Xx:tu+kqϧG+GSI^e`z{>x!߬vA(6ׯ|oGgzG3~pqgB;\9?Ga9Dȑ'~7oΎGާHsyrxܯ9iq0?:rp?G{/N~p?pSA_/~/ޱS{Ec~CWG?-_'x|L<9Jm.|k>k|M"K#~g_>9aSW~;M\yY8ľ/FQo=\)>x‰su-\O'G|NE?%䃽3x-v|?Iʼ|wtwo\_Ϥpn;~g/_7nx_x'ĭCzU?wz}i\}OO:tra=u|W䇾>ruxDӼμ?kkq_?vt} X<mӮ3l.觾7DʿyW=xOdFѮ[k|~0'xuY7Nyߴ~<:ܧ)~N|n<δ_اz>9~E^}u_9߲#ez O#q'~>vC3+nlx}&`?vS =3j?vC5دs><[G#jH>8q]7C=M?g6Wl0x0.p7ܯ^dE/;~T-u+Q^vcwdq7M2<8O^ٗq`4~.IGi~֓e?>@>kRw8vg>^<㯍WOFU>/7=/_Ÿ|}ԉooj:Sv.Ows6=8Z$ļ ڭs FAW)~"r#_ξo/Q?/.7;y/у=较xZGCo+pҸqaCלv uv{F]v=4K*g1}/3R͓+yle-'_/y-߻s}v|%>~lO7f6H?(#~ָ|4>&z"v}c}(__?{xy.kV7E4]˶_g]nU]T\<%^^9b 6.II?ouʇ[ʇyM\~W󐍋?Wˑc×k'C?}YͿZ"}vSR>.z^U7a[?WkY7•9s_~柆ws}\x2~7_|zOw$A?VsX^7y(y~|~6V?Wxzcx<}E~vWG~_[PwE|Tbj8zV@VȗqO͸oKM' M\zGG>/)?9g|{lN Gx}zE"Izg<|As)Otu<]^:>/2Ө&ތyNum|B̓>ɟ&?vћsGC^{pe>~O_xCsߵS_5$u^s7 oAoi#ͮ>Wsm)y-X?+3~zTy='K/#NXg9_ADWוu=^Ƀq3y۝8C}wUx78qxqtO[@7qC?k\v?=\̾y׊jiVȋ]{څi>xڧO$]qp'GǵŒyw7k:4[sﱎG?}3y'9z_qL~uiQ~0쌼5Ou>\g4|xj4^Wg#̃qjˎA?ƹ]]޴^v}ռ ʇɻ43v[= c>>'_g|V@yj>y;yV^~vc<ő}~@{ wޱS w7ֳ?#d^U/Ɵ\‰}wׂF_i7E뷼/ݲf O7HoS׽/ίggWfݗ8Gn϶~g}B{f3>_߿?zL?~玓mtv8~2Tʳ5ޟ^̛8WS3MUL ."9}w8{fڍw{]Bu(yfy/})I{Ɨ?g}Oˌ#ظ'̋|O; N8ڭ88r^/ OSa\pg9q_rK}=\^}hɇvhy%Gœȕg:ݯdCG<ﵶܓKM:=Gx2 ſ0N|s_S W3Gw}!}lk^Oy}CEToŮOxLpON<\~8>|Ot׾P4q+#ۇ?ο5+BS}/l[Gx韼9|u?y[v$~=ul}=9ˏ;`__Nqh߫c]GrSyo~qr^y7~oג#m$bYuTΉ*/I|ogśmʿwdwx,;H7\} ᡸk=Dhpe~~ʱ;_]~x+LzgmɟfG/s?bwv=z;l|e_x"oO6~xcS~b=}7<.+c5nxi|~^;ᨸѷp[Kuv)$я/vݸ8j</sR:čZ.ĺ 3w4ƅ~W "=^˩KIՋYg9ǚg2ߍ{+L^>qc9{mЮCO֥ǦWWkO!j޶nr68g7;;q{~nqB֗vGY[gw#[/ EY8`%{ˋn5~OS\w֥41w=Og衹G'kxC$+p OOLDɿgBVFtṿ|/Ij3K]^{|s< }jj߬qů y:xT?rgW^wl|akSgiȽw(gܧ_O&~%nz9Z^"o}7Wa~?fz>%ءƕw]ޜ߼[/N>=3~~v.9ql߳^#c=5Oc8ZGuHu1gzxd5vO:~=M~ ?ypoU_|ᡮcGvi_b'n|,?x;4?-}O=j<8c )s_qzi{7>z.݇p%q*ʯ#7[gx2;{澎?r='3o{#r}v=k6;p1~w6N~5qP|VGKsxxgc_|WWLwϸ/Oei<.뾨Γ0E=­$gƥw~+u7/>{w޺NI{ٵڛ+gr6Wo=y[ym?2[$ޛ>ZWpa<z7qܱo繿zڥǍG^3f~>΃'iOzWqٿ]⃻5~! x;ȱ8@aoqz#wyx'9Z?| _-o܋^sW4r+>Og\ǏE~aڻ=3%;y.3uR|u3QOϐXOxucW'{z$u;>C\W%r̞IsFOH ^S/{S˛by/:Iu6x"Ko׾+zgl^8¹z<~v}>Dfnfޥۭ?;{C≼sbqcپ{ˠ>7bqZ\?3g:w6P/OxO{05}<_S#zTƵp{bv_ykߛp&_3.ֹpW<8J{8p#ވ'oAOݥuI]jkca黣}/?SO;s{eʾه}7;>q=u SNofl\gڥ-uSS׆⁞>'Yǰoщ糷7Guq&82'_>)|ʑ_}V=x[ip%ފ>;d>}o]=j8,=|H8?E\^/ϸ0C]dgvn~$CgӉwWC8<[_;zKgx“Byi= st։cW9og{IÓo̓uջ-6?i _}<o)C=c5F#Ȯr"ocgG|SQIo"p8.Px2_}Wl~WǢ<}l]c܈ "'|O^ xoȕ2?|8;Ӌ'opkZs޾u^$xg qtN _cOkGR;V\}Wůe[I}d=uk3?Ϗ]:+~ƕO'}&LJ:Kx*0S/ǧc8v 8 o,qgWw=|L?UOfuTZ8vzS_'ߝyo hnw>niX~k}.uGqpȇ}d^w|37^K}z5ǬבE~ϱn~mw=9N\=>^Did3.k4jʭ}?a$> ˡ.x:?'iqE2{O@hI٧u;vgY.{Nnx?GWݜ4?wO/wska#ϛ78'<#<5^x9g~c ֌:۹>~3jE$Q~[~on?U +l];x~'?ߓR>{{S)NſWW/@_~$>=d׾9kIT4-.şc·X7zD]ݼvwQ?>vv]k{\~s>g׸S~s~C|c/>oY;O}q#rNc؉ 8?^((N\|]/RT96?rFn}|8ȏc##yq5pT<>y(ox /;t>y}O)x0rBU˯F]/ǭkd7V4%39^Ç#;uq9Py:tڮ3}U}_)wK+ݮ]?k]}ixϙ|Cxz 5z._ayk_E޼iOV?^X^U>;^|%?=iGuUO=/zO??oǧq_u3\-qw]y.cݺ_ofﬗ՞/>r?Q>מ3m<}{^]O{ؼ=9c'7|v=>xxD퉞z3f}̮w^!wz}N_N/.Z~3Wjƶ.QD>Y~m8^.ޞߘ2!ՃTHVyφ}/GNgá^S>/{xu;g1wxsz u}]_b}:3f#?;yھdLszYgYw˿{M4PZziY?]!K{}WWw7u?~Ͼw}v}߻~p/8=y:֭G從~u]^:֯YJg<Ǿ/Osuց2P讧>ݗ#|oSi\<.þ[Ԯt#뺠cu>αp>p?c\m^<[ouV]7r>eޭ G+9uTϯ:s?Cg|e?bI[=`G2z]W1jW:jzzWٗG/>s{~~]^qb?Oދ&렊w#GzG+:6x/lxq-uJ{ z}oO;z}/f#E{W?53;oq\e3$~&YWf?f}^fG'>LWpI[5Fi=,?f|okvÓW>fmY9w]%sG^~oa>~ܱzsqn?\׋+{?+}.1zĽIF\kzr<=5kI݊H 18|u]:ȡy]0|qy9~={~<&|_[猏8gGN/>.+/{ߌ=':{[PޟYOA~F=m.p}_{wq}~?5/{Czr(;?=@&Nwc6=Qh3qv%zE95wB)9ͭ4D_@`߾{_^|=>4y緖?~xw}|).i88x}=vp?Wl+y_x]ڿ6qWsGz2OǓD|ujԥlݬدOst?Uߢ.xmϬ?8+8`9Gwlu/g\>: >ξ [M~gqt Ow?> {o|WN׆U=hY{f>w~ qۦ=NupO{V_ybݵ7G+C|1}^~%<o~|&Ǐcq-~|dkđ[4Y4<ʵpqW?\S\_Y{3O֏]Z??_۱P{佰{wS<aԱ=1P숼ڇ}}n.*j\ ~;Z {Ozg4|O\oT˸pfCO^Q{]o݇vW{|kyy"~|\$B3q32'ޤ]o|UvZ|wD{{#zE)6;O3+zrG(:Gonwq%x:xWJ~=(N/}v}dwh'|Vysx ~<=e^g;V8T7#.1=K'r}C'qiɟqx>$`޷h??]=o/v#^|ymY9S>? gGyfG{&(EO?v=c"m''G㦿2Gy|nD^>K>w[9e/DM!懜o%q J$7Bs3zbɾGgg>9ʟ=cN^`<|/ô}G%zzm|O;^j٧׀~&d-Z"_M}lḢfBZO\^^'Gz+þ}{p?R~svݷu޻,OUF|]ā|^'/q-<=ӻ7#.go4z=i8<>* ?wINߟK]܏Yn|"GoV#Ǝߌ%nOpkz.&-_^_/_<|:ʮi~ r~/^=Og8^=_^:F PUx5ӎ[?=}ہMuK7>a6Χ~a }.%4y=hԹ oky<Wdwԙzoa{: 5v{j>ycud{S~U?-j݊Oϊ88yQw+<ߍg#|f'qgzq<9gG$f[/G? Ʈ=5+_x4y[<G^.i)x~?ߺvӳ*r7x gvԺ뷭C+sշ~nKtyN['k9|op|&\}];|AiOkgQ4)VM>ci[><ӟߝþ>O]^'/i72r}7g러> yGأا;jOx=G.=LuܸOnqp O>/Ψ;So^O4yܭws3vk%kӯϑ櫛k[cI#W|GO7׭o?n7;oO?_;7!WV."'ƏhǛy[v[^I\daͬ c'r4rO:R :]w<}3h={=5vl}C7EHN1|d4|s:z=b1%sSe*'x6Aox^Oɮ[yug#~kGT;9j>p≝<{wS[^)'y6}~""/[<2Lԭ-O|<·yxeG񟌻u"JWSsM^< ~cSe['1z)'ߖG8} ~Ѵn>1vojJ]B~'܊7r==u~r vyT7+#}zeyLX}=r Ocgo:8pyd;>hku-6yC}I#} OgI]z񄭷ڃGh7~-_>c*['}*ϚWx{7Ⱦgm]c'&q+\9͏w=,^м5}Us#aE} uᙇ1|y8̯uN!7'q{ȭH6_Y}8,y>6]oC~]ӥҭ2mѿx8Wߋ(ϋ7{ռ5iϕM|l ǐ}X~=G7~C%!7iޠ>R}ӻGܼh5{H/o>bKzn~y:/ƾ^StGdCNIzٙqFy]B-g,<778.O<+r_3|pUO^\QgYKx:_3E x<9č?yo{WݷX^org<O.:lu`<8S~<ӭܯ](EWOց=3O{<#O}o:p('㏇[ 9i֛O׍G߻?*>cEG?c~xܒ]0>Z?ASr/|7wOzRxj\Zogoy[ݕo~ϋo%eu= Jn}++mW{T7%3%کTDwkŻsu7>| 7~x3y<9&NmJlp'?GhllL{|r>'u]ޚ}By%!}q絾_<: ??}~mIOxvyuG@ްy]ӘwOrώkz b(y~vx}OlYܲ1>rN8Igv^}"ypT`?]sQ޺~>wLݠy_Cfx? tyn ym㙿h/Q~5?^8wϷuvՓ'm=ے'q=_xĽ_}St"}W9O^jU'CEĩ7{CsN/s7Ó˴"Wk|?}/?*qs`^!>T~rѷD!us?q?ec4>TO~-OzT׾3_8zGurϟoӳowȌ?7O=&>$3 oŇ1g| Er>N>{:ɫv]O'<ħWӴ ͣMWW?xK}n'B^}rkG_g@O>s4к%vU> {q_8:ܞ3Ww_5rq*9i>n37S<[=e;9}bGmL};SǑuw<pf}nS$O3]j!~oyZ:r!Cn@<匟]OS|vm>w|g qKK%|Sk)yٕ?<ԣN;\kݱ 8㷨G_it~^>;Wh>耇ƵO"zodc) 7K'ԓ7~O3Y~8< Ϣk3~N7=zy+ #w:B Oy/iO6P{.V<57Ho삼s'>/^GL{yv]q̿x\0߿2zWHﺕK|罼اև?.;]ԓ[3oLcԿWg[<5tG~d9Ǔ'x9wxЗx$I~CH}uqH=m~ֵ1kNؾ`cn8"~qo}$oGѥO?mj\|oPo4f&ۥ>oiywR<;] O>OstN_TxvJoF a[?8[ޱ^j镯:>C<;5yWOO-~=96}x(#%u\+qx_!ctV|-Y<udU޲ik\nTpQ?4r8u7_xF.7])^9oߓ) ;?˯޹NqO.Л|+gh<%^!/ߛ}n=~S=guߺ楬Yy W|/x2n/áҾSwb~mړڍ3v.}=m z$nv3<<_=x':z;qmm_ׯO,NU~ۼO}X?+}<ԟs<;B'*us)lzʓzXK~+¸ ~=Rv5<7b}n+mCE?u|ƻ .?szC>7VG>:U{mOO0eIʺm8|^s6n7 kcO!OiSѷg| ^Ȏu}i}xJMzLJxzkiK| O!Nk?x+W8<{jv5^F-Ndz}}'yGg-޷Yϩ_KZgf e:o'=gU/+g/P|_Afx ޭsxwψ}'uF#'.lХ:Õ#O݇Sod==reױNGx33I<~o_gKyœyA^/[?[~eOw;cKg{p_73R/Έ᷈[Nίs(/%>}o|uR_~]G}"Եq툝5񖷵H>/~PAY@6KC_g)m=v˺(x}sOx}s4wEuo]I OOx~zTy+<(_o=Irnz .-5V_~ߔ}!Ny{'rpx?gxjKOGzN/~g~`so>$k~Z܊V:i3ixB{xFkykv5v/_Q6=(nߛCg~7K,./:'ĽI%|דB ?uXW:Nٷߜ‘x8iK]~~ׄ'qqqM{w?c}Op}w5o >?fozquRԼv{{>H]Bgyһ>K]ƼuG^A~[d 9(Kgu^R .GSpcy.u6q:gr_ gɻxJ d _HVx=5/a|7rC^{}_y2oYy;{|/>ԫq9x䚏-|L7F-Dĵ<֟xy/>zOs=b\<'ֿˋ 3^W0G<8—C]o w]r@?|7} ;ߝY=/p92xظ7?/)GkO3<0y8;[`p|_şVo`űzO?|ix8a=w i;5Wv~ _w>8_'oz,x8 yz@|<o/9c< V?pS^Ux1৻<51|x+{og|E~kq>:Wd1l|?}Ggy4~3s>8^}Z:O<_yYzQ [ݍLY?33"Ǝ.úwO_;/Dk~E^Q=Ϟ鏭e ?Q\|/xUnI+(Nή5x]ߛx={Hhc~+G71YN:i':=8\X<$.y3x.{1;ø?}a'hy2GW>.Ww];vN7~󔼚~0p$NJ^GxYy }D{l zC|Af}v{4:GvyI}A;Pkb}8}I>.o~ǫS#:[o勧Go+g>H݆_ƺF<ljG O=pMO?%/Oש_i.ƿ^ zz5q䕧}[YM##yvݱu?c~17Ƨ?_il=|~.;8G?w#K*iނԾ#>o^W\/;Sܵ7W?zS\Ji_M.?7:zYCnuyB##>c/~u{3pk-f}Og=g')y [A~^J ;Or$]~%›_v}3vn\+S?z#7u oYoJzgH>1F=)/b#Gx4xd<ы#7v3J}>::O|v4慾{wzht:@D77~=僃Yǫz/՟yok[ۧCG䐾\??qj̏87qݩ~wS39 u<&\K䄾l\oOcW=Xf~ǟ'w[.ٸÉj\Bܕ__D{DuwF?{aq\~0ziS|_O=Axd%{lAqCL]y6q֥|œF?̳~>:K:?qYz^Or}⯬I=iƷ݅}OGOq1c2/o܌?^ľkIq?~׎ y˳_2L_5.7:kiA4/:LvR^ICϩ/n?~%w=.>'"Vo ?;[# gI\i3qI7+sk9>4e2P7G~[IGx\r쓸E}l<[x 9?I=r?'e>ov[osOvaFر[G<6_K#?_T/{փ=.U34f|ȩ +=>gr.V~N }~*O'Ͷ]WLnoPFHT('BPd 6`4FNp @g u2<:$;W[s5{9gc16I~jmkz;GygCGYhGݓq2x1};8eO;_W?l=/SMwfS7+iONgx$aG?W'2Лu֋7jJKI?=6􂸹x8,guO+6}>~2s_'G4vJ"R:Osxm^5)?&Gqg/|"q~O\fo5oސ:s64~ia>˸\p&n@ҷ7ős4>K}|P~^3߄'=Pɴ#~~Ά~Uq9#z>f<O겫%NN$w_Gvk<Y&}n=8OSϜx_DѲ.]~JQ08;(>dGE]ݱMAo/1_w>G|R'K7<^zO]8*MGa~`~ϳ o/Գ{.zbpEZ/vPů;Oh}␗ȴ8hul'mg@|]Q8ȁW~y¿鹳M^x2qCx<.qe9ߏk\e'&n_g3xf?7~a'|oݗR???7~\/{|QG>'mas5qwsATu/:< ?bg'xuPuCƅ-ü!x \kv&7|U< ȾƵψuK|z 0#PG^{7G Oj/>rB~KSO!~:LJ"Y_B-r#x|~pw]o&yF?fyuiwŐv YYX=Qq*~Q}:?erIOݿ_鱶oU\Ͼl<$=qz$?ge>?W-q6>(Ď<i\pSxW#P~'yŃnMxrf^$n~4SD\:ԸRx { O!Ouyq\Ty$?~x_|:~x?~`鞧Wq%v/,yrqO>}/_]w>_|=eًF;zƲe^}x0~}@:QzU,71IaGɱn*7z3{GOg8)Nn"TQ/Ϳ0>7Ko>۷Oķ}cėԫ'^Go>޷(XkiW|a{ӖubPux4.?q}'xvGn㳉GL;'ޑ>o{F={Sgq.<<Wijā8yS?џkzA>yoYˉk'_wJ[z}5_u|o1NyK}Oi\6"pʾ NֱD|yNܗz+t]mW7|YH\{;&gC|+k{f>W?r!*~>7wZI :v`$g9r!n\Gƃ(TqȡLO9umY8O9>VGNA>Gx(4ue^ٻ_%}*NG }O;WYo>O{iDQ_eFCg?<£y_إ)^K_os gw*O\oόޭq^Ghoﵾi=oiO=.?vUi7y?CyUc^ qO#'/μ5}, 7FNUī=oվ_d=b9GZrXq紞4~wrK ϖ]. <_}ڱgSwW/!߉'{'wwK[ߕz1xcweᯥSj;8#~{]/kzyo}*9'.u9~yR'xjxC/Hk0Y\[q+?PGvqe|vQdُHmw;o%7O ';;nI?1]?^oyj`ǣvvq[_>빾}7vWou#?R'/sU/ȯW< O}߉Gt/?a{sʷď~[_){y[^qqYrY-;됺_tvmTX볲Kgɽ}_ԳUh_@Vud˞vmL|'u2;G~ξR`-l}]UPg>w3 /1S,nOn?^_<'FaVnǾ.=_Wȷu/ֺq|*Ǒo 9̷8ju n<}K+<y^Wprv?=x/}'zN<|gƣ[}9WGN{]wYQOzn4[;]~ !ϳ>g'=^G{{gYO&>3L6Sz?e~M\}9[K3y6c#NP'h_/[t^> 9m}vw3mozȻK|P}">n%yf'dzyщ(lqjWzsiPv5vi[}.d'{/yrY_?}%?bzA="G;8V.s$W}~We'uQz簝pzh^vppݮ=X,͛vpt 7<{ÖEהN~rwϮ?n?vt=9mUr,< ܾn׉q^욿ݷMC><|׉sjN4?Oq^.]ٞmG7 M?2ª{N0u8޳Q9 O88]WWw.ZnB)۴~3d՜{I;c:~ջ[Wa]1L˩˫9>TGNsه|MY1{$u}IuY%5d]U>p93v{g^T~#$xQǼޭ_Gezz;cz^u߾wܭ~8:ߓN{6s;uI=Y7d}=cd4}Zm=C>MEAm>ZDυvͺμX wƝ].f]agvvqgzGuCHi|6NxOZOu_;}Ƨ:,s[{39ZȧSǕ[}_ux?Ⱥg5} j/ñ?ux[ϼW~[G_ >үoѺ :cgȓ3K'`]wHZrfvrܭӂNJ7['SӼC??Kxexr|~/.~}sp-f]>ݵsx:k>qvo뵼259*(CϢ/ Jo:?Nփ ߃kxc\u/i~|#_eTmBOO3Nߒ{ص+~>o }NGevM\S>8kv<@_uE~n歯s'?r<#|O}4o8Ѿ_a#ۏoz4)Na 7m :\?z;ܱ~?p vqkݮ:~S_cgG7޿ؓ3{ơy܆eߍ=;^zu!.7?On}uw]x_ū>6Sy7Y!K+\+@/ǒOd?e}49Gnk_gn>^wƹ1} Lq(Eoc[e_rl8nxvkB.ߚyN0Ν8 }C9x#8گtǡ|oHqTyV=I\oߍoE #'\Iqcr*V6vm9w\r#5oxvy>C#ǚ3'ozLO0gwpT=vz|n|/⒝Li惼'yC3V+l|-q<삸ĻGķȡx:}yX1PO֮^?'_cӴ~{.5 85/qoUξG{]؏ie^=i;Oo:< |"?_1uKs~2{G룼%?#cNO|1|?]v,q$އw\hIã9lD8Sp9wv׭)wkz7E x3yTWBGrz $No|G7H>u#tةww_g4R/3<6Gi%輎Kry3/1!`)/rDGoxߖK| k}oU=,΃]^k/^ߌ8d):yK}+޷wg曟% "s./Ӟԕ>}iR:xHjG+ޯG|O{w?Σ[ןk O{+>G3LocsyUq߸9›<㼮#pY$Ŀv_P"o*D.ϵ޽޻g~'.]ìS +uvg`u,]{h8y$wqV}pNbgՓg;|IGB+Y9#94^Gƾ.G'x,7cՏMz\rƿ2k\ o=77?:*LOGݸ$|ub_wW!{5o񏦽Oq$G|&ue_8\V7Ǭczg7_~׽|[_ob)ߜ~_8;GOa@^<+.#,>xj=dk{]mܷ#XOG >** ~8֎w%r8z{'ȹR~./]~>x>7|-yؑe]]'x"Oϓ'sO?xOjLuGu<[/|nOOl~Ƒ.?xR' ܋yuѾx yJfQ(g+އ},שh;r2r(دx}{3w؛%p"Odoչu/s9,gyokO% OzF/Cb:q[<גCxbߟɫ?V[߿K>c;/Lκ1Sٳy0Ne'g~뮇W[N|k=a|uY֡oOxϑQia{ϩ4uI.Q-]J?{|>Y8:8 sW73=㍹^<:QJ|Ycj~gx"]/V]s_2x;(qOhxί@`p:ߴ[u\g-%9O}U@~(oⴎGeCVoOWW̋g'M;So>q_<'] Osh O ?_䣚gUgOs0>S>R}#U{}oWڗI_7[ ݮ:K9=ë#$q?}ӚO/ >_ύe=/x:S)x:_tGF>)[<482ʾƿ[>+z(({mW'xxy׸63#G>+yKrcgg|8*'qjuxyg:Lx[ԍh>ZuKLpH7uݡ;W{i#~zeyGׇ4NxhS{_o~.yS/d=yl=?'TŻ'OPpH4;<>BNq2|U<5vx"u[#^8  =VzEӺ՝= ~>4*JX/uqeiO''O\癷5~O^#{#[[|ş/jw#3 {1|%w#|H],>_=9jrq'8[P;0zoƉ^/#7OFO8[/:iwoˑ{Rne }'rEOS(xߓW |O/ʓgh~?+< [۞>`D޻1x}ߋ?X.n_p_>K6qIhڑv|Hfݠ*%Mf| W%GcԃWֻQ#Ox1\Gʏ]Ws4; _}['E~3_yiE𽑷ةOsz1r?z_fwW|8NqɎwWvɜϩȾI}{T@co;_<4~'i?=wj}+Udg?O_s/v۸IpRU֌z?^OI/R;?qDŽ ?<n镗yVFw*>Rzg| ?[;S7+< FNGӟ5oOӯGbG&cv/|~=G,(v;}&.*$^K}Ԯ%OUj;㹾`/:-Qh;*^N/u| 6C0LLJ8n{<u;|/q?<.ÓYzx>{uZ_?Rw?]xyLmA9f_ YL/tM wxD'yӷo>;/ě:ާFܜ]7Třnr`?[v}=.J^z?4X#'67Uq!E7Y8ߍ^NJilSHs>U$8m< jK?#AϓKol9=9={X6Kaټgꋅ?2yK-O/ɌqGz}\o_~7~m*k \o?v<}q:z M\W >_2xy]{;G~7G.ixG3R?TuDV|9v~W?'t3'qqG^q痋]_8~ u,~0?FG#}0wf^q鎇xyiw: 3?uNW|=6Ozq3r;ypc-pm>__ܳ;>}p{i}|48>b{.Tiצ.xri?77sOS=ҷW)ޏ$O:׋7w> _P+A~wt w_AϮNw|*5 7i?_#?mtSW}2NƟyO9S}/(ou>`:{aQٿ{ς7<>"}řz!:yvvdE~N~`?x\ӎz?>#*'^I~B]'ye~scxqd纾\ﻞ!z#J٭C'|W':D$<8U*A/76^^*vzOϭ|cACG<<zD?5xv剶a#̫}y\&&`ȃC"^xGu+m_~ŗ{8mSٛ}kvLWߏv}I>x:7xx]ɑ_u%5ݤ/įWtg%/;kx0ޙ8E 1lm|V'OUz]~Sx<\V^*ύi:;j1Ѯ7iM;y>G}<53$OCUB2~.-ƞ{rct_%f?D?Ŧ~|y`{ūxu]o7[gujOSF3qM.|m*q+|@8b޴S fߞZ/l7KauI{υ>zCN1o:ؙKt-qz;랿O/?<>Ëc׾D75i*8q/yT4^b+~I(?۸Et>ÓuOϸ>M\FsZ˔v~vsS]Ϯ ǩNIL=}s}}oG1Su~jg| nߪz_uim'{3N O<|Hk7Z4ǎCt\|wT~^ ?Pu΃'v8V}$ɗ 'ίGء^oQ.V;|mT{]_OU]OQ'8g>dz_M9Oj_4UǾ7M|kNE_G~v=`R?[J[}4-|/6G?yXbg*L_*LD%qG٧0.X\ѣm"%gGm/j.zq8|}N'~ =wυ'~R;8=yY+/u>|Npּ!œp<ɸOsNO}xz||K#>_8ڏO^O{_ Tp|[<`bT\cP}룢;UW:WPicO~[1wu\ &g?їb߭v!kq"߀؁𴊟pbӟe~{{[ۏ!4:"O?\xGدՊO8:댒O*6 j^$ػ煇U.8ew㐽|ZR֜ Oƹ>\k<&NQyNuM̫8M0sHv<*|m4rӲ9Wֱp/cu^ϣnOW<$Xx /mT<[@x$Gp}9]*'k<;|󡎊Z̳g'm}ٓ#<ݔV!ڏpm58?{q:]ދS?XUT"x(*@q={=@=fK[;}yV1чn~ݧ+ZRkO-'US쒸A oWW!kh:تߋb gؿrkJ OUoF:ͺӗgxʮw]|O\9w4gs9wL;'X_ yoRҸ̻x]`3}<Ǒ359~<oG|6mok`&?8|$}9w ~{s:nt;Sn\-njO3{+oxs)D'z|E#_-)|cI}-ՙ >^(|#?g݊]XY|/x_3oϳy^0~߇98 <?8t?~Lk}ޝk<}igUI<=<O_yo*9X`loGX1aՑK/G[}˯|r̯{ z^W82~> +Q|r3v> ˮΎO|GqHSO?U/;4^xȡqpqaGȝq'w} vv^y?S#"#սiPZsu.w+M<>]>y`9ҟS=Şy ?4&u{Vzn_ȧxi>G<*O/~/,8S'_/;z$c7w_,2G?oxzUSG^əqx/%:7/ou+Mq)Zf?=/N37jOCYQwl3>1Km4 ɽ8J&ޠO%qCq_: (;sw#}߽:Gf~g'zJ8̏?,]<:_n8;gY^oƷ%r" Soz{FO씸7<}O~bw]\xSǕ3' Oɣz9*:^?$< ~Yg /Q틗|Pަac2q "ߪsj>U:G#XwO8+<3xOo|f?#^u*$k;qpu g[4rg=)r_'uz~EKﻨ#c•uUqax?ϥq`Sh+}z_Nv=qϓy|q_sZ]%|?z>}zeߑگ1"qwYT`0jzz7@φߍ~> WO-J_-ޖxaWQ3*O=[O>zÙ{oOf>>haȳ}Wm/(0O~-C#^Ɨj>WBS{C9_o\uT|%.8v<;b^vj<5<1xwnGݚMLw7?c~rDZ96Oqo=GύZWbVzQ^1x6}?^Ѽ<ѓO=x:8r:œ/;uq5Gqzϼx~|~yJ=3Gb]Y?{apץ>?(gql_#H~;u[|TGAQz3t|wx`ә#n<,ş^Gd?M]q>|7x~}]@=fY;į)rbv;v:K#[7WyO~%Z{.E/'^>~,=u.Oo6<}Ndȥq>M8¼O0IÕ8%:NMw]z?G5拼ޱ{2;=+K{R'RW.4z9t9xY$h~ 9L\<^ϼ4o8Ӵm'.e߈kmȽµh97^Ρ%Qv|]:sU]GO_e/?{ux ;jny2ox4׵|guŞ]zSxϽ/_T#xx~zW{+3;n<7|{_zr8Qutyg7/|Џێ<~t97'_Ëe'|V+z8o%q"gk\Cl:Nߍ߽_q߻+iޥe{ތ?'<&\̼}Oo4a qe]ȏ8XaSws % o\ʯv=Ce0|8xIKƿ-G%)럦Q4O;Ϳ 2F./ƽv؅KeMp0#iȸOⱍ;<_GxGpFngOwGj~ ?~=|/&N>xg]4yEuXogM8r<;/de~ ~e:OxcoqO^WqE^/6$\בopW=cTqwfSヘ'~=y *ovST^zOΝZd´>E2>oƕdHnoxJ>-'z3wWxbcZG7x$O,8GTMq'vn3$'>zy9Ǔ_|L?͇?58[s\zEF:=yS~i8ax:ύɾ'7 z2Yeѻx8K] uR9ˇ'8T'yU"rߑ\c3'>7ك/okğGGH{oy*Ϲ\M} <ߌ3yYo=W]K:_ȥM\^,}.߬x:(xs}9c-v YWD>.x#9߂kJ_gG` C<ñ9׍{3}r?~^ÇŇ~u^3x"5|\_هxi\u=L>W?Iş i=O~cokY|8!_/uY#Y~xv8Ou9ډOwGIo|RNX]=Yއl}мg}>?mC.:M\vkz GyG~<;;v~8{b+'c>I#9!(ѳµYW</~;ſVHoOӎZOh~$̸W~9Ǔ̗_?9>o/ْ߇o]ğ:z/>^bK庑M~^vEވG ~~+D><&^~G|}''q2K{/U>k>u)a>VvлxLw'|?>损|@#O[q ő{TJ>:KuoݎhG4u?w8s(x^4 *o<7q/H=4@/_]>;V/ϖ<=vV֎4k~Xz>:[!Φxyc>GY%⟩/cZOƉ{G5Ox}j7{cMT a^'q;vyZ麮0G8vfi7vhy_ NJo~Ɨ0N>wK _^-ng7k'L {MC<$~-xOkzCة?tqO?L)7rHoYL晽z<G|>q~e/ӊK^j_S野~>o7k⯿XuωO4 z|0| h=2Y}5΍'Wv< Xk\~r u8:x?-ouޜOpK,q;?jg'+y"</[K9o?}l>z焗Oc7q,<_^Ҿ p~ˎӐKo':vS;^G&K竓 wj Ÿj|R|8o |UuYxlu<KaxW5Oe'<&~ы^GvoE6W"?s_迎;o؋.ߔxup\;d[KJMU#?pcqŲ/u`yn۝i/j< u$$2㊟gɩ}^-y6pJa:?qq> KƇG=)Ssc_-=eymnr--~GqsǕ O˹~0{w3Ɖzot꥽G~;zY/?|$xm>׊҇#2^bSh>~'AZ\>񖉗ɼW=;׺gz~vǵ3hpDd[\;w8;O3WOOCX%pz<xvX¿/z-\񤅇l~}^Zuc3o]q*~_wܿ6Gz_~Lx.|y^-zyWύcg¯G{\7x=[XlwɣwQǥpUysE.[郣Nκ]-߮|#Fpg<\)/LMrjj3εG>wX?6ث;{rPx=Gb;4vk<׼m ryG~ԟ7>cI\%-5~7!/v>^5͏8瓋WQW?v{;q5{CuTپzmS?q&vWtB"uHg ?Yt?s٧ixzAQ}vtFg>߂_gy_n]uu;*GYG>(9S~/յ׺<^b^cOWG?cW zv6/f7?S8wL%N~|?O۪K~sO|Gx郮K1~Ƴ]Qәm7fom~TnIkz<}ox6;uzX~jxҎRuk >[#oރZ}Oz;ok>}xPykv9pα]?uf\ Nmޯ=^靸Ȏyщo?++ߍK}_;m~_Яg}TzjG'ξ:W'dݣ?{џJGM]EK[?:Wg>^EO?Z'9ro=zM_y' f?^wq\%_5/;ێ;=vt 7D?w)OqyFo^w~:~xm۞ݎƟx5|[>TEO?[POm?Wq8|Nvx:W__izzƸ=jn֛vΫ|ؕۡg?z'χ9v{oov9[k'U?##ye;Nӫ?S׷~"NWFΫ<]x;\S?>OݎW N{4t '8xe\8=gǏn܏ӛyv|^5K\~8_|٦i{]MW[G~Uwp?pCrx!QΥ?X'fSAkSR9EY7WYIS3u9?اx?ݾ_݋ԗW_.S]g׏?u g/;oVZuw`~w:Q=>ceEszޡAϱֺP>\OguY_DŽ~G)|:ZwjÇ:y ǭ\^}Iu#S:]?}P>SCq'/qN/!,~S3@/2x/19W}; ^}kڑG:Zwg]}k8x GpB/gz9+J]zr׎ufC:s}}}o}oxv{Vーqm?fѾ[H??qدX>n'}1w=ﭳq믖%6ou~ޠxy\9OSw!=:twr<5h޼߬=b|dܽ^~NG>9_.υuc1vbGgޢoh;=ߘx^pw]]2^y?.pMnq.Ggc ^=gAy~o7w6}rG#o<㊧wy3Fe@gdoߏ<[ƭ<4v7xfձ7.=}h^ZC x;7^t\X O~Da޿7f>ć_Gӟ֗ysgx=?Ɠ>[ ~{x{sɺ?xYu~^ßm9_3^oz #bzGąعz\};WcA|~<;|70SOU' J>ȁqc{7gڷKދj&%@{};<]?3~/?8/_s] {=rX|x_{N?31^v3U<_'ڇk _xrg<LPpT8lxa摼w@//\}wYt]|;Gy>Zxp٧_~?@=6^<'= /G>}Yk|_s/?rG;u;;WqݛK+mG_|K5c+ܼízÝ OxzƩtM/ѷ u^@ Ng17·ç/7wv8 6M?=أeܗ^q4N8ȇqrWskrvNn;b^Yv7t80>]wA; +ޟ]]Ts;_yoȏu^1x^幙?8vrEsC_orzbc8땊D>:rW>_z}]7|xv;O}U/x@WU?A86u#9o>W'=W^bI9/3a^,{v?>kW?$θ/y|:A~0(<{H?b7ůfys~G l<=o)rC9|Q^˺eT<'xNG_[ƥ;g]gg\{ԹCWۯӫ=^" Pbo>;a|k_;vWG=Cn= }~O.8'7?WNzE>okO_#py"v߳I|b3u3{Ãcۺ^B1ow~Tuc~>F<>˥7m?|޼+<.㻉G2o=8D O0v}ǽg8oi}x?aymg.ɕq{졣>s yw_4/6nsޛ;k+^^iG?uaԺנoc |$n;~xO~{rCml\]o|O5bO)xgK8!q'v3J &?o33Gm,o>MceB~qu}?}vsqa'??|kyaO =8;W0'w'w8s]߳ͫ[|NmNo /fm^M.'x!H|?UrFn_8;~K7o[s2/>ߝ/|yqX?#/d^O3.O8tGa|=)z}KfFf5߳xMy[CzNs|x!ҿGﳸ:EO8uD~Jz9NbK_}p'~k֟ny4O;_!f^8yo?U~Gɵ\?o􀸊yx2_yp=米UW}x^Y=Hljo#k>sO'S=vyi-fSs~#ÅSi[T޾1SzIek:>/: 8 -tt~ ]wO?%pgׯr.<:!k/^7:\C'z/x|ǥnֿOUϰ;k=,^~"s}ۓSr&.7y]e/i7c%4oJkxv#|Lj}z1sOxM[Ɂq[e?5~{xu~j?lhNH;ۏPvK-x)^_yo=u%\vXugqdl_s$W_W~oC\OةB?#vUG3?y3tv5ָ'Jڞ'ɡ=gyolW)iw>z8O=S]삧oY}"I\mƥS.7̳b͓߳oVNG8^r{|ӏOOw]s}p~/oIkүOS1or2pus_ߩOj}u1MwEՅq> &3}9m{?[i?>“ߟBB6μӫ]sjm4z`5͸g}Z$r&ƹN9}o޴LKrJz*y@|}T\|Ga/{4v"m1'7{~G>/==ў OOgUOG m=C/{{<>2Gxj<~w#g99}c\-xqnxi߭>|QS/?"vI]<<~c>{~jFۧƓ_wدu_'.ͼtSƕ_'繏qsG<{$}j^Iӛ3ƁKx|Eg8}N*󳎽ƩqyS<ߠpVekS'r\E?e߭M ?NꙫQ ?=%{qHZ}wxOlR?؍'KN2~#_5aR[֑OU;xMsJG.,٩>Og_rJ..y 鳕K\jgg?ኝ2~>|j<펯k>B px7gvɼiGg^U#.(~,ٷH_)ղGӏw_l]>OA==dz'+=uC3} g׻“|X4O^yGvQǎ%Pn x /Gsj{ߍ۷+9Gnܟ~y(.x5? GmDO yQC|'zr'gG{ci_qoi<~#ف$Pu y?Ww~;ϱ߷ȾzO9}397~7<5Pgz#oxAF OwG~|їww6^ɼ|>94Naɕv8\q# SƑwGN΃~?ȑ#^,37O;+؁|9oF:×y~u#,ws_xe'r3Wa̛ \|<<_5ky<[;}VВO=F>v|kNbݗo 8;8x:TkGh>;?8*Ny7j|2Nk^Hog톛a7>HǏ#ܙw^ޖ;w|7ǛCz}2gF~<s^Oٯ-(NOg2|Ogܼ鿶?}xK4/YTqw}/p4|8cb^I_nߡbg|mz>%xu-|O^ݷ o79/SY$qzHz5~ȭy_V6ÿqo'jzœ#jz.t6tx G;ShS#o㷶%:{'gN/sm'xh~lZ$?w}yg"\c|9\SIvˬk/`ȑx{?ơ7}/uY9~UOcxj^tn<<Ǔ!_gSyK|Q]%p|&GX~8o>v~R;[_~W/^[ymyntpe;oNEѿ7~}M[<|OhG_/yOڃ:$v|/r@ϗʯo7pǝxcLxGoOT/3E~g+˽lrOZKzMvu;Óq޼?Amoqm8?]?O“>ƌ;I|@{|&?"և/\?{Ay'|5ן /G?\~~"ؼ^ ;yʯK7bډptj<?8~{ξ7x$^|#xȕ|w}r=.ߛv/7|~Ijp^}SYs[3<8uo)CWTEO=uw~< ^G[܃'Ot6Fޞqv4ٮwoʸ?¼>_Kr~[}G׹O->=]O;c>敧~c@Z="\˯'?^'^CO=QyxDvM^ /!xW= c\?xH^nRءM_N8?.k~?mEf?h;}iCxGo{iC J)=̗ɱy/5?xq6辞jov]w|)as@ؽVz{6ng:|O'ekpDgO_;8:“ɾ3>=a-Q;҇W1,=FN/^;Ǭ<loWaKU7krn\Se\_{xt =ο|}φɂ9D|n.7}~9>L/_K|8`WX19u#m3^Ɓ<|\O|&/xKǍuxy?KZC^$TΓ3rh\2//^7n[~OLR4GqѮ끗o] }e*?,vkƣ^GH)y+s'_~!7yCznq̇vO-aߞ~6ߍWO;C/ 87 Kߠsm>wKq%.賟8d>։',=wTiQl'sc77YC>?3xEn>#=<'O6>o~Y#?zGj{Eȉql]~<|# '0m|CEXG={eڇ>Яh>AN{$hƼǴ␙s֯)|>iK}_<_a[}l xӗƂ'/ q43x0}k[iSOg/l?O!xH>~~u[:aRv!{9ޛӇ ?eќyvA}<<7qlΈo#_c'_[c},1DoTEOɉv=G;\Oø\33s~'zp޴ocβG}䟗9[W Y;;g??]dp >kW׸T^7yvv|pk1ooOo9{h^h8o~qǗ^Oq>;LiS#؛Ko^?}+ތם O<“<úޤ75ьq9s~gς'x<wEmd_qM΅m]=3>;wMc3r~k7{ύ'yw<#/.u?gͳy '9#vS {a]Q~#m3)8}(}W˾vO^^>ظ߯X=ۉ'|^L^/yy{FGx~'|NܪGU=?lljߍdƿQ_f>!Agx2x_AeO.7kz+eo#/w/-~0g}זOw~o}Irî=&ǯ*lc{߃zvɼ?yyT䝬g^98:ޅ}^N-kOU=ywyا\߲k) ծ>?ow z#\f}%vuL;/r~irI^7Au۸ 紣Ji?YN?s]yb'$۱o\MӾ2#W~;ߤ/|7z=lx{ݮy0y'󑛪L^y ?'j_eO;uSu}_>ѳ>cwM]Azyqu~>Jă~O~J}<_EWxoKg[{[<͑0?g\$u{H>W3Iȣ~v.h{%~^kL+S<>ޱøOS4>^B/[뫮C8ȟvr˹]߿[5m럏3s?rJ'ɓq?;t#\'hM{Zٗӯe3}7lK;y_…~^^: 7ױwk r2z=q;>E;:c;@3Dno'(u#7-w7=Nb~y~kWgW'~>O'9$C0O >;rjN:i+.$8r^K]O|O>4+O/ _L>ŸQܲnR??Ux1NƯn'>k|^,p~k}>.~we=};;Xu rSv?=~3Ds\7gS_-2g,xw Nwy恞GW<=y./Qxgeiֹ?t>B3Zq}?/q^CgS~k w \s#OGpoT'}hW=7/'B x?]1صG@~ݷ5[gsi^?zy^_|;.ANp̸߫k;.ߝi^W q).NqbyOus^oW{[<{>Ǯvϧ'tWoFNq!L|a_"sJ3^<'S{.^n?I`nKx 9'v^wL?['/>~!hȝ\Ӟ?'^#~B'>j S]jS{ʼn:ǯ7Gȋ_K}CQ߮p~Eg+>=TǏ|GxykLxxvj?k#޶KDgwc<_WlUKb?QߣZGdAuO|{jf\r/{vtyyog{Sg7֗ifz3^(x:7xr^}?yhN\_C'Sw78?{צ}QSnkKAܰ+ހWtaf<x{qsE%.1ϓW>qzQ4n/]C9zOcꔫ˾3^/(^E6o _Z@o3N'rF+|> g /Twr_5>oykp{xH΃󞧶O&+iW@xn~wKFo~Gg3#s#xGE EoMao'v.?v<7}zyN79W9{9O򸉻'NBol'|{=5_7ŸW(x=US[]N=I֗ܵ_qe5r:dɷr~s$tCOHo1_qIr]Ypjq՞|x#z?s+fG7=U]vpn'w|%ѩT8=vfy'ca1xk/xqf_7"8hG^<^7<:J^;+W}=񇎿3F^G?>Ye{}oG[L855xfwgx/X#y3ϼvm~E%玜8\E]f[;7g;ӧnp)Nߨyz߹{ۡaO$]sƁlV6΃c3eO O_y'w<$4̼#ųI;Qtq7OdŭF^<!wNި>cz ʇgo~ޏ2|TCqˉ׾'^S߳RqskSRmcwo5'p'z|>gӴgx"K>mgă;.s@]$U8oOR\4ϠyL\U۾ Ǎ[3/mw8x|?;=]/:qֿO{>rJ6ލ7}h+GϽ7ؑS ~w^C4zS_יorOgdyy8q/xʮ]o'3=FY㜼gs9޾z3x~x/cke7;^YwNj'zC2xԧ|teV}wA=_wӥN-i=z3o_< xS<-dmru=x}[rPytރ;yo㾋\/[SWxαyen7[}y?c O[S8ԃOGߑkus;~d}h Wt޿% KnwxnOpՒw,o[5?b6qa֧9nfڟZrO\}aڋWwoӗ⮽8b!cvS^L8t'g'z>9|f^ů]7ss=}qrΫsbGNܧO5W.>߿{zћ]tq=h߻_׭x3-OGr;;9zP\~7zz?z[G_\17z<+>O?~=en_3]0qsAw~[ݭo.sZ7g>_<ſc؅cuI}Eɻx+xm7_<7+o/rܧp8:r-nW|Ujop:/ǿ{w/{>7>ﳱN{B]Nǟ cCR[T1qWg>|;_xbP'vpMO8Ϫk[r~ _uUd8n;vwÑcps g}e7z6G{;FO9>6zdqz[ڕܷqwWוN~G܍׭6zj7NkہXߌӕW[<\Sons{~vq]WGmu~;FO;]q\}pql?_QNs\WuUxU?l'7ߣ]s8dYz]qk]?}^x{oyݻ_տ_~ܻnim=~ٶpC^/nl|ܛ>םSwi?ߟwWn.8[ڞ]{U<_W}z?,\Wm7=޺_\]rzC\HN=W\?W^Ͽri'~"OoܞwUX׻q)^vq+ok{}}|[Se7;1u 7>7>GAq_/;л7_Gb߇~/>լ+S/KQ~S|Kir}_y?;{;-Y;^=ԧ}>Q=9XY}ìkReTߜWSv: yo߬Rg:7.O=z:G] _^e};S:߫ÛS}`9>>/F/gޑ^Sz'zr ѓ~^'u1sxVWW>oWt&ϱ/g{?^Ϻ]~Wo5}T]gv uzSuwnwz,L.e>z/lJ]~?F^z9fw?z7dF]}Azw:eJ\7f~OJgڗzG ?TCYk>[}G,Z/ހ^vzf:1yb^[zZョH?[u)'s,x{~+OogucXY';?+ky]}?W2i_rq7cٟZpZwq_Co} gGٟ0}~v8}WWǏցmym4e/߾zά[ql#9O~}? _}l?c{h<Ghq)㻣UևEm:[tΛGO;8o.Cqg}^ݸ{s~#<3|:q;KN3_KqERە>>G-]m' Gj8n=>~?7~u$/V|_U]r2gzU^[pSW_;9~#v|nw}s<:~ ɓ9WM$|θ_2$H)'~6< }ֲ/|ie\j_XՍ6gFvj{wgGpǯxЮ\zwxȹ{w彝oMW? gz;>qo=Yr瘗ˎ;{wgkuVRE׭g湑_mWҏϝ}oE/~_q%y[lq4qix'S<5oo۟+Q\6׾M{i;rxj?n-?r>^mq5OS!~ /~''/OV+V'[M懼ժ_7.U腒|w'}jԴS?ܟ?ǎ اvꬂ'uH^_|? o?f\gRWTSH]q: 9gW)xhwKDZ*UB5oP/g_XuIe3o>}|Xq/~*o\^W ~ \a:/Hϴ Oӵh;NcY>/yvqZG[6uq~(<?&oxF4z}\'qӬS5_o|%D~W!>u- nn?zg^|Y? >Sgy۬9;"~w~0|i\;$3%eθk|iG7>.?Ip-}Kɹ$0'_x"}/?Wnz<3.ӌFgӬaGygW=g^M^muxK폐rO?חm'+fybԃ$_u0W%6:@9Slo[́}Y}+}g_}>0ӻe#rJ{p?wc s={߆cy>=v_75\ _|%l' ?xK&?6x:T=6QyCw̏| Oz@ϬϕO7_Ե yK~'gɷ2I`\>ޟ O !_O][ձOo'3=ǯv/Pz>G"wqv0cu3>]y8xGߑ7++y{n<@/fF.o=g|iSپB1O^|'_/O WgRg?|csTbka:_l~f/]c;OF<?-|V?5_ُkk'.N;ǽy^=g.-Rxo~} 7Co,͑\d9?*Xݢgφykz|"_Y/>}ңwu|ы/ ~gUC\=SeZq_a<#杕o?qǑo᛿T똵_^+g7*\佭3?7K\-ƽ)]Rq;xQ䄞k=7)o7S,'.~9I|}88o^qW;Vycy:;u"y[<$-.9žC[<#4=^g@guke/jߗs '֯}gq'6uxGb5mgw_q%={ wt\F_7.__Zr~}$x7]~ݹ:jwxl{ȇyRRyQ_87o G|o'!xR_Ox-(OdxڬbIUk 0 bؑ!/7|"/N}_}c߬cO?rg}ߟd=ox/L) _{˯Ϣ{O>ErW溮/(.JK"&/^6ዿ[67/V?=u+'|“|*u{TFu]~M3ާ-/NX9~#OXp$^/1~aoƒ̇5v|D0O)\xrq} {a'xq'OpM ~yU]ya yO{gS/ȕggg>‹|)W_Ƨ\p͏?G!r,>},ϡ O]_%v@< (=G{}Oϙ3U_:.P=?p;8%:Ξcsvě̗:䗭e{M;'SG!*y&b>;/ı+ߗ1-.QIU=&yɵyW¯:_şbϽY~M|e綎+zK _׮J=|xȿvI剛Ou;{uO~t2#W: \ [(qjiw+٣|O_L2GևO'?)}G3X4QS'Zꉬ/'QTaxuN]x.<3^Iz?_?=9꽇)׫/ qwÊߞԵ˼eߣ;I]GKͫ<,y0Ϗ|mzþZ93gE3 ɞ<;k?Rv~}~Y_ɵ;}EUU!I]eiI~oky!_UE<9OE{؏]ɯZ> _yb?]D-6pI/~c|^\}/#~.=7?^ɺ~v}R18/x?xsMqW y5~odAqS:ۼP~{Y~ O 䍦/?9/~9{MNм[p:a ޙqj߯ {~N`^թ&2u}xQ7>:r%g\xh}n=O;\K8g}L0np<3;o *>ɇٿ8 w˿wlEF'~ڲYdS(w~J$_Wg<ԇϸi=7{~|D_|M=2>]{/SmȓܼU+3G_]< ~3ro_Fʷx5+???$~1V< OY0}_;UxY8yOv\}_/[{Ntރ+6yu>u}G[<<_c_ミ:;&޳sYYLgWwKL;ugV/N|>z79=xO!%ůT0Yyy~eţqx˚ KC+/:W]!=g#x*ѯx ܲYW;Cڿmo|n^׾\۵;kAoDyiWGϏ''.I#_YuD_Z!S~fGwKꕲ^W;Wr-yk\GnH~/u/uc6c/ԑ/O]4O 5yԇV~aSO}x;CO8{{3ߞ~Cl֯슸z&~\'N.RrxDQVXs>'7܈3;<ς:'eok|s߳<['?Tri\5Ap$~o\On!ȟsޛ>{#au?|<>׬9n9.caSދ~/?h;7>8󻺽;IO"_p8@No_\?^?z x>-yXsk bD|,WgeHq=O]MS=^K|Q\U9ɲ#Kٗn?Md;{qhz'!5*\u,p7O=٬RI/뒿ojyr:vI]C'OozzcL3-K*\_zo|89kW'~"?]'Oj{HO8'<}ʾ|e7ẽq<͸vW]֫-)iJfkK~dAN?F䁝O<|ÕEM%9lk歂io`dHs80>yEěYN]s{֟K_l<[r[uO<8SL >xbߨzBs(}%xP}ԵO{ 7}|åwU glyXȿvhy2vepT~"'WS)v#{ O~m_Ѿ祐eTk:22.)⟾gY;vEݍyN]68OއYqS ǧ‘?MفOn5~W=1/Z׷fe{]Aߣ#r w0uxUwMry}3xljԺG9 \ّH<_G#w'zC΍}^z~e|CuepVHY)|ѲO*9$m:įɏ'_B<:yO}xՕ%/x/|z7[-Կy;tŎ<9#xbמV#wx:ή?1^i>qt,p,9+}}aSmLgp)o?9l $mȃy+Ds3oWg;{߸K^[~ߝv~(y.KH<ֱk/~vge<]V;q^TWÎ{b].~U}7MWtޭ$^w~ @/7wٌs]c  ?K>|Uygcx:|+o}Ϥ1u;%ÃKKjor}x_/hFȃq^"~v7qixpT/OSm>?1N} )vO^+vϱ6ZFW /'8̧ ~|9A9[/^/}?p@I~a%Wǣ#|_MW<_g:q~292~K^3H ~u֗T0Gq򾵉7ex^| 99fUq/w^\w;x:ҮoGboy~׉|_7KNiT8>S#Y O}swt}v9|f>? b^OO] [w'/[uyp0xSzV;e1Wx"Mei=Tof|7#|mm? ~Uxh8l6[`?LgӴ>cb'qy:ḓog/y63}6~"/3xKY<$r<m<Һ %]O:ˊ_g>~=z/j)QuG7{~*?VE]@Op]Xixj"z?w _q\k'z~waŗ~%)H ѣ{:1nt=Ϯeʿ$nVgyo\g<]gx Os=m|#QƸ>_2kq_kcy#?ƹl<?Gڎ}X#] xF_?#WĻSedG;£:rvg303{&>CnO O7'Yxb\O}/_y^Tz# XQׇkG n?{yUo|yy\ijtL\us*]OI=z}t\}}!̋q-)}ng^MRԾ rq!2{7we;y}z'j/}Olx97^u]<+s^k~샿-(sqʹ|~A;g;[_vw"^.7V^.yCW;AnįYPuHމzƅ}v'd_P/“ӗev$8~9vGf':r$JOOԱ ?ҫ>Ӌtz<3x^u}W(vAYWױ;!o᝟/M2x~br~{?xzT| 3Hǻ_уU߲>vXտ߯E\g>{_~C {'z ~_1G]7{Qu xn<ϩ+ҿ“ⵣ3Dv>~=YO^9j f|3n̟-v~{FN8yO89#|}ծ:kvF*uq]M\%]> ɣW{?zd74quax.>]?zU6θ/OFOw?)-/#xnHovxMƉ=v }ȧgi\N|nϾ9?{1xz::tyv>u|q翵ߘ6W)?@~{e9id*w}OfW:'x(} ]oG@~O|<}'C9k_s$/)yƧRjn\G/>}j< *gg؛l rz߁ r#Geּ?;|mcݧbs%*m_uܵO+Doa{=4?r?8W>q=6ziTi;/w3n|^uI5yуr/~dM81oόg#'wzwn8~zxRߒ_G=W?ZGqyX%uēP/;y{}+u;o͸7"'"/gGl٭}> OUwO?ަ <e;c|zg#8wͿ8u3/UG$_Nd}%wɻWkP% 7lx )y;_*z׎;IX;0{_o<+.5zm:_J[MߟO컧.15WOS`r}$^ ?|)/9;R;/='\|D\ogkAԌGpcg3e?8Kv@1@IG2?)pl}|>(ם O]o4O͏>?-9oGN?GN10rzWG[gAO?,ε[ӪP??yȟy꺼-J|}˯8cs}8>]\LϨckE?f#W;,pW{O\$oSi[,ϯҳm*~]R< 8/Ovt8M=.fOYK uc(G|&v~Lԏs!]?+Pȫ6ꖴ/xcεit)xj{SBW'_|Kl8?~u(>@o9V~:?~ue/J\y;}k>ȿ Χɟj?2.PT~<QSo Nԏ;T!C>BMD< ?v%>h= C^'7yqwg':ռy}?\yn}<_?)^zcf^t/z7J;/Ty|,q4NM9ulm\}'~]?>KK_45.co=7߯=]S}9_?MOʡ9bӄOK3v~N8J>e؝O\oGxnSe}ӷ^dvoOq;vXlk~ثR2P}?Cw\yۃSvM~hbm[<ծ.R/_zΧS)}?'{>?+.:+UR.~z %ui⟫fwzzT׳#[?[Zk~/8“3:.O۞pt!7z[vzпœyƿ}7{k区uL9glO\=m)qQ}D6?xRv)tGzw_=:qջ:f_{wΥWzFOWWN?Wv~'LYQDzWj_T{?TNuޡ'>)O'*~ /YM+.'g+'/:Cw޼Ǔ8y,{E^'[{hs'l}&s;]gs-s{{nWGSxЋ'M}/I==sO'h0}/T◴giqq=8aJg[z}'!OJ?^ޗ<{Q4:9tOx7).8J ?mxJC[wႝ&oMާg\{nW~X$>7YuףI>AQO]^?xΓ݅OnM\V$C<ψr++71_p#P:ٿ'3[u z[ ~igKFrhsu>;$l?a=։sN[>;]rGO~W7;k۞Sc]on5>Mcq uD}{Ʊrw| +޾w~ߟO< =wCn~lq?B\_R=r.ם?|(ݯtKg &KsשCEM:#׶bT7/V;|YoSC? }#$oz.rqk_5<=oAs>+=~IuI7~oow~3C ?z<uoo4˼+7'zxzYKyӭ>|}~o=I{{SyVq[P￱O;tS? N|yW:<:=m{O?qN|yo8<<8^8=ۣ=O }=k3/y|Qa8X?%?|x '='9w 7SϽ;5 NԞq'|]~>ir;wuFr_Ws O~O~n~K87pC<+K7SW){3U)L{+}sn}wse} ↞}j3ӎ炧n>>_sZg} ;-u'z}E^N~5/ϸvUy}>ӑێKoܻ}pE[|Y=ca>ul=7%+_LⓞxگXܘ?O}Emɏʣ_};s>gyϾ7־Y"7 OϵbɃ/BGV>_qU~ {uy2wѯqq=e{ 'ucZ`oY@q);a>y?/GyHN᎞4/uˍv^;ߌ~3)ΊW{S^^gSS)"Ϭ+YtO!/x9ދD?7I ccSszSxu:ן].Ԫ;Pg}Y@cNz}5.^'Iio+nό\^ӛCgB?ط?FW,kϏ>I.Ṣ޲^9{QG58*-r3?ץfK«nD]yC.(]>>'ܜp{"p<~=S:^i#7s-C/8/o[}x}'x73i_q\$.z@F]G7XxrsOɣ@OHx!~w}pQ>=R;pIUa&=i>Z?ꂧ&(.îZ}ջO\pU.-<5 N8Z:ةiqsO?wS{'<;^;>{.ucsWO[I<Cv1=})g^\ڃc_ݪ/yR)ԏ >)~.xu"[rcf;к6?y?3=,.n 8WڡSUa~:lK'zq-Wv[uIg4txnxG_$ju과igs=39ӳE ]X~GRǷr>O|K2~N$O6O%>z^6| z?OGge?@vC\;֏_m=-~/vn=?\G~Þ/6u@Wt9~NJw|8JzOfsh'/ˁO;>[o;nYDv]?zbvcpT O79u?:&8Is?l=,B0=>Sź3>vgҿ_=5:?~U?C||^Kb݇5o{]9&N`Xo|xʾ7^y̿yFߣ}y/G_U.w;ڸ!~+xZ~w;rJ⩱vG4~/O?>h(b?xN1y O'z Po@^Կ/x{88~Ս^j: yw^pήk8%zۡ?|p]V&^w!vi+t/o{zEg_Rһ+dw9^#wOX#֮I|}'0top3^<~o|v_RaZPsqY-rxsHw]c=Ϣ?1[{O\⹉[UkGggw?{?WI砛? ~軓(~r댟.gyh<^S_ta?;KϞGUJ^пֽK.ǃ~:{,q'|/y%et>:zL'qzO|cϿ`9^W}syRnr<y4rB}u_ȃx$\zڝ<<wͿ.os'~^ͯ+~kL^;/K[0Ѻ~cOh\㒧Yu~`K?zǟσ'$z7Oqw."S}>:^vɼZ7uS>_u#\~g~ˇ“{|7jvl[_vg߂6.^8%e~rKs(N7>ţ< Е3-Y'qWpq?(8~WĞ~g|֧6zL'9?=aw<=8 rv :ƥw 9.g>qHm@]_|?ﶞ\Go[? ytǜ|o`ϻߛY8s<4OV;{Py#c~ Y8YǗ^%č y` 'u)~Mx/}6;zvO<;7rx =k=/>~q&ާc>C}8Bv%Uh=7=wg_CЧW Sʽ;fיo)|o4Os=rz_`^'vhOuC뇱fg\{A'O_ͣEz "k']b7=Ǝ9ُb7֣ixþb_ 7wi[;+}l#x]-zƙC xbdd|O'xkm]oz|x7Snu zWhqꭶ_e\A cۺ߀Ou69+zcI;z ]:?4O6>?;tGCloKϳ'|Ƌ_лS%uș~ULCmY7UNI=oϥh|btHWCG({O׏ ciݧ]};!|Bs5 diC1rO>dwu3^zJh| 4~4ϲrY?]O=_?ivK{[O+3Yԃx2.>aoyW9oُT<ג7ZGbEyZΗ7M<N?_yo>rt։~CWC|?6:[7~k?u/{g@t;y\9`լKśϺeCsO-7k̸/]ʗ_}zGaW]|SwW'E _ыO{rӼsӟy>F<Ώ2OBn<'qz?yq[KS5xiF4\4{6>@/Ə͞:xS/[fOrfyH?-z^]^k~%z@ {gϻɞGg%βqя}O{OVnLܡ#_/Q/NJπ_{?a۟⭿rO{.I^|}.b5  _׾4x~?r=qmZRM|=xҺƯOʾw_;|COiޯu w6߽_-o\G]>\'.rn8xD-|c~ |Ao\jO<[`=OCNC8by|>c6} sEws8 <_կ:/7C{?]WyѸ<\E1usқ>s{=obT1ׯIuioiw _EK<&ܰn7J]=p~`gsC=\>hO=o߃x.] ЁYp)1fǵNrq g~ϯ0tNEÓcGֿۭۻ~AƉg~ց"?kr$7,ԿEy>?<}9ooa>D|r[yf5{}Ď-xjwyj'oxƿʒ^}z≼f} O3oFoμo7:79D?s;|[1їxN\bJ8|{xmxkD=z[W5~x'O'sS6$o}쭏Oؑk~.~j\ဃ~yQhUYki=دO]'ēR>tI\{Yڸv^wz' טl'<\= m~3OK&n o3־L<]瓿_q9SjG9g]}iv[u?Ga§;-'j^{O{NM{|zSO;qYm}nq>uoW^Ꞟ3}o)o {o~Wtj%̣ v߭}Ǝ.ں}u[98 .]څOF#5_1/8s~dY'{Θv[?algSO3熧'~&L!ټG[=+ˑ8DK|Ó~cٗxZkl~} O8q5^qmiԍ^iϛrnw!PkG{tїaftzep4v?4yj+p}} Go[9q>}}ݭ#xp<9'xyCέ~ ~ak]cmk]츞ĥߡxyv@|z?먿;[}w>b}O|o:ꛆ֡uS7wN{s-S<%gtfk ].峮~"_7<]m[|/P_CΠFϣ~l@by}~u_~ 88$xNjC-I~ۜ>h9ܨS $qwy?v#r^O?{ <*CGu]G[~Љ-BoDgx@b|fo|?^ޛ'c? 5_y{~:;Й?KukOkj-{3 _/f3w't93t|/ōu'~/>s=<&_ݗ: 4 ~Oy.7:s+{.Ã%}o|~=r}X={@71}zO/6˾d%E8cWwέmA{+Dn1;^}90ߣ/:K}gܳȞ7c)g=/q3&~>rY:ZG{>q]\]!NW}9yƉ#!_~y'{P? |*K^4}xc1^y?~SB>hmș&fэSݑ[ErcKzuG˙u;c@K<>=o]O]]g ^_ť^}ANzR /zzzKPF?>?߈yxMq˾K}axy=UӗvOkn,`7O닶gUȇo9:4*>x}n6~ Gmo 譡E̍S̺WOZ+ xYExB7/ eZzqGϵn\Oo~t=vWczjyz/z'KoJ] ^zܵy<^xj^|Ǝy)z}Yw|'x>OZO;Uv">$Nm4D|Kx1󵟩~;F7rCmVޯa}|!u2Z~0Ё="M_~2kO;qi[?NYv?~.g\=p upnYp=@?ylE>4χ^Z'tQK|΂3J[혯ު-O޻ԃapqyS//{g>7cމtiskOos>3?7nxZr=C{֫unG !Nyߍot>u?OY0nxӯ͇z'g;v ~$ĥk>B챞Kzx_Ʈ#A}_9lSsŽ9o[~u#= ޸}"#W䑬%uߙw`֥yzc{a3=-y8O??5j ;} vʶIzgm$}sr=>9~)NWκw}~?|3y Ov6oE4O?m SXܹ̏kC܋#]G._ےG}A6~ٺ7|D?xo?ıG_V<ǡg.ȟֹþk <#ǬKO϶2C֑m\Q;G~4=ii_#Bu ]ӔϷ?8q 's+7ȃīͼy;>ys/{y%+:_BϛW.asVuiW3<Əsw]_UOLjݔzC:מwf||3v騟Klʑڅ3k[G[}3cWj[ה'qD?i>t|+c.*aWO,l>rdù#zSe6UgÿW~}%guſZ~Ɖf^7s}c@_v;np}'=xs,v?}3~o5/gy; \kxj/S|KbO|=݇na<+IOt#?C=' ·'_wMygqe/TB6{'s9a)N7~pQYWh>ۼ9q⯵CI`۸qS3z{>/'t0/'oEљ}*h{ n'=&=#7^wɉkg|pyv1yC?XWgߟOw]̓'nK7G/_㣧8j\=xE/zqLr(mRwx'qP|ξq}\'{WΛ["g3|g3r+|s9w3qQWJ9W 蓕b^půOWCW$^vy{^ Wڧ5ב+EwPxO7yKq+6ޖ[?캡O7G_3'[ȣ5'nk/=Wp"~YOWM?k!Ǹ;[q?׎y g6.{p< =_yn6vhw=§OHTOQ~g[/_jX|=]+~;.({o^eT'sf^UY4ϱ|u7ޔ;5sdޢ{ O.~t O Dn7NGRY}8F/:fu|qEv;ïb<]{{Ӓ'ZG#urk{N >S.$ssu_7 ]-w7>;3O#|ovXSAn9'b7$>~e|{?\GH^6sj|̮"Mu6}k/NOc/?~rOK97=i3I?jg&`xN< dnag;?9"ntv=X{tϥQ'#9Ay_Dc|rsַzIsNgZ:At>#<Q<ͺl3vF}셗xye'سgqp a:qa]v^7Oqru,N|:WOUWFq'7ͮ)]h 玽[~ڿE|5uhE!'F^w2qx˃y`^cW]yex=Yh큌+uφOS{g<>="||/w;}+g}ip!/_s6H.9>/-wNO|KM~0\x:t\: {}i?υ'~kԸӶa7G.?9|o'܍׵+68~ŭ/gBץG(}NN~% g{O:y/z^e"o8= ו9#5\&]>~{ wypycʛC\7} nG8w]ïsx탭[;=ő'D|xd˹3~x=;ϳG%?/i։\\{WT?m{#~瓫$?og構#s y|tG6.yYy}cR{#zy~zN|o k77^^G*<<C3'Zor>_y0+K[ug.Õħ~6锿쫂Uy~M;s8BKKDρߗ~Q/dɞq_=WkzSC%yٛxѢ3{O})oX3k_'{|x=\,==CqďiO4y3#'N8⪿WE~/u;8g89!W;^Sk^<!g:yrA]pw#W_8q78'œ;Ӻ= O~ft7O^ ;d?ܵ}_AEϹoةog[JOu{x~Og몟:4c9i CR?s}^x޸i?+ϻ3'qN4.ήaw^3qqq#ys~f<~/Z;<}~!>3__v\S<}?30qǾG8 }$^<=OZoyjo[M||^ycޕgܸyܗ|5?q~ȃWϑ2i6?;MGt|v˾; wmgԏ<n ?yN|?#P2Q~>x;={_OZ_ڞW8?'}4Î|N~%~ѻ>u!q⒍5ίZ}zO{<o8V<ޡ8o7~7W7';l!-"=D\{/>$,o`xs ?Gtj^'P}u7̿ynm⹟ݗ/[焳[zG㗧: ZqȡieɡN+`g5ZϏ>>͜y{ [<{sfz[r}םI.xKJi;4o YWNH]'u=?§c|nus\qo?μ O/: gn3=r.Bc9XiSϱQ;1=ȋ#e' sSWk73xROx9=boD.[q7/xfwzGz|Qeֹޱ},jԁ|Yp m+bm]׷)r2^oǩ2STяz{op:S~O×ߞ!W|-wqѺ_^?=owZ4v,E+n%>ޑW?L|iz>+fF{Anе[|GNU.3غK\h.ߐ_cz؟~?xg]'3ֵŒ|oR}?|u>/gZ-ř;9ylWw>r>@;;ǾYx><-y^Prߴi M}kCq9?qp ߝޓ0WtCڃӒogN/3:n;|GOޚ='-K?ǷIȿ}+7/WLpcWߘ ?y[zQ܏gz^??{g3zգ={''S~4vʏG/?>{G/֝GN~x\;y~0~35N{c_xgߛo~:lG?J~6Oý#GE_>3^0<{7}bzksOnn>2xx~1o;#x5ާq{[z0#nn<}}gϳ;dݲz]IpG{ܼzu|s7yõ/gGww{iy>!Nyi~ύo͓=Î qx}畸?n9˵8&|߿C|깭{8P~>1\ȣ\gc\ߓѡ;evu.<%(qgmod?' zQu7mG/#dF~_<{SW{c/h~?{Gvzcoϙz>GESn?v<'93L]gSkcPs=HӪKyOywt3>;?SG=ؾC|H]:{O l])A}Obֽ b^o{_IUt?U[k?~_KUt?D[>->Y|%WKӾz39ڟ7@|.W-v}EkgϞ?}__9^(0?xGmi-mW<8>}WvVOL?_>>_w=:6حS/<5>>痿4;n!tҢ#|>}|߽߯&_^ܩorh69msܬV };ߡ˶3\<yw/~tnOo|譿\'_ypx;KԶ~Mqu8o=-rɾ|+Ok_$]휓9ʁ=^^V{8'ֹpt OpZ֎>+K?L(udYG|y_gʗ'ϋYi˧_N];~֞CԞΕ)=k'Ojgܒ{Nmt[4r^eݹ 潱Эh}C?gq{wk/}t—viOqwOqiޝ׉zߚ<x2y"Ko?i=)^ӿ_w}w]?I'}zϷ寖۞ɞ)peN/ {9 :Xgu+NS'}R{빍>|9=d'U_T=us]ƯǫN]PSZrmșo3CYO|w92:V>Ծ _\x}V/>?מyqkOvud<ď;gK{Z㮿E<)~OO9'^?i|O]_x xo~xstQ͓>3+yw<_z荗o1yc|ڌG;K[~g>{V<-•yY?z'={k~1þD|V O:uгzyD8\Wa=Yo8jOxk_{pwmOzV}v[Zۏ>~\>Ԟpk>m{#;rn=gǞc{_{~WKOMD9><_5{'-.j<| 6ʸ9|:\[8kwp璇ygsg<os_YoQڋpg}<`pù߾}/bۏƮO藺,ĿC]We NzRk]:.|GƁYj:x'8.pdoov%g^zl߳|+{cJЉn"g/z\^^f׬:{}G;X/i՞ćٿۺO?nǯfy 켹n1|6.GoWZg0K:ӟD\}rN>u0c=\ ^So_t8IDN7;a蹎݁?ԃo=[?g8|<?yݲc&Gon_hWϗ}2O~#|`q?)VoYGw$>ƓOmjߙ9Z{v/0<;6;qЭxϾ7<W{Rho?ߚ{?ws8W~k_s|m ~-5Op*wutTZxӿ'~Op=~xE,7ƉY޻'<+U^i#;^}:Ɵ*7gt_s|9W9ҵNO7>x蕗q 4O\Ǟ+~?^xD{tv^s_4<ŴMs=c?pyx"op;~˿w8kh~kxQ>'C۽7<\ɣz6%_Sb.= yF? :o-f8;r#|8yƣ?|9V\D˯ߓwIg}WoJC.ZC_q=#w^g7.Ё_WK?~,:9ӜzOccZtG/$]Ygtϑ/y=_|37?W=fcf},|кuz'r`{);-rkG}C[WW5Rr\4~~E}O>M~9':|14n>Gu?<9XoJpo?{7|zΟo Ё]WtL{|G#ƣ>}=@gSzw|#ucwߟs/n8ܼRU,\H_t~|׎~>.r]72|oxƋ 묳x_E#}F ޿PxWCέ7'C}Cuƭ}4t.zu5o]|_V]Q~$~ow?~)93&~Kzkë'{);E..c:.~G䌸q7Z;:\}R7+?zF_[w1u,5ޏQyt>yWЛ|>yֱ Wp.c]E7r >>;r~Z{+돎k:t$nc~d_zAyʏ^{z.yGK]MgS/ٛƁ~o}j7c~Fv Wy3t7>O^^־;"{u_j(]ϟ~8VO~_g ~4n(\/'Ve~9Bg|npۼTqCG_;.z|2tcX_u[o<%~ӇƓrT<^|ZOux=zmGO[ zZO׾'Jj&ןV[?q}>߻޺7oϺ?|>Շ`ֽvX?_{|嗑%߬7~yI]86E?[?~^i?zmǮs5ʾ^V}psK3~CGu`3x_sϭWdZr+; ^ܸOKN~iO)<>@wt!iH?S?tw}zü[gd\h?yz'O}_ϼw׌DK?a}q&/ۼ:=;񊏅>gZ_'2.r'x1?rU|^/yX'N:î#OןEtNhBr?cw~ѫry}/|mjw$>Kh|UQts?N_ ɝA?m\z~G'|ϟ}4K[qᓜ??>?YG~!|}gy{OCoU='~\7=v?Q·_}N=.`7o0?'{}/_É YGzx\A.}q<^5X/0/~+|8i!9a]qDb|sb&?r~8s95x5_g9Ltknݺ'uܸ~q OWW۸|gK^{5rv=IZxss_w $㻿G>gz o̸_<`~<{r뷸ᆾHh|{~<0q |s~qU߾;*c?/a W臏knP|9w3>ϱ _3z~fչN};ϭW?><#{?i>sC rW_C3~p?GtT:C?\ <|nz ~|q9E=u_? ?<8pf|Oq[ӟqNBWv4m]$N:UR;<8Rw?_~[jd;i. WZ'Yp!S컞WގG8g}y7ǟu?{N_p|ƿ31?Y).ywǛ}b#6n].'ڟ9w~_:IEޙ?>/L9uĮ[ }28\tnS3o7)Aփ׺#Wu yhʼn|\?₧ssrz_̟?A֯h{6N\N<+/}F92~{OWoG/es߳ƎНc^#:lD~=rN^8QOm]> ~VMS=U|ݺz_m6ұ}vRиyF/?~W'/~fwN/A}_M?/{ӿvy`77rq9 =?zռw%V=\z!ﭶn^[3msOs򩃋aهN`N^|֏Y{TI1VOw{4u?9>)'{fufsXʻ{.R罄Cڍ~~+5Jbi;}Os{+B?~ ^e_[;T|\\r~7xە[*Ϗ4?iއO+j<ɏC-i~y?z߷>E>x z]Ss#.V=ĩ Cw낏ڽ#^݁?'p}GԯBi~}ރEÓ: k| ~gkzSHvq8_V-U;~rhKz?k|ܼ?wF|CLhxZ\M\bR6"NjɧK$wUI>}:g7h{]I 7>jpG}c'ypoq}޲Vމ~O~o˯M/tחd~Y^ +v~_rG|/E5~q诽>h})y58Z?o[Lz/Wot#_a7ķ}s]a= >lw/mكC'-[<=[9|^W{b#{)xiߓu쥍{qo䎸{ָꏱحQݩ|?n;q߱Nzˇϸ</IO Ou/EnĞvw4=͎ؼH?-?_i/qmo87ڇψ}.ӧyc^uw'̺GNI=Ó;{9??-\481Ձƾz!>yĩ3~k.쀡8#IƯ'4)痵یG_֋ ?™/_3QS=篆{eW}/Eoq|~%-oi; OT;^ܼ;toI}q6Pǹqsu'cuN/..u*$o'@ /mr_=}~vzwY 3;`=3K9=>*_X<9/lNU}mKtO'%DFsvO|!cGw3S'yO~./q+o !r?;MyNSwuޓc='{3q[<>|mhFvj?fݭ,־3g=ޒbc8s+/ֿuazW_c"Vm?_=Bp~\Oeǻ#w xb =kH3qyO#>ȃwy(EE<n)L8o]i5UgE6n}$Ώa/Xo~'o3_]W\}xAc>ESxּ~~1 ;QL_v]wO['_oO{"WbIA8C2r`>k_O-yzyF_~rg{[9GWR_ o O"6^>#^Ng\qKu 3i=O?]3'5UVþ1|<|{}OFkE~Jx#x~f=G<"\?nmݭ#~0+^4<-_v|gkuaq{#ɻb}:= V _pUع7g ] a'8w+<1'}'yR_BOar}=?\g}ū~>׿hx=!W OЅpvЩu[(^y!xD z7~/u9g ~?3`>|~-B;UO;#g}?ŒG<<>Fj1~Q??>u4o_U n)򸋧u;cXO磰}:|m|##HGzY]V|cM/~uLƟkg\'%;^fr^_xҒS{qiȟU <8z)V[;NO\G})yIyQ~ <9t#~'|j+{KomG!Or>;i\й|EϔKNp%@zO/(4#8k];j?Ʊ^VSӟ~mx.v6n~ȷsVWA_qZ?17~PY<'9|Ǐ^8qn|Rﵞw< w\1._Nj{ƃŽwocsу}~WwF蘭y|A?6t7 Wg}i#;;^5૏|3z nåWr~kϯwc{6r?'x+uߚ'`7=P ì'|V᜼o\LwqCבh<еoGOgn(yŁ8@49v|ރ98챍+)83mk]Sqs#9H~>G|!v%Ϸ8:<|O]!\ß̼i ~z_c|_'q3 ={ㅃ}\u9Ӈkv:]?UyԿ!.}W9ʺv>ɸksosƍOW8R?g)]Y5?|oo:nn 녿E1Eu]?!~yW~<_>^{V^={8N:n]&p~~&ϜO֏}O$atĿy[gu>d}OmН] I^n-ş ;^~؟|!W;K1f] m;?_Gӿ}|gnO>CpXcj/qJ]ȏЏ8byM9#Ԟd|tω"o[s7gq<ſ\?M|ܟݸ98~C;\?Ovÿz[nqnKB~>WO[c^~5Wbߟyz7W%7<|G5W~֎H|On93.L{}#O#qKPײ3{b0jߗ}X~!-݉wsug[rC>wύ\hN|򫍓=kqw>GW#K.JNu W^ȯƗIŞ?cw篠%5r vSsǮ{.q zr{_s:{yV06m p|xʏ{zqdr?y??o=u7nyc%?/N/{>ő \ϼ?|sA^.?GM=o?u!W'>1 ߓ#g.3!!}~@.o|ߣq\h\7?y3>ctWЇ}c\>voLݷ=Z9n.qr:CS&Z;kC#%2Bo?W8uYF~@}=zb[3= ǀWZK[?uhswzx^~ٸ(=C3&|׮e?{;hz<<oI|}ސM4OK~t+f8zguxi A|ĩX'iЇ{Xo#kk_S:se6/o#gI4O^898i;=Gˮ=x}9guZg#>!N37;?otc|.GKOY?83n*+ysN+b<_8}z~[|Ҧ~kZtA7wzo>L]ϴZθ}?{׋Go/Õ#C[oOޓOw Obw4?ћysr޺gǫ\tՒSE'<|At:#wʓ_S)chΕ^tA?_n.ѣ~zb޻Es]]1kc7>f~o<]L?{Cpͫh;6N@/Վħڏg7 ~O/^ǐ'Ok_~' ӓ%>i)}7 ^zI;~Wfq^K}-<-|/ƏrnzYw*Zne~$Cm=}S?~'<}#珘gm, nѝ8/Ow?#=w'ù~=ד_C/~gjEo~e͸wWɋ ]?).~֕2~'<.;Cg蛏f+~3>oo=m?|}|e}a6Y9E|q{>^y~؅ݟxwԍWW,ꗺ_"W־/ڴ%a\{S~3^*.|B;w=c~wn C!~Av|j ~žO\`u69e'ޅx$7BϚWXHH-u-r{?GÍی}R<Ӷ8i^m}s w7>gBFZ"'S~6o__?|}RC=} ՎՊ[j>׿EG#NX&\CqՋ?_輔Ɠx92 O?}_{~_GNmf݂̋j֟l݆GWoyX?t>mۚ🄯NZy_֏|sCˏx: |j njZ?Nھkj˻oO?VNw^Z* _k#gWt\9 Z_ߍUܨz\|ӏOOxBm3>\rR?|;}'= O9ߜ~"?WU?_:5n{tm>a|}?rĹL0Y{?}Py.Ɖ._7o`:Zӥn y)Owm~T:WiύC<"z7{͓c]:Ywjޭ3 u^_9\?ź?R;q;Óa7V߹r{Ot }|I]qؕ$ԁ:7nk/_{8wЇ]y_ٸn|`󃥓yX<m<{ޯgѩ~ yu5Ko؋c7i\}983Y2y}7k>dOd|݇c߇=r>sF+j޶>~S?^i˯#.2|Zx8| .ONف.q\~77=3ȣiA݇'.77놎OSA7뇏b]l|5=]ɼ\9sGƉ~Fi׃7xre8{<+Щ|wtzjk[|:찻:ڋ;p~G.j6.}B;ݵoK^.xrqq<kY][m-|˟h|ķs߿>oq vȅgqie\߳G]9\<ݗ}Z8p<{'ϏwC1<ޮ?zkПώԿ|~M~x6y'ɮ/%=o:8=V\5m.Ƌc߽tǿG OuZ?&W|t:m~O;7fVKMO-|{֧rwO'=T׮$w|b˕ww<cOLk~>7זu}_'sQ-BfMmՃ?p+q}]9j|~oO~OY?qrܬ7ryXvvwΓлv g!qɜ b\WG?k\]N~uv[jm Gr:־vU8Z̳I'~?|/{O~'и:`>E+ϺN8w\mO㯞\ys=> {>R$7+?[/0nr?Xy?oşK|z WyQCZÿO!Sz۝|/=!lχar?[xpˣ4ѿʝ={3cs^> r믇}4 0~gvxںO{| z:|Goϯ/Ϗދn_\{]#/ع֡z;gm)|T>8އu5_"G8 {e~my̶coσX8?az'nÇOJg|Z}-qݟ_407<4n~Uӳ>tk=ng'G} ~\?ޙ+?s.^)Ξ{QTn}qxzYKy;4ާq{>4#n{sK㥗_/>x[靖pz<}Iws'\wϳָ}G:ݱ}}o'=}I}x/$'im!Z׃OrZ?o⶧xk_e=8j&GxcM_+^.8ő>%Ox{ZWcݼI̗|u@t~Ҟ 'zx7/޴ڗ'\ e~? ~PvEO'SnS((߯`{R~,NOyf۷Io?z^&}RW֫h귝:?[w'Sֺ2udSunSRuezsW=N=W~S_1쓲jw3u{`Dw_Ⱦ us}r_~Կ#V'X=w_y_NOݟoB{bܒg_'qq?Q3y9+gghdu<Ȯkݲn}(`]{~vo!u?` ^<(<8>#}v}}~f?Fu_ߟk]:>2~ʾo|;xrxog^2akCgv:Y7CoKGb_Y#vϻߔe}}Oa\k7fK>!y ~>]7?qVU?|]cv?x6N1~}??s~Z˷۱~8r>"w=<ïL-fa/⻧_]zs݇ Yk&~}g~;~o:K_osȅ7'>w~_phGpyӶKm<ljCmkG~ # ^CK+~譿6?0B>wѫy">oL.ǃ~ʞS_˾tOud =|j/Lvﻅi7⋾y3]Okn?[m~<׭^>Zy5sƿJO(r|ۜ6=nO>j t`K )7~Xzuog;xvw.z*j/{8?͜sc>_?O8\v1\t{bK=76{sq/>_E@XZ?SO|$`|iWG 86?\]->=ڥCc{G}oGe~;oCn~l7;|g+V/<4Ʈ'9caxgۏMs:gw\x$~n8g1޺mU̮οo<TQ?q y㱗W>j?쾆v]UH;C~w_r_SGjF/36qtq$Z}$}/.7cv8?tz ķ7zO㖟؇ǝJWEjk::FΪoQg##wOp"?&ϑOUC~~ng_>5Num<:߭^M]EsQqr^D7@θ=Eu Zq$vW~o^]7_C?9_(<чDN9-l|z;}zկ3y{t7˾]{'쌏DtMgueOpGxьy S=:\礟pϺ_qЋƥeg?oyOß|y|C!M[K\]? v .#nɫ->{~nxJ|o{|5W&޶wѿzطѕ]\to;!(xώ|iO#O_ z ڧ7w_ug|??I8觥y—/N]z%z'kũ^O<>D_^v)Ժu<뇏gv 1RjO?U[|&BO^.vv2Y]΍_}rq"_"''%A)7벫WNuvmoJ^ݩ<燞VY=ΦǾxsZ_ %K]x3"G.ں?wAG;~ {/|WݯϼП]SiTZzVC|mo~'<<==?$6n>vy3"zxy5xy5y댇=kw_>ݯw{ZI?>z2)x_?SW^vY4L{Y7Ko|qnb9/..T|^w菍 k+xz?o; _xy=3 _~=ϥ稴[&Q;z?}d}ֹ۪ 7878ZvN{ڞ,8Ot~'{]Г_^պ˴[.{B'q ׽9_L_i|#/jRw!?yE|Zwneכ:Lnw`}In-+:8t?۷iE/&R|}-_ߞ t'iO|~wG8.z^ӏuW|뺧\6^~;Ա^ΧcɃi;"Uy3o_>B\N<\]Tg+GS-=?]z_ a繾oqZ}ϊx.'m].Qݍ}$}v87 ~:!up'x~eĎhTlk?7챋сkč} ޺Cui<]>g{oogcnyu&G)z9^aB?gl|tse/3N8b,?T>%kwp}n{Ӷz?w].u_߿/9|=o:|غ޸f<>r˻_7#N7|{D~~rsENICsڇ=j~"G_[~`/_{jʟoOKylhV܋A?V;>x9Ny(s;oboj soI+z.uJPg4]ߞ_z|To'JO#>3 wyǟ C+ \Y>ǏzyݗGptY[0|>w}m~7x:PuHGD7_#~qߡN)ޱvYpﯜ}E=uzw/Ѿu˺럟ucQg7`Iy7Twߛ~.x9 g3yϴ6o?-/=I/WI^o=79E=O-8 >E6^vGn؇֍.ܜ~~k~|6~Ox\/u{_qgy-vx|.=Iegݪ7>_Tƒ9;g6 Xzc_ҏw[y6ݏE߹}KWśv_$} GΕyz_gRxo23ί$KKz'"7}N3}Ӎp*{gL9Kz]~yY7j8Sهظ=I^uwqTȎӯ~Aph|>_߷)zn}ZYOzk㌽O"~޼Ch}/)㌗sry~^ZL; _(dv<3;fI<+?!>P=J'@Gqt~ƱGYj 3}OmOnw.o:Qg+ ^b7.1UyH,`w rw]w^ew9ͮg<@z)''+pgߗ^y~S?ڌv/6| ~$dp^8Z'c_:yޘl;y3vs?y>%碝=U~{&S=nu G&<9I_|^d8G7?b~7p'3a{x5/|wsq/Ƀ->Uī_~<49|,~hp|A>4Uz-ͮe=PDžu|m8@K zoi|[yK}s?9^|`Gŕsx5rx捞>|fϕ'.{ԱS'ş} -_jyrpUܵFy3/qF~ȭDqx_|ڷ?ʾqS/'ĥʵY=i7}C9xM[Jli97|\r\Oȟ /#~i㉟O#j_-n 8>[oa9o.睢S(> 𣥟3POj\sإs~ r`sG`p(C?ߌj}y6/'kjOYU+~)imve5g#m:r[rgGu{>L{ ?}E? 7úC#Ϝ/>ƎQ'xVBYo7gɡ^/w&7|_;o` 8/~CyCz/}Ϟ\[4/ >a_{P=u/Э{h '.r/~X@7qy\_c4]{5yԥy߂s[G|}s2{ί֌|!fl]X~|}&>br |nWQƮ{)2~jn~ |4_Iz/E_ N?^:^$=wYIԧѪ'ժ~[.ՙ|9_W'_IώOu gq58Rm#7eop`%n+=K*F.5a-篖y5 Ӷ~|B'_s:c|f_xδ]x?.+=RK>x3_%nESxj|#o/ZOK(Biњ=B]<]/@NFސ!^=U{yOy/Gu*vYGG\:S'~Xzz[Oz/yx7>hnZOOy_'w_qrowGDzBQ3}jyk1E|ry9o0SkNtO|ӳk?7J>^9=vG3PioJ1ufz'}A.UNojx|(v_W?%Oqƫ:7X7_U+q3o=7wG[syajWI (O{yoo>O'<-/Źij+~K}^]&0uESm&u27qojprTx7o!I=~շ찞>?(oS}:*Xǵ^-| mo{p(>~/\|k(+?FUO߼kڧS*[g:=O.s} J7u{x=9NNZֽ_O&>~诮i~Q x_CлWatE7tBor|cGo[~~w :wكM5~i_ 菮/{8}C`_~inK}q?g*kv-_Ѽ[/E./:sfG/YG=9:7H{a?g7KՍ78'8"/?txdߧ@x;k;n=/=Ǒ܃aN?Y?zԢ/ ǛIœ~nWa?rK\ŧֻvhw| <%W7"x]7Cx}|A[}~~toj_{pnG?n>S}yx'7ا m>8yNw^C3Tsp(_N?u i\4zx:ɷzë}>ei59L;^-߱/i|bK]qovwy}>ZzkZxqnxF;m]pwsx=猍_O|j[~`<5G~ңtuT/ȮGzCKvҞ#?u 9.>NpwX:弾n3Ovsq]g=w#8w]7~˾8N~gm>k|yEn}yi3 '{=Su 9ݿ4z OW}u._{⎼_s/9d=8DwgGWz_ÞazE{}8;.%~k{O\O[}e*~Oh=Ԟ31lrZ.z{K>GYgCuܧ?n8ܿu]uƽE͘7kvbG\k<Ka>o\bƵ5_be}/aȾgac}=|oۡ)kaw/>$_ _>pxڿ[x?Nޓp ?C =a_sվ&ꯉ3ǯ>uszs~V>Ĵ>x(甊3O}ù~Bf<|.WkoiDOg}g7wßyֿx"vj(Vǟ$<Ml-J]':;ow&.!aWΧzh~-zf&xaZ*=ɹ z+Gm|ʳ'9iC#q9WeI|eꊿ;|Nؼw2O[z]xogԇG,Rk +׶^B#AOx0Ug󭷾sjXLΈ?;jg]ߛ~/)}EOKk 'tl߰ŇqK׼st&^uޛwI}q1=BliqsϮݟG:G= w|&l#~:j>GwP#ŃZ^ b]G. wq<]Z~/]<|y5;:g\q0q=ykO}lT}<鏿?肯e>kzݹEiߗ{{?-'\;czנּw|dq9^{}zW=AG}K_a9[sYzl:{ys)ewO _g#6t/:qo!z^کï}ǽቾ|̓~{|чf>|kG{*~ /QN 4=i[G㜯dS׷>5u$|89_{nVu }.sƞo>ݱv|W|o=OP~~GEkGzGOApOl[_`NW6f8ڞ=ϩ߲x/HnyXw~#?ɬ9NtNUa}#vgg77C=sN$?sg?' ''wߍya=˼I'SU߻k ]Ox8qq6'_k ~;y,G?[ރQ|<)/@.?_-)=^DOε_qϱq8?D?r.=s{GH !^n~+ϧ,<-5NzcznK2ϷFhįpܑJDzɸ=?9U?$NI?}`]uH|g^Lg9֯:7exzuӟ"w"OG}G~{/~wOO :!w.x9ѭ'#_-xOxBttЧtb?S/-s:+?ط7t4|+#:uy򌜃7ﭯ_3@:SjwqϞ13|OGJ{_W7nG;H\\'wW.)<!n쓅+zK~ ?C]g]dOQ?fhޘ?4O_'ziㇰK̎8K9Ϟ?lD|yG_aO38z]?ɓ5ߕH=UW:ڗy~sUf4 _u7~ 9E\Ǘ7M=@=Dkq'm{4>π{tsyw߶O{wO'%^?O8*`6ύnV_jG.l~8< ;,qu賱с^K侇>M?G_9|An/a/m:wOwܗ:ퟜpezoǝ$|8>vÓzWqo?Ro7a~?lzf;ȃ5`k#{>:wO&yް/8[^Y|$8r%m;R\q_q{\џOxf n^= t<ծ8mbx=^AzѻK||~xQ.9_\ae߻n '?>ƃ[xV>ןU"ypD/˛3[xsvCԘK5m/O;ϩՕiGB 9Q*}/$߇_q3OㅣVqW<k?ȿGK7dYqi{M\!Ÿ_g_6>~'r>o\u X=L>ӵ`緞jACO{籓s[ O5J:gKY<;my|o>My•sS[3?>[6OOj/GwЍ[Gש c_I$:$zp; ߮̿Oq<ͼw6m77qBuY{5}+Z~vAr?vS'+:; GO{;xԡ;_mi-wOSo OpS-u'GzN\Ǿ'کw |ߺы{-?oj|~<~;d{_}_v{#zDN޾o~Oӱ6cD'.gsFKqp9}Cɧ}a<~d4yw<RwOݷkŹ?|cEO~}fCOtQW[u#Ǹx9{?+*&Ey/ɣ\ps(=v=Oٿ [/yjϼ;{|מ1rK=2??9?u C|4N^qDr;|OCno:DO|=:xzivٞ[oiѥ^Nm?H=5?޸^eV{q|gkn^'z>BoO?I|?K\y5~}at ?}e~Ot}}R53놝O:Ǹ9o#xhu޺֑?8\>/֛a x8Kt%}>qOKi<-O|N/0imFg6UC._}9q8>&߫M}gemqV{ ]{_=s.|'r=u//'9GO+m}_wFS竳4NrQ/O {菥W-89>Bͣ>ۺju?Kyy<|Yn>Hquܼ󗳯sӌ\ϧߞ78|m|ww _}Ԫ7Y<\CԇKc {؏V|U~cy!>zW'm7U7>r (Ϋ}>w_txO+>wC8ŧ7;~Z\<6ޗ< %;i 8ݟ|zy8,}C[+ӏ7On'~O^`g?ݠz??rʼ}['/3~8Aϋ/9{o sgy ŋsZFɺon<^4 ?씋ֽpmuqAu+,%/oq~oK/ip㝇$C r} ggs>x_by<w7eѭ|v>G'u㗰gS9Kc B_rj1S]ykq%:E'|N[:|,{gSGƿ9xp<}q7>Κҧ9iN'W&^7'} G<߭zʳyaG\.͟<"ꞋWp.>O'v>?oO^|z{,~j'^"G7N?ţi?OK^>4f7O.g8& 7ĉ!|j8#CTGK“Ȟ'pDN/]O9q=v39'z#vCxOOxN=_ w+o+nnͺ}⨛n.<}W=}[g~_<;LJ_<W^qAa }/^]Աdu,WYIs neWmN/x;py[? LJxⅿn7 ?NOU㭽{Gf)^)r֥Orco˓{1xx]׾sS$kKz<8&> Ƕ;Ost#']W7‡?:}ʮK=)㧴^>゚vf񛟅ɵfvPg)N>Fov-E-CyK`,? 9z ?.L~gI?䃸󈗉wz]~!*ƞ7n~dGѻcY;'FSC O􍸄q7m]xoPe5x{vOcO!)%`ڝNrwws%|ψ_SW]K ܉ONOQ-x97پ♏qǫ?%/v|3. XgG_$;ϳF<JAjOj_O~杧Oc>Avֿμ=͑W}c O5_|B.u{>oO7E{|>懂Nz&S|p|1nq+9Bqg{.?ej:s%~ۻf=5sCg{`syz (Z۸|%U9b}Gm<=~9p: ̫mI'~5~\:ҋ_!nÏOq y|qzN#z_c X#6/GϞ!;[?|]5!}<.jɮ8NGqUzq ) g䛸ĺؓ}'qKqF 83y{g;Ӹ9qJLq<̾'d\'}ݯnoֿ7Q@_ȗ޲W=/M_9_<ٷ6zg')3|2'qzK-yy_ 朙췏ƾ%їڸĥ=u;y xZ7?>3dV?h?EK_gH{CG΁QߺzݩRiSϿrd?n Xg~ZWqߞG(&Cm&;txV}j7SYaü{zosZ/p[>*笠S%ns'\s Z'3E/{qzω\ك~EwOWݯ翞oOKw )O'o9|ړ} ފ+4N<9=wogڼjϟ޸ы}0#b}H=6oSߥu%//g,ssoU% )~ξq~0x0sCz|_|ϏGoȹAΏTg:tH#\OЗ(OmL\}?Zu'>hvq=yϤQ3أk1#[ѣ:׺1~cV߷N:C1kV9k9}!_/?=֏CgqsvUj\}H]/w=~:9z7:Os||%n琛ZߟgS0~V^NmQ=.2>fN|_z2q~ =ŭoZrNi"\?|SU,9>7wW'szZ?t{ ǿuᏪsm(K|(Ƈ|~|ϻo<7C?}f5^m_͍qxܹgnO'y}ۻCCߔ$g7ޕqSz>ʡgg/*i>=>~cqZ'xן~72'مyi!G/r}:|ZqSge!^u|77qcmOq Ozn`<0;s˾k{c]<=xe~nS%YQA݃:^O-߲Nmv/*Nt5]u~JuOmNWgu5yNry_-}{譾O߰*f Q7W]>Oݝ}* u_SzSugbqnP[:.//Uwr@ u\\~?]pyCN^i\_鶻eڟ*]_w'*ۡK]pB BA("CI69$$BFH)xdwkﵴ|#v֚̽ͿyuyQGuH}.TOҟm;zdz[mWo=`wy[ou[ϭ=gGn{as+]?>:w _J=:\zu1}~@~o⼧~H''xb'K?;Ůu8o]Ovî9l}ή{?]c}NO>}9OP֭]Njٸ:o_=eWq2.}hYt}{cooZsaqwmKGߗe>v]7un>u[0ys #>Ǟqk]Gfݘq7N̼8;xu?]Zn᚝>k׵Y_kj0;ݶޡ˺5.wyٺq~8kcFgg%[v><ѫ<7g}}s:it&woApu8f\z >e\ݯxƫͬ/޲}Gz^z}ý=i*<G?hq_"^oqw_gWZơx'}y= |qx:k=ކ_54U"W&*<8hkixY4Nہ'zzƍakO#{h vxԞ~hmo9/=|wq㤿ݯ,vnة??|_OO﬿)Q]4~NpV6g̃Ӯi:3RyG3msr=~qg{X'WooJ{ʭk nqe>֫-+ZxxkrO>%S?*}+9Vߩ{~O-ȏ'_3ot܇bG>#g=O>Ea~2>D_©hζ_L{oP;u'{r~{_I=O[٧tGO(lM{&+ҷCVOӿ==~=,os:_œ49B㳃bk#vG}ۮ#x-Z^ O״/y_]EG OzY\E_DZC9_g;c/DnqO%A]: v;K?qHc]ͶqJY⦿{lG՜_o7?'ҋѓ'rxߍ9wijćZxڸ ۑ/r9|Z/K1<Wqt 7-^(.^|E~^cϸ%OO>񽉿7|`pcv*r];| v]<~7sy83KO{7Ow^}{_=/x|x!3v _"O"o]/^!˞=9B=8 )OYwy~<Nq2lˋ9Zڱ߷VjkϺ8vڧȅ͟+o[ڡA9cuHW'|rG ΃}noO/Să7D/7i<=Hxxy'6g_u[2^#ݗ}%\8r])v~x"]'j]} c|ܜ]O ^#Na q+rz-IJ;/KG<!e'ev+1og;ϣ{{V|\xvi5cygշCxp7ܒ ^Uϑ_T?gqޜ8c+ }.__~x/~o|Y__nǛwxb>x#{8vG{| <鿺Qx{7593߻r{_q}I^W;5Cux5Sp:~ g'ן]G~mވyȻq/g? o_:Y8z}SS?l__ĶY] ?/ ċYȍ;T;dXB8s}xK^oY\&/1r}r~<N ؜/r.;~g~ɳ9kUSדGͺ֕E_'> wx|F9^Ok N#8/GSGx8sxwyEO8>[g߼o_~b nwZǘ~9o'ñm|V# ?F8#px q{ef?KzG~6c[_|E'S7]?߂3r_'~0jW\0r{~ty_Yg|qTs֮/?Fg;FOis|hFgrܸi =i7>s`eciͷy*;O㿕 'zw3?˶T~g<+ryC^)}7kuw\l\|u׺nݣO=4ye~$6\$|u<_z77}W#?q#|{Y;X{#O8w qza)4v~yH3ծ\{{k8~^o&:̿8^=>ɳ‹8-%ym_e}wӯ򝇺\_s}=3_};/#~޾i|uyߓH׎|c~_>=u#+|;}H4.'ξDOõmq ?m}-9~4'~7\GzAuCߘOnš~?w5WqOG;Z~pOxϾbxNc7Ryy9Aq qB2x㟟n9Kzsn|?N:f`y*rQ<y>"qqFCG'/8xxE_ Ƴ|)]88~*O?|T\|簯tRGEl.dq E?dq+[ͫw<+vǾz'?H_ȉ׎E?k?3{!WD+'<_{uOm|R>>к__;g~TOV7_QCawٝy_>gEOψ>yr穓/m/w/xhi_~G/38_[/NN|6;>W;~ߺU}wv6ڥܗ5oǦ_eCs< ^0Ϲ}f>O28qޗ"g83G ĝH-*>]u Z~_eɝq#hN}mދ#[x5>'wzSy< pHJ;n6.)/8K ?^yn/vߴ l'ȸ_7wo>̿we"3ZG~o|*T^6ڡ~ ./!?7'/%P_ЋOFnB\:s0x0kችw xa7<iO&~/"l vwzHd:?򍳏,w?#I_/5{ym9n\I4ƷYf2<_o}HYU9{vعw%e'ҎgGoܬq/'߮#n]兓Y{mu7Oyܼϸ!_/Nq:]w^ ?o/y?jguN^Z&_ /Ϗ2n!}Q E!KtwջF5|jv{|7~BSWPyb?;c7qmuG<<$'~'M-)8#oYƏheVo㋏^eqO^wvy٧Q_}Nڽxqa{>\!_m‘cBgt8X9oV7^ruۭ3]{r<Ó̫cw߫Sy;E{ ȿ' _ Ɵ[|hscO;O}%y 7w~/Ƌ_l^3B>1x6DrP ;x_wuy^MGL^Yq:vhx晭;})82~wvW>/<GbC=%OρL̓<G8cJqQv>.6y}_vu9xxD߇{ב_ӯO=7gř}uO=ǃk{:?_%g;t?q#?ݠçGW}\-_n}q2so>7_uG'Ƨw*'8ߞcG_ةOe':[oqqփϾp؁GϺD,:3ioq<߯Y4<\눏5yO|=7حppqV'[?ukˬg'|Y8Dx<:~x-no{VGNeyדu䛟//GUEc~ ^~<}Rzd=q"N7zxދoޑx#ď0o5>''L14{ek,nǼ~U䉽Zo ;x#ygl^?Twܟ;;uO0"W3ڼ{\W; xw-Wꦶ/u@8b1uMg$_Bn䰮$wޡ*/SħV<Iv]Z?]XwwE'kKc/ܸ&v-_e7Ay3KW\o:r|+cK~ix[E} ya񆏍`1iPkyaUc?Q^[ڹ[,~=wE9>x>u,[~l~5+Ioty~zC7Gσg^c<~T>},OSz7 ?G\ 7*^a|:ӌO߻+v崯0zrԏx=gZrgpD2h\9gԡWm=}qjj>#=/${[".b6*_nW?k׮^-~ϸw]㬯^f]18j=|O|Ku[Oˮj=_QkgO=>;:.=o>nCv[otqRo ^WE 9;}] ~XƉڛ+ډג?~yxOi8 u#; {;;~z=y@->}oQfȃ ++?z>~W{Z 8W&Z{~/g:'^C~_qcHzX'<ٺčϯ[;u"|=4ݿ~`)?z򛴿zz#_2rV9Ϟ,W;oOݑC7y/u~k ʏ #yzC䚼?ڝo_{|7>si<3~8qك_3H(F3|ƣ7})O>]X~S?l"ڧpk䞾Yne ÷ܧry曬Ivhoq/?9_v=L#Y]P}JOO\z:>W~yRrNد___xܙmkl'8CrG17rEjn3h~X+n=t5~9oyg>w̳q4;/Of}E~qSYJS䯛x׭򚉯8o:uL\<_gG9[׎GQЋͧ ɸ7zI7wŭCͻ;{<|G`\ȵwwurǭ+?lyXC}7߫n½m^^9Ÿ'v2\>@㡽zo09c'WMvΩ]xNWW *u U'Lu|}Xf<ڭ. [AT׬NN~,h7y#g=.z 񽑃߲xC%xC›?u h'~zvuv<.!~Gy٭xx[W~o]_Cu;7ҟ~?#Uס]䑜kwkPo};3 u''+o\P/9W_{=?)/]0qT9~yqxu~<=5q_N_8#q^}}jkZ#>Fϸ~=3<+x'5֞4Θ,p|lVm<7(?~#ӭk+Nf}[-/,^r߃?+G׎OKې@wq޵Ww_{@l=۷N>5 ^^ybȻ7~x_nݺaY=0oZd}C2~ƇX?ݺC:{38a]I|{*2~~xfN3I\]cGi潄'G5z)|'=־iͧ}ˮ(/b?Q{`?E>?D<\߫MdGgaȍyG;_GgNvg3OiևO?J;oz#<||΃'>kC}ypCowo+>}Vqƣ?oޫ/fh~f~/2僑<y{jJ7-e~ͳ>yq]ϣOA|❴?3/~i6TĿ}oɹNT{O<bwi@_p$_⨮upܟ=t?r[D?4<%Ů{3K.}e͏Wl<a]GwJGyqz$?rGNYCSƻ~䷶NC9@~ᄊpFCg!ܐ+c.lO;c%oYr̓qd%~J?t#n8x< ˓缭۸CǓL~yY7> ^<_/X~+׺3_9Wxsǎ{*x:{JYuN1.H~.>וU9杼|Tv|{>uc}θ,N?)o>/yQ k&w1<~a7W=>'h8<9{5qlv߁Yޏ5WcڞO}x]>}M뜴wTo>(N'Fj ]+yxEƱ9Nxe){u{͸:UKn1c '2#e1}v]ڵ{L7ngqCakG/<]G|8d-~9o4|S]N3n=ױOSOuೱpe>7}N7n;اlGx.%ny(y}sx,Jp:n]}ͷ(lSqݟ{׃3݊ɽ~C x߿;陕C{Gwd< ʟ=#g#g*2z뒬|3yUЃs}C?Ѵ )I?wC>A._Gͻ;+SƼ->ɋApeTiqQz$zM}K?8_\=OS7֧#zu7ŕ8C(/.ߎ?S: Sw9o~/pHWYv?lmDN#]yr:e>v0}@X~/l/8Qosƽ<z<~d<(t[z]A}&BoTOzt}ߎKcCߛGCm'arOk: z:G~7KwaOO~zeاz8dSlĿWig7^>x{p:]oDO{n;y~̧uhγ=Oc4?2xŸEOW꯼7 ?zUo3~]gFهM75 N<,턃/Q\z1of߿,dY<O9y<:OF^7vg<~%pj^C=:lŌ;$!&n|~>0#/>Gx8uIg[^z޼Ћ]OqwR??ωs}כ֟Oc)z?i1r_8Rj̛/Gj{ݿI_ju?`r@ﲇRO\ټ' .Gzo\|V/Τ ۦvk&!,}\YnNsyvXjG O˻u3Od>}OyA=ӯ,z}{UbIgҾAIkOZ,i<|=S@Ì~$n%GO~χ=۾C޴x8ά~[{AGNM';GzB|~c7OsQp"x"/_g#)~{ii,~~d" dw8]*ނ'x"ֿxmp Kg9xSMn3nԫZ7;~z =og_fe[OI/nîO<<G߽q;I/N||F.ȩy04瀻֫wW{!&>woM]Yݟ1rkVW>#/:߯^K;ՏpICںZ?y'8s:}?x]-?}w=pbxz!O^O<}ʣW!x7z.y_=ػ}?Jr|q3x '~MfaϺu[aosK~' ;Ow|3'zG]?Tg~WW#]jY\OWMG^~3ݺk~?Jz dz^7#A|x"GPO'xJ8qWo!W'=6.ŏ?ux|E^9y7Y||4=a^3OxW"zM\μw݈=ySYG^c&Noś:<^ح?7=q^|OF_~މ?)&G?#93NM>W~ /9w.-&y `}O|q?v=r3,G4=![@;kN0[3|= Ӻd|&7;^숺֋G??nA ï?H^Od՟VG/qz䓵 ^y3Q{7NI} =':blP?*rsH{׊INZg=q7䌿EodoQwODߟ{\K}qe ̧#ɯ=c_kqlRM~ 3g\qKw}k7x*=tu<%gSos7b<+\+K |7~Gg ֭x^u_yyH8|$n\eI>ܴo;GTe9Ӹ'Oj]DQ}+#WSY{d}_}: +;xUOqsv\>X;q鷼~OGz)%N}MeG|ؿG09d7̳:<_Gϱ jwObgSjvx.7Z7%Co|iq<'v4>%P|%g2񳃜GN8u_̟x&{Cٯ;Y";Ŀr_<(G'pΑ "xNhG=7?lZO x ȯ]>O<}46Y=v6œ?ïng7rKx-9g* #ǭ˵_z}ݼ7yPYQDGXNs>#֧G<4qŕ~{8_y?릞aGێ}ɋ.NE:W>Ht<2czjxx9<#✕7Cmwkzp{ӽhy#{U"[OybWG8/kgy~>.eց:wu|f#uI?[_Nt[i!zhxI}?O2S֧0<}N>JgqFvevK_na'^KOx W/oP\ycS3dv_Lq8v:gr䳸Ki?k'}qq,~ySG|{>O~E|Y9W.M߿r-.>U;p?rmy~$`B?<O?w经q;=x'n#w#9X9u8.}6?3`fsj| yMhNJg:>;Fɩzy+y/7N2:m6}{cZrxy>Tni\}sv5㏫O+길E<]kvW^?qM8;ǹen[rv'.ygy?!Ajy~xsokALmK?CeQGYt)A=՛3~q2gr[g{뉺lnv=d7v7G uso;ZͺЮH]Ner_S쓺uy~LSTz=T:Tr{Y~O]TPd YߦND_^j8:ַYu꩷~Nz9V|~A/G~8n{o3q>['o}=>[GRvū}_Ye7r}Q~z[[bp5+O{ѓ]_f?0_gpȅyegv~rv?2} yOr~ɷ=ڽy׃X/A/io[ϵe|vuy>f׳з:^A{>^#LdP?X88׉ qYM>krsuv]uSl}T9=gQa/ɳdWO_oK܏z!㷸ukk׵kw?jșux<;= zǸy+o"r?i?y}ڼ$+j߅_;rX_e/W^I|ص\Hu."΃gz0y^pk>5hYWXR<3򧿯zϏ:=η4F~_>_$}xoŹB乿\Gnk^'G-{87-z㮗\?N_ɸGr.aI2~dȣ~']ý߷ O;y}akWgK꿽~*vi;._zvm/g>C]OCX=[]~jzG'}3g5g3Ooڵxo~Ij/Lrh>w^^#(2xi'{';O0}J+uofǍlv-crM\_ǃmWV]zD]vχߊ˒G6c6x-xy﫽/w\=8>ET'<ܕ>k7݇l]jx zZF_M6;;Dx>94N~~w2!у9ڭW;Q;Urކ? q9u<z>{ 3n1y|tV/ny8𦕻o:\I_0|}n7_О'˻/G'^ 7#<;Gg/|.Npx:G,O?u;v|q_Ɨ}_yoj\@|Vy]ӇxKr7Sӏ9<a}6ν0.}&8s#=Yχ3Ȏ9}>=K,>$<'Os}x|wٛmΣSS?}2x~s<~?'߇w;O]a~~'߳ /Zz'rGWx~9ܮ>O>t)r>G2_+wë:.Gnk> ̯|{kx ^FzfeQqЎlm_=c|98ɇ}ו/>vlq!];3fyVh%{ORw}~x"^!. Ns埽#rp~GO7lB?Wgg0Np!~;S[,qjxxyy0 #=o{u^!7~[{23j=wozMʻv7Q}OoGGOKv/3#˟2$/՗:7"ԙƒq~Wቼ/nf}Q7O߽'; tÀ'r_{ig7z=-vl=~v2gqti_J瑾2`w= y啜oƣw=A/7{ӬUOJ=]re\>^]~ܺ9[lMȩ^w]G<uZO_u* 觕orcA]gx}[p=y! ΦοבgߞWs ɺ[vm#8NPvĞn篾v^@6vsg䓟"n>zXq xr>KyH;$.9~5gYO!v%c<838'ۼwF-CZ3'z2گc}b96f 9?v|0tBrc[b/XbO&n:^ڵ2ެ_Ə<~1yϥe{“}loK?t^'d7)~/")ʾ pA$>lw}f'9!C]?[T<|,Dv>uIp; N>?_|;'ߓWxZ~OzqM!oO z~؟G\Q?] OO_C ߫|89n/.OpF>]oͺw #|0TJEqW8v {En[{FkoR~i֯)vV| O#<~XY+* o!{=StOᬃ7Nϝfy,m|c<ʾj$uC*pzgc_Vb*8^zyrOC(v~g^a^S:Ѓ#<>~~?ybxw$op :<_t<,<ͼi|zbk'!E}SOr z]wO?{v$<=uo՝z'<:%_kمfEmFiˉ_/~u8K]~XA>-{ѫ4?Ϗgx7$N:x9(Q7Rݿ<޷x ox"x6dOb橛ƛ>>%+A>u"œ,]?iU?D<'^?z8}GN/x'ygbx{ N{>/7g#kO; ?Y7˟xl\Sۣ~Yx\zާf~起w߬ _׺_%%ݸFʮo6M^B]?#=!g_{nM|?N'x1^ϊ49c r{ Ox0>gyM\qÅ/٣xnE;6η o]o/s봃\:u*x>=|zXW=~Kcgfvā;zo<=sy?n 9<+J﴾pc <7[75yuD}7^5D9{`^g묌αyP[(=vsg)5&:ߓG nnp%nr&N.n.噱*_m^a?.Q?E*Oݫfg>Z$ވ« .b7K{0zpl|` Gq|qy!vo4kόpt')|v^̏񦿍ǼgNκĬOd>.j87\Xp5P?^onSiq>ɋѯvHĻQv=?.f_Ӭo\>.-N̓ygWxDw|E3{C^?1vko剿/Gʫ?Qđ^{Ђ rsҮ7ߌ7J/_B˯H;79w?vduѯ叵58C܏'gﹽgw"}MN6/e !^GOa=$g3_ c喝Fc~bgzrvWgp/6 Nzzٱy<iȉ8GW,]z#ЫGO W5bޝnY|s'pчcw{.4FI Ì߫Gȗ$'M;94O_U)XgQEzeyI:Χ]KO:?<|u #П~/?pX;֞~]9<pExӮHy'kO|?9Ynh}vsqx~?r߸:j/ O_z\zx!=fǭHt5qkO;y;7=xOm3pW~y2nk\C "_7OO#>]#WC _\]q|}%a|r4qx<> EWqZ6|n{2"3O/5E87Ok K<'q|ȕ~zx%z[?H~ s^{~yڣ >J>] O+;R63l}O/D_wy_7S8{rkw|c/[.=_$? '&p從G?C~wqG{lf]!owg']vx>cwxG81lw9t?rpd>ߡ{{s \~_~''0mջ??AKUOm]?x+~λݿƅhmQi]:GcE4ˇ7N|&Ϗ ϣ/9a~88?·GY%gA>u^Oo#on~];O>Or.y𮍋/rC~o&xymZ㫾8-uxq7Z{~_GF ksgOy>he5xѷ"~qy1Wpza/cus;.5Ɖ\}ȉ#R9;[XY1~eǼyw|/?s{0c^OK~y.ܘOxc/]7<\]pv@q.3/+ݬO:ƑG?9qbv`2"r?H_r$+D֯K.^䦞<|9_y?8~᩾7S8‘Cy/̷vG7~=7<_;N_,O3h^o /3l>nuw]<~f̗\^m|plW9]o>{kc7^2>Ons~9Of\sǎG79=º47 ܆=Z?9KrzzKt-u<upR_^o~>9vuƗ#*~D90NEw㦎w9/6NUG3p.{r}OkioK0.|UOx8Ǜ'uD^Ssz 1vz gv @3A.a5'䥇q!o;9?~&Z}@1ߕ[upv8~qp oG6o{]O{̺zaX^7GzyGrz"_gXh}_ٯNޢuoD>3\3 cqx_/x'nv|wi꣉w/yC/Omގ|C>q>_+^k }\/>dyz/g^}"x .aex ^E?c&~?xuڳ@'i{O=7&nwr9p ]/^.npq<>/gg+؏S|ߧQ~#}k>>H˗Gξ֑t=}UFʼzyx_!;`JLwdugç }O߾~$'ݯ>~Iv~3rNˇG9n>ط3>OWVÎwK)pDo4Q֧/w|{×?{*^CyzUnyx_u#}F}#ǿ~k=Xh{v qIMdtv[f=ݬ"m\o?<)\?w#}#/;nz'=p!_֥}J'pɯV_Fx_̾i/Q}^-{U~/{?SW~#a9rSJzܲcI;7~xڃLzwm< l}M}U{/ Gs4>˸>Z^9'y0{_%UsUgd}~pvH=ۧ'>KGFG?O%9Wg&OuaAnyG41y`S~{Z~ѫy9޿$NG}`٣=o='31x*X'_9^g?nd:}⿬pq=nN{\~{ӛq5/nݻ|u nڗW ^voD? 'rvlo{fO86Sܮ@E^k%}_ E}&y3~O<589{,O3WKOxc+Uƒso|yo'va)cƿ]}R~Ǯ^ ϩ>?QW|l9}ľ>5!z|O>|n<|[w,<< ӡ~/y~/}H&n,hۼߩk,/G{^pP<W vmcAz[b[C~ʼn6yqr[|:g<׋g7k/繎dݟ x#98O/ œx}&c,QG`?-sŧ='=񽱇>}.9'oG_ 4nQ=qH|ËSQ:([>pȮ'<Gst|CM)xv>7Op)<OKԏǣ7f nos~wtY~+O>mLh\^?^7ƕ\uO=\y-c^ٴ-_=u]?Yșwߥ/<%_o?|$d2N)$nQKqiyq>h188X;kxϏ|y${I#GO83nv..O?3/맿0z?' G%|;[k<%{{O3ß{rp'o_-7Qwc|xj݅8^pacXƃ&j<:_}KV~[O>pIeE+qW&f74agqx?3tܼy|$Pܚrg|/=7rFa| zi<.q;ߓ'|_a]qy=j=Qx㬾a >u+Ӿym]W{o[w܈oGrkwYy,nlq_ ^'8c㓃CMO}͏Vx|G!.fv{Nk0xW/#p[{y/ҞW]^_mxnåǙ߃^8zu _=.[? ?#|/'~>֞Cp2O'Wp\F> K~.vNvÑxAnÓ c_܇>j\#AOza|mݿr]SDoKw?YkLh7<օ+Σ/Mrm|eg+G7{rc|,h(oqc\5;}Y\~ w/\[籋۹^{% >l}f }[S#^]O`W>;mOڃ-\GOYɱv=Gzw~5Wև};0x:ԧ_ S(Nq)n $~:yo09)yOQGlxniy8׭i\֞|~׮]Ǹlj5prxj;|:6~Ola<|oϵG^;L;0+}&.W{֕8߸zCwWO\g<6~/\߂{OO x;r^u>xy&Sy5zk9׿|k{b{#׾S1+.[WO8$;>eVu%6)_>zg#{8"ߌW<>Пĥ3~yZ|&ǃ+z=3w}y]SxC}&nq+l</hx玳hoʻ}_ Oi~? e]"DMg~o<\AOӇ?}9p>puneώꍛ_nj8m^p?~>񯿾p^R|oTy6>_G/i!ώY{f]u>`a[d| 'og~vȌ˙9=yx|CnS#xK|vvvyqD>m"]?_Oa?}}r [|rg^܇w[{?dᕞ Ѿ[QS䵟׾4օ}~|uGzN`&.php\0O/yii'u㈷/ws쾩_pis^lj8|Ëyqzg6Gagg?rRZc'׭yU_={'/?i{x}hճnSσ[<=S\KLӛ䁝c ?O+mg]Z>ӣ3Dȏb%=MshD―C_:9\ƛ~[q~:u]H y/;gCXwzW{7pGu=yr<\r܏[[g^+'`>1\5>.NRxz|',~o^>|ohA?᩟v~zDN㑫}koOy楸~ ߯۱;'ɞ{{}?#7M{γމ^#G;˗Lvܑ;'{zڳ.O>[ʞ8">s}|G#g3ɕϛ'ヨqȃgm7K.^i?Wƛt޿.! xxrkp^q8?<Km[tR=$J3GWSP3/;i?CraߤkN-7rW8<&$O=Wiqc^o_7a?]zsdo@xg?7gݿ)|uE惜xFLI<s~=x1[D^3?r/Ox^}_a~lyNl^Y;ۼ=7oqgoyCޛ_x4X׻~1}y]8đ+9I9<'?l}rUOE<;>ȋ/ocm֯qrGs'G[`'?>"mz}q{?oī\wkxʼ?3L٧7#1'y(~{or^g}-^Dw>~7q+ōWVCi~wSO94G庵O3Oݴnp!0gqt?en/^ OfO6MuOl~çq/k<<ٓ~y{88N\?\O!\7'b_kA~cs>\Φ}O&G3~x|jix!>atx*cWvg߼8&|GX܃_9?[ɯ~?8` r]ǎ7i^ :q=~Rz!Yaoձ9/{Q^;q=%ډ_>)6GkLJ^]\9_r`WN+r|VWy.=>gׯ\.;@ϯ={ 9<GNm_ƍ#5~ui7< G'>'ݔ#oώyvq'{ٸgכu+yy}boN>=k9Ɵ>u7|gP'Ah'ݿ:8DSU=,}yc>޴Kѧ䕜}]s<< >[sS{Oo\;O;id]Xxb‡o;~{|m<+Op}{z[O[4_ӛu-<ѿˋ9>u3^xx_3v~pI_w3^0k^=9dwd]W#3u\s? gi7>a'|O|-6^"M;esܴ:>sW׳O\_~~7Nn/<9Egݗ__=n[x㮓:ˇg_g<3Sf|xu1 wڡ>_㻑Qy] Fo;8ow{Sg7{~;y'x9%-0~ﺏsGWWoy+.NN^)2/ڵȋC2p}}cyA޵=vsxB־/zb]_<םCzXw}~'$毶NpI:M8\Kn=.}9~YwN>Q]kiGgĸK\pr`7ǃN⏃\==Y'vO.[g_̑Z^Gg\GWCox3.pmd^;ޟeǼqz\/~:u@(]X<%~_='om?y?w SX'z1^8=H?7vf'|kR qM_ߟz>7ޓo}w!!|w.uao 晞D0#O O9p{ڱ_Fɕ|9뽏[X_{&7o£ŧx7 O9ю^or'o~,GO/H=9ظzpC.O|ٛrGsk=gq6;}vt3<;9>~?_kr̞ts>z=\;oL}@xSo{iṴG^{zp_E~8Ǎ{nV&S?s`q{ s{x#gx4񭩗y!]xq~N/_ov^+r?ut]]mk~_|8NeH/C?;=~N+d19x&}ȣ#FN|v>py?8}QW/n\OpY_ε/Hү3rl<͛Oz|3og|=\ҷg9[!Mw^Z90O?3>x9o񯽻~gWƓt?4y4|_~5q Ɠ y0ϟ[|{hl[3>o ώ#_<;񯌻y3!)o]OZX?O>(_߻B?wxv?p}'q }##?'tߵ#יo_w8Я#kߧ}:kBu_k5:.:Å᛼~ ~d[ĉֱS~oou_zȿR"Hww?gɿ[wҍ9fÊv~gyg=A[ue|}T31xMx xG~]Z}qy?g~xfV_]}#pǏ/.u> T6Ξ>d\v<#36d>l<}T*OjoեAѐG_G<?_ooG˫Öۇ?U=^i<\?4|=?svax+O;<3So;7OϓkۭvK{i<V}#LJ[/OV{u6goimp.=|ٸ˕pxrrmO3?ݾ^wq9z^qPzR<W>NK=+#_Z9>~|G]vSSIR_Y/{?/viUێߣb_M]o?_Sky>yP{ L>?ߓz֧NN}[.P=qsֿN./GD^{<2V=k)9Z9=[_gg} 19'%7[?[?QKί]wez82F?+[hK~sGw$՗|v\\8y9; "]?h_<W&5Avwo~k_}Oz_]4߿_?sнd=K/^9_5ݿ pSRj"g]<7Bθy5`<ٷ]iu_{TwOuIcrA*O?z_ww3>7ٷ_ݿיg?;{N;7Xvg덃c Ngiᓃ#{7[}Q\:辰xUF3;7?^}er~{Iܑ_|DCMFnsYT?2񇃟~cq]YJ܄^e;}rxuoƫ=!]f3Y߉\^Doypο:?v㮑[FE0..ZyTn'_8K~6~'g:=G}c9#{MCuٹaw2ĉ_~?(|w{WT k>//s+.VwӗG'rk^~'||.O^|c}o(gPUWwg G/v>/ru_WV߿N|C~SP_;9;?m {5zax-JiP~9Ɠކ6'Mˇvz/~`aV|ox"{D;TV>>7^5׽O7[ ,򽴇>z > /aݱϳO۫wy̓'/+' ŷNm[{μER9Am^oxxj-*<}0/)w<|?0^*C0NײO[-^=<|F{xW74/1񮍯=|g?` ):rb_om~Թ8«|]O# 3S󛧍Ç%go K뭏s|gGL=jgoi;Yg`_{a1-NnD^ݼki\/M<~'Э+':O~u;">L8G{! g]y7g wﭨi5=bi߮6~O܌~gmwg_O}xgÛZgyڑ`;/ǩWo'ޓ">:/:}ףzU}Ei!nx֧GSo׼:Ry]oVxsNx#<<35n}şrp f7ďӟsƟGT_"OOq__U+,H |en3;/e\>0?O87n"^KNWOqOgYd>w~ŽovCrx8+œ~J7/O_8a@$qbݗ/m}WqK)]hN$|q_T.DŽ7 n2~ėGwߋ|gx"xmx7Ӭ)u/Oko7V~^M}ry/fk9v8#~WLO:S=:.1u;| OYn4Nq=]zkcU=*8Y~XD+Ouu[qG>OGo܌_<9 !qPG'S_qѓ[_>[-96?R8Owk xW_}96/_oz ߳uȏq5{7O׿9g!cP;[ﳼN}:K3n*nJpR;i.Gzxd?4>d_a[?}șuƞ}'4ΎDw./}ݸjOL`o|A8xqGkIΰu '͏%? 'O◕#||ןa#Y>Yo_~4x/\ӷ1pnw(r&.}ĝ[ץc׳O-B$`;I}7{-zѿp.Zey}(^ȱz+zv >W~gS7-ɓz֡ndq'<^+c)G+H#._źp:7Oy!<񳬿Ws~K|Ǐx$_#uGM:ԉC O b_s^e||0xp)Ǟg<5I.׿uP~tz{m%xOCųGjw'{>g>}L}=uc_; õ!a߭}"G {?}f>r~n=4 Ds)Sq ?2.l⩟O}q' [fřoNiǁqo+~ߧK;\?~:Gu~3N[<0[77O]'Ϯſo;W/΃=Kxq2y_s8{Nts1}d+k,_'g$_r'+u /1[|:]yw_৸/ڌ'>&~Mʾ+KśL?/G%px|p{>q_vC~ >m>w k[W=u.{?|1O/sɷU?>~# / 7]1/ Ou9'x؃]zX//=wb7@1~a_]yo\# /߻xF?K.Bŷ̾3e*>Y+~ݭKR.7F.݇=J\߲}Ѹ%[e։t̸XNW9 »xJ9Xya,?_w_&g+<D~=9j=)ǟC9}wES7KO/x&^śsx0ړwcԬ&o"9d]mvT\yS4<b~HO~n{| ~&GOFN*sPwxH&ɳ=yW|'rJį3zƇ<ӝoh=ǏPUֵ#eg}]Uo<L^+'`|vH]lp6>y͇m.>z}#g1,»'CC<+90^Ю5E摼GAyyx3?}ԩ8SQ/;kU|ye5,ŅWj'^M]W}U;{1|x ~?|'pW^I̻xEkvgq'y0^M)LIGڧ=GrOov_n^uGtv/W1q=zKz/<WAyq_|k>"~v?uGn)^w|_=}e! 7w}7gG[rd_^g׻.ĥv"|ߛ|ӛ?#wا)YOd>['O}Ϛ9 UI(S}sGO<=O}O\<>8Yx3vx σ'm=qWK|?kNyI4>>{x*~͍M;Z:?O@yyeY=^M.[ohݟ_qYGuڷvBj/}n>W{wG[>uOD:w'=*o>ԇ_ ?M!"OSo4[nƍ+{cuHCݬ$`g#7nV`xC8bǼb< ??}<8?_G{ ֻOwڵ ~Oשc/ʋ"xqſ|\x Ƒgwfߎi=O}^'Rߓc~JG?x}\x/֬gKgӾ7߻zCg[wxqi|Oc_Ϳz&śgPԴN(2us C:gl][c/Kɝz W _'x;S\g Oy׭țor`Ӽ5N+OAu4ޓQ>Í]\~[<+e]&(9oq_P=,V>S|6N}(#_Ru?= =eŷ:?|N}KƭrM ul}OU/:OLu(q?g;xMm8VW9Hz{xQ>?o—qST{"^#H\X1>QKzp#^=SDĿ/$i}Yޞ=!?_=갌[xmGgbWȗz)v}k'Gy!S?G<9;޳g&>xQp?2Wz~f_m}fo˸<ñ'/>qk1_xr: w|7~=1Oȋ:!rcDYW+u$/g|n=bxw#~_'?&8|٧=E ngG~r6y̞L쮫zC||qx7vi}޶Qz`u/9 ?츛pk^Lv[O+~#co!So_ OQ%8x}s,yx0A<:ovk':y3¿}_~>i>| >_^G=:.Oꦒ?8ЮGg7qvq~ĵ#*''*oxx~Gʻ >o?x_<ɫݿ}ש|ᇆQxI#GPƽ#/}?I=mWgvy>Y;~msb'빴/G&q?]'$Aʊy?)=y?;3:Lކ|+j_ ?I{ {/ ⳭskN䩿/xי8~UQ=g=9OCuM*I T\=>;㑗?S'xfӮ }~7;*GW}Q9Sx>uz 9O)fP#s|7}k}yx>7Nm[<~Ļn#ko|:Dd[O;u .T= ~#;O]>%|[O.]otSː_> 񯍗8 p1x絯e|W8GDֱ~挳xކ?_u[ϱSmo|n$qx+*W&_-s,x&qSgԙ{摆^_"q-WO<#/r+gqt~K穛'GGÑ}HL_}/3<9rxq}/8u3pWs?|$wޝ?w %_w~&}=Ó!뚭k䷫'9(/_z~:jz]PD9GOa^}Pׇ|=zu[Ou,ߛ8(`(/uݒx#NɾiG9 y4㵻g./|շX·fݱ~O41qwr&럦Nc}gqr{|[ϵ/r>;M]uFYr?fI@[gb&^F\ Ggx8dԁשTdvH݅w8>`SW9SONNGo=r <ѣH?%kp\/6W^ug,'uN)Z<}@|MODv_ ElaɏY`!ת7Z<΃^q߽kEe.8O9Oe1|7/ħ=h^N=8ںyuHN$84ףe޺_UO# z7\Sm/^}gxmWb;J h]WƋ N ?FT˔ӏ֭O]i]՞K|zF.h 7ktXGaW<ĿOw._}'x<\>}/xKKyW}_G'>o=a?guެkgo3tP*]+v=bu:Eo'zVjx:&8||Ч~ =rM_y}~Iߍ3 OŮ+} M\vOq]V?ޜ|ypoqԭϣW;|wrԽTOS\MM^s {C8?ydޟ%~^}2ҏmܟ;ɝ߁czI;O/v?R4q?Yⅷ?NojWI|ezGNdSlX_r+xWTy#ѿO9_d7_L8eg⑻R18Ƕ]zaG08>̱c k GE/'X.v~x=.o/y .8!So4<ڑ3K|\L|Cޚ _!wF~ ~O L|nŗȟ*weGqB_[J~c>e܏c'Oz/!k1IO"?y}م\=? ?y=Jͯ=B4N{Ŏҏձ!C|dֱ3_GCyHosztQs__Y/ikOnI /3?悔8K>Sya}Kçd|6N}x!9s𣭧ke?ɗϓLJٙ=G׌UQ캏8aןO889:ۇfk=#OM}<{a[ĭ-zRg~䩷>uz'#>ZI OO:K~puy G*+[6O;|C'Om] ;)! NG?sx+zkq'/?Yw{'dFoukx'~C=m~|"דsy1?`ȟxz vq|&}A^̿$7P7y[C^هﱻ=SWJQow}^R8:)|sqFߋw]|_%q`܊]/!~l:}6~1k/Zϔ\/U8D/V~jGL2ENwK0ox{1qp,:n?9^j狗v?z_Cӥ덊g}x{qS7G^ K;OgӓAZ7lx=xhxg-WsKkGg}#-~2|X<{=oW:= }nR2>4|oa'>0Ľ28ODD`fx]Vuvpsm][>"ѳx\X`dpdn%}Cm,޲Cl~GQ] OSw4kwE%9[ׯnx&?W1a.^c7 g>u'nH?'C8֩oxIOiϥtsGY<725 Wi:0z#II]8%m'V?/G<]_֯Ⱥyoܩߣ7svi?xq=3v󇗙<+[쫄_;vx܉)q!逧<?x?8[yrd/#;o(ú{q6q7kaG߿“`?6k%f_w^ϩ'k+uxrT/G+/ռ'`\ZG>2.9O.Ƈ/a~BiegWczgڷy7x4Oe?Jϱua`s|O#>zvYoc2_N3#>M7D]O_{<%vSeymxb2w%:ls皏N7AƟ;O܇p'q%S}vrh]f|Ç;f_ O,1^77W]6)}tHxd3qu;eɾ4¼#޺\rygr_^ r'OoGOWֻ ~iM Wy\E]7qC “R;udSUzk<>YwyO*ްuW;_sg;eqO|_oL^׬\g<؇cE_}.wr8v7G5H_7F>+y0_J:jxJ|O]U'| zg|Y$"AoGȽ4zACHOe|v <^u%G]8DƗ~'Nx8oȝXBvK?b1ojxJ;)_đq!~Fycȗ#(+6*^d?}i|O}Qj3GT.G~>M{ě!}8ox8OD>G3v|oNx?O!kˬmO)r/(~x~"ڽw#\'ַ-5.RLyg []2 8\XT4Wjܜ}r??zv]&_'īF_|:`/=7y8> ˟Zo$_;56nȉ}_ >$oN>C3 O܉ p,bGw*gK~J'9乭wnr89M8/7(|TMl@,.+83.-_5Oѷ[WۧxO֡6ypύ}wshS9o4gKqzgg^yeǾ(r_Vҕcק]O3øOpo9xƿ`r{Ejoرf}9rօ]i#>|m<:RrB/Y|%;e_= 84k[^Q~w*yzc_ox2N1>G}eOUr\i֡G\G'jq*ά?[~:U^go~w#ԟ>}3=uG8k_x~qz5SY icw^p#r~goO\{^zy֗JS#?+9.^։e]aO3=x3o.S?]1NS׮_e3:D?V˫gk7<7};yPۏ y:B_/wd||;|!-A/m xmx8jӯguw엸<5ݏ==`sx[jL>yj&i>eM_䔽}DG5<]ztuD5x:w~rڅorg&|>k|y>9v>'JuKˇ~?uFQ>^ް?_G)a|mܗ^}an1< xR_t'&!u_WЗWOon)_>0>Ez~|[|'/]f}.|n5?"/ ~`S .Nű737_MO#S|_-%5S}2/oܾ'~$rW:c-<<8z͋cڇcG>px%q+HĩҾd~!>5?q</[/#~TP6^g{?s?`ٳǰnz͋Gw/y^ ?~K4[nȃQȟuIb>r}TĽ{=<] O')cμ8L¼O:?}yk[zq\E/֍x)*n^T<o«kQ^<vgÿ|B?~sq'85N[tfأ3~ ]/?/^y];)r_SBV^5UeݿGO?y*0~xGxodq`^8/G$΀O]2♕9iISOs/}vyޅ/o~[=a__+}P}sO?Ʒ?'rrONy|5d= 9,_g˺VYqĉG[@;>܇W#<'/~LK>^X9?gOX@ ?z{/7+Rɞ/~/r%~ξ[Ze~x?M݋ q|/yGȱ񯆧=gDg^2{""-uYS?8Yz8F+g?/^\zm/>*~ x[G]GwGuSUi]}ĵ6_gˋ~m2õk,9}Zgğoa}W^>/3vt g~=G=? ~.wnS(f]Y=k۱yݑ9+ߜIP|OaqDָS'SxN̟}J݅88DNqn~4@kWx|gxn4[|?=߽WivؑQmpW^>F^7r_'EN8+C'q|:^ã:+W++G9`eX}}W&~3:7FnyyGU vUvjgeu}߽&q1u'}Myg98ׂe?7oO^'׉koC!:olg2LYUե:"8oAVn 0coaK8~'ǧ/էgu)xy%||L>#xFyh-= dїK..IW>/oh8.[;?y9uݽsU]r-╭W!"_l>of[u՗WyiN}yu1Ɠu7jy{rF_=rsu9=kWm}~K~3nSrI+/ZW(//TǤ9 ~켺.BP+~\A\wzFy_W ǞOh}[:X^;>Y|n=\;i~8߅BTGA^˩V'a#qxC}+^4Y\V=<^:ϿY~n׾ݵy?}~_WӞ4xOs뿮r'ךgr%<n\O({{[y]Kno.ӻnS]?\TWmsv'=_q)?}~i>^on?kxVg^ O]]<=WmYYWOwg=/Ϫ}wnזO<Յ+y~3ON?37y߹'>ߓ[my'gU;33y2+w#gzဧ}5/{Cq=O9K9ڛ+/3]yݼݼwpa_=s&;S=VcΉqpOM߳d?Z}LO~Wo_.]gݟyj?Ze?iO#x=ir?կ[wz?x:vݹuk~,ȅ{]g̺_ڭ>F/Zg]EN+?y~_K`/ǰt#?uLz?[~Tgvz]`݂zlYَ{+O\7nȗM\g탹Yx2e]뢭:[VVVuK;:ųv;q1~g8vGױ̺#׶O90nוcu;߻npnq`w\vu]u}}Gt=r/:ey۷p΋q0F?\\?Xƣ_ſCsaw;qݵkgq%x\/8g5o?̇+_'R_pWx*2o/^ޤ!l<{K.f_/qO?<"5\6s}OQ8),O>O\1'rWOsW8*}c9@qߎfy8!7ݏ/L?GC<Ya9^ U;zQ=pCp4?}!W e xxo>NM\<$\/yYaCNj~OwyP=} =/{J}#?ry)τxiyp8ڍۏ?8ڼ}[w|[O2ğ{%zOW3n>96n d\sxkY^iߧ3a&' >{~9y9<~7 n{^~ =|qCs Ͽ|/֭'y v|!j|tߢꠟ<,o9=Whn6uX<x8 Nxcn-u|ㅩS ~;]߉#cm]z皷IŃƝepT\ox# Gwoz2.oI8pwUy=OKwxm{s'Uyo8P#.RoWRGxع/N^%?rK>|Λq;=(Nj7{>:&ފW^$W5Cf~=ygum[<r[0Q1iݍso>/<Λ_wxB~"^4'<7.|6/7+?/;Ə0ZQ<;9/e߻c'~D9u7o^'ֹ~ڵ/xn!xiF>9`h^/,v^>' }g~ FMzn {x#뵯~|w|(>);`|ı-#G6vy ~<[\~|K̳KA3g{5O1|_}&]oǝߍ #?I7GT_wxþY ksw~“#F?^Z'9^~up5u^4mc/w~Jϛuel!Co[߰9z яkk臗s_7Oe?qo>>W<<[#>?vBޕ}YK{nm>5hf]0.S=&3oO ~ԛowٷD~+?5uOEfwes;,e\}|x+%UO_ [kDpL\!g\w3$> ׿:Oﱓ_aK< }k|+_]q?ҏc~#-~ԥkywcT// {ꥳx̳xxI\Ż3nvƾ~C-ȧ+eg;?L<]wpkSm'=[?8P\d>ǰ_n pS &g]{H}E>9ajR~u*9aww?_ϼGユȷ#Op2y3m$/TO 4|# \gכuF~%}Cuq:b<!P^/|}ˎgw#%Z?9?u;Dnt\_/\u_ Ʈ,#W7cE'^{'?<4E3~' d^ijܓO \y)b^_Tyf!u?OcLs{pduOy}Lc__<]ySq,>uަwuOx [Ը'v͏JCG ԾzµW;~ɵ6om?96Α{)ؗ?.o/ﺤE59 ks럱gz '//] ?goSM_:ٜG/w*ȭx|v߷뇟wW>-c7֮h!GV7_TN~=w2>_G37'WɯacZw\rWx:{'xe\8?ąeg2TC9~:/㇓wv#w ׃F׎XWc8oJ~1u>3^۳Z=꺩E+_O+(^Ǵ w'ZX^XKO74o?F|a~N'U[+W{rỌ:S8xyjupy>l{Yu\n׿}Z:ㄣ~Os#a_7/?Kn<}WڧMStRaاݿzNߋ!o}zRIӸ<㵭;k8S:}c6_ƽ|?xx~EG|{V7: u }FN=i?mq!ߺ)O}xJ>a3ɓ停O~mʿ}׮߲Nc >1+Nn!rxObvǻ?v}߻/Eߵos򯟻o;Wo;rlޭk+./y%]ϸ/쓸=`-rcɧ ~F07/\?^ovuLpES`mr䓝!X~6ou\=~Vg{9܈Cs<8x\ݵgĭ 򫌛v~Ek'Tly/\GOIW>ӟ~ߞ:ꏌ+n{"_Nk}ʻm&G~%`}$yGܹ}JE~279^>}ANO߫Lyhv8l:؃|Yg_&O'f WUr3^ugp{Wp*ٸ Ok>E u+??;<|p/_?вgYo+9^CGZpڳ]߄/'w|]3k?gVL^şi%r:2[=vjwf?j#_xq8g譻K7~3/>?OȷuCN\}䝻iym\ g<֙:vr,^| [/6<m~x8?GkSM.wq_}j\O~u7q*SOY'K#N>=w؍';v ϐԫk<^ݺ;oຍ+埆x^^U=?@N@O)Y( ZZ^37m㊻2PO/xҗ'|ľg@}|95?yǿwx!g.Sï:6.ZxvowzC|}Y'*z<{G'm>/^FW3ݟb7~nz߶UYy }`6:%'. bݾ 1$>//ixSȁ8gWMGx1>G=}LǞWcspwݼÇwƃ=8^6_xB9cx^S63AKyFsi#l {N e5q=z~>W p׵|ڙ\\ ؿ>:\8s޿?]|O9lkS}OI ko$Ow̗k;}OgG:8?9`˫zu W,X]}w,#r}Rwc~p5p]qb\??O7vc u{w|tׅ_z [o׃I>tX>sQf/_}󾍞oc7I=!->k}32wcOD"'r}Gi4ݿo];cfa}tczyq;|Sa W|sϫ>G#gr7?mqgח+{׆׸qܴ9__'q~''zP&/zOo^~EwuOmI^9Rq֮=9][\n_\mv.s]oAym?6Z4|OG}XZ OPOwogjYwT.[ϋ%|k~ʗy]'Or]<+:;Շ?8 W~_jx:[ym^_0y<,\]~Ou<_/159\4z 揊7S_}yE4C|>5C4{GOx!Ze^Թ5Η\s TN]wxљθO\5~w\>ONT0,q<|{WO_#ꓞNg#?ʼnڙ{;3OgOq4a1 3{T;h}hkh}:0)]z_kDQ<7o/ yɟeqIg;Z~8wG?[u?ظO{!^'O_'^}tQKz#->^y0GS/o_> /ǜ/_#}Ex\oc_.jDL\hTqP7qWF'f]}?fT8>xj}l{ȩz#2/䑷vtXG曽[ϖNڗ =0WoCG&Zo5]Y\':%P<)ܼy_|ٯGƵJpO-iVߙ8xj~jW|Ζ'}g'uF4|/7Ok|e~q~Turﺒ}3Ou-K%<qLG?xU$B٧KrhQzC8ϵ oױkK$΂9~?] ^ֿ8S8k3{=f|ne2/8ggU_ov^;S?cE=GoOݸz {yoF_C3>H<197?o=icW< 2w=ƁO 98?{xk87E˗{ى[mH=},SFy+{!|pe uAg ˎv}oxBY$^|Ͼ .=~~/v]'ۯ7-I}F^^@nŝo[\xzr{acKk(?~ + ϣE~^d\_}Ώ|F8Ga>_|aOj{ ^E ?{vS缷BK՝:> /=Li\;}'xuwyh8?{n}K{Gq!W[?\+_F+=_0//_:=ԟ̧ }2z?A6Gç.ȳ8NʏϾf1odz'/Ћn rGY}gi}OE!zϧs7<;}ZW 35|}\FO'{$#{=B.G_nq$o>^/ڵ<.?J?+[yټÑI܏?$q~_}[?luXoߍq5O.rC./=m*'[4u|H^4惦.?B_N^7yc#ϵ/g^)_3'-r>| _pȮWſwqQ}&~XUKrsz;lƙh4uD3W{I{y#z/)))x97p~qwv[<8i{Ջ?SLn]_CQgyMuLѿU^jˇG{+GOo+?KSOO\)6//˼7/уy.8mr!ԣx~n|qlo+q+Gs<ߎ<-'ngur11_~Gzy/=ej/o+9~j-#x?O8W^#ox}NQ}!^^u<y+>|qakV!~ycyz_g~_ W䗝Y=*;n9_`O? "cU(͋8D~kO Oc_~|u*7Ϗr>j}lp uwG!k˷s ?xw_wE7UqJ]{̇'xD?c;;JyZv)(~|9ߟ?O Oo\lHyA]q剋-84~6_΢CWx.x1 k?1u~v|]7ӯ*|-{l^K#d~KwiO{պSy{d_Y\ϭ_:w*~&<o%bo}khGkf_Sqg3Oƥ~Sry73_\ Go>'Y3;lUo _Zxgi?=/-w~OOw ~??G^ܳwuO;=S=Y~$ULNY/|ֺ "?.٩f].}Owy=rM5C}8~Pgx{y Ͼb\һ?y_{~7xj4q>]f~\/O0!;G{9uQ81^v6D>[>|^kˏe/ /8=b;{ry.I<Ŏ.>mӯڱ絟c?6Ƈ#?33_aޗ6Aao'MN2^63zu4vGո] ^ [OQNj|?k{Ooz˗}<{!n;ԡ_wG_|ݟzqy/߯/f}^!/!v}/~ \o S'+]yeu*};|Vg|~nߟ6q?1Fɑqv<|D ?׮I\N,udƎk9j$/['?VH|z:o/$j~Թyo_{ø ɸ~ipo^:-W%;*6_~'Exj=ҵa<Hݯ/G;qg S,!N{>/#PQ{ǓśfUvsNG75o3~+Iȕ}#Z^0s\|qSc7!G? .O؅7}<8Ot}6ɼ5_qpx)>;UhK<׮{Ob,~+e}{ Ow#v>Z4 O)wx:%ff<ڗy?euϢxs*g "8ǙyCx_AiQqs<_g?,&O,^#YexbZw빯u!d<%};A?ƞ})7쁼1/k-G_v|]sw Z}]1N o5_=O+~Oyy?)rBfS<9~/线)_E͓i;Ǒqy%g᭓5s?@/o uG?}î/N7?;?Mgƫ*g5a"?} O{q4C4|_SpOOYv|Gpb܊kx?q-^{_!pǛX?드gu|6nݱQ_IVFn/9o0\k} /'84:^USA^iFn-z8SDI|=y|cA7./~|i|xO'x}?oߝx|}۷Zov>ȷqc/'ڎs,/z\ʝ'85?vya]h{ߺ8Md? Gϑp>_tFny|>sx'go͛*.ا2xx5 /9njL-7A| Www/M|hf/<=[w]/_=G~I^>#{)8}WJ˗+[[M^:Uz%Ow<1{x ;#?zXCq}Z硟u'"O;4MiUO&k ~w]"_Mu&?wWɭq3Nsoro<6N2~_mg?<~u/K~XJoJw Gɫc_}; GޯO"n;qpyv?{Wc#;oO]}+߿_fZGO_do>5DuxSOww77{)-;:q8._f\\l-o_{tS\%<[pw0^>$w+:S8%$rOkO9cOn>\g;=?+3s.^/!OoxqڡJboƇ'K\[4uC<ܶ=!'U~Iw_=j`S~GU+x1G޷u'vkv\=g/K$Og`pn+N~Hk~6Eaۜz!<؃Ou [w_co]5;Z_;y y_ 6B?g؇7#g>]^py h֯?yټL;_1>ί4ryI#m<_eo/~q}F\u[~Sq5Ggu̾/Ư ȡq.~!~}yvܯ~KQo]9?1v}_D#|;{?vm]~a3R _y4ra|\DVO_q3ũz|q˭zcߝ/*} ~8"Ͽ Wpri{'ڝOx Ƈ=1LOc\ȯ8Z<&'Dmv|e<׮|8<\gq=?{NOy!0]7wǭNMyOۓxh3}g|~ȇxX++uJ_rc<^ϼOUdşѯzixoߦ4zAf=ԛYtc8%yz*sܙiO{r>7^ew"a[d}ŬC^JNg߿:??ݖ:ok^/?aqC:o?ԃϧ+o/z;8`6\ z4uVOmiLoںzs=ݩ|sΛzkD?,] W>T/kW[OmX=x0wvz? rZz{O3=wp^s~Nq<ȟ1u#%ywgsS9y>~>ߺg~N#K<<~֣_Tk_,>n?t}n꿭mo{;V_^]}y߫VzSߍ_iZx~~㧩I~37?gVϾzCM_O$ N1u_konzZ`ݧd]r}x8[d}nj׫z]_;~7??pjibcwzYg\u>^ú]z~{j=ǥLw=ԙ]_rY7g?,rYv 9unI[o'85_pmcON+ngV_;ə]_rDo<]y|;_?\gׇy>9O[{g~2{87Gq{97z8 Z{c;tD~7vkyz=w wL%}56>ď>}xw dNyn4q?}]}Fz++}Ƭ[.O1xϸ<==:iOs~kONo>7~ˮO> O/Ϋߐ;rKg~?2>5ÿ^V~Gnq/9|y>yKOw/zw .yd_>O-Ŋŵs⺍ƿ G[K.7a~៙[76_8IէƮqvbv^5qq:O>zxʸ.R^5!{Xo?9x?{;ѳ=׷_8S7y̯y2~FnO;^p,zSk_*8c';->_SJ}/!7˫ggݧ~`Ñ?GՌ/n#oK/beo3<;ţуOvG?/x{?_I?og/q+|#Vߖ=?6qR9Zwsxuk~Kg鍿 r#n~}vx,Ϲqx8 ɭbGz+}~H፯Ww?zq~ѼCNG5RϽKoM릢=o޳Пޑ}z#qv6۸8|~pq8%~o2yi]qa?rg<6ExΏ<[~5|#-/O'v:so";n>]O]~*u',ܺ=/a~yy9i_O<l^S?8޶^od^'mcx; hפrC-<9^|%|uܸ.}~S[y+ڧIξ_?r0ޫvWu{I>?X>敟`<EOFNk3JwQDo"ͷE<78q1# OG_>1 /v^ǥ8S>}tSZsOά37yr?/D\Sh \+~Za[ta `Q/d(㎷/x|/zqoLMZ<)>0/!Wקּ͸¡: ܈wy.xq~KGA[7_ԟ[Aߖ<{y{o]w_z˸s*߹.\ؿCv~?Qg|%⨷Ճ߼ß7_o|<|u}MS#d̋;|/~O\uvJӵK}?Oyִke|vn<[_1K~b{ءc{z%_qvc pPyyt?/凈/<)ף__ ?7>"8~#wIq >{O 'x?nГDneį[\_mx:%k^cxFʃ8}6Z;Gƙ\/W:}/b']<ŷ[WI>.ѯ]0x*Ϻx:] gpD߸Ѷ( Owǩ_t]+%xCojdgh*/tpEn uzpH]mO68 ;g_OdO-f{NɾS ?dWZ~+O߿y1rg;Zy<=~9w_p3vik8+P/l{w+~R'_T-;NμS"?VȃnO>_G,/ǻ>.}>c\/O~VMދGf{֫ѓ#pS.'߸@;?wcRNc ܺ&ׁ<-yV /ƝaGឞ܇^uq˻Ӯ'F"ܺ. o]:yYK˧%.>4z8o֯?)}\!?G3?ؼ[\>?zu}MxRz@|H귖lyuy'=C!v[Ux\Ùcf|;3pC>kyw>sv?m\x:ߛz3x}]^~'~ <9];s{%y/ď*ϑwG>ȯi3ΕSw$x龎3G{2^pW2?ټ |+IޗAY71?|zuyyo?xY?:#"gEqǮhu69n~X f^ćDツS"oƍ?72Y]{7_S<}:S<췿1xT+Eٱ_[7Q%u;IJ rJyCM8p^upA\~oQ^6nn mƕ}$?Cݓx‹\}3 xiD^C_v ެ Nh:ό!YGy:}cG]I};c7f^ٟvݿxq;zmznB O// _=|}XuD6>PqgZ|wygZ`ܗ~|8?O15=ήu0[qW|R-r]T=+~nsd)\f]}<3iց!~vF?u|/f>3~Z-Op8Z~u9N\˃'z}c=>_nR=?χ'/~a5.!Xz<79?~]?z'9I߇?Qn> wYG\4x2OO7Һ>NOti3/[5q~:v#O拍&}XycG|՞z(>3}#=nOŗ|q4ZߓCO|#~俌# 9n]r[ވ+7nS`z[|[Ogq?>Z~ga{o\`O܋W=.j~W]X;o^zA82g~U31^绮7_ѳ]yyVb[A>^j?&6N~gū>b W_[P.!糮|1m~Ύ9vu֏?WEO۽8*Sq:8'zGǍ+;og rc`?&KK?ɿ~c g.w<c\wq|wz>o-+{x-ӭ#I~ ~pf>MI^O/ԏ;xO~K\~+r})w_yH^:/D ?nE1׃{,/:^x,og^x̧y'|Nfgu5ίO=] ?{P#/1l]qzxhvc}ӿ2wS\j\}70 /pL}*88EB߸gWs<;u[K ?̟x4UG>qj3>sDֿ1nx$rQ6>6\w3}#}8WvÓ[ݗbDw8|OQKFZ̿_^!V ߐ󚷍W<ɺAv`2^pF_§'3ѷp'.ظ<7au:#"OKi׹cX~~o7MqNq)_Ӻy_x7{=N] z<-"O~qތqe]|7~Ɵ U~6n`~o~[둚'Ny'uVu덓=So~eDw%.h;]~jS?dۼї/>o ^`t xz8QW{@^y9"wޮk4oƆǫ~8tj37(>Su?w&|ie{oY:|~%'߁/[c|[ώ]u\W/n'}M֋}/~'7󹼐]i[>ƹ^upcFGo<4~Y듆ɡo<%_3uSQ;2iבt}oڹqzzӏ滊'Ӄ/gӡ7בвI\ug']ۧm'6~e#~snʏ]*Mz|Nռkn;ss}4w^{jw<^%½e]_sYmrvOʺ|AmA>b+'jQpdׯx^?ܧW&.a_'vh~jg\sc~W3Gz%uڡ=>eO&pO᷼=nJYo8:kn^znD|8:gEVOG~oN\x=o+3<3*w7!W)v?A՛?%pӮw?~yVq#0ߕgz> jSb^7D˫~(ڊϦ8]7c־dœצ>E{gɿY f?oJ(΃'S/Mu1?8ky]/q][9&3~#~Ϯ`'kѣn/Q7|J⇷2~?r!C3<)_eȵq_y~Y#GIú]Ӯ~?pmiy/Gc}l^4-Z\^&׳N'/j_huG=xQ^O?9S?֙П/"O0 zwmuՕ3 O/_<;<_>{Fξ6z>}ºr?H <˫o4xRo3"b0 ǫغ6nˋǮ|gx/ b/#%ky|ǭ;P_?m3l;q-Ϳ[\KߢVZ8Z<:zv>kx̗ۙs`sςci7#{tu&_GD\w.o5yOuɃE~뤂^'Ϲm޴>'&yֵ->>I.3} x7?ߟk0{6]A~?7[u#+5ǻn?|;+E36ygkA? y|yn>GyOS\CuS~,V魌|{@,)x%/<<`7ReVOB6o5v8b_DwCZ.~/BǩQc\qb:x~H|K GϫQu!k'1L;1@^μl/k}m$$ϩ}:Sa՛g?o4-$aaq޾ǎ@_d֩NA|_[}hT}3^2羞Owڵ“zYO~[DŽ'x8j~o|uG<7:M2|.~ O;;A~oξ}7wuDwwQ=[@?}v7/v֏;ߗ'!zW]a2$g׿s_=qzK!{ُxҖǟ}E'߭%c#oإ!2^cG-rd\y~??yNi낇?[y+vu_[oym}5Ğ_bz_ڡm85߽^$nތy/q~_ۃWnrύ=;%%o\)i]qP%=V{D|}8_8~<=_uV)s`eb8ȝI.x5~9|p`>I0+/$.z{?:BOg!fnz/}uxi3_/ZoyܷfOZ'm~r<_{cn7gă±;<gyo'ozCEz?->}/7;O]eɸ?}/>f|ĥ;K'}ϼ[a7y;rG/|?^I?O ck}h}nzQr?vfʌ'<6OwWYiΚwrqGk`/?ώOG!?~ۛ4姧~Ҹ'y[[PN?'aFw>A6uSw@nR_{?߉L?ΈI_Ğ7d;"ҏcϯ?]g3^3ؙoݗ[3웻yA}jx%.CyZ~/e3Bq4^|?~#z ѓ?{t Sx?|o}ُr)rS<>ge._;{(џn}o?߮# .a|ry`7?o|mnO<W?ۗ\>9j/s_ڧƓ+9ۧGOl]@#v߅7k֋7Ng?;|ki̧OǍ6KNe&gC5/|39'Ɖk9x\_K8}x߈7#~x/>-e]roa~o+3/uE ~>3wƗO OûO2^l|52_>p[oS[yݜGؑ72Oyُks=vp㢮v,^0#֏^>o3S}r?R?n߻m/}^Ǿ_=ԟ#xͿKF 9/q"矚E5^ϸ'yE<)cMn DnvǨǵjxVz/яEuO㮟~iv?a/?7>q֝:]&=`~*zxe\%J'<3ú=yNf✌cy|nƁ==M?_| ]㉿O O#4OU㌜^̃^'[;9[ۊW<G'1x1Ɖ^>7w> c=]=_g=EU/6@K,2)9Z`yF֟:#w'MÏy0OnsPO#G$|/weo|]օ0کǘ"ƃ0?? Ozgx8)T?h`!_\;hW{c;z]c擷Gͱo:\y7n2 "bw8n|ϥNҲSxgIkO?|7xrf^?]ioLw%_uOBP-;EXu BroG>Kȝϥ_C)A O(O0p_0u?e:ČO#~~K|Uv,vk@zy㛑 _qs+¯ᚧM|_; >yƙ~g󀧌OWxb W4v%_k3.W])үo'<OOv|;u'~9xJȋvv:K<8s_3pp?}\q!rxwb+QA<ϧ?)ol;vF\wds9Ok>(쟕-ƹǬ;Wɟ~t?~ݏ,yo5IƟ? K/=Ӷ^)vTyC럌_2YO|N׵O)FÏ3zV?ƫ>y"g䁏>f{gx)@^ڂ?xx[/7+gyw<?8"Wxyjzd_E{z}zܗ.'v<;vYt<ē˳ <:E"z%~qu~]ںXu~ɿ4~œ}RקӓwJ=y4SKSʗ[w=+ Gw'׮? ^v=yh֗Nbkd\=uH_/%.<waµc)E~[[^>uWwAg!|G}pGo'G.]>b}*7=|596x5xz/iqx<^8ޭ/ )bNE8GCWeY]w_;~}f 9;bƥ3q??gϴ}_AΫFϭݹoq!n.Ge\fGby' Z"~Ug(>y2r_?~<~~@D_yo;^N[7 G=/?7}@õ%9wCsP^Z3~XOdw]gqSi#:;OQuK3 ?O>|>$8^3o'q,&"ӷ M2nNʇ$/|_'Ǟ'z{~wwM\|9nߎU 7r[}/_)u䈞d1<3QG߈}o˼~J<g|t[#MǕNN}hZx?y㏑[~Op^_|q7=x_gލ;\5 kG?tƿ[~_H=\C#CSß3k_^< .M\T`Wgy]m܂S_<8+ﮇq:z쇿;DO#}mO+Ed=.G晞};wI߾ﹽ5~NrxZ}$ߕ O;Y~!g滽y/2;~"|xg3gym^]{'Y> O]9X{;k[_8A݋u>׸kZ8:kPOu;~7n}∜ȯ'#sxa<pEu;&߰WkōOؖ N6lzS8Lqu {3ϦZKȣ,}jx\;I~Ox:9ٮq-zxץͻ#2/+2:Sj|)-boh1+{|OysAnF+/^.a3= %GےmE^~P\߶c˷R'j֭jK+|/kW5/]/ӵ~7:g?mp&+w~O9a[XvS2[_xk뻪=<Zz: 뀽OjgWSߤ}uv§GO\o[z}#3|%y,X9\C7Og~~@cȭ${~>gko7r ^\//z'ߧ=ou&<<~άcSiOSl?)v+ų{՛loO獼<\qœ߭k߃nxj_?Imz Vz\կgc? >_v: bkNZrWM=;p됃;/kɫV?/]gpsڏK!{ܝ/5g׻{Ck}/.CnI/Np|߫_x^yt+&_>ZV?_[?n{>e{ʗ-O_ï<=k}p|'{޽?ӿOzq[aon(wkuxI_/?ZZi{-j-"g,or&wKho;mog}˛6oKRyZx]<\{YNxڗu~ҭzeφz%<HcRnP]^[NYҺZ_5d_ym{>~Uu7=wois]]/˼}7u_C?tu_}7\?l{?;HR~l:̻wfڱ[iu'Yo#>4['vz]o'vuonM}z]W:[?|u?֥}u lӎw]Gw^/Zbeǯvck]ܺϣI>ݿd}q`\v4+?+uOg84+/ΧW:3~Osou-lO-͇띍ˮ_tU_zWGdz-ܵ}]5?<'!oy{>hw_0x})z|sOl׳ϾbE^Kz*|+㿭>|xs|Sxi~,?zծkN0f3g|~^Osʵe#^\qO>x=:_|ӟ?/OL@}1i'm>}><xYo[>"/mrX??k~{/˼=_/Zp<%[Ow?e Oۏd\ 9ix[GXu7٧2va,fףw--;[<5C?xN|d>쓸?j,<\%zUY?wwx~'y/[sqpD'Ɏ}O>| O?|$fgbgbM[>/;8D{qI7zkGTDC^DC Z"?%\gwS>|39U<=\NŽp+pO݃Ͽf!~d3qءw O osC7^| C>Yl~8ڿ ^\kݧ~3tiyr8nپEOܲ_3~e|F< Mב/bݜ߼8ϸqf_f?kpNOoy>[("\OaD>S;$_Ws_fX8ВQ:=×؏MN۾ovP߻ym{fG6OʎkxRoU<%N-WyW%_cG9Dxw5m/'oi}8e'Gl^ \Oirsg'U<1]E8{Wlյ8.1KY~{7O !ٷyg^W/xP]{;/[<џwT{r[Dn}W<_f/];.9ai>O3je_q{}Aңx9{{ ^x02$/.0g'PukW[{C6ossb禟=͇WWV oe gW×_y=)r>/ڙNZzo򘇺4Ox,A7x?5cOp^~3$=|3uy~U;k"Ϥx#ϼx^y2z]<ֵz (<-/ O~_vx:\OWt?絮J9Z wܞ7)V{S/4m+gyl>\:q-\ѧW#_^Wɺ[ ~~N_] GqE^WOp'XO.~mݜqIW>޽m?T}ylʟϳ;~Nkfxݧz=ؾv4uWpc3q[> ޸#7x/ӟvz+ۧtDj^x y]~2z4,v'7oy]Cu#9vxo='k8Mq~yqֱÇqhwze{۶x:䕌'?v}e<7/o_]=SQI7x\ǝO]dNk9>&x}uxZw<_/<?GO >O_b79 Vu+tv3ih~'8|/NO:4L'yGoG/Wz{3Ë#sx!of짳 4ٙ^ޮ-\9;(#x5Josŏƃ}rc%81t|*.;Óy?h>u~QڞGNՔ׫ϩKD#%<-Ǿu%yW2vfī5^SagOc<-~=kűxWrpgޯWg']_GߒwW!?vjk5-ouၼ|wv{yQxxuw pd<]=5zOtT$~/]u={үxWzf^,n.^֕fܺ~vTqwh|5m~" #W }~!_5^ x+}c@?7PS>kfx:;b^̇я`^|kqw ~{s'#κGQg݃zmOf}YG|q}w3>w=~~~Y?yjx<O:XПg?8~]Cٷjkf>(Bݒuxwߓ8m65>7ŠkzźC{v\}\'v~OH)x$zO~8|3n_V}ow!2ϧkyAO9Z;z&塮wHjg]#F)2O-}u?4t*ox"_ϛ79ۯ@wMaog<,XO@ng}O@ׯ}r?Cϛ}Vsr8<׬l]\xOżѾ^]wD8<\\QzuG'r'N=l]{w~|:gq]3Z|(:cQkoA eKw|[_'uvq~kCS?>xku}Fy. 9tSu黿2=;ů_omSwd|!~⛏m`ܶ=S>hRAoީ3o]<ŏz߽ 6?uRWGsv_+^׬ۏ]<˃sq~o7|wv;u>}kA<~ _OKn7$/x 2[O~<='NK'ok?Fl=8B]o>{_8=p\qy'sqyyg|^?ym?o_ɮgJOۺ3?_7Syо|N~g_? =qZkg~)犃ɗ})wq=&rgmOq ?=q?,ؼӬ#vo 7/wy~81Nþ'>VnޓW//';vGsZotϡ~SWۺd +?~us?A/sxxYx-ԻUD?m]nƝmݗc/j..0!uUhviEz/n7֯Oz{y4v&uݲ}oss_Z?vq^^#Gm>'뛖?[7ا7S_~ʫ-x`(7/><0ozmzxFObW] O p}v?x?9oԳZ7R'[ŝ} `Wc-CAeﲿWg Z~/κ]|Cף{p>KӞ~򣭃^_PW?g4~k!}[.nՖ'gGWsi'#߻nRK8{Pk]lZ7 >6}]ZW/</i}'~BgIco_=}٧1[τt~y9mqޏ`\^}qS߻/<ț'ڼw!aFN;OgzYw5حq=9xf_ǫϺ ס7_?W#xJϊKן&?}.}䙽uy%}\Npa%VI&Ny~ZxZ?#ۼ}~簼Ƶwc{O3Ǒ KyNmzԹ=Oux}>޷wO{7./l>w~,!viQ{knE֏ qw+/sռ>G{?]#?bYxz`?cd^2uwM}׬u>RXW>@Ƈ^}ʾw]G7ʟNof/ؖG63+[V/,Z>⭓|?782nW9 _OSp`V'w^kG~;+<^]G'=}g|.cGxspxrmOg\TG6xJۿ'\o :?OO{|;x'x2_^$yj/[oy֟Ӯ'C'>yY:k^9>'{Z7_~{_ۻ/<`~}osvHFusW'o?Ws^WNvolk]|^w·Oqy<9]-?~οWy;"XWt\|t2g=uϣ+P<8#'zx_|]:]uNc}ˑ#ؕ>ڿ{vPv|onF~&Z.'Gӝs~׼>GsЧۮ\_^j7o㸩qpCůtﭵoF]?z'xLߜቼ]sPr~z_>So4׹Vy1u<{Ϲ]9gmG}!.<_N^VFߟGlzq'^~ zK|]ľ/)i? :}{IuǎOw\o;uyOk.^[g}S/~wM;П+^tm>:9_')-|xo]~8.zY6>>`9#;9=;8GZ~B]Kѷ[曶^?§璝"';.Wzn_{e'v~4 z:>F$?>l <睼b$?Oqظ {4?59xLᅝR_+#<&=opJ彃KDOŅGE^ʛW:Ϭs/.T\9՛߹}Lj]]?<89)տ*9ĉGcW',Oxq<󊧓~YƯyY~{y x2pSI_y~_£ǝƙ}?7zCx'ˇ?8x߷nNxc~qp{:/q8q/Lʅmx Lϵ^v<;^~Wȹq›޵G0gӯ9cg/yk\qMwN5+rqcύqtzL}7{iDgs&Dq?N#֏`^< +^> OsnN.ggS<'ݿ~ڏ~Qݧ&p˷^ǹ/ 59w4|z샿_qN4wxʯI}jy}cuOM^zOug<6~:'{Y{'}9;tӉ>//ί{es7^}#S>usޫi}"UWaVw}#ExOuחOgu<{\׿g}2.\<}:ڣا3?٧|9 ߎt|i}ͺ9KwuCgc.՛/^zy:ϓ~ugq_FGO~c~QtkO.^oOYT?{)/^GZZ#q:ҺS;yCO#?: ~yxww>@Όg/'<_ױW_0 C<]oW4e/`e)~m?7O~7z_.}ax9O?7z~[!_xb׸S-qus{G'CxRW^\E<?;xzSqH&:oG3z珒4O{}iew%@ #:^!MF?/S{sf/?p"n^7N"'f/~ݏ:8y/__|tǭzCC7{a'SkI}~<ѲOgTO?w=sCi:ÓGw~ 9G^ pϏg=VCcGq2z:~]:o]uڧ\]?죞~aǏgpxp@m}+\~>4;{G}57q~6Y~ O 0Z ikʼn縟~S>+b?^L-:}:Nw3u8T׷:5z3~X;r%<oBO /N"և;xukϬ W#vc=n;viþvఎu+gm\A`gF#?]Oswh?}X;؟GQy1.xbđ/<:n7gxқsZ Oi~ײ#[Aw֧Ӿ ޟȿcG?M_G(f_X}VO\cKE:+b=uݴe{xם OgOztnv3ɶ/1\ oX>LRu_ ]pWNŸ]d\{R~g<nxm?_9Oguڵc m>7dP~ Ǒ}v=] .ɧ>x;y}5s{/ =n_ԵS1mq[G>'?\۲⥾>&.{<_ϼ=%?R]Ĭ'f|Oy}Nzu׫lE>W:ng7S>9K7恴w94 ;տ[q}/v!W|>ϦãsK/YGk ^xO}=/?zģN'>#.}6y'4zg3}F|)d67{+r?=f|9\o%<3(]uIOp)7 ?h|{7H?78B =q?!6kc=+se;E/;)龏Պ_/OgQ?j'ko>./_ sx_a<'m}O{eu+o}R~ȋ{9N-[7zAGZOZ柟d?-Ne?S| ߷q}?~~kx{^{ ߗׄ Ig|~瓇>l&Jtނ9/ڧK|=M7h<{^?K^>qz8Gϰ9L\gg0䜜YPD;?‰-O%ENv\?%s=>8d]pMMzoO^8SIvcr.>h{""0x~~QoexOkÞg׻Oʼo?Zrn<'c9y%Љuy\|:"C~)~+rrx|bc]/p8+q|'_  ܺ/=i?S<2_4\+ыr!z>C-O]!ß.1擝?P7]'s8g[ԁ3!_gOtLZ?~_.N<wf䈜g<>6۸g6cگ8h7vQ\'4/||>+? <̷yz>1./R/Bw+?=>xg7{߼c1}?y$9vԣOf^#Fy׭ǘ8?CuoqN~\#\;e?08h5DžGwpx*2~#W.gȻŋh7_N^0_ZbzDo~%թY0~}\=I,?w<ѳ?< ><?۳?xsLj"&OFn?x-g/=z\=2_@}k;tS3.ߵAH ħ+yA^{ g~Z'aOhO}5gyy~Gy_7|h~]dwxi=Dٓk^ⶩǪsGoc~0'c: [sz s=|{~s+u}zX>;uV/tk{}8xvrƛ ^w׽Ƨ2 ۛuOy.z^-gsx? ߉GϹw1~}5w9?_=džۿ.,?pK<jKx2>???'Y>ދC/^|Įrs/8u,o}= +,'u pO+3?巓\S]Iy<|S^kCgs11-<؟K h^;w@M>6~;a?"/n͗/On:Է5OUG O;yNrGDG}9k=:{z~_nߐ8?IC5?+>ܔ8GN_|#s#goK|Rye[<?^8:q>\}S-!~g'p?n?Xyodwmvo Q2c?7œt'~~\_7vZ|M/2OkCl)qs[vՌ<7aO=~Y> T2WK_ϭ_sy7~략<> /|mS3Y[|n}yωO>ѳ={pß> ~GC":N>6x4|MmN36lG_#oI=O'UOު֗SS?z')gᑞ5G:1vzݻO?^|r,Klv|ݏ~^|S O8cvƥ|S9jpti.d \/6W;x/%y='SocWZx'&W'w625T[շ+3?wSė_;SFng+o).|q%zwx-r`: u>Stǝ䀷'Oʷ}im[,ywN!ʻ7Oꔌ?/ȟyuܯ!=Ӆc9㾏nb Y><z\<?.ʟ+ y!_qC !V\vm~1O*'y3\MvXC._ߋ~j֟Y$zR<5}!7u8}?&?a!)ڮk?eK}t?yXFO+>OÇ;:,OY*O#\Z떸9\/E{ y]nw'q[o7x)gbtbe܍˫i%v9ޟ>{}=!'*q5nuI<O:n=̮>c}_wz?zY@˼qoslµ~#i)^~ ?'wGX_=|_"YZ;wݳ<;CϰOAS䡚%Zcqh}c_W'{g'#"Emĕp>#.c/!ԙ3/?K\w$vO^66|.^}Bۺ.\YϱxWo?Zw'83^O~7חCůK!~~@^z.C{]F߲ nuj[6y<7V?~П?UO:.W65n#wG%qY|w/_?wۏ?7~[/Ah~?׏4g'\?3Z:Au)Îޙuw|z_ɟxտƛ~3aĵS!/Vw˯7^{\Ϝ"oW7Rn4-GS߯%*?ɟpYWO;x m3NӰ+m=r=5b/N}=麎^~-Yv`/W/Go3=;u޻\ Ë{'hOw_c^笟/a~&vzS3fߜ^O]su;[{q>Sկ>rq=Yr ꍭ׺)._<9~Kztq'Ϣ=޴}}!yN9ó__]mn|Wi=ͥlmKy~^S^ Ϸ3\]x^m۶g|KvTnOyW^Z<]{cU[6Ĭχu3m`6Vw6&l{6#M'f_+~7\oy縬ó}uƯ{4Oofu{u?f?7?/dC:μ/Z}~oe]b>|k;wm\Sw}??)}vw?7㾻ں})d|Zo=։[uZ7Kͣ:qvfZ(OC3/=#{Ña_?Y_l_ lּ\b^Eo:gy~晼qbߠ?}/rw(k~Ӱ/c!/_[|vZϵig yvxGL@Ws|9v]߳×ا>=_qh3? 'wn߄G ȧ}cke\>}0^;Wy2nZϷ.oA?:}^ >p_qp ?sGO~+}Bވx=Tm`߿EڿD/d6}폢{\c+ W9O}T W=.nOJ[x#{G-=W'y3n}O8.>_`sh=rD3x}xEx=n{S8n?=兞~h?Iw?/*[8i}ȕ}|we/q8vǕ䧲?}3C<uSJsĞٓ[ۧ2[#K^}9筜_l?Iv3r8/C O^;3[̿kzcx2}}<ĸyggW V< O.{]K˿dO8^T]TS~'ܧz7gog8hvqSxu?g~xy;Sqgr9/YË>LO>x:ˏfOǼGyo7׿?e_Moߟn/vg"߯2!9Y{L v7]ÿ_mMG2xߗ=?r%lw~7o\^x=kgzK w< yݟ0β|'­uB|<9wggV_:OcZz79oyl89_wR7NDelzSpvg8^\ߜ_+7Ծ;>~]}ԝi0/}ggNS}<]3=a8džg x{ϗ_qs|wq]upWeo(ZW/SO O懝W7O<=s<#'|œ+/9k?t·]+~O{U>=];NJ?X~~q;y{Q:?}[֍/􂸕MDdNDz z䤾܈7ҳsF{R|e=m[y񭷀扵k}ϚWܧ-|(~WWO7ޕwK++guOOSpu&*z;~F^$ lmؽt:% cjς_E9 ?Ñ<]Һ"|]iHP<%>(יۓ,ּ\.m둇 i킶ߋuߑ{;EuxjY{M]O6^}Nj~ x~E'<:tWiOO^4?~j:9nYm|.N?l}m%V/܊[]_Mg ?;uԹVE_ZO#6x[ωw-u|}wG>𴿛xV%t晵|S %euqa }[[~[4~Y~ "Z^}}Roo?OuSᙝÑC87<G|>V{|~ڻݮ<t'A:n+G 𒗼aDQES""-DHSx>s9]vUTs\sw }yvUxROX>93!wu/$of}]\x*=j+_o]J-7z@p8w /yӿ3K|ܞYߔu/ܱسSC qTxZں_7xbt ~jP8|ȍŏ@Δ]p5qJ⨵:ЎU8~o_pʼуS%HpKԭ}P>9;uvKxjvuڿѸ ೟~Yێ1nߥEk4{i/~z?9g~:-W'->? ηW|ϲV>̧8iMsϺ<#~^'`k}yyyrU+,n457.uWwZ>"6cч?.봇+y :E.i{\MAŋ:>?F$w9oz&"g#}GG<8oW=x~ZgKtB_uD!~Q_#?򺪮QNr~3֫g /H~wnOG3O+6>x/F#Ņqſ7dy%RCCѣǿu:_-{;q%;O3Q~ptOd;OHpmήH/+,U|9\ov<仱z=ȼO:^ʏ߻]ܸ){*_{qx3&4pC7[:u{R˯0oW9On۲M0􍟊:W/?Wuk&c.xiLgh= %4ωf\ K+ G=}??)S-u'yuqtsLt9;ԾIp?!L<OA킧7Z8< 0m׽5^w|_<8'zHޑw8r~B..>\on,x3ϧge]HΫb5j@?<ɺ򛘇ߝO> A=:򙯫_>{NBOq.tX񴣇=~: gtk/da#>W4 F[:q[T|&:.ou\|"ėǏA{XaЕ#FGkERTt: Gc ;USl-:7*y';}Of r ^G1+뜦ޟuQgq>}4}^7;.~Capbr(z 9euR$W+OWGpd~;6jحwvރe]p{z6;Gߣ_^gcS<-vcكفpyoݖ?Z5J<Ò]ɧgX Zu;]~ON4y~5E=;xa[+'7ޖ.~w{{]~~YO&O}W#4|˱} 33~c/7z׽ >Z~vS5/93qO#~_8~Kd=N~tJ|qFN}a3ykW!&NO'~Ϯ?{K'ߩ7xB_{KcG|%w۝GyMw[;MֹN/_~EFt<_Mxuu᩟;n<|Dߙ^ađk'8?|G_w~g/JZp6+o&Osn{'wC~4>Io8l5_&<CΈ!P|+q=Num'e=/;y߽dKGJ}0|w{n8a?/vpF?O/;:8+чh9~^c[u*ž7'<i=;\.y~M+oSO<_ۢ_yOUa?;Z?9+4 %]2Rh#Oiw/Qϭʇ J'u#?B.++>eI{pU~~tJ>[Lz ܕ^r*+_ۭszGS9|N z'| NRz og)uGd}f_iGǓN8Jƿkj;z*:[*N7?3z Gb7'GxJ='-Z>mx[\_f ai^-;vO=Oa|fZǴV]Mu'|tV^uW5JOϯ5\Oo+SpTUȲjSK}C,u گQ|;."GKes_O$(uXf?~ܞr<' Nĭ?{|O{9<,Zm zI?{Z7cS;h]MKޅ-y;9z&C'uObgE:+^xomv,n;5O?ɧST]GZy#KuNj@~<\ǃ&CyuM눥Ҭ+A/ʇ8љÍȽ##xܞ㿛>_;{:/.$FuA<<'m#_YJO㧳~?_O_G~W͸-zP|1&߲.zECו='Y^ COx`g|s˴53/_ƾڙI N>ȇc-~q|Y' --#_%f}&zU'~+m\y$TyyDu`+_wj?;?ۗ<3;<'[syH~}cu])quodže)LBW>Ȯ6]v[~Av9j'o$bgZ[Us!'8?!&-<$4o^~$"U9Ք]^YO F>柋=Kg+;5xX-xI ?Hy<4-(8{b;Ѹ+T8.qyx8y%/?3v Ю70srR\Og]%Y+x"c=|Z4fkO;DW˟Lߢ׋ѷwrÕ;Kn7>ywMTyKֺz;;1gXK1; Ji7]zjgލ&t-|V\.㿱ﯽm\m$=_GFNc#ǣk-ie˓o$8ss}3S~=7ye'~OƯm,><ҏDO|WGGߋ9Z9O<ηtW]7}K9tiW@%/}W=Om|<gڿyp?:Ď+]j6#}qry09p}'ڡw$n;n;o||<- \ܿ;AˏȩB^ŽęK.ztt8E/z/S? !ϽG_S[r\e量&~GTLjeC36uY>q)zxn˧~9kهGѲ^Mo\*=0^rI>3};8*{}#ſ8rWi |36Og_FIKK:HL8_ӌ??ӿ3w-=vm>nT[#vܴi'ZySp=T_q%{\:|5Qj#Fi+!lUSh ]4-){5ģ΋'OOu};׵⳽N=&_? Om*~g/v*Uy|V"r魑wgb/Y;EО}o|%?<[Rgd,u3[}B57䃓pT89_?"v\/>_tC#W.CxjO'yQ ]f=nOy?ǨG7m{UY:F]zxzy`~'nqݝJ~vG^_v1%ʾ8㪮 u?x*:xv~g{?=O }O3/ D˧7~kx߅=d7o{_) :p~_@tG^/GuǽN!w򼲧pGNyzߛc:=6Z˯{⹵q_.Tz>-L3ΣGx.u_w;b  [/d]u'~U^75=%^͇=~ Fȇ?bq?ߌqMv3l:LZg;c\V'x}rrKv!Xpx鋯_.?B~~{k'Ό|OG nvr ~R~#x ]=?d?A=KS(]\VY1ryKq!㧦򃇿1}ܼ{g WdO~?zfr>|4|껓GP䯽ȥ=mQx_vTehu W'ڏYO:OPر ø|5KF;9&FA7l^9k{Zir}M b[4NtEG_kn_w/}syW;oyy~,q!??bOR':8S#vrK=5~O:*U/Ihg; #e38 ~5wpP& Յ^/JoCxw\z.0Uygk{Oe?>fJ}>o/7ڿ.bhyo~x/Soэ@g|:+OɥÑs~ i?f4z>-Ψα^A4ӣ㥿AJނq~ފ#=;ޞI*u%boKOGZ~ޏ/l/,vrhwxNU:oEp'i/b6ss 9%З Oh$ⓧ'r )'59 >HNsGu/?ݺ[׿;we?U{]7xIknqMsϮsR 㭽3ζ.K[huMYIRz^N@{k v~˸z} ŏ"wӿ=gN(zyvIoaWO$ه=+_1h-t}wi;ng'~tFgpXCio;%o/wכ7Kߡt[+wr5\3zzq}K5n̏~m;ъkx?`Z~o v q=mz^@9~~ߡgoo8<%q98s'g|ŗNxwø#ԇK@/9vV~sY˶/wyzWyc~zc@W#j\ױ-xiq7?Bx ~ n@_7ď#|j~LKs6#a\]o|Ϳ;ϟWza-5~'=}>Ѽ%o>,y]/{5|~A'|׆&OECN|5y8p~9;Ag溇=wqvcW<ϧ?qt?<;4^ze>C7/t~qF\-%θ~տR?wSf}{ {xg9o|tS\D}/=ڃ|{<_uWrikq8['?$@z~Ɓ<:c;OoWd/4?&EJs/Uq:~q[~Mvqh~B}uv) jЫ/|sg_i_Չ7bw-Stv@{۸(]nx#]ޯvԿ}~%zfo>\NOj}nc瓟unڛioڛioڛioڛioڛioڛioڛmYێ_U5dž{.gkh[xp~꺳5mۋu~}2pQz|\^h/7*f]Y ߒW(@^tx|^/=4}uI^n.ϟ^|;~ph.*/.^/k;iw_?'^sҫjq`~e#LZ߻ }z8uSY?柝oӿ۵<ޝiM8XZ8jzig=̺2mzKvл_C:gN~xZX'1c1g]yzu:'2xNzZƟY_|Y뭳7_ݼY9u-߻_;{22C_<2#j=YǙTXh]f_G:^W|׋v= CCWX_ntw뾣fbn^Wڮ[;|?q]_~<[k^oޟLx{Nz?>O^6{х:j8uf33>oת'Gc`<'];~Ν|t ?][7>u~+ 6u zWGMuhԧ.yv |qT7,(ԡc㔺:=ܸ:=~o\}gqoϝӿ.{~mi_Kw]SMqO>As:o󓿿H)> G]_+NB7λ:x#K_1yGp/85?x.~uCNuU7zQ ByV5~-~hi̮}NҾ7 b`icSw~9|ӒWO >胇>?^wCg}a_솇SW»9b\]vK z(C:~Ό:[>\z^iݸq8L>GԹ#]gW{ UNK;S6ig^@~G/\7r/I)iO?qd'7ZpE)|_?/h=Stg'ʯD/{%۞C>pydIKGKw 6xH7OᒃA|.rB:Z'=Ѕxp?۟#uG/x_%/=qyH<#~M>ۍ|FOovx^9f5:'/JNX?_Km@j~@߻_x?%'oӍw7ȡ#4>xj?z-q'~Q<ֿ<>T~t_1}?=z;sn?:~mEqDr ݼ~yCpv{39<׌~v:;njߜ7< 3yđhio+?q ⛕+?_9/-/m MtyS?wʏ@NnGo+?:| pӿ{\{Dz8u4Y_sh5[O̧cy {??uYx8A/X8vw;qxNP\oq=y<GDOU=xj}}tg[2`[`}7>KOG|o?EDtF.WO^s9o1~ |걹nἼтC}$38Α_n̷c~/޿,rkcߗCxw85kg^[\f+vɝ^wy6 r}CLwzzcv <=˺Iy3NG~mȽWGFW)|r}p[ץOǸ_ Ӳqf[?~.b?>h 8O'ŮmxSc{Jn=~x9GK=8rmJ}_~45x!o< [4.=ӂDO-'ݢStMDԼ>Zhyӭs1=/|df|?z#ꡲԑ3ow|/?0ss֟_?B 1~*q!<\;f >r<1pwˎ{|W<;Ga7+sB&8"ޜ|xxܪ<}Y83QO}cx :–/τ+8/v:WgXJ.mxJuĴU0r?suhyix"ϾXX%Z>vzs<=wݵ?>oy; o|k&yg{7xڴꓹ.z-oG}g?Ku̎6o<6^sq{pߞ<Wȩ'?sZV ms_N=`K>kӿO/~<-xRl}.BC8&gջzg> zv~ vx =?4U=}k/㫛:fWyqr?y woл=qgOYWfK&Oт'?],gя7tjѹͣ~[;Rӧ0?UWuɛ/}G}λ=9p;[>~s<^Go',Oӟcm&⿓oT~o}k\5~<ݾ?[\ѻyxqE-~s:9oߧm9zhso^W>x?/ \5ԧOO׌\Bu{}}<7]%zɸ3r]WsNsL~sC]K>&?9m Q4jrیO[<5<˧j6/{g:-?f>GT|n~Z kyN?kz6~7_&Z|x3xH#y?)/aQМO wX~ ql^?qip>'y| ={gIܪ7ߏЉbəY\I}}iGC ]W)epK^~y'##sz) zi~)}j46~>@oбcwzy6艽>r /{ ;awdq?ȓ`8UܡȩÏ|5/gp@?t}w{xG~J΋?U^ϵ c0tu}?9cyDܡ!Cyw]gn<35P8j;8Wqo]]u^?=7.T-J8n_"+U }y/}=~񅧟i{)0t/]Wv]egi; oߏYrw\>6u_]h\_\G?]N+~ '_/CqGa74}F.d3xOj]cqo:xu_g~_kr~_֍6}89ořG8Ooc-}xw]v>mc]mȝN:p ס9%c>re<ή1}\8л}ht`ə m<~G_x>HOmϘ~^/J#/' z|.~Bx~#~_r 76p U A}#'W2~Lɣ\{~vscO.Oo}/Үp]xG+//ݽi ͎:y>گmm3˲ˌ;7zHƑ^oTH;=ո wr_5#zY8 6OY OrJ;Ny 5)|W\Gx$_:{|ϑ;4%|~~|Ʊ2^Wvwꍍ}f^Urw;ҟ٣g\6<|$xƗv~MKu~sG<:z;?:߲C!X|_O򂍋h9x*)<_w:KWuAgݏ[z}w::Oc|^?tLH<|ÏFNxo8C~ pG|^9z=^DO _Pr?]7*~ů{}#Ov%`F=OpWD}Ԏk-gj<)> C<]~|G^ӷ.'oҷn˷ioSGiB}>g7}?{nѳ:}ï3||y~+Ñ#?T򉾧_Gx_3-}O_a=W=-^UȧcSC3?S/<>aЧo{]@Q7m.?s@gݚGu޲_-=Q\~xz#Oizœ'r?^z8jD]Uq3N2_u׭߿N9/Z~Rݴ^u5ȭ7+_,v)'أڟG$=)4tf%^Uz <}߲%zo$CuӿC }pwz__NϷuwqNľ>O=|d[={}:S=/vuHY7xjyP~1';(;>Kꖍɿc?ȧG'GOWH[D25Kpzl{wϛr K>kp'=8ns[}Yj A+9c]|S|W ^Ib?FO|7Ka~`;2_=C^o|>#k*}y9vڗ-&CɃ%O xEǗCoȯ uC&yZn#)HOKGrZ}qh?xγoy>=|? i r~No\8?s;$qK?3*<é6{}qlx:Cx:˾ K?=̺tFB8K|UFN{^מO:J75yNϑCo&ѧ*<~d'<=^z:zit=k}`k؂/%oxȯO!;؁DSdowU\~}x}O:(yz?k{T\8_W¯Sb7"kA9B=i7wvPŸˏxr8<?]f]Ww|Vp /<;;r\l|?7 '|z#b 뚯7_$~ۥDi;g<7NDYz(iZ5 Tq}T]^~xˬWW'?dž˃#<\TuKd߉EuwO!Q莫W6q+n'za9#7nܖ@~xn݂/ }UO _|,5< ?m|h zGo:Kxߓ1sZO.T%yTmƷ蝅S,zTi"n/F+u./zWyj3|>)?zj{H__)<8~pV=+S<K/;DSWSﳇO^'>y>?x_ETd̖^~4&mdr8SEWyH];߁5z^cvw*_ᐾC? wO>,6wxwhSˏ>6~+xv9D>mv|fa_ ?~;~xvdW|&O|x`ǃ+J>D'Sw ][gb$mÓo{D9F74'g֥߼G<yvpq|׃eW{O=9cciۿwV}|c%:x-v~^HOpgy ?^p2//lW/CdG :CpRݽ=8Ƕ0~oqUr|k OK~ nWƮoG7Roeg+~w= ~oW]GW-O>]}KwYy/wpUϰ~c?'`e뼕O"n+:I#|><ϥO%||<ߋ?q}Ur×k\W</O~KR\3O3ƻg\*6ӏ M~=i|z#zO8wT?zݎ8rp#>k߮0;^)^yC=#c~ڮz-.Oo_Ckݽ`-y׍'xɧ<~u\ vDz_S/=w >eg߂ם\/;uW/5to\ȝl?wߡ'}8jف$C=u|cPk?=?4=}chcC#P }Ew: 9_Rr%K}i{OBW~k;ԓ5=}1χ_;f?-~8{n4F>.ߨ~N=oAo@0H?o>ugy絞;g/j/i:%s7^h= G;}.!;~JGsAtC9~y_z}|3JrI/"!oGg wɏR֓tYǢu!^C޾6gK*?|eW!,O/sO4u}OG/'Oxz_جʗl.ϼ<{ iN87N>ủ+즮|+v?^OOm=xg'>h_z Oȳs>qxOi^jߘ_tc _'}~9v_1ԇƟ3ŬS=%y'`Vp{.ЩczW껭ˇ}S}r\9f ~r|'.Y1N_5OpO}7rgp뙌Wsȯ7p4~g! [f?{'OU7hOiz;-? zQ N6t>|z'ZS_LSC>}8/yx3DZk_OQzyu8#tfI<q? ?}-O7Lt_'!~o_*j] 7|5:s|bT3^wH_Q)k_W .g =莼B_^ea2y<#{:c@볭+]G?|W8eCN|-r3y?OIyweg}J#~}4)u o?=zDAз26=wϖ 7nC/ΞixIvA#w_$_p.DiWɗ_F?~G=8GyppA߶Zn1|<8oԣw2]+Ipxq 7yαşuZ{ro+8Wiܝ?_:z#__g/r?>b;~~|kߍztxj<{4z?R;zߣ7f ;ݠ5~w{MW>k? t=+sY'+SpL↓iɏsx*}1럆?^yY>:u_4c7eT'zpz?xBdkv/+Q/-Gz}MIʇ=z4q6?c?CkMuz>ΟNjpȿg|>ie{'ryt>9}+̢W'3}}{~Ocנ{]]:/cr_E}ɇCxkzC; =ЛyBW;O%4E1xfّ{q:*^y>4u_E.}fw]yAOZ| 3D;ήk'tzuIGze=kEq{-:?_3s:/Nޜ<G>WzN՟yS88,9{]D>2~j@>,v.m_w<}/!f7;i=x:CxO=6N߰t+{WS?F_Uz5yn6ȏ\/4?vy+;k8%OG.\?r9w7+Wky8k䗼zNǡ.ᐿ ?w/]cQ/r1~^J:sۮr^~#ycx눛g/z k~m_Ȏj8_n1^VHŽ_ ^鍃si#1N#Z^y4U_?wQj't o=kuQ'%_yGnO_Oo|z.WhWz ĉSۋ 'Km;k~,h.~EHtFO+V_;.ܪE>q^<ʇſ鐿|c^ٛ3oOjz3|xjܟ]['Wo{nwxF tI_?ч د_yBȃ0y >>Ɓ^yO~:^~Truo;/"ǃ'tj}ʞw^U^zXuN䣪vٺؾF_߽~޴g>/Iwuƹwr6~ߩ~G :ݯzioIy>~|_1q7jH~X ;ci|>v'%>ᬭz_}ϻOOoyCqrsi_Zb?7!Ok?_/ox%߫ދOP7yq+38k,o;ϣs8h} _q=<\w}W!>`W=2p<};n_wasJ|Ϋ5Jeyѯ>\7P}#jz_}_gw.N.:7fS?_X['v׬xc)Y:q:_,Ϻzep'ii~#UOȺuNwӇo`e3cC{܈R >M>4>wpq}$Vy&Owiω{^oq-sAGcӟ7C}o.1>|O>x{H n_wďf\>됌[QnO>?txG?%Ou_Ό/կy2/@C]kot?q|ZI~G9f/g\6wr~ioڛioڛioڛioڛioڛioڛ֭nɿVLɺcirclize/inst/extdata/chromInfo.txt0000755000176200001440000000752414015721224017163 0ustar liggesuserschr1 249250621 /gbdb/hg19/hg19.2bit chr2 243199373 /gbdb/hg19/hg19.2bit chr3 198022430 /gbdb/hg19/hg19.2bit chr4 191154276 /gbdb/hg19/hg19.2bit chr5 180915260 /gbdb/hg19/hg19.2bit chr6 171115067 /gbdb/hg19/hg19.2bit chr7 159138663 /gbdb/hg19/hg19.2bit chrX 155270560 /gbdb/hg19/hg19.2bit chr8 146364022 /gbdb/hg19/hg19.2bit chr9 141213431 /gbdb/hg19/hg19.2bit chr10 135534747 /gbdb/hg19/hg19.2bit chr11 135006516 /gbdb/hg19/hg19.2bit chr12 133851895 /gbdb/hg19/hg19.2bit chr13 115169878 /gbdb/hg19/hg19.2bit chr14 107349540 /gbdb/hg19/hg19.2bit chr15 102531392 /gbdb/hg19/hg19.2bit chr16 90354753 /gbdb/hg19/hg19.2bit chr17 81195210 /gbdb/hg19/hg19.2bit chr18 78077248 /gbdb/hg19/hg19.2bit chr20 63025520 /gbdb/hg19/hg19.2bit chrY 59373566 /gbdb/hg19/hg19.2bit chr19 59128983 /gbdb/hg19/hg19.2bit chr22 51304566 /gbdb/hg19/hg19.2bit chr21 48129895 /gbdb/hg19/hg19.2bit chr6_ssto_hap7 4928567 /gbdb/hg19/hg19.2bit chr6_mcf_hap5 4833398 /gbdb/hg19/hg19.2bit chr6_cox_hap2 4795371 /gbdb/hg19/hg19.2bit chr6_mann_hap4 4683263 /gbdb/hg19/hg19.2bit chr6_apd_hap1 4622290 /gbdb/hg19/hg19.2bit chr6_qbl_hap6 4611984 /gbdb/hg19/hg19.2bit chr6_dbb_hap3 4610396 /gbdb/hg19/hg19.2bit chr17_ctg5_hap1 1680828 /gbdb/hg19/hg19.2bit chr4_ctg9_hap1 590426 /gbdb/hg19/hg19.2bit chr1_gl000192_random 547496 /gbdb/hg19/hg19.2bit chrUn_gl000225 211173 /gbdb/hg19/hg19.2bit chr4_gl000194_random 191469 /gbdb/hg19/hg19.2bit chr4_gl000193_random 189789 /gbdb/hg19/hg19.2bit chr9_gl000200_random 187035 /gbdb/hg19/hg19.2bit chrUn_gl000222 186861 /gbdb/hg19/hg19.2bit chrUn_gl000212 186858 /gbdb/hg19/hg19.2bit chr7_gl000195_random 182896 /gbdb/hg19/hg19.2bit chrUn_gl000223 180455 /gbdb/hg19/hg19.2bit chrUn_gl000224 179693 /gbdb/hg19/hg19.2bit chrUn_gl000219 179198 /gbdb/hg19/hg19.2bit chr17_gl000205_random 174588 /gbdb/hg19/hg19.2bit chrUn_gl000215 172545 /gbdb/hg19/hg19.2bit chrUn_gl000216 172294 /gbdb/hg19/hg19.2bit chrUn_gl000217 172149 /gbdb/hg19/hg19.2bit chr9_gl000199_random 169874 /gbdb/hg19/hg19.2bit chrUn_gl000211 166566 /gbdb/hg19/hg19.2bit chrUn_gl000213 164239 /gbdb/hg19/hg19.2bit chrUn_gl000220 161802 /gbdb/hg19/hg19.2bit chrUn_gl000218 161147 /gbdb/hg19/hg19.2bit chr19_gl000209_random 159169 /gbdb/hg19/hg19.2bit chrUn_gl000221 155397 /gbdb/hg19/hg19.2bit chrUn_gl000214 137718 /gbdb/hg19/hg19.2bit chrUn_gl000228 129120 /gbdb/hg19/hg19.2bit chrUn_gl000227 128374 /gbdb/hg19/hg19.2bit chr1_gl000191_random 106433 /gbdb/hg19/hg19.2bit chr19_gl000208_random 92689 /gbdb/hg19/hg19.2bit chr9_gl000198_random 90085 /gbdb/hg19/hg19.2bit chr17_gl000204_random 81310 /gbdb/hg19/hg19.2bit chrUn_gl000233 45941 /gbdb/hg19/hg19.2bit chrUn_gl000237 45867 /gbdb/hg19/hg19.2bit chrUn_gl000230 43691 /gbdb/hg19/hg19.2bit chrUn_gl000242 43523 /gbdb/hg19/hg19.2bit chrUn_gl000243 43341 /gbdb/hg19/hg19.2bit chrUn_gl000241 42152 /gbdb/hg19/hg19.2bit chrUn_gl000236 41934 /gbdb/hg19/hg19.2bit chrUn_gl000240 41933 /gbdb/hg19/hg19.2bit chr17_gl000206_random 41001 /gbdb/hg19/hg19.2bit chrUn_gl000232 40652 /gbdb/hg19/hg19.2bit chrUn_gl000234 40531 /gbdb/hg19/hg19.2bit chr11_gl000202_random 40103 /gbdb/hg19/hg19.2bit chrUn_gl000238 39939 /gbdb/hg19/hg19.2bit chrUn_gl000244 39929 /gbdb/hg19/hg19.2bit chrUn_gl000248 39786 /gbdb/hg19/hg19.2bit chr8_gl000196_random 38914 /gbdb/hg19/hg19.2bit chrUn_gl000249 38502 /gbdb/hg19/hg19.2bit chrUn_gl000246 38154 /gbdb/hg19/hg19.2bit chr17_gl000203_random 37498 /gbdb/hg19/hg19.2bit chr8_gl000197_random 37175 /gbdb/hg19/hg19.2bit chrUn_gl000245 36651 /gbdb/hg19/hg19.2bit chrUn_gl000247 36422 /gbdb/hg19/hg19.2bit chr9_gl000201_random 36148 /gbdb/hg19/hg19.2bit chrUn_gl000235 34474 /gbdb/hg19/hg19.2bit chrUn_gl000239 33824 /gbdb/hg19/hg19.2bit chr21_gl000210_random 27682 /gbdb/hg19/hg19.2bit chrUn_gl000231 27386 /gbdb/hg19/hg19.2bit chrUn_gl000229 19913 /gbdb/hg19/hg19.2bit chrM 16571 /gbdb/hg19/hg19.2bit chrUn_gl000226 15008 /gbdb/hg19/hg19.2bit chr18_gl000207_random 4262 /gbdb/hg19/hg19.2bit circlize/inst/extdata/Rlogo.png0000644000176200001440000021170114015721224016255 0ustar liggesusersPNG  IHDR bKGD IDATxy\U9*aǀB"#*:@$B,Hp2:(8 wHXle@ $k"E$ % Y+Z=s~ޯ{=]sAAAAAAAAA,Q͞ r  |qU Pc GV B""u SjP&系`=SNlA "&ϫ@!u| #At R1"GB#@![x {jQw0 $`Ra/]O)Gn5 @]aosjvN8ay7d2SA9 4̤I& (NT($0TbEj'q 8#P/M &X{C9R;zDjR#$ A쎹Sx 3" r0N%KISt"u"ٲ5Z/ۇxz\ C ?(Dx:=QR?8]т B=D@A4zdIϞ&+d&t:4* `li$|!T}~?d@O>@ӝAF)" %{c$+Hљ Ad'tr#-Wpja#$n'R!>%͌3^ B""¨#I=+Tt&Τgxp|hǥ3|Q Q#V@=7ozooo: Beٰa1xl@M«+PI'ja,[Ҽʂx0@xTꑐDhIDVFDsw?Wx-)l <PVZ\q&Q-W&3vxӰ;@= ~{y=o5MA!"B=zB\E\( x^ zy@/i򑀮Gah*+܊8D)<2CN 4A}}}dדR)<^I9 r%[g8~m3&xp黭O/A AvkT@*¹ ”#Q˖+әh KEףPJGP ̙zj pr\6ƾ.@Fވ^߲l-[LfL$-J o5kc֑ n=z7JfϮ]l:d˕Ι-+x{y ^DDş㘦T0fpM,5-W,iz -Wj[\rSPQΝGZ(%ˍs]xuSv~'۴!B$ .&BZENl-Wzg7˖-W ]G *sgZ " bWe SLS?Y.65Gšu=J}lJ|h^` j%oȬ7oS" d?]iy^_QˇGlevӻiI)fC<ō3C6@օe8;A&ƫ츹D`2YkM,udX]2D(K>؞.b͚[NKףgףLAG={9B{nIa1+[ER?Y.6zTJ^ףQN|h^`8( 6oެB7D@3֗ ȯr//;8G#2]$x3r!ˇqJ# n7oS ` x}[0@b}vAlЏp.)M!"v٬t= }v=j?wg+_9M >" H__)C6kJKףSO\]m-8a]R(TE>4/0whlC;{dУ t`+33 ш#TQ>< ]*]rw= " l܊Jv$ˇq=bW.D@t`Q<Ȝ >e>壉Q2ė|=[}t=s izz~2ᓏ p}׍A0o2)zT`6C>V(8a]R(TE>4/0whlC;|nݔ ַNZÈ<힧(|'A-# ]aA~Z#aa͒[Q.ģXx06{ ١6)͛sRYa "?0pjf*JE=G s6|G8dzh&G_l`-TQVQAˤq3WJ C}a4""5?Bc-:֮ygav=#pػȇ.zhg[ 2(y9g}JLF" P澭) `6j\-# ]aAG`fɭdOQ,n|zgȇe Ak:Sт0M<ˉ>ή7.zA<C?!GÇ|4Q|u=,K|'uUF SaN(F"zA<C?!GÇ|4QTf8|}3ɂvD@gSok -:֮yǵ|8I W>QN|h^`خvŠFGA lK.g"",o#`nMCC?Ƨ|Xf7aQ>|u=XYr+*Óx/aY5"w,{uZ͛߈0Ǥ.zA<C?"9aq-(K>؞>칅t= }v=j?w4N>f S첹ѝ eFHOף@Zfע$ z+l_]JG:-yGc, AW""BK!"7P<~LrŊw= =ʇk6KnE%|xbqW8@>|u=,K2[)-uBK/kAH" BjxC L^{AlЏH|y\v=Jg{n:-]B]]&t=A)̫}4U:.?[Qu Y]*ۂ"YC2G:-yGc(_AT\`A?=Vn-ZF>1z+.W׃5%]>3o޼=gF#"$\.wʎhwzTHVףGalg3竌QN|h^خv ޗýgGO8ȯN:ut&(D@ım۶1/\I:Je䃡G‡x4_>|u=XYr+*Óx/+zV0a#Ї^:Ղ!Ql2D;bģx9A>##(K>؞>칅t= }v=j?wp&GIQlU!… $ /D@D0+u2+]{\GYmAìgW{ףPм壱]lA/^M  "hoom{A@Dh ۶m;bOAG=ʇl2~6|aY>؞>칅t= }v=H(o|HM!~=osFApEDh(D\?Vr?F'5vzԭ_2u=ʪo N>ζr޹p%g[D@w#͇)1z+|qIӰfɭdOQ,n|S rϓC%CXCG:-yGcx_.#u#. ?»\$ACDB<_ˏx G‡x4Q>./`Óx/m\d_/]yٖ%xDD`<ʶ[^떫Qf 0Rf\|v%Ļ]6knڇ|hmKˇrMa tQ}Y"R=}[oTcDOn(u+W>`#zMkm}議٤Ƈ|Ļ]v×xXek \&x_.#⡑tFp\&l='D?PxcVC1'zo>qyάs#*,`pC>"}5Y]< V|E'|oE/Q>#";Oc2{.g]." 5\n`lUWe%ɑ/a0!Q2EYs zNfWaxC>(#Ll'MC?s޷p%_QJ9DV(2W2pU>`#zMkm}議-d%Vٚ/||X }h|FTC1  3vǨj5w2f@CM§|8.oyߙun$[ !NS>M !J;2ٖlGl~s~r͚5CNI¨CDfs} KjpZuŬ=Gdɇ~DrKiC#"E>S^ CZhtChD@G|.Y{ɒȇٗ0ۇxjgQ"vmnkꖖk?AffE>Xc$H#w>snPށ9!p#2p ۂ5}eN|G K<5_.Kr%u#.:RC>2䚁:ErܱAvuV'!@"CM§|8.oyߙun$[ !NS>M !J;2ٖlGlzc>h9f#"  ׻eZ&Y{ɒȇٗ0ۇxjIH|DZ/VentB"O|PGi bZ~ϝ$" \.7>Ȏ_R'Qᕸ!|[0u϶ Vlx1fBu×xXek ]&a11K$|ʇYFUY`>#4X0![Sx.KhmI1[v~fYWd(Yx9t!2 !"ӷZ0.bd= \Qf ɑ/a0!,V6D^Dȇᵟl3 "l~H^pAH" B n"Bí7 e`-:^g[_z+lgke *[2A/_Q7#5>U:7r ')FK<ܲy/m滬--?){+zَ/,P*wcRB}&u]CsUW:؃xL|G$G>̾>ģ04" ioZ/VentB"O|PGi6Ihؖ8@/j9E+BiUE>nĿQ0-}mɇ(š7ϏwlBu×xXek ]&a11KH|I-;*|\^ IDAT>ɿ}GB&ɇx0e.klOފ^p^lV0zA=EZx% еQSģ`C?"9a4!IH|DzZh k?Aff;=l6IH̖8 ~uvv,Bi1Lxi)`UFL!̷S'>ģdkv>"UX#kp٢E ~,B3ir\6Ȏ@\g3GU>̲e˕ S!$7b0!ma|0cf[ЧfUyrk,ZU @$L" EZoi[5oLD|[˙!%CX.b͚[!1_awXʇ ޗȇ/fص#|$xrQL_޾B#I1ޢ(cÇx7 Ḽ}g6Co~竉^S>xe}6I>Ń)`wY[d;|R-! oQ* rCa-] ?A vtSQ"M>僢*UsIU>"+գ N|T|JK> ׾~|0O*S4QsZ>] "]o_?QH$eUcKi/{\w:O,imH.%CXţFee4ƱQVȘwXʇ ޗ lo/fص#-*$|ʇ~&ʇ{O7_]C>4.0w`6XA]TKȇۧ|TdJB"\qk&_%?.D@RBOϖ!E#PDIx wdȇY+gB>In{+"3>!axC>#t)>mA2ʕd?% | GL>nĿQ0-}F/gÇx a͎_ۛǻ]6knڇ|Ĭjo`3fk ]&a11KH|I-;*|;_MJo-P#ׇ|h\`m qZB>>"u=-We_hE o?HBY'p v"MƒxL|0%C>̲e˕ S!$7b0)ƈGd|0cf[w˖યȡ?~ωWD@KGL>nĿQ0-}F/gÇx a͎_ۛǻ]6knڇ|Ĭjאٚ/||X }h|n];‡|0S d3!?LD@FookCwK돲Z<{)[wf;Tw(N>#|[vGиŃ)p# RI|8}GE6z>[h̼%K" " bsߖY jpC&t9p`|K|e˖+gB>In]axS)rG`Ͷ-WU_@a8w`%7^݅.;B+;A*;5CA ( ?K>"IkF~|ɇ >IJ.C>&PO|Ŀdl|TG=*%*6~/枖`t@ -ד{#F(?~q;<"!I2gk0X<4[o͖ p.Tȍybs ema|Q=ا|djd;H ڻ"u=[V/+si"w} GsR#V]1oK wdȇYl2~v*#&վ]< }{ >1Y(Lݲ<+H!}l҅9" M"d} jH| {˙!%C|۳5EYs >#fU㸆|AL,bEc×xԍp3>y=r5/vʋOxԩSyO "zzzNUn]{ E:8yK|G!x1ώw'|>CK|8d[҂Ἆ)٬kQ,?&%kzHzv{V}GD;]2,[b" ioRX໧S>|Gy/0VeeUypW%?e.Yϼ'i ߈P#QA>#yo7~9}Gţd/`{ƻ]6knڇ|BlR>,\Q7ݰ9ޖ3F'E>)u ŋ/~B" bs_TP5/ɇ/Џq\:ۣ}ȇ8Ė"dм->j p^l#VVOpeMBBl2.ˏݡb|ӗlۘ#WjuB>X$|ěS(7^>x΍{ ٖ'g~y++%jll*d_ f,Yrx'$B3}[7dˏxQ<Ȝ ټ =Χ|4QV(}ȇ8Ė"dмvem1eAģ[w'ȇ.x.lA"1 'F?`(Oqy,_t-<'!-%83vQ>^o S>,yW#WjuB>Hky6KnE%|xbq\7{^h!pgq )R  xqԞC+fCUR@  EG0Q$ǎ0$SVVK>1geUy?xgVH0-]v aTwڒGc}B okm4Q2ė|=[].5PC>|GYK3 `;jRW UW2x^io{޳/݅>h;F5#?<<|d>t,2c2 DcouR88FͱE^/u#Xt6z>eQ|g.{OaʎCtBq-_P;J-Q^ C_1ހޑ̦f!w(r Qq-ۇ|Ļ]vZ#&Ex !П"<g߿#M$Ą DR(<P'JM'‹h/bG%7I>Onl5Ջ^lϺyr҅7|t#-_")q^ 킣}+|2[PjP K|ԽC͒[Q.ģX.lh;Am@OA'2݄_ܼ~ģ_<“2a8 P'T(F5U̗|0geUy?cCReK~}6ȣ|Ȗ+e۞\lM!"v٬j&<V OvBT o={3OW׽cL@/UyL A*i!pAEb~ Q;O|_Sj Cc!b澁AW]-:֮yٛ~Ov=#pػPx !~E_B1 W{>.ۢztuuƟ,0(,I؞>칅j]a@RR?Q*Ӷ7wyCC83 ,954"&4H>)k?{?] [-k`6:1`so˪eU07{6i~`zgW{ףP'C 7<̝;w[wcE!qDSN $"R:GACD snknIvZW`= W\h F" z.Q E>d˕ }t=|Gţd/`{zQe2q[[AiB u eƾ! `([{?]c_ ve=lуH ="I/(P[& OT 5Ȟ dEoN<jt=jX&ȟdɒ?Cn`*O} dS Ń 0z %lV]Buy@OF}!;|"L~IH|_?%zԶaժy{'ڈԠa~U07{hQp g3竌Q x CCc6̟?uS 8_ $Ȗ+x_]lr?jֵ3z5<^mZ2ЏINףXAG`fɭd= F6fTQ 4"Rq0? \Ez^MjDGm~/wvvsjQD@JxG]hZ Ń 0z %lV]A݀93fL~h\ZLf^T0 m^kG9=QC~ke6DLG h]D@ &0Se^?QVEkp g3̽Fk@~p\F]]]B*`.cejˇKvERtW,]Xk"R &5-# ]t=M|͒[Qi/޵07a˕-[}+\]\l߷ m=D@tw"jR Ń G_l0%*E?F͚3)tua84 *TrUC~V8 Ž[Q/ zf;2]zU=ZdE>$!fn[ʇ|w=h3wΝ{O-¨[|QT]F#Y+S'[jB+W*ӳ^Go`z$Q!%͗_]l܊O!RDmLc̙YV[oE| ɈlaZG޼rQ+Glc0Eg|:؃x2g3ȇ~DrCC|۳G#>Q7X;⋟> &rq\Xʖz:Ǿ4L> %/9iԩSN~F]8?nlu+WL]/\ȇ$DT8ˇi8_ $UnSZF~'ø͒[QY{sgM> '֭%Z EWxuG`lVw\qW&nFtwwܸu(׏H|aY>؞>|ۈٳ/"P4򕯹 $Z~旺G) yuъM(*ټo:u7"~Du+WL]/\u= f,z|% Px@_8~SNk+d֭[wt6{%!h.B5ǮG#vҥON+͌}E8ޘ4ʇ~Lr a\|`fɭ$ZʫΙ3֑  0B:R<S"JDwtt`^Fr#Uf܏:ޘu(׏H|aY>؞]PBkUrAF]]]0#5]([=\(>Lt勗Q! {z.]{\jkGlg3 +Ap89FUZ]]g X`SG\u=,n޵|٢ϙͽ3ů'1z+|qIs׃5%/ٳk}{{{.F0f 88|z)o|G!::ohlix) `L屆w=&K>-oqfg`x|;͜9i :;;Wճ\ C륔w=?tȏ}OI|ͪŋ[ⶬ2A@XQvy싰 B4WPPp ?Q1' lGK-) { w>GdGC-0!QҾ1·{֬i? P p-c}u=?tȏ}OI|vTԂE5@:h9QDϭ(u+W>#)";-]!ɑ . $uԸ»Lra%ٌ1uE>Bj IDAT+W.~l"ɧS3S/tɓ_]t=e 4Q>|t=*eǻH%;|i@ϟj 7|LfUP^b [ d~<~|VV-# Dtl@e% zĖx8W3߇|$A>K_;w>i ltuuR \H\ҿY!WX>Y%=߀&ȇl2SEvZ%CZluݾ=} 7x㘉G DQ@o-"[ ǡGÐV\r^Hi 3pALʇ~Lr 2t(>ز]%'|}ԩVA֬ 8xGףNsv;!v Wjzr/RpJAdٌ򑺮qfhjC=L?Gwtvv֧Aƭz dKɖC,QMc[4w"v=Vʖ+ziz i-WaEϚu]J)[b BX PRrŔmMQK>\R- {Wu$P>dU re2fl"AF˖\K[v-m֬YOZJAhYn[OP_>eizf+`׮YӾ[o"!U[yd,bRAGZ\>il}:׳gMAjt=/y.>`l?l]("SRuwB#d˕ sţX]fН0|dzT"|mVAF%r8ᷙtt=jX^oR 5=Rh٣Q - չ'd?3uVAF=ҵ, (Ly$K<y#ioo R+eC׽GŶƃv ة|1->K_MZ4OG jNO| .,]ھ6RZw:ox'_>j*VEL޷o!"\SJ{Q.75G!]xYSAͷܾPݐ}O>j )?\ٱ[$^@6xzu!]zB>j4,XKR}{w}V o*e,:x]&zMGG %BDjso[`s}m2SEvZ%CX5*? ׉?ֶ `[n_ R78p8KE/y$Z@r=}WZrUB\QqӖGPW͝5mU  8r-w 7e˕é VJ|%5ƍ?:O'UsIU>"+գ N|T|JcJ]A,]`o @] sUufKJj~ lHĮw@6wD@I/[ύ$̳cK EfQ25Yj fC@qcǒW7Dt@6o]z7,}t=b-( "fϮӰpyRjAq뭷hx8.>-W) ]j hz(RZ"fVv[;5ˎJZFrFgWej "ƎQAFK,]GOWz,Q_.Q||h$r}ཕǯ?YnӺff8xk̋j+ -u>}ekZ-WLEnnQv]jŲ;TLFq^>d˕,B>nFZ:{_[ B͵w(WU0:\;đǾ}P?n @|m:ɖ+r%[{|ȇ  fŲE7* ОgUl”={OC: {zR$(]ʖtt=*1w=_xg=1'/ gdU_ܱn7`RoAH?0QCheV6Odu [F>d˕,B>nzBZ0{? )|g7C0p  Jmh;@=7vyE?^-!8xGyHjg)\B*K؞>TtO3g>g-8s5I@F|h9 C"[H@D>8?y #!УA< >,bڵkO)ȇAQv̽|^'p!"[{@?d;YnӺff8 (u[>ZE l G>at?T%F>N P @@c,}t=4rUV|4\@r}p{̓i]ralf]Բ3e+c/ "uF"u*|Ll Cݿǹ tM'Tu۸<9W^y'gCC+sI'\A쀣xԭdRCA0*)M!zß*`LyIvh"*I$ya[|T4,Ll!q\Gڬ] xc1CˇAQsʥWUPݷ-e2\NYt=*v=(++g̘U sI|"|ԧuQgpoԽ'?F寝[n|>hG0dp&Պ~kVF~HWWWL|s#Gl2JG-~ԿXctJaF"\>E{N=o5:^ܑ'8G57_) uZl?_C: +hm[el]2초GvП^ \6c~|>D>"@kˇ6Rw Mx>\IƱ*b/; }ɇuAU=ffOC: ]]] iĮeL) z-*|ȇ H|\l_Q#σM䣕34 I\!IK Do3g)WoΤa/\rL( ńqCE>P 4Ks!ONdП^vϖ}A"QgiBNZV>*9 (78cO `x_WcĨak_[{~(PPjx _Qy?'q.1w=JK>g]P6CokU@D>9 6ZI>H\D>P_|3޶~[xag.iq,(hLAGÀw!duA [8e)/vKE=L7{,Aa^]דsjdxh‹/_:|:ˆtйGD54LP 5 ]o)k޾͘/VX@AxM> j6(._t]@az,,.7r|h44Y>g]eg~immmm[ $I7ȯ@6I ?)JN&}aO^sOj+KAGǢ_Cт`TP}p=]f(.3ˮ]|uTjgK+u?D>8Ov?Z@> ̅G_1YqqM]FDBōy_]衾%G͆/_/fg6o$P7-kFw"j>`]VC>d@eD>F$f$."IuÍͥ{aR蟼z}5d|@c#K>J3'dvfs ȦMpI0kFۉxȇT,3ˮٲfMU`b/|E>"@kGB!UQ߃=׬r{6jV>Xb-u6#aIpC?V0 Z,љv8`( o*h(mڷ#QgiCg6zӮZnc˓.Shjۥ-3WTE@6NR~a[j`|  {BQΞPmmSuDH9"uF0's(VrNG 5}k_ib:ux~5H'oQ]SfǞiU~OWWWƼZ/]r;0JlY3R;5ciVG:6b:HQQ{򿘼z^~Gs7kִT0]5,Pу-ɻwgܹmVčz-LbszhdU PsgMbu !$iE4HF#ߣVE c\;|03߼~@ȗ0hˇ$z]ܪQט. _z|^E+L>f?Z{J]xZHzXGQㅢr®PMju!մOD>tiG$'&_}3vX=bA_t="UazōX_}yb<BD ;`|X[d]Ki Si|M9kuTj޴P;C͝yVRMm'sHO+ɇɛ(Tg\}g^ ʊ%׃]>*v%˯e81=`bΎδ.1w=;rUR3μ'VRMG:\#|{dHd_Ww90<cqcpq=.n|қnhX$+LZ,Zea6S-züt=#m5ڇ0+щGH\!n4e.ShoB-$v$w."Iei2"l:cFg?ȕW.Q)a8[>ɟGGմ+ԚM^}OgdZJ]5E}ˇQ\6A,jSC`V=kDߗ|D|CXQ8{OXRH=}t܇G:(ZI>H\\? dOϺG5pRZ (lYSD-TO\f8TwUo9nA~%l- sxWrRU#3+d]|"~xhX=4U!K^#=\ޞyXM[t'"kC zU6 V\+$zo0<{K)I@?3FSzw]pȎ-zha^ azěF :w}VmD>LiW$w."I%II}ƚsg/PtGU$ק|0K;DKk,ї\=I0efلؔf[G%r l7mڟN-$I>FdG\#k ^>=N\P+5d:?FQHp{uuu]% \ @7wօEEPH@n $z~LtWuS}y^sTwyszDtݼo$=BaIL#^h#o`>x׻z'WeBˇyɸҮ"~ 0Rp]ݢB>3)ma-Kգ4\hY 0]T`$#I\y>'ju)ѱ֭sHk!!3#q IDAT֑y v3/Jh!Zb*&𦜅UT !/|V3QZğ GLϧNF|Q>:8[>u֢BЙW%YTc|Q&͛%^Kg[UeQh&ߘ\iɷ~X 0FTsjPobs-kbeq3Q\&|ǜ+*=K 9gfӯz8ȇinbz>zPaţ44b? hҋ bb%|]|T?Mk^5Vmd&ROKyPUe/s/v o.oRA4$S{i7RTg̱n$ݛȇzf{o^hVi06,ԩ91U?z"N=rע˱N=/៲[CW=BG,l$r7 !^۾+}8No=W=h&ߘ\iލ/^pU ˇ|$vě GO> <Ӷsΰ3> ?xZ>cNƕv58K.x]"f0C^C3)mFkP ^a0r7\d h|j_t|xI CID8ʻz{k\~MҲ=0U2=JE f@&;3jX7*M xx&ÜL[0G11·#}ĹG.oXpڲw| anhK dӦ@6]Kqz/}US򡝁fxxWQ45񖡡V06QZğ GLQ7uZzG8?%$Vhu) Үg3$dH@y"sdR2UB>3)mfJ>T=M46Ad ?Ja ?#u, {u7˥,~f —:Ɨfé_i[>K U(m /M  *ɍ iLcˤ|ՉM^c{& ~ɉ*%ц壘r 'b'aTK9|D!I? @yr%֥d|lݺu¢$Hs]qZj՗>\ezW4nוata(FK,>a(#G1QIz5<ݔe˖%!Үgɻ)Lh H&`?eʣ5#S, cz?}SkPvz,/Ҥ$}˒%K0:|R'#\X>be@8(hQ Apmb||Q}9ˇ4BP! 0=7s͆x*dC,yWwщĉEh ׿CA]rq4Z/vY(Pvz,{wʋ&fX>|K,!|Lr@5ǜy먦]z-cgi%&dO Brbw3z |ՉM^c;Gyí2Sx 0ZD1#h.,1F@>:ɇ^9ޏ  |YC:"]{u!EYi8S)j|5oKF7g'C1L)?Ay9G5|W1ɇ?JG.l\8Yr\@Jy-[4F8cUS,czXA %UcO¸b?fa|S.yn)- . $c0*fh퍚k!CFiJ 㰋͠ꁀaV'6z,e7_,Zt1L),ԩ91U?j#}2aٲec׺Ʀ| V"kdqXJxȇQsU\r5vy!<|ཱྀ|:$(aSOÎxsaɇ<"[vR J?e#:KuhǞ={ޯiX* DZEVECaPUOŷElj_=|b& /Xi #%&!վ<&*" Ny_,_nPUi̜bVIbN;lݺuIKa[A$NljKCmnRSl\U gv>`(&\|&|jW `@دi4M^ `oDRj@>7%WZ "v40J?^nʞra5}Gzֲ!_﬍~.ۯ]N%:U f^ԧFgW/JgT<~kءV\CZiWF>}dhuۭ3ռdnQcDtѹ$Mj  7qQѾPUi3L| OX>)W>I~޶?xWfq9ݝBɇtEF|T@FGGRj@>4%=zLnDw~0UnQˇOX>ʈ1-cb4k//H_⭏AYr\nZ$ òR9C_`D4Z/v|hMZ4⫇ %bz naD5CNÎxsaxHE?rtD!քzH{fisFxHɒ6TqOqw1%fh5 R ?-eSP׏i# A|TsEo_ixJʣmyn{p|H_$}`|0#B+㰬h|57hJ>3Ћ;$o{To'-\xp v>`(&\f?tDAfO%:U f!(M,d#ʎaQf;TX>4^|kP&VÅĎ}z8,>`ХN|tC松wz5`^ `|bZ?| a! [n@ᓯSܩݳ|LɤY&Z͂T=OwٿԦ&5bɭ.X7VC2La |TI>܈/8k1GT 4fϪ ˖-[\C:"6v?˩xȇQsơC?عCGU'Ym=,j^t; -UL*JAQSIF|pC3%KazLn|yn(-̈́W6| ~R e HY/WF@WT<̧ (&aubS;^jpQ1T_ S)rT` ˇ,EPo>cXbtn{ q=q]=V=zh|57hJ>3Ћ;$o{TЉ-}|O[0=QOÎxsaɇɥ@>`X,jUgd˖-s|0zɇAPUcxCZiWJ>4s~Y3.NazH|TW1U%Q;^I @-"fsW,سXb }Ih֧_4:::h"9|,˩xw 4%=z-5.Na$cIi8ͧNF||č17O}#Daa-9͆g<3_% tO:@U `X>4^|kP&VÅӜ|+ TjPoE1ɇ?E2ݱ7e; |,R(E3Ŧ}K!ͧ (&aubS;^jpQ18*!uw G11gG2:kW~vogx8]z ( H7[N@>4%=zX&\x_te^Q7S',eQ`(X>&^;"R$ wdEKccdd׿~0\sX0Z>IF|p>g@\`!NaG|āq}9ˇ4B ~z4là htcil@?{2"/zɇAPUcxCZiWJ>sn&[x_l7,>`ХN$qZ#wx TFѪg؋z]חg@/7(MB;ʇIXԎ54ܤ~T e2###S8;1}|TI>܈/8kGO b鼿n?8myG4@wҾ߬a F  b[U=cgSl\faR͋Y>|@wI>Qʬ}# !L{|B. D$t* m&L%W^q&A^:$NQ7X>|Q <7,zSAv[v42d7lJߠꁀaV'6z(`k/jpQ1yNa&Ք9u~o.,S=}ၘ,EǼm>HjSARW_>J2% b|kgWxm0YqC?عGUؒ3gM֡&Օ|&վO>O.Acgš9S`gxz8F)i⹲fyC|N;|gb[8n+pǭ3gp!" Kb?|ǫKokG#VAv4Q'| S"90 1 fA2ɇ9, nnJ@NC0Gv>`ХN|Ac9sЃ[]ۊ6Bc{W=2=P#Ҫ.XYfU0Y>3Ћ;~oV=VP#߽dɂۭaӇ1ˇG4S'p#\X>⦇sǞN0 It> UIS 8"3`sQzNk;|gb[8n52DiQ -<&_taDz!9fiU˙v@<7P'AUz˨'攛 (jN1Lω8\ G11ʇddd$%{z6RJWU\̵k@0Y>3Ћ;~oV=VP gC2LωXK,>a(#GK[N^ p=T=}zK4xhtPic bBbKM>F/Y0='bu;ͅ#V&$"g $ >HJT=<ȇL[ڕ| ~f6HJUry=p!Z[kfiKoV$;^_uU k.spccf 3>ˇ~zs-vy! ݪ,gbhh3LOˇG4,)w>,!`? =Ċx:5%V@`Ic$CzNk;|g[b[8n53LOØC#Dި+$qM=xXF_Y^գtgakP{5k Nn$)lCYzai8ˇ~H&4'DQP'p#\x&Q<)"%#~`a>#6zt637 C$˓0λ򡟁^{]^1>p2yhoT'DGMwI>v.WM2.PʇfE)h5:&T=:x bzx1Ä%=1ˇOX>#$]ׯ =DzߊW()oխ&n}cT@䣼Y1seBY>$|)/bb&?9u[zeN|JL"b6X7vtMUPM3sbo$|VVQ)pg)w'\eU۬fzQ[V7E,޾@|H(!nB%]⡔3CZw2@/^!$=B@6:ɇ6&*$KzT$T#ó|A9A W$|xIPuգ$i|6jPobE!˅ A\wM׀@`Uj7J> b!TE>3gmC2L8|]|S.|X>Bb} q|(涊v ܼ*M̝jL<Պع`**.,6d;]$m2tN|壈 F*Ȳe˞z20֒ø.BМɟ'd9}l몇WN<+ǖ8|hlVumh7ſ3u;ͅ#V&$"|!H0 T;BuHB Ta-gKգ4CrnCћ@LE1ɇW!Dx|#FH@O?U=cs@S_8q,j^xfAC?^F;xLu."m2 IiXҕw@h. f8&Ptc=Ì(9:̴{Tȴ)>GGPE$BGemv,Yr=C1L`?R_4gr8^Pb$]qh( Up%Q U%[ĠgYv=#pUV#!DL}|T9 -_G|`_n3T:7ط݃CG/L>`:{3 IDATF`$uhUJ[5bR|+*].C2L}qqd>7Q͟|6x̙g6S!h n GHsi?} (~\.S "%WZyɕ2. è~bv:RO/ zs棛I,-X>BM>&~Np8 H&5zm#Yriy͹D\Ίa!94?aNݖ^o.Q͟ ].Zpvs\Cѷ7RLoxr|L Tk2Z?J @I5V [\KŦܝc3KH 3)M|Ts*eoxkC{Wqɇ;Ctx1U3ǼQx7:Ds:Ӛ&mb BcKM>F6_~٦0ՇC#DĔ c},Ƽf\eN8+uIP$OͿ&bC-I~)CU=C,{z|HW#|8V=:bdd |HzH5;;m,h|7?|ȈH>&B"<=lioF|- gBl+VQ)/VB9UT$X '~L3b Go+wV{מ] MBY>B*U= è~l"@|DT@vsUT !VPNPBPu ST ˖owEb(bPz^r5t2n,g2mC#몇WN<+ǖ8|hl6ВL4aaߧɇ ¶K>F)xq!1I%.ppw-Jʒxz򇖀1\8h-鮗Gi8ˇ~=G%Wkp S=|Ts//Yp_Bxߐ$uU|8۲>>;2q>!\u#)lٞ5[W䭢R^16.rIB&$T IiXS.L?_ZG5|@!V@,l^*ɟ[ӎ Q,vN<+ǖ8|hlL}}{ڄe!" oX>it}C`yy˘#.~G>NeLmGKd+  %^,CpU'%a5<_Bj=Ii3ďF\ B(г|M&+ 6ѧ%W$' Bii|(b;W= zBcK=~ECV=cg:#jVI>7/ W@j}k֘^xraIV@ƨ9\r9I X%:(3z3lZ>**jrzsU05D;P3E䃩"O{Wqɇ;>GPsh̞=GԂ- f:IBOnm-jov(WJݹh`Eb{+$_rEa ˇG4,)&fd7,Uq͉ק@B '/kSrι^Kf2Uh݆W&8|(b;W= zz]6#D\v1a&^X>$=BፚeYlͰjp;=\ej=#D!&]n:ɇ_ڹ+ ?я + S ^0a(_bT"=z(z^b]l~E#%W9PZ>daPac"&nܳn/|ǫprcҰKZߣ=+ T0{O!# <[ˇb"\(Y9mU-q:1}僙m%A!ԵE4:<|0y^NXlͰjp};\:-L-SC^UOP|)$dӜZlM@GI3WE'^CKEŻ|_Q'|U1L$H~j$věKT'2ܻ ?ޏ6.p'Eyd%|C;d4KZiW,䜪|U|ÄczGxxVuU|O/DBsվӖ|&ۄ$ =йS@%W𒫂ת'#3,!`( An[#j {@ɍ/ fk:q;ZsMRE>ԛ nUς0ٱbK64 0C#DpKiWZ\ՏjB"E/*9kV0{v5ĦI4$Az]գ|VPJ>䪠CGlA, L`}jxL.k=w*B/ te6ufa^Cr|NxzMMjGP$5aS8]<$$0a;^9"ʖC0Uul?GH'@ v}QP1;ĕl>CvnF#s"T= 6z8%WZh_ u~|xI!' gY>|!Rz:dgbV0{Z4ĦդҴ)+{!V%9BɇSu\IQ@ 0NaGmzo S X>0n つ]Y Gc"EhȧKA?oL: Eom/jpQ1y|q~U=Xj^Wh2,tGld b{N\qD !\e: ͰT= 6z8 @ݗ\1c=tx&N b!1If{.ݮdxC" HZ F|„9{yϰ|H#۞H•\YϿ\lٮ|,^܉ $C7sK2).j% qTeHdԹn۸%*3晦0壘ra+&ʹ_9kS`ā@,BE 1}Az4&L3L}aЅL_h@_v%G]_y؅8 5^Qvu AIYHD*!@oKCڐa ˇ^zādFuE )Z=W=:v=?.ݵk9w/)%Kxɕ|e&&ɇH*3 Ʉi]7WEa `fYrչ;%xddxOQ ҥ扨M^:zJ\r$!\e䣤qFq|^}IHa$t'|@Li$_b?0x 5KGn.XZډTfɕZ>C_/RGǣFXݰ S/||$')p^x3,(y(d5k t"ȇ% I" HE:ɇSu\IQrV6)b Sb$7JW(3BwCg͠gC:wKs4ŝ.EwMWꡎP몇" 3W+,_RwG5Ý*ݸ/d$I-VGIZ{FU^r%W]IHw>,Ĕ !eR=OWL><|6&גw}{\ֽP@N? ?U&ɍ\v-P%W][ SAX>t\5G/sw:UvɊ?Ʒ!p*6fGR t I>BT=2)v|8UV=4c}~KIiaNL``b9Cub<:ɇ_z $QBܒ3Tڪj\@U:DαkX|ˇ2 J*aGlĠ!ҨfGҦxUx^G5n[Gȇat.҉$=M|WJ>J"悠v#& ᓘ&6+aFHۚyzt֝3 ]6Ry,7{Ao ,U'%WvpI S51GײՑD HN7%bbʅaʡ-xԿDqJ~-x:i~T^m+*DVJItkg.%WNyɕb|%0K]05 bq&#Gk˯AmAJ[޳{, O?];C}$nU|8 S((`sa򡑂qOtB0Lܰ|S'`Q"k$~{.?Nd];c ֿwV2<<'J-F \ITo+^_HT#6-}"Fy&UUACqlKtz);{- (^r mڴE:!f: ˇ4@N4| bzEk:=hY"#qzéJ>J"\CEŰ- ڍt2L|dIXITCƑyc!.=)6HzgaSr!|:D'IM>F6K4kЀ@ u3LD ?Ddzߣd6^dz9<T@?1QRQ۫P>xɕdelwr|׎a M/:I>Sa[qB !>pS>mJ.4*ŞIآT@@(Q}$nU|8UTBGI ;xV=壴D>&̘÷e*G11G@R~g', :N6 oOZꝱ&])6F nP&R!J{@ di4xSX>t+Vsi7[#Av [>B$% i2M]ZrQdFɐK$;,ckU )aΰ ?bH>s(D%~.=ٯ?߄I3R\yr"Yka(uĭ!J((`saê|6ЗoR&0nSoj>a`ywu:nXۡ]gxv^3#7l$\Q4D\!J{@ L %"Mޤ|0qwx[`F|oѠe%3+j,dmٱo^rU]>_|U&&ad. [b7jb;)XzjūsțvӼU=r%SouY5I[@W9B%WEܩEK2B:7$V $DeѴ ĵ X%W5h`Q(ɐɛ˓bjS'ƯM_DX5^{&ۥ㚖# [B?22xe̪aIza$i\g:yv9=/찌ma>)0 SU-ԩau,\iήƌ3!G&<+m1OVm֘ v3H@.]#6>/*ࡢbX! E,~F/ajQ}H>s{2ΥNR&f yZSciI0.`3, X K4kPR0I`|ÊzG_FsOfz+䓺Q74{מd­UgLҋh726S\`\G@%W-LO5_6t{2Lv}|12\$I`^saF(8$`|ѵH>DF>,im6Õ+LM ZyK^rKLCfaI|!DT/sVΞ&;ѩ~L8\p%8rjCGJ#7O3VŘ/ ^"`Ճ\ihWx(o`Q(1= ,׍0"Ou|9-xjA}%L q׶K: 1̟)I/IcQ%{/찌ma~)ڱlܸ0h #վ<&ɨ=}G. G; Fpg6B@pU'wyj) K,ynn%𒫢**U?ɢVCEXabNS>x V0ٴ׼湒^~=$I`Y~fIԒ+V=c[40v¼ؤ; V~Wk$nĔn|i-D* u?  Ld)!2gqVaZX wpW6PDS#T8vU.Z M+TOηۭ&yϦÓ ׀8|Gnky,D)]9-Uɱ1H pH|AU#1dգxp] 67 ݡ;*TG>(>⽷<6z'b<}uK IDAT1.4'tLj@M<@;X>Q\g|S9qi}I[WzÀ䃗\7+)g8Uwd1}|X#pq#MJK/͜8" qGL+L_x~X>|bD?w.E 6Bs~޳%Wjղ'Bvkdd$:`"ɇq΅zʏ$tGհFL޺aÆCtFg~PY>}ၶ|G^K>a/ 8ϴ'ÄM,!`W#| ޒQ{7`y I^䣠|%vE~V \l>|D0vPQ1zhGiA0$$͍I״7ÄP#p#\$qQ'KsqwWl2$ Ä zn7&I|vK֬Y3{$'/U\ς:6x+&?BU=4]>_|R<,C+nA|!8gL1Ov>a~|ȱ牱WDݘVI^䣠|&M%VHvK,'KcܡERA(nnԹ[|hӦMsL2X>|!'G,qa ן[|Jb8Ebꂅ&М9j( dH/н;TOݳIoaGL,ՠ~xrK> Kgܳ)gݺu?$'/U\ςFXWz#SBU=4TQͧa)Z t BJ}LGa}yLU%Q;^'n|H@|uo|9! zj|)9{zI4͵VC** / OGIjY" xp AX;p*ӑƖ:GGX>G&OъCݱ!5uB7d@\}gjX~+ BR|_aSl;ò"vC/=P9kGg7(mrl)Z t BJI0&D5߰"{\3E1ɇ?p. V>LK -`f((P!sj '$r Yp8^(휵,@F+(N1X~/6̀a6,>p$\_|=n߫䪓4yVk]@ mg@X)aYjhJcQ FL,>F["X>s't/#/9uTLݶϞ-6XQBYz?!`$PხfqlՍީ]04 .Fcvwl4t_zMOGL,`@8(hO.,h>eW> _v/4 JVLn-Ӳ1ՖĹoIAqUjEhOl[n0n ˇ4JOa_ԧ.9@oiUO=ֻZ5)vweCEl˃* %/}ߞaaqrGX>sS_^08|YS[GR\uC)@ yVO|Ƕ,hԮzE1;HsVv"?]qa6ƎS#1G\U`d@><5gU$ L4z䣠Tn'Adh pf{ilje`4x6Zi7G3۱0 ѿFfj{Q#p#\&Q<)%~.bk>5<$G[䪃tݪU+?A'6jʇS ˪VCؖU*R>d1 ^5#0>0nSob|=:n7KC됁g(dLq.lR=df\>gEGqlNIXt14gߊvG )aͺu[g5e?ø ˇ4j#$,rCh=>ݞ\pڗ=s(UVמs8$̟?\Up½4Q\sֲA0<|(}^{lGd51}|HzL1U?X>`PK@X풡 *^eu  vn1H K$?,>p$\_|壧qeCz={((s[КLh=Nz* k׎p9 O52AF>,-_zkT,>F["X>&p7YRυ^xΖU=ˇ<._[w2<<$(i ,hԮzE1;HsP;]RW~q0Eq| | .YU%`%2MuxGz. ơEl!]Ӎ| AJ8aJ9ʇ~Ӧ:B3z^ze{X>}zGx|a _0 $#U]>:6?}~h ,hԮzE1;HsP;xQ1oQԩ#.~|d2^ S}qP8܋-DԈ6٢27Uf~[R#p#\&Q<)%~.=qx-&u-­AJz`}f~z8OU@.='cM|('U-T̎e$f\Q;^$`{.un/^~ْG.ZrU!PYevYV@lG,C+AzvP;JZ3+5Xv]a|HzLfynX>B!'L>\6ԗ###BDII>$o_}zH]@.|v@ql. ?15bMuYMD_x IOix G,qӃWߙW1?8{Ճ!ߕ122Z푾 / f~)-M-|w@>0+t t0ְ|Tɇ%.p/:7旍SݡPzy|V\qОB@V8~LqCtv$,vAQך]yE nttt O'!;^_|ݐ=7, O5M(N*MZ J/EBʇ+-6@?!1S>"3 u~|CF\LcG^>twXx+URGylgu F@X@^6S>˖UרNԋ-mfE[KB|8 M;P&TBθ 1;P#p#\$qQ'Ks|ɒC PFC\/qM)"*9E?'!B&a({Ҝ'Ҹִ+]vգ8/^Z_1zG=.:I>=:$!eC_ 5_SJ添7%eݸDtYg՗kbTD% 0t_faI@[>J<Bʇ+ab2L1,>p$\_|~/3ϿEݪ׮ZS Ht244I^%rx.Չҝzͬh I(giʄ*y q 1:da7߲|7m. \)ٹM> H֩&:7.9q -&a({Ҝ'Ҹִ+]ᅒ%WqM6 ð|T߻('$Zē ˇ2`vm܄8nMI4.Yg-fN`h'gx2W0y:Z ?15b;W($R,֒+###0U"&*wX>he\Mg־D|V xXľ'z@SNY}X<ɇsECDNfV$ȇдeB؃D oυn@ ʇA ~k6,.H>܈/8涱GO zɇ_K`x8%ql ܔի׾@V xOh;ѮKX;!Ŀ/E oC:QS/mA/ BwUal^}7ԝzG=x|#$v_{|;(|WMD"P UV=WD/ gSB6ԚvW&ʇf7ǪGaw }45D|x!4w>wU׽(L}aFܰ|C|ķzŋ5;?Czr*sθ%L/ Ix'1i#-0.%5c;ʇ'pɕLL`1U?HE<|MWq>;vكk؁[V!=[ xOhExhL:6L?ҥ~% UDDBGaZK ['KTIn>Gfˇ4%W ܔ嫮Z IAHX>BQ ܞ-Hot_}u . HF~1t%^{:yu.AdѢErMW@&D#%]!'T(\W$ɍW^~aB,!`W#Avac{& Q Pcζ O*% 7.6RqAGih/IQ> U$P%kW]WyL$957%mLu?0Ak1Vp@oAI{A"MN{K~Q9+-~Cx(A,vn'Ò+%$k(z*&*$WI$m"=&9+^'w=g=]J Ǜ]vfXT=&UeTי\l{-\؋ |Ed*ˇ4)W>,!aDz|,ls/j[ ɜiѽj{fЇl@%|hnG/ߪI)/IqPGWo\#)moIOix#-G,q B|#n{ͶK,\p^I"pPyV=ZCo?3r o*+ ƓN-۴T=ap~Uw(ctFq -a{уU8ٟ$B*dB2pj)O<񛏹J ,]APE5lCe7wYx(LVWÓ|dBypɕóA˯jYGfK'YjLJ2k 5_Cqy/\!V[z(Dyэ Q-@DU (w.D5\MMգAπ:-bALqU?X>2Ckۺ{ʛի?{@*|(F%B<\Z=7 GIWǪGa: 2 Clo 4?D\yգ 0%wFF|1M>xRK>\#hݍ~ _J!+H>[ ɜ}B|v^2LlF@PJo$wDai0gOeL(U &tv_޸qޞbzFwI>\t]cق$m/,ry=?M&s[zh /M+b6^aN..zfcv\uE CXo-,>Ө~$ar`GD4.Yzgb%GI'e420v|u'}9LVaXsQޫ^rf=_a% IDATN@'?{yUY&^r 0OA_ ?8Lo_ixQ;^%Lsxg%kff͚}F[^.bUpSKYl:iKyU&rhT!h?t˕W~q|Tfo ć㙣;m_ܲO|⊹v&!p|(\vR@`xh~ -3%WűC]KA}?(:U?X>B!#G&iB6v钏WQ< 1IvG5SxG'lp?BL>.}E(zx*L]S_h.:s{o ALK?aj#$[ =pU=~7YaB>vވB)%M!W|.CWV@&(n4ZrU5o^uu'¸7 G11ɇ?X>B@B ) .zˆ|\p{+\r|Ӡ]w~)npta!B, 7;+%o{[t+z-7T@X>$ ~` Go po}??Yg͚5;892E&B\OX&L DI]wau ܓB\AV\QYA grLcf2Uu|[՟||zs' 껵xXTSzYw_=EDxL; 0iҤ7LvB Վz+2G>bUX!7ܴ~Ew_HEr՟'v(6׋|ue-N`5Bٙre NB#5fNzP Ai6?V< l cӓΟz)͓pK'R%ݚޔ8',8QJu% u wm)W59*J3Bai1Lu| G4aaxCUow +6,=^ G_,tb+)_/}.`g'~_ 7߂Sܲ9pl,9a‰P>ܡ|x$(#P>kznғZ6,=Q]~~t/ ](@o[-NAϛ(edX ػriJS"m)W35NI270F2Bp&L=68^KƮxYU#"wĹ빫O$K/4P˧\ru̹瞻#J)YnVz'q0d\ˬGhnt=\aO.l9M5W"~|`EY7(I?>0ag{:reW3)>ySn]w8b9/SzC{IhU XqVSSf "W@(|Af" (~+Ze-paԨ=/[lr$O'^@`͚)p )Wٜr֔ZBsSi1T@|b|6Q>NJFZ6x " *Ο폼q%\{ص Qr7oW@a՚.p¬L2)WSrU?uQ]"# o( &0]D}lR.׉[[hK~Ha32gum7Wa7uw^/?S- BOJX>t ˺,=_M?S"g ^{kF#(  fmw~mm'e]yHwHQ>B~jQ; <{8SLdO+#SjnMM̈́WGP>YpG*CI'U/_Oݢf޸%r dk׮UxߚS<05,[sf̘rb+v$طI>Ny-!,n|m)[ +,\p7`ȵzr\r[orr[[G-S$P>B{1Ge 6Au̙S13h}bN@($dž'lN/=z֥"JsUex1s6"P@I@(nP>OK/EW LQ77;*YwDA)WYzّ]/ ;ɏKы ʇG#P> Dxᷠ-_W?K N#;o+v(V=pUG\|eڴ.& 6`ӎm0qx@&@&'WAw /uN|23fdoUG#,8ac VZ;"+\yW)W.?FTG.2D%I@(q@pQ5dX *?Kr mXz=U  O2: us SOP@|rmNrΊxّS]܇EpFSS#,^@(P><La QVA#I!+]~ _>q-plF\AU '[C U~KE]S)W^FwT@ܱ3TPZ Ќ8{]>g4+}>iWC5FPtˇP>HTUVg |5dBdN SoV*K O|7(ULEU`]=M_LO\u b ξ*l\HDDy ._aqȇfP>msqGDSJG/^I>l#a{j|TM3D 8{/'|yM{qeWLھ]EwC}Hb|(d.#D(!@T{m]VCGѲ6GCS\U@P絴LE2LmS<].>6P87/= ^5(]SoI)|'HE0l Y EZrU)W?Eͬ5ۊgႲIBʇv 壬d? .fƍ>ݷfL>*͛0qNHcccѿ"*M]>"qKΚ|=2+\ĈqGeI'J^sW]w G|x WACUhxj{Jg+>q`!;?L|%?Y]C!s)`*֬)TW42Z&@ahicٵ?$:]pdr>N:|TI1b<`㒒|)1wU'?gK.zBDlŞ*FT^ ] Ι?쟇$P@ jmz6@hn u=1]~i|Gc8-w|c|GP>*>,~VGT[[[a=g?[1p?G!_?0 aTU׬(h,a09C򑉮k8- 'L >T 3TP$~GPT% .Uwr٦Zbr6(fac7PUi_uۏDt\ձ||x1jɰp*}l/,=y…W|XU.pYzmXЩЖϹ)l,$Fn^y˅NlGltZ< qG]*EV<ȅyto$;)vߚ+"OWK> # k8Im8\ϊ|x? 2e޼w%ʕUr\fk ;!X>.yǯkkksA\Bʇv 壬 G/#wa~o`ξl|z;9u޼&$ʕk@-gԹ||TI1b<`b|AWyDQΟKbʔSdo{/ ~W> =)F*oM> ,:lXqW.ʇP>QVA}y7(8i%?Y?J|$ ; jڏ:wwI@z1G3y섻]7xKo9sNd0ɓ|"(qBrлwoB!eSp_}1l< $ {*gD>8W˺U6K'UҶoV7%  G4a*ȡ|nqʻ73%8 ~1\~P@Rb͚5{tdG0>ī\c(b ;%!G:L}80WDSJ]O^3a -qQ 7"(H>#c~${[>avVE#YÇ xsr50*򑍮1D䲉ݒ敳 #ЂL530_S GR>|r設8~j{L 7o~u^V/ ( )hѢA#G"-87?0pUEţ|3p;Ki|_9#@͌2ŮK29Q(eԑ|1[C2 p rys/OBU[7o)W}}d2?Sdo`yPZܜؔBȪ2̻N.^ɔ P>z9v›8lw|y^vb^DDNt#=UԷ|ٖH]5VK>܇UJNom-aP>\SLWw[a(7j~-vGxv}q$^|gp9ʇ];Lr G^ESöO<ǀ㒏aBf虽Bţ'A_A-enܷvɑ+^$|•'88 ]=-㒧 WX(ݱfv~gqT~PHN>߈8m*NJѳ?;:9;HjL6Rgçr)\ʅ|CzȮz\>lVI1">dȈ˗_ي7_cg!ֲ.0 ݗMaroP TCϔo8a/XL{{`Ն+!} r՛y@WQeHYz[EZWvnmm^{Jv@xy+\oQ}|DZYn$_^]\J.Xa 466vL:y )+SoZʇ6Ѐl)}I"> 7,溅KV |āW_}/xڔ (t86+FMS>; W?@V*0dn\h("@摳fûi>3P98X,^2o2ku@(qc}!SkP>*|IŤ}_{v АD '"G0uiQOxDrU| h=jRزeyٲqŊ4P>H] RԦ7Z씏%pƑ(;ثëΡ|d H6m:Qr8G#.G)WZhKs˖]eˮ?oٲv.Q26$Ifx65㒧+^+S>E]}]*oi_.LlS2MkM B!\ha$;ap_lF>|w& D]%{ r6+O" fHR>W}Q#3'P>*S@씏^_>% op^m/.dSOkdoنSc⒏a!PR]>7e(EQ\)/=#q>()W-8V܇^x+^Ł"RܮS8 @f|P> |- jTv)=]y6||@ۧO|S.?&;]lj)t=\P> Q_rP|+6$I>Mjÿ_\`"bӃN"@ӦM^TY Nr4Hn͛ʇ*ƑE(1`| .# l;JsAS[C sʈ=P@r_cP:еB`g_f|ʭlףbYeG~p2z{* 7PvhIcg6R''8 ,o&7h壗?+*%(hW??oޜ#P7sW둛nZӢ+ {ףv= dGZ%˒_o|b$zs;6`I]>\z-&yWDq<]n_OjE>z9JDN7o] #H6m d{Apʕ0P]QeQvPl#?Q<mYɇ|_^ov6}aC9Ӧ]57]2RV aQ~SHج)ȇ{>6 =t;ۦ #l% gv[xΩWpQm1_6(X8S̘vL+zfRgB<|SGϮG`Uo'ŎBsEW앖Z IDAT=*;œΓ ΐScTgSL>|/"O-qG?v1|T$(:/e# גw}Xp6JRgL6oB\G< G}Ӝr5L]}S8T$@J\]%F6}S>H\]sN=}QAЫ0,cشb|WۜoAbFGz2&7a-{.:ӿ,)6h1 Q>l}i4Yl0U#;-P ySW=J.HΡ駭rJ!@q?0&t=\6/&GC^jUˇOu= j&vt?(OܟvaQ3ԧ'̺$ISW 娪pӚn7Gqu="d̈Gl]W5xIɓ|&OB޿/>@p% 2dľ&>-}`;/.FO<{A*__|C[$^.؅(%*ՀbEw¼|0W#TvT4#dGʇG2E hS(Ɗ`/UX݀`"1P@D(1F c 1r'GDӁ~9H|B~i'ŦZ̑EKw#Qvt"{(oa{.|nG뮃')Cb%1㔗R=C5媞ˎK>d!>uJv0UJSqyT_]m;#pJ|{ӝI2b;~(uOz +Z*Qb^%;GOxȓ|ă}q~x̜9ssSӔYկ3Heaz9.5F6rlȧ|dWaB ?X=t{*$y]n}qk\ I ̌kaP=<XGzT=|Dt_EP#ی|*(ZbqʇG2b#|\3$?QMȽƐbz'Gh:0".v- $_  1QGxYAʵ; 8~ E!=6sN\#p S5MWvQm-`XP\\KC Na7U^U򵽿zB|ՐL>}CSӗZz4nyf]3ݥƜ|(ZT4e[aN%x %+S^^~ N씏IUt5jHP@H,̘? l5bף#z-û 9|U[3;!I>̑+^Io .> , _j((>g,ݸR(fO8c "B!ںiJ[C~@׆z <^f݉zp4XA}iʮ9;&b˛|hRS|} sX9C9|0)ibH*P@HL6M:5U0s]jɇeKUM\M"|_>J֧\!ks `+Y>z[^ I I{0kUWy "z0ϩ`]` ;\ף\{vہv/yxȼ|@AE&(=WZ& ݎk azԖ>1 ɔ?qbhc|fǚ #A!V4z#r:]{+X[o3%Н 8]{G!iI>̑ד} 7p%W 'UuݶaWIJS>C<֊$B!47OY;7 7Iw!١ѻ%# @쎙zI>ʗ{9ʸ|^+Xv_cuA"#E{ͺmR$>( :9iksԋ @u1_[>`l{]Qޥa┏d>~P>vÉGm/5`O-qG*|b:Vn(>6&\$O!=sBug)Jʊ|w=r8]~Xv]CU7ˇ}|UߝȘ| (}+>:B䃗51~9$IP( $3̚1љ3z@>`l{]Qw2.]c| S"DV)WUECA=? V$VϻyfRhP@H9s <YhAN|Ł VPdrYb~&IVsU[^x#tn||d;RtjB^ ,ѳ׎HvP ,͍w77OXVC.RcN> m-]}Hv,]G$#QV<( ʇ}lUߝȘ| (V̓ckQX;HqN`P@H947O:8?zCpzD#w9i▏aC>A zÉGm/5<-h(x:i2F Q gZN?}=--S? ?wףVL t'h#QM0m DLG-|b:VvipݫwAlzP>zFH>z .TBrGLTN{ו>Gz6rj4K#IApÈ|hQ݉ڋǀ" ||՞ gdycfݱguo( $Ly'@q ^gJ#F㖏ɟ|ZL\U5Pwnɑ|Ã/iAxK˴J‡_h8`E)%FjoB09ʊr廂}[~bO>t];ת0g] qB֦ƿLkq B;zUv=ɇeK|ɎA030y]|N^dL>fl ~n;5l۰ep)\f% ;f͚tKA,T7`EnTI ϔ*>|G-3{sPٱa|EcPOMEבֿt=l9`#ml<#I*ji޳CӨTBꖖ--S+Cp>ЇC B|;nx%FjoM>lu#)&B`|[Wp]^;BC{JHZE$] =3g|z˶o4Y@FG;WK#=3P>B;Q{1pq#Uf>9vKC2)K&Oh C|Аvœ9s:rŊTȹ&(NniX%zףqu=,E>g,=NJdʇʇUG*[z wێq:AGȮ| Nw C|!.̸NI/ZH{x%FZc\{;!Oa{jɽ| xy'NpifĞ/#2wڣ.A! 3oi>k2CeءrX1ɇy`)yU2BK<g0m0jHWcf|؆sc1$CU+ڏwzVRQVwH14Y3WָQxUS|x>飈}][F8ׇ/ ]Epl.U@DNްu1D!=~F^Z>l;hC+~ |I|M/l]kå}otW>V:ccsGG[}-BB2{v3O޵6n$ﭜrE6A|)"W"}+g0mEQ>+#I">0æ,S1Ȳe7FsU\_ G,0c@C^Ƙa.([e+#][t8RMC> vyȣ+mB : T{ZT $,C>B>M>Fꝏ8k>piw`QG]Pm65j5$3K^wH 4{{)W>甫}GyĦÍ壢”+6*ƵEN ]>T(0 O(v@ٳg>:c.4-ǪJ\Z O 5Z.;p|ɇ%· x϶rUkvUͭ"͓9M}4n>1vKj7xG_*k^36HE,\x#@8 .qk+?n(<3+]|s M8Jf'>7O];xa|$H['-5 YlHb*Pt_3)W2ko^hc$IP-ɅΊD![Fv(rᔫ#Nbn O'$; rpU AJk.zhO) c$WMz mJ"oXǍ%P@\s]p*J%= _{̜rU;'Fi & re "XU*m{e0qColzm(=M/]st !9cѢE S\I>6w["Nr~ u"rʼn\=apgr(Ib|@Jpbl#BHl''(1켢]1L*_'M>IU>: r幥{6KU(;oL}\9~@(I ^vtC!NQ8?zsSS1~@(Ib|pk&&H7B {}EcD@?S4s#FrBpf\v{Tpy}(Rl&^7_9~(Ib|۸|qXP@!,Zt膆=cy\ $i=;)! Yz*Ha8z3lX{IqͿ>hPdz=#iՓ|t#hksBjt1~ǗeQ;;~|a|$+anFܯS*pEgm[my$\>z_Z>ye3BH 'U98LGGʇv w-ezC1rQ.~*TI10ጻwv<` I>ۻِQg on=Di=vmSP>Ȋ|=2buPyIs^"7 &ξ' w}NJL@glX>yi+BQ &!>Sr5x&lIɒ|@}_;y>zwNikKH$tū 9ˏW5 ;K8^"8RUW r]9)WY@(q⯖փ_j 씫N@WyD俢|-Lh]CHG7 c(Bgɒ%#J# $Q6Ly|EYIL<෪UݰaӜ9sؓՌ1唏$I>ͫ{^[z3B,YdUp4Q~59j7ʇY $6M(p? xX,=xg::cL}* 4;ÃxP@!{r{ u|TA_[g'.X\mO<*T(=äPW@鑶BC/,idBCz `J@(nd]>bQUBcg}c6_*-n?Eplvk\IDATcg◖O0B!dEn-y|HqU{ 1]@(^% j- u<8(<\,v/{NJGۊu +SU=T \OFi'% sS1}TUX<ʄٷVGO|[7,t:B;-ZOP:Xp(")@s+P>ȋ|^RUOIOO R֝*M|c  Wt,B顭 ^qU@^S7l4&xxF(MD)OJxRBHHTƷ3g&&Ȕq˵WLjwC!*{/`[Q>ț|Δ{ Eb`ֵhBHd(^|+i^շ|ܟώ;<'P@!$6ɇ]I>H2h值 ^Zm :B!+^ʼnIvyfq[bkS>ܱW@q-x!9B!vݠ|[i@%W_Ma|mmܟ0B  gkP>L>ܖog?#ZBcӎ=%!=p1%oxҹǒw7}pb !¦IO>x+'>U$AX}_ߥpF ! (&MeQ><$?k.q֓'(  .~P>Hm^\zͦMO@ʇ{9:ΉA!IqbS-v-E}mMόG&P@!&yOoHcG^;K;*S( Rʇ T.J|HG8;}<B|S>H^xqIwsR-ɛ|8ÍA^MBHWvGtrvwH`DEIds'{, "s( #yHt^ز&O%?MO@ʇǒ 7n\P@!$&&vu?(+K.s^Q>ґvvqdI>&0BQma( b^*Nl:ܦDžDˏ!]h:7o[ma2~ B1#Nu b*MSybS B1#NlG6]fWȲ[>> 9kb4B{vR쒏蘽;zlH]]Kla|s%B +^'6]ʶdžk'eaScI =W B!ɓ|$v/i(L(K)@pڸBG0LIp@BHHxytҹM IXyxI>|!:lB!!| 僤ƫ' ;7 "|ׇ8p>f%>P@!$ 8I>H=#p_kG8^-|{”a` BI{>)UL²S^햏M>8Õ]viC!WvGt(4v_:<$Y?k^362҂B!5IqZݼejOxI>lcg#D Ҭ$M( RMUSL!oYXŏ&&Vw iT6B{>(IHN:b /bs& k-CK ͤ+ !Ć=~BO}AZg~@rBb?#:<霤A3J@_Orxҹǒ$˨AZؖ@!VA!g&/_wyuAXd5WN3 !Ŧ?ۺm)]iA\dPEȷӮ#I( S$f%^\1u]n6=)gQ9y̕B1̛|WHgpxe|F@E" B`'#3Tc^ܐ6ɇmtGC>3vc d%B=~B 05M>l~&^>z*  !Dž?G4a} Q lXz5:|Zͫ&  !ƞ?#:RהPLh>x$2j>w_Cr2BBaӇmr$(%IQpL@!cWAQa|%IaU|9$j҇B!0Oaj!yk& wmz$*7j @!@ɘ7vIQȏL'ޢnævѽѳ׎`/B=~$SAbo46lGc]DN !ž?!6!*12H7&Ѿ4[BHMK>ÓIs+x.Z O:Xd5Hi 'BM~+^-өO|x,InjpjP@!$#|\ WoIXdƈ3P%9%( $fRlX|V4V6=)$}އ2g܌9BP@!r&Ug(4tkt+6l`-ꅱBʇg B’MY\{M6l@lj?4B!BbNm1&3yG%=Qw1n( b!vGtvy< .?%z=$YF E!5DJB!a|We,!ZU/P\BXd5Hrf B!RGY篙4DVJXd5M><Þ-JBE|U@ );,%IaTcg EJB,!Oak|tӮMaVt^k^}bܕB, oZ!A酕9Fhk|&&l-C!K>Ó d5'#֡|AnjajBx51S^K)i`v!ƟnBR壬Ů^$Ʒ;o)vcԫ][ύBI<ɇYү +KPIrR>y.7]BHM>t+{D>壇=7BIʇg BUp9tGs-ݩ׌%0BIʇݰA`GǐFak)îB#:|9!QtUtQ<w;Ɖ !Ĉ}+^U@ 4`Tʇ;ܮOvu5\vBH@(AROyY)& >6{L_uHrB!1aWQV僤H)@W$GT&=X(%6h( y_ 僤מPGKI>lnN:/PLӲÉ  !&oZ!u[׈UEA ~7B!P>Bn/-;1LZ| MP@!i&UW2J|/V6u?lz-Q>(hXP@!vGt(מ{ ʇ;Yi=r/]KP( ;xū (bTCk[ۈ9'A"YoU1E~P>*|yiŤZԫ|h;-jC!I>̒~-DGK)5*ns5RP( /KH:lxk%'+$AXkAc&lP@!$$SAB\XX˨M%ʇU 퀯9XABH@(véW$ m5 lŦM%ʇ~by-sW !.O:'7ʇ;YiQѳ׎0 !>*|U(^ I7:>#H熫B$ ($-,1)acs ?NҾ{ B!>Z*|QPw+៼ɇ>xWBT]F9ikPnIƆS·#!aBɯu-8q\DH"گmZD̽{ Uu+H6mB!B!B!:?*+jCS$IENDB`circlize/inst/extdata/cytoband_list.rds0000644000176200001440000102015714015721224020041 0ustar liggesusersw|TDzW)ٓFM%!lf= 4J/"HH4Q@E2ggʙ3眙S&_yW^)W~}_S?W_W_z; c|1>c|1>c|1>c|1>c|1dc|1>c|1>c|1>c|1>c|1>c|1>c|1>ی&c|1>c|1>c|1>c|1>c|1>&c|1>c|1>c|1>c|1>c|1>c|1>c|1>cb*`_?ෟ_ ?ԿZKs0h+-bU/ Z SAk.A _횠>+myv̼"h.ک9A;]Юo ڽ<П1yoT"졠g^r6C$,O=>>աߙ7w6 oxn-A~='hx<n)hDo=4vȏ~&賱"=rKШ%M~GWxlޡЂՠ@/EO񂏉_?"ts/ !cGׄz.h3M>GA1 /x2/W;rC#>hnh>?Omq-nVqS3GA,/h|}7j!_8q?HC4OP4OXu'\"=!ב8)~~݂n9&餟9IGOcܒjN֟X*dBgzf=V KQ'+EzrgPrJ]+F~=l^G /ʋ O){Js: O3ɟO6#ȿНMm0Z䧶ҊT כ5!-i(r/ʥEzZϵ\6ȝ EzzrsALo܎NCr'r.Yԗ.*'}oM;Kց?}gY*eUكVWٮGlgOmLg|d/ N {̈́\N pxxAKwA'1~9ے%㕳K}|nl  ~/tޛ3й?C%%aNKW&C !W\^ϛ(o_ ݃WoCN9SB.Ex寚 3Bo'B+G^d ߢ8;i?-(Qxtݟo=zuIVIRQk+V/hϵ{L z/  Q_zB{S#Q{䖲>nMS5 Ѯ bQ^},4WW :&I'D9>ݜd2B>oA{W޵r'yעsUQ<ƉJ]7g[ jy5WY%4Y$곴)v Q{%|ԗ ͈iN^2HWۖRϾͼ-H?qQv !oV@DŚ[o[)Ū7z~voϢ%H&F~&犤+_{_ŝXpkrqtSKqݎ21OOOGn1/Ǻ+oݽu9٢EuR;vr ښ~8DAD>)A?9 F䊹?jFo/Ͼ%cΣ6q(*sr5ﺨϵz\+]w0] oSRށh u:1cTˉ_S-UQ=R\u' J*@]U\5CwW[y$o49˴?xW'vl=C;oqt1 ?=Mܴ#;U%oӟկSn6|v;Õ>%Ⱦ[䞳T_#xODO :j$~xںE<ɏtp]I=[PN|=#QxY/ au.Ekr_7􍷨gWˑӗrҏjGؿ{]g9ݜQ|!?~FWz]% m4C^$y!vEEG!_%h棷)P@֯T rF;wO j;7-es_SZ"7wo\ˠ_)w @6nqފv _{=Xq:B閤렾w"{%::wӯs'7@1~~K+Vn)-_ {]|wO_N2pf>^˭ǔ 6wS !N 3Gotam~={q=@4`_&  >SiqH ?+hkA;SW _%РH;ԴGx^*s ࢽv݈@[zOz ܢOr Z;:ҿ~=+@xKJ={ԁQ>le^'#OF|%J.#;74 ~i: #Ww}<;O4%oTS|TӹUQ;GD-q%EG~DzL\z$*븘?B>[UbsǶe} q_y ZiihcC.W}x'u3\'8ZAO;W:Bu?@׌tPKY*h\Q..F\9N+XǗ?)ܺ{46 :crNsg<;@-qHX!t(p$% %C }|Lt3Lj<lju$v/L졃F&Ƶ-hWgM'x%ڭ`?8+#qm ց=ܿઉ -dRNO2릤:G^hrSG *z(} QUZJ(quAMψFufaeZ&3f&4tn9 ?rsvv2$}uUЯ )wy;r7dUDUuhE? L?>?kMяwnO$1'k9뤬-$ !Xd7D_ݍ.;Qf]=$e<^_z(ϐ{z73SgH *#}zǜw#1gY$rkxl?9;sN99?<܏МN9ts[]T_Cx_FaWkHuTGz֣= Ϲ.Pϕ"J}@u"=<Ǽ[^w@ۃu zCۊv2yxx>hY;ҧA=ym9ۃLigyW\~usߗ}C'3!?C=\H| " ~%T-ɟtOXX}AO/8Wږu=Imvۋ|@hO۵B+SOJBA3hױպ?kc'}+X+h]9?_&KˉnE ~ԛ;"U$t:>uݶvuPxttASI|ϊ?<_~æߋ\t,UωB7.x }SUtK3_ >۵~O1oطw5 #A{߉ _q8jamE ;{0#Qo)7Sכ^;BrN"ҿ 'T}ٵ#/KW_g(7e?ާfߠ]*)2,;x/G~~akя [*XJ;QnaP O?wjg}@7G?^(QT\QmUZuDQ hukQOQnkxO|XWhT.Yg B__|zڱzGÏAS^ +,~5뎢k< `ѵw#g')\f*zTC5pC !p&|E] 4 5DB.n4!{fBP]k1% Fe(Яpq_ of~!0;[ 3,BkX}4*O_3|m+Dl&.6Ga4[p=ա'} C L}z[y,L߳~3]jmzpf75Λk"5}an،MDfs =s7\:8֝R8ڳ5ۺ9~vI(?U7X2f@;͛Q簫0E=r,-u,MJD}oa|]k首x[z}"ڱ[OZƩv3ʉ~Y2,/ql|yzAnf}zrr/WWxfؑX?Y4X;փ.ͪ=k &ڵF?N}˭=Gl5Pށs_:;&;ޡc^Y9)*'#v5tg[$LA /$~qc쾊[7*ujoGZ!o[\ާXߕtnb{SևӸP"[+K_szׁ3oVCŻ)އ~eΥY?ت~՟,mڰuen  />m̶d/kw۩^I"o%r%#U:"!Vn[d%]v9OMyR/{9cf y{sME}%ZBo/ai_^LeWQzMؙwq!/v'XoϽ܏Q-:~<~0?>,VPGGqcD=frh<ю﹣K6Fw‡R_<#;".9'vяx9ƌ P?gaA\?!ﮈ] |]sWvN]2 Zr7IHoVtn)r# wC{ ݏ;2S\{@.1 Kݩ/z ?G?is^zyjp"ݾ~i ?\#?!wb?q(^OCqZO'.{%<5R9MO`_OovVE?<f=o Q<]},`ybW?d m_̺?2 kk]p[H"O}wmUnK't YEYD!& jR=2|j 4fDA z;2~e!ݸΐbp?04Q}~As&͞izeg2ok~=3N>]wYuwLDO߯ {~wHw[g=~4܋%'U"*}H274 ^-r7"? gQ!cdC.aM7;DzW یpl /b{@3cub?1BoqnO~5B^Q!2.U"HCWBWGO_i@S} ={DЁ\ɸ -ˠfܸXp1حWF_ x^bG`gYh{op28?HǺ9!(M'Itj?PnA':Qq=qqy7JīUoHj~"3*)+:Τsw2vIK5Y 5\J#pCDzJ8z-2>E6/7SkaAj˥a-7eimyB#M=FZ ~Ii#yVsix}N;]SyiXץ='M(frwI9{{n/a~?-?*'؝dd?f |3f̀ZCԛq}^OB.&'.352We^FU -体ע:D=ٯl!eمg7^w$_O?^ӔBNxI@'9ܗB9-rl6 z+y~5![.UV(GB>7y"tgM.&}_nͽ>1)z̼ƪe ﳼDy6/oUTp ?sw *z_s#_EN2ů(g;7Ñ[STAXVK : 3SP0K\ξY ._]カdm5v{]'@cxUimسk>M;:#J/ט. \Wn蟮 t]mumg@{ՅA-riA7}n4&KE@/6mP?D/Yu`aL?HcD]3g"uk qO\#umG;{,BLuÊ gN-.7V+֋vug7ܯDCqwuwgU|9h~qf~sƧc^ utH&'tOCۆY?S|뉣ޔva_>vus4z.}N_>}{*t8KGI.诧R(Ob<= yO$Qih͊\Pu{g;owvRoP.}7Y:ԓݵ{Gٟ1o=.A& Enru{ˑ tv;kzFV/OпiyB9{M蹋OO璃zo~ˏyrg.1^?@'V%^ߢ>oB0Kz靰zv!; 1Nh1.IgxxOz͡NwH|Hޞ;oZ{Cw~-NoI[Cng]}zH+>с;=&Օ v*;K_,-N[ZFU,mwIОKcϕ&O.+jE=YҒ!5EJGm҉NڛV ~6q(J?9k{ mx!JO]'WKVA?yJX*'eg~C_4Jȕj*ƣC_>حE%'mO.SL {.{YW)hZ]jFTˋ~~:k׬i6+F"Qn]UKzjz"׫"qzUOg}sKĽ{ T?0ᰣcݢMC 3"o0yAFlď+##{c9(+̯hﯘN/bBbD~uCaqLe3٨9Ư+cї_f櫠/h8ϼ;wQ rv W*O?KL}M.%]h %,BN턋j=׉X=Xb GEmD~<gW'f 4{4p$u̷+ vI7Tf7'7G;}؏%a/lî2O7 p쫓OH>(ze'DJ LHgI)*Q3c~L=2K?'SIU)R~WLu+@#5}-Ԉu6q.RHsb~DL4?ki Eг%M?i=rڛK5EK*괝ؗ;R _s4sQqj ҇a/c5짌O>wH?{"hĸeW/# =eF4j (x \bw2G/e#.Nf%3{a>J3ߛWG?TDY_߇c֩\]&Wٯ > ssC;w53'!9zrAsY ޚs9׹O9˭knw sO8ׅz8Ϲ WGs,Akv4κ/UE/('/P^ '95U'oG~Gߋg]oMAn?~7)xH/h޸ u[`Cg(xY6K|{eV'8m76p]4 ?mfʙ* :;XEiDnҏz5(r"w c?骄|] ׵] >S7{5]>ץ3qX?Y7!Wyn 8n]yaI?څ WPX{1cPR®f*q.OVxu~?LB^;-?7 ;o}<ϓ>ahO}D\^V_QgWǔ~"yՑ[~+Y+­=:JgP J~d\"cūB EC(z,t1뚢:w)P C#U ch=MWo??rCWv 7Xr=c&z=û_ 󶐿hC;?>0cDFmIBeLBodeᇂ?ǡ2Nz7~H|LUȯe\?Wø)=OOxM_od|]o3UVT+kC/SKȇG3x]5et{H7~l%M^`gaZxKӴW}f= ag ^slq=%f;3'wkSQ)gw|ubG3?db?!o Ef?m?. XVD|@{ ޷N꙲~:qLlKj?4Gč}?mOrW/eg+ͺ9v%-K|dk%9o ǾK͒qP2|}%aQoC/Q3WX۫=% pG-U0`ĽGfO&=4{>~vgft8}u';'߶/_H88cK|3G[8ڱrttt{\Gzx'юI|vGq г8&qLf$'sgX҉9q&oC浳v!r_<ٵ=& Sao.lwqE?mOz7$;;ً82ξ^ȾtLDLWfY0v x; St\ߘ;!Cc q.N~tYtugʭ㲷yΓKש y-K3v[C:zzWKuUT|-Ugnh:p4- \D]97o;he+O{oϵ'SkQq=wK3rߙS^ӵ w4V@n \; ]t`E-.;?T|O/-X~'(6'D߃V-wW.w#Kfe_gܲ藻; |(,?wt{ v Bga?֞^c+MH@=cOŤO~N 9yWOxourF=b;%{ cQ{+>W5w~t=a_oqOәCܟsWJ/}q?ע+w)+Ao5|}?rE= D<*Cxjԋ{M6=Ovĭthߩ@}FˣD7Of1{<-b!{\%ngySv zx4q=gX7x@{ϥsYvr7;⹅=羉q|v !j?oMHu}\/oiG.t[uih{#f.&u_;yR[Ww|ɡi_r=rޕ}[׫{7S샽gRlU'i&q3}V_U?KkTSڀiFm=C\_i;a(^ڣ"1}Y甆C=+P?:84 _q)MO{-.<]c(KGa7^: ҹ ip7t qkKWϪsK7aW%[ܾ(GsW^B`_z _,{1Υ?)@Ynjz} m<ڜ8ee-*C۴= pڙu~JYwz1~eWU0\sY"vmeɻIO!JYʲYG= wI/9mQ6u@ٌz?eXGbRvTO/s8TĎlH 6CB01CbؐR//ֈqAdȄ7hwq|T6_gK|>dwUq=C"}}{8C-!Gӏ+Mh*Cn ?1bmM߁н5t?vz]/mQvK}OVӰaծjhXS kkuY|7u7.<ҵԗh1nʈ+:l r [ΰ(w }m(aψ49Ko~\܇ᱜo1?7H //>s® zMv_WZ+^3~ 8_U"!FzB^g.~kuv^{K5>~r-8w.Ӻhԅdu9}@7o~~k'_0z:ٱ+xIǞ=ut^lޤ\2Bov< ~Q3QnAϠ_3Y {.?3~>ĞkGnWUG.#G$ZWȯ=SA.;j `vD !߸Ǣo22c BC~ rum'vXq_:][q;q+'^{ht:7o=лX2-9`8'iOxh. gT1=~ N2[:c]Ưgчj:WkơWa5{ z{^7ϣE=bvos}a'\uqm} w~Q ~šb7j%𳌨uDE$歄)#׈8?,{*Ri=?Dz.𻨯=d15Ɵ?&;"ڏZl@6Kbw`ߟ(ac@0~&b5`xj l?_=@vYb0p~-;]q(_s ?N% >(jRy'!qN8D+'O t^WU;_RaOG]JI'%|/H:IP;KɣG&-/oL|JsC)JzD~J #RFf:R^L}~yJ/ܩ xRK dOB┥禎QEo)UnA;ԝ s ^ }zoRI}$OTSŸ/y/!LKH"Ey!6;EKҖm^ ΁I:Nzh/:Mx]鿾C?ؓfž.6!ёUK0v2Jse)cCUdV:m|l9NC|gZN1yϞ>\^4s'~יS?Ћe |VUcf!nYV׽wGo=kó1k*Yg:\9.Ϯ: v1{ug.%;?܏|ٲ=QUQ~O/g*Iιۂ PnVni) ݏ=z^S7yy}yQj܆(7&ovy)晱 ۏkމ?.0g&֯'`~yɯT~eo~[oƅМE> '}~)8~|ϡ_ο:$ߟBSh[70' "{/ 7Vhj *؀=iV v+8xe] j\ZE9mK扶+m7m(inf:Ԗqv1юv܇ L"ޯ~jT$r'USH4i,uta|u٬t~=X 馫/[=nx$T_qgt'WZTGg!_X+)L]-+@\•Ŀ-\úh= >%NUMs!7F/SNPڣkS)z#pg24臀gG2or~+1O~?'~qQRUd^ﵨ2AQPkbQTĢ:5+j=rmuE>HQ4E %(e[K hTҧ`GU4xѦ. /+H?$񢊾#NZElhR:}j_ G~CeѮ!=!\0_Q! C vhl2hK1Xٯ{0x)?b-cy 5aqO /! {/@~ ۈbA=5ϩqCksdrz~샌ԸՈOml̾؆-1j7*C 5Î]: 3aݥQUg57x.{ZDySwӘzr)I; i: uD;7-E}0oqkL[ #nL'ЗNq-:ӹ#?S捹vױ5wNs?∘mN}e74ƾ1zTmռx^/)T|,rL|1_|8;GE,|K5R,ubi:yK[wY:bo+ڱ b-Z Xsx,1gZbew2Ger뉇a@P ˶WhwOky[ڙeox_XsY9GZ2ɟn#[o"}]rۈcQWU7gSᜐ+v_<$@'\=h~VqmY'ںqM m#I0"C\[W[!юm(qmÈg=mrk/yAf; vb.۽ ɤ?įcI=FI+i pGKBJB3]28b%q/@Y%UI3lsKod8|JW2pt ,*tY7%_RKVL'꒵_JoH-!6_;+J޻d8sJӟ['zDut{"ޚ} ؆~8nv'q{-*%ހc^x}~Eا?yŽܾxu}7 ]:9~jL;?~_} ~e?K{ϱuԶ@~s4 1v[6AMT_&EȘ@=5s_C &8-5BIGk}pzا9 +9 ~+g?yzKi+;', ZΪ8Zs6mmЯH3 N =TiC~C7ulI;My9S;%hZ9](a9ĉt>#}4/iQ's[~z9ث9?B\A~G?sJwq{C, s_*R)~ jjC!wt?sv1Ch ]a1Xj pV#b4sKorE/ߑ'DDhz36g?0p9U\b.Iq%Nk<^ꚓJ>ڵtŵvԸvmnk+ 7صqms]{SjЯr]G.]iwW&*Swo8]迻[nܚM7ݯW^Їb\ݭfPm uF}13R>4mT=۬YTGB]xn w)C,w=<Po]5{ixM5zm:Vv~z6c7<<82XЫR׋_xI5Q$O5ƥO*q&|o4t/߾O~Ka [J\/o&ۢ 74"U#'FlDlH~=)QsE>]\!hho٢ ЗE#A<+ϊ~zJ1ucc&U.>3?Bǎf{3jQo=o2 78|{кh>?zq-7kE}q/ w}Z܏Ʒg_{ ~%=`} S Г$IXu'\"=!ב8 < q>q/Kq{ I9!#z>;q2f=\rE񓕃"= O.?م-yȯGmkH}_jc4T^m}J@B>ň e(q;RI;Ĕ#ȿ@ܫ؍6`ݙ*M?4d.tKٟ;z4?2'4omgCi*ސ8AȥŮ!} yf;:AgL?TaⅤ&ca5QY2*hPmhE<ߌt6޳ ={fE3WcϜC)qˊKeJI~0k"ߡj<āzBs?8%῀m=/sZ|DË Z>,g3-_2^9۽?`[r*7{A6r̝I܍ܹ]~9w% ^&Krwk"(7Qj24"W;,IqĽ˟$vjx"J&ޟ_:7Г|!Nc=5.c[46m ^0!Wڍ<y> (X^`=.KK n(xRQ GEXj7Wیڮ؃koÇ,h.ʇ?_(hFm muJrà]H?ZsM{"uxo'E ׍@n Ѿn&=us[-dud;ٸ>A}[X Z6fZ؆xD{}y&-A퀖k?F1MkΟFB.5]cj|S ?7v_[ax ) K}up.}BNG!O@o//O\亢~,g`zR?(t>~!?C_~_~?/GoK׭?`"`?źH;~|'i1vEB|W/_T%MKQ(}[Q!rE]Rћ3%M_(StdwqG+?c^^{*14m?!y`?ukʺذ"ϱ4 Nc pwcD}Qq4Ʃyϳ87!q. 1.d`\Ӹ}+ƯÑ?>k< n>x 4nxsJX.5>sj7U .rsQۤ7OԚ_La1_7bcy;1}i^&Ly.-Q6!Oj4o'17nɜY}ǟyMYpc˫*Q"Q q,]CA&%|ԗӒA82s-㱃m؍Y>@a fӖ]Y_󚭵KFt Qk"bMCeClc`Wj6qu '79j܎o8ܪ`MOxqq!B88x)w?u$-i{m9lkO:;l;9wпsq_^/=R}~~Wgn?>= ;+@?i?sKt/3x|#WuN,9?+G30q>x!;#):+qlWqOyp\qquU쫝s65pvI'h݉|S.ss=:Gq&u~{1Ͼ%z5QΛwUYTwuJyfh?zEG Kq- wz[ߵtA7M[K{"w=K=utױHsDү*w[(wyݯﮤ D?uXߺQ_oʵQ;qwe.hvM~D4 Q2_ݞ={v{ sirO|(4ZgKT|~5WkxD{E Hp$\"+ݿ5A9(O54K`<#A{Gf ~i/)r'Gy7#"hTKߨ6QUWt/jkkGAo!E7>6:m7 qWa[UbsǶe}`_޿}k6f>^IG!'8d?=Q> ? ,T\CA-g Zz~qMsD$5>y9N+NK_SxnE>9pp,Yg 6?oqN.P_dn!f.Q.. GC$|G1$c1+ qb] {Q|w#z=PsEh>ÁA(~-c%q2.ȸ#٨؇y92f&4tn9I}Cef.߀pč<}ϼA\̛|*ȪDGfMIged C!ݜ#srƫ89 sE"J>TʝCosx<wܖ+DznUFn=Q>(JrmE?hr?ܗyj=уQ  vY;%+1)떼kĶ _ ?<>hY;ҧA=ym9ۃLigyW\~usẏ̹qO?|7s~@| aVCzQڟz~B]TUrZtT.u#ΜNN.}.h*!UYQGחKׯ2|t{Kd{?7n] {{LWv_ۃ}zF7t9NwB_П<'!,/^X8iQ ϲ~ #>xr~7qykh ^.tWP8Nnpҿ 'T}Y#Wp7V_=rO | q'Yء w^ԏKOs/@_~)Pu57i~Xo,1'4?ߊ;_߳_%޻zCߗBя|jz#Z?V;]ԭSE(KhYE("AQ)qҋFÏAS^ +EYw~cE;-:r,$垃 ^Ejb9΄orڢ=C7>gn\q" I =r3P7#h>e3| '7z-C~jx3~Կc!)>`buazXraUy] pl6 ;'I C%vЛ_!n 9kOz qč77Ag?5 Z&ysODz/ m?x%;ܛ}YsNs͙HsY=_lN=+zZJϚ)G`wkĹ橪//5v{;dOK9_ܖ:L&ĥ< K; Kg-r=oKOD;~)ߞEgSf,eXV?Ѳ%YAnf%ރϽ.xz%_'2 Ͱ#i$v?]U{RMkblY[Snu`fz?wGGWEYWWm|2rkWC}FU< m9"~ŕг7"~Cqc쾊[7*ujߗs^}qB+9gO+ݢ$=ܧ14G=ԷV߭x8cF΍-{x7:${ѹ3[϶1[߶ms%6`lKq\vؿt{(ʕFPW`K6#_L%ڤuSݢ%+Y?䴓r?5E7I#小W-ѫ{6/rQ|k?_>} O"f/.ǾR=D'm߄}7zNrRiZq+H3-:~<~s?>sK/vUX98G~AGkXG;.7kwt‡rΛ#ӑC'v?wd ű5Gn88I_~w|E8_)n@bޅsȝTϦ8r/s&C.2Rw:3W:qf™~Y ;Nkv ,9.iǟ錸'9&^',w iocVt%Ԝ;cBs?=j~9OnF[p`ԧ;zzM #wd-~?A{~*UMQbQnW'կ~y!Q|]Wc1. \ZĹ,܈ڴV C|w׻tHKkת-?wuq}F={3v=P ; "Ow ywEJʽ*繸ks׭L~Vb܍{R<қo"9q6ۺۃ7;gqrw\w wCsNw?GLq]\Ǡk'/u]@lGx{=H7ݓ?uwY8|p"9O]Cm_}'Np΅<S%PܷS 'S8`)֜&S~诧<ͮߊx|E7vz=(* 7r:UO7sdE#Au®eZF/Vi7x:E/{e?z," xX64J=#u;)KpAW 3x&t:C BTD_=z=[ϙ7{~>˄]mΠ:nb|tEg9j1=}2až#v#ayo t35oNýQ^%zۈA؇D,c|#NPA"_7 gQ!cdC.aM7; .|Ƕ"6t0=V^/.B%b{5B^Q!2.U"H{%q}~O ~@ 4E7`0qǁ\ɸ -ˠ-3뽸ł+čn%2znƛBc?;˪D{a&M $cݜD#v6 +aj?PnA':Qq=qqy72{gժg$g?ԙyEܶw&-%[NI;Mz_^r ֭L}N^@ /Ji.qHO Gev'DC'c23*";ܟ\fMOf] o3gkd˼;:qU{'fEuz_ϲ{B=|)zo!1z|GOsk9M. {})dc?|/g)8kf&te{9_;FKU3MrӰ}EW[sO}3o,/}s.{:%o7 UZwx>+zҪ[nƪ~ոs#_Be_Q|wo#wH/^)QؗtW-#.AA&f] <| `꿹}W)3;\Ŀ!{mj-8'Z WNu4J;\U[_ֆ=m5.Blj?~eA5 ē>}+7TOW}6⺶3=B۠OEߠ>V7}n%"uK趫qjg;yj tj\xݯ_t3x _?*~)Wm -lMao0Gazๅo>+I…?2B¯# ρ>[_8}<-g-9ONߎ^[ӧԛ~Tn9?$N~M+Uu,j!/% 3t= ,:nWG&"~j uy M1LC7q 8O0|ߐ|.IC!vo/Ͽa<fs>a ,Rprjpu×5® C W? U쀍հ06boDMc>>9=h+3zxYCq..qPM8/:zMS>S#擩9֦Ϛ޸Mzp]їNG5(7.>&ni5vG>3 3NnRLO8'?5}M9܁3ݿC.h45' ? ;%sـy~uDz2O^ͼr>6py+3GcZ%p.KEd,(^KKK7yXRGeYNG˺_LYvנrly얬|kOΫfîp['>xug8֥O˰g@cѺW޳[ =rq*xM{2쪋rN{KcXs o^՟EWՙ lMB[uÎfmIz)ϣmzV l2p0Wl[9vGoEznTR?@%AkI8$-+)9|%㉋Z\d J6]}1%[r1K$t{9 xbyvCgz\{"1{:Q{ sƾ>8G̼/߱/!}?;GSgт5v.=л8Y8CS*%ޮ}rÈ:1X\c,~ {hw:!tv Or,nܱ\<ʱm2r{9Oq bOWA;vJ?:+~}SVvW9r^7%>fΎ[g'N΀M)pg.*4?9WN s-#|{tA'n;L9 B}s9.k \?s}R~;UrLgi+kTGYuÿ,h r}[)JF.:~m_~aO.SL {.{YW)hZ]jFTˋ~~:k׬i6+F"Qn]U(,&c̬b] Î3f*gF0~]1?O>G}27_|y@ÙPՀر8(< ziKиx1 ޅfiD]bBtkBv) FN>(awo'\TN< k8-j#H<þ:6`pػ%k%8#\g%_IN6ÿ99z6ء%~,9 {dvo~J_'e_| F%A+??))%RZ|t%`J.h.GJ8KJQJU};+e2Y*q8xRNJ9N b?-M[:Y=DT#vשڐƹHw"u>ͩѧn3Yx5 gKKzBT{7 7kUi;/M;wڥп'iz ңWT/>0=_jO5}{~D%_⟛ш22#Zdd~.c1Az;{#2'~Ù|x#j@V*ZƇ]I\׬1T.O+W~irٹ9fÎ!{Yk}Aՙ؜~sq$/=hp=9k[sNO9:)o5canp S9w!*r]b%.?;YRмE㷟˽A$߼uv4#*(p{1?̷7?)<?4 n+w`( 1? F~)//8 :~yԶ@Rv˂GL9S%AGc}(m@Uysi)wq(r>xh_%ήM΅ӏD?ȭ ߿t !~E)WQOƥ(=vQo,dP4B)Z#7ߟ ;14R- ?t%s:s]/7tn!u!!C=f o30o x6s3@ol{؆eQ賌I㍙9Pg8P?Pi\ ~7 T i/ik k1-rʪVⰙ~emeq p"XߘbO+Sԣ=nFՏ,L 9ϴW}f= ag ^s,痙~Cl߭y,ew>NGQ琉yYasɿ}&6%қ%vzE (-YX }i/s;P#~Z}տh(gM kB?`MZt|c嬜j!([ײ^q~J|jߺ ?\>prx_snWYWxOXXA+&zG[ܘq[?#Fq7šEűgⲟEcPm OOg+">͂=m[D'L ?8&Y%}#F> ~'m{XrN lppIm-%ͱ#,mI_$_+yy=e%^m|C%(u|zJߐ"^)MX_g=jo7ac'=7{2q$9񻵻M=57?'h_c_}5IN! g6Ro{5*=E=E8іx4v])ݞ"aIpQF\B$,s 8tFGq}y,]g9O"tv-A+a䬉Tz: :t6AlF\ {gkz۩q|;Ɠލ8Nqv"/;ðvF.耧Lpg"g78W΂[Y/-C܁ \sq:ӟˊ;Sn7mσĭp\JNm9/\[v.׻>_诫Ts3]uz]f\! WAOϕqKוszv3p]g\K(? }-qG-.~gNz!?{Oׂ8zӐ[u5'Ƕop'tя?'gPc)7}{/%EkvF=b;%{ cQ{+>W5w~t=a_oqOәCܟsWJ/}q?s]z[ {+gr>lF\QB%8O{*a=3E?!{\%ngySqWϱiL{ΰn}K˩j'p*nws {4}?:3$F ykCDyo~ޚ‘*[09WzdKΣv|xB%h_7Vډƾ;;Ro Abm^: ?;j!uz7@O@_%!]}w_==>{s޽g{?^oL{7⦅_JYZK7%hJqpi:^eSDr@ip`Д&|-ƥ4-> RLwЏă/x$K6O%ĭ-]E<ϱ;,݄}\tn]7rn'Ba_UzQ =~5Jβ8F{O /veA#_VSo)hs┕ m0Mhge+eށF /_UYp1eص%&=x+eS+&fY^䳎.ӣ/3%t]G4e3/m`]KQ=F#R;!5Ƌ2.CZC ĸ/gHbCRJ@X#uú?{!ޠiAQUp!q7CvW3do-ק=:ʩz!~r~4Cb80c>#sha3"}hmq0lmmƺwhC34~E{COx)^/ZwlPQ|/;PCGfO!c;;k(Zք˹\C]cGb܆^uhλa? }V(?5%^ϰ ̾fXuwNaXw}>,]K}Y聆6p.װ rۇ܆ˋHÞaxݿD<<-G5<ށeGrqf ,j]$U3׌_xzVh 5-:s[B;4\ިk  'U{[uE.$[Ư ھ#[k?j! ώ]K:謹: `g&]纎zCyvgأ݂>Ag\ /Ig*|=ɫ`]W]G \I𵮐_{ܧ]H}wCq7EdexrRok8wOڝt9 vx VN-V"uAB/p=}2novcN75n(l9mKAgQ 6ėH[ 5SF C9q"~{YT|-z~'~jQ}]wQ_=zck?L v1E0bm^?Q/ǀ`6Lj ؁-9z`NŮa:ZVwxθ 0Ƥ_a? tȏ7q<@|xrQ."~~h J<;|}QB=&^O#C~%~ؗ9q 3V+'N&ҷ3މѯ$~wN#'zz5))!>OZK<_t%v엒GL^[^'ߘ.Rc7bG$=p͔ua-)r\)_Sܥỗ~)58-)KM*S sO݂$u;v;H=AH~{>BIة?_^B.-yE|4 1B>m.viX-yIV*!ut\9/_u%}r2n'ͨ=]FmB.#?^1(aFdxS 3?~ɬtڈr(ه8Vϴb98c&=}k3? hN332/˼AǬCᛣjCܲ{I8+{֬!gM ݏbUt s]O]u@v;b;`ݕ\=Jv~e{=2~!٫ó765yf?'>_TsmA\0R{|o0Ը QEoʋ!MJR 3cy{׼P]`^]%Lޭ_);#O_{:B 9ߋ|ר}D_#Ƶ>H*OƑhX:#:YJD{MW_Z{j)vuI:uy.*3UOϯ?U?"rB"WRZW8|+[ui p{*|J(E>=XCO}o捾_h_^G RWɷG%6Hzeiԏd?<\Vc֟N ĥ.8kQeSQ僢|QĞ6Eu)jWz*ھ%)zr}h'/J$~kQ#˶"|8JѨ:Oh>M]h3AA_V7~'nQIE}Gд3tTվG4Dˢ]C8zCa>C ٜ'dbb_7X7c`dS~Z&`/kxh >$^CH_ kŰ8{LkʟS~pps5˩q+իؘ} 1[coT?1j1t@ T7fhK=4`kT/4n$$}]Ljħ1<S<+ӛw!.itLvLoZHM`Z߀ ֘ivG]N/3TŸ%[usiG=9s3ͯck'~1ۜʬ'Ynh}cۀ]y#_$SnoY侙b6qqw؏X^jإX/ҀutN+Wc8ZC#ڱhl1Yc,Cϴn2e.vWZ ò9ӡm ģ'3Z;XуY&粦sd+?Fĩ.D4gzH/n:9!Wxi/ZI>O?{7?V*+[ jNuzGaD.CPBۆ6{r p_lnۃ>v8@\q]{IC_7QOI-ǒz<7%VҚT%=x땄gdqJ_>DK"%f;瀗 !pp%#{d<X2U謳oJFᗬNig5v%k{/Yz׫߰[B(mewW˕|wqŕ?O.>" V{9VE58 9;qN'PZ(UJ{ǐ#D티Od_}5o~f7tsԘv~j\ e6c7mah@#}4/iQ's[~z9ث9?B\A~G?sJwq{C, s_*R)~ jjC!wt?sv1Ch ]a1Xj pV#b4sKorE/ߑ'DDhz36g?0p9U\b.Iq%Nk<^ꚓJ>ڵtŵvԸvmnk+ 7صqms]{SjЯr]G.]iwW&*Swo8]迻[nܚM7ݯW^Їb\ݭfPm uF}13R>4mT=۬YTGB]xn w)C,w=<Po]5{ixM5zm:Vv~z6c7<Zc$I>|t/{ ݋iƒ ݣH(@G= Qt"C_Wt y@.!JCiq9@iqH㬑Y#&\~I_Fg4i58kqH㬉|9il5jHςFz4Ҙky_#&J.+M45HE--#/t4Hec^U{HN";Ewt)=RqVqV"e~i靣HEz(/E/t_(}QHEڊڒ"#EGt(}QHϑ##'e{(ݻ@J.Pws(=wһ.P o J`Fu~U/3(M@irJ#P&G`Xܘ4S(͔@iJ3%P)L fG4J3%P)L @iJ&P5Ҭ fM4#$͈ iFe˧-HAfG4;$$͔ i)ZKP4;$(YFt$F={-z*͏ i~I HA<^Ko ,͏`i~K2X F:X`i#e@w[LLKw)XK] Rt1HdtOC{"鞆H4$R~H_>H1D!ҽ ]tB',DzB',&9ևDR7["ևH>D!%K D!4A4 B[*PևJ>TnwtC*PvJ;4Rڒnkt[C*=Qr QtB{*ݣPJ(TPiC?To/Z/ыo[~JoЗ#"""""#_~JHrԍHR7"K)u)R((((hI>Zdb$I>FrJh$ y[~Ke;); HFBh4*,#/ݥiKȍFBn4rК8K(΋RYi<%DG#!: HFBt4h$DG#!:/~Yh$tG#; HFBw^~9s5 O#^0ړi$tH#C/~K}i$tH#C HFB4"!i$Doi\q%X#AH BHҋR'AH BHF4w;X"~mu iJ)ҔR)HSJ"M)ER<yJ)7T¾4/}i$K#a_ HFµ4p-ki$\K#Z z[4$K#a\/~KKH»4ޥ.wi$,K#aY HXF¦46)Mi$l w;Dv8F©^nYi$J#N vHF4중`';i$I#N vHF4중`'5i$I(߰i# b̼`znKFB4,`i$K#!X I/ e.u 3&i$L#A` HF4-ni$pK#[/~KK/ )/ F<қU^z!Z HF^z'< H@F4Х.ti$o*Y$ *%hL#Ac/~kߊ;PT4'$Xo`wߡ`;!M9%Aw HНF4t:i$N#u HpF4\:i$N#u HPF48i$(N#Aq HPF4w :i$N#At/~KKC4t;ݽ-)#Sz7HIw=i$|oaKF4(@9i$PN#r ӄHy}+!t HFB4Bˆ%N#u HhFB^yyPK>] ?Y'+Pdd(/M/ CS$ M04E CS$ M04%P^lH"f)lH^dH^KS)(l)̦H0"l-%{8E S$,N07E sS$M07E sS$M@3E R$Jp+E­ R$J*E2Rds-E2LhdFjP-H"_|)H"_|)2H`I%`)")")҈oiIh"id*HȚ"!k/~KmIh-iJ"o)H"oJ<)2H"o)H"o/~KC/{,*We W>X^\ݿhFz$O?E S$O?E SdO?E`! 2 T$>EB T$TPPAEB T$TPPAEB T$TPPAEB T$TPPAE2S$TPPAEB T$TPPH;XW1 oHss>}=\ZkZk&y^5& X,`ioa=zzO<6Y*Ml6YdfMl6YdLHdlMdlM6Y0dlHdLd-T5O#=Gzz{d[c[c[c[c[c[c[2m˴̞5FK$uƪ&3Odi3 3C̐>3f2Sϔ3L?Sϔ3eΙ2VgjKܫ-qm1wvwX~cI̬-Zg[gm%~-Zg[]Ò B(>[(>[(>[(;[(;[(;[(;[(;[(;[(;[Bm =5ܖsU'Y[G:n>>>Жu[5r%喬[ЉЉЉЉЉľB!B!B!B!nK{o59Ó O3[H[G[m"m"m!m!m!m!m!l!l!l!l!l!l!l!l m=m=mGllllllllI`zzz׶'u,--------!wsǖsֻU*Ia h h hzɭRXD["mܷ5r߶ViRXH[ma$ma!ma!ma!ma!m88888888885b~~Ж$&};w0000000002礓;;-ʿN0PPPPPPPPPP]r=yh yh yh yh ah ah ah+ah+ah+ah+ah!a}uC8M.Gg$+ЏЏЏЏЏЏ]ee*------doK.ΰ^a8zqv)----[N[rt9S%BBBBBBBBBJa]k i i i i [i [i [i [i [i [i [i [;+?[hL[hL[hL[hL[hL[TPИИИИPPPPPPP-l1m1m1m1mZBV"####䳅䳅䳅%u-------_o}Ǒ9q4}οN:cՑFFFE#<#<#<3VNa+a+a+a+a+zmIGGGDDqDP䈠A#tM$(YoEBh8Bh8Bh8Bh8Bh8Bh8Bh8ArppppppppSNI:9m8m8m8urppppp0XuՑ"::  u#t#t#t#t#t#t#t!=d}%JW ykՖ####L#L#L#L#R+GVHZ9"rTjQcօ-p6p6p6p6p6++++!A!A!A!AI9"rqqqqqqqqqqqqqqqql=,##HGhGhGhGXd/r${#ً^H"G9Ef/r= ]:"R 㪣3H$ d #3Gg*U93r3r3r3r3r3r3r3r3r3rTl84p&J#l#l#llll############# # # # # # # # 08]ŗ###aYaYaYaYaYaYaYaYa=B:¿8¿8¿8¿8¿8¿8¿8¿8¿8ʿ8ʿ8ʿ8ʿ8¿8¿8¿8¿8¿8¿8'f66#-GM9lwp ggggzˑSgEWo$K****!W!Q!Q!Q!Q>>>Wr9#####)GGGGGߎo/9<=<lٔ#߲7roooooo$,IXx&aM›7 oB#,FXa!4Bh ",$DXHa!!BB߱ƨcXuՑe2ty<]3 3C̐>3 3C)gJ)gJr։(,h¢ 2",dDX4=aEMOX4=a!2Bd 2",dDXȈa!#BFL&,2a!)BR I",DXa! ) \>,p}X aˇ ,=FXacEJa 0`>,|Xa >,|Xrwxud4-kC @aهY d=,zXaAÂE}BX a'} =,{XaAÂY <,yXPaA ;,PwX@a؆ `acƆ h4,iX@ӰaJ( P4,@iXҰaJ* 3,8gXpΰĦ%6=,aMklzXcn[.&RÂK c 5,kX0ְ`aIDDTa^Â{ 5,kXװaOm=A&iXӰDH +V 5,@jX԰aRH 2,8dXpȰa!ÂC 2( 1,cXưa%<,`X@a  /,8^Xpua‚ׅ ,.,X\Xia‚O  -`h]o!xXXaa‚ t+,VXЭ[aA‚<y ),SXD K|o8#%7,TXЩ RaA‚H ),SX OaA‚<y ),SX|0,XQX`Ea‚+ K nXqÂ!C  ),a l),RX`Ea‚+ V=aI ),RX0`Ea‚ $',HNX 6aAl‚؄ b&,MX 6aAlž[FqqqqquququqEqEqEqEqEqppppppppspspspspspsp%Hϕ+kaW®]Y ʺؕu+tDй^vezٕ6Wr"v%͕5+kjWԮ]YSvejٕղ+eWVˮJ؛++jWVԮ]YQ&.S|pe:ݕu+tW鮬]YNwuzo9;d5jܕո+qWV㮬] srf*ݕU+tWVĿnà뷜weUʪޕU+wWVﮬ]YzweJ+s]YջweUʪޕU+zWV]YջweUJޕ5W\ sejߕվ+b(J+++++]vJ,hܿN:cՑ•1Wb\л"w5~1W\s q q qۘ]JpW2 d7Xuձ TTT5W׺ZoYѸѸѸѸѸŕp5G9\jWWWWWWWWWr^^^^D8qIqt$'IIqt$OQ, , , , , ,JH+!z3e +ճBrrrrrrrrr5i\[o!Blz ̕0DW4W4W4W4W4W4W1W1W1W1W1W1W"\s5h;W\3N:2~s~s~s~s~s~s~s%&ϕ sss%Ε:Wuzrzrzrzrzrzr;-::au\utIrA JH+!S•p5]1]1]1]1] (t%ЕBW ]I jJWPWPWPWPWPWPW ]AF].t5BW ]MjzWCt,ମମମମମମՕBW ].t%BW ].t[}p5֋9,`Į`Į`Į`Į`Įp%+9 \jW仚$$&w%I~WjWjW']A]A]A]A]t]0]}ov%_GKVnWnWnWRS•p]yܕMWC4] jer [fE]]]]]]IrJ W\\EWٻٻٻٻJ<+ăAnu,uԑRSWbN]JNWrr\w=}zyt_Q' Ig$+p"p"Ϻ?J+p(p(p(p(Dú JNWrANr [^g^g^g^g߸߸߸xxxxxMI4'Ѵp9p9p9DzAI'$֓hZOi=$"]Net8]N3 'Cɐ~2 Gv S̔~)dJ?ڏL9&zIh';CC?n,!5` P39̡d\r(C P80ǡ8q(CS P;\ڡu(@C .Ppi 3\ d(`Q{C9T`CA$D&¿;6l(!A([A(Lx(JxH>  n N . Ppk=$`C9 P@Mf2TCG (PQ DU2I3P f(/C} XP@21Pa c(C4$S|vzvxv( &C/ hPJR2p dc(C P@41Ќe a(`Cy P@)ϱ _(B P@/poz [( B hP,f4 Y(Bc egAAA` P@-o} [(B] زP@X*U dU(B4hIC(I{H{HC hP,p`  X( BC/ʧzȗzȇB[ 䤡@M (P-g!u Y( Bw P,f6 Py<W(B ȯP}+0_ V(PLn+P[ V(B XP@jN+PZ V(`B P@-6%)K TJ(`B P@7! kTCH3hB1 xP@KV"ҾP DE()BM XP@L^" VB( BrϘ)3 CB'6!$A(BC Pz @(`B P?`(C 4g@r g@p P" `(CP=ԩ2Ep +e$7IM .8>! MdB(B P@$E$B(B P@  =!A( B[ ȂP `H}(CN `P҇>`}(C+HB+$DsՌr"-Y"Dd!%B K@d,X"D c@%K2d,X*4%K)S,ѧXODbIHKi#K*U,X"VDbXŒW,X"\Dbp% K&(L,QX0Dab!%BK A,X"Db $oa}%K$"HD,X"DaŇ%K!$ %JK (A,QXD bF]% Kt2,eX˰ND}a%Kh#,FXDa6Ղ%KT ,Q-XZD`jr-D6XmD`m%,ɍgInz1!N꜀qMI/6vgʷ2ʷm^p>Uf=a/nlL}wCc/ v[m؋bo>x19 s/?w3Oڌ5e[ƟR;aة7_o?6xS?d#)?s?5K;}8lf ʃ|{o`<W}[awjƙ})i5c2ۘkҰ~܍rzdO{c;>Ɵs3y>ܑb콻7`?8l<Rxgm6ez#s8߲ט9Ԛqv9P޸Eo7[?CWn؛|VGaCy b˿]0iR~ٍfeMOR)1fSwgQLy cg|侘wꏦ3iy_vSF>lLIvww &_.cܟ eop >؝vd6Нf¤bs3 O<R~+sXel3s_1ͽ+ÿvb.eg_)^{.>_='şK_6[2KӮdVM?%_I솻i>y367`_J~-?R?{pw=Ӵ/}4CD}-DOf~}GѾ |ʞ̥Uge`߶v?q}i_>NS_> _b.bڗ;۔Moo\_n??>۫?hWsNblS(8cCxNT$qN3~ETg0~Ef5vj30vy_I5wm_2Pv`Of>~*yWNy:}{w+o7T2wnT漬쟾W o_ Osv3lKöW}W`"WnL_voH?S`wF?ʌ_ݽWa3^`S=Z]u>u#_ۯzUϪ~&Miƿ*]ooW߾;l.9QҞ'sd?F??}@??f=e鑑}Scf^5}|X*&~QS8WS駦u)?x/G0j{<[ߵ=߀>[sٮڑj=vY/ckݲ;{ ڔ9S}~9uSR~}%uWOkPNYY?l|W;~}6>?tu;:Π߿x/vo}k|؊21Ʀ1v~?tGEإ(?DW}ǦlIof^v6d_E<2}iK8Sͼ ~-eFoGWS|_W'}|j~y7۹/;j>}.f?cR(g/?f;&_>܇czqĒKL-UM39Xk&+~e>rbѴ?;?FS9_Wļo~Dcߧ{sndk_bƉ5_|{̸͔xy/>3N)&qEǙy[y/|s ثϝQ/;݃Kcc= 9{`_C+tۺW2-] a ǭc] fRL#:F6qH]xv>ۇ~~fi{R>،ߑuxw7訽~:|!{.7ߎS~.\A3޺}ǙX~xy} E8FwYtwzY>Dw|u.|w; 8N? ?d)gG|l|훶~3ۇ'kgnR}c`L~oLa~q=|̟?q<#g_<9rLBnTfvv <5|6̪{5^b}}Yeܔg./.O̾n5iw5 w܈vrfo¿e߲ "gϓx9}Xg/3<2g$M1qy]ΜKzP_[mYg*}o'ɏʏŰqx%^%֟C]`p{c:5{"e+~ .XpVnP]8sS^x0o Ϗy9m^Ηn?4YZb,wi9x(zyQ~>|wtGJC}?sCKW*,_q/;>Y\si_ߵ|2/UD:e~=T%֏oLOf彞-?<|6('V~?\Gߔ?dw^^ ]؞{$cőX/T3ٌSq܋Ɔ{noQZ ,v+S|y/XV~yYj?|j_[IUQ߯;3vΪi7OVx9Uv* jM?m'uÂ˶ 6:5߶ |._n<6}Oxkl'~h>vY{Eٮ}eCĩ//>~VwVP~6x_9RKy/iA7&݀}V۟!Ng_o 8F;'RYoooSكHEݫɷ/Qw;=8z8!Dh?%IGH1H}jtt;btR"s}.E?|8ۑ*"#)r]P~,V(_}#iR"ώ9EΡ8>dyllܲ=vS?m/gqȴ?v'-}3~t f~ѣfSn<&܈8F=MII6sܣxfJs"w0^0 '=Iy qzphf?/A=qɹ%+o流zt";A'b}\90}(ώñy@0+3o<3X Lؠ(Ihx/%Τ]rۥ|J/ o3]_w~3t%l7,d};l9ywTtoR~زsA;~}-ޫڔ_?t9/3G?Ŵ?}wxm;>i=~gdzSv1t #7/ۭ,ڝ~N쇔Ig|"%}hw5/&[V[?Rb/f-u{n=t:C!kй L#.l7pL c|8vncG?9&]~\M69yc&#tyKyϷCa?b{gpq9r;ņ -|sweWMuiٿ ga7× [}Nu.//c&-NAcS\tt)'>5Ԟs|Rë~5mqiEKrJzɥ{&_<&)Ow?} |p_ҿ8ex-v2!(sv3ģNxQL8q2kۙr'>6CtS>#iʟ;@ηC.ԬS6˞:8}f~^>xiCM{9I֫!^mFfԡ(ӌM|#?s9ݜ7yfYC{뛬9S6=?.YO8?n{ce*v9^&i=˳WccsMJ`_9q]G56sҷ} fVߔ:'c͸ygoc26+Og㿂2#pwq[>}8޴+8b&`$D[P^i-hl-/pn{vgg_xf>?̌W]G6LCSMsKߘ{=:߹ E-7G/_8qEo4Z)/nww.x'@oJ@\2\dZl8E)%[%o}gx,Aĝ7/y}Y_ۏ{@xyR^߼^4oؗ͞#tOtlG.L\\i7^.Q}Hį{'x#-+`Z6mYޯe7=rk<>8}l7ײw*?|_xKJy  O 8K+bx+~x_)bE#}n4+yJ6`ٯʨ}BϛYYQ^"Fcry+_m*"iE[OV{7TiT$rl=p)i'?dpϲui7G ʭ}aC/ctU{OWj(q6U#bQRٟl_\v-̧tUT]u&^┪$OCճ4qCVO|Buz4āVzKk?v5wfoz<k2ß oUsj3-GlAYި-k5`oؔ[{y j̤~tSwkj.24y6מߧ \._5_ZiL9uo]~oc6N7G}tOylW.Y_7Y՟ƹ>~M>#?IsO?ȡs/wLo\gC\pAGaG0ha"|w #J36Ԣih~Ny6_8kXG|F#| BW~nؾlwoMRl}c؂1xˏyZ" M}l:)OӮ>i zm؋.= Z֗M׃5F==Wcѥ7}pOM潈mN:\ʺ<ͧhrʟdou%v+yvr^$eO[z(u0Zo 5o2{&zw%j?6WlIt-_j ^p-['o:urk!DuJg[,m~cڷjMI`tmǃmics8sɭf%oۮYtmגmM&o!Bm[ғyV~7~{ﰇgڵbWɷQgn~Jiisp;~zFo/A~z.[B[_F~+Fco'h_~kmǔGyAEȌ9e`#HL$O$\$ՇR/F)el~FxtD7}[>^v~ nYH+Mg5߰7>|o_H\ˈ<y+ 1F^*d‘7]Chu7>=~vO3h{~FNLhsvך=&sǡ>EDOH6k IF3 NvsV3Ql=qG=1YyHw}7{#x=?|K~= \=_zF~gyY_Wu0~kwC~_uB\`uúsk;vn?y+t7o~ߨym5HJNf1y}OXmN^3)ɤ"x,ՄtK{Zc;\;f}ily?G{PCt<2^zF-ts̀/=~)xQ{;HG^}vs\4pc.D> ?<ޘ4 c-#u't4oҳ;XαK.Ǿ1>#/26y=>+l'y/{Og8y#AxTw4ׇ蕠&儱=Ny܁)7q1}࣓֣_L)c=%~(e;7M=^,}Ui)ӦMk8{ɣӝ<yigĉȜ0շ) f1~,% 3Ow\I~53b*WgnS 7ԃ|^*S> ?m <ܴ!Ӧk<ͦ_G5f̽f}h <ό}5k :YO=wfm4k'@g$zh^E8HٿrO2nN $ݜS9C<[<9C9~y/zjYx)g 5{ Om~<o'.-i t99(N 'U9-9`YSIyy~.gc cxϸ=|=:S{l[;[~ An͏k@_[{ ܫ{*|I࠹N>ܿ;ywOY-:%ͻ'ցc #1?h~6=Eh.zW y)}}hw?_A7vœyG|B{ġ߷)M%J cL'Jߔ,{/yd#q%;o0bF\Mxϛ3}ϻ%o郿u߼/9P{ݾK&>i৥_&ˮ}̫qSgs1BԲU(lRe<.B\Y޿ʾ|+q}}^>=@Bs_>f(埓ϯ/z#8?+GS=ԲNz(9:tU\VGo%*^]qf/^/<*Z=3nexo4+x/l8Rb+Yr>Uܿ*o>PyhOwm4*DQ8pUw{TEX"x!LUC/njt kƩj|ߪjdՍ3iL"/xc2S5΀7l/GxjnbU-5ކq=񂍏ָ_ƟN 4My4 qvMC6!iͦ96)l_Ƽ*Y'7t zڦP%1 w+ړb|$+ho||<Ns+qo(̳yT-Un~Gݓ܏okW''g-:eHqdٯO|[;{Dz:֫>N>ַkX3ֿǧ"[7y凢m;>m(q3m)R2]qm%;EY'v1hzJ63.{]'Bi]Kh{f/|K;埱m\mlJӮ/zy=N^|z9uįFz|0zG{0ǖPь冀k}cٿMĩEnfc /M_7Bf~>մJ<_bk ~{VaƉWlt&Z住;~=g#6)̈́Ÿ%1Ūm4qz3N2?E䗍NQ,ΣE?ŬbZlwHn 5v/:lb,x @yp?D#_O8OR% yFcϣs- {oS6= >{ؿ6֛+b/|".;8n;dyc?#~a}~s8>ef^cC9ďZC?A|fǐ!~f~|clvҏG_|'#qfe?>o"$G|(9`?')y.F?䃌_TC+#ϪSjoqo߉4~KdX>1߰vOD_^u/eWGl[@g`^G4)qL/{܍"Hil=ћ8}Gj1#nfa/:{ģt{ߑ*e/,e0y? _; $O:N9q3ݏ6xNr:.&*΃;_븋dt?x,|d0z}sF1m< C{z Kǟk:Zmv9;wx.A#vls,18gg*zt;3Evf>89fsѤvV0)t~/xyn&󖾔H_gӹ<ߓ&v%c=GGǾeGOΙ؉̣3;~ϟ5so7y'fcK/UϯE>r~~o_|%ױk8~8>/Zn])_pÂ#kM Sk{2~*Lc`΁ﱠ-` :^^e3łsȫ&@ޮ@돡i񟽉'̂W_-x58o >>%<\݊?_U_a;_oυ.ˌT%(i7|GeQVow^Eug~-&=O1oZzE/v/-zEq:qvwbN< A8G<؁f'N;9͋n'.'8ȔMFgc̽k`n)f}ZtK=NB_Qa~5q kbdR]FҠ>АRX}F]>i$at1Ƙ\Z1ؤ]ŤݘJs ^o{'_}&3vo4 ڿr_v_5leı+|ݽˀ^ArB/ cN?pqcqR<~ Lo!?;5C;aOp 9gLxJ5GL{k8_'{ݬ'=zҍI2^5)cSs]wr5z |"iJ{zĥM>8_bsևY1vvҧ|iBf?c4S?g5Ӝm܇/5u~V9yU.ZC~轳6LwRo _Ǽˉ3>q?,ΫGбg7!@yαϙ~s9s${x;ܙOg{78ZF?gߛw4`y&O߀?lw+歺~cy/;oo'OD?^ݟD_ù5q2<ʟG}?Bpnc v+; jt O p;k^/ {->KaO@vK_x" / ^Fx;_0q>/TF߹OMA"{*Ź˾Įa?>zg*ʷ vܝ\sXgn vE^IpQ4](elpR[*:3#+ZNݝo5k}?qEy/+$O\eˈ.[~}%7D~CLDgʳ?C}=q'G<9/ VW~?Ϲ˷Vtc-wiWS1RV$pXpt'ZEE]jpTtl ֋7GVf. ~+g{^|QȯY7A*MARt-$cNşo_93~U7]Y?oE_\<W^Vʫ\!pVnރשxOoTpvݍ|kU=]۪ܮjC!TNf0kFUǑ7xVy䭭:̫Q W :'Tp~V}_5妿 C~ލK~9yCO$li_38ɔg=Z3^OMIGOS3&K3ϚBJ`j"%l{5 j֜.fߗY \0]Kr͓)y5_O0]+5? v,jpj_S{fYX%wh_UmGJk;3=X{fڳ.F ^r"WO?נ'|7n޿ aO~_,yk_FQ j7/BEyA~ڝըh]E^޷KDa͸uGJb|S3^$γ\uRuE'եs5}(:غ˨; =[΁W[ ٺwHw[CWVF>*t-?{_2G=2}Q{yϮy~3- Zl58n7H\ZCbLOka6o`5 ypCf s_oP65Nl8ue[(8؆;nXG};k0r.ٯ+N ?_57̻ğ57mI0ޓ'>nqO_?B54h<8Ƌ~xF_xMzףi|<֘j||v_4~fM.qw_g;7h36,oB7NLkZN>;ozҌy˛^%.E9]N@⼚Sscig^SW߮37y7yrZ'ߖ->1LpOQ4g@RKZK[:,DԲH-\kvwpny&>F6H^]-G j=|y_i5eMƧϹ5te: Z+R 8]CE[f>`xdc?"u+s6[?_ll8g%~YE_kE~?Z#Τk ek;BDmÉmsmfhy 댖=oSF7nmgFph.'=ݍl|"Z'ORg|2s߲;iy~?2 ||6}ۏ#ZH?_'G)1~mfb~X3nlQXgyCN=6fƝwNb1󌥾glc2Zb3ʻ1v%ϰ GQ/p!/Lħ'_0?$6k+\ |ԷeRox9a)<%z¿Lo G벿L4n:֤הtTl̷_y>Gj zsO[\*}zYO{ jIe/nlL}wWf1jtgȸx vxԌ/ƾ >i~;93{:ػ8^Sݙ)y=oߩ^Lm?qYwz_ᑲ>~ ɳ?~5v[U>grơɄ)Gӈ/gۍL:.u[7}o &߇˺+w=a˝Onr:r rOc{ٍfCDDܿq7ɔ7q^'żS4i}M}^M!ki埄.".s &_OOq*xyZFԷ+|˺`#E.xC^4;ܲ0*xY^\x=xB>߼ ]#Wkn+W|E>^G<ܛYν |kzpK*yn";CdlEx,uP4<&E wEM/h~)S!OGѫCi_XӾP+.p-.8ϻuE)>╋} RL+9>k}Iъ_,~Igk!>d盇HyltO "}*3"bj3}"<*./w=맊M䕮6a\ه|(7VGL^9i*+_νj*oF?^8+U~p*'t]_U|zs^V /SՈ?},q&U#3L?UYq NCU)|yU qUQx٪|gv5gn练Uwߖ998vF?᪻gdoՃwOn:wԯ"_B*@V"v~&Miƿ*]O]6շqܫo_E俩K=~-xF}]V?s=i?[[VoXgH{13y5k&~QS8WSFu̓5/GwxԷܐPNqY35s=퟽߫oqA]zҌ88Ә 864N#1x?im\p6۟l?j<*%W=Ikxhs'xm|LyӡvMGTuWOTvUsH6xbiIMW`Npjzn$OUNAWcwjOiXx9qj9ܼ2 y4wk9CKZ*q[riY{Wg,!ڏ{`Z'^FT%sm*dmm8?h{% ^'Sķ}>8Pq/nž<____ѯ׿I Gy~J>sEĹ_I޵ۉk"{}zK\=lW{ݎW~Gg{ߧMnd#cMOLؙGӸyV#ȓYw\kGv[EgM1ғv<ͼm?y֣GhƦfG-1D O56<@E.C荟Rjʟ~^"/MUG o^~}V3gwo4KlDwKN菩fnYu_dIcW L2o;&_pW~>՛~#_KL-UM39Xk8;'_;[|gYm~8v+b޷|Dk=tx|D5>=k3wb|\wS~Ō߃k|xWnjLLG^1ğXc$8YǨf:;o3ul&/VDŽ|;|Ў>#5ǻcAG-30XГ%ėv:.%.ĺ˲-WP~;Ўu%8`ޏO?O<^|_oh.뗎V=:>.߃v~|~{;x{>;'P*xY>?S2ICtKnuKyk?cygw[ޟ5wK=$8Klw# z?Yk+>q}|m&L!jTwaJS,acZ(VIJJ'.# ?^`߬Gd?~9ӯs>"-3™?A6SL8z}No=΄vK(8d=7o߄MZ0=פ/Sr)S6;wzB~%SkcL 2u-8j}SkoCoL>tn؃}wM\s&_?i3ȟiFmsеdf<8s`o3y5q  s<3^N9x)GmOl8䡝rƔMLJ'L ?eWS4u4ϝZ 78gMvS?=q\5a]vi-3vhbMsɣ2]N4Lpq@>p3c M9S}[4s Mp"<ˬ*@/)|m7jY;64O]诲/.W;f>݃vǖ$zkh k¿e߲ "gOt9}Xg/3<2g$M1q:9v9s#)AߕSKv𛜥AQY9#r6TSw~1ߩٍ'W9r=Dqě:YMqCȭ˭eAMڝ~3wml- k|a<˼f/,xz^|SwyV@^y-~x+^y;:7?.]~|y .8G kD V3\} '?lc|(x.)/<p&U􌅥aK8O Osz` A>wY (K/=ߞ{ s>27n8C_97t]7~9UtE͊Jy(:u}mąT{ʿ-uDm'M aSɃ]"wy*>|XggZūɳY8'y/}nJ;%K&m+I*s;%qK/]RIQI#6D)KރW-u)7ǼO}6/KowW}1wO(y/2;J+޾t2cKy/('oiy_/=}zݥ+>uW`|ޠZ=R9KWǽ(2dY:xpYzx~c=QiI{M}pGʶbd>9SYy8ˏ:)>.M7]*B6!Xq$|0 Ǡ8dE'Oa}eD*V򝍊1Uq=߫q&o&|Q*#_u9O'YT< ^T1HVr畡uwZ+BOU9^r4BOR?Ra{1ߪcnS}|yX{x^U:GM[Iy迫ࡪXTUݑkY}/vP@裪_vn~}GQ ߡ}M5nDZ956ykƁ'5E>O[wkjR'sI9,+qj. ~kyYsݣ[5w~tz5=I IyVF5oT;pۚgj||q1~mvX;x!>|\#!j=ޏk-dX[O=f.=v98IeྵK\{373 y/}w v݅ڭ~V%._nݵ"J/hubn0quF.m3^8ΏqcƁՍGQ73ȓZ7aLuK_} 9uP^wJWW}v];|n};\-έnY^B֛u~7߿f??C {=kz_t_ R~zS>6acl0wxά`Quְ ~Jh7w__7J˰/GntUha߂4|MޜoLnvgBd?^D߶oaϥ6γэɃ8ҏڼ5NoLF5)ƩЍ&JIAپfΓ%4<9W0 kh=}nύri| iG\wߍcwi^jڇ;4DҦߦͼƠlD?ZReM_t>VN1nSiwρ5=ՃiAӞ鏈鿹<ϛ&Ny Féi~%u` < Ⱋgܜu\HZsD ٴݼG)o/|Ûk7{xo#^3Ӌ!N`9ZOn9\XΧo2 }sK돖?dgRF\ZK 댖[N[Zzi9|-RZFGr]oF(-ϡn;FOݓR.5w#ӉKP^ oGԏ&i2vA [|w'yN#Oyvϡ/py/zŒ=r-'dQ7踧i7)~Sf~b{tѬ[iN+F}d?Ѣ')/!.6Zm%{%蔢g<.Awd ]?z=:tΠKO}s~Fw?߳Bަ|'q1=/>6Hccǿh+;v9l)g+'Vw=~ycbEQijfޱSeIb-_J xϏ]Bޚإ5!UkkƮ{[cH?8wK֝qX3?B?-\& wnIC;=;~}-ޫڔ_?t9/3G?Ŵ?}₏ǽC f)Kɗ|7]BfnA݊wr;R~&q6~%_M㷬u#XMٶn)r=c[jѻ3x>>Ks#Ǚ {Q3G\%ntpƎsLq V/ʭlcs>LGoBY~$\D\NoNtaCtKu3ɟ.e]׻Q ۳KՀ ˸O p{uɄxx7i)uҟMqѥL7R{I] z״->}(mӦ~>&|)#yӝmO~9N^#tG#ʜ S?r)6%/d3喽O<}lʇ訧|FҔ?/4vꁜoS5S]Y` MmD=u>qVSAG1)3L|ӆ;Lsޓ8%WCڌ+̨C=QpۛL̡G,xGgW?|N\WCM '>mz} fVߔ:'c͸ygoc真n3.?\G y_At8 -x[A&@Ȃ/` FK啦߂F_ [p/8pb- VظiWx&qW:3@Qqq=4nTR7^wC~7E1~QˍKEwr=Nc[Q.jq&y[ca+'^ P O- %cKVS\jM*yߢ_/yxǗ<{fJ'y}Ygz~\‹ϛDy;<4fOđ S':ңN&.}q.[newj/W?^R^_nSwRʯD_1q6WʿXHlUǕl_ǕQ?|2ϛYYQ^"Fcry+b*"i}wLUQwcoI~{̕SȷTO\ie ['~L@+e*o̡;+'H#+_%V;m[䡭UjUW %ΦjDS5`U*SZ|NGXuLUgRk/%NI4T=KGU%z?uz4āVzKk<իד kVfÚ[՜̯f Q5[il7yZ͟~k{~K~k#A6Ԇk']!ڹ䙭!fm<{}j#j jLk`]Sk_ @>9Bg}ɏP7 ]Z릁Wyյ>~U+3ǵ vMt}rf~D7G}tOylW.Y_7Y՟ƹ>~ #$-cW߇? ϹE߸ϭ2 7p5"~9dOs)4~)uF>֕حj#yғ8=yo},-Èk9%<̿%3bS~L-W-w$^ݲ%Ѝ|'xÉlHI4ɭ\kgj= ڝ7#Z(.Z?nݲc{yi<7'm%^˶}6VF '_m ۶ktD۵9i[I[ȧvt:md2wލ퇓whۏjOz=)=d}U9Oپcl .'Oro헑 ޷Nо*y<>OWzoe7Q>OtvH_;O^D^䈋xj)O_1BDD2E"Y}//b1Y6HHO}[>^v~ nYH+M5\s kiC\ߑGȻmB/ys<ω|0v[jC|?5nߏvg 7<ڳo4f#xEq-ϡdt<Gtҽfь,,y}S~ݜ̣j7y8FO%mt q30q|wc'G;%э䵌=?|K~= \=_zFIg]e8^#^{sR_:0^~72(zԟKg@?/%~jWӉ_z/o=$~o>N~c_f^?U)kݱU|@xiCME>y#Mk({'ܟy?:k@tFzV'SiNH㝽g?q<|dN<ܜ9If9r9x9rys·s>gՃ2k_RY܏Ve  S&AjU#:0<&xfN\ZhzAvsss—Q>@NyrZ5rN2\9q_E{z|G*ӹ.\)w=!΃ܚi׀>7o`^=j^ _8hs*/A /p4ݼ"vvvqy~ qyq|ɻuyoGߍOO> O}'Sg/+tOLM3 @RpqIܷ #/)XDт{ &` \$yY ^,X% )(L'ΠG pq /ހ?\=U,5we<>=Eh.zW y)}}hw?_A7vœyG|B{ġ߷)M%J c}E7%nK(+/jQD (D};'a|gnP`@A" ` P*~z?~k?oZptW{s %w/(sl^7؋ݰRΛya85-~o?2g{i~x n)[sW?~ ï U}.  vX|V(.yPǼ^8 <\ W/|v;+j1>/H>EhbG>Le-@xel~/JƋr˚f̈́ZRe/(ۺ~~Έ>$n}zzߓ8 =߭<ʩ| M} `]^pP'*9ߏ+a\v7="_yƒ7|hgLor&=<~|jю-`}uBP1P?kE=*{"b V/!MK_q+WcJ̧+ן//?c__a__i__e_۷q+ϭø.߯l{D蕃Zc`VYIM1> E[+Z/|ABWˁWz{-4V]^7TyJfUcoT5aUU!TA{o얪?oիz뵪}:6,ޓ|u+Tw7EZ@mVOf/p> ]N:fV? ʙDZs Y^yת~e ނ}0w@vcXWx&Gll^k3cjzbk5crgwƯE5w YTJUyؚ7G-j޲vϫ;ږkwxml{T;j'aڔ#+Z[+Um]z='R]t]\x`Cu^T'{k= }<;x._ݰn mQ͐)S|}J_YN$ߛvx_v. >϶Ok8nuaݺk[wv],AH\ ;PwGhG<= -q˨ŸdQwٰߏsQ@_e_[ok5$s *اN(_r #F+PhWԧ+&BdW'Ox&=ˎcݨ %fD;兩'c*\ <ҍ6 P 7(e_8 6Ŀ ;^?eZ\W!^{ L?h ɶ< G p> _$<}FB\oG. <s , }1WO} ,X |0kn7v}֬=|??;!~ڏv8ς _O1 JaѾ`=nm{} v( vU$ h/reĽr##8 1' 漀zsa,WJ[nz!lp썂waD9]|DF@_| /Mp߈DWއ|*i߀x7}mzp}+Km x=w; wx?=wh/~F7 ~ʃ;_b x= 7x8bw|_Z? 9lC/D+~{A( #qߡB/4hoh( (ǂ_hehOb |A(oUx*P[_ɡ/~3pЭB3`z CsP~ςѮ%z1ԻxPy֚( +͸M_[ ݶgP,`ߗ{}ۯȷ{vc@C/F"h1 ' ~wCO$tvs(?|)Ⳇ["ܦAy]ΰK_z+',7=ku`u(9 O@)_v4g`si.}|s%j6s7O+G3F"߭nh@돾+y%>y}*ڱb&5o~yG> 㛏GDD{EwiW"޴Ei}L|wڐX^abiɭ NwD53qMrmZK9:RQ1sHv{!؝Hï"!,C '*_xkhTwNk4G_'hȨ2G|?5`08, ]F܀_U("_t1껴3p{p֣ y9W0mWDs<~sz 솮tN|z]v.t}_?r!<<_O oYo<>C~c4<^ Ͷ}g<Y^I 7kr5Χ |GbOOɂlʣߞrsʷz5Y1RJRLݏ F)i=Xpi#CO }"iewPa`)Y8i1ĉHVCwE_|gm;IKq8d W3u[. ~A[L Q"]FKe;Ռ hB<ǁ#gVGW˸{̖ͼ^ȑ,=U%dc>lD\[/2!kf.ڛ= ;`G=ag/|5,~sFљ:3NWx"9U ̩G ə申<~Pγ;ќ |3GϽ+v[ν&${\ն*Ǿ#g(o$;皷q=sE_ϟ'1_?=Gl8/a 5pD`T~=P}w *a'PPy[_clW벂) kݰ.Xp_-@WoY}(pg 1;- qt =gC/)\y9O[|EmmF\>7,xE p'ZEQ})|!-c+zb2EϞAךp}?CQY* sq+mxQ-_2'^_qDŝw y=않o}`{~-G/,{.Wi_ŷw\<xŽxp ü[ ;^K+żQ|Žqҝ~_w$KIkmnWr ЯBu,umIo )x%V Bĭ-'_dW+9 ?ҋfp>+t K EywCq77t:Ζފߑ۰/>žOi1_鳏 sC-]wNg]2 /e&eagP6B-cz<&%lUYevŰ)"5o*-Zv/eW.[宁r)*ۃeccѮW΀FYx[y¾;b; <7wK!ˁ_x#]v0쌽79zX bxG\q~(gɽO!Gޗ@-X{#Nqxw"~w/˽`aqG@\ _-&)o9WnK7Qoy[p^ɁB׿8+<Ty6։ +``˛/|gữ^q_k<[))E!+.Z*U!NE +jϊ*fxjq// +6G`TD_qv_O{ 8n/X7U]ZEC⽪lmvwSyE(UY SV&#MeA/|XwS7+w8`+v:WFJt/TyW1P_uU$WpӪI8 뤪>Q }mdUe/ʅOϣf)Us{C'ReqTpU؏U 7jWϮ'=U?uVU?{'ێTq۪ǭ:2UgS'tWB<ZNV+q Y[݌8շONW=zK-/AKA˩ ;ر䉅zlķv[Qsqrj/B]|;#{w홊ρG> }> E߷ $%(xQ+߯3z uN]?o])z_" F{`W7euY/{ W{_^mrݞg%?j\j65};}꾵)ćշ`KW"Y}[ַ_~pwGD{'@v6~eķw?ʶO)SOoiס}pݻlYI? x*p}N O/տ<)?E+fYx>MQYohJ i"#;wƿ"g!?G*W~ G!S?#9^%pR/xO>1" L]B<@6`(!SJ TTg Cah7>7pZw̄~9lDv=}_ȗ@_fN->˶3ݡڿ?<Ԗ H-юMɶD{%mGz8|>9{Ѓ- =yQnVQNW轟 /8{H<8?) *} ^gu{p ;G  ?8cص _G;_D=uOpЮ`J?D$-\?%s-nKĻ.@R5 .]Y*[X_wD6"IF}.@=' Nr=GE;9E=\ |y-*Ľ ?ߝ˘g_c> p8q_ vp$QN,p_y5#jqL:VXcΫӱAǦsOST~<OST~<@'P T~H)}"OI>'Q$''Vc+t5:ؠc~=_/CPy|9Py<== ړ@IPx_OMbP1i4TL*f"> IƤacҰhxX4<, EC¢!aѐhHX4$, +S]uE]lQ[ WcyZGE}dQYGEߢo[jS:}9бB*ktӱA\Q]qTWGuQ]qTWGu9?5:IԤxjR<5)OMO+J>'R$JD(}{q"ӐiH4$RRRRR_R_R_R_R_R_R_RSSl SS Tfiұ3dSD>VPR9V$R+ԫf)f)fE2 RRRRRRRRRyRyRyszz))))P(P(P(P1gKBBBBBBBBBTeN)N)N)N)N)N)N)NEQ8PVrp"X|"%KtG))))Eu:6ؤcёB51ƚJcMXSi4Tk*5ǚ?)))))))))))))))))))E|P))))))))))))))))) )))))))))))))))))))))))w^CmED4ޥ"TMBBBBBBB$$R"$ax ax ax ax ax ax ax s s s sc*&&=˧#f\BBBB"R))))))EiD<"$c" tѱ #TNcбI[eo"YE"Q!Q!Q!Q!Q!Q!Q!Q!Q!Q!Q!Q!Q!Q!Q!Q!Q!Q!P!P!P!P!P!P!P!P!P!P!P!0rlбӗ%*%*%*%F|+1*1*1*1*1*1*1*1*&&B      ! ! ! ! ! ! ! !Ia****F 2T2T2T2T2s9 |||||LLLLLL9 P!P%O%O%O%O%O%O%HO%HO%HO%HO%HO%M%M%M%L%L%L%,rL'RDʛHy)o"MIaM|Op5p5p5p5p5p5333333331Iϙ......----Э1CS"k(+N̈́dJ`cZ,ȬxXQXQYXY1X1Y#dO%dO%dO%{4P>P>P>P>P1=){xzRWQ%P%P%P%P%P%5BBBB1C7@`D`DCCCC@@@88888ȱs/ƩƩƩƩƩd92JJJJJJJJJ'+ +*++:++  TR.rL7;o/***************Ⴊ Fiȧȧȧȧȧȧȧȧȧȧȧȧ%Jx*YEJxS5a*a*a*a*dJ{cIiOEӰ#LR%LR%LR%LR%LR%LR%LRh     J~*_䘆&*****c+{`    &&&&&&&&]v}* Ê UN#FFFFFFFFFFP4mT mTP% C, U0TPu, #4T T T T S]'R]4N T T T T T Tu42296ؤcOOO1`|1DUUUUUUUUUUUPVPVPVPVPVPVPVPVPVPVPVPVPVP1=z3qU qU qU qUɪS%U%U%U%U%U%U%1F-[-#UUUUUUUUUUU#S;i,,,,,,,J*&-f&/a*a*a*a*a*aǑcjmƶcggggggȱIN+,---^ 9h`[4----P (W (W (W (W (W (W (W (W (WV%;[ttttttttttUV%[lnUӣidkdkdkdk9mFFFFFFFּYj5%5+ +*+T{V;CFFFFFFSʤQFFmkdѶFm AJFFFFFܑcjR"5);4|ӈӈӈӈӈӘӈn4444444444444"CtFtFtFtFtFtFtFtFtFtFtFt]cz҈҈҈҈S]6xm5j*E^44444"rzi~οzVKCAAAAؽAؽAؽAؽAؽAxAxAxAsa;AAAAAAAؽAؽAؽAؽAAAAAAA`A`A`A`A`AAAAAPAPAPAPAPAAAAAApApApApAAAAAAAAAAmu!!!!doAloPnpBq Bq Bq Bq 7Ȗ t t t t t tנdE$355555555554PHAAAAAAAAAAAAAAAAAAAۗmmmmmmAAAAAAAAb9~! , , , , , #h0/0/̛ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ژ d d d d d d ;d B B B B C6 $ $ $ $ d d d d dʠ@Lb22222227272727222222222222,~>d&d&d&d&dcccfcfcfcfcfcjbjbjbjbjb:b:b:baaaaa'LcR|ME4Kݤ/uMR7K$CMj7P$CAM7k$+>bZoWI_&}oWI_&}n'I&}nuI}&YYogI&}֛dgz)FI1"Lar "4:0 0 0 0 0 0Nt#4*0 *0 *0 *0Ϥ&ŝ0c----!!!!!!d"hIЂIЂIЂIЂIЂIЂIЂIЂIЂIЂIЂIЂIЂIЂIЂIvz& & & & &ƙdgmIq&&&&&&YdfRȱȬxXQXibbbbiIq&ƙdgiɦq&ƙlgbbbrLEBMBMBMBMBMBM(bRD"{>&. K I I I I&ٺdjiKIIIIIII<̓<̓<̓ILILILI&֚Ĥ'&=1iy0y_2,%?Eg`d[xyz11h$aM261111$`"t"D$$$$$$$(rL_@_@_@_@LLL,,,,,2!Ȅ"b(%(%(%̆-2l"aXDGYDGYDGYDGYDGYdBl E&[dB@'P TqU@'PʼnTN"H$R9TN"C7De&QIT&w|De&qPЊ?ũl- 6"`"X Ţ,A"[bl-%Ȗ"[bl-%Ȗ"[bl-%Ȗآ*EW(EolqʤB[d{lEXdlEv![tZtZuŢ+mC`6oC`6oC`jjjjjjQX-Gmx!xhZhZhZhZXŢx.s(\,I DZDZEDEDEDEDEDEDEDED{Gi8)l)l)l)l)l)l)lo/`B񰢰B DtEtEtEtEtEtEtEtt/_ "-"-"-"-"-"-"-"-"-"-"-"-"-"-"- Lcq`XƢ4ImImImImImImmmmmmEvm[`Ѷm[@1111111:`:`mmmmQXǢ],u],u],u@(ND[D[D[D[D[D[_Ǣ:ױ8u,4TP) UOqqqqq(&E1y,csBY Xd)`EY Xd)`DщKFVY Xd5`ՀEVY Xd5`ՀV[ Xl5`@$?d(`E Xd(`E Xl(`ņ Xd(`E Xd(`ELELELELELELELELELB """""""b">*4ٶٶٶٶٶ4+CEEsEEEEEEEEE~,cqXp?8܏~,cqXǢp?BxzNNNNN?"c,8*Q, $n?;39ЄDXd`9END[D[D[D[D[D[[[[[[[[[[[[G$BYrda%L.Yrda%HYrhda%DYr(da%@o"i5,d+> 2)94ВCBK-90͒C4K,94$CNt&:i)SE-ɖd(91H"9^rFy3%gKX.9\j4Q̤{!C_wlбSӁ%9XZIK%9K62qFy$퓜wOrɡ$Mr6$fMrH6a$$Lr(2a$ ~Lr11b"v]ih^"w;:C$nMr6$jvLr1$vJr)$fJrH 9ԃ0C^#'cr )8GVB^>Sȶ)"}laUBv?H.lYkGlɖBCȮypH =~!х5 B_Ty)$r!!Bj]F!md.CZAn !_U?z8dR mŖ!E Cn^oL㠐?+Ok C&.< ?1I2q8K!!O~|5B3D\q>߄Lr_7_+%@?$!-ԎE]BdB)oSD9S/S.)R^S o#8?F!߫CF-(gl}6} ;q{Dy͐SBtu o=RׯE}[p< 5zuB'Χ r7 n9%I{1 ky^\OoWO2n" "] ?KȌnEQ^O?} }槌hw{ߖ ^t{?B y QG7db>ȟ9}ӯ@ BϺ~HT'ge=#? }Hb?{_m \ߙ_֡HDu|x]1p>B/zUo~JZGM-N'9@1os2sBmOJ|t-o y''|r܇rCIηW [̽.waD97Brȭ/"ۗCO^׳ɘwl|?r"Cyȷv^Ë+ط  ? >/v^W ).L.u7ENBmxQw'{k"}QKlysw!ތ';~'/؉ vw?E5?tO [n wmp%;xHhK~{ y{>e(o(;4>tw/ކk5(zy(s;߱C/ϐ8gf@>e\/ٻKWvCoﮅ~lA݆z?.܎f;P;E͐Ὧ+Sq20$Iu-pݚ("t4 BT<5V@nhwG9_cA맾D;*۽(W_[yr* :$򥧑~bCDyU_չHW"ES,ʯ^)ʫr&#('*{Vf|7Գ` -º=>\*W_;By8_]pwGpdGAuPȪ_pgv@ޏuR¥⾫χ6!@}?^G 5B.9Q?yQC~P4YwC(oӟrukW򿙔,ߊv]h?]$blj .* d$ZF{~h+ߊMq]A}># q}O>_)? O>yzhG"f/bep(Q_}@#i(/ح>X'pʹѾ G0㋒m)3 C}Sw|;s+_pN!??68#$\_v徲_|?ڿMho8O8XN]!1y ϢPnmp(O?6Wox涶Dy sKpQ+=ïWoQhw?p>%%uo&FGX>_/S}y\+|a.E l"Ww;wK ׏ };0댆s~upN/9Bv]% }PȞ3u樐}> a;xRW9xCVyt7>~^!- !|vHm/)Bz&=&ߙ&RJ!1? [2 fȟQBZ hU}rgo!mr]g!7#d;"Xj 9]/-(}+} Sg23|Q\϶˩݇ R.'2n3pT/Lݼp@1KC_[O ?|tg~l[O[z&,s8u'zF yr}8;#+s/^ᇬߛQm盎y=-Ό9668vzˁgO+؎&D;2uO\?yҝh'g^7},d\k12/98#uqҝ|yy?j%eX*g opcqYwκk#FWVYﷂ#7$~A\M\#;2@W=W`~5* Xe!OrJloγrsms{o@87(?w"On0/|; |`|X >#XO /'ް(yOu'.+́Ua^\xs/ ߋ!wzkpg {UճW*bEA(j_DG. hȉ"! GbXXtS2:{~hpyiC@9/7*Z ުKc([,CCn,IEGMH/x]W~,)p~"Iį!3 D<,nw|C.rOG0}%я i%l,QOu((F:xqIJ^r}KÔ,_En)Yjw|Cwn%!zw| ^.ο>ïwgK楒FS5Kc~)?[aZyi7R_-җaQoӐ)Qȟ \Sy;!ƕH4ק=rz.}?AX./FWTq_z߂~@PH~#E;ʢ]<}OQYnX. H7FQnYы8_CGPm)=&-?t%W]z__MڏG+pge'ѿދq+#y {m~߿:Q5z^&lȟvJޢlSqNkDy!3HwxG=6?{ ߊj{-({ޭˠo}|w~;HZ/y@}'1>O⻻$~O^@;;/ ]捣VX Wxhb[a*UOkQ~ŠGq}ynE:g#D+NHybx)3.R/+T܅ybJ\_=r+磼ޯ냊~/<5͗Uٶ(*W^^zE7;,ш| *}#O?p>#27aS9?ʥЎ~(g"!u؇U>BoJc^\5;;q~+ʷgTۄ#N^W^| 3;JyU"]}x_5րL^UaU%CS^sg@4z[Z| pg\ϧYKU/Tuܗ=ÞjOO'T}߫c׫~A`>:8ʿ`?BV_ +ډ]r86N#qFSm{zb1Nκ*sv7ճvB>zy7灻Tz(>oxWY=쵪+ʩ&ǚc n]wMkj&Ž&vN5yj)]XMi跃u)=>qլ^ 7{^?w 5k?^g5g@{nT+uն{[qzQOmD];X*oCQ_kcnM?5A ͽ ckFmkźvH8\\L#EK'՞mW+HT]5X9b}SQo|#.r|x_|7B&"—_z%woǸvo )|u׍eV@$úXqեyM[7Sm} |S{I>uE??^ߡ8_w~ħn՗%ꩯ/EZ7Hb`ҿ \#a`=CmRCzpz(qHH߯ORC < i= MD{&2x?<ʉ'ӟt{#ԛ:dn@Z|?L<׿. t {>a/;@_kaZ35>2EL @&VHqxnb|[b7DAx=?p?聜<8,[p.r2=/ nڿxI`=xѸWgxo(ѸϏz9zqbRw[g?;.|*[%K$q?߈r#}Zw`v=,W`u}AֱiE8'\E_;8 |#C9_F{.v)wBߓ|ax(t9Tvv翄qH[-mc㊡BO<g yס!dBҗ%ePGD=֛E)CC(?FQnڻ_hgg;7b^ )CڠQ٢BЏ!q>m4g^:tGh н DxC`o*d'8 )! |kh7C C<(]-vZ6z׿Hx~ LHsd̻| a)u(8ȑ!hȳ 9J:mǸo)۝3:37b6v bk+np޸Oa/)9_UȄ߉ 5kG`Mź5q?Tͤo>&/IwxȰ}nٞ .~|?1x̅{Ţܱ]sUaW66vEc`=ֿ v8cgi/c{>RWS<.djny|gj|L1'5[BNluX} Wϙ4휤lR9!߃¤c'_xߓ_L~fH?3kLߔ 0e~|q,cݝ]*d!{ah((xc5c&O-GWLݪOϔh)0>RbçJY T=,d ?Xw*ShZKi:m+zZմ nRx:PxIŰZ|a/7}7OFC'O5-͸n-_q6}0N3/ c 37#o3y5pL~732?Lj뀓dD?d # +e;/K^YaטvQXf}E͞uȟ7{G@wN˙ ?1o,^}~{9?+-r= Mʇ) B9n@<]8P߭O")](*;Ӽ@^y) w8 y/1U|}! {? xM~eK@$`ϘXG}Z/6~ T@[A󐕰/vOÞ`cD{ }O9<‹oϩ2ka[ĸ/0;QX;ig gy·DKx? _}I O ]tՅ"!k]{0k!7>h4ޢ ġ(ʅ?bQ=!X_-6 6/޵hR?/ Ym@^xŝ}^m(X.M0>"]͢2w GɊAW`XO(烁?.T|xa(O&$ %Vr!t{E/Q2CQNDS2S t-5=%QN,oV.U^.4%EkOt"}rԄIiF_ -N9 k _hDKޠ4Ͳ!D}eɝ.n{e_?,ra=e_{Omq._ d-1W㍁]w:\/vR^v.o؃tw^ x6"O"߾(;_s{W)~ʻϺ|@(|87D "ͭE]e⻼"j8_~y׀ߨzEyC!?ŊC(~*pvV< b1pUx%ZnoS pooU*Ry1޳KgTz+~J+r*Vw dXQoe= *Wcu_Qϒ(g~#R'v?~:¾ʨWU6x1ObLQ0kU_B9toEAa=RuvU_{V=0AՓN^2U/#BXU^/~)^}x7 8>g5W'`\S ϚFM!f3j>n729޵oSj.(;ګOTm;P; B\ՖxVΆ]HwkWk7=P HwBygv. XD2Qϋ_~Da{Uyv༾>I^e;VcDgDNG=sKl]2,#ϡv.ʙ}%B_}-wխ;8~u{}2o\ȀǨ+ޭ^Zo!O}\,=8F} {\' F{hhW{aZ|Qϑku[b|տQՐ{^I.Rq_;(O.}Waxrq-?z sЮOC'"bDlKp pգE;ׁ_ p(7od lG [ 9~:>܍r a.= צHȦ&7N9< sx6oYﻼ~Ϟ􅽢g!鐷~q]]KV_sӺ{IkOxyi&+v\L`pxV,aW5LA k~kW= ℎgG~>~qc 5&1c~Fk'/Z7xi\%փ!G5~2浄j &CL9֖ c7&šI7KjwtR3YIz7IOþ;iq{oqc|Pc;O{}8?9B~㺃W7߁x>~1?\ehB.ʟxxlj|' z'<0(-W&C?M:ɝa7y0N^'osq&2)5%;So-S]UxϦ ?)_bOnq|R j|1k:uBZSww\<鿇~Jtn{'ed!dxZyJuR)_dCtRżr^zuz|+p>=5xYjAj)^0R;6uS8 kDXߧz6:շ <-qҦ!Z-I[8i~})Q.Mt_NOy' ? D{Wal׈~|bՈqFHxO12sȘgg,#BƋ3 BBX?eΌ2hGfp"{d6"Z[!O;s-dn]i12O$ =沆#nE|g&; ~ٽᷝf`ḭß mUeϝ}%W!#U~ 9x9O/Y(ms>sw:z{̝D4ow//s7a}c<=Jy*wyy=>ίl }?ֿy?[w o~9[uh%5=g(?5)[a]Jq?~ ?^,s\lo{B wa';:;7>ÅO q _c EEm`Pt=gSEe݅-X"H(vE\tk*}6w*zEbTtE_a~+u ~;u`]T\agvlXw? ⹕ sIw_sI?p~A:()x+ H?xĒe-YAn5cqKδϣ֝X ,DI;T:qDKs˖a)y ýE;Jo?s靈QzO /h?o:t]oS~ ңxJO`]^&yDkw}IٰH_޿l~/J`W\l&ʖ%{.ۺ~(o v>$E}>{XEAp~p3'ٛs7Jxo}>ѽW)OTsW)wbyoW(|*⏕g}/vz|&=nɧKWWW?Tø. ~*OWj!WNe:|'U6%U{ʻV>r!ޫ6 Zu%cTF*TWy1˪& *[ >zw6ߏygR}_7k3m_qk:fLL:BoZ[s}nhg͂6]5+Wuckx`>y ~N5֊Ut?zbmKõW;;jv$xI Eڔ#֖~oUmL=}.BEQϹvnkOuBW_vjwϫ= .]vouú7~*QwKAWh/͂_N;~ߓw|o"c~_|`V.}Ne].]3u=`WܺX u.e(.(/; {yP(͍߭[ Ѻ fۿn7Sݷ F݉շ<"VU~`_~&7<%Q?;A\}ԧn{?A6E{@x~.;~d]z!~cEyr /ɶ<߆ ykwLj?_=Eܷ^8G ߍW_ЮOoWHvBdOxQn22)Cz_|7+.@=UQoox'sk=RH;inFhߊ/g@y/ڢܗaWF/ {d6/wTr>?X% D%pC`G__`7@=my28Z,W:P@p m y:07 w]!xMEǚ?x/Fi/^~-'6?f_Կծoۚ5Bgq~3p<ݿlD;N,QϹjϩ"_P  ^vHlx'k2P'TD=EP (w;>J_p"` 77] Y +X Nvpx]G'Q<|W);>SHd] Z|W=vH~+i{ᾶD=[`܊|q.;܉=8q?=wh/~Fܰ7ߍ}~9^ x'G{O WCuwHBmlCvX"еs ] G]p=o'>|?sNxObG ~&otCރ_~xGO>b{'7r? =7_@yy6_zCۥzCgĵi^lM򂨧aq #lHTC"7;!7E6d]cK16sjżЀ 7n:&s ֭ +ΕmpYĕixq7o 1 b\7lHO=['H.5kBf`gpD?5N#Ay2 _7^4RopOUD;kc =!vFȁ~n}u؟4ʀL 91,qRgȔ+٘}4 Иy8~w1JF?Ρ=sA^[?Ɨ/ܷ/qpßAv0M-gz 7u+kod=hw8|4M}SSj*wPo06؅ϩ^ 4+C A-PsKQp-6{ ĉoډiWx.M0ni ~!7?lnZ<+*}6_"}kohWu`} |%ќq 06v5W?l^s8wr?c$#ߍ .{#(4KJ6}DTc#MּvmyG>`,#]D4 uZ ?](ʛ~H7xiNt+Lؙɭ NwD53qq^/1}ط-sNlWp?ȳ{X|FŶx-~Z#d9B> {6|ۀh/F^̫ENSvڙMc_ ݵ$!{ 8`o-iO'"oP` ؁kÿa<|xu7@nCZ1 R7~/7 9䓭Bˡ9D8Vs`fhpVqa?a%窏QohoĽuX5[}w ~6[u?vha_PnEx7Z9~955xN! Vq" s%s/#ϗ_OlF9㴧BY0gyy%U[2iBO {v&ãa1SҎZGT71 6觑2Ցñ 5F@\Oe?c@uG :>*vt4p2G~l!}v&1}\cRCnsW/ߌq/G&~(T ^@4|߃k_#BcK(}'̇LwJ,VG?$#~E 4f4Wh7f8ca6}Ό7qljQ NX Я9 ~mroY(gM;_]ēcxqGz&%T;I ~:vo{cAOaW8甙[zrĿL.MCN~L ghϐR!Cރ:eR1S; nSjpԛ0_o [\Z{a~ci[It5Vzi3nM[)t>,"w®,7wDOK?!Sq~⟦'n&}*),CoeͰK=}Icc(1H̶z "M1O̸qd3`0Ꮣ1ߍɈǜ1 8U g{~3/Ӹ9z9sS2}'/(7V?e>ww /=}3fO7GYd/ɒ@Ub{ 조cȎKvzeg/*{Ao|@{ތ|BMk3]eڀ +gۅ`q9st{aD9;lƺ"g;S;p# 9}Srp؃^uXn70/(t;+z~ >>#緆TuL~.g/|vHw1ܖ ?1B1 u . TVx2=223m=a/U;y <ׂWc]T=~ ~ څmY8vu gb(S>8ϷMZ[Rq ~o ?k7oE.-jmc~AE}_/Zvd#߶h"_MG? Gxπ-Z3mE_h[ ܢ?rPΟ*nM\/i>Fq,T8QxV<#3q1/Fe ޳n/]<Q_/^U qH}F/ ?5g^|v%-o{IK=/i}J:atٺq>zW]2%2TJ4G%ñ,$tB1QT4E9K0[rzyu/fhOxWK"^liKoDy7t">;ҹ |^iKp2/E}])zm|S͗߂,ZPe˗MIʒaW {V8}2Fl7R ?<kîew%4u7oqVn%>lu;LݮPGޗK;nUu?N"c}<~"u^ BoxnWr2[®~Fю!OK#sO>.S_ߋy}>N)A7ێ3qtJ|֯Fp}n^]Wv|r}xOGvX^ {D~EOfC!ao}lx^=u0Y!h~縮 ΅hl ycWᏙ =O!P?3`""C`,S׈, T y՘xNzķ oh\v47 ܊Ё[W4p;ޟ]~`?yx'B_{sp/h_3o#KCă ]t݇{>Ga/hQF$s7 |%r"UBv,drCjE9AuJhoP~avar#1?z  -8>NU /Tn㠌}v/md.C`galm 99 |Hab\8R/EŎn y 5&2b~km q1c,e-#="n趐s?!q=-wb{#&@xH8ˉuCIՉ!nhk ?hgSH.3Zټ I/yh~c>v'ccxAqa9n eNlܝWB_~;ƏFI_DG[vewjB961x GOʉaG7Q7O>훸( ٛ#I!1'E?N LᰢbtL)xSbO/&O[ f̧;ɟn/}Lm;7`jWصO ; Nx$ʙ Xf^JM)zG\g[GլZﲬgaW*~dmߑY{1e}zO_u|xvܪyΎCv>_.^\/Q~)Qnj{dojHw2d$# ;1os2sBmOςjΣ3myVHsYsIηgV!so$w"x\uܛa;Pr݊8+o>/<~bdy'"vy;my{0q|2ۉX~^).LO_|q oyc'?c;(^,I1@Oge6 ,9 KAr9#fs3ŀYTLujϼGXxrs-ǤݵH}=Ӿ|"}z<Gz D_3C-=`z4S/ ^5} \7<_<?܂_r ˒zq< {FLJq?TC|b_{;g}7_db 2kox藙?T慿o e^ ?$ȶ_zGaY}\ ̡O2'o˜|8sg=2!|4 dA܃2R /8g- _V8YdMV_ʅجeې_sX='?/__j)ҭb:ߛvY[PY-ͺKMq7 m#u?􄲞"x0f}?Y_Z7891  a]>Q쓾Hw%)D~Cp~Jv x߆OA~;sXsby6΋w97Ϲ^_NS9bz Ɂ__<97[)祋E>Ǭs/9>w"}<߹q>Hʦ з̽8B6ÿD.B~}܏F|r~^ߎ ;sA?+7Ղ0Nvy_;/=Hpeדw5x׼XVv |ycӑГs'f!ϧ?Fq=2q{cA' w"]Acps 4xa^jAOP0C*?LӀ̃}_nܥp>e ? J\/<]as*BL{f.DLQX=8wqSwp:I׊.z녷A/=·Sઅ~TET|YSQᢅ(z~o./>sxb xwq+ }[߅Q|/W_,>hI')i,JEsJ~E*mu K3|JˡSxH_zOa?RcgJ?ye෩ZSY+e'W}(O̲1E˦Al-;;=}r3Hԕ}в+Q_ppJ-s}!œoR$_,Εc|w 9V! o}?pl߈$г?yc[OwQ.7}¿ ~o} S{;®ex?lC#ݔO CQ>zB9'qx_kDyoBs"]%8f}6m8J\?J@(GLYx |з \(_@K^R =rvׁ\ [(Gg4/0&^40 ~0n @yB!l6|oݰ; <0GxCpn=^?C:( 6^GϝUgŢ{&_ӾG!r|'8 '4C_C|Ѿ/% ~oϻ9]4ϣQg;l,N]波]9@|xO. ܥkc`PQAď?nV4yXg`]8M:!~>+.:Qqm_C?†?ߊIE̛S-̉ky ?UM.i*dӗڼA_{E/ <钶ly*xay/Yka&3^EՀsKYyK?\J 8#|Lz^P~9cחگ+r;B-0$A$9 z!vxn'mpMù90Wn~ꪩp;< {{G.~}셰Ëmcyqi;|[R7˂]f\1MFm/$}ZU'Cz'A5~ZLXs_v3?KHQ(_oK%6.)Hgx :În .n) _yt^wvby8:_ = |½]H \û ]NA@K"잻% TѰ2z]Vr?wy|Y_]O@~뚀~5WGt}z8]ܭn]/n]ݎ}sv{xAwwaQǬz=UH9BRNXI-z,ȇ;xo=1=󢖷WaQ~{g읂vƽS`O{% < /z#$l߭}@oO/q'ya3~:зv@o]V}Ov+}OhgOBIoxmq]{ { d>/zp#8}%}%_Ո?_|C߽_#R~;']^;g%u\ /G 9Iyp.Ee%6/I rI;CW`<&理=+~N7EA2QeB|nc}x^}!ݾOd3Rƿoe|c?{̓~>Ur-I>Xɧn/O,n;xwr&F<7Pnk$G9gKm.pпO^|?y#x[΅|PoN^dདྷ.?z{OSr&ݔ˥iȾKLɃbJ1CL)י2L)?`>Iُc_䁭 $''(<Lm {ԶSa ɩC0Ϛ: P|I~-S>(zݛ35RB~uiqhA'oǠa>Rs:  ^h:h m~}ЍtxAܒAb]}7xAJ{ 6~&pAouoǹ\JFƟqg_`76;C5Bc1`̧CMX'H;! y !O& 5>tȏ_C~ƾ8혋E<K<"F8aZhz U NϕzOs(ywv?D ?icߕ%UzM<v'Ov'W7_&hz 'Mo {tzoLO(F'ۑOkEx-炧M{1ҭ}Doo~7 {]nLI; Nc; 28ן7|3>~щx䌽 N3cxE92O|癰<oVH/ia>Ό>Sfȷpfx[_+ݒg>V"%_3]Fc2 Ay* $e> ƾ49<e .K߂܏%?5p*Uϲa;>/xVk'gS]HWY ;\ϚΚ;Ed->8k}~;߽?ބy{\|]K~j/ʑ] $tH~x+䬇㜍͹;𽜇=g;Ǡϗ9/A<5iy6r<5{z= inC6~i݂ז;h 8~$ e従tgC G7z7;3SHW[1-E;!\}l^C?/Ѣ\y-p>Ke q~\7F#,=sbA33汼zo@^ α?yyk&aț ΁|u{{vybyחlx󾅿ڼ$_~,x D>a? h~#E;6ƹ2pR~<'@61c(2-(Zr䳶U:dkya߄y>zk7݊s%owl8$!sb(?zV\ *_~|iY@y#E- :Ἇ~++(|XPs4 p-\ۂ2Q03\,AJ2 6{`#` wV (RܿG/x9O(xU㜗李?a>.˂dGBֆPɧ3f'Zs |^;B1dG|'i87㟁qW1oz.w?(Jߧx޳} ?_"U;Ω(:j?{Q{:@(5EݠS4zNE `(ʅ^XQwhH7|`bm^tK6E`=/ڎLן=\ѫg;/`~ ŋ>~Y ~nT#W\$-n?xō2VȧXgq{W%_ž߷}^_Q"U| \Ex+΅/'#sqEy{c O p+EځZ)җDyKNk%+i~)DJỬYx1^JpRItOQz?%`7Z2dsJFzɭ#,@ڇ+υ?ҫJҫ௡*R/JAu{}--B.)}|S+*}v&K_SL~?~Y3zÿoY9eeYHw5C&tᏰlH TK~~w"x_ymHRAzp k6!]3iO{HHq%9^B^tjwأ O{B[ }Mݧwcno"2zM?3_} o[¿r[HgNw_Ϗ;'zgH}gH Z#נ|b~2q}rZw`b_];]u Fyn.o Ŀ +{t{D_g!ʳ~{77"}Xy>-.VwN|4T30/Rl(7w(_t\=?e`s=0!~b=o%)p[!BHx : D؅oC8>>ľ-'?F/B/% a<<?KwE>:7_<'x}ga?roɈ?+"~9ՠ^ `\xr ཯ܰ<*n|.v}R"{~AO0{_/+ ; ?V_}-o%jyOq|pf+sn,-.: Żor{lypˬBV?LDQ10Uz:yks }w=̍xmf|Z8!+'cOn08둯.x+{_>]% \mЏiWo: }(J+_]:4_\%w5Pb}q129ōm_ #q=>F!yw-q=xE%eoMX{70&{3CE;&;8ry}2|rw`Gcw%!;ՁNCzECﻓoPt {N aWtz8M}u_Y=sCY>r!쫻TUE:iH˅Vn^Jn>{+I(gI)t^G]Aw/z!=cQ?=s|R/{w2pD4ൽ>PmG{\ ;?tg We~, ;۾#;~nI|& 5D|_'ߑtI{%RdŁo^!Y~ЗyC^_~~^| Fr_E'%kێx '_>_䮰L'_-NSNr:p v7)#R&e+xʔ[D;W@%5~65zja8+ҟп'~7p NƼ5p- ߇_OaZzb؅&nv7wC 2ǺڹH-hzPb><\o kPC bx 8| z ڿ@q> 5 9C8"^}7 у@?mO?vECZA^;!CCHRIB>ǐO y(ϐw3sZE=vM;ⴖi38+։R 9i7a|1ϧ} }}w~<~K6uDm>Vr+;wH?||'Yಹ;]Wvyygk K+5`w:Ey2ps^_'7W*ywͻZ^]OU>5[޷;(NEo.*gQ%&Mt,zEC_+Z+)E}*Wz@ŧL,@q.v8vEř )s7⽋[o]Cs\>D~zrXr)3t+I{$;Ғ#<,|ɣyK_DWп,UPzp-mgB2훋z-Mli/YsPsO#_:ķ-%ҭ_s\v*?ҝ(}Yɓ [w+30^6֋qTY_eI_q\ e9/_J)ҟ.\eWlCϵl\q[L)ѿ89OB]xN')Hw3wW(|+yF#wyw7 y~l!/KH ~.}V1$0 Ϯ/d/U3ga_Ϋŋ tW?'r@V2y{-Ww}po=g}[~" {}}Jğ98Wݮc'}|gH/o__(("?ta?u~GE/K.zkF?߶h}X@D_-G9zlGb#{ޏqSp Wy!MGB~"߷Owߌ D? D 8O\y.ad y#HȪV<7O+"'0rҏv`~-mwuyrh}O8(u@7gx~jW7Gu;'r "],hDy͟Gl5R4>G+'`v`/) <`i P/B> 8)W5Q7>!݂{.i"ʵiEǾD`1$o%(oIߔ_+pȷ͐^y{aWAvt [G<|ӠTOQ>t򫡧\>sT7QOd%g9k|󷸾X:/F>1ر?x_:UAVS@m7?e%;X+%rVxoPcxN@y=f*KDUcE8icV1~Iw_{_`TqBB,uzW{~.ʹgZ8~_ywCOEy*?#x@eY\_sGWuۙȿ?+1$K!Va0G[wf!8H_B;'.oN} 8RÓqpP{F.h칭a_|0^M/Lӝ߭r\0`8O4$}oD~}C#q>;=]z}>ļ;۷68o{׷~7e#B o6Ao.K_`w9c> ;/N軧_">~< <- ~C!il13PI+uҭC>[jỴߙX?y$kF2"}'`x_aG4x0%c@Bf؉4CCN~FC.7\!X́G1[v&4zZg{iV>~cڳ]!?OBz Z.g ]?Tͧophy {;?J߉0osڎoxX22[Ey3:}QF>dc1FlX<͈7~I>;vwٙ+ !{ 2&{~h+Q9W(&A_N3S0;إ]v: I^# Ч)BMR nl=Q/*왋_a^=IaFzXG Bo`_Shn$>| ÿQ0ɅelƐӠwS8xFƅ0^Cϡ.>0 Vpi/n ˰o^;y_W<vwPOU /|KS/KN(t2EJO@B7U*`[ 7uJ+w*߷(ݻʎ}_ˎ`^e-`gRvJQV8ߡ5~[.y}AV﮽W6 ߏesQ me+`'[ -?O`^W竇sBf/{Iِ_򔻐T;e}gAw5|5} ;ߍNs.Eڜ'҆]gQ/ oDL z>w#:1W,?ew^R' h>||K~oA3xO:Y?~;"/)տ|*⫠__ ڿFod}|oI|?ۈBﳗQ/E9s~(D~-~PE1gF ԇX_ vs6 JD*mq>ic=WsF;n~%0<7F!d>x@!  v`^~7=p 0x^x8(xFQ`=6/]|_ GBAW\ fb)-wrpGw u98LQ ,eF }xetṛo|nx_)x߻(C ?wOG> {{߃߽:U@] P޷OGvC"(N7 Xw݃kޢsOO-)o(WysE=7وߝry~Eω;<E~v.<' @<QҟXC*?ɷ!>xNT) Oi S~Mlrzv/'._c'Eogq;܉\Q.ZqT4Yq!fV\XvxNŕ{VxaGXoV:zϒRL4ފb̻Q1*toEC9WcZ1to_݌}Lw%ߠ<^א xqt./!#YT@E;U| *ȿ"}eÕӾ/P9`e'(_pʜU_VUɕs~G[m!߇/YaЃzTܡ^(=9"5W#m$=3~d44ACK^=G|ϛ/i走:]C>׭Ew\îtWq 櫡Ɗz"НGC?A?)Ca'm?|N8n"&k8\T98hX9}|GcXr7HOkX>a=lx.)O߁a3}|~zm}˰Mv3#mr |q}6A {K=^~İ^߿d-9=/uxD{ ?R7">Y$;I?yp[{c3O Ө7=ׂK oMD!l~pb~BꍐUj۹d\\dֿKVҹ>t ^_VIǗg7C[_{H6WTj!~u(uS>F;5o0  7}N{=#ۙ^~gy^g_{Oh enbзjլ;D?.o3ة]<%_^jYf^nC D?Q'v\kqi.qH΁>18c%Qy>=7և)7B:wv{4ˡ?u3i}N&XkmܴpOB;Wos'~$*_ ;\+[c}ky{ CCzh@ϤE}^F|a{ߌmݱ7}z-q qL\q]7~+nA{Ľ 'x/>z0A+!zX oN퐘oxW~c usc:uOЩzm:ӹ5ޯM,v ?]b?QwڵݐW®k*΍:t~/ukn~;n^do`ca݋tO}߇qh=@/\mX|z=ɞ<,WSG+7f#{^OZIz7!z;aГ=ga"w`}>G@y= ?Lg^4/^$׀EWn~(fbࣨL/pN2]}Km&S;ejg˩IJz+]pgPCsk'@j}T|޶)! ~[moa5=?ݐNE!`4$m^H~2"eRCV5E>k}>dCkįxr!|!c_4cCCONgZ;豧K#m"ΧH[?i7~ZiXozؗ ϱh~K5]zdwmz%?zzI0^G'n)}DZc3+>o.񽞱zpn{{y</Lv{ܿ3/}l =L(-^of} ްZ2pg_zd}Nϊ~57fAO0jC5~#@udyӲu߳n= pJC!v7Y|֓;!lz|v^"]v/e|v񸞄sS&pHv*ܲ3_.:]&;)Ћ̞ς%Q^y'{ol ']{p^@no sN~Ng᜗Qo9C9' 99kSS#4k7,gLz3~rsY} b6ܮ :DZyzp9/_k'G!G9Os~r}T E3[[" my-מ ʓ/ on/칽&a;~sW䖣r+;z5P)sgos%XrWC w#aNm!_<zy]M^M"]ySV Fyf {s,ҽ =!oy{}38W&?OK~}7M1bر_BW"w|üu?Α/%/rc#Vk_.pUR)/^"*K+PpWA=SAs ·?ł6TvA;w)h"]*֯TS`/[ X%OK > /)Xz+ n<\p'<=' /kqM_c(<ÎX(X~[x2S{ @ϼ̳pby(`(=8p$ ߬ m]Ki[U;~|C(z=E'>zZ4<@QqG8} qAq͐g(tH_< O@ANqn'nDDObPU_c'E]^fAJN9=%b.9Kc(鐌g甤LId/Ƀߪη(JƢLZ[)Ye{Rr΁,Jn;~߃'1O<[U惒W'^*3J;wC߳-xy~HO-_0K~^e1m:@^xuRZo 䱨}So;ҶW };(G) o|iДT:~J7BtJ9lg/AO-y.O~ W%B~(~KAQ+)ex Vv pO+h+/LR5R&dWe=)K_Բ d&ȉSZ6i&*̅_.ۄ۲1HRğżZ/(k!7Ǒgs,ۏU/7o/Y"|7opT_; ؾf8 \w򒯑Ҡ(27|7q_ UYr?~vs}+d:(g/=[{I8!]| gx }=w@r^L݆͂oA /}D6BsF{\?,;|NC>r> !gϑsP^>K׮A>W ;gO?؍c={(gX}_B+i\ڷbgc֋rOo BK~EH"~%o}Oj+\_y_/[`x/Fc(pSh_Q8$G_ ;4羁|]ҵ>+~7(D^pӑp}ww6R}w߇7%C ڐDyv_||@z"8CY^_h], w# 8o#psW"@{ç/wa;@>xnׯD} @? 8*P*A9|($G%ܟ^rny/_=j`H_q- !tx'#ݺHS7ߋ|n}~ ;>Ds(AO=쬂6cwy]o_,5lG^|/~(3u>x 7|sϡzbW`xaO^ wsy3?)/y&ȱ,^yJYG ~ʿ^tOdqE*a=ph 8OE歊>'"]:>UBZ1oc'RDJxU {(Q6)lQ}_CP{y<^Xqvj;C4Tx*O^Fq{%R>n>:NS;Ԏ:NS{^:չNuqʟ\JJJsǗNmSF:NmSxzNmSv:NS{^:ȿ%RݲԎAhP;ԎGƣAAmmP[MƦAcӠirvS6 @u :AȠdP2ԁ8zp?zAɠdPo27ԛ M zA=ȠdP2hԛ M&zAɤbRO1SL/֤Ea4טkL5&zIƤ^cR1טnzrԅLB&I-oR˛JM-oR˛4Tx.u<:T +&I}¤>a&rz*50&0Eju,jZ8AaT6EgQYzEgQYEmaQ[X4n-VI姶,j;΢,j;Φi4m6sڦmjkڦ8NOϥmjkڦmjkڦmjkFM#j#UDUNEbSWUl*v>uMƦncSq{8=uC]¡.PpK8%u 'ӳjbء&v&tj#ȡ6rj#ߡw?󡲹:Fu 6)lQwp,=+KϊgҳbYXzTW= GTУHq|GE"QHqT8zxzV<=+OJ >'PDJH)}"wqRPK%_______S )O[”Ba3x>x>x>L R7H xAxAxAxAxAxAxPئ[o4hxFDAAAAAAc(L%1x h<4qqqqqqqqqscHHHHHHHHC1xxx           6L00AD418br'9ix<Al bOۦ666666666ڬ~ji(U<4 .ooooooGy]t]muI&]W&4yyy tkmҭMNOlrzb16`1+++CU#Glp <\C/O㗨mRIi&aTmRɃM\l׃K(Lh h h h h h hP$&&&!!!!!bTR!vRrRrRrHm!aԆRvCtCtCtCtCtC*;B C*ġxzp<=8O'P> O@$P> @"Hy&Rg"yR$RЎ*>t vH7!`<8 š:A!]bt%vH!]bt%vH!]bt%vH!*yWqȻC;o쐾q(LyRO!ct=vHءC CvH!=db:b:!p!p!pAuAuAuAuAuAukC^[8| 8| C4C4C4C4C\?8a.s 0*hޡ0ug""""""":^:^@D<8sNfffffffffhhhhhhhgggggggg8a4;q1M4vvvvvvvvvvvH!=w-p-ݠALCLCLCLCLCLCLC8|ç8w;w;w;w;!78qNpOpND;D;D;D;D;D;_!:qؿu  |/TE iO|8a< i 8)Ci 8)CE'AFZi 85րCZi 85րZk 85@4IQ!ERpHQ!ERpXQaEVpHQ!ERpHQ!Ezzzzzzzzz5""""""""""""""""""&&&"EN#zzzzzzzzzPS)i!!aaaaa!9!!!!!!!!!w?qݏ~v㰻8aw?qݏ~v㐻xzD;D;D;D;D;d}C18a@y#GLX9%sP98L@8:C8&D;D;D;D;D;D;;;;;;;;;;;;LJ~BᘼU%:!:!:!:!:!:!:!:!:a:!:!:!:!:!:!:!:!:!:!:=tz9"BOqBTCTCTCTCTCTCTCTTGK8n;n;n;n;n;n;n;n;n;n;|CLCLCLCLCLCLCLCLCLLLcZiZiZiFmmmmmmmmHlHlHlHlHlgggggggXeXeXeXeXeXe________Ǧ~gsyJyJyJyJ&!!!!!!!!a!8*T jD;D;D;D;D;D;L;++++++++'ZZZZZZZZZZZZZZSSSS2s!'M Skpvm\RVD<8s"u,gYrֱu,g"q8~h?4C9x:7 ˙"oD#:G 8Bpx}<>n&pxI<$n7[íVp+nKAD&r։u"gY'r։YWqYp%W\ \qp%V\[qo%V\[qo%V\;>UëDtzJ$~4+.yܹR˜+.qˎ+.9|ˆ+.\eeV\[qGs;w*XUܑTqGQ;>!8_>C z+.Ҫ˪*.Rkګe/yS\Uq)We\pU\UqVeEU\NTq)QeDU\>Tqmv2٥c:'^qTQFU\UqITPBU\rTqQťFU\bTqyQťEU\SqN%;T\SѨ{$&RR\Rq9Jť(T\RqIT\vPqAT\nOq=eS\^Oqi=eSӣ1b\>NňC1bLP}ۅ\PqIB"T\Pq BS\FOqI5RS\FMq 5Vqn6nc6Lnc6 nS\Nq:%S\NqY:%ami:"P\FOq =S\6Oq<S#kK).2zK).tyAJr).)Rr).!|m˳).ͦ,l˱).Ŧ l˯).k˭).ѥ<\r).:(.܇R|(.񡸼z(Dz d &N1dR$ː(.A#kި֍˙(.e&˗(.]lKv(.סT2I-Htg'"9bP\Bq e.P\Bqi e-P\jBq %&P\ZBqY %%P\AqvP\AqMOq Nq 'P\vBq &P\fBq%b/.)SiUa\=C/lP\Cq)e8P\~Cq e7b܈!nCq e6P\^Cqi e5P\NCq)b4P\ Cq %0P\Aqť=P\@qť9P\@qyť 5P\@q MqrFGFo16o4{\6r|܂GqTwK^(.wԅ2k3ds4tlw(.塸w(.ݡl)d>Cs˘(.a|%˖(.Y\R% Qwv9ť<P\Cq%)P\Bq %(P\zBq !5-掙 a_9vMq %2P\CqY %1P\Bq %*kP\Aq%gP\C0ŵS\30ŵ!#0ť'P\rBq ť&P\bBqy ť%bqͥO>QT2 SɀL%2 T2 SɀL%2ΠPp WPXS)bTX*E,"JK`:#K tη18brGGGGGGy;;ѬJfn*d榒Jfn*tҡ*dJo*dɛJ&o*dɛJ&o*dɛ&o*dɛJ&o*dɛJ&o*n)T*9TE4JN%+9TSJN%+9TFʣAѠhPy4<T *4"6G\ƂlTSfO%=TSO%{,Ba*E"JH6J6"s,UTbP%A,UTbP%A,TSO%?,TSO%?,T ݠA{*YdJ{*YdJ{*dJ{*=4!J|*dȧ!Jy*daJy*daJy*dJa*92SN%#;T2S0N%8 T2S0N%89aÆv|GBNt>{ sWg6lQh WO:)"K#s3=ŗvܻo!/=׽ʏ>W߽B6 ׼ZiF[;*&EӘ>O}[d3Z]/:!(dr?\g˟Bz8Z1_z:^+zyp3{͔?hGs˛=G;qVM\_4TWeK[aMDWr*z_̗DrmXCx߆UK_}Lu;ԧ|iOC}r<[r3 Sp}Λ~5_[P碙 ˚=Mo?ʴQE7{Oo#@/}Bz_.r>믄 ?T| rT1^)r\+侽zܯ܉z+z ϷC}]9_\_txȊPo 6@My[_";KTsέJ1guq Pu^)sl:ח_bE>v[W_ޮcWCd b}ZUJ|ztB^-(}c~Fy&|q;-O9ΐYIGgc|xƺZ@2_>zSzb KgI#Ƿ_ 9yznd;^~M\򔐓e}.G}|(C3[̒ 9o=}XG7E|骿+ o8?;}`9uLΫ~]S!yfo#:7Fubey'ۈzT*3ox)Ǚoٲix99sι;7뇾ȑZx~)G-owױ;cWqxnbLz: ߱s- WŐrnr#׳zI?q d\oQj|*r&Irw yY9BYr>' T\ׇvϔRi%#c [ ATR_&Vίgz"҅09{兢\s}zu2d㰏!C}:<'yH\ZN]+j<8l1[~^]rnQ>9/&F~~{9sx>/+k%r[]>rס,Yoٲ1Ոg|;zGozȖK 5*6.p3ƽ\`ω#=x/.q=}\>uǁu?.fr3 7c:r;nS[T|jD;R\5<0jLJ"\6˦iT 7?6&?d'WG' uQH]1Ck1OD,b. ЧrTJąApFQ]U#b 2ϴ{GfЅ& nXUUEEޣp~Z*yyyX*r`3sU715?#Z"V>nǚh]j9)RԈ'"1MEAGbA@yb[Zϴ{f9BbF<olbQy"b;?]1rtvuŘW#bC r-b"D|h1#F1ZxʼnBΑ#Be>kCJs_*B;N 1^'"1<~C"tw>|99xzH|b9QWUW Ș'";]QGjDS$5Y8xdp(M&h5"扈E`--gZCt5>_ƛ ^nFf׽_|ڈՒZDcE_LaHH.5?f\~:4-ǿ[C'2E4b&+ 'k mj2CcBN;j_?Ot1Y9Ϋ3ATkGJ5R%}:aTp 50J/=ؾsPfRp5aj@xzH @.5;䝣7qȭSTW2_ߟF\="rm>@7 5jMi]GujvU:*&&ǣ}nMͲtך}61G:jlsU lq8j_>&=›Z<'ɿ=_SVñf]35!:[壱u԰C}&TڵjSuB%NVCVҫCryVPRTyn=&ZuAPhD? E? GAh8 GÇhv4?vtN(FQ'F5E#s=[Gho1ÏX!EhDuOhģxw"U`Qh:<Ud)|OȾ5rHBfLo#dػ,| !˗x _;M!G|#g]' 9E!'g& 9VZ 9}WYg*9ߌ>(Å\x\W"%?#!F_:_l!W(!oE_97P%T״Y+ҭY9Rq}mM \_ynHq}7{ 7k/6[+2D["oO[='m]𨸿m"~U ye%H҅,{ore+ўCϽecbnKr3=Ѯ!e!~1NRorU9!'ު yms /%d?LO|L~ 3D;c!<0﫩Bο !̻Q_xCB.*.b9N[8q}/ݶWer|,o~8tȡ m,nU1o_Z}s%wkP\_#k_+v].m}]"?U~4}d~/z+}'V>,뻟o6t$ LJ9Gql,B}BNZ\)@]rB(wik=h x\_u`A)NrQJ n #m"W-¼D}i2tqzv];ѼHnw?~hoD;4h8!+E{+f KQrTz{6?.ƘǭG;yRA!' ym=+>͒֬7γ@̑_=o3ǎz_|r@KB!uzhY_m zEE{P=>^Jrm[>!~E|]9=61 r^q}cT͵}::HȂgfC؟+d7mq9E8.Chz|&鲝g> Rfyrׅ3=w]">x!>򗧅\zlFd}s/Xȕr}^u\O;P'C.;K_ "^G%_^n_v[An"᤼1\q vػZ2 Ü˄l"g† w9>&}ݔϠ-B;upgVrϑyrvX+-^wꯄ\D{\zX>GȕiC>hyg}yOyx-eu=!gr|].r\-zuykÅ &dJӇ! 9U:]ccQCG 9!5O [#O_,nlP}Oy1I^}ĆㄬWXBΐ> }|\*~, u""%r_XNDv* rp,U Y !+zߑC^ߗ##䨎wo,mWF g,r&˵J΃YF+g7C.L#c 9B?+ ?LMz4U3Δ`lϟ3Isz ϟG Qor^ /㲄\?r(a|"MKxϐF@À^.#w]c>u+^zp}M?dl|̖`vuW}9.0w.]|%+rtAL~/?5'Vn]ɗX0(9zݸT!'|n)Z}> _g N8􋹗b}+', R~VGk='KocG֏ pzubxe!rOt%.1w0=3ߣ$4okqe[HY >z QwPDxQ,P/g2ղlqrI6^]5X1Ҍr?0Sy`~OGDr ox> c+f2_F_!X{\_8܉1W{~|͗<`ǝW8<ޫ\¸ʙ(;cen[0>'/{5|S0.7Ia1xp{}5W~oQ8$a*Gox)r'O3_}eb\OYod3GW(Ir I\%̐mx~('ons*Bcx^{q{gcR[e/_(/]+Cw#ޏYȖ3^-dPs+%r0&wxl0{8(0ƹKj"[xPl0N~n9\a}W^ӄ$\뉬twǣ/ϓyr~ɓU|\ϖT./Yͧv^`!W:ac!P\^HY"R_5O!}\סq"x(⻼7^D彡j|wsU 廎.4biUEG#wy7.i[;|w3U(ud.ﺦWUP:4˻斗(U|w;>|W]~0Q.~JF⻼~ ]wyqJC.wy|]ޅm&|w^ٵjm.. ߍ[QUAW;Ǹ滼_⻼j"]wyמj滼^'>P"if+My"b*<)=)=)ՈjDJ O3ZipLdzu2ŧQ"O#TNR2n~C].fr1n}ǚuq+[VU=wܺRԈw ?skx`dElMӨ 5 nlM~,Nfq4##PO?b"bX\W7O© ]ǃȍF<1dn7i̠ -L$G^OnU0#0#!!%l7XUf溡;o$bkx@ jn>B W[W4~dYPp#?R{D}ҁnj/X;ʻ52gtTbMLG;_ݚeHO5v5ombVuf &9ZWc[GyqԾ,w}Mz7Gy(|\5ϡ9'59䨬Gbs7@lGw{E8|E5g5 OW!<5-Nsuv_KG M;_@&N7Q;ts(5e|tGc9b9/7av?JM Z1k:ZBVyvZT^2Cp;ggg d RꤦcBǯU޹]o(/Y5aaO4 Z4 z4 d؈p4|a+)lGa'Gjh$5xh_#Z4?ѣuĈF39RĎFTF<Ɉ'RkZNJ{1BF2x%q?` Y#MrԷ1B 9BN.Kr 9uӽBNK,rFۄTGץV;? F B.KnZȥ,{|/o*_+r彥S?$dSq}mE|mg" J_W>L\_0} q}oîwrӰO gD-*@"_"H[Λ҅{ػZ҅,ۂ3{r[kd7Gq 9BNz!u& 9yG 9sK!gg'9DR9_r~B}D|/\|&q}c3\q}ɶEB.]Z\_4_>y!W{&GU ;f#'[5W}(qMqqbu~@vA~4%O q wdԻNq}rە-"~yw<ȝןh _C>Xܦ,_{g$5}rL" 93al]8QkeSC-! 9i9=/0ŭyr~!/ {!\!//J8\ri˅\ y,! B^\_y|:_ 6!|&BV/ #^k|_mr}sGo!䆜=! 7by{;Yolb9~}?c-_.[Ѯ 0>?n'd?8]{-Ku hGܹ\*U~wfn"^=pD{}͒>ח}z+~ow.C.nFηfTFz?GTgpnѧWyuhȱr|בI=t$]k+g~q\T)䬎;P]5_67 z>C!g})׋%P\_gfoW\)= 1mf•'kw 9pHYd7ϯ^ 98ԯoN|W 3丘6*e{^9}\9۷.s? ?ܯ3@_:uX+Ͻ_vW![#3dH֓O_yb!x\yz^eO=*! Of9aWx~{]'Py~PMW9^,/ !zLg7X'W_h%Q>2wz9΅kG~z7j3҅q_V{b߅އl:N鳱Uϳr]|TY"cf *E&)B={O芽< vŮSYRsܝ!{?ٙsΜ6 oQ|,X;D|X6gV+yӋ8rFב=ƳF~~B p.1VgqtnS9WIg:cX`&?Y'fGCͭ"o"b~Tp#f7cJ[,{!VR^Z1ȗ#_(nP9 fS:򺘽cްe9g%Nr$t;/=n:񔟐c>[@s +o'DþK(~,}/ a w]kyg"_ox3lyl-Kuw|x@'ezBr Tvn31IT|?)ngh P>HL,y0ՅwjoSxs8λ:Kp1V2>$N:5c2şɔ}aY&,omgXc^O2oɞxǚIϘ^8n.Ԇ '}]j]<;Ì.}zSOhw9RǸBK.]jʴ.{ߥr}Zi!wE/|]jvv.pE$ĕKͮ.zߥ1ԞKMQ`O;KM{^4R?eߘ]zA"-#&(% S0RFHI) #E RxB nf懙a$ ?LI0Mgd~6Mgny±{%9 J\Sb/-1*s %HQf懙a!~'p+c+}+/+/1+/K+'@YS@Yv(R@96ә鸦X[Y=[xnXx>YxZxZx[xy~SP^By U,tQ?i=p0[*b$^$^$AQ~>T+no#)cbv4CCBCC㇅x  '8M^8G?"&Њ@%rW__ ǫ?;E&J% wj]"4;*&*@}xd'9B9B9#!GB7hj{d̼Jⴆ?ERfGSq4eGhqX%Ź5EJ(5]4 q4C0ͳ ̳H%q>*՟P7d6cn[MΰCbn#Zi\/r&xTP3>rnf%sq&8I>_nv.މ44m> LJ"% #LN\f>oK"P޻"e6#hV&  + /G=䭯eRL`R$J) #ea,)!uRo/t)kwt{l|Ԙ JJ(!vB0'N&p "% 86/jMp%c!W} %T8-i=PȲiEOy+S!)gɻز"Yb_7"Y[€׫J0Nqܹt糄}w/ ЕLpDJ(!k_' <ID`.R|X_\n×n[_u?yw7ɟ{'}>%,4 #N܂on/SkrM?GćӗR۳h?VP=P^,N%,I{PLw_Dөy3t-sEyP#eTWK$~#zh68ڲhzB͛0/洧G vrs<\]3:kGE^x(#h\s^͖taݔ иXl7ZxV__U0:L:z(VnS_a Wr^$vJAS_e݂y8H/$ :ԫC?fr0~QG-FGpK6NC`csrtKs-loH}<^~ڽOt7=>Otpܶ&~.:AȽ3^K.?Y >gd|ꝵxytT 86j<' l:H^B< u0}N}B}';7釯 پ{;ӧ^y-ʻ1^:S/_UDx&~Qť*lfdHSΰ?q/wooǑ = _k?Z}dh- QOQQAb9{oוڞ= c$mX[6F m@lm]CnG;hmnvힶlqDB2c '8Atj" :5j' +" .I!KKB>v{h>:p"|Ij˟8i==7pxuwkU?L8.Lɹ0u{ `zVOV}`#`GG`bӯ@RtS.];!Vr*{`\k]m] tu^6;6> ލtEBcH~5-iPď.O ͱoWnBk^xnH-<_ aW|E0~"7ʰMy8;[S'Rl-fM\IY]k&RHNi\ 9qsƎ݀Q N }ބÇE@, Ku߫tЕ*{yg֒սq*`|R_]O7d-6? tӄg L}Ƶl`I~ƭ ֟Z ߰x!-7 7n)j'o}=<<Ox3Ss9k.9S\4p?`\⣀rWFy$L LsԌK]z}V̈T,+Y^vsie(&wmX;ĺ,_v[ X6hSFvwy]]2+-]G/φ#?kR.}3s)`}w  ݬ¸W6^OĪWw .8kz&F '>p~8?~г> \EW?t;d~-t2ٵA~dv Rާi/,3e;C9w&`ՔK`ȍ="OEVt/ʃ1fcdvX"k/D~6# ))jA9?gqGoK۽#Y~Aqd]>n@W>/$Rr3z'ȞY~-G菊 #_j|%9u:7a /{/ƐM`y7Va 8|5{`(HN HN{F Fz|ʿ :^/?#>;n<?̦dA>J"Rϭx<9IߧL߳ܬݶU _IX?SyӀ.Ayi`ut.g-ħ}`r-THyۦQA/]Hq;y'c|1_%hN VFv`ů)XW-Y"_?u`64GAKyy0E{~5$wZTWiuRީk,Wjrazq˟cIH_4;F%=,R}O[::$33(`vv1^IVS2O%w״r3(gr1^<Ւbe11HL% bޮH:̟L%}eybK%R<<?,ocz1S/d~DS 0.)E ._Iyh+`٣Y͎]K-?3}}iW}Zyv]zߥVd]jvt(;v.5vKM}uߥ˞]w'ǁ=K\7rɢ)@%,0RFJH?cQByf懙afmXEA!7a7Lgd~6Mg$f#dpFsIԆX rK sC za懙af~X?, sKI9jjJ,Ptfa:c!~~g~O^_ET,WP^{By q4{O?{Z'̖xJ='+W>W>IP>wF3ʳ[烡~m 6EXǐPPP7aa0^+CEB Nu<>6Nя ,"P@ ܕǫE'qnNj?@2A"}9t65͎!. $Pb^9=5 ~PaPaHM;ڿ*e6,3#8OkTM8R}{ٲrt=⼕""Qy=nIdFHY) fJApH/ ]"]85&%J9 牓 H%D"N=͋ZyIľp(bi NKpZx#lZfETvnY{"8l'Hֽ׍HևV0`*dS;f\)w,,!vߝx~x})t%/;JI$G="#Xp3ӍBuM]yeH% AK^S>o97>함4Wᱏ%+B`wt1ut៛t>W?!BC3~:O]P;:CLzF߀_IM+~Eizƴg^gK~}w WńW8}+b3c8>'RԼ3@Oqztf@k?Z}dh- QOQQAby{oWڞ= c$mX[6F m@lm]CnG;hmnvힶlqDB2c '8Atj" :5j' +" .I!KKB>v{h>:p"|Ijd|1] 8!Oi9 pHи%?^lO=+p&\Wc?`z| 0kk_{08>//KOcq]@<Xh6`Y} `yW1|JkzgW=㪿pWcõfø@3ЍCcViBMix8Ew-y˿'ֱ?z 0~QƈO܀P6Rjgskiۑ$Nz.H۰?nvUi+WIL̤f]0'A|? _p| M+}򤹀\/`%j|ꑟk.yqހ >-A% 8ci s=d;/<0}(aQ(Go=Q~7DU( QoM,!;QZQ~uCyi@yi?tsQ[fސw5sP.=r)7m5f^ϫ#7",絷 @$h-w7adDv.. +`|S@ ǸD_˟E]yE'1oď.\D54.6C_W'S(.I]r wέȿZKqC~t  taBt;1#Of'V\KE~h<+9W~jjkV/wQuWV |Ax E(=h Ń,\9Bd`~/9BN1`"gM_oE6!?YKn 䩈+jˆ{edwIʋ~f+Cߩ+kk(ުOI'gMc3xS*_,N';Oׯ%Mv+gw|XZ!Iűo|#a_;1#3nx> ק?]K㖑~0v$,Υ%Evc-i9?cKrb居&EdvD6 |XsW8 g!R>EHGi~A.{w rg!׿|v`Gҏ^ Z+33_l#P)O)$]Hqlqmx0=c9dđ] O &Rܑwȇb?S˃v`z#/B~P=`Ewcݢ+kA~"k#ƕ߹UMdǦP%t1=Iҋ"~ie23g2(XKu罎|#X;gZ]Mȗ8W7?a[Hu -4VR+Bq2[g^w&'Qܣkl(du= e(at|5yM[GA)"o8#u= TCw ՝ϯ8/'aޤ&9o{h޻)EE'Qޱt??Vcz =|Mz;4\, Gw~jq9s' I/>x#As^ǼZ'b D@PS0yjdjqՍfa>SOu鍐hJtYs6S^,~e˸Z]+{ q5-;㾫kw^ȷ.w nwKm)Ǯ}WwKkwKmb]w 3^;6K.va4R/̶/ظr~e#1wߥֽ}Z6> wg޻͎]K-t}.$;]ԢEڱwܹNc'Rs'\8.5me|ߥmy]^w~R3F E RJ)Y) #ea$Ǣ)nszj#!w4U=lYf^Q%~G@qZß")@8y8B @"% .ak8fcp~p~pYd^8ZI}Zwz(V؀Sv1ѭ@g!1[MSw4@}e9y<*{[9`3\98h$PbBXr;vXDv6l&P%w'N.LSlre|qg(]]Rezy+EEU{2)&0)@%0R̔|:M)7^5E;=q6> jL%K% O;s'8JDz D&8@}G1+P>*PG(dٴ"'<Õݔ]DJqlNp{\adUH%uv͸SxYYB;zōSJ^&8v"% /ʓI$z~EGfV&rJ(AB"}:=c{sn|Ps++Qiҭ+c xK>,VD?耋/.c?7n}K~BćfuȟxϽGГ>eFf'nA?t}#p˂wY+(EdxJ$=Is(EG/DH<R:H9䢼R^⇑H*«%pf4mYX=!zMOks#|99tG bt {<Xs49^fKunJwh\k6-TwW+o*gtVeK=W@_M_w~+^c}q;ތz O̲nO wYsԡbJ~9zGCC#%_W}w[TQAء[ぱ9t9u%[~9Y7P>R??dާrǛ'E8n[K_J^Dl%z,oH3] 2HuZ<:\5Yc~I}w|^/v t:QCW}lȽӋi/ϼΖVMuN *qV"/wOסC:A}A<}vdvkFhwbvhbv6hm͵Í1ݎ0]֖ HHqAba6NMD&B DAxE% 9 doIa/7t{BN:O|s8G0?tYqv.+W`¤@S_ 1}/,=ŧEܽХK./o 0n㍃8 o|`IނSw4Od{ Х7to'ͅ\+2 XyퟀL,k ן V` =^öaV0[0) [[r3xr0Э_-z]p_7]"=#@omtA|SFycpo%M띕(?=nL؊3)l ` P;ߗ~8j-`'pgN_{!지Y["x^LzT tY =x׫o?  #++?>`Ϡq `XCم֟oG;RO|i$Og"6dxG-yZR#xko@^飯F9B9N90; gP?WH.U[(KP/,9^/ʓJ\9ΙUcP^'jֿyCϴ+xyFy /^ |ni$8HMwK|tB4WfOS^F931 O}P?Dy'VO}wT|߆뮙و'yދ@Kw;s6#wnM6ɟ ~$Qܖ 7I3&NE|zޙYqC~RP G?Y|A<#")47`WE~ݎ -9h:Qdzpcď.E6p Sm!?-E-&?"Gds0G~-/OcaW#:Ǿ/ɂ8kUWf^ +r+G^|?`Y@dg<վudW-L:f$.˚F+ٓWxuװE+_zfoc ))7!AܼrUҹp v~ci2KoV`9aM?_Yz'3e]Cre~>/oL?)K{![|QWG>4>}z3g |]dg|Xӯ,>ep-';.$Y>H&=]']kd|,Nʫ45$3`ߊ)>g; IXFv~Dbʃ9[@GܠniDuD;_Ov&=z/[9x^5{vňOߴ:^iN%Ay RW/2$(nfL}zCXsGvGq\AD Z)$4Kaq9T'[V:QtNgQBqf,;&x˓aP]s9ф'62}`uոNX"XD d_d~<9LKֹj S-67XsّTeq!sev=>R["㾫c_ q.v`wywߥ6X3tRէ2ROnw$}.ihwK[5?}ZKy~@@R+FRiǿ}Z`;MԢzߥ^=al]j$#]j@RfM~.1}ߥ] MGM%4HQJ(da,0RF:03?3k- 7H'%~a2?&l2?&)0!c7Krh6_[bU+JУ83?3Ba!0NVVV^.V^bV^VNʁVVP2drm3 qM ;{ܰ|\pO-2bʫXأ~z8`KU9YIII6}V: =5FkS) Bh8// ㇅Z*2Op)p*~DL`J78^ -8/Wu |wLVJ(95E͡9&iv qULU$ZNs s sGB揄o"U,fyEi ^͎hʎ70'Jskዔ,Pkhh:a9ÝggJxh'|tkU?+,nZ5cNmG;a n6MܺGߵ!⿿_Lf}xo܂p JTLq@} a\ai^ki|@DJ(Gfߝ;0N }6ʕ)ŸEwuKE˖mGЖLAAV^z[_WqˤH% 0RFHY0SC4rW!% `ԝq7B/Oseg %_ 7N+y؉,PB׾(Ox$ <?yn<<[Eoϛ(E(Y ]"y{ ιAϭoDJ޷@}\6-X.ܤ/ݶ !o?:AO|~K YiF^~.M/ Nߥg~zY>J)Y蓄$ϡ%!SOgKK[w#8J{F" HG™lpeb#97=a^iO/{%?hyQg.t֎7PG`ѸTzɛ-=)y;ߡq:oS^Yat/uP^9}ݦ6.o)x厽Ix3ꕂ觾>1˺>q_r7HWtܩWgQ~ + a[ M|m^ݝnQ]G1bnJl9[f@C88rKyJ{&oz|mM/}\t*{Ig\Ώ( }t-"-;ksqlyN:g&uߑy)x`G}3Nwn_/}O#vO/;6<:[[5וwc8*&t^[PM'T>ɐڧa:_E#У{@@Co@O>NZRYk ݨόبY1Q f@8=_m16]68"!1GaAs :5b5anRD#)l1޶+l$ckbvhbv6hm͵Í1ݎ0]=h 8>?U=eIF]C*.{?p&L L; 0{ӆ =0* pt /)ŗ]MK,{`RWr=Е%fl@'#T֮ wtCܻ6?oq%[n Mn?ĽOTb`aQ/ 82"xU@oC|n-<ߜ}~9 p' mYh}{ .q+{p8.a1/)vEć5+3|M%X+@-蹷7`F\SD*#;6 0o[ȿo cxH!m|гsq"~U t8ME3A]Fndvf:ّٕ8(E,[v(@fgV=fC<`h<׏L#ȿ?f]<߈sW^Kp>ooonF~]lK{]o #G<`ժ@~ZW]7>:?Z)%~hٔg!׿|v򧐏nA٫U燡k<Hr}?OAp#VO/"? uYGZo]jw:{#_XA硲1{6_1lF \Ÿh_ >g ݢ: /ZoK.A~> ݀ȏDŽ)?Kzf h]r0rzo̞'[ <{(|i0cȇW!?}.ăȗJȗ?,X CFӓ_oFL~R(J&?3`v>q9S1 Az8$Z4ҿOu#7—2,t C9G"ӷq7\zbv\|%^dX|hB$}JK5sݸ^:gk [þOq̀LocnK@>QJj;&MzI%H&U[mo88w`Q@й(^., (ƱxTX=Ws ketw"Fz3@7P~'H{֓ٱ)a \xqFN,oJ^Ozoȶǟ:[,ߚu6-P\2+(_[K.T`:Ij ϫ>v5Jeyң?KhxV~ dL8H'мwJ|p@<@=a|9wa|$oڅw8V:S)f?E<䱚Gݚ1a>BM%+gIq r)8ɾ0-*:!>Q=ϵ_?'H_gSi>u1W<]*W4I"%Jd@gPI~jy#IYPB˿C>2n'`)eTO(_wB?("U"ok(1O~ϥ@c=ߐ󆼫Hs$;8C~7{9yHz%@?R 7F~C?C~tq?PPRtb:O/TPm )U ̟5;?X dq(,:Ǭ>OuMd~FJ+Ay6OV/';Ou|$M'/Fp""/qj3eՔO.j]H"Ÿ~q?G?`u(Vۇ_Huihf 9VwaǑ| o;T)NKHNZAu8-^OߧX T!#?[?wXdCq"(L*h:(R:P\@^}W׺R\5v4tR_mgqKH;]RO<.]jU}}Z19.zߥ} .]j˽]jw V㾫kwkt;}B~RF.5v4}cwKm}{6ĩ}OԖ@޸.99{lwKmg{@dwywߥ6,u?k`;4{׸Km8Ե`,Jh,POHY) #%a$t%$H 'af~fֆZn$2OpK0&qd~6Mgd~6MRa6B n$9?+*qMm9++@=W7 Gqf~f懅Ba<<\Ĭ,fMf١dHOgfyxBxٙMId)Y8uLr,Po97>함 $* YO_'\>.|X'nKo:бIzn*~Gm}"$>4׭C0stI ]")svt\TNu28k5zKlIcZYN.z!-C/Ћ@7f魏Ó\I{S՛ F}{.?IGLSs] SoA/0?:}]}BPs~@ˌ&ۛ_ t tْu=x(C  qf\ogQGG_ä)/q![0c ?9Ýuϣ_VP7g?wAE_Ď> rq%wݙK ?3%x^}U"\]{;ݢ b?l0XiެwCw5oR_JtNy\3!o ;9`7 /xzR_q֒Z+gfF=}fDF͊Z0GG`'_ ={gHFhwvO{; ∄d!AN(qfDAtj" OWDAH]6xۮrAߒ®6]m6Fv6.ڡFhf67t;hwx}L'tX; DT5;'REgO>0lg\MNڱ0eN!3B^@:`NSN, XXMF*We tR+q=t8ogk7֦$@_64W"qHs6Mi/̻ٟ:|4>'`O-kc\f@ટ{&,^z0SYw>9w`N;.x%Bw_2yХ^tdA|,\}ӯ% Qt`頾ȗA~Wўi=S8:G\rx/2{o)aP'q?)(Ƞ0>" 1v,"_2 -xO X ڵG~E6۽ Ǔ=20|ϙ?%{}ޯ>\gyt@sic_.nm0/sݸNf/&!_hE7l7v~5E3r,H- \;3΋u F>3=]tAtѯ@й(ҷ߹Db]`|yV_K_]G'c @_k Ɂ n {&S \A>K.TDS/V}-q5JeyœF. 揯?U]L\0)[\Q^2潛wEdg5MdZ&'I)d9"b>; pZ9ES| ˃zW][]cqT۩8?cq]l\ h?,*J؂HZB|= z/5|nѠw |lxxPtcE@7r,E><5BHqlI(?E|EG}ꈷNz4w8 Y6 ̾2 O 0$;Oyxkg"{K92Q;o]IdGy߯k'`|[G(w5@zy<(o{}& |fۈ,Abq%#đœ]XIq/(K.S|| TJ/Rޝ;q~>Bw9/˸9(:oU] 3jNr8p6ڷ޿A|Rx/AGoB?4;L9p>1W/} @i)KwSZZ|{âdNyM(b׊sD$W4gi.N3]AvɹiBҟdkA،r(@JD~S>h=y_#wMu+-N Ir%/f7X#D3=NJO&y'ˡkUaa=Y# ?_"қ^Z봟)vy55fjVk=6MšnL\2xW9nuVjI >|jڐ;_ſ7yc~j&KVיG&KH<ətewu.u˲8F.}f0wiG㾫]]j]_ ]Ԫ't.br=]j}!.]j˽]jw 㾫kwaWzߥPy@ԴQ;KM#q%u/l˿]jvmwKmoRcwKm4q=R:qߥ}Zk]wKN.um/,Jh,POHY) #%a$t%$H 'af~fֆZn$2OpK0&qd~6Mgd~6MRa6B n$9?+*qMm9++@=W7 Gqf~f懅Ba<<\Ĭ,fMf١dHOgfyxBxٙMId)Y8uLr,Po97>함 $* YO_'\>.|X'nKo:бIzn*~Gm}"$>4׭C0stI ]")svt\TNu28k5zKlIcZYN.z!-C/Ћ@7f魏Ó\I{S՛ F}{.?IGLSs] SoA/0?:}]}BPs~@ˌ&ۛ_ t tْu=x(C  qf\ogQGG_ä)/q![0c ?9Ýuϣ_VP7g?wAE_Ď> rq%wݙK ?3%x^}U"\]{;ݢ b?l0XiެwCw5oR_JtNy\3!o ;9`7ӓeZ!8Cw6C73#*6*hVLԂ8">\=_ ={gHFhwvO{; ∄d!AN(qfDAtj" OWDAH]6xۮrAߒ®6]m6Fv6.ڡFhf67t;hwx}L'tX; DT5; थQ|v_] 860nWӸ5Lu `ڨ]Cv` s0 x`iq/x^WyE XuOW>@x^LkCo6mvl\tH?nz|=һ`橱zy0K`֧θu~o] ž0Ƈ x-t*Ąhi2%| A9 p'\6 0zXo@ d.)\W0!:0̀ɗ^ri`>+`fF=L&`{|/LCeϋ=tɸRcـeہ.ybn<^ t~z捀5{',um3fW~nb`~#'&NBLy$!OUfD{vuy!n}ϑ?|X&YrB4mP_אZ;"2R+܀|z'42 e-tbHObz@&qI&*?nȇ2}ʩ.̥F;&G9¯"%ߜ4o݋'YNv[ Vx`<1d?0`|2}H!{zTw+dG&!0uFǩ܁vCOC~n:A5W"?V= ӯ{dB {phz@6V瀯7qyoq`ATkダ;j/%-(_ͯ,sl×~G~0[V:~bHL˫WV#Wd3i)o~,8`ˢOk<ķ@Wtz^j\ .?mR.+|woqϗqMɏ|{-[җA[m| ̷.R__pC 7<Ս<7SR>h,Zr8xV ;ɞ&q` ->z @&=xD[k'POHFr>h8jn ׅ~#S7 _ϧ}2hrw[2?:)jFc/K.{? ˩t>ʠ#3_yo濁yea0擅on,O8ȯT7(wV#Z~:+D9B9Q]ɧEvAze |4l˛n| Q}>DU"{\x񧈔?S'>}ǬdYu$~7)CX}73e!̥8Qȿ|JnksSNX+K!GW?aP;ExNuՂ<"_hr+M'= tP?-k|fQbſ!{>Wsf`qFmjE=fqڠQ1NνBVߊyHi‏)?΁<! 4 UyGm_g-8]dI 0g;qn{c Ct;V|ۓidžx S0?Mq(!XBt< нqյ-qߥ}ZjG}ZZ?{`wKf]Ԫ%s ZWR+Oow1ο}Z]ԢIw5Ky'R]vcwu.u kgRsOԴ_/Ԍ5.u]%q.y]>R[ NP㾫cY=1|sߥ6f?}w]jCy]wﭲ'}w]jc uRo{zOE RJ)Y) #ea$X٢)R/;8 ̟5;% "I@.G8d"^B'ǥ@$&@I>R(E2oƀ& U$'<$>7}oŸH91#6Me록plYe1+o섙'B/H~cVn6%(V{Sf*U¨YVxBS@T@}\=i9)hC({]$I) #ea,t˰q ]NdDѾ3iYJ% uCng=Hy("+N[B\-6$]\L Id$(t)kS>78?򞾽5D%8髸Eޒ!0Q-鍴]:6vC\M~BćfuȟT|&u8nٚ> 5K^S>H0-o,Xx-< ^[-[x wPhL x~nj8g5wQUqdR n*oaapKMF,9Ӛ: B0ҼgўYr_ 6@>𑦮fC}tm)Y%{XXϏ~ lMGz*t4A( wy+-w4#n0<)q@+ 7hW5C0#D "% -8jԪ EU<\L  *> c݊Om"DŠdZ}e9y${[9V"bp\a~-$!ܢ6ʕƗb"5 }kt>Ծ;:5~8~ u,!'WqS:y= 5<.ѵ>\x'AW"ҽۿ;WsIgvS[Ұ>ёv^v@^A㗫kw[TQAᇛ-K>͛.uMtq@+]wΩu#Kp74a:=У{@@7?}dh- QOQQAbh{o?y:h{~y[16]6pE bꈑJbF͏up|>qNq %-1= k ԛnB"$ʼni}{bP,bX@|Tt9O >Bt>e_D}x/Ap(Πf}!q>'9Q^Oq>gxXXx992;HNh}N{N T X"@ Ӆ𶺠99[ih}NΖli}J[3Dg% n1[/f"̇5| n #w+Gv}u:Z9Z ( :+ a}BT#5 sf!L%iωf}!N̴Lk}Nt VuC ]089+C~;կP&o'!D>'9х01 9Cf'aJ|XsaTp>'VØG8լ*θC WωXj}N 1#zzRp޵ O8d'<\ssD7>'9эp7N P3;=FD#%F5Lge3O:B":q0ZӽS#99/:ϩlϩl{?#a}N̎ D03zEH!_zEȮ!akGȮ9;gw'ZrXLt]xBFSm*BoUmnm8Wj m.Ȅ6"MHmS'8!v ].u+uWqO*dm=61$ea$Gs8D?.samcjG_ۘZ oS;2NRAG_8Wʮm|i}m[ׅ*KN>$2nRnRnRnR6a&.fbwl G_46 pM}N RAn2m.me)Q-H:<flڈDm#\ail 6d]amMƩƩmu 76dp[oٽb1޶[}^]m2찫eh]mGjkGjk}-(5|+B9B g6Vlmо ?W ks8=ZWcξn oZW[׺uښ֤"\.#!Fh;iۏXk^E0v3uΑVKOjB-.:&#֓j]mh]mOD,кPmlU+y6S\wɮ]f]mm+i3tRoS[ʺAou웽&NjkwHaFhs¾T9$.к:/Һ:/Ѻa])Í1۶}v'ZW[u⴮Aj{Aj{Aj{uɮ,uFu0Z]vFKT*027i].rK)RWnTGoaߴYq w,d9{ޖom(.b_}).|nvP uPu0 sa.~7[O XXX{}W }ppmk?] `nkos[zofvne19.م0fu]u1nuP;js>/!.'ą/!.K qW!. q:eГ~*ą@ٹކПv.ކ!.m ~!.g NsqN̮q0s}Bm!cD9b!.b!.b!cFmӽ9,GjRW6Im{;E. 81oҟf2S&M p̀/0.Qcn\ןLc?` n~y6`o:0 s_]#+j6o,*,2i 65D5@7;膒;3tae"˭CMYߘQz&u! 0P?M}5` ٭X;|ݪ7$u?^Nbz=&M^囀 T):!;|JYK?P-q] t._}@WߓXC몽7"Sf&3}h3xD {IN1ҧdg Ճ?\󟑀 *`{/]KyҮ0}?N0{9Kz;9-8Q Z Jɏjv*R3!~_诘r>`y`gzH)) юVZܾȯiʏL E?BD :G䧲">\K350wڙ_@$y,J!EoD9,ɂ^[Qxwuk` _Ɠ^Nj*+ =~`O3>e"ix>JDa|Zgu{C,8hPbi Dx^I@\vxSfTXٹ]rMrQܞ2OqHzɀdg^Hq&D ND,CP Föp٩i3glp-ks%`,ٽdP';{f P/\ `ǹGr4w"1,a(ӫvX\z@q䇓yJۀZ̠,sƟOL?gQ>G\>~𼮦<'6{J~;@ݧ.yy׋fldi@R|]Fe7o3A|o]4v//AGvj&%P/̾]&iT/H,kY]?Jԛzg. ")fUJew Y]WSmkFzc̀IF> 3z {6QԔ"Ļ-'D#{"*OM88tMy*+Dž/\JdVwHVw&?Mq/k76| =N0Ox{:V_bt3 ͧ(`هntGD<ɷ@3v3=v|Dv_G~9|Y; ڹ/ķ$رmLed?*zXuE`Y~/D;^KڃX/{G,F:&>cy!^6RSޏG8mV`qˏӽV_$ƳwVVO:R:Ԍ9}F@^0Xp XXKYPV^ +P`o:e-KucBx컖'QH 9ew61dO(.bu&Dy[2Y)T% #.dq}z3/zTA)/ =*xͱ::c7fϜ`;V ,u֟?]swj$OvE|Gv: œS:D$ӽc k{v?3v,`.5GR~XT|PDS|Vl@V( yyg"~: W>j|fTKk"gNC&WR=}SZ쾂7iTWI`U,Tɣx}V>xr4"KO Kw#~;Uk=V[@̏tp| 7:*_zNݻ<#܇V?ΰk}gnْm?w|g}5~Ԟ;kt6g:P?#A#w`^wA|*c`"#{|Y;~ڙZ{OGA>i|gخ պ?hՑG+ϴR7#y`ㄓA=o)A ~gV]}j6u5k9_P V]vǽqR}_wT{6 /'!Dܟv`؉G];C| NGwxΜ9m _89 S?_#y$y-ڽNL@6K~/Hp4૱?x~< kPߠsQ/o;~3|ĩhzzx)ƅ=>n=闏qv5n +wQ" | ܻ#$| p5+~?F :=qz w꺦AQ5zs0r<;#|߅sw}0ΓDϿHq4 ާRgbw~Pmݼz\w}Iq)# G9iM[PG'VSπqw>Pmi>~#o C9oGo`{c_-c)8^a|g!͓K RG_x>|aw1s7Bwv: U=$ҽF[r^X3__o{ h;C|g6ݐE8m |X=qҷnyX9$Hw^}g62~ԁBTqWG׿m.Py"ڣQ~P@_@;C]3T?r㧥ȟ_oQȝysm<93^V&PW<#܊7{~m?⼯6Au4z #6?_Y=b;i4Q~zQ=|:E{oO+"߿8яhߴ h"pj''qɵQ[y'$ފ[Nwc#@##>z"●Biqw50lU=G><; pϕj밮~"}V4OF؍W1Vio:gy}7dQBEdxJFHY) #%aF(!A O< 306,Тp yXI0&l2?&l 2O8v#q$\VkjCYX%Ze¿ =003?,nylob%feih5k h5%CJ(f~:04;++h:N$gNũcc&PEd&+?)Y8AH6>qd&P2Iľk 4P(Ck̛1 C9B95!<ᡦ4JixӨ-֕]Dʉi/k^O턃%/kYyg'< xAr[0Aڣޘ:Mz "P@ ƩsƹW2JH% ZJ_ ɡGL L$Pb $#I0F0RFHY閁&aU\ ̈Hʼn}6:# ,Pv9U(=mgTd#x)<;0 ¾V!B! t}'>.vK&$P@ 5E1H>%+IWcL1@}Ud>y«StB9H*|VLmZYEyya_a$<u<&V~ x8;MwlM8Х)bSfaYi)R}>b6[O oW-ŵ[i o-ewPhV(BCy;G+i1(*1, 5w>UB㇅HW|[OoMU/ ɰ,$îA䱞\~x*|sgֺzPѽH-]C s[Qr EJ;z9B9B9x(^Q7hFtʥq&2UJ(N{=$t y,RBN-뢡ͥh9ggw) R)Y< #mA!Y!!uVetz{qJCݛ~nn}4Q`v{h>:p"|Ijd|1] 8q Q_]?#c0kWp=lL:g3`}L^ufs `Qg'ر|&ЅOXz'`يߡέ + t巟V@ .g\͎ c7x 7o>S#>z Ӻh6b޺Asɀ= _ +C]޸߀JO;muϖチ{< xoH<~zAՠǟ:64QF\h]"\k+>;nRL0fF"Ҿrhy#̿j53=ԃY%kK0.݀ClXy\_DꑟsMbze6e7i[q ;1m!o $^ [Ɩ#[^1ק.{F¼fA|Fxq0~s$7o ?} ӂg͕K~ py I&ޤ`ZV̈9GsTz =0`KzXz+0w.@MߦV^UҾ>>}i56fk??hf q">a|xd k x<Sosɛ9:в&Q2֭]-ԝ_ 0S~`^|3`@@M}H(zx7= t鸃,,WNF q[1(PNVOrA>\ q|Y04DP>˿q-A\\r9afr?{/ͱ !ǵ 9+K:S`"'\k_ ݁S㹬ro>\٭UQ>F_5ɱ7$>eoҗEt.=|%I$? 0 o">EHNsv+ ʭr{/oD6!Y(ڏ~A]r )'_ESQ>&"\CO']K+,X|f ?I?rA^0X@]ukD|';Ǜ]> K+-euwbx\OGvg.X]K+HVQ@Du+qsn ?ASE>1dO~A…=wc~ygK$g#_~|%"S /'%: DZa/Ѽ^~ȗ{O@~9K&Ñe 0pfr?E;=HWH 4?ZDЎ!Z7+q"V\I ',_czI:H.bu/->w ^7ẙݽ0貌K}|vtR%3Z=L"ś,ǖ_0C7r{~1of!W[p:ww>! +,#5V`ugQ3TΫA{]@_A!浤?9Of7Y+nK3T-3k/ wuMn͙r8:oKw_O<@,eUCRSwt}lgq}+|ߥf"$?o(A"P@I<% #ea,0X 'daf~YhQAr@)["^XYeqӪypJn3>( ;$fp+i=r,g=G5x+lKP2gJUVnHZN泀$R@94ɅivJQ6N,彫k_*^l>]8oerC=j[&&E(Y0RFʂ|/R)qKB"}G'GA dIdi!{yd R@ So⟨g^(1rE0a9;ZB*,V'|z2rH)- .u/u#a+ ,| )YԎzyʝ;/Kw>Kw'_/"^p߰q ]NdBEy#I$AϯH3tP*xS{D@.@%HPRC|lop΍*xn=}{%~ Uuwurx"oɇŊ(peL~&ݭ?|OЌ_w~szr[bH0-62'sn/pD|.8}Yp.ո=c,POB$'}t(I4zG=c^_ZJx=Ǒ\W* U0RIExUD7=Όf-k'$Xټ bmN{z{`/!=G>svt\TNu28k5zKlIM`kxjU%, |Tb6ip~Oy+w/NbǛQD?Y-tAN:k~:Sp]l^/Qubthhzkt:*;t v<0V:'8.Nd12[U燬TN7xDmkT܋H:uB/|p~ECkAnYמGGpx؞cs>k쯀6/%NP8{7 ws~@|{7}z1ْߪixWԎWh_-F13O㳙}!O;tAܽG*Gn ހ}dh- QOQQAb{o׈ڞ= c$mX[6F m@lm]CnG;hmnvힶlqDB2c '8Atj" :5j' +" .I!KKB>v{h>:p"|I5) cnC0jdٕhC<`= b0aM#`ЛSZZ AeMYS]L Xuo,/,O \+*;` M_7^tݟocr6;6tũ@7t*k.wl2ƵcuV$~q|]{Gކ5 ;ؼp0ni@oy?о~xཱིnmK2yϺ?p'{ >+_KE\Z.` Y0*PN- +XlG4|9ev] VX#]e:r#` a\]|3`=CӃPa|7|~ טW 4bq<o<[~N~| Ư'^_ƭ$i|7<m*o>e*ҟMJp#ـ3^\05zπKƯ|`Rɗ^2W#~HY1o#`ر%!x`i⣈و9˅qOX9? U ̯k^Xc,T; tw~\|kX1[$<MК)P$J|(׽=p}ϛ(pw1 y3-;n] 䖘 Ài9?ff0k(yOދp>7, 7= Xr#^,z1ʱ{)r#^7\'? Aqʳ疢pwɻSsYܲvi$t܁觘=# M>ۻ(.~P(EzQP] HD UjriH ޓ+˥_ EADD*]@PDEXfn󐔻dlțٝyޛ7udD?֏؏zPXzf&y< 9_!|[> GAvNycrjNl0>0v4z"cE74ȝ;q7_M`2$$/"Woo?$qfiy Jܗ? zs;2GmOv!gm7:.kcR?)%zH[DaD]ƷYJx<6OiK6]?ͳQ}<ocP|h"߅?yHs|IuUf#O]B&fڄD44w.sfD=w_f?4?鸓+ެLql@EX;^'KX>_CW'bn<8D̷J H>f@îCjeO󐁚!62n3qs̮mۉ\ #r쓹Mc=_ X+wyx6Ng߁5Vddg\bjC8?QwY@:"‰ټUO"G61{&k`Y;ps[#BnoO9l&90ōsJ#H<"7+:97˝+[X;p;i t!Bؼ9G2S"ظ8r6cY4U 1$MI2_&H䓦|UsjWqܼn}r3צq ~d0/ {AU:v_ӳNgt6?2jg3θf= dz^Iɕ` 3ga>}2SS3Ǒlg{@c~'7fyEhߨX58^4rPoIKas y?K֛•} fŬCX+_"X1Ǒg_0}D~b_{ 7ra;pw58VV"hzOS/A}05+d =zaldo&">mQظ(]G&{I|cڧ=of˴nMI^n>g`)5%>1[ j{Y|4s]람]}EvJyE-9s#Z|e]TalÈlϻ&>.xu+1ϻlhd6Py]tЍyP >*.* &wYEeL>2 cJM}EjfKUE៙TUwQ2 >T3+] #0>R~1zEENJzEl91T|U]Tmz=@rמr9&դܚRk)㵔ZJy-- 8 KO9"V8͜͜͜(F[t,6rI9ddddddޤrN3"V,rsZ'MqXO9.^!;#T͜͜\\8 ؏+}?^ҏ:~fsYdognwμ8E3X˿;3w 4\9)TpeJ]G̯B11WrǕkb.ez~_[ժT?c=GWRI'_Ip Տ+n/ [Z<]&&sD(w],M\r/vmmƵJW~Eƭp,نˇ6xުxqj2^徹qP!2'425uwo91 Wʫx5"Ny草St4yĮ]EʫqZ=N W^>KB]27$zYfTyf3s Uʝj" -E(GHI=ϯx5e6 b)Zn>zq{u̯x5eV8$O;ωma,%j 8FVn7Vb{,Q@e3Dm)mTV\e{XxgfRu~mv\<#jq8)?gD#iՖӵ-`s)k2^1흜0G9mÒs"jeʗ,[ZoGAӇ+Wзm )&x-e2^KM {lHoʨ_.=^l8 Jj2^O[KaXO)k2^X1*ڽTLT5/c`y@?W9;wV+opwލ,*\gnǣ\MYKmH-Sf*Hdo "Y;opPpWW9u~qaW |;)%{ %w,%Xҗ&x!_<)OFR}Hl,0Ϩ'Tjnh|Hy5 wΖlnܠqwj4N?>Hm[rb9/0sQ 8Se$D?m[D ͸| *ۃ 0K45g^Kg^Kg+ۂ}2)5m%ܾqpަ/m40]wPKa k2^Mʭx礼s,MG)F:mmSZ-@I#R㿶2x}bWrޥsFȋ=3뮔>Z{(R?D8Y2]T)D$>c3#/mhm6!eNͪ,ʷ)`l#;̱j-`mӶ>g*qU>U&Y_c%V-|meT `ÙiUpa;ϲT! αḆRCؖ^m;;EuT8lY8)-;llUpQaeyRQL_deOls~bޤBK{KTDr#b i̦7d,uRdžfaaz͟gDqE*R d `]]t}ǠG?7ø bY,װL,Pe\bY,"#ʮbY,&2K,Wro\IHJĊX\TXtE*V_q+e+5"s+2iȪOYX剕VHG^O:飠[@> :eP@C\|s/A#;14vt?۠ M9T4\ k:voj04w4g;51hvɠ9hۇFEv^}@/z ]OX nX[3گLjUǒz!~?P_oDuz ί;v7\ ߷A}oSn#7~Njy;xtDOwdvsqw/PۢΠ!],ICӋ@#|Aߠ M:4aϨ?뀺M%OȼN/g> ^K7@3X;l;L<Ь~nט[k.e!h8bF"!g]8Uc+!ׂH/+d𳣠Ecgx WVG+?wF}U 8ծH=3[}`_7h Cɺ[wy\8kK,TF>p=йn* @z\ <l8onA]??c(Koď<Ѐ z[fםFSSPoƾj#@3Bhd;\0hv7w î>d"Ǎ3C/.xP/(PRp(q|9+c 8ad6D?}":ߡ^8|ˉnBe\Wt^KA C}E]coaRɴns>t'w^U>AO24hXpiߌ8P} h/MDXZ3!.j^N'g'kmFyy&f$7v3]4XмnD/)?@^Mꠞ7уs<}DnC"ǶDKo.WqȟsVr,v=3S~5K_U"l B7UCw#@YExd -&$? R/wP-"vj"V&{-A]+Q`{}3{м_'rf-c㐣i d^D_)y7[~ΧhU/9q<+AMk;D y~Ӵ,i؈§YEİr[!"KAo!?RYاED:}_{~"PO'vE~x4sDmG5$PvP62~DgC^Aے-ß8^!x%v}ڇ݇r_jڟMv=O"+@c#"rua @8"GrIKi2۬X|ԼYI1levcAM:uz"u"/63_ڤKD~5e@ɕWfh":mS|+}#_^.B$rc[=,7ֿ8zd6. M{cUVhKg?MrgMɾDG%rew |ȕ"K efӾIWs^Ȯ5{l7({FOfw*BB̹s#v5!|+O>s a[ GBu$%{_)#䀚ds>Efy'[;jKP׳@UP+CJ?X?%bKl}g5é}D=|LyeLqS9 lb)*w66癒0o +om?_zhQױ~bMi\b;=L6`tv|ñ8AHDOyzJ}Ty<<Ϙ$;"^c ShCS%Ya?7%z`9_w;E]7cl`o&Lu ee݄~5Ct4_Dl#qUso)la$45wլ]{m0f<6f z]y.<ӘD|eyU0 ϻSQ|{Ee9LM}Ee4euXUEe,̪-02PwQ]#.JW&.*T.*zw*V.*fF_wyU4msq<ܵ\Ϋx5)&㵔Zx-R^K BSέȸN3gn3gn3gs: 9'"V8KͤfRN3777777ӌȸlܾI9Es?p~\F8,q˹W{-gn3gn3gn3n3n32Jߏ?he##5fۙ۝3;N L+ WN \*RWpQ2󫣐qL̕kb\q嚘h쳞W,–r*Xdѕk|RIyW+B ÖOWɹʝ-EKWŮ܋]cqqqҕ_q+K *D弚WGo.s\3THI9qM]][E~•j2^,fSrer9,:zc-M8`WjsVϱSÕׇ+q̍;^Udف\CrgjHµ@gKQn),R~Ruk2^wM,.X^{q{e=;=k2^wY=ɹ{7sbe[K ZcۍK(Іn +%f(Q0@[ o[/ՆhAW}^,%>噙pg[ȬZ,Nʫ+-Qn?lDktmv `JWix{''Lcj|>Q{ǰܵZٷ"%˖iógrPJգ-mmBD..Eʫx5^KRsS=`nq2sW~i6;5WCm'l WE"Vwv/:`Ky5Xrϕ2A]-[-w# nř[G(WoS֒w'Rr˔ '-Y[H֎[97U&xNݪ/a\XUn}(;%%NJxBK Veǯx5^W(Oʓ'#)o,#[ %3*G)Ze/Z5D9@/R^Mƫ4;%]&+뢳~+87~ܝ-y ͹mz#RܰX LܟwTƒ/NTG!qC3.6ȟ6L,>?%F͙ҙʶ`ߠuEJv[d /lD0x#͸o\Qq~_*>mmm6 Io_KsL>X1Y f;$ҦBS9nߕɚUx*,Faf\1rE8v.R\3Ol7BŒԭ-z(/x%s'H%$7%CmS3fxz`&iQi|٬==}յ&ަeA1e\֘:Wչ\+.չZ*nչҫTzۿ2\Ⲽ2.b_eW\[ +*arRHFGy'7j'CРf{/2tiDKCa;G?8`dh+QI(u7>_>Pm˗Qi_gIO4,n& 6|2  1:@n9Rv`iz߃]V =\Z{e_@/UCWu`>Or0KPƍI/<v0rEˇ]D sgh_G)g`E YI ]IW1l%57w.!~a]x{螭_|!L`.yn1Ϋ߄>4N!'}Ϙ0=|/Dl=꣟PۋDR 9~)Wu bi.t;^32% <.> C $絆c{TNSU3`i}k > 6<l:߉Ű ^=@V`?bx'i췱>@^+]R.^N?ρj:1Ew.*;\CW\U%Cy@{/0^Gq#_8 ]rUs~"% ։;_*䠓o?$'ǯn24|iAm?ݍ? O0/_~T ̓n@?}`1Aq.>l8;~234d|Ln ;VMPAꎭ1' چ?_g<Ղۭ »wNT-7ط%q):̇/Wܗ+U r)t; +1Į8{+fw?~[ܢFU ={M xe艑0W>rÖl1l(V}oXy|{Mia[oHy3AQ'Cq rc.R>T/du1'з; vޗIF`LA#t_@wuط"s`\n!CUq}\\'&ȹQF#hnSn`^InO OBއ0|䙱ZuDAϲwyY6 .yԓr8<5g+@AoXꏷjF;b4_}G<ÐsL噐G泝_֥N_rB9lya C~-jx9[ ~B1= V}@*$E i}s.GtmbODcCq'A>O%G$;ѝ\%71ݮ켄P9m|%%Tv3G%%T?Wv^B[*9/ GTR^BVr^B闫`vK( (c^B% yTZy%x^B6w0%TSU,/ Z~x^B5@K ѳZ*\=#K6jPE:.ʖPoW0\ǏSXkLY)c~R=A\A\tbfAY:lb!·p!g, Ϳ j>eY8|r0(øC9;0N2a.˯@Kہ-mZ2%/I ~vKli0`?'Pgx Nq?/cʹh:@A=FtbPeZ9X8;8n]YPy]oPKӡnlΪ=[olaCx^.<k\ (båǴyL[%ig!~s3+A\l$Z5WwVuQ^ʝ-_RvYw%^ 2K.GtzPb|_ѳɫȸye~.ZAnb7.{Wk3,,zhsw]]M6&jU@Zlb}J\P C-a@l2U(aUfRFfv7\8k{pe3+!\p|B_z3k\-ܬ/n[b$"2<@Ҡ>̣T3ew9ٜgl3RrJ2 dW&#{̊QV JXeJI$._aˡT?4C6܇>%ؾN,f'@7<ZE3]NfrV@eƻ`"a=*%1v FWb'(IS`hM>Q2,Tc*ҚY՘T*T!1IKQq1ʇ!(t)„!2\\,,lQ-*Db٭?*JEԪ[f*LVKؿ7 \cAHpbhP] ]rdhԊLd޳Nؙdh..SCk;uдK:14X.3D &>z}D6"r W|S;O=邽d -IБrɖܚXr3t."C{1'~<ܢ]SU}C518{;C7!hr44?sERcTNCKڄv~>}h۠=\t&W:q꽗Ao~x%e0a3{_;΂O?8a7:=K#T }X3t-Dnu'ϼ|Pk,O20 rXlQ 8 Q~7PāiH9 Uk|5g e{<25~F|,܁"{'w6!|.@B;eOS(w$zҷ \wn 1Y2G'Pw"7!K1t/u6΀j}kh\ރuw+?gp?#_4e+Z|-Jb/xXŠ>XG#GYCU+iCz%YwAԵmzX+k1kPWL9~oiE"}@Cڀ߄W~FRO/WՋpaK9Qez]dm Q%|yF\~N,A=4gBf>䩢ZNշ?[ u)cY S$3YbAξQY1w #Y'\tϙ!  upԵG~| C`=d^~2+^ <w Xy>~q_7r}*C T,mگ7Rɝ `þ#'g(ly "mdY1-%jxD-yk5oa}?hh {8>ɚd?&?7ϓ1AK߻3:o=so%,Pn 䚨j 9'(=y\=lֹ pt ^_I49ڥfQv9S?_9>T5G{^{hZw T5|(BGy04Fp{9+ n7[[jQ$*aX ͸ ٣um3+!Ǽ(k\|3Gk{ahv/,~1}>z?cH_j(TVzg\퇐X1UOw-Ǭ:"2U3'l^u4φ!/ƍ r= p]z7?m~m 8~^E楈vK9}_b%UZ?(GQFyIQ8NQ7!& /:~< GAt< < (t{(Σ?Gy(-:zgJQd? yp ΣyCQ8@ߢoTw/G::RnF8tԉOyHQΣpGu2Jvt< (/GayyGQΣoևcsId6@tyDQ .=OQΣ/<kC/t=yIQ?Ƭ~< U!ߡ'w.?t<'tyNQGat=y\@?tHQ< vEQw<Ű#:CQ;GyC< Σ0:z(OQGOy(;:BΣG:<3@tΣ`OtJQGAtEJQSɣ :uty(U^OQ*52aɟ\~< (\OQhOQ7t:G&< ~Σ`t9y`YDž(y(Σ w:<< Gq:::r>yIQXtE{Θ?GAtCQľ<?< ~Σ'G!(Σ /:z(;tyGAtIQhGQt{(kty;^A{:tyT.A:MQG::<[~y:z(GAtyMQG< z(#:B;:"qhGQ7:GAt;(ȓΣpΣp=Gu::2r(ȍΣO:BΣ?:< r(eyBQ+Gaty-:"`tE2ΣW:}y(tOQd-s}L:r΋Σ`?tE~(GQGH.utRKa9Vb0@@-N _km&< hks U2cNՁ>*uXoV@o˵L~[r۪H\3Wv-k%OA-S[r %A C͵օ[(mVdYH#)'֮iJݵb/*{ LÙ8*!x2[^% *Z٨]r$!"Db{ > pB̰P,+ x@ L$U -؞¢"W^$/X.VKx^6I; Tv<ـIʃ~K"W2jLEZ3+SטJ"p)*n5R"p.2BZYоB. ·*jpYоB. WJz tFIim.24h3 ]ւ`D>w24Wx?u tBς ɀ}k; X '%ϚM`E׺OS} TQx7n}>Z< te7^|j,Y2VOZ%q`~! gQ U{˃Qüc3ak (2OUrRm'pk7>@w.җ!w 4MџbpO# q(Kf/vuO+&(_>Gۆg:7;B\;YK:|,ѤC4'NAQ ύ&W\#Xp/l4O[_k`^ ['6 4_0ߐ߲?34rAuSp9msC"QN4ӟ$Y7l^ e4N H  EyC/K!05)<>>:OWfo (4M~ Bd cx&el_V8T D&8Նr^:{Q}snszNLz {DBΐ+Y#C}|Ov[ط6!zs| nB_>=%D"}#pzNVtbӎ [V.B/WNؤZPO`OzļRSgj핓K9ͪ vQ^8c7]oYuK^` ?Lk<ߢ?~2= x㝘f+V[g1;2a$L&?Q~խN0Es)Ue^'pY.G)7+0mƆO=6fCCb~IALEͳZ藶EeVB4踝_hwa^|;nAs؈|y5a cPό<_$X_yqu_cK?:YB4lkλG`Nߒ=8{Cͻ?|+w:Q:O!W]W!_^N$]<ƶ|Mc\|{~c1?Op^7lW<+7{}7N:Q]nOr<4F^x!]R0`PO_ij 2 LP?NG'ܳWl+jdhT݁8Q~l=G/ /yqKWsA/]0/M5#n97+W~;݁79$; eۿ^`>NfZϼZ;|-V}5 =*x ~%:7=KdS='@&n4㐣>o\޴)Ym nVʽVgO@OQgңh*WB]ط{ySk/c]۪qMGyWiW0nW}릐gz!KF7#EU9_]47X~E)OJ^ \v97时tQH`/kulXei!J]8U>>Mw!;sy͠e hlƍ5{Js1CSG|MF4]ߴST^!6;RfhQG1gO^!?\{ 6wAZy|?sƧ3"C;24`|'G(jIGQyW:IGQ%NEem,:)NEe#NEecD8y1& IQT$ɣ(W7T\E2?@R}(j-qGQzsGQ3-y뀤QTAk$ϣ(!by7(g5ɣQ$ϣlsa,/"찹h`˨?f&Uv>%VJHVPe|v*åf2pla,&E>Uvo1f ;lsO_Ma vVQ~u.۬専 ;#Ds.Ta Ta+ Jhy<*lU.2`ϞVl3*;\Iф8/*iD:+*S !#+7jE"8a; ;\)JI{ ;loÕ';V9U?U&yL]鰺be9՘fVd5"1ʇERTjLaE]e+|\loU,|\5\u5̼]?+➧7d'5,fEی J+dIk MXCF h6'*z+x^bڞv4@!lAPbnXI 69s# '1n~ rxn^;O.vt8ТWO*@1-bF E?P\+\4rǧ8'y8^j@O]xP !jD sT*?oc\4)n'xRQ~2> Jo}b-JUB {Mw" kцhR6py_惡ǀףh2?koFH(e?qe)K5=Ye@i'!GݑЫt5~||4iGț۲W:4KTH> D]q'8y[إfu,꺳΀d0M33-CmЯ߼P_r \El8)=rS*Tr~{e'Cmu~NaE77*̾."67'EgGG!KV8{-o=o.iv3}rLۀoK_3yZgAΓ(+`G#.4rXJC#fxt|?!'ĺJjDV4:`iځu޹iUOSgx.P׋4r8q #@C)@$ۆzXgN5VDSڷ:Z_G BՇ|낆hFcOI\v-G; dm<_* yG9yw 't*ǃ:Ic~';$]#w^͏oYg"~&Ϩ݈@t糴3T Y<{3z @O>T ,2PYfA @~E+g 6O*uoy̩&6y$l|3^i(׻N/ˌ?+3@{t.֗Q[v6 r Zoy6W ~u3:}z#$3.gu;7 \v]g']9v8*ȓǙS}^>O_q y|?  G:0!՛mO2; ym/o^+ΘZ~gB΍ļNu^we3rw>Ə]%ץ^My@e{@{{:e3.q_9su>}7a, ˢJ)N|X9\X:"@U鈍wq82FM6I{*gW*]}ka3VhN5"YkL1Ea{S|a{zbe!` ,|_![n5,|_!,bWr%bU2S У!s jםK FN`3zx=iط4Imy?w޵Otpbhx'>?μaA~X=X2]Ьk>`ZLa#Cˠ/mi%FvA{~ahQ߀^=vׅ4ςUuPw#@oa*F1_ 3!ex`E^lcSp\疇_ ln9U~N6x X?xZ" =\%*g?0bN^b$c!Ql[ }E4$8oZK5C?.L`Ҏ _1~Too';`WLh* FT+0-]6_w+~ae.`tiɏRԗ5XzĉǏ;H%`d/fћL3] 4MO"V皀1m[ z9$S_$vh_0կ u7Ka8c߉K1EV:248lI*Zx|F?@j%Y~Sս _coD3Uګ`I`p_;@4ȞǸ>w"z[ǝo|E_\"kgQ㫆@=gzMLN\IoǑsz.uw?/B~#ÎǽCq\9`{Ba״#'mkϺ_6)O4¸ot~OT/lǟF0 T 9dܓ/6 _ ̚wSY㑡w}-dS]%v\t7ܨ3L0Zn։vL ]FjDЌ/)UN1yfJv~ًkӧb܂zB>OV=mm>~z04`-czL_ҥAO#]O;zʭmW m.k+mzUF[;r2AS?$_K۬;!Ŏ: Ԓ #'J_;wP}GhgU_WWu/B/1NfW֖g͓{^ꇰ;Ƹ@?.V|#^M ۽U7cop]җ@OI0og7/]roKa.O_ 34yo(!R{߹XɐO`lw?rPNO#/gtbh(7/7q>TU9XBo/o}6lzzȸQ&;no?g7*/kg|y杩3HH:A!L*;}o۸ #BS{c=wĸ~fmz@]ˈE_|x2%r J~g|$k|4<}> }I04Ÿ1BwE52tڥ;ACj羟H ˋh@P03`>6[[y{A^ h>* -] ') )j֕o0]5rn=r-,,ݮ$6 ا3g|^z=l2Esq[>ҏgDadW9'ʸ*zOTn輝OT(PR'0rF7I'jD҃=-*(bDs"="QU|nDa{X~bD=\&b"p)lA/S^'X* [Y0+AUmX{R"e$07=, ˢJ)N{X9\X:"@U鈍wq82FM6I{*bfW*]b"@t1iͬjLE^c* ,bå՘Jջ,( Whe! ,ߪXve! , `{Ea{X"p'E\Dabgk<{X"=,,vֿbY0g5׼F,? :US9 ~{{tk?s'r=P{T=,bDa[O"0'{X%͟Da{ضe˟Y_I"=,c&bKDa{X-"ҬE2VKf="b%K'Da{ؾd"[Y0+AUmX{R"e$07=, ˢJ)N{X9\X:"@U鈍wq82FM6I{*bfW*]T7aIgW:ήX&e :U犴Tdչ"ΕE`V++_&5,]!+pJ٭+rE4^퉺+=z'C! AwbO*fh> ކOpm_b~6Yֆ ]?m@ 0:.j&9k"KoԀ~} @'x!;^Z&h ]y2"7[bfy+N|a3 ,"h1Wy04e\w]t {@ԟo@A+[ N<>N|}('|ii!c 1oGhSOح jAIСG;ՙs&/okO_R l8<('BOFxG.^ŝxyB{u:O;96 :`VAYqmhٸ.tx;yD {q>mJrۂo'@nqx|g^JK欑@::QctPDl=Jǥ&N=9@Y@5 };O_Ϙrf1-j< x_n? QO&w1K^UNL(FV>t G<?~ox04^]? |EN?D=MXy%']okO]_sˀ.88zPlx,-菊|y!=|/mګø*guٞ ~B^m<|G]KA_bdoN$}#/oҝXE󓐟,zu 2TYUzKh4I͟9HϛoC^!u kj\q3֧/i{־=Kdw^Lʚ ]o`?Yp]NX7kl|OX|e- hv>A z|r) hLL3~h}%/Ř)!6F|;Q\ ~41k Ýg{A3vDk=?}|7Lt']}p>gk vf= 'A>/c#НLv!׸_._]<&c4/MѰcm)/můJd)A]k|g-v}P[w!gf?WJhz㫒c@[9]Z@嵆>tO ͮC7#>)>wva\t"zs6Aoe7|MsĂ0}j"h ?K6 9ƁO?bMx0wH8M˘!kTy,O^;X1î_~;ǹy/[ k7hvkAg5_m^%eVy { $/r>P[CTr^Beڂ󕜗P9OA~x#Jqm%%=O;%92%Tr0Wj{Kq)WH^BtoK;%TBK7]K`_K,Q5K^zDjq&ZbT=q| Y?* Ǿp[`W0x;B +l;i @8ɴڣV- LIkb+מ+"Vm1uTDMOD`QDEЊ0QDS8iBHDЪPSuHkLEV+\|HO-TD e*nչR0"ZhU-kpYHB( She!pV[ + She! xh/W ZW 6vЀw<4hQ.Ev ?$0e:ߑGRPt-;-iCxpg=<s4ZP^y k'_4c@/1Rxz4|.\ _G_` C#c L|Rfs; ޟџGO菼4{x;3s8T1xf$ _؛^@96rKo¸sx;^j#7@fdANuˏ oq_A}YX.8_ΜI¿/ܵrKZHQ7)s36yV\"[nΐGhX{Jg9{W=!7< SiBS|j?1{[lco|4teww*v0x<=Z|rD͈ X酗!t5 /j<cF%7r}aըDSOO󡗴n@IoPC=-OE cdhrXr-;+ yFu ;q"չIVLi???8A^?w@$)4!g<0~Q|)yD'~l]&u_E }ƢP :*a;hRPO -o΢wYIgjø7oZJq| ř7tÇ_ԖwnFd*R~z5j[G7l7Ioh4 #K;OZvyO}9o/5?M(v}jO~{ SdvA_0*LwI26kՈ>=⁜k}I<0%"7{c?Yaw1<,i5 q P)8/A^## dW:pf䚦<OCZ:37X9s~_º6fzy~nw>OG~2br!8=`/u z؋v ǻEF)b af]lEгV`xdx=0bg[7t}dGb*o6nR'XAO{ zкXo*0״>A@_iOaaz/ݭg4Aјo_nosз@k៩/ͫOk>Y $~J#z.?]A0Pt;>}~43<_J hYK|9#GpA8)W9E$q]vl?Ϫ6wG<qvqv&Az}yy+%TN*mJKWy sJK(úW%%T伄xJWDt˘P-Ѿ%5@x^B:dbhK@W&ߪPjh-AD +Z*EPnEƭgBK}-4"Z}aul--T9BB+rQQKH0AH[@-`cem"Z*DhBL@%7.+$HFئ'l $SD a|%V!"R4*(Pm8ϮtL!$~YUURC+!d5BT әW q'd;捔oV23H7GME.G`.^ԅ4d9 f<  Mظ҉󜆂1S5U;&(;CfkT~cCچA^$?wpzo:e ^Y׮bSfOGV0T1Ιv,>~=et>?cq>څ/uk71]׍y}424Dz+!7OI+>'n@3ۆ~ [~)mzxR{by|W>^+Ρ}ƫ?أYx^SyN\(~ުIh[v(g1>/(\_:uKx}3 g7]z1v;53OB^{CbG8?h'Gr sP) vێЏM ix-1V +T+kϸ|~F! ]cKcU꜇O${<Ľ~ԝ h7{"JxAk_𚬹3/xx 0|#nh;OܔqL q{=ZbvΠx6 ׂ!ǢyS+0+ }O~zϸO^GmcAĊK5#q}B.y==;լ{5 m#O.5^k~F-{P}ςc0*=&C%i"xQXW!#&þ jwpc ^<4r5NjX Omxhq1oy@oS/| >T 04滘ONə5;l獟 oz;EH9 'NmR˻_pƚX;;-0O]~C4H|nׂ51!S" ]$1~g h`'3 ;)ş!ό7Ly)FE%w֠%iu !+9(&pG`il;]اG$"kLK"N"v>Ɖ8q(iA}ث+aZj a2L:}v`|~Cuy-~av]a*7/i2g -M]uUO^Me&8Tлo*vN79qeܿ[1n o*/$G JMyiU7bB;5;TQ!7 |xܿG@nv޿VEгo{!S{񌟒QJEhy[h!Y-G圣w=w=w=n梳3gKgΖ\, \, \8 ,iB2Kg2Kg2Kg2O=[ee̢t?eZR\-{Vf Gcu`wn.syg\iڒz4;=y"V]q, ˽ZlFJC"9m]&hcEbSwe/eUօZQ: OƉJGGwuz[= ǹojS9>J{u{KhsoBPӎW?ܫoqNkT[)@J@=ytE|+E|+ΕD|+E|+e( -񭔊) ,BBxo-]#C#W4*j:QC&'|;C'Ogh2Ch+:4 GZ++fůV|_~m꣉ΚOku޺-~U~TiCaJzLZ\7XPeJ -fR|:ڥxOE= ~>v+m3렌N?qdCi~uԗURBѢ/u|Өug*0^H_p~æ8|m C'] zPw-B^Qab&$ům{Pڶ!7mY_x+uv_~П]/*N_Hyp[9,s= O#~)KڷRw𑦴U9}hk1xr =C~UR+Z"[Z8oCRh~T71~ޯ~?[2Y>W~yhZ+ϐÒ>m~|_~T|ԍ:Wkڝ)Gq"to~=0pS!?B81<1NܐݐKʤj15>>p8]#+]_OuXpX4閠G㣯R_ev0?+>1>sI*+21ž!jE?gJ^||;8;:?N>NPvtMV1|?u'9o=?c~;\M3QW ? `_G-WȺGLcO|$p@8U귣 5;_ېsgs/ aGaT9Z&5q/墧0~\n-h_ym:7ܸ}g~ϙ^B-8o<zl^8h,~9]3AUF?OS?/3ָCчӆؙ|o[W\4}~~t;c]> %{/w֊A_bNA=}G78>;ϐnɯ7_YDCNɆ>H_jvL~E{۔ACs0N1OF~@of+W4uOc-歷R5ojo*s\WJqbFm]y2[)%ۿi?qMeSCo*]F~5^J;름7ԗԆ}`=f&?+*G+xV[|v޿%27 M7iʹS{ZbMe57U/B[)[)l[Rc+b+~ŷR07*}\oC֯.[!V\S!QioTNsU<^UV]Ǫ*ŷRRY <""bJ{""RVVJŔPJ!e!}"~+|J""~+EV +~+"~+J9 o[)R*~+EV -~+E|+E|+E+R"vķRk[)VJJ[)vVJ>.RlN[)œhބ !ȡR|x _wBoU\{+7~[:3H-EhbloLY)8en{NٕSv{qʽ-eK5Rt.X`f3tRt]-E7Kh⢎R4ugDIH8Zxcirclize/inst/extdata/download_ucsc.R0000644000176200001440000000406714015721224017441 0ustar liggesusersspecies = scan(textConnection("anoGam1 apiMel2 braFlo1 caeJap1 caePb1 caePb2 caeRem2 caeRem3 canFam1 canFam2 cb1 cb3 cbJul2002 ce1 ce10 ce11 ce2 ce4 ce6 ceMay2003 danRer1 danRer2 danRer3 danRer4 dm1 dm2 dm3 dp2 dp3 droSim1 droYak1 droYak2 eboVir3 equCab1 equCab2 fr1 fr2 galGal2 galGal3 gasAcu1 hg10 hg11 hg12 hg13 hg15 hg16 hg17 hg18 hg19 hg38 hg6 hg7 hg8 mm1 mm10 mm2 mm3 mm4 mm5 mm6 mm7 mm8 mm9 monDom4 monDom5 panTro1 panTro2 ponAbe2 priPac1 rheMac2 rn1 rn2 rn3 rn4 rn6 rnJan2003 rnJun2003 sacCer1 sacCer2 sacCer3 sc1 scApr2003 susScr2 taeGut1 tetNig1 tetNig2"), what = "character") cytoband_list = lapply(species, function(s) { url = paste("https://hgdownload.cse.ucsc.edu/goldenPath/", s, "/database/cytoBand.txt.gz", sep = "") oe = try({ download.file(url, destfile = paste0(s, ".cytoBand.txt.gz"), quiet = TRUE) d <- read.table(paste0(s, ".cytoBand.txt.gz"), colClasses = c("character", "numeric", "numeric", "character", "character"), sep = "\t", stringsAsFactors = FALSE) }) if(file.exists(paste0(s, ".cytoBand.txt.gz"))) { file.remove(paste0(s, ".cytoBand.txt.gz")) } if(inherits(oe, "try-error")) { return(NULL) } else { return(d) } }) names(cytoband_list) = species l = sapply(cytoband_list, is.null) cytoband_list = cytoband_list[!l] saveRDS(cytoband_list, file = "~/project/circlize/inst/extdata/cytoband_list.rds") chrom_info_list = lapply(species, function(s) { url = paste("https://hgdownload.cse.ucsc.edu/goldenPath/", s, "/database/chromInfo.txt.gz", sep = "") oe = try({ download.file(url, destfile = paste0(s, ".chromInfo.txt.gz"), quiet = TRUE) d <- read.table(paste0(s, ".chromInfo.txt.gz"), colClasses = c("character", "numeric"), sep = "\t", stringsAsFactors = FALSE)[1:2] }) if(file.exists(paste0(s, ".chromInfo.txt.gz"))) { file.remove(paste0(s, ".chromInfo.txt.gz")) } if(inherits(oe, "try-error")) { return(NULL) } else { return(d) } }) names(chrom_info_list) = species l = sapply(chrom_info_list, is.null) chrom_info_list = chrom_info_list[!l] saveRDS(chrom_info_list, file = "~/project/circlize/inst/extdata/chrom_info_list.rds") circlize/inst/CITATION0000755000176200001440000000123114015721224014166 0ustar liggesuserscitHeader("The methods within the code package can be cited as:") citEntry( entry="article", title = "circlize implements and enhances circular visualization in R", author = "Zuguang Gu, Lei Gu, Roland Eils, Matthias Schlesner and Benedikt Brors", journal = "Bioinformatics", volume = 30, issue = 19, pages = "2811-2812", year = 2014, textVersion = "Gu, Z. (2014) circlize implements and enhances circular visualization in R. Bioinformatics." ) citFooter("This free open-source software implements academic research by the authors and co-workers. If you use it, please support the project by citing the appropriate journal articles.")