From 4f02709e6fbcb6f8abbce43169d3d2299cb91505 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Fri, 13 Sep 2024 11:51:16 -0400 Subject: [PATCH 01/17] Add new args to `extract_body()` --- R/extract.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/extract.R b/R/extract.R index 194725c70b..844d1971bc 100644 --- a/R/extract.R +++ b/R/extract.R @@ -107,6 +107,8 @@ extract_body <- function( data, build_stage = NULL, + incl_hidden_cols = FALSE, + incl_stub_cols = FALSE, output = c("html", "latex", "rtf", "word", "grid") ) { From d7df9fddcd826b51dd9d1274cb5f6a0731429399 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Fri, 13 Sep 2024 11:51:34 -0400 Subject: [PATCH 02/17] Add args to roxygen text --- R/extract.R | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/R/extract.R b/R/extract.R index 844d1971bc..2d95b7d560 100644 --- a/R/extract.R +++ b/R/extract.R @@ -86,6 +86,23 @@ #' value for `build_stage` then the entire build for the table body (i.e., up #' to and including the `"footnotes_attached"` stage) will be performed before #' returning the data frame. +#' +#' @param incl_hidden_cols *Should hidden columns be included?* +#' +#' `scalar` // *default:* `FALSE` +#' +#' Certain columns may be hidden from final display via [cols_hide()]. By +#' default, those columns won't be part of the extracted data frame. However, +#' we can choose to include them by using `incl_hidden_cols = TRUE`. +#' +#' @param incl_stub_cols *Should stub columns be included?* +#' +#' `scalar` // *default:* `FALSE` +#' +#' Any stub columns in the **gt** object (which may consist of a grouping +#' column and a column for row labels) are not included in the extracted data +#' frame. However, we can opt for their inclusion by using +#' `incl_stub_cols = TRUE`. #' #' @param output *Output format* #' From 3c13367f04f84dde68303e882a462f39af496ca8 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 24 Sep 2024 20:46:33 -0400 Subject: [PATCH 03/17] Modify default value of `incl_stub_cols` --- R/extract.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/extract.R b/R/extract.R index 2d95b7d560..53b90dbade 100644 --- a/R/extract.R +++ b/R/extract.R @@ -97,7 +97,7 @@ #' #' @param incl_stub_cols *Should stub columns be included?* #' -#' `scalar` // *default:* `FALSE` +#' `scalar` // *default:* `TRUE` #' #' Any stub columns in the **gt** object (which may consist of a grouping #' column and a column for row labels) are not included in the extracted data @@ -125,7 +125,7 @@ extract_body <- function( data, build_stage = NULL, incl_hidden_cols = FALSE, - incl_stub_cols = FALSE, + incl_stub_cols = TRUE, output = c("html", "latex", "rtf", "word", "grid") ) { From 9645c608e3a539b75a8899702176bdacec9e7fb3 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 24 Sep 2024 20:47:38 -0400 Subject: [PATCH 04/17] Update docs for `extract_body()` --- R/extract.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/extract.R b/R/extract.R index 53b90dbade..472810c8f7 100644 --- a/R/extract.R +++ b/R/extract.R @@ -100,9 +100,9 @@ #' `scalar` // *default:* `TRUE` #' #' Any stub columns in the **gt** object (which may consist of a grouping -#' column and a column for row labels) are not included in the extracted data -#' frame. However, we can opt for their inclusion by using -#' `incl_stub_cols = TRUE`. +#' column and a column for row labels) are included in the extracted data for +#' clarity but clearly marked with the names `"::group_id::"` and +#' `"::rowname::"`. We can exclude them by setting `incl_stub_cols = FALSE`. #' #' @param output *Output format* #' From 09c66c6cf4e0e5c0b499b87558246ead46a8b8c6 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 24 Sep 2024 20:48:09 -0400 Subject: [PATCH 05/17] Modify internal logic of `extract_body()` --- R/extract.R | 155 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 144 insertions(+), 11 deletions(-) diff --git a/R/extract.R b/R/extract.R index 472810c8f7..b0a11ec14a 100644 --- a/R/extract.R +++ b/R/extract.R @@ -135,40 +135,131 @@ extract_body <- function( # Ensure that `output` is matched correctly to one option output <- rlang::arg_match(output) - data <- dt_body_build(data = data) + # Generate vector of columns to include in output + if (isTRUE(incl_hidden_cols)) { + + boxhead_df <- dt_boxhead_get(data = data) + + included_cols <- + boxhead_df$var[boxhead_df$type %in% c("default", "hidden")] + + } else { + included_cols <- dt_boxhead_get_vars_default(data = data) + } + + # If there are any stub columns, get the column names for that component + group_col <- dt_boxhead_get_vars_groups(data = data) + if (is.na(group_col)) { + group_col <- NULL + } + + rowname_col <- dt_boxhead_get_var_stub(data = data) + if (is.na(rowname_col)) { + rowname_col <- NULL + } + stub_cols <- c(group_col, rowname_col) + + if (isTRUE(incl_stub_cols)) { + + # Add stub columns to `included_cols`, if any are present; and deduplicate + included_cols <- unique(c(stub_cols, included_cols)) + } + + data <- dt_body_build(data = data) + if (identical(build_stage, "init")) { - return(data[["_body"]]) + + out_df <- + assemble_body_extract( + data = data, + included_cols = included_cols, + incl_stub_cols = incl_stub_cols, + group_col = group_col, + rowname_col = rowname_col + ) + + return(out_df) } data <- render_formats(data = data, context = output) if (identical(build_stage, "fmt_applied")) { - return(data[["_body"]]) + + out_df <- + assemble_body_extract( + data = data, + included_cols = included_cols, + incl_stub_cols = incl_stub_cols, + group_col = group_col, + rowname_col = rowname_col + ) + + return(out_df) } data <- render_substitutions(data = data, context = output) if (identical(build_stage, "sub_applied")) { - return(data[["_body"]]) + + out_df <- + assemble_body_extract( + data = data, + included_cols = included_cols, + incl_stub_cols = incl_stub_cols, + group_col = group_col, + rowname_col = rowname_col + ) + + return(out_df) } data <- migrate_unformatted_to_output(data = data, context = output) if (identical(build_stage, "unfmt_included")) { - return(data[["_body"]]) + + out_df <- + assemble_body_extract( + data = data, + included_cols = included_cols, + incl_stub_cols = incl_stub_cols, + group_col = group_col, + rowname_col = rowname_col + ) + + return(out_df) } data <- perform_col_merge(data = data, context = output) if (identical(build_stage, "cols_merged")) { - return(data[["_body"]]) + + out_df <- + assemble_body_extract( + data = data, + included_cols = included_cols, + incl_stub_cols = incl_stub_cols, + group_col = group_col, + rowname_col = rowname_col + ) + + return(out_df) } data <- dt_body_reassemble(data = data) if (identical(build_stage, "body_reassembled")) { - return(data[["_body"]]) + + out_df <- + assemble_body_extract( + data = data, + included_cols = included_cols, + incl_stub_cols = incl_stub_cols, + group_col = group_col, + rowname_col = rowname_col + ) + + return(out_df) } data <- reorder_stub_df(data = data) @@ -178,7 +269,17 @@ extract_body <- function( data <- perform_text_transforms(data = data) if (identical(build_stage, "text_transformed")) { - return(data[["_body"]]) + + out_df <- + assemble_body_extract( + data = data, + included_cols = included_cols, + incl_stub_cols = incl_stub_cols, + group_col = group_col, + rowname_col = rowname_col + ) + + return(out_df) } data <- dt_boxhead_build(data = data, context = output) @@ -192,11 +293,43 @@ extract_body <- function( data <- resolve_footnotes_styles(data = data, tbl_type = "footnotes") data <- apply_footnotes_to_output(data = data, context = output) - if (is.null(build_stage) || identical(build_stage, "footnotes_attached")) { - return(data[["_body"]]) + if (is.null(build_stage) || identical(build_stage, "footnotes_attached")) { + + out_df <- + assemble_body_extract( + data = data, + included_cols = included_cols, + incl_stub_cols = incl_stub_cols, + group_col = group_col, + rowname_col = rowname_col + ) } - data[["_body"]] + out_df +} + +assemble_body_extract <- function( + data, + included_cols, + incl_stub_cols, + group_col, + rowname_col +) { + + out_df <- data[["_body"]][, included_cols] + + if (isTRUE(incl_stub_cols)) { + + if (!is.null(group_col)) { + names(out_df)[names(out_df) == group_col] <- "::group_id::" + } + + if (!is.null(rowname_col)) { + names(out_df)[names(out_df) == rowname_col] <- "::rowname::" + } + } + + out_df } # extract_summary() ------------------------------------------------------------ From 1f15ff1b434f4639732718c803849e1e5709bca2 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 24 Sep 2024 20:48:12 -0400 Subject: [PATCH 06/17] Update extract_body.Rd --- man/extract_body.Rd | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/man/extract_body.Rd b/man/extract_body.Rd index 3f24108758..c776815003 100644 --- a/man/extract_body.Rd +++ b/man/extract_body.Rd @@ -7,6 +7,8 @@ extract_body( data, build_stage = NULL, + incl_hidden_cols = FALSE, + incl_stub_cols = TRUE, output = c("html", "latex", "rtf", "word", "grid") ) } @@ -32,6 +34,23 @@ value for \code{build_stage} then the entire build for the table body (i.e., up to and including the \code{"footnotes_attached"} stage) will be performed before returning the data frame.} +\item{incl_hidden_cols}{\emph{Should hidden columns be included?} + +\verb{scalar} // \emph{default:} \code{FALSE} + +Certain columns may be hidden from final display via \code{\link[=cols_hide]{cols_hide()}}. By +default, those columns won't be part of the extracted data frame. However, +we can choose to include them by using \code{incl_hidden_cols = TRUE}.} + +\item{incl_stub_cols}{\emph{Should stub columns be included?} + +\verb{scalar} // \emph{default:} \code{TRUE} + +Any stub columns in the \strong{gt} object (which may consist of a grouping +column and a column for row labels) are included in the extracted data for +clarity but clearly marked with the names \code{"::group_id::"} and +\code{"::rowname::"}. We can exclude them by setting \code{incl_stub_cols = FALSE}.} + \item{output}{\emph{Output format} \verb{singl-kw:[html|latex|rtf|word]} // \emph{default:} \code{"html"} From 6533affbf30ab2cbc1f02954c0b5fa302feb9d1c Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 24 Sep 2024 20:48:47 -0400 Subject: [PATCH 07/17] Update test-extract_body.R --- tests/testthat/test-extract_body.R | 397 +++++++++++++++++++++-------- 1 file changed, 297 insertions(+), 100 deletions(-) diff --git a/tests/testthat/test-extract_body.R b/tests/testthat/test-extract_body.R index db65f0babe..61ee5eccea 100644 --- a/tests/testthat/test-extract_body.R +++ b/tests/testthat/test-extract_body.R @@ -56,8 +56,10 @@ test_that("Extraction of the table body works well", { expect_true(all(is.na(tbl_body_1_1 %>% unlist() %>% unname()))) expect_named( tbl_body_1_1, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "labels", "num_1", "num_2", "int_1", "int_2", + "sci_2", "ltr_1", "group", "sci_1" + ) ) tbl_body_1_2 <- gt_tbl_1 %>% extract_body(build_stage = "fmt_applied") @@ -103,16 +105,16 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_1_2, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "labels", "num_1", "num_2", "int_1", "int_2", + "sci_2", "ltr_1", "group", "sci_1" + ) ) tbl_body_1_3 <- gt_tbl_1 %>% extract_body(build_stage = "sub_applied") expect_true(all(is.na(tbl_body_1_3[["labels"]]))) expect_true(all(is.na(tbl_body_1_3[["num_2"]]))) expect_true(all(is.na(tbl_body_1_3[["ltr_1"]]))) - expect_true(all(is.na(tbl_body_1_3[["ltr_2"]]))) - expect_true(all(is.na(tbl_body_1_3[["ltr_3"]]))) expect_true(all(is.na(tbl_body_1_3[["group"]]))) expect_equal( tbl_body_1_3[["num_1"]], @@ -151,15 +153,15 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_1_3, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "labels", "num_1", "num_2", "int_1", "int_2", + "sci_2", "ltr_1", "group", "sci_1" + ) ) tbl_body_1_4 <- gt_tbl_1 %>% extract_body(build_stage = "unfmt_included") expect_equal(tbl_body_1_4[["labels"]], tbl[["labels"]]) expect_equal(tbl_body_1_4[["ltr_1"]], tbl[["ltr_1"]]) - expect_equal(tbl_body_1_4[["ltr_2"]], tbl[["ltr_2"]]) - expect_equal(tbl_body_1_4[["ltr_3"]], tbl[["ltr_3"]]) expect_equal( tbl_body_1_4[["num_1"]], c("int:0", "int:74", "NA", "int:0", "big", "int:0", "int:84") @@ -201,14 +203,14 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_1_4, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "labels", "num_1", "num_2", "int_1", "int_2", + "sci_2", "ltr_1", "group", "sci_1" + ) ) tbl_body_1_5 <- gt_tbl_1 %>% extract_body(build_stage = "cols_merged") expect_equal(tbl_body_1_5[["labels"]], tbl[["labels"]]) - expect_equal(tbl_body_1_5[["ltr_2"]], tbl[["ltr_2"]]) - expect_equal(tbl_body_1_5[["ltr_3"]], tbl[["ltr_3"]]) expect_equal( tbl_body_1_5[["num_1"]], c("int:0", "int:74", "NA", "int:0", "big", "int:0", "int:84") @@ -254,14 +256,14 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_1_5, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "labels", "num_1", "num_2", "int_1", "int_2", + "sci_2", "ltr_1", "group", "sci_1" + ) ) tbl_body_1_6 <- gt_tbl_1 %>% extract_body(build_stage = "body_reassembled") expect_equal(tbl_body_1_6[["labels"]], tbl[["labels"]]) - expect_equal(tbl_body_1_6[["ltr_2"]], tbl[["ltr_2"]]) - expect_equal(tbl_body_1_6[["ltr_3"]], tbl[["ltr_3"]]) expect_equal( tbl_body_1_6[["num_1"]], c("int:0", "int:74", "NA", "int:0", "big", "int:0", "int:84") @@ -307,14 +309,14 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_1_6, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "labels", "num_1", "num_2", "int_1", "int_2", + "sci_2", "ltr_1", "group", "sci_1" + ) ) tbl_body_1_7 <- gt_tbl_1 %>% extract_body(build_stage = "text_transformed") expect_equal(tbl_body_1_7[["labels"]], tbl[["labels"]]) - expect_equal(tbl_body_1_7[["ltr_2"]], tbl[["ltr_2"]]) - expect_equal(tbl_body_1_7[["ltr_3"]], tbl[["ltr_3"]]) expect_equal( tbl_body_1_7[["num_1"]], c("int:0", "int:74", "NA", "int:0", "big", "int:0", "int:84 _84") @@ -360,8 +362,10 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_1_7, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "labels", "num_1", "num_2", "int_1", "int_2", + "sci_2", "ltr_1", "group", "sci_1" + ) ) tbl_body_1_8 <- gt_tbl_1 %>% extract_body(build_stage = "footnotes_attached") @@ -373,8 +377,6 @@ test_that("Extraction of the table body works well", { "C", "D", "E", "F", "G" ) ) - expect_equal(tbl_body_1_8[["ltr_2"]], tbl[["ltr_2"]]) - expect_equal(tbl_body_1_8[["ltr_3"]], tbl[["ltr_3"]]) expect_equal( tbl_body_1_8[["num_1"]], c("int:0", "int:74", "NA", "int:0", "big", "int:0", "int:84 _84") @@ -427,8 +429,10 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_1_8, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "labels", "num_1", "num_2", "int_1", "int_2", + "sci_2", "ltr_1", "group", "sci_1" + ) ) tbl_body_1_8_b <- gt_tbl_1 %>% extract_body() @@ -440,8 +444,6 @@ test_that("Extraction of the table body works well", { "C", "D", "E", "F", "G" ) ) - expect_equal(tbl_body_1_8_b[["ltr_2"]], tbl[["ltr_2"]]) - expect_equal(tbl_body_1_8_b[["ltr_3"]], tbl[["ltr_3"]]) expect_equal( tbl_body_1_8_b[["num_1"]], c("int:0", "int:74", "NA", "int:0", "big", "int:0", "int:84 _84") @@ -494,12 +496,14 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_1_8_b, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "labels", "num_1", "num_2", "int_1", "int_2", + "sci_2", "ltr_1", "group", "sci_1" + ) ) - # Create a similar gt table to the first, this time using row groups - # and a stub + # Create a similar gt table to the first, this time using + # row groups and a stub gt_tbl_2 <- tbl %>% gt(rowname_col = "labels", groupname_col = "group") %>% @@ -539,17 +543,15 @@ test_that("Extraction of the table body works well", { expect_true(all(is.na(tbl_body_2_1 %>% unlist() %>% unname()))) expect_named( tbl_body_2_1, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "::group_id::", "::rowname::", "num_1", "num_2", + "int_1", "int_2", "sci_2", "ltr_1", "sci_1" + ) ) tbl_body_2_2 <- gt_tbl_2 %>% extract_body(build_stage = "fmt_applied") - expect_true(all(is.na(tbl_body_2_2[["labels"]]))) expect_true(all(is.na(tbl_body_2_2[["num_2"]]))) expect_true(all(is.na(tbl_body_2_2[["ltr_1"]]))) - expect_true(all(is.na(tbl_body_2_2[["ltr_2"]]))) - expect_true(all(is.na(tbl_body_2_2[["ltr_3"]]))) - expect_true(all(is.na(tbl_body_2_2[["group"]]))) expect_equal( tbl_body_2_2[["num_1"]], c("int:0", "int:74", NA, "int:0", "int:500", "int:0", "int:84") @@ -586,17 +588,15 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_2_2, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "::group_id::", "::rowname::", "num_1", "num_2", + "int_1", "int_2", "sci_2", "ltr_1", "sci_1" + ) ) tbl_body_2_3 <- gt_tbl_2 %>% extract_body(build_stage = "sub_applied") - expect_true(all(is.na(tbl_body_2_3[["labels"]]))) expect_true(all(is.na(tbl_body_2_3[["num_2"]]))) expect_true(all(is.na(tbl_body_2_3[["ltr_1"]]))) - expect_true(all(is.na(tbl_body_2_3[["ltr_2"]]))) - expect_true(all(is.na(tbl_body_2_3[["ltr_3"]]))) - expect_true(all(is.na(tbl_body_2_3[["group"]]))) expect_equal( tbl_body_2_3[["num_1"]], c("int:0", "int:74", NA, "int:0", "big", "int:0", "int:84") @@ -634,15 +634,14 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_2_3, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "::group_id::", "::rowname::", "num_1", "num_2", + "int_1", "int_2", "sci_2", "ltr_1", "sci_1" + ) ) tbl_body_2_4 <- gt_tbl_2 %>% extract_body(build_stage = "unfmt_included") - expect_equal(tbl_body_2_4[["labels"]], tbl[["labels"]]) expect_equal(tbl_body_2_4[["ltr_1"]], tbl[["ltr_1"]]) - expect_equal(tbl_body_2_4[["ltr_2"]], tbl[["ltr_2"]]) - expect_equal(tbl_body_2_4[["ltr_3"]], tbl[["ltr_3"]]) expect_equal( tbl_body_2_4[["num_1"]], c("int:0", "int:74", "NA", "int:0", "big", "int:0", "int:84") @@ -684,14 +683,13 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_2_4, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "::group_id::", "::rowname::", "num_1", "num_2", + "int_1", "int_2", "sci_2", "ltr_1", "sci_1" + ) ) tbl_body_2_5 <- gt_tbl_2 %>% extract_body(build_stage = "cols_merged") - expect_equal(tbl_body_2_5[["labels"]], tbl[["labels"]]) - expect_equal(tbl_body_2_5[["ltr_2"]], tbl[["ltr_2"]]) - expect_equal(tbl_body_2_5[["ltr_3"]], tbl[["ltr_3"]]) expect_equal( tbl_body_2_5[["num_1"]], c("int:0", "int:74", "NA", "int:0", "big", "int:0", "int:84") @@ -737,23 +735,13 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_2_5, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "::group_id::", "::rowname::", "num_1", "num_2", + "int_1", "int_2", "sci_2", "ltr_1", "sci_1" + ) ) tbl_body_2_6 <- gt_tbl_2 %>% extract_body(build_stage = "body_reassembled") - expect_equal( - tbl_body_2_6[["labels"]], - c("A", "B", "E", "G", "C", "D", "F") - ) - expect_equal( - tbl_body_2_6[["ltr_2"]], - c("a", "b", "e", "g", "c", "d", "f") - ) - expect_equal( - tbl_body_2_6[["ltr_3"]], - c("a", "b", "e", "g", "c", "d", "f") - ) expect_equal( tbl_body_2_6[["num_1"]], c("int:0", "int:74", "big", "int:84", "NA", "int:0", "int:0") @@ -798,23 +786,13 @@ test_that("Extraction of the table body works well", { ) expect_equal( colnames(tbl_body_2_6), - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "::group_id::", "::rowname::", "num_1", "num_2", + "int_1", "int_2", "sci_2", "ltr_1", "sci_1" + ) ) tbl_body_2_7 <- gt_tbl_2 %>% extract_body(build_stage = "text_transformed") - expect_equal( - tbl_body_2_7[["labels"]], - c("A", "B", "E", "G", "C", "D", "F") - ) - expect_equal( - tbl_body_2_7[["ltr_2"]], - c("a", "b", "e", "g", "c", "d", "f") - ) - expect_equal( - tbl_body_2_7[["ltr_3"]], - c("a", "b", "e", "g", "c", "d", "f") - ) expect_equal( tbl_body_2_7[["num_1"]], c("int:0", "int:74", "big", "int:84 _84", "NA", "int:0", "int:0") @@ -859,23 +837,13 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_2_7, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "::group_id::", "::rowname::", "num_1", "num_2", + "int_1", "int_2", "sci_2", "ltr_1", "sci_1" + ) ) tbl_body_2_8 <- gt_tbl_2 %>% extract_body(build_stage = "footnotes_attached") - expect_equal( - tbl_body_2_8[["labels"]], - c("A", "B", "E", "G", "C", "D", "F") - ) - expect_equal( - tbl_body_2_8[["ltr_2"]], - c("a", "b", "e", "g", "c", "d", "f") - ) - expect_equal( - tbl_body_2_8[["ltr_3"]], - c("a", "b", "e", "g", "c", "d", "f") - ) expect_equal( tbl_body_2_8[["num_1"]], c("int:0", "int:74", "big", "int:84 _84", "NA", "int:0", "int:0") @@ -927,7 +895,236 @@ test_that("Extraction of the table body works well", { ) expect_named( tbl_body_2_8, - c("labels", "num_1", "num_2", "int_1", "int_2", "sci_2", "ltr_1", - "ltr_2", "ltr_3", "group", "sci_1") + c( + "::group_id::", "::rowname::", "num_1", "num_2", + "int_1", "int_2", "sci_2", "ltr_1", "sci_1" + ) ) }) + +test_that("Extraction of the table body works with variation in arguments", { + + # + # Inclusion of stub, don't show hidden columns + # + + # Extract body from simple table + exibble %>% + gt() %>% + extract_body() %>% + expect_snapshot() + + # Extract body from table with row labels and row groups + exibble %>% + gt(rowname_col = "row", groupname_col = "group") %>% + extract_body() %>% + expect_snapshot() + + # Extract body from table with row labels + exibble %>% + gt(rowname_col = "row") %>% + extract_body() %>% + expect_snapshot() + + # Extract body from table with row groups + exibble %>% + gt(groupname_col = "group") %>% + extract_body() %>% + expect_snapshot() + + # w/ hidden columns: Extract body from simple table with hidden columns + exibble %>% + gt() %>% + cols_hide(columns = matches("date")) %>% + extract_body() %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row labels and row groups + exibble %>% + gt(rowname_col = "row", groupname_col = "group") %>% + cols_hide(columns = matches("date")) %>% + extract_body() %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row labels + exibble %>% + gt(rowname_col = "row") %>% + cols_hide(columns = matches("date")) %>% + extract_body() %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row groups + exibble %>% + gt(groupname_col = "group") %>% + cols_hide(columns = matches("date")) %>% + extract_body() %>% + expect_snapshot() + + # + # Exclude display of stub columns, don't show hidden columns + # + + # Extract body from simple table + exibble %>% + gt() %>% + extract_body(incl_stub_cols = FALSE) %>% + expect_snapshot() + + # Extract body from table with row labels and row groups (don't include stub) + exibble %>% + gt(rowname_col = "row", groupname_col = "group") %>% + extract_body(incl_stub_cols = FALSE) %>% + expect_snapshot() + + # Extract body from table with row labels (don't include stub) + exibble %>% + gt(rowname_col = "row") %>% + extract_body(incl_stub_cols = FALSE) %>% + expect_snapshot() + + # Extract body from table with row groups (don't include stub) + exibble %>% + gt(groupname_col = "group") %>% + extract_body(incl_stub_cols = FALSE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from simple table with hidden columns + exibble %>% + gt() %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_stub_cols = FALSE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row labels and row groups + exibble %>% + gt(rowname_col = "row", groupname_col = "group") %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_stub_cols = FALSE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row labels + exibble %>% + gt(rowname_col = "row") %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_stub_cols = FALSE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row groups + exibble %>% + gt(groupname_col = "group") %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_stub_cols = FALSE) %>% + expect_snapshot() + + # + # Inclusion of stub, *show all* hidden columns + # + + # Extract body from simple table + exibble %>% + gt() %>% + extract_body(incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # Extract body from table with row labels and row groups + exibble %>% + gt(rowname_col = "row", groupname_col = "group") %>% + extract_body(incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # Extract body from table with row labels + exibble %>% + gt(rowname_col = "row") %>% + extract_body(incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # Extract body from table with row groups + exibble %>% + gt(groupname_col = "group") %>% + extract_body(incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from simple table with hidden columns + exibble %>% + gt() %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row labels and row groups + exibble %>% + gt(rowname_col = "row", groupname_col = "group") %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row labels + exibble %>% + gt(rowname_col = "row") %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row groups + exibble %>% + gt(groupname_col = "group") %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # + # Exclude display of stub columns, *show all* hidden columns + # + + # Extract body from simple table + exibble %>% + gt() %>% + extract_body(incl_stub_cols = FALSE, incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # Extract body from table with row labels and row groups (don't include stub) + exibble %>% + gt(rowname_col = "row", groupname_col = "group") %>% + extract_body(incl_stub_cols = FALSE, incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # Extract body from table with row labels (don't include stub) + exibble %>% + gt(rowname_col = "row") %>% + extract_body(incl_stub_cols = FALSE, incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # Extract body from table with row groups (don't include stub) + exibble %>% + gt(groupname_col = "group") %>% + extract_body(incl_stub_cols = FALSE, incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from simple table with hidden columns + exibble %>% + gt() %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_stub_cols = FALSE, incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row labels and row groups + exibble %>% + gt(rowname_col = "row", groupname_col = "group") %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_stub_cols = FALSE, incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row labels + exibble %>% + gt(rowname_col = "row") %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_stub_cols = FALSE, incl_hidden_cols = TRUE) %>% + expect_snapshot() + + # w/ hidden columns: Extract body from table with row groups + exibble %>% + gt(groupname_col = "group") %>% + cols_hide(columns = matches("date")) %>% + extract_body(incl_stub_cols = FALSE, incl_hidden_cols = TRUE) %>% + expect_snapshot() +}) \ No newline at end of file From 02b8d301312837214e652f171d029254a18fbd76 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 24 Sep 2024 20:48:51 -0400 Subject: [PATCH 08/17] Create extract_body.md --- tests/testthat/_snaps/extract_body.md | 544 ++++++++++++++++++++++++++ 1 file changed, 544 insertions(+) create mode 100644 tests/testthat/_snaps/extract_body.md diff --git a/tests/testthat/_snaps/extract_body.md b/tests/testthat/_snaps/extract_body.md new file mode 100644 index 0000000000..b0c8187b56 --- /dev/null +++ b/tests/testthat/_snaps/extract_body.md @@ -0,0 +1,544 @@ +# Extraction of the table body works with variation in arguments + + Code + . + Output + # A tibble: 8 x 9 + num char fctr date time datetime currency row group + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 0~ 49.950 row_1 grp_a + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 1~ 17.950 row_2 grp_a + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 0~ 1.390 row_3 grp_a + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 1~ 65100.0~ row_4 grp_a + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 0~ 1325.810 row_5 grp_b + 6 NA fig six 2015-06-15 2018-06-06 1~ 13.255 row_6 grp_b + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 0~ NA row_7 grp_b + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 row_8 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 9 + `::group_id::` `::rowname::` num char fctr date time datetime currency + + 1 grp_a row_1 1.111e~ apri~ one 2015~ 13:35 2018-01~ 49.950 + 2 grp_a row_2 2.222e~ bana~ two 2015~ 14:40 2018-02~ 17.950 + 3 grp_a row_3 3.333e~ coco~ three 2015~ 15:45 2018-03~ 1.390 + 4 grp_a row_4 4.444e~ duri~ four 2015~ 16:50 2018-04~ 65100.0~ + 5 grp_b row_5 5.550e~ five 2015~ 17:55 2018-05~ 1325.810 + 6 grp_b row_6 NA fig six 2015~ 2018-06~ 13.255 + 7 grp_b row_7 7.770e~ grap~ seven 19:10 2018-07~ NA + 8 grp_b row_8 8.880e~ hone~ eight 2015~ 20:20 0.440 + +--- + + Code + . + Output + # A tibble: 8 x 9 + `::rowname::` num char fctr date time datetime currency group + + 1 row_1 1.111e-01 apricot one 2015-0~ 13:35 2018-01~ 49.950 grp_a + 2 row_2 2.222e+00 banana two 2015-0~ 14:40 2018-02~ 17.950 grp_a + 3 row_3 3.333e+01 coconut three 2015-0~ 15:45 2018-03~ 1.390 grp_a + 4 row_4 4.444e+02 durian four 2015-0~ 16:50 2018-04~ 65100.0~ grp_a + 5 row_5 5.550e+03 five 2015-0~ 17:55 2018-05~ 1325.810 grp_b + 6 row_6 NA fig six 2015-0~ 2018-06~ 13.255 grp_b + 7 row_7 7.770e+05 grapefruit seven 19:10 2018-07~ NA grp_b + 8 row_8 8.880e+06 honeydew eight 2015-0~ 20:20 0.440 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 9 + `::group_id::` num char fctr date time datetime currency row + + 1 grp_a 1.111e-01 apricot one 2015-~ 13:35 2018-01~ 49.950 row_1 + 2 grp_a 2.222e+00 banana two 2015-~ 14:40 2018-02~ 17.950 row_2 + 3 grp_a 3.333e+01 coconut three 2015-~ 15:45 2018-03~ 1.390 row_3 + 4 grp_a 4.444e+02 durian four 2015-~ 16:50 2018-04~ 65100.0~ row_4 + 5 grp_b 5.550e+03 five 2015-~ 17:55 2018-05~ 1325.810 row_5 + 6 grp_b NA fig six 2015-~ 2018-06~ 13.255 row_6 + 7 grp_b 7.770e+05 grapefruit seven 19:10 2018-07~ NA row_7 + 8 grp_b 8.880e+06 honeydew eight 2015-~ 20:20 0.440 row_8 + +--- + + Code + . + Output + # A tibble: 8 x 7 + num char fctr time currency row group + + 1 1.111e-01 apricot one 13:35 49.950 row_1 grp_a + 2 2.222e+00 banana two 14:40 17.950 row_2 grp_a + 3 3.333e+01 coconut three 15:45 1.390 row_3 grp_a + 4 4.444e+02 durian four 16:50 65100.000 row_4 grp_a + 5 5.550e+03 five 17:55 1325.810 row_5 grp_b + 6 NA fig six 13.255 row_6 grp_b + 7 7.770e+05 grapefruit seven 19:10 NA row_7 grp_b + 8 8.880e+06 honeydew eight 20:20 0.440 row_8 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 7 + `::group_id::` `::rowname::` num char fctr time currency + + 1 grp_a row_1 1.111e-01 apricot one 13:35 49.950 + 2 grp_a row_2 2.222e+00 banana two 14:40 17.950 + 3 grp_a row_3 3.333e+01 coconut three 15:45 1.390 + 4 grp_a row_4 4.444e+02 durian four 16:50 65100.000 + 5 grp_b row_5 5.550e+03 five 17:55 1325.810 + 6 grp_b row_6 NA fig six 13.255 + 7 grp_b row_7 7.770e+05 grapefruit seven 19:10 NA + 8 grp_b row_8 8.880e+06 honeydew eight 20:20 0.440 + +--- + + Code + . + Output + # A tibble: 8 x 7 + `::rowname::` num char fctr time currency group + + 1 row_1 1.111e-01 apricot one 13:35 49.950 grp_a + 2 row_2 2.222e+00 banana two 14:40 17.950 grp_a + 3 row_3 3.333e+01 coconut three 15:45 1.390 grp_a + 4 row_4 4.444e+02 durian four 16:50 65100.000 grp_a + 5 row_5 5.550e+03 five 17:55 1325.810 grp_b + 6 row_6 NA fig six 13.255 grp_b + 7 row_7 7.770e+05 grapefruit seven 19:10 NA grp_b + 8 row_8 8.880e+06 honeydew eight 20:20 0.440 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 7 + `::group_id::` num char fctr time currency row + + 1 grp_a 1.111e-01 apricot one 13:35 49.950 row_1 + 2 grp_a 2.222e+00 banana two 14:40 17.950 row_2 + 3 grp_a 3.333e+01 coconut three 15:45 1.390 row_3 + 4 grp_a 4.444e+02 durian four 16:50 65100.000 row_4 + 5 grp_b 5.550e+03 five 17:55 1325.810 row_5 + 6 grp_b NA fig six 13.255 row_6 + 7 grp_b 7.770e+05 grapefruit seven 19:10 NA row_7 + 8 grp_b 8.880e+06 honeydew eight 20:20 0.440 row_8 + +--- + + Code + . + Output + # A tibble: 8 x 9 + num char fctr date time datetime currency row group + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 0~ 49.950 row_1 grp_a + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 1~ 17.950 row_2 grp_a + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 0~ 1.390 row_3 grp_a + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 1~ 65100.0~ row_4 grp_a + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 0~ 1325.810 row_5 grp_b + 6 NA fig six 2015-06-15 2018-06-06 1~ 13.255 row_6 grp_b + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 0~ NA row_7 grp_b + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 row_8 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 7 + num char fctr date time datetime currency + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 02:22 49.950 + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 14:33 17.950 + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.390 + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 15:55 65100.000 + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 04:00 1325.810 + 6 NA fig six 2015-06-15 2018-06-06 16:11 13.255 + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 05:22 NA + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 + +--- + + Code + . + Output + # A tibble: 8 x 8 + num char fctr date time datetime currency group + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 02:22 49.950 grp_a + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 14:33 17.950 grp_a + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.390 grp_a + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 15:55 65100.000 grp_a + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 04:00 1325.810 grp_b + 6 NA fig six 2015-06-15 2018-06-06 16:11 13.255 grp_b + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 05:22 NA grp_b + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 8 + num char fctr date time datetime currency row + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 02:22 49.950 row_1 + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 14:33 17.950 row_2 + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.390 row_3 + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 15:55 65100.000 row_4 + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 04:00 1325.810 row_5 + 6 NA fig six 2015-06-15 2018-06-06 16:11 13.255 row_6 + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 05:22 NA row_7 + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 row_8 + +--- + + Code + . + Output + # A tibble: 8 x 7 + num char fctr time currency row group + + 1 1.111e-01 apricot one 13:35 49.950 row_1 grp_a + 2 2.222e+00 banana two 14:40 17.950 row_2 grp_a + 3 3.333e+01 coconut three 15:45 1.390 row_3 grp_a + 4 4.444e+02 durian four 16:50 65100.000 row_4 grp_a + 5 5.550e+03 five 17:55 1325.810 row_5 grp_b + 6 NA fig six 13.255 row_6 grp_b + 7 7.770e+05 grapefruit seven 19:10 NA row_7 grp_b + 8 8.880e+06 honeydew eight 20:20 0.440 row_8 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 5 + num char fctr time currency + + 1 1.111e-01 apricot one 13:35 49.950 + 2 2.222e+00 banana two 14:40 17.950 + 3 3.333e+01 coconut three 15:45 1.390 + 4 4.444e+02 durian four 16:50 65100.000 + 5 5.550e+03 five 17:55 1325.810 + 6 NA fig six 13.255 + 7 7.770e+05 grapefruit seven 19:10 NA + 8 8.880e+06 honeydew eight 20:20 0.440 + +--- + + Code + . + Output + # A tibble: 8 x 6 + num char fctr time currency group + + 1 1.111e-01 apricot one 13:35 49.950 grp_a + 2 2.222e+00 banana two 14:40 17.950 grp_a + 3 3.333e+01 coconut three 15:45 1.390 grp_a + 4 4.444e+02 durian four 16:50 65100.000 grp_a + 5 5.550e+03 five 17:55 1325.810 grp_b + 6 NA fig six 13.255 grp_b + 7 7.770e+05 grapefruit seven 19:10 NA grp_b + 8 8.880e+06 honeydew eight 20:20 0.440 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 6 + num char fctr time currency row + + 1 1.111e-01 apricot one 13:35 49.950 row_1 + 2 2.222e+00 banana two 14:40 17.950 row_2 + 3 3.333e+01 coconut three 15:45 1.390 row_3 + 4 4.444e+02 durian four 16:50 65100.000 row_4 + 5 5.550e+03 five 17:55 1325.810 row_5 + 6 NA fig six 13.255 row_6 + 7 7.770e+05 grapefruit seven 19:10 NA row_7 + 8 8.880e+06 honeydew eight 20:20 0.440 row_8 + +--- + + Code + . + Output + # A tibble: 8 x 9 + num char fctr date time datetime currency row group + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 0~ 49.950 row_1 grp_a + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 1~ 17.950 row_2 grp_a + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 0~ 1.390 row_3 grp_a + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 1~ 65100.0~ row_4 grp_a + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 0~ 1325.810 row_5 grp_b + 6 NA fig six 2015-06-15 2018-06-06 1~ 13.255 row_6 grp_b + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 0~ NA row_7 grp_b + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 row_8 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 9 + `::group_id::` `::rowname::` num char fctr date time datetime currency + + 1 grp_a row_1 1.111e~ apri~ one 2015~ 13:35 2018-01~ 49.950 + 2 grp_a row_2 2.222e~ bana~ two 2015~ 14:40 2018-02~ 17.950 + 3 grp_a row_3 3.333e~ coco~ three 2015~ 15:45 2018-03~ 1.390 + 4 grp_a row_4 4.444e~ duri~ four 2015~ 16:50 2018-04~ 65100.0~ + 5 grp_b row_5 5.550e~ five 2015~ 17:55 2018-05~ 1325.810 + 6 grp_b row_6 NA fig six 2015~ 2018-06~ 13.255 + 7 grp_b row_7 7.770e~ grap~ seven 19:10 2018-07~ NA + 8 grp_b row_8 8.880e~ hone~ eight 2015~ 20:20 0.440 + +--- + + Code + . + Output + # A tibble: 8 x 9 + `::rowname::` num char fctr date time datetime currency group + + 1 row_1 1.111e-01 apricot one 2015-0~ 13:35 2018-01~ 49.950 grp_a + 2 row_2 2.222e+00 banana two 2015-0~ 14:40 2018-02~ 17.950 grp_a + 3 row_3 3.333e+01 coconut three 2015-0~ 15:45 2018-03~ 1.390 grp_a + 4 row_4 4.444e+02 durian four 2015-0~ 16:50 2018-04~ 65100.0~ grp_a + 5 row_5 5.550e+03 five 2015-0~ 17:55 2018-05~ 1325.810 grp_b + 6 row_6 NA fig six 2015-0~ 2018-06~ 13.255 grp_b + 7 row_7 7.770e+05 grapefruit seven 19:10 2018-07~ NA grp_b + 8 row_8 8.880e+06 honeydew eight 2015-0~ 20:20 0.440 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 9 + `::group_id::` num char fctr date time datetime currency row + + 1 grp_a 1.111e-01 apricot one 2015-~ 13:35 2018-01~ 49.950 row_1 + 2 grp_a 2.222e+00 banana two 2015-~ 14:40 2018-02~ 17.950 row_2 + 3 grp_a 3.333e+01 coconut three 2015-~ 15:45 2018-03~ 1.390 row_3 + 4 grp_a 4.444e+02 durian four 2015-~ 16:50 2018-04~ 65100.0~ row_4 + 5 grp_b 5.550e+03 five 2015-~ 17:55 2018-05~ 1325.810 row_5 + 6 grp_b NA fig six 2015-~ 2018-06~ 13.255 row_6 + 7 grp_b 7.770e+05 grapefruit seven 19:10 2018-07~ NA row_7 + 8 grp_b 8.880e+06 honeydew eight 2015-~ 20:20 0.440 row_8 + +--- + + Code + . + Output + # A tibble: 8 x 9 + num char fctr date time datetime currency row group + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 0~ 49.950 row_1 grp_a + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 1~ 17.950 row_2 grp_a + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 0~ 1.390 row_3 grp_a + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 1~ 65100.0~ row_4 grp_a + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 0~ 1325.810 row_5 grp_b + 6 NA fig six 2015-06-15 2018-06-06 1~ 13.255 row_6 grp_b + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 0~ NA row_7 grp_b + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 row_8 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 9 + `::group_id::` `::rowname::` num char fctr date time datetime currency + + 1 grp_a row_1 1.111e~ apri~ one 2015~ 13:35 2018-01~ 49.950 + 2 grp_a row_2 2.222e~ bana~ two 2015~ 14:40 2018-02~ 17.950 + 3 grp_a row_3 3.333e~ coco~ three 2015~ 15:45 2018-03~ 1.390 + 4 grp_a row_4 4.444e~ duri~ four 2015~ 16:50 2018-04~ 65100.0~ + 5 grp_b row_5 5.550e~ five 2015~ 17:55 2018-05~ 1325.810 + 6 grp_b row_6 NA fig six 2015~ 2018-06~ 13.255 + 7 grp_b row_7 7.770e~ grap~ seven 19:10 2018-07~ NA + 8 grp_b row_8 8.880e~ hone~ eight 2015~ 20:20 0.440 + +--- + + Code + . + Output + # A tibble: 8 x 9 + `::rowname::` num char fctr date time datetime currency group + + 1 row_1 1.111e-01 apricot one 2015-0~ 13:35 2018-01~ 49.950 grp_a + 2 row_2 2.222e+00 banana two 2015-0~ 14:40 2018-02~ 17.950 grp_a + 3 row_3 3.333e+01 coconut three 2015-0~ 15:45 2018-03~ 1.390 grp_a + 4 row_4 4.444e+02 durian four 2015-0~ 16:50 2018-04~ 65100.0~ grp_a + 5 row_5 5.550e+03 five 2015-0~ 17:55 2018-05~ 1325.810 grp_b + 6 row_6 NA fig six 2015-0~ 2018-06~ 13.255 grp_b + 7 row_7 7.770e+05 grapefruit seven 19:10 2018-07~ NA grp_b + 8 row_8 8.880e+06 honeydew eight 2015-0~ 20:20 0.440 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 9 + `::group_id::` num char fctr date time datetime currency row + + 1 grp_a 1.111e-01 apricot one 2015-~ 13:35 2018-01~ 49.950 row_1 + 2 grp_a 2.222e+00 banana two 2015-~ 14:40 2018-02~ 17.950 row_2 + 3 grp_a 3.333e+01 coconut three 2015-~ 15:45 2018-03~ 1.390 row_3 + 4 grp_a 4.444e+02 durian four 2015-~ 16:50 2018-04~ 65100.0~ row_4 + 5 grp_b 5.550e+03 five 2015-~ 17:55 2018-05~ 1325.810 row_5 + 6 grp_b NA fig six 2015-~ 2018-06~ 13.255 row_6 + 7 grp_b 7.770e+05 grapefruit seven 19:10 2018-07~ NA row_7 + 8 grp_b 8.880e+06 honeydew eight 2015-~ 20:20 0.440 row_8 + +--- + + Code + . + Output + # A tibble: 8 x 9 + num char fctr date time datetime currency row group + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 0~ 49.950 row_1 grp_a + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 1~ 17.950 row_2 grp_a + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 0~ 1.390 row_3 grp_a + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 1~ 65100.0~ row_4 grp_a + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 0~ 1325.810 row_5 grp_b + 6 NA fig six 2015-06-15 2018-06-06 1~ 13.255 row_6 grp_b + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 0~ NA row_7 grp_b + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 row_8 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 7 + num char fctr date time datetime currency + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 02:22 49.950 + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 14:33 17.950 + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.390 + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 15:55 65100.000 + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 04:00 1325.810 + 6 NA fig six 2015-06-15 2018-06-06 16:11 13.255 + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 05:22 NA + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 + +--- + + Code + . + Output + # A tibble: 8 x 8 + num char fctr date time datetime currency group + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 02:22 49.950 grp_a + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 14:33 17.950 grp_a + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.390 grp_a + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 15:55 65100.000 grp_a + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 04:00 1325.810 grp_b + 6 NA fig six 2015-06-15 2018-06-06 16:11 13.255 grp_b + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 05:22 NA grp_b + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 8 + num char fctr date time datetime currency row + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 02:22 49.950 row_1 + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 14:33 17.950 row_2 + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.390 row_3 + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 15:55 65100.000 row_4 + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 04:00 1325.810 row_5 + 6 NA fig six 2015-06-15 2018-06-06 16:11 13.255 row_6 + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 05:22 NA row_7 + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 row_8 + +--- + + Code + . + Output + # A tibble: 8 x 9 + num char fctr date time datetime currency row group + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 0~ 49.950 row_1 grp_a + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 1~ 17.950 row_2 grp_a + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 0~ 1.390 row_3 grp_a + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 1~ 65100.0~ row_4 grp_a + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 0~ 1325.810 row_5 grp_b + 6 NA fig six 2015-06-15 2018-06-06 1~ 13.255 row_6 grp_b + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 0~ NA row_7 grp_b + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 row_8 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 7 + num char fctr date time datetime currency + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 02:22 49.950 + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 14:33 17.950 + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.390 + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 15:55 65100.000 + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 04:00 1325.810 + 6 NA fig six 2015-06-15 2018-06-06 16:11 13.255 + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 05:22 NA + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 + +--- + + Code + . + Output + # A tibble: 8 x 8 + num char fctr date time datetime currency group + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 02:22 49.950 grp_a + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 14:33 17.950 grp_a + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.390 grp_a + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 15:55 65100.000 grp_a + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 04:00 1325.810 grp_b + 6 NA fig six 2015-06-15 2018-06-06 16:11 13.255 grp_b + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 05:22 NA grp_b + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 grp_b + +--- + + Code + . + Output + # A tibble: 8 x 8 + num char fctr date time datetime currency row + + 1 1.111e-01 apricot one 2015-01-15 13:35 2018-01-01 02:22 49.950 row_1 + 2 2.222e+00 banana two 2015-02-15 14:40 2018-02-02 14:33 17.950 row_2 + 3 3.333e+01 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.390 row_3 + 4 4.444e+02 durian four 2015-04-15 16:50 2018-04-04 15:55 65100.000 row_4 + 5 5.550e+03 five 2015-05-15 17:55 2018-05-05 04:00 1325.810 row_5 + 6 NA fig six 2015-06-15 2018-06-06 16:11 13.255 row_6 + 7 7.770e+05 grapefruit seven 19:10 2018-07-07 05:22 NA row_7 + 8 8.880e+06 honeydew eight 2015-08-15 20:20 0.440 row_8 + From 1a6f0bad012eaadf716acb81d75e448ce3730b7e Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Wed, 25 Sep 2024 10:47:51 -0400 Subject: [PATCH 09/17] Add `...` to signature Co-authored-by: olivroy <52606734+olivroy@users.noreply.github.com> --- R/extract.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/extract.R b/R/extract.R index b0a11ec14a..d2d71cfb1b 100644 --- a/R/extract.R +++ b/R/extract.R @@ -126,6 +126,7 @@ extract_body <- function( build_stage = NULL, incl_hidden_cols = FALSE, incl_stub_cols = TRUE, + ..., output = c("html", "latex", "rtf", "word", "grid") ) { From 59f2c765bb8575b0c56d7023b0af41a9e41da548 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Wed, 25 Sep 2024 10:48:13 -0400 Subject: [PATCH 10/17] Use `rlang::check_dots_empty()` Co-authored-by: olivroy <52606734+olivroy@users.noreply.github.com> --- R/extract.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/extract.R b/R/extract.R index d2d71cfb1b..de98df8409 100644 --- a/R/extract.R +++ b/R/extract.R @@ -135,6 +135,7 @@ extract_body <- function( # Ensure that `output` is matched correctly to one option output <- rlang::arg_match(output) + rlang::check_dots_empty() # Generate vector of columns to include in output if (isTRUE(incl_hidden_cols)) { From 1adb864080846cd112cfe870805239fdbce73819 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Wed, 25 Sep 2024 10:48:43 -0400 Subject: [PATCH 11/17] Update docs with `...` Co-authored-by: olivroy <52606734+olivroy@users.noreply.github.com> --- R/extract.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/extract.R b/R/extract.R index de98df8409..c558e794d6 100644 --- a/R/extract.R +++ b/R/extract.R @@ -104,6 +104,8 @@ #' clarity but clearly marked with the names `"::group_id::"` and #' `"::rowname::"`. We can exclude them by setting `incl_stub_cols = FALSE`. #' +#' @inheritParams rlang::args_dots_empty +#' #' @param output *Output format* #' #' `singl-kw:[html|latex|rtf|word]` // *default:* `"html"` From 3652706ac729ebd1e13145a28fe5bb3b7458d163 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Wed, 25 Sep 2024 10:53:30 -0400 Subject: [PATCH 12/17] Update help file using roxygen --- R/extract.R | 2 +- man/extract_body.Rd | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/R/extract.R b/R/extract.R index c558e794d6..01168c5b6f 100644 --- a/R/extract.R +++ b/R/extract.R @@ -104,7 +104,7 @@ #' clarity but clearly marked with the names `"::group_id::"` and #' `"::rowname::"`. We can exclude them by setting `incl_stub_cols = FALSE`. #' -#' @inheritParams rlang::args_dots_empty +#' @inheritParams rlang::args_dots_empty #' #' @param output *Output format* #' diff --git a/man/extract_body.Rd b/man/extract_body.Rd index c776815003..a1c3a2279b 100644 --- a/man/extract_body.Rd +++ b/man/extract_body.Rd @@ -9,6 +9,7 @@ extract_body( build_stage = NULL, incl_hidden_cols = FALSE, incl_stub_cols = TRUE, + ..., output = c("html", "latex", "rtf", "word", "grid") ) } @@ -51,6 +52,8 @@ column and a column for row labels) are included in the extracted data for clarity but clearly marked with the names \code{"::group_id::"} and \code{"::rowname::"}. We can exclude them by setting \code{incl_stub_cols = FALSE}.} +\item{...}{These dots are for future extensions and must be empty.} + \item{output}{\emph{Output format} \verb{singl-kw:[html|latex|rtf|word]} // \emph{default:} \code{"html"} From 79cd04cb5c6fefe8d35ee03c75c93fe2ec55b5e6 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Wed, 25 Sep 2024 16:06:51 -0400 Subject: [PATCH 13/17] Perform light checking of `build_stage` value --- R/extract.R | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/R/extract.R b/R/extract.R index 01168c5b6f..1188cf0ac9 100644 --- a/R/extract.R +++ b/R/extract.R @@ -135,6 +135,18 @@ extract_body <- function( # Perform input object validation stop_if_not_gt_tbl(data = data) + # If `build_stage` is given a keyword value, check that value is valid + if (!is.null(build_stage)) { + + rlang::arg_match0( + build_stage, + values = c( + "init", "fmt_applied", "sub_applied", "unfmt_included", "cols_merged", + "body_reassembled", "text_transformed", "footnotes_attached" + ) + ) + } + # Ensure that `output` is matched correctly to one option output <- rlang::arg_match(output) rlang::check_dots_empty() From eb038bc6f5d794e8333b200115b26a96097279e2 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Sat, 28 Sep 2024 15:13:42 -0400 Subject: [PATCH 14/17] Create man_extract_body_1.png --- images/man_extract_body_1.png | Bin 0 -> 161930 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/man_extract_body_1.png diff --git a/images/man_extract_body_1.png b/images/man_extract_body_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3a4eddfb2b461f74cc608e3d9dc32c9a4d598d GIT binary patch literal 161930 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 z z0P)zMeXs(uqj>mqZDt)W*ep*xfXd}wfTXyiszH)g6Y!Ih-$TSnEQFA7JOcWdb3S9A z9iS{zI$aS#3cfIG-HAJ6GSUTBcYg@7UGr5+iIL$5+q!`!=p*%TNMuC5quAr>G=KK9 zz^9Giq}cZ~@^n`;U{xKzmA0Jnj+BnDNd$v5ZnBIGCqYGD6LH1_wty*#Sj+Dt5g|hl zqJ+o_1BbfA`B;D>TKct=af>wFR8 z2gX4f$Q8FwZoRRYNQrIc&MuZ=)-}|W!jk1xGOtwQhqY^P#XN(B^Y|;rz@mJ{&RjNnR`s$}YDZ2#Yl8U}cEd+w zN;A&tB#*EjjS8;*ElXkGsZ1Dk^VKcB^YNrw%shHG<3sKeykf3LuU;ZFXhmHwp`fZu z@b(FxPolbHIkY`7AylIX$^q4WSHBDDu>~!^SpD$#jr(aHwCK*V zyEF+LmZ?1)s ziaWdywY;x${X7PpLINR}fFw6OK=i<7jZAj)?msU&&vRSPx&2C*z>0MKHG$C60>hFU zVV--bw4>j)BB(lNJG@&EJ|p#Bag)}CJwzOCh=f6QJ!!rsa$W)5vtjWTySMYx1fd|b zLxn~y&ueBSfp0!IdpRyZ5NGNhnK5RQbR(@vBP@vIp^B8@BR$J{qzoQ!AjvoSaT2Jt z_bQx5=%b^=oM~}r&Oo}9m6g~5Tx5mMJZTMet!;mmPmd_JPb-@wKA>F6T z`Cl9Rc&clpW7R=8Mk?XnZND0}hq2vziY_H_XM9bn*R!w4M;I?vJO~lmW;+w*5kQgN z$Myb-WQAk5*g2?156c_*cz)g#|1LB^cRuOz1j6*mYdV0VnkIw0J%dK7m2RiBS=vwj z%2gZ!p3}7{#FF26I?hm^L^1nb{8&%%qZwQjR1B_ju%jxqpAaKSfIHyxL>2y|3wxi$ zJB-n9{KUs=4!GGWalfCMdwCQW@8E5R`!$bOI(Z*LVB|jX=YjqrTO@kvDBL^Orlxu< z>yiV^i!dQ3;$POO09ik+%GEpD0ZtVeD{SvBGIYo7etG$K3w zt=N5iZJ=nCbGG%@#drP5`I7-jtyMtC=B>UBkOXaqW@by1SGRvwnP#t^4?&a*o3>?D z`xcPuPW8<%7x$j$E7CkBOAO7?s;3t$Zs(hAcpGbPN>zN;9H%2Ok0GsSk|)mX8DRR^ z>n(;dayH)#`tik?x1KF>UOL2xVjFiPRb8@@{4()da2f)^sd=Tvk(4ckcft9sHY*Q& z^A!9GZNkBk_hPaJVb2ymb2_bt&YpET6)!As;nk(C+{+XxEZ@#N<`E59&Le%;Oj#Jp zvnze622?1F&o#|kFy2kM8z|YTrM_e$jJGEqZ4$EfDeXYfEcH5sL{4La+-Xk=sNUBQ zZ~DGQ&V|V{pLnd6f(u!|PT(uzxVBMte|V5{*GOVxsD;^LZ{EuD$%GT!mQrwoZ6&G< zZm3UDGoiPiZ3{k+ig=${G?LtfrH%~kXwHCm)C_W^bQ1C*&R$U^aLMmEv{d5r;uV5e zwvU`~y-Kw%`AJ&Ex&?lEHDUl5jKOnw6(j-KxCEMVN-RRGH7Ezl40znUZME$>$H2Ir*8sXB&%O5Ma;XFm*I%~Y+Z8cw?!-I z)hyymrE+qT2z3r(cOuD<%byGN!uvgk`lXlX?k8snHV9F*BRmwlA-m)NVvrhj3C;k+ zRn=6uEKJ4v4%rE~KV|a@F!VJgAwh&J?C3qzDYrJ)1k;J7X-)x~eDy0I}7J=Sc+RH&|wY!#pAp zv;>4N*yWWVPUh@-MUo(>BK%^)TWtGz6=JEIOv9}k}`m*#= zVHjUL4|SM$?HllEN7qWckQ_kiU1sSA8vJ9Q3SfsVc!*uU?Cl(&9GN72!1*ffEYHuv zu&Z1=Gc@(yI9!c)b{iL#`c`tUKfX?XZ@t z1Xu^?I7`l0r8MFZ4JUkKZ7 z#?R%cQEr*+nwRNpBn7Ob35ZdrZaAM02m;QME5Zpg!1R~gFLlMz=QUEMmyJ{y8+0&9 zv{z>+WY@0n3fST5(@0%o)xPi?cNcG;t)V2pY>06VLZ?zk^q0h4hmgMsUVZ8i@bI-% ztoer=+`XRlW;c^Gn#P`-Q z6sMtkNzTTseOQr+eps~G;PgE34kBDY;DH;s0dyQ5to+3Ok3|{u8AjgChj!vUb%Tn^9F7LTawKAxz(ZT!&08v zt*5(YTVEP)K$5Tj<7tY4%)AQ{lV9oWfa}*#FD@0?o!E`b(4GAD<7Ew&XPXTJGfi@R z7i0^rh|STt2(z3-F&ErJ%rpnwKu;hn9kctbk&w1K%g41r8R8_MyU{N`H9_zg2#zQv zRdRG$a#u?;`SN;XsM_1dMm>E!!ZpLKE#T9AMdv}hqDTEEh%m(4q77=RYni2+4RP+M zth}V+%v9%a;qMKUjOGzmwF-+Yj|gUIkuhhG98 z_vxJvlwJhm;#gF))P&(eZ|{E!y4rh2;hXNheSo?+=MVBFyooI#qmNParr~^opPe4i zZsG3_G-p|Pg1A#7Ega^qGfCb1v`zk%B?sA~ocCB#c-zU zmqb+z7SElp!5#BDX*(z#s4-m->E&h^|D?51MWI>?(K>NbkSb;hch`=DEw_F6g%>j0 zic#)Neb{x$vj{q{@D?hLFw`hQJNCg5H^^*@S0QH(@bBSmDvkWo!T}+K-#Ewk**-dl z+n+EPy=Zi$Mb}{EdrRpoq78KpoRB|}T`S#({CU&WONI~io?oSF&4yH2xr2vQ@H{w9 zVIcPjODsckJyI5S5;whCt(JFf6$&$}MSU}_%4K5;!+33Nt6M|;)fYWaYTVTYY|H@j z;&=FpO94A9=K09Rng0-*TDutt40qmLRo+jVu`&dV{{x=w?~w+PlIa#RyHky>cRWKX z7xUY>JT4)|zN|fR93S3>Z<5h(O-48*AH7lxAy*0^{*I_46)zDZH0g;N&`gr(iq29~ z5xOqRqVS!`>_;Ku)mIuY`|;G;SZF-v0Y*bwie$L)yEuEsEzeo)u`>w2y%Oua7B^~D z4#r_pb!NjH)E}}X8mS5lsmJjgv)!w~(##KWPft{7p<`&yu9L4a@>NZciVs}Ia6mMd zD}}gnWn#u!aZ7Rg*%r8%+PV45)e5sUJ=dE8AJU-WY5|kep&A;l%x(^BQq13q4)8gW!EN1um~YsXr4juaP-{2-lu09bhBj zx0d~=r5MKiT+_#f(^fB~4MvT8l4Ka8w*E1;L2;D*ZWTROK!T*ql1a#m5|q`j?Pq-p zpn^uvm-i!q?@NJ0U*$zhYpxTAYwR4`dM zLo0f4_Mpl}ahf+Ahq&u0=jvd|!Jyp%MtWkJo?<_cpbaRxiBaNKFvP10Ku>1c`YT;W zf~m0uEIb^@CEwB4#;J|IyeO_Sk#-}L_qz>4-%Epn3mA4`OP;(#p*wYU=9#k z>m}ItX{J89d}tMJ!c&;Oat=X84?K7`e~;rJ`DL^m+}qzN9^J%FMgUMj#BFA@_}>L1 zl1v?bp*VYNAIJa|(}daQ}Bfz^q_kB^j`ehx(r6TzSW4TgI5!YtsIFfcfP0WWEh3w$2AM} zM{{rUAK+Um+8rQSNm90eYZ;+VL}Dcd1(aIR*;z4%g`B_9(6E?;Tie`_=x&pf*S#CTO)94^)S3m21^eu zf@oe0SE_F^#X8Ylj#WpjkKBZj(nop(BO`2pPxNH(pofGLbXLLr!+xAy;6~7 zCvyIQsUsxsPRU|l`6OA4XiD^82xVg@_YVBj4WL@g7*~}16@E!xc&b&|9ME_NY24{HTQYD`ySblEuh5>k z;GP;kGD!c^A*Dha?|G~Vh9rgpWP$GID>!tubv<~5%^gtMi1!}vKs(T5@zxSu{`Ki9 zHlAxxq_KG?z0?#(6R6)t^&XLeU0Ow)m4?-!)>c_a!-ntrk50(*N;}>Qcv3TkWHZNl*#` zyGadKnxpqEg7XxKd_LzM(>p*2d9m!riEl*8eQ9WoxaiLy#r@{X+&TN94xWkNf#9f$ zw4SzNg1BV5b|Y$gnT|VGw$69OHH1Alb0998N#7!w{oxfHbXxl>I~a$fZ!)hsrWj@K z%h@rR?c?oc+lEF5UT)h^E0O2ihUzGOs&ZfnqE+-f!>?nON!th2=GkQk=(gS>3R14| z&OhT)vjpLsnB-y}=?@wZr$Y+rUV?+P0gpC);b1r(7ZPB#s=2z6$UC)=}sb(d`Q zS4|r4;8#TB4W-mbm7_p7U_9T$#Zo5fA+{!cqo8~$bU^dDCt(jv7BWPIiT*+HMWt@) z4n(s;YkmVUgb!sI4lNDloaE6D|AA_f5a#xsdXToqBJzBKBN{dO7LxpETV`zHmT$tY zUJ^>Td7U(lrfi55GD(CN1zQot_N}=mL;Z_Z>s498HIa)vmP;cx4{HN`$6j>+MYQmf zKpi<<9w@W0kTumk=5|*9yc5;$xL*x>Xi=;Mn0MJMTm$V(6gr-wB7#9sAH2hK<3`JK z&am0x&0dHqzU(aKx0V73A^Tu$WDz*Tx8$}vZu~?$9DB5U&4fd;A@SfS#?1>Y9tsLp zLCvR*9%xfSC{zo0SV#p};^kBNI$#4%N)kstPMkUbA^-)B1yo#m)M@F(LddUW~MAybYBGXXRdQpNmZ@Xb-NVALhks5SRg%o27|!gQa@wUS)_&UCs3c zhGn^AnG=#r;%ol=6XN0)G%Et@G5g}uG?$-Co6bQ|C+M3~nf#!oFE0=E8vC_I8A%_P zR06b)Q}xc?S!?R~7YYNbi$%!{s6OsbfP<13}-;JNP)^y`EtU;&n52)r>;#WLW$xfI&LBDi|H7IQG)~3;7*!Bvji1fxI zYud&#XMSs}5lZmdpVD4~>|;ak!Mbg>}5q$LQWG7i;%g^4O6Grb72P|4Cg#-%rHFV8)F4=?KJmU6@`Nnpas= zqGuyhh{Q&y`K&XFHvQlKruqYg%upydDtm- z&JSTSDsM^HiR0#6+H;*qqN;68MndX};Iq99ilucN^4g^sZ`C7~--4QnF0PZZA#><~sHZhlM7(L^^Nv+$ z;4A~4xReyVufeEMijQ+a9&=?sAw!qu^;N2zToU4xE3=my@5mBqehY0)hU94OvlLPj zban+LK6DctlIt3GHD`M+<2a7CNe*JMf9dCjtL1$<^*41^cwIZz4~%&V!{44dT_lkE z(4ERwo)Nr&cB2dKLMY6DnzRlq_4DscLfw#xHV%2Ke8Nir=Qz(ml(8`5=I7Dsp8*C#QS83@LT594^?9_|Ps2CAx-xR)Sr0UvW zP|RFsaVhL_CJ|GjIDf&WB!ZIj5@vnc2rc?Hq$ZMw(S5FnqTq#yGdZX(nVjgoD`nd7 zlCr~EKqO5p?dQQPx@Y_JwChJ=x^JBKq}dzfeLEDc&bD^m7Y=Zdpdl_2Rho&JOh`oP zKcP5RoRzDl6C{%d%_-(^$b~AESDmm>&g1O^;3+Y~vdXFb#!O>7uo&#K?(aGyRN9>&#O0EWbx#1JCIq(W*II2hSp^a`~9bVK7cS@ali^pspeX*umI56<1XR+pSF7e~DSZm{=j;o( z4J>*$2geaw2_Yj=ArNwtcg&j$b@)IlZYO@5gto|*QpXX|uA<^veW{asY2z^t>Cl7Q z%L1b>3DDaI*c$k#Mx0}CyWm>GBOz*+y1Ihq`IB^!oBP4Y8@vV+|($O z<53MRqT4<@c8AXHPY*~Z{Q*?K5iToiL@Z;;z=DvUG&ZQ_%>ha?5IY&=FH%BR|Nc_- zlAmNuFwresPv@ld$M{%-_|{pB^{EGL)#bao-`CYX2(e!SSw?DoL`mce-rII7f>0sx z&Fe)u{d9e#>~F{EKkSaR=G>`|eHYb2nJSmGieuj3eVUB0IZxG4t-2|XAxb-z(@X`? zQ9g4Mn;^t*|4Xd-nS+o3SGl7BT0Q{ktrFu*ep_l%7)$5Y#pR!_5HF*41@|5V=%`)x zAyAG_Tauj0T)2)GCrI9F zD;-bXafj>Zy`cRZ5}=FayJgTD5Gwl%zRDBR^|Y2uYkFx45~5+VDBp~kW@XCmj_UW( zb#HT=>Z2Q-cF5}~Wb0s~s{M3X^BnGb%}-zJwz8L#Za;l#k?j7Kl;Hqx5K*-Bnz*f~ z-RJDZ&eDSNa*!uSw|**YOgu?&k;911n#VkSPobEt{NWzN0aC9Hua&dw4j;`>ilF8r znCFm~{G;mv(86}nCzNZ%xm6E$0Zn*~xx~R<$sy^cp5(>7z~&mD_1?R}Za>Y18AaJS z>?0g82M7~Ik{Mr2{P&PH(KH??`#qMr()kJw&&}DU$?@OX@g@p95iy0xCdm;iv{|e8 zn7hY_l%sj7c&lpp$Pppr)mJAdjP}i6Rb9OKQ0bXiqzDnJ;WkAsO7tf za(G}m@V`U?FOg(&9*xprMsV=K5+~ZnboD$M#{t`cR)q5q#H(?^wl0)#5Y)dw`;{4C zbbZB7-V#qH+Z7?dQ;v2x`jZcmd#~XPXwpxB@LC@*TXXZ2&hD5|RKHX|AyY~5ES-10 zq(?TBz;}>2N5k7wn7go^QRKUM?X4jp??XdG_H$79lyI#SZz{l001QM?!`S4mV1ie3=>2>0_cY|8>3sQLNd8Jj7 zKR)AymU9ItJT&sVe^Pj$*zH*>aNp|I(H-U2^K_aZQ+7~lqV|uLSP%-&C&i}1KZydT zP9b3L<%Fu6#~&jr7UseSk@-In{}kTO5Y$<4EB^78L{KS#!gKb||NgHOp1%^IYd4`E z_E!pdO^-i8cr6xCTRb1TB#Z_hAE`A0cc8BDe~vxxQCfK0Va3|nqZbq+)b(#V$waY`6a44NVjtIbz7)&c zUihts42u;=5bG_jV@JBU2abnioIw76riDl{tfetJ@+Xgubm|m3e6;Gsmz%$zEkOJ@ zq*GeFlD5@*n4InSpLKr(12koYjOsAHZRL?BfBo1=hpC8FOPr9&Km~x(u<+=BDN2cG@vvFaF>{wmarVy)0e?-rust&G#F5b0>`M5PG5&0qN zZh4g}AFEhVS&qWQVWjlNVd{`Ob&T*o`)6Z1KV^b83WW+JWaEJhDEYJrwd0$8?^>u> z{H0wCD4MrVze2_J5DQWl<}~i>>k1V#TSx&Haizh6o2~^9M7E4|OCT!bALg-^8oj2L zf&cTf97h{Le*yda^U{|!fc#3=f>sje)zV%SotlhGQ$+v2TrPhCv}(W&(h7io4vPLZ5?$+61Cy#iKUz)Q zY&QdU_Zp-Ww{SXJ5J4}(_0ha~L^gc{`mrtkbLhm2*T4(vt&aIJRW>d>=C4 z>kP9^5FKvfLL_2-=W(IVV)(d4Z^YE>(d^Bc2%r6B4UB~P=sU>$E)TNp`cM{P<|i3( z7`9yAMzA?w!8sWRVBu04#&JgPAtOr;KoC46m)~9Q3F)bCE+08ur(XJ}oVl~e zdwll3pF7sQ;<~QYxoE!WRKC_d+f~1fwD3V%oa!JB|K3`U1!s5sQ-v%k;hy@1#R;-n zn`qGNEf&$w-U9YRf|iE{*ZALF;1r+GSd7d%u zmKb|DTn>ByYRhxZbhg03sVSs9bj89S8^K+@+S>T)(4r&cO1kLB_W|dHhnp>Yf&J?@ zD9aBPYD@RpPoSlSNkO);coLetYi>fIAHX%E?{d+VYCud#h=>xJydu&m9cn^8L!eg? zAFI$wsZbkw#qi<-fO)?(!6$-ZB{j2x z94KYHa+o9}t%DE=>ca0;`PayCnuT;vlCh?sq}4_c{ZC8a6?%av`N;dpR@j+i2<(jE zC_!Z83C>Yhdd>;k^^vHijsqT-@s7%8I7{b+1K$<0%h!Aj4thB=k6z zKHzOp#>j1J?mtVYRa7%ms4N|`D_+a@ae(BoHcH; ztFI$<-2yfYx*BMS#h?9t=eJwqUwQpgm(b&Bo*7DdiRB_`cd#7Ge#t^8*@g0U2rtCtj z*aMX+Y9C;MrDZ~CM+Y=qP9oYs(1!_VKg2IH0TVU$Em+E*uk@ucmA`Qe~H(}U9-Jo!OB8G zf@I_Ln;E(Mt&UdSLLliMQ1lnwI;8S^_JQ5!b!2;_+B{RI&t!kSs1hH#H(A>%4VsHC zS=doZ*eyq%<2<%Zxy+}{*%=`2bD6ZPuFQ_p>h1o1FR(#tZXG=*Z|wBR2yZeo|HRwR zO#cD=`!AG-@H%nMTVH5PqH!8Bs3-g=dAV`(=PWLf>b08LkhgW=>?@|O4Xq=1FW($} zkGCrOP}nD%fVOT%*!MiPAQkhKPsqhXmZoXN6jIgrK8mFN=s@gICVD12uwAc$$uHZ$ zaRc)r#SyU`UuvSSVgVlUP<#H$SVMdfjUc>4PXPyoRALkA?+sb{vM#>3QmEX#>}?n6 zqt>f^lV|v|6hP;f9oJ9Nux~_ubpEJy!|j1z=O&z2gDczT19zZ2(adgSM7|t#{eFfT zC&8#t&~X{)<75zRuRr){Gwg+MJoi~z%TrY;=&dUea6x?CSe=A~v>y$l3L!!D!=T0& zRCH@x?)=zt6DR$TsLRON3-58plhEdnpmsNfVpCBi7HikTr@6C~$bQCh}>Zz69X+6o?sFeykUHs3Q zlOW^tLWRpR=N4z(7?wAA#<}XsA^VVXa&7D@L9D1=0|3h_2e}!9vqiI=xZa>+2no%T zNI9mkfpy@fU9R&Iif;1i9SrF^*m6rT*srw?pW}bcjigb#3T%A3>Uqt-Qer8#~kE3LIgsN{z=bDUUxkl%+)XFmBO3QbjGxD3T z42vD%YJ`5aeF8f@@>grI6W;v`Wf7c5WiEY19G)sSd~bZA`xJNHba2{BXX!(yw>Jyy zY3eaavo{SyZL<^#yt=f!b}m`rEV3_NZ;`hfwl^^CP8%I*xS4idX>a2)Ubhj2;q!@p zglyTrt6^DqWGi!3!jDp+1B0IK%oq5_N?2z_lhL0H9M^ z866GnGv|wsa_>1Tq%Dvy>wWYge887{s}3E`JlDLGj2(n=-?aB3L;ywh$vx|Y3eOEc(~ZyRJFEbphDPJz zaJ8kZSliT^JAd8#7z95lJre!i3Oo_14RcFA8ZHs}dFVyiR~)r*RP-sF(@T_svCS_6 zT6wOPzHGYnm~dQ<=I>$g?}n1qGbDM-S*vPB=%syxrd7ey7V zKklCX286NalJaGh&AFsYnm2lk?oMFFccx$4{xF7hi#YiR=95SsxJ~%C8l>(Y^8kX) zIC`>2#e=eh;7bzEZvHHVO27*43s$l!E8n?{p~wF>^H8i(}fgfe-P~MbSqQ z%2@{bJqMe3>=j>}wvb_xHlHbTgr#c&}maBr=WVd!tZnc`_VvZ!Ex z!gJeEi%;k@9l zQx9tvgUoMLGT*3VK9LU0KLz}k&f1Anz=P{ERJI!}19K)>lqCP2FZ6v3T*cGvQ1AO7UI3(_{WqBmSc!(>L#oGj2EOn@};vyyLhL8PdLJOIz)N^jt!)V_}N*j{@#h z^9L^dM$!JaBtWbg1|s+YxpMzWT5OUo2`Lh)?I?QvN^6C&)T z{gS>I^ycsNTwrny*xo`|w~2dM7QUOJ5)-nrhSZW~%RE5Nq9`DmF!nD9>1wy-s=P`uUO3QHt}w<&KO68N1n zHRF#1Fh@)y=GGA_qbkqmf1Uw@cfiZ+jVXvvb|eOwD=fJHFv-};;~uGS;`N#Ak(Ldx z0TgPo4VV++kGAPg?GBvPZR7H3<~;GvIlwqZmL`*|g$2i%)Sp}U1Xrq7?yX2Ln9EFr zpBk<|Jy*7`TkHF*F8A_Rf9CyaaSWYP39sy*H!Xb2<-`wc(+2g`cbB*&Wpd1gmqf3X z19tSQs+L}uo8$shRD^S0eSI~loVd@;YW^s>PX>8wsZDGp1zw3J!I|C}yrivH_7n|V z78{dRv+q+TJ|uSHgJxXU@zCoKuFBGf^QfE@BW+$fa_s$+vWs(pyw7aju-lus17|*D z;IIMycQiL)eRq+_=!JO)TG}XPBb#7q%+p*diEO8L^J*B|9HFdaOSJY(MEEUL5TPh0 zO+Vq&sh27H0K+Gs5fM*Bx-Ql^#+|1TOYQQz_KcdD@Cq070WjqVJ%&;kIUTs;dwvqb z!$6kww6JfA&r@uM2G9zrd3?1wnmRS-na3wLj7iscvd>|$F*8TgD9 zKm8z(J7?9xeFUj$FYhHkLHo+pY7S*5|CL9DefoEki}tp_V0_|gvY|ibdM$=dw$Q;1 zA*AVF*EYKeh%ytKSvA7lU^(p8=f?>iNKrFky0aNAHOLBjkvQX7lFf+kfOHMzBva3W z`3YzHqLM3{9BMI**QO@Oyjad!k-y_nOM3cH4;C61rO=dc<6h8_ql;)NUIeIFzvK81 z2*oAUyeS@uW!@8Y8W0&F-X(8aesefc_HUVdfke!dzm)Yq@`<}d$4k6megwK3fAvAN zEhbO>Oz0#h&wz3Dt8n*bo%4*3?%Nk5pb?YjJ#NcRe7&s{M_J`FF4Y`ecx1|tj6mnG z&i&LZ_OIPg?g}-N4I3Tta}?Z-dv*Q3ayj9a6r-arYvWtFmON;hl}qEO$=|#VvIM|W z6TlS4seKYEBMlv!3&E;`9gg)L#<4%1c0arCptI;*yk$q|u zCv%6ml_5tk$E?osjR2<5<79n1mT|5Nfi4{q9Dd))+qwF#QwNL_xi7uE7H&X6r;GO0 zg{PK6lr!dnRmDLm zG$&Z^iNu6NbAb@`krQ%dc)RAAAoTDMzoyMAhK2_RGkRRPujEiHuus4A#|D(3PygIF7fNB)qcIA zAMG_+waM^|`nBL-kV;6TjU%U6sP00i{y>gIEn2+#dpjskPWp8EZ-0qOT3wuWyrV01 z5u3nEJDe_-z~%`gYd*^TrLgUH^;vSs`$p!I|^||-)?gV zI4hYd(RgoE`Gd`~2b1>SxDr@rFRP`YdvSWRvc#|2fxvvP?{Pfn!EHPrf}}6>kBzDj ze)50gi}UPVEokwvB55>4{3bo>_F0VXkg`YA1tMYin0GL(hHbW~KVbCSej{?(;+4w9 z4u!Exi-a4Si2e}L%1Zso@~1Xxny4?&M_Y@bTHbxS@k9vWxUysa!(ZvB+G@;_q(R$eoo7t0*n-(u?x@5iPvFkrg(o_5CK}hYJPb zEo45s_O;>Fi>xiO^Wp9;rQdG;21ow{{_=~y$3ll|X1pS3ZC>^3u%ND<0Sa15-aPF1g0nu3o=$r7HRcUZyg! zyGsdW*h!z*i$R6MKBJeyqmQ2zk}Wd9`MBz)d~e2_CaQtvi+?%flG~1XTZN4`t?7I9 zM$=5ae+jBgdA7JMmkXF9|ItS|$YUd2?sG+}y@{$y_4zn{a_Y)2f_R^fQ*qw8aN96Bq-Jw@e7wwy z@c!jl9jUW=H;N5%%O9LGYF}eWb%O?8CzMME3jQI!xfEunbzd7!1vMV-SH;@ATu|&! zwi<3k4a1F?9xkf)_$@o43Z`2~80kt+9%8^5GY6Rw9YEK9=216}ad%<3$9|~n7a(vK zmR7As?>A*L>z8N+Iq=P`O8^-C_<}0rI63>}rI+KKZkO=T1o`VybtM|7hzO+`9fi^v zK}IMhMKxZIkn|aIi>e|THFprs91Sfa*Reexx4!Km-Yc80%js$d?tOCr{(&yOxyKX` zsf5@pfJjYvS5w7LF)d6Og@##|V+A*;{asT??47pu>nINiX<@RRJ*9&s_ zh}Qy#Mj$i_{XTZ?Q{bi6>vTJgK>W>qM5(t}+Q#lL0upRmSJaNQNO2wsOm#DK$>kcg z6rDi#o%FHl0>j>)GBBuXbmCgJT;ZERuZ7r*%+ zh3IIw_ecFhi8WtrHx0xPtE6N{eJtND6l$Ugr+yF^=emf4DdhM=D{Xo3-cns$T%gPd z3W5+{32+lOI(ZX!Bm||Q(V@Hr8TGNYCy*?ZN>=zGeimKmk&rwEv(IBQYkZF`qA(}O zz}Kd9>mL!f$utt3v6HO=P7jt#$8ZI7^H7j^9Y5P{DdscXfF2*1aQA~GBd3_+k%ebbM{Bnm_sR2(aZ#D4^2!f;PT|O<+ERb!x7Cxu@Im>^`;>}b zHb6sU(vUR00IL9JL()a_0%nIWa^p*zv;?QGzo2TiWto*<5;ZKIPKx-dM}VEzmZcz! z(84e33r!`}_ip1n_PAgi6D)}IZ<0!u{~?ZRV{Cc4K-|nS-Y4RK97ovp_Ope))^_`A zjIZ3a9rcV27e$9#sA9(R@lKJ7pYi06N`I2Fca>DrKY0~j_<3Ga04 zypX!piLi};wUYYB(fLw+wq#sK&aB1#2YBXRg~Bv0R`F-h3Y}6AUA^w^(oLX7_)<(* zg7JF>TC`cu0)(+KQ>v&oe&KH?C~tBm+0xO3J^UI_<>FH>L?dTXlKnSTt}oz3grRtQ zlR?L}LB|$th;5KNuLhG-ke{2F1?GcBT7tC_h*aNx@Qk@>760xXbaCNCT5o!qaiJ-- zN1Wbkq!3mXl)qvEyw!*KRmadx&M0W|Paq^YTg8-{&{FR{gU|MLy~^<_!Ebhq4-sX` zTAx8hAeyI-41?c$U-9JnYn|6luW-KNj5k|Vc zXn(6VsJ->bDsdi1nigIE#O2SG@eCxOBp)sGfs=01qm!ww?S}P3lA++G?A2-1=d#y{ z+-3~>N(C`1~m7>FJn*R1#v zO^i4HCxb36lG~@SPUl;fl9r!8DG;jJ%Y3Q(sVQiQ5cXWAa0Q4ve)@4*FDtnJf$;r_ zvntGKtR4o9XxdFjCxlgy(~9;s>1Iz;QlJ#WULGOJ_nCZu=bO5}h;!q%Z7~Q`n(Dc3 z4${B1SH9_m-(6H(rTo*K?wR+|LRzKC%=>)EgAkrM<)s?f|3EY34!O0 zt=vN)^Dj5N?cy~CkcPe{0;M7?p zD-nvkHe!ls#*w;0nx~(|7>E~-kuqdK^`t>H&y;lmDCE3;qjDyzBlr}jQ}QH;>^UHy z_B`*rIYz2+*Lax*?9oOI6rnWIm12kyszvU2Q_>@mZ<>0c3imY(Y1|Q3oodO#9M`;Q zB?vIJsXU!S_c6aYsVKZkugj&k7WOP0H*JR^kj5%mVPWpn6K^t^=! zK@rSVrtv>8q3Sp)LS~7%M|1lE1=5q&$yqb$XyohqN7X!yd9jP&Efd?2Y$V&)lTct< z5{VUpUe+hpS@2D*F29t`Z%JHV;z#t`dTeFCDqZOex=6((H~KiVyohyT&VYUAh(A@s z^$P<@X=Zn{q$SbQwIbRVMea<;WQp@Mc1gF;>UE0M<;EyvNcEwf7j_IzTjNIrV(#aD z-8(IHlMwkWpTaq=zRB3pn8dNd!)usEz2t(1hPJ<7NfD6sv*+I2(6L?O6;$1_)R1YP zT|AA+g|E1;&pa5(^ORPXecydq?{oV_@p?*68bOuDQ+lO^5kgr`CmR$sE>iE7SGtT? zP1-qIwS;jQwEWnK>e*N>t{mZFvC^+tiR4yCzjL*@F z53RqY4N|p3nwEW5jsYri{|V@Sp_ZfVwg>sfcfiaT=>`g%??7^PF(kU?z>Bed0VQbl z0l+JCa6DXm$+N&2!EP4LWidF^&RtGGhjxHAP;H#BF1T5Md@l~GyndU z6giJ=hGY6jb2!^dy76u_=fn85*`C%b5W#fGPR3$==SD$tEy7n@2Kl_?+OLY4s$Gv`W}5+3@&M@T zRuMKcoej)DhMQ!yTTt)Vd38mt9~3u-wjt5g;H0JLw5G7(ygJoZ2)znDDDMNEvAf7Z z3*6fg(*!^E8|Mr_V)xikVSr~^2M{K8q4iVY#nUplwrvgInuCe zfdy%V<9C*&7F@{t^Zf-@p8+Of&jXqXLncvqg~yo0d1GqUqbe?^8uZe|Jh^|~X;o%> z;r7TZSJIB6@Cer4o?;)2-ZVAw)uZg-ikE|udAkAcqf=j;x$;O&Z)a!P?)0vOk7-Yb zMGR^OfC=ep`EaR+XC1*p$0QIy`{y6HB!&W`TAVbFzdj)lpgQIjEXmD4>=OgRkhb6_ zclKx2T*;KP%#1f%<&%`5w}#w)=}Y?K@}nuz{L1dP%25x8IS7^p=zB|{ne3oi*A9S2 zex%D*5}O)Ekli2oY9Z=6Og@7{K#sexGBM=|xjJWKVt0iL}pC2g7F3>2%^2A0N z=O@(ipm^fHtip=sf$;PvwvW=I*_IOcqyU$?;RrfT>NdHarrXXjz_CrLJp*Ozq#+QV zEd<3EeICCrHYHlna3xT+r_A1}$A_k1w3Q@5#4i_^)Q#l>-~eePJX>{C*pc}_5S2~l z>`TtkLS>!po8$RZ|C1=X;Th#y)|X`TT5R+pwJm(*UH#-evj0BHipk`ik^Zw4oPp z;6t@E#y0>2qYGRw+W}^{a6bK@hwjvUk zsn{~pJTkhtY-rnHCZfWkjgVgM+xl62N3f4u`WfZRwyuIFkk@T1eig^L)mox!DjE8- zE;z5aRnGhXFh)N(C}u#9OLtV9a+diLp&9gqZ~FbW%AV~7@1gy~Cth1t3gaAmW(xK& z({gT=TIVP2I(Ni2W;e;V;tlOIHb*)2x} zHlDNzvT61~4|ciPgfgn7m+>Fj4{SEh$J6l9 zsqO&<^zVQ^n(k&Al)Kt>&bGIDjZwj(Zn`76R5N;JEqzpy+VT1k7f(kr>M=O@);9eh zbrKaN!YBP@AL?M?4&{uyGE*r6^t|AraJ_HDc1Ggb0ugmiNRMi?E>!8;mml}y?sr=! zPc-E5jGY$tBiP<=qg4~`QK8Pm5I0MojiVCNiFrOk!GiwQqH)AI|U^XL+FT^>_4zHId zKHVt+Ase~!>F+7nXdt5FiT8e}UM2^DlP1=F1ysyu0I#?|2V62Vqz^yDS4a*arsD zEeLPwdJ`|C52J>r+UmO;J8hPegWO{Yrm zu!3++x^|Sx{a>8jOvk`oAmZDMd)C2}=yeo#nn-qbx8sP5nbwTeo$Q2RrpR?a?p4il zJ+*wpxYzctwROFUd1O*vGYA~_T6V51X{p{Zh7Rnu8^+4nn)_jL$pyk8Ei&G5Ks4Str&?ZN!#txi_rl)_#2!20Pd&3mg-VMLC3FeP zUUo8Z6<;+=uRYE^nUkY6t3VV!8#Y6JZEwH5pPvoa)hkZvLvl|1@VeHMWlyz4kqa}^ zky6i2Z<_2oWKEYajc#0Q5*(3nQmPS=T#8|;wcx$W_Q?Bu8s8i#+14%Eng`(v)YFq4 zfufYt7{*<~t*fT^e(tR#S{rX;bet={CGETO9mmirMJUL zeS*I9p&f%C$S&Q?FnCwv;Kv@oFt@Rz6p%d@&UVw`T4cvyGg*t)2aNPdYX%ILE^#YM zgch7NnYB2d{k@{+odc6G^Wr_X%EBw(xuzda3*Tm9dMtCSWh}ZvBXUFhsByI}lXTaU zX%>T)|hCBa4T6)%u;EcLe>CXHI zXFB4|9j95IZ;tQM7Z@GR7#dnTy&kL3`JNRa-np(RnmcVc7ohSKy&^WE=_kgz?Mik*xG%Ql`y8c^mgmZx=R`W9mRKy$cEd%(G_0gB``szOM%Wm5go9Uvce4`F^ zWqzbq!ECBtj`97(Zdb4d?-vE&BO5~x42?C-<1G{iD}|1k2ES5i%*;mj{BR5w${ZU# zRqnW9`@zd(1{>cF}?@_{sE#4nCEufD;MTQudubhiSdXPyfc%J20pp>QT=JH-+vN^&4G<6fwfs^?m(`L5&d)BEs zQL3OSkg+m@ki=Xy9AX9bc7tA=!*5HFG7G!aW)D}^l<0$!rIx$qf3Idm=m^S(jw6H>ClPQOnJj=Uc{(4}rHNpyH#AjWZfP7Gt}y?gu9 zLBR9ZpBPnOOhMTvYz}W1LnJio=9++xMlg{`tt-9e6@hLsIgO`G}Q= z=}Qcn;QaZEzZN7w9L{?1@y~>ZVmjnl)YHHPiRG>E9}h^Mf*%jM29UqsUe9g&62yih zS@e@ne|`7guPHDD9(uN8k1yFDuOaUWvw@|KnfB*&2!z4}DsACcP5<%4zuek?A7Qs| zuoS_052XGWuEGTvlrTwzobaKe{@2Zi+rc9#*zn%Q z#f_1)zfZcrSD4yo!MV48{~~z8he2TU{Au6jKc_YT&5eKK|I=#A`wBQbR=Q4{Ky&b3 zY?!JA#tP%S7Ka9yqKJ&G{6{3mudxYSfsa%#T>iDJjIyvbXs+Ug9=JU8PhkPhe&M=s z@RS}d%>0B+oZ`AUdJ8QAv!{F>Wy$8YPk}g?Q%~F<_Wv=bzh38mU;MwR_~T6f_MiXTZol@&|8J*) zQEYTF#-$K)Tq=u(pX)S{qu`Mw8dXd}-0GSi7 zRBV1t(#^LR8TJQld6U87hf|X^XCOeHl-ut^vPL9}xka+8(Vz06X0f zuk1h)@97JZGEI>2zBieLjYahDCX_xK%)0#^7x%A`3!Ec{;yB41^ay-Zpk%Sx zzUXA1S2GyVyRL&lIWOyvcD zn)y4C6Qoc`h~T3tK9_xPWBxX9Ys3@Fn-Dt~_}aZ#h-TRJ8j0)_Pt!@VdXDORhrCPy z)DJRi)4DU&l4~}}m{3ow0Lj*O`y}tT;lHxWP*CXXodXT_d?aCcMb2VJGK#xPd2u8X zz`*N(x+*S0JokCvH90HH6s>2cqRanNKDe8C*9BAyPeyRtq^aG69P0q2Eju{I4(GcL z#)lIk2G_gL7m5R?G8T0Vfe^D>Pf6R|@2gn^jh;a`kK+zKc5}ULfSsAsoGo&g^bUpQ zN+W#xyH*`bTS(hIzv!*S%KZvRr0Oi_UQsK|2YFSm`I;+8Ts;qv9P8{JH4ENSkeV|# z8%VrMvICm^NR6oo3Q5Ja@7g)KebAAjh}vMOoy9Dq^|mjSiT*lWzbqb1xZ9~?1e>pM z!ap2D5}o{RNa7EwSu>Jzz)UM(X#wfP3p{oUrY!nRIqYWr%0=cwb8!4@2U4l4pbeG$ zEDPCv7bxsmf9|r<;@y0z2b5uR9G5GzJ=rlv`+d)oPCSOu4PAnU6e$SBF}0bk*;Ry2 zS_KMTrohaQ%EWVwlQ{~Rl}4Ch0|bB7tAF{=K;rKga65$qBSs6meQ3l|ZcvaIvV}&O z5iAD&NOhPUsuZep+*T9!29P5NO$f51w{W*ywx{VxI+=2$u7a9oaTL^I%$ETlYBDo_ z{&F~_KnG@u2mZ$SLB(vgd;0)2o<4Ju^ja0v9*R~aXeyPQoQ}9b`$mIM}A;3LXXkEQ4$!5y>%pl)hLMEonP#l?VR$?B>(>OnIXu76@p??DJ2RN z%*xn|+CO&c@|7DpI!WpQsi6>SV+Dl85y*DtY>0Wc0@=Z}uYP(E(7SoQFa}E|_Qb z2PS9!h(G@su0SdTEO#$9KRmDvGl^C3LuR;b3jUm5ad?1_E;pGf?F{+3LZ}D!kXG<> zHdT^gQotpa+S(M&J0Nj77E3j2t@;OCZpz*#&JD(&xuW`p?Bq8_3In4 zepVD=?aPmQKt?Kj24v6iqIm4s*~FBgJeIrgH1yx+Q~C+4_*Zf(%wKnin*(#KHVRU%8Jegu=RNsqMTebO*_P z7tQfshUfr8Y>%)KIyA&fqep%~W3GPCX*csD=dd+M(OLAyC!eTU77xDko_cdHRSRx3 z_DA2uiZTUJNQF%SB!zQfaqG%^9#vl5e?N+YmZ@5h3y8nw?8Z$V&iE>={cWXE&}U#V zPbUt?(C*JSGLP`YBMIlrmcd{Rce}GP(L4{CqawhD50+0J{dGis^9Mpi!H(Wspddyf z(7z6SEafpnXGG|;FDlUMb5G6|<4~zx5whiL9KK3{Ifv6eR#*y95{*{-a;~|Y59-Ck zNfP8e%2j3rn{h@MP`M&6dH@WLLMT7o%wgZvTT%|cuRU7jHU@Rhv~h$-!~US20KqPp ze6$1%X&>lA1b>&yI0yrOGn@Az03?xn?Q{@%%X?OVO_}m)+6Q@r47DP2TaZEs_i9`0 zObrHBs0HG7AZb$k7s4;jgw<@o$*soU8A(^Vx^ec(4qO14aJwN2$=#d2E(u0xL?s-C zU#dELsd|>Sq0Ma(YHz3XrQO0{-}c(d_H=CpA+=W>e->&s%>3x1>{@4XS(FJ_}zB0l@-;??dPEl@xKR06ma}0?w>owil z<2|DSHk!t%i9h=AV-Ebg-=-1+QVe*Q-^LH^Trq9nb%HtXQGp8Z+;nnGA#gkfpsSlY zX|^<9hM~_ch^y6OP0ny-I}O5(Q8@VMb02IEBXFLM@4V3fLzXnQs^Bh%<6*vAhbRX8 z1t=*(YPUs*Bu7V5;446g^kq5sZvv1$2O)U2PyUgL{58rTNO?(h2bUk%DEZVX#3hDq zv2S^H0D(1(wFSlZT!aJEWx^jd0lrWkV4R2W$N06Y&`8!Rp~PpNvhQ}}Xp%*=LpC;6 z_$2{7D1q3xIUDQszd+y`=X8h5?7NE}>h_RQ_XcRg4Vtu_HuVOQmUjnkLr-W5D_;pP zA(^Bs`o0B*ZSm_Om;cLz#zR_&B6zyTxWtapjHrPGx1eoC4#Fp1&k2e8Kx==_}ou#+M<(XAL>1i zULfpMj(nG#$qL1$H`hNPU>v+Nmo06+5FIhecqihgk?MBqHM7PXSmj4@IID0euu)ozody&;j7*4aG|$E$sp>XJX4E zkYdP(+;rlwcR3=HJU^B2QZm!HJ0r~R91r^%U&jkDg(cdWx5^vgv`#0T=tb^8Fi82} z$hBafq%_5yR`BOtSDx+5OLmMx>4N!O$Rk_V65eSy#3DD%aYHCV>wvE3~Dk2`E9XWw;! zU;uzo99}=9UjG*-IT4Q1)l3f21K%!X665GO>i{R{LAY=k0pzIJbSYRxzpL4V7^HZ< zlc^GL6kPn{9MV%Rp!!qXn!YTMlL3+#hg|1``+E}QKB!x}?SUwb zbLdWH+tK`NIFn_ykA@Ep!{I*(*n@xZdAvpDkS`}DKMD}D9B{aL*w_(?n+*Gv3AjKa zQ~>0@!tF0|?29$Jaaj&PR7>Obh&Sa9jOyV(#Xf?sW|~x$KK=6+`&S42pG{8#XI3=n z{(oji5BA=#KQSWrp!pA{|)(I1^+k82Rr6} zd->2A{+EqGpI3zlXWi&={czwA3K1H1r746o_a4MqXl@QyAw{=%^*Wu;FPE193I+UW zL<7IPi|>ey%;pz8h}csozpPv)Z zBc?3St?!TYi@+XIMTzMN&HK|=k7b7BMo(h8u*Mk?kLY5!*!>43mjrex192=7SO0 zIX`l(+W&k)J_H^R);PiVN5%KQ4i=|V3l?MB(Tt1bk3rEOQ77SRjRPa|&-(~mfG5Q6 znR@&@);~X&fX~Az%MRSFe~zbHJ2)J#ha+ieey=Kb9)SlOED5==e*bB7%$Z_%jdPW* z^5_3pjsHwB|1$$i{P11-DoeP(KY;AcPq@1XK!n#}H3yP0y?{+T^`6hvN8mjc0v?Y5 zgnrb++OyqB5)qG-y#J`{DJ5z{Y0$fpL`3WUgX z_pL2-C=R~z?&GOvbLs7NvKdt_3xn^wQ|0JP`f?NfD7bDAddc$Nw$@@Z?yM(cH+>_v z7d+Si*%xz=7kGh`Jj54XIqgv+O}z%7>9lEm0CjhkMyb0*kTaifs&r6m&ZAELMlO+| zOVisXE>9NYXYvkj@;2BR32N^y9@^i5SgSAlf%f|nvVV39ED%j+&t{U_9JQKgdIuTC zK8U5vAwCT=a>12>Y?spjU}Z9_CR>>Ay(p=CQs@Yoj5)})yxy6DWSbGtvviPjAG|j- zA?ky$+zdj8Buf=NB;x^S|KStRFHyNiwK^4}qK?wBiEnRJPA;bmy7awwEPzx6l0=%g z60o>2g~Zx`e7^GI;o8tlU!K9Y`8}^sCw7%IY!n=!4c6Y+{XOP7mT!=*D1w^Gr(x$E zvmJ1@HFA0~R9H+#D$36}t+rutsJ8R+fDB5=Z3r+SxwfM=<5Wlj^a6;2Vs7Z&nF%X_ zM$N?{#0cIM#^)?-7P$mK;C>{AH#Uu3tOKNIbY@9Gw-Z#Q)}iJTvA{Jy3mP^r(swRJ znBGs@2b7o6EX#N0FO@DX&1kbj=-N`LJHXy&s;a`lPP zA&6FJtr@OHoaG!aq-;vJAPa1Sh)Tqjep?}?iWOJ~mQ0iKY0r@(M^EHK1%P^--Psc( z5=nkpx9T(ET0`S7K@w^G{!6Cz)FTO?YJXKxx}xdE=Qm`>K3);WMu85U%RD4H?5d*$ zjkJhPF!c_=WX&V3kcjTQ9zXjCsM5VDG6{1q?<)$~%Z@;f0zI+P%Zu1lpl6mAF(Kgg z{wk7ha8%sh2y;%q^?atta;)ZFL@!{x^pGk}YP9$($YS;7=zK7RObr7$TQqQhN@>oE zw0?zux3HbT*$EJl;rt#Vcb|g>XF!SXbF{+@L&Qz{+)_J!pks70L*S~1n`AR$?C_la zV#B0d$oR#*<9BmWfD?8{*f|reF)_>X4>I;Elz}yN!~C>?aL}5Pt|wG`n%Sfq!e;C z;GO~rjG-i{81oq$(5o9MwaHW~Dn!a$5U9T&jXUKiF&aav_i0WnZW2U_#%2;UU(GmW z4_5K_^>8F6>n79S4=$&c=Xu8c|ypHnV-r1TIg#s^pQBlp&t zQ`k-JG2i zheswMBy0ZNBc$^iAgLk7cHv9?Ra~jNY<})!cIuE1wuMCdwjADG=Conw6rIw`{R=Tt zam3VZvAl%X8l|UWiFS?f0-c$;Yex(Hr32cT1h_eG7d+W1gQKc` z(xgk^Lk1l8<^l&##s_5F)+y<41zoWGW^^bO9X1xs0D_*Ymgt2J>cajJwlx+J!&ZuJ zF-Zyaib0!{M*Fzl#LuU9-c}VTUwl@z4+SJE>dXmzrM7Epu=}&fG1L}`jng;sP35iU zS$}w8RISST8~6zFbjb+g6L#W=`-we~(M~0B+FTkl51h$%ye>(fIV#8dO##VB$tQ%W zyH!Tl4WZsB3MOC}vW6hJPBsxsp6wNHGHC|+9?Km@vIe0=JO*w9Kik-qbw5q8_Tx!k zzBt2LhSyZ}2yb|x{OPaZpJ7wx1O*hivFyUDpA0XT^hk0~U+BpZS!=7u!CgJ?FhwnQ z+Y=OITNKqF3UhRM-vnmcC|TZ?;NAe=iW^@&Qip+)<((5~Ec%(!L+=18E>y-phpaWKX zTJfaB-qmu<+r!Y@wchg`q<9_!eFwb>x?0aV&`#ny1aDKOp2CIvEsqkFdV0-u5+brq zCRT-nbNJQS*k^FfPjY=D=s8jdz1Xuv7lCDmWbUl17a^ZGW1M0`M#*0u0>%|d`cLdC z%0$T*<-}XbRVANFT=pLEc4#>N@FU>@WqUn3k~Fqi93IMSv2l9pmL($DR!*u&BsNP* z7AA;KNaQ@@+?;Hf?+awr&zdfKHX9F}Mu>c8ON>>qLsNj(;)uJ-Mpg$pCPO&K%#RxJ z1LXCaf9fYF!k8H|zRGVt<+KBNS;VFKx}K`Dv&JFm_ms8EH%S_r@c7_4u(f-UC8pLD znTo!oJjZR|7}T0fPZ$2z;XPU@=Rlc0CaWxS`wZ4B*|wIj--(rTWc&@=N6i2-jMb6H z+aV@oY?vU!Am3?u&+pN1$CN+|!q|$lG5 zMJ=q8GQq5-i$I=#(?rlen+gJLwq5cwF9)Trp^ylA%mtDs?0+*}eOIsNj)(u+r}ddE_g# zTOWBQR99)u+VBCr%iBoPbcjdl=CV-cqDX2CHE#V$p1ErZSGzc?%a3iv)n39SRsd{E zc_$7wbwtvc>C)r?P4sv{3#?^h3c`y^Jq0q0&Y=a}s-Ic&U6d1uimK1^0~?mD6l}zx z+E4;&=WCDXUM3;AB=lD-dhfmjTavSjX@tKc0TTtKx6paOW|&*MtJA)pdLO@-R>u0{ zsY4%0>6FD#2!q_9&I06YJGqjMqWT3~67tnAW?WZmZ>6(~rQi>OBdg)!)XEnAk_0&*SE2svz;J&oKQ*>abYiDz!uaVB>_;i+LJ0qgTnV~IO{ubdLli;KsO>vLACtSxh z75jA1xcPnLLh7iBTMC(OifFb2rGd#{+zKD`C>%uPV!al3dP(H72)aHCkNe0-A8_w; ze#XP!)k}80D_lvul;(kjQq3}n)5#{@G*R9k{j#O1HDlo8mDxjpVswCLK%c3iuB5Qd z5G&mArdk`z7`W#)5u1Cn?+Gq0DJ3xQzLt;o&H2iHZ`2!OpU-K#cVr)B$5G=UsHXK5 z_JH%2-b`Q0ECsvg(~)cx${H{uewcCggKKllwldjPydT=hNnr$Jxf-qKx~$SO3)9x_ ziT~Il`d$_c-miwsnsv_zKHKpXzr-6+ugNqvE6*95rlh)leFc|r=C`6{qodi`bHcE7gk8va|}mM_Xx8>l}rgxUUcb&{SDZsDFX@JQSUv;5#>0y8egPh z<`jw-OcY?`Y~tzB_uS!$3&a`B8SA%ujuuJ%i0u3?az0XeGc>8gPexjUHJ`R(RZKmtIh`DiV`i*jb*?sMk_D)(vkp_&$m~R)O??k5FxG{gV=SP;sGxMKX z0P1T!Bg+U&eh4$h=>7UJ|A)Q5j;eB9zkp#xP(T4u*eZ>Jl!{6TNOw0& zr9?zpln|wsAfYG?B1m^5N=PoTDCusbS)|gj7Vq`!efHVNKI0qT`|mq`|D54r?WgX% z?s?5QuS?=$dt?R@a-O$F;_pyuufEbzztuQ92yzEOCf9FD)NjwAMwpK3b-r){HjZ;* z6{vr%r!%8}jo0O&N+%1t@Ex-tQ})ETytLxL7Tflh871@uxddAU8uQ=N(6mVZk?1s3 zoivoJNQ7664|7?_#$!qIM{YHy!|2mepiHqtuji`)zA9H$g!JhUk9 z_>+G#?riFz({P@45RFfYG0%)QsTP*a#L#MGNcz-6vUEyrfyBBa-S-Y~{N8Q5 zW}8RTmYcmPK65?D&3Gycz4VyDrXzV<8(p(HsC|~Pvqbfcz`|mKmhy!NJEsl$J#&?0 z2T1kJxqGl3i4Y>M-KE$&BTO;r+wh*wCd!x9Bop)T4~%7NI_Sr$+aR(N4Eg{ZqYXF# ziGS#;q@bwFH9})`>CeNK*wFdZxU&AK>}MY9X|y=cD(qwvE>{kfC~__Fd=ujA>8PkD z``q?|kdE9e-+rn3aQ_YS*odmqWmh>K^ymkxm8O;ky>8imoTBZ=V^XO17SY@~k9}z8T7dN&bqZk~^ z&UvS_m8Gx<3$fEN{;Za316&Ak62TGf$q*5H0AbEi`gS=Ok1AkKCmlLLn`Y=4>-(-* z*O9@kHb2;~J;6I-)s_sxj?*Kwr>Af50Zp&{*$ETbMIbl^>06wYZEe72N0U~_fRkWd*&S;mX!svk% z5BW^=Qg4#4u+>272*M$u$o1`-y+(uoEx*W&225>de&Zi40s-L-;?YA9H=Ng|l*p;_ zH4Ioj;D7GI`Ja+JG5O}9=95@hkWd%{&|~- z3S2y{$8ObMFZn1rZ@xW%O}<8`3#j1aq$irmr^dOWvwna^*8a`cT=c+V$mB~fOV2h` zNBJm_Mc>JiJ49J2b(db+Ngl9xl4 z+VCkM#xVS&u}NVS3gHVmi*Diy9C+tG_)AWH`(Ub z@{QAtN8?NBswJFs-{#5jBgA2r&KI~F{MWUTnM8-%U&yH-HD?T<)Qr<+MbMU;|GPyk z@y|NxZrFS(PU=_IO8#$?zFh|@Knwzf$=YTdPshU!QcO25y*>e9yJ7ONSU-Qfexh!+ z-WtGdW!v2scEdu27uCwWnFipLVu32C0Hg>Lzj0YwIEfe`6JT2KxX^c6SVVPqAcw2vb1yvB* zmp)cQ-!cst=XGl~D^}X^vpN(fZAQAEin6?pMlUqJ5p@16VBT+BHA{VdTa((6!BO;+ z(*1I(vvM+ImR{N?Gvsj)6wwvWwwOJ@$dhf;Y-Mve3XeQFnB%-Sl*Y2GOZ}F6h3VR( zx8*!VDhJ-q(Gb>f!d8HPgl)}E{5I?|djZ3-s$U)F(muPLAJ?(@iZz}Ev9AcYuXA#6 ztgPFC#-|f6lDCX_t>p$0VJJc?<%~Y#4mCMDXz1BRKiLk|13RhIxNv>E8jK~4h z%UCsZXgc*@Oguq`@WIo1n@%lC=he}6@z89G*Y-XfU(YKNY&W2d@t2 z7x|W=j?oF27p`R*;Q(%q@2{lg%1DRpbX&JlRClHFS^Ej0g>{8w888^oR7g!6`|MBK zR13EpcFb14`h%$5DL^~)=nn2dr-)xvysOxF2hT7^W>O~{s@iWeC&Bx}O)t3{E z%FF!hBY>8Ymd32PF)yFH6tAs*Yj9Q^zhU}Kj!2VmcO;ykuY}gaqIOwyt>-gS);GIV zokc*Ix!!g?qXjHjHo!LYkv2?42}j_l=lNlFXo_d?o$sZ!sVw*o4t@q+zfw|J!CGR- zaXx>)G-p!o==V6UBNs2(9V=E%GkXxH9<@egV1zZlKCop?bXc^U(PP5|Wjlzm`kr{m z!$Sc*_&&N!N)~;@3BCP|@16;i@aQl;OJPxVz?gb1d)=dlgiTl-XZso`ul*IktA7Z7 z|Jy;o=>FST09V|GyjRV~+uD03g9Ek2z&VHul%3S@ZtkD`-kRWW zZtY~QG|}8kitj9}4*86e8F!3Gi5k6UkoJ7J7&Qnat=WN6hbAmNdgo_mCL!NSx$l#p zo1-2<9T_s@rXBj??V__m3`Z0A$1yIwHJo2bcARz)p>^hQ>R&VEd9!#pi~t?rAOL+$yYnxYxqPcz@F`;PNpmIP&2QbX zOm34iA_=VuU0`#5Gd=ClfoKYuv$`23QM6eWTt2MI16%PxlwF&9-<+0}psD<+s>b6W zzh3KmiQUEo%mdiECnWcP!33Ufi|sS~&i zP_3nT@9Mcq#X@h!e_7`!dLMj}mQ(t3dv=N-D`{`Vx1`&L@z~bcboM{V^zT0kCOq%E zpY*ypcx}GF{E#Ramaq9k)mX1T?L|1qDs8=2nM(I%;iAPGuA5zdetZKB3}M7vELALz zW&7!(Ha8(pM*v5BLi zZ8Kbt$KTyFUxz4YRLTnDUOc>cE&knnb3S(`@A>#G>r=aD1FwFzs|g zD6joJ10>PHnXRau(m#HQ#BUvzzusElz(3wD0M5->u4~vL+CgCKQn)Do)<>tHk1oIM z*`q)9yh`YED1t1WpXeP^Tm|58X>n_0j!K&Ei18j`Hp5|dh{uO?dA9s7P&thglKD`R zg>;^H+!P}u34C>y^nA2Wc}T- zr0tCYLNtT6LnS4!#2Jj5l^SP_0z(-$vMII}xTis{wP?7A_hWS7Fz@{3E;cdnlZh^T z^z2m7@LmG0roR8lk z!2+lsYJ`ssaeZmq^l5C(Cf|vvN}c|J0b9miNH9!ipWf1E$@G2QwX|Aw*+<}fjSw;S zBN(aWWzaqApEtRKyMt${HOal=1GaBg&UcC!J4noyWuQ_g)dRJt`!at%Cv4+zC^_t^ zKPy%R@~9;Gb499&!^s_iS1L3z(kuyd9L1-rp525=+xbM^;oa=(YLgyZFus}*pVba$ zjmb%iZtKQQk58oR(`Mha=FFePDSBAA7@`b^ZP-l3z4k+%=w%lvQ|B-L`#it$g^)`3o2cIyVYQkmn- zZCa}8$hUwjx~yW&u$S{%nT-J4$_elwdn~r;a%Y>NqU-A;Um7^%e=Y{eQU4)2o8Wn! z0pY>nE!SN8UbD#3srRm7Q$bRYE|Avl$SAxwD9n#jF3uu~KWinC=6mNi0oyaMZDDGD zk-LXU^6b2Zg2rP2zDC_J~}+QijUpdMa3#zgvWQ8pfAEwif@2*(yogAlF z8+zGi%6~oT>hRe?b21MadOPsY&J^l>x_zXo>mk&R3VUO15MW6i{q3}5G92fnYpppR z(+K4OeRaVp?W1wP4Y!QgY<8Q=@ho|v=$#e|a`&y32X+pPuKAkh9}c@a3+}k}C{QZG z>N%e$N6cjvlk!nWpET|T?ct4YYQ177oDE|>?t-4Fm{U6qn8p|GMw79$JM?u+t~Vnv z`Vh9NZR&+C->Q$V2}%(yu!*6AP{R1IEfQ##&s^JiM(bg?_4Omoe3Uz_66bm2I>9x+qo61G0q+rH|ir>?JhBG~%+##?t{zu2z(ZHU=n z&)u|^Dab9`Po<1#C5~gW^BK!*(|q7i0EV{IG>k#8&jiq&+XXZHj5@lf1F|%iQ(6)U>Qqw3i(S{C!r!$?K-L-uzgruROFn>>ybFmh0i;Ck|qC( zv;~36gQrUKh9+^oYkC@Gu)LK8TYaTLy>uR-*FWqUnl0%$*{{mPC3dQVJLMNS(M}%C z+$Q5xl#A^w)2|}6N?~39(;J6Be^C()0H0Ml!IwBhDeL~HMPOLA!iXQ`6aE~G6uLA! zj!b=Ye4hKu{?@6!5%-3x+;ivOUEtsYgC!!XV?Quw$yA|GCSUiF zo8*`IQZTgB83&%aELc$=iLgnu)M`F9$OGy^g;)=e2pOLB@9+{geo4#E#UJ_!&Y81m zHVPP25flH>*3B%*&xjC2BEBl0WASM_?KrkHe_J)cO^46xNm^cu14pGrX_K^Uvy}TV zlDwyVW2xrgE>5F@t?C7WxOGm@uXAc6JiLQ+WfWvmtA=eEG$yhvi{MH#Se#WN)ov3& z_i2sF`NooKnst_(IDkX<(eDurHTFk7hQ~_g0SFoU5iUU-jr|bt_pKQ&f}vWRGHtQ3 z>@e;vCQ(uRb7&SuZdg+~0w@xti*FVl4BE{MbH=_&yQ66u3~U}lyWBs4yHeNXDM|o_ zBoe+c)7DJ@tWAz%WY0hi&DZVP? zlZ36yOq$K{<)T$H?#H@-`k6eFvEAw;l&?@QUl2PsCJ*=#ZG(k}D^p;$A7;o}%+fub z&l?XS@lluBW>A`Rjzg6TK^)ILP8e`MsUITJ&O9}fn(lRFlNg?|e41ZA;e#=|7vhK;8xkkIj@2 z>z%>_CTPq~!Jn!3UC2~)=Y1F@a}Ll&@vpS->%!U@oFrk`e0g*Go77fdmWiy(A|9Mi zdx5zyuP!uZaT&7lhv~rA*y`rd!N@H}D>4@Ml8z^eyRnJOE34h;&lwa@4a``}X@Yn! zW-J3xQ_#Jydu@8Y90#b$YTAfglCgy28L6e;JlRqtEMtX9NBYwscBc_dYAj?kwWa$%KmGMIc zOagZLD?AR<@qQWfluA|679d)DfH5|l8gVaz@mPL{)uhq|XZ{XH!6?mgy++(6bCQdU znI=gbN(l1{s8Ti;{qjDccAuQk%I4Hh)#IKRic|?>(M>1x-7++doORFR;g)kb{)%GK zUdx5qH3iprX$FlE;UKV_xQd>;xX&7NeC|0Zntc%}`?fHC^LS%`86(2?btCiw#P2QD zm|NA7D(8(G|I4aRJ8zR_1o%{+_|t}51Ita5H)e*DpYOS!?2r~y(tM2uPk^$S6Yp&E zH3>ShjmS%sZmgW|R3IZu&>!lg-QGR-=@bHb+aIZy!}I z!)N)?vRPU&4QqVszA#rpOJqS5{5Iq$U*A*2vCl{;{u>l~?sisQ|B#kUiWgPb9m+Ja z>d7!aX@bEh?a2MZqF}B9fXR(l%=5qOv?mg*p0|RJv1N4Z3~qWWY!cyxJwaps#fOOO zkG2<|T*!;wfLC8XcP%PkiadyMM;`ZZzOVGh4!?7;i(2HFB~&b*%}>y>&AU`>2?Z1l ztPAT=)`7JztLaF-t@2|vVIvn!9=BCToz`h`>}g{QPPv4!*%S#a$r(_9;gUM+$V2ii z8M+`H(DCjA4{RDcc$y?`8?C3$M=D3U^Fa-MF{KL^Y^O*WqF-bcv6we7wZibL(pcA- z#>WZUn!6Y(wPM3oXZ~zK#JxoK5Cy#jE&o~lR?##~2I@A=ksOP-&p%vUde{VADY38-5K`T7*olC}-nr8#OlNRA+6yEIkai_Ppy-A$0{Vdy?3 zQ(4A8?)sJ^rfXSG8f#7a+MXsLCCLQ>gUmcKY+Wvx^L>!~uQ{Iu>q-9bwsmn7=gR3< zjyQLB{wq!3oo>1d1r`T3Hzx2Uw6|v#F)_S86E11fL$9xx`P)KS>%{h()Yue_~TJSt@8&xcRh# zR8}7afIpvcBF2Amt4n-5@;%3hc1yxY0Vpzyp+M-jJhjp$MQKfI1*-^1Enf%i+wJbk z4knF^6<`?lq{n+;T~a{I-_f<#qi_1*KOTLn{ulV}CWuv=vdf*in}> z)0t&1vfc(=9XsOPviwd9S*Ls={l!EUJk2}n!UOy=98RRZ-O-a@1tn^AgOogcGw;z# zO17gjSf0|hSXiKOxdAsp>hAXrZ`d`>v^6wyZN;DkZC+^GFW_hunlbg|H*Wm@W*&2t zKXDNOHt&nH$3Y-8Yps>E?&UV}p~+~5H0HSa8-d1Emu|NK#3?UaWC^9d7ANXjmPG;Q z>_$4K)FGSS`P&_4kclaCTg?#JyM}gfA6S)H94s%P6EJY_wdS~^G(kqqz1017Ir^s5 zS+j5#wTJn+|F-2@o$S)UbLYI33J+o}YXnBiR9aRm$I<_{wtNjZ$m}7ud{vMC&zA51 zZ26GW#sAsz?VX;?|7XkhTXQ`5|CBA?pD~Zb;7J8LR+$Z*^?XkAJp_oqel$c(7Ohb) zxAt<|;3pk#h?`^$4sq=Xoc_8(7cp5}otPTm1EwJp>ldi>no)tx`!z^UB(z}nR#be) zv}f~1=&f0x*2>RnXsp}!Xl9KNxPa#IjST92eUpkjdW$B>V-EuKr?963VF7HR1BCYJ zg+0$8GPMH{hWj7!MB+SLaoxb?AJxKNP4jUVp5eg0Ul#QQlsF)ab|=0nw(p%{5wTrZ zWPsA1c;(MqY2+i?tImn>JAVoP{tIm=A=)c0%fR2aPvnVFa0PGO+u!VNk(N3S?Q!G& zb)P>wVDJC1fyj`Dl=tx7L;>XHGVI`j)p>t=v41s`D6&aAH)dSk_Zh^{P^gcx31s`P z&?$w15HU;;v;V_A;2E2xKRJKzRd~9B8ZaY;l-KrYuQX)g0$s-fA>I8~a3P+vQandH z_vsZgY~W?Yn{g zdjRx*4ov^o+kX$L{~x{mZ;4u{@x%r-q1mwyK$*9Jy3-G#u*r4sA+FarNb!&59x@sJ zN17iwqA8H>Kz!B(K2VVB{;JhL_V_0pPkO;AO|$kQ_PhBDnvG_#=MZ+n-uaK|*SXPx zTh)Y!&)%7B|92+_Q313#CfBJ07iB|=e%w5oKy>h&&X*@tU!L72ki7iDzs!r!i;9T& z;3WU8yPmQ{;f4kpRFcGohSX+~Dj6gs*r!5=kI@{cemRTAY~}V=Ih4DWnY&Cj4LojM zo{NoIz+$sX2zM8qn=<)T!PqB>I$edFWvLs3??g_#cc)tt)4+*HXq{^Y$Eox*bl`JV zGEQ^rRMFAdt6ZG*k_3duo)8c*6C5CsNN^!#-azr7hbZ9x{O9i)(xlVkp-6?&yEAR6 z#eN_}%L(WT=rero0LnIg1U|a);eH~(wCdjl`fW^!KSJ4suZ1?fZAku5GrJ)xW@z`* z5uP6NAYm-W`_B|2cXTN!X_!0_=;PYX(&xMQolUvXcR4`8m;?y;Qmn9(KYtfebAx6h z&h3|?h&sQsVDFt1?LcyD2iE0#aK5-p&fM>`0#b$7KuebK$fu`ng6bf(6Nc4pN05?; z1ySJr=4zPJ3|2T%z})|G4GgCyp$0YY?Mx3V1H=W<0a8cTCB^hoPm>{Lgp+yY3s>wa zS6|(zcvNu1b-t((QB8qD!xY>!7#n^t$GhGtUgnZspPzU8UWxdYRjl<{XQC;;lz?}L z-0mOKX#bR9$U-FX@hqCb&4hWu@{ZS{g}EIxhdD!$<9O=S1B#0#ipApbv&_#_Gjqlg z)*KlAX?z002?c^`4844;nDjq=G9K{}3Y3`Ul}^$wS083d8RC7kbgLbhn;na9c>syI za?;?w=jPI9%7ZTy-B3gmK<}cxey*ENsqxzFFC_YnKnJm*04B9T_W0%*W@gEU;85dv zA%p|*#d84HphK@72#Re@pGE9rl7;B*AT~j#FWq`_!!&^3%YVbD*^I#u^g{*SzaRy6 znzZP_1;uLgSAUvGP%swU-ULFLmTJhd43L0w!kQJ?W2rfB8;!Msf88?pNv2~Jci%yB zlTOyO8+4mEJv|H<+B|ds3!Nw=yHwR|_u+@{B;f7=;{>72qL(5cPxKcQzEEryC9OK% ziq!os6vQp2U*R-xnMv(>K88jeS+|}19#!maFS7yAp*GLGp^8!`g_erWpVXS?>u{X) z+o40BLv7Gv-IB-NXx*rhoSzc@YjFS7ru7j7Ug*-mYdGKkjCuI8Ld>5&JFKDL(bbn@ zR9U8l(CbGQ||HJ+)fx;=DWs z)a0Uo3}Z|cjWKwTI3qlq*Wf@B1@y-Lp|GoHaA%@5dr0yQP^|hGP{~e$t6-rlt>8VI z*qhW5c_f;$ued{Rb|p$5){n=9{7^qWt8jZAkkZ><7x zoiXO!mv;0h!ll-9eX7zc5uPhCb~enR1t^|ou}=#z91b<`BIb+WI`nA(0A7Kc14gyK zf>7f+WV?{U?Gfh8F(_^O9?jpNa3``eSHF89$fQ^5SJB~fm-CZG6zvxjmnxx#(Rc8V zu`|A49s>%xR{R_0VzpbSLj=7*$g;RtIv)CkSFoqv9ba2&3I;!S!TL_jdDmG{Ua@wD zUHc09g(nH|+ zg@hwZlQ6Swv4Qoz0)dkhin`i(v<@=Urar>4nI26-Q?C)hOY3SCIn6U5Q`%m1JL2GKmcsg--7-qIdh#rq*9Q z7)I!6h;b6S{_+U86TRac8^o>D-XQf*Vq?0im~*ysxYWU%I~2=7Zq{EL$;PrF4&32M zNcam13mOz7$*(aHN7iR5YBc@}f6zsJQ;QN501MIW{%!d{Iqdrr+Yy{8*4=qSXC{Hk zF93MuL#{33Ok6&cd{QzS-3h*wDNsNDjQKF3P{`Hxs&iBiz!GUKv@gGuL-O(<(lh+| zZT++BB6X#pC`|9=!@D$t@cM51IJdS}_jpgz=2*;CL}%I#=8|?H6>i-Ivry^DDW~;F z$3@buAknqgtr%?}hR65bdP@Ehs)T>Q4)X~meJBkb%1BvHU)jQWu$TI=_2S)f4~idJ zxXGDg+N~$Xf@}?cuSlL*M8|frulyj}JE?9{wcMDN_C2ad`tW!;>pe02#+aUtu9+qg zT6Sm+ESswI0Tq?rH5TdMu=0#&kL_dzM?@WH3>fy@^dx3 z#0Rv;C7GT%7xmEA!4=%hZ%b`78bbw@BBH@hJ+PZ&uFQ&w*6T9wDGBeDrCEwqNRL1I` zEkivJd-P4v016}&yEVMJfHr=2N6}&v@xa2yfzI2a*Tzoo*@sML9g^oES((pNb}G+^ zy7^0{_z{xn$~?y#J#dr!IQYp>?VUQ!RH43D*85;Rs?J#22LI`W78FWmJgr_Y=E#D6 z@fq7kS>KVuO8VanE1+JOmKj(W|G0?SRIy^P#95MC4(dKj(H#mK_aRGMbza;Z?ZQDO zI<4nf7;mF%k+DilrZLU!ca>GJKX2y+_&e@qZo%R|#<+^hIkuy1hNNbPuS8wcqn8cN z`rNOFnc_;C(>CLdq22M{i3<|FlnL9(2y7=!m1Och)cO87q?UGBTkp>_$Yt$7YTCF+ z;uDH1rcGuvMRHNqs4KV3O< z#@?&S!S-#j^=@= z2}HC{6?CaRs>k2a4yoAa*4Dt@%btotg%>9YIQ`-Lb@!~**=d?ickt`#L2+~4bSHUF zrr9X>B>TJPVMdGaGLbA@lCnue&hPFFj+|239FNwKEXqMkB`3M@ z7U!vFa#yC6W*1ds^RLj{&b|Szju-Molfd|Qt$dhC*04NT(lJ~bLX91NA0wc-ZQGEc zX|&vFhc9UtljPb)y`!r|Ye7artKyol4!!J)0)NGFx2 z{mNf8YwE|_9UZ;bE-_q4Wa?J@xtCUvo>YQ z;Qf=s=U=-P0pU014c;Srr)2Qi1F7QT;7pmFq94e;QDf=b7Ct+7H&r1Hic~rsf41xv z{!Wu<*Z-NV19)^__q>v!M!F{4?F#Odxmx3J(h%gSTnVkr!|TWxrnPybpVTvUI=2ao z{AiB`f5jIkc?3YFec7I#gf~?s($wpVRb<(azF3`DB|zi?sW`;U+ug@Kzo|lO^x4_- zBJSNcx;>_%%MXKc)Rya=Tu(gBX~wz7y$eR6@k-4Xr^s%|Iu@EOCh}JCC;CpP`eizx;VHX!*1g(mAr0`k@Z$ zH71UrsI4l7y!s?!H*xDk;WrA<>$*D1l@Ty)Xaowntj$@1&fI)=FuV3vnDFsW>PyW( zbt4#?3&nN0=$FnKyI%h|%VnsRgc~AD&O5lsJ2R|o!jN7PHT>U04YE>7m=TiTBOWgu z**ia6oWk zyWJN6lG<54P>^*jy?ItseOFG461l<#OP zPHmfil;Dc&8Lq4zYolu8Zkp=+4Euae+&it^^1@bNITRwNo)U%IUTCo`Ruk=+bvC~A zH)nPu>85HDw=ST&@^y14Gb81c-nqxrrJ|&kPoPKxJSg3w!U0_sepyq3Z0 z))We*ZobsDppU6FelS@fdWdaII*w3r!SlgXMEYq@ZnwzVK}c} z{N11ItbCwj@#=a%)1t1)2#2jcx20<(xu3${=Rt*x6g;+57;eG&DmvZb`-ojb>|90 zXF@Xjod^9)&J19!+;kK?{W-W?Aa1^d)Yv7=h&dW=DLGSt%Dow3^$Q42)+>Q3tuvX2 zuNj9P+nH!Nlm0q^!2EHEnAG+-#3dWV)$+?-ln&>iCvWOYnh$nVZOgvJwN zU(Z?m`pS94Xg)D$+=23?NWK)^R!yT@qbPfV^7uM$K=PWJ&|B)Z@wcq$O!JE~#o(b5 zg_xTNv!@I=1Oh0?MTtrM9WEXq(K+I2 zK+HyJF*CEpcAG2I11v|1Tf=5ryA>busVoI8Gsddofg5~UmS;BSe*R-(^r~*=@KeOa zXcDmxI!$f_g%p&&!UuEfzWyQKAw~|zD7kT8-Sqd(u}i1JyM|XQ!HHVHTI#xc?@-v= zxpy2E^lejd+1>j0p!nU|sl(1Z)7q8;gRR8=8FpZ`r_svQJ(hR&IqtZTnSI=JPeC%U zmVz|v-J-njJ;%eTqF`C8+p)u|XZE$v)mPrIb8^Tn$^vx6Yu;rr*595S(G5g3NZBNpSh{ zI$~=6=73b-Y2{bvf7<#6N(zDXhAITb?u%2)Nr81OjA=GJM)I`lY7Ci)kCRlGp?33w zNK>@SdhA>1fUiSkWCebiszc7-Y!S>MGk=U@O!f3Xqy7L%_`w52yY{Edwn+Y2-k>m( zJxw@ksJQlnp;DEkptb|t7s_6&p!m|Y`WL}>yjZ0T9eR8x;4U#89dGN{L;K+_EF(&4rRIZg+beM zM=O<0M~Ph57p}%Xf4~~usLvWtSLJ|z$KqubbWlM zHQyMcLsUtxHJ*?-{aALJ`;(EHhCgHE^UN3utM0scTRq9D*#*<16d!fBj> z4vG^yPHPUYXWX{I^P=a><{vvpI@!C8r#40+yM|*0FBG7XN&_7g+8p_wdMhzlGW#8o zt?;b`Pn!h=*}I5W|0Ix~YI|aU=~nY0nUK#of>12$tD$_fsqm2Gs6|VR)8ZOgi_&I3 z$M)4%l-0(I##L^mqFj=v8IV}0#&GIG1E)+{;l@d0w*nmFL{L`(HbmmQ2$(9(FLE>= zifDbnSTD@nUZLCfQ$@gTsG`FaaX{e(Es#o(PHB7xvUBTNK5O=Y(3swnnkHX8*WHY! z^;8-YhPiqT)I~*Vx>li+6>GEDD`tmUX~h>Smgn&KxUXjCTB4Cc;+h?3ofqZevY92p zuGhu-^2N>-A#E>z+OGb;C;^Q01bPy{b3Svl%l|VOJgr!QDJAQiWX!=H;r5LxqBy{{ zh;FA!Ml$CvMxBQ}FsTdiwKrZKaA?-`mr&>WglTcN{|+#49hgc@1_%-wjpj9pp~@Bj z6m1s`t(`&;vgQ#z@3%4XP!}cdsx`48xIew7Ax zFv^y4=N6qG4EbVobTiDZ+PHOK;Sr&b3P*#FL&9_H)x?5M2m4dOb&}G7w2DZYz{ZtT zsu@7CyFW>?Q54+u=b0Od7)lpBH{(#nVW;uljg?^Wo_?jGmPOv0qn7U**W#4~Zy^if z&X5i#_6_SGi@~y@MzMs=$+ZQjZqfmk=NCeZA{!wF8kL$i*|frx1eI!N){^|~1(0{J zQ@4J$r@?D+Zv@L>4gu`MwXKysfH8AE(JxL8&NkF;2p)JrR{&G0iV|~o8FhzUbk&1Y z<@k^p;0r~WgES!(AfWG?wvu&FlF?)R_0Fu}O4>>@^^bVFYK-vK_#xGqw-X-{`Id(Y z@k5UI(zIL7i}vxtj8Y*($Ag`&c_kS^)oPTp$db0H2U4bG8!1>)3a;LS4Org~*q6?- zq1e|14BDF6dbus;6@ts9fh&xu%#kO&=3v$c=tBW-7^>Y;lo4b~;>^bw!!zG7RtwX%wV zBhjwdH&>WBw3VQ`mtS;nN+WUC^nEkqh4HtZSDxO5>O3}%yNJ9i@ek7} zU4d=wZ~ok5k8Vs@Q#L$A2ef(EMHzJe6@8jj@4+2m(dI=KZASO4J(-YT6yfF{;f{^^T;Iim#LAX<{*s zGg=}S!6y9;RLyZeqkExM?Nfnw8i#oaq70ja&EmZim>%LMK|3C_!ieG+o>lntUc^dj zS#tSI)&$oE_i=qS5tnqW1Q7>LTqPC0tORmX4iNG6-rkx6mpj)l>ki-sCl@Gkr2wTD ztn#Vg0{zb*thRT7%2<}OchvgJZKQYv)SNn>^XQvv=^QfjPtzG|GFvQE0=S!s80!uAH!!^hzB~NHy+NF7aw(LD(W}sek6#9D}He z!fC6{46Ve^I<8!`{?@HTywbWf=g%o{HI^8&7kbplLt;v&@fpE?pht-z(l1outO6oG z^8i=Xqp$1uh=r=yd_~sX#hG6#ZI?U{asT%Nhv|cb^M|-M zQ1bB=w%YX%W1V=~2Q+V@Bb$s(kxkh3g*nb0@*`b0qH%cC6xZ|TF`$+kj5hR!h`?Gil*$y>8-jFx>eL-?` zlO+?sRrrOx@HUWeS1cx9yfUmFvn+?@5_Je3$$q9L`>_5O=LWadP0p`oCYfK;Ro}c4 z##|Hq1dG@mx}6#(*#@rTMy-iTv-v-ryz;JGm;;n(X!M3Vif=JRTcAl%7K=DPZ12 z-ypsIzD_JSdt}k+ie?wl^Ucw5_6_ArNE#pjy5z(;l}o@puf)aS%|U!H>Cc__cDoL? zev6g3groE`&EGb21)Qc^s@(vDPXk;_&ebz;W$8VXKud4BC;s!x3ES<839{0|*h)CS zmE=kehef;IOt=4Z0}d_jx;=4|eWQcj6JO5!5H(IqKE$^G>+L%=JzFd1pL6Zy$7kcT}(IQg?3u0`{@|3M)0cLPX_$} zB{I=M#r|uca|)-!SDsW5K`!;Mjx93fj92AEl3V0kwx;7QofnI=Pm{K(%1c_<-06+u zW^`tF>~pP1ai#^zX;rSIofc|b0i{zMcitN%>p{R-xh6hc9EXLE%YcIF9#sBD(pWE( z5+$O8v)>#s^H%JOG_qW^Dt;R-i_m zc?9iN3P7V)6gA>}slA=vtlN3E=GZEVf;{NjuV+p=O8MCut_eeQ&PFpT4|COpCM|~M z3ft9Y8cS;EEEwzTV_lI9-9$=Rai0}8FVw05^+x}+IgR$DA1KZGE_XK~kqo5E-zk-{ z@;vH}`lhpcuFg_*S+$0gbp>1mog=@G; zberq-P~<3XQ5ATa_uKavp?2Yr7^EVG6$2_t!Qk)o{+~!#)Nz=f?VjoVd*QOG=wYqJ_PP_K$Y;yIajC^k-+2*-RvfkM@H3sNLY@d>5a{P zOf1ux>XQ7ro*(clB~2j~4(TTYYTqp0}w>;+m*Szl}rngyw{8o#V->Bh-Vx+@DXh=`|+5Je_td*Je8mC^y`5%!N(sa5XWSP2o{&V(uA`x{0dViTzVtvnq z|0U0ymyq&G;XdjPMkYq(oH;=RxiXGP$M1`f?0`}N882z0sv=01E6ZA$$Ju zc7j6(jZ=(zwJ~|i=Irq@1KPP2xw@YcXJTcnR>cjMP@7WgoRtAv7akx7*i3!BPagZ({A{SfT6FvW_{XLv9M z(Bq1}7&m)2->CBZvJ&xGyn@tHcQ)%Zcc}3)uLWLdsnf+dP{2bqJR!^U=x86381D92 z7g`jW@3a2GTg!)06URBezf%{gLnZ5;&EtRRVcNO@kUOfVzU8STu6_KltW;xr)%?6r z2uIdXb7+jKeOYL5jyq?V<)Gp;#T%w5Z0%&#S{qW;k|S9;m~;8*l}|(rAPK>DfQQiR z(Zsc9v1?n*%S{JS=N1@WIc|3brgT*!HqhNMv;E)#OBnQk^Q+U`)>rm_f))az`dEa7 z&`hvJ`Ojh;3}+h_mMo3TZyc)y-Wa6nAxA*ri$Z5|U90(~Sdsql#f6&!@qp15sGi8P zm~srejwCD(`{VK|yxmf*^;{hDYx~Qbtlu;lb7s&88In{R+iLZVK0m?UH+}EqeE#f3 z?DdcWu&A<67|DOaN_&Qzmd|AHSF?7IDV7 zM%V^a5Si8wFn7uWS(A`h_ipr36Y)A8iemQocSKY6-qiBKxMI43+t#@oeETkjN#u1* z-&8){`dNkIs-%=-kAsI7W-_*`SY>83g8%GyzMAk(Ny22ovz~F9N>20a!d1+ogBasj zpB{h)xEmc9C|M34GP`~i+y!=`@8z?Jt|NXRNK(JoT>zIFeL`tCKZmrBC#xY`QMQ)^ ziCFrH7}OJODC}1>9nr7ZD#a~_HP4+CQmQlI3Y#eNV;l779s-zojhdn4671q4>f=w? z{d}3Zi=5~?DD(CJ%n}I$$f>peS-bI`Q)}oM<{t`F;Yw5aIy1sy`cp#emd8)6Qlu`u zYRPxzIHOJVRZ~?He;j9Kub`ph>=f;NoZ$wu$EYsG1J~1-nJ30cQ*_433`*>jG%*y= z8IK%hVkOz1u-crEwVC{rmB{XN{ z;*srznCMSL+KbD;sY!J?X`H%^qI1;om6^v5*;Tsh`J7qT7@=Qc8j2JCDjtHq0a+pLO+E4`%s&bzr?7XnS9ctK1ap$uir67bv#+QF2 zUij^X1Vq222&%<-u4hv31$N*`ZiN0aivSd=(&h1f22u@nBVtLWnq*vg$ryqq(VJ2s z{f*K5+}F_+JX-ZzKs)MUtV=W%x-olKRAA+7QW5;BLq2$I?+_&*WK&H5yQa05kGn}_zfypMI+UMdTsR&ttCWyNhR34dRD)!f z8eg8~RRKbvzax>wA4FUyrhyCc7|x81NF69Bv~_dy9A^KgY9OELcx&d5-#?X>=ubwQ z-O#mmD0TKH6Azd$??GrCDL2+o5y7v!6ffeOr+EhrI^Y0$txF`~WS$2O9_l$uj99O= zgHeu_rNF%Ro~;P}8GHf`*)dB$Fa7o~Xz_4v&uFfV$k|72cKcccI{tr;Jh+|4JVH%z zC$aebDSr|h=MZucj+)?KKi!dr;YDY4ZEslopG8?B6z&(6qG-5pL^5j#AScng88aOF zUtA)=0v>d7zNO{T{uk%C3r+j=ns6cc?*kcmaYp2RrZF>Y`|ro90&i!MpmX@2ed2F2 zj)V=|uOQ^-zrIM~<0&Ha-2?k?1=w7tDh#JG`6uhY4<~3-MPxSDnIyOF|5O4`T3NVA zj+{MqZybR<)KdyM=}}t_{ja8j5+=LMSAIJg{`I2X$0U|0JwIRA-#ieblEF;JFu#6G zy8qQX_>fU)D>Fm6{}+jb6=c00dfj?^{|z|^;Ud{fBzy<{-QJT(d%F>~xbMHHHV`)E zhXaqu{&fw3=Quoxy(Tnz-;|L^c!|71>#cU({dapJ5rVX9n`h#U{q3qT0I%@E)y;z8 z-=Fk9fYZOaUm*tGZd4)j*#CID*Kj{m!sM&}x}6045OsL}^I;U}2tprW84nEY2|_gZ zh}yoECt02%-_zR}G6_IrjPO`Kxc9jeO3+&d@^Kz}29pj894CoMPyV-wBs7r*s5eQ} z-17pRNLGqAVOeQ^dvUlE&ZtQ}Q%@C7Tlptp^*5-jVFh2JZ2QH6Xa6@+Lt*vZq*I4z z5BzJIa9G1AFcaNzWZe7i$jiKAdomJ#K`8F&zb6ng_~+skLsA(3^@7~U-S`I_|JZ*w zW{q&9L+!6yQ2*=gMBwdiGqLpjdlF}C!bR5jQ|;3GpHzz^jjl^-s@T$eA~*z<=`J4*1VM6Uq=`_d3av$NmR#D8eVP3EA+`{`-@XVPJP>{7B*5 z|0E3#xX9;BqwD_XK(CRUc{0Kz<2$?m8UoK_a1qP>55)iKq$d)R@T8MOygYkG-Jf6K z87&86B`tshxBnN|B%qYfZW|r%&7=EoD2og*l0%;7{vJAiubB{eBU30!ouF*bp#SUF zUTD?kKsxokoYeme!eG#2?2cd8IzE)QF65nr>6Qoi6 z-@q$82%^mW_sIKSslvbB?m3*>)af~C_9Sxu{)O*9TzqHR%D+Xf7@!Yf1E&Q2OVpi>>Jkf_k;g#Rf$BT_x$-5|J_Ft z%&b^8QYuJ^&Y;IYkux_xt`cJvbbolgz{pOpEQm=#D(IvDa>W1h;B)oMc0on zvN_rs?PD2-2m#A2iGq+F_|MAU!Cp#}{K81Yz5!n!1Yf=xASAknXpW5O;4@3W{C+Kt zn^C`ukVXv~CK|wN!v?aQvC1@T%QjU+yAutOZ@?Yy4G>U!U(yL)q+%4`S$cW{k}xMS zxs}+WQBd_dEfbtb!$-rPOD4ST#job0`2o#MI1M#1EC@fv1SZI=2~5HpN;4D}Y#kUQ?dI>|u|IUy8A$d#B6@Am#$m>dRBj zg2yAxfRVw6RDYO((mpu_crang{kRS^-Dq{NHBh)d1VOV3lxSCl==D2@3!4Jt!OhbSo^4I(Wy2x8D6C5?0= zEv*=o(%sS>0z<>O*WUYmH|Tr*=UnIW`GQ^pGqcuu>W*KKjOnRFyjub}4nt@VvaJBw zApEO0X=GuSR-YLtRzb$glMEdRUS7&88XuaGa@!8bvDu-c0jff#wo=vSI01iq9U;0X z2%2bvJ=J%JX?6EgBv!8$b&t578=F>Vb9yS&bGc^#anX?u=lpsGg7N~>F1C#Hp#Io+ zuDA>9@8j$y^YGkfq^n|1??dml1u);N(<-Q~0cdJ(FUloW6TAOAF=3*xzd*QfGQ%hxL{tQQc`vQ~I~~gB{n{Xyrc8iZ z-`yQ5<@-;M5k3<4B`4X?^{fWFA}$!}hY!i@M*)1q33*ynDs%}xP4*N-8%D?_!ZR`Oyt1M^1C{oHC87r}czG1m=c)0wSejKDe97#zBI zrxSx{#lD*g6x?tIBc(LQ)~ebE5-r^TppdKz=~#q9`9MFcq=~Bi-JHc0aKn0spvd(2 zp8*A<*9ST?K2-cXD#cO$V3~j(T2Ist#`3x|1)Wa5-Fq{|oCJSyLU3tqIexO2%>CTd zjZ`KzY>YDAtPdQ43XH5u9{><$<=;7Ej55dHf3vL=yiPJp9Xg27=n{2w5v{TwcLlj$ zFb4aEtwQ6dxgxf2fATPl`U@PVG_hoI2RFQrVSjN&_Vo(CFz?nlv;a9OlD+CBrOK5@+rVwF4!*Koga}&Bn}aBfiOXM25gj8z=?}Oe_;bIWUc}# zJ8u!|cT`#5=?8nuULLw=(EV0td=bK`8UZ2{WV{x&Go4wcU$;|xZjEseH}*$q_FrG^EpuhW z-}#Js<#ce`;~?YE_^RySYp?H!DEJaeggjQg>~{NDDp9%>!486-PEc1_G){>QB{U=0 z5ySSDdiXc>V?4w_v-&%V!d!XU@*n0$&_B!%xg6yw5SG|l7QRbv;Pbf~EI1Vew) zaV!&CIO)x~{KU>c%189SfcJs>Z8MJ^dw(+4bx;EUfT+or4K~U(2=C1wyTu~QS}eue zS6VOSJ4K{LWy$XRE}b~tT94;0LeiSy$NIS13J0UUVEx0`%qZSQw+Z;Ja#AU zU*<;;Q>G6g+l=abmqxIjNWe6i{^@3G*)z($E>xnIyaB;krA+RM5Csg{zO%MH>l(X2 zyVr<20vtOo5Q|<+;W; zb9;0%MR>Q4?=K37-#-)((iQ4t41hXzwqnp(d>a{Ot+)_tYjeNO=uVpd=M@r1cr>~} z0PMtrA2R0N9hpF?p<*f|jrW#RAI0v`efUBm_QMW<@ln9;!t4Sp_oW*R84i=cz zz=`$y=Ix%#NL6D6U~)ZqCSe}>mMys_@|fJK?EOp@1QDhr9PD{bDfpQLeaJ_D*Hpb^>2hh6*bjlWwip`!?@WCFBMKjUmv{=sW#_hk%$z z+@>HdO306=KN#US<4Sm_nizRXN+o5zR>P(6itF5eWQB7RoK>7-&y}WfwGrN3qxl?y z)+BgJc*6U^l4>MF0ZZQXEABT^n+9hIZvz5S9|UMz7RTLP2-9Dk#p^(S8t)&b&olDrEws9O13*gamxQR;kHJpv!|Pt#xk=>45ZVU^C8F=3+~ z(k;tyvKQ|ztc&}dfX-c71%n&U4B6~psg2EN=9DO1_IW_#q8f2UFB=khdT|1+aCldm z?3_k$j>i}rIiI+UTfdyQ-Swp1Xh;*Qp{eC6M%t%UCwCPvo(y+GyZZnd7e#XMc|EEk z1_tn4kwPC;Qq*2nB!FkH@;Uq(Yrl|mdXFV;GijDnSUfm!opC$DH1_C`?xTg;9_xIkiWq@VI3B zyn5^%C0v_9iFW7xlfR&?-It7~ibYQ^6|j08cZbhVEiE5n#M>+2m2yAV3~H&xllrU` zrL<fWav!3CcVqzKRbTF1;Qubn!4R``eAA_05F+OD} zOruph$sIuV4hF&4J_MVfkeJ)DP{&jtfjqft2cF&8fVJa%T>uDgU#$ z#C(j<;vCp~vP{QY6YMbDWF@zQaxozNaAycNy=0bRIrLuIN(G3JJtCZAIE6eJ6|X1& zeNQBXY2|g(WiKd&HLy#IeJU9X{lE)kpq;X%WEm>l60Rz`RWOtc=rTH@ z;2)oPU9fTYJh{u`X~U${x4jhSS(EHEf>wOKScX&Dx>H(dRMel~KzJfbE$fXy6X{C% zCf6glGvh_KF?-WTG`dSW*!w;qUzq}oUA+`lau;=GZY$1SJmr5=|IKjDy2JIl)rEn+ z1#!z>(FcdJ-8fE280!T#4i+kaiTd>T{-@_BBY}F2%HD=JxQO7r*JA_#rDRA=8Z^8} za<8Ki3-9JfuPv#rtGRb?Rkl{L#%oSKVbyyUzgICqvO~g=&Q#@s>8U}vrBjOq$U>$; zZ5lU8&&Dih10Cy%4*JU*j022f3mLmsYynG|%42-~yMQIgZ}EvBJ-`!DVlflbt#`ZC zcvN&U@T4HkS}AP}_dQPii}K_SIg;<~(sWE4u`0$L#;t2lw&Kb}7;L*#i_O`Z{0Y+M!I||MVwv>AAP`WJ z1YPx)<4RHs6Ia)J-eNoHD+d_I81kWSTWeZtU9O?>?6th&H=N@b%>?ScrjY>4=#bcu zyCD|MdfnanP6d>@Z%P!I6t&x5?_bN)$V9VRvxlseuE~^T#cxS&DpU^*4ws1qL!^R>Thu9;DIA2Iu z2Api!^1N3=uJr?$&^{xTc89@dn$j}7^(%Bym(%P@*$0C=(F)GM2Weu8&`=oHQkv0D z+Os!KuRk6NNQjQRPnoYr3x#-sn@`f-d1>lPciu!WbfaE*aNlG zerXarrnd@LPT}C;-bZ{Vwz4FUWwS=et0J-V1|elrf(H^0o%@#=q!vJZQpe)*hBzLD z?C^P3+@hYhl$Yt>-py1x^-DV0@(Jxel79P()~))iqcz?s)fi7fAJ~n_>1F2#unY`K zSe(54E)krZFG0!&zMP#3$8^GZ%I9&nV!lvo85N1T;Fe}zVMg4Y#XqF_P)67gzxG>d z*2*%&1NH}=qd>;20w#rtgcKQ~bAJs{{GgmyRoBm3+iu#OF{$S9ln0{>P#=fbBOLeO zp;t@f_Tg4i#Jk#JC0X9D&H#rrK;%qe2b52$E!Op1Qf;qn91iVHd2J2Z;wzQE*&iq+ zr0uL(6bmC2pFm{7N|L_u&gZC?L@0jNm7@?Nr7GWtuBMeRrkt_=R;n1c?VFL!I_n{=&{nS-P-mn38B`C=b3e=jRR{bh z4H1_z;*JW?x_Apd7wSh#Mul2-b#wwq0hXS+fh7uYPB6JhFub8&&mjhKI+F3 z<{0jqQjRf3ESN5OW}Na(osCv8=0^D6+>dbT zG#g>{cWt=Mgqyq4lm+XxN9k4X>YmHNE9zNQ$GdB_)v_1!7*W$M0f&Z6Yq6~gGqm_X zY<#=soYVbep+{wSoE;Q)!pwUBLd&;>pnW!H9)0EHwfT+@fEGH4-16&m9mQQ_vfu!WtBG|u3|F1B_v&)*AO4)kg~jV-J&E{uclXz za;M%Q$HAXX{*DVg&hp~hRW+L8gxd^T4Pyc=xq9MlDRMNCoZ4OVHg{KP!2B{gtTZ{{ z{Fh4f?$#Dr5AaR~8t9#wf2k-;PA6YE?X@8^>T}(U-gav@waS*>V9pA)87q;H9=*TKmWcpFQcg*Gh&-)xi&3vme-V-=rv}+>_^$6$Gn`v%zCGa&tKz^ z591I%T^aU(ZKq;(6r2sYp!#$xS=E~6P!RAMYSY5U=)Dfs6fRO61N*zASRnua&X@Fx z9#dmJwI>x=0XSXOYb>RI5!TYWN!+L&c}dybs%m}Z)U+c*TP-|Qf$sW;|H0g4ON`$ ze;*Ufit5&qmjk8JMt7y-i=VPVU2Jdxpu#O5zU9&%cU{*45Z4KBL{~*q%7ukc+gejx zE|I1%fQ5KT>;WeTraZo`lluDGom*x_$y-2qyte%m=?hQDUsf+LQkdB|;u#8LkmSk! z-4C}?q8K6K4)YQTyZwrilGr8N$W<)0!Be88fwP1CRUnuGm#Kc+k~TqBL@wWq(tSUY z`jK~|nmd^a38)E3!3uqL7hY+4=L^5+7+rwlW1^RAmCT+ByMt)WQE_J+KVDkMYNrR3 zSu$55{8~RAYFW7TL%n;lF@XHwtHXCMX3M7;6@$HKPkv$uwG(2|sA$1)3JC$<$EWos zTlcQ1>qhL2R_?7syxomvioYqn)Ya3Zle{ty40j#xG4&;O*yp=*} zOstYEmqn#Nj{kgh^fZ08Hlnz~ENR{xRRV4P1g;dR@I=hg%tQ60>kqW#4e+y;f#uk= zu-~h#VQ@UF4r)9UV!PsnAE3_W=p@DQPVr#P8>mpDW+v9+WYeeVyJNdNykmdNr!mdIoTZ4?EU(ZjEA zrT-;~oGk^C2&b5>6haX}PT*v5#r4t5g!bDUl}z=T% zk|%gv3RH|-ptFmI#hKI`dM(5PPya^c#j&=OuGkr;%W&Z98b*;=fFhn8Qqw^dL_i^9aDlYXEZ^4w;NNqBtfGq(hg5DZ;v?M$0j=PJ%?FW3$1FYSp-SFS z4wXZmkb*nVD45-<6tB*?8=krU6#c7?vCoRo^ah}@hYa&7resDV*`6`C-ai)ZVISU` z(Z1j%foP|j+Z4w0cCd-jva1(e(UaPjCfEZOR7Qf_W3ym9I0jq4JGE^&wQWvDxDQk` zxUf(>r>$VPIQtY^tOChj7VL&ozU_d?L>>YQePRs^(Bq*UXDvGjNW9cKIgS$Qn0BO- zZ27DkMA?qHu+7+KG4fujMIc~9-^oR7NfehIbx)SV!;Dx{BT-uiNI_xRsH0eR17s{Q2uRO^$r2Wfz>CC8#!yzbb(2>WPa3Gj2` z&-*LOrVSuf%mx-(C3oL^C<6>2T0xkUFDKXJsv}}0m1Bfm(W2O{(WiHy!Lh|nXFCu7 z7X3yh@%|=fzMc$xnjMB(R{c`!6?*9wj8~&}sZAPH7*hN-!b5R*+7bFOq@#GtcEREG z8sdDHr6zj`YJ*O}U5WKy9*C#C(sd48n)8cjc5W_zZ32}DtHez>A?Nr*jtzw0onG`^ z>Z$XXv2Vs8fq_?nz3Bop zcsKx_b(&RcTub@g3X}X-<=l*(AKS`C+PGB7XvipQ}iSYPq!q z47CT0WW2$zSD*&>#<5>+sq4pJg%gFC4=cqN@SeCGjkfBERXmHksW{_wzugw!{o?Aq z)}0VhFkal_ZJMN9r8{n)3V5l}_j-+2Sf{q2dE>QNrN9e5hf~67(#CYDwDU5AOPv=Pd zyfNh5W*{MNvV1XU_z7qVBsON)k0jJ1G?Mw%WbCfLIVAh334VEo)J_eC+lNRbc-E+8 zCx35)&K16Op*iWt7Rj&8;!8&}>3&@2t&%7h01CbjC0VufIG)hPL#NJ-2-9ri7yCC` z7Gcm}kzYrI&CKI(LLDg-;}kH={tADxJArGOu*F@PIX}9&0`>#-$!IuhPm(mvl;&|W zwY`#NUSXIz8IHY%ctfEE41=ac*H9#U74ELe%X`35L3G;ke)wnEbZGE|+K4otJ=*Iji)53W>Y- z&-(RJACjdza;ycK#p0uPm=EUZUoPW|r`k+X7&_JgeLtA5M)Ot@HdlD-rc=U|&od>^ ziu(?+zZpT&^{$p9=n2}D-7mZriP^2!PvTa3O({Q0xf1JMMVl0&sBu12%^3(mX)6tF zbjUtd^vQKcp&*m?Cy8cS!5-mubX;U-fqzA?Emj<62Eg^ zsU1%4oKF&kDJF}1+d(cYVWniYJxxzckZSs;VGyI7Z1eyc?Cg6nn<1ym&Z|td3xp9h z%yeX!+v+&EJH^^-w-2)Xwctsjv9#uJ$itW3du9A@%6yk@~V_rO9Mgnl%sP})f zNOEONT)kSubO%3k77EYs)hf$v?K&^*gQ&uM%WbP{6L0_p8m#n|>E_u(ePwzi%su*A z`4A#U7zuN$_*!!ulpI-;Dv8?K8eZ&TP;c&@QBFiVra#S*XSe*si}S$|R1!?&&J!1A zF{uwIDgQN4s?uk?xL}gxn3Fptk%mIewWEcx55I|q@d#^H)n81K6zOonh+}<9V#BJq zY+m0wH#_p~vX#)2v`}uye>{tOd*sSHRf1)c6i&j#NI&=H?%F(FQq3ly-fCTvGgl1W zhKguPI!h1IDMqNaO(b1sd9T6hPF4(;76y5#kU)`t`6On<1(Y1Yt=hK=C@(y&Si2Yb z^_KZ5BALQUTY+a$SIN0e9tFGUL6fDnJ%nYQTU!WN2uC)mN;G@ z3CRx0)eWziJ!8`RyP3FxHCl$11-(I2n;c*n@Ob zqaQYcao&(^6uqlOK093)!*l<&b;-(!!Q3Q>6fmB8D5 zMyWkRaTw`Z7S#fr)FgQD{-p6;dI!kTvWTA1O6z+$hkcmk#toKgxf1jtMH&nG(s6=q zyAWb?fptr%AeOp9l~f2@pdc(zkU>wE3$r@c*Zz4b+AvG6N=cWS+o}ncb_@i?D zw)8FcCi`YzpA4tnSyOLGs=xD&cnjLTg#^DqEFfPWr06IU_P-WF39Z5cgfb@({W$Yq z0E-X%a??=F8}R&T`U}}5a#@17j$R)_)2a}or824w=9**r7nUNvHS52XKSAJI94mRV z108SQF!tzD%5l$9HGipnw%mc-d)vYKv=rWSHeMO=^DL+c zvn^{*Z0v524{BzDo`-g`VU+DPCyW`)l2~OG(H`A5V~bkJg7^2)wbLTvT1-UPhueQ+ zuOP}qe^6vSSX0myzbr0#Ui`|b47rgg+Q*uAOywUW;h!UXiL~@0-4W3Bnu`YQ`!8x@ z`z$jzVJyj)Ku|^PU1QR+tVJ;8IpS%iK($>t(jAq`W)~@o1oYjg&YS#71(}V+O<&6! z&sfgl^5=bG{Z{744Mq?uAeJ&KGD6xh8-u&OTB)}*{E0`3JF|R2@>%fz8w$z$N+{ha z{cjQpc%BsqRIFDFasQV{(yosXNeH*2rUiktnPuUT%SwbH6Q5ERv{HK$kY*cQ$7R7l z%rBn2`it-JC`4B8!^ZE#XCCRf-!E7$Z)H2-mHo44%`}s6RST?3B{RWD``6bn!TNug3 zyEl^f!z7rM0Jtz}UFeL#1#3Q(uH^cWFHshdhLVj z#QYT1_QNypBS4;-2Pb=#Z2GG~{B%wr3@e6`ygZc4wL=i_9Zst+Doq7!9-aDap&;ql zUbo`)g9}B<{TVh&%$Vgxu?ISOJL|Qy7_m6F*og?Dt^a5NY~EcBo6fWlvsF!*E;j;F z$xnqz`z}ywwX;sokdqS2lF)kq38u_sW3*mzMe{icWk={Ze+Q0_u2S)h$Nk-0=Dl2# z-?1fEZ|hdI7P0a8 za`Dh>p81VsVYd|!l07<3@Ak+XBYN$!rHr_Ds*BV*dyA5|j0CY?sWxv)vdt$h&myt3 zgttAV7}l>VBJmQyj|_>&Oe)MIoH_U~F3M}b z>EUfEV08BI%M;i(KGk3p{|Eqb=D?XHe_(Xg+N`5>H{!|$D=kp#H&ME~-MM-hFWA|y z3jT*uLjGS$$+T$V*MkQVK&y12=-`j*GxFQZzr;iWrvL|%Yy8>PU;{d((K)ILpi%yd zVFOZ|Uh1pwYF7+?L@+eBZm2Nn??R?z>Oa<;OL+l19$!AxAL$k=?|}#dI#`_W>UBhC zMcFs++SF@OURj;rzRH9T0Wu0zuO8MBWHLGCHK7dx#Nphgp}upfCeyZ^4{D@i1bWQ! z>Mn~7V5}@O03J9qQED|V1-iogeLetRdJB*qW&5C~!q~I~7ocDo4my&8p$5R|4~%(- zf9Po*aZ>~=jrI(k#9`>C+ndYHpxNv6t$fx4{A$mVKf-kDowN6BqGga*0tuiD5RXfS z0;~bBnv?HksfqC&17K?i?kcEWm4oiw1mfll5pb4skoNDl$^^Gc&iCHtFc6mM>@kp} zi4MPE5o6r{As3q6Y192B`8|MByPL4AKUfb05JXj*DX$8^=O{ep3)oUGVE@CK3p^I4 zX%~)oDW-8n+WiKIt@VV3CcE+U!l9xojCp;ChztqH2M8RL5BLXg7e|bsUPn?}3=ZZO zNDi242fd{ZA#AQcQMB?Hn6C}!Q%C;zRUW`sW6yHO{4Y2xg0_}yO=SE1iru+T# z=z(D-Y?-KhK%446FliBK_&g3b1t4~r}vfwtTFA6YzrMQ0*EHa()* z!sYYwKv6}Rwiyi7rK&a$=7(-pK*`X~rjt7;`;iWOp&WOQ)Bk-$aZJbq7=Pc)^zQ|@ znIJj_XPX`VAW#Jhx!EvY`jXO0qvZIX8~Yb#%ftGVVdbz`$D4fCag}eIC z82|I%U~X6?dDLjWKPd!ot~7;GHvKOO0T^QMCrT*(!C(p|K|YQAG2iJ!`SV|ESPHIA zjQ0xHA8aHqgg>0?k3awCB5rqvH*vfAOkeu_y2sq$P1JFUe>@}ju3V_E)KrV<{QF4% zxtfprKs+$~A4H0a@&hoZGMupC*!led(Zemhq2wVyToOQTDOCa9WZM3u^^ii^UpI?9 zpj&|xg8v=pf43WKfI^?6{cQWk)rsK1oA7V;A4X39bvbbt;hRpohle2_esB;)Wawb7 zw4s9ce*eu8Y$+s6oAxEUda!JcOaM1pWP)Ko7a{uXUg0zJ5t8P2#v=mKStmg+*pA6v;+gxL3?=2hpP zGp`;QbzUD%m*2RTpskK%34Xz+4uL8D9`@Iguq#}?=5>JD_0Pk)bL3O3!=DT3nTRdS zlbi*D;oUNYymc>a5gPzc6d;j^US?@uUB9vMBci1k0m=psH`gYfG! zU4LHpC3w^A;U|X!jlYM&9kvm690RSx><9RCZeMslG8771f3g^v1d-k0hC#s}!GzZ{ zcoV^yV=@OP*5Bh5%nO6W8GFR$aN8IDFpn;P{gW%g1vYGoF+eZ`VEU|Q=R3-bqm1Q- zAo`@i%TB|pj==yFCsSXZU;3T=H7*Xryz?!J`nPeBAV2`*-(&Yy8S}xQJt=$q*Ek@Q zc|g0UG0E$V0}oJHevLQCfYR0v0Hl}!!XXUDp9a10DHB{3J=;l=2!CXN6=GX^x(ch5 zWqmvTF+{Tb2UK~DUgA-is6mQtRj~z(jrk}|knJHf-UbrLBj9%jNob}gHqUMVD&U50 z9zcH>J5RD4UX5=c;EWYeGC4T^o&|QVeZ)HVHtBAd8u{ObB0oGPK;50=^!Y2b%2#Z) zt7iZ|8o3oc7FJ?C89}P`^wT|ub_MZpD!cAWbu(!hj0I-lnnPmRhBD z>xXH6M|c6iEaKlkNvGw4@Uj67PMB*mt_x~3d9&HSRP^Z2`-7SCuGQ4yb3DFOHM-fH z-+V=yi%=!u^VIlBk5vsYb3JxhM(C*_Gv0KgXd|>y^c?h-vyHwrA>?-f2rk?$^vb=i~+$3}c}^qWBQ{s>E*EnHslw|+o1H_YKFL+e7V#)oH&JeDjXc4rZz=VX6#061a zii8qm(++?g*IdS-wqOMH+sw;*~!Z2SzAMu^u z7*IVAdCrH6MMQ4J+58J1J_Eu2n-lY|bx^2QcjMkY%4=dX*Uf>9mp5A}QwrMS9`zGz zP^_PTu33@wI>Jf`QLGyKo0Br4#^xl_Zhw}H^NaM`YnR@C;Eb(JLuAazx?(V&p-Y)W zxx2$ca*nF)lK5NcdsMUc8`aestaxzq0AtsH=m?@r`38RF;=+E&elXhxs*= zzZ6a?@PpzGs8wsWRk`lV*Wl_Xop=eIkvgM+li_(+B;wjPYU%y%#`OV(8<;O`^Y;mBF%r&e0#N?Ft>XO>t0W{%4t&Czp+e0wftQb~4tz;qAcx}B5hh*2TLh46|QiN^# zn>LvMl^QIVjp$}?CfB;=jO$T7ot@-A6lV>~ z9r-jAds_A2DTwd=ES{VpfJLQ1dOueiA;rX>+C$o^$AbNi1T?EezZ}+%UJY_x2RQ~a zk3y4sHfbJYo;+Gg9-B))KhHDZsuN0)=qwl_To|brSA+CEs;Fw}2UC4~;J8}#Hxout zT^s;!h&MP%IG~UXy$ui|ARrNBq+SOry@*fwib~E6qH6@lg2%2-`x0L|2Y-G+dscZ# zV|t}J^I}3=Ujyip(JugA3FDEZ;t(%A}eIxxT)&vi4wCXlD>G%cwM~m5R)t)41(@O8fs6(A2vfib$WZCU8Cl?NNg1+>d+%cUn#|sRI)O<& z=bI8mGWL38LP~x+s29t9#=Z;YaD^--(SlneScV-oD@<}1Is3Jjf=U&fq6?@xEz1<-;K^DJlKl!}In&tc_nKopcJe#ZM8cKUm6$(?CiRv$bspRyJUeC6pD_9x`@I&b|4t2|YM< z1r>HLcqqbgce!u~&l8&3czEIO(220TqXie0_`qij3R;F`Cvi6k(_^6c-j|Pv&Q7^b zPmnm+Ru;Bq!I9KE{WTNI$Kx9A{cw*#MGbLi7?03?(o8EGe|YKVgO;BEc&Hc}_=6&L z3>KS?Ih^~UxeLsK=u+kkcS`n0&4@m`&bWvVP>uBUYYkm;+pEqqr#DZ zdv{4$V1Co5&$G-L+0H$`tR`-S=LCq+teY`f#n!EX_p@JHi*1s6L#VQ!mp0u&os`y9 zWeJs8X^+S^N9*_wv**O&It!b7d|D>SXRkx%uNCnZAk*?QAtkGY~ww(7VAMvJ+Lw_qZM z7|#Gy-4KiJ(ss{`z-5#K=T=C|`}yF>?AZ^v3dH~-`A}+KK1$^~%W1LO^WGRRa^#95 zyjPpnBqgNpe$v{?+zffoF2gT+L84^6oQHfd;W5_!i_@gvt`Ydp8TCwjjBRpYGppLg zSfZa~MqKoM~on9`WcSRDf7PLT{1kH%|4hCVtXfTmJI)f@~?AL z!N`{N;f}&o%r0LC^V`UnPUp&}G1l`t({ip}u`8Jkk$pnwje6l7%>=^gl_p`DyW4Fg zUUN*}Jf% zJUe!ZDekWyAD^DTwnWopIHad4a`ZT{Jn|z|>{)<2?<;1vhMnd#m9smsz)yY;o`&CY z!j2~x?^dAAZ!9qm8{#cObi;m){LS!lg&-IewTG)W+K7pLj|c#|ltRB0*EjWzNSz*P zd=T)SKVOh);dp3fz6$(;{mkL&j|Z~%KMAbqBYk0Sx`CmMZ#T}L7_y}%N|40870w^M zS&d7A>u{k%=B=cjGE2Jr^z3(*Ys4wE$ZVw> zPVYFxT8qld4mYKanN2$j2_rG;g_A6G=<%Od9 z^Urjg3RQnxqT@|;tTBrBy7LH8?CYN_3F%51gd1S~H0o=3TGm17V&dAbofsZ-wKF=* zvyJ&Vs=nKdz5$n~lB`9oha-!k-G}n<2#tFJ(fTtuF*-k}=zqb=s9EX% zy1d2r({eS>i8lh^Yk56+#g-n>i~QrXD%xhY{;XohDgMel9|r`s$5wV6)sME)q< z6bxxiUOBQ(8Euo!!`IXgh5uz!n|9`zfS}IE=o`Ca7D5njL1-2{#P8 zdS(n!SK2;3D+0;h8fI)Ymz1`qd=jp==VDgm+ov{`KGWvT!7)u)4-kA^nC76Ys!Otc)@d!J0CZf@8@l4y7v)JjORA){35RHY@3aIl83@LBwTvNWSjA8_A7f}Zo2lgA`dTS0DEA^cjodE zdoOqnJd0mTTu%#r!xx(SIGLB(RQjBorAd#WEym(R(_%X_>($8h`s-^@74V@cjL>CR z+@7xBThPm{gY-r~mOE%ZKun)}4}IPIq>46}|4f2w=I#4X?r3GRSyfvTnlhq8Oa5mw zmKSley!>!jxKZ}QtBn7S|23;)Dz{Ie$Q4cAeseWq9F|Nlj9iaM!@@CumQ~M$zsYuV zbC`KE&eL!`fj%%Hox16Nb5Vg!D1;l+2hd;=`kP#rGbg!+8n)+(RZ(kmuJ z<>1oDS|(xc=F0Bp`7nsL4)=2e1>HWgo(vrhQnQF8^{g^%m@B5po6JuA8VL_4XB3U^ zPKe!B5?`Vx$}`0eARyhz7w0p48NRz>@?*b#z0k8YaiglFLzO)C+%K1Q^Wi4Z)-?Cw zFdm(1kB>}0L0jVl>QYY0M1&>Z>kS>>{Y1s(%r}O3Zsv@>e&WH#+Pa<$$C5VGxnm5C zxvqb@)E1{~YCXa9lqGelTKm^*jC5J>lb41c$Z(%@ALCQ&Fcir!kAai!=bO81 zp57b-66p)_s}*2_!qS`4l&`eV9LTJB{kxN#xch{m!IqZe0LX~wer#MEknWPNafynS zdOe9pWwlZE!$s6Kv>YWyw|ChvrLR^!d#WORU9`o~S^M81J$igk?&HV({VO{M$64)o z`b*;PD`?1bzbGVAn7tQ8oP>2fHLDd+uZd(iEF4XI<{nXGp*oVsGb%%m@A>o^;ytbw zLPa5@+7}s&lux&&Q?PyxL+~s3sKjhoZt5+cz?lbAA=;@IJ~FA^;!DR)e1G|>s<`BS zpipwbqOsRe)U2-5Qg{Ca+wTGm1+tUs7FvcYi$0}^N+%f7jkUL0!>pQE7q!8h)H1w$ zGiCIo%swTEb^HXPtIy)Sfqhu4GdMfb&9_qC#w%bvM*6i?(rLMt&uxYnU!J=E*^aEP zakF;ThjZ*MZ`Gp|6C?WtE7WP%jn6cGrcUc+Lz*|koEj%a)CW%NVV7YS^v`~;kbQA{ z;fA|$^{;z$72cSP=yimHT_daDGdJNNTSIzmB<~wq;e}f|W3a~LrZ~fEm3t2uUgj$A z4BuBw=snRC6lh{|Kfdi;)B40WrX`5HFWadZ?`6&`s>B}6>Xb{tc1M$k0$NS<=k5#M zXy#Vyz(x5V&l)eJaanmIi`O1)dLfa(>9ol-kDPW=?{U~;r{5= z1WWq;FyJ45;P0nUPSUa2AFv;y`tVXI0qf#B*TJET0_j0h#&yv_M`yW%!~OEqg^hD- zOE>LxCiBicG@i9bOZ5#emWpjCVK_CQm=IK-aXMWAGEuJ93Lu&DL|AHLuPp;S} z&iTo%^~d&EA|F1s!i2Rnr1@BFp?N??DndHeP#Zv0)YOhs@7_a${A9g_p*oeDtDQ?0 z`tkbP3k-Eejd|btCz&7Cg?crj8L76%>Vih68s-dbcctG)r88aA4Ot27%4;A9&H~n> zgZEhnc7EHVDs-*R-M7!PZ0H9pCh#5Gx9P_I=;K@g3e~OZzN)A*Z8|Rr7kv^J3JCD? z@v0rG4br*g#o~f6kwZI|?W%v4X^d*jW~te6an)EtC9rs_KA@@W><)koGepQ%%@W!^ zgHJ4J3jNQ$8I^{?$*fyC7`HfK{#)pzkb7PvB2!F(k0B@Ga``y-7TE(&p)< z?#X@ACj$MXHrL+ih>GL#@h3Vl<@CyCjHWu$6sX0<9*C*pKJLTdIx+kcP$OG(Go4%d zrQ@P9m-B zTB}%fD0UO3GC`b~E_}$__vjE1FIi`jYs4{Jm{+aZ>M#x}ELRMFaq6CHdaWYs=*QZRc`W{ zMR@#rx)7FEXOK&*A|`fcjPWyQG7t_W>s3PraK2kO`*^jvJ6gza=-kcWXQ<=ks3M}5 zh7>Atspwmy+cqY>MhU*UugLk%U%CJOB2vHPxXHLWxkyE|aZk%(yt{?5EITiDw$gvH zDVE0ns(BFJY3cBMh+$KTUzRI&9Q9TP58%hKg$y1LuS+O7Q*%m{U0Q9u=WG_l5NV!;lEZ~ED88;39{oM^F9mTdhT%T*=gu^1v`aPP z(CNShjc=b5kG`=Ofa76-VJSK?-l_|8Ie zCC9vk?^aWRCaMp*8g*Bzf;2C__=-JjtmZj48NDOjfsfJqS^Z*p_WNBq+;u(*DheEw zv3_((Uf&qGL=(T%7SR5fx0m0?`orn_5#lntVh%F~?s8Fm`~}N14tp!k4v;yIL~Qn9 zvMgL!@v~Kt6+EB4U0k(mUQRltq0k-*Va$C|H(68VpYKR)ZAN-}1k7bt9H%!#Q(gm5 z`fHW%yj`e{V8sXjX&aHk=j~IqBClTN*@0)w3t(&svMKVA$gS}4m7I&{`nmX@WEWYR z0qhTlV;4ut4!mY_wK*ezcK$+wHFJiHDc;96&VllxQ#-h?$vEy_{Lz%926J9N*mdbS z&6giY_HY|j*2!J%n&{6Q&T;F8ug`dCo!>LYe*Fb&lsDl{SI=X}hi=BMg7_Nc-5W$w zMW;q_=KwZc@PWeTwL!1vJzx3PvMgMFA^2GXJhkfzIasds^C`wcZ|R~~NYk)n%BUD` z7CZanVR226rX--K%)PG`z23e(eiU`v+CPk&FH`=(v(7s7D(#Y?_EcN}bhWAE{J z?uWe(gRS|IitE}N)ub%u#bHfHZn^GtTAC+2c}F{arWnM(?ZBtkqHwg2YrO78<+AU4 z==_aSV^L{8MH!?_#6^4t05W-Oi1M8}*;k(yjiti+N%q!$Xbsf#ND-QOz1dC6yVJ7Q zZ28*M=UecF;Ax8v)Qpf(Aq_hFztL>m$NMBug~%}M998^p6=JGPg#Gp@Jiljemx90b z4+Wpd&JTf*hs(fE+ugnwjQDho?NRhZ!T147!V~-Y^qkf*=NyNJ{PmH08l73>lTmNl3xJ2f)2OP6q0$H+jVAaR zOkr4QdaJ{(@8Xa+9ofcc$h?_ok9o2?lc~)^oiY0e7LW9!%Co5>+C_W*&SP}G4$XZI zC-j@f!ES_j(w1G_b;Ypa)J_lHr3F}eWH)*Q#GO{q%A33GN^-tRTuW3exbi)5q`s{y zHt}(V*4h|dn)`;@LzQrKy3RsURz8$sf1pVXMD~0HrWKv zwI>)?1HPOxYJlL4$)s zI+~BW9BNRO`SUjPBjJtqh>>GahLcabOS9SJ!KL9tdK7Da*(zC3_P=|b8v*H*t%T^q zZ(K*XjtSQ1cJ<_qdy)l8J`Czb;vOMPuK!nU+@Cl)mt~{g3Q_-(N|i2|3&hz8r`ZNx zGG*TGgf@;OGl#G0sap?{X=;K8iiu=zURrP}%5-I!l)Kne+j8%clAVjbFwq@?haCRg zlP`XK4?b&=LeNVc~E$9mGZ&C0ui>B2-8iK>axv!Tu8rZ}a1drC}Cjig$SoaDIT*8nXu?~f6U z2G}hCR`*XRZ?l6sjSxSGFJY00-Q0uvWR_w|kd`o3Yb9v~;mehEf96wD#9xQL0l(WC zH(GiMU!~L0g(ju(%p8^yVPYDe7lwKJ#xuW{HW+48ItQBI`B$;b|EBTRLXi^9ub#E; ze@~Y!7I}umhrw&mR-?Jy4*pH=IfNg#9K|oHoD^L2Jc@mkT1TZU!Hz6x14{KZDnwk@ z2!(T!hF>-@Sqkdc2Y=HI{v{0NY9oumD@mCaT69c0cUWt>8a}#0j~PVvNWn1bzM6oA z_EZ01b0A5Ye^-sI78jbW;m93mXXudZG*kF1%b=lAbJ2f0p%GPhg2km-?Z>zb$?1ucDb8rd5bADJ$j8_> z7-+$t%W?Q&s#}7IpQM~k`WZXHmXkq`E;=KyQnfN?T+HDjJ|iuP189TUP&BvtuAAS* zG(CywFut7t=11VB(Y!G~VW_lK7AUoqBJ-Ydd?mb*P9<3~w$L%_*BPTiHlh82MReB& zMXliaR##Q!s%g(NAq#S%`gNtR&#EkK=3pNnAFfP#bHueQ?YzjV?06o+b&hDfn<#Qu zim51t&b)QOXsi!H4Qe;mMSC1~r4J?n|F=0GbReBJK&6CQT!c`FL#-l};1Ly2_m)S~ z6OzMIb`dqoA$?+|1kn{W^6*&FMt$)a#h7r;9}d0*(aZu*nrXzy{zP!E6rdYNB_0ZrlQm5xD; zQ-WEG5YbqCAE*TS+_&Akv4z`e43N)wJx;l^PasZ7@L3h}!tf~7g;Hb4w%9*IZ}xoC zQJr1zXwf#d{qE3&ZhKq*+^I0N<)}}9uqK5~-n%VS4tX@s%|(wc8(JN{08n^jf6T_d z6nn!$D-P>~ub;^kr6d)X69sBF+QP3<9nVsED8qO>M#n}iAxgN*a^`JN(Pv^tV@Hbg zJbLd{2Mo75NrDPvcwni28YoM!m3=V{nLau7MYR+6CvYcE-ROUETi{Ca+)oP?g;|Uc zlUmN=p`<__Hq&?1dk0E(BIZ!D@iKc|KlKRgNx88;`gX+c(VpbdYx=vmyOxH+RqGXtg_@r(<(FO(COpMS&VO79JIaQ0 zIT0yScLgw>EoYD-nBTmDNL*M#SMy6ibKeAiB?CqR2=6N?m4pKGU8{X zw%SBr`H5)njF9S)oGwy7A7SNsUGPZs)q5J2UoQ+6l7ITn7fI1|dZjvr2h_^?tyY86 z45e^-%Ldo7p(!z8LYMiSh5v4LTAoC$Z1Ck6OGE0&vl{w=`bVa^pea_S4_yWQNx0ymFVxiE?9e|L8AC{{v)@< zWJfnn=JbxGKLL1Vb(3UoG*O-2OYFn`HMuVUsWTPBPOSNCqkfk=-c zdlzB8O|8b9cL%n%yhglxc^E)hbm8SmN2G!!AMv%6f`j%c>?g2bf-xkNF}Gaf4XJqf zT2#0{zS3Gk4p55EH-79dqXbD*XIc-Ig-coTpZn^{v3Eilqaoq$-piB7$Q5?;$T4}@ zIelW!@pvODQ%Vjhzo?x=Pj=1Tu6kK0*EEv#n5Mq2;WPgBfmdAe)>f9KQ}b>u$LoHP zqsY!!eia&y42zU|YA(qcenc%^ZnXRkWPlXrUQaTY$R;mA{ubhZC?wp*a`>Lzuqa-@ zXXI-^2J1?&tNmafce5FpSn%*J`_OzVhZAv?a(Q>@G#^k^x;8o+#m`YRG38y3AEdzS zqjW6fyh7)yBNDpfrryb8kqj~I&eW%sR#4wy*UM5)XoZawzhlkYTuGG#q z3VX@%Co}Xn_O+P?PeQ5&bC;3-nfhYv;Ad;C>{s#Z!R9Up?_ustO&cV|@9i*KJ@DyF zc}ZBuSaGNwHQh|O3y@6-n5(Q z9UctgBeI*0Gra0>JTu(Qn3* z`*KSs#8f4Jg$qtT*GNt8R{E~!NVdUFgFeN*QYaIcVN5EfY?%}y=DLe4RV7;e{jcXi zO^t0vBH5C*0po#%4M6RCG=G)-dE+~V`$^SKNO-rGvDz{+yMuY3{mF!t$-0PP;j?of zFZz7oxspW5Ol?W_Zl;b6KXzA$Gwv zm?YYI5Fmtggo2ra91+QWIUu(z-eT!s3?5`3X3cx1{<)1RIoKx7x^i6p69q)u%&(Y6G2EuK$ zH_r7T8Hk8E3mFrBhM@EPO)?sJE|9{!`}6j>M%|Flt?G>{TkF@e>?Xq*N)A#rIhCcw&hW5S7JT&-2wM$I<=4j&> zzX=`2xIJneHJ^kU#Jsy-2bM9}&MF!@=HL6k+*ULPm^6E*;{DGWS4 z7WX{rSBp|}tHK90Tu^3Pm z(9kXtwg2s$%urRs14^c)H#+sC~@DFvz=o(Y0v{8u-AEYbpk?j`}i|0!-bmI z5^sKv{&vXDLpt;2R4m;EPyq~T+L^dJWmftNuqmfZFHJW&$`7XiPV4=o$0bbE$dTsI zYTo;`Z`uldJWNDnEAGqsZrr3$USrDEJc$lr=Kh|IiGDeB)KL!3`a!e9Mg3k{z5}cZ z6z^0~#~Idy^}JuU$@JqFAEsU_00=Ahv1N zGqXs8S5+a!gMR{%oPW+tL1sG=H3|@6w7EydfC06oNFRLp)-FIM0y3FDg_|Tz*P#$m zv$&bKbP?Gqq!FL4d+(%sc&lEh?8~v}pi^>7S2w%q%p-E;o&lkN%M%t1*cTS9yHUWS)H9)xIa>6^OATN;+-&;{X%nN7#RxNZj zr{RX^{fdj4%C3)&Mo>Z(L|6Se1^W4l;2F%gc0bN855TJrAQ^ueUkxrY=QltOdrm#= z(TO{W1|1$z1nhlRFA4(uY3Wl1VVg&fSFjsSoQeci2jUi=M2iN2$D*ICrwH*oK|0

1&a^>$bzZ_{s5a^wC$VOab^<#jf95Xp;>-_M|S0+#LuvEl_0(% zS?)HLvAILuqzhCm%N-V@QJZ%-Idm;4z=hpGa8>@Lh~<@+r_GgLLWyaYw&*@B*E61` zKgp}D`Vk#yZlVH~4^3$st=RTsLE+#4D_#7+ zv3aroj;r(T5u6ryI%^pZmLmEK2YlwDd`Q_&<-9 z;{-Dkyz$32?@Wl1%jE2N4pk+!c&VP*>=ylAXA03Ubho6;@R|So&hHgoE(Z&O{-fm` zp6$z#r2{d;>b%?ZrY0jj!a!!vnSXd``wi-Gr=YDxM+`%^J)!`nE2mCUkMFrhVHjURul3K*{bw{2U^J7ZZSlEV zyXsA920N>l3PzP)VQWK7-hj~*mAfbZ%!$ALl6wLh=#!u=ffB?t>W5)<_zWs;8ydi? z9R|a2S57EwGeC6|G)h-0{@}Lp_a==8T!q&>MtDhgTcb#zQ55}03TU=JB*-32dDnA? z%ks8QFff|VLqqx7o(;=f2JTorVfbw8h?Gkp##iL&IrlH)%OS>}|5%{E?Ge6U0NKvr znv#DRUmDrG19B#Wwi*8`Oc!IRl;c|4b}>2hV;HKv6$S=d`z^Nv`dvcz?>^w*>+3Q* zZ*SYeOtfIiht{?Yss35z|FNE6BK%U#*U@>CZ9k@f%!4;?zK3ib4lpb;jNtw+%iG=$ z-lRw2*+(Tj-~3*doB!j6i6DEp{`UE;oiKTeY|-z9$7Z%qDZy1_uHhu@L$~b^yI_%c zk*NB7*!u3{jVqTx-qpkVy#q2gKN*ttk#d=&M8u7POt3)lLb}~u1}g+{6l7F^u2(oEKnW|rCG8UKu3&{;H+g(+TqpULsS4S$Nhh@|5i zZmj|5*HJtq`hH>z3;32Si2Jo?XUH30gcbm*=@>$bG6g^+E%4C>;)H+VaWn$O4Eq3w z)7z9-)|V>#G99S%Crg@@|N} z>UBcq@`FsdXH1&Bhkv^Vr-R2mlx~GfAw4Q?=J=+0>2MS_g}qqgO)qaQWACsZJ-7`g z7ZCRRK}wvaCo(9G4+&t1csNh8cg*03>$m}cyU`+t5(LRssb`(O7bs^RvOr6C$m?CA zGa^4a4W(BkGHgK*g%XLoS?T4Zjpmo9=l8K~49aeBLscX}hEr{Q00#C4RVtB*QUd;Y zqv#>#9XQ|&{yxsg#mzZ;EjgRQiN+LIKD(z}YNSvyy{c332y%M>;T*bsa8L(Sz|L+X znUkI4y8;kEtRxb=hyt=_9_EVRwZB+7!i%hW%gem3^W~l5Y!OE zRXBZAP7Qge4~t^+H-?sCq3}on(PeE+r;OU5&cK4b3gQ(kp|74(V2(Ay32jLG#fA)U z0!u^QBCz4ArP8GmP(_-^g0oBn-nu1#+aqJw3~PkVSSfw${j_2kz>ChXV%HmyY@^h` z4O|_eFoeKmS5mqO(d|uo4tAS>`^(Xr)}tZK+JuEH4VKV5T-oHcF;`vmI|gIhom)L+ zF57&uA8^<-WDXaC`$v%AHUg?{Ic!*_W;p~$hT|E-SmFw{3X0FPEuakLiR7g)ouB(Z zG|)$iJa@ujTn~Q&qXCkD{c>DdUq@n2TYr078=v!`Ff;^)SXq7rBz<;b$WrrAJBhMu z1M~w2aLWqIfNN(PYQo|=_oCFAzgWZvi&1l~^;7gvcd;3J{tAFYj${l7!w&!zj*>Vh zOJtILJ=X|;_87yrY1l%#MM(N7P$U&UFIk_o3vFY13!qL{PI}iV$hGbUn#h;1rR*~G zU>`a*pzc}dA9OUD>ssesjU)^JBQ%JE^KpbLK+rf?b{k(MM~9Fi5Udvdd$?gc#qSu& zd*b1)bAWQAm0hl&|M8wsXS|U;^97I*91>Fo`6_BHss~2xMU$HZ--2zrXPWf=tyhrr z+$te^0*93wyD=kl6J`VAWh<8rZh)@IJ58GS zR!#r}NVG<4G>D)Qvr3)xIF>Z1lX-XIte8a!5F#ob)Ydmd6L-=}GXQ|;;&|@Li!`B1>$oQOZ4e3o<-C+c&72VyX+( zj|Ow1YxxjB@1O;2!M7zq<8EiuO0j~YZzx=y;YLXcE-0iqLHU=DR@CVcX@mBtuzn(7 zOVS)14VWBOEk%ELy=iLalC1)3DXXb}3DBBc23(=6&7-SmFU(R!RxrVT({iDvMNSI} zKMri#7q#}AXmO)&vOQNTmnVtx$#a6>!X-rE7*8_C$@HxRps<|T=ft53)*AhE5altF z!|c}1^FPD(zF+=SUPj)`OIU_95)G0+88i~ET{R{y7+1j+sh_+ork)Uxsa~R7FC%=P zs?MG`w{LY^0AdZ4eljAcUF`PtLho*@7|YT%a9dEV@tPZb14LrtU!cEoEw1$*XNLGGVj19*-#iiTOHjupIBLS_+iP&>%i+r1HO)4 zhxgb+O^NA*BA_0`F)1ZwVaG|PY*#;WOOE~;$#r(%@+5#h7zL2XdTo|`GcvLj*+3>HUl)WXv)`VvE6)= zZ^AMKZpPp`_4M)|-=Jup$tefrsl@US#x}ob9YaTLTJ0`5DYPv2k|xVp-s<~-3ZAF; ziyvLL^s{m0p8gSFxMtRmBkv>egv_e*Zoh=^35(kf%AbZsNqdk`&kT3!<>|7ah?1+3 zmoWEcGCd}(qxT1Lm{9src~hoREwDIZJHS@D;%#aSSD!zqa3!cOl-%CwWkBi9=W&@L z5P@NZG$yvzK(dD8TpqmT1(6pI+ENt3A`}F=N1*IPri9zsLI8bTK5~a`INHQ1|GQIQ z8|k!>AzGI3(KY^^+M1DrXW8@v0Y88oNuRp(@MWy=Ot8+zp(9>6Lf`%>Q^>Nq_J>}Zuc5i?BxXg7Cp@cqHb6Kh)w{}1_ z>_26|;%mJas!B~ZlnZ3DC5c$jyp)j!LjFv5Az&Kpr*`x2Vh41t`_WzR5T*W@J$^X8 z_iAa})5EBt)#Wzq26M+n!OxC{Ukk8&qpHK?%7nHQKg*+6;@dt0lAFV;VVof>;!-9E zEdc#Xr*sco=+uBEm#4oNHA!+8L}JB?=St5hhW@6qotKN%N%)m!ylxe9_~vNB3p&t_ zY|y`q>ody*3A4Gu#nI0dxx)Wxs!U(fFGs(TnnJd(7P{Y;;O zHIFgP8LvsQ4M!XW$3&^|rq`KCFXHQd(8TZfnIdZK)%S9&H__UdpjQBIG*WImDiYRLA7I?cLmteI1>qa55w|x{E$V92J|c328)$7_knh{)bjp!FtxRPo5n zJklNTZYfM@XI++E9f>yux>HEnvA4&*+O}sO{hFd)?ugaP%RY~=x+bih{G9q0$BTz@ zdQK96m!?Js&X9$HU%wL&kp&E-dl>ywL?G3hZd#YvAI>-vvm|e&VpuL5lya1J5UXd@ zuXc1-tkfE&7nIZk&S)yE8tk4Gev2n?VP5cOu5oNM2goot33zE1=BLQXkKj~+&*PzP zjx*d83`fr(NLQn#;!QzP^=OiTNjKP7On*hBk!^&ZQJquQBrVZi*6(S2@irM#j@3vC zA3GLz!isDWN@(8K1yGj%$)~#+1mnmS5x3q(vX4vars@QEhGw0^eiuV!H(c0(DdtbF zKay!D_#--m%C9}e!NaKw45{%nrU`jxbY1>9d73RsW2tjS*xv93`4*yB?mR*it3wVF zQaV|vAn{pF8=8t-QOGWemK@GL*u(o2xkhJ`*-Pq!M4nYU$eUnj!l;bZ1p%!#Frgv*iFFD$%OkP-Q{ds zIrbhoDBEQb-#hSf&x-*!LK`Z9-Ra&LG_jBE2QFay_+Am)5@4)Qq1eUVH zQ>)t!y~_jiUM!){=nndRZC!bty_@hd@yKVIwej95R3qZ2JUxDs+k^AX-1&sv@O~@6 zw|YdZyBS_>l}%5=bU5LCoxTm8-sGGFIfHXK<4Nwa_UGamrq8=J!f_U4UK(|$+*&X4 zh$`?BmuqB0UNwVC2n%TWF(c3o;G-Y-*xDEV32$z_ciF;MTY=H8Xf#pitAz+Z_fJ+T zCCZwIPL*8WYLbaIb-O5oSj^vyfMd+Ah|WH!5QfO~w|Gx6o)YT50}f?Z`^T1ea77$B znYdqec~xHWu~1IYY;{L~W&=k$K7o+sk9Q11!mIC-HK?PXWI4pe*~?`P%^m9>Flb4Z zlVe@6;m%S^7#@|Dx16{d{Fp?=LXMj~M&j=Ev`i71roIE|c<$2h-DHKaENGSYlo=O> zRC!E($-KT_A%$CMTy`@v+v_y~6u=WQ=J=Ew@4jBS^Z)?VJXdo@fVm~*2gi?zl1j&D zRD8HC)_N2nXa$O>os?gA{Ix5o~yjW=-T zpTZdWw=8Or#A#G`lN|5K-a$Gg92KMSt4m?UTwzyIc8i~W&dr9}Q&;r+ae-!srA<{G zE3<~GKYJ;6weh}k2c(Udz#gxrh%P(v8%>59f#Qf-PtCduG{KDF;_&045c00LP|4WQ z;^tJL2jvJOw}6Ga7&(#TBV0cIB}U`xS|`lkS^BM!C4e%${aVQiXJUUp8$woymbDsR z0%u6*;X*hk`uF{VR-7>40q`Et3-VhXC1|1k|Cshv6z;@Y&_6=dr?SPY~&|ACG zt5MFDh@aRNG3{v|x%zjCYv#Dhj*4(H^GSdtQ$w!Ez>LvnC|5REyl43p#=11PT}$r> zp?FyDs9=+|0nG#sPE-fL^D1!xyuFH(Yj5Q28=KUSiCM=r6~TJX7Amwtz_CP9Q)>Fy z_BD@g2%wC2YMF63V$$S2{TIe%ls;>*zq(J+bQq=3oO0y-1a2IdGEP&zxgN%UTuz7= z>O#P_vs!JFZ#tqJr>u_X41IdiAMRj5#v@N{U)ILb0*Ni_8rR`SaVb${InDdxnOdHD ziP0U|u&EM|AV$oy$n_qmFhec=$$T91#b0#JwP4#G@hh@ulB(|p-Uzd%NG)LwOLUi}2TB+-ha3hi+oLqVB`eIcP9ZbB z!?WI2#ZI2$$=9f)uUx#xMv~IAYx&>3acL2nW9RBu?cm3m`bq9^ef|wEYHW^4kNAWR zxg6u1XxQ)hd7Sp+eaiY2Qn~hLPmF&d5_kf+|vPPg2RRtWmh$Ht<&FMH#u95Aw5+4P56Zy=mT&m@Qs6@Ye||%1L5Aa zer&#bi(CC=PdGe$V)RY9;jAZifGd~nl@utSOgEpSe*obOX~A~+ymm$)9e0ckJB5zc z3pddQS)H;*R#DY&u9=d?wONM=hy&1RT^_l>t*hFxmpeg{)Ai&B_BrYNwt*u+*y0{* zivjYooo6Ok%bAKmwQfna{x_}cL}Zg2S-Rgw(3@XHZ-m-O7qy4IGr6ZjrKW3TwPZ}r zPePfB7kyU6r+uPFDU!n~l*Ux`zoTW_gaw<}pBo-;Al2tffpm;S@I0-NNTgsvdMcn`K>7*PiH>vEx7lB71<<9BVd4yI@U08ZOlzoPpnj)RR{-J33P>s zSQ1oHw1i4B4`DF`Q`q9cAh^O7O>~f%ook zzhwE$Ceu|TIUyIR!GnKtLgf#sU`LgOGpav8w!{{Lv#?pm?fj0TNz7~cEH9hQ59{JG6s4ynZo|lWBJKK{9@$m4i9yKpvo2);?R%73%x5#KYMCO z#3G8+XQViL1F1TLl)@T(H*`6$S#IPC^qs7W|abhX0SJ6GR{F(J5g{=H4I;oG?XyT#%%DFzbsbJ3cnhK?^9N?K) zeh*hp^10CW(2LYC!!a@TmbQ#+x&T4Xxxc9>WwHFBWp|pj7C$ECzn_tPY*%gP0yEp`nO%U8T8c7+!hTk&r5z zw*1RQGdMEUWn|0`^LMz9KJH!%<3Ea&n2BrK7wqQ4Rh+C*Dx-ZO?i{tYOq7)Dn<*pM z##_)9lz&scMn5=~Yyj3dL|gi0-_gvwr7wLB8Tz``F_-8p6|&7+bSm{xe38CpI2WRao8gaIdHjCOxm4 z|AbyHZ^#A_?_74^s;=pS*Po>B%O1!U?7+hz;Ms>*BpxXwQUWgGj}Ze;i!zqUFT_^% zrgT!T%Hr(mwM95S1qaTfra4p0lxw1W!ojYVrItP{XXgNQDdUkIp#x~iBT3v;9H&@j z^zwG2UNj%_{+1f#)?HyUx&(UCBI*id->?3XxsGw*Kcr=z>)9e2owwd;7AiWVmINHJ ziL_iGt=ka)=4!>gu0pt4O;Yhc3#TlRxONq&&mHv2m{p_JrwVJ!rPVGq&OOngGUve2 zPS{EtOrWMZ^nsOIiT_sVSTOxM!3%Y&?+ zUEh$&1P=}_0R}59*4be!3h)+PKZI1&Fy*zVqVSA2{`4udm1i2mX{3qokP06^q6&G+ zAR$7Ix|iE?A6%JrR{sX2UW!rn<}VK|YLOUbC)I;SUe}ZBm>)T+q(oJ`Z}Ix{<^{;i zg5)`SKW>IXBwv7+U?j)$`fB|LxD)muPF3AXTyqBwbIp^iH3J=RMaoi%7W63s>71~INJ6@dacJ-JSwM7sCE?z zj=HB6a$j^REXKNVENkM=TvjW0U(hO4;<%OS6k|ek+q;~DMH`4|q_wABc;e@y)Nq-r$`prdJCpd1C3lzS6rPWU>f4t>W$2;)o%-;0SOLUh@T{kz(*-_`UN!&bRxkN{-%A`;_`*ZT}u zu00Thja_&7++^?p2(3Eqp&?4W&La4^Y(52rS(%4YKR4rYgU-Q@b=Rf!%#D9uOz0E}fDf^6l2c~{Q(m&OZ5VyRLD%tVtmK7L}Udp(kxLS?7i z;QjuhTlpZP!xUEnl{xQ5hs&v*d_Lb4GCeG;-06i#;RMbUfeK<$X6^!N58A6MM39;Y zK21>Iw6bEDY7gv)%-Dz7S_5romL98~CMzWSXy--fIS~DYW^DyHSoE|(ofcMmYAaqi-XB>gWV_Uq z1!@a}=hqhk=EW0N*7?gc_r}@OK6+A2pE{9Ww<()07=h%oTf63U|M=y*5V!o|txuFw zNYZxK*&rVykUqE+Y5_W_l=RZmat8i%qz=rtl7tRNNH$uM-46QLWX)GFkRxe73s6aM&CitrOB<2X_$@Y;n8IQ zn#0i@?GWb}T@cBX3JJQN^fwtR{aNZkM~aPJ`=Gv|K14=y&~xv4m2e2-NYJ;MD8?0s z8y6>?%Ls;pg??3_fwnrYfw#_^lS@lEI#w`b@BI2_17Z|YM6~A-h_}kd0CaX{MQir? zAx?yl)%?j>{|qjtopXfpDaxPrn&ss(!3A>7+U6+i<;M|R+i2yv(K{@& z|K(C~GLXK`3DMs4J8GVh36zr7r$t>0f@*}q;n)MX*D;cRv8r_ZG3%F1C4WT*k{T;G zoX&ps4HywmTEoqforA~X5%RMr&o#(N3-qO3 zsB69Z;1AKN8!~&9z-eZds%`%AcvP;nu!&}E)X#Ccf}-a8E8pF9Ki@x**704X9dGvt z8*Xs>&EXR8oC$m#8c^Jn^O86vA3vtXKdM$!VKa=GPe9>)b5CtOG#kL7xwl4b(?NPf zH_l4^isF&9X`nW%ef4F~M&-=7bpH@F(A{g8nQfr@a zhfs#7J+FnSqe581=aYQtI9N)TKM7Rx@0(D&c1tg>3}WdS`(s5@F2_nsI=xmZo2#9f zLdZxbQJi-;n6J&*#Iun!iJ^Y|blg*`nt7*QsD^Ba+3vPO(10*%s#(_`H>Zc`kd{BO z#M3iebPWI+vtq30oD(hLa_Sx*&tOURZcWvb?|VGbFHgax;NC{%N4G~S^VaPNdd;Hd z!UxsDn3j!_+g*g9btweai*RUWj3EDmX55&l13oH4qr_m43*PmrfkVrM0b2lfWPMMY zGng@WZ6g~zF4W`|hBbBUqcGsqB6i4eIkCCl9Xy45!aobB5q6tdxvRM_?m96cIk=_dh^d_x4s@FV$(0!<&hY|+gD zmQ<9>lwCl7VNyAbT82YgDB+_B>4b1X1=VUKE=nWQPuA}(+1ZBQJ`mn!2n(nDM6HrgN4^%p!6H-{#SZr3F}?Ajnd|# zEZAsctwlmY8QvGpObm9i>`)uL?*8IZ|*#ZIW>#Y{77!K5ukb{=o^o;UAu%LlIT(DFqxZmj6Gi8n!Cf*3u*^Z zEU;c3_K*{l1qzhI=NY20gWkzwZXi8~WTApFOBDZjPXH3*1*oyWo0*-Pt`&ibXRblUnlVm`iqN*SLO&Z+&~O`h%_R7_Xb7rY^imEh1A=^4rikaU zu#f#ftqYAeLRe24L&g>kA{=b9Y#j8Iqm(I<8;D~VG%xgPl4rnyT4W_Agz5jldOBjK zWw)x@W$knzDdwIsdxBn`G?r0r&ubiL5TDy;OV_lL6}{3pPPx`aL29TlYwxkouuLWW zE(8ZfQQgxesV5(#$I!$Io1c_YbL-;0UpWbrAwxs*wG9SvwmR{-ZY}r1v$3MqS6v_z z_;}x=skTRcAr~Q_dJlik(ReN>j|kytj{FNePmyb#POb-&o-9_$oN$eQdqcKKv{7n@ zmzAp*J>^QF&d4pHr@e+ zZ~PRvR-F>5vL!E!sMJ|qFR`e3cUhX@jcWadgHIfLYtilfI!o5}S$0Xdb)xirv7g@| z3Tq}wM4bPSn45)06dMyv=7GcYkxYutNsOP0)hwM+JJtQ&AW43lcI}$ekpA_~#_)1^vF+2vZ;;DB>`^D z;3@Uz{#FzYr}$FK!xrD;?LXNE(CsmB?j@#oBXEfVdY44O@0D;etWr2&%PiGDlV9-c z+wFc_8X@kP$D-7qWD)g$Q-9FloBqh8_L1R1%QJ)zWPjEUa3vhi=T4DwncN6JHb4pl zQB@``q1OffP?XyEUSWd^E2(NIJy>@X13%X1?xH#$r94h zKER!xUu(^la4D|-E3IoAN+dH>a19iQv}4Zt(s4;&%DPz;ri$Vbs>MF(UJIq>cpIoH zl}`F|Xgzg&>1#?#TX}BJdjAxOrZz)Z4t>xNkM5L3GtONle3|El>||~mDMy(?k+~GT zV8f*`?`A7mNZwqn@hC^Ft~(dDOHSKw+HaUg5KqNksw`y-p7iS}xnKS;bB>+>R`sJU4($G zWvdQiH>IPfX>&>9SD-59j39)3C9<)ttq9Jm0G@hjn3r?JmyJiNBMtZh?x1x<4dY^}eI|nR5E1NwN2>3Sf%-$Q40^JM?jP4{hylF4Esc;gO9$7y|(CChwDg zgWn+g+$a~zUMU1F2^q{c`R*L*=yz<(_6DFzYo`l*rz*s)#cfRD=tfxY;sG;cHvjRy?xv-|D~KWs0f1(fNrjIf(DVdBQ$r95 z;3tZgSUOCsN#N?>!8pL#0b2^fCchZ@sZ|KC;g&S}>HdX~ z#={*o>qoh^%ue1oIUeXKCV7Qp%a9|e@?=ez&#IR@61LtUcpEt{H>51eZF@8`i!KB< z&}T&PFE>vRuoM^AkAAl6?q;E^-|PYwP6V1YDD4)$d6)sJEedyZ(2kA$IgDX;p2qx${vhzeL$SiEeTRbf2; zD;;kKc{PwVh!Uu-gQ;7s>P@;60fofzRDa*rLlzt8c!i8C9<%+9L3u#qOUIapYHS_E zI48KH`=a5i?KeOl literal 0 HcmV?d00001 From d80d523271d07455c2ef7f75f03af353984be997 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Sat, 28 Sep 2024 15:13:44 -0400 Subject: [PATCH 15/17] Update extract.R --- R/extract.R | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/R/extract.R b/R/extract.R index 1188cf0ac9..926beac976 100644 --- a/R/extract.R +++ b/R/extract.R @@ -114,6 +114,61 @@ #' `"html"` (the default), `"latex"`, `"rtf"`, or `"word"`. #' #' @return A data frame or tibble object containing the table body. +#' +#' @section Examples: +#' +#' Use a modified version of [`sp500`] the dataset to create a **gt** table with +#' row groups and row labels. Formatting will be applied to the date- and +#' currency-based columns. +#' +#' ```r +#' gt_tbl <- +#' sp500 |> +#' dplyr::filter(date >= "2015-01-05" & date <= "2015-01-16") |> +#' dplyr::arrange(date) |> +#' dplyr::mutate(week = paste0("W", strftime(date, format = "%V"))) |> +#' dplyr::select(-adj_close, -volume) |> +#' gt( +#' rowname_col = "date", +#' groupname_col = "week" +#' ) |> +#' fmt_date(columns = date, date_style = "day_month_year") |> +#' fmt_currency(columns = c(open, high, low, close)) |> +#' cols_hide(columns = c(high, low)) +#' +#' gt_tbl +#' ``` +#' +#' \if{html}{\out{ +#' `r man_get_image_tag(file = "man_extract_body_1.png")` +#' }} +#' +#' Using `extract_body()` on the **gt** object (`gt_tbl`) will provide us with +#' a tibble that contains the fully built data cells for the `output` context +#' (in this case, `"html"`). +#' +#' ```{r} +#' extract_body(gt_tbl) +#' ``` +#' +#' To provide us with a better frame of reference, the grouping and row label +#' values are provided as the first columns in the returned output. We could +#' suppress those in the output by setting `incl_stub_cols = FALSE`. +#' +#' ```{r} +#' extract_body(gt_tbl, incl_stub_cols = FALSE) +#' ``` +#' +#' The `high` and `low` columns were hidden via [`cols_hide()`] and so they +#' won't be shown in the returned data unless we use `incl_hidden_cols = TRUE`. +#' +#' ```{r} +#' extract_body( +#' gt_tbl, +#' incl_stub_cols = FALSE, +#' incl_hidden_cols = TRUE +#' ) +#' ``` #' #' @family table export functions #' @section Function ID: From e235f7b302c022b10e299ef312555585d289e809 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Sat, 28 Sep 2024 15:13:46 -0400 Subject: [PATCH 16/17] Update extract_body.Rd --- man/extract_body.Rd | 92 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/man/extract_body.Rd b/man/extract_body.Rd index a1c3a2279b..e5d980a8d6 100644 --- a/man/extract_body.Rd +++ b/man/extract_body.Rd @@ -103,6 +103,98 @@ apparent. attachment. } } +\section{Examples}{ + + +Use a modified version of \code{\link{sp500}} the dataset to create a \strong{gt} table with +row groups and row labels. Formatting will be applied to the date- and +currency-based columns. + +\if{html}{\out{

}}\preformatted{gt_tbl <- + sp500 |> + dplyr::filter(date >= "2015-01-05" & date <= "2015-01-16") |> + dplyr::arrange(date) |> + dplyr::mutate(week = paste0("W", strftime(date, format = "\%V"))) |> + dplyr::select(-adj_close, -volume) |> + gt( + rowname_col = "date", + groupname_col = "week" + ) |> + fmt_date(columns = date, date_style = "day_month_year") |> + fmt_currency(columns = c(open, high, low, close)) |> + cols_hide(columns = c(high, low)) + +gt_tbl +}\if{html}{\out{
}} + +\if{html}{\out{ +This image of a table was generated from the first code example in the `extract_body()` help file. +}} + +Using \code{extract_body()} on the \strong{gt} object (\code{gt_tbl}) will provide us with +a tibble that contains the fully built data cells for the \code{output} context +(in this case, \code{"html"}). + +\if{html}{\out{
}}\preformatted{extract_body(gt_tbl) +#> # A tibble: 10 x 4 +#> `::group_id::` `::rowname::` open close +#> +#> 1 W02 5 January 2015 $2,054.44 $2,020.58 +#> 2 W02 6 January 2015 $2,022.15 $2,002.61 +#> 3 W02 7 January 2015 $2,005.55 $2,025.90 +#> 4 W02 8 January 2015 $2,030.61 $2,062.14 +#> 5 W02 9 January 2015 $2,063.45 $2,044.81 +#> 6 W03 12 January 2015 $2,046.13 $2,028.26 +#> 7 W03 13 January 2015 $2,031.58 $2,023.03 +#> 8 W03 14 January 2015 $2,018.40 $2,011.27 +#> 9 W03 15 January 2015 $2,013.75 $1,992.67 +#> 10 W03 16 January 2015 $1,992.25 $2,019.42 +}\if{html}{\out{
}} + +To provide us with a better frame of reference, the grouping and row label +values are provided as the first columns in the returned output. We could +suppress those in the output by setting \code{incl_stub_cols = FALSE}. + +\if{html}{\out{
}}\preformatted{extract_body(gt_tbl, incl_stub_cols = FALSE) +#> # A tibble: 10 x 2 +#> open close +#> +#> 1 $2,054.44 $2,020.58 +#> 2 $2,022.15 $2,002.61 +#> 3 $2,005.55 $2,025.90 +#> 4 $2,030.61 $2,062.14 +#> 5 $2,063.45 $2,044.81 +#> 6 $2,046.13 $2,028.26 +#> 7 $2,031.58 $2,023.03 +#> 8 $2,018.40 $2,011.27 +#> 9 $2,013.75 $1,992.67 +#> 10 $1,992.25 $2,019.42 +}\if{html}{\out{
}} + +The \code{high} and \code{low} columns were hidden via \code{\link[=cols_hide]{cols_hide()}} and so they +won't be shown in the returned data unless we use \code{incl_hidden_cols = TRUE}. + +\if{html}{\out{
}}\preformatted{extract_body( + gt_tbl, + incl_stub_cols = FALSE, + incl_hidden_cols = TRUE +) +#> # A tibble: 10 x 4 +#> open high low close +#> +#> 1 $2,054.44 $2,054.44 $2,017.34 $2,020.58 +#> 2 $2,022.15 $2,030.25 $1,992.44 $2,002.61 +#> 3 $2,005.55 $2,029.61 $2,005.55 $2,025.90 +#> 4 $2,030.61 $2,064.08 $2,030.61 $2,062.14 +#> 5 $2,063.45 $2,064.43 $2,038.33 $2,044.81 +#> 6 $2,046.13 $2,049.30 $2,022.58 $2,028.26 +#> 7 $2,031.58 $2,056.93 $2,008.25 $2,023.03 +#> 8 $2,018.40 $2,018.40 $1,988.44 $2,011.27 +#> 9 $2,013.75 $2,021.35 $1,991.47 $1,992.67 +#> 10 $1,992.25 $2,020.46 $1,988.12 $2,019.42 +}\if{html}{\out{
}} +} + \section{Function ID}{ 13-7 From ae3c249b5d7f5304ebc6c3ae71384bf54392b20d Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Sat, 28 Sep 2024 15:51:31 -0400 Subject: [PATCH 17/17] Update NEWS.md --- NEWS.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/NEWS.md b/NEWS.md index 558de0c1e5..db8c004962 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,11 +1,17 @@ # gt (development version) +## Breaking changes + +* The `extract_body()` function now, by default, will not display columns that have been hidden (e.g., by `cols_hide()` or `cols_merge*()`); the previous behavior can be restored by using `incl_hidden_cols = TRUE`. + ## New features * Creating a caption with `tab_caption()` will now be preserved in Latex output with `as_latex()`. Cross-referencing a table using the internal cross-referencing system of **bookdown** is now enabled for PDF and HTML outputs (for HTML, set `options("htmltools.preserve.raw" = FALSE)`). Quarto users should use the `tbl-cap` and `label` cell options. * PDF output now defaults to a full-width floating environment using `tabular*` (@AronGullickson, #1588). Float position can be controlled by the `latex.tbl.pos` argument in `tab_options`. Quarto users can alternatively use the `tbl-pos` argument to control positioning. To use a `longtable` environment instead, use `tab_option(latex.use_longtable = TRUE)`. +* New arguments have been added to `extract_body()` to better control which columns will be present in the returned data (#1875). (#1889) + * The `locale` argument of `gt()` now defaults to `getOption("gt.locale")` if set (#1894). ## Interactive table support