# Clear workspace: 
             # rm(list = ls())
             
             # # Load some packages: 
             library(rvest)
             library(tidyverse)
             library(magrittr)
             # 
             # # A function collect Vietnam population data for both sexes with input is a given year: 
             # 
             # get_population_by_year <- function(year_selected) {
             #   base_url <- "https://www.census.gov/data-tools/demo/idb/region.php?N=%20Results%20&T=15&A=separate&RT=0&Y="
             #   link <- paste0(base_url, year_selected, "&R=-1&C=VM")
             #   
             #   link %>% 
             #     read_html() %>% 
             #     html_table(fill = TRUE) %>% 
             #     .[[1]] -> pop_df
             #   
             #   names(pop_df) <- str_replace_all(names(pop_df), " ", "_")
             #   return(pop_df)
             #   
             # }
             # 
             # # Get data from 2000 to 2027: 
             # 
             # pop_data <- lapply(2000:2027, get_population_by_year)
             # 
             # # Convert pop_data to data frame: 
             # 
             # pop_data_df <- do.call("bind_rows", pop_data)             

                                       
             # Data Preprocessing: 
             # saveRDS(pop_final,'D:\\VUDT\\8.TRAINING\\Chart\\pop_final.RDS')
             pop_final <- readRDS('D:\\VUDT\\8.TRAINING\\Chart\\pop_final.RDS')               
             # pop_final <- pop_data_df %>% 
             #   select(Year, Age, Male_Population, Female_Population) %>% 
             #   filter(Age %in% as.character(20:35)) %>% 
             #   mutate(Age = as.integer(Age)) %>% 
             #   mutate_if(is.character, function(x) {str_replace_all(x, "\\,", "") %>% as.integer()}) %>% 
             #   select(-Age) %>% 
             #   gather(Gender, n_pop, -Year) %>% 
             #   group_by(Year, Gender) %>% 
             #   summarise(total_pop = sum(n_pop)) %>% 
             #   ungroup()
             
             
             pop_final_wide <- pop_final %>% 
               spread(key = "Gender", value = "total_pop") %>% 
               mutate(n_gap = Male_Population - Female_Population, 
                      max_gap_gender = case_when(n_gap == max(n_gap) ~ "Yes", TRUE ~ "No"), 
                      max_female_pop = case_when(Female_Population == max(Female_Population) ~ "Yes", TRUE ~ "No"), 
                      max_male_pop = case_when(Male_Population == max(Male_Population) ~ "Yes", TRUE ~ "No"), 
                      label_text = case_when(Year == 2000 ~ "2000", Year == 2027 ~ "2027", Year == 2018 ~ "2018", TRUE ~ ""), 
                      label_color = case_when(Year == 2018 ~ "firebrick", TRUE ~ "gray60"), 
                      rate_fa = n_gap / Male_Population)
             
             
             upper_num <- pop_final_wide %>% 
               filter(Year == 2018) %>% 
               pull(Female_Population) / 1000000
             
             low_num <- pop_final_wide %>% 
               pull(Female_Population) %>% 
               min() / 1000000
             
             
             gender_pop_gap <- pop_final_wide %>% 
               filter(Year == 2018) %>% 
               pull(n_gap) 
             
             
             
             # install.packages('extrafont')
             library(extrafont)
             my_font <- "OfficinaSansITC"
             
             ggplot() + 
               geom_segment(data = pop_final_wide %>% mutate(Female_Population = Female_Population / 1000000, Male_Population = Male_Population / 1000000),
                            aes(x = Year, xend = Year, y = Female_Population, yend = Male_Population),
                            size = 0.7, 
                            color = "gray70") +
               
               geom_segment(data = pop_final_wide %>% mutate(Female_Population = Female_Population / 1000000, Male_Population = Male_Population / 1000000),
                            aes(x = 2018, xend = 2018, y = low_num, yend = upper_num - 0.008*upper_num), 
                            color = "firebrick", 
                            arrow = arrow(length = unit(0.2, "cm")), 
                            size = 0.5, alpha = 0.4) + 
               
               geom_point(data = pop_final %>% mutate(total_pop = total_pop / 1000000), aes(Year, total_pop, color = Gender), size = 4) + 
               
               annotate("text", label = "Trong n\u0103m 2018, c\u00F3 773.765\n \u0111a\u0300n \u00F4ng \u0111\u00F4\u0323c th\u00E2n.", 
                        family = my_font, 
                        x = 2010,
                        y = 12.1, 
                        color = "gray20", 
                        size = 4.5, hjust = 0, vjust = 1) + 
               
               scale_color_manual(name = "", values = c("#3E606F", "#8C3F4D"), labels = c("N\u01B0\u0303", "Nam")) + 
               scale_x_continuous(breaks = seq(2000, 2027, 1), labels = pop_final_wide$label_text) + 
               scale_y_continuous(labels = c("11", "12", "13", "14")) + 
               theme(plot.background = element_rect(fill = "#EFF2F4", color = NA)) + 
               theme(panel.background = element_rect(fill = "#EFF2F4", color = NA)) +
               theme(legend.background = element_rect(fill = "#EFF2F4", color = NA)) + 
               theme(legend.text = element_text(family = my_font, size = 10, face = "bold", color = "gray20")) + 
               theme(plot.margin = unit(c(1, 1, 1, 1), "cm")) + 
               theme(axis.text.x = element_text(face = "bold", size = 14, color = pop_final_wide$label_color, family = my_font)) +
               theme(axis.text.y = element_text(color = "gray30", face = "bold", size = 14, family = my_font)) +
               theme(plot.title = element_text(family = my_font, size = 20, color = "gray20")) + 
               theme(plot.subtitle = element_text(family = my_font, size = 14, color = "gray30")) + 
               theme(plot.caption = element_text(family = my_font, size = 14, color = "gray50")) + 
               theme(axis.ticks = element_blank()) + 
               theme(panel.grid.major.x = element_blank()) + 
               theme(panel.grid.minor.x = element_blank()) + 
               theme(legend.position = "top") +
               theme(axis.title.y = element_text(family = my_font, size = 12, colour = "gray20")) + 
               
               labs(x = NULL, y = "D\u00E2n s\u1ED1 trong \u0111\u1ED9 tu\u1ED5i k\u1EBFt h\u00F4n\n (Tri\u00EA\u0323u ng\u01B0\u01A1\u0300i)", 
                    title = "T\u1EA1i sao h\u00E0ng tri\u1EC7u \u0111\u00E0n \u00F4ng Vi\u1EC7t Nam\n ph\u1EA3i s\u1ED1ng \u0111\u1ED9c th\u00E2n trong t\u01B0\u01A1ng lai?", 
                    subtitle = "Ta\u0323i Vi\u00EA\u0323t Nam t\u01B0\u0300 nh\u1EEFng n\u0103m 2000, kho\u1EA3ng c\u00E1ch gi\u1EDBi t\u00EDnh \u1EDF nh\u00F3m tu\u1ED5i\n k\u1EBFt h\u00F4n (t\u1EEB 20 \u0111\u1EBFn 35) \u0111\u00E3 t\u0103ng l\u00EAn nhanh cho\u0301ng\r s\u00F4\u0301 l\u01B0\u01A1\u0323ng\r nam gi\u01A1\u0301i\n v\u01B0\u1EE3t tr\u1ED9i so v\u1EDBi n\u01B0\u0303 gi\u01A1\u0301i\r\n", 
                    caption = "Ngu\u00F4\u0300n: https://www.census.gov")       -> a3      
             
             
