patchwork/0000755000176200001440000000000013766623562012274 5ustar liggesuserspatchwork/NAMESPACE0000644000176200001440000000750613766073647013526 0ustar liggesusers# Generated by roxygen2: do not edit by hand S3method("&",gg) S3method("*",gg) S3method("-",ggplot) S3method("/",ggplot) S3method("[[",patchwork) S3method("[[<-",patchwork) S3method("|",ggplot) S3method(add_patches,ggplot) S3method(add_patches,patchwork) S3method(as_patch,formula) S3method(as_patch,gList) S3method(as_patch,ggplot) S3method(as_patch,grob) S3method(as_patch,nativeRaster) S3method(as_patch,patchwork) S3method(as_patch,raster) S3method(as_patchwork,default) S3method(as_patchwork,ggplot) S3method(as_patchwork,patchwork) S3method(c,patch_area) S3method(get_dim,ggplot) S3method(get_dim,patchwork) S3method(ggplot_add,formula) S3method(ggplot_add,ggplot) S3method(ggplot_add,grob) S3method(ggplot_add,nativeRaster) S3method(ggplot_add,plot_annotation) S3method(ggplot_add,plot_layout) S3method(ggplot_add,raster) S3method(ggplot_build,fixed_dim_ggplot) S3method(ggplot_gtable,fixed_dim_build) S3method(has_tag,ggplot) S3method(has_tag,guide_area) S3method(has_tag,inset_patch) S3method(has_tag,plot_filler) S3method(has_tag,spacer) S3method(has_tag,wrapped_patch) S3method(length,patch_area) S3method(patchGrob,guide_area) S3method(patchGrob,patch) S3method(patchGrob,table_patch) S3method(patchGrob,wrapped_patch) S3method(plot,inset_patch) S3method(plot,patch) S3method(plot,patch_area) S3method(plot,patchwork) S3method(plot_table,ggplot) S3method(plot_table,inset_patch) S3method(plot_table,patch) S3method(plot_table,patchwork) S3method(print,inset_patch) S3method(print,patch) S3method(print,patch_area) S3method(print,patchwork) S3method(print,plot_dimension) S3method(set_dim,ggplot) S3method(set_dim,patchwork) S3method(simplify_gt,gtable) S3method(simplify_gt,gtable_patchwork) S3method(simplify_gt,inset_table) S3method(simplify_gt,patchgrob) S3method(str,patchwork) export(align_patches) export(align_plots) export(area) export(get_dim) export(get_max_dim) export(guide_area) export(inset_element) export(patchGrob) export(patchworkGrob) export(plot_annotation) export(plot_layout) export(plot_spacer) export(set_dim) export(wrap_elements) export(wrap_ggplot_grob) export(wrap_plots) importFrom(ggplot2,aes) importFrom(ggplot2,element_blank) importFrom(ggplot2,element_grob) importFrom(ggplot2,element_line) importFrom(ggplot2,element_text) importFrom(ggplot2,find_panel) importFrom(ggplot2,geom_blank) importFrom(ggplot2,geom_rect) importFrom(ggplot2,ggplot) importFrom(ggplot2,ggplotGrob) importFrom(ggplot2,ggplot_add) importFrom(ggplot2,ggplot_build) importFrom(ggplot2,ggplot_gtable) importFrom(ggplot2,is.ggplot) importFrom(ggplot2,is.theme) importFrom(ggplot2,labs) importFrom(ggplot2,margin) importFrom(ggplot2,panel_cols) importFrom(ggplot2,panel_rows) importFrom(ggplot2,scale_x_continuous) importFrom(ggplot2,scale_y_reverse) importFrom(ggplot2,set_last_plot) importFrom(ggplot2,theme) importFrom(ggplot2,theme_get) importFrom(ggplot2,theme_void) importFrom(ggplot2,wrap_dims) importFrom(ggplot2,zeroGrob) importFrom(grDevices,is.raster) importFrom(grid,absolute.size) importFrom(grid,convertHeight) importFrom(grid,convertWidth) importFrom(grid,editGrob) importFrom(grid,gTree) importFrom(grid,grid.draw) importFrom(grid,grid.newpage) importFrom(grid,grobHeight) importFrom(grid,heightDetails) importFrom(grid,is.grob) importFrom(grid,is.unit) importFrom(grid,pushViewport) importFrom(grid,rasterGrob) importFrom(grid,seekViewport) importFrom(grid,unit) importFrom(grid,unit.c) importFrom(grid,unit.pmax) importFrom(grid,upViewport) importFrom(grid,valid.just) importFrom(grid,viewport) importFrom(grid,widthDetails) importFrom(gtable,gtable) importFrom(gtable,gtable_add_cols) importFrom(gtable,gtable_add_grob) importFrom(gtable,gtable_add_rows) importFrom(gtable,gtable_height) importFrom(gtable,gtable_width) importFrom(gtable,is.gtable) importFrom(stats,na.omit) importFrom(utils,as.roman) importFrom(utils,modifyList) importFrom(utils,str) importFrom(utils,tail) patchwork/LICENSE0000644000176200001440000000006113207337010013252 0ustar liggesusersYEAR: 2017 COPYRIGHT HOLDER: Thomas Lin Pedersen patchwork/README.md0000644000176200001440000000571113766072440013550 0ustar liggesusers # patchwork [![R build status](https://github.com/thomasp85/patchwork/workflows/R-CMD-check/badge.svg)](https://github.com/thomasp85/patchwork/actions) [![CRAN\_Release\_Badge](http://www.r-pkg.org/badges/version-ago/patchwork)](https://CRAN.R-project.org/package=patchwork) [![CRAN\_Download\_Badge](http://cranlogs.r-pkg.org/badges/patchwork)](https://CRAN.R-project.org/package=patchwork) [![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://www.tidyverse.org/lifecycle/#experimental) [![Codecov test coverage](https://codecov.io/gh/thomasp85/patchwork/branch/master/graph/badge.svg)](https://codecov.io/gh/thomasp85/patchwork?branch=master) The goal of `patchwork` is to make it ridiculously simple to combine separate ggplots into the same graphic. As such it tries to solve the same problem as `gridExtra::grid.arrange()` and `cowplot::plot_grid` but using an API that incites exploration and iteration, and scales to arbitrily complex layouts. ## Installation You can install patchwork from CRAN using `install.packages('patchwork')`. Alternatively you can grab the development version from github using devtools: ``` r # install.packages("devtools") devtools::install_github("thomasp85/patchwork") ``` ## Basic example The usage of `patchwork` is simple: just add plots together! ``` r library(ggplot2) library(patchwork) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p1 + p2 ``` ![](man/figures/README-example-1.png) patchwork provides rich support for arbitrarily complex layouts with full alignment. As an example, check out this very readable code for nesting three plots on top of a third: ``` r p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec)) p4 <- ggplot(mtcars) + geom_bar(aes(carb)) (p1 | p2 | p3) / p4 ``` ![](man/figures/README-unnamed-chunk-2-1.png) ## Learn more patchwork can do so much more. Check out the guides for learning everything there is to know about all the different features: - [Getting Started](https://patchwork.data-imaginist.com/articles/patchwork.html) - [Assembling Plots](https://patchwork.data-imaginist.com/articles/guides/assembly.html) - [Defining Layouts](https://patchwork.data-imaginist.com/articles/guides/layout.html) - [Adding Annotation](https://patchwork.data-imaginist.com/articles/guides/annotation.html) - [Aligning across pages](https://patchwork.data-imaginist.com/articles/guides/multipage.html) ## Code of Conduct Please note that the patchwork project is released with a [Contributor Code of Conduct](https://patchwork.data-imaginist.com/CODE_OF_CONDUCT.html). By contributing to this project, you agree to abide by its terms. patchwork/man/0000755000176200001440000000000013751062240013027 5ustar liggesuserspatchwork/man/area.Rd0000644000176200001440000000314313567452602014241 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot_layout.R \name{area} \alias{area} \title{Specify a plotting area in a layout} \usage{ area(t, l, b = t, r = l) } \arguments{ \item{t, b}{The top and bottom bounds of the area in the grid} \item{l, r}{The left and right bounds of the area int the grid} } \value{ A \code{patch_area} object } \description{ This is a small helper used to specify a single area in a rectangular grid that should contain a plot. Objects constructed with \code{area()} can be concatenated together with \code{c()} in order to specify multiple areas. } \details{ The grid that the areas are specified in reference to enumerate rows from top to bottom, and coloumns from left to right. This means that \code{t} and \code{l} should always be less or equal to \code{b} and \code{r} respectively. Instead of specifying area placement with a combination of \code{area()} calls, it is possible to instead pass in a single string\preformatted{areas <- c(area(1, 1, 2, 1), area(2, 3, 3, 3)) } is equivalent to\preformatted{areas < -"A## A#B ##B" } For an example of this, see the \code{\link[=plot_layout]{plot_layout()}} examples. } \examples{ library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) layout <- c( area(1, 1), area(1, 3, 3), area(3, 1, 3, 2) ) # Show the layout to make sure it looks as it should plot(layout) # Apply it to a patchwork p1 + p2 + p3 + plot_layout(design = layout) } patchwork/man/patchwork-package.Rd0000644000176200001440000000501013671654251016717 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/patchwork-package.r \docType{package} \name{patchwork-package} \alias{patchwork} \alias{patchwork-package} \title{patchwork: The Composer of Plots} \description{ \if{html}{\figure{logo.png}{options: align='right' alt='logo' width='120'}} The 'ggplot2' package provides a strong API for sequentially building up a plot, but does not concern itself with composition of multiple plots. 'patchwork' is a package that expands the API to allow for arbitrarily complex composition of plots by, among others, providing mathematical operators for combining multiple plots. Other packages that try to address this need (but with a different approach) are 'gridExtra' and 'cowplot'. } \section{Overview}{ The use and premise of \code{patchwork} is simple: Just add \code{ggplot2} plots together to compose multiplot layouts. Because of this simplicity there is not much more to say. Still, a few functions allow you to modify the behaviour, e.g.: \itemize{ \item \code{\link[=plot_layout]{plot_layout()}} allows you to define the grid that plots are put into \item \code{\link[=plot_annotation]{plot_annotation()}} allows you to add titles, tags etc. } } \section{Learn more}{ The guides below will teach you all about what you can do with patchwork. \itemize{ \item \href{https://patchwork.data-imaginist.com/articles/patchwork.html}{Getting Started} \item \href{https://patchwork.data-imaginist.com/articles/guides/assembly.html}{Assembling Plots} \item \href{https://patchwork.data-imaginist.com/articles/guides/layout.html}{Defining Layouts} \item \href{https://patchwork.data-imaginist.com/articles/guides/annotation.html}{Adding Annotation} \item \href{https://patchwork.data-imaginist.com/articles/guides/multipage.html}{Aligning across pages} } } \examples{ library(ggplot2) # You can add plots saved to variables p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p1 + p2 # Or build it up in one step ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) } \seealso{ Useful links: \itemize{ \item \url{https://patchwork.data-imaginist.com} \item \url{https://github.com/thomasp85/patchwork} \item Report bugs at \url{https://github.com/thomasp85/patchwork/issues} } } \author{ \strong{Maintainer}: Thomas Lin Pedersen \email{thomasp85@gmail.com} (\href{https://orcid.org/0000-0002-5147-4711}{ORCID}) } \keyword{internal} patchwork/man/patchworkGrob.Rd0000644000176200001440000000103213564736727016152 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot_patchwork.R \name{patchworkGrob} \alias{patchworkGrob} \title{Convert a patchwork to a gtable} \usage{ patchworkGrob(x) } \arguments{ \item{x}{A \code{patchwork} object} } \value{ A \code{gtable} object } \description{ This function is the patchwork analogue of \code{\link[ggplot2:ggplotGrob]{ggplot2::ggplotGrob()}} in that it takes an unevaluated patchwork object and fixate it into a gtable object to further manipulate directly. } \keyword{internal} patchwork/man/wrap_ggplot_grob.Rd0000644000176200001440000000271213567464644016701 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrap_ggplot_grob.R \name{wrap_ggplot_grob} \alias{wrap_ggplot_grob} \title{Make a gtable created from a ggplot object patchwork compliant} \usage{ wrap_ggplot_grob(x) } \arguments{ \item{x}{A gtable as produced by \code{\link[ggplot2:ggplotGrob]{ggplot2::ggplotGrob()}}} } \value{ A \code{table_patch} object to be added to a patchwork } \description{ This function converts a gtable, as produced by \code{\link[ggplot2:ggplotGrob]{ggplot2::ggplotGrob()}} and makes it ready to be added to a patchwork. In contrast to passing the gtable to \code{\link[=wrap_elements]{wrap_elements()}}, \code{wrap_ggplot_grob()} ensures proper alignment as expected. On the other hand major restructuring of the gtable will result in an object that doesn't work properly with \code{wrap_ggplot_grob()}. } \examples{ library(grid) library(gtable) library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggtitle('disp and mpg seems connected') p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) # Convert p2 so we can add new stuff to it p2_table <- ggplotGrob(p2) stamp <- textGrob('TOP SECRET', rot = 35, gp = gpar(fontsize = 72, fontface = 'bold') ) p2_table <- gtable_add_grob(p2_table, stamp, t = 1, l = 1, b = nrow(p2_table), r = ncol(p2_table) ) # Adding it directly will loose alignment p1 + p2_table # Use wrap_ggplot_grob to keep alignment p1 + wrap_ggplot_grob(p2_table) } patchwork/man/plot_layout.Rd0000644000176200001440000000706313674067532015714 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot_layout.R \name{plot_layout} \alias{plot_layout} \title{Define the grid to compose plots in} \usage{ plot_layout( ncol = NULL, nrow = NULL, byrow = NULL, widths = NULL, heights = NULL, guides = NULL, tag_level = NULL, design = NULL ) } \arguments{ \item{ncol, nrow}{The dimensions of the grid to create - if both are \code{NULL} it will use the same logic as \link[ggplot2:facet_wrap]{facet_wrap()} to set the dimensions} \item{byrow}{Analogous to \code{byrow} in \link[base:matrix]{matrix()}. If \code{FALSE} the plots will be filled in in column-major order} \item{widths, heights}{The relative widths and heights of each column and row in the grid. Will get repeated to match the dimensions of the grid.} \item{guides}{A string specifying how guides should be treated in the layout. \code{'collect'} will collect guides below to the given nesting level, removing duplicates. \code{'keep'} will stop collection at this level and let guides be placed alongside their plot. \code{auto} will allow guides to be collected if a upper level tries, but place them alongside the plot if not. If you modify default guide "position" with \link[ggplot2:theme]{theme(legend.position=...)} while also collecting guides you must apply that change to the overall patchwork (see example).} \item{tag_level}{A string (\code{'keep'} or \code{'new'}) to indicate how auto-tagging should behave. See \code{\link[=plot_annotation]{plot_annotation()}}.} \item{design}{Specification of the location of areas in the layout. Can either be specified as a text string or by concatenating calls to \code{\link[=area]{area()}} together. See the examples for further information on use.} } \value{ A \code{plot_layout} object to be added to a \code{ggassmble} object } \description{ In order to control how different plots are layed out, you need to add a layout specification. If you are nesting grids, the layout is scoped to the current nesting level. } \examples{ library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) p4 <- ggplot(mtcars) + geom_bar(aes(carb)) p5 <- ggplot(mtcars) + geom_violin(aes(cyl, mpg, group = cyl)) # The plots are layed out automatically by default p1 + p2 + p3 + p4 + p5 # Use byrow to change how the grid is filled out p1 + p2 + p3 + p4 + p5 + plot_layout(byrow = FALSE) # Change the grid dimensions p1 + p2 + p3 + p4 + p5 + plot_layout(ncol = 2, widths = c(1, 2)) # Define layout at different nesting levels p1 + p2 + (p3 + p4 + plot_layout(ncol = 1) ) + p5 + plot_layout(widths = c(2, 1)) # Complex layouts can be created with the `design` argument design <- c( area(1, 1, 2), area(1, 2, 1, 3), area(2, 3, 3), area(3, 1, 3, 2), area(2, 2) ) p1 + p2 + p3 + p4 + p5 + plot_layout(design = design) \donttest{ # The same can be specified as a character string: design <- " 122 153 443 " p1 + p2 + p3 + p4 + p5 + plot_layout(design = design) # When using strings to define the design `#` can be used to denote empty # areas design <- " 1## 123 ##3 " p1 + p2 + p3 + plot_layout(design = design) } # Use guides="collect" to remove duplicate guides p6 <- ggplot(mtcars) + geom_point(aes(mpg, disp, color=cyl)) p7 <- ggplot(mtcars) + geom_point(aes(mpg, hp, color=cyl)) p6 + p7 + plot_layout(guides='collect') # Guide position must be applied to entire patchwork p6 + p7 + plot_layout(guides='collect') & theme(legend.position='bottom') } patchwork/man/multipage_align.Rd0000644000176200001440000000374013571014505016464 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot_multipage.R \name{multipage_align} \alias{multipage_align} \alias{get_dim} \alias{set_dim} \alias{get_max_dim} \alias{align_patches} \title{Align plots across multiple pages} \usage{ get_dim(plot) set_dim(plot, dim) get_max_dim(...) align_patches(...) } \arguments{ \item{plot}{A ggplot object} \item{dim}{A plot_dimension object as created by \code{get_dim()}} \item{...}{ggplot objects or a single list of them} } \value{ \code{get_dim()} and \code{get_max_dim()} return a plot_dimension object. \code{set_dim()} returns a modified ggplot object with fixed outer dimensions and \code{align_patches()} return a list of such. The modified ggplots still behaves like a standard ggplot and new layers, scales, etc can be added to them. } \description{ Sometimes it is necessary to make sure that separate plots are aligned, with each other, but still exists as separate plots. That could e.g. be if they need to be part of a slideshow and you don't want titles and panels jumping around as you switch between slides. patchwork provides a range of utilities to achieve that. Currently it is only possible to align ggplots, but aligning patchworks will be supported in the future. } \examples{ library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggtitle('Plot 1') p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) + ggtitle('Plot 2') p3 <- ggplot(mtcars) + geom_point(aes(hp, wt, colour = mpg)) + ggtitle('Plot 3') p4 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) + ggtitle('Plot 4') # Align a plot to p4 p4_dim <- get_dim(p4) set_dim(p1, p4_dim) # Align a plot to the maximum dimensions of a list of plots max_dims <- get_max_dim(p1, p2, p3, p4) set_dim(p2, max_dims) # Align a list of plots with each other aligned_plots <- align_patches(p1, p2, p3, p4) aligned_plots[[3]] # Aligned plots still behave like regular ggplots aligned_plots[[3]] + theme_bw() } patchwork/man/plot_spacer.Rd0000644000176200001440000000160313564736444015651 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot_spacer.R \name{plot_spacer} \alias{plot_spacer} \title{Add a completely blank area} \usage{ plot_spacer() } \value{ A \code{ggplot} object containing an empty plot } \description{ This simple wrapper creates an empty transparant patch that can be added to push your other plots apart. The patch responds to adding \link[ggplot2:theme]{theme()} specifications, but only \code{plot.background} will have an effect. } \examples{ library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p1 + plot_spacer() + p2 # To have more control over spacing, you can use the `plot.margin` # parameter for `theme()` on each individual plot. (p1 + theme(plot.margin = unit(c(0,30,0,0), "pt"))) + (p2 + theme(plot.margin = unit(c(0,0,0,30), "pt"))) } patchwork/man/align_plots.Rd0000644000176200001440000000037513571015322015635 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot_multipage.R \name{align_plots} \alias{align_plots} \title{Deprecated functions} \description{ These functions are deprecated and should not be used. } \keyword{internal} patchwork/man/guide_area.Rd0000644000176200001440000000231213567470054015414 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/guide_area.R \name{guide_area} \alias{guide_area} \title{Add an area to hold collected guides} \usage{ guide_area() } \description{ Using the \code{guides} argument in \code{\link[=plot_layout]{plot_layout()}} you can collect and collapse guides from plots. By default these guides will be put on the side like with regular plots, but by adding a \code{guide_area()} to the plot you can tell patchwork to place the guides in that area instead. If guides are not collected or no guides exists to collect it behaves as a standard \code{\link[=plot_spacer]{plot_spacer()}} instead. } \examples{ library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp, colour = factor(gear))) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) # Guides are by default kept beeside their plot p1 + p2 + p3 # They can be collected and placed on the side (according to the patchwork # theme) p1 + p2 + p3 + plot_layout(guides = 'collect', ncol = 2) # Using guide_area() you can also designate an empty area for this p1 + p2 + p3 + guide_area() + plot_layout(guides = 'collect') } patchwork/man/figures/0000755000176200001440000000000013766072440014504 5ustar liggesuserspatchwork/man/figures/README-unnamed-chunk-7-1.png0000644000176200001440000012431413565477507021223 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATxEֆKD$"(ȪiI(,`XXPQ, (I$-9b_5̝wLLWwgfz:Vts2]J @\2$@$@$@$@$eA    )1͋ e    )1͋ e    )1͋ e    )1͋ e    )1͋ e    )1͋ e    )1Z/v$.]'ND}.7 [l/dFyʯ*N\n>Aٕ.W/K|3gx9r 7ȅ ~t>ܹsrYO3gΜgսg\ɓcL@*oH9nϞ=?,~a=HHHH aZ@VÇN:o .oVƎy~   0[@mRW۶mUwe޼yb Ӑ 7IONuZD9a衇K,8Ղj1X x1B>Mg8z>@ڡOY*]z]x^x{u (^ lYSEϿ.3r]sV7P#3fjՒ%KcHH5 6SLTCJl˛u{"SWkͿ!PnQ6!G3jI5 xف0 7 uF )RD ĸ| ƕQHHHKh|9ydڙ={vɕ+~l2S d@LB(o69sʾ}d۶mTRfg'  !e2+`x.]% ĝ7o,Xѣ2{T"hҥ[ek֬;ʖ-[ԶӧmpޡCYpr8ه $`ٙ3g::N! H9r$%%3f >\nViݺtY6m*p*^F իڿ[n|rYC$^M4;wdzgʨQM6M0SF$@$`W~(CժUe +*UR뒓%[l%X޸qX,uEz  @o߾gQ`|B|&HH Jqo駟8݈ÂV_|qA/ӂe*}Q{zݦMΥG[`H1.$8xs^D#tr붲DJ{a*A0V^xA~iWԚ:Uc쏇T6Tx˖-G}N;} F˪c"+Z˂8icLGK7n^qa`B"®zYO=;hXdS|,:F1DGD:/ g })(OSO*Z<1;ϝ;n>:v7Z? *$yU-c=XVZňa& @0V~GŁaJM" &(DㅠQF/ȣp^A/^'> ]"~@@,0>OD{=Ӵ>1@:3gjJڵkZD:f̘ŋ8Q[̚5K݄a"Mʕ]^< MB j &(QByXv_  k hzl{sVAC6l|mV3g CpEҜ3$@$@vp *ŊS.#: Z ܬƧk"̎$@$@$@$qC ` N:r} \vQOҬY3.-b HHHP7cG[nQnL@dҥK/QXZ/UVyIrHHHIᅲ>HkL>y瞳: 7y73tv/4m|"o˳>l2/$@$@6` M y=ra[oS0! ~Nsر!ZdIZLEHwyG~G!u4]^&B$@$@H&'Z*| ZRZTFԯ_?Sg^{My`H? nTN`׮]1$@$@HP33T{\nEt7 7 (hoG ܔx4bݻ?9jԨ ;#hTO#G">g3(:jG F3FF Z}݈A&^}:eA˥z5ADSLM$5a HK[ 0oǹu2nh-{McZc&Ji; @~A3#9o99oO%G"6ʬ Ђ {m"xzY`(P@e4 Q0?rxDݻ˞={L2K/%K2ԣGٻwp<V3qի3:HHH 2Ο?_=hѢM~8EPEf͕Yex֭sҴiS2eի:WnT j͚5?$& 8Pm?`3+n>Cr~O[ FHHH <019K.~WE+(K>iƷ -0BэhTĘOLiܸ87nQq⮍O UFPf͚%-[T1a<{I$@$@$[ P@6jHui6iDD4,usҥ*TvŘQM{1h҂ǏMnB(3Vӧ\z}$@1#~8EkZ~7& >^D#tre7Q.'lh^l1@_Ow 6y… Ku8 A'f( Z\HWb>Z7 P0?tk Z4Qat_Ȑ!CԬwC_˜O/l` t8_ y + P/Rik6Bu}ƒ P`u}yijS3ԖY@;w;vNl4h*px IMpʕYTq,7ᏉF3fP/^,sVѕl2\ڏ_${GΝ+{~Z[)_ՠA2yَԫ0uhN;رc2l0'B$@$@n%)ER[b9rHi׮,YRʕ+''N+ġ#FPIpe-SzG=\7a=&2j*%z;Z@T (eW[@zCK:ZN:%wqF ݜ/+xKAІ>Ț -D [O}<^9 y'alZ# E8F44-<HH#`Dā w|6kL]wʕ j)$V28{8!KNյntvPx P7)! r  b>*Z fG*Z zRH CA D;8> Nz^U &GE*x *DzJ>tH Impq @h tĤ 7øjժ \,9Պ:KB#UV)o (ܽ{wA7k19uFp4͛7+&eĦh /m e8neB$@$@(\.ӆ˗]eϞ=rwp#Ν;,Y]z=CJ ҐNO;ȣi9x E>A'~Kdh4Wlgzp~\/z,vi9zC~ ٩I8lLvm>]"nA`7̂njhpӷ\ѦqWD^ōj,h 9@>c툾lٲ&"XSWȩt`&{AD m3z/ \YD"'|QH#PfM5nQ|tt'N<HH,lXkN1gmڴe˖_|fk0f;vOO.:t ʤI_pMԯ%Kmݦ^ )$@$@$`[Z@I̴iӤiӦҩS'uAܹsYf2fH[n-Ս}L"5jԐ^zcubУB$=C|($@$@$0] NQ򂱥ٲe})07@w?&@Y P: @ Pk'8y=IL!h5Ns)Ǐt#|,8GfΜ[i&s6DP`!n$x |c"HK":DM p|.1%y; xUxvz} Ok/^UU|A^ 'lh^\abٳ7EWʓ'2Bq B I޼yղZE/0z1_`Qq`y⪫Re "u}_ ^,^Dih P[gGpꫯ~mdΜYM4B(dŒ;wn[̚5K݄ 3+W Ľtܸqr!5]B\'|RŠЊg6lPৰm۶pTD }8IHHH\L ObŔ%8vEa11)$@#0o<Ԙ} R0cыJۦ $#,7iUK"̎$`W^yEFN^ &ȢEtv]"`"a#mbH$@$ q  D`Ν>֓z\ &$X'FEヒY½0Gd{# H 4p x9`B_`}dBafݻc׿U}3R̡aN$@$&iF֭ENzp˕+jٳg]5رcF`~uc큫HH hfw%/geV~`n{YpP{Z]^3Z8qC4!ayqeƬB^YS>,o׭[7x qr3O%02۷o2 YZCs'L߆С//Pz=L%FzFmrrg(7ᔋ邷&}  GYneɂN#O@h"hy$ `BuQؠAk&7ǎ; /h믿5jȩS7`n8'YؼMk}ӦMj[t@(f>I!зo_ٙuc񪕭UVz#h~zG핓,5}tj. Āǀ2/A$]+V3>s@G1K,医\CFB5`&@U-sΕ/DnW)1A f`U7AA_ pzn۶-e0im۶>EIII0,",8xP @l D k֬Qc0_~ntouA.\(mn,Eɫ $"^zIrP͛7W21^9jРAN^ָsOl-YxY2H9q7@1瞓9s1cdҳgOAXqƩ)S9vXy婎  p?Qʔ) !:\nr4 h̙35p_E&?#FSOɋ/Ņ0! Jb{<܆`$@] n{U^qgD2% }(n-?~\V?`ƪUn̙Ux˷! Fpq# wcz#MS`,HJ5ڵk}sQN*߫Pn&=<[f|t|oE8xDhpO PJ pTYVQ ܆ oٲ~Ta|2l}%eCeLj^]' ?bRD>aV\TXQ50/ ](j^ax^kuW ukE;v u&1>L>OBѼ<͓'Tn~*TH0Z\HW֪UKr/*I"c7~Tf^@kt ˂D 8ց/9j9 uk[Ν[mBk5  >K0X PQ)gDASKzD^ZIHK1c ŋUEE?nPeˤrʡN$@$@$7X~}>^[ʗ//[n[zta< =oV{NӫW/5~WQ>Sk6׶"=z_v+ҰaCYtr6mH%&7 @|7ĉ~`0'hIJtI|ݺus=xXk9Pаb=Q:u*h+0 SuXQtb|d< Vv0`#([ԭ.  H!CRqlԨH˗C0LbG;Xøb3\Z+Г(y1 X^HH `￯*`hY>H(2 #sѩ6#v{T;y\!#&Ra,/lPƌ#ժUڵk@nbUժUIppqw iv8 )k?~n&([~ȴeidŊ8oYvȴe^ ]J>lm۶EDQ$@$@$@$@%@4ĸ? @T84Z 7\+|]s5Z @,:K=zT E(hÇ{}{O`Б#GT$h>u^W -0H$@$@$@$<Mٳgeݺu~@`ժU;nBЍK1@0}YFS-eʔ`avf`ٳGj֬h*B3$ݱ?RzuatJY(}~Eͽ۞~id^oӽ*K3epBy7}1"sY7Jò}v L"5jԐ^zu&˗/W0ù2sNucHqY.9x'#G} POCZd4O;v_U^}U˼yC-}nݺU7o.۷(c*̀m۶~{J*uX޸q?I >Qf `? r-{y)A6ӇŘi} E8?<`[bO&c''|ᇲrJh`M!A vbLK9|Gaرc\p'Pܲel޼YΜ9~[n-pBq/ Ѯ\-ڵS ftB,-}~s̑-ZHܹ}s(X?ݯP) O8a۷oÃg|P,Wbcз ҥ-[6f Gk(ƁRM]}| :Tz `7n`^"ݻW*:u=[@4XΛ7,*THa7hѢrrxEL駞zJ{1i֬Q iUb:z/<`'ڵK`Z~u֕Yf1g]lT\9gn!xbywTr0sr]w%yLGwKz`aği h}1STRjO?TF O tCሷv[b|ب.ذaCYtf6mR$ЪU+ xtbfuF&+ozԩ O>/g 1 i5!~vUu? R1 ד =gYI?LZόR<,Ydx ~:M8g-o;VP=zNO+ 3'<`BvF5CL% xǀzF Azb*IHHH3hzF Azb*IHHH3hzF Azb*IHHH3hzF A |f䇩$ x7L2c9s.\X'+ra_"-[TiRT)[oɫ*Kl2{R|ye2O DKc@%IH h 馛o&M/'oذoD)ZA!VR-͚֘5SE$@&jV ɓ'Usȑj^Qxq~ܹsj]hEJ\L$@FjH D!`bQ*U:t~gϞHH4@MH$0֭['Ǐ ._L2„#ƍӧ2x`5^4a0$@!@3dFH@~ /(o4h@e -3f֩SG/_.;wYz! @R6J$npÄ1cǎ}IBlwjfɒEnfJx 7]>$\ 0[@ PH$x:,Y"wqv?{|+gG9&0=HS~ 7~ٳGv*6mRQ]ߩSp ݨH!/tvf p%T E$@$@$@%1-sF$@$@$@$@ԕjaHHHHhzW PW"   ]2g$@$@$@$J4@]&HHHKwu˜ + uZ(   .-sF$@$@$@$@ԕjaHHHHhzW PW"   ݬr5H޼yȑ#o`пYJL… ?3g|ɱcŋ wתru9RԫJĉ?o4ٳg Ju,XPN:%ϟOѐ5W_}\riCR<(O&o<+r)'O ICyә3g IqdΝ[ko5c-_UݧpT)9G$@$@$@$aA$@$@$@$@)9G$@$@$@$aAذqɡC='  0 P?~\F!wJ   0 w#    P{8,$@$@$@$@a&(F$@$@$@$`qD 7nC ?`$D}I8 1UpJ-GՐ뮻N971H3t:cj>,Yʖ Hu|^ e+@`hTg˖MESQ/!GEA Rk֬;ʖ-[Զӧmp~ڡCYpL4Imo- 9r$%%3f >\z)7NEk2eԨQC(cǎ    wpE$/Br-7x6ݻW*U%''hm۶Iƍ}VRE6n(5k6l̟?޼yHHo'CtDh3gΜQG3)Q_@(K%gΜ#G] |邺M;7Ț5q|~E6m4Y/tXHwF槟~Z2ǏÇUGт~J<4qT\*#e j:8`r\\TB+2:c\ Ĵ7Y` &e 1MuZ7`|N^R{dKl(h^j0 Oz] ׊P^6|+j֬ꆈB|9o`ɆխZW&^{\L*0Eyz11/0>Q7Ξ=kb}i 7v -2UpF2n=Ѕ t]n4=O 0ݹsOSO,2ʂzR_7PB7o^oX_H$@$@$@$@.&RJ7|à Ex2F3f̐VZŋ8Q[̚5K^~euN>hZ@ J,Z@Ra& M`=|M8h uHÆ жm۪wmڴ%Jwl9s+1.2`/d<Y/@$@$@ *U+&p\r6a f c?-O 1b[tN_SN &HHpv%MƧu[awӦMI2 DLp)$@$@$%qD% @h4@C    u*OI$@$@$@$ lHHHHFLB#ߘWNDp*voGyoԩIwڿ(brXT|zҺukܹ4mT5jԐ^zvM֬Y3eHH\GɓrGpXs*@IDATri=# #sɡC2rESM  ZiB٤I)]`qtR-kcҦMx8R{JJdFs߾}m6*Ą76l2o<_ iRR^m/BRHn k̙Ix؂˦.fj*p*xW(>}CI@ dԩiVDC3Fl1@x VlٲE&MVDw|0%]h{<c*j@ c pgV\v+X&_oL؂ '`.Pt]^D:v2>{-Kv'IHHHKtŊRbE믕1y ƶ|iʕ+n h} hD3fm/ܹsOݺue֬Yjiŏ7H S:vf?^u͙3Gͺ+Q2LZl)#FP*a\b&_z%7KCViNcmr1NՀ;+3L1nڵk'(? ^~qzZBn  `l1@x 2yc9o&yGtH ꫯg(Z줛G3rr͂ZjUh9u~ `SdJ7K$@$@$`\~zF:c{2e?^HHHHe"6@r toڴIzGޖ/_={8"wA!   p5 &8pF:j(LPxPz    w8p<*Wo3Kfok=_|i\udN_PtJ+t2xxVS:@15H7l*G\.iM5ULw :YP9 & l ⒱R(Q;CF9&OB%D29Y ^L.Sz[LУ^8YrJt]yNTy'}6l(ԋhBqFl"r1CsgMZ9 >E'ȋy/B?hM1]ɺ@ 19h0=5lA}-]Q#6@_{52dHX84,L܉HHH@h1!PM4Q ,w}WB$@$@$@$@@hrrywEһwo}^VZRzuyUMF. $,+ף@瓒YB$@$@$@$@ `ڨQ#=zlܸQQŘϵkJϞ=U|6 (w[uU֭['*TPua)_|]L$@$@$@$l1@px Yfc=&kזˈ#d*AIƍі:t (Rre?8 hx8a(&J*7q:Ԗ|t d8N_JǶMEӱM.Sbڛ,0xu2qu۩&*xGwT1cL4IDΝ;bS ox[cb=XYf" P;dܜ7^Py-ʔ Z'uٳ&&ߗfpc"Sh)6 :6l&B ɺO'Nٳgoዮ'OPǍX7PB7o^ )RD/ }W_}j>КFh,^Xrέ>u֕YfiZl˝B$@$@$@$~qC?ңGׯL>]K&HÆ eҥҶm[M6RD }8IHHH\L Ob.0S0W\:YO!   0b5 5\&   D"1y% `ԩSeΝim$@$`<#Z@ @۴kO \-矗VZIjF\b9fdɒ+J2 Fm(y" PVX!>l\@!MN:*\s{q+  uV&IfPmx< @ń%t A 8M9~MLCq겥2eؗw He ĵx 2! N?P7ũHKo~:˭[ ƒ;Y/P cb\ 6TxtD|JS19nïcP QLx)CnʔSIaE\Kq'5t?2f#P@,huPP/n"Ly19t]Mu[wԅ=?@KuzG@hN ӣF´V ĊnZ4FcEׁATEz%;G ̛7O8i$@Q_~g$p@51x{ի&-߯›%=iӢm$@$@$@$@` HyB P+&@!h m>y< x Pj"8q"0P/&&K.ym5ÇK9b}Y^σvڥ"™5&hɃi,^lڴI?x0 I`ҤIG] p]ߥ o\|ϟ_J(T4uQ\9q:w\뮻_E ѣzjRlYZZJ#Bd(bˬT3$@$`8߿=' qgs)'O z!;sf$8D*s-'N5Vf'|"CsfرlٲE'ӧOWځS:… eҤIj\r$VdnIHH@[@tРArرTnj#s뭷J֭՛OӦMeʔ)zRtM<_fT     wH0 Z`ݻW*UV%''0m۶IƍRJٸq:l0?o8g]III&.|D yϕ+U4]MDBv@H@ tJPj|8)"hz>y y7ܪ,E7o*͇VN brA%0VRre?8#/m,+X/C:P QLoՅSe q)$`7;ӎmrF>qD0;|w,d͚U`,  eʓ`4Lpa=XYfD%Ν3x &WDѸ?Y^{*W(S hɩeT&Bq?scY &o<+tc q2=x u$$K9SyQ yP}^HHHH\k-f̘-^XuʬY4-[LN!   p?M Q=|M ҥKm۶j]6mwNn# Ҿ}{??LHXb+ DEU%K2ph,w?O @wt5^R1 #d1sLzH"Uh:).p_vrq餄IJj|ZAz 5?\&3ש<g:u ϋ0Dx3U"mO65 L7 0@fӓ +p"l<HHHH R4@#%HHHH""0c@Al٢}A?wqF΀AT8ܹs71RhQɛ7/ię?($7lؠ.\8YMTh2&o$@$@$@$@"g)    )΂nj={(2w-ϓ'gdhطpaխW&%Jy͛7ˮ] v?Նptz  p~za.0k~2֬Y#落mIeRxqd<7]DS/Nq1m6={V)7kɷ~+;wi }E_:qI֬Y=Z>3x[RvE G+-/^5-ʬD..]exF9<3۷֌hqVaԫW/Ug G \]DU/K2#<҂ .=Sօ6m\JiqⲍR^.Ҏ;YWXqGMul.8JV&O|_LWDN \] sȑGԬYK)/eHıN1t._r, ]x~%K0aބlM"<9sFۺukXO~׫z="AbLOZ4³Rg<cD@,UشiSH3culK.o6&%O.X//"7͚5K~4/z&[6 \ cs%hjC]t|Т d$ ] ^`J@8բk~IR}c=&)㫰*W,Xк $.X/W` u6ܹ;#[W؄3g)P2za+' W?FPn-y22%3)宻RuȜ9ԨQCaFqSl G EB;v̢bpj*:t~2o>ᜩUVꫯ3Lt뭷c֋p(ڳOZILpńJL^߿rgϕy#F(` 7W)TTÐ^5 MGѠA# h ЌF;8G14-/9-}"}ڃ"Vûz "3 i a\.9"zsjIHHH`:    ]0%$@$@$@$h&I   pSB$@$@$@ AhB$   ]0%$@$@$@$h&I   pSB$1lpҥ β &H֭y2zhMo#GDӟ$Oa.ZH*T 痷~[ʕ+-[V^<99Y5B$@jN ZJr)uiӦ l!rJYnoٳmՓSڵk_^_x… VfVpH .x$ GV̙ʕ˗'OmYdٳ/_^~giҤy睪>[lj[ȓ'O*' rgt}R@ 0]v Ѥ$ٳg2PT)_S?>@ʔ)#}̟?_o.EQaDUE$@` JcIOc5K,)>9yd5j/wu`LAdÆ Cyɑ#/ СC Ph h=H0)h޼yr 7(7LÆ \RbEɛ7j8qZƌN: u*ck֬qm0 @Aّ Oȑ#~z5>SL%K& &(i9ul<ŋѣRP!;IHx4@W!3@$FEK/޽[u&h5k4 @ >fy! D"?P9φ J%dڴiy%  W }R($@$@ eI    )v7/F$@$@$@$@eHHHH h7/F$@$@$@$@eHHHH h7/F$@$@$@$@eHHHH h7/F$@$@$@$@eHHHH h7/F$@$@$@$@eHHHH h7/F$@$@$@$@eHHHH 2jq؁xuw\:s̒/_>9zHTS;wn9qDS_{'O9|HTSqEYf8x\tʆ^ʕ+i 8l$    H    $    Hs ϥIHH@LBXɮ]$K,?~@dN &\s5nIV\qWK,F\31I ruމ㊞=.sA2 Lbe2e,B}'ob`z9rDͮNNNV3mH'ŒGI!xeܸaBe&,9[|, ,y\exb(GݻUZC*O7`˚$e#((Q8咠 Pz WrU<%C/\ G([o8zԍ Q˗OnےݨQp-1.9Y]&CE˺`R&}O%qׁ 2L2X=N 0`H"'Ѣ رc[7>dzR I'IH ?x`)[g|b}ݺue֬YfgepTrel !>cڙA  P I&Ȉk[@'gԩboJÆ жm &ִiFJ('Q`ヷ 4c~` HHH[(ⰋaHHH JxclcJLfwN.tQ:8c,vVIZv]!; &:eZ=%؎_V =#'tb"uu♇`6 !7sC A`k :O4X @u/Ez=!i2 c6F1i',c=HbIu@~G_p[ 0eZ6_}uXڇ:Zk-ѡ\N:^ȗŋ+5E]ѽ 4J=xf\F Epߞ^L)+O@2%_hŽرCy^Fn`-0TPV:EFoھx؂A Vu(3- FhlDXFi(o돗ǣ-e:PWPc@L<Ȩ$#}{j,$& nX ZrDog 7`U*0HP?T 8[+apÕVLFZL[NMo ^P>ҪfIQ8k]ҽA;A{ZY>.+`L~ݷmF9Vϴ9:YGv>^9#0VC( [0p Ee`2?خabk][ƶ$=#c 0DL}H44b"5~$L Vr,~U,km  ? ⋪[oћ\`Uaټ+9M fٳGw"e4>Q +_G__L+wuoСCe ,-;dW)ZIg)dz9o-2ÃF]GL >99YMzj|ܖLЂMb<.ݎ^,9:jBtCW*TP lDWyf͚cA˗/wR_V,YkdƜ/Jԧ` R0)gIq1e8߮?B8Y"K #\"!I!/x򡕞F cy/M/Mގ|(?N[{)/,"!Z|b-g|4 6@C)I&qFiݺz@T\Y³߬Y3G [J:wZ'{eUq]:HSQ(b,1Qs0Qrl%!X%vDÉ9sr4$AED: Vw?y;o}o}oΙ7so曢4Ik[wkDAzgV%ƷI)QqHN|~v@:`Yߛ/OOxNL?LHDApC<'B?:'yGƏh@A-Bb@{t#> 'T޶W2EtW*SX~isk>VEDe" Hvh<&D%bBIIȆDsu%4 @_s*Wfl _z%mz 7hz~z皶Cq$תvƽѢcXODhΫ~m8qH;Uio폾OG2ՏSWWa?xA"blnn\99 *g [y䦛n:KN9= 6ov- e Pe: *ܬVeB)jZ "k<b zC}mH[ElQ1d$%)etA|^xMް@xozH8NuD0@ќf!֤&6iSEJRWI*3N/TGc" [H08ʿ@k@@es yhmOS1L\6pԖIH$L#?~tIaߔǚF$$kǟ ˈF5^:EFT)ll8&oTvSK4f?N+)do<5lp㕺ZJH;C"|״gsܜLeV?'^I}jU7߮$ *U2F"]ć Z*4j\o>gT1}|Utx0!+ɳDN ϯ[%/\ NvyNBފԉ &u$x/Ro:ks '[H||zY̑#GzU?#ц@2=UʎU4ȉ!.-}=uPH`a| ? <XDĠ'?0ΘXcC%̓UNva52"e+Zxqh931qg@g 5n IC:GM01H?YDyaYr֩]}cNJm 7L~&~o&</ꯜ뮻N [oU|M.P pU"@D\ygm^HAN=DNYV -,&+A*g's.tBi')lڞ&_ݔv`ŕrƜ<lLm%*/L{H@/^=]s52go 55+`g(#/1oœVPp93U`+)@og 5#L͞fsd9c2Qg!ƦX']=)D#30b`BCt'>`bG9{>X7\{MP!;H{P;찐}:Z~mQ㉐0qYO?^ ;ľ5jcz˚5kP|#ʕp aQ6'ϴUSbA~agp1Md#[忟2jhGɔqrQ \-F0Ч?L \ }B>c` 1 ;@:M4\jcJ>\I;z'9$'EX=RI;< P wynذA0_x.'x , D #Juܼ+[M;`UZhVz5=0R|=dggInG&Apa'Rn|o6X %W!ÒsIlEzjk;vll@h|G$VIDAT ѣ>г!|uyȑ#B>;0Xס`#h餁^-P)5y :H~@q4!.X\z-zCcs3 ct$[-/*bee."o3!uTV.hw _X LvH;R+E"2"]n̝;WlB_utPJ@1 ?+  48PQ+)a5_xSZ2랔vG)@EZ3G6([ovg{w-qLY%i.;8X hײ3Bj"{)Hwڥ=J@Aaj&!FդsTe7i==%P[(* ttk5|"L4I %MAj(NpYL@{;1CH )5 U;`VP'펲GKk@=նVZ p˂5g+ ֤OPPzmbjPL@!4MfBT^hXw^`ME R[d%2[M6]`"p)$zˠӗ>}93ė!B@?/H*E}0RjG /-w~$C 1xpz˕o+U^rӒ#k¤*II3e]8pN(!HՐT5IF k:C3(hE%\u@}@<\6| Z1}3f W_- [̌ G02Y3c{)2 &pmKMCH)>E=*^ֈ慁/nL4 s.!m;2LOD D h vo|ܷhM}i1-MnqHJMޤow \{v (quGAx3GOE1|9_ʾ4U?JNz@Qnb{sNx P ui&?3^g3fxm@:ueC]$o,ygc3)”ΐ&)c+¶9J̾}MG$ XpӅD%`gEgy Bʂ} n"VڔWrd䐨⃄—¾0~ f|N Df)s8H@c#̤} &tOIS^+ؚ'E~_f˶gU$M6^{b#kM(|t/pP&Юz@$7D z5P+!5'Pqy|ojx@W{۽ `  ~2|-3Z}~MMMbr 0 э -JL4D)$Hå w ehh("Al*Z~gM2GMZB/pcXȖM.m1x|Ts2T`3 {Nnϵ}ɂ%:2Lbɒ%ڮP{nm+m3"@|*WZ iJJcߜ>BDz$Gg=Z1rr9ă2*Jpp+0s ]A:="~:2ʠ^w+--<O;gßŋk17Yٸq}rWz1C Rh!`$EDE4/I~x9z=zHEݛ9Ft)'uOT07 ,U(u:" =P͠؉"*EPSZ-*dzgۣ Vx_!РL?vg('|fHUmݶ+ 8J&:(FVIRbp rp_n޼Y?pZUQ"@@0!U4D!#!)$u z9B8߼obCSZPGԹP9<#!;("`MP3dwI᧶g4%u:GVk Ӫ^yLËk Ν;ᅏO'DHl#"T 2)MM=XǺxY5WZAަXWD { ˭u:9-T9 AWb<#4>5+}_Y+M"U3Pcqkf>il6vT6׏cHGɒ XX)cl@m}c|k7J2 {h\@%RO>ض{ ڀvb#ScwQ*Ep)gуbY DsDCnn_vZ hjp">0I!??_GLf%7Ѿ"&^#>?ƒJ4F/j}VfZ&y zio#`TfHeM).Tht2Qd ґV#d5p7!2 BI@R#Z XIŌtl?*ИIM 5-ⶢI9mb I>Hi^VZFդ6s*>"P[/5RQ=y31?RMp3ebA4zښ5%D%XɨY.)+3ABz؈Mɍ!9 ;RZշ-N=W7ڮP ٨Lf%Amrz_qQ2Aj;'m, L10Ta r BlIfǬ4tӉWBv' M ?`n,>X %IRR"RENMo:[6pN3Z$[Ik3u>3UUHrc >{L̄5=("$ p8><[A1V*{IZ tB4Xq}MjT%LWW3RZ`~`SMf&*DШlvVHF(DROHa0 h X 1PEF *"תDՠw0!EMU-!i$&}mzT0!LH G ipTxډ&EpPIM(󐊚MѾ6MZ{ &h{L&WRQ^7*v;Tc>NE FjvaHA>- "'NL??HEO;46h蘙TY:$iʔ):O4I6mԅy䑂hWB 3_/XSQ J28%/iP,zTbL4RQD,S;D N򴧑xU iH{3YKO$&WSN9EV\)>H,Xv`ى F/Lh0xnVJ Gs9Zyki ZʽD"  AztN=RC|F_0Ѥ%!2؋+ܹs=Nmk  Dym|t VE:w^DVBMf^vW@ "@܃qdJ R "tk؛sF' VJ+D޺MR>jYJ"@ cC{& vVJ#4D7T! dm z3tJNԤڮ`%Ȣ!)!$m=-j(+` -聐}@$6yLd`a 8iSl.}AD4њ/`Z WLS9~ QC@1.@.(``aÃ@/`H[C @ćw!&>k 4FW 4DҤhOy`e#kCaDy[3j(=``A0h)xz!|x0a_+GݝY0 /ì"sMˊ~Isqq}CxA m7js D3TX*Uֺ2OFu"@ DD%$Q4 D"@‡ h瓉 D"(hyEEE4T:b黍7G(9-NP4vuulٲEOm;?G@PYY)~}H?:{n9:wFyY!CNN΀5Ҁu؅%%%rM7ɋ/(GvXXp#yf?VX!Çwq|!OnVYz 2acqo) wY|w @;ډ$D"@@ @1MɊ"@ D-QEe)&M$GydUA ^^D+a@`iӦɔ)Ss1@ffuQ2ydA@LB<"@ D Pt"@ D+$V4"(oKkkk[o%eee]cڏ?XVZ.#T< 7JgʕngI퀧?cǎnu?0nE{OjjjT Hn;W^~X.'xBi˖-ٳgKVV444_.uuub`93k3D<_z%NЕdHmx y'?,lu7,Xg!r宻3F]1%h֦ht~jk?63۷oRguVZ#2x08tP7ިf͚voSKۿ }^qqqgݮ4*z?@iii… u;ܹSW#9T5 >>7WS т3fHlgΜ)6mҧ`el`=f1u?qqqEƍ+>NVg?߾4K.cj3 g޽zly*EEEd0)zHn.+DXC:$!;؏JJJs=׫v7σ&]FyyTR cf@ntKz)?i{Ph˱G?ah(\y/,Fc=K?~ @z*_tEJJ9i gXV>ӱA51^}k6~c 2DJ.kV1~`/q!G7z h4~~~$Æ 5*@Gfo]222:gOSO=UO0ٸqz">jLawޑ]v9#h~fimH@C wxvqɆ dϞ= _Yf̙3G&T裏OAԠ"FRhѢ.+ٰvW&T|ע<Ym~i=#T-욄bLqE @*_R`rέ%KfxG8]a97ƾ'ND#@6b  ̒%KпbŊ!B:}#A?voޘ"TH@2, Y(o >\>.Zldee_,p裏ڵk~\yz}իW{̞=[/11Q?|~~ DJ,# E,}{I' O.u}{O~/~ y衇[/R7y/Rq"(uC+D/RyٰaL2EaԩrmϪU.L?å{nuu&8馛ޓ!DJ@]H," D//D-ϟ2 .뮻NN>dydܸq]TIII2w\͓2ٳgw3D7 @Vbp%=  D-(ۤN$$D H3322H3U6ӄr-IGRS"@l ڰD"`%1==]@" wE3DD;PF;^? F*xgKG DCЈkRV"@ F"@ D  &e D"lH@>, D"@"ЈkRV"@ F"@ D  &e D"lH@>, D"@"ЈkRV"@ F"@ D  &e D"lH@>, D"@"ЈkRV"@ F/SlDSIENDB`patchwork/man/figures/README-unnamed-chunk-8-1.png0000644000176200001440000013034013565477507021220 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATxxU_HB @PDuQPc[Wu? 6 "6ł  *NfM&̝>ϽO2rHHHH\"P% (T@HHHH\%@UHHHH (  Pe    pPWq3    *$@$@$@$@*nzF$@$@$@$@yHHHHUT@]MHHHH2 J  P    W [=[n999RBټy=v\(WTZUpҍ YlڴI8`yrsse۶mv8UjՒٹsg{bŊtڳgON|ʕ%++K6nX}v\t#ieٷoteСCqeqζ9ϻqA.c*U즥Iڵs(w^[ ">Cyjդ|uXfSaSڵK-ޭO %hϠvpJ*}iy l IHHH%@^tHHHH *a2 c'/^lR)   H9T@CKnݤYfhѢ;xH$@$@$@$*&zGÇ;vPW:v?%   "@Ԕof ;050yd]% H4Be($@#@Ԕf*`B$@$Vo2k,!!5+[nE7R_؝;w6> @uUN=T1cƨkNHHHH fT@M>C1c_z :    P54i$]%   P+v1 )==y    P>}: K.K$@$@$@$*&zO30ԲeKeRJK$@$@$@$[.Ƨ&ʕS^{xwt]`S2 S7&`tr v/Uqu" o8Qvu^sm;rD=D!]'vDN0^Axǚ/H(HX+AB{x/'Gؐ ៓b?ns#N: H7sRt>pR5p:.f|iwDz43fԉ0V햓ީrsm'u"Msve]c٦k.K>)ˇ ̙3Gٴi[o ݳg8p F+^Oiʒ;n;'yH#ĥrRPP s{n9t萣`~8(BDӊyy fۨo޽{XpW9{(^~ 3"'2XBןx v t^̌+)E_^`@_mݺU˂ <jHHH 8?d]{߾}'WZBGR DG ht}߿}F`Æ ҚB$`M+ܹ3ԙ~mcUw= H(yyyr?@oI^d…g}ٳGz쩖|Եs~[:t W]ujJt' ) C`ʔ)C%wCgyFPW[V\.Y՝9nIH <>Rz = |1B'Gvɀdذa{n9sfг<>~Ixϗ-[r-2{l!$ 5_j._\N~ɕW^)FR׭! Z_|JÆ 88 WVb8YNʒ5kŋSN{۴i#sΕ=쳂-|--_Wf>?ʕS6쎇v/&w}'guBmOJ$333lr/\ժU䅌 ct9tcG0x>ҧOyꩧ-]TՏKԃ_~Uw6k,|=@tIҿGʘ.Sv]=eL"㩋 S/TX~Je!;ۉcrw/osDPHu~(-pcf=~ZPY[ * *ۭn<2^N Nڶ@ukHL<ӭX+gT\Y}.œFJep׮]&gen 4(GuP=N/[L&L J xPםfG0,eL .v#ifF]5NsAѰ1X:fx)Вo]rM _S.x# U@1i޼yrw84w Hwݠ~+Zy2~x9sUVkQ"ВC{Yb|]ýVZ2gΜϨի! HzG?@ EBip`Ѹq.S9fMU[|1HQG㎓UV/ 1 @&~ZPb|{&Mdǎϫc1)Vuv[ H4*"7/ @w}(f}W\!Mu ;  "PJa bUw= ? @J,Par 6B3?h 5 pL! d'0f̘(vM:w1XUݩsK$@& ͬ|UR|} H9`5L9H0 B5HR5kVD0L 2&E)zV=DHGxa+R+"͛7SN9%Ry A ( @T>_6݌3fZl`%>,B46~|*u PMݴgIH & _dzcdBό+A'$@$@$@$@D h2&B$@$@$@> @ @2P7,ˇ%Kj.]g`3$@$@$@6j3P[zvi<L1B{9ѣ^>O,0۷O}]ׯvmqˇIHHG]>K]JAAA}:\vc_ CnIHHRP%YARV҇n۶M`,ʕ+ͧO$@$@$z(wyeܸq[nknРAC ۫|87jHʕ+<_~9 $?*I7xCw.=G;nvLL⁘9Je]P<.^X.r?~|$u?KKKS`yr.&  NB@͙3G0Kޱc<2`s1u}Yp_|t1sӃ.߿_/ݺu :oA&Md޼yOZ>~G$@$@$`Q@fdddZʺhïPOR v?M}NokKlH*UT+i(a2_/kX?t =VL-V{^Md;nEk/乜-%.&hҀRL$:TH-v=h\,B jOaF}TbEA=k]YF^뮻3*x]/O`MxBhuPʺh#VZ?)VF%?TDpsΝAhʩv0c;Xad[V-:89)6V(jpi ,8e 545k|'z`")c@,lO")(Nk*P<ވ$~ѦSaSNVݸqꝼ{0ggg ki!1M^tEj gh۰al(|:>^7'#   L hY} -nO? Z0V-vK˖-ѽN:cw @r x7%\WHHHJ`| $y宻R,Q9^s5rw Z?1&B$7nYf:YfAb iӦԬY3pͪ  H ]̦MW!cƌ?~Mz%exg}ٳGz)`{kRygƌrˍ7ި&/sp6mT/ {իWˀ/ cС3޽{ʕ+53 wHH ^.5k_0sϩYPЅ|y'GVnv_} 7E_\j`rz'IGoG}T.|U=|r:u|ǂ~5J}[՝*T^$" $p+W;Zj VV:u1=xbԩS9t=͝;W ed֭{Z *ot;ݍ?S >\ţ`cnpC9N獴4W[hvN937cLiOgVCᜥs%R /hj G,]TՏA=ѲNs?Ujժ)w5[+KeݓJאN1{H$F/0D.:|N4_0Ax(cvJ~~rVeN^ɑ֗[ . llS@QSLTvRzĸI&M7ݤ͵kת1Hp-UVUJ܅be,h%0wU͟??<~v;+?οAc S &Q熸5Ny.4-PFevC"# K^^fϞ-5jԐm)ɣc5T Ï0uͼQb66Ƌb<}iuYi c{;ʫW$e- [/hr4<`ɺoaF/|w2o<1p8q_a>^p7 ^xzi(0%𨣎 t1a"&ԫWOZh:/vjJ*C;7pC[Iʕ/iu_B_;wשRGoQ ֛oٝi^2'TH'LsRGu|i24崍YݻwGEk:CbƋ.Hm~G+%=40cE!)Hqɔ)SCƎkY֏;,0I+`:;#)chsxvԭzh$FérwQ'n߾= ߩ0W' 2&2&ե_~ƺH'_E҃zVG-2+?lu+?nݺEArg:tP!*D]9†|ױO z+A%BTN 8ZyO p'd|i'`]H'q+!nn‹iv:>`/;o駟T$D_^| 7D9sC=w|DVwn6v7on>Tiis}P<~d`jnNH.ft)̈Cyٮ2ͯǑ#㉧-1( TƍO?-ݎ.!+hC?ZN` s|C埛~PN'LZв9}tZJ籾E_~%|ƕD HVx&ƠY keKh5ǘv<|rI'qVu?aJ(&7Õ %Xze"'  آbL9#=A`41wQ&0s1CzjP1hРAj@Ԃ 0̬Ģu`,%!B$@^%п(Pu$ZEy뭷i4t<&'@X{ԗf֭tYuY՝gO$@$`6lP 'N F!j/kY4Le' h 8ۃY[n^zIm X՝O$@ `AV]YC˺#G&&`xD88@ &/jbV`Vh MLv`oNyH yآ{ɒ%=cTw?ptL-P%0Sx=jUK b-ƌ.?|XtYvFbr,I U |`E3G <`aB d `Eiv݉ ` |M:U!,03u&;_$T˳{ 5k(1i̙p $!k$bwĤ#,{uX&slL m]SheTŎp[ZR^`VMk ^Mz `AX.rm} @Y]lnYNqhK:I)_~Sm۶ &q҄Sn(ԅ?c%1U` c,ٲeK}[ H 1+ ;tYhaB~騲DEo˺7k}ǭp7A8KEo?Qױt-fC`O=Y~zoy̆Uvy{zkf7.ª8ر:lNq'-n1+W_Ubp)(3#>`—,jecWF_NǔArٍ= ϣa(BnP3wH$cCxN'FWr9.UR%V?Cnl޼:B$m6ep xz7ٳ1e|ѣefG`yϒ 1B]4h@ ;ئR H5(R!zT}'mڴm&=%?\~3gO[h2D$@$[P;N O?]HR-c@ScL$@$@$@$+[[@c K.6mNs֭Ù\1dlHHH!@4z|XBChq믿JK$@$@$@I]e|B`OòNlt$BtHHHT@ZJҥKQ<&  HMT@S35V)mHՅ($@$@$@$T@l#E~_|1m!   _$$_&w}G-ÇWkc9֎;z7  <=޽G!    4* $@W\/B~Mz% .Ln'<ٳL_NJzzzR9]*Ws999N&ry.wޑlukAA S0Qwԃ_~eugf^?ԢE DCp%J*^"UvONa0#UXQPφH F2]G$u^'S'#xVgn:i$tvU6nܨ*]buuVA}(fٲeK; d;P>^NcCG;2/-KcR}} 7aTN /<'Q-xAqRrss݁NKZrΝztB+<}FicǎRc%2'eHI%Z.!V`yܫNkywڢNE!o~]`]P6kwxF9Zàlnq*1E^FoA8$`B+"ɟ0F/k<1<8}Gj&MԨQC) ~\x@Y "(Xw} >N(`zӋcHR@ЯJ{yW_-ZՌFhL2E}ዩC2a"S#0Ժuk($@$4~ai޼w}A]N} ߋ/Lli,[L>ð   ` !/֫bNΝ[b=o( . G}T:y']tHHYE!; Pf U~}ٿcpҴiST7--M5j~ၮO>D.25 *Gx3 @xݶmZ5p;$`v1hٲ3 $ƁB 'Xnu޽b5^z{3<3|cƌ/RrK$@"$*ذoG;NƎ+999rwJ =&+VTߟ}YYb`Aa,YǾ+_E$ Xz/)Aرc" ƍ^zI''kT@}| /E+Tc%Giiu5J$@$u۷oWuڍ7E'رC{9ٲeK0V0+Ci$믿^B\ʕ+Wf|nH0@`qsRP^ 'At+n#?mYe,b 9$\K^ԝ)ڽHGbIΰ-y$쐗#~MQ^#ar4nޛ2 (f[[ ^Ѐ^=VFs^ A||( bQځTaN4B% `~vI:묈&U0/_(\s  yٝF*!B-m,nqjnH+' ~8hF\Q_؝'7Pv*Nᅻve oJ0G$P!Dr/_}`R?'e[⑔Q@˪Hʷ{E/JZ{kw|&L󃂊+t^vΝ;Ua뮻dܸq+=(P[nU*%| G!w#'57G}-uR'/'N0GBmN(S"#a)IH2#v$ӎ.e(u{vΩ|̼2 k#yG@s/(   iebg-=PP`sJk}?za8%?䓕]T(իW/-!@$@$(L?OGGV=n [ODT"'OVZAh90.l7Zj%VURtP"#&MYӦMSnHHHJ'^zr~C e޼yŘ kQj֬)k֬Q '*=51I1C'VjF0s<{IHH %PMd_$% IN^ J7t 2$@''sss}x"k$#@4Ҕ1=HI`ҤI~c8 1t 0vͰ x[@ >sXRu>裕qy)w!3gTˋ~Ҽys?a$,4k& l+r- d|եK+v~2_6c=W^yEB^}qO:L$@$@n` [0YgŊ2k, Z #K1C ?|iӦ̙3G-ڮ];[ݧc$@$@$(j8 yfo-G}[:ӧOWk'M]&P.|_fѻ-Pv[:/T`oԕf;pHE3 '|fj3oq .T"~gٳL >k  $@ǀų}rIիWnשSGd͚5xbԩU;wrGD)f~iѦy}m[}lnV|z-9T~+c5kچN3[pMעEdƌjԅ^hO{(yW-_}UQ(?0^ UwWԁ/s.vOosGޏHѦ[jvq]~,ۄ+{ս{a߸q|ZժUKraU3؇j_Uۺull7N e4sssUK;w3/XD{-vnSzu"0QDZplc ~YѲeKu~eݺu:Q A )4SO=U}\yXXxWrݴs 9I$K & Sbyyy*(ϑωxfP /k8]uUAN2gťs'Z4Aٱc:tIT+Ar3@NDLAq袋^ "p"c+E9-n9!*D@lp 4|r<&t}z0v nwuZ]IPٝ.c gPՍ̆FD!h_ ž7jHm۶m?-e}MB@eV' 8t|28"C:9عF!JgCM4ɶje+;퇂V.-ի'e՝^luf> ΓNԯ(CZѰ6V4:v>=@:G‰n$ Fvg4FCce$|UQi|θq-SLtסC0aZnmϓ D4*T?rZJla*줓NR-4Vug3cIህGCdNPDo_C}l;W\r gwF{$`\QFGitD<7x\j&M?X՝ǹK$@ %)&Ê &0&utРAO׸%H,O?Tcnwba};gqgtwYu'X՝gO$@$) Y4cL4'@Ìh('<裂+ 6T3S;[Ǧߪ $@$6_(nC$W1Ҙ<̙3}WI<? $c>V_*X$@$T@Ý#ٻfEfRڡFh(zR",Y`6X[,^C [ /sW@IDAT/>,SY%PM4eRKObӦMz-@6'~xXr2Ԗ)L̛7/*簊ðD[Tfpm1Ԕ"n,DBkDb% oѢ>tt?+یf ?(ljyF3鬳R`M7$>v[,Gl蔵J|饗Ԃ<@NX>MQk׮m/PCLx ҫ_V?ˇl@ m*v_+'&ݼ9n7|S~r*hS 'ZXnq*v9C 3\* $^@0LoVSN9EeN:IӦMeXcĈGɏ?( 4>}VH ɓK܂?B ZR @  x޽{'$H*Gw;c18+ @ص?SN?t5ꫯ%K(4 _/)p L5* j/OF$@$@$@$0xHHHH^T@IHHHH/ LX7:G)<󓆃a裏.4VI8y晅O?t+4YxsRIK.X~0i."ƊSC wg/]TiӦy&L0~{a3$ ڵ+|#]w8'I N =Hn-Bۀf#6;gvF]\"KI ]'d ɔ¥9OoG9\u5v0Ȱ @ P#fdTR$wnnZE8 1(%:rQGIǎ&>+WVyFI'#"ȏ͛7Mt}7nŒ%k"'pւ?묳# bK.w_Yfҹs縂[ H>Pa    7 HHHH @ eeقn6,X@VX!mڴ5k/y~SݺEɊ8An߾}бWYղj*Ax#+,A։'(^BP/U\ZjV\)k׮ ܋.#<2p~z&ժU u*M6Uƍe֬Y*^o  ^>v۶m*}0^zkuUڄKU0ًy !V1XODz)kD+y1*竟9^ϝwީ̲C4i" 4={H^x$ Ơx}<뮻N/^{MuO|r>(^[i2l09%''GP f[BxVXQ9GGƏ`1B&k۷:ux>NpرCH⥼0G5/ݻwK+HjkT|"$肟;wn=^<}6`6TLd}1 Fc-dၨ - ]%in - ȋ_JT{=Yz[>*h1PR+q-h%ʒ5kx:>hA7>C0T؇ 5lPkA!̯&(W,ƣWꎲƜ^ʇ9Z2>,l m/n$ǯGXX+y$,^ˑb)lR;yuݺu[J_@w-[gҽ{@93fk}|1:0rH1ZTXѕt4PB`Ѣ4tjl!>/oEM08!ꅒٱc\|Ū;C= X;wT=zƸU> oGL6kuGiicN/ߡ^{)oO?U\h8^?ciԨic辗r$aR^k^NIHhE(^c,&@3 .@)?hү_?5SQ{7Nti`iftz=yT:u$ưz8x`5v\pƁAA4˜2ZnP?B00?D0"T=" *MVw6ًuChsx%o>cqf}pa„ +Yn# WhXrʵZZjԠj^:Tͯ]1S)4-54P8Zr?#yUw5kH#6l) ;,`10hƸe=ޞ~ 0| Z(*R׃  ⥺1KU0^[\(cƌQ=f>lhUk^а0v׋1~;(^ˑ#}GŚ]1&`_sI'ef?<Z 6KB+?RaС57}tiݺOW _ EA1 }OF/06z ڵS;Z1{꫁kkEp xcWByZZEeKuGYir:KU@8aJBC԰'|@Pa'^lNa[wW;ٜ/zGEy9eWBBbOB?(h?|ЭMn*'1&NbB&V` ^:vOy8BcGU PҌyZBs饗Ms0vnSBf*UvP'vtݘӛyyPZGj($^;Ɯ^*01oR^$,^ˑT@5IHHH'1#$@$@$@$@fT@4O$@$@$@$8*#$@$@$@$@fT@4O$@$@$@$8*#$@$@$@$@fT@4O$@$@$@$8*#$@$@$@$@f p7߬VyՊIr_Uի'{V++Z笳RcǮ*mРtϸv $>S/[hSreҥ /"'|ZխB 2m4:uvaՠH=ܒ@ #cMounժU9s XW]O !T@C0k}*+WEI6mivvj mժa nݺ(ƘHgL8zĤ u#GZ=2 駟)$-Ϝh$$}]_ʥ1S89$==]|g̘fZ$ @>馛dȑ2n8TN2E.eՎTL.B=8vX[@%'5 EK8PUٳ,_\*Vt! &>{K/T}שSG5#dNeQb3<#tSH 0K)x/ $ (*URabij9~`JF4T EE{  H3HF-[q` h8B0cBeРA2 3gee)wwN:c 4H3R>AA2p'1O")ʧ >\Qf͚>3㭞y  g^I |@@;fz٠<[HHXy2YR.PT@S.a   H,v'?}'   #@4咜&   XHHHRДKrFHHHK hbw   H9T@S.a   H,*OIHHH PM$gIHHH &?}'   #@4咜&   XHHHRДKrFHHHK =޻֭[̣>+WN233e߾}r!`UPApWoV|y{Jaa7r?QPPP|2222d)N(iii!GՋ#^(xKnn޽_!++KvܙYCx Q *Vxر(aT*/ŔRweIHHH%@YtHHHH  <$   pPgu    T@CHHHHYT@KIHHHBP b!MAn $+* htHHH 9!*UVrCl"5kL,㆟øl0(7:T\ƙ?JtA]J)"nX@] !"7?XX|k.?4nXeB.TXKq"R`ʧ{JHe⒁U]R.ZJ9";y={L k\R6l(0ք9 n#Nt""81@AZąl!o /yc@rJի mIGHHHPRJ  oPu)0.tڵn 7$@$@$@$9T@]LL@w+HHH=)&`.q֭A DBKbe رco߾l2yGS]ݳgOHq/UhJOOW]9Qe('@B P"&n_bE@?Sș=PD bUZU".MbQ=uPFȣ@F8)(XlOiVk<=;Hw-UTAB3~ IFw*^RiW0+U~>S x R2L: @4HCVSg$D(9@"FRHAx*@1V(HL$@n{;Y&2JĆc'ZjllyV֩JkP`tKV9>6q}}zZ0∰8xNO3} )@9auJJ!  .pd*ɚe M8K `a. ~RȐ0\c&)s>A/H&%s]2  Dw#{Qi?U4^P "P*-C럕IAaUV⚌QfB bPQfWZ18;(/R49~4G8~ݜ?;w,H/f?Yz'K(Zr#A7F̜R+X3,|*P:њY>_=~;q5 X @Se&77Wmciz>&ME<4 d};m;gx.gnlSFgn@Eӹ[@ueL/m_Qe??dHs]$q l*H2⇖z%ԥEC|[Ɲ|&"ʺ$Z#Y;|uQ@JnA!-=R`K RDeVP.f(ա3L h)_bԯ__}FK ;1$^ӎpPH'ke-TaC+VH1-i IlqIqB&|.4E<HrPu :R4~ݻGV㥭N|Z$uÛ6mRԩ^scH  QSMZ' xBFiSݠAj0-xB# q0*M! M 3Ǩ- 8DCLn~~C>Y ?ҩ-)v 4 XP(4O@JB4Sq'p*J{LIN;*@$@$`E@onu ϓ $)vPĥ"6z;: '/P|-L6-(0wV $@$qPBH p)y;XGQO=TիW]w%'pB`@c=0j.ҼN$@^!PF  Z=Q)<tRٳg@A0a~r?}9RhΈ (&e˖5F]L{$|`(% xS_P9Wϙ3G.QG%K,;}{^;*ęrLҺ6's9o8*TP^?/_^*V Q G?e(z^Xc7nUrUTa@FF䐇A =H OA=uڲeK/u]'N۫1c b=o<;WA,//~szyo7fDHyJBW VBPbn(+Wf͚IJ=?233=oQy' '>|i489t"sΕ=z֭[Kvvv ӂVݐ=[w,J>it8ldw#h5?KSDU+WV_l-xyխ[Wڈ\JQ?UZXcEYB;Acq[ГV hzb^?B裏D ^ڵkR|TPnt-VU9kE5d֌+̹uOPɗ V9Hgg)hyR<|4cyNNJdgD`3"Qr, T@?5.O>ʎޔ)Sgq R,sn~=Z"k7elCciuY*}d* cWA9igo&v ܢ GEZ|ѥz)@1tWR޽<r 7(%]w4hөPnɫ4Y˕-d\+$9vi8Oh]ץBfHf"b P; xZ>|rxJR΀^$8#7J`4qVR干7 [Fyr6/.)7-"1~c Gy:W Z@543Pmc(fZ\T49SK:1(c@6m1YәHOg|:~gm5/jCeJ+VW}a_dZChEa i*70wHl#Gny۰!Ŋf >h&uկsFKe9c|eRF id;x,][U?ES e- ksbCJa n5kJH'51bM& N;ԯ2ƼXY) tbVY(:2ZIe(ra^!Kf~$@~#QBIAbxI.({\=>T@P-v㶊Yb̮vlce/VR=HcXFFh#@a[.I7^ P(^3^ ) DN`ƍ9.;ZυڹFfoQ/_eF }W%K ?-h)WsRHWh9uP$@8p`#fɳK>:v"%w1ؔ P\XPܶVЪFh Y"PJe }YmR}̂_nݒU6 $^P.&N:o[{P]5fרEN۾y uP:=?+ gJg(uӺwU@  N G= X}޽9ħP ‘Z5~m۱+Cٔ-Sz`Ko`4=5LK8.(ϥF#BCſC9c17W\%C>T %qCA>$'^T@{0޳h]m`mB et,Yg6l*U1θҤr2j(9Bj(Ռ_R;W6J@ػ5Lwa}ij[oq@LٙиǸ'~}~3- %>XBiL˪xk{@:.7T~LL); &5`:H :ziM%RFus:D) OdK Z0n|nΒBU6C'=2vdߪU̧KWH?(  Ibl |\)C1Ư1.WK9;LBK Z? CIS-kpLr|9)|g(}CBϤ 5&iecbi&&Dٻe/PFkTk 0RhٷˢC#T}ߴij],[4ԥ\ n.ܽۜ?ݑuܢ _4q/򥯗&Y3wKwٲe\BEk/ e_LC)͔-;*<礤j$Uoq.M+_fYAcxro<srWD KrgctI}n` J2쥶EPYY+d$ Cc(8`jZũ:U}Zjkk}lX8 cDŽ2'${s|vΐ3ky g>u*C ?$(a111zCN0 #,j?x64ק]>~+z\w!TEP8o;^D,'Bv6TRC+l:eֶ `c J-TvUqzSeMTVc=V*',5ӎ׽4k pB5I77J>f?oxi:RL>z$v!WHΪ|>qHxt,#|B"[C&'meX] >‚b,c3bcgUUb\7Ƃo`OVܙ3gʲedJ=cib]#T>^&!uZ0R[ook!uhZQ3eT:<-!XhT&PMYi4^MhXmc mmB}Z}7<zrrqWv a%Lz:>`` dhSe\>p<ӟ|WG5ř:{6Kr16|Pv]?q ߕ ;wdhH<Ɇ45ڑ!@Ν+O=<ޒ?\^3gw?WH Xz7A?A5F`mRf3&6A}6xl1h=D%I=KNm+# (!½1lۗ=<jԣdW}ԇQ>\F-C7 &8;vB(#'tn@ee|Ҷ9 $C3f̐wPzЬtgh/ wg_ӆXOZѭ`И"TɲUE ۰=MJldl\ =mj`n:lM!x;C}ethaH1LoR8:~ĂRrҐFלf%rxiE!$APLqR]ySLϋ/X:,z 0>vX8rp ,5| t $ڭ,)K=!~ΈvWpհʲs5Xv0d#0u]wl޼Y&Mg}>F)ZՎw& `bSvI}c,Y$+6dƝizB.?|6P<L%0vI,qxYYBsrr:`!H0Bbju+d2tP9;\/KڀDP7؀j۱5QU#+7eɲu ?a~Ҋ{.IMfE ֜X>CPۀB9H$ڀrH460hGf" P3TwO+KQQ<6wi,ZOu thE|i7mh|0Lzv}w&qFg `r,w^K O~6lޘCիCUhUm$)]}Z}$ $p҆q[{zsֆzwd(\@ e"+m۶i/])**(K,~X&L -&4Т |޼yޓ0%MOO+VQ>N#R G;+tƵ Ljʈ`Ŷꎶ/gzZUxuu9`~z[9$|Yp qa- ,Jr<; w>Y[f7D(s2,2d~@1satD|)s,0 O?/_hnM~ۻkvL$@$`,\)/_<'Wo{Va}>}"L5 $CnLujsӕ>mgNF~\| \B&7nn#s=7$Z /ր>Zл[n3<Ġ7;ug+ƗXrrbȂIQ"꼡́f j@=ew<ϑ:,U&Ckrlܸ `jr9#Q6􇔔mURR"|Z=a4#N$ʟ_)WX"_Qz7%.{@V1!xFh&$hCaLl[;/3f} OCbvG;tO,uV Yۡ9 ~yp܂I^ni P]/koGR0]q{-&Bb o0n)Tܽי8q|WzM8 \! &7=W3O0p:B1K~^GsáڳgH-x.65OU+ gvZ e@H4-7x`VYCPÕR( 1i̙O|riEoG$@#N$TʜpS'&Nء&0tqVyyڻwoWkC;4!ܜVmT a┑)]لD ` ؓjsw6M4IM°;?)af$ÄK 8}2 JУjHO˚ ~d('F smVa; x>^Q&:mJܨ>;//O86mKrss$|ZU HN`P* _c}`KwW3p:!`fcvۅO,_=$#Oh@t~kerr"3DZ.VybVci=E'[=[˺̄?^ vNOgM,[j6e$d Z'p d҈eWT=e8#˿r-('n eeeZ A։p zig.i=^iE`w}H{W'\p 2D;e̘10HuLW EFd ?!BpF6 (R @C1d[8-Pa|ǎljb_aږwHLRa4/Wq +oB"SOI~~m'?czg` B'L'%9tF5KړΏ{K 1Iщ',fg;$xe_"W[,Y6rdZkm2(u>6 e t,%_ȫʩ|u]l+ܴCVSj-O0>j(3z&|c':+ d a !hpdYj: JE@vkҖnsv@#FCjԐc `;Soؑ=-6I Oޥ&7{m%$6~~W&P;<؆uVEm'C0΄@ưrx@"C(maO^3+wNs/ˑ~/> R~tV?K?PF3\o>TaOo@Nh8lP sD;j{EzKQavrһG[[B7gkP !@y$$;wj!Cx COB . ͉ђBǗ<@Hex=2xCB:ڛm,!c2c,!evcQQ>_qJr'x5S֩pOBT9 C08֡9m7Cݜ#Px>#) +Ands!C#׮@[BoZ ]V܏e}us¼ w(X){$@#A-#0Tmd%gLl9nF!6F3 #M?WP'BTiG/dh+%%>샫}pG!YF͙Fz&پS.;xܱF@¸A4pyi א w1vBm_uB[!/9Bjq4EmJ``E݌C6C&6 Pm A$`(2&1LoR1V~A2ewn59B("A$`y/(n׌T/T 95ujrIPc ``&fI&ʻKdrT(Iz < P,mH٪Udĉk֬ j & @MIIQhE> }R/1A)]nlvx`\G`yGAܔ<vv^pN?] W+@ oݬڵkoٻ+$@$MFݽ{vԙO&Z\&( {JcSdqɨkXnhR1VlȖse^ %x3nK ߚP =CrA7o1x'3^RL2(̶fݍZ֙,Pp<Cy=K EEE}Qu^`~Ar)owugpJFF#]UAv?쩙|ÇKyyH COt5{eyanPY%Gnbr^_5Db3=l+5q$:Xi2γLb,)ѻwoC8hK o|moQ.Bp{DhtɁYj1G:cMI#̨o FY%/+G*5H'ev(-iC!\ V<[@܉՛壯[`$;qPj>P'h?ccc@މmPLBm֤IZ7GdkV]&3$&&zmh?4^=aNm%'5ɍӾQ/ohW _gɿYϢo5Cţ2N++*Ytrm9GA9\ (>y⺶@1>|p  th!:Z=! pX`|6Gc۱?E~3{~@8X2zwXG9_v}V?%%Z6-% jNq=h@m&C <HIE|YYcѤFiz-pQ̔Gb}oY9SC¨f gCږ%0Kr!d[a+=rRaɊ!xNvv3nb̔pN+lDɣ;-X$%%i3i_<;GZr\vv:ꀚ,oCר5Ñjc *3%xt҄QƳ_vM851@e4hРـ۷ճ5$@$!x af>C- ;崢}CdCU2@9WW  KJJ+JRmIʡ7C|s_Yy}`e{&e/gkΆ(WLP3Ok]H!@4D y 8 cc ~XS%]R f<pwI>>Vd؉T~!.ף/qyEpbhm:k˫ĪECa9ͷ)ڼY| {DL ĬyL "7|!A>P JK㝬;YYr@ th j0ӝKQN3UΐRZ:sЃ*%gvd-HlJ3aLRlzWM,9k|oJ|D1T#J }*szubC i{C J&lO *WƶZ@ Rα:[%̝@ٮ .C C:,fߤ!ҹ.F 'inkrϯ#ryEs2j@ PU QN5^oJV+C*At+&*8Z#{+=zwݼ#@؁K'TY'+6fqj@5l?D ;:^IϬ3U51\b2غ7E=oj=orlg; m[֌H`ڿm3pf䈻:A>m~ݚ6+hvKpP-vl?+V 0:PMr2!C8:+I&Cg? "311pD=-t߾}-m eee!=>$bcSLdʍ&CS)%2AG  + s{W BX>vY|G̃ڧONWcӗΉV~`FaYԽzdpf#Ck heee~ۆYZB`I{_dZͤOɭ )C@pzspZ3fnCHRX檐~g$S/+kb뇕Y^/Tn+\r/F N,i| wo{C5h0Px, ؉Lk(N'l,![R-免##-5peʗe5YEoJyD7=%&Ĩp1!:P˦Q:M=G{H]CNF%딦ZeZaw5%%Qj~jVzE#@cx Xl`FӁ*mnc5M@LNrM4FރI$Q%L˔6,YB@Y$)ݸۤÜ+md+a\ʙH; PN7 lw|аiD(Pd-eYEDt8XDz*QWFKJvԞŔOê^jAҔ 3-A_L[e# .@t%ja LzO``xB{*e ߤ?fhM1յ:&;a_B\ߤzȌOv'@- @$%% 2&Ĝ7SN! i<"Tw B&uKfwcIHV0`/bZl%j@#7! k0Cp laiH(:Y? hb\7Adtv 8P70G$@#YpݔPvpd}z$@%@P KF$@%УG~z|DoΛ -P[xq@ݧ~v) 7HHKrss%>>K$@$ uuu#ܹs審[n+^{B'^<\! HLL<ݻ +I@EH4K?QvIM27ސByYfɆ d̘1.IHB@iiiZP̚}h$bڵB!EIU fyO?zw˥^A755i&]O/>zn^!L@_ xp!?`gr~3~FUk4-HtXZZTT}GKJJdΜ9X3gΔ_|Q`٤ѣG뗩P:':KCCv7<0 |7sp<4cFPhBۧ'ܵAsBƻ;lm~6׻#pgж*g~~@aEԩS\r%l޽{ͪk̰ -n&xX` P oI C(xG˵&7~ࣞ|O=Čyy݃\#!  d^FOL!lB56h:adz؆ 鿿eWI ("A$@$h=D6)-- B5(qֲ(% 8P'*D$@$q27 Ifzج,. Py$@$@$@$`7@b,/ ؜P7 O$@$@$@v#@n- Py$@$@$@$`7Q/jYYYbKڵkeĈިQKtD{ ٰa=: \uK͛eر?]ceǎr'v| >c[$,kvRZw!gϖ8 A~Ae4h{3sp-'FXE@{so-ܢm-x,avyw[o=b-y܏?@]Z h(k NQSS#{?u6V :;΁FL֮]+mL=y5&aH8kpBپ}L>]L"9~ VYMP(',k֬;w/7|SN9]3} /#iHׄ"MA?Z,Y(3w  P90\|LTvj0;۽egD{СC^-mw`pG;@CI"   8.ڀ    % k "$@$@$@$@$@44y-    z\D<HBG`f#ڍM+ P~$@"(2<W^y9 >  ?k$@$`U@2, # g?OMP3gJjj\{od:ɓoٗ.]1qD}8+;NA$@v !x;H$`[~ 駟.F?SB~(\sӟT~_mڴI?1cx8nΜ9 ؁5vh%HV^-/YFF0j({Zϒ%KWp Ç&Z袋h;tvA\! " ؓʕ+%''+|SNm2_vmrgȓO>)bI&yϟ2eΝ;B$@v @2 ؒl:=*Ĵ=NΝ+JQQ<s%11ѻ͌z?B$@'@ ؗqMI .4˚5kzz~Ϟ=]J]]>v׮][P,X IIIZ`5$ ;jVbIlI`{L <&3[K={OhNkkkD/ Sp-Ta/ڣ^@\!>lL,$  @p|뭷aÆfQDEEs='[lB'ס|׼]S}}9#p{  (e3NKYN h3SRRmU6ЀӤr]wIGԶК2  m oڰ$@$`Q񊘜,m̶$@$` E3$@n'`XbIMCnHHHGP5)+D$@$@$@&@ґ Pu\B$@$@$@$`m@>, 8P5)+D$@$@$@&@ґ Pu\B$@$@$@$`m@>, 8P5)+D$@$@$@&@ґ Pu\B$@$@$@$`m@>, 8P5)+D$@$@$@& g} :IENDB`patchwork/man/figures/README-unnamed-chunk-3-1.png0000644000176200001440000007220013565477507021213 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATxåIPD) l1Xb&@46$*h1(j ( JDAP."¥]yޭS>wwgwfyΜ9¾@@Ȑ@   @@@2*@QnV  @6  QЌr2@@P@@ f!   dT4ܬ @@m@@ fe  l   (7+C@ e@@Ȩ@匮-+Mz 4}ƍ^PfM۳gܹL:o5]vY^^^j׮Re sjܸرölbZ:ul{PI&uVu9իٽ{͚5sm۶999iӦPB ִiSWN7D@@ !Єؘ @@ QD@@ !Єؘ @@ QD@@ !Єؘ @@ QD@@ !Єؘ @@ QDJo֡Ckժun LB@(@z@}`ƌv-͛(B֭SO=ՍS%)@@ ); bKPׯwy'6'  f) JW)ZA@-@4hUP/4  @@Sx֧OkҤ$@@TS%#?}F#8j֬"@h U.͚5˶lbjzǦp, @hqǎvqY~~ܹ|A=zLX   ڀ/"۰a|^]0)}|Vb@@Pk۽{wUR/^\h/@@ h hڴi%iT:t&  Q MQ?CnI^_+WO|uJ@@_ D hڵJ*پ},J:3i\WGz sX+cjժm,uTYPjk}4IeB}~Zj0קVZ5~ 1ȫ?g2)2:O6 [h*l^= ҽ.z.( {}ꀯ,MXVӰr }2>cB](ԧgPԩSvS?~ ҏC>kԨ<2h*||/J20r {9EQOg\ENQYÞPQ(Olυ}o|  @@XidsZve˖vWFՁe  ~4۶meӧۨQҰ&  -@nn}Wxɓ]c " rАWptGtѤ T I  ]4ͧF*IM]/@@ gi_v/zY޽KX, G 2_@^ھ7BQ@B"@% iӦ7 Y|Y1  Mh;F@&@5zV DS4N@@ f#  fSj@@ kYg  @4@Y@ȚhY1  Mh;F@&@5zV DS4N@@ f#  fSj@@ kYg  @4@Y@Ț%KӺulƌŦܹ̙csε]vsmlƍgϞl"B7MlȑʵpB6l-]Խ7emС6k,4i{o߾}xx'svG[Vlڵ49DHo4hPPƍ1c5\c'N'| lֳgO5jM0te޼yW`v~ٖ-[ir 2)[R zW~ֲeRvm+W]iM45kڪUlٲe6`gwn-^zŦ=6?<'+WNNN|*(רQ#M4*U *XjժwDR>ߣ>jjFGv9O.+ZjLTJӟ37Wnq72Us\?'ywEaN*_ؿSSLLz ^rg2zXYt9VZ.@&j'ݰaY֭Mvϵ7oMҗSIDfXVyI*R˩2a/rdF?SX:3e2PN%rrfkZoǰL/UQ}&ꌇ.tMζ,Fy".=[wW=MQMtMaNU#gVFVB]K?ݬwx'`ѣ?7n.2~:uL?u sU/3???tg?͆vf\s95 sOiӦu֤f5olv׻ ;G HՔtyAϽ纉2d}Wʇf蠭W6Qr @Vv;˷n(ٷ?ᮤNj/lٮڊǦMX]1p!uBg2mÂQ+Ȍ@V񪫮u6~Ew˪PE[۶m8G 4lGBPuSU"GΜg79  t_aQc|  @(X%  Y rz@@ jQqʋ dY4@@ F)/  e,WG@&@  @@\@hj" Y rz@@ jQqʋ dY4@@ F)/  e,WG@&@Iy lժUy搔(صk\Q J дt ,_NdiLȜ̙3q&@ B ]"r1 NPT{`.X @PJMO'Ejժو#ʢI'd*U*/@@0x{7]FkժeիW6@J/=#[Yzի5jz[SOz  uX®:ӝ YÆ SR-[w}QSf͔,7֬Yc۶m}qg H7onM6Y%g@T[ɫٳ͛7rss/=zSVʕ+6ĉ[Smʔ))+gz E(3Eۧ%R/XV"2jMKF:AS,z맼K;LFѥdS Abƍ.`gϞBUy2A[{nϏs@(h9hXb&  &\8Sot_թSn6۷oD(& &ԛĐ (=slŊֲeK;CBVB @f@3*жm[ @|,!$riɒ%~b  OP ʰ[oVzu ƵӧO@@~~ .>3{L_^Zp 6̖.]j#G)SonCYf٤I{f \z[~3=E'@R S)XX"xsϵ?u}Ygnݺ7ƌcGy 4.2;3m.1b[_Π+,0Ot\M%VZя@R Tg3uqƦftk׮&MX͚5mժUl20`7u-Zd^(M6UX=0Q5Igիgyyy,7Pj:*RqTְ*cժU 91 RYҏ0եʢϰQZ>ݓe=}w̙3+tի]P 6ؚ5knݺެO믿_x5rG$ТEbCkzӁCA_W{`ԨQ2uAaO:D!>==vӄ}u]6|p7LfͬcǎՎ_skzQni)''J-ٳdוew^+((f6Ҳnp9^3o[+ sڵ^UOœ6lhjbb/pm0QFm6yejf~-[sw͛\Dw2OW `)nM65}y'nǺSY_(ޯ l޼^VZy/ݣRƟ-~"/t_*аvԌ3LாXD )'(ou { WwQf+*k2) >#r%]vT:u{oҨ.*86mi;wu}E75 GB@ d :{K/ug\Nx*~n͙3g 2X&@@P}w]jϢ;O#  ?R*K쥗^r]()X];۷oN3~AjMB@N7&oOݐ{S}-3;uI2+  F[nqݽ>`a&eB@2-Tm5?byYP,z  zXCN۴iF5_yJn=*D@(] %#<]W&Mrs>ux DO %M(yC9G FgEhXtnbp„ 3^z٠A.25<کJ$P @RVRGB A=8h4.+?-[Zc2{=6e_0avr=bTcܓ@@JnBR [x+߬Y\ϑ#G͛Vf@!~} D<3H#RJi7Mh z駟vCzyD@/) @Z.]lˀ?mժU+!6RX@I_~||ڹsgUT<={ZTAA;rl޽P(H M %g6l1~7L*eF~8CH\ _)aVҾ\j*ŹynhUMf g@8@J˗[߾}iuZfͬZjn,䃷Ț._Z]vWRL]tQFv r}v'qƹ2u.rW&^(3" &܄Q}]x=㲫+ZliM6MSY, ̡`jH?ڶmPx uqxu7)N&h–,YF I f8dɼ Mm 7~K`U .O>Ե̡jjꫯ;חu]RS;M 4pg6nܘ|=.GR95jȝԥ0ڵkA)U?je˖0/V&پ};K'M4[Z~~~K"իWmEpx+:*Ns4sIXT92%g@ufp>sgswǺIjGʥl  @@kӟ~ &4o޼B^+V'@@  <3];vNR h# L u'(n,/`&d(תFk^>DQ 3j_M2# U:!+\4 @ >>۹[蒓_:GvmeRoB@AuCG}_R @ _իK7[+cx #@^|z#gURO=hAPZ@) @o=-ZȭZgtyk#<3>hݺ-^ 8nf9sf An@ $| >>Ç7ܹ,B(SN$@ j\vʆ$"6 Awnso~jd.)}LJ*Kajժ2ۜ0'էF1J}V\V7U0'g؏Aիΰקℰ^}wM) @D&Mz5jӪ/qTfM> Ü5jyyya.ծ]OnͰ9S-K:{m6?5kf:0w.ePwlTyM)iʙ@@ zѫsJ dU4@h# Y *?+G@'@:  @V@@@ F)1  UЬr@@ zѫsJ dU4@h#_;w 7`;vN:;S& \<[ਣ|۳g+%\b'NSO=5t  hƨYxmS9޵kq<9Dh`"~[Z5(//4&  hṙ@=XۻwoUZzQh/@HF4=E d 4_|ѕ*''֭kG}=S!+)AȦ7!eSu#C.]n ,ZjY޽}K d yG M׷~i,@ \@@@ f! Q @@@ f! Q @@@ f! QE?COm߾}dݺu6c [dI;w9sܹsXՅ  oYW_}.SppB6l-]FiSLqӷonCYf٤I{EWA! N  /`gyp 6j(k׮jܸq6fklĉOZAAM?a۶m͛7wd@@@GB˭B p޽V\i]vu5ij֬iVe˖ـbt-ZdzM   ?VZ5&3sLt~vZ7u|pZ^=۰a}ݺuc鹂toɦA|=gf J*Yj|]fN1ݣPZFd|=[3m*kzꡯOa:uvaNS}=F*0>1٩Scǎu֭[mϞ=QgE*hOӋ~wqְaLl:t߱cGUTqkԏuΌ*͞=ׯcӦMs2Mb֭@@-3ww{T{]wuvUWź_R TׯtȐ!qj۶7;  >z/ӺukҦM,'''9=zmٲŵ?k  @0j@B@@ۀ" $+@ # K\\|@@ Yd@@\   &+   -F@HV4YAG@(h0  @ 2?  @@Ň-???kںu]ٓ:uؾ} g):/y|ƯF;O9 @H@CZ TR;w,6-]*UTl:3KBh4R"ڵ5l0ZOWnw^i|1lذb߲e۷lOЍZj&֭vvX?  PT#@+WSx .we_H/~a_[JڵM66oSƍf,7UI 'Plqg}-]d @8Z&&>@*T`tPVOOSp}|* KJw6EBH\4q;D ԬYmC[y@DYQPy'c8+6  e -D U˞-uuڇ~Ћ/?ϣP:/ޢC'wK(|x^]E&MΝeyGZI,O ק _ko/#,@%L B}jbo5mnJT$t  bݔ5گS"ر#i/uˢ'J:3i\|ٳ296xS5Y$mv*otu3?@ĈשSGgSgT*_ӢELK':+Q}F>u6[Zo.",t a/&kak)ШC7n,PV\i:8mڴL3[Eڃ@ D (ՍЯlMYm۶~>sLKMg<ŋgmЎ;UK)".Јo oފ ۜtI֩S'{G'g= @~C}֢E ܹ @FQnVG`رY0KE 4H@@@K@@4E" .@Z  A4 ,@@t/݆w@2 L9?uS~e/kٲeVΚ@ &@  P~?nX^RH O>=1{.2ФԩSc^X3|D+b#@j~ >ٳǶlb>7, lݺʂ.ݻwW\;sj"'@* J3Ey[NNN5GŽ;MgW4,B.K+ZӦMK{hРAkSZzc"O4}," Y T 6Cyx̢@ڵ-~RUժU^jժe1gh pR4R#@ ^kmƍ /Yf6fUV Ģ8L7"=3?|;#Y$"@ 1 /ТE _Ν'g 8 =.G)1L`vW[;Rg@V"'бcG۽{'%Kׯ_,(0C3'r(0k,7 >b׮]vwC(@Z!O @mVb7Byyye\C2/7t֭[g3f̰%KOv#W̙3Ν~z @DzUnN8ᄈPLoп!/#-\І fK.#Gڔ)S:tiҤI= FB&аaCSI#ԭ[N0!j$po7 V47wGڠA.3<&Ol={#FY.r7o;]@ g٧~j5ktǰ!@ꌧ~qv)4\Һv5iXWZe˖->۽{w[hQ_ŋ>sWĞ'D#(թS'Eb*U\4JHITYPިKN Vӂ 쭷ފMc}R5]D ~@T}QOÞT*gؿTΰV}U}&Eyq裏?njbw7UW]┘?}xBdOR[I3~AſE]ןrss ?6hJp{aN'ߝ;w֨Q#wFե sjܸرölb+q/IWnja.Ċ٢gVh Mr׆iԨQO&랏oyv؛6m Hn˦~45m6oڝ'3܄TjXO|͛7w{ɛ@/:r:#^NgϞmw}iӦT4+nݺ( !Zj+β)%WE6 ^KjS]RrtȐ!m۶%J @ԢE)T7Rx|{uG\R{ Ύ=ڵ'Qϰ7R# aULP:ﺛDTVRXWhU|)|=ӑ(m@ˣg@(+b]w9y|w_9$СiHJ=_v~ʧ_P BW^ >U qK/W_}?s\&[ouFy?,EB:聍  TRؼ:k˷${.27 .z)|׶gϞBT0zBxQh.LE@ %s\=~a` 5L|ڹs3ƶm?wϏ8+Bh6m|W?fԏB@B#O޽{ݘGg?~mYfhʘhAN:fhH~@GevժUN;4\x6uǾ}2L@(@o3f't5lذ 5z깡㋷uV7=~ߞĊ+GkڱkCuÇg:/9tXiv饗)hև 9]8p`}ls=g'x;C\BYQ Y5vz8vmݱl(U{>:w'~  @ڵkY;/ASH P-Mt&ٯԯ5C@@NN <8"M}1.ߕg]tIRDnBJ$A@!?ѭF`^snƖ:@@ x7D{F7@\; @(@>}Kٯr DJ4RMa@@ f  )HU7E@/@:   @@#U@Ⱦh  oذ!b.]*WlrH*Ud,l&/4jD֭^mVuϬ~֢E ?WGyS}j?kڴK ޻vqS l7N}U}dKcֶm[k׮]ˌLP܌\rծ]Ə7A8쳭Cv=;N'?nָ< Fr:t׿jwnv]xqSyD-[1cwg?K\O@@ MDy@@t)#6c&M{ocjm֬O=/мys; ~a(l]kԨ!hժO&[bŊ oիpah03" $"%DԘ@@ a ]w|;w[ Lwj R0Jυ K۷ x/yelŊ֫W/םMOO"X'gnk֬qbrrrXg#0OJO}qY#c5jPھ}]z֩S'[zUVƎ,| PR}?N;$,.]x/y 7`CYfٍ7h=z`a]%K'gYnɪWno߷|еuUV:>装{˲H΀B|ro7^yHرM81ɼ?Sjt?M\6o9S`>jp{>rFZfйs/êMKݺucscyOSë.Y4 d֭g!ȕP vZw&/v?C>?U2oع`,D%է?5E|go.W_..s4F2_W5kL e8ס.r-6lذX eݕÒ$`L0`p ۘ1cwߟsYR}>䓦#?sʕb )23E@R"oذ!1=Wؤ` Z|0ŋw80VrEV쟁F]M ?]1z)`고[|DUVu7,wYhYcӦMsmtvܹ֭[r.E`㏻̙3SNKG FiwqtI>Y#/W쟁Bq[o֝ڵsa,DէT@jxQG\\/3}_~6gwsN;TÇKzT3'էAWo@!TT=W\~@ tӊ~;U1[+Oկ+)k޽{YP}}|?5|HtC$hY@@h4! @@(hy,  @I@@G" $-@4! @@(hy,  @I@@,"أ>j۷^ukѢ|n֮]k_ew5Ȓ%K߶Ν;СC#i._ܞ~i7Fy7w]3Cꫯ,Xjc9ƚ6mj\r{_o֬9Pd"'U9FL ԪUˍSa{[jes;֮zw}^yjBAA͙3]tk?xӰsu]q֩S'fL HV6 2? Tt衇N;=_ƍm͚5}^uTgAϟΜƏ4ePTQ.6?ATfMVZ`AT؂q8ɫ wT-BYnWa co$M[[:U`NÃvBU~; :߹sg;CGږ|NTAM op٫.o{HCABZo]jmJwݺu_ڷUAhB[;W,J*t޽?es>Wl%uǗ!PU ;r.)u'eBUԅ0lSa(T6QG@@f  x   3+A@|.Y֭[g3f(6]wΙ3Νkv튟  >Mi&9r}1 ڰalҥ)S=СCm֬Y6i$"! _7}g 4($6n83f]s56qD{']?`'O={ڨQl„ _y  E?կ_ZlSR'+W]iM4qZʖ-[f }{h"իWl/ly#b#(h$ B`4ҋ:zV'AMCSa}'ȣkCuFkmJ; oTE0ԅkoMPQA/Tئ*|饗ܙ̧z*M]֍4쓆p\fM Tej9i;&r-AT$Ekb' .?VNzW0d@"/#_   HESL@@/~  DD m@SQI(i$,TCteFO@7iNgRA~totZ{8J>l-W۔ Qhz]hК.]gUO P:jHvLT:ktщ2S#5z8S )5R4FAb$dS3FB1RR4U{Nf1YWA[*\FB|j  8P6@@ T޽x≮eFK@@|-T%\b/5n؍Ztwz׭}FHuk .LbY^D "Zr VO<}nnݺ;Ϸկrڵ4>= T0V*Y R߶[n]v::>֮]2[]WZuٌ3lɒ%sN3g͝;@@!3[?~_*~M(m,w}~+k:k:ydrto؄ lСvgn1.Rԩ^^x;vlB uYgeaͬ2oVE@",/N6m̙3/{Lՙ_[gO]߳g *7n3Ǝ#߻SAg|ZtM4M JE/ǷO.ů\ҺvUdժUl2wV[_hQTy%z/=33:#Gh, 6Lb -N:ѐGU}!}T*! Ri1]5# ~3wU/2uss=g?|?ekڷuM;)%>`a%}PwW^vx]ZA8~zن l͚5wК VFh޼yl[)yP$$R-Jm:S&֑{NJt; ޲P:.4z+Uۖ-[ .VZy# 曶bŊmʘbHIr:#l֬Y裏ڡjF*,z]wo4 Eױcb:+_^t /P}. elٙ?}nӦMiY? řr/Tut)!CqHIMz *bt}_H4~(΢WySr?OҥM>?T+n_p1L:ս7{leuǦM>n%! _ %/_`R,RI2ՆS7TpӦMK8{ugJuY]ׅUW]e#G)SI_~!C麑m۶%.?_|X5 n7x @ ) @:W3^D [lYj)ڵkѣ]{'n{I*KTgG5Ϩ^%L 'TN) o5j`tC75e.=XݻwP7 R]{.#_xJKymR\p|)PW .Ih;Q߮5I}&2ͻQ+]Õ%~$WmU7AMMHj aGmG/>n z6]ӵ뻈@}OYɮ#T#7qn&Lp#1۸qcl$͛7m$T湴e&|W< j MH:Xib$$l N#!e>=HZ@C{5~$$M  "=|  >|2rw ȇ@@,pzW1ߵ&xF*:\3gδ?Ovg93|@@  .=v 7S7Lwn6,&O@@"+P1%_zu7h-^Cf/N?>bw[f̘aK,)>g;wЛ@@@JC=d-rUO>Į7bƍKXf <Ri…6l07ȑ#Mc+CڬYlҤIhgh ^ K%>|;{ٹsg7Xvu^{{ /ؙgi^z{OH|M8p75  g'O1b/yY^-   HI^Zݻ1s Ep޽ԵkW'6yժUl20`@LRW O@@ $JץK_yRs^wԟ~ FfNիg6l0]AB5_|e_=6>=W'aHjRJ0[NVE,999A~Rv g]E1.I'ڿu…@4RQW5ҙF K&4M&#SNu95@ٳ"uVT#7=M/ K:tͯ4Z-[T uVP*رt˨mJ~~mI_KAMIFB <_y6 ^{nS/TtmSA*u|+I(`:N%C>tG\Rm 6tv~oLdl޼ {I[jt'tKn(N6 CqjUҁ;U2EK˫OoHQoZu@~D?  I1!o"P 4l0ѣGB,0f5kVsQhٜ  @8"H MI$+0mڴdgΜi˗/M~Hp.]*}7SNu$EQ6mU绻v=شv9[)OR&иqc7ˡe >n_Mȡ@ڰFƧz* >8ꨣ|7Nŗr T|e=UOguV-mڵ˴,/2† LCMխ[כ+XOIj/-A<ɮ@XTGAOTˢ}@~Rә='unL .m*hi_:;tVT.רQ#vWK:ӦG/.;< r|ա^bjR&u`ikeHFcэJ:Y};~ oٲ%]LYygrHZ;эgA Q4RFfm/D  tyz%=oժ=jC՟tIK_P7 :5۷e]r^q(KW]_P({޽if=t:S&Y-[=hhHߠoKq6u-_eH6^N|Y%h4uT 3fӧ8m;w\֭[kb6@@L *9rM25xJ9sؐ!C[۶m{C ,/˴;?( D[ܹsPNW{Wu֮%_Ύ=ڝWO&!:v}Mg=ju[Xx XmVur y޽{2, 2(->Qc^_@mo馴fTnRT& ;Bm؃VН|#dN h8X =v7!mۖf@  )f  Y jt _ ߜ''UPP CC׬YΈLX`_#8"mÂ,W_gaO=st h02n8;ӵ[wyf 4 tu~Wq-,,}حZ4 s9־}{Z3# Wb|@@ )J?^3%hf6]tq(˪vavQG=n*Fgr!ˍAnPI q1|# e bPu~lIhѢƍg7#ݵ>裓n6l7  |  HH˖-+VX^Lŗ;[zu-]feaRj֮]k~ֶmRdoݥF9H\,u~o"sΚ5]Z,E"ͳP7~:.>Zu}sBuuI][l.BJ@Y""m@oh\eu-6Uj?R4=7|c_| ]x\ԯ_ߞ|IV顇2uƏoիWx@Y" r:{l\W999f(F 9sc~BO[~`}_r%n(ZX'-4iRCш#\;?O{ %u~Ô cE9s믿>:x-~S(}\s;-羋.g{_}>DŽZZE~GpY/mB+1O-,x߾/8xؚ5k>Y(k]$_ hǎmĉ?//v{=ٶmit<6i$[r)?-Ap藒.M˗/wg5H ./Rg%=:qK푃b{,ulk׶{>#| ȸe˖6}t{WLǣIg}]Qʳjժue ->"tͧ.<㯥bՠxD z1!y͛7FN%aÆ[`nnnu5CJ"%-_qwBhH foSjdJ)dnH6BЖpGePPlN|g|8lϫ9qs]!~2 vECKOOZ۹sgѬӧObS_ؤ)]KJΖH7!E<:իWܲBu} 7nX_ :涏K]pcx)P E"l.OF'~B'SvU%GQQ-_ĩƎ@iiO5J$Rmh[wB+qI -rj@KM6Y#Ykk<''ZZZL7. E1PRp~~ojjp ,U:lÓ"1g?{744hnH6[~EHw؝rс#)OʏFvDjUޑP3z^VK@lh5?3c7q~"rPUڵ7lশ3Õw` m@g zȞ?m3h .??._lϞ=gϺ۽MHS DH=>j)Æ ^H[[[n}lb&M_ŋmܹ~w=1bDE]۷k߿"S+~a5556~xv544ثWln?-SuOHAj@S0Ӹd9vX[ryE.ԧš\ې!C\Q---n{qU;JBRY4skGn+mnJۼy^8fׯ_/_ؔ)Slȑܹs_v>++̙U5?}۾n. #' @wŋ>}TnN  @{@@ TP9  (@@P@Cd  @@B ! @@U4TnN  @{@@ TP9  (@@P;rFFIENDB`patchwork/man/figures/README-unnamed-chunk-10-1.png0000644000176200001440000013344713565477507021304 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATxE ɒs9E0S@ 9 QQA83 ((F $Gy{g}x6V}fٙ_TWWWDIPE@PE@H%FPE@PE@0"("(@RP4pke"("(*3("("TTM*Z"("( ("("$@ V("(">"("(IE@Ф­)"("π"("(@RP4pke"("(*3("("TTM*Z"("(@L`i?8'Oo믿-ϔ ,0k& ㏎)"wB?nݺUʕ+{>._L&'lҥ>>&Lʖ-W9^>K(k?۷K |'( ƍ |?c%J"}h 7ڵO>DкΛ7υҵE@PE@P0ozir6YZj{O+"("_|Y6rzڵSz("(@F"he˖J0QF E@PE@P2 @+VV*N<8$))"("' \QP<E@PE@tTMpEIo>9Ӳ?E@PE@D22 q刻N,pzoʕ+MCI߾}Aa>i:?`&viӤI&Ax b3Ar8O93piڟ&pOw;dY8)| xARF v) 9d7nl޼YZnmxKսI@t D9DgϖXyɄ|F|'  Xm D(iK^> f kM6x@eۙʹ˲u\XO/4x`#T"xYxȐ!2l0sk7۟~+/gH?ۗ~ûGgS(ۏzBPE@PE3xV}eAf͚%=zEI>}dر $dժU@P!K>yWJ"(GKh2"$9_Zh!]t^zINdݺuW_ɘ1cLܭQFȑ#M!z(DM6Bck_jE@P\AsƍwY:0I5kH8gڵ|rs}%ĉJʞuV9֟,V~fyM4*gMU;[~W!^Ҷm[iܸ=K|@.72_)}g>-o~n-__!LśP'|RN)X`e)Vql[ngIF-[ޓ~8xۆ sV9!fJvl3v6?,' +P|Rtۉ& } |>Icwڻwo,Z~=%ҰaCiٲ,X K޼yeA+J8N~CC!ahѢ{ɀ0{14gIϓ_ >yfTjN"0b}GK|:sg ?PW_}u}%>cf7\&d}l''^ix*Oy$!CHZ?lƏo>}*Ul80̛7OV^-K&LN:),zRPN8׫WOn喌XnV/hkE@H>iֺ曃ᗘ%>#-pd+5jHnݒ֨(1!PZ5bWoRE@HO<+6j(h,G-۷o%KfAsҡCDw,"("!@s2Ta("("mTWJx>(E !-'6$^$X)*˕+gҫ:ۊJ*`G1cƘ',M6uV1/"S,|6l0l>\^R/=d"i phڴi&W\!y捨/ܸh߾}RPF[)KW/r߿y+RfΜ)ѾUz4+˦ )j3ͯLV:huE}[=thpa`%]w%eʔ={A~T~V\h̙*U A:ufOw@cΒm6yuozFhű77C#?nݻy;6ߟYPI\&cM0ބɖ |"_ 9E»+^H+V0h%[꫍w1جSØbmN*u5B۶mMo>}*UlmڴRW^mEN:餜@[&6CDNP4С{u_o%i"C|2lذxE@PpE?[Mv9QFF0yc̘15'$lFXZoԆ_bHt+t>O5N/%hoVcO^e>C袋?aFaC b% 95P&t+ 0ar^+"(FW^11Ny7R9AY CD4kLPq=zY'77*n zMlGJğe"tv &oEeS3mh.R^z%eDPE@H8,q&V"ڤ?ew:!6NyoiC{§EC |(HBhqVjb%Sm" LbEG k`iԯ8>Qfb51OqfZx4mTnHobD+!ql $EJ"(GY%o;o&ńVIH)a櫮J"ϭⴜرcwg I֭3c J"(GY}뭷L"sĸiʳ,}nv]/|B~6dgƌF=YJƖݻwGTgŊ#.Y!dF$Xdcmo,"*L~ɢڸ'4BLJx$H~&' L3Oh$RQ.$ EӞ{N}шQQٱ\+-''8YudՙzR]w%lɠT l?ۗ~ûސỵ3[sc@o&r֬YޱcGE"W.hڣ* '|b/׳zMQE,VPAؠ&wK9$?q*`z()EL-Z0Kg$LjR V("Gmt5.'q]vPW@{&MCB a RE]%eZ0TE@w`xosX-_Ll4(VRA`ҥRd, 潞3gq("D@Kzz-g6YWXChP>#z(i'QB GQ%E@PE \рO zЧ~ڤꫯd̙R3 K,S ˀN!bɲpBis̹O?TFIPCjժ3Aw+"pEjl֬C82CN:ƹ{1Lf͒GyDڷo/Æ ݻ˥^jb3A*իWz"<=cQc("ċh7o n:bST dԨQF%HW.Q{%:uж3#GJ߾}mޯd<hAٔE@P7ڸqcy嗃}KVky7LɯvZY|9onZ&N,`j 6*Ƕk{Y^ngu\w>mz7ە)}g>-o~n-_7o@"m*Є_2MsF'5֭[M\Bg6|mٲ%K?{&=ag\{ʉ 97եL4n:… 2aq>ee ;ݻ7\-@mjw}ңGi׮lܸQ>l6{ 28oX{ '  )jEe;<~P`L2O&~#|eh~"XiGٕ0LV,h+ɵm۶Ǜ[O.J2[6mիW[ &"("(ESj-l5o.wqGy7Nnf#; N |⹶Fҭ[z("("-<%"d#ѣG54E`ΝCf6s@<6W_5vrगLi74^{m2׺E@PRH>=ò))@=-3d${?VAF<_%E@P")P¬)COu]g߉_qFt束4i|嗉61?ss~ae "(GP(zd 0m۶`aC+#XSNJK.zE@P @Ӫ{/\OL$5kf\8"GzRzLvpxK+WE P4{Oۮāp새?hc'7`GU9/O;ݻ˩=Ŀ5k,Z(kaݺuagc;d1" +)"i焤ݦ(!piɲeW^1ިQ#*ȥ$B۷O/6m26^ziw]VN?tٱcI{'w} Vة>c+W44hdU &[o% g6"<{f(s|珞)"$=ՎEl$V-uOlOd?s0`@4|6,Ybse5ǶzHn%L)M&͛7?'}O*ŋgqrcҰa\<~gSqq;<~N;JԌ3ԥK\pd!xt Oq/|<펦^$ a;,{Us[}e79P 47x2S|0>l%.4=qhYYIZdsfɵ>I 0%LpF^IV2Rengpk%>7dV]JDyYg W(Ǘ^zYm_g|ZtoḶ־\4{uB-VPR',kΒp-p4@l>$!|ᄂgJ&Z"D@Fj@#FR/!_Mxޯ_?av?~q,@k]t1 b 'TYp{GZ]vjN^b0j۶1"TM Z" Vr(EFgݰ]D>}!uRGd1b7ZVZɸqR.\aӧ͸YÔ0^Ғjժq(@9Vz"(af͚~Cay/`E ~3KGN;~'iI^Ykݺ-[+"P4,/Bꫯ.K PP}رc 4Hhӳ6b" g}6u3A?scs@O x5 %0 `n+?PllvmB_x0X9Gx]ȑ#3OwE@H7t|gr9뮻|˷l"d{'B/ߖ?˯CshpX&w3:moB=l8ӴI4# '`V{ѐ"C 촩hѢ{eDa|ch /"'|&&2ãu:Μq&P?&Ӌ/c<3'߭x>^LJg aCt%[?cƌ1qmΛ}3 d$,T6@˔)#{1IGgʕ~Μ9A9_Rw_|ǜe}Vϗ/-Q Lm?~,( ]vB(g|_ qU' ?O> V7ӡΜ9SU0 D@sNyͩ>Vu7t}N=K#DVڴicⷑai„ rI'+F)"()AQÆ 믗޽{1Pp+^n?`U4w^{09 g5!8ʉnC姝-z"("jghm[.rjjժes6&ey/Go`WI۳oO[)OU\hE@P7hի'l8fHIc f68?Ӟs޼yMv͚5lM4Iz d٫YPRE@PbA/6,]T $hj׮-=PXw 2!,j0L&ґ㍏~24uT=:"("$+),3hFJZ5F`ƌUVz3f͚ɝw)dWQJoGyfD[o2_mw7N88]r%1^1C7*"("Ă ("("Č.*h?Џ-SDX)شiq=ozP'!s8(7I߱cvSMYqT4w E@PE@P%xԢE@PE@PrG #0K+Xv={zY. $ʕ+u֞N{|grgmпUsRvXd^Z+bZbɏ %,i&Kf{'ʰRJƭZJ֭[sY*y}F7%T3͛M?=JG_ 6wBk c7~L2Eڷoo@5k K/Fe6`{5aÄT hl2Ҋ)\2~W2fzԨQ2rHqf"x$b"AP"ysIe}V1bi,N:IF-m۶5:~6 4.Z8p@ꫯ.]w$ͧ~:+hj/nݺ'2UV 2Q߿hq^SN&wyj[C`&>k~޻wPtݼ|34!]fYF<:աGhѢ&55GC(B,/rQxزR=}E›{OD#{Weo˚5kɄ*UW]eON~G@Yu Lko!@r^x4h1!,s~3U6mj^Jj1Ft8Z}w ?/36=m /s歷v(y&~l9hcwѶ [A|:vhl.]jq2)D!;ĉm0˼E= y7 OV 7Ssf =A_l.BljժD%|%v}7Aq4Ǭ>a8v`,кu *˶JF޽{=#8jfzĒ6i6v 2ĘPT hK ΙN8[Q Ф)y  -";w6lٲʕ+!R;Ŋ'x"hȲW.7n4R{NBiSYge"R@&niޞwH?ZK/L@oBAfq&L0q?oi (C\#,yYyllBoVZeF#dd.я>,z m `.ꫯ05O8?6}tLWOĐwQt㛩iӦɤIg `8tP\o Bxl>!rAKgm])hfB_#R#ƅC\e&v2v:)L9 \\gwVcZapePh("("(@BPЄ«+"(""h(""("(@BP4jኀ"("(("("PTM(Z"("(@(*"+"("$@ ("(" ߊ"*nYxsid8qtE3g^?w\[ / fr`Cuz(@^m".\ؤn2LHGl2m+T :uvڙ-Z1cƘ ]ˤk׮ҤI2dA vʈ"|eM9SE; |04h…&իjժFXWcǎkN8AؾK9묳o={ʋ/h~G (@ KSNE@HkN<`ԩ#M65''˖-k~۰aC??xܪU+)Wϲm6Yt tZjܸԬY{E@P< "m"ҥKgaXb<5j԰fٽdɒe{Zj9(UTE@P ^m"d,_|EUV'֭[ i"E6^qF_쟺WE H([o%{8~a[q/_>l͚5'|RLIyV4E@48m"6m?؋xi<8ow.+V0FES aғʇ"%SO=ՄWISLʔ)cN#b`w"(^G@5^!m"d, 0<rǛ0L ${ۇ^+"I ɓݢRLEx49/l۶mkϘ1C&O3>"(F@SZ"(1";)=c z"(A@வ*"("|v2("(@jP45k"("d,*fl+㊀"("@S֪("(@"hv2("(@jP45k"("d,*fl+㊀"("@S֪("(@"hv2("(@jP45k"("d,*fl+㊀"("@S֪("(@"/9߱c(QB6n()RD<(p܂ JҥӲͿ>|Ub ^~}R륲|I…e׮]Idɒrq֭[^wH)_ݻWv^ST)ٶmeFRYrd˖-"?Y|WT)愽F5aaѓ"("(B@D!*"("E@аIE@PE@PD!hu5k믿nh\.ZSE bܶ玸bPP|@F:!c.[L~iiӦ*T(Y6+qǘH Mp䉕pЀRyMINsF?C8TVXo"}E73j֬@@gϞˇ9Uu#"o0G{vH: TK_#|~{)Y|3T9OP PM&BJlڵRrRf ~SQ7n0Tm遉Tm5w4]K4굊"(D:DL۷GeJP@Fj@QMCEjIw`cx">k6.VXEtmfcYMb Ve:[X$ge.Qmfg#QmkvV[9VCY٠E@@1nzܶL?&l4n?s"ی 88lgۭym4A+c[r֭['իWw} ^NE@H)Z BC[]iI(;m9v[0eE"ۜgjmfv&nCz~I4i"txLDfΜiHoABlE@j~T.E o˗c=&6ܳ:ҽ{w:uҧOM 7'uGURE T%FP xĈ 7 ?L2EЈ=Zڶm+= 6$]mY0B XP@Ue7^[(@o>t%KH탅nZϟ/ڵ C{JвRg8Bk.VZ#h%uMt%YRԟ ^<ؓDSᄛ ̣囉#I&b 3h,="^;JٲeeÆ Y4NRK؉"DK@CVjU[E7[!q8rk*nTiSy3:A0G7,dbhAPE =وex>n>i4!K8xj_nFa@yfg;v.D$bŊFz-JESoh@&hjM%K4B֭[]r<#Fʗ/oAx.MJ2b9+WhƆ{Ŋf,t:@FڀF^(@{51x`$Nd.9aA#DS*?v"M6=''O, .t6ǜOS2=(@ׯ4h@,᧟~|8 @IDATFoVZڒhJV^E+jc0E@ ThigP<;v֬YңGYh -2vo  SVZME@ ,xqb9sȹkvjٯ U[H a19'ǥHE]!'Yȓ6h2W\_Zh!]t^zINW_}%cƌ15F#GJ߾}ܯ("5j$y9K a34# h!e׳6Fã7F'Gzw[oC_0Ɠy *jox|A8q97RK O>xsnDDi6rҥ }\6ۺ˔)c]kC8wjԨW2f4U|g38L fdo.ĸ}\JϞ@yɞ|I;0 ;‡h |QvIĤ DX/m8xgv\j3 ZtYll0\X7[ti>n7؍oB͜ʈ<+hѢa*l"W4R=^"@ c!(3pv!j3n6;(Fh܆ @_[\n380p (PfG7g#QmVԝbeU){#/dQl紗4UX9oϱ~1JV*eHs; @'M$7nyI/>1mlxx-q>T+" jF 1މe@$-Q#R/KLXUb>T)lA(OMJl|KYY& &Fv hIhMSaBd%'yؘLdb)!Kh@z)rs7?~\y2}t@T6mL& <'L 't-ƕ=RfˉЀ28B;wtݱ 6uSRG1$Rzxjm9QfE6ޮ } |v9[)4|)TPm(.Q&4~&]уqXod%М(ZQyJ |K̦ys9޽{x0n֭۱7K/Uq^|YB^ -AP| RGm!!:Th29B%:TĽlF!z m 屄dYP#ofѣGDdܹth)ݶ%Bîao~hbf*ʷ"$D+&̫IP9Lv0§Ύnq"hܹsU@W!JԪU&&wy!V g3!6TVE@Ȋ3fd93)8͛\R`#O#cI&iM&8Z"(^Eգ>j!O=TLBs=& FleڋkY8,k̩8ST2z^P"l2޽{y&ӦM(,"@&J6,{TjhE@<ҵk,Wٙt~ٲ9cߴ-|}UٹǝY?<|Og-K6BCxLHrM"_n8GNgML9]6C5m]n͛O?>;g) w>Qm>\:״iSSUv)SHvLlA4iY?uw}UqkK;[U]Km}ν3|2S Jm"cc\^=W|7"iW2ںB'*4|'}֒UF vF Un&(eE$/Gs" ܤDx*0Ȁ3Fv >҉hŋ"1eUVsM9j38{=gǎeҥKiժ:&l[='}u$?ȏKBF[mҰ΀]jN%9Ϥw-q%E+hE}mY9ǀ yQ?D>Yf\I<90Dѳԉ3,ұkc}r@S1H9;ȫǑb5s|nH l3vV#Gn㜨6v&DkqyGFI'xYCήoO}d f+ZYZ5$ oa4l?qźg|ANE`f߽Hy-ʕ+Ǭ YDYsirUTJ (Bw2W\i8RoX+"N[oh5I[ޱpDԫ?m dwÖBA,][LV/*7/{Ö"fsw#1!)PQEp+0 ,T|y0F<"8="(kBAbBh\;=bqǙ2lg:Uze [) ר[jW-jeҴ!V2ڶm1xxf03I6oWMYE!eMZ6|&+W?\>ATzuyg[&@ Eg {&~^~eyjժ2k,yG}2l0c饗Z/СCݤ˅^fiYSO=%|IZ]x O*L`~w'u:õ\784yl4\z(\"a oZX*pZ&#[l~ʹl48dပ7 "Btђ5Wm_km>l=D@#ܸv9@A]8&!TX1|nr$sUO:7B+r)mlTAa/qEE$?D0TJ#˗eg}\zrxbآE W^ҩS'~ꫯd̘1QFȑ#ԫ(6[aW#I`UXfjKmƤ$Gj˱~+]0vz/YfҸqcojDx)]")JΑQl²ugAض.(;v{ˮx6P~! ""Y\^ŀTw|G <, d*\P`кIZrwQ-`i o+΋fq0FZ5&X/ulGD&PbE_" A*굚IN7O5kY)gE$+7(wI_|!o\~2c #UժU˄wfT,#"7o܊vSZXN` O>9zY^umJD.\thFg~m3\-n^wF{ףFo?,n4aqԤLmi;QeD\vݶ<c6{.JQ6Rl1I6|CFDľFh h$D yDr.cCwodEMdOx[, a]ao"z ܹA ,?ػS&͓c-gQe.ڎHCSR4%#Z{v{ޣimTs9KʙLUؒB6w?'!ڮ2ht8U6MxWP. kG:c]ifd[n&h1)pIhH }L@?>@,F_pQnE;}&/7`+ uU- 6ZUaQ8xAQk6 |n+wq-+"=z x Ď81P͍޽{uF nfӧ; ΄dz #6YQNN-tc+"r>F,Bx$ทS˖-3);w/z܅0ʪR r**2OP#V`iEw cm[i5:r?ʼPD9|bCS8%"22CXvGpԠk1$BӈrѦ,DdYܹtn@9MIL\VAPC8ǘbyg*W]u~,a4(r=Gxc΄"'㏂s%h}0Gsǹj8ˌ?uo궼;~m ~y:&[=W0&Mw!z*K43v9H'՗Y r}`ٮ1! s$|§m P&hFDӋ K.5 ,"63()@|`NdbocѲeKaˍ6mj.6mZK''VBOBZT{>=fD~PQo>N"6pm[@H Ke&=(^DX!B ;FsG#kk,yc)XD"~:Hne?G[+-aZm Œk"2[?묳u oʻt'F\++|4vD9bBE @ga~zLb^{hND:ΐ[؍R%Ήh#DzOuhf8[Nh3D v ̱)"IR;+Ȑ W֐[.Bc2VHlBIeHٴiS!#%ޱi&>79ixi-ӷ++aI'$Y~9cDG^(7` !?l?;z̍b~h|Tb% ꄔB{]W5ٝbɚV&\Aݍ6 ,is"pƆ.l2g RV"yWg-%%xl:vh/񈏄`,wCv'{*07xfPcT)T+Gv ylhՑ~ tX$ /VbLBwNFr/]ņɦ)?V1_ԑ F2{.stnJP>z×A.MϼDx!sCo]D̚fhN8'|Ly"1HQ61yg>9o~K$8#81fqwmh!$ x({>^ax'(AhnDZʔ/}B軟֓7PTv:uEPQn!I7"gqxt[k݁0KsflTsx as.˭~Ye E)2><n^gic轶m!"QmM0 7mnc6' gpv)]~[ر+*`/κr;4E>b޳j`Bvbۺ,F=hYeaw}w)bHaI'()"AQFb[3$Ʃ(R3>NH c5h,~%JCH(d#D hf:l Aߍ6R/QV{[c M aԑJ]h(!0CVȣ cg*kA9n윎w'H~]~$&U(\)ZH+,:+\n68eyjE@0 8d?||'O, !CMvxGHWBHAsfm A4tB C 'N!! ܃*I4?v")7BPf-*guMٲ\qaxJ^a7+;eCOD.+%oNj`fvj]`}Pz\@;<t!fϞ-=`lYIPE3 BN>lĬI) ,DSEdcIMhQչܛ6+@?7%~_\܊&'HHYЀ"4!f'- my^8x\ UN4UmIDK7?n 6uԪD&Q师ѮHtEeH&$rϚ5nZN<Ęޗ,YbRuBKg q͚5A/\PV\)%, ?E f1-[4ˉSNgyFǤDH6VBF%l^pvymB#ctm 8ɴVɆ18D#@i~)جRFU\@m5k&lL,k{82!ew.^z _Uիg :TW?O[^E@P;wl&,bφ?{#eX̝͛7!Λ36*hL3Lj`),c+;,Phxjm3.=^ۜHp惤h)"lN;4ESeLw:cBӞ}!*6c(xAO>"/L~v#qbB84e%0Ajlْ5ժU% ma',_rAs7)QmfIL'f@ÿ9SOLySM,KnҤIٚ8&R^E@~M6l7^/L |SV229FAzu|#YWhFsEҶI M ЎJ7n-l9UNZn\x iY/??g:!d#ѣG:눥סCNmE@H+Vڵkz7o-ν \vuYG FۻmҦ&)[r_#hzg-*+&6'V*;cUҬ֌=%ﲬgCO+rt(@ 2;XRRbE*UO۷Z1#feKseٺ[ȸV3Ry-f#SNE V O ]8YmFVM=0̊ZQ {:% Z"()EO}!mb,s8 w/o-( jIbVAR CvۣmeiYk d/v9z9:)U<3Djݧ Fpg۶JK,1k6G ,))" @k֬i$jINhl7BT,OpbB&Mjo ݍ h9Wm,* WVEUyҧ4 Ml/Gд:5P7tSTٲRM{wS MB7duKEԛ74W++ZZD,--sW/&{ɃʯʘM>mPc4 umGMڲXW<`>P̴/ԑ{Āݪf)Z6Xp "'{1e $ }׌)@5Yxˇ*v~<1cA~z:u9,mh3*EgbFJu:6ʥgm{ť[IDqc`.R8p_Av\]6 `@EC4 QFلh@%| Y\PQDY.E;=۝3SS>]uNzsR,(IϞ#GO#].q/`z` r:-#^rxޤb2xUwo:'Ne ?Vú@ R>ES\ y_⛋4 :}%K(XԬ|\٧o.>OuCph޼yA@h9%gˁF X9Ndrz8?M֭zL-w7<ܲ;RHC)P0kUʟRK 'OZJe׉@Z*k/c_&^"h9!V"*(%Jf29=S6> i4\tҒs| HJ,&Gk(';.xAM؎-{=?]\-O,/`ْh!-Z蜔,vbg5'iҙriL)U\wb! h,6 ke;w6n#)QRqu]˻溟|lذ5RP0*V<۷/D-U+R ^ m?ZB1B|sKgJOT.pdO<`ah(͚5;QwuaqF((_^P:cDA_)54<Œ-vҜx\Ox   ͖-==eO?nݺ59)yt# V\9)ҍU-^ ?FWF3"0Î_m۶`^z2tP5uT $\@R`t4'%E h(*KAIǎSvSn/ٳ&]`A® ޽-DK'LU01{g[jy睲rJ5 {AFeddIhӠDThKŽqT[3O}5jYaP iuSqo4{9P]R7o.}  `MFLEa4IR(/X#B`*-DJYU@l:`1L8t3t3r7lP_T6 JG<0S<G Oe])i%ŝj$ ~ٲeҦMK|ˀlMf]ɾ/LGF'30/‹sg&;9f1e+SwٲeU<%+~~E#;P0pNEsX(Ř[XNF2R.맔M_v >\Zj%'O=z]wݥdر&xĉRZXˋIH*~V֭+~MR`88C_;Z$-*{RqoP* 70wOFH ;rYT)UZʦ杊}o6NwCqѣk.]H^]vgYb̚5K}a͜9SO.Æ yH҂Lu>C Fs=iwf=~GO>~B果%_R|XS+F+?j9|bq (a4ayR0둜*TPZx.E`^ƌ#7xcBȯ4w[6-3]r ITGFV!^KKT"%ZHDɬ;Ѭov⩧_-[T!TjUqbe6vfP,׈sk0NEZCS=l)b/.LU)[Ka茑m۶V0u0S&wT2(^b&MmV4y &>&QA|Fw yGnfO*Fȋ Lv E<'&!V}ioJÒC`EdM|Lz=BE"^($~lH}9#RJ^/7\OGaH!w<Ѡ,(X;`1^DL|Bm:W(hvnҤGΝeF7ˮ]ɵ1  { :,0l E>pBLhk+PdO>2d;wp)P1{FcիK׮]1f;2ewXbtMüM/H$3h[6<WRqo(hOŽJdŜz?PF:u873yF}o6̢P0/KE˭Vޓ]ֱXtȑ|@|Do^ZnZ}kwPH9ٖFs-4P[o %Ov,2BZ !$b`cN4dSuo(*PRo02r16|,(e 4L(;|@/G>A,z;0M"!ӼCɋxC0xO}[])>#?!j1_N?Ll٢ 'N'L1! @B[$Z TMսyNUKhBWAI8x_`P(p w8RU*u hL0"𥍩B=TC$@$XhB=@W͓ xP"@$@$@$@n"@MEYIHHH UȪ[nOpM֗,Yd)u?9##52 %Ν;]#OaV2㏮ad\#OyP2>`]#N6M4UD#dw}991VDg _Q".k ަsHHHH &0O$@$@$@$`#6G ]s5z1ٺu`Jx^pCp̰u'_uUje7 -3lœNTᅲ+q;Dlu<(v풆 *bBɨԩz 6(;J**rҷ~+(ŋ;~}/\0-P/@$@$@$@n%.x&   g_pQ M[P7Y6m$j̔eˆJoFk)SLIL'L0 2D#i ]ުFa9M,pVhӅXipf Wjժr1Aô9ʕ㖝pY0 3xaݰT^7y:.oI=4H)hmܸqRzuRJ_|Q }vN %#bJ('Oo1XK!QI`9Ɍt&qF8G#iu0e0uwg;ĊT[Nݷo_QH:H<}Jpϳ"Lo],Æ ѣp@_+֞" OÇ Fe_R#in`dvZmF-0R$Go',68G+I$m'{זpe}y=O*TPfEwﶝoNwGgv8&3PpHe| tҸqc KiYY…UqƂS&vJ;BТE%3~߫' 9lgd<3-I$bhe6].peg4ڍ*3n 9])~f<T^7ly̙# .F;W_s^񥩕m[$$I}& rWu0,\0s29ZYLѦ W5>\Yƃkn#ֿ`YpJ+m'&xvSClU1R-2dƍʓ`r 7$XЗVf8O>]]̰a7oʠ$Αd1s2GJXʗ/4iDϟ@-_\J-!;禛nSvoկpK!gw@2 Wܒo.]jG:wL")o[wӟ,fWSa2tkaWV-رF%.<9܀"OȂzC!E2"M^\Եkdj+ZMl bT!De6s$Ye6>G+stVp#@ƀ@4$ M!;e˖j% B|3-Xs,uw@2TÔ"-R=0EdAW.wLʓY0b?ϝ;+jB429Zh&qVf8G+I9tі[T0o\^ p|AH<әBw@2BÕIx*^-YHHH %YPCyS,   H{T@Ӿ  $HHHH PM*@$@$@$@$\T@˛w#  c?S*yky獑xPo/sG$@$@a @i(@ @4y  08pp))WgJ/m۶믿.k֬Q.bɒ%?~\u98CnV|S?^V^֫WO}Q)ׯJs)ZX%07HH <ʺu .X 1c7Nŭ]V+޹sԬYS|A/9m޼Y>#+ D- :tH)P8;t ˖-o]|:uJz;PIڵk'ӦMݺuk9sm&o,s} ,)~曥PBJ̓'4kL;>P o\nܸQnٽ{u=n@$lD\MLO>L|媫R#2޽{Uhɒ%ԭ[W{1֭a}饗7_hm۶`f5kQ:=<a&f a hhLC.!sLRD]8GvGg`Hϟ~I*Wx$@$Jx? )\FۧLLɤiɓ3k&x+oT]L'OT]똷Ӊ|R>T>qH̋FD1[Xx.ӗ!o{>s׮]S&OFЭ@$@$?t/^< ̴'.n3@$@$@$zT@S_HHHҊm@ӪY   H=*/J@$@$@$@iE hZ73K$@$@$@'@4e@ HHHH PMffIHHH  ( *iU, ԗ%    "@4%   2$@$@$@$VUq3$@$@$@$zR/B%8r䈜={67N$OPQdK,[nE֋'//zꅽ͛eǎҰaC)W\t8гgOu\~_~sI]?}[ p.ҙ3g~x|jJ&O,=z+cǎoFԩ#&M'JjՂ鈼yʈ#':uJupDD_2eʐ|-[LdW'NgkŊ#|ٚ?4'q1hCOk-}Ƌ`/^,(xCP(JP2:(GkVt"zvډ eŊ2k,1sL>} 6,z    H=+.\MJ۶mUF4##C4h*TS=ׯ/Ŝ7%`a&.E&vFa=23=ưx9=zԦŚה+&ZGZ1CFO?mE͛7ϦZ<v0 daB;vhIaΜ9IgN72=9%bjI!a K 0A`(ŋ $ 7)wcP t=+WF6l␦RJ>6j֬ Y`"SS&&L&눽ǽee4y{q.2 (gI^$N͠3֤I?˥tj\BhܸlܸQ0 ,nA ym>}Ȑ!Cdܹ0ҨQr ޽{*zҵkW?$@$@$@$@0JtJo-0t-Uu6e۷֭[bŊYA$@$@$@$`pxpi`{BptO$@$@$@0DHHHHIT@k H hHHHHIT@k H hHHHHIdq-x8rӗ5z4 z˜XΝ;Bba#0px7HHHH!`zyw-RgϞ5kĉ^{M/JR4h@"    0 (&_b뮻ΊQiU&   0+l@eAO>-ʿ/J    shԩҹsg)Z޺u^tRpa0`Sڵkg={1ڇ}޽{}/o@Ag0uT(JajY*WrK~72g;4y9MonPϗ #fC$)geIDX?^233Ueo0^}巿+V,d=*ǏP؁Bi #gN5YYYϧ)\Ne"5QT2IM, {sܹsaP |W.24po0tӦMLݱc:v옲 E .-ZXʧy&   H=P(5kִ GyDժUK:v({]ʺu{!   0m3fըQ#?'OJ%xn Gx4Zd4QlӦMYT:2 @(t3F͛t}LSQjUT@AhA$@$@$@iK P<0a/8Q` sHHHH Gq+޷o\RHDŽ^09iٲeeR@a     HHHH VR@ 8IHHHH GP}a :?XL{ݤp #@lMd.&L/=bL, {L,+ۃ7W;‰'<+ ųUVqƐr*!%1]%AoEMd&L/=bL, {C# ؙ`neI{#?:EJ޼y#'vQ9> (\du 3A!Zeׯl2x @pd"_Wz4Ƭ K޽{K۶mer 7(n]n 1G{N6o,O?tH B )$#IHHHB.I&Ifff%)9MHHHH\APLK…ʕ+;1S;NԴiӐvǎҰaC)W\4$   H=G!Cȫ67vc`}֮]ۺv(tر7&GkĉtPI    0# (&&ݾ}=ZlǺ:t ݻw{*b 5kl̙2}t6lXsxHHHH uQ@/25jñڵk\CE[oZ7qIOm& 4.Em    8O{nZjda㡀"@ }7ߖpZdI+Dr!k͓g}֊R۷7L`c\#IJ`=mRfbY%MDz .lcݺu>Jp|2 W_Rs/XGI;{={VXV(gy_Wr)R< Gп/!![7ވ)j/S[B ƿ6laTEG_^/wN j"k(W01,XGuĉB&v&ht‡,PQ'P|爚e$V9 G?~=zԶ9~׮]Ҿ}dCE~饗dʕM6뮻N7 qj& _ ,PޘA GZ0bak%͛7j 0@CU_֭QF6pګW/ZZzu5)0 @r 8 n>H*V(^z[k]}q믗W^yE;M=|V֭[ P+&   0#]vV={l,Rihy`V>Ý.{*0HHH!tRׯԊ"a#x(P}    GK.DMS{_~ <}    4%ڦM5PvNR(1PGZ/[leIHHH 82L ,&iHHHHH@pD7"L8߷o_A';3^V4iIHHHGPL?i$5 ~:t?P+DlRᣞ!q7L5Q`zcbYee4y{`*ƃ0rpIe&p8S(~N0aȑSOeƌV O׉- k"8L+^zĘX#.r.i|n'c %{5Ezn\q:KQN,4uTS 0iN(YkUB67Lun\#IJ`=ݢebY%M@$ L#oz͋9בr|fddĉJė # hVW_e˖YPh 4Ll$@$@$@$@#]r7+;`$|e^\ 8#=òvZjՒ_מ`!   c (n XHHHHH Gp7a< @dpgnO,3$@$@%`z/媫 ۺsNٳgUHHHH#` g͚%͛7W+B D^SvJR4h@4#HHHH *uڴi /H5.]Hݥt6z[lQUf yU@7ސE*jgΜQk%|>|X<(˗/WSA]veZ/ZH^z%+-!q7-ؙLdgrKN N d\yɾCyɱcǬ)5cPdF+Ǐ (W-[nU>WW^|󢋾gϞҮ];+w땏V+\;2!;=>M+^rb$7-g6+`]|R*Pd {ԨQJ~'yWܹsnڵk˔)Sl ^+Xtի(QBr LL{&2D%'./rGtbŊyz."E6D+o[JtdiF3bLK$@$@$@!45xW    X Pӓ \$@$@$@$@+1'   cG*W9I͂!q7-ؙLd?&L/91p=9$7JW?p)OI9ٵ97-@6o4/^XHHHH\F+k׮={/C s$9vXyGv2#IHHHROy@Ǎ'GkVt"zv&޾}XBf͚\^͜9SO.Æ K=]J@$@$@$@$DX222AJ *H"EdRF +#۶mSiaÆh"86,Y"'N>7'@L΄<pʼn7ʌB*T?JUzt 5,:+TRzדkp8uM9dFc)  XcɛI,x9-Hpj&G3Fs$$yx6oy|0V۱c~Iۖ >\֭+k֬QF)pB5ȨL2J)HޘiӦM8[^?` ۾bŊzgӳ؋Vճ{5 H6 l>}Z-ʕH= @ =蚆Nˡ{ҬYhstm`BrqHEҾ}{yq}*ӟ_DH $ɓ'˔)STCHL{˖-޽{ˇ~(UVM{/p40~?5n d&.JE$@$@$@$[hm&y> O>)]va@X=zռva/!вeK\Ԟ3+B (Cx /> VbHHH\N GGȑ#jD"\2@$7o, $H3|'駟T#-۶mSs;ұr"@B 7o_~G9r7ΫYerIS 2D>\^{|衇,[nj?1cƨy7n(]v={><\̚ȅ dڴi Fr}I.]« xq&WzСCS  (h8AyI(*!0;7ސEL9sFN<S9q⣄3%8A{Xjy睲rJG,=ys#8|xW ZAo\ ́V>.nҦM= 2gׯ4I"pA1c{3333 x„;vTv:t 0ho1SO= V昛\8<32x`)\pœK]J:?TREG< h۷oM6UԹs$OPyI    g#$@$@$@$@ @4PyI    g#$@$@$@$@ @4PyI H$zKL=xm H$*k @PMT^H &7oF$@$@$@$@OH$@$ӦMŋ+?wq`ɗ#x2w\ٱcTRE^۔T&LǹÇ_~Eƍ'|TVM \&!+ [@s  F!J*IFGI&ڵԬYSw.Ӷm[Yz:K޽e͚5rI)V7T͛q?DGIHl5 ( 7 ݻWF%˖-͛LV\Yxe߁_TJ&B-_\R)+\|ǒ7o^P`AYjjE}ᇥz /+pM$@jlP0 /Xv@Y馛tI 9RΙ3G;Y~#}+_oS>quV>[lZI@$@`%DH\Mvh̓'O|F2f K/-[m;UVUPA~g[wHHTT@M-E$ jՒG*Rg:tC?a ecǎ*-E ֭ % Vb  7R$@%_Zׯ/ܶmQ#ϝ;'|WҷoPIG$@j\P  /TKgϖ]v:uH?/3gT+VTA+iйsgp,YR  'N[o5) P $DIHHHlppHHHH &0O$@$@$@$`#@Ԇ;$@$@$@$@&@4фy}    *6!   H4*& P @ ?ivNGkIENDB`patchwork/man/figures/README-example-1.png0000644000176200001440000007002013766072436017742 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>+$΃Ԧ5lRфem,lAݝi&3i)>A['!j-P(G 3k~s ,[%,-:t} }-+*&¿ gPG݅ج8"eŲ]A b ;l õWϙ2_E,(ۈ#Zsێ<5)"E6N#ӽEkۃO0}*rUt.iei #]r >cU{t7+ԙg߃xuWB_-%=^ t0uvW9 %/VBW'_tMۓP\>@y0`D i|[` hh)Tj0B#ЪhU# ~yhu fp#1I/I"0! 'Sdd:J5ǖ"sdy#R7wAgdJ7kʕn^:}nWFVst$gj-tԝr_װ_7Z ~V54V }o[G=Nd>-UlaY5V}xg[?k&>srq߀].r_r_qsGjy4k iQܟBZ-<(d=dKO a/zv7]ǰod}sn?TF'|3Nn#I?"mzv~K=گsl<b|_|4>?pߋQrib 2* (Ѧh{28oIyes8';Z9h6g>xRx'b8ՃWOϫ[xn%|^z}%x c8eXIfMM*i_@IDATxEva ! g8s<1 xO s< "' Hi~~=vt~zWw3ݵ@@Ȑ@   @@@2*@QnV  @6  QЌr2@@P@@ f!   dT4ܬ @@m@@ fe  l   (7+C@ e@@Ȩ@~Fזŕ͙3'ڛ4ibuֵ\&jղMŋ.euԱVZnׯO\37on- "rhݺ^ږ-[Vr՝Y^=S;ZYFY l޼y.LQ~~,X`k׮ )>`Æ ) b!եaÆAd< v>m~yyyFiߔǚ5km70YfVvm[paUsaM6b [|yuWe[ ?[*EK_3~Y6n}_\y38Z@@ ֓@@*    In  Vl@@`@$7@@ @+b6  @z  @1@@ X`= @@   h  Ph@F@V4XOrC@@ 5ne^{ezh3  @>5kX׮]mզ

:X^^o#niiAȮŋYfe $@c۬74N:ZϞ=}K@@:\kժM6n]yq%  @u@K ֯_ Pj*o@@|P  hZL,  hP  hƏo-J2I  "Rz_|1t &Æ nݺZ  UO3=zs剣s͞=۷/@@#@{WK<^4h`cǎ-K@@lN6lzꕞ{@@* x &׮]V\iGyo)^" TGԧףG{Hz"?yAoq^" TAK6cƌRSy  G@$@@@bb!@@@$@@@bb!@@jEHjJi\3.ǽ{rfdjWo  PY@@J V  TG\T8|vȑ`ܹNq(2eD@*@ Gɓ]MtwiW\qEԌ*  @. p >zw_nKkub^5 9*@}w}н}$^#  LST -[,Aݠ[7&! Q bTL (X0SN9J¢  @@3gʚfOlw[^lqL@@j p|5vڙƂzg/  G@P%O@@)i  h  R4% 3@@ C<@@R a  @a'  @JД4@@C4 UD@H)@  aJ  )@S0@@ 0T@@ hJf  !@*y"  MI @@0@P%O@@)i  h  R4% 3@@ C<@@R a  @a'  @JД4@@C4 UD@H)@  aJ  )@S0@@ 0T@@ @~ϟϟoNk֬qmݺuI1cزeJM}ȑ#M}?;Ȗ@dŋUW]eq/޽{ԩSݼaÆyVO??3n^QQQsի;;x"a>g .L{;Wy/yydY ?O^AH-bРA6`e]W^vYg١j/u.9c'NݻJ޶W޲՝hvR=o6 oO租~r<>;;tg}fW}dۊ0]o[ #o婶zSJacaʪ|; ;B\zۅvouRP=C6dȐD]͛g 6,M6uΝkM4I,ǟ|A{ӦLR"/oo˖-oC{#~H%an1/KZr,e"5j(d cřZLzeb5GQFVTJts6.]XjΜ9V?`+LJ쳏;F z]d+'2}VyW+ s[kAmkQ'[nŮ2v׹Szܮj;s8/lǢEJ ~h]/"t%řWhhXiàץ/KV)[qN3Б? Б+VW;yGeOY aQe>!4Eڇ__SRmĈY$U?Xz>L^yD N}Eʣ~;} @/_^׳*U^YvmU>3ʷqƁW+ k?W=ŒʬV?t@#ȤVAfAʷAZg5.RWniCx'T;b]v֪U5]GIK:Z*ї)̤ej=P®Su꣱+ʪ ZGh4޷tSA:S6'Qe}3i=2 ;.iԨQ6c ;]1#޺uk7^+mۺ#UNoYr-o]>F[y-+_0sYTf]!|U^%-U?;6QrבӋpW҅F0c5]z׳gOwT@Wb)RO?@tqPlv 'īlC/8poޝy{m̙.X]3 J @VTRݚGf L Qo=@hU)pgD`  e>}\ JOHL  Иs:uʔ8//V\Yfz&&bŊ(  @@3*׿NZxu?)r=2 %! @ Y{{Vvm_5k̚7onƍ D&7|ntWnҤֲeH! @gIa (1c?ލҥ5n8U/W]|O-Z7  @@^#:N/c8" @!F=KiرV^=;#i񨗙! @F-?Sܸ;jժx>ƌم^h'Ov2_" I@dcHk~ ӪBWuQ.TM?^p@[N#/nٽ::ٿ4>"SLqGW9u䕄 Ggo5nW*#-곕K;%套Mg}ީ{H6|O#k]UY>>^AսO5fUmfa%+̔m.yۜȐASۜNA,msaoo֛i2MwSжN9e=WaWwʬj[z;Ujà:uwy6dܹsz R*,m9b$],oE\uZyˤp%fhmڴT?JPnST2iЩ{=s}Uk9{>[(cuJU)cPi=DW^m˖-KU[L;WZU TF܏Le>:f>ݡ.sV0{yGk_@QuRXXV?5k ck?}2imP괭wkz T 6touo)xׇ֕~KG&wРAon?o={ ,2B@*1G@+|X;1cƸ#I_a . dC4)yW@@\|..uC@"(@FH  @. rR7@@ l h..uC@"(@FH  @. rR7@@ l h..uC@"(@FH  @. rR7@@ l h..uC@"(@FH  @. rR7@@ l h..uC@"(@FH  @. rR7@@ l h..uC@"(@FH  @. r ,I&YfͬSN  a gcu_||nՋ/ݻ+bjFqX' p~W;JO?A٥^Zb:o@tڍ7ޘ9g}f9[?*@XaF$7nl˖-KHСC @"@ ̙3^x~,'lr^T 0)Lݰaä "P: 5Q#9|vmrJ[~m^^;Uz .f+B\C<2d(,D Bj0RN5jr!/<AFnjPWu6}3)@SΌۘ1crB@b-X7G@'@6  @@c|@hڌ#  uQx@@ ~kKvZիWD@ [8K֣Gӟd;vѣGg$@()@Z#'͛7vuWw˗:۾˜@@x ƻXn <8LD@2)Tc}+ϟo$w͚56n8?~)"O'~V@<tVNq#G4/k@ [Y@w;餓ᄈ_~ٮڄNԩSaÆyVO?=^gq󊊊/>CL%KguVLC vWڬYo߾g{{; 93ݰKwz/ miPQF1c'xGa3f̰۠Al.X^Lԡj/u.Ws9&NhݻwB JɒNq֥Kdkݼ馛l-p}ӧ~t:j׮m/=G|nݺ)B ;3ZjY֯_oճ[nԩnQZNUJ̊;TBY@?D]Ah֭)dԩߦMkР͞=~G;ܹMrj=j'Y7nx seI5kVzReWPPx36ߗJ{s ;ڢ8U駟\r*Q};;t￿yhs=[oM{˄1x~6~_Y/8Y 6tsE¢/KE?&MTm:(Y@xVA hnvX-״iS[p͝;ך4i}ԽVO:רQ$Oԙj'+oTtKWH2dȐc]~Mڼ/0mB_xUHi]a&ґLlsh#Wh 3izE_ղNPK.uCqMwPm-yK_蕣&նξ,3,[Yǰsm)Nel\}|3 5=]}ztZGj{F%2XKm۶vء:G _r^ȘN럗YJڹlٲT2]QZv!nQ|䡇 nPê]/˰fg믏~-ו6:\2kX膽t]\k)]xOMwS~js7釴tmX'sq*-{!,R2te @~W&lb{キ^WXQh~kZj厄zdt}M[aƌczOBx Kt„ ^{a7S}Z?;ed[ 觟~jOW%Wv]̜9|7k׮B=@ Y?nv;3) 1t _~n~p Ԁ.dmr  s>J:aK;H-\P(;LC" TcƎilM/WnxWj>1)X$O kzP _XzvavJy\> _ JnrR @:MށNydCÍX;D@q5ɩ0  ]v@@ ָ&  @v@@@'@Z㚜 #  ͮ?kG@j@`-**߾ wΝ;_kҤIC @i=Pc_wzQz1#5B TO8W_u͏oFLÇ6lS#0$ L૯>ڦOnm͛7.\hzt#6}i @ r 'p?slԩ6c {6qR/@"=}Yfo}'6a4hPEg> sFtڽVZi7;þ;k? +Ф;6dڵkͷ~;\X-@ۻ_itT-#.-{) 6MN:[ԦMғy@ c@9O:ȶb 7s16n8Yn]s=s5*Ea'OmaVa4wذafo\;&=S-4 \vYg'H}wlȐ!v]w٘1c:Bʘy/@ g @~7SgyMjݺ58!ݻKVXXhk׮}yC$JZWׯ~+b{GE/"{뭷\ T:* 5T@Ӓ%Kow ?x-@$} B@P@OKW>֧Oӽ7{キ*W|֢E 7I:ԛƿ/wt @B@gČR/K[P]lY8(W'!@ԩcӦMsoW[ni}^oj}O?-yu|ATGg}A*޽/Y: U*  9rᆭHtQGe:[gǏ7˔d8 @ @u;UmSU +2G*WD:304f3Uj޼͝;EYVԶ׷UV%My&5X@c@u~kL5\cziHK ㎋n+>Uf= FZ`!O?W lÆ nݺСCZ˱!HS%A:*_K.5혫WzV^*pg 7`5TAN|)׫ !N:{U◽n*:@B 4vZw ?^{{bnf$?ٳgTe])JGN}@ @nä:1#FpN/I]Bʜ6<oݗ@RhNB$UKA9szn?ܽח  G 4ZGǎ랊5Li?T@ 95P[n馛oÄѬvБtV[me/b-ܒXFu*舚Jϙ3ݕBӾ-Ssg* O@js=򡣞ݳ>k'p{ @:31x;{p4@4EGݺuFM4*״-"@]tt]vu/bk]0HBj@ПOݧLb4q3׿4 .P?wqG7D3zD'LŹN;% U@z)0`Mwnr ,%S-t@ jrH.Q'@\W^yvI z'鱑sεwy]1@&PM6!{Gc.,6X=}\rE~~K/5.>m) ~gO?:t==2Wσs=Cj@PүM4nѢ }6lp_@TGEO?)Oޥ%K[o]z?nܸ2ә@ ݗɓ~WvM[uG1PJ.|"VRzv^y啉{*(1bvmv衇:CrO>_S: of2~2W ^f̘2vc7h#dMlΜ9n|gm]tQ噀@ Ni>#͗/^l;w.]p=׷O?4CA?F #[n}'7|cM4wva Q$*/w= fSw. gvGum۶vꩧfX ԯ_k/3Pu@ b@Tjժe'N~gرQ)@@F ʟp _Ij @ >fu  Y ">F@j@9+5.0Y"]$v }=Zn^NPjSmZǰe'Li?AvY3}zzо~<^ty a9w#m9JeSJw;ԭB Ձg8P}uxu W;eb=zYdye>Xz2>,pt(a9ha7t=ªW퐉<ݟp1hARV`#DaGL7n~7kQAT%R;:vzd6R}֮]7!=^U35j(#AnuLBÂ&m(Sj[S _,'UƱeR3\g~ M6M{Q)Hg 1c@ePV@@ @s  '8eE@r@4*  q SkQV@@ @s  '8eE@r@4*  q SkQV@@ @s  '8eE@r@4*  q SkQV@@ @s  '8eE@r@4*  q SkQV@@ @s  '8C`ڴi6|pSwq֢ExR" @F@3\sVGY^,??j׮m߶z뚃@M@@\N,_mڵ{v+" @ nff5o޼z̙CZF  \К׼Yfnݺ2ZjժUf:@@f v-[믿D޺^y 5WjnۇRN;]p4x`w9ck("S@h<-ҥѣ @H&)d*LC@M44Z2F@H&@Li   FK  @0 @@ 4h@@ h2! &@-# $ M4@@@C%c@@dT  hhd  L4 @@B @@ &Sa  @h@׭[g&LڊJTv;?Pb5klܸq6~xI @ ,Z{=3gN*o9rT}^#z:w\;] oI'd .KݻM:ծ*6lj*;m̘13ϸyW !1x좋.n&4hPFsy睮<3_~qRȲ@З_~=Pˬo߾V[ٻX0.B{lvZ{[nnzV\i'N2%G(,,~nf;vGBuDtꫯN8}YWT}g#7@Uh0xu {=>} ?S5jԨp?敶9o_ &璗gݾO^ږ/_n L'?zeT?8|r:$ %?ꨣBT0뻺h{ z6SiW.EX}UXeVyDu%6SEuSP>zht|6o1acj7 AA*oúRUa>2C}x:W?}vm1z_w9uIG7VX~{WGEţLGwnK{q닳 ~o~P`XxqPY&G;&ԼysS֭џe˖*m_j'9iB ;eѫmkLIk:a֩5.^]nT`Z;1bSybz+ޏo;ƻT5(_mAWE k?o֬ n}t :cBg *JaW?jW}q:GJ˫_Nc^z%}-[tЮ]DpƯ/ +~Wξ A^m;sńz @[T?l%jօF:2_xԳgOӯwQK݊iv>_@ gnFvmk)q{wfΜp."]vuS9BE@ Y?+7w%y1_lpȻi-~{OMmc|YwH}uK<O>vYgY-٣O<->_@ Y@@u%8/NEiL~= 5j)U;0;XE+Rӛ_@ `y.:Lu׆T}gI@ >48   @E 1@@ P@9 @@"Њ  hd  PhEBG@T4PN2C@H"!# *@('! T$@Z@@ @@* H   If   V$|@@@@$3@@@+b>  @r  @E 1@@ P@9 @@"Њ  @~Y;w?5jdp@>S3guvyJ}@@ ~kȕxĉv[AA]֯_o?կ_²^r%[oYڵmҥWX@+)]$JGmk֬qիȮ 7tP{饗l?ncƌ,  oE:}ެYe),,ѣGo]fr-A& .?xd(@4ib KғʼoѢ^N:ִi22@ fΜi={VZ%[i  e,7N@Lإ#8" "q+mIDAT)@${ >UJ)SkC@p4:mAI!NN뮻3E2/`=Y.LvGt>[2wӧŪ42eϷk6l*EO4zmB PvN^u^o!EO{-ǦtժU 3f 4 F(Ct >ّky - /vql>U0,W$ H!$* 螢{NAiL>A @"#4-bGB@h p4C@@ ͹&B  @@>@9МkR* D[4C@@1W7o Zu$q m^ѯoftmvֱcG{_h_ d/dJzZ @jP;:n(W_m[l~%Gn-Z (b%f@ :@0gw*+ gΜ% @κS':{m&x㍓ĜE@ @'MdW^ye5͖[ns >cԬ(Y՘Ic2V\Vvsyw.GlV, @N p4'5w}mŊ%* ?~ӿӅD4ydӠtư{ꫯ+1O>ddM8!d@@ tE{#G e_Yhٲ5gw)~?3wLo߾.4G}1N&2$@h xyfT3f̰>ck$5+JW`miӦDYSOvu{_ՍԩS&º@IМlWJݷfTD-46;_z@@r\T9/'tRZ,@$@Z%6>7xcO%N;N\vn +)tXhP'Q|ڵKzkBE@X4`P=   p >xSrD@(Gf! /)M@@VZe˗/$f"rO4ڔ!@HըF | >  ifZ! V[mez2\MN֭)Sd;hN6+B;vq\J0w\ky>MNG](  9۴T @h4ۅR! 9+МmZ*& &/b[lu@h"#p%[oer͚5뮻-\ ڴics5i$#  08ˌa쥗^*ʶv[v>֭͟?֮]ʻv'|bniz@ ƭ(oZcƌI܊+G;/L|~3Uڰa BZ{駣RLʁ^@}c_V`֬Y͢R' Ee˖.`SOz7'E|֩S'*:J5nN;47<*дiS;v]veU">g>fEmȐ!yyy$(ԩ(ZAAu޽4 PS7on]w-X~^SMwk^ ꇗ/_i/ e/"0?Ƃ 6tAh(W:QF,20I5kf~v#t!M7TfY& TM ??}NP}&ȴh"t˒+oDtN,^4ioޝfQ8$g}?79VZq(:eD@\rywl^b]uʝQlʄ Pߋ:   \P @@ @s}  95 9{r  3\3MIE7*{W\Vr I  P}VߐrL@7:t)?:֯_c5: dG4;5l%J8o>C7^}v 'س>Iw?k@ Yxv9g} Lg͚e:urڴic:"'Xs6yd7_Kzoe˖ץ_hl.4Cz\LGzNagz2yvas߰ms6lrSN֕_-XzDq&>|ƔСC:6jڶm>m"}7m3 z[L^ L6Vj/A +tːjp#TkM/((#87/uņ Û',\Ν[Ԩ؛H*2iݺxWX-Z}"LRʔ]ӬY4O[e( i\Ǝ[s1ӹ*H-zJ]עE.0aGen޼3 3fҗe ;eO,YEڇxG>nݺaZKOJӿ!C$01GUnۜMm_dR~K_0la%[gԧf:v:]PwelKө_eHkk[VTсTWX:D/(ЗuvUV%5}6+Qώ;yIG R%u4:t^J {=z_)n*֓ ;}n#}g..J޴?G}AAmfRz#A|Mri/vm7[z%fT ?mk0\U^AY*o0lxe$mYH*}OW~毀9}$Y)~iB_-#,޳gO1b{\~-VL;T2Pۺ;Tmu|s{᭴~w6sLoX׮]T}g  Ay睗~~xSӏ?xm3EBFnr-:,)';[;9!T[:TrIcautn7= /GDT=ϟ;0;P%-Rӛ_[l шN-IdO>uqE/;2F /)sp|+D [N2F hV]dn@3@:@{ZFIO9#! pړ/";;i$wv!|@ w@s- 2{GdCA@%)hA@r^4盘 "  V{P@@ @s   -hA@r^4盘 "  V{P@@ @s`M:u8p`T„ v}(gEE@(kbS_m} 6:N6>S{c]n~axم^h[c]/ TК;'N=D ^ھk9rp_~|z_~թS=_[o&~-'n-Z,#5EE"˗']d…I5_#FX˖-_~ָq*o ʕ+y[&Nx rM@ۼ?hFW }Rѣ4ziҥֹsgm>l{w\tgO>6t*UVVvj2M'!:tW_}֮]V6mjK,Ik,t|[leʬAKiKjr- /XAA)H+,,t"m6Q9|ĺ~K.C&W!0e1L6,@Zhv7oʘhP78`XeNw,]vЗٳ^2c=gϞ1T:ڤInbb}Μ9*=z 4Felp '$@x Ƴ(5)ttK9?;vtG]Ϸm'U鵎e˖* u1ּylm7<  @H%VE!ЩS'P/i(.xꩧIYc/غwn=\VJ@'PTફ]ژ1cJ(̞~i7$W^i;)`&!d^4{M V:_I @0m5k֬4 hHvƥ6l0e`DE@VtLK8* 04<[rF\wu#^kVN&@ gu Y}w%nd^{w}ْ6@OS@ gt{?  7иE@b.@  @@b@h# q [Q^@@ 1o@ M4n-Fy@@ Ƽ)>  7иE@b.@  @@b@h# qUTV誔w…)?6c [lN) jF:ulݺuAe4˗o;5h 2AM[]6R7X-lM7ML3\6Ad2ٳgm]vILP32FVζn;kܸqPEOO&!xְaCmݒ#&3Zl>VV-~~@V^m~m֤I@VyոaÆ@m2 k?6mҾt _~iڵkhږW\i&M5jhvUs+Z,2#͍7.2e >+s܊ /褓NLy)Hq_th$w4x‹Z|cw>  P*@@ 8UI{ܹm9Qz깱x;SD4K.ֺu뜨O-2'꣱\[o뮡;X۶mOmƙZeV׳f}UVY-G+X`msGqH12$o[w{Snۨ_~]k|]Tc.B*C@VSz  @ٺU_m{g:2C\NEyxwm}1vAIuԭq{}]|U͜9T^)5kg}fnepqHҩS'W~_~_5Q2i8$6Dif͚%KҢ[%͛7Ͼ W:$[hN9`qM-r۴iA#U۔.{TQܶdjߍb[iV[Ei[LY-UmFodSN?s=tiӦMW^oN9DZ|{4h2eoTse@@-S۷ool^{+VNLsQ38ÕS_J>va.裏ܽFWԨ+mOjzc7&H%\RSuo7|mk[|{WnjN;͖,Y؇qLiSϛ~%Q#U۔Rj9ŋwx)}|`7p|%~{eҶnY-UmZ7qu;O>EW^ye?sG]ݟs.%GE񑵢kG+E-|8(t'(ѣ.R~Ȑ!E;fb?N_WxŝeoEG⧟~*袋EY6JzjW_}^EŁvQ>)ҽ(}'E?E{$9"RC=!e:JwyQܶ]r'gyZySL K׽ʶ¤S(m*s:QUݖkP=q믷N8wS#)x= %IO -7 K瞳ܺ'{^&jwa{ґ'VFs;2[uґmzB3ϸJxD{ョ:b,:J_z2wWG $.=)I9$!*>}Hw`xMGfqMzϿoh)dOJQ^!Jw_^ڶUt4E.ǯ]pEi_}Te򾓣-UmzܦnOT:͙3ǝn ,FntG$N b„ VLO=ώk|jO?mG\Yu*ȽnU->4.#4J?#. 5rH+>澴4Z(hN\o(]to3P% X,=W{V 4E?":蠤cݣw$k?(m[ꫯ`t9:Jc?KQږ)Kt-؋Jo::?9^ TzٸX6]#<?a?O=vW@6zݑp#9l0lrOAzzpwpnRih~Ш4LGuvt$WI?t4xH7ΈlP#Y( ST-riܪ_VuT0b{ᇽm9DX~GUu[qG@SmٮH^B4UQvZw57@GtJT`k>]@unvy#WGr_z%+~>;]HonT])x촻3b pzi_љ%k7]0t"Ihj)J}Gym/wTzmxy}_~tl쎖G5j~ӁYkgu.Qm˺NEQږLƽE~j?Gh#, 4.YuQQ;R6;/sT-:q;;( uVJQݖSWBҶ }Gn56U#'K tMWJү7/8MhR~SYmr눙7>_vߜ?/ʯ}RP&(Q?e>8Jr:eڶwTeePOk@@:1+@@ 5x  hĬ@@/@5  @@@_   N @@7F qy㏻'&îZ{Sڶmkgy{E]d>{_WT=Y;M6Ď88sQvgzԃ>vzʙ~'lʔ)!{챇{[ݺumܸqZǎMO:䓭W^G@ M <@=\Z=蠃#!vQGjzzJ=NsfBz\tz_iG@8 Tԟ=P7zĉݏu=Vv.\hrm}uNjs]IhWI("!#ŝ]Q^TD͜9M;w{7y募3Mr-&O4ͿxAlv+:KTE?|7mĈEgqFQ2{.ٳ{?x`?%!PS̈@.]E/pmvM7Mkժ[_zsi֭[_|a첋M69|b-yA`ѢEgk֬w,CQO}']D'Ap*NN/UBŊQWI.ࠃ8H)m?7~3%MBr>W.'FSR!> Ӓ&-//ޔ><<]]]Dz|OOϧ۬ PO Y_>88nrt=YJVM}JLZ&''Z uFۛ}~~;:TyՑ#S=o=,Ir9 _ P#@Zf|z_ZZR‚)1sssT#hԟighh4 S}{wwfggތj1ӳ ЪcNgr<m"p||lwwwZi333筫gwEӬ[!_ki bh?ܴ;??rPޤjr3;==5 ߳ Ъo@[X\\& ?^(н=h666z{{΁@g;;;^~㶽3%執U3xxhB4ς@+9RjE]PyA>~Ƨ{ucccTՄ#DY@"lo$kD(Yˋׁ=m PQjjR[ևwﶲR{( @TY/Ty2/@ h曈_Sgg>.//_|~G"@>$<4!wLf6q ?dDwS$59# a@@H@krF@   @t$59# aH@su@@ :蚜@@$a:   htMN  @Xа\@N4&'`@@ hX D'@]0  V ^{9s.#M*{A;V?SG#CLP(HqKnGbU#<fNxB83o hآp)Uz)pM/b-mR9>=ߣ*OdgKaf?^&# } ~zdGB5Xdirt"ⓢ'dfXSW+9dCՓmu@|mж.z=_|ـ˒߁Mh}0bf Ur'z Qhygs!._u{)= ? Bg%i pHYs   IDATxyeU-wyՒWe풪]Ŗdl˲ecc0`#i:{g`&h: `YllYem͒j{UrDcTFdd/w~gs`oH|k:Ifٲ|VU|;nq—<6r[緊Us?}?: ˾DZwu|į幮b|[{_۶lk~_]*V|t͡ Bwp &+C|W7%~>PE(\eOu{ճW|o;|zV7ȇwkCW4_y?l/?Ck_Q_QZ]*P ?݃5vG|n~~oe+,Ϝ"+`^شKǮÇ'sn{ťyϝwL=z/E Z*ԇ?x W:ѣ<&C_-< [,͌hPP ƼLx}塿~{?R{H~rZWǪ~'~𾁑_v!~eP;ț7Y:ɷˍe>HsN~޳?.b:nzq9vg&?uۮ>վX׾z׾GϿcy7__ɟbd(A6`~8㧎ѱ|a.PNEl,y:~౧f^?Y?rtۉӧ֛oÏ|_[z®1=s-(γme;{U1,5h.iqqGg, BPYݻ!| ]c;%M;|˜sh6gluGxً}kVX]) ?F^xJ=?,)$_|Ye̺Xw4IWk'_Xq lm"{B+{a~ag_xӘM{{oo7}tbݢU2?Uj8p}Ùc` Ś pݰa l*AH(2RtU"%lL5'<=/S8x]kYN{76k)@ ̇{|'/m}cU_ekW#fg7]7u*@l`Ii5qjXW*%!nBs wݐTALjٱnB[x@HZ︍뮺6.{ϑ=w]s3k^?VU[M?_`/7 "7A`ЪBXŐ%ZTzJTg8 T ݃0 OSI#\w?s_΋o+` \QDHB!BBxRqtn t:ٹkdx#N/,~f=S'|7 VU #)z,MMvQ;x3+.MR*UjWJ{q\ fs FBv13*mK8LKP! Kq/>8x>>{(g fwzt䙷[?;6=255wb>7V7TW㣢­j=.AL=uA4Q4qZ w mT!N ˴l hCzh3>K广#>؆Al⦁+󴝧t3b[8:TH#TG_X6 -$lFB@ָkxq8O>VǶoxێ?wL<7>VV6Ns { \ {upewN34:( ~l\ mgtm.@ހJfgcl?n ֎fz=$s=;R |]J!G592!س?yzM +?=sӺĬX荊U'dǾ/ vw1Fr9=0" A xezO| 2Vm4 Z+<+29D֠Gu.<ƚfoRoez֍or5QN`mwjZE<0$IJ\yH EH5y #=6Bڗ#f[Om0=3ZOw=r~d]ԸA҅Id:8i1}-( qiJ(!~ : X 4j ޲63=C ^ g7 qמaʉN/̓w,<ERzbpdEMN l6+P<ITu8ÖxT O'hP9 vF%R-Q/U;9癟_޾\̞][mղ]RuϾz!>na á$2<_ޒBl ɘjw!d -h.̍#g=:̻`A-Ӟ7h.)Z9676!H"4A9(hmP2bRZvOt50I<͎[/[Q]1yJVE"Oa+u׬a('"5$ZH!09w,-qri[9ʗ4'xə/035iH!R i-Ț&y'CIɺu\o;NfS{-7m&&W +V{#/?;RRR1BaqH"\9zBB Oa-XX 3[0eMsݥuyI3uL+'og\ e$]gݴu6% 0"C*Ȋk -@)M=JH(H&y xj,w)qsygΜc/Rt %$!I*h` Cբ XE۶n`Ffh6ڳ_-.۾}g&WoaU_T>r˚$~j"H$uޗ1!!H+)yn(TTLNQJ!$oVOMӦ4fݬMq+d&c1H)Bi4FGY3](BXLam(X{-B* "*-YYN5z kc|4_~0Űy(8F)Pt:;* : ( 06nub~}[b;VG话$;ǟw_N3B+9Fx-H|)) g-TtJc,+ lj?~n Gd SNJ,k;hc Zi8&U?+%N*t" &E'o7. zM%{Hi2ye~jQ^b 8 U;r,4=hR"ETdDqJ޽}\пmE% H/YA)qc@Io $q@uX^@}n 3i8M(DqԊBj$%t3?"|1{N7&x-vpûGIk7vy~ XuΓg98%Eg"0Rc,[dZUCK`/Z<ng;6֑G4eo LTG&2]cTCZ"DEro>0C KJ Xi ɻbwCnFj%A ғDfyW1 iLTB.kv!UVcZK,vznB"ԥ CjGEk$&fyC%Eeh~'$9H#$SƵdw5eoh>ur?c4:ާnq7߰7ՏΗ'(5/f%<$2 lZ+24(;IOÆ6p9JQ>#R2%CyuND)i4Lc<ο~iBHXGHBEVig-K,.׹0f(cMqoX(CJAQQ:&F&iCHv(|(:mVK3y0D(u0$%<›Pd ׏r貫81C])j5a-ZK4O1I~T`+e !=i7kZ\fqU3LyϻzVK߃i0|Smm_M?}X%o^~|C\#dΠQ9'{Ґ!J7۷sG?f:rD¢ogEd!KM.CQhhXOsDZ!Z-,ΑY,y֡*h63S=g-pDe"Db)L3v\{ͭTuT6ϑ6"!Ax#CIIݶ<{j%<2+34xn9j=t*' YV[)ISL7d2y|`'kȡ??We|cF6_q{yw7I#J/L4Lj&1qgHp?Q"mp G O@x @϶qU=[$4yhKtLrιr{\ahrpX[ZYg2?ߞp T5VHy6G I,(!0Πu:dcǦHK—V !,T\>6סq8vHA$}C+79 *}Qlшw|6d{]~ϠL-2^J;9}w>s픽_:_{Կr6ޖ(D{M\בB8XȽEzsIZ.Wrypl0YC*uVS.yǧ&IRй…) 4;(6 )'PBjT!Q 3]OF IDAT -,JJՔզX_`nj3sO.jw^a'H)IH,IRC8sk;vuvEVt鄿|ٱRxH}…ΆD˲CE褂vpmw2=;@A@-5yDZQq`]  _2G$wow }/zbn|O og"Ϲ'ˏo%*lz$zɄ yGŔDcR-'#yFz5(΢$1P9G!}"AEx Me4l<StHyPC_l798s%2 fhϟ>#)W;Kf 9{)C-8uN ;Үjū?8jq[b XO#X)[2X [ ;DTeH2w7W~c\Cdps/oM,<8[ (o 8?_@DqjIaK7)㵨$XmQ8@"P?dZց}M(ws;$ʉ%S,rlCJKH\Z* )B % zXhL[&(-|4<"g&B *"$^X/x V2OO_5h7XY^?Bw"\c%|h҇DD1և*&<e "$.` Z#mNM3;?GmB2/KHX{bʕlatXk. IKsd{#\O^XskߙRpɖ uqZ}dZZahPxtؠE )-ص8"2,M]0xKܛ M ͹ R6c ٮer4 Bu@A-rBRd&:f3[O13>IX 9j޽QB%xg{vAQdlK:hT "4ICMe˴+p$aqRRxJ Ph Z)VHv^ǎ=r( -QLrDR뗀XGIhJd-UnBrn)oc{D3^e[dltc/V`ߦyv:\{k?~sњqҒ5FX38BYz+<*|*FGv_|vlFG٠!A-FxÈ#@DeqBhSiW@{6E33'X_6<;ÓsN?|#Ո^FE ^%09 Dq  HJ6P.^ \k%Bn6eDu5뮢JLOh41@#" 3FKnʪ0"Rc\G8 3';o})&i?&z#pʫix 6ƽo..(q[pɎ DI| IIGR U=è},Hr˚$&H !, QNƶoʟQvaa R@ "xEQBUv'BybBnyEJ 'ѧ^<2EkaB uTgqa"InG)Ǩ$JjgZ9} n s-dE2!JGerP{ّ e۳M O( *J__XOp˓6R_YF"t!KTEl4Aĉ K!W$Cu3$}6/u9N)=^$u#=#rB ʞMxX?ȷy |T{ysY_54F(BMH88Wt8ufǾ<6C MO<; B iMHygf!`GD@‹ХÕaLrc+9_:9ů\෧;L/O-q1k-]aa6lFLO)H r4"r;;I>EI舂>O7Ŕo_ܬ7薾Jw%{6_;3s^~L]9o+dYoKRIbT@j *LZJb1M6X>5Gm1u  ]ɩ[>pY:,*|[6g oٴzbX]Q}(5V Qt2B`CU: ~Hiy#~ܣĶJMgPU)(Ȃ {TZx J'(E B.`βk~n6;mGU0BJ0l͚<6 E RcSdm 5o/4eӠ%-ԗZ824IBbŖ4PkaQr.H%mBao}a#D&CPʚly?*I/ 4I䳛L-\ ]>Y%Q66ڬ5d }#yM|N,.[xM,5k]7=. K<`Ÿ?M@#ۿp]w~W^Fヒ=O8N9_x{&jHR-X:v;CkM/;*%zHRG"yeu{oFc R))@ HQ&[X%ʊ(RN\I*'V)#%:%QIC7 |{珵I)-@{{瞳o}NVF C|18~:9He+woSR&lM'#1IJݽ9`%hhU``͇2E=!TH!Q7J9Mr6hVguo7`7:$ O2J1()%joLf{C2ń& 6f-[DFvy{[rZl_DE3kerJo+N!uQ _nAd4bqc-I3V=Sj,YF o8`K6>8\ӫhmΟO?`#WoG[cxxkl| ?EV1VE*lFdJlRJr<+AqƓv<׻n~s~DhjC5bMؽunKnΦ~M-&!WuZLpޕ]b5AJv`X]P{[Nʾ^r(䝅1[}vK1SȠQ-عnV2sSz8hpD0ȗ&kK 1yṟrt ?G̙{?xyȣ-D6l7m6T坤qE!k",A.!N@g0J.^<5_ 1t %fƨQs4ҁQhMC#_ (z^p)Bp&HI?#C ֨{4z[ۦT؍_g#8K+Z`ED`:08e@2z⿄nkC3VvN^ϛx|,O't4SϔFѱ]bCpPp,_+:bI7cZ zgя|><=??ajB/_~7 ?7Rsv%= q|vK3ܥjBi|M5Ʉ#V8~(ۑ;6&#ZM/kt+@#ے5J぀"r"Zee1wM JT8fwM~Fz "K|Uʍ 0)Y5(c %Β&u҃:;Y. \$3qjгz(0mj (=/JGmM2T1tPE{KBsHm%qSv#{,#ޘLeq6[|^Bo,1ݦ\&@,ڜF3~9pϘƊiz|\ ?G }&5*+y/Og?{??^2޻zIsG󱤭=1`2dnTng-n ݢNtpրx̰ 9~n~pFI*ԁl _ ='rm{W`kij"FnO\O148j hMj!PTLKZ ZGP8+Z8FwTbsIC~)h֎D?#ߚjpy%wN}^gG>true˿GåxMç"|G;+5pC~Kzx-~9iNC3(&akOg^ Fl0._+Q0ˡGB<_ b-CdKeQ(&zZ.H{> IDATxsߦoS^9KD^b2@ 4 %a1PcMBDY]nLSDw'uqԿʇvz] n5)]}C|8 ʱ sq7NGAj}a.ಅMiȖP&FkN2"Z,3L`'2B'o`pMNGdUdǮsuX0=SbERxgrF눾_~>ɇxͳƹ¥KKO>?}Nm??#;O_[1Q{i$bœ0TJaQƔBHQz_ 16|32꼭MsFXaNEh(bD#bzc6O&8=!`Cƛ0ݎDh*=yWB<ĢI WD֌(uRWSpv.t֎{wzʥ%m=DRR0hF)5^sx?z((+}z3>={k?ٛ'_3- ?x;}-? -ɝ;4W$}ךjˍq>ױ;!WU eέ]rSKߎ0[o%lJįf"JZkvVBVj*޻a:$/Qq(NE}F;؋oސXװ*Df j9Zk;d8:N8HAwI̖K֘=*GcLJagL Ddp eih({T)N/ŹsÉԏG9SϞf6_𫧳ynl\|ݧNzeO7s/8|:CVA߻"noSi<\\PLg5KfBS7k"Qu[7Vq.680hDIY$  #"J[8b8V`؊D 1}̢vut?SUI!kdy=fD}lHDQ"rAceY[ϧfk8 b(5cԺт=I8/-vm $:YV` {,;cٝ`Ghdi5!{&w[qRX"j16'0y|;Oȏ09WeK[[SN}Ϟz̀у˽/?_zqq}_間~D|x=uِ^kSmX6fܾhSxϳ a:eGӤDIܩ2Է!v$=^9(ċΊ2, R.1*7K[j MK#c53eX=(UUdfa,Z6YQP3Q<܉u1Vj}$dZdA硃fbmo 8 k0%A0hrR0N 8kKIPY@.S]}QR#pqf \rG#6Ē˄>BeG> ?yk{ͫ͋W}}>_|mW?eo+S/n(v^;nXFGƦ{j#%VʅQԠB{9Wn$f)lށC'adyKc\9Ac\;,}0,ik,DUȺr}]j"lb_R>Eˡ2iSs4QRS1N"6YF˲EKG%s1۴yM6gVKqmV[K<mjFݶNkmRѢm뉬h%1 sn!Z9K//[p &VF߼YcT-fmyOW)ziVQ[͔5vv7c2 yßKH"SKvP$K#d]|4^D]^`.VWO|w: =kٳ푇:>;?[s?Nv}ɴm,uKO}n?}>ܾ:MS5 Bʍr!6|ߣ|goyp^-Zc&;j{hd$/aX9$aywrIt rё{-x)($l, Jp0._v8&=ɹFUiI sHɹMCkF/"s#鴀JAfyD/HRϵY. Y.}adQS 9JZ"z?VC )eub*/mjybN)pqâ+>)+ .b!6.bHKe(z:RbO;?΁Cl י<88#RB^ +b鵈 1..}E[v;?ϱ\7O?OU/Ǔ= OG.<]9Oΰo~kWKy&ũ7kK_9x}ӑLX#t:1AKL(RdךKF._taR%+onۃ7K@i"\ ;/a%ؤaZ&S9-~#){s2iv.r?tA>t8`2juck, w#7_Ik\ SD)]o7#+s?E͗VO7saoGU"!}8jLy.@x 7w i 7:5*4hJ/Cipr1fUᡙȍȞ~mIYdMij)b:Q9YydJ?&iI &I>Բ,s)cvxRƂ]&z2̟gdD5^@T,h@b[ ,b,fMH\H2 }ᏉzҚۑ;N)V\zKƧ$kgFiQQ/d@^xx;nk5rmC@ٶ>&)^F _I;A$!\YA}cߤ[oW_4k|rf83<~+3xa;zFz5v+Ig#bh`ƻl tOJkjo13`YC"TYN\Ws* r/Q>G;8ƶASZM=A) 41!jTu\eOj"__7\v+^ #FFL,Ȍ;jL5R:{u9=NXp0;ƃ3iKl[cee}y %&z[3/u0@5jl=73$_[r@%!E=7D1^e9[TrԭN3F/6Ea:Xgo^¼MӏQLF뵎dt 6~(K --'%7ʳ ل^κ,Wj-pflzX6ʷGƂS7 9&\0 7fF33MQI%}S0LίijS[)plU׾b}ը#hFVLG\ӏb_MwN@gUB iV ẤvPV5zʤ^lt_q昧Nyo\b﹇p`M3t15:ΐef͘΀7}0X^" _e6+)WS:x=S^yk5Bp#S4KUyޓX0ӉfF>r>\C+ɤ4\N=/2LB@"n/+JKdO|dL&u"ߝ"iBDHlЕ&! AUʐ&9)_D ,\)}#G,FY 01=Am6SU5yʈ8_Wِj6vkfFF(.hTe'bSNVFmiK`^жX7X Q>OFa%4d 'XJ9 I.g*ȕ5T:8U$b{mSrS|nCˏY{-7X߁niSZH8u4MF,׮ү=uv!㬢wy-A)Иlc+5෾yC׳ [+Q~A=m6n>yhDisevN^˴:D]a16GRIo2d^FZAbh/{2øm't}qG1-䥼 }1| ~g,kRk5`'ܰ5hvzYnd8ƭnG*O4/+=M uWe_-ٞ 8&2YdJs_'?(e2"<[{ &N$hFBAi}%I-I#-bkqFk DO_6IT#ud $hG }e?Q"D53E.%h @ԸS_ſz#r/,\jFP^[hƊϕo$U vUny #jLɵ<7 ٓqxESbCYo<$`7gTMECp~=l\I?Հhl]"˓̲om'_ˇAsLh 6љl;٠S _.V;"j.ra"{eGPJab#Q.)1tqBTd6C1&/|XE52[jVL5#&&"ΒEmHUۤ(V?VLZNBC顬ե QSY8zU{Voͼ,"9Rn x!xԉؔk,f"򒦩A:ĕVE4Ĵ,3hb;4sbd=c?:/wpDizcZ9a1C4k (=7Yo3R9q*z }s ,^̹02c^\x%܅!Ǫmo=^m^W0+?ɀ1,׭s N7׏?TJ,e鞀Tѓ_xۧghMow!W ! [[!7P@bMBɚ2IA GcسZCcZ+CN}Yil’iFh!fb6I4jz 6X;?e -ޚ阎82,URBc}ɰ&ӗ^_gמcO_=afpXK&T /}򻸘{۲eJsU?'gʻmjU,s<㮵eXl vE6^<$߸2R'}Т(hF G{C\m}^*P:sb`lAXwlc}(.ɨS#3_WM"ۢm_%1Zh ڂҩ5ErAhv{xCl|!Ψi*rND eyҥhoU*:IQ s*(3jY(Rgf!x|S#A64d)uZ&h;S\7`9RyyO(({'t Gy>6]eg7 9.Xb׍pM͕mf*W/sӥHlasdˌ\_`JWݥ%N}4[ j6~8gs_|tt[\߀KȦ~2 Gdt^voT$ieZ"5Oa(HDISN 1h(f5F4UN#@] &т>II2FZ#h ]D}Q1.S#A,]Q#6fH%VjgiF KzSBckA$mtqE#1j= IDATжHI"11󘋯nF0)4jfa} >Ž_=>e SiwM HfDo,XƦbr>YsGy_[œ+91b?v-;f(iZ^x6>eTBe5pj]3si. tʂ~C)FfS 嶕]:(=:.`ջVVWvWR2z\DxkyT$ "|%ۦ"4WO"8o`cdŨ _h+ 74 ̯FL-i`ɒ -CL&@~疜Kz绠.V~7hr@TI) y6C6>uq=%Jk!*áGkudhTm5Mlfؤ=^\r?3,2~Jdz.w4t}ffNGU`ŁA1xlMc9{}}=?d씬Y2 ݜX9]Y垼+c-~\@0G Z8+ z69ٮ|CghI}!o\,ijܷ9^;6 m mEkFgGOaOݼJu/1&sMwd} &/( Euo^m1Bh&! r{0z`#˷2m</o3~7\S_*Y^~2\Y3wyG1]S=gw/08peb<,4vw 6tSyd_&NejAkE|К:>)ߢa*,AmMfսk1jAGP*Up&WH>R22 M5;jpkea_Ze}+d^8>3Ǿ b%$^T gCVI JN 4$ MbQ\zsmGiۘ&֩I-}} OVͨWoF9"W5mu7Ͻ-{ ~(k}-DSX7TβpCOl^c5e͔:йkpcWeg 49zA,^=]>\ `#mZ+:r,,w9?saxwtcyRրPS%A%4,!?[I7aqpƥ ˘K/B/s0c,L'c!!xۗÜEs@ed/DbӀN$$Eb" ֑YY^ԲZ6/}b`/ն"f8c[WAqO~DxM=-|5U!/ҭTAQieŴKZ1D07* qNDKCS #QOU*˜MG2*kfIV;eDc-5niUE0S nmOد. O|ߏnX9ȡ}•.?!wPQg*v˒?B-l[d5CVR-qJ>ƒj2= j&Zl18^iނx@ząP1h%1S29@^X_MEH%vQXb[B^HH #LZFs.O'hb euL4`[O=b42e0Fyb5bFV Ĩ\ r JKlP!^ւEo.vE):-RԆ%nxGQg`L"הM O?{=! dZPQțKyQꎃ3@=v.b k#!MBpΌYl>Q\hL83 QiD?ͼJxֱՌ=~(0qtkˈ3^&㱕aw<¾n{;Ĩ5 XzvM ʡ !hus ?֞ )ג7o|![%}1~MRp:RWR#VR5_ͨQSexhEАeF1Yb=A:edeGִ'EG p彎>B $; 2ךKL R4>kQ[?R鐲u*kn؂&Yr 5f1ELɩv#,kjW30 n1]J,eo>sUXQ8~LU\d+ g# (z}1꒏s̑sTx?'6jaX HB{(Ja#(-AƥzN"e$ڜIi8z՜lsa:'8"mG 7aoNZKT7$¾"xX{ICC6S 6@*CQF׀JCbfDH@&6hE'|k=֦1n2jHꒁo{8h?Fry*O;Ll?_r/Cky\A=І_WTt-%V<ӠFm{;iG5~. s4.D6i`uS9/cw!SyN3 n8/g]ZMcEYPvsVWJ"ͩ'۞jl8f1V`l,2/1}^;Fb$46;D0>i}M- f_ڋl Y FK@ 7igډ?:QKJ@3ԳMy.t(m\F̴Z6Ab\fqm#F\'FȮ2mo"Z^vZ6;<RńpL](6j_ AWQalRhIqsx)bDyԯs(X}\H 8rf-p# &#^ƃ!q~t^kS ~lN$< dD+\4Ng9Lk 1ǐgKz.u^l,K(E u,95'ΦLح n٥$wsJ i8jjWm[#icΩZQS,UUR/ɀూFVs(-&V`"Q]0 DŎEgLF662։VQM9M[ccs=:.Zr]r+཰ߜz Br`^p C2LDa<5F1qm=aYQ^&sMHʊT= A:yp!/1lkeoJHl*[W[դM20fznMKkLC7N&RW. KؒtL˱^ܯDmNϊx D\Q*Й8Fy pi++^Gqb0yɷíQ!L"'B#1e:75.[f68hTW%BMKSMC'pU,Ojt0xopYR1g``e7# x1YASD51Z kX8oq3_3$!HDHQDIto6S=+m/(yh\Jlk֚E-k>D=0ȬQ:)Qևeq)fdvp 4M5e>ڢO%4Һd>ɐ?Z/3"L|FuL.rR+l7.ϠڷPiA(162{)u c Vh X6IRO".FEYȂFڅ!Dy( b1m Mtz\R+k{yG۲g-n\hم'L)[M%pYFT54MCz 8`p2e=c7Ap>F(/0ͰFg_C1dyF9E٧hh#M8QW3擉Rv 5֑"Qr}b\P +M h͵X5c0n8Z%rhS֑eDke_>4Sj)iO-+q9&/YN4svi?rm&-MMβ^1!Sb  jfdu3p:pSrd.ij)Dmok .4Az̉&sN;'YG#Z2,|馞 74]#:6%[OuwʅL0㭧;2StkѰ.'#Xf~NQqUa7ԡYhJ4j/V |mC$ʖ-uXZ[%/zTU-. ړ);]ΌCk];ڥySDTX*߈rDSS}`TJ)(+³,ˉ!Ck[ E/4 _Mb-EQIiZxQ/ȫARK;|>j+meB&6B Zb1r& K06`){4Ոz>EZ!:#X!W\$k="0jJa!+LjZ!L[r6IN&!Eڰoj;e%>^>PymN֨:LzMAON "[+amqw{K^ȍHH@GhIFcd{=Y^-a$Hb$ sNjukнw=U{o3.雝ijTƆʈJDk<#hV1b)֑&qHSzЁ]qJyUx V8i`&ei9S3B|RjȋȉF+)!hpHx/W 61Q9S76+Ѷ;j P)}0nĕ9*cy md kKq0{Rz%! eJŕ̚L!,jkpr)HV8EiMћ;3Fޛ2*(RS?J!,%k)s@pUVB6V 썯 筴J@:V;TrHQW^! n4KI;K8YM;/^ARI e ؂YB\٣ZWkn2#;#(TyW"hb;WhOnK<%qcKj{͖?B{"+KZQ:k1>1ѐ1FS2nS%1ӌ%cEjBBwBfl[*Bֆ4N1&)C0I ҔhBcC+r(-K(A'):nUUx[fB,Pf^9c11&n(i Z_EQ=\v)9CY깘pY6XIKhX"alMgpHb]ݦʥ`0I(|F!S7WuE `՚GvnYH5z]Yʸޤ*C8W{g-K``3R=~^i!x9E֡80#J4EwZS$Mt$JNm96xW1IZ GإozE0@+šULy*utz ^#ѮUƄ6Z* 1^\儀(Hreih˜^R4} Tu~> Bk#&ta9ږ"'u_d1q 4@X//DS|2|j"bV NPiEAV8U, DA E9\Ŗ]~8sP8E Q"7L@Tap&!jC6I N2Q +0үA7.g-q [0px0sgר*=L.h,v=(̍/"SL7Q& ƒUfbO\Ry\"klԡy0/%2(9 z4(՞,Q8k)tD'0 ں˜G=i>{"I psnQw[MLDO^:J"MyRf*3ʚ9}'^^[iCo*QyEBf=J~:+ŬK+sʬMQ9c}Bk!e"L3P@ 3K]l۪Q j1d])+a+پ1U(V GD@v$MF?qOf\5bWu1@M0CQP}m2{Av.`+Kᴭ U|B[[W_T=n~V;z/od6hPN 'qY-ْ=R8itLFHm3\.+Y+$`1ƕBz0̄8Ce%IzÅ.uP5r`?YdN҈RG#ȜSV3ۖȗD9H9M %%I (t}1e֕JEVT 'زӞ%MSZ F6-Td_p!W/mXHĕS*BtS1 m ח9\ޥ,AWk)U;0?Å_d^ +($M!FWעgB \7}BTݲ@Ǩpgu(jb*:k/K8EM*emnhw b+mȷd K%eBZcMٱBQ& t(m7F֐r^#\:J\Q+ 4 V(9Uy"='_|qnA IDAT4*'rDR8r]hnzzIwI8fyZ BVkףbc$y]Ei,b|,I ]5 {Zc.qGڃBTaB`I ٽ rWnq{V{}UXNBYk%Ζ GnZtT@1&+%c 7' AƕOeتh6x;ڒrYx^ʫGΓa®vyT uC[-IFh!FH +:9̴1 󳎒UCy vI(T='#mÖyk$d q)ynXmT=+H);_q[:lMY[#΅ysmmT1Zl4ɋKW1:vFҢ0$,6/@I[.Tenp;߀^7Guq"]W)ibtu nK'.vVcJE8?H,u}q?6BI4b( q~&,=wgeL_%QR%FWNFzO=M|뜽xvͱZ,2WMFd={d.n"qI~+ U4,J EBZkHaҔ}q7QX9&$Wbn9Qnv6,J9{4V;=]w /}]r1˛ IZQy֩iX,+z+q]ʼVZUŝ~*\(g._r6rMqxR_Rl۴ssO~K>S[We% Y1\?wyzVAįM$~\Uk,y!4naDr)N\H |y _eI7< hdı!d.FC֓-Jc:}le0ZJfNf[M>2$.X0 { -qϝ293ĊC,ha>rܳ^^=ݷۇ_CqeQ tYQtf(z3-rR/U^ڵaWff#DI"칃MY^LpLxؕD1Wot[nϺ1Ap}H)F&Fpu@nZi2f]C9V.]s'r<Yւx-wyFŒXf…5 @ 6ی$;Jߡ+Oe1:9,@pǔt[UcWɯwB 4ټ~IIRf,YND 4@dCd kVo`ݨT12H&ekӕ9g/\7ޢCr0:J 5O{zyOvdU,gxT)7wuY|Sss -ě˖bŲ|Yܴ.E ik([63JޙgsGQt< 9&SY2o= .]{^Ӂ`m"q~ܵV-_Cףp̘tX<8Dwv"&Gle4/ &4~}CxXj^Uԙtk+"_ቀpYw3˖`2+Yz3sYGM֬YG>ūڕYh9W_Z+k)mAVvMHX=ѩ1:9*mpž|@7G35DQq1;㣄ɱ8lٜjTEU1|`0Jta`3.kEw]nYz:>#^ME$MVZQap%-cQ_yꛜ>~-bb)k.˰,䙖됎ylѢnR5@@ K7.J $~-\HyӦ< kt`" [M,B9G{:/eqc#{xouN]:]HcǖM;8r_B'/Ɛ}č~tdb/y \0i( |Q>?ω+WعN>7O41ImƶcDPp֭o%;ǚUxA| /|vˑG9QN_8+(|,Yȵlݼ _d[)Rܺe'l_gϰm\žޛ0hzΜ=ۇ_=#DZ}c'fq&ˇW$M"$J"턥,tSy9DAL|ZXMspƧ92W4tN:VS0' UkSE3t]N@v$x QFkPok*[낟ǻ_b{37QX6"(SwLA]bat{(5‰*( 6IFǢ0$K^/DEQQ * &98uus.]<\vU6g΍\tl?c'8q4ew^-ز {t P`"P&bx ~3h/E^zY֯2,$p[M3Gx $s< q;lXc$7 βjM\No {57saw%Ξ?ƖM;GY+鶹:v;QW^;⯟G/)yY215N#m<|G3s;y|#?|oi)X+HҘʰHImS4m1FB vLczhmdm<+\DZ8օ+.G'(S$^QԾj$&f@7ijC/W-Zs}ي" UZLQd\&]-7]&̪5Z{x<hH8RЙnf6nRa}WxSBHbJ${u^)U#Z̯BDp4,BGǟ}o~ ,o>HQ朾pC$wصi-杓'yh){s .1QH"%+oc;C;9{$Qs kN2ϯRty댍_Ü9ѱ+|E|e\Ypi.t}9&W_CLrw)W|ǏwErn83,\QRLNP ׮'u8~WG/LN)ʂsNre|-vru|'E'>hk9?roKbJ5j p:YUeYLD!%č~*͵d8p ,gryLPzIUu0aFX^!6\)|em Xȼ<`h56`!bAhe!!xb}VOQ]kKE\` k l^Js$VDNhj;랉vl-73oB!ʌDJg\.q QCăxAk񧟣`K9;@uc]6L߰ضywzy虓u5fsTȲ.F/g%/ٱc7Og3˹ 'ecj#`-[oɷ'};bTMqo1vHdb\ksnz3 &㇮1'|,$RTitP|lEl}{&)axv\rQ\3T0S^dm|o8zxkl r ,e9":G"m a-`b'tׯ+r+Y0Q T+je&'k5pVsH:)^hWFATƩp]D$DNlg{ba 9_ ?h .;(NP9시t>vlX*,EXlHuh 8&JbJ  [nV1CSrJgV]5/Pޡ=eqnr/`*|J }:.gxx9w߲uqț5Sфj$K 33;p?r"]V7jΊaW::Y #t7lwqy&fd4ZCDi Jl'O$7oeϞhOOqܱwy*U 5\5 T[Tvٝ,a,J G^+ʐgRI0T)f2:ʫlm5 |!|ye${xォȡq Xh"Mb}}8iMl6W`vvZP/l!Z 7uuqC~91lЍ"r*ByU^geH̋e-|r KDq@Ƒ<'22/Y|Y_051o269QyZU~ɲ_OAf\>}_I?o8wkVʕ <ivf.P,O*{(9<'i;^sug+@ă0TF{1<ȩ,axDžʞG"M$(pԵbǼSq˽|BYWY䳏 Q+$$O *S{}xa?{H"CG8Mi4SV*1`" ٹ9nM[ D4] r<Z|&'y껯u!";TP]Mhuqe^ye-YkWïS 6L*N0}?odzz=U QB$++ɖ,&x+-5<ŤMF\ޡġW:\p8rB &`>h%iP Y_sbPt9(Y֖0)ysЫL]ce,Yt8'J[%]nzAo\jnyoq1n{/~: J 2F>lc6FrQcåbCǤʐ[c/(K{\8D$p/P8'>DB xW`$ $ EYഢjk[a(j9>i({BBo5jIR Zblpu}J+QK(mw("cDx.{du~~ßܥ 㧎_'+xwt/=ew'g? .\9cPqQ: e,XȩӇx}f8m14IA~w/6cרꊑDJTMF,.~.p'?J^=é(Y[H 4-{{8|%Tg0râ* ybKr5a ݗ$,ӝ񋧹45 :5py^EGKV\s<fjf s)F\c x\ٓ:lamRCQ..';!9G 0y-d] !gDZ=Wں\(i1ɬaJCf8zE^ЙfFo%+-+NKn2Dw+zhize:^X< :^WlUʡcGXx[[ me*UA_k Iɯog`=C+Lɿնڕ9z ^9yeI7( f9#/][S|T'sf0yW` sةp24%p*K`o?|\ Nj0y}sDnsh2Ha\"[uٲ`zns#G?Y g/3V{>6Jc^?ՃW~豃|}>/}yebn+W ^"g0K- _.Ub0Ti0/LJuF6'Ў%(<=_[pGrڕx >(D>M8pg8sb9| lH8lmՆ8)]iֲOŒkRq\p %N"un"!" (`Eqs)&ѥ}VёՎYZRB^{yeb:__rvܻ>K%3Jq1r 'Ξ;o䥄`W\BҲ_3_(^ˡGy͗L:K?`,WkS)vjwAG ΅Dx>`ǁ~ټ 5',-yo{1q=de+zxR{'2!JX {|?Kߢ圼rspbǮXn#ׯ]/ٴv KrڭlX붲j6Ⱥ+ć>EK9vOs G|CBm`fEUn]dvvM?x t|#H[x AYҤ4 [rx@ D@ IDATR7K wF8&J]Q҆(JGnOy5Ye\YB:gb @e "_}^g&89Y[őJ,wst;$&a=iDAZ!PHE_;oWc"C)&+2l=m{d-<.r,-7oncg}6>@dvnZ$lu |VNaezv{ngʍpr^va婴+\t6ksw=8:O2ݞ8[N!+ES6(cKxl1i7ٷvꝵ\7|O0י~?>>U:#\ 68{ OFgg ?z#:}WɫZ~Z o3|*9"iZ2,YwXi g)Eȕe.LGm+1O(:At*+n}'D#VX+L'*"8BVg,Zζ=wȁ"'S3ÚiXgbrg^~i6Ta/\'*Hh$ hMݻn#?/9y=!Unb-lx{KgGO&˻kS7n$kl )F8JBz`,v޳j*^|I|ajj#'}r`nw:BCWb5 ",XkƮ݀RuVbGa7^bfnm7 mpHpը:2p$3\Is2Rd1E#n|$}D&aŚu'҆}t k6pnu`U /Z3ů`bGsd:6KϿs\Yz=nmof3u[19vνgzr^̴+>}JW>ZZ̏r@hhM7/Y09.uut8VO>,sLNsuޫ'T T OjUZF\n-J`x4t¹K9r-2eƙiO1>5N-ZYP+򌴯(2DIQ&&Gᆋ~j_`𜚚U%*$oPu?ڐ=ǫ1rdR)l6"O6ڹDjpj޷q%,Uj=b(9"G$Iq, egXt=푇$pIsx^\V]׻[j#|[abb*VetaP 뷱sNPY"gӏ=_ɑ05;Kx;_3*9deuIljob 5CQ+Vш#>O7_W={zVܺc_z⯸c\2φ ;xЁzuTJ ȪAz{׃ /^E屫LgN ,`1yW(}Wfi*32&&?Ld\~^Z~LMp[\9CYImDH̝j/Vzq?1r".kI7R]a1Rq"<?+&pi\L$J>3-9B0\ue1'9U){/B[ 7xny㵸x%+ԓ>El߸Nxi6l ~);,gE,VaöW 󪚪ݫT=^q˥m˯rjrBiK .d>⅓a4 L8;ҡl"c ,euyb)DlLLҲ^0&"I$!FK>2Ubu-:Kgnk.s_}󧙚{1Qj25/Y{WpE\^xh!VcREAUn~Pt-W))T% XRcv(l`^]Fsf~ھ!:k ɳtnZS#DX.<Ի*𻳑#/=}.RGqȳ(Ip@#Y^VMC.::1Wql*Pϯ?v)FlhTyLH-zݹja l۸{fy٧pP˂?o1=7ͥk:Gn Sul]F +ekX:;_b/"Xeٰro<̣|}s<yAӜt4m?ʡG5 )pn~,ճ ĖYBB0C|_~e)UUȇg̪'^_cl[rBBBW0C!Y0ޑ &iǕUM^d?H;ó=[29=.py@Fr0EIgaтequ}\NНw^]ᴗ{ 9sm;\A+̊Gɜm%;`#wPq-hYx87-YħCz]:hF!ˈ\#r,`ޭ$CJnN6[APFƫ.'fXz37+Ū,t`8:Y|o39= J=Djge?Lѿ-{x{ߢ, zYĀ /2W0gFj VE:gw?Ć5irwƒ+Fg,{o;7n^}AEg7w7ߴFRBT<ɾ>™o{~ւe:*Nj] 䂵lX}wq)^w:!"J6T#J+w?U8!pAd^R44ZXyDo˜EsĘη8q?Ory'ιokK @SJBk, @AEP__o@39zͿyx,/HcӇiwWzY~LqEt33=$^+7㓣u'eAI҄,C@V TIS:acQ:>qzx  hr5WTgsQvc*rޣ꨹J}6`xVcjuV uXӿBO^~;6f,'U++vŰiB V?|wzG9Cxq`gdRzOIӐ{M}9eQR77za*JSGٸ|!\4X"+Y xȻKXvmZaI+xX\"Bz9&Ǧ^uS@y 14"Fy+sE-4YOщ LR6i?2Tձ+|< vl^a2/3Uu N+h% qq͐e]\YR2*d=n%( d.Ex'Xt-;vezr/sYe"FQO5_d^{N;M;y#왣f~yYqT\}`$#2 P{k ۰ k=f[J6MjnGnf7FE4Nf7 S)^78 7"/,,n|Ozff)(\$(z%VbTD'0FAm?֮cbȶء-QB;1Qmbl#/{DJ; .FyGhe EIkCli}t/rf\@.iڄYtF-0`wUeCܲ&Ēv^yoivbH* YlɎG7$V;7N"۹ƹ.88.-Q EIbH@t+kǻo3 콿yX)n]^5BU[2 U9)qCūg^'m[גC'xb5-PYsNo?k=>lS -EJЇ '#L_9UI/~S?Y-FiKqѫ+_0XT8I$n|?\~W8ڋώ.qmo/-qY7↽tvg1 f ;(+<*v"7m֛oCq~ J&*jց> YXXDX}^Z/gn ~tiJVz# JɝgX7:[P,^U^1TJsZ0h%*eY\,&b4~g=V]_?8f`4!`[!U96_MUTZ$EuZ)k_{OXGFGI*EFM$##cRȢ!+̪;[}!YOOr|]@(2ȡ}XFۼ۷qp"NDFS9GWpˍw0<4/_o~?km>̥o`ŲsXf.?8&0[afthBI_{{ط |#TdJžyp+L˱Qb)͞}eb2^n/#JFVW8LY6G8FL|S$&bCΤip [O x+1wavIbfX kJG2ZAdh$ Ws.6)0("MʢONs,^Nst%듔3ި]SNEFcZP 8#> >ɶ-;wRXeQJ"X~G4,uD=Q}U1;7Gz}ۼà:b V"×&ʕȌLsH)ltNр 'ILכݕ"$28Oιŵ;Q ՍUy.>Ⱦذ#n]b=-JeQ:BT+uoz6i6LRaUgNcv4_>թEq wn'3 Y/|RCŔFcqw13;IQP IDATh3w.p*`+b\+4fbvno)<a:-KjFVEj%Fgj"Ssm,YKR=1Hh)E3K\EjlW`~E?1I7MZ~<(-1q _+0,=ݥ6}uRU֒Tqъ8EU>͔<0p$iˢ&a(iҨ 9Ƨ' $Jٺa{]悵E(kq11}/?>7~YXc]vد {P"݊W40O=ugI[(d =.EE0ɫ,Oc6k׮SMhBTXWҰ&)IiJ et%.\rq? 뺜㓗)ZQP_t8z<&2_ѱ1xjcx(0tª&&'US]5'8d߸Qza&N_s'dvp%/ LҊRAl)ʜ~SsLI"-:!`L8H_)!D1)!kY><ĥP}qB4~-2rZ"U xT:>|B6"*G{K,sa*9  6uO]WՆNTEbTnL&)% %޾,d)EcNsa\M7- 1칚[ت" *IP:+E7Eޗw|(J̗,_{ z]>ſut|!ԓ) ^3'81}Z,!ɶ g.suB`*lYi- 'xYܽo#+173-=q,${<.MXZZk#'M*" e)espKMV EfQַ?;E!?mJ*ykE//вRa~Ǫ08VS3{-j%EK9(s%#/F)F8mt_t ҫB>ZUMehc~3K<{z5``YUu_DICK-~!q;Y6_1}Ld}5c"{Kф̋qLdU ΈVӥS&jlm*[]l>!@O Ř$rBP*r<^wYT^GZD!D Ͻ4fgqe^B#DJE܊l: i6?J"en܏ZҊ~њ^?#rEYbbCYZ"7F,64K\F.0+ nM H& nd+ehR<ψČ /a "ju*{ j:V].-j/ڛ}uGaU}-}jXDZⴁ9eHB`ERY:mb [:Db۲TYtXA>,ؠU]dm0CLP̓h\)E{LbEpx+ .uʬ]Zk$@t&TKET˪j9E1hP,1"/ۂ֌ 1QaED~_QE@2II L io\4߼M42)",<4P!V MT[\""(.2U$LKK,ĻnO3x+V@V4d8Ŗ(6$i1Lۮj,k#LBvlk)kw|tZmTl&ji(4dЃ;yr^8!RQ~U}T(=!G}ϭ+1&V!ú'@aDXJ9RQ Ձ %Wx(j'7 N""C(85ZC -c%5Z_+/D[J SZvU"(G{/6y J0 j\zIB[!ܪQ6)krD^.-JtP@h$0|c Jb" g (fhx"vj]j/Z>ed]-uRXk%v'o]~P>WQU$i[TR)Gy uؿatV}S We.8+&e6 E2CZ.~u5ՕwL 0[O -d}D( K޳V ~QaH5׀̣|]!?2+!ќe^Y(Xު|` RKsđB1}_pDPOPcM,֠-)gx!RА0z0ĄDh"A2pf ,%2D+lu FE$J5SPKTbs:6VB-TΉ 8F0FOQ/VO sתHCz@r]h:PsUj 9,e.u~ $(--\ZDzf@{yʌ@d+aG墧9ɠHY1cY3reM&l%S ?kP e0(r鱌?d9DQz( Ce:Se1).JU"X*tP J&e]hqԁg5{ں R5U!VUf56bJ Rkd=6q[dYe5fRV.F,^)%5G.)J1ݼ)( Nz2EZZIB`~7cdhH  WZSM:|$FfE450qS)N9lQUEN%4]DOJW>MPYDD,;Ӏ j-A8]kY)9ȔD8˥(Xx eYbm(Ju2FWlGQ_}ʼ[]ug7 8@{<: ՖLhrfѕvk]U J_QAWckqTi-@T}* *uWZk0J,P%"rpr>(ӄ%͉ r{ f̢$PtFC#/\) VazU1J2d]x H-M/Ai8†A]^:i׉d ihcD҅ @Ɩ bE'I 3I])iCFEY5hM%g"+NgR*5T=|i+ͰpXf`%(4E_.I >F9B*(QI ^wQ8ւRBz0!A؝Jfу6N(Q;R׬Z[n&֕ڠʋ).IW/V\;[e @ X>8!w BÆXU! & Ux JǗx+JD$DUf%Z&%4Y#|pc]eYe.ͩ/JiZ.Ib1:K&< q^ѨHc&E yIzi8h o 2U*/EH R-NFeڭM\s+ V(W+n nKIAKB48_Txa[i?V %o'U(Dk4)mi$猰XQT}փkCW彴}D|јȈDF):ER֊egU% Q*JfX/Jzl2ߡJjQL܈)k^Nlؽ+)=αv*P년Q= C)x4Vhg1:+ zȠ#3rᒨЛѪQhlp +K(&rw?ZO1%:d&+xJxeZD.(+J1qpYՕTr&tmQ%&(么y&}WDe^ZШh\O䆅n`CaAVy)9N81ަa êr W2Ft eR)P(B-ё*JUfq:p\*jX5%ʪvQJO9zEl"ҴA#+Kmd1j%1.yQs)+C[^+傗VnYrǛ*m+ G,` R$DV4(J1q&ϣ(+֡*2G{YF?wBJ45Et^Hʂg!SnK+j${\(K+piR&v?U徨lOUiUUxP-U Q u$h+ TS1U %b)yo8$i5M Vc&iHktS݂~Hx(\_S.Þy#넅fҖzlǻ]JJV3&CB,] `ǩq^^\qk+QRM)E" `mBD^w~28[si1j\-Vo<ĥgj^b*W֊ݞmq{Y7"P!nT<^3:1՘"cdYA͓u 1Bs: $*alg ,c΃d22ɿK涑Mk`/\ &6q lJ>4ΉǮ6V;(FذqudE~Q#F3%IcΝL(cK., c+%2žbqv*.2;p1{l!+K.d,MQB0 (TF[lX ZPqpDXeJo*tҧSL~pp5/ 2FzF[;-w㧏yfgi 8-Z# C|^4 vYy|YbĻ?F΢YJyگ.G]F7v{^~SJkݶdt*")8Fz&?t=QX~[fvvo^ϻFFٲq+tg`jUjeǹ5h6[ Yn_wod '1ܲ6<Ph{9Gaٗ@Xo!NR֯eDFJ[t*=+dtu~W^{+<ΟP)2k*|O0 >pZє6\hL,T:XT#"n5("+ɥ@?]:[YzН̈ dUX D8Z5 .ã aXK+ & Md +Kpڥ{6?Ց!}RhdpgK٠ 8} OG"|ObL"dAt|;W%nCl":t'Jk*>v6B'j[6_}(ua` weG$Y~+w=i:7*ݢdæ~"GJC4qsdl=͑dYT#>7v'{w䅋GfݚHkֲ|dŅ9ݜ=}nݛvhW,y" R =/81V-bΕ q3Slx=2:5a ]q QbLL?/dzml9R{whrǁ;Xj#GOE{o+ͫ'^yv(mIqk٢赅V|gO֭٫O=z=cYvl^.~񣯱>^|v9ɳضq;7g9µ`Qfvq 珓-uY9][CY6611=ξ7p|x sSl]gϙ˴ /4^i1&i$\rVbZ''?E^\Ï>ob8w<35?ljGEѣ/qˮjOu9m//3 ѝ?g1n߱e7~0W/^j-qԫ8í3)lCi;\z'Y\j39=b2$%^xfF'9q${U l, >?MHƣn>΍;yg)]Y*ԓ 4(˕8 ٬s9c#ct: ޶mVR$ferr$uv=b\VuM@x<:8uMxNy÷3 p4)yd$QĻH9otx9cْy1dzG__1^u=G|,zP~WpjA:L^:˷m󭜿]n3 {xW8t!zK]Os[02%L9yfuw]w{&ke+i-'~/~slް+ϐe&&/s‰JkKg8ULoغu#$&/-yQReij።86MQ\v083O=i .o2W ?D++L~1:эc8_ڐRVK k} D9z{H\Y2U%?gץ/Q9 t?yWLjLARH1Q?ӳ3}]quVlD+=7bsq붲ОC)i2}?|ClZ+Yme$a-Ⱥ m瞷AG ?/ذv#_yz,,=YT}bZEt5]-5!Ҏwmdu>䙈DƠ&"CC>s3$ysS~, \0:3ZbLBcxXziL`M5`2JxoytzHPLC սwȿ?;/4 0w5y5y>0T>Ra~pe?PgN~z{}\rOrWyPJho8~c.31u4(`¿->Oa9{,6`1/ms3;7w_6c!.]:K%q$iKl ^V&{alhx+_О{~o-9YwzBS+y)F /=mof˕A,8kg$1)?[cG,@z|J޲, l[4_yK^$ґW \Orn:x+< Lj'~iM~e%y)6J(9s^U\o"TgLoP ]Uwq/ܳV#QňNF3l^X\Vtqub2]'^t[,Nu_bh(94HҔFIՔ>px깧ٱm'[o5ᜣظr+c رsOS.-So`:zQ٩ (Qks6z?`}XߖS -JhkWU ޏ_~vO5ygff*d?f-^Z iwiA޸xWsyfk `]_4##|ˏOOzy_Il < OKS]b[h?+<Уz?9VVRg792xELIu*Q•=֮_E,<#ϊZPXr1C͔RNHYƩ˳$޺ ?ʼ.&-Jb+0; u4@Xm%}[2lh5&.Cxn/sRExdD"q9s5~D&D_Yf.JyiTv+2 @Qt/q/Y71&NU~H;֯X[O~ptz}8r񝿓!+^ǩi>W%JLX2yΖ9+:yfϮHۈ0G;/)"SyBmVgrn{nsA*6(9^:K}ֻGţYa$9g*PVEyNUi3,xW r[x·am|[_ޅuÇa ._|E#( jF"3 " Q)˾뷰|r(/z}i鴌=y~v=3:kwI:0 }qĕTJe ?QMnVSP_geuk"#'HYt@`/}߃ {z5grC dHp]h0g Jՠ]V}z N) &J}I;o3iffG%'9q(;nuc}ǖ9ǖq 6[G<<ٻ:.O3(Nذ~+G>OZQ*֛WȃO-&IC냴a>+cctٶ~__Cv2@ O3|YWІ8NQPŽ:u GpMp"[tUD; R,wn͇W#/3Oruf!wʐhMbC;ލi5!\`-?[a2Xr59y[oE͚2@/d_A+TX(2q%6ʺWԠVe0&Ɨ]vڵY|CZ winMk7sáˆ@J5g,_?~O_b|MuWoW9 ^L C(>’}BUTk3x ɀJ"mn[:Vo|4Nhw {ȉX>43/=Eg$QB{q+wFן5!=b6o/_gn9x N_c "5iMɚ 21]{w7 Q1 I2/`]Rmj.EVaCw3f滌nʄx`1t aqٿFN?M_C u&6Z3bƕ3,,-fVK-=n2ywrq/z<yJFDR ޛ/:KWI_֛jr"QݞlX~#X1=9P 2Kg^X`?Llu`!ɝ9.Z) _+sE5K^WO1fZIeϗ(g,(nPPq.*_^^[[eH\Ak CB5+By,cB(aq3Ij(0EM9~/|q>bt!>c̴d0Iן]w`t{bv~][cӚ7Ml9$:p6DM.c9B7pe.6*'>,rQRx$OX8bj8 ^ "P_VqקּPβi n(2!; mj58{ O}:6 w{cHEt%NnwFkH,vG ĨxƵ/s؋?4Si/Q‹6j*PvGU>y(QJP|X @I,4MQ@5} DŽwm(Xdxmd0!nY/%aVJ0+Y* |(Z#NDPhxCkI31yF%uqqz{q eg_=ƯO2\R[3zݫ7ITu1WIZ^'SYcoѪR:"N${g)>eK^\`Ute>ʱG3-L3lN=}w?_cm,cwro>'DqS/y50[nbYno+dy_J(&YI:\vi~_Teץ6Svlڰo,YQm(U> rהDCW՘(l9~?Z'^WS8I>N6mΟ]\g\?oNi9"ꮤ ;x;dEGW(/wi4eHn+n/6VJ=YeDIf2Ȳ0s$q?@J3Tt V΅ UsU݇(1%5kxUkTՓ16:& ֺ(MT4"TP8A"Ⱥ=6(+ol,! Rڵzz8JI}q? .+e' =qč&ik<{oYk}iӋʌfԬ^,V%0mpL_% MIB 5i\'Ɛ8`\dI^-i4h)rxw푍ᣏ,=қ_Xxk|g^O.0i]JL"Zw3r"J|إHOGUsy$LM[uԆWox}?:z[-Vkkc"NGzP&Ͻ^} 7m.,lbia~ 1VQW5B35cؼٰ!Wyy@Sꂙm>1e.o؜S$vȝI޵I{LxbH9EY27X`ak:[K$^W=Q "5)۔rٔ;F )¯7ЛU[VtbP7-aKŃGs̚o)u8w9'0\FbΟi6/KTʙ~H{#t5uI/]yN#Wn&^;rM]SX{f^yE/<[o?OsLYQouM9q2\pu7;̹~V_B5,fJh&r q{FSzlݶg{IƖD 0%6~xnagْ6ٵuϞXnd,,,q7gx)k7wm˫_߯ؼy+/-ѓ1s5b[cL1ksu_/L,h%v's3rI.yuNF(rzaK*Lt;~*L|'Sɋ_ 5+gW/%yωՍ`v`=E1sQI #S +_1(JhJF)¾Σx [2GCuG~;ާrl+-\epSX55/ kZ `m1KQX)y)I7< )ڇY][A)EYEI4?*Jy>2^?ó|Ƿbnj~s*}[> {}=7~@_,GfBH!*^~78{uOtP~\(K<,қ :/ XFYyɯ0A"*>s oǿrn(9>?˾x}>'|+*|nei[Ɩ%O{3óүVVKZ_מ7q֝]oPY(y2D{\UZ֠5uQNBpMYV(r+4}+7v&wR%8*(RN}$G5QT!jp࿳~ ]qk-410=6֞C3jk1G.\Y=/H2AބDv X}VN,'wa#W35E%;aUJlXħ'i;!7mCQTآdȧ쏸yt.nF{q"1F3m\b~%F|? wq穧J거L'45Tn"*)P~WXXAϱ4KPZ#GPE)X@QLok&)l,  p=/70L9}^)Ź3<̣{0^{ϼGYP|΍W]9^~q"Ŏ\gDky'xA]]rȫ|-Էb:ٶeo{=6Q7eul e)@51X+ttwJ%]ZDBAaj'!hx9lQ`mn9tnhqIK2hUneYJ9BNIxGӶBY7O N>{ϗ.*hlPqcq8C.?e IDATұ 3˦|Ԑ@"I"ha_x2 XYrJ>䯼PE!љu&^?sw2q9ڰԟ|qnX^?-7\?+=LЛ߂27ZGp0q@"0y?e]gZ; ?dOF> -5W <ڋ3_Ƙ+C)3}!ixK_St }(NbK8rZUqQ6@iw m;g*;sgsofʒɤgoGŽ$Z 4 */Y 8@),i }h]DSm3R?GCiib>`ʒZ:)el6&F7}n[ڦ<Z̥ؤI w.ZFA!E$P;OʟҖ"˨ÇP'?㔉㓏NPA2ݾVQJ3 %o=Cx|/k9p0mˇ_7F3ăϭ~ìrp xXXZ=q}_mkʲO~#8WBT*Sq?Kgkn>B NH0-E[xdH7<%XO#݌&cuo'_#K%hG{*wN|1Ɠujwmq Ɉ|m HD/DGO'jn~ɸge8Z{{n[U0Z.lNW]%yv7_E+:sT} (Ml[Μ],+ cm81K&iG-J&%LtjߝJY^-V9"FiHHW)LC˙Mw/2XrWg?%fD/om9wB>h7c6 וM6T3PآD:E?֚q?\q=M)رe'Oe/k#_ <kl߼''s䙓'&sh 6JCXّؽ[U'8x?O0t-o~f^ysrUsKDqӑ|KL(9TND'I̾ПV1+yG9!u*/^F?ض">?1ίqpwC?aWP_1~#.aПŰeWBSXZB['rV@UD$i8(kq>Q+G-v=D5rculѾ?.К29NQ mm= rJ8F"V`tNzJ\T~x`{Uj 2n[=NS{궡qdHk;Ag 3*-Rdk,.D )aq}7ymqe., ϱ~$ŗFM=cn{%L̙?hh2e _E!FF-D׵S=vqvG1A뮼3OwKKWlߴMKQswZ=;Ω3gyb\22<ړ|"M2z:N:}1 m45x> h#=?_즌hkuꦡm[bۦ#-RѦY]_AG~?q]K~#жD H&Z"TNT7uRLjO`cNOPD&`UU2[H$!BzdڀS$bȰ8ډle*3&Jde?MVB_o&4='Y>VbXyr}y"? Hډƛ@()/'52%%vB:F `> D,s-mS i+ʹetCGpS,-gxGlV>?ᶷ5׿zojz칓<7|̥^{[׌DeokxߌR?ɳ82+ˮӟnVt~07_se]~ݝBoKv&R 2_{lQи x^STlv]w h¤8|eHR*iљhcy}\*nZ&u;qޫ]>vwk4;qy.e$NF1_غeĘ]͆<Ӝ:D?5!UY폳)-m @ 5]!hj'fvhACeVWWY_a*K鵚#[m^h fQNz.'TJ,2$*BiD $9OAմ2MFdMÔe `AO)gFJ1t?rm$GeY0ALA9HCrNܼ7_M~e8Z澻w~ߤL䈫DŽFlo@32Y=t wwyt.i{[Die}a~_y}y5m<Φس2Nf:y՗u.CNsveL (V9SO̓dx,Ue;vS {w]/>'YGf*rEuW'>?~Ѵuq.( Jbæ+O?$>p_m~Rf_59ov^}9: >[wF&e␧E LATZpeS'uIƩ)LIY+oiSsV1(ʪZQkz/x({InZJ%: pA@r.V.`lmL,bQ-ZZߊxbP\WlGXXC:[Ȧ5EMbR&lË@M7,6@Jf2 Md >j禒X GrMv%ya?YR&p垫9s<ϼGJ e@kiCB <m÷VNUw vdFyF?]9+I ゚׎mrɄv'|@Ȩ<ڒYRs(/g],{.3_#GNg`*0ΤQ7}.gOMicQZzf߀0ogaq}O=*(UAIFS$7r[\5F2[Og̴-H@5/6]JwTY]MzTJI jke>*Ch"*+s uۢ")UGo[^/G'V2^/R0 A.-ѐ*oX(K8Ϝ3{5xN(7@(SO;>rJǴ2֢،zDaKN4DKŻ4Uo^ ST(SxMy'@Xތεl۰S+ge󖝌'q8A}ZJ ؔq4rS/cmE?Nq̈́w-k++`#Ju-1 -5m'?XןhmANğ6E_ QlJɓC^7UT)٩|&͈Kb"ίqMM=u غekgOr:UUP*aկ>G]`qd}\bbյ!ߣ$R7MeG>%v/7;?(;/lߢTDGl'f̎ecE΂Z#Dn_7MNܼґ٨N٨(-%U?EN!j]/)0 TfG@@E5=!hCLRYdmRWp טe)9L5/""Ifš CJ4oӬ6; B'Ahbtw2*sP,F [dPwv:g"ZD UU}@iIUkFф5߶]s.C'!M>砝sl/4; שuҞ#ڌ s 3R#J]a:6,K|\g/>tL:Ld"2ώ1JF>YD:RFd.B⩥C <5`fBu҉2ޑ|(+'чCab~PKZ6$w A36QviuT D/X+EC$9jDB 21F|3SOkʴɝ!]m2Cɕ#(Nڑ0EI_\MLabK4}^pXlH,VO}"JK5E*3v="im-Jr #LkMD>W'c =آmdspk)肨Rξr (Eo4 ^9$bWQ#,#)et*CeHLhAd/ kޣMI_۷$jTz`fc*eŏJPtR-) S;Ӽ4x1+;!-ؘgtњF-d&F1Ih[QU-&LO{BUԶr[|KY iCdBd|Pm;EV&P$I.AT즥33v!Y@2[TDm)>m#tTFaP6M.䦍1=P5S+\fFSU0Xa9J @/m :k&8x\ ΋N)Є Q'hMPZȊ;PhбEGCu db 2 |M57^iߺk ^a#VV>W1P»Ym'#I4)Eo@aʔrNDCtu2k8*Tڪ 1`ӆ4V,c\8-F"i|s ]Zy3 nvvVAZKIhN;'rXmQҤ K.O`2k*A  >x]y_wJTEiB7Kw1%51 \/ru%XD7 Ƥ$#tQ3) KCGr3ۈ2E01t*ceF,df|C'3*t&ֈ0/h4S,2׶5-'qD ].h[ "*&;٪QRIe΀-۶~DFXq2T/ MPZ'ZiKh.D\3?NCe)=Ipzwk8"udAf ֐ҳfUr7fwlKoԭF,2i:`b8ix%+%=qʙ tE5$X<9vFv3e) i]s Drz9OOdԞ0&J `vxt5(gQVϺd. w O%IXFkk7Y+H}>!X4V$NljFfV(dFTuމ\6Ҋ(?x).rB3^,&QR$*ζCaEgTmCQ%ضʰ(=UPix"- )klQP hc*Y%oeD֧ۖ5uV q.RoR4FPr*a C)&faL 9q 2΋;"OwLBZ^ˤ~ZSC2~bDye,{'#% YӉbJrT^*s+kuB*I}wnu6D ,φӞ vIKubJ̀iV'#1HVL$yT3גxJ) Z=1.˂ Ϗ(w{W^/|GID)(ce =Di]xh%6m7rOL%JRu- '2f `}8GkCFUyRNR1/$cTN!)|;a:ZC_=[rMW 7[BfU>9:͝VHڂ&0TJϣ9qT|m_y'7`@ԩΣ~1Z $b`Љ oQ_LL)+(vidF!Diz"54N1Ji\$$[Pna_?φus3mZ6SV=hiHi5=[2NhI) h+*SUL3C6eG1m/ `"҃xrY5#^g||;vC`ײ- ΄^>eŠ\zvL^N#Q>2wR^R<#;&fZCE}8ϢTW*+t aAVv"'3R%Fh>8 s u\;M}.J8P ~DH"n%֔4qa)$YBE75JUZ&^gIR9'tIɉ+w2[?UYx;Q+q ݙCǙ& A6s`];/8Ȝ%"))5ހ~Yb(gRaۆsh$$ *S#E'=]v'uV6<ՌΟ,PKvP֠EzJlZ&Ú;vs?Ď2??@/7_~54룆p>5N2o:LQGS(dqE~¾IL_ic . 0cFhe樺ʆ9_7MBw4Kt5 xSi ])y&:U&AYA$.3-=;7Di(&MbsHBe͊ оMU0 Q4ݢ'Zg|C~5'p8tbb潘d#ED-06LJoP4mԵXGq3,Js|7"Z9?D, L1 nH_ƣ1gOaAv_s.(\3pA3ĥ x.~{?O3<3n%se`?J3*('חFf}ilyG1&A$i5cyN6"kkDE'$9mLgN>&9hɺ#Mbн|x1;az}ft:Bf1Na^''z~a D'@rrd~1:mD3ȇawDa *(幇h yeyoxԣUD>C RȨsE'(pvU9ІМ)Yu#/k94<&wM9…tB7vAQ(]Iӳc˦yVc\Ӣ΁0fu o;字0D`іL m[ w?t-mMmbB5>Ma0.'GB݆1 7k] ݺ]yMtΐN##n~Gy MdP)8YRGBֶR+%v\b!H@4_e: :MvR[JV{.Ȍ)ȌVl0ٙЅs'\!?_De(l"$kKQzvGWS膽W_m[6B="X4-W[ǹ\E8+e0 ׈}L诮`.I#3먼TUM*>JNhkm!Tﶁy.(+g0)RjͤAM-^P1<+K.( ]EL=5%:a#( iPG?+鹝<:G=>&է$LBؽS$s^n}A=c/gfL 6=/|0-viYW\ڼPi8TPR楓cfH8!dN€V$[ @!d<(*󋌇ktv:e7N1L SO%8!te{0f+dT]ud{ ϙ{ b,eSgOg^a{ ˮs½i'1H H-J"lIZW첽ZVzm-YEKEDtI$ 3{9gsA(V{; \W1`J re1ƐIv/VG Z`3+uuWysӖq6A-2A൥TV16*?^ƪK9պ`+ JM\5-WdTmbYKF #%D4)#5r#eAW EgpAt\tE6v-3(U@YIAܢ个\i0t?Q45Y|33^<mwXf3o3Ihͨd8p>JݸRP.~Xeoq*\(q8+61g>; ѹ>і*ԋ0Xj@THKw 5HHu3=LJ &6)|D,h&hœh1"J RQ9 p j ͠M+Km4NFoq'lx IMyoTq6Vw7 5 xFFGß(r2 %!2Ղ]Ma jbb,71ÚQ78r 3_h@܀c"F*@{uF ɟq/25 e q0pifQiQ4E(bm&Xac /A/yQmD/f] m5@ > "D"+~-V1 "Sdl[ݷ;?Ķ+](T Yuؾek^x$XMUCY T2Ki9V X5rOj8Ǜ͔Q:fPj.=zN+ct8@d(92 ck;{)9eb iI?S? _~~ WsZŗ%#ض<3=Xa *km\WMuI`0sy'~ԏClݥ %O-2FEX㺃v)C,#ް2b:uhPW8K*xqR29R3ecb٬T/db3"H6筘#UbzmV}wीJ:f,a>g8=Xz%VyQrz&֬X#OعkWMI!Uw~g~qk %c]Ȕimgj:hF(rRu#esUEgcie%^V+XB)%TT.BZm2# GvTU 0Q _G.n$r7G %ѻ7{ ĺSœ)=GJSץ`%}m+RVHZrT[` OJA5b$]6*nIP0tbFy4!#*&F 7n7Gkb!S6Dg=!|5ʫyN IDATzu5բ=:Nr*M1˵aXI» rf{=/~WѯDi՞3_zQl`"bX^+91ZlA?.K_3_'SGqŞ)z~O*茏2z5kZcy3f=–Kؼn#- e!&Hs__k^ A@Yj92 Ar,2ڂePWxU}U6nmKn,JSWxF(g-cO<uF(FFREdu@#W=\YYW/2B{na-/<ĥ_KAcˏ **F5Ɵ*?"/aCGebb9koO;QF'YwC>nIlsK;뷳mòHgXPѝ@86Ga'֎2^H6V)Bu$!%mlQN!ufN?(}:J;f1&NUS%R2SE1L_ &ՒCg8wIE4rPY<I*!<M%[fbMY& R_&bw`xș8g Xz8C!* 'Kj-L.UjY|'w?lA 4AVQ$rF&Ws-<5^eLPy(l ʒgӗϑU=5|嚻ٽ &NjHW<¹Ͼ 7PTS`QJaB WTGMXV.\aSp44ҎRn*B'ߪNaSzd%){UtcQd蔰 lG@XT4qgKiOZkCڵ'(clSE$|kE .FTz1 g'tĄ(3tB̧{^mąv=9f FPǁ&K"ËtLÞ]8~xYZj(d .rʪDWpu\y]lܶtb3_iDlݱeāݼy󋏠.^9ڣ9-Ѭ<i'qS|'8vamoz&*,ar&Ʒm#GPY. ]I"u؛<} p_q8!}Q& m@*ӫjPiU1*jWWG.{"WUɡ⴩XT T$78H&hx\ @B2G*4D>F״@UWXc)ֲ^p!%tUO\ԄĮNRZȘRD(RH}1pV\%1R8'}o2=kPf^E&.CZr\aL!q_3{ش{yq/WL`4Jt#ZMH"nSfvJ{h#C"̘PBMJdVA5 \b̶`iŃ<ڒ2ʡѬ˘j3[vn䥽9ԋsǘj5WW-9v^{?i?| Ӟ`U\>ŹЮ,+BYcI\y #w2Њ9n6DuE ɥܫXFʠP"gEz(4^;]PJL͚lӌ`OZ$oi K"ҊM$I[}Cr?Z.9NeըG>ڍE% H:V*QAW,WUV'}_8I՝Y`uχsFl&,CБaɁk";Z3+v>ycY%o =^?-ضc#Yџs4Bs-JV=p`\yZYמNqR%7<-0}/^W6le5']N^&*8a>ڭ j2a8YjK"vLnJdZ-A95WMclbw!V&'ɴÊ3 Ƽc:$1eҬ+PY$82kjJN ?z 3,Tfj͙shYfgg1rzv\{ U8 =p~kpgdYl|9h9g=u鋗aI!L)v<5%C1`,d%QE8J8ebi d( 2 F+Q*\=Nό8J*4ULn:2QI7h dl$!hؕ\NdBRXBLPC"5[V6+*fn2CA)#IHū h~>J 7FdTa&p~ &nhxXrB^;syp/7;ٲfƗ-#5 Anơ}) ,b%%/m2i Fy_K/1˖QKl|\rTwiڭXuyOV|,$/?sZ̦;ֻ7cQöob *qeًzJzuEPϿD xjl(% s̓Yî+vkܹ!bnZ8+}bQ q8fUң+O+xa69ЙI>*Ռ-t-Y6y Q"Уc%bMWmDIC6%qK?bi64"%$UHX2ynGkL֢,T"{Oឱl\!/x?aX&R':Vktb]W򾽓,bLTCIZ,k hFrט{7첞SQ#63MI*L3 9N=^Y~]7u?x/0􉇏_Y>0-׍*B5$ׁa5l3o,gOa(* ccآA Kj-dMg`(oLM2}<*J1yؽq3;U5f)dwzu<>)S }l;CZ-aϪЛ>ř36[oYTL6j'QdEer%ehk |(˒__Mz{nI?3qՎ5?39V,_Vo,+9ƚ.nLA*_3´sU0iʚJZՌ\ιY>v?F28c'L`^CiՊ-ڴ0X2=jr,D\gd:.C)X!>j(ua]hjGꏚ*5Mٜ4o JnTrfK荋\ ]9  na6 1o!9Zbmzk "-٤ʹǟ=7mGcu尿b#&ϚRkQ2pB{JkPW=񙎳)2'K7̹#OrE-7~:as*-$s#dU*EB^O]Wo>0?eU%pWXwwҁ+#vpa^yUU}{LCAV(.LpH Y*2Z%aY8?='|3r:(>l0?2FT\Ć,+?}+YM45"V&a 'W%<*rtTN+_W ɼj&% zȬp,p4/9y$- Is$4(9x%c$yLH8 }kv22!B ![ؼ-=krPIS+tTTCF B>#* =STPWuU` ݰ&YU]6k=p}s3jtJZ**AP56CXIxB٧.\2=x-kb)E1" %_yG7_57h4JN2J}{PZKh@lbGS?_O-ZE=wv|.~f^=^>Zquy߻ec1wqv aieo[5Q՞kڣ_` [7+2CoN ʾZmо<'Kv 4^*CZB*M,j*#UtEZya5L؁3 "K@~Id%D $IjcE[E"y8dd4U.pk$fZɎZ`e8XGLBS7>Nڠ`e-e9,ej&&+q|qfW\YpUxǍ7no+pֈn2DH5(SzHf3v2 ,I=$T=yOGa{xXIuaAU4S=(BH~yv_SKnk{{ȑ'/\y˕auBwB.3[`2eUXux\j[9wOп025U/_<'u|5m컚17c3kTPX0x UbNtĬ͠p|SC.}`^f,im)89sT. 㾕pJ*!|woV){'df9$,t ZZᖁKѓvq)&&įLԀ/{k5ӞXM щ0~Q%Jd1ج;x%Ff=;?AnCu# P"UAёM$N,Mָ`J$Aق:jA\qU#K=9&7 \KщLI8,izm"~>iM2V )ub& ~ɔ==fMF3}?aw`ƦP :FUk-DH0P&()y&^c0?Wݞ ɰ r0;- P (ډ۶Cp;l>v#/II;xW`8|KM-[{ㆃoŏu gɳӟ}ivqzn҃?x^c3BBNNo]r | >(/Q LIPJ^S{#3U<:( Lk`)Z[R҇F)J14NXL=R9}%Ŧq&&Gٳm 堤3(tF)[ ٗFjXV(޵X>u5_4n&J`1ti ceȸst24ABR/]\1)[#dFy{n?r;>@|&;o/H%b5tQeTu-;Jw4 1 Ss2(k$`ۣ .V֘XX41Njny֖ a4dXddD;+Y; UO #^ar#T2Zc8^ c+ع}-.9O<_jbh^9@MDKQl[߸6qK3tJ 虛**G"FBgݔM3&z0 -$2ܨi4 25m{nwq>+ HeZKQwtP2эE{\eBkC]8z ~K3]ti26yG=,ʡp Ũ3lٸQai Ѿ"TXbg;Ͽ_Ǒx[Ef`cIc9!I*y2>> gy:kW326B~K3WAI]URa}8tw||x7@NڛY}SĿˏ?!Mw Ͻ7ÿq̥Gn?痍<[EXfY| ^<|Fino+r $p֑ ;1paCkDAIuH(<kc/2Ο=h1xaX4YPTk"W6n$妨 D*n@#*ۿ*evUl߶AIŒ H׈޽*-?'@^<| aekNj~w㝼zƭ2+*&JFf :EV)x*2KL(_#آ|O> 6+֯#k/t!4A]`P8Tyfn|5PǙh}xoO|^x016{߽t 7/p=y:sav"ꥏ-ysizPXwʴyؗ[kIF5 :bULJ "e(~8 Ws7R"T@VO^y)hef@"at<:5b'X+-`UuenbCK\r0Yg%Sc8ЋՔ6`["SDMd,޳p8~|ᙯ3eG=R,Jbu{JH&ȭ! Tt (ˊuřiN~_ٯ<*KkTxW\y//׷%^{\8uv7_?w:/vwxZCp( .DH[lRaWn1.ǫ2~ˢiY!ϴI5\`γk ,xqXDK+:R22L^:hZTUQЛ×+ʭ} deٲ0|b L,pq?#|?eVA}go~7~O{"5׷- ~wUt'׿KSoyex+0w 6d*Bd.K6%=5~R2"yA. =zt'8b-Ź>jMQ !'C+EoU  \Ma*}}U1ПcP KFF:]=.ZSdaX\רZY䎕l_!WS"%T2'ke,PMA!00Tx=pݰzK̚^i}'U">:8!&zoZl/WzΧjdðh,"h`X2bPgXx(u]K61VTUEwg_{+=w?۟-l,3~.z[p<9Y1ePUJ c)*r]U.sнL2 36ƻ7CW^v=} mkgf1gȂg#w$Vdq|<9fNeIUs,d ؿk^gE,)!ZkdIB#(I6D8do+߃5(op;aJC̺qYg+80Y-\8P,$`aCgϓOI8ܪyڝ"⺃xM(V%sԕa"dʊ?dXqz߾ݹc{=y&jKO6\ޯY,̾YF2jI^ (ɪ&H-+;1mkу9v]ǵZu&e pNQUgܯ[)JWѮ50"hJU5ru [rSP2|%pP2(yѢ5>J:˦PGyC< JG|._NH5DALQ 䑕TJV]DCcV,Շ`tJ~~ 0\.tEB+ dp'(KnRDl$ԕe@J-_>w?IxqϺ/pyv~HX !(VYN fy>~` vRfZ6NM Vim;|dԪꗾvF·'uWq'xwPS5HrZW%Z|PmlaIѱ2iiORq Ap^QjzfxWO k^= 30U @Iu8*8?~+Uݲdl|z +Of3ʪ$8Pʬ`## {=ʅ9Ξ:ūkg9?37Rj#N4d뜠M[ȋT—e#h_)+(0XMGS EV>ux'N{i[?"{1ڭWOLpպoQX͊B1QZVjQiDne8bh5dJetrX_'~O|saMi._2D0(B˨UYawD; !6˨]sS^+'Gi]UǾGޠt*@K&(u$, [G'2ZEu]FgM}Z(ٸ}3#()mhaYLWx癝c2C«hZ ;)C׏؉ oc l޺5V}Gk oכGN0s?uaNz Gk5{m]US9,Z\+މdIjrZ>QTë؃!x]c3,cMsIWRh2 V@1c0TUMnD.,k"0SͰ0%q֬b1/puqǛӊ 'dǜh0aэSIꃷm-WdģgCQU8RJH9U{7M͢U,Upj C L3}0jj&;5WcM49z8GqZt SG,<.8qv^~KvN-_wΟ|Ы>ủoG(up>?;l|+",s8>,vlbKۀhJ1#J$$0(cQ:0X3~ y33,gjZj3Xq` P2>5`#TuM];\k2tD{^PL)rlɍbSΤT-@[Du-aj#oȊ(9|@g@2!"UNQﺒpŭ0N&䣈ruJ_^e{mh׾Bde}tlѩ F'12>"&_A@L +fEyŰ*ee^ j8y̅HWVמ+S O#G}mNXx.]>)^|e=p%SHcٓZPm1f$r?hBmTvFȬi1q<ꋌK۩z, L\:1jOw8UX:ye9.j/ %j|% Spxl_<>M#9s"i?rYXjw44@h;Ϋs6wh{%7qۀ鐲'ے͖'6& ,pXmlY%[FS4sq;=^bY<潺ν7[nn"vrкrKׯ<34i9 K4g\Na[C R(_ID"<֌O0^,/4Wp}B(Ieݿrwt ,Y q^ yS ('`#<CSs6mbVDq@mS Mѯp̥sXlX Cm0s~Yvf']AJu^%&K7+^AQt87.bq}5ݳ1JH]FqzO?%GCJa c0F24e(' ro=Rɼ:C("ڽh2gzygpT&Uu>,\0OvVۡ/ 8'nЗ[[f<ٽ"qXGg?hT;%8[ U08adEIghY6s)f<7PIDt뮺`%J>«`9&S*G/Sˆ+o`nC{dYpW^(086μ vg~aL4Xi[ЋV'/QUV^]a!'NM5 ڴU(`\L#z:ܡ}<3HX1z(M U#[[E*J=R)&QK'r|~# wzy۪{vwϞxm_^1 m?̭7}&3.w~S\v uu$7Yڄ4)N7d* ͊P2-yF"=ݼ [$(XhC)E#! E1R)9p$ #p!" $,GZv-׮]w2+%$V,_-sZ T(  >|mBG A; _0Wڌٖ$O)ɜM6ϠiKDh6Ssyk~)tDVrF-K0g] Vb/aoBaKBCJrh0|^-#{qn>#3Atu$&^|'||?%]RD<(qP({QxrCCS53j?5)xYػ-K _5>1Q1[]OˬX+L0@e)Q#tB[ \DgAH#='W_ Qj"AwWٌO.RrDbJOf*)ɚF(;fRP*3w&֯یng401& |j1s&,W^mO*<53nKDqDu#}YэL7R(I9UꫵcGsɏv-j"lD8rOc[il#q2:V$5R3a%'UA\'xhv;z2)/\sGmU;_KWtl۱?tῙܴsI?ߌsOO~jf66$E\it%^UEPTq\#*!c)U>""ҶȜyY2a8NsjBtJ7: ;߉8XSʯj o|$3L&+,hokcA6 D\"kdXF]]:>EVI3OmI?@v[Ay nS)IDATNg2(-Z|bez֭ـ!daxkH󳈨mHh eƆH m<<#qL<2H ذNmr%1ΕB.AqY3ʀ5fu#ك?}BS3!Zg$ 2;Dakcr tlu*y> u̜1#q@82Ho?[PN6U7B0U ū+ؾwO[G_-oJ]x}|׮qVOIdKV`Tuk N.G#T 1DjY [CP\|.C]MF}jG!1DžI8q09.3QIp*!{cv9K$,(G"$GŢN 99W J'=FH) >jNo9Y<ktXF(e|hqr@c3Gpod硡j|hmhxd~ `׳Ţy3{7KqF<~aKhcL(˫MLc=Mjr w$86ޤI Gc]Ν˂囈(ex|>JNKC+Ye"n$1ncyCmJ;pԔ|: >Q>F8["WaW*'.8ifk$С]^]~0o] ;aLqFG)Mc|S>JyƐf\“O*K&Ba) 89~9*5uFc>r/ ^ mc}~mFsUgv bذv-M H]Ee8 t9g\G Zc lXDձp\rUMR(KhCX& b~QISe;ԻD`vI}R!T dyFg80)4ӭD EO!g5Dug܊*+Vƙ$o:Cteɑ5UkPCbc(&('J eʡ<24*.GcC=c"ϓJtr}[yY)\'krϑuϹ = N>zˣn<]sgw(7#%WL2^Q%no5.H:&%&Te(hbŢ*:K8AT,B)JAkGXMF.x$JU08Gv\QV%<^άX,*aU밺 d., ؤqǎ8G-l|Q. ldi%iF &ҎSH#NPcØ '>К;ӟmgEι;6H[ϟu ^%DW}޳g>846>qi]O?<֬$qT\!e ?X$9!SXNO.R3{v wd\$*<ߚX:js_bnt^eWxݶv&[e;iljsY斳TjÔ=؍1 GP0&"W=ISe&48O>KgW5MZgAGz/ k+쁝2kAA0I,ly1ܲeKpX1)O `02fnMRx'2{ټc7-6CʈDo_qHmQ%K's`ںhՈW>_OOqf7nƊb5[S*:v HPݻDE:OԶčrhkk\e4$sDmJÜZЊ-@0r/Mfcki<-9.I>5 AHDlIbgnDHpxJitL 1hk?+^2|Wcޓ]}cY~d[֚ww?@SC#kV,Ú(IpLm4q#d*V`\_ U8s3TTI^rsꊻspFրX4:,qo?Nc9>Ql(rOz(+(N@ E r&qV<ǟ`}JSGPŷPD$6[\Yh4| b& Y;8эy̯6X;982q|*.}L w[?yۭ_3{+ d"?yb6V-^D̙ R(7vDIcWpIlƨ4&;jwq 6,!2<;@ CƗU׺pZ@J;T.EXLTуqʐRG.!(萒M28^wsիuzFO2&ƚi2h%R %PV!.Q!FS"L"܎7O(wV} o_6qV3Cã8xB4P)0DFmL`""aBG'SǵsE~xx=v&^2`o{Xhaw`9-sXdI{kZe]1@'8wsDa8Jb"JX'#)CJh8&s(D KF@M0_c<ۈbXU D%Q݌ v3J5H SymxZ`ӞkQ1=4eͭQw/{ߪW% ׀m۷|ƫΞ}lqx{{ر'F$.I H\DFG.j`9XT skL KKڐ) -ňcw_[~,XtC m{Z\tf *Y-!E( 2(#ܿ#!H0)r͖az };x'NsXV,͛ZImMmb)a$V'zN<& DJbm,j$}Ctv+qmů^ (d娟؊aJYTVwgnv?gˣ;`&ޞ:Ի_54~჏nҷ=CW=}l^-q[h?E>Fk.:F`@ZN#h(b5Z\14Bz)+i*J IЌ{~D||[H}棔O>[苌sC'&JwlZ5b]SZKg0Ot2)xRUZ"ch *%m),R@\W]A˼ŨTaוV ۭX7ExD~t˭saw`n/|"c_&t>qպ_gWkc&3aǧX*F*IJ('C( & " _JtK",g/* X$acKzLL@g~>O~B|6mv^?uZ2az 2Goe+}oՅ׻zƏvy+o2jWJXEGQTP&IQۻdCk;,N!zo_Ky),\joEx+0_8780xEyq+1]GoXƺB|EœLc,:9pO>" "J0ae|Ewr9b٬x 6]iXj9v'Wɖr'nG~N? 5>~e-9V2K cKl\08<~xgNs-W)^.0wmࣟlxV?:k8t9޹ce+~1;W>-1}DC^u,zW(=q%ͬ_:R /&-tFEX<`?ҟsľ\k:n7w~i1;|ndW]E Rv_xwӘ pիR,3I%yS~/kӘ˄7nX)erp}Ә4oon}/LGfSIENDB`patchwork/man/figures/README-unnamed-chunk-6-1.png0000644000176200001440000007453513565477507021233 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATx }A( ("`V@[+.غTVUѢj]JEDq bEEQPV-=Nܛ{or3dyM2˙sޓ<93sR( @@ Tv   N7  @F@3@@@y  dT4l @@  @F| @o6h%ؚ5k|믷zB/o~1bDb%@@ *5~kmڴU%\bcǎͥz&U^x.[zuR˗<9rzR+iذ[riӦ)SN;47M5\~ sύ+RFj׮):<bp3<3:^sӔW֢=RteӸ2h kٲg43  !;~gLfկ߷>Ƚ.!gyƶon|v={G젃~ncٯ_?SIaiӦ٧~j?ϣt) {n'x~_sXuM7]?ѓVPEB믿hq׳yYg~g_|񅫫zl̙crۻwvah"QV-q֨Qy3@@sѡH͚5#^xa4 *RRHiv=~7pCM/Ztid˖-e^v4={@MW!C"E-zRHPUiQ =b{@H5BE+CхJnRѩ-;ȏi@@(P5hYѣ;˯sSO]wzG鱏:RNlGu.:ta- ~y:KES.{֧O{ϟ[oTuz'c):\׿p}?A-:\7/z@c;  @@u]IW'J:T}e%=ܬᅊ'\S-&-]ԊzZGE琚.:Rң0.j޼uW_nT)Ie0I;t-zkW"@B.VƢ\Yt>BWT#8"·UœؤD3;45LԘ1csΉBOoZTWO*svJZUV w߹Xo!a   .B7nz8t׵kW4h;<>}:l@ɻ )vZ:T'N!B(% ۤ`+wu,+].R\^Ҙڶ4.*Rj*` W:T|X#Gr'X8# @h*j'|Ҋ[rf&8|0lwn7l:or-FWog֔ ,.q6l](ʦuڷoo|-,yg}vJ{/ԩ >u~X|sq5й dUDIdzOw㝪<_EPEW穫rYIwGR@OB@B/P+Ewv/Wtc(.>+4Rs) "EEo2TcuO .wWHQ@-:]Tϋ\7Vʻh$W]_GzNݴ.nrnE= ^3}.Yf]PcSQPe.NrtսFB@.۽ztmۺ q #z7o&CCQQZjϩGe < T_|ݱH&(u%CJUSJ˗  @*|ޏ|G]|StWF^"d]k:CZFW4iRjY|=ÚJܖ(kS$@7#k@Pq~IGWBn͊nup @@ Y=Uvv3gtwjwjz\{r! @. D@ @@_oU @@ aK@#<ڙT@heD@H4v&UA@ @D@@< ͣIU@@0a/QF@@ @hgR@@ aK@#<ڙT@heD@H4v&UA@ @D@@< ͣIU@@0Tv}7v5Xv̚@ O?4͚5>؎;8o(onFZծ]Ǝ[(H(/@sϞ=f۵k5iĞyիWu䳀o{1_]tE۶mٍ!I %Kmǎ6k,Q 2$2 dN`ٲeָqckٲe6ʖ@пP_Wv7G}~H]) qݻw /ණEk׮iӦ?OSYJ "T F)E#NYҏuҩS';wntY "vhnO.LGV@=M?ʋ9sX.]뮳?gkz@Հj8qܟkX/y H@r!VZ5+: H"qƹ+СC AC=dӧO޽{@P&O?# z#@ TΝ;!̙3P:6jԨhvjω'ZzQVZE( nRwnznd\Y3@ _tMݦK3nͩ:ӓ I=D]@@H"$AN  "PCbŊUUM65kָ .Fٺu|)q+W͛ر#B>L *n"l۶͇'΢AnL4ې8Np=[l)stfC9ePI&IIڷv0oimz|͒հaC۰a&)vX߃:D~&=3;Bܺuoj?U^jժTE?W W$z@c]@@@S&c@@t@c]@@@S&c@@t@c]@@@S&c@@t@c]@@@S&c@@t@c]@@@S&c@@t@c]@@@S&c@@t2뚽˶xb  #@ZPY `g϶;vݻ)S @@|&LwyǶlOe3o<{'+#! !@Z{XS=3g,1  o_E""@BЄ,OlѢլY3njժ~7 5k9ٓBe(!@Z$ _~m߾ݪTVPk.+ˀ@@ U-YĆ b?m`S JB@(]K)wz?orc@@ ? ! d@4l@@г+Vo˖- h{??|;ꨣL#7VE@ Cwߵ6nhk׮u=W0GVC@ Cyĉ ,mz… hw\ծ]{#  @(L⋭jaTk#FHfuA@ V^|QFVNСM:՚6mZY @( .¨olݺ}GF  @!Z{:" 9$@C;   @Z{:" 9$@C;   EHe]ݞ(UTMWE"D2Zj {_2+#u:viꡑj֬YFMӛz4l0LY[-/[zrl x5j1x5YPIVA:UL덁w;~>OjӋUmʧOi?-oڬ0Un[_Iu׾_~T|}kҩ7h)z֭K8Gd7mdvJ. ~7ol;v#˄y]mEe۶m[21AA$͛7wuP]J {6a͚5s)ݦ6ܹ3MX&MlϞ== Q{g6lG}kA}eg}GlݺW~Rg{O?W {? Yn   hT,    hT_P̟?V^P@hhw]jwgϞvgZ.]OSj4  O_m pWVzWW_|1M@@ O@tVk yGb9  Ќ0gw#[,Ѡ~ʛu@hVzg' @G]Y @hB>com~;XL0:t:PP@nř?̚nږ.]]F$!  Ɇ:D@ Xw>UG@!@ u h| dC4l@(`T@Ȇh6&  P:  lM@@@ xSu@@ Pg  @ Χ  @6@6@@ -O@@lfCm" ,@Z;#  ͆:D@ Xw>UG@!@ u h| dC4l@(`T@Ȇh6&  P:  lM@@@ xSu@@ @Nj6ms/^5kMW_}4={؆ l۶m)4%E 6M;v3fػkv튝L8^ @ @MfFkFyƎkcƌٳg\`~C  5\c'NÓ;k׮֮];{s h=XTwy繠'tma$qi#L}=sVre{gl6rH{[o.]؀ /[գ${ӳgϸBi_6k7 /@|M &X=lذan_l3gt38*^ @Bn]vqQ:wOMTK/dwﶥKy޼ys]-[ڴiI.]۷w=޼J*u5 v_ϫU`W:uXZɾ?Vw2޼ysL;wGy:4i5?zrkh_h[A%孿{ ԾƪVwRJN~x}wSO6O7.\hV9w\֭[mٻ;~tI3g"}~T~%u`(O?믲ώ;O}>f~Qgtz}R?ߧ1ݒ$z8[jUVXa 4N_}j*SX-t>6]~;P7V~6<ŷV˦:mTxֱDevb.빗\SVYҙ3 1~J]m˳n?,lʕvKzɴŞ}v TRY~OQ> UE *_SeU^ "_M Uh"{,QgE`Kj0t׼5kz?DIv6mj7n,q+:QFnݺ^zz37X.L*UG}tG+СC5Ee˖@/Tҏs?lzy[nuu_:PN{J^A%E4*5i$M j;~;vh~͛7/.ma*my^`{(T=@6A팾cb}<NJemS߃ $WuU~%'ǯO?W:BϻY𣼊Uo~8?}|NN3gNU`%7kٲetY䞀zzma+-%B 7LbWFjN;44i蹎&Fƾ@Pgmwunb{mɒ%.0  I@h#Ka:-x!B~  W  @F@3@@@y  dT4l @@  @F@3@@@y  dT4l @@ .E/&Md{-P=Kfr3K.u.\ٿ>իΝ;*n =tи۟&" !ys mӧ۔)S젃ZQ:t`-7ol˖-3<Ӛ7o2QrQ4 eBHA /Q[oeo_%(GD@HO4=?F@HQ4E0G@HO4=?F@HQ4E0G@HO4=?F@HQ4E0G@HO4=?F@HQ4E0G@HO4=?F@HQ4E0G@HO4=?F@HQ4E,|r;ӬCo9]k9ctxty) T\jWe\غuu*UdHo߾o/ʽsN;Crʶw^Wg[׮]s@4M\\}ܸqVzh2޽\,ZjEOv[NB! @z۷owgm޼xD)W˛LC@@ ͒M ~YgyOs3ͱF6`I n:ncƌ-2B@ 5j=Sn-[X=lĉB{9~x޽}پm@@p)D޲G}4мO>{1܏UZwɳ>G  4$رcG7duP6lp=]HIW{wJ`Ufˠ`xڵkM6]^|^YzԩS -5M^8zScmi&݁H KlCnCNTRTɞIK3+eE7n3)e OV@P gTƊs|Ϟ=e,ެMԦM˨C?JA&=qƾ6Io8 zd%U <}[VR"mmYQ}]3U;BmJO hl0@L @Ky7_I^?d{衇> "E0z╽v̘1N9[v5k>~6T'[T z;^z 2y j^Ǡ|FVAK샠aLʫfl+Ca)^~~?6Җ m |5k]qnVZuϤ3g%y! Q(E8Ga)%  @0 @@ 8l@@ h&! '@-9# $ M$@@@%g@@ P  hp  @4 @@ Ζ@@&@a  @pْ3  @(LB@N48[rF@H @I   gK   @0 @@ 8l@@ h&! '@mr޾}-_6mS`@hxU%3gs1֧OС=3n@@pnթ'w't#F-[ڱ7 @;w﩮/X /A%[o7yd^K"6 4V P"tǦZJ*X%@@ ]z@̃ۨQJ//1  @5kִ*b/sbOR @ a~:7ߴN8իg{?vᇇ6rM@ <8׊[f#a  :uE!j׮m#! Aݺuf~vafP@^4wq ~6k֬uֹFMS@@BZ^y7nequ^3VI_}U|M7d+; -矻ׯȎ;lƌڮ]Fq(tꫯK 7`/R4˱cژ1clvzzȐ!`klĉu I>}_ww<*^ݱ-/~i;w]|ŮTmmfwM:՞|IF"WQoJ@XB5Knw8tbӟxb9={gl6rH{[ou0.BN![׿\/S[k.k(grߺu.0aÆ )89sٓ62;2"GmjժVZ5.L[|[믿={T$ԬYlڷoo*UJC s%)Uܹsr׮]]ݻ])5ofrٲe֦M7MtH>c|pt^*UcހA%UٯX"azE{P(^LhCd[ Z+޻NPIvʯx 6{uEO>."z…֯_huFT"RYmڵkmڴiu۵k.\L -P(3smfyzꮑy ɴ|]veNL%ûzU*~|AYfnܸ~_A%}>tJ2Qv&qnA|VfN`舑N?[Jz͚5+Zl_%\^;c7A>Yzu]iW;:enҤ3HI*NI)+y#~yz*)(-**ϛcP}|GR ~2gΜh՛٢E ӇD_j0kٲetY=Q`l*/S d0)SE wMP *m+^|2ܗGܩFgqqRꇁwGUVIQ/^zL>ʔXyu,3*/ɓ'[]WNWcjԨs NaxݡJBzx]GcW֕봑REŋ]új*w[8 ?nܸ-3S #y"nh8%Vs̘1q<_2OjI5@r^w}ܗ.]jͳիWk{v= Pj/2c\kQ"=>#v_]BTA -[죏>ro?g_^kJ>R@B:5N0L^7PiFV@ 2֩S4h`f*As7o^b:@Bm1?3ӏش{nIs@V /tO>dоn:uTijr~+V0ݞ[yկ_wak֬q4j[GHB@G:wl'tuY֫W/w~ĉw^#8¸}f,9'tԨQa;__}y饗ڟk+^SO=նnj7n?6pR7矻Àwyݴ͛7e^;c9!0c {z^WiĈ^޽{Nvգy'MkUV/@'n+ U|zB@ܶm[uYOW^l!9+Zj5wuM>N?t2dHbS&M䆻O$ @_|ń h4eY0}lZ"5~j(&ʘ0a񹯖'%TݰJjՊz]ZtK@>UWkzd.7|znꢦu.s(C@i }Əos;Y 2@x_:Tku3g!TF*dƚ6mZL$H]@,MlҤ:߶m[޽vag @ d<Uuё)jPt.׌S.@RЩstHn@|XMx!ջzP'{sWwz$@] >{lW t̛oz@g7 @X2j 85O=viDhkγ>h@y}_zݎWX#w+k@PƑԸlDH,@|ԩ:v "bPBȤ@P]%nI :c (T, Rr$@P6L&}T;IB,TZqhD,y&`wf2dXr] c?O7@4^q֥K[riGy ǔh/e]憹QMx wp׊҇Y@w8]tkǡC`#F0ݵ죏>{ξ +0Pv(,W]/}IM6vG۞={uA=s3Az%TSN;rg"_sw;~ݻw#P&Qg'vnݺ|=WɴA'~'P{; N9MGu@@R M@@ MGu@@R M@@ MGu@@R M@@ MGu@@R M@@ MGu@@R M@@ MGu@@R M@@ MGu@@R M@@ MGu@@R M@@ MGuSرc5ʎ?x0`[.6{lkҤ'?@ Lvx.TK.?  sSk@@ kYg  @a ~  @@Fφ@@ -N@@ f # )@ZZ# Y =F@ S0;F@&@5z6 hawj dM4kl@(LP֭7xVXQb}kٚ5kjOBY`…6uT۶m[\5wa3f̰w}v762 @I&o[[hw{'J4vX3f͞=.o<2d-X8qbt $0b{衇܏;}W=z'tma$qh#@]@prϞ=O M6 `կlÆ 6}t{r3mȑ.H[K.n /oիWS)+ Pg}fWvСk wn&L=zذa\_|͜9zIY*3@ PUTԩ,on7o6_uٵkW{饗lݶtR7Oӛ7onk׶e˖X/)7@۩T7+旷LSd^aI=<3aRxKT%2U.;k|G7j'tX_~yj#Νkݺu+Tu AyAL\ְa@ރ隣x։r뱼Vk_^RϧŧkլY[=tM|5kfׯwϋS~ 6m˥ZNlC__6#t=Tn}XdsΠK/{cއ~~{*H5jm~ k֝JT&ڶm_vAmhmTF(sDYزeK@^t U:)t 5eFUIA9slѢ.L}qSҼ-[FƦDWk~ Vyb?رeSO5A|wqѬuHmUVI:ӼUmƍ`ϕOn6 ey;"5'O>M7 Uԉ]wEˣ:thɒ%oɦ^x-:m4ScJW'#䋀RHj'cOկw/Ii(#862_v>@ d/{=Q?"Cpoܸn얹K/Q:tvWD矷}1@ z=62Ȑ@N:J9SNrc/P0!H0+䣀I%J:4zhw~wm'#dJ Th2(:GSg"!@! 5md!+9b   +  )    +  )    +  )    +  )    +  )    +  )    +  )    +  )    +  ) غu]}~۪UfvZϞ=N+W& ! @n TQ D";Zjk.W]ڴiӬm۶VOo*U][n6uT;蠃J]  > u Y5A*rԨQeU\9n{ڍ7XzD@ }nذD~%NzUT䞯Y4& dV=䓙([+̽S`+1-vBmݱf͚v'M @fϞmڵb727+rQGȑ#]֭k;leXtMիg;wv%"3@@ ]7c=̙cM4z?>7nl'|7+Yfɓm}_)   T!bK5uN;{fq… jUQ  AgMe^wމ >U;wڙg°E@ptFk &$p:@0\y65I:W[o9ٲr)ve}2˜hRtRD*LC,^>`;cRd_9i$)w< oƏ7V7n\k .,'ئM ySg͛]IE T^ݾ kԨ;[j;.LC@ d6] `gl@F)x  L( @@h'  R5nZYI[˛ULl'H'ϑzxe?z{,{yz/A䩽D3TA5y&kO6l9gʊ=٠As7h:u|7v2.W^=j׮mH't=rתUt{PIWׯ_?7l`/lnL> <8Ec**Uޭ\ըQTR=kA%9iQ b곫ϖm+X?M2m׆Ǭ^pO啌`ԶzҠ~&).(k"-Eo 7͛K-p N԰AYƭFNزeر#n/oa3gδƍСC?mݺնmg҇qƍȨrK.vm?Oݶ7o}TrvJ͚5s)yE;趪A&MDUPk{qE b}aÆ޵jgLv)V־MJ?T{3\\P>B%pW۳>x=:vur .<3&jGPX@ MU3+{ﹻy[UނÇ@ΛeNb) Ph{n:#'hN_~;/P|it_w(ۖN8S<"er_;ja#Yݺu댔D/mۺmIoW狽+ny=-ܒt, .*Կuz@gׯ|ꐶҧz*ЋQ1h߾;Lqc=f|Rrx-\͛箨?蠃Z@2' ]uhիW[^2Vmz@3F͆4izv 'gkȈɓ^鐺ʒJRY+ipu)bF*t @O Ug}f]D@@ uXt?,@@H_C  @ )`(  @Oߐ@Ȩ$~gvsec˗/;Jq(G@+* dS mݺu,F0+" TDЊ YН."6lXKM_r%e˖--@6!  yʕ+'EpK-p ý(=  :2 ޽{mӦMuV?#@HA4,+V؉'h]t VNWO.^nꪫrK,+•mǎJ*6|p7n\NB!aYcƍ3ZeЌrl !K @?sӹaÆhU> ' PRaÆ֩S>QLɆ~+~|ls@A N G?;w&,SZNυM65]8U}30MB,.5o^V)[j锰?ZlҺe-\F {sT=z HPoom{l\K/uf{)SD2^$@|wqIe:kv׮]|TX@%Еwt>oǏws>|vᇛzruBB@ lmQ^_ׯo )liС? a4{# ! N  @@ü(;  B49p@kӦ~K/e l@ pRw ό}ر7祗^j_o߾)[A@ O͓I5x-UY v5ktmqVR%;ꨣLm'#dB =۷owĞ4iRرcm̘16{l ouzȐ!.xklĉqd֭kݻw'L"h"+m޼y|;ϦNjO>-D"n>md' !_kD7mGxb>}=vڠAln{nVqƹ+2 a>|pkРA\m&L`=znxۺu͜9-CG Ȁ@Ѽ￷)SDvٍӨ:wmK.u4yVvm[lP\Ӕ.@J:ԪރDIׯ=H\thqfSs3`T=tNfZ*XWZ^Qk[zo⦠Qz@߻-@umh_巙~Ov}C Z~$ݺu+ꫯlԨQu `v`r16AyHwQtT_ԶW~׫VrY2d*2$Z.t衇ogŊq *HΌg`ڵqvw>-Gr 55/W 3 ?6W,[2 @K"|ݭKTO@隯y^-CIm U"]v%Zėi5WLT=lRbxDWtZP3䘜ѲqF_lw^u> *[g ԬY3E-#FW^yŝ~YO7*5i/ʚLT֭[۽݌> J~AW|T"ꨙ}$SV?ݱ!{6 +}G_II+?k|zL^E}l/e&՗ޜ9slѢK rkٲetY XKA;t_^x#rԃKzުU+HGȨ@.B*MGC|gdO<]CG:^pN6+?#駟_^h?l\ݻ˦QDwߵ#8h#˥c@ oz@u>СCM+:St7=ǞL)Y"P rt8!Seo߾6c 7BFσahӦ o\lѼxG?/6zvI'%DT+patݺu |!M'eFw]܆9zhv:KDI@t^N 1^ 㷜7jit=|jtwڋNgϞ"8sօhg슴C;w  !oze{xn0={%; 6<@kڴvm%b  @(@C($ 裏+WF"7op gk{sϙ`{'JF@R` TX֠A۰aC{u=3-[fSNuwB:cE_ҥKM]^Q(0qD{ h"k߾}A=_*M/{z PL@cTRĕㄙ3g~3]Unٸq㔷O|qn۶-5/(:˾ꫤ;ܹ3e]H?pԩS$\em֬;(LY('@srP(ѣn6olwv֨Qn3/'ugڲe{\׿g}K>蠃I&qhjլ]v%f  0hРk٨Q#gt%ߕW^gְaøϹYN phN 4ip`M wio#sMؤ"IFS zijEc@, R@M݄eⰵyhZeJ{+uU[۪^T+ꜱW^yŪVj py-#+@/#P;v4]tw ?>-vԩ0--?vgt*M7d.m#'!l3f]wuv[ng޽{gD*TRW:,c =!y\ML˗/Da|nD*UdxlP t%: VT@ ; W4v@lhsc.{ "/!x^!@ >6bĈZ\ҧ~4, @ fޜ-"@4falܸq.K#p) '@Iy-p 'H |%@@ Jv7E@/@}@ @@ -Me@@ fP@@@ jwSY@@ @((ЂT@Ⱦh%@@ Jv7E@/@}@ @@ -Me@@ T#Jvڄڲe͝;:uduMWn;w#yر̙ct5l02~L {YfY6miӦ~9aժU]v%ٳg[-l}+TZcA~?SjժU5Aо_PiVF ;#Dh? b^/^lݺuJ*fD7͛C(vX߃k׶8 X֭m}񭬕+W6޽۷`.b7r뭷&B.9pȰart-V~ڵE? ֯ȩĒ_3Έ\{/H%wO<Ē](tբN$;WEYI,xW(lg%@@ VT@@*$PT5 t%֡CܹժU+ :ת]vVt7sY98:Iw5h ΙT=4iv|sMyUeNڵl2삞vPҩyu~@=yAU9~[mmԨ_Y-:!6"S@@8_ @@Hy믿nе4 C25k֌ѐ}Y\{:^,\Ж,Yb*giZ?tَ:(0)JcR]C27^ܣ Yr;;WǪU죏>re 奰~=[εsH]o֖/_H4[Sirh9sթS?ز{/pE+.N'(R)5C.ؠ4fܶmÌ3{1}*8՟4b$h<3[m۶ِ!CL㴪NjN:餜=竴zhL_WaÆP0Լy%W]u+x;裭~/{?qƹϳ$&M۝_]4GSZwqm λd*[\h'4.?oX~b{ov饗0O}8m4SNI8u.|%[c?c|+^M<:S%qF:thW^9s=7:hQ藵7;đN;-2hРȔ)S+ #=klC*8>C})| ?DAP! BfފD1E*"4AL2)߲-Eq&iZ$%K)fs=^g_pg}Y3kf|78/(c|7Sԋy9>8TC 3f!WWx>y#?[F7}zYy'y#[8oO<FZ)w?38|b7:?RfSDHJ؞;w΍=1;b~+ CLc 7re1%1˹s:?cuCceڵf~.let+CWGdmZv[+jΕ%@(@&pw~F0UԄ!HhyB~c5tL4$L0]bMyE!8믿R*;|&Ol#)G{ yJՇ,z|׭[طo_%Ⲙ͘ywr-bk^]Cx om)i6aÆ ·2#,{CW\ѦUljl|DP1a3 /\`?N(Ao>5!dj:0?{~8;pccǎ(-a0{%ۅ)N+SK@;c wł+Pf)vT*yb(0;!CdM^z=CB=af,٢EjZM6Y[ ҆M8yKtͫV2۴v$geUh2|A-㌘z6( Ie%Kd/ cUş{g̘ᘺH?l=`Ըo۶m)O,ǕAYLUʶE7sBR vXH)?y^3"l T2%Ņ3tlgjZ,u\⪰rJA}JP7ԻӖ-[n =.@@ECMР+љ`\k m^%e[HdAF? DuJv^׶UEB2.PcJvΜ9Bʯm4(L[E>,ahh_ݔl懭`6NO#M+a\ Oٛ"9T+#!o5Vjqp 7`)Gtr?zI)rIb@k#)ڼjt`prRLgr˪ Z暾[D@D@D@D|@K@- %]}@ %HtBD@D@D@Dd֒[D@D@D@D $:!" " " "PK2@kIW-" " " "PB@h %q|M yGzš^xqw'M~w7el2d;$ 2j([d>CtDhaqZ'RB &GyBvnذ!O?YԤʍ9**W=IXA :B0>cn#0a0wKIqYky-aM:7dӧ,dVm޼ 0:ᄹ_ܽޛ3f;$"qKYfY@UРJD&Xzߵt^pu|gv}O87kv~ *" mA+<Ჽr^9s>캟E*U䣏>nA&"_~TF@{e#!ݻwwG ouذa{_:ٱc馛#Fp@D@R 믿Jwv=zp3g̒t:>̛7ϵk׺?g_@e't h  3H.]\׮][bݻwvGoSPNrzè 5Fܹsŋk\E W&>}Om~r%(#D[pF" F'|<Ç;|Io~EKݺu~D{q3f~~nY6nhtnѢEnԩv?cǚ}@"PD@ݑ" z+u۷owǎsgv}u 2zGn dɒ1@2X,Z} /O?ԭ_i'p'No_fpiڴi|2@haCmu;S{uMMM6Tw}nFۆi]RKΝ}YZcGӧ;VS[o/1~mt=ܹU[#Ѕ%Xݤ"Йkǐd rgϞHݞ={8 ? patchwork/man/figures/README-unnamed-chunk-4-1.png0000644000176200001440000006574713565477507021236 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATxu.- *v9l !Xv^PςNDlT+(rQSAl ^}71fwɤl>L$3LNAIi2  i(LS9   僀  VдrS  (@@ @@@  U4  @g@@ i0@@P>  i M+7! @@HhZ) @@  @Z `իg 4 FOMaacʕ,1oMu"'Zj.UV%XļGݺumѢEySzuS^:":]-^8b|"ojԨajղ5k$XļEEEVfM[dIDhyeڵ,1oÆ M3@ wٴiSB v֯_rV7oܖ.]j -m9֭Kh9-ӢE _ej[:'Z-[e˖ƍWmÆ wߥ@V,e&9[@@ ֗@@@@x  Z;  @ho@@R+@Z_rG@ -  @j@SK  QQ E@Hhj}@@ J4    M/# D F@@ %w@@(Q̙3W^B;m; S qQGO6rHܹs:e! y%׭[O[? _xᅶa @@R eˬqeH]xF  +WG}.\ ͡ UT oXUnݺUtuRm@*!C+P ozSO=A[fMmuԉ@@&O<Əo<W^{KN  e:nwygF  F oO\@@* L   If   5[l3fXAAu!T  O PuƫGq.Z6mdWΊi  @y} ^+T >uΪ@@ m`2O<*))q/__%@@*VZ1a֯_o5jԈ9   mڤIwv!Ezկ_?4@@`&aÆڵkmȑ@3ϴk&XarC@T7}/B7  )S)%c@@ @+a"  @A  @0@@ h I7J协5o8oY5zz"[{M\o^oYȫȲ޼޲ޫ7>WoY5eyeWo|"ZKdy)?<@ n+.' ?z$5^Uo~e].v&SWn>{V.茶^^˛4իc!7N+L'|C+dP; ë񛂨_jVíW-iPزev T z֭[K)uuDqv-2PRoە^fy 5GMڙ2ԩc5k֬n3j^ӝ&]reE7Za 4H*uz/U2ЇGYjU%5./L2P;XzuU2E8%SW}׬YSIiOFY_dU575l0#e9'զMZXJYz_"iݺun 6$ӶU/x2?h{X\\bn>mKIL27nܘp~*SRU$.}2Uf"틞7!ot x  Wyi,  y̯j h^n d^4`[oو#lE" ț3GY֭-ZJJJ/vey G@ӼbO:$3g2NK& dF4?C?_|P  47nܸL˖-F@@ @ӼV;ᄊ~yxE@rZ4ͫѣGnڵ+¦LZP  9π{iǏw%zv, @"|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@,YT@|YӴ@ @{_xZd;eoܸ&Ol}mڴ)|@T`„ z<;vi??k0@l @WXa?8T/;<9s믻iׯs=״A>|VRRZ^{5ӧ]s5jժgd  4i|ͶlٲȽk 2._4O!"PzS8&MD8tP;SN?N={^zɺtb_~ /O>8y)pe-[Xj矷)Svm9#@n>S֨Q?l|+VXXh/۞^BJ P@Vo5nڶm͛m޼yֱcG7e˖Vn]?ֽ{м쳏}7O?qZdwͯ`J5kt~O2yQmWQ=>s{CT_q&C+#p9Cl=W3z%!@ftf/ĬYܾ~j4zh7=MGJիg:t5jm?ml/lڙhM%[ևOt_XLtƚ?L6l=ӡ:.Z}1 6t@.\hEEEy5|C= hw}ݴi| ׮]r Q:ug1f/_<4^_ XxáfD=%D=I&'8"OvmmAM폼}ҥKxOW_}͙3Ϳ{}`x~^֯_?Y|~@&۸D*2n4howߕ2T> @u藙҅'ͯ`/zG/E]Z<"qͯVq (8V &}To'Sk׮-wqadجY3[x;l=OE(7AjՊ֪e{<׭[=)闺{`2 aF(#0{l3f=eUh?{0Ѿ,#l馧Dʕ+wiHRlذ!2 vuG7k[*We*w22u_Geʯy1V8=oi`RJA*( dDIo6n_ aJ O:e?/kxںu{><} u1uOohU\V(x.弃;~(%Zvj觝޶o~^~lv&[+翌.sĉ4[zn45jviuO]vuL_pI*+M*͘)`S^~H?`@ ^X*Cwn݂!@@4"@@~ ݂!@@4"@@~ ݂!@@4"@@~ ݂!@@4"@@~ ݂!@@4"@@~ ݂!@@4Tg"@:/~טs 8F._M2e͝;bWqƘӛ6mj]t9 k0 @ 0V\=)޳ /RC ɡIS@rK`֭vEم^ {Wo+̼h5@@\SNӳeB͚5*ԣ pRXIT@%\Z@U`%QE@@ @sim@@ VD@@\ ͥI[@@* @ZVUD@rI4&mA@hXIT@%\Z@U`%QE@@ @sim@@ VD@@\ Mڜ={֩S';Cmɒ%i)/pֽ{w[n]Zʥ@@88>_~h|Ϸ={]ztA[:uB@@)4hyVZPI%%%i&{GBR1пl7o쎀1"b9ȫ޸qyAC^  @B qYf>}7v}0;0ƹ\`~QF{v}8s`6@@ xnB 4fzqn;ib{t'n|j߾m6"@HH4!fu]MN{w<@@\ri27᫯/Қ4iэRjD  @pYNj}^zż"|I;zak޼}}E1 @*܄2dvi6p@ݵ "MӧOnݩuҥK7 C@^4U4m4|xu\yV^N<* C}jmjԨN{ekZ6m*C(+UPL^=T=YMACuI͚5VõA@ LOɋNچTHkڹuքmKkժrzuݺuqze~+H2Zrϝ}ѣG\fRח7=#T*y/_<"W}8E1S%oAQZy_0o12P]4>8:ݮ0KC0}xǪUE~յL!'.m/֭Kd1D}j<~+.P'r wsDY~T|ӪUx(˝S$6gϞֲeBG l@O0N=TOAd'NtwW,@@"7G@ӱB>w/=u>)m4hP:K  @F@fM$@@X@@ l@@b va,  @@SK  @c0@@ E)%[@@]  "-  @l.E@Hh`@@ hl" H4Ed  [4 c@@R$@"XE@-@ۅ  ) M,"  X@@ l@@b va,  @@SK  @c0@@ E)%[@@]22vѢE6i$2R>" B(r{.bV-_N:${衇*_9@@*&@+믿>;&otAvgD  @lݺƏo:C駟~*R, ͂o[͚58T{饗@C" '}3_׀fڭWըQLMʌc  P8kβ[n֯_o:;@  O?OY'SO=!@AZ=lҥִiSlm͂Q@L X۶mK.BΙ3'y, 4l>, @@R'5%g@@1P  :ْ3  @ (B@Hhl@@ h tڴiZ6lؐ)@Hh# oᄊ;رc#g  c\t^ Ϛ5֮]jҷo_:ujkE  @j@S[aU,b{'+\  @UȊT>g͛#<,Yb}7nh'O>t eUK%%%6bĈ2U; Zۨ/ +-?6{2M~IMi?)- #*/38f̘a/]~vy̙3믻iׯs=&L`ÇwUtڏ?}9 x뭷kyٍ7hG~ڠAL .~7-OF2@ "7nr)vۖ-[N9sooC;:udMYϞ=^rN^~. />;+&먮NG>J#GrA@5tt[ovڹk^f͘UlԨQ  I&2nL髯r6;wuM4jԨtlq@J 0Əo]t 4W>Oe˖… #VV~gV O$z|< nC$t:GGne!ӝvXuR=ԞXGT㭗ڡPG6ԣZjI]jOA#_sCG.Ӷw ,X폼R&J쟺uf˗/w:_u`Rx~J5m1l~ߕS1O'd @>c c,?mɚTG,UW]e[v}cFHQ>}(§i|Q7ןO"(Zzu脆hР< 6]F`CaÆٚ5kfړL[AR>S!<)dP0.S?6"~>uȫMdE\5u`ȑ?e*nݺ~40#ֶ/>KuD)WO^xE U@麮Qү?vygw*W뗧uƌWiv@dtGO?e.t]7znu:oc<@Oz6p@) VחWw+/k|n{vku#;@dtSH)}e=TLG?tɘzfiҤ Juc'?*xknvӵSKS]ZXZC-kt͡ޓ@R`r'㎳>][>SkrY k")ݰBB@ fx9:M}7'+~?{:c@@T4PN2C@L2!# *@('! T&@Z@@ @@* L   hII矛:g}C@+Lf $"?ަMfM6:D`^X T9c{L:0`{ѣm]w d @_~tI?n-e˖SOGlV s @'/o̙3mΜ9|ܠ+N~ T&Я_?;l޼yŋO?)SСC+[ "@qٵ^Nnvvwی3/՟l@)vZwYؠAM6nBܹg?#@ o5]]՗gG{@W5ltv.:L]˖-G$5^xuQvZ=]vgyN9܍j޼9qJ/2{m֭V\\l> d>v7Z[UW_}6uTw}:uL=hӭYfQ%_oV\鶭ھ'<|A- b@ЇzJ]Zy2ѯ4|{MC]wyf@+7|ӽ_~{m߾}]On@uXY~W6_&oܸV^*%3@ h5짟~2}۷oNiN;hϗKRqQI&TG44hQ [ƍm塌#!.رc#4]6x`wOwyϘCGuYZ2`SF$USwhV ;u+hF5i֭k&KժU֭[+K$@t AݏJ={K/m>sq`5Sp`O.IG:˶vD5XGec%uGcՙq$}//ܝRS8WZe;찃mذj׮fq[o5[l t>#\ K6l0׿v^z)@s4ۦZsȑv=s=M @==w\z ~%.YĝnkcuuTKo:vh~m۶ U둧]vuwujcBBIm;M8=ISu$Ȍ@ G@鼞 TG>Nך_,{!Rl/q=A#N:}?Aiyq&!O@zilVW^gty\?j:֞yݻ]tEi"䵀У>>lSO=UWdF #{キ{n:ҥ]:73R@Jt1E.SR֙#dFw:{lӟNw+>䓈b?x @cwy׏^Ҕ)Sܣ8;t(;z=ĦMlȐ!;K\7@B .p7nҰO<= )Vv1"$!@|z<_盛.xY#%_^Y4E]F7@ 3Py?%:ʣT@,Kz Owf_^n>S&MO"!(翯\ve2Aɓ'H@ }PuQ7|j__~]r%GJIo~Uȁ/SR"A9:y5ׄUP:f뮻gϞAC C #}iӦ(_[nu})ojH6 )n_vmZZ:MBY੧r+ҡ6m؂ _K/S7rZ Tn}+l}ۏS9y-'h$@ vi'Oӭ:wl $sO)w_ˁU]ϫS[z v:ua|4|l筷6|LZH>f@'@-/:#M$@@ @O,  _i-  q9g B8oR~=_ʏ\22c Êӎ @ޕ7ƃU/ [7r^j~/Kf|a8UmɛtÆ =>bJ~Y%~ei&w/'}کD~ v6lЕqDtC?oo{]Z]k@ʱ  /P_l,  Wԯ!  B  ~@ʱ  /P_l,  Wԯ!  B  ~@ʱ  /P_l,  Wԯ!  B  ~@ʱ  /P_l,  Wԯ!  B  ~@ʱ  /P_l,  WY.;֯_o`ڵkvVZ! @ Ъ/...]ڵkmÆ v_nϡV@k0+W)=M6-l.@@ f?ҿ{۴iSDwE   IL\v6m "5kX-"@Ȥh&.{Իz*ըQ8;#.@@܄.l۶;~ 7ŋ裏;/I@@ @slȴ< @/_n-XL/;ִ O5F @Ѕ Z^\ oga*}vy̙3믻ׯs=&L`ÇwӢW7#@)0rHKmv뭷СCC9{6h _~q?@B/ӮJmww}UZ_;.{쩧b{饗K.naÆٺuO>LD@ ^-[s=gv!C#:"?|K^{۞y5x/g /P5V\iyf7ouMkٲխ[ϟo?u=>c|pqoׯ7^kԨ^4h1>7I&-|#zԬY3zZՓj|Jdj QZ5oc֭~g9)3k]wuhA E;j9?dk^qT3b\)[g7 |N*kVPFrs4Gmڵ7]:**8%ƹ馛L^܋M%_:j7K2Xjj8s2M V^:^xϝ'LԨeu͈#Mmڴqhtbmq@-o@-ꫯvni͛N+sZnROY02T?~xu*M47nvjcƌq.tJ]1ޢ" lv뮻.ҢΝ;ی3lܹ̜zp]y쟒f'<)xo;=SN9.2ӍC^K:}7Yu՝nvaoq^@HJouSj҃>n@۷ǚ4iܝ~nOT,W^):.-tHFBNZC]s}mBhF@!о}{RywqvGk u-?y"P@Њg <@(O@7/VbKq.k@ C   @k6" Y$@E+   @k6" Y$@E+   @k6" Y$@E+   @k6" Y$@E+   @k6" Y$@E+   @k6" Y$@E+   @k6" Y$@E+   @k6" Y$@E+   @k6" Y$@E+   @k6" Y$P=BU())w}VZe]tmm6e+**:*}{7  @ 8Bteݷo_ꫯOJ}y慪믿Z޽mƍnb[~x㍡y@@!@'2:ujhg}f 6 ͛mرx @.@l+W̅\@s`6nܸL+֭[&4hthtQF(# P/_.;ӥf ;uphժU -WzukԨ 5{Z駟  t(<>Ck׮n:,) '`Z/l{glG@R*])M_ $? ,((ybMTpt!Ě8@@ !Єk%KzRQmߴi  ̭:vhk׮ j]׮]s@.дW]biJmڴ9 $*0db.$ln}vډ,ʫLukxwn%@Ο[/Ufrۨ>FI %GD+СCPY|t&/4w\vtwAپvv[-g.u&L$*hMw3U5rǪnzN:e&ɯ%= M}<}8EMU$rxf9OMuI >ǪUbQ 6\^dꡠM_իWWTI'd6mr_x{o߾iCA6k֬PTTdSuYvmyT:^_ànzÈ QmUvmԓ|i۪}M$i-Z:DQY^zvۿ7$zi:'G>wZJU/O,.o=]vڵkF, >U-[/ӭSN)y֭m֬Y,[,C@,P,VF)gX7( ]kc*wnԻ'&Md  @J8RSN'|2"HTرcǤ*}w|Bo6]۷iӦO?=CI dnR~Ve{Y7|3e$Mmvg|-pԩ;f0aBD@h ~a2dmܸ-#=z'ңk޼?z4@I:ү_o @~-U KϟB]J-Zwky䑈JuT](=C|˂  [ͭpkڴiQmɦXҪY,  pR6LIPs)wҥK@@ ux/RݻWOxR_~e?/ @@p ʬQ{NgF˩% +@-дiӸeF@?N:  @F@3O  @ p >9-F@ Y&26l5q &  ~g_9[ p >[ B@rT#9bi UE5kf/ӊ+lܹ^ͬh֯"* @n N8暬o[oeW]uU3+)l_C@1[4@vl_C@1ͱ̜9ӦNj5={(F@ d^z%kMw*nڴ֭k_ըQ#bvé<]ޱcre d{dEt+b۸qmݺC=4-{O>6i$7nx㍴M!  G@7͹?SwSG>/bcǎݻtxҥvwSGc֮]4F  s̱ѣGgkBYT&THލ7vG=gOѣ}6lh+WWĒ@6sα-[& s'-PTTd'OvIg t[:uRRhJXs+c=Y|yDt=h-"FOŨYfl7l`j*3  4i0*R bk׮Y=t["Iy><0E͊W|"B5TGYC-m۶v)ƥb@{.tkA  UE@N$+yhꉅf޾^z<[fy%2>V&3攀N̞=n6?WV߾}Fۘ1c\Щ.6m)@ 4gsai_VH  S  Ph%@LF@V4XOrC@D &'.=͛g[lI|a@@ U^wuֹsg;#lmu̥ .@k oSO::֭_ " @@S-G?eM=2sԩy@S@@2ʄ@ڵ̻yf2 y+@>ǢUVY.]/@@ VU}ף9s֩S:ud3fpϚ;R#@Ȕ@VmxZd;߇7ɓ>2]gH=>~mkҤIvTZ >֬Y7ыk4vX~*< `YvmE_Ϝ9ok>sm„ 6|p7$v vuZƍ eS  z[lȑ{6h ~ ._~Mgx#ݯZ:Ks]K/+mذan:O= f͚v^:">_kwަ^@?EPr;%M8=XyWS=McǎnT˖-MGϟNvݛgo\>_t6m ի'P:ʗlP2yTViLAzD|,(\yn=PCyIM~DѣGɺO?tL7nkm/=mR~o9YVNt9OYOޙ??FW?-3? Ν7|)>4ا@U{~I*nfnݺ>tva,@YcK+/xurg]1 7StZy])o>44I @խExҗZ]Zژ }uto7]'@~TfE_[A֏@ }~/<wqvGmD•N>z`w3R: =޸3|# a8(ۯ̍mv A*.~xO R@guX=ФyW4ҼG "OWԝNx6bĈTM s~@DFnW]=o~,  哀@ < @|p  hĤ  hp  hĤ  hp  hĤ  hp  Ɓ,/PRRb=9{7n꫶xbs=X=(@l ƵBӟdmٲ-ۡC5j t-Y6l`7o?}dey@rF4gVe6dʔ)6uꪫBs7: ?Gژ1cc@̙cǏ}D͘1#KkVEZ!l2w}ŊS.]:^~}yfG#ӦM#-#@3X_UH5k4 c,رGԦF;GKA lĈ6n8k߾}YiƪWN{3.޼"(GVtmC]]~}~_o:u*oU֭[szݺuv112>+ڶmkC}Z:u܆J7"⋾kO?OeSJ]tQ>|UV]_[n?-?@ +i;`02nHmժTvxa@c8\`8i$kРuYe&R_՚6mjѧ цn֬Yvڼyl/t  哐3OZ5|" q#N{keIe>W~Aϝ;׾[kѢ^et@rBsb5҈t-!C\:zVtSRPW^#<!=c9M, dG@~QL 4~f\Щ#SHӧOK/4"cڳ>kg}vx  kFiO;w6&LPnyݬM~ JO+**g{ @} Q|דSÆ 2 SI&Kƍ}bTɒ/~(oցz" 9jiX6 z:ׯvykٲe6W! a$PH G@m^@@ ^ hqڋ dX4+@@| ͷ5N{@@ fxP<  oi/  a G@M48E@2,@@  @   @@3(@7|[@ȰhW# &PPR˖-h… m޼y~EOM5lӦM.ޡqXՓmɒ%֩SDͯzTV6oܹsmֱcD D=̙cW:MtٳmƍvA%Z<#@XfM<ڷooOھh{e˖[~͘1v}wkРAB-S۱ӧnfEEEi-s]vF%\wqqM6vygkܸqBewi_N;dM4IK}^{Y˖-*34|LO=T7}ذa%O1dȐ ';K<Ȍo.9c3^|@|7%kg}b?2?SS3veN4)5ȵ+sܸq1fԢE\RS@\Kڸ2|SS3+^]C8   M2e  RBh@נڅSmKQ=tJ&Uu$Iǎ;jXӦMk׮]FѬY3^~փ@ 55kt!]_N>Ge֭[7jjj~ ]{zRSHT7B46*ߪLHڸ Qתze&z}mTVqU;찃ְaø 1onB o4  |)@Kw}׎8mg:Rt=~_CEp*O˫+<poCA323}WmvYg{x S]=|gJb{?JL_UA.G;Ιcȑv?eJ[oeCu}vek]NN>;LCms ^6% sd;vd7ts11 d;_U '﨣z 髝;pB +K[r!lذվN:CU4*?WثWң)+;<￿' *–tzv[r)̚5cڵ%={,)}`{.[\r%*O?-)Nʤ5 @eۻ‚WM r;o*;vzXxq9SRz0D}F ]Y/v,*׿5vSv5_Gt3<?;KIK;%n:ӓJ?6|p@ /tG+W4=#zb3<:]t_FХ]%^=#gWN]x)A~+ڦv.2lR]we_|;>o8v[f,}^Sv{^ng}zf= )[]2e˖-]{LsήKs纻Koı?|]eX`^q:L]ˢ ZЕxM_ bK0`ۣ뮻mN]#6VBa((OGEHxE`{䕂WM /3\eNڟ;jʞx /OU;-3vVg+&~WRJ7^z}SvݓvjB+M6iwqGkE5_)!Ge:}#-ZXߩꎰꈟJH.,mJǃ>n KǗ_~Pښ޽{[io n|TTtzx ^@ w:H)zy۔>, sd;ifvT32l~L7eQבJC7bAxμ @?4ްVEL׳br_u]w+dW ۣzd#MF M z;OA3=  t;uQqB4t;)3vF5# T M,#  H@@T J|@@b da$  @@S%K  1@c0@@ U%_@@ced ID͞=Fmmڴk=tРAh"_bz ﺧ1 z>t' g͚e׿LOcºu?H #ϾguOc)8KBO7g>:uZ= rOMR鱞|nx< }f9ozս{w{MO7shի?O}מ{9⋭AvW… r#-\|s9^|E֭M#! P@<=N^py>If.]7p~.cz^?{6c k׮5n؆ TV7?^^z `smO>ن bW\qko#G4J%UV]zz&u죏>r f{챇 jC@%3g4>|(;e]L:X-ۻvm7s[lթS&LcnR&@2ڪ~*Tik=ܫ5oFԪUK:rz]wܹsiw9 fqgFf@ t WEM/))qקMʫ~n?taو#8]ۤI|: %XAR S_%T5MrQQQquZ&M5k)xE O5 0  |E+V': RXX5:S:r衇K:3ʔkWf&F"@;ykhtC3 }?wy'=o@H};l6m2pAlb<󌻱Hׁ7t#z׆>R8~,QwO>Ğ|I;s/P]7SwN> `'OI %]=t_xr-vךFX]iΜ9v 7a%_49WbÆ M[lv >tP}]9~x;C\ڧO]v9 @T/QO-9V7֬Y3wS=hX)? K׮;Q:-8\S"xIHF€fnFI4M4ڻn ؆iLeiQWGGMNׇ (7C6^Ksw\{뺶p8lͥOaM>8v0iXt:k<#XrϸOYcƥS ~vL<ϭx+$΃Ԧ5lRфem,lAݝi&3i)>A['!j-P(G 3k~s ,[%,-:t} }-+*&¿ gPG݅ج8"eŲ]A b ;l õWϙ2_E,(ۈ#Zsێ<5)"E6N#ӽEkۃO0}*rUt.iei #]r >cU{t7+ԙg߃xuWB_-%=^ t0uvW9 %/VBW'_tMۓP\>@y0`D i|[` hh)Tj0B#ЪhU# ~yhu fp#1I/I"0! 'Sdd:J5ǖ"sdy#R7wAgdJ7kʕn^:}nWFVst$gj-tԝr_װ_7Z ~V54V }o[G=Nd>-UlaY5V}xg[?k&>srq߀].r_r_qsGjy4k iQܟBZ-<(d=dKO a/zv7]ǰod}sn?TF'|3Nn#I?"mzv~K=گsl<b|_|4>?pߋQrib 2* (Ѧh{28oIyes8';Z9h6g>xRx'b8ՃWOϫ[xn%|^z}%x c8eXIfMM*i_@IDATxEAIQI*0#Nx3̇P0#"""9(9IPZk흞}ޞ ~]Uի9$J"("(@zE@PE@PE vE@PE@P"h^E@PE@PT>("("WT+Z"("( E@PE@P y[+SE@PE@PT"("(@^P4pke"("(*jPE@PE@+*nLPE@PE@P"("(yE@м­)"("}@PE@PE Tkm lٲeq7Փ7\.]nݺ~z_d3i7l3iҤ{ӦMW^]jժ%?SdnXzu 6+VD[N F_vm_eÆ WREZhaxC'C dʕ[͚5#-L֭3kɒ%Xҷ5j$[͛ڵke͚5eVVM5k&˗/י$LQE Aeb-9PgEB(wyn`xbHQKte ޱl=c,̜>摦MFee"e]oe%]5"("(@@\e*"(""/4"("(@.Pԅ*jӧOlDE@PE@Pr _n&rtU *"("PϜS})q{Ȑ!Ҿ}{8p`"("(@voԨQis<١E r([2)" N'.%E@(=\k aTQ}:-RE@h;0JtW7E@PFIժuH?72U%[ʁʊl˲ʮl˱ %YY3DSE@P2"6_(NBC%e&BA6$uՋBUN7≐-O/rxf9G &'̣Rz} 4/vOhmE@Pʌ"dTuv?lZPE@hn))IE@Pp 콥+"(GdJ@RPy27 &g}6 ?t-MRE@P2"aGE KJ,v)6m044_͚57ŞK_V!~'3A~>dJ:[~mۣN~dFld2鿁wXK= Î҇c }5L_( v'< JgWF(+J O\h@$J+ɏK 3i(K6CX"?ԙmugM~_X,lq sk>aq䋚'l }<YXnyTc&l0Qvg`pϵ"MRTJr Q+H1s&?~{wyǸfNN,QyOF͏$j^p%Eڵ(y=yIvp B]*QV> Jرe2?WÆelGxd\q:0He FyQ '2W9A4@* vɬH,[-GPE@5k֨ /I$O(R{h'EwY:S.0`s9YYE@PK/$^x̚5KnF:th{GN8q~2wo^`DAהBR'e3@yjȑ2|pc/᣸-`y"h.P Pn+|*+hE@P*,zǥN:L"Μ9D޳Q){J`۾O?4uFw_P6.D=say}qqG9`V[<~b]f}zjomOǣ P{"(@XᓃA{1"ROՆy`IkᄒO(yleX{曲*z*+rl x@;gaOm~=?ZNP4GSE@PD`78P/l{R@EKR h.ղE@PX8GJpEIC`&r_m@yE@PE te; l^8(cƌ)qz-!^rC[OJ?r}6A!/}|ǥ\}d9dSV@Eå!kOMzw˰aRSOiӦɕW^)/b\MURx#+8/c=L7IYx[~r)fSO1gWÙbliq">Yt*)~TZ6s :Tn G?>aư{;uכ6mwQU/ +peƶ=x{gw׿Uz!g}f7+ E2 $˜>vlmU|B#ϗ I?qU͛ ,X f*3ѣSeڵD\U>DB%$)FhРAky7nP/,=1D!e nM~0ŇQOfv@Ky|o1}t9R,1^L"={ڵ3鉶Bwas| QrԺ„ÃLba:8>L7/x:e$_|U8)x/x#.LP@5qwh0V1^%"zrB"%n."%WnROAK0>G5?40 Cܹ+LqV(XDX}:B iX$'0~qܞ\~U4jي"GyI8-;ZF 9w\=شۯi!Z@ڂ@RKR`'% c;Dޔ'E  X gG ;NK+W5(#M("( l8W4#<"("(@ @wE@PE@ ՀWLٺtJ_]&_ϟ/O< I?Iw{|Mys`bhtkE@PE"!Rw[ Ϝ9So?sz׿䡇2EsQW^)ĀgUT•N<9\e*"(– %@ߩ]!|9_~F@hD\}ղdɒ/䩧2'V'cK TE@P -Ch琓;֏pi="n"7 ZiӦ](">T.vƎ[*bz#+؂ϧˬCY*Λ7O|IySZHz-ش;e=#8„8+-[\kҤIYYwE@P"s 7 pUWɝw)'N4E -<4~IEf h=Ђwڏ /P[y4%7lYڵ.Gc9{lq?ƍde~G  /I ([Æ +3&PE@ h8_ZO.3f̐{jݺ<;B)7֨Hؖ0h}1cJ+ 4{ >\&L`!huQҷosPaѺB`A[oDڲeѣG.+-_V"(@|'_=UI[nv۔\` iz}`̦ҽrGasȖ03xGYx=6y\:,g7OS{<8ʱ؄ߏI [ft;(Nݫ(`cO 4)}:qƙS˗/Og q u}XYӦիWfXsgLD5j)/]6QF6msTS$^V[e!Ɩ~҉~938IJƫ_vvNs>zNDo3F/2;.]wiv{LVXa4(^~e:th*;\MyOԒFז{,s4qCߍksxоlC-mذ` ov`(gL~Hc QaÆU)+? 1(,1 M56YQ$*f(uR~҉>97o\RV[W s}5L_#a|<;zLxpXy:l32'p\YAifE{g-zkdl5jdƎWi?x 83& Ud"{ FXWE@P\j890zI'gl3%4'WE>):Ț{ζ  q`^hО("D@gPUG=dzIZ'G?S 9 *#q,T=ͫ("$496''[=t&(!<)p 䂭8d\@AO*"(}g 9 k 7_Ct?,FuE%,o'pN("(@SԪQʚG;/9T)/BEMB}r9Ch_T#8XE@P;[!W ixe/U wRݒ. oy@HՀ&;}w&'#;u$Æ Kgʆ"(@EBErI_HKSr"6IݫleN~ʻܱ${ٲeFtr5HVo8}V*D ѿH3g!$<+O@jnstq=wǐ4LH@+ujیf]Y $<'É!_IЊtCpX M("P hga^o.8QZ>jK٭B'Ҽ~C5t ,XT])n&~p_oR&i\giO+c"Ud;M69-\5Aa?\:R5dγTazCH UV^zɀȝȋ/X&$!(SyA{i_;ȉЇ0VӪalfjloxK#\.\V[,#!tn!KS Bc,NզjwEYbSAAI~ ~0W.s\r%&&-ےߤO>yBRvm''pB+P_~)}D/kזjժ&A0},K\u|Ryݖ2~jC#%|^w)l:G F:^#*RTG/! ԒjUo\pHu?ckLд|}YXO|i[9y?m~exVZBl|6˦ԎiݺugN̉L4l0UgV{2'Rod…ңGiР&.]*&Lmۚp|Μ9;erǛOGhڴR^=wZ~ $O&]v٥Ĥi,Q-XPRF/ziABJaurơ刽jm SVUf.|$V*R$͜-[VMKR R/V䴷\SCМ~?LD*vde yvIA+]brҨQT-Zg4Li.<<[-$J+d\6N'-x,X2'T[F!8/7͛7G}T'N믿^8y衇SN#8hǎ_zk7Ɖ3fL)ܹs6 "ki&;w~A{9$i,_-_H n}V));.#)Sf5Qc9׺S9[mӝ-+l߸۞(t֬YF뮻L;6*rt] $gq|?oT#GÇW_7V`R' 5jقB-L i=3һwoM.l?3c7ݞ*D`!k̻ X媫 .@NUTBXOL4}~=#ml9 ,[6]h49gcY漣Ess}9=nsx M#vkN& MnX$

6wx WWU3k+<;X` ;|.=nV$iÛ߶cƍ3 Û7l-ZRr`Ȣ M6?ɝB_7qeqݹkPoZz,_]SV9[>\yNʣ-_~y~~GN&2_|axa瞑l~mw]/^,u)!1/_nBW; ^{Od:†CF֑3v{챇w}f+e 5Ƴ S׵k3{c"dUmdUA8PxRoFaJW*ќncbj`5| PG!ڍ&J^} xME%l*EH;,O?YwtM;(܎E[Z H,cZ6I 6a9DmBxV q{aÆ1A8 {E*hPwwdsN&73{Z~=U[IJ{b1D{weҾرBSs`Hvkݿ{!;#34+XG =\+Md% 9u-bCK>Biw`Ln[Dc3gQ6۱+o,գla=M&^N)% ]Vȸoɸ)e/q'?B)&eCQI&q`b@qү_?9IHm  Dhr Ya [^a}EPgGSyQGia!* 4v ccoą-e6~+4gDB\¨R8t㷔S3/۶Č%?d037Ѵ#[% p='7q:S8E[1§;j6'[s[~+;NCvF}o37XK~+x9y!lsb{M Pljt`2򝎆}U` Q&,5J(냝Ri p~jOt!C-¿RDϲƝN%E@O?]vuWL`]( ~:Pp!@VDvY$56+s՚#R(f}IcEE8{lX;&'Ǟ`+AnM: ׿eBn6)?!m 7N8@vJ^z 1Xrco*)@t87n8U-dܽ7n^zDfg. m}x .|GaW>\U ɗ4>Zc;wUFDzπĶSD:Í+:d*Fh1DGGHnu>l@%V!@ Qi2g./CPѬ .ʒnD]7HI޾J"^'liX}nOXb E wR<bïZ ShK @Gm'6}zmS]#M:""zc=f1ysr$5frw: +!~w  OP3O&Iܐv${R/Zb-|IMy/Ů% (lqEkr7vh% 0%)MIdACe#Aj M任j+ S ͏_\5XPVuh^42Jx1av|oC{UVF3d}R@r9 x{gP9G(SBmGI#&W;A Cjٲe4mGG5AR0bg} =\]x[p q Mh<,~XeC<lb@(F|3*U>,x1y뭷Khhp(!E =Ӽ82S(C{N3Cs .K,= ֮,BA( *4ԩv_%o\U;K&PødJ`e{ {v>h׼c2izCHV;tDG"0P,X`gs gPNaA]XKQ`Ԍ3́?>`c젙o?3R~@)yM <Ťۂ] M~4f[iԈTu`{F#mClx|~Z0( ) ^ `\3 2Ѐ,_\>C}Ir%w m"S3'|^55 4Yiĉr'-F@`NK-fI#hq3gڼ%ISصkz8y 7Ar(ݺJǔIJa?Q7{f#t<#0g!V;QWXyY6裏E ,m m%H!A|܄ySNWgti\X|8e% CȶwR[_yE6XY |&_rCƒI ˔/|ʹ E;0aftcB>+b!a5C q 2O= '!T`ywVI[{$kA~)HGրJ "EO| Jt:9AV:V0G0WA4@ bQ#]p 0?o7Kq-=(ǵrPEޛR@oLbg[Pv\=T)ϵoj?#J|iclxZYL7Iۀhv3]Q4v6/L Qy~O:e[{ml&AԈٴ̣޽>fPl&0hI :hРUŒ>'s>U"Vv <0}G7L]ϼ(}+PGX!4; <zR17&vA=4Nrm/k*ZUp=_B ĸT<3}B}{B;\- ~7eS*`E6^J"?cb˝8vbB5'uUSRx`]}f]~?2AW ӼB¶{;hOfw}ݨ:!sI,S0G({æbߟH۽ش/}\c@AYy.] ?ё#k %E@ ~Z.]vE H62RnjRʅ;]Fڐֳ#¶l҈v xgNJ-gv9SBm@yRc_ 6+kb4G*ud q<46,l=1.W8woE" Kƍg}_7I4+EmlkXF ɜOqV#sw{(N\5q:5; |E"?o%E41F2s{.L>*Ӿ=s}jڵQR"&CoZ"P  R4't-$|8 M*B-PQkg.k?G㜄b[Cv-[%alCU$<q)Y_8mdlfǟX|0u("(f.&LW_}e3؃'@C[?vl-&h6t޼y-iPGYAy9һ2 RSK52p,ei79H̶8Zb{ ~h_) s)s β?^w-eՓK P~m\n()"ċڧ=|-9xi;~8ʲ T ef pf+}wkP_4~v0 A" 1iBci?>#RN>'|9Wm횛v?8~A9'f#g)@f @"(@BOEAH"aL3fYg2=llyg7C=XX춍HezAZ2eV١݊Tr ZB"J< 8RFX,axJ5ugR^; WϕK@K~'SӔ@>͠!N<ĬWTE@q{ahB0m@t״C>m~A˔fp?)o,ݧ ¤m ~i_fT~3–mzՀf`9:;wQg"O@E@P@-K>Za" *gU@Նw~<6Md՚͜{뱙 Bޠ@IDATj Ňȷ{ERNv [?UZwn?[PE@Vs=ED`ц A4.oһb7%ӧslj2Di;3[lFXe˝<뫛6R~z&@h5v&~MHP*qȐ!9۪(PmE@Pr@+nbS C }u<))y{8UZN.8N78Z^hIF?;Zs饗JN69#iTRE@P**h Ԧ'Yd Y\PWv-xҊu?W1_0ErHi\RU R$9"("PYDvб`B o ӶKUFQ[E@PE@3)ZbSM;r,cͺ&h1 Ersʑ@|\PE@PG{Js7Iml7Tq4[D"ӿ)-֖+ԀN>]ƌ:Pc"[o%8]D%E@xP>?TLc1x͚RPTV[mt-?!$>Wp"<~VR$]l&N0#@y[Ç:'i@EA x{gwruYgI>}|"ElpW_n-gMl)3ޔ#olc-#HFkd"~TnuG OD(tvG}4 pJ'"Onox2k,s:y^K/{.upfkÁ{a9c5DaZ?`D+m6Lݤ%.j^k5?Y6aو9 ev77b[Hȸ2ew,JZpu]9 (c9j]ۏS paǫ#aaGPBY`ϼ>'y#^,w 7`@ojX+^~=q̈́SX#3SygƁzϓu5Qq+_P&?;MW\ab2ډƳ!L+G-1qztoqNQH/0ݞ0edlp#/w-'LmZ[?w+i?x.H5@ƥX(P (QI<}*j]a>j!0ylt߂_^?'3g5\cYV߾}5d./+D6mA>jTv[Y?8rŪ2ef#B 2R#&%ZPj2d bѢE&oVh.`j~[H}Ϧ M,ۨ~Vbˋ;,}8AˡnpbŊՕH vQqF(Qx2jѢ DB51LE/hx#߸'\C[g}/$u3E"0S(uøgW0Gי#LFsبQ#3/0u#OPoA1Z3i-]vMmD/1+vE_f Z噊oUUֶn+E^&X#׭w `]5IW]L1. ֮&ϏHRsa4>x6]Y8o5\r^y4LvbAi745&MJ}\1()@obaX5eh"GK.?m9o&b5+Q+l\ UJQ%vX*h-k.՗%+A~-lF.:M9gFkͽkZvStL,lLs%څ7tN)h裏c ."{Y x+R*^(@Z|77>\1 2;ŴME@oi_h׽ K?G`͆Тe[<>4Vqeybݾ(w'!Y9(!y&F?q>_|?kKSeCD l۱yEfCtQFɹ瞛r_3<Ӝ'-6KP488;ά؏=vXG+@0ؖ?%T@xm8pKJ_n%̓77Uam'EreUYndeMAE$s]K{O[4yTh"Ln]XtkE@ڹMQ-Xo*"(@T-s^N㒨ئ[܅/[_4OsSQ(U9gԩңG塇}G} >\=PyGbsRIPE@lEn9_| 7/vԎRT,y&Mo$#6U{*p*[]`=4.”_"E]qqD:>9kr("ĀNa}g˖ך\={hBWW}iAzw^$B*ʓJ'e:[.^ .4c ąkAvɩz(G0_70BkT*s1WVKkU.9+ihIoлF(_;.EΪ#CGvMT3Un|`z|@"|;#P v^@zjJ.TN vyR1a/2}K)>C5qiV*$76!'vmV"{mf7-g[$56Og #^DSrmdҤIh:=7}ق{D8}$kk#o-gu(0{9R֞#{WFΛ.mVjHN)͛ˏ? Zz|w>o-?.-9[8# M*2;Y)kY' Nڵ[~ i3ٴhKZ,v`"G7g,~=ʰ:ȏK8mw' %}3v7?L+ e!T~ {-j| 8=GP2#pAo9Q9믿*cD N (2X$Qp)ׯO{^*=86_/uMa}H^?x)[UK$gXor~s}V:ph '~{ӥQ4*?`y&MJvҡC㺉O?t4Q?\r%(uRfQ<"T6~/BǙl -YԪUQV8{*C?5wn,F~qG-ZUy|u9fYyue3qn?vV7M~[~46Ш5!KTO+ʀs;Nyn]KFAHC~;iРAW_Ɇ M(.O>dyS^ FlٳnݺeOW&h7`b b vNo9?XG_Qw]}og,1xy!cMQƙ;iw.e1/Gvڂk&WR˦kS&9B$4wQ]sx7GxIznP:mJ茳*j򃳽>z Fde9z^fѷ 3 S)PϤ , 1( ¯\;G]Zovž\~g9eĈ~,fDk ќӧToyv΋u]r=DãJLyӹO?GPܽ/HXQ< !>1J,睎wCfLx6ڊ+.vˬ믿6iσUo{,PT:6m*ݍ. lD; =' vn]:܂M4Rx8dn,[noFLɋu֕lO>1ұ %?0pO8v^Z^l~ ˳״;r'q/(2Q|֕Go_OsN cG?,LnaO()e!B6KYurˇZ۟m-+~*{U5\wђn RMAhA>fpqjJ-,=2zٞ}YׯҀ_,ԃM!VE@HD|ԝtm|d?~=ɬʄueizJԭI4X/[;g֫aݍ銩pTpԿA ,C݃ Ll1Ҙ1cJeA@9 fм'TIP |&^tEdxܸq /$7ep<ԍ8ѩOҶҸ.T-k?Ea%2ll&wyC 1B( zk^+@`z'Q*&S*g$r 6%$d Ŋ<.yc+V}4{n]v>J"(@tIfySaRFc1tb\ۓ8\@@(rz=k^.T 'hn3H| Nm"w}7lM( B@}Ûin1ԥsB~ʔ)FY+"T*PT&~7T=XvAy睜(I>} Չ)'oBCm6qlJ5kL4w߽|1k3 !F9['@ʅC߿DhB{-}Yq ѣG*d'Rnjr IC7pq@05qDGk̇ǩ x~ ??ķ~Lh( ď{;9uQqRRE`ҥ8M"@N:͜9Cc ?c&D0 q÷R#ЬY3YjU3R8P=иIvӲDO)P|PoE7D+O@6m>_3~OV⋱f)uՃC>J0?_{&믿*y„ Eݒ%K?4;sw.>#yS?xA0ʆ <իM1&/UVԪUKxC )Îmz~c-~3ӕ-[UNUZ%CTN4KN JӰaJ ;,'iݻZ$U<ĂhРA'M~z#P=ݽ#F{Gg{FX$:-H?ٳN϶n+l_yҧO~64gΜ<»-~[a("wSV\ UV q!HVpn\DZضP%>(GвjDہ1%:w)L=ٹsg;Cz{K.D#'tRNiE@%,!Hln_,!c O6^C\ GȸxjѢ ,- <[46lTZD֦-*er83Ln"D%@"W jʜ|dn>xl6f¤N:UF-dfRB_~;w{%E@P*25ԩS|E>JA$ ~`/JP$܄4[ow}m {zO9'nF+'{royA~ر~S&{ҍ7V؝n5e6~+@0vuWoeѢE&4lq0 *ĊF8oOSD"9k,̀zL6ư=a{1[ä9Ӎ߹Cw݄8seunH7n3fd,BG(N%K/Wn($fޓ7`ռRa 7ޞy/6 9묳WEElEl{oH~';^/֮4K!-")_%ND.۰̟?f j׮-įVzuۇ ja˘SԲ EOlG َ;hL0?dtD?l3cω܅ ݶӍ7x! WƢmk|XQ^>PGԺ[6~+؀진uږv{:%V/'D R ^l-|]uץ=#VI[Djeۡc(DTW^yŸ޻Rf6)/ ~G97Bh_^{)x=ny\4۵kg@x=CR\pSB%G%6S^)ƅ@(u!ATA[ĘWAIƤUiK9Ў[/eY"cvA; 5Nʣq=h; BE;j&zT'L4)^{R%4nI A}Ϧ 7;cP7B Щ;yawԶ≚$`,Kq !hrQN2lҤI w#+nƢ 5,VQI|E;Ӎ(bo^ʂ6̂:Hb, AWSGHW>=cl@Ӂرc KTɓ'/lOUܦDXHm~#F%\1Nfo,CWnoWTn@&3l%n(P$ B x 4zLgy9hI^*wG8;fňM$ 3ck7+;f~E@| $(&[R2~ejC[|NiG<~cѝFE@ M(gVEh`jGiPhTxo+LL1Fe\'Bl99y*waΖ/ oGPEpK[qC(+. ,8Bn_P\m:I7e@ֿMxfc^9͗w:w\j5ݍ;dd̙SB$/'q(=^br(MJv۷𶖗+݋o?_P}z|hBrCzB@r&rfüGYqFfZlgH7&mz7O\" ʀ'wcw0#G!G%@"~(:,{@du]wE ]a=Cgw_&Ei]w55N8A>_IG&*=\)W˂/(ͯE {V2v KW:sBNck<_h.P2smbɶ'XJ+C駟Z1 Ϲ;P[P/z7-|+WU FJ B ~Bm24"/(,҈pP:we!@+˓@Dȇ!8vWK]vbD-HLJXrO翶zwEgƋIE@H%ph~pZ?좿/Rw+^主K'|rE]zU3u-X1c伮wyԵpœ9!os^8LN=ԼUH8Q䊜b1ἧx_%NjƩB0),EC5d g 鹼OĽ-/‘{y՟˫{|䳮|;Gkg]`,uY~y~{1oǩr_ByRʧ"("(({1ἧx_%aÆIa)UUnu"E@PE@P*"_IPE@P#P_X[f8'd뭷.Qw}'_|]vgҦMZx ?;ԧUVqViZb|G¶^ݺuSoذA>3Sw-Zjشi|ٲeV_*ULsΕo6Kƍ6U7|#_4jH[K.>l7i$>΋ŋ:սm7ĉeΜ98?c[vyˈ=;w]q_ĻkԨ&uɄE.y<\R;c=VtT`Sqq}`^yS[h&m /LtMϹ/C:Tl/I .(Aƍ+r?n{_dz"|ufCÇ"tPx)Ud϶g0 >tmsz뭷oLp8g2☃fI˄w&SO<1+K~ҺukٳqS[oՌ5;'*p]?o\0%}w&0(x7u=f֏8|:^I&,rf13S~'ZD"YbcolCdr!ra!-H{7tAg_~e{_|1u0`Fnպ[mS!}@).&i;}h qrכ ?*|?#Pg[Λ☋e]fz4E}鞝wnv:[ko3c;8fa`WTb0(J5jed Q*BPD# y`D BP.K蚞n<3]w[U{Jcumt_p|}+'=\y {ޤ>j(c\JɆZ~qOTZmRQ-ITx4<W UUx%_n'U4IEΤԺnRyԩS:W향_O?M4UkugTU&]ISip;u㕂 /!y׾UɶJZ8 CC7b5F޽|5g]zռ![[dN =E6վ_W:?O;@?>CIa,f8~UAsS͖ZOm)).#Aslc_vd8oC?zTskt#mSɾORYdrt3gsVNy'|Iv ,+W_|j4FRմJ@E.]oU17tS1KzJ_Gաz,K~ҵZ]tU Oj/#U8UQ+Htlokk~UҪ'*SRTLRCׯ}~ @XVmP# Ý?:jvCIE1K.݈/=JTw{o$֕}jiPh8lP34ʣtnR:b7pQWVRq|Zt|:uc_i{s=%NyFaȑkSmJ1ɾORYdr]k%\)(zo MHhu]P9='Riuf"`c{qnT 9 N1]IA+_W:m}6̺i㏷t:T!ٌ֫C)S^Pt*^W:dˈW:7؊_WU"*j_RyIo=OM@񇩶)|mK}"2SW\'[o*E`d;Aܭl$(?Ak;tcڜd*NU@yT:Tb?_ 7Ijg2_aOP{/*-OǾMjowc=p=k_>Fԟ;M&ۦL:n}$6%Kd~ɖg  @ w:YF@)@M}֍ ht dS4@(@d@|sL%|{.4ۈ PW*)ճuI ξ`K@@ ue`,2@f^vk@۫ʽ toC:So^x!E+o߾MwHO<ٽI{PC!V^ӉO{РAGV@-[f<{^wg/vm7 zU B/ʘ8qz^{ 7&i~^So9vZv/MCB tn71LԛҼ[o0M0 7o;WVXa=z@1ON+r;8&c=[i4 zgLwsp) /t+h:Y 安S ׫:Q]jQ揄@! lذMΑ_?|csiut|ԫNsuԩn9zo6zη}l>U7s:;<>} 0:c^00`{OyPתon/ΧzʽZAFRA ĂȚT }ػݰ+Wak֬qϯw+ֳgϚX?~…nѣat P:ڷo_ ӧcqثEkx %K{wM&&>7^R,(~Ё@ g?W8b*5&y+jjbx=U,&Vվ#-@|\^T͏hʡsnG>c8W*x_~֮];{㏷Kڹ덶־/t P*Թ/f̙Wcz?&15o8U+>ӮQ"={N5^:]'.jwjƟ[Sz>]TpYgs߬m۶j5{@M+lpnK2 䣲?ݺu: ߪU+Wݧj.]Ѻu@?=k:wyfw+++XI6_W\P]TO?tW ߼ys˼ ?X@N|Oeomƍ;w 4VO_D;vh% 7,%)FܱjB;܍-ZpiIImT%=$ Y@Aj ڛyW^F? UO%]T}Qwcѳ>JttjGħJ?5>r WO%Am=tOju'@ h, jIKW \v.*Qno]suwȫZ@ \wuS7T-b}]t1c,vڕx?QFYMu:/_n?O]'!P{L!zBJU+iӦIM\7!Z>UmI MeA-IQ{UBϻ Ǝ .pm@f͚EJPS+#L6lnpƌZ0vCJqtu^G;\j|=V@ FN6o4+1e.vUUUG.|StqnY_=mgtR E@,Vlٲ݀vhTuS=O@ TE;cwzn&H[zw3:㞭۩St#@L@KҹQ ts55ײj/al M&nvj:P{5V,0g7N=l^wOMs38pOMf-gm,&>%Z\0YmzQ0*nH6w#FXAz赪UͧjuDC@%OVVP429RջM(l(@JMUǓ@B -ĽN@@, 4@(DB@ȢhY5  P3  E,j@@@ qg@@ Yg  @! ^'  @@Ϫ@@B -ĽN@@, fU# (@Z{<# Y(⺳m۶޽{XqQQ}>cYVVf}giӦgϞc}2WZZj:w091rB]^߮]# On)`CYoҤٽ{wޛiPU..~)..Ozy;yUUUWW/d=3ּys2Ay(1r)IDATB]ҬY3۲eKpDy?*y}v2Ta$  @@-@@R D*}}/ŋSfD_z%$@@ D&}glرͳCG}d#Gӧ)yM_y啶bŊ:c   @~-36lؐ1a㏷K/Ԇ ft7x'6g6mγS?n7|7   zG7r)v7MFUo߾nؑG*O{t˖-s(T:ǫCwg/iٺ5?3Z߼a#>L&x=8F8 I|_P=`РA׭[g-Z<=Fgƍtզ^jٲeBi>kG&ɓ'ۀ|!@EEtHCzr<$hjC}ڵK_ %:K'\kt<~Wzwútb6mC% K~QٔFݎ'|Qw8+;vΤ: Hr\YT黕B5W5ه(.=#̷n:t"m]&J*ԩS 1|ر߯]?oڛ[,oG3ǜ.Qܮhߊ( qU][x}z8*"Ȅ<koN6sL7j٦H[*[|~I'ق lʕ5k|ɵG?  @D"[*u… #z'inln:! DO RL>Syfkժ?~ɨwyvg*BLt  TL(>L6ڠ菄  mȶ6[  V4!  L  a@1  @(Pl̄  V4!  L  a@1  @(Pl̄  V4!  L  a@1  @(Pl̄  V4! ( 5WTVVf-Z\"+..֭[&}QZZ1hGc䋍=W}-wIMMM6!Rm`^UU&)LAwm۶`QTuL`ӦMˉ.QܮA5Eq_pw~EEn niUVVZuu۷V5M6eۿֱc >43"  <  @C1#  @0j̃  Z443"  <  @C1#  @0j̃  Z443"  <  @C1#  @0j̃  Z443"  <  @C1#  @035{@@@d]vٳ>Kٳ}]4iRBCڵkUVn}rt  lZUUewy__a^ǒ%Kܴ]v  Q^ .W_}զL?uܹ6nhׯٳgۀs΁Sovyy٤I+))_.f*c$BHvFMRUM`4kߟu cD&ȅM6DK.-Z$ -]^wq_^{ :OqG'O\0Ueee~ȮD$[nWnW6L HA-[|Ϸ z=X>}n ի=Á__mРA,m6[zߟ*Ru|^N)ǜΛM6g>n4HjEEnյtPҪm߾}TӦM]ޗ w1>c^xַe:J7o\@T_ S4 @@ ;-Zd_W:|r7l˖-vu׹__555sga2z@@D>U٣GnJя~.">| <>2dH`zz@@#6O>dVm̙p_~m߾hЁ DR %*wb:@@ {yf5# G>ZL  `ȷmp=S]o*D &0@@ e  & A@ȠhqY4  @h C@@2(@A\  (@h@@ fE# $ &0@@ e  *΢"+))Ȭ'o"lM8S6pdSݤr(AIqqqK,XR鋣iӦu04-iYN>-$&v~O^/8F{PQW-m>4k8x+T&555nZA{={dW>׾m۶=\3f|֢E| Ӄ  Pi @/^lv[܄T' @@HKoI RL# )P=3;uT  Pxi @Gi>`RU۷oOx)Rz@=#s" d_ -n>ݻ>o׷Cwuzg+{m…7.9IH@@@ZΝ;S]i>zAlȐ!t+Н3gM6ͭcԩ7@@h%Mv֭[O?.]$,p*|'\馂٢˖-}4o1ӑ~֭[9(Z+wu͏ bw nioKgM 0IAtҥvZ5:~7iuQt(UR򩧞;^R˖-mÆ ^8pISЁ @T8ĵwyg7!ZGK'+[V]pjժ@u~߿_}Wi P7m|QhR(nW^a  {e+QW-mJF]Ifeee֦M۲eK >G;VZ:qDۼysOeZrwy6nϞ=v(iӦvGښ5kS5ƍan :@@2"T%~Wq̙3Maړs=6w\E}ktI'G5)կYfׁC@@Zإ|;?:t`۷7USÎ;zg\IZ֯_o7t|`cǎuA_~ذaȻ[nz@@E -9|{ͻS]FrPzBeOɓ'v 4;zIg}޽>  ]Tkv5׸p/HT;_ mܽ&T=g2# HKإکT=Џ  PXi @9NS;vpjy 7nj۶ma[@@ii|MN=JԃuCJ'!  %ݡg՛^xaC  Pi @;A+UK5  ii:c nVW 7@@@ -% @/ׯM2zI>   @A VZm6|$@@$β|^uS0n:SJBy #  @L -U_~}6`cMwǞy@@jihĈ6oǵmzӁ  H3f̰iӦ駟>9kz![vjʍ۷/h@@hD6ݿ=c6~x޽]vev饗ڐ!Cu%K؝wi]v @@ zmZ\\l> >Ŷk.۾})0O;w7wZ*~뮩{'! dG %hѢS9pM89;#RK.ݻw;c宊^T8p?{=z?yd0`OGMrgAE$ە(xC0 ZWTTg۷G!@Pm˱cǚJ-ӟ&dcӧz~8xn̝;w-[x|f@DTL&x=E͛jHL[nP- Hf%%%m۶myoRUUzG:՗ިQ쨣'jikv!I'B&[ 6ad V",&A<ꋢ(nW^ uiӦqڬfrZ:gT[]]l0TF v-bG}tMS;un?s;Z=q~o;  .EܹsO?;w}gW>sLWyEݯ-[mOO  @"m9sj)t嗻@@+*]g}Ę@Ȏ@c   # 4HA|̌  P_1=  @@   # 4HA|̌  P_1=  @@   # 4HA|̌  P_1=  @@   # 4HAseee֢E֭[Ɔ6Vb#衾(FrgHqqa]RRb:Njjjng&0Iqd{n۶m[ F5T`ӦM ]D͏IpP_MGqgHEE+weeUWW۾} ,.riƶlbk;U@@ h5A@-@@@d0P̃ CFgcqKL҈kUq+%~@@ @sjw  @ >$  @N bc@@ }H@@ ͩ" /@  9%@SE@r_4!9@@rJ4v hCr @?^|E[xqJX饗Lӓ@@+t޼y6tP裏lȑ6}:%^?~i+VXQt D@Ⱦ@I7!L0nv;K/aÆiӦL|͙3ǦMfM4S?n7|?   lo>[jiyּysO{e4 >N8{Xr͟?vZ֭~:/ЬY/4ǗIpP_MJ+!Q%%%VVVf$e_ H]*=Z֭[g-Z"lƍtզ^jٲmذuo=6ydѣߟɎ^x!ec0 v_|S[?Lj'Ϩ='8>ڊŶ6TA^{:MS^^ /3<w^[fߟrQm1{Ԯ];۷?gjժm޼9*OЏM6?g UO$k.d`6ml qLt!t"mvawvEʡJ?;uȬuMӱc4K*!ݳgכ555._g^f2d0 P&A<#u{p]I$/w-׿u9sٳgvjR˗'t-XԯYf'G@@"$P]uU~̘1n…6vX*֭ <8Bl   @@Qx`]mЈu!JjשzETUjvJ[n"߾}{WzNC\5 w z  p]cݺvt߭=x*S;aRc}P/#_|jR'  @4"4\l  @Cr =`UeIՈ+Y}йs̖ DKG}- ^={Zׯ_pDZh({i˖-z9?a,HLgqwy$?2D..pWǿ=#i_6 x~a{w#C"9W^.]}@eO@@ G@sdG  @]M>+_W\An^ܽ{nk1cǏ1 hY-  PT'  @@jW@oz T/6-?q-[fgvogґ @@€|1c?v뭷ڄ -'Mzȑ#7LYLܹ?@`Mc>ƍg&M >KkQ܄_Ñ{1 \7\vev饗ڐ!CL&!/p]wq@<ݾ̙3M/(馛ܰ)Sr=lVU@1b@uց (..G}Zh2k.۾}{kG䒜C`֬YG oJf-߶ /Ν?#I*oOQEEwqtsr&{'9cGq4V?v5@ ^`OG{LU]*T_tEA \%y @0&tѣ_G9#+ طoqv7ZyyyCy*<{cǚ}K_rխy]B`ɒ%fEu]ݻ׊?wA7-о}{ӧ/׿ -7 իswkW]uUA<h*-nz5/vg3k/͛ފDB8ݣ:,S}'v)4C)oMu04OTOW}:@ ?|W=~L$! th7pٳTjh>k *Z " L@Mzt{f͒Mq7&\4 c@@2 ]@e  @0@@ @e  @0@@ @e @&x JLe# ͤ.F2 @T*@ڨܬ @@7!q  cK/3JJ~Ϛ5˦On˗/:ʾwU/M׼k׮1cƸ &؋/h]v믿޽r*@ P`B[?uo?яw3s֣G2dM;{;n /`Çw}׶onn#Ԏ{6n8W}i۶mWO.]Îv˖-ѣ];ϖ-[J7׬Yc 8unVRIf||]7ܝ{|}뚔a @@#K '=jg+W޽{[ee1.:uvС{4UK\YUUe^{M4ɾoq @dbwaDfk@ TG)guժU{6hTaKL! ʹ0G@P@@ f  =   ʹ0G@8A@ȴhY>  @@4A  @@3-@@z@@2-@ia   pЃ  iL |@@h@@L fZ# @  dZz<UIENDB`patchwork/man/figures/README-unnamed-chunk-11-1.png0000644000176200001440000013526313565477507021303 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATxNj9KIY gNńg" $* 9,A$Ϳ 3UtwzB$J"("(@ȟzE@PE@PE >"("(IE@Ф­)"("π"("(@RP4pke"("(*3("("TTM*Z"("( ("("$@ V("(">"("(IE@Ф­)"("π"("(@RP4pke"("(3iӦƍb2o>get|2ᙥ3x>3aq9)١CYf\Lee]`={#|"EH|Lяv풒%KσJѢE}ۗ0m6ã-Q>g}-h۷Ovm D@Wܱc,Z(4Ty;w/?S*V-[}'WSO=U瞈y$|qR*֭[B aB˺ud|̖-[CHBc2| TR@پ}TT|"2+!nذ3^T/"NjƀYP!]/ܹs(]PE@PE c3Kh,\RFaս"("( .te̲QhѨ׬YzJE@PE@HTu[jT 7nPE@PE Pԅ_|yRq!IIPE@PLG@PH1F@TRE@PE Pԅ'sϕ… g)y޽rg9("("dd&w-ÝXXʹ[ޓ+V8Y}JÆ #^H;ܾ>i:7o`ժU&v)SiӦAx b3Ar8OӅFgҴ?M(4 ƟlPL2?g)lH|̐W|G xD2RE o" cN,^XF-7o6mژ-Ru/|P7]cy&1ٳAV^"E2!+<d~&VȂw>rҿ|2O=yl''_bfwrӦMf7A;#Pfv[9^xaK2O 2B%%,/9eyco~ÛO?L3Sx^ŸK?iycoooḥ3[xIm@ENK І٥`foƕE@PE 5ܵ$!pehxu؄*)"(@jP45kIBcǎ!ʗ/ol|lvIjV("(2T{>k䬳2PT"*U,[E@PEc渃@ MIPE@PRgw)'O΂!&L ,r87qD(ۏzBPE@PE3xV}w 5k,ѣ,\P#F 6p@0`p %+W "mY'o!$ PRE@?\GIP"ce˖ҭ[7իtE֮]+ӧO#G[Æ CC"xv [o%={fcU"( 9tÆ  ,_|E$W^--Z0DBv5kȲeyCǏ7Kh\l*){.޽S[Y̧6*gMU;BݻBVK?CҤI{*x}WuA4>PW^ye}%>f&yn}.d2> LϓCkxjޘp'Oy<N:2fA(&lرiӦI2ĕܹseժU4n8i߾}Df"x  q8=_|^("|FuM7/1K| Z,ȀW<6cjՒ+"Hj"5jԐ~!{&E@PDhƍ9r}v)]tv*gqYMfE@PE@P 9a.|E`SRE@PE@66T:/" ' 64R<4h@@Ay%E@PE Ӏ6^3AmpDg ޼ysYhq LVvz>E@P$!$ՠ~7tTvO%ySADo |_o2 , ()"(ՀZ$t "iSFF5Q!-v"{9{Lh_ F2m۶- ęe* "(@4Gh'@pǎFLd1Q:묳9!K'/r/6e>Yg3O2FI)o *mEKYZ5G#ȑ#cf͚V1/"S<|6j(b>\^R/=dhl4e/ DN\w^)Z|:D@(/9{.$J<y;)>Xb^;i&IDHYf/&ZcOKY70a, ^z&qSM֭[BEYX D /xd_*/clr_<Ζ*Jz3Gxt!ۗ~KNxCg-/"߿yK.D~GT^)"(A@Q~=8ڨYTE@pwD-"sϤk׮&O%E@PE@@cLP,]tرcСC3 e[PE@ǖ1:u̜9Sv%mڴO9s=… kIUG?Ȧ2a/dxg5d4it] dWxz2xk׮ӧ`6l`׷o 3B%A ^>n8s) ;NaG$2;))"(@8""d~wrg-(BaNKY.SNyiѪR&[ЄhVR%#8Yh8ob{H8@^ r'F+?I*O#|BH(c ;x3O?Ѡ>04>X.E MF#Fz(Xo&Mi_dL{]}"BOYn~%cϷ2T_GЗ^zyUC 'VyR\9ٽ{GgժUVjΜ99_Jԭ[l$D4>,&ZmWVgoV{cxO98=c޽{g#h38Ee;yܷoe?֔M8l'|}Z4;|rcVo+x3p 95Y N &oR^=# tiӦI2e֮];a)uժUFQ}9U Dzi%i"CtM/'Zޯ("8#j~j;76!#G8!a30:[d>6DB@,s=^e˖5^~qz/@+-{bLDj.7f9s]៰aC 1!MԈĊB(:ޕ'|҄Ez=("$G7xL;w1Kg) !&h誫2C'T}W=V$wh0kCm=p",PgkovV^&^8ƹ ^VgN1MUyv/#MR.Of7̘1AؼCqk@زk׮\rT%"Dc:`Hdo=Vy>^$B|2Y{ZCw8|>&ZYϕnNO~x/g8:yD?F8ry' M8(->s#DUWJ֨ʎ"f_vh9?X̧卽=N&ɪ l&TՓ*>NaKdfG%پ37FgmwԞez7Tz`3;赊"!_wCkSE@=q *U6W_59 `_"!!lz表Sq E@H)ddjٲYgF=#q-fRRrE@P8m;DH>ܹЅWP쵚6mj 1-0K-{n8i6RPEs8"~a6Ѡ`[IP%KHҥ4zΜ9."("#q/ӻwo={ɺ²<RG駟^NJ" |!xDURE@PA (G}M:ӧˏ?(xbRfD*>kW^yTIPE@HGD3w\tȐ! ʰaÌJ\Kt"8@m9rC}&_xЂ))"(N")I&&do!h-oؙ_y͚5l2s}mӦ?>X=.6lNٱ9Um+?iyzjT^-|*N+S|ZZ,N^))<%"DU81 ?iHql[n5q CӴk˖-YiĈ&=~zoB{I.nru)+>S쇣MpbBeBLx2Oy@'N{"ʯPx{C:v(6lڟhѢEhoBm۶ү_?ѐ"&Be[DD0{q4gI~%䙥?L w>yfY 3#M?| U_=)Y9ۯL *M6g 7S>餓 /ʕݻwjժffLlBKRqhbDD4>,'ZmWV/XscZ~'? ~< IS&d}OLϓCd+7Qv$ St=K}1J+|r-BAdرiӦI2e֮];yiժUVtܸqi):"("(@jZ [۷DtGnF2DB2A,xU\q@PE@PE[xJEdDÇ7jx]gan =$is|Mckw7 Nz${1cNû|W'zKPE xJpރ1,"DØI0cALaMlc0jURE@//ʙ"=p@>-]{)/6gh>LNf1)bp.3fLe "(P0zd0m۶`a+#XÓ'OJϗxE@P @Ӫs/ROL$7on\Ex뇞J1"S.\PtF@t=m"$r"AHHiUxK/d?mf츻w.w\r֬YpqkF ݪRň&v`_(v"8/K.7xzƍ w^߿lڴؤ^p9޵f9dǎ&G-}S}GɫWXa7l0bWNL_ l E@5^|aH>) 63SE-IzJKFH2'Z8랮ٞT~Jx' :xtFpPŋMb{.{ʻk%L)L"-Z?'}O*Eeqrc„ ҨQ<<~gSqq;<~N;JԌ3ԭ[Cg={ =c֭[Eݺuԭ[7[Ejg|ZtoḶ־\,{uB-VPR1#GuThԞPDҸ_Ofb& cu&=V2yֺE :2R4z"x &D,xX{hƎknD;3P2ZŹkLXlj*UD+y!օ^(guV5̨:t`L6?"$@V(N ʕ+(2>oٲY{7lMflH4@Z 2D.Rlݺ=:6:}!6kR A[Z"T^=ᲵE@@JTE "8wծ];oI'd]E&M 5^M[4ibNb,l^j^6(@Z#`EOz?^:ե]hCO<`ܹiNj6XHg<Qƀ?4`WJ^YkӦ/_>'=VEU4,9>}eiA4±fJ`ZcE tٲerw}@ @cӧO5jTʀLz뮻γ6b" g}6u+] _}9EX'arpKf0[LFs1c;xxРA&]߭*\~͌seСܧʻ"oQK9Sهz{BJPǍ1))T0wq<3& n&v =J7':W S_YFf78")y+'l2aR!?ynyر%/D">p|+_|aH`!d}OH|C$at{? `:9L5v#X4Լ1s:9'H E( ]) `֮];LKƍG*F)"()AQFgϞһwoc: uk"M|ɔU,wW_}0<:6mZx*K~a73'^^zIٲeVZrW$ޫ("8@͚5(TcDJŋ;ZO:VBW_ bw)Kk{yꩧR@ ;#۷o7&8(L@JÇ7.]:'ڵm20(" 4z޽&(߷L>( ?%\}A `Gl~%-t ^X/\a?§EC"(^B 9`@d3p>5ܡvEk۽{wLO?Zeki'ʠ^("Y'Zۖ.ȄgFٜ eYD%x o,[V 3gδznD("7ncFV~}a0CJbH0cXĩ駟4<s5hk׮-dslڴiMT ^%ڀz0m"("w)eG`ɒ%2p@AwQGɃ>3>=L&K" Stx㼅16 vV )"(@R;R+iРI:SȊv{Ռ@|7 u <)*=t3|bP#S @OYXBDwGɡ/g6|;|/<|"c&Ǿ}N߶mۄ82RKܳЂ 1H1σe)H_9{} ?'Ol&_~8V}[ʄ\n̛7ħt/ ,SN&MHV|owssc=fUSJof̘a:u73zi޼qBvF~d9?LoF&?O{߻Mv۶m77tz"("(@<jz"("(@|СؘJHr AM6?wEzR8Rz#@;vyn=wd90gO@ZPE@PE@p]wL-JPE@PE o22 SްDeٳgqB2XBڴiWYȗ_~):u f۠IJ;v W=ŋeժUB_K~d(a]vY5kt--O?TUT 6nʕvːRɻݻd5")zBC/m޼3+ޣ}~WY~~fx$@g=-eze…rDѣG{З^zJ DO>1!$H8A/ĉe kor٭뮻d̙&X9}Gjժ z!$R_ zg홇rh?sG  ;_Y|y/CآE sM>gϞoI&IΝ (f2ab^{5cCظqs=c\}嗅&T htRҊ1Td0>}96l :TB3DQ^Dp1 |8Ձ2S>h 24M `eҡCnhc@}28я 0xJ֭yq@|ʺYۯJ."+*L(_ZliW^ҥK<#!l2g5?ٳL(wnDj s_Sf6 KdzP.|BV%JK ypFaJђ o>{AЏ,2^| W&ڪ ]v>9Ɠ~gו*U2֬YWY^x(`h%T4n֬ɮ~)B5#iSy#2;k}!kw`gm>ɖk1 V)4G2l!R;3M%KL:N&2dG?~MF_~rwh92P6'N4ZmV$LL]Oϙ3 Zbvg?~[KB9s3իR^ciL1}Q@ի',*yG}Tz-w}TƪE7L$O=eƄ4oj@x>XRq깙@zk =6J֜p4%"0|a曥k׮/_>ۻYjz=Xj١dɒmY;R͚5eÆ FSj[1mWq }eN:)K#O8ύM(}7Һu,?B~đ˒ ^qE3駟Eoq%|Mx£ cǚߦMf4ۚ?L y'}=EK' ).2e|g3b0|MJN sd_A<B A?S/uL!ABд~%,B "q%o!Z(?xWWyѐVX[Lhk@FXrg%,141qw$ 4ޫC?l@3\:o 5 K xP+?h\ȅ~ӟ`Ν.['8'!؄:?W՘V؀Fe>f("("*j*Z"("(@8*#+"(" «+"("#h8""("(*Z"("(@8*#+"(" «+"("#h8""("@믿^-Zd2}&cbƏ/ݺuo]̙cj/r-9# 2ACEf%7,J0auz(@^m"+V̤KMf{޺u\}_ (.]jp}JK.ұcGְe˖2rH^x\~ҴiS䓦A ,0yWZ%իW7dʕg5gy[m۶6uT9n뮻N^z%;ZUQ%E@P]Ov*@Z#pG_n]i֬>9Y|yלuY֭[K d̙m6Yd tZjҤԮ]{E@P< "m"efadɒ<jղfٽte{F9(SLE@P ^m"d,_u+W'6mGa 6?lս"(G@m@=E@E@D}9ӌCIzO g_o޼<g"Lʳ")*iiEk8_^MGyaOwݻˍQQE/h&(@mb 3p@ I& Iʕ3R E0;^IP#POP2… pq)^ ~gܹs"(D@<-(E@TGC&3d„ =+"',ҳPBq)"TM Z"("(.gl+㊀"("@S֪("(@"hv2("(@jP45k"("d,*fl+㊀"("@S֪("(@"hv2("(@jP45k"("d,*fl+㊀"("@S֪("(@"hv2("(@j(jS[o&۷o|ߦ8v(M|Uӥa,8r٨RԪU+ki̙3I>'_ _ʷ+Z̝G[/7;<Wzlٲ4)5ݻwVZI%?S (  :+߿_㏴lGa0qڷo;pv F r #<ٳG͇`p GuSYع+~R@ݻW<ȤKeiѢE^7)\d[cf4|ܹS .,ErGbŊ1т(lRxq<6?7uI(ڷo/_|q\8+%ՄĬK/+:.ڵNh ۶mK6WP-j3?|Lzn*;.3򎻁yd\>ٳ5d/&;Of\rfCn0a# ,Y2L2I@y6olNLFS>L8Ѽ^~]?[+"("d*fTw+"("@SQ`ժU2b z"(. m"("6/^,/1MR*x:E}(wuE7n4CbRo Bl0OER6dS/dd{[^wNW@AMQE' ╍CŦMAqG!Xu nRUwpB=DSo0d As,̸ڵkvq Ro\E 0V#)Fc FhoxO߶'xΠTb6j'RRE Vy URE 2RjmkgfIgyNuhI 4δ)*"D!C믿^y4i>|tA|A7;}^'r2A!4DZ"%yuѼjE@PB{/[Z?SVt9X~6md޼yұc9B),xGK8o"F"ΣVZ\,oNS JE` n0g@$ܓM=Odw3w,%KHz"NψqR<ҟE@64 / gy/_^֯_o5m_RKŋ)4[߫Tbȶ-J6e˴bls{flK*Sy|o޼ʱv"ogfs@IDAT/rz"()DK<%hGC?| £fp fgϞRBo{>Py}x YfĨhNX<T*Rc&6ʕ]8*"Z Nɒ%c(ʒ)S&seq]sPWt`e˖h׭[g'wTR TШG/RE; s=ÑcUG"DS*?IeT+S5k֤=lb„ `s'N43l? E@P|@~aÆr}e %w 'n/iݺqrbW^NPGY+6pYw}7YGpBZdԨQ( dʕ@P?!0|'(v3gvi9/7_|ԩSQsϩ~Q且}z^PEՉpqwkZ'm@dX"KKs׿iٲtMz%]tRM>]FiO6L*}r(hܸr%y~:"::٢Ez)̫}"-ys(~r-/\0xGJoѢRJƠl8oSjvdY4aM7Lfy*V mWn{Ж-[fTRӘs^Hn٭gí6MymZ8f(EB<-.blmfpO#Z5~EGlxl0 t("p(P6fg5 y:BJ57PV X2aAش{67@}n֑SlC4`hC#~x&NUc+'^[oQ)smye,*{o{O 8YBSOs#رcK.iӦ]v&Eƍbہ).\8ˣk F]Hf4NC".>$%Bo56>؈28Cǘz0fG@qzle=c-de'c ֭6+غiTycrVq~w{ͳ3`ny=ww)^7tS0/?l.g9w+jժ%W\qEnE u5 bj7kh([TEaA:!,!1?#T4܇ CgC:ju[;f/Wȳ(F{ NÇ =(v*gqF.x*>i̘1ftE@pJ|%wP!]|P: &^" 9.|).-Nq"h/h?ʿ"P MC[]ko/qmQEg`7cƌ,\L ιshQ$Fr'k+  ^ᨦ4_PLD%GyCwqv}&=Uh4P(qfx+?8 ѧ^$ՀzWM"ҥK{k&6ӥF,$h&NUaE/ <+\|慗e9ꨣJ"S߬/^<-CnSQx&nYu Kk&+VҌ>Z,}لT[}lL/.#Y\goA:J? G7!mGB#kFR!3~nxNJG^]b*ʂPsHɞ82!"Ƌ[(-w}ٌ:ʀ3q .49⎹PqPF`k)Wp*: (@,ڙD =\7F={jժҜ-Ro9v0|-+F8kigN?UߥaR|bn^58TPAV|f)\ q{1gN̩2z^P aITb[On֨VN>da /\[a9#8(ub{ ȏ(/KJʾ 4,[[l"KQ=ҤNi\gԫ'sк8˲kڵUMmWdt"@ө"N;o߾'  dZjɅ^7EyE(Yt:zgП)?/() 6kK` *T/9iPsԯeKB&XhԩS vO;&2(M:Uۀq6mOڻ2^uGeS' &ȯj3)/@mS.m(s"FȀOef*_ځZUJeW>Ui>VTُs۟Uyycү_?v&rExgxT:@^IPrGeld G=](A'~_hnGZjNm={ݕe2)돬 f(P/B+S*'hI˕'eJ# _䏽eO *d͹wm~wݗ_3`?)>p-Vϟo)\/)ZVrd` a@^u7_່ Bh"υ=Pam7|SfϞ-?w+B~ǘJF+@0ԶmfѶX:jlOBQ \4n%܀a]b#'#,h3#Xr){w}x(J~Ik#|Ȣ%r'zzŤQq:?TEed[#dެN_rj3!JoG?pP -? 0 BXDDWX?߇pDqrjO<~ڲ/aSWR[}WwJCuZ@&`}NDLbyr*+8OQod7ܮ\49{{KцD'GЯJ^#Yj֬)<`˴qlu{ͪTsIe֬YKΝ_6F\p~K/ɋ/($_9'L˲z)!n"$'c cX 1i뮻+<ƻqΩ* 6473e~KQ{98w.d@HEBLR3Bo@f3-R D/ 7ی9eJfu뜂M(qõͩïs괛UV(yh>s>)#kbik,F!3?B+A#mH6%=쳦$q!q>B`˖-M^z4~ȝ>}95l0:thа?=z(bҨFkR;Hx)5%F4GƝhLn:e˚՛ٴyҤInq{'s=b#g/9"p rATp,{E]$3f0*Ή#DQgzҢE 8 Bh5f P` zm1/RVuEqgUN8See2tX̲YgXqL$SM ͍S{,`8h" >,o3q7޻XG Қ-{ 0Pm4 J3l,e1?Fy@-%bB Z+۲5d^vn Ւ5Ń̩`6m:n7J( eʔ,>,YPXs߂-b-ȞSe9>/8q<ҨQ##rBRJC}x-Ͱ{۔>kHμz:\)+C4$&|`9k y쎾)#+n3946s-yÞ4n8ozrW8~7:Yn +WNxk8XpVfҏьaӄUzvز旙o甖ًJ'X=|ue9懶rZ͎ |LŪ;(.^8.vvGP.g# W^yqBj[^ZT q2+\r&K;aJ0xF*Up"(D~A{,/ExgQ[^kdo`$ DȏZ;' |ar m9\3n$Gx ѣq;@8qp,bfّkY~ݻYR覛n>}ȨQLH&`ǀ"bm!l ϗG2UJ#(! L-qewh ꯺*#@" o r᦬N]v38#hgqbomq`S#+"9̈N:e.Ln\ GX}̊Sr=GxcDps%"ib{Nt"v JE?v,n4ȩѬ5\iT)KW8*-$x:ϫ~3a4k:Jhs++kdMA{4mhʉ9#K d+c 9_["+"R&|IJG+|! >y§ ;T6 ~[mUt&N8C 1F*EqQm]v%"ذ?8ƿ _ӪU+aˋ5kf.2eJK'%+G+Vr aBNǎ9cT9 ܛ=;R6\-]ha;-Y]Rv4=CQE3ԉDNH""0ǩ;y=gdz?MeC)q[x`SoE9VYqDe~' )9֭+h1 =@?;-vi87 #|p~_^#"z%X~wͱAU2 4Lؙxfׯ`CIS<[o'k2ԡ (X?%NTxC˖YڎpYȩ=#VMw$'M/ޭkūKKi-z H{<2&("YHDPh=M\KIOssOyúxաg t[./(ph2ÏQҧ#NH̠Y u0w>^f>E@PKڻ3(駟](&$N|o8}TST~nSU7Bq=e&@?.XQBylQؑ6Xn酲ʫ-D"Bz^;; (|*}29Ŏ?e|@lGGxCx_bW:J"(YMYҥh'453g4aC!бcx>JEQ5KMP\ԟŋ{,61%fazO(#՜"+, tvTr"B,Q )"Ad (;Iֶ%FcY-Kg.ذq^)ދrxq4ω4HcԨMwm[}o߾_~YZwʮXb`dpulyu9=[n DƙᲸ8u2씁96k;eB. GKgi/񈏆`,Nx&7lr׻ĉ,΅\Rּ\x͞w_}jU+߸k75vC?&g_%k&YNG96;q<'Y- UݡjJ߀oҩ{@1ffR9y!'eӂ&9gtcT`zm| xf֛1ejxLF~#?uѼS;;~D.) (zFfL8%B^"s/5pPH'xaLgnVO[PfE"-[f=ڥ,7O4Vwz5"a L0>8ԡBE]2 UoŖuiIņr˥aieN&D ʖJ~ `^B2iڟ !z#Q eǮC,]}9Ѳuq 7x A yHJ!=&vLhbv @PtCS4sl%XlbI*T`>ѮvՑXFG o6R/#:ю]~ړlnL%BwZ$un?/{4oՕ,M# 7`Nc<Ͳ`$/b,k*+"2>1$yNF:h|m55%\4Żby'yy@A~]whР{f90s 6^E@pƍV^|ͮ:y0%ڵk'ԎP Ky Kf;@8q1:0@CF3wAv+#X=&N mmFG-0˻K7)<_PuCswBC6zd@F zJMYhg5‰wլ%N=&gҁwXIpo㥸 q@ 'd;%_PLD`&_/;w6BDŽ d2x`6u1OWBHAfo0!!L E$CL+hh>X6Xi,GiB5{D-B7m+,7\* F˹sVBG+j7 eb'L /%OjY]w,tY# Ԣ$GPm_AGb:l裏 6NE@P!IO>DN: ,D &fMJ#VInJ V>Yn4r  {R*\7r0`:nڡѩ3=˗2*%Oa`?!qa#}ˆ@Kvd.vDz߷? WCbEʵ]G&gwDݻ8,OGriӦ駟FNP@m ze!% 6)J*fA*T geہp?ę[)v]s2>U,r=º8S7]zڬFQn%dm^rw]іʋI&$rϚ56ڴi#G}tʜxbƓrv"qQÆ ܾ`YbPז4TQG1Z2ɓg1)) BN"t%NE<‼ȴs`~YHL;[!$Yo&ĀNcl`@-#͛7DG&㤣ù6Lxc+Eݻ\`f_4t/ԬY3f轊"錻vj&Uek{'qr܉ܹs2dLMUHk,;4!%/gԑ?,`?#%{ViB21NqeV+7]RH<;U$8*&^O- 2sذaF4h3Ŧ[nҫW/ҥ J:#G:th0MhmE@p:uhE۶m+-Z:\<:uTYre_~Eѿ;X(N3|S2,jzT<[v?h%w^@O<`}Z=U J7T^u4 66P^`3`(Xv`Δz͚5l2s?~`?w>/v!8]&F;1`$fkĒӘsyXp;Qvb\Z)7[,e.]|lĪF]w= COի V2Kɀ<ݰHN]YH ^h!y&rE+VۓԱgo~3|6?pJD]YI&A"'hB1 1 ^94H35g{5j;R 6=x;Kh,9IVd@9U[mFax6ZoFp3lҩvf@NDNP 60J6 Qw*g,So x\ T+iB=,_B=ae{y0IH6 + sͪ"cה]^n/^t\p 9:0Н X)ge3zSe+=zN^Ç A/7·LМZ)C,6EtB= (:I<>Dqͼt i 0eZ\vyxn$0Tlqg'B杲P#tʔ)4iUZ5x|ʶ`Xl^'u9v"!0a2.{ͯ2kpΨ%붔]Kۅ" 9/굘Ǣ |Oi( X,y.( 3\_Bnl4LeR*G&9`Pw Ϙ]FFO%<4S:k` 6F#|c+l2aX[ G>)C  M6ͤs8/17nqZ2E@P2 ?3se7XbŊ i,_rꪀ@VC6ԛG^/O,STg~cyM䕑Zϣ푾ݗ=/<1b!ѣGM7dS2ƸbK |⹶VZrWE@PD~FEuHMeE&p,Չm B j˪ f䓯+˔ʥ %64v&㷵oԙeMȪ:kVC.9mkz)!-!X>*bbqA;H9E@P2l::L`Uytlц |U7Oihz.)hKVoZ伓6Jg )4'#\`c^";,+BJ@`F"k׺O[-'*CWE\ Xlu)%6]6ޑ8|3|Kl|h:wH6Iڇ-wv_ 7 ĉM^ŅVPA2dEDE" *+]@ DfUAeTI>]I \2H[}'ݙ=35=ܧ~U}9$= AhOxAkoO3џH @zb N[WRʵV^\bΊnsi9~C憇&=;grvb&И#%d%N$p!_'Llʗ/(aak/_#qRd%HAc,`O %4V]WӫiOkwIt0 і}3շ,G _ ۜs{"]{QrG~݅$?Ф)*w  pNzꩧ<]TB/"cy K@+ w'/N$x.wBk^"|"߉6H.LA4!ϘkI\s tٱ\l]sE{IDZsQ5AEJǥnR )⺺E*wxȷuwll-_Nt_鑭U )R(Hb}/:O8먀CĜȏ=P ~zK-Zd r3@(x_Y)Q׆bk9H ﲃm(zeB4`I JJvʱyd39>O\[JM79QT)wR*9-JG).#JƉ|9pw/h7#=_0yWg:Zj`qI#ᭅ\pm*hϐ!D$BA8YEFwک>Ar5P o,d:Ȝg8F*]rHTZSp:z_cfb 3CD0eSv(1xVg]ѣNDJm]{`Z]s\;(p?rKr'<.ygj~K[G!yej+ Ryz4S侨83:2wsswAjyY^YTi|(xțȈz2~"ț~'T@bD}rň|ܼHT2Cf?\D-YL ֻ*nC= #ٳ,n燛0o$(*sϞ=9RDvM^QmGND~\rB򋧻se!tL,OggGѬUT* ~j_%V@t9#-'dvz #StB]+YA ns=rF9Z$`:F ZC ;ީPߥԄkCtψ] xl5ȑ%ӥ~D˖4h%M+xA {49'%G eO ׄyx7/s.6Y$S=Gǫuj7O>)<;=ec5k&w}wN4Ly}}u^V\^7] mݻ&G! 튀 $ xglC Zv+ڵ" eLt52L'%lP "PL}Z3JQIm۶*;]sQ5ydٴiԯ_?)If{N%ψy&%@ԗJ`ұcDŽ`_}Uc& Ν;7fO0Z:aȟ|򉕅+Vw!˗/Wu#==]5<)3i-.kcd"mqm<^*W\5A 2ij׍wX'2ߑƠH& T@#){7+ʕKtļ'1sYzp xk ;Zj#QԫWOɳxb\:m4AO ,>6Lj}^kSHxCNT edKdcPHy]<8W>ΉD3ظKpA L&"X~R``GN:zG7F5h@93mtBN % D2 0(rxH9,Y"z'xB Zpx臫MsAB$tӃu6m,|A[/k&P"@xfY] /lyMK(BqL0)^-G~~zk19#; >D!  rS)R$Ь:F* $c߾} a׬Y#CVZĉ{rw|5J^|7NALHR@ٲenݺVVk׮F{+*UL:AYw:>w'ׅheVOXSe+RYtO <ރ\BD)Cu/| WPDhѣeȑrWKΝgϞҮ];vٲe2c x2uT2dH(nF$@#мysՇ:,{\Of( .0@)T7qr2>BjN(9>RDwPرc-R4둜ZZK^k肟?_~ek{h f`9qzm蛌2t";&:ʔE@8n9R>=z4CCHG +!O1V2khR؋vje˖aI ^J^K<E)/ѴQ+?ޭN21NEN~eĠ>[KulZ}c^۶mU#EBV\9Mm>ea% .Ųn9mP8y̎XɬԼCMM7$tקzJWن L49h$NdAwfY?7M3' B?vtp݆/4SEN+hA%Ʉ(3ZS`$d9|PeP/09sn -Z(C5V$Է2^ZL$,pOY :%UzƠ@oѭOnKR(/ءbŊw^Y~ +T`-sHLɠșIR{ a 170j QHA+ k1?99)P5iDSNtR)Q5j$cƌ]v)εHHH y wc60$ QPD1%ҷgD=Y+=U@̒B{AɬY&\2!`OQIV*]tQ|^KzIvE]Ǣu.1HYp V%eG-[H.Ad0Jĵo<um$q]'nj!R=:2Nʏ3]_\X x~CFӦ~`/z u٪( Ѳwj߾nڲ >2`N +[ N=oPu!̹um(6%¶:o40NPA!E@9htÀQs9W@u:y63>W6;95DԉVJGq"o ǏW1tI^HH @LɉxJg/HHHH!@4@L$@$@$@$,삇mB>6 N&i' Ya2cԟӶ?2לc%3v0d9a FuǹP. /v&/ W5g8lxX=32lD]w<!{"!!Gb%'ٔT@yWTZ1mf6=IDAT#mtYzzzdNߠZ5k:dhoeƃ /dF?bƝ;wJs tJfHv!]6iy3'33\qN6sA tPI'#.N/?0()Qem۶I*Ub>=xC.:OLge֮];Ӛ4y_pyϞ=I#%硛42/^XQFe˖)嗤Jɼe˖oU2oڴ)id6U)S(+y/V7@21 l_8'm@ӹ C:!   @.ㆷ{q.l3*mcE [nz9nG;vL<]'I7o+q{,2i֭4a [6-±5S0x 4$IxLF UVJׯW+TIH tոD xK\)&CPF   p+vd/   0@g>|"[zLW8 O bf׮]-Iٿk{{8^yG}ԺG8 =zLCcjڴi?pePpրR|*ۿI`ɌL,qGf8aʿgdwߝ٫W+TY>\v>}"XgBs(%Vo P`e|b2dHfݭwu\ZP׿e}O`9}>|X0*'^8UWLE~HIvHlgpBH{OzIÕ$bpew'{ז`e0=OʕSfEwoBwGgv0&W`Pe|ܹsUFYXB-X=N*Pδ'x`;%HC p%JP]DCu'Llgd9\x eӴiSѬYW 6"I]v~kEV;VF)#F]Pu—Vxg'I=& r u0,X2s29\YLn`e|\+P@ҡ ͟~f[t]{ yeF>ЈWwoږeS] 0P.\M@Gf1_M.2tkaWF رxF%<1"?Yɂz,C!E2Bޞ={*_ԥKxj]+\Ml `TDVylPxlR}WPY?h(4S2P-[ /aP`6Y-P`eD+)Dž[z`񔃡8K]pʓY0bҹsTU…Cmlp9\M,&qWp RePe ucB u;ὟLB-X=v.֒eHHHHP57"   '@4 @| P/o^HHHRД@$@$@$@%@4y5  0L$T@A    ⹅| l۶M~mYj H .T˱cT#>qO~1cʕ+վuԑ{L} R*3$@$o]VpႵ~+ӦMѣGuk֬Qw)իW| <~xiӦM_Hz+E-p[R8tR&pvA,Y"v|*_'O뮻NhUtvɔ)S|nZOs뭷 ? ~ śo ϟ_~i a>,s}*رc-)lb='7t(P@)rf͚O?ϔТ6loYvm3$[@Cᶤ&[SN_-xx>rW*ÃwϞ=uXb׿Uj׮-?tU.[Uжmʁ$--M뮻^HjVHF%ݬx5m4`ơP9|ps033ٳ*=BRfMye„ >!`#IOh̙WX!˗)zǗzzT\Y>Un|t5-]T{iKmҤ>=IHXvG3M6 WhnKj肇靊/n-fddHB&1a!C3g͛7W3d$@$`#G'˛7o@1Rt%wtѢE]v5%K LH l IJn_zMv- ȑ#C[nU]J4sL2}~p؀2 @2hР|'61(PK(0`-|[O$ؒz'L$C$% NZ_~ 6L):3=jZCayI|TB;Z>}Fz}qH <[H{,S!nٻ>k.Γѥ"t3 DO]E<2 >@j@Lt3 $ė%    "@Д*nfHHHO hˀ @JR̒ @ PM|P   H)T@SY   H<*/J@$@$@$@)E hJ73K$@$@$@'@4e@ HHHH PMffIHHH & ( *)U, $@ċ 222ٳp)rUͽx IVd눝f{& H =&q?HbŤ@va.VXpB%O,we]&u zM6Ɏ;ARtaC=Bw9wϟ?sNRu+_|Ν4t̙IRԀ'M#DPB )&xo_r ;UQ P?~7)XڵKڴi#wuWT?KӋp裏dҼysK]f :TZj%'Nݻ˝wwQF? jՒ &ȸqJ*~saÆEW8y"}BѢE>,%K$/&/Ux1aɪǏWgLcǎgk޼yS =eʔ7Y`M W@(A"b Lu$ H 9֑,Ii.YiFC~%~IKK Aw2 ={غѽۚѧ~ںFݺue޽ֲgN>E7%`b"*BV#;#ؙƞNcXܜ9b"k`N |>0N 6g}Z5{ljmp 0ܗ Yر b]3g]8>LK#攈u$Q`߇&*4t4c&Q)RՃ0O܌܍U@1>z$7Z?+Vh'|ׯ_o>*T1Szu50uF(05p{>u&ÿer%CyBF˂u^IJK%8AH㞁3o>+\ th>PhM49s樼-]TJ(&|mRFdÆ w Ν+7VC$@$@$@$`c[@w2h 5kjhy$\1bRNa٫W/5BBV*]tQHHHH<F)p䝠LCŋ[`ө[F}Һuk\pak?ΐ G(4o3>=I0:\O$@$@$@0DHHHHIT@s dK h :I"   Ȗlq    ' $(x'3s!EFFӧ5| 4 z6˜XΝ;{!b1j3QP<}EL\6-`ѣfr qQe6T@q=/n2~&3X(%)L, {=KW.i?NEO PG6+W.W24mOq&$&&Hp6l=dbY%~#nfFS^ 5C$@$@$@$5*Q$@$@$@$@ 5C$@$@$@$5*Q$@$@$@$@ 5C$@$@$@$5cGÍի2Vvm)UmΝ;_a{Zeΐ CX̙3[Ξ=+Vq)o۷O/_>PgHHHH,*pݢC)\sNl޼Y[J$@$@$@$@H ~A-Z$x)9|8p@Kzz>\A$@$@$@$`c[@MH f->tϞ=ֲg3A:g\fZ|0,L+cy 3ܜ7'W@a۹~zygW\!f͒%J5k֔I&ЫJ `_  'f (%gشe2J 4xjbY;qv2~ϟӧOF373A>d駟G)\p<9rD;f) LOt}>D/RJ$D^IJ`$@$@$@$@'` Ez6R#u5jԐ;J^K.vZ֭m. CiӦjذ̙3Z'NHѢE!   0 h`i٦Mp`D$@$@$@8 /ٳ7+WC$@$@$@$nc*pP>[m 1hf0HHHH%{Ոt8\B礥J1cH|; P?~kI:ulSsI$@$@$@$))bQ: @ (txp{ݤt{ _&2ADkL, {L,+[B4Wu]+]+ ųUVaÆr*wJ$&#_|![M˟^j1,XGu,dbg氓^B|tLiii;w;'V9>ȢM(=!.\(nWHRD[<|iȄ9%r H"wm3H&Ux9p~/0{L.:ۙ ~V9n޼Y+-[FC$@$@$@$BqDʕ+SJ$@$@$@$-GZ@{%m۶CJƍ݃@7|"IHHHR# /(6mg}6 J!+IHHHB. &ӧNq /B$@$@$@$i[ *VlSpکiӦA ;ARtp% @ 84Hx㍠ fֹ͚)F~AƍS8C$@$@$@$` GP >ӧ)8&ݾ}9Rht:t ݺu z(l21cC6}t:u 2$1@$@$@$@$8(^z`N 6TҥKT顀S8m۶I ~ޢpHHHH (SL9v޽[*Wl례"A }wߗW^yŶ?€+VZWhQ9t萵ٳg?oTݻZןL`c\Rce:b{ڤIJK%0 5$~q%]G8hfH9nݺUg1護R!hҤIxuno]mu[`Ak3 ڵoUjm#ND&^{إR< ēvt:{`2QΏByZ=9?crzș3gPBfXM(BB;U S^dI|IrTkww?ZYׯ_oRBk3uU^n:)R^ ?T^D˂u^?.dbgF'|B e|BGJ.{*p= Ctҷo_eE #D(P}&    GK.D]E /}7qHHHH E 8iF ]ɓ'J zK*xm    _ Bz(>y<cD:"1 &hDp8ߧOA'|"w(+4IHHHGP80a?uTu:uF3VeTĨggk"ܻ&O/5֘X#(}cbY%ཊ LB є# (رc-.O? 8PMf7a#:%A|MdrK5&눽 IJK%(0ssHh➁_rA[B$c (u]gDB~R>%D$@$@$@$@ ڪU+y7dɒ%=U;ZB醉HHHH@p -[M7ݤ@`u֕>H_$@$@$@$@$ (AG?YFFr 7HHHH r)4cb"    `U@]IB@8TK~ie% /Ќ + ںsN_BŠ'b"   0 (Ϙ1C7o/rׯ7|Sٝ/^\m_>P?J\A$@$@$@f0V#)S/,ժUO:w,ݺu%Jm޼YEbRm=HHHH#`U󎤥)jgΜQNuH>,K*WP^zެϟ/-S;ϖLLK&23Dg N" dӧO(*NْNG?t萫=zM"3ZD3f`FҥmܺurJ]=zvYA![u֩ 8N1pȄ<L#7Q.zY8߈M&Ya<+ϝ?^%5o^m2ZEPG'|/W\q̚5ꖯYL4ɦ^}ՂI={JѢE"c@| yy`D&x(?Ai2>vjb,\ݥp®^P!u/kCK rJ"Eg|0R^'؁>ZMHHHH#`:l0S <ִ[;v(A߿?żyEn6Q"   ]7n˗>r4~xesn9s樐;v^zY"h-e"   0 (l;-[OWiHHH$`t|$0Ҍg$ĸ/ $kUIHHH"%@4RbܟHHHH G&   Hq    0v|rpRhL#@l΄<u97%\r b2Ŏ%;LRDgͅ ;k(\TxLqrǂEe#PXX\+UI%O&v&a%ŝrӋ(HdƂD7+h?W%HHFM6 v"/駟&IwT'RG8)n' L$@$@$@M hr'   #@4銌 @rGIHHH PM"$@$@$@$W@<(}lڴ)$il_``&    s YFz!? 4Hf͚Q_??s΀q% @ t2rHꫥsҳgOi׮eٲe2c j2uT2dHR    ?*핞.WB+WN *$wjժYٶm:4h Ϸcf…2n8k"X8pZן)ؙLdГ&O/5֘XhH9\ƫ=zԝ/iii ]X19|Mݳg`NECE_D KŊ͛7-dZd233ܹsD蚉b$..QLLH}uB=U4,X0keρ !$xٳ9b"8Q&c[@QQ 7}WJ_CÆ N/^^t?8* >\F֬2_9$o o&gn#=vUs[>x_ 6H.]_ ]|4!p5 .Ȕ)SAxjΝ; " xx饗hu'@T:uɓ' (P4z <$P=wޑ43gȉ'b\2'N@_|S4w+Vw!˗/W|2Ҝ9'9B #Gz ZAo馜Dz ́V>.n̘1ҦMa= o2sL۷jΓE2m4OTgt>}@'LxJޱcGe'ܡC B h0\.0as#ϟ{N( ѹx{ VZ2be][ݛc,R7o<=*իWWu%ON|bO+WǏ^ppH vj5k&D@ʕ]vcٳg_f`(N \$  ``҃  ק8L5@ =)L P Ά[HHHHb@c$   N hp6B$@$@$@$T@c$   N hp6B$@$@$@$T@c$ XxTHX^& XK<7 Ā@)IJ h\qb$@$@$@$@:@$@q 0eY`3 Ν+f͒;vHJ{[oUI5vXAqo>:tZѣ>*UȀT8d  ` h$@$aG *HÆ G &ߥK^tMim۶rJO?^zɪUĉRpaߖw}W)6mFɖ-[B ­$@$`RH##F%KHU&+VZ<oꫯ*%)SF/_J+X,ZHr΍E/+VP?TZU^~ey.' c P5h( YF,xVv.4|p:sL駟dݺu*3g: [ܲeKJy& 0M/!G$`\r8U&/j bZlY۾J-crʶuʕ~Ͷ $@$`** "p5jȑ#Gr3V:ȡC'P]2ڱcG/Jk׮m % Vb" d @4J2 $-nA֭+ܶm8p@~ieYhQA޽{ ' aZ2e/T#ϝ;'o^ZhW# P5H( G}$vR-jՒ"EIy敗^zIO˗/Fs=VPSNJ,VOƍ'ӟBm$@$` \QHCAHHIڕwV -|Dž:' @ P5aHHHHF]6\    5*& P @ P5aHHHHF HHHHbM h $@$@$@$@6T@m8@$@$@$@$kT@cM'   j    Xksg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATx ǟ"X[+[VCRJJTѤM,ADk[H"""" .BdO~{߻ߙ{{>33g39ySg÷ @(%ʇl @  @ hIq @( @@I 7A  @ hIq @( @@I 7A  @ hIq @( @@I 7A  @ @.\hWHi)FzI&lٲp2iVXa_}U-,}8Enٲ-^8kaQN[hQ-,}8EIڴiSn;wn*>j֬{])lzFl7yٺu6m\+F@ FǍ @@-@ L`t@ PH /%,X^|E͛M!P+7Ez)jN)g $3#GMxx ~~@l0P]MWTFn& $_k$pM/YVV\pD3''Q,WZtb[$wDŶJ,ipDZkB0QIId>Rr15|r[jUV'i׮]X;[NXD?!q @'YT]v#GJ3ןS6mo?3f8NF.]!@!)xUsύ_N&N\6I8g߾}^nW^:A D@PS&x oMFFuGmGq~ @ "%/|Fp9 @ :"D @ HA$-@ @"@ I @@͊ @$$M҂ @J4+". @h4I  @ +Ь @ HA$-@ @"@ I @@͊ @$P?jKZ 4M6٤r֩ST͛t?7O mQ~}yF FW^5mU2IIݺumÆ Ig^zM6IG*еkʕ+3`2tMm嵿2R((B/Hd~/mU.>b"A &ߵ:aD43B L4`$@ hf> @h@I @ 3|8 @ 0Ѐ @@fp @ `%9@ @3, @@@Jr @ fY@  @2@̇ @@ (A d&P?]j5 ;[VOngώ|ǎc@ D@dЕ+Wڳ>#zj{w;!/sfmԩh; @ Z"+hn?ONkbq~>sn>- @@D DV5qD{Wv|-Zϟocƌnݺ6lpFOXڵkN:JJcmST"mDyQ-W M&&0I$Vڅ-t^*$ ??]-YĖ-[@%\JhUKSh߾.\h2rP^=ӏY0mGU5ȲF-xF[XUuV%-Q Lq,By'"~@'Md{GB 47m4FH߆ 瞳C=4&|& @@ D^;&Qvi';o߾֫W/OO@ c=V־k#GK<Ӝ{c@ D@G@sE&}O\iq @(@ˇ!@!- @(@u@aSj VF Ʉ@  !@j@Ʉ@  !@j@Ʉ@  !@j@Ʉ@  !@j@Ʉ@  !@j@Ʉ@  TZ5&M[l $QdҠAbUaۂg$WթSM뛞 6Vnݺߍh&@WZe_}U,*ŋM" ~m@qҤI6o<2 @"Pdؼys/mܸq6m4?͜93FUVZo6lg @ , ]wz뭶.X=& @J(ԧ~]|._߫;KB T9@P ݻw?8%NӦB$ @J_s@/۶nk~$J!@2Dγ?;,}@ *&z7ɓK#X @UI )VX*Ri@ L뽷k.eDB T@}ݗ^S_u ߢ|%A;wl[lEk @(?@P7f͚5_/#z-١CحСCĉM+.I;tHc7@ l/>n4R^z^E=X;Nؗ;vX6lGy.8 @@tUiݺ-[f͚e۷OwYx |G覄:u$\?uTԩSLѣwߍ>#馛x-M9LիgQ,W-m⢋ŶIl P*;_m&~eCq0NΝF:_j-Z:v. Bz!{'[nIHB+7on .n{9>{Il#&ZS*vvaj[D\Q.$rJH$ЬY"tM)4-F'r61qg3gLW|ݺu֮]zowN:$;cQK.5 &(2iٲ-^fa) `+ӦMV]J/%W5jdo͛7/A>D6m۶-Zmɒ% r4c ; *իU{ݺaÆ[ڗ_~-Z~2Mk%Onf @ tsj7|p 6rȢF%,z6n8aҤInj}r=-\Ro& }5-N @ rۥ'Ӷj+kӦiZ^[}ϻׯ{ove{?4hr%j->}!Y!7@ @ n~G6~xeK %d.!lJSC#>h#UVs @%kfwB0;9Ч>! D@  v)9*NK&1 @^GyԴMi^tE&VZU/aj@ @ _[o9?%ߝ& Y @ "Kt„ he\4 @ "d. rDɰ @x_§k'|f͚c @#Fp[k_ e@ 2/Tx≱{o{cǎE>:ch؁ @UM  6̙3kꫯ @@ݻ}gIU7oi]#uH@ -@O;42euTK,wݞ~i@C @ F Tv~@~v<,Xف @۶mk#@ @ @tD-nݺ֠AߚE&jS9cxFI?Qb[Vv֩S'kaZRALR zRÁj@ϖt D/(+\E-xF?/hEKZ#}S6lhׯ/] b #\ܲ*5kի2믫y1L4r.b[$>`i D&͚5+VVE$onIuU4}!7Lf} @GڜC @-+~2 @GڜC @-+~2 @GڜC @-+~2 @GڜC @-+~2 @GڜC @-+~2 @G*ׂfQ'pgF5iQ[r}&4>|7h"?3ƺuflM%6vX|x7ڡCGk>`ӟ .47#ߚla5m4wF]KS=zn_ @ :";?i$7n{'c.[z9rNv 'X߾}hiv @"E t;e.HAN;4g%/@ ],>!Ƶ @<*F->r @ȗhĸ @(Ef@ | K!@"Z>n @ȗhĸ @(Ef@ | K!@"Z>n @ȗhĸ @(Ef@ | K!@"Z>n @ȗ@|o4h`5D͚5lU0$G"EI#YJG:u`aÆVn][~}\l֫WUI&aÆU)]֭[ !bŊbn{aجH䡣(2rդW 0Id-sʕ|Wƍ;&.7m4a*PH$#ߚla$uʕ+cׯO8 @@Dvt޼y֤ISNF-lѢE;̙cypBO?]uU{Ǻu;f'xm۶ >Z"LD`ȑΈ.s@ T#:uu`TZ~OPBM5SAիg>5ijʕ_ǯ85uJf$ "0~xOjƍsube4m4h`}wݺu+:JM_O,§~=[l;fΜi8b ?sϭj&**W_^ Xkt?L8X;8C+ݻFO bgt$ ͦۦ8Bj[!4%=䓱Zu]Xhd#p1ǸO~頃bIlЪ|GvEիMsNQȽ,ř;+ *' Yo&UN#agZ}g!@&|@I @ 3|8 @ 0Ѐ @@fp @ `%9@axGݒaC"Y҅ А, P2%CMF @"JH<J@^zɭ3qǙ|M6Ͷzk;S'?+waZw\Ν;ׯ_ov⋶څ^薜-AU@-! @Lꫯ .ڶmkvwիv駛V9ꨣwqX߾}wߵښ6mC=ɓ'~gSL\BF@#Ls̱A믿nrdv܈7opBNJmݺ7 kܸV^=ШQ#?~E=m!C=/a @ @#4 &L0 ?b9M ^{IH}g}n+WƮg}O8#bS:>( N)j5mjN:)!=vn7*M6 ׶j*X۷Or-mժU q@*Ш *N;dK,q¥FE=X[p]zn\:FO8w2> ᴌdD P ֆV@%pnӜ:u͟?߮*ټys_~i8e$c%dOo,׬Ycw&եA5 *\-=6c 7BٱcGk֬3LjР|㏻iY|ɦQLᤓNrg-_~vwڏ~Lp@d sCdJCA T0M ɻR̙3M .~eJs&6a҇ @H | @&6a҇ @H @ M!@ & @ la&}@  88 @h؄I @ h @&6a҇ @H @ M!@ & @ la&}@  88 @@3b_}Y&eիg 4+W<ddÆ mA&Y#uZ6lPAF}*>uԱFYgM7 ъlZ˗/7ajn1@;ջ A߃kSN띥uBa!J;wߵg\̻*P }ƍ.]4Cʴ0&l|֯_fV|D/Bqi%ч?]9#!CoQ[˖-c ͛7Ak֬{N2YVK2N띥gB 2'A3;-Zf,T'tA LC{!@&72n ;駟Jq( #Aq Doa~a F R4#/M>ݶ~{;Ór@ / zi&Lp 2Z~`O =1kFЮq$ ]Dt$m]/A@ax&dž9b-u^[d/duEXU^YI_bEb;i䭷ުqFǸq@k!$0H;,Ee̞w[_ "rO;tJ[eAe-6=l۶AşV[G@ '4.^C wJKs'iW_}5!#μ'O6S.X  hM4)Ht\C숆 [oŮngҿ6`TСCmȐ!ΘwΣGFv h2B򽾇,|4w @ \ɜ6mZB&ѵkW+3x/cڽk^zr)#$ r) LFHrD PJsεG};<;cYO2źw;ܹ}'NԩIŏ=:vvf̘C=ׯ_pmRcaJ+ nvn$,ƚ FLemv JWUˬvS 2j؀*CU>P<@) Hz?/2ș3gW-bT… cڑz5ne]Yf wTJ #mQaU9 + 0BX,JWZX[|M4 A!iA?:)#h@JЮj{M4)!R=]N#8 >nnw޼yŋjQu3gN`i*!%pQXhD;Qn ,[,PEg PbܦM7kg8,?D3扗tWg~W)H=by?=nV33w19 _hQZoލ}G fp$cqM-zm>YdS%x-YL7I{3]9@ @U q9~zOS`w'ؔ7?.M6^T2RǻRN9ڧ}ry977h>KRK n`ηjnv'I5juҥb$ܫi*!\g϶>\ٻ|5'#1 @5]rʔ$j:)TI #MCQrNy(F}%S '3" zxnyGywf(E}ԁ ( h&~*+wuhN>da\6}>}onm+O¯} ;@%j~erd;W_}=NF5{8]#_wF}KmmTJѭDe4wnF?/AskKױG}4rX 3}=UGG`*:d4%G#t͚5+H@YK8B@ 4iAA@ bD4rFC^{@ugȏ~|o~θQw1DBڏ`K6J#4Z.]lPfY Qɥ 橺AY|˔z 3,a[ljySo;܀4`5:a~/@/ٯ_?M-_;ӊM@$sаu|L;q vO ȥ :] :]oWȾx"#4o49MJ%m?CZS *F=p θIƂ<򗿴( tՎV\իWg۳Q6!?kbI(\ʐt[C=a-<2{(t*,J[. :]?rX PrO֯^x+,Z}A G /я~d/b2ޑ)K>@1-^K޽]/M:FiE(RU?ع^MTԩSm-eĉ7gҋAVo&O:A)J~ꩧ|Qr/Ih67Bg6*U$vɹE:?І:ZW_uԊ:ZJ0>\|NLklmqgr.a[ouСCMBkǎv o?~Өz%ԅ:@@KA< 'oV~r޽{,J+=رFؤsy-8-,+gaO&O_~ILvzZȯ5r_>e^5'4G?z,e8mڴXVLH }I;k=3lu1y?j d}e>s28ɥ k!Ki0UsIW*0j\*CAj4r&] gѠfHEle: D@Zyx?͛7ϭL^J3[Z7tSNF/{"hGk.\;[oe\pA,N#[o[3fG«t[w}4WUGq mVBv#H K+ri\ya ;M|诜AggJ@KA< ' SzrMkd򨣎rf3DHҸ;l6h ;eFt$(h"U||COƢPh";bg)b7J , @zzTai 栃kp&J=(!\,ri= htƥ 7C1F >@y3f+SFo-ӁN9唔)Ν;#n!wjDۻϏ>(۶m;֎FHx5?5DLsK \ʐXGJWe :m / :]K9(lLBv*w=υ[. !f#y@!,h>sKyv8i.{1g Q:{ /`ʱo4)3f8So.]Ib2rT~5?\}  G@5V>F7_~e0`@55u,TAN5SjA ?t:իWy{BnT'?TGoɥ,\Gr-` DV+vaH/A/4v% MFȤ_|Mndr=ȘVP)]RM뮻IO?G6hC>þY# Cos5 _tEYːbPQe <.)Gҏa„ vg%5R >HqvȐ!k )lMD@믿,L?3׹(xz꫑x3z] O6[@\Sn6g)={i=z?p\hG>uF9>CSHJ" hD-~VGi2jAB7 lMoU]fI㠭A j#]iEsa#g) ҇zGMky睮-e&vr W%5kI?e/X?tMA?V\xkD_s9ǭ0>'2'g*1&={#wW4邦۴itI}}%k #:mWmtwt@+"&qEJ wN9ߔ3gNVgZ㪫{[nT;*֭[fqG/dT/<h䐋{ 9.>/{_ח>ZQT).ɑ3P$Y/бtG1wIN+ݱos,]3Bi\QmY)Q'Hz-i' F.0 @%ϛ Q}Y',e}qO?$r{[BIv2tٜ-rf 6>(;C^e裧U,؊ >&>͌>>ɝ{/>;Opiz])8ײ)V(3߁JUg]LA˯V0h7"!רoLD9@PA#r]ȑ#VKe[ g˾NQy@IDAT\l! c#|NLӕᔂT!,O?rm /t3>r9cyWr̞=۞z) 2qDrw;m6J DJT~z4J9p@w/tL >%@R\u4ڭw10ߴF)3u>c7;nDH'u9묳|!R$#YTS~Sص^K r595JE@*C~uQ|sFJHrL/sn{otlδΝ;'|\y% C鯓Sޓg @ 6NKWzӗISRIWT>>yH%\/!OOBr['7ޅ$^p[nŭOwx]XEtuH[EcAaqcy # #¢T;¨_iʐ4nA] *MJM@~__NGSnCS=P"^V!B:O 3LS:Z 9hEPA *F '+d1xAnٲe{& p2xw0Q.?e@vԲeKgH4; * < F8&^ _Νx҅\US.X Ш~kȑ#&t\h*%>@㡰@ \ve@X+1 j$Usx7Lc* tf͚5]fϞ70 K] ')se$}@.@witRmHshH瑏e?5J_K.[o%LhZ/-K)gџܼ\yn+꼖K^=AB|# P,:od1m4ܹiդJ 2Ω@.zyֶs_JRE[r@)3PJtAn\JawlMB)׿ڮjR?^z%\@pu)'@9<xn@8$|@ 3E9<^ՒZ{@?SN\Cĉ6rhJ frY .v~衇oB}CO;2nwjQ };2XHߝ-\y\( b3f̈jj4TBt'D3gδ1cƸv횳+b)p**/}8e8n87R#A8zJ#0b{\-nO<[γ_~.β~uƎkÆ sy̐֓'@1M޽s!=ŋ|}˦YM A ̒!QZJT N BPFgr>* !T?x[c]~h"ᜄW.,]TIuG!j2>L)?|KzQ{TB}t:7TTmW8hC90e޽{8jO;D{3ѣGǮӎTx{֭[P4K٪ci".l{;rƴ.v|.!X7'2{ >bҬJT#^ҁ[tkH֧i+aVBhG(4RǧVe2>jpIr9s=.E}Ul k9sǦuֹ)x/L3#jxF .L(wGJ<n*@0qttK\S`sra"z.r6_a=?яo12܃NW|/C}U QJ۷P#"ÁW#TZwr#z@ ӏwQG:]||c(SGHA4b0NO:3HTR;H"u4ryۙ˵9d? 9kܬEeuhgV^!}nN_SN9%6dMG?̃ p %}о[4GhwM۶mcZt$SJ׶"S,\_A$#@\ Fۍ7-ӫNQF9#Y, ve4ҕmT5[ϟ?͔i,ٷ\=bP9@+-  P?p{7c3%;8RӧӛnW^UHVYsOK/ZKJ@dTP5jI % `^{m\wuNoSo:裏#8-lwp!ip l|S%j tӣa@ F5(  2K'0]0t{tq]zB3a 8MkN`|M7U;t;cO>] aQKqs ЌE!%6x 9r|nwr# T0!Eiϙ31^re醙?Of=}t8hWb2)6iҤJ/XF@WKUpɶ[ڏZZ @@m%Z[[r?VFrr|sA ֆowh9իW_S$a\fė[n(s皦QN=8AH{N/ѪrM2o޼WjIs)gK>2vc grԒcM[^)*%`nKIssg1֟_-Z-gܸq5J%$ @mh&"ns>bO46T9o|ЏuQC P *h%~۟'7իO^4$W@L2-)'SOBijgnyώ;ƎK#~ۚ4ib{WrH޳-c'N4g},(1|de@S(1V+{wKU\0asONj+kڧ[r;*s}> a\[kJ?*X"tؤ7Y 7$zC[ng}֎9{=SD۔>GK\hzM75s|Rx&…^\陻Ltn5?/کSׅ!_W-z-{W{5G_~Nzn5+E_{?8ػ7>0eZd71%A?9D/ۍ7h>*n_.]CϱR-ߛlTD%ƹ<2h^czlӦMsV2 |G@N8h)5ǧx P}4#N04[.]jLNȷvJ!=gn-{{}/9>>x`SZc=zy|: `Jh>3q0ecqk QaK/g'oyfms|jk=3(1,qt@k|O>:fΜI=3<>SJc7tP2df5 fvxnB§F 5%$@v*T31-Zտwq|NTHM](~V#\]5kV K]Vk&(~nGJ%~m,d^X裏ڹW] P@}Ĉ3xET,ǝj/Js}> e)Ճ=hz Gx<~JIرc]ܥ^jr=#{"ӟggݞݔ* # c(h*P#/kJ'C)OSۣGq])#j߿+H]""ENȭ:FQb,g;F9}DK}D z.3hJ3V#M-G&o4r'C%\RQbY(%%Ѥ?)rHJ?"U׿K׳Ъw|_Z{_e)tSJҗTzXq;+|Kj]w <0]k腓 b[ZߡJO034T]3K !;& O :tp?Z۷]tEnx$(&I\Az|qN5@}LJ0' sr(1,cSʹd:U>*Vg2F{RwQbY(@P iPI"^XeqOPQzGzk#xr}h޼||1cFj?J3udƧ]̾°I+#6m8%bʞ0드_)>*za6ړ>ؗ_~M2mr c$e} 5R(ԇ(1~zk5v@i  } ėAׯ"$RJ\%ƹ>2D_t\bv0*#^,l{ % u%JMttSSh\+hdC^&^qN1?Yد6uޖ>~%$}(JQŋY ),"m  0}dw{*ky(ç%{%ZT N5?+' *c׮]mȑvI'٘1cAjN]vӵWd(2V^{5W>վ6o4Eve :3sgZ.˿/lvn[fTf}Ǽ(2j  eH7Vz1hۏ !k:Y\*^V|V#Am۶U>wqG^裏vl5}UH6@9V'PτT8;@qBY ^JquƏJ4lA:IqKCF^3pwXVןqw;SS۷OTW#qR їbDJ: ؖ>~T/Je-R2dT}ݗ;\34-%dFb]h* & #a iCL PMk<[6kL#ЇO@ hIrEA"NNShu ClAUrʥVz2 §Qn dTŒ|lyWX\$ɒ] 'dwEjM 7 xM>x34Y|yd @1JP}ܾ9ާ !pǦ?SH>Te]Ԯw]|Jo@$t޽{yf-}ТӪX={?嶣Fr?яm}}AZOSO=5H?@ V=zם%|jZ&PZ?\4ikTAZz)wJ j? _r%n% %- K@OiV-}nLik\>~֩S*U*{~[򨣎r˥~ rͨU 5(kDG>L_pX/:rL-TՈXeMԋJĮ8L(F5=Uk߮5`5­5/pJN߷ KT5\'?PyjθX?8!S%qLV4 !cd @ O?ԭ޵kWуXwyty_Bj=35ݮխt#+y45:tdK]. P*ԌRT@4=:9 %H^kּz-o> |:ZD`TOzÌ3Lz"ɓjIױc:T*B(5n qTA6nsKd>mV9@* = <-w뭷uL T aP^§,}rPVDBN{,At7w}cTt۵k ]NjNi%ld*99.wdQ}?5k֬F^z/]F<*ds9ȑ# ?kё SnFJթ St UOHns5aPo>ѳ+Ey j! ]W^y:,I\&/QS2BՔ"^A{-@"O &T FPYylea >!·E@Ő!CKH T0I'^r U$k]A:t͝;׹s'?9HKηᆴg3Ѓax=ҩG#t&SIC_}J*c|Exk*|rz5LNGz;G6uriKQ &^RWP=#ۢ\r_hE*Z)+seRG P O~o^in4TH+! @㫦_m}u sQZSe:aL>lg)A*W5yHU>Gr/-e}$P/ `,E}$PK`HBh)G P)|I78oߪ:{NTJG P||ԫJhHP}%0 ~Z ՚(E>JQqP}pJQux<]^T5kքUn)<jH% гgOӟޡ {@@Vݑ0|'.ZB֒9?%@@y |;n$}jŜFڴ|=ssc @ "jsAZ;v}{շ6 @@"zhi. @ @ :' @@pYA=z8sa $@@$^ K=}]k׮]  @ 8ǒٱFZ1˟g @@u@v.y-%h~._-ؤIҬW\qEB DFHj*5\cݻwwHZN:Ge @(haܸ+G e=GX\@LWICSM@ 2e͘1kܸqՂ ޳veXv&OlӦMsko 8 /^l+W~aW4k̽͛`%fҥKmÆ UM6M7Ԫβ;wn@sOElٲs9W_\ ڶm[p {qgaǏw0ay駟ڀlJ:Ԇ bw6}9v @E R#͟?~aGI?un6nٳgرcmذa冷G/iJ@ht%oU@!۽F4vZ9suɝr-ŬY/Ν;%c@9˴xl7i5kX6m]|۲e˴ׄuB4|C5Y+t5s9gLQ@%Dtc4z%8=Q;6Eu!7oR> 4(ԃ>8vjGBnA)E>G֭îkRէzl ;>v(e}®KTҗ0)\ 4kw~j|iCu@-W)Կ|4y饗:O"IiY8n&n}sB~]w:޺)O@)4N\bEtzARv_|y '&IH=dЕK>Dh<(MfRhc֮];;@ Ƚ)&M7oz+F$@Z5j4ݗ_~i}QOʒ?[Wz^Kw>=5l0|$K-@PU B }f(E}ԁ* EaRG”wo~;蠃nx+e9qDر}vwڶnJuD~@D ^nd~WDŽO^]ȑ#]]ƌHK~IQF9L J!SO9Ly+C/_| 4WSN9hYou N~]Y/҆''|Җ,Yboc5.t8=ܘ%M 8]#Ͼ}:x]vY^b@ H(~]zQ:ujVM7};_QTS*zk57lM%~Vyڬ,娳jkg_|:R=5o6JP K$X>N@MZ<#pSQ.KU7 J cˍ@'?#F$X2:|\Ydҗ)\ aC0񀩳'vXcK%$DJ͌绳§Gg#@FRQnz[Ht*;|.]J5ҹRY-U듃t/R g(2ғRj<-HvVe˒JH~@^Z'J~N@.^|Egd?uf)w>|ԥ % ?2*M5Xˇ2vP!ȼ=jR iu6R޶7ճ̹~6RFH+!@@y?iӟ G@S2(k^x: W" @ףGX?Ϝng 45"#% ٗ@Xe|G45OU~J[me`dn^uW(ѾAߪ~~TQv}>Rl\<}}k5+\CIT[JԡkkKT;O,)f3t@|nzmӻ+wvyNr$Z)~dCS3X"e%ШxV]z_-*/!` 3k֬Y(we\R㚪&Q /|zpďfm>z."mlJX饐AЇއ ~"ďn\venA;/l:ӧOk$վjBPG) F5jyYdJ\d O ehMh]|`=S]YklM`̘1n$w[׮]W_-hw^z)!)S3iyN:뮄k=X-[ r^j…Q+ɓ:\|7$B)V_4c{SjHL^Li W2zBW| F^'wpr<(,3冽a1W͙3 wDvQGw_9ԩ?tKi4>L<ٞ}XTݭcǎl;oNkW޵N" ’"(QߌQSSN1zzf=ENE0(*IQAsΰl0;=gzϧtWUwWޫA[|T֭@P "lIc8g4g`Ӽy3>DW,XVCHkdOԩEڶX'm|n^j^JrByYeWnЂIx?&U&MhTseb)`f"}Oj#@>z}tAH~ m (C9$(i[UA!0>Ѧ*h)Jb! ..(9ì -sU?ɫT(w( f+Vq?׵ѠixhdRõ<ԫj[G[4E|>agX)/Y-o%]UÀ~).~W]ZQ L%@ENJ:v(D ѣGÌl1Mn{D k)Ga.Z4O?L4I<Ȕٷo_93ЋFNi'u_&5ځNSW~Wۦ9jɶŗ,]UCHGPit4qRoMF+Lw1S %d5ዛAn"AQ4hĵ<_foIef8waʺ/]#lR)OƍOͷt֭k횙.g,@COZs/.W/Z w/8Eh&naqEȬ ftѲbbq*2mEi*ۤa Ɩt44Aݍohr"O2ԃ@p(v~R-h9pǙb7fx{%4%t6>aؐ2eôNt.k~TNv6l(?<\[)@bS~G!5]!=P1bDd3!mfO9 c}/:"{ Fn[RlX[_-M6-5C*1M8:Gcb/:>jQBl餓R>= hxRI3f̰ І3@!RBh~v|\V3 jɬBF(]]ZNpՍPj7#U w7`ЈC0Bh7Z[fT&lFn Kv7J%Ss4%)wIh&FQXL7ϼY-3fbB&J~)@~Əo;:ѽ L룹bDE fhڕ&>Sh? ~LhGxnkr+.:gi?ԟ}x\exƣJ׺J}lڦƿh^_W,"UuzsMM27*&V;WfT4h+gŊFiΣ Ek˖s\JFx;|1~?WԨn۷^7SiR%lyT2Gf^>z嫌1y_&c0uvnbhRct2J#+tf DMۙЀg̘5w4%2&*BEezش%iݺyHt 9fE{t9Twy|}oo^z]{-<,Ds={o=8lKO%?Sk=y4_b\j5` cيͿi1*z,͓yKdZ2sAm+fM|ш^͒= "GHBAKϜ.[|YD_hӦ㏂f=zEAUsf)Z#ĔBT+v~˭kC9' Q2D|Ph>Z,@z衇G |%>g5[BvOˀ FsN_P'Sg@سbhZ]ir| <`5-mbc㞌`BMh:1 vKhhkY`?/H)" F# >O'xlO4`7ty5j(:t}vy}]K~9A Һb9h v=B d/֔(ή'wPOwvo֛@1BxbR xPϔx%]֘=r7.퉛RT=D2d믿Z9zj?Q @d"|rp hD?|bł f+}pJa"Y\V021Ql3oF;E~W RI S:r$bE"ZIΧ2툾w­A2~Ψ۟ӡ`tۿOոDIDB <$L0@%U4G$> Rhb< ;QFojvҶeķ-qdݗm|Ot^7#2(a孬JoՂk )ǴmJ[:o"n;V`Ae>P-/j]&^)y Ӫwg9_| |6l]ַo_Maʢ#4h)ƎkmES|.I@x_;a$\Ӱ=QJ-?=ҵb+~12njMMcots'VDIZj]_(\˾߷~L>1:/Ζ] Hg[Txk!T#hbqhPˏmt^TG]t[G! ,Zh!w 'Mh6hm;|OyhI!z>DJd=U JNsHf-FI]7n(|B>\֛ ppRVfn*VmN"v$l'%錣EV>ً! Kvif< ѣGˢO>vK<>ȣxVK ~{ш)7@#=ж9a*Se'RnAmrac&76Kv^moԖrѳ;;g9޲i;-xNDy6^3$  }&dIDATB1Gu*'46-K_fHi+;߂Sm;K$Gb@of;e]M~yЩN/:twAڵkg͡AhWyO z% b1Ϣ]>X(+Д4`U9G提A}@uGQpPJo%]x?Xd u`K=xR_Wd4iԃlE#m*'6®zi6fJ;M %&J*&}H$;NI~xYL|Vԍ_x9ꨣʺ-k8-gB , xPVZBi?>%\`̜9X؆D|x?%]ysOt~cLyu uֵC}NuBw%/B$:ݾλu b!'mChW(WJulDH82''4eV=erxr¡3%zo=yh7O3qvqm>'$q/rץr[[>5 "~ooYV2 zU-9\@SN"t͛gct{ ߖN:yOuQ_24#}m`ݾ=a~~(:'ɂ20I)>VHFV$,B)D},&5w,5ZahfO ڣ۲vSB6Wn>7]\d<9EҰL`)Sj FPquO ;ә3mB+={GthA@W .7ȑ#;4x>c$ܧ k'K&0`!!bUɘit1ʺkb:Ovѓɹ͕ 1¦IYgDj,ޅ`.jU!.#;ϕu62d5ej_nM0ad{19L|x@X-4+ΖyiٲeV~)om+!S^~(>SAߎ4 2RE 1/\͙*XQxƯH, ܳĠ~)su"x͛7wl' +j2{Ѯ7kLfϞmqw:A_טYϏBBH].fj}k\ҽ[M<p fw*GrD]C-[YUA&LզFnI=H]S`'Q`@;TUYu'c0ef]Yԕ[o&"iްl, \6k̷+XLd@^|V[Q GL? q/ZIǺ's4$0]}+~7xɒ%;=~[^~@#OSq*}Y9sfDK!CRQ}п秤ҹkh佤g}))Ǜ ?"Ps< FHiY}| 9,̄9Y$<"/[T'olqZZ6ZkSfZL_[~SG~1i.bT&>Bȱ9I@yә+M6"qKT$GZ֝O6xxQ~bQ+f-SO|Ј?@yaɷ~kmA8 tV ty Aky[ȗfU˼%Eh'oCvEõfFt5{yK&Wc ]gc"lvkY586C!U֭_G;`$b+?CvjDQR!+TfJF*5ʼngh*) (4,fCcXV̳ͪ(JH~6ą.I6n\1-ݤ:iZ2}_wM Ǥd^WfS KV֐EF\uƿu[U41ݣJPBڵZ;L(P" #ct;髋/خ%鬳β"dWiO<5X^2SC-5E0ź.P0ЧP-_FHY ޏ;'Ȓ`ZdblRAfϓ✚fQNM1(>qseunmXvɯhH7Kڛ~Rf)6Ve s#ѶmlޛV0eֲ͕^.Z^W&bfr[~~ۍs]hն:t"ƶ1x'.cHU0SX;Z RP6_: FeL{#CTJ2HȟM&:\F$$,<?h-Ɍ"V9?LSa56AAVI\BB("c"4~жKhKt\7$V,qcKx"yR8bQ'ӆA 049~䒭[<;AJR佃Lנ=ۙr NA=xLE!зo_Kh"[hߘ!t̙w;ԡzLQl$"'2`J/C` .!&Sx3fu<{1rs^<3 XW0JX)JW)gcs6l|S BRQ [xꫯZ7eAT0ѣ~:+{iݭ=vzW\!GqD\y ?džŌ/,!0fh5w_+.W^}0 $ Rנ <7 YD{3K#\Ś.nqt&L+ԃՇm4 RדDID,G'.⎷l2n$DիW :g%Cru焆~"zB5B֮];+|ZЇ~Lz3 mL`(r1x*o-X:!CI \TΫZ"X}N!젵dA.Jm1I~"K\EcA`$ŊP+O@YcJ칱M0dvKtm ш" lg}ֆehLOg>+ݘ A=ܓb5E !А'$!2N7!;e5ڌG֡TP4VRPEi_~ŚaA;YB.Qt,xxѣs$Ğ"atv l9Nv0"PF .` e!+@ &<<xO> HWa6h_3!vng4hKHkT3#mJ>nڜ}4Qn}usЭ"(>~W& =n \,s^^^B"d%S<Ӝ!;ބMMۖP ߧs:y.G,iRi\ł ^("( '@D+t/4̄$N,V"("( P{@-<yƌ6^2#tR,.~:{ QMfj;r:r?~xLb}Z.~pB:ةTGt^A4ɓk׮)]'qʎ]4w\Ylt1bmYhJ2"U/M߽-N:Ͳe,X .i0!*!oͅ&rA{dY~sQTI&Y~DŽv߅&N}V-]z MDte>#]tʺR=X CozU| z"("(@"h("(@"P韆n.AW{D\@3(E@PE@PN |'ҪUbSN['a~*7o3[릥QF6Z4.}M Y-a+-6lX c?EWnO6 `ȻܲeHQ8vX'5nܸPXQx70EQ.xb'c l0xywOG}TXBIR=-Y\`N'|R?xF&L+RqAl cǐظ)#F1c Ců*nӸPٸ4i]{r7ʱkIl;S #$0ڨ뮻/.BYǦ);()[KҍV8x`*R~AEr3/xa9S8qDoB#gl)0K/d޺uka^ gΜi>ӧO/ׯ_ѹ뮻 {9{03ΰ#[3Џ;a|~# zj!d;S.lb^q|;o(t~exkAun˵ (SJpzt6Ҏd.kq$~+уjժ%/3N6PN\rJVi)}<&Df*ӧuYr4V<iݺN:N*.۩$~7c]rS0`4ii s`jLrFn[o5퓭AIly"dhhܷ%<׆goD2-l4o³17>@q*ŘLAրӈ^m|XJ7oYfEV(cښQZ / 8‘ۅ thMì'073ЬY3޽|wYh¤؁[~>Y^1yg,ع('amk'M~zVij˥1cсxy,`?O<2 Lc}3sڼ<\Ϋ =("("64mjƊ"("(P4*zNPE@PE m6h5cE@PE@PX =("("6TM"("puW_4QseXP4-VE@PR~]UIH'N4oE@PE@["vTM;Z@&`:H3f̐{OU>p@,{ŋg!D''6:V*D]:#՟>} <'\Gm[#"(a@_^FG:uH߾}!Co-|رKH.L'O>vQGb9N3|Grʰaì_J޽夓NڷooPB,BӦMa9˗gu+ӱ"p 2j(oaE@P‚~hBܹ\pVxtG8τy߿ ˠ>}*=z 6<{BJ@i4tP#'Er)o;SC:tpO4zgdOLcbrr̘16饗^*{QIP0!pW_/7t駟ngbW_Y!=PoQϞ=eРADڽ{wwnP N\A"_M6-:JGpBw(ժU+as1tR3gv?cmn8ݮnE@֭3>Gyd[.Qӧ|Ҷm[+l/7:ԩз?ޝҭ"@c¢'sFڵw:Ni֬Y 6Nڵk)x^[PE@z֬YcgnnZUT)v88q 2- [nrJwj*_BoTRJC@sε{#iv=vJ" Iy:Zd|ؖ~nr˄ fkvfϞmߝҭ"@c¢'+hgرcMygWcO;`Q|͂m"(aC~_#Gʊ+EC&M> \Sg,T‰EovX`.B p-.{-[B'.|A[aFp OAd]8˕LPľ㎳+ٱw/IcBL4xlܸ=]1[:(sJ3w*^=*T0#P^[_ /t{b ZFh0}#:SrVPlG[ YUyI#1~)>XVZe ^t ^E /yO=z0N=|pxJ"ի%|[ŊBL"wSI).#.'.b2euY4E@( o"|*)~)xD>= "("@}+"("$ڀ&ޭ("("@}+"("$ w+"("D@P劀"("(!hr݊"("(>P'`z"("(@r~z"("(OT ^("("*&ޭ("("@}+"("$ w+"("D@P劀"("(!@TPٮIENDB`patchwork/man/figures/README-unnamed-chunk-9-1.png0000644000176200001440000012662213565477507021231 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATxEAIQI*0#Nx3̇P0#"""9(9IPZk흞}ޞ ~]Uի9$J"("(@zE@PE@PE vE@PE@P"h^E@PE@PT>("("WT+Z"("( E@PE@P y[+SE@PE@PT"("(@^P4pke"("(*jPE@PE@+*nLPE@PE@P"("(yE@м­)"("}@PE@PE Tkm lٲeq7Փ7\.]nݺ~z_d3i7l3iҤ{ӦMW^]jժ%?SdnXzu 6+VD[N F_vm_eÆ WREZhaxC'C dʕ[͚5#-L֭3kɒ%Xҷ5j$[͛ڵke͚5eVVM5k&˗/י$LQE Aeb-9PgEB(wyn`xbHQKte ޱl=c,̜>摦MFee"e]oe%]5"("(@@\e*"(""/4"("(@.Pԅ*jӧOlDE@PE@Pr _n&rtU *"("PϜS})q{Ȑ!Ҿ}{8p`"("(@voԨQis<١E r([2)" N'.%E@(=\k aTQ}:-RE@h;0JtW7E@PFIժuH?72U%[ʁʊl˲ʮl˱ %YY3DSE@P2"6_(NBC%e&BA6$uՋBUN7≐-O/rxf9G &'̣Rz} 4/vOhmE@Pʌ"dTuv?lZPE@hn))IE@Pp 콥+"(GdJ@RPy27 &g}6 ?t-MRE@P2"aGE KJ,v)6m044_͚57ŞK_V!~'3A~>dJ:[~mۣN~dFld2鿁wXK= Î҇c }5L_( v'< JgWF(+J O\h@$J+ɏK 3i(K6CX"?ԙmugM~_X,lq sk>aq䋚'l }<YXnyTc&l0Qvg`pϵ"MRTJr Q+H1s&?~{wyǸfNN,QyOF͏$j^p%Eڵ(y=yIvp B]*QV> Jرe2?WÆelGxd\q:0He FyQ '2W9A4@* vɬH,[-GPE@5k֨ /I$O(R{h'EwY:S.0`s9YYE@PK/$^x̚5KnF:th{GN8q~2wo^`DAהBR'e3@yjȑ2|pc/᣸-`y"h.P Pn+|*+hE@P*,zǥN:L"Μ9D޳Q){J`۾O?4uFw_P6.D=say}qqG9`V[<~b]f}zjomOǣ P{"(@XᓃA{1"ROՆy`IkᄒO(yleX{曲*z*+rl x@;gaOm~=?ZNP4GSE@PD`78P/l{R@EKR h.ղE@PX8GJpEIC`&r_m@yE@PE te; l^8(cƌ)qz-!^rC[OJ?r}6A!/}|ǥ\}d9dSV@Eå!kOMzw˰aRSOiӦɕW^)/b\MURx#+8/c=L7IYx[~r)fSO1gWÙbliq">Yt*)~TZ6s :Tn G?>aư{;uכ6mwQU/ +peƶ=x{gw׿Uz!g}f7+ E2 $˜>vlmU|B#ϗ I?qU͛ ,X f*3ѣSeڵD\U>DB%$)FhРAky7nP/,=1D!e nM~0ŇQOfv@Ky|o1}t9R,1^L"={ڵ3鉶Bwas| QrԺ„ÃLba:8>L7/x:e$_|U8)x/x#.LP@5qwh0V1^%"zrB"%n."%WnROAK0>G5?40 Cܹ+LqV(XDX}:B iX$'0~qܞ\~U4jي"GyI8-;ZF 9w\=شۯi!Z@ڂ@RKR`'% c;Dޔ'E  X gG ;NK+W5(#M("( l8W4#<"("(@ @wE@PE@ ՀWLٺtJ_]&_ϟ/O< I?Iw{|Mys`bhtkE@PE"!Rw[ Ϝ9So?sz׿䡇2EsQW^)ĀgUT•N<9\e*"(– %@ߩ]!|9_~F@hD\}ղdɒ/䩧2'V'cK TE@P -Ch琓;֏pi="n"7 ZiӦ](">T.vƎ[*bz#+؂ϧˬCY*Λ7O|IySZHz-ش;e=#8„8+-[\kҤIYYwE@P"s 7 pUWɝw)'N4E -<4~IEf h=Ђwڏ /P[y4%7lYڵ.Gc9{lq?ƍde~G  /I ([Æ +3&PE@ h8_ZO.3f̐{jݺ<;B)7֨Hؖ0h}1cJ+ 4{ >\&L`!huQҷosPaѺB`A[oDڲeѣG.+-_V"(@|'_=UI[nv۔\` iz}`̦ҽrGasȖ03xGYx=6y\:,g7OS{<8ʱ؄ߏI [ft;(Nݫ(`cO 4)}:qƙS˗/Og q u}XYӦիWfXsgLD5j)/]6QF6msTS$^V[e!Ɩ~҉~938IJƫ_vvNs>zNDo3F/2;.]wiv{LVXa4(^~e:th*;\MyOԒFז{,s4qCߍksxоlC-mذ` ov`(gL~Hc QaÆU)+? 1(,1 M56YQ$*f(uR~҉>97o\RV[W s}5L_#a|<;zLxpXy:l32'p\YAifE{g-zkdl5jdƎWi?x 83& Ud"{ FXWE@P\j890zI'gl3%4'WE>):Ț{ζ  q`^hО("D@gPUG=dzIZ'G?S 9 *#q,T=ͫ("$496''[=t&(!<)p 䂭8d\@AO*"(}g 9 k 7_Ct?,FuE%,o'pN("(@SԪQʚG;/9T)/BEMB}r9Ch_T#8XE@P;[!W ixe/U wRݒ. oy@HՀ&;}w&'#;u$Æ Kgʆ"(@EBErI_HKSr"6IݫleN~ʻܱ${ٲeFtr5HVo8}V*D ѿH3g!$<+O@jnstq=wǐ4LH@+ujیf]Y $<'É!_IЊtCpX M("P hga^o.8QZ>jK٭B'Ҽ~C5t ,XT])n&~p_oR&i\giO+c"Ud;M69-\5Aa?\:R5dγTazCH UV^zɀȝȋ/X&$!(SyA{i_;ȉЇ0VӪalfjloxK#\.\V[,#!tn!KS Bc,NզjwEYbSAAI~ ~0W.s\r%&&-ےߤO>yBRvm''pB+P_~)}D/kזjժ&A0},K\u|Ryݖ2~jC#%|^w)l:G F:^#*RTG/! ԒjUo\pHu?ckLд|}YXO|i[9y?m~exVZBl|6˦ԎiݺugN̉L4l0UgV{2'Rod…ңGiР&.]*&Lmۚp|Μ9;erǛOGhڴR^=wZ~ $O&]v٥Ĥi,Q-XPRF/ziABJaurơ刽jm SVUf.|$V*R$͜-[VMKR R/V䴷\SCМ~?LD*vde yvIA+]brҨQT-Zg4Li.<<[-$J+d\6N'-x,X2'T[F!8/7͛7G}T'N믿^8y衇SN#8hǎ_zk7Ɖ3fL)ܹs6 "ki&;w~A{9$i,_-_H n}V));.#)Sf5Qc9׺S9[mӝ-+l߸۞(t֬YF뮻L;6*rt] $gq|?oT#GÇW_7V`R' 5jقB-L i=3һwoM.l?3c7ݞ*D`!k̻ X媫 .@NUTBXOL4}~=#ml9 ,[6]h49gcY漣Ess}9=nsx M#vkN& MnX$

6wx WWU3k+<;X` ;|.=nV$iÛ߶cƍ3 Û7l-ZRr`Ȣ M6?ɝB_7qeqݹkPoZz,_]SV9[>\yNʣ-_~y~~GN&2_|axa瞑l~mw]/^,u)!1/_nBW; ^{Od:†CF֑3v{챇w}f+e 5Ƴ S׵k3{c"dUmdUA8PxRoFaJW*ќncbj`5| PG!ڍ&J^} xME%l*EH;,O?YwtM;(܎E[Z H,cZ6I 6a9DmBxV q{aÆ1A8 {E*hPwwdsN&73{Z~=U[IJ{b1D{weҾرBSs`Hvkݿ{!;#34+XG =\+Md% 9u-bCK>Biw`Ln[Dc3gQ6۱+o,գla=M&^N)% ]Vȸoɸ)e/q'?B)&eCQI&q`b@qү_?9IHm  Dhr Ya [^a}EPgGSyQGia!* 4v ccoą-e6~+4gDB\¨R8t㷔S3/۶Č%?d037Ѵ#[% p='7q:S8E[1§;j6'[s[~+;NCvF}o37XK~+x9y!lsb{M Pljt`2򝎆}U` Q&,5J(냝Ri p~jOt!C-¿RDϲƝN%E@O?]vuWL`]( ~:Pp!@VDvY$56+s՚#R(f}IcEE8{lX;&'Ǟ`+AnM: ׿eBn6)?!m 7N8@vJ^z 1Xrco*)@t87n8U-dܽ7n^zDfg. m}x .|GaW>\U ɗ4>Zc;wUFDzπĶSD:Í+:d*Fh1DGGHnu>l@%V!@ Qi2g./CPѬ .ʒnD]7HI޾J"^'liX}nOXb E wR<bïZ ShK @Gm'6}zmS]#M:""zc=f1ysr$5frw: +!~w  OP3O&Iܐv${R/Zb-|IMy/Ů% (lqEkr7vh% 0%)MIdACe#Aj M任j+ S ͏_\5XPVuh^42Jx1av|oC{UVF3d}R@r9 x{gP9G(SBmGI#&W;A Cjٲe4mGG5AR0bg} =\]x[p q Mh<,~XeC<lb@(F|3*U>,x1y뭷Khhp(!E =Ӽ82S(C{N3Cs .K,= ֮,BA( *4ԩv_%o\U;K&PødJ`e{ {v>h׼c2izCHV;tDG"0P,X`gs gPNaA]XKQ`Ԍ3́?>`c젙o?3R~@)yM <Ťۂ] M~4f[iԈTu`{F#mClx|~Z0( ) ^ `\3 2Ѐ,_\>C}Ir%w m"S3'|^55 4Yiĉr'-F@`NK-fI#hq3gڼ%ISصkz8y 7Ar(ݺJǔIJa?Q7{f#t<#0g!V;QWXyY6裏E ,m m%H!A|܄ySNWgti\X|8e% CȶwR[_yE6XY |&_rCƒI ˔/|ʹ E;0aftcB>+b!a5C q 2O= '!T`ywVI[{$kA~)HGրJ "EO| Jt:9AV:V0G0WA4@ bQ#]p 0?o7Kq-=(ǵrPEޛR@oLbg[Pv\=T)ϵoj?#J|iclxZYL7Iۀhv3]Q4v6/L Qy~O:e[{ml&AԈٴ̣޽>fPl&0hI :hРUŒ>'s>U"Vv <0}G7L]ϼ(}+PGX!4; <zR17&vA=4Nrm/k*ZUp=_B ĸT<3}B}{B;\- ~7eS*`E6^J"?cb˝8vbB5'uUSRx`]}f]~?2AW ӼB¶{;hOfw}ݨ:!sI,S0G({æbߟH۽ش/}\c@AYy.] ?ё#k %E@ ~Z.]vE H62RnjRʅ;]Fڐֳ#¶l҈v xgNJ-gv9SBm@yRc_ 6+kb4G*ud q<46,l=1.W8woE" Kƍg}_7I4+EmlkXF ɜOqV#sw{(N\5q:5; |E"?o%E41F2s{.L>*Ӿ=s}jڵQR"&CoZ"P  R4't-$|8 M*B-PQkg.k?G㜄b[Cv-[%alCU$<q)Y_8mdlfǟX|0u("(f.&LW_}e3؃'@C[?vl-&h6t޼y-iPGYAy9һ2 RSK52p,ei79H̶8Zb{ ~h_) s)s β?^w-eՓK P~m\n()"ċڧ=|-9xi;~8ʲ T ef pf+}wkP_4~v0 A" 1iBci?>#RN>'|9Wm횛v?8~A9'f#g)@f @"(@BOEAH"aL3fYg2=llyg7C=XX춍HezAZ2eV١݊Tr ZB"J< 8RFX,axJ5ugR^; WϕK@K~'SӔ@>͠!N<ĬWTE@q{ahB0m@t״C>m~A˔fp?)o,ݧ ¤m ~i_fT~3–mzՀf`9:;wQg"O@E@P@-K>Za" *gU@Նw~<6Md՚͜{뱙 Bޠ@IDATj Ňȷ{ERNv [?UZwn?[PE@Vs=ED`ц A4.oһb7%ӧslj2Di;3[lFXe˝<뫛6R~z&@h5v&~MHP*qȐ!9۪(PmE@Pr@+nbS C }u<))y{8UZN.8N78Z^hIF?;Zs饗JN69#iTRE@P**h Ԧ'Yd Y\PWv-xҊu?W1_0ErHi\RU R$9"("PYDvб`B o ӶKUFQ[E@PE@3)ZbSM;r,cͺ&h1 Ersʑ@|\PE@PG{Js7Iml7Tq4[D"ӿ)-֖+ԀN>]ƌ:Pc"[o%8]D%E@xP>?TLc1x͚RPTV[mt-?!$>Wp"<~VR$]l&N0#@y[Ç:'i@EA x{gwruYgI>}|"ElpW_n-gMl)3ޔ#olc-#HFkd"~TnuG OD(tvG}4 pJ'"Onox2k,s:y^K/{.upfkÁ{a9c5DaZ?`D+m6Lݤ%.j^k5?Y6aو9 ev77b[Hȸ2ew,JZpu]9 (c9j]ۏS paǫ#aaGPBY`ϼ>'y#^,w 7`@ojX+^~=q̈́SX#3SygƁzϓu5Qq+_P&?;MW\ab2ډƳ!L+G-1qztoqNQH/0ݞ0edlp#/w-'LmZ[?w+i?x.H5@ƥX(P (QI<}*j]a>j!0ylt߂_^?'3g5\cYV߾}5d./+D6mA>jTv[Y?8rŪ2ef#B 2R#&%ZPj2d bѢE&oVh.`j~[H}Ϧ M,ۨ~Vbˋ;,}8AˡnpbŊՕH vQqF(Qx2jѢ DB51LE/hx#߸'\C[g}/$u3E"0S(uøgW0Gי#LFsبQ#3/0u#OPoA1Z3i-]vMmD/1+vE_f Z噊oUUֶn+E^&X#׭w `]5IW]L1. ֮&ϏHRsa4>x6]Y8o5\r^y4LvbAi745&MJ}\1()@obaX5eh"GK.?m9o&b5+Q+l\ UJQ%vX*h-k.՗%+A~-lF.:M9gFkͽkZvStL,lLs%څ7tN)h裏c ."{Y x+R*^(@Z|77>\1 2;ŴME@oi_h׽ K?G`͆Тe[<>4Vqeybݾ(w'!Y9(!y&F?q>_|?kKSeCD l۱yEfCtQFɹ瞛r_3<Ӝ'-6KP488;ά؏=vXG+@0ؖ?%T@xm8pKJ_n%̓77Uam'EreUYndeMAE$s]K{O[4yTh"Ln]XtkE@ڹMQ-Xo*"(@T-s^N㒨ئ[܅/[_4OsSQ(U9gԩңG塇}G} >\=PyGbsRIPE@lEn9_| 7/vԎRT,y&Mo$#6U{*p*[]`=4.”_"E]qqD:>9kr("ĀNa}g˖ך\={hBWW}iAzw^$B*ʓJ'e:[.^ .4c ąkAvɩz(G0_70BkT*s1WVKkU.9+ihIoлF(_;.EΪ#CGvMT3Un|`z|@"|;#P v^@zjJ.TN vyR1a/2}K)>C5qiV*$76!'vmV"{mf7-g[$56Og #^DSrmdҤIh:=7}ق{D8}$kk#o-gu(0{9R֞#{WFΛ.mVjHN)͛ˏ? Zz|w>o-?.-9[8# M*2;Y)kY' Nڵ[~ i3ٴhKZ,v`"G7g,~=ʰ:ȏK8mw' %}3v7?L+ e!T~ {-j| 8=GP2#pAo9Q9믿*cD N (2X$Qp)ׯO{^*=86_/uMa}H^?x)[UK$gXor~s}V:ph '~{ӥQ4*?`y&MJvҡC㺉O?t4Q?\r%(uRfQ<"T6~/BǙl -YԪUQV8{*C?5wn,F~qG-ZUy|u9fYyue3qn?vV7M~[~46Ш5!KTO+ʀs;Nyn]KFAHC~;iРAW_Ɇ M(.O>dyS^ FlٳnݺeOW&h7`b b vNo9?XG_Qw]}og,1xy!cMQƙ;iw.e1/Gvڂk&WR˦kS&9B$4wQ]sx7GxIznP:mJ茳*j򃳽>z Fde9z^fѷ 3 S)PϤ , 1( ¯\;G]Zovž\~g9eĈ~,fDk ќӧToyv΋u]r=DãJLyӹO?GPܽ/HXQ< !>1J,睎wCfLx6ڊ+.vˬ믿6iσUo{,PT:6m*ݍ. lD; =' vn]:܂M4Rx8dn,[noFLɋu֕lO>1ұ %?0pO8v^Z^l~ ˳״;r'q/(2Q|֕Go_OsN cG?,LnaO()e!B6KYurˇZ۟m-+~*{U5\wђn RMAhA>fpqjJ-,=2zٞ}YׯҀ_,ԃM!VE@HD|ԝtm|d?~=ɬʄueizJԭI4X/[;g֫aݍ銩pTpԿA ,C݃ Ll1Ҙ1cJeA@9 fм'TIP |&^tEdxܸq /$7ep<ԍ8ѩOҶҸ.T-k?Ea%2ll&wyC 1B( zk^+@`z'Q*&S*g$r 6%$d Ŋ<.yc+V}4{n]v>J"(@tIfySaRFc1tb\ۓ8\@@(rz=k^.T 'hn3H| Nm"w}7lM( B@}Ûin1ԥsB~ʔ)FY+"T*PT&~7T=XvAy睜(I>} Չ)'oBCm6qlJ5kL4w߽|1k3 !F9['@ʅC߿DhB{-}Yq ѣG*d'Rnjr IC7pq@05qDGk̇ǩ x~ ??ķ~Lh( ď{;9uQqRRE`ҥ8M"@N:͜9Cc ?c&D0 q÷R#ЬY3YjU3R8P=иIvӲDO)P|PoE7D+O@6m>_3~OV⋱f)uՃC>J0?_{&믿*y„ Eݒ%K?4;sw.>#yS?xA0ʆ <իM1&/UVԪUKxC )Îmz~c-~3ӕ-[UNUZ%CTN4KN JӰaJ ;,'iݻZ$U<ĂhРA'M~z#P=ݽ#F{Gg{FX$:-H?ٳN϶n+l_yҧO~64gΜ<»-~[a("wSV\ UV q!HVpn\DZضP%>(GвjDہ1%:w)L=ٹsg;Cz{K.D#'tRNiE@%,!Hln_,!c O6^C\ GȸxjѢ ,- <[46lTZD֦-*er83Ln"D%@"W jʜ|dn>xl6f¤N:UF-dfRB_~;w{%E@P*25ԩS|E>JA$ ~`/JP$܄4[ow}m {zO9'nF+'{royA~ر~S&{ҍ7V؝n5e6~+@0vuWoeѢE&4lq0 *ĊF8oOSD"9k,̀zL6ư=a{1[ä9Ӎ߹Cw݄8seunH7n3fd,BG(N%K/Wn($fޓ7`ռRa 7ޞy/6 9묳WEElEl{oH~';^/֮4K!-")_%ND.۰̟?f j׮-įVzuۇ ja˘SԲ EOlG َ;hL0?dtD?l3cω܅ ݶӍ7x! WƢmk|XQ^>PGԺ[6~+؀진uږv{:%V/'D R ^l-|]uץ=#VI[Djeۡc(DTW^yŸ޻Rf6)/ ~G97Bh_^{)x=ny\4۵kg@x=CR\pSB%G%6S^)ƅ@(u!ATA[ĘWAIƤUiK9Ў[/eY"cvA; 5Nʣq=h; BE;j&zT'L4)^{R%4nI A}Ϧ 7;cP7B Щ;yawԶ≚$`,Kq !hrQN2lҤI w#+nƢ 5,VQI|E;Ӎ(bo^ʂ6̂:Hb, AWSGHW>=cl@Ӂرc KTɓ'/lOUܦDXHm~#F%\1Nfo,CWnoWTn@&3l%n(P$ B x 4zLgy9hI^*wG8;fňM$ 3ck7+;f~E@| $(&[R2~ejC[|NiG<~cѝFE@ M(gVEh`jGiPhTxo+LL1Fe\'Bl99y*waΖ/ oGPEpK[qC(+. ,8Bn_P\m:I7e@ֿMxfc^9͗w:w\j5ݍ;dd̙SB$/'q(=^br(MJv۷𶖗+݋o?_P}z|hBrCzB@r&rfüGYqFfZlgH7&mz7O\" ʀ'wcw0#G!G%@"~(:,{@du]wE ]a=Cgw_&Ei]w55N8A>_IG&*=\)W˂/(ͯE {V2v KW:sBNck<_h.P2smbɶ'XJ+C駟Z1 Ϲ;P[P/z7-|+WU FJ B ~Bm24"/(,҈pP:we!@+˓@Dȇ!8vWK]vbD-HLJXrO翶zwEgƋIE@H%ph~pZ?좿/Rw+^主K'|rE]zU3u-X1c伮wyԵpœ9!os^8LN=ԼUH8Q䊜b1ἧx_%NjƩB0),EC5d g 鹼OĽ-/‘{y՟˫{|䳮|;Gkg]`,uY~y~{1oǩr_ByRʧ"("(({1ἧx_%aÆIa)UUnu"E@PE@P*"_IPE@P#P_X[f8'd뭷.Qw}'_|]vgҦMZx ?;ԧUVqViZb|G¶^ݺuSoذA>3Sw-Zjشi|ٲeV_*ULsΕo6Kƍ6U7|#_4jH[K.>l7i$>΋ŋ:սm7ĉeΜ98?c[vyˈ=;w]q_ĻkԨ&uɄE.y<\R;c=VtT`Sqq}`^yS[h&m /LtMϹ/C:Tl/I .(Aƍ+r?n{_dz"|ufCÇ"tPx)Ud϶g0 >tmsz뭷oLp8g2☃fI˄w&SO<1+K~ҺukٳqS[oՌ5;'*p]?o\0%}w&0(x7u=f֏8|:^I&,rf13S~'ZD"YbcolCdr!ra!-H{7tAg_~e{_|1u0`Fnպ[mS!}@).&i;}h qrכ ?*|?#Pg[Λ☋e]fz4E}鞝wnv:[ko3c;8fa`WTb0(J5jed Q*BPD# y`D BP.K蚞n<3]w[U{Jcumt_p|}+'=\y {ޤ>j(c\JɆZ~qOTZmRQ-ITx4<W UUx%_n'U4IEΤԺnRyԩS:W향_O?M4UkugTU&]ISip;u㕂 /!y׾UɶJZ8 CC7b5F޽|5g]zռ![[dN =E6վ_W:?O;@?>CIa,f8~UAsS͖ZOm)).#Aslc_vd8oC?zTskt#mSɾORYdrt3gsVNy'|Iv ,+W_|j4FRմJ@E.]oU17tS1KzJ_Gաz,K~ҵZ]tU Oj/#U8UQ+Htlokk~UҪ'*SRTLRCׯ}~ @XVmP# Ý?:jvCIE1K.݈/=JTw{o$֕}jiPh8lP34ʣtnR:b7pQWVRq|Zt|:uc_i{s=%NyFaȑkSmJ1ɾORYdr]k%\)(zo MHhu]P9='Riuf"`c{qnT 9 N1]IA+_W:m}6̺i㏷t:T!ٌ֫C)S^Pt*^W:dˈW:7؊_WU"*j_RyIo=OM@񇩶)|mK}"2SW\'[o*E`d;Aܭl$(?Ak;tcڜd*NU@yT:Tb?_ 7Ijg2_aOP{/*-OǾMjowc=p=k_>Fԟ;M&ۦL:n}$6%Kd~ɖg  @ w:YF@)@M}֍ ht dS4@(@d@|sL%|{.4ۈ PW*)ճuI ξ`K@@ ue`,2@f^vk@۫ʽ toC:So^x!E+o߾MwHO<ٽI{PC!V^ӉO{РAGV@-[f<{^wg/vm7 zU B/ʘ8qz^{ 7&i~^So9vZv/MCB tn71LԛҼ[o0M0 7o;WVXa=z@1ON+r;8&c=[i4 zgLwsp) /t+h:Y 安S ׫:Q]jQ揄@! lذMΑ_?|csiut|ԫNsuԩn9zo6zη}l>U7s:;<>} 0:c^00`{OyPתon/ΧzʽZAFRA ĂȚT }ػݰ+Wak֬qϯw+ֳgϚX?~…nѣat P:ڷo_ ӧcqثEkx %K{wM&&>7^R,(~Ё@ g?W8b*5&y+jjbx=U,&Vվ#-@|\^T͏hʡsnG>c8W*x_~֮];{㏷Kڹ덶־/t P*Թ/f̙Wcz?&15o8U+>ӮQ"={N5^:]'.jwjƟ[Sz>]TpYgs߬m۶j5{@M+lpnK2 䣲?ݺu: ߪU+Wݧj.]Ѻu@?=k:wyfw+++XI6_W\P]TO?tW ߼ys˼ ?X@N|Oeomƍ;w 4VO_D;vh% 7,%)FܱjB;܍-ZpiIImT%=$ Y@Aj ڛyW^F? UO%]T}Qwcѳ>JttjGħJ?5>r WO%Am=tOju'@ h, jIKW \v.*Qno]suwȫZ@ \wuS7T-b}]t1c,vڕx?QFYMu:/_n?O]'!P{L!zBJU+iӦIM\7!Z>UmI MeA-IQ{UBϻ Ǝ .pm@f͚EJPS+#L6lnpƌZ0vCJqtu^G;\j|=V@ FN6o4+1e.vUUUG.|StqnY_=mgtR E@,Vlٲ݀vhTuS=O@ TE;cwzn&H[zw3:㞭۩St#@L@KҹQ ts55ײj/al M&nvj:P{5V,0g7N=l^wOMs38pOMf-gm,&>%Z\0YmzQ0*nH6w#FXAz赪UͧjuDC@%OVVP429RջM(l(@JMUǓ@B -ĽN@@, 4@(DB@ȢhY5  P3  E,j@@@ qg@@ Yg  @! ^'  @@Ϫ@@B -ĽN@@, fU# (@Z{<# Y(⺳m۶޽{XqQQ}>cYVVf}giӦgϞc}2WZZj:w091rB]^߮]# On)`CYoҤٽ{wޛiPU..~)..Ozy;yUUUWW/d=3ּys2Ay(1r)IDATB]ҬY3۲eKpDy?*y}v2Ta$  @@-@@R D*}}/ŋSfD_z%$@@ D&}glرͳCG}d#Gӧ)yM_y啶bŊ:c   @~-36lؐ1a㏷K/Ԇ ft7x'6g6mγS?n7|7   zG7r)v7MFUo߾nؑG*O{t˖-s(T:ǫCwg/iٺ5?3Z߼a#>L&x=8F8 I|_P=`РA׭[g-Z<=Fgƍtզ^jٲeBi>kG&ɓ'ۀ|!@EEtHCzr<$hjC}ڵK_ %:K'\kt<~Wzwútb6mC% K~QٔFݎ'|Qw8+;vΤ: Hr\YT黕B5W5ه(.=#̷n:t"m]&J*ԩS 1|ر߯]?oڛ[,oG3ǜ.Qܮhߊ( qU][x}z8*"Ȅ<koN6sL7j٦H[*[|~I'ق lʕ5k|ɵG?  @D"[*u… #z'inln:! DO RL>Syfkժ?~ɨwyvg*BLt  TL(>L6ڠ菄  mȶ6[  V4!  L  a@1  @(Pl̄  V4!  L  a@1  @(Pl̄  V4!  L  a@1  @(Pl̄  V4! ( 5WTVVf-Z\"+..֭[&}QZZ1hGc䋍=W}-wIMMM6!Rm`^UU&)LAwm۶`QTuL`ӦMˉ.QܮA5Eq_pw~EEn niUVVZuu۷V5M6eۿֱc >43"  <  @C1#  @0j̃  Z443"  <  @C1#  @0j̃  Z443"  <  @C1#  @0j̃  Z443"  <  @C1#  @035{@@@d]vٳ>Kٳ}]4iRBCڵkUVn}rt  lZUUewy__a^ǒ%Kܴ]v  Q^ .W_}զL?uܹ6nhׯٳgۀs΁Sovyy٤I+))_.f*c$BHvFMRUM`4kߟu cD&ȅM6DK.-Z$ -]^wq_^{ :OqG'O\0Ueee~ȮD$[nWnW6L HA-[|Ϸ z=X>}n ի=Á__mРA,m6[zߟ*Ru|^N)ǜΛM6g>n4HjEEnյtPҪm߾}TӦM]ޗ w1>c^xַe:J7o\@T_ S4 @@ ;-Zd_W:|r7l˖-vu׹__555sga2z@@D>U٣GnJя~.">| <>2dH`zz@@#6O>dVm̙p_~m߾hЁ DR %*wb:@@ {yf5# G>ZL  `ȷmp=S]o*D &0@@ e  & A@ȠhqY4  @h C@@2(@A\  (@h@@ fE# $ &0@@ e  *΢"+))Ȭ'o"lM8S6pdSݤr(AIqqqK,XR鋣iӦu04-iYN>-$&v~O^/8F{PQW-m>4k8x+T&555nZA{={dW>׾m۶=\3f|֢E| Ӄ  Pi @/^lv[܄T' @@HKoI RL# )P=3;uT  Pxi @Gi>`RU۷oOx)Rz@=#s" d_ -n>ݻ>o׷Cwuzg+{m…7.9IH@@@ZΝ;S]i>zAlȐ!t+Н3gM6ͭcԩ7@@h%Mv֭[O?.]$,p*|'\馂٢˖-}4o1ӑ~֭[9(Z+wu͏ bw nioKgM 0IAtҥvZ5:~7iuQt(UR򩧞;^R˖-mÆ ^8pISЁ @T8ĵwyg7!ZGK'+[V]pjժ@u~߿_}Wi P7m|QhR(nW^a  {e+QW-mJF]Ifeee֦M۲eK >G;VZ:qDۼysOeZrwy6nϞ=v(iӦvGښ5kS5ƍan :@@2"T%~Wq̙3Maړs=6w\E}ktI'G5)կYfׁC@@Zإ|;?:t`۷7USÎ;zg\IZ֯_o7t|`cǎuA_~ذaȻ[nz@@E -9|{ͻS]FrPzBeOɓ'v 4;zIg}޽>  ]Tkv5׸p/HT;_ mܽ&T=g2# HKإکT=Џ  PXi @9NS;vpjy 7nj۶ma[@@ii|MN=JԃuCJ'!  %ݡg՛^xaC  Pi @;A+UK5  ii:c nVW 7@@@ -% @/ׯM2zI>   @A VZm6|$@@$β|^uS0n:SJBy #  @L -U_~}6`cMwǞy@@jihĈ6oǵmzӁ  H3f̰iӦ駟>9kz![vjʍ۷/h@@hD6ݿ=c6~x޽]vev饗ڐ!Cu%K؝wi]v @@ zmZ\\l> >Ŷk.۾})0O;w7wZ*~뮩{'! dG %hѢS9pM89;#RK.ݻw;c宊^T8p?{=z?yd0`OGMrgAE$ە(xC0 ZWTTg۷G!@Pm˱cǚJ-ӟ&dcӧz~8xn̝;w-[x|f@DTL&x=E͛jHL[nP- Hf%%%m۶myoRUUzG:՗ިQ쨣'jikv!I'B&[ 6ad V",&A<ꋢ(nW^ uiӦqڬfrZ:gT[]]l0TF v-bG}tMS;un?s;Z=q~o;  .EܹsO?;w}gW>sLWyEݯ-[mOO  @"m9sj)t嗻@@+*]g}Ę@Ȏ@c   # 4HA|̌  P_1=  @@   # 4HA|̌  P_1=  @@   # 4HA|̌  P_1=  @@   # 4HAseee֢E֭[Ɔ6Vb#衾(FrgHqqa]RRb:Njjjng&0Iqd{n۶m[ F5T`ӦM ]D͏IpP_MGqgHEE+weeUWW۾} ,.riƶlbk;U@@ h5A@-@@@d0P̃ CFgcqKL҈kUq+%~@@ @sjw  @ >$  @N bc@@ }H@@ ͩ" /@  9%@SE@r_4!9@@rJ4v hCr @?^|E[xqJX饗Lӓ@@+t޼y6tP裏lȑ6}:%^?~i+VXQt D@Ⱦ@I7!L0nv;K/aÆiӦL|͙3ǦMfM4S?n7|?   lo>[jiyּysO{e4 >N8{Xr͟?vZ֭~:/ЬY/4ǗIpP_MJ+!Q%%%VVVf$e_ H]*=Z֭[g-Z"lƍtզ^jٲmذuo=6ydѣߟɎ^x!ec0 v_|S[?Lj'Ϩ='8>ڊŶ6TA^{:MS^^ /3<w^[fߟrQm1{Ԯ];۷?gjժm޼9*OЏM6?g UO$k.d`6ml qLt!t"mvawvEʡJ?;uȬuMӱc4K*!ݳgכ555._g^f2d0 P&A<#u{p]I$/w-׿u9sٳgvjR˗'t-XԯYf'G@@"$P]uU~̘1n…6vX*֭ <8Bl   @@Qx`]mЈu!JjשzETUjvJ[n"߾}{WzNC\5 w z  p]cݺvt߭=x*S;aRc}P/#_|jR'  @4"4\l  @Cr =`UeIՈ+Y}йs̖ DKG}- ^={Zׯ_pDZh({i˖-z9?a,HLgqwy$?2D..pWǿ=#i_6 x~a{w#C"9W^.]}@eO@@ G@sdG  @]M>+_W\An^ܽ{nk1cǏ1 hY-  PT'  @@jW@oz T/6-?q-[fgvogґ @@€|1c?v뭷ڄ -'Mzȑ#7LYLܹ?@`Mc>ƍg&M >KkQ܄_Ñ{1 \7\vev饗ڐ!CL&!/p]wq@<ݾ̙3M/(馛ܰ)Sr=lVU@1b@uց (..G}Zh2k.۾}{kG䒜C`֬YG oJf-߶ /Ν?#I*oOQEEwqtsr&{'9cGq4V?v5@ ^`OG{LU]*T_tEA \%y @0&tѣ_G9#+ طoqv7ZyyyCy*<{cǚ}K_rխy]B`ɒ%fEu]ݻ׊?wA7-о}{ӧ/׿ -7 իswkW]uUA<h*-nz5/vg3k/͛ފDB8ݣ:,S}'v)4C)oMu04OTOW}:@ ?|W=~L$! th7pٳTjh>k *Z " L@Mzt{f͒Mq7&\4 c@@2 ]@e  @0@@ @e  @0@@ @e @&x JLe# ͤ.F2 @T*@ڨܬ @@7!q  cK/3JJ~Ϛ5˦On˗/:ʾwU/M׼k׮1cƸ &؋/h]v믿޽r*@ P`B[?uo?яw3s֣G2dM;{;n /`Çw}׶onn#Ԏ{6n8W}i۶mWO.]Îv˖-ѣ];ϖ-[J7׬Yc 8unVRIf||]7ܝ{|}뚔a @@#K '=jg+W޽{[ee1.:uvС{4UK\YUUe^{M4ɾoq @dbwaDfk@ TG)guժU{6hTaKL! ʹ0G@P@@ f  =   ʹ0G@8A@ȴhY>  @@4A  @@3-@@z@@2-@ia   pЃ  iL |@@h@@L fZ# @  dZz<UIENDB`patchwork/man/plot_arithmetic.Rd0000644000176200001440000000554213674067532016530 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/arithmetic.R \name{plot_arithmetic} \alias{plot_arithmetic} \alias{-.ggplot} \alias{/.ggplot} \alias{|.ggplot} \alias{*.gg} \alias{&.gg} \title{Plot arithmetic} \usage{ \method{-}{ggplot}(e1, e2) \method{/}{ggplot}(e1, e2) \method{|}{ggplot}(e1, e2) \method{*}{gg}(e1, e2) \method{&}{gg}(e1, e2) } \arguments{ \item{e1}{A \code{ggplot} or \code{patchwork} object} \item{e2}{A \code{ggplot} or \code{patchwork} object in case of \code{/}, or a \code{gg} object such as a geom or theme specification in case of \code{*} and \code{&}} } \value{ A \code{patchwork} object } \description{ In addition to the \code{+} operator known in \code{ggplot2}, \code{patchwork} defines logic for some of the other operators that aids in building up your plot composition and reduce code-reuse. } \details{ \code{patchwork} augment the \code{+} operator from \code{ggplot2} and allows the user to add full \code{ggplot} objects together in order to compose them into the same view. The last added plot is always the active one where new geoms etc. are added to. Another operator that is much like it, but not quite, is \code{-}. It also adds plots together but instead of adding the right hand side to the patchwork defined in the left hand side, it puts the left hand side besides the right hand side in a patchwork. This might sound confusing, but in essence \code{-} ensures that the right and left side are put in the same nesting level (\code{+} puts the right side \emph{into} the left side). Using \code{-} might seem unintuitive if you think of the operator as "subtract", but look at it as a hyphen instead (the underlying reason is that \code{-} is the only operator in the same precedence group as \code{+}). Often you are interested in creating single column or single row layouts. \code{patchwork} provides \code{|} (besides) and \code{/} (over) operators to support stacking and packing of plots. See the exampels for their use. In order to reduce code repetition \code{patchwork} provides two operators for adding ggplot elements (geoms, themes, facets, etc.) to multiple/all plots in a patchwork. \code{*} will add the element to all plots in the current nesting level, while \code{&} will recurse into nested patches. } \examples{ library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) p4 <- ggplot(mtcars) + geom_bar(aes(carb)) # Standard addition vs division p1 + p2 + p3 + plot_layout(ncol = 1) p1 + p2 - p3 + plot_layout(ncol = 1) # Stacking and packing (p1 | p2 | p3) / p4 # Add elements to the same nesting level (p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) * theme_bw() # Recurse into nested plots as well (p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) & theme_bw() } patchwork/man/wrap_elements.Rd0000644000176200001440000000532513751213454016175 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrap_elements.R \name{wrap_elements} \alias{wrap_elements} \title{Wrap arbitrary graphics in a patchwork-compliant patch} \usage{ wrap_elements( panel = NULL, plot = NULL, full = NULL, clip = TRUE, ignore_tag = FALSE ) } \arguments{ \item{panel, plot, full}{A grob, ggplot, patchwork, formula, raster, or nativeRaster object to add to the respective area.} \item{clip}{Should the grobs be clipped if expanding outside its area} \item{ignore_tag}{Should tags be ignored for this patch. This is relevant when using automatic tagging of plots and the content of the patch does not qualify for a tag.} } \value{ A wrapped_patch object } \description{ In order to add non-ggplot2 element to a patchwork they can be converted to a compliant representation using the \code{wrap_elements()} function. This allows you to position either grobs, ggplot objects, patchwork objects, or even base graphics (if passed as a formula) in either the full area, the full plotting area (anything between and including the axis label), or the panel area (only the actual area where data is drawn). Further you can still add title, subtitle, tag, and caption using the same approach as with normal ggplots (using \link[ggplot2:labs]{ggtitle()} and \link[ggplot2:labs]{labs()}) as well as styling using \link[ggplot2:theme]{theme()}. For the latter, only the theme elements targeting plot margins and background as well as title, subtitle, etc styling will have an effect. If a patchwork or ggplot object is wrapped, it will be fixated in its state and will no longer respond to addition of styling, geoms, etc.. When grobs and formulas are added directly, they will implicitly be converted to \code{wrap_elements(full = x)}. } \examples{ library(ggplot2) library(grid) # Combine grobs with each other wrap_elements(panel = textGrob('Here are some text')) + wrap_elements( panel = rectGrob(gp = gpar(fill = 'steelblue')), full = rectGrob(gp = gpar(fill = 'goldenrod')) ) # wrapped elements can still get titles etc like ggplots wrap_elements(panel = textGrob('Here are some text')) + wrap_elements( panel = rectGrob(gp = gpar(fill = 'steelblue')), full = rectGrob(gp = gpar(fill = 'goldenrod')) ) + ggtitle('Title for the amazing rectangles') # You can also pass in ggplots or patchworks to e.g. have it fill out the # panel area p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p1 + wrap_elements(panel = p1 + ggtitle('Look at me shrink')) # You can even add base graphics if you pass it as a formula p1 + wrap_elements(full = ~ plot(mtcars$mpg, mtcars$disp)) # Adding a grob or formula directly is equivalent to placing it in `full` p1 + ~ plot(mtcars$mpg, mtcars$disp) } patchwork/man/patchGrob.Rd0000644000176200001440000000122313564736444015245 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/patch.R \name{patchGrob} \alias{patchGrob} \title{Get a grob describing the content of a patch object} \usage{ patchGrob(x, guides = "auto") } \arguments{ \item{x}{An \code{patch} object} } \value{ A \code{gtable} object } \description{ Methods for this generic should be defined for all \code{patch} subclasses and should return a compliant \code{gtable} object ready to be combined with regular plot objects. In general it is best to call \code{patch_table()} on the object and add grobs to this as \code{patch_table()} will return a compliant \code{gtable} } \keyword{internal} patchwork/man/inset_element.Rd0000644000176200001440000000453713751225054016166 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/inset_element.R \name{inset_element} \alias{inset_element} \title{Create an inset to be added on top of the previous plot} \usage{ inset_element( p, left, bottom, right, top, align_to = "panel", on_top = TRUE, clip = TRUE, ignore_tag = FALSE ) } \arguments{ \item{p}{A grob, ggplot, patchwork, formula, raster, or nativeRaster object to add as an inset} \item{left, bottom, right, top}{numerics or units giving the location of the outer bounds. If given as numerics they will be converted to \code{npc} units.} \item{align_to}{Specifies what \code{left}, \code{bottom}, etc should be relative to. Either \code{'panel'} (default), \code{'plot'}, or \code{'full'}.} \item{on_top}{Logical. Should the inset be placed on top of the other plot or below (but above the background)?} \item{clip}{Logical. Should clipping be performed on the inset?} \item{ignore_tag}{Logical. Should autotagging ignore the inset?} } \value{ A \code{inset_path} object } \description{ The standard approach of patchwork is to place plots next to each other based on the provided layout. However, it may sometimes be beneficial to place one or several plots or graphic elements freely on top or below another plot. The \code{inset_element()} function provides a way to create such insets and gives you full control over placement. } \examples{ library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) # Basic use p1 + inset_element(p2, 0.6, 0.6, 1, 1) # Align to the full area instead p1 + inset_element(p2, 0, 0.6, 0.4, 1, align_to = 'full') # Grobs and other objects can be added as insets as well p1 + inset_element(grid::circleGrob(), 0.4, 0.4, 0.6, 0.6) logo <- system.file('help', 'figures', 'logo.png', package = 'patchwork') logo <- png::readPNG(logo, native = TRUE) p1 + inset_element(logo, 0.8, 0.8, 1, 1, align_to = 'full') # Just as expected insets are still amenable to changes after the fact p1 + inset_element(p2, 0.6, 0.6, 1, 1) + theme_classic() # Tagging also continues to work as expected p1 + inset_element(p2, 0.6, 0.6, 1, 1) + plot_annotation(tag_levels = '1') # but can be turned off, like for wrapped plots p1 + inset_element(p2, 0.6, 0.6, 1, 1, ignore_tag = TRUE) + plot_annotation(tag_levels = '1') } patchwork/man/wrap_plots.Rd0000644000176200001440000000675413674067532015541 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrap_plots.R \name{wrap_plots} \alias{wrap_plots} \title{Wrap plots into a patchwork} \usage{ wrap_plots( ..., ncol = NULL, nrow = NULL, byrow = NULL, widths = NULL, heights = NULL, guides = NULL, tag_level = NULL, design = NULL ) } \arguments{ \item{...}{multiple \code{ggplot}s or a list containing \code{ggplot} objects} \item{ncol}{The dimensions of the grid to create - if both are \code{NULL} it will use the same logic as \link[ggplot2:facet_wrap]{facet_wrap()} to set the dimensions} \item{nrow}{The dimensions of the grid to create - if both are \code{NULL} it will use the same logic as \link[ggplot2:facet_wrap]{facet_wrap()} to set the dimensions} \item{byrow}{Analogous to \code{byrow} in \link[base:matrix]{matrix()}. If \code{FALSE} the plots will be filled in in column-major order} \item{widths}{The relative widths and heights of each column and row in the grid. Will get repeated to match the dimensions of the grid.} \item{heights}{The relative widths and heights of each column and row in the grid. Will get repeated to match the dimensions of the grid.} \item{guides}{A string specifying how guides should be treated in the layout. \code{'collect'} will collect guides below to the given nesting level, removing duplicates. \code{'keep'} will stop collection at this level and let guides be placed alongside their plot. \code{auto} will allow guides to be collected if a upper level tries, but place them alongside the plot if not. If you modify default guide "position" with \link[ggplot2:theme]{theme(legend.position=...)} while also collecting guides you must apply that change to the overall patchwork (see example).} \item{tag_level}{A string (\code{'keep'} or \code{'new'}) to indicate how auto-tagging should behave. See \code{\link[=plot_annotation]{plot_annotation()}}.} \item{design}{Specification of the location of areas in the layout. Can either be specified as a text string or by concatenating calls to \code{\link[=area]{area()}} together. See the examples for further information on use.} } \value{ A \code{patchwork} object } \description{ While the use of \code{+} is a natural way to add plots together, it can be difficult to string together multiple plots programmatically if the number of plots is not known beforehand. \code{wrap_plots} makes it easy to take a list of plots and add them into one composition, along with layout specifications. } \details{ If \code{design} is specified as a text string \emph{and} the plots are named (e.g. \code{wrap_plots(A = p1, ...)}) \emph{and} all plot names are single characters represented in the design layout string, the plots will be matched to their respective area by name. Otherwise the areas will be filled out sequentially in the same manner as using the \code{+} operator. See the examples for more. } \examples{ library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) p4 <- ggplot(mtcars) + geom_bar(aes(carb)) p5 <- ggplot(mtcars) + geom_violin(aes(cyl, mpg, group = cyl)) # Either add the plots as single arguments wrap_plots(p1, p2, p3, p4, p5) # Or add them as a list... plots <- list(p1, p2, p3, p4, p5) wrap_plots(plots) # Match plots to areas by name design <- "#BB AA#" wrap_plots(B = p1, A = p2, design = design) # Compare to not using named plot arguments wrap_plots(p1, p2, design = design) } patchwork/man/plot_annotation.Rd0000644000176200001440000000564513751231336016544 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot_annotation.R \name{plot_annotation} \alias{plot_annotation} \title{Annotate the final patchwork} \usage{ plot_annotation( title = NULL, subtitle = NULL, caption = NULL, tag_levels = NULL, tag_prefix = NULL, tag_suffix = NULL, tag_sep = NULL, theme = NULL ) } \arguments{ \item{title, subtitle, caption}{Text strings to use for the various plot annotations.} \item{tag_levels}{A character vector defining the enumeration format to use at each level. Possible values are \code{'a'} for lowercase letters, \code{'A'} for uppercase letters, \code{'1'} for numbers, \code{'i'} for lowercase Roman numerals, and \code{'I'} for uppercase Roman numerals. It can also be a list containing character vectors defining arbitrary tag sequences. If any element in the list is a scalar and one of \code{'a'}, \code{'A'}, \code{'1'}, \verb{'i}, or \code{'I'}, this level will be expanded to the expected sequence.} \item{tag_prefix, tag_suffix}{Strings that should appear before or after the tag.} \item{tag_sep}{A separator between different tag levels} \item{theme}{A ggplot theme specification to use for the plot. Only elements related to the titles as well as plot margin and background is used.} } \value{ A \code{plot_annotation} object } \description{ The result of this function can be added to a patchwork using \code{+} in the same way as \code{\link[=plot_layout]{plot_layout()}}, but unlike \code{\link[=plot_layout]{plot_layout()}} it will only have an effect on the top level plot. As the name suggests it controls different aspects of the annotation of the final plot, such as titles and tags. } \details{ Tagging of subplots is done automatically and following the order of the plots as they are added. When the plot contains nested layouts the \code{tag_level} argument in the nested \link{plot_layout} will define whether enumeration should continue as usual or add a new level. The format of the levels are defined with \code{tag_levels} argument in \code{plot_annotation} } \examples{ library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) # Add title, etc. to a patchwork p1 + p2 + plot_annotation('This is a title', caption = 'made with patchwork') # Change styling of patchwork elements p1 + p2 + plot_annotation( title = 'This is a title', caption = 'made with patchwork', theme = theme(plot.title = element_text(size = 16)) ) # Add tags to plots p1 / (p2 | p3) + plot_annotation(tag_levels = 'A') # Add multilevel tagging to nested layouts p1 / ((p2 | p3) + plot_layout(tag_level = 'new')) + plot_annotation(tag_levels = c('A', '1')) # Use a custom tag sequence (mixed with a standard one) p1 / ((p2 | p3) + plot_layout(tag_level = 'new')) + plot_annotation(tag_levels = list(c('&', '\%'), '1')) } patchwork/DESCRIPTION0000644000176200001440000000266713766623562014015 0ustar liggesusersPackage: patchwork Type: Package Title: The Composer of Plots Version: 1.1.1 Authors@R: person(given = "Thomas Lin", family = "Pedersen", role = c("cre", "aut"), email = "thomasp85@gmail.com", comment = c(ORCID = "0000-0002-5147-4711")) Maintainer: Thomas Lin Pedersen Description: The 'ggplot2' package provides a strong API for sequentially building up a plot, but does not concern itself with composition of multiple plots. 'patchwork' is a package that expands the API to allow for arbitrarily complex composition of plots by, among others, providing mathematical operators for combining multiple plots. Other packages that try to address this need (but with a different approach) are 'gridExtra' and 'cowplot'. License: MIT + file LICENSE Encoding: UTF-8 LazyData: true Imports: ggplot2 (>= 3.0.0), gtable, grid, stats, grDevices, utils, graphics RoxygenNote: 7.1.1 URL: https://patchwork.data-imaginist.com, https://github.com/thomasp85/patchwork BugReports: https://github.com/thomasp85/patchwork/issues Suggests: knitr, rmarkdown, gridGraphics, gridExtra, ragg, testthat (>= 2.1.0), vdiffr, covr, png VignetteBuilder: knitr NeedsCompilation: no Packaged: 2020-12-15 10:14:48 UTC; thomas Author: Thomas Lin Pedersen [cre, aut] () Repository: CRAN Date/Publication: 2020-12-17 09:40:02 UTC patchwork/build/0000755000176200001440000000000013766106227013365 5ustar liggesuserspatchwork/build/vignette.rds0000644000176200001440000000032013766106227015717 0ustar liggesusersb```b`a`f`b2 1#PH$$ge妠I򻧖d+$K!fr# t0X X%gwI-HK î?J0=(jؠjX2sRad9.nP&c0Gq?gQ~Poݣ9JI,IK+=patchwork/tests/0000755000176200001440000000000013567470067013435 5ustar liggesuserspatchwork/tests/testthat/0000755000176200001440000000000013766623562015276 5ustar liggesuserspatchwork/tests/testthat/test-arithmetic.R0000644000176200001440000000254513751227431020522 0ustar liggesuserstest_that("`+` works", { expect_doppelganger('Standard addition: p1 + p2 + p3', { p1 + p2 + p3 }) expect_doppelganger('Adding to patchwork: (p1 + p2) + p3', { (p1 + p2) + p3 }) expect_doppelganger('Add patchwork to plot: p1 + (p2 + p3)', { p1 + (p2 + p3) }) expect_doppelganger('Add grob: p1 + textGrob("test")', { p1 + grid::textGrob("test") }) expect_doppelganger('Add ggplot elements: p1 + p2 + theme_bw()', { p1 + p2 + theme_bw() }) expect_doppelganger('Add base graphics: p1 + ~plot(1:10, 1:10)', { p1 + ~plot(1:10, 1:10) }) }) test_that("`-` works", { expect_doppelganger('Nest left-hand side: (p1 + p2) - p3', { (p1 + p2) - p3 }) expect_doppelganger('Nest right-hand side: p1 - (p2 + p3)', { p1 - (p2 + p3) }) }) test_that("`|` and `/` works", { expect_doppelganger('Stack 3 plots: p1 / p2 / p3', { p1 / p2 / p3 }) expect_doppelganger('Pack 4 plots: p1 | p2 | p3 | p4', { p1 | p2 | p3 | p4 }) expect_doppelganger('Complex composition: ((p1 / p2) | p3) / p4', { ((p1 / p2) | p3) / p4 }) }) test_that("`&` and `*` works", { patchwork <- ((p1 / p2) | p3) / p4 expect_doppelganger('Adding to all subplots: patchwork & theme_bw()', { patchwork & theme_bw() }) expect_doppelganger('Adding to all on level: patchwork * theme_bw()', { patchwork * theme_bw() }) }) patchwork/tests/testthat/test-layout.R0000644000176200001440000000514313751062650017703 0ustar liggesuserstest_that("The grid can be controlled", { expect_doppelganger('Setting ncol: p1 + p2 + p3 + p4 + plot_layout(ncol = 3)', { p1 + p2 + p3 + p4 + plot_layout(ncol = 3) }) expect_doppelganger('Setting nrow: p1 + p2 + p3 + p4 + plot_layout(nrow = 3)', { p1 + p2 + p3 + p4 + plot_layout(nrow = 3) }) expect_doppelganger('Setting widths: p1 + p2 + p3 + p4 + plot_layout(widths = c(1, 2))', { p1 + p2 + p3 + p4 + plot_layout(widths = c(1, 2)) }) expect_doppelganger('Setting heights: p1 + p2 + p3 + p4 + plot_layout(heights = c(1, 2))', { p1 + p2 + p3 + p4 + plot_layout(heights = c(1, 2)) }) expect_doppelganger('Setting widths as units: p1 + p2 + p3 + p4 + plot_layout(widths = unit(3, "cm"))', { p1 + p2 + p3 + p4 + plot_layout(widths = grid::unit(3, "cm")) }) expect_doppelganger('Setting heights as units: p1 + p2 + p3 + p4 + plot_layout(heights = unit(3, "cm"))', { p1 + p2 + p3 + p4 + plot_layout(heights = grid::unit(3, "cm")) }) }) test_that("Fixed aspect plots behave", { p_f <- ggplot(mtcars) + geom_point(aes(hp, disp)) + coord_fixed() + ggtitle('Fixed Aspect') expect_doppelganger('FAR optimise space by default: p1 + p_f + p3 + p4', { p1 + p_f + p3 + p4 }) expect_doppelganger('FAR optimise space by default: p1 + p_f + p_f + p4', { p1 + p_f + p_f + p4 }) expect_doppelganger('FAR optimise space by default: p_f + p_f + p3 + p4', { p_f + p_f + p3 + p4 }) expect_doppelganger('FAR space optimisation can be turned off: p1 + p2 + p_f + p4 + plot_layout(widths = 1)', { p1 + p2 + p_f + p4 + plot_layout(widths = 1) }) expect_doppelganger('FAR dimensions can be set with units:...', { p1 + p2 + p_f + plot_layout(widths = unit(c(1, 3, -1), c('null', 'cm', 'null'))) }) p_l1 <- ggplot(mtcars, aes(cyl, qsec, color=as.factor(vs))) + geom_point() p_l2 <- p_l1 + labs(color="a very looooooong legend title") expect_doppelganger('FAR legend justification', { p_l1 + p_l2 + plot_layout(ncol=1) & theme(legend.justification = "left", aspect.ratio=1) }) }) test_that("Insets looks as they should", { expect_doppelganger('Basic inset works', { p1 + inset_element(p2, 0.6, 0.6, 1, 1) }) expect_doppelganger('Other alignments work', { p1 + inset_element(p2, 0, 0.6, 0.4, 1, align_to = 'full') }) expect_doppelganger('Patchworks can be inset', { p1 + inset_element(p2 / p3, 0, 0.6, 0.4, 1) }) expect_doppelganger('Grobs can be inset', { p1 + inset_element(grid::circleGrob(), 0, 0.6, 0.4, 1) }) expect_doppelganger('insets can be changed', { p1 + inset_element(p2, 0, 0.6, 0.4, 1) + theme_void() }) }) patchwork/tests/testthat/helper-vdiffr.R0000644000176200001440000000107113766061310020140 0ustar liggesusers# vdiffr ignores failures when # - VDIFFR_RUN_TESTS is "false" (on Travis CI with older versions and dev version of R) # - CI is not set (on CRAN) if (requireNamespace("vdiffr", quietly = TRUE)) { expect_doppelganger <- vdiffr::expect_doppelganger } else { # If vdiffr is not available and visual tests are not explicitly disabled, raise error. if (!identical(Sys.getenv("VDIFFR_RUN_TESTS"), "false")) { stop("vdiffr is not installed") } # Otherwise, assign a dummy function expect_doppelganger <- function(...) skip("vdiffr is not installed.") } patchwork/tests/testthat/helper-setup.R0000644000176200001440000000120513567503320020020 0ustar liggesusers# vdiffr ignores failures when # - VDIFFR_RUN_TESTS is "false" (on Travis CI with older versions and dev version of R) # - CI is not set (on CRAN) expect_doppelganger <- vdiffr::expect_doppelganger # Predefined plots library(ggplot2) theme_set(theme_test() + theme(panel.grid = element_blank())) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggtitle('Plot 1') p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) + ggtitle('Plot 2') p3 <- ggplot(mtcars) + geom_point(aes(hp, wt, colour = mpg)) + ggtitle('Plot 3') p4 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) + ggtitle('Plot 4') patchwork/tests/figs/0000755000176200001440000000000013766106230014352 5ustar liggesuserspatchwork/tests/figs/complex-composition-p1-p2-p3-p4.svg0000644000176200001440000013616713672703315022622 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Complex composition: ((p1 / p2) | p3) / p4 patchwork/tests/figs/patchworks-can-be-inset.svg0000644000176200001440000012302213751063431021522 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 Patchworks can be inset patchwork/tests/figs/setting-heights-p1-p2-p3-p4-plot-layout-heights-c-1-2.svg0000644000176200001440000013515513672703341026350 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Setting heights: p1 + p2 + p3 + p4 + plot_layout(heights = c(1, 2)) patchwork/tests/figs/far-optimise-space-by-default-p1-p-f-p3-p4.svg0000644000176200001440000013666213672703352024476 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 disp 100 200 300 hp Fixed Aspect 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 FAR optimise space by default: p1 + p_f + p3 + p4 patchwork/tests/figs/far-legend-justification.svg0000644000176200001440000006023113672702127021755 0ustar liggesusers 16 18 20 22 qsec 4 5 6 7 8 cyl as.factor(vs) 0 1 16 18 20 22 qsec 4 5 6 7 8 cyl a very looooooong legend title 0 1 FAR legend justification patchwork/tests/figs/add-patchwork-to-plot-p1-p2-p3.svg0000644000176200001440000010015313672703061022375 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 Add patchwork to plot: p1 + (p2 + p3) patchwork/tests/figs/setting-nrow-p1-p2-p3-p4-plot-layout-nrow-3.svg0000644000176200001440000013514013672703333024652 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Setting nrow: p1 + p2 + p3 + p4 + plot_layout(nrow = 3) patchwork/tests/figs/add-ggplot-elements-p1-p2-theme-bw.svg0000644000176200001440000005525613567474564023330 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 Add ggplot elements: p1 + p2 + theme_bw() patchwork/tests/figs/setting-widths-as-units-p1-p2-p3-p4-plot-layout-widths-unit-3-cm.svg0000644000176200001440000013602513672703344030624 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Setting widths as units: p1 + p2 + p3 + p4 + plot_layout(widths = unit(3, "cm")) patchwork/tests/figs/setting-heights-as-units-p1-p2-p3-p4-plot-layout-heights-unit-3-cm.svg0000644000176200001440000013576013672703347031116 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Setting heights as units: p1 + p2 + p3 + p4 + plot_layout(heights = unit(3, "cm")) patchwork/tests/figs/setting-widths-p1-p2-p3-p4-plot-layout-widths-c-1-2.svg0000644000176200001440000013515313672703336026070 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Setting widths: p1 + p2 + p3 + p4 + plot_layout(widths = c(1, 2)) patchwork/tests/figs/setting-ncol-p1-p2-p3-p4-plot-layout-ncol-3.svg0000644000176200001440000013510113672703330024560 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Setting ncol: p1 + p2 + p3 + p4 + plot_layout(ncol = 3) patchwork/tests/figs/nest-right-hand-side-p1-p2-p3.svg0000644000176200001440000010015213672703303022165 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 Nest right-hand side: p1 - (p2 + p3) patchwork/tests/figs/add-grob-p1-textgrob-test.svg0000644000176200001440000003203013567474540021712 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 test Add grob: p1 + textGrob("test") patchwork/tests/figs/add-base-graphics-p1-plot-1-10-1-10.svg0000644000176200001440000004721213672703273022567 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 2 4 6 8 10 2 4 6 8 10 1:10 1:10 Add base graphics: p1 + ~plot(1:10, 1:10) patchwork/tests/figs/far-optimise-space-by-default-p1-p-f-p-f-p4.svg0000644000176200001440000013013013567556777024642 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 disp 100 200 300 hp Fixed Aspect 100 200 300 400 disp 100 200 300 hp Fixed Aspect 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 FAR optimise space by default: p1 + p_f + p_f + p4 patchwork/tests/figs/deps.txt0000644000176200001440000000010513751063431016041 0ustar liggesusers- vdiffr-svg-engine: 1.0 - vdiffr: 0.3.2.2 - freetypeharfbuzz: 0.2.5 patchwork/tests/figs/pack-4-plots-p1-p2-p3-p4.svg0000644000176200001440000013507613672703311021022 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Pack 4 plots: p1 | p2 | p3 | p4 patchwork/tests/figs/basic-inset-works.svg0000644000176200001440000005773313751063431020455 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 Basic inset works patchwork/tests/figs/grobs-can-be-inset.svg0000644000176200001440000003305013751063431020452 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 Grobs can be inset patchwork/tests/figs/adding-to-all-subplots-patchwork-theme-bw.svg0000644000176200001440000020531713672703320025075 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Adding to all subplots: patchwork & theme_bw() patchwork/tests/figs/stack-3-plots-p1-p2-p3.svg0000644000176200001440000007741313672703306020673 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 Stack 3 plots: p1 / p2 / p3 patchwork/tests/figs/adding-to-all-on-level-patchwork-theme-bw.svg0000644000176200001440000016255613672703324024756 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 Adding to all on level: patchwork * theme_bw() patchwork/tests/figs/far-space-optimisation-can-be-turned-off-p1-p2-p-f-p4-plot-layout-widths-1.svg0000644000176200001440000012565613567557006032457 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 100 200 300 400 disp 100 200 300 hp Fixed Aspect 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 FAR space optimisation can be turned off: p1 + p2 + p_f + p4 + plot_layout(widths = 1) patchwork/tests/figs/other-alignments-work.svg0000644000176200001440000005751713751063431021351 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 Other alignments work patchwork/tests/figs/insets-can-be-changed.svg0000644000176200001440000004475413751063431021127 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 Plot 2 insets can be changed patchwork/tests/figs/adding-to-patchwork-p1-p2-p3.svg0000644000176200001440000007746613672703056022147 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 Adding to patchwork: (p1 + p2) + p3 patchwork/tests/figs/nest-left-hand-side-p1-p2-p3.svg0000644000176200001440000010012213672703276022010 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 Nest left-hand side: (p1 + p2) - p3 patchwork/tests/figs/far-dimensions-can-be-set-with-units.svg0000644000176200001440000007066613567560536024071 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 100 200 300 400 disp 100 200 300 hp Fixed Aspect FAR dimensions can be set with units:... patchwork/tests/figs/standard-addition-p1-p2-p3.svg0000644000176200001440000007746213672703052021662 0ustar liggesusers 100 200 300 400 10 15 20 25 30 35 mpg disp Plot 1 100 200 300 400 2.5 3.0 3.5 4.0 4.5 5.0 5.5 gear disp Plot 2 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 Standard addition: p1 + p2 + p3 patchwork/tests/figs/far-optimise-space-by-default-p-f-p-f-p3-p4.svg0000644000176200001440000013530113672703355024630 0ustar liggesusers 100 200 300 400 disp 100 200 300 hp Fixed Aspect 100 200 300 400 disp 100 200 300 hp Fixed Aspect 2 3 4 5 100 200 300 hp wt 15 20 25 30 mpg Plot 3 4 6 8 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 0.0 2.5 5.0 7.5 10.0 12.5 gear count Plot 4 FAR optimise space by default: p_f + p_f + p3 + p4 patchwork/tests/testthat.R0000644000176200001440000000007613567466225015424 0ustar liggesuserslibrary(testthat) library(patchwork) test_check("patchwork") patchwork/vignettes/0000755000176200001440000000000013766106230014270 5ustar liggesuserspatchwork/vignettes/patchwork.Rmd0000644000176200001440000000737213672340356016754 0ustar liggesusers--- title: "Getting Started" output: rmarkdown::html_vignette: fig_width: 6 fig_height: 4 vignette: > %\VignetteIndexEntry{Getting Started} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup} library(patchwork) ``` Patchwork is a package designed to make plot composition in R extremely simple and powerful. It is mainly intended for users of ggplot2 and goes to great lengths to make sure ggplots are properly aligned no matter the complexity of your composition. In this tutorial we'll work through the basics of using patchwork. In the end you'll have a fairly good understanding of the API, and will be ready to dive into some of the more advanced topics covered in the other vignettes. ## Example plots We'll start by creating some example plots to use throughout this tutorial: ```{r} library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggtitle('Plot 1') p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) + ggtitle('Plot 2') p3 <- ggplot(mtcars) + geom_point(aes(hp, wt, colour = mpg)) + ggtitle('Plot 3') p4 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) + ggtitle('Plot 4') ``` These plots are fairly meaningless and only serve to illustrate plot composition - don't read anything into the resulting plots. ## Basic use The absolute simplest use is the extension of the `+` operator used in ggplot2, to allow adding plots together: ```{r} p1 + p2 ``` when adding plots together, the last added plot will be the active one, and will receive any addition of new ggplot2 objects such as geoms, labels, etc: ```{r} p1 + p2 + labs(subtitle = 'This will appear in the last plot') ``` ## Controlling layout By default, patchwork will try to keep the grid square, and fill it out in row order ```{r} p1 + p2 + p3 + p4 ``` This can be controlled with the addition of a `plot_layout()` ```{r} p1 + p2 + p3 + p4 + plot_layout(nrow = 3, byrow = FALSE) ``` `plot_layout()` have all sorts of amazing features for controlling the layout of your composition. See the *Layout* vignette for a full rundown of all its options. ## Stacking and packing plots Often you want to place plots on top of each other, or beside each other, rather than fill out a grid. While this can be accomplished by adding a one-row or one-column layout, patchwork also provides two operators that does this directly and further provides visual cues to the layout. `|` will place the plots beside each other, while `/` will stack them: ```{r} p1 / p2 ``` as patchworks can be nested, these two operators are often enough to create rather complex layouts: ```{r} p1 | (p2 / p3) ``` ## Annotating the composition It is often necessary to add titles, captions, tags, etc. to a composition. This can be achieved by adding a `plot_annotation()` to the patchwork: ```{r} (p1 | (p2 / p3)) + plot_annotation(title = 'The surprising story about mtcars') ``` patchwork also provides auto-tagging capabilities, in order to identify subplots in text: ```{r} p1 + p2 + p3 + plot_annotation(tag_levels = 'I') ``` The tagging can be either arabic or roman numbers, or latin letters, and separate tags can be given for different nesting levels. See the *Annotation* vignette for more information. ## Want more? This is enough to get you started, but we have only scratched the surface of what patchwork is capable of. Look into the other guides to find out more about, e.g. how to [collect all legends in one place and remove duplicates](https://patchwork.data-imaginist.com/articles/guides/layout.html#controlling-guides) or [aligning plots across multiple pages](https://patchwork.data-imaginist.com/articles/guides/multipage.html). patchwork/R/0000755000176200001440000000000013750772740012471 5ustar liggesuserspatchwork/R/guides.R0000644000176200001440000001553613752174407014104 0ustar liggesusersunname_vp <- function(x) { if (inherits(x, 'vpTree')) { x$parent <- unname_vp(x$parent) x$children <- lapply(x$children, unname_vp) } else if (inherits(x, 'viewport')) { x$name <- '' if (!is.null(x$layout$widths)) { x$layout$widths <- absolute.size(x$layout$widths) } if (!is.null(x$layout$heights)) { x$layout$heights <- absolute.size(x$layout$heights) } } unit_elements <- vapply(x, is.unit, logical(1)) x[unit_elements] <- lapply(.subset(x, unit_elements), absolute.size) x } #' @importFrom grid is.grob is.unit absolute.size #' @importFrom gtable is.gtable unname_grob <- function(x) { if (is.gtable(x)) { x$name <- '' x$rownames <- NULL x$vp <- unname_vp(x$vp) names(x$grobs) <- NULL x$grobs <- lapply(x$grobs, unname_grob) } else if (is.grob(x)) { x$name <- '' x$vp <- unname_vp(x$vp) x$children <- lapply(x$children, unname_grob) x$childrenOrder <- rep_len('', length(x$childrenOrder)) } unit_elements <- vapply(x, is.unit, logical(1)) x[unit_elements] <- lapply(.subset(x, unit_elements), absolute.size) x } collapse_guides <- function(guides) { unnamed <- lapply(guides, unname_grob) for (i in rev(seq_along(unnamed)[-1])) { for (j in seq_len(i - 1)) { if (isTRUE(all.equal(unnamed[[i]], unnamed[[j]], check.names = FALSE, check.attributes = FALSE))) { guides[i] <- NULL break } } } guides } #' @importFrom gtable gtable_width gtable_height gtable gtable_add_grob #' @importFrom grid editGrob heightDetails widthDetails valid.just unit.c unit #' @importFrom ggplot2 margin element_grob element_blank guides_build <- function(guides, theme) { legend.spacing <- theme$legend.spacing %||% unit(0.5, "lines") legend.spacing.y <- theme$legend.spacing.y %||% legend.spacing legend.spacing.x <- theme$legend.spacing.x %||% legend.spacing legend.box.margin <- theme$legend.box.margin %||% margin() widths <- do.call(unit.c, lapply(guides, gtable_width)) heights <- do.call(unit.c, lapply(guides, gtable_height)) just <- valid.just(theme$legend.box.just) xjust <- just[1] yjust <- just[2] vert <- identical(theme$legend.box, "horizontal") guides <- lapply(guides, function(g) { editGrob(g, vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust), height = if (vert) heightDetails(g) else 1, width = if (!vert) widthDetails(g) else 1)) }) guide_ind <- seq(by = 2, length.out = length(guides)) sep_ind <- seq(2, by = 2, length.out = length(guides) - 1) if (vert) { heights <- max(heights) if (length(widths) != 1) { w <- unit(rep_len(0, length(widths) * 2 - 1), 'mm') w[guide_ind] <- widths w[sep_ind] <- legend.spacing.x widths <- w } } else { widths <- max(widths) if (length(heights) != 1) { h <- unit(rep_len(0, length(heights) * 2 - 1), 'mm') h[guide_ind] <- heights h[sep_ind] <- legend.spacing.y heights <- h } } widths <- unit.c(legend.box.margin[4], widths, legend.box.margin[2]) heights <- unit.c(legend.box.margin[1], heights, legend.box.margin[3]) guides <- gtable_add_grob( gtable(widths, heights, name = 'guide-box'), guides, t = 1 + if (!vert) guide_ind else 1, l = 1 + if (vert) guide_ind else 1, name = 'guides' ) gtable_add_grob( guides, element_grob(theme$legend.box.background %||% element_blank()), t = 1, l = 1, b = -1, r = -1, z = -Inf, clip = "off", name = "legend.box.background" ) } complete_guide_theme <- function(theme) { position <- theme$legend.position %||% "right" if (length(position) == 2) { warning("Manual legend position not possible for collected guides. Defaulting to 'right'", call. = FALSE) position <- "right" } theme$legend.position <- position if (position %in% c("top", "bottom")) { theme$legend.box <- theme$legend.box %||% "horizontal" theme$legend.direction <- theme$legend.direction %||% "horizontal" theme$legend.box.just <- theme$legend.box.just %||% c("center", "top") } else { theme$legend.box <- theme$legend.box %||% "vertical" theme$legend.direction <- theme$legend.direction %||% "vertical" theme$legend.box.just <- theme$legend.box.just %||% c("left", "top") } theme } #' @importFrom grid valid.just assemble_guides <- function(guides, theme) { theme <- complete_guide_theme(theme) guides <- guides_build(guides, theme) # Set the justification of the legend box # First value is xjust, second value is yjust just <- valid.just(theme$legend.justification) xjust <- just[1] yjust <- just[2] guides <- grid::editGrob(guides, vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust))) guides <- gtable_add_rows(guides, unit(yjust, 'null')) guides <- gtable_add_rows(guides, unit(1 - yjust, 'null'), 0) guides <- gtable_add_cols(guides, unit(xjust, 'null'), 0) guides <- gtable_add_cols(guides, unit(1 - xjust, 'null')) guides } #' @importFrom gtable gtable_width gtable_height #' @importFrom grid unit.c attach_guides <- function(table, guides, theme) { guide_areas <- grepl('panel-guide_area', table$layout$name) if (any(guide_areas)) { area_ind <- which(guide_areas) if (length(area_ind) != 1) { warning("Only using the first guide area", call. = FALSE) } table$grobs[[area_ind[1]]] <- guides return(table) } p_loc <- find_panel(table) position <- theme$legend.position %||% "right" if (length(position) == 2) { warning('Manual position of collected guides not supported', call. = FALSE) position <- "right" } spacing <- theme$legend.box.spacing %||% unit(0.2, 'cm') legend_width <- gtable_width(guides) legend_height <- gtable_height(guides) if (position == "left") { table <- gtable_add_grob(table, guides, clip = "off", t = p_loc$t, l = p_loc$l - 5, b = p_loc$b, name = "guide-box") table <- set_border_sizes(table, l = unit.c(table$widths[seq_len(p_loc$l - 6)], legend_width, spacing)) } else if (position == "right") { table <- gtable_add_grob(table, guides, clip = "off", t = p_loc$t, l = p_loc$r + 5, b = p_loc$b, name = "guide-box") table <- set_border_sizes(table, r = unit.c(spacing, legend_width, table$widths[seq(p_loc$r + 6, ncol(table))])) } else if (position == "bottom") { table <- gtable_add_grob(table, guides, clip = "off", t = p_loc$b + 5, l = p_loc$l, r = p_loc$r, name = "guide-box") table <- set_border_sizes(table, b = unit.c(spacing, legend_height, table$heights[seq(p_loc$b + 6, nrow(table))])) } else if (position == "top") { table <- gtable_add_grob(table, guides, clip = "off", t = p_loc$t - 5, l = p_loc$l, r = p_loc$r, name = "guide-box") table <- set_border_sizes(table, t = unit.c(table$heights[seq_len(p_loc$t - 6)], legend_height, spacing)) } table } patchwork/R/zzz.R0000644000176200001440000000166513567503311013451 0ustar liggesusersprint_plot.patchwork <- function(p, title = '') { if (is.null(p$patches$annotation$title)) { p <- p + plot_annotation(title = title) } print(p) } .onLoad <- function(...) { register_s3_method("vdiffr", "print_plot", "patchwork") invisible() } register_s3_method <- function(pkg, generic, class, fun = NULL) { stopifnot(is.character(pkg), length(pkg) == 1) stopifnot(is.character(generic), length(generic) == 1) stopifnot(is.character(class), length(class) == 1) if (is.null(fun)) { fun <- get(paste0(generic, ".", class), envir = parent.frame()) } else { stopifnot(is.function(fun)) } if (pkg %in% loadedNamespaces()) { registerS3method(generic, class, fun, envir = asNamespace(pkg)) } # Always register hook in case package is later unloaded & reloaded setHook( packageEvent(pkg, "onLoad"), function(...) { registerS3method(generic, class, fun, envir = asNamespace(pkg)) } ) } patchwork/R/guide_area.R0000644000176200001440000000264713751212415014677 0ustar liggesusers#' Add an area to hold collected guides #' #' Using the `guides` argument in [plot_layout()] you can collect and collapse #' guides from plots. By default these guides will be put on the side like with #' regular plots, but by adding a `guide_area()` to the plot you can tell #' patchwork to place the guides in that area instead. If guides are not #' collected or no guides exists to collect it behaves as a standard #' [plot_spacer()] instead. #' #' @export #' #' @examples #' library(ggplot2) #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp, colour = factor(gear))) #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) #' #' # Guides are by default kept beeside their plot #' p1 + p2 + p3 #' #' # They can be collected and placed on the side (according to the patchwork #' # theme) #' p1 + p2 + p3 + plot_layout(guides = 'collect', ncol = 2) #' #' # Using guide_area() you can also designate an empty area for this #' p1 + p2 + p3 + guide_area() + plot_layout(guides = 'collect') #' guide_area <- function() { table <- make_patch() class(table) <- c('guide_area', class(table)) table } #' @importFrom gtable gtable_add_grob #' @export patchGrob.guide_area <- function(x, guides = 'auto') { table <- NextMethod() gtable_add_grob(table, zeroGrob(), PANEL_ROW, PANEL_COL, name = 'panel-guide_area') } #' @export has_tag.guide_area <- function(x) FALSE patchwork/R/add_plot.R0000644000176200001440000000445013766073634014410 0ustar liggesusers#' @importFrom ggplot2 ggplot_add #' @export ggplot_add.ggplot <- function(object, plot, object_name) { patches <- get_patches(plot) add_patches(object, patches) } #' @importFrom ggplot2 ggplot_add #' @export ggplot_add.grob <- function(object, plot, object_name) { plot + wrap_elements(full = object) } #' @importFrom ggplot2 ggplot_add #' @export ggplot_add.formula <- ggplot_add.grob #' @importFrom ggplot2 ggplot_add #' @export ggplot_add.raster <- ggplot_add.grob #' @importFrom ggplot2 ggplot_add #' @export ggplot_add.nativeRaster <- ggplot_add.grob #' @importFrom grid is.grob #' @importFrom grDevices is.raster should_autowrap <- function(x) { is.grob(x) || inherits(x, 'formula') || is.raster(x) || inherits(x, 'nativeRaster') } # Convert a plot with a (possible) list of patches into a selfcontained # patchwork to be attached to another plot get_patches <- function(plot) { empty <- is_empty(plot) if (is_patchwork(plot)) { patches <- plot$patches plot$patches <- NULL class(plot) <- setdiff(class(plot), 'patchwork') } else { patches <- new_patchwork() } if (!empty) { patches$plots <- c(patches$plots, list(plot)) } patches } is_patchwork <- function(x) inherits(x, 'patchwork') as_patchwork <- function(x) { UseMethod('as_patchwork') } #' @export as_patchwork.default <- function(x) { stop('Don\'t know how to convert an object of class <', paste(class(x), collapse = ', '),'> to a patchwork', call. = FALSE) } #' @export as_patchwork.ggplot <- function(x) { class(x) <- c('patchwork', class(x)) x$patches <- new_patchwork() x } #' @export as_patchwork.patchwork <- function(x) x add_patches <- function(plot, patches) { UseMethod('add_patches') } #' @export add_patches.ggplot <- function(plot, patches) { plot <- as_patchwork(plot) plot$patches <- patches plot } #' @export add_patches.patchwork <- function(plot, patches) { patches$plots <- c(patches$plots, list(plot)) add_patches(plot_filler(), patches) } new_patchwork <- function() { list( plots = list(), layout = plot_layout(), annotation = plot_annotation() ) } #' @importFrom ggplot2 ggplot plot_filler <- function() { p <- ggplot() class(p) <- c('plot_filler', class(p)) p } is_empty <- function(x) inherits(x, 'plot_filler') #' @export has_tag.plot_filler <- function(x) FALSE patchwork/R/plot_spacer.R0000644000176200001440000000172513751052235015123 0ustar liggesusers#' Add a completely blank area #' #' This simple wrapper creates an empty transparant patch that can be added to #' push your other plots apart. The patch responds to adding #' [theme()][ggplot2::theme] specifications, but only `plot.background` will #' have an effect. #' #' @return A `ggplot` object containing an empty plot #' #' @export #' #' @examples #' library(ggplot2) #' #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' #' p1 + plot_spacer() + p2 #' #' #' # To have more control over spacing, you can use the `plot.margin` #' # parameter for `theme()` on each individual plot. #' #' (p1 + theme(plot.margin = unit(c(0,30,0,0), "pt"))) + #' (p2 + theme(plot.margin = unit(c(0,0,0,30), "pt"))) #' plot_spacer <- function() { table <- make_patch() class(table) <- c('spacer', class(table)) table } is_spacer <- function(x) inherits(x, 'spacer') #' @export has_tag.spacer <- function(x) FALSE patchwork/R/wrap_elements.R0000644000176200001440000001736513751211703015461 0ustar liggesusers#' Wrap arbitrary graphics in a patchwork-compliant patch #' #' In order to add non-ggplot2 element to a patchwork they can be #' converted to a compliant representation using the `wrap_elements()` function. #' This allows you to position either grobs, ggplot objects, patchwork #' objects, or even base graphics (if passed as a formula) in either the full #' area, the full plotting area (anything between and #' including the axis label), or the panel area (only the actual area where data #' is drawn). Further you can still add title, subtitle, tag, and caption using #' the same approach as with normal ggplots (using #' [ggtitle()][ggplot2::ggtitle] and [labs()][ggplot2::labs]) as well as styling #' using [theme()][ggplot2::theme]. For the latter, only the theme elements #' targeting plot margins and background as well as title, subtitle, etc styling #' will have an effect. If a patchwork or ggplot object is wrapped, it will be #' fixated in its state and will no longer respond to addition of styling, #' geoms, etc.. When grobs and formulas are added directly, they will implicitly #' be converted to `wrap_elements(full = x)`. #' #' @param panel,plot,full A grob, ggplot, patchwork, formula, raster, or #' nativeRaster object to add to the respective area. #' #' @param clip Should the grobs be clipped if expanding outside its area #' #' @param ignore_tag Should tags be ignored for this patch. This is relevant #' when using automatic tagging of plots and the content of the patch does not #' qualify for a tag. #' #' @return A wrapped_patch object #' #' @export #' #' @examples #' library(ggplot2) #' library(grid) #' #' # Combine grobs with each other #' wrap_elements(panel = textGrob('Here are some text')) + #' wrap_elements( #' panel = rectGrob(gp = gpar(fill = 'steelblue')), #' full = rectGrob(gp = gpar(fill = 'goldenrod')) #' ) #' #' # wrapped elements can still get titles etc like ggplots #' wrap_elements(panel = textGrob('Here are some text')) + #' wrap_elements( #' panel = rectGrob(gp = gpar(fill = 'steelblue')), #' full = rectGrob(gp = gpar(fill = 'goldenrod')) #' ) + #' ggtitle('Title for the amazing rectangles') #' #' # You can also pass in ggplots or patchworks to e.g. have it fill out the #' # panel area #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) #' p1 + wrap_elements(panel = p1 + ggtitle('Look at me shrink')) #' #' # You can even add base graphics if you pass it as a formula #' p1 + wrap_elements(full = ~ plot(mtcars$mpg, mtcars$disp)) #' #' # Adding a grob or formula directly is equivalent to placing it in `full` #' p1 + ~ plot(mtcars$mpg, mtcars$disp) #' wrap_elements <- function(panel = NULL, plot = NULL, full = NULL, clip = TRUE, ignore_tag = FALSE) { clip <- if (clip) 'on' else 'off' table <- make_patch() attr(table, 'grobs') <- list(panel = panel, plot = plot, full = full) attr(table, 'settings') <- list(clip = clip, ignore_tag = ignore_tag) class(table) <- c('wrapped_patch', class(table)) table } is_wrapped_patch <- function(x) inherits(x, 'wrapped_patch') #' @importFrom ggplot2 ggplotGrob theme_get #' @importFrom gtable gtable_add_grob #' @importFrom grid grobHeight convertHeight #' @export patchGrob.wrapped_patch <- function(x, guides = 'auto') { gt <- ggplotGrob(x) table <- patch_table(x, gt) settings <- attr(x, 'settings') grobs <- attr(x, 'grobs') if (!is.null(grobs$full)) { table <- gtable_add_grob(table, list(as_patch(grobs$full)), 1, 1, nrow(table), ncol(table), clip = settings$clip, name = 'full') } if (!is.null(grobs$plot)) { table <- gtable_add_grob(table, list(as_patch(grobs$plot)), PLOT_TOP, PLOT_LEFT, PLOT_BOTTOM, PLOT_RIGHT, clip = settings$clip, name = 'plot') } if (!is.null(grobs$panel)) { table <- gtable_add_grob(table, list(as_patch(grobs$panel)), PANEL_ROW, PANEL_COL, clip = settings$clip, name = 'panel') } title <- get_grob(gt, 'title') table <- gtable_add_grob(table, list(title), TITLE_ROW, PANEL_COL, clip = settings$clip, name = 'title') table$heights[TITLE_ROW] <- convertHeight(grobHeight(title), 'mm') subtitle <- get_grob(gt, 'subtitle') table <- gtable_add_grob(table, list(subtitle), SUBTITLE_ROW, PANEL_COL, clip = settings$clip, name = 'subtitle') table$heights[SUBTITLE_ROW] <- convertHeight(grobHeight(subtitle), 'mm') caption <- get_grob(gt, 'caption') table <- gtable_add_grob(table, list(caption), CAPTION_ROW, PANEL_COL, clip = settings$clip, name = 'caption') table$heights[CAPTION_ROW] <- convertHeight(grobHeight(caption), 'mm') if (!settings$ignore_tag) { table$widths[c(2, ncol(table)-1)] <- gt$widths[c(2, ncol(gt)-1)] table$heights[c(2, nrow(table)-1)] <- gt$heights[c(2, nrow(gt)-1)] tag <- get_grob(gt, 'tag') tag_pos <- x$theme$plot.tag.position if (is.null(tag_pos)) tag_pos <- theme_get()$plot.tag.position if (!is.character(tag_pos)) tag_pos <- 'manual' table <- switch( tag_pos, topleft = gtable_add_grob(table, tag, name = "tag", t = 2, l = 2, clip = "off"), top = gtable_add_grob(table, tag, name = "tag", t = 2, l = 2, r = ncol(table)-1, clip = "off"), topright = gtable_add_grob(table, tag, name = "tag", t = 2, l = ncol(table)-1, clip = "off"), left = gtable_add_grob(table, tag, name = "tag", t = 2, b = nrow(table)-1, l = 2, clip = "off"), right = gtable_add_grob(table, tag, name = "tag", t = 2, b = nrow(table)-1, l = ncol(table)-1, clip = "off"), bottomleft = gtable_add_grob(table, tag, name = "tag", t = nrow(table)-1, l = 2, clip = "off"), bottom = gtable_add_grob(table, tag, name = "tag", t = nrow(table)-1, l = 2, r = ncol(table)-1, clip = "off"), bottomright = gtable_add_grob(table, tag, name = "tag", t = nrow(table)-1, l = ncol(table)-1, clip = "off"), manual = gtable_add_grob(table, tag, name = 'tag', t = 2, l = 2, b = nrow(table)-1, r = ncol(table)-1, clip = "off") ) } table } as_patch <- function(x, ...) { UseMethod('as_patch') } #' @export as_patch.grob <- function(x, ...) { x } #' @importFrom grid gTree #' @export as_patch.gList <- function(x, ...) { gTree(children = x) } #' @importFrom ggplot2 ggplotGrob #' @export as_patch.ggplot <- function(x, ...) { ggplotGrob(x) } #' @export as_patch.patchwork <- function(x, ...) { patchworkGrob(x) } #' @export as_patch.formula <- function(x, ...) { if (!requireNamespace('gridGraphics', quietly = TRUE)) { stop('The gridGraphics package is required for this functionality', call. = FALSE) } gp <- graphics::par(no.readonly = TRUE) plot_call <- function() { old_gp <- graphics::par(no.readonly = TRUE) graphics::par(gp) on.exit(try(graphics::par(old_gp))) res <- suppressMessages(eval(x[[2]], attr(x, '.Environment'))) invisible(NULL) } gridGraphics::echoGrob(plot_call, name = 'patchwork_base', device = offscreen_dev()) } #' @export #' @importFrom grid rasterGrob as_patch.raster <- function(x, ...) { as_patch(rasterGrob(x), ...) } #' @export as_patch.nativeRaster <- as_patch.raster #' @importFrom ggplot2 ggplotGrob get_grob <- function(x, name) { ind <- grep(paste0('^', name, '$'), x$layout$name) if (length(ind) == 0) return(ggplot2::zeroGrob()) x$grobs[[grep(paste0('^', name, '$'), x$layout$name)]] } offscreen_dev <- function() { if (requireNamespace('ragg', quietly = TRUE)) { function(width, height) { ragg::agg_capture(width = width, height = height, units = 'in') grDevices::dev.control("enable") } } else { function(width, height) { grDevices::pdf(NULL, width = width, height = height) grDevices::dev.control("enable") } } } #' @export has_tag.wrapped_patch <- function(x) !attr(x, 'settings')$ignore_tag patchwork/R/plot_annotation.R0000644000176200001440000001670313751231331016016 0ustar liggesusershas_tag <- function(x) { UseMethod('has_tag') } #' Annotate the final patchwork #' #' The result of this function can be added to a patchwork using `+` in the same #' way as [plot_layout()], but unlike [plot_layout()] it will only have an #' effect on the top level plot. As the name suggests it controls different #' aspects of the annotation of the final plot, such as titles and tags. #' #' @details #' Tagging of subplots is done automatically and following the order of the #' plots as they are added. When the plot contains nested layouts the #' `tag_level` argument in the nested [plot_layout] will define whether #' enumeration should continue as usual or add a new level. The format of the #' levels are defined with `tag_levels` argument in `plot_annotation` #' #' @param title,subtitle,caption Text strings to use for the various plot #' annotations. #' #' @param tag_levels A character vector defining the enumeration format to use #' at each level. Possible values are `'a'` for lowercase letters, `'A'` for #' uppercase letters, `'1'` for numbers, `'i'` for lowercase Roman numerals, and #' `'I'` for uppercase Roman numerals. It can also be a list containing #' character vectors defining arbitrary tag sequences. If any element in the #' list is a scalar and one of `'a'`, `'A'`, `'1'`, `'i`, or `'I'`, this level #' will be expanded to the expected sequence. #' #' @param tag_prefix,tag_suffix Strings that should appear before or after the #' tag. #' #' @param tag_sep A separator between different tag levels #' #' @param theme A ggplot theme specification to use for the plot. Only elements #' related to the titles as well as plot margin and background is used. #' #' @return A `plot_annotation` object #' #' @export #' #' @examples #' library(ggplot2) #' #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) #' #' # Add title, etc. to a patchwork #' p1 + p2 + plot_annotation('This is a title', caption = 'made with patchwork') #' #' # Change styling of patchwork elements #' p1 + p2 + #' plot_annotation( #' title = 'This is a title', #' caption = 'made with patchwork', #' theme = theme(plot.title = element_text(size = 16)) #' ) #' #' # Add tags to plots #' p1 / (p2 | p3) + #' plot_annotation(tag_levels = 'A') #' #' # Add multilevel tagging to nested layouts #' p1 / ((p2 | p3) + plot_layout(tag_level = 'new')) + #' plot_annotation(tag_levels = c('A', '1')) #' #' # Use a custom tag sequence (mixed with a standard one) #' p1 / ((p2 | p3) + plot_layout(tag_level = 'new')) + #' plot_annotation(tag_levels = list(c('&', '%'), '1')) #' plot_annotation <- function(title = NULL, subtitle = NULL, caption = NULL, tag_levels = NULL, tag_prefix = NULL, tag_suffix = NULL, tag_sep = NULL, theme = NULL) { th <- if (is.null(theme)) ggplot2::theme() else theme structure(list( title = title, subtitle = subtitle, caption = caption, tag_levels = tag_levels, tag_prefix = tag_prefix, tag_suffix = tag_suffix, tag_sep = tag_sep, theme = th ), class = 'plot_annotation') } default_annotation <- plot_annotation(tag_levels = character(), tag_prefix = '', tag_suffix = '', tag_sep = '') #' @importFrom utils modifyList #' @export ggplot_add.plot_annotation <- function(object, plot, object_name) { plot <- as_patchwork(plot) plot$patches$annotation$theme <- plot$patches$annotation$theme + object$theme object$theme <- NULL plot$patches$annotation <- modifyList(plot$patches$annotation, object[!vapply(object, is.null, logical(1))]) plot } #' @importFrom ggplot2 is.ggplot labs recurse_tags <- function(x, levels, prefix, suffix, sep, offset = 1) { if (length(levels) == 0) return(list(patches = x, tab_ind = offset)) level <- get_level(levels[1]) patches <- x$patches$plots tag_ind <- offset for (i in seq_along(patches)) { this_level <- if (length(level) < tag_ind) '' else level[tag_ind] if (is_patchwork(patches[[i]])) { if (is_inset_patch(patches[[i]]) && !has_tag(patches[[i]])) { next } tag_level <- patches[[i]]$patches$layout$tag_level tag_level <- if (is.null(tag_level)) default_layout$tag_level else tag_level if (tag_level == 'keep') { new_plots <- recurse_tags(patches[[i]], levels, prefix, suffix, sep, tag_ind) patches[[i]] <- new_plots$patches tag_ind <- new_plots$tag_ind } else if (length(levels) > 1) { patches[[i]] <- recurse_tags(patches[[i]], levels[-1], prefix = paste0(prefix, this_level, sep), suffix, sep)$patches tag_ind <- tag_ind + 1 } } else if (has_tag(patches[[i]])) { patches[[i]] <- patches[[i]] + labs(tag = paste0(prefix, this_level, suffix)) tag_ind <- tag_ind + 1 } } x$patches$plots <- patches if (has_tag(x)) { this_level <- if (length(level) < tag_ind) '' else level[tag_ind] x <- x + labs(tag = paste0(prefix, this_level, suffix)) tag_ind <- tag_ind + 1 } list( patches = x, tag_ind = tag_ind ) } #' @importFrom ggplot2 ggplot labs ggplotGrob #' @importFrom gtable gtable_add_rows gtable_add_cols #' @importFrom grid unit #' @importFrom utils tail annotate_table <- function(table, annotation) { p <- ggplot() + annotation$theme + do.call(labs, annotation[c('title', 'subtitle', 'caption')]) p <- ggplotGrob(p) max_z <- max(table$layout$z) fix_respect <- is.matrix(table$respect) if (!is.null(annotation$title) || !is.null(annotation$subtitle)) { table <- gtable_add_rows(table, p$heights[c(1, 3, 4)], 0) table <- gtable_add_grob(table, get_grob(p, 'title'), 2, 2, r = ncol(table) - 1, z = max_z + 3, name = 'title', clip = 'off') table <- gtable_add_grob(table, get_grob(p, 'subtitle'), 3, 2, r = ncol(table) - 1, z = max_z + 2, name = 'subtitle', clip = 'off') if (fix_respect) table$respect <- rbind(matrix(0, nrow = 3, ncol = ncol(table$respect)), table$respect) } else { table <- gtable_add_rows(table, p$heights[1], 0) if (fix_respect) table$respect <- rbind(0, table$respect) } if (!is.null(annotation$caption)) { table <- gtable_add_rows(table, tail(p$heights, 3)[-2]) table <- gtable_add_grob(table, get_grob(p, 'caption'), nrow(table) - 1, 2, r = ncol(table) - 1, z = max_z + 1, name = 'caption', clip = 'off') if (fix_respect) table$respect <- rbind(table$respect, matrix(0, nrow = 2, ncol = ncol(table$respect))) } else { table <- gtable_add_rows(table, tail(p$heights, 1)) if (fix_respect) table$respect <- rbind(table$respect, 0) } table <- gtable_add_cols(table, p$widths[1], 0) table <- gtable_add_cols(table, tail(p$widths, 1)) if (fix_respect) table$respect <- cbind(0, table$respect, 0) table <- gtable_add_grob(table, get_grob(p, 'background'), 1, 1, nrow(table), ncol(table), z = -Inf, name = 'background') table } #' @importFrom utils as.roman get_level <- function(x) { if (is.list(x)) { if (length(x[[1]]) == 1 && x[[1]] %in% c('a', 'A', '1', 'i', 'I')) { x <- x[[1]] } else { return(x[[1]]) } } switch( as.character(x), a = letters, A = LETTERS, "1" = 1:100, i = tolower(as.roman(1:100)), I = as.roman(1:100), stop('Unknown tag type: ', x, call. = FALSE) ) } patchwork/R/plot_patchwork.R0000644000176200001440000007500413766067245015666 0ustar liggesusers#' @importFrom grid grid.newpage grid.draw seekViewport pushViewport upViewport #' @importFrom utils modifyList #' @importFrom ggplot2 set_last_plot #' @export print.patchwork <- function(x, newpage = is.null(vp), vp = NULL, ...) { if (newpage) grid.newpage() grDevices::recordGraphics( requireNamespace("patchwork", quietly = TRUE), list(), getNamespace("patchwork") ) annotation <- modifyList( default_annotation, x$patches$annotation[!vapply(x$patches$annotation, is.null, logical(1))] ) x <- recurse_tags(x, annotation$tag_levels, annotation$tag_prefix, annotation$tag_suffix, annotation$tag_sep)$patches plot <- get_patches(x) gtable <- build_patchwork(plot, plot$layout$guides %||% 'auto') gtable <- annotate_table(gtable, annotation) set_last_plot(x) if (is.null(vp)) { grid.draw(gtable) } else { if (is.character(vp)) { seekViewport(vp) } else { pushViewport(vp) } grid.draw(gtable) upViewport() } invisible(x) } #' @export plot.patchwork <- print.patchwork #' @export `[[.patchwork` <- function(x, ..., exact = TRUE) { ind <- ..1 if (!is.numeric(ind)) { stop('Patchworks can only be indexed with numeric indices', call. = FALSE) } n_patches <- length(x$patches$plots) if (!is_empty(x) && ind[1] == n_patches + 1) { plot <- x plot$patches <- NULL class(plot) <- setdiff(class(plot), 'patchwork') } else { if (ind > n_patches) { stop('Index out of bounds', call. = FALSE) } plot <- x$patches$plots[[ind[1]]] } if (length(ind) > 1) { if (!is_patchwork(plot)) { stop('Can only do nested indexing into patchworks', call. = FALSE) } plot <- plot[[ind[-1]]] } plot } #' @export `[[<-.patchwork` <- function(x, ..., value) { ind <- ..1 if (!is.numeric(ind)) { stop('Patchworks can only be indexed with numeric indices', call. = FALSE) } if (!is.ggplot(value)) { value <- wrap_elements(value) } n_patches <- length(x$patches$plots) if (!is_empty(x) && ind == n_patches + 1) { if (length(ind) != 1) { stop('Can only do nested indexing into patchworks', call. = FALSE) } return(add_patches(value, x$patches)) } if (length(ind) > 1) { if (!is_patchwork(x$patches$plots[[ind[1]]])) { stop('Can only do nested indexing into patchworks', call. = FALSE) } x$patches$plots[[ind[1]]][[ind[-1]]] <- value } else { x$patches$plots[[ind]] <- value } x } #' @importFrom utils str #' @export str.patchwork <- function(object, ...) { n_patches <- length(object$patches$plots) if (!is_empty(object)) n_patches <- n_patches + 1 cat('A patchwork composed of ', n_patches, ' patches\n', sep = '') cat('- Autotagging is turned ', if (is.null(object$patches$annotation$tag_levels)) 'off' else 'on', '\n', sep = '') cat('- Guides are ', if (isTRUE(object$patches$layout$guides == 'collect')) 'collected' else 'kept', '\n', sep = '') cat('\n') cat('Layout:\n') if (is.null(object$layout$design)) { l <- object$layout if (is.null(l$ncol) && !is.null(l$widths) && length(l$widths) > 1) { l$ncol <- length(l$widths) } if (is.null(l$nrow) && !is.null(l$heights) && length(l$heights) > 1) { l$nrow <- length(l$heights) } dims <- wrap_dims(n_patches, nrow = l$nrow, ncol = l$ncol) print(create_design(dims[2], dims[1], isTRUE(l$byrow))) } else { print(object$layout$design) } } #' @importFrom ggplot2 ggplot_build ggplot_gtable panel_rows panel_cols wrap_dims #' @importFrom gtable gtable #' @importFrom grid unit unit.pmax is.unit #' @importFrom utils modifyList #' @importFrom stats na.omit build_patchwork <- function(x, guides = 'auto') { x$layout <- modifyList(default_layout, x$layout[!vapply(x$layout, is.null, logical(1))]) guides <- if (guides == 'collect' && x$layout$guides != 'keep') { 'collect' } else { x$layout$guides } gt <- lapply(x$plots, plot_table, guides = guides) guide_grobs <- unlist(lapply(gt, `[[`, 'collected_guides'), recursive = FALSE) gt <- lapply(gt, simplify_gt) gt <- add_insets(gt) fixed_asp <- vapply(gt, function(x) isTRUE(x$respect), logical(1)) if (is.null(x$layout$design)) { if (is.null(x$layout$ncol) && !is.null(x$layout$widths) && length(x$layout$widths) > 1) { x$layout$ncol <- length(x$layout$widths) } if (is.null(x$layout$nrow) && !is.null(x$layout$heights) && length(x$layout$heights) > 1) { x$layout$nrow <- length(x$layout$heights) } dims <- wrap_dims(length(gt), nrow = x$layout$nrow, ncol = x$layout$ncol) x$layout$design <- create_design(dims[2], dims[1], isTRUE(x$layout$byrow)) } else { dims <- c( max(x$layout$design$b), max(x$layout$design$r) ) } gt_new <- gtable(unit(rep(0, TABLE_COLS * dims[2]), 'null'), unit(rep(0, TABLE_ROWS * dims[1]), 'null')) design <- as.data.frame(unclass(x$layout$design)) if (nrow(design) < length(gt)) { warning('Too few patch areas to hold all plots. Dropping plots', call. = FALSE) gt <- gt[seq_len(nrow(design))] fixed_asp <- fixed_asp[seq_len(nrow(design))] } else { design <- design[seq_along(gt), ] } if (any(design$t < 1)) design$t[design$t < 1] <- 1 if (any(design$l < 1)) design$l[design$l < 1] <- 1 if (any(design$b > dims[1])) design$b[design$b > dims[1]] <- dims[1] if (any(design$r > dims[2])) design$r[design$r > dims[2]] <- dims[2] max_z <- lapply(gt, function(x) max(x$layout$z)) max_z <- c(0, cumsum(max_z)) gt_new$layout <- do.call(rbind, lapply(seq_along(gt), function(i) { loc <- design[i, ] lay <- gt[[i]]$layout lay$name <- paste0(lay$name, '-', i) lay$t <- lay$t + ifelse(lay$t <= PANEL_ROW, (loc$t - 1) * TABLE_ROWS, (loc$b - 1) * TABLE_ROWS) lay$l <- lay$l + ifelse(lay$l <= PANEL_COL, (loc$l - 1) * TABLE_COLS, (loc$r - 1) * TABLE_COLS) lay$b <- lay$b + ifelse(lay$b < PANEL_ROW, (loc$t - 1) * TABLE_ROWS, (loc$b - 1) * TABLE_ROWS) lay$r <- lay$r + ifelse(lay$r < PANEL_COL, (loc$l - 1) * TABLE_COLS, (loc$r - 1) * TABLE_COLS) lay$z <- lay$z + max_z[i] lay })) table_dimensions <- table_dims( lapply(gt, `[[`, 'widths'), lapply(gt, `[[`, 'heights'), design, dims[2], dims[1] ) gt_new$grobs <- set_grob_sizes(gt, table_dimensions$widths, table_dimensions$heights, design) gt_new$widths <- table_dimensions$widths gt_new$heights <- table_dimensions$heights widths <- rep(x$layout$widths, length.out = dims[2]) heights <- rep(x$layout$heights, length.out = dims[1]) gt_new <- set_panel_dimensions(gt_new, gt, widths, heights, fixed_asp, design) if (x$layout$guides == 'collect') { guide_grobs <- collapse_guides(guide_grobs) if (length(guide_grobs) != 0) { theme <- x$annotation$theme if (!attr(theme, 'complete')) { theme <- theme_get() + theme } guide_grobs <- assemble_guides(guide_grobs, theme) gt_new <- attach_guides(gt_new, guide_grobs, theme) } } else { gt_new$collected_guides <- guide_grobs } class(gt_new) <- c('gtable_patchwork', class(gt_new)) gt_new } #' Convert a patchwork to a gtable #' #' This function is the patchwork analogue of [ggplot2::ggplotGrob()] in that it #' takes an unevaluated patchwork object and fixate it into a gtable object to #' further manipulate directly. #' #' @param x A `patchwork` object #' #' @return A `gtable` object #' #' @keywords internal #' @importFrom utils modifyList #' @export #' patchworkGrob <- function(x) { annotation <- modifyList( default_annotation, x$patches$annotation[!vapply(x$patches$annotation, is.null, logical(1))] ) x <- recurse_tags(x, annotation$tag_levels, annotation$tag_prefix, annotation$tag_suffix, annotation$tag_sep)$patches plot <- get_patches(x) gtable <- build_patchwork(plot) gtable <- annotate_table(gtable, annotation) class(gtable) <- setdiff(class(gtable), 'gtable_patchwork') gtable } plot_table <- function(x, guides) { UseMethod('plot_table') } #' @importFrom ggplot2 ggplotGrob #' @export plot_table.ggplot <- function(x, guides) { gt <- ggplotGrob(x) gt <- add_strips(gt) add_guides(gt, guides == 'collect') } #' @export plot_table.patchwork <- function(x, guides) { build_patchwork(get_patches(x), guides) } #' @export plot_table.patch <- function(x, guides) { patchGrob(x, guides) } #' @export plot_table.inset_patch <- function(x, guides) { settings <- attr(x, 'settings') class(x) <- setdiff(class(x), 'inset_patch') table <- plot_table(x, guides) table$vp <- viewport(x = settings$left, y = settings$bottom, width = settings$right - settings$left, height = settings$top - settings$bottom, just = c(0, 0)) attr(table, 'settings') <- settings class(table) <- c('inset_table', class(table)) table } simplify_gt <- function(gt) { UseMethod('simplify_gt') } #' @importFrom gtable gtable_add_grob gtable_add_rows gtable_add_cols #' @importFrom ggplot2 find_panel #' @importFrom grid unit convertWidth convertHeight #' @export simplify_gt.gtable <- function(gt) { panel_pos <- find_panel(gt) rows <- c(panel_pos$t, panel_pos$b) cols <- c(panel_pos$l, panel_pos$r) if (!gt$respect && rows[1] == rows[2] && cols[1] == cols[2] && !any(grepl('^strip-', gt$layout$name))) { gt$widths <- convertWidth(gt$widths, 'mm') gt$heights <- convertHeight(gt$heights, 'mm') return(gt) } p_rows <- seq(rows[1], rows[2]) p_cols <- seq(cols[1], cols[2]) panels <- gt[p_rows, p_cols] gt_new <- gt[-p_rows, -p_cols] gt_new$widths <- convertWidth(gt$widths, 'mm')[-p_cols] gt_new$heights <- convertHeight(gt$heights, 'mm')[-p_rows] gt_new <- gtable_add_rows(gt_new, unit(1, 'null'), rows[1] - 1) gt_new <- gtable_add_cols(gt_new, unit(1, 'null'), cols[1] - 1) if (gt$respect) { simplify_fixed(gt, gt_new, panels, rows, cols) } else { simplify_free(gt, gt_new, panels, rows, cols) } } #' @importFrom grid unit.c unit #' @importFrom ggplot2 find_panel #' @importFrom gtable gtable gtable_add_grob #' @export simplify_gt.gtable_patchwork <- function(gt) { panel_pos <- find_panel(gt) widths <- unit.c(gt$widths[seq_len(panel_pos$l - 1)], unit(1, 'null'), gt$widths[seq(panel_pos$r + 1, ncol(gt))]) heights <- unit.c(gt$heights[seq_len(panel_pos$t - 1)], unit(1, 'null'), gt$heights[seq(panel_pos$b + 1, nrow(gt))]) gt_new <- gtable(widths = widths, heights = heights) gt_new <- gtable_add_grob(gt_new, zeroGrob(), PANEL_ROW, PANEL_COL, name = 'panel-nested-patchwork') gt_new <- gtable_add_grob(gt_new, gt, 1, 1, nrow(gt_new), ncol(gt_new), clip = 'off', name = 'patchwork-table') class(gt_new) <- c('gtable_patchwork_simple', class(gt_new)) gt_new } #' @export simplify_gt.patchgrob <- function(gt) gt #' @export simplify_gt.inset_table <- function(gt) gt #' @importFrom gtable gtable_add_grob is.gtable #' @importFrom grid viewport simplify_free <- function(gt, gt_new, panels, rows, cols) { p_cols <- seq(cols[1], cols[2]) if (length(p_cols) == 1) { top <- which(gt$layout$l == p_cols & gt$layout$r == p_cols & gt$layout$b < rows[1]) gt_new <- gtable_add_grob(gt_new, gt$grobs[top], gt$layout$t[top], p_cols, gt$layout$b[top], z = gt$layout$z[top], clip = gt$layout$clip[top], name = gt$layout$name[top]) bottom <- which(gt$layout$l == p_cols & gt$layout$r == p_cols & gt$layout$t > rows[2]) b_mod <- rows[2] - rows[1] gt_new <- gtable_add_grob(gt_new, gt$grobs[bottom], gt$layout$t[bottom] - b_mod, p_cols, gt$layout$b[bottom] - b_mod, z = gt$layout$z[bottom], clip = gt$layout$clip[bottom], name = gt$layout$name[bottom]) t_strips <- grepl('^strip-t-', gt_new$layout$name) if (any(t_strips)) { gt_new$grobs[t_strips] <- lapply(gt_new$grobs[t_strips], function(g) { if (is.gtable(g)) { g$vp <- viewport(y = 0, just = 'bottom', height = g$heights) } g }) } b_strips <- grepl('^strip-b-', gt_new$layout$name) if (any(b_strips)) { gt_new$grobs[b_strips] <- lapply(gt_new$grobs[b_strips], function(g) { if (is.gtable(g)) { g$vp <- viewport(y = 1, just = 'top', height = g$heights) } g }) } } else { for (i in seq_len(nrow(gt))) { if (i >= rows[1]) { if (i <= rows[2]) next ii <- i - diff(rows) pos <- 'bottom' } else { ii <- i pos <- 'top' } table <- gt[i, p_cols] if (length(table$grobs) != 0) { grobname <- paste(table$layout$name, collapse = ', ') if (pos == 'top') { table$vp <- viewport(y = 0, just = 'bottom', height = table$heights) } else { table$vp <- viewport(y = 1, just = 'top', height = table$heights) } gt_new <- gtable_add_grob(gt_new, table, ii, cols[1], clip = 'off', name = grobname, z = max(table$layout$z)) } } } p_rows <- seq(rows[1], rows[2]) if (length(p_rows) == 1) { left <- which(gt$layout$t == p_rows & gt$layout$b == p_rows & gt$layout$r < cols[1]) gt_new <- gtable_add_grob(gt_new, gt$grobs[left], p_rows, gt$layout$l[left], p_rows, gt$layout$r[left], z = gt$layout$z[left], clip = gt$layout$clip[left], name = gt$layout$name[left]) right <- which(gt$layout$t == p_rows & gt$layout$b == p_rows & gt$layout$l > cols[2]) r_mod <- cols[2] - cols[1] gt_new <- gtable_add_grob(gt_new, gt$grobs[right], p_rows, gt$layout$l[right] - r_mod, p_rows, gt$layout$r[right] - r_mod, z = gt$layout$z[right], clip = gt$layout$clip[right], name = gt$layout$name[right]) l_strips <- grepl('^strip-l-', gt_new$layout$name) if (any(l_strips)) { gt_new$grobs[l_strips] <- lapply(gt_new$grobs[l_strips], function(g) { if (is.gtable(g)) { g$vp <- viewport(x = 1, just = 'right', width = g$widths) } g }) } r_strips <- grepl('^strip-r-', gt_new$layout$name) if (any(r_strips)) { gt_new$grobs[r_strips] <- lapply(gt_new$grobs[r_strips], function(g) { if (is.gtable(g)) { g$vp <- viewport(x = 0, just = 'left', width = g$widths) } g }) } } else { for (i in seq_len(ncol(gt))) { if (i >= cols[1]) { if (i <= cols[2]) next ii <- i - diff(cols) pos <- 'right' } else { ii <- i pos <- 'left' } table <- gt[p_rows, i] if (length(table$grobs) != 0) { grobname <- paste(table$layout$name, collapse = ', ') if (pos == 'left') { table$vp <- viewport(x = 1, just = 'right', width = table$widths) } else { table$vp <- viewport(x = 0, just = 'left', width = table$widths) } gt_new <- gtable_add_grob(gt_new, table, rows[1], ii, clip = 'off', name = grobname, z = max(table$layout$z)) } } } panel_name <- paste0('panel; ', paste(panels$layout$name, collapse = ', ')) gtable_add_grob(gt_new, panels, rows[1], cols[1], clip = 'off', name = panel_name, z = 1) } #' @importFrom grid viewport unit convertWidth convertHeight #' @importFrom gtable gtable_add_grob simplify_fixed <- function(gt, gt_new, panels, rows, cols) { p_rows <- seq(rows[1], rows[2]) p_cols <- seq(cols[1], cols[2]) left <- gt$layout$l[grep('-l(-|$)', gt$layout$name)] right <- gt$layout$r[grep('-r(-|$)', gt$layout$name)] top <- gt$layout$t[grep('-t(-|$)', gt$layout$name)] bottom <- gt$layout$b[grep('-b(-|$)', gt$layout$name)] # Add strips, axes and labels to panel grob if (length(left) != 0 && min(left) < cols[1]) { left_grob <- gt[p_rows, seq(min(left), cols[1] - 1)] h_width <- unit(sum(convertWidth(left_grob$widths, 'mm', TRUE))/2, 'mm') left_grob$vp <- viewport(x = unit(0, 'npc') - h_width) panels <- gtable_add_grob(panels, grobs = list(left_grob), t = 1, l = 1, b = nrow(panels), r = ncol(panels), z = Inf, clip = 'off', name = 'left-l') } if (length(right) != 0 && max(right) > cols[2]) { right_grob <- gt[p_rows, seq(cols[2] + 1, max(right))] h_width <- unit(sum(convertWidth(right_grob$widths, 'mm', TRUE))/2, 'mm') right_grob$vp <- viewport(x = unit(1, 'npc') + h_width) panels <- gtable_add_grob(panels, grobs = list(right_grob), t = 1, l = 1, b = nrow(panels), r = ncol(panels), z = Inf, clip = 'off', name = 'right-r') } if (length(top) != 0 && min(top) < rows[1]) { top_grob <- gt[seq(min(top), rows[1] - 1), p_cols] h_height <- unit(sum(convertHeight(top_grob$heights, 'mm', TRUE))/2, 'mm') top_grob$vp <- viewport(y = unit(1, 'npc') + h_height) panels <- gtable_add_grob(panels, grobs = list(top_grob), t = 1, l = 1, b = nrow(panels), r = ncol(panels), z = Inf, clip = 'off', name = 'top-t') } if (length(bottom) != 0 && max(bottom) > rows[2]) { bottom_grob <- gt[seq(rows[2] + 1, max(bottom)), p_cols] h_height <- unit(sum(convertHeight(bottom_grob$heights, 'mm', TRUE))/2, 'mm') bottom_grob$vp <- viewport(y = unit(0, 'npc') - h_height) panels <- gtable_add_grob(panels, grobs = list(bottom_grob), t = 1, l = 1, b = nrow(panels), r = ncol(panels), z = Inf, clip = 'off', name = 'bottom-b') } # Add remaining grobs to gt_new left <- if (length(left) != 0) min(left) else cols[1] for (i in seq_len(left - 1)) { table <- gt[p_rows, i] if (length(table$grobs) != 0) { if (length(table$grobs) == 1) { grobname <- table$layout$name grob <- table$grobs[[1]] } else { grobname <- paste(table$layout$name, collapse = ', ') grob <- table } gt_new <- gtable_add_grob(gt_new, grob, rows[1], i, clip = 'off', name = grobname, z = max(table$layout$z)) } } right <- if (length(right) != 0) max(right) else cols[2] for (i in seq_len(ncol(gt) - right)) { table <- gt[p_rows, i + right] if (length(table$grobs) != 0) { if (length(table$grobs) == 1) { grobname <- table$layout$name grob <- table$grobs[[1]] } else { grobname <- paste(table$layout$name, collapse = ', ') grob <- table } gt_new <- gtable_add_grob(gt_new, grob, rows[1], i + cols[1] + right - cols[2], clip = 'off', name = grobname, z = max(table$layout$z)) } } top <- if (length(top) != 0) min(top) else rows[1] for (i in seq_len(top - 1)) { table <- gt[i, p_cols] if (length(table$grobs) != 0) { if (length(table$grobs) == 1) { grobname <- table$layout$name grob <- table$grobs[[1]] } else { grobname <- paste(table$layout$name, collapse = ', ') grob <- table } gt_new <- gtable_add_grob(gt_new, grob, i, cols[1], clip = 'off', name = grobname, z = max(table$layout$z)) } } bottom <- if (length(bottom) != 0) max(bottom) else rows[2] for (i in seq_len(nrow(gt) - bottom)) { table <- gt[i + bottom, p_cols] if (length(table$grobs) != 0) { if (length(table$grobs) == 1) { grobname <- table$layout$name grob <- table$grobs[[1]] } else { grobname <- paste(table$layout$name, collapse = ', ') grob <- table } gt_new <- gtable_add_grob(gt_new, grob, i + rows[1] + bottom - rows[2], cols[1], clip = 'off', name = grobname, z = max(table$layout$z)) } } panel_name <- paste0('panel; ', paste(panels$layout$name, collapse = ', ')) gtable_add_grob(gt_new, panels, rows[1], cols[1], clip = 'off', name = panel_name, z = 1) } create_design <- function(width, height, byrow) { mat <- matrix(seq_len(width * height), nrow = height, ncol = width, byrow = byrow) ind <- as.vector(mat) ind <- match(seq_along(ind), ind) area( t = row(mat)[ind], l = col(mat)[ind] ) } #' @importFrom grid convertHeight convertWidth unit table_dims <- function(widths, heights, areas, ncol, nrow) { widths <- lapply(widths, convertWidth, 'mm', valueOnly = TRUE) widths <- vapply(seq_len(ncol * TABLE_COLS), function(i) { area <- (i - 1) %/% TABLE_COLS + 1 col_loc <- i %% TABLE_COLS if (col_loc == 0) col_loc <- TABLE_COLS area_side <- if (col_loc <= PANEL_COL) 'l' else 'r' tables <- which(areas[[area_side]] == area) if (length(tables) == 0) { 0 } else { max(vapply(widths[tables], `[[`, numeric(1), col_loc), 0) } }, numeric(1)) heights <- lapply(heights, convertHeight, 'mm', valueOnly = TRUE) heights <- vapply(seq_len(nrow * TABLE_ROWS), function(i) { area <- (i - 1) %/% TABLE_ROWS + 1 row_loc <- i %% TABLE_ROWS if (row_loc == 0) row_loc <- TABLE_ROWS area_side <- if (row_loc <= PANEL_ROW) 't' else 'b' tables <- which(areas[[area_side]] == area) if (length(tables) == 0) { 0 } else { max(vapply(heights[tables], `[[`, numeric(1), row_loc), 0) } }, numeric(1)) list(widths = unit(widths, 'mm'), heights = unit(heights, 'mm')) } set_grob_sizes <- function(tables, widths, heights, design) { unlist(lapply(seq_along(tables), function(i) { gt <- tables[[i]] if (!inherits(gt, 'gtable_patchwork_simple')) { return(gt$grobs) } table_loc <- design[i, , drop = FALSE] l <- (table_loc$l - 1) * TABLE_COLS l_widths <- widths[seq(l + 1, l + PANEL_COL - 1)] r <- (table_loc$r - 1) * TABLE_COLS r_widths <- widths[seq(r + PANEL_COL + 1, r + TABLE_COLS)] t <- (table_loc$t - 1) * TABLE_ROWS t_heights <- heights[seq(t + 1, t + PANEL_ROW - 1)] b <- (table_loc$b - 1) * TABLE_ROWS b_heights <- heights[seq(b + PANEL_ROW + 1, b + TABLE_ROWS)] gt$grobs[[2]] <- set_border_sizes(gt$grobs[[2]], l_widths, r_widths, t_heights, b_heights) gt$grobs }), recursive = FALSE) } set_border_sizes <- function(gt, l = NULL, r = NULL, t = NULL, b = NULL) { if (is.null(l) && is.null(r) && is.null(t) && is.null(b)) return(gt) if (!is.null(l)) gt$widths[seq_along(l)] <- l if (!is.null(r)) gt$widths[seq(ncol(gt) - length(r) + 1, ncol(gt))] <- r if (!is.null(t)) gt$heights[seq_along(t)] <- t if (!is.null(b)) gt$heights[seq(nrow(gt) - length(b) + 1, nrow(gt))] <- b gt$grobs <- lapply(seq_along(gt$grobs), function(i) { grob <- gt$grobs[[i]] if (!inherits(grob, 'gtable_patchwork')) { return(grob) } set_border_sizes( grob, if (gt$layout$l[i] == 1) l else NULL, if (gt$layout$r[i] == ncol(gt)) r else NULL, if (gt$layout$t[i] == 1) t else NULL, if (gt$layout$b[i] == nrow(gt)) b else NULL ) }) gt } #' @importFrom gtable gtable_add_rows gtable_add_cols #' @importFrom grid unit #' @importFrom ggplot2 find_panel add_strips <- function(gt) { panel_loc <- find_panel(gt) strip_pos <- switch( find_strip_pos(gt), inside = 0, outside = 2 ) if (!any(grepl('strip-b', gt$layout$name))) { gt <- gtable_add_rows(gt, unit(0, 'mm'), panel_loc$b + strip_pos) } else if (strip_pos == 2) { gt$heights[panel_loc$b + 1] <- sum(gt$heights[panel_loc$b + c(1, 2)]) gt <- gt[-(panel_loc$b + 2), ] } if (!any(grepl('strip-t', gt$layout$name))) { gt <- gtable_add_rows(gt, unit(0, 'mm'), panel_loc$t - 1 - strip_pos) } else if (strip_pos == 2) { gt$heights[panel_loc$t - 1] <- sum(gt$heights[panel_loc$t - c(1, 2)]) gt <- gt[-(panel_loc$t - 2), ] } if (!any(grepl('strip-r', gt$layout$name))) { gt <- gtable_add_cols(gt, unit(0, 'mm'), panel_loc$r + strip_pos) } else if (strip_pos == 2) { gt$widths[panel_loc$r + 1] <- sum(gt$widths[panel_loc$r + c(1, 2)]) gt <- gt[, -(panel_loc$r + 2)] } if (!any(grepl('strip-l', gt$layout$name))) { gt <- gtable_add_cols(gt, unit(0, 'mm'), panel_loc$l - 1 - strip_pos) } else if (strip_pos == 2) { gt$widths[panel_loc$l - 1] <- sum(gt$widths[panel_loc$l - c(1, 2)]) gt <- gt[, -(panel_loc$l - 2)] } gt } #' @importFrom gtable gtable_add_rows gtable_add_cols #' @importFrom grid unit add_guides <- function(gt, collect = FALSE) { panel_loc <- find_panel(gt)[, c('t', 'l', 'b', 'r')] guide_ind <- which(grepl('guide-box', gt$layout$name)) guide_loc <- gt$layout[guide_ind, c('t', 'l', 'b', 'r')] guide_pos <- if (nrow(guide_loc) == 0) { 'none' } else if (all(unlist(guide_loc == panel_loc))) { 'inside' } else { if (panel_loc$t == guide_loc$t) { if (panel_loc$l > guide_loc$l) { 'left' } else { 'right' } } else { if (panel_loc$t > guide_loc$t) { 'top' } else { 'bottom' } } } if (guide_pos != 'right') { gt <- gtable_add_cols(gt, unit(c(0, 0), 'mm'), panel_loc$r + 3) } if (guide_pos != 'left') { gt <- gtable_add_cols(gt, unit(c(0, 0), 'mm'), panel_loc$l - 4) } if (guide_pos != 'bottom') { gt <- gtable_add_rows(gt, unit(c(0, 0), 'mm'), panel_loc$b + 5) } if (guide_pos != 'top') { gt <- gtable_add_rows(gt, unit(c(0, 0), 'mm'), panel_loc$t - 4) } if (collect && guide_pos != 'none') { guide_grob <- gt$grobs[[guide_ind]] guide_loc <- gt$layout[guide_ind, ] # May have changed above space_pos <- if (guide_pos %in% c('left', 'top')) 1 else -1 if (guide_pos %in% c('right', 'left')) { gt$widths[c(guide_loc$l, guide_loc$l + space_pos)] <- unit(c(0, 0), 'mm') } else if (guide_pos %in% c('bottom', 'top')) { gt$heights[c(guide_loc$t, guide_loc$t + space_pos)] <- unit(c(0, 0), 'mm') } gt$grobs[guide_ind] <- NULL gt$layout <- gt$layout[-guide_ind, ] gt$collected_guides <- guide_grob$grobs[grepl('guides', guide_grob$layout$name)] } gt } find_strip_pos <- function(gt) { panel_loc <- find_panel(gt) ind <- grep('strip-t', gt$layout$name) if (length(ind) != 0 && panel_loc$t - min(gt$layout$t[ind]) != 1) { return('outside') } ind <- grep('strip-r', gt$layout$name) if (length(ind) != 0 && max(gt$layout$r[ind]) - panel_loc$r != 1) { return('outside') } ind <- grep('strip-b', gt$layout$name) if (length(ind) != 0 && max(gt$layout$b[ind]) - panel_loc$b != 1) { return('outside') } ind <- grep('strip-l', gt$layout$name) if (length(ind) != 0 && panel_loc$l - min(gt$layout$l[ind]) != 1) { return('outside') } 'inside' } set_panel_dimensions <- function(gt, panels, widths, heights, fixed_asp, design) { width_ind <- seq(PANEL_COL, by = TABLE_COLS, length.out = length(widths)) height_ind <- seq(PANEL_ROW, by = TABLE_ROWS, length.out = length(heights)) if (!is.unit(widths)) { widths[is.na(widths)] <- -1 widths <- unit(widths, 'null') } width_strings <- as.character(widths) if (!is.unit(heights)) { heights[is.na(heights)] <- -1 heights <- unit(heights, 'null') } height_strings <- as.character(heights) if (any(width_strings == '-1null') && any(height_strings == '-1null')) { respect <- matrix(0, nrow = length(gt$heights), ncol = length(gt$widths)) fixed_areas <- lapply(which(fixed_asp), function(i) { list( rows = seq(design$t[i], design$b[i]), cols = seq(design$l[i], design$r[i]) ) }) can_fix <- vapply(fixed_areas, function(x) length(x$rows) == 1 && length(x$cols), logical(1)) can_fix_row <- vapply(fixed_areas, function(x) all(grepl('null$', height_strings[x$rows])), logical(1)) can_fix_col <- vapply(fixed_areas, function(x) all(grepl('null$', width_strings[x$cols])), logical(1)) fixed_areas <- fixed_areas[can_fix & (can_fix_row & can_fix_col)] fixed_gt <- which(fixed_asp)[can_fix & (can_fix_row & can_fix_col)] all_fixed_rows <- table(unlist(lapply(fixed_areas, `[[`, 'rows'))) all_fixed_cols <- table(unlist(lapply(fixed_areas, `[[`, 'cols'))) controls_dim <- vapply(fixed_areas, function(a) { all(all_fixed_rows[as.character(a$rows)] == 1) || all(all_fixed_rows[as.character(a$cols)] == 1) }, logical(1)) for (i in order(controls_dim)) { panel_ind <- grep('panel', panels[[fixed_gt[i]]]$layout$name)[1] w <- panels[[fixed_gt[i]]]$grobs[[panel_ind]]$widths h <- panels[[fixed_gt[i]]]$grobs[[panel_ind]]$heights can_set_width <- width_strings[fixed_areas[[i]]$cols] == '-1null' && length(w) == 1 && length(h) == 1 can_set_height <- height_strings[fixed_areas[[i]]$rows] == '-1null' && length(w) == 1 && length(h) == 1 will_be_fixed <- TRUE if (can_set_width && can_set_height) { widths[fixed_areas[[i]]$cols] <- w width_strings[fixed_areas[[i]]$cols] <- '' heights[fixed_areas[[i]]$rows] <- h height_strings[fixed_areas[[i]]$rows] <- '' } else if (can_set_width) { widths[fixed_areas[[i]]$cols] <- heights[fixed_areas[[i]]$rows] * (as.numeric(w) / as.numeric(h)) width_strings[fixed_areas[[i]]$cols] <- '' } else if (can_set_height) { heights[fixed_areas[[i]]$rows] <- widths[fixed_areas[[i]]$cols] * (as.numeric(h) / as.numeric(w)) height_strings[fixed_areas[[i]]$rows] <- '' } else { will_be_fixed <- FALSE } if (will_be_fixed) { respect[height_ind[fixed_areas[[i]]$rows], width_ind[fixed_areas[[i]]$cols]] <- 1 } } if (all(respect == 0)) respect <- FALSE gt$respect <- respect } widths[width_strings == '-1null'] <- unit(1, 'null') heights[height_strings == '-1null'] <- unit(1, 'null') gt$widths[width_ind] <- widths gt$heights[height_ind] <- heights gt } add_insets <- function(gt) { is_inset <- vapply(gt, inherits, logical(1), 'inset_table') if (!any(is_inset)) { return(gt) } canvas <- rank(cumsum(!is_inset), ties.method = "min")[is_inset] if (canvas[1] == 0) { stop("insets cannot be the first plot in a patchwork", call. = FALSE) } insets <- which(is_inset) name <- paste0('inset_', insets) for (i in seq_along(insets)) { ins <- gt[[insets[i]]] can <- gt[[canvas[i]]] setting <- attr(ins, 'settings') if (setting$on_top) { z <- max(can$layout$z) + 1 } else { bg <- which(grepl('background', can$layout$name)) if (length(bg) != 0) { z <- can$layout$z[bg[1]] } else { z <- min(can$layout$z) - 1 } } gt[[canvas[i]]] <- switch(setting$align_to, panel = gtable_add_grob(can, list(ins), PANEL_ROW, PANEL_COL, z = z, clip = setting$clip, name = name[i]), plot = gtable_add_grob(can, list(ins), PLOT_TOP, PLOT_LEFT, PLOT_BOTTOM, PLOT_RIGHT, z = z, clip = setting$clip, name = name[i]), full = gtable_add_grob(can, list(ins), 1, 1, nrow(can), ncol(can), z = z, clip = setting$clip, name = name[i]), stop('Unknown alignment setting: `', setting$align_to, '`', call. = FALSE) ) } gt[!is_inset] } patchwork/R/aaa.R0000644000176200001440000000050513564507431013332 0ustar liggesusers# Standard gtable layout TABLE_ROWS <- 18 TABLE_COLS <- 15 PANEL_ROW <- 10 PANEL_COL <- 8 PLOT_TOP <- 7 PLOT_BOTTOM <- 13 PLOT_LEFT <- 5 PLOT_RIGHT <- 11 TITLE_ROW <- 3 SUBTITLE_ROW <- 4 CAPTION_ROW <- 16 GUIDE_RIGHT <- 13 GUIDE_LEFT <- 3 GUIDE_TOP <- 5 GUIDE_BOTTOM <- 15 `%||%` <- function(x, y) if (is.null(x)) y else x patchwork/R/wrap_ggplot_grob.R0000644000176200001440000000324013567464641016155 0ustar liggesusers#' Make a gtable created from a ggplot object patchwork compliant #' #' This function converts a gtable, as produced by [ggplot2::ggplotGrob()] and #' makes it ready to be added to a patchwork. In contrast to passing #' the gtable to [wrap_elements()], `wrap_ggplot_grob()` ensures proper #' alignment as expected. On the other hand major restructuring of the gtable #' will result in an object that doesn't work properly with #' `wrap_ggplot_grob()`. #' #' @param x A gtable as produced by [ggplot2::ggplotGrob()] #' #' @return A `table_patch` object to be added to a patchwork #' #' @export #' #' @examples #' library(grid) #' library(gtable) #' library(ggplot2) #' #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggtitle('disp and mpg seems connected') #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' #' # Convert p2 so we can add new stuff to it #' p2_table <- ggplotGrob(p2) #' stamp <- textGrob('TOP SECRET', rot = 35, #' gp = gpar(fontsize = 72, fontface = 'bold') #' ) #' p2_table <- gtable_add_grob(p2_table, stamp, #' t = 1, l = 1, b = nrow(p2_table), r = ncol(p2_table) #' ) #' #' # Adding it directly will loose alignment #' p1 + p2_table #' #' # Use wrap_ggplot_grob to keep alignment #' p1 + wrap_ggplot_grob(p2_table) #' wrap_ggplot_grob <- function(x) { stopifnot(inherits(x, 'gtable')) stopifnot(length(x$widths) <= TABLE_COLS) stopifnot(length(x$heights) <= TABLE_ROWS) patch <- make_patch() class(patch) <- c('table_patch', class(patch)) attr(patch, 'table') <- x patch } #' @export patchGrob.table_patch <- function(x, guides = 'auto') { gt <- attr(x, 'table') gt <- add_strips(gt) add_guides(gt, guides == 'collect') } patchwork/R/wrap_plots.R0000644000176200001440000000562513567442071015013 0ustar liggesusers#' Wrap plots into a patchwork #' #' While the use of `+` is a natural way to add plots together, it can be #' difficult to string together multiple plots programmatically if the number #' of plots is not known beforehand. `wrap_plots` makes it easy to take a list #' of plots and add them into one composition, along with layout specifications. #' #' If `design` is specified as a text string *and* the plots are named (e.g. #' `wrap_plots(A = p1, ...)`) *and* all plot names are single characters #' represented in the design layout string, the plots will be matched to their #' respective area by name. Otherwise the areas will be filled out #' sequentially in the same manner as using the `+` operator. See the examples #' for more. #' #' @param ... multiple `ggplot`s or a list containing `ggplot` objects #' @inheritParams plot_layout #' #' @return A `patchwork` object #' #' @importFrom ggplot2 is.ggplot #' @export #' #' @examples #' library(ggplot2) #' #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) #' p4 <- ggplot(mtcars) + geom_bar(aes(carb)) #' p5 <- ggplot(mtcars) + geom_violin(aes(cyl, mpg, group = cyl)) #' #' # Either add the plots as single arguments #' wrap_plots(p1, p2, p3, p4, p5) #' #' # Or add them as a list... #' plots <- list(p1, p2, p3, p4, p5) #' wrap_plots(plots) #' #' # Match plots to areas by name #' design <- "#BB #' AA#" #' wrap_plots(B = p1, A = p2, design = design) #' #' # Compare to not using named plot arguments #' wrap_plots(p1, p2, design = design) #' wrap_plots <- function(..., ncol = NULL, nrow = NULL, byrow = NULL, widths = NULL, heights = NULL, guides = NULL, tag_level = NULL, design = NULL) { if (is_valid_plot(..1)) { plots <- list(...) } else if (is.list(..1)) { plots <- ..1 } else { stop('Can only wrap ggplot and/or grob objects or a list of them', call. = FALSE) } if (!all(vapply(plots, is_valid_plot, logical(1)))) stop('Only know how to add ggplots and/or grobs', call. = FALSE) if (!is.null(names(plots)) && !is.null(design) && is.character(design)) { area_names <- unique(trimws(strsplit(design, '')[[1]])) area_names <- sort(setdiff(area_names, c('', '#'))) if (all(names(plots) %in% area_names)) { plot_list <- vector('list', length(area_names)) names(plot_list) <- area_names plot_list[names(plots)] <- plots plot_list[vapply(plot_list, is.null, logical(1))] <- list(plot_spacer()) plots <- plot_list } } Reduce(`+`, plots, init = plot_filler()) + plot_layout( ncol = ncol, nrow = nrow, byrow = byrow, widths = widths, heights = heights, guides = guides, tag_level = tag_level, design = design ) } #' @importFrom ggplot2 is.ggplot #' @importFrom grid is.grob is_valid_plot <- function(x) is.ggplot(x) || is.grob(x) patchwork/R/arithmetic.R0000644000176200001440000001050313766071277014750 0ustar liggesusers#' Plot arithmetic #' #' In addition to the `+` operator known in `ggplot2`, `patchwork` defines logic #' for some of the other operators that aids in building up your plot #' composition and reduce code-reuse. #' #' @details #' `patchwork` augment the `+` operator from `ggplot2` and allows the user to #' add full `ggplot` objects together in order to compose them into the same #' view. The last added plot is always the active one where new geoms etc. are #' added to. Another operator that is much like it, but not quite, is `-`. It #' also adds plots together but instead of adding the right hand side to the #' patchwork defined in the left hand side, it puts the left hand side besides #' the right hand side in a patchwork. This might sound confusing, but in #' essence `-` ensures that the right and left side are put in the same nesting #' level (`+` puts the right side *into* the left side). Using `-` might seem #' unintuitive if you think of the operator as "subtract", but look at it as a #' hyphen instead (the underlying reason is that `-` is the only operator in the #' same precedence group as `+`). #' #' Often you are interested in creating single column or single row layouts. #' `patchwork` provides `|` (besides) and `/` (over) operators to support #' stacking and packing of plots. See the exampels for their use. #' #' In order to reduce code repetition `patchwork` provides two operators for #' adding ggplot elements (geoms, themes, facets, etc.) to multiple/all plots in #' a patchwork. `*` will add the element to all plots in the current nesting #' level, while `&` will recurse into nested patches. #' #' @param e1 A `ggplot` or `patchwork` object #' @param e2 A `ggplot` or `patchwork` object in case of `/`, or a `gg` object #' such as a geom or theme specification in case of `*` and `&` #' #' @return A `patchwork` object #' #' @name plot_arithmetic #' @rdname plot_arithmetic #' #' @examples #' library(ggplot2) #' #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) #' p4 <- ggplot(mtcars) + geom_bar(aes(carb)) #' #' # Standard addition vs division #' p1 + p2 + p3 + plot_layout(ncol = 1) #' p1 + p2 - p3 + plot_layout(ncol = 1) #' #' # Stacking and packing #' (p1 | p2 | p3) / #' p4 #' #' # Add elements to the same nesting level #' (p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) * theme_bw() #' #' # Recurse into nested plots as well #' (p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) & theme_bw() #' NULL #' @importFrom grid is.grob #' @rdname plot_arithmetic #' @export "-.ggplot" <- function(e1, e2) { if (should_autowrap(e2)) e2 <- wrap_elements(full = e2) if (!is.ggplot(e2)) stop("Only knows how to fold ggplot objects together", call. = FALSE) patchwork <- new_patchwork() if (is_patchwork(e2)) { plot <- plot_filler() patchwork$plots <- list(e1, e2) } else { plot <- e2 patchwork$plots <- list(e1) } add_patches(plot, patchwork) } #' @importFrom grid is.grob #' @rdname plot_arithmetic #' @export "/.ggplot" <- function(e1, e2) { if (should_autowrap(e2)) e2 <- wrap_elements(full = e2) if (!is_patchwork(e1)) { e1 + e2 + plot_layout(ncol = 1) } else if (!is.null(e1$patches$layout$ncol) && e1$patches$layout$ncol == 1) { e1 + e2 } else { e1 - e2 + plot_layout(ncol = 1) } } #' @importFrom grid is.grob #' @rdname plot_arithmetic #' @export "|.ggplot" <- function(e1, e2) { if (should_autowrap(e2)) e2 <- wrap_elements(full = e2) if (!is_patchwork(e1)) { e1 + e2 + plot_layout(nrow = 1) } else if (!is.null(e1$patches$layout$nrow) && e1$patches$layout$nrow == 1) { e1 + e2 } else { e1 - e2 + plot_layout(nrow = 1) } } #' @rdname plot_arithmetic #' @export "*.gg" <- function(e1, e2) { if (is_patchwork(e1)) { e1$patches$plots <- lapply(e1$patches$plots, function(p) { if (!is_patchwork(p)) p <- p + e2 p }) } e1 + e2 } #' @rdname plot_arithmetic #' @importFrom ggplot2 is.theme #' @export "&.gg" <- function(e1, e2) { if (is_patchwork(e1)) { if (is.theme(e2)) { e1$patches$annotation$theme <- e1$patches$annotation$theme + e2 } e1$patches$plots <- lapply(e1$patches$plots, function(p) { if (is_patchwork(p)) { p <- p & e2 } else { p <- p + e2 } p }) } e1 + e2 } patchwork/R/patch.R0000644000176200001440000000470013751052210013674 0ustar liggesusers#' @importFrom gtable gtable gtable_add_grob #' @importFrom grid unit #' @importFrom ggplot2 zeroGrob make_patch <- function() { widths <- unit(rep(0, TABLE_COLS), 'mm') widths[PANEL_COL] <- unit(1, 'null') heights <- unit(rep(0, TABLE_ROWS), 'mm') heights[PANEL_ROW] <- unit(1, 'null') table <- gtable(widths, heights) # Mark the panel patch table <- gtable_add_grob(table, list(zeroGrob()), PANEL_ROW, PANEL_COL, z = -Inf, name = 'panel_patch') class(table) <- c('patchgrob', class(table)) patch <- ggplot() class(patch) <- c('patch', class(patch)) attr(patch, 'table') <- table patch } is_patch <- function(x) inherits(x, 'patch') is_patchgrob <- function(x) inherits(x, 'patchgrob') #' @importFrom ggplot2 ggplotGrob #' @importFrom gtable gtable_add_grob patch_table <- function(x, grob = NULL) { table <- attr(x, 'table') if (is.null(grob)) grob <- ggplotGrob(x) table$widths[c(1, ncol(table))] <- grob$widths[c(1, ncol(grob))] table$heights[c(1, nrow(table))] <- grob$heights[c(1, nrow(grob))] gtable_add_grob(table, grob$grobs[grep('background', grob$layout$name)], 1, 1, nrow(table), ncol(table), z = -100, clip = 'on', name = 'background') } #' Get a grob describing the content of a patch object #' #' Methods for this generic should be defined for all `patch` subclasses #' and should return a compliant `gtable` object ready to be combined with #' regular plot objects. In general it is best to call `patch_table()` on the #' object and add grobs to this as `patch_table()` will return a compliant #' `gtable` #' #' @param x An `patch` object #' #' @return A `gtable` object #' #' @export #' @keywords internal #' patchGrob <- function(x, guides = 'auto') { UseMethod('patchGrob') } #' @export patchGrob.patch <- function(x, guides = 'auto') patch_table(x) #' @importFrom grid grid.newpage grid.draw seekViewport pushViewport upViewport #' @export print.patch <- function(x, newpage = is.null(vp), vp = NULL, ...) { if (newpage) grid.newpage() grDevices::recordGraphics( requireNamespace("patchwork", quietly = TRUE), list(), getNamespace("patchwork") ) gt <- patchGrob(x) if (is.null(vp)) { grid.draw(gt) } else { if (is.character(vp)) { seekViewport(vp) } else { pushViewport(vp) } grid.draw(gt) upViewport() } invisible(x) } #' @export plot.patch <- print.patch #' @export has_tag.ggplot <- function(x) !is_empty(x) patchwork/R/inset_element.R0000644000176200001440000000650213752202341015435 0ustar liggesusers#' Create an inset to be added on top of the previous plot #' #' The standard approach of patchwork is to place plots next to each other based #' on the provided layout. However, it may sometimes be beneficial to place one #' or several plots or graphic elements freely on top or below another plot. The #' `inset_element()` function provides a way to create such insets and gives you #' full control over placement. #' #' @param p A grob, ggplot, patchwork, formula, raster, or nativeRaster object #' to add as an inset #' @param left,bottom,right,top numerics or units giving the location of the #' outer bounds. If given as numerics they will be converted to `npc` units. #' @param align_to Specifies what `left`, `bottom`, etc should be relative to. #' Either `'panel'` (default), `'plot'`, or `'full'`. #' @param on_top Logical. Should the inset be placed on top of the other plot or #' below (but above the background)? #' @param clip Logical. Should clipping be performed on the inset? #' @param ignore_tag Logical. Should autotagging ignore the inset? #' #' @return A `inset_path` object #' #' @export #' #' @examples #' library(ggplot2) #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' #' # Basic use #' p1 + inset_element(p2, 0.6, 0.6, 1, 1) #' #' # Align to the full area instead #' p1 + inset_element(p2, 0, 0.6, 0.4, 1, align_to = 'full') #' #' # Grobs and other objects can be added as insets as well #' p1 + inset_element(grid::circleGrob(), 0.4, 0.4, 0.6, 0.6) #' #' logo <- system.file('help', 'figures', 'logo.png', package = 'patchwork') #' logo <- png::readPNG(logo, native = TRUE) #' p1 + inset_element(logo, 0.8, 0.8, 1, 1, align_to = 'full') #' #' # Just as expected insets are still amenable to changes after the fact #' p1 + #' inset_element(p2, 0.6, 0.6, 1, 1) + #' theme_classic() #' #' # Tagging also continues to work as expected #' p1 + #' inset_element(p2, 0.6, 0.6, 1, 1) + #' plot_annotation(tag_levels = '1') #' #' # but can be turned off, like for wrapped plots #' p1 + #' inset_element(p2, 0.6, 0.6, 1, 1, ignore_tag = TRUE) + #' plot_annotation(tag_levels = '1') #' inset_element <- function(p, left, bottom, right, top, align_to = 'panel', on_top = TRUE, clip = TRUE, ignore_tag = FALSE) { align_to <- match.arg(align_to, c('panel', 'plot', 'full')) if (!is.unit(left)) { left <- unit(left, 'npc') } if (!is.unit(bottom)) { bottom <- unit(bottom, 'npc') } if (!is.unit(right)) { right <- unit(right, 'npc') } if (!is.unit(top)) { top <- unit(top, 'npc') } if (!is.ggplot(p)) { p <- wrap_elements(full = p, clip = FALSE) } if (!is.ggplot(p)) { p <- wrap_elements(full = p, clip = clip) } clip <- if (clip) 'on' else 'off' attr(p, 'settings') <- list(left = left, bottom = bottom, right = right, top = top, align_to = align_to, on_top = on_top, clip = clip, ignore_tag = ignore_tag) class(p) <- c('inset_patch', class(p)) p } is_inset_patch <- function(x) inherits(x, 'inset_patch') #' @export print.inset_patch <- function(x, newpage = is.null(vp), vp = NULL, ...) { print(plot_spacer() + x, newpage = newpage, vp = vp, ...) } #' @export plot.inset_patch <- print.inset_patch #' @export has_tag.inset_patch <- function(x) !attr(x, 'settings')$ignore_tag patchwork/R/plot_multipage.R0000644000176200001440000001222413571015315015627 0ustar liggesusers#' Align plots across multiple pages #' #' Sometimes it is necessary to make sure that separate plots are aligned, with #' each other, but still exists as separate plots. That could e.g. be if they #' need to be part of a slideshow and you don't want titles and panels jumping #' around as you switch between slides. patchwork provides a range of utilities #' to achieve that. Currently it is only possible to align ggplots, but aligning #' patchworks will be supported in the future. #' #' @param plot A ggplot object #' @param dim A plot_dimension object as created by `get_dim()` #' @param ... ggplot objects or a single list of them #' #' @return `get_dim()` and `get_max_dim()` return a plot_dimension object. #' `set_dim()` returns a modified ggplot object with fixed outer dimensions and #' `align_patches()` return a list of such. The modified ggplots still behaves #' like a standard ggplot and new layers, scales, etc can be added to them. #' #' @name multipage_align #' @rdname multipage_align #' #' @examples #' library(ggplot2) #' p1 <- ggplot(mtcars) + #' geom_point(aes(mpg, disp)) + #' ggtitle('Plot 1') #' #' p2 <- ggplot(mtcars) + #' geom_boxplot(aes(gear, disp, group = gear)) + #' ggtitle('Plot 2') #' #' p3 <- ggplot(mtcars) + #' geom_point(aes(hp, wt, colour = mpg)) + #' ggtitle('Plot 3') #' #' p4 <- ggplot(mtcars) + #' geom_bar(aes(gear)) + #' facet_wrap(~cyl) + #' ggtitle('Plot 4') #' #' # Align a plot to p4 #' p4_dim <- get_dim(p4) #' set_dim(p1, p4_dim) #' #' # Align a plot to the maximum dimensions of a list of plots #' max_dims <- get_max_dim(p1, p2, p3, p4) #' set_dim(p2, max_dims) #' #' # Align a list of plots with each other #' aligned_plots <- align_patches(p1, p2, p3, p4) #' aligned_plots[[3]] #' #' # Aligned plots still behave like regular ggplots #' aligned_plots[[3]] + theme_bw() #' NULL #' @rdname multipage_align #' @export get_dim <- function(plot) { UseMethod('get_dim') } is_plot_dimension <- function(x) inherits(x, 'plot_dimension') #' @export print.plot_dimension <- function(x, ...) { cat('A plot dimension object to be applied to a ggplot or patchwork with `set_dim()`') invisible(x) } #' @importFrom ggplot2 ggplot_build ggplot_gtable geom_blank #' @export get_dim.ggplot <- function(plot) { table <- plot_table(plot, 'auto') panel_pos <- find_panel(table) widths <- convertWidth(table$widths, 'mm', TRUE) heights <- convertHeight(table$heights, 'mm', TRUE) dims <- list(l = widths[seq_len(panel_pos$l - 1)], r = widths[seq(panel_pos$r + 1, ncol(table))], t = heights[seq_len(panel_pos$t - 1)], b = heights[seq(panel_pos$b + 1, nrow(table))]) class(dims) <- c('ggplot_dimension', 'plot_dimension') dims } is_ggplot_dimension <- function(x) inherits(x, 'ggplot_dimension') #' @export get_dim.patchwork <- function(plot) { stop('Getting dimensions on patchworks are currently unsupported', call. = FALSE) } #' @rdname multipage_align #' @export set_dim <- function(plot, dim) { if (!is_plot_dimension(dim)) { stop('`dim` must be a plot_dimension object created with `get_dim()`', call. = FALSE) } UseMethod('set_dim') } #' @export set_dim.ggplot <- function(plot, dim) { plot$fixed_dimensions <- dim class(plot) <- c('fixed_dim_ggplot', class(plot)) plot } #' @export set_dim.patchwork <- function(plot, dim) { stop('Setting dimensions on patchworks are currently unsupported', call. = FALSE) } #' @importFrom ggplot2 ggplot_build #' @export ggplot_build.fixed_dim_ggplot <- function(plot) { plot <- NextMethod() class(plot) <- c('fixed_dim_build', class(plot)) plot } #' @importFrom ggplot2 ggplot_gtable #' @export ggplot_gtable.fixed_dim_build <- function(data) { dim <- data$plot$fixed_dimensions table <- NextMethod() table <- add_strips(table) table <- add_guides(table, FALSE) panel_pos <- find_panel(table) table$widths[seq_len(panel_pos$l - 1)] <- unit(dim$l, 'mm') table$widths[seq(panel_pos$r + 1, ncol(table))] <- unit(dim$r, 'mm') table$heights[seq_len(panel_pos$t - 1)] <- unit(dim$t, 'mm') table$heights[seq(panel_pos$b + 1, nrow(table))] <- unit(dim$b, 'mm') table } #' @rdname multipage_align #' @export get_max_dim <- function(...) { if (is.ggplot(..1)) { plots <- list(...) } else if (is.list(..1)) { plots <- ..1 } else { stop('Can only get dimensions from ggplot objects or a list of them', call. = FALSE) } dims <- lapply(plots, get_dim) dims <- list( l = do.call(pmax, lapply(dims, `[[`, 'l')), r = do.call(pmax, lapply(dims, `[[`, 'r')), t = do.call(pmax, lapply(dims, `[[`, 't')), b = do.call(pmax, lapply(dims, `[[`, 'b')) ) class(dims) <- c('ggplot_dimension', 'plot_dimension') dims } #' @rdname multipage_align #' @export align_patches <- function(...) { if (is.ggplot(..1)) { plots <- list(...) } else if (is.list(..1)) { plots <- ..1 } else { stop('Can only align ggplot objects or a list of them', call. = FALSE) } lapply(plots, set_dim, get_max_dim(plots)) } #' Deprecated functions #' #' These functions are deprecated and should not be used. #' #' @export #' @keywords internal #' @usage NULL align_plots <- function(...) { .Deprecated('align_patches') align_patches(...) } patchwork/R/plot_layout.R0000644000176200001440000002300213752202756015161 0ustar liggesusers#' Define the grid to compose plots in #' #' In order to control how different plots are layed out, you need to add a #' layout specification. If you are nesting grids, the layout is scoped to the #' current nesting level. #' #' @param ncol,nrow The dimensions of the grid to create - if both are `NULL` it #' will use the same logic as [facet_wrap()][ggplot2::facet_wrap] to set the #' dimensions #' @param byrow Analogous to `byrow` in [matrix()][base::matrix]. If `FALSE` the #' plots will be filled in in column-major order #' @param widths,heights The relative widths and heights of each column and row #' in the grid. Will get repeated to match the dimensions of the grid. #' @param guides A string specifying how guides should be treated in the layout. #' `'collect'` will collect guides below to the given nesting level, removing #' duplicates. `'keep'` will stop collection at this level and let guides be #' placed alongside their plot. `auto` will allow guides to be collected if a #' upper level tries, but place them alongside the plot if not. If you modify #' default guide "position" with [theme(legend.position=...)][ggplot2::theme] #' while also collecting guides you must apply that change to the overall #' patchwork (see example). #' @param tag_level A string (`'keep'` or `'new'`) to indicate how #' auto-tagging should behave. See [plot_annotation()]. #' @param design Specification of the location of areas in the layout. Can either #' be specified as a text string or by concatenating calls to [area()] together. #' See the examples for further information on use. #' #' @return A `plot_layout` object to be added to a `ggassmble` object #' #' @export #' #' @examples #' library(ggplot2) #' #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) #' p4 <- ggplot(mtcars) + geom_bar(aes(carb)) #' p5 <- ggplot(mtcars) + geom_violin(aes(cyl, mpg, group = cyl)) #' #' # The plots are layed out automatically by default #' p1 + p2 + p3 + p4 + p5 #' #' # Use byrow to change how the grid is filled out #' p1 + p2 + p3 + p4 + p5 + plot_layout(byrow = FALSE) #' #' # Change the grid dimensions #' p1 + p2 + p3 + p4 + p5 + plot_layout(ncol = 2, widths = c(1, 2)) #' #' # Define layout at different nesting levels #' p1 + #' p2 + #' (p3 + #' p4 + #' plot_layout(ncol = 1) #' ) + #' p5 + #' plot_layout(widths = c(2, 1)) #' #' # Complex layouts can be created with the `design` argument #' design <- c( #' area(1, 1, 2), #' area(1, 2, 1, 3), #' area(2, 3, 3), #' area(3, 1, 3, 2), #' area(2, 2) #' ) #' p1 + p2 + p3 + p4 + p5 + plot_layout(design = design) #' #' \donttest{ #' # The same can be specified as a character string: #' design <- " #' 122 #' 153 #' 443 #' " #' p1 + p2 + p3 + p4 + p5 + plot_layout(design = design) #' #' # When using strings to define the design `#` can be used to denote empty #' # areas #' design <- " #' 1## #' 123 #' ##3 #' " #' p1 + p2 + p3 + plot_layout(design = design) #' } #' # Use guides="collect" to remove duplicate guides #' p6 <- ggplot(mtcars) + geom_point(aes(mpg, disp, color=cyl)) #' p7 <- ggplot(mtcars) + geom_point(aes(mpg, hp, color=cyl)) #' p6 + p7 + plot_layout(guides='collect') #' #' # Guide position must be applied to entire patchwork #' p6 + p7 + plot_layout(guides='collect') & #' theme(legend.position='bottom') plot_layout <- function(ncol = NULL, nrow = NULL, byrow = NULL, widths = NULL, heights = NULL, guides = NULL, tag_level = NULL, design = NULL) { if (!is.null(guides)) guides <- match.arg(guides, c('auto', 'collect', 'keep')) if (!is.null(tag_level)) tag_level <- match.arg(tag_level, c('keep', 'new')) structure(list( ncol = ncol, nrow = nrow, byrow = byrow, widths = widths, heights = heights, guides = guides, tag_level = tag_level, design = as_areas(design) ), class = 'plot_layout') } #' Specify a plotting area in a layout #' #' This is a small helper used to specify a single area in a rectangular grid #' that should contain a plot. Objects constructed with `area()` can be #' concatenated together with `c()` in order to specify multiple areas. #' #' The grid that the areas are specified in reference to enumerate rows from top #' to bottom, and coloumns from left to right. This means that `t` and `l` #' should always be less or equal to `b` and `r` respectively. Instead of #' specifying area placement with a combination of `area()` calls, it is #' possible to instead pass in a single string #' #' ``` #' areas <- c(area(1, 1, 2, 1), #' area(2, 3, 3, 3)) #' ``` #' #' is equivalent to #' #' ``` #' areas < -"A## #' A#B #' ##B" #' ``` #' #' For an example of this, see the [plot_layout()] examples. #' #' @param t,b The top and bottom bounds of the area in the grid #' @param l,r The left and right bounds of the area int the grid #' #' @return A `patch_area` object #' #' @export #' #' @examples #' library(ggplot2) #' #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) #' #' layout <- c( #' area(1, 1), #' area(1, 3, 3), #' area(3, 1, 3, 2) #' ) #' #' # Show the layout to make sure it looks as it should #' plot(layout) #' #' # Apply it to a patchwork #' p1 + p2 + p3 + plot_layout(design = layout) #' area <- function(t, l, b = t, r = l) { if (missing(t) || missing(l)) { one_area <- list( t = integer(0), l = integer(0), b = integer(0), r = integer(0) ) } else { len <- max(length(t), length(l), length(b), length(r)) one_area <- list( t = rep_len(as.integer(t), len), l = rep_len(as.integer(l), len), b = rep_len(as.integer(b), len), r = rep_len(as.integer(r), len) ) if (any(t > b)) { stop('`t` must be less than `b`', call. = FALSE) } if (any(l > r)) { stop('`l` must be less than `r`', call. = FALSE) } } class(one_area) <- 'patch_area' one_area } #' @importFrom ggplot2 ggplot geom_rect aes scale_y_reverse scale_x_continuous labs theme_void theme element_line element_text margin #' @importFrom grid unit #' @export plot.patch_area <- function(x, y, ...) { area <- as.data.frame(unclass(x)) area$l <- area$l - 0.45 area$r <- area$r + 0.45 area$t <- area$t - 0.45 area$b <- area$b + 0.45 area$name <- as.factor(seq_len(nrow(area))) b_fun <- function(lim) { if (lim[1] < lim[2]) { lim <- seq(floor(lim[1]), ceiling(lim[2]), by = 1) } else { lim <- seq(ceiling(lim[1]), floor(lim[2]), by = -1) } lim[-c(1, length(lim))] } ggplot(area) + geom_rect(aes(xmin = l, xmax = r, ymin = t, ymax = b, fill = name), alpha = 0.3) + scale_y_reverse(breaks = b_fun, expand = c(0, 0.04)) + scale_x_continuous(breaks = b_fun, expand = c(0, 0.04), position = 'top') + labs(fill = 'Patch') + theme_void() + theme( panel.grid.minor = element_line(size = 0.5, colour = 'grey'), axis.text = element_text(), axis.ticks.length = unit(3, 'mm'), plot.margin = margin(10, 10, 10, 10) ) } utils::globalVariables(c( 'l', 'r', 't', 'b', 'name' )) as_areas <- function(x) { if (is.null(x)) return(NULL) if (is_area(x)) return(x) if (!is.character(x)) { stop("Don't know how to convert ", class(x)[1], " into area positions", call. = FALSE) } x <- strsplit(x, split = '\n')[[1]] x <- lapply(x, trimws) if (identical(x[[1]], '')) x[1] <- NULL if (identical(x[[length(x)]], '')) x[length(x)] <- NULL x <- lapply(x, function(x) strsplit(x, '')[[1]]) ncols <- vapply(x, length, integer(1)) if (length(unique(ncols)) != 1) { stop("character layout must be rectangular", call. = FALSE) } row <- rep(seq_along(x), each = ncols[1]) col <- rep(seq_len(ncols[1]), length(x)) x <- unlist(x) area_names <- unique(sort(x)) area_names[area_names == '#'] <- NA x <- match(x, area_names) do.call(c, lapply(split(seq_along(x), x), function(i) { if (is.na(x[i[1]])) return(area()) area_rows <- range(row[i]) area_cols <- range(col[i]) if (!all(x[row >= area_rows[1] & row <= area_rows[2] & col >= area_cols[1] & col <= area_cols[2]] == x[i[1]])) { stop('Patch areas must be rectangular', call. = FALSE) } area(area_rows[1], area_cols[1], area_rows[2], area_cols[2]) })) } is_area <- function(x) inherits(x, 'patch_area') #' @export length.patch_area <- function(x) length(x$t) #' @export print.patch_area <- function(x, ...) { cat(length(x), 'patch areas, spanning', max(x$r), 'columns and', max(x$b), 'rows\n\n') print(as.data.frame(unclass(x), row.names = paste0(seq_along(x), ': '))) } #' @export c.patch_area <- function(..., recursive = FALSE) { all_areas <- list(...) if (length(all_areas) == 0) return(area()) if (any(!vapply(all_areas, is_area, logical(1)))) { stop('Areas can only be combined with each other', call. = FALSE) } area <- all_areas[[1]] area$t <- unlist(lapply(all_areas, `[[`, 't')) area$l <- unlist(lapply(all_areas, `[[`, 'l')) area$b <- unlist(lapply(all_areas, `[[`, 'b')) area$r <- unlist(lapply(all_areas, `[[`, 'r')) area } default_layout <- plot_layout(byrow = TRUE, widths = NA, heights = NA, guides = 'auto', tag_level = 'keep') #' @importFrom utils modifyList #' @export ggplot_add.plot_layout <- function(object, plot, object_name) { plot <- as_patchwork(plot) plot$patches$layout <- modifyList(plot$patches$layout, object[!vapply(object, is.null, logical(1))]) plot } patchwork/R/patchwork-package.r0000644000176200001440000000255213567441620016247 0ustar liggesusers#' @section Overview: #' The use and premise of `patchwork` is simple: Just add `ggplot2` plots #' together to compose multiplot layouts. Because of this simplicity there is #' not much more to say. Still, a few functions allow you to modify the #' behaviour, e.g.: #' #' - [plot_layout()] allows you to define the grid that plots are put into #' - [plot_annotation()] allows you to add titles, tags etc. #' #' @section Learn more: #' The guides below will teach you all about what you can do with patchwork. #' #' - [Getting Started](https://patchwork.data-imaginist.com/articles/patchwork.html) #' - [Assembling Plots](https://patchwork.data-imaginist.com/articles/guides/assembly.html) #' - [Defining Layouts](https://patchwork.data-imaginist.com/articles/guides/layout.html) #' - [Adding Annotation](https://patchwork.data-imaginist.com/articles/guides/annotation.html) #' - [Aligning across pages](https://patchwork.data-imaginist.com/articles/guides/multipage.html) #' #' @examples #' library(ggplot2) #' # You can add plots saved to variables #' #' p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) #' p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) #' #' p1 + p2 #' #' # Or build it up in one step #' ggplot(mtcars) + #' geom_point(aes(mpg, disp)) + #' ggplot(mtcars) + #' geom_boxplot(aes(gear, disp, group = gear)) #' #' @keywords internal '_PACKAGE' patchwork/NEWS.md0000644000176200001440000000406013766106175013366 0ustar liggesusers# patchwork 1.1.1 * Use vdiffr conditionally to pass test on M1 mac * Add `str()` method to patchwork objects (#217) * Fix a bug in `inset_element()` when insetting plots with fixed dimensions (#214) * Make sure that `-`, `/`, and `|` works with all supported object types (#221) # patchwork 1.1.0 * Add `inset_element()` to allow adding plots as insets * patchwork now supports `raster` and `nativeRaster` objects * Avoid incrementing tag counter when recursing into a nested plot without additional tags to use (#147) * Fix bug that prevented strips turned off with `element_blank()` from working (#200) * Add option to supply a custom sequence of tags to use for auto-tagging (#211, #63) # patchwork 1.0.1 * Renaming of `align_plots()` to `align_patches()` to avoid namespace clash with cowplot (#130) * Renaming of `as_grob()` (unexported) to `as_patch()` to avoid potential future namespace clash with cowplot (#131) * Fix bug in plot simplification with `theme(strip.placement = 'outside')` (#132) * Fix a bug in guide collection in R >= 4.0 due to the new unit implementation in grid (#170) * Collected guides now behave as ggplot2 guides when position is top or bottom (#137) * Fix a bug in base graphic support where the environment of the plot was not captured (#138) * Fix a bug when combining plots having guides placed manually in combination with faceting (#144) * Fix a bug where having negative margins around the legend would result in an unintelligeble error (#148) * Fix a bug when trying to combine faceted plots with fixed aspect ratio (#156) * Fix alignments of strips when only a single strip is present (#163) * Fix a bug that caused theme void to result in errors (#180) * Make aligning multiple fixed aspect plots more consistent (#175) * Correct alignment of guides when ssembling fixed aspect plots (#140, @ilia-kats) # patchwork 1.0.0 * First CRAN release. Provide utility and operators for assembling and nesting plots into a composition, tag subplots, collect guides and remove duplicates, and align plots across pages. patchwork/MD50000644000176200001440000001360713766623562012613 0ustar liggesusers91047625215492f9ce23e1c301e5abc3 *DESCRIPTION 390aa971d748d2d8595f400ac17045c9 *LICENSE 00f4b9be58d6682c9cac66880bbd0d01 *NAMESPACE b66cb16e9e26b495a71719d63b6273c1 *NEWS.md f9e97287177c5d23fe569fc378299bf5 *R/aaa.R f9eb6540c8e88ddfda3229ce95dcc3c9 *R/add_plot.R bcd47eee8f09d237b5263a87b968cfd8 *R/arithmetic.R c3c8d87181db5e42452b19ba5c0bceb2 *R/guide_area.R a295881daf8e4dc4b3ff77825a2cfa4b *R/guides.R 7ff8d53336484e0d17fa4cf57a18bbc2 *R/inset_element.R 4317d2b2d6da16c3e9851fb5e47c8b72 *R/patch.R 7c1a79f98624a5c9afad1f904133dfd6 *R/patchwork-package.r 7d86e00f1594fe99891c1068e8757646 *R/plot_annotation.R 1388a62a04a3956a83170edd0a600320 *R/plot_layout.R ebcb60141d1e6e7d9808f60d2f6b3762 *R/plot_multipage.R bd010a2d345a7456ead437169598bcd0 *R/plot_patchwork.R 3ef66b0d6e85b0c1f177ee5a6cbf691d *R/plot_spacer.R bc3fb4454b9417244955a7e94934a85c *R/wrap_elements.R d1b0844d804fbc0cd6944134465e54f1 *R/wrap_ggplot_grob.R e3ba7aca1ce911f7282adbf490cd0aa4 *R/wrap_plots.R b75d14e2971a43b02e9a905883a876d9 *R/zzz.R 3a41cdd87b70891e5a6e5ec3d0266ebb *README.md 592d3dff7cebec6b54bc91ca846a15c3 *build/vignette.rds 30587b6c84a4c62098248198234c50ac *inst/doc/patchwork.R 00ba775f216f3740d69bff0fbf7f1edb *inst/doc/patchwork.Rmd 68c6861aff71a8328b8d1af24489cbdf *inst/doc/patchwork.html 911d3670e8b69b3e3444fcb44a6067eb *man/align_plots.Rd 641da497a731c8e2c9ff3f685fdeb7c1 *man/area.Rd 1f61066bb5b9d3d3ebb507d97f1c706e *man/figures/README-example-1.png 6a1126cd4f456362a1b4f149cb0bbf02 *man/figures/README-unnamed-chunk-10-1.png eeff8c60b5307e575516b48d5b9ee08d *man/figures/README-unnamed-chunk-11-1.png 3dc9b366f88dbb0250faee16802dc358 *man/figures/README-unnamed-chunk-2-1.png 28949c885178f8b65e2c412e9e55863f *man/figures/README-unnamed-chunk-3-1.png 200ad5416eba48dea71e3f1fc8877e25 *man/figures/README-unnamed-chunk-4-1.png 7009269c9a8df69e63035b12cc21b87a *man/figures/README-unnamed-chunk-5-1.png 80247c6b5b5a8441883f873df1ac6301 *man/figures/README-unnamed-chunk-6-1.png b12accdb96c24f8fc7e4ab1e5b1daccb *man/figures/README-unnamed-chunk-7-1.png e42f2ae460285eecbd2436c6b332dc30 *man/figures/README-unnamed-chunk-8-1.png 81b34cb49e962146d28aaff041c6ec8c *man/figures/README-unnamed-chunk-9-1.png 654d3d24503566d1a4bef1b5f050de66 *man/figures/logo.png 3154db2c9392ed5339d86f999228ffa6 *man/figures/logo.svg 54ebb2b857d07a40f9cae6b5efd087b0 *man/guide_area.Rd b771b860205aebbdd15cb9676fc02fdc *man/inset_element.Rd a3ffa09f3e9ca6871840c56a81ccf718 *man/multipage_align.Rd 41c1c78698eb7297af8b9fe27f38fb76 *man/patchGrob.Rd cc3ec82f9b3267296b5e28542fd56a24 *man/patchwork-package.Rd d292f64d700ae842a4b45b31e1a31e74 *man/patchworkGrob.Rd 196182dbab8e1b10266a7e97b88b9af9 *man/plot_annotation.Rd baec5a26f16f3136bec44ee562a626ca *man/plot_arithmetic.Rd c222ec4b79eda464c960bdc9d08822a8 *man/plot_layout.Rd 63c464eba9716f6032bc7a5e280ddf36 *man/plot_spacer.Rd 5557aa2b562130e2682bc1464eba8c16 *man/wrap_elements.Rd ef6b6b02d11b3ed73be98f2f263a908c *man/wrap_ggplot_grob.Rd 87c2de7bd77af6161ba5d16cead4ed43 *man/wrap_plots.Rd cf02db3838cf247fb46b9e52669ff954 *tests/figs/add-base-graphics-p1-plot-1-10-1-10.svg 66e71d32d03ac1992d1955c879402c0c *tests/figs/add-ggplot-elements-p1-p2-theme-bw.svg fdf476322ba39a126aa437661754f805 *tests/figs/add-grob-p1-textgrob-test.svg 90c20a5b212df8a3a84505f686d1f9ff *tests/figs/add-patchwork-to-plot-p1-p2-p3.svg f2379b6dde4c499b60238c09f7e890cb *tests/figs/adding-to-all-on-level-patchwork-theme-bw.svg 9f420b7b9543b96ce78a89d06f52da17 *tests/figs/adding-to-all-subplots-patchwork-theme-bw.svg e33b813d8d722141293886405592afe1 *tests/figs/adding-to-patchwork-p1-p2-p3.svg 76fe2c9302d30a3cb9e3b7547a94d0cb *tests/figs/basic-inset-works.svg ed571fac8f35d06620dc862fe8b82566 *tests/figs/complex-composition-p1-p2-p3-p4.svg e9a16bcba1c521977776cda238112ad2 *tests/figs/deps.txt 5e0f89e2f4292145d1d0e5816417211c *tests/figs/far-dimensions-can-be-set-with-units.svg 3d5994a3ea592f88ff383d5ad0a325d2 *tests/figs/far-legend-justification.svg 08de1a81dafe032bfeab67fb6aee0917 *tests/figs/far-optimise-space-by-default-p-f-p-f-p3-p4.svg 6ba693e9f72e7b7396137b64260f8a32 *tests/figs/far-optimise-space-by-default-p1-p-f-p-f-p4.svg f48ff6535d180f70e798145be02bc28d *tests/figs/far-optimise-space-by-default-p1-p-f-p3-p4.svg d1994eb6e664a2547860e182d7512496 *tests/figs/far-space-optimisation-can-be-turned-off-p1-p2-p-f-p4-plot-layout-widths-1.svg 3259871859ed05387f920beb49f5bffb *tests/figs/grobs-can-be-inset.svg 01c77144f1b5c866323ccc979c808f9c *tests/figs/insets-can-be-changed.svg e32bb425f2c7c733ac7e847d6d26fd00 *tests/figs/nest-left-hand-side-p1-p2-p3.svg 806186648e8fea881450e76f346f7e40 *tests/figs/nest-right-hand-side-p1-p2-p3.svg c4bf55d33ea765455e5a53cec027330d *tests/figs/other-alignments-work.svg 48584dfe897b12df123b832cf5d28670 *tests/figs/pack-4-plots-p1-p2-p3-p4.svg 8687b54502e57034def6172b2b137194 *tests/figs/patchworks-can-be-inset.svg 5cb229a237088e08815d50508d61824a *tests/figs/setting-heights-as-units-p1-p2-p3-p4-plot-layout-heights-unit-3-cm.svg 6d81d2bb5e8f82336708d83baa2a6764 *tests/figs/setting-heights-p1-p2-p3-p4-plot-layout-heights-c-1-2.svg cb9895e4ec20345c670e34dbd5959957 *tests/figs/setting-ncol-p1-p2-p3-p4-plot-layout-ncol-3.svg 2a673d72f3d0280aaa8bc33b06c3721e *tests/figs/setting-nrow-p1-p2-p3-p4-plot-layout-nrow-3.svg 731ec0a402d44625610924bb7e09db20 *tests/figs/setting-widths-as-units-p1-p2-p3-p4-plot-layout-widths-unit-3-cm.svg db74509b8b1554e6dac735333a1184a2 *tests/figs/setting-widths-p1-p2-p3-p4-plot-layout-widths-c-1-2.svg c13d20579da582b4f98bff7213700dc4 *tests/figs/stack-3-plots-p1-p2-p3.svg 639c2e5787468ff39d89c43f88b879bf *tests/figs/standard-addition-p1-p2-p3.svg d8187666272264157fe2194d8418d8c2 *tests/testthat.R e5df7b46906921ea2b3d80fcf86c59f6 *tests/testthat/helper-setup.R 85a17f8af714e3b5e9dd9a950cd39f7a *tests/testthat/helper-vdiffr.R c9654ea6718ea8e393078dc3412b22b3 *tests/testthat/test-arithmetic.R d177f614916251ce9ddbc3469a84e71d *tests/testthat/test-layout.R 00ba775f216f3740d69bff0fbf7f1edb *vignettes/patchwork.Rmd patchwork/inst/0000755000176200001440000000000013766106227013243 5ustar liggesuserspatchwork/inst/doc/0000755000176200001440000000000013766106227014010 5ustar liggesuserspatchwork/inst/doc/patchwork.R0000644000176200001440000000316513766106227016142 0ustar liggesusers## ---- include = FALSE--------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(patchwork) ## ----------------------------------------------------------------------------- library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggtitle('Plot 1') p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) + ggtitle('Plot 2') p3 <- ggplot(mtcars) + geom_point(aes(hp, wt, colour = mpg)) + ggtitle('Plot 3') p4 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) + ggtitle('Plot 4') ## ----------------------------------------------------------------------------- p1 + p2 ## ----------------------------------------------------------------------------- p1 + p2 + labs(subtitle = 'This will appear in the last plot') ## ----------------------------------------------------------------------------- p1 + p2 + p3 + p4 ## ----------------------------------------------------------------------------- p1 + p2 + p3 + p4 + plot_layout(nrow = 3, byrow = FALSE) ## ----------------------------------------------------------------------------- p1 / p2 ## ----------------------------------------------------------------------------- p1 | (p2 / p3) ## ----------------------------------------------------------------------------- (p1 | (p2 / p3)) + plot_annotation(title = 'The surprising story about mtcars') ## ----------------------------------------------------------------------------- p1 + p2 + p3 + plot_annotation(tag_levels = 'I') patchwork/inst/doc/patchwork.html0000644000176200001440000144507413766106227016717 0ustar liggesusers Getting Started

Getting Started

library(patchwork)

Patchwork is a package designed to make plot composition in R extremely simple and powerful. It is mainly intended for users of ggplot2 and goes to great lengths to make sure ggplots are properly aligned no matter the complexity of your composition.

In this tutorial we’ll work through the basics of using patchwork. In the end you’ll have a fairly good understanding of the API, and will be ready to dive into some of the more advanced topics covered in the other vignettes.

Example plots

We’ll start by creating some example plots to use throughout this tutorial:

library(ggplot2)
p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 1')

p2 <- ggplot(mtcars) + 
  geom_boxplot(aes(gear, disp, group = gear)) + 
  ggtitle('Plot 2')

p3 <- ggplot(mtcars) + 
  geom_point(aes(hp, wt, colour = mpg)) + 
  ggtitle('Plot 3')

p4 <- ggplot(mtcars) + 
  geom_bar(aes(gear)) + 
  facet_wrap(~cyl) + 
  ggtitle('Plot 4')

These plots are fairly meaningless and only serve to illustrate plot composition - don’t read anything into the resulting plots.

Basic use

The absolute simplest use is the extension of the + operator used in ggplot2, to allow adding plots together:

p1 + p2

when adding plots together, the last added plot will be the active one, and will receive any addition of new ggplot2 objects such as geoms, labels, etc:

p1 + p2 + labs(subtitle = 'This will appear in the last plot')

Controlling layout

By default, patchwork will try to keep the grid square, and fill it out in row order

p1 + p2 + p3 + p4

This can be controlled with the addition of a plot_layout()

p1 + p2 + p3 + p4 + plot_layout(nrow = 3, byrow = FALSE)

plot_layout() have all sorts of amazing features for controlling the layout of your composition. See the Layout vignette for a full rundown of all its options.

Stacking and packing plots

Often you want to place plots on top of each other, or beside each other, rather than fill out a grid. While this can be accomplished by adding a one-row or one-column layout, patchwork also provides two operators that does this directly and further provides visual cues to the layout. | will place the plots beside each other, while / will stack them:

p1 / p2

as patchworks can be nested, these two operators are often enough to create rather complex layouts:

p1 | (p2 / p3)

Annotating the composition

It is often necessary to add titles, captions, tags, etc. to a composition. This can be achieved by adding a plot_annotation() to the patchwork:

(p1 | (p2 / p3)) + 
  plot_annotation(title = 'The surprising story about mtcars')

patchwork also provides auto-tagging capabilities, in order to identify subplots in text:

p1 + p2 + p3 + 
  plot_annotation(tag_levels = 'I')

The tagging can be either arabic or roman numbers, or latin letters, and separate tags can be given for different nesting levels. See the Annotation vignette for more information.

Want more?

This is enough to get you started, but we have only scratched the surface of what patchwork is capable of. Look into the other guides to find out more about, e.g. how to collect all legends in one place and remove duplicates or aligning plots across multiple pages.

patchwork/inst/doc/patchwork.Rmd0000644000176200001440000000737213672340356016466 0ustar liggesusers--- title: "Getting Started" output: rmarkdown::html_vignette: fig_width: 6 fig_height: 4 vignette: > %\VignetteIndexEntry{Getting Started} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup} library(patchwork) ``` Patchwork is a package designed to make plot composition in R extremely simple and powerful. It is mainly intended for users of ggplot2 and goes to great lengths to make sure ggplots are properly aligned no matter the complexity of your composition. In this tutorial we'll work through the basics of using patchwork. In the end you'll have a fairly good understanding of the API, and will be ready to dive into some of the more advanced topics covered in the other vignettes. ## Example plots We'll start by creating some example plots to use throughout this tutorial: ```{r} library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggtitle('Plot 1') p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) + ggtitle('Plot 2') p3 <- ggplot(mtcars) + geom_point(aes(hp, wt, colour = mpg)) + ggtitle('Plot 3') p4 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) + ggtitle('Plot 4') ``` These plots are fairly meaningless and only serve to illustrate plot composition - don't read anything into the resulting plots. ## Basic use The absolute simplest use is the extension of the `+` operator used in ggplot2, to allow adding plots together: ```{r} p1 + p2 ``` when adding plots together, the last added plot will be the active one, and will receive any addition of new ggplot2 objects such as geoms, labels, etc: ```{r} p1 + p2 + labs(subtitle = 'This will appear in the last plot') ``` ## Controlling layout By default, patchwork will try to keep the grid square, and fill it out in row order ```{r} p1 + p2 + p3 + p4 ``` This can be controlled with the addition of a `plot_layout()` ```{r} p1 + p2 + p3 + p4 + plot_layout(nrow = 3, byrow = FALSE) ``` `plot_layout()` have all sorts of amazing features for controlling the layout of your composition. See the *Layout* vignette for a full rundown of all its options. ## Stacking and packing plots Often you want to place plots on top of each other, or beside each other, rather than fill out a grid. While this can be accomplished by adding a one-row or one-column layout, patchwork also provides two operators that does this directly and further provides visual cues to the layout. `|` will place the plots beside each other, while `/` will stack them: ```{r} p1 / p2 ``` as patchworks can be nested, these two operators are often enough to create rather complex layouts: ```{r} p1 | (p2 / p3) ``` ## Annotating the composition It is often necessary to add titles, captions, tags, etc. to a composition. This can be achieved by adding a `plot_annotation()` to the patchwork: ```{r} (p1 | (p2 / p3)) + plot_annotation(title = 'The surprising story about mtcars') ``` patchwork also provides auto-tagging capabilities, in order to identify subplots in text: ```{r} p1 + p2 + p3 + plot_annotation(tag_levels = 'I') ``` The tagging can be either arabic or roman numbers, or latin letters, and separate tags can be given for different nesting levels. See the *Annotation* vignette for more information. ## Want more? This is enough to get you started, but we have only scratched the surface of what patchwork is capable of. Look into the other guides to find out more about, e.g. how to [collect all legends in one place and remove duplicates](https://patchwork.data-imaginist.com/articles/guides/layout.html#controlling-guides) or [aligning plots across multiple pages](https://patchwork.data-imaginist.com/articles/guides/multipage.html).