From 6434165e203f1fc9026fabc4098464e1752759c2 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 10 Oct 2024 14:13:16 +0200 Subject: [PATCH] multiple updates and additions. see 'NEWS.md' --- DESCRIPTION | 10 +- NEWS.md | 6 +- R/ci_plot.R | 4 +- R/ds2ical.R | 1 + R/generic_stroke.R | 4 +- R/mfi_calc.R | 3 +- R/str_extract.R | 4 +- data-raw/cprs.R | 2 +- data/cprs.rda | Bin 462 -> 402 bytes man/multi_rev.Rd | 4 +- man/str_extract.Rd | 3 + renv.lock | 492 +++++++-------------------- renv/activate.R | 181 ++++++++-- stRoke.Rproj | 2 +- tests/spelling.R | 3 - tests/testthat/Rplots.pdf | Bin 3611 -> 0 bytes tests/testthat/test-generic_stroke.R | 4 +- tests/testthat/testthat-problems.rds | Bin 0 -> 5335 bytes 18 files changed, 300 insertions(+), 423 deletions(-) delete mode 100644 tests/spelling.R delete mode 100644 tests/testthat/Rplots.pdf create mode 100644 tests/testthat/testthat-problems.rds diff --git a/DESCRIPTION b/DESCRIPTION index c24f9da..f670949 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: stRoke Title: Clinical Stroke Research -Version: 24.2.1 +Version: 24.10.1 Authors@R: person("Andreas Gammelgaard", "Damsbo", , "agdamsbo@clin.au.dk", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-7559-1154")) @@ -17,7 +17,7 @@ BugReports: https://github.com/agdamsbo/stRoke/issues License: GPL-3 Encoding: UTF-8 Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 LazyData: true Suggests: knitr, @@ -25,7 +25,11 @@ Suggests: testthat, git2r, here, - spelling + spelling, + usethis, + pak, + roxygen2, + devtools Config/testthat/edition: 3 Imports: calendar, diff --git a/NEWS.md b/NEWS.md index c163944..cbb4d35 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# stRoke 24.2.1 +# stRoke 24.10.1 ### Functions: @@ -8,8 +8,12 @@ * UPDATE: `add_padding()` updated to include option to add leading and/or tailing string with `lead` or `tail`. +* Moving: The following functions are moved to `agdamsbo/project.aid` to focus on (stroke) trial related functions: `str_extract()`. + * NEW: `mfi_calc()` calculates domain scores from the MFI questionnaire. Takes data frame of 20 ordered as the questionnaire. Default is to reverse questions with reverse scoring. +Checks set up with `rhub` v2 + # stRoke 23.9.1 ### Functions: diff --git a/R/ci_plot.R b/R/ci_plot.R index 471ed5d..df1afda 100644 --- a/R/ci_plot.R +++ b/R/ci_plot.R @@ -42,8 +42,8 @@ ci_plot <- title = NULL, method = "auto") { - if (!method %in% c("auto", "model")) - stop("Method has to either 'auto' or 'model'") + if (!method %in% c("auto", "model")){ + stop("Method has to either 'auto' or 'model'")} if (method == "auto") { if (!is.factor(ds[, y])) diff --git a/R/ds2ical.R b/R/ds2ical.R index 291a961..cafc163 100644 --- a/R/ds2ical.R +++ b/R/ds2ical.R @@ -1,3 +1,4 @@ +utils::globalVariables(c("DTSTART")) #' Convert data set to ical file #' #' @param data data set diff --git a/R/generic_stroke.R b/R/generic_stroke.R index a558389..90f524f 100644 --- a/R/generic_stroke.R +++ b/R/generic_stroke.R @@ -36,13 +36,13 @@ generic_stroke <- gtsummary::add_overall() x <- table(df[, c(group, score, strata)]) - f1 <- rankinPlot::grottaBar( + f1 <- suppressWarnings(rankinPlot::grottaBar( x = x, groupName = group, scoreName = score, strataName = strata, colourScheme = "custom" - ) + )) df[, score] <- factor(df[, score], ordered = TRUE) diff --git a/R/mfi_calc.R b/R/mfi_calc.R index 22aee38..3161c37 100644 --- a/R/mfi_calc.R +++ b/R/mfi_calc.R @@ -1,4 +1,5 @@ -#' Title +utils::globalVariables(c("ndx")) +#' Reverses relevant MFI subscores #' #' @param d data frame or tibble #' @param var numeric vector of indices of columns to reverse diff --git a/R/str_extract.R b/R/str_extract.R index a958e2a..e5c366e 100644 --- a/R/str_extract.R +++ b/R/str_extract.R @@ -1,5 +1,7 @@ #' Extract string based on regex pattern -#' +#' +#' DEPRECATION: moved to `agdamsbo/project.aid` +#' #' Use base::strsplit to #' @param d vector of character strings #' @param pattern regex pattern to match diff --git a/data-raw/cprs.R b/data-raw/cprs.R index 5a6c47f..810987c 100644 --- a/data-raw/cprs.R +++ b/data-raw/cprs.R @@ -5,4 +5,4 @@ usethis::use_data(cprs, overwrite = TRUE) cprs <- data.frame(cpr=sample(c("2310450637", "010115-4000", "0101896000", "010189-3000","300450-1030","010150-4021", "011085-AKE3","0101EJ-ATW3"),200,TRUE)) -save(cprs,file="cprs.rda") +save(cprs,file="data/cprs.rda") diff --git a/data/cprs.rda b/data/cprs.rda index 0534f8ce4adebe230459d48a549c03cb084581d8..b5e67bb40e92d59ae76ff74472aa605a04911d13 100644 GIT binary patch literal 402 zcmV;D0d4+5T4*^jL0KkKS@%#2?f?gd|HS?}NB{r>f8Zt<6u>VB+<-s;06+i%zydwO zC>TblCIr9)U;qJ;p@7kl&|v`34Kx4)PbEr*1YiIF00IfAQYMqtJv4(uLp3on9-}6W zH+OeB-Fv>TCPh9jy*(d4`^v7G`FZ?#Av)$qe=WmvJ8QG&+P3;UCB&FPtvVVNdPrmW*t zCm2cmYNzRtuRlS4r0`RLVEu*s{Q11uX{~B&8y3dPYh|phT3dEP!CYNNb*v)BD~lMA z5Lhuo5it$8*4DQT#}kU4vR8pLPq_zRu(}H++LjM6xghon$d@qXQIyoD*@e|FedBGd zt(wiO*4tZb+ikOLZOC1u?iWB$<}UGQ w02d?xEr10M$iK2Vxw7Va20h_5+fB+uDA{ExmLrLH(3^qCwLv}kmtx}8 z$MdPIQ$nNNoo2so@lYtk%j#CN`@32{cx*Wtetsg%spWO1|92U0xIN={Qb(-*%?QZ28O#p+J~C8;!-N-5h( zEviyUOcT|~1T8B6P^h}j)@E#EF^`t zAnr4idPdHw1~BYa_*hlUffk8PJ)_>`AzHS_st?X*6engFm>@&8<7I0km1A;iYN-Vy zGZqsXVJkEIaXv9efn?^2j1ofEa#z<-+4Y-|+^zaX{n%?)88;b~^*Dt`B;#I&)7XJpgT~Z)xVv8K^_s zbT$X5+2Qj5(x0H|5E*YU2N8VvR~E8$c%IjxZW%5Y>``z2^$JC^T$|9`Wuuq;`GJ<% z{SsRf16puRzU@=KGx_5C{5>B(7No*p9~G}3<68A8J;P7>D9e&|Y4Ke>Kgk+J0B{cg E0Bc0m4gdfE diff --git a/man/multi_rev.Rd b/man/multi_rev.Rd index 5d2cfcb..c03d0cb 100644 --- a/man/multi_rev.Rd +++ b/man/multi_rev.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/mfi_calc.R \name{multi_rev} \alias{multi_rev} -\title{Title} +\title{Reverses relevant MFI subscores} \usage{ multi_rev(d, var) } @@ -15,7 +15,7 @@ multi_rev(d, var) data.frame or tibble depending on input } \description{ -Title +Reverses relevant MFI subscores } \examples{ # rep_len(sample(1:5),length.out = 100) |> matrix(ncol=10) |> multi_rev(2:4) diff --git a/man/str_extract.Rd b/man/str_extract.Rd index 6a57059..5a01c5e 100644 --- a/man/str_extract.Rd +++ b/man/str_extract.Rd @@ -15,6 +15,9 @@ str_extract(d, pattern) vector of character strings } \description{ +DEPRECATION: moved to \code{agdamsbo/project.aid} +} +\details{ Use base::strsplit to } \examples{ diff --git a/renv.lock b/renv.lock index 0d3dc6a..5381e59 100644 --- a/renv.lock +++ b/renv.lock @@ -1,6 +1,6 @@ { "R": { - "Version": "4.3.1", + "Version": "4.4.1", "Repositories": [ { "Name": "CRAN", @@ -11,9 +11,9 @@ "Packages": { "MASS": { "Package": "MASS", - "Version": "7.3-60.0.1", + "Version": "7.3-61", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "grDevices", @@ -22,13 +22,13 @@ "stats", "utils" ], - "Hash": "b765b28387acc8ec9e9c1530713cb19c" + "Hash": "0cafd6f0500e5deba33be22c46bf6055" }, "Matrix": { "Package": "Matrix", - "Version": "1.6-5", + "Version": "1.7-0", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "grDevices", @@ -39,7 +39,7 @@ "stats", "utils" ], - "Hash": "8c7115cd3a0e048bda2a7cd110549f7a" + "Hash": "1920b2f11133b12350024297d8a4ff4a" }, "R6": { "Package": "R6", @@ -63,18 +63,18 @@ }, "Rcpp": { "Package": "Rcpp", - "Version": "1.0.12", + "Version": "1.0.13", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "methods", "utils" ], - "Hash": "5ea2700d21e038ace58269ecdbeb9ec0" + "Hash": "f27411eb6d9c3dada5edd444b8416675" }, "V8": { "Package": "V8", - "Version": "4.4.1", + "Version": "5.0.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -83,17 +83,7 @@ "jsonlite", "utils" ], - "Hash": "435359b59b8a9b8f9235135da471ea3c" - }, - "backports": { - "Package": "backports", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "c39fbec8a30d23e721980b8afb31984c" + "Hash": "7f3867df00a91c63089beb85b9ef0208" }, "base64enc": { "Package": "base64enc", @@ -115,88 +105,23 @@ ], "Hash": "93637e906f3fe962413912c956eb44db" }, - "bit": { - "Package": "bit", - "Version": "4.0.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "d242abec29412ce988848d0294b208fd" - }, - "bit64": { - "Package": "bit64", - "Version": "4.0.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bit", - "methods", - "stats", - "utils" - ], - "Hash": "9fe98599ca456d6552421db0d6772d8f" - }, "bitops": { "Package": "bitops", - "Version": "1.0-7", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "b7d8d8ee39869c18d8846a184dd8a1af" - }, - "broom": { - "Package": "broom", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "backports", - "dplyr", - "ellipsis", - "generics", - "glue", - "lifecycle", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyr" - ], - "Hash": "fd25391c3c4f6ecf0fa95f1e6d15378c" - }, - "broom.helpers": { - "Package": "broom.helpers", - "Version": "1.14.0", + "Version": "1.0-9", "Source": "Repository", "Repository": "CRAN", - "Requirements": [ - "R", - "broom", - "cli", - "dplyr", - "labelled", - "lifecycle", - "purrr", - "rlang", - "stats", - "stringr", - "tibble", - "tidyr" - ], - "Hash": "ea30eb5d9412a4a5c2740685f680cd49" + "Hash": "d972ef991d58c19e6efa71b21f5e144b" }, "bslib": { "Package": "bslib", - "Version": "0.6.1", + "Version": "0.8.0", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "base64enc", "cachem", + "fastmap", "grDevices", "htmltools", "jquerylib", @@ -207,56 +132,62 @@ "rlang", "sass" ], - "Hash": "c0d8599494bc7fb408cd206bbdd9cab0" + "Hash": "b299c6741ca9746fb227debcb0f9fb6c" }, "cachem": { "Package": "cachem", - "Version": "1.0.8", + "Version": "1.1.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "fastmap", "rlang" ], - "Hash": "c35768291560ce302c0a6589f92e837d" + "Hash": "cd9a672193789068eb5a2aad65a0dedf" }, "calendar": { "Package": "calendar", - "Version": "0.0.1", + "Version": "0.2.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", + "cli", "lubridate", - "methods", "tibble" ], - "Hash": "ab478f470a5203ff9990e42d916005b0" + "Hash": "8204ab7185576575d91df30ef48a39b3" }, - "cli": { - "Package": "cli", - "Version": "3.6.2", + "cards": { + "Package": "cards", + "Version": "0.3.0", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", - "utils" + "cli", + "dplyr", + "glue", + "rlang", + "tidyr", + "tidyselect" ], - "Hash": "1216ac65ac55ec0058a6f75d7ca0fd52" + "Hash": "2147e8448f4eb87197520fc1710855c7" }, - "clipr": { - "Package": "clipr", - "Version": "0.8.0", + "cli": { + "Package": "cli", + "Version": "3.6.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ + "R", "utils" ], - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" + "Hash": "b21916dd77a27642b447374a5d30ecf3" }, "colorspace": { "Package": "colorspace", - "Version": "2.1-0", + "Version": "2.1-1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -266,57 +197,35 @@ "methods", "stats" ], - "Hash": "f20c47fd52fae58b4e377c37bb8c335b" + "Hash": "d954cb1c57e8d8b756165d7ba18aa55a" }, "commonmark": { "Package": "commonmark", - "Version": "1.9.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "5d8225445acb167abf7797de48b2ee3c" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.4.7", + "Version": "1.9.2", "Source": "Repository", "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "5a295d7d963cc5035284dcdbaf334f4e" - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "grDevices", - "methods", - "utils" - ], - "Hash": "e8a1e41acf02548751f45c718d55aa6a" + "Hash": "14eb0596f987c71535d07c3aff814742" }, "curl": { "Package": "curl", - "Version": "5.2.0", + "Version": "5.2.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R" ], - "Hash": "ce88d13c0b10fe88a37d9c59dba2d7f9" + "Hash": "d91263322a58af798f6cf3b13fd56dde" }, "digest": { "Package": "digest", - "Version": "0.6.34", + "Version": "0.6.37", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "utils" ], - "Hash": "7ede2ee9ea8d3edbf1ca84c1e333ad1a" + "Hash": "33698c4b3127fc9f506654607fb73676" }, "dplyr": { "Package": "dplyr", @@ -341,27 +250,15 @@ ], "Hash": "fedd9d00c2944ff00a0e2696ccf048ec" }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "rlang" - ], - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" - }, "evaluate": { "Package": "evaluate", - "Version": "0.23", + "Version": "1.0.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ - "R", - "methods" + "R" ], - "Hash": "daf4a1246be12c1fa8c7705a0935c1a0" + "Hash": "6b567375113ceb7d9f800de4dd42218e" }, "fansi": { "Package": "fansi", @@ -377,17 +274,17 @@ }, "farver": { "Package": "farver", - "Version": "2.1.1", + "Version": "2.1.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "8106d78941f34855c440ddb946b8f7a5" + "Hash": "680887028577f3fa2a81e410ed0d6e42" }, "fastmap": { "Package": "fastmap", - "Version": "1.1.1", + "Version": "1.2.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "f7736a18de97dea803bde0a2daaafb27" + "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" }, "fontawesome": { "Package": "fontawesome", @@ -401,32 +298,16 @@ ], "Hash": "c2efdd5f0bcd1ea861c2d4e2a883a67d" }, - "forcats": { - "Package": "forcats", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "magrittr", - "rlang", - "tibble" - ], - "Hash": "1a0a9a3d5083d0d573c4214576f1e690" - }, "fs": { "Package": "fs", - "Version": "1.6.3", + "Version": "1.6.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "methods" ], - "Hash": "47b5f30c720c23999b913a1a635cf0bb" + "Hash": "15aeb8c27f5ea5161f9f6a641fafd93a" }, "generics": { "Package": "generics", @@ -441,7 +322,7 @@ }, "ggplot2": { "Package": "ggplot2", - "Version": "3.4.4", + "Version": "3.5.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -462,22 +343,22 @@ "vctrs", "withr" ], - "Hash": "313d31eff2274ecf4c1d3581db7241f9" + "Hash": "44c6a2f8202d5b7e878ea274b1092426" }, "glue": { "Package": "glue", - "Version": "1.7.0", + "Version": "1.8.0", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "methods" ], - "Hash": "e0b3a53876554bd45879e596cdb10a52" + "Hash": "5899f1eaa825580172bb56c08266f37c" }, "gt": { "Package": "gt", - "Version": "0.10.1", + "Version": "0.11.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -503,13 +384,13 @@ "vctrs", "xml2" ], - "Hash": "03009c105dfae79460b8eb9d8cf791e4" + "Hash": "3170d1f0f45e531c241179ab57cd30bd" }, "gtable": { "Package": "gtable", - "Version": "0.3.4", + "Version": "0.3.5", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "cli", @@ -518,95 +399,53 @@ "lifecycle", "rlang" ], - "Hash": "b29cf3031f49b04ab9c852c912547eef" + "Hash": "e18861963cbc65a27736e02b3cd3c4a0" }, "gtsummary": { "Package": "gtsummary", - "Version": "1.7.2", + "Version": "2.0.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", - "broom", - "broom.helpers", + "cards", "cli", "dplyr", - "forcats", "glue", "gt", - "knitr", "lifecycle", - "purrr", "rlang", - "stringr", - "tibble", "tidyr", "vctrs" ], - "Hash": "08df7405a102e3f0bdf7a13a29e8c6ab" - }, - "haven": { - "Package": "haven", - "Version": "2.5.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "cpp11", - "forcats", - "hms", - "lifecycle", - "methods", - "readr", - "rlang", - "tibble", - "tidyselect", - "vctrs" - ], - "Hash": "9171f898db9d9c4c1b2c745adc2c1ef1" + "Hash": "cd4d593e8ce0ad4e5c2c0acc50ce7330" }, "highr": { "Package": "highr", - "Version": "0.10", + "Version": "0.11", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "xfun" ], - "Hash": "06230136b2d2b9ba5805e1963fa6e890" - }, - "hms": { - "Package": "hms", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "lifecycle", - "methods", - "pkgconfig", - "rlang", - "vctrs" - ], - "Hash": "b59377caa7ed00fa41808342002138f9" + "Hash": "d65ba49117ca223614f71b60d85b8ab7" }, "htmltools": { "Package": "htmltools", - "Version": "0.5.7", + "Version": "0.5.8.1", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "base64enc", "digest", - "ellipsis", "fastmap", "grDevices", "rlang", "utils" ], - "Hash": "2d7b3857980e0e0d0a1fd6f11928ab0f" + "Hash": "81d371a9cc60640e74e4ab6ac46dcedc" }, "htmlwidgets": { "Package": "htmlwidgets", @@ -627,7 +466,7 @@ "Package": "isoband", "Version": "0.2.7", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "grid", "utils" @@ -646,13 +485,13 @@ }, "jsonlite": { "Package": "jsonlite", - "Version": "1.8.8", + "Version": "1.8.9", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "methods" ], - "Hash": "e1b9c55281c5adc4dd113652d9e26768" + "Hash": "4e993b65c2c3ffbffce7bb3e2c6f832b" }, "juicyjuice": { "Package": "juicyjuice", @@ -666,7 +505,7 @@ }, "knitr": { "Package": "knitr", - "Version": "1.45", + "Version": "1.48", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -678,7 +517,7 @@ "xfun", "yaml" ], - "Hash": "1ec462871063897135c1bcbe0fc8f07d" + "Hash": "acf380f300c721da9fde7df115a5f86f" }, "labeling": { "Package": "labeling", @@ -691,26 +530,9 @@ ], "Hash": "b64ec208ac5bc1852b285f665d6368b3" }, - "labelled": { - "Package": "labelled", - "Version": "2.12.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "dplyr", - "haven", - "lifecycle", - "rlang", - "stringr", - "tidyr", - "vctrs" - ], - "Hash": "1ec27c624ece6c20431e9249bd232797" - }, "lattice": { "Package": "lattice", - "Version": "0.22-5", + "Version": "0.22-6", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -721,13 +543,13 @@ "stats", "utils" ], - "Hash": "7c5e89f04e72d6611c77451f6331a091" + "Hash": "cc5ac1ba4c238c7ca9fa6a87ca11a7e2" }, "lifecycle": { "Package": "lifecycle", "Version": "1.0.4", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "cli", @@ -761,7 +583,7 @@ }, "markdown": { "Package": "markdown", - "Version": "1.12", + "Version": "1.13", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -770,7 +592,7 @@ "utils", "xfun" ], - "Hash": "765cf53992401b3b6c297b69e1edb8bd" + "Hash": "074efab766a9d6360865ad39512f2a7e" }, "memoise": { "Package": "memoise", @@ -812,18 +634,18 @@ }, "munsell": { "Package": "munsell", - "Version": "0.5.0", + "Version": "0.5.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "colorspace", "methods" ], - "Hash": "6dfe8bf774944bd5595785e3229d8771" + "Hash": "4fd8900853b746af55b81fda99da7695" }, "nlme": { "Package": "nlme", - "Version": "3.1-164", + "Version": "3.1-166", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -833,7 +655,7 @@ "stats", "utils" ], - "Hash": "a623a2239e642806158bc4dc3f51565d" + "Hash": "ccbb8846be320b627e6aa2b4616a2ded" }, "pillar": { "Package": "pillar", @@ -862,30 +684,6 @@ ], "Hash": "01f28d4278f15c76cddbea05899c5d6f" }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" - }, - "progress": { - "Package": "progress", - "Version": "1.2.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "crayon", - "hms", - "prettyunits" - ], - "Hash": "f4625e061cb2865f111b47ff163a5ca6" - }, "purrr": { "Package": "purrr", "Version": "1.0.2", @@ -925,13 +723,13 @@ }, "reactR": { "Package": "reactR", - "Version": "0.5.0", + "Version": "0.6.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "htmltools" ], - "Hash": "c9014fd1a435b2d790dd506589cb24e5" + "Hash": "b8e3d93f508045812f47136c7c44c251" }, "reactable": { "Package": "reactable", @@ -948,53 +746,30 @@ ], "Hash": "6069eb2a6597963eae0605c1875ff14c" }, - "readr": { - "Package": "readr", - "Version": "2.1.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "clipr", - "cpp11", - "crayon", - "hms", - "lifecycle", - "methods", - "rlang", - "tibble", - "tzdb", - "utils", - "vroom" - ], - "Hash": "9de96463d2117f6ac49980577939dfb3" - }, "renv": { "Package": "renv", - "Version": "1.0.3", + "Version": "1.0.9", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "utils" ], - "Hash": "41b847654f567341725473431dd0d5ab" + "Hash": "ef233f0e9064fc88c898b340c9add5c2" }, "rlang": { "Package": "rlang", - "Version": "1.1.3", + "Version": "1.1.4", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "utils" ], - "Hash": "42548638fae05fd9a9b5f3f437fbbbe2" + "Hash": "3eec01f8b1dee337674b2e34ab1f9bc1" }, "rmarkdown": { "Package": "rmarkdown", - "Version": "2.25", + "Version": "2.28", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1007,20 +782,19 @@ "jsonlite", "knitr", "methods", - "stringr", "tinytex", "tools", "utils", "xfun", "yaml" ], - "Hash": "d65e35823c817f09f4de424fcdfa812a" + "Hash": "062470668513dcda416927085ee9bdc7" }, "sass": { "Package": "sass", - "Version": "0.4.8", + "Version": "0.4.9", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R6", "fs", @@ -1028,7 +802,7 @@ "rappdirs", "rlang" ], - "Hash": "168f9353c76d4c4b0a0bbf72e2c2d035" + "Hash": "d53dbfddf695303ea4ad66f86e99b95d" }, "scales": { "Package": "scales", @@ -1052,7 +826,7 @@ }, "stringi": { "Package": "stringi", - "Version": "1.8.3", + "Version": "1.8.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1061,7 +835,7 @@ "tools", "utils" ], - "Hash": "058aebddea264f4c99401515182e656a" + "Hash": "39e1144fd75428983dc3f63aa53dfa91" }, "stringr": { "Package": "stringr", @@ -1124,7 +898,7 @@ }, "tidyselect": { "Package": "tidyselect", - "Version": "1.2.0", + "Version": "1.2.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1136,7 +910,7 @@ "vctrs", "withr" ], - "Hash": "79540e5fcd9e0435af547d885f184fd5" + "Hash": "829f27b9c4919c16b593794a6344d6c0" }, "timechange": { "Package": "timechange", @@ -1151,24 +925,13 @@ }, "tinytex": { "Package": "tinytex", - "Version": "0.49", + "Version": "0.53", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "xfun" ], - "Hash": "5ac22900ae0f386e54f1c307eca7d843" - }, - "tzdb": { - "Package": "tzdb", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "f561504ec2897f4d46f0c7657e488ae1" + "Hash": "9db859e8aabbb474293dde3097839420" }, "utf8": { "Package": "utf8", @@ -1204,55 +967,30 @@ ], "Hash": "c826c7c4241b6fc89ff55aaea3fa7491" }, - "vroom": { - "Package": "vroom", - "Version": "1.6.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bit64", - "cli", - "cpp11", - "crayon", - "glue", - "hms", - "lifecycle", - "methods", - "progress", - "rlang", - "stats", - "tibble", - "tidyselect", - "tzdb", - "vctrs", - "withr" - ], - "Hash": "390f9315bc0025be03012054103d227c" - }, "withr": { "Package": "withr", - "Version": "3.0.0", + "Version": "3.0.1", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "grDevices", "graphics" ], - "Hash": "d31b6c62c10dcf11ec530ca6b0dd5d35" + "Hash": "07909200e8bbe90426fbfeb73e1e27aa" }, "xfun": { "Package": "xfun", - "Version": "0.42", + "Version": "0.48", "Source": "Repository", "Repository": "CRAN", "Requirements": [ + "R", "grDevices", "stats", "tools" ], - "Hash": "fd1349170df31f7a10bd98b0189e85af" + "Hash": "89e455b87c84e227eb7f60a1b4e5fe1f" }, "xml2": { "Package": "xml2", @@ -1269,10 +1007,10 @@ }, "yaml": { "Package": "yaml", - "Version": "2.3.8", + "Version": "2.3.10", "Source": "Repository", "Repository": "CRAN", - "Hash": "29240487a071f535f5e5d5a323b7afbd" + "Hash": "51dab85c6c98e50a18d7551e9d49f76c" } } } diff --git a/renv/activate.R b/renv/activate.R index cb5401f..c360bf2 100644 --- a/renv/activate.R +++ b/renv/activate.R @@ -2,11 +2,13 @@ local({ # the requested version of renv - version <- "1.0.3" + version <- "1.0.9" attr(version, "sha") <- NULL # the project directory - project <- getwd() + project <- Sys.getenv("RENV_PROJECT") + if (!nzchar(project)) + project <- getwd() # use start-up diagnostics if enabled diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") @@ -31,6 +33,14 @@ local({ if (!is.null(override)) return(override) + # if we're being run in a context where R_LIBS is already set, + # don't load -- presumably we're being run as a sub-process and + # the parent process has already set up library paths for us + rcmd <- Sys.getenv("R_CMD", unset = NA) + rlibs <- Sys.getenv("R_LIBS", unset = NA) + if (!is.na(rlibs) && !is.na(rcmd)) + return(FALSE) + # next, check environment variables # TODO: prefer using the configuration one in the future envvars <- c( @@ -50,9 +60,22 @@ local({ }) - if (!enabled) + # bail if we're not enabled + if (!enabled) { + + # if we're not enabled, we might still need to manually load + # the user profile here + profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile") + if (file.exists(profile)) { + cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE") + if (tolower(cfg) %in% c("true", "t", "1")) + sys.source(profile, envir = globalenv()) + } + return(FALSE) + } + # avoid recursion if (identical(getOption("renv.autoloader.running"), TRUE)) { warning("ignoring recursive attempt to run renv autoloader") @@ -75,6 +98,66 @@ local({ unloadNamespace("renv") # load bootstrap tools + ansify <- function(text) { + if (renv_ansify_enabled()) + renv_ansify_enhanced(text) + else + renv_ansify_default(text) + } + + renv_ansify_enabled <- function() { + + override <- Sys.getenv("RENV_ANSIFY_ENABLED", unset = NA) + if (!is.na(override)) + return(as.logical(override)) + + pane <- Sys.getenv("RSTUDIO_CHILD_PROCESS_PANE", unset = NA) + if (identical(pane, "build")) + return(FALSE) + + testthat <- Sys.getenv("TESTTHAT", unset = "false") + if (tolower(testthat) %in% "true") + return(FALSE) + + iderun <- Sys.getenv("R_CLI_HAS_HYPERLINK_IDE_RUN", unset = "false") + if (tolower(iderun) %in% "false") + return(FALSE) + + TRUE + + } + + renv_ansify_default <- function(text) { + text + } + + renv_ansify_enhanced <- function(text) { + + # R help links + pattern <- "`\\?(renv::(?:[^`])+)`" + replacement <- "`\033]8;;ide:help:\\1\a?\\1\033]8;;\a`" + text <- gsub(pattern, replacement, text, perl = TRUE) + + # runnable code + pattern <- "`(renv::(?:[^`])+)`" + replacement <- "`\033]8;;ide:run:\\1\a\\1\033]8;;\a`" + text <- gsub(pattern, replacement, text, perl = TRUE) + + # return ansified text + text + + } + + renv_ansify_init <- function() { + + envir <- renv_envir_self() + if (renv_ansify_enabled()) + assign("ansify", renv_ansify_enhanced, envir = envir) + else + assign("ansify", renv_ansify_default, envir = envir) + + } + `%||%` <- function(x, y) { if (is.null(x)) y else x } @@ -108,6 +191,24 @@ local({ } + heredoc <- function(text, leave = 0) { + + # remove leading, trailing whitespace + trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text) + + # split into lines + lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]] + + # compute common indent + indent <- regexpr("[^[:space:]]", lines) + common <- min(setdiff(indent, -1L)) - leave + text <- paste(substring(lines, common), collapse = "\n") + + # substitute in ANSI links for executable renv code + ansify(text) + + } + startswith <- function(string, prefix) { substring(string, 1, nchar(prefix)) == prefix } @@ -268,7 +369,11 @@ local({ ) if ("headers" %in% names(formals(utils::download.file))) - args$headers <- renv_bootstrap_download_custom_headers(url) + { + headers <- renv_bootstrap_download_custom_headers(url) + if (length(headers) && is.character(headers)) + args$headers <- headers + } do.call(utils::download.file, args) @@ -347,10 +452,22 @@ local({ for (type in types) { for (repos in renv_bootstrap_repos()) { + # build arguments for utils::available.packages() call + args <- list(type = type, repos = repos) + + # add custom headers if available -- note that + # utils::available.packages() will pass this to download.file() + if ("headers" %in% names(formals(utils::download.file))) + { + headers <- renv_bootstrap_download_custom_headers(url) + if (length(headers) && is.character(headers)) + args$headers <- headers + } + # retrieve package database db <- tryCatch( as.data.frame( - utils::available.packages(type = type, repos = repos), + do.call(utils::available.packages, args), stringsAsFactors = FALSE ), error = identity @@ -432,6 +549,14 @@ local({ } + renv_bootstrap_github_token <- function() { + for (envvar in c("GITHUB_TOKEN", "GITHUB_PAT", "GH_TOKEN")) { + envval <- Sys.getenv(envvar, unset = NA) + if (!is.na(envval)) + return(envval) + } + } + renv_bootstrap_download_github <- function(version) { enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") @@ -439,16 +564,16 @@ local({ return(FALSE) # prepare download options - pat <- Sys.getenv("GITHUB_PAT") - if (nzchar(Sys.which("curl")) && nzchar(pat)) { + token <- renv_bootstrap_github_token() + if (nzchar(Sys.which("curl")) && nzchar(token)) { fmt <- "--location --fail --header \"Authorization: token %s\"" - extra <- sprintf(fmt, pat) + extra <- sprintf(fmt, token) saved <- options("download.file.method", "download.file.extra") options(download.file.method = "curl", download.file.extra = extra) on.exit(do.call(base::options, saved), add = TRUE) - } else if (nzchar(Sys.which("wget")) && nzchar(pat)) { + } else if (nzchar(Sys.which("wget")) && nzchar(token)) { fmt <- "--header=\"Authorization: token %s\"" - extra <- sprintf(fmt, pat) + extra <- sprintf(fmt, token) saved <- options("download.file.method", "download.file.extra") options(download.file.method = "wget", download.file.extra = extra) on.exit(do.call(base::options, saved), add = TRUE) @@ -610,6 +735,9 @@ local({ # if the user has requested an automatic prefix, generate it auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) + if (is.na(auto) && getRversion() >= "4.4.0") + auto <- "TRUE" + if (auto %in% c("TRUE", "True", "true", "1")) return(renv_bootstrap_platform_prefix_auto()) @@ -801,24 +929,23 @@ local({ # the loaded version of renv doesn't match the requested version; # give the user instructions on how to proceed - remote <- if (!is.null(description[["RemoteSha"]])) { + dev <- identical(description[["RemoteType"]], "github") + remote <- if (dev) paste("rstudio/renv", description[["RemoteSha"]], sep = "@") - } else { + else paste("renv", description[["Version"]], sep = "@") - } # display both loaded version + sha if available friendly <- renv_bootstrap_version_friendly( version = description[["Version"]], - sha = description[["RemoteSha"]] + sha = if (dev) description[["RemoteSha"]] ) - fmt <- paste( - "renv %1$s was loaded from project library, but this project is configured to use renv %2$s.", - "- Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.", - "- Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.", - sep = "\n" - ) + fmt <- heredoc(" + renv %1$s was loaded from project library, but this project is configured to use renv %2$s. + - Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile. + - Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library. + ") catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) FALSE @@ -1041,7 +1168,7 @@ local({ # if jsonlite is loaded, use that instead if ("jsonlite" %in% loadedNamespaces()) { - json <- catch(renv_json_read_jsonlite(file, text)) + json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity) if (!inherits(json, "error")) return(json) @@ -1050,7 +1177,7 @@ local({ } # otherwise, fall back to the default JSON reader - json <- catch(renv_json_read_default(file, text)) + json <- tryCatch(renv_json_read_default(file, text), error = identity) if (!inherits(json, "error")) return(json) @@ -1063,14 +1190,14 @@ local({ } renv_json_read_jsonlite <- function(file = NULL, text = NULL) { - text <- paste(text %||% read(file), collapse = "\n") + text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") jsonlite::fromJSON(txt = text, simplifyVector = FALSE) } renv_json_read_default <- function(file = NULL, text = NULL) { # find strings in the JSON - text <- paste(text %||% read(file), collapse = "\n") + text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") pattern <- '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' locs <- gregexpr(pattern, text, perl = TRUE)[[1]] @@ -1118,14 +1245,14 @@ local({ map <- as.list(map) # remap strings in object - remapped <- renv_json_remap(json, map) + remapped <- renv_json_read_remap(json, map) # evaluate eval(remapped, envir = baseenv()) } - renv_json_remap <- function(json, map) { + renv_json_read_remap <- function(json, map) { # fix names if (!is.null(names(json))) { @@ -1152,7 +1279,7 @@ local({ # recurse if (is.recursive(json)) { for (i in seq_along(json)) { - json[i] <- list(renv_json_remap(json[[i]], map)) + json[i] <- list(renv_json_read_remap(json[[i]], map)) } } diff --git a/stRoke.Rproj b/stRoke.Rproj index eaa6b81..1788e68 100644 --- a/stRoke.Rproj +++ b/stRoke.Rproj @@ -15,4 +15,4 @@ LaTeX: pdfLaTeX BuildType: Package PackageUseDevtools: Yes PackageInstallArgs: --no-multiarch --with-keep.source -PackageRoxygenize: rd,collate,namespace +PackageRoxygenize: rd,collate,namespace,vignette diff --git a/tests/spelling.R b/tests/spelling.R deleted file mode 100644 index 6713838..0000000 --- a/tests/spelling.R +++ /dev/null @@ -1,3 +0,0 @@ -if(requireNamespace('spelling', quietly = TRUE)) - spelling::spell_check_test(vignettes = TRUE, error = FALSE, - skip_on_cran = TRUE) diff --git a/tests/testthat/Rplots.pdf b/tests/testthat/Rplots.pdf deleted file mode 100644 index eee4472d5e5875a0588288a0e8324131c273c930..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3611 zcmZ`+dpK0<9u^@}k$ba=MHGcKGZ;gZ%eX{x&A4Y83$q(D)6ANT%eaS-lawge6kU!Z zA-5>G=Q3_7rIgwcxfCH(XQsV(dq4X;XFbn)*7LpJ@Av-R?_2-8ueu}NN*k@Chft3h zk9iZrjT!W2AkY8`pdI@aVQh>5Ef^3HCex^RA`AfkF8K&^MoB?YFksd@QF#!h_OlQHoHb(}{pGATg{9QdAj1Hgb$1EBj(nRdvkASHD zd=;3VY5>qRlnw!)1ra7vXn_FeNDPFSfG)4V8ThM#zy4kRpAEm)fp%nnCg275@EB+; zD$FYb?IC|M(VWHxyimNQK1z@O`uvSd?P|)^aBBz&erCDK9BK-+`km_A--ZS@Suf-IgttZ16Y2Q z&!2a|U;TL`GYSkbsQe)y9y&=TL3~p1Fz*_`Ll89(4gxUxhFAc!BJ&G*Uka}l50Pm8 z5ML7$=KaxN1Un};GsM+pL@trrV9?-rZd>yCzT-j8f;L+lY|?f1pvAV?J~%6&ip9Iq z@lNT*n=l%$qKhoj%T<$4ZEz}|-iX8xouJDoWFGV{MULGIo$I+gro0?^JimeaB5;l~ zTqkgLJx=)HA$PIpErsqfuP0iQ&ZGqTiEh|3FCat_ctx+MFqd1g63iBic$!MdmR^x> zs1paitnC>*klG~hJ^y^IhbmgYF)MZA)5?f9Qoa*sLda3CcIeEyt7qSfvh7v%h{d>N zFh6N|MJ#1Q5{3(ycw=N2vv(Yte>=MS%^5?f#?*8_r2NFDm0C>WE>awPFu}Bq_O=`u zaTqJ0ac)%S9n;01qD?xdfr-_A6Dsh^rt|3h0O;P$mF|*g?d|r|ky0y3LhkZ*NjQ@s zo${K?wVz07?M8_koY^^!ewvN+P<+i02;i=J$b<$X@2Kv3iZjHag0+JiHHM;m)-Ru1 zKAGtoA2o}_E3Y&!5hAm<3fwM+szz25gUPZ2KGPc<>%S)U_<;h+cN$sZoD)iQ5x&kX z<641xZ;g(6+il1{t_e=gt>%kISsabvIyb(U`;Ew6$iSV0(H6c2)PS&Jd`m~~IQ`3( zcln7c%A(&`N^+9xYK=+Yc}sj(@gd+)W|dcmbdqqkd4lOm{-qU(=5JR=YBNtiTaoO` zbQip)@{4Jtl7Pk@NkA;ze{bI$XLFmi(3hT+{_L#WHE!%T4x#4Iw+=bAs5Fu_9#bRb z)cfJmx~HHXAYf@KG-awVDJ1=1L8r zTk5y_x(KU4QZEim-wwx+Ug_aPbz-{wHjZv^Mv3P|YtAFOO}E9L>ewdhoCpIJ9g25O zxt~>dD8N;qle&euji9XQbb<4A#hVFJg#nXZlN#_Zbpl&0stcTgq*i6aM0cXZ zikm!dOHza@{2Xwb(&FWtI_EJsWu4gS2N&o<5!+_t9hxt`l5|HLh$)eb-X>{uB?ToZ z_t45bovkJ&sdDSA)Kx*U>9ey+SCwm%ZPH6RyktZyEzypL&ToFCEPHDFN@k&3A-3qI zlc;0v_5DLfhBSUfe3rDgI)0_6zjsmq)-poors!A^3NH8Un5>wTT*R%)io_L?QqgJK zqYf$VlC2P|KvpOWrWu|>wxtq_%iaHNG^{wCytS2a`xpg%7ZJWKTq<06Um7QF=QvEi zi#zIVd^l-u%aK=}^xbpz55n+*1k?O4<6SSITntc+!CX}5?J##D-yPbtJ z!MN#)qk0Xf`i;lUu_p{X0tWmTJu;+67<=6p!C@m?uoVV&=v!z7Ok&TDZsB+JJ&D?V za);&2Q$$h}4oMAWWH(cwG|vI;IPJ~a^;-EJNcUE+;EJj0)u3QnF7-tar#<1AbdXEX zAZg)NX}0#0yKPI)ygzx5)!v#o$>mT3sqNLzNg;!IzbYTQ-_-czTU=aGTt{IKaiISJ zy1#t*qew~{f)pH(8)CjM)UfoV(YwXrktUB15l_F!%NN^SvPn*Ozl)H z!+YB28g)xGzPf?x9O4s_79O`IB*Br$v(9LbFS!wTbHa=p=sWDIS|(ohgc7)9yQE2L zdCskG3GYiBm;TLVhB-#y8jMsw4td0VNjo*B8C4l|_B-~w!UoR`qtWl8Z_NzBz@&_(b0Bx`}uYoQt2^5n{V=9l5`8J zo%E*Y&E@eD`BkmaTDo!5{zBaARn<3^p(#3A!|pkaD=Sj1>N)DxQvIjVr?pSd85ZV< z^ezrWU#qe!siDm3%u45p(nM+J<{p6)4r;Z#F6=h3J!$_k&p3NL&pG{*>jOF0&3PrO zCBxSm4{x@Ap1-7Nva7*F=wf=-30E7*VzD($mF@y2v7);ox#DV9&czvTtU5wUAF>!p zxl`Y&H^Lo?Zo%L2#aw!m>5{Rq%fM*aCXbPaqWRU1e6sJ_{fV=1-#5my$*13|!0Yy1 zKls|jqtzpQH?Q3aBTSd+c$ze}(RyO4;;YEVqckdYw7`g3od6$)bhrLXSIR#}PJ5-u zCR?@|U~4GXpC>)jc#5kb&lcabSGHrT%iERO?X?}Fy`wg+T<9TOILdi;t`fT4T}a`& zb-TSDo_;=By+ebb!v&R}E8S^eiju55(=P72_~D)-k>FIFa@+2XohQ`&j z5|yGZugrXIHcJfu*X^`QPT-19uxM4$Rp}}3mxhlo45-hfO)KsHg-xh1eS3i(lCJ+`4@iXE%7jcZI!va5y8or1ikw z@7`{>;~DTj+~OZr+~B7TMf_pKEvYhBmPXGbp$pHZn1EP|6hTRL$(+7jeR2CC3#DXVSG#H{l0Wbosrw97e zc#(n0Bm-a|gLsnXafu`r-|CXc3=%6ifC8}r5GGT2UKR`{k{C2903KsN{6bzQkwk*1 zFaq=^^F}erOaRoO(qMlm000?3M3Q)RpF$!24G&^b1Bnb)Fonp10gx6*qe91d(}+Kq znSAH&^S3O*W0$ndPZy2G{Z$7uh-3=H;6*q9bRma901f~TQUhoJKifG2pfimI1N>z5 YBZ)9!A_M+$HeFoN3RArBB($l-)@0(r;- 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 literal 0 HcmV?d00001