From 755bcfb8652ed1b19fd8747f8ea236ecf789bbf5 Mon Sep 17 00:00:00 2001 From: tcrisford Date: Fri, 28 Aug 2020 14:09:57 +0100 Subject: [PATCH] Error handling workshop - initial commit --- error_handling_in_R/Debugging R workshop.Rmd | 253 ++++++ error_handling_in_R/Debugging-R-workshop.html | 738 ++++++++++++++++++ error_handling_in_R/browser.png | Bin 0 -> 62621 bytes error_handling_in_R/compute_change_table.R | 8 + ...glesvaccinationcoverage70yearsold.data.csv | 397 ++++++++++ ...nvaccinationcoverageflu24yearsold.data.csv | 397 ++++++++++ error_handling_in_R/traceback.png | Bin 0 -> 12094 bytes 7 files changed, 1793 insertions(+) create mode 100644 error_handling_in_R/Debugging R workshop.Rmd create mode 100644 error_handling_in_R/Debugging-R-workshop.html create mode 100644 error_handling_in_R/browser.png create mode 100644 error_handling_in_R/compute_change_table.R create mode 100644 error_handling_in_R/data/1-303xviipopulationvaccinationcoverageshinglesvaccinationcoverage70yearsold.data.csv create mode 100644 error_handling_in_R/data/303xviiipopulationvaccinationcoverageflu24yearsold.data.csv create mode 100644 error_handling_in_R/traceback.png diff --git a/error_handling_in_R/Debugging R workshop.Rmd b/error_handling_in_R/Debugging R workshop.Rmd new file mode 100644 index 0000000..f9fe62b --- /dev/null +++ b/error_handling_in_R/Debugging R workshop.Rmd @@ -0,0 +1,253 @@ +--- +title: "Handling Errors in R" +output: html_document +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +knitr::opts_chunk$set(error = TRUE) +library(dplyr) +library(knitr) +``` + +In this workshop we will cover: + +- Interpreting error messages in R +- Investigating errors with traceback() +- Investigating errors with browser() +- Creating error messages with stop(...) +- Handling errors with try and tryCatch + +### Straightforward error messages + +When R displays an error message, usually the message will be clear enough that we can immediately work out what needs to be done to resolve the problem. For example, the following code chunk attempts to load a table of vaccine coverage among 2-4 year olds from a csv file. + +```{r} +vaccine_coverage <- read.csv("303xviiipopulationvaccinationcoverageflu24yearsold.data.csv", stringsAsFactors = FALSE) +``` + +This message is telling us that the csv file we tried to open does not exist. We should therefore check whether the file name is correct. It wasn't. The csv file is actually stored in a sub-folder called 'data', inside the working directory, and R needs to be told this. Lets try again, and we'll then filter the table to only show the vaccine coverage in each region: + +```{r} +vaccine_coverage <- read.csv("data/303xviiipopulationvaccinationcoverageflu24yearsold.data.csv", stringsAsFactors = FALSE) + +vaccine_coverage_region <- dplyr::filter(vaccine_coverage, Area.Type == "Region") %>% + dplyr::select(Area.Code, Area.Name, Time.period, Value) %>% + dplyr::arrange(Area.Code) + +knitr::kable(vaccine_coverage_region) +``` + +This time it works! + +### Less clear error messages + +Sometimes the error message that R prints will be less helpful. For example, suppose that instead of the code above, we try to filter the table without using the dplyr package, as follows: + +```{r} +vaccine_coverage_region <- vaccine_coverage[vaccine_coverage$Area.Type == "Region"] +``` + +Here we are told "undefined columns selected". First, we should check what the column names are, to make sure 'Area.Type' really is the name of a column: + +```{r} +print(colnames(vaccine_coverage)) +``` + +It is. What else could be wrong? A good first thing to try is to copy and paste the full error message into google, and see if other people have had similar problems. Since the message here is very generic, you might add something else to the search as well. If we search for "undefined columns selected when filtering r" the top result explains what the issue is: https://stackoverflow.com/questions/19205806/undefined-columns-selected-when-subsetting-data-frame +We forgot a comma! If we want to select a subset of a data frame, we always need to include the comma. If we want all of the columns, we are just supposed to leave a blank space to the right of the comma. + +The below code chunk correctly filters and sorts the table. + +```{r} +vaccine_coverage_region <- vaccine_coverage[vaccine_coverage$Area.Type == "Region", ] + +vaccine_coverage_region <- vaccine_coverage_region[order(vaccine_coverage_region$Area.Code), c("Area.Code", "Area.Name", "Time.period", "Value")] + +knitr::kable(vaccine_coverage_region, row.names = FALSE) +``` + +Syntax errors, such as missing commas or brackets, can often produce strange error messages, so if you're confused it's always worth double checking these. + +### Tracking down more complicated errors - traceback() + +Sometimes, it might not be immediately clear which part of the code has caused an error message. + +We now have a table of flu vaccine coverage among 2-4 year olds in each region, at two different time periods. Suppose we try to calculate the change in vaccine coverage in each region between the two time periods. + +Someone tells us that they have written a custom function for doing this kind of calculation on an arbitrary table, and this function is stored in a different R script, called 'compute_change_table.R'. + +They tell us that to use the custom function, its first argument should be the full table, its second should be the column that we want to group by (in this case region), the third should be the column which denotes the time period, the fourth should be the column we want to find the change in, and the fifth should tell the function what the time periods are called. + +So we try to run it below: + +```{r} +source('compute_change_table.R') + +vaccine_change_region <- compute_change_table(vaccine_coverage_region, vaccine_coverage_region$Area.Name, vaccine_coverage_region$Time.period, vaccine_coverage_region$Value, c("2014/15", "2015/16")) +``` + +It is not immediately obvious what has caused this error message. Something has gone wrong inside the custom function, but we're not sure how that function works or what line this has happened on. + +A useful tool here is 'traceback()'. This does not work within a markdown document, but after an error message is generated, if you type 'traceback()' into the console and press enter, you will see something like the below: + + + +Traceback tells you exactly where the error occurred. The bottom line always tells you the part of your code that caused the problem. In this case, it was the part where we called the 'compute_change_table' function. + +The next line up is more useful. It tells us which part of that function the error occurred in. To see where this error happened, we now know that we need to open 'compute_change_table.R' and go to line 2. Specifically, the error is generated when we try to select a column of the data frame 'input_data' given by a variable called 'time_col'. Lets look at the full contents of this file to see if we can work out what is going on: + +```{r} +#compute_change_table.R + +compute_change_table <- function(input_data, group_col, time_col, comparison_col, start_time) { + input_data$time_marker <- ifelse(input_data[,time_col] == start_time, -1, 1) + input_data$comparison_marker <- input_data[,comparison_col] + input_data$group_marker <- input_data[,group_col] + return(input_data %>% + dplyr::group_by(group_marker) %>% + summarise(change = sum(comparison_marker * time_marker))) +} +``` + +We can see that input_data was the first argument given to the function, in this case the full table 'vaccine_coverage_region'. time_col was the third argument. This reveals the problem. We sent the entire column to the function as the third argument, but if we look at the way it's being used, what is needed here is the *name* of the column. Lets try again: + +```{r} +vaccine_change_region <- compute_change_table(vaccine_coverage_region, "Area.Name", "Time.period", "Value", c("2014/15", "2015/16")) + +knitr::kable(vaccine_change_region) +``` + +This time we've had no error messages... + +### Tracking down more complicated errors - browser() + +...but the results clearly don't look right still, so there is still a problem! We're going to need to take a closer look under the hood of the function to see what's going on. To understand what the function is doing it's helpful to see what each of the variables actually are. + +One thing we could do is add lines to the function to print the variables we want to see, so if we want to see x, we add the line print(x) at the point in the code where we'd like to see it. Then when we try re-running the code we can see what x is by looking at the output. + +But an even more useful tool is 'browser()'. We can edit the R file, so that 'browser()' is executed just at the point where we'd like to take a look around (in this case right at the end of the function): + +```{r} +compute_change_table <- function(input_data, group_col, time_col, comparison_col, start_time) { + input_data$time_marker <- ifelse(input_data[,time_col] == start_time, -1, 1) + input_data$comparison_marker <- input_data[,comparison_col] + input_data$group_marker <- input_data[,group_col] + + browser() + + return(input_data %>% + dplyr::group_by(group_marker) %>% + summarise(change = sum(comparison_marker * time_marker))) +} +``` + +Now when R hits that line, it will pause execution of the code, whatever state it's in, and hand control back over to you, through the console. You can now use the console to run commands, including print, to try to work out what's going on: + + + +Once in browser mode, we have used the console to print the different columns that the function has created. To exit the browser mode and resume execution of the code, type 'c' and hit enter. + +We can see that the time_marker column is all -1, and when we look at how this column is being used, this explains the problem. Instead of computing the difference in vaccine coverage between 2014/15 and 2015/16, the function is for some reason multiplying both values by -1 and adding them up. Presumably the time_marker column should actually have values of +1 for the later time period and -1 for the earlier time period, but this has not happened. + +If we look more closely at how the time_marker column is created (line 2 again), we can try to work out why. It is being set to -1 whenever the column time_col equals start_time (the final argument to the function). But for start_time, we used the vector c("2014/15", "2015/16"), instead of just supplying the start time "2014/15". If we fix this, the function should work as expected: + +```{r} +source("compute_change_table.R") + +vaccine_change_region <- compute_change_table(vaccine_coverage_region, "Area.Name", "Time.period", "Value", "2014/15") + +knitr::kable(vaccine_change_region) +``` + +### Creating errors with stop() + +We are now using the function correctly, but maybe we are still worried. What if other users of the function make the same mistake in future? No error message was generated, so there is a risk that the user will not notice that anything has gone wrong. We would prefer it if an error message were generated in this case, and the execution stopped, to guarantee that people do not end up trusting a bad output. + +We can do this by modifying the function as follows: + +```{r} +compute_change_table <- function(input_data, group_col, time_col, comparison_col, start_time) { + + if (length(start_time) != 1) { + stop("The final argument to the function should be the starting time period, not a vector") + } + + input_data$time_marker <- ifelse(input_data[,time_col] == start_time, -1, 1) + input_data$comparison_marker <- input_data[,comparison_col] + input_data$group_marker <- input_data[,group_col] + return(input_data %>% + dplyr::group_by(group_marker) %>% + summarise(change = sum(comparison_marker * time_marker))) +} +``` + +The first thing the function now does is check the length of the final argument. If it is not equal to 1, it runs stop("..."). This will stop the execution of the R code, and print the message as an error message. + +So now if we try to run the function again with a vector as the final argument: + +```{r} +vaccine_change_region <- compute_change_table(vaccine_coverage_region, "Area.Name", "Time.period", "Value", c("2014/15", "2015/16")) +``` + +### Handling errors with try and tryCatch + +We've seen how to create errors when R would not normally produce them. But sometimes we want to do the opposite. Maybe if an error message is generated, we would prefer that R ignore it and carry on the execution, instead of stopping. + +Suppose that we have more csv files in our data folder, containing data on vaccine coverage for different diseases and among different age groups. The below code chunk attempts to produce a region level table for each csv file in the folder, and store it in a list: + +```{r} +vaccine_coverage_tables = list() + +for (file in list.files("./data")) { + vaccine_coverage_tables[[file]] <- read.csv(paste0("data/", file)) %>% + dplyr::filter(Area.Type == "Region") %>% + dplyr::select(Area.Code, Area.Name, Time.period, Value) %>% + dplyr::arrange(Area.Code) +} +``` + +But there's a problem. The first file we tried to open did not have a column called 'Area.Type'. We'll need to investigate this further, but this error has stopped the execution, so our list of tables is still empty: + +```{r} +print(length(vaccine_coverage_tables)) +``` + +This might not have been what we want. Maybe we wanted to open a very large number of files, and if any errors occur we'd prefer to just skip that file and focus on the rest. We can do that using try: + +```{r} +vaccine_coverage_tables = list() + +for (file in list.files("./data")) { + try( + vaccine_coverage_tables[[file]] <- read.csv(paste0("data/", file)) %>% + dplyr::filter(Area.Type == "Region") %>% + dplyr::select(Area.Code, Area.Name, Time.period, Value) %>% + dplyr::arrange(Area.Code) + ) +} + +print(length(vaccine_coverage_tables)) +``` + +If an error occurs inside a call to try(...), the error message is still printed (although it can be suppressed using silent=TRUE), but the execution will not be stopped. The list is now not empty, because R continued through the loop, and read the other file successfully (there are only 2 files in the folder for this toy example). + +If we had a lot of files, we might like the message to give us an indication of what file the problem happened in. We can adapt the error message using tryCatch: + +```{r} +vaccine_coverage_tables = list() + +for (file in list.files("./data")) { + tryCatch( + vaccine_coverage_tables[[file]] <- read.csv(paste0("data/", file)) %>% + dplyr::filter(Area.Type == "Region") %>% + dplyr::select(Area.Code, Area.Name, Time.period, Value) %>% + dplyr::arrange(Area.Code), + error = function(e) {print(paste("There was a problem with the formatting of", file, e))} + ) +} + +print(length(vaccine_coverage_tables)) +``` + +This allows us to write our own error message. The 'error' argument in tryCatch should be a function, which will be executed if an error occurs. The argument to this function ('e') is the error message produced by R. In this example, when an error occurs, we print our own custom error message specifying which file had a problem, and then append the error message produced by R onto the end. If the data folder contained a large number of files, this error handling would hopefully be a lot more helpful than R's default. \ No newline at end of file diff --git a/error_handling_in_R/Debugging-R-workshop.html b/error_handling_in_R/Debugging-R-workshop.html new file mode 100644 index 0000000..d8c8c5d --- /dev/null +++ b/error_handling_in_R/Debugging-R-workshop.html @@ -0,0 +1,738 @@ + + + + + + + + + + + + + +Handling Errors in R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +

In this workshop we will cover:

+ +
+

Straightforward error messages

+

When R displays an error message, usually the message will be clear enough that we can immediately work out what needs to be done to resolve the problem. For example, the following code chunk attempts to load a table of vaccine coverage among 2-4 year olds from a csv file.

+
vaccine_coverage <- read.csv("303xviiipopulationvaccinationcoverageflu24yearsold.data.csv", stringsAsFactors = FALSE)
+
## Warning in file(file, "rt"): cannot open file
+## '303xviiipopulationvaccinationcoverageflu24yearsold.data.csv': No such file or
+## directory
+
## Error in file(file, "rt"): cannot open the connection
+

This message is telling us that the csv file we tried to open does not exist. We should therefore check whether the file name is correct. It wasn't. The csv file is actually stored in a sub-folder called 'data', inside the working directory, and R needs to be told this. Lets try again, and we'll then filter the table to only show the vaccine coverage in each region:

+
vaccine_coverage <- read.csv("data/303xviiipopulationvaccinationcoverageflu24yearsold.data.csv", stringsAsFactors = FALSE)
+
+vaccine_coverage_region <- dplyr::filter(vaccine_coverage, Area.Type == "Region") %>%
+  dplyr::select(Area.Code, Area.Name, Time.period, Value) %>%
+  dplyr::arrange(Area.Code)
+
+knitr::kable(vaccine_coverage_region)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Area.CodeArea.NameTime.periodValue
E12000001North East region2014/1540.91372
E12000001North East region2015/1637.61686
E12000002North West region2014/1538.25132
E12000002North West region2015/1634.44506
E12000003Yorkshire and the Humber region2014/1539.05775
E12000003Yorkshire and the Humber region2015/1635.50892
E12000004East Midlands region2014/1542.28670
E12000004East Midlands region2015/1640.01594
E12000005West Midlands region2014/1536.01100
E12000005West Midlands region2015/1632.88761
E12000006East of England region2014/1540.93719
E12000006East of England region2015/1635.35176
E12000007London region2014/1528.88732
E12000007London region2015/1625.70617
E12000008South East region2014/1539.33036
E12000008South East region2015/1636.35462
E12000009South West region2014/1541.21890
E12000009South West region2015/1640.50402
+

This time it works!

+
+
+

Less clear error messages

+

Sometimes the error message that R prints will be less helpful. For example, suppose that instead of the code above, we try to filter the table without using the dplyr package, as follows:

+
vaccine_coverage_region <- vaccine_coverage[vaccine_coverage$Area.Type == "Region"]
+
## Error in `[.data.frame`(vaccine_coverage, vaccine_coverage$Area.Type == : undefined columns selected
+

Here we are told "undefined columns selected". First, we should check what the column names are, to make sure 'Area.Type' really is the name of a column:

+
print(colnames(vaccine_coverage))
+
##  [1] "Area.Code"      "Area.Name"      "Area.Type"      "Sex"           
+##  [5] "Age"            "Category.Type"  "Category"       "Time.period"   
+##  [9] "Value"          "Lower.CI.limit" "Upper.CI.limit" "Count"         
+## [13] "Denominator"    "Value.note"
+

It is. What else could be wrong? A good first thing to try is to copy and paste the full error message into google, and see if other people have had similar problems. Since the message here is very generic, you might add something else to the search as well. If we search for "undefined columns selected when filtering r" the top result explains what the issue is: https://stackoverflow.com/questions/19205806/undefined-columns-selected-when-subsetting-data-frame We forgot a comma! If we want to select a subset of a data frame, we always need to include the comma. If we want all of the columns, we are just supposed to leave a blank space to the right of the comma.

+

The below code chunk correctly filters and sorts the table.

+
vaccine_coverage_region <- vaccine_coverage[vaccine_coverage$Area.Type == "Region", ]
+
+vaccine_coverage_region <- vaccine_coverage_region[order(vaccine_coverage_region$Area.Code), c("Area.Code", "Area.Name", "Time.period", "Value")]
+
+knitr::kable(vaccine_coverage_region, row.names = FALSE)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Area.CodeArea.NameTime.periodValue
E12000001North East region2014/1540.91372
E12000001North East region2015/1637.61686
E12000002North West region2014/1538.25132
E12000002North West region2015/1634.44506
E12000003Yorkshire and the Humber region2014/1539.05775
E12000003Yorkshire and the Humber region2015/1635.50892
E12000004East Midlands region2014/1542.28670
E12000004East Midlands region2015/1640.01594
E12000005West Midlands region2014/1536.01100
E12000005West Midlands region2015/1632.88761
E12000006East of England region2014/1540.93719
E12000006East of England region2015/1635.35176
E12000007London region2014/1528.88732
E12000007London region2015/1625.70617
E12000008South East region2014/1539.33036
E12000008South East region2015/1636.35462
E12000009South West region2014/1541.21890
E12000009South West region2015/1640.50402
+

Syntax errors, such as missing commas or brackets, can often produce strange error messages, so if you're confused it's always worth double checking these.

+
+
+

Tracking down more complicated errors - traceback()

+

Sometimes, it might not be immediately clear which part of the code has caused an error message.

+

We now have a table of flu vaccine coverage among 2-4 year olds in each region, at two different time periods. Suppose we try to calculate the change in vaccine coverage in each region between the two time periods.

+

Someone tells us that they have written a custom function for doing this kind of calculation on an arbitrary table, and this function is stored in a different R script, called 'compute_change_table.R'.

+

They tell us that to use the custom function, its first argument should be the full table, its second should be the column that we want to group by (in this case region), the third should be the column which denotes the time period, the fourth should be the column we want to find the change in, and the fifth should tell the function what the time periods are called.

+

So we try to run it below:

+
source('compute_change_table.R')
+
+vaccine_change_region <- compute_change_table(vaccine_coverage_region, vaccine_coverage_region$Area.Name, vaccine_coverage_region$Time.period, vaccine_coverage_region$Value, c("2014/15", "2015/16"))
+
## Error in `[.data.frame`(input_data, , time_col): undefined columns selected
+

It is not immediately obvious what has caused this error message. Something has gone wrong inside the custom function, but we're not sure how that function works or what line this has happened on.

+

A useful tool here is 'traceback()'. This does not work within a markdown document, but after an error message is generated, if you type 'traceback()' into the console and press enter, you will see something like the below:

+

+

Traceback tells you exactly where the error occurred. The bottom line always tells you the part of your code that caused the problem. In this case, it was the part where we called the 'compute_change_table' function.

+

The next line up is more useful. It tells us which part of that function the error occurred in. To see where this error happened, we now know that we need to open 'compute_change_table.R' and go to line 2. Specifically, the error is generated when we try to select a column of the data frame 'input_data' given by a variable called 'time_col'. Lets look at the full contents of this file to see if we can work out what is going on:

+
#compute_change_table.R
+
+compute_change_table <- function(input_data, group_col, time_col, comparison_col, start_time) {
+  input_data$time_marker <- ifelse(input_data[,time_col] == start_time, -1, 1)
+  input_data$comparison_marker <- input_data[,comparison_col]
+  input_data$group_marker <- input_data[,group_col]
+  return(input_data %>%
+           dplyr::group_by(group_marker) %>%
+           summarise(change = sum(comparison_marker * time_marker)))
+}
+

We can see that input_data was the first argument given to the function, in this case the full table 'vaccine_coverage_region'. time_col was the third argument. This reveals the problem. We sent the entire column to the function as the third argument, but if we look at the way it's being used, what is needed here is the name of the column. Lets try again:

+
vaccine_change_region <- compute_change_table(vaccine_coverage_region, "Area.Name", "Time.period", "Value", c("2014/15", "2015/16"))
+
+knitr::kable(vaccine_change_region)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
group_markerchange
East Midlands region-82.30265
East of England region-76.28895
London region-54.59349
North East region-78.53057
North West region-72.69638
South East region-75.68498
South West region-81.72292
West Midlands region-68.89861
Yorkshire and the Humber region-74.56667
+

This time we've had no error messages...

+
+
+

Tracking down more complicated errors - browser()

+

...but the results clearly don't look right still, so there is still a problem! We're going to need to take a closer look under the hood of the function to see what's going on. To understand what the function is doing it's helpful to see what each of the variables actually are.

+

One thing we could do is add lines to the function to print the variables we want to see, so if we want to see x, we add the line print(x) at the point in the code where we'd like to see it. Then when we try re-running the code we can see what x is by looking at the output.

+

But an even more useful tool is 'browser()'. We can edit the R file, so that 'browser()' is executed just at the point where we'd like to take a look around (in this case right at the end of the function):

+
compute_change_table <- function(input_data, group_col, time_col, comparison_col, start_time) {
+  input_data$time_marker <- ifelse(input_data[,time_col] == start_time, -1, 1)
+  input_data$comparison_marker <- input_data[,comparison_col]
+  input_data$group_marker <- input_data[,group_col]
+  
+  browser()
+  
+  return(input_data %>%
+           dplyr::group_by(group_marker) %>%
+           summarise(change = sum(comparison_marker * time_marker)))
+}
+

Now when R hits that line, it will pause execution of the code, whatever state it's in, and hand control back over to you, through the console. You can now use the console to run commands, including print, to try to work out what's going on:

+

+

Once in browser mode, we have used the console to print the different columns that the function has created. To exit the browser mode and resume execution of the code, type 'c' and hit enter.

+

We can see that the time_marker column is all -1, and when we look at how this column is being used, this explains the problem. Instead of computing the difference in vaccine coverage between 2014/15 and 2015/16, the function is for some reason multiplying both values by -1 and adding them up. Presumably the time_marker column should actually have values of +1 for the later time period and -1 for the earlier time period, but this has not happened.

+

If we look more closely at how the time_marker column is created (line 2 again), we can try to work out why. It is being set to -1 whenever the column time_col equals start_time (the final argument to the function). But for start_time, we used the vector c("2014/15", "2015/16"), instead of just supplying the start time "2014/15". If we fix this, the function should work as expected:

+
source("compute_change_table.R")
+
+vaccine_change_region <- compute_change_table(vaccine_coverage_region, "Area.Name", "Time.period", "Value", "2014/15")
+
+knitr::kable(vaccine_change_region)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
group_markerchange
East Midlands region-2.2707619
East of England region-5.5854224
London region-3.1811510
North East region-3.2968599
North West region-3.8062641
South East region-2.9757396
South West region-0.7148776
West Midlands region-3.1233840
Yorkshire and the Humber region-3.5488239
+
+
+

Creating errors with stop()

+

We are now using the function correctly, but maybe we are still worried. What if other users of the function make the same mistake in future? No error message was generated, so there is a risk that the user will not notice that anything has gone wrong. We would prefer it if an error message were generated in this case, and the execution stopped, to guarantee that people do not end up trusting a bad output.

+

We can do this by modifying the function as follows:

+
compute_change_table <- function(input_data, group_col, time_col, comparison_col, start_time) {
+  
+  if (length(start_time) != 1) {
+    stop("The final argument to the function should be the starting time period, not a vector")
+  }
+  
+  input_data$time_marker <- ifelse(input_data[,time_col] == start_time, -1, 1)
+  input_data$comparison_marker <- input_data[,comparison_col]
+  input_data$group_marker <- input_data[,group_col]
+  return(input_data %>%
+           dplyr::group_by(group_marker) %>%
+           summarise(change = sum(comparison_marker * time_marker)))
+}
+

The first thing the function now does is check the length of the final argument. If it is not equal to 1, it runs stop("..."). This will stop the execution of the R code, and print the message as an error message.

+

So now if we try to run the function again with a vector as the final argument:

+
vaccine_change_region <- compute_change_table(vaccine_coverage_region, "Area.Name", "Time.period", "Value", c("2014/15", "2015/16"))
+
## Error in compute_change_table(vaccine_coverage_region, "Area.Name", "Time.period", : The final argument to the function should be the starting time period, not a vector
+
+
+

Handling errors with try and tryCatch

+

We've seen how to create errors when R would not normally produce them. But sometimes we want to do the opposite. Maybe if an error message is generated, we would prefer that R ignore it and carry on the execution, instead of stopping.

+

Suppose that we have more csv files in our data folder, containing data on vaccine coverage for different diseases and among different age groups. The below code chunk attempts to produce a region level table for each csv file in the folder, and store it in a list:

+
vaccine_coverage_tables = list()
+
+for (file in list.files("./data")) {
+  vaccine_coverage_tables[[file]] <- read.csv(paste0("data/", file)) %>%
+    dplyr::filter(Area.Type == "Region") %>%
+  dplyr::select(Area.Code, Area.Name, Time.period, Value) %>%
+  dplyr::arrange(Area.Code)
+}
+
## Error: object 'Area.Type' not found
+

But there's a problem. The first file we tried to open did not have a column called 'Area.Type'. We'll need to investigate this further, but this error has stopped the execution, so our list of tables is still empty:

+
print(length(vaccine_coverage_tables))
+
## [1] 0
+

This might not have been what we want. Maybe we wanted to open a very large number of files, and if any errors occur we'd prefer to just skip that file and focus on the rest. We can do that using try:

+
vaccine_coverage_tables = list()
+
+for (file in list.files("./data")) {
+  try(
+    vaccine_coverage_tables[[file]] <- read.csv(paste0("data/", file)) %>%
+      dplyr::filter(Area.Type == "Region") %>%
+    dplyr::select(Area.Code, Area.Name, Time.period, Value) %>%
+    dplyr::arrange(Area.Code)
+  )
+}
+
## Error : object 'Area.Type' not found
+
print(length(vaccine_coverage_tables))
+
## [1] 1
+

If an error occurs inside a call to try(...), the error message is still printed (although it can be suppressed using silent=TRUE), but the execution will not be stopped. The list is now not empty, because R continued through the loop, and read the other file successfully (there are only 2 files in the folder for this toy example).

+

If we had a lot of files, we might like the message to give us an indication of what file the problem happened in. We can adapt the error message using tryCatch:

+
vaccine_coverage_tables = list()
+
+for (file in list.files("./data")) {
+  tryCatch(
+    vaccine_coverage_tables[[file]] <- read.csv(paste0("data/", file)) %>%
+      dplyr::filter(Area.Type == "Region") %>%
+    dplyr::select(Area.Code, Area.Name, Time.period, Value) %>%
+    dplyr::arrange(Area.Code),
+    error = function(e) {print(paste("There was a problem with the formatting of", file, e))}
+  )
+}
+
## [1] "There was a problem with the formatting of 1-303xviipopulationvaccinationcoverageshinglesvaccinationcoverage70yearsold.data.csv Error: object 'Area.Type' not found\n"
+
print(length(vaccine_coverage_tables))
+
## [1] 1
+

This allows us to write our own error message. The 'error' argument in tryCatch should be a function, which will be executed if an error occurs. The argument to this function ('e') is the error message produced by R. In this example, when an error occurs, we print our own custom error message specifying which file had a problem, and then append the error message produced by R onto the end. If the data folder contained a large number of files, this error handling would hopefully be a lot more helpful than R's default.

