library(tidyverse)
── Attaching core tidyverse packages ───────────────────────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ─────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(eccor)
library(estcr)
ecco_core <- load_ecco_core()
estc_core <- load_estc_core()
estc_actor_links <- load_estc_actor_links()
estc_actors <- load_estc_actors()
works <- ecco_core %>% 
  left_join(estc_core, join_by(estc_id)) %>%
  replace_na(list(work_id="unknown work", publication_place="unknown place of publication")) %>%
  group_by(work_id) %>%
  summarise(
    earliest_publication_year=min(publication_year),
    ecco_parts=str_flatten(sort(unique(ecco_part)), collapse = "|"),
    ecco_languages=str_flatten(sort(unique(ecco_language)), collapse = "|"),
    has_prices=all(!is.na(total_price)),
    places_of_publication=str_flatten(sort(unique(publication_place)), collapse = "|"),
    ecco_modules=str_flatten(sort(unique(ecco_module)), collapse = "|"), .groups="drop") %>% 
  mutate(earliest_publication_decade=floor(earliest_publication_year/10)*10) %>%
  select(work_id, earliest_publication_decade, ecco_parts, ecco_modules, ecco_languages, places_of_publication, has_prices)

ecco_ids_to_works <- ecco_core %>% 
  left_join(estc_core, join_by(estc_id)) %>%
  replace_na(list(work_id="unknown work")) %>%
  select(ecco_id, work_id)
ecco_test <- works %>%
  group_by(ecco_parts, ecco_modules, earliest_publication_decade, ecco_languages, places_of_publication, has_prices) %>%
  slice_sample(prop=0.1) %>% # select at most 10% of the works
  slice_sample(n=5) %>% # filter down to max 5 per group
  group_by(ecco_modules, ecco_languages) %>%
  slice_sample(n=1000) %>%
  group_by(places_of_publication, ecco_languages) %>%
  slice_sample(n=1000) %>%
  group_by(has_prices, ecco_languages) %>%
  slice_sample(n=1000) %>%
  ungroup() %>%
  slice_sample(n=1000) %>% # iteratively pare down further
  inner_join(ecco_ids_to_works) %>%
  select(ecco_id, work_id)
Joining with `by = join_by(work_id)`
ecco_val <- works %>%
  anti_join(ecco_test) %>%
  group_by(ecco_parts, ecco_modules, earliest_publication_decade, ecco_languages, places_of_publication, has_prices) %>%
  slice_sample(prop=0.1) %>% # select at most 10% of the works
  slice_sample(n=5) %>% # filter down to max 5 per group
  group_by(ecco_modules, ecco_languages) %>%
  slice_sample(n=1000) %>%
  group_by(places_of_publication, ecco_languages) %>%
  slice_sample(n=1000) %>%
  group_by(has_prices, ecco_languages) %>%
  slice_sample(n=1000) %>%
  ungroup() %>%
  slice_sample(n=1000) %>% # iteratively pare down further
  inner_join(ecco_ids_to_works) %>%
  select(ecco_id, work_id)
Joining with `by = join_by(work_id)`
Joining with `by = join_by(work_id)`
ecco_train <- works %>%
  anti_join(ecco_test) %>%
  anti_join(ecco_val) %>%
  inner_join(ecco_ids_to_works) %>%
  select(ecco_id, work_id)
Joining with `by = join_by(work_id)`
Joining with `by = join_by(work_id)`
Joining with `by = join_by(work_id)`
library(here)
here() starts at /Users/jiemakel/tyo/r-scratch
ecco_test <- read_tsv(here("data/output/ecco_test_split_by_part_module_language_price_publication_place_and_decade.tsv"))
Rows: 1398 Columns: 2
── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: "\t"
chr (2): ecco_id, work_id

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
ecco_val <- read_tsv(here("data/output/ecco_val_split_by_part_module_language_price_publication_place_and_decade.tsv"))
Rows: 1456 Columns: 2
── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: "\t"
chr (2): ecco_id, work_id

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
ecco_train <- read_tsv(here("data/output/ecco_train_split_by_part_module_language_price_publication_place_and_decade.tsv"))
Rows: 204759 Columns: 2
── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: "\t"
chr (2): ecco_id, work_id

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
targets <- ecco_core %>%
  left_join(estc_core, join_by(estc_id)) %>%
  left_join(estc_core %>% 
              group_by(work_id) %>% 
              filter(publication_year==min(publication_year)) %>%
              summarise(earliest_publication_year=min(publication_year), earliest_publication_year_definite = !any(uncertain | circa | range))
              , join_by(work_id)
            ) %>%
  transmute(ecco_id, ecco_part, ecco_module, publication_year, publication_year_definite = !(is.na(publication_year) | uncertain | circa | range), earliest_publication_year, earliest_publication_year_definite, primary_language, total_price, publication_place, publication_country, publication_place_deduced=org_260_a_square_brackets, pages=ecco_pages, estc_id)

ecco_test <- ecco_test %>% left_join(targets, join_by(ecco_id))
ecco_val <- ecco_val %>% left_join(targets, join_by(ecco_id))
ecco_train <- ecco_train %>% left_join(targets, join_by(ecco_id))
split <- ecco_test %>% 
  mutate(set="test") %>%
  union_all(
    ecco_val %>% 
      mutate(set="val")
  ) %>%
  union_all(
    ecco_train %>% 
      mutate(set="train")
  )
to_move_publication_year <- split %>% 
  filter(set=="train") %>% 
  group_by(publication_year_definite, publication_year) %>% 
  summarise(works=n_distinct(work_id), .groups="drop") %>%
  anti_join(split %>% 
              filter(set!="train") %>% 
              group_by(publication_year_definite, publication_year) %>% 
              summarise(works=n_distinct(work_id), .groups="drop") %>%
              filter(works>=5), join_by(publication_year_definite, publication_year)) %>%
  filter(works>=10) %>%
  inner_join(split %>% 
    filter(set=="train")) %>%
  distinct(publication_year_definite, publication_year, work_id) %>% 
  group_by(publication_year_definite, publication_year) %>%
  slice_sample(n=5)
Joining with `by = join_by(publication_year_definite, publication_year)`
to_move_publication_year_val <- to_move_publication_year %>%
  slice_sample(n=2) %>%
  mutate(new_set="val")

to_move_publication_year <- to_move_publication_year %>%
  anti_join(to_move_publication_year_val) %>%
  mutate(new_set="test") %>%
  union_all(to_move_publication_year_val) %>%
  ungroup() %>%
  select(work_id, new_set)
Joining with `by = join_by(publication_year_definite, publication_year, work_id)`
  
to_move_earliest_publication_year <- split %>% 
  filter(set=="train") %>% 
  group_by(earliest_publication_year_definite, earliest_publication_year) %>% 
  summarise(works=n_distinct(work_id), .groups="drop") %>%
  anti_join(split %>% 
              filter(set!="train") %>% 
              group_by(earliest_publication_year_definite, earliest_publication_year) %>% 
              summarise(works=n_distinct(work_id), .groups="drop") %>%
              filter(works>=5), join_by(earliest_publication_year_definite, earliest_publication_year)) %>%
  filter(works>=10) %>%
  inner_join(split %>% 
    filter(set=="train")) %>%
  distinct(earliest_publication_year_definite, earliest_publication_year, work_id) %>% 
  group_by(earliest_publication_year_definite, earliest_publication_year) %>%
  slice_sample(n=5)
Joining with `by = join_by(earliest_publication_year_definite, earliest_publication_year)`
to_move_earliest_publication_year_val <- to_move_earliest_publication_year %>%
  slice_sample(n=2) %>%
  mutate(new_set="val")

to_move_earliest_publication_year <- to_move_earliest_publication_year %>%
  anti_join(to_move_earliest_publication_year_val) %>%
  mutate(new_set="test") %>%
  union_all(to_move_earliest_publication_year_val) %>%
  ungroup() %>%
  select(work_id, new_set)
Joining with `by = join_by(earliest_publication_year_definite, earliest_publication_year, work_id)`
to_move_primary_language <- split %>% 
  filter(set=="train") %>% 
  group_by(primary_language) %>% 
  summarise(works=n_distinct(work_id), .groups="drop") %>%
  anti_join(split %>% 
              filter(set!="train") %>% 
              group_by(primary_language) %>% 
              summarise(works=n_distinct(work_id), .groups="drop") %>%
              filter(works>=5), join_by(primary_language)) %>%
  filter(works>=10) %>%
  inner_join(split %>% 
    filter(set=="train")) %>%
  distinct(primary_language, work_id) %>% 
  group_by(primary_language) %>%
  slice_sample(n=5)
Joining with `by = join_by(primary_language)`
to_move_primary_language_val <- to_move_primary_language %>%
  slice_sample(n=2) %>%
  mutate(new_set="val")

to_move_primary_language <- to_move_primary_language %>%
  anti_join(to_move_primary_language_val) %>%
  mutate(new_set="test") %>%
  union_all(to_move_primary_language_val) %>%
  ungroup() %>%
  select(work_id, new_set)
Joining with `by = join_by(primary_language, work_id)`
to_move_publication_place <- split %>% 
  filter(set=="train") %>% 
  group_by(publication_place_deduced,  publication_place) %>% 
  summarise(works=n_distinct(work_id), .groups="drop") %>%
  anti_join(split %>% 
              filter(set!="train") %>% 
              group_by(publication_place_deduced,  publication_place) %>% 
              summarise(works=n_distinct(work_id), .groups="drop") %>%
              filter(works>=5), join_by(publication_place_deduced,  publication_place)) %>%
  filter(works>=10) %>%
  inner_join(split %>% 
    filter(set=="train")) %>%
  distinct(publication_place_deduced,  publication_place, work_id) %>% 
  group_by(publication_place_deduced,  publication_place) %>%
  slice_sample(n=5) %>%
  ungroup() %>%
  select(work_id)
Joining with `by = join_by(publication_place_deduced, publication_place)`
to_move_publication_place_val <- to_move_publication_place %>%
  slice_sample(n=2) %>%
  mutate(new_set="val")

to_move_publication_place <- to_move_publication_place %>%
  anti_join(to_move_publication_place_val) %>%
  mutate(new_set="test") %>%
  union_all(to_move_publication_place_val) %>%
  ungroup() %>%
  select(work_id, new_set)
Joining with `by = join_by(work_id)`
d <- split %>% 
  left_join(estc_actor_links) %>% 
  select(set, work_id, actor_id, actor_roles_all) %>% 
  separate_rows(actor_roles_all, sep="; ") %>%
  distinct()
Joining with `by = join_by(estc_id)`
Warning in left_join(., estc_actor_links) :
  Detected an unexpected many-to-many relationship between `x` and `y`.
ℹ Row 2 of `x` matches multiple rows in `y`.
ℹ Row 399569 of `y` matches multiple rows in `x`.
ℹ If a many-to-many relationship is expected, set `relationship = "many-to-many"` to silence this warning.
to_move_actor <- d %>%
  filter(set=="train") %>% 
  group_by(actor_id,actor_roles_all) %>% 
  summarise(works=n_distinct(work_id), .groups="drop") %>%
  anti_join(d %>% 
              filter(set!="train") %>% 
              group_by(actor_roles_all, actor_id) %>% 
              summarise(works=n_distinct(work_id), .groups="drop") %>%
              filter(works>=5), join_by(actor_id)) %>%
  filter(works>=50) %>%
  inner_join(d %>% 
    filter(set=="train")) %>%
  distinct(actor_id, work_id) %>% 
  group_by(actor_id) %>%
  slice_sample(n=7)
Joining with `by = join_by(actor_id, actor_roles_all)`
to_move_actor_val <- to_move_actor %>%
  slice_sample(n=2) %>%
  mutate(new_set="val")

to_move_actor <- to_move_actor %>%
  anti_join(to_move_actor_val) %>%
  mutate(new_set="test") %>%
  union_all(to_move_actor_val) %>%
  ungroup() %>%
  select(work_id, new_set)
Joining with `by = join_by(actor_id, work_id)`
to_move <- to_move_earliest_publication_year %>% 
  union(to_move_publication_year) %>%
  union(to_move_primary_language) %>%
  union(to_move_publication_place) %>%
  union(to_move_actor) %>%
  group_by(work_id) %>%
  summarise(new_set=if_else(any(new_set=="test"),"test", "val"))

split <- split %>%
  left_join(to_move, join_by(work_id)) %>%
  mutate(set=coalesce(new_set,set)) %>%
  select(-new_set)
ssplit <- split
while (TRUE) {
  bad_test <- split %>%
    filter(set!="train", publication_year<1700 | publication_year>1800 | earliest_publication_year>1800) %>%
    union(split %>%
      filter(set!="train") %>% 
      anti_join(split %>% filter(set=="train"), join_by(publication_place))
    ) %>%
    union(split %>%
      filter(set!="train") %>% 
      anti_join(split %>% filter(set=="train"), join_by(publication_country))
    ) %>%
    union(split %>%
      filter(set!="train") %>% 
      anti_join(split %>% filter(set=="train"), join_by(primary_language))
    ) %>%
    union(split %>%
      filter(set!="train") %>% 
      anti_join(split %>% filter(set=="train"), join_by(publication_country))
    ) %>%
    distinct(work_id) %>%
    mutate(new_set="train")
  old_split <- split
  split <- split %>%
    left_join(bad_test, join_by(work_id)) %>%
    mutate(set=coalesce(new_set,set)) %>%
    select(-new_set)
  if (all(old_split$set==split$set)) break
}
major_primary_language <- split %>% 
  filter(set=="test") %>% 
  group_by(primary_language) %>% 
  summarise(works=n_distinct(work_id), documents=n(), pages=sum(pages)) %>%
  transmute(primary_language,major_primary_language=if_else(is.na(primary_language) | works>=10,primary_language, "Other"))

split <- split %>%
  left_join(major_primary_language)
Joining with `by = join_by(primary_language)`
major_publication_place <- split %>%
  filter(set=="test") %>% 
  group_by(publication_place) %>% 
  summarise(works=n_distinct(work_id), documents=n(), pages=sum(pages)) %>%
  transmute(publication_place,major_publication_place=if_else(is.na(publication_place) | works>=20,publication_place, "Other"))

split <- split %>%
  left_join(major_publication_place)
Joining with `by = join_by(publication_place)`
major_publication_country <- split %>%
  filter(set=="test") %>% 
  group_by(publication_country) %>% 
  summarise(works=n_distinct(work_id), documents=n(), pages=sum(pages)) %>%
  transmute(publication_country,major_publication_country=if_else(is.na(publication_country) | works>=10,publication_country, "Other"))

split <- split %>%
  left_join(major_publication_country)
Joining with `by = join_by(publication_country)`
actor_split <- split %>% 
  inner_join(estc_actor_links) %>% 
  select(set, work_id, actor_id, actor_roles_all) %>% 
  separate_rows(actor_roles_all, sep="; ") %>%
  mutate(actor_roles_all=if_else(actor_roles_all=="printer","publisher",actor_roles_all)) %>%
  distinct()
Joining with `by = join_by(estc_id)`
Warning in inner_join(., estc_actor_links) :
  Detected an unexpected many-to-many relationship between `x` and `y`.
ℹ Row 2 of `x` matches multiple rows in `y`.
ℹ Row 399569 of `y` matches multiple rows in `x`.
ℹ If a many-to-many relationship is expected, set `relationship = "many-to-many"` to silence this warning.
bad_test_actors <- actor_split %>%
  filter(set!="train") %>%
  anti_join(d %>% filter(set=="train"), join_by(actor_id, actor_roles_all)) %>%
  distinct(actor_roles_all, actor_id)

actor_split <- actor_split %>% 
  anti_join(bad_test_actors)
Joining with `by = join_by(actor_id, actor_roles_all)`
major_actor <- actor_split %>%
  filter(set=="test") %>% 
  group_by(actor_id, actor_roles_all) %>% 
  summarise(works=n(), .groups="drop") %>%
  transmute(actor_id, actor_roles_all, major_actor_id=if_else(is.na(actor_id) | works>=50,actor_id, "Other"))

major_actor_split <- actor_split %>%
  inner_join(major_actor %>% filter(major_actor_id!="Other")) %>%
  select(-actor_id)
Joining with `by = join_by(actor_id, actor_roles_all)`
actor_split <- actor_split %>% 
  inner_join(split %>% 
               select(ecco_id, work_id, pages)) %>% 
  inner_join(estc_actors %>% 
               select(actor_id, name_unified)) %>% 
  rename(actor_role=actor_roles_all)
Joining with `by = join_by(work_id)`
Warning in inner_join(., split %>% select(ecco_id, work_id, pages)) :
  Detected an unexpected many-to-many relationship between `x` and `y`.
ℹ Row 1 of `x` matches multiple rows in `y`.
ℹ Row 2 of `y` matches multiple rows in `x`.
ℹ If a many-to-many relationship is expected, set `relationship = "many-to-many"` to silence this warning.
Joining with `by = join_by(actor_id)`
major_actor_split <- major_actor_split %>% 
  inner_join(split %>% 
               select(ecco_id, work_id, pages)) %>% 
  inner_join(estc_actors %>% 
               select(major_actor_id=actor_id, name_unified)) %>% 
  rename(actor_role=actor_roles_all)
Joining with `by = join_by(work_id)`
Warning in inner_join(., split %>% select(ecco_id, work_id, pages)) :
  Detected an unexpected many-to-many relationship between `x` and `y`.
ℹ Row 1 of `x` matches multiple rows in `y`.
ℹ Row 8 of `y` matches multiple rows in `x`.
ℹ If a many-to-many relationship is expected, set `relationship = "many-to-many"` to silence this warning.
Joining with `by = join_by(major_actor_id)`
split %>% 
  write_tsv(here("data/output/ecco-multi-target-split.tsv"),quote="needed",na="")
actor_split %>%
  write_tsv(here("data/output/ecco-multi-target-actor-split.tsv"),quote="needed",na="")
major_actor_split %>%
  write_tsv(here("data/output/ecco-multi-target-major-actor-split.tsv"),quote="needed",na="")

Overall

library(gt)
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
split %>%
    group_by(set) %>%
    summarise(pages=sum(pages),documents=n(),works=n_distinct(work_id), .groups="drop") %>%
    pivot_longer(pages:works) %>% 
    pivot_wider(names_from=set,values_from=value) %>%
    mutate(name=fct_relevel(name,"works","documents","pages")) %>%
    arrange(name) %>%
    gt(rowname_col = "name") %>%
    tab_header(title = "Overall") %>%
    fmt_integer(columns=c(test,val,train))
Overall
test train val
works 5,970 107,740 2,530
documents 26,808 173,739 7,066
pages 6,587,400 24,788,273 1,537,513
split %>% 
  pivot_longer(c(ecco_part,ecco_module,primary_language,major_primary_language,publication_country,major_publication_country,publication_place,major_publication_place)) %>%
  select(name,set,value) %>%
  union_all(
    major_actor_split %>%
      transmute(name="major_actor_id",set,value=major_actor_id)
  ) %>%
  union_all(
    actor_split %>%
      transmute(name="actor_id",set,value=actor_id)
  ) %>%
  distinct(name,set,value) %>%
  count(set,name) %>%
  pivot_wider(names_from=set,values_from=n) %>%
  gt(rowname_col = "name") %>%
  tab_header(title = "Number of targets by task") %>%
  fmt_integer(columns=c(test,val,train))
Number of targets by task
test train val
actor_id 10,698 60,856 4,452
ecco_module 8 8 8
ecco_part 2 2 2
major_actor_id 108 108 108
major_primary_language 9 9 9
major_publication_country 14 14 14
major_publication_place 40 40 40
primary_language 13 19 12
publication_country 19 38 15
publication_place 264 649 104
NA

Single label targets

print_split <- function(split, group_var, group_var_name, major=FALSE, order_by_frequency=TRUE) {
  group_var = enquo(group_var)
  d <- split %>%
    group_by(set, !!group_var) %>%
    summarise(pages=sum(pages),documents=n(),works=n_distinct(work_id), .groups="drop") %>%
    pivot_longer(pages:works) %>% 
    pivot_wider(names_from=set,values_from=value) %>%
    mutate(name=fct_relevel(name,"works","documents","pages"))
  d <- if (order_by_frequency) d %>% mutate(group_var=fct_reorder(!!group_var, train, .desc=TRUE)) else d %>% mutate(group_var=!!group_var)
  d %>%
    select(-!!group_var) %>%
    arrange(name,group_var) %>%
    gt(groupname_col = "name", rowname_col="group_var") %>%
    tab_header(title = str_c("By ",group_var_name), subtitle=str_c("(", if (major) "major only, " else "", split %>% filter(set=="test") %>% distinct(!!group_var) %>% count() %>% pull(), " targets)")) %>%
    fmt_integer(columns=c(test,val,train))
}

ECCO part

split %>% 
  print_split(ecco_part, "ECCO part")
By ECCO part
(2 targets)
test train val
works
ecco1 4,706 82,027 1,924
ecco2 2,468 33,930 1,010
documents
ecco1 19,950 129,702 5,272
ecco2 6,858 44,037 1,794
pages
ecco1 5,058,897 19,754,735 1,204,951
ecco2 1,528,503 5,033,538 332,562

ECCO module

split %>% 
  print_split(ecco_module, "ECCO module")
By ECCO module
(8 targets)
test train val
works
Religion and Philosophy 1,968 29,403 771
Literature and Language 1,628 23,271 618
Social Sciences 1,517 29,885 641
History and Geography 565 8,001 244
Medicine, Science and Technology 468 8,916 217
Law 350 9,303 155
General Reference 236 3,203 79
Fine Arts 276 2,511 103
documents
Religion and Philosophy 6,309 44,113 1,754
Literature and Language 10,799 40,909 2,271
Social Sciences 3,067 39,485 1,061
History and Geography 2,629 15,031 663
Medicine, Science and Technology 1,487 13,713 464
Law 1,237 11,978 395
General Reference 489 4,532 201
Fine Arts 791 3,978 257
pages
Religion and Philosophy 1,444,519 6,313,356 365,012
Literature and Language 2,627,666 6,242,597 458,667
Social Sciences 492,522 3,296,537 141,209
History and Geography 970,297 4,095,770 231,541
Medicine, Science and Technology 427,364 2,626,252 125,229
Law 420,675 1,143,333 130,524
General Reference 128,449 713,606 61,683
Fine Arts 75,908 356,822 23,648

Primary language

split %>% 
  print_split(major_primary_language, "primary language", TRUE)
By primary language
(major only, 9 targets)
test train val
works
English 5,641 102,414 2,367
French 198 2,457 86
Latin 210 2,812 94
Welsh 57 368 8
Italian 31 214 6
German 27 184 4
Other 20 76 10
Multiple languages 14 54 4
NA 3 22 2
documents
English 24,965 163,512 6,694
French 718 4,722 158
Latin 845 4,097 172
Welsh 82 460 10
Italian 95 392 11
German 35 251 4
Other 37 100 11
Multiple languages 28 69 4
NA 3 136 2
pages
English 6,028,016 22,498,845 1,449,460
French 223,017 1,205,902 31,991
Latin 260,398 789,051 47,719
Welsh 16,528 60,333 1,464
Italian 30,953 109,408 3,494
German 11,120 52,124 814
Other 9,752 31,309 1,608
Multiple languages 7,501 14,946 907
NA 115 26,355 56
split %>% 
  print_split(primary_language, "primary language")