a3

LS0tDQp0aXRsZTogIuG6viDEkWFuZyBsw6AgeHUgdGjhur8iDQphIXV0aG9yOiAiUkNoYXJ0Ig0KZGF0ZTogIk1heSAyNywgMjAxOSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGhpZ2hsaWdodDogcHlnbWVudHMNCiAgICAjIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6ICJmbGF0bHkiDQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsd2FybmluZyA9IEYsZXJyb3IgPSBGLG1lc3NhZ2UgPSBGKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCg0KICAgICAgICAgICAgICMgQ2xlYXIgd29ya3NwYWNlOiANCiAgICAgICAgICAgICAjIHJtKGxpc3QgPSBscygpKQ0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgICMgIyBMb2FkIHNvbWUgcGFja2FnZXM6IA0KICAgICAgICAgICAgIGxpYnJhcnkocnZlc3QpDQogICAgICAgICAgICAgbGlicmFyeSh0aWR5dmVyc2UpDQogICAgICAgICAgICAgbGlicmFyeShtYWdyaXR0cikNCiAgICAgICAgICAgICAjIA0KICAgICAgICAgICAgICMgIyBBIGZ1bmN0aW9uIGNvbGxlY3QgVmlldG5hbSBwb3B1bGF0aW9uIGRhdGEgZm9yIGJvdGggc2V4ZXMgd2l0aCBpbnB1dCBpcyBhIGdpdmVuIHllYXI6IA0KICAgICAgICAgICAgICMgDQogICAgICAgICAgICAgIyBnZXRfcG9wdWxhdGlvbl9ieV95ZWFyIDwtIGZ1bmN0aW9uKHllYXJfc2VsZWN0ZWQpIHsNCiAgICAgICAgICAgICAjICAgYmFzZV91cmwgPC0gImh0dHBzOi8vd3d3LmNlbnN1cy5nb3YvZGF0YS10b29scy9kZW1vL2lkYi9yZWdpb24ucGhwP049JTIwUmVzdWx0cyUyMCZUPTE1JkE9c2VwYXJhdGUmUlQ9MCZZPSINCiAgICAgICAgICAgICAjICAgbGluayA8LSBwYXN0ZTAoYmFzZV91cmwsIHllYXJfc2VsZWN0ZWQsICImUj0tMSZDPVZNIikNCiAgICAgICAgICAgICAjICAgDQogICAgICAgICAgICAgIyAgIGxpbmsgJT4lIA0KICAgICAgICAgICAgICMgICAgIHJlYWRfaHRtbCgpICU+JSANCiAgICAgICAgICAgICAjICAgICBodG1sX3RhYmxlKGZpbGwgPSBUUlVFKSAlPiUgDQogICAgICAgICAgICAgIyAgICAgLltbMV1dIC0+IHBvcF9kZg0KICAgICAgICAgICAgICMgICANCiAgICAgICAgICAgICAjICAgbmFtZXMocG9wX2RmKSA8LSBzdHJfcmVwbGFjZV9hbGwobmFtZXMocG9wX2RmKSwgIiAiLCAiXyIpDQogICAgICAgICAgICAgIyAgIHJldHVybihwb3BfZGYpDQogICAgICAgICAgICAgIyAgIA0KICAgICAgICAgICAgICMgfQ0KICAgICAgICAgICAgICMgDQogICAgICAgICAgICAgIyAjIEdldCBkYXRhIGZyb20gMjAwMCB0byAyMDI3OiANCiAgICAgICAgICAgICAjIA0KICAgICAgICAgICAgICMgcG9wX2RhdGEgPC0gbGFwcGx5KDIwMDA6MjAyNywgZ2V0X3BvcHVsYXRpb25fYnlfeWVhcikNCiAgICAgICAgICAgICAjIA0KICAgICAgICAgICAgICMgIyBDb252ZXJ0IHBvcF9kYXRhIHRvIGRhdGEgZnJhbWU6IA0KICAgICAgICAgICAgICMgDQogICAgICAgICAgICAgIyBwb3BfZGF0YV9kZiA8LSBkby5jYWxsKCJiaW5kX3Jvd3MiLCBwb3BfZGF0YSkgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICMgRGF0YSBQcmVwcm9jZXNzaW5nOiANCiAgICAgICAgICAgICAjIHNhdmVSRFMocG9wX2ZpbmFsLCdEOlxcVlVEVFxcOC5UUkFJTklOR1xcQ2hhcnRcXHBvcF9maW5hbC5SRFMnKQ0KICAgICAgICAgICAgIHBvcF9maW5hbCA8LSByZWFkUkRTKCdEOlxcVlVEVFxcOC5UUkFJTklOR1xcQ2hhcnRcXHBvcF9maW5hbC5SRFMnKSAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICMgcG9wX2ZpbmFsIDwtIHBvcF9kYXRhX2RmICU+JSANCiAgICAgICAgICAgICAjICAgc2VsZWN0KFllYXIsIEFnZSwgTWFsZV9Qb3B1bGF0aW9uLCBGZW1hbGVfUG9wdWxhdGlvbikgJT4lIA0KICAgICAgICAgICAgICMgICBmaWx0ZXIoQWdlICVpbiUgYXMuY2hhcmFjdGVyKDIwOjM1KSkgJT4lIA0KICAgICAgICAgICAgICMgICBtdXRhdGUoQWdlID0gYXMuaW50ZWdlcihBZ2UpKSAlPiUgDQogICAgICAgICAgICAgIyAgIG11dGF0ZV9pZihpcy5jaGFyYWN0ZXIsIGZ1bmN0aW9uKHgpIHtzdHJfcmVwbGFjZV9hbGwoeCwgIlxcLCIsICIiKSAlPiUgYXMuaW50ZWdlcigpfSkgJT4lIA0KICAgICAgICAgICAgICMgICBzZWxlY3QoLUFnZSkgJT4lIA0KICAgICAgICAgICAgICMgICBnYXRoZXIoR2VuZGVyLCBuX3BvcCwgLVllYXIpICU+JSANCiAgICAgICAgICAgICAjICAgZ3JvdXBfYnkoWWVhciwgR2VuZGVyKSAlPiUgDQogICAgICAgICAgICAgIyAgIHN1bW1hcmlzZSh0b3RhbF9wb3AgPSBzdW0obl9wb3ApKSAlPiUgDQogICAgICAgICAgICAgIyAgIHVuZ3JvdXAoKQ0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgIHBvcF9maW5hbF93aWRlIDwtIHBvcF9maW5hbCAlPiUgDQogICAgICAgICAgICAgICBzcHJlYWQoa2V5ID0gIkdlbmRlciIsIHZhbHVlID0gInRvdGFsX3BvcCIpICU+JSANCiAgICAgICAgICAgICAgIG11dGF0ZShuX2dhcCA9IE1hbGVfUG9wdWxhdGlvbiAtIEZlbWFsZV9Qb3B1bGF0aW9uLCANCiAgICAgICAgICAgICAgICAgICAgICBtYXhfZ2FwX2dlbmRlciA9IGNhc2Vfd2hlbihuX2dhcCA9PSBtYXgobl9nYXApIH4gIlllcyIsIFRSVUUgfiAiTm8iKSwgDQogICAgICAgICAgICAgICAgICAgICAgbWF4X2ZlbWFsZV9wb3AgPSBjYXNlX3doZW4oRmVtYWxlX1BvcHVsYXRpb24gPT0gbWF4KEZlbWFsZV9Qb3B1bGF0aW9uKSB+ICJZZXMiLCBUUlVFIH4gIk5vIiksIA0KICAgICAgICAgICAgICAgICAgICAgIG1heF9tYWxlX3BvcCA9IGNhc2Vfd2hlbihNYWxlX1BvcHVsYXRpb24gPT0gbWF4KE1hbGVfUG9wdWxhdGlvbikgfiAiWWVzIiwgVFJVRSB+ICJObyIpLCANCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbF90ZXh0ID0gY2FzZV93aGVuKFllYXIgPT0gMjAwMCB+ICIyMDAwIiwgWWVhciA9PSAyMDI3IH4gIjIwMjciLCBZZWFyID09IDIwMTggfiAiMjAxOCIsIFRSVUUgfiAiIiksIA0KICAgICAgICAgICAgICAgICAgICAgIGxhYmVsX2NvbG9yID0gY2FzZV93aGVuKFllYXIgPT0gMjAxOCB+ICJmaXJlYnJpY2siLCBUUlVFIH4gImdyYXk2MCIpLCANCiAgICAgICAgICAgICAgICAgICAgICByYXRlX2ZhID0gbl9nYXAgLyBNYWxlX1BvcHVsYXRpb24pDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgdXBwZXJfbnVtIDwtIHBvcF9maW5hbF93aWRlICU+JSANCiAgICAgICAgICAgICAgIGZpbHRlcihZZWFyID09IDIwMTgpICU+JSANCiAgICAgICAgICAgICAgIHB1bGwoRmVtYWxlX1BvcHVsYXRpb24pIC8gMTAwMDAwMA0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgIGxvd19udW0gPC0gcG9wX2ZpbmFsX3dpZGUgJT4lIA0KICAgICAgICAgICAgICAgcHVsbChGZW1hbGVfUG9wdWxhdGlvbikgJT4lIA0KICAgICAgICAgICAgICAgbWluKCkgLyAxMDAwMDAwDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgZ2VuZGVyX3BvcF9nYXAgPC0gcG9wX2ZpbmFsX3dpZGUgJT4lIA0KICAgICAgICAgICAgICAgZmlsdGVyKFllYXIgPT0gMjAxOCkgJT4lIA0KICAgICAgICAgICAgICAgcHVsbChuX2dhcCkgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgIyBpbnN0YWxsLnBhY2thZ2VzKCdleHRyYWZvbnQnKQ0KICAgICAgICAgICAgIGxpYnJhcnkoZXh0cmFmb250KQ0KICAgICAgICAgICAgIG15X2ZvbnQgPC0gIk9mZmljaW5hU2Fuc0lUQyINCiAgICAgICAgICAgICANCiAgICAgICAgICAgICBnZ3Bsb3QoKSArIA0KICAgICAgICAgICAgICAgZ2VvbV9zZWdtZW50KGRhdGEgPSBwb3BfZmluYWxfd2lkZSAlPiUgbXV0YXRlKEZlbWFsZV9Qb3B1bGF0aW9uID0gRmVtYWxlX1BvcHVsYXRpb24gLyAxMDAwMDAwLCBNYWxlX1BvcHVsYXRpb24gPSBNYWxlX1BvcHVsYXRpb24gLyAxMDAwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IFllYXIsIHhlbmQgPSBZZWFyLCB5ID0gRmVtYWxlX1BvcHVsYXRpb24sIHllbmQgPSBNYWxlX1BvcHVsYXRpb24pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImdyYXk3MCIpICsNCiAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgZ2VvbV9zZWdtZW50KGRhdGEgPSBwb3BfZmluYWxfd2lkZSAlPiUgbXV0YXRlKEZlbWFsZV9Qb3B1bGF0aW9uID0gRmVtYWxlX1BvcHVsYXRpb24gLyAxMDAwMDAwLCBNYWxlX1BvcHVsYXRpb24gPSBNYWxlX1BvcHVsYXRpb24gLyAxMDAwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IDIwMTgsIHhlbmQgPSAyMDE4LCB5ID0gbG93X251bSwgeWVuZCA9IHVwcGVyX251bSAtIDAuMDA4KnVwcGVyX251bSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImZpcmVicmljayIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0gYXJyb3cobGVuZ3RoID0gdW5pdCgwLjIsICJjbSIpKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgYWxwaGEgPSAwLjQpICsgDQogICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgIGdlb21fcG9pbnQoZGF0YSA9IHBvcF9maW5hbCAlPiUgbXV0YXRlKHRvdGFsX3BvcCA9IHRvdGFsX3BvcCAvIDEwMDAwMDApLCBhZXMoWWVhciwgdG90YWxfcG9wLCBjb2xvciA9IEdlbmRlciksIHNpemUgPSA0KSArIA0KICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICBhbm5vdGF0ZSgidGV4dCIsIGxhYmVsID0gIlRyb25nIG5cdTAxMDNtIDIwMTgsIGNcdTAwRjMgNzczLjc2NVxuIFx1MDExMWFcdTAzMDBuIFx1MDBGNG5nIFx1MDExMVx1MDBGNFx1MDMyM2MgdGhcdTAwRTJuLiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gbXlfZm9udCwgDQogICAgICAgICAgICAgICAgICAgICAgICB4ID0gMjAxMCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAxMi4xLCANCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImdyYXkyMCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDQuNSwgaGp1c3QgPSAwLCB2anVzdCA9IDEpICsgDQogICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbChuYW1lID0gIiIsIHZhbHVlcyA9IGMoIiMzRTYwNkYiLCAiIzhDM0Y0RCIpLCBsYWJlbHMgPSBjKCJOXHUwMUIwXHUwMzAzIiwgIk5hbSIpKSArIA0KICAgICAgICAgICAgICAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDAwLCAyMDI3LCAxKSwgbGFiZWxzID0gcG9wX2ZpbmFsX3dpZGUkbGFiZWxfdGV4dCkgKyANCiAgICAgICAgICAgICAgIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjKCIxMSIsICIxMiIsICIxMyIsICIxNCIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI0VGRjJGNCIsIGNvbG9yID0gTkEpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNFRkYyRjQiLCBjb2xvciA9IE5BKSkgKw0KICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjRUZGMkY0IiwgY29sb3IgPSBOQSkpICsgDQogICAgICAgICAgICAgICB0aGVtZShsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMTAsIGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gImdyYXkyMCIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC5tYXJnaW4gPSB1bml0KGMoMSwgMSwgMSwgMSksICJjbSIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE0LCBjb2xvciA9IHBvcF9maW5hbF93aWRlJGxhYmVsX2NvbG9yLCBmYW1pbHkgPSBteV9mb250KSkgKw0KICAgICAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JheTMwIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE0LCBmYW1pbHkgPSBteV9mb250KSkgKw0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMjAsIGNvbG9yID0gImdyYXkyMCIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMTQsIGNvbG9yID0gImdyYXkzMCIpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGZhbWlseSA9IG15X2ZvbnQsIHNpemUgPSAxNCwgY29sb3IgPSAiZ3JheTUwIikpICsgDQogICAgICAgICAgICAgICB0aGVtZShheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUocGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpKSArIA0KICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsNCiAgICAgICAgICAgICAgIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMTIsIGNvbG91ciA9ICJncmF5MjAiKSkgKyANCiAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgbGFicyh4ID0gTlVMTCwgeSA9ICJEXHUwMEUybiBzXHUxRUQxIHRyb25nIFx1MDExMVx1MUVEOSB0dVx1MUVENWkga1x1MUVCRnQgaFx1MDBGNG5cbiAoVHJpXHUwMEVBXHUwMzIzdSBuZ1x1MDFCMFx1MDFBMVx1MDMwMGkpIiwgDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlRcdTFFQTFpIHNhbyBoXHUwMEUwbmcgdHJpXHUxRUM3dSBcdTAxMTFcdTAwRTBuIFx1MDBGNG5nIFZpXHUxRUM3dCBOYW1cbiBwaFx1MUVBM2kgc1x1MUVEMW5nIFx1MDExMVx1MUVEOWMgdGhcdTAwRTJuIHRyb25nIHRcdTAxQjBcdTAxQTFuZyBsYWk/IiwgDQogICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIlRhXHUwMzIzaSBWaVx1MDBFQVx1MDMyM3QgTmFtIHRcdTAxQjBcdTAzMDAgbmhcdTFFRUZuZyBuXHUwMTAzbSAyMDAwLCBraG9cdTFFQTNuZyBjXHUwMEUxY2ggZ2lcdTFFREJpIHRcdTAwRURuaCBcdTFFREYgbmhcdTAwRjNtIHR1XHUxRUQ1aVxuIGtcdTFFQkZ0IGhcdTAwRjRuICh0XHUxRUVCIDIwIFx1MDExMVx1MUVCRm4gMzUpIFx1MDExMVx1MDBFMyB0XHUwMTAzbmcgbFx1MDBFQW4gbmhhbmggY2hvXHUwMzAxbmdcciBzXHUwMEY0XHUwMzAxIGxcdTAxQjBcdTAxQTFcdTAzMjNuZ1xyIG5hbSBnaVx1MDFBMVx1MDMwMWlcbiB2XHUwMUIwXHUxRUUzdCB0clx1MUVEOWkgc28gdlx1MUVEQmkgblx1MDFCMFx1MDMwMyBnaVx1MDFBMVx1MDMwMWlcclxuIiwgDQogICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiTmd1XHUwMEY0XHUwMzAwbjogaHR0cHM6Ly93d3cuY2Vuc3VzLmdvdiIpICAgICAgIC0+IGEzICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQphMw0KICAgICAgICAgICAgIA0KDQpgYGANCg0K