tweenr/0000755000176200001440000000000013404731263011561 5ustar liggesuserstweenr/tests/0000755000176200001440000000000013357450720012726 5ustar liggesuserstweenr/tests/testthat.R0000644000176200001440000000007013352427011014676 0ustar liggesuserslibrary(testthat) library(tweenr) test_check("tweenr") tweenr/tests/testthat/0000755000176200001440000000000013404731263014563 5ustar liggesuserstweenr/tests/testthat/test-along.R0000644000176200001440000000167113352515746017000 0ustar liggesuserscontext("along") df <- data.frame( x = c(1, 5, 7, 10), y = c(4, 3, 7, -1), col = c('black', 'red', 'green', 'blue'), type = letters[1:4], stringsAsFactors = FALSE ) test_that("tween_along works", { tween <- tween_along(df, ease = 'linear', nframes = 10, along = x) expect_equal(nrow(tween), 30) expect_equal(tween$col[22], '#77B784FF') expect_equal(tween$y[8], 3.25) tween <- tween_along(df, ease = 'linear', nframes = 10, along = x, history = FALSE) expect_equal(nrow(tween), 9) expect_equal(tween$col[8], '#77B784FF') expect_equal(tween$y[2], 3.75) }) test_that("tween_along throws errors", { expect_error(tween_along(df, ease = 'linear', nframes = 10, along = 1)) expect_error(tween_along(df, ease = 'linear', nframes = 10, along = x, id = 1)) expect_error(tween_along(df, ease = 'linear', nframes = 10, along = x, range = c(0, 0))) expect_error(tween_along(df[1,], ease = 'linear', nframes = 10, along = x)) }) tweenr/tests/testthat/test-fill.R0000644000176200001440000000107713352665036016624 0ustar liggesuserscontext("fill") df <- data.frame( x = c(1, NA, NA, NA, 6, 4, NA, NA, NA, NA, 20), type = c('a', NA, NA, NA, 'b', 'c', NA, NA, NA, NA, 'd'), col = c('red', NA, NA, NA, 'blue', 'green', NA, NA, NA, NA, 'black'), stringsAsFactors = FALSE ) test_that("tween_fill works", { tween <- tween_fill(df, 'linear') expect_equal(dim(df), dim(tween)) expect_equal(tween$x[3], 3.5) expect_equal(tween$col[10], '#110010FF') expect_equal(tween_fill(df$col, 'linear'), tween$col) tween <- tween_fill(df[-c(1, 11), 1], 'linear') expect_equal(tween, df$x[-c(1, 11)]) }) tweenr/tests/testthat/test-components.R0000644000176200001440000000336113352644546020064 0ustar liggesuserscontext("components") df <- data.frame( x = c(1, 5, 7, 10), y = c(4, 3, 7, -1), col = c('black', 'red', 'green', 'blue'), type = letters[1:4], stringsAsFactors = FALSE ) test_that("tween_components works", { tween <- tween_components(df, 'linear', nframes = 10, time = c(1, 7, 13, 20)) expect_equal(nrow(tween), 10) expect_equal(tween$x[6], 19/3) expect_equal(tween$col[2], '#52170AFF') expect_equal(max(tween$.frame), 10) expect_true(all(tween$.phase[c(1,4,7,10)] == 'raw')) expect_true(all(tween$.phase[-c(1,4,7,10)] == 'transition')) tween <- tween_components(df, 'linear', nframes = 10, time = c(1, 7, 13, 20), rep(c(1,2), 2)) expect_equal(nrow(tween), 14) expect_equal(tween$x[12], 25/3) expect_equal(tween$col[2], '#152910FF') expect_equal(max(tween$.frame), 10) expect_true(all(tween$.phase[c(1,5,10,14)] == 'raw')) expect_true(all(tween$.phase[-c(1,5,10,14)] == 'transition')) }) test_that("enter/exit works", { tween <- tween_components(df, 'linear', nframes = 20, time = c(1, 7, 13, 20), enter = function(df) { df$x <- 0 df$col <- 'red' df }, enter_length = 3) expect_equal(nrow(tween), 20) expect_equal(tween$x[3], 2/3, tolerance = 1e-7) expect_equal(tween$col[2], '#A41A0AFF') expect_equal(max(tween$.frame), 20) expect_true(all(tween$.phase[1:3] == 'enter')) }) test_that("weird input gets caught", { tween <- tween_components(df, 'linear', nframes = 0, time = c(1, 7, 13, 20)) expect_equal(nrow(tween), 0) tween <- tween_components(df[integer(), ], 'linear', nframes = 10, time = numeric()) expect_equal(nrow(tween), 0) expect_error(tween_components(df, 'linear', nframes = 10, time = 1)) expect_error(tween_components(df, 'linear', nframes = 0, time = c(1, 7, 13, 20), id = 1)) }) tweenr/tests/testthat/test-events.R0000644000176200001440000000213513352651364017175 0ustar liggesuserscontext("events") df <- data.frame( x = c(1, 5, 7, 10), y = c(4, 3, 7, -1), col = c('black', 'red', 'green', 'blue'), type = letters[1:4], stringsAsFactors = FALSE ) test_that("tween_events works", { tween <- tween_events(df, 'linear', 20, x, x + 2) expect_equal(nrow(tween), 17) expect_equal(max(tween$.frame), 20) expect_true(all(tween$.phase[c(4, 8, 13, 17)] == 'raw')) expect_true(all(tween$.phase[-c(4, 8, 13, 17)] == 'static')) tween <- tween_events(df, 'linear', 20, x, enter = function(df) { df$x <- 0 df$col <- 'red' df }, enter_length = 3) expect_equal(nrow(tween), 23) expect_equal(max(tween$.frame), 20) expect_true(all(tween$.phase[c(6, 13, 17, 23)] == 'raw')) expect_true(all(tween$.phase[-c(6, 13, 17, 23)] == 'enter')) expect_equal(tween$x[2], 0.2) expect_equal(tween$col[3], '#931B0BFF') }) test_that("weird input gets handled", { expect_error(tween_events(df, 'linear', 20)) tween <- tween_events(df, 'linear', 0, x) expect_equal(nrow(tween), 0) tween <- tween_events(df[integer(), ], 'linear', 10, x) expect_equal(nrow(tween), 0) }) tweenr/tests/testthat/test-at.R0000644000176200001440000000224013352633133016264 0ustar liggesuserscontext("at") df1 <- data.frame(x = 1:2, y = 4:5, col = 'black', type = letters[1:2], stringsAsFactors = FALSE) df2 <- data.frame(x = 11:12, y = 14:15, col = 'white', type = letters[1], stringsAsFactors = FALSE) test_that("tween_at works", { tween <- tween_at(df1, df2, 0.5, 'linear') expect_equal(nrow(tween), 2) expect_named(tween, names(df1)) expect_equal(tween$x, c(6, 7)) expect_equal(tween$col[1], '#767676FF') }) test_that("tween_at handles weird input", { tween <- tween_at(df1, df2[1,], 0.5, 'linear') expect_equal(nrow(tween), 2) tween <- tween_at(df1[1,], df2, 0.5, 'linear') expect_equal(nrow(tween), 2) tween <- tween_at(df1, df2[integer(),], 0.5, 'linear') expect_equal(nrow(tween), 0) tween <- tween_at(df1[integer(),], df2, 0.5, 'linear') expect_equal(nrow(tween), 0) expect_error(tween_at(df1[c(1,2,1), ], df2, 0.5, 'linear')) expect_error(tween_at(df1, df2, numeric(), 'linear')) expect_error(tween_at(df1, df2, 0.5, character())) }) test_that('tween_at works with vectors', { tween <- tween_at(df1$x, df2$x, 0.5, 'linear') expect_is(tween, 'numeric') expect_equal(tween, c(6,7)) expect_error(tween_at(df1$x, df2$col)) }) tweenr/tests/testthat/test-state.R0000644000176200001440000000220713352434613017005 0ustar liggesuserscontext("state") df1 <- data.frame(x = 1:2, y = 4:5, col = 'black', type = letters[1:2], stringsAsFactors = FALSE) df2 <- data.frame(x = 11:12, y = 14:15, col = 'white', type = letters[1], stringsAsFactors = FALSE) test_that("tween_state works", { tween <- tween_state(df1, df2, ease = 'linear', nframes = 5) expect_equal(max(tween$.frame), 5) expect_true(all(tween$.phase[c(1:2, 9:10)] == 'raw')) expect_true(all(tween$.phase[c(3:8)] == 'transition')) expect_true(all(tween$.id == rep(1:2, 5))) expect_equal(tween$col[5], '#767676FF') expect_equal(tween$x[7], 8.5) expect_equal(tween$type[4:5], c('b', 'a')) }) test_that("keep_state works", { keep <- keep_state(df1, 5) expect_equal(max(keep$.frame), 5) expect_true(all(keep$.phase[c(9:10)] == 'raw')) expect_true(all(keep$.phase[c(1:8)] == 'static')) }) test_that("enter/exit works", { tween <- tween_state(df1, df2[1,, drop = FALSE], 'linear', 5, exit = function(df) { df$x <- 0 df$col <- 'red' df }) expect_equal(nrow(tween), 9) expect_true(all(tween$.phase[c(4,6,8)] == 'exit')) expect_equal(tween$col[8], '#BA1808FF') expect_equal(tween$x[8], 0.5) }) tweenr/src/0000755000176200001440000000000013404726426012355 5ustar liggesuserstweenr/src/interpolators.cpp0000644000176200001440000012137113404726426015773 0ustar liggesusers#include #include "easing.h" using namespace Rcpp; enum easeEnum { linear, quadratic_in, quadratic_out, quadratic_in_out, cubic_in, cubic_out, cubic_in_out, quartic_in, quartic_out, quartic_in_out, quintic_in, quintic_out, quintic_in_out, sine_in, sine_out, sine_in_out, circular_in, circular_out, circular_in_out, exponential_in, exponential_out, exponential_in_out, elastic_in, elastic_out, elastic_in_out, back_in, back_out, back_in_out, bounce_in, bounce_out, bounce_in_out, UNKNOWN }; easeEnum hashEase(std::string ease) { if (ease == "linear") return linear; if (ease == "quadratic-in") return quadratic_in; if (ease == "quadratic-out") return quadratic_out; if (ease == "quadratic-in-out") return quadratic_in_out; if (ease == "cubic-in") return cubic_in; if (ease == "cubic-out") return cubic_out; if (ease == "cubic-in-out") return cubic_in_out; if (ease == "quartic-in") return quartic_in; if (ease == "quartic-out") return quartic_out; if (ease == "quartic-in-out") return quartic_in_out; if (ease == "quintic-in") return quintic_in; if (ease == "quintic-out") return quintic_out; if (ease == "quintic-in-out") return quintic_in_out; if (ease == "sine-in") return sine_in; if (ease == "sine-out") return sine_out; if (ease == "sine-in-out") return sine_in_out; if (ease == "circular-in") return circular_in; if (ease == "circular-out") return circular_out; if (ease == "circular-in-out") return circular_in_out; if (ease == "exponential-in") return exponential_in; if (ease == "exponential-out") return exponential_out; if (ease == "exponential-in-out") return exponential_in_out; if (ease == "elastic-in") return elastic_in; if (ease == "elastic-out") return elastic_out; if (ease == "elastic-in-out") return elastic_in_out; if (ease == "back-in") return back_in; if (ease == "back-out") return back_out; if (ease == "back-in-out") return back_in_out; if (ease == "bounce-in") return bounce_in; if (ease == "bounce-out") return bounce_out; if (ease == "bounce-in-out") return bounce_in_out; return UNKNOWN; } std::vector easeSeq(std::string easer, int length) { std::vector res(length); double p; // Just linear for now for(int i = 0; i < length; ++i) { p = double(i) / length; switch (hashEase(easer)) { case linear: res[i] = LinearInterpolation(p); break; case quadratic_in: res[i] = QuadraticEaseIn(p); break; case quadratic_out: res[i] = QuadraticEaseOut(p); break; case quadratic_in_out: res[i] = QuadraticEaseInOut(p); break; case cubic_in: res[i] = CubicEaseIn(p); break; case cubic_out: res[i] = CubicEaseOut(p); break; case cubic_in_out: res[i] = CubicEaseInOut(p); break; case quartic_in: res[i] = QuarticEaseIn(p); break; case quartic_out: res[i] = QuarticEaseOut(p); break; case quartic_in_out: res[i] = QuarticEaseInOut(p); break; case quintic_in: res[i] = QuinticEaseIn(p); break; case quintic_out: res[i] = QuinticEaseOut(p); break; case quintic_in_out: res[i] = QuinticEaseInOut(p); break; case sine_in: res[i] = SineEaseIn(p); break; case sine_out: res[i] = SineEaseOut(p); break; case sine_in_out: res[i] = SineEaseInOut(p); break; case circular_in: res[i] = CircularEaseIn(p); break; case circular_out: res[i] = CircularEaseOut(p); break; case circular_in_out: res[i] = CircularEaseInOut(p); break; case exponential_in: res[i] = ExponentialEaseIn(p); break; case exponential_out: res[i] = ExponentialEaseOut(p); break; case exponential_in_out: res[i] = ExponentialEaseInOut(p); break; case elastic_in: res[i] = ElasticEaseIn(p); break; case elastic_out: res[i] = ElasticEaseOut(p); break; case elastic_in_out: res[i] = ElasticEaseInOut(p); break; case back_in: res[i] = BackEaseIn(p); break; case back_out: res[i] = BackEaseOut(p); break; case back_in_out: res[i] = BackEaseInOut(p); break; case bounce_in: res[i] = BounceEaseIn(p); break; case bounce_out: res[i] = BounceEaseOut(p); break; case bounce_in_out: res[i] = BounceEaseInOut(p); break; case UNKNOWN: stop("Unknown easing function"); } } return res; } double easePos(double p, std::string easer) { double p_new; switch (hashEase(easer)) { case linear: p_new = LinearInterpolation(p); break; case quadratic_in: p_new = QuadraticEaseIn(p); break; case quadratic_out: p_new = QuadraticEaseOut(p); break; case quadratic_in_out: p_new = QuadraticEaseInOut(p); break; case cubic_in: p_new = CubicEaseIn(p); break; case cubic_out: p_new = CubicEaseOut(p); break; case cubic_in_out: p_new = CubicEaseInOut(p); break; case quartic_in: p_new = QuarticEaseIn(p); break; case quartic_out: p_new = QuarticEaseOut(p); break; case quartic_in_out: p_new = QuarticEaseInOut(p); break; case quintic_in: p_new = QuinticEaseIn(p); break; case quintic_out: p_new = QuinticEaseOut(p); break; case quintic_in_out: p_new = QuinticEaseInOut(p); break; case sine_in: p_new = SineEaseIn(p); break; case sine_out: p_new = SineEaseOut(p); break; case sine_in_out: p_new = SineEaseInOut(p); break; case circular_in: p_new = CircularEaseIn(p); break; case circular_out: p_new = CircularEaseOut(p); break; case circular_in_out: p_new = CircularEaseInOut(p); break; case exponential_in: p_new = ExponentialEaseIn(p); break; case exponential_out: p_new = ExponentialEaseOut(p); break; case exponential_in_out: p_new = ExponentialEaseInOut(p); break; case elastic_in: p_new = ElasticEaseIn(p); break; case elastic_out: p_new = ElasticEaseOut(p); break; case elastic_in_out: p_new = ElasticEaseInOut(p); break; case back_in: p_new = BackEaseIn(p); break; case back_out: p_new = BackEaseOut(p); break; case back_in_out: p_new = BackEaseInOut(p); break; case bounce_in: p_new = BounceEaseIn(p); break; case bounce_out: p_new = BounceEaseOut(p); break; case bounce_in_out: p_new = BounceEaseInOut(p); break; case UNKNOWN: stop("Unknown easing function"); } return p_new; } //[[Rcpp::export]] NumericVector numeric_state_interpolator(List data, DataFrame states) { IntegerVector state_index = states("state"); NumericVector nframes_per_state = states("nframes"); std::vector easer = states("ease"); int nelements = as(data(0)).size(); int nstates = states.nrows(); int nframes = sum(nframes_per_state); int frame = 0; int state, element, currentframe, res_index; NumericVector res(nelements * nframes); for (state = 0; state < nstates; ++state) { if (easer[state] == "constant") { NumericVector state_from = data(state_index(state)); for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements; for (element = 0; element < nelements; ++element) { res[res_index] = state_from[element]; ++res_index; } } } else { std::vector ease_points = easeSeq(easer[state], nframes_per_state(state)); NumericVector state_from = data(state_index(state)); NumericVector state_to = data(state_index(state) + 1); for (element = 0; element < nelements; ++element) { for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements + element; res[res_index] = state_from[element] + ease_points[currentframe] * (state_to[element] - state_from[element]); } } } frame += nframes_per_state(state); } return res; } //[[Rcpp::export]] NumericMatrix colour_state_interpolator(List data, DataFrame states) { IntegerVector state_index = states("state"); NumericVector nframes_per_state = states("nframes"); std::vector easer = states("ease"); int nelements = as(data(0)).nrow(); int nstates = states.nrows(); int nframes = sum(nframes_per_state); int frame = 0; int state, element, currentframe, res_index; NumericMatrix res(nelements * nframes, 4); for (state = 0; state < nstates; ++state) { if (easer[state] == "constant") { NumericMatrix state_from = data(state_index(state)); for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements; for (element = 0; element < nelements; ++element) { res(res_index, 0) = state_from(element, 0); res(res_index, 1) = state_from(element, 1); res(res_index, 2) = state_from(element, 2); res(res_index, 3) = state_from(element, 3); ++res_index; } } } else { std::vector ease_points = easeSeq(easer[state], nframes_per_state(state)); NumericMatrix state_from = data(state_index(state)); NumericMatrix state_to = data(state_index(state) + 1); for (element = 0; element < nelements; ++element) { for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements + element; res(res_index, 0) = state_from(element, 0) + ease_points[currentframe] * (state_to(element, 0) - state_from(element, 0)); res(res_index, 1) = state_from(element, 1) + ease_points[currentframe] * (state_to(element, 1) - state_from(element, 1)); res(res_index, 2) = state_from(element, 2) + ease_points[currentframe] * (state_to(element, 2) - state_from(element, 2)); res(res_index, 3) = state_from(element, 3) + ease_points[currentframe] * (state_to(element, 3) - state_from(element, 3)); } } } frame += nframes_per_state(state); } return res; } //[[Rcpp::export]] CharacterVector constant_state_interpolator(List data, DataFrame states) { IntegerVector state_index = states("state"); NumericVector nframes_per_state = states("nframes"); std::vector easer = states("ease"); int nelements = as(data(0)).size(); int nstates = states.nrows(); int nframes = sum(nframes_per_state); int frame = 0; int state, element, currentframe, res_index; CharacterVector res(nelements * nframes); for (state = 0; state < nstates; ++state) { if (easer[state] == "constant") { CharacterVector state_from = data(state_index(state)); for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements; for (element = 0; element < nelements; ++element) { res[res_index] = state_from[element]; ++res_index; } } } else { std::vector ease_points = easeSeq(easer[state], nframes_per_state(state)); CharacterVector state_from = data(state_index(state)); CharacterVector state_to = data(state_index(state) + 1); for (element = 0; element < nelements; ++element) { for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements + element; if (ease_points[currentframe] < 0.5) { res[res_index] = state_from[element]; } else { res[res_index] = state_to[element]; } } } } frame += nframes_per_state(state); } return res; } //[[Rcpp::export]] List list_state_interpolator(List data, DataFrame states) { IntegerVector state_index = states("state"); NumericVector nframes_per_state = states("nframes"); std::vector easer = states("ease"); int nelements = as(data(0)).size(); int nstates = states.nrows(); int nframes = sum(nframes_per_state); int frame = 0; int state, element, currentframe, res_index; List res(nelements * nframes); for (state = 0; state < nstates; ++state) { if (easer[state] == "constant") { List state_from = data(state_index(state)); for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements; for (element = 0; element < nelements; ++element) { res[res_index] = state_from[element]; ++res_index; } } } else { std::vector ease_points = easeSeq(easer[state], nframes_per_state(state)); List state_from = data(state_index(state)); List state_to = data(state_index(state) + 1); for (element = 0; element < nelements; ++element) { for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements + element; if (ease_points[currentframe] < 0.5) { res[res_index] = state_from[element]; } else { res[res_index] = state_to[element]; } } } } frame += nframes_per_state(state); } return res; } NumericVector align_num_elem(NumericVector from, NumericVector to) { NumericVector res; if (from.size() < to.size()) { if (from.size() == 0) { res = NumericVector(to.size(), mean(to)); } else { res = NumericVector(to.size()); for (int i = 0; i < res.size(); ++i) { res[i] = from[i % from.size()]; } } } else { res = from; } return res; } //[[Rcpp::export]] List numlist_state_interpolator(List data, DataFrame states) { IntegerVector state_index = states("state"); NumericVector nframes_per_state = states("nframes"); std::vector easer = states("ease"); int nelements = as(data(0)).size(); int nstates = states.nrows(); int nframes = sum(nframes_per_state); int frame = 0; int state, element, currentframe, res_index; List res(nelements * nframes); for (state = 0; state < nstates; ++state) { if (easer[state] == "constant") { List state_from = data(state_index(state)); for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements; for (element = 0; element < nelements; ++element) { res[res_index] = state_from[element]; ++res_index; } } } else { std::vector ease_points = easeSeq(easer[state], nframes_per_state(state)); List state_from = data(state_index(state)); List state_to = data(state_index(state) + 1); for (element = 0; element < nelements; ++element) { NumericVector state_from_vec = state_from[element]; NumericVector state_to_vec = state_to[element]; state_from_vec = align_num_elem(state_from_vec, state_to_vec); state_to_vec = align_num_elem(state_to_vec, state_from_vec); for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements + element; NumericVector state_vec = state_from_vec + ease_points[currentframe] * (state_to_vec - state_from_vec); res[res_index] = state_vec; } } } frame += nframes_per_state(state); } return res; } //[[Rcpp::export]] CharacterVector phase_state_interpolator(List data, DataFrame states) { IntegerVector state_index = states("state"); NumericVector nframes_per_state = states("nframes"); std::vector easer = states("ease"); int nelements = as(data(0)).size(); int nstates = states.nrows(); int nframes = sum(nframes_per_state); int frame = 0; int state, element, currentframe, res_index; CharacterVector res(nelements * nframes); for (state = 0; state < nstates; ++state) { if (easer[state] == "constant") { CharacterVector state_from = data(state_index(state)); for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { std::string type = currentframe == nframes_per_state(state) - 1 ? "raw" : "static"; res_index = (frame + currentframe) * nelements; for (element = 0; element < nelements; ++element) { res[res_index] = type; ++res_index; } } } else { std::vector ease_points = easeSeq(easer[state], nframes_per_state(state)); CharacterVector state_from = data(state_index(state)); CharacterVector state_to = data(state_index(state) + 1); for (element = 0; element < nelements; ++element) { std::string type = state_from[element] == "enter" ? "enter" : state_to[element] == "exit" ? "exit" : "transition"; for (currentframe = 0; currentframe < nframes_per_state(state); ++currentframe) { res_index = (frame + currentframe) * nelements + element; res[res_index] = type; } } } frame += nframes_per_state(state); } return res; } //[[Rcpp::export]] DataFrame numeric_element_interpolator(NumericVector data, CharacterVector group, IntegerVector frame, CharacterVector ease) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; int i, j, nframes; std::string groupString; std::string currentGroup = as(group[0]); for (i = 1; i < data.size(); ++i) { groupString = as(group[i]); if (currentGroup.compare(groupString) == 0) { nframes = frame[i] - frame[i-1]; std::vector ease_points = easeSeq(as(ease[i-1]), nframes); for (j = 0; j < ease_points.size(); ++j) { tweendata.push_back(data[i - 1] + ease_points[j] * (data[i] - data[i - 1])); tweengroup.push_back(groupString); tweenframe.push_back(j + frame[i-1]); } } else { tweendata.push_back(data[i - 1]); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); currentGroup = groupString; } } tweendata.push_back(data[i - 1]); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); return DataFrame::create( Named("data") = wrap(tweendata), Named("group") = wrap(tweengroup), Named("frame") = wrap(tweenframe), Named("stringsAsFactors") = false ); } //[[Rcpp::export]] DataFrame colour_element_interpolator(NumericMatrix data, CharacterVector group, IntegerVector frame, CharacterVector ease) { std::deque tweendata1; std::deque tweendata2; std::deque tweendata3; std::deque tweendata4; std::deque tweengroup; std::deque tweenframe; int i, j, nframes; std::string groupString; std::string currentGroup = as(group[0]); for (i = 1; i < data.nrow(); ++i) { groupString = as(group[i]); if (currentGroup.compare(groupString) == 0) { nframes = frame[i] - frame[i-1]; std::vector ease_points = easeSeq(as(ease[i-1]), nframes); for (j = 0; j < ease_points.size(); ++j) { tweendata1.push_back(data(i - 1, 0) + ease_points[j] * (data(i, 0) - data(i - 1, 0))); tweendata2.push_back(data(i - 1, 1) + ease_points[j] * (data(i, 1) - data(i - 1, 1))); tweendata3.push_back(data(i - 1, 2) + ease_points[j] * (data(i, 2) - data(i - 1, 2))); tweendata4.push_back(data(i - 1, 3) + ease_points[j] * (data(i, 3) - data(i - 1, 3))); tweengroup.push_back(groupString); tweenframe.push_back(j + frame[i-1]); } } else { tweendata1.push_back(data(i - 1, 0)); tweendata2.push_back(data(i - 1, 1)); tweendata3.push_back(data(i - 1, 2)); tweendata4.push_back(data(i - 1, 3)); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); currentGroup = groupString; } } tweendata1.push_back(data(i - 1, 0)); tweendata2.push_back(data(i - 1, 1)); tweendata3.push_back(data(i - 1, 2)); tweendata4.push_back(data(i - 1, 3)); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); return DataFrame::create( Named("data1") = wrap(tweendata1), Named("data2") = wrap(tweendata2), Named("data3") = wrap(tweendata3), Named("data4") = wrap(tweendata4), Named("group") = wrap(tweengroup), Named("frame") = wrap(tweenframe), Named("stringsAsFactors") = false ); } //[[Rcpp::export]] DataFrame constant_element_interpolator(CharacterVector data, CharacterVector group, IntegerVector frame, CharacterVector ease) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; int i, j, nframes; std::string groupString; std::string currentGroup = as(group[0]); for (i = 1; i < data.size(); ++i) { groupString = as(group[i]); if (currentGroup.compare(groupString) == 0) { nframes = frame[i] - frame[i-1]; std::vector ease_points = easeSeq(as(ease[i-1]), nframes); for (j = 0; j < ease_points.size(); ++j) { if (ease_points[j] < 0.5) { tweendata.push_back(as(data[i - 1])); } else { tweendata.push_back(as(data[i])); } tweengroup.push_back(groupString); tweenframe.push_back(j + frame[i-1]); } } else { tweendata.push_back(as(data[i - 1])); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); currentGroup = groupString; } } tweendata.push_back(as(data[i - 1])); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); return DataFrame::create( Named("data") = wrap(tweendata), Named("group") = wrap(tweengroup), Named("frame") = wrap(tweenframe), Named("stringsAsFactors") = false ); } //[[Rcpp::export]] List list_element_interpolator(List data, CharacterVector group, IntegerVector frame, CharacterVector ease) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; int i, j, nframes; std::string groupString; std::string currentGroup = as(group[0]); for (i = 1; i < data.size(); ++i) { groupString = as(group[i]); if (currentGroup.compare(groupString) == 0) { nframes = frame[i] - frame[i-1]; std::vector ease_points = easeSeq(as(ease[i-1]), nframes); for (j = 0; j < ease_points.size(); ++j) { if (ease_points[j] < 0.5) { tweendata.push_back(data[i - 1]); } else { tweendata.push_back(data[i]); } tweengroup.push_back(groupString); tweenframe.push_back(j + frame[i-1]); } } else { tweendata.push_back(data[i - 1]); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); currentGroup = groupString; } } tweendata.push_back(data[i - 1]); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); List tweendata_list = wrap(tweendata); IntegerVector frame_vec = wrap(tweenframe); CharacterVector group_vec = wrap(tweengroup); List res = List::create( Named("data") = tweendata_list, Named("group") = group_vec, Named("frame") = frame_vec ); res.attr("class") = "data.frame"; res.attr("row.names") = seq_along(frame_vec); return res; } //[[Rcpp::export]] List numlist_element_interpolator(List data, CharacterVector group, IntegerVector frame, CharacterVector ease) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; int i, j, nframes; std::string groupString; std::string currentGroup = as(group[0]); for (i = 1; i < data.size(); ++i) { groupString = as(group[i]); if (currentGroup.compare(groupString) == 0) { nframes = frame[i] - frame[i-1]; std::vector ease_points = easeSeq(as(ease[i-1]), nframes); NumericVector state_from_vec = data[i - 1]; NumericVector state_to_vec = data[i]; state_from_vec = align_num_elem(state_from_vec, state_to_vec); state_to_vec = align_num_elem(state_to_vec, state_from_vec); for (j = 0; j < ease_points.size(); ++j) { NumericVector state_vec = state_from_vec + ease_points[j] * (state_to_vec - state_from_vec); tweendata.push_back(state_vec); tweengroup.push_back(groupString); tweenframe.push_back(j + frame[i-1]); } } else { tweendata.push_back(data[i - 1]); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); currentGroup = groupString; } } tweendata.push_back(data[i - 1]); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); List tweendata_list = wrap(tweendata); IntegerVector frame_vec = wrap(tweenframe); CharacterVector group_vec = wrap(tweengroup); List res = List::create( Named("data") = tweendata_list, Named("group") = group_vec, Named("frame") = frame_vec ); res.attr("class") = "data.frame"; res.attr("row.names") = seq_along(frame_vec); return res; } //[[Rcpp::export]] DataFrame phase_element_interpolator(CharacterVector data, CharacterVector group, IntegerVector frame, CharacterVector ease) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; int i, j, nframes; std::string groupString; std::string currentGroup = as(group[0]); for (i = 1; i < data.size(); ++i) { groupString = as(group[i]); if (currentGroup.compare(groupString) == 0) { nframes = frame[i] - frame[i-1]; std::string type = data[i - 1] == "enter" ? "enter" : data[i] == "exit" ? "exit" : data[i - 1] == "static" ? "static" : "transition"; for (j = 0; j < nframes; ++j) { if (j == 0 && (type == "transition" || type == "exit")) { tweendata.push_back("raw"); } else { tweendata.push_back(type); } tweengroup.push_back(groupString); tweenframe.push_back(j + frame[i-1]); } } else { tweendata.push_back(as(data[i - 1])); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); currentGroup = groupString; } } tweendata.push_back(as(data[i - 1])); tweengroup.push_back(currentGroup); tweenframe.push_back(frame[i-1]); return DataFrame::create( Named("data") = wrap(tweendata), Named("group") = wrap(tweengroup), Named("frame") = wrap(tweenframe), Named("stringsAsFactors") = false ); } //[[Rcpp::export]] DataFrame numeric_along_interpolator(NumericVector data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; std::string easer = as(ease); int i,j,jj; bool before,after,same,last; double pos,interp; for (i = 1; i <= nframes; ++i) { for (j = 0; j < data.size(); ++j) { last = j == data.size() - 1; jj = last ? j : j + 1; before = time[j] <= i; after = time[jj] > i; same = group[j] == group[jj]; if ((history && same && before) || ((!same || last) && keep_last && before)) { tweendata.push_back(data[j]); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } if (same && before == after) { pos = (i - time[j]) / (time[jj] - time[j]); pos = easePos(pos, easer); interp = data[j] + (data[jj] - data[j]) * pos; tweendata.push_back(interp); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } } } return DataFrame::create( Named("data") = wrap(tweendata), Named("group") = wrap(tweengroup), Named("frame") = wrap(tweenframe), Named("stringsAsFactors") = false ); } //[[Rcpp::export]] DataFrame colour_along_interpolator(NumericMatrix data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease) { std::deque tweendata1; std::deque tweendata2; std::deque tweendata3; std::deque tweendata4; std::deque tweengroup; std::deque tweenframe; std::string easer = as(ease); int i,j,jj; bool before,after,same,last; double pos; for (i = 1; i <= nframes; ++i) { for (j = 0; j < data.nrow(); ++j) { last = j == data.nrow() - 1; jj = last ? j : j + 1; before = time[j] <= i; after = time[jj] > i; same = group[j] == group[jj]; if ((history && same && before) || ((!same || last) && keep_last && before)) { tweendata1.push_back(data(j, 0)); tweendata2.push_back(data(j, 1)); tweendata3.push_back(data(j, 2)); tweendata4.push_back(data(j, 3)); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } if (same && before == after) { pos = (i - time[j]) / (time[j + 1] - time[j]); pos = easePos(pos, easer); tweendata1.push_back(data(j, 0) + (data(j + 1, 0) - data(j, 0)) * pos); tweendata2.push_back(data(j, 1) + (data(j + 1, 1) - data(j, 1)) * pos); tweendata3.push_back(data(j, 2) + (data(j + 1, 2) - data(j, 2)) * pos); tweendata4.push_back(data(j, 3) + (data(j + 1, 3) - data(j, 3)) * pos); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } } } return DataFrame::create( Named("data1") = wrap(tweendata1), Named("data2") = wrap(tweendata2), Named("data3") = wrap(tweendata3), Named("data4") = wrap(tweendata4), Named("group") = wrap(tweengroup), Named("frame") = wrap(tweenframe), Named("stringsAsFactors") = false ); } //[[Rcpp::export]] DataFrame constant_along_interpolator(CharacterVector data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; std::string easer = as(ease); int i,j,jj; bool before,after,same,last; double pos; for (i = 1; i <= nframes; ++i) { for (j = 0; j < data.size(); ++j) { last = j == data.size() - 1; jj = last ? j : j + 1; before = time[j] <= i; after = time[jj] > i; same = group[j] == group[jj]; if ((history && same && before) || ((!same || last) && keep_last && before)) { tweendata.push_back(as(data[j])); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } if (same && before == after) { pos = (i - time[j]) / (time[j + 1] - time[j]); pos = easePos(pos, easer); if (pos < 0.5) { tweendata.push_back(as(data[j])); } else { tweendata.push_back(as(data[j + 1])); } tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } } } return DataFrame::create( Named("data") = wrap(tweendata), Named("group") = wrap(tweengroup), Named("frame") = wrap(tweenframe), Named("stringsAsFactors") = false ); } //[[Rcpp::export]] List list_along_interpolator(List data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; std::string easer = as(ease); int i,j,jj; bool before,after,same,last; double pos; for (i = 1; i <= nframes; ++i) { for (j = 0; j < data.size(); ++j) { last = j == data.size() - 1; jj = last ? j : j + 1; before = time[j] <= i; after = time[jj] > i; same = group[j] == group[jj]; if ((history && same && before) || ((!same || last) && keep_last && before)) { tweendata.push_back(data[j]); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } if (same && before == after) { pos = (i - time[j]) / (time[j + 1] - time[j]); pos = easePos(pos, easer); if (pos < 0.5) { tweendata.push_back(data[j]); } else { tweendata.push_back(data[j + 1]); } tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } } } List tweendata_list = wrap(tweendata); IntegerVector frame_vec = wrap(tweenframe); CharacterVector group_vec = wrap(tweengroup); List res = List::create( Named("data") = tweendata_list, Named("group") = group_vec, Named("frame") = frame_vec ); res.attr("class") = "data.frame"; res.attr("row.names") = seq_along(frame_vec); return res; } //[[Rcpp::export]] List numlist_along_interpolator(List data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; std::string easer = as(ease); int i,j,jj; bool before,after,same,last; double pos; for (i = 1; i <= nframes; ++i) { for (j = 0; j < data.size(); ++j) { last = j == data.size() - 1; jj = last ? j : j + 1; before = time[j] <= i; after = time[jj] > i; same = group[j] == group[jj]; if ((history && same && before) || ((!same || last) && keep_last && before)) { tweendata.push_back(data[j]); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } if (same && before == after) { NumericVector state_from_vec = data[j]; NumericVector state_to_vec = data[j + 1]; state_from_vec = align_num_elem(state_from_vec, state_to_vec); state_to_vec = align_num_elem(state_to_vec, state_from_vec); pos = (i - time[j]) / (time[j + 1] - time[j]); pos = easePos(pos, easer); NumericVector state_vec = state_from_vec + pos * (state_to_vec - state_from_vec); tweendata.push_back(state_vec); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } } } List tweendata_list = wrap(tweendata); IntegerVector frame_vec = wrap(tweenframe); CharacterVector group_vec = wrap(tweengroup); List res = List::create( Named("data") = tweendata_list, Named("group") = group_vec, Named("frame") = frame_vec ); res.attr("class") = "data.frame"; res.attr("row.names") = seq_along(frame_vec); return res; } //[[Rcpp::export]] DataFrame phase_along_interpolator(CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes) { std::deque tweendata; std::deque tweengroup; std::deque tweenframe; int i,j,jj; bool before,after,same,last; for (i = 1; i <= nframes; ++i) { for (j = 0; j < group.size(); ++j) { last = j == group.size() - 1; jj = last ? j : j + 1; before = time[j] <= i; after = time[jj] > i; same = group[j] == group[jj]; if ((history && same && before) || ((!same || last) && keep_last && before)) { tweendata.push_back("raw"); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } if (same && before == after) { tweendata.push_back("transition"); tweengroup.push_back(as(group[j])); tweenframe.push_back(i); } } } return DataFrame::create( Named("data") = wrap(tweendata), Named("group") = wrap(tweengroup), Named("frame") = wrap(tweenframe), Named("stringsAsFactors") = false ); } //[[Rcpp::export]] NumericVector numeric_at_interpolator(NumericVector from, NumericVector to, NumericVector at, CharacterVector ease) { int n = from.size(), i; double pos; std::string easer = as(ease); NumericVector res(n); for (i = 0; i < n; ++i) { pos = easePos(at[i], easer); res[i] = from[i] + (to[i] - from[i]) * pos; } return res; } //[[Rcpp::export]] NumericMatrix colour_at_interpolator(NumericMatrix from, NumericMatrix to, NumericVector at, CharacterVector ease) { int n = from.nrow(), i; double pos; std::string easer = as(ease); NumericMatrix res(n, from.ncol()); for (i = 0; i < n; ++i) { pos = easePos(at[i], easer); res(i, _) = from(i, _) + (to(i, _) - from(i, _)) * pos; } return res; } //[[Rcpp::export]] CharacterVector constant_at_interpolator(CharacterVector from, CharacterVector to, NumericVector at, CharacterVector ease) { int n = from.size(), i; double pos; std::string easer = as(ease); CharacterVector res(n); for (i = 0; i < n; ++i) { pos = easePos(at[i], easer); res[i] = pos < 0.5 ? from[i] : to[i]; } return res; } //[[Rcpp::export]] List list_at_interpolator(List from, List to, NumericVector at, CharacterVector ease) { int n = from.size(), i; double pos; std::string easer = as(ease); List res(n); for (i = 0; i < n; ++i) { pos = easePos(at[i], easer); res[i] = pos < 0.5 ? from[i] : to[i]; } return res; } //[[Rcpp::export]] List numlist_at_interpolator(List from, List to, NumericVector at, CharacterVector ease) { int n = from.size(), i; double pos; std::string easer = as(ease); List res(n); for (i = 0; i < n; ++i) { NumericVector state_from_vec = from[i]; NumericVector state_to_vec = to[i]; state_from_vec = align_num_elem(state_from_vec, state_to_vec); state_to_vec = align_num_elem(state_to_vec, state_from_vec); pos = easePos(at[i], easer); NumericVector state_vec = state_from_vec + pos * (state_to_vec - state_from_vec); res[i] = state_vec; } return res; } //[[Rcpp::export]] NumericVector numeric_fill_interpolator(NumericVector data, CharacterVector ease) { NumericVector res(data.size(), NA_REAL); int i,j,last = -1; std::string easer = as(ease); std::vector easepos; for (i = 0; i < data.size(); ++i) { if (NumericVector::is_na(data[i])) continue; if (last != -1) { easepos = easeSeq(easer, i - last); for (j = 1; j < easepos.size(); ++j) { res[last + j] = data[last] + easepos[j] * (data[i] - data[last]); } } res[i] = data[i]; last = i; } return res; } //[[Rcpp::export]] NumericMatrix colour_fill_interpolator(NumericMatrix data, CharacterVector ease) { NumericMatrix res(data.nrow(), data.ncol()); std::fill(res.begin(), res.end(), NA_REAL); int i,j,last = -1; std::string easer = as(ease); std::vector easepos; for (i = 0; i < data.nrow(); ++i) { if (NumericVector::is_na(data(i, 0))) continue; if (last != -1) { easepos = easeSeq(easer, i - last); for (j = 1; j < easepos.size(); ++j) { res(last + j, _) = data(last, _) + easepos[j] * (data(i, _) - data(last, _)); } } res(i, _) = data(i, _); last = i; } return res; } //[[Rcpp::export]] CharacterVector constant_fill_interpolator(CharacterVector data, CharacterVector ease) { CharacterVector res(data.size(), NA_STRING); int i,j,last = -1; std::string easer = as(ease); std::vector easepos; for (i = 0; i < data.size(); ++i) { if (CharacterVector::is_na(data[i])) continue; if (last != -1) { easepos = easeSeq(easer, i - last); for (j = 1; j < easepos.size(); ++j) { res[last + j] = easepos[j] < 0.5 ? data[last] : data[i]; } } res[i] = data[i]; last = i; } return res; } //[[Rcpp::export]] List list_fill_interpolator(List data, CharacterVector ease) { List res(data.size()); int i,j,last = -1; std::string easer = as(ease); std::vector easepos; for (i = 0; i < data.size(); ++i) { if (data[i]==R_NilValue) continue; if (last != -1) { easepos = easeSeq(easer, i - last); for (j = 1; j < easepos.size(); ++j) { res[last + j] = easepos[j] < 0.5 ? data[last] : data[i]; } } res[i] = data[i]; last = i; } return res; } //[[Rcpp::export]] List numlist_fill_interpolator(List data, CharacterVector ease) { List res(data.size()); int i,j,last = -1; std::string easer = as(ease); std::vector easepos; for (i = 0; i < data.size(); ++i) { if (data[i]==R_NilValue) continue; if (last != -1) { easepos = easeSeq(easer, i - last); NumericVector state_from_vec = data[last]; NumericVector state_to_vec = data[i]; state_from_vec = align_num_elem(state_from_vec, state_to_vec); state_to_vec = align_num_elem(state_to_vec, state_from_vec); res[last] = data[last]; for (j = 1; j < easepos.size(); ++j) { NumericVector state_vec = state_from_vec + easepos[j] * (state_to_vec - state_from_vec); res[last + j] = state_vec; } } res[i] = data[i]; last = i; } return res; } tweenr/src/easing.h0000644000176200001440000000436713404726426014006 0ustar liggesusers// // easing.h // // Copyright (c) 2011, Auerhaus Development, LLC // // This program is free software. It comes without any warranty, to // the extent permitted by applicable law. You can redistribute it // and/or modify it under the terms of the Do What The Fuck You Want // To Public License, Version 2, as published by Sam Hocevar. See // http://sam.zoy.org/wtfpl/COPYING for more details. // #ifndef AH_EASING_H #define AH_EASING_H #if defined(__LP64__) && !defined(AH_EASING_USE_DBL_PRECIS) #define AH_EASING_USE_DBL_PRECIS #endif #ifdef AH_EASING_USE_DBL_PRECIS #define AHFloat double #else #define AHFloat float #endif #if defined __cplusplus extern "C" { #endif typedef AHFloat (*AHEasingFunction)(AHFloat); // Linear interpolation (no easing) AHFloat LinearInterpolation(AHFloat p); // Quadratic easing; p^2 AHFloat QuadraticEaseIn(AHFloat p); AHFloat QuadraticEaseOut(AHFloat p); AHFloat QuadraticEaseInOut(AHFloat p); // Cubic easing; p^3 AHFloat CubicEaseIn(AHFloat p); AHFloat CubicEaseOut(AHFloat p); AHFloat CubicEaseInOut(AHFloat p); // Quartic easing; p^4 AHFloat QuarticEaseIn(AHFloat p); AHFloat QuarticEaseOut(AHFloat p); AHFloat QuarticEaseInOut(AHFloat p); // Quintic easing; p^5 AHFloat QuinticEaseIn(AHFloat p); AHFloat QuinticEaseOut(AHFloat p); AHFloat QuinticEaseInOut(AHFloat p); // Sine wave easing; sin(p * PI/2) AHFloat SineEaseIn(AHFloat p); AHFloat SineEaseOut(AHFloat p); AHFloat SineEaseInOut(AHFloat p); // Circular easing; sqrt(1 - p^2) AHFloat CircularEaseIn(AHFloat p); AHFloat CircularEaseOut(AHFloat p); AHFloat CircularEaseInOut(AHFloat p); // Exponential easing, base 2 AHFloat ExponentialEaseIn(AHFloat p); AHFloat ExponentialEaseOut(AHFloat p); AHFloat ExponentialEaseInOut(AHFloat p); // Exponentially-damped sine wave easing AHFloat ElasticEaseIn(AHFloat p); AHFloat ElasticEaseOut(AHFloat p); AHFloat ElasticEaseInOut(AHFloat p); // Overshooting cubic easing; AHFloat BackEaseIn(AHFloat p); AHFloat BackEaseOut(AHFloat p); AHFloat BackEaseInOut(AHFloat p); // Exponentially-decaying bounce easing AHFloat BounceEaseIn(AHFloat p); AHFloat BounceEaseOut(AHFloat p); AHFloat BounceEaseInOut(AHFloat p); #ifdef __cplusplus } #endif #endif tweenr/src/RcppExports.cpp0000644000176200001440000005550013404726426015357 0ustar liggesusers// Generated by using Rcpp::compileAttributes() -> do not edit by hand // Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #include using namespace Rcpp; // numeric_state_interpolator NumericVector numeric_state_interpolator(List data, DataFrame states); RcppExport SEXP _tweenr_numeric_state_interpolator(SEXP dataSEXP, SEXP statesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< DataFrame >::type states(statesSEXP); rcpp_result_gen = Rcpp::wrap(numeric_state_interpolator(data, states)); return rcpp_result_gen; END_RCPP } // colour_state_interpolator NumericMatrix colour_state_interpolator(List data, DataFrame states); RcppExport SEXP _tweenr_colour_state_interpolator(SEXP dataSEXP, SEXP statesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< DataFrame >::type states(statesSEXP); rcpp_result_gen = Rcpp::wrap(colour_state_interpolator(data, states)); return rcpp_result_gen; END_RCPP } // constant_state_interpolator CharacterVector constant_state_interpolator(List data, DataFrame states); RcppExport SEXP _tweenr_constant_state_interpolator(SEXP dataSEXP, SEXP statesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< DataFrame >::type states(statesSEXP); rcpp_result_gen = Rcpp::wrap(constant_state_interpolator(data, states)); return rcpp_result_gen; END_RCPP } // list_state_interpolator List list_state_interpolator(List data, DataFrame states); RcppExport SEXP _tweenr_list_state_interpolator(SEXP dataSEXP, SEXP statesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< DataFrame >::type states(statesSEXP); rcpp_result_gen = Rcpp::wrap(list_state_interpolator(data, states)); return rcpp_result_gen; END_RCPP } // numlist_state_interpolator List numlist_state_interpolator(List data, DataFrame states); RcppExport SEXP _tweenr_numlist_state_interpolator(SEXP dataSEXP, SEXP statesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< DataFrame >::type states(statesSEXP); rcpp_result_gen = Rcpp::wrap(numlist_state_interpolator(data, states)); return rcpp_result_gen; END_RCPP } // phase_state_interpolator CharacterVector phase_state_interpolator(List data, DataFrame states); RcppExport SEXP _tweenr_phase_state_interpolator(SEXP dataSEXP, SEXP statesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< DataFrame >::type states(statesSEXP); rcpp_result_gen = Rcpp::wrap(phase_state_interpolator(data, states)); return rcpp_result_gen; END_RCPP } // numeric_element_interpolator DataFrame numeric_element_interpolator(NumericVector data, CharacterVector group, IntegerVector frame, CharacterVector ease); RcppExport SEXP _tweenr_numeric_element_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP frameSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< IntegerVector >::type frame(frameSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(numeric_element_interpolator(data, group, frame, ease)); return rcpp_result_gen; END_RCPP } // colour_element_interpolator DataFrame colour_element_interpolator(NumericMatrix data, CharacterVector group, IntegerVector frame, CharacterVector ease); RcppExport SEXP _tweenr_colour_element_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP frameSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< IntegerVector >::type frame(frameSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(colour_element_interpolator(data, group, frame, ease)); return rcpp_result_gen; END_RCPP } // constant_element_interpolator DataFrame constant_element_interpolator(CharacterVector data, CharacterVector group, IntegerVector frame, CharacterVector ease); RcppExport SEXP _tweenr_constant_element_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP frameSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< IntegerVector >::type frame(frameSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(constant_element_interpolator(data, group, frame, ease)); return rcpp_result_gen; END_RCPP } // list_element_interpolator List list_element_interpolator(List data, CharacterVector group, IntegerVector frame, CharacterVector ease); RcppExport SEXP _tweenr_list_element_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP frameSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< IntegerVector >::type frame(frameSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(list_element_interpolator(data, group, frame, ease)); return rcpp_result_gen; END_RCPP } // numlist_element_interpolator List numlist_element_interpolator(List data, CharacterVector group, IntegerVector frame, CharacterVector ease); RcppExport SEXP _tweenr_numlist_element_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP frameSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< IntegerVector >::type frame(frameSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(numlist_element_interpolator(data, group, frame, ease)); return rcpp_result_gen; END_RCPP } // phase_element_interpolator DataFrame phase_element_interpolator(CharacterVector data, CharacterVector group, IntegerVector frame, CharacterVector ease); RcppExport SEXP _tweenr_phase_element_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP frameSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< IntegerVector >::type frame(frameSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(phase_element_interpolator(data, group, frame, ease)); return rcpp_result_gen; END_RCPP } // numeric_along_interpolator DataFrame numeric_along_interpolator(NumericVector data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease); RcppExport SEXP _tweenr_numeric_along_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP timeSEXP, SEXP historySEXP, SEXP keep_lastSEXP, SEXP nframesSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< NumericVector >::type time(timeSEXP); Rcpp::traits::input_parameter< bool >::type history(historySEXP); Rcpp::traits::input_parameter< bool >::type keep_last(keep_lastSEXP); Rcpp::traits::input_parameter< int >::type nframes(nframesSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(numeric_along_interpolator(data, group, time, history, keep_last, nframes, ease)); return rcpp_result_gen; END_RCPP } // colour_along_interpolator DataFrame colour_along_interpolator(NumericMatrix data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease); RcppExport SEXP _tweenr_colour_along_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP timeSEXP, SEXP historySEXP, SEXP keep_lastSEXP, SEXP nframesSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< NumericVector >::type time(timeSEXP); Rcpp::traits::input_parameter< bool >::type history(historySEXP); Rcpp::traits::input_parameter< bool >::type keep_last(keep_lastSEXP); Rcpp::traits::input_parameter< int >::type nframes(nframesSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(colour_along_interpolator(data, group, time, history, keep_last, nframes, ease)); return rcpp_result_gen; END_RCPP } // constant_along_interpolator DataFrame constant_along_interpolator(CharacterVector data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease); RcppExport SEXP _tweenr_constant_along_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP timeSEXP, SEXP historySEXP, SEXP keep_lastSEXP, SEXP nframesSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< NumericVector >::type time(timeSEXP); Rcpp::traits::input_parameter< bool >::type history(historySEXP); Rcpp::traits::input_parameter< bool >::type keep_last(keep_lastSEXP); Rcpp::traits::input_parameter< int >::type nframes(nframesSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(constant_along_interpolator(data, group, time, history, keep_last, nframes, ease)); return rcpp_result_gen; END_RCPP } // list_along_interpolator List list_along_interpolator(List data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease); RcppExport SEXP _tweenr_list_along_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP timeSEXP, SEXP historySEXP, SEXP keep_lastSEXP, SEXP nframesSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< NumericVector >::type time(timeSEXP); Rcpp::traits::input_parameter< bool >::type history(historySEXP); Rcpp::traits::input_parameter< bool >::type keep_last(keep_lastSEXP); Rcpp::traits::input_parameter< int >::type nframes(nframesSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(list_along_interpolator(data, group, time, history, keep_last, nframes, ease)); return rcpp_result_gen; END_RCPP } // numlist_along_interpolator List numlist_along_interpolator(List data, CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes, CharacterVector ease); RcppExport SEXP _tweenr_numlist_along_interpolator(SEXP dataSEXP, SEXP groupSEXP, SEXP timeSEXP, SEXP historySEXP, SEXP keep_lastSEXP, SEXP nframesSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< NumericVector >::type time(timeSEXP); Rcpp::traits::input_parameter< bool >::type history(historySEXP); Rcpp::traits::input_parameter< bool >::type keep_last(keep_lastSEXP); Rcpp::traits::input_parameter< int >::type nframes(nframesSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(numlist_along_interpolator(data, group, time, history, keep_last, nframes, ease)); return rcpp_result_gen; END_RCPP } // phase_along_interpolator DataFrame phase_along_interpolator(CharacterVector group, NumericVector time, bool history, bool keep_last, int nframes); RcppExport SEXP _tweenr_phase_along_interpolator(SEXP groupSEXP, SEXP timeSEXP, SEXP historySEXP, SEXP keep_lastSEXP, SEXP nframesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type group(groupSEXP); Rcpp::traits::input_parameter< NumericVector >::type time(timeSEXP); Rcpp::traits::input_parameter< bool >::type history(historySEXP); Rcpp::traits::input_parameter< bool >::type keep_last(keep_lastSEXP); Rcpp::traits::input_parameter< int >::type nframes(nframesSEXP); rcpp_result_gen = Rcpp::wrap(phase_along_interpolator(group, time, history, keep_last, nframes)); return rcpp_result_gen; END_RCPP } // numeric_at_interpolator NumericVector numeric_at_interpolator(NumericVector from, NumericVector to, NumericVector at, CharacterVector ease); RcppExport SEXP _tweenr_numeric_at_interpolator(SEXP fromSEXP, SEXP toSEXP, SEXP atSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type from(fromSEXP); Rcpp::traits::input_parameter< NumericVector >::type to(toSEXP); Rcpp::traits::input_parameter< NumericVector >::type at(atSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(numeric_at_interpolator(from, to, at, ease)); return rcpp_result_gen; END_RCPP } // colour_at_interpolator NumericMatrix colour_at_interpolator(NumericMatrix from, NumericMatrix to, NumericVector at, CharacterVector ease); RcppExport SEXP _tweenr_colour_at_interpolator(SEXP fromSEXP, SEXP toSEXP, SEXP atSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericMatrix >::type from(fromSEXP); Rcpp::traits::input_parameter< NumericMatrix >::type to(toSEXP); Rcpp::traits::input_parameter< NumericVector >::type at(atSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(colour_at_interpolator(from, to, at, ease)); return rcpp_result_gen; END_RCPP } // constant_at_interpolator CharacterVector constant_at_interpolator(CharacterVector from, CharacterVector to, NumericVector at, CharacterVector ease); RcppExport SEXP _tweenr_constant_at_interpolator(SEXP fromSEXP, SEXP toSEXP, SEXP atSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type from(fromSEXP); Rcpp::traits::input_parameter< CharacterVector >::type to(toSEXP); Rcpp::traits::input_parameter< NumericVector >::type at(atSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(constant_at_interpolator(from, to, at, ease)); return rcpp_result_gen; END_RCPP } // list_at_interpolator List list_at_interpolator(List from, List to, NumericVector at, CharacterVector ease); RcppExport SEXP _tweenr_list_at_interpolator(SEXP fromSEXP, SEXP toSEXP, SEXP atSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type from(fromSEXP); Rcpp::traits::input_parameter< List >::type to(toSEXP); Rcpp::traits::input_parameter< NumericVector >::type at(atSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(list_at_interpolator(from, to, at, ease)); return rcpp_result_gen; END_RCPP } // numlist_at_interpolator List numlist_at_interpolator(List from, List to, NumericVector at, CharacterVector ease); RcppExport SEXP _tweenr_numlist_at_interpolator(SEXP fromSEXP, SEXP toSEXP, SEXP atSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type from(fromSEXP); Rcpp::traits::input_parameter< List >::type to(toSEXP); Rcpp::traits::input_parameter< NumericVector >::type at(atSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(numlist_at_interpolator(from, to, at, ease)); return rcpp_result_gen; END_RCPP } // numeric_fill_interpolator NumericVector numeric_fill_interpolator(NumericVector data, CharacterVector ease); RcppExport SEXP _tweenr_numeric_fill_interpolator(SEXP dataSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(numeric_fill_interpolator(data, ease)); return rcpp_result_gen; END_RCPP } // colour_fill_interpolator NumericMatrix colour_fill_interpolator(NumericMatrix data, CharacterVector ease); RcppExport SEXP _tweenr_colour_fill_interpolator(SEXP dataSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericMatrix >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(colour_fill_interpolator(data, ease)); return rcpp_result_gen; END_RCPP } // constant_fill_interpolator CharacterVector constant_fill_interpolator(CharacterVector data, CharacterVector ease); RcppExport SEXP _tweenr_constant_fill_interpolator(SEXP dataSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(constant_fill_interpolator(data, ease)); return rcpp_result_gen; END_RCPP } // list_fill_interpolator List list_fill_interpolator(List data, CharacterVector ease); RcppExport SEXP _tweenr_list_fill_interpolator(SEXP dataSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(list_fill_interpolator(data, ease)); return rcpp_result_gen; END_RCPP } // numlist_fill_interpolator List numlist_fill_interpolator(List data, CharacterVector ease); RcppExport SEXP _tweenr_numlist_fill_interpolator(SEXP dataSEXP, SEXP easeSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type data(dataSEXP); Rcpp::traits::input_parameter< CharacterVector >::type ease(easeSEXP); rcpp_result_gen = Rcpp::wrap(numlist_fill_interpolator(data, ease)); return rcpp_result_gen; END_RCPP } static const R_CallMethodDef CallEntries[] = { {"_tweenr_numeric_state_interpolator", (DL_FUNC) &_tweenr_numeric_state_interpolator, 2}, {"_tweenr_colour_state_interpolator", (DL_FUNC) &_tweenr_colour_state_interpolator, 2}, {"_tweenr_constant_state_interpolator", (DL_FUNC) &_tweenr_constant_state_interpolator, 2}, {"_tweenr_list_state_interpolator", (DL_FUNC) &_tweenr_list_state_interpolator, 2}, {"_tweenr_numlist_state_interpolator", (DL_FUNC) &_tweenr_numlist_state_interpolator, 2}, {"_tweenr_phase_state_interpolator", (DL_FUNC) &_tweenr_phase_state_interpolator, 2}, {"_tweenr_numeric_element_interpolator", (DL_FUNC) &_tweenr_numeric_element_interpolator, 4}, {"_tweenr_colour_element_interpolator", (DL_FUNC) &_tweenr_colour_element_interpolator, 4}, {"_tweenr_constant_element_interpolator", (DL_FUNC) &_tweenr_constant_element_interpolator, 4}, {"_tweenr_list_element_interpolator", (DL_FUNC) &_tweenr_list_element_interpolator, 4}, {"_tweenr_numlist_element_interpolator", (DL_FUNC) &_tweenr_numlist_element_interpolator, 4}, {"_tweenr_phase_element_interpolator", (DL_FUNC) &_tweenr_phase_element_interpolator, 4}, {"_tweenr_numeric_along_interpolator", (DL_FUNC) &_tweenr_numeric_along_interpolator, 7}, {"_tweenr_colour_along_interpolator", (DL_FUNC) &_tweenr_colour_along_interpolator, 7}, {"_tweenr_constant_along_interpolator", (DL_FUNC) &_tweenr_constant_along_interpolator, 7}, {"_tweenr_list_along_interpolator", (DL_FUNC) &_tweenr_list_along_interpolator, 7}, {"_tweenr_numlist_along_interpolator", (DL_FUNC) &_tweenr_numlist_along_interpolator, 7}, {"_tweenr_phase_along_interpolator", (DL_FUNC) &_tweenr_phase_along_interpolator, 5}, {"_tweenr_numeric_at_interpolator", (DL_FUNC) &_tweenr_numeric_at_interpolator, 4}, {"_tweenr_colour_at_interpolator", (DL_FUNC) &_tweenr_colour_at_interpolator, 4}, {"_tweenr_constant_at_interpolator", (DL_FUNC) &_tweenr_constant_at_interpolator, 4}, {"_tweenr_list_at_interpolator", (DL_FUNC) &_tweenr_list_at_interpolator, 4}, {"_tweenr_numlist_at_interpolator", (DL_FUNC) &_tweenr_numlist_at_interpolator, 4}, {"_tweenr_numeric_fill_interpolator", (DL_FUNC) &_tweenr_numeric_fill_interpolator, 2}, {"_tweenr_colour_fill_interpolator", (DL_FUNC) &_tweenr_colour_fill_interpolator, 2}, {"_tweenr_constant_fill_interpolator", (DL_FUNC) &_tweenr_constant_fill_interpolator, 2}, {"_tweenr_list_fill_interpolator", (DL_FUNC) &_tweenr_list_fill_interpolator, 2}, {"_tweenr_numlist_fill_interpolator", (DL_FUNC) &_tweenr_numlist_fill_interpolator, 2}, {NULL, NULL, 0} }; RcppExport void R_init_tweenr(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } tweenr/src/easing.c0000644000176200001440000001416013404726426013771 0ustar liggesusers// // easing.c // // Copyright (c) 2011, Auerhaus Development, LLC // // This program is free software. It comes without any warranty, to // the extent permitted by applicable law. You can redistribute it // and/or modify it under the terms of the Do What The Fuck You Want // To Public License, Version 2, as published by Sam Hocevar. See // http://sam.zoy.org/wtfpl/COPYING for more details. // #include #include "easing.h" // Modeled after the line y = x AHFloat LinearInterpolation(AHFloat p) { return p; } // Modeled after the parabola y = x^2 AHFloat QuadraticEaseIn(AHFloat p) { return p * p; } // Modeled after the parabola y = -x^2 + 2x AHFloat QuadraticEaseOut(AHFloat p) { return -(p * (p - 2)); } // Modeled after the piecewise quadratic // y = (1/2)((2x)^2) ; [0, 0.5) // y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1] AHFloat QuadraticEaseInOut(AHFloat p) { if(p < 0.5) { return 2 * p * p; } else { return (-2 * p * p) + (4 * p) - 1; } } // Modeled after the cubic y = x^3 AHFloat CubicEaseIn(AHFloat p) { return p * p * p; } // Modeled after the cubic y = (x - 1)^3 + 1 AHFloat CubicEaseOut(AHFloat p) { AHFloat f = (p - 1); return f * f * f + 1; } // Modeled after the piecewise cubic // y = (1/2)((2x)^3) ; [0, 0.5) // y = (1/2)((2x-2)^3 + 2) ; [0.5, 1] AHFloat CubicEaseInOut(AHFloat p) { if(p < 0.5) { return 4 * p * p * p; } else { AHFloat f = ((2 * p) - 2); return 0.5 * f * f * f + 1; } } // Modeled after the quartic x^4 AHFloat QuarticEaseIn(AHFloat p) { return p * p * p * p; } // Modeled after the quartic y = 1 - (x - 1)^4 AHFloat QuarticEaseOut(AHFloat p) { AHFloat f = (p - 1); return f * f * f * (1 - p) + 1; } // Modeled after the piecewise quartic // y = (1/2)((2x)^4) ; [0, 0.5) // y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1] AHFloat QuarticEaseInOut(AHFloat p) { if(p < 0.5) { return 8 * p * p * p * p; } else { AHFloat f = (p - 1); return -8 * f * f * f * f + 1; } } // Modeled after the quintic y = x^5 AHFloat QuinticEaseIn(AHFloat p) { return p * p * p * p * p; } // Modeled after the quintic y = (x - 1)^5 + 1 AHFloat QuinticEaseOut(AHFloat p) { AHFloat f = (p - 1); return f * f * f * f * f + 1; } // Modeled after the piecewise quintic // y = (1/2)((2x)^5) ; [0, 0.5) // y = (1/2)((2x-2)^5 + 2) ; [0.5, 1] AHFloat QuinticEaseInOut(AHFloat p) { if(p < 0.5) { return 16 * p * p * p * p * p; } else { AHFloat f = ((2 * p) - 2); return 0.5 * f * f * f * f * f + 1; } } // Modeled after quarter-cycle of sine wave AHFloat SineEaseIn(AHFloat p) { return sin((p - 1) * M_PI_2) + 1; } // Modeled after quarter-cycle of sine wave (different phase) AHFloat SineEaseOut(AHFloat p) { return sin(p * M_PI_2); } // Modeled after half sine wave AHFloat SineEaseInOut(AHFloat p) { return 0.5 * (1 - cos(p * M_PI)); } // Modeled after shifted quadrant IV of unit circle AHFloat CircularEaseIn(AHFloat p) { return 1 - sqrt(1 - (p * p)); } // Modeled after shifted quadrant II of unit circle AHFloat CircularEaseOut(AHFloat p) { return sqrt((2 - p) * p); } // Modeled after the piecewise circular function // y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) // y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1] AHFloat CircularEaseInOut(AHFloat p) { if(p < 0.5) { return 0.5 * (1 - sqrt(1 - 4 * (p * p))); } else { return 0.5 * (sqrt(-((2 * p) - 3) * ((2 * p) - 1)) + 1); } } // Modeled after the exponential function y = 2^(10(x - 1)) AHFloat ExponentialEaseIn(AHFloat p) { return (p == 0.0) ? p : pow(2, 10 * (p - 1)); } // Modeled after the exponential function y = -2^(-10x) + 1 AHFloat ExponentialEaseOut(AHFloat p) { return (p == 1.0) ? p : 1 - pow(2, -10 * p); } // Modeled after the piecewise exponential // y = (1/2)2^(10(2x - 1)) ; [0,0.5) // y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1] AHFloat ExponentialEaseInOut(AHFloat p) { if(p == 0.0 || p == 1.0) return p; if(p < 0.5) { return 0.5 * pow(2, (20 * p) - 10); } else { return -0.5 * pow(2, (-20 * p) + 10) + 1; } } // Modeled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) AHFloat ElasticEaseIn(AHFloat p) { return sin(13 * M_PI_2 * p) * pow(2, 10 * (p - 1)); } // Modeled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1 AHFloat ElasticEaseOut(AHFloat p) { return sin(-13 * M_PI_2 * (p + 1)) * pow(2, -10 * p) + 1; } // Modeled after the piecewise exponentially-damped sine wave: // y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) // y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1] AHFloat ElasticEaseInOut(AHFloat p) { if(p < 0.5) { return 0.5 * sin(13 * M_PI_2 * (2 * p)) * pow(2, 10 * ((2 * p) - 1)); } else { return 0.5 * (sin(-13 * M_PI_2 * ((2 * p - 1) + 1)) * pow(2, -10 * (2 * p - 1)) + 2); } } // Modeled after the overshooting cubic y = x^3-x*sin(x*pi) AHFloat BackEaseIn(AHFloat p) { return p * p * p - p * sin(p * M_PI); } // Modeled after overshooting cubic y = 1-((1-x)^3-(1-x)*sin((1-x)*pi)) AHFloat BackEaseOut(AHFloat p) { AHFloat f = (1 - p); return 1 - (f * f * f - f * sin(f * M_PI)); } // Modeled after the piecewise overshooting cubic function: // y = (1/2)*((2x)^3-(2x)*sin(2*x*pi)) ; [0, 0.5) // y = (1/2)*(1-((1-x)^3-(1-x)*sin((1-x)*pi))+1) ; [0.5, 1] AHFloat BackEaseInOut(AHFloat p) { if(p < 0.5) { AHFloat f = 2 * p; return 0.5 * (f * f * f - f * sin(f * M_PI)); } else { AHFloat f = (1 - (2*p - 1)); return 0.5 * (1 - (f * f * f - f * sin(f * M_PI))) + 0.5; } } AHFloat BounceEaseIn(AHFloat p) { return 1 - BounceEaseOut(1 - p); } AHFloat BounceEaseOut(AHFloat p) { if(p < 4/11.0) { return (121 * p * p)/16.0; } else if(p < 8/11.0) { return (363/40.0 * p * p) - (99/10.0 * p) + 17/5.0; } else if(p < 9/10.0) { return (4356/361.0 * p * p) - (35442/1805.0 * p) + 16061/1805.0; } else { return (54/5.0 * p * p) - (513/25.0 * p) + 268/25.0; } } AHFloat BounceEaseInOut(AHFloat p) { if(p < 0.5) { return 0.5 * BounceEaseIn(p*2); } else { return 0.5 * BounceEaseOut(p * 2 - 1) + 0.5; } } tweenr/NAMESPACE0000644000176200001440000000216313404726422013003 0ustar liggesusers# Generated by roxygen2: do not edit by hand export("%>%") export(.complete_states) export(.get_first_frame) export(.get_last_frame) export(.has_frames) export(.max_id) export(.with_later_frames) export(.with_prior_frames) export(close_state) export(display_ease) export(keep_state) export(open_state) export(tween) export(tween_along) export(tween_appear) export(tween_at) export(tween_color) export(tween_color_t) export(tween_colour) export(tween_colour_t) export(tween_components) export(tween_constant) export(tween_constant_t) export(tween_date) export(tween_date_t) export(tween_datetime) export(tween_datetime_t) export(tween_elements) export(tween_events) export(tween_fill) export(tween_numeric) export(tween_numeric_t) export(tween_state) export(tween_states) export(tween_t) importFrom(Rcpp,sourceCpp) importFrom(farver,convert_colour) importFrom(grDevices,col2rgb) importFrom(grDevices,rgb) importFrom(graphics,plot) importFrom(magrittr,"%>%") importFrom(rlang,"%||%") importFrom(rlang,enquo) importFrom(rlang,eval_tidy) importFrom(rlang,quo_is_missing) importFrom(rlang,quo_is_null) importFrom(utils,head) useDynLib(tweenr) tweenr/R/0000755000176200001440000000000013357451032011762 5ustar liggesuserstweenr/R/tween_numeric.R0000644000176200001440000000154713352363073014762 0ustar liggesusers#' @rdname tween #' #' @export tween_numeric <- function(data, n, ease = 'linear') { data <- as.list(data) prepData <- prepareTween(data, n, ease) if (!all(sapply(prepData$data, is.numeric))) { stop('data must consist of numeric elements') } tweendata <- do.call(interpolate_numeric_state, prepData) unname(split(tweendata, rep(seq_along(data[[1]]), length.out = length(tweendata)))) } #' @rdname tween #' #' @export tween_numeric_t <- function(data, n, ease = 'linear') { if (!is.list(data)) { data <- list(data) } prepData <- prepareTweenTranspose(data, n, ease) if (!all(sapply(prepData$data, is.numeric))) { stop('data must consist of numeric elements') } tweendata <- do.call(interpolate_numeric_state, prepData) unname(split(tweendata, rep(seq_along(data), rep(n, length.out = length(data))))) } tweenr/R/aaa.R0000644000176200001440000000606113352357630012636 0ustar liggesusersBASEDATE <- Sys.Date() - as.numeric(Sys.Date()) BASEDATETIME <- Sys.time() - as.numeric(Sys.time()) validEase <- c( "linear", "quadratic-in", "quadratic-out", "quadratic-in-out", "cubic-in", "cubic-out", "cubic-in-out", "quartic-in", "quartic-out", "quartic-in-out", "quintic-in", "quintic-out", "quintic-in-out", "sine-in", "sine-out", "sine-in-out", "circular-in", "circular-out", "circular-in-out", "exponential-in", "exponential-out", "exponential-in-out", "elastic-in", "elastic-out", "elastic-in-out", "back-in", "back-out", "back-in-out", "bounce-in", "bounce-out", "bounce-in-out" ) #' @importFrom magrittr %>% #' @export magrittr::`%>%` col_classes <- function(data) { classes <- sapply(data, function(d) { if (is.numeric(d)) { 'numeric' } else if (is.logical(d)) { 'logical' } else if (is.factor(d)) { 'factor' } else if (is.character(d)) { colour <- try(suppressWarnings(col2rgb(d)), silent = TRUE) if (all(is.na(d)) || inherits(colour, 'try-error') || anyNA(colour) || all(grepl('^(\\d|\\.)+$', d))) { 'character' } else { 'colour' } } else if (inherits(d, 'Date')) { 'date' } else if (inherits(d, 'POSIXt')) { 'datetime' } else if (is.list(d)) { if (all(vapply(d, is.numeric, logical(1)))) 'numlist' else 'list' } else { 'constant' } }) names(classes) <- names(data) classes[names(classes) == '.phase'] <- 'phase' classes } prepareTween <- function(data, n, ease) { if (!is.list(data)) { data <- as.list(data) } if (length(unique(lengths(data))) != 1) { stop('All elements in data must have the same length') } if (!all(ease %in% validEase)) { stop('ease must be the name of a valid easing function') } n <- c(rep(n, length.out = length(data) - 1) - 1, 1) ease <- c(rep(ease, length.out = length(data) - 1), 'constant') states <- data.frame( state = seq_along(data) - 1, nframes = n, ease = ease, stringsAsFactors = FALSE ) list( data = data, states = states ) } prepareTweenTranspose <- function(data, n, ease) { if (!is.list(data)) { data <- list(data) } if (!all(ease %in% validEase)) { stop('ease must be the name of a valid easing function') } n <- rep(n, length.out = length(data)) n <- Map(function(n, l) { s <- floor(n / l) s <- rep(s, l) overhead <- n - sum(s) if (overhead) { s <- s + rep(floor(overhead / l), l) addInd <- sample(length(s), overhead %% l) s[addInd] <- s[addInd] + 1 } c(s, 1) }, n = n - 1, l = lengths(data) - 1) n <- unlist(n) ease <- rep(ease, length.out = length(data)) ease <- rep(ease, lengths(data) - 1) easeSplit <- split(ease, rep(seq_along(data), lengths(data) - 1)) ease <- unlist(lapply(easeSplit, append, values = 'constant')) data <- as.list(unlist(data)) states <- data.frame( state = seq_along(data) - 1, nframes = n, ease = ease, stringsAsFactors = FALSE ) list( data = data, states = states ) } tweenr/R/tween_at.R0000644000176200001440000000531613352660630013721 0ustar liggesusers#' Get a specific position between two states #' #' This tween allows you to query a specific postion between two states rather #' than generate evenly spaced states. It can work with either data.frames or #' single vectors and each row/element can have its own position and easing. #' #' @param from,to A data.frame or vector of the same type. If either is of #' length/nrow 1 it will get repeated to match the length of the other #' @param at A numeric between 0 and 1 recycled to match the nrow/length of #' `from` #' @param ease A character vector giving valid easing functions. Recycled to #' match the ncol of `from` #' #' @return If `from`/`to` is a data.frame then a data.frame with the same #' columns. If `from`/`to` is a vector then a vector. #' #' @export #' #' @examples #' tween_at(mtcars[1:6, ], mtcars[6:1, ], runif(6), 'cubic-in-out') #' tween_at <- function(from, to, at, ease) { single_vec <- !is.data.frame(from) if (single_vec) { if (length(from) == 0 || length(to) == 0) return(to[integer()]) from_df <- data.frame(data = rep(NA, length(from))) to_df <- data.frame(data = rep(NA, length(to))) from_df$data <- from to_df$data <- to from <- from_df to <- to_df } else { if (nrow(from) == 0 || nrow(to) == 0) return(to[integer(), ]) } if (length(at) == 0) stop('at must have length > 0', call. = FALSE) if (nrow(from) == 1) from <- from[rep(1, nrow(to)), , drop = FALSE] if (nrow(to) == 1) to <- to[rep(1, nrow(from)), , drop = FALSE] if (nrow(from) != nrow(to)) { stop('from and to must be same length', call. = FALSE) } stopifnot(names(from) == names(to)) at <- rep(at, length.out = nrow(from)) ease <- rep(ease, length.out = ncol(from)) classes <- col_classes(from) stopifnot(identical(classes, col_classes(to))) tweendata <- lapply(seq_along(classes), function(i) { switch( classes[i], numeric = interpolate_numeric_at(from[[i]], to[[i]], at, ease[i]), logical = interpolate_logical_at(from[[i]], to[[i]], at, ease[i]), factor = interpolate_factor_at(from[[i]], to[[i]], at, ease[i]), character = interpolate_character_at(from[[i]], to[[i]], at, ease[i]), colour = interpolate_colour_at(from[[i]], to[[i]], at, ease[i]), date = interpolate_date_at(from[[i]], to[[i]], at, ease[i]), datetime = interpolate_datetime_at(from[[i]], to[[i]], at, ease[i]), constant = interpolate_constant_at(from[[i]], to[[i]], at, ease[i]), numlist = interpolate_numlist_at(from[[i]], to[[i]], at, ease[i]), list = interpolate_list_at(from[[i]], to[[i]], at, ease[i]) ) }) if (single_vec) return(tweendata[[1]]) structure(tweendata, names = names(from), row.names = seq_along(tweendata[[1]]), class = 'data.frame') } tweenr/R/tween_date.R0000644000176200001440000000155713352362777014250 0ustar liggesusers#' @rdname tween #' #' @export tween_date <- function(data, n, ease = 'linear') { data <- as.list(data) prepData <- prepareTween(data, n, ease) if (!all(sapply(prepData$data, inherits, what = 'Date'))) { stop('data must consist of Date elements') } tweendata <- do.call(interpolate_date_state, prepData) unname(split(tweendata, rep(seq_along(data[[1]]), length.out = length(tweendata)))) } #' @rdname tween #' #' @export tween_date_t <- function(data, n, ease = 'linear') { if (!is.list(data)) { data <- list(data) } prepData <- prepareTweenTranspose(data, n, ease) if (!all(sapply(prepData$data, inherits, what = 'Date'))) { stop('data must consist of Date elements') } tweendata <- do.call(interpolate_date_state, prepData) unname(split(tweendata, rep(seq_along(data), rep(n, length.out = length(data))))) } tweenr/R/tween_states.R0000644000176200001440000001072613352363114014616 0ustar liggesusers#' Tween a list of data.frames representing states #' #' This function is intended to create smooth transitions between states of #' data. States are defined as full data.frames or data.frames containing only #' the columns with change. Each state can have a defined period of pause, the #' transition length between each states can be defined as well as the easing #' function. #' #' @param data A list of data.frames. Each data.frame must contain the same #' number of rows, but only the first data.frame needs to contain all columns. #' Subsequent data.frames need only contain the columns that shows change. #' #' @param tweenlength The lengths of the transitions between each state. #' #' @param statelength The length of the pause at each state. #' #' @param ease The easing functions to use for the transitions. See details. #' #' @param nframes The number of frames to generate. The actual number of frames #' might end up being higher depending on the regularity of `tweenlength` #' and `statelength`. #' #' @return A data.frame with the same columns as the first data.frame in #' `data`, but replicated `nframes` times. An additional column called #' `.frame` will be added giving the frame number. #' #' @family data.frame tween #' #' @examples #' data1 <- data.frame( #' x = 1:20, #' y = 0, #' colour = 'forestgreen', #' stringsAsFactors = FALSE #' ) #' data2 <- data1 #' data2$x <- 20:1 #' data2$y <- 1 #' #' data <- tween_states(list(data1, data2), 3, 1, 'cubic-in-out', 100) #' #' @export #' tween_states <- function(data, tweenlength, statelength, ease, nframes) { if (!(is.list(data) && all(sapply(data, is.data.frame)))) { stop('data must be a list of data.frames') } if (length(data) == 1) { stop('data must contain multiple states') } if (length(unique(sapply(data, nrow))) != 1) { stop('All elements in data must have the same number of rows') } data <- lapply(data, function(d) { d$.phase <- 'raw' d }) origNames <- names(data[[1]]) if (!is.list(ease)) ease <- as.list(ease) allNames <- unlist(lapply(data, names)) if (!all(allNames %in% origNames)) { stop('All columns must be specified in the original data.frame') } nstates <- length(data) tweenlength <- rep(tweenlength, nstates)[seq_len(nstates - 1)] statelength <- rep(statelength, nstates)[seq_len(nstates)] ease <- rep(ease, nstates)[seq_len(nstates - 1)] pauseIndex <- which(rep(c(TRUE, FALSE), length.out = 2*nstates - 1)) tweenIndex <- which(rep(c(FALSE, TRUE), length.out = 2*nstates - 1)) statesOrder <- order(c(pauseIndex, tweenIndex)) states <- data.frame( length = c(statelength, tweenlength)[statesOrder], nframes = NA_integer_, state = NA_integer_, stringsAsFactors = FALSE ) states$state <- rep(seq_len(nstates) - 1, each = 2, length.out = nrow(states)) states$ease <- lapply(c(rep(list('constant'), nstates), ease)[statesOrder], function(e) { structure(rep(e, length.out = length(origNames)), names = origNames) }) fullLength <- sum(states$length) framelength <- fullLength/nframes states$nframes <- round(states$length / framelength) nframes <- sum(states$nframes) framelength <- fullLength/nframes data <- Reduce(function(l, r) { extraCols <- !names(l[[length(l)]]) %in% names(r); append(l, list(cbind(r, l[[length(l)]][, extraCols]))) }, data[-1], data[1]) colClasses <- col_classes(data[[1]]) tweendata <- lapply(names(data[[1]]), function(name) { d <- lapply(data, `[[`, i = name) d_states <- states d_states$ease <- vapply(d_states$ease, `[`, character(1), i = name) switch( colClasses[name], numeric = interpolate_numeric_state(d, d_states), logical = interpolate_logical_state(d, d_states), factor = interpolate_factor_state(d, d_states), character = interpolate_character_state(d, d_states), colour = interpolate_colour_state(d, d_states), date = interpolate_date_state(d, d_states), datetime = interpolate_datetime_state(d, d_states), constant = interpolate_constant_state(d, d_states), numlist = interpolate_numlist_state(d, d_states), list = interpolate_list_state(d, d_states), phase = get_phase_state(d, d_states) ) }) tweendata <- structure(tweendata, names = names(data[[1]]), row.names = seq_along(tweendata[[1]]), class = 'data.frame') tweendata$.id <- rep(seq_len(nrow(data[[1]])), each = nframes) tweendata$.frame <- rep(seq_len(nframes), each = nrow(data[[1]])) attr(tweendata, 'framelength') <- framelength tweendata } tweenr/R/interpolate_fill.R0000644000176200001440000000362413352662020015442 0ustar liggesusersinterpolate_numeric_fill <- function(data, ease) { numeric_fill_interpolator(data, ease) } interpolate_logical_fill <- function(data, ease) { as.logical(round(numeric_fill_interpolator(as.numeric(data), ease))) } #' @importFrom grDevices col2rgb rgb #' @importFrom farver convert_colour interpolate_colour_fill <- function(data, ease) { NA_col <- is.na(data) data <- t(col2rgb(data, alpha = TRUE)) data[, 1:3] <- convert_colour(data[, 1:3, drop = FALSE], from = 'rgb', to = 'lab') data[NA_col,] <- NA data <- colour_fill_interpolator(data, ease) NA_col <- is.na(data[, 1]) data[NA_col, 1:3] <- convert_colour(data[NA_col, 1:3, drop = FALSE], from = 'lab', to = 'rgb') data[data > 255] <- 255 data[data < 0] <- 0 all_data <- rep(NA, nrow(data)) all_data[!NA_col] <- rgb(data[!NA_col, , drop = FALSE], alpha = data[!NA_col, 4], maxColorValue = 255L) all_data } interpolate_constant_fill <- function(data, ease) { constant_fill_interpolator(data, ease) } interpolate_character_fill <- function(data, ease) { interpolate_constant_fill(data, ease) } interpolate_date_fill <- function(data, ease) { data <- lapply(data, as.numeric) as.Date(interpolate_numeric_fill(data, ease), origin = BASEDATE) } interpolate_datetime_fill <- function(data, ease) { if (inherits(data, 'POSIXlt')) { warning("POSIXlt converted to POSIXct") } as.POSIXct(interpolate_numeric_fill(as.numeric(data), ease), origin = BASEDATETIME) } interpolate_factor_fill <- function(data, ease) { all_levels <- levels(data) factor(interpolate_character_fill(as.character(data), ease), all_levels) } interpolate_list_fill <- function(data, ease) { new_data <- list_fill_interpolator(data, ease) attributes(new_data) <- attributes(data) new_data } interpolate_numlist_fill <- function(data, ease) { new_data <- numlist_fill_interpolator(lapply(data, as.numeric), ease) attributes(new_data) <- attributes(data) new_data } tweenr/R/interpolate_at.R0000644000176200001440000000364613352357664015143 0ustar liggesusersinterpolate_numeric_at <- function(from, to, at, ease) { numeric_at_interpolator(from, to, at, ease) } interpolate_logical_at <- function(from, to, at, ease) { as.logical(round(numeric_at_interpolator(from, to, at, ease))) } interpolate_colour_at <- function(from, to, at, ease) { from <- t(col2rgb(from, alpha = TRUE)) from[, 1:3] <- convert_colour(from[, 1:3, drop = FALSE], from = 'rgb', to = 'lab') to <- t(col2rgb(to, alpha = TRUE)) to[, 1:3] <- convert_colour(to[, 1:3, drop = FALSE], from = 'rgb', to = 'lab') data <- colour_at_interpolator(from, to, at, ease) data[, 1:3] <- convert_colour(data[, 1:3, drop = FALSE], from = 'lab', to = 'rgb') data[data > 255] <- 255 data[data < 0] <- 0 rgb(data, alpha = data[, 4], maxColorValue = 255L) } interpolate_character_at <- function(from, to, at, ease) { constant_at_interpolator(from, to, at, ease) } interpolate_constant_at <- function(from, to, at, ease) { constant_at_interpolator(from, to, at, ease) } interpolate_date_at <- function(from, to, at, ease) { data <- numeric_at_interpolator(as.numeric(from), as.numeric(to), at, ease) as.Date(data, origin = BASEDATE) } interpolate_datetime_at <- function(from, to, at, ease) { if (inherits(from, 'POSIXlt')) { warning("POSIXlt converted to POSIXct") } data <- numeric_at_interpolator(as.numeric(from), as.numeric(to), at, ease) as.POSIXct(data, origin = BASEDATETIME) } interpolate_factor_at <- function(from, to, at, ease) { all_levels <- unique(c(levels(from), levels(to))) data <- constant_at_interpolator(as.character(from), as.character(to), at, ease) factor(data, all_levels) } interpolate_list_at <- function(from, to, at, ease) { data <- list_at_interpolator(from, to, at, ease) attributes(data) <- attributes(from) data } interpolate_numlist_at <- function(from, to, at, ease) { data <- numlist_at_interpolator(from, to, at, ease) attributes(data) <- attributes(from) data } tweenr/R/tween_fill.R0000644000176200001440000000361413352363754014251 0ustar liggesusers#' Fill out missing values by interpolation #' #' This tween fills out `NA` elements (or `NULL` elements if `data` is a list) #' by interpolating between the prior and next non-missing values. #' #' @param data A data.frame or vector. #' @param ease A character vector giving valid easing functions. Recycled to #' match the ncol of `data` #' #' @return If `data` is a data.frame then a data.frame with the same #' columns. If `data` is a vector then a vector. #' #' @export #' #' @examples #' # Single vector #' tween_fill(c(1, NA, NA, NA, NA, NA, 2, 6, NA, NA, NA, -2), 'cubic-in-out') #' #' # Data frame #' tween_fill(mtcars[c(1, NA, NA, NA, NA, 4, NA, NA, NA, 10), ], 'cubic-in') #' tween_fill <- function(data, ease) { single_vec <- !is.data.frame(data) if (single_vec) { if (length(data) == 0) return(data[integer()]) data_df <- data.frame(data = rep(NA, length(data))) data_df$data <- data data <- data_df } else { if (nrow(data) == 0) return(data[integer(), ]) } ease <- rep(ease, length.out = ncol(data)) classes <- col_classes(data) tweendata <- lapply(seq_along(classes), function(i) { switch( classes[i], numeric = interpolate_numeric_fill(data[[i]], ease[i]), logical = interpolate_logical_fill(data[[i]], ease[i]), factor = interpolate_factor_fill(data[[i]], ease[i]), character = interpolate_character_fill(data[[i]], ease[i]), colour = interpolate_colour_fill(data[[i]], ease[i]), date = interpolate_date_fill(data[[i]], ease[i]), datetime = interpolate_datetime_fill(data[[i]], ease[i]), constant = interpolate_constant_fill(data[[i]], ease[i]), numlist = interpolate_numlist_fill(data[[i]], ease[i]), list = interpolate_list_fill(data[[i]], ease[i]) ) }) if (single_vec) return(tweendata[[1]]) structure(tweendata, names = names(data), row.names = seq_along(tweendata[[1]]), class = 'data.frame') } tweenr/R/interpolate_along.R0000644000176200001440000000626613352357654015637 0ustar liggesusersinterpolate_numeric_along <- function(data, group, frame, nframes, ease, history, keep_last) { numeric_along_interpolator(data, group, frame, history, keep_last, nframes, ease) } interpolate_logical_along <- function(data, group, frame, nframes, ease, history, keep_last) { res <- numeric_along_interpolator(data, group, frame, history, keep_last, nframes, ease) res[['data']] <- as.logical(round(res[['data']])) res } #' @importFrom grDevices col2rgb rgb #' @importFrom farver convert_colour interpolate_colour_along <- function(data, group, frame, nframes, ease, history, keep_last) { col <- t(col2rgb(data, alpha = TRUE)) data <- convert_colour(col[,1:3, drop = FALSE], from = 'rgb', to = 'lab') int_col <- colour_along_interpolator(cbind(data, col[,4]), group, frame, history, keep_last, nframes, ease) int_col_convert <- convert_colour(as.matrix(int_col[, c('data1', 'data2', 'data3')]), from = 'lab', to = 'rgb') int_col_convert[int_col_convert > 255] <- 255 int_col_convert[int_col_convert < 0] <- 0 int_col$data4[int_col$data4 < 0] <- 0 data.frame( data = rgb(int_col_convert[, 1], int_col_convert[, 2], int_col_convert[, 3], int_col$data4, maxColorValue = 255), group = int_col$group, frame = int_col$frame, stringsAsFactors = FALSE ) } interpolate_constant_along <- function(data, group, frame, nframes, ease, history, keep_last) { constant_along_interpolator(data, group, frame, history, keep_last, nframes, ease) } interpolate_character_along <- function(data, group, frame, nframes, ease, history, keep_last) { constant_along_interpolator(data, group, frame, history, keep_last, nframes, ease) } interpolate_date_along <- function(data, group, frame, nframes, ease, history, keep_last) { data <- as.numeric(data) res <- interpolate_numeric_along(data, group, frame, nframes, ease, history, keep_last) res[['data']] <- as.Date(res[['data']], origin = BASEDATE) res } interpolate_datetime_along <- function(data, group, frame, nframes, ease, history, keep_last) { if (inherits(data, 'POSIXlt')) { warning("POSIXlt converted to POSIXct") } data <- as.numeric(data) res <- interpolate_numeric_along(data, group, frame, nframes, ease, history, keep_last) res[['data']] <- as.POSIXct(res[['data']], origin = BASEDATETIME) res } interpolate_factor_along <- function(data, group, frame, nframes, ease, history, keep_last) { all_levels <- levels(data) data <- as.character(data) res <- interpolate_character_along(data, group, frame, nframes, ease, history, keep_last) res[['data']] <- factor(res[['data']], all_levels) res } interpolate_list_along <- function(data, group, frame, nframes, ease, history, keep_last) { new_data <- list_along_interpolator(data, group, frame, history, keep_last, nframes, ease) attributes(new_data$data) <- attributes(data) new_data } interpolate_numlist_along <- function(data, group, frame, nframes, ease, history, keep_last) { new_data <- numlist_along_interpolator(data, group, frame, history, keep_last, nframes, ease) attributes(new_data$data) <- attributes(data) new_data } get_phase_along <- function(group, frame, nframes, history, keep_last) { phase_along_interpolator(group, frame, history, keep_last, nframes) } tweenr/R/tween_colour.R0000644000176200001440000000202713352362721014614 0ustar liggesusers#' @rdname tween #' #' @export tween_colour <- function(data, n, ease = 'linear') { data <- as.list(data) prepData <- prepareTween(data, n, ease) if (anyNA(suppressWarnings(col2rgb(unlist(prepData$data))))) { stop('all elements in data must be convertible to colour') } tweendata <- do.call(interpolate_colour_state, prepData) unname(split(tweendata, rep(seq_along(data[[1]]), length.out = length(tweendata)))) } #' @rdname tween #' #' @export tween_color <- tween_colour #' @rdname tween #' #' @export tween_colour_t <- function(data, n, ease = 'linear') { if (!is.list(data)) { data <- list(data) } prepData <- prepareTweenTranspose(data, n, ease) if (anyNA(suppressWarnings(col2rgb(unlist(prepData$data))))) { stop('all elements in data must be convertible to colour') } tweendata <- do.call(interpolate_colour_state, prepData) unname(split(tweendata, rep(seq_along(data), rep(n, length.out = length(data))))) } #' @rdname tween #' #' @export tween_color_t <- tween_colour_t tweenr/R/tween_along.R0000644000176200001440000000773213352515532014421 0ustar liggesusers#' Interpolate data along a given dimension #' #' This tween takes groups of rows along with the time for each row and #' calculates the exact value at each at each frame. Further it allows for #' keeping the subsequent raw data from previous frame as well as letting the #' final row linger beyond its time. It especially useful for data that should #' be visualised as lines that are drawn along the x-axis, but can of course #' also be used for other dimensions as well (even dimensions not corresponding #' to any axis). #' #' @inheritParams tween_components #' @param along The "time" point for each row #' @param history Should earlier datapoints be kept in subsequent frames #' @param keep_last Should the last point of each id be kept beyond its time #' #' @return A data.frame with the same columns as `.data` along with `.id` giving #' the component id, `.phase` giving the state of each component in each frame, #' and `.frame` giving the frame membership of each row. #' #' @family data.frame tween #' #' @importFrom rlang enquo quo_is_null eval_tidy #' @export tween_along <- function(.data, ease, nframes, along, id = NULL, range = NULL, history = TRUE, keep_last = FALSE) { along <- enquo(along) along <- as.numeric(eval_tidy(along, .data)) id <- enquo(id) id <- if (quo_is_null(id)) rep(1, nrow(.data)) else eval_tidy(id, .data) .data <- .complete_along(.data, along, id) if (length(ease) == 1) ease <- rep(ease, ncol(.data) - 3) if (length(ease) == ncol(.data) - 3) { ease <- c(ease, 'linear', 'linear', 'linear') # To account for .phase and .id columns } else { stop('Ease must be either a single string or one for each column', call. = FALSE) } stopifnot(length(nframes) == 1 && is.numeric(nframes) && nframes %% 1 == 0) timerange <- if (is.null(range)) range(.data$.time) else range timerange <- as.numeric(timerange) if (diff(timerange) == 0) stop('range must have a length', call. = FALSE) framelength <- diff(timerange) / (nframes - 1) frame <- 1 + (nframes - 1) * (.data$.time - timerange[1]) / diff(timerange) colClasses <- col_classes(.data) tweendata <- lapply(seq_along(.data), function(i) { d <- .data[[i]] e <- ease[i] switch( colClasses[i], numeric = interpolate_numeric_along(d, .data$.id, frame, nframes, e, history, keep_last), logical = interpolate_logical_along(d, .data$.id, frame, nframes, e, history, keep_last), factor = interpolate_factor_along(d, .data$.id, frame, nframes, e, history, keep_last), character = interpolate_character_along(d, .data$.id, frame, nframes, e, history, keep_last), colour = interpolate_colour_along(d, .data$.id, frame, nframes, e, history, keep_last), date = interpolate_date_along(d, .data$.id, frame, nframes, e, history, keep_last), datetime = interpolate_datetime_along(d, .data$.id, frame, nframes, e, history, keep_last), constant = interpolate_constant_along(d, .data$.id, frame, nframes, e, history, keep_last), numlist = interpolate_numlist_along(d, .data$.id, frame, nframes, e, history, keep_last), list = interpolate_list_along(d, .data$.id, frame, nframes, e, history, keep_last), phase = get_phase_along(.data$.id, frame, nframes, history, keep_last) ) }) tweenInfo <- tweendata[[1]][, c('group', 'frame')] tweendata <- lapply(tweendata, `[[`, i = 'data') tweendata <- structure(tweendata, names = names(.data), row.names = seq_along(tweendata[[1]]), class = 'data.frame') tweendata$.frame <- tweenInfo$frame tweendata$.id <- tweenInfo$group attr(tweendata, 'framelength') <- framelength tweendata[order(tweendata$.frame, tweendata$.id), , drop = FALSE] } .complete_along <- function(data, along, id) { if (length(along) != nrow(data) || length(id) != nrow(data)) { stop('along and id must be the same length as the number of rows in data', call. = FALSE) } data <- data[order(id), , drop = FALSE] along <- along[order(id)] id <- sort(id) data$.id <- id data$.phase <- 'raw' data$.time <- along data } tweenr/R/tween_constant.R0000644000176200001440000000135113352362764015150 0ustar liggesusers#' @rdname tween #' #' @export tween_constant <- function(data, n, ease = 'linear') { data <- as.list(data) data <- lapply(data, as.character) prepData <- prepareTween(data, n, ease) tweendata <- do.call(interpolate_character_state, prepData) unname(split(tweendata, rep(seq_along(data[[1]]), length.out = length(tweendata)))) } #' @rdname tween #' #' @export tween_constant_t <- function(data, n, ease = 'linear') { if (!is.list(data)) { data <- list(data) } data <- lapply(data, as.character) prepData <- prepareTweenTranspose(data, n, ease) tweendata <- do.call(interpolate_character_state, prepData) unname(split(tweendata, rep(seq_along(data), rep(n, length.out = length(data))))) } tweenr/R/RcppExports.R0000644000176200001440000001102513352246025014374 0ustar liggesusers# Generated by using Rcpp::compileAttributes() -> do not edit by hand # Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 numeric_state_interpolator <- function(data, states) { .Call('_tweenr_numeric_state_interpolator', PACKAGE = 'tweenr', data, states) } colour_state_interpolator <- function(data, states) { .Call('_tweenr_colour_state_interpolator', PACKAGE = 'tweenr', data, states) } constant_state_interpolator <- function(data, states) { .Call('_tweenr_constant_state_interpolator', PACKAGE = 'tweenr', data, states) } list_state_interpolator <- function(data, states) { .Call('_tweenr_list_state_interpolator', PACKAGE = 'tweenr', data, states) } numlist_state_interpolator <- function(data, states) { .Call('_tweenr_numlist_state_interpolator', PACKAGE = 'tweenr', data, states) } phase_state_interpolator <- function(data, states) { .Call('_tweenr_phase_state_interpolator', PACKAGE = 'tweenr', data, states) } numeric_element_interpolator <- function(data, group, frame, ease) { .Call('_tweenr_numeric_element_interpolator', PACKAGE = 'tweenr', data, group, frame, ease) } colour_element_interpolator <- function(data, group, frame, ease) { .Call('_tweenr_colour_element_interpolator', PACKAGE = 'tweenr', data, group, frame, ease) } constant_element_interpolator <- function(data, group, frame, ease) { .Call('_tweenr_constant_element_interpolator', PACKAGE = 'tweenr', data, group, frame, ease) } list_element_interpolator <- function(data, group, frame, ease) { .Call('_tweenr_list_element_interpolator', PACKAGE = 'tweenr', data, group, frame, ease) } numlist_element_interpolator <- function(data, group, frame, ease) { .Call('_tweenr_numlist_element_interpolator', PACKAGE = 'tweenr', data, group, frame, ease) } phase_element_interpolator <- function(data, group, frame, ease) { .Call('_tweenr_phase_element_interpolator', PACKAGE = 'tweenr', data, group, frame, ease) } numeric_along_interpolator <- function(data, group, time, history, keep_last, nframes, ease) { .Call('_tweenr_numeric_along_interpolator', PACKAGE = 'tweenr', data, group, time, history, keep_last, nframes, ease) } colour_along_interpolator <- function(data, group, time, history, keep_last, nframes, ease) { .Call('_tweenr_colour_along_interpolator', PACKAGE = 'tweenr', data, group, time, history, keep_last, nframes, ease) } constant_along_interpolator <- function(data, group, time, history, keep_last, nframes, ease) { .Call('_tweenr_constant_along_interpolator', PACKAGE = 'tweenr', data, group, time, history, keep_last, nframes, ease) } list_along_interpolator <- function(data, group, time, history, keep_last, nframes, ease) { .Call('_tweenr_list_along_interpolator', PACKAGE = 'tweenr', data, group, time, history, keep_last, nframes, ease) } numlist_along_interpolator <- function(data, group, time, history, keep_last, nframes, ease) { .Call('_tweenr_numlist_along_interpolator', PACKAGE = 'tweenr', data, group, time, history, keep_last, nframes, ease) } phase_along_interpolator <- function(group, time, history, keep_last, nframes) { .Call('_tweenr_phase_along_interpolator', PACKAGE = 'tweenr', group, time, history, keep_last, nframes) } numeric_at_interpolator <- function(from, to, at, ease) { .Call('_tweenr_numeric_at_interpolator', PACKAGE = 'tweenr', from, to, at, ease) } colour_at_interpolator <- function(from, to, at, ease) { .Call('_tweenr_colour_at_interpolator', PACKAGE = 'tweenr', from, to, at, ease) } constant_at_interpolator <- function(from, to, at, ease) { .Call('_tweenr_constant_at_interpolator', PACKAGE = 'tweenr', from, to, at, ease) } list_at_interpolator <- function(from, to, at, ease) { .Call('_tweenr_list_at_interpolator', PACKAGE = 'tweenr', from, to, at, ease) } numlist_at_interpolator <- function(from, to, at, ease) { .Call('_tweenr_numlist_at_interpolator', PACKAGE = 'tweenr', from, to, at, ease) } numeric_fill_interpolator <- function(data, ease) { .Call('_tweenr_numeric_fill_interpolator', PACKAGE = 'tweenr', data, ease) } colour_fill_interpolator <- function(data, ease) { .Call('_tweenr_colour_fill_interpolator', PACKAGE = 'tweenr', data, ease) } constant_fill_interpolator <- function(data, ease) { .Call('_tweenr_constant_fill_interpolator', PACKAGE = 'tweenr', data, ease) } list_fill_interpolator <- function(data, ease) { .Call('_tweenr_list_fill_interpolator', PACKAGE = 'tweenr', data, ease) } numlist_fill_interpolator <- function(data, ease) { .Call('_tweenr_numlist_fill_interpolator', PACKAGE = 'tweenr', data, ease) } tweenr/R/tween_datetime.R0000644000176200001440000000160713352363010015100 0ustar liggesusers#' @rdname tween #' #' @export tween_datetime <- function(data, n, ease = 'linear') { data <- as.list(data) prepData <- prepareTween(data, n, ease) if (!all(sapply(prepData$data, inherits, what = 'POSIXt'))) { stop('data must consist of POSIXt elements') } tweendata <- do.call(interpolate_datetime_state, prepData) unname(split(tweendata, rep(seq_along(data[[1]]), length.out = length(tweendata)))) } #' @rdname tween #' #' @export tween_datetime_t <- function(data, n, ease = 'linear') { if (!is.list(data)) { data <- list(data) } prepData <- prepareTweenTranspose(data, n, ease) if (!all(sapply(prepData$data, inherits, what = 'POSIXt'))) { stop('data must consist of POSIXt elements') } tweendata <- do.call(interpolate_datetime_state, prepData) unname(split(tweendata, rep(seq_along(data), rep(n, length.out = length(data))))) } tweenr/R/display_ease.R0000644000176200001440000000373013352357644014563 0ustar liggesusers#' Display an easing function #' #' This simple helper lets you explore how the different easing functions govern #' the interpolation of data. #' #' @details #' How transitions proceed between states are defined by an easing function. The #' easing function converts the parameterized progression from one state to the #' next to a new number between 0 and 1. `linear` easing is equivalent to #' an identity function that returns the input unchanged. In addition there are #' a range of additional easers available, each with three modifiers. #' #' \strong{Easing modifiers:} #' \describe{ #' \item{-in}{The easing function is applied as-is} #' \item{-out}{The easing function is applied in reverse} #' \item{-in-out}{The first half of the transition it is applied as-is, while #' in the last half it is reversed} #' } #' #' \strong{Easing functions} #' \describe{ #' \item{quadratic}{Models a power-of-2 function} #' \item{cubic}{Models a power-of-3 function} #' \item{quartic}{Models a power-of-4 function} #' \item{quintic}{Models a power-of-5 function} #' \item{sine}{Models a sine function} #' \item{circular}{Models a pi/2 circle arc} #' \item{exponential}{Models an exponential function} #' \item{elastic}{Models an elastic release of energy} #' \item{back}{Models a pullback and relase} #' \item{bounce}{Models the bouncing of a ball} #' } #' #' In addition to this function a good animated explanation can be found #' [here](http://easings.net). #' #' @param ease The name of the easing function to display (see details) #' #' @return This function is called for its side effects #' #' @examples #' # The default - identity #' display_ease('linear') #' #' # A more fancy easer #' display_ease('elastic-in') #' #' @importFrom graphics plot #' @export #' display_ease <- function(ease) { easepoints <- tween_numeric(c(0, 1), 100, ease)[[1]] progress <- seq(0, 1, length.out = 100) plot(progress, easepoints, type = 'l', main = ease, xlab = 'In', ylab = 'Out', bty = 'n') } tweenr/R/tween_components.R0000644000176200001440000001331513404726121015474 0ustar liggesusers#' Interpolate individual component #' #' This function is much like [tween_elements()] but with a slightly different #' syntax and support for many of the newer features such as enter/exits and #' tween phase identification. Furthermore it uses tidy evaluation for time and #' id, making it easier to change these on the fly. The biggest change in terms #' of functionality compared to `tween_elements()` is that the easing function #' is now given per column and not per row. If different easing functions are #' needed for each transition then `tween_elements()` is needed. #' #' @inheritParams tween_state #' #' @param .data A data.frame with components at different stages #' #' @param time An unquoted expression giving the timepoint for the different #' stages of the components. Will be evaluated in the context of `.data` so can #' refer to a column from that #' #' @param id An unquoted expression giving the component id for each row. Will #' be evaluated in the context of `.data` so can refer to a column from that #' #' @param range The range of time points to include in the tween. If `NULL` it #' will use the range of `time` #' #' @param enter_length,exit_length The lenght of the opening and closing #' transitions if `enter` and/or `exit` is given. Measured in the same units as #' `time` #' #' @return A data.frame with the same columns as `.data` along with `.id` giving #' the component id, `.phase` giving the state of each component in each frame, #' and `.frame` giving the frame membership of each row. #' #' @family data.frame tween #' #' @examples #' #' from_zero <- function(x) {x$x <- 0; x} #' #' data <- data.frame( #' x = c(1, 2, 2, 1, 2, 2), #' y = c(1, 2, 2, 2, 1, 1), #' time = c(1, 4, 10, 4, 8, 10), #' id = c(1, 1, 1, 2, 2, 2) #' ) #' #' data <- tween_components(data, 'cubic-in-out', nframes = 100, time = time, #' id = id, enter = from_zero, enter_length = 4) #' #' @export #' @importFrom rlang enquo eval_tidy #' tween_components <- function(.data, ease, nframes, time, id = NULL, range = NULL, enter = NULL, exit = NULL, enter_length = 0, exit_length = 0) { time <- enquo(time) time <- eval_tidy(time, .data) id <- enquo(id) id <- if (quo_is_null(id)) rep(1, nrow(.data)) else eval_tidy(id, .data) if (is.null(enter_length)) enter_length <- 0 if (is.null(exit_length)) exit_length <- 0 .data <- .complete_components(.data, time, id, enter, exit, enter_length, exit_length) .tween_individuals(.data, ease, nframes, range) } .tween_individuals <- function(.data, ease, nframes, range) { if (nframes == 0) return(.data[integer(), , drop = FALSE]) if (nrow(.data) == 0) return(.data) if (length(ease) == 1) ease <- rep(ease, ncol(.data) - 3) if (length(ease) == ncol(.data) - 3) { ease <- c(ease, 'linear', 'linear', 'linear') # To account for .phase and .id columns } else { stop('Ease must be either a single string or one for each column', call. = FALSE) } stopifnot(length(nframes) == 1 && is.numeric(nframes) && nframes %% 1 == 0) timerange <- if (is.null(range)) range(.data$.time) else range if (diff(timerange) == 0) stop('range must have a length', call. = FALSE) framelength <- diff(timerange) / (nframes - 1) .data <- .data[order(.data$.id, .data$.time), , drop = FALSE] frame <- round((.data$.time - min(timerange[1])) / framelength) + 1 .data$.time <- NULL colClasses <- col_classes(.data) tweendata <- lapply(seq_along(.data), function(i) { d <- .data[[i]] e <- rep(ease[i], length(d)) switch( colClasses[i], numeric = interpolate_numeric_element(d, .data$.id, frame, e), logical = interpolate_logical_element(d, .data$.id, frame, e), factor = interpolate_factor_element(d, .data$.id, frame, e), character = interpolate_character_element(d, .data$.id, frame, e), colour = interpolate_colour_element(d, .data$.id, frame, e), date = interpolate_date_element(d, .data$.id, frame, e), datetime = interpolate_datetime_element(d, .data$.id, frame, e), constant = interpolate_constant_element(d, .data$.id, frame, e), numlist = interpolate_numlist_element(d, .data$.id, frame, e), list = interpolate_list_element(d, .data$.id, frame, e), phase = get_phase_element(d, .data$.id, frame, e) ) }) tweenInfo <- tweendata[[1]][, c('group', 'frame')] tweendata <- lapply(tweendata, `[[`, i = 'data') tweendata <- structure(tweendata, names = names(.data), row.names = seq_along(tweendata[[1]]), class = 'data.frame') tweendata$.frame <- tweenInfo$frame tweendata$.id <- tweenInfo$group tweendata <- tweendata[tweendata$.frame >= 1 & tweendata$.frame <= nframes, , drop = FALSE] attr(tweendata, 'framelength') <- framelength tweendata[order(tweendata$.frame, tweendata$.id), , drop = FALSE] } .complete_components <- function(data, time, id, enter, exit, enter_length, exit_length) { if (length(id) != nrow(data) || length(time) != nrow(data)) { stop('id and time must have the same length as the number of rows in data', call. = FALSE) } data$.id <- id data$.phase <- rep('raw', nrow(data)) data$.time <- time if (any(!is.null(enter), !is.null(exit))) { time_ord <- order(time) if (!is.null(enter)) { enter_data <- enter(data[time_ord[!duplicated(id[time_ord])], , drop = FALSE]) enter_data$.phase <- 'enter' enter_data$.time <- enter_data$.time - enter_length } else { enter_data <- data[0, , drop = FALSE] } if (!is.null(exit)) { exit_data <- exit(data[time_ord[!duplicated(id[time_ord], fromLast = TRUE)], , drop = FALSE]) exit_data$.phase <- 'exit' exit_data$.time <- exit_data$.time + exit_length } else { exit_data <- data[0, , drop = FALSE] } data <- rbind(enter_data, data, exit_data) } data } tweenr/R/tween_appear.R0000644000176200001440000000361513352362700014562 0ustar liggesusers#' Tween a data.frame of appearances #' #' This function is intended for use when you have a data.frame of events at #' different time points. This could be the appearance of an observation for #' example. This function replicates your data `nframes` times and #' calculates the duration of each frame. At each frame each row is #' assigned an age based on the progression of frames and the entry point of in #' time for that row. A negative age means that the row has not appeared yet. #' #' @param data A data.frame to tween #' #' @param time The name of the column that holds the time dimension. This does #' not need to hold time data in the strictest sence - any numerical type will #' do #' #' @param timerange The range of time to create the tween for. If missing it #' will defaults to the range of the time column #' #' @param nframes The number of frames to create for the tween. If missing it #' will create a frame for each full unit in `timerange` (e.g. #' `timerange = c(1, 10)` will give `nframes = 10`) #' #' @return A data.frame as `data` but repeated `nframes` times and #' with the additional columns `.age` and `.frame` #' #' @family data.frame tween #' #' @examples #' data <- data.frame( #' x = rnorm(100), #' y = rnorm(100), #' time = sample(50, 100, replace = TRUE) #' ) #' #' data <- tween_appear(data, 'time', nframes = 200) #' #' @export #' tween_appear <- function(data, time, timerange, nframes) { if (missing(timerange) || is.null(timerange)) { timerange <- range(data[[time]]) } if (missing(nframes) || is.null(nframes)) { nframes <- ceiling(diff(timerange) + 1) } framelength <- diff(timerange) / nframes tweendata <- lapply(seq_len(nframes) - 1, function(f) { timepoint <- f * framelength data$.age <- timepoint - data[[time]] data$.frame <- f data }) tweendata <- do.call(rbind, tweendata) attr(tweendata, 'framelength') <- framelength tweendata } tweenr/R/interpolate_state.R0000644000176200001440000000417213352357706015647 0ustar liggesusersinterpolate_numeric_state <- function(data, states) { numeric_state_interpolator(data, states) } interpolate_logical_state <- function(data, states) { as.logical(round(numeric_state_interpolator(lapply(data, as.numeric), states))) } #' @importFrom grDevices col2rgb rgb #' @importFrom farver convert_colour interpolate_colour_state <- function(data, states) { data <- lapply(data, function(d){ col <- t(col2rgb(d, alpha = TRUE)) col_conv <- convert_colour(col[,1:3, drop = FALSE], from = 'rgb', to = 'lab') cbind(col_conv, col[,4]) }) int_col <- colour_state_interpolator(data, states) alpha <- int_col[,4] alpha[alpha > 255] <- 255 alpha[alpha < 0] <- 0 int_col <- convert_colour(int_col[, 1:3, drop = FALSE], from = 'lab', to = 'rgb') int_col[int_col > 255] <- 255 int_col[int_col < 0] <- 0 rgb(int_col[, 1], int_col[, 2], int_col[, 3], alpha, maxColorValue = 255) } interpolate_constant_state <- function(data, states) { constant_state_interpolator(data, states) } interpolate_character_state <- function(data, states) { interpolate_constant_state(data, states) } interpolate_date_state <- function(data, states) { data <- lapply(data, as.numeric) as.Date(interpolate_numeric_state(data, states), origin = BASEDATE) } interpolate_datetime_state <- function(data, states) { if (inherits(data[[1]], 'POSIXlt')) { warning("POSIXlt converted to POSIXct") } data <- lapply(data, as.numeric) as.POSIXct(interpolate_numeric_state(data, states), origin = BASEDATETIME) } interpolate_factor_state <- function(data, states) { all_levels <- Reduce(union, lapply(data, levels)) data <- lapply(data, as.character) factor(interpolate_character_state(data, states), all_levels) } interpolate_list_state <- function(data, states) { new_data <- list_state_interpolator(data, states) attributes(new_data) <- attributes(data) new_data } interpolate_numlist_state <- function(data, states) { new_data <- numlist_state_interpolator(lapply(data, lapply, as.numeric), states) attributes(new_data) <- attributes(data) new_data } get_phase_state <- function(data, states) { phase_state_interpolator(data, states) } tweenr/R/tween_state.R0000644000176200001440000003433713352363101014433 0ustar liggesusers#' Compose tweening between states #' #' The `tween_state()` is a counterpart to `tween_states()` that is aimed at #' letting you gradually build up a scene by composing state changes one by one. #' This setup lets you take more control over each state change and allows you #' to work with datasets with uneven number of rows, flexibly specifying what #' should happen with entering and exiting data. `keep_state()` is a simpel #' helper for letting you pause at a state. `open_state()` is a shortcut from #' tweening from an empty dataset with a given `enter()` function while #' `close_state()` is the same but will instead tween into an empty dataset with #' a given `exit()` function. #' #' @param .data A data.frame to start from. If `.data` is the result of a prior #' tween, only the last frame will be used for the tween. The new tween will #' then be added to the prior tween #' #' @param to A data.frame to end at. It must contain the same columns as .data #' (exluding `.frame`) #' #' @param ease The easing function to use. Either a single string or one for #' each column in the data set. #' #' @param nframes The number of frames to calculate for the tween #' #' @param id The column to match observations on. If `NULL` observations will be #' matched by position. See the *Match, Enter, and Exit* section for more #' information. #' #' @param enter,exit functions that calculate a start state for new observations #' that appear in `to` or an end state for observations that are not present in #' `to`. If `NULL` the new/old observations will not be part of the tween. The #' function gets a data.frame with either the start state of the exiting #' observations, or the end state of the entering observations and must return #' a modified version of that data.frame. See the *Match, Enter, and Exit* #' section for more information. #' #' @return A data.frame containing all the intermediary states in the tween, #' each state will be enumerated by the `.frame` column #' #' @section Match, Enter, and Exit: #' When there are discrepancies between the two states to tweeen between you #' need a way to resolve the discrepancy before calculating the intermediary #' states. With discrepancies we mean that some data points are present in the #' start state and not in the end state, and/or some are present in the end #' state but not in the start state. A simple example is that the start state #' contains 100 rows and the end state contains 70. There are 30 missing rows #' that we need to do something about before we can calculate the tween. #' #' **Making pairs** #' The first question to answer is "How do we know which observations are #' disappearing (*exiting*) and/or appearing (*entering*)?". This is done with #' the `id` argument which should give a column name to match rows between the #' two states on. If `id = NULL` the rows will be matched by position (in the #' above example the last 30 rows in the start state will be entering). The `id` #' column must only contain unique values in order to work. #' #' **Making up states** #' Once the rows in each state has been paired you'll end up with three sets of #' data. One containing rows that is present in both the start and end state, #' one containing rows only present in the start state, and one only containing #' rows present in the end state. The first group is easy - here you just tween #' between each rows - but for the other two we'll need some state to start or #' end the tween with. This is really the purpose of the `enter` and `exit` #' functions. They take a data frame containing the subset of data that has not #' been matched and must return a new data frame giving the state that these #' rows must be tweened from/into. A simple example could be an `enter` function #' that sets the variable giving the opacity in the plot to 0 - this will make #' the new points fade into view during the transition. #' #' **Ignoring discrepancies** #' The default values for `enter` and `exit` is `NULL`. This value indicate that #' non-matching rows should simply be ignored for the transition and simply #' appear in the last frame of the tween. This is the default. #' #' @importFrom rlang enquo #' @export #' #' @examples #' data1 <- data.frame( #' x = 1:20, #' y = 0, #' colour = 'forestgreen', #' stringsAsFactors = FALSE #' ) #' data2 <- data1 #' data2$x <- 20:1 #' data2$y <- 1 #' #' data <- data1 %>% #' tween_state(data2, 'linear', 50) %>% #' keep_state(20) %>% #' tween_state(data1, 'bounce-out', 50) #' #' # Using enter and exit (made up numbers) #' df1 <- data.frame( #' country = c('Denmark', 'Sweden', 'Norway'), #' population = c(5e6, 10e6, 3.5e6) #' ) #' df2 <- data.frame( #' country = c('Denmark', 'Sweden', 'Norway', 'Finland'), #' population = c(6e6, 10.5e6, 4e6, 3e6) #' ) #' df3 <- data.frame( #' country = c('Denmark', 'Norway'), #' population = c(10e6, 6e6) #' ) #' to_zero <- function(x) { #' x$population <- 0 #' x #' } #' pop_devel <- df1 %>% #' tween_state(df2, 'cubic-in-out', 50, id = country, enter = to_zero) %>% #' tween_state(df3, 'cubic-in-out', 50, id = country, enter = to_zero, #' exit = to_zero) #' tween_state <- function(.data, to, ease, nframes, id = NULL, enter = NULL, exit = NULL) { from <- .get_last_frame(.data) from$.phase <- rep('raw', length = nrow(from)) to$.phase <- rep('raw', length = nrow(to)) to$.id <- rep(NA_integer_, length = nrow(to)) id <- enquo(id) if (.has_frames(.data)) nframes <- nframes + 1 if (!setequal(names(from), names(to))) { stop('from and to must have identical columns', call. = FALSE) } if (nrow(from) == 0 && nrow(to) == 0) { return(.with_prior_frames(.data, from, nframes)) } to <- to[, match(names(from), names(to)), drop = FALSE] if (length(ease) == 1) ease <- rep(ease, ncol(from) - 2) if (length(ease) == ncol(from) - 2) { ease <- c(ease, 'linear', 'linear') # To account for .phase and .id columns } else { stop('Ease must be either a single string or one for each column', call. = FALSE) } stopifnot(length(nframes) == 1 && is.numeric(nframes) && nframes %% 1 == 0) classes <- if (nrow(from) == 0) col_classes(to) else col_classes(from) if (nrow(from) > 0 && nrow(to) > 0) stopifnot(identical(classes, col_classes(to))) full_set <- .complete_states(from, to, id, enter, exit, .max_id(.data)) to$.id <- full_set$orig_to tweendata <- lapply(seq_along(classes), function(i) { d <- list(full_set$from[[i]], full_set$to[[i]]) state <- simple_state(nframes, ease[i]) switch( classes[i], numeric = interpolate_numeric_state(d, state), logical = interpolate_logical_state(d, state), factor = interpolate_factor_state(d, state), character = interpolate_character_state(d, state), colour = interpolate_colour_state(d, state), date = interpolate_date_state(d, state), datetime = interpolate_datetime_state(d, state), constant = interpolate_constant_state(d, state), numlist = interpolate_numlist_state(d, state), list = interpolate_list_state(d, state), phase = get_phase_state(d, state) ) }) tweendata <- structure(tweendata, names = names(full_set$from), row.names = seq_along(tweendata[[1]]), class = 'data.frame') tweendata$.frame <- rep(seq_len(nframes - 1), each = nrow(full_set$from)) tweendata <- rbind( if (nframes > 1) cbind(from, .frame = rep(1, nrow(from))) else NULL, tweendata[tweendata$.frame != 1, , drop = FALSE], cbind(to, .frame = rep(nframes, nrow(to))) ) .with_prior_frames(.data, tweendata, nframes) } #' @rdname tween_state #' @export keep_state <- function(.data, nframes) { state <- .get_last_frame(.data) state$.phase <- rep('raw', length = nrow(state)) if (.has_frames(.data)) nframes <- nframes + 1 if (nrow(state) == 0) { return(.with_prior_frames(.data, state, nframes)) } states <- state[rep(seq_len(nrow(state)), nframes), , drop = FALSE] states$.phase[seq_len(nrow(state) * (nframes - 1))] <- 'static' states$.frame <- rep(seq_len(nframes), each = nrow(state)) .with_prior_frames(.data, states, nframes) } #' @rdname tween_state #' @export open_state <- function(.data, ease, nframes, enter) { to <- .get_first_frame(.data) if (.has_frames(.data)) nframes <- nframes + 1 tweendata <- tween_state(to[0, , drop = FALSE], to, ease, nframes, enter = enter) .with_later_frames(.data, tweendata, nframes) } #' @rdname tween_state #' @export close_state <- function(.data, ease, nframes, exit) { from <- .get_last_frame(.data) if (.has_frames(.data)) nframes <- nframes + 1 tweendata <- tween_state(from, from[0, , drop = FALSE], ease, nframes, exit = exit) .with_prior_frames(.data, tweendata, nframes) } #' Helpers for working with tweened data #' #' These are internal helpers for extracting and inserting data into a #' data.frame of tweened states. #' #' @param data,prior,later A data.frame. If a `.frame` column exists it will be interpreted #' as a data.frame containing multiple states #' #' @param new_tween The result of a tweening #' #' @return A data.frame #' @keywords internal #' @export #' .get_last_frame <- function(data) { nframes <- attr(data, 'nframes') data <- if (!is.null(nframes)) { data[data$.frame == nframes, names(data) != '.frame', drop = FALSE] } else if ('.frame' %in% names(data)) { data[data$.frame == max(data$.frame), names(data) != '.frame', drop = FALSE] } else { data } if (is.null(data$.id)) { data$.id <- seq_len(nrow(data)) } data } #' @rdname dot-get_last_frame #' @export .get_first_frame <- function(data) { data <- if ('.frame' %in% names(data)) { data[data$.frame == 1, names(data) != '.frame', drop = FALSE] } else { data } if (is.null(data$.id)) { data$.id <- seq_len(nrow(data)) } data } #' @rdname dot-get_last_frame #' @export .with_prior_frames <- function(prior, new_tween, nframes) { nframes_before <- attr(prior, 'nframes') if (is.null(nframes_before) && nrow(prior) > 0 && '.frame' %in% names(prior)) nframes_before <- max(prior$.frame) frames <- if (!is.null(nframes_before)) { prior <- prior[prior$.frame != nframes_before, , drop = FALSE] new_tween$.frame <- new_tween$.frame + nframes_before - 1 rbind(prior, new_tween) } else { nframes_before <- 1 new_tween } attr(frames, 'nframes') <- nframes + nframes_before - 1 attr(frames, 'max_id') <- find_max_id(prior, new_tween) frames } #' @rdname dot-get_last_frame #' @export .with_later_frames <- function(later, new_tween, nframes) { nframes_before <- attr(later, 'nframes') nframes_before <- if (is.null(nframes_before) && nrow(later) > 0 && '.frame' %in% names(later)) max(later$.frame) else 1 frames <- if ('.frame' %in% names(later)) { later <- later[later$.frame != 1, , drop = FALSE] later$.frame <- later$.frame + max(new_tween$.frame) rbind(new_tween, later) } else { new_tween } attr(frames, 'nframes') <- nframes + nframes_before - 1 attr(frames, 'max_id') <- find_max_id(later, new_tween) frames } find_max_id <- function(data, new) { max_new <- if (nrow(new) == 0) 0 else max(new$.id) max(max_new, .max_id(data)) } #' Get the highest id occuring in a dataset #' #' This is helper for `tween_state` related functions to get the currently #' highest `.id` in a frame collection #' #' @param data A data.frame as returned by `tween_state` #' #' @return An integer giving the currently highest id #' #' @keywords internal #' @export .max_id <- function(data) { max_id <- attr(data, 'max_id') if (is.null(max_id) && nrow(data) > 0 && !is.null(data$.id)) max_id <- max(data$.id) else max_id <- nrow(data) max_id } #' Fill in missing rows using enter and exit functions #' #' This function figures out which rows are missing in either state and applies #' the provided `enter` and `exit` functions to fill in the blanks and provide #' a 1-to-1 relation between the rows in `from` and `to`. #' #' @param from,to Data.frames to tween between #' #' @param id The name of the column that holds the matching id #' #' @param enter,exit functions to fill out missing rows in `from` and `to` #' respectively #' #' @return A list with the elements `from` and `to` holding the filled out #' versions of `from` and `to` #' #' @keywords internal #' @importFrom rlang eval_tidy %||% #' @export .complete_states <- function(from, to, id, enter, exit, max_id) { from_id <- eval_tidy(id, from) %||% seq_len(nrow(from)) to_id <- eval_tidy(id, to) %||% seq_len(nrow(to)) if (length(from_id) != nrow(from) || length(to_id) != nrow(to)) { stop('id must match the length of the data', call. = FALSE) } n_to <- nrow(to) if (anyDuplicated(from_id) || anyDuplicated(to_id) || !setequal(from_id, to_id)) { from_id <- paste(from_id, count_occourance(from_id), sep = '_') to_id <- paste(to_id, count_occourance(to_id), sep = '_') entering <- !to_id %in% from_id exiting <- !from_id %in% to_id exits <- from[entering, , drop = FALSE] if (is.null(enter) || sum(entering) == 0) { to <- to[!entering, , drop = FALSE] to_id <- to_id[!entering] enters <- to[0, , drop = FALSE] enter_id <- to_id[0] } else { stopifnot(is.function(enter)) enters <- enter(to[entering, , drop = FALSE]) enters$.phase <- 'enter' enter_id <- to_id[entering] } if (is.null(exit) || sum(exiting) == 0) { from <- from[!exiting, , drop = FALSE] from_id <- from_id[!exiting] exits <- from[0, , drop = FALSE] exit_id <- from_id[0] } else { stopifnot(is.function(exit)) exits <- exit(from[exiting, , drop = FALSE]) exits$.phase <- 'exit' exit_id <- from_id[exiting] } from <- rbind(from, enters) from_id <- c(from_id, enter_id) to <- rbind(to, exits) to_id <- c(to_id, exit_id) } from$.id[is.na(from$.id)] <- seq_len(sum(is.na(from$.id))) + max_id orig_to_id <- from$.id[match(to_id, from_id)][seq_len(n_to)] to <- to[match(from_id, to_id), , drop = FALSE] to$.id <- from$.id list(from = from, to = to, orig_to = orig_to_id) } #' @rdname dot-get_last_frame #' @export .has_frames <- function(data) { !is.null(attr(data, 'nframes')) || !is.null(data$.frame) } simple_state <- function(n, ease) { data.frame(state = c(0, 1), nframes = c(n - 1, 0), ease = c(ease, 'constant'), stringsAsFactors = FALSE) } count_occourance <- function(x) { if (length(x) == 0) return(integer(0)) unsplit(lapply(split(x, x), seq_along), x) } tweenr/R/interpolate_element.R0000644000176200001440000000520713352357676016166 0ustar liggesusersinterpolate_numeric_element <- function(data, group, frame, ease) { numeric_element_interpolator(data, group, frame, ease) } interpolate_logical_element <- function(data, group, frame, ease) { res <- numeric_element_interpolator(as.numeric(data), group, frame, ease) res[['data']] <- as.logical(round(res[['data']])) res } #' @importFrom grDevices col2rgb rgb #' @importFrom farver convert_colour interpolate_colour_element <- function(data, group, frame, ease) { col <- t(col2rgb(data, alpha = TRUE)) data <- convert_colour(col[,1:3, drop = FALSE], from = 'rgb', to = 'lab') int_col <- colour_element_interpolator(cbind(data, col[,4]), group, frame, ease) int_col_convert <- convert_colour(as.matrix(int_col[, c('data1', 'data2', 'data3')]), from = 'lab', to = 'rgb') int_col_convert[int_col_convert > 255] <- 255 int_col_convert[int_col_convert < 0] <- 0 int_col$data4[int_col$data4 < 0] <- 0 data.frame( data = rgb(int_col_convert[, 1], int_col_convert[, 2], int_col_convert[, 3], int_col$data4, maxColorValue = 255), group = int_col$group, frame = int_col$frame, stringsAsFactors = FALSE ) } interpolate_constant_element <- function(data, group, frame, ease) { constant_element_interpolator(data, group, frame, ease) } interpolate_character_element <- function(data, group, frame, ease) { interpolate_constant_element(data, group, frame, ease) } interpolate_date_element <- function(data, group, frame, ease) { data <- as.numeric(data) res <- interpolate_numeric_element(data, group, frame, ease) res[['data']] <- as.Date(res[['data']], origin = BASEDATE) res } interpolate_datetime_element <- function(data, group, frame, ease) { if (inherits(data, 'POSIXlt')) { warning("POSIXlt converted to POSIXct") } data <- as.numeric(data) res <- interpolate_numeric_element(data, group, frame, ease) res[['data']] <- as.POSIXct(res[['data']], origin = BASEDATETIME) res } interpolate_factor_element <- function(data, group, frame, ease) { all_levels <- levels(data) data <- as.character(data) res <- interpolate_character_element(data, group, frame, ease) res[['data']] <- factor(res[['data']], all_levels) res } interpolate_list_element <- function(data, group, frame, ease) { new_data <- list_element_interpolator(data, group, frame, ease) attributes(new_data$data) <- attributes(data) new_data } interpolate_numlist_element <- function(data, group, frame, ease) { new_data <- numlist_element_interpolator(data, group, frame, ease) attributes(new_data$data) <- attributes(data) new_data } get_phase_element <- function(data, group, frame, ease) { phase_element_interpolator(data, group, frame, ease) } tweenr/R/tween_elements.R0000644000176200001440000000664613352363024015135 0ustar liggesusers#' Create frames based on individual element states #' #' This function creates tweens for each observation individually, in cases #' where the data doesn't pass through collective states but consists of fully #' independent transitions. Each observation is identified by an id and each #' state must have a time associated with it. #' #' @param data A data.frame consisting at least of a column giving the #' observation id, a column giving timepoints for each state and a column giving #' the easing to apply when transitioning away from the state. #' #' @param time The name of the column holding timepoints #' #' @param group The name of the column holding the observation id #' #' @param ease The name of the column holding the easing function name #' #' @param timerange The range of time to span. If missing it will default to #' \code{range(data[[time]])} #' #' @param nframes The number of frames to generate. If missing it will default #' to `ceiling(diff(timerange) + 1)` (At least one frame for each #' individual timepoint) #' #' @return A data.frame with the same columns as `data` except for the #' group and ease columns, but replicated `nframes` times. Two additional #' columns called `.frame` and `.group` will be added giving the frame #' number and observation id for each row. #' #' @family data.frame tween #' #' @examples #' data <- data.frame( #' x = c(1, 2, 2, 1, 2, 2), #' y = c(1, 2, 2, 2, 1, 1), #' time = c(1, 4, 10, 4, 8, 10), #' group = c(1, 1, 1, 2, 2, 2), #' ease = rep('cubic-in-out', 6) #' ) #' #' data <- tween_elements(data, 'time', 'group', 'ease', nframes = 100) #' #' @export #' tween_elements <- function(data, time, group, ease, timerange, nframes) { if (!all(data[[ease]] %in% validEase)) { stop("All names given in the easing column must be valid easers") } if (missing(timerange) || is.null(timerange)) { timerange <- range(data[[time]]) } if (missing(nframes) || is.null(nframes)) { nframes <- ceiling(diff(timerange) + 1) } framelength <- diff(timerange) / nframes specialCols <- c(group, ease) data <- data[order(data[[group]], data[[time]]), ] group <- as.character(data[[group]]) frame <- round((data[[time]] - timerange[1]) / framelength) ease <- as.character(data[[ease]]) data <- data[, !names(data) %in% specialCols, drop = FALSE] colClasses <- col_classes(data) tweendata <- lapply(seq_along(data), function(i) { d <- data[[i]] switch( colClasses[i], numeric = interpolate_numeric_element(d, group, frame, ease), logical = interpolate_logical_element(d, group, frame, ease), factor = interpolate_factor_element(d, group, frame, ease), character = interpolate_character_element(d, group, frame, ease), colour = interpolate_colour_element(d, group, frame, ease), date = interpolate_date_element(d, group, frame, ease), datetime = interpolate_datetime_element(d, group, frame, ease), constant = interpolate_constant_element(d, group, frame, ease), numlist = interpolate_numlist_element(d, group, frame, ease), list = interpolate_list_element(d, group, frame, ease) ) }) tweenInfo <- tweendata[[1]][, c('group', 'frame')] tweendata <- as.data.frame(lapply(tweendata, `[[`, i = 'data')) names(tweendata) <- names(data) tweendata$.frame <- tweenInfo$frame tweendata$.group <- tweenInfo$group attr(tweendata, 'framelength') <- framelength tweendata[order(tweendata$.frame, tweendata$.group), ] } tweenr/R/tween.R0000644000176200001440000001126313352362660013235 0ustar liggesusers#' Create simple tweens #' #' This set of functions can be used to interpolate between single data types, #' i.e. data not part of data.frames but stored in vectors. All functions come #' in two flavours: the standard and a *_t version. The standard reads the data #' as a list of states, each tween matched element-wise from state to state. The #' *_t version uses the transposed representation where each element is a vector #' of states. The standard approach can be used when each tween has the same #' number of states and you want to control the number of point in each state #' transition. The latter is useful when each tween consists of different #' numbers of states and/or you want to specify the total number of points for #' each tween. #' #' @section Difference Between `tween_numeric` and `approx()`: #' `tween_numeric` (and `tween_numeric_t`) is superficially equivalent to #' [stats::approx()], but there are differences. #' [stats::approx()] will create evenly spaced points, at the expense #' of not including the actual points in the input, while the reverse is true #' for `tween_numeric`. Apart from that `tween_numeric` of course supports easing #' functions and is vectorized. #' #' @details #' `tween` and `tween_t` are wrappers around the other functions that tries to guess #' the type of input data and choose the appropriate tween function. Unless you #' have data that could be understood as a colour but is in fact a character #' vector it should be safe to use these wrappers. It is probably safer and more #' verbose to use the explicit functions within package code as they circumvent #' the type inference and checks whether the input data matches the tween #' function. #' #' `tween_numeric` will provide a linear interpolation between the points based on #' the sequence returned by the easing function. `tween_date` and `tween_datetime` #' converts to numeric, produces the tweening, and converts back again. #' `tween_colour` converts colours into Lab and does the interpolation there, #' converting back to sRGB after the tweening is done. `tween_constant` is a #' catchall that converts the input into character and interpolates by switching #' between states halfway through the transition. #' #' The meaning of the `n` and `ease` arguments differs somewhat #' between the standard and *_t versions of the functions. In the standard #' function `n` and `ease` refers to the length and easing function of #' each transition, being recycled if necessary to `length(data) - 1`. In #' the *_t functions `n` and `ease` refers to the total length of each #' tween and the easing function to be applied to all transition for each tween. #' The will both be recycled to `length(data)`. #' #' @param data A list of vectors or a single vector. In the standard functions #' each element in the list must be of equal length; for the *_t functions #' lengths can differ. If a single vector is used it will be eqivalent to using #' `as.list(data)` for the standard functions and `list(data)` for the #' *_t functions. #' #' @param n The number of elements per transition or tween. See details #' #' @param ease The easing function to use for each transition or tween. See #' details. Defaults to `'linear'` #' #' @return A list with an element for each tween. That means that the length of #' the return is equal to the length of the elements in `data` for the #' standard functions and equal to the length of `data` for the *_t #' functions. #' #' @examples #' tween_numeric(list(1:3, 10:8, c(20, 60, 30)), 10) #' #' tween_colour_t(list(colours()[1:4], colours()[1:2], colours()[25:100]), 100) #' #' @export #' tween <- function(data, n, ease = 'linear') { type <- guessType(data) switch( type, numeric = tween_numeric(data, n, ease), date = tween_date(data, n, ease), datetime = tween_datetime(data, n, ease), colour = tween_colour(data, n, ease), tween_constant_t(data, n, ease) ) } #' @rdname tween #' @export tween_t <- function(data, n, ease = 'linear') { type <- guessType(data) switch( type, numeric = tween_numeric_t(data, n, ease), date = tween_date_t(data, n, ease), datetime = tween_datetime_t(data, n, ease), colour = tween_colour_t(data, n, ease), tween_constant_t(data, n, ease) ) } #' @importFrom utils head guessType <- function(data) { data <- unlist(data) if (is.character(data)) { convert <- try(suppressWarnings(col2rgb(head(data, 100))), silent = TRUE) if (!inherits(convert, 'try-error')) { if (!anyNA(convert)) { return('colour') } } } if (inherits(data, 'Date')) { return('date') } if (inherits(data, 'POSIXt')) { return('datetime') } if (is.numeric(data)) { return('numeric') } 'unknown' } tweenr/R/tween_events.R0000644000176200001440000000615013352646216014622 0ustar liggesusers#' Transition in and out of events #' #' This tweening function is a more powerful version of [tween_appear()], with #' support for newer features such as enter/exits and tween phase #' identification. The tweener treats each row in the data as unique events in #' time, and creates frames with the correct events present at any given time. #' #' @param start,end The start (and potential end) of the event encoded in the #' row, as unquoted expressions. Will be evaluated in the context of `.data` so #' can refer to columns in it. If `end = NULL` the event will be without extend #' and only visible in a single frame, unless `enter` and/or `exit` is given. #' #' @inheritParams tween_components #' #' @return A data.frame with the same columns as `.data` along with `.id` giving #' the component id, `.phase` giving the state of each component in each frame, #' and `.frame` giving the frame membership of each row. #' #' @family data.frame tween #' #' @importFrom rlang enquo quo_is_missing eval_tidy #' @export #' #' @examples #' d <- data.frame( #' x = runif(20), #' y = runif(20), #' time = runif(20), #' duration = runif(20, max = 0.1) #' ) #' from_left <- function(x) { #' x$x <- -0.5 #' x #' } #' to_right <- function(x) { #' x$x <- 1.5 #' x #' } #' #' tween_events(d, 'cubic-in-out', 50, start = time, end = time + duration, #' enter = from_left, exit = to_right, enter_length = 0.1, #' exit_length = 0.05) #' tween_events <- function(.data, ease, nframes, start, end = NULL, range = NULL, enter = NULL, exit = NULL, enter_length = 0, exit_length = 0) { start <- enquo(start) if (quo_is_missing(start)) stop('start must be provided', call. = FALSE) start <- eval_tidy(start, .data) end <- enquo(end) end <- eval_tidy(end, .data) enter_length <- enquo(enter_length) enter_length <- eval_tidy(enter_length, .data) exit_length <- enquo(exit_length) exit_length <- eval_tidy(exit_length, .data) if (is.null(enter_length)) enter_length <- 0 if (is.null(exit_length)) exit_length <- 0 .data <- .complete_events(.data, start, end, enter, exit, enter_length, exit_length) .tween_individuals(.data, ease, nframes, range) } .complete_events <- function(data, start, end, enter, exit, enter_length, exit_length) { data$.id <- seq_len(nrow(data)) data$.phase <- rep("raw", nrow(data)) start <- rep(start, length.out = nrow(data)) if (is.null(end)) { event_end <- data[0, , drop = FALSE] end <- start[0] } else { event_end <- data end <- rep(end, length.out = nrow(data)) data$.phase <- 'static' } if (is.null(enter)) { enter_data <- data[0, , drop = FALSE] enter_time <- start[0] } else { enter_data <- enter(data) enter_data$.phase <- 'enter' enter_time <- start - enter_length } if (is.null(exit)) { exit_data <- data[0, , drop = FALSE] exit_time <- start[0] } else { exit_data <- exit(data) exit_data$.phase <- 'exit' exit_time <- (if (length(end) == 0) start else end) + exit_length } data <- rbind(enter_data, data, event_end, exit_data) time <- c(enter_time, start, end, exit_time) data$.time <- time data } tweenr/R/tweenr_package.R0000644000176200001440000000141413252500161015054 0ustar liggesusers#' @details #' tweenr is a small collection of functions to help you in creating #' intermediary representations of your data, i.e. interpolating states of data. #' As such it's a great match for packages such as animate and gganimate, since #' it can work directly with data.frames of data, but it also provide fast and #' efficient interpolaters for numeric, date, datetime and colour that are #' vectorized and thus more efficient to use than the build in interpolation #' functions (mainly [stats::approx()] and #' [grDevices::colorRamp()]). #' #' The main functions for data.frames are [tween_states()], #' [tween_elements()] and [tween_appear()], while the #' standard interpolaters can be found at [tween()] #' #' @useDynLib tweenr #' @importFrom Rcpp sourceCpp '_PACKAGE' tweenr/README.md0000644000176200001440000001106313352431660013041 0ustar liggesusers tweenr ======================================================= [![Travis-CI Build Status](https://travis-ci.org/thomasp85/tweenr.svg?branch=master)](https://travis-ci.org/thomasp85/tweenr) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/thomasp85/tweenr?branch=master&svg=true)](https://ci.appveyor.com/project/thomasp85/tweenr) [![CRAN\_Release\_Badge](http://www.r-pkg.org/badges/version-ago/tweenr)](https://CRAN.R-project.org/package=tweenr) [![CRAN\_Download\_Badge](http://cranlogs.r-pkg.org/badges/tweenr)](https://CRAN.R-project.org/package=tweenr) [![Coverage Status](https://img.shields.io/codecov/c/github/thomasp85/tweenr/master.svg)](https://codecov.io/github/thomasp85/tweenr?branch=master) What is this? ------------- `tweenr` is a package for interpolating data, mainly for animations. It provides a range of functions that take data of different forms and calculate intermediary values. It supports all atomic vector types along with `factor`, `Date`, `POSIXct`, characters representing colours, and `list`. `tweenr` is used extensibly by [`gganimate`](https://github.com/thomasp85/gganimate) to create smooth animations, but can also be used by itself to prepare data for animation in another framework. How do I get it? ---------------- `tweenr` is available on CRAN and can be installed with `install.packages('tweenr')`. In order to get the development version you can install it from github with `devtools` ``` r #install.packages('devtools') devtools::install_github('thomasp85/tweenr') ``` An example ---------- Following is an example of using the pipeable `tween_state()` function with our belowed iris data: ``` r library(tweenr) library(ggplot2) # Prepare the data with some extra columns iris$col <- c('firebrick', 'forestgreen', 'steelblue')[as.integer(iris$Species)] iris$size <- 4 iris$alpha <- 1 iris <- split(iris, iris$Species) # Here comes tweenr iris_tween <- iris$setosa %>% tween_state(iris$versicolor, ease = 'cubic-in-out', nframes = 30) %>% keep_state(10) %>% tween_state(iris$virginica, ease = 'elastic-out', nframes = 30) %>% keep_state(10) %>% tween_state(iris$setosa, ease = 'quadratic-in', nframes = 30) %>% keep_state(10) # Animate it to show the effect p_base <- ggplot() + geom_point(aes(x = Petal.Length, y = Petal.Width, alpha = alpha, colour = col, size = size)) + scale_colour_identity() + scale_alpha_identity() + scale_size_identity() + coord_cartesian(xlim = range(iris_tween$Petal.Length), ylim = range(iris_tween$Petal.Width)) iris_tween <- split(iris_tween, iris_tween$.frame) for (d in iris_tween) { p <- p_base %+% d plot(p) } ``` ![](man/figures/README-unnamed-chunk-3.gif) Other functions --------------- Besides the `tween_state()`/`keep_state()` combo showcased above, there are a slew of other functions meant for data in different formats **`tween_components`** takes a single data.frame, a vector of ids identifying recurrent elements, and a vector of timepoints for each row and interpolate each element between its specified time points. **`tween_events`** takes a single data.frame where each row encodes a single unique event, along with a start, and end time and expands the data across a given number of frames. **`tween_along`** takes a single data.frame along with an id and timepoint vector and calculate evenly spaced intermediary values with the possibility of keeping old values at each frame. **`tween_at`** takes two data.frames or vectors along with a numeric vector giving the interpolation point between the two data.frames to calculate. **`tween_fill`** fills missing values in a vector or data.frame by interpolating between previous and next non-missing elements Easing ------ In order to get smooth transitions you'd often want a non-linear interpolation. This can be achieved by using an easing function to translate the equidistant interpolation points into new ones. `tweenr` has support for a wide range of different easing functions, all of which can be previewed using `display_ease()` as here where the popular *cubic-in-out* is shown: ``` r tweenr::display_ease('cubic-in-out') ``` ![](man/figures/README-unnamed-chunk-4-1.png) Spatial interpolations ---------------------- The purpose of `tweenr` is to interpolate values independently. If paths and polygons needs to be transitioned the [`transformr`](https://github.com/thomasp85/transformr) package should be used as it expands tweenr into the spatial realm tweenr/MD50000644000176200001440000000604213404731263012073 0ustar liggesusers6e6fd070981b4da1e4ff6d549960fd66 *DESCRIPTION 928d886d4e8454f3db823a37d4de465f *LICENSE 1ce9ebcadbe312056258a8f41326b685 *NAMESPACE 313d3adca091ef0a5997a0bf74c05e61 *R/RcppExports.R 1bdc1df668054061a499fd86dbeef5ab *R/aaa.R 16501add0944b61f30d83e263b8e8d1d *R/display_ease.R 96179175a1b2714715bd51272b167f8b *R/interpolate_along.R 210b74ecfb81b7e59ad62d60411065fe *R/interpolate_at.R 0a8e1bd6c209027fa880190dcb0801d3 *R/interpolate_element.R cc10f6bda97ee4a5b9482fadfe58c7e0 *R/interpolate_fill.R fa58c8bac6ab8f305f19c81a75fc0730 *R/interpolate_state.R 689f558411e69e41e4e75f5369aeaf60 *R/tween.R ac339e3835e902f17f662884605697e6 *R/tween_along.R 2d43ff320e0f18cae6f4d62fce5d9c94 *R/tween_appear.R 641fea63107e6850430abe0e1de68b73 *R/tween_at.R a0fb7bf5931f79cdc9b3fe258a1b7af5 *R/tween_colour.R 9721b0743f541b5c29e1e03e150fd861 *R/tween_components.R e2bf81312be495522d36feace8ca4291 *R/tween_constant.R 81d553e0dabc78640045286414615d9c *R/tween_date.R c043ef5f53d196435d92b7502733ed98 *R/tween_datetime.R c3d9bd610ec0ebf6843938b52ba9a238 *R/tween_elements.R ead890774e462247a42cff161142c73d *R/tween_events.R 8d2d40175112d9250bbf643846105c5f *R/tween_fill.R 3fbebb9b93bfc70f98c8d4da699a7517 *R/tween_numeric.R 391009a63a320512bafdfc940d0aa50e *R/tween_state.R 812405ce92dfc8a9e81a5a823894cc10 *R/tween_states.R 96d0cc4763f6e260723404181527692d *R/tweenr_package.R 7c25a1760eb4d2c1eaad187a63f8792a *README.md a7d5791f172a3bec357efeb97420bb15 *man/display_ease.Rd 34366927919391bd1a708125f2175dd4 *man/dot-complete_states.Rd 4c6856bef70b38658bdb9adf438ddbf8 *man/dot-get_last_frame.Rd 822defaec9293e5bce6728c6bfcecddc *man/dot-max_id.Rd 690fc06d8dff1acdfe0bd31a3475408c *man/figures/README-unnamed-chunk-3.gif 2dadfaa78bd7bc38097a1be9fbd75780 *man/figures/README-unnamed-chunk-4-1.png a43cef038c756170afdfda6598b4886c *man/figures/logo.png 4bfb05de15f5ea7ad46e96577a2bedcc *man/reexports.Rd d8719148815e87dbba9859db35580d4c *man/tween.Rd bc68775c38b034cc4d24deae25a6ecac *man/tween_along.Rd f3ac36b46eda0ed8ebdb82a6f3856c2d *man/tween_appear.Rd 5ae8335a6fb227f5334ca7e2d863aa99 *man/tween_at.Rd bad8b26b955f205ab8f06dd0aaf6fb73 *man/tween_components.Rd 9a85615c0e8118222f300eeacc37bda0 *man/tween_elements.Rd ce4b2a862ea15359ed9b0ef3bc606e05 *man/tween_events.Rd 27b0ed281713d21cae636526fe08fb06 *man/tween_fill.Rd 45a6c662bde72d3ca31f6f128ce0c17f *man/tween_state.Rd a78da1ea3e528145730e1e63624b919a *man/tween_states.Rd 8655be1ce7f753485c94e2e4cdee6066 *man/tweenr-package.Rd ec84e616c2be105b238e96a615188688 *src/RcppExports.cpp bef46ca72aef6dffb9ae1fc728aef864 *src/easing.c 20db4b5dfde1a8274bafe699cb5b5cc4 *src/easing.h 6e674ad562cd298af44d1e801ea6b510 *src/interpolators.cpp aa895b44ba533f702387d9ec557e501a *tests/testthat.R 642f1ef1e7a912267fc9891a21216cc4 *tests/testthat/test-along.R ee87f10b41a70e3ca3ef3e90f5e1a505 *tests/testthat/test-at.R 925c0539a4fdf0c24b2344cd0cadb0ab *tests/testthat/test-components.R 7d3b896a697948cda844ebdc6f0188ef *tests/testthat/test-events.R 6159b10fcca398bb4731d00bfa6b6342 *tests/testthat/test-fill.R 8801c912dc4fa55e6074f6e0eee83f2d *tests/testthat/test-state.R tweenr/DESCRIPTION0000644000176200001440000000204513404731263013270 0ustar liggesusersPackage: tweenr Type: Package Title: Interpolate Data for Smooth Animations Version: 1.0.1 Date: 2018-12-14 Authors@R: c( person('Thomas Lin', 'Pedersen', , 'thomasp85@gmail.com', c('aut', 'cre')) ) Maintainer: Thomas Lin Pedersen Description: In order to create smooth animation between states of data, tweening is necessary. This package provides a range of functions for creating tweened data that can be used as basis for animation. Furthermore it adds a number of vectorized interpolaters for common R data types such as numeric, date and colour. URL: https://github.com/thomasp85/tweenr BugReports: https://github.com/thomasp85/tweenr/issues License: MIT + file LICENSE Encoding: UTF-8 LazyData: TRUE Depends: R (>= 3.2.0) Imports: Rcpp (>= 0.12.3), grDevices, farver, magrittr, rlang LinkingTo: Rcpp RoxygenNote: 6.1.1 Suggests: testthat, covr NeedsCompilation: yes Packaged: 2018-12-14 13:16:06 UTC; thomas Author: Thomas Lin Pedersen [aut, cre] Repository: CRAN Date/Publication: 2018-12-14 13:40:03 UTC tweenr/man/0000755000176200001440000000000013357451062012337 5ustar liggesuserstweenr/man/tween_states.Rd0000644000176200001440000000347113343231165015333 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/tween_states.R \name{tween_states} \alias{tween_states} \title{Tween a list of data.frames representing states} \usage{ tween_states(data, tweenlength, statelength, ease, nframes) } \arguments{ \item{data}{A list of data.frames. Each data.frame must contain the same number of rows, but only the first data.frame needs to contain all columns. Subsequent data.frames need only contain the columns that shows change.} \item{tweenlength}{The lengths of the transitions between each state.} \item{statelength}{The length of the pause at each state.} \item{ease}{The easing functions to use for the transitions. See details.} \item{nframes}{The number of frames to generate. The actual number of frames might end up being higher depending on the regularity of \code{tweenlength} and \code{statelength}.} } \value{ A data.frame with the same columns as the first data.frame in \code{data}, but replicated \code{nframes} times. An additional column called \code{.frame} will be added giving the frame number. } \description{ This function is intended to create smooth transitions between states of data. States are defined as full data.frames or data.frames containing only the columns with change. Each state can have a defined period of pause, the transition length between each states can be defined as well as the easing function. } \examples{ data1 <- data.frame( x = 1:20, y = 0, colour = 'forestgreen', stringsAsFactors = FALSE ) data2 <- data1 data2$x <- 20:1 data2$y <- 1 data <- tween_states(list(data1, data2), 3, 1, 'cubic-in-out', 100) } \seealso{ Other data.frame tween: \code{\link{tween_along}}, \code{\link{tween_appear}}, \code{\link{tween_components}}, \code{\link{tween_elements}}, \code{\link{tween_events}} } \concept{data.frame tween} tweenr/man/figures/0000755000176200001440000000000013357451545014011 5ustar liggesuserstweenr/man/figures/README-unnamed-chunk-3.gif0000644000176200001440000165136713352425546020350 0ustar liggesusersGIF89a1$Hl$$$H$l$$$$$H$HHHlHHHHHl$lHlllllll$Hlؐ$Hlش$Hl$HlU$UHUlUUUUU$U$$UH$Ul$U$U$U$U$UHU$HUHHUlHUHUHUHUHUlU$lUHlUllUlUlUlUlUU$UHUlUUUؐUUU$UHUlUUUشUUU$UHUlUUUUUU$UHUlUUUUU$Hl$$$H$l$$$$$H$HHHlHHHHHl$lHlllllll$Hlؐ$Hlشت$تHتlتتتتت$Hl$Hl$$$H$l$$$$$H$HHHlHHHHHl$lHlllllll$Hlؐ$Hlش$Hl$Hl! NETSCAPE2.0! , H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`7,ٳfӢ]-۷n+.ݻvݫ/߿~,0Æ#^1ǎ#Ciϖ_/glΙɂӛSFZi׬kMuظaz߹y #/` Z!j(!z"X )!/c38Kmى㏭HcEh䒠 IyޑQRie\ Md_斣%K6Yk_l 眎)tz矏fhnYq墄(]PJ(Z 馘by)f|+jnzꪪfg 묲J+]Q;$mfՑ˺{.|𬢗|#l7L=./m4[#X>O>>ۿ3_'@[yk`>=kA kL&ͥ3P.JĶA]\b vR5̡!zpQ HC{14HE(Zj[ࠂi1ˇ"3wA"f{])= htbI2#sY MPhFL;k k E< ϤM@W@氢'F/&QP)ir:Ӎ4D+OI^ -mԡ25R˥OuUjծR5UU Ѝv?z/GdjVU{gD(Ԑ,`UJ,$^+%Ӻ6Jj,LyXH, RʳMhGڔfq ,ܪYuajJѷ5 n[G*iZiE6θM.i[/ ̬Y);Y馓?nk+Q){`WU MW֤-ox;_ UbPBWJhK hj`p+ \"VJNIӅ-"s%_lE13HM k/.ngޝdd+bݼ;j07 C5ۼfR$ 腱6eq5bs+ev&:#bEe.w[ 5UyK8۹pvϜ<9~o h9eٵK0M/Vypo#YlJurA=jØNΙ{TfɄPZ ."]ץIDP^-'>rm2W 'l(xvZMaTn4<]6[Pjv7!]kvF |B[uƳgY泠pB'/hu#v4Ozqmi3uS81xjy{Wiqg|;gu s;-?I{cD6A{[l|RSm!>>/nJO\bl z^sםݱN v</T#p34|7|m__3y=H\w%a|} kvj}iýltO5އ6!Qn>O)J?w_B ޒnJRǯ/_V,/=f Dp.fxgNkEs'Acr9ݧ8>VM h؁mQ !(*l'&8$W2X0H7Xm/9؃@ȃ%}CAXpdݑmaXShGW{w{[{]{_H$cfmg|Wom3r8tXvNlhx~({lC(WahsգvxgJyw (7ȉxxBE[(Lwl4}6zV}r焨~C~|x\؋JG{5s}p#wG\{i.o(X~Nm[8}v}H%ku bc'~f{gHLjdأ㈩w4x8cTH(97q'Chz!YONWhCghX4yx6;Y0HtK,*CYt|8&XŔl&\0%Tpӓc̓У7tjxg ֐Gw) b Ixٗ)b&ᔒƍ葚V FTi}ID'iZ cfQ#`awGX9n?A ؘhP9fc)rXv YI:XFGz8h2s#Ȗ6E^4x|Iy9YzIٞd%בI9]&i(* /Y9+e7yYDǹZ~*Hy}ID9dIsP#1&^١6:cbH ڠG8"@}fiᩞɤ4٤RSڗI%[٘Xآ̳e [Y W7m磃~THBaښrz*JlutaJ"ڨRiwh:Fd1/!T PzO9=ɧ΅姧j8VpKZ6WꞴJꤺ:PIjjLFZjzr~HMt*v~;y%V"F֪׺wK٨]*`'aJw͊A1pˮێFyJѥ?ǰ1 *뫉j˫wʘSJzsК87-)ZXحk0 uA#:Z:E J+WJ0kAc2W:[,ڕjL[6=E0mnʶ[J v۫wy˱z#ٸ'+)+];;F}ʦfۦ۴;+ :攝9L+CZ RR5W*ۢo=a 4:'u4CR@&g FiyA 3 px{狥۷+p$ KQBBkw[Eܿ7̿  ,Lg|<\6 |k"\0-Ld$,5&TBIxF|Hs@2cM<$"*SThUL WyYX\L[LA^`Lg,i-Ͷh(ILlͻ ;?m,# ʹεJ,O2 t%ЫZ}/<1`3=.Mc  m X]mw}S}Q`E+'Zbֆ/0wzrSPvA=>8=5BٗڞpEG=uZ׳N I2m}ظ؈\_ [ݖvkۼqmsMwNwP-}ؔ;}՞⍳/Mb}*#aTuu9ڢ ڔ>@m3PqڢԐگ~ J#ߵ3G 4y _Mk3-Edd %+-u]Om}[ M^Qܝ`X^V=& RS*⑵%eYQ< {矵>N 3_33t K~(+ m ~23]n}bqiꍭĘ!ʍ8{:IX=n G}'03`@0HW_^ ;[@n^]]p~7 Aa2wnف>?}>.MI !t ˎ~8cz-p g[~( R e>=f-W+*Oj+1<06ߊ~ΊN׾d Y>a'+? ۳mgy iYZ*.aq3RO2?1EhZ.\`OcIO.{K^nw>տ7 j/֬?]lHY,H://;12@? <˞B[ 5dCUƉ1nG *$8ReH-WҤ̘/i޴^J:kS_| t΢G&}ԤQU^UB rE=R[HXw\u֥^}Kn` 6bōXɕ)_f͝9ܹmM $BfhQ[^ZbӞ}#쬹{fIPᮅGq㶝ܹT5eo&[ٽ|͏?>tyտw|/]/6.x@,:@W[鮳.') %t0Np+3(5 EVE{1QFkFs< zL) "DHd2&z(I(J-̒-/єD%$SL3۴r4\s:߼M=̓9?T3=DP>ROH!k*/K4ӹ6BNKESS)MTU[eUY]5Z/YmU[9X_%ua6b]Umg6ZjsMQm'O+pg\rv\]oMwm7^z7yw_5Zw\~~68a fWa n8ba+vCދ=~b8;[Z99eQ<sg=kƙfsygY; z cB}i/l:åjG-k)NTN|oSSgݖ<ꆙ-o0}4"[c\IqCxq9v\d!KKʼs?o/'-tMrY_=yQ]vauI1-Z+o㇏yg~yS.MZWc[j''&ۦOÇ?gv" 5Xh-Vˀq@f1Y* @ Vpl xAf`A8Bii$w)0v}@يgڰ~:a*D2maElw(5mCI=0Mm{z<."p_b<" G\x4mOE\7.}uG>$vȾehX1*>td$9II 0AH)5$ـ8HQ4hJ&Ate!d ȀK\Zdf Iɂ34&1Lez58K HA #Qeʆq&)&TS&9 uSkg~8-*<D!E+ g=)PA j€*ԡ hB#ZЉ2T~Z_ H(DI%u6G#KU sjM4Fջv%Xd&c̠G-jRI)" Zب=26ʡi휩JȱnTNMR3((./B01>< ACiZ5;;CDASBu+E5ł27*ǂH]1!8aȇ:HHH7ȌɏɎI4ɐ$ɔ<ɒDɕTɖIɗIɘɜɚɝɞJ,I/iBmIMkdʦtʧʨʩʪ[Hí;{ʰʱ˲$˳;C˵4˶d˷LK˹t˺K˼˽Ki6LK4d':,L켙H`D3̃JeA% F M+P*q:">XoMMٔFp'hpMd:34bèSìKNJENͻô|E LL \GC\%MeQMJuLQNJ%= -7ΩPS8%;:T)]DC>W-mcuV+OXK+Ԁ-NXOԅe(R}j`LRSА\# V %a{{=UD~^!]{+H孅RhR` b"_}^[0` (^Œ }IO`ݢ9 N`6^*p]-%Y"cn[("`A.2@e|e΍a]qtE[PKw66f%UuXP=eQ&eU9-;J1ՈSb"( )eO^C`$>0a6Z\95h.P!v;f%V% \f5f&dvfG~CxfIJO`i!ll`fE2WFX^%o}%e)>6& 0o,-69Nu1n2jΑW~n6,6ceb6>vo6`=7nw_~gT}*6fWxCQn[eTk__D&WpN)R^kᅦe1iR`оdVNe]ViQD`{hN.pN&&hfRYy=Y~~}&`Saz\RGVjga'$0M^aF9h,"[p]gex}k`ֿ6i^$l o@騵ཹ.pi6gʸ` Kcn#[0m(d&aRemyjݚdi)cR qqJqjh("s_GZqM gq //)!'%7r&G'?q'? !(o+*r,O,-Wr,2R!n66&SQyЌVj%9vy^ SݕiifUlpYot(jgt0:]Y#6VK=c(IdQKUE#UDAĀ'GM4@ONٓS$U(:W+J*[E,fzвJ;lY"Уf]oU@hL Kf .i! ٓ?zCMC 0?g\ 0 ;0K\ 6O%xS:*FNA4EAD!5 %11=PZ{_b& ME#=t;tF3tfq'KjVL[找 ;' T1vTQ }k|=8^8+~cXWluUuOOt'g禘KRIUk;b9xN3A/\C=wQPrAd#!DQӉ?t:s:0+W<$'G"J&t&*yRRB"'\ʲВVoi%\V/u &2-h]E|oJS1ڵE\/22Մy|; eŎd=_K -LfW_fH+Q̮%o׻]:Dv\h |%(GJiV&eU'9SG͝,CVYok$ݡ<7iޠc|Z.E ZL#7YVH7_1e}So}LF΂4]_Ľ),a3?>'L[;ډ(7J 8{(ӣ}H|]?4JWKy+|aK[hٶ c$/<]ibxBAhU hLi8@Dl(`ّq `j%UXQLLԬ@ZZl  ܭը=Ā`W`_ yu^1)!9iEL Sn eKqQQ~9iHŞ b! !l BFq%Ǽqxpz\ULJJD,+XY FRw'vZ&ZLU]t=A] aZHt}^Jc26#3R$̮܃OA10s8Y O6.@)؂$HNLG&2^bY(j?"ZD!@N)J?$d!lb+X5'TkXA+fP+dH+tBPNAd4At+/mX_OOdQP%QQ2%MUYd'\ZX?1 q+xTVzAKr%\dE>5 WU?.!db]^T>&O_%.i 1$䤶Q1)0}QD,t -pBV)2:3i&j݄b &xd`_2@:UH't*1H5لc^/֝YNTdPj&j}:#Wi[B9tZ=*[iC,WUbSagxhteL EEee^r8noB&.`c|yWš~.}~&)F=|z$׃20>qBч*F1FvV'I)^^犖隖6 w9e-lI,z)(F=Y **&e65RF*>*RZk6KxADLͰ-.݂s9()ԃ.\[ri鈈(t *`j\1 &vT0FdQچK,jF7E ~*kUZk qIp=jɥ=tnBWƔUϨ꣯ɪ*高+(i+zK4eYQ9i+3b+nŦSnӮpAd d7#6J:k, T;*_jvbbΘ)AxApepX#DZԤB1AT)V^bf&"=)ŋ_f̾,>ҭ\ݎRإJ*jaRU*&B2*f.n.q\V;aEɲ.ŘImN%B\e",%gA,đ*.B\. "2on6/Zb/Fo>ojocЉoV/~HeIl|Kf---L.a$ j>frz?Z\+m-@V0)'MBgF"Ǟ yF. ҰJ߿ZK.0p qLmB$$W_1go1w??`)Bxb51?qblq&1)q[g߆bG0Rwk#0_T+į=lfA0 0 "c+W.,F-2+emH"U2n'Ŗ3,$$?<)Fd(or~27{s8=hjf3Y3:;E<:;3<<3=s=3Ī?t>3?sA>4C+t?'4D/C#DGt?CWFg4GStGϳG{L4HAtC[tH-'JItJoJ˴:LLtN/%05RoR7ّB8T?=$QO5V?SpVw3WuBYc-YX5[,5\v5^FU_u^ϵu_3`u)6]a'b/6c7c?6dGdO6eWe_5f#`o6Rg6&,1i0P kc1l6mvKAHn{&oo(+ wۃo#7qK@n;)q"Kkuco&2ss5y?5Awwu0wъ|)3j7 ~#-7}w8%A0s~#8Wpc0_OOL 7?[uoxv{L o/(x0'hx#?isRx縎8899'bG7?9Gy^3W_9g?9j7"qC[@֘o9yc'AHHAv48a`xf?๚u\vHٟ/Sy4/Wu7)@ѰV3q0#M a o:2)uyl_:z'@$QKtF+ KQCuY:a<:aTu@@ 0wB;9Fi;:{:qjoB0 M@Md:Ys:繪F CzAMloù`X?<] ?(`0{G6"=8-pzKSG<ƭF+:wGO/{~꫾ yүbgzy3{Y D;'uwFSGgi:O?go?w????`! ,0Pp`H*`K= %ŋ3joǏ RT8@I!S\ɲˍ' P_"OH Q,,D`R[KJ}I@ X6$ _nJb׃ʪ=86) Yt]$Zw.^[ Ŏ}1B"p-PD`]kd `P̉98{ /jAˎJ3c @@Wy&+Y N ԗL[Rq'aK#!a~y!PBmUHdφ.gg\vQyv"zdcECbl1UQAP&WD@]]Z&H\PXEE_dUq jQA@@UD)Te-;^]AfKQ)gMFhUr_\q@t AU)X\ǟB"%BJU_e)UE X헦ETT7*I MҙXq@CXYߝ7Y$YUC\D ŴgDU$bOKS%'$-AMU6q'FEd? t U;)6HnNTiaHKyx*n D Ir+׹2~ܺ,=>yj{|[Մ=,ބ_隨JޭrX@噟mTRO۶/^'uFW=qEft4v ' $iW'bx,mn2#ƨP%Zz=4niB,i <~:(obV WQ2*Jn rIEFZYB0b p~zmlLštU#܌RNJ$mR*R1wzkwAH8De4cFx#b^ gԋ?p REx)wvd9 >,(:IK-4Q+XEHB>r!BbN n jzGhV3,zaBJ$=eRN +hMVD3q_"(8T<Ü! +1r*&ZZDrǃ"OM#R6fټKMnCQ s" S{W-]bY)$V@%"b!:ዚrh*b&-[AG KI%p!]Ă9fE 1i%4![ OȖs)nwwCƘ0ቐ'BҦU2J0kVDX1Ur"D3mQ{EeݡуLl[5۬ #&fDRtkl-gECT!$ ! ,0Pp`Hu_n==cx˞ C)ɓ(SСA |Hs͛8Oɳ™%ZYyɴ'D& PçMބHT"U1SYLdpJ00E"PX֭߃r5*PS7x^܁|2MEȀe̠Aҵ+0@poT_KZm m{  /q)dRt-".ܟϛdaw>1͍qa{QߡЊ2X^ACGY+IQd`O+ 6!SXaTr 1R(=S%Dr-@1 D@MHR՘RnݳoȑbYr?;-iu =5ד=sO5`b4` RVufXc7 tU=K X|,uX`IX(NQ]dh"fPI٥@`HGV6~s'gD4@GX=d,S0hR $H KTɧM!݆6TnA"5f aVWZUbj]gD] C\:-AQF=J#BYJ|6[CZ<eOdVfD@ף_0qANlZ@C0I!!x6@&пf.iiuO'5 #fWSaC:i %3jpD1Uxȱ\ l:n@"["Aga3@MGt?3sTw-YB]peWjQ;2,#IOsJ慝 ^434A`ߒ%Ys=Eds:bsx:קd eR8SA u '(&j.U` 좔w<"b] +xo0EN8$[!f(UYl"B- [@@V{UPeщ)ҍ@Lt cAҧ&J[6I Z>%.0sZА¥ueARHQE1JB)rdM(-$}] b$ k th[PV&,ʡb'D)H`؄=K]&0Bz_A&@2&R'@;E.:y"QDv1,)#BS#CE $pKK JDk@J;D`i[Ԩfe#5P;4- k"+22vA 2B4ҒMBɧI}Ec9fijKf3r0$*窞@6%)"ړMf@ujF'!3!MȨ^JMM2; 2op CA|"i8 M]gԤ^<UZD@0C"2U /X Q^ +4, 3Zbq1AT.%V Uz"ܼңwdejQ& pYZpNQӣ^H,y` ^"[(`' :CuL6\-j"qGm#Fy!ݶ$: 6NE#e朊8)[DKdB"mdgw|(w:!0=vy ˉbT-Si/ɨDs>9h"m/'W;k"ߎ Sŋ I%#ֺ38"aJJR(-7tY2xim8R.L317)mw:Qh"1hKjhE]1

jfVtYɌ (ORG$EFԖ:rh"U4dMur&e{ޔMVo1uOzDLRu 'nDhmkUmXDt?T>a0HڹD3chaK& ډ;:I2wӴNB]B0|nYw@4䍻Ro`&9ܞJYPS9FQMTY.S'e0d@hF]f,aTe+SLS"yL}8?%w!;XC.&ЅrqA5Ddia=*o~5YyPn}%EtZ&ut{ Ĝ1JfVNT9'N?=yG; T?Iq4^{ D"%=f,l5M@v:MM63VPDvM`ILN*x }2<:t8jc< ]yT'6 $㑖 MNwH q #B${9%@RxH5\aK{";#U\_rdpqTb rȔ8,i*ĠXB_*Mf0sA r!r9⍦9 EdGO ؃q5V:nR7~BQtF0ݡ0RL GJJI7Cr!u-3gAUGh+#B(}f iPJ SW2Whʘ +:~=±Q%Dg6ZAZn0h&P[~ZV&D4#B6484yq(GF#A8L $9@SDG\QTɪ>L3m=+OL)Xʥ`姣Nf$ „w4*} $-'~X3\_؉PdeA,Ӏ s0&lM[ldB"F/xł#?Bk+h_^Y#A&*4UYbb| wNRM>zK^GQ 2VDUMd$Qh |?CӁ&kT-'TE 7!Cq~@a&UURF44j$YNȳj6H\3ESjEgtH(Wdgg\QeB4Zcy)m5$9 L!2dY!|~R@yGc.s@y RxKekD@yaU 2"  Q'uAU0-,h@S@T*7"A)Ss0G\*J5}/ AG--9B") XV,EPJhFaG" bN"E֓yj{"2jEghXZWu<_T@>;Uhd VxL i,~E=X&SY!Ut! ,0Pp`H*,h /  p࿅3jȱǏ CHaC_ݺ7q-{XI@´ɳB8tɜ>*5+*TLjՑ +6D(Ф;[y X]ŵx5 L0iPe˸Ux)Ck5hD{/,6^:ZݘΣ&X,w@i\6XYգ96Sn2Ν} BbgwKఅL :t+hޏ7x_i`wTG'׎+UQ'AC$A(-`GuCP1 ЕN =ݳPA@XDFEȓv=tZ\`5D>&9ޅ ]aAhaQ ` D+%b:bĵA @ɤc iCDJqU\DpqOCnfOAdAN4Иd[=b$eF,ҏD-V+@YPPf2'-tDAZHDSAM0W5,EIJ_.J+AT4,J %|BJʹ0 +?*yEg$Cb^ @Fǟ+2IXa;_ քrW{JF)>GmY6UQk.õ\ea7ټ\N9f(B\1yFsJi(gbk^M2, X@V<fS)dMС D]l淎&d2WW)^6|m_ZRЫ<5 $f p) K 0+=K2KI~*p$ڴ2Swe1e_Eq f)?B?8Kf \apY*J![A,<m7'AY)-'7lc-0%d;dh Cc%!nsE;1S[q-.%QV2H@Jm]ޘI1G9f$~OqOM'ƱP+D(4ȈQ0A?!&GzWa] L|O/C;zhU7Ob+ ʒAzM ED>rOƓ|w%^?ia (b _a w,1p&LѲOa1%LS'(x /"yidPIԒ"mˢāYf-(nxpI'b<DdD4ד㑖 )y,^k%n9SqVв"T"X"e'eC}#xqDPe\;fIL)fgUntOԑ6l-ʘ7`JOeC&ߏa@Xfah*Ӛ٘CYjFPmizTJUB^{(Ӱ1Ts2NacuqeWT?tPƕFS Z@PZ\Épnؐ? \y1"D,PʂdO66$X.dϐRe5` lf|\)T+PJQHtRAxҐ@fTQf2W!p1kb~ubBCWqĿ&xKb%J\Y] TKG]zA TRC ƕLPDM>rl1Wӕ]ր,^5]z`um-ihrUlWL`l1`ru9WV D~[BCZA.Y0QٙQ"5N[/a+/;@»n  y<-%C#}хti M{Id%?8-CAbIq5+@,ά>GP{}X40#:2t TN- @ ]u4!XIƄ , ?-JAePA<])p@{qj_6d;AјZJ*t k iL_^8$2xϹ-^&XIP\z3/ D^xf&:wbGSͫP.[`$d (jAg7 0m}PbV _ P?& jIH7k2@H9 q7S9MN?('fDOUј5x"J_Ĩ7^Hm$zPȇR4ND `W=.z#hTB SP H`EaSZH cc!ٙ N U'x֬J :1Z*!'R6Nd"?^q֓6E 9DCm6e|X4Cl\L!'Ґ.4L\e'$ $a?1ɡo{r䉉worN4&.hu[V̓XP|cUC 2aB>Kەl\ JUT^ i+Cs>Ww ar2uc3wfmXE~;m8HG<}_%BZ& Xk#6Or&3,Y ;h ʑ 㩓zGx3ok'P 56$%77]Jw&&+)rṷ q>AdShn&bf&@wazwr`d t`Q \0\P sS P} XQtU"D`5Fbt PDZ I"%76iC 1(&d3!vc%[Q ^@M5Q%vE*nchV=cV,R7>vqV*\'J&3O`ʂ 0AQ1mXt%0"lT j5Fb#p12M1< XY=[FT72ZM1!3)7RrG2'dvNY=#{&I#(W-&\$@I$UpY1F)|&7'"ڕY7#6GKJ&wm2)Tar"M 5XsNJAEsZċD1A787wFHS`3EI#QOg}f'h0ry8L葙q{A$;4;Wd u'@Q'+d/ Oq!!DQ%/1!]IEp/27nXO&8Yg}S $Q Ux {ۮMݑKv` 6Ew -le+}u͌CSlH @Ӱm41c.k߽V_n{9pC{ v `zy&?v\n3N19 " thSZ-{ A~2 'qSP@RjU-p)%wxd;Q$PmFPCTP\c@9U&RUvTderTQ([B~DbB%AS['@W/2eMxcluՇN^7dps hX@)9\DMSE.$@"f-eYW ,aISҢEMJI L EtXsѠ{J2*jKf:@~$G6I?c^A 'jX[ycWDY~TSI x![iy);P.hXM//+;D/0|xITUD4|dVUJ-jA)jgvECQ>iIav{-xSϙlFJ'vaJAEUx-Ja;XxAӌ2}]ݷBD+LASVSTr--Q{дE2[zjaŅZ`5bHn-]GknfRڪey]_-7 ף]ɉ,%a!f5U[`WUhHEQ I={rhSpaU(Kvb:]r0 ճ:ʘ$ҟ)j!yr%)ˊr @PRj2ɬՋ U:5@ 6W)Ŝ @M%8չ6A\X,ɕ\`p8?$KRژT:6'\da}%sB s) 6SAj&U ٓW+=k1:aC&8&hYJ1ۘ$&h clh:~ufZZ#EVȟ f=ܱD):"[ BRK5&$B~*ϸ0O4NU\T4NfȀEk%[֩, r L[FņE >, 'E=. | 'Ahd L[ T#$I(Ӝ|or#-@B٤pzY5)*p!,]AE\hTf`mu)R;*In~)ܮ))Bz]ӋzC&wJ$kk@G4. t 5TF/}ݼD%m t <PM.y% pӛ\9ʽ.K9]//B\Ψ>)"6OKFXP;Z% c ܧ; ؼjT"T-W_ˀ-a}Jkj^{b7djBʶU: _xCIvl!j+xnSV+},eVKQv5Fv 4R6RnvᎋyXuӮ q&l!)OlVLNސȥ o\d@^Q4 g-Jo5ߦRdu\h/#u&s}Q%<e!W\|Ut gF9O>ѼշZ"Wʨ }ʬt QSM 1G7.Ib"΢)|HRIFcz.Z!uf(\<%"6`{hx&h1fV?Bi`qt|Atވ`-5.mDx?Q(RR\Co]g8'*nKǡ]O#8qCZQa Q%2*58.iBNOْM*`'M~ zDKhL@}'Myd9L5e0Nn-fO_dCm}@,H|qS'b4("*#f3@YO[x W"~&}u/$0.0*L{QsHf8iR6}x|#rpń/7#*jeNIrҙI9Qb!Zh=iy((P?ՉPX7!(9ɍ$)W.y0չ$r:9 .dݐxln_M>H4b]MndKԝMw[sqw[XGق&1bRsUTvorUTbEVZ=t=IDCGWw#bW]EI[J]FefH"DC-k>yɥ]u 'zsdQ"YO4@e5Ege]4p=_K*\koMXVLzMy+0 Lei DaxDP]DU:QA@9ړp28ޘ\S~YCEh6YgJoE{+D]gЋqnt Y^jM0C#xtO+NTAZJ\l EWU܂ݹVIPVUamxc @ xrq?{Ux|C"u]VX`ujKp1@ne ApTJ) qx+L&EWa]sG 7z TA=Ɔm)솗w-dUtX/jCSQQZmwMXP@x.i^Y'Ee.-/})EՃreb`ܓ.zW/>[sk*_Ǖg\A_m齎B^qݍJ"e<}OuԓpKIt9&o*H-g0WZq[W(&5'a`7̨0 Z 8*TMPdBbH-eRMfZG Tp˚ ŅyIYzKu St U^.9-Pg C{}UbJ(da>dIp[&U*`T2p xvȄ2P4%ׁߴ@TTz7IzJ 02HP=@8>hP]|ɋU=Iye{?5ՓR)UW)@RhntRs]p."\Pb-/.; .U16eN37LG@#W,֨$UyIQ S#X0CہWUɖ#OwYR,at[UeK>JH ;q |j(X0e+N$$B2K _.J6dJ$#FjDz)em^R{7C K13i`4A8ɋ'c=7ftfdeqN65"4`RYCM%СF R&ł]O1aaO0i,GBS~|eY r9W.~&LX%qٷ~h#&d|vM1U#p0gfrw%Ϣ+xcO!\1U*j\x u4)P4qXw 'zaSc \ gg=OȏqTZBy"p$"!U5.`s|$Yu8=uR Ȓ[(by!\E,h/9H(% 9:9r?IH~W =iAm/)bY{[YI$`) W+E)1/niWjyٗ$'y甄Ii! ,@Pp`H'_nݻqEڃQǏ C[,0+GʜI{}ٳeL6hu8П@֜J`L{v dP 0i尪ٳ"m[o`5lTp=o΃R )z`˲<"ĤYBnX 8T5R^mu`a](0huW&^d{ҵ dA'%ڛnn} 6cKLF欓)ꝁNЫۋ&UG·\y nW I\"dWYj$PV< gs7AfOvgE `eVVJ0QUBdٲOva^'eoe-x=<]qOeA @x}۩ۖ6KVЍZ9P)P?AR٘s5ɔi:¦:E 'Fl CJSfT{PR[08TP \p=nrʉnR[%HHEt"Wx >CrrT ByY CZb^/\ f,_]P7"dLA YQE3&dcAJ ?Q<1{d Q*Ggq'BgG)lV-gJl6Xі{PUrPM]*Q~R Vrv3d;s,@Sv!*P8Ugs&5:q+Wtσ.AΖCO!ǀ!1w]X$ذ&?S}gQbIȠvbZTЖ"L: czeOJvr*WS80Oͻ- A ͜t^dj-@^duM35(>hÑWt_7skD`o';>B4!oH /3vlEI,[ DsҸS`R A< z ʖx- Q D^ &]VFU6BQژ}ZL7.KW0JQ9*Nh@O!ZIt+_HoESȈ MSj7.1j+0QE:ܧpj3nP?z4\ٺC:gSYL8_%=X8_ n"֕ (!Yi׻;֖B9"3/f=9yK uӡn=Yʓj8j~}q}js~Rw3Vu;ޑ}=;zRE1|q20TyJ6DS[AεKHYGW7^ .i?o_( EM6@'su%:}9 JEM!dT>ژ %G&AKMźYdyux'sgzPRϻ`2ytYK)N|ơ* i]}KRRd?zYsZX6G˨n #ndž96Mll? &~ƅNmHd{P_ĔE {>! +C(:rtݮ,V_IZS&Y-cI( C?fWɞi|`B*PID@4pϮlN ^zQH\JZGi %hE$Dž*[Zx ž/TG /cqA14VҎ4Br dfq n)zДR'FXnc]jaZ,UZKVF;-$M iaxdlj=otI%aS\-UJP-|mt^>B]$=D'!q62Q2HmHkbC.ԳxnEzΦE}.}k6}6U`{4r!1YA9OGYH&7:fepsN2QbC҄NVQ7XpE\ THl^AДRɚCwWCjnzȤ JlpmNFjZmw[P0 Q %G*H)CUCÅuIe݉)ڲ޼380e*i?TZ>ucq%&zJQ~$n">kJ"&$\*Vkrw;2 6; D#fm*L%"0+X7"icj&,`R|K/|S$MbLv>I= 5N":CulGflU]'D\67H># *f1?P1t@aJP+oEUw}+1q|t"BppTep^ZCq,i u4pn+y@/O}7ŊFH83N4On`wjsFVQ5SCe[:+=!e!hu \,i#oHy9! ,`@``Hm{Bh"ŋ3jo#G C4aF' D9˗0c<Ȑ%v9ϟ@T9hУH4 @@{Ȕ`GX7VԦ~YӢ/6\5kGնUi{\)u /{p+.S,02eTW0`yw}y?{\)uL4Fj)p΀Ag pol<L ΤA)( cXx̩З=)g8 T&3QjW`DQ%8uD [k-sb+Js6S -GfyF@^C"fz%Lf?U!ߑ-V&Tp'\f9 o3aވU֥jxܣ? ',Wpe8&ti`P-eךv-aFXV 'ZMڢyO?%UT@pLqJVweby1fgNi\VYg T,6]ENy hfhz C '5+aʀc+*.2P))RTW\pIv!aP.AEcHd+P2:k- mԠ@޶}TjpL=f*ĜQHA~5zdC}klI6r wg(dLjp"&:APaи,'\KW1=dPXy3A\7/Zb! -ДGÉwqEYNfF 5@GJ j 3.֊WզP^{bu1Efo7@P=ÑZ둯٬Ѿ@Ik#V^E\-%]hf^R i>;v\K^o{ҮTfG5LB)7KI](s/LTM\DER#Cr+&@s@*@yKry >,>@2Q4GfBvThCvh]c+.D*BW sVDoɛhѡM,R٫ Z;tM?,#[ X4~~[$\E4!\$<401yG+h%4sI:bBu[~yb}d']jY#h'!TN5'byaa(vUuփe+B,eЄ؟"Շɧ-d"x)5k1A,{gS,Glrͼv#hծqb2`s-ūEcg+ $rTb\4'B&lJہ4F*sBJmcTκVD~#)8n`=D\aikzC;`.9~W}G8l:S }q{As bqrwG[Wc#g,x1#t~Q`.n6wZ+r6rFX~#1X0 8}WD4D,2qq%Sh՗VuRr3D!AYx:XTi=h1qSwagZ҅`_H"L7X3!Xg! ,`@o_Ho5=8B.jȱǍWǓ Qd%{XIM L'URěM,e|ǡ4RNu-x"*XE-|V i[\1 5n((AvQs]Ml!q7'@|4RyґjH"ifD15K ƭ䚒A(ɽ lc(3|?l}|}w-|p`{d: UʂՃ_%3@*U0%$2ÒL}kIӼK.ST,IiEZSW*.!V6upWㄊtKW..t:$f2h v 4eN4QǦ&c/>LU% d52d ʰ p A|cY gqa ۅvѼEOဧ0 i{Yes1/0 01(jiPkH_s2(?MӵEQҖз}bN[hs{E' i"L5g\|R]Xz=H%Vp`e)U?2GB*"ONUJ4&Y'IͶ0]te^d={${Jy_`٨恕M UU?keRЁX(r^A]f&D f:X PQR8?(ՎLJ*_s7d⃜J&Pd)JA^Rr3*sSQ)XKGq(Z$tvQ-P9AD?Qry8EmiJNj.[Yj,&A{e*!I҂.IUYq? :D8秒i/ƄvDᄓ㴁dpS2L֯#ru/L (-^q}ӌkIMk1T`r`R%mwsn|}?4aG7%$XrwMWuB ؀b8P}a! ,p@`PH [~ e!Cep{R$H{D7#G'V\ɒ I Ɣ(Ȗ,m4L(T=_G-3/NDI5AFז; 8_ LgApkFdО§*%YT̙eu ֫B4[xƐ"<aT.B .n0btՅ .mFD;T/߁Qx=2S(,."l7p[vߡ 6'Kn:Ow]d"10㝃)Vt[?lMлw06qfI=tf[1X_IvԆ xaو!vF)LqZhsvvmw?w (`v [aq5n xSwae Q-=vKngy6&hti\XZa!֣vݳ_`qNQ@,䢾q8)]5]\ޒn]Nw+S %H @v[SVdoe)tg݈H#^@Q↘#21RڜgbmfounMz$Ʋ!tYRs,fƕnl-ja~-f$JP|Sdi$0'OAfOFnw1ǜ /@ T\uOuuN[k咸q(1 ?r\M3PEf9|8A`R\D!$ F'K=c1nWO @>@ U2؄!ij`dX@x _B# 6d)A 6:!orؼ3Vsfk*VcBdZڣ쇠2}K_'ED Bejc_PLfrQlT3;5-E12G/> $;XEC.m[wZqUTl I~-jW&W *`'6BuΚ!@Z?sc|I{t!jUV2Ҋd;qjLIW^3n:;wM=njwPjJ&>SK6dW}geW]i`QoG[-y)L@a(PV8Mra jTI#V2d`P%Ӄ<CY<Ӿmu%fYNM mx5f.gmr} 1 ,5IEQ!+|}hvPJ&Z.5kcCzr /RAn!z(mnt(̚(zWq))lf5Z6>C D鼔SCAU-J1hؒ8OA3_c>+u*Yv `a5$Q]h4*]rPqB.Dәw/A<Պ{jPBvGZ3E`shd>SQ}ퟒu}/RX'_R썸-?>* Sg 褶 zكס'%i *_vK{^ȊLOLvbՑCYEd\ЖQ+gWZ$Mf9!>Va2;5KˢŜxeILZieO?k']oaag8㐭OVdߑ>'FxET罅~qוt+hȾ=:q_ DJl,$ gΖX`qV|O i僈 5Dg(ږG8 5K?c*zc h~w\e b?LZ)Ӿc;/JaeWGjwɹ(E=S/jޣ{T%ߎ<3ӓ8{=wIztEIswː zII.1yb_e0=+Rs/!>b|J]yٟzG(x*xQc&%\a~!!Wg6q|(! ,0o`H{ =d( 3jȱc_% )P$LT鱥K-E4eԉN:_ JFQ]ʴQ6ҋX ^ʵeϊ@H`Nhʶ۷/ˆEhџQ.\[%\(3Wɭ=tDWmJ|C[ 4d*3e˔\ZӇP2A6R(˥x@S뺥C\lS0{6R+'j -Gg*mko|M2) TsT8L0vf`2[6[m\K+p~1G [Ac=9E1$mQQTw"mGڈ0frMu@Qb1 sDlFZG_HTҏDء{MPc7e铈ހ=K7`ٔ_\$/)9 T E䑲mqˌ:I@mՄdդߡaMQ)hv1Vhb%DJ+)J"_BJ$gVYh/"5{-i*R;)7taYG" 4NRiL&k'ウERaA*ЅllLQ0O|!NɸĤ(qyulq*,x U%Hߓ~W v0Vkfű+ 򸿸` tp.c#\6fF*#ueJl(M@mQzdƂLx]dܳCLlrupq(|s=Р0}bq9-ڳ9M*{'4NSƓE -T>vfs]6dE~=.=lχ{$o8hB٩mm1~<Uo]ҋxH AA+|p~Tr{mBfv"@w@Ĩ [Pn }՛ ^sS7wV]@ׄF@3#s$F'+Er2#hb%B'd}cm3p9p <%Y%6N $#Re@RYsPtS%?rr@|Cc ADdv<+=I\DiNr i6Bv"T"L+Y]ri!eF&P,bp4bVz\pɲbckoC' ED֡Y Ph9 A^Jmidty2HugjD}+=E1p| ϤaFS–J-@z&݇0CQt|Ygez~N|>y~ɮxX QK@vqSJ!,DD֫RɠeG:Y*: @]o2ZЅMh 6yGTHybP q\,/LV=dwvHU-[b%H<{G]BSNJSz[/d \(ıPTh<z ņRk߰C, lgB". Bn'ke#i޻_Gprp>j@Nz'v1 .Ț P<+G%,bl뾇#.TٓBz<'u;]Z^U =y0qҕ SNÀ&:b?\hQ⊍`q6ZZˆ>qYB7Jԭ3[PZdIˆNjDޝ/cBʙcHˋV_*4YbO2D'dKlipS]iţ+e/u\cR끿7֦q0oCX,*6c{~LȤ%7:c>{ׇ s ZY{5s.@Z m\y`>t L@vx \8 ߱n!҄艹п({Φ9ua֍Eo?2_zrfgv59 Oz<7y8}p$W^{[;NzUt<uaY[L{k08]G5'MB)DKO=)T@]am#.v2󨟏 43{@/]k??%j_KRw˟i?~2s~q{k ! , p`H*\H[Bl@%ŰǏ 1I௃$ɲ%H0(0q鲧ϟ -JBKٵO[LQ^¼!u՘xI7`+z+2\׽2N۹-DrRl:Y\jYGm$Zw ?9&Wgهqpj&-pa)qtWT3zATQ`<6H"[=2XnbqIgADVZnЊR"~M՘AuKc<#fd<_j\DgYIS[ כx*Xk^dL1_׭coo.9@"vWUxK),.떼~\6 /籡r6;*jy\iY=4qWܺhzT$ARlu*cBJwaOa٬lak?bD=Tʤ&-BTTcOE7tvl,"1EfE vKJlſL 'rIKr S @e,ƙ9SoSx@p'+ۢ1}404/=Kb@S]7%SE o]_+s@[=6WycE#Lاصy\ݲ<d-;n-=78|W,ޗWR-s>(PM靷>v7&F8uKø׾lվHV&0a"gzDY%MN $o ZqWݜlG>^-n23 D_[ 诗VRĿ"ezѤ} UrϤm!,*F,w $o&-N\rGY9&AtEIUM|`b 2T06'ځQmW&iADK-V DʰMUn0k&Y rep NX4g.&SYZG2la9i8^r3HJ36ذ<%z[ۅL_Qp#gO/ ("5*rQEkJdoZ2ݏ չ3~uq:Xbױp7&ėq3$)14IJ|R#Ս`܎|Q5G?ARo pbVbl;IyK?J̌P:C2jx 50ByZ0\G}mSܰSURce382ܣ ۼ ty؝!?iW2?˳+Zql!FǼM;I_n5hS ,'උUUioOƉ&mK0CHcb x+MzuuW9W̘gqaŠ.WBzW㿱#h2bu*p c]`z ~i̡b[$ʆh-[s' !pk92eӜ1G ْԟϕ<fYZiBD#Zq}>4} TNOwJKrv%T s Ӄu%֌ 0fٶh1zQs^R2x^up" +7ynrjxOkZErG4tJ%pjaVNՌ+?g~Gpyyo!Bv0k?hE*aĜ!q2VO2ʣ_PRj(x~wseoWG:\Xr'b-C|sׂSy(!~K)A78}@=x=w9xb'7#hew[T(8HiQ2{Zh]qa:M18ׄQrzfHXV7aY5X.t(,w@?mh~1v~! ,`H*\ῆ }(З?+N` Ǐ C@Q,xQMI͂ S-LpOP 1ЛPJٓVZz*sׯ`un|8T) [6L@iQ;ʽa׻H+e }XwO5Tc&Ejh1o)S/, Ֆk;[аC4j?Lpywo[=7\YhڵָUgHw$XcTRٯ6IkE97sxןWQ5iY vWsIEZA& i1iR]fZyfЄz֋dx ^EwX_m=Tӊ[Zp&ї}E A<7dTUL"`o AhkUt%A\ZI@Y#N ؛D !q4Pvg#@=T"9r חxҷ~{ijUz]R&o6inN`u*ɧIQ=emae iNAbjGezY+nT$#*xny/H*FIRJfqo%qZ+0Do J-}B&kSp@o k߽,;9J%ӕъb-е[è|cָ@s+ۘ5CSutj[lR-Qtitt<(Mn@=[ۣ-EMTZM腏s8N$)I<-ݴ]d[V.u'ZFP޵'~ЛV5׾d^9:vh3>[v)4;޵o@O'9- yhGYN<]J>҉3b~vmV+ J7bg`jƬd)$y+fx ÍstL#ύDȹl8`f ILq  #kae W=-s)] ˵c `(3OI VȰVآ+S~0dSJS-qGf~qml=p!f&{\/9;tjӝH8u}aA }?$όKr̎lG6N{EM̑+@tαqSr!J¢舔_Mi gBH[BiEzO ]V嶁Lb QO(u C;b); K+I-im'D5Oà%a3Prk"3O~\#,A:Q#yL8;[VtMmCB2G#洃D&laG)5{А]\ZӤfO#H٬inW1k@#M1S.GL+5z@ MtT@*OZs', RJ5uzC/R 7/;=ԉ&LOO(I7մUVo@UTeT@ЂL5~TL5" _x SZi`haԄX5gVΫ;lUɭ銡 C)BRA8gTr@)P]LZ!@ H Z+-Cdu^PrW!zu抌ti7,qcV#p1Yo^P+9r?Am!)^m8W{ MX Gȶ v Ov۵u:Sh -Kub`,[p!gTB Z@*gXm8 sڊ6MKřǵЊ5m h9VLo) ƀU2jކqQ}t%q ;j l'2q5kc"WYp2T]YlΪN\lڠ{]/BKfFx: ᶐ 8G)Y n9q 6сDMߞaO}4rTIRo:vڸ$Hr7r9IɰV0t`xd(xoU ZH Rm0& w]l?rӱ%IU9XR]#+*yb,c>x)_'^|?Cx]28gToa6?XN mg^vjZCĘkvݵQan)u?n*DW/a}{HV Ss7H2!77{]eQIN=EXSe`zS&d1}S\p׆YD%j}vVvā>g[>kU&QE,/59GneWg+>Vp `TCW<DXd-,P',?HNUN@awWTvX9QsW+%Xӂ8(1-8'eh4k~w*XwlfH!'ymU(H#'&WH!(=‰"UKPv{23%a PE~jHx*"(痌z"S89 (2#uv؈}vH%'䈇*vGQ^3_5) 9hJxc"ʢ,QEqAA85!94x! (x5hh"He1?h^0@9Uqvb>! ,uH*\ȰÇ ŋ3jȱǏ ?R Iɓ(S\đ,c\i̙8s6B2J@ 4⸤f݁ >U2Tdq}Bͽ|6dڴ[`+2a>:[[EJ~j۹{󣅆%X@ǘaI{Vgh C!ԝ@ QmA]Wx%=Fj{7AN@wUQR&)\(cy&VVBʈ-~bUvg^ x2z䜐I"GGWPEgQet/SBEahRPmwРCJ(wX  @"gp8{&4QA+RޟH+i9)\5i _@E)Х vi[Tcody6kwh5BU_}gATV)~\B1B nYjZ*\sazl(m#{TuLnXPCQUQ,[fdZ'OKPtQ & I k=]K*4TLխE:{)fjQQM= \@Fx.-4`6n-OpQ1X}~%TMdBF+Yu[7WC{+CGM*3?po <.Jۻ4-+ؓ--R=4>?;)EvҼm=ɤr*ZF@<7 {.>xA|{4~ʔy#H8 H>nwmH`4MObz W -(;jO\pE&k,a =[$v29F,?#:FLbcģ+AyGڅr}(D*i{rcM͟# Lfs6J&20tqFmwoeo<T-+2MKjK6+T&B>:o&taJhHqCi2hrR}Jd|rSjgD$.Ql+YǰǓ+"W_PiO-tlif5+BHAkQXDx R4L-q<̵<նãQ%-#\ H)HՒ.rGs9ʌH7A֖ќIuB)%I bK_;n/~E4b:YzLg6nAivR-5TlB>mX5PA6vVta 9.Dxky}\!8lC9 ps#& 6hcg,H~Gh_BO~yKQn䌦y-jgĔ\ki$aO!=Ϝ;6V2Zk5Yi!ηL|pLcҙTo}B=E8'/1afҧ]0}Kq|&+fExܑ209VDI5mFjw.u[KdTJct-F& 6(NVrcBeu`tcx1&r[&7F7xStf/7[lrsA#Q#6=〰fR a l$”u,uup!JcvNM܃hC=}F#/{ݦ:Pu_NFWŃTc6AUa BN&`~ǀք;{7Tl'x`.1xrtA7}sEvl@ mPreY)pAC P$US$ec> b6e;Xx\'yVc莮3,:r3qVU0Z⏪eRaFGQYAn Ȏ=F?xYKSFt{z.h(2@7`1SuQHjc{'r!3}2ԇ׀#[Sqe{J_0uA HhQy[V LJgv6aXyhP7z=ToY9>W\7Piڃ,qRhlqiop哥R$!cW3xoiC)yo5[ْFIi)pA>6y)E!H:؇YGdrF q:! ,H*\ȰÇHŋ3BǏ CIȉ&S\Y@cI͛8ss̞@:D У89"]z(ӧ;BJӨ՗T~U W`IҲVa^qU!QSܢa %ϠQxrd#W_}e(5ַfa m,sLЖ,_ j踸I:@߳K| c\υ,N:|f7!_}rT]&>´jKky!z!str]&-d_rv ~R].qJ+aUo|v\nՒaN3-[[wY+Ȑs 4/.Cdԑffd(6ƟD-RWq)E[gBRِo>S+m%=Zb$dA'd6? 4%t#?Yl\Ȇ5GM"B ؞c'mhx&R ~?.!\ 6Xu'AQfBm,ۘ'j+jns%wٗF MX _ W:㴑KP1y7?u, 5&špD] -ŕ [8 [,`eW݉qn0q5?u$&Z;B.1%kj)eKdVp,ײ㺪 aIK/t.\ye%fv9@ /KrYc8j/,xdNޖ vᘋ{{p}fݚ%'G/1f6dΩ< q+xIP-ll1mrL AV%>Vx\i=7f=oM=Ʃ(~Ǜcq:>:yiIdvӟM4n\>?|/XCV}dZ~ j_JhUEN 3.=enCnu5 dz*KOG LT'A"Ei_G)r;`@n3>V#- d?tڃ`r5Єkfc,+#-2 rwC89H#%Hܓz%n:[D3&U" _0 {&Bz(2BV4OAz4`jnhBZ݉kpH\$i$Aa' }E`,Rg[D["֙_mz#ꢋ2Rz X!u#x4bsi"BYNP`UϣF*:bTw}P|=>A0驖|) R#3͋UnU`#kevs&2,*ge6Ww}Jϋ79p P^[TBZpIF2pZ%K ht5|\QKfn]'ccvۤ1Bc`'F? %٢UH;l!jE BL4)q4#>7hxq(ƇBDСIs p?EeuS!6G8/i}4X@Lbh"Ve ELW)%l`8bE6TfRag$Ei*W P/ I/$]kr8jusE3M8t+S%7z%w7Г{E=CD^'>j Hkm;\_a*dx2Y<6SZ0<hE-BQDL3D1cF58iNc^CJ#U{1sv -]-/uouV%TLq.WJ2 D=F1t\1 ,\6~P P'.N#Ą fZGjtx1GV[P {3&\H6mB1!S>U6>S*b6цۨ_ld6V&bkl)"P=;!fp@FCa`$Pkq!5T=y yg'+[`J#gYo!2h%.'@cL|'CR /A DhDs5v ho1 I$z#Gb>#ws@mq H@Ì:.ow=))*vDnQR֓f =%%̱ qpypp|v<×!Bc=i'ǓAVe\y\;X/#c 83D9x  ^W931y>ۙEӖZa wP#4 )t9Iȹ șFy:o ,~i3CZh1A̓qWr<|'l J'6AOhp<ڣ11ZH!dNTV–xHf! ,pH*\ȰÇ W6lآǏ C,(Qa--[4h@ȗ0cThk:ZV̩eϟ@ڒAÆ* ʴϒ }ٙVNj}o`Wh *7HۙRZRKw+ g&0_RUiuB#*:3fWɠEtQV\5ׇ0kTVl!C&b^hAUi]Swn/[lAmZl #u ș?c ZdVZ)S\AуZp*yP+Fʘ2K$*c]G-jSRM.!lcOD4A2ʚ-Fր)FeєfXꔞ!i٦:E-Zh;MLK+RQ- IP2I.ɡړ0ƃƩڮLd*0‘{ذA+ .}69;J-wtKBo͙O+dǒ2SC+dAi9J(IADG=mr #?ƎKிN-.[uP=jIm9< /VQzz߻UI+ktnjWZfY f~9ՐWU4=dAH!,o'do ط@&D? V6QўG5-bـ@ #Ý8ƃuUg8:A Ri)< Y4 N"X$ NZDAEs!mK`PPD(w!MBG S +:qJ&/~Dؠ'Z)2rbĉR[x {?`ґ|1f$'I5 CBxٝIjQG5Q~rjwMZ8ӜjcpV&sGNb iC/JB5R() W9'# %tf@;Ī4ӂ'tC#{T?11R!i.t!c5PfFl!BZ@ONm@"4 :L`,8aeE '/E͌_:61N )`S[| Pb٠N6`g" X6"GanȰHHꘘh j: ]0%'w*)@#骓5h6>,\a.c+ENOrd9EmXwq)1⣍r. AˬL :"CzBS=FЏ$s7N6=+ىjaҷ n΂b9BAmuq4ֶ !d a:' !h;e_Ofy%x?@צ\6%@1rQQUW%lmTdTnSH ur~1Px-"lG97BK$Y/UIU]1#Qja;c:!:Q@?'>r:G!vbb !8( RMTj 0(`bc*s)!7h b)΁s$1 74-Ed+{$h15Sl^hw!Q  %Z66saSJolw@F1TZ *Tuat0a5(=$7KOj V7 5fo&BDKoEaT>h4Z"tW=E*Txt]5'C; zBzev>`%QJ)h O72fSr\Ʉ,4lѱtĦK H_+UHu$i"ɣh1__R((Gr2:cv;`GaKdOERj^Cʸ%LcD?sIFSBxXz8z5a@SaK:*8Q"&!pil7lmC.j<ԲuF-Md:"g H+yaq4H8Bs0^ZRCd,vҙc{'$4UnVhSXXbBJDa{LJ_^?Ԃ J9#ĉZu2ԡ=p###rb5B[Ej*3RV4j]J14'>xn"Rs94NhY 4QDž~eѡF*Znh0Xj1g#Xf2I8RX>\Io\T:"4r7DiEW5HlmHR*}7'Et25ә[ZCOThwZ*)Q c%c^3lK)!r v†r\T0!fq/=]nH|t#az::8jZ#=eva9BoǪ)! ,H*\ȰÇ8཈3jȱ#NJ~ )ңɓ(S$X/#ZI͛8siZmXϣHe[ Օ/hѰUWS[^K]Edejٷp"5W[ǀ˷D]Vˈ.Z#%`٪ǏL-233^aL;۱mLظm쵰QYsދ")_`;l-"a%6QcS$hӋ*f̘6Jܘ)'{O-T-Tg=M_p?-L%~p XzWaHy5jyW7^~!CsK/M5HF]wr"Uug?mޑ2E}Fb-dRxЌ͈/1hLV 4VK`N)ّ9PfiH fMݘLCeQ, H:VL8Mq"+dlAƙTTR-hZo\%JiN @hAm[>MR d +AeRԢq2jq+N>3&[cQѬ@1 XK@k^}/YWe2lM&K-ƽ4[a\mAK[m]f,@BfMycJA@`# 9}x2C"I}1hҊ_/<ѱ/eG}C$e{Y;9Y šīugHR-?x+؃-ΤqˎmPqIВs,AQI.Ϋ(u\B-IAvwuhJ a#H挭6_ 6FD9g]^B T(u۝uQuŊ?q\f#V"+1(,~aCfb0\`>qqMTPQb5\v@@Ioyk]Ru .?F6dR-$H଺gيߤX`Q [A6f<ܡ@ʔ8l _t6`{ds5ZY2 Z00RB+*ŠRQ`WD"a [i%g$+㈐xQiU)l/PE&R;djP%I Z1\,2Х!5 5UA4&xE+-`/M*JNtf1:,S\#Yt(UɣM k yJn,%iZ8):]SD]}Rs>QE:|'#s<3m =5_abٝF4: hf*HNLvt(|g@Qt}tQj! (F]㒰\ԎZFcZRPiuC򗺞IS2R"WwUP\`an+[8㯺1ta1R?T099MXK #d-!H>2酪WF1m.9 svOZVK0&(AJV.j_ǜ̺Wf[+0Қ=($T5DC<{Nnd dԛjj*Cl.f\2ccZَ#2a)s#pM.INMWG1{Y˿W$ VK> r,B"\)>WNL{ k꒰M͝5GV),X+ƓZ?8$ qZ2mMmvj!nAzgj2vWf )YDƥx9]NY Jid?.8 !CLF 2N -}?C?Q W#_rz p}%3fe҆ߥOriz4t:1@6eaK0bq@7hrq_AVZ]5Sсc56le125(̣*_&̄,baon >AhSZa* 2m!bb@y" aya%+*sev2<=6lz"wv>~zah>3(7vhu6yljx>@CL_E0`aJN\7:d$ay238R5p% Ȧp+uxsBg.Gq(G5d?#(/\(,YlB-gG!ZCZAb CXRֲ1&Fc2{v2%Ө6=7$4(*`w,<2  .m@ C(p&"^!4xG7!Xxx!1F"pB-+b+''cyvXJ:4Cc/1#2Ih_ց%yˆ3Hu_\%cЎ%l"u*4_{x; Scp-=f\{w,=gI 5Zr (]Bda_G#5&-4EqkQ0">w5)s,n?_Yh(#Rg jY7yrm&% N^>m U0e}hAe0DO!&bf<f2%3t'Rbu0HI"E!y"̲mbOZQc=w!SdjKtqo'9zqA/"'"mU?D2\b QPv.Ac@`62YA&]7JQ 9}r7[x!ڶ<%DN! lof oI Pɓ&.l@+VGP\10NByU:c.]y.#rw=F$^Px27&P"cP*wF 5g 1ݗ_uz0CE"2b/t2 ws/y8gP94B)3Q#un4o7uER?Dt=gqyI}?A(cȠ1^iGy$chf22B_%BfEVƊ9g!CQhuKIy\.vDLӳ WM+1%Ƀҳ;wGU\{L 7S*m]DX¤BcP0nv%fKu1C)q/9,Zɫft90*!a6js["Yc"jDC'AnGqb|#)S-g&~=*hY2vgH:Zb[kԶLgG3>3fEYmzTQkHzP~U1 ;"ovU^* rijR 14u@H»d"3-Wt•0(tcHp*Y-Ca30 f(~G屔r{[Zkz!hNHikȨ`˿(GD,DU9>:+]g#}) "LP4#9c4\lI6\#y˄_6 pU<$_v"4le8Lq[T dV!j3PR܈4pf>L7,]mNűSPeh,z6! ,H*\ȰÇx '2Ǐ CIɓ(S.8"A5pL8sɳϟ@rѣ T)ҧP!҄i"MWmFʵׯ>^xKT]u(AeKU+*eobZjZW[[hSÐެYK˖h59gڲEK 3ТПcL+&fԸ5[%&rZqcED Mk<Ɨ ܹ\k4W:1KR-Z㾽]Cw4Z/z!ZFx b-e~5`%alThO)c/Ǡf8e'B撆r5Nbjf8SS5/ZcAv4*!6;V˷8nAG;-@hC֤ kXjF,-D4AEQ@5#3lV-13{_( R LQ_#A9^ĕActAЀÐt)2{I["Q7Y XF!1V/c N>8SVIKʌ [SEƒVZhs-bid9!\؜\5Wo cl1-pƗ1[OqI GMՆjȓ$ MK~T2Y ɮhq:W8-G>7Kh Ҫ4mW B)%FtU!}cotE-Z&FZqqI~_WO4#IS u.Td dV#^GV&dGL?9Nbfbn<\\{v*#2Dc ;S<7%hP!gɁACf䵓~-VbgIAFv%>Kg:%SPboupty%יWф y( }f"z?[sX6F"pDsd-<d?w/؛)hƀUMurvYt*+Za3"CXJLirkp69F6c4%$,$9b%HVD'j:1@ %)xr 5kpG#G)qY/JE*Mlpl")v33kPPG |5=҄pVlSc h&OTN 0ip )7*WPJ3M#*""QcIfARw'33-Th9c@D9okS e$%>qmqi:"/usB1xr.K1rsi7% Y 0#G~dI9.wP2[j(2ZplOfP44WH[4Ƣ…Lc!(WdPZRmЫX 9&Z٧{K u=+tnR,Ձo_>K%;;"'$4Zj|FpIE!6ز+'#Yt9|,YIQR/4+(v['ˮP2$#נ`ד MĚEҏ q!\zOCV; cj1gB d@ *n,4%L0<'x3z^YzLQ&9xEgl|z,O;)m+ٲ6f4]-Ïl֖ us&Ay?Nwk'z3v4Tӊ* i\m~-e 8|ڪ8Ԭڰ۲=d=! ,H*\ȰÇm `E޻?9 H(S\ɲ˂% ͛8spgA+fǢEb1$ӝPJZzJׯQТlc%`FpFm۶"A-YD͠mGߴSAhɐ,ek=V7jW-1`_JYklcP$amI{;B[f=ozl{>\{a}I"|M4PB[0VBXZ ui,4-y1\*`mXINqj1[~$B"њZgeEQI u!vfe1Pjq*QhޖNJ^?J[$ZRje\TE"t`'r uI:,WE6P-[`V"b%?Ud*c22ԑqA~إWtQK-5*G4`b"Dc謳HzY>ҋbxawUg}{ձk1^V=W Ql_b B]GyV+e*lD@PEAl~j%O[j-4O4/=nj=-2l"OMΪM Ƹ0b=ؓY̳e/+s;_UV>=)Oϟ G6Y8uj! ycʒIIheA8(]@k?m$ I Yv H`@tlӐ£\fQࣴ/ڣ-Ԁ@0s[f&QeŌk -Hd{t s@(,BמNC!Ԟ24,#?+=E0x=&~ѧ\, J%B& #TUw2)jg Ͼus 1@p&`I R!؜מL2=P~O +39A "}_Wƫ҈0XdY_0 Lg+ i-iG5u5Yڞe:"S eP)C h߾p=0B~ag 1ny-,vY;yxnQ3t~_B 7R0ryljt y;nFMz@ptKmrCx2'[34~%d*%yv#/pM1@926SMi @(2+p#6t P23af"gj ]yY@Wv t(+8iO%*K'Z|_AaddŵSb u$ $̵b5k\6Dmuc?^4:&^i9ejV@T4C)Fr}&D3A(lx25Gp֔f`CfǙlp{/'\CU gz6UlաLI|~ޗVc2c6j`c f~3XX2%$X70 8 Q#ldrIlµd_!h0(>=*q~)0hVto0[.؉G4tCtȈW@.U[BԄy[=YD8D#33r'i. ^1*6*RVF$ַ+=I6"EXB(:wGۚ[ dT"LFEjUXd8q#{MRuMU1+FXwU:%Ҩjf #g 9y(ǃq &3\hW(*G35dmcPLȲQl0 d 4M51.I,Q%("itT 5+"SRfttXS+2}'aQKC$/! D~sd4Fff^ 9|1mWH(bbn#1T5Gq7B ߅/cW8kت#C8/&VA$8|8-KY 6IbYN`ەAfy^ *S)楮v-GDt<ŔbstUIyj-!rYLR>#/364슄G b"y=JFW|VPM&Y(,T!ec6weN)lm$r[1sy-wR W"!rkVV\7\q2|*lqsc5U&x)TSP6bdvJnJ&vAAhs:ۥT#FsW!S8]׊\_W!_c<G+۲\#[= ձA }޲B,ŠC}ukY& yCGÏfrHa%LcE@*XfU%F[d *F'I@kv+ SJu=XLt{,'wDZ+j; qK=. uDj2F\USk~EAʉYx_8䊨W<kzc;הԾ%BkRK ѝ)1 ^ ; _Wy+ɭ Z;1s].+dÝKN!cuRV3qzYC]]b x! ,H*\ȰÇK`Ŋ'FȱǏ Cv(ɓ(Sx =-͛8sɳ'NcJ_F*)ŁOJJի'IXÊ%UaY]@[t潖r @A|˟Z VHe->LA6Ȓt YlʹR-[2-W}"c BVaLa0E+3 8&!,+|90@-mnާYDϟ?{llY\5=`/2ǝi "?h |ly7v/bA5ap֢!iK4 Ռ H"xe{HVYT-d(mb6RWFGZݒJj -k8+Zbnb@8ZxK^\UblZ`@xO$\Vvik H⡿tY!{9&iȅere꩜Y)+hbb)YݍYZ5BVs6Pc>ij!%"x`7)cAu=l~SV("aiՒfD+I p)^Z*ξ]L /R$!*=mn|YlOKj|պt$+ZRg3O0jfP4]yS$!m _K-<vZ=%"|U+Aze E!XaZq#\9SيeJC -lc}%*B"BָK="_Te]xܖgiΊ\Rؚox(SCWmƮDDamcT,ޱ"W9?z_^W7#-Jg"FT;Ԧ5deP_Ҧqd".dA % 4yuz )GpIeEe-Vd oC[NΒ%/<€_xK) j6HLQ*wa"mw lAAHNAX->6l|Th6CE:'Pi1J0` JÓ8tpԶ-ʆZܴ0 e ѪGЀJ[I+(P'hC҈@BÎhK% 6"׋?k!닚2i(bPdNnVKHoD"wuLmZͅ/E+VC8E (ԧ,`E|#1T 69&bA 2OQi)N`C@12\ݐ0;MжP(JI K;4Pmo"r hDFW܆BA-qg)|'&C)<<2KɃK+*aRX>8H^x佬fIMjbesqkȽ" F&Zr:lR1 ^L <5̯^Ƴa*!`9<6'jw49i@56BԄ#4ّЂǭ ضle3BWr7[ԒaR׮Yx:?Ȓ#3oo "F R{gƺ#J3L'3<nL $*<[&)4ce"05u9l6EkhHUk/{Pja7A' ;Me!--׷^RMPcS!@ԃ׍wZ/hVB Y7EC!fO Z8T()GxXB7Ő NʱhыQX lE ߶i Wܱ hs$݃IA&J]b0 { ڼ萅vD6co%sf!deeDא;"@ n&[ŝO#~,Uv6壃 -i-6KH]S!qh%_ Gtt<{9?'`6{2erd2`U] nMcBG2 @I0#gSe;IHލ[1n8 Oe,2AHu<>t抽NXVOh]LD#{HK}9Iu7]W0 lQe Uq=fƒʏt:0@dR pk3+O0 B%qF+d[P*7FTF5FbQ.4V#cf[B,zK@F $|D{kDG*1I$Pa@f V46ya^n5wd Q'b""RJs)-`6kb%g3oc 'DhTQt`lȖot!y$Sk4taY'Q0(rQ }"mduUU.;rV8So,6}Ph"k@ L$aDEMuwikg@HB71uZU#g#Sq$w2XGP& 2 lalLrc)x…ǂcL tvO5F/n2(Rg!t%[ B}q)&8Ź9&3%&49p(5aK1Tx$eK3bhIb3Kb<.%'Mz4. )ޑ AbEXzkwpz'B4g2c!aiy֩x_\GWh&'9dXx!]ês=$}LHB!ZAS)MvBz &ba85J┵Y dGtXqiqK0;z;!3۬fK7r[3)<Li;)yg[$@߃uQE8.eQ:\÷-z#6-G]vgXZ$$\7⁂cFr^s8!P+yoB^"AM+EA<0~]TcPʰ [Nٌq βrU! 8!\ PkaOUPBqt YQo߻0~'tZ'W/c !Jc0$ 7b`6+y@0UDjSap9w)w/Y)0Z"sFcNC }.!FqHq]vnPvD b^TQ/}%1h9-sc|YJ!e!Ri‰3mjXz^ )s:d#a; f.apg0x\R-aSJ+?)zs%U?srЧR}{gsUFd>ؒ71=$܇i@DbW8RL<eg(kCP:q/gV'*b0Rd[x,Tb\xXMC? p] (DKu=8HmUASl1hN_r[;p\6CǏL&!-`cǷp$G/Us9nK'uHvڶm3ӳ@R>ew@?(36sO|քnƘw1ˆ!A 1,YqFawQЗp'#Tn\TN$ U1Hd'[9lvPHBi3JtJ A4]vSoƢkc =J=F Ck&s4<}Uօσ䚷UJX+TҀ%<Y{r>-%j$]3G"/[_$*ҍW,& k{pҲF#d`o9d.#|U6XbK"։JKTo` zrt` $<"A "]!Dr{G>@ "{x66yNh< sC :ȶ•Fb^cU[0Ȕ\U!s&naMTNr&e$aV"՗BlkٌJaqW00 +̑Bp2uaquLMc) Vj'p)u⁲Ϥ1h0ɛz !9b\)PŲEQJ"{»azg(6 mW풧,K (]$:)]`zc- ]h=4E(6!4ސbrnY9R'ZZNƜhMtGs+0[x|Mpgp5OO[0 kG9}"B)v(є+'^, K \im/"mbgScD-d&moD|zLhN%!Gs%42UaɃ Q.J]}gpl1Oh:>9i;GΘb$lÌCIbd#A HQSu;e/f-]^埵˕34q7&@@ DPB >X0 ! ,H*\ȰÇJh?ܻ'pbď CIdH /\ɲ˗0 0f̛8soϟ@ 91JH*]dӧP0ЁVjڴĞ\Ê-=_`k!f -6K JEK YhywNJ_,Cd˘ +"Ch2i,Ȑx{؋Z%&eϾ}gYc8۲wqARF" (ko/h!_V[(m]-󉀁@֋]%߃ 'bi)AGcu=UaEY dXy@({6{U +חd7F5cSF(A+h/ 18P-J+`MyzQi(eɆ_1vg?Ni#b]tBePxMbUlbFy-frClb>fU+AFڠAˊ0A*27A)ZheK?he4ћ4ղcQG/h#2w=l2(lt$H̳N2@5-h2*P褵hjgdvz+7ã@ [Pcr5-ޝԹkQ/kˡ' 6pfѸ]UY_ 'B7L:LQ(yt"±=u zxz=msLSlLZlݲ祿ôaaa+DY-wo3+DCk j@ĽtHVrr'h:#?HgdAam 0CH@A_׬u%U|#,.YM+,!Uየ5p%"wac9PUTu+}W| . m8ĊC^MHs Ï~UQY|G4 H-Aҕx<Ѱ≂ܗwQ0GEF11ʓJ) Co+C ɼ5BVAq抲t0,H~zu61 AiZ-tG/V@ep`_ӠDha0ngBx ؂1`GFWbb aV_0e*0VHBM~H/~8C XVow~U@o+6"^t^;UϾS% ǣ(uvU΍uqwc(ՊP֔0!'sV~X,Nr<ޝ$ԡkEJL  GgQ$ŋXD6gt&2-u6.X eN_2=$j.}|3dZ|> ՑqC3靘ulepTӒևLhЊݤk:/DQf#yP&!Bg?$U޳+:-HhXxg9 `ˑ;#6u-6<C^&c-1kU5RaJL9BBذxbYP1 +MuXq[z1̪3K^랲\)hC z1}.(+kLsZ}ǙUc|V syb I]KiM[6KB-1\@mrMQоei&bv%Z"Ť\n7kt=`0mmK/Ċ[zFVzUs:7HZ-D6j+MHk/ӛ 4jiYleBm\ٲf øZmqإ\AGJ.&ۃצ(ɋ_$KDrTHW*74pE"1n!DՂR,{e%!xb Ͽ+FtbM3lLVWtRϽ| لc=iqePXQ< VYJwQ5R~ZD-8NbB7%}3zǽMs,-Ёg R(Tlfڔɍ-HA -NSoH HUC(GKmUQR.Zy| ~xR3=>n4GWPV7DKV!^>m ,FlǓX2c!\u!|&spZr7or3Ce G^C}]3/Wq)ddas3\rw8"$I,^`^0z.$E792eCX%XRi&sc:c c(b6&50b56j]s(tF Q $ [P$RMT6k0`jEB0Mͦ'pkaDt 14c 48q kCQQ%1Ɇ%zR9;QPEQ!+@32p.}GR6as%k|"!B$-Z$B|@7vDTxzE,k4-MG*>uN3|cVCZ9vq3ge>D" xj&}MrF!(1oCV5'NDžZ-<2@# aKqJAαt<66 J=<6-8IQ<8BtMggUB VLF0_|هQD(:'u޲ aϕa/~ꕇd(~, *70lN\x9^"0 \|.T;녁Q$+KrysmhU{Wn@+za.kTRJtp^ru]വ2B|W&GVl:o>¡DŽP+FSh(qm81!dچ ~12/S{Y5yb9WR,FCbirFBMQ% ĶzǧP|Aβ4f. (1z;xD$k1k}@C +q+"Dfn25A95lP_́)CAbE1ӭ!jB RQ6j0y@P6PS?~:Is%+WDԇ*hʭ0o>x&Qu@K 2SC 1pӘV)E'#H04 80l{>|) lT7g~CLu'aYQA$ө}|ePQA-7t3#Q[U)sfuYB6VLe+³vUF(gC>\ٜR!82&%hNCLq9@#^IKdTG$`i{嗚K{=!6poS 1<bD1wRP8&Aev lTDR4kp!L$4PӖyM%~l u@4Tձ"3{BI^@ϔUm4lk;A 6![*đBMO Wžţ;'^( '\5r#t)|-C(!r/rԲM[xpq3^LOtNGR3p(9xZҹ!b-׆ZlDk}<CY&~EF3xBoI}rBtA.,7RbȹGa4F]5A̵b6UW؀yί!Et/q ga1GcnwVPsjbJ+tp&IJTc~ KQ]Ԟ~ ,pBb+"w}7P-)߁DeG:<@DB&>~$_ Q1ڴl\ !|0bAYc >%֙=',az7tK^$NyL0WE'^URM\e:I'# 3H{%AV~zR}!fSutG+%@ =6e/W#R༵m('U1"0$KlLDt`Z 8^rL< fv f+9GMؘ-!L B0 f.Q]3`nk}[$L^Ok\{ mohgO.}?|oYOL]2S!+GJ?OLN[ Hj\ ]g)lȯo._9ѐE{/^+ Aݿ"! ,H*\ȰÇ* / 7Nɓ(S\qaE0cʜIĐ(@o鴸(ΚH*]*@N eJՕ>}8ZZLxٳfI:5J1ZȀEK]:A%CYj`ٻ V"2 q3kFi?{J39Db4̺u×Y mYjN{ 0o ȳsŞ=рa6"jg>?FAe _2XChэٽu6/]'uZs߃2E?p]m@R5phF_Yh5=Soe9Ih?"Fe[G@rD>= ⒝u ւ1ZEjٗ6~AEe\9^}?DT`%P1挰z9!:P=!mѐfHtmXIm|IvlZN bgglaqĦP|8Pi G)j TQ."_Y'r5&J@I&xnyOc/h@Pe1V[rD9VG񅨅goa{l[V= 8i1F=ʍ _/Cʸ "-t4r'xhZbl`"/NW=kvfےBvTǙ/N @+eoElղ E_s[T"ȧ =t*`qD#$| Tώ' Sz_qYAyg3ټof?efb`l0_7Tx=d ^S8Fu喆ѱ @u/ۃxoA["(-5pcg"mIsbdGOe!5^%U9M $QySA)j!ɩ IUt1C{ڎWLx$JHg0d͋ǹVC({QӶ94WAOXx ,$R?p"Xt|16 uY# E':T6H0|a0y AP2 ){pZ +d QBnC所x0 ;)_BIw;/,IU(%-BͰc0DD#@Lla@T'Q bd nGb   6-4+$l?DIZq522m+"j1lI(r|jxJBʒv ŗ-CNl1,sfȕu3iV!m`F4)|oJ F KgYWh!AW3B9C@J!R{DpG7%"YǡAIIGnAif7cBA8o13Wߴ_1'\sa zu.3c#@ $ByD +kxc`/tt E!8Amr@ 6Z=. m`wRs "M "*%4{ t#}#G fkP$PrP0Fn!LpAQ;KK"&X~QqRSx&D&Ƅ s̈C1Q;a(%RaA BӲ"J]t7Bt[Vbc5RAO41X%jt&K/%=&_rQ;U[(o+&.%B" BYaldK^lxeIbj2G,v+ud"D Uцd\#xGb,TT!a)f'@{7Z9zZ8=gi9Elb`;v(Rv@'aQ`g=7@M@6sc8ՕbGs VdgyB;O>_.>G;\) HXTa_Abe?w4a=H<aI,ee^@ ;An"FA @pn{}[:QCDAS|G gEABɚ&=+Jhy0#$C n1@6gd<%x` Mi3 :\nqnएйnb|fs#k Y6#47R -kȊȅPz /SNnDqʁ(%k4$EQq8iS k 7:Z:Nb^PQ'!qS 4aY &ݸC8\.4aC42:~'ws4G=Ր$V"s ViB*z"YXSXbSRw1g6X w&9dsKI0mmvHz:{:-ZA~/+tb^I=I Ӟ&7@5KGKoh'LyQ?V!6U!J\qw^u|&BTK4恨 Re"Rf?.vKezAG&`$\ ңRGtY a(@h9BpAM!aҀ½3 MpcS;[@_iv=oڶ!SI#Jzkd #t Qpf8/[Pd oif;[9ȼ&d[%>G km-C VԺc;v_1X+r2sSV9#&RPvl(d7zKwU qXas`uC8"h9f,495.KCUߺ517\"vaWeB )\sZ(WU.rF)7JedkQsᑊ4uYtJQiEt=YTr.`c=u+e8ဓ?cȜu +@Z0¾1[1 L2TvuJDl@[a wxsrWcjkxLbvyw̗lIA,6|-^te0r\$w:RKz!h!!`)cf/G!*]_JaD[d[w1ID~0 [EaLQI5EĈ%‘^^؈le'M+24LRS7@ <2k̴2Al¥Fw+4;…d`֬ L ܉p0sÍSQ*}@DnAm=Hf67D+[3Ō#qEl~ˆ*{9=!u[Q HK'§tr(<c35ν0Wu! Ntc[9ohb0WO5C>CYH #ȇ 1|a"vԍijSIrwa "W#IB^04ձ HwX i!Z1]/YTHKG= Z0PI^#&)R)VqWS":#E)8*dқAeʲB z(]Fi ˁxWi?xvqIے*{fMS3@hÈe d@hL 0"Y'`GƷTc"5J)&*By_v0%FKS=[(x06ǎ]nfYH*7` s9=72gQ]-\kPSb7ږ Ӓ֧$3KBL5s@Ihe \Jۙ~gѫ35D7zUWs?-֧IFmLLNg! ,H*\ȰÇ:h -{ xbď CIF'K\ɲKc~hղi^G'v|IѣTk-b`JXj}{d"X YlS1([ʝK_ʆț%Dt ~ -ЛEê:eU۲3@Sv__|ia0cRy5{]֢ 9mckAKbfjѹkAlm~_gwؾZi"LƬ/8?ᱍAu~V(5j ѴG/jrZApqbIm䕃/vlSl[Ez%u\%!F Yyi1^JEޅ{A@i(XzX?e~)TeBU8`^ɕ5 ŜAiHPE0W`[-`_c(Px:j iPI]%&Br"Lb!؝A`֝LY5XcOdX?.%\=lty|0F]*PPŠi&LYZ[Gۦby%B+߶ n`YvVjUB@aq £a/%Y$0pjv-EtL珓(jƗ2ף!X*O/t,*`4f=F}kТ穵AbԂ&2,->}=c-!kI+ UheE~Yujw4K*/OYVζ}P&HrF(̶FdZY\L(YYF_=yzdpbWh}%E ~H$n;+*iWOyї]+CG؝E˅iă"vAAi{BrhŠT gC~ۃ()ݡO!y 2 |A"a]{Y0(TDHzMXqM ; ⰺ瑝u(Ac Ö 2^PŰ Ѐ*<Ȥ(b$$,FġZU2cEbce ĐCS mW@g<m\Płm((&}qG, `: lz@K-*\͔42]qhsµQ!~c@&V=14͇L͏Ll5|%A5+e(v@h:u@ 0:0 @--poLɬ !J-l`85>c 3ܞ 40ӸrMr^^^XC8%Jv1? É|WV; 4M*r]@eAN//Bd$~"Ia&cr:*"p x%&[`tHGaxQj|!A.sp+H-!k U#a>.KޓQ}Gc6!av($}dU(d'!Pg%R6ncR"i+ ? G"$ "BD5sLbBbM~'qp`R_QE@0J54:Q %m,k,P 35"Q6J‹k3(5"cc !eA&$}cpHvg4L cN]`7Z )^%` f5" HO"ZpE(7)3]g#H~>#sYqS}$r%7;ubL:D˴Dr0ܣ .Z@ σ;dEaYC@_Ux4iE:j ,PwIK%b?F %KRdF'|`0Fa~{xuuBf"|>hYfHT{Dsp6,La*6Wav !S?)h|c/?.Ir^E ',1CYIb]d$60^pdV1[ry'qFvLسf_aI^v1\**f^C qZ|u~DHη.idf!F# t*5d #j'SMA1l(6v?@vX]Qh('+ 7|Tn ]PIH :'63^dQndn7g,m Hc%@Cfm$xf`m1hyqg:Zhx_..ivHy>V }PpR30H$4 b gZ5q=E "A W$"F4juj!q/ i*Q4(`Cc9l=r"e=bP 2TچidHs8tTRB a]8(dw}ES.6R7w0`rL͘!LY|Wرh8s`Qrb:d W \"r~(WV'CXg%X`>硓5/r 6S5ґr>C[UTjraD`` FU e86D71(vnU(!r{1HJ^MϊUI eT`PUͲwAvxW ct=whfAm>!xXYV!7t,JbbK3?v}4P١jVi ߹eCQ :9Ʉ)4?8CaN&*o>#d.X[D6Yf@xJ+_H4ZpLp[}*{;Ag.TC i$T9i< $#-dZ9EYN2^S 4{E8zpC3{/kpH!Iˡ1 [`G a 8 `PPh wQ@3}` U@ /v+@`H^O!d\<-CqWh˨l"4ŴŷV$-K vR{`U6{pw_:?l-qW,ّBԢw`zqTASFI=jGc0>5 - T<MG|Gy_|q`ZLBAB~s;]ϫ+S[>(, vg'%+y=1'A6v&fm~ehe?R%j<.*2qJB`,`ETe_I4=2xTdfq9#;Р!$4}CXԩa c)H jX.SLa, Uq.+0bm.1GYfd3#㏆2pkaS4şdf⨧)-,wg&˸ "o~4Gp="9{}*0'߉%A2cLFhn!^!{uu.3qLMT*I~CB? <}v[ok |OR̯"dIg׆Z ,SRtf %F &A,06kcCIvu܁rnv2n~3FFSӻ)GqG}A)2RK)Lqgc_ʌa]LKg֧徘)! ,H*\ȰÇ(Z_ƎHE Ȳ˗0c<^QdHLOʙ@ Jǣ$ٲ`T,#_[.5$ѯ`ÊuBMECcʝKtg_NB`Y(-ؕÈaZj~5ChYh>ͰW^̺8=uͻL9o,3O$/ڷub%6A9p?nuq eQ/H֩?l WhhA 68QF;-Ցn t]5u#`/l,TYjhXeXQgQ^ Qi2 !GY.iXO"&iOG @Ŕd2XdL9T!`YSYi,8ЖP՘]j~FN-(pE[T~AF}hccO+Ȗm"5ʢt9F+A\{Kv^ޡF+TߧYV'ClvAۜT\k5߭xAxrbZܲ5"%B+ʆkDXif(Rf,܃٫>F- CZji6h U3ETF)A_kEߢT[I*/k`rO/bU)WGAKGLZD7/iOX u3SN9d!V +YLI*"^h' j]v`3h/YTY3"G;|T siPqG5F?})Z@5S"D!@VuFYʳEtzu@Q=K,U}vlI _˨#lȩU6Cd=l X;qy2-1(qЭHd Ihg,P4׳q8=KCN+S%a=f9N"݃D)Tlq%Ů}GOi =!8r$@مԙ R }Twx:A E g*PhfK^~ ?h3F0a- b1Y _JM<2N+ pfɊ=z )jPb t*6a +~qjYdiRق ; $0-kQXQMiAud#5 Omq2"e-ф!LwTd< OgQ" Αvlϕt8FSU'vmdJ[Ȅ~ NJL cK-3vP}شf֫ dqMi-%7dʒ!Iט/WI mgWvx=xӈ4 &b%G-hҗ242b5"Dq18Dw rK7ӅhXN_X@ޖ/" h,ڒ=zHNkZ0@ K"B6aZs8)V%DD{ģkXCJ{"o]N/zZkXC԰f{84 *Z QkܩC1V9)SquK#axk~[E"MPjg ,JA)in;GyXjCN_7W9lWDai3c9eSɤ윅c -8mc@^ Xu;S^ϒ4E"MQ7&R@^*-/*GcQ4a ߄=v>qJp0 ,q(37#& >5G&f<)BC{1(rp=f0a&N-27xx -HE}>+>:5GX&f Q. |kM`E6v*,AU)ga%Sg0,c7֤w ew`MDZ4&p$RZX0PFF';ŃQ# Q`a>l)OuG8gr"]A"&I#C 4x*^ї t`s⁅+Z/B#"_=ot|63mA`O7\ZFM<jZY2nHgܳ !y#`6UgTL]+A3S&&qoIwxwwvwxF\xr{v\=@fIWCӑ#)r֕J3:E$3KYkyQșe49w2Xp=tb2Ub\}h-<%(cG~J&[t.U0 rOlheaE4.9 _QY.icub!x5fA$x06awH2*qa$Y<>VS7 >/,bT$R3r9,Pu)ߡTM oZuH?&#q)"V%N=)Tׁ1=w* aAeD7&AYbe/ & y\&@iG_a*Jױf"i>rUsuEi3;^Er"DB˓tQ9IzXl*a^De!"&)<En9S͹!$cGKǰ \s1w73/~~wG1as!+pxB}"#[;l@ "[Ĝ!sկ}snA58k%#E\yB "fl7p!Q i`z0}u+'$D'U\˂s$n-jHarEK jP/<1-!F#u.!u„c'CЬ=|- P%@gH)ezRԽjl@ :y=P/pK'Ss=k 7 u:s7S:2tdSpl22!%oC7[[&eZ+ ((_(|jVA'E:P<\z&R4hZ"׽Jx` %J uCrMFBWU9LQ8A"`Ҕ/䍹Xuz"ݽʎk\v=38x7 uCRd=j ,JpQpv{Geqs>V){-Oՠϡ޴tF_uDb"$} aK3KC.xCwRF0$a^ +أL4zGS!,@d %5)9^͐hZ_t()؇ӹKx.EwUJ5t#t/aUb+{2nF #xth v=wQ~4p.Y <4Es64ԄT ҅áՔS#JVNIIh9Q6a_'4g޾3'UK!5 l`XZanb }v &/-~@[ڞ$_*!<<$qh^ yǓ (9ï1pz+-xv3a]ð*bUk[e5}-LW! ,H*\ȰÇ` {}#؋VZh$x /{!' TYpcė0cʜI3濄E,xњH*]`I @ Y;)PAO۴ٳhh("0%ڴxM[XBÖʒgCYiȊ%S| `UY ZΰcT=П?2A!m+ y3@_3 !DV 0 K{A*(KV1s_} F_DX͢ka1-u&Qހi֟="r $e rkJh0rUd+ ?e4a,B/=KclGP_ӡ"Nd@*#u;F؄ E$A9Q R FfXE$}2(ctjXƠs^"#ajgݢktaqXiOkh),Vɐ0@X6X΅ { cXAYH.idjiYh'ªY7}O@Z粠BIUdi~ itJ99PJa:6WޣjM)xFW%40`N0y=@H@k$d1x~B+cO/ZD+Z{H#??KbDAlI3"Fx!(TL.4X?a1`[jZD8CkwϛAhoR-P৚ vUkòMG&50a %P%?A[O_TQ*A eP=kxjj1/{yPfͧŋUbFvz K ^ MƴRՃQFvsi}h3+ _A22lD3>C@a_ iAN88ǁq~ᏇN9B06ILu`5;3eTX"ʉVq)YC0@QjSu+(j?|:9cF:.xaӠ\pqkoA()a@իvTMX'4ǑDML#KE3  V{x(X\P\(LBxD͑Ru,ˊ!"@JFwPdz?pʆdd.*md+ȷ4Qf@FczA  ~qGUIDmJaizj dW.2@d:AZ X[ ء4svj-(E-VAptPXB18'rtx~c++E1%Rre 4܆j%(к@*4ja0Jl"qPi3K>X#37rY/<F@1@'3 ӲZ ׮lpZHȭcf=dpX0h!iV/uɅUaBbVDežn$(|4*Oq@1`WK Yb_A$s-rJàA(UMҕ $e3<4OغL xTNH0f<fK&h ΪYͮ+@G (-)(<}n2%k"*p5$=*u>Ы|BcY2lX[8R]hܻO(цX1fw=A5- EpMbWd+ĤVn\R悤J7E%\{A^'!8L؟p$(^վ4ً^Ha 3)@wqtڄ)emi0m0\Vl?MfiQZE4?;2٣@ϋ{Q9`^Bgnpv3ZwbM(h:#FMf`Z3qBlaҬhkt 'Z03K6N8q lcDp8(ώA$-?-H{LUoiܣ(Di \d鲴z35f`N{eṕV+|ė\2_F`6Zوx2KLv#j V3;ɑ1Tz.I[҄,\*ir "Q .?6z&$e0Ɏ2)=L/ȥ95MJ$S%).ʧJ(dm|'7 qןčcsV'!6O(}ie"&ua/MNI_87oޟ 3Xhw?y,A!ocTf&DVcb&NX(UaGdc@~wIYJ?g%q!W$It):6)a6! It2-D7[:]z] Ђ" ejLpA.L (-=Gbh<4Nb}98X pNApIdb=* us 12Jc 1;c'Ц,e+ Q/=5$D 4[PF [Za D5C x%c$im>5Ƈ40(1oc)̗ld"eu^se2 J5qLa +~_[cY:2Ws^ڥ3t99Z$ cq 4Ӡc=ea-Iۙb&ygHŠ>B0SqY][Jv#,aO5]xeHWx㎙hUizԠ5>S/ &2&|CNTFxjꉧm4՘r3f$pBU?ȳj'g2~ ʤ 2)A(@6EGm P. MT-1bX"-8*ɉ:1hbLn_ f@|n-VI01`sZ7fC'9R+ĩǩ<ǘ=b.~ zib/)\7dy:E',1uE>dXLr87Ja Q/*ĉ|5,+x.18T| *K`Msm(͂:װ ( Xۉ$c{F}lXPK*(/Cab=([S9糮-K#|z.,q)Iwsۊ%Ъ^S;nCǥ%cj$+M̜\bJ7=t=LW"V7}Z^Wچ?JGĭrCbg\%mH,@1e]1L΅'i"vwEв4wrq\'0!3@ωqq\d.q 0#va+H,$DFo'AOigVgA_醣D!tD6 2D.aj~Ğ#31ZYPJKgH K}UBvEc6t5Q uP Xz\cС| w-ߵ2>b" ;d!2whRC7U*mxRAti wG5͂!9M%RT vsʃD= q/S`A},}2v&2J?1qA!ȁ!!󨜖]`a.}{ҬDK'-@V`4Ӂ-amq*\}ZI|UAz愀f6]4[,5q1>J9˝f+E0EȪJ8JiHCkmA\3'j<#_,lM%(m N}-ckp).ZkW7@,K>I rP sO +FuFE4 -)ަ~Ba2,*J$#Wb1t60ULx%2E{!I=Ɓ,l6$bh# |`9$K,/ v! ,H*\ȰÇK=[1Gg՚Y7EM*T˗0cʔkIZh, :ѣHipbE2ZUXVOQQٳh=UUR2^Xx[PԸ1_[$]̸C5.BLX :Ym 陓fLx1WKjh,](YL ^Ϟof:FC2:K r<.9=dSz[F?7X5&_PZsO~JAAXeb!u fȗ?kx+ihbga4с"&V85@t!c2W'Q53 ud $BZLA,IMOY$v6eD,6$&w =Fڌ3_AEIPXEAв=eTVpbgY2U Fp"EdjfRJ 9@MnpŕQ`yv@ zIMfaѡT6&8v P-ghY$"Xх\HKQ ʬ-'Pۢv=Ĭ/b_\'[bߦ'/,)Wy-1˺Z  7aT־'mpd>4]/A+T' b-_)*(V-5-sl^-9L`Nk|\ѵ\tTԌ5!`A=UW/2ձuUDO]5ۍgr hٓjtEHe[Iڌ'd)钼Ё*\r -縅1%Ȣ=@YI%jG.Ag!=?e@9/C@4 Il>s:s{.njt{[7g)FOU&3Q% )Xbg PhKR:lF$V'sqh" "k aHq),K\5UV0 pcꑓ\vޢ&TiFS a2:"c40W s>#4 #zLQ yƻ"^ %G V ʇ>NyCőuQ H0x]4,6Uİx9E+#tIP 2"$5{N/ hJB +dAE-HъZL+4˅ܱ wlP{'`@Z{ $ GUbͧP)bK2Z#fTtԧj2$:iZ+\@ ʃPڏؠtX|R0' bN#Vy hB h¹Tbx%-QJ[a1ZMKY'?Y-A00\IQѨWsX2 LYI)pީUfX,hih6BG8M8*V fVjw)$%҅1`HǖA gUlص`4?*dU6KZH/|Q\ Z22s bE/C^a`f;PӰ1׸\H/8G nk aXbC!'F>Իb0f\&NU|. KEn 'QA Eĥ*c.vj@,p[ j?VPruvl*:]CxajKc'xaˏEjl%Z!‹&}>ЌA@`*J dBwsQko<5 :&`h%N0[\<֕]>Ea+vi "2jܲUgk*Jٳ,|mF0mhte XR`%b祇_ĩשsM>Ć3tN}GR @pM=auR' W.d]+FoEQSԤ}s4_' ^-t!ÌbV~.~jBcE j)9].!\41B ԥNcc=@r #Ei4g6t cJbˊ4!P|$-?$l0~91dde8   &gQ#f !0>ZťMXb'WiPNY0!=U #*sb(#nQ4UZab W*[I&}?[8R; R1j,0o1TTW/QB#5k1>yb3Fzx6XPf3ATxFMb'2TkR2v{1nE#t>8pDe~ar@HuT3r ya7rHTr5m]KГ((Y 6@x5XYNk]ȇU6XD^4^l2r b.cI1 GdU?,ĦQW*PxXsh4qM)owh -T1P7XV3SU Q?qX:}b)A&{GnUAߣvne(Ђ1)2k I@Gs l@ #r(rcrc d@F"j2 2 d0"!A<)NQl 0~C "ouh*=[PaZ zp!7#WVG"E.oh:rmDR'6s S&'I0$2Ge?"pORCa a;2ؖpEAR 0R$c?6 (6uB+csr:wTW?+@Zrsi*rPYRfRCmq*|C/IzJ%|IwA)7_6!(9/ZFFEF"ЁBiV7ՅYŚ1 'Yj7Y!RB1zj,'yS!*Pa&tHX@wGN*j]jcya0eh?G[0)'EosgC-E B`6dtBH.a!E&%ҍP_5N0f8HbrEbovU:C@ g%f; GR9VR ZTvQՂom78#gI9%HFH 223Pc){bcaK1dQZ0]4^wQ!BE{cNQ , I~iFo$aO; 43qy>tСg؆(ѮI:ßXcQ %Dt@ Pq5USvj:Ky# !T?q'[ Y]X3T_bN4Za5)As:S g KᰰybX-kV&WQ` W+ڊh1hN;>Jx0ʗ0cʜ/Gϟ@O Jў rMGJPS 2BW"XhS׳h}r۠970LA 'Է#d׮BR /S+pb\+7VƱ6I &5{rS "^X{}YD]#,p(ȣG%<{mx`? Sӏd1tWOڢ _?J!Pw%b IFP~-xc-D sPGI(bI0_b7cDMؙt5Rbc G(YIMx8S_gK" @,MK, dux$#^8X"RG5n @FGHt ucIfd})'ECiBVc}G߃w9ʐ (|i3OP@A9:ԧL&ku0 vt"1)r2 v iZ6X;,-k6h$K(q-{Pwo 2e`wD+CB*#nZX| ?PU|?n0!͌^f{lQ غ8MO&02_De6ZX#\b 1k2;?Q,0*"qd(V/?T^c'[  r&rJ9@ꡛ\ I"!d)ԠNa Hǡ=R3 j `t.Idt{A`.rHBA5-}NI(U6hJ l=MgVM L:D CJ%A̢ )"Lnu/"*w44AV+d.\!9 K-j465?pٙ,6$ߩZv̄P'oeE0%W|J)aCbu5d/ɴfU[p8G%O(,RjIK{y 1JjyU)tI%_?0Nz%W6Z/!j(rٚ tg%^eq Q"~H$3=(.Xy!]H'K2BY-^RṼq@j['0U b[ک[oRX d8/YC`$zscKGg62T$UK mYep,}3M":j{f[b!Di(9bd_=M%%vbrCk@}Nֆ2 :CC! +X#F'U$[DXp9di, JX$ XqYKN/R!Y㩒Ùnb^S? yewJ f Xg$hB4VWz@q즇sB`C6-WFk$PCH D L̪HJC['$jYoY|CY%XU ;-'}ϨU$ư^wG[ջȫyG'ldqMiS `P}(rD"I Jd> '?L=}%#1v*X=òSG2FV*Q.ۅӷ(>t6(ff=fY`c&Tsi1<<4jG2=tGO Kc8f[{7y g Wl_ 18`rECfMS#Pkx~R#0"C38W惍bz("{GhvsD/8b\x-"!'qBa 6?у| : (!P#>$RQ /H1"bL9>4# h7i"d2* 6"0]"(5]c g\(Wqw}ra4ca? gq8xwB6ThnB@W cDte@!#=d %% tIf{$s!!WCH} a1h.sz7-f83B f€\ tk'!@cqËAsƕ.dq*MDR8*}ʓS6t$'ALyBx8594:2t'iD h+gR! ,! ,! ,! ,! ,! ,! ,! ,! ,! ,! ,H*\ȰÇ#J,x`EȱǏ C9ɓ(S\/7 5ֽ.lɳϟ+3Jё2LSMGJBjգN_jBvU-;HڵۮdђE Y-d}˷Qo !d ǐ{[x#kތ@0RkU= ̨mLظs_-t W&"Zu+;ˣK'hK熵X'];K^{ëO cm %a[ұztc߁%XN QSqZa Mug!!{RK+~h"H5UAlgR'XU=ሣ<N@6H#[B:bL,@I)^{!2ZlrgRJ/qfZь]fFYcԓm"@:^$EB-V}i?-^3iA`YޝZB?&T8R`e[P[KF`R^L48 RE1eÑD6kh]F7ߐ@mVgڋWSIط$#e` !@4eI5k .E;p%\Ճ BigRVlb `EP[kyvK?lPS-z,c6Ve{![>$!].1QN̙cmpdE=r!.RsӞegMfZ#EI2}Eb|9R$K8:Tޙ)I˚  IDV6E blevgKa8w`&lYe(FB|$őN2?Q ::(4M&aIϹ(X vQ c)62^CHhAjeyw1"/q>64"&@y,,.YhU0g6QAN*K9g|`4 ;ɞ2mPÓw+.RL4|/[pZ I5 j6:|Q.y ׮ǝ"!y]2U & ٤W!]3 ̨;XXA8˧} T♫pI f03^f @mr-3&tcOSsɫ@,8(H բ\CB[6[f[Y($8E w,je w^iy!X:L emŴB>Y-XfYM7; l"ҩȼclQ2gâkHm$CNZP;J}bt+jb] Tf{Ln$X<`.98-(WlhabdNZ""[ 霿Հ >'eG":~N?h5E~+Be,=OVtX dD1ܵ{' Ub]hZ-xr.ƀe2Y0(|B4|h|M<'Yz0ed);#o'C0Wr n]b|5SwqN(vDX&ce=GB3$8`b`IwpX5Rty!4sraR'w%zw4R>h(degD.v5(ST6Sw „-s'#a&=D [;*t1csV%;1̲t+vpŵ(! 8:fd4^Xeb$`/$C$#X !B%Q2Dca GQ7fp'Ds@Dr22nl:QS ( }<wjs~c$K{au0KYs 2gܖqW#GN4f ,gG1rEw3btpG/6.a ?P7su1yD,E,Y!S3eP:݃ qWwu٘4#T؀2*3FV()D1p%ۆD8f uҋ8t3xgt4N3>OMPV=3%xqQD%7f'7,sV]yh3 dAj|=C![1-A #'fpxy0iEO*'g@_ 441p7ȒDYE6'|Whx1VvAHL$yRgy0'pɂKs HHȒrpcG؅k63%|ǗGN7;dr40d9v16yTONfbiUQ#8 0GnۉG.#ۘKjӝ8e,xpqd>lQ Z4d{5O"FB [ gy+DE,8NBUr + =s873h3~ .3yuN-'xM0?6Q|(Z(𡫸Icvy)mGbe8$[Ε@4efY`y3c7eנ5LxV g]4e&MRɣR _G IsV.~mISFYrlr )nZk`;"}$/`AMb>|ŒѸ?餱lܣLaٷ7ʡV=\hOt_B)( aq1vrD:1#Z:jfH2/;8fJXu61\4V%rZxMXF&l*u~T3_lB !TҮ%v*U'&kjR jys'r@'B3}sKs=eFl;!: * I j@ Shpho:'٦d>57Ca- ;mZ!#l&v޲R'9k4y !B&hxqpxm%5)/^il5ӊ:Kj֮q2H¶YjIbnsZчr].ˤՖh[~ YmoTfupJTv%enc lɢ)FY\,؈R2vú˶*ET;f"B{]"d:X+pRc@"l<;Tǡ:D-f<-w" 7ڶtGB 4];xwII6a ]VQ7Ѿ7scJPޅ+/ vA[ckfKځ,I틬{w NZK:?(k3ݴs`TJm"2|Q q Ѥ`,[ܷ Ljw-)~I7"YR.ܽlABTy Zd~hR3iĀ^[:o \V_\hSQѓ=B4JjUNw{'(_rH|vT*yneM$G3 qe¸QqͅWn^I=YmVZn钃 0V~)m~u%) mܵ@k7“jmJN!F.C۽~2$$ZZ?N~nF]eai'uMޖ|$ցޱ[9=3MШ޺>4^[;۞^횩obk ^o.pbרc~}SHr2ݦ7]z#A>`~͆'.i MVXWX?UO`bRoymcna(nty!q|_~` ?=}?k;`(>'sǣ s)L ԡξG:ѷ;-ۘ<\<ŇuZӃ\S5i!ǔanlㅌ]`Ve)J-FDT geTr}&jL|CU& a}Ԗ/j.v!pyֵQ[P*`ؗa>#=*Z tZug7ګ{*3*n&O?Ί (;3-Ŷd' Gml1ǡnXȈSZ)؜U)MHێ[)%*+v n&"l>U"GDGowȖCReY h$/1]u(r7~=lъOUt -q9M-DDycpFRJ4 g#B8+5-ƃZ@UhfGj{P1:'&$[r.U`Kh&S #4q99XSF"Su0-3dI4$1 vy!^R1m~RMoP$]5@*u1E8+m&f%qcƔZ,u_1<_5A` &;iltgGXf@AQ65~s@YD+"X?Z`R8L6 ӲZw\Bv>C'#*Y"cETq9s%! RIyd47bPUr-I `1B 3ZRrj6f%'K|d r&^VL5` !tA3d>7L"#PSL}6FY%^tMmH[/[Uq!(C r01hV ˗B=4qhxbs1rd4cE =1'!y1I4[@1!yUg IUAg9.}P#*<%b3" !F&)6'UYEaˇRJM'L'i)YV|8`f6jfGkrrY韈a.9d6`g"R8,9(*qEYR'}SPʕ*Q9@ӀYQ!G7n%mFsW^2/f6p)zE,xeLBd1&A0q7pk2Bʆ3EMb2(lx#Tci=Mm'0J)]wh6j0e E 6~N2v~jo")}Bߢ<1Jo'zphAkJwWa/*j6BezWjKQ6mfG{Rxa17)%7hfyIr& 1j0lalڥE'Jx/Si_J[ysAjw]%zm|jHs"zY4s/rEA!:a*w$9C$]qjz|0l+JykYǡQV_@Q!jm'!#1TYPb7j 1SI=W'&"DY Y$8^{6W:YGP' v:}B\J$Z&(D26[I* rzUAaԦu rF85w1zCy1R  [z6hPUb2U%) 6ǹs-:4}F%1z`XFR#xbu$r k{+A-%-+f|e _69U*n%hJ$gP%52[nk$Bq9uCL7)$YG$cz@YW2+:9C*LٺR۾Ų :fڰРiktu~ob-eG蔽 Y5"RkD8Jibh^4puo)7YE[<ӂ]r4zrA` h_{?ܬYX)vw2cQ?lGy:fٟ(սaZm:UW^zJ$ֳfZ5'T\먝 Hs3C"8&|HQJ2Lq"Ur*#&0 ʈjWQ< /!q8[hi=yw<|ًq!Դ!Pum'ST8"Hz_of_$ؾ/ +0 &eo޼sGǟT3G#c@ @kSU*L74pbɱE'['^lAn{j:ԥۤ,bm9F+'LD-r;pAlڻ#1 F&X+fF'`ۨ.D S˰ûI+#.Z1$QךDRL jyEץl*'^e =:lNvVomfܺ*:|੆~Ͱ&"HS!s7@Ӝ,8Ѳy3sy{h~t'6g ;ZKh"̐mH 6ǭ[BǼ@ȷ̮R;aY>VacP'rcD^97z+m mî8fV^ >E:|1G@ލJdb'~ ڌ>jP$YЃ:^-q.\q.fJq 65߭-+tȭ聋iG^.^ }xn(|%n /ݲ,rr gZȞ6Ԏ8]J0i)2S{xT!8nZ}a(,F#=#~|.Z_`~|BY`/\O4YO7RpnWcGmI}]$7U~^KP i .F3 b#I5OTE(w_K֜^™ØT1&PKheN>E>۫yZ\gNǗHgZ_u.phw%jf!iQLRX(?"~o@8c/hՖQ&*ZxfxO@Р@ {H M4iɔ1K&-5 !#Gy2mq?5męSN=}YҤ_EZRH*uڔQS5RBɥLdjbTM#]46z4śWo^"mdӢ75\TÅ3V<8;Z_[M7-|<]_jmH[#iŝ[n;aBE.VK+Q\XM3;{FE{}xG~z'Gd_fHL3.uIQ~Ш"mEĎ{hjI`dzl2PY(vzJCr7ŚsILd !^ꤛJ2`cKBcg.IDuoRIR&-*Ͱ Ҟ ># AڲZrވk3C:͜RmCR{NH~CýFnM/q9Dӂ)oQ @^ !y͖MPmi3'7b F:% v`{z'cA]¼ jrKwT {ci~&'6h jĪpm)66l%mE6H&ҚҒ/Isk 'EIA1D%<ŴkĘ?Җ?A æҗ*lخbFҘYɟg>2*.$#=ؑ!r}HVBY$饉MxO;q BuJڰ$UT‖j*l12zJG N\hY2eu.~oϐͰri"هc:`U*MJW|S\!~5!ʚ=(r$`A&2Q9 š4=Azįwh0DNl`lDI; b4LvOC꠸X䮹!Շ${j21k.&4&-ʱZ)P{[qIp=!)ImImqWm(~[]O i[CժYpit)~ ?j(]aj2L^ lŠJ$p r5hߊskDgPQ*Z/L1|'8Z?qf x2L2]ͪ +l5imp+|>4FmZ9(:[֯Ǭ6rDըKz 6@xt@x.^H &(\ٵ5CSU\[$du;="嬭b%Rb+Pn5Z`;/g;ecj#'|JWoSFgǗ[87fA MMФ\idYc~U v+JUzǰ R81M X8l{>C$ks zܦ,Idlktz3k( @a0wgiF{G2$FN]?!!qX:kw6{Rsx&H2< :vF.f;E E@saEU'}n7fclLEςu(V$C7B3{x!\.*9|03.I67*?a0?+ ('5xVYcoV)*GyV a$`p+8#4!3XՈGa${pZ3 [ [P~x&otA$.rU[t(!6Vr$Ge_tUƈag4HB9V@c=<\V&m+x3?A\3H UUr0C#r_Fe1Gc4af-OhFxf;Qa_qđzM6LV |"d{Nhj|GwnXa` 4i7(0mhC’%b&Y8]Madqg!/ǸIncVYF nE?6z2 !B!g'I35Ip @Q3iP$>btac 1 X!xry4WiRp/zE1iuv6xie 05Vivf{,vu{>(QcV"Q9OeFʹg `)! Hm%>~a6Y+3mQ4Q{B)5\w :AWDF?8ifYZaj k# r~?c% n)jeZA繓tIqdYtn v{!2$<(\1N]H4z%?2 Ziǥ  .%%,fK,k,JMTyC)F"!yڶ7a w[+A#f#$:ZGB92rA_2nRI"c:sXizrDXf-@𶠛 _6;ZD!,ʡi橘qr(bMCqS`t5Vq'dtDu7D(i.IH p&9نМ3gYx<6pa&4W&! $X(z۸V{xH%660s`F88\zM,yc!Iќ, 39Yt*c99 0X 9sa  )R\L¯9v nzijIF1mFy"h5 }qIPjMV &!sY Y[Ie=8bY1bIʫۖ%y"UbMfЁMQ.67Xy'[rv#z;v[C'Tk- %&KQ}ː Q(i!1F)Zt1 6𼔉Rc&D6sR" PK 9}h@j;VN>yZ,ɤ-.G(5i`] cΣZ7) {H1r;- \ybJK-Ij:0ReG'k:A[20qZJT|t [#'" =e7 ^+vxؠՒu5Yg5m[0!Re+G3lҭG5R1J|+6˜"ht$ J>66bæq:@D.;1x)G.;jcJbkǛ \U;rш>%, 4uvH7 ak͘ cb3 0ЀJl ;R vDCHBXNKYS'LW0.D]1u\X 2 ܬdx% ڻ)1Hli g f n 1I 1a735{"n\I CHѧvA!D@DRР7#S@])$BJ2՚})"Xu|[]_L]Gav,֍,kw8ĵz ١-5׃u$4%90|*$z"d"h7ә*1H"+{ PHY__e=kF<֬b*ò$Uw8QPyi~?@P\H8GK+r  Yw %& @^p{+,5RAkf? >DcP-b!zv mA'5RST2vqlM(iJMMNёsB,AMAJDJ% Yw=KاW~5YKk3{Yg&OXkNu`%+# G3|`CHQ n..,\l)(?(HA. [d@z%2'i*r2D"M$Bn~i?BG+bC:5 ^ EG8 nbIvXq7%{狛(.iGA^J= M(8kIfXvY\" (a:XIgs59-ָEяVd'd^Zpe-'ZOD#B!Vb3LF i$"{@u\9A rTGeבЃ!$Ɨ,aD=1 \@k-2SQI2Bh"XV4$flE8GGa2TIIm)?s%L x]4(p CM7yIMv#I9M;X1 R#=^pv%q>suj97vCn c[%W_  tjRIiŌޤ3o82Fz2EwUe3̡}A#)Q&y@H!NJ%V;ZYXꮗYYb ]j^/˟!sb&.Qb.qK& 'ĦҊaqeۘSVIb1}t~ 9K_b8t |EHˋȷM-#;㴸i}ֈ@r. q?DMɈFGRQf&|ĦΈ8&/qJK[?A.w' nM73<"Sur&k?)ȑ%('(97!>ʊL-S!l2cb8jXuc$;aČ}_Vԃw>镃+;[8#sDs[$e"'tsulBns K Ym/ԚiZM)({XPJv)cTqt=R}-ai%b(Dll1PR전 .p%LĠhtHy4h'3]GNo$Vfo+dw sGOQvYç^|l bGsq+x\!7|P0Cu)o8X?վJv8.H q18=ћG3Q , TicbܹE= jX6fi ):/P ̚ )*+)@ s@Ê 齩4 BXC)gcȼ!=[14 Twk/ÿ,$DCQX}1 ,!D@i*<FBvc7>L7x10 <^%C| )Y_/Z:M4;@ܓ .qwAEFۣ)|={ 8"s:")IU př%V`v>d<-i%W}eax0*Te;tխtۉG0W CkQaBrIVW NKC}Kyc YxYstCXyPsaKrC:8*E䐠ğmXrĝ5@eٮQ|c<;cR@=m>\9 YdUU.q%*}L $?JَTtWM@B5VE-)~h*}D ѥr,ӌAX"\yuE,ҕ|#jt؝MH Ö 2ރGxs,u^4?} {(_E\ύ]#"[ETuDH m@#Lu˝cm3ౄSE`_?lSWZO+WL ΊNO+ޅzRKl_ _ .9VaN _N`QTI)"d Si]F#8-fea&h| [B]eѾbi޸V3ӀIZ&A"╆=1AcucL Q10;>C&Dh!P ⠾ڈ%JMvs,Ҡã`L޿z؄Qȳ YrePL աAQ3_n Tc Lq1+\׻Yi:0eб6$HrVM C0iVT4yLvB)D|MSk)/5 Qe/H~"OSlRNIdd,d T!>ATӓefi *IztĝeⰤC-X#\jU[ h忙jc9dz`G~jBI= zhXq'겦]3gQ Å,"k3-d݌-IKÖ`Y+p3ݥlMi`H`+XlDinR߁ 9lmm}&(±86kQA\ ecޅL$nDV^27 cyvuQ`nqQ @ FoZ9s~PNbTf͒HސŊz &p&L:j\WBt9&O`! ,P?H*\ȰÇ#6@{ -8P@|dŊ& R_H0cʜI͛8a[S F=ܹ3@)$ӧPJ/W fW_%vٳhӪy5(\%ڻxI?؉Ӧi\~q$w I.-޺gQ$I z4ϠCxZ4E)ZiڅѸsnjKz2.\SON*K?SG7νѲ-|&vTV˗ćchq'FSm]v  S|FK^pEIx؈d3&lRz FmW#"4_ߎٴK$գ 1ؑrHfZH3d~E|6VieNX yfM6}-(\yD"J=;Qi]i93}(\-٣}f#HxRISxVjCԲZ_bhy8;|ܗ\)cz_Z&\jAC( ;5Ω~f:$]7t $]V{)`pjIa؄!~D6_^xG:dYD)C1wKԛl"mi8 =.jŊkL+2MN=%۵/Ή5Ϋ]0UPl}j#=vbt: '=]%@NGQo4'~ߏ}ZU]?Jp[Lp?vBA *ͭ fPI(jmB% @i-BG`LJףau(!<rMwbƣ5 @M:&&X\|` yoT:و8S㮽YW=n%(pPwR?~]/+Bz\XCғYdK;`4cݮ+`($vx "ե/i(Rb f!KAG!A>Ӊ}s>hMJ~DuhC&i: F" qgz%cLiV[ ځ~>QJ?Sa%rwA+Q1aG-q{A e h0Q &X*TX#EzE)WuMsY.hYjH!R; g([-t*0P~AoaxKbieYb!CFPx$(\O|;g9(Jg9gr C/>4pH{d% poYQp* !zU%ҍ X sEEN[41G 'B(>"ri 2%*QLuux N#6[o/Av^X32$2bR`'Mt3e,}v!(SUY}{9æxn_!HģU":7X(: Hc*pG89C ! uaM4nG.(pyQ9gxk#zI/QYQ٤= e] A{(=0Y33,|"N C"6W;"Zv6i9V%!r#cp9\EP~M0>% \LbO_X,aFVyVg4P W^)dboW"lNF7/Awzx%.G1$=Q# 6jBX)X9zXjD&5-=k;Dh'{Y+5W466wu32؃Qf5p)]ZX\$p_*`>(tܣK>b*>ʗ)yYfmY8i|`,aek9++r1?Dтwg)>SEl>WHIICMi?(BQIC\;"[bsu#bc"/"4tIJ*#"sȈ y0A3(m5v<#t맠\uAʫ4R0 U {'D[UR+5É3;cE2eZ4OQ5D4C )rath%e Sq&/I'rjqXCv4K2T3>uʵgEdE_R?B9iYk1ٶ >hIюp>K ) ҪY<.Y粥0EJ34RXd *[`3r~.K c}~#M@ 7 J]I3xh𑸷ø!'9۝c1-1K4ddч=0.$S*0%tfDT< \H !&1_QM-y3}2",¼SK w? TP@V&zsIk%g'Ð=)EIJ۫$k #;t̺6҂O SoM\1GPL]We ~O`C_ZX"n,'usvN)N vB_{Z!YfH;;"`wȸkը{Px35E 7R'׾3ע;AxSF | -}"l]M41(>92+V([gSڪ4+3a1oq04+,P^"ל dRIvQMZ`Yj]ؒxekÉ|8Z݄!*^91F :E Fܦnyb_¥n Jr BPVRE)02*MŒFB^\A*j3ȴ|}JSLw-{-sAiTmݾWܩ ˤ [6yYzipQb{12dʁYNh83uITǗ+3h49l'߮V6m޽}~[2罋4ܫih4 |{ 5%:+˜49=McV'&')kvM\kxpv(<^ &dA 3m+J̞V\&RӤpC6*vц5m#NLz&FFfh7ŲpjE2H)C:B;q,Ri+ƃS&hVie@|G²O* 0LR 6 K )>KRJM7u ~LM$d*l]-لRm#-!(֋lS`S.ڧ4Fz 69 盔QVs@d+v :ee{ M0LZZ55ܼVf* [UMZWթXWdIQL$-#O_aq ѡmfڳM3>rbRHޤzͤ jK.AR9埓tQh(pŝ$\l/U8Y)5SճvUfEuo$62 aԊRsyk'FZqwz6lhT pO3?עVr(t5%̷#1χZ0RQ FÛe 5c٭ )etNWߤN'@LfI7l~걅OD_ۂu &41 kHsSRbhOA$<+%IXxdCU5)dR^I~R-e'hסED8F -~ vԎ--PX/f66toN`o*R+XIS 㣠Yhcd$2 m8iHD-&_?ڱ&|Oi&"ĉ-axmbS <. v )HZY%$-4DBo1K\Z)~cyD^&aUF9$9)e3Lj*ei`֑ܤ5ͦNgJ*W܈ĞB S_QRfE I*6TX>z,/.tH%˗"ViLx)?;VPe%\*`#zPyI "`~I5. j±m:2+><!JL4;큅bvSm+E[Ɩ[TNvr+L$ˬT8Ѫ3lWw(FjbBEcMSfDN9sXE0on$DxjT7[-BkpSG\bm*\래h[< lY̦tX& 0ejM=;"'ZShB\YvC5q9l2 v*YG1QtJP6C[fXuQ"SWh8braұ,]h ~; '"K_.WO M2#q)Z \L%E.'d,\&qBk@n8EMʠ!'3:+q ˄ޘMa!H?,ʙF+6[{&J7lyѪv_:>؆269Y ڕD4eUks e[tSuՉKG|i,29ї"`*K#DP # =2T.;KX::T~eFm۲0md6ımǢKBMi{&Tvɴ|};&HoSKAZ Qf+M;aT/,JIZ\TT@1]dKJ=d,^Qz((lBZ5;ISc&EHxNJCIB8W2W$ic(61؜3 ?zS !qZ,pja#e 4dX4'R/OF=C@n` 1 ~R8? )Z{$fE _ I,^MkVd#BluI[ml֤D'.L`"Qs91u7'k2vXu xI Іb)"x"b;9NH%p?I;;wj,(T!c ([!Xo2&ah mhËpi'! Q{I+'lh[.>T6СO$8tah=٫+i9DҒȈ{ :"%A لm8z1'-p3 Y1 YgX 뱧>}o'茙D!/h>@Rd#k >qmXv9"h4)2q<q/r8l̼,Tiu[W|,yA~Ȋ 7ĥ!|8rdn[`tQ ZhZArT:V`Rh𬄨4C;BCvhR`qd(V0J,6k 'auj W$)QHt v(KuZY-4/Ǫ&P:q?Ȇs Ll`*GN꫁I|#Ŋ;iCz_)~񾻣E_ Hx*רljL] l píݨ*:P? Jd,08p3DK Ǹ"ek,MXD#It9H'ږL軒+SyiK9 R U 5qÌc18>(<P1c8Mqv1qL }QDlnZ!LҒBe'(ѹ*Q=cu3yFlD[EHQ(H.5 SBq P*Lhv&iS0ȨzXu@wPұ?y }c a%O Wܻ&)UP: Fr[sm9[Da]GGPJ .x.(( R OE} .̴zէ; %:[3ATb_lJ 'Q_azӉ-t"y'y80Ʉ dE񧘜7>=\?C'm,eן|=K([4jL9U>u x0тҐh-h}FAS;LpZj[H iBl؄ dT z6FY<Ӹ  ;) b (\q{ĎYiauB| B]Ȩ=u ;k{ o޶J(q8 \`P{׹YA0i2̤])t~MxĒ< 1\ j_XQ w:ӥ 3<_*٤["DX8VQPKOQy+q/jLG ӻl*{`&qq]jCp鈷Mf~)qν9# 8R͙kID[gP ',F2iH?{` *"ũH(ޏVcB="Px2XRǙD܈Jj,`` Tv"Kas{4&cL\MG',Qc07I8 P6]F@RYȷ18d+\AV]3;Hb&8  Ո.xi LaqSU[LvGycpfmT V|]ќ:f06:2h$Oj̍uyH8=!Bz͌zFqq>s@uy q7ǧH ßV2,_y䝚%!,gJǧ"9i{A v h9Qm\9lMl㾓Y_V+0+̾v:1puQ<'vZr Z.1, j6&wjXnԽpgPH|2E`ʡe#^F(;1.HE>b ^YZ~ AծۧeTh[O"*)J"QNV^Dy8/mQ@&D禍3*А0иqڰ" cFb1Ai`Wikf඀L`9=1C>Aҳ1"5G)h|'†MItn}Nǰ2μr~u=ί8@#4S8HSG!ՙXA_m*Q!m0C9YєRq*L] G`/}ZCEUa ,F~5x8jW}jQz}";뇤wOڈHv,L2eTϗ=_!Ĉ'Rňp } I"ʔ*%bt/{ŜYL6'РBvWULв1tIjbUU_JwkJT#K,ڴjr8JhF@MZ幓Lj$*t^h7b)g^Slbb_eӶ48rQܳlЪeg 6=O>זשXC޺S,ѫ?rڒ?dP0srnJ{ Ɖ1k@iM[L4RD! x.mEt/QUٝCKp!6fsTZw)*C'#ؗ 68f~iD#E5C!4XB$AFP硇y"x9&ZmEdPR闍\Kif-h'y6Iq_G!I W&&kۡVd Ң;IdRDZUSۈm}4e- ($ &v'JK*bu)e6?"Sؒ `ymᮺQHM)IC0;/̲k8,Y}?FZ/F4SY#C [1Ǖz/iеv]|rnMcAcX(|e2mR40A ';AvtL+s 4=ϤY_Yk_H^,jDYq5(cZv Ӏ%=}0D NftL:gE=8tx?3)yD&㙋XԪĩ@k>z!f >Ҏ&k2JT;Ȭ E?9zk+@8%jX-/z䧹M *d"ŴtzN<j% 1%py'$ r$ӄl}e( ,$#!1 ,>ڊ8*Ⰸk&0E $BĠ}Gg> ΈkđO.pd E-&Ed/y64 o>L,:dž.}o ;2 -G6rVHHE6<2BKHko6Îur$EI)ɍ2bǼҊE$,Prqc`:R(Q&%g[7c0bs#}˚OgQd_m }%XUXvRy߅B|Jqasa~je6Q=bk2i%(dO;e)9bP9sDVi@I6d ;I`b*AF揜Qp&hM&'6'%r$2dBiRV/^1(A@Q?xff45E܃/Ȗv敀|iV*LZFCIk莲x奣?bBH3ΥROlV؝DCjfxygX2 uZ*ОJZ-[g;|JY![ue&=&0Kko fztJ}&\JlB_QXR6GP#;N밬LɐgsĢ\xur~ÝR:QElbijD"*Bu̖mEbgMre v&E+ 68{V[7lyAH,0^O#= nޓT0[#FSei${&wP=ƺqԯG#NMRT_HpF;Ij(椉1[a(9-F16V0M aԣşоYƺ݉G+Ib WMf=zhcK`\G=zx$0Z?H{DH>x*&WS՟@l61-Ǎ)jE@MC&`~ qc}QX g/[dǜA3#V,dFQ# 5qTM k0RMIO[hI)LNMͰ59&h|'ֶ7U4r?Ȏ1Dj83$P.)N 2$ D zl@uh iVl9Pk-ˁ^59%d UHZQaEldBT4l*v>g͓e4$0@H2QA0[ЁtyG:l*S)MRN<"DVS"EQRdu+B*{n3g{JȠ|S}na#ˢWQNq6 z+(򖵭7hE9{Pnr]P_W Vdz?uVB͗کߠJr1jͽ1(0a5NqGjT.:(DH3qg ˣ(Rpt: )ksMOqr%kH=6vKa!i4|- @-2+1qNE"N]%+P.D3)":aE>K4RV̓wN3*!*L)A/BXQE[A)2xOV7wL!b!6yc2ENC !4t;0>e=Ab"EUTSFC.g(Ch32/Q{b_CcPN3r2UI~S@ @RvwR ƍB@*49[EiVF1)[e' kyr's.@yS'F^s@FeTH?TJqNRuA:A0 RvtRArp(r)#i2^V [=!bFrL?`ar0zk$4en4/Æ9QWFv8*26Rg%@a" sVA1Fp?N3“&+\<-4eC^cNV%rP1E yU'Ŏ mA&BV5E7R |8&aR\$5 r:? /Y<VX;<? >Gs<ǑQ)R1lYzр1?6'0u BLWȜv·'XE\<*J8Oic4[I{Ȗ28)ucAQd#g g$ VVy(i;a/|CD#kt$C=dN?T!k0xs:n9Yq/03")* bZ /bI@\x'D'R2hw[*&)2^;K~A@i"dqK"gA@qZdo`X68z,}#a|b1pB:&vdֺ3ETO=Jw! 4f/1$MYsX~oVrGr LHE/O&a)w?% 5CP:X S/4Iϥ " >ҦV+еbajO0nX{|SfV3F[> .3h Uq0vbQ l=Vvxԉ+i,Ǽ*=:33-ZBeP`4M%KP#C=~RH!KjxH4=LP\9RN=}_ ue=_|󇑩K&mz{Z@Mh=M;fӤmS=Ju|k ʦFwLvw-s]i^N}D|ذru.;zӲãFZ5 "DUV~-zXju:ӲɝiӄMz&ҵSqu=li4UPy !kL>~BvV4H2*k0Ͱg,V '>*vkJ.E﵄"#D>) :d![餿DQH&Mӈ{)H^Dd,-QH;I* I@_J2ޒoBbFPҚj-l67%:B#{dS-90A;8yD443[[1Sn[g3Xa=R.˰liF&2@G5'V*vک$#2ALiSCTwΧZ2n'94D,DK9}7R3a0_u8֐ S.R€J/>*.m;J;M .#ߋf;hr6UMI$eL:z7>½Z^ܰhi;Yc&V"ME[pY1HuKPO6H)5,acV5ldɉm]pGz*|vn0z)&& #ڥ]]Z̻}{ΏG ng?B燰IKOniv01FkGǣPGCpK !=FgIY |t#m&0m`"/͊q"QxĹvN )2 RQ۷[!E$@ iN!^sco&!1Xa>M AK&VmV2r7R){TQ4#L{)/EHQ׬5mKLACK4FΆbFn50Ij^$D^'MCz $)b`90k(\s"=X1RCZ8E}3LVc-f}Ic!;KCϡt qtFa{jA +**bH]>= DAibL-h~]5e4QѬ* ѲA-%`;\00u yɘXv<z#?qE TT""wJv*mjta=PQ%i-G}!cP0ML+ȅ94YE#O"YVKؓDG(U#MK)D9b_\:LӣoZQ f$6"!n~FkOh&%#5s26)I %5 J:JzyYa(H&mˏKa5r茸q B諷!3 (#к6 ɢlsPn@L#& }840҄ 8I:[ MXIbCBuVV,Q2: A9:s8A,Fd$Ok4Yl  %"+!V8 ]1YSpLT (S\c02Iރىؕm\W|2H(ALGTM ݁ 5-W732@@Y? JJ.y $ ˫-圓H72L ;M9 !A@Y47 %JQAJ%a93MvXdBH.Uؼ8O '{QIq dM Ӽb!pڻ:+=CM5=j1_0}>F7ϻJc<).2z "Q*Rdai-g{쀪m_CA=P@K&jnU#Oϴdn /|=rY I3X*H6eӸSs+G4FmhhZ_^8>`*sQq}z ԊVkp1fɑ,M&2h-* i`;*"(=ױ+5!/s.@ mq/\TI(GH^t̊ R%CHhP>ђN.ѐsM}_ T$z>׀\r"l㌤t;ZIf%z \'vMf/#K-<Ӯ^mlQIsx朚LR#ڗpwh:DDەsڬ)n?[uIVW*ƀ 7 XBAcrZ6[_9йU_3x_i{ jHK%x-hA Oy>XH !o% oG{?x"e]OG *noNSոTP4-# EsyL7|\ֳ/f̧'61ra}H)_[ sonї}gv`$$9 Kj}_|R?~Rg<;L~ܗspO62)w7; CCK:n_K\|p=]vEm@V_pR(P`C'Rh"ƌ7r#Ȑ"G, DR4e)ʐ8$Μ:w_5O QŧoV *֬Z*e/alِ-{]W\Vhu-ܸrJpLjտ<!B3:TS4 jRۘ"JQ/scz^w`a}6- qӿ'ϺwVh4j}Om6E7XC7鄚}ZpW+V^Cóo5q+,k4:r_/RR=6PX=іPnw!N@=MvWI5f5b-xDd+hr&PDPmSj U 5B/:(O=U##_yN+OM,>9A>ԏ%Pd hvI&I%ET(BV& UJ ]l6P%&џ{W{jTˆdx5f9wI7bvYl&Y(3ɐIGyՏdf&fzn`.J,gFxRh^|nا}ezj_sr%JBj`~'Gex Gr ߘ@ܕ?AjlsOO.bG?`-F"UH3oaF ikzU t RŰzZje*Q2YgJ+rVw s =&uϱ=gQLiA"o<=zjU`C&cNUm lVc2쳢 # ᝭ݷwjޝ%_y)oO;jȈ{u/cV1k;hDn=?Q$8nlOɱz&fTgI~y? tz&oɞSBlYT~ yfӯjk@d~Q\YCz饳R}ot;n8;]:dHٞTb9]Ra&"<y$EN֙{c Fcu!&'BMԣqڊ8fHX~qʈtҗLl↫Q>06]Hl% ޘѰ) |h̄(42"ɻ ]ػzL0&%?)@$Hc;crnNG)%hM~d&E&΃!2rxaA"C$S4v/X7MYdAvo5&QXU&1PIMho hE+jBv)y@Nc%( h^}Z RBV`Kegt" sұptXvrbD*T@i {0uJstqyGjlkxh&HQ+N=G-C[ql$fĆӬ:k+ev-7K݊<0yېؒzqX=/Tf#^%k}>MZ7KZgeq5ĠdRS?ڝ=WI2, ovI:1!ˡF&d@JDN1{YTӧ)mN ܜpv r6TŹ4kgۜUeQk`c<s A@{WN*޶7t)u>(m 'a!ڭFd)TGJ ToZE,mӧA֦s1lJVp[$5gĠ\>`q“1S"L Ћ \I/PG+`eX ܊bk"Q]O:95r:jeHLo^]F̬{ ZR*ӊn[< E)HQ N8qӷEby_&rl&>POc-k9JJEWF0K_DO "8!AjĴ~(R&@<x%u6]JCQ^aI $d x34D@Tq!',B6 s5S5i]0 `m1a FB|xMA@dHHh/ Q uM+ 0]y '&cFB|"C=XrVcՕ,OFEw!; >wjLwMU&(gb-jX Y@U1=4Hu=ьCJr3.zzcXzԦ]KHqʤP 5!uuQhf]r,)^[d 04C?1{Ed:8Z4SsU4J2ja0"^e OV{w33bf6~.CVb[jaGި Zyq&%ggd[ATB HLSgqZ D(ցun|XBW77hZ#'";|0ɸ<H(3Y2/xV74ZTd?VI#<9map:8uGLoU-vD~6c.JH@hqp:T2EZ"Ifv`4d% Uow|Ckt|\| [TEOj*B_:Hz)F,(=7]fCCyj`PWVgEp]aByT4uXVXXGAfJy'8"8+ԞX5 X|f~ZWTB4@O e[]`Yl;Sf,s$X9c-@|1RxCF%q)6`()c% gtK S5 εbc=b8qDN05 Y 1 eLtj|؇WҔ2>Pw!Ys]rCBfJF5qY:U8 Zԗu|ZےQ(R>69ql%YИHcE/됓Å'QxRphlX!`84?IZ7ty, E~4U[ QsqHF@X]yp{è1"1 WoG?0Il:Ǧ VGX6q/4zf8XA*ssDJÃ^PIZXA/ՍX?:D8zu!Ś-㔤|h'MD80 HMI]0ߨ `b~КI-3*xIv,is%Ycm'C>d> $zu4x7Q KLl3iKB_"N@YsF!@u[xְBMkhQW%qc-q1Ewؤ6@`fǬ,Or q kstv#w5{tncp*Y=tJG#r,&WyW[3I}1WS'ÛFeRZ}s)9Tou+׹4A=Xxӎujt^󻎢ܡ~xaU\kEd:d:SВYM5t);7tj&0zC>Hm 49KxeR--lTFz?="MAT_7dzsk2wиLiIYf!c|CY\Sx=MƟkt ')BrBwEE9:72l5&»V33ZL8PٹHr ~d ʴGUDAڊC) =tSok_Ba3h(̟ LMzۚpR'!ͪ#"$EGMuVn6ȓUJ[gN[+Dpł9(tsS;W1qFae&H)zic J@il 3Kmg%UD8wmHk%gnېp>`Љx%2* |fF4@C9G`n=f ճLOzzLQi k wTp,B;GD%%߄/<"4<ODzF`UѪHJ!!Ter%ĭ=U5!G ."uB鵗c]$ % bZ4)pV PG 2d8 2| HÈFಹj`>2MftéIDz{,8R{u 6u59*VT7O8}LfYʵk]4(U\E˸t}WgU:]_$NU0gW4Stޑ!=vlMHGQ lLQL8V[ZjLke @,n'>]LHXED wݺwdʭZoxAbj]8>lW.ӠAբF# vͻю P.d:9OGU ζ 5ȵCcHͶd_ @Z،L3'J.ėpik7 e]k;DX@ĴôrMs!p7edd +hsSȉx-)aG^)htm}QwA4-1\{W]!=—ENJM҄⯸>dtN1ǺeD7)0DY '6 !A~l 8Y&!z#ݯF,NJW; #]Eaw><0a@Vop=mkh!B=~ W=M5e:Yp_E$04[biM  eHEEjtԖH'0@ 7 VMM3}]w5翫C#ڏU;\[jUЭGŒ%pYq F Z{$QfY&MeN%%G֤.-7gP5S:&վ%삲WSL rA&3ќ_=9Цœ;9gݽ#mׯة*\Gb~0Ҿw_ RJ+ˆ2z(Ӥ? 'i5"b,V(KdV"n -{mz$`2H MZn9QI- 馬.Z2J(%Mn$ D)ʢx „GDG $/N=5ð b{2Ԟ:l(p2Nx3ha+Hd|QՇVGIS͞q $vCmX!(:-mNYH5JV LD3k%,>%˂(Ϸ^ov0#GK&5F v('٤$PCexzȲ.ׂRndiЀ5B,,-MbK*Y̒dx 4@MW=+Axt+ϝlj 1[dX[T.: 9mt^VP7d2RaלZG!ޢ0Ň.՞^K,قVhqUceVa%^}e&7am^#Ym JpmہS,Eh ,5QC򇜊Y~˟!cQW^e(88YT{hr B}(™G}t!r>gӓy$!cNR e'd_$=.z[RFEA R&.j^VVGPkAIɗUȎ_) UG8W cv}XPP' k*qmNO@rGR@B5iA3aJnfoqG,Tiȵ"Hܥ)p VzoqeM ?h A(yR}i6|L~.rD;J.H~{Ԭd}TTŞa_^ 1&njxJ Imea>E$X΄f]#&-xϤD#X#{GgOr9"v"hB`S&9?(Е %0U%A^2ӐM4;L3D(gs*Rl7EU,͡eV Χ*Ye(#`foyծs^W2u'FqkV:-6dWQ)KIaJN8GH%[^zؗ4KXJ6~Ne`Dc"/!!O?YJg'8I' 3 ʥ<ɛ]g+H >ݵB%5 WI71DmCƞ\$\6G, 7PGm,Q+J(GJJ.s:9>G/=r@xC)\Qϵ;涂eiesQa1Xx[fwfBDp'܌=N,KNA M*AUbrລLcpFW3.&GZ!uԢL.q,xSxsQ# 'lb/kډ9;G+9^*1 Y..Ƭ+Hʽik iBo)MduAgc6=83α2\sSOn%Zd =E#+c#7 Gl'}ݾ{a.k;mg<0)ރNCY2'(pv{RKFpjMY#-y80:3s],'v;#hEK}N:дQ&x5w&҅iaQgc^ &54 ڹR;:kV.C ½JzQlndD brax 8D O3?;5A,^R̄|䖱|%/(Η6n}O,K[1P4}Ҋ=)PPch5(]*6RcP&!n!d6az(|mY2@>/V?%"'1&)-迅d#k-/،+¶Z=R?O b:]J2#, A7a.Q.j&6j{7͛R'yH2 Ȧ7J;EA"Z3  Tؕv0krp ⎄x\x';bxx籣^6 +6MxZ´ h.ȴ9#)D#+. B6xzRzDjIc&eTƅQQJ2@55d&jF@mx  & *aPQ+JԄ1)! A8-4!RXC1!  Y &` y\4q@W$UrD[||yp3"PCцXLcacר0ظ5Øلv H Yu6qȒkSsq@ ?ڢ [lӔYQ3ɴ'~|r.Q+` #Ԗ" 8E5!n!0yQ'Ji!CӼ_l˭-=- @Q %f< A.ӄ 4JJQL1:!#<@/+Pȏ0;uZQ((N4aΰ[d %4PDv J ülL#$2qPʌHdc- iB \Ce>1SvzP[l` \)15+ GH&zNLN:gz=r@ e0L b.KP`@ hU9Vȼ"Xq"cL9q+ =Ɯ!# #yпq A5*@5a4a29eKyKQ !Q6[572@K"C bԐBO0{p U{"DW-oBr"t7E !3H`U4N=Տ2:> ROJ\K U#̢hTLy* q תcw!b3@= D{s]"SXFW{-q3[CS:kp{ni2ρ{ xk̰p$լ 0@hA% Ssi8X 9\V=#sV3YQإ4U]iW٤9/ڥUhl\0͞=L!_aT>" R%Xڃe꧶H(5)X}"0pCo q@= D0G9+ T0ωU5ٔ U8:W}ٿpÁP MÈUy7ÀjT]Ĝo1y2A3gtܘv`+Zy ̫O E7Z_#,]*(*V}d*}Ny\gR_ )Җ8ͻb-Aɰ%1 -J} 4ZP_7l FuDDbS ہs597#aG̟-H([-AG{)7yQb5y <*ie_SтQp<*0$%ׄ]za`4.bu Dޮ?ȊH$3X@$ǑU)]L7F2HY˺ _N꩞Xx=6djfR&jfR.N_%c̄/:Fѡcư'S#,zlFɾ^ɎP5KE%뭦lv N%U톎n Qng..F.O$[ۦY]|D 4'ȕnX\Qd5X1D)Iۦn[H̒0m\[pi/d{B5AɈ $I8~!&X Q6.UL0ęU Yn G HM8f'hfd3菁owя[HGR`y!Vl eoZnpЈ / C2b5rX%-)̳8K+/FÎɉcS MbCrN&R2ov_5y?1p;~EPOF% .35֊kCns"lIB \pMG"9 ?u{ش*H|cYd/}@j#L#_'kiewhihIq=&"v4 ?Y&Ip\PY**_FRa5VUYk[kFxe^׊a*'hQS! ,Z0H*\ȰÆF`/⯃^8WłZ0Ó(S\ɲK54yRƁ6_ɳϟ3p $M-"5@ իXuɐk*fK٩ R$Hǣ=2T*ٻxVB08Èd*U)ݢhC F{ Ԍ4ϟ+Ө…l sEDl\9!c$k߮5L^M\ݻsD7Þ__^,4{k? {GOlY ̍k#}[M h l߂F|_2as݀dK]x!e$nb^Q_X!A6 Ym'nWCt)RwwN}Pu4r%{\[Hα蔑 YPAYO6b&&< S_hA[3at%>я$Iݠg[1]uxZYBaq(fXmvVd) 8եt# p~%ZCb(NDH2 R+0:Ņyr(]*YJ-{p[r8uFPi(azcWI,<^@N.x2^ZjCǦ36Tߡ{DkCnZG;-nО|1J6o[E]XCF u==&-V}mԩAi =v f`9ZQ;e_-P=CRFiוyMߵrDځ;krOD#&k2-O-$<;(&oM7vt^ Ժ]*k(U&d"@ =UO+$/'N9Od*OZ QhZ4\g; - =PyK^&P܎lQi¦fv|,䧃c />zzYqF&L ?H*N!i7A- D {0y 7XUd\15$j|@vz qh?BR}83861kѤ;#9m9h@@~&|IhlL s>__WH#i{U)E$$ۉ>_=[g FMDvLg,`Rkxg%8 8'8m ! QpCV3;EӡH%16v2Y 5}lȻ(-jp#3gƚs1tg #t)DbzHjq7^wц?Cev8p ?BQĪ(N RabdΆ\`ڍcȦt^kdVMOTTGwO.thKl.XZ9߂VSCRJUmm3zȤmCi5e>MpᑉZT(E*}E$B5*iP'H5}HAQ[3#$_d #e^L3g6v`:k /tj;d=jMZ gT́i,%M 9nSGX6_) MrG+{uӘYHvܚ k=S /=HamWqbݣKFIfvckRt@]5%Q{KBB8N*Om8:m):@u-C?&ꑷL^-:=" ! K$%{'NeyMAv㜎dC'(F@wD4dFPL PڧS\G$ a^TLDnWA?3? ?fv`x}4P7h+ dXTSA4cA@d<0B^E)hJ"Xft^4M`3v*HT8P>A0 qS4z$ax$?=35B3 spztg#e_$hs8x>\4A6$5hz D7׈y|&.P`i(Ą7d51TUxj'T0 <#jՃ[HNKSTP2wp귂k59qigC_DZ@7?vItgFDcVgqk$5Bfe'QS8Hw?h> SSy$os6D6R8 ńgD4}X?#<)c?~ƈ@c%hQτ`qZV#ㄏ01q=i0X7XߗM(] ?>UHsXkRp=Xf\F:Qt6(9ybhOʦ}495Cx;nƃ^F\?=MYP[>cHqi)!t^_q#}!5"O>~ƣ8N~Q!@]v/!L(1r)N [  ڍpxfV\j;O5:gb tz5V1?x?!I50Rq-$ՓJ}7nINMlJ+|)[N"+3w}8Iڤ g!۲n;1TW+/bBs_t: oC;lsJJn)H"CW'Mr۳y}h3 p$ %{=LӪ fb#: zp EjHfКK:0 ;Y-f*{sc 7[vn'=UP A7`@ccuv2`kGʣ vmZ"*6z<s(ds0GC1\K/p{xf鶧F=eFŤ#KhC?5w#Ihäph_%9[l2*KJAs(QR!\&,AY^afD;:L֓aA655$ t7X&V# -95 PT >E?Q_R#iFӘ[增[n:ܥZi">2$qb\Ѻ0ވ hhʱLXazw~#Xis|-~; ,QUW1ҨʘVy l6ܦ~=}[s(1 pWm5q=iGKfS7.t¤ AٜlbE[*r~O5xa#\q+@'ꮕaAtHA/9'VsQEJIuTuS]G߭vhgKn;Qu~|SQe7 df!~&I9|k4 ` $ ~5&['Ri$1CHX{ \c:_ӫJCt9N+f~bNNc۰v}m8w >QD!zh!F5ї=[jijILZԤE(%}KM4gdB{B4P H!ǢRzF: vjC 5Rm][|=^Rj:M}!A O#&i$94fRn-ЍVHB 6`L(RˤXy NbUM4ZKe?E~ !vitʵ:"R)+to-l0QSaDDzV8״t}-D}}44RmAVةTVF+J1Ɯɑf\UdMWA*m:5~ L%wM6dMoPeZԳ}ବ% vLcV9TMEHo߄[i)(ȭ#YR1j ;LӘ< ŘC#ʚeNw0)17?)Rrd(6踚υy^-p8!ӊصB%wdr!ԣ"pT7m"'9Ҏ#F @b_Pc=d +%*3I3էvyH eI-%2MK`&Co4iђy}"5!:'XQ԰i&bÌثQ.q(w="1R_ْZԎ`|("(L^iRH„(,+ prAYl$La(` 2UY ;$8tی6}aїGt4Q~(M%ek`'p3@)JRGO `bCD)';0"a,9rC4_pMq18 s{3VQ~`4IHRmjE@!/'x@/-# DyBmY ѴѴëyXÊrgQm=hLgd"UˆK2l#l6R"R ,U%x#vv'L´9xb Mlyg?)RFtXC3.ptҺ/q]RY)aRǷUj9V7 Po 3%T&\I46h[5|N DOݯ?LLl:lVϛ) nUT(6hiM(ʳɭYō_'iNkXPsy=stiIF醯,P\-n`E;4bZ؍-:[b\t[",-k#+bz34ɸ!ElNvYhVb}[U)/.&F 2J[TX}}E9%vpNGJ XBIpz64>i^]ژRJicI_.& eٙ=Q拳(&Z:vkp_ %(!vkwImk{"HRJ@LԚ"1{tgkMePJua4-ɹn;W=?4}:G䷫:t=ݻ ɁMm+xwϹM&,9S iH9A>{1s5'${Кqq (Q 11+2-3 A?0 R 7lx1 c>>$vy/qaSxA>T0E,9.{Г@s;N8D2-Xʊb$"E\#U89,OrCID`4@ʄlpOb5Z@<‰":TƱ,R6`Ckl C҉ ջ IIBs"8I𮌋d=~l[ SB jɕu1yT KxDȊcu?!Q̢B&{-(nrJ9I$?J$䦧D$(B&AIh5I*NPՔn`zv$a@[@I+;jfk&NϹ2٤ud/lhA0&?%; ZlNmWTdrLf=МXAE(*QYzkeKĮElWm uӘg@Ԣ1ۂ,J襸0wQba簒 %*ƥJJ2]++]+i]ߠulMxv,iHJƵ֣:-ʹYgD^iX #5s$.nX A:ʫXSk5VgwˤέqJE yR=Ƚ-C;2AEIa/>m5+r%{$VH=.8/Jhcv*(]Pb (Y`+QimOd,U*Ir-H?ڱ%jiЛd#[G.{SNq^Fk)%2)^ع nf9,b\hٖ6i)7T=uN;^ٔ()r13 C5r&3D~9ȴKQP\CL$M /)U'9v,ĕaێ+!1-rA)</J-_MK[=6֦I),9D}TɴYTI梐I2kC4f+J#Pe/aȵtSZ˫&%3I] lEE hV $GW*̯V3= FTELr(L<Oj 9p[4&o2(5<71QBvY"Ų=lGHR%)Tz"`IUQib5i 7Q7uJ,)VL+gCbm̊14V+wIqP2x$Iy+2*$d[!V_+&ۀW9V(VQBTg13LZ^@a {I_h0Ÿe˻Pn+Mš|v}SHrGk/vkzKbPAH(Lb?㪷}]*HJAvBz&ppY'-@hrkVvdSV|ڦdƸyS<]ylgbDCTT%*J i*5-p=~ʹfGX8۽&ʏq[h+(dg0IgJC^1^WQ 4ziɝgEnI!S8XZ}7=W[uS 6-(?knHG(0L~w^o-S^v~s?|>i5-|{~bn{fE%$Q|2'Dlɭ)][WM$8KHu/y2EہϦ1i\O|ّ;_qvi(g5wbdq8Mb%m-b\^536&eV5pj9h)X@b6c &yE a4-%mc)<VB9U>g!ӄ"b&"ZI"]2&oVd}EutjfTDNXH`Bt4BJ8xq:f[A``44n D\Qxe&z1WA2#4 ~XRB5˃zT)5I͕+.ԇ,t*ShS *62_c5:UEdBWRGq!yGt2S]Q]jڃYL"pRDvF3fCpyvye6gg GRVY0:?ƒ&j45z#$+g#&)-g~(`Tf&WTF!+tYEJ /ݓ'#.&nVmZ0(~eH've&Y#d+ᕤ>V B+48L*XDF E8\i Su.5 ?dqbĉq.''&j[K Q],֝o6drUw#w"nOade%)nXA0y,eVi0IFGŽsH0!BfhOa pK t=Иv~V+y276q2#?Qa;13}J\t= @c*eAdHy+dBJxW&(v_YqA]!$gd63`V9vH1Qlqh#+E$Hu^Jޢӛ:}I7L+S&Ւ(7Z{(z45 PO55CMtIh}$`isL-sʑ+ t HUZ^)_׬TcYydT&%udZ#Az)n*2UC)YgR1̈Z}a(hU r=4kQmmSJ;QJ*RT*XҮ1Drz[SVub%EHQ>`\c:A*C|BӃCU)^89L4O0]'rl(%Я;QH.N*nZ/4}d\t!‷E+@lPoj{8/'$e9ÜJbeV8zDץ2-z>qiQR:F\CK2DPM f lkƴ*dzed†|:9<5C0(UP 9$pðZU"z,Xhj?SbaTpUCŪl94P;&mR* a_FRxj(UX82?POTNkqݺXkfSr!1aE{6Mvg4pxq~N b֑uS(n"87 }o$ $CPA+^pѧ+ __Dfu"$7w[8W)|,1_*(5wU Ce~2Q-<&47K/%XT~H+_"|CuBAMP7j2qF)]srzf&6,7wܒs(0~s3HC@C%*wa(zwM7q.UU\KYŋ1 +^3>QX[*uc-Z7݊ Zm 3\!_W5whR-: aFp(qkdh08K8IK}FcbSDmcÃE~6sx%]\0\ѡRĽ'-y1ڙZҽ|Thzarד1=}1쁥y؛r-9KZ|TE(y^j)4=dEt:1Wd(hԈ@cJQ4V{?'S~y 6af?xm3Rsa >FIG! jDm)'8SF'n}v,ԡYV 99j{l]=4`(*- ֦M~9]/SqyϒDS>Zi^U£u$3^PjZ PnߑlZgC9908rƲdD%f*6ۄiL_^]:& ecɌͣPc[q\S!jXLtOUp+m@- `DZGݜBҋ[w+syvmr6ODQ]JU Q^w$ i*^_z!&֟ZE6 ` e^ :|s )v1Hg<\.a]zF^)[|!}=@ 3,4$)#B@V#*Rk(*ND&pjg <#!buVkQ -!hԋ4RB ,8;BYE?>r4VdMXۂHs1$26# EN9dQC[2NG&j%E,I$uESH*,;vm2ӻIYULY+AR^KV>[q,%+Vځ)$v_=ImЖu飔6ުX!5-a0Z{Gb$;4I&f.AkS u}v`oBV M& \>].Yb-b?je4scubV/1ibf椟 (:˟)]{R< gv&Cx$^2BYAM;t3(MEKihܛpRQv?q3áNq볹f1tiIHa/^ši"fuJe-d[_þGt wJn1&;mhnm1۞gY{bwh/u?5g}?ؔ֬E}^7.ftBg. 'pd e&c ’$z5d(U$ҋife#EBA7@ dCfAz9L4e'#XTuLHAct^F064ڡ:Q, mᐐU)A3ИHB2?ѵ@Dt.`$WFR&k+E}ΕLNbNɕw`yIӄZ{W禵\Ljȼ.]fhzNx-Hъdh`0P=[QĩA(-?:Tl?!șɣg\T3.-Q+0!O1֣L+ZN01#@0Eu#.]4.ta OQ &F&zCeyaf$򷢠SVE_$ŗ{ MYwjN"+Y_4Z4}FPRd$e|v[=^Qz"MzGgq!]bZ<3Jz/;rHgFI@Ʊ%#[CQ bD/DEM4e1Q<ą#]^NIIF #bgqv$1E9b'pMj Iz&:cc6q 5u=U@ɑCj昁2Ë#%Ş2ҡ3gyE⏩smΐFxR9A77mZJGW&Hv&񑆴tMT*1R+tU |ou[jZ;i,Nk=^~w'w=lb۲9ykeZlիʳljW;ދim6uܮdS; ! ,``H: 6LhE/{|ܨF{oQI)ʜI͛'Jd'A C) PC:ϧP\sU3C R K__h+bWKNݻF9EPE MZo'4@{{#Kr:}b ZXӳ0J2 +Մq'-wfZo@Өvo?>ZJau뷳$9pafSkklz6b ^1T)[dZ iEwQAeQH@dlҘA؂щ"B4J!vAėcQI ~I1*wQLt_W5w"gBeߎduCU6dy fpRa~ ydA%yA10Uf<ٵ@i ~e dϊ9Z}.)_(:T s1&aTK&b, AҊFphi劶@{Q#WLc{ix:MSRqDHEj2a"#DFM5g (B`$-[M&@$k:Tqؑ.(nb\B U< r ~m h/`=V}>$š- -PaF拮3Ygv,H6X'wy?s(FTaS:pX[)ev+~HhXL#1:;2&d6 5?@vHRQd"ff"csڨL,9QbИ4uAY`%vbmbu"++guh I+p8,p)ٗ( K{dz㐬-i*JC֋3Obs7b6xH(c_;݂p 8uxo}H5 XKJ2ҺER=US{<ϔc"gQ5R 2ݓȄ,j]i/J:ub\ @J3w R # NbQW{V43QF4IJ"C2"LNAJ@$9f"-D@/OTWTTU'rv+yW+CC B%P \d.Qd$SFPd%fmW#|vB#HfcH4r|dr+vo.5)6utf"BvW/1z*2>/eAh)sm{J H>:2ri#=DLe)QA/"BTh28#8Ɔ.i4!9b*m)1H3%HH;Z.'J-r, )Q.ma>,ipQ7/B6K1S!Bh4b)e%GrbXmœkPsBpqE#;x\6BEK@X`v$ơs,zSiDb. W9@ッr\6TբA~i >{0eShA0xp;fuEq7vbT$J'Jd?phv*c.w$wuUrOn$Ղ0+SL:%Ym"9FIO!'(fF5lR6P$^[@8$H&X"R39J[ICws%pJBf $$ yrZ"J]ti "j)d378 N%sNɍRre: ciWBKAgv!5z]}tl?rqO>Ō`HhUh1TAE&Q5f&4Y1Q* ~qusu 5h_w&”QPK8$@?Qx2AeqrRi .Xĝ9N`G5U1N)4h;V0#)rvfxN"4dqL ZEɠa'QPllyCSe;=Gychy7blÅLʃGwKƁFv8*pe1Pax2cZ _Q\;f1TOS,6 Z c*nq7&!  ! yzodiwV'*wdrhBM8^qxnJX!V)ʓr=1M>& k@|qI.((@:Qh{mt!JF$ Q߇NEwnwh/ oy "#ęRAJxD"<+UhYk.I}'ȩ%Ra)EK0dQ!kcr`;7KfOl;%NƂNH>'BKMl6; EjZtaF7XDK'(DWH> GEa2Ȱa>9T `,2cgб,[/b!&&5x-LQk=ׄ]p\EśF?&42p{N) RΈp4X4+s{isF]c@-); tY]tL`x\@1?^lw:*X=5 ل)4G1ԩ}N03M RYql5z>D%&?KDtgL|8],  {T_ej1_Iխ.EQ7Pd ;oLvvpX\6.%k^?h&_kkcMqH hR"z8_꽕MFҡ`{qR8"QǮN+@Z /-ff#["xS!KCUI V!TIs5êr?׼Z])2WLTE2꣐?͐yYz VH*?:hM>~ðחb~f!L<cE1{.,+: ^^LXdU"BEɂ) {OBeXS!bޣ>bv3?cqYnܾDbTYƐSszɄX1A>oNcJ}YtWaS]r[.[)$j|oy?--쿧Fft)AS-/%BX/o^l'Ya&?Jg\!vMP/MYvTb-wPB >QD-F4X1BRdZ8"ÌdҔI4b?{ęSNm?D>Х>0JGMT:ƞSXeyz@+D'R!V͜iV^#7AM=X_nB%e*ݩ ԓ8h_Ν=0z MZ1AEM|PLGƝ[f ;A)jn竫fխ_w=W>(F츔O'2uW+,.[e|O4ΖҤSci3ƒQCīǞ0DD쪫Z񇫅J! ~ [Hb-FI D#j N!TThH('AGZ$ʶ#v*,<ʟ+9`M*󠥈 ˰KF0ԉZB)T vɖvfTJ$R J"R͠) QZF1ؑ ~*S[)g0&,}8[,Ve_ܤZE{E,:Jq "]%dyR؆"uɥ!ɘV@ j1QRR*X녘1eH=:˶<(`ދ"[N-:RagL8=X/0dQZqw!:f 0Z~LTݬUnjR Sh[!Ս]y&۳Lמkʆ=MlX;obe mԻ0 ѱ g\f K`r!a%rG *tWg"jMF:ovowtݡ:(`iC7! ,`PH*\ȰA!:D(q୉3jȱǏ  Iɓ( ^\ِE} 3͛8sɳϟiJ( =TѧPJJdŊUjik࿁]~E@٭h-a[iUy{ u9PHB<0ϋ~6MհcoeB ,/_L甋&X-Rban(Ri;7ah)p_+/I*tFXLEa>}yNgf:Ҳ@o^Hܸ穵]mʵ vg&(P+H {efSgKuez=h;MtXqdq{I0;[hcz<=Ĉ[Uhi Ƀ."X@`"'$G 2%Ikh??ncc_s= ډRO_$KS:C2uu=^qA(v/UV7Me؜s@ܹݞzfkjjzzJcbtUh p|%{%f9A'NDTfPX +I3>6d!XA\-`6YLbtj@ ) X؂( ;ƶֻ&cIz$'Z(14.jѹMWoIkA*3”025avLP )%)[\v;{GPsO>ypdVDFjquoeϡ }yRcvi%JFAR9EF#.nRaGOn%l$oT FI&{V}YY[iMOJl!K> F|TY&j)z%Rv¯T-/ gw0ΎV2Jc’+MÎ_z4eS3fЯ̴$6:J,I-vK6cm2 o5';Wg)m7fw^2A&}Y1:“_QVU%9Ryj7Dz0@,c`OKQ. RD4z8g0T,$65g=u iKZ2&vX*m|d!%/Eyv =%Ot"FBDCϱpB64#pE3F?WHRU7 H8fS͑12 5?MK+WG΃]sk1l4R#ZBF?(B4;z[_EP@2W#Z4-8d"w7ld'Q(!HQ4v'oVu|q#< xW$W=] um&1&29҆`[A_6"чDDAρN&,K,&ǡdu|r2ceXv?W)ꃉH222bAxFP:c0N&gαNu="Y`&J]F*u#8 /=[$C ;/Wu&irltR}8-6qLNy~ %!1 ttraFςOOXPnU0rPS%(C ꗋ1EjƓ xNCՖt|3`B [f-6? 5meix1kR,:0@WO!M+2i(r0@lVcbn".0,bP"H{XURS$tMtBx =.$:Cp:[iCP+>FX##8Vbp#P|P9Mt#+5K'vwh~YH@=WQ1NY!1N'`!=qx!i{%d)"f$Jew, NB#Io:!˖‹Эx'jݡlgB28ec*c>QG}RY'eXXaY_Z$enAeE 8WI7K\<}~n~>Q}Q3r.b۵)=C7vciD9rz?yrJ1@+*8ZgT`y8g>h*Wrn2bH?1: p 7'&!·SYHF>yaK`F 0e7~"e7N~<:,C5TSXR.㉏+GvbʟDK^kO;-؄c/UB"ra,)ne7_0r%?5x8%zj,AS;AIMpgtg2%"nYg8 CG'@IuoyZ9TG/kF[r"=H A#233O(byx@_i"`.6K !: vӚϽ1ӉC4>e3gJ6',g>!M!~MԾb Qi''sy5< Aaű_G.<BڿWv=4$MC&g&NM86bk+Uu8ت ?Fh Z0A\kLY8:Sڗ/HǍs IfĄ2<9B U%Vd+6yOy0Nl4F=^>܃%T:^( π'Q DPB >8 L+N$cO-8+ᯆ"=D#ADq%BzGV{;<=D4IѣFڰULdW;ˤ`u8@T^" rɲ/_Eu%BÆ @߃6-Kf{+'έc)t Whvj@T U']Vr"EU5V9̗^(9?m"^ؚxdIx<+In u}]^wnH$- ,)"  3߾ˌB@r23輥oDS_Q0ðld&;;–$)D2cr4m$B,A%K0HD*dV4B1XI71Z'4v4A--PĞnQOI#M lNDdF'u<',p,Hl<0$v%${͢D3Qt "N3tcEWgH3)VaikV-UTV6|]TX65D# X"E)E8mNLZٕ[k'XCdѻ]EMC-ؠHub-BT`MV; 0HI(,5HW%v"BNT Qչ_R(5#j3 d✫UiQm>dҎé[Gܑ]enNFe4꠻gTJf)lQ>mVDA3D/Z4.Z{K=vo|R1ddH贉mrͽX׀)ꔝl'5(2hv|HTL3ﶤ:gbgZ6:l!bH='ǜWEEiGj@-%E1AzB]!V@61^9bh,$fbՊM8-!K:X7V00Br= QX%Mp&r[j(XAE-MY>q)ȗ ;꒞ KqL)Z4GmB2dcWm)j3\r$6Aj0a >6d,= 1 8,Sg!&T(GQjSq=^5O#+h#K:L?&˥%-EBˤEQ5RE}]&FQbSoB M149#Jrtr (]4*6[@fE2Kt;af_7G C'm 죅v%}A!zNȩNsn*UMg6 =ڹ3w7@sl(tƅi"ZQl t2ˡZES ne5'hd=[A\/c3ct٣ЇcbMHJEd9TBSV<HŵOCS ;"Ętؖd}#8BZU#$苽dF*ҫy2h+:GtDA*Rڣ4qD+2%P!=Ox/7)A(8mVg01_`RH"Xxg\Xz Cz*m2A(?Ӳ 17MWeXA}W%ڔo 50kGrl2UQ Vx(;q|l+QĕJ{&d~TBgޔ2)] ̨(T?HUg (R,)Q $}ܳ5{Ḏa&6adx/qKb^S\^B ،bVIݙk/Ҭ* DB[yn>e>]Ʀ(sZ[ /0eLjȵs:Cdi7cq+-MyiD}n[nRcsݬz--wkd2&|۹-*zP\*P{ŝp>UQ)a}Ҭk,"nkx+EY]kڼdn‹MYYyYb; QJ7:Og[ϨQ2&Xm8(N7_$Da OȘvx_kR27 w@ALs9 1w4*LtE9bzOu$Op4;jTBvtOpP-dW+CHXw~ta*<))܃fQLq)!s|Ai Qtf"5+[AvR}G<u5!q^=j"~1$qT+T 1F41osו]vX [4*HrGy9*VWޱ.rBd%xY(y#k CQa5Y;j$1e/۲ d jmWpmXQuQhCZшt!vKvR̦D!jh? ! @ ވD{90N_'oPbaRaqS 0Q;QDk Cبֱ0h0Ow(uaޡ uA6drPאe]|2Dh,h 'q0SJ4dy'djZ4W.XJ A.dgEQ3\Ltu6cln6yRy/ V32*WS1H)nJU !_OrA%Y ?9%?4 dQ,X00r9AT-X&W1aASV:L23aL}}ADZ'$[?C^{geYGuWs^EN'YQ`A,@;7)0H\v'Pi{* V 2 Akks|0<6OQW IBwW:hb;q fô *KyFQIU?E8,Cɒg9l]8cŸS=Ra"IJeb)1=4UyZ&3c]м#Xpz}D{ZieuaEi{Y9Ƕ?D1W1 {%qˁ;˟m̻%QHp*ߛuh\)2+&V{DŽUn"~O¤@%s![1! a^ wme]rĦzV.ͧo[&c0 N{a>6A1xs{[gZrZ]pRR\GZH6Ѻ='~aҒ%wf^A4RAfĔQ j.3d "lKj1I16q D,W?+>0 kˣ%㠾!Lr!shq k/f)ВXǯ«GԼ#uY@N3!Yci,+SqI8/QgUdPxCi$mB~7fأi fa &JҐnQ3^Evtt"F,ʝ(w *'$[S;zA_Tޚ G& wbh2[> ̻\4,6E]|g(::dpKZ\O ՊoQ&2%=V{ O[@v:VBN,yY7(yB=&0n1CZPp 6!Q:YHVh@Ů"d6V^|h!)~&?4M=@J#v'dz Q򹒧JyNL㷖$.$eS7i v.,a;d^K6j`RϺϜKI'>3vrg{!v^ޖOL)|+ҴL1H<Npb J1'\{*A^88I#7>Mmߘ V`BA*;42(FoDl1t'3g,1 Y .bchBoɚd3z2rRzqHY@LzRY U=  @A_~ٻe&5mi@& ?,j4 *WB՜%-v^d0Dp]ĆD+6lPjʴUEe͞EVZFtqJ7ٻ{;VFg^+DWzƭPo!ۊ]l_v7BLrm.i z $*=ʽ}>F*X1C̋>wOjpfo׽4;3bw2!B.u蛯_n&2/ǟ?"Kﮇd;01[P,˯&I;@L2d5-+BF$J#-BJq;f˪hN;fZndȼ JH~jIϲQB+̒M.74J̴,4JJ9S 3~]yq*,=OdM+7NإʘZx*hh'j Hzb8|~ JK45pSsηRHiNaL8O 8?pk B@MD nD@І&ҴCP|Hߐ{` ;wC&ڊM WQ;p#lb#i b9)%JGC-qNwi( Xt hj:ğMX1w+tc#(Đa?;i+d&1B^'"D$JD<0a b "b` ^쳫}"N <Ơ3(.#>o#G<]YDŽ40h;Kt9ۈXIIP-kxHQӄ$LD0"ˠR09B+ ,М[@e{ㅐ:HN;AxyH m(fS+Ev%Y=0FD`t^/ag%jpME="@殨yxƪ&\E7z=ڲ=W/b[֜ꛣd7XѦ]eMf2$rNssVzuӊt @ص4d1r:n(0QX7U4-[Kvnwt; 8Arn202cZۉCEU;[Z -soë2Ӧ墘M}ʚ#4NɤwJ?v@)PBe2IAk\L"L~YG:јS]T.de" 0c82{Ć 3Fb# 䥠")%v &_䇛U T H+r%%6L„b={^ғ&P>AjD<9&-K>|r(575%:?(+%OTS2\tJGFq /!B!+#0Z3Hi(\l4ر~yDBxcL2%]Q0!|ML =@rt׀e/u^1@YB j%`ڒʬHG:^bF!2(Fʬr! "meǖ+Lh=eaQ*jGj9RzcH[: E;8#P hSh1ӊ.IVp/=ᰋn\Ox3 ԴbcS+!Džsrߜc8(6&/[2I=ZAV"$O"/mDVT:( bG)zV;ͬUM*Jj ȗڲzlZsbIڤ%G8Ҙv ZstlY'>ynw!Ȁ mp{B EXp*Ͽ k*wE.灖ì!:f"WaakFXA26Wݒ:@5J;E% C_tn!yc&1MJHZ j)v]DC8fYho_cvZBcݶ^:jv"$ C+-$iݦGVNp At"p,FeŀZ{J|ZudL8?w"(?.b UtvH!(^C ep=w1AzWY5V $a#ccg!zKR>k")u!ǀ?n16fͺJ$Q%?m֪#9D ċfb"kwUXJ%:sN@)끠kd*J.gѰjUrfxŠ;?&.sK7Bl(Qc58op*bx @4c `h lcLۗ} A&$ȕ\zhkfO0æĚ c=]Ql(xytY,tgcOYs$E$,^ѐLzmcIr.94|($bV-a22lGkR-!f-m*LpC 92B_(b-3B^ O*-YJ9':"R-TQz$kAN]}^qq*ҸO[WtVQxrxx/Ը~O\ZQhd5t;H.&RHdZ?@si\- q92@2N @lIjMN(̹V%7Qnx^RԷơ;1+ tLg!6UΒ5!{v`Y+gQZtg [ŢtJΡpL(LE:gAmt\SQL|[~5GIRM7s3 c k;7sT'?P[ToJ" ;r^+z[SG6k!1" s*\ztAgD1x"Fg6dփյ 9қn@ ƚfy(u21lh U_r!=j8ؽ&Bf3 ^N-Ch}m"3&P3<}ŠkxBE"x,CP( ߒ_@3U\t+dA cަ'RwjbcMQ'1dZ=Dz;$gбlwV`W`zB.a91Bp,%n.XYlE]1b4+]ɺ*}{Ub aq\1RiW'z6ǘLɺ foK3hS-BEJ|.U!&kh{&DWWGsER!w*{b`l 5j8oeH,J !YZz1T^nMTC΍-9SJTJxu:hH{}vtdT(W2[AMқBS6&c(&0vhlo.JpSPn΄}Ts־UE6# >=дiX1N|55AUW5]M v-7٪rSJ|8ǔ9RՓ4 䑶L c@ [ @57\rQ]՛w;# #YZϜ'􈃐Br3to$/|lq([icGOopސX)k ('ig1gû9T /k5ΜȅV뵣XZbʑ%cX^Kd ,*_0:Yex[e&za-Tݬ"e=dbddZBgT+yshE*/K&i{ BB R4c_b_g5hDd!;`-4eb& ^ĘQFm#/H{&h" E4 feܯRPƭe+}!,>BQ({]|H1l-]#RPC[ҹfkm0,QCvXAAT^-j4/r1/x`ܐC5 XbĈ0u jQPZjnia\#R@|vjC~{Ξ?duJ+]ԘJWl_XVM}-{t=>$B\.A3젏{,v $6X9- 3MF9-.*mp& y6Р:$Fң+ -`znˬ>nzCQ'3LJ j)ɂ-VI/?쩧T DH8(Y-#o XD#G58 6̸z4-,aS 3v ƃa'NKD]#:A","ꦡljM%-FQ;0ړ)liYMM˟zSM1O){^C/_1-pz*WO쳿@Rohu^>'O5S _DaCg`^CӟQFep4VةW}}8ȑ>:Y#=QH!{i-Fʠ|ViSY;M؄v moS*q`A?jMl:ёCrtd-EWSofgl3qn}jy3ZWZw'}Dn4s }zٚp\%e7Z]ع$r"\RT!ü`Mĩڧ{#)wIdQHwan;J39vڽ"`Ani0h`/O+zU P\f E:UCo0N]G6m%-щqqu jŹv`DMb1:I1QA$+<71DɈjC;:L b`>G!iIcRYRDБ K1MB+ի@e Ff,J8$!gE/i$G Q L weR!W,9LC"'0IX1Q3IfgJi@"bIّ =c$| k3N%>3s;L !v.!ޕ9`vJDҒjqbF)z`E/yK`^m^u4)AVZ7YJ֭): 7[7R,SQ;KuIŅ2]g/XƠ)E[3&6X"a.#Q{!nͩBBϪH-h "qŜzIޔ b%JiQ| q3KD3S{-0ŹhGCd!Db8`_[cͲ P5E5k`(Xю֎ mڸ,U uFz'ZҒF1'WYj *KQ9d-(!h#:S.ΛbU C)ڳ̬[QJqs.(JTՌ+n"8.Inc!58_FLĜiw΢3J+#0'’[ 4ZxhI:j#0ɻ[񊚚84Uɗ%#aUGcrr:.Gb]r~U53=C(Zor=onyzԧ"x>O".Gy{>Լ,}~! ,`@H*\ȰaA[ h׽[|e 1J(QS\ɲ˗0cR8Aqϟ@%@= ԈdAGh&ABjʵɆ<K,˰KL h΢JBԨQ'fݫR'ZvSect Fo=H7aSgaӨ{*H[SR⿪G_;VFmj[z%خMسklԖ=4eIz'Q?Uw(Ahx;f|7^+3Fy j2uvY{Md=`ɉ'E=L"Z#矇<~sc$(Iu:b`&DCFR^-hYi$HhD% 7T[BPb7Иa(hyf;`$yl=Y(x gSv*4[*=bZ¨dj&f/)Z4^euLLvSŹa܆:$$giejeo\hB&p"J#;nxwq:o&Z ,pdkC v=y~ޣw$ D$DRϺ[zo*H/x)d\=ImqjF0vrLG{[k"$3ٌ^=Yޯ]Ŗ {CmS8[Bl?\S(n1 F{\-"]Wb|73|j@h1OS~'w#J3}ށnE&d~Z%(&Nl1 *>km%JF- ShC*|_Oi~" F0T̋d#QU*e6ygM˜6b) #ցԋ䨥oFK-.w_S] iWҒR>vlLs eG@{EL!2aLGЅ(rcV2URRSI] CK!Cœ} `"S 3$u{ $wr;A%"Z1 €y\e*Cx@OB&T d kEIr&q$KtP84fNl9$(bw=%iJqMUA㗇h(Cڔ] JR$a+qH>ц&T6uЋ|1"j^UMpz9iN?ut4/a [wDD뭝&^L[.~+ta@g->vDpa.Dء.zOvHecyK2ɧclOz?zjK; #- :EStzϑҶSbБ8V;+ם d+%RT8\r&M%C/:$~n`.)v{^\AJR"t$#+pF$Vvhʄ6 + iۗcMw)6, [fRH|sN9U5lҠ5c  fb޼9sʙ8ҦL4=H3եL(mj촧 aq%B(gIOwR~D}" eY;xդ{"m~! cTNz&#,cD_d, Dhvhjk,[*(oC9TH]%WBV*L"(sYS FсLh2F$F(qZ;މ+4`\A l2⑁) uy9yU&pAmiP|IT蒚Xll?)5!rs4s՟L@AF'鄌җ>sj*ZA3(Qö$lJ]SUR4u摄@`مw@2 ;lcG*怍}ʶP˜5A%xrHtX{gzW}.e{(6t;H(s7&'7 "og%[D1+^=PyȱuM[Bw}Ϸ?qqN<>Zt/Pⓢ sw A%~08= ^K_sz6T{ b$J5 szSR!T3~3(~Rzf E^=.B+hrS֒=a,[aVr$0%JRA a2H#uti1RUqr4I3XRD#$"Jr ;d^QI0i% A52DN}4V263J!e `_o`x2 QZ1/z2wd>hr jTE%{jZ(6 0+ q_!>mNro}QL"B &x|MxŒ r.gi傉L2=!kF/G(4WԊQIo>sE#[qrm$EWx'(Tqt|vH-KAVD,5v**U/s#W3>|$"&YP. R88s RdSg<ljGsX'J 2In]EL;`A ~B&R cpKܨ2eCx&xx%R?SU=40"BaJ13op38!1i\FѐSa]N|* [@ cJI "C-a)f|OkFS (R(0 mwMBh, 92G+'<.KtJ3PE3v8sM8pC uT%jњ?QKI/vD1(A(24> u)wS@U' IizS) 7#A)szCƟ8U1h!U YD!e1 ICC#KY`tV#]Bӝv:)U8v1M1m'}'HD)!hv"%UP"2"C'w ,zBfs3ft! B&R  YhxM*MMcAq(F.!U6BF'z j 9_1ŧ|d-#\.ԣÜHD7i E"RjwPp)B @i]TiJkq-gp@~CB#JA:6~`!e~F=9)aMf vJbtҔZ,V]Ԥ֬8dP\Ʀ TKyDD*<NkRwtʅaSԖsV/7 iIZ{)Z%t:vLc-t]2Ac/sceb&/!aR` bgVO w d S1U%hהI QB"286s^S(@Sɘ?WbHq"GrM)|b;d1_6p5,;-c 0a8P(3rq|U5tgBFP7&k , B'@9eFX/WOǑtiІѹU#19Z9]<rI戋'[^<;~8ب&67MHr&$u[v6h2,Zw!^ءr0"$$T0ɚ f iN66nXVcm-_ڗF#Ԫ#"ᄜӇ9h0(1>X/HYjZn'6eeHqr$12 쑅)n6J6)bL*M8T(@RCAc*ڂHu؇L<"K,-#;ړK%Ԩ sG"!K!uu'eQ+SK7XA,gf1#4aoELeGȼ5C' sﺄ3 sdH]_m"0+R"R'v>/èdtc.3oiAZeB qÞѪ_ۣv.y$%Crj 4BCq)R-A*J͆I6uq5{|dAۨa4wr59 0Q<5G&6U=Rs3o#tQ,2:a:C!t|"th1s|U(8Hg9q65,Y+)L ,b#'PeCV}-SAb\''$)L褶 dJ6^z+/zR#Ը΄}"ULJ.z}H}+(;bT{†B 8/fRay'nlrh ?G=!w SRʊ7nUC ވqW\Y=;ft[cN& 90MAxmZ]Գ5(F$<\2ői QӨQ`AMZtWM% X0ZX&:8ਅ%7߸i""Ne/FhKYkբex%L3%SokuW&oݓ藭a:xQ J(׽[_OIK챣Utj%m=_FݫqE pe(jrdH]Wn1&SfITQ%vz&PU0\}z5UGt12rN.dzL 7Fy&Rk!hk:B!zlyPBڍ.jLhҢŎ?#O#RZR"H #ɰ0JT2IhG鈦*o3:P¯+ē+t-Df)Z., #ڳȴ81Sq ,(/- BXDPTۂk$_11ڙ,&+>uͳW<$ =IbORȂ *ISV*=&) K_]@) W1#T2]W';QJRH]GZINS +_X>xkȞ{d%"ŲR('bD2 fYVlVuĪ9rc103qn|T8 :6tٿ0I l eJdq ްr5Dn16!Wf5߉Ί1%ǀUQ7UVFbV 1W}ǟ)<0RܞqÆȴ8af.5ӈM|`ip1ъm*됤>'"c5<,WP[|wU/XvFu !Ѧ\Ԗ3ǰ1_h?>9)umc4B)VaUV(ЖBX9ẍK}o-' \p@$3eWB(r7R q$&.vKĊ b8=D+}7beC<Z@3r.xՑ,ǡ>цjeHDBґ![9I؉"59KΚ(Ig#wd(Asq'"*B%*]c3Җqe.=b H0[h.c3Pv$Œ-`"ӆļ37\P EBH2"cG`M:Y9uԠkv[N:CvE f1$(hP@xv&?h;ڲ]+5ѰqfPƵ-#OdJMѕ3\8k4ӆf4s(|ǴQgXE㲓RYPR5*!.U=d7Je b%ͥ.*Z ʹp&_GQUJ\KNI9K("B Ee~aU(aH;ZJ>M.$4ƒ֖Sg˱U :ZgϷc(uڗ%V[[ m}q;͵TTw%cd.9ۑ7Vh_xXEhx^]W"CT|h|Gb_|jtYG-2VbDER] VtЃtXoͪ9 TIS`ɌC ^}cz~{ݛ)[#Wv)=aM(@%i>FPni+vz-?U$Vlz'&Nj,ӄ >9ΫF 98z]#hLM&)Ga 8%Id[O l梯Vfq}Noa6[bl!rQ<숢@ ]RN '|Y"<ʴ m*Q&EDjV xx BRdOa DeĦ 3߅"0m#3WVZM+3G+\R&UIPN.DlRxĂգ`4򛁴I3â`BҘ63_:]3atI攉Uh!Z(Ġ Q@ktB)3C{., I= `D;n(a$ƷmD0 DdDY"90&.v!G<'ZD1j^x4'%T(Vl`Oc6 ćR""M& NDfs!+$+ݧlha= ]S-3:][2$SOIS/!+FfG DG.#F % ,N찪~0F<iڤ77u/d_t l'5a 1 z<5AvAC-P=Ơk:uUTA'5 Af"GBQ RE L'+nh7xxZg0Ek; BaQњ]D ROL@F|` W Ճ"ۂ/XPk%i]V63ެT%GT|6E=kqg9ABdV -Du#R%6>i]t,8R ggRE#O*:]؞(yZMQP@ -)(.8ܨvN{A*B|I#$b|MլiC|+#w`Rv|lbVuUJMDpDTQb<Ob"D~F}D9e:MI`2q*H?qûz{t^O(u FvPHa`Սz43Vq W3;8n:sTs|M~WY.;Thc9F2L&!nbq1WD5 PQcSr8Ip.DM,,$C[R8>H'.BBgw4.>AP?$1C,F+sB \UP cqQ(52 1b _ٵ"T!d@b7cq?\TtB yc4Hbc_"8?zhHidW3"w41NvWNqqR@pA -cRZGmgh$\0#*$w$z``/mU`er"R?;15͂"x~<DazaehTXDц*[`؊'*5d(5V*"ĵ0Ge;QB T[QucQzbmV0q%&lH,[F|U LSZ XF*Q<ȧ.SgH[$d "l1GVQ^eMnDr|\ _2lF]gIx۔{K xC:YDw9 A(*ٶcr,\A !aW1if[lE`7$["D RZD~䒂?! .N0`mrߵEF&_i:q]!إ(2\b p.+C8t m)@AuhAц4iI{?׊ pJa@M0PX #^.au#li /-H# 'K:&5Gu=v3wF "S:bbṖq^>06.͉;:C-9 !K g2 9-Ԕ(qcy J\$ih1% x)NJcL:{F57{>i ꡆ\ѓRUv&"50'R+X#r"11iV>,A fU@zqgӏ4qj`ZWQmUI! $Y"3)8Eqsք~5]E6ua0'eG5JC'N-s8j5&s|ڀDH6ؒ?rcj ~Wz-j5v[:R\֯Res SR_Yrx!N@9" go |J5iOKYZCӛN _?t_0"5|Շ+S4ᤰ2mq 0 g~k+DzTomԑZ =V8c5~a?2:C1`=m@ t&K ђ˳3z6JZsS퀤a2 >Ro0]< Z@J !,rBRFt, ᣩ2q!"W$Dv!ڧ0HdkQaS'P6[T ngzbpP !2'-,ud!t*$H7v1dd:EjAMR+?Ӎg4jab"/a7 aViWN_ٖ{F벜D[jJL=%oBXG 1Am:R<Ղd;RKL1v[K.82.b\]1Do u=zqj=<Ұz8 kc|[JK3m{?N-ںQ #6R:W^Z@m[MɃ9x~e@T:• a)9R'ƔNi~VxQ8nC}oz9.sCP E[dEnqj) P7/_-mh0rBvqCq,H6 |%7 /uZOYy-u.8; ى=:1!Xg!r^&=E&d= R\~ġ;# g<Ҕz}'>֤b"la$(&fLjsgnDK+[-55vMDhp|Cܙ)y 3RY1# ,Xz$V E.,݂ i@/MUV21(`%Q;POE&=W#fjΦ2Ϣ%؜b/,-Bx#x!wW-NXBbPDMR;9gR 0X([\@!|bkO*XrI\ g&qF٢>y¹!821At1ٲrO-,H|@.!"j0 7Zb;=WE>颱yYPa2WBޜJCI4Hÿ /:쏍lm˛@2&цigkhu!ˮ5>FQ+EEpqa#kǒRC @0?Q&s l #>>Vᵃ٥ܼ^Ѧ>|\8k$>.JbE!RubR B%+:c'_:F&D1RHs'ޮ}.fJN+|AR%nȄlo jh},GݧQxl\G ˸nUQh_o Ӹ?*x|CLL:aFNW?mn2;H - 3&B?/fY]p;ndcȸZ& ~ cD:*a @ DPB ><D-^LXka$0~rā @"]$f"_{?EJjETU$(Q潁$*lu L VZ%c괬vmiR/ [QK3ef=?>Pjd^Ep2eΐJ;1ӢF];k9+DYi&Bٴ} lok{QTIނ2 :fJW/gI- z&phޝ/^C¨ӎ8:P!r?M7h,,‚VBO-40ET3#T1FT iƻ;p1FJFdH'=qI+C,Ŕ,(*%_04l*"Prl2„!0.+3ϻTQ[*ˌr͂J3у+PT4RŞbBC(H+&& S0I1iv6AMUl7 IU\C)MQA.5k! ,`@H*\ȰaA_mP"{"A'Hѡɓ(S\ɲˁ ,sš5 Μϟ@ sG޲QbS\:իX:'Sׯ`,JfBI f3۷p]ƺqݻ4#DQar6pG;;KIpV9ׁN$ȋ= Rl!F)C0+O ,-!qrXV@ 0EF*G;%"UAaAԢB3@n,0( {b+]0!^,AVݯvKKǁ C0 cD~MJ6NԪf%4@ '.0ڠ\K .G#9rHkV9Z BkKЋa`E"!V3"h*}GPHEp6`OFX2A2JgDnəTjCihe8H>A*DhYh1emGNvC2'0ar RI}c$(Ei YD;ќוueh}l8F !}g38IM bi5 %jB 6 RVNz dtEⱒ礯:|d-6**գ8kR s3Yq$7uG+vv`CCP+A!mG$LhAuABkDL\+H{f p&v SϠg aGb$ kKV-Sң6jEjqrVziёf.y?ȱ2:WȎ* cSh #1, n` ͈*A&$El\QlbԄ WٙG!iJP@$ĕ*.TӞ߁#E}u e ĩRK{ S2X+'|" ޔy4¡4+]9|(*7_GbN^^~ qe>שYdZwW~Q/X(9{wҙYr<μ ڋ=,h?./mˑh]^Dyt1E[+c=A1I_Du):nڡCft4*N% Q E~diQ3PSn֙ t{FVw v4|:Y^vpUIUR4,ؙHNY_i&[7kh  1`{W7#R舁]# ]?y|rFH$)3apF87,kOl2%K,}}k9@KRh&!B ah$R\XkF dQ Rh d|A5MlmOgɝ3E>0c‘ëk')cF&Nqfj-3ij-jA47Ø.)H^Ɩnb Kgztu(Dɟ(_(Z11"iPK|jLb+9 xQ_w[S%GkWD0 buw3`2@ Tna"GVeOCvIdSWU#P1\UI?qP$}.RhA\gTz8GH.5-'Pcat@ g C$]"QK%oVatÅ\%.1!S~I}IEB#)BZԢ^BdO\ T!BQn}Nf5 q Q> DYloArkej*O$է>FۡҧfSŁt֖+xṚydzDhb,2AyOQ4ڈ w3k6b{A56(f0M6hXJv=K0DžGZ5R}iB4hAn,t\p!! тg}jQgM^nw{FGy4I +O1#'f2آLd6E A&BI^L?$u1R !\FR|cFh4T)tҔ?QK2H3 6bydaÇM*)% n9AdZDSMAR8pWMYoQd!<$X>z7PAuR] 3]UfhU1ÈR 4;@Y!*B[;2KSB 9 $})B l}G 7WC'J$nYhU(1rlaҷ%xo4mW22m^RPc& i'Qgӆ-vu4C ?儠D7"cUgc?[dI,Dq2hcCePm0drX'ԕf" 1 09Qeġ9_?fm**.+9%zb>}~Fk$j فF &*_ق&:bphec_1{* &q#Ok`r`d=jCr#Uj Өe₣4Ƨ] #i0օ */OYI)ـ2a2cs!R0lF$&\DT٦P%`vfKy֧:4rH"vHt|RRAWŖ!x+#r729ˤ#&qo%PxQid p6Lyu5>!4{y &.b"Jz4)]u8@5TyB4M9[M'&% \C%' 7ñyحY䣳1['YJ_WCx q~fK_2 g!A&(:@R4䖴5.ș"y` cZKS"klF{x~O(2/ zn"pGET:WQze4)a"T$D{C++0RZnD1%{spGhK0fx01hfZpaZ!u&Ef((5@ш*}w TSwÄ[ cHdb m aT**)ʆc]/Cu<3?g?Ra !J[6m6(dE;J$RH_iHGq?x}$ze#`HtA;&0SjaxQ__\A8Hl8\⦖ZZJ(OG5婳&SFRb[u8s}$"S\CШ3-W dm/4#ʰqX1}6K'U)5\z1p0tU5Q j^<!pSNyC[OLF4+͸?oDkZI1Kh"csj`RAt$9\] Ć)@zX+Eq$jYSC8rWS0UX95矨J :QqLq47ahǙ=!ICu ~^}]/7NMҼP<P-;NGhtٮRi0$,'$Ue=0J! 2A]C[ 3[xyQXb+q=!GEZ*>B 2+}8Pa\[ =YՄ!^Z eMcCQ}hy" +Y"'oc!+2d@<ŝK)Ź}."G!,n҃BUn3S #ac=F cv?vb9e<]w]8*˷҂Fqᾶ_SGonLL&-k ~j-~Yrf#Xv-hkՍl^+hݲ)ziF(I͠H>PFP 18H " Tdѣ#(Zjn"P ؁)+1:( M BV`I! sM#[29/DdvЌ"FqSKDRMk;{e/3K#Hɂ,#ȞED%ZO*Is5 ({bFJ6_ډr%%[{K6šV Ƕ.Q3 *0\..=VD׼ۥe-Hpp#REmEA;rv۴Θ(qdrԊ|_z S{3lb+^ .oewţ|VکCRs-(r{1$eQh]նRW.5Hhh#Ty2 8IC{Z(Nqe@BǷa08KP.YMvu@ŵwa'ɡo6mE*O֜|t͕F"^NگXm! hwZMo#j峞~y^ ܹȟnhV*oEifuu?z?rIS`8gpp060sf5p'Q`(ZqS<8Ž%J-b>[32.JmVdV |^~!B&t҄ R $|$Qak-y.>z~/lǻ)pRё$Xw?ЪrA⹭j%aĦ8[9'I` Xw@e޳*͇#mU7VeꔷD&?^@0dyOFM oDb!nKE!J/LjV@K\He67h AX=ryI|1:7QFl%ظ+$r^dÕѪd(F' MW5E;QQ4a ⣦j[[ϵXkVNKQMrh ]ٽ$LAA/59 Vke&w"x|hq;;w| ! ,`@H*\ȰaA[9\Q"A-Hď CIdH! T)eD0cʜI䭃nԙqBZѣHӧP|ipAQjZeS+#Vv 9pK%ݻx[_mտ-rB.JNL1aթh܇ֺ3,P5}UV mWhWgv]̶{OMH\ ʜh0OOȝLX3?r҂VM+NjLЙZJx{Fb;Jކ0bB8OYA۾][<$)KV&)Iru/BHl}g`ј"S09*~yZ]3me)Bԝ6'bE24ƙ{%D#dRMbxP)WG Gi\}HsÿH {X V idv#+4gH\5MB!OIA)+b5*Egd 1 c)?XiA2JYQ5ǂlD7!}RnLasLL u:WbC10f+2]H " RU#& R#C0'.Vc3c&Q&nm5C!j `z/i Q1.2WxGcFHxS~Є+A cl*G>ZRV}!.e~7"jQ ," lc(q]Ow^52^Qasr(h@xS{f>x #N$q2c3dI˴} $SF!m60KR ,zjCBB$g1rCbNQsXYHv3n5T bzgxD9G˱y.#P!Oyz(%A uHe8Q`W ft{&(TXW"V"1" V\=egs5@ .S9H c^M(O>q9FW CdcȘ~jf LHcuS+QoQrAz277CwfC!.-Ea#UbtSQIrPVXQ8e'au$ ȥX'z&`kG[{7>+F%L8T_w[VAvQvicJ2tC *rByz3eQ4i3KH*<*;:fU#6e!S.@@/ɪVQ!&*VI y<)XU\%ֶjVBSr*eHpUb9e9X͢7H6F: %r&dCCOS$Q7$k0cMԝNc7QM(FKyȪ4Ly(El /`fGr@8! Ɓ <wb aҸŔFɁ0`yTj̾1&JC:T4a 7Rão$6?NetA=$$E[AM(2c%xL"XLK1T0"ZLsI\'FkQ56;C^If{\lwC*]]|K*pO|W‡3Q[)%uGCZ&4Cqla`53+[J#bZoS !P!XhNvHh 6@yR^mшCC:qHT;n&ecQ^"鳹<\/7IruAH^lWkNyHH\]Of2Pz׌ⴳ ,PQȹ Ѻ7_MV\RW K'4]"?=c^bki[]4H8Q$x!3kl9ZҺNRzϏ!Zf$G$_&*`fe dYrKү\4:_a֙pܓc+fn"@fbS:Ic%ݰ+N8^];B^ob=RxI!25D26s]! L$-H߱)yKM$1IU*s-vm"IDQHݛ=n֊ ,I)(j>iKFX= ԋH,Y?W]J-p%9+[m2 !mQLqkL-tzU,0ݸq"Szsi-\h*\]_f8s)A%b ;P`wswzKN.-EaLpL85i남i*! &x)+=$(!1A?h@e['+OvE=˼5e0~+ڧJ|"&d/L^ށIxaMOƊ`  :L&5DLI^Ѕ"K\3Wn*@-V4e$0bA3iʟ-{dHQ [99cAM\P†3TE/{<TPE $R2 7 bAQ g@֢2iYZ1Q8(M۔V`U"hekE6Ez]LTbe_cP`؉lN()N@d ދĦ,A;mCma?׭'sCjJ`օPT8E~XGg:U{Zr=p񿨚%xjɡI/^A gO N%'ۮAS/!V 6@#{:H5 +⪞SQ*ȟz LRD>sѽ" E7L0Mؙ,,'!俭(:赂SrR!ZSMH1H!1Y(J5_XV,-\mŨ1Rd lXcQ6# ViuFلvcgF)SavoۡLVFk]2뭧vi']k+gu2(3nbEFa~IN_!вFd임)e.$`:#g{&+eVh6wzE唴Jۣ jƦҊʊidd[ݰ5?ҡ)m7뺈G< q{ִK,6O׎j%;Gu=EY*Zo"zq}Uqz' x>]yM¥GV, DZ?Ӈ?-(u(Ϙֿ}G(2MSR`t\1"\ [1 ^Mpq*L?hB.8Ї[!}f3Ix(A7!x%Zq KrÓIʉ3ʧrKzE h TŠZ5ّJ.Ž{n$c?|%FXܣQx*9%Us5ѓH2t]T{J:^0قI!1!K GDfECLf$ qGqtTXMoFwE+ԩ;#x+}5Ҝ&Efhcʩ@(j=&vHtDQXB 9IF檤%`4z(b;-^Ԥ ]vd8Gec|(Sj ~sel )E3NĤO[iDc dmr\D%6=ΪœH9kXP})X)WQMDsHX3!-]ГChbd,WW6c:Zb K$H(dg}R/!L}æR]`KvW[q@Ę#!ԇvJҍ.e̱8iRQ{ԄIAx[B"+{XE ݒwk@){ )Ƅh%/hldSE ܥ6H ʭT цzg)Bň fpJ#]{ח$ҪsX"h@69QF`ГniUuB1:hǚ8^Ynel )(3{=ٜmg9t>ha=WPԊS:Z1+Lhh"U! ,`@H*\ȰÇ Hŋ3jxqD CI(S\ɲ˗0cʜI͛8sܹ$ϟ@ JѣH+zLʴ)˥'\ӫXj juׯ kDO%Vo/[n۟S Ϟ^e=†%X{Upd{;W`{k^;p W {ֳծvNW觠ء N&Q4_WkTر]QlSomNdiPm=Gyu{3MuI'q]&d -)&+B(y"ζle`KǐB'(bAhBt@`@"[AkBydFP AR?T*)?>z(b&6jR~"!DPmlYR|hUR`棜"lT2ht`6fv„JdNhk.9t~' U*R!_ R`89a&_rh&[v #_3F$Zwu\:$+q7г^tXuzjX`>B"VWejZmAU#H.SYվ\o#H`eQXARlcﶧ\;Nn +b?p{oO+)(2 aG+Ѝ9ēQL$ V_D@:@Y |@m{ rm6WC-A(#( aS3-?ztT1{*T[+zзzmP| :<9dCVq7eg 9dy)&dH:^z'YKjAS 6B}ĵYܗt N-!jv9 _!aZ1Ă _،LfZYWFuA R7f(6H/f LB/'@E q1<  4D Ģwcݧk[O%-1 ?Ғlk#AcX4\h9#Ge))%"Dx$M>\&I{imxg?ȩh"PTpQϲ.vlTtG7Tt#u4Vh: ff7:b#0~a@9$@:B"P9 8XQEm`zgɪs Yfc&5A PփRcnIEʀ:ī;ZPp09WlRZ2\M\QH=F!C:m<;Y HCWuT˼- +g cno5aJPD! =^iĚk%i+BI=P5ѼU1d4! CKhϨyyѡ/@)vM{FӰ)Z8Џm'],6DBd"_r`P( &ȀT^Gƌav޹Ud*⚕ąfv2`]y"=9+ u8'TDA ";gV@dT-p!R;)܆0S\=N nv̪ȺcDp5+)uR{)&B@cE#b4MДe-Q1&91ِ+BϨ6AMlKNLM{cq%i&P434׉PKVւ &#D)dx׶Ʈ.{8^#?RDKKqB+^H!r-ox {CeY^>',굓DUKbNV$(^u"F#Rh2!)AgU/΃!}e-YGV&Ղ(|(r#`VHW|%;(V/Hdk\7wJ@SYhc"bą"gEBd-qc7 m>BdoCt0N<'c@lKG+*a^CEr_4!#Mi\@"bVss 3AB6(nf!6mJ143zIoX3&qhaGWw~pr;V)$sN SQiEDNlFM:2 jC.o 5t4gR1TѱRV *Nv;%r"N`ErP }a?Pxy8UHY^R v {V^2! 0^8#-t!bB$8XZCYD>ui ^qP7KVW+zr[ f/qW1##rCb#4҅(&Y91Qc2&{Poaea+(ZˡWI,{2tfg m)?%;@)I*A bgMj:CEg,D! W+UbC g!Ce)&j-Dp#Y6c9?;4D<:Ubv`\ZmJr$'5 Rli( ׊IX30AxKIN?TAR#Ge&qE8xS)raۈal7iZR$Vu&0u6V5w]0DB,af1u>g@OYIH$a5iH^+HfSA,tߧ<#&2Fwoos"HzsY7I.wqR 23I*3 2*3AJARp.CbCpAt4IVDa ܔK$4N@s6.4=R5SQa9ELG~N cj_aU‘qV@sr`*;Z?{v'Oj R4r*Yf8<{d,(R(rV3YN9(oQ1ѸD8HH8,aF=8h%Y% p ZƲ%.dG z:D WC{YUBf Eh[]9=VҴ{R6yeB_?ĜW aq|3D(i/"%K X]:Zh8sa #al4D.&kRa#3 GJd2(4"SS=#1B QtG'~+bQ o>w:cv}6)DsV &&N"$5krF UYˍqL# 2yJy@: gRPʤV~rh( e(f6VֳV#HD&'18-X%!I4JV893=T\GmtPtUB "X+{#!kd!d6i.8F1SJq9jr9]Mq!"Ӡ@7IeBgB^bH+/zM\K! >+9H!D{gєst$|D(P/ )H4QGQcѣQ ATXQFfZNMM>khoOQ-#&ɲ( ZTЛG T]tj=X!ڭ"(9V ŎZn#hZ6-Ai)MԵ ujam  pi O3ⶏ~ncFMVB_}jт j=~t婝/DyTӧ'uYJkVO!"K&ǟ:H?V賏>#A'p!ɤ 7t2P;GA3s1F:KEOw1 G!aET)I4o? Z6т>$ ҂E*yԍ0K3`Ih1KMLLД3Ft sHB*- FH+ @&s,KqXa7?5QVEɗl*jBU TMUS҄XdMؤ{XQbm@6Z'\V3^1:c%p qgZ'{h(Q @[ ZE&Z_F]LUhMT>;5WLOP;ٹ&L3gnpؚMHiPLghE(d^Wz|$IV[^"*;TEEsk;8i}ٛsXFolкzj҈)|bޗE ;2@8,7GXzqbe}*[Z!HRWD73AiQƩEdS-ɓKhVQrڲ[`(^O&e!C.@uk3ӂ"5M<;^?%1.^B;iRN@mnT>բ{8`z:!iB䑬ԎIe"ґRPQ (r-~"B,袓Őibj l֕Necq.I7RTXx AV T"&_2m4#BHCaw*}}1b ஁Mc`d%zaa+HѻBh+6qYKؒHt7zrB$9 3%C䵅*,%B g/iPZR$eY$&ctQp*TM?̴,CF<51"Bp,m$9 baC.(&)ӧȄFO%$74CƒECH=RP 3;Xx(vX…\+H=#Zυ.%go$R Xp:%)cG)F6e6<-S*"lSbfVŪp,YϙVIc+N-OZk^J..w;V'%Eej(vZ7jzc? ,%˫ 0JR[4 ؃D0*M0_VyY CmQ/ c=Ψ([\Ӛͻ DJiƁF/+ܠbR#N}fE&2QLyv3m_X イ<բ{h`N[S^jwpxh`&)vZQTO+rms +Ɖh#N$5x)+Gl"@/Y(@YdsL CdyIdDRZ+YHX%SZwKvكVI)oSOf%F8_"4&gih(F l}KgZGc)FZ*}RiTRR-Q=naVAO&;SO=C(`TVG(8PrtKYuvcKZҘhEKn u-BeТ\YehPx4 |oV{D(f'bԣnim<@ߖy5ٺ{mCGL@6͕%&/Ը0d 0jYT*I&9v#/BѪ XJs$]8K$=Eood}BQBqP@Dޠ1<( z w\-@new6WV첬\B)m`Dcwp " d A̖WTзcF?*Yvjݻ m=xBӨӊm7Ђdt$-!^쑙\ C5:V[.) p‚"#=# LB7%O\HkwڟMbv(&nnZ68,'dj'~*_R<>M(EsQ "y-V0M{< /h3b)H:Vb]U db5@Qf B)G ;&FXȒDߒd D ǰDWQF ;. $,c(DuMp ( c.(OY0 !!")XSTB Dr ؐ9l1iɴM|:^$NNG(vs1JKFXfDkB$Ur$h#?/0gZAs'P)F Óv,*3Ѥq9hYМ#9# EXLh;Yq u*$ D6=NHJrRt-C6!Q|d#.`ϗ'*,%h7!=OûD!HE+ %re v rV$M,e'dr[*6+$ 1!$y45paXJN9A2z#RGiE,lV=Y"N)a ;b\΃`P!/_Ăܦz )CǗf3 U:hά˱%"h§_A$LD5ӴGtҥ@SBbQk/1;Yd%2f5AɩWtB;ΤWH黗d+D%73Z[Ͷ jգs0]jBGoxWMx ė&4PƘZW RZ2)7\Yj+1c_(ؑ-k5rlt|&kL }D*ߧ5BPpn$S4uf)|%ĔP%+R6B'WX"ȶ=lcYhՌd<Dӫ": _%P% XQPY zvl'+R BF%Rpem_ (fQK}ۤ'(4HD"*xA9F@w=&3/!n. ;HhH}.B #J<ݙjfH<ԻL\* }OTw8 ;eWuL?S]ujF|>QZ24Z{b te"JbN H3+QFI$KJx]eE ZPÎ齩Rjh^R-?I|M_"x1Lr_#U>Rp̞^ߕ<4y G;hD }72?, Jq"<&L7Rt7i7VP.~rt-d1rhy0 !f-c=.OFc4F k5tV1 kPMB$tNeJa "c]6MDƃt|A!' b(NA^c*-NQD .aPaniFŅZ9$}xi3%KG,(YyPV#t%3od%ZZt|Q$(!gD~pM`9`},dat0X1bGq((Vd#^`UK|1R˷$Q=Z~13@ b 6tr6B؋@\c,{/%yH|wcp<7%4.*7eq$1i|/j7~a{(4fD=FHW1 ŠSed1d7Q%Qux%S=fr$(C 5E( fil,B~&_"" _) (X2Q@R/x1e0Zj y#!=$Ak8'Xo&m2YVIO)H72yR$"_Sq@ك<<@JDCRt N5 ,9XY;@ %:g$ Afā[^Qw!DT`0EjHB+$E6F.5b~3Qesda33Q fbW40t3XAB9kJ7:V\UH}eZ hA*< _-FbAS>Py n2QDX"waeڅ9jt.qNQs@ҎLRUE ] 5'65rCjcWqZHF6?1`LH=@hYa`8U ;3QZ 0RI2:C6dYG5WD0Dhc#kJUrM%``zaL wlOqIW%J;/Sb' BDU$X 5AA+gQԶy_i135s3:k:LB¡9N's8W}1 ɒQ#C3 m>)a0WաCuU QnŖVV)c 箞uG9>tI%@K PG]h aJģ+xgtɫr*&iTP*32C31؈A5֦G#2$!--dSUZ v1Χ\Afd_C GB,y7E" aCj81+B)JPIyVj>tDy6.t+$YA窙 9z+1W_&QBxђ54Q a1fG adbK_X^B# b4{+=xJX,E/;j_\V/HI]{1ԅhn7tJ bzTz1%V30UX79fMQ{vû![_C?T:2 r3S$X%+_)A׵:{40AyGQQ55Dv(jy袍!/B]͒2&ɘ$걲񸅱< 8%0b?q{D8K)3)mEnGf"Ch03:Bj} tA R,–I:Ua*; :|GӉ68)dI-@ dPgqD{mJ,0KQWU$ .< U,O|ϣ9M Z0Gư1~aB|g,-+$ 2Ӆ|P s9ˋb!ufaqd@b5&no=@Ld !܅ٚe|'F`wgVȷ79?ڡP%a^"WKm,|#icl!`|B D8E3y!}%J%1*t% M$,R^1Aj33O _M˸:)hRBUvUjlU h= I:(kT,ıX4dC$z5M8`%Ld<2,?z^ 1Y"cz"tl"×(xr,f='!c`bm;%MM6cG~RL՛Q`{aʼn w/Eث\6擘}E4LY!(+M؂x`G2 [t|5P.r=i;7^w z[27wx5q@tL(HI(uLG&k/b ZAAE1!L?v±%OTY"n66KncK&DKX0-/iCcǭA8=trGS!}S}x_ 6,Qrq~bRU| .1ͣ@ tʙ90 :nuV˞h%z;x =.C2+im lS@|dSQG/?NXˢ,S7տPG)j R۱:Qf!_,[&?s#.17B3_^51?3.o+BۓBN_!և9hSwF3wO)Ƥg=p~?àQ(#T=Ճ5aŎcFWn-/ݰb^a"[𾔚ݩ/~n>PȊPt%- !;9U#>uxĈ?ĕw9y K9ʳ@#u%|R9 7Ma%: @Zj_PD-^ĘQF=fpz5iҢ@tRL5mR1@cycP"Wֽm L*TTT5(j֪]R X]͞E]χ=3x @ [t!*qO}t@xF|T\h7dʕm9pd\-3OekƴZuG] 䋦7FZn7u=t&tXX߅2eo-&+lEѶ^|U;%n'k_t?!Q{O[o6v[s.˯@" g$"!v:R./ CGLZFAvBVH;g*2Ln,mzh:0,龊r쵉N=DJ2ѵp4 [_Y=kC+לʮ.z3d3Op䱦{!_Vȷ2!_ԳQl3j?Dq%G7诈D1Aj!@\@ۢN4ݦ|L/?e啷{%2H򇝑$nF(({zPV=1Zo0Y@+[s'Zac\yy.U_'N߃wawSa7.8ԸcĊ9dAR#|MfіS ! ,`PH&w‡@_w+/$ОA2~aG#ʜI͛8s.LQÐ3h^ƌ0LTӧPJٱiQbr%CW kVM:;qݻxFLpԦLh཈Z2 i0Hk2˘3(V(ʑ (BTmpTjM6Mg-Z0 m+_>ۡQuo Sc+fxMoQ&<.Pd*4IE qd[3@GJvcV~FEZ` $uA7& 䠄$dZm }=)4\@;e%jeXq!GЉ% ?]Aw?eލࡐTҤd^ 6QAIVD)nMWW T_pKPmhfvqyК*G&)6Ɓ х!ud LGJ=ln\F.ݳ&zJʨeO;l2 )!S=#WRQl@niA*G&Yi?oň܀>G1DcY,!gI_ ,}ƤdAf$BWYJaV`m Mo&sl)lRnJ•= wQ@}Zp COVu'J;=x$ `Z տyaGjaAi@b)| &AqAE_aR FA }/ZynwNY\SIle`dB殘E̕?[E|y+S(:c@6ykτ }&٫O[2ȉ#] mކG[`Hhk06: #JfJS\&mY뛢//m_ {,@.E,&4ʚr}A)~P\S KPGtqHQ&ޮ2:R+h';c8cP^KOp chPQR ¬q"~E'qsò+dn*؂Hю]]DAn85nU V!bjQh !I1>b3b v#nMh~VP Pf@} U5|D t}bb&4ٍVHb׉v$ I2x$v{ *ib95NLIɁh$, ztd(,Dѣ?zĚ/fqvDfQ {TvC9I*b@uFN^=UKzy/ (USB $)4ΜHx(iEiL16aT(2M(YӜ 6i5T"%y<3+&Qo; :ROWCQj4 :*SB3)m }ZjUk^jpjvcW Wi=}R$%ČOB:W_~*t)L|jvDgJ6؂hxBbP6c1hBl2F3b^e4`{OųGq6Y*YhJWdVUE"أRcTHvzX";X|E?$/fE-QMaM H+yCU<:N.[UiZ*p 3& M`^P2ERpnDԻX79MΏ jqͭot,PZd9%@RGr*;SoV OAg)XE=zIn!vm,wJ_R |S]eQ6N6&QQ+ 45Z̮ƻ/pl/7$Ud/s]9xWRA )53tOye0BD310  _M\wOA 8w%y=n2!9CYq.s"hRfF1+y&%Ьj OgCړ4[br>2sxd.r4Rϧ*rM&2b!Cd/3mTۇb_{ri=)x&I9 Qï:b(l bZ{_`0WsXD=|DVZKC%IlQ#Q@X1Ud4"+dhٲCF4|7d,RxUBM$2mi8qqd:|D2 r}cPA $@I17:U!%8b#CkXg͇\< 51B#900u&Q{k?|H'35'cMbIF6GuW"4\aSq{O1hU#;n\]|2w]w\"?aer waT=7"//G'"-G& $v 1%,460YC e$ɢ =z%5 &1;29'5N}A_e0" rlR^F2rcN1x`AbBPq8umug5T#dF4cD 7k*ICm@66 P# @GuT*R.XCJAekd8>24ĖH"}a0Ce`͡ZFiO`NTtd`u!NpKjI %I#]ER+#97g`Xo hN6r52U}Òpc؝5w}#qt~a}xY ўxE#u`[#i(0q0$G4'%+SɊCh'o3Պ4! I↿qѱ%U"{V#[gP٦B,i_Bb< [pQzu$>E6A5.8Q* eؤKG,~UtH0xћJzkrmSbqc% &DZu󀉨$ڥgqWfh5:UAcQ{s # !Dj +X0>{$Mrj+0E9餌p gſ![I,tIՓԼ31(#q2 aLڤ1S"xPݑñ2RL<2R^>qC\3uc ָYؚ;U#8մ:ף>9ó[x$"xhD!p~}- "+!/o;jxԑ!G,qp8Y(*it*Myx aԁ$ *Vܗ'\_2[j!2Y12Hx ?XڤM:YA'Skapq0 UUrfۭroK!G'. bhC x)*2W Prmb+Y! :gM%z&(TҲmWEdb!hܗ#,c08FƬdSjLVYV`)qqRG%71 7CS!y & Ch\gGƧLQp a}nW]8imꪮqۜUL2޴N/=^[fo q^ɞnWzv7ˮt郋>XѢ[}|otL)V.r׎lc CX]},b&]"nܱNFHO#qcΫeQm:kNQu#Bh mh' &"rҮ~3?:4򉮂FU1.ra\FvyA؋>:͊CM!2[/f'c_ !4poJuFJSX+$38@(nw!%O(FvNx{;O/]:٦ItPpOaZm\jԉr6F;GKql/rkz2rv՟a݊<Xh5Om^(Ϲ19@@DPB >QDm  EHm*8ʞ@Rc$Ɔ xO ǁ#aSN=}g;VZ <(φ ,TTUDH*AHu&Y]*0Vm&\0[k2PT&KW`+o *j}1&+Ÿ=ޚҌF(&[pF(v߂lVp&!6M>qcK/:3oZ ]zEkzݞˏ }/@):θzXȼd#*0C+0D3 V%[,  H4o&^% G!3qH#݂#/H22KI- K0ǜj%s h#Mt3! ,`PH*2/v4% gJMWKM`I՛гhӪhZ޺gO`R2iʤe㎴ LxjW&-cF˘{`&Q`7 l)~BXbHgM,ԃ+&bYX6_#[gc,&(3(҅F>cӫ_?h|z,{RP ӱ'EOjq@wчgܹ&EZ\ef/`|r F = J@ oZ_xVnff?W^A!X8 o4U}:F[E4eUTRFͷ\ZFbO-YdkpA[J)gB!ZN~5I oͩNydldE(S`Ya4._=at碨u@J IQwnU( B= dO;S TRUJfYQD*=nD?\d5J%UmRM6&F+X9Iia/QJҊŚbTDFf _m&v"NfK9ui P$Z+(:(S74T4CϩZ9"ev:IUQ]c6tϖe{sBHt ;PdWc$2իT=5Nc= wȳ)P(H .=]x(_켤Me\-}u'8.1o.'NJǪR,?쌧 g۽CteҸAA6d?DE"$)n"=`(QLGON 4b52m# E;N6,o'ˉhS~j(AP mV4]m 쐔 @*""ɖb*Dbq`Jh']iK R2 Q,ͬR,WxT9 1~1a-X ;RbhBV@(F1eńHG1> D72(` +FıŒVPF#[D";ƚ(S㮪\,IQ]31d9`"Ǽʍ$Q$IeˆhfiDOG,qsbg1-#̄6  _N6RexˌȼCNi&JY }k'X[,LzE_L0k42f5DUFB-DgȆKu.c ڱj$eii`CN\n%bcE9C)}F$qg@NIoB ˟.d )Bfreg:)ָhZ`pB"~sYTd hq6&HL0є?bN'oQ.$Fh!WnfeH"S(l4pmkHRAV .3kbAXn8iFkQLXƓK)-&y1RA\cc-4/ArDð3 ؋OJE'ʵmj-4 JJ`2tfI$P5|ve0wqIhJr m`&)~h ^uvluHN҄ brG$"Ix H]_j:q$:)a Ɏ2=s^7Lesy+BQ.12u6KHUVgýr%g%#+'c@>8F{28*J K$+/H "brH$$FΖՒ\n.q$?CMI٧R.q!k84JT+x5=lzv2(NveɁ(SR5&#M+Fh*)ZpLR,Hr XaZPTiC83NHsN0ץLEmhhQGUXMEu(^+ 6o iY#g;&Jq_]`hNd&͡:#WpyӔo 1TS&xMأ=˘M%ŅM>!/XG\ԧ@["3ּg],,FnZ&| ]2$DKcJ)^3B5RzTH#]J[ʫiLq[iDB;II#|0a|d `ʡ\D`5*gg9d$|A]`2*P3:'.wA=dƁ QWNuZ&~,J];a]5K_ȁ`D>DsVRF0GEZRdcMo8 SB@5V 3 /l o c!kBjm`x|>kKA! ]l1vIw}W7A"c |lvA_0K^AQ1QUz1$34Xׁn&s\%:DbgZU5d.q0mEEQToPQYQ#y{\'@ɳdy5e}cR}% +p STtP4Q&Wx1K0rdGɧ1=Yg"]ldFH&* i{z3V1Yb3"IBb("5:-I'AdS\jh/eX>V 7<$1d)3eCqhX}1(FO2?Qc\N435ptPqD`Q}o= _efLvzg~hd|BGD8}7!Rd&87Jy=wS"Vu~FTJ*(B$S8yeׂA2N'2t`6җ*/XHaB2v<H}ԝDgB fB &#1+I TsBS^H8rA?bSBR 48@ @1{ EQ : Ul_G$}HLzB1z sAU4oy2 %! c` 0~;nG9i.Mvq451qǎd#cN*1Ŕ2tQި(uLZרx؊N qt]va6)q攏cJYA9n(vA#7o1&sHD+"ODUSA*H:q&l}{ 8)oa{8KhPb" !&E5Ƣ.Ĥ):Ƃe~ {)f2jT,q1tjLBnY%! oڒYQd ) ۪#ن*:.I.j!w7 dq pt>jdA:iUw pر"I3d4U!oNDN1; |O/0Be`!T,1{?^k#C GRZZй`Jۥ>4bp"C9YQ);g/#ZoGԴhSX)j)=) QezP!Q:z{ b&Z&tqkbu07"6qQ5Adi Bo,L"^6RtHOBd c@ e;@vjttB!J[eQz)9sl.pAy!rR*T-vNnL8;1CHU +&(7V:P$"59tUA‚PfJ AH:AY),LUѤ_&rcȆ:+oCOM73V~ y 9B H|~U]`gT:=09Q7 > c9AEwN8󮋢"+2R&$ Lٱ/CSJU} pv;&O`g$֘U`MPcYl3'#AXHDՄś!{Ѳ8 7R:!% t8t$]7g&$sK `!v5q#bWNlj[z+Z)uP@ɬ!-V|z1ý4#3sZUdΗ}M@5R%$UbE2\Kg 2 q3HRBI ďSQI )`#HFc.s,\Ec9q'6Wͩ+-T)iC~5𽴤S!z@KGdzC5<&e[ Pb+ Apmfy\6lFb$6A5BSHP|G3X'5S5rh%-P =TP9CPl7t]J6$m2S5ՍL3Lh%TZnuP~е̬<fF¾1{L,9 ÖX,ܜ*e T2p34uG+0z!v'|E$|Q!^@qW<&Y$x( R!?+NE樯D3:\">-_#ݭHVҪ/aSx_o"t\(A- DPB > FĘQF gH%#3菢_&]$ٲ/hN%Neh9QE@bOMTjǥ 2IN˓-Q}Epڨ-ZPS&-Z5ޗU(nL2i@/`ƍe`xQQu Íi[ǥUO6 N8WTTӵN|W '<[в͑gqiϖ&8 mYb1m]|؊T9nos虲Fs~b 4(@{H V?w,2(8ʖz빂HLGlҤHQ#5C,",Ȗv-کvK?Pzq=X`4~ ji8/726ίH"X$ӾK/rNIS>ؠ-6J6_C_,3AJ\͡3: {CE7R6GJM0(WU4r4U, ;u:bQ!eד[! j e"IeWsEF}# ϪJ=vՎ(£oɎ_C'L)δXb+ fFr ".PauG^F8-Âi%=螜SVuz2P#&)Zʭh+Mj|$EG 64ՌN(=#Βɦ.ul ry [ZI HJrL|Z~m7)]35u N'TXYAMt۹M$=DAо=ۜ=!G#{ZHzu mbU!ψC7z뉝M{[{ٳ*QoqYև80?w&&PabȺg@60zI8A JK0_*hi/ ! ,`IH*\ȰÇHŋ3jȱD:Iɓ(S\ɲ˗0c3iRM UBV"LPnQΗ {LtJ骑gu }Alm۲Vˬk%hp-tݦ&)Vvn ߄T?DcwPj(tebX{R(^I_MdZ-"Ձ-"&5 uE +Si9THwR#٘#ЉFWhnAXoWŁ6P"%=A4wP%u2vchy?V iDSa k&SNz5mV~δ@JtO``s(;>#)\p2h&dי+)u꒼k )[SMEd+Ԋ=m)} h0O;I )cڬN29Pdl3=͕ Obt[[yji]_9@N%YM YBLXf%ճ_ޅmbA*D0RݦE=~}v%Yα@b٤EOj-z nP[`tX˔?#pF^,#\~[G6u lS=n8]vjP٣qC5.vJK@٧ZLDUv_I^JBCiz c'CeDB\Rh:u@ʺЊoCr6?H.FJp!Eܱq0τ{Dt01Ŕc~{S*KHb-$*{Q&[i2瞦&ZHhm,NȴGcY gV*c Ջihɥ,0KRm)!c@ WꉢWz"EMg/X&U.1 4ןUe9X8=vrBr1˺R9rG+ȊgP_JR VԢY 1HЏ~R V@ `0M V"Md!+UJ,9P Y -h""}-yM BÎdM_AkjٔMDdJ1iBQo%$%.Ɨ]qn:B3h7J)B͕%$Ѓ,X&ZGD{D$N=RhED$t)؃ i{WRA5khf ~NA2iW{2ahR|o ıDM1jA']ZuD]1ɧePPr!P艶nT}tnɠG&DR evZPekm3N.T8LIR0N 9a&N/AG{T0jUY-pZƳtTY ѴK?%a5Qt|zwRGia/+LA(ցVQ¦QW" ^6Lf$p>"NĒ*[CdhG|!HR])Ơ.ٝJd!Ӥ(7P`E;|J$u-$j#Mcf{ K/˗yn^vQ r Ps+"BP<` -IT<gۻ 陕xʃ=9[A72W+UBS/ֲs+ Viږ'hg;[z'4oGq\CU8K.JZъp͜G 8F{g[kzcCSMhR8q~mg)cc4'}"6vn DOͩIM0a~ɭ!.g2KԏiT7x㦛pL{96k{(ĩ !rxVQ(Z L.UUwAHJ9 Ǭ48 x_,8l8i?Ȩ4X ,Gt6 ~4jG꟢T4Q~ Z\BPS>s:]x7byX'vdLcSc\31 #5 q+"=;OE @++~-|@1.5"FC4vsc 6Zrvx;V5'FJ^bx&m^  D4$HR*Kb. +!waQE&FiQ(@P2k10[D"Gga^>!Hom A%Lx90F;u3bB&QI!9zG|cp[;T=f}]TgOPd7&^3zTߕUh\AE+ecPE(&9u+?#W 180(Tŏ  ]Ǐb'gw2'R}[ R5 33҂_pr4_#1| x 92^y#*Ȓ&y`")R!ᑼ!t[s>A)#>=Su|#? !-K͸C2!dz╢sHVE phEl h-n=^w1g($t2+`JVq'ȱ@g#$֑@D*ݕ"|#DD*ggJdb:=/PH^P ;$}mJh X.BEiZWx;-쐟e{ RiJr;$'}'QN \=`cx |`s<@)iC?v/ԙ`%2M #ұo@USa$@F"+#=Ӄާ7su3g1c<Šy;ZwRb>-F;C=,<,h{ͩh]ܒ7Q1Jŕ<^E@aLapJw3!}v&P2(V1E(Y!#<I6Y:x:xoS'k6/_xq* k G*zK Y!s*-s*B @=汨+ثa5.HdסSgwFa) <<oFr=C0<#6@'x!yejgW"[)WPw8\ʱ>%q[4HWZ=*T9g^ggzs2os1&yޑHhm3 b#QtC) ! %yMR8~qAu&#˺ 㰜[pNK?n*6cAo:""4fXp[ܒe&u*,QP➟e{vj/+Q>22 n"bzg$DNRD8+/Qta~ јx1@[ۦzCm?kb ~"#8RtB0Jyrֆw<4c Q{?į)AAc?R%VO,BQ n9&}"N "zS{⑼Hz " J%!cO1w\k yo"[]\0G^ozO'[hv1#isi34vwG!=5zTy“N_J[#ڸrtz(qLX59yUe[Rl)ryBWSr)ap|\'#*ї[ p(9&evpq3UKS #QF%pg_W"'L2>aF1E]hS9X(jy!K+r",Q|18\?3 DTa<.9IcYGB<'S ,l} hɁ"8{R4ÅR\C@ vpcБh$dpt2OHX f.7RFWW/!.A[0q\aâЏ*$xT 0 g;T8&Qp v BʅVh7<fNa ; \4@f10&)$]ǯG xFśg! [YMsˈr\CNZ0 U/7|a\4S!$QR}*RP rMQ%7;3_ 5\Pa*7 V )?'!'4 ;i,/$ _ x' d,:oYNҷq喓|[QcF<,Yބ>VȤ Ș .e/Uʮ*X<8z5Rae)2p[vx!}Yu\9|;4M,harA2;&dBCPrsQ}`/a:j-GCݪɔU\ x35!T]kS:$,(8j9B+hS뭨ba+̓5|y|M{Nil+"6 +cQVBQ plҵgۊ $Tdz.Uܴjv{"?hL@E!|g襛T2GO8c%6pQ"k!c`s#][#)Y[Ϝ;u3KKG)s8Yrpl:9Z9bZ&-z\"!ӼnŌ &-ȌC!=-y!!lX'ꜹpRe +t*қ֐H+aa'd-Ex́oQ z$ge12lB[Eu=+pl"Hz}t,U-7,cqcHynGp6k~Dx_m CI:6?3ðYiʻzOoOWYjR[2V҇uJƕ!ſ(L/ڏnWcvU,drDp;A?YYW @@ DPB U0^ĘQc_ ;nRHn) --]4i+m|SF{SЄd9QMԞS:MhEVM㦚uءLɞoTD-d:Gu={{8+0iDjo_ƍSAMl"X3[/K"0zf=v?{&'ǝH ~k&vy?Nm掞}#S ^XkG2R^~;=ЯoAƻM/Ap  [L?\Ȣ ۉhX&dqVlyq*G_ϦX© DUhIsHk~vHsG, G-; 4,IJpJ|Ə "31;PƂ󱚮,.K?!m2 H0P"+,t5T>J5?+j!N3TW#LD ṲpS);  '^PW:ae+,lӂ֡\ŲRng sٻ 9875Q2XA .ZW*{Z)_jY*D/^/s r?cשUM zTzy2c4lh~R(䃪LMVm{nnk %EUoܶzTt51E!{HYh-7']$. --,6$o?tq~ 5x9yK&x!ݢ>xW8zJíV\|GzlnjyP῿]3f|ߺ]@! ,`@H*\ȰÂJDoŋ3jaĎ ?BIɓ(S K0cʜI͛8sɳg_5J䭎/&%ӧPJzQͣER݊SBrKaSGu ڳeʝKȊ*i"ܺS ^.XzeDF̸3LHm"jE[XhUQZWg-iֽ_^jIS&Vj'J`&&MݖvN_}L4!WLަ֝Zމ>@]|9wg'u VGqZhVgA"}4Ai C D_}"T܇iD-܌ E=3 tX]&:W\=BUU@\$iB$GE٢:GSD}_qiɍcxpQIʈ4"h;aBBVB&CD, S%iqV73, (\: ۔kG+$´HPpd A$~IFX!1qGQG=GTF" 4"0Q%RxHH+6Ml?E)7b ܄GQI4_BQMxh*>Q8Ί;(Q0';0Q'شΪìQ/BWRڢi]|Tr",{̝(HFS+s$1%= ~޴!sItS1=#&]{rB4,BZZuD!piZ^rGAhmO 8DAM]dc^hAQ9>I)ۙhG*膪ҚE_ܦT.BA\& :GP57)'-XvtW\Gq_{SRZoX3U='}8Ql'Pq+riAha'1$WXqhZv8xJZ`p1@k)|DA➐.D͑$pNlSM2qW^$ 5(VO9Z&{ ou7՗e.%Y|F*+|.N!RDo'waB+H‡颪H'f@oAL&Cč^6dl fJZ5 s[@=ײ>R%\ЂȞ:""ka֑*JO}QvXQ|.ˆEӇIZI̓٤lUdcugQG-bľ/j i1ZˈE_2 zvqMˇ4QR&;j1%)׭Gz}+LI_^~S%Ġ)*fI-_YTr{~W7IB 럘&4, a7:[qjwَ-x<ۑQ ~,ΡuIZBh-f&j cѯ4&M5FJ߮5;J)T~[ R|l}Dp=}"\j'rY昁/-Pm>@JI#Fn3ڃݴ(EscqNRP4"=ٶD:/txlIlj $ p+i7vthhIUDӂ7X"vwUC~4A.ᣍrml`HbDjRY *y/G[MPIq7Qc:LrO W^L/CbEo[n5!EVeRXF>ICa@Y6fV`QdPDL#Rړ0Y4 E9WArZB"&# !b~a GgzЦit?#7Da#A1Ó{n~ƀs3 @lǷpIk؆sR_ 94nP嶜jnX&>$qGHiE?bhb3)c"$Xǒ1&Y HC=zFb,B::ף'UCWZ@> Xʈ"C^3eOX`Cory " 7,4X0͵1a&l2O(AS|d"97G)g')YpJi;2wӖͦKgGuh-$+ª24Xꦪ ( m5WA e$Is=A/-"7Ozh!ZX/;#m!}BqAuSJ,c XtNǪ’}lCUBj9eЮZ@/I*Ѧ ZDGES@κU4]''OoAlǰI8ai[op'1iFB."@2Oq;~k=%x, d}ʂS]jCڮx:!E)o(Z,Ux7u,Th_#{'"_{v4mCA0D ;B)'vE1B! eny!w4xB9E4!ehѽ1:7~ +ypLt'4%lUkZ .Zh6+q aa|sb%Wr@U=$aw$'>Rk]w&eNCB*/L>k9';iA'Iк;&E…pֲ--Ux/=&[f: TR.vL׋PIW_z$E|VV{-7~^grM)X9~q1wQt"n+'bn< IzPDgy|1|#4(f  zZK(R5?L-U*!'*c!Rס='5GK|hU:bPPJMbF ^ laX\YkeI2 B-;{+=G=Oa}J2Ivt] <WK c˔nZ.Q['@04!o&_E]Yt80ܟXtx>)h0Ϣ54 g0߼AᏜ|acO?Y؞/NCM62UCF|t"b5AW-o!j[?Y4wjx=O3 v\5#_5_$ 5G$1t4E!OA3/s&!S߾14FoFEr;C(wYe(&1κމD1E}YЏ@@ DPBg &RdX^Fo(ї??vDRJ-SrS@$ :SΘZ$gJCRUr71%FW$鳫WecصѤZE+hCuRKן-l9͙w]…{oTB%21" 8Y fÝ=Ǵg@Qo%<Uoh+nihOb^cCf\܂$f%I>\:aPE QN`m'r&y.7N9k߯[]?{`H~C?;ˋ,h@$p#,ADaҢq2dEl-EQj%U2>ȃ曏!*I!dȠ8RJh1DCH1ӄ3l(،3OTgƣshI= ;sl (LB-*h䦄4SlGJ4T905U %QUYtV[ut[wI^uUJXj56PU6Z|5QZk:6! ,`@H*\ȰÂJDoŋ3jaĎ CIɅ&~Xɗ0cʜI͛8sdE= JƕStiШADJJզNdzP^Ê} U!W?jXVطpʝ˱@+WfڴեK/亗-Y $R#jƐCc'AM@:(Yki.Z`k_]l[p-Fẓ7l6g ( B SC-ٵ=:j47_O:!gO!#Տֽ~.]ڀ)_BhQYhWJeaC]ԡA.E(ITl9Dڀ)(^H&u䏌 dg=?N#&ALSE1K1(P&A%"G7o ) eHIvqeeTK>PeSlNݗۉgHVۜ!hB`7Př'J5uJ17sw!@)5ʡiAZ9ʗ}B k?@ ,BX|]Pq,_*E ΖԘ#l=ֆ pcq UJmETQBUL87%[UV@xWTԣգy4V!) c-bڂ\P89XW?r z%3ZxT] 6qP]Ri znCԳ@ tZ:\7Iz~X$ ^s]5}8.}=IQ/i j:PE>JڬyC d4Ln.vQ^( (ʃ ^ 'NT/UGqB⁅YjQG+vCtI׉6Ai=CJm"ʠQ[ߩz0hU2"wlZG| Wg4~^$lW _B@P4N`6C=KJW@e-s@~qB/6@'Q_ƴSj}qSZh)r½8:(H8/ڗiT CpS "2 e`,a$erbICA)*ɂH;$JE>jOqϓ Q/)J)mɬˋzBeR mOm D8{%ЛrWdl^ꬊgm?u򵏴5,{"UV"ҳuN ^Ki2|vfCp Sc!AdS2E;⧈Wc>Hۘ7Xdu' ~=- ~vDBI&\ &v=O"H tm]\sUBW~9ԃ_а`#L!k'"ł4œ iR 㗢-9Ңd+^eP|X$b0jQ)ylvmEJ)%J2چ(&GBED R[o{]Yl!Il*]X$3 &:ېd 8H1v (Rtv,6w!ʏtyU ZqQ9sߺBIz V~-rq'ZcBjifPө6Y5lhU|Б%XYm~"'BUX9K&xȴaB\-1Fv]`&")+ ز|!uI%T[Ҹ}+/YW"Ǧ-= 2l5?Z'㦀N8?pq&mrT>2#qI_9acQ[ kgsq^8"2H3vR8WM9Ӿ,ɔ<)M!kBh@2SVqcBC4op~&m._܃XZw {f>QuV[!2B!2k3~IIС9;7LV\#&NjbK6$AE[PGKxxSWq, (wRn!E /-8#fer38Fv"bx8Ns^NQ1(PAGw&҂VhwAk Qqv@!Pc8ɣj:yl|mu%f8Se73G1d7 w4 'glaZCB9q%SQf\x(maﷆG&IG~61 2aqlc-LqB q#e! 17%mJ4] \oEaCcZzꦇ }a;quIU l6rRq?ss87},@i=t^Frs|mto%Vkd6&|Q t?%Pqqk Ktk ?g4>|%ewa:$Fgр*we7$!-VGW4R|.t.YW6 q{,srh䈭-@9Z:=_U5*ֿ>^j"vSOr$ Er=Ò$7^i j9)OkneVYSƒdn@Nё٣NkkG\U,`Lz`%>Ƞ\Hu'q-zRx/ԊEX #1PБ@~8U0,r? +Xv(3j(CUHVEE T ycc[EƑ>#FRδ%(Z0 mh8 MdJAUp-i AeC.E8݌4 %d aOxqu1O5YP?kJ:j8Y`^LPzsN.n&xTO*uτ,1 v%G!tv(mF15I03Ihҁp !25R+"Ĭl_jjtIDQ5pC 852@wL'z[f59m6DY̝Z}#&qPIQg1M'2R2R?"NM"37H@V"D1Q\jB:7"CI{VH B6؂ B#HinuX';CPVmT =3.~؍/ՓME9a*9PU{"gҏ*宄Y- g[Rg@&*IbDٍHT |;6NVЃaG=ߍ!>0sXo|]0撌ahE=@ϴc-)jюq5PQb=ϐQH (آyMH+9^#VV!OcV2h֓53)M gk)كWhrK)g&ZRLh123˜H@grS~gjliodiI BA[ҡ07@A6@,:"m1nlC2(L(S~& X#,Ⱥ 1#s)qܡlۧU7)Z /Ǯ@Ȏ)dgWu~ قBM㗒S01)O" ^bw]=gDTH]ϟMK |'[VԾapE]v?U,]7lo̖n?" VkQשŽ6.fص09{3i(&z4"fH+C 2+V$L Rd]Dg1w]zqڡuZQaY#Z"˳ U:g&$E* Y{"U,AW%o`GT{ 2åK9JnAxڣ@']];-.v 83hGut@u<( z =W `umf4Fِb!AVcWrT'BU#S|/=Q*7OHq7u#tka8=sZF$u(O4rO@jA?'SҲ:d" CG]Z㔁22=aW,WÂw= H}"|HAJc6SS@v1(+F.>\"E ZPWN3.T-] :5q9#9X=[X^sy%Q3WBF P1 Y7XrN$ޅ|aR6Q+b$8."=mj HFr}:HQf#@&z4Y4T'pCD'}8bp4;28R)aqW~"sWx"a9׈M<2uMAI)ʗ") =č.bD^B5l3" pi=y#fy .p2.(>fPrQVvh=pSkr}(1yt8cZJ_ ʍ[bz@V mD𕬢q^-[EXeV%2ҡlk"`K:1bbb)Q `fFrsFj|hbYeTL nI0X0.1Y Z-EKIzK؛$ÞÒr{ 0Z(6G ACS8_!<*# Q'_I)845H*W)f ;Rs jLBsCaaR)zlX#̒z&?d)g(za p+Qت(ka(D];BU!%0h+)bi)Q#^a qIov)q w;d FaBsŴ"OB T17b if |ş' x$#6+%IJ5B lZW+Ixt$";g3 ɧ5h:9h]54չdiZyu&=; |hPP l!2rlGyI+&my(s) ';D/1@<μNAxR \]KjzXޣ]^.$bI23 ĈjG ,FWJs}3 N2K\;j'AwXJrŽ#2'bFG>#72 ~YcVt = fγ"HWֿd}F**SyxZL"̬S'~:],"XǚR4SfnF-$v8 rrsIEy9wba KE+3_[|H᝖vӓC 8=j>{==+7=9; IȦT=~ |H6KR~μSN=WH`Xڠ;-)̌0^]#TR,- ̦H[+kH.y哻%Xx1%mؿҮy~v ㏞\<3ߕ:*rU;`ȳJXk>3* ukC!7^h.?7jӸ)mAǴ>"7,^ngk戛EԪYʎ-UL`V*מF;"sj0ATc>}t{?HR2 l&NrՇ+;CW[B_&r  (M0W$/V`#W) QL'>{tbr ('Pz3󙱦lAn&al2%<.\29dK<_ji15a }j/gh!Y4h%.񵴭rW1)N*A7(\y!+(ɷ!L'gR|v͚i11/La_?F!5̹ia1IJ?Fʯv*ԏ^_/?! ,`@H*\Ȱ_#JHŋ3jqǏ CI$Î&S\ɲ˗0cʜI̓n!JFIѣHJӧ?>4(SBJΜ^Ê@Tg͎][,۷MӖK`T;? .8͠Q܈^^AIv!Vୁh@\-FUCm62-qD4+ ;EzQ E@ݴMB63Tvr`gg#V @%\AX/t'߀YVAdAY& Ԋ=xЙ&Zga-w Q+ !gzER; VGFrib#q(#-I#ևo xA'(YRTuΧg9 U&ec䎡dN@=BfgR&1Yg>&)$k8'I&dj}'ff@PuyX^quZP((p J~U)P=jq&f p`RF()P;N)ҕi)ZP"(Blr&[8KJ=F,صSK+ 4DJ+Se)fOt h2ғfͫ((&;g'Pd"i EyJi y%&r9 D@\1sN|MjI&l(R5|NDXNf#w̞ageq=seApy ]a4=Zk@+_%@~@S֣b7Ma-r1}ں"aqㆥJV=c0[sxXg/]7Goкԛd@|6{eZAS )PgMuO$a%zIV:P~+{ ٍjT{mq|"(w41?hw:GV) w#A{Py$0l E0 *~a 1nY (pt?hr RHyZ R<('hG[8֣ /rGRQ^XH A7ŻKa 걊(HWH#zC EzG*6ƓL8AVgI*:MK&6@MI2 AF" )~L344H5{ -КzB R74BnAp7&(pC@Ğf(QSd.>ZWVhgHz>*.'/A+[ e@% -#'!wD[ Z]8Xh8,3y-^ izt!"|d("VGG,E3yb`!ʐ dV PDQ'PAYq I ."|}sQ2E&R(ML5e<:ȫXt7Zaz!cLlׄ|Y'ٗ*R! L8fݍKc']87rɾh-LiY&]rI"8`U#2XAX&AjT(g)J6 :x 9ZD0.Cڌ],`A A;D+WlZ(nZqMG(cю YdckXdXAQ!J`ɱV)0 cFM|L CJYYM;H1p90Pbܕgbˢl.90 e:{Yns+C;ކʛ0dſX&AqgIS'mgO1R89*gHSz 2VyE>82)9@:_c&`H:( >N$t '+0˘g=Kĥx=(]\% 3fO`:!I$HH&!~M tEȜ[MNt{Lk[J~(vMJ e4 lV#v@[)"mM Ϝ igѢE? "I~tĜ!~`HJIO"78+":FO6Pz> !ygC^@ɹuU|!9bc`Ad5,`%D[D,x՟ZO "vC&f}I)[33dwL;&0HT_8;Cw>_1]hoMuE?gaf?#I|Hh-!2@Q gZ|WAU<[ S9PG&bpDc3p;iU|CFP9#97tb=Sh31/'+'&gNǤRȂ eѓ!L 1  _8%8$lDC`âA3/qx$ 8'a}+sSir9%a#C"P4u G\?4UW3#>frXf%G1b]v(9B?j'Znѐ.1$Ƞk5VR%fwTs79m"EMQ/qX ╸2 ,B0Cu[9C:rcܚa5{ qqDZFQf^* >$tAsQ31!nsđiUR{'-sKY'D.4MT8HKZ!a5Qj#:r9Ac=D?Z9oLk a$rF }ٖoBWI2 %r 8Uz7N1ҭdF1]=RNsysmCz~J&q۶*%u.[ȓS( &;&$jIRNra#T".=p᪠w":7Ŵ%&4dz3`c3K7F7TN4IsH I#1'6__yp!V8kQ_??8"ƶaoD &sC%Ͳ&+R,.[۾76_dMţLR{ŕKN;1 AC`A4RHF'2D‰,)%&׸|#4H ڑ :0tzmdy4c$3i9+dUf+AV("#n/lHQrm78J>!s M\3nQ c;9'Lv<<0TI1H~xl#%Yj(cψzgTf4zze 63aTC xE7{{ (Z()!P-tT h&wh#yDP>+>+#a s]1Ԥ`L})عPͳiι~ ʓ y҇`vR֨w AHARUʨz*t>=(pRduQ{|.A}8' ^{R%)]|am1N2n*m3fYN>wADq2Aϻ^E̮f|5Qdh^_{nzCU a!d]~ȺNςr띡/&%&2$x+b+%1j0(\0҄Obfm[rC"F/FE{ʆ DTUK_ƒms Wi -o8^"suu.8'y/Q@` b[ec j1FR?.5 I1^9Jܓn:dG!_ǚ9_&2+N#ب_}4/a!OfA\qyya\nx#t1 @D 4]A >QD-^ĘQƆ fG%MDR% me:̅-ęSNmys`-SRMM &F:ŚUց7n/d[rEVE]W܂A &%x&ٛX0ö Z*bƍUuY2D uXyfu-{K;Phq/70vkچIƬomހ_! ,`JH*\ȰÁċ3jȱǏ CIɓ(S\ɲ˗0chq͛8s_[| 9(hQFkU)A5%Xk(qP(ٳ{Ky](%Qc4egݻI$ +"l"๐tkI_c@7LQZZogVk6vκ>3X`gRt=jl+;`\Mn`6MY>w g벬K*œ 6~B m ~ 4Jj}6c F B&'L>'} B~daeB`&YhOnղIA*vIW5[%='P=ux5aAɣ\@c"P{ "tuaVAI"ZSMS(Y)ЌVz@=؛}DtYZM!C $EkRO^ v-BGN@x~ ;D"4h=ʎ~]Ay 8HiX?QRFfl,eQ#jӆ)IGbsuEMmd֥-mD ԯ^2$MyOYy[&qʓvkZ&%E[m"еMI5$muAu^P+?x%윇9}BlK\@cԳY]~.RWOi>`I.*ʴUqK=ZER٢-Za hP&+ԡ Ĥ{p,BI?hB&q0=SԈXwD1y Nߌ5PKR:M0p/δ0Z"IC5G2Dib?ې al3h<@6DXJ![/1!@Ai B t OqGČG(gJ(d f7Hxт&ViP @XLs]JqjX9Z&K6ˉ'%BJS1"g/hbW2E4x{RF)ZQ&HMl^s Jds.Hz$vN P5z)ʐlMnv̕6.YP"?03Y# p-I;L8PxJ!u{lb5XiP)`tm+# " +J"ą<̬Y#Z,ArF,M%vZ."?3LH,"@EIy)X\RDDJpU%Muv̀,2}Fa uqԍ6x`+ ؄2)>68Rlae uH1Mh`xGLJvOz VOE(^!\6&`#ilbo(QD) OiD8˗?sJC>սbFF m4''`YC/>blhDՂb3a 8"t1zM6>n]~Z { Gb. Q/rq; bWqs7F o;^oS\Q~4 b {ha#H+xo4* hSL%c"aG3zK/w~"@AJ$rKAs3Vg9p6x 6OXPw6 <>"Eղ&m]58sqX)fs>q(4}^q]Q$}>2S)F!fc1M 2exI #a3r̶cdQ.Z0{`jt]%!Ҍ!o4,CqVhz?PYY(EOd|a|G!wU·&DSՁ K_yy~5Sb PQd#FяT1jюs1Os2cYw`Z 5D:1 4?+7{ 0cVG; &I'du z!1ԅfkgA t@iV@5;ڴJTId'H%1h>"Q C0 1wxJ12T}&QiSY&)/Qe_r!p1}13E-9("Q[0#>Mib v'%Y[:a Q/Z@H/)iq>qU n% }"C4O4pCe|g U'eQhK!qfH4A #\! yE#dĆWǃma fqHgT8vTTKr([steoG-qeb ! . C9(nFTkGiKHS 1?,S/-B 'avة6AX0r+$ Y0&J8+4/ :%bF db@ @@$ݢ~GQ (!yXvctz@Z9qaX VuE4H̑1yc,`g!)BKCkAEƩ Թ~J2FWu-iY`wW/fos! R8j:s~ ipd2<&S @Q<g7CC$>{EyQ+‘vcB6%&8Ѫqs)ڵ  h'UYrcuQ7cIrKU]z0l*uk$ļyFy}d25fg7DhH!ub'*LYQcK~AL>4Qc`O1mX$¹5,;MYM$o㐐`} I4HJ$F; % ƻ:& >pGjOE]U7ux,g{[!3uR|XH_l_ 4"SCFpv0"783r|Rb;g} زc9XQb9wrh~'up-|J<뗜 k.b._ëՔ%*z AL`!knc1FHˬۡq ZH=)Y)ƏE cwE> !S}U6 lfYZ{6w]B{Dm庙'@w#' 8Cк#_mP-JGqVS0Ô >#}_?p9N㧂i7_ȟ QJϱaډ'7<&  1-6|ܺSƒܶ}+M&}݇!@diߝI!jOC~3maUh8] ƴ1ql R`ia.sq{oNt3ް 0]*B M +~N-;!F*10鋧90ĬIQL=%Ř< P+'3ZCH |U!"h\.U~1 a^a鄿4C(:5ϾPT<!רB!K"0p *weA9'LJ\^*d>@[ R˫Sa`N+%KjU7n(3c =^M ꇎkn}!:_1\>AV#I ]"xc_qUsai#(1 2n(8?.ݘ/뉿<!! ,`PHU[~ E Q q˞AMd $1cǁ%/ɳϟ 5ME`(-@ `L&tЯ` +Ɓ7"d(,ǔ]mGY `^k`"N趢V"$ށ}\̹Z7#vxjLY0_P[˜A칶mYH{oL #5`=>~X"kYBxjf;}̓G3q}*͓Am\<@;ڷ 4f| &J7hEЁpQhP=兕jT$Ee~leI'ND8j%I&!"Ddd>6)ay]a"C)$)n<:E-FCS93Oh'TO-BY uf (XX&POGQEPMiPZu:aaЫhH:ѧTB!~فQEZHD(ŐFzY(ЮNIuU_p95%EmO I@h{бR{UJU%z{ߊIUXۭq6`گgFpEeYP)UƸJ/o.$;P#P4ŚJDV1d)nf)a;X5{kύIEM(<f\NtL$Nzi1<,XvNq7r)?lER +$Yae1oMa=dng%+YM-e[1J&u˵t)_;f6hAs[DN :b!8|eB\=7 ;CgjLP)5T<q4-e5ؓ|N֍c@K$F!0HeDxguy&V9g\Ȉ/p)þ\e\# 2CY (D#ř0(J I213(GjMTf,Y A!>\#Qٖn9QlOCR%I$WR/>I k{|ƶа%1m/!nš eHQX-dܴ4 т&p5Lg5>.ŕ V~7"&DF۵ZhMI,IMVkeAgw>p1ڦD3-CA=rn#*d  dj mQ=@1yWHG:rS!HWH9c(BfYAJBi0{kkaƢC BYC(rBOdj!`\TIV*젏Jx^hQ>gƪqmDc>m<1eL r>OZYYzՌvI5v%hsVG%^H27 S RTA~ATBo&D2晥v)EUo3E̷IY1xWf NqW}0eBPQeGHnLqVVf"XKmx|a!Pb[xM.3A 9m|$b4,y&ó2PŖ!]BPC H̒ho=1 hQȌcB6[bz(}z K^HY6`w&38A$M-"Bb&/TWa_QQm=D8$%Aԣ_?v;,@R&7!Rr$N[Rݣ.B6iQɻ"E+ġ?:Dk:6nNA,yg`ኈe+^̃[h*dYbŚR g}1))ϥQ9WA^*J^衞|4 ԃ'T6RɻWDV赾sY S{c`Ju&lT,+%Q85vuJ;FE]uc[`A@ H0]'u7H ETb_eVdEBGYN%hb4EVZ, */-#g%K~Gɇ^1! ˃uԒ?ա&@R| 1 Xb7!ɥk"]e6VW"W*BrV_GxA~0xM5(u{D1bEFD!atPX~""orMYQ09lfnb(X vrXqe67bR"|R& A!іweW_%;idOK ] BGMQt%ja!%s9r˨^N2CqmՂs}ٚ #y!$HKyc]h2G$fA9)x0*\wa cL6鉿eo)CG.pQp#"4w)c1e 14 }Ig9&n# t/32G*aL,cq` rO+93ʚ)蛐A;Y6*Ё7=F%t6^"iTsxR1GV( & IysZ8V⻜DS#K.3+;#31K%Sav u{5aX2L0ZSis/ϫsu59bq A#vr21/V6j Q*dٜ0&s,f  -Lƥw ||{NuhS|6|!s ȵ'wI~XBx|\ȋ5R<3EwOat Xԛ_P@JaƋ%EQia3AbYȞjx.sGb-`\352;z‚%NfstN±DEI7}=>HCkYt!m2k+ -"A%R/lӞ1m:ma?d7r72 s\ԤRz/N=T4}Z\^wֵ`r! ,`PH&Ç`]zf|Hē(S\R@-[L9&2%T/ϟ@:yKhBkŷHIFjJp#WJJ !Ձ]˶-ɂ7&U ۶._[LF\jVUf$`˜"[y`٬c3f+VD{b|/sз*%C3K%U  QueG>7!nF>wQkWMR8[Jܲiw(=1LmGQ7߀(ґ&+XWf "WAf(bC mܓ߅P!Aǜ@%@IH`>f #Ԑ18(Uz&V@AD:1^id"KUFޙR ( DՐJ:tAKqW_ITU$#JT"e ?HM9e.7" Y1e)J!^SLd! ߨGX`S`zI@Pu.婭 Yf[E'ameCTgPW%t9PfmV+Ml ;-#S-&&ɨ/nytXcHb![a5)]=F;eԊs԰?6_,z`|T-uDme 9hMbP Q=VQVQ&[&yʔ`yj 5>&}RM*=JUi:צa-A%c|o*݄Y|sn* @x64g'A>GA6̒Nz 8J_vWY m__uz)^-fVVC4/P=]HK)$ N;~{V#/Z8c ծUMjh~s=g-vH<[*$F>CP߲W͈O?D|W n0KA`=xO8L6yl6 B=!OPVZE~IQ-Pv={MGjdG J HO@WVG)ERS.n Bf"!hюLDJ&18ebxSANXoUrć%c&Pʃ(a&c`( ,>)@1+ %?? N\R'I,VU"1%3$Gː+iKu&5aJuGfu;'~&1O(Ldd*`V&㔉fG*@;G=*GblɿL1)ۦȗW(tZ ׀hL"%DLuфQC1 טq faLAT%"@JX%(VJ.:OUNuBXAĂL0Zme d=_C5B&Yc*3QVY2:+@ yVdn`;{d[ !Bd^: I!fr53j}n69Z&$6yBlI5m0 ֯Ȏ2foM%)4C jB' wúvBdEH@Z'eA b쁤bSJOՐ*d2S_C\xB{B|d&u v@ Os/zy\1Ѓ؜ ~/{P,Z J4E>"@3PH|(_LO!Ѝ3;MۦZQhLɔT%Plo foR#x>S=P#+͔40ףA25e%RO]͊Ģ)5v^R,%5SgvmK&#!E>+ Dߑ= qEևRI:ajÎ$39O7L!nl0o&5 yFM ne-\o~SU(v8v.5qmFʂ:uv!ԕ 4RP!Sg2I~ [Dt>V32@U!S$O j%%u6 ;{)I@k:5DvHyPx۳)R8LĨsi;Ύ:F c?ڰ9a=E= ER)LsoR'7 ram nƦri qsfhGG7!~ N:?4;ㆹ|* g)"71ҍZJHZ'KvGoO"~wn%{gye3isOIfIEޝoyYyxJ.oHXA)ꢔCicbGejqp72g?a `>Ad,xY8zt۩3f"W1X!# U7!{)Fgt!BtAtzў!_8?|:YH J E)P#Y@!#%~٠xUI^w+19ma_8b" QIL28˓C;*q?:HSNPh$*VʖyaZ:\ڥ"! ,`PHuV_ #JQDkU'J(M:<"'r͛8sɳ'NM2GE (E}JJ'DQʵ*BS@:D%"[ʝKL5-bB %oa*^<7kH =KB-jjigm3"<ߜx*۸s#G@y[m̙^μ =!8E&xڹw_{ńj6xC6)8<:.^Blv!J~ Jch1d4AEqto_5hGuWU{ @'Pz$R2A* DRscCSŕ?J=cl"w\zZ N-#n%fkC` MB @U\ ULvVW(Q4ޢ2dt$X9}p/CӃhX])7dDih?t$#sh "bDQA-ȟAFKjN:w,P*CRN6k Z`f=D&ʐ6 !B&ֳ%ST'^UPy>m\ v@t{:G~GCp-&&7_Dε'-vm~alȊ $B2'T.[Ad[RoH7X+Q@թǥ3MvD`A*Ê%49ˣ(E$UUhNR6g1}HD=lm>F^gLd%ZVD%iX0+3rretܪ{WCe8CXS=frdYQxIfZgFH4}dO;h]Wy0_qTeς9=a8^+Z䡗B<_ܞfDYJ cIG@DM\cY^ V 7E$=\( 4SU0y ǩg`@ab$m*ъA cĨemac%D\< P`69xFo)bvP3{žh 30D63`gŕM4!_A҈(.FՠS#`D*@ө*%@yVM;B,2L&Ѫvy(3 & #adJ[JǠРJA 0Qd:Y FA(L0IvDOj#(J Də\M  {%J\O,m$TMgl$TFA? 2LXr`0l %Z/*~," q~3M&XCG˱H!h5+#Y% 8 /)XAڣ\_&ފoӔȎ*vG݂H5aQ]-cE":ݽ ;ƈxw\SiTv?ާ* U=zC&L $7bj"%L'&%[Tv)Oo15^x:U}c<#{̔R2O&ҥkS{90{CL@Z-kQnDϝ. Ȥ?#;Kei3c:%o@]^)g>iha;:3QֱULdt&[<[cZ2,ȴthjf@ ^G1X5UjE#͡Bg ͦ ">Cu';\G ?bǏ+B kHT 4 STx:q;!2DlobeMRy]C (лYkDl6FIIb͚AF50mɄ6j&ԤR7*c6o"Lʑ2OEv sI%JLVE,/%>0wxVj Zד !})B Emp{BO<&q/#DVvy3)d7g6ZP_ѳqFmLHXS~[3O1,CbdG4CRF?*8 yvB+a,b'iwG(:5PrW U~TlW;gK80.r$B z8GG?u 80ushV6اu*)rb8c2;ek_g3(>_&%O'8 |6;7iц#~ta(T"5{}ُ722_b9щV qfsO9@=I.`({hC71_8I8ށ%Ar7\7 EFuo[52vUna΁*.FYyQ'>(6VK-BYC@'߹"mT3Pyp3ɩp1i8$s Hj,u#s{FєF)%<zOQL~p}~*7)* 'z]B A]O'3q|&c66G1IA)4LCaR{QhBJm,e'8v"bK4.-T~(#E5@r(F?M cѝhãդYa02.b4 N{ &^S a 14DcCDUVniI020d@%[R2YUe JoiQF6|[h (z"*:nCP%0YjjwXk##@m1A(8 I2 jIB݈S/Jqʪ}fvG eii\Gj2 A/{._g"ugQ:AF6f@Ro!f>Q2QZ7$֯Kh$w*LKcb? E#Tq 0acRiw5%{ 0[L!XC(p}#RQB"1Sa~ = K@8* zED#d(ӈmW>ŻC:rdvkk+ի6]ڼ4Géz-٫eY>*22B[ *j;Qы5'A&GySSڋ"q R Aek>*p QZFFV턣IB, s:`FD`* bZF;*(/Lw7 wֱSȪ*!O?):xV#hB qOĐOX,e~'O#>,9)<tkzVq6<$E+ljb6%pTjK@Lk)!.llli2E|R[ɹ+ZуxL]٠_ä ).r#hvQ2E<4l};ˢL1偋i< ]} МʫY|pLkͣ|v4+ |OxqbܻCDž1΁fw*Q@q#K, }-Ҳд}׾0-Y08͏ = $]l}Ҹa^y.=U/ Bn7Ӥ76ű! ,`PH*`#޻޽ $+!Q4W_Q4W_Cϟ@ -8rQEJ"eĒ3#(( B=ʵׯ`̙*-C3ɌJ%Y oK]IUeRfKa7`7PZ^{C,T^2n(c& {eF>(Sͻg ٣YNw{'AkaB#ZU/^avpyo4)9G)>|H tOCƭ^bV VDxUtV+?4UU%kg7PCE\lB=3bd d],&iP=gX;b {( \=)A:Gz}Xi9!yI&a~$"څ#kH%UQp䢝,bwZ=m\7kebYBQd)x%{EԡiB*$V(I|m)E i5,q7*#vG(} 5R* ivB*xέ@ j傖Rϸ(AH"z"lgVy42lI\zwy%+y0B>Us4$WF͆<ОOR.A5чd^gJ͜Ъ$U$oYzyM(@k9MsrC-bs0c\Z:4*2=kX&sdgc]9uŠ{] ks]a]&Ee"x2'1(k]!숉AT$=&A.ۤR-*yE!uJixAnW}f+RJدZ@tDMT3PGk1%asAħA3B@2kmxWhY-9RS`M103eBv\LU~ᚽRaRhde$Nr}l(M+ HL|![fP4ׇ`yq | -.A$Nf;%vl7r01OvAi^޼p+?q _6dn\1-0YNtJ R#2%3f pߔm*KM =HD2`7d@U,Ce,` W`[~"栭>!'ab= ||Y e,ǁj kMq?)unX %$vf( Agn+dy,p矨ҺI8hzC"{nHStTw5Pс`A$FlWP1-dž{TYZ/an39?߶Q"2RDRFkMGye_67نsJs7E sH;xjkVObd4+sGE!3MtSK"1oF!T`k HyB \g%y(fvl&KaarYVH?b(&+o%50dM@fȒ^pG: 7l<Ɩxt"j`\ji.o) eAa!WTxrgws8ԡ}cЋ6r1η}+(u\@3I&UW!V3Ch>W(} iy]"U6nW,K*KZag Q1{Ѳ{meyzy2;u;hJ꙽ۛ Z3n+_)m4dKk Vнkw!cYg9<[ueMb J dܙ$zaWx$;`UuCa ,-nۨñ!q4@CdGK#M\na퀇U qqAA`L[Lye } 4<#iZ"9F *u7}CjĄ]d8%|j4[m̂XC!SX` #y2-36|<ȄtT #.\! ,! ,! ,! ,! ,! ,! ,! ,! ,! ,! ,`PHU‡ڳڱNJ={ wO/ c(}c=+oΈ@ JhEHZ &簨-ZhtӦ&Klҝ' YK-T Vs}1@I᷈+6w1Ī֭%(4EpHǠC#[iy*X`|ZDM`&[ C%MA+rHn9aĮiՂʍ/\|\|=p׻=po@MmA`e&fqS`bH( kQK;Y4 l$j_O=%?Pރ0VqJ `XÕziJe/hPqYd%Yg`%w@u@a`R tXxG)6ESA 'ӛn_=9|FA=3b#V d&viG )wП}f UJ*O=38i@FZO+2J-¥:}Z-D5JY֐SH1q1;v\9[vS}X=\۲q^ <^cnXkˊ.A1DZ!Z.%VO2Wɫr1e'qBm @=齩pe`Nܞvj1O$j-Z{SAhɏ%)> T.(w$T$LGqT,{NM.4պ &qHWȀvKPw^j4mCc}d׃|=Gsri4-k9E_TzҦkڳ4ACJ])R9ƾV{ūZ}TXBTYB^_N9tvGR5JU*I2|E2MIV#HI-iQ!@XQ)L/I+eT{ȃU&qLb.XDᤉHg6I2fRf":IU2[.I{X. DVX(dŽeXJ İT*R`Z6a#|) r+O4 ˏL2Q$FDhGW29c )(]ی)7Y2 PAe1G61jAֻ\ ȀRZVwʼnˋ[v-r֪N:.thg:bZU 0IrLuw0y}ا@jP)<1MffMD|*AGj}(L'OY =%$ Nj+[&ŊM WH( RWF%OLʄ!mA%iR4>Qʔ6134?)$؎x0P|6D&1Of4i,ZavHم*H;jJuY 8\Ɖ{#2 !K ^D8}{P$3 +\S(irGRQqєZ sa^bCMs3y0}d(NHFCϧ,  bhSfcb/Ya6O4Ʋ|\M[YkeZR S! rܼt_)!Z^NnwF z5l+UGtRm[!Ej2cs*VyY }vȀ|!E9'ARPG d"QV!9& IART$R!Ez "ܔ6<5'rW* !v"x@V2Rz\vhR|a(2GerpWt~R =' G4ljnc!bqK;Yrt"R֡SsA8h\Q%2 $' 5rBO'bS (Gq31-4 /q$4AM"g.HC>PAkxyvK;  kl٨)BXo ¢s 9&@$ĈHweoW-q#e\4g$("A-)t_ a@Y1-%@/@ ]WEg}ՁIA,,}&p9pґ0 ӓ!}MA wMAc Y !my:M|1bkx! sǕNё)T &0<1Սtc7w4{cu!!h4H"sOxq`$"Ah&OJw{mvi@!  nx {HhVĕ'0;g;[bBr]vc/0lfdwWf7h ڑ#1Wq!A^`"M"3 C'1:\‘ )Qy AEgy,"n!h+~'YapaRK)u&mJUS CHb 1w>!ٰr֠q( 1!Xry Cpd$o:hE9sXJ@O NqFVe83MV[fGњ["MGgdb ;1'`G5!%%O2lD@!/./1bA3;Da9 v"Ï%pR(E )fiH"_EA`Ue`o3:1UF+KC1n0PNS5Yk#Wx&.w@:./csk])I[9BZ * X8$7䱋8! X x"ٚUӔUh󺖒4_Ks+Q]OxjmeG`)hpuMQ>&e (F(9>X۸>,X:a'W2tySF1ʧ8W-n9+Ov[ bQ~'aEBGC3,2ś** `QHD*rpͣ1c>z^y\;!,1fLdvȻSF ^h%JbRo6>G- X2GV,C?)Tgx=Td+ĝ2!n1]B|6^@cRG Ĉ32& X Em Qyd/Cqp#D!oRPPFéqXZ2e%er`a(cx~Ҫ#J$w{LKFsm/ -rQ]y"ߡ,˚ q(Xv]fOa^FqlF m7x*@1`FM1iZgQ+f&*q!V˻Ǧ'cZ %KD"%Az[ԃa8DMVcKd˽4M !O {@!<Nad'A⼜B$=b[<*V)>[=@1 $cGNU42Pzt1S9A)ma!CȔ{1ZkW t[m_ H+V<[Nxq_0Aѕ@Ts5;" e|y[qH"CT‡!xHX^0MmgcU#2~# ~]{"k+ܧٳN2v̹@.n%?q?AG! `Mzj G,S14iQ`lК+Lx֌鍡\o~ 2Mw7ꐶB  _M"3c /;YZ!w~q8!/>UjΠ V8tւ(NEVډdhX_[W^;I(`پ u5#ɷjOL14zX浊x|04M+[e,g֭&B˝* Y6Iڮ"Ñ?oj®xtݩZ*]T]z%9.Z\g_F $p+VFBQș'dobiBCjcH¢ "!CUoEkE1+fq3i-G)G!s%KqH%q rI'힋|2KR! ,`PH@!*/h?{ ` FmOHUrH)ɳϟ@g;VX`S[JYuױU+RV,Tׯ`@a޺w @ۋ5meϗ7B7&QX$;n^7ǐ ތCNEzKx%ʳZ=hz&vE[cmB1O1S1B.(.pж*AOGtСΉFFPcM:`qZa AIÑZ,G9k+K3ỵ39w:T{FD+W*b#a6rq&?$~{Z‰0=!Ŧt1tAIF'NJ ^> Vzv$&@iK E{oi?رe!g((C1Vd6ȱfrs!Qh/w6$4)v .B?H0#r$U}.H=}Si4 .6h Ǵ*UazӘ#vjƑ`dqn8qP B5`m:#y<5tq (6"M)U.Clu?^QUFַ])U&F*sZuvG˻)=3Mj=c7G26eIl(YŸ0 kR) ;!IlFT!d7䙸"LEAġiTIVYZ(GDMZ= b_w7h A͂]&н{@Pڻo)Tw𼒓}Xiǣ.ckjvVEm"=jjͶdcj{{djUdS$ m*WQzn%]pxnՃ(A9Bw-)B!:@_{{qlq8Bn K4yܯnO^(hɤ_oH{6*Sr29l.raJMK'68aeRVJf}@e \7PO0 /b$ꇀrUxZo'a#ra"gq2[ȁlcWJc%QrvQE'"nf'b8HfJD[wwYBhGwc+)w/BkT!dpX bM6fTIl"ElwlP9nUl$q8T6RwxkGX}4!3gg:uf"H, sQg0{[k24N $0Qk7l͈"#6tYsA*A#QZbCVr\IBE8C_)<倯cz8qѧvVlXA'ۗD CcZ s/8RE"A1cԐa;S%F}I3 |U~lRa]'"鱃5> >R e)"۔1vR2tq2[DJNو4@0eaa! ݗ)=}y_s(!:(Xiqrt9bv5 wՑ)YYP!Dy"j%꓊*m{*y;"mC;r+kaBb)@4Rf! *B`)f}C2kQIw)%pgc,6Vc9Ec!9D3;\ &ʹ)[@0 чLjacvApTq=R'fdq%kтQrjtk XalG/F>?^h@T!lH3y 's @ @h/(#o1:"Zc Ë0Dy2fr0Ql!BQ#W(b"q:E;d aGɐ!NR)11dw="AnA}a7s遄*, g!A6kZwR-Q.!0zҩ񓩡ׄ'av[ar-#1ci )yhe0@fB{RPGrA?s9Q0›%qa.O ea3D 2X!mwWя%;Ig:AA7롯AQVt <Y;Z0 SvTf-` v_BGjj6c! 7i::N6O$e:<*:Y96!&O~;c;<0ɕT ݘ 3?d6$(]Z{Qb7ø @Zb3hz?St~Rt7w"8Xg\쀸f`R`) qLzJIc2CŭۤmMMr*ͤXYcLK hI$*sv[с%Χ6ykbSY cMa'ITI4HA W.`.Ȥb$P t)@<YCwTi^e1&"[tudg[?dA"Ye"5cǰ)^x˗coqQ~L* Hzs<@[ m±9Uk{aV1!%#euS)8'>Y#2`'1^q cR7{7CVlcq)ca%@3Ak=}-g_Jʇ dF.*i<+L +t0Gå6++{ㇼa8w'!EAz-)V /.bw0AC"Y-i3/h@[b%+# ThѲrV(Ϗ79kT)12 \@#R):U8yAcٸ VR!7]>Rs#qd9OD5Y Bf9tm9wUyW).GE_)c|͡yc',վR +!m2o i ]2$/\-aN冑\ \֫f)(4$ND!!@q&jcyX['LE1FAR,wP,O,%3c\ 0699VG,& BbU+q"+N?b,{4lD*OG/#-.ن婬j7(xHBuIAjT- >X#?r\95Q/ DPB >tjeF=~,H%A)%-* L e;oc+ ۉTK>EHJԕ2l%֚="#L$VڇMy&TVBR3LRKs&$&A +lu`Ql0ȆҤY+ @+ΐ \0=oQ lVlֽnw]&QH 6nlIw ܮPY?}ilꝺi1F=v6Ouɸh Vr)3-ƳL LHD ÇCv2H@m '5RFL&B!M걇:[#B # $X*R҂qH/ Ô"aE&35KDj+/[284ekRdg1=kRR uC$DL.]唻jjA% N=o'3(EQ jz !S|ÆtԘӄdrǞajcr+MR(}g4VKRRP`^sj%QLH~ė٥BK1n߿G3`MH_"vn[,MjOo,IуHF 82V5H jL*۲ܘMSl,ꮄ-5,L Eh}v:kGMdլZנyUJqQ)ⴆZ´Dag6QP׬BUx— UvϟznDɤz=U!UL*҄oRlT~AQFiUرx&wby}+HFR!_Rw'+_-! {STz Z}췎媢zDzsZLE0U%J: Hq4 so#!Vdl'I-Q w~CN{KfhJ-\ 3IXR&pR!hcƲݣ?c\2LIs h9iXl"!u$f eIag?抍 #J,V?Zҗ˟)#$n)0 B[2Ji>$ ! ,XPH*oÇ }uO|-x GG (ŏWBI͛8CIcG7†=Iv]N>vra > B짞a%GmV?ܦ^&Z PvUOqמiR= =\)M%DXQӎ.!+D@j- FhŽ'GPц $a8cw R`8I(ZCcAԳɀh@UPbYYfIIW\~=Յ?If!{Gn9jzfz'u~LjNO})hƆ@$FLrjq[3+K?*MZfiaTV] kSeP(RgAv 4Rg~*vYYltTd'VB tfU$PX+jB'AZXJ+ dLzU0řTɈNOvNGhiBYQ)P"Xh*d$*j}P40f=P%Z_~"@C2qU4Fu m!FMAA3Z6Cb~!_Vkv9$i]ۙHkk}Y1X-!)kK婖&c>A?ҼwS.9=Pv[fHr %W_5fkVQ &qآ-P(.c;B-JPnR~c@C(vT#!R9YuldQDBB3=vICqeOQ(]HQ4.\٤Cl )1bi[=1v6JxlлKkŽ71ugBW<QɃ65BWE,#qDФ^kX!-cHDs**CI0 E$7jTl<n;ihWa2D J"I$2{Pl;Z4nxA#:őP+:*]8w y|Lldǽe44F]&Q4+_4aLATjќ(`UիUǮ*ư>Z5!Z"4 +رL;kR1 )5e/v @7#uξf۾TJpn%mak/rN1iaaAik(NKjT:$y'78rlFG*v&vUO5QFt<;L+HJ ^ 4Ni-ns(k(m,D~}iHځhA&D>3|àTuOx[,z[ :Uxwh6V:VAેmSou S$?,%Y&YhE@|/// Iq(KT9o}[֌Qda%v %#RItI 5T]‡W),0"WC&>)!cc@i+H(7&Z_a5H-ads@b9qi| 1'_8cݥ%`7~krBIv,tYrj]A1,1 S0s g8DbgU#y_,BBB#v-`-Qk0!)ZFH5k::pHZ?2`: RKsoS`JwDu; ,5,D {:+ {HKK֦^+/dnҦK+PXa D񩥪W|v7gN"|*i:PҤWbb1 A $Q)7v/q-&yD%asÁZ`ji%7NYiQp9Ru(VIbT93%}FF#lUfת:Զ*.B%"x4HOoje!BI|ny&:O@b^Ŕ$du(9. fW#veyr )X. ^4>رR"dRg1cAl!ci3B(#WeYLm9Hƶ4K,[9:bN[, DUjHccxD==Ć A|rbv2'Ÿ+\QQ6lSQ,87/|/_\',&ۮ L5#e ڰ&$XZy7]g{|9NP~WTgCܹ?,`) !!9#A% !N`+ ʏNl,a]%9RS2}gWO=R"E<}B}%llگ +jye[MK"Ǚ ;8>YXxQ1AVj37+^bjC8{+V!>ƨKL@>#c.#{X!4-d4 Q., 16$/5$8Vd-ǢP_ZZSZi':}óZxvs@1Kt#âB4&['T; OL a6ߧqBRBKWe%qOq44Gw+QuFPOi 9mj"7.p9jB*=TWoC!uJ|qو,R!HNvZI-.u(RY\|v3>q?cF5WA]O\r "3ThqP9+X1"7sBe!@ɇʯrp3W& lY !S2}] i%bƯX'55ˆ~~v.x&TH/m'-@&seS~0<9^RIE=W-&WjBq5!"\"xΠ@A$C}ps ۙ'@#d2Na|k r:nbRSRgԚyV7օS8TF,(#Tۅؙ5;)ls+5qcx%ꏳd)!*oQHc`Oy}[fpHA4q[*sDpؘy\ch2r8Ix%ے.r(6ibbc,+Nu1kTIG|鞌Y~\>>Ln62:>j(*g3&܇ +lm> U,]bvHoM03Cb-Fb ,JoZ&mCI[W pҬ Wo(MV;Q/ISQ%JӨq)W=. ezFjb"řֳr({>{Hs޲n b6ksZ5d|׬z8?pUj4kVK;H. Hk}'j 057O`k B<;cj5ͦB0Rg /L;ȼH#h~r! l*9$E#, +ՊQanq*Ru$FP=<5"c5щ۩Ula'GBκR i1&$}urzlA0OfGRʖWK~X!Rj󊦆c P2&U&)5Do(BErb݇(sewaab@)\*aL姈c%_H=7 ω"UiiBxM*AEN; /XBU2"aW4~1"' f,кlYGѥV$@=AHѕ:"tkd"`dG! ,PPH*\ȰÃڋ @DV4XbF*xKདྷ= ȇ0cʜI͛C 7PL} ѣH*9=.-F8$PJ 94dF/JMٳhoB۲\!˷ަ*ֵGx[(uaeϗȿ9V췳5"Ej)VvIwbkʭ+nQиsFȓ@Mhq\ Gv$p?R RTEiڴ|Rf<L\dI5=h)(p\9߅>A@J]z4]&%$oZBG!fEu :8viDiBA3>XdQX0&a-uHuGA_ԅ@hYy-*)7p cIyu_uۣ|Ft3&_+VTnf|u8dc)驠#J&}z3 V&Jt" _pYTT#YF?p[hrXkeΈ&weZ[#%H!;F %뵚B꟢ mF^8/k{Rőr Ve -QUҼ=lՄPJR;"YAZ-Δl)#OB"OH[ԣ=*XSW[uOEЉ&GA }5'tdw)TS n #A @݄a 4"w&Z0@Zq4o]cu.1YN1\ ( Aug𢼻SCͿ~XSXEI:,bTjkC^PP"ŏ8YP+ ʝ#^c2ORXŞLh\)"3imu).]uS@!U1De/T>MrPPjSHT)j hp8Qtǃ# yUv1 +2\'Hwod+'d,\54HoQb[36uP ^{`W{2rOЗڃrY-MhDlJ:8=osJ+أ;)вo|U_);K1 p=<9|AC:0JV e$};ktzZorff*B[@Xu]+ҳˇuG#YT}WXߩTkA-I P0,hkmft6B+Ii$NYSHDڒuxp=xd0(Jc-Hgp2m,1 I#fe؆wA &[OikXXU5T4i$7W!B6`ǕVAg5R)X|RD&s{-X58m\ g,c%c^eQ}qUd86dIhk31#sAa`Y0' 5# xlaSs?bg:b|VF8`kU;a52%0aWK޶XaQ342CtY AZ=ϱEzvK9<ЉZ0x;g0;@gtisHF)585E (Sǂx%>JcIp"r>c,md.[f,zsv0Q_/V;0 3xxquG $a4NK$vfA0d0;ZCwnZP]) eq"a 5iH p(B1dwcslRC U~UX>5ᡂs;heXCs;D  >|XJ5.}Y\*Tc`b@dC$} a;$9`txz Xh(h;&E]E9" (@'}5bbG!`qa?ease'=iHD-t)hԧ<E]Pao_TA'bPnN2e2*]q9LRZ{Ӈv\:y<AM@a #)O2A fas.6}Re-cI/'*F?6FewCAnV7?!+X3FpdRiK?H׹#dUZ g&:`PYA(¡@_ա)oj($YЩFiaFac ?ec>uvHxu:PabDwPo{)_:sGJF/5. #@x.52*9\kjvBqprkfrRvStJY#m³mm-q|QQotQQ@q@4-RԪ ]EE=`+2 4g(P CXQ{FY?i#=HE+v9VY j"V2_,iѦg7$SdyqT-C6Qxq&:+˧F<9cur@rW QW愿q€0U%kGLUk.BreZ,&fD[SBco*^g3KOnlCv\4>ju WF(,'-1qP qsOvU#2Ѽ3B7@Ѳy>v[\z:va+GsRW6u;T_;cJw%W;dsKs0RM?$<6SM+:G5KMI|LÑ00XfO |%=.Iu\NMgILδ 1֐wn>j‘3 <>sHA V:yoN>n%m|&i6!&=%2$}vA"qU(Ccq%%JfP.h׵ιoջ9~dnx ]cz645.R_4nbŖg(V5je<%j%}(cF\ިqYBA 5Db2,9`;XeX]`&A* ;4X.xb$j d6T"`ʫ);S0 o, &6 B&xZ# i7>/1"g%" o~^sbN+9 +"(u" bx BЮ`tj8 =4Y$?9Ted9}sq9UU4=Q-)5aV N"cSVC섿c_QˎR0bs2.@=F:擬49l L jR_FiD~M ƉkPdHIbLػ)ęSN=}Ė-%(P$17 )QA:ўMLvNۄ馠ŬYۈk=?<1dC 0؞/{z pmImQyLZ;&ϞLoC7zsiMc5ag ں;&7yB#]n`իPZ `:Z"EnzQY'>>>;RFZaj 걇@ɞvXv=R /??b.q:`{[2M5݂Z1|'d 0~!nieHHLvR!AʭKo'&)Pfj+L/̞LPM0 ;l33p "ZwEWL[ ( 25tumsyEMB]$zWbe)4Rʨ 7'JpU<|wpE.0sy#?yO.j惷GkiuUFXa݉۷҂Q4A*H8\_,o'bѯHO".@։V^hՊȌj;BmZZF]|:X(Ї@-2jvZWpޤqUEV  MqIbO6"1Bbqn@m$${i\RE<;8QaoR vu9bPc4)rJ55aLvZARDc$Y؜M` +M/Xcҗl-qhqV#֓$Ni#/8-3'Dw `♃&C?’ӝ:1ZQp')ew Ur?3cjW$mHgDsʢ;>%yF( 9R`0phr4B yb|qKU٨1lD)欠@ RG-7u8 .ժQPz5P R4)Ւ!zUa.Tlڬ*cH>ZfAXpN8yI{VX6) ,RDR,LhdyK"AUJh 1 fL Ag&1.um&ދ( hvW' ljbEnz3$Ll\!fKgM BA%c׿I* bl Ap 1)i{JMv+a^LLi"\I&5FQxػ "v{cimJc~БDV/n""%S&Hި'e([UMY>",! ,PPH*\ȰÂ*`E)%A[ɓ(S\r!I"Ҡ̖8sɳDrq HJ,hoDNٳիXjuׯ` ȁMwfM Kݓo1M& |ÃXo!*k=]7{r^XjMRowıU+>{r[K$w[mڤiVۑDЪ˗Ylh"_`-T [&ZBnD7߄Ċ&dh' v m[ 'X0N`m=U4Q+6D {w?쌒ɐ+`7c {1)VJbFjIsOa! (쀦䘀+[LYAUGfiɔv8 rʚ_de6QD )B*UFl\[WWgɍaa& ZM i\իJգ6GM4HQVNdSi GS'ќUꖙEqʧ+l1GNM;2k[G#%Fܬ$ro*_$)dRep +@l'k뮻It4hSK;l&A$ԓh;oQ d(dRZDXk.[ +01TfQd).+OEwڠ[(QPbТªI"kfl4;u*}[^ٻAa\j=A^.oU^cJ2 & =UɥPϾ:7Vs*ae%@uB*rՈ,A+js 3|+"L 0EmVZ!?Ӫg7ȟ,!# ]Ѫ WhmHa*1/=&R)EC, C\ Quݝkv3JoDL8lK2ѕȐQ1F1e+8Kn㱠4D %--l.ޔ|>Knj-Dv/R~c4%ʈ-(-5?3(!+ |LOaJiH,56D G9ʈ {?.YCr@cLh/,N b9CzLS*8lC`)RbdM+bVtG= rԃh`?=JDٹM'ر;~رL4y@"ZZEJ dM2F^F8(A~LZ0(7?Pz&UNUIE3Ep" 6(ZG^ DkFsiP\qbEVn MH`b@`މ;)TqGTv 5@GS D+-8h*ŊW5EI˟f{It"&2kT VRG,ҁTQQB^D,@sk.8.Nԁ-!"WZU{*w'8-e$mvU;G=YGW9Ia3i޶/kYɊ 6DaN&*9OZ$R7үD␁#ciŠ!!ȇoV°*>&d\I-:u٣9;&s~>텁f  sH@n~M G:Ԋ,g/3ebIFjK֒}䜲yȮ:#| EPȥ $`"`dB5)%IRjcbka`k!qbFWp"^@9a%z)2rZcQǙqsooAZelINAg!kÍdn-9sK/`m_vͅq(HJ/mCZ&JF%n|Kyq n> +d|g ذ2A1v+L1+3Y1 7nA1+YD=ED+jeZ-'-E9ʤ09IjY Rb("ǰ\k4Y2<9)[m"BG%z b4UjZNgFx'pmdSl֟'1SNFwl}@_?|W%r= pݗy![XRJC'E?[-X,ðslw!Ӭ~"EʺJjE; Tlc@VG>͡q/E[PX"vg(%\VAh0WH&1W95D" ZbbeFH44pGq5Քu+`@ `Xǐ_l S^d^b$<%"'B {/W~g$>e,3BDAB}cY Ǘ'0 z Tbù@f (aBBQc(Cւ<)\JBK> . 9HŊadV܁9ȄŃs5JZH%q)iKn])hCfsD>:FW!rgcc2 $CszqNF?a;A:V/z#3ID`C?xa:V%%DzΈF7#؃B&co&7=uKJ¡XXz&ir'/ع8RVicDWV&B!|.+lђR' ,DrLk1P2n;iO:5QTS][@7Vǖ1-$Gh~uy׽e:1"n`$kI6w.ޢ/C Q# oB`"/B3',c8)u P۫i8_hbe rlG 5da @߳'2{d[[4QIc 1pE 4O=;umrd6S!Ǭu{1i974igvѻ7@u6D#8KJ&EtkTǘ5 w %bbJgT(c% Pi.3X#q G@kFݙ"-f+2ŖqLV̈́>hȈy;6"6g$q<4<#Du%$xILFX@:i=淒_oo";GW6SC C&}cA؁,,])fܹ|*:Ru3AE W>U &~+\ʟqeY%7LæDy-GH}!ugf*N$",h<]P@}&thumQRs4x 2BK#AѸd[)Xɲ^\ R)-/ɿRGpRf!|/d8,7lkY" r4W*,۠8x\++=i+ã7u5u@7+7,nE+k`:$,z ȶGqivZAe`"Z7%%^2 ]W#; bq#} Rߵ$/lhV PAziQ覒Qzww̆d-?O3PFA(5 ŤyK _TrOiaPb>QcQj+WaѺ0DC3A7b㶷A)l6J@"u$ c`|uQ CcpZp9~kae^@6C9^F%rVIuMM}L۷IGb3(Ft7t0qᖦ WeSZ&ӑG̡:f*6iLz2”T픨؞/.;1Lf잛/udu!#% K1웂f~"Wr=̷iWM~., T \U8s{|F>չKAV$F:3`,@iF7uyǡ郳z| H:Vi%|AqY?46Ww&";@kCӢ>,gb(/0.JykljWmwn!i# nRhB\!p0e~0p JP7jWq2^rr$[x𣏕AkqғΧhR=2VU42}+jge1f $]M惃a 818a; 楫%146kEd*T5RjOܰhZ=USNNqacRG,?{4ܘ4&kÃSKcQqMh_nQD-^Ę?XeHB5j&R"#Ie؍4G/̩i8Ԓgţ8FlxrǜN_=VU[dSX݃"[ٳCt#6 O޳7.{wu8qC6TXDRK@Vb0e]{:MkBʟ_%-6"f!╍S|h<|v> p7Έ4/{?G a`!{-[C l@Ⱥ,U[(0hA0kòkAC,(l$~kѢbĈ;lHD4U"$떃n4R5"^ȋˉpH`e7ٴs-KKM^sEqTs6)<{D"(c%jPQ(ASפ/DŊϯNQU$<ŒhvvSMSTòղԔ5F򧝃 HL"524C5!UEhYBBW- \[WaMELBs;&'R3msSZwX6Q- 5T[%:^*)"ͮL(+(KCb.zeMD9QVWy?V9-F8miM VKI.od3挣Mϸxk*ef:voeQH!fi=ME- am0z C {VR[ྭ6Mޚ3.nD"Aob7H%Kڮm̗ `V3XM}3]!? J] ^0!u{`s0(Dځ&Ec9 eQKZ~%>iYa Ah3JRE-[өFX5b*8G<"JX2=+t@5'C-;Ş"gH=HMHB&& QpR-)G E&,hGd?+^k8J Eғ[ G 4Hq%ʉ? `K=D&'?AdUIsZq^Kf+fY~ĦX|*p(jܒÖef~A .g_)0uH#ؼ><5G؄B*{舅YAXH,5=J{c Ԯ4&0cU%;NVBo,P _Sf8xThFdq#ID,4jvfQGdĪA61ѡrJ| 2DIzV93ҞrQHekb;%{A¸Ru QWQ9{Ŭb[R3=(2жvdr^oC ]Ŭ/| 32[2$"ktnKܘZ%KR)1׺ǁmC^7i& ^(Je0S2bz/PBO;Y?wsٔz7iw <ۂݧ)! ,PPH*\ȰaA_ P@fg@CIɓ(;hʑ/]d͛8s*(ρ) Вǣ HD JիXjugA3RZ(v]˶1rnKp]2 \S=خ=jK .ѲӬx=[Vȓc˾<ԛ5ּ7޳ ψ={-]œvwr{9:k*yۃĸ޽mOFТiVeYS`dO= w]%?dV}tlɆhv?(lqB&s^֘Gc5Ёy@&>5"i_*fՅfV"&@ t|3`飒$@H$nGeW?$YQHIuiң'8uv/lh&Any?Dݜ{El9=(@:J*8+)@Ar@pn&ؒsDѭj1ˁ? $IcTgQѺb];[I[8 r3IfA7ZegA1,H Xn:[rj\+ԊƎڡ"bceOIg祷J,&,,4Xdմ6-USh>6|$~QAo%к:e%4 9dV9W!3Hb#LC)[&>#EJC; }yl a/I5R p-kn#LA"e FV*92 Fr΃ =VBRʌ$,KJ~E=rK! +rֻP;%m.AV^wu|ܟ?¼uͶ . rPJmRnMڄb)PG[fR9Z ʜuQ%cw h*X )I#be&Dq%H.Tc:s1 CzX:c2$i9n15נy&szۡ2VtXʔUf=tl{g&b/M4.צ@(3~%-ʳAwLeZwSk,h~%]luB2M Jl)a\;!U;E kVpwjs!KaԁKQBEJ r&ӐEhMp'c ruZΊ2]=ޟ= E 9ǙYhKCg%hۼ%@5^xxDZ1o%nK:3Ű ;FCE&xx3/_N39>~ F7x]rjT`Q &rVk">Q0(KxxrMϫoQjZx] rdQHvJ>?үؾ鸲jQG0#thf2dC5&N%*N?Gv1&'XAWoxfGeQjv,гifEu1$X\bO5O1vqE6@d6kHPXFdkp@:x\!F6GEDS'Cm&)ui0KU4(^qNN=Q_b؅14džY<l6@$ 9ACb&])8V}18qִXm?pIm>UjhDCL eDv²5DeY)fer%tx^ O!Zy"4AM7Av]eQd'~JEbfC?BC 7w9-\äw'/h'Bz"1ovbOoI`I"gS_~fYWnbOyxyB1o v 8[7t)!WC*Y wS7 ] ~ I{ x-QI(]xTr![+ @ƶ0hWWPf>'":." 2Tr-$B#e0RU#7x+AcU\F Ggf5'q| p^*ef8i$ F9T!2 aZ|)a`Ic!B1C1.WfyaQ]m3qף_&@iqI2!&D 4K6ZFv,3e6b/U7K_-MӍr-(\b>\hCr$c^)DbàzCyBZ3YH>^>e>=d@$!a_j#_6 A3( &5vR橣:*fvV7~$ $@'"Oto^#PP.`$hC(422AÄ$ `f#5p'yH)@"9#imTA4! !5j}"*0lĄب" 5T W:Í1e_e o:1fNn` 2`ډDzZ/$9`"J&*|C7]P Վ8JL WCeGf z81`07k7FiR*9 Cyhb}g_MX  b IPOQcWy7=mw-"trc@Q쓱.t-!I6őt1pW."J"X#$C4|a@SqⴹoGpF2" u9 :"(52>xtJfF,6F#(/v"+k({Iq#*t;"YUE 3[_5"@7j$m-*B@#ȩk>Y$04Iϱ6WqahhY!?j0M%?[hxCk! hI(0&lxThc1kXWuh&dz': '!Cgb#N˲QǞ,;$~%@&c>$)&DmE8dI",nBT tAImI")$| 8J,#ԴJpxFsDMA2H6.si1,7]d0*6FX)$X L\wE|tvv:C'i[@ ]28| "Saqd(l$7I#Ju ʼc "ttd M0UхÛsӳ }'?oB:d1 {3w$)֣$cvv ]4!5X{I˯v)'?AVH2 2IX@͚yjr{LQ Q(ZK {269(l6I[Dž6~ArF3Ɯ1& yG3Iӹ@57wh,5NYEb2je'`A%{BH,#ER2Vuofҥa \QT(ҡ–%X66XQ/X BdA*Eի~69sr_c\B]1hS}Ahs\1X3tuq)1 ťϦ([Ӈ$~ApV=B6<1q0a+a- Y< r7`SBMӷgt$&meF E ?4u'߻UC϶43bH")qn*x 6}rcI)JQYfʫ:`D\ N2JmӪ3P)Ra,^6l 5@UO(GX:|R,YMsCzt P2&! y 4UU[/2}kB*3zQ!~rT "CYL\PF*1.x[ :|v !SxSK_y&rva+5yߺ#."͗W{~N P9>B )[_DZZMtu{BV$kJd,N2Ei̙>0c5\%g.p cp{Eп1pdv" E4ReEu!^:E[4'!՝&-m627*R[*-AZLG3mM%{\%YTť) QgJoɤ*k޷¤"F{A`?fT鐆(dj(:©#jjq6fLZ!S(jĐ \>a11<ۧiym&:FFKFbΆCp]>-QZb%te%wNY );-ك|s3Y.ՓM(+uvx/qq*Bbaa!/޸CΕPWEYA`y^M7sD '%j;1UC#`2,T;f]rm?rqrk'Gl+r4h׳K柩^GIkԦM2TPM@D-^ĘQ#{*ϟ-{%Ď"ګÊ2m*qDV3}ܲcD)8/|*'Jm%J{nRѡ!}эmݾuz%C 1E,8]=M25 $ȉZV8-wTFm)+ŔF\}Q*\o^# tzl}o<v7JIߓh]VdjUOgWݥSD)VnUk5ڑ#S GPi*"J^6u9XAz4ӰBή!(Ғx ml;F!q2oďn6dj m+lj{㽙&JD+ֶjI%.7{iop,8^pT"jaJ{L,M(:wխnsQ}ZE/Hq; )yY[zF7_ X}\z7%AlY#|&Ơ]d Nj÷QR ~xM ^*F&Sl[.bzx! ,PPH*\ȰaA[#Hp"D)jȱǏ CwȂ&O\ɲ%ȉZfÙ!ڬH͌. JѣHy)Bu*J*ҔZʵU^ÊK,ٳgT͙ ݻ StѦYJ5'[7/7ߒ(GFX-> vh۔멕)ˮYٳG7K5C> qē O^:sЃj9u[9Ƶ}מ=vhg_I߻'?w}EIM&HziuLC )vۍ6h t}XOl eMU}(SOzR~58bi(vBl'&<]JhE$ ( -UmdIaZH$[mbb&4|SafDi&t @qi0+jT!f"pA*@ 9clAcH2j@3j D]Q @iʂr)^IGlRjlzdV3y?\ʪ4ݷW'ҡq&˾ȥI-ԾXz>juT#wp@!v)3K Ǻ'Lo&2A95)eMy(9}&KIz8[eȂ qB#k(Px*-E}ldQR )ϐG@ n1/frS\q= )DZ}dFrIU|~ 9rڛl;)8R.Hko@San|H}8Y- 4cim}n!hY.Adž_Gyb:q#DV$٣eiuxҊY&jN"?%{1 DtZc:&"шk^%mP4g;}$ n&}}OBi=bO;ȑ14,bلˈHyF NϽ,֐*m2 2И8"*= b oQ4',,3 q'yRاQ<(n tn@N0 ;]X(ƗYFp6mL*%bj!6V⒊*ٖD2-FiI004RO*0T6;Y$^ l Ŷ) ǓQ۶@pQ-X7v?6Y_ C)1bzYP"GݬNhȠ5ץD<;z⑋d7 $;Q4JbB*Rԃ(=ڑmaV+G92~ӕQfHsxؑPo`GLCFs߹zd-V#GE3Fբ?H+&GNkQ {8zuB1ThihLEѤ8XĢB`SS&xW=%E.PrivRd(%%?CUʓ gN[}ZCB,/?MR ·Y4%-S2l2Jq}oU$فXvl /{B\O Ɋ uR<#h^"-F0Zjno=^ʍA1Q 0?`U(aUK[iĕDuP!dB;Y>jh!'[ܣB0Aij#IT]_7\􉥗֣.L\L)S:eM)cB}|(h/⟗Q%,eBXeZCaEk4a"▖b/htfڂ1si&m8GƱ."XEƲۆy$ e%nM;?WFPV|nFbx*o!?j#eP/ ^BcV-RSbܚב-FQ«" }0>x{=3v.F_k$lC_DmZB'?L"1 @gr^99V{H,04q!|~*3/a"PCH01 tfD,.G!$Q (l(\FU6tsA=5B2H+Ud w-T43vZׇsIb((F3 LE%@.Dtc q)IA_'Ipb+B$H Z'!Ol'-7#Qub[yQ3܅trQ6:-zb-1 /q%RRqmĐ*?, 6|SG(QGvsI<+yRh= R ЇbvP*J9!8Se냎1(i)ɲ[(azŖS+ _NE# W.b|WDP@YS<_b 0>A!d!^'FlrR/b?hZv_s,ē1r48R/b$7\\XA.><#%E8Io#i+h〖>IY9AiUn{ HN=v-iaz&Q%@5i?R-yH<@1)T=fɢbE0xQj₥q`:Y@I)7Fd/-@$%_‹,!@ۉ$"tZi#]Q t#ZFn9969u'4`GQ:QG S 3ҕ'JmT0k 8K3%Lz_Eʜ%3=p rFj7Y @1\NJD5SUՆ% 8Jdwqa 4#;;a'$~aAm6lH 㕨 U%"ߵlCRۺs$u. !-_ g!)g5^A5iTFpCb@@3"InՏglb|SdCp\JB#,"&>\;%:,k3`eV`Ž{JOHrQm L!7yFc^ Bp*-&˷Q7s(r˼1km䃅| $S,/ʸkjd&ces(GXdY^AGvch!2,3OM)BqPRY-i5L9lp- L'}Hr~Eoe\|BA ڵ\KJP;62@rBLu: C1sL !Z/0% 筇&h1F'!)]vȵ:W~I[ԝG ktF2yt~*5#_'D T$1'qU+z%_lQ{" .͡EvuX7+7) emK|lALiSUI@1WقRGkvrR;Uyp$r:j_gFÙ2%(HqAXL-(6~}10S+Q4>$$W.@P{ݍ+f-iZL>%J(Y!^ܙvac/tA_Y+Z0+6Eݟckcza6Mb k%iAD% GB鱡'ڦbb|EXS*|*x2_-d !ōUF=A2JZu2IǍ жd:$bR4'Z!`[-_v)-1cfP2_Yn%VbT"".o>'/rIApR˭mAh3Ǒo+kj##o'͈W1J$)0ۏ%@"4D\ C}Y>d'~tM.D)U'@7dCN*+I0RF^_v-J1⁋1b=BjӨ QqAS#ub'GK]QJMt}$'1/6iфPSB@L$Å!+{[q(Rڒ!B)NUA3WQŜETR9Q7nQRυY?R$XkGVLU؎J iօ|p+W\XqsЮU;԰Erܲ s'脛Z=Ta= ?lQجx2l{0u"ЪFwZi拭_7zQBUQW(RՃxߤؕX~4wϟv#bg=C zZa3,,B>d1-(JX*Iጢʉ%+-'*"* 2 kG*ɰ<7Ѣ qy1L"J:'ë"8żRhZ4QrsHM}ˊ*jGo6J>Zf[) !hJb.Ǚ s )dN?ۖͼMl6rlRg@rZǞRˌS5x;nQtoow1UlajEqW]ATY>DhY?VӠ\)u*:d̄>}kg21J [kSHO+6YQ,(*`<ĎtgDrh^BYlbԭmM+~P`҄¥cg|ٙ4w¢!BA"72AhP9]jM/\q^=> [ ea21xG a|o1?1E[dN61 )&cqwuz3 -ԏDD"Asd6>!^ ̂/N>2pB$a т$J)yP)o#|i@°叙UhHѲ(|P\U"3~Gh!nKA3'6KQNDAi%:YMqN wYMkʉuR B=49#|hf̋&f} G,Y"IeJYQ%N89iI[4kSFd HZA\PLx B:F/\mnQvzAzؑbmq+d4n*S"V V i3Z$TOV5)NH=6U4&_=7Z']kaIٝ%Ŭ</V)&ЯL,R>mbefN[%GFɅYFmrSTaHrtV&4Sl4]ru gBNu9/DS%oyIjeiZY8"eGоH_2>h{J5KylcKx5p.y! ,IYH*\ȰÃJHŋ3jȱǏ CIɓ(S\ɲ˗0cʜ 6iɳ?{z :1H_oݼw/{B R_FDj4!R`-vu@hp-Zl KM9?K?Om9,P݁w7gOӦO؋e?3՜`ΛCϽL:a܍#*^v}xۃ;`Ǎo+M|\mm2p G6tuij㽩4idЖMoڊ]zQ/8󿴥i&H lfnR= )F@We|a_7mNT!OB@Oi!IU`$P-' Ɂc]ۉUa6#ޘT"y0GZ"`mt#&e'1jI}dnI;X2ieiG8q-&? "B)==&Gs +}k*[HhCuoN]vN)mx[cr:-we*ĢdmيDBdd5Z+"(URJS)Cs@ nN}ExsXZYk)AnD]MfB&?{j2_<ŌeJ RI0 SݦL+TPՃ+)q| u}"$O)5M +O:Y+.`+0V_(w>7 ʔ-XhԿpLKRveY nV9 WrRʙQ 8&R83B~G9GI[,B {A%t4iinms״*S&5wftRKľw !7^HrZvWAR+\/(KWR|z[ADiKHթp&ITH L…O(f<@aI!74ȮxH_2u#wqIfvMZ%Jp~ 61Jբp+=Q%Rwl|S.U^4%cTL+$]ԜS:)ւ46An60~I fAUrCJ_zx=&<'IćYEmU$DzuIӲִԊܓjA7 wǴR/a?ʭ1$5Aus0%X)ݙ-*'4vɳc{lBGVN6ܳdK4?=XSe8}Ge,KmE+"!QઓC}e*X!`@`i!^sBbpfO9`ZJs(Nhe%B&ZVuI#߂ :/!}4t]O7#d2yA%#~*VƁS[B㹹cJt+2@*:- c 5*4/="Y]ЗFϐL5 將&@7H[5CϊȚ%-DVC:amWB -Cb1:%nd2g)JBA|Qcob# ($DJq>Yef!xE U$ARmSwCxE47 s/]!>v* EplJez&.XDVvUaQDL@b&iV!I$Ad 2${]~Dk\(\J@j"O+5W"4LQvbw=V]eD=u%,:h14oЁf D>xCgB*TW/b(y"ROXOZ2d-ePF`5Mc R0uJKR 0w&5#OQ3>cK.3^"+#!$Fz$x5uvdCfqJgmEFfߵk;਎ghSr(UizEZueWqQ]oA{FeRGcEI~bW M"%ӸeI\i(ڦ 2ڗ9rVoEOsrZRN/9ceFcp䚪)l!~M*@hȘ2 CRI4(:͒‹7Xs%4G"o,ԱIs(WFUR2gHR_D`g֑?8)~ɂ1z0_Vp6~e@(\YL3 ^Bib$<0v] Ka#}Y+! EhyԢAl&C4~H\r_3I%T6AFA?] Mr! ehML>$zRve7K[EeK,C?|_CC6u e$Z(aH8[{l)'f(xҕL(jxdH_+:0Ҋ.:wz;ɇ:Iy!]w@[aa3kV1Hr#BsS -R- =I>w 9z2Hn7:-W"TJ˷dE0e_B)B:D: 5s90N +;U08!cphۃrzK#f1\4FR+CvXwz C7c`bPJ1|\ReE Dʉ(Z2X;&z!`KlYZ [3[ZS-źs3C!TzgYcBRPgeY4 Q^(MdK2*(Zi)IJ>~E-b$D2;$=$CJZ[.>yIXl2! EMvE9Z-/ iŏA&'Đ+04-TK>s GѼOQYst?0iGQ2 )M(q2Ic{ "(@g!F=cYqpgz,$j#f0$\w]jۺKƤaŅ֠4R}E"+hddtXA+=IHD#́XnɈ5G[\-EJT¶ 5GsZ2d`6T"k֌%[j-" Bs:Ay4URJ`AGz̿DHsYQ7 ! L l) !!~w"0̥#c+5C #6_P |;zw%R X*P1!^MSF&Y-=RRb|xy1yQoR&k-'nShl %Zև!̙֙gqo6ܱBQ(0ьRAf)Q$!U3ؘbenrNK[jn[3s鸟~l1xnQH{eAJ6*0K+yW~Ȓ5)Sl16xaum?GHyIבD?_pN ?&,J1{j{rvXb<B% imm@bk}99.w !V#!*}"/ji'#guzjSAo&U 3u˱'67SsyXQë$;=)+X\}sw(&`:O}2#'A!H0?so|SgfaO]Vy5v0GIKFEA띓> /ӪMĎ_ tI#S)LZ qu!uI!y2HN_[3r&:-{yh6 s㔂 i+gWiokHڢDSBm?^=XAՂ[?O{GH.wktVEc9Vlbh F3,* 2o)Z^=%!2@D P`mTсULHZ4+ڃٱ@Ơ 'gJ=t֖Ņj*lT:N )Š/nq u#"G9:9JB,7`V(X!Ut /xSF) CO~ӟh@:PJ[h@! ,@`H*\ȰÅQ` 1ɓ(S\idCa8͛8sּ'HAWρ]Z ΧPJP&իXbM/^ ePhӪ9ķ̆<Ҫ@kY#G<-z-#`g#teoΝ%LN]5{Q_;WָwL!gV9iKjԖM[Hf}ؤr[6د:_)M[$ ܢpҨiɀZ@j+V? Un߆kiĊ$i",'P;mRDqcT Gl" P\[=YXՕ\N戣 WOJR"AR'ōuYW<%[LꑅlYa%P+BOD99$DYrUMwWF1)MC&HeN$?ljHЈZlB!ryVV q5XiTDT)IT}Mjmxd=_u'Gr)ZjjQ(nr+o$X{yWA[oxnS-|j2F]稡 mmZngq ^Ή; B;ꪫzo TXyFŀѵa}K=c&#:mOGb Xe~|?-Ǚ=j+fn9 3EK C RA4 SY gYHFĊB u)u_s^GJUjJa/ C(B=Q벺Los.Euuw5stdK>` dY|d]EZo_ڙi"Lfɛ1~+MiMi&QkN-ll•1'ɖz]],:|Fa4bu+H|xyHgYO\ $iRo~, +w\b֨/JuƉEPWOYa IT& p!\юĄZpG-p"?&ŝ6jrRX 1 5hE8s&.}K76( U+SC'J$zMa8V'J+8.W*'S%Y hJ B)Zω@rb)yP3xƙ- %&,J b$Hy 47H36AvR9P\Fnd&@(Ce2ɕE9sþGZXA!vs7rPhoA +T84#z kFA @ RMn4EH&04GTC6R)МEpj"T1ЉeVԢD "SH$4Tsi-̺x!8LjSb&KlepV!H{\uQ0)DV"qVΪZ$G\D,7(A";3*:H$bbpK1A#gOBJ2K>i# ܦÑH+ ܁!E6*#38p9\(:Yc>p|CFPd+T.p<X?]j˩BߔW=j Z[-YӮTxWW@"i $E o:@&OxnGS$kw;jrb>{!'%CfтrkrF"q}a9=T.&y,JV+D/AGn@0-H):xQ)(QB;`.yBar'0A38\L #YJ6q0@DD4jJ65чM,e"0,sx%wiU3&+U U)&H(HmA4a.4%*Q"3"H(8z%#nAMqS\2W5"?tQD؂87Ry>$RD/Xfµ )7!ZgL*b d.;Ц:#VdOd;|Q dO@u"@IZc9@If$THAAX)K$ ã7I+ir/#*.'r{R12|V.HVE1C:8D`Ja4'_;$ShYwUart?}3Rw>!o$NEœUsd(3/^1f#R4#r[u;sa*{֕((t wPI6SQFch^AYX-җ6C'`Iu58/gFaa8aA(KYgkkB?*Ɉ 6^d A-h6q4\H_ tQeIV8cQdbW"]\mUT$24(b>(BnGqir8Lؓ8[~Et@f-dN6aCkBMm]!}IqDbl6/3r)6yjbPQJ5ֵ#Dd!4E7Dbo0 qU8|'HMO*ǀ˷`Fe{1C.%2 4JFbP"no68bwI` Yw6ca2#=8Kd"48#MMLBj?"9$(jU՗6uNsx.:?[JzGPI"Ugc..uTJ G!YHwo;vGR2%hqƤdp29_q@C.#ROc$Jzc ~6{ auE B#)r >C(xaS4Ɲii;咽gujOC l3KJ"`;ˍl7{D$E7Տ"%e-m#b9 th;4 N@ez% }94>bIWM 3Sa,gȵ>HK,I|6#Rztfy"'qNv)g0&S&_ zdhu h"*'VQ;Bp95t({Ո@JTJxz%bjoPt—?s,Us c-D{jŊDvfcQr7vd-Z7VYXcP$H`3aC !m!׻&vq4YY'䅆fc$>tVX9H`eT\"y2  J\KPDenE5r}#+5s#Xq w*sKgot ]I%tF 1^)6:-Aq&BGeuW ৙ kg(\`08oV=SÙ<7T8 v:#Xb/U r9% xu~&ڊ]D,Zd|*NE8P ,SH @R!́6NKK߈J5(x)sWR,|GLHȦ${1fJi'"R@uogSIU[~ⱘHBq!b ̝Ʌ8aڸv܂x? b X/!o:x#k 9jXZgۼr*c[㡬s-*<4[{<Œhf~

V4Z@HlXk\c+ņk ;V$"9dXf \eyX׍T@UPBM;p8O&b9׃CycptLuPu55;Vam_%1a.$ӦAEϫ"P*&|]I,(_U/@6~e@Kn@ȟ3x0F3wZ=KY22K$yru!.Q b'~(grmabq)2v5 q>(a,"[B;]^fI,0So5%pV _0d|nف"w^/ۻ'@K 'W:\F#vFwrz!Xx.6 kwgY;t1pT˕A!w*50ǛW "1P+G44aE"A5.uJ.c=_ 4փ7/`. YԂ 4t? A; #m?;tw:+5 YV1|ox@җ=#Aǂw7 d@@/}80!AaB-L"E."RH%MJMH޿3N 2NvDgE8G%9ҠM>OMZ4]ՒP-leVƐ:yv T)F#FTƽl,q&Ijpv4i,2rIo^9Y0妕JX4[HjU&x ,هcTj=x״܂tխ R$s|xJeJ^;IYzxaCkڞMOH@-c*lYî"7/P4A+M*TbXY4O$`L+[0 {GbTh7qD%%6фE\rɾjr *1!{!e2C.G @<3*3 5N4s 5VXqDC3\#L\ 'BJM+NS$e(YVj +83r&%씵V ̎hK-mVV/A{4OBZ~q`uQ#L n72,l%70JӴdPEd(-LuVqj\}Jm0nV{|x_G[wʵ\bHmGU{%Å?w4')b~e"6m8bw㋏ 6J(_-*F3Ұ[c699lͮcwjvj)9QTCQrv}pR:kzyD[Hdp͉b+;a%"|sUZ-j4VTQפZ}w_W9+ֶ1WObmZ`͵(Ӳd׷n,wc>~:oH)VW?F9 fWIѵ!B@Uey;F(hOf:ܓvV ?Oi@גV`Z! z~G;ޗ@2Ɉ) [V-Bt(7I\pA qG=:EnFaNd,)8 fWyK,qUH]mX\b{2LeeSLr]H؉j]w{\?jR OE ȝpPd'T,˕h+'TlZJhSwur hB"vbB%٢hF1*lRViHA4$5Dҿ./iLe>͔K! ,@`H*\Ȱà :81" '>ȱǏ CϣƑQ\ɲˎOb4`M'_ɳϟ@ JѣH4¦IJúm9pխ_fJlQfӪM*n j\kꭋcS{O_l[ ?˘/̹3NV Ž!{^}̰.YfָVIoҌ{ M|7[~}͓딯rj_DXm5U=nuon\Ĥ ґn޹*-l!&@e1m >`u'UVPU?&Z$[sb(^\wh)"F}ba8(PJɀsYE ) D6`QQ ]Ih凛h"Pd㋘*l=R_RBy@!gj`&\D8řRkN<jYX_{ $Zh @[z3jU# ji,Ke0+N"U UɧvNެv Uӥ[z%(zyW-$l=YfǦI A ,K&b6ўR՘{1nJYk%cjEdޖ kC+0PY lbfOˢ Z2I-2lRg۪0;(vc$&E=sjO|He$P3 H K(M chrwAʙgB7 Ԋ'@|v+ GSs좣c9Ȋh w aMXnx;[vbb?ᣳN}_)mWSU/-PֆAhJ0$dF-I+ 2@%Hwd+?2dHyk @pZ.MTq Z4=ls"!u0C&4Wxzh~PnӔi 6]f#! S y_dGe3jT R#*Ea\3'$߳ьNGv@R$eFnt#(' t8OF"K% ޔDIBK*08jyXǘj!"iRi˘4.hP=x'FߔPW Wx1tZ\&Wm c_3+ LXjbTıJtRftLƂU"{V|3Sj oLWQK}xu^!gI!e3gw7M,-X%BMM"K78/J_,xP{o}aB;$G<9:X125h gUӧ kIX -)֊=Nic*Y(Aa@Ѕ6tf1[PE"+U-ZXيr@u@)KB D LԃhLil2l =<ɶ h>j Рw5\e0 DIW׷eI 3,hTBrKk (ɨzfBTEZ!MvD 48͂3V^AE㪈UC8p}LUH!8*Zsձh"GAJͥȭ?rĵQhRTvA(>MC`&ZK]g8-w\]o:zVbGdo.ʐJE6;9QQ_'(~mWȚ& +B42`}-heX]pFZɊ4vTYI:OM//q1t9q.[~QbriQ;JW=I6-\.Koaդ!;N@/=RZhLsLiM-+T d'Q7Ti7#KY"XxIt {RFqyE5op;+r;>Ęf)'vBS9ڕG"GUU<Ġqu4S=jA| ~:u$mR lcI;QP#܈8:d-ҫ/ڱvz^'9)VR.o)U%v6i˲&.`ĥn(vxZH&%v#ZJNlH{!#iLn[Tԡ*Lk#\cٴNꍸ44HFg@\5R:[no;X$? $HS_45&*;}yV ~ lgK$ rRdgN#ALzg9Ca] (9(^0E7t%O!i Q1)CJfduWnKS,_ է,'XC&wdvqCh}wDn[-a[G6bgHCqG!/Ef}[ב1qq%aj%TO+;I{",N0% 2&wW\2b+P7Dӈu}s(! U%X!OE-u!c`q'r> T357q&6Tq#+IlH|fT(ue8+|LE'n@Gy-Ul4UrWTS` vdK-sn'3.9D&ZH!0GFYp3JH,FjR"`,ZSaa#ME[x(-qBZŋ)NjCT`axF @HrA>$e:;%3qQS 'iwVVSyD.n\Q'EĈ*_dJ9^qOTHN9%AޱB.J #r~pȁs3]FS`Tu.ǔkb/H!? h:yY9^q*Y;7w@LU9*KqsUF_@>?tp&fl/\Vk`FV bݳr@bf*`ieQF#uWċāFN8lvcĦ5|Pm(K&JD #i5 =P1#'r'tc`#ɝV0+]>bRF0ov˄d*UUWGB[DG Kƌ8瞚ğz4WqUc =FǓɸ&O~B:osT1KcΤ\YVB EI6CnhQ-iJus炲وGcWDrP$QHQ:D+P36t_t"N1&k c dւ_<ƒq8, H~ US[i4q\X8]a.$r%@bDdV#a( ` c/8t7_,\X5ƖXX&P=;IhIHBI+"Bwj-'+IS₥C(Lo&Xh~4=T ZDURqV% n[S&XU4;kJ4(1)‘YdBy9Ų!$PWQZ}iRx6=G;^B09v _Y"*[&K"v5iqJBCTV5.zBY0atLa]:b,L':%h#/'Ű[+6^yNW'd0Pnƶ>I2qm{4w6FHf&_3+ lՓڀ-G!'Yd\ ԴX'#;DlJkiBgqKLҁ/wbrr?q@6[`I˞B&S5_9\3lr]nwJGH}ЈE\LK)iSWNɜ~ }pVINfrґ( C8;0qE[&&&_"V R WmtnT)}`C K+WJ`v®xƿe^r3Q zFu.Uנi r#DW/S8'Eʰ^-_ĽȞ&#ġA`T)Ҏl2*ͷZ"m[7ȕo\29+N6$5 ($ {JLRU5(PsP0ɳyU9 *laiUJz(+խJ&gNjTP.Y-'+җ|x;ʹໍfOG ?sD%Q:]4cվFUP5jfz#ge@+{#MzzUiJ+8+FaGVVHnYf\I =^zۢTk_ .N-D1F F02MD-ZG1ɑ惎Im( pҡD $G30 D ZD b[)@8vi&-d*h{OGTA Iw+|4?Am:Ͷ!449E֠R#3GO=w4ZD IhH3i5ZϞY%NiMViǝ4kRUC׎Lz R"lB"i{31&!eev购r$O5M7SU;kPޢ44k@bSPYDS,Ȧeo'{gb Yi>^ծ`=CK\&1J)xV/Im:l$ UNyfL;p0EV-8_'Nړ}f-8] P%,RXבPeWd Pߝl1ƻЈTD*CK E2q)vVb]]f4^D#KU(nZKct]NNb &G> SQ= &TZcXE;iOhD_H%=Kkք10NɱE΀1\.92#e-'ƱBTҡ>Bb.K_ErߘP#9L"UpK &Ц*̛@10zL`:EU McV̎f1UnD)үRFy@Q2&M* hZ1HU'Pҫ7Mҩrh,S<'rR VVM0S:j+qBTX?'1BWL߆)ԒcE3h!Ճ0Vap,&Ih] 0SqJQEbM0CQ"0'K}DnaܴMҁ1a76O}l+86:Z0A:3-v D2GVH1_+ŀʃwhVvC\&R$wRXVA~m%]{21,e 7'T*`$w1eڂEV%TdH3GmpGFg}'m6/}VBT B1NR37tH4]>siH^EEc"0^%TuEA`vn6)3N bDhUrHeFf$ [4?6x DCH;uBQ3.͒}vuChʷ,w!$SnR`5/Lc)lDaH!遹!pRkJ2DH2C"<=sS 3`?33r2!md rGr2 @-A&Y*zXW!* atxUQ\7%{x+wU2SUIBx1C 3sk@唖vI|(4+v)I1)y=5Zcc%606WWOUh(s f~'2z/Hɞ$uʓI!;hEę:uE#bP50e3\j#@>wx=i$2T!)yץguFgDgi7a"w!8u# @osZUn6qǑ#2XLoL)"Y}΁>f^"dY$)N/92P(6M,͂>DBi Un=V4TTm^*1az&##:1a*)3ޚe,Q;K7JQH7:7UD4+~530BZ9 bƔ@W397y|tYUTF!$ЄK4-wrsG8҈h/!p{4J,Mt+ȆhD)l1+(n3HQ--F 想 -[Ǻi`xx WT6b@Ld8jS!}'8Dn?qzJO]0%>,yySSEZDnB#úM-2"|+k4$ kvY8!2w JBn)QN>˃亜7]QǴ+7&GJcc:G"o4&K+VYs,ǛMc\;QCB9Ce%xS]TY(\43_8HA1ۗSknE)yK7_y U{)4e gB Àuq`=3OPV㕦PϤG36yu]z-^AHX4@7T%G%LaUyni> Svy>ڥ&! I [ A$CI>fo2O~]{~h{U1I}:oh[@K+[hK\UU'˲]n<>&]D;U+[P?2eud#ŏfy!A 'a'ة&'VrIব-0֤IiXTzA(`c-j q|72ɞq#HJF<լjdpt3UB@t،u"DALh%h7X ` NY+yIF9ӊWE;v0%F>/29RÀBro"2 UŚ'QvRJkl}%|DPvOB( q_䇿ymN˃sj!;F(c!P"8d,i XV'|{T]*JkQP\lE$ٙ'0q/Wi w2uBU-VЋwb~3"g!S3|PX;,S%w3 ҡG,_;C%B e?*+xi%ZpL<'SbM[V!.=y~O 9Ͳb GzKi`R:G]d x۸"c><(Er #O*Ǟ8oNShi():szr#6/W$Gb K²G³6ápHZie:u&lv\Afkj9,oKn (@*wR.'N"Ӄ鎻vbquqK܅FTlԳto(Ă{K([BEİ"Q^V3kO /x8D Zuq3(SB@Z N/YYKD3#N QKIvcoSD3f*x$d_i8M&MN-CBJ ϓIAcO#bojHq[UjX _WtgSwcAʸW~O̴$UӢPql{oS>Q!!)Zb,NQάD1 qqRh5ky@@ DPB >$o/4mIMj/{";IR"ĕqq&{męSNز &[ DHGJERmVX;[]̘v@F{Rnم? RWޝmբ)k uJ2qԞ6>jdʕb)S2/[]jdo` =X1c_;(@`7Zr3@QDͻjݽ5{pl[5Esoc|Q13 lE0<𵩌h(h{"<4{ A9dOVm,TGq9~j)Drϸ@Ŏ԰F%z쩧:Ҥ+Z,%\2ɌMW*|HH{FN BM1˧ . ƀQPG%8 0:r$H7 2r-˽NOT (Rڍ$CV16@[1GJi+o,Xe;t&4@eQI/" 3VlǝNL&%]˦ jWWd7,gdE7`NjEM ^8f~ba+//&41ر󊪃V! ,0pH*\ȰaA[~ ?Jtp#Ǐ CI$C&ILɲ˗#)FૠLW"H'̟@ JѣHmNLʴӑF0Ug© >歙=]Ч@]Ӫm^۷ʝ;TbMٲK/߸J ZHpתd w@4ʚ{}ۗ3Ɓ91<6#Zʨ]ݘumM9nf77gܴ;Ə+G.yP5hE )uwvঢ়gIf);3 Ђ? ż-I&{U^3yۂ~8~q!YBdHl@)7q\_&aRhO+hߍnf{W;R}uwhѷbRZ}$AlS~jDiyسܗpStSM?chnژ#9m){ r=iAU &JeRzNz:0 )>VE PcYZB+j!8؎=Q_ $h?:Z(goGw{EmIViZ:s,U&T׭- tO١D_E%f&߻&Jtӯ=I|o^Pʫlmtڌgf.H5ϑjIO,СnZ4[V/E#Vs`qxЭQfIƥrȽftw6jnSvuݬ(@9"]ty 6{Ğ-ZL;4\yE+ulB Ht\MͺK'ꙝ #+fzD1vq7`)t}`WȕGOY-Zs!Xk:uRaKT;8.)o.1ӲV Uz ĂZnNz T=DW " Zfn\xͫb6ENzի\7-GiAj=`Ldi=O^8Ζ/]sVѠȭʑ͉v#{M-R6pȜRR aR oi4 "rlšvQZ:zxCA|".KrZ$zm^kq4ҽ\G, D Be!7xFҝJW(A%]7D05QᲽp@)] Dᵑ#{]t.WN]a=׈CSXгi[P|eMr,L֒Ɓ%udSD +H1 jXx[JT>T-ìz)J|žE0|k<ߖmx;O4Q K)Wɨ!5%[8hNP)y8Ver3~Y w9QwBs i2r#YKr^R"4 K24LJX¡nI%\P5oY!S]|H|+u} p`5 =kE-h&6S XGw 3 RfOa) 1hMu0許y*7VbrWQHN/ ӄ7r N(bAku.h8d,+{X3 dsrdX!;H(decQcxH&FN_$Iӕ- Ed*0* dܒu=q Hǣuus=) FJNUß@DjS=WWw}n{l94-Eqn?ƌ six^]}OP6S@S245KB /wy"'V7"JT Qy<39:32Qd$mzJZ$2s Qj?[[TeJ0]p$'}= XF5SZcws|ŗBP1+nnQ2W 163uKQwS["Fk6J-;ŲPvH(V<O}cVv1dcyCkAJJh0HzEgAL!'J&drCb= ֱL#GD?|6T#;*^"&w/SQRBcF| TT"Z0;rAj͙X`qK1s8MG,\.#?Mk;iw }s6vFyĢ7S{v?{+ tDV~ۥB1 gR9+1-`(ԤR),:h\LOV;u:nz ‰?WiVoJZd5frYBTaEqWOHdp<v %O&J(h2]QIaMW8iyT`e+|C4rBRD+AP|X(29vT_S.aF2Ε8 DҺ$@t0Av[dCSeG17gbuoe[uʥP'd3 it'XYvwrYwA bbq H6βb#\P`_H}p* )Sz3q &_2& miliP CeCɨ' LW'hYY#j67H2WwjbS)'vp4S&ۨ0QcsNB4f|u۩=5>tf߃u"^=r)ɃӪxy,C$ngchZ,RD(dH,AH]:Qpctѹ"!f|2~WNz~Wn' '>J>)Gt6۷p5`~vGLXFBaIhuN ?-D%7b%>1bu ./v{$qEi,n'^=6¿r"!Azm*L5 d_J%;hJ,S0'l1 JK~Q+ g]NQqst)d11V/ soYE+H/e`(JFc8Ë_TQD-B[|qȰ#hҢdʔӞ-{e SN=}hKJI$m)* =M UTzwRP-JiFe͞hڝl7#j)RR dV^ǎlzt˰0>*)Im0dΝ=E)1M jZ醧}KZyKյ!m?̈3n ]njO\9OK[< ! ,0pH*\Ȱ 9Hŋ3jȱǏ CIɓ(S\ɲ˗0cʜI%Ě8s$(Ѡɝ@ JF?*]ʱ'2JgBVʵׯ:K6ԲhJ\;=[Ʀ=xM+Yg;حQ'"޻rƿڕ|cƘ+M꫰gb`sifrwƻzeͧ7W9@¼A^ӛ~rsȐo4sIVÝy{wpAҫMj-Zh"5iz7i& oF/$Hn~)e&RH_^lf!މIDU4ț=`[V(ʆla )X~PF$FXwZ]0cM2`W&Ah?~6B)x{F"i{ic [IcFr4v &df™ǨWr(БE!yd[8blRAP=Yyh_E&}j' ,iA!bLlB]1 +w9-wnKBo5djv%h)֨) 4 N"ja T]([Tٓ [Au:ۊROfn$@tx@d(;˵,&G(`Cpՙ5lLlK;'*a:keb)?[=V(xutOԝS+dP:`+Q'"R+%$1jNyũh͓2~n7p2F\pd9ndrɽB,-Sa0bs5oϭ[g;E`Psg"R:N&3o#Ye)n?vwsoad,rwg2RF=YM8 J'YlӠ[B΄A?y`]: #hC֌NfR ۗG9ω; !>r E/zIrѥ93Hɶ@ăesyԬ-%!Q`"<珻 \pB3@l8278ĴN Qw/N#I"@0 eKDg NZr@ Q~UR\Ȑ-})6oi-G+,u+' ? 9 y df?v&Hen9%*<47ь?%Z/Z^YĠD2 dm&OǵE}:QxDe5TkCӡ NKQdؚ)BRLU1[NhX,fBDzTxqrD^Cz'ֱm)!- +'g0#Yp}/YHٍqk8I.MKZhZ rx @?gEMr5YYV]E(@Yftl &2qkrw7uMEkY/"Ti_Qc/u##/%g|6֘Dc Gx#OR[O6m&5_;9Ɲ..;^̖VCD Q7J )o7YS+g崇@r?Vnrs[QNseOj!^Z!lW5-֋YrP-/WRHWΆYV-`TW7%[f\2F:D6":\IٺwU4#\]`ڶ8Tk`rVV#TkშYmC4U$FoKzAFg`zI jV$&-.JT) mҹNrQvp\9eOhj1v?LYVtىQ$cZZfWQSRc5e/PH4 CwEi-Srʴ SoÃ$bwbI`շx&&9lED7%sW"e;d@/ATFW}a) m G(s !s#KqȂ=S'tLr*CU\e"A,S0pi-K V4N [ƃB'DU{=)EԮ!D(+tV_U鲑J["Ha,} #pYsH9䁐\ SQ?q^H()5! wäу egrTN%A758}-? (ziL0EfVwT6[ )>I~ /ۮOz{2I%FOYc 6#NKB %Kw[s Cz6\vKT[)M&2ųz3310!7y%ܟJ Go%ԌT *fj敟agsJ,;!ڷ2)IDX+,#GSE5 uK"#%PIb.HtƤ,=շ.bQ eHkҰP 2U"\R%d[&\C#tICclBU;VS 3 1({UZ $113y5ڡ!._3C;y$\G >uaalL,^SKo$ A7g&mgw 2`G(Q$leN ^|DzR@y`ctĄudS _vY̕v K!'RP`#-QuCFZBeg$ՆK{9A}NHX,Gչ֝Gִ8زctCl)Բi(N xRӯkz%m=vՊӲI@ئ5q|VĪb=-tҨdq݇1x*Ƒ#FY|::cL53CF)?7IՍ]msv ӍsmWmOI6\>MaX Q_ydK=xp%Y qK9!z% RwÁgQv&gm PMQ.M }9eA4G5*=8N9?٣g#cC.>N}ˤqM5cnI&'NDy~gvwwIAW#=T h*aJ~ajO|kjGۑߜ^F~<IEδ~N dŹdneSm\2 P!^3Z 7NFL,b/lBuͩtYwwqc>45яub˶Ŏ*:LB;1mNHy ܠm{m֒r?xS_gsQ[|[au#OP/)/* >@ooR6?:T@B5]FHD! , H*\Ȱ_!:D(`ʼn3jȱGɓ(Sh[͛85ɳϟ(i ѣ*wTӢDB]׏JKv׳hJjniOܴxwjّ¼S4["n˶ԸsF5z5Im2 tsF׎)fQ]tiDJ~_}ǖf~e$[m Iq)$5$B)`vHTWMJT1GP`bVfإ@Ed=qǪN1n4z8W&BJHjPF5+{b.U/oIM(?@z+'vglRuPu52(];(P+z*a\]}Mє+JcbhbEfs&޺)YT!EgW2TYbd~Slqm;b1WvWd&\ׅ>j937飽l+ƭ)`eD܅%p&NERۀn-AHbV붧*OޝQR>k4{ȌH2d,P 3 Am]:G-pf@C%чũHo◹mүogg%|bNچ.N/NStdxֲ2*) |4wV4nDDmwEgš1'mLS=4 .b>)\J7 2XVF;[EsITh:;J  A^CHx?RWX [SH[V :-!Olъ: %(,fhMBS^x'k TMd2.Og$$dsA!J'(|!Qg ;%G0  %q!^.ִmSQǕ> ~nA\IyfkE9kn5WJBZhtiou+nTl 8ʠ]3g}TE 1^ƾ- u/P ,ynOD̠J3n, [/f%h%tfUZ-T7KۓDtYlf !m*$ۥI۔܄P”W+nb{X sBeCNcfTJΖ~sThz9n# )@R"s&2%'KʒAgI"JQ] DFi=ގ+l&|qONA.t풦LɯVDdtʐT-q XIGGw亗X-ǷjfB^R.G{/ӳG!!k97 G mIU17 DM(T$u 8361/vRǃ:z=kgA#`\8Lpg[`e\Y$'fVVSQYpMGe:4Z'n^G4a@b{Gae{e',lTe#YeBA 65id"&[:GARcUn>G:S8q"w54#{zwSxp`4Kgwg//W$7#=*ZS7bE^&M VV€nv 'Oc"{.d>.¢ieR3, dGyJy{q6&Y5d< Qu#R26( ="OyS7VS""!~QJ@ *EsxBetd4*7k÷~#RS\p$i 4aHU*CK0a#$[3|Wf2'41?aD2XKrx>A1s=|{-uiRVwH`R#| 4nC>`CY kh5ld67O7F(hH'iF *xϔRD& EX DasE `Iw'S7yhty1aTXγ6q#)u֑i/ePńpVCM5YnbW6",>7-ڡ*Jy5l1 >caXLsy49G\mDG)FW$ESaPhpyk (( WY63S$!\JCɉV]z&ؠm:8dѳVYW:-(Y1u ZFR-U4R,@3ad Jz GWXKBr1svdIen BzA.!BZ7"JajuWFp꓄t`jpţՈ\s~@:zg-ưa6f{ZTKxXTq@{7quqJAb:\)v4@aPNh#L\ iS A(]p8*RCQBkjp{gs=B噤xNˉWhWR3q ńcz543}-bsZsځE!C5"A[oɡc8ё)3;N|Q\GWWU9?{P«O ei5e&RTK5TQ{b8j\qRy99s)fApS$9@kƻf Q +&C\][a !KTF<،G>`yZKTkn3^ATO]{ |ʐ=G#"#G 8ۧ`aMط@()֔<Q)+1L'D n~E8mY+LܗŤǞQG^9${t-%E<7uVlm̿]ciuἔ5*Sx9β]x3gy 8=񜄳Eie ,qjnuNQ2gRpuٷ5}KV[:ҙaK׶V-XUw `0٫3Ssֵ|[PD/{]w7eq Рy 'HVHs䮯#%Z IUL$JsyO;)}MzI+yG%Wi]eJ;~U^zi-zl3Œ n5z^)[{≓nr|X)mdM׊;CuyELuehn-{czC)c @+m:D ^֛V\!$~x))maӣ^W)Xoxyf8*Eb*UleVWSp2ݔr M_o,;nSE+6SSSRDra_}kζN+4zaI^+{ɤn-]-ʠIJ2^o&K{Zъ W[gWuSl0# @d(ʨM0G&犮mSHB_d0ӵFygL\􀦒Ջ>yzN$(O H.#;cԸфXZ@t&pAb 1=pb؄.'3Ik,8)JB5,!Jڄsfn GXCE S)HQ >]f0OI8t;!2M [blEzP\e!$l3}[F؂>B`m')itǃ`7+״=6yR2\dg`2ʔABFaPDJA#.p;D{R;I7dl`5ENѰ( UIݧ3"qݱϓ v r>[(ϜBW T󈈼5ZEKғřTq(MRR@mS ZaArNQ箠 qC>MwLAE~ ɰzqh:0@sCYHFWa ߼F%3ۖOGe=hX)$wzR0$Iߒ;Bs$'Z*ϊ@YV?dD0;C+VU!!M+M8,P\CO<"A?$6pWUi#'X |"K 2E[>X%LZ:!=KVuItu7| Jug1z<":K$Ipaxg4~1QᡠFP%> !n΂ ¨XmUHDP#bf65Ӝ#j%M3s)UuJi-l]ks@.= UwY*)@<5r&J9K-sY #5A.p^)R?M\:;,BR1mAQV ~Ҟ1ŸgU+:.2eAG~N"7xz }k8֊b&b+Oٲż'uVĒ$d Aj9;]'-B1w6.=!vS;N*1tU'i^&Ȗ tȕ 18BV6nPRzb5RXPyJ,tpJFHG* $)u'6 \I ?ϸF:(5V ^T 1;^֪_jTq(Ҽ"N[nyyQ(*3ds[qr}xkȸ6w![tGT8@%)-_MUB3^fzdRw$O6`&ȓ>̚Vѡ՚{]踺V;zƜbTWjq#MW[*ȷOO6CkE*'д[*V-"ϳJEE(%9^c 9bxRD4y7&3`6 l&&5}!58"$ՕfRxAuBQR@3wU18\ FMhpKTdTD(D3X@ 'n !"6c@aLHa\0@pSPFZDΆI_(AQA8^0]JÃ%Gdn?sC6R{H8`4y\d\b"?7W6WXe  B4ƱwWqm$B%9{!j3Uoa)(ZEǕFPJ~>2y(JdzC)ⲁ{gQdbD(:Aq:Z|cBrU3dTN3u03V)Knm5h%I^l5{1# B9WYZhK8yv4vi%5o:f$$'7$kM8$SOA:䎵 }cR*h94b1_ȝq6oA,*x/AcD3j{nxKí'痈R1(8[05Aɡ8NO:1CR'+EW4K 5Z/HrF"U WRQD.jycL—rQ)My0\Q:3%3b"&v 8DkǀuDáV8p6(.àQxC-,hY3ȦYz$ud )!AgVkQJHMMTW ;6wɇqK0GqVH!9qɆIUvL7Y. cɔ⑬NpI k4X-42M8$1$Xhhks F:d{L 9A6 8b8}׉ȋ%̿b.0c#RV(]ʹad$vd?8h' HrfTIeaE|zܕ,'$CVu@!ym]B#CaIE 88`8d1nbyj*RA(jBUej"FqU g'Lb _G2ɭox[~&`*Fɛ\⏍q-D;d[BtiƖ%W!¢.n.Ih1;kD*tSyxCru0険,0N[yz:)1X0Ac'9*t1qݜFXr:i4G"tϩm%aF5+mJۜ]yɔ4_;kh$E^rH!L=u a`ӄ1Q''cG&dk.qPm3W9!Pe{w'+W/h426V!=v9x23Y 9cՃm ,8b⳵l<a>~lAh̛]LA"`0žb=`1ENEٌ'Jp =θ"{[D?+؝rЗ)wǎP'mK,fø%miye ڶLlk#ؓ Ƴ1lf]xY%Ӓpu |&>qm)/n5&*Yxv.SbAj 'MuEۭGC2.A0GMⱻB&=,Ծf]1C6 T.pV~Aૻ]NEKWbIGf$dpn.,8 tMDQC.awLX8 #^JΘ>ac%)eV!ޚx~!! ,H*\ȰÂJHŋ3fhƏ C Q\ɲK^ʜISʚ8s\S`ς?w ӤJ4IӧPJ}1-{)=tׯ7vM`NU,ַgMݻvV쿾>\3fY%XѷWF֊Ү3Tb̈́#Uloוzd zhT 3btD1^nN ݖdo&NԔ-߿o雳3 6MS&m/[]cjNRwOj5x-mgW-U!jg&slj_Bؘbd`IcA("]v>zX7Nm?VWdIȣCfunE |c@]ffg]ɒU5t'QvU'PInE)&M_PNdndX1:RgTv4PU[dgxB=!FeSf(G@*nrbg"G]Q$~Z*}BxZݫ+hr2$lb9( TdКZ8il2&dsKkO)!|!oڢ%Zim>%Y_i[bI{ ;T3#aVi~p}-\ҍGVW(V4 qXI﫵P=\ )c݌[H)hKBLͭ"3(̶*d r1-Ow(eowJE)Nm8i7Wem@ JJcLNp`zN4~ct.P;C=Rorj(rpv;E1șwK.)dMAs8'_brZt% dZS>2iԤiB, #Yͺq4],j\$,Kf{(O'Ԝ!RIKT?IB΀ FҜ<71.΅X(G wg|P" Ԣ͝S)Qs@ī8hьa A 6 2gb`W}3k4i-7Ɓ3l>{ ,{Y%MW,hB۴X EM89-'& ;ȯ OiQ=ZFi ;;dmRg%"?}2,&W]9T[#{VU>|E R"b9ԪrSadQ+ӛcؘ\Yocmiz蓩v/v2sdVeaJĶfF9[Nt$f%i` !Fٷ"?6.KBF[(VI6&!wӰv dL0H>\ zBm*B,8YdQRP1rvuPCtocJk܃/.dnL3^{'L?W)hnnʰ.D6+6wSjXN:!uY/Kb@MNFz2NT8MG\NuSƌiec4c)9 i;Ed3zޔnZ+p1lbl bruZx3;2={^p%Azu%mYxܰU<`)Fi~|emfqwux87Y57Tz!`R~`t\UzdBWd\Tc c"B[{k2JZ "AsM#`>bE&7?tr|t0HILxJ\d0ԓe3H XE5ܧCJ!cR4I >2$3>+YWQEDMQ-#n]c;r'+WAODHET-EEl^oU)A='?a״}up Ue g H1d f8CC0#V0}UhWoIyu#z"9Dm'3P&+؆%tw.c}aEcus,r"QAxaoUvhzSeܱ}TCWm 8xV3CV  rj+8G"U9 Lg(d@ d(:WXar9w0h I|ZR2W>#"=< j%# `&D$b$S-c8٨&&9X磪1Vmj4S&PFb XcDXENsG}^f)r13{od dIb0x,f/aqQcQ q7Sh}ɚ.HUcTgCS8*u63bXIԶ%GP6O$aSQ:1ѴkGSL[1dTS`*yHQa":7IHTga %):>;k^6/Yؙk}*8ńוSxEc[\XW\L[SI6b7\ԥD^8;eaEմS:]d;sֺV Ow>j{4ןċSq^Ⱥ@ #k[!gJ+g f9vն;70f䶼kì&%VCQt.~P˹%:vk HtW{K 2N 'iUO @9EMR R BhtFAM2 k Ctf gדM{ˆ DV؛vezLi N!;\rD뒙!/?!0kDUGiVigq6sr1fF&C8ʷRG,6!c \څzw= 12qӼ:= !S% {6k=`iia5qcbkqMZ;{dDGZ$ MI[)QNm$U" BYQ]>deJgmlnp/D! ,H*\Ȱ_} h łjȱǏ CbԘQɓ(SlXĊٲSŋ+sɳ?{?IQΌt(͉GJPU@jJVB1oє9)Lg VʶIWKdKhɚ-;ںw^,/S#q ˽̙b^72Y6e̺R\&q¥@͸7PܺwΌLNShȧFI{SD= ۙuj[l2|{MT|A(/$'lGR2a$+QXY5v(e$^{K},֖Rnp!PuS@w\=?K1 sLYDEȹɍ&|V}5uh! א?&vflD7܂S>d`T2%KJ65XEJ'^Mӊ+gzE&٢=b:#ifP e'< @ӑj[prS5YX3Rz@*܉ڪ+XV%m9Oi‰UWݓޚWvMQ;`^:ib$+b=kk'\lE)MĤd5prv\7Ũpb?݃mIAtG[YhxuD $ݽW*'z6jN<Di4`k&ŭ8U% c05hkȞͿB,XSJ_V+I_V=kK+:=l@\PI[b2W{ԝ%K ΊUJps-M6kh&>Lb7y}}PU3d.4Ʈ|h @%dcq_6uԽt-&)nSh)l?œvͻA#=]h&{ X&ÒIUF1XBcl)1eX69!Bi MJĩ9YN;ZG;6E`aXv.A+H$ù]]gaܣ6R!gTH+hs|k*>8B%N|K\(a/}rZHr(A y9ܢ&CO_$zfҔ2GW DJ2+`v~äBađcЅ0|8E*^6ьB y(ffTR |93H $ ka)Y3Vi)JAFфSpiru%"S~>G $V*8'q)6e9&IȄJr4%N:TJ~Sv(6f0)E h "/Rĺ+p=-7]tӸGNȧ@Yt0(GO1хX+Ք8S 7#)h) p5ӔI`u8E׆|}%Buq@38R$6fUuL)ѓ %h a LS: {qf$jtKKVֳD +$$BXH)7*mNcB7 ro?d{(gSȟEW L.l!D:/j-a[d6Ywm*]z>PH)HRxTv[ @BφiȞGӥvbV§UP= RRR(ĨlK1!UN *E*o~1cqfy'.LVR`[NX/g7ij.OjdՠЦ:A%ӯX~wmIDP5h ,*R^ۚ i#@ťy7FB9f-$[DH7{)%"X&nR.ڵ7=;GaH£r^/aTlF"ZXHՐ}+hSȵT:iJO8O!zS?7ת5H_YsDhN L'dcsMUZbto ';Ōŋ{|$dZqf"%WV.%EĠ?F=t>e[.4{kT81s|rȽj$-NI*-Sv5O`Lo"޼3;3ug!f_xzy`HIty#,y+VsWd]*HfLfwGa#FWXq9> dؘ? Wqw\0ayV{bVJҔL`Il_GP4l2:ikb76p^H]B* Ct<&F1SqxB:3EK:6[[)`sMa$!;!7l'JI+%B'uRW\1&76 REt}Bغ ce*z?HaW|XJoQ(g_(JD$vۧ՟ї?qJcFd#I0eH}:eDQ$* ?\0?:NpdwY_Pqd׀xI) D ӗSV@+xwe QB@?/'yv}qKFHEIKCut#O8K1`MVt~ɸas\AZB M t_kLgS 5/kr$v h1m8("OasU~)4[hoԊ:x՘~Kzq Z?(<Ρm2\ۡ ɄP[FˀbbC6i2 F93a2ham/9ePNÍ"H =<8wk^x,C8D@Xt{y['V6[*4qHW&0$986AmksL<紑[Mtd J0q4QtDnIRD+9#e^e3h[ ZRU ܞd "KK:ASX6;?2v){{DM=ҽ,igZUծF:bRo-DM_`)6Xy1)]4SsmPfZ4<\K7FY=QFIך2ٌxdM|\\$;jmF"гL<ϧIkCIb.2ŧPA:M}dzm9̗Xy E~(|2eS Ĵ"E5ix죝qā`hjͼ^~;^\0/hZrg#]\Fl&Kޮ[A8C)Ifv ^>_ʇRF"2[L,bE{T)Q#>|Di/&BRAL!S\ա4ݼ oNnYB^@B2H\~c.gN\Q $ ! ,H*\ȰaA[ 9Hŋ3jȱǏ C(ɓ(S\ɲA.cʜIM0BQ͟@ JsKHS=JJjLHeϪWY[Jٷ[]9 Vֻu=_r`Ę59炋;SQ'|ɼG> v職]/d\Eӆ+b,]rPӖM\ZݺSw\ VQ9q=I%-ns]9asv:lъ} B ~Ѵ>٢Es; d#$^[/E Lɕ_7 rdy87MQ;eRSPV*]qC?)ąA2VԤk!ƖV5d Mw@61@Akɒ484pHvJ:=1%%0wK]f[R tҊ12}?1V[s1%iK2\Inmw|$WNP)ENԫC[jZ(2oH`>9"pO6M-59Te<%j0CƵ%O<^z;b"!Eȳh:lMr\ݹ)PJVb5zN:9PK]vAב{rSn1II!x=!G ˆ-JъR.,KS_Yx͍_8]۵uKQMjR E/#/ԤI7-v`:[2C$Hק>5m%XKxBV=BG&8} D`3rƚHFX}%>ɼH-⦌^DY[if\ꤧ!TlOOT#f]DKͱZpGqTv`˚,&tC6w6dxJ@ D>I[GƅÕQ7ba_CbXKݒLhĩqS8\լ/X듪$U RԏX_@KqR4`#Y G䞾d6eK"̅K1( )t@ GaO!q>A@iNIRf;GVvHW b/-g)/ı}ٚ#BVžB‚Q:o bgV) TEF ??OK $mUR+ $u_+Q HW0Ӎ#A-/&G-lsl Md4L*qS4)(wmM9O C*q>W:^\qqEk7A 1ɛ,>{3Fg RHdPd{޺'rw;@kv]_8d2T{b "]e~fhjT{ѡĞtpf0#Ip%im(Ipr" #Hъv2MQM)l&G\ٌ[#]TG.B!4h2W(.DE,HD<ݤa`kE`y,42#SgG sa4{ B>B/l0$WC%USx1DV4be}D T.C$P"P8I4U +ab[1:aj0 (B4GaDE!ȗ'go+E1UEp 0mpD.)Si\WP #B3Oƈ|X1al7BhsCbk~:tQT5HVfE9L]mu rG e| f@a:~olE[=Pf O\iS`HS(GuE℺`bXSlp5 a=#A^&y!.SzZuk%9D$kdE]l\W>d'Xdk&0qN:tyVC;U~{$'A?s40fAa(ݲ =8SsQ0XZ^rSxI3*69Es$ԱS*%xoGp`*BHRڶ@ܦ|HVBtBvQpT~2Lab$[!\c8y ۔IxgT$Dو@9v,R#QBK]1! 3diEpH42Yh629Pe=,&R&<Gd{2QEIwD9pN2 `1$!C`Hu(P猏 @Ur^Nhe9]$Yt@HUVSaFS@U2K#hQ8R$67^@8Ph/вj%V(;ȗՃ-ӡk!bsg'"w4&F-'NWu/Zf},z~Bg;Q[|<Dq1 iX*JAC!׆2-A*`>M:G7M(nc(:t1ڗU6 2#^}4Fg4@$NOtDޤL"/(/vGbIZq{FP@Ё,4cKpaulN#`5x[{/ ddu('rS1V iiwěrzEV~6HDNwsBH6:BG`qphjIgux(9W#NbW5s\pz\Efm02`ehCpe7XDi1j=6)#(ZcюS*c3BF=b?Ƥa 1Qe8Wj*5!6bsz, ϡ.zwR/`zq]rS&s&>ccėc/c'E*$)TZ[GB!y Ĉd iqa[g# }ZW1AJjT9Civ'5cKLZ*eOFPOyj/9HTH,,KoQ(9[~;s{@(UXQD帥~O&kSp"$E⥻GҬrrRr/:АCe1bh #C#׳%|54Rz'P#xdODQqKH2{B-t8zU:RƂ vWHPga Indؑ$T3UUu$,OK_/J/|rtY-igq7u;dXgT@aO9-C7X_KZ)!TeQ).g5!g1DJm ÇsDF G%JK8)](1 ѧ}vi%9  ï^L@$E`kjp8S6eXqNG!%6dnh$:QPL6"+wiwD[ 7$ǜ;-|'|9lWK3I̩qLvv |ʱKOdeٝ wQa@'%yl+oC]ۅ !t'[v% .R/M3@1R{1ץ{G$C[Jx )KnvڊM3Զ4[|Mvc33i}zz+֯)t&%̶C C %kf ?LܽT7qU^,U ]B)Wc/ Vu+2pVM#Uɪ7.[]?Q~՞! ,H*\Ȱà zHŋ3jqƏ CY0ǁ&K\ɲ˗0cʜ)$͛8ssM)# LYhϣH*]3(u*ӫX 'uY"jתfETۘ\~nNxϞ˷%Xs Kx%Բyv-xeK&xmD_0k<sbmkM(0¹SKtŵ xѕuDSou Mh7 yno^Z68-SpjU^DbY[a B}޿uK缩irL2$T(H_xքUe4'wKxSp1!8E)U{ nqVyS } r%[VY$H&rъ\t>-I"[@rQ)w&# NBa^at2B**)@9Y"RW-n'wAYIH@95Qg:uZO` B9W+|gcJӖ5bTs '88iqVՒUFhک_*)%A)ӊ:MTa)z[=ט]MuX&?5Oٻ[YEEGWUr叕rJTGFq\lQꩀ[M nwҳ #Ka&Fy@Nl MB\T#87H9e#-/CQfYbzԪ `Iqz%Tdɪڃ/` 4E`)<\@T[-,N޶ܮ.XHҭYM DJ\d::Τ W|A몋 Tp \h,bPR\[r8#YfU%mg`ʜi?#4LBp\5A}8~[>+F @ ąWC22 e78%7)(B=;P~ oo)&!⊹D&I?<=\·ͳ]"CD @ٴI5%]C:I 7MDnW)HzUOwRCm&.$?e?*"jq\hG`R?.tj`VF5  pՆ .0uG$;#J3<8dȞ|hFS*w6IxqgP3B{W)[+IwxD5ѣbj2i2":v0r7Qb;r-& ߗ(:W&$!M&Fã/AL!ϤT~ )p)xel{&{tW$яU0t̖vOݘlm`Ը\Z yJP3 4/-%C|BY h-ջ_R %HDlAN`]9θPжD  bI1#,q[`Zyll*u8U+&]qV5^p`8Ɏ"vXV$$YI!-ˇf{d2]~B_"͜j  }yս ݔ6XʷIT=<FuR(g%uC [7Æ8dB#FGuTbr W3L3#>`ZAHbi2 ^A 7tD$TC1}?$f1rExcwQS5df'ţy<4&@h"10d ߅\XHrcC:p@{:%B'ZFLnC":|=W`9G7j.6F2dЋSh2cW;3WC7SWCN"Yh,y6$oe6bpGPwaogS Pg~g\ց}?Q 7}P K~gc8Z#!Ǔ3>{v3U&Y S!Meȅ╁a?O*aUM7BKp7H)/ugT_gEqusZ+?Oǔs$|qVyI~JwafT$;3:b1h%mGAГD)KnC);$]H7 HG3 U^c<sC%maHrvJ劭׋xxl"8ie&VqYȊ!`u|C3?T3T0K@Xkh)bB*^kjьIRL헉TtS=mNc9=l8)iKt [ G fe/'vNX^S|8hIc~!6dLDN\wtyaw aj:0ڒ$2e7|h&܈qqϦűe,Rx\OQ\&^ե@?3%2IӹE>mNiȳչ,}jA2@8 .!VJ%1}p' -p]*V"h O~C 5PIsRHDqٖkR3xS\hmhbF"-A~AF̎,Tc r&.0O$@=8oN)ZXx+*b"ꜳ "(qOb~hH?&`v*Bk-A}O@6<Gn\ m!!ŒzKE:b#C/)oXM)=D&ɉ]^ 꺃=ԭwsKWRiRrqd4E5f([~yhpw-o/!|GcDUs(oAh\(ԙ@1}T ׭q|*@F$H甋DZOzHNiʚ)[XP_ѣ^[Zъ .fBʖnBGTw`9=)lp%D5t"sRDJHJpAyNRʑHzЖU, A|Ukb#U +3\||GD2r\*z.Ls#CWb\s/i\G-|{ޣ+H4'OD@[+sAƋS^G @${*C,(2lPLZ,Zy旼{ʋoъ0*۱uGdkd[urKb ~D鼊56$HA)t߮]+Eu"xoJYE 4)M-E)8Q W%ZQŤ#hKڧ]m 2y*|,EJbLyV( SہZK|i)ȩ׼\@ (s۔yr*ů2(=lp+保\N!)(&䭦@HA]5S+4/e /?Ϗ,,+؊\@Z'"wO-+Gb=j$㱌V*{ݽawt~q^D#]_S+S'.bx%LjWj 6FjiiqW-e+T+XEHS&Fs1\+x82$r"@Y-GdeX)SE9.?&0\GDRsH鵅Xe⃂G` X4"43:}/W4ca*O/փetAґSO9e E26/SUjI%e%$VUcv[uz%RtHG\P+ceLAJDa" C v|]OuWPx$/b) _r2DBSDm4&D 5ϕHP B7`iD;F d)BWgHrCICI7 t'KeD6Sҏo'J7y! W3Uq95GZ6.JSp{8DHUCR(Hfh>ʗh[03pc#3Z?DwiU>f귅D9 FF;.?k bh 1b!u7A_7sOaS<; 98/#~Q'ab8~E{bwoqo=$NZ60-j{}ak3a%&nTYɘWhc(r4p3BUg32-(r ((lU8E'z5FG)|HTP1FQK e CMw;tз90)1HLqXXrbϧmq_)vg2iɛ`F>cHkCR]RXCԄ1 HuG4LR\JwJZIqw2\qXhɇ1[V9izXtQSu#_^^4z##6\]դ=wZ3wwSw$sUCU*aZTDE"4z@SHqbrJс.^OŊon)V58xT|%i+%g$::Zab&r릱 t:F;% q:3o>lgJ:JTYs2٨ts/ `s;V Rqz B`@\ j&MW+&(WD3$Y9cl[^^ (t! @Gnݔb51ʈ;ox9pvS1!ĖQh)P #+QJzq6"81RV5$4@4$KmX5s6ZsDKq]4gS6RRJG \ !dZO ?ëCq!tGS@Ip0DMT.j.Dq65Q+ Z)}G%r2s+ljCZAS[v4l wÉz:D:w #<@WRR AS#UOz> le+4h6:N/*# jBAt&N^+ȎLuxLTdڻ2RNc'1:g)P4Ւ H4o5yE\ $TЯ`3HoPX;Q:8w)+&8\ |Z с"&8IqZ -œP՗̇A[4j\BfYMES{J7tb^I^2*ǨTZAJKW"yMj!SbWR'YzP_Jk 7T6)n}izy!!pbIZhϕ,F#آj+'g;W/W[j[b8u;'ܭtSV+pER+tR.nB;_fS!'&d+\ș/t7WX^E 8:4зU nUKb+&'ldcpz:+ٯԩiM'('(;S {\b^JlN:+̈́oJZPpO5ShopL4B~ܺKoszIE|Rb}T򳓜O)G鵫gׂIFWUr!PaXuRn\\p]k$G>-I\Rpbne(]Ѩ[C!*lHJDJ U¾ĥ9C }^RnMVi`#/Nc6!JZtp%V0!U|(#&F J*$U װ`') GXmON%3p(c41Yc ('Qt Q oNX} f.d" qS(Ll|77Y \VgɄ89W;&@ `zD-&0(Dn7yM^sXGO~E#/v"nz_`dK16b/~\pGbQ gJ[b 0.0 pa,(R?LEhAD!_@8@ t#q NIRQtDG!O霟/p"%JRuFfCӮ$h$MSe) !=&. .?I5Cd9%Rzy/ƛ-DKKkg)?V+-oʲ܂TB"w΂whRDR&;s5YR 2ƒooQ Y3JMϡિ6I@N_ H";i輑0i^!'5#Jt82/Ѕ$lS9q}(%P $  -ӞOw7* s]wIb$,sÙ<@b益v;~܌ S f!DZQ?OMڨI]J?V$*Ǔ2Mk'0DzWfrw ,C4&ɏ1xgl8Yr5Q\(U 7 x=s8"S")?'uKO'T9RIUIŽ傱<.0ޕ./fW5KNuP6GiNeɶمEuo#Tvb٧wbBHAN/XDPqGMNJ4]CKR>&[W_^]J8It`A8f$}K2ok]NT O'.>,9[2u%x(cݕf@'.![CÓQOC bzNYXvssH&d Ymr=!X:Vl6hE\Q'a`` CB"@[C4%A"S&STqsjYuh0~ X4~~Lfw{@E[+m¸PMR`F$<ĂCF̓f# 77#!LX'./ 1W\nz3dd/tP79ˑHb @P(,7؉h((jl]cA0]/*˴ 3GAo~ffb?ӆx3(CI <'MNB8r8(;xXeц1,}G97 5g|*ޱqb: )SjfqF9CsS F/_o5D?9Xa [wh]&FtGsa ަmc0_S;`܃M>6efV=rR%;EQU;AQ:SPprѕg]|vk$Q/HG"؎rUc8IQ27v`\o2G$$nǀVtiK9`~vC9ĚF F&lBE߉t DL@ NE;+Ƈnrt[dtXIu"q9x~JA'.U <#x?siD"7b a;M y0Ik ȉv !Z51'ՆJABG۸"-m"3Fx3EHA jVtGK{rhlbnS& [jJ_jŜM6<A+V:_Gj~Z%,mE/årC9}IȥMHQ)%_E$HYmزX[:1:ǘ Z^oP!L.<PyE1wq(GbB|Xz> arITu.r$j I82Y{ ªwz#zpHs `URm@(=(FVc3h:u8͋'Ѱ9YS[Ap9tBa;hqv}hF0Gڄ\#q!$Jmyj5c·xA\IBr- L JOᅭ2xQWld$l8ź* q7A> WB[8Q=%57]LۺN\tVrlVW\rϻ_L{1VHE$RS%` UwOb 7~ qΟ'EF64uGPnxK+L@eeX]WؐGtauu1JфBNħ9qR!b%Hؙk%rVygmg-dSL)Wi)+o[_$[f 렝 BFV80zsϚx:RJ1'O)\4٫r+rDmTZ4g欛=fv+ӊ{qXܥ 2"x=\ "6AX|ͥ;p'༰xɜ} Nn2;Gh k!Si\i;# ;r6dhbιf9D\Jy~+tIYismƧXzG5NB[9cmKXfuPWמ4&њ\%I:x+>sW9H,+ jRM4+FRHBA@`mSS} cG- ,ləs~YIiHLҊxd'aot;^8 1r_[Q-Q!qM vI'M9/auM/h7B; l.ac6+YNM-k;w4Mr ?^,Ao ]h+ZZ+lS"H+L51Eˇ*[`R}a#}MDVqXS2=(cP )D~Ҋ^٫PWb qt HB+G=- .ژb_vAH2-v99 Dvlc![ Bŗ;$A4Ce'LWkPln;c)Py/F%nv))Js9+@n,4+ښSA>`6K-x jHfDwܢnB&VX΋I{:KoFR^i9H.|d'5C)Qeea ׼64"trCif B)Twjdu6n @LI`O٩(c4TlbR2W@Nr *e@Xz1ClHTJMQނq*$) J@[7\kQg&B/˅(L[H՚"W_IW0n-N; _ -ӄ\`Χ)2̋[[mkʏ 8Bfnql@h jX'Q_,}j)C^ې45]Lx,nW6QP*T)BMU*mT$Bt c9qw[3vRl0ZUR>i ]B3a.V4Ǔ‰jdqN]dR0ŏC)XR6-S~-;ވΓVrIo\]QBȼ&i*-╓sqx ΠGD9ĸمcCnHfL֘pU-liQ-Rxf7g#)^\dҀ UOٌĽZN+tec 2jȒWQV=:i-PrE: T53,rXn^4-iSwtAm4=432G@` 1|$o32R#UkD]WTAW71}y$PUr!"18sPFCcxUV;mvS8I_'BCw*<"M1P|6HX`|Q0lgkLdD'(7NGg#e4 AdJQXL8ZDs Q7zpW]QRi0(cI1MJE}~1MQ(1cKt&PmЕVE^o-!_g5%!V3-̔<;*A/'np=p%p|eSe|b&K(5=GUOmRQ1)th.4V^NQs*CgZsvh[bp@,o_y'8ywqe&S45yR<]H9@*4Vafi_u#%sEwBG9'dI'}|v_&#{8KPk )x5@>7cRV 0钽$oRit 9\ܵsd5A"Reo]ߒk;;Z9F,vc"Gб(t%M84dbB2/>Oto4&9gX+, vYF@ &fo67Un~HkPOx tR5?wv/я31IhDnBt0FqVJoQD74y73@-P6Y&Fn[sV[H)Xqa n#'b%upIopD~;"m^FOTtHf!d;fD h"Gmwy !dR"/'gfAea͂mHT$2S6Zx")"R,qG9i?OH1ju*E ŲXuJ[tnr |Ln)Qg K"rAq/g7Im"HFJ.s'$!4} g-p+H4{o>%-%EvE(â0czgvW¨IЁ/b?Y!YOeI9!d\dp{f8GߪXCO6Ilq:8` lL%HU1h >FB"*PgB%zz( Q Q"tveʇ KGmɣId f 7ZT7P &b9H<\Zy6-/5C40v!F뛲gF O33,Ttgp :-H%n#T!3:%!^3s7J7Xm.9e(F N "+q3w{V$7Tjyɚ'4ygz#*)&_R $ =e'Q#›|K QN(I e$2}){g4J8KwQaו}Z[dw@^\+=+(\"$_' xk;CYqҋ'! ,H*\Ȱ#JHŋ3jᯁTQȎ(S\ɲˋ'|I͛8s8q̃3yJ"ѣCG;R{>"1L{ڣueT[P:;6lӝ>QZʍ]i%7-ڻLwp^ج~~Kra92 @B{ &)Az\qӍsoεsx^|W߲ y.4܂Mõkr^{n˷9kq)\JNx$x5=\PA * uEqaX&`CoI4K4]vl_]Fab5T RPcpYkgaC T dTpA(eMQRYs .eSjno&b+HL&dG_Y]DT H@, hPQW۟C+4HKEa7iրh]}5fR+_jxd8){"U,+=qZEUZV`cRZ=\zqqSx>ZtE%=s딽]?$(+S(K@,WT&u"J(S ?1=>,sRRʇzIP+X7%ÜO2e`tǰZM]/ЕOLMESaK)epQF)^3uwʗTaQ^Ћ`s*Wcܐm٢=eQ 7Kzʙ27¥V7j,%y\}qXa-wKy\͏ѷGvVŽb맏D-sY1w{O=y{FȖbuхa4k.Α!H#H ŮU,{fڙ $mfa!t"< fXq{=h@$%&;xM}[OG3 @lF-4>t>%/ЎyS"_)z:b RI)Jщ%bTJ* ) rqcHI/+H$twH,L72Ib`jjxD -_Cnq1ORZ,bRpY#ʜ4MvXArI*TO㫜.]9;ޕYQ/;صYq $rĸDy+L o)l,S%6Z'm2n9jZ쒜+ƺ['{\D RfQj՚I;LBR,g@ m|$AԚ]'i4ԼIǹN(ERaE.2=x[ė[V: \qo($W [ٱ7h~[G-G]P\$?$s޺Њ)YWRnA&O]u"T %nD`x[CS֋q?i%r d^Խ~q~9ٖLvT=gX@7{OB@@vA%I{b^%T #"KyUNcB PgRz` z%(x$&U4.QCDQH_|2=PClyEyGrKIUKV"[2$(7QgT`,wV2K~VW%S^ImDSoUց Wc26,!y4b"VM 0d_l R45*A,Qt&Efd]+&Xa?QOx R q|x4Q|H_K'51i`R.D#_vqؖ.Xv\f`vӆw8(XsP$E_`hfZ14?u1 RգQeE2]aHZd8+TFa()R@Yb -:BcBicVFe,xRAQ3wTaX]t7i$OS; UF8FRgurB~bQ(V?&,X[O)v%IԎ#MLH2"}ak;6IdCwC^r%O[:>e]d6Ig8<+ё!I#V$6Ց6}x_.#v$:lq dd@#HY#n+ȓ!a(OrO2QI\ c2".5"}#lS@ e`fs`Bχ> 2!iaHO17AUp;S ?"nG"a&ơ#ae^F2 ]UR"uAr-ozha X7L")Y &JM:!Z{[أ18W[hahT[i)/(c?'#(iTeB,N,Rpш)k4! b [05!.S\VO #2$S?f_S / ;!jI:v\#*(%)lDGA'^;`UWS" Sԁ %^U`+@cs`U♮PRFb1;  VV;CW3'BvZq-W4g4&̧ps3+Zl5M4e9UJO %)(Z a6:v%J$7Hc3AY19-xgmIaF7Y`?e#Sx?QpB %r s©_+kvڱR @h'ɺI;dt Qcrc)Q EI_TQ4Uc2x#b O4ž"-;"Z[4)*z :}[;)$˺[{a}! ,pH*\P-pbE '6ȱǏ  Iɓ(ڻHCV,xeʛ8s)΂>u JT#̕bJ&ѧPj_ժQjhTiR^-ά9ֳOgOp. )M9q՘~NKXůs&^̔e!Kf{哊k[ˠN6鎜7g)) 㗟6D{p6j/=P^\=يR<0`g :T{7y*w\jWuGVm*}KPNA+Ua`BfuD`~Q0sBf}VjńF#SlV{)8y@L%~Rqb0Zw[|IiA㗐L}x? ƞXU+SD*ޗ_ePz[zjЦv Sp1E)%M^fKKFW^ݲH*&f :b.^kM ]jZ:P)sn-aՈUҧ@ ڦ s!T#EDZliSo U$\"e]!RR)e(-TYVW~I?ES %ܣNeUTKsRB%BSLkK2i40cZѴ \c޿`Ju`)t;GymMGr1糡MwRs GT %ns1Nf=0CD_vi)?_?V]@B7kѣa [Zs]Ux?Gs'JIvQ8Ѫv3@5?x#*)ƅQ1M CQSХ|$AKUa 6doI+8%.pT WdHQ})uK?~@ RS~@(GŵπDQ¡1!ҩF1 R%+Ei _s+!xC;؊ ĭS!_T[TlUEZKM\pZH  J]+-U.{ai*Z%5\6sn< '%tWT)QY5&nU=ixf|5giK^INLg;#&X2 . .TbVbZE:ZiKʓ(c'>(8_NTxcn Ǟ%_lM8D6jGt20TNa Z -r]+f /p-}OB(!_M3^Tdh0IJu ҷc6IQQRh$ŻW;={@2 -H).bv^<1ǟ [I3< E\ɊQeԢ_'';Z1ک AŽh Kޓ8o%Qe =-Q$o#aćWƭxI1T'Jy]Rִ_ kt %QvSC;n -A w!N-wqѹ`ܣi2t! ?q2Vlky_e(lE;,CoAfW\ w:ժf"]>L^a" WyNԬ>B$p;9"WZ F3Tgg;[tx/V!H#_+Ba{TgY4 &a 1u7ȂJ]'(Eg\gaqFrt}qwU!@/'}S0Vg%$Fn/P4e=s IduhQm1z Rr(W9c|4]BrS-q pVJbet/ud4B!'>`X0]1vvaXEh+#pSw*qa~%f&jEZty\pc?b/"Z:8>Cev Usv`؉0`'h@R=pѯ^V$֣J`Yi'K )P h[4}U;f )떒=zlYR PhZJ2k6hM敐Xŭ9'a߬= ?.99PN6'E;I(U+UuK,Pc:?Pf8_# !sG~3NQ⻕W!{pf-#Ac8~KJ8DT(_c%-U`?E 2cRF,Tq2xqS˥?KE1 4$QMڜI u\ :#Ns NEOm æ4Ka~JՒ~^4YE\e)". r T0i:tf%P--RJZ!VH$_NN ,9YNUjW0KB*Tǟ-mTwLS DKD" /S+aq7vxhRU a j^i Bvl]Tup^BWBCV0%l~TzNR%,ow &J`& "%&[l,(sn1:Xpe)]H2 hVpY"GjfuSpj! "N*vB)l9\Cb KzG0U/,`' ŏ&v[!x Eb1r]\t-7E5ks3* /5I%wW+LTsIE;a[4WmFmr93OnoI&ɱ{iصӖiI]<9?s(*}VQNa`֌WM 1E[n +!Opnv.m-@L7l.t"B),nAF _I#M¼_i:A" Fb:&EcJQ)' n&tgwRLT-X=!g5-S{H&gHZ{,f@5Zd\H;;WX?M՜8+E X2$qy tM k8Aoͷ Ɔ )Nb["_oήOʒ $ HfIyF3@jOÊҝz<x]7[tj&T:i47Cg$c. |[\ΆZ!%DOS[<,.qVw ƅ0B%u7qt}_ړ9ɂ2M`:q2>sp5A,j fPhvvqV8g')Մ Ӂk^S:MR&Umvu0dWTUaP6]6%nOU`UvOEF];  6 QjmnN:Oq`t"e5!%mbfZ!&eVYy2jWq@dIbA,c/Ux2C)-R2H3Sib" JYQVv]CfFc`5Y]a fe5 L4w0fȋul6b$=c/>1GW]Tbxhh6. &5UPm2WTWWO(nA_u$y["J4Q}-R`BbwhPAZ4 eBdW̡w s8n P!V7qTPMVVARrFD1́8"L@[Y0 Qh2pV֕s&L!hQ0"BeKNjmD[(dpuV)v5) Xh!ZQ+9eVsi7Ipu"i?O 5PP3[q(IuraUpF4#3/1\`sׄNr?"dIf@q"Vt+^b=:c$ףjTuL S 14 G6yhU )ZBzA!=Zt—Ij(x=U#b'@#H˙O@P]U,H &)V=~DY5XI|i2'ʤ9tO3%Ed\ 95"u8]78Pfj0 xJXz T@h8Y  RjB:Q"]Vy!{A M9[R{ _ob%avZi\C5dK7!~vl q &ZzGҋ9Iz m9tRvo*Zkz+A !C}1uv*ԫߪU3zN@vj<1ƣ 3+Pʮگ${{[ wA%=;Ѱg9b ! ,H*\Ȱ?JHŋ1jȱ@["*RAS\I˗0UJ1sdpϟIyџ= &='͡{lJԁWju`IMJV҅p]kі=BU˶nxݻp_4{ai}O{J+o`+dVP1`i>ɶ/_̻팾L\_ Mq5ZċaGgvo mGmwn&+,]:{_hP B%ڀB^t9vPjd[RA JyEE1\rxVzᖟo#f4VgX< %8=R ep XN&&D. L`I\HC7xWd]SB4LIoNQ^QAƉY2@\(W!b=zfwm2QHK"c .b|dS@j e $A݃`qLTڀcT)l6A)}ɦ?'a.W\VX2JE%afvˆ8GCk)lVZTeKxD@['jEpP-r2᭪31;Rw?+4`X6DSn doc{9ˢG${w@VZ/V&Y޷+!wO#' DŪ\qYl]Z|L\}1A JqSrX*0+ŽUwol(n6bOȄ2)0Gq>=ᕩW`PNC#{B_(S$EMEߋVGӛg1ZBF*Bt e,7ܢ@V5*ƀa#:.;l"-.Fv[V2 uL#>Pi-!q¬g?6[c:2њU!sBVDE%GLe[Nk8),RS Hb~1`t%Vy+%67F","$f)dD}aNdbmqN\p ٓF %XaXÉYw:s9֪@\]~aT RcA(EQJeK%W<0 }bd.t LVǑ2xWt ]xu7t*m8 \[X NʀJU0bӤZLE@jل$_$4˅V,.ת vnEyô\^D]#Q ȳ+v^Q}Zu'sk,eIRXbStA*f|͢bf21-|R=k[׶U<饪U 2| Bkb$[;nKS.*H!bك.,fIЄ澎E)| djڪ^uʀ*\ l--fDG!`kҍԓG ^U ?™EKzAA+e,l jvRLd7RX^^8/?JTgq8E_ g,԰d33- -mLMs[ ̢I؍逦(C'Lv#E> :V-L9D]HܞU'jKȴlbb*"peK_Q&ԟ"Πí%vUE+ИUкK4ƕchĊʥv :sR$jO;pbT/I1aB gX5߳9c_9_ל8C'Ҟ{mz{r}ӟ:Q{pAO|c3Y$D?\Sn y#E8s P/`|6E~[ k2)M@vpEE`eU M(#)d@ZEXƄAG!!'Z<^@oD,m;<S_f9+0qWu[t}%c>$T+8 /Gv9Ted/I'g#8<&kq'kTNZ2'7b<&K0dA*(e2](ee6rHu5Wĉx!#agcb2pE\Ec.F@8[IMDu>QW\@PmFnޅTq rQ*(ho6kX0cVTDGG$5Eiy描Y_e2st8)Az9qAscc)?U:Ug?Hb N&^Qfu19e)E\VK%B tgy}% uȡQѡ)衶` uQ fgj5'k1XmbgLC17u:$Om2hNudj%51&a4F _h,4"6 *"*)u  f,hCQV@-p\ NX2)]b"]wb#L*:V&]aѓE3q1Ze_DW eQBU BunW8I $[ '#bKѱ#{()FQ! ".;4[u61>@Sҳ! ,pH*\/{lqŋ3j8=rI$Ɇ0%ʁ. 4IM oS`̔>0ѣ s^TJ)ҧ;9uUPtj֯GgV:"ق"5ڷ6_ݖ힅w)B{ 鵯rֽ`Ð<0‘3_Y1gC_LtB̢I޺'П[} WTیsR#]Xtq˨([Aб&νxtS֮|'%QxȎJozz O&&'\ߢ&sb(Fׂz]ԃǑygYIIxjnؑo)T^xtՙXQmէ/BStJUwe(alb L0P$3TraQoQ!A+S0A,Aqed9x@FY'XTVuphDLTgLTQ=9pf"!nFzd+Tؐl(%Y,=pqJ kIXL&~I:dO҆JTSƠ T&VR/?QKه.sK+TIPQ/~\. &nN2I|RERM=XF|jSzj{@ kAgHgݖuAxbP1i#ouu>+X]z)Eלm)HSTTٵC-HpF.#Ef" ^ol~XzUfu; t/_-D5/v }+TQEDtOhnl2MQ;5qDUx9C|Sٓ{n;n=j+}QvnSAƒ$2(ML`߬c_h/P<#=Ȋ[ι43> T R.3qB D"E%!_Rch)jM,0 e΂w DŽTLC-!nSK@)ʰ2{a٥S rC9]ezo"X c1!Kv +_)t;ٙ "mZz[*k&z63[#F$z)KfRELH鋳+qPwҚVC*4ND|6y9fg9" `Z*vt鲔5*VuQ]ʤ({b{\j78;#ջNf'aY]8@ P  [@vg/h;@Qژ}c[e"Alm]d'E#l@ҵMMP u:M3ZM#w2,bǺO1}(laOX`V pbU |ᄱTc0|F*ly^/kOܐ-:=u϶GبLo.j. M0;;Z );[܂4X\v&!@+t[|G_/{5l 2!F3$Zį_#6󪙵rGĭ FMʇ6ƊaڄUXe\l>LTTdk{|[Gi$M%]wS]Qj'u]Z&r5A"?2\ugWs'gޅ t8#VPCfDUBVEV'u/85EDd/]H Ch NkV[fmDW&rx_Q5 varIdY3gX(\ $ؓ,v+?x(X=3uAA PEuc`a aemn[aYd'$M%3AC+7w_<6 D3)HqYRD~2faeXTogHC9SB+Wr4,|ЏVA2b_oR4!3lee6ab SU` Iy]gًHEb.L-n?&dZ@,p QWT^QV*%mEUP0!#LO36CVhyRS l"'X|%OTe_a jBĊW,:5"KQE5۶]MxlӻOM۷{kW]W V1&8`܁| 1"6ųj5ӑj8۟ɚ'`okڳR͑yA4vԼNP2w~ؠՐy^7YDޒyFE-xT%'vBJ2t| Wut]`ǝ~TDL0g pA`bd/LQ#.AE)ޘQ]5%^bh"N2A)g ri %vr Hb>V![Q|QF %@9Dhfh%=Ti&Ab|Q|!uudxY0Zyp}%fX&Urӭd"I):y=daE/W)eыGʅLe0)Vh_[ې;V?QDS┼gAEYFA:btYihVZ @+epE)Hf6la&:Es!ufrŰkw>eQ!T2q~",=27fW7JMY2#~.\ȫ6naan=7m7z+Y=$ϋێ7ThUrseOc ilK+mn9s%+fTQE'ݱkAEMn *Zo xhϪsAE ,- :̪.!PTj9?߲A vigDo9yBB *( @ P6aRRր%`B]`%UXٹEwwTAa*0veQBidK3C`ӑ M 'H0t^a&`IiV>ŊP"(]GJ„PDmi øנ&)бH)P[ 4 * +2=\A V"&QHol3!9#ADy2 m^h*W8eir N NL Ȁ\ tu@Cr` ()KW[䎞T>~o\eB:,+!-1{GJY@._$EՏd8$J $ ;tB^@b(O*N\WvD6r v=KBTZf |ۥJRt BaD6N蔱'.!J%*β <6+k}X-.(ƈ~ъVn`:P4DrޥpL)}[1 $"] l㟾;n9̹$",tw9}r ڭt;iUobů<0d0fz o_hS<{@0sf՜}y^ZUO%t=+ 9-xK;!Zok& /#1f /iAJøY *4]LVu6YCvhd)P\N!L^ז&ʲBug)J"@%ۀf;LLԑP$b9"ӘZzD2F H6a 1TJR[ bϡȀ*,dzPG dyP|x$ rUW,ɵE.+TP2P BT6fjEq!$-;$YRB9y'^\aoMy&折ўw !vS+NmWm̖Ϲ{gȮ1яSg@ ɔwĸhuBRtQH};G"d{UƦ@GBDö#Skq`Ltq2$u!K`WS ^8E}fZxGl;JyhH/Uc wQT 2FU"HG!}0zo;'~wO?b+CSYS#H nSnUZVAAbI24Eu[Lsc耀U;R89gd c\ D(HHhjJ|*^a^3Vl;B])E G(x&X1҅?!ցFn!!` Јr-z8y]|H!KBeFEX'skefhQ2x! :3)ǂʷS%)rW~ȊhHz剂q%NAe!;&2%\0 )}ק< ##HeT m*>6l] %^[\x L0@"3Pc.#y=V%ba KYVu3?{_r1bE0ڲZdz2,[_ 6UhAmպu˷F&6/DKnLĘ [h֒^;9j™Sezz-ܺO6l9gm RxkQ&ݫ/(/_P7LW8Oď/?3A`-=;N `XA7`B%'RxB%@vFv}mw epPD4WOvV};#WV+E u6]g;3 Q6b)2ӈU7㉷QPh 4A;hiU&&iwezTA L@R.aBEW]Tmf`lU%>BP}eYGh'DTB VrMwefXW|ew-tĤh^tZ zXe *b>cE5PӇ-Lk;Җ^=CyzlN}=PIeg l#+Uҵb\ 1'',Ln`s&[U2Kǯ) =mXT! k ?Ue+`({UkRcS|O%Kvc򦳥}o4m"&foԣ1EJZc_.`ko-iz6XݖoQ''`uBDV jta6sqٹE5Ĺ٥A]oL_%D߫r;O]|v;3V`p4)IJX9hme~}XPP=hW-["%xA k *m-{E'*Ymd:0!=AApJB01a *h%>8Z#{ uW,wE H*,mM@S1sQIY܃ K` /Fu|kgVe  %jpvG*4Be&=% 8+^A$D'rXIɝ{s%0Sw>PEU@  =J*H1jx12ꐳy) 3CmP%|KnLTJ&G;"e\DRb -8M|K; BprC/)ǧsq+;$@sЫR8؉MNRY%A;1{ht4t$+2RFpQDS'B*u҈[H|@@)*df"B! ĉ (}ԒRHmq`r!b5!-xLdYE '=ѮhʿUIF`κvN!r~Q CWB4IN~\ - Pʭ(ESQpVbK҃t8UhDm  ӻk+&U_yi{׶{P!ue5%v!CH̆4Z M-z'R 2!x_A'd0U{QTt%*@7b 'L5BvpMpJ6,AҲ-)ei!c ̔XMjMVƺfiڳL f46D|R(eQѥ ҄&w4j'…έeSɹ!VWZ B7IAqTV-YP}fh:JM(93 mB"d=G(JmڿOSmS30抻ۣ(C)hyz:`_NLϨ4nP2QB@Ǚ"lBB:bG}ۙOS(h(PHzK0Cb:1& !=B~_ȏ}i.^2]P(ҳ3&G<===Z%/i9mo_-MT-dV WCc5YU`RgMfDN7Q ZSKMwbs.D{D{%be$%Pb΢#f&Jtj&w&wkփgk2u@ro HRf"&>qdo%?&sWR8MmVbppr*^%1Cv.|t+ehh:}#dd+` 61#+^ig{'#^|S(aN!dbE],x|k8v]?qc;P5QF b10Op_UR"QoT[pM(M9$n"] Y@hS0>`'A \@\0m&4cC)a PMPggwq@*bl{WP(AQ5A/b(qxg`DQ Cd;Fx;2W0. qH'w$'K9q03FoR@b~8%Zs#p>֐$utj(+‡FtE6₴#SQh$hlMIēٓeHG)yY2]dFU!Iك+ 0ᑰQ~I>fIa &O QMmט#&{{BQF$ cQ!`.gg|4lReĀɔF2hy (Y*Xt7{U"(*P;ȉd B %Dj҄kmDUxKSFR(Nw-t r+bU3!MDxKP ] \ 6F ҁRNa+/, f x &yoFظrv OLZIXgYj?I5fyj-9~ ?$9: PZ(7v"˧m nR5||Zن7۹PMC-9KB&9ڥ>Gy>:! ,0@pH*\P-زaE!SǏ CTcIG\ɲ_,ftqběO>tɳgϓJ΍zLYSB՗-Ƥĩw^K=hϞ@[J5Jۻ-,_xLYܹ0+1ԩjF^2ȋ^ kNԲ煒Cm™SӵUEӦ'. 䭃'=~vpWoΪ1AµC%):۹ &x33fs{:{+'owwOD%ifd@1u~[-RmLq'G%u!`p qzY-u)DUP_m7z@RJ*@S`b1&f e}tCh&_v`zt DLـ*~LnOG)'vPv"@],A@LP2PIaHiR:[xiᅝl x=,,gH4q5#szߦtkv!OlPZ\<="yJ^2 uIJZaLt9tx)դ`9سBr>ԡ*/ATZX*Eo*HJ8B -t*H iT]-;'v3*Jk=@P-TzR}t Y^!Mpn҄ { ~{:`oRH[-}Bt)TjEAo3vC0%ܖ{r.*oZv` sdy;%(޻+Q4Yä́^7O8lY@8ST+rB3L1@%2ËJT Y;Z 5ǷA1TW)aJ'PNB宅.أL03 x#I iGe<},QrkX[½ӔxMD ǁޢSxCQ g c7 GqҦE&)XF3Dǖ8eLyT&>S+:%é{5}%=4LߘY+5/#,!۽BC*Dq=j EHl7S7X 6@`JRXІkN&c"š8GO{oR\*8WwوD7u:; b!:غ}83aME38oy%+)&xDt^ QOm@GC*P@̄{%UK]elTtYnaI\IeNt P 6E%D2*_˜ k=UGz n;:,ص:j'U t &~I: S5nZO:D{)_~I*7>θ*'dp8bx:WdU S5o 2 v!mh$e5LQKt ^` ^01"0PV0gb"4VT3,v /KFcP JFN(fp^ԁvDZyjyLGpJk]0#V6ILjF4IVHK TGsBBE|?f-05β'V((NZ*҆l(M2%0=]BQ#HSEQA.ArmGwju #g$N'R~zRtOF@x^zeOOІyH*tXԱtK%]8PLV剫QvEj9Do1j#S.kSD5V6Zpi%ku8SG]u tUXE-zi2s ,vX/GnW>UU89ղRIX -tl2RulRv*tSRL0Wue*WG^.&ŕTVjr.'yIuw@9I=Jw%`^+E%L@V D-|BւJ =mE Oy/,IQveDd hFY81$g)fL y2^|G9-)Six*Rx^ 2'aFF>təx&?dxc8tPb\~iBa ^@XUp PXW.vr?tcMP N$o"x2 8db'#:^JU^M`yDCg7td*KYLT @0ХM Y,e6U!XJ˧"q=g(cWsHl@2垿,#,Lא ցrr TIb'CKkXaY*GEwWS)6 lqv:$'a88GP$ 碐@!$ R~qVFH(w 0tWH98"?vQ\" + ix Q^ *u| T$h^t D|Z{r=< z :'P"\=X *fz)D`%k}  z*r%6gIVD2'"\`/ґ OxT djz `U֦ 1 i[cg[MN4 vkYJpj$y*Atn*I*oYE 'oI7#d D;TK7gxZ::~b! ,! ,! ,! ,! ,! ,! ,! ,! ,! ,;tweenr/man/figures/README-unnamed-chunk-4-1.png0000644000176200001440000006020713352423765020511 0ustar liggesusersPNG  IHDRz4iCCPkCGColorSpaceGenericRGB8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|U\ @IDATxSwiKJY"M)R "HP+| (x/4QP@EzQDHiν%fS IN߄93sb\EX@@@0C2  P>  a +7! @@hXI @@  @X@Mb  |@@*@VnC@ 3  Vаr  (@@ @@@  U4$  @g@@ a&1@@P>  a +7! @@hXI @@  @X@Mb  |@@*@VnC@ 3  Vаr  (@@ @@@  U4$  @g@@ a&1-[~_$W_}ջ+W?;:t{ &0K7oT XK Cn@8qB.]jo׮]غuw˕)֬Y3YfUVOhy믵[m`]RoN<)gΜB %K9"ҥ|%/; h$9M`޽ҴiSɖ-x&kݺ̚5˛QgnowhܸY_|=o4ܹ̙S/.y7xC|/{~ 2=3vX)\ ( Z:p@9zg$5_#?w!y䑸8Dž zMŹsL-뮻N)bʘ?kM7xڿ;޳ԩS~۳g@+@  `}IJD[tɜ92sLOeƌҲeK@JI].^h=h?KvYϪW{{p߾}7͔)lܸ</^,k֬ ͷY<رCjԨ!Oܹsnjr>k0yEˮ-Z`2j?9sxy =tRoE#})@ 3R#`[S/7`::G_W@ A'|bν`s_+Çi[nh/mhty饗L38G[N;ԧd7|SreرL4ɼրTJ.S|+%K4SJRx@ m^B妛nJo Z|n>^kiԨQ;}Ewޝ`۷{OjvM_}BiMn~E x\½{6uWtѾJ(a~jȧ0AA p >o@'JIn/ܱگwQ%cƌW=Ntjkg "=zΒ%w~"H,@ hb#e+f/ uw&>*TzJ|-))s)ɐ!dɒ%֯_/SNM 6K/$wyg DNr9{?^Ν;g/38qB?n'O}J5e˖Mfj: Vӧ7wXtF-}DzCi=t_OЩ1u%jKܧO)]to}$̜9Svc; QoyorAL76j;wn3Cg_/9s4.Uٞ'OdfϞ]r!hЩA#6:t  HZi V@Ёe˖ڵk+7zm4! `-g駟d֭?MЩõuL2QFRxqM+JCn)@NmB@GMc˖-&q˗rIZVxj& I &%z@*~+֭Fg~ё+WJ*I婧2ǒ .ZiOIA[l)~aJve@)̵esʕvZ3ojժ?,ƍs4A0ж @G%Z2su_2$uM7% 8R@\z,]T/_nZ:K(!5k֔{WF!P .q+V0tB҇s# `k/6Aptw}3|:=#G Fq)l-իgGs @e˼A6cNJ I*`Ԫ @P :pO>3f6u\J"l`r>@,q괂ӦM3۵kgԻ `GP;yFzȔ)SdҤIrEsoFJ.e/@uL @l"pOeĉf6moJI&) M;! :ݻw;#&L0ѣ\9s%ʙ@M 8V@͚5K6lhF+Ě5kdѢE-h8ഀ:)$ UN8a.7p<ә2eJ! 91  k.y7hv ~RZ5hpY@ \zx@Nɕ+OO K ZZ tʤ&MHMw^y饗PBv/G \O3!'@@o ?/GAɜ9s$cƌ+P> A`ҥѣGMKg˖-%]:.4SDhV*EBޛ]Os / > gIɦ68 Y-[e۶m&رO>"ul"TDtvMniܸ @tBi!6 IEM@ |X6o,Æ 9s'@ 4 +"!Go޽{VٳgKժUsb΂hu#\-p!y>}ȪU>fb  Lǁ &Ǎ'7|\}vԩD[Q)|DI@*:RMl2PUF>:Z@J) @jΝ;'<ԯ__v*+V L "-q @thsz~A (X\D@/pY3iwߕf͚?ΈI p >I6 Dzr-ȏ?HL,/@ 嫈 "CԩSeҼy`s @! ժU3w2VOO{>SJ ?74#  'O|@ \p< @h|p;vuԱO)e -[gϞ__] ,(J2Sl$, +piiժ|嗲ajJ @5Ʉ?ciӦ>/w}f}F$ };v0e˖> }l1dΝҫW/޽ڵ3#4i"S@ EsΕ5kwyG2eʔ #`tҾ}{ɖ-HNf6mnZvޝ`o@-+H=d#ػ0 .%KxZ/.zH"x `S .~:hRzul# n>~Tx[x#GK+Z;@Q-ZT6lh"t~єL`O., a9sիnΉ9 XN j>}HҥS zRrG2Sy9+pEy衇dϞ=*Tܮs2d@ 2w~ L&H"*`7nΝ;'|fƌ]3ϟQ\GH(τ6CI @kԨ!+WL,Y" Nv?v@ՓaÆIÓ( %lw }ACC}{x;wLoIu28L`Rn].Rz-`TGKn޼Yz!]t+W\U 4  uV}SZ@ 4ݟ~i\=\#kճwޖ#B F 'N JVdQQ&  +gE%piܸh{;), A K.I֭zoxV$)@$ @p\ ';@#`y@C@ !um"xW4K˗/̙3[+s,-@j!s 5&O,eՒ;wnkf\!e@-[5d ܹseРA-qqq$BK Zz `-M6RdIke mo" @d8 ͚5qw̐:ZG@:uJy'͝“* @ FkR.@ H/_6׬YSrpk#)xE3fL f@ y!%o c^{5YnX TРrr2@ ztQFڵk%k֬S0J x@z[n]ٳH" 9B[ G@ ҼysyץzO3"@[ҥKf{VSNo D br*@:g̙eĈv/ G •C@p ?^/^lKGD8I  :)/ G@G?sj*ə3=XO?qgə@[ >|^ߗ%Jز d%@j" @PtQ6mGf͚ܜ HJ4)#0`dϞ]y""Uj  @N*lذAbbbœ:!@\+eի,]TrX |dISe˖[n喈僄@έ{JxᇥAҶm[ Pl#]Q?رCLTI H(@Ѓw @ |fի%666jI@Qu ^'S>}! f'OJ֭E[@K*IH(`o͛veΜ9Rxq)PYJY|y’p@nݤiӦfy3PtP_qˆp͚5C'#GQFI5jDj@ hݻw믿ٌ: ?MٳMƏ/  L3doqcFxN8Qj׮Me#ظq 2D>1XNv-ׯ&Mx!?.w7lh߾/  TgϚFm)9Ձr#lVXQO.ϟ7um \ו.K͛'ʕ89B$зo_;]vaJd@ E3<#5jԐeJ:u䡇9rH|||Wrʔ) ef͒ ͛dAvhbo^zI:v옠pz뭦UTU@iݻܹs͠L"l*i壏>1cȞ={DlO8!qqqr 7H2e/O@\rE:t O=TV-)pJ@  @=֩QjU*d]ǎ'3gPݙ@0 1BbbbD+ Vuz-ԢEJÆ eڴim+V0jCv_5Z"YBtĻ.ƘF@ Q\KN5+Hn;]rHlG ;w\zaK@6:thS`РA;Pѣ>}zɛ7ս t%K̙3e˖-A?7'DB!`NB:];/^\2e$7r%*U~ӧC9@K ]v &Hܹ-72$%`}IZ(6mH%L˧:-ӌ3LkŋdɒI [A, ]l9Ҵ|.ZHbcc:>\6m*'O!C݇ nGWM6ٽ(&`K:HΝ >2fh.I͟?aIq@)={ʇ~(YfuJ)'DP疛ת_pk6@|Cۖ#slw }AC̜wS.kн{J||^gAM`ԩm6Oh"`rʲyf.]D{xiР,X@ԩx@[ sO<|f[#cljM*UJt }۵ŋ'E1-Q Q-ЫW/ǽZjQ]N -`S%:`A]@G@I&E{Q)D(x~<Ǚ3g `Gۍ#2yF*>۵kga\DZ sǥPBWU} J @tN8Ͻރgʙ@ ɶ|-ZKݺuG~w`% @N>m.޳dɒsq0 `-ϟ7w/#GΝ;{Ig%?̙Sɓ`o@#0x`ѩ j&Mٳ%C s|sVZsqk@ hiӦ֭[{bΆDXoy֭ykx*#t9w,Xkז={!$Dի;\M4 NСCTK+V X1cFiذ\L N@cNiРAdo@ ^_tK2gϞ] "@ 7n'ʏ?>-˖-5kJ̙YbO^ׁJ,  h~X^}U?=@(ʕ+E,u7 ~P-m&۷oAYfoL)  N8!}O?Tt*;@1.Ç>ʖ-4%E>:ߨQzZDʅAҥΝ[z H4qt;ns?\{G"Hq Eɓ̖-[PI@h; > F@H wUnݺ #RAf@ Z-Z$_}OR$ʁM Z@Ϝ9mAD ӧ6}ɞ={8@ j*)N, @$~iiذyD2XUv_{5ٻw_m۶l׹Luw_V"Лt|z.D]w'|"y… ',ŋ.M!666v Qz {Orʤ87 `kRbE>|tW9]$ۇFo֟I2mx i޼4jȶe  @8lTgyF-[&^z" @ )Yfʕ+E \[v8UT 6H LIco:uJ2d ^r{^\6"o>0`y#cƌ)5D.`>hѢҥKvjĉEH{]V~ǫg8C@Pر bAg ⋒9sf33(5 @\OL0tīxE`ժUfM$&&&($ l}1uѱcǜTo"$p y> F($[dRxqɔ)/_>sJ*#>}5C@=z{Lf )@Nkժe.{iFJ(!y5tϞ=ӡ̜9S/^,%KA5ER֭Cv# `Y#G4--XzMɓeȐ!~a% ;wJ͔K:@ p]߸qt9S)t %>e8ŋMO|,@ .Q\2ْ/YD .~$'зo_)V{r@ y]o߾hz!СҥKgFݻWeܹY@L>]͛'}ZNñ > @+W,7ow:w Ȃ N:>E% :]v?._}̙3u7 @ @$J2#/\ m>ZqqqRHQ@ -n dr*EH$`STQ} ~K6-@ ٯ_??"&@G!m&[ӧY|X6m*ԭ[ @mTYd8}4kLv*zw@ ZN(pZjsxCh9?Eʕ+ұcGɛ7QX%@!x [mΛ7OҥokA|@}5xx饗dʕfX[L#N uRmSVPߗ &ȪU$gΜQXBDh)%B1~ @)7E.@j$8T`֬YҿYl(Q¡ =\#hK=d…RlYG[Px@v5򌀃:u/B*U` WJ[w ,^Xڴic~w8Z@&)Q.0}tydƍ|Fy]S<~Z@)!XfK,YBiڤ P˕d;wNE2ydW C@-P!%srw;$K.]=H`&&M(d@Z @u ,+& #G]w%o6~+{h٨Q#"\Kvƍ'7P_|QyӧȑVk6ҥKm۶GIÆ mk RKdСC裏J…A)-?!t~χzHfΜinX,{d@ gF&.aä]vҺukټysͼGL:U~a7o ," .Es1}rRn]S -{I߾}UVvf @lj{NLbϐ!h /vkѣM˗K ,S  \IOBtǥ`~SXv:tȌCWOFիLsgРA檆p}Y@_v˗+zv,&pEsΝb ɛ7rHv@B%`49E[Mܮ Ϛ5K%X͞={D8i:-piiժƚ>%  s6yAK.ꚬ_L>=|A)RH$ЛG\ժUcJt늞@CH@:7h K\D-Yf5Mn?#۶mf͚|}ٿ7 @Q@uѣG%}!sGM`ɒ%fޑ#G&A~@.`k_J%SL?~ɗ/iTO XC@n+3f F @ k[q֪UKmڴ%JO}1A#[x,Y2$ ŀdٲrJ)U9(; l;m\hA&.M6ɓ'ː!C:3g_Nt^:I>{x;wL[X^#@hom|jY@'`rʲyfѣM{ʕՠAY`ԩSm@ hOudRP'@FvHZ~ٿiJři( G-[Jݺuo1S'eRA-P(SxDxF 'N˛o);v o⤆ `[[U'\ٳҫW/3˥\r6/GF@j{jD_kOϫX pmk|Ǝ+k6'M$YfK@R&%98rtM~wYji @hM!g@ tb+-B5M@ >kRBV:h2k,6mnY@ j٪!cDN@?47~~, K`Ir@@[=F3gΔDŽ-IDATKf͢T@jZFXri#T$8@PT2EDZz}yka @ ( `O>Hʗ//zڳ 5 `KZ@mYmd ݻWw.ٳg; @hM{"`{s / UVƍw}GiZ @WgO.eʔY6n(t.B@ -\O"`޻wo3g||<۠" F{ S> }{)Փx\ngBy~(8 `)PKUA O^*T 9r۷c=r@  iK.yI.w^s~|6BoΝ;c׮]O?֭[ExRBsfN}Y@@ @+WlZza.$϶wN:7:qA(ӠRˎ;$W\RT)馛SNR\9)]~a"=@/`TkLᮗ\5(EG,I"ED[DY#A)y|<~3hѢfnM]5j >L@+`íyzǟsٳgC렞SNngݦ'=#믿^o蠟[nE *dx>:})gA@K :@2dHd_;:٦ծzOO.QfYuׇu:!4׉=Y-9r0> ,hZ*5}hЙ'O`@P @nÆ eڴii=Nܢk`.gU[u gSiPt>>|_{ u>kYJi4g}q,  @(b܁Bq3Rt   ulj|Q—7o^Ȓ@@ċ/n.kTTIgXd@pZ@u>Zj>mڴ틩-gرcf3f>:UN  `{6X\hQבM65kr/x|   `lw ~ƍ:R;EGxwUϟ.G@Pʕ+Zd,  <۷ B6:t0}׬Y#v1AAuF ]+f:'aÆަ9z--[$sf9g׫z^x!z][G*U<|7oPߎ<6ٲebڮl~nGsϜ9#Fefh#Ρb:iN @mjOs_ȸqdΜ9i?gwRPM`Ȑ!?|NA8xTRE~]EZ~24n|j! DD4"$ 8WԹuO@@FD@@ :)9  Ј(  \P=%G@""@vE@+DSN*,Rغu.] w=#+paG6#@ҥKc)W\q'_|#GgxO@@ \2i  x@@@h8I@@+@  @8@áL  ^P//@@!@e@@ z)x  p(  WK @@pC' .e/9&egf/@W\ Z7!@q\ cR=ϝ;T% @Ä?i$[d͚UnvYlY)ҡCɓ'(QB^|da bO?=#9s4YjUYpafk >}Z(KyJ˖-?1Ϝ9#%K޽{u.ߥUV/_>)^ 0@8p @ g4:tIƌL2GyNs>Rt@~Rtb+䎮YB,_2e3frӕ9sfצMLr|еaׄ \K/%y R';r.\um]_}Yf.K];I>}ػOJ\+Wv0;wnuo-kҴiSqzW1Guy"p@-2vXV7aU_4u\@3Ͽ,G_\<>:uJ~a5jn+S/wɓm۶8jw@* E.[0DA^xn8W}eLVX!?}SRoovyMڱcI}6AJȑ#T;wc$ڟ%//e޽RzuռP@7A)ڡC|W]KΝƊ ]-"SN5ThxϮKp?c 4H.]jx믿k׮gmؾ}hRJ@~Rzn+JƼh.._lVmɓW;wn[r?‰{0u3e#~k2m4ٲeKCy@˴EM`9s^Zڷo/: 3Wq"3:FJʕ+' oS!FϐI5_potDbc+V,6ޤN 2랆)Abz.m\I7{%3{MUԮw6O'ț1Z@TPBF~R~}uh6,:X[dIs :hLg'8|^X+AN$-E u6e}%x.]uE]W|O ;07+?;O%26E&iL52?9+U=f3ftNÇvB:g:16s曞]xN@J\ϱg=Y=yNwٔ)SgϚD#z];~?qs/˻tI$&w}E?~7Л9̄gx7 e|e)mJ|;g"0Ԛ~ɺ٘K'svI)q ֹ[IzNݽ{wMrk׮5{gYyuҞ;A5jc ^$\:vP_NwYMy;(oO s{"I])jogO;  W $.K骓pEc 8|UV^ZKQڟm8f:Bo}M<|Y=dWĚ FiݸH&!&}p8-  !wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@@ wa-  @@Ci@[l:uͬC!@j  u@S@p#B"UV^-~رC7n,sJ*ɧ~j,/@ i& @'OK&M$..NF%Yf֭[ݻ?1G" p5p咞={ʄ 䡇ӧ[h3(%8NqUN@ufH"9sfQ@ @V)NKL2ɕ+W  -Rl-s N uJMSN@@" 8E)5M9@@ĸpY$/d@@:)"  `%P+yA@ @J  @T@p*"" V Rm@@d XIJA^@@:)"  `%P+yA@ @J  @T@p*"" V Rm@@d XIJA^@@:)"  `%P+yA@ @J  @T@p*"" V Rm@@d XIKӰIENDB`tweenr/man/figures/logo.png0000644000176200001440000006324713214437207015462 0ustar liggesusersPNG  IHDRyXiCCPsRGB IEC61966-2.1(uKBA?jabP$]@B >jAנ үCu :AQt\ԥ5O%rwgYJAoAXҢ!\|m EWG#0 ^nZTZW"pa d8%(&kLtkǮd[US=v~ozJ'r}{{|ڽ3.ii~"/!xcڷ'7H[FûqصM{Y_-OKv}vX궫E"}_-]\xL. !wh0#R<kK|p)Ϯ ƶ0 'ӏV'ڟ{GN%;z8hT EUyi+/I?~8ш@OHM:ygsϽQm=/Ci9WySZ_~[޴_x>s>?^}-o Á}ɑm?2 g}>? N;_}S{N/,n|}pxUH𗟼әǎto'r8q*ص|瞓)˿;%{=b,ɑCJdJ3b8"$S*RӅ ۻz~ߕ?o}]687=ǧFHrh{ 3糜|+WU;ڟd|,мӅ'Ϥ9u6CDL}≵xXNJ~3SsJvM>k"ֽ,O_%}~$ $'-+uNIslť|^we1b1dRm}vR~¥C|':s,fx0#SGdU"%.^.{#!OO7 3粜B O1q`Fg2xx}+$xL%wG杖+\Uؿ' ox0Lvl?}a?L||txM n{>YX쌙^Ub8ض5J8̏\#+زDK2{FWPdr ϫ^>( \mؑ>ge\-~b* pPl}d[IxCS있"_8y&3iVx>W&PIƼ$MƼCl!W֔d ڳv{0wރ,/Vħ/u4 e[CxɕgoiB?%{=b<~Lxנ&f,Ap3JwKj* T(iskvb6ٜ25E 23Qxص#JK:ekC-c-T-mOg.ӀHw%+{wrH\(ߚӟTsh TĢk KyNNsZ9"aCJUNYJ\T֟,{}ny  5_+c͘pzx|?}z;|󎭣/>XOO\"8/Iz׋>anJ0!kfq/,֌ jTku[(])om^~EFC{&طm̥S7?w\wO٣u.:5ul]K256mcݼ;PWT{s >JPdC.i6!fs0l4ݦ01͵'li8O o=P6AnÃA2+ 箶ܜtc{x۷aӴ9~2}Lc)QRޏ~m0MΕ.>yqRV%Voezw0 #xy[#!LsJ-aB|MaaYF. wrɼ_p0lsWn~ail wkµn?gWҍ~h? ;]w݉* WƷg'9T;ps©[~~Y cr[8շn'RO\"1t _i| qm=\ͽAw})*UW7n FH}/Upѡ,iS3%4~Rx"%4]}n6 T3Y /f =~~GXǗw UQo-*%_`xȅH5+ߟi驷T#=D &~1`Utwxכs yp8{P7v'귦Y\{}G3;a lc,L.nHF"vY\19]py<"' I"K+5fJ󆂞]Ǣ\[֞7 V95/B!R7:Y$ko`Le2$oF0Bl:~2ٜ۷H7ɿo{ˡ=z._m|^0-T|A aO1=S&_hDWwPUmcamk/֎]f~йÒo9%CW3|h4,sZK*XR5g7G^1/I\S/ihù n0V8zǁ㧖)nĖ0AEkSE %m~EEvnӓS+}dYdaLlGw#aD`YպAotaO}* ^6KDz&#CA~=Iptßغ.p_#_x6<J r>ŧX}dqӓn{"'W_XnaXfasExumYoh у X<&+9&O()0Fdr Q/Ar,I%|7 @flǥe \Q5Q"l+y]/k욈ӥ[^/pcxPP72]ٿ>|^>;] G <0sܜY+Oe$Ï/mG^tWш73 E/Xc Iw *|_: (oWm1\+pb#ɒP;(ū9(2 dzlu4"EgˤuWt " pBseY mJyݾsL`#|y>G8q:/d˷y =A&J1;Mo<4KA;n륧C,/VOzHļCؓ| xDMѕqp֍SI?F#Le,I}$c^B!rY'opfqSPA#KH|_&I"Zh͹#a>O]αmԭ_ɑ/jLٙ`fl#eru%hD.|;3U#50ɸU5WjòBACy"x$,n)oUh[膵 n`O rd7sXxS il2K5laf%UpZe8+^:׿=:#m_ͿT7;*Jђ=QkMc9r U[ut'Ik}AN78qfÑD sfD GmfPo+:$қ1D)T6Ͱ6Ňh+9vٷ3ًWޞzx-rf 7 ɩ"SER C!n۟BmnΕYNپ5JO*t%}gyΓpl|A޶O2/L>#,ݵk9c#Ό+cb<ƅ92M2/zA՚wٻ30W& ,,Uٳ#A2&8A*'8`(ȒbaYH, ,(״1Mr'3?J>Jԥ,Xbt0ľI:'ltN:[ǫJ 7땱,bIgd(ޝqNoO:СY)ߓ Ug.,I)iۻ+e9\j˚oY[4m.^ęeq//D*黥f*zÃkk(kGn;O侞̉1$Ih%\)dswއa؈ L U&_/yevfv.ȉ%|ĝ.,rjbI.Ķ/VCD 𪑎KaG}z%7uG7lL$Ię4/Q( Bp]fVvv7-K5edGo IoWTGRC+7't lt|QY1[ "WhniS(kL͕E-a +TFnV<"} (wg5;OYTh-4b O +Llv|܅'Ϧx:GyZ%oҘH%v|a sRu*"3<$8JHHp^U"RYɺJnwӒ$e(JFf0ΫZH}ģ6. T+4MӎUQ/TG2# { Bed uϖ0L0}g-517 <͹KYLv G80Paf,-Tlf7nXN95!`U3sKwW[I<,ژXhf$ h/AOWK9; %I6֜J-IYֱ,M ֡f3Z7$Qֿ>Up\lz<"Pk+:btNP'Sh+6(5Uj ShNr ""Aw >Lʍ[Ȓ{WrTvX]]f.x)ҶK:?v$fVHWG6ha(kG|Acnޝ \^N Ur2Yh᭒ҥ;Vtne(BS%1/JJ:\b`vbaڤuVru2aSlN>~HP!RUb!w\(H@rFOO$ֺ\lA*%" Н/hJ:[Gq._˓+h؝d$Rݕ *iox(`@kEUrOADe] z8/EMWʓ$q#R(WprU0[nzaʖ0IO-#I"TƷgeю/IgW|ҵgWǁ rq[IԹ4l㈒%4+Vj%MrύOt"iSm>V KH&(y(5lZNn8, Fq6e=њ~|k7=WkfҵkGAp)]5T5OR3M,ZY$_Az,k-7m8fTF& wAUbTr `;n߫HkifEr]57QfRhWDp%f{ݙ`o*LdId%B(Slt<ŕ&{u߃m;-T:\9ex Jq߾I&1:jyU @oM51=;4ɸ_fiΣOMcLA gBa^U"T0MwFjlz>L$ UJUUTխu=RE'w3%~upd:[Y!vD\h2os.dMڰ |kSh_9`處x K.'2uĎmQuo?8Qb$ W;M}\1旪ݤn*Yj)Cl1M#!acke:fi94t7MY$Aа#햢MvgI:JQpCF2|Qñ4E}^t p;Sb6'ΤI%|li;ۥP7Q`TA=fg.kڨu19A$I+T5G:Bcz<"i *:ѐBC{5ZTj5ELv\Zm;覻|Ƈ|LL<&y")Uu!rUG7\dUmExMnΗGʲ؜'.\+/j=Խu[2OXFfJn3eYdxBQ'R,oTkƆNĖ5%w5!ȡ BӲXuMr3 EA5jSf&nB%BK.ϫ0q-Z׭P8lQvJlS 6^Ubq,CݛpcК%FB ҂4j= X[d;O\!s{lmzF7Wr[cb|keƅ+y{XWz5j5xnܸYnɫ>k&Bn*P(k@ K"k7_&U\l҄YexE)5!AbEǴlͅWEA\ 5JlY3"j5C ㆓j \qi.9[fqơ)[vpZiϪ7r7zot\1;17 \֋ky*j\0uLI\HV RpcU, 5"!<;^'U+#5\ vjq7 UZ a텈aK|"R/-AD LB^VihQGYn$ Զ 9eQI:}$Jj%bmPH$^2ن˟ 6n[BIc?At72־b[KWB$A?5 [ZiR?FkǾ XF>6Z7Ԥ0=4<=qe.!CaReWp*8L2PvCRrDv/!5.IW&m(dY\띙/3:"Q[={p1%L$p913cxöOs{{\8s~ 7M{r63W7ZN%3ڤb pdwjg~_w3()>AcBR5A"k9zFuQZ`{bin8F@uR%}wk7Ib]6/A lY嵎xNfKܗ}s|Y,J$ȂGeNR / ^/K~sBYסa$m]wc+6rF[k0@UyÜ^ zv_6"ʭe*XZ&F *c;}%ZDuH4sehTk&qǵLr_nRY<[n@mpMTŲ~MKebIgh š^ $9!_33WX#mfaQM4A`4qlSUR{9²?HW(X]ڃ+yOQ#f&`qN\RB#kڎ1s,rb<AP+;ܿL6 ,Mi3seFCDJk Zi5BΚ;Z}ز2;nIը^hfuW%א* VEze*e-͒M@zqp'C225:`p] nu }AFÌoZJ|MatWLV ]vYFyF"l@X\5)HD5:iñ֬Sޡ̢v4c,M^nFaixmnWgxuvJx G5r$^(2֎WEhlyF~X}eZ3x e,֒1P^,T>q`jc[l XDѱ~T].(ҦmIh&={A8fY:% eH Xa- Ջe;cJaв m Ģ~F$p$_dp)Cw/I &l)W*BbZONHX7JW.A0MY {bs.\N]Ez* .ynqJ_Ǝ&x"͇_d-\Mҗ%]skwEIx$aLfW{Yc)*ekDDҡ UdqqSl զܚE_[Jd/智YbnʁI._oXff˚lft՚G йi\A_w:.HDִd.#I._A= !4+Qxcd\,B8L4:`] Brg[E(tSJ-Dm1%ݥl?/FvKh]#\2  45@mBRHaX8^"D0ņ |!/K>6R$XZ(3>b6i)!kf. K5wr@];8SrnnWKɫ)˛[:ۺqsn43_a8=]~h0Y!G|4T%h։GzŘs},j%\A"%RDDKlx ؠ[ȒGvRV} WEj5c;x\#,JYR,%*K1"# 芟'"6e4A &*TɩL ܚTM鷦iTe׎ш4k׋9&śm:vGϭ]p%GbpPWǴ|AҜ~^W.9Ʊ)t*~qˡUd ^Uj^ꑰmEܟDEh-{dmZ.qGD-$Y[-nҤ#Ю 0$P] (suM~M!ڌx*BHX!|x%ikL[XrK^U4fdh#V nv u3f* 4jM +Ime;\Q`?Ԫ3ဂWTuDQīlqIF8~|KݕE֜!6jfk%E]$" mOze:;)@ւ/M]$sx43_Ft|-vU+ssΜ3KbɶHX@J 8@HH{{KoBPHM[O Ò&%iH!ƛlYk׌F3>;H $Ax$|~}A|G/ Mx p(;4/BШYD9H0=J2 (y^x >rpCSIʄ' C5ӷͬf:y$f&+ 2fp5Ĩdr:&-,~CXqdX$O!rS 8 kP)eaiւyD=c,DH4s%9BVE]W+ZF[EI6_,O)y)XI,^\(hd%p2hBөYĒCTi[J]F<_\NbT #+89S$tryDRErnSH 9#~ÊY3+$-d1+puM5+7WHxI’Mwta+0A`3+Q.X a(Q,ː͕%R1g˄B\F6On J.C.Ohn|iK$|r*>T6%i!J.%"CiSKz-TP1&\䱓kMԖ:: CcrK:Lv+8ATF0Te| IDATRI؟]ZIM#7D(2"S.iT@|,(BCdVȠ٬ CA sNB:5TBYi*SE&XrV3 QOt{ '_vp4CKs qe]$ylYW\ -8^] GsAOΞHt9h,щ TJX i*]? $B$RTT^`Y 9#Qo(LR54%-fgKH&$Ld|4fil߫ݪmVi[9|/q6֝GVH˨X,?Z@*]RZhۛ@Ciai# V:Z RɷF6WDKPSRT\[N r8\%׏0R"Chi!nor@ql&F4AcU0 EDHAAD`v1űDDx 'TD2]@*M%:-YI>T63ae4V\N Z- 6xfr%r,cP @M`F NÑkd~Rknji6:x D8ԺpBlc-Wb+)[J c{Igғ`gs%:$.ha9Qx"%Z[l4*mzur$08ŠZI Z9LzEY^A`AdEOf@RU*hl j K+ fT`M&?7,2դ|ӥ14.v`ۈL kG(ylZj,I*|_Ni+*A`̪$jAiN:MU/Iƶ3d De_ Mz#uP/¢7VFͥ٠D4C(P)Y0 EMijF'""j ryc(2Y*e, J6 8E]fQ"Un>xa²T*Cfqeh /*M]Kcitw%ppyYSy3^:%BCVIrQf1rr9lh+z24֨GguvPycY̹cddOഩ`cEY}i-4P*d𭥰$N r,F I:Jb`jio2U26%Elf%޷,(yhSbs|v/=j",&Sά _|jX0ؿLiW4H_KcQKg J`Z^K39SDM] R _C}V$S방*n^I`r6ϊt]F485(I*/ͥGsv5+ I Zt(Ir%(J: qIu2 N LMyIp`x?l=FLF15(@f {:EQ5!KY"."bxE|y4?ډf^;|}&ڱ^<* YIa'8r\RPk`qGrAVETrr9׏P(q\xc'u఩_Edl,B5 Y{W7`6SUA| ?`o͉tѪC̣Q`G*]ӫhphf@X䭅2(xu%Ka]%]!e(֭~6?o_cY"EA.R)ְHDָģb28^ˡIl!BYuH1huWqIa; &7dD8^/W'Vuغy DJ >mzg'$j(ᖛZp3K:9#-bѓҦ' +ǗZ(#."qbbnj\\ŕg(P!J()R[Tۚ K\1Vku2.J 38u6:C-1>Pz˯{$n Ͽx6 oJ)Aaŗ Ǻ$=͢ğ~f-M{;_lRAQc:=02{%&څmU{>Q~DMĉ18.Fҥ<J%l3EēyDb9i)DbH '*Zg0E zGGWq\}&7qb4 5[+H+լ@_6mgzMׅ7b+_2x2o"V08@_(n@._F.[DqēM twL;2t*}Duv! UE)6HVLդêBCz-r2q_F:SB$j JBLd5E!#FKdul!#gυ1B!h>G !&8*)O(b904~X- \qSaUǁ^; 8q*Ewu-d) nBYvs+Y6y%e {^J48y&@οV)h,]Ztiן‚;!^eLL[MEZ\:aǮ[6ŢZ㉼ǸP+einU/Ð}ťC6WɠP65c5ɱT4균ɥgw6Vᬪq9zWA) 7\C_xSU,=Sac[cgC[O8Gnn|;:;_M_>0Kct44}0۔*>hUW:dyiA+Tj[t'נӀ(6\uh5jVҘH\I0ވ#/AwF˾ph'gF\uZe.bniP+^<(dk_'3q-Jx})@HHHMZ0hnԢA(tZ5 sa/`6làó܆fFuvoH}~'Ҹ ~:Rp2ϖj^'wCb񏏟tuߏB`p==FqqTpjn>~ˣ?=!LKCg?znlic>`2 ^sњ1C m*L /ai9^34|d?"<$" DF[4NLjԩaˑHUpH U9Z .:[ G85UvⷸI UA׼5篸 YƒlP]van!^`3qSN!Ӟ^9^;t"kI9ʙ-]IL.:\fKZ?ʞ?pѥޞaU;y|cRщV=‘)WӸ|q/g{M,K#QQQ! e#Y"Y>!cM.-ZuIqdޡJ2*DGwʼnk[6-4/@n d4=}%֓^(pi!+˩[;LuF|ٮ6sw:_*Píؽӆl'<nzd2%%wExP+_ْg c(Ӓ1ڥELa5+kȊtc'Wgm ZqL,,bߌ;xe/^{&^V׼F޹x~~Xx Aitir="<2> 7^߈r TxuR ϡ|A.I%%Sē@p;^Uhգ7ЖgoWW!ӵ jono-_t646hC&c{0dKM@&?r*{+[2բ׽m:2̓+ x0?hLFVp* 8Zy;(\'lTK}PESdp{[UKY_Qe_ Z4jE$ͦTo|k;̛6o6_jj<{uH;7ÿ<>s՜&FDojAߞCi"4c6*`2a3+r҇P,o}ʅh,_n 5ikqt7,E`(m@o7q'ң ,V4t=FǗ[ꑧ=~[Aq]_`oQ|{|4Bj& ]7(H(D"\Zl*oSEkT"@7T,lf%yU$bG<#XDP*C^BTdp﵁?E7&,&9vj84MAQhk]ՏOFV'w~+OvsQ,w>8EC$ zsB}0 cٛŬ'EwRAoXm'*fVE(:CQ LG2B9.X*XXJ@q)q\'Nhx~]tܻ{jyk뷦p*ɔ{KXV󋘚.ڿ]TF7Vk2X-*RaVUS'؁g.Q|xn=EKX"=}&$(K6,364j!MrXLBKҴ~6Q, g g LjPcz)+pb4ScALr |cTpbn!~ˣ?=Nwv-_q۶~;zW3,<{M[8F*UĊ?Uz1AQ$I-"/IA RPcxP2b= ˞ NΏC׻왹Xtlw߱7w!p&w[b&Tŏî=wvC˕0>ߛ}ԛ)!|*FyC]:]x*ů7&ii"ա3Epb4Ew;ؿ]2c'7hۦF "ҩv3!%M槒ԬNTa߄C'Po # UDhmY܉ӡ{xIDAT_& .Z_߳vA/Hy AXXJHA IP4*htsЂ*bd4-~p5u. xמ~3\yxσ,_W<{غG+idR% eqlh43DPaGbp$ئRE:hKyۡ|^tbc'G<[ꑧ[仇_ ?zm_`_.]0C$dOG~z"wAŇ`zI0Ӱ9d` YFNM)l3:wс߹A*EN"cgßzO~⽳wQAHht dS,x9D"9reM02lW* 7} .5&L؉EϽȋ߸ MmaD\,8r6B0ÂORf8r<7uc}wAqoz}M5B}D7v+<z/W7>"ݾwMZ5 HcnK:@XnmÇoZ/E.,&Rc?}<\;ߚ Dj1+e.' 9 Nㅗ%Pp5N G e?^"/&~,_t5gضWT'1>A_B)P(艵##Ok'[d_G6\%} \title{Objects exported from other packages} \keyword{internal} \description{ These objects are imported from other packages. Follow the links below to see their documentation. \describe{ \item{magrittr}{\code{\link[magrittr]{\%>\%}}} }} tweenr/man/tween_state.Rd0000644000176200001440000001245013346027016015146 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/tween_state.R \name{tween_state} \alias{tween_state} \alias{keep_state} \alias{open_state} \alias{close_state} \title{Compose tweening between states} \usage{ tween_state(.data, to, ease, nframes, id = NULL, enter = NULL, exit = NULL) keep_state(.data, nframes) open_state(.data, ease, nframes, enter) close_state(.data, ease, nframes, exit) } \arguments{ \item{.data}{A data.frame to start from. If \code{.data} is the result of a prior tween, only the last frame will be used for the tween. The new tween will then be added to the prior tween} \item{to}{A data.frame to end at. It must contain the same columns as .data (exluding \code{.frame})} \item{ease}{The easing function to use. Either a single string or one for each column in the data set.} \item{nframes}{The number of frames to calculate for the tween} \item{id}{The column to match observations on. If \code{NULL} observations will be matched by position. See the \emph{Match, Enter, and Exit} section for more information.} \item{enter, exit}{functions that calculate a start state for new observations that appear in \code{to} or an end state for observations that are not present in \code{to}. If \code{NULL} the new/old observations will not be part of the tween. The function gets a data.frame with either the start state of the exiting observations, or the end state of the entering observations and must return a modified version of that data.frame. See the \emph{Match, Enter, and Exit} section for more information.} } \value{ A data.frame containing all the intermediary states in the tween, each state will be enumerated by the \code{.frame} column } \description{ The \code{tween_state()} is a counterpart to \code{tween_states()} that is aimed at letting you gradually build up a scene by composing state changes one by one. This setup lets you take more control over each state change and allows you to work with datasets with uneven number of rows, flexibly specifying what should happen with entering and exiting data. \code{keep_state()} is a simpel helper for letting you pause at a state. \code{open_state()} is a shortcut from tweening from an empty dataset with a given \code{enter()} function while \code{close_state()} is the same but will instead tween into an empty dataset with a given \code{exit()} function. } \section{Match, Enter, and Exit}{ When there are discrepancies between the two states to tweeen between you need a way to resolve the discrepancy before calculating the intermediary states. With discrepancies we mean that some data points are present in the start state and not in the end state, and/or some are present in the end state but not in the start state. A simple example is that the start state contains 100 rows and the end state contains 70. There are 30 missing rows that we need to do something about before we can calculate the tween. \strong{Making pairs} The first question to answer is "How do we know which observations are disappearing (\emph{exiting}) and/or appearing (\emph{entering})?". This is done with the \code{id} argument which should give a column name to match rows between the two states on. If \code{id = NULL} the rows will be matched by position (in the above example the last 30 rows in the start state will be entering). The \code{id} column must only contain unique values in order to work. \strong{Making up states} Once the rows in each state has been paired you'll end up with three sets of data. One containing rows that is present in both the start and end state, one containing rows only present in the start state, and one only containing rows present in the end state. The first group is easy - here you just tween between each rows - but for the other two we'll need some state to start or end the tween with. This is really the purpose of the \code{enter} and \code{exit} functions. They take a data frame containing the subset of data that has not been matched and must return a new data frame giving the state that these rows must be tweened from/into. A simple example could be an \code{enter} function that sets the variable giving the opacity in the plot to 0 - this will make the new points fade into view during the transition. \strong{Ignoring discrepancies} The default values for \code{enter} and \code{exit} is \code{NULL}. This value indicate that non-matching rows should simply be ignored for the transition and simply appear in the last frame of the tween. This is the default. } \examples{ data1 <- data.frame( x = 1:20, y = 0, colour = 'forestgreen', stringsAsFactors = FALSE ) data2 <- data1 data2$x <- 20:1 data2$y <- 1 data <- data1 \%>\% tween_state(data2, 'linear', 50) \%>\% keep_state(20) \%>\% tween_state(data1, 'bounce-out', 50) # Using enter and exit (made up numbers) df1 <- data.frame( country = c('Denmark', 'Sweden', 'Norway'), population = c(5e6, 10e6, 3.5e6) ) df2 <- data.frame( country = c('Denmark', 'Sweden', 'Norway', 'Finland'), population = c(6e6, 10.5e6, 4e6, 3e6) ) df3 <- data.frame( country = c('Denmark', 'Norway'), population = c(10e6, 6e6) ) to_zero <- function(x) { x$population <- 0 x } pop_devel <- df1 \%>\% tween_state(df2, 'cubic-in-out', 50, id = country, enter = to_zero) \%>\% tween_state(df3, 'cubic-in-out', 50, id = country, enter = to_zero, exit = to_zero) } tweenr/man/tween_appear.Rd0000644000176200001440000000327113343231165015276 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/tween_appear.R \name{tween_appear} \alias{tween_appear} \title{Tween a data.frame of appearances} \usage{ tween_appear(data, time, timerange, nframes) } \arguments{ \item{data}{A data.frame to tween} \item{time}{The name of the column that holds the time dimension. This does not need to hold time data in the strictest sence - any numerical type will do} \item{timerange}{The range of time to create the tween for. If missing it will defaults to the range of the time column} \item{nframes}{The number of frames to create for the tween. If missing it will create a frame for each full unit in \code{timerange} (e.g. \code{timerange = c(1, 10)} will give \code{nframes = 10})} } \value{ A data.frame as \code{data} but repeated \code{nframes} times and with the additional columns \code{.age} and \code{.frame} } \description{ This function is intended for use when you have a data.frame of events at different time points. This could be the appearance of an observation for example. This function replicates your data \code{nframes} times and calculates the duration of each frame. At each frame each row is assigned an age based on the progression of frames and the entry point of in time for that row. A negative age means that the row has not appeared yet. } \examples{ data <- data.frame( x = rnorm(100), y = rnorm(100), time = sample(50, 100, replace = TRUE) ) data <- tween_appear(data, 'time', nframes = 200) } \seealso{ Other data.frame tween: \code{\link{tween_along}}, \code{\link{tween_components}}, \code{\link{tween_elements}}, \code{\link{tween_events}}, \code{\link{tween_states}} } \concept{data.frame tween} tweenr/man/tween_events.Rd0000644000176200001440000000663213343231165015336 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/tween_events.R \name{tween_events} \alias{tween_events} \title{Transition in and out of events} \usage{ tween_events(.data, ease, nframes, start, end = NULL, range = NULL, enter = NULL, exit = NULL, enter_length = 0, exit_length = 0) } \arguments{ \item{.data}{A data.frame with components at different stages} \item{ease}{The easing function to use. Either a single string or one for each column in the data set.} \item{nframes}{The number of frames to calculate for the tween} \item{start, end}{The start (and potential end) of the event encoded in the row, as unquoted expressions. Will be evaluated in the context of \code{.data} so can refer to columns in it. If \code{end = NULL} the event will be without extend and only visible in a single frame, unless \code{enter} and/or \code{exit} is given.} \item{range}{The range of time points to include in the tween. If \code{NULL} it will use the range of \code{time}} \item{enter}{functions that calculate a start state for new observations that appear in \code{to} or an end state for observations that are not present in \code{to}. If \code{NULL} the new/old observations will not be part of the tween. The function gets a data.frame with either the start state of the exiting observations, or the end state of the entering observations and must return a modified version of that data.frame. See the \emph{Match, Enter, and Exit} section for more information.} \item{exit}{functions that calculate a start state for new observations that appear in \code{to} or an end state for observations that are not present in \code{to}. If \code{NULL} the new/old observations will not be part of the tween. The function gets a data.frame with either the start state of the exiting observations, or the end state of the entering observations and must return a modified version of that data.frame. See the \emph{Match, Enter, and Exit} section for more information.} \item{enter_length}{The lenght of the opening and closing transitions if \code{enter} and/or \code{exit} is given. Measured in the same units as \code{time}} \item{exit_length}{The lenght of the opening and closing transitions if \code{enter} and/or \code{exit} is given. Measured in the same units as \code{time}} } \value{ A data.frame with the same columns as \code{.data} along with \code{.id} giving the component id, \code{.phase} giving the state of each component in each frame, and \code{.frame} giving the frame membership of each row. } \description{ This tweening function is a more powerful version of \code{\link[=tween_appear]{tween_appear()}}, with support for newer features such as enter/exits and tween phase identification. The tweener treats each row in the data as unique events in time, and creates frames with the correct events present at any given time. } \examples{ d <- data.frame( x = runif(20), y = runif(20), time = runif(20), duration = runif(20, max = 0.1) ) from_left <- function(x) { x$x <- -0.5 x } to_right <- function(x) { x$x <- 1.5 x } tween_events(d, 'cubic-in-out', 50, start = time, end = time + duration, enter = from_left, exit = to_right, enter_length = 0.1, exit_length = 0.05) } \seealso{ Other data.frame tween: \code{\link{tween_along}}, \code{\link{tween_appear}}, \code{\link{tween_components}}, \code{\link{tween_elements}}, \code{\link{tween_states}} } \concept{data.frame tween} tweenr/man/tween_elements.Rd0000644000176200001440000000365713343231165015652 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/tween_elements.R \name{tween_elements} \alias{tween_elements} \title{Create frames based on individual element states} \usage{ tween_elements(data, time, group, ease, timerange, nframes) } \arguments{ \item{data}{A data.frame consisting at least of a column giving the observation id, a column giving timepoints for each state and a column giving the easing to apply when transitioning away from the state.} \item{time}{The name of the column holding timepoints} \item{group}{The name of the column holding the observation id} \item{ease}{The name of the column holding the easing function name} \item{timerange}{The range of time to span. If missing it will default to \code{range(data[[time]])}} \item{nframes}{The number of frames to generate. If missing it will default to \code{ceiling(diff(timerange) + 1)} (At least one frame for each individual timepoint)} } \value{ A data.frame with the same columns as \code{data} except for the group and ease columns, but replicated \code{nframes} times. Two additional columns called \code{.frame} and \code{.group} will be added giving the frame number and observation id for each row. } \description{ This function creates tweens for each observation individually, in cases where the data doesn't pass through collective states but consists of fully independent transitions. Each observation is identified by an id and each state must have a time associated with it. } \examples{ data <- data.frame( x = c(1, 2, 2, 1, 2, 2), y = c(1, 2, 2, 2, 1, 1), time = c(1, 4, 10, 4, 8, 10), group = c(1, 1, 1, 2, 2, 2), ease = rep('cubic-in-out', 6) ) data <- tween_elements(data, 'time', 'group', 'ease', nframes = 100) } \seealso{ Other data.frame tween: \code{\link{tween_along}}, \code{\link{tween_appear}}, \code{\link{tween_components}}, \code{\link{tween_events}}, \code{\link{tween_states}} } \concept{data.frame tween} tweenr/man/tween_along.Rd0000644000176200001440000000360513352513245015131 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/tween_along.R \name{tween_along} \alias{tween_along} \title{Interpolate data along a given dimension} \usage{ tween_along(.data, ease, nframes, along, id = NULL, range = NULL, history = TRUE, keep_last = FALSE) } \arguments{ \item{.data}{A data.frame with components at different stages} \item{ease}{The easing function to use. Either a single string or one for each column in the data set.} \item{nframes}{The number of frames to calculate for the tween} \item{along}{The "time" point for each row} \item{id}{An unquoted expression giving the component id for each row. Will be evaluated in the context of \code{.data} so can refer to a column from that} \item{range}{The range of time points to include in the tween. If \code{NULL} it will use the range of \code{time}} \item{history}{Should earlier datapoints be kept in subsequent frames} \item{keep_last}{Should the last point of each id be kept beyond its time} } \value{ A data.frame with the same columns as \code{.data} along with \code{.id} giving the component id, \code{.phase} giving the state of each component in each frame, and \code{.frame} giving the frame membership of each row. } \description{ This tween takes groups of rows along with the time for each row and calculates the exact value at each at each frame. Further it allows for keeping the subsequent raw data from previous frame as well as letting the final row linger beyond its time. It especially useful for data that should be visualised as lines that are drawn along the x-axis, but can of course also be used for other dimensions as well (even dimensions not corresponding to any axis). } \seealso{ Other data.frame tween: \code{\link{tween_appear}}, \code{\link{tween_components}}, \code{\link{tween_elements}}, \code{\link{tween_events}}, \code{\link{tween_states}} } \concept{data.frame tween} tweenr/LICENSE0000644000176200001440000000006113252477477012602 0ustar liggesusersYEAR: 2018 COPYRIGHT HOLDER: Thomas Lin Pedersen