By primary language
(13 targets)
test train val
works
English 5,641 102,414 2,367
French 198 2,457 86
Latin 210 2,812 94
Welsh 57 368 8
Italian 31 214 6
German 27 184 4
Multiple languages 14 54 4
Spanish 5 30 3
Portuguese 2 22 2
Scottish Gaelic 9 13 3
Dutch 3 9 2
Manx 1 6 NA
Irish NA 6 NA
Danish NA 3 NA
Swedish NA 3 NA
Algonquian (Other) NA 1 NA
Mohawk NA 1 NA
Romance (Other) NA 1 NA
NA 3 7 2
documents
English 24,965 163,512 6,694
French 718 4,722 158
Latin 845 4,097 172
Welsh 82 460 10
Italian 95 392 11
German 35 251 4
Multiple languages 28 69 4
Spanish 10 35 3
Portuguese 2 23 2
Scottish Gaelic 21 17 4
Dutch 3 16 2
Manx 1 9 NA
Irish NA 7 NA
Danish NA 4 NA
Swedish NA 3 NA
Algonquian (Other) NA 1 NA
Mohawk NA 1 NA
Romance (Other) NA 1 NA
NA 3 119 2
pages
English 6,028,016 22,498,845 1,449,460
French 223,017 1,205,902 31,991
Latin 260,398 789,051 47,719
Welsh 16,528 60,333 1,464
Italian 30,953 109,408 3,494
German 11,120 52,124 814
Multiple languages 7,501 14,946 907
Spanish 2,831 11,091 123
Portuguese 396 5,091 144
Scottish Gaelic 5,683 5,104 741
Dutch 759 6,962 600
Manx 83 3,061 NA
Irish NA 1,149 NA
Danish NA 1,848 NA
Swedish NA 915 NA
Algonquian (Other) NA 97 NA
Mohawk NA 206 NA
Romance (Other) NA 162 NA
NA 115 21,978 56

Publication country

split %>% 
  print_split(major_publication_country, "publication country", TRUE)
By publication country
(major only, 14 targets)
test train val
works
England 4,489 81,370 1,871
Scotland 807 12,073 335
Ireland 1,076 10,714 431
USA 797 6,997 226
France 96 1,047 34
Netherlands 76 325 15
Germany 48 176 9
Wales 50 271 7
Switzerland 26 87 1
Italy 18 88 1
India 11 123 2
Other 30 96 2
Belgium 10 43 1
NA 145 1,071 39
documents
England 18,541 128,352 5,007
Scotland 2,790 15,912 653
Ireland 3,140 15,448 910
USA 1,277 8,259 305
France 283 2,122 69
Netherlands 171 593 19
Germany 78 339 15
Wales 64 302 8
Switzerland 118 174 1
Italy 40 154 4
India 14 149 2
Other 48 129 6
Belgium 12 78 1
NA 232 1,728 66
pages
England 4,745,063 18,668,142 1,126,815
Scotland 673,838 1,937,308 145,205
Ireland 708,237 2,030,397 189,521
USA 167,405 735,190 29,935
France 89,436 577,826 16,538
Netherlands 48,799 164,539 4,013
Germany 25,858 121,346 2,542
Wales 10,055 25,057 810
Switzerland 43,643 55,515 454
Italy 13,783 43,683 1,455
India 2,506 27,788 265
Other 10,800 25,183 1,651
Belgium 2,163 15,540 8
NA 45,814 360,759 18,301
split %>% 
  print_split(publication_country, "publication country")
By publication country
(19 targets)
test train val
works
England 4,489 81,370 1,871
Scotland 807 12,073 335
Ireland 1,076 10,714 431
USA 797 6,997 226
France 96 1,047 34
Netherlands 76 325 15
Germany 48 176 9
Wales 50 271 7
Switzerland 26 87 1
Italy 18 88 1
India 11 123 2
Belgium 10 43 1
Jamaica 9 32 1
Austria 8 12 1
Canada 8 27 NA
Sweden 2 12 NA
Denmark 6 11 NA
Saint Kitts and Nevis NA 11 NA
Guernsey NA 11 NA
Isle of Man NA 8 NA
Barbados NA 10 NA
Antigua NA 8 NA
Haiti NA 8 NA
Channel Islands NA 8 NA
Malta NA 7 NA
Portugal NA 7 NA
Spain NA 4 NA
Russia NA 5 NA
Dominica NA 3 NA
Grenada 1 3 NA
Poland NA 2 NA
South Africa NA 2 NA
Bahamas NA 1 NA
Hungary NA 1 NA
Netherlands Antilles NA 1 NA
Northern Ireland NA 1 NA
Saint-Domingue NA 1 NA
NA 145 974 39
documents
England 18,541 128,352 5,007
Scotland 2,790 15,912 653
Ireland 3,140 15,448 910
USA 1,277 8,259 305
France 283 2,122 69
Netherlands 171 593 19
Germany 78 339 15
Wales 64 302 8
Switzerland 118 174 1
Italy 40 154 4
India 14 149 2
Belgium 12 78 1
Jamaica 13 38 4
Austria 13 31 2
Canada 11 28 NA
Sweden 2 16 NA
Denmark 8 13 NA
Saint Kitts and Nevis NA 12 NA
Guernsey NA 11 NA
Isle of Man NA 11 NA
Barbados NA 10 NA
Antigua NA 9 NA
Haiti NA 9 NA
Channel Islands NA 8 NA
Malta NA 8 NA
Portugal NA 7 NA
Spain NA 7 NA
Russia NA 5 NA
Dominica NA 3 NA
Grenada 1 3 NA
Poland NA 3 NA
South Africa NA 2 NA
Bahamas NA 1 NA
Hungary NA 1 NA
Netherlands Antilles NA 1 NA
Northern Ireland NA 1 NA
Saint-Domingue NA 1 NA
NA 232 1,618 66
pages
England 4,745,063 18,668,142 1,126,815
Scotland 673,838 1,937,308 145,205
Ireland 708,237 2,030,397 189,521
USA 167,405 735,190 29,935
France 89,436 577,826 16,538
Netherlands 48,799 164,539 4,013
Germany 25,858 121,346 2,542
Wales 10,055 25,057 810
Switzerland 43,643 55,515 454
Italy 13,783 43,683 1,455
India 2,506 27,788 265
Belgium 2,163 15,540 8
Jamaica 2,627 4,453 1,468
Austria 4,937 8,508 183
Canada 1,146 3,264 NA
Sweden 234 5,110 NA
Denmark 1,852 3,644 NA
Saint Kitts and Nevis NA 676 NA
Guernsey NA 1,637 NA
Isle of Man NA 916 NA
Barbados NA 478 NA
Antigua NA 372 NA
Haiti NA 81 NA
Channel Islands NA 1,792 NA
Malta NA 2,428 NA
Portugal NA 1,687 NA
Spain NA 4,552 NA
Russia NA 1,292 NA
Dominica NA 31 NA
Grenada 4 204 NA
Poland NA 1,238 NA
South Africa NA 2 NA
Bahamas NA 110 NA
Hungary NA 240 NA
Netherlands Antilles NA 164 NA
Northern Ireland NA 46 NA
Saint-Domingue NA 83 NA
NA 45,814 342,934 18,301

Publication place

split %>% 
  print_split(major_publication_place, "publication place", TRUE)
By publication place
(major only, 40 targets)
test train val
works
London 3,518 70,105 1,656
Dublin 993 9,885 424
Edinburgh 583 10,234 268
Other 1,278 6,108 79
Boston Ma 276 3,041 118
Oxford 125 1,492 48
Glasgow 270 1,509 79
Philadelphia Pa 189 1,621 63
Paris 83 858 28
Cambridge 107 1,099 52
Newcastle 67 960 28
Bristol 69 761 28
York 64 600 22
Bath 32 534 9
New York Ny 69 597 24
Birmingham 51 512 9
Salisbury 27 412 4
Norwich 25 385 4
Manchester 57 388 16
Cork 46 344 10
Belfast 63 297 11
Leeds 24 278 10
Shrewsbury 30 244 8
Aberdeen 41 238 10
Liverpool 21 212 3
New London Ct 22 172 8
Northampton 26 199 4
Hartford Ct 38 176 9
Chester 23 184 1
Perth 43 98 5
Gloucester 26 134 3
Berwick-upon-Tweed 39 106 10
New Haven Ct 22 137 6
Coventry 23 137 2
Providence Ri 31 127 5
The Hague 42 63 4
Newburyport Ma 22 105 3
Paisley 20 78 3
Falkirk 27 79 2
NA 187 2,658 64
documents
London 16,294 111,914 4,562
Dublin 2,910 14,286 879
Edinburgh 1,746 12,887 489
Other 1,853 7,552 111
Boston Ma 396 3,387 153
Oxford 279 2,238 114
Glasgow 747 2,080 127
Philadelphia Pa 283 1,966 78
Paris 224 1,730 45
Cambridge 187 1,507 73
Newcastle 93 1,144 30
Bristol 153 1,008 39
York 106 751 30
Bath 48 748 13
New York Ny 104 696 28
Birmingham 86 641 12
Salisbury 41 461 5
Norwich 27 453 4
Manchester 68 448 16
Cork 57 383 10
Belfast 89 335 13
Leeds 30 333 13
Shrewsbury 40 307 9
Aberdeen 61 285 19
Liverpool 22 252 5
New London Ct 23 222 8
Northampton 27 213 4
Hartford Ct 51 211 10
Chester 25 205 1
Perth 88 175 6
Gloucester 32 161 3
Berwick-upon-Tweed 59 154 11
New Haven Ct 24 151 6
Coventry 30 150 6
Providence Ri 31 129 5
The Hague 67 122 6
Newburyport Ma 24 108 3
Paisley 20 97 3
Falkirk 35 88 2
NA 328 3,761 115
pages
London 4,401,845 16,671,741 1,051,211
Dublin 680,689 1,932,516 186,410
Edinburgh 440,701 1,434,837 106,727
Other 295,927 971,413 14,771
Boston Ma 40,900 223,443 12,197
Oxford 83,460 403,804 32,461
Glasgow 172,862 335,340 28,058
Philadelphia Pa 52,552 251,577 10,792
Paris 67,345 470,499 9,241
Cambridge 40,194 223,622 13,867
Newcastle 14,381 93,143 2,588
Bristol 10,748 97,172 2,968
York 20,242 93,607 4,144
Bath 5,953 113,802 1,114
New York Ny 21,011 87,543 3,340
Birmingham 19,295 94,109 1,948
Salisbury 6,201 23,115 19
Norwich 2,731 40,373 324
Manchester 7,501 41,732 585
Cork 8,839 43,061 1,608
Belfast 12,861 30,352 1,035
Leeds 4,570 36,159 2,515
Shrewsbury 6,581 46,468 1,660
Aberdeen 10,487 39,286 6,111
Liverpool 4,314 33,569 896
New London Ct 1,832 11,201 277
Northampton 1,604 6,902 4
Hartford Ct 4,337 18,042 755
Chester 2,853 18,904 24
Perth 20,406 57,043 1,413
Gloucester 3,724 16,206 571
Berwick-upon-Tweed 12,863 36,292 2,238
New Haven Ct 1,104 8,031 277
Coventry 4,573 12,196 1,738
Providence Ri 1,802 5,984 165
The Hague 13,049 39,586 1,196
Newburyport Ma 2,551 7,239 93
Paisley 3,980 18,204 467
Falkirk 5,957 11,285 382
NA 74,575 688,875 31,323
split %>% 
  print_split(publication_place, "publication place")