+
+ + + + +
+ + + + + + + + + + + + + + + diff --git a/error_handling_in_R/browser.png b/error_handling_in_R/browser.png new file mode 100644 index 0000000000000000000000000000000000000000..531426d7aae4bfc67c8cb01c8f340ce8d7df8675 GIT binary patch literal 62621 zcmb@ucT`hp^e(L9jHrlMC?X1W1cW#$A~iNZK|pHg5s)HPr3XmHf(R&x2uMo=q?ZT? zNJ%0{?=_)EN(c}j5E4S_xxty=`tEnv{qwR`);T%lZM!|ses_p^V5BFq@7TT_J9dcN zyL-oU$Btcm!ROPSKLl51&2W=~!%ja_y<0md@| zaBva%)Zh@*Yc#ez(Cum5${vT)V`7|?58feB_tPZ2b-E3|J)AaCym08lg?O>O_r9Er z7dLV){fOM5V}?<)6%}q&O5Nu2L>-kr5wVf1d}gSk>D1W+UnWDDy~ov} zx7)iJ%aD})OEWK`FaO?m#Cn-HF^+xu=}AnLUviN39YLop7J?^YJ1VUAy!+hrd`as1 zD_GL?^!m=zf{w42HnOuL|Kwfb8U<^gI{_85su(yP` zw(Qr7wys+(a6@tUg?cFa>gm3&Luj#E;bM4MhKUtIFuxTO0v(HajxZSxj#egUZw)qpc(GTVQm}~W|<&Crto+d3v#KdubMM4m3)uq_^p9bK%<+Xn2 zK=_c%@5QUsv$qA3t1&cunlF~#CJN!Umq3AxINrm>WLF2G%UfJI-xtT*EEvo~g|D)9 z35kZf99oL0t>i;_Y#wfdgYaLP2r1(ZRZtLssIQo?v?`7}9T!HYv((Bod0Ppx>D0;hWV|R)Of$dMPyc7Zd!{pQ-K5 zW4QfO;nrIU_b_xL$e^#^>K;yHfP)`xGSSHnI6FmIegld-szg?Hpbhko2vgz?-pbcn zYGli5z@11a1bnnk0u3YLI1L|}` za`3kuob>B9Wy6SI7Arh5E_hKGs))AsA6^;9G#xTgs9JTJstH0R4~$}34essTUK966 z0l)gXg0MJ`#d4AXc8&B*$v%(}P1UZ4itSM-8;)Q=d8E+Z6B%XpR5=h$nI>d8gJfZdt6UBhU2bM|2@ zqC3?MXQzU<(s*@Yxna z5atW6=c(&zqcF((ki0Flgh7xg2H)C~89!W&t6r+oz&?PAhA|z{yN&Iw01%fJId7D% z{ylJ`AVbKQs`-S!)?XpyCaTG6q;q^V!ynFbqs*WH5zHMSCrNjr*4NW~gD6iizji@{ zq1G@W1{YgJ-B;(w;5Fmn1wAL}L7&;f=tt&_Okp(0f343Evo>dD92#O;_?U-g^-+B% zYG)TlV_JLc#eg1U&DY1FWPm$2B+nRj$c)4S3zMS7>1qM|Pi=md^J>8}6R1hrB07x6 zum5o9ARcG)Z?nrok1=02S!9f+{BLu8SIp;DbZYuROUJ<#T}2IMl6b@-ZtF+HY@RC= z9zKbhRO1Z9La^+$`Cjcy6|CW1(p8$QJk&UEIX4tBU5!JGyS*dzZjIn@!zFTSFB&be z6ugLQz+g9(=5wWpD>~uvL3o!3VRk44$Gv(ggrHPynM3|7!*V(9bivqVHAA5y)2!FU zw>&Aiw!{ENwC2mqqe6-@DOO_UDZ?l8jScr{owqzBwQ}A*B!Ks!4{w{PUSxE06n*in z&u&8xfmQ@^ZQ`^xx2AtyaX@}tvH})cQDKi56|KGYnts!?(HKaN-S=nDRtNekBrVaC z^c2uUr58(;zdU~q#}JZD)6xp^SpCp;(jT^3-iBCcszD$qc^h#;NEzUkFl2U#W)X5IWP# zr1J*tWI|*TPad;My5M5*y=h;->v`GaZ;ipGR}; z&y2$E4<}xCBuKGuWi=L?$p#bZD&-~BHX`byvN(a7t`=2J!yr>loWo>I_rj%t#-l718?D?_g7?kPXZrv4 z!tq{Oue(3g$r?1QNpChgb5vuiP~ymKlf2GbEFM2V`dXL&hN8%SOYKNvT4-T?i%@u= z3&^@OdEkmmA!#x!0k3#tpua2EGzP?X?SKh9aC<#=y7+VhO_M0bAHv&Vgf{ zsHePls3(-CnmK7szGMCyb&YpIhmGRS2PXQssngbTtohHq`-qw1k~F zE@fKMM&|et(UNzfljY9+=l(900HxmONj4I}szmV_XrN1l_~39Z;7P^UZ1F+7A@oHa z2Mq9x;hQVf#A`|5St4(}brN<9biwo)*yBj$hyJ)fSBAoOU!InDeUVdUMY+Tn%rj0+z%#yYy3Mq5hHCbu1Fk+LkJ z63KVQJC2x5erp#VD_1P`GP!U(TD`;$Po#t|rMS7q$_(NWg9f0G5YyjK-PPMl$u;`&RPm@fvbB}5Zm zUF$dK%E-w;f+ABqbH}9=3`UPmPjZ-c~w7sFdJh!w* zMs;_unxJ!+m>z+bzZ>t1C>iNAYIr#8K3=ubNCC5k2H7nBXm;x>Dq^W14@Lai-;-o| zf&!wK8FN|4pRKRbz*<4pVY{!xS7%Cpw)$*sdCT=82c=ePIecmrXyctHoeR+7b?2aSSN<ySd*p`xh= z!BVG}mZ#3t^T)_2LN61QQg<>8@aqKw19~l2TmZ@J&u+$Bw9AhVeI6a8%yYxh=8~y@8-ahFk>wq! z-rXt;>wVE$T+s$SYa?}SlB>LNGTJ`M{-s^%-MC|TCpC+-b9ovK9=SrLaLDFI9Q=+p zU|L*!tuD_;B{?4t`=Xt2T*xBL{)?3nfg0HDODI)Jlz~=xm~|RyMKm&l@pRrTl@eT^ z>|}5!inyMW9Jm~^o@j4?TN?&%%^C+w$-wDRP|SP~GI%ut!jyrp#Sa6^P@p3Q>YMD}lp^AQ{H`B|GUOaq#IbmZQvDWG%(s;&Z%ec+Tw);Fu-Zx%iK;L`-dPV$kkLRN=;`lb{ z74gOC7uD&7O3A2v?Z}T4X^=R6oz6$Fr5I+TP|4DQr+)PI=1Hu5lRUB*e7P{>X5Q}1 zVrYToGO6RHXCWI8U6>p7t7tXemvPIai8zFFwM$<|NCVIrLUM zthTxBfj>e2$ZyCZa@VXgiCl$^)#f$V)gQYv^S%T~t)#pyK(|IBs4(IZMOkv}^ zFOdyvDk4$l&e{R|HOvbG2`Q4 zDqYD#81iy^!m<Qpr%;J_^{5(a*LGY7*b<+!8t&K-Ok$b!!R@%KkT;?suHE5@0^L zdXm4`J5l>+Y2KLMEa$@-LQVQ}-l4uTUW4lv<9xVHdcIps9MFnjhZ2Ze@p1fiU!XxY ze2ZBM^idsv95j5g$nmp+jL#t}BdtV-(kXqVKOK3IMSlenaKZWa9xz6DFOJ}4Prd5< z=js8xY-XnCv@PQ5t$$t5`&Wk$v{6QHG11D*ghKqf+t>>6ZS569Z=39GzjF3%aP?BC z2=Xi6eOiFy*%yBM_RT$%I0?bE{J8(fR2YTot?T}0#P*8>t!;)F@5?)6bC5P6eM`&W zxY3NMyR5x{rS^UAsOC?7dGjB07JZk-0EbS`*uB3F_HY~g&7JdYMLO%ZuLmv-MRY>y zn^-0qX{AFGEf!>^w`vi(6vd&VNohS);@{PL4jJTd(e!s~HlH0+s-ITyIc^7_uvrn% zQ}~egU|uhB3>X{aK*JSs2HlKoiE04H&1lABhBIOg?2zP~5tzt0SO_~;Sn@3g{C6mSp`k`3uC3{1MvV(DV7kAqr?*=z z<#)Jg?(%>XN2(xk1LSJ5;2dsBG+W^P!Tj|6F zFn{)jF-J?7nzie_IQFD1)*nbBFwwn1REpw+HzC7AEw==>HqYyf-vN~16) zVZNk#3LZfAK@T0YXss8?G7JC87m7O`&R}G?^=3%QYS$ZL9&a|aZ%BfAk87OL-W8mt zQ0eni_wR!aPEkEw_I4P@&I)w5j}{wWL!aRy}s)8Ou5ZoiAbI zajt`I%68m=YRgGRpJ-eLVs;`&wHFGf%uS>T8R1wR%hJ76#H?Z*mR^8{bLMLJYBaOf z`Ar`UU}n~D9L4ErA>h6T0?~rG2QgFQCOO}GE>%w-%1*)P$ZuzjGL==Xgx-fun>ws4 zcWfYndC5i&N9PBH0=jIc3iP1ZwV0r;C6_oKjo~3SRYS9mk$8ekR!-Lpm}f~=rPl?^ zCns0f1vZS%%8`|!Y8pW%-vOVD1;1Y3gW12%CAkCf&YnSCut4JA{Lf@r+v-upqlNIn ztT+Jz*Lw1h85M4vF@YMwV$cGm&h5E-%zP&q)Pqb7-55x$F0Eh3r^NWm zXm8AW>Jdkt{OVZBfcVr<8pzey)kKfdR#fmzlC4jQ4P(Z43Nx=I%WJ%C?Ay2K2j$ym zuk@1sRr^|tYCHhO0uW%@Sr#0&YL2|zTj)IHpSO7;)VUwM%92E>morDC^?K`BEonW( zowY0GXDB%GkLey{_!v`Ii$65xM!>!I?5-6t2Fq14hEF)$EOC}ImQ{z{r>vFD)*O&g z%Pj#?YJ~NSk=jq^(;;8)Oxge^IHDN;t!Ogi_T)xef4BDHXz0^%ifvWB zzdv)fm3g)@WFxnGT!W&Dd$xJ2nF8{>h6x}~NrU}@$P3NRWa7sl9tacQwA#HZZ_XZI zaL}4lH8e>gcREN0N=fv{r^2ZmSzxOb46u5EaUwSZ;1j3T+G>;Q_y6{BBEv5k$-1om zI9bgj*auHZDluNAwc&NinW6&LjtW_sfwHSZUoj-v{m}6ZRq!`zG8jRpNk?$dlk(Y9 z0$3d`1fAlKO-$&la3YlLvB!sVyFsBYm9DWFpX&TwRtHEA1jZwQht>gST8(AEet5++ zQ^O-+Gs`uS(8(G>4j^7d+ESA-P)(@kV#p35q+g2=(Tu1iBo#b8e6Y}U(AHrb6JkqV zh`J)QNky)3e=YQU5lr=nTUC8IB?qFoY0#Yu9V;U{2ZedJ_A557_9DamHU)NIjH}t$ zk_MfC&yHds@UOES1477J^7IlCPZ;dg44r+a3a2HYxIcun*Al?21Qct698eoJ0SG~n z8Ur}A#K~><+k9AAzzD0EsJ9E;9Kit`NL|fKE(SIs>c;MmlP}Vz^uU`P?YDir8`-vj z2vTK?ggxhBStVGoe9)0_K?36jn=fm!3Z>kJ#-sddmp_`s;c*pi#H1B8QUjdK;UCtj z=+XQ&y(rKXH_%-KRDO|fOn3&U7_Q+nILZ##i_hklM?%+{3MwE|@8cR?)l%cJ)<7hD zt*fhS@K)&NsydBL@6RYQ9m9A=_ORBL0vygEJ+5J#iJ4&D@+2iFBYb5+x^bPVzCIu8 z>|3vS#+QYj3LtUN_BA}|A{l#57NpQED&Ggg!1spDU%_p9;x?H?-YR+`yn57sb(vLD zQxnSfU+p1kBdYL_{NLe1|EwLYE2Ua?N+SLVASyfZX?*4Z!nt{P{6zM$4d66v6m$fl z91_Rg)u5utz6pJL5-O^4`MA_!@yLE6Y=9V6vG2 z<|l#z_XoIdS{YJ6{>yWV&UwA*MX)tY?q2Pun-i*esImGIzqLM-60*Yt)(yDXyG~xp zW+0vnUlEE;pV%B*O&tUK&2YfWaSSkQsY?#~q&M0v$V+prW&XCWmo~R0_oc69HMJw5 zuJk@GFr<0D0>K^)4Lq^j>zOKpn2D11tzVDTSpB{^=1Jt028FNpXmsaN5%b(xXrizm znJmK{nuxZYivcQ3k$eKMg5XdjfGrf)476)Iwf_G7lXgz5J%21U;a1}+k=G?(_JmmL z=Tzf2XIf(*!TwPZWL2q#M|6HDk_dm|^4`Z5(1|IvDc3n0xWRm0S`4HTl=lsSBxFJs zUwq}`u*>;YtL0|8f~>T_n-aW(*Bc{d)KL0bW#{=@TMcLQD7J{qpL%hqL$CkNZ?!Z$ za`79`Rwf=-nxghhvzlMWlvz8DDAl$BsQ1yMp<8z#?5SCC;)@a@MFr$l$Lb`)f;-Dp zLQ6FAuko71$Pq={DQE-8VI2` zoM+rcWBHLq&BKbeaC~3Bv@;iALz&lp?>szagb@HVc+Ha!Ca8qk;B{`)DqL+#Rxo$A8JIVi$KJx5Y{$uW$*&CHl$C09y;Q%gFD9H+ zqG|-y#!XkQMD}J3blB4XYWsLxZ;0*AF;V&h6<;5kyN|t_;muG z021ZyDM2`H;8)NY*F(nqSSDJv0&esj&rdm{QUa7E1z&Mx?^Yq|QuN z%Lb8|hq47aVvSBP!91%8RVvu7lPwEYqB28W%nCO+dzjj^rU>EW12XDtcIhtF@affz zy3HvJZCzHIIfD#;hh(5xbvBAJaP}~!!hW$qfkIqCM?DTW&{a&Voh9`k2mK_CkZK#1 zU_MJ4v5JPT5&)txeEm!jc8$7OkL~V+7WAxYH8P2TwDG0&1^5&m(-OXA zicsTEd{$>tHY7J?G@r4TLj(>?kb|ULRid{Yp+KiX78128R4N0=(~EL5#DpG;ip6Ic zYJx1OEI^9mO~fHK2|%P=a`;?3nm^iru|F=_OHF05(r{S+#ew$rb`-w=Rm(`I4wd>1 zPIrItv8R=Qz@MtxurDFH&~O9<9uGn6e0VP@Pmcm^t!Gr4>0)dVC3%8<3ZI|C>?z>3 zD4JHanHwJI+GGD+U=dwqM}*?KV78qM4>z*3FP3x;HWsk(<|_@lHP3W_uP`9Y zKWb-O}mz^(I(H3ZRcT0cPs7P6_T9nLi7y+o|V6FK4ky4b#7-$H@s z)l;y}k?EtpSk`=z1~WM4b-wz%_rVMg4_*Y)8aJI1ARUXk&d8u@&3G>vat@r(4!ya> zpB0MpXNEt>{8^y~vJd%bus=ZHX`J(nVi2OJ>%5FsBoCk6`_XfA9mO~;CZy1D(; zs#xl55Q1JoT&p_0Z8sw3k#QNp@C`iqnzzy8*`$?LW7N97h)F=#_(}C)Aqrx?vH6{? z1Aj@27{;!NCYyTb(*+x{#IE%t4Ae$@z|sV(=3f>HF{El;t=sr9t-qoc{6(S$(Xnt2JWAg}ZM*Nm!83a)d`?OP)&V2Y=As(3iEH4%i6C14&`c3yY zj&IEdm3$ApeplHlmF$%w?sNsH@mlYE4L$@uJ!NigW$~O z)HVs<_Vy+31uXmDQ)l_r|DGJ$_dCNNxc|TJNB>`5KDbTs1#M?q3h4a5gH#ky|KBa= ziwmGs5OHG~;j@v+2^0!R_3ZX8Ulk=*bQHx5@5BmtU5YUj9Ac zVF=VqH(UR;7Y~Xv#)pm{!>E_yaW#8ovKVMD*hxGBNF|}d-0PArd?RHVOH5R{;_e@R z&yWAdl)tcJHqZ#T~B6~YTnat*I&B+zO)zt7z$wHM^|tKe^#Lwk(_Gn zmt4lEnp+Gaq^4-PblxUTIt_I8W|bOMX!=2NG`lqeAiXZzt8~>|T)RnS*Eo*TZtOwr zuSoqKV|OmmT;u(2Jc6JKK0AnI)h3@ZhWgcQK_Bv>ZV(BOFj`#?^zb7s7-hxyb;?GQ zImxw>{j*)*cfW-69^NRpU@X}5{NNR&FkbttJ=C10q6k7kLrQGSJ8!-g;EV7+Wp{3= z4YFtBq7A(vQ6ZeO0$F5Sc3W;)yqc_s)I0ZPchWh1YjNeW7Z*ibLl1^o#6)H050mU> zt`vE%8yrqdKk|92;>P;)O_veuymCc@`eTxsSMVial_DjWgPO(SX`_c(wGW7brwh*tkwk0@|CRTZ@8dcM>vw+; z;^0`|B`IxqsHi5Rdoa7xvEdR%)5Kk{@TAVFWlcx@@54rK=jqXR1}Q?>7Pw~`w+qE> zXa1@3>GF)4{eG9O?MBYa@q^niUM&i?+TB4TuPjE@HcCR?Z(iOuG>Pc?(fZHdo0SLs zzz^V^13im5(nA>TCEJ?yHc9_$hi=;oU2YSCPtX^fc_cg-VVZAcsFG@7r7(T7+kWki z{!oc-^2(jeiGE90iOy?*=W6aCFZF!22?w<0#w?MamU0ap`jYG&U1DxcKNx!4Y|0(< z2tJ;izN28jO|yKVb{P3p8TrnarL=(uAgeQ^Cc!i7Oz<% z|H!!TOt(8K&-|JO;%xu*gNOXQg$7308olI?)(F2dK!RuVF$F3+t*iDhr4&KM6E`v( zqODd~rHFeC?oLsSnq|i<9n!$A&Mt3A{)Y_)vdd}a)%g%i=GtZR4h?o?(^D_Rn8ZHg ze`fBtU0#44UTiGT>sfiykd)!Bq&NsN3Z^t@m#HlOwY_AzcANWGKka0yrT;i z)?ZPza~<#5#{cGVVuF?;%Q3hTf8+)-Vbq$8L<#!$$;euAu7#ux`=8S2hhmGiY}1Sy zemhZNqrI{-r8d{jm`y;gtC7mh98cBAuR1n9oM@`UDw-3YUoGR0VnRZ|+F!T&r8lZL zgdqBc7?CYJx(YV%a^*EYd4x`tpMqx>e?9%oK%=r)BFRo#Y>0?R903jd-PJQ8%)3|#^{`lH2y%T< z)Q73~Es=f+yZ%IB5&wMX8^0}K#ZxkMPEi9xJ^c35OdJPva#VHyb`1FT`P=8PH;kJ) z`D4!?@WH%n^(mh^T25!M%OiEL}ljA;#B zx_+=2;cN3Sh!+!?`lr2S;J^ZIWkGwin0}tgycGkoYKZNB zK{PvC7mpy$8~2v7S|wG1PG@8O&?;kM>))8@?mt{7$jic3QbGJ6hy(D01eroiHv`@) zWT42e6-A?MCoi@&{tm_#SOIg}a_kd)S2F5pY#e5b){C;{RDi%-X$NErd+G#^9v^uC z7G*fZ+!t{t1Lxnm8&syKf_9X-in@8gNmb;Q@Hr!6;hEqg9kUl@$wTnLuw|oaPeA{~Y;Q zOh;4=H6aM6&}89XRI2OsF_IAb?&nFujmWHe+K}bu0YT$ccenUpU_%bE*1alvVKLw-H)9T|NE6O>_5!{!yK8RPsS-_?vTXMzfN69T8t7ywJ$T9g)l0pK=~ zfvIs{%qkf)XVfC?b7&JsUv(zRQQ;PEiWV&G-;G=lMW2w4yjlAEfKCXhpk(=kVA+&D ztnnHt!reVSL&B<)bQ4hA0}vjuI+SWJ3Jj4T2v&zDE|4|c+{o_r=H`)+ETKGEPAD2N zi_;F@as=UW9$uDM1w@l&uNF~c*|(|aoeIEf(s@?0&*;NvV~pzoK5hKswMbE=I79Aw zm*svVwygFyhur+Q3&&VDNe^Y>tN@31>KP7A+Dld{V&0^T$~m3WM>0Birxc8PPw#iu z-s;m!cgagL>c0H;Vquo2_?h#xSDZ0Rh2YHKhG_fq8*}S*o$))3TO}qL*6F#A3use1 z(uT5X@Gi^j2AM9W{J-nfwIrevx~KX_&x42B_?2SI!Y1`c70WCjhaYX!EekEX#vE6& zEa=dBA&|4ulMF3Rxu8r%mbWn1o&bV{yb=_w`8tg9Cnmu`>>8&11Q!It($OFvzT~z9 z<|f9N$dDO1<5ISU9+n5yWF|(bf_xeJF6DC0U>)|}73o(Amyo(%O5ArOy%kur3-PON zE-QFG>#)u-G! z$?~3!;^I=hvaO1{Y;KI$DT`Puf9SaWU$P)~mxaLOsJ}3k58jO|!Lzxw1BuC)VJHe;JfC5=Tai1cPmaWKd z@r1HHg{s5*6%*y@LetC2XT#h+xueGx`T{;hece6FL4-o51xNLlnB+v$ z(~;<-lcFUNGkawz_YukGz zdB{@ch7~>uqhfKV7_av9+p<2*badUatw+M!T(PpUKG^@pwz>X=j**16hvOW+KXI%} z))ORIfMqg(l7sM=+xnXa0T2>k0!JoO3xO z;hRyr;Xj7g-Gp@}9kA&TQqFi`*K&?QJLk<`AyxG>^?=tY-XT(FQ>FvW#iJhhztJCP z_ITD;99p}1Uc)%7rsd7(++xjg*R8;{Yavd(b@xFA#m3jKg;d#{V=Rz5j=j1sQ`FBE zY`Y3V{A!F?+NB+6n|sT_8|9=D$m^vGRiL@dbGF}nfaKNkEE>{iXW2t%H(i0FYq`S? z#cXS6PlmAvMUdk?SQS2SGu7>Fc89}a)O?(y!Uv6!GEE%N~^tY3Ih*Xn@6ZOuK z(7h*9l?u(Z7@lp33a2d%V$&~GV2&BCn^(Na_yh`7YxZa_y|*Hq2ybOJE&9fmM%yPT znNzJXOA&J}+t8}TFb)hyud%ni5-$vh5FU@9;#l((+-9Zm=;*83uY$_d$x%89=QlS6 zJlRY`*dOI(6ZyTda1Iy|z(TN-;r{(eAg)8wDe$&QR9FA6*}qo44%S_ScRf0VsVWo+mD616C@FHm2&(H$jg*3e&yDh<-=a4gB!Q2zenje{<(0KY^XiZ;J!L? zFk>v^&f`5-jm`$1>nWT}dL}bwY>t2Ib|Fsx;?ZcxXR&DAtPb7R`Bx`JPQD$j(jP59 z@yOw}f6cQd|M~rHYnA2}{X7|vm1lBuY)aNO&mW!61}iXMwKG#1FEPopdd`~j^{153 zoLh-IKl+1{C*KdcUo{T`=Jl6_nMVyCRm=_vFM5eb)>`#kl3Fei$o+w>Ie`sL4V~^! zgLC`r$3}rS^>v_nY#-zmeCQg_<}_JUdmVzd3u`ZO5ST+HxQI~bQ?iWg6{gZ+N=3_k|(KF7fnBj3ySA=>}dPJ-nD)F_TrQ+ zP-2^xJozeRe!`z(W@0z3ryV>L&NbC9d*6rED{w^=ukimiR(mLNr z>)wU?hHv7f?CM_LX~tf%0Q+?_Sl$FU@Pq9csWsf+?lj2-`|p0t zi$fpIMJ#q$lywqsA>A#OyYjQ!-v{=*&_t@eSCXKK%kSh=Uwb*ixiXGdPQLPMOe&#I z3HHZI&GjEI9NmL>)jpGj0Q7tpu%j3lYSM@~A23#bxj0adRz8eQ`8p2!^qd_3eE;UB z)td*p)?N2-f}R*&D+qZb1WO2c(n=GI@^L@~PI|}1KVS2U!FZgpm#rEMk-bd#v(H=W zc6#tw>y6!^_n9Y!=7X=i;%R(8pEjg9v@1Mt#gIU(3QM!5>}Hgm3bvGZ$USOI0d?Wf zdpFv8zgSfj*D&oKU;{kLFD%&oP^aGC=Z97;C@~tnam38E$marN{j903+gPEsxo4%# z2@7^=PHBVM5udujgwuu&pEb-9tgE89FTAS)b2r{O**a*0JRgXV7)2#J9X4FV4jJAz zGSoN{wa4A*v@paAbh^~1y4cIP_>&IC?6g?Xbg{6``MSrR?{(z+XMI}KYT`WlQjp(T zZvW{+&GI*w2uG3>Hy@6!U#yN2>(BN|sB~Ye{r0t0zu(qe+}R?)E=t6OY%Fnqvvg zmCI||@928@>1d*StyK7-UN>pA1S^#hwR20UtHVUfefOpE@yew`dk39s3;-L+F|1g`*yuoxp+iX zSYpT81TuBCt?a$DoSa;Az=D?{CDRE01 z*7am+_A`Ay%R4S6xCZ5XlY)RR#~z(Za1sot@Vtdv+aEGTyG`29dHz$ZV}Y`J;<-7l zpcSXTtF!Ewa$j%o8D`KY$XK*}+fpW$bO zQ^Y*8?aWmQ)Nf~%_=!zDxKA8>JrLFED4OpS=fKVutU={8v`?7^!=CAT=+>RJkN~!yer4V zzo|JI=Wphq8Gx!xJQY3sRZlO~l9yf`w(#@89q7ZHh`*D+{W3ZB zM5j(7XPACJ?CSpZ^TV&tbMo)Gd3+RMzPtFywD{dKlVPz@oIEW2S0tKs%hu{rFWcDI z7))zBlS!2n2(YR7=1B<;8$?P;6(hOxC+t^VBb)HuRVTNht$Cp;^>8URcFq zFt3GN@4m2H#m#r}{xVi#R;Akb3G?woZbxTQTm>=vuFK;Wjn_yf*7W7`r%{wRB2 z{;MiSqVtGTWfemb2!U>h%TEy<8LhjhwB>^peDyM}C-&NN26|ntXU$Z)E(u1kEBl}& zQdl~#<5TJJEZXJX1Ki^uR4;LBgIXWfm`IU}Z#JBGyF1V`QKhDl{%rZY&M-eXU*Bvn zNg-|PaHfL$(xFZV42hG!FGCBY^qzR8%d#V@{K8^NDe+hY`|RfDh^}e;#k4E(0*iHT zjM*fxFS|))t66I4ofA%ao2ZbYSz10^JoQV{RBDFz?d!2?Z))#+v(|rf+yM5ay5`+$ zrL&76XT9~=B^0#uyR2td#cIcIR)&x0MWuS0*k7Aay?pw&b)3IHnb)zAoE-Xxxgb8H zk0aV(>iB0LWY(EjRW?J;2z6cl8Ee@eBKQ(*Wu40DD43y=)#X>zVZ zY)+}pSM=gLg}g6rnAk5_OKp4O+(y&ytsijq1aI-WxppGDe#NkuLZ{-nTZ=VNxJ)8_ zu+d}Wb7S|cNSgSUR_oT~tH-Jy==z>{JV@l(I$srwx{@Qx$zM8tF}u*~5jEz`{pd;) zWr>`Z;bQ4Hi;ag;+%J;fA~J~#>aJYHec?ARDVE%ZGAv8S@X0ZdM+z%Kg=1%VzG%tf zd-;&1uHtU_QN8THd%};lhx}7UJK9$RzBq#8IbGGg+|X53*%`{@{Si(;3Bez78`yEu zSH>-;&Z42+fQOpvAVQLUS+5AE>83NsQwNav8%G)8R}c8OVUOmNc~EP>*RMR}iKEA}F>#kP7*Zu=jclfL z&tE%^N_`dl@>1|uvV$VJeeB!U()}+uydhQ$zUn%zKNYcGaQzZ{e=pnDKJe$v%p^a? z_tWb1JN~i3MC@tY$I1sda;_69uP@FQ>stepeKBNcPzP6Ryd~q7_LOh)Xi=MnowW1Z z;~$~+Qo3qry!3h<1}>wgy`X*N zNP=8947fWyfnuI$*t)Dq0b}le4|irVM8k%+42c(V6~q7Xdmt1LZe62RM*&}{bH0K{ zEMFMa^GIM!ec-O-s!09HwAqxF6lUd1|9Y?U9*-coRt&gF%sJ#Ag|pHgSOGUHp2Vid z3?__AD#0B4PcwYMC5V9TcL>ssmK2kaUwSD365bgUCbP9j_%h|KrB$8A+jOKoN5L8H z^vC4RgVI#u%@ZdL;r)I$=tV`7_`%{yK@HaDz?Js}3;4!z{>yPaLl2pvGkJqG`Fz}U zm3}A%S}}j9{&3^ne;BeS*a7X7DkO4z7#IG17bT8Cjo*3V2nx!?Vqkl!*3HrA)C%J-J6*ICHcz@$>wxgMtjWSz{V)4}O%T2l?;o z^GvRgKLP3xF%c7ky<}(<<(ZWt-V~vmyWok$dXWf_kd<#9U;XrlEV_ztPL}ta{s$Pc z&Wx~U7Jman0iwxAe^;`X4(-6{#x*|0ujD`d`2PVu2BbLTc3N)jJdM9pY-W}KlkFV# zs=y$I9jCi57P_m?e@Lx!3~Z(4baH@|(kHS~{v%~K6xnHq3VwX-vZeT|Prm(fGW0;n ztGjV@nYraasReuB325QM?x(B5_es`{@qH;h$qa3Ji<+sQPPJ|;J1xG0Lq_R+@OM*) z6|w(12TLriNj>I5X0O|X|$?>VMod&d3iK5J=`)BF6r zyHDy^bj#eN{|D=;)Z%WE)&so)y3VN(8pE;`%Z1rD4~D;#iH$H3Ucn>i;*K$wJR+fB0t%b|B&R1>3e3W7Ang_$8#?z z)DGt`l7HIPA8Si0{u1W-SJc)C1@(j@b7p%_HxDU8COww$$Fp@ue_j77{Oo=OhJ0AA>gmAkm7}dHHHotLThwa}VTe7dU1b#}kH0gHNS~CljdEB8s zNJ)HPmXi5OAY4XUK^9&`f+CvT{G&t84!QUF9TPx9B( zQ_11`)txDLTk~appI|2(`gM2bIq^Uj#FYWw>Rn1E3ZICm?aepyOAvymr;<+bTr>ocl|j^oma404ZA?_ zsMqaoN3$gEz{CnhI>fy!;@vEQZHKSn_)~#pgKrysI^z`Zx`mVKE_&T;p_@UsA6tu; z95MKmmA`;r&|I6HM(IVHyKyu3(JbEHdbj`F&;`#E$9G$|soNC`aOL6@O6c`t9xD~} zN)YZ;L-OKc{*_8uQDji!A;r;+xFxp5oMqAZJgcNX8EL!goAk?*{3mJR5|*7)E%M<& zo`XRB+=7a2Ft;5Zd}Jhpm&LgjWwm)Mzh*R zMXi};l|Fe)?ZaaVnzF}0zL4Yj4t>+oeH*FwFFqwb6+dTl4LoH2eRe~I*s*apenb!U zML+gkw8_D<9;G?~)+x?A^kREvhbLt9MPS*1Ma5tc^VQMY75olX=-Yu%-p`nrn$v0o z4XVPKQpo78q?yyR+K!|Bk`F3%>=H=rGRUQ89)y&$IRwkJyOSZ-k0t5Xq)hdE8RJIZ zY#l7EfSk@|m*$BWo7&5+RfRCI*b1+vV`iRZ7fN!ovmB-)P2(!Y%<*=ATY9K0zqn)R zasfLLh+4MG0vNH<1_aHx-Gzujx5IGg#NNr##9=* zRp$zV)~fG!$wv|Ao29u~{=Q`F`3s(?%%#37wl7YkPai=1xL^$krav%VX7cyG=t2y% z<$dgNbaMC&)-zUGUFmt(W7W3k`3}WX-x4zs-PNL>O7}~JBrekafCyQ5f8bXWgqKQz zJ$7~yjaChsndJJ!BKC&R`zqul2@ic}U7C6M^cl5hz3jNd!qaTc;@OZLE2()m)_Dha zQHY@3j}Gkktmj%)QeQx;0c^f8mXq+f;3iEjjh=rU$jm~FUK0F1diwIU9;g-({0R+j zu=7<+H;_KlY= zZv_8+p}aY!TbPHS$w`8+jB=Yq9nF#n6a?`&&o-P*;1*s%c$0s;b3BVDN~B1rF5 zdX=j5nkWb^KtPb*rMJ+F)F?%yOGzjJqVy0TQbHh*( z8RZ^h+(Vw~y;U*-;_qMj@&G^zdo+&8km@VY%I04r#~!vmbk09yHuoBb*m-x`m63yw zVdPT#QTu$wfga=up)h-&F1C(}3skQjR zekET^TZqw%<%*mj1mt}2y_0}Z`s1!P0`g{qKpR4B&pbw3aCS5XXa3%Tc+eLt1)(z} z3uVt;0$|Kn9ZH5|=%@rgsi#YZk=$ks@j5fG3AW{EP|hgs;YU6Ow~CoajqX3G5&&V5 z{BTV(*c9XUu9(0-k+SVq|Av$Sc91&74tj|}0kD{IB0{KqF!b7iJe*Tp2DS`z8Vk~C; z1&%tJ(YgI%_wVzB75`Bcn6CH8sJ|(vxcI55S^1MDL8kC^=4R$$Rw?Cf|g?WX~?rl7Fm8eMxyK`)o1HsV{CLkx6{G2s%nB0{-*;v@aZ%S-!WfZbzdhn!ke zA$AnFog7Zv>ku@OU-ka1zS;0KOf}z2>|{jt&uV`w zd{w8+Im76Z#OQXEIRCgdTK_ESS{>tHCHuQeu5~)PZ#I^c&YkIPG8iroRaS=w14|mC z<%cjQAIomAr9HQB)6) zn&6T7LTD#R@|0x8C5ODZqu;^8{9Gnpb?X^@?w* z?hf=6;PA3c<1{Wc`X-srg+K=trT}0{p<)${@d-zM~#k{(!`gY43%&B0E zKlKp=Rec(OpyuP-a`h@^N~!_h4LZw)o#MrSAQPp&Ke+iaV%|OgdkC6nsTIIZJ46-N z6$ux`0gySuJb`T}6TnPvtzH?n<8kebh+{#!xaL}(d&&DG_bDW!XeJZ923hS1M|rMe&4Cuq+>*YK$&amM=hdCRf2#ea_9ftWON3x+H;YS{}z zXPR$PtbBF`?3PN)tYm_WFt6a!Qn1UN*+VYS_Npe9PExJdM(;SPmY zJ`7FkW)kO9+Wpo^0e~(QT8XCajK?TLBTw=bS*ZZAK%SB87as?0VmGJMQv9ao<3-xtHm7(G?0$>mC>>cZajPiNCcWP2<&>zQzskCbjwS%xKD8ixq}YV zO)+AypBE{8hA2;-wGu3oqgnveAN2>s;pclDw|;zz5Q2TpY6YMf+JBe=|H(F3^un*- z?W25ix8&U`9I8pR4Fzjp-O@`g-=V|hEKn1IY9f+=oRIl6EZ;20%Ta9%cWbsqI;`be ziZ);mpkF;;Rlh$w_!BBdMKy4v4QC*?5Q)QbY}-4CqqreGDx~O&ra#dax#I|kXbJ>l zPB;}*Sv+ySrIZCQf5Kddp_?$vl$LclD+J{FPTwD%CK^NQy^{vBEeo%+&idL~0{Y)R z;y4CHM;8(WOvy^@Ph*JXAp;0mlDYSV0FsvX2!xLy^U&P{1He84o!d~=vLH6+SXBaA zgi40ucd+7Oqakm~V5zR|EvV|A3(xEwh5N)~ht%wx>?Kim>K7M-whI}1F$N|ln)Y}y z*mJ^ril5sLUOT3yYV$K^v@C+yGdC}X%_LNUEKG9O% zDNc)3-3ZmTQOL=BuBWNzAW(9CF;{DZL(WdGiYa;Al6xtlYBhS2xpc#1c3Px3**$_- z^6kLnB>%yJtJ+#F%i@@tWn;;Vb$x8R)=9QQmViHFswy`+FtU(g^Y#4=iRX2y`8T zJ;E*Q3#xSvp&O4&i<2?hCod$yuOjsuW^~(9;O(Q+-ZQx9!gq>#JBI%r!MaU}V4cxb zkj&+`7Gn@_u^lfu8G8k-#S+5g90pJS8VR_&#z3UHIj|TOLU?kiHC%2jPAt!rW)09t z&fj#64dk;=GYXb+*F#;KHv?si$iDquzD0VmU&{L6{0&Ju7KQOK9^ajBb3T2J*ec@J zb#HnI9J~iH=er5bb`Z-MoX-+FpTQ@1X7eGm3SDkhu5u}HOGk2R2*b|P?UY*vNY%4H zpC^_-<8&i0gYc@4^>*&f6eVd{<|oA1?3>+DuoK1kHj9BwB^fy{po_S;6#)F9#6l^y z#+%`|^QfHl2!GxUG3?WRcwI*IDL#(rbENl8ChHdofR77c0jF*QP{;XQRdg4D+e+{& z2Xox-TYK!w@)nBPE9lbGU9bW?1%I1+2vp1WQSJkg2T8y&XXq=jc{BPk1BjjhV9^H= z3x8nX^_a0-eR?(Zl)}qa|5VL4?A`b@C<8Z2$@)F;3D@Mf2l_Uvv9^GhY%HcL%=qxp z>u5`5;xbNE^M>XBhyIN>D}zu%b8&3@ze96x*TZ;tM%d2q0^yA#UHo07<1p3jYw|44 zhfCD0bc#OX*rx7(ZeoiIITF=kX%E0!j z`AJ>s4;)5q49c;7YBJS;t&lKOGIBxjiMH(@68YWj&LbHf!mCZ&MbujXvHQkP2WIY~ z%(uOc*8}c9R8mJ2@I1#aCswCDyR;npz#boMzs(Q}>{sQ0Fv@wmQ3g4FU(Ro|GV@JF zo5r8qIx$uy7l25Ma%65p&wEM#Qj~Yj%vNb6z|HPF)VEnzaT z+yHEtY{e&E2ohbMw%;DFssBT78ptS{34Oqa$F){odQuH2PE{U2ar#9(E`yz0j-?oI z-#HA)V4+*`H5OVLWj5kZW|wLG?-LW zc{g%!LlcrgA&2KHeT^zMP=8$wXzV0a)UAFwx4onLU%$>_MNGhBac!`_FXhCbFfNeM z-`PD%9Vg_DZV9!ZKmj}Y#8*T5wub4)DIa)62#(jRWY-AW=DxuDTFWck6=^3Li~#f=3V6~X?XI&Zrj8gNT||0gDM*EDBTn-tHM&g<%f_D<12 zr=;HZExHnsAPACTqiwaZVJrx; z9cgA#h+~56BnkqL46JI`fk%A4x3o`jk2++)Kxq=+QdWNdK(h+Xp_8NQod&CU1fG3i ztd;eEzEuj6YMwVO-P#_AX$ZqDFJ@B4t=T~cSODQ$_PY+$w6V^ncCAQ}13gqZgm%wh#DHOyX?!WwzoPzV=j{);i2Jvb$hXEj8 zjV|o(b+Bj}xjA$Yook1H5V$an5L_U+FtM5S)H})#Em~Hl2r;(`_y#sx-1>eWZE6In zeY;J7f%5%302w_ubWs0{@`fULD6{zwRP=lwp%k^fbz@h<|LB`{pj`KH^T2C{EoI%P zoxeqNt|cI1Or~o#yMG6}$1JXu!9+8hJhe@{U^{M>+f*8<^W*kqtfO6 z1a(t?8j)pX);azjLkBU{4f6N9|5Xe9?|MqUj$~5kX4nGccOKtIRYSQNO;imY2-UbO zs;K~3m~G5}+gAs0GxT{<&)#oSHtYxRDHkc%EBuwD3-3<^j5^*g5h+b#0Gon) zjis#hwMBW(0XO)r0l*ce%MgD6q26_rNG^YOO6Mw;KUK7EJ93xEvB-5`JJ}2^#In+P z^TWXVB}R3hTx`X^>08}U>!pxG?|k@a1VQ5>4-PkseJEE0v5I#6==8LkOc>VL#w4D; z1~hc>@BadXbPE=QJ=Ey4Cqdj_#(agL5OVkpoex-ke z5@?3V{_R(`EcM-CPfbow^)74qH(c47XJebt-ifk_*{x5Im}&6#SoJXQJDSpct0Ew; zXbDo~Ne-TcEl6F*fK=|B835vu5&l$<3D%M?Ug!^O~(ArJ7;e(wf%10T*zlXKI+$rA2&X zT|Wu>1;`#K_i3x-dyguoZ_Zvg@rp~I9++GU@b%U4K)8r3fb*kisUibf*WH>%xbvvZ zZ4MjE23mjawWa{#R5o^Na1#s5K2K3T^Qv@46As3Aks3QURavcOA=R97l2<1;r z7am&goKmVc$#uT570|RwCzFP)X=}v5^mtr}m;{O(x_+ypn)H(?C=Z8SU(W2Upl5o^Z(=g`fDJA;#?^f>K%$!&bm|equoj4G=r>`bSy}_pwQ)<;B-C~ zEml3%UlzF-E^9(&1mWY`8UirpEpWyC1@;D)?*QUggcAM1sUKIDhsn$w!!8I31Tf(u zUpdyBlsX?@j!OTTaWGP`uOCl&sASf#Ju&nBSFl4c)@tCwXlvViw`aZvPzUx zi9)Ge#bf85PkV8NBlXY3Hbv4h`#l!Ui=JI=$Z%-TpFG`YKJ+4MoS{vQ=$aK#4UB?n zyX!6#0t4jSJc;O*w5z-j^6*bLfbwlNB`a#H=R@x@$w}zeZ^7Ad3`5KFJ9o*N`cLWk z&yd*Bb$@^GMH341tAg3Q#8%+C2}4X92RIcWQ2)>mWP9t#5Xc0NUDufJrh<*N{h6-r zM_VzSQ3pQWe*39SXo6G~MfzPg2V@r3 zu>HH>^SeR%Kt8%M$LvguM4zet;V+Mk@x|qaUjI~J%3r;-b3mA<1|czg+mMc0Bh1-R zy6g80$@_(%#M;%QOv}#*^Wk-~iK;^&L4F4-<7SdVS9_(;K^xd0UsC`W#cv4J+J}YE z7sa5@p1)Z}J{+Z0;q7P5tO)k21nM0{ns*B@ZYFI5WqOw>@(>pxK@q(3{gq`9-w!Z6 zl2pKV_q3$WhxSGlAQ7lQfWfUy+kUF|?u=I2v*VboyGGt^fsGEc0@<$FW^Vmz577Fh zitKYdm-{<)>3tNM_3d%K3q;&O9&axODx-h7I(3~nHUTOWcU+9IxVxDF;qWcuvCL>m zcFA{R-5Z^3lCd=TggglcW&eflGG6Z!+mdUYK*0C@Y9o0{f;6*?3k`?$%*FsIZ=R^B zfnp8MMd0jaL(gxQ!#qBibMAN}0Y``sUFAGAuVi3*pV2lUzM;CFzP{>~gu?v-V~NtT ziWe_R`p3rd%1z6go|G71D$=~I>g9P{3~&=nQO>1qH@&2cTI;%bgI&GaA1@?$r3u~R z;F$n;-+7ei%^&1` z>|rvnGYADz*JscjSc8DKYYz>TS{Xl3P4VGp(15|rqJ%yKQ!7j|BoDXyy!eV*d1GOH zTfvf{_jI-YnUZ&g60>~I^O`tkIfmB0B603#*RH{=Bz*1(1NpoW)nArwu@T=teGkXv z8q?i)VlVptgu3jKSXkS5{Zz@HNL0758$(az&TRhyxNg^g;Chahjmer zOI{PlaBj}JXETu9JWk!5oz}W*s8A$`3H?c(0{+2WHi^kIjyi?5)%CT!&3;W6et3-Sa2}!7z7*GdM}OM_2Hq-EoR7h=Uhf?| zEth+k5D1O%f8V~xv=|zJePrhckC30bh8C`-NA2n{7MsDAN}1DL)xj`buVRO`T2q%Z z^XATa)M_$Tlcf!mS<}-m>F2;No$`C6+n+^0Rm^L=MrqG*}2MZ#9Rhb0YNkX^+6U?hFI{m zg6>_3DPA>n5?{&sBvM1VS2ecYFi}E87Z@QFhRo$DR1A*rPLM%_hFny9(ks^N^_4f6 zpO3eMH;wUW6yy8kpC-WM@d@LSU-r_%%8Fqpg;&=MwaeKO1vAaA+=gJ9p8>{OYr~5>Lr>RZSAD~RIaW= zRZFURHFm6Rlzg$M@6)@lD}cod^_-n{rJ;Id8G?H|TO^)FSCmvZ)R3Vwvs18DLmtaAMmfWUb9PhN;*=!R4{l}^ONCSl7A z2WjP0hAS1HFK!_7NJ#hIACb_IoV3=vtLF)SFkc7*3$7Vv9?HBgc-O~r^M@=i1gZA{ zN~M|g#Rx*Y+ByR7gRld8N*H&wt#>oBpWQl!f+2mjdO!Li!)F0$L8N)u5MVj>g)nq( zs}j9Llh90sF@L*-`s7eeN98E|xtV0r;K=R9-)1a$T01}jh{scHKOBekMBrGdWY(y! zQ-^s8USqu`Q9)1MFl_VmOX`jh-i6+aT()FQ$bzZWAAcaW4LCDngwn^|=p%>ySTYTe z_HtC|HDD|QfNljztyH<6zYm6{xKOf2x43Z56aA|ReOMFZA}X?y6l6=Oohl?Bj@a-~ zQ8Ld#*v)|O*gSvWoTAXG8fv|AmQ3lWz^y_WF(Eq`HJ?G}RxK~|3bZQ%D%`O%_6BdF z;~&D66(Z&5>vyV7fV)B{w@mRYxBMQH!D^V!YL7dfq5AQn5oX_z?pR+F?#V+VNNMlc z2!ZN__&XN(<{ZV4kIv~#H}8kd?gn=IdE%WcSX_3 zvs8=cM+pH9d%63o7EQ;4o|t}t@|29C4GnxD{x951>0~&*1%CMO!74GvDsz9|PpMN-S@|srLOkQ|6UvljT>hhT7QmF0X=wvlZDUZiB{@e z^n{G+j!Ul|IN0Ib>!jw6p3;KI7TWk3IUaZ}!2kWdMqHP}C9b$yX|C4Lm6#Zk=0 ziv2@rY_LB3Mu|nWqUD*CAG#SNd5`z-Cobnp)gRC8Hsm;eFCXpBPPi3tcK>nIucw#c zdr|@W_YQ>aH9`kXzVvnFJdO!qd)KR6>>vT;^zxJnM^Q?TTpAg99L3Tt6|S=Zp^l={ zGXt^oIYo}1Z}cxWUSF?DFwMO(N7U2mp_3X5zSS-bE67`NT=0-3T%8x+U(iUxztbCC zjG`V!h5{*cLP}%4L^U0~8pTVkz`bK*`>i$orZ1i;u@Wqv%s;GZ2~K8j1`)}{boQ0#ca$3JK;E=0FYTq&0rKMb`p_Ou2DB)0`bz-S%uxb z)>>zit?bAmDwbM*s_)jhgm*T!z#bVZ>tIF)bpptAhm|2hPBlvUxb9WJ^yOcT9kgQq z#YH7EY?HQV>~GAAS{=VRcpFzhU%GnIEG9UN<95~+K>?;o2Zd!fuVw=?{Y5W-bl&5$ z;jNs_urp@>V6nr<9H-lMkcxoX%PwX=f3ENZKI(p%@lN?Z-ABd!Rm z`>rOUcqKqWQC%Gr@a3J}p-L6yh$^%;rAX&EiC5n)`IU|+%XgW9QUt# zuGn_iUr79Db(`-X4ajsh#h%9IZUO8=fc()rKS?&n*^#Cv+c3G<- zJy#+j{N3v?;Jjio1W4An_b{bp~Nr68(Od%)3G|=JIvk}eeb8|E|2hD4E8_C z9)nyT`4v536QkO1tEe8=+xk5KLM)<0kb=+dW_xuan0g+v`I~mqo#D8N>W#e?kCPZ^ zpH)O}8yu+x5n3N2O*H!KXCM=kWxp?*%koW;2sWB#yOAMKr1tZ$nVx&C=dA6B$HGGVp8%ya zo!vOf(Ut`cQs}$Gnl|EFpXH&g@7xrB^Dfu_z#RYA559bck`d6+K3Bt*ds|Lzaa&L^ zA=4f$Ih@Z7u3@Iub8+bxUiLSD+4G}}jCj7S(z#B%)g>w){yZmpeBs+ zq0%XPVnQLUQHv@u-e4cGao6tT=5>Z|IU+3^Y<-1b;<=+xu|NFsz=i|RSh;j=4V}AI5kH>$H z$A6E<|L5^|{SVgE?!Wj|zv}%5nw7ukSpG9b>c9Br{>8X@6C>yIbL3;nB(s!H0EqmX zIqtN8!9P4SYNu5yPBbOL`TEHR|YZZbU6R$_cIFIvLqtefnWT70*7N~FerK< z#*jZB_Z(1gQUAyA^*6uUnHoQ6Cp0L$`+Dm)Iqdi2R}e4(E74Pb($JnNJn`19ZJVg4 zk|bch6$(mnLRUBI2jYJca~^1hLxGNZlLpx96cnq z@Olx=*2~V{OO8{6kS1+28$sjiSw>611$>yS87$1PCy{?~H`JLZa-r7+pBG_K58En9 zs&+wogE&j35atpt{NNY!=J_zp%t)en>m%+G4NWXKN!d6X0qZI9x4%YNG)>sT{R7D@ z$6sSnIDilKm(>{#S2^l<+wTzeOIcS{zszZzqy=koE0r6ilz(X;>1WcGkLe{88DQL= zRXlD+_7~3b%WS~$%k}W-b^Tp{bvVP%wp3jX0){xb;(Wyv%Q@(FcE;d(${k>y|ag|#KB`l~0xCRDh+oLz~KtZ};eM+pij0pot zz`c8~JS2O@As(kO_QMb&r?FV`M8*h$v{KG9?1HheYnUe)TeB>9>odWhX% zzj9IUllI4uw-+&?+*$rpeOG~CpIhwAIDWeYgE(;WYuGcN@`pFmN?W{T#ux;i_b_+8 z5FaALB`!=3lMdsTZ>x!DrN6QJN9wy0pC?C@k2sZF2clY&-&ug()lrSnf4l2dsVhow zr0!)>9~a~$NX|6GmY9LqhH={f?QKGEdlLMV%xO;;gMOP=l<4qi2s~Yyj~V(Fn#2dr$y#J2MW~r7Sn)hd4{lG7)qlbj)%#Q9#ekL*+w}#y zNJ3;mRBN;hTkh7kwjyc5F_uQgo$;KzbF>JRm@=1CYfw|75O%+QF+^iWlF|)NSlAm6`$}H=qZh zl>8r$7l>f3 zklum~B1Zp8M>+2%+~)6*I^jm0LK!M5Sj)h@r4Mgk93phPwwmCVT*k~#T|uBq^U6;3 z5g1sdg~#kegmD%`k#3{+^-zDf_i8vWF0p7tPBd;D^&n`isvEyHQ>eD;fk6cLg@PKx%%_!u^)8Y|vuc zJ`WRf#VpdCso4egm&pio-Yrg3He|EYxY-ba!DrK2Yyx5a&5L}Ziu9=b7;`!fbaNff zS0=USdbhmZ1u6Ip{Xs(pn)NtK#$WZ`SYf6=VgCZty0ezobE1qrcB$$h^CnG$Ia;Wn z`yd++L`flF=PbQl{w3gnF0RXZ$)+ZM%XCfU_CMtI*9i6qx3c0QoSR_? z_rEEO{D1WUbGe)=bo#fxt9|tb=N5TA>fvwx@Q>8D|Lr1yTTzWT2AON*BO-QyNDoB_ z2tQIsr|WcpoV`CuR~!G;H2W_N{Pp2M%uP9;VU1d#qu9|E4qu%5Fad(knyTk$Gy>4| ze_bQs>@r0ngo`YjBRzcaAC25T2po~4i=rgm595;nDoq&-F6iyhfaz2l<_BLh9$?-% z8vI8;_|IH!@UKn}ppWtH$mK^xG%m8^u2kPvv3BCTr=sl6t-o%3d&HC zj?Pg6Vff z(}(y?2Q=8|K+@fLBB&v989n^i)ZTM??J@pt0I^CbCmy}0W9Aj%tdvo|_Hr;!yI)>V%5?S{p4KJxu>y34#XkOGq zFTQI9lcm}Uv-=Lq3tfChMX8_7Y?x7uo+h_U#%bad zE^D*RluH~B?Y|heW0!2jaT95a{@JU{sfWFHgA?A$f9(W3h!xZHGgI&7LVxM1w|@6D zGWMoURYpdTP)xOKQbunQO(@g7oA6V=Hvzb=%SmQZR zTT=j5b%wQSJp^Y!KhU`Gmgn5l{11vbPFnLTN=%cI2$(}oKaduY+P7+8*Istn*R~_< zg!^PBNKL#C3dAc}O@rH32I)Ukm2;;WRh&&vky?3Fe&R)1wLmNcJTBrk+!F6V@6{?J}*~P?KM1hOhR14}0oF?q7>EF-KMhEq~$Y z26DUS=N2WF1kGf<9XGy(d$bcPW-6)iF_%^!w&SxhnrmH_UlZEQi>h$rNmI`C7q!dy zoWWXPHB`S2L+{#GGueG~qvq9=%U+zpiW21sD*JHpZHX&E4<$b26yHw2l77wUQQe5z zT|b^y9;~x;a-eWx5hCN7UfTA_$WgWCGu)4=;Ae$pH4(QyiIpWVEmS(k#Je+z1>Bb8 zncB`bLwvbC(l_Tr$l;a9waFQ=Os=-H8y)p!AY9d$jS#!$eIfRBb#r#F?5~Mh)nUIe z{q8mz9MauC@2d4aUroNZ10rc{;(N?=vh(b4-GK4HDb0qQ9$q}Af6)Imq}@N(;9`>B zcTVKIB&3b6u06vc*i-pNbu!fX%H^T{Cq`<%YqqU?u;Bf=@Y#K8YdluZW3x0%L~~}R zstjjkzdzG&a?LkDAhX=0*4t-7|7k{wF3Ky1`CZBM$>&}Is34=rrS~-~akUk*Uq0Ij zy?vQje+6yO24BnOAC9ZURjf}zR;Lv#cXB1c{;o4$lk7Fpch9oF(JT^S5X?+z_C4%x zRLlz4T$pT3GDrCk4yi#Jjj2F6Ge8{kM>EgQvTWD2=WDhZ+-Ztp2na99LrQ$1L~Kx4s>&k<3*~KHa6y_wCz*{g7Ky z7-_Utzej4I@A?zmgUOJBaIx688A_mVR1KrD<>(~otOzFF>Man?H;{fPbED*x)D%DL zWj`;k-tOxtldPo4g_YuN4(Zy1$M}U!5OVjL zj$^QpwDxN|t7EeLA5V)__bI>alg+p~WDw8FJ?n68=Taj&hjbQW?oYjqFLs7$L@w}tf5YzDDk2O!4=5yMF2Xz%9e!py+hl(ewNxSgoukewD z^WIsb%J;$)7QjC4XXMGNgT!w24E$PKA$-X7%GE{#dbT&tXGUR5UF+OK=~7-Bhbh}0 z+(Z3pay2iP9*<+sIyn&Gp(Cm+!`Fg1>netK`R9gi+IdSDSejb0jd!kSSD(`9P3bs` z&mO^!}(TK z3$7TsmL9O}J}2*^88s$T4|W-5$h0HoP*{3BVhd_%ml1cp0o--9Sn;Fd3tB3j+qEP+ z2I;9uZZ&8Ts;zMYo>k|1pH44v^RxJf%&^_pj;o^U#s`nG zUK(Y%jy8cC8rip;>-;}0R1@a)%=F5u=O61`51&*s$WNc|EE#1Hvfl~*$R~9n&1Rr z{xPhW^~@*lpofWVj5k9v0NfWn1M=C$V8Xu-o~QxA+PeGn6$i>-TXzUssY=5JdQSRx zla%;ms>?Q)PX$pA34S6yOGvxTXOgLS<1}`4ty5<#alnkxss2TC;@PhPg2M`H_h&_2 zEJs?0MJBhdm+1$;7XFYJwUU~Ni;V6LlR$t1%F4d2%h-;aGx%4Sq;Vbs7XSUr>S9w3enAYEY z6cN_XQ1`$0%)RmJ^Ocj&V;t$BTw|Gvp8-MFz}w1MY%6DR4jxz)d^qXDbL0TvI?3NR3j3liyG zyb#KK5Z%&Lm{f5_tcpa4NHI6dNQ?Pw_?LkUGr1gaibSR4? zUUkf}NKNRiO|{XolK7OjNeM3Er*P2l+qaY9Mn%fAf1s-irgZybuXevFVS*v`Y)zcd*adk57J6S*r zPE@Tm9&AaZ7#-m?_S=u&Tsm9lig8+oM;?2F%aVDyIvuLgPCSPpyW5k$Vn!|3TkM4&C)2nFA1rH zc`AYJ6cX8{#bW0_Hu$dPD!|iOnWpTMX=yJOa7doY7_}KahV&x5?6sJtY0E$WoP5#U z)%nrv_=!rDE_L~#JVI>RQp+aKuATav^9Y^(`J``&*n%9NMCF(dTge`0&5OcKZ`feh zK9?tSdNMf2C*d3(yCa6a|MUQGy^~Uq@%;(WEN#k~1DQf+M?zoon{NNsT zzuI|emG>Gf)po?|As-ZjK8(1vyDGdN67seZ*Ccha`bH}iPYCL`m%8H>9y;pRFSk1! zo+)+7w--_rL7I#L7JbF$J;liWrJEi45nnFKCy3n-vDLBXSMMeu72Wmi6O*TXT*W`E zfR)e0Txix^6BXqWL#p|K)e!o3W%nJB%SvlcgY-MOqctTlXavrnX#MQ`jOtpQXA?Zg{*Uy`g4KS4Esa}@ zW76C7x{?^f*lnN+WIcDLjzkCbwN93$iFz|57qoG_V&mayuhP+FPz(6SuT1%xgP8QO z82oiS#D61UhQ^yE8NDXwxpkNhw5{{6BN4P6G(KDQK3J57UUpuuSo-L+E$weC|GXB) z7$Ue+5Q^M<63aC2H2Gx{erIiN%(lK~(MJ|ELyVhc7}hY-lUi8|HQVT6doxuA^k8Psev`?>3 z$Oq}K3L_V`nm>bPv?$H2LWaxb70ou*kXwYdnYYnEC%1=zRQG&$cIr(J@B``B&aG-? z3CxPTF@1i_1QICsXkCkR`1MhfNz1K-rhf6pL&0Av0QCZ!Xv~#*Fwi&G#0=GnPRMW) zcbN(L_3i4Ao8KmUhN<35+!fWhI;qAzl!=e<%n!Bw)2DUJP#-dt_H*5MEP?|4tEJX| z!i)cMWa}Qa{psqSj>`Y^ANp}Q#{RQa_BoaFM?m9OGl6On(9*2!#ePK6Q4{Td`-aBO zPOx<|EXlAq*TY_dd8YNCUklU<^ak}b7ws%yNW6Xo9!Iqr+YrrBt;@Y>ZvNpsK>MkWgRt#XF~Iz~`C?SdO?D;Pa2UCqY1khA>i|Bh*|UdFuUJxz zR!K%QXm9N)DE|WEoGb-Cy_CvY_l*Giw73X#c1Eh~+%6-(uHjZ6%xJheKDf3A3*1h^ zwUSv|ml-7by=9cWQd!>nI}kcBu*2`O7tH1+oc=iYjT(T*>VR3>oJ*WPXz8T>=*1-7 zwmm3iW~F8daD@Pj1sncBbq#geYN-gxz@5FOs5F&@#UZ%-C~UW%8EC9pp@G#v+)rF} z%oZdzK$@eMfOe38K@U9f1ucLDUxWc9>*srbBF^2^?rD}U%P}{$D?TB6)tdr!NhUf3#@CWNe z6-Z|;TL)C=DwCj9jFigirn zqB&&OLyou-C5Kx9P#1DImXxT}=-21-22JiYXxkb%zyb}`YfYtfi3Kh)5S!(K+~ytk zp$??{DDZ0ymQRv(&C4o4W4GFs)C9A+2V=lk%xa6G2Y(|yqRJ(N zNe`?2$&_&tlBQx*|K50jKCx%>exujY#HOv!Y~y-@!FIKl7Y5dF6X~<=VSf0F0180M z6oms_kcZlW254zp*KCVMc99iV0t`IXLr4f^uYl`2irX&429RIO4WRf`_LI9|E2S-k zW~pu;0kt?iy_%pC>WH=#B4S#3{mD5epsB^f(igv~8J zRoR%dYH&4o4;aU!f?EI-$u)JKGbAA zemTaIREkxNFe6U{VIiyUxAoq-O?wP&Gx23c6r*+|yk&`ypdaI%g^}axy;U<_ODpKe zL7y|)5YwvdiPcCP84`Ff)lKWNS*?KkLDL%J5!%Tmzd6oQ*KLq`fZ9@0nmtGBzSK2v zOvn4z*l?f;%8OZC;Ym5N{ z+G$`Re6MP(F&lhf71K#9BKANh8igTtE|DBxW}*A;#Ps2iLgQ^mBJS-~Zt-T2SXkdc z2t`WiDgwh7Fku;kJ*Qj6${f;gkD2@ms3k>*^jvjex~-~RUzR?-&iZb42ddBPhBvlf zK0#ZyHkVBz8y<5Kven+ou8{=FY%q;%IZ={%rRQo_u-Z?zGO27y69zyY^~9^| zH!DC19h_rbG)$C@!1mD?VUEeS4uGK1u)T^lkrZ<6x_J{mi8PQ3Tj`1O=Xz36z^~5b zH%^{%+Od`s=8P5im^$kU9Ci?RGg1n_wmG8XZ?`^$Eq~^>krOD(ou8^Ulqt0>Cv%9^ zhFI(aA`f0cx2k*rN{&I{Ng6FX0w8(gEuCleKF*=dQY}##AiPl3xeI*+`w;qdl{UtU zNg2^cYph~w2w}5)L7RSmb7Zr1ih;BliGQ5+x|nUKbA{$pWI*l4Oc1nRpPu#wO+vgQ z@vE9wOUBB4wG?)`+9fS1a|Bp&L;T?>(6G)xL8#qe1|dOAr*XR;my0LOeVvS8zE%Pr zZFI&!`Vz4#Zp>o|Q~!sxuMUf{>-rr<#Q+r$DFJEe?h@(Fp}V_7a*&Yj?ye!F8$`Oh zVMMy6rO!R+^SsaZesO*0T!%lIeeYO%?ca*M_F7@SmqUv`iJXj2wd*f`x-=smtzHD2 z!-9^R?4k%9e<~CfembP`5EI>QIaJ;58?NVcL=^vAxS?vbAOOdzq=}T1p%Y-wC&H{e zTAN|8ql%ll>=<&?n7)yBFZ6Lz+-A6_HHJVpn+MTZ}>pZ65 zH1?@btqRJE-GTzyKLi$?Rh@ z6{P~2H|JCRBYGI6jY}j#Bt=&mP776QGe%AJ(m-KguAi-eL+*Qat}lMISnL#djHUXV z++L2c?rJAu0@@wG$syyc+q@SXfXirp zl~Pkztkl8rsdGRo;PN1Vcx03$R#z>LOO(QL>9#U9ul(jzb5hSnxSrmrXcY5{dKwV-;{5KU9?1L+l~MwOa{ucj|ST_ok(;06SYm- z2DAxSCH+w!ItD7gKJmZE>j;E8no?*?WXn%fDo;EVk1y$#N39cTXThR`CB%*de$3r% zo)CV>vKo8RrE*5UZF{cyv%1&g;fazXOJGwAlcSnu1MZhguY1z)+^hn@F;Cx*N1d?- z_lk=$Q@o>9YQe@3gW7bFYBmK7iFQOsHWl^m0mW-q27D43iVFYx#D-UBvcAI&7AuZ(n+6@ z5Xx>iA_ICfC0lY?x2+y#by2*KEHMNUo%+mfO_U1Hi5CgD%8XgAr-;frm-QXX_(!0q zZP%#DD&m85foT3OMk&Rn4h*~s_Hoqww3O1jDqt1|iC(YG2rAe!0|ga`e2iE~sJ>{} z4v}z}BVI=KmIQeL7BJ(_p*DLVo1GVPiPj;4F%IFHD(9F$-E*3x1iA`CSApI2L!p?V zis0}MD+!f{{#TlKV8}*)<-nl|jo_=@&o@~)&GF5|odOpN%DQL0DnB!IiOjWxUbA2(seiCvos_f>3Jb9+Q{pqjPG19gHG#}1+T3_VOe05U#SK1pA)QCT0CE02YYArRtYd|zUV(o! z3Vek5J2yzHh+eX*-tQNgAfgaBH4A}CLhAbTOU>pvV+pB=$?=aDW5yB^=^nn)XciZa zoAljTCCC)g5zu^6X^q)Bi1Sqs;o|Z7O?+$J3y=)r^1S%@iPo({MRe}|ByVGzV=mch zj*{E!@Y`sOPs^*~vT+Va1m86A2qkWt=<+uqm7&NRM9G(W_t$wq?{S0eq>0>GI*Z8S z5w~xp^0G?nw@}p`Kka|L;51mVwFyufD|79@5WP;iFSj7O>o|w(O|d;PBwA>T5sYrj zwA}S57-93eaFA%w9dXbdm(_g{=l$74Ymx zNU}11ejdHFD9#KIHWBlQWG>no2=Iwo6qfA7>P)&arVT}mXs@&S2GFsrjBb#-mCaqS z7Mo#h5@IVRNvo1WSP-u>eoU{khQ?m1iuI6V7RdF<9oGY9tyXYSXewXIw2YC<(*v^$ z#*eKXkfXhiP%BnNGtL`3Fw}|4QzXW#*Vbi{=*wlM$KgyFRtq7bTYi(UVKC)AUhY1w zpRCguA$)(mS)5``%$^TUJOaJshMD(1&~{3E_ER5dCZ7kjk}TusrN;816Z|CQ7`Dcjgq0$Luyv0RJt@jzI#Lp^}v zomi(3(MHNxP`Y>k8B7>bb23!@v?F`iOz#$;xv&%V-S@OuarW5Zs; z>|jtef$s&5^V@uWe*9!xS>go#tRJ<#lk@z2BrzF1^ab#atoMxI%|O~2y2%aVy|8C; zNweD5L8AP`2{ReGrahCrnWBFW{fgWyD^Z<^9emnLd~*4u7x6L1cUF~|f>$ID`}CgI zK%s3TkGtN*j)(H%gHEMS%>8jhC~kVlpO$K zP$?tM7OVRwfNjZ;nvYL&CJ-58_N zE6H(SbI@Ea;H3;6+gBU1l7EvcC4VAJ#32MV-&DGG!7;+LTKS}ni=BKKDbOEdy@vn_ zegKSRh*#8-;N(sixB2m0^NFear|AJ`Pqz;m7qJ@05>{@Cu$AN*=~yJiwqDGRe%LYe zBPT9nHG^NO$^@z4RtC(tKSm+sv++WSl7McNX5%O6hq$E_^g^3|cpK5n&e(cSobBu$ z=rtXDG@ktnrO`?*ss~%YC_tFJ@E=^d*v>kS7cMZy8z1UfY8ued2IFk)-_B&bwOX-p zdY+CBpX>1pI4~=1zj#TAukem%ft{D}DM$|q4qvx)gH7~*vVBB!0)737-V{p2xOnjU zwYzpU{lB$2p12@`{T%zUIJ5(qDV)Laus6}@2Jq4J)kj&`I3(@$kndmax%=2bB)-oh zg7UrL5Z!PRrm4f(LAiL0v-o2sa&;`ful_t-hxP?Z?yV-~_%W|)*P~;U!E5?Yc0l5+ z=kVov6t(bQh|PPSIQ4d~X6iB{H|+Xn-$>qr;zwA68=Cs{%G-=T_8@CS1v+zy;^WXg z&ps>VKwMa$j=ZS3Wj_;6IsS4FR3-zTJ&;gg#QdbU;aA+R%trMiQr!rqwy_or2p>h0 z>n!(mP3|%^K@(&Zd%gJ?K$X@uI3@aPPU2b)%8dyl3R>cfRgyCE<%nm-AVw}?0($Xq zAhjY*Bj(^eZx~nxKx~`4VJ4I-aS@imcjWJAgcUKI_vYYF=3r+odkrWBg7m z6ZMs^zJxqsbdk=&P_PIau+x`p-)f`qcRLQ=M(%tIvg5Ta?;yuQeh8mMqc$Mt)&?#x z#-v?($thvn&}wosY_O={Hbv$W#x#GG&cS!XXp6v$^who;D2^HrkxRad!8gGLiX5RX zg>Htl1ayZoXQ=4V7P^^Zhhfqp@rFG|hq{Rf08ljXm?7o)<;9&S@ix`VOx>D~3QSi} zFGa#krI(TPLOBfB&T!@El`@~%0{nx71@I5!Es#H%gsbsF+%$UszI;-my99u(W-}5h zikSZev^Mt9l#9hkKcdhIBrY66BRa{imO!FN4OE2p`ZO>SDBYE)B##}_Kq%UdHICY6 zl9wO&?en+942Nz6zBhI=vSyLx{8?AEy^4bD6*Nk_MAQ1#QLm6gMOAWo$q-iOU)ar( zLw}Sll^KFO>Dz$qLIN_{SbylwS7|17wwM{uiR|BbndCjsR0Sj+q~OnXg@dZT?&K{x zrQxypb#ka*0pV?44rMlh=P z?cB+zfn3qId*y=xQPH& z#7b1>xAFW$oVo&$>`WA)h33@GBG2yTP%bs-&QFyU^V)>92mz$s4?n~fwcE5KW1Rvw z>qp)5KXURX%8li)2p6J6PjX3O7@x^k)6plW#TrkDj_cKUWW}V2$tspHQGkb^5J|}X z40<(Mxvv1-KWejFMd|&n)`K$;v8du3{G)p7nMe_#V{1N@8Pyw`@l9IiT?F{Ja_?x)#_y z72*2kFfTwp39Vw@_aa@+{pl;tv>;4MIFw)b{Xgoy(#=a+bV!NOn3aQ?NNxsbL0EPBsB)5Q` z;ryOIKDX;?fW~sARIGFs4b~d}=O!+hMD-uru^Qb|AJAR#KWO>OZ+-}_qd{OJO-gQ& z>^((V_h6?u!1 z4Lyq6@0}Dyb#w9Zl{&YlXzZFZ);+71QiJ+4zofp;ry;VPA)*|8Bnpg2Re>Zfkdro5TZK1V}m)3gk1>xF(K&TRn`Y8h_ z8-7ZTjINo{qU1NV95ydEX(_34FSQQ=dr;Ew)5D0>BR;YreXZP`_jv}7w%1LQT{>Q0 z#+e_M3s#lq&zOcp6IW7@$dWhGOx!-iJ(o{fEZvW%j-eM1q_%xi@s?7S8Bu?sWX#g) z`s6I#Jkx&$2CX*W>p}lgbXq4>`8ufl)bpckOow_Eq|eyVT=`y*g?uKCW7xBDg=eL@ z+g#8uh={)C_5Kq(%oU^}T~zO|L~p0R&(~C2?-l;%PoLe+BVww-sd1%zi*%WZl~L|? zrVI`g%+ql&Nu-;iV809i7dp7p!yj}{iPj}rfJp`dHzMmZ(a{UN6vb1dx@Mt$QUP@= zRx{9n4-+^*ZgT}^K-0GA2vK|^jO2L|by=R7X$ zG4JXRbnn^ht#9BpxbhaNgsp@Rx_i>E+NZ?>E=+RvTeFz`*BS+lJ8T#4)BzM!5nVIPP^`QkK<0PD`O%5&!ztsMuA9&7yO>wS zrfQRsF(Xgk(*Ozn4aqtvG7k<5XFKY92$WKKd*4y2EtX*T6!i9#J~j=GmcKZK08lPxP(rAp0agj4AoCj*l5W(UR!zQCJ(v_r!H(TWks+)D@NArujN zl{^Kv_dg0qWD6t-st_xQZtcyKBI2mR*pUi|yWbUDG0!3wOq4*`+oMnBz|;npA4=j4 zC^75u#eNwqEP^}DjrL+A%U5?l1NOw^^8LbZpW)KyO^67tx4^?;js6)`H)4k{wlfEN z9T5^fA<@;+5lfL`NALhaZV{}+lza}uwu4ITYqub{jduIAgu#&0t|mH~+KLsBr{#DU z%D61;fQ7PTEU*RgEP)?D{_>jxKofJ4>>#1&x?7h03m}t952cE*RNloo>ABHTu*klF zoU$ZW6$2E{PkMs#LjPuOpG6+euD0rKNek6#X@~JZWllAqB6uMBr>cB0ALcpoCB-mH zzroyWbLWO7#k{VE3|UFoea1O(>jRS*{b04$#I)F)m>pQk(q!b@tn5RlIZO9mz0(?~ z#Y}TJr6TaWoC0OiJkLjsyB?P#>5eLDDR>y&!Iq|f%i4Olsu6sPz#Cwu62AdRS^H#{ zDAhpNO`lAd;_C^adfKSAXS!Tf#8Bl4hl8N{f#|L`q53tSvN^zumQw@DK7zZLjm4(& zi%@mOK1DiP*_g+sj(%k3(QL9O^w$x}n7ej}OO3@FX3S8J=hPmuQ za)!V}ffN-zz9uP^5Q#uPjNDiO1D0OpLpivO^mCr?fyU^o=o%`ppvpEny{j+T$=nAy zzRqFf_A{9t<&#BNnW3xpM7fC|mH7N(;%}A%DwxFE`zwlb5MWiz?l{)5Lh_kzQC>mqsUw_z9!nXCn=m+Yj1j_h~72PeZao~Y?H?5~&F<+C1$|nh^ za{+Zr`?K+JjY=9q8`l^CsW}yb^BM@Z#>Qi)9?fald<&RQC_I->=`Fp1Sui;48rjTI zFZ7tq4E)zoOR98Zy8b36^V;qOf1EtH+P-K9FK7Y3v=`sqn`6a6r}WzrTizDt%fXTg z(L3O85jNEz&i?@&ZJbPBoXtX!wy1>k0kS}EZ9YtKHLRHr_prWfYRNiT-U0Mp11<$# zrk+TTRdRujy-8^vfL_xiUxKoNe%oEN`R50k8YWL`*FgQOaNBT`;$OBQ)tf)s2#88x zTz+=#TTT3VUurLcC%u;)zV;H_0{N$>?SJK(yD+_8w)$lwkK7UDme{oP+yC}Zx@j<9 zT_x9$Xa-%XfoKr){8>ZqJ%txlm~%}srHm9xv7#6~SS#<@c0<_^*r;|W5M{VQ@3H?V zRPMO1>QHH46e=z9X}C!`oF01REf!_k`X-?ETKjcO2^DhW+W*RmTatU7fCnklyn=Y&0-r{e_dd>h%CWO)Ke z+&+`I2v*wdqWBJUknA%roL#m4Ivi87@|!u*Xl0paKtl$ z6z2V;cktnU_psW69+9UV46cjP(ZR{$rV6p)qe&yA>~#|LK#_h+b36GWzOaXIs93RB zn=?gi_y`olt8}Wy=%CD6hLUQ zRKqhdFA^L6A|)xgm7r1bI)ZaIkl8723$QlzWqtjW?TNv+Kv@80rI1I#9N^2s9d)`c zb&p2ty}UW*xkC|lKpB1nSB4XWf!fU~4rkeoZZ-B!J(CqOv2zlfHv&Jt$L9M!7F9I8 zVZ7~gA)M&`dHvXnhD0|XB{4}5yu)HtqcvNidP-CrMnSX1u(}FGQ+%n=%#H`f6qOOD z%1g@x}p8jnvmp5ytew_6;~GXUlMp5sZ80$EzcA-A*m)Uu(E z$0afo=liib~;YPcW+3E9eYB3clx17)QDt-F3;yTWzg%+hfYbgX*B z2X(W`52_7wcoH|J980nG@+5|{j>>kUPQXIWf4Ad-J^|T>C_x$A`p4wS{Q3XQTMSx!yE^%m2rW@nDC2~gqqUx$qW-`V^*-#eNZPF;8Vwhzy$=X z7{WJzL$Z~q(K>;%m3ecMhO2)lgy*ylqyYe2Rh54^80pgT$-)MNh3Jpw!X6^DV!|&5 zcEA0@tq2Enc(pO$57Pwb8R>uUF~&76bvb{jJPIlL+phg8e6)K?Xd+Tv{V`9Qvj~g|jRgFY zpFhEg^kE|;XW zXx{`R%cZ59ONjp_gl(LCRC_r4^n+>Gv6ZyV-ixwND0zbsk3e*f;aJY43}ODp-lG$k zn}#9B&X-`KH~`MorBo@AlwQ^1``PUM-5eEXx0vF_bJ`E!qw*yc@n86pJ<6T!!v^T$^8qAIv+CZtC6zXPlP1PN;hL z@~SIwX@5ULJ$K;~w79yhAj+oh=&HT0`AvH-EXmbP8ugKSW0`2i-vTH5D<(UA-?=(a zPVNn|q<)RZg(mtyMRzAqQ{)LGe9Gd5u*rWTcF5jUOt5)TLACpT5EWdkpS&xqGiB0l zk7y9zrFQVqcjc8H2u=QFV^F=?^=#dvUZa9KEE?EhZEHA`I-e(&){S#0ZFU=Qs5FzU z%%{)3tb%fCmalQivaYqKXEF^WnUMJp3&H1$6_`JMWpopFA^?5z18tgs0+oLJ@xVYP zg=1319Ib^C^<~7QFgk`q!lCWN6UxUFus2~8!NmC_v13xQ=zhq4%-@U&opNW@bZcz( z5NlNwIxOuRFLQRG2E3ye`9CsgG*f;E=&fDU5A{PWBPYr(AZ2Socq(9!Z#5oU(>R&7u8q}pGKE1Coe zu-eC1#&#Pk?@pQ4*cXY3*z=(V^b(?g*+kX2>EV`UgyT03ZJ!9vC_7%^9Gg8#T|i)p zH0S^T$Nv?e5z^O-ywbCi-YFrC@($ucnz{0cfFAP;X0`3=Ts)?e(wj{WVib!+)uKrQ zfH(@rmQj;P1|s%^sEKJ~1E>XErY(*QksHb}F9VqKvJ;dQbOPJ9M1`DZ0Ga&Ib5<+) z5}P+Ki9{}J!eiHw1kgJ{2<^XjW?y0*Mn5Kf6Ro~0k8z17qhx=UXgO8NI=3IP;s1U@ z)yT!P_d+$<qgMv<1ZgFaDO+PyucVe@o) zH?B&}s%TU|mwFgk_$;Dz@m{$Ox*}WamxytLpwdHjS*74d!8{kOJ&p;p8K*SV>?K>c zLl-YM*F0a6v>}LeqOhOp2`4>Iu!9AtcD=({n@99KxZ@?DdO$~vinl39hZM?)r$$alIy8u!2Y_C|fj2^=L=NdjQ2MHMZMMm2HDU*tL9TGC-aWy6@ zGdeq|zgMN1*X$|hh}aX5RfWBBRJah2iU8zN0v8orD7~?>HsX}sm36wc*-QF2v4quI zaYLRM>*pxHN(|EG0tEf+`D^CH?i{re+naR~w`C;Z2Rh z2hANUD^df?YViv4L=`U(twln%Q8;gdw?%CC!X6;7Wp|$VKlF5lI}nbwufG+7Z@lTZ zv>>kMib;5j+od$=YefD{jb#U}ku4pT8~NRj*tL)wKb6Rg9J9W0g%u5ntAVm~2fa%8fHqgqxo*{lBYhqLT5UFIG-xP46@9< z^GXW*oIV|f`Upbh*HrxBTQ5d*VKORUb~F% zXp~=WULxfM&J0DAM8(pia=MqYF$FaQ zZXNP>M8O99T5?Qvd*6y0S&Ex#OY19T16oHSIZ{A$iP>IB%l!oX*cmq zKoR3rq8W>Zh$|Dqk(Fr0SJgPV?~0Ted;4O~FhJ?#fX0?vHL3NGh^4Tw{35AJd4OhA z*S+`RP<3bfnVNIryC?+3ik3l4gZ%OwtrPK6j5XhG&9Zmgx*Z(r&He;jx>+D)94IwKph# zZ0c76W%bo{h#NE&?Y%6lj+GMcz}XzPZrAfCjSJR~+kHATAqgvFpk$2nCEXg*Y9c6@ z(4w6TKE^BBqea52!f@Ns3$=sIY96WkliKas0chlQheobbEd<`hxb+!@CLfWE)gbre z?t&!<;eYeoOamfzxM)F8h&jeXPrWMH9v|8&qDSc~#wxZXum%o|L( zrJ{CpAl~nDs#mTjI(P9b+{-Qv(9B-n2m1P7g@ygoS(Pge6pH+ee=>Gqb`&r}c^p_^LA)g}p>!Ecwz#NFVU-Z z=h9Bzri9X;RvCUhMjHMrw4rVi=1e7799k25%yWMOckp_|4;}?^XU+rZ-GeVCc@qmV zPv6~)%SFeTX(&w*N!%J_pP{_px84imf$JI9aIpeJEGP{<>S%ucc5{DRhWom3pVVI> z5CGpFl#iWfq$0ir)lUw{q@XlN^G7vs7I%;f@c0eB8RV{|CRNMsMS(h-}NOETRuz2B}- zCYEs+=t9c6jFX8Y)f);{iJ}{36a4Xdr< zW=SAgR@OC+I4Poijfaw2PLVX>z7A_~v=FlrDoaWhi*J0t&Q}1M=n{dukYXM95G(Oi z#`au=!As8B^4JsVqSN-FzoW49K0R$ShAWw$x$lEKY2aM)t?VYiIj{VbCO|^`VMuPJ zb>YMT(6uh}3R=MoA&T9!CFX!OoD5<^zCvAgwP5rKa&K<=qR(!G%zzK@`5bZW2>AK-{m?5g zI8#0X`m8sr++Tok81EkFJ;t3e^W_G2ovdla93>5h!gN2fyK+VQKKc1YqP!xhfli@E z;BM~5iqFNDA6yXc#6pqaG9f>MmO1`Vx9VKA$=&XBg<+kB5#vYGM4ruP?4-EZZ-$aD zuebjq>}Jr()R@$Jo_oqx9%u!p$1A9%O-kdHE6WO{q+)udq^#bE~buBc}_i23CBj1ZlNcFds5U#z!dzE)eif1L+xvRoCH zNwa;2A_DO@t~#KjqsMqS!@_K5T@T z2;ZyP_g!_Z-cYFD{Ep!r_<+D2c5aA|y6m^+v;m^JzGlwBDJL51%T(Vf2q ze>+X5`BiwLJ;1%MnRy?`%Z4tR!y`)rCyGwoOzCUKT1Y2UG#thH$D9{5Eli-cfpo?A zD^4Gt>qeikr+7XDbG{3pVPj@4@RKijJrN%(X{O8K$dOT#xS-w1Zu_{q1hK%BOYBV6 z3LXN*W6gF({cj;qEt6Vuwjm|?O^EHm8Th|ae%{V&=TcGjNF8`1+2wH-_SPrd1(m+T zN`7ql;0vbvKZBjnjt4gdhjRpyBj}(09lT@=tdFK3o>KOqps0L<`at0mm-S=94LQQW zZcN{QIF>Q*e1))!IQ1+_(|z34`{Vi%VEiQSA|~c4 zlZ6s03*2;0>L&vchZKOcG8CEQO$7u`ZvKV@f`$}z&rXCj(RGw)Rc_Al^gD?cxxJeC z*&Z5vyhS=Wp=4{OB?!`>W8hW3c4;EW**x+nZIeo619 zH7p2MldWc&Tr=EM-kvnj2WK-~0?JGsgB02dOALIUf!AhzlF+M;M2y&e!V38`|B ztHH#rTCG=%W5Peo^iP?HVo7wS|HO;d6GWLxibs^crl9!39;6I|F`fjTlrLhV(kn&I zRy@UxyUyvAGIHTit4NC05$s~1|3|23dqi8^zEX^T9V-0bMzq3DeaFRiALP9ULG@zm znglA(!K|xbH8dC7`>2`IH!-+h@tn-o)efbCD%S-wsl4c-VmL`c99k3xmUFZ3#g2xI zPT6d}aWMoZz0!o(X2Jtjub%;VOPUB#3msgk1cwixsCv=A!?JPi6e&-eJHzg*1j7GF zjWhVszaVoF9+v~CGG5K|`t+=&4DlG9$R}sFJMSY{4{JFQhoAl(j08X?f_;#iOvW#J z3?87$-SQIv0si}t(SJ9V|ATK=L-lr)^(sFtB2H_SVf#@{a7Op|4l-|jC5=8113CfA z5dJd!Uxnu5jCr5DD9tzz8_0(gmVC(!ZGX1-;|?lwIb5Cn>8{V((sOS|I9Srd0A1(_ z94#E~%>FMo`}X|}NfUzASEw}Q#HDTA%8|47O)<-SD@-YxunreL>;%0UA11Cvt>MuicWRP0P=THRFpF0sPC2u)A z72e~N#~p>Y(+%~81yX7uYh`T+jA68&@PM@SVH=k0b)~@ft{w)`<JYRo3H^x=fE%Qs_Rd&O1C9%=svAjp9^(7tT5rOrB zpk;%F_o*#jBv!6UfKJTkeH1V3)oQ-!Rzy(nLTlb>3{q7?uS*5ht|&X&lm|f#a@!*w z5a>JXL(C%QNE8=E1P zoQA|lP6OQ3qTjFeZ46RkbS}4p&Mv3o-i#oX&rqZ!`-y0;ONy2gnu|zL78&FT>CUNS z{W#N2`O1sD`%3*1j4eR6PJlY?EFW3)7$t=<-r{bD>E{dyILeeUox3L$aW0A48j2K!~BqSDD zqe$Y5s|jG&07D*5ok9N5JV<6-jJDaiis`0?gXy?dRt|?Z1Y7-b!2Vh7={?Z*5csfq zuoJBnqbBbu?QCLThe_{#;Q;oz?(OvpyhGBU=BcVr>%I`=^DD^QyDK5Q#T10^(w=6( z9^v^>oEb=oK|q7HrIw68Ycv6tl(gPO0JSd5tTrQM|4wNSq74C>z5Sj49`w-!;8_Hq zsv`WaRXnTL9ZLlA^SPV*?O6uzT{8SDW;jrbl2|vtI#wc{u4%?I!c^=LP)s?pIX4t=3wp2!!^kD7_yY zU6e-T_H&*nL^F5pZ0fXxw@HEXl7t}qF0cPbCty5A%4-$Jct;}UQyQ(Y$%vcFDajY$ zofo3FT1&E#*F|Z4HU+<~_#|&Xr{y(0K6kiVjVEsqu&_aqTMfr~L92z0Tc>oQYp2h% zD5EgD$)VL+)5n`H?iPBb1B_rNdSS&XtIXX6hbS;_fs;iOhN^48K+d}EhG0l7w~ZoO#GDO7~pK!{7gOe}9ksp6YEI>Rwn z;=ZOb1ebYRZBMzde=Heo2)+{^ZQxTByofp`-W|>FB%~4nzmk;j^DBFKAi0ilas+Nq z4ld`JQ$TT@X5#2c{E@~P^484i96Bo>E_yReHhv)41Y3o?$&4Dw%uJq%W3tLp_lyt37D)WhA?nwG4@Z+GWi7ia|Mga zzGqzQrDqvUtrDxREDRHlINDj6k>BqQWjTyHzqhINjuxc)kVRVhVk*Tk)Wfkl56eCM zc>N8bFSgtdmWN5fIJ2lZX{wC}wnMm^TI$TJCn*oL&f_E2AMt9XK0h)4vT4maZ};79 z>)2msFu({-uSPcb3ArhOWHBl$`^*}p+1BQ?c6PDGx~%??N+0*oo?MG13r5tUN8^-E>((9ffwCvmQ=BK|08?;m#H9KATk1NbPu4#d)b^G`l z)5@6(K4PvGEZ?c#F^a2j^1v#C+-niDz!8jo{iKNB4R$`nyDQxPLgY5GXXrYyG)FeP z+CE3o)zqyvMU)q&UwNPfU9f*Xat0MAKEJ?jc$xV5S9Wi7g9_>LbMwAO>G%Q{NBF1p zbVOFns2i(3U+<EU|V7{Z$%e5ct?^E_Z^;kC19u{k0&30JU6k5gq%XXjYEE z_$<@TnN{Q(TGQe$vQxWSNi)8~T*22iD%3Rr;^YSlDz?*&-1uDs7D>o5u)QkA_>qU3 z(nx3E?)IR-Mn$lWSz?oHHD49ue>m0vw!z{$iC-2?3`K^8VtM|NZa(T=4;5@$VQ8?*#gJISTORqftOo0Dqow@NQnj+-Tw7Vp*OzmBIG4((r4NE=!Ux*CmmC{2*~s zw0j&s%|97E<5K%RbAKq-=@>ZeEnWb~;?Z1RBkW#pXZgFHv%0$LpC$j-eIjhO-2cz3O9xg*CIWH3I+^F`OVgm| zx+B9M!v2E{R(E7*-sWBLTl^jO@<%QBmUH`cC5dW4jp?_P1c8*{3y}FExj`S9?r3ut zDg*kS185Tev%FvYRJwo5b1Zzv3N4?3wcdChlTG}Bjaa75YShA7czK(xq!brYTrG*wsPYOf;2hi3Uhc)9L`JOj z_8KRZ^x8SW5~elRaC0oT`)u^q-SZeeMLakY8Rqcv`X=4U_@_lg*P;TiKU19gW#5+m zeAnXv7uX7JH|dX9uNukjmfXq@Y;r%=W(%(`Ot9xK@&5Lj_9xS3>F4m9{U>({&d--{ z$q5Me8cIO8n>GAb!u|2g|3Bd#Laz{F9U`IFF+W*Rv)vs?IGSJ(Eom&dnyi~LBIp>l1#t{)8j!T>Xrj&0bXICAMd0{9o?$?FRcq(lTVil2>uJ)xYM zy@^$Ctjocbnl0!yb}lIDhE7kGRpi6s`xTERL<%+I*Sgfv!3WpEn*7*>ir#jiH&;NN zMAc8e7@%O{N&gl(BQa4h?h^)i=NpwDue0QO7QDHmjI$v+Y%}rogCu)Pe&cg-&ruw4 zo$77K%ui|Eo^)*`AQ?Fg;1s>6(a1^HYk&10w)O&}6 zx+we&bv0G5=yik<>MHy;S_$NQ1$g+s%4&itO$}2;u3|Xmq&S6nIp@ZLd1Nl^o=40+ zBezNNlI%pb2pE+fpz#^%{oyn?qGxX*zc`vORrhth|5LtEkfh(&n}qNia-=mNG`HCzDj874tYaI=S*>jSTi+g1u|GV3FuEqrqI} z#%`vJMp9r@U}nD%{?Zm|l?g`OBU8hvvgt(Z$_8Kh3Ug#dP&w5R#Dh^bc^SX2N_l3R z#)y5B(NsoW$uMXBLM$Xgd~+3SyJ_W`ID#k!!JoPy|HQL3$C9Xf{9|yMVJQwG36SX}pVst8mC` zG(q3+>Ww<+gha$EMc)T^+C$4Nn{J@PrdH_(#@-{_8^0*zFWcae3Z-q9-BC~n8E3H-gkc)hdN%|g-O#m*DPtZgS~B(Q0%`0wHBE}&z1Nr=rHUnF_Y$i>woR~<^(Nr@4UjN5u+by}D45%4@k36`ttIfy zo|&ru@>=!4qkO9~-TAG#n615ftW92}b?auZjf>AHq;f85`yGrOE6a5FVD%iJd8DFJ zlp3Gw^*`9mQ1POL9(R*>DC3g{4(&eP{Xc5QkKjP}m%Iw=uph{i7{KyC@`0k84)J?H<FA4xPZ7{ z8P!g}zIwDk+&$(k_Zn>X(pZ^a(s;y49iU>u$c+!&E{$7Wd9+@eF_O%EcfE3Dj5H4w zJ;3s_(ID!m{q7cG@v3I%!~Bz4JXbz-!)sHzgyP@@p2s&sv~qYg(sIZ;uWI_VLlSXu zqt8bNu{sB^z*#c3yfw5ewsRjVkFl?wY@S?3x$5C?D;W{?uqRk~_&zU%>5!luno_wa z66I7$PO-Lph+UuSCo6&N z1*3MaJvNX1o?aous9y3YDs(NCwp3dc`P5WM8tm0w>btiQJ=in#uJouBE;9YZAzEeE z6w#0hug+7(4X*~0wIDU6*wOS?xlYxL%+=qp7FwFCTYAOj{D-!rg4C5nM@l%&hj>`1 z+i?l%=6Pxgvjdq_Va?RCw9oLtG;(vvjo99`Sl-M(NOclj*mup~_d zyNNHSN|A0`7p--YYRR1k&)q1yS)ObQNq=-)anoUjp;Z+>yQ{x-_J}>I zpK*6{S*O9fOq-wHEpT)Dm6(c>rACb;u4nQgVb?#Vmik8_>j)pS++6jro2?xi)z4Qy zdOi*=r)Hc`;bNG9m${Tyve>^+PY~CK=5|{&WSJDJdbr`;@MDTEgOEx-&|a>yi0iWR%7Df&h~2a(b2 zYb%L7Y|2!-xshe!GsJ}tNe}QFqBt2je2I++Pa;#abFjTf=IuCKp4v<>4+yIzQcX|4 zS<8BjZ7M|kLWy{FyyD0TuF%63Tpd2dQ{3*r*eTAqRMRDQ=@&c|JYQxkeV2mcZ$z0G zekq&q=naX@KXPOqBz(?RRvdzjVP}(P93{S-`oY{HcAox_8J&)|r-PesrOpX=AbgHA zYknqxbY1DF(B)S;c9T>}g3}w#O9JoYz9j*N&B~Rh$iigYVG+T_dFVp{#qFY|;Ps`j zE%ctrZeeVCSL)<5x8d2z|I^uZM>W|zYl?!1V8I3mC{=_HsX~ARDFUK`g(^r<1PnDq zq=jMuRGNbH6e3N!bWnyShwpydOHKKX9*vyhFIh zc_EwHewmQ0(w}ucn<8qZu8Q~7DOEOA zx3RX-t8nq`2q+2xT+`%&a-;2((m%n){22o^n;yjLPbpjip%GM4rILme+`> zlogH&f@T|5x5ce&(t?}7$1%O*B>Qo>0=|D7C)z0!j(C_cI(GDFo6_CU(;AF2+N9OC z(8)_u%mib@(&oP2PaV6EbuIiA@sTL&z)#ZRK04#^^1ij0#wZzhPk?zO?-*5U zx3Knz1WtTrV6F-HeC9Mh{jltJTk~9u$Nmsew}e_pLCF!(S6;2I5F^0#uDNMbS4ZB;Ais};fRl(Me_I!$XcyS!>y;ZitaztV{?`kfPk0Anc+i?QDWVG z<&EV87-4r+lBv4UXw>fh9fRvuExoZ_PHg2DzfuxphXmgW-j4K8B&+i( zqs=1uAgUJOk&|UNTlF{&5?Boc-?eS2s@{2yXBkjU;j2ou3TxHbD~VsMQSp0>?GZnx0GTkNr#3$B&=Y% z?F2t7H>LoqZ|It=+-j>ihb+|&^XKe+gCFm?s#2$wRWKEvaklTCo)vk~ zC9KS#@FwI^k!~@ok*G92H)XF+jy|YbV?XpTKJJGW;BU+rQHuqLLw~1%VhtQLL{dWgcvph zs93p~BHJaLqz&>r;)@h-^XY=R^1mp$x8dOtVh94E3`{qBj+WLfWdZr`k3Fu9x%!Z2 z^9AofR7k3n*8MY*CVHJ-*#2^m6BGa7on>NVZ-n9PhtiX5&R=oo1`g;!v9S>R%YOj5 z*?gzLM#M5y^ugnb5d^bF@)0{RoBj0qKy}gj#cNB$2@uaD2@Yt=m@r5h(2+Mg&J7T# z2!HpfIHLV%7GkvdxxW$EKPHF1x$txr+-g~dSJ~7PDp?~O+j{PV5#Ri@t=*`0el_F= z(m9S}-X+Ofy|t>|=;`MeeaeS(E9ypf=?ksQ)mlnOBDyneBh^PODZ6n+v8i&}H_cHk z(Oum|ZBE7G+KgBCn^fe)+9&)YOF{(R>s$C8=sU1tTI^TJ9mS|GtiL8IJQ^t~8&{Bh z(0p3U4M_QLSpbn*1o2-hD@DCvEX=(jm@*5#Ae?$}5sVrgKl!MF-%?C>sKiBuS6OrR z5%eH5BKPg6Uu-+cY8;RQJ~Yjp1p53M{L*<~IuH9Wsi(tPz9@10$y`-e8?SLm!Y#}2 zkkQAv_3#{hBs4O*eUM7GNeqE~)9Kd)bxs*Dy&(6|Pm-al$O zEl&l%E8S9_C*UW!jv&D4<@cfcT)6SmPxN!;USHEkEj(VG6m^l10@r(uSnb$r=G+ggenz9csNvG8uC*}j`-bHlU|FH^cBzE5$ZS~7t+~Mq8|pk24f7>&FQQo5zw`#o-;9d= znCuu7c>t1>xfjmZPdNH)=I2&9CyP*N6?fA#?EZOvO9s_qgBI`bd~`mIS3r(q4?NPY z)>W)=btI8X^NAcMBqUHNF(;;ZqjP)Hh1aj=TahLDYI3WK!Wy`<@dVT+vYv0GGJh-s zL3-|wyDWdGP(;oMx8cIs>tvdXf#|}h$-R^BSk}PybcCuvm4K_JI(G*Ve`!qDB1>Q*d z#&@Pazxg4yVF0xPJD2;)gz4KuhQIa`mJ3U$xAgYBPI;(;U)5k!wZ4SRva{8cOL7_5 zZ5OpA4VDi~6)gaFkGBpdM&-!8Oo?@DDkzNet|#rzD|qFf&JNpK1%lMqPHSS(dfhS) zN96USLCJ+T-25>LT!W+=3+jot+P_?~sE2OxLS#RqpMUoVF!MGvxa*j(#yj*}N=(R= z)eHh1OOMeG>`+iE5WdpNqR1;}!LUR3IC&iD(pJppS5Uz!loZ=&8PxLWyF!A&xg55l z=_J=3G58uxELU%liz$$k9-Y;7wu7cNZuea?3VjB6T9nMVveb{z#dCR))U1$qON zjB}~NF?&5xh`BrnxhJ6PVlfJEe8UtLP!jA3D^iKXhdO-iD!I|v=l7&J!58UBIPH_k zrxQ)gD)xj(%rydwB=i(5xYU*XpJG+H$09K;VTbWWz<}$8eAkd8qei8&KPX2n+S>51 znSYgbTl8sM-n}L>X^mg}*^A#_8&adcet7p`x8tA$w-5-^_$ZxRybv} zsUjELf{fLQ)dpKufq)wNnQt~$O$@%eo0wND$7Fq&u|3wTPq|b>1s{#?zbCiXSU^B% zWE0OHmY>(<%!LTM8NQ3tIqoL3gP+N&n)fZ;*3AE^BkVR=m^qOx4V*tk!IFdVn0gKe}OT3sLc z;vNjOK-{Yf97otY#T%O5!+Hj8eV7K0AkP{~JU)c##BVpA1cqzZ=kE=Z(uxg2nS2;f z0KKeD`}k6bB{_lAaOl#E4m~FT*qGM>0_A&P z<>Q7!L0#%e4gI-Pq4(^i(#8@Agi63f-f<3S=AfDxFsm%uS*+kfiu0om(4+hrN@#jR zLf{FVPv%@z#25JbN!vcvFok4$C;#kL>IoMI+s*o!ZR=rx#DRHf3#Tw{@=0M4IxQ`E zC`Y&y@nI%W!q3fVyj^Ah8o)bSa!f;_xC=*DT|v}hLp>|{g1r9?OU@c0lKGtt!lD@V z@reTZ8H*Lw!^rXtR6_1pWZ6O-5iB~i1hS!l~h9tgB= zWX%?7i#dU9nNf}G~Ea5Rx*#CE%P*f5E}=_T}4{@ctEA(HhC6A9OR{z)Z+-}mki|< zMX?t)t;}S6j0wxbsdEI?GZ8tEiIOm`==b(Wp?4?vk)!-f)eL~e_W|MJP>Ew5T+GS~ zvV-*P8?Sz#8Xy~Mr*sexzWvtFEXTWdRSZj|Y&!qAhmh90=(On54Rurdo}`+|65_R# z0O`!jM>Pa5MeOd&K~|dQ=LU|F;yPC!nd)4<5#wK=OU=%P09DM|0LULz^=vUHU>HHi z^w^?3vZ0dS49=Dswk2?yiI1tf3-CXbD7HSqg1!1~RL5#q;a$;-Om z#=VMY^G9uyHRm^Qrhov&w{}X2*|C1578b=ta%Sq}%$NZKm&MmbB+7|J6fri53?JhL zI+9%N`sZgT(!l<5nfYKB-GVbFC*{HPgm7K#A9%LCp(@ULOLFb*V483KU6wIBF}zPa zKG|N{{HdKOr^V7fh;j@%;#Hm&wpM}k6;6yO91z!E)I@SzDn(`jZQABN9Vze!Z7|*i(V?xhDvLd0AJIuWdUBLLOe0_*dy*o zqNiYc_8dl&KIbxPO2kq`u(LPkOhqaLd}eWb$JbP|6!>I6-W%a3M7*{m^L=$9Z0E28 zM|m4>@LJV1ILl`1F8O*0JS^iI24mx-9uANOz&8`P*&c*?u%=tIeOur4e*xi4Lwm^I zv1meOkUd7u+-7!3La=T~I_hWp$8{gz;rEN@nGUAR8_mK%QXH4=?q{+-{%aRn_%ZQ* z$P&cZP>+K49ia%Z4voLJ0!7zt-iZHUXOCYoSV?$o)}R=@q^LX4ikqFW80meI*HhT+ zg>9g4FOR5HqjJL3G0MgYY50Ac{!&}d)^p{GyL3sEOfSLi^LDnMi_FL<7d`IGya{FeX(E! z0`_#;5IKk@K-|op2-%_TkZ?Pj=rA=hwtfEAl-j=EJ#{lq)(rIQF>RavzqnU}I_Qj> zpUwUZCv?pC>Ykt$rEYnQ_?gyn$|fReeQIxoLdJ9b&iSetngZyAmjD=j&ZW_&p3<-Q zqj_Nj-F%s=G@_|bZkRVSwQ55D!H+fS!p?KU^Fn;%wHg&@#E5Q2{Ne=bOj-70~bS4Yb?RX5`&nT{#I#Wd7B*!I^HwJPl{jLRL_Oc zi689(pq&)z@q%i$vt8Xqs_sS5o4om>C3Fm|usQJ59hTqTRbg<3WF{AE)=N*UpUR+# z=UrVdsTQwTfBk+}%JJm-7&#nsiPhEgH#v#v8-g)EObE;S0)$h2TZ42yZv3KJc*+Q| zv`R3Y+vTrmHleufJ)PN;BSiBD{v5+EJPdH`3c;Oj$s3M2qR6xNZ}`WAr@SpUOX@yU zk~)H^oLeT~vGZ%U(Z{C9%Y}uwGG-EMU!DCk8`A!tO&DE{^Y5bVku|82!e?r>oNLp| z`IX?DPV{&262e`*+&echm!oImf+q(=f-VO)Q3pZgLxJ*JkW6oO#IRR9bT^QP2y<(_Spk@2)zW_IZ7&8C> literal 0 HcmV?d00001 diff --git a/error_handling_in_R/compute_change_table.R b/error_handling_in_R/compute_change_table.R new file mode 100644 index 0000000..3bc9b5d --- /dev/null +++ b/error_handling_in_R/compute_change_table.R @@ -0,0 +1,8 @@ +compute_change_table <- function(input_data, group_col, time_col, comparison_col, start_time) { + input_data$time_marker <- ifelse(input_data[,time_col] == start_time, -1, 1) + input_data$comparison_marker <- input_data[,comparison_col] + input_data$group_marker <- input_data[,group_col] + return(input_data %>% + dplyr::group_by(group_marker) %>% + summarise(change = sum(comparison_marker * time_marker))) +} \ No newline at end of file diff --git a/error_handling_in_R/data/1-303xviipopulationvaccinationcoverageshinglesvaccinationcoverage70yearsold.data.csv b/error_handling_in_R/data/1-303xviipopulationvaccinationcoverageshinglesvaccinationcoverage70yearsold.data.csv new file mode 100644 index 0000000..1b1415a --- /dev/null +++ b/error_handling_in_R/data/1-303xviipopulationvaccinationcoverageshinglesvaccinationcoverage70yearsold.data.csv @@ -0,0 +1,397 @@ +Area Code,Area Name,AreaType,Sex,Age,Category Type,Category,Time period,Value,Lower CI limit,Upper CI limit,Count,Denominator,Value note +E12000001,North East region,Region,Persons,70,,,2014/15,61.49910054,60.89437817,62.10029171,15384,25015,Value estimated from former primary care organisations covered by the LA +E12000002,North West region,Region,Persons,70,,,2014/15,59.79428021,59.42078779,60.16663944,39704,66401,Value estimated from former primary care organisations covered by the LA +E12000003,Yorkshire and the Humber region,Region,Persons,70,,,2014/15,60.12094515,59.6983761,60.54201199,31118,51759,Value estimated from former primary care organisations covered by the LA +E12000004,East Midlands region,Region,Persons,70,,,2014/15,62.01607319,61.57937177,62.45083762,29555,47657,Value estimated from former primary care organisations covered by the LA +E12000005,West Midlands region,Region,Persons,70,,,2014/15,59.17828804,58.76527189,59.59001205,32293,54569,Value estimated from former primary care organisations covered by the LA +E12000006,East of England region,Region,Persons,70,,,2014/15,58.33624607,57.94151505,58.72991114,35049,60081,Value estimated from former primary care organisations covered by the LA +E12000007,London region,Region,Persons,70,,,2014/15,48.7285086,48.2905911,49.16662137,24374,50020,Value estimated from former primary care organisations covered by the LA +E12000008,South East region,Region,Persons,70,,,2014/15,60.28651568,59.95956919,60.61254621,52014,86278,Value estimated from former primary care organisations covered by the LA +E12000009,South West region,Region,Persons,70,,,2014/15,61.32917482,60.93969351,61.71721224,36968,60278,Value estimated from former primary care organisations covered by the LA +E06000001,Hartlepool,UA,Persons,70,,,2014/15,41.30162703,37.93710932,44.7493852,330,799,Value estimated from former primary care organisations covered by the LA +E06000002,Middlesbrough,UA,Persons,70,,,2014/15,54.02843602,51.01193899,57.01570285,570,1055,Value estimated from former primary care organisations covered by the LA +E06000003,Redcar and Cleveland,UA,Persons,70,,,2014/15,64.07322654,61.43844802,66.62577201,840,1311,Value estimated from former primary care organisations covered by the LA +E06000004,Stockton-on-Tees,UA,Persons,70,,,2014/15,63.77816291,61.48572507,66.0095828,1104,1731,Value estimated from former primary care organisations covered by the LA +E06000005,Darlington,UA,Persons,70,,,2014/15,61.98019802,58.94636462,64.92324515,626,1010,Value estimated from former primary care organisations covered by the LA +E06000006,Halton,UA,Persons,70,,,2014/15,50.94850949,48.00545389,53.8850049,564,1107,Value estimated from former primary care organisations covered by the LA +E06000007,Warrington,UA,Persons,70,,,2014/15,60.81694402,58.64944275,62.94261726,1206,1983,Value estimated from former primary care organisations covered by the LA +E06000008,Blackburn with Darwen,UA,Persons,70,,,2014/15,62.07171315,59.354275,64.71547563,779,1255,Value estimated from former primary care organisations covered by the LA +E06000009,Blackpool,UA,Persons,70,,,2014/15,58.01041064,55.66881851,60.31648693,1003,1729,Value estimated from former primary care organisations covered by the LA +E06000010,Kingston upon Hull,UA,Persons,70,,,2014/15,53.15449578,50.97068829,55.32628659,1070,2013,Value estimated from former primary care organisations covered by the LA +E06000011,East Riding of Yorkshire,UA,Persons,70,,,2014/15,56.49801587,54.96230884,58.02135281,2278,4032,Value estimated from former primary care organisations covered by the LA +E06000012,North East Lincolnshire,UA,Persons,70,,,2014/15,58.1495098,55.73972937,60.52101513,949,1632,Value estimated from former primary care organisations covered by the LA +E06000013,North Lincolnshire,UA,Persons,70,,,2014/15,53.1234129,50.91529399,55.31936818,1046,1969,Value estimated from former primary care organisations covered by the LA +E06000014,York,UA,Persons,70,,,2014/15,59.65082444,57.51724343,61.74851379,1230,2062,Value estimated from former primary care organisations covered by the LA +E06000015,Derby,UA,Persons,70,,,2014/15,61.17596195,59.17289263,63.14197048,1415,2313,Value estimated from former primary care organisations covered by the LA +E06000016,Leicester,UA,Persons,70,,,2014/15,52.63157895,50.47826091,54.77515252,1090,2071,Value estimated from former primary care organisations covered by the LA +E06000017,Rutland,UA,Persons,70,,,2014/15,67.97520661,63.69098805,71.97633724,329,484,Value cannot be calculated as number of cases is too small +E06000018,Nottingham,UA,Persons,70,,,2014/15,58.78609887,56.63716279,60.90205591,1201,2043,Value estimated from former primary care organisations covered by the LA +E06000019,Herefordshire,UA,Persons,70,,,2014/15,61.07865169,59.03529649,63.08381826,1359,2225,Value estimated from former primary care organisations covered by the LA +E06000020,Telford and Wrekin,UA,Persons,70,,,2014/15,58.6582049,55.72688811,61.52942249,647,1103,Value estimated from former primary care organisations covered by the LA +E06000021,Stoke-on-Trent,UA,Persons,70,,,2014/15,62.8959276,60.95665129,64.794512,1529,2431,Value estimated from former primary care organisations covered by the LA +E06000022,Bath and North East Somerset,UA,Persons,70,,,2014/15,65.45918367,63.3256918,67.5321963,1283,1960,Value estimated from former primary care organisations covered by the LA +E06000023,Bristol,UA,Persons,70,,,2014/15,57.81830463,56.03051305,59.5858363,1712,2961,Value estimated from former primary care organisations covered by the LA +E06000024,North Somerset,UA,Persons,70,,,2014/15,58.45857418,56.55140607,60.34073633,1517,2595,Value estimated from former primary care organisations covered by the LA +E06000025,South Gloucestershire,UA,Persons,70,,,2014/15,65.75936884,63.88958944,67.58145801,1667,2535,Value estimated from former primary care organisations covered by the LA +E06000026,Plymouth,UA,Persons,70,,,2014/15,59.1561939,57.10108027,61.17978813,1318,2228,Value estimated from former primary care organisations covered by the LA +E06000027,Torbay,UA,Persons,70,,,2014/15,59.30506478,56.94994632,61.61817577,1007,1698,Value estimated from former primary care organisations covered by the LA +E06000028,Bournemouth,UA,Persons,70,,,2014/15,57.79403489,55.48331669,60.07112801,1027,1777,Value estimated from former primary care organisations covered by the LA +E06000029,Poole,UA,Persons,70,,,2014/15,60.43899949,58.25526761,62.58187123,1184,1959,Value estimated from former primary care organisations covered by the LA +E06000030,Swindon,UA,Persons,70,,,2014/15,59.04595695,56.70366359,61.34791036,1015,1719,Value estimated from former primary care organisations covered by the LA +E06000031,Peterborough,UA,Persons,70,,,2014/15,55.18606492,52.43182259,57.90885572,697,1263,Value estimated from former primary care organisations covered by the LA +E06000032,Luton,UA,Persons,70,,,2014/15,57.74240232,55.12014705,60.32173475,798,1382,Value estimated from former primary care organisations covered by the LA +E06000033,Southend-on-Sea,UA,Persons,70,,,2014/15,46.62162162,44.3113267,48.94649975,828,1776,Value estimated from former primary care organisations covered by the LA +E06000034,Thurrock,UA,Persons,70,,,2014/15,45.46979866,42.66209054,48.30661194,542,1192,Value estimated from former primary care organisations covered by the LA +E06000035,Medway,UA,Persons,70,,,2014/15,57.93357934,55.96342112,59.87878586,1413,2439,Value estimated from former primary care organisations covered by the LA +E06000036,Bracknell Forest,UA,Persons,70,,,2014/15,65.49893843,62.40582763,68.46615385,617,942,Value estimated from former primary care organisations covered by the LA +E06000037,West Berkshire,UA,Persons,70,,,2014/15,64.49885233,61.86559451,67.04713154,843,1307,Value estimated from former primary care organisations covered by the LA +E06000038,Reading,UA,Persons,70,,,2014/15,62.19346049,59.68416122,64.63911068,913,1468,Value estimated from former primary care organisations covered by the LA +E06000039,Slough,UA,Persons,70,,,2014/15,55.19379845,51.33650187,58.98959537,356,645,Value estimated from former primary care organisations covered by the LA +E06000040,Windsor and Maidenhead,UA,Persons,70,,,2014/15,63.79585327,61.09749376,66.40994746,800,1254,Value estimated from former primary care organisations covered by the LA +E06000041,Wokingham,UA,Persons,70,,,2014/15,53.02795031,50.29738554,55.74050707,683,1288,Value estimated from former primary care organisations covered by the LA +E06000042,Milton Keynes,UA,Persons,70,,,2014/15,64.85813838,62.74395604,66.91560793,1303,2009,Value estimated from former primary care organisations covered by the LA +E06000043,Brighton and Hove,UA,Persons,70,,,2014/15,48.57288481,46.3663098,50.78503728,953,1962,Value estimated from former primary care organisations covered by the LA +E06000044,Portsmouth,UA,Persons,70,,,2014/15,56.93135935,54.39902347,59.42795113,846,1486,Value estimated from former primary care organisations covered by the LA +E06000045,Southampton,UA,Persons,70,,,2014/15,57.74958632,55.46181567,60.00458613,1047,1813,Value estimated from former primary care organisations covered by the LA +E06000046,Isle of Wight,UA,Persons,70,,,2014/15,61.8351841,59.50927255,64.10807108,1058,1711,Value estimated from former primary care organisations covered by the LA +E06000047,County Durham,UA,Persons,70,,,2014/15,62.07018788,60.79629278,63.32765775,3502,5642,Value estimated from former primary care organisations covered by the LA +E06000049,Cheshire East,UA,Persons,70,,,2014/15,64.48163645,63.03922602,65.89820727,2774,4302,Value estimated from former primary care organisations covered by the LA +E06000050,Cheshire West and Chester,UA,Persons,70,,,2014/15,61.48170012,59.83093552,63.10645732,2083,3388,Value estimated from former primary care organisations covered by the LA +E06000051,Shropshire,UA,Persons,70,,,2014/15,67.11464619,65.57240012,68.62086592,2447,3646,Value estimated from former primary care organisations covered by the LA +E06000052,Cornwall,UA,Persons,70,,,2014/15,61.5028545,60.31172476,62.68035623,3986,6481,Value for Cornwall & Isles of Scilly combined +E06000053,Isles of Scilly,UA,Persons,70,,,2014/15,77.77777778,61.91529705,88.28366802,28,36,Value cannot be calculated as number of cases is too small +E06000054,Wiltshire,UA,Persons,70,,,2014/15,57.44075829,56.10154767,58.76913951,3030,5275,Value estimated from former primary care organisations covered by the LA +E06000055,Bedford,UA,Persons,70,,,2014/15,62.35212248,59.81726982,64.82111061,896,1437,Value estimated from former primary care organisations covered by the LA +E06000056,Central Bedfordshire,UA,Persons,70,,,2014/15,63.41840681,61.54336877,65.25363835,1640,2586,Value estimated from former primary care organisations covered by the LA +E06000057,Northumberland,UA,Persons,70,,,2014/15,63.54025481,61.97372212,65.07861715,2344,3689,Value estimated from former primary care organisations covered by the LA +E08000001,Bolton,UA,Persons,70,,,2014/15,64.51733135,62.68731129,66.30583966,1731,2683,Value estimated from former primary care organisations covered by the LA +E08000002,Bury,UA,Persons,70,,,2014/15,55.43710021,53.17911009,57.6728689,1040,1876,Value estimated from former primary care organisations covered by the LA +E08000003,Manchester,UA,Persons,70,,,2014/15,55.32069971,53.45437546,57.17214737,1518,2744,Value estimated from former primary care organisations covered by the LA +E08000004,Oldham,UA,Persons,70,,,2014/15,60.71805702,58.49903531,62.89368947,1150,1894,Value estimated from former primary care organisations covered by the LA +E08000005,Rochdale,UA,Persons,70,,,2014/15,61.49137451,59.21924482,63.71447863,1105,1797,Value estimated from former primary care organisations covered by the LA +E08000006,Salford,UA,Persons,70,,,2014/15,47.94591784,45.71937522,50.18065072,922,1923,Value estimated from former primary care organisations covered by the LA +E08000007,Stockport,UA,Persons,70,,,2014/15,60.03153331,58.11168891,61.92104467,1523,2537,Value estimated from former primary care organisations covered by the LA +E08000008,Tameside,UA,Persons,70,,,2014/15,60.12691698,57.90165923,62.31111362,1137,1891,Value estimated from former primary care organisations covered by the LA +E08000009,Trafford,UA,Persons,70,,,2014/15,63.0983016,60.92884337,65.21606934,1226,1943,Value estimated from former primary care organisations covered by the LA +E08000010,Wigan,UA,Persons,70,,,2014/15,57.28802795,55.55247744,59.00581881,1804,3149,Value estimated from former primary care organisations covered by the LA +E08000011,Knowsley,UA,Persons,70,,,2014/15,55.93667546,53.03575441,58.79761638,636,1137,Value estimated from former primary care organisations covered by the LA +E08000012,Liverpool,UA,Persons,70,,,2014/15,56.1382237,54.43877209,57.82339686,1852,3299,Value estimated from former primary care organisations covered by the LA +E08000013,St. Helens,UA,Persons,70,,,2014/15,61.47378833,59.3327365,63.5713263,1243,2022,Value estimated from former primary care organisations covered by the LA +E08000014,Sefton,UA,Persons,70,,,2014/15,59.0186593,57.2160642,60.79734362,1708,2894,Value estimated from former primary care organisations covered by the LA +E08000015,Wirral,UA,Persons,70,,,2014/15,61.58158749,59.93175074,63.20519832,2087,3389,Value estimated from former primary care organisations covered by the LA +E08000016,Barnsley,UA,Persons,70,,,2014/15,62.3470948,60.47358577,64.18439488,1631,2616,Value estimated from former primary care organisations covered by the LA +E08000017,Doncaster,UA,Persons,70,,,2014/15,60.93849081,59.22347035,62.62689829,1922,3154,Value estimated from former primary care organisations covered by the LA +E08000018,Rotherham,UA,Persons,70,,,2014/15,57.43944637,55.52970037,59.32724989,1494,2601,Value estimated from former primary care organisations covered by the LA +E08000019,Sheffield,UA,Persons,70,,,2014/15,55.54263566,54.18317087,56.89385395,2866,5160,Value estimated from former primary care organisations covered by the LA +E08000021,Newcastle upon Tyne,UA,Persons,70,,,2014/15,62.56926952,60.41797474,64.67200906,1242,1985,Value estimated from former primary care organisations covered by the LA +E08000022,North Tyneside,UA,Persons,70,,,2014/15,61.32215096,59.18250925,63.41895961,1243,2027,Value estimated from former primary care organisations covered by the LA +E08000023,South Tyneside,UA,Persons,70,,,2014/15,66.48976497,63.89776149,68.98599772,877,1319,Value estimated from former primary care organisations covered by the LA +E08000024,Sunderland,UA,Persons,70,,,2014/15,62.33974359,60.42128859,64.22027409,1556,2496,Value estimated from former primary care organisations covered by the LA +E08000025,Birmingham,UA,Persons,70,,,2014/15,51.48407987,50.34582373,52.62079848,3816,7412,Value estimated from former primary care organisations covered by the LA +E08000026,Coventry,UA,Persons,70,,,2014/15,59.08080059,57.2138652,60.92191396,1594,2698,Value estimated from former primary care organisations covered by the LA +E08000027,Dudley,UA,Persons,70,,,2014/15,60.6605721,59.00520731,62.29181079,2057,3391,Value estimated from former primary care organisations covered by the LA +E08000028,Sandwell,UA,Persons,70,,,2014/15,53.71259697,51.83032321,55.58434869,1454,2707,Value estimated from former primary care organisations covered by the LA +E08000029,Solihull,UA,Persons,70,,,2014/15,59.98229305,57.94663672,61.98405698,1355,2259,Value estimated from former primary care organisations covered by the LA +E08000030,Walsall,UA,Persons,70,,,2014/15,54.214223,52.16289779,56.251359,1235,2278,Value estimated from former primary care organisations covered by the LA +E08000031,Wolverhampton,UA,Persons,70,,,2014/15,57.72005772,55.58423483,59.82740385,1200,2079,Value estimated from former primary care organisations covered by the LA +E08000032,Bradford,UA,Persons,70,,,2014/15,60.64718163,59.09047671,62.182561,2324,3832,Value estimated from former primary care organisations covered by the LA +E08000033,Calderdale,UA,Persons,70,,,2014/15,61.7344439,59.60566484,63.81913408,1260,2041,Value estimated from former primary care organisations covered by the LA +E08000034,Kirklees,UA,Persons,70,,,2014/15,62.94933484,61.34360829,64.52693215,2224,3533,Value estimated from former primary care organisations covered by the LA +E08000035,Leeds,UA,Persons,70,,,2014/15,63.65532734,62.45306709,64.84076344,3967,6232,Value estimated from former primary care organisations covered by the LA +E08000036,Wakefield,UA,Persons,70,,,2014/15,61.14206128,59.53650985,62.72379321,2195,3590,Value estimated from former primary care organisations covered by the LA +E08000037,Gateshead,UA,Persons,70,,,2014/15,58.94413121,56.74576265,61.10734755,1150,1951,Value estimated from former primary care organisations covered by the LA +E09000001,City of London,UA,Persons,70,,,2014/15,30.15873016,20.23769116,42.36037231,19,63,Value cannot be calculated as number of cases is too small +E09000002,Barking and Dagenham,UA,Persons,70,,,2014/15,49.15590864,46.07724217,52.24099064,495,1007,Value estimated from former primary care organisations covered by the LA +E09000003,Barnet,UA,Persons,70,,,2014/15,55.99060298,54.05786636,57.90534579,1430,2554,Value estimated from former primary care organisations covered by the LA +E09000004,Bexley,UA,Persons,70,,,2014/15,53.10160428,50.83572578,55.35476592,993,1870,Value estimated from former primary care organisations covered by the LA +E09000005,Brent,UA,Persons,70,,,2014/15,51.77926766,49.5538481,53.99765115,1004,1939,Value estimated from former primary care organisations covered by the LA +E09000006,Bromley,UA,Persons,70,,,2014/15,52.4738676,50.64475249,54.29636907,1506,2870,Value estimated from former primary care organisations covered by the LA +E09000007,Camden,UA,Persons,70,,,2014/15,48.54740061,45.84710682,51.25620169,635,1308,Value estimated from former primary care organisations covered by the LA +E09000008,Croydon,UA,Persons,70,,,2014/15,53.56690587,51.55445362,55.56780899,1269,2369,Value estimated from former primary care organisations covered by the LA +E09000009,Ealing,UA,Persons,70,,,2014/15,42.92475154,40.82901257,45.04616959,907,2113,Value estimated from former primary care organisations covered by the LA +E09000010,Enfield,UA,Persons,70,,,2014/15,51.179941,49.00745476,53.34797872,1041,2034,Value estimated from former primary care organisations covered by the LA +E09000011,Greenwich,UA,Persons,70,,,2014/15,46.17985125,43.65226706,48.72722844,683,1479,Value estimated from former primary care organisations covered by the LA +E09000012,Hackney,UA,Persons,70,,,2014/15,41.05378705,37.90341439,44.27929078,374,911,Value for Hackney and City of London combined +E09000013,Hammersmith and Fulham,UA,Persons,70,,,2014/15,32.98578199,30.21492634,35.88009223,348,1055,Value estimated from former primary care organisations covered by the LA +E09000014,Haringey,UA,Persons,70,,,2014/15,48.08219178,45.52774177,50.64670733,702,1460,Value estimated from former primary care organisations covered by the LA +E09000015,Harrow,UA,Persons,70,,,2014/15,51.55350978,49.20312998,53.89703736,896,1738,Value estimated from former primary care organisations covered by the LA +E09000016,Havering,UA,Persons,70,,,2014/15,51.30630631,49.22665916,53.38144044,1139,2220,Value estimated from former primary care organisations covered by the LA +E09000017,Hillingdon,UA,Persons,70,,,2014/15,55.84415584,53.61641964,58.04861374,1075,1925,Value estimated from former primary care organisations covered by the LA +E09000018,Hounslow,UA,Persons,70,,,2014/15,43.7041972,41.21409465,46.22644276,656,1501,Value estimated from former primary care organisations covered by the LA +E09000019,Islington,UA,Persons,70,,,2014/15,47.51381215,44.55773873,50.48741214,516,1086,Value estimated from former primary care organisations covered by the LA +E09000020,Kensington and Chelsea,UA,Persons,70,,,2014/15,24.82043097,22.50799657,27.28678498,311,1253,Value estimated from former primary care organisations covered by the LA +E09000021,Kingston upon Thames,UA,Persons,70,,,2014/15,58.63921218,55.7263194,61.49288662,655,1117,Value estimated from former primary care organisations covered by the LA +E09000022,Lambeth,UA,Persons,70,,,2014/15,43.46060114,40.71605548,46.24583352,535,1231,Value estimated from former primary care organisations covered by the LA +E09000023,Lewisham,UA,Persons,70,,,2014/15,48.01393728,45.43775441,50.60072504,689,1435,Value estimated from former primary care organisations covered by the LA +E09000024,Merton,UA,Persons,70,,,2014/15,47.47557003,44.69482981,50.27205496,583,1228,Value estimated from former primary care organisations covered by the LA +E09000025,Newham,UA,Persons,70,,,2014/15,56.02716469,53.17767818,58.83746978,660,1178,Value estimated from former primary care organisations covered by the LA +E09000026,Redbridge,UA,Persons,70,,,2014/15,46.53692044,44.20808861,48.8809487,813,1747,Value estimated from former primary care organisations covered by the LA +E09000027,Richmond upon Thames,UA,Persons,70,,,2014/15,52.3522316,49.94551156,54.74807696,868,1658,Value estimated from former primary care organisations covered by the LA +E09000028,Southwark,UA,Persons,70,,,2014/15,39.69465649,36.93969286,42.51655648,468,1179,Value estimated from former primary care organisations covered by the LA +E09000029,Sutton,UA,Persons,70,,,2014/15,58.19397993,55.67583253,60.67012578,870,1495,Value estimated from former primary care organisations covered by the LA +E09000030,Tower Hamlets,UA,Persons,70,,,2014/15,49.93498049,46.41019489,53.46041247,384,769,Value estimated from former primary care organisations covered by the LA +E09000031,Waltham Forest,UA,Persons,70,,,2014/15,46.35811836,43.68040874,49.05699564,611,1318,Value estimated from former primary care organisations covered by the LA +E09000032,Wandsworth,UA,Persons,70,,,2014/15,51.54185022,49.08384257,53.9924209,819,1589,Value estimated from former primary care organisations covered by the LA +E09000033,Westminster,UA,Persons,70,,,2014/15,31.79409538,29.33877454,34.35499449,420,1321,Value estimated from former primary care organisations covered by the LA +E45000016,East Midlands PHE centre,PHE Centre from 2015,Persons,70,,,2014/15,62.01607319,61.57937177,62.45083762,29555,47657,Value estimated from former primary care organisations covered by the LA +E45000017,East of England PHE centre,PHE Centre from 2015,Persons,70,,,2014/15,58.33624607,57.94151505,58.72991114,36352,62090,Value estimated from former primary care organisations covered by the LA +E45000018,North West PHE centre,PHE Centre from 2015,Persons,70,,,2014/15,59.79428021,59.42078779,60.16663944,39704,66401,Value estimated from former primary care organisations covered by the LA +E45000019,South East PHE centre,PHE Centre from 2015,Persons,70,,,2014/15,65.6932895,64.38813749,66.9751422,50711,84269,Value estimated from former primary care organisations covered by the LA +E45000020,South West PHE centre,PHE Centre from 2015,Persons,70,,,2014/15,61.32917482,60.93969351,61.71721224,36968,60278,Value estimated from former primary care organisations covered by the LA +E45000001,London PHE centre,PHE Centre from 2013,Persons,70,,,2014/15,48.7285086,48.2905911,49.16662137,24374,50020,Value estimated from former primary care organisations covered by the LA +E45000005,West Midlands PHE centre,PHE Centre from 2013,Persons,70,,,2014/15,59.17828804,58.76527189,59.59001205,32293,54569,Value estimated from former primary care organisations covered by the LA +E45000009,North East PHE centre,PHE Centre from 2013,Persons,70,,,2014/15,61.49910054,60.89437817,62.10029171,15384,25015,Value estimated from former primary care organisations covered by the LA +E45000010,Yorkshire and the Humber PHE centre,PHE Centre from 2013,Persons,70,,,2014/15,60.12094515,59.6983761,60.54201199,31118,51759,Value estimated from former primary care organisations covered by the LA +E10000002,Buckinghamshire,County,Persons,70,,,2014/15,65.6932895,64.38813749,66.9751422,3397,5171,Value estimated from former primary care organisations covered by the LA +E10000003,Cambridgeshire,County,Persons,70,,,2014/15,65.32285045,64.10686578,66.51915486,3905,5978,Value estimated from former primary care organisations covered by the LA +E10000006,Cumbria,County,Persons,70,,,2014/15,61.05726872,59.78153087,62.31804717,3465,5675,Value estimated from former primary care organisations covered by the LA +E10000007,Derbyshire,County,Persons,70,,,2014/15,66.43685708,65.46194398,67.39795644,6071,9138,Value estimated from former primary care organisations covered by the LA +E10000008,Devon,County,Persons,70,,,2014/15,64.01397903,63.06877259,64.9484389,6411,10015,Value estimated from former primary care organisations covered by the LA +E10000009,Dorset,County,Persons,70,,,2014/15,63.26981967,62.02914939,64.49315677,3719,5878,Value estimated from former primary care organisations covered by the LA +E10000011,East Sussex,County,Persons,70,,,2014/15,60.2120793,59.01713432,61.39497383,3918,6507,Value estimated from former primary care organisations covered by the LA +E10000012,Essex,County,Persons,70,,,2014/15,51.94643209,51.15263419,52.73924853,7913,15233,Value estimated from former primary care organisations covered by the LA +E10000013,Gloucestershire,County,Persons,70,,,2014/15,62.21454327,61.04301685,63.37197877,4141,6656,Value estimated from former primary care organisations covered by the LA +E10000014,Hampshire,County,Persons,70,,,2014/15,63.07524239,62.2903226,63.85330503,9238,14646,Value estimated from former primary care organisations covered by the LA +E10000015,Hertfordshire,County,Persons,70,,,2014/15,59.96059318,58.97885866,60.9343949,5782,9643,Value estimated from former primary care organisations covered by the LA +E10000016,Kent,County,Persons,70,,,2014/15,58.67269985,57.90558893,59.43562427,9336,15912,Value estimated from former primary care organisations covered by the LA +E10000017,Lancashire,County,Persons,70,,,2014/15,60.65852003,59.77317457,61.53691862,7148,11784,Value estimated from former primary care organisations covered by the LA +E10000018,Leicestershire,County,Persons,70,,,2014/15,65.08320296,63.96096846,66.18896473,4576,7031,Value for Leicestershire and Rutland combined +E10000019,Lincolnshire,County,Persons,70,,,2014/15,62.80419737,61.79802411,63.79939368,5626,8958,Value estimated from former primary care organisations covered by the LA +E10000020,Norfolk,County,Persons,70,,,2014/15,61.92950959,61.00024278,62.8501191,6554,10583,Value estimated from former primary care organisations covered by the LA +E10000021,Northamptonshire,County,Persons,70,,,2014/15,58.24838478,57.08599484,59.40168115,4057,6965,Value estimated from former primary care organisations covered by the LA +E10000023,North Yorkshire,County,Persons,70,,,2014/15,63.93307735,62.82385341,65.02762899,4662,7292,Value estimated from former primary care organisations covered by the LA +E10000024,Nottinghamshire,County,Persons,70,,,2014/15,59.97226716,58.93578712,60.99989786,5190,8654,Value estimated from former primary care organisations covered by the LA +E10000025,Oxfordshire,County,Persons,70,,,2014/15,63.24157976,61.99763771,64.46813983,3699,5849,Value estimated from former primary care organisations covered by the LA +E10000027,Somerset,County,Persons,70,,,2014/15,60.3074558,59.11275553,61.48998935,3923,6505,Value estimated from former primary care organisations covered by the LA +E10000028,Staffordshire,County,Persons,70,,,2014/15,59.01956568,58.01662598,60.01505883,5490,9302,Value estimated from former primary care organisations covered by the LA +E10000029,Suffolk,County,Persons,70,,,2014/15,60.99023091,59.97846873,61.99262352,5494,9008,Value estimated from former primary care organisations covered by the LA +E10000030,Surrey,County,Persons,70,,,2014/15,55.98662207,55.03352626,56.9353244,5859,10465,Value estimated from former primary care organisations covered by the LA +E10000031,Warwickshire,County,Persons,70,,,2014/15,59.76884104,58.55392366,60.97188261,3775,6316,Value estimated from former primary care organisations covered by the LA +E10000032,West Sussex,County,Persons,70,,,2014/15,60.98468737,59.99452296,61.96588112,5735,9404,Value estimated from former primary care organisations covered by the LA +E10000034,Worcestershire,County,Persons,70,,,2014/15,64.4897352,63.3377692,65.6251496,4335,6722,Value estimated from former primary care organisations covered by the LA +E92000001,England,Country,Persons,70,,,2014/15,59.04875532,58.9126643,59.18470787,296459,502058,Value estimated from former primary care organisations covered by the LA +E47000001,CA-Greater Manchester,Combined authorities,Persons,70,,,2014/15,58.63528992,,,13156,22437,Aggregated from all known lower geography values +E47000002,CA-Sheffield City Region,Combined authorities,Persons,70,,,2014/15,58.4805262,,,7913,13531,Aggregated from all known lower geography values +E47000003,CA-West Yorkshire,Combined authorities,Persons,70,,,2014/15,62.25296443,,,11970,19228,Aggregated from all known lower geography values +E47000004,CA-Liverpool City Region,Combined authorities,Persons,70,,,2014/15,58.41998845,,,8090,13848,Aggregated from all known lower geography values +E47000005,CA-North East,Combined authorities,Persons,70,,,2014/15,62.34758491,,,11914,19109,Aggregated from all known lower geography values +E47000006,CA-Tees Valley,Combined authorities,Persons,70,,,2014/15,58.75380969,,,3470,5906,Aggregated from all known lower geography values +E47000007,CA-West Midlands,Combined authorities,Persons,70,,,2014/15,55.6913775,,,12711,22824,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Most deprived decile (IMD2010),2014/15,53.42570962,,,16695,31249,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Second most deprived decile (IMD2010),2014/15,53.87630828,,,14156,26275,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Third more deprived decile (IMD2010),2014/15,60.39704759,,,18984,31432,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Fourth more deprived decile (IMD2010),2014/15,58.01177558,,,23844,41102,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Fifth more deprived decile (IMD2010),2014/15,56.10205761,,,17041,30375,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Fifth less deprived decile (IMD2010),2014/15,58.16100081,,,29615,50919,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Fourth less deprived decile (IMD2010),2014/15,61.29461418,,,53444,87192,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Third less deprived decile (IMD2010),2014/15,60.21385254,,,33957,56394,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Second least deprived decile (IMD2010),2014/15,59.39390373,,,50467,84970,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Least deprived decile (IMD2010),2014/15,61.5543041,,,38256,62150,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Most deprived decile (IMD2015),2014/15,55.21112016,,,18986,34388,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Second most deprived decile (IMD2015),2014/15,55.75998486,,,14729,26415,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Third more deprived decile (IMD2015),2014/15,57.25858606,,,16822,29379,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Fourth more deprived decile (IMD2015),2014/15,58.6781349,,,25924,44180,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Fifth more deprived decile (IMD2015),2014/15,55.10047553,,,17960,32595,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Fifth less deprived decile (IMD2015),2014/15,59.62567296,,,35330,59253,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Fourth less deprived decile (IMD2015),2014/15,60.52980132,,,45243,74745,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Third less deprived decile (IMD2015),2014/15,58.77587015,,,42656,72574,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Second least deprived decile (IMD2015),2014/15,61.28454755,,,41421,67588,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Least deprived decile (IMD2015),2014/15,61.35114291,,,37388,60941,Aggregated from all known lower geography values +E12000001,North East region,Region,Persons,70,,,2015/16,57.11743036,56.49227734,57.74032029,13799,24159, +E12000002,North West region,Region,Persons,70,,,2015/16,55.53588386,55.14481558,55.92626763,34505,62131, +E12000003,Yorkshire and the Humber region,Region,Persons,70,,,2015/16,55.38585559,54.93065877,55.84015094,25421,45898, +E12000004,East Midlands region,Region,Persons,70,,,2015/16,57.0454384,56.57271514,57.51688009,24092,42233, +E12000005,West Midlands region,Region,Persons,70,,,2015/16,55.54431404,55.10579294,55.98197329,27450,49420, +E12000006,East of England region,Region,Persons,70,,,2015/16,53.54147075,53.11730162,53.96512819,28468,53170, +E12000007,London region,Region,Persons,70,,,2015/16,47.14357706,46.67558977,47.612067,20581,43656, +E12000008,South East region,Region,Persons,70,,,2015/16,55.78602895,55.44042003,56.13107838,44322,79450, +E12000009,South West region,Region,Persons,70,,,2015/16,56.52234784,56.11546684,56.92835194,32298,57142, +E06000001,Hartlepool,UA,Persons,70,,,2015/16,47.4892396,43.80588652,51.20011668,331,697, +E06000002,Middlesbrough,UA,Persons,70,,,2015/16,46.50283554,43.51544619,49.51552851,492,1058, +E06000003,Redcar and Cleveland,UA,Persons,70,,,2015/16,57.70440252,54.97027898,60.39213135,734,1272, +E06000004,Stockton-on-Tees,UA,Persons,70,,,2015/16,59.12627169,56.75088237,61.45979653,988,1671, +E06000005,Darlington,UA,Persons,70,,,2015/16,56.46687697,53.29597956,59.5857401,537,951, +E06000006,Halton,UA,Persons,70,,,2015/16,37.5,34.30482603,40.80791381,318,848, +E06000007,Warrington,UA,Persons,70,,,2015/16,53.4502924,51.08100079,55.80411682,914,1710, +E06000008,Blackburn with Darwen,UA,Persons,70,,,2015/16,57.11878686,54.28483716,59.90680848,678,1187, +E06000009,Blackpool,UA,Persons,70,,,2015/16,53.43283582,51.03887562,55.81108626,895,1675, +E06000010,Kingston upon Hull,UA,Persons,70,,,2015/16,51.75097276,49.58978787,53.90562678,1064,2056, +E06000011,East Riding of Yorkshire,UA,Persons,70,,,2015/16,53.33333333,51.68368198,54.97572743,1880,3525, +E06000012,North East Lincolnshire,UA,Persons,70,,,2015/16,47.86432161,45.41855097,50.32037412,762,1592, +E06000013,North Lincolnshire,UA,Persons,70,,,2015/16,49.05778894,46.60734653,51.51276748,781,1592, +E06000014,York,UA,Persons,70,,,2015/16,53.50285418,51.27114888,55.72062144,1031,1927, +E06000015,Derby,UA,Persons,70,,,2015/16,56.97102242,54.68966935,59.2231543,1042,1829, +E06000016,Leicester,UA,Persons,70,,,2015/16,43.94313968,41.54196115,46.3730105,711,1618, +E06000017,Rutland,UA,Persons,70,,,2015/16,64.43514644,60.04418507,68.59594074,308,478, +E06000018,Nottingham,UA,Persons,70,,,2015/16,57.86694826,55.62947492,60.0725743,1096,1894, +E06000019,Herefordshire,UA,Persons,70,,,2015/16,57.02792239,54.90630354,59.12403391,1205,2113, +E06000020,Telford and Wrekin,UA,Persons,70,,,2015/16,50.68587106,48.12119503,53.24694239,739,1458, +E06000021,Stoke-on-Trent,UA,Persons,70,,,2015/16,57.50556793,55.44960668,59.53588724,1291,2245, +E06000022,Bath and North East Somerset,UA,Persons,70,,,2015/16,58.5446527,56.26185909,60.79133323,1062,1814, +E06000023,Bristol,UA,Persons,70,,,2015/16,52.92611558,51.05231817,54.79170174,1447,2734, +E06000024,North Somerset,UA,Persons,70,,,2015/16,58.24308063,56.29598928,60.16480756,1452,2493, +E06000025,South Gloucestershire,UA,Persons,70,,,2015/16,58.47563515,56.49260484,60.43158775,1404,2401, +E06000026,Plymouth,UA,Persons,70,,,2015/16,54.28206221,52.26129192,56.28883805,1274,2347, +E06000027,Torbay,UA,Persons,70,,,2015/16,52.58899676,49.80155733,55.36039298,650,1236, +E06000028,Bournemouth,UA,Persons,70,,,2015/16,53.87962292,51.24145732,56.49623375,743,1379, +E06000029,Poole,UA,Persons,70,,,2015/16,51.93266833,49.48589941,54.37020218,833,1604, +E06000030,Swindon,UA,Persons,70,,,2015/16,52.00235571,49.62421807,54.37145377,883,1698, +E06000031,Peterborough,UA,Persons,70,,,2015/16,57.55813953,53.83298753,61.1993582,396,688, +E06000032,Luton,UA,Persons,70,,,2015/16,53.68956743,50.83591884,56.51925115,633,1179, +E06000033,Southend-on-Sea,UA,Persons,70,,,2015/16,44.33234421,41.9759259,46.71454597,747,1685, +E06000034,Thurrock,UA,Persons,70,,,2015/16,48.50615114,45.61235234,51.41000136,552,1138, +E06000035,Medway,UA,Persons,70,,,2015/16,52.40295749,50.29635866,54.50104014,1134,2164, +E06000036,Bracknell Forest,UA,Persons,70,,,2015/16,65.1826484,61.96784287,68.26487659,571,876, +E06000037,West Berkshire,UA,Persons,70,,,2015/16,68.78388846,66.20364399,71.25267907,888,1291, +E06000038,Reading,UA,Persons,70,,,2015/16,57.81132075,55.13332932,60.44414974,766,1325, +E06000039,Slough,UA,Persons,70,,,2015/16,51.03092784,46.97620691,55.07212883,297,582, +E06000040,Windsor and Maidenhead,UA,Persons,70,,,2015/16,53.51629503,50.64662144,56.36287539,624,1166, +E06000041,Wokingham,UA,Persons,70,,,2015/16,49.75891996,46.72227833,52.79734111,516,1037, +E06000042,Milton Keynes,UA,Persons,70,,,2015/16,59.37155458,57.0939213,61.60957995,1077,1814, +E06000043,Brighton and Hove,UA,Persons,70,,,2015/16,47.22850679,44.90996545,49.55906565,835,1768, +E06000044,Portsmouth,UA,Persons,70,,,2015/16,49.41860465,46.78222672,52.05821978,680,1376, +E06000045,Southampton,UA,Persons,70,,,2015/16,57.67557489,55.24596555,60.06862093,928,1609, +E06000046,Isle of Wight,UA,Persons,70,,,2015/16,49.4939759,47.34566952,51.64415244,1027,2075, +E06000047,County Durham,UA,Persons,70,,,2015/16,57.5983965,56.28604111,58.90012197,3161,5488, +E06000049,Cheshire East,UA,Persons,70,,,2015/16,62.82823416,61.3468754,64.28587162,2608,4151, +E06000050,Cheshire West and Chester,UA,Persons,70,,,2015/16,59.66436919,57.98972218,61.3167911,1991,3337, +E06000051,Shropshire,UA,Persons,70,,,2015/16,63.29738059,61.6241911,64.93912419,2054,3245, +E06000052,Cornwall,UA,Persons,70,,,2015/16,53.75476679,52.56950205,54.93580283,3665,6818, +E06000053,Isles of Scilly,UA,Persons,70,,,2015/16,70.96774194,53.40767067,83.90419984,22,31, +E06000054,Wiltshire,UA,Persons,70,,,2015/16,56.64227955,55.29013656,57.98460461,2942,5194, +E06000055,Bedford,UA,Persons,70,,,2015/16,59.43127962,56.43928983,62.35483637,627,1055, +E06000056,Central Bedfordshire,UA,Persons,70,,,2015/16,58.92175573,56.80111474,61.00975372,1235,2096, +E06000057,Northumberland,UA,Persons,70,,,2015/16,59.73509934,58.16149526,61.28891058,2255,3775, +E08000001,Bolton,UA,Persons,70,,,2015/16,59.929391,57.89655041,61.92862276,1358,2266, +E08000002,Bury,UA,Persons,70,,,2015/16,52.56166983,50.09704203,55.01387929,831,1581, +E08000003,Manchester,UA,Persons,70,,,2015/16,48.15229563,46.2642341,50.04564848,1290,2679, +E08000004,Oldham,UA,Persons,70,,,2015/16,57.05984893,54.70808484,59.38016651,982,1721, +E08000005,Rochdale,UA,Persons,70,,,2015/16,58.90410959,56.58322433,61.18603373,1032,1752, +E08000006,Salford,UA,Persons,70,,,2015/16,39.4265233,37.11226373,41.78919933,660,1674, +E08000007,Stockport,UA,Persons,70,,,2015/16,62.83112583,60.88520104,64.73631221,1518,2416, +E08000008,Tameside,UA,Persons,70,,,2015/16,55.58974359,53.37558458,57.78192255,1084,1950, +E08000009,Trafford,UA,Persons,70,,,2015/16,55.26859504,53.04549862,57.47082471,1070,1936, +E08000010,Wigan,UA,Persons,70,,,2015/16,53.08680664,51.35262047,54.8135697,1694,3191, +E08000011,Knowsley,UA,Persons,70,,,2015/16,54.36802974,51.38164273,57.32333885,585,1076, +E08000012,Liverpool,UA,Persons,70,,,2015/16,51.15254237,49.3484025,52.9536845,1509,2950, +E08000013,St. Helens,UA,Persons,70,,,2015/16,58.299389,56.10463397,60.46174126,1145,1964, +E08000014,Sefton,UA,Persons,70,,,2015/16,55.61559244,53.69562063,57.51893736,1441,2591, +E08000015,Wirral,UA,Persons,70,,,2015/16,59.17371503,57.42578941,60.89874119,1819,3074, +E08000016,Barnsley,UA,Persons,70,,,2015/16,59.73101266,57.80583152,61.62666487,1510,2528, +E08000017,Doncaster,UA,Persons,70,,,2015/16,53.59725923,51.68634624,55.49766705,1408,2627, +E08000018,Rotherham,UA,Persons,70,,,2015/16,54.34952978,52.41189513,56.27408965,1387,2552, +E08000019,Sheffield,UA,Persons,70,,,2015/16,55.1047704,53.64551588,56.55528974,2472,4486, +E08000021,Newcastle upon Tyne,UA,Persons,70,,,2015/16,57.93696275,55.6057949,60.23326235,1011,1745, +E08000022,North Tyneside,UA,Persons,70,,,2015/16,56.34028892,54.08105099,58.57351723,1053,1869, +E08000023,South Tyneside,UA,Persons,70,,,2015/16,65.39842067,62.86108411,67.85106273,911,1393, +E08000024,Sunderland,UA,Persons,70,,,2015/16,55.27597403,53.30606446,57.22945836,1362,2464, +E08000025,Birmingham,UA,Persons,70,,,2015/16,50.67389875,49.41759682,51.92935022,3083,6084, +E08000026,Coventry,UA,Persons,70,,,2015/16,57.82401387,55.79747421,59.82454082,1334,2307, +E08000027,Dudley,UA,Persons,70,,,2015/16,59.357022,57.57506525,61.11468234,1754,2955, +E08000028,Sandwell,UA,Persons,70,,,2015/16,48.10606061,46.10172292,50.11651256,1143,2376, +E08000029,Solihull,UA,Persons,70,,,2015/16,53.11240484,51.03901988,55.17509957,1186,2233, +E08000030,Walsall,UA,Persons,70,,,2015/16,50.72727273,48.63871858,52.81329149,1116,2200, +E08000031,Wolverhampton,UA,Persons,70,,,2015/16,51.90274841,49.64982267,54.14796325,982,1892, +E08000032,Bradford,UA,Persons,70,,,2015/16,52.67614152,50.97234054,54.37373242,1742,3307, +E08000033,Calderdale,UA,Persons,70,,,2015/16,58.93437297,56.45725573,61.36699954,907,1539, +E08000034,Kirklees,UA,Persons,70,,,2015/16,55.74441297,54.01137806,57.46357298,1771,3177, +E08000035,Leeds,UA,Persons,70,,,2015/16,58.61419695,57.28382794,59.93211363,3113,5311, +E08000036,Wakefield,UA,Persons,70,,,2015/16,52.58497572,50.92902633,54.23525862,1841,3501, +E08000037,Gateshead,UA,Persons,70,,,2015/16,54.27927928,51.95566435,56.58442214,964,1776, +E09000001,City of London,UA,Persons,70,,,2015/16,42.1875,30.86978247,54.38996846,27,64, +E09000002,Barking and Dagenham,UA,Persons,70,,,2015/16,47.96633941,44.3200356,51.63443946,342,713, +E09000003,Barnet,UA,Persons,70,,,2015/16,54.22842197,52.18430109,56.25840496,1244,2294, +E09000004,Bexley,UA,Persons,70,,,2015/16,45.76379974,43.30341014,48.24502781,713,1558, +E09000005,Brent,UA,Persons,70,,,2015/16,51.73485241,49.50484831,53.95796771,999,1931, +E09000006,Bromley,UA,Persons,70,,,2015/16,48.7987988,46.90376615,50.6972907,1300,2664, +E09000007,Camden,UA,Persons,70,,,2015/16,47.64841943,44.94125984,50.36946773,618,1297, +E09000008,Croydon,UA,Persons,70,,,2015/16,46.98397738,44.8678321,49.11102274,997,2122, +E09000009,Ealing,UA,Persons,70,,,2015/16,45.73991031,43.28202967,48.21870676,714,1561, +E09000010,Enfield,UA,Persons,70,,,2015/16,50.24820739,47.94860176,52.54676342,911,1813, +E09000011,Greenwich,UA,Persons,70,,,2015/16,38.36705202,35.84067577,40.95782683,531,1384, +E09000012,Hackney,UA,Persons,70,,,2015/16,33.87445887,30.89517677,36.98726724,313,924, +E09000013,Hammersmith and Fulham,UA,Persons,70,,,2015/16,28.55297158,25.48302574,31.83475461,221,774, +E09000014,Haringey,UA,Persons,70,,,2015/16,48.91380519,46.32660001,51.5068427,698,1427, +E09000015,Harrow,UA,Persons,70,,,2015/16,50.54566341,48.19853611,52.89038804,880,1741, +E09000016,Havering,UA,Persons,70,,,2015/16,47.51178628,45.27888021,49.75468624,907,1909, +E09000017,Hillingdon,UA,Persons,70,,,2015/16,54.91849354,52.59819976,57.21759172,977,1779, +E09000018,Hounslow,UA,Persons,70,,,2015/16,42.71765663,39.97898665,45.50170929,525,1229, +E09000019,Islington,UA,Persons,70,,,2015/16,45.55765595,42.57819771,48.56925663,482,1058, +E09000020,Kensington and Chelsea,UA,Persons,70,,,2015/16,25.61247216,22.86567993,28.56702526,230,898, +E09000021,Kingston upon Thames,UA,Persons,70,,,2015/16,50.1980198,47.11954545,53.27499356,507,1010, +E09000022,Lambeth,UA,Persons,70,,,2015/16,42.08400646,39.36255956,44.85442735,521,1238, +E09000023,Lewisham,UA,Persons,70,,,2015/16,48.01762115,45.37361501,50.67277825,654,1362, +E09000024,Merton,UA,Persons,70,,,2015/16,47.01754386,43.69284748,50.36892033,402,855, +E09000025,Newham,UA,Persons,70,,,2015/16,51.6293279,48.50348075,54.74247728,507,982, +E09000026,Redbridge,UA,Persons,70,,,2015/16,45.8478716,43.28256205,48.43538295,657,1433, +E09000027,Richmond upon Thames,UA,Persons,70,,,2015/16,51.37693632,48.50337552,54.24142308,597,1162, +E09000028,Southwark,UA,Persons,70,,,2015/16,41.37931034,38.54286164,44.27412143,468,1131, +E09000029,Sutton,UA,Persons,70,,,2015/16,58.81513205,56.21727462,61.36478053,824,1401, +E09000030,Tower Hamlets,UA,Persons,70,,,2015/16,46.15384615,42.42815466,49.92300319,312,676, +E09000031,Waltham Forest,UA,Persons,70,,,2015/16,48.11229429,45.07802971,51.16054663,497,1033, +E09000032,Wandsworth,UA,Persons,70,,,2015/16,48.92241379,46.30297633,51.54778245,681,1392, +E09000033,Westminster,UA,Persons,70,,,2015/16,38.64447087,35.41224342,41.97996455,325,841, +E45000016,East Midlands PHE centre,PHE Centre from 2015,Persons,70,,,2015/16,57.0454384,,,24092,42233,Aggregated from all known lower geography values +E45000017,East of England PHE centre,PHE Centre from 2015,Persons,70,,,2015/16,53.73381347,,,29545,54984,Aggregated from all known lower geography values +E45000018,North West PHE centre,PHE Centre from 2015,Persons,70,,,2015/16,55.53588386,,,34505,62131,Aggregated from all known lower geography values +E45000019,South East PHE centre,PHE Centre from 2015,Persons,70,,,2015/16,55.70225153,,,43245,77636,Aggregated from all known lower geography values +E45000020,South West PHE centre,PHE Centre from 2015,Persons,70,,,2015/16,56.52234784,,,32298,57142,Aggregated from all known lower geography values +E45000001,London PHE centre,PHE Centre from 2013,Persons,70,,,2015/16,47.14357706,,,20581,43656,Aggregated from all known lower geography values +E45000005,West Midlands PHE centre,PHE Centre from 2013,Persons,70,,,2015/16,55.54431404,,,27450,49420,Aggregated from all known lower geography values +E45000009,North East PHE centre,PHE Centre from 2013,Persons,70,,,2015/16,57.11743036,,,13799,24159,Aggregated from all known lower geography values +E45000010,Yorkshire and the Humber PHE centre,PHE Centre from 2013,Persons,70,,,2015/16,55.38585559,,,25421,45898,Aggregated from all known lower geography values +E10000002,Buckinghamshire,County,Persons,70,,,2015/16,57.40138268,56.01411831,58.7770936,2823,4918, +E10000003,Cambridgeshire,County,Persons,70,,,2015/16,58.97297297,57.67311333,60.26041984,3273,5550, +E10000006,Cumbria,County,Persons,70,,,2015/16,56.64091244,55.31929215,57.95315348,3079,5436, +E10000007,Derbyshire,County,Persons,70,,,2015/16,58.05532471,56.99804775,59.10525747,4890,8423, +E10000008,Devon,County,Persons,70,,,2015/16,60.33559811,59.35886762,61.30415728,5861,9714, +E10000009,Dorset,County,Persons,70,,,2015/16,54.93200536,53.57923011,56.2775283,2868,5221, +E10000011,East Sussex,County,Persons,70,,,2015/16,56.81780435,55.56270161,58.06421298,3421,6021, +E10000012,Essex,County,Persons,70,,,2015/16,47.94609867,47.11336452,48.77997573,6618,13803, +E10000013,Gloucestershire,County,Persons,70,,,2015/16,57.99298022,56.76655864,59.20961051,3635,6268, +E10000014,Hampshire,County,Persons,70,,,2015/16,57.99131216,57.15193722,58.82609013,7743,13352, +E10000015,Hertfordshire,County,Persons,70,,,2015/16,53.71098266,52.65879028,54.75988041,4646,8650, +E10000016,Kent,County,Persons,70,,,2015/16,54.65371128,53.81853552,55.4862757,7481,13688, +E10000017,Lancashire,County,Persons,70,,,2015/16,54.7510487,53.81795739,55.68081253,6004,10966, +E10000018,Leicestershire,County,Persons,70,,,2015/16,62.88519637,61.71426791,64.04117945,4163,6620, +E10000019,Lincolnshire,County,Persons,70,,,2015/16,56.4567508,55.3783191,57.52910759,4608,8162, +E10000020,Norfolk,County,Persons,70,,,2015/16,55.02087453,53.99697443,56.04053835,5008,9102, +E10000021,Northamptonshire,County,Persons,70,,,2015/16,50.47117074,49.23281587,51.70894778,3160,6261, +E10000023,North Yorkshire,County,Persons,70,,,2015/16,60.73162836,59.50758404,61.94233519,3752,6178, +E10000024,Nottinghamshire,County,Persons,70,,,2015/16,59.21128382,58.05094741,60.36144026,4114,6948, +E10000025,Oxfordshire,County,Persons,70,,,2015/16,57.98057541,56.66581384,59.28410902,3164,5457, +E10000027,Somerset,County,Persons,70,,,2015/16,57.46365105,56.22776755,58.69027655,3557,6190, +E10000028,Staffordshire,County,Persons,70,,,2015/16,53.96611002,52.88199198,55.04648826,4395,8144, +E10000029,Suffolk,County,Persons,70,,,2015/16,57.55107004,56.4795536,58.61553551,4733,8224, +E10000030,Surrey,County,Persons,70,,,2015/16,52.4501992,51.47259558,53.42592857,5266,10040, +E10000031,Warwickshire,County,Persons,70,,,2015/16,59.35603506,58.10046217,60.59949819,3521,5932, +E10000032,West Sussex,County,Persons,70,,,2015/16,57.14767743,56.11617786,58.17300319,5081,8891, +E10000034,Worcestershire,County,Persons,70,,,2015/16,58.48300192,57.25515505,59.70040395,3647,6236, +E92000001,England,Country,Persons,70,,,2015/16,54.87830748,54.73403564,55.02249736,250936,457259, +E47000001,CA-Greater Manchester,Combined authorities,Persons,70,,,2015/16,54.42218653,,,11519,21166,Aggregated from all known lower geography values +E47000002,CA-Sheffield City Region,Combined authorities,Persons,70,,,2015/16,55.58107111,,,6777,12193,Aggregated from all known lower geography values +E47000003,CA-West Yorkshire,Combined authorities,Persons,70,,,2015/16,55.68161568,,,9374,16835,Aggregated from all known lower geography values +E47000004,CA-Liverpool City Region,Combined authorities,Persons,70,,,2015/16,54.5229145,,,6817,12503,Aggregated from all known lower geography values +E47000005,CA-North East,Combined authorities,Persons,70,,,2015/16,57.89843328,,,10717,18510,Aggregated from all known lower geography values +E47000006,CA-Tees Valley,Combined authorities,Persons,70,,,2015/16,54.55832891,,,3082,5649,Aggregated from all known lower geography values +E47000007,CA-West Midlands,Combined authorities,Persons,70,,,2015/16,52.86576545,,,10598,20047,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Most deprived decile (IMD2010),2015/16,50.04063748,,,14161,28299,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Second most deprived decile (IMD2010),2015/16,49.42819766,,,11713,23697,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Third more deprived decile (IMD2010),2015/16,56.06391696,,,16420,29288,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Fourth more deprived decile (IMD2010),2015/16,54.37419146,,,20175,37104,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Fifth more deprived decile (IMD2010),2015/16,53.45801527,,,14006,26200,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Fifth less deprived decile (IMD2010),2015/16,53.17347195,,,25368,47708,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Fourth less deprived decile (IMD2010),2015/16,56.56413337,,,44262,78251,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Third less deprived decile (IMD2010),2015/16,56.02386302,,,28924,51628,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Second least deprived decile (IMD2010),2015/16,55.72597268,,,43527,78109,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2010),Least deprived decile (IMD2010),2015/16,56.83194384,,,32380,56975,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Most deprived decile (IMD2015),2015/16,51.56385056,,,16107,31237,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Second most deprived decile (IMD2015),2015/16,50.98006506,,,12224,23978,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Third more deprived decile (IMD2015),2015/16,54.28593774,,,13882,25572,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Fourth more deprived decile (IMD2015),2015/16,54.71428571,,,22214,40600,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Fifth more deprived decile (IMD2015),2015/16,50.6374052,,,15690,30985,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Fifth less deprived decile (IMD2015),2015/16,54.87135281,,,29281,53363,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Fourth less deprived decile (IMD2015),2015/16,56.4685893,,,37555,66506,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Third less deprived decile (IMD2015),2015/16,54.51923943,,,36300,66582,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Second least deprived decile (IMD2015),2015/16,57.94564055,,,36307,62657,Aggregated from all known lower geography values +E92000001,England,Country,Persons,70,County & UA deprivation deciles in England (IMD2015),Least deprived decile (IMD2015),2015/16,56.25056025,,,31376,55779,Aggregated from all known lower geography values diff --git a/error_handling_in_R/data/303xviiipopulationvaccinationcoverageflu24yearsold.data.csv b/error_handling_in_R/data/303xviiipopulationvaccinationcoverageflu24yearsold.data.csv new file mode 100644 index 0000000..e8217f4 --- /dev/null +++ b/error_handling_in_R/data/303xviiipopulationvaccinationcoverageflu24yearsold.data.csv @@ -0,0 +1,397 @@ +Area Code,Area Name,Area Type,Sex,Age,Category Type,Category,Time period,Value,Lower CI limit,Upper CI limit,Count,Denominator,Value note +E12000001,North East region,Region,Persons,2-4 yrs,,,2014/15,40.91371507,40.60359838,41.2245564,39413,96332,Aggregated from all known lower geography values +E12000002,North West region,Region,Persons,2-4 yrs,,,2014/15,38.25132236,38.07373034,38.42922868,109849,287177,Aggregated from all known lower geography values +E12000003,Yorkshire and the Humber region,Region,Persons,2-4 yrs,,,2014/15,39.05774724,38.85219299,39.26369071,84362,215993,Aggregated from all known lower geography values +E12000004,East Midlands region,Region,Persons,2-4 yrs,,,2014/15,42.28670401,42.05873872,42.51499827,76174,180137,Aggregated from all known lower geography values +E12000005,West Midlands region,Region,Persons,2-4 yrs,,,2014/15,36.01099598,35.81773908,36.20470742,85148,236450,Aggregated from all known lower geography values +E12000006,East of England region,Region,Persons,2-4 yrs,,,2014/15,40.93718687,40.7416293,41.13303155,99278,242513,Aggregated from all known lower geography values +E12000007,London region,Region,Persons,2-4 yrs,,,2014/15,28.88732045,28.74623567,29.02881557,114191,395298,Aggregated from all known lower geography values +E12000008,South East region,Region,Persons,2-4 yrs,,,2014/15,39.33036018,39.16931992,39.4916327,138811,352936,Aggregated from all known lower geography values +E12000009,South West region,Region,Persons,2-4 yrs,,,2014/15,41.21889741,41.00202386,41.43611243,81437,197572,Aggregated from all known lower geography values +E06000001,Hartlepool,UA,Persons,2-4 yrs,,,2014/15,27.50337382,26.08940632,28.9639434,1019,3705, +E06000002,Middlesbrough,UA,Persons,2-4 yrs,,,2014/15,33.82375019,32.69720083,34.96894677,2253,6661, +E06000003,Redcar and Cleveland,UA,Persons,2-4 yrs,,,2014/15,30.34659315,29.09731387,31.62558518,1541,5078, +E06000004,Stockton-on-Tees,UA,Persons,2-4 yrs,,,2014/15,42.54239386,41.46810105,43.62377529,3437,8079, +E06000005,Darlington,UA,Persons,2-4 yrs,,,2014/15,44.97784343,43.4534631,46.51171375,1827,4062, +E06000006,Halton,UA,Persons,2-4 yrs,,,2014/15,35.09280742,33.80361559,36.4041272,1815,5172, +E06000007,Warrington,UA,Persons,2-4 yrs,,,2014/15,38.49459725,37.44347413,39.55656926,3135,8144, +E06000008,Blackburn with Darwen,UA,Persons,2-4 yrs,,,2014/15,34.75641697,33.69624832,35.83191515,2654,7636, +E06000009,Blackpool,UA,Persons,2-4 yrs,,,2014/15,32.44398837,31.25585527,33.6551748,1897,5847, +E06000010,Kingston upon Hull,UA,Persons,2-4 yrs,,,2014/15,33.3496054,32.52143018,34.18818528,4099,12291, +E06000011,East Riding of Yorkshire,UA,Persons,2-4 yrs,,,2014/15,40.30312095,39.34702543,41.26664211,4042,10029, +E06000012,North East Lincolnshire,UA,Persons,2-4 yrs,,,2014/15,35.24174981,34.09073135,36.41016191,2296,6515, +E06000013,North Lincolnshire,UA,Persons,2-4 yrs,,,2014/15,35.32809241,34.15082453,36.52343403,2202,6233, +E06000014,York,UA,Persons,2-4 yrs,,,2014/15,41.28134512,40.12474072,42.44765346,2848,6899, +E06000015,Derby,UA,Persons,2-4 yrs,,,2014/15,41.61427358,40.72664977,42.50736941,4898,11770, +E06000016,Leicester,UA,Persons,2-4 yrs,,,2014/15,33.65882703,32.94797632,34.37715135,5653,16795, +E06000017,Rutland,UA,Persons,2-4 yrs,,,2014/15,,,,,,Value for Leicestershire and Rutland combined +E06000018,Nottingham,UA,Persons,2-4 yrs,,,2014/15,34.80480265,34.01745672,35.60053963,4841,13909, +E06000019,Herefordshire,UA,Persons,2-4 yrs,,,2014/15,37.89698865,36.68527022,39.12399878,2303,6077, +E06000020,Telford and Wrekin,UA,Persons,2-4 yrs,,,2014/15,39.71631206,38.5911559,40.85244952,2856,7191, +E06000021,Stoke-on-Trent,UA,Persons,2-4 yrs,,,2014/15,31.33429468,30.50317301,32.17757687,3694,11789, +E06000022,Bath and North East Somerset,UA,Persons,2-4 yrs,,,2014/15,44.95012469,43.73631362,46.16997917,2884,6416, +E06000023,Bristol,UA,Persons,2-4 yrs,,,2014/15,40.67488381,39.99246444,41.36092161,8052,19796, +E06000024,North Somerset,UA,Persons,2-4 yrs,,,2014/15,44.49604619,43.40771079,45.58968673,3545,7967, +E06000025,South Gloucestershire,UA,Persons,2-4 yrs,,,2014/15,49.50169328,48.53813684,50.46562,5116,10335, +E06000026,Plymouth,UA,Persons,2-4 yrs,,,2014/15,36.33658286,35.38720399,37.29672967,3541,9745, +E06000027,Torbay,UA,Persons,2-4 yrs,,,2014/15,37.01366982,35.65227824,38.3960272,1760,4755, +E06000028,Bournemouth,UA,Persons,2-4 yrs,,,2014/15,39.08419498,37.92839554,40.25237516,2646,6770, +E06000029,Poole,UA,Persons,2-4 yrs,,,2014/15,39.20967989,38.03211909,40.3999306,2560,6529, +E06000030,Swindon,UA,Persons,2-4 yrs,,,2014/15,37.88094271,36.92758153,38.84375872,3729,9844, +E06000031,Peterborough,UA,Persons,2-4 yrs,,,2014/15,29.84052341,28.94184495,30.75502918,2919,9782, +E06000032,Luton,UA,Persons,2-4 yrs,,,2014/15,29.26519197,28.45109436,30.09278664,3453,11799, +E06000033,Southend-on-Sea,UA,Persons,2-4 yrs,,,2014/15,36.20136662,35.09671633,37.32079266,2596,7171, +E06000034,Thurrock,UA,Persons,2-4 yrs,,,2014/15,38.98898899,37.92523297,40.0633251,3116,7992, +E06000035,Medway,UA,Persons,2-4 yrs,,,2014/15,37.91581528,37.06003502,38.77918138,4639,12235, +E06000036,Bracknell Forest,UA,Persons,2-4 yrs,,,2014/15,45.14043241,43.75830268,46.53010037,2234,4949, +E06000037,West Berkshire,UA,Persons,2-4 yrs,,,2014/15,52.62267343,51.34838901,53.89355063,3110,5910, +E06000038,Reading,UA,Persons,2-4 yrs,,,2014/15,39.95402779,38.97696977,40.93914677,3824,9571, +E06000039,Slough,UA,Persons,2-4 yrs,,,2014/15,31.66544923,30.6682514,32.67978817,2601,8214, +E06000040,Windsor and Maidenhead,UA,Persons,2-4 yrs,,,2014/15,40.4405853,39.22709618,41.66587678,2515,6219, +E06000041,Wokingham,UA,Persons,2-4 yrs,,,2014/15,47.37864078,46.08062569,48.68020856,2684,5665, +E06000042,Milton Keynes,UA,Persons,2-4 yrs,,,2014/15,36.48359749,35.67744591,37.2974023,4949,13565, +E06000043,Brighton and Hove,UA,Persons,2-4 yrs,,,2014/15,31.52853398,30.62142094,32.44995028,3127,9918, +E06000044,Portsmouth,UA,Persons,2-4 yrs,,,2014/15,37.30988593,36.28264206,38.34870925,3140,8416, +E06000045,Southampton,UA,Persons,2-4 yrs,,,2014/15,39.62192817,38.69386341,40.55752647,4192,10580, +E06000046,Isle of Wight,UA,Persons,2-4 yrs,,,2014/15,38.13382727,36.69641135,39.59233276,1647,4319, +E06000047,County Durham,UA,Persons,2-4 yrs,,,2014/15,38.69104909,37.99541387,39.39132915,7236,18702, +E06000049,Cheshire East,UA,Persons,2-4 yrs,,,2014/15,46.9055854,46.06752184,47.74539797,6374,13589, +E06000050,Cheshire West and Chester,UA,Persons,2-4 yrs,,,2014/15,46.56561627,45.69357088,47.43976602,5837,12535, +E06000051,Shropshire,UA,Persons,2-4 yrs,,,2014/15,48.7157983,47.71346519,49.71916532,4647,9539, +E06000052,Cornwall,UA,Persons,2-4 yrs,,,2014/15,34.64656291,33.96419955,35.33529973,6411,18504,Value for Cornwall & Isles of Scilly combined +E06000053,Isles of Scilly,UA,Persons,2-4 yrs,,,2014/15,,,,,,Value for Cornwall & Isles of Scilly combined +E06000054,Wiltshire,UA,Persons,2-4 yrs,,,2014/15,42.90949279,42.17130797,43.65084557,7377,17192, +E06000055,Bedford,UA,Persons,2-4 yrs,,,2014/15,42.86700732,41.73121921,44.01035974,3104,7241, +E06000056,Central Bedfordshire,UA,Persons,2-4 yrs,,,2014/15,47.44621141,46.50070814,48.39354944,5072,10690, +E06000057,Northumberland,UA,Persons,2-4 yrs,,,2014/15,45.3085945,44.35388132,46.26677148,4713,10402, +E08000001,Bolton,UA,Persons,2-4 yrs,,,2014/15,36.46586977,35.63347003,37.30644427,4637,12716, +E08000002,Bury,UA,Persons,2-4 yrs,,,2014/15,33.7541025,32.72090488,34.80304808,2674,7922, +E08000003,Manchester,UA,Persons,2-4 yrs,,,2014/15,34.02005753,33.44353911,34.60134755,8752,25726, +E08000004,Oldham,UA,Persons,2-4 yrs,,,2014/15,34.05139834,33.15452608,34.95984347,3604,10584, +E08000005,Rochdale,UA,Persons,2-4 yrs,,,2014/15,40.50709939,39.54201373,41.47957905,3994,9860, +E08000006,Salford,UA,Persons,2-4 yrs,,,2014/15,37.14360223,36.26507206,38.03071563,4273,11504, +E08000007,Stockport,UA,Persons,2-4 yrs,,,2014/15,51.15300307,50.23537722,52.06985246,5834,11405, +E08000008,Tameside,UA,Persons,2-4 yrs,,,2014/15,38.1147541,37.13131216,39.10804025,3534,9272, +E08000009,Trafford,UA,Persons,2-4 yrs,,,2014/15,47.47638875,46.4912574,48.46348833,4675,9847, +E08000010,Wigan,UA,Persons,2-4 yrs,,,2014/15,39.40952065,38.54083163,40.28495539,4752,12058, +E08000011,Knowsley,UA,Persons,2-4 yrs,,,2014/15,39.48683772,38.25727691,40.7298474,2370,6002, +E08000012,Liverpool,UA,Persons,2-4 yrs,,,2014/15,29.96222802,29.31150339,30.62114102,5632,18797, +E08000013,St. Helens,UA,Persons,2-4 yrs,,,2014/15,41.01004385,39.86865049,42.16120261,2899,7069, +E08000014,Sefton,UA,Persons,2-4 yrs,,,2014/15,38.53594197,37.54093663,39.54062418,3506,9098, +E08000015,Wirral,UA,Persons,2-4 yrs,,,2014/15,39.02148918,38.1735946,39.87607008,4921,12611, +E08000016,Barnsley,UA,Persons,2-4 yrs,,,2014/15,38.45,37.50113079,39.40773957,3845,10000, +E08000017,Doncaster,UA,Persons,2-4 yrs,,,2014/15,37.25506139,36.40469825,38.11338352,4582,12299, +E08000018,Rotherham,UA,Persons,2-4 yrs,,,2014/15,40.97393015,40.02148745,41.93319237,4165,10165, +E08000019,Sheffield,UA,Persons,2-4 yrs,,,2014/15,41.62302452,40.96685382,42.28217747,8981,21577, +E08000021,Newcastle upon Tyne,UA,Persons,2-4 yrs,,,2014/15,40.08121827,39.11747423,41.05269587,3948,9850, +E08000022,North Tyneside,UA,Persons,2-4 yrs,,,2014/15,39.20858484,38.10616863,40.32211667,2923,7455, +E08000023,South Tyneside,UA,Persons,2-4 yrs,,,2014/15,47.23309111,45.89991597,48.57022428,2535,5367, +E08000024,Sunderland,UA,Persons,2-4 yrs,,,2014/15,48.8863915,47.89673032,49.87692644,4785,9788, +E08000025,Birmingham,UA,Persons,2-4 yrs,,,2014/15,29.65630752,29.28110137,30.03427963,16757,56504, +E08000026,Coventry,UA,Persons,2-4 yrs,,,2014/15,35.02301242,34.28431757,35.76896023,5555,15861, +E08000027,Dudley,UA,Persons,2-4 yrs,,,2014/15,42.04487937,41.15897261,42.9359404,4984,11854, +E08000028,Sandwell,UA,Persons,2-4 yrs,,,2014/15,30.86348473,30.14312141,31.59327762,4811,15588, +E08000029,Solihull,UA,Persons,2-4 yrs,,,2014/15,37.50144059,36.48853824,38.5254047,3254,8677, +E08000030,Walsall,UA,Persons,2-4 yrs,,,2014/15,34.29181729,33.45361109,35.1399353,4174,12172, +E08000031,Wolverhampton,UA,Persons,2-4 yrs,,,2014/15,35.14800069,34.28251733,36.02335671,4061,11554, +E08000032,Bradford,UA,Persons,2-4 yrs,,,2014/15,34.75046211,34.18520593,35.32004895,9400,27050, +E08000033,Calderdale,UA,Persons,2-4 yrs,,,2014/15,39.09765848,38.08050831,40.12437176,3423,8755, +E08000034,Kirklees,UA,Persons,2-4 yrs,,,2014/15,40.03098031,39.3189076,40.74728929,7236,18076, +E08000035,Leeds,UA,Persons,2-4 yrs,,,2014/15,42.42279004,41.89352753,42.9537962,14162,33383, +E08000036,Wakefield,UA,Persons,2-4 yrs,,,2014/15,35.69535,34.90454687,36.49402526,4982,13957, +E08000037,Gateshead,UA,Persons,2-4 yrs,,,2014/15,44.49394403,43.34793712,45.64583707,3196,7183, +E09000001,City of London,UA,Persons,2-4 yrs,,,2014/15,,,,,,Value for Hackney and City of London combined +E09000002,Barking and Dagenham,UA,Persons,2-4 yrs,,,2014/15,34.44830904,33.65161724,35.25384035,4655,13513, +E09000003,Barnet,UA,Persons,2-4 yrs,,,2014/15,30.94649733,30.26391924,31.63748609,5385,17401, +E09000004,Bexley,UA,Persons,2-4 yrs,,,2014/15,30.10373653,29.20931126,31.01355129,2989,9929, +E09000005,Brent,UA,Persons,2-4 yrs,,,2014/15,28.23427654,27.54603803,28.932844,4570,16186, +E09000006,Bromley,UA,Persons,2-4 yrs,,,2014/15,31.49521273,30.72797974,32.27267762,4375,13891, +E09000007,Camden,UA,Persons,2-4 yrs,,,2014/15,27.50924459,26.51501195,28.52628586,2083,7572, +E09000008,Croydon,UA,Persons,2-4 yrs,,,2014/15,27.54689431,26.8956,28.20787457,4905,17806, +E09000009,Ealing,UA,Persons,2-4 yrs,,,2014/15,27.53402286,26.8928255,28.18461425,5058,18370, +E09000010,Enfield,UA,Persons,2-4 yrs,,,2014/15,28.30376059,27.59093745,29.02761711,4275,15104, +E09000011,Greenwich,UA,Persons,2-4 yrs,,,2014/15,34.25751198,33.46957722,35.05422264,4720,13778, +E09000012,Hackney,UA,Persons,2-4 yrs,,,2014/15,22.11319032,21.41196474,22.83070904,2907,13146,Value for Hackney and City of London combined +E09000013,Hammersmith and Fulham,UA,Persons,2-4 yrs,,,2014/15,22.87212586,21.93170395,23.8405582,1701,7437, +E09000014,Haringey,UA,Persons,2-4 yrs,,,2014/15,26.66321512,25.86595831,27.4759379,3090,11589, +E09000015,Harrow,UA,Persons,2-4 yrs,,,2014/15,28.09411765,27.24753167,28.956538,2985,10625, +E09000016,Havering,UA,Persons,2-4 yrs,,,2014/15,29.49801991,28.58189522,30.43099682,2756,9343, +E09000017,Hillingdon,UA,Persons,2-4 yrs,,,2014/15,25.90693114,25.16824132,26.65957763,3435,13259, +E09000018,Hounslow,UA,Persons,2-4 yrs,,,2014/15,28.43404513,27.67103331,29.20959983,3755,13206, +E09000019,Islington,UA,Persons,2-4 yrs,,,2014/15,27.99506477,27.02821776,28.9827609,2269,8105, +E09000020,Kensington and Chelsea,UA,Persons,2-4 yrs,,,2014/15,16.24728176,15.36637531,17.16844369,1046,6438, +E09000021,Kingston upon Thames,UA,Persons,2-4 yrs,,,2014/15,32.88039995,31.84657228,33.93107978,2565,7801, +E09000022,Lambeth,UA,Persons,2-4 yrs,,,2014/15,27.06608342,26.3034095,27.84251665,3465,12802, +E09000023,Lewisham,UA,Persons,2-4 yrs,,,2014/15,34.80713631,34.02732306,35.59517845,4936,14181, +E09000024,Merton,UA,Persons,2-4 yrs,,,2014/15,28.61673829,27.72925073,29.52102769,2797,9774, +E09000025,Newham,UA,Persons,2-4 yrs,,,2014/15,33.05098729,32.37087082,33.73826456,6009,18181, +E09000026,Redbridge,UA,Persons,2-4 yrs,,,2014/15,23.67647059,23.00208946,24.36436706,3542,14960, +E09000027,Richmond upon Thames,UA,Persons,2-4 yrs,,,2014/15,28.55833842,27.67357077,29.45987152,2805,9822, +E09000028,Southwark,UA,Persons,2-4 yrs,,,2014/15,30.15618158,29.39339394,30.93009282,4132,13702, +E09000029,Sutton,UA,Persons,2-4 yrs,,,2014/15,32.94505236,31.95370234,33.95181273,2800,8499, +E09000030,Tower Hamlets,UA,Persons,2-4 yrs,,,2014/15,32.12020298,31.31083216,32.94046241,4051,12612, +E09000031,Waltham Forest,UA,Persons,2-4 yrs,,,2014/15,23.21225071,22.52129157,23.91786454,3259,14040, +E09000032,Wandsworth,UA,Persons,2-4 yrs,,,2014/15,35.27663311,34.51079748,36.05010835,5222,14803, +E09000033,Westminster,UA,Persons,2-4 yrs,,,2014/15,22.21473798,21.2836011,23.17461814,1649,7423, +E45000016,East Midlands PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2014/15,42.28670401,42.05873872,42.51499827,76174,180137,Aggregated from all known lower geography values +E45000017,East of England PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2014/15,40.70127071,40.51113355,40.89168684,104227,256078,Aggregated from all known lower geography values +E45000018,North West PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2014/15,38.25132236,38.07373034,38.42922868,109849,287177,Aggregated from all known lower geography values +E45000019,South East PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2014/15,39.44414814,39.27983889,39.60869637,133862,339371,Aggregated from all known lower geography values +E45000020,South West PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2014/15,41.21889741,41.00202386,41.43611243,81437,197572,Aggregated from all known lower geography values +E45000001,London PHE centre,PHE Centre from 2013,Persons,2-4 yrs,,,2014/15,28.88732045,28.74623567,29.02881557,114191,395298,Aggregated from all known lower geography values +E45000005,West Midlands PHE centre,PHE Centre from 2013,Persons,2-4 yrs,,,2014/15,36.01099598,35.81773908,36.20470742,85148,236450,Aggregated from all known lower geography values +E45000009,North East PHE centre,PHE Centre from 2013,Persons,2-4 yrs,,,2014/15,40.91371507,40.60359838,41.2245564,39413,96332,Aggregated from all known lower geography values +E45000010,Yorkshire and the Humber PHE centre,PHE Centre from 2013,Persons,2-4 yrs,,,2014/15,39.05774724,38.85219299,39.26369071,84362,215993,Aggregated from all known lower geography values +E10000002,Buckinghamshire,County,Persons,2-4 yrs,,,2014/15,43.14605702,42.48695629,43.80759429,9323,21608, +E10000003,Cambridgeshire,County,Persons,2-4 yrs,,,2014/15,42.34519844,41.73294134,42.95981528,10552,24919, +E10000006,Cumbria,County,Persons,2-4 yrs,,,2014/15,39.85312118,39.104902,40.6061102,6512,16340, +E10000007,Derbyshire,County,Persons,2-4 yrs,,,2014/15,49.87627876,49.28079093,50.47180169,13505,27077, +E10000008,Devon,County,Persons,2-4 yrs,,,2014/15,41.60790391,41.00785768,42.21044787,10739,25810, +E10000009,Dorset,County,Persons,2-4 yrs,,,2014/15,44.30265108,43.42117769,45.18772717,5381,12146, +E10000011,East Sussex,County,Persons,2-4 yrs,,,2014/15,34.18428184,33.50320917,34.8719391,6307,18450, +E10000012,Essex,County,Persons,2-4 yrs,,,2014/15,45.36713922,44.95148459,45.78344073,24961,55020, +E10000013,Gloucestershire,County,Persons,2-4 yrs,,,2014/15,42.40712962,41.76509408,43.05173842,9612,22666, +E10000014,Hampshire,County,Persons,2-4 yrs,,,2014/15,44.95398223,44.51922187,45.38951483,22566,50198, +E10000015,Hertfordshire,County,Persons,2-4 yrs,,,2014/15,41.35467446,40.92654447,41.78411523,20954,50669, +E10000016,Kent,County,Persons,2-4 yrs,,,2014/15,36.71430271,36.32573409,37.1046057,21606,58849, +E10000017,Lancashire,County,Persons,2-4 yrs,,,2014/15,35.83546256,35.3858207,36.28760921,15568,43443, +E10000018,Leicestershire,County,Persons,2-4 yrs,,,2014/15,49.52644675,48.90578142,50.14725806,12341,24918,Value for Leicestershire and Rutland combined +E10000019,Lincolnshire,County,Persons,2-4 yrs,,,2014/15,43.61576317,43.01641151,44.21698575,11433,26213, +E10000020,Norfolk,County,Persons,2-4 yrs,,,2014/15,38.36736044,37.82062001,38.9170578,11595,30221, +E10000021,Northamptonshire,County,Persons,2-4 yrs,,,2014/15,35.71264406,35.17635778,36.25253392,10877,30457, +E10000023,North Yorkshire,County,Persons,2-4 yrs,,,2014/15,43.16243871,42.45521976,43.87245674,8099,18764, +E10000024,Nottinghamshire,County,Persons,2-4 yrs,,,2014/15,43.54093386,42.97116346,44.11241533,12626,28998, +E10000025,Oxfordshire,County,Persons,2-4 yrs,,,2014/15,43.53500302,42.93917254,44.13270672,11542,26512, +E10000027,Somerset,County,Persons,2-4 yrs,,,2014/15,42.33125622,41.63211207,43.03348496,8084,19097, +E10000028,Staffordshire,County,Persons,2-4 yrs,,,2014/15,39.82408566,39.25975258,40.39113639,11455,28764, +E10000029,Suffolk,County,Persons,2-4 yrs,,,2014/15,40.56425636,39.98005397,41.15114243,10956,27009, +E10000030,Surrey,County,Persons,2-4 yrs,,,2014/15,35.15851991,34.72721035,35.5922653,16457,46808, +E10000031,Warwickshire,County,Persons,2-4 yrs,,,2014/15,43.25182283,42.56930755,43.93690919,8720,20161, +E10000032,West Sussex,County,Persons,2-4 yrs,,,2014/15,39.89660743,39.35234285,40.44337973,12348,30950, +E10000034,Worcestershire,County,Persons,2-4 yrs,,,2014/15,38.01824412,37.35953767,38.68139277,7877,20719, +E92000001,England,Country,Persons,2-4 yrs,,,2014/15,37.59118094,37.52726329,37.65514184,828663,2204408,Aggregated from all known lower geography values +E47000001,CA-Greater Manchester,Combined authorities,Persons,2-4 yrs,,,2014/15,38.65286946,,,46729,120894,Aggregated from all known lower geography values +E47000002,CA-Sheffield City Region,Combined authorities,Persons,2-4 yrs,,,2014/15,39.91969061,,,21573,54041,Aggregated from all known lower geography values +E47000003,CA-West Yorkshire,Combined authorities,Persons,2-4 yrs,,,2014/15,38.73010541,,,39203,101221,Aggregated from all known lower geography values +E47000004,CA-Liverpool City Region,Combined authorities,Persons,2-4 yrs,,,2014/15,35.98869768,,,21143,58749,Aggregated from all known lower geography values +E47000005,CA-North East,Combined authorities,Persons,2-4 yrs,,,2014/15,42.67240752,,,29336,68747,Aggregated from all known lower geography values +E47000006,CA-Tees Valley,Combined authorities,Persons,2-4 yrs,,,2014/15,36.53072322,,,10077,27585,Aggregated from all known lower geography values +E47000007,CA-West Midlands,Combined authorities,Persons,2-4 yrs,,,2014/15,32.9748128,,,43596,132210,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Most deprived decile (IMD2010),2014/15,32.0699153,31.88402401,32.25637714,77428,241435,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Second most deprived decile (IMD2010),2014/15,34.0499654,33.82348763,34.27717416,57080,167636,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Third more deprived decile (IMD2010),2014/15,34.80357769,34.57028858,35.03759807,55566,159656,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Fourth more deprived decile (IMD2010),2014/15,37.36881238,37.16775075,37.57031131,82927,221915,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Fifth more deprived decile (IMD2010),2014/15,33.45296489,33.2190566,33.68768938,52105,155756,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Fifth less deprived decile (IMD2010),2014/15,37.09970465,36.89963778,37.30021504,82903,223460,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Fourth less deprived decile (IMD2010),2014/15,39.4934595,39.31489542,39.67230441,113520,287440,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Third less deprived decile (IMD2010),2014/15,40.51988814,40.32702078,40.71304856,100698,248515,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Second least deprived decile (IMD2010),2014/15,41.11143736,40.91264638,41.31051895,96609,234993,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Least deprived decile (IMD2010),2014/15,41.66394792,41.4758695,41.8522693,109827,263602,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Most deprived decile (IMD2015),2014/15,32.0699153,,,77428,241435,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Second most deprived decile (IMD2015),2014/15,34.0499654,,,57080,167636,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Third more deprived decile (IMD2015),2014/15,34.80357769,,,55566,159656,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Fourth more deprived decile (IMD2015),2014/15,37.36881238,,,82927,221915,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Fifth more deprived decile (IMD2015),2014/15,33.45296489,,,52105,155756,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Fifth less deprived decile (IMD2015),2014/15,37.09970465,,,82903,223460,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Fourth less deprived decile (IMD2015),2014/15,39.4934595,,,113520,287440,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Third less deprived decile (IMD2015),2014/15,40.51988814,,,100698,248515,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Second least deprived decile (IMD2015),2014/15,41.11143736,,,96609,234993,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Least deprived decile (IMD2015),2014/15,41.66394792,,,109827,263602,Aggregated from all known lower geography values +E12000001,North East region,Region,Persons,2-4 yrs,,,2015/16,37.61685518,37.30560549,37.92913066,34887,92743,Aggregated from all known lower geography values +E12000002,North West region,Region,Persons,2-4 yrs,,,2015/16,34.4450583,34.26771588,34.62283509,94768,275128,Aggregated from all known lower geography values +E12000003,Yorkshire and the Humber region,Region,Persons,2-4 yrs,,,2015/16,35.50892332,35.30151827,35.71687422,72424,203960,Aggregated from all known lower geography values +E12000004,East Midlands region,Region,Persons,2-4 yrs,,,2015/16,40.01594215,39.78538442,40.24694293,69278,173126,Aggregated from all known lower geography values +E12000005,West Midlands region,Region,Persons,2-4 yrs,,,2015/16,32.88761194,32.69563455,33.08016252,75433,229366,Aggregated from all known lower geography values +E12000006,East of England region,Region,Persons,2-4 yrs,,,2015/16,35.35176442,35.15753799,35.54647564,82067,232144,Aggregated from all known lower geography values +E12000007,London region,Region,Persons,2-4 yrs,,,2015/16,25.70616941,25.56756587,25.84526342,97822,380539,Aggregated from all known lower geography values +E12000008,South East region,Region,Persons,2-4 yrs,,,2015/16,36.35462054,36.19328282,36.51626587,123902,340815,Aggregated from all known lower geography values +E12000009,South West region,Region,Persons,2-4 yrs,,,2015/16,40.50401982,40.28423364,40.72418737,77485,191302,Aggregated from all known lower geography values +E06000001,Hartlepool,UA,Persons,2-4 yrs,,,2015/16,27.11471611,25.65778167,28.62252838,936,3452, +E06000002,Middlesbrough,UA,Persons,2-4 yrs,,,2015/16,31.8033297,30.67591222,32.95248673,2044,6427, +E06000003,Redcar and Cleveland,UA,Persons,2-4 yrs,,,2015/16,34.25391591,32.93154617,35.60119912,1662,4852, +E06000004,Stockton-on-Tees,UA,Persons,2-4 yrs,,,2015/16,41.45003266,40.35101605,42.55762611,3173,7655, +E06000005,Darlington,UA,Persons,2-4 yrs,,,2015/16,39.04487011,37.50776966,40.6040337,1488,3811, +E06000006,Halton,UA,Persons,2-4 yrs,,,2015/16,35.01446879,33.6826903,36.37002596,1694,4838, +E06000007,Warrington,UA,Persons,2-4 yrs,,,2015/16,36.08353745,35.02195263,37.15889901,2799,7757, +E06000008,Blackburn with Darwen,UA,Persons,2-4 yrs,,,2015/16,26.17449664,25.18876925,27.18478177,1950,7450, +E06000009,Blackpool,UA,Persons,2-4 yrs,,,2015/16,26.22535721,25.08273361,27.40099434,1450,5529, +E06000010,Kingston upon Hull,UA,Persons,2-4 yrs,,,2015/16,32.61115462,31.76003369,33.47389587,3748,11493, +E06000011,East Riding of Yorkshire,UA,Persons,2-4 yrs,,,2015/16,39.48561189,38.50642607,40.47330919,3746,9487, +E06000012,North East Lincolnshire,UA,Persons,2-4 yrs,,,2015/16,29.58173691,28.46427235,30.72422952,1853,6264, +E06000013,North Lincolnshire,UA,Persons,2-4 yrs,,,2015/16,31.20805369,30.04415028,32.39616583,1860,5960, +E06000014,York,UA,Persons,2-4 yrs,,,2015/16,41.67542411,40.49657423,42.86387017,2776,6661, +E06000015,Derby,UA,Persons,2-4 yrs,,,2015/16,36.83766295,35.92700266,37.75780357,3928,10663, +E06000016,Leicester,UA,Persons,2-4 yrs,,,2015/16,33.18195766,32.4630283,33.90881467,5407,16295, +E06000017,Rutland,UA,Persons,2-4 yrs,,,2015/16,,,,,,Value for Leicestershire and Rutland combined +E06000018,Nottingham,UA,Persons,2-4 yrs,,,2015/16,33.24462497,32.47653623,34.02172664,4747,14279, +E06000019,Herefordshire,UA,Persons,2-4 yrs,,,2015/16,36.34200238,35.12220528,37.57962453,2138,5883, +E06000020,Telford and Wrekin,UA,Persons,2-4 yrs,,,2015/16,30.90757005,29.84861412,31.98696473,2217,7173, +E06000021,Stoke-on-Trent,UA,Persons,2-4 yrs,,,2015/16,34.91896627,34.04965557,35.79842392,3986,11415, +E06000022,Bath and North East Somerset,UA,Persons,2-4 yrs,,,2015/16,44.47984706,43.25423487,45.71221167,2792,6277, +E06000023,Bristol,UA,Persons,2-4 yrs,,,2015/16,36.67254368,35.98495064,37.36560622,6864,18717, +E06000024,North Somerset,UA,Persons,2-4 yrs,,,2015/16,47.81633461,46.69312652,48.94175518,3624,7579, +E06000025,South Gloucestershire,UA,Persons,2-4 yrs,,,2015/16,47.55817437,46.58112089,48.53710073,4762,10013, +E06000026,Plymouth,UA,Persons,2-4 yrs,,,2015/16,33.56314635,32.62397423,34.51550475,3213,9573, +E06000027,Torbay,UA,Persons,2-4 yrs,,,2015/16,34.79017178,33.42680247,36.17892885,1600,4599, +E06000028,Bournemouth,UA,Persons,2-4 yrs,,,2015/16,36.62372678,35.47605411,37.78678437,2445,6676, +E06000029,Poole,UA,Persons,2-4 yrs,,,2015/16,35.88563917,34.68979796,37.099287,2184,6086, +E06000030,Swindon,UA,Persons,2-4 yrs,,,2015/16,40.06524942,39.08416563,41.05436278,3807,9502, +E06000031,Peterborough,UA,Persons,2-4 yrs,,,2015/16,25.78116725,24.90877883,26.67325651,2434,9441, +E06000032,Luton,UA,Persons,2-4 yrs,,,2015/16,28.55260847,27.73033162,29.38935247,3251,11386, +E06000033,Southend-on-Sea,UA,Persons,2-4 yrs,,,2015/16,18.86876485,17.95224932,19.82076766,1271,6736, +E06000034,Thurrock,UA,Persons,2-4 yrs,,,2015/16,24.35500516,23.4123709,25.32304329,1888,7752, +E06000035,Medway,UA,Persons,2-4 yrs,,,2015/16,35.13559179,34.28052891,36.00029943,4159,11837, +E06000036,Bracknell Forest,UA,Persons,2-4 yrs,,,2015/16,40.41385135,39.02457465,41.81866646,1914,4736, +E06000037,West Berkshire,UA,Persons,2-4 yrs,,,2015/16,49.08611268,47.74226407,50.43128337,2605,5307, +E06000038,Reading,UA,Persons,2-4 yrs,,,2015/16,37.2290191,36.25293236,38.21563149,3469,9318, +E06000039,Slough,UA,Persons,2-4 yrs,,,2015/16,25.77332498,24.82578709,26.74416182,2058,7985, +E06000040,Windsor and Maidenhead,UA,Persons,2-4 yrs,,,2015/16,32.23564455,31.06885597,33.42500393,1948,6043, +E06000041,Wokingham,UA,Persons,2-4 yrs,,,2015/16,48.404543,47.09097449,49.72031978,2685,5547, +E06000042,Milton Keynes,UA,Persons,2-4 yrs,,,2015/16,33.02209064,32.22403429,33.83004617,4350,13173, +E06000043,Brighton and Hove,UA,Persons,2-4 yrs,,,2015/16,27.40644603,26.5067965,28.32486177,2534,9246, +E06000044,Portsmouth,UA,Persons,2-4 yrs,,,2015/16,32.23009282,31.22633082,33.25052076,2639,8188, +E06000045,Southampton,UA,Persons,2-4 yrs,,,2015/16,33.320115,32.40676645,34.2461632,3361,10087, +E06000046,Isle of Wight,UA,Persons,2-4 yrs,,,2015/16,30.85618086,29.47043143,32.27727051,1283,4158, +E06000047,County Durham,UA,Persons,2-4 yrs,,,2015/16,36.75002868,36.03735743,37.46853772,6407,17434, +E06000049,Cheshire East,UA,Persons,2-4 yrs,,,2015/16,45.38996257,44.53857882,46.24405108,5942,13091, +E06000050,Cheshire West and Chester,UA,Persons,2-4 yrs,,,2015/16,42.6282875,41.73372837,43.52769694,4976,11673, +E06000051,Shropshire,UA,Persons,2-4 yrs,,,2015/16,45.67417564,44.65771456,46.69425204,4197,9189, +E06000052,Cornwall,UA,Persons,2-4 yrs,,,2015/16,33.76750917,33.10440323,34.43705995,6533,19347,Value for Cornwall & Isles of Scilly combined +E06000053,Isles of Scilly,UA,Persons,2-4 yrs,,,2015/16,,,,,,Value for Cornwall & Isles of Scilly combined +E06000054,Wiltshire,UA,Persons,2-4 yrs,,,2015/16,44.34135026,43.58202634,45.10332738,7264,16382, +E06000055,Bedford,UA,Persons,2-4 yrs,,,2015/16,39.64254322,38.48827133,40.80846625,2706,6826, +E06000056,Central Bedfordshire,UA,Persons,2-4 yrs,,,2015/16,45.08379347,44.12594407,46.04530041,4654,10323, +E06000057,Northumberland,UA,Persons,2-4 yrs,,,2015/16,44.52766127,43.55653034,45.50298907,4459,10014, +E08000001,Bolton,UA,Persons,2-4 yrs,,,2015/16,31.29665693,30.48391945,32.12105065,3857,12324, +E08000002,Bury,UA,Persons,2-4 yrs,,,2015/16,34.5585449,33.51871774,35.6133497,2736,7917, +E08000003,Manchester,UA,Persons,2-4 yrs,,,2015/16,29.95637421,29.38891315,30.53005476,7416,24756, +E08000004,Oldham,UA,Persons,2-4 yrs,,,2015/16,35.00481232,34.0933478,35.92736098,3637,10390, +E08000005,Rochdale,UA,Persons,2-4 yrs,,,2015/16,36.20542387,35.2379558,37.18420298,3391,9366, +E08000006,Salford,UA,Persons,2-4 yrs,,,2015/16,31.10669796,30.25132095,31.97517349,3446,11078, +E08000007,Stockport,UA,Persons,2-4 yrs,,,2015/16,41.71630838,40.82122486,42.6168846,4832,11583, +E08000008,Tameside,UA,Persons,2-4 yrs,,,2015/16,37.3840339,36.37494055,38.4042239,3264,8731, +E08000009,Trafford,UA,Persons,2-4 yrs,,,2015/16,46.05305209,45.04655405,47.06277925,4323,9387, +E08000010,Wigan,UA,Persons,2-4 yrs,,,2015/16,37.50217429,36.62157936,38.39111743,4312,11498, +E08000011,Knowsley,UA,Persons,2-4 yrs,,,2015/16,27.36056959,26.23793032,28.51267549,1614,5899, +E08000012,Liverpool,UA,Persons,2-4 yrs,,,2015/16,27.16740576,26.52320987,27.82132359,4901,18040, +E08000013,St. Helens,UA,Persons,2-4 yrs,,,2015/16,31.85905941,30.76078227,32.97787267,2161,6783, +E08000014,Sefton,UA,Persons,2-4 yrs,,,2015/16,33.990262,32.99798935,34.99678769,2932,8626, +E08000015,Wirral,UA,Persons,2-4 yrs,,,2015/16,35.74518619,34.88484829,36.61481096,4214,11789, +E08000016,Barnsley,UA,Persons,2-4 yrs,,,2015/16,34.28722281,33.33775283,35.24943524,3247,9470, +E08000017,Doncaster,UA,Persons,2-4 yrs,,,2015/16,35.36121673,34.5047543,36.22717913,4185,11835, +E08000018,Rotherham,UA,Persons,2-4 yrs,,,2015/16,38.73592688,37.73288965,39.74860672,3475,8971, +E08000019,Sheffield,UA,Persons,2-4 yrs,,,2015/16,38.46977514,37.80673364,39.13712741,7904,20546, +E08000021,Newcastle upon Tyne,UA,Persons,2-4 yrs,,,2015/16,36.57557806,35.65791497,37.50309218,3828,10466, +E08000022,North Tyneside,UA,Persons,2-4 yrs,,,2015/16,37.79592967,36.68449079,38.9203428,2730,7223, +E08000023,South Tyneside,UA,Persons,2-4 yrs,,,2015/16,38.67794609,37.34813638,40.02485609,1966,5083, +E08000024,Sunderland,UA,Persons,2-4 yrs,,,2015/16,37.02915514,36.05836523,38.01054446,3480,9398, +E08000025,Birmingham,UA,Persons,2-4 yrs,,,2015/16,25.73829706,25.37493073,26.10504654,14180,55093, +E08000026,Coventry,UA,Persons,2-4 yrs,,,2015/16,30.02873563,29.30777858,30.75971091,4598,15312, +E08000027,Dudley,UA,Persons,2-4 yrs,,,2015/16,36.31396357,35.44086267,37.19618102,4187,11530, +E08000028,Sandwell,UA,Persons,2-4 yrs,,,2015/16,29.24831247,28.53182897,29.97524183,4463,15259, +E08000029,Solihull,UA,Persons,2-4 yrs,,,2015/16,32.76085166,31.77112904,33.76614742,2785,8501, +E08000030,Walsall,UA,Persons,2-4 yrs,,,2015/16,30.49293405,29.67176937,31.32670159,3625,11888, +E08000031,Wolverhampton,UA,Persons,2-4 yrs,,,2015/16,30.65331168,29.80173651,31.51829485,3397,11082, +E08000032,Bradford,UA,Persons,2-4 yrs,,,2015/16,27.99134369,27.44274191,28.54659766,7114,25415, +E08000033,Calderdale,UA,Persons,2-4 yrs,,,2015/16,35.63274229,34.60523467,36.67364935,2934,8234, +E08000034,Kirklees,UA,Persons,2-4 yrs,,,2015/16,31.10277745,30.41257863,31.80148167,5308,17066, +E08000035,Leeds,UA,Persons,2-4 yrs,,,2015/16,37.91926341,37.38857686,38.45285636,12108,31931, +E08000036,Wakefield,UA,Persons,2-4 yrs,,,2015/16,34.63539703,33.83012629,35.44956685,4593,13261, +E08000037,Gateshead,UA,Persons,2-4 yrs,,,2015/16,39.1743649,38.03122138,40.32950702,2714,6928, +E09000001,City of London,UA,Persons,2-4 yrs,,,2015/16,,,,,,Value for Hackney and City of London combined +E09000002,Barking and Dagenham,UA,Persons,2-4 yrs,,,2015/16,25.94961699,25.19349188,26.72032957,3286,12663, +E09000003,Barnet,UA,Persons,2-4 yrs,,,2015/16,27.48273398,26.81279725,28.16296834,4616,16796, +E09000004,Bexley,UA,Persons,2-4 yrs,,,2015/16,27.94163627,27.05277112,28.84815695,2681,9595, +E09000005,Brent,UA,Persons,2-4 yrs,,,2015/16,26.25615126,25.5681374,26.95597401,4055,15444, +E09000006,Bromley,UA,Persons,2-4 yrs,,,2015/16,30.82104633,30.04369257,31.60942531,4118,13361, +E09000007,Camden,UA,Persons,2-4 yrs,,,2015/16,29.50887902,28.46712462,30.57246302,2127,7208, +E09000008,Croydon,UA,Persons,2-4 yrs,,,2015/16,26.65531815,25.99667708,27.32448486,4541,17036, +E09000009,Ealing,UA,Persons,2-4 yrs,,,2015/16,26.37931034,25.72978087,27.03926716,4590,17400, +E09000010,Enfield,UA,Persons,2-4 yrs,,,2015/16,23.25924931,22.58766927,23.94462066,3464,14893, +E09000011,Greenwich,UA,Persons,2-4 yrs,,,2015/16,29.52544396,28.7591142,30.30350774,3957,13402, +E09000012,Hackney,UA,Persons,2-4 yrs,,,2015/16,18.91488693,18.24414912,19.60437101,2409,12736,Value for Hackney and City of London combined +E09000013,Hammersmith and Fulham,UA,Persons,2-4 yrs,,,2015/16,23.59372752,22.61035166,24.60627402,1640,6951, +E09000014,Haringey,UA,Persons,2-4 yrs,,,2015/16,25.41306058,24.62356928,26.21905997,2907,11439, +E09000015,Harrow,UA,Persons,2-4 yrs,,,2015/16,21.41097645,20.62381096,22.21977599,2173,10149, +E09000016,Havering,UA,Persons,2-4 yrs,,,2015/16,25.31737021,24.46144854,26.19285629,2453,9689, +E09000017,Hillingdon,UA,Persons,2-4 yrs,,,2015/16,25.97232898,25.22603635,26.73280671,3379,13010, +E09000018,Hounslow,UA,Persons,2-4 yrs,,,2015/16,22.18889339,21.46433944,22.93076424,2737,12335, +E09000019,Islington,UA,Persons,2-4 yrs,,,2015/16,20.7034786,19.8150589,21.62099062,1601,7733, +E09000020,Kensington and Chelsea,UA,Persons,2-4 yrs,,,2015/16,13.36666667,12.52901597,14.25119583,802,6000, +E09000021,Kingston upon Thames,UA,Persons,2-4 yrs,,,2015/16,32.15882198,31.11835097,33.2173055,2446,7606, +E09000022,Lambeth,UA,Persons,2-4 yrs,,,2015/16,24.70345964,23.94434739,25.47857598,2999,12140, +E09000023,Lewisham,UA,Persons,2-4 yrs,,,2015/16,27.65000737,26.90377128,28.40889749,3751,13566, +E09000024,Merton,UA,Persons,2-4 yrs,,,2015/16,25.76296776,24.88301664,26.66299156,2389,9273, +E09000025,Newham,UA,Persons,2-4 yrs,,,2015/16,26.73546495,26.08915466,27.39185255,4741,17733, +E09000026,Redbridge,UA,Persons,2-4 yrs,,,2015/16,19.28871997,18.65965919,19.9337907,2842,14734, +E09000027,Richmond upon Thames,UA,Persons,2-4 yrs,,,2015/16,25.60418027,24.72199325,26.50676277,2352,9186, +E09000028,Southwark,UA,Persons,2-4 yrs,,,2015/16,27.40424884,26.64810408,28.17360844,3599,13133, +E09000029,Sutton,UA,Persons,2-4 yrs,,,2015/16,31.30710196,30.31285852,32.31883216,2570,8209, +E09000030,Tower Hamlets,UA,Persons,2-4 yrs,,,2015/16,31.25822368,30.44035265,32.08793239,3801,12160, +E09000031,Waltham Forest,UA,Persons,2-4 yrs,,,2015/16,21.60677161,20.91984627,22.30988944,2910,13468, +E09000032,Wandsworth,UA,Persons,2-4 yrs,,,2015/16,30.82077052,30.06992005,31.58190246,4416,14328, +E09000033,Westminster,UA,Persons,2-4 yrs,,,2015/16,20.5221276,19.60277955,21.47307619,1470,7163, +E45000016,East Midlands PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2015/16,40.01594215,,,69278,173126,Aggregated from all known lower geography values +E45000017,East of England PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2015/16,35.22666591,,,86417,245317,Aggregated from all known lower geography values +E45000018,North West PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2015/16,34.4450583,,,94768,275128,Aggregated from all known lower geography values +E45000019,South East PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2015/16,36.48860647,,,119552,327642,Aggregated from all known lower geography values +E45000020,South West PHE centre,PHE Centre from 2015,Persons,2-4 yrs,,,2015/16,40.50401982,,,77485,191302,Aggregated from all known lower geography values +E45000001,London PHE centre,PHE Centre from 2013,Persons,2-4 yrs,,,2015/16,25.70616941,,,97822,380539,Aggregated from all known lower geography values +E45000005,West Midlands PHE centre,PHE Centre from 2013,Persons,2-4 yrs,,,2015/16,32.88761194,,,75433,229366,Aggregated from all known lower geography values +E45000009,North East PHE centre,PHE Centre from 2013,Persons,2-4 yrs,,,2015/16,37.61685518,,,34887,92743,Aggregated from all known lower geography values +E45000010,Yorkshire and the Humber PHE centre,PHE Centre from 2013,Persons,2-4 yrs,,,2015/16,35.50892332,,,72424,203960,Aggregated from all known lower geography values +E10000002,Buckinghamshire,County,Persons,2-4 yrs,,,2015/16,38.85493267,38.19688377,39.51706957,8137,20942, +E10000003,Cambridgeshire,County,Persons,2-4 yrs,,,2015/16,38.83655804,38.21619236,39.4605623,9153,23568, +E10000006,Cumbria,County,Persons,2-4 yrs,,,2015/16,33.22853843,32.49326145,33.97208065,5179,15586, +E10000007,Derbyshire,County,Persons,2-4 yrs,,,2015/16,48.22419324,47.62281912,48.82608224,12777,26495, +E10000008,Devon,County,Persons,2-4 yrs,,,2015/16,41.30146082,40.69065589,41.9149548,10263,24849, +E10000009,Dorset,County,Persons,2-4 yrs,,,2015/16,41.56477127,40.67448481,42.46059735,4861,11695, +E10000011,East Sussex,County,Persons,2-4 yrs,,,2015/16,29.75703906,29.08637645,30.43652835,5242,17616, +E10000012,Essex,County,Persons,2-4 yrs,,,2015/16,31.90861226,31.51376809,32.3060699,16969,53180, +E10000013,Gloucestershire,County,Persons,2-4 yrs,,,2015/16,44.17042422,43.51131089,44.83159792,9600,21734, +E10000014,Hampshire,County,Persons,2-4 yrs,,,2015/16,41.52932473,41.0921861,41.96780064,20209,48662, +E10000015,Hertfordshire,County,Persons,2-4 yrs,,,2015/16,38.70489475,38.26957218,39.14202931,18535,47888, +E10000016,Kent,County,Persons,2-4 yrs,,,2015/16,33.4836567,33.0980605,33.87147079,19156,57210, +E10000017,Lancashire,County,Persons,2-4 yrs,,,2015/16,33.48685333,33.03180164,33.9449963,13742,41037, +E10000018,Leicestershire,County,Persons,2-4 yrs,,,2015/16,47.40566038,46.77101132,48.04114875,11256,23744,Value for Leicestershire and Rutland combined +E10000019,Lincolnshire,County,Persons,2-4 yrs,,,2015/16,39.51201894,38.90668956,40.12058143,9846,24919, +E10000020,Norfolk,County,Persons,2-4 yrs,,,2015/16,37.25738108,36.70513975,37.8129674,10903,29264, +E10000021,Northamptonshire,County,Persons,2-4 yrs,,,2015/16,33.79837521,33.25773995,34.34327672,9860,29173, +E10000023,North Yorkshire,County,Persons,2-4 yrs,,,2015/16,43.60819993,42.87214579,44.34708125,7573,17366, +E10000024,Nottinghamshire,County,Persons,2-4 yrs,,,2015/16,41.57413455,40.99346159,42.15715625,11457,27558, +E10000025,Oxfordshire,County,Persons,2-4 yrs,,,2015/16,41.98344451,41.37155128,42.59781226,10448,24886, +E10000027,Somerset,County,Persons,2-4 yrs,,,2015/16,41.99091556,41.2770746,42.70812324,7673,18273, +E10000028,Staffordshire,County,Persons,2-4 yrs,,,2015/16,37.64529571,37.0729569,38.22110359,10299,27358, +E10000029,Suffolk,County,Persons,2-4 yrs,,,2015/16,39.96508922,39.36869886,40.56446971,10303,25780, +E10000030,Surrey,County,Persons,2-4 yrs,,,2015/16,34.79554388,34.36177917,35.23184512,16023,46049, +E10000031,Warwickshire,County,Persons,2-4 yrs,,,2015/16,38.26509931,37.58935826,38.94540769,7552,19736, +E10000032,West Sussex,County,Persons,2-4 yrs,,,2015/16,39.16848282,38.61593614,39.72381933,11682,29825, +E10000034,Worcestershire,County,Persons,2-4 yrs,,,2015/16,39.14874417,38.47356136,39.82810572,7809,19947, +E92000001,England,Country,Persons,2-4 yrs,,,2015/16,34.35694861,34.29303715,34.42091677,728066,2119123,Aggregated from all known lower geography values +E47000001,CA-Greater Manchester,Combined authorities,Persons,2-4 yrs,,,2015/16,35.21661113,,,41214,117030,Aggregated from all known lower geography values +E47000002,CA-Sheffield City Region,Combined authorities,Persons,2-4 yrs,,,2015/16,37.01349809,,,18811,50822,Aggregated from all known lower geography values +E47000003,CA-West Yorkshire,Combined authorities,Persons,2-4 yrs,,,2015/16,33.42508889,,,32057,95907,Aggregated from all known lower geography values +E47000004,CA-Liverpool City Region,Combined authorities,Persons,2-4 yrs,,,2015/16,31.29254131,,,17516,55975,Aggregated from all known lower geography values +E47000005,CA-North East,Combined authorities,Persons,2-4 yrs,,,2015/16,38.44558651,,,25584,66546,Aggregated from all known lower geography values +E47000006,CA-Tees Valley,Combined authorities,Persons,2-4 yrs,,,2015/16,35.51169981,,,9303,26197,Aggregated from all known lower geography values +E47000007,CA-West Midlands,Combined authorities,Persons,2-4 yrs,,,2015/16,28.93949403,,,37235,128665,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Most deprived decile (IMD2010),2015/16,27.1275853,,,62171,229180,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Second most deprived decile (IMD2010),2015/16,29.47773062,,,53755,182358,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Third more deprived decile (IMD2010),2015/16,33.96169787,,,47526,139940,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Fourth more deprived decile (IMD2010),2015/16,33.38780936,,,61289,183567,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Fifth more deprived decile (IMD2010),2015/16,31.93199402,,,48908,153163,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Fifth less deprived decile (IMD2010),2015/16,30.57981752,,,62740,205168,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Fourth less deprived decile (IMD2010),2015/16,37.98203511,,,110786,291680,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Third less deprived decile (IMD2010),2015/16,35.73754413,,,72876,203920,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Second least deprived decile (IMD2010),2015/16,38.76446959,,,107697,277824,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2010),Least deprived decile (IMD2010),2015/16,39.75777079,,,100318,252323,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Most deprived decile (IMD2015),2015/16,28.58286218,28.4000169,28.7664117,66783,233647,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Second most deprived decile (IMD2015),2015/16,29.44244281,29.2204769,29.66538813,47478,161257,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Third more deprived decile (IMD2015),2015/16,31.37371779,31.14143063,31.60694229,47897,152666,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Fourth more deprived decile (IMD2015),2015/16,33.77677246,33.57584154,33.97829073,71676,212205,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Fifth more deprived decile (IMD2015),2015/16,29.93131308,29.69970455,30.16395279,44753,149519,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Fifth less deprived decile (IMD2015),2015/16,33.41776513,33.21856913,33.61755432,71771,214769,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Fourth less deprived decile (IMD2015),2015/16,36.72178901,36.54258447,36.90136131,101860,277383,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Third less deprived decile (IMD2015),2015/16,36.51730446,36.32466019,36.71038139,87429,239418,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Second least deprived decile (IMD2015),2015/16,39.55132254,39.34937327,39.75362892,88909,224794,Aggregated from all known lower geography values +E92000001,England,Country,Persons,2-4 yrs,County & UA deprivation deciles in England (IMD2015),Least deprived decile (IMD2015),2015/16,39.25985836,39.06991408,39.45012819,99510,253465,Aggregated from all known lower geography values diff --git a/error_handling_in_R/traceback.png b/error_handling_in_R/traceback.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8768278c142ce2e38fc788c2561048cc4b3b76 GIT binary patch literal 12094 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 literal 0 HcmV?d00001