1 Define functions

## Define function that recodes to numeric, but watches out to coercion to not introduce NAs
colstonumeric <- function(df){
  tryCatch({
    df_num <- as.data.frame(
      lapply(df,
             function(x) { as.numeric(as.character(x))})) 
  },warning = function(stop_on_warning) {
    message("Stoped the execution of numeric conversion: ", conditionMessage(stop_on_warning))
  }) 
}
##
## Define function that reverse codes items
ReverseCode <- function(df, tonumeric = FALSE, min = NULL, max = NULL) {
  if(tonumeric) df <- colstonumeric(df)
  df <- (max + min) - df
}
##
## Define function that scores only rows with less than 10% NAs (returns NA if all or above threshold percentage of rows are NA); can reverse code if vector of column indexes and min, max are provided.
ScoreLikert <- function(df, napercent = .1, tonumeric = FALSE, reversecols = NULL, min = NULL, max = NULL) {
  reverse_list <- list(reversecols = reversecols, min = min, max = max)
  reverse_check <- !sapply(reverse_list, is.null)
  
  # Recode to numeric, but watch out to coercion to not introduce NAs
  colstonumeric <- function(df){
    tryCatch({
      df_num <- as.data.frame(
        lapply(df,
               function(x) { as.numeric(as.character(x))})) 
    },warning = function(stop_on_warning) {
      message("Stoped the execution of numeric conversion: ", conditionMessage(stop_on_warning))
    }) 
  }
  
  if(tonumeric) df <- colstonumeric(df)
  
  if(all(reverse_check)){
    df[ ,reversecols] <- (max + min) - df[ ,reversecols]
  }else if(any(reverse_check)){
    stop("Insuficient info for reversing. Please provide: ", paste(names(reverse_list)[!reverse_check], collapse = ", "))
  }
  
  ifelse(rowSums(is.na(df)) > ncol(df) * napercent,
         NA,
         rowSums(df, na.rm = TRUE) * NA ^ (rowSums(!is.na(df)) == 0)
  )
}
##
my_ggwithinstats <- function(data, title, x, y, outlier.label, xlab, ylab) {
  x <- rlang::enquo(x)
  y <- rlang::enquo(y)
  outlier.label <- rlang::enquo(outlier.label)
  
  data %>%
    ggstatsplot::ggwithinstats(
      x = !!x,
      y = !!y,
      title = title,
      xlab = xlab,
      ylab = ylab,
      outlier.tagging = TRUE,            # whether outliers need to be tagged
      outlier.label = !!outlier.label,   # variable to be used for tagging outliers
      outlier.coef = 2,
      pairwise.comparisons = TRUE,
      pairwise.display = "significant",
      results.subtitle = TRUE,
      type = "parametric",
      bf.message = FALSE, 
      p.adjust.method = "none",
      point.path = TRUE,
      ggtheme = ggprism::theme_prism(),
      # package = "RColorBrewer",  # "ggsci",
      # palette = "Dark",         # "default_jco",
      violin.args = list(width = 0.9, alpha = 0.2, size = 1, color = "black"),
      centrality.point.args = list(size = 5, color = "darkred"),
      centrality.label.args = list(size = 3, nudge_x = 0.2, segment.linetype = 5, fill = "#FFF8E7"), 
      ggplot.component = list(
        theme(
          plot.title = element_text(hjust = 0, size = 16),
          plot.subtitle = element_text(hjust = 0, size = 12), 
          plot.caption = element_text(hjust = 0, size = 12), 
          text = element_text(size = 14)
      ))
    ) + scale_colour_grey(start = 0.2, end = 0.2)   # hacky way to change point color
}

# For publication
my_ggwithinstats2 <- function(data, title, x, y, outlier.label, xlab, ylab, 
                              outlier.tagging = FALSE, results.subtitle = TRUE, 
                              centrality.label.args = TRUE, point.path = TRUE,
                              type = "parametric", 
                              ...) {  # ... for limits and breaks
  x <- rlang::enquo(x)
  y <- rlang::enquo(y)
  outlier.label <- rlang::enquo(outlier.label)
  
  if(centrality.label.args){
    centrality.label.args <- list(size = 3, nudge_x = 0.2, segment.linetype = 5, fill = "#FFF8E7")
  }else{
    centrality.label.args <- list(size = 0, nudge_x = 10, segment.linetype = 0, alpha = 0) # very hacky way of not showing label
  }
  
  data %>%
    ggstatsplot::ggwithinstats(
      x = !!x,
      y = !!y,
      title = title,
      xlab = xlab,
      ylab = ylab,
      outlier.tagging = outlier.tagging,                    # whether outlines need to be tagged
      outlier.label = !!outlier.label,                      # variable to be used for tagging outliers
      outlier.coef = 2,
      pairwise.comparisons = TRUE,
      pairwise.display = "all",
      results.subtitle = results.subtitle,
      type = type,
      bf.message = FALSE, 
      p.adjust.method = "none",
      point.path = point.path,
      ggtheme = ggprism::theme_prism(),
      # package = "RColorBrewer",  # "ggsci",
      # palette = "Dark",         # "default_jco",
      violin.args = list(width = 0.9, alpha = 0.2, size = 1, color = "black"),
      centrality.plotting = TRUE,
      centrality.type = "parameteric",
      centrality.point.args = list(size = 5, color = "darkred"),
      centrality.label.args = centrality.label.args,
      ggplot.component = list(
        theme(
          plot.title = element_text(hjust = 0, size = 16),
          plot.subtitle = element_text(hjust = 0, size = 12), 
          plot.caption = element_text(hjust = 0, size = 12), 
          text = element_text(size = 14)
      ))
    ) + scale_colour_grey(start = 0.2, end = 0.2) +  # hacky way to change point color
    scale_y_continuous(...)
}

# Fast ggsave - saves plot with filename of R plot object
fast_ggsave <- function(plot, device = "png", path = NULL,
                        units = "in", dpi = 300, width = 5, height = 5, ...){ 
  plot_name <- deparse(substitute(plot))
  ggplot2::ggsave(filename = paste0(plot_name, ".", device), plot = plot,
                  device = device, path = path,
                  units = units, dpi = dpi,
                  width = width, height = height,
                  ...
  )
  
} # use: fast_ggsave(jrad_ox_p, path = savefolder)

2 Read, Clean, Recode

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Read, Clean, Recode, Unite
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

## Read files
folder <- "C:/Users/Mihai/Desktop/R Notebooks/notebooks/PA4-full-report"
file <- "Scale complete triate Sofi pa4.xlsx"

setwd(folder)

## ID df
id_df <- rio::import(file.path(folder, file),
                     skip = 0, colNames = FALSE, which = "incadrari")   
id_df <- id_df[, 1:4]
colnames(id_df) <- c("Grup", "Cond", "id", "email")

id_df <- 
  id_df %>%
  janitor::remove_empty("rows") %>% 
  dplyr::mutate(id = stringr::str_remove(id, "^0+"),              # remove leading zeros
                id = stringr::str_remove_all(id, "[[:blank:]]"),  # remove any white space
                id =  toupper(id)) %>%
  dplyr::mutate(Cond = stringr::str_replace(Cond, "12CONTROL", "CONTROL"),   # fix typo
                Grup = stringr::str_replace(Grup, "burnout", "Burnout"),
                Grup = stringr::str_replace(Grup, "pop generala", "pop gen"),
                Grup = stringr::str_replace(Grup, "old", "pop gen")) %>%
  dplyr::mutate(Grup = dplyr::if_else(is.na(Grup), "pop gen", Grup))

id_df <- 
  id_df %>%
  tidyr::separate(id, 
           into = c("id_num", "Exp_type"), 
           sep = "(?<=[0-9])(?=[A-Za-z])",     # ?<= is "look behind"
           remove = FALSE
           ) %>%
  dplyr::select(-id_num) %>%
  dplyr::mutate(Exp_type = dplyr::if_else(Exp_type %in% c("A", "B", "C", "D", "E", "R", "X"), "online", Exp_type))

## Scale 
scale_df_pre <- rio::import(file.path(folder, file),
                            skip = 0, which = "Scale zi1") 
scale_df_post <- rio::import(file.path(folder, file),
                             skip = 0, which = "Scale zi5") 

dif_col <- which(colnames(scale_df_pre) == setdiff(colnames(scale_df_pre), colnames(scale_df_post)))
scale_df_pre <- scale_df_pre[, - dif_col]
scale_df_pre <- scale_df_pre[, - c(1, 3:7)]
scale_df_post <- scale_df_post[, - c(1, 3:7)]
identical(colnames(scale_df_pre), colnames(scale_df_post))
scale_df_pre <- scale_df_pre[-1, ]
colnames(scale_df_pre)[1] <- "Date"
colnames(scale_df_pre)[2] <- "id"
scale_df_pre <- 
  scale_df_pre %>%
  janitor::remove_empty("rows") %>%                            # remove empty rows if any
  dplyr::mutate(id = stringr::str_remove(id, "^0+"),              # remove leading zeros
                id = stringr::str_remove_all(id, "[[:blank:]]"),  # remove any white space
                id =  toupper(id))  %>%
  dplyr::mutate_if(is.character, ~dplyr::na_if(., "Not Answered")) %>%
  dplyr::mutate(Date = lubridate::as_datetime(Date)) %>%
  dplyr::arrange(Date)


scale_df_post <- scale_df_post[-1, ]
colnames(scale_df_post)[1] <- "Date"
colnames(scale_df_post)[2] <- "id"
scale_df_post <- 
  scale_df_post %>%
  janitor::remove_empty("rows") %>%                            # remove empty rows if any
  dplyr::mutate(id = stringr::str_remove(id, "^0+"),              # remove leading zeros
                id = stringr::str_remove_all(id, "[[:blank:]]"),  # remove any white space
                id =  toupper(id))  %>%
  dplyr::mutate_if(is.character, ~dplyr::na_if(., "Not Answered")) %>%
  dplyr::mutate(Date = lubridate::as_datetime(Date)) %>%
  dplyr::arrange(Date)


setdiff(id_df$id, scale_df_pre$id)
# Merge with id
scale_df_pre <- dplyr::left_join(scale_df_pre, id_df, by = "id")
scale_df_pre$PrePost <- rep("Pre", nrow(scale_df_pre)) 
unique(scale_df_pre$Cond)
unique(scale_df_pre$Grup)
table(scale_df_pre$Cond, scale_df_pre$Grup)
scale_df_pre[, c("id", "Cond", "Grup")]


scale_df_post <- dplyr::left_join(scale_df_post, id_df, by = "id")
scale_df_post$PrePost <- rep("Post", nrow(scale_df_post))
unique(scale_df_post$Cond)
unique(scale_df_post$Grup)
scale_df_post[, c("id", "Cond", "Grup")]
NA
gender_match <- 
  Data[, c("Sex", "ID")] %>%
  mutate_if(is.character, ~na_if(., "Not Answered"))

fem_ids <- 
  gender_match %>%
  dplyr::filter(Sex == "Feminin") %>%
  dplyr::pull(ID)

masc_ids <- 
  gender_match %>%
  dplyr::filter(Sex == "Masculin") %>%
  dplyr::pull(ID)

–>

3 Outcome Measures

–>

## PANAS: Positive Affect Score = sum items 1, 3, 5, 9, 10, 12, 14, 16, 17, 19. Negative Affect Score = sum items 2, 4, 6, 7, 8, 11, 13, 15, 18, 20.  
index_item_panas <- 3:22
colnames(scale_df_pre)[index_item_panas] <- sprintf("PANAS_%d", 1:20)
colnames(scale_df_post)[index_item_panas] <- sprintf("PANAS_%d", 1:20)

scale_df_pre[, index_item_panas] <- data.frame(lapply(scale_df_pre[, index_item_panas], 
                                      function(x) {gsub(".*în foarte mică măsură.*", "1", x)}), stringsAsFactors = FALSE)
scale_df_pre[, index_item_panas] <- data.frame(lapply(scale_df_pre[, index_item_panas], 
                                      function(x) {gsub(".*în mică măsură.*", "2", x)}), stringsAsFactors = FALSE)
scale_df_pre[, index_item_panas] <- data.frame(lapply(scale_df_pre[, index_item_panas], 
                                      function(x) {gsub(".*într-o oarecare măsură.*", "3", x)}), stringsAsFactors = FALSE)
scale_df_pre[, index_item_panas] <- data.frame(lapply(scale_df_pre[, index_item_panas], 
                                      function(x) {gsub(".*în mare măsură.*", "4", x)}), stringsAsFactors = FALSE)
scale_df_pre[, index_item_panas] <- data.frame(lapply(scale_df_pre[, index_item_panas], 
                                      function(x) {gsub(".*în foarte mare măsură.*", "5", x)}), stringsAsFactors = FALSE)

scale_df_post[, index_item_panas] <- data.frame(lapply(scale_df_post[, index_item_panas], 
                                                      function(x) {gsub(".*în foarte mică măsură.*", "1", x)}), stringsAsFactors = FALSE)
scale_df_post[, index_item_panas] <- data.frame(lapply(scale_df_post[, index_item_panas], 
                                                      function(x) {gsub(".*în mică măsură.*", "2", x)}), stringsAsFactors = FALSE)
scale_df_post[, index_item_panas] <- data.frame(lapply(scale_df_post[, index_item_panas], 
                                                      function(x) {gsub(".*într-o oarecare măsură.*", "3", x)}), stringsAsFactors = FALSE)
scale_df_post[, index_item_panas] <- data.frame(lapply(scale_df_post[, index_item_panas], 
                                                      function(x) {gsub(".*în mare măsură.*", "4", x)}), stringsAsFactors = FALSE)
scale_df_post[, index_item_panas] <- data.frame(lapply(scale_df_post[, index_item_panas], 
                                                      function(x) {gsub(".*în foarte mare măsură.*", "5", x)}), stringsAsFactors = FALSE)
# Scoring
scale_df_pre$PA_Total <- ScoreLikert(scale_df_pre[, index_item_panas][c(1, 3, 5, 9, 10, 12, 14, 16, 17, 19)], 
                                    tonumeric = TRUE, napercent = .11)                              # not more than 1 NAs for 10 items
scale_df_pre$NA_Total <- ScoreLikert(scale_df_pre[, index_item_panas][c(2, 4, 6, 7, 8, 11, 13, 15, 18, 20)],
                                    tonumeric = TRUE, napercent = .11)                              # not more than 1 NAs for 10 items