By publication place
(264 targets)
test train val
works
London 3,518 70,105 1,656
Dublin 993 9,885 424
Edinburgh 583 10,234 268
Boston Ma 276 3,041 118
Oxford 125 1,492 48
Glasgow 270 1,509 79
Philadelphia Pa 189 1,621 63
Paris 83 858 28
Cambridge 107 1,099 52
Newcastle 67 960 28
Bristol 69 761 28
York 64 600 22
Bath 32 534 9
New York Ny 69 597 24
Birmingham 51 512 9
Salisbury 27 412 4
Norwich 25 385 4
Manchester 57 388 16
Exeter 18 334 6
Cork 46 344 10
Belfast 63 297 11
Leeds 24 278 10
Shrewsbury 30 244 8
Aberdeen 41 238 10
Amsterdam 17 125 5
Liverpool 21 212 3
New London Ct 22 172 8
Northampton 26 199 4
Canterbury 14 168 NA
Hartford Ct 38 176 9
Chester 23 184 1
Nottingham 16 174 2
Worcester 17 173 2
Perth 43 98 5
Gloucester 26 134 3
Ipswich 15 142 1
Berwick-upon-Tweed 39 106 10
Warrington 19 126 2
New Haven Ct 22 137 6
Coventry 23 137 2
Sherborne 10 55 1
Reading 13 112 1
Rochester 19 106 3
Providence Ri 31 127 5
Eton 13 77 1
The Hague 42 63 4
Downpatrick 13 117 3
Hull 15 112 1
Newburyport Ma 22 105 3
Worcester Ma 16 105 2
Calcutta 11 86 1
Sheffield 13 96 1
Paisley 20 78 3
Basel 16 42 1
Newport Ri 14 90 2
Falkirk 27 79 2
Charleston Sc 11 81 NA
Leipzig 14 22 NA
Portsmouth Nh 13 71 NA
Bury 7 47 NA
Livorno 6 33 1
Leicester 11 65 NA
Salem Ma 12 68 1
Limerick 14 71 1
Southampton 12 65 1
Tewkesbury 15 67 3
Darlington 12 65 2
Colchester 11 67 1
Carlisle 5 56 NA
Lincoln 6 57 3
Plymouth 11 55 NA
Winchester 13 49 1
Dundee 8 55 NA
Preston 10 57 2
Hereford 11 51 NA
Newark 6 42 NA
Kings Lynn 11 50 NA
Baltimore Md 9 53 NA
Norwich Ct 6 53 1
Taunton 9 50 NA
Wilmington De 12 46 1
Stirling 9 49 NA
Aldershot NA 1 NA
Derby 10 44 NA
Durham 10 45 1
Stamford 11 46 NA
Wolverhampton 8 45 NA
Chelmsford 10 35 1
Whitehaven 6 46 NA
Exeter Nh 6 45 1
Germantown Pa 6 27 1
Hamburg 12 29 NA
Twickenham 5 31 NA
Halifax 13 34 NA
Newry 11 39 2
Richmond Va 14 36 1
Portsmouth 7 40 3
Carmarthen 11 37 NA
Albany Ny 17 38 NA
Annapolis Md 14 25 NA
Kendal 6 35 NA
Waterford 9 34 NA
Williamsburg Va 5 27 NA
Lewes 10 34 NA
Huddersfield 9 27 NA
Lancaster Pa 10 32 NA
Ludlow 15 33 NA
Berlin 10 18 1
Brussels 7 12 NA
Geneva 7 17 NA
Windsor 11 19 NA
Wrexham 10 29 NA
Dresden 2 12 1
Vienna 8 12 1
Ayr 9 26 1
Brentford 7 25 1
Bury St Edmunds 5 28 NA
Dumfries 5 26 1
Trefeca 10 30 1
Cirencester 7 20 NA
Kingston 5 27 1
Alnwick 8 22 NA
Gainsborough 9 23 NA
Trefriw 5 15 NA
Kilmarnock 10 25 NA
Lustleigh NA 2 NA
Stockton 5 24 NA
Peterborough 5 19 NA
Stockport 6 20 NA
Maidstone 6 21 NA
Concord Nh 6 21 NA
Guildford 6 18 NA
Wisbech 5 23 NA
Kidderminster 5 18 NA
Richmond 1 10 NA
Sunderland 11 22 NA
Warwick 10 18 1
Doncaster 11 21 NA
New York NY 10 19 NA
Penrith 6 21 NA
Aberhonddu 6 19 NA
Trenton Nj 11 19 NA
Watertown Ma 6 20 NA
Macclesfield 6 19 NA
Margate 5 16 NA
Newport 7 17 NA
Tunbridge Wells 5 12 NA
USA 7 19 NA
Windsor Vt 7 18 NA
Bradford 5 18 NA
Göttingen 6 13 NA
Portland Me 5 18 NA
Bedford 10 16 NA
Frankfurt 2 4 4
Springfield Ma 7 17 NA
Burlington Nj 6 15 NA
Chichester 6 15 NA
Florence NA 13 NA
Litchfield Ct 5 16 NA
Rouen NA 11 NA
Lancaster 5 15 NA
Rotterdam 6 12 NA
Trowbridge NA 15 NA
Blackburn 6 12 1
Knaresborough 5 13 NA
Northampton Ma 13 14 NA
Quebec 6 13 NA
Venice 7 9 NA
Woodbridge NJ 5 14 NA
Amherst Nh 6 13 NA
Copenhagen 6 11 NA
Kelso 6 11 NA
Neuchatel NA 5 NA
Stafford NA 13 NA
Armagh 1 12 NA
Bruges NA 9 NA
Devizes 5 9 NA
Dover Nh 6 11 1
Lausanne 1 7 NA
Leominster Ma 6 11 NA
Marlborough 5 10 NA
Newark Nj NA 12 NA
Wakefield 5 12 NA
Altenburg 3 5 2
Banbury 5 11 NA
Buckingham NA 7 NA
Douai 6 8 NA
Dudley NA 9 NA
Egham 1 8 NA
Falmouth Me 4 11 1
Greenfield Ma 2 11 NA
Henley-on-Thames 5 10 NA
High Wycombe NA 9 NA
Huntingdon NA 11 NA
Leiden NA 5 NA
Londonderry 5 10 NA
Lyon 2 8 NA
Monaghan 5 11 NA
Montrose 14 11 1
Pontefract NA 11 NA
Ripon 1 11 NA
Sevenoaks NA 10 NA
St Ives 5 10 NA
Sudbury 5 9 NA
Bennington Vt 1 10 NA
Boston 1 10 NA
Bridgetown NA 10 NA
Chesterfield 5 8 NA
Congleton 1 9 NA
Deptford 2 10 NA
Dorchester NA 10 NA
Douglas NA 7 NA
Evesham 5 10 NA
Gosport 6 10 NA
New Bedford Ma NA 10 NA
North Shields 5 10 NA
Savannah Ga NA 10 NA
Spanish Town 5 7 NA
St Andrews 1 8 NA
Stourbridge 5 8 NA
Strabane 5 8 NA
Washington DC 5 10 NA
Weymouth NA 6 NA
Whitby 7 9 NA
Wigan 7 9 NA
Alexandria Va NA 9 NA
Basseterre Saint Kitts NA 8 NA
Burslem 7 9 NA
Drogheda 2 8 NA
Gravesend NA 9 NA
Haverhill Ma NA 9 NA
Kilkenny 1 9 NA
Leominster NH NA 9 NA
Liège 2 5 1
Madeley NA 9 NA
Nantwich 1 9 NA
New Brunswick Nj 1 9 NA
Walpole Nh 3 7 NA
Antwerp NA 6 NA
Bolton 7 8 1
Brunswick NA 1 NA
Carlow NA 8 NA
Ephrata Pa 5 8 NA
Halle 3 6 NA
Hamilton 5 8 NA
Market Harborough 1 8 NA
Middletown Ct NA 8 NA
Monmouth NA 8 NA
Northumberland Pa NA 6 NA
Port-au-Prince NA 7 NA
Poughkeepsie Ny 1 5 NA
Strood NA 8 NA
Tamworth NA 7 NA
Truru NA 8 NA
Valletta NA 7 NA
Windham Ct 5 7 NA
Brookfield Ma NA 7 NA
Chippenham NA 7 NA
Dedham Ma 5 7 NA
Dunbar NA 7 NA
Fishkill Ny NA 6 NA
Guernesey NA 7 NA
Hertford NA 6 NA
Oswestry NA 6 NA
Padua NA 3 NA
Rochdale NA 7 NA
Stroud NA 6 NA
the Hague 1 5 1
Utrecht 1 7 NA
Augusta Ga NA 4 NA
Brighton NA 5 NA
Caernarfon NA 6 NA
Catskill Ny 1 5 NA
Elizabeth Nj 7 6 NA
Fersfield NA 2 NA
Grantham 1 6 NA
Lexington Ky NA 6 NA
Lisbon NA 6 NA
Loughborough 1 6 NA
Montreal NA 6 NA
Mullingar 1 6 1
Romsey NA 6 NA
Scarborough NA 6 NA
South Shields 1 6 NA
Suffield Ct NA 6 1
Walsall NA 4 NA
Wexford 5 6 NA
Woodbridge Nj 1 6 1
Abartawe NA 5 NA
Abingdon NA 5 NA
Berkhamsted NA 5 NA
Bocking NA 5 1
Bungay NA 5 1
Chatham 1 5 NA
Chennai NA 5 NA
Clipstone 7 4 NA
Danbury Ct 3 5 NA
Haarlem NA 3 NA
Helston 1 5 NA
Keene Nh 1 4 NA
Liege NA 1 NA
Lymington NA 4 NA
Machynlleth NA 5 1
Madrid NA 2 NA
Medford Ma NA 5 NA
New Bern Nc 5 5 NA
Peacham Vt NA 5 NA
Reims NA 2 NA
Rome NA 5 NA
Saint-Omer NA 5 1
Spalding NA 5 NA
St Omer NA 5 NA
Strasbourg 1 3 NA
Workington NA 5 NA
Aylesbury 2 4 NA
Beverley 1 4 NA
Bishopstone NA 3 NA
Bridport NA 4 NA
Cambridge Ma NA 4 NA
Cheltenham 2 2 NA
Cheshire Ct NA 3 NA
Cheshunt NA 4 NA
Clonmel NA 4 NA
Cranbrook NA 4 NA
Danvers Ma NA 4 NA
Darmstadt NA 1 NA
Ennis NA 3 NA
Galway NA 4 NA
Gouda NA 1 NA
Hawick NA 4 NA
Hillsborough NC NA 4 NA
Hudson Ny 6 4 NA
Llanymddyfri 1 4 NA
Lyons NA 3 NA
Newburgh Ny NA 3 NA
Newmarket NA 4 NA
Poole NA 4 NA
Reading Pa 1 4 NA
Retford NA 4 NA
Salem NA 4 NA
St Peter Port NA 4 NA
St Petersburg NA 4 NA
Uppsala 2 3 NA
Uttoxeter NA 3 NA
Warren Ri NA 4 NA
Washington Pa NA 4 NA
Windsor Ct 1 4 NA
Wotton-under-Edge 1 4 NA
Yverdon NA 4 NA
Alston 1 3 NA
Ashford NA 3 NA
Athlone NA 3 NA
Bampton NA 3 NA
Bern 1 3 NA
Blandford Va NA 3 NA
Bridgewater NA 3 NA
Bridlington 1 3 NA
Carlisle Pa 4 3 NA
Charleston SC 1 3 NA
Chelmsford Ma NA 3 NA
Chesham NA 2 NA
Coburg NA 1 NA
Dereham NA 3 NA
Dun Laoghaire NA 2 NA
Greenock 1 3 NA
Hambourg NA 1 NA
Harrisburg Pa NA 2 NA
Harrogate NA 3 NA
Hwlffordd NA 3 NA
Jena NA 1 NA
Kingston Ny NA 2 NA
Launceston NA 3 NA
Louvain NA 3 NA
Lucca NA 3 NA
Malton NA 3 NA
Newfield Ct NA 3 NA
Parma 3 3 NA
Peterhead NA 3 NA
Ramsgate NA 2 NA
Roseau Dominica NA 3 NA
Rye NA 3 NA
Schenectady Ny 1 3 NA
Stockholm NA 3 NA
Stratford-upon-Avon NA 3 NA
Tiverton NA 3 NA
Toulouse NA 2 NA
Treffynnon NA 3 NA
Västerås NA 2 NA
Adpar NA 2 NA
America NA 2 NA
Andover Ma NA 2 NA
Avignon NA 1 NA
Banff NA 2 NA
Barnard Castle NA 2 NA
Berne 1 1 NA
Bombay NA 2 NA
Bontfaen NA 2 NA
Boston England NA 2 NA
Bouillon NA 1 NA
Brattleboro Vt NA 2 NA
Bremen NA 2 NA
Bridgnorth NA 2 NA
Burton NA 2 NA
Cape Town NA 2 NA
Castine Me NA 2 NA
Chatham Nj NA 2 NA
Chepstow NA 2 NA
Chertsey NA 2 NA
Cincinnati Oh NA 2 NA
Concord Ma NA 2 NA
Cooperstown Ny NA 2 NA
Crewkerne NA 2 NA
Dover De NA 2 NA
Dungannon NA 2 NA
Dunkirk NA 1 NA
Edenton Nc NA 2 NA
Enniskillen NA 2 NA
Erlangen NA 2 NA
Flensburg NA 1 NA
Fredericktown Md NA 2 NA
Fredericton NA 2 NA
Frome NA 2 NA
Georgetown Washington DC NA 2 NA
Great Marlow NA 2 NA
Haddington NA 2 NA
Halifax Nc NA 2 NA
Hannover Nh NA 2 NA
Hemel Hempstead NA 2 NA
Honiton NA 2 NA
Horncastle NA 2 NA
Horsham NA 2 NA
Howden NA 2 NA
Inverness 2 2 NA
Mannheim NA 2 NA
Melton Mowbray NA 2 NA
Middlewich NA 2 NA
Montargis NA 1 NA
Münster NA 2 NA
Nancy NA 2 NA
Newbury 1 2 1
Niagara NA 2 NA
Norfolk Va NA 2 NA
Northallerton NA 2 NA
Nürnberg NA 1 NA
Petersfield NA 2 NA
Pisa NA 2 NA
Potsdam NA 1 NA
Prescot NA 2 NA
Putney Vt NA 2 NA
Rheims NA 2 NA
Rome Ny NA 2 NA
Shepton Mallet NA 2 NA
South Molton NA 2 NA
St Albans NA 2 NA
St George NA 2 NA
St Helier NA 2 NA
Stonington Ct NA 2 NA
Stowmarket NA 2 NA
Szczecin NA 1 NA
Troy Ny NA 2 NA
Vergennes Vt NA 2 NA
Watford NA 2 NA
Wellingborough NA 2 NA
Winterthur NA 2 NA
York Pa NA 2 NA
Zurich NA 1 NA
Abbeville NA 1 NA
Abermaw NA 1 NA
Aberystwyth NA 1 NA
Alcester NA 1 NA
Ampthill NA 1 NA
Arezzo NA 1 NA
Ashby-de-la-Zouch NA 1 NA
Atherstone NA 1 NA
Bala NA 1 NA
Balfron NA 1 NA
Ballymena NA 1 NA
Barnstaple NA 1 NA
Barton-upon-Humber NA 1 NA
Basingstoke NA 1 NA
Bayreuth NA 1 NA
Bedale NA 1 NA
Beloeil NA 1 NA
Besançon NA 1 NA
Birr NA 1 NA
Birstall NA 1 NA
Bishop Castle NA 1 NA
Bodedern NA 1 NA
Bordeaux NA 1 NA
Boulogne-sur-Mer NA 1 NA
Brearley Hall NA 1 1
Brigg NA 1 NA
Budapest NA 1 NA
Burlington NJ NA 1 NA
Burnley NA 1 NA
Caen NA 1 NA
Caerdydd NA 1 NA
Caerfyrddin NA 1 NA
Caergybi NA 1 NA
Calais NA 1 NA
Carrickfergus NA 1 NA
Castlebar NA 1 NA
Castleford NA 1 NA
Cavan NA 1 NA
Chambersburg Pa NA 1 NA
Ciutadella NA 1 NA
Coimbra NA 1 NA
Coleraine NA 1 NA
Coxheath NA 1 NA
Crieff NA 1 NA
Cupar NA 1 NA
Dampierre-sur-Boutonne 1 1 NA
Dartford NA 1 NA
Dartmouth NA 1 NA
Dessau NA 1 NA
Dordrecht NA 1 NA
Dover NA 1 NA
Dunfermline NA 1 NA
Dunkalk NA 1 NA
Dunkeld NA 1 NA
Duns NA 1 NA
Düsseldorf NA 1 NA
East Grinstead NA 1 NA
Easton Md NA 1 NA
Elie NA 1 NA
Ellesmere NA 1 NA
Essex NA 1 NA
Faringdon NA 1 NA
Featherstone NA 1 NA
Fermoy NA 1 NA
Fleet NA 1 NA
Geneva Ny NA 1 NA
Georgetown Washington Sc NA 1 NA
Ghent NA 1 NA
Gillingham NA 1 NA
Gilmanton Nh NA 1 NA
Goshen Ny NA 1 NA
Gothenburg NA 1 NA
Halesworth NA 1 NA
Hallowell Me NA 1 NA
Hanau NA 1 NA
Hannover NA 1 NA
Harbor Ny NA 1 NA
Haverhill Nh NA 1 NA
Hexham NA 1 NA
Hildburghausen NA 1 NA
Hinckley NA 1 NA
Hitchin NA 1 NA
Holt NA 1 NA
Houghton Park NA 1 NA
Hungerford NA 1 NA
Karlskrona NA 1 NA
Karlsruhe NA 1 NA
Keene NA 1 NA
Kenilworth NA 1 NA
Keswick NA 1 NA
Kinsale NA 1 NA
Kirkbride NA 1 NA
Knoxville Tn NA 1 NA
Knutsford NA 1 NA
Lanark NA 1 NA
Leek NA 1 NA
Lisburn NA 1 NA
Long Buckby NA 1 NA
Lugano NA 1 NA
Lund NA 1 NA
Mainz NA 1 NA
Malda NA 1 NA
Mantua NA 1 NA
Marseilles NA 1 NA
Middelburg NA 1 NA
Milan 1 1 NA
Milborne Port NA 1 NA
Môle-Saint-Nicolas NA 1 NA
Monmouth Nj NA 1 NA
Morristown Nj NA 1 NA
Moscow NA 1 NA
Naas NA 1 NA
Nantes NA 1 NA
Naples 1 1 NA
Nashville Tn NA 1 NA
Nassau NA 1 NA
Newbury Vt NA 1 1
Nice NA 1 NA
Nordhausen NA 1 NA
Norfolk NA 1 NA
Norristown Pa NA 1 NA
Norrköping NA 1 NA
Northwich NA 1 NA
Nuremberg NA 1 NA
Ormskirk NA 1 NA
Osnabrück NA 1 NA
Pattingham NA 1 1
Pembroke NA 1 NA
Perugia NA 1 NA
Plymouth Ma NA 1 NA
Pondicherry NA 1 NA
Poughkeepsie NY NA 1 NA
Poulton-le-Fylde NA 1 NA
Princeton Nj NA 1 NA
Providence RI NA 1 NA
Raleigh Nc NA 1 NA
Ramsey NA 1 NA
Regensburg NA 1 NA
Rhaglan NA 1 NA
Saffron Walden NA 1 NA
Saint Helier NA 1 NA
Saint-Germain-en-Laye NA 1 NA
Salisbury Nc NA 1 NA
Sandhurst NA 1 NA
Sandwich NA 1 NA
Sanquhar NA 1 NA
Schleswig NA 1 NA
Sedbergh NA 1 NA
Selby NA 1 NA
Shepherdstown Wv NA 1 NA
Siena NA 1 NA
Sligo 1 1 NA
Southampton Pa NA 1 NA
St Austell NA 1 NA
St Eustatius NA 1 NA
St Neots NA 1 NA
Stoke-on-Trent NA 1 NA
Stokesley NA 1 NA
Stuttgart NA 1 NA
Sulechow NA 1 NA
Tetbury NA 1 NA
Thirsk NA 1 NA
Torrington NA 1 NA
Totnes NA 1 NA
Trenton NA 1 NA
Trevoux 1 1 NA
Tuscany NA 1 NA
Ulverston NA 1 NA
Valencia NA 1 NA
Verona 1 1 NA
Walpole NH NA 1 NA
Wargrave NA 1 NA
Warminster NA 1 NA
Waterford Ny NA 1 NA
Wells NA 1 NA
Whitburn 1 1 NA
Whitchurch 1 1 NA
Wiscasset Me NA 1 NA
Wittenberg NA 1 NA
Yarm NA 1 NA
Yeovil NA 1 NA
Youghal NA 1 NA
NA 187 1,691 58
documents
London 16,294 111,914 4,562
Dublin 2,910 14,286 879
Edinburgh 1,746 12,887 489
Boston Ma 396 3,387 153
Oxford 279 2,238 114
Glasgow 747 2,080 127
Philadelphia Pa 283 1,966 78
Paris 224 1,730 45
Cambridge 187 1,507 73
Newcastle 93 1,144 30
Bristol 153 1,008 39
York 106 751 30
Bath 48 748 13
New York Ny 104 696 28
Birmingham 86 641 12
Salisbury 41 461 5
Norwich 27 453 4
Manchester 68 448 16
Exeter 24 387 6
Cork 57 383 10
Belfast 89 335 13
Leeds 30 333 13
Shrewsbury 40 307 9
Aberdeen 61 285 19
Amsterdam 71 279 7
Liverpool 22 252 5
New London Ct 23 222 8
Northampton 27 213 4
Canterbury 21 212 NA
Hartford Ct 51 211 10
Chester 25 205 1
Nottingham 23 192 2
Worcester 19 189 2
Perth 88 175 6
Gloucester 32 161 3
Ipswich 16 156 1
Berwick-upon-Tweed 59 154 11
Warrington 27 152 2
New Haven Ct 24 151 6
Coventry 30 150 6
Sherborne 10 138 4
Reading 14 137 2
Rochester 29 132 4
Providence Ri 31 129 5
Eton 27 128 1
The Hague 67 122 6
Downpatrick 13 120 3
Hull 17 116 1
Newburyport Ma 24 108 3
Worcester Ma 17 108 2
Calcutta 14 106 1
Sheffield 14 101 1
Paisley 20 97 3
Basel 76 96 1
Newport Ri 14 91 2
Falkirk 35 88 2
Charleston Sc 13 83 NA
Leipzig 26 79 NA
Portsmouth Nh 13 78 NA
Bury 10 77 NA
Livorno 15 76 4
Leicester 11 73 NA
Salem Ma 18 72 1
Limerick 14 71 1
Southampton 19 70 1
Tewkesbury 15 70 3
Darlington 13 69 2
Colchester 12 68 1
Carlisle 5 65 NA
Lincoln 6 61 3
Plymouth 11 61 NA
Winchester 13 61 1
Dundee 11 60 NA
Preston 10 58 2
Hereford 12 57 NA
Newark 7 57 NA
Kings Lynn 13 55 NA
Baltimore Md 10 54 NA
Norwich Ct 7 53 1
Taunton 10 53 NA
Wilmington De 12 53 1
Stirling 9 50 NA
Aldershot NA 49 NA
Derby 11 49 NA
Durham 10 49 1
Stamford 11 49 NA
Wolverhampton 10 49 NA
Chelmsford 11 48 1
Whitehaven 6 48 NA
Exeter Nh 6 46 1
Germantown Pa 8 44 1
Hamburg 17 44 NA
Twickenham 6 43 NA
Halifax 13 42 NA
Newry 14 41 2
Richmond Va 15 41 1
Portsmouth 7 40 3
Carmarthen 11 39 NA
Albany Ny 19 38 NA
Annapolis Md 15 37 NA
Kendal 6 37 NA
Waterford 10 37 NA
Williamsburg Va 6 37 NA
Lewes 10 36 NA
Huddersfield 9 35 NA
Lancaster Pa 11 35 NA
Ludlow 16 35 NA
Berlin 15 33 1
Brussels 9 33 NA
Geneva 36 33 NA
Windsor 12 32 NA
Wrexham 10 32 NA
Dresden 2 31 1
Vienna 13 31 2
Ayr 9 30 1
Brentford 10 30 1
Bury St Edmunds 5 30 NA
Dumfries 5 30 1
Trefeca 11 30 2
Cirencester 7 29 NA
Kingston 9 29 4
Alnwick 8 28 NA
Gainsborough 10 28 NA
Trefriw 5 28 NA
Kilmarnock 11 27 NA
Lustleigh NA 27 NA
Stockton 5 26 NA
Peterborough 6 25 NA
Stockport 6 25 NA
Maidstone 7 24 NA
Concord Nh 6 23 NA
Guildford 6 23 NA
Wisbech 6 23 NA
Kidderminster 6 22 NA
Richmond 1 22 NA
Sunderland 13 22 NA
Warwick 10 22 1
Doncaster 12 21 NA
New York NY 11 21 NA
Penrith 6 21 NA
Aberhonddu 7 20 NA
Trenton Nj 11 20 NA
Watertown Ma 6 20 NA
Macclesfield 6 19 NA
Margate 6 19 NA
Newport 12 19 NA
Tunbridge Wells 7 19 NA
USA 7 19 NA
Windsor Vt 7 19 NA
Bradford 5 18 NA
Göttingen 6 18 NA
Portland Me 5 18 NA
Bedford 10 17 NA
Frankfurt 3 17 4
Springfield Ma 8 17 NA
Burlington Nj 6 16 NA
Chichester 9 16 NA
Florence NA 16 NA
Litchfield Ct 5 16 NA
Rouen NA 16 NA
Lancaster 5 15 NA
Rotterdam 6 15 NA
Trowbridge NA 15 NA
Blackburn 6 14 1
Knaresborough 6 14 NA
Northampton Ma 14 14 NA
Quebec 9 14 NA
Venice 16 14 NA
Woodbridge NJ 6 14 NA
Amherst Nh 6 13 NA
Copenhagen 8 13 NA
Kelso 6 13 NA
Neuchatel NA 13 NA
Stafford NA 13 NA
Armagh 1 12 NA
Bruges NA 12 NA
Devizes 5 12 NA
Dover Nh 6 12 1
Lausanne 1 12 NA
Leominster Ma 6 12 NA
Marlborough 5 12 NA
Newark Nj NA 12 NA
Wakefield 7 12 NA
Altenburg 3 11 8
Banbury 5 11 NA
Buckingham NA 11 NA
Douai 6 11 NA
Dudley NA 11 NA
Egham 1 11 NA
Falmouth Me 4 11 1
Greenfield Ma 2 11 NA
Henley-on-Thames 7 11 NA
High Wycombe NA 11 NA
Huntingdon NA 11 NA
Leiden NA 11 NA
Londonderry 5 11 NA
Lyon 6 11 NA
Monaghan 5 11 NA
Montrose 29 11 3
Pontefract NA 11 NA
Ripon 1 11 NA
Sevenoaks NA 11 NA
St Ives 5 11 NA
Sudbury 5 11 NA
Bennington Vt 1 10 NA
Boston 2 10 NA
Bridgetown NA 10 NA
Chesterfield 5 10 NA
Congleton 1 10 NA
Deptford 2 10 NA
Dorchester NA 10 NA
Douglas NA 10 NA
Evesham 7 10 NA
Gosport 6 10 NA
New Bedford Ma NA 10 NA
North Shields 7 10 NA
Savannah Ga NA 10 NA
Spanish Town 5 10 NA
St Andrews 1 10 NA
Stourbridge 5 10 NA
Strabane 5 10 NA
Washington DC 5 10 NA
Weymouth NA 10 NA
Whitby 7 10 NA
Wigan 7 10 NA
Alexandria Va NA 9 NA
Basseterre Saint Kitts NA 9 NA
Burslem 8 9 NA
Drogheda 2 9 NA
Gravesend NA 9 NA
Haverhill Ma NA 9 NA
Kilkenny 2 9 NA
Leominster NH NA 9 NA
Liège 2 9 1
Madeley NA 9 NA
Nantwich 1 9 NA
New Brunswick Nj 1 9 NA
Walpole Nh 3 9 NA
Antwerp NA 8 NA
Bolton 8 8 1
Brunswick NA 8 NA
Carlow NA 8 NA
Ephrata Pa 5 8 NA
Halle 3 8 NA
Hamilton 5 8 NA
Market Harborough 1 8 NA
Middletown Ct NA 8 NA
Monmouth NA 8 NA
Northumberland Pa NA 8 NA
Port-au-Prince NA 8 NA
Poughkeepsie Ny 2 8 NA
Strood NA 8 NA
Tamworth NA 8 NA
Truru NA 8 NA
Valletta NA 8 NA
Windham Ct 5 8 NA
Brookfield Ma NA 7 NA
Chippenham NA 7 NA
Dedham Ma 5 7 NA
Dunbar NA 7 NA
Fishkill Ny NA 7 NA
Guernesey NA 7 NA
Hertford NA 7 NA
Oswestry NA 7 NA
Padua NA 7 NA
Rochdale NA 7 NA
Stroud NA 7 NA
the Hague 1 7 1
Utrecht 1 7 NA
Augusta Ga NA 6 NA
Brighton NA 6 NA
Caernarfon NA 6 NA
Catskill Ny 1 6 NA
Elizabeth Nj 7 6 NA
Fersfield NA 6 NA
Grantham 1 6 NA
Lexington Ky NA 6 NA
Lisbon NA 6 NA
Loughborough 1 6 NA
Montreal NA 6 NA
Mullingar 1 6 1
Romsey NA 6 NA
Scarborough NA 6 NA
South Shields 1 6 NA
Suffield Ct NA 6 1
Walsall NA 6 NA
Wexford 6 6 NA
Woodbridge Nj 1 6 1
Abartawe NA 5 NA
Abingdon NA 5 NA
Berkhamsted NA 5 NA
Bocking NA 5 1
Bungay NA 5 2
Chatham 1 5 NA
Chennai NA 5 NA
Clipstone 9 5 NA
Danbury Ct 3 5 NA
Haarlem NA 5 NA
Helston 1 5 NA
Keene Nh 1 5 NA
Liege NA 5 NA
Lymington NA 5 NA
Machynlleth NA 5 1
Madrid NA 5 NA
Medford Ma NA 5 NA
New Bern Nc 6 5 NA
Peacham Vt NA 5 NA
Reims NA 5 NA
Rome NA 5 NA
Saint-Omer NA 5 2
Spalding NA 5 NA
St Omer NA 5 NA
Strasbourg 2 5 NA
Workington NA 5 NA
Aylesbury 2 4 NA
Beverley 1 4 NA
Bishopstone NA 4 NA
Bridport NA 4 NA
Cambridge Ma NA 4 NA
Cheltenham 3 4 NA
Cheshire Ct NA 4 NA
Cheshunt NA 4 NA
Clonmel NA 4 NA
Cranbrook NA 4 NA
Danvers Ma NA 4 NA
Darmstadt NA 4 NA
Ennis NA 4 NA
Galway NA 4 NA
Gouda NA 4 NA
Hawick NA 4 NA
Hillsborough NC NA 4 NA
Hudson Ny 6 4 NA
Llanymddyfri 2 4 NA
Lyons NA 4 NA
Newburgh Ny NA 4 NA
Newmarket NA 4 NA
Poole NA 4 NA
Reading Pa 1 4 NA
Retford NA 4 NA
Salem NA 4 NA
St Peter Port NA 4 NA
St Petersburg NA 4 NA
Uppsala 2 4 NA
Uttoxeter NA 4 NA
Warren Ri NA 4 NA
Washington Pa NA 4 NA
Windsor Ct 1 4 NA
Wotton-under-Edge 1 4 NA
Yverdon NA 4 NA
Alston 1 3 NA
Ashford NA 3 NA
Athlone NA 3 NA
Bampton NA 3 NA
Bern 1 3 NA
Blandford Va NA 3 NA
Bridgewater NA 3 NA
Bridlington 1 3 NA
Carlisle Pa 4 3 NA
Charleston SC 1 3 NA
Chelmsford Ma NA 3 NA
Chesham NA 3 NA
Coburg NA 3 NA
Dereham NA 3 NA
Dun Laoghaire NA 3 NA
Greenock 1 3 NA
Hambourg NA 3 NA
Harrisburg Pa NA 3 NA
Harrogate NA 3 NA
Hwlffordd NA 3 NA
Jena NA 3 NA
Kingston Ny NA 3 NA
Launceston NA 3 NA
Louvain NA 3 NA
Lucca NA 3 NA
Malton NA 3 NA
Newfield Ct NA 3 NA
Parma 3 3 NA
Peterhead NA 3 NA
Ramsgate NA 3 NA
Roseau Dominica NA 3 NA
Rye NA 3 NA
Schenectady Ny 1 3 NA
Stockholm NA 3 NA
Stratford-upon-Avon NA 3 NA
Tiverton NA 3 NA
Toulouse NA 3 NA
Treffynnon NA 3 NA
Västerås NA 3 NA
Adpar NA 2 NA
America NA 2 NA
Andover Ma NA 2 NA
Avignon NA 2 NA
Banff NA 2 NA
Barnard Castle NA 2 NA
Berne 2 2 NA
Bombay NA 2 NA
Bontfaen NA 2 NA
Boston England NA 2 NA
Bouillon NA 2 NA
Brattleboro Vt NA 2 NA
Bremen NA 2 NA
Bridgnorth NA 2 NA
Burton NA 2 NA
Cape Town NA 2 NA
Castine Me NA 2 NA
Chatham Nj NA 2 NA
Chepstow NA 2 NA
Chertsey NA 2 NA
Cincinnati Oh NA 2 NA
Concord Ma NA 2 NA
Cooperstown Ny NA 2 NA
Crewkerne NA 2 NA
Dover De NA 2 NA
Dungannon NA 2 NA
Dunkirk NA 2 NA
Edenton Nc NA 2 NA
Enniskillen NA 2 NA
Erlangen NA 2 NA
Flensburg NA 2 NA
Fredericktown Md NA 2 NA
Fredericton NA 2 NA
Frome NA 2 NA
Georgetown Washington DC NA 2 NA
Great Marlow NA 2 NA
Haddington NA 2 NA
Halifax Nc NA 2 NA
Hannover Nh NA 2 NA
Hemel Hempstead NA 2 NA
Honiton NA 2 NA
Horncastle NA 2 NA
Horsham NA 2 NA
Howden NA 2 NA
Inverness 2 2 NA
Mannheim NA 2 NA
Melton Mowbray NA 2 NA
Middlewich NA 2 NA
Montargis NA 2 NA
Münster NA 2 NA
Nancy NA 2 NA
Newbury 2 2 1
Niagara NA 2 NA
Norfolk Va NA 2 NA
Northallerton NA 2 NA
Nürnberg NA 2 NA
Petersfield NA 2 NA
Pisa NA 2 NA
Potsdam NA 2 NA
Prescot NA 2 NA
Putney Vt NA 2 NA
Rheims NA 2 NA
Rome Ny NA 2 NA
Shepton Mallet NA 2 NA
South Molton NA 2 NA
St Albans NA 2 NA
St George NA 2 NA
St Helier NA 2 NA
Stonington Ct NA 2 NA
Stowmarket NA 2 NA
Szczecin NA 2 NA
Troy Ny NA 2 NA
Vergennes Vt NA 2 NA
Watford NA 2 NA
Wellingborough NA 2 NA
Winterthur NA 2 NA
York Pa NA 2 NA
Zurich NA 2 NA
Abbeville NA 1 NA
Abermaw NA 1 NA
Aberystwyth NA 1 NA
Alcester NA 1 NA
Ampthill NA 1 NA
Arezzo NA 1 NA
Ashby-de-la-Zouch NA 1 NA
Atherstone NA 1 NA
Bala NA 1 NA
Balfron NA 1 NA
Ballymena NA 1 NA
Barnstaple NA 1 NA
Barton-upon-Humber NA 1 NA
Basingstoke NA 1 NA
Bayreuth NA 1 NA
Bedale NA 1 NA
Beloeil NA 1 NA
Besançon NA 1 NA
Birr NA 1 NA
Birstall NA 1 NA
Bishop Castle NA 1 NA
Bodedern NA 1 NA
Bordeaux NA 1 NA
Boulogne-sur-Mer NA 1 NA
Brearley Hall NA 1 1
Brigg NA 1 NA
Budapest NA 1 NA
Burlington NJ NA 1 NA
Burnley NA 1 NA
Caen NA 1 NA
Caerdydd NA 1 NA
Caerfyrddin NA 1 NA
Caergybi NA 1 NA
Calais NA 1 NA
Carrickfergus NA 1 NA
Castlebar NA 1 NA
Castleford NA 1 NA
Cavan NA 1 NA
Chambersburg Pa NA 1 NA
Ciutadella NA 1 NA
Coimbra NA 1 NA
Coleraine NA 1 NA
Coxheath NA 1 NA
Crieff NA 1 NA
Cupar NA 1 NA
Dampierre-sur-Boutonne 2 1 NA
Dartford NA 1 NA
Dartmouth NA 1 NA
Dessau NA 1 NA
Dordrecht NA 1 NA
Dover NA 1 NA
Dunfermline NA 1 NA
Dunkalk NA 1 NA
Dunkeld NA 1 NA
Duns NA 1 NA
Düsseldorf NA 1 NA
East Grinstead NA 1 NA
Easton Md NA 1 NA
Elie NA 1 NA
Ellesmere NA 1 NA
Essex NA 1 NA
Faringdon NA 1 NA
Featherstone NA 1 NA
Fermoy NA 1 NA
Fleet NA 1 NA
Geneva Ny NA 1 NA
Georgetown Washington Sc NA 1 NA
Ghent NA 1 NA
Gillingham NA 1 NA
Gilmanton Nh NA 1 NA
Goshen Ny NA 1 NA
Gothenburg NA 1 NA
Halesworth NA 1 NA
Hallowell Me NA 1 NA
Hanau NA 1 NA
Hannover NA 1 NA
Harbor Ny NA 1 NA
Haverhill Nh NA 1 NA
Hexham NA 1 NA
Hildburghausen NA 1 NA
Hinckley NA 1 NA
Hitchin NA 1 NA
Holt NA 1 NA
Houghton Park NA 1 NA
Hungerford NA 1 NA
Karlskrona NA 1 NA
Karlsruhe NA 1 NA
Keene NA 1 NA
Kenilworth NA 1 NA
Keswick NA 1 NA
Kinsale NA 1 NA
Kirkbride NA 1 NA
Knoxville Tn NA 1 NA
Knutsford NA 1 NA
Lanark NA 1 NA
Leek NA 1 NA
Lisburn NA 1 NA
Long Buckby NA 1 NA
Lugano NA 1 NA
Lund NA 1 NA
Mainz NA 1 NA
Malda NA 1 NA
Mantua NA 1 NA
Marseilles NA 1 NA
Middelburg NA 1 NA
Milan 2 1 NA
Milborne Port NA 1 NA
Môle-Saint-Nicolas NA 1 NA
Monmouth Nj NA 1 NA
Morristown Nj NA 1 NA
Moscow NA 1 NA
Naas NA 1 NA
Nantes NA 1 NA
Naples 1 1 NA
Nashville Tn NA 1 NA
Nassau NA 1 NA
Newbury Vt NA 1 1
Nice NA 1 NA
Nordhausen NA 1 NA
Norfolk NA 1 NA
Norristown Pa NA 1 NA
Norrköping NA 1 NA
Northwich NA 1 NA
Nuremberg NA 1 NA
Ormskirk NA 1 NA
Osnabrück NA 1 NA
Pattingham NA 1 1
Pembroke NA 1 NA
Perugia NA 1 NA
Plymouth Ma NA 1 NA
Pondicherry NA 1 NA
Poughkeepsie NY NA 1 NA
Poulton-le-Fylde NA 1 NA
Princeton Nj NA 1 NA
Providence RI NA 1 NA
Raleigh Nc NA 1 NA
Ramsey NA 1 NA
Regensburg NA 1 NA
Rhaglan NA 1 NA
Saffron Walden NA 1 NA
Saint Helier NA 1 NA
Saint-Germain-en-Laye NA 1 NA
Salisbury Nc NA 1 NA
Sandhurst NA 1 NA
Sandwich NA 1 NA
Sanquhar NA 1 NA
Schleswig NA 1 NA
Sedbergh NA 1 NA
Selby NA 1 NA
Shepherdstown Wv NA 1 NA
Siena NA 1 NA
Sligo 1 1 NA
Southampton Pa NA 1 NA
St Austell NA 1 NA
St Eustatius NA 1 NA
St Neots NA 1 NA
Stoke-on-Trent NA 1 NA
Stokesley NA 1 NA
Stuttgart NA 1 NA
Sulechow NA 1 NA
Tetbury NA 1 NA
Thirsk NA 1 NA
Torrington NA 1 NA
Totnes NA 1 NA
Trenton NA 1 NA
Trevoux 6 1 NA
Tuscany NA 1 NA
Ulverston NA 1 NA
Valencia NA 1 NA
Verona 2 1 NA
Walpole NH NA 1 NA
Wargrave NA 1 NA
Warminster NA 1 NA
Waterford Ny NA 1 NA
Wells NA 1 NA
Whitburn 1 1 NA
Whitchurch 1 1 NA
Wiscasset Me NA 1 NA
Wittenberg NA 1 NA
Yarm NA 1 NA
Yeovil NA 1 NA
Youghal NA 1 NA
NA 328 2,557 105
pages
London 4,401,845 16,671,741 1,051,211
Dublin 680,689 1,932,516 186,410
Edinburgh 440,701 1,434,837 106,727
Boston Ma 40,900 223,443 12,197
Oxford 83,460 403,804 32,461
Glasgow 172,862 335,340 28,058
Philadelphia Pa 52,552 251,577 10,792
Paris 67,345 470,499 9,241
Cambridge 40,194 223,622 13,867
Newcastle 14,381 93,143 2,588
Bristol 10,748 97,172 2,968
York 20,242 93,607 4,144
Bath 5,953 113,802 1,114
New York Ny 21,011 87,543 3,340
Birmingham 19,295 94,109 1,948
Salisbury 6,201 23,115 19
Norwich 2,731 40,373 324
Manchester 7,501 41,732 585
Exeter 3,019 38,360 343
Cork 8,839 43,061 1,608
Belfast 12,861 30,352 1,035
Leeds 4,570 36,159 2,515
Shrewsbury 6,581 46,468 1,660
Aberdeen 10,487 39,286 6,111
Amsterdam 27,101 84,430 1,529
Liverpool 4,314 33,569 896
New London Ct 1,832 11,201 277
Northampton 1,604 6,902 4
Canterbury 4,162 25,371 NA
Hartford Ct 4,337 18,042 755
Chester 2,853 18,904 24
Nottingham 2,723 12,058 74
Worcester 604 8,498 22
Perth 20,406 57,043 1,413
Gloucester 3,724 16,206 571
Ipswich 1,168 9,790 17
Berwick-upon-Tweed 12,863 36,292 2,238
Warrington 5,962 25,387 340
New Haven Ct 1,104 8,031 277
Coventry 4,573 12,196 1,738
Sherborne 1,243 54,914 1,115
Reading 832 20,729 110
Rochester 2,571 7,116 4
Providence Ri 1,802 5,984 165
Eton 4,928 24,089 72
The Hague 13,049 39,586 1,196
Downpatrick 18 197 8
Hull 3,235 8,267 21
Newburyport Ma 2,551 7,239 93
Worcester Ma 1,781 10,134 60
Calcutta 2,556 22,248 197
Sheffield 445 9,044 138
Paisley 3,980 18,204 467
Basel 31,800 32,875 454
Newport Ri 1,425 5,482 16
Falkirk 5,957 11,285 382
Charleston Sc 570 5,093 NA
Leipzig 12,919 44,339 NA
Portsmouth Nh 882 3,940 NA
Bury 708 22,733 NA
Livorno 5,973 29,061 1,455
Leicester 737 7,471 NA
Salem Ma 3,341 6,027 1
Limerick 575 3,781 65
Southampton 1,741 6,600 1
Tewkesbury 192 2,410 129
Darlington 619 2,367 6
Colchester 682 3,274 36
Carlisle 1,062 9,878 NA
Lincoln 336 2,094 61
Plymouth 592 3,903 NA
Winchester 1,065 11,798 42
Dundee 883 10,705 NA
Preston 971 3,643 298
Hereford 1,198 3,759 NA
Newark 1,135 8,233 NA
Kings Lynn 1,661 5,302 NA
Baltimore Md 679 6,328 NA
Norwich Ct 494 3,013 41
Taunton 1,254 3,967 NA
Wilmington De 2,581 5,650 323
Stirling 196 1,023 NA
Aldershot NA 28,656 NA
Derby 501 2,613 NA
Durham 519 2,397 218
Stamford 294 2,633 NA
Wolverhampton 1,325 5,186 NA
Chelmsford 700 6,035 23
Whitehaven 264 7,233 NA
Exeter Nh 184 1,816 148
Germantown Pa 1,998 12,628 98
Hamburg 4,752 13,046 NA
Twickenham 498 4,844 NA
Halifax 1,310 5,066 NA
Newry 1,136 2,938 64
Richmond Va 796 3,844 16
Portsmouth 698 2,708 417
Carmarthen 1,258 3,018 NA
Albany Ny 3,559 4,094 NA
Annapolis Md 2,494 3,011 NA
Kendal 541 3,245 NA
Waterford 1,679 3,823 NA
Williamsburg Va 199 5,309 NA
Lewes 310 1,918 NA
Huddersfield 803 3,196 NA
Lancaster Pa 1,189 2,168 NA
Ludlow 792 2,992 NA
Berlin 3,404 7,536 162
Brussels 1,240 5,744 NA
Geneva 10,522 9,399 NA
Windsor 1,592 5,549 NA
Wrexham 680 3,317 NA
Dresden 845 10,355 303
Vienna 4,937 8,508 183
Ayr 2,013 6,343 327
Brentford 804 3,463 12
Bury St Edmunds 209 714 NA
Dumfries 490 4,130 323
Trefeca 1,876 3,121 73
Cirencester 411 4,527 NA
Kingston 1,753 2,905 1,468
Alnwick 703 797 NA
Gainsborough 1,821 3,570 NA
Trefriw 40 264 NA
Kilmarnock 2,110 4,347 NA
Lustleigh NA 13,776 NA
Stockton 313 3,251 NA
Peterborough 352 871 NA
Stockport 101 1,734 NA
Maidstone 703 560 NA
Concord Nh 168 640 NA
Guildford 363 871 NA
Wisbech 219 1,168 NA
Kidderminster 987 2,971 NA
Richmond 370 2,263 NA
Sunderland 1,411 2,130 NA
Warwick 806 1,219 167
Doncaster 614 1,311 NA
New York NY 532 1,632 NA
Penrith 59 1,091 NA
Aberhonddu 666 1,210 NA
Trenton Nj 2,662 2,289 NA
Watertown Ma 80 92 NA
Macclesfield 2,769 2,277 NA
Margate 272 1,194 NA
Newport 932 2,705 NA
Tunbridge Wells 509 3,645 NA
USA 329 501 NA
Windsor Vt 576 773 NA
Bradford 349 681 NA
Göttingen 850 4,819 NA
Portland Me 199 609 NA
Bedford 214 1,082 NA
Frankfurt 1,126 8,821 1,183
Springfield Ma 1,016 1,041 NA
Burlington Nj 1,176 1,521 NA
Chichester 627 1,471 NA
Florence NA 2,941 NA
Litchfield Ct 641 924 NA
Rouen NA 4,796 NA
Lancaster 151 750 NA
Rotterdam 1,931 3,836 NA
Trowbridge NA 1,299 NA
Blackburn 2,500 3,547 88
Knaresborough 9 219 NA
Northampton Ma 1,749 886 NA
Quebec 1,080 1,917 NA
Venice 4,783 4,788 NA
Woodbridge NJ 549 236 NA
Amherst Nh 294 639 NA
Copenhagen 1,852 3,644 NA
Kelso 695 1,817 NA
Neuchatel NA 4,202 NA
Stafford NA 413 NA
Armagh 66 336 NA
Bruges NA 2,574 NA
Devizes 315 1,201 NA
Dover Nh 298 1,268 124
Lausanne 150 3,915 NA
Leominster Ma 471 707 NA
Marlborough 192 492 NA
Newark Nj NA 2,203 NA
Wakefield 828 821 NA
Altenburg 693 2,823 797
Banbury 197 315 NA
Buckingham NA 565 NA
Douai 1,662 3,907 NA
Dudley NA 1,313 NA
Egham 297 1,561 NA
Falmouth Me 248 292 70
Greenfield Ma 334 1,386 NA
Henley-on-Thames 1,154 1,190 NA
High Wycombe NA 1,639 NA
Huntingdon NA 248 NA
Leiden NA 1,412 NA
Londonderry 256 1,526 NA
Lyon 3,646 3,920 NA
Monaghan 135 207 NA
Montrose 11,342 2,185 999
Pontefract NA 285 NA
Ripon 1 36 NA
Sevenoaks NA 272 NA
St Ives 207 577 NA
Sudbury 310 2,557 NA
Bennington Vt 333 1,157 NA
Boston 271 205 NA
Bridgetown NA 478 NA
Chesterfield 92 628 NA
Congleton 24 802 NA
Deptford 49 857 NA
Dorchester NA 1,041 NA
Douglas NA 494 NA
Evesham 1,949 1,318 NA
Gosport 607 824 NA
New Bedford Ma NA 499 NA
North Shields 1,581 1,406 NA
Savannah Ga NA 242 NA
Spanish Town 917 1,764 NA
St Andrews 76 2,190 NA
Stourbridge 428 1,055 NA
Strabane 168 1,734 NA
Washington DC 160 227 NA
Weymouth NA 872 NA
Whitby 442 670 NA
Wigan 1,727 1,606 NA
Alexandria Va NA 452 NA
Basseterre Saint Kitts NA 468 NA
Burslem 245 258 NA
Drogheda 436 505 NA
Gravesend NA 766 NA
Haverhill Ma NA 302 NA
Kilkenny 393 549 NA
Leominster NH NA 722 NA
Liège 637 2,433 8
Madeley NA 706 NA
Nantwich 96 761 NA
New Brunswick Nj 204 1,529 NA
Walpole Nh 280 964 NA
Antwerp NA 1,954 NA
Bolton 1,712 1,262 74
Brunswick NA 3,932 NA
Carlow NA 142 NA
Ephrata Pa 1,707 1,878 NA
Halle 568 5,199 NA
Hamilton 122 254 NA
Market Harborough 338 1,342 NA
Middletown Ct NA 240 NA
Monmouth NA 804 NA
Northumberland Pa NA 894 NA
Port-au-Prince NA 47 NA
Poughkeepsie Ny 45 482 NA
Strood NA 68 NA
Tamworth NA 1,349 NA
Truru NA 535 NA
Valletta NA 2,428 NA
Windham Ct 153 1,131 NA
Brookfield Ma NA 434 NA
Chippenham NA 134 NA
Dedham Ma 274 906 NA
Dunbar NA 98 NA
Fishkill Ny NA 251 NA
Guernesey NA 1,234 NA
Hertford NA 411 NA
Oswestry NA 265 NA
Padua NA 914 NA
Rochdale NA 678 NA
Stroud NA 10 NA
the Hague 95 1,657 100
Utrecht 192 1,237 NA
Augusta Ga NA 246 NA
Brighton NA 375 NA
Caernarfon NA 82 NA
Catskill Ny 76 404 NA
Elizabeth Nj 1,624 957 NA
Fersfield NA 4,573 NA
Grantham 41 263 NA
Lexington Ky NA 156 NA
Lisbon NA 1,272 NA
Loughborough 35 252 NA
Montreal NA 772 NA
Mullingar 24 677 190
Romsey NA 766 NA
Scarborough NA 102 NA
South Shields 83 403 NA
Suffield Ct NA 136 144
Walsall NA 435 NA
Wexford 12 33 NA
Woodbridge Nj 16 669 136
Abartawe NA 65 NA
Abingdon NA 342 NA
Berkhamsted NA 766 NA
Bocking NA 201 168
Bungay NA 563 666
Chatham 22 213 NA
Chennai NA 387 NA
Clipstone 603 1,202 NA
Danbury Ct 558 101 NA
Haarlem NA 974 NA
Helston 117 1,089 NA
Keene Nh 11 142 NA
Liege NA 620 NA
Lymington NA 1,228 NA
Machynlleth NA 645 60
Madrid NA 4,161 NA
Medford Ma NA 216 NA
New Bern Nc 1,104 1,402 NA
Peacham Vt NA 126 NA
Reims NA 1,125 NA
Rome NA 484 NA
Saint-Omer NA 1,983 874
Spalding NA 159 NA
St Omer NA 928 NA
Strasbourg 710 637 NA
Workington NA 182 NA
Aylesbury 24 312 NA
Beverley 4 150 NA
Bishopstone NA 1,015 NA
Bridport NA 185 NA
Cambridge Ma NA 110 NA
Cheltenham 239 193 NA
Cheshire Ct NA 236 NA
Cheshunt NA 4 NA
Clonmel NA 111 NA
Cranbrook NA 296 NA
Danvers Ma NA 82 NA
Darmstadt NA 828 NA
Ennis NA 141 NA
Galway NA 312 NA
Gouda NA 126 NA
Hawick NA 758 NA
Hillsborough NC NA 27 NA
Hudson Ny 856 304 NA
Llanymddyfri 1,108 384 NA
Lyons NA 694 NA
Newburgh Ny NA 551 NA
Newmarket NA 289 NA
Poole NA 130 NA
Reading Pa 218 476 NA
Retford NA 312 NA
Salem NA 413 NA
St Peter Port NA 403 NA
St Petersburg NA 1,117 NA
Uppsala 234 892 NA
Uttoxeter NA 666 NA
Warren Ri NA 327 NA
Washington Pa NA 339 NA
Windsor Ct 177 235 NA
Wotton-under-Edge 24 96 NA
Yverdon NA 852 NA
Alston 44 95 NA
Ashford NA 194 NA
Athlone NA 4 NA
Bampton NA 28 NA
Bern 277 717 NA
Blandford Va NA 61 NA
Bridgewater NA 545 NA
Bridlington 87 371 NA
Carlisle Pa 791 393 NA
Charleston SC 28 181 NA
Chelmsford Ma NA 59 NA
Chesham NA 55 NA
Coburg NA 430 NA
Dereham NA 32 NA
Dun Laoghaire NA 17 NA
Greenock 24 103 NA
Hambourg NA 1,598 NA
Harrisburg Pa NA 547 NA
Harrogate NA 50 NA
Hwlffordd NA 40 NA
Jena NA 1,810 NA
Kingston Ny NA 339 NA
Launceston NA 33 NA
Louvain NA 556 NA
Lucca NA 629 NA
Malton NA 878 NA
Newfield Ct NA 199 NA
Parma 668 62 NA
Peterhead NA 54 NA
Ramsgate NA 287 NA
Roseau Dominica NA 31 NA
Rye NA 31 NA
Schenectady Ny 144 423 NA
Stockholm NA 1,252 NA
Stratford-upon-Avon NA 113 NA
Tiverton NA 211 NA
Toulouse NA 936 NA
Treffynnon NA 173 NA
Västerås NA 903 NA
Adpar NA 589 NA
America NA 119 NA
Andover Ma NA 75 NA
Avignon NA 1,205 NA
Banff NA 21 NA
Barnard Castle NA 13 NA
Berne 308 650 NA
Bombay NA 277 NA
Bontfaen NA 207 NA
Boston England NA 80 NA
Bouillon NA 528 NA
Brattleboro Vt NA 56 NA
Bremen NA 1,132 NA
Bridgnorth NA 8 NA
Burton NA 42 NA
Cape Town NA 2 NA
Castine Me NA 59 NA
Chatham Nj NA 103 NA
Chepstow NA 133 NA
Chertsey NA 170 NA
Cincinnati Oh NA 61 NA
Concord Ma NA 59 NA
Cooperstown Ny NA 154 NA
Crewkerne NA 209 NA
Dover De NA 33 NA
Dungannon NA 26 NA
Dunkirk NA 763 NA
Edenton Nc NA 1,021 NA
Enniskillen NA 2 NA
Erlangen NA 495 NA
Flensburg NA 937 NA
Fredericktown Md NA 173 NA
Fredericton NA 48 NA
Frome NA 105 NA
Georgetown Washington DC NA 75 NA
Great Marlow NA 18 NA
Haddington NA 8 NA
Halifax Nc NA 223 NA
Hannover Nh NA 307 NA
Hemel Hempstead NA 20 NA
Honiton NA 506 NA
Horncastle NA 59 NA
Horsham NA 174 NA
Howden NA 130 NA
Inverness 450 2 NA
Mannheim NA 100 NA
Melton Mowbray NA 18 NA
Middlewich NA 86 NA
Montargis NA 457 NA
Münster NA 394 NA
Nancy NA 676 NA
Newbury 48 88 22
Niagara NA 41 NA
Norfolk Va NA 43 NA
Northallerton NA 115 NA
Nürnberg NA 485 NA
Petersfield NA 11 NA
Pisa NA 53 NA
Potsdam NA 552 NA
Prescot NA 49 NA
Putney Vt NA 85 NA
Rheims NA 866 NA
Rome Ny NA 54 NA
Shepton Mallet NA 11 NA
South Molton NA 51 NA
St Albans NA 41 NA
St George NA 73 NA
St Helier NA 239 NA
Stonington Ct NA 30 NA
Stowmarket NA 5 NA
Szczecin NA 885 NA
Troy Ny NA 194 NA
Vergennes Vt NA 56 NA
Watford NA 15 NA
Wellingborough NA 30 NA
Winterthur NA 408 NA
York Pa NA 46 NA
Zurich NA 964 NA
Abbeville NA 259 NA
Abermaw NA 1 NA
Aberystwyth NA 1 NA
Alcester NA 30 NA
Ampthill NA 1 NA
Arezzo NA 332 NA
Ashby-de-la-Zouch NA 31 NA
Atherstone NA 20 NA
Bala NA 6 NA
Balfron NA 15 NA
Ballymena NA 2 NA
Barnstaple NA 51 NA
Barton-upon-Humber NA 42 NA
Basingstoke NA 2 NA
Bayreuth NA 276 NA
Bedale NA 28 NA
Beloeil NA 137 NA
Besançon NA 144 NA
Birr NA 296 NA
Birstall NA 11 NA
Bishop Castle NA 1 NA
Bodedern NA 16 NA
Bordeaux NA 236 NA
Boulogne-sur-Mer NA 110 NA
Brearley Hall NA 100 265
Brigg NA 9 NA
Budapest NA 240 NA
Burlington NJ NA 372 NA
Burnley NA 15 NA
Caen NA 26 NA
Caerdydd NA 25 NA
Caerfyrddin NA 44 NA
Caergybi NA 17 NA
Calais NA 209 NA
Carrickfergus NA 59 NA
Castlebar NA 1 NA
Castleford NA 68 NA
Cavan NA 68 NA
Chambersburg Pa NA 84 NA
Ciutadella NA 57 NA
Coimbra NA 415 NA
Coleraine NA 40 NA
Coxheath NA 36 NA
Crieff NA 271 NA
Cupar NA 263 NA
Dampierre-sur-Boutonne 872 506 NA
Dartford NA 60 NA
Dartmouth NA 1 NA
Dessau NA 103 NA
Dordrecht NA 618 NA
Dover NA 53 NA
Dunfermline NA 15 NA
Dunkalk NA 49 NA
Dunkeld NA 1 NA
Duns NA 22 NA
Düsseldorf NA 191 NA
East Grinstead NA 225 NA
Easton Md NA 19 NA
Elie NA 34 NA
Ellesmere NA 8 NA
Essex NA 76 NA
Faringdon NA 24 NA
Featherstone NA 72 NA
Fermoy NA 60 NA
Fleet NA 12 NA
Geneva Ny NA 24 NA
Georgetown Washington Sc NA 22 NA
Ghent NA 8 NA
Gillingham NA 27 NA
Gilmanton Nh NA 15 NA
Goshen Ny NA 136 NA
Gothenburg NA 391 NA
Halesworth NA 3 NA
Hallowell Me NA 21 NA
Hanau NA 151 NA
Hannover NA 210 NA
Harbor Ny NA 27 NA
Haverhill Nh NA 34 NA
Hexham NA 91 NA
Hildburghausen NA 498 NA
Hinckley NA 1 NA
Hitchin NA 1 NA
Holt NA 91 NA
Houghton Park NA 1 NA
Hungerford NA 12 NA
Karlskrona NA 32 NA
Karlsruhe NA 15 NA
Keene NA 23 NA
Kenilworth NA 32 NA
Keswick NA 1 NA
Kinsale NA 8 NA
Kirkbride NA 291 NA
Knoxville Tn NA 31 NA
Knutsford NA 2 NA
Lanark NA 15 NA
Leek NA 1 NA
Lisburn NA 1 NA
Long Buckby NA 39 NA
Lugano NA 93 NA
Lund NA 312 NA
Mainz NA 295 NA
Malda NA 182 NA
Mantua NA 46 NA
Marseilles NA 47 NA
Middelburg NA 95 NA
Milan 556 131 NA
Milborne Port NA 21 NA
Môle-Saint-Nicolas NA 34 NA
Monmouth Nj NA 468 NA
Morristown Nj NA 328 NA
Moscow NA 175 NA
Naas NA 1 NA
Nantes NA 383 NA
Naples 374 191 NA
Nashville Tn NA 26 NA
Nassau NA 110 NA
Newbury Vt NA 190 148
Nice NA 195 NA
Nordhausen NA 114 NA
Norfolk NA 34 NA
Norristown Pa NA 157 NA
Norrköping NA 8 NA
Northwich NA 1 NA
Nuremberg NA 596 NA
Ormskirk NA 32 NA
Osnabrück NA 95 NA
Pattingham NA 19 422
Pembroke NA 33 NA
Perugia NA 87 NA
Plymouth Ma NA 45 NA
Pondicherry NA 155 NA
Poughkeepsie NY NA 161 NA
Poulton-le-Fylde NA 1 NA
Princeton Nj NA 229 NA
Providence RI NA 31 NA
Raleigh Nc NA 16 NA
Ramsey NA 63 NA
Regensburg NA 173 NA
Rhaglan NA 73 NA
Saffron Walden NA 1 NA
Saint Helier NA 414 NA
Saint-Germain-en-Laye NA 376 NA
Salisbury Nc NA 40 NA
Sandhurst NA 10 NA
Sandwich NA 1 NA
Sanquhar NA 8 NA
Schleswig NA 523 NA
Sedbergh NA 20 NA
Selby NA 16 NA
Shepherdstown Wv NA 332 NA
Siena NA 186 NA
Sligo 41 18 NA
Southampton Pa NA 8 NA
St Austell NA 23 NA
St Eustatius NA 164 NA
St Neots NA 24 NA
Stoke-on-Trent NA 7 NA
Stokesley NA 27 NA
Stuttgart NA 48 NA
Sulechow NA 353 NA
Tetbury NA 10 NA
Thirsk NA 8 NA
Torrington NA 34 NA
Totnes NA 34 NA
Trenton NA 36 NA
Trevoux 3,193 337 NA
Tuscany NA 128 NA
Ulverston NA 640 NA
Valencia NA 334 NA
Verona 1,223 21 NA
Walpole NH NA 51 NA
Wargrave NA 15 NA
Warminster NA 1 NA
Waterford Ny NA 127 NA
Wells NA 51 NA
Whitburn 182 225 NA
Whitchurch 122 24 NA
Wiscasset Me NA 24 NA
Wittenberg NA 303 NA
Yarm NA 47 NA
Yeovil NA 139 NA
Youghal NA 146 NA
NA 74,575 516,172 28,576

Year of earliest publication

split %>%
  count(set,earliest_publication_year_definite) %>%
  ggplot(aes(x=set,y=n,fill=earliest_publication_year_definite)) +
  geom_col(position='dodge') +
  theme_hsci_discrete() +
  coord_flip() +
  ylab("ECCO documents") +
  xlab("Set") +
  labs(fill="Date certain") +
  theme(legend.position="bottom") + 
  ggtitle("Uncertainty/certainty of dating the earliest year of publication")

split %>%
  count(set,earliest_publication_year,earliest_publication_year_definite) %>%
  ggplot(aes(x=earliest_publication_year,y=n,fill=earliest_publication_year_definite)) +
  geom_col(position='stack',width=1) +
  theme_hsci_discrete() +
  ylab("ECCO documents") +
  xlab("Year") +
  labs(fill="Date certain") +    
  theme(legend.position="bottom") + 
  facet_wrap(~set, scales="free") +
  ggtitle("Earliest year of publication")
Warning: Removed 3 rows containing missing values or values outside the scale range (`geom_col()`).

split %>% 
  mutate(earliest_publication_decade=floor(earliest_publication_year/10)*10) %>%
  print_split(earliest_publication_decade, "earliest publication decade", order_by_frequency=FALSE)
By earliest publication decade
(32 targets)
test train val
works
1470 NA 4 NA
1480 3 2 NA
1490 1 NA NA
1500 1 4 NA
1510 2 3 NA
1520 NA 5 NA
1530 1 15 NA
1540 NA 10 3
1550 5 13 NA
1560 8 16 2
1570 6 33 1
1580 7 20 NA
1590 10 41 5
1600 10 40 2
1610 12 57 5
1620 18 46 2
1630 14 72 7
1640 36 113 20
1650 37 157 27
1660 47 144 22
1670 74 267 28
1680 80 387 34
1690 91 559 35
1700 403 7,322 195
1710 433 9,689 216
1720 368 7,322 191
1730 369 7,281 180
1740 414 8,361 194
1750 453 8,894 241
1760 504 10,436 214
1770 579 10,919 220
1780 666 13,164 270
1790 1,163 19,437 361
1800 143 2,732 51
1810 NA 3 NA
1820 NA 4 NA
1830 NA 1 NA
1840 NA 3 NA
1850 NA 2 NA
1860 NA 1 NA
1910 NA 1 NA
1970 NA 1 NA
NA 12 159 4
documents
1470 NA 36 NA
1480 179 4 NA
1490 8 NA NA
1500 18 24 NA
1510 150 26 NA
1520 NA 8 NA
1530 5 873 NA
1540 NA 34 53
1550 132 108 NA
1560 202 51 43
1570 210 301 1
1580 282 97 NA
1590 179 161 54
1600 215 146 10
1610 586 307 101
1620 220 127 2
1630 106 190 75
1640 172 300 72
1650 224 559 138
1660 466 482 89
1670 695 957 153
1680 920 1,168 151
1690 906 1,926 146
1700 2,495 11,847 542
1710 2,657 15,088 554
1720 1,880 11,649 512
1730 1,621 11,868 765
1740 1,938 13,519 465
1750 1,983 14,855 751
1760 2,421 17,046 635
1770 1,802 17,964 497
1780 1,745 20,663 564
1790 2,178 27,727 623
1800 160 3,246 63
1810 NA 4 NA
1820 NA 4 NA
1830 NA 2 NA
1840 NA 3 NA
1850 NA 2 NA
1860 NA 3 NA
1910 NA 1 NA
1970 NA 1 NA
NA 53 362 7
pages
1470 NA 9,319 NA
1480 49,929 516 NA
1490 930 NA NA
1500 7,880 7,062 NA
1510 51,574 6,505 NA
1520 NA 2,069 NA
1530 1,073 213,027 NA
1540 NA 7,579 13,010
1550 39,495 42,466 NA
1560 53,735 22,764 17,841
1570 86,806 81,647 275
1580 101,179 51,640 NA
1590 47,526 44,963 9,023
1600 68,197 19,923 1,697
1610 182,677 53,157 32,642
1620 52,997 34,979 186
1630 33,582 46,923 13,682
1640 46,536 64,841 17,869
1650 68,046 138,277 33,852
1660 148,658 123,139 29,926
1670 211,283 185,238 35,698
1680 195,203 218,114 27,574
1690 289,121 484,589 25,493
1700 647,072 1,440,561 143,111
1710 705,390 1,517,773 128,145
1720 469,041 1,639,046 93,166
1730 362,280 1,660,011 208,046
1740 431,489 1,764,350 90,533
1750 479,900 2,202,399 155,707
1760 637,262 2,336,543 142,475
1770 381,855 2,833,902 90,506
1780 345,723 3,216,681 101,333
1790 366,658 3,839,644 117,823
1800 18,832 384,543 5,689
1810 NA 902 NA
1820 NA 196 NA
1830 NA 582 NA
1840 NA 399 NA
1850 NA 189 NA
1860 NA 978 NA
1910 NA 4 NA
1970 NA 16 NA
NA 5,471 90,817 2,211

Year of publication

split %>%
  count(set,publication_year_definite) %>%
  ggplot(aes(x=set,y=n,fill=publication_year_definite)) +
  geom_col(position='dodge') +
  theme_hsci_discrete() +
  ylab("ECCO documents") +
  xlab("Set") +
  labs(fill="Date certain") +    
  theme(legend.position="bottom") + 
  coord_flip() +
  ggtitle("Uncertainty/certainty of dating the year of publication")

split %>%
  count(set,publication_year,publication_year_definite) %>%
  ggplot(aes(x=publication_year,y=n,fill=publication_year_definite)) +
  geom_col(position='stack',width=1) +
  theme_hsci_discrete() +
  ylab("ECCO documents") +
  xlab("Year") +
  labs(fill="Date certain") +    
  theme(legend.position="bottom") + 
  facet_wrap(~set, scales="free") +
  ggtitle("Year of publication")
Warning: Removed 3 rows containing missing values or values outside the scale range (`geom_col()`).

split %>% 
  mutate(publication_decade=floor(publication_year/10)*10) %>%
  print_split(publication_decade, "publication decade", order_by_frequency=FALSE)
By publication decade
(12 targets)
test train val
works
1600 NA 2 NA
1610 NA 2 NA
1620 NA 1 NA
1630 NA 1 NA
1640 NA 5 NA
1650 NA 5 NA
1660 NA 4 NA
1670 NA 8 NA
1680 NA 16 NA
1690 NA 28 NA
1700 606 7,873 270
1710 725 10,618 315
1720 742 8,466 291
1730 750 8,398 287
1740 766 9,560 285
1750 867 10,233 353
1760 985 12,126 376
1770 1,135 12,883 369
1780 1,205 15,186 426
1790 1,840 22,418 542
1800 358 3,598 93
1810 NA 4 NA
1820 NA 4 NA
1830 NA 1 NA
1840 NA 3 NA
1850 NA 2 NA
1860 NA 1 NA
1910 NA 1 NA
1970 NA 1 NA
NA 11 158 4
documents
1600 NA 2 NA
1610 NA 3 NA
1620 NA 1 NA
1630 NA 1 NA
1640 NA 5 NA
1650 NA 5 NA
1660 NA 4 NA
1670 NA 10 NA
1680 NA 31 NA
1690 NA 31 NA
1700 1,055 10,382 426
1710 1,565 14,240 505
1720 1,731 11,360 487
1730 2,006 11,528 537
1740 1,934 13,093 496
1750 2,438 14,608 715
1760 3,086 17,239 941
1770 3,553 19,420 841
1780 3,432 22,904 882
1790 5,426 34,004 1,094
1800 571 4,486 135
1810 NA 5 NA
1820 NA 4 NA
1830 NA 2 NA
1840 NA 3 NA
1850 NA 2 NA
1860 NA 3 NA
1910 NA 1 NA
1970 NA 1 NA
NA 11 361 7
pages
1600 NA 116 NA
1610 NA 95 NA
1620 NA 24 NA
1630 NA 76 NA
1640 NA 138 NA
1650 NA 103 NA
1660 NA 78 NA
1670 NA 1,139 NA
1680 NA 13,698 NA
1690 NA 3,858 NA
1700 246,446 1,142,136 90,012
1710 363,694 1,359,129 90,880
1720 453,674 1,540,902 100,492
1730 517,969 1,560,180 123,819
1740 478,001 1,716,975 113,898
1750 597,839 2,121,366 163,770
1760 769,405 2,450,668 220,321
1770 860,137 3,131,800 185,863
1780 834,338 3,708,766 175,588
1790 1,347,900 5,318,060 246,041
1800 116,740 624,915 24,618
1810 NA 918 NA
1820 NA 196 NA
1830 NA 582 NA
1840 NA 399 NA
1850 NA 189 NA
1860 NA 978 NA
1910 NA 4 NA
1970 NA 16 NA
NA 1,257 90,769 2,211

Price

split %>% 
  mutate(has_price=!is.na(total_price)) %>%
  count(set,has_price) %>%
  pivot_wider(names_from=set,values_from=n) %>%
  gt(rowname_col = "set") %>%
    tab_header(title = "Price information availability") %>%
    fmt_integer(columns=c(test,val,train))
Price information availability
has_price test train val
FALSE 24,346 147,906 6,088
TRUE 2,462 25,833 978
split %>%
  count(set,total_price) %>%
  ggplot(aes(x=total_price,y=n)) +
  geom_col(width=1) +
  theme_hsci_discrete() +
  ylab("ECCO documents") +
  xlab("Price") +
  theme(legend.position="bottom") + 
  facet_wrap(~set, scales="free", ncol=1) +
  ggtitle("Prices")
Warning: `position_stack()` requires non-overlapping x intervals.
Warning: `position_stack()` requires non-overlapping x intervals.
Warning: `position_stack()` requires non-overlapping x intervals.
Warning: Removed 3 rows containing missing values or values outside the scale range (`geom_col()`).

Multi-label targets

Actors

library(gghsci)
major_actor_split %>%
  filter(set=="test") %>%
  count(ecco_id) %>%
  count(n) %>%
  ggplot(aes(x=n,y=nn)) +
  geom_col() +
  theme_hsci_discrete() +
  ylab("ECCO documents") +
  xlab("Number of actors attached") +
  ggtitle("Test set label count distribution (major only)")
Storing counts in `nn`, as `n` already present in input
ℹ Use `name = "new_name"` to pick a new name.

major_actor_split %>% 
  group_by(set, major_actor_id, actor_role, name_unified) %>%
  summarise(pages=sum(pages),documents=n(),works=n_distinct(work_id), .groups="drop") %>%
  pivot_longer(pages:works) %>% 
  pivot_wider(names_from=set,values_from=value) %>%
  mutate(name=fct_relevel(name,"works","documents","pages")) %>%
  mutate(major_actor_id=fct_reorder(major_actor_id, train, .desc=TRUE)) %>%
  arrange(name,major_actor_id) %>%
  select(-major_actor_id) %>%
  gt(groupname_col = "name", rowname_col="name_unified") %>%
  tab_header(title = "By actor", subtitle=str_c("(major only, ", major_actor_split %>% filter(set=="test") %>% distinct(major_actor_id) %>% count() %>% pull(), " targets)")) %>%
  fmt_integer(columns=c(test,val,train))
By actor
(major only, 108 targets)
actor_role test train val
works
Robinson, George I publisher 145 698 36
Cadell, Thomas publisher 160 849 41
Strahan, William publisher 153 493 38
Longman, Thomas publisher 209 330 46
Baldwin, Robert I publisher 192 527 37
Johnston, William publisher 148 255 30
Law, Bedwell publisher 167 299 33
Caslon, Thomas publisher 162 167 31
Millar, Andrew publisher 102 501 23
Cadell, Thomas Ii publisher 99 495 24
F. and C. Rivington publisher 76 372 27
Rivington, John publisher 150 294 39
Hitch, Charles publisher 182 357 45
Johnson, John publisher 78 527 15
Roberts, James publisher 57 1,569 36
Dodsley, James publisher 57 451 22
J. and F. Rivington publisher 112 203 23
Becket, Thomas publisher 105 504 20
Crowder, Stanley publisher 118 265 23
Smith, W. publisher 69 179 16
Faulkner, George publisher 55 568 22
Hawes, Lacy publisher 140 199 23
Byrne, P. publisher 79 512 27
J. Exshaw publisher 129 331 28
Lowndes, Thomas publisher 102 165 26
Bettesworth, Arthur publisher 152 380 45
Dilly, Charles publisher 110 555 33
Williams, J. publisher 87 285 23
Powell, S. publisher 69 235 15
G. G. and J. Robinson publisher 75 402 27
Strahan, Andrew publisher 62 264 11
Wogan, P. publisher 100 347 24
Innys, William publisher 81 391 20
J. and P. Knapton publisher 127 256 29
Moore, J. publisher 66 362 23
Risk, George publisher 76 135 15
E. and C. Dilly publisher 52 215 11
Bell, John publisher 88 293 18
Cooper, Mary Mrs publisher 70 938 24
Potts, J. publisher 76 219 24
Hodges, James Sir publisher 73 239 20
Tonson, Jacob I publisher 121 419 16
Crowder, Samuel publisher 95 103 17
Jones, W. publisher 76 292 25
J. and R. Tonson publisher 83 168 17
Lowndes, William publisher 86 108 16
Wilson, P. publisher 83 246 19
Sleater, W. publisher 73 277 22
Davies, Thomas publisher 82 208 16
Powell, S. publisher 53 396 19
Bladon, Samuel publisher 111 326 27
Nichols, John publisher 58 424 18
Osborne, Thomas Ii publisher 58 169 12
Donaldson, A. publisher 73 165 8
Johnson, John publisher 62 328 11
Richardson, Joseph publisher 53 105 11
Birt, Samuel publisher 99 171 20
J. F. and C. Rivington publisher 95 215 17
Ware, Richard I publisher 75 117 16
Walker, T. publisher 61 211 14
Harrison and Co publisher 62 130 13
Nicoll, William publisher 84 200 16
Gosling, Robert publisher 59 241 14
Chamberlaine, D. publisher 59 177 10
Buckland, James publisher 67 515 23
Midwinter, Daniel publisher 106 202 27
Ware, Catherine Mrs publisher 67 55 9
Wilson, W. publisher 52 187 14
Longman, Thomas publisher 107 154 23
Lintott, Barnaby Bernard publisher 58 298 14
Davis, Lockyer John publisher 61 249 14
Rivington, Charles publisher 62 229 14
Mears, William publisher 61 223 16
Vernor and Hood publisher 52 185 10
Wilkie, John publisher 50 343 12
Walthoe, John I publisher 67 136 21
Richardson, William publisher 58 207 9
G. and T. Wilkie publisher 69 170 13
Kearsley, George publisher 69 351 16
Keith, George publisher 78 272 16
Walker, John publisher 58 117 9
Saunders, H. publisher 55 130 11
Clarke, William publisher 58 119 11
Davies, William publisher 52 269 12
Payne, Thomas publisher 54 181 13
Goldsmith, William publisher 60 84 9
Nicholson, John publisher 50 88 21
Motte, Benjamin publisher 61 92 10
Bew, John publisher 64 368 17
Robinson, Ranew publisher 50 89 10
Clarke, John publisher 70 232 18
Bathurst, Charles publisher 81 128 12
Ward, John publisher 78 145 14
Browne, Daniel Ii publisher 60 148 14
Newbery, Elizabeth Mrs publisher 50 141 7
Grierson, George publisher 53 188 14
Lintot, Henry publisher 70 141 8
Hinton, John publisher 52 82 10
Hett, Richard publisher 64 392 20
Scatcherd, James publisher 56 70 10
Ward, Aaron publisher 96 206 26
Horsfield, Robert publisher 57 80 9
Pemberton, John publisher 58 206 16
Woodfall, Henry publisher 70 94 8
Osborn, John Ii publisher 54 119 14
Brindley, John publisher 53 130 11
Clay, Francis publisher 83 99 25
Darby, John publisher 64 133 19
documents
Robinson, George I publisher 5,186 5,441 462
Cadell, Thomas publisher 5,474 5,139 1,115
Strahan, William publisher 6,605 4,869 1,098
Longman, Thomas publisher 6,283 3,990 1,086
Baldwin, Robert I publisher 6,193 3,769 874
Johnston, William publisher 5,505 3,623 744
Law, Bedwell publisher 5,365 3,564 591
Caslon, Thomas publisher 5,676 3,540 672
Millar, Andrew publisher 3,018 3,537 351
Cadell, Thomas Ii publisher 4,226 3,492 309
F. and C. Rivington publisher 3,379 3,454 294
Rivington, John publisher 4,675 3,299 903
Hitch, Charles publisher 4,659 3,162 967
Johnson, John publisher 2,971 3,075 143
Roberts, James publisher 1,297 3,030 92
Dodsley, James publisher 1,569 2,785 560
J. and F. Rivington publisher 5,223 2,775 685
Becket, Thomas publisher 3,307 2,751 428
Crowder, Stanley publisher 3,912 2,712 442
Smith, W. publisher 2,348 2,708 253
Faulkner, George publisher 1,798 2,694 548
Hawes, Lacy publisher 4,370 2,683 803
Byrne, P. publisher 1,659 2,680 164
J. Exshaw publisher 3,704 2,557 437
Lowndes, Thomas publisher 3,751 2,528 517
Bettesworth, Arthur publisher 3,520 2,508 361
Dilly, Charles publisher 3,382 2,483 310
Williams, J. publisher 2,754 2,469 618
Powell, S. publisher 1,951 2,418 201
G. G. and J. Robinson publisher 3,260 2,417 395
Strahan, Andrew publisher 2,049 2,401 217
Wogan, P. publisher 2,794 2,385 251
Innys, William publisher 1,737 2,332 110
J. and P. Knapton publisher 3,254 2,234 204
Moore, J. publisher 1,600 2,115 171
Risk, George publisher 2,617 2,090 262
E. and C. Dilly publisher 1,958 2,067 125
Bell, John publisher 2,352 2,067 320
Cooper, Mary Mrs publisher 2,232 2,057 232
Potts, J. publisher 2,268 2,043 325
Hodges, James Sir publisher 2,488 2,042 167
Tonson, Jacob I publisher 4,284 1,987 172
Crowder, Samuel publisher 4,154 1,982 439
Jones, W. publisher 1,534 1,976 382
J. and R. Tonson publisher 3,773 1,881 223
Lowndes, William publisher 3,160 1,878 352
Wilson, P. publisher 2,590 1,876 272
Sleater, W. publisher 1,700 1,861 250
Davies, Thomas publisher 3,571 1,857 361
Powell, S. publisher 1,758 1,835 192
Bladon, Samuel publisher 3,138 1,826 588
Nichols, John publisher 2,171 1,810 610
Osborne, Thomas Ii publisher 1,566 1,808 493
Donaldson, A. publisher 4,550 1,808 514
Johnson, John publisher 2,205 1,803 211
Richardson, Joseph publisher 2,035 1,794 277
Birt, Samuel publisher 2,769 1,775 140
J. F. and C. Rivington publisher 3,414 1,749 480
Ware, Richard I publisher 2,148 1,733 144
Walker, T. publisher 1,874 1,733 281
Harrison and Co publisher 2,263 1,714 241
Nicoll, William publisher 2,624 1,707 323
Gosling, Robert publisher 1,090 1,705 86
Chamberlaine, D. publisher 1,297 1,685 158
Buckland, James publisher 1,494 1,683 352
Midwinter, Daniel publisher 2,146 1,651 235
Ware, Catherine Mrs publisher 2,478 1,649 137
Wilson, W. publisher 2,283 1,607 119
Longman, Thomas publisher 2,707 1,600 184
Lintott, Barnaby Bernard publisher 2,022 1,588 328
Davis, Lockyer John publisher 1,753 1,570 365
Rivington, Charles publisher 1,295 1,544 95
Mears, William publisher 1,783 1,541 59
Vernor and Hood publisher 1,709 1,538 59
Wilkie, John publisher 1,133 1,533 73
Walthoe, John I publisher 1,533 1,484 107
Richardson, William publisher 2,513 1,466 170
G. and T. Wilkie publisher 2,831 1,455 202
Kearsley, George publisher 1,933 1,426 295
Keith, George publisher 2,167 1,389 144
Walker, John publisher 2,572 1,325 182
Saunders, H. publisher 1,225 1,305 227
Clarke, William publisher 1,934 1,300 180
Davies, William publisher 1,516 1,298 153
Payne, Thomas publisher 3,130 1,298 131
Goldsmith, William publisher 2,454 1,274 254
Nicholson, John publisher 1,080 1,229 142
Motte, Benjamin publisher 1,754 1,222 52
Bew, John publisher 2,464 1,218 200
Robinson, Ranew publisher 1,083 1,181 59
Clarke, John publisher 1,525 1,088 132
Bathurst, Charles publisher 3,115 1,071 463
Ward, John publisher 2,554 1,049 205
Browne, Daniel Ii publisher 1,793 1,000 113
Newbery, Elizabeth Mrs publisher 2,309 942 137
Grierson, George publisher 2,664 936 73
Lintot, Henry publisher 2,613 924 132
Hinton, John publisher 1,326 924 365
Hett, Richard publisher 1,032 907 145
Scatcherd, James publisher 2,419 904 184
Ward, Aaron publisher 1,716 865 189
Horsfield, Robert publisher 2,275 839 204
Pemberton, John publisher 1,496 802 109
Woodfall, Henry publisher 2,741 790 150
Osborn, John Ii publisher 1,724 785 87
Brindley, John publisher 1,508 626 95
Clay, Francis publisher 2,276 374 181
Darby, John publisher 1,570 348 170
pages
Robinson, George I publisher 1,852,735 1,703,202 152,990
Cadell, Thomas publisher 1,923,035 1,533,797 374,947
Strahan, William publisher 2,223,762 1,482,405 366,644
Longman, Thomas publisher 2,151,570 1,290,462 376,116
Baldwin, Robert I publisher 2,198,299 1,205,681 295,838
Johnston, William publisher 2,022,684 1,154,143 269,345
Law, Bedwell publisher 1,898,245 1,168,379 202,881
Caslon, Thomas publisher 1,746,599 1,019,840 169,876
Millar, Andrew publisher 1,106,781 1,019,811 103,630
Cadell, Thomas Ii publisher 1,532,521 1,077,625 102,436
F. and C. Rivington publisher 1,200,125 848,237 62,670
Rivington, John publisher 1,677,519 952,599 315,955
Hitch, Charles publisher 1,679,834 924,538 356,793
Johnson, John publisher 1,083,707 810,070 45,961
Roberts, James publisher 330,035 284,872 14,946
Dodsley, James publisher 475,991 769,746 155,973
J. and F. Rivington publisher 1,958,067 850,270 244,827
Becket, Thomas publisher 1,071,697 677,106 109,737
Crowder, Stanley publisher 1,308,686 868,411 156,221
Smith, W. publisher 563,190 607,392 46,378
Faulkner, George publisher 414,395 468,661 155,032
Hawes, Lacy publisher 1,593,319 797,761 268,217
Byrne, P. publisher 566,915 695,175 45,822
J. Exshaw publisher 912,365 634,780 104,280
Lowndes, Thomas publisher 1,125,863 625,525 94,955
Bettesworth, Arthur publisher 1,312,172 680,405 121,995
Dilly, Charles publisher 1,193,246 718,456 97,386
Williams, J. publisher 798,596 655,527 216,092
Powell, S. publisher 342,657 427,827 30,268
G. G. and J. Robinson publisher 1,262,298 817,240 145,616
Strahan, Andrew publisher 751,719 783,093 78,600
Wogan, P. publisher 793,709 628,096 71,225
Innys, William publisher 706,273 669,912 50,797
J. and P. Knapton publisher 1,257,675 715,857 88,938
Moore, J. publisher 577,855 622,757 68,884
Risk, George publisher 641,645 408,317 46,347
E. and C. Dilly publisher 726,445 529,597 41,533
Bell, John publisher 359,019 339,855 43,276
Cooper, Mary Mrs publisher 772,444 375,228 71,223
Potts, J. publisher 588,490 498,298 84,973
Hodges, James Sir publisher 876,704 552,919 51,409
Tonson, Jacob I publisher 1,289,964 408,729 25,401
Crowder, Samuel publisher 1,511,266 686,205 152,022
Jones, W. publisher 460,346 494,068 100,237
J. and R. Tonson publisher 1,154,142 444,654 19,641
Lowndes, William publisher 958,062 474,887 78,275
Wilson, P. publisher 594,576 419,824 45,390
Sleater, W. publisher 459,521 443,016 66,073
Davies, Thomas publisher 1,218,264 500,029 92,530
Powell, S. publisher 390,958 296,485 40,135
Bladon, Samuel publisher 782,157 391,761 141,788
Nichols, John publisher 731,427 501,098 206,078
Osborne, Thomas Ii publisher 669,777 615,210 200,673
Donaldson, A. publisher 1,311,705 554,213 155,068
Johnson, John publisher 822,874 580,469 70,063
Richardson, Joseph publisher 740,391 546,232 102,450
Birt, Samuel publisher 1,078,551 519,378 60,110
J. F. and C. Rivington publisher 1,150,623 461,222 158,276
Ware, Richard I publisher 772,511 501,768 52,429
Walker, T. publisher 546,668 464,911 98,672
Harrison and Co publisher 514,512 404,144 48,300
Nicoll, William publisher 670,204 377,237 49,154
Gosling, Robert publisher 433,197 542,626 41,792
Chamberlaine, D. publisher 301,094 411,884 23,820
Buckland, James publisher 525,912 411,005 106,942
Midwinter, Daniel publisher 937,940 484,980 107,569
Ware, Catherine Mrs publisher 822,709 517,758 60,864
Wilson, W. publisher 647,210 423,109 29,152
Longman, Thomas publisher 1,100,557 476,036 82,036
Lintott, Barnaby Bernard publisher 631,004 313,009 100,418
Davis, Lockyer John publisher 653,280 455,108 132,591
Rivington, Charles publisher 595,882 422,355 47,805
Mears, William publisher 653,958 413,807 24,410
Vernor and Hood publisher 612,979 491,474 22,078
Wilkie, John publisher 395,362 401,079 15,329
Walthoe, John I publisher 588,401 451,991 56,240
Richardson, William publisher 945,329 482,125 62,001
G. and T. Wilkie publisher 1,005,105 430,375 60,045
Kearsley, George publisher 618,931 303,646 51,288
Keith, George publisher 808,693 438,661 39,557
Walker, John publisher 958,726 461,104 57,629
Saunders, H. publisher 295,874 312,485 64,222
Clarke, William publisher 680,662 350,073 63,118
Davies, William publisher 557,528 452,652 61,664
Payne, Thomas publisher 1,205,284 450,713 36,690
Goldsmith, William publisher 881,412 465,133 80,952
Nicholson, John publisher 415,342 373,346 64,306
Motte, Benjamin publisher 658,914 312,949 24,067
Bew, John publisher 813,582 288,182 52,396
Robinson, Ranew publisher 444,847 317,830 26,649
Clarke, John publisher 550,145 325,767 46,256
Bathurst, Charles publisher 1,113,717 316,166 188,003
Ward, John publisher 936,219 362,393 68,545
Browne, Daniel Ii publisher 681,391 353,489 53,637
Newbery, Elizabeth Mrs publisher 783,393 295,656 39,809
Grierson, George publisher 723,733 164,831 8,649
Lintot, Henry publisher 890,530 323,730 43,163
Hinton, John publisher 609,489 316,167 139,366
Hett, Richard publisher 407,236 207,572 56,082
Scatcherd, James publisher 807,026 284,784 59,147
Ward, Aaron publisher 759,068 275,274 73,603
Horsfield, Robert publisher 868,257 263,991 60,757
Pemberton, John publisher 714,359 230,766 53,810
Woodfall, Henry publisher 934,687 325,876 51,640
Osborn, John Ii publisher 585,892 266,273 37,537
Brindley, John publisher 495,443 166,988 14,033
Clay, Francis publisher 875,395 128,369 58,600
Darby, John publisher 585,774 88,820 55,938

In total, 19 roles, 10698 actors.

library(gghsci)
actor_split %>%
  filter(set=="test") %>%
  count(actor_role, ecco_id) %>%
  count(actor_role, n) %>%
  ggplot(aes(x=n,y=nn)) +
  geom_col() +
  theme_hsci_discrete() +
  ylab("ECCO documents") +
  xlab("Number of actors attached") +
  ggtitle("Test set label count distribution by actor role") +
  facet_wrap(~actor_role, scales="free")
Storing counts in `nn`, as `n` already present in input
ℹ Use `name = "new_name"` to pick a new name.