scale_df_post$PA_Total <- ScoreLikert(scale_df_post[, index_item_panas][c(1, 3, 5, 9, 10, 12, 14, 16, 17, 19)], 
                                     tonumeric = TRUE, napercent = .11)                              # not more than 1 NAs for 10 items
scale_df_post$NA_Total <- ScoreLikert(scale_df_post[, index_item_panas][c(2, 4, 6, 7, 8, 11, 13, 15, 18, 20)],
                                     tonumeric = TRUE, napercent = .11)                              # not more than 1 NAs for 10 items


## PSS-SF 14 (likert 0-4). Items 4, 5, 6, 7, 9, 10, and 13 are scored in reverse direction.
index_item_pss <- 23:36
index_item_revPSS <- c(4, 5, 6, 7, 9, 10, 13)
colnames(scale_df_pre)[index_item_pss] <- sprintf("PSS_%d", 1:14)
colnames(scale_df_post)[index_item_pss] <- sprintf("PSS_%d", 1:14)

scale_df_pre[, index_item_pss] <- data.frame(lapply(scale_df_pre[, index_item_pss], 
                                      function(x) {gsub(".*niciodată.*", "0", x)}), stringsAsFactors = FALSE)
scale_df_pre[, index_item_pss] <- data.frame(lapply(scale_df_pre[, index_item_pss], 
                                      function(x) {gsub(".*aproape niciodată.*", "1", x)}), stringsAsFactors = FALSE)
scale_df_pre[, index_item_pss] <- data.frame(lapply(scale_df_pre[, index_item_pss], 
                                      function(x) {gsub(".*uneori.*", "2", x)}), stringsAsFactors = FALSE)
scale_df_pre[, index_item_pss] <- data.frame(lapply(scale_df_pre[, index_item_pss], 
                                      function(x) {gsub(".*destul de des.*", "3", x)}), stringsAsFactors = FALSE)
scale_df_pre[, index_item_pss] <- data.frame(lapply(scale_df_pre[, index_item_pss], 
                                      function(x) {gsub(".*foarte des.*", "4", x)}), stringsAsFactors = FALSE)

scale_df_post[, index_item_pss] <- data.frame(lapply(scale_df_post[, index_item_pss], 
                                                    function(x) {gsub(".*niciodată.*", "0", x)}), stringsAsFactors = FALSE)
scale_df_post[, index_item_pss] <- data.frame(lapply(scale_df_post[, index_item_pss], 
                                                    function(x) {gsub(".*aproape niciodată.*", "1", x)}), stringsAsFactors = FALSE)
scale_df_post[, index_item_pss] <- data.frame(lapply(scale_df_post[, index_item_pss], 
                                                    function(x) {gsub(".*uneori.*", "2", x)}), stringsAsFactors = FALSE)
scale_df_post[, index_item_pss] <- data.frame(lapply(scale_df_post[, index_item_pss], 
                                                    function(x) {gsub(".*destul de des.*", "3", x)}), stringsAsFactors = FALSE)
scale_df_post[, index_item_pss] <- data.frame(lapply(scale_df_post[, index_item_pss], 
                                                    function(x) {gsub(".*foarte des.*", "4", x)}), stringsAsFactors = FALSE)

# Score
scale_df_pre[, index_item_pss] <- colstonumeric(scale_df_pre[, index_item_pss])
scale_df_post[, index_item_pss] <- colstonumeric(scale_df_post[, index_item_pss])

scale_df_pre[, index_item_pss][index_item_revPSS] <- ReverseCode(scale_df_pre[, index_item_pss][index_item_revPSS], tonumeric = FALSE, min = 0, max = 4)
scale_df_post[, index_item_pss][index_item_revPSS] <- ReverseCode(scale_df_post[, index_item_pss][index_item_revPSS], tonumeric = FALSE, min = 0, max = 4)

scale_df_pre$PSS_Total <- ScoreLikert(scale_df_pre[, index_item_pss], napercent = .11)
scale_df_post$PSS_Total <- ScoreLikert(scale_df_post[, index_item_pss], napercent = .11)



# PS int  (Pro social scales - 37:47)
index_item_PSint <- 37:40
colnames(scale_df_pre)[index_item_PSint] <- sprintf("PSint_%d", 1:4)
colnames(scale_df_post)[index_item_PSint] <- sprintf("PSint_%d", 1:4)


scale_df_pre[, sprintf("PSint_%d", 1:4)] <-
  scale_df_pre[, sprintf("PSint_%d", 1:4)] %>%
  dplyr::mutate_all(readr::parse_number)


scale_df_post[, sprintf("PSint_%d", 1:4)] <-
  scale_df_post[, sprintf("PSint_%d", 1:4)] %>%
  dplyr::mutate_all(readr::parse_number)

scale_df_pre$PSint_Total <- ScoreLikert(scale_df_pre[, index_item_PSint], tonumeric = TRUE, napercent = .33)
scale_df_post$PSint_Total <- ScoreLikert(scale_df_post[, index_item_PSint], tonumeric = TRUE, napercent = .33)



# PS mot
index_item_PSmot <- 41:44   
colnames(scale_df_pre)[index_item_PSmot] <- sprintf("PSmot_%d", 1:4)
colnames(scale_df_post)[index_item_PSmot] <- sprintf("PSmot_%d", 1:4)

scale_df_pre[, sprintf("PSmot_%d", 1:4)] <-
  scale_df_pre[, sprintf("PSmot_%d", 1:4)] %>%
  dplyr::mutate_all(~case_when(stringr::str_detect(., "dezacord puternic") ~ 1,
                               stringr::str_detect(., "dezacord") ~ 2,
                               stringr::str_detect(., "neutru") ~ 3,
                               stringr::str_detect(., "acord") ~ 4,
                               stringr::str_detect(., "acord puternic") ~ 5,
                               TRUE ~ NA_real_))

scale_df_post[, sprintf("PSmot_%d", 1:4)] <-
  scale_df_post[, sprintf("PSmot_%d", 1:4)] %>%
  dplyr::mutate_all(~case_when(stringr::str_detect(., "dezacord puternic") ~ 1,
                               stringr::str_detect(., "dezacord") ~ 2,
                               stringr::str_detect(., "neutru") ~ 3,
                               stringr::str_detect(., "acord") ~ 4,
                               stringr::str_detect(., "acord puternic") ~ 5,
                               TRUE ~ NA_real_))

scale_df_pre$PSmot_Total <- ScoreLikert(scale_df_pre[, index_item_PSmot], tonumeric = TRUE, napercent = .33)
scale_df_post$PSmot_Total <- ScoreLikert(scale_df_post[, index_item_PSmot], tonumeric = TRUE, napercent = .33)



# PS iden
index_item_PSiden <- 45:47
colnames(scale_df_pre)[index_item_PSiden] <- sprintf("PSiden_%d", 1:3)
colnames(scale_df_post)[index_item_PSiden] <- sprintf("PSiden_%d", 1:3)

scale_df_pre[, sprintf("PSiden_%d", 1:3)] <-
  scale_df_pre[, sprintf("PSiden_%d", 1:3)] %>%
  dplyr::mutate_all(~case_when(stringr::str_detect(., "dezacord puternic") ~ 1,
                               stringr::str_detect(., "dezacord") ~ 2,
                               stringr::str_detect(., "neutru") ~ 3,
                               stringr::str_detect(., "acord") ~ 4,
                               stringr::str_detect(., "acord puternic") ~ 5,
                               TRUE ~ NA_real_))

scale_df_post[, sprintf("PSiden_%d", 1:3)] <-
  scale_df_post[, sprintf("PSiden_%d", 1:3)] %>%
  dplyr::mutate_all(~case_when(stringr::str_detect(., "dezacord puternic") ~ 1,
                               stringr::str_detect(., "dezacord") ~ 2,
                               stringr::str_detect(., "neutru") ~ 3,
                               stringr::str_detect(., "acord") ~ 4,
                               stringr::str_detect(., "acord puternic") ~ 5,
                               TRUE ~ NA_real_))

scale_df_pre$PSiden_Total <- ScoreLikert(scale_df_pre[, index_item_PSiden], tonumeric = TRUE, napercent = .33)
scale_df_post$PSiden_Total <- ScoreLikert(scale_df_post[, index_item_PSiden], tonumeric = TRUE, napercent = .33)


# IOS
colnames(scale_df_pre)[48] <- "IOS"
colnames(scale_df_post)[48] <- "IOS"

scale_df_pre$IOS <- as.numeric(scale_df_pre$IOS)
scale_df_post$IOS <- as.numeric(scale_df_post$IOS) 


scale_df_pre %>%
  dplyr::count(id) %>%
  dplyr::filter(n > 1)   # correct unique: 7RMN 01-27, 43GSR 04-23

scale_df_pre <- 
  scale_df_pre %>%
  dplyr::filter(!(id == "7RMN" & Date == lubridate::as_datetime("2020-07-17 14:12:37"))) %>%
  dplyr::filter(!(id == "43GSR" & Date == lubridate::as_datetime("2021-04-12 21:10:00")))
  

scale_df_post %>%
  dplyr::count(id) %>%
  dplyr::filter(n > 1)   # correct unique: 43GSR 05-03, 30GSR 05-20, 41GSR 04-28

scale_df_post <- 
  scale_df_post %>%
  dplyr::filter(!(id == "43GSR" & Date == lubridate::as_datetime("2021-04-27 15:37:57"))) %>%
  dplyr::filter(!(id == "30GSR" & Date == lubridate::as_datetime("2021-04-25 13:06:02"))) %>%
  dplyr::filter(!(id == "41GSR" & Date == lubridate::as_datetime("2021-04-25 09:15:30")))


# Unite scale df - Long Format
scale_united_long <- rbind(scale_df_pre, scale_df_post)

scale_united_long <- 
  scale_united_long %>%
  dplyr::group_by(id) %>%
  dplyr::filter(n() > 1) %>%
  dplyr::ungroup() %>%
  dplyr::mutate(PrePost = factor(PrePost, levels = c("Pre", "Post")))

4 Whole samples

4.0.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                   xlab = "", ylab = "PSS",
                   title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                   xlab = "", ylab = "PSS",
                   title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

4.0.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                   xlab = "", ylab = "NA",
                   title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                   xlab = "", ylab = "NA",
                   title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                   xlab = "", ylab = "PA",
                   title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                   xlab = "", ylab = "PA",
                   title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

4.0.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                   xlab = "", ylab = "PSint",
                   title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                   xlab = "", ylab = "PSint",
                   title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                   xlab = "", ylab = "PSmot",
                   title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                   xlab = "", ylab = "PSmot",
                   title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                   xlab = "", ylab = "PSiden",
                   title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                   xlab = "", ylab = "PSiden",
                   title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

4.0.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                   xlab = "", ylab = "IOS",
                   title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                   xlab = "", ylab = "IOS",
                   title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5 By group

5.1 Normal Pop

5.1.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.1.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.1.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.1.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.2 PTSD

5.2.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.2.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.2.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.2.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.3 Burnout

5.3.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.3.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.3.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

5.3.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6 Only online

6.1 Normal Pop

6.1.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.1.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.1.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.1.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.2 PTSD

6.2.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.2.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.2.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.2.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.3 Burnout

6.3.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.3.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.3.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

6.3.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "online") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7 Only GSR

7.1 Normal Pop

7.1.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.1.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.1.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.1.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.2 PTSD

7.2.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.2.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.2.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.2.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "PTSD", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.3 Burnout

7.3.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.3.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.3.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

7.3.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "CONTROL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "CONTROL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "Burnout", Exp_type == "GSR") %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

8 Only RMN & OXT

8.1 Normal Pop (has only Normal Pop and EXPERIMENTAL)

8.1.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

8.1.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

8.1.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

8.1.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

9 GSR, RMN & OXT

9.1 Normal Pop (has only Normal Pop and EXPERIMENTAL)