LS0tCnRpdGxlOiAiRUNDTyBtdWx0aS10YXJnZXQgc3BsaXQgY3JlYXRpb24iCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2M6IHllcyAgCiAgd29yZF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICBrZWVwX21kOiB5ZXMgIAotLS0KCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZWNjb3IpCmxpYnJhcnkoZXN0Y3IpCmVjY29fY29yZSA8LSBsb2FkX2VjY29fY29yZSgpCmVzdGNfY29yZSA8LSBsb2FkX2VzdGNfY29yZSgpCmVzdGNfYWN0b3JfbGlua3MgPC0gbG9hZF9lc3RjX2FjdG9yX2xpbmtzKCkKZXN0Y19hY3RvcnMgPC0gbG9hZF9lc3RjX2FjdG9ycygpCndvcmtzIDwtIGVjY29fY29yZSAlPiUgCiAgbGVmdF9qb2luKGVzdGNfY29yZSwgam9pbl9ieShlc3RjX2lkKSkgJT4lCiAgcmVwbGFjZV9uYShsaXN0KHdvcmtfaWQ9InVua25vd24gd29yayIsIHB1YmxpY2F0aW9uX3BsYWNlPSJ1bmtub3duIHBsYWNlIG9mIHB1YmxpY2F0aW9uIikpICU+JQogIGdyb3VwX2J5KHdvcmtfaWQpICU+JQogIHN1bW1hcmlzZSgKICAgIGVhcmxpZXN0X3B1YmxpY2F0aW9uX3llYXI9bWluKHB1YmxpY2F0aW9uX3llYXIpLAogICAgZWNjb19wYXJ0cz1zdHJfZmxhdHRlbihzb3J0KHVuaXF1ZShlY2NvX3BhcnQpKSwgY29sbGFwc2UgPSAifCIpLAogICAgZWNjb19sYW5ndWFnZXM9c3RyX2ZsYXR0ZW4oc29ydCh1bmlxdWUoZWNjb19sYW5ndWFnZSkpLCBjb2xsYXBzZSA9ICJ8IiksCiAgICBoYXNfcHJpY2VzPWFsbCghaXMubmEodG90YWxfcHJpY2UpKSwKICAgIHBsYWNlc19vZl9wdWJsaWNhdGlvbj1zdHJfZmxhdHRlbihzb3J0KHVuaXF1ZShwdWJsaWNhdGlvbl9wbGFjZSkpLCBjb2xsYXBzZSA9ICJ8IiksCiAgICBlY2NvX21vZHVsZXM9c3RyX2ZsYXR0ZW4oc29ydCh1bmlxdWUoZWNjb19tb2R1bGUpKSwgY29sbGFwc2UgPSAifCIpLCAuZ3JvdXBzPSJkcm9wIikgJT4lIAogIG11dGF0ZShlYXJsaWVzdF9wdWJsaWNhdGlvbl9kZWNhZGU9Zmxvb3IoZWFybGllc3RfcHVibGljYXRpb25feWVhci8xMCkqMTApICU+JQogIHNlbGVjdCh3b3JrX2lkLCBlYXJsaWVzdF9wdWJsaWNhdGlvbl9kZWNhZGUsIGVjY29fcGFydHMsIGVjY29fbW9kdWxlcywgZWNjb19sYW5ndWFnZXMsIHBsYWNlc19vZl9wdWJsaWNhdGlvbiwgaGFzX3ByaWNlcykKCmVjY29faWRzX3RvX3dvcmtzIDwtIGVjY29fY29yZSAlPiUgCiAgbGVmdF9qb2luKGVzdGNfY29yZSwgam9pbl9ieShlc3RjX2lkKSkgJT4lCiAgcmVwbGFjZV9uYShsaXN0KHdvcmtfaWQ9InVua25vd24gd29yayIpKSAlPiUKICBzZWxlY3QoZWNjb19pZCwgd29ya19pZCkKYGBgCgpgYGB7cn0KZWNjb190ZXN0IDwtIHdvcmtzICU+JQogIGdyb3VwX2J5KGVjY29fcGFydHMsIGVjY29fbW9kdWxlcywgZWFybGllc3RfcHVibGljYXRpb25fZGVjYWRlLCBlY2NvX2xhbmd1YWdlcywgcGxhY2VzX29mX3B1YmxpY2F0aW9uLCBoYXNfcHJpY2VzKSAlPiUKICBzbGljZV9zYW1wbGUocHJvcD0wLjEpICU+JSAjIHNlbGVjdCBhdCBtb3N0IDEwJSBvZiB0aGUgd29ya3MKICBzbGljZV9zYW1wbGUobj01KSAlPiUgIyBmaWx0ZXIgZG93biB0byBtYXggNSBwZXIgZ3JvdXAKICBncm91cF9ieShlY2NvX21vZHVsZXMsIGVjY29fbGFuZ3VhZ2VzKSAlPiUKICBzbGljZV9zYW1wbGUobj0xMDAwKSAlPiUKICBncm91cF9ieShwbGFjZXNfb2ZfcHVibGljYXRpb24sIGVjY29fbGFuZ3VhZ2VzKSAlPiUKICBzbGljZV9zYW1wbGUobj0xMDAwKSAlPiUKICBncm91cF9ieShoYXNfcHJpY2VzLCBlY2NvX2xhbmd1YWdlcykgJT4lCiAgc2xpY2Vfc2FtcGxlKG49MTAwMCkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNsaWNlX3NhbXBsZShuPTEwMDApICU+JSAjIGl0ZXJhdGl2ZWx5IHBhcmUgZG93biBmdXJ0aGVyCiAgaW5uZXJfam9pbihlY2NvX2lkc190b193b3JrcykgJT4lCiAgc2VsZWN0KGVjY29faWQsIHdvcmtfaWQpCgplY2NvX3ZhbCA8LSB3b3JrcyAlPiUKICBhbnRpX2pvaW4oZWNjb190ZXN0KSAlPiUKICBncm91cF9ieShlY2NvX3BhcnRzLCBlY2NvX21vZHVsZXMsIGVhcmxpZXN0X3B1YmxpY2F0aW9uX2RlY2FkZSwgZWNjb19sYW5ndWFnZXMsIHBsYWNlc19vZl9wdWJsaWNhdGlvbiwgaGFzX3ByaWNlcykgJT4lCiAgc2xpY2Vfc2FtcGxlKHByb3A9MC4xKSAlPiUgIyBzZWxlY3QgYXQgbW9zdCAxMCUgb2YgdGhlIHdvcmtzCiAgc2xpY2Vfc2FtcGxlKG49NSkgJT4lICMgZmlsdGVyIGRvd24gdG8gbWF4IDUgcGVyIGdyb3VwCiAgZ3JvdXBfYnkoZWNjb19tb2R1bGVzLCBlY2NvX2xhbmd1YWdlcykgJT4lCiAgc2xpY2Vfc2FtcGxlKG49MTAwMCkgJT4lCiAgZ3JvdXBfYnkocGxhY2VzX29mX3B1YmxpY2F0aW9uLCBlY2NvX2xhbmd1YWdlcykgJT4lCiAgc2xpY2Vfc2FtcGxlKG49MTAwMCkgJT4lCiAgZ3JvdXBfYnkoaGFzX3ByaWNlcywgZWNjb19sYW5ndWFnZXMpICU+JQogIHNsaWNlX3NhbXBsZShuPTEwMDApICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzbGljZV9zYW1wbGUobj0xMDAwKSAlPiUgIyBpdGVyYXRpdmVseSBwYXJlIGRvd24gZnVydGhlcgogIGlubmVyX2pvaW4oZWNjb19pZHNfdG9fd29ya3MpICU+JQogIHNlbGVjdChlY2NvX2lkLCB3b3JrX2lkKQoKZWNjb190cmFpbiA8LSB3b3JrcyAlPiUKICBhbnRpX2pvaW4oZWNjb190ZXN0KSAlPiUKICBhbnRpX2pvaW4oZWNjb192YWwpICU+JQogIGlubmVyX2pvaW4oZWNjb19pZHNfdG9fd29ya3MpICU+JQogIHNlbGVjdChlY2NvX2lkLCB3b3JrX2lkKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGhlcmUpCmVjY29fdGVzdCA8LSByZWFkX3RzdihoZXJlKCJkYXRhL291dHB1dC9lY2NvX3Rlc3Rfc3BsaXRfYnlfcGFydF9tb2R1bGVfbGFuZ3VhZ2VfcHJpY2VfcHVibGljYXRpb25fcGxhY2VfYW5kX2RlY2FkZS50c3YiKSkKZWNjb192YWwgPC0gcmVhZF90c3YoaGVyZSgiZGF0YS9vdXRwdXQvZWNjb192YWxfc3BsaXRfYnlfcGFydF9tb2R1bGVfbGFuZ3VhZ2VfcHJpY2VfcHVibGljYXRpb25fcGxhY2VfYW5kX2RlY2FkZS50c3YiKSkKZWNjb190cmFpbiA8LSByZWFkX3RzdihoZXJlKCJkYXRhL291dHB1dC9lY2NvX3RyYWluX3NwbGl0X2J5X3BhcnRfbW9kdWxlX2xhbmd1YWdlX3ByaWNlX3B1YmxpY2F0aW9uX3BsYWNlX2FuZF9kZWNhZGUudHN2IikpCmBgYAoKYGBge3J9CnRhcmdldHMgPC0gZWNjb19jb3JlICU+JQogIGxlZnRfam9pbihlc3RjX2NvcmUsIGpvaW5fYnkoZXN0Y19pZCkpICU+JQogIGxlZnRfam9pbihlc3RjX2NvcmUgJT4lIAogICAgICAgICAgICAgIGdyb3VwX2J5KHdvcmtfaWQpICU+JSAKICAgICAgICAgICAgICBmaWx0ZXIocHVibGljYXRpb25feWVhcj09bWluKHB1YmxpY2F0aW9uX3llYXIpKSAlPiUKICAgICAgICAgICAgICBzdW1tYXJpc2UoZWFybGllc3RfcHVibGljYXRpb25feWVhcj1taW4ocHVibGljYXRpb25feWVhciksIGVhcmxpZXN0X3B1YmxpY2F0aW9uX3llYXJfZGVmaW5pdGUgPSAhYW55KHVuY2VydGFpbiB8IGNpcmNhIHwgcmFuZ2UpKQogICAgICAgICAgICAgICwgam9pbl9ieSh3b3JrX2lkKQogICAgICAgICAgICApICU+JQogIHRyYW5zbXV0ZShlY2NvX2lkLCBlY2NvX3BhcnQsIGVjY29fbW9kdWxlLCBwdWJsaWNhdGlvbl95ZWFyLCBwdWJsaWNhdGlvbl95ZWFyX2RlZmluaXRlID0gIShpcy5uYShwdWJsaWNhdGlvbl95ZWFyKSB8IHVuY2VydGFpbiB8IGNpcmNhIHwgcmFuZ2UpLCBlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyLCBlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyX2RlZmluaXRlLCBwcmltYXJ5X2xhbmd1YWdlLCB0b3RhbF9wcmljZSwgcHVibGljYXRpb25fcGxhY2UsIHB1YmxpY2F0aW9uX2NvdW50cnksIHB1YmxpY2F0aW9uX3BsYWNlX2RlZHVjZWQ9b3JnXzI2MF9hX3NxdWFyZV9icmFja2V0cywgcGFnZXM9ZWNjb19wYWdlcywgZXN0Y19pZCkKCmVjY29fdGVzdCA8LSBlY2NvX3Rlc3QgJT4lIGxlZnRfam9pbih0YXJnZXRzLCBqb2luX2J5KGVjY29faWQpKQplY2NvX3ZhbCA8LSBlY2NvX3ZhbCAlPiUgbGVmdF9qb2luKHRhcmdldHMsIGpvaW5fYnkoZWNjb19pZCkpCmVjY29fdHJhaW4gPC0gZWNjb190cmFpbiAlPiUgbGVmdF9qb2luKHRhcmdldHMsIGpvaW5fYnkoZWNjb19pZCkpCnNwbGl0IDwtIGVjY29fdGVzdCAlPiUgCiAgbXV0YXRlKHNldD0idGVzdCIpICU+JQogIHVuaW9uX2FsbCgKICAgIGVjY29fdmFsICU+JSAKICAgICAgbXV0YXRlKHNldD0idmFsIikKICApICU+JQogIHVuaW9uX2FsbCgKICAgIGVjY29fdHJhaW4gJT4lIAogICAgICBtdXRhdGUoc2V0PSJ0cmFpbiIpCiAgKQpgYGAKCmBgYHtyfQp0b19tb3ZlX3B1YmxpY2F0aW9uX3llYXIgPC0gc3BsaXQgJT4lIAogIGZpbHRlcihzZXQ9PSJ0cmFpbiIpICU+JSAKICBncm91cF9ieShwdWJsaWNhdGlvbl95ZWFyX2RlZmluaXRlLCBwdWJsaWNhdGlvbl95ZWFyKSAlPiUgCiAgc3VtbWFyaXNlKHdvcmtzPW5fZGlzdGluY3Qod29ya19pZCksIC5ncm91cHM9ImRyb3AiKSAlPiUKICBhbnRpX2pvaW4oc3BsaXQgJT4lIAogICAgICAgICAgICAgIGZpbHRlcihzZXQhPSJ0cmFpbiIpICU+JSAKICAgICAgICAgICAgICBncm91cF9ieShwdWJsaWNhdGlvbl95ZWFyX2RlZmluaXRlLCBwdWJsaWNhdGlvbl95ZWFyKSAlPiUgCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHdvcmtzPW5fZGlzdGluY3Qod29ya19pZCksIC5ncm91cHM9ImRyb3AiKSAlPiUKICAgICAgICAgICAgICBmaWx0ZXIod29ya3M+PTUpLCBqb2luX2J5KHB1YmxpY2F0aW9uX3llYXJfZGVmaW5pdGUsIHB1YmxpY2F0aW9uX3llYXIpKSAlPiUKICBmaWx0ZXIod29ya3M+PTEwKSAlPiUKICBpbm5lcl9qb2luKHNwbGl0ICU+JSAKICAgIGZpbHRlcihzZXQ9PSJ0cmFpbiIpKSAlPiUKICBkaXN0aW5jdChwdWJsaWNhdGlvbl95ZWFyX2RlZmluaXRlLCBwdWJsaWNhdGlvbl95ZWFyLCB3b3JrX2lkKSAlPiUgCiAgZ3JvdXBfYnkocHVibGljYXRpb25feWVhcl9kZWZpbml0ZSwgcHVibGljYXRpb25feWVhcikgJT4lCiAgc2xpY2Vfc2FtcGxlKG49NSkKCnRvX21vdmVfcHVibGljYXRpb25feWVhcl92YWwgPC0gdG9fbW92ZV9wdWJsaWNhdGlvbl95ZWFyICU+JQogIHNsaWNlX3NhbXBsZShuPTIpICU+JQogIG11dGF0ZShuZXdfc2V0PSJ2YWwiKQoKdG9fbW92ZV9wdWJsaWNhdGlvbl95ZWFyIDwtIHRvX21vdmVfcHVibGljYXRpb25feWVhciAlPiUKICBhbnRpX2pvaW4odG9fbW92ZV9wdWJsaWNhdGlvbl95ZWFyX3ZhbCkgJT4lCiAgbXV0YXRlKG5ld19zZXQ9InRlc3QiKSAlPiUKICB1bmlvbl9hbGwodG9fbW92ZV9wdWJsaWNhdGlvbl95ZWFyX3ZhbCkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCh3b3JrX2lkLCBuZXdfc2V0KQogIAp0b19tb3ZlX2VhcmxpZXN0X3B1YmxpY2F0aW9uX3llYXIgPC0gc3BsaXQgJT4lIAogIGZpbHRlcihzZXQ9PSJ0cmFpbiIpICU+JSAKICBncm91cF9ieShlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyX2RlZmluaXRlLCBlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyKSAlPiUgCiAgc3VtbWFyaXNlKHdvcmtzPW5fZGlzdGluY3Qod29ya19pZCksIC5ncm91cHM9ImRyb3AiKSAlPiUKICBhbnRpX2pvaW4oc3BsaXQgJT4lIAogICAgICAgICAgICAgIGZpbHRlcihzZXQhPSJ0cmFpbiIpICU+JSAKICAgICAgICAgICAgICBncm91cF9ieShlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyX2RlZmluaXRlLCBlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyKSAlPiUgCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHdvcmtzPW5fZGlzdGluY3Qod29ya19pZCksIC5ncm91cHM9ImRyb3AiKSAlPiUKICAgICAgICAgICAgICBmaWx0ZXIod29ya3M+PTUpLCBqb2luX2J5KGVhcmxpZXN0X3B1YmxpY2F0aW9uX3llYXJfZGVmaW5pdGUsIGVhcmxpZXN0X3B1YmxpY2F0aW9uX3llYXIpKSAlPiUKICBmaWx0ZXIod29ya3M+PTEwKSAlPiUKICBpbm5lcl9qb2luKHNwbGl0ICU+JSAKICAgIGZpbHRlcihzZXQ9PSJ0cmFpbiIpKSAlPiUKICBkaXN0aW5jdChlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyX2RlZmluaXRlLCBlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyLCB3b3JrX2lkKSAlPiUgCiAgZ3JvdXBfYnkoZWFybGllc3RfcHVibGljYXRpb25feWVhcl9kZWZpbml0ZSwgZWFybGllc3RfcHVibGljYXRpb25feWVhcikgJT4lCiAgc2xpY2Vfc2FtcGxlKG49NSkKCnRvX21vdmVfZWFybGllc3RfcHVibGljYXRpb25feWVhcl92YWwgPC0gdG9fbW92ZV9lYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyICU+JQogIHNsaWNlX3NhbXBsZShuPTIpICU+JQogIG11dGF0ZShuZXdfc2V0PSJ2YWwiKQoKdG9fbW92ZV9lYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyIDwtIHRvX21vdmVfZWFybGllc3RfcHVibGljYXRpb25feWVhciAlPiUKICBhbnRpX2pvaW4odG9fbW92ZV9lYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyX3ZhbCkgJT4lCiAgbXV0YXRlKG5ld19zZXQ9InRlc3QiKSAlPiUKICB1bmlvbl9hbGwodG9fbW92ZV9lYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyX3ZhbCkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCh3b3JrX2lkLCBuZXdfc2V0KQoKdG9fbW92ZV9wcmltYXJ5X2xhbmd1YWdlIDwtIHNwbGl0ICU+JSAKICBmaWx0ZXIoc2V0PT0idHJhaW4iKSAlPiUgCiAgZ3JvdXBfYnkocHJpbWFyeV9sYW5ndWFnZSkgJT4lIAogIHN1bW1hcmlzZSh3b3Jrcz1uX2Rpc3RpbmN0KHdvcmtfaWQpLCAuZ3JvdXBzPSJkcm9wIikgJT4lCiAgYW50aV9qb2luKHNwbGl0ICU+JSAKICAgICAgICAgICAgICBmaWx0ZXIoc2V0IT0idHJhaW4iKSAlPiUgCiAgICAgICAgICAgICAgZ3JvdXBfYnkocHJpbWFyeV9sYW5ndWFnZSkgJT4lIAogICAgICAgICAgICAgIHN1bW1hcmlzZSh3b3Jrcz1uX2Rpc3RpbmN0KHdvcmtfaWQpLCAuZ3JvdXBzPSJkcm9wIikgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKHdvcmtzPj01KSwgam9pbl9ieShwcmltYXJ5X2xhbmd1YWdlKSkgJT4lCiAgZmlsdGVyKHdvcmtzPj0xMCkgJT4lCiAgaW5uZXJfam9pbihzcGxpdCAlPiUgCiAgICBmaWx0ZXIoc2V0PT0idHJhaW4iKSkgJT4lCiAgZGlzdGluY3QocHJpbWFyeV9sYW5ndWFnZSwgd29ya19pZCkgJT4lIAogIGdyb3VwX2J5KHByaW1hcnlfbGFuZ3VhZ2UpICU+JQogIHNsaWNlX3NhbXBsZShuPTUpCgp0b19tb3ZlX3ByaW1hcnlfbGFuZ3VhZ2VfdmFsIDwtIHRvX21vdmVfcHJpbWFyeV9sYW5ndWFnZSAlPiUKICBzbGljZV9zYW1wbGUobj0yKSAlPiUKICBtdXRhdGUobmV3X3NldD0idmFsIikKCnRvX21vdmVfcHJpbWFyeV9sYW5ndWFnZSA8LSB0b19tb3ZlX3ByaW1hcnlfbGFuZ3VhZ2UgJT4lCiAgYW50aV9qb2luKHRvX21vdmVfcHJpbWFyeV9sYW5ndWFnZV92YWwpICU+JQogIG11dGF0ZShuZXdfc2V0PSJ0ZXN0IikgJT4lCiAgdW5pb25fYWxsKHRvX21vdmVfcHJpbWFyeV9sYW5ndWFnZV92YWwpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3Qod29ya19pZCwgbmV3X3NldCkKCnRvX21vdmVfcHVibGljYXRpb25fcGxhY2UgPC0gc3BsaXQgJT4lIAogIGZpbHRlcihzZXQ9PSJ0cmFpbiIpICU+JSAKICBncm91cF9ieShwdWJsaWNhdGlvbl9wbGFjZV9kZWR1Y2VkLCAgcHVibGljYXRpb25fcGxhY2UpICU+JSAKICBzdW1tYXJpc2Uod29ya3M9bl9kaXN0aW5jdCh3b3JrX2lkKSwgLmdyb3Vwcz0iZHJvcCIpICU+JQogIGFudGlfam9pbihzcGxpdCAlPiUgCiAgICAgICAgICAgICAgZmlsdGVyKHNldCE9InRyYWluIikgJT4lIAogICAgICAgICAgICAgIGdyb3VwX2J5KHB1YmxpY2F0aW9uX3BsYWNlX2RlZHVjZWQsICBwdWJsaWNhdGlvbl9wbGFjZSkgJT4lIAogICAgICAgICAgICAgIHN1bW1hcmlzZSh3b3Jrcz1uX2Rpc3RpbmN0KHdvcmtfaWQpLCAuZ3JvdXBzPSJkcm9wIikgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKHdvcmtzPj01KSwgam9pbl9ieShwdWJsaWNhdGlvbl9wbGFjZV9kZWR1Y2VkLCAgcHVibGljYXRpb25fcGxhY2UpKSAlPiUKICBmaWx0ZXIod29ya3M+PTEwKSAlPiUKICBpbm5lcl9qb2luKHNwbGl0ICU+JSAKICAgIGZpbHRlcihzZXQ9PSJ0cmFpbiIpKSAlPiUKICBkaXN0aW5jdChwdWJsaWNhdGlvbl9wbGFjZV9kZWR1Y2VkLCAgcHVibGljYXRpb25fcGxhY2UsIHdvcmtfaWQpICU+JSAKICBncm91cF9ieShwdWJsaWNhdGlvbl9wbGFjZV9kZWR1Y2VkLCAgcHVibGljYXRpb25fcGxhY2UpICU+JQogIHNsaWNlX3NhbXBsZShuPTUpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3Qod29ya19pZCkKCnRvX21vdmVfcHVibGljYXRpb25fcGxhY2VfdmFsIDwtIHRvX21vdmVfcHVibGljYXRpb25fcGxhY2UgJT4lCiAgc2xpY2Vfc2FtcGxlKG49MikgJT4lCiAgbXV0YXRlKG5ld19zZXQ9InZhbCIpCgp0b19tb3ZlX3B1YmxpY2F0aW9uX3BsYWNlIDwtIHRvX21vdmVfcHVibGljYXRpb25fcGxhY2UgJT4lCiAgYW50aV9qb2luKHRvX21vdmVfcHVibGljYXRpb25fcGxhY2VfdmFsKSAlPiUKICBtdXRhdGUobmV3X3NldD0idGVzdCIpICU+JQogIHVuaW9uX2FsbCh0b19tb3ZlX3B1YmxpY2F0aW9uX3BsYWNlX3ZhbCkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCh3b3JrX2lkLCBuZXdfc2V0KQoKZCA8LSBzcGxpdCAlPiUgCiAgbGVmdF9qb2luKGVzdGNfYWN0b3JfbGlua3MpICU+JSAKICBzZWxlY3Qoc2V0LCB3b3JrX2lkLCBhY3Rvcl9pZCwgYWN0b3Jfcm9sZXNfYWxsKSAlPiUgCiAgc2VwYXJhdGVfcm93cyhhY3Rvcl9yb2xlc19hbGwsIHNlcD0iOyAiKSAlPiUKICBkaXN0aW5jdCgpCgp0b19tb3ZlX2FjdG9yIDwtIGQgJT4lCiAgZmlsdGVyKHNldD09InRyYWluIikgJT4lIAogIGdyb3VwX2J5KGFjdG9yX2lkLGFjdG9yX3JvbGVzX2FsbCkgJT4lIAogIHN1bW1hcmlzZSh3b3Jrcz1uX2Rpc3RpbmN0KHdvcmtfaWQpLCAuZ3JvdXBzPSJkcm9wIikgJT4lCiAgYW50aV9qb2luKGQgJT4lIAogICAgICAgICAgICAgIGZpbHRlcihzZXQhPSJ0cmFpbiIpICU+JSAKICAgICAgICAgICAgICBncm91cF9ieShhY3Rvcl9yb2xlc19hbGwsIGFjdG9yX2lkKSAlPiUgCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHdvcmtzPW5fZGlzdGluY3Qod29ya19pZCksIC5ncm91cHM9ImRyb3AiKSAlPiUKICAgICAgICAgICAgICBmaWx0ZXIod29ya3M+PTUpLCBqb2luX2J5KGFjdG9yX2lkKSkgJT4lCiAgZmlsdGVyKHdvcmtzPj01MCkgJT4lCiAgaW5uZXJfam9pbihkICU+JSAKICAgIGZpbHRlcihzZXQ9PSJ0cmFpbiIpKSAlPiUKICBkaXN0aW5jdChhY3Rvcl9pZCwgd29ya19pZCkgJT4lIAogIGdyb3VwX2J5KGFjdG9yX2lkKSAlPiUKICBzbGljZV9zYW1wbGUobj03KQoKdG9fbW92ZV9hY3Rvcl92YWwgPC0gdG9fbW92ZV9hY3RvciAlPiUKICBzbGljZV9zYW1wbGUobj0yKSAlPiUKICBtdXRhdGUobmV3X3NldD0idmFsIikKCnRvX21vdmVfYWN0b3IgPC0gdG9fbW92ZV9hY3RvciAlPiUKICBhbnRpX2pvaW4odG9fbW92ZV9hY3Rvcl92YWwpICU+JQogIG11dGF0ZShuZXdfc2V0PSJ0ZXN0IikgJT4lCiAgdW5pb25fYWxsKHRvX21vdmVfYWN0b3JfdmFsKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KHdvcmtfaWQsIG5ld19zZXQpCgp0b19tb3ZlIDwtIHRvX21vdmVfZWFybGllc3RfcHVibGljYXRpb25feWVhciAlPiUgCiAgdW5pb24odG9fbW92ZV9wdWJsaWNhdGlvbl95ZWFyKSAlPiUKICB1bmlvbih0b19tb3ZlX3ByaW1hcnlfbGFuZ3VhZ2UpICU+JQogIHVuaW9uKHRvX21vdmVfcHVibGljYXRpb25fcGxhY2UpICU+JQogIHVuaW9uKHRvX21vdmVfYWN0b3IpICU+JQogIGdyb3VwX2J5KHdvcmtfaWQpICU+JQogIHN1bW1hcmlzZShuZXdfc2V0PWlmX2Vsc2UoYW55KG5ld19zZXQ9PSJ0ZXN0IiksInRlc3QiLCAidmFsIikpCgpzcGxpdCA8LSBzcGxpdCAlPiUKICBsZWZ0X2pvaW4odG9fbW92ZSwgam9pbl9ieSh3b3JrX2lkKSkgJT4lCiAgbXV0YXRlKHNldD1jb2FsZXNjZShuZXdfc2V0LHNldCkpICU+JQogIHNlbGVjdCgtbmV3X3NldCkKYGBgCgpgYGB7cn0Kc3NwbGl0IDwtIHNwbGl0CndoaWxlIChUUlVFKSB7CiAgYmFkX3Rlc3QgPC0gc3BsaXQgJT4lCiAgICBmaWx0ZXIoc2V0IT0idHJhaW4iLCBwdWJsaWNhdGlvbl95ZWFyPDE3MDAgfCBwdWJsaWNhdGlvbl95ZWFyPjE4MDAgfCBlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyPjE4MDApICU+JQogICAgdW5pb24oc3BsaXQgJT4lCiAgICAgIGZpbHRlcihzZXQhPSJ0cmFpbiIpICU+JSAKICAgICAgYW50aV9qb2luKHNwbGl0ICU+JSBmaWx0ZXIoc2V0PT0idHJhaW4iKSwgam9pbl9ieShwdWJsaWNhdGlvbl9wbGFjZSkpCiAgICApICU+JQogICAgdW5pb24oc3BsaXQgJT4lCiAgICAgIGZpbHRlcihzZXQhPSJ0cmFpbiIpICU+JSAKICAgICAgYW50aV9qb2luKHNwbGl0ICU+JSBmaWx0ZXIoc2V0PT0idHJhaW4iKSwgam9pbl9ieShwdWJsaWNhdGlvbl9jb3VudHJ5KSkKICAgICkgJT4lCiAgICB1bmlvbihzcGxpdCAlPiUKICAgICAgZmlsdGVyKHNldCE9InRyYWluIikgJT4lIAogICAgICBhbnRpX2pvaW4oc3BsaXQgJT4lIGZpbHRlcihzZXQ9PSJ0cmFpbiIpLCBqb2luX2J5KHByaW1hcnlfbGFuZ3VhZ2UpKQogICAgKSAlPiUKICAgIHVuaW9uKHNwbGl0ICU+JQogICAgICBmaWx0ZXIoc2V0IT0idHJhaW4iKSAlPiUgCiAgICAgIGFudGlfam9pbihzcGxpdCAlPiUgZmlsdGVyKHNldD09InRyYWluIiksIGpvaW5fYnkocHVibGljYXRpb25fY291bnRyeSkpCiAgICApICU+JQogICAgZGlzdGluY3Qod29ya19pZCkgJT4lCiAgICBtdXRhdGUobmV3X3NldD0idHJhaW4iKQogIG9sZF9zcGxpdCA8LSBzcGxpdAogIHNwbGl0IDwtIHNwbGl0ICU+JQogICAgbGVmdF9qb2luKGJhZF90ZXN0LCBqb2luX2J5KHdvcmtfaWQpKSAlPiUKICAgIG11dGF0ZShzZXQ9Y29hbGVzY2UobmV3X3NldCxzZXQpKSAlPiUKICAgIHNlbGVjdCgtbmV3X3NldCkKICBpZiAoYWxsKG9sZF9zcGxpdCRzZXQ9PXNwbGl0JHNldCkpIGJyZWFrCn0KYGBgCgoKYGBge3J9Cm1ham9yX3ByaW1hcnlfbGFuZ3VhZ2UgPC0gc3BsaXQgJT4lIAogIGZpbHRlcihzZXQ9PSJ0ZXN0IikgJT4lIAogIGdyb3VwX2J5KHByaW1hcnlfbGFuZ3VhZ2UpICU+JSAKICBzdW1tYXJpc2Uod29ya3M9bl9kaXN0aW5jdCh3b3JrX2lkKSwgZG9jdW1lbnRzPW4oKSwgcGFnZXM9c3VtKHBhZ2VzKSkgJT4lCiAgdHJhbnNtdXRlKHByaW1hcnlfbGFuZ3VhZ2UsbWFqb3JfcHJpbWFyeV9sYW5ndWFnZT1pZl9lbHNlKGlzLm5hKHByaW1hcnlfbGFuZ3VhZ2UpIHwgd29ya3M+PTEwLHByaW1hcnlfbGFuZ3VhZ2UsICJPdGhlciIpKQoKc3BsaXQgPC0gc3BsaXQgJT4lCiAgbGVmdF9qb2luKG1ham9yX3ByaW1hcnlfbGFuZ3VhZ2UpCgptYWpvcl9wdWJsaWNhdGlvbl9wbGFjZSA8LSBzcGxpdCAlPiUKICBmaWx0ZXIoc2V0PT0idGVzdCIpICU+JSAKICBncm91cF9ieShwdWJsaWNhdGlvbl9wbGFjZSkgJT4lIAogIHN1bW1hcmlzZSh3b3Jrcz1uX2Rpc3RpbmN0KHdvcmtfaWQpLCBkb2N1bWVudHM9bigpLCBwYWdlcz1zdW0ocGFnZXMpKSAlPiUKICB0cmFuc211dGUocHVibGljYXRpb25fcGxhY2UsbWFqb3JfcHVibGljYXRpb25fcGxhY2U9aWZfZWxzZShpcy5uYShwdWJsaWNhdGlvbl9wbGFjZSkgfCB3b3Jrcz49MjAscHVibGljYXRpb25fcGxhY2UsICJPdGhlciIpKQoKc3BsaXQgPC0gc3BsaXQgJT4lCiAgbGVmdF9qb2luKG1ham9yX3B1YmxpY2F0aW9uX3BsYWNlKQoKbWFqb3JfcHVibGljYXRpb25fY291bnRyeSA8LSBzcGxpdCAlPiUKICBmaWx0ZXIoc2V0PT0idGVzdCIpICU+JSAKICBncm91cF9ieShwdWJsaWNhdGlvbl9jb3VudHJ5KSAlPiUgCiAgc3VtbWFyaXNlKHdvcmtzPW5fZGlzdGluY3Qod29ya19pZCksIGRvY3VtZW50cz1uKCksIHBhZ2VzPXN1bShwYWdlcykpICU+JQogIHRyYW5zbXV0ZShwdWJsaWNhdGlvbl9jb3VudHJ5LG1ham9yX3B1YmxpY2F0aW9uX2NvdW50cnk9aWZfZWxzZShpcy5uYShwdWJsaWNhdGlvbl9jb3VudHJ5KSB8IHdvcmtzPj0xMCxwdWJsaWNhdGlvbl9jb3VudHJ5LCAiT3RoZXIiKSkKCnNwbGl0IDwtIHNwbGl0ICU+JQogIGxlZnRfam9pbihtYWpvcl9wdWJsaWNhdGlvbl9jb3VudHJ5KQpgYGAKCmBgYHtyfQphY3Rvcl9zcGxpdCA8LSBzcGxpdCAlPiUgCiAgaW5uZXJfam9pbihlc3RjX2FjdG9yX2xpbmtzKSAlPiUgCiAgc2VsZWN0KHNldCwgd29ya19pZCwgYWN0b3JfaWQsIGFjdG9yX3JvbGVzX2FsbCkgJT4lIAogIHNlcGFyYXRlX3Jvd3MoYWN0b3Jfcm9sZXNfYWxsLCBzZXA9IjsgIikgJT4lCiAgbXV0YXRlKGFjdG9yX3JvbGVzX2FsbD1pZl9lbHNlKGFjdG9yX3JvbGVzX2FsbD09InByaW50ZXIiLCJwdWJsaXNoZXIiLGFjdG9yX3JvbGVzX2FsbCkpICU+JQogIGRpc3RpbmN0KCkKCmJhZF90ZXN0X2FjdG9ycyA8LSBhY3Rvcl9zcGxpdCAlPiUKICBmaWx0ZXIoc2V0IT0idHJhaW4iKSAlPiUKICBhbnRpX2pvaW4oZCAlPiUgZmlsdGVyKHNldD09InRyYWluIiksIGpvaW5fYnkoYWN0b3JfaWQsIGFjdG9yX3JvbGVzX2FsbCkpICU+JQogIGRpc3RpbmN0KGFjdG9yX3JvbGVzX2FsbCwgYWN0b3JfaWQpCgphY3Rvcl9zcGxpdCA8LSBhY3Rvcl9zcGxpdCAlPiUgCiAgYW50aV9qb2luKGJhZF90ZXN0X2FjdG9ycykKCm1ham9yX2FjdG9yIDwtIGFjdG9yX3NwbGl0ICU+JQogIGZpbHRlcihzZXQ9PSJ0ZXN0IikgJT4lIAogIGdyb3VwX2J5KGFjdG9yX2lkLCBhY3Rvcl9yb2xlc19hbGwpICU+JSAKICBzdW1tYXJpc2Uod29ya3M9bigpLCAuZ3JvdXBzPSJkcm9wIikgJT4lCiAgdHJhbnNtdXRlKGFjdG9yX2lkLCBhY3Rvcl9yb2xlc19hbGwsIG1ham9yX2FjdG9yX2lkPWlmX2Vsc2UoaXMubmEoYWN0b3JfaWQpIHwgd29ya3M+PTUwLGFjdG9yX2lkLCAiT3RoZXIiKSkKCm1ham9yX2FjdG9yX3NwbGl0IDwtIGFjdG9yX3NwbGl0ICU+JQogIGlubmVyX2pvaW4obWFqb3JfYWN0b3IgJT4lIGZpbHRlcihtYWpvcl9hY3Rvcl9pZCE9Ik90aGVyIikpICU+JQogIHNlbGVjdCgtYWN0b3JfaWQpCgphY3Rvcl9zcGxpdCA8LSBhY3Rvcl9zcGxpdCAlPiUgCiAgaW5uZXJfam9pbihzcGxpdCAlPiUgCiAgICAgICAgICAgICAgIHNlbGVjdChlY2NvX2lkLCB3b3JrX2lkLCBwYWdlcykpICU+JSAKICBpbm5lcl9qb2luKGVzdGNfYWN0b3JzICU+JSAKICAgICAgICAgICAgICAgc2VsZWN0KGFjdG9yX2lkLCBuYW1lX3VuaWZpZWQpKSAlPiUgCiAgcmVuYW1lKGFjdG9yX3JvbGU9YWN0b3Jfcm9sZXNfYWxsKQoKbWFqb3JfYWN0b3Jfc3BsaXQgPC0gbWFqb3JfYWN0b3Jfc3BsaXQgJT4lIAogIGlubmVyX2pvaW4oc3BsaXQgJT4lIAogICAgICAgICAgICAgICBzZWxlY3QoZWNjb19pZCwgd29ya19pZCwgcGFnZXMpKSAlPiUgCiAgaW5uZXJfam9pbihlc3RjX2FjdG9ycyAlPiUgCiAgICAgICAgICAgICAgIHNlbGVjdChtYWpvcl9hY3Rvcl9pZD1hY3Rvcl9pZCwgbmFtZV91bmlmaWVkKSkgJT4lIAogIHJlbmFtZShhY3Rvcl9yb2xlPWFjdG9yX3JvbGVzX2FsbCkKYGBgCgpgYGB7cn0Kc3BsaXQgJT4lIAogIHdyaXRlX3RzdihoZXJlKCJkYXRhL291dHB1dC9lY2NvLW11bHRpLXRhcmdldC1zcGxpdC50c3YiKSxxdW90ZT0ibmVlZGVkIixuYT0iIikKYGBgCgpgYGB7cn0KYWN0b3Jfc3BsaXQgJT4lCiAgd3JpdGVfdHN2KGhlcmUoImRhdGEvb3V0cHV0L2VjY28tbXVsdGktdGFyZ2V0LWFjdG9yLXNwbGl0LnRzdiIpLHF1b3RlPSJuZWVkZWQiLG5hPSIiKQptYWpvcl9hY3Rvcl9zcGxpdCAlPiUKICB3cml0ZV90c3YoaGVyZSgiZGF0YS9vdXRwdXQvZWNjby1tdWx0aS10YXJnZXQtbWFqb3ItYWN0b3Itc3BsaXQudHN2IikscXVvdGU9Im5lZWRlZCIsbmE9IiIpCmBgYAoKCiMgT3ZlcmFsbAoKYGBge3J9CmxpYnJhcnkoZ3QpCgpzcGxpdCAlPiUKICAgIGdyb3VwX2J5KHNldCkgJT4lCiAgICBzdW1tYXJpc2UocGFnZXM9c3VtKHBhZ2VzKSxkb2N1bWVudHM9bigpLHdvcmtzPW5fZGlzdGluY3Qod29ya19pZCksIC5ncm91cHM9ImRyb3AiKSAlPiUKICAgIHBpdm90X2xvbmdlcihwYWdlczp3b3JrcykgJT4lIAogICAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbT1zZXQsdmFsdWVzX2Zyb209dmFsdWUpICU+JQogICAgbXV0YXRlKG5hbWU9ZmN0X3JlbGV2ZWwobmFtZSwid29ya3MiLCJkb2N1bWVudHMiLCJwYWdlcyIpKSAlPiUKICAgIGFycmFuZ2UobmFtZSkgJT4lCiAgICBndChyb3duYW1lX2NvbCA9ICJuYW1lIikgJT4lCiAgICB0YWJfaGVhZGVyKHRpdGxlID0gIk92ZXJhbGwiKSAlPiUKICAgIGZtdF9pbnRlZ2VyKGNvbHVtbnM9Yyh0ZXN0LHZhbCx0cmFpbikpCmBgYAoKYGBge3J9CnNwbGl0ICU+JSAKICBwaXZvdF9sb25nZXIoYyhlY2NvX3BhcnQsZWNjb19tb2R1bGUscHJpbWFyeV9sYW5ndWFnZSxtYWpvcl9wcmltYXJ5X2xhbmd1YWdlLHB1YmxpY2F0aW9uX2NvdW50cnksbWFqb3JfcHVibGljYXRpb25fY291bnRyeSxwdWJsaWNhdGlvbl9wbGFjZSxtYWpvcl9wdWJsaWNhdGlvbl9wbGFjZSkpICU+JQogIHNlbGVjdChuYW1lLHNldCx2YWx1ZSkgJT4lCiAgdW5pb25fYWxsKAogICAgbWFqb3JfYWN0b3Jfc3BsaXQgJT4lCiAgICAgIHRyYW5zbXV0ZShuYW1lPSJtYWpvcl9hY3Rvcl9pZCIsc2V0LHZhbHVlPW1ham9yX2FjdG9yX2lkKQogICkgJT4lCiAgdW5pb25fYWxsKAogICAgYWN0b3Jfc3BsaXQgJT4lCiAgICAgIHRyYW5zbXV0ZShuYW1lPSJhY3Rvcl9pZCIsc2V0LHZhbHVlPWFjdG9yX2lkKQogICkgJT4lCiAgZGlzdGluY3QobmFtZSxzZXQsdmFsdWUpICU+JQogIGNvdW50KHNldCxuYW1lKSAlPiUKICBwaXZvdF93aWRlcihuYW1lc19mcm9tPXNldCx2YWx1ZXNfZnJvbT1uKSAlPiUKICBndChyb3duYW1lX2NvbCA9ICJuYW1lIikgJT4lCiAgdGFiX2hlYWRlcih0aXRsZSA9ICJOdW1iZXIgb2YgdGFyZ2V0cyBieSB0YXNrIikgJT4lCiAgZm10X2ludGVnZXIoY29sdW1ucz1jKHRlc3QsdmFsLHRyYWluKSkKCmBgYAoKKyByZWdyZXNzaW9uIHRhc2tzOiBgZWFybGllc3RfcHVibGljYXRpb25feWVhcmAsIGBwdWJsaWNhdGlvbl95ZWFyYCwgYHRvdGFsX3ByaWNlYAoKIyBTaW5nbGUgbGFiZWwgdGFyZ2V0cwoKYGBge3J9CnByaW50X3NwbGl0IDwtIGZ1bmN0aW9uKHNwbGl0LCBncm91cF92YXIsIGdyb3VwX3Zhcl9uYW1lLCBtYWpvcj1GQUxTRSwgb3JkZXJfYnlfZnJlcXVlbmN5PVRSVUUpIHsKICBncm91cF92YXIgPSBlbnF1byhncm91cF92YXIpCiAgZCA8LSBzcGxpdCAlPiUKICAgIGdyb3VwX2J5KHNldCwgISFncm91cF92YXIpICU+JQogICAgc3VtbWFyaXNlKHBhZ2VzPXN1bShwYWdlcyksZG9jdW1lbnRzPW4oKSx3b3Jrcz1uX2Rpc3RpbmN0KHdvcmtfaWQpLCAuZ3JvdXBzPSJkcm9wIikgJT4lCiAgICBwaXZvdF9sb25nZXIocGFnZXM6d29ya3MpICU+JSAKICAgIHBpdm90X3dpZGVyKG5hbWVzX2Zyb209c2V0LHZhbHVlc19mcm9tPXZhbHVlKSAlPiUKICAgIG11dGF0ZShuYW1lPWZjdF9yZWxldmVsKG5hbWUsIndvcmtzIiwiZG9jdW1lbnRzIiwicGFnZXMiKSkKICBkIDwtIGlmIChvcmRlcl9ieV9mcmVxdWVuY3kpIGQgJT4lIG11dGF0ZShncm91cF92YXI9ZmN0X3Jlb3JkZXIoISFncm91cF92YXIsIHRyYWluLCAuZGVzYz1UUlVFKSkgZWxzZSBkICU+JSBtdXRhdGUoZ3JvdXBfdmFyPSEhZ3JvdXBfdmFyKQogIGQgJT4lCiAgICBzZWxlY3QoLSEhZ3JvdXBfdmFyKSAlPiUKICAgIGFycmFuZ2UobmFtZSxncm91cF92YXIpICU+JQogICAgZ3QoZ3JvdXBuYW1lX2NvbCA9ICJuYW1lIiwgcm93bmFtZV9jb2w9Imdyb3VwX3ZhciIpICU+JQogICAgdGFiX2hlYWRlcih0aXRsZSA9IHN0cl9jKCJCeSAiLGdyb3VwX3Zhcl9uYW1lKSwgc3VidGl0bGU9c3RyX2MoIigiLCBpZiAobWFqb3IpICJtYWpvciBvbmx5LCAiIGVsc2UgIiIsIHNwbGl0ICU+JSBmaWx0ZXIoc2V0PT0idGVzdCIpICU+JSBkaXN0aW5jdCghIWdyb3VwX3ZhcikgJT4lIGNvdW50KCkgJT4lIHB1bGwoKSwgIiB0YXJnZXRzKSIpKSAlPiUKICAgIGZtdF9pbnRlZ2VyKGNvbHVtbnM9Yyh0ZXN0LHZhbCx0cmFpbikpCn0KYGBgCgojIyBFQ0NPIHBhcnQKCmBgYHtyfQpzcGxpdCAlPiUgCiAgcHJpbnRfc3BsaXQoZWNjb19wYXJ0LCAiRUNDTyBwYXJ0IikKYGBgCgojIyBFQ0NPIG1vZHVsZQoKYGBge3J9CnNwbGl0ICU+JSAKICBwcmludF9zcGxpdChlY2NvX21vZHVsZSwgIkVDQ08gbW9kdWxlIikKYGBgCgojIyBQcmltYXJ5IGxhbmd1YWdlCgpgYGB7cn0Kc3BsaXQgJT4lIAogIHByaW50X3NwbGl0KG1ham9yX3ByaW1hcnlfbGFuZ3VhZ2UsICJwcmltYXJ5IGxhbmd1YWdlIiwgVFJVRSkKc3BsaXQgJT4lIAogIHByaW50X3NwbGl0KHByaW1hcnlfbGFuZ3VhZ2UsICJwcmltYXJ5IGxhbmd1YWdlIikKYGBgCgojIyBQdWJsaWNhdGlvbiBjb3VudHJ5CgpgYGB7cn0Kc3BsaXQgJT4lIAogIHByaW50X3NwbGl0KG1ham9yX3B1YmxpY2F0aW9uX2NvdW50cnksICJwdWJsaWNhdGlvbiBjb3VudHJ5IiwgVFJVRSkKc3BsaXQgJT4lIAogIHByaW50X3NwbGl0KHB1YmxpY2F0aW9uX2NvdW50cnksICJwdWJsaWNhdGlvbiBjb3VudHJ5IikKYGBgCgojIyBQdWJsaWNhdGlvbiBwbGFjZQoKYGBge3J9CnNwbGl0ICU+JSAKICBwcmludF9zcGxpdChtYWpvcl9wdWJsaWNhdGlvbl9wbGFjZSwgInB1YmxpY2F0aW9uIHBsYWNlIiwgVFJVRSkKc3BsaXQgJT4lIAogIHByaW50X3NwbGl0KHB1YmxpY2F0aW9uX3BsYWNlLCAicHVibGljYXRpb24gcGxhY2UiKQpgYGAKCiMjIFllYXIgb2YgZWFybGllc3QgcHVibGljYXRpb24gCgpgYGB7cn0Kc3BsaXQgJT4lCiAgY291bnQoc2V0LGVhcmxpZXN0X3B1YmxpY2F0aW9uX3llYXJfZGVmaW5pdGUpICU+JQogIGdncGxvdChhZXMoeD1zZXQseT1uLGZpbGw9ZWFybGllc3RfcHVibGljYXRpb25feWVhcl9kZWZpbml0ZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbj0nZG9kZ2UnKSArCiAgdGhlbWVfaHNjaV9kaXNjcmV0ZSgpICsKICBjb29yZF9mbGlwKCkgKwogIHlsYWIoIkVDQ08gZG9jdW1lbnRzIikgKwogIHhsYWIoIlNldCIpICsKICBsYWJzKGZpbGw9IkRhdGUgY2VydGFpbiIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgCiAgZ2d0aXRsZSgiVW5jZXJ0YWludHkvY2VydGFpbnR5IG9mIGRhdGluZyB0aGUgZWFybGllc3QgeWVhciBvZiBwdWJsaWNhdGlvbiIpCmBgYAoKYGBge3J9CnNwbGl0ICU+JQogIGNvdW50KHNldCxlYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyLGVhcmxpZXN0X3B1YmxpY2F0aW9uX3llYXJfZGVmaW5pdGUpICU+JQogIGdncGxvdChhZXMoeD1lYXJsaWVzdF9wdWJsaWNhdGlvbl95ZWFyLHk9bixmaWxsPWVhcmxpZXN0X3B1YmxpY2F0aW9uX3llYXJfZGVmaW5pdGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb249J3N0YWNrJyx3aWR0aD0xKSArCiAgdGhlbWVfaHNjaV9kaXNjcmV0ZSgpICsKICB5bGFiKCJFQ0NPIGRvY3VtZW50cyIpICsKICB4bGFiKCJZZWFyIikgKwogIGxhYnMoZmlsbD0iRGF0ZSBjZXJ0YWluIikgKyAgICAKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgCiAgZmFjZXRfd3JhcCh+c2V0LCBzY2FsZXM9ImZyZWUiKSArCiAgZ2d0aXRsZSgiRWFybGllc3QgeWVhciBvZiBwdWJsaWNhdGlvbiIpCgpgYGAKCgpgYGB7cn0Kc3BsaXQgJT4lIAogIG11dGF0ZShlYXJsaWVzdF9wdWJsaWNhdGlvbl9kZWNhZGU9Zmxvb3IoZWFybGllc3RfcHVibGljYXRpb25feWVhci8xMCkqMTApICU+JQogIHByaW50X3NwbGl0KGVhcmxpZXN0X3B1YmxpY2F0aW9uX2RlY2FkZSwgImVhcmxpZXN0IHB1YmxpY2F0aW9uIGRlY2FkZSIsIG9yZGVyX2J5X2ZyZXF1ZW5jeT1GQUxTRSkKYGBgCgojIyBZZWFyIG9mIHB1YmxpY2F0aW9uIAoKYGBge3J9CnNwbGl0ICU+JQogIGNvdW50KHNldCxwdWJsaWNhdGlvbl95ZWFyX2RlZmluaXRlKSAlPiUKICBnZ3Bsb3QoYWVzKHg9c2V0LHk9bixmaWxsPXB1YmxpY2F0aW9uX3llYXJfZGVmaW5pdGUpKSArCiAgZ2VvbV9jb2wocG9zaXRpb249J2RvZGdlJykgKwogIHRoZW1lX2hzY2lfZGlzY3JldGUoKSArCiAgeWxhYigiRUNDTyBkb2N1bWVudHMiKSArCiAgeGxhYigiU2V0IikgKwogIGxhYnMoZmlsbD0iRGF0ZSBjZXJ0YWluIikgKyAgICAKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgCiAgY29vcmRfZmxpcCgpICsKICBnZ3RpdGxlKCJVbmNlcnRhaW50eS9jZXJ0YWludHkgb2YgZGF0aW5nIHRoZSB5ZWFyIG9mIHB1YmxpY2F0aW9uIikKYGBgCgpgYGB7cn0Kc3BsaXQgJT4lCiAgY291bnQoc2V0LHB1YmxpY2F0aW9uX3llYXIscHVibGljYXRpb25feWVhcl9kZWZpbml0ZSkgJT4lCiAgZ2dwbG90KGFlcyh4PXB1YmxpY2F0aW9uX3llYXIseT1uLGZpbGw9cHVibGljYXRpb25feWVhcl9kZWZpbml0ZSkpICsKICBnZW9tX2NvbChwb3NpdGlvbj0nc3RhY2snLHdpZHRoPTEpICsKICB0aGVtZV9oc2NpX2Rpc2NyZXRlKCkgKwogIHlsYWIoIkVDQ08gZG9jdW1lbnRzIikgKwogIHhsYWIoIlllYXIiKSArCiAgbGFicyhmaWxsPSJEYXRlIGNlcnRhaW4iKSArICAgIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyAKICBmYWNldF93cmFwKH5zZXQsIHNjYWxlcz0iZnJlZSIpICsKICBnZ3RpdGxlKCJZZWFyIG9mIHB1YmxpY2F0aW9uIikKYGBgCgpgYGB7cn0Kc3BsaXQgJT4lIAogIG11dGF0ZShwdWJsaWNhdGlvbl9kZWNhZGU9Zmxvb3IocHVibGljYXRpb25feWVhci8xMCkqMTApICU+JQogIHByaW50X3NwbGl0KHB1YmxpY2F0aW9uX2RlY2FkZSwgInB1YmxpY2F0aW9uIGRlY2FkZSIsIG9yZGVyX2J5X2ZyZXF1ZW5jeT1GQUxTRSkKYGBgCgojIyBQcmljZQoKYGBge3J9CnNwbGl0ICU+JSAKICBtdXRhdGUoaGFzX3ByaWNlPSFpcy5uYSh0b3RhbF9wcmljZSkpICU+JQogIGNvdW50KHNldCxoYXNfcHJpY2UpICU+JQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb209c2V0LHZhbHVlc19mcm9tPW4pICU+JQogIGd0KHJvd25hbWVfY29sID0gInNldCIpICU+JQogICAgdGFiX2hlYWRlcih0aXRsZSA9ICJQcmljZSBpbmZvcm1hdGlvbiBhdmFpbGFiaWxpdHkiKSAlPiUKICAgIGZtdF9pbnRlZ2VyKGNvbHVtbnM9Yyh0ZXN0LHZhbCx0cmFpbikpCmBgYAoKCmBgYHtyfQpzcGxpdCAlPiUKICBjb3VudChzZXQsdG90YWxfcHJpY2UpICU+JQogIGdncGxvdChhZXMoeD10b3RhbF9wcmljZSx5PW4pKSArCiAgZ2VvbV9jb2wod2lkdGg9MSkgKwogIHRoZW1lX2hzY2lfZGlzY3JldGUoKSArCiAgeWxhYigiRUNDTyBkb2N1bWVudHMiKSArCiAgeGxhYigiUHJpY2UiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArIAogIGZhY2V0X3dyYXAofnNldCwgc2NhbGVzPSJmcmVlIiwgbmNvbD0xKSArCiAgZ2d0aXRsZSgiUHJpY2VzIikKYGBgCgoKIyBNdWx0aS1sYWJlbCB0YXJnZXRzCgojIyBBY3RvcnMKCmBgYHtyfQpsaWJyYXJ5KGdnaHNjaSkKbWFqb3JfYWN0b3Jfc3BsaXQgJT4lCiAgZmlsdGVyKHNldD09InRlc3QiKSAlPiUKICBjb3VudChlY2NvX2lkKSAlPiUKICBjb3VudChuKSAlPiUKICBnZ3Bsb3QoYWVzKHg9bix5PW5uKSkgKwogIGdlb21fY29sKCkgKwogIHRoZW1lX2hzY2lfZGlzY3JldGUoKSArCiAgeWxhYigiRUNDTyBkb2N1bWVudHMiKSArCiAgeGxhYigiTnVtYmVyIG9mIGFjdG9ycyBhdHRhY2hlZCIpICsKICBnZ3RpdGxlKCJUZXN0IHNldCBsYWJlbCBjb3VudCBkaXN0cmlidXRpb24gKG1ham9yIG9ubHkpIikKYGBgCgoKYGBge3J9Cm1ham9yX2FjdG9yX3NwbGl0ICU+JSAKICBncm91cF9ieShzZXQsIG1ham9yX2FjdG9yX2lkLCBhY3Rvcl9yb2xlLCBuYW1lX3VuaWZpZWQpICU+JQogIHN1bW1hcmlzZShwYWdlcz1zdW0ocGFnZXMpLGRvY3VtZW50cz1uKCksd29ya3M9bl9kaXN0aW5jdCh3b3JrX2lkKSwgLmdyb3Vwcz0iZHJvcCIpICU+JQogIHBpdm90X2xvbmdlcihwYWdlczp3b3JrcykgJT4lIAogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb209c2V0LHZhbHVlc19mcm9tPXZhbHVlKSAlPiUKICBtdXRhdGUobmFtZT1mY3RfcmVsZXZlbChuYW1lLCJ3b3JrcyIsImRvY3VtZW50cyIsInBhZ2VzIikpICU+JQogIG11dGF0ZShtYWpvcl9hY3Rvcl9pZD1mY3RfcmVvcmRlcihtYWpvcl9hY3Rvcl9pZCwgdHJhaW4sIC5kZXNjPVRSVUUpKSAlPiUKICBhcnJhbmdlKG5hbWUsbWFqb3JfYWN0b3JfaWQpICU+JQogIHNlbGVjdCgtbWFqb3JfYWN0b3JfaWQpICU+JQogIGd0KGdyb3VwbmFtZV9jb2wgPSAibmFtZSIsIHJvd25hbWVfY29sPSJuYW1lX3VuaWZpZWQiKSAlPiUKICB0YWJfaGVhZGVyKHRpdGxlID0gIkJ5IGFjdG9yIiwgc3VidGl0bGU9c3RyX2MoIihtYWpvciBvbmx5LCAiLCBtYWpvcl9hY3Rvcl9zcGxpdCAlPiUgZmlsdGVyKHNldD09InRlc3QiKSAlPiUgZGlzdGluY3QobWFqb3JfYWN0b3JfaWQpICU+JSBjb3VudCgpICU+JSBwdWxsKCksICIgdGFyZ2V0cykiKSkgJT4lCiAgZm10X2ludGVnZXIoY29sdW1ucz1jKHRlc3QsdmFsLHRyYWluKSkKYGBgCgpJbiB0b3RhbCwgYHIgYWN0b3Jfc3BsaXQgJT4lIGZpbHRlcihzZXQ9PSJ0ZXN0IikgJT4lIGRpc3RpbmN0KGFjdG9yX3JvbGUpICU+JSBjb3VudCgpICU+JSBwdWxsKClgIHJvbGVzLCBgciBhY3Rvcl9zcGxpdCAlPiUgZmlsdGVyKHNldD09InRlc3QiKSAlPiUgZGlzdGluY3QoYWN0b3JfaWQpICU+JSBjb3VudCgpICU+JSBwdWxsKClgIGFjdG9ycy4KCmBgYHtyfQpsaWJyYXJ5KGdnaHNjaSkKYWN0b3Jfc3BsaXQgJT4lCiAgZmlsdGVyKHNldD09InRlc3QiKSAlPiUKICBjb3VudChhY3Rvcl9yb2xlLCBlY2NvX2lkKSAlPiUKICBjb3VudChhY3Rvcl9yb2xlLCBuKSAlPiUKICBnZ3Bsb3QoYWVzKHg9bix5PW5uKSkgKwogIGdlb21fY29sKCkgKwogIHRoZW1lX2hzY2lfZGlzY3JldGUoKSArCiAgeWxhYigiRUNDTyBkb2N1bWVudHMiKSArCiAgeGxhYigiTnVtYmVyIG9mIGFjdG9ycyBhdHRhY2hlZCIpICsKICBnZ3RpdGxlKCJUZXN0IHNldCBsYWJlbCBjb3VudCBkaXN0cmlidXRpb24gYnkgYWN0b3Igcm9sZSIpICsKICBmYWNldF93cmFwKH5hY3Rvcl9yb2xlLCBzY2FsZXM9ImZyZWUiKQpgYGAKCg==