9.1.1 PSS

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("GSR", "RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PSS_Total, outlier.label = id, 
                    xlab = "", ylab = "PSS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

9.1.2 PANAS

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("GSR", "RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = NA_Total, outlier.label = id, 
                    xlab = "", ylab = "NA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("GSR", "RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PA_Total, outlier.label = id, 
                    xlab = "", ylab = "PA",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

9.1.3 Prosocial

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("GSR", "RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PSint_Total, outlier.label = id, 
                    xlab = "", ylab = "PSint",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("GSR", "RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PSmot_Total, outlier.label = id, 
                    xlab = "", ylab = "PSmot",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("GSR", "RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = PSiden_Total, outlier.label = id, 
                    xlab = "", ylab = "PSiden",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.

9.1.4 IOS

scale_united_long %>%
  dplyr::filter(Cond == "EXPERIMENTAL", Grup == "pop gen", Exp_type %in% c("GSR", "RMN", "OXT")) %>%
  my_ggwithinstats2(x = PrePost, y = IOS, outlier.label = id, 
                    xlab = "", ylab = "IOS",
                    title = "EXPERIMENTAL")
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.


10 Session Info

R version 4.1.0 (2021-05-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8.1 x64 (build 9600)

Matrix products: default

locale:
[1] LC_COLLATE=Romanian_Romania.1250  LC_CTYPE=Romanian_Romania.1250    LC_MONETARY=Romanian_Romania.1250 LC_NUMERIC=C                     
[5] LC_TIME=Romanian_Romania.1250    
system code page: 1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] rio_0.5.27                 scales_1.1.1               ggpubr_0.4.0               rstatix_0.7.0              broom_0.7.9               
 [6] PerformanceAnalytics_2.0.4 xts_0.12.1                 zoo_1.8-9                  psych_2.1.6                forcats_0.5.1             
[11] stringr_1.4.0              dplyr_1.0.7                purrr_0.3.4                readr_2.0.1                tidyr_1.1.3               
[16] tibble_3.1.4               ggplot2_3.3.5              tidyverse_1.3.1            papaja_0.1.0.9997          pacman_0.5.1              

loaded via a namespace (and not attached):
  [1] readxl_1.3.1              pairwiseComparisons_3.1.6 backports_1.2.1           plyr_1.8.6                splines_4.1.0            
  [6] gmp_0.6-2                 kSamples_1.2-9            ipmisc_6.0.2              TH.data_1.0-10            digest_0.6.28            
 [11] SuppDists_1.1-9.5         fansi_0.5.0               magrittr_2.0.1            memoise_2.0.0             paletteer_1.4.0          
 [16] tzdb_0.1.2                openxlsx_4.2.4            modelr_0.1.8              sandwich_3.0-1            colorspace_2.0-2         
 [21] rvest_1.0.1               ggrepel_0.9.1             haven_2.4.3               xfun_0.25                 crayon_1.4.1             
 [26] jsonlite_1.7.2            zeallot_0.1.0             survival_3.2-13           glue_1.4.2                gtable_0.3.0             
 [31] emmeans_1.6.3             MatrixModels_0.5-0        statsExpressions_1.1.0    car_3.0-11                Rmpfr_0.8-4              
 [36] abind_1.4-5               mvtnorm_1.1-2             DBI_1.1.1                 PMCMRplus_1.9.0           Rcpp_1.0.7               
 [41] xtable_1.8-4              performance_0.7.3         tmvnsim_1.0-2             foreign_0.8-81            datawizard_0.2.0.1       
 [46] httr_1.4.2                ellipsis_0.3.2            farver_2.1.0              pkgconfig_2.0.3           reshape_0.8.8            
 [51] multcompView_0.1-8        dbplyr_2.1.1              utf8_1.2.2                janitor_2.1.0             labeling_0.4.2           
 [56] tidyselect_1.1.1          rlang_0.4.11              effectsize_0.4.5          munsell_0.5.0             cellranger_1.1.0         
 [61] tools_4.1.0               cachem_1.0.6              cli_3.0.1                 ggprism_1.0.3             generics_0.1.0           
 [66] fastmap_1.1.0             BWStest_0.2.2             rematch2_2.1.2            knitr_1.33                fs_1.5.0                 
 [71] zip_2.2.0                 WRS2_1.1-3                pbapply_1.4-3             nlme_3.1-152              xml2_1.3.2               
 [76] correlation_0.7.0         compiler_4.1.0            rstudioapi_0.13           curl_4.3.2                ggsignif_0.6.2           
 [81] reprex_2.0.1              stringi_1.7.4             parameters_0.14.0         lattice_0.20-44           Matrix_1.3-4             
 [86] vctrs_0.3.8               pillar_1.6.3              lifecycle_1.0.1           mc2d_0.1-21               estimability_1.3         
 [91] data.table_1.14.0         insight_0.14.4            patchwork_1.1.1           R6_2.5.1                  BayesFactor_0.9.12-4.2   
 [96] codetools_0.2-18          boot_1.3-28               MASS_7.3-54               gtools_3.9.2              assertthat_0.2.1         
[101] withr_2.4.2               mnormt_2.0.2              multcomp_1.4-17           bayestestR_0.11.0         parallel_4.1.0           
[106] hms_1.1.0                 quadprog_1.5-8            grid_4.1.0                coda_0.19-4               snakecase_0.11.0         
[111] carData_3.0-4             lubridate_1.7.10          ggstatsplot_0.8.0        
 

A work by Claudiu Papasteri

 

LS0tDQp0aXRsZTogIjxicj4gUEE0IiANCnN1YnRpdGxlOiAiUmVwb3J0Ig0KYXV0aG9yOiAiPGJyPiBDbGF1ZGl1IFBhcGFzdGVyaSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVtICVZJylgIg0Kb3V0cHV0OiANCiAgICBodG1sX25vdGVib29rOg0KICAgICAgICAgICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgICAgICAgICB0b2M6IHRydWUNCiAgICAgICAgICAgIHRvY19kZXB0aDogMg0KICAgICAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgICAgICAgICB0aGVtZTogc3BhY2VsYWINCiAgICAgICAgICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbA0KICAgICAgICAgICAgZmlnX3dpZHRoOiAxMA0KICAgICAgICAgICAgZmlnX2hlaWdodDogOQ0KICAgICMgcGRmX2RvY3VtZW50OiANCiAgICAgICAgICAgICMgdG9jOiB0cnVlDQogICAgICAgICAgICAjICB0b2NfZGVwdGg6IDINCiAgICAgICAgICAgICMgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgICAgICAgICAgIyBmb250c2l6ZTogMTFwdA0KICAgICAgICAgICAgIyBnZW9tZXRyeTogbWFyZ2luPTFpbg0KICAgICAgICAgICAgIyBmaWdfd2lkdGg6IDcNCiAgICAgICAgICAgICMgZmlnX2hlaWdodDogNg0KICAgICAgICAgICAgIyBmaWdfY2FwdGlvbjogdHJ1ZQ0KICAgICMgZ2l0aHViX2RvY3VtZW50OiANCiAgICAgICAgICAgICMgdG9jOiB0cnVlDQogICAgICAgICAgICAjIHRvY19kZXB0aDogMg0KICAgICAgICAgICAgIyBodG1sX3ByZXZpZXc6IGZhbHNlDQogICAgICAgICAgICAjIGZpZ193aWR0aDogNQ0KICAgICAgICAgICAgIyBmaWdfaGVpZ2h0OiA1DQogICAgICAgICAgICAjIGRldjoganBlZw0KLS0tDQoNCg0KPCEtLSBTZXR1cCAtLT4NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCiMga2ludHIgb3B0aW9ucw0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBjb21tZW50ID0gIiMiLA0KICBjb2xsYXBzZSA9IFRSVUUsDQogIGVycm9yID0gVFJVRSwNCiAgZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBjYWNoZSA9IFRSVUUgICAgICAgIyBlY2hvID0gRmFsc2UgZm9yIGdpdGh1Yl9kb2N1bWVudCwgYnV0IHdpbGwgYmUgZm9sZGVkIGluIGh0bWxfbm90ZWJvb2sNCikNCg0KIyBHZW5lcmFsIFIgb3B0aW9ucyBhbmQgaW5mbw0Kc2V0LnNlZWQoMTExKSAgICAgICAgICAgICAgICMgaW4gY2FzZSB3ZSB1c2UgcmFuZG9taXplZCBwcm9jZWR1cmVzICAgICAgIA0Kb3B0aW9ucyhzY2lwZW4gPSA5OTkpICAgICAgICMgcG9zaXRpdmUgdmFsdWVzIGJpYXMgdG93YXJkcyBmaXhlZCBhbmQgbmVnYXRpdmUgdG93YXJkcyBzY2llbnRpZmljIG5vdGF0aW9uDQoNCiMgTG9hZCBwYWNrYWdlcw0KaWYgKCFyZXF1aXJlKCJwYWNtYW4iKSkgaW5zdGFsbC5wYWNrYWdlcygicGFjbWFuIikNCnBhY2thZ2VzIDwtIGMoDQogICJwYXBhamEiLA0KICAidGlkeXZlcnNlIiwgICAgICAgDQogICJwc3ljaCIsICJQZXJmb3JtYW5jZUFuYWx5dGljcyIsICAgICAgICAgIA0KICAiYnJvb20iLCAicnN0YXRpeCIsDQogICJnZ3B1YnIiLCAic2NhbGVzIiwgICAgICAgIA0KICAicmlvIg0KICAjICwgLi4uDQopDQppZiAoIXJlcXVpcmUoInBhY21hbiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iKQ0KcGFjbWFuOjpwX2xvYWQoY2hhciA9IHBhY2thZ2VzKQ0KDQojIFRoZW1lcyBmb3IgZ2dwbG90MiBwbG90aW5nIChoZXJlIHVzZWQgQVBBIHN0eWxlKQ0KdGhlbWVfc2V0KHRoZW1lX2FwYSgpKQ0KYGBgDQoNCg0KPCEtLSBSZXBvcnQgLS0+DQoNCiMgRGVmaW5lIGZ1bmN0aW9ucw0KDQpgYGB7ciBkZWZfZnVuY30NCiMjIERlZmluZSBmdW5jdGlvbiB0aGF0IHJlY29kZXMgdG8gbnVtZXJpYywgYnV0IHdhdGNoZXMgb3V0IHRvIGNvZXJjaW9uIHRvIG5vdCBpbnRyb2R1Y2UgTkFzDQpjb2xzdG9udW1lcmljIDwtIGZ1bmN0aW9uKGRmKXsNCiAgdHJ5Q2F0Y2goew0KICAgIGRmX251bSA8LSBhcy5kYXRhLmZyYW1lKA0KICAgICAgbGFwcGx5KGRmLA0KICAgICAgICAgICAgIGZ1bmN0aW9uKHgpIHsgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeCkpfSkpIA0KICB9LHdhcm5pbmcgPSBmdW5jdGlvbihzdG9wX29uX3dhcm5pbmcpIHsNCiAgICBtZXNzYWdlKCJTdG9wZWQgdGhlIGV4ZWN1dGlvbiBvZiBudW1lcmljIGNvbnZlcnNpb246ICIsIGNvbmRpdGlvbk1lc3NhZ2Uoc3RvcF9vbl93YXJuaW5nKSkNCiAgfSkgDQp9DQojIw0KIyMgRGVmaW5lIGZ1bmN0aW9uIHRoYXQgcmV2ZXJzZSBjb2RlcyBpdGVtcw0KUmV2ZXJzZUNvZGUgPC0gZnVuY3Rpb24oZGYsIHRvbnVtZXJpYyA9IEZBTFNFLCBtaW4gPSBOVUxMLCBtYXggPSBOVUxMKSB7DQogIGlmKHRvbnVtZXJpYykgZGYgPC0gY29sc3RvbnVtZXJpYyhkZikNCiAgZGYgPC0gKG1heCArIG1pbikgLSBkZg0KfQ0KIyMNCiMjIERlZmluZSBmdW5jdGlvbiB0aGF0IHNjb3JlcyBvbmx5IHJvd3Mgd2l0aCBsZXNzIHRoYW4gMTAlIE5BcyAocmV0dXJucyBOQSBpZiBhbGwgb3IgYWJvdmUgdGhyZXNob2xkIHBlcmNlbnRhZ2Ugb2Ygcm93cyBhcmUgTkEpOyBjYW4gcmV2ZXJzZSBjb2RlIGlmIHZlY3RvciBvZiBjb2x1bW4gaW5kZXhlcyBhbmQgbWluLCBtYXggYXJlIHByb3ZpZGVkLg0KU2NvcmVMaWtlcnQgPC0gZnVuY3Rpb24oZGYsIG5hcGVyY2VudCA9IC4xLCB0b251bWVyaWMgPSBGQUxTRSwgcmV2ZXJzZWNvbHMgPSBOVUxMLCBtaW4gPSBOVUxMLCBtYXggPSBOVUxMKSB7DQogIHJldmVyc2VfbGlzdCA8LSBsaXN0KHJldmVyc2Vjb2xzID0gcmV2ZXJzZWNvbHMsIG1pbiA9IG1pbiwgbWF4ID0gbWF4KQ0KICByZXZlcnNlX2NoZWNrIDwtICFzYXBwbHkocmV2ZXJzZV9saXN0LCBpcy5udWxsKQ0KICANCiAgIyBSZWNvZGUgdG8gbnVtZXJpYywgYnV0IHdhdGNoIG91dCB0byBjb2VyY2lvbiB0byBub3QgaW50cm9kdWNlIE5Bcw0KICBjb2xzdG9udW1lcmljIDwtIGZ1bmN0aW9uKGRmKXsNCiAgICB0cnlDYXRjaCh7DQogICAgICBkZl9udW0gPC0gYXMuZGF0YS5mcmFtZSgNCiAgICAgICAgbGFwcGx5KGRmLA0KICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkgeyBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih4KSl9KSkgDQogICAgfSx3YXJuaW5nID0gZnVuY3Rpb24oc3RvcF9vbl93YXJuaW5nKSB7DQogICAgICBtZXNzYWdlKCJTdG9wZWQgdGhlIGV4ZWN1dGlvbiBvZiBudW1lcmljIGNvbnZlcnNpb246ICIsIGNvbmRpdGlvbk1lc3NhZ2Uoc3RvcF9vbl93YXJuaW5nKSkNCiAgICB9KSANCiAgfQ0KICANCiAgaWYodG9udW1lcmljKSBkZiA8LSBjb2xzdG9udW1lcmljKGRmKQ0KICANCiAgaWYoYWxsKHJldmVyc2VfY2hlY2spKXsNCiAgICBkZlsgLHJldmVyc2Vjb2xzXSA8LSAobWF4ICsgbWluKSAtIGRmWyAscmV2ZXJzZWNvbHNdDQogIH1lbHNlIGlmKGFueShyZXZlcnNlX2NoZWNrKSl7DQogICAgc3RvcCgiSW5zdWZpY2llbnQgaW5mbyBmb3IgcmV2ZXJzaW5nLiBQbGVhc2UgcHJvdmlkZTogIiwgcGFzdGUobmFtZXMocmV2ZXJzZV9saXN0KVshcmV2ZXJzZV9jaGVja10sIGNvbGxhcHNlID0gIiwgIikpDQogIH0NCiAgDQogIGlmZWxzZShyb3dTdW1zKGlzLm5hKGRmKSkgPiBuY29sKGRmKSAqIG5hcGVyY2VudCwNCiAgICAgICAgIE5BLA0KICAgICAgICAgcm93U3VtcyhkZiwgbmEucm0gPSBUUlVFKSAqIE5BIF4gKHJvd1N1bXMoIWlzLm5hKGRmKSkgPT0gMCkNCiAgKQ0KfQ0KIyMNCmBgYA0KDQoNCmBgYHtyfQ0KbXlfZ2d3aXRoaW5zdGF0cyA8LSBmdW5jdGlvbihkYXRhLCB0aXRsZSwgeCwgeSwgb3V0bGllci5sYWJlbCwgeGxhYiwgeWxhYikgew0KICB4IDwtIHJsYW5nOjplbnF1byh4KQ0KICB5IDwtIHJsYW5nOjplbnF1byh5KQ0KICBvdXRsaWVyLmxhYmVsIDwtIHJsYW5nOjplbnF1byhvdXRsaWVyLmxhYmVsKQ0KICANCiAgZGF0YSAlPiUNCiAgICBnZ3N0YXRzcGxvdDo6Z2d3aXRoaW5zdGF0cygNCiAgICAgIHggPSAhIXgsDQogICAgICB5ID0gISF5LA0KICAgICAgdGl0bGUgPSB0aXRsZSwNCiAgICAgIHhsYWIgPSB4bGFiLA0KICAgICAgeWxhYiA9IHlsYWIsDQogICAgICBvdXRsaWVyLnRhZ2dpbmcgPSBUUlVFLCAgICAgICAgICAgICMgd2hldGhlciBvdXRsaWVycyBuZWVkIHRvIGJlIHRhZ2dlZA0KICAgICAgb3V0bGllci5sYWJlbCA9ICEhb3V0bGllci5sYWJlbCwgICAjIHZhcmlhYmxlIHRvIGJlIHVzZWQgZm9yIHRhZ2dpbmcgb3V0bGllcnMNCiAgICAgIG91dGxpZXIuY29lZiA9IDIsDQogICAgICBwYWlyd2lzZS5jb21wYXJpc29ucyA9IFRSVUUsDQogICAgICBwYWlyd2lzZS5kaXNwbGF5ID0gInNpZ25pZmljYW50IiwNCiAgICAgIHJlc3VsdHMuc3VidGl0bGUgPSBUUlVFLA0KICAgICAgdHlwZSA9ICJwYXJhbWV0cmljIiwNCiAgICAgIGJmLm1lc3NhZ2UgPSBGQUxTRSwgDQogICAgICBwLmFkanVzdC5tZXRob2QgPSAibm9uZSIsDQogICAgICBwb2ludC5wYXRoID0gVFJVRSwNCiAgICAgIGdndGhlbWUgPSBnZ3ByaXNtOjp0aGVtZV9wcmlzbSgpLA0KICAgICAgIyBwYWNrYWdlID0gIlJDb2xvckJyZXdlciIsICAjICJnZ3NjaSIsDQogICAgICAjIHBhbGV0dGUgPSAiRGFyayIsICAgICAgICAgIyAiZGVmYXVsdF9qY28iLA0KICAgICAgdmlvbGluLmFyZ3MgPSBsaXN0KHdpZHRoID0gMC45LCBhbHBoYSA9IDAuMiwgc2l6ZSA9IDEsIGNvbG9yID0gImJsYWNrIiksDQogICAgICBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSA1LCBjb2xvciA9ICJkYXJrcmVkIiksDQogICAgICBjZW50cmFsaXR5LmxhYmVsLmFyZ3MgPSBsaXN0KHNpemUgPSAzLCBudWRnZV94ID0gMC4yLCBzZWdtZW50LmxpbmV0eXBlID0gNSwgZmlsbCA9ICIjRkZGOEU3IiksIA0KICAgICAgZ2dwbG90LmNvbXBvbmVudCA9IGxpc3QoDQogICAgICAgIHRoZW1lKA0KICAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLCBzaXplID0gMTYpLA0KICAgICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLCBzaXplID0gMTIpLCANCiAgICAgICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLCBzaXplID0gMTIpLCANCiAgICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCkNCiAgICAgICkpDQogICAgKSArIHNjYWxlX2NvbG91cl9ncmV5KHN0YXJ0ID0gMC4yLCBlbmQgPSAwLjIpICAgIyBoYWNreSB3YXkgdG8gY2hhbmdlIHBvaW50IGNvbG9yDQp9DQoNCiMgRm9yIHB1YmxpY2F0aW9uDQpteV9nZ3dpdGhpbnN0YXRzMiA8LSBmdW5jdGlvbihkYXRhLCB0aXRsZSwgeCwgeSwgb3V0bGllci5sYWJlbCwgeGxhYiwgeWxhYiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaWVyLnRhZ2dpbmcgPSBGQUxTRSwgcmVzdWx0cy5zdWJ0aXRsZSA9IFRSVUUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudHJhbGl0eS5sYWJlbC5hcmdzID0gVFJVRSwgcG9pbnQucGF0aCA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gInBhcmFtZXRyaWMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgeyAgIyAuLi4gZm9yIGxpbWl0cyBhbmQgYnJlYWtzDQogIHggPC0gcmxhbmc6OmVucXVvKHgpDQogIHkgPC0gcmxhbmc6OmVucXVvKHkpDQogIG91dGxpZXIubGFiZWwgPC0gcmxhbmc6OmVucXVvKG91dGxpZXIubGFiZWwpDQogIA0KICBpZihjZW50cmFsaXR5LmxhYmVsLmFyZ3Mpew0KICAgIGNlbnRyYWxpdHkubGFiZWwuYXJncyA8LSBsaXN0KHNpemUgPSAzLCBudWRnZV94ID0gMC4yLCBzZWdtZW50LmxpbmV0eXBlID0gNSwgZmlsbCA9ICIjRkZGOEU3IikNCiAgfWVsc2V7DQogICAgY2VudHJhbGl0eS5sYWJlbC5hcmdzIDwtIGxpc3Qoc2l6ZSA9IDAsIG51ZGdlX3ggPSAxMCwgc2VnbWVudC5saW5ldHlwZSA9IDAsIGFscGhhID0gMCkgIyB2ZXJ5IGhhY2t5IHdheSBvZiBub3Qgc2hvd2luZyBsYWJlbA0KICB9DQogIA0KICBkYXRhICU+JQ0KICAgIGdnc3RhdHNwbG90OjpnZ3dpdGhpbnN0YXRzKA0KICAgICAgeCA9ICEheCwNCiAgICAgIHkgPSAhIXksDQogICAgICB0aXRsZSA9IHRpdGxlLA0KICAgICAgeGxhYiA9IHhsYWIsDQogICAgICB5bGFiID0geWxhYiwNCiAgICAgIG91dGxpZXIudGFnZ2luZyA9IG91dGxpZXIudGFnZ2luZywgICAgICAgICAgICAgICAgICAgICMgd2hldGhlciBvdXRsaW5lcyBuZWVkIHRvIGJlIHRhZ2dlZA0KICAgICAgb3V0bGllci5sYWJlbCA9ICEhb3V0bGllci5sYWJlbCwgICAgICAgICAgICAgICAgICAgICAgIyB2YXJpYWJsZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nIG91dGxpZXJzDQogICAgICBvdXRsaWVyLmNvZWYgPSAyLA0KICAgICAgcGFpcndpc2UuY29tcGFyaXNvbnMgPSBUUlVFLA0KICAgICAgcGFpcndpc2UuZGlzcGxheSA9ICJhbGwiLA0KICAgICAgcmVzdWx0cy5zdWJ0aXRsZSA9IHJlc3VsdHMuc3VidGl0bGUsDQogICAgICB0eXBlID0gdHlwZSwNCiAgICAgIGJmLm1lc3NhZ2UgPSBGQUxTRSwgDQogICAgICBwLmFkanVzdC5tZXRob2QgPSAibm9uZSIsDQogICAgICBwb2ludC5wYXRoID0gcG9pbnQucGF0aCwNCiAgICAgIGdndGhlbWUgPSBnZ3ByaXNtOjp0aGVtZV9wcmlzbSgpLA0KICAgICAgIyBwYWNrYWdlID0gIlJDb2xvckJyZXdlciIsICAjICJnZ3NjaSIsDQogICAgICAjIHBhbGV0dGUgPSAiRGFyayIsICAgICAgICAgIyAiZGVmYXVsdF9qY28iLA0KICAgICAgdmlvbGluLmFyZ3MgPSBsaXN0KHdpZHRoID0gMC45LCBhbHBoYSA9IDAuMiwgc2l6ZSA9IDEsIGNvbG9yID0gImJsYWNrIiksDQogICAgICBjZW50cmFsaXR5LnBsb3R0aW5nID0gVFJVRSwNCiAgICAgIGNlbnRyYWxpdHkudHlwZSA9ICJwYXJhbWV0ZXJpYyIsDQogICAgICBjZW50cmFsaXR5LnBvaW50LmFyZ3MgPSBsaXN0KHNpemUgPSA1LCBjb2xvciA9ICJkYXJrcmVkIiksDQogICAgICBjZW50cmFsaXR5LmxhYmVsLmFyZ3MgPSBjZW50cmFsaXR5LmxhYmVsLmFyZ3MsDQogICAgICBnZ3Bsb3QuY29tcG9uZW50ID0gbGlzdCgNCiAgICAgICAgdGhlbWUoDQogICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSAxNiksDQogICAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSAxMiksIA0KICAgICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSAxMiksIA0KICAgICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KQ0KICAgICAgKSkNCiAgICApICsgc2NhbGVfY29sb3VyX2dyZXkoc3RhcnQgPSAwLjIsIGVuZCA9IDAuMikgKyAgIyBoYWNreSB3YXkgdG8gY2hhbmdlIHBvaW50IGNvbG9yDQogICAgc2NhbGVfeV9jb250aW51b3VzKC4uLikNCn0NCg0KIyBGYXN0IGdnc2F2ZSAtIHNhdmVzIHBsb3Qgd2l0aCBmaWxlbmFtZSBvZiBSIHBsb3Qgb2JqZWN0DQpmYXN0X2dnc2F2ZSA8LSBmdW5jdGlvbihwbG90LCBkZXZpY2UgPSAicG5nIiwgcGF0aCA9IE5VTEwsDQogICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJpbiIsIGRwaSA9IDMwMCwgd2lkdGggPSA1LCBoZWlnaHQgPSA1LCAuLi4peyANCiAgcGxvdF9uYW1lIDwtIGRlcGFyc2Uoc3Vic3RpdHV0ZShwbG90KSkNCiAgZ2dwbG90Mjo6Z2dzYXZlKGZpbGVuYW1lID0gcGFzdGUwKHBsb3RfbmFtZSwgIi4iLCBkZXZpY2UpLCBwbG90ID0gcGxvdCwNCiAgICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZSwgcGF0aCA9IHBhdGgsDQogICAgICAgICAgICAgICAgICB1bml0cyA9IHVuaXRzLCBkcGkgPSBkcGksDQogICAgICAgICAgICAgICAgICB3aWR0aCA9IHdpZHRoLCBoZWlnaHQgPSBoZWlnaHQsDQogICAgICAgICAgICAgICAgICAuLi4NCiAgKQ0KICANCn0gIyB1c2U6IGZhc3RfZ2dzYXZlKGpyYWRfb3hfcCwgcGF0aCA9IHNhdmVmb2xkZXIpDQpgYGANCg0KDQoNCg0KIyBSZWFkLCBDbGVhbiwgUmVjb2RlDQoNCmBgYHtyIHJlZF9jbGVhbl9yZWNvZGVfbWVyZ2UsIHJlc3VsdHM9J2hpZGUnLCBtZXNzYWdlPUZBTFNFfQ0KI35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCiMgUmVhZCwgQ2xlYW4sIFJlY29kZSwgVW5pdGUNCiN+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQoNCiMjIFJlYWQgZmlsZXMNCmZvbGRlciA8LSAiQzovVXNlcnMvTWloYWkvRGVza3RvcC9SIE5vdGVib29rcy9ub3RlYm9va3MvUEE0LWZ1bGwtcmVwb3J0Ig0KZmlsZSA8LSAiU2NhbGUgY29tcGxldGUgdHJpYXRlIFNvZmkgcGE0Lnhsc3giDQoNCnNldHdkKGZvbGRlcikNCg0KIyMgSUQgZGYNCmlkX2RmIDwtIHJpbzo6aW1wb3J0KGZpbGUucGF0aChmb2xkZXIsIGZpbGUpLA0KICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IDAsIGNvbE5hbWVzID0gRkFMU0UsIHdoaWNoID0gImluY2FkcmFyaSIpICAgDQoNCmlkX2RmIDwtIGlkX2RmWywgMTo0XQ0KY29sbmFtZXMoaWRfZGYpIDwtIGMoIkdydXAiLCAiQ29uZCIsICJpZCIsICJlbWFpbCIpDQoNCmlkX2RmIDwtIA0KICBpZF9kZiAlPiUNCiAgamFuaXRvcjo6cmVtb3ZlX2VtcHR5KCJyb3dzIikgJT4lIA0KICBkcGx5cjo6bXV0YXRlKGlkID0gc3RyaW5ncjo6c3RyX3JlbW92ZShpZCwgIl4wKyIpLCAgICAgICAgICAgICAgIyByZW1vdmUgbGVhZGluZyB6ZXJvcw0KICAgICAgICAgICAgICAgIGlkID0gc3RyaW5ncjo6c3RyX3JlbW92ZV9hbGwoaWQsICJbWzpibGFuazpdXSIpLCAgIyByZW1vdmUgYW55IHdoaXRlIHNwYWNlDQogICAgICAgICAgICAgICAgaWQgPSAgdG91cHBlcihpZCkpICU+JQ0KICBkcGx5cjo6bXV0YXRlKENvbmQgPSBzdHJpbmdyOjpzdHJfcmVwbGFjZShDb25kLCAiMTJDT05UUk9MIiwgIkNPTlRST0wiKSwgICAjIGZpeCB0eXBvDQogICAgICAgICAgICAgICAgR3J1cCA9IHN0cmluZ3I6OnN0cl9yZXBsYWNlKEdydXAsICJidXJub3V0IiwgIkJ1cm5vdXQiKSwNCiAgICAgICAgICAgICAgICBHcnVwID0gc3RyaW5ncjo6c3RyX3JlcGxhY2UoR3J1cCwgInBvcCBnZW5lcmFsYSIsICJwb3AgZ2VuIiksDQogICAgICAgICAgICAgICAgR3J1cCA9IHN0cmluZ3I6OnN0cl9yZXBsYWNlKEdydXAsICJvbGQiLCAicG9wIGdlbiIpKSAlPiUNCiAgZHBseXI6Om11dGF0ZShHcnVwID0gZHBseXI6OmlmX2Vsc2UoaXMubmEoR3J1cCksICJwb3AgZ2VuIiwgR3J1cCkpDQoNCmlkX2RmIDwtIA0KICBpZF9kZiAlPiUNCiAgdGlkeXI6OnNlcGFyYXRlKGlkLCANCiAgICAgICAgICAgaW50byA9IGMoImlkX251bSIsICJFeHBfdHlwZSIpLCANCiAgICAgICAgICAgc2VwID0gIig/PD1bMC05XSkoPz1bQS1aYS16XSkiLCAgICAgIyA/PD0gaXMgImxvb2sgYmVoaW5kIg0KICAgICAgICAgICByZW1vdmUgPSBGQUxTRQ0KICAgICAgICAgICApICU+JQ0KICBkcGx5cjo6c2VsZWN0KC1pZF9udW0pICU+JQ0KICBkcGx5cjo6bXV0YXRlKEV4cF90eXBlID0gZHBseXI6OmlmX2Vsc2UoRXhwX3R5cGUgJWluJSBjKCJBIiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiUiIsICJYIiksICJvbmxpbmUiLCBFeHBfdHlwZSkpDQoNCiMjIFNjYWxlIA0Kc2NhbGVfZGZfcHJlIDwtIHJpbzo6aW1wb3J0KGZpbGUucGF0aChmb2xkZXIsIGZpbGUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgPSAwLCB3aGljaCA9ICJTY2FsZSB6aTEiKSANCnNjYWxlX2RmX3Bvc3QgPC0gcmlvOjppbXBvcnQoZmlsZS5wYXRoKGZvbGRlciwgZmlsZSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgPSAwLCB3aGljaCA9ICJTY2FsZSB6aTUiKSANCg0KZGlmX2NvbCA8LSB3aGljaChjb2xuYW1lcyhzY2FsZV9kZl9wcmUpID09IHNldGRpZmYoY29sbmFtZXMoc2NhbGVfZGZfcHJlKSwgY29sbmFtZXMoc2NhbGVfZGZfcG9zdCkpKQ0Kc2NhbGVfZGZfcHJlIDwtIHNjYWxlX2RmX3ByZVssIC0gZGlmX2NvbF0NCnNjYWxlX2RmX3ByZSA8LSBzY2FsZV9kZl9wcmVbLCAtIGMoMSwgMzo3KV0NCnNjYWxlX2RmX3Bvc3QgPC0gc2NhbGVfZGZfcG9zdFssIC0gYygxLCAzOjcpXQ0KaWRlbnRpY2FsKGNvbG5hbWVzKHNjYWxlX2RmX3ByZSksIGNvbG5hbWVzKHNjYWxlX2RmX3Bvc3QpKQ0KDQpzY2FsZV9kZl9wcmUgPC0gc2NhbGVfZGZfcHJlWy0xLCBdDQpjb2xuYW1lcyhzY2FsZV9kZl9wcmUpWzFdIDwtICJEYXRlIg0KY29sbmFtZXMoc2NhbGVfZGZfcHJlKVsyXSA8LSAiaWQiDQpzY2FsZV9kZl9wcmUgPC0gDQogIHNjYWxlX2RmX3ByZSAlPiUNCiAgamFuaXRvcjo6cmVtb3ZlX2VtcHR5KCJyb3dzIikgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIGVtcHR5IHJvd3MgaWYgYW55DQogIGRwbHlyOjptdXRhdGUoaWQgPSBzdHJpbmdyOjpzdHJfcmVtb3ZlKGlkLCAiXjArIiksICAgICAgICAgICAgICAjIHJlbW92ZSBsZWFkaW5nIHplcm9zDQogICAgICAgICAgICAgICAgaWQgPSBzdHJpbmdyOjpzdHJfcmVtb3ZlX2FsbChpZCwgIltbOmJsYW5rOl1dIiksICAjIHJlbW92ZSBhbnkgd2hpdGUgc3BhY2UNCiAgICAgICAgICAgICAgICBpZCA9ICB0b3VwcGVyKGlkKSkgICU+JQ0KICBkcGx5cjo6bXV0YXRlX2lmKGlzLmNoYXJhY3RlciwgfmRwbHlyOjpuYV9pZiguLCAiTm90IEFuc3dlcmVkIikpICU+JQ0KICBkcGx5cjo6bXV0YXRlKERhdGUgPSBsdWJyaWRhdGU6OmFzX2RhdGV0aW1lKERhdGUpKSAlPiUNCiAgZHBseXI6OmFycmFuZ2UoRGF0ZSkNCg0KDQpzY2FsZV9kZl9wb3N0IDwtIHNjYWxlX2RmX3Bvc3RbLTEsIF0NCmNvbG5hbWVzKHNjYWxlX2RmX3Bvc3QpWzFdIDwtICJEYXRlIg0KY29sbmFtZXMoc2NhbGVfZGZfcG9zdClbMl0gPC0gImlkIg0Kc2NhbGVfZGZfcG9zdCA8LSANCiAgc2NhbGVfZGZfcG9zdCAlPiUNCiAgamFuaXRvcjo6cmVtb3ZlX2VtcHR5KCJyb3dzIikgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIGVtcHR5IHJvd3MgaWYgYW55DQogIGRwbHlyOjptdXRhdGUoaWQgPSBzdHJpbmdyOjpzdHJfcmVtb3ZlKGlkLCAiXjArIiksICAgICAgICAgICAgICAjIHJlbW92ZSBsZWFkaW5nIHplcm9zDQogICAgICAgICAgICAgICAgaWQgPSBzdHJpbmdyOjpzdHJfcmVtb3ZlX2FsbChpZCwgIltbOmJsYW5rOl1dIiksICAjIHJlbW92ZSBhbnkgd2hpdGUgc3BhY2UNCiAgICAgICAgICAgICAgICBpZCA9ICB0b3VwcGVyKGlkKSkgICU+JQ0KICBkcGx5cjo6bXV0YXRlX2lmKGlzLmNoYXJhY3RlciwgfmRwbHlyOjpuYV9pZiguLCAiTm90IEFuc3dlcmVkIikpICU+JQ0KICBkcGx5cjo6bXV0YXRlKERhdGUgPSBsdWJyaWRhdGU6OmFzX2RhdGV0aW1lKERhdGUpKSAlPiUNCiAgZHBseXI6OmFycmFuZ2UoRGF0ZSkNCg0KDQpzZXRkaWZmKGlkX2RmJGlkLCBzY2FsZV9kZl9wcmUkaWQpDQoNCiMgTWVyZ2Ugd2l0aCBpZA0Kc2NhbGVfZGZfcHJlIDwtIGRwbHlyOjpsZWZ0X2pvaW4oc2NhbGVfZGZfcHJlLCBpZF9kZiwgYnkgPSAiaWQiKQ0Kc2NhbGVfZGZfcHJlJFByZVBvc3QgPC0gcmVwKCJQcmUiLCBucm93KHNjYWxlX2RmX3ByZSkpIA0KdW5pcXVlKHNjYWxlX2RmX3ByZSRDb25kKQ0KdW5pcXVlKHNjYWxlX2RmX3ByZSRHcnVwKQ0KdGFibGUoc2NhbGVfZGZfcHJlJENvbmQsIHNjYWxlX2RmX3ByZSRHcnVwKQ0Kc2NhbGVfZGZfcHJlWywgYygiaWQiLCAiQ29uZCIsICJHcnVwIildDQoNCg0Kc2NhbGVfZGZfcG9zdCA8LSBkcGx5cjo6bGVmdF9qb2luKHNjYWxlX2RmX3Bvc3QsIGlkX2RmLCBieSA9ICJpZCIpDQpzY2FsZV9kZl9wb3N0JFByZVBvc3QgPC0gcmVwKCJQb3N0IiwgbnJvdyhzY2FsZV9kZl9wb3N0KSkNCnVuaXF1ZShzY2FsZV9kZl9wb3N0JENvbmQpDQp1bmlxdWUoc2NhbGVfZGZfcG9zdCRHcnVwKQ0Kc2NhbGVfZGZfcG9zdFssIGMoImlkIiwgIkNvbmQiLCAiR3J1cCIpXQ0KDQpgYGANCg0KDQoNCjwhLS0gTm8gZ2VuZGVyIGRhdGEgaGVyZQ0KIyMgR2VuZGVyIG1hdGNoaW5nIHRvIElEcw0KYGBge3IgZ2VuZGVyX21hdGNofQ0KZ2VuZGVyX21hdGNoIDwtIA0KICBEYXRhWywgYygiU2V4IiwgIklEIildICU+JQ0KICBtdXRhdGVfaWYoaXMuY2hhcmFjdGVyLCB+bmFfaWYoLiwgIk5vdCBBbnN3ZXJlZCIpKQ0KDQpmZW1faWRzIDwtIA0KICBnZW5kZXJfbWF0Y2ggJT4lDQogIGRwbHlyOjpmaWx0ZXIoU2V4ID09ICJGZW1pbmluIikgJT4lDQogIGRwbHlyOjpwdWxsKElEKQ0KDQptYXNjX2lkcyA8LSANCiAgZ2VuZGVyX21hdGNoICU+JQ0KICBkcGx5cjo6ZmlsdGVyKFNleCA9PSAiTWFzY3VsaW4iKSAlPiUNCiAgZHBseXI6OnB1bGwoSUQpDQpgYGANCi0tPg0KDQoNCiMgT3V0Y29tZSBNZWFzdXJlcw0KDQo8IS0tIE5vIERpY3RhdG9yIGluIGRhdGEuLi4NCiMgRGljdGF0b3IgR2FtZQ0KDQpgYGB7ciBkZ19zY29yaW5nLCByZXN1bHRzPSdoaWRlJ30NCiMgREcgZGYNCmRnX2RmX3ByZSA8LSByaW86OmltcG9ydChmaWxlLnBhdGgoZm9sZGVyLCBmaWxlKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IDAsIHdoaWNoID0gIkRpY3RhdG9yR2FtZSBwcmUiKQ0KZGdfZGZfcHJlIDwtIA0KICBkZ19kZl9wcmUgJT4lDQogIGphbml0b3I6OnJlbW92ZV9lbXB0eSgicm93cyIpIA0KICANCmNvbG5hbWVzKGRnX2RmX3ByZSlbNF0gPC0gIklEIg0KZGdfZGZfcHJlIDwtIA0KICBkZ19kZl9wcmUgJT4lDQogIGRwbHlyOjptdXRhdGUoSUQgPSBzdHJpbmdyOjpzdHJfcmVwbGFjZV9hbGwoSUQsIGZpeGVkKCIgIiksICIiKSkgJT4lICAgICMgcmVtb3ZlIHdoaXRlIHNwYWNlcw0KICBkcGx5cjo6bXV0YXRlKElEID0gdG91cHBlcihJRCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvIHVwcGVyDQphbGwoZGdfZGZfcHJlJElEID09IHRvdXBwZXIoZGdfZGZfcHJlJElEKSkgDQoNCmRnX2RmX3Bvc3QgPC0gcmlvOjppbXBvcnQoZmlsZS5wYXRoKGZvbGRlciwgZmlsZSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgPSAwLCB3aGljaCA9ICJEaWN0YXRvckdhbWUgcG9zdCIpDQpkZ19kZl9wb3N0IDwtIA0KICBkZ19kZl9wb3N0ICU+JQ0KICBqYW5pdG9yOjpyZW1vdmVfZW1wdHkoInJvd3MiKQ0KDQpjb2xuYW1lcyhkZ19kZl9wb3N0KVs0XSA8LSAiSUQiDQpkZ19kZl9wb3N0IDwtIA0KICBkZ19kZl9wb3N0ICU+JQ0KICBkcGx5cjo6bXV0YXRlKElEID0gc3RyaW5ncjo6c3RyX3JlcGxhY2VfYWxsKElELCBmaXhlZCgiICIpLCAiIikpICU+JSAgICAjIHJlbW92ZSB3aGl0ZSBzcGFjZXMNCiAgZHBseXI6Om11dGF0ZShJRCA9IHRvdXBwZXIoSUQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0byB1cHBlcg0KYWxsKGRnX2RmX3Bvc3QkSUQgPT0gdG91cHBlcihkZ19kZl9wb3N0JElEKSkgDQoNCmNvbG5hbWVzKGRnX2RmX3ByZSlbNTo4XSA8LSBzcHJpbnRmKCJER18lZCIsIDE6NCkNCmNvbG5hbWVzKGRnX2RmX3ByZSlbMl0gPC0gIlJlc3BvbnNlX1N0YXR1cyINCmNvbG5hbWVzKGRnX2RmX3Bvc3QpWzU6OF0gPC0gc3ByaW50ZigiREdfJWQiLCAxOjQpDQpjb2xuYW1lcyhkZ19kZl9wb3N0KVszXSA8LSAiUmVzcG9uc2VfU3RhdHVzIg0KDQpkZ19kZl9wcmUgPC0NCiAgZGdfZGZfcHJlICU+JQ0KICBkcGx5cjo6bXV0YXRlKGBEYXRlIE1vZGlmaWVkYCA9IGx1YnJpZGF0ZTo6eW1kX2htcyhmb3JtYXQoYERhdGUgTW9kaWZpZWRgLCAiJVktJW0tJWQgJUg6JU06JVMiLCB0eiA9ICJVVEMiKSkpICU+JQ0KICBtdXRhdGVfaWYoaXMuY2hhcmFjdGVyLCB+bmFfaWYoLiwgIk5vdCBBbnN3ZXJlZCIpKSAlPiUNCiAgZHBseXI6OmZpbHRlcihSZXNwb25zZV9TdGF0dXMgPT0gImNvbXBsZXRlZCIpICU+JQ0KICBkcGx5cjo6ZmlsdGVyKCFzdHJpbmdyOjpzdHJfZGV0ZWN0KElELCAiUEE0T1hUIikpICU+JQ0KICBkcGx5cjo6ZmlsdGVyKCFzdHJpbmdyOjpzdHJfZGV0ZWN0KElELCAiUEE0Uk1OIikpDQoNCmRnX2RmX3Bvc3QgPC0NCiAgZGdfZGZfcG9zdCAlPiUNCiAgZHBseXI6Om11dGF0ZShgRGF0ZSBNb2RpZmllZGAgPSBsdWJyaWRhdGU6OnltZF9obXMoZm9ybWF0KGBEYXRlIE1vZGlmaWVkYCwgIiVZLSVtLSVkICVIOiVNOiVTIiwgdHogPSAiVVRDIikpKSAlPiUNCiAgbXV0YXRlX2lmKGlzLmNoYXJhY3RlciwgfmRwbHlyOjpuYV9pZiguLCAiTm90IEFuc3dlcmVkIikpICU+JQ0KICBkcGx5cjo6ZmlsdGVyKFJlc3BvbnNlX1N0YXR1cyA9PSAiY29tcGxldGVkIikgJT4lDQogIGRwbHlyOjpmaWx0ZXIoIXN0cmluZ3I6OnN0cl9kZXRlY3QoSUQsICJQQTRPWFQiKSkgJT4lDQogIGRwbHlyOjpmaWx0ZXIoIXN0cmluZ3I6OnN0cl9kZXRlY3QoSUQsICJQQTRSTU4iKSkNCg0KZGdfZGZfcHJlIDwtDQogIGRnX2RmX3ByZSAlPiUNCiAgZHBseXI6Om11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJER18iKSksIH5zdHJpbmdyOjpzdHJfZXh0cmFjdCguLCAiWzAtOV0rIikpICU+JSAgICMgZXh0cmFjdHMgZmlyc3QgbnVtYmVyIChhbGwgZ2FtZXMgc3RhcnQgd2l0aCBQbGF5ZXIgQSwgc28gYWx3YXlzIGZpcnN0IG51bWJlcikNCiAgZHBseXI6Om11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJER18iKSksIGFzLm51bWVyaWMpICU+JQ0KICBkcGx5cjo6bXV0YXRlKFRpbWUgPSByZXAoIlByZSIsIG5yb3coLikpKSAlPiUNCiAgZHBseXI6Om11dGF0ZShDb25kID0gaWZlbHNlKHN0cmluZ3I6OnN0cl9kZXRlY3QoSUQsICJYIiksICJDVFJMIiwgIlRSIikpICU+JQ0KICBzZWxlY3QoYERhdGUgTW9kaWZpZWRgLCBJRCwgc3RhcnRzX3dpdGgoIkRHXyIpLCBUaW1lLCBDb25kKQ0KDQpkZ19kZl9wb3N0IDwtDQogIGRnX2RmX3Bvc3QgJT4lDQogIGRwbHlyOjptdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiREdfIikpLCB+c3RyaW5ncjo6c3RyX2V4dHJhY3QoLiwgIlswLTldKyIpKSAlPiUgICAjIGV4dHJhY3RzIGZpcnN0IG51bWJlciAoYWxsIGdhbWVzIHN0YXJ0IHdpdGggUGxheWVyIEEsIHNvIGFsd2F5cyBmaXJzdCBudW1iZXIpDQogIGRwbHlyOjptdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiREdfIikpLCBhcy5udW1lcmljKSAlPiUNCiAgZHBseXI6Om11dGF0ZShUaW1lID0gcmVwKCJQb3N0IiwgbnJvdyguKSkpICU+JQ0KICBkcGx5cjo6bXV0YXRlKENvbmQgPSBpZmVsc2Uoc3RyaW5ncjo6c3RyX2RldGVjdChJRCwgIlgiKSwgIkNUUkwiLCAiVFIiKSkgJT4lDQogIHNlbGVjdChgRGF0ZSBNb2RpZmllZGAsIElELCBzdGFydHNfd2l0aCgiREdfIiksIFRpbWUsIENvbmQpDQoNCiMgVHJhbnNmb3JtIERHIDAtOTAwIGVnb2lzbSB0byAwLTkgYWx0cnVpc20NCmRnX3RyYW5zX2Z1bmMgPC0gZnVuY3Rpb24oeCl7dHJhbnMgPC0gOSAtIHggLyAxMDB9DQoNCmRnX2RmX3ByZSA8LQ0KICBkZ19kZl9wcmUgJT4lDQogIGRwbHlyOjptdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiREdfIikpLCBkZ190cmFuc19mdW5jKSANCg0KZGdfZGZfcG9zdCA8LQ0KICBkZ19kZl9wb3N0ICU+JQ0KICBkcGx5cjo6bXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIkRHXyIpKSwgZGdfdHJhbnNfZnVuYykgDQoNCiMgVW5pdGUgREcgZGF0YSAtIExvbmcgRm9ybWF0DQpkZ191bml0ZWRfbG9uZyA8LSByYmluZChkZ19kZl9wcmUsIGRnX2RmX3Bvc3QpDQp3aGljaCh0YWJsZShkZ191bml0ZWRfbG9uZyRJRCk+IDIgKSAgICAgIyBJRHMgIjNCIiAmICIzMVgiIGhhdmUgbW9yZSB0aGFuIDIgdHJpYWxzDQpkZ191bml0ZWRfbG9uZ1tkZ191bml0ZWRfbG9uZyRJRCA9PSAiM0IiLF0gICMgdHdvIFByZXMgLS0ga2VlcCB0aGUgZmlyc3QNCmRnX3VuaXRlZF9sb25nIDwtIGRnX3VuaXRlZF9sb25nWy01NSwgXQ0KZGdfdW5pdGVkX2xvbmdbZGdfdW5pdGVkX2xvbmckSUQgPT0gIjMxWCIsXSAjIHR3byBQcmVzIC0tIGtlZXAgdGhlIGZpcnN0DQpkZ191bml0ZWRfbG9uZyA8LSBkZ191bml0ZWRfbG9uZ1stNzMsIF0NCmRnX3VuaXRlZF9sb25nW2RnX3VuaXRlZF9sb25nJElEID09ICI1RSIsXSAjIHR3byBQcmVzIC0tIGtlZXAgdGhlIGZpcnN0DQpkZ191bml0ZWRfbG9uZyA8LSBkZ191bml0ZWRfbG9uZ1stMTA2LCBdDQoNCmRnX3VuaXRlZF9sb25nJERHX1RvdGFsIDwtIHJvd1N1bXMoZGdfdW5pdGVkX2xvbmdbLCBzcHJpbnRmKCJER18lZCIsIDE6NCldLCBuYS5ybSA9IFRSVUUpIA0KDQojIFVuaXRlIERHIGRhdGEgLSBXaWRlIEZvcm1hdA0KZGdfdW5pdGVkX3dpZGUgPC0NCiAgZGdfdW5pdGVkX2xvbmcgJT4lDQogIHRpZHlyOjpwaXZvdF93aWRlcihpZF9jb2xzID0gYyhJRCwgQ29uZCksIG5hbWVzX2Zyb20gPSBUaW1lLCB2YWx1ZXNfZnJvbSA9IGMoIkRhdGUgTW9kaWZpZWQiLCBzcHJpbnRmKCJER18lZCIsIDE6NCksICJER19Ub3RhbCIpKQ0KIyBkZ191bml0ZWRfd2lkZTIgPC0gZHBseXI6OmxlZnRfam9pbihkZ191bml0ZWRfd2lkZSwgaWRzX2dyb3Vwc19kZiwgYnkgPSAiSUQiKSAgICAgIyBubyBuZWVkIHRvIG1lcmdlLCBhbHJlYWR5IGhhdmUgaWRzIGZvciBncm91cHMgc3RvcmVkDQoNCiMgTWVyZ2UgZ2VuZGVyDQpkZ191bml0ZWRfd2lkZSA8LSBkcGx5cjo6bGVmdF9qb2luKGRnX3VuaXRlZF93aWRlLCBnZW5kZXJfbWF0Y2gsIGJ5ID0gIklEIikNCmBgYA0KDQotLT4NCg0KDQpgYGB7ciBzY2FsZV9zY29yaW5nLCByZXN1bHRzPSdoaWRlJ30NCiMjIFBBTkFTOiBQb3NpdGl2ZSBBZmZlY3QgU2NvcmUgPSBzdW0gaXRlbXMgMSwgMywgNSwgOSwgMTAsIDEyLCAxNCwgMTYsIDE3LCAxOS4gTmVnYXRpdmUgQWZmZWN0IFNjb3JlID0gc3VtIGl0ZW1zIDIsIDQsIDYsIDcsIDgsIDExLCAxMywgMTUsIDE4LCAyMC4gIA0KaW5kZXhfaXRlbV9wYW5hcyA8LSAzOjIyDQpjb2xuYW1lcyhzY2FsZV9kZl9wcmUpW2luZGV4X2l0ZW1fcGFuYXNdIDwtIHNwcmludGYoIlBBTkFTXyVkIiwgMToyMCkNCmNvbG5hbWVzKHNjYWxlX2RmX3Bvc3QpW2luZGV4X2l0ZW1fcGFuYXNdIDwtIHNwcmludGYoIlBBTkFTXyVkIiwgMToyMCkNCg0Kc2NhbGVfZGZfcHJlWywgaW5kZXhfaXRlbV9wYW5hc10gPC0gZGF0YS5mcmFtZShsYXBwbHkoc2NhbGVfZGZfcHJlWywgaW5kZXhfaXRlbV9wYW5hc10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih4KSB7Z3N1YigiLirDrm4gZm9hcnRlIG1pY8SDIG3Eg3N1csSDLioiLCAiMSIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcGFuYXNdIDwtIGRhdGEuZnJhbWUobGFwcGx5KHNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcGFuYXNdLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qw65uIG1pY8SDIG3Eg3N1csSDLioiLCAiMiIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcGFuYXNdIDwtIGRhdGEuZnJhbWUobGFwcGx5KHNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcGFuYXNdLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qw65udHItbyBvYXJlY2FyZSBtxINzdXLEgy4qIiwgIjMiLCB4KX0pLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpDQpzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX3BhbmFzXSA8LSBkYXRhLmZyYW1lKGxhcHBseShzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX3BhbmFzXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHgpIHtnc3ViKCIuKsOubiBtYXJlIG3Eg3N1csSDLioiLCAiNCIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcGFuYXNdIDwtIGRhdGEuZnJhbWUobGFwcGx5KHNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcGFuYXNdLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qw65uIGZvYXJ0ZSBtYXJlIG3Eg3N1csSDLioiLCAiNSIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCg0Kc2NhbGVfZGZfcG9zdFssIGluZGV4X2l0ZW1fcGFuYXNdIDwtIGRhdGEuZnJhbWUobGFwcGx5KHNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3BhbmFzXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih4KSB7Z3N1YigiLirDrm4gZm9hcnRlIG1pY8SDIG3Eg3N1csSDLioiLCAiMSIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3BhbmFzXSA8LSBkYXRhLmZyYW1lKGxhcHBseShzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9wYW5hc10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qw65uIG1pY8SDIG3Eg3N1csSDLioiLCAiMiIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3BhbmFzXSA8LSBkYXRhLmZyYW1lKGxhcHBseShzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9wYW5hc10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qw65udHItbyBvYXJlY2FyZSBtxINzdXLEgy4qIiwgIjMiLCB4KX0pLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpDQpzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9wYW5hc10gPC0gZGF0YS5mcmFtZShsYXBwbHkoc2NhbGVfZGZfcG9zdFssIGluZGV4X2l0ZW1fcGFuYXNdLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHgpIHtnc3ViKCIuKsOubiBtYXJlIG3Eg3N1csSDLioiLCAiNCIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3BhbmFzXSA8LSBkYXRhLmZyYW1lKGxhcHBseShzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9wYW5hc10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qw65uIGZvYXJ0ZSBtYXJlIG3Eg3N1csSDLioiLCAiNSIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCiMgU2NvcmluZw0Kc2NhbGVfZGZfcHJlJFBBX1RvdGFsIDwtIFNjb3JlTGlrZXJ0KHNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcGFuYXNdW2MoMSwgMywgNSwgOSwgMTAsIDEyLCAxNCwgMTYsIDE3LCAxOSldLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvbnVtZXJpYyA9IFRSVUUsIG5hcGVyY2VudCA9IC4xMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdCBtb3JlIHRoYW4gMSBOQXMgZm9yIDEwIGl0ZW1zDQpzY2FsZV9kZl9wcmUkTkFfVG90YWwgPC0gU2NvcmVMaWtlcnQoc2NhbGVfZGZfcHJlWywgaW5kZXhfaXRlbV9wYW5hc11bYygyLCA0LCA2LCA3LCA4LCAxMSwgMTMsIDE1LCAxOCwgMjApXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvbnVtZXJpYyA9IFRSVUUsIG5hcGVyY2VudCA9IC4xMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdCBtb3JlIHRoYW4gMSBOQXMgZm9yIDEwIGl0ZW1zDQoNCnNjYWxlX2RmX3Bvc3QkUEFfVG90YWwgPC0gU2NvcmVMaWtlcnQoc2NhbGVfZGZfcG9zdFssIGluZGV4X2l0ZW1fcGFuYXNdW2MoMSwgMywgNSwgOSwgMTAsIDEyLCAxNCwgMTYsIDE3LCAxOSldLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b251bWVyaWMgPSBUUlVFLCBuYXBlcmNlbnQgPSAuMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBub3QgbW9yZSB0aGFuIDEgTkFzIGZvciAxMCBpdGVtcw0Kc2NhbGVfZGZfcG9zdCROQV9Ub3RhbCA8LSBTY29yZUxpa2VydChzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9wYW5hc11bYygyLCA0LCA2LCA3LCA4LCAxMSwgMTMsIDE1LCAxOCwgMjApXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b251bWVyaWMgPSBUUlVFLCBuYXBlcmNlbnQgPSAuMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBub3QgbW9yZSB0aGFuIDEgTkFzIGZvciAxMCBpdGVtcw0KDQoNCiMjIFBTUy1TRiAxNCAobGlrZXJ0IDAtNCkuIEl0ZW1zIDQsIDUsIDYsIDcsIDksIDEwLCBhbmQgMTMgYXJlIHNjb3JlZCBpbiByZXZlcnNlIGRpcmVjdGlvbi4NCmluZGV4X2l0ZW1fcHNzIDwtIDIzOjM2DQppbmRleF9pdGVtX3JldlBTUyA8LSBjKDQsIDUsIDYsIDcsIDksIDEwLCAxMykNCmNvbG5hbWVzKHNjYWxlX2RmX3ByZSlbaW5kZXhfaXRlbV9wc3NdIDwtIHNwcmludGYoIlBTU18lZCIsIDE6MTQpDQpjb2xuYW1lcyhzY2FsZV9kZl9wb3N0KVtpbmRleF9pdGVtX3Bzc10gPC0gc3ByaW50ZigiUFNTXyVkIiwgMToxNCkNCg0Kc2NhbGVfZGZfcHJlWywgaW5kZXhfaXRlbV9wc3NdIDwtIGRhdGEuZnJhbWUobGFwcGx5KHNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcHNzXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHgpIHtnc3ViKCIuKm5pY2lvZGF0xIMuKiIsICIwIiwgeCl9KSwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQ0Kc2NhbGVfZGZfcHJlWywgaW5kZXhfaXRlbV9wc3NdIDwtIGRhdGEuZnJhbWUobGFwcGx5KHNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcHNzXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHgpIHtnc3ViKCIuKmFwcm9hcGUgbmljaW9kYXTEgy4qIiwgIjEiLCB4KX0pLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpDQpzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX3Bzc10gPC0gZGF0YS5mcmFtZShsYXBwbHkoc2NhbGVfZGZfcHJlWywgaW5kZXhfaXRlbV9wc3NdLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qdW5lb3JpLioiLCAiMiIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcHNzXSA8LSBkYXRhLmZyYW1lKGxhcHBseShzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX3Bzc10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih4KSB7Z3N1YigiLipkZXN0dWwgZGUgZGVzLioiLCAiMyIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fcHNzXSA8LSBkYXRhLmZyYW1lKGxhcHBseShzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX3Bzc10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih4KSB7Z3N1YigiLipmb2FydGUgZGVzLioiLCAiNCIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCg0Kc2NhbGVfZGZfcG9zdFssIGluZGV4X2l0ZW1fcHNzXSA8LSBkYXRhLmZyYW1lKGxhcHBseShzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9wc3NdLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih4KSB7Z3N1YigiLipuaWNpb2RhdMSDLioiLCAiMCIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3Bzc10gPC0gZGF0YS5mcmFtZShsYXBwbHkoc2NhbGVfZGZfcG9zdFssIGluZGV4X2l0ZW1fcHNzXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qYXByb2FwZSBuaWNpb2RhdMSDLioiLCAiMSIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3Bzc10gPC0gZGF0YS5mcmFtZShsYXBwbHkoc2NhbGVfZGZfcG9zdFssIGluZGV4X2l0ZW1fcHNzXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qdW5lb3JpLioiLCAiMiIsIHgpfSksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCnNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3Bzc10gPC0gZGF0YS5mcmFtZShsYXBwbHkoc2NhbGVfZGZfcG9zdFssIGluZGV4X2l0ZW1fcHNzXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCkge2dzdWIoIi4qZGVzdHVsIGRlIGRlcy4qIiwgIjMiLCB4KX0pLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpDQpzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9wc3NdIDwtIGRhdGEuZnJhbWUobGFwcGx5KHNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3Bzc10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHgpIHtnc3ViKCIuKmZvYXJ0ZSBkZXMuKiIsICI0IiwgeCl9KSwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQ0KDQojIFNjb3JlDQpzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX3Bzc10gPC0gY29sc3RvbnVtZXJpYyhzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX3Bzc10pDQpzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9wc3NdIDwtIGNvbHN0b251bWVyaWMoc2NhbGVfZGZfcG9zdFssIGluZGV4X2l0ZW1fcHNzXSkNCg0Kc2NhbGVfZGZfcHJlWywgaW5kZXhfaXRlbV9wc3NdW2luZGV4X2l0ZW1fcmV2UFNTXSA8LSBSZXZlcnNlQ29kZShzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX3Bzc11baW5kZXhfaXRlbV9yZXZQU1NdLCB0b251bWVyaWMgPSBGQUxTRSwgbWluID0gMCwgbWF4ID0gNCkNCnNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3Bzc11baW5kZXhfaXRlbV9yZXZQU1NdIDwtIFJldmVyc2VDb2RlKHNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3Bzc11baW5kZXhfaXRlbV9yZXZQU1NdLCB0b251bWVyaWMgPSBGQUxTRSwgbWluID0gMCwgbWF4ID0gNCkNCg0Kc2NhbGVfZGZfcHJlJFBTU19Ub3RhbCA8LSBTY29yZUxpa2VydChzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX3Bzc10sIG5hcGVyY2VudCA9IC4xMSkNCnNjYWxlX2RmX3Bvc3QkUFNTX1RvdGFsIDwtIFNjb3JlTGlrZXJ0KHNjYWxlX2RmX3Bvc3RbLCBpbmRleF9pdGVtX3Bzc10sIG5hcGVyY2VudCA9IC4xMSkNCg0KDQoNCiMgUFMgaW50ICAoUHJvIHNvY2lhbCBzY2FsZXMgLSAzNzo0NykNCmluZGV4X2l0ZW1fUFNpbnQgPC0gMzc6NDANCmNvbG5hbWVzKHNjYWxlX2RmX3ByZSlbaW5kZXhfaXRlbV9QU2ludF0gPC0gc3ByaW50ZigiUFNpbnRfJWQiLCAxOjQpDQpjb2xuYW1lcyhzY2FsZV9kZl9wb3N0KVtpbmRleF9pdGVtX1BTaW50XSA8LSBzcHJpbnRmKCJQU2ludF8lZCIsIDE6NCkNCg0KDQpzY2FsZV9kZl9wcmVbLCBzcHJpbnRmKCJQU2ludF8lZCIsIDE6NCldIDwtDQogIHNjYWxlX2RmX3ByZVssIHNwcmludGYoIlBTaW50XyVkIiwgMTo0KV0gJT4lDQogIGRwbHlyOjptdXRhdGVfYWxsKHJlYWRyOjpwYXJzZV9udW1iZXIpDQoNCg0Kc2NhbGVfZGZfcG9zdFssIHNwcmludGYoIlBTaW50XyVkIiwgMTo0KV0gPC0NCiAgc2NhbGVfZGZfcG9zdFssIHNwcmludGYoIlBTaW50XyVkIiwgMTo0KV0gJT4lDQogIGRwbHlyOjptdXRhdGVfYWxsKHJlYWRyOjpwYXJzZV9udW1iZXIpDQoNCnNjYWxlX2RmX3ByZSRQU2ludF9Ub3RhbCA8LSBTY29yZUxpa2VydChzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX1BTaW50XSwgdG9udW1lcmljID0gVFJVRSwgbmFwZXJjZW50ID0gLjMzKQ0Kc2NhbGVfZGZfcG9zdCRQU2ludF9Ub3RhbCA8LSBTY29yZUxpa2VydChzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9QU2ludF0sIHRvbnVtZXJpYyA9IFRSVUUsIG5hcGVyY2VudCA9IC4zMykNCg0KDQoNCiMgUFMgbW90DQppbmRleF9pdGVtX1BTbW90IDwtIDQxOjQ0ICAgDQpjb2xuYW1lcyhzY2FsZV9kZl9wcmUpW2luZGV4X2l0ZW1fUFNtb3RdIDwtIHNwcmludGYoIlBTbW90XyVkIiwgMTo0KQ0KY29sbmFtZXMoc2NhbGVfZGZfcG9zdClbaW5kZXhfaXRlbV9QU21vdF0gPC0gc3ByaW50ZigiUFNtb3RfJWQiLCAxOjQpDQoNCnNjYWxlX2RmX3ByZVssIHNwcmludGYoIlBTbW90XyVkIiwgMTo0KV0gPC0NCiAgc2NhbGVfZGZfcHJlWywgc3ByaW50ZigiUFNtb3RfJWQiLCAxOjQpXSAlPiUNCiAgZHBseXI6Om11dGF0ZV9hbGwofmNhc2Vfd2hlbihzdHJpbmdyOjpzdHJfZGV0ZWN0KC4sICJkZXphY29yZCBwdXRlcm5pYyIpIH4gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdyOjpzdHJfZGV0ZWN0KC4sICJkZXphY29yZCIpIH4gMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdyOjpzdHJfZGV0ZWN0KC4sICJuZXV0cnUiKSB+IDMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncjo6c3RyX2RldGVjdCguLCAiYWNvcmQiKSB+IDQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncjo6c3RyX2RldGVjdCguLCAiYWNvcmQgcHV0ZXJuaWMiKSB+IDUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX3JlYWxfKSkNCg0Kc2NhbGVfZGZfcG9zdFssIHNwcmludGYoIlBTbW90XyVkIiwgMTo0KV0gPC0NCiAgc2NhbGVfZGZfcG9zdFssIHNwcmludGYoIlBTbW90XyVkIiwgMTo0KV0gJT4lDQogIGRwbHlyOjptdXRhdGVfYWxsKH5jYXNlX3doZW4oc3RyaW5ncjo6c3RyX2RldGVjdCguLCAiZGV6YWNvcmQgcHV0ZXJuaWMiKSB+IDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncjo6c3RyX2RldGVjdCguLCAiZGV6YWNvcmQiKSB+IDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncjo6c3RyX2RldGVjdCguLCAibmV1dHJ1IikgfiAzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3I6OnN0cl9kZXRlY3QoLiwgImFjb3JkIikgfiA0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3I6OnN0cl9kZXRlY3QoLiwgImFjb3JkIHB1dGVybmljIikgfiA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9yZWFsXykpDQoNCnNjYWxlX2RmX3ByZSRQU21vdF9Ub3RhbCA8LSBTY29yZUxpa2VydChzY2FsZV9kZl9wcmVbLCBpbmRleF9pdGVtX1BTbW90XSwgdG9udW1lcmljID0gVFJVRSwgbmFwZXJjZW50ID0gLjMzKQ0Kc2NhbGVfZGZfcG9zdCRQU21vdF9Ub3RhbCA8LSBTY29yZUxpa2VydChzY2FsZV9kZl9wb3N0WywgaW5kZXhfaXRlbV9QU21vdF0sIHRvbnVtZXJpYyA9IFRSVUUsIG5hcGVyY2VudCA9IC4zMykNCg0KDQoNCiMgUFMgaWRlbg0KaW5kZXhfaXRlbV9QU2lkZW4gPC0gNDU6NDcNCmNvbG5hbWVzKHNjYWxlX2RmX3ByZSlbaW5kZXhfaXRlbV9QU2lkZW5dIDwtIHNwcmludGYoIlBTaWRlbl8lZCIsIDE6MykNCmNvbG5hbWVzKHNjYWxlX2RmX3Bvc3QpW2luZGV4X2l0ZW1fUFNpZGVuXSA8LSBzcHJpbnRmKCJQU2lkZW5fJWQiLCAxOjMpDQoNCnNjYWxlX2RmX3ByZVssIHNwcmludGYoIlBTaWRlbl8lZCIsIDE6MyldIDwtDQogIHNjYWxlX2RmX3ByZVssIHNwcmludGYoIlBTaWRlbl8lZCIsIDE6MyldICU+JQ0KICBkcGx5cjo6bXV0YXRlX2FsbCh+Y2FzZV93aGVuKHN0cmluZ3I6OnN0cl9kZXRlY3QoLiwgImRlemFjb3JkIHB1dGVybmljIikgfiAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3I6OnN0cl9kZXRlY3QoLiwgImRlemFjb3JkIikgfiAyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3I6OnN0cl9kZXRlY3QoLiwgIm5ldXRydSIpIH4gMywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdyOjpzdHJfZGV0ZWN0KC4sICJhY29yZCIpIH4gNCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdyOjpzdHJfZGV0ZWN0KC4sICJhY29yZCBwdXRlcm5pYyIpIH4gNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfcmVhbF8pKQ0KDQpzY2FsZV9kZl9wb3N0Wywgc3ByaW50ZigiUFNpZGVuXyVkIiwgMTozKV0gPC0NCiAgc2NhbGVfZGZfcG9zdFssIHNwcmludGYoIlBTaWRlbl8lZCIsIDE6MyldICU+JQ0KICBkcGx5cjo6bXV0YXRlX2FsbCh+Y2FzZV93aGVuKHN0cmluZ3I6OnN0cl9kZXRlY3QoLiwgImRlemFjb3JkIHB1dGVybmljIikgfiAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3I6OnN0cl9kZXRlY3QoLiwgImRlemFjb3JkIikgfiAyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3I6OnN0cl9kZXRlY3QoLiwgIm5ldXRydSIpIH4gMywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdyOjpzdHJfZGV0ZWN0KC4sICJhY29yZCIpIH4gNCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdyOjpzdHJfZGV0ZWN0KC4sICJhY29yZCBwdXRlcm5pYyIpIH4gNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfcmVhbF8pKQ0KDQpzY2FsZV9kZl9wcmUkUFNpZGVuX1RvdGFsIDwtIFNjb3JlTGlrZXJ0KHNjYWxlX2RmX3ByZVssIGluZGV4X2l0ZW1fUFNpZGVuXSwgdG9udW1lcmljID0gVFJVRSwgbmFwZXJjZW50ID0gLjMzKQ0Kc2NhbGVfZGZfcG9zdCRQU2lkZW5fVG90YWwgPC0gU2NvcmVMaWtlcnQoc2NhbGVfZGZfcG9zdFssIGluZGV4X2l0ZW1fUFNpZGVuXSwgdG9udW1lcmljID0gVFJVRSwgbmFwZXJjZW50ID0gLjMzKQ0KDQoNCiMgSU9TDQpjb2xuYW1lcyhzY2FsZV9kZl9wcmUpWzQ4XSA8LSAiSU9TIg0KY29sbmFtZXMoc2NhbGVfZGZfcG9zdClbNDhdIDwtICJJT1MiDQoNCnNjYWxlX2RmX3ByZSRJT1MgPC0gYXMubnVtZXJpYyhzY2FsZV9kZl9wcmUkSU9TKQ0Kc2NhbGVfZGZfcG9zdCRJT1MgPC0gYXMubnVtZXJpYyhzY2FsZV9kZl9wb3N0JElPUykgDQoNCg0Kc2NhbGVfZGZfcHJlICU+JQ0KICBkcGx5cjo6Y291bnQoaWQpICU+JQ0KICBkcGx5cjo6ZmlsdGVyKG4gPiAxKSAgICMgY29ycmVjdCB1bmlxdWU6IDdSTU4gMDEtMjcsIDQzR1NSIDA0LTIzDQoNCnNjYWxlX2RmX3ByZSA8LSANCiAgc2NhbGVfZGZfcHJlICU+JQ0KICBkcGx5cjo6ZmlsdGVyKCEoaWQgPT0gIjdSTU4iICYgRGF0ZSA9PSBsdWJyaWRhdGU6OmFzX2RhdGV0aW1lKCIyMDIwLTA3LTE3IDE0OjEyOjM3IikpKSAlPiUNCiAgZHBseXI6OmZpbHRlcighKGlkID09ICI0M0dTUiIgJiBEYXRlID09IGx1YnJpZGF0ZTo6YXNfZGF0ZXRpbWUoIjIwMjEtMDQtMTIgMjE6MTA6MDAiKSkpDQogIA0KDQpzY2FsZV9kZl9wb3N0ICU+JQ0KICBkcGx5cjo6Y291bnQoaWQpICU+JQ0KICBkcGx5cjo6ZmlsdGVyKG4gPiAxKSAgICMgY29ycmVjdCB1bmlxdWU6IDQzR1NSIDA1LTAzLCAzMEdTUiAwNS0yMCwgNDFHU1IgMDQtMjgNCg0Kc2NhbGVfZGZfcG9zdCA8LSANCiAgc2NhbGVfZGZfcG9zdCAlPiUNCiAgZHBseXI6OmZpbHRlcighKGlkID09ICI0M0dTUiIgJiBEYXRlID09IGx1YnJpZGF0ZTo6YXNfZGF0ZXRpbWUoIjIwMjEtMDQtMjcgMTU6Mzc6NTciKSkpICU+JQ0KICBkcGx5cjo6ZmlsdGVyKCEoaWQgPT0gIjMwR1NSIiAmIERhdGUgPT0gbHVicmlkYXRlOjphc19kYXRldGltZSgiMjAyMS0wNC0yNSAxMzowNjowMiIpKSkgJT4lDQogIGRwbHlyOjpmaWx0ZXIoIShpZCA9PSAiNDFHU1IiICYgRGF0ZSA9PSBsdWJyaWRhdGU6OmFzX2RhdGV0aW1lKCIyMDIxLTA0LTI1IDA5OjE1OjMwIikpKQ0KDQoNCiMgVW5pdGUgc2NhbGUgZGYgLSBMb25nIEZvcm1hdA0Kc2NhbGVfdW5pdGVkX2xvbmcgPC0gcmJpbmQoc2NhbGVfZGZfcHJlLCBzY2FsZV9kZl9wb3N0KQ0KDQpzY2FsZV91bml0ZWRfbG9uZyA8LSANCiAgc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpncm91cF9ieShpZCkgJT4lDQogIGRwbHlyOjpmaWx0ZXIobigpID4gMSkgJT4lDQogIGRwbHlyOjp1bmdyb3VwKCkgJT4lDQogIGRwbHlyOjptdXRhdGUoUHJlUG9zdCA9IGZhY3RvcihQcmVQb3N0LCBsZXZlbHMgPSBjKCJQcmUiLCAiUG9zdCIpKSkNCmBgYA0KDQojIFdob2xlIHNhbXBsZXMNCiMjIyBQU1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNTX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU1MiLA0KICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU1NfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTUyIsDQogICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgUEFOQVMNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIk5BIiwNCiAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIk5BIiwNCiAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQQSIsDQogICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQQSIsDQogICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgUHJvc29jaWFsDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2ludCIsDQogICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2ludCIsDQogICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNtb3QiLA0KICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNtb3QiLA0KICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpZGVuX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2lkZW4iLA0KICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2lkZW5fVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaWRlbiIsDQogICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgSU9TDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IElPUywgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiSU9TIiwNCiAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gSU9TLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJJT1MiLA0KICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KDQojIEJ5IGdyb3VwDQoNCiMjIE5vcm1hbCBQb3ANCg0KIyMjIFBTUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJwb3AgZ2VuIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNTX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNTIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU1NfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQQU5BUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJwb3AgZ2VuIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAicG9wIGdlbiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQcm9zb2NpYWwNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAicG9wIGdlbiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gInBvcCBnZW4iKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJwb3AgZ2VuIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpZGVuX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpZGVuIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2lkZW5fVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2lkZW4iLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBJT1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAicG9wIGdlbiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IElPUywgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIklPUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gSU9TLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiSU9TIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQoNCiMjIFBUU0QNCg0KIyMjIFBTUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJQVFNEIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNTX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNTIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIlBUU0QiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU1NfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQQU5BUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJQVFNEIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJQVFNEIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiUFRTRCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiUFRTRCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQcm9zb2NpYWwNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiUFRTRCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiUFRTRCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIlBUU0QiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIlBUU0QiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJQVFNEIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpZGVuX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpZGVuIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIlBUU0QiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2lkZW5fVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2lkZW4iLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBJT1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiUFRTRCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IElPUywgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIklPUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJQVFNEIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gSU9TLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiSU9TIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQoNCiMjIEJ1cm5vdXQNCg0KIyMjIFBTUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJCdXJub3V0IikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNTX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNTIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIkJ1cm5vdXQiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU1NfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQQU5BUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJCdXJub3V0IikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJCdXJub3V0IikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiQnVybm91dCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiQnVybm91dCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQcm9zb2NpYWwNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiQnVybm91dCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiQnVybm91dCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIkJ1cm5vdXQiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIkJ1cm5vdXQiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJCdXJub3V0IikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpZGVuX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpZGVuIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIkJ1cm5vdXQiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2lkZW5fVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2lkZW4iLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBJT1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiQnVybm91dCIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IElPUywgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIklPUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJCdXJub3V0IikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gSU9TLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiSU9TIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQoNCg0KIyBPbmx5IG9ubGluZQ0KDQojIyBOb3JtYWwgUG9wDQoNCiMjIyBQU1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU1NfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU1NfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQQU5BUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IE5BX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiTkEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBOQV9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIk5BIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQQV9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBBIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgUHJvc29jaWFsDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpbnRfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2ludCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNtb3RfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU21vdCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTbW90X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNtb3QiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpZGVuX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpZGVuIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpZGVuX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpZGVuIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgSU9TDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gSU9TLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiSU9TIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gSU9TLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiSU9TIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQoNCiMjIFBUU0QNCg0KIyMjIFBTUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJQVFNEIiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTU19Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJQVFNEIiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTU19Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KIyMjIFBBTkFTDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJQVFNEIiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IE5BX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiTkEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUEFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJQVFNEIiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQcm9zb2NpYWwNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2ludF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaW50IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpbnRfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2ludCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNtb3RfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU21vdCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2lkZW5fVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2lkZW4iLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2lkZW5fVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2lkZW4iLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBJT1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBJT1MsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJJT1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBJT1MsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJJT1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCg0KIyMgQnVybm91dA0KDQojIyMgUFNTDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIkJ1cm5vdXQiLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNTX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNTIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIkJ1cm5vdXQiLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNTX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNTIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgUEFOQVMNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBOQV9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIk5BIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIkJ1cm5vdXQiLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQQV9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBBIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIkJ1cm5vdXQiLCBFeHBfdHlwZSA9PSAib25saW5lIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUEFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KIyMjIFByb3NvY2lhbA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2ludF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaW50IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTbW90X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNtb3QiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJvbmxpbmUiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaWRlbl9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaWRlbiIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaWRlbl9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaWRlbiIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KIyMjIElPUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IElPUywgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIklPUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIm9ubGluZSIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IElPUywgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIklPUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KDQoNCiMgT25seSBHU1INCg0KIyMgTm9ybWFsIFBvcA0KDQojIyMgUFNTDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNTX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNTIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNTX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNTIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgUEFOQVMNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBOQV9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIk5BIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQQV9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBBIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUEFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KIyMjIFByb3NvY2lhbA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2ludF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaW50IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTbW90X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNtb3QiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaWRlbl9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaWRlbiIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaWRlbl9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaWRlbiIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KIyMjIElPUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IElPUywgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIklPUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IElPUywgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIklPUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KDQojIyBQVFNEDQoNCiMjIyBQU1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU1NfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU1NfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQQU5BUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJQVFNEIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IE5BX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiTkEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBOQV9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIk5BIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJQVFNEIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiUFRTRCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQQV9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBBIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgUHJvc29jaWFsDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpbnRfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2ludCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJQVFNEIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNtb3RfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU21vdCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJQVFNEIiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTbW90X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNtb3QiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpZGVuX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpZGVuIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpZGVuX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpZGVuIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgSU9TDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gSU9TLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiSU9TIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIlBUU0QiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gSU9TLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiSU9TIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQoNCiMjIEJ1cm5vdXQNCg0KIyMjIFBTUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkNPTlRST0wiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTU19Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTU19Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTUyIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KIyMjIFBBTkFTDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIkJ1cm5vdXQiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gTkFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJOQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IE5BX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiTkEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiQ09OVFJPTCIsIEdydXAgPT0gIkJ1cm5vdXQiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUEFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkNPTlRST0wiKQ0KDQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJCdXJub3V0IiwgRXhwX3R5cGUgPT0gIkdTUiIpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBBX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUEEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQcm9zb2NpYWwNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2ludF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaW50IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIkJ1cm5vdXQiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNpbnRfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2ludCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU21vdF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTbW90IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ09OVFJPTCIpDQoNCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gIkJ1cm5vdXQiLCBFeHBfdHlwZSA9PSAiR1NSIikgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNtb3RfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU21vdCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2lkZW5fVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2lkZW4iLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2lkZW5fVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2lkZW4iLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBJT1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJDT05UUk9MIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBJT1MsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJJT1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDT05UUk9MIikNCg0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAiQnVybm91dCIsIEV4cF90eXBlID09ICJHU1IiKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBJT1MsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJJT1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCg0KDQojIE9ubHkgUk1OICYgT1hUDQoNCiMjIE5vcm1hbCBQb3AgKGhhcyBvbmx5IE5vcm1hbCBQb3AgYW5kIEVYUEVSSU1FTlRBTCkNCg0KIyMjIFBTUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSAlaW4lIGMoIlJNTiIsICJPWFQiKSkgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNTX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNTIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgUEFOQVMNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgJWluJSBjKCJSTU4iLCAiT1hUIikpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IE5BX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiTkEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlICVpbiUgYygiUk1OIiwgIk9YVCIpKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQQV9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBBIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQojIyMgUHJvc29jaWFsDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlICVpbiUgYygiUk1OIiwgIk9YVCIpKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2ludF9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaW50IiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSAlaW4lIGMoIlJNTiIsICJPWFQiKSkgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNtb3RfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU21vdCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgJWluJSBjKCJSTU4iLCAiT1hUIikpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaWRlbl9Ub3RhbCwgb3V0bGllci5sYWJlbCA9IGlkLCANCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICIiLCB5bGFiID0gIlBTaWRlbiIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KIyMjIElPUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSAlaW4lIGMoIlJNTiIsICJPWFQiKSkgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gSU9TLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiSU9TIiwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRVhQRVJJTUVOVEFMIikNCmBgYA0KDQoNCg0KIyBHU1IsIFJNTiAmIE9YVA0KDQojIyBOb3JtYWwgUG9wIChoYXMgb25seSBOb3JtYWwgUG9wIGFuZCBFWFBFUklNRU5UQUwpDQoNCiMjIyBQU1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgJWluJSBjKCJHU1IiLCAiUk1OIiwgIk9YVCIpKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU1NfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBQQU5BUw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSAlaW4lIGMoIkdTUiIsICJSTU4iLCAiT1hUIikpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IE5BX1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiTkEiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlICVpbiUgYygiR1NSIiwgIlJNTiIsICJPWFQiKSkgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUEFfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQQSIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KIyMjIFByb3NvY2lhbA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9N30NCnNjYWxlX3VuaXRlZF9sb25nICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbmQgPT0gIkVYUEVSSU1FTlRBTCIsIEdydXAgPT0gInBvcCBnZW4iLCBFeHBfdHlwZSAlaW4lIGMoIkdTUiIsICJSTU4iLCAiT1hUIikpICU+JQ0KICBteV9nZ3dpdGhpbnN0YXRzMih4ID0gUHJlUG9zdCwgeSA9IFBTaW50X1RvdGFsLCBvdXRsaWVyLmxhYmVsID0gaWQsIA0KICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsIHlsYWIgPSAiUFNpbnQiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03fQ0Kc2NhbGVfdW5pdGVkX2xvbmcgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29uZCA9PSAiRVhQRVJJTUVOVEFMIiwgR3J1cCA9PSAicG9wIGdlbiIsIEV4cF90eXBlICVpbiUgYygiR1NSIiwgIlJNTiIsICJPWFQiKSkgJT4lDQogIG15X2dnd2l0aGluc3RhdHMyKHggPSBQcmVQb3N0LCB5ID0gUFNtb3RfVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU21vdCIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkVYUEVSSU1FTlRBTCIpDQpgYGANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgJWluJSBjKCJHU1IiLCAiUk1OIiwgIk9YVCIpKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBQU2lkZW5fVG90YWwsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJQU2lkZW4iLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCiMjIyBJT1MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTd9DQpzY2FsZV91bml0ZWRfbG9uZyAlPiUNCiAgZHBseXI6OmZpbHRlcihDb25kID09ICJFWFBFUklNRU5UQUwiLCBHcnVwID09ICJwb3AgZ2VuIiwgRXhwX3R5cGUgJWluJSBjKCJHU1IiLCAiUk1OIiwgIk9YVCIpKSAlPiUNCiAgbXlfZ2d3aXRoaW5zdGF0czIoeCA9IFByZVBvc3QsIHkgPSBJT1MsIG91dGxpZXIubGFiZWwgPSBpZCwgDQogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiIiwgeWxhYiA9ICJJT1MiLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJFWFBFUklNRU5UQUwiKQ0KYGBgDQoNCg0KDQoNCg0KDQo8IS0tIFNlc3Npb24gSW5mbyBhbmQgTGljZW5zZSAtLT4NCg0KPGJyPg0KDQojIFNlc3Npb24gSW5mbw0KYGBge3Igc2Vzc2lvbl9pbmZvLCBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAnbWFya3VwJ30NCnNlc3Npb25JbmZvKCkgICAgDQpgYGANCg0KPCEtLSBGb290ZXIgLS0+DQombmJzcDsNCjxociAvPg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPkEgd29yayBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vQ2xhdWRpdVBhcGFzdGVyaS8iPkNsYXVkaXUgUGFwYXN0ZXJpPC9hPjwvcD4NCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICM4MDgwODA7Ij48ZW0+Y2xhdWRpdS5wYXBhc3RlcmlAZ21haWwuY29tPC9lbT48L3NwYW4+PC9wPg0KJm5ic3A7DQo=