ALL IMPORTED FILES MUST BE IN THE SAME DIRECTORY AS THIS SCRIPT

Load tidyverse package

library("tidyverse")

Import raw vcf data from “masterfile” and exclude variants exceeding specified GnomAD non-cancer AF

masterfile <- read.delim("masterfile.tsv", header=TRUE, row.names=NULL, na.strings = ".", stringsAsFactors=FALSE) %>% 
  dplyr::rename("Sample"="X.Sample") %>% 
  # filter(GnomAD_v2.1_non_cancer_AF<=0.005)
  filter(GnomAD_v2.1_non_cancer_AF<=0.001)
  # filter(GnomAD_v2.1_non_cancer_AF<=0.0005)
  # filter(GnomAD_v2.1_non_cancer_AF<=0.0001)

Exclude non-epithelial, uterine-only, BRCA +ve and other mutation +ve samples

ViP_Complete_Cohort <- read.delim("ViP_LoF_Complete_Cohort.txt", stringsAsFactors=FALSE)
ViP_Complete_Cohort_list <- ViP_Complete_Cohort[,1]

masterfile_eoc <- filter(masterfile,Sample%in%c(ViP_Complete_Cohort_list))
rm(masterfile)

Append patient path data

ViP_OvCa_Path_Data <- read.delim("ViP_OvCa_Path_Data.txt", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>% 
  dplyr::rename("Sample"=Exome.ID)
masterfile_eoc_withPath <- left_join(masterfile_eoc,ViP_OvCa_Path_Data,by="Sample",copy=FALSE)
rm(ViP_OvCa_Path_Data,masterfile_eoc)

Exclude low-grade tumour samples

masterfile_eoc2 <- filter(masterfile_eoc_withPath,(Histopath.Type!="Borderline tumour")&
                            (Histopath.Type!="Mucinous")&
                            (Histopath.Type!="Clear cell")&
                            (Histopath.Type!="Low-grade serous")&
                            (Histopath.Type!="Low-grade endometrioid")&
                            (Histopath.Type!="Serous (?low-grade/borderline)")&
                            (Histopath.Type!="Mixed Mullerian")&
                            (Histopath.Type!="Mixed EAOC"))
rm(masterfile_eoc_withPath)

Exclude low-quality variants, GnomAD RF-flagged variants and non-protein-coding genes

masterfile_eoc_goodQ <- filter(masterfile_eoc2, (QUAL>=30)&
                                 (Identified!="FilteredInAll")&
                                 (Sample.PMCDP>=10)&
                                 (Sample.PMCFREQ>=0.25)) %>% 
                                 filter((!str_detect(GnomAD_v2.1_FILTER_exome,"InbreedingCoeff")&
                                           !str_detect(GnomAD_v2.1_FILTER_exome,"RF"))|
                                       is.na(GnomAD_v2.1_FILTER_exome)) %>% 
  filter((!str_detect(GnomAD_v2.1_FILTER_genome,"InbreedingCoeff")&
            !str_detect(GnomAD_v2.1_FILTER_genome,"RF"))|
           is.na(GnomAD_v2.1_FILTER_genome)) %>% 
  filter(BIOTYPE%in%c("protein_coding"))
Total_Sample_Alleles <- (n_distinct(masterfile_eoc_goodQ$Sample)*2)
rm(masterfile_eoc2)

Exclude HIGH impact variants (plus variants with Consequence == “protein_altering_variant”)

masterfile_eoc_goodQ_biotype_MS <- filter(masterfile_eoc_goodQ, IMPACT=="MODERATE") %>% 
  filter(str_detect(Consequence,"missense_variant"))

Exclude NM canonical (RefSeq) variants and convert MPC strings to integers/doubles

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical <- filter(masterfile_eoc_goodQ_biotype_MS, CANONICAL=="YES") 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical$MPC <- as.numeric(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical$MPC) %>% replace_na(0)
rm(masterfile_eoc_goodQ_biotype_MS)

Divide data into different prediction score groups

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC<2))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC>=2))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC>=2.5))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (MPC>=3))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED<15))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=15))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=20))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=25))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=30))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score<0.45))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.45))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.5))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.55))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.6))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.7))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (REVEL_score>=0.8))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=15)&(REVEL_score>=0.45))  
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical, (CADD_PHRED>=15)&(REVEL_score>=0.45)&(MPC>=2))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,.id=NULL) %>% 
  distinct(.keep_all=TRUE)

rm(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical)

Sample variant counts and AFs

variant_counts_AFs <- function(vcf){
variants_heterozygous <- vcf %>% 
  select(HGVSc,Sample.GT) %>% 
  group_by(HGVSc,Sample.GT) %>% 
  summarise(n()) %>% 
  filter((Sample.GT%in%c("'0/1","'1/0"))) %>% 
  dplyr::rename(alleles = "n()") %>% 
  group_by(HGVSc) %>% 
  summarise(sum(alleles))
variants_homozygous <- vcf %>% 
  select(HGVSc,Sample.GT) %>% 
  group_by(HGVSc,Sample.GT) %>% 
  summarise(n()) %>% 
  filter((Sample.GT!="'0/1")&(Sample.GT!="'1/0")) %>% 
  mutate(alleles = `n()`*2) %>% 
  select(-`n()`) %>% 
  group_by(HGVSc) %>% 
  summarise(sum(alleles))
variants <- full_join(variants_heterozygous,variants_homozygous,by="HGVSc",copy=FALSE,suffix=c(".x",".y")) %>%
  mutate_all(funs(replace(., is.na(.), 0))) %>% 
  mutate(Total_Allele_Count=`sum(alleles).x`+`sum(alleles).y`) %>% 
  mutate(Sample_AF=Total_Allele_Count/Total_Sample_Alleles)
vcf <- left_join(vcf, variants[,c(1,4:5)],by="HGVSc",copy=FALSE)
}

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2  <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- variant_counts_AFs(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8)

rm(list=(ls(pattern="^variants")))

Output list of genes and variants with sample AF > 0.01

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01 <- bind_rows(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8) %>% 
  filter(Sample_AF > 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01[,c(2:6,25:54)] %>% 
  distinct(.keep_all = FALSE) %>% 
  write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01.csv",na=".",append=FALSE,col_names=TRUE)
rm(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_genesandvariants0.01)

Exclude variants with sample AF > 0.01̛

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,Sample_AF < 0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,Sample_AF < 0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,Sample_AF < 0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45,Sample_AF < 0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01 <- filter(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8,Sample_AF < 0.01)

rm(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45,masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8)

Sample gene counts and frequencies

gene_counts_AF <- function(vcf){
genes_oneVarAllele <- vcf %>% select(SYMBOL,Sample.GT) %>% 
  select(SYMBOL,Sample.GT) %>% 
  group_by(SYMBOL,Sample.GT) %>% 
  summarise(n()) %>% 
  filter((Sample.GT%in%c("'0/1","'1/0"))) %>% 
  dplyr::rename(gene_Var = "n()") %>% 
  group_by(SYMBOL) %>% 
  summarise(sum(gene_Var))
genes_twoVarAllele <- vcf %>% select(SYMBOL,Sample.GT) %>% 
  select(SYMBOL,Sample.GT) %>% 
  group_by(SYMBOL,Sample.GT) %>% 
  summarise(n()) %>% 
  filter((Sample.GT!="'0/1")&(Sample.GT!="'1/0")) %>% 
  mutate(gene_Var = `n()`*2) %>% 
  select(-`n()`) %>% 
  group_by(SYMBOL) %>% 
  summarise(sum(gene_Var))
genes <- full_join(genes_oneVarAllele,genes_twoVarAllele,by="SYMBOL",copy=FALSE,suffix=c(".x",".y")) %>% 
  mutate_all(funs(replace(., is.na(.), 0))) %>% 
  mutate(Total_Gene_Count=`sum(gene_Var).x`+`sum(gene_Var).y`) %>% 
  mutate(Sample_Gene_Freq=Total_Gene_Count/Total_Sample_Alleles)
vcf <- left_join(vcf, genes[,c(1,4:5)],by="SYMBOL",copy=FALSE)
}

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01 <- gene_counts_AF(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01)

rm(list=(ls(pattern="^genes")))

Add GnomAD gene-level data

GnomAD_stats_MS <- read.delim("GnomAD.gene.stats.v2.1_missense_AF_0.001.tsv", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>% 
  dplyr::rename(SYMBOL=X.Symbol) 
GnomAD_stats_MS <- GnomAD_stats_MS[,c(1:13,156:281)] 

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,14:19)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,20:25)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,26:31)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,32:37)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,38:43)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,44:49)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,50:55)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,56:61)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,62:67)],by="Feature",copy=FALSE)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,68:73)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,74:79)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,80:85)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,86:91)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,92:97)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,104:109)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,116:121)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,134:139)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,122:127)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats <- left_join(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01,GnomAD_stats_MS[,c(2,6:13,128:133)],by="Feature",copy=FALSE) 
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats <-
mutate_at(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats,vars(starts_with("FILTER_")),funs(replace(., is.na(.), 0))) %>% 
  mutate_if(grepl("popmax$", names(.)),funs(ifelse(. == "NA", 0, as.numeric(.)))) %>% 
  mutate_at(vars(ends_with("popmax")),funs(replace(., is.na(.), 0)))

rm(list=(ls(pattern="_sampleAF0.01$")))

Create data frames with Agilent SureSelect whole exome genes (ENST and protein-coding) and MPC-only transcripts

ensembl_biotypes <- read.delim("ensembl_biotypes.tsv", stringsAsFactors=FALSE) %>% 
  select(ensembl_transcript_id,transcript_biotype) %>% 
  dplyr::rename("Feature"="ensembl_transcript_id","BIOTYPE"="transcript_biotype")
GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding <- read.delim("GnomAD.gene.stats.v2.RF.only.agilent.v6.only.tsv", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>% 
  filter(CANONICAL=="YES") %>% 
  dplyr::rename("SYMBOL"="X.Symbol") %>% 
  dplyr::rename("Gene"="ENSG") %>% 
  left_join(ensembl_biotypes,by="Feature",copy=FALSE) %>% 
  filter(BIOTYPE%in%c("protein_coding"))
MPC_transcripts <- read.delim("MPC_transcripts_with_canonicity.tsv", header=TRUE, row.names=NULL, stringsAsFactors=FALSE) %>% 
  filter(CANONICAL%in%c("YES")) %>% 
  select(Feature,CANONICAL)

allGenes_AgilentSSv6_list_protein_coding_only <- tibble("SYMBOL"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$SYMBOL,"Gene"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Gene,"Feature"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Feature, "AgilentSSv6"="YES") %>% 
  distinct(.keep_all=TRUE) %>% 
  arrange(SYMBOL)

allGenes_AgilentSSv6_list_protein_coding_MPConly<- tibble("SYMBOL"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$SYMBOL,"Gene"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Gene,"Feature"=GnomAD_stats_AgilentSSv6_LOF_VEP_ENSTcanonical_protein_coding$Feature, "AgilentSSv6"="YES") %>% 
  distinct(.keep_all=TRUE) %>% 
  left_join(MPC_transcripts,by="Feature",copy=FALSE) %>% 
  filter(CANONICAL%in%c("YES"))

allGenes_AgilentSSv6_list_protein_coding_only2 <- select(allGenes_AgilentSSv6_list_protein_coding_only,Feature,AgilentSSv6)

Sum ACs across sample/GnomAD for each prediction score class (MPC figures include transcripts with MPC scores only)

GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding <- filter(GnomAD_stats_MS,CANONICAL%in%c("YES")) %>% 
  dplyr::rename("Gene"="ENSG") %>% 
  left_join(ensembl_biotypes,by="Feature",copy=FALSE) %>% 
  filter(BIOTYPE%in%c("protein_coding")) %>% 
  left_join(allGenes_AgilentSSv6_list_protein_coding_only2,by="Feature",copy=FALSE) %>% 
  filter(AgilentSSv6%in%c("YES")) %>% 
  distinct(.keep_all=TRUE)
GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC <- filter(GnomAD_stats_MS,CANONICAL%in%c("YES")) %>% 
  dplyr::rename("Gene"="ENSG") %>% 
  left_join(ensembl_biotypes,by="Feature",copy=FALSE) %>% 
  filter(BIOTYPE%in%c("protein_coding")) %>% 
  left_join(allGenes_AgilentSSv6_list_protein_coding_only2,by="Feature",copy=FALSE) %>% 
  filter(AgilentSSv6%in%c("YES")) %>% 
  left_join(MPC_transcripts,by="Feature",copy=FALSE) %>% 
  filter(CANONICAL.y%in%c("YES")) %>% 
  distinct(.keep_all=TRUE)

GnomAD_stats_MS_MAX_AN_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,6]) %>% as.numeric()
GnomAD_stats_MS_MAX_AN_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,10]) %>% as.numeric()
GnomAD_stats_MS_MAX_AN_MPC_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,6]) %>% as.numeric()
GnomAD_stats_MS_MAX_AN_MPC_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,10]) %>% as.numeric()
GnomAD_stats_MS_MPC.2_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,14]) %>% as.numeric()
GnomAD_stats_MS_MPC.2_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,17]) %>% as.numeric()
GnomAD_stats_MS_MPC2_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,20]) %>% as.numeric()
GnomAD_stats_MS_MPC2_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,23]) %>% as.numeric()
GnomAD_stats_MS_MPC2.5_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,26]) %>% as.numeric()
GnomAD_stats_MS_MPC2.5_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,29]) %>% as.numeric()
GnomAD_stats_MS_MPC3_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,32]) %>% as.numeric()
GnomAD_stats_MS_MPC3_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,35]) %>% as.numeric()
GnomAD_stats_MS_CADD.15_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,38]) %>% as.numeric()
GnomAD_stats_MS_CADD.15_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,41]) %>% as.numeric()
GnomAD_stats_MS_CADD15_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,44]) %>% as.numeric()
GnomAD_stats_MS_CADD15_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,47]) %>% as.numeric()
GnomAD_stats_MS_CADD20_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,50]) %>% as.numeric()
GnomAD_stats_MS_CADD20_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,53]) %>% as.numeric()
GnomAD_stats_MS_CADD25_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,56]) %>% as.numeric()
GnomAD_stats_MS_CADD25_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,59]) %>% as.numeric()
GnomAD_stats_MS_CADD30_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,62]) %>% as.numeric()
GnomAD_stats_MS_CADD30_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,65]) %>% as.numeric()
GnomAD_stats_MS_REVEL.0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,68]) %>% as.numeric()
GnomAD_stats_MS_REVEL.0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,71]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,74]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,77]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.5_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,80]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.5_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,83]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.55_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,86]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.55_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,89]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.6_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,92]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.6_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,95]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.7_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,104]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.7_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,107]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.8_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,116]) %>% as.numeric()
GnomAD_stats_MS_REVEL0.8_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,119]) %>% as.numeric()
GnomAD_stats_MS_CADD15REVEL0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,134]) %>% as.numeric()
GnomAD_stats_MS_CADD15REVEL0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding[,137]) %>% as.numeric()
GnomAD_stats_MS_MPC2CADD15REVEL0.45_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,122]) %>% as.numeric()
GnomAD_stats_MS_MPC2CADD15REVEL0.45_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,125]) %>% as.numeric()
GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,128]) %>% as.numeric()
GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE_total <- sum(GnomAD_stats_MS_ENSTcanonical_AgilentSSv6_protein_coding_MPC[,131]) %>% as.numeric()

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total <- Total_Sample_Alleles*(nrow(allGenes_AgilentSSv6_list_protein_coding_only)) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total <- Total_Sample_Alleles*(nrow(allGenes_AgilentSSv6_list_protein_coding_MPConly)) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total <- masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_sampleAF0.01_withGnomADstats[,c(31,36,37,221)] %>% distinct(.keep_all=TRUE) %>% select(4) %>% colSums(na.rm=TRUE) %>% as.numeric()

Calculate odds ratios using matrices

MPC.2 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
                 masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
                 GnomAD_stats_MS_MPC.2_total,
                 GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC.2_total),
               nrow=2,byrow=TRUE)
MPC.2_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC.2_total,
                     GnomAD_stats_MS_MPC.2_NFE_total,
                     GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC.2_NFE_total),
                   nrow=2,byrow=TRUE)
MPC2 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
                     GnomAD_stats_MS_MPC2_total,
                     GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2_total),
                   nrow=2,byrow=TRUE)
MPC2_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_total,
                         GnomAD_stats_MS_MPC2_NFE_total,
                         GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2_NFE_total),
                       nrow=2,byrow=TRUE)
MPC2.5 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
                     GnomAD_stats_MS_MPC2.5_total,
                     GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2.5_total),
                   nrow=2,byrow=TRUE)
MPC2.5_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2.5_total,
                         GnomAD_stats_MS_MPC2.5_NFE_total,
                         GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2.5_NFE_total),
                       nrow=2,byrow=TRUE)
MPC3 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
                 masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
                 GnomAD_stats_MS_MPC3_total,
                 GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC3_total),
               nrow=2,byrow=TRUE)
MPC3_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC3_total,
                     GnomAD_stats_MS_MPC3_NFE_total,
                     GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC3_NFE_total),
                   nrow=2,byrow=TRUE)
CADD.15 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
                   masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
                   GnomAD_stats_MS_CADD.15_total,
                   GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD.15_total),
                 nrow=2,byrow=TRUE)
CADD.15_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
                       masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD.15_total,
                       GnomAD_stats_MS_CADD.15_NFE_total,
                       GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD.15_NFE_total),
                     nrow=2,byrow=TRUE)
CADD15 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
                      masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
                      GnomAD_stats_MS_CADD15_total,
                      GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD15_total),
                    nrow=2,byrow=TRUE)
CADD15_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15_total,
                          GnomAD_stats_MS_CADD15_NFE_total,
                          GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD15_NFE_total),
                        nrow=2,byrow=TRUE)
CADD20 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
                      masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
                      GnomAD_stats_MS_CADD20_total,
                      GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD20_total),
                    nrow=2,byrow=TRUE)
CADD20_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD20_total,
                          GnomAD_stats_MS_CADD20_NFE_total,
                          GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD20_NFE_total),
                        nrow=2,byrow=TRUE)
CADD25 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
                      masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
                      GnomAD_stats_MS_CADD25_total,
                      GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD25_total),
                    nrow=2,byrow=TRUE)
CADD25_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD25_total,
                          GnomAD_stats_MS_CADD25_NFE_total,
                          GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD25_NFE_total),
                        nrow=2,byrow=TRUE)
CADD30 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
                   masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
                   GnomAD_stats_MS_CADD30_total,
                   GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD30_total),
                 nrow=2,byrow=TRUE)
CADD30_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
                       masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD30_total,
                       GnomAD_stats_MS_CADD30_NFE_total,
                       GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD30_NFE_total),
                     nrow=2,byrow=TRUE)
REVEL.0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
                      masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
                      GnomAD_stats_MS_REVEL.0.45_total,
                      GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL.0.45_total),
                    nrow=2,byrow=TRUE)
REVEL.0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL.0.45_total,
                          GnomAD_stats_MS_REVEL.0.45_NFE_total,
                          GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL.0.45_NFE_total),
                        nrow=2,byrow=TRUE)
REVEL0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
                          GnomAD_stats_MS_REVEL0.45_total,
                          GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.45_total),
                        nrow=2,byrow=TRUE)
REVEL0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
                              masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_total,
                              GnomAD_stats_MS_REVEL0.45_NFE_total,
                              GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.45_NFE_total),
                            nrow=2,byrow=TRUE)
REVEL0.5 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
                          GnomAD_stats_MS_REVEL0.5_total,
                          GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.5_total),
                        nrow=2,byrow=TRUE)
REVEL0.5_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
                              masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.5_total,
                              GnomAD_stats_MS_REVEL0.5_NFE_total,
                              GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.5_NFE_total),
                            nrow=2,byrow=TRUE)
REVEL0.55 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
                          GnomAD_stats_MS_REVEL0.55_total,
                          GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.55_total),
                        nrow=2,byrow=TRUE)
REVEL0.55_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
                              masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.55_total,
                              GnomAD_stats_MS_REVEL0.55_NFE_total,
                              GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.55_NFE_total),nrow=2,byrow=TRUE)
REVEL0.6 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
                         GnomAD_stats_MS_REVEL0.6_total,
                         GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.6_total),
                       nrow=2,byrow=TRUE)
REVEL0.6_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
                             masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.6_total,
                             GnomAD_stats_MS_REVEL0.6_NFE_total,
                             GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.6_NFE_total),
                           nrow=2,byrow=TRUE)
REVEL0.7 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
                         GnomAD_stats_MS_REVEL0.7_total,
                         GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.7_total),
                       nrow=2,byrow=TRUE)
REVEL0.7_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
                             masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.7_total,
                             GnomAD_stats_MS_REVEL0.7_NFE_total,
                             GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.7_NFE_total),
                           nrow=2,byrow=TRUE)
REVEL0.8 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
                     masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
                     GnomAD_stats_MS_REVEL0.8_total,
                     GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_REVEL0.8_total),
                   nrow=2,byrow=TRUE)
REVEL0.8_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
                         masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.8_total,
                         GnomAD_stats_MS_REVEL0.8_NFE_total,
                         GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_REVEL0.8_NFE_total),
                       nrow=2,byrow=TRUE)
CADD15REVEL0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
                            masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
                            GnomAD_stats_MS_CADD15REVEL0.45_total,
                            GnomAD_stats_MS_MAX_AN_total-GnomAD_stats_MS_CADD15REVEL0.45_total),
                          nrow=2,byrow=TRUE)
CADD15REVEL0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
                                masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_CADD15REVEL0.45_total,
                                GnomAD_stats_MS_CADD15REVEL0.45_NFE_total,
                                GnomAD_stats_MS_MAX_AN_NFE_total-GnomAD_stats_MS_CADD15REVEL0.45_NFE_total),
                              nrow=2,byrow=TRUE)
MPC2CADD15REVEL0.45 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
                                masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
                                GnomAD_stats_MS_MPC2CADD15REVEL0.45_total,
                                GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2CADD15REVEL0.45_total),
                              nrow=2,byrow=TRUE)
MPC2CADD15REVEL0.45_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
                                    masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2CADD15REVEL0.45_total,
                                    GnomAD_stats_MS_MPC2CADD15REVEL0.45_NFE_total,
                                    GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2CADD15REVEL0.45_NFE_total),nrow=2,byrow=TRUE)
MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                          masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                          GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                          GnomAD_stats_MS_MAX_AN_MPC_total-GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total),
                                                        nrow=2,byrow=TRUE)
MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE <- matrix(c(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                              masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_all_alleles_MPConly_total-masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_total,
                                                              GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE_total,
                                                              GnomAD_stats_MS_MAX_AN_MPC_NFE_total-GnomAD_stats_MS_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE_total),
                                                            nrow=2,byrow=TRUE)

oddsratio <- function (a, b = NULL, c = NULL, d = NULL, conf.level = 0.95, 
    p.calc.by.independence = TRUE) 
{
    if (is.matrix(a)) {
        if ((dim(a)[1] != 2L) | (dim(a)[2] != 2L)) {
            stop("Input matrix must be a 2x2 table.")
        }
        .a <- a[1, 1]
        .b <- a[1, 2]
        .c <- a[2, 1]
        .d <- a[2, 2]
        .data.name <- deparse(substitute(a))
    }
    else {
        .a <- a
        .b <- b
        .c <- c
        .d <- d
        .data.name <- paste(deparse(substitute(a)), deparse(substitute(b)), 
            deparse(substitute(c)), deparse(substitute(d)))
    }
    .MAT <- matrix(c(.a, .b, M1 <- .a + .b, .c, .d, M0 <- .c + 
        .d, N1 <- .a + .c, N0 <- .b + .d, Total <- .a + .b + 
        .c + .d), 3, 3)
    colnames(.MAT) <- c("Sample", "GnomAD", "Total") #("Disease", "Nondisease", "Total")
    rownames(.MAT) <- c("MS", "No MS", "Total") #("Exposed", "Nonexposed", "Total")
    class(.MAT) <- "table"
    print(.MAT)
    ESTIMATE <- (.a /.b)/(.c/.d)
    norm.pp <- qnorm(1 - (1 - conf.level)/2)
    if (p.calc.by.independence) {
        p.v <- 2 * (1 - pnorm(abs((.a - N1 * M1/Total)/sqrt(N1 * 
            N0 * M1 * M0/Total/Total/(Total - 1)))))
    }
    else {
        p.v <- 2 * (1 - pnorm(log(ifelse(ESTIMATE > 1, ESTIMATE, 
            1/ESTIMATE))/sqrt(1/.a + 1/.b + 1/.c + 1/.d)))
    }
    ORL <- ESTIMATE * exp(-norm.pp * sqrt(1/.a + 1/.b + 1/.c + 
        1/.d))
    ORU <- ESTIMATE * exp(norm.pp * sqrt(1/.a + 1/.b + 1/.c + 
        1/.d)) %>% signif(digits=7)
    CINT <- paste(signif(ORL,digits = 7),signif(ORU,digits = 7),sep="~")
    attr(CINT, "conf.level") <- conf.level
    RVAL <- list(p.value = p.v, conf.int = CINT, estimate = ESTIMATE, 
        method = "Odds ratio estimate and its significance probability", 
        data.name = .data.name)
    class(RVAL) <- "htest"
    return(RVAL)
}

OR_MPC.2 <- oddsratio(MPC.2,p.calc.by.independence=TRUE)
OR_MPC.2_NFE <- oddsratio(MPC.2_NFE,p.calc.by.independence=TRUE)
OR_MPC2 <- oddsratio(MPC2,p.calc.by.independence=TRUE)
OR_MPC2_NFE <- oddsratio(MPC2_NFE,p.calc.by.independence=TRUE)
OR_MPC2.5 <- oddsratio(MPC2.5,p.calc.by.independence=TRUE)
OR_MPC2.5_NFE <- oddsratio(MPC2.5_NFE,p.calc.by.independence=TRUE)
OR_MPC3 <- oddsratio(MPC3,p.calc.by.independence=TRUE)
OR_MPC3_NFE <- oddsratio(MPC3_NFE,p.calc.by.independence=TRUE)
OR_CADD.15 <- oddsratio(CADD.15,p.calc.by.independence=TRUE)
OR_CADD.15_NFE <- oddsratio(CADD.15_NFE,p.calc.by.independence=TRUE)
OR_CADD15 <- oddsratio(CADD15,p.calc.by.independence=TRUE)
OR_CADD15_NFE <- oddsratio(CADD15_NFE,p.calc.by.independence=TRUE)
OR_CADD20 <- oddsratio(CADD20,p.calc.by.independence=TRUE)
OR_CADD20_NFE <- oddsratio(CADD20_NFE,p.calc.by.independence=TRUE)
OR_CADD25 <- oddsratio(CADD25,p.calc.by.independence=TRUE)
OR_CADD25_NFE <- oddsratio(CADD25_NFE,p.calc.by.independence=TRUE)
OR_CADD30 <- oddsratio(CADD30,p.calc.by.independence=TRUE)
OR_CADD30_NFE <- oddsratio(CADD30_NFE,p.calc.by.independence=TRUE)
OR_REVEL.0.45 <- oddsratio(REVEL.0.45,p.calc.by.independence=TRUE)
OR_REVEL.0.45_NFE <- oddsratio(REVEL.0.45_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.45 <- oddsratio(REVEL0.45,p.calc.by.independence=TRUE)
OR_REVEL0.45_NFE <- oddsratio(REVEL0.45_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.5 <- oddsratio(REVEL0.5,p.calc.by.independence=TRUE)
OR_REVEL0.5_NFE <- oddsratio(REVEL0.5_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.55 <- oddsratio(REVEL0.55,p.calc.by.independence=TRUE)
OR_REVEL0.55_NFE <- oddsratio(REVEL0.55_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.6 <- oddsratio(REVEL0.6,p.calc.by.independence=TRUE)
OR_REVEL0.6_NFE <- oddsratio(REVEL0.6_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.7 <- oddsratio(REVEL0.7,p.calc.by.independence=TRUE)
OR_REVEL0.7_NFE <- oddsratio(REVEL0.7_NFE,p.calc.by.independence=TRUE)
OR_REVEL0.8 <- oddsratio(REVEL0.8,p.calc.by.independence=TRUE)
OR_REVEL0.8_NFE <- oddsratio(REVEL0.8_NFE,p.calc.by.independence=TRUE)
OR_CADD15REVEL0.45 <- oddsratio(CADD15REVEL0.45,p.calc.by.independence=TRUE)
OR_CADD15REVEL0.45_NFE <- oddsratio(CADD15REVEL0.45_NFE,p.calc.by.independence=TRUE)
OR_MPC2CADD15REVEL0.45 <- oddsratio(MPC2CADD15REVEL0.45,p.calc.by.independence=TRUE)
OR_MPC2CADD15REVEL0.45_NFE <- oddsratio(MPC2CADD15REVEL0.45_NFE,p.calc.by.independence=TRUE)
OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8 <- oddsratio(MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8,p.calc.by.independence=TRUE)
OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE <- oddsratio(MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE,p.calc.by.independence=TRUE)

Combine all results into one spreadsheet, and save

a = c(OR_MPC.2$data.name,OR_MPC.2_NFE$data.name,OR_MPC2$data.name,OR_MPC2_NFE$data.name,OR_MPC2.5$data.name,OR_MPC2.5_NFE$data.name,OR_MPC3$data.name,OR_MPC3_NFE$data.name,OR_CADD.15$data.name,OR_CADD.15_NFE$data.name,OR_CADD15$data.name,OR_CADD15_NFE$data.name,OR_CADD20$data.name,OR_CADD20_NFE$data.name,OR_CADD25$data.name,OR_CADD25_NFE$data.name,OR_CADD30$data.name,OR_CADD30_NFE$data.name,OR_REVEL.0.45$data.name,OR_REVEL.0.45_NFE$data.name,OR_REVEL0.45$data.name,OR_REVEL0.45_NFE$data.name,OR_REVEL0.5$data.name,OR_REVEL0.5_NFE$data.name,OR_REVEL0.55$data.name,OR_REVEL0.55_NFE$data.name,OR_REVEL0.6$data.name,OR_REVEL0.6_NFE$data.name,OR_REVEL0.7$data.name,OR_REVEL0.7_NFE$data.name,OR_REVEL0.8$data.name,OR_REVEL0.8_NFE$data.name,OR_CADD15REVEL0.45$data.name,OR_CADD15REVEL0.45_NFE$data.name,OR_MPC2CADD15REVEL0.45$data.name,OR_MPC2CADD15REVEL0.45_NFE$data.name,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$data.name,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$data.name)
b = c(OR_MPC.2$estimate,OR_MPC.2_NFE$estimate,OR_MPC2$estimate,OR_MPC2_NFE$estimate,OR_MPC2.5$estimate,OR_MPC2.5_NFE$estimate,OR_MPC3$estimate,OR_MPC3_NFE$estimate,OR_CADD.15$estimate,OR_CADD.15_NFE$estimate,OR_CADD15$estimate,OR_CADD15_NFE$estimate,OR_CADD20$estimate,OR_CADD20_NFE$estimate,OR_CADD25$estimate,OR_CADD25_NFE$estimate,OR_CADD30$estimate,OR_CADD30_NFE$estimate,OR_REVEL.0.45$estimate,OR_REVEL.0.45_NFE$estimate,OR_REVEL0.45$estimate,OR_REVEL0.45_NFE$estimate,OR_REVEL0.5$estimate,OR_REVEL0.5_NFE$estimate,OR_REVEL0.55$estimate,OR_REVEL0.55_NFE$estimate,OR_REVEL0.6$estimate,OR_REVEL0.6_NFE$estimate,OR_REVEL0.7$estimate,OR_REVEL0.7_NFE$estimate,OR_REVEL0.8$estimate,OR_REVEL0.8_NFE$estimate,OR_CADD15REVEL0.45$estimate,OR_CADD15REVEL0.45_NFE$estimate,OR_MPC2CADD15REVEL0.45$estimate,OR_MPC2CADD15REVEL0.45_NFE$estimate,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$estimate,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$estimate)
c = c(OR_MPC.2$conf.int,OR_MPC.2_NFE$conf.int,OR_MPC2$conf.int,OR_MPC2_NFE$conf.int,OR_MPC2.5$conf.int,OR_MPC2.5_NFE$conf.int,OR_MPC3$conf.int,OR_MPC3_NFE$conf.int,OR_CADD.15$conf.int,OR_CADD.15_NFE$conf.int,OR_CADD15$conf.int,OR_CADD15_NFE$conf.int,OR_CADD20$conf.int,OR_CADD20_NFE$conf.int,OR_CADD25$conf.int,OR_CADD25_NFE$conf.int,OR_CADD30$conf.int,OR_CADD30_NFE$conf.int,OR_REVEL.0.45$conf.int,OR_REVEL.0.45_NFE$conf.int,OR_REVEL0.45$conf.int,OR_REVEL0.45_NFE$conf.int,OR_REVEL0.5$conf.int,OR_REVEL0.5_NFE$conf.int,OR_REVEL0.55$conf.int,OR_REVEL0.55_NFE$conf.int,OR_REVEL0.6$conf.int,OR_REVEL0.6_NFE$conf.int,OR_REVEL0.7$conf.int,OR_REVEL0.7_NFE$conf.int,OR_REVEL0.8$conf.int,OR_REVEL0.8_NFE$conf.int,OR_CADD15REVEL0.45$conf.int,OR_CADD15REVEL0.45_NFE$conf.int,OR_MPC2CADD15REVEL0.45$conf.int,OR_MPC2CADD15REVEL0.45_NFE$conf.int,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$conf.int,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$conf.int)
d = c(OR_MPC.2$p.value,OR_MPC.2_NFE$p.value,OR_MPC2$p.value,OR_MPC2_NFE$p.value,OR_MPC2.5$p.value,OR_MPC2.5_NFE$p.value,OR_MPC3$p.value,OR_MPC3_NFE$p.value,OR_CADD.15$p.value,OR_CADD.15_NFE$p.value,OR_CADD15$p.value,OR_CADD15_NFE$p.value,OR_CADD20$p.value,OR_CADD20_NFE$p.value,OR_CADD25$p.value,OR_CADD25_NFE$p.value,OR_CADD30$p.value,OR_CADD30_NFE$p.value,OR_REVEL.0.45$p.value,OR_REVEL.0.45_NFE$p.value,OR_REVEL0.45$p.value,OR_REVEL0.45_NFE$p.value,OR_REVEL0.5$p.value,OR_REVEL0.5_NFE$p.value,OR_REVEL0.55$p.value,OR_REVEL0.55_NFE$p.value,OR_REVEL0.6$p.value,OR_REVEL0.6_NFE$p.value,OR_REVEL0.7$p.value,OR_REVEL0.7_NFE$p.value,OR_REVEL0.8$p.value,OR_REVEL0.8_NFE$p.value,OR_CADD15REVEL0.45$p.value,OR_CADD15REVEL0.45_NFE$p.value,OR_MPC2CADD15REVEL0.45$p.value,OR_MPC2CADD15REVEL0.45_NFE$p.value,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8$p.value,OR_MPC2_OR_CADD15REVEL0.45_OR_CADD30_OR_REVEL0.8_NFE$p.value)

ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01 <- tibble(
  "Filtering"=a,
  "Odds_ratio"=b,
  "95%_CI"=c,
  "p_value"=d
)

write_tsv(ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_sample0.01, path="ORs_masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_sample0.01.tsv")

Calculate ratios and Fisher’s test values for genes containing enriched variants with corresponding prediction scores, and save output

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios <- 
  mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats,
         "Sample_Gene_LOF_Freq_Ratio_GnomAD_0.001"=Sample_Gene_Freq/FILTER_RF_MS_AF_0.001_REVEL0.45_ADJ,
         "Sample_Gene_LOF_Freq_Ratio_GnomAD_NFE_0.001"=Sample_Gene_Freq/FILTER_RF_MS_AF_0.001_REVEL0.45_NFE_ADJ)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios2 <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios, "Sample_Gene_LOF_AF_Ratio"=Sample_AF/GnomAD_v2.1_non_cancer_AF, 
"Sample_Gene_LOF_AF_Ratio_NFE"=Sample_AF/GnomAD_v2.1_non_cancer_AF_nfe)

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios2,Total_Case_Alleles=Total_Sample_Alleles)
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2 <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults, MAX_AN=replace(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN, is.na(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN), max(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN, na.rm=TRUE))) %>% 
  mutate(MAX_AN_NFE=replace(.$MAX_AN_NFE, is.na(.$MAX_AN_NFE), max(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults$MAX_AN_NFE, na.rm=TRUE)))

fisherresults_ENST <- apply(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2[,c(221,231,241,223)],1,function(x) {fisher.test(rbind(x[1:2],c(x[3]-x[1],x[4]-x[2])))})

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005 = sapply(fisherresults_ENST,function(x) round(x$p.value,12))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$OR_0.005 = sapply(fisherresults_ENST,function(x) round(x$estimate,4))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$`95%CI_0.005` = sapply(fisherresults_ENST,function(x) paste(round(x$conf.int[1:2],2),collapse="~"))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$BH_0.005 = p.adjust(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005,method = "BH")

fisherresults2_ENST <- apply(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2[,c(221,234,241,227)],1,function(x) {fisher.test(rbind(x[1:2],c(x[3]-x[1],x[4]-x[2])))})

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005_NFE = sapply(fisherresults2_ENST,function(x) round(x$p.value,12))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$OR_0.005_NFE = sapply(fisherresults2_ENST,function(x) round(x$estimate,4))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$`95%CI_0.005_NFE` = sapply(fisherresults2_ENST,function(x) paste(round(x$conf.int[1:2],2),collapse="~"))
masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$BH_0.005_NFE = p.adjust(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2$P_value_Fisher_0.005_NFE,method = "BH")

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults3 <- mutate(masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults2, FilteringAF_95_Exceeds_MaxCredPopAF=((GnomAD_v2.1_non_cancer_Filtering_AF_95)>0.000181)) %>% 
  mutate(FilteringAF_95_NFE_Exceeds_MaxCredPopAF=((GnomAD_v2.1_non_cancer_Filtering_AF_95_nfe)>0.000181))

masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_REVEL0.45_sampleAF0.01_withGnomADstats_ratios_fisherresults3 %>% 
  write_excel_csv(path="masterfile_eoc_goodQ_biotype_MS_ENSTcanonical_0.001_REVEL0.45_sample0.01.csv",na=".",append=FALSE,col_names=TRUE)
LS0tCnRpdGxlOiAiVGhlc2lzIE1pc3NlbnNlIFZhcmlhbnQgQUYgQW5hbHlzaXMgU2NyaXB0IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpBTEwgSU1QT1JURUQgRklMRVMgTVVTVCBCRSBJTiBUSEUgU0FNRSBESVJFQ1RPUlkgQVMgVEhJUyBTQ1JJUFQKCkxvYWQgdGlkeXZlcnNlIHBhY2thZ2UKYGBge3J9CmxpYnJhcnkoInRpZHl2ZXJzZSIpCmBgYAoKSW1wb3J0IHJhdyB2Y2YgZGF0YSBmcm9tIOKAnG1hc3RlcmZpbGXigJ0gYW5kIGV4Y2x1ZGUgdmFyaWFudHMgZXhjZWVkaW5nIHNwZWNpZmllZCBHbm9tQUQgbm9uLWNhbmNlciBBRgpgYGB7cn0KbWFzdGVyZmlsZSA8LSByZWFkLmRlbGltKCJtYXN0ZXJmaWxlLnRzdiIsIGhlYWRlcj1UUlVFLCByb3cubmFtZXM9TlVMTCwgbmEuc3RyaW5ncyA9ICIuIiwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoIlNhbXBsZSI9IlguU2FtcGxlIikgJT4lIAogICMgZmlsdGVyKEdub21BRF92Mi4xX25vbl9jYW5jZXJfQUY8PTAuMDA1KQogIGZpbHRlcihHbm9tQURfdjIuMV9ub25fY2FuY2VyX0FGPD0wLjAwMSkKICAjIGZpbHRlcihHbm9tQURfdjIuMV9ub25fY2FuY2VyX0FGPD0wLjAwMDUpCiAgIyBmaWx0ZXIoR25vbUFEX3YyLjFfbm9uX2NhbmNlcl9BRjw9MC4wMDAxKQpgYGAKCkV4Y2x1ZGUgbm9uLWVwaXRoZWxpYWwsIHV0ZXJpbmUtb25seSwgQlJDQSArdmUgYW5kIG90aGVyIG11dGF0aW9uICt2ZSBzYW1wbGVzCmBgYHtyfQpWaVBfQ29tcGxldGVfQ29ob3J0IDwtIHJlYWQuZGVsaW0oIlZpUF9Mb0ZfQ29tcGxldGVfQ29ob3J0LnR4dCIsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpClZpUF9Db21wbGV0ZV9Db2hvcnRfbGlzdCA8LSBWaVBfQ29tcGxldGVfQ29ob3J0WywxXQoKbWFzdGVyZmlsZV9lb2MgPC0gZmlsdGVyKG1hc3RlcmZpbGUsU2FtcGxlJWluJWMoVmlQX0NvbXBsZXRlX0NvaG9ydF9saXN0KSkKcm0obWFzdGVyZmlsZSkKYGBgCgpBcHBlbmQgcGF0aWVudCBwYXRoIGRhdGEKYGBge3J9ClZpUF9PdkNhX1BhdGhfRGF0YSA8LSByZWFkLmRlbGltKCJWaVBfT3ZDYV9QYXRoX0RhdGEudHh0IiwgaGVhZGVyPVRSVUUsIHJvdy5uYW1lcz1OVUxMLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgZHBseXI6OnJlbmFtZSgiU2FtcGxlIj1FeG9tZS5JRCkKbWFzdGVyZmlsZV9lb2Nfd2l0aFBhdGggPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jLFZpUF9PdkNhX1BhdGhfRGF0YSxieT0iU2FtcGxlIixjb3B5PUZBTFNFKQpybShWaVBfT3ZDYV9QYXRoX0RhdGEsbWFzdGVyZmlsZV9lb2MpCmBgYAoKRXhjbHVkZSBsb3ctZ3JhZGUgdHVtb3VyIHNhbXBsZXMKYGBge3J9Cm1hc3RlcmZpbGVfZW9jMiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2Nfd2l0aFBhdGgsKEhpc3RvcGF0aC5UeXBlIT0iQm9yZGVybGluZSB0dW1vdXIiKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIaXN0b3BhdGguVHlwZSE9Ik11Y2lub3VzIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJDbGVhciBjZWxsIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJMb3ctZ3JhZGUgc2Vyb3VzIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJMb3ctZ3JhZGUgZW5kb21ldHJpb2lkIikmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGlzdG9wYXRoLlR5cGUhPSJTZXJvdXMgKD9sb3ctZ3JhZGUvYm9yZGVybGluZSkiKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIaXN0b3BhdGguVHlwZSE9Ik1peGVkIE11bGxlcmlhbiIpJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhpc3RvcGF0aC5UeXBlIT0iTWl4ZWQgRUFPQyIpKQpybShtYXN0ZXJmaWxlX2VvY193aXRoUGF0aCkKYGBgCgpFeGNsdWRlIGxvdy1xdWFsaXR5IHZhcmlhbnRzLCBHbm9tQUQgUkYtZmxhZ2dlZCB2YXJpYW50cyBhbmQgbm9uLXByb3RlaW4tY29kaW5nIGdlbmVzCmBgYHtyfQptYXN0ZXJmaWxlX2VvY19nb29kUSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2MyLCAoUVVBTD49MzApJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSWRlbnRpZmllZCE9IkZpbHRlcmVkSW5BbGwiKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNhbXBsZS5QTUNEUD49MTApJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU2FtcGxlLlBNQ0ZSRVE+PTAuMjUpKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoIXN0cl9kZXRlY3QoR25vbUFEX3YyLjFfRklMVEVSX2V4b21lLCJJbmJyZWVkaW5nQ29lZmYiKSYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzdHJfZGV0ZWN0KEdub21BRF92Mi4xX0ZJTFRFUl9leG9tZSwiUkYiKSl8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzLm5hKEdub21BRF92Mi4xX0ZJTFRFUl9leG9tZSkpICU+JSAKICBmaWx0ZXIoKCFzdHJfZGV0ZWN0KEdub21BRF92Mi4xX0ZJTFRFUl9nZW5vbWUsIkluYnJlZWRpbmdDb2VmZiIpJgogICAgICAgICAgICAhc3RyX2RldGVjdChHbm9tQURfdjIuMV9GSUxURVJfZ2Vub21lLCJSRiIpKXwKICAgICAgICAgICBpcy5uYShHbm9tQURfdjIuMV9GSUxURVJfZ2Vub21lKSkgJT4lIAogIGZpbHRlcihCSU9UWVBFJWluJWMoInByb3RlaW5fY29kaW5nIikpClRvdGFsX1NhbXBsZV9BbGxlbGVzIDwtIChuX2Rpc3RpbmN0KG1hc3RlcmZpbGVfZW9jX2dvb2RRJFNhbXBsZSkqMikKcm0obWFzdGVyZmlsZV9lb2MyKQpgYGAKCkV4Y2x1ZGUgSElHSCBpbXBhY3QgdmFyaWFudHMgKHBsdXMgdmFyaWFudHMgd2l0aCBDb25zZXF1ZW5jZSA9PSAicHJvdGVpbl9hbHRlcmluZ192YXJpYW50IikKYGBge3J9Cm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVMgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRLCBJTVBBQ1Q9PSJNT0RFUkFURSIpICU+JSAKICBmaWx0ZXIoc3RyX2RldGVjdChDb25zZXF1ZW5jZSwibWlzc2Vuc2VfdmFyaWFudCIpKQpgYGAKCkV4Y2x1ZGUgTk0gY2Fub25pY2FsIChSZWZTZXEpIHZhcmlhbnRzIGFuZCBjb252ZXJ0IE1QQyBzdHJpbmdzIHRvIGludGVnZXJzL2RvdWJsZXMKYGBge3J9Cm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NUywgQ0FOT05JQ0FMPT0iWUVTIikgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCRNUEMgPC0gYXMubnVtZXJpYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwkTVBDKSAlPiUgcmVwbGFjZV9uYSgwKQpybShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TKQpgYGAKCkRpdmlkZSBkYXRhIGludG8gZGlmZmVyZW50IHByZWRpY3Rpb24gc2NvcmUgZ3JvdXBzCmBgYHtyfQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQzwyKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQz49MikpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQz49Mi41KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKE1QQz49MykpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRDwxNSkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTE1KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMCA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MjApKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPj0yNSkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzAgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKENBRERfUEhSRUQ+PTMwKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZTwwLjQ1KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNDUpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCwgKFJFVkVMX3Njb3JlPj0wLjUpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChSRVZFTF9zY29yZT49MC41NSkpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNiA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNikpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuNykpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOCA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoUkVWRUxfc2NvcmU+PTAuOCkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1IDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWwsIChDQUREX1BIUkVEPj0xNSkmKFJFVkVMX3Njb3JlPj0wLjQ1KSkgIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsLCAoQ0FERF9QSFJFRD49MTUpJihSRVZFTF9zY29yZT49MC40NSkmKE1QQz49MikpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gYmluZF9yb3dzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsLmlkPU5VTEwpICU+JSAKICBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkKCnJtKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbCkKYGBgCgpTYW1wbGUgdmFyaWFudCBjb3VudHMgYW5kIEFGcwpgYGB7cn0KdmFyaWFudF9jb3VudHNfQUZzIDwtIGZ1bmN0aW9uKHZjZil7CnZhcmlhbnRzX2hldGVyb3p5Z291cyA8LSB2Y2YgJT4lIAogIHNlbGVjdChIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICBncm91cF9ieShIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICBzdW1tYXJpc2UobigpKSAlPiUgCiAgZmlsdGVyKChTYW1wbGUuR1QlaW4lYygiJzAvMSIsIicxLzAiKSkpICU+JSAKICBkcGx5cjo6cmVuYW1lKGFsbGVsZXMgPSAibigpIikgJT4lIAogIGdyb3VwX2J5KEhHVlNjKSAlPiUgCiAgc3VtbWFyaXNlKHN1bShhbGxlbGVzKSkKdmFyaWFudHNfaG9tb3p5Z291cyA8LSB2Y2YgJT4lIAogIHNlbGVjdChIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICBncm91cF9ieShIR1ZTYyxTYW1wbGUuR1QpICU+JSAKICBzdW1tYXJpc2UobigpKSAlPiUgCiAgZmlsdGVyKChTYW1wbGUuR1QhPSInMC8xIikmKFNhbXBsZS5HVCE9IicxLzAiKSkgJT4lIAogIG11dGF0ZShhbGxlbGVzID0gYG4oKWAqMikgJT4lIAogIHNlbGVjdCgtYG4oKWApICU+JSAKICBncm91cF9ieShIR1ZTYykgJT4lIAogIHN1bW1hcmlzZShzdW0oYWxsZWxlcykpCnZhcmlhbnRzIDwtIGZ1bGxfam9pbih2YXJpYW50c19oZXRlcm96eWdvdXMsdmFyaWFudHNfaG9tb3p5Z291cyxieT0iSEdWU2MiLGNvcHk9RkFMU0Usc3VmZml4PWMoIi54IiwiLnkiKSkgJT4lCiAgbXV0YXRlX2FsbChmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZShUb3RhbF9BbGxlbGVfQ291bnQ9YHN1bShhbGxlbGVzKS54YCtgc3VtKGFsbGVsZXMpLnlgKSAlPiUgCiAgbXV0YXRlKFNhbXBsZV9BRj1Ub3RhbF9BbGxlbGVfQ291bnQvVG90YWxfU2FtcGxlX0FsbGVsZXMpCnZjZiA8LSBsZWZ0X2pvaW4odmNmLCB2YXJpYW50c1ssYygxLDQ6NSldLGJ5PSJIR1ZTYyIsY29weT1GQUxTRSkKfQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yICA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMiA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjUpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzIDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMykKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMCkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjUpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNiA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcgPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNykKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1IDwtIHZhcmlhbnRfY291bnRzX0FGcyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1KQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSA8LSB2YXJpYW50X2NvdW50c19BRnMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDUpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gdmFyaWFudF9jb3VudHNfQUZzKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgpCgpybShsaXN0PShscyhwYXR0ZXJuPSJedmFyaWFudHMiKSkpCmBgYAoKT3V0cHV0IGxpc3Qgb2YgZ2VuZXMgYW5kIHZhcmlhbnRzIHdpdGggc2FtcGxlIEFGID4gMC4wMQpgYGB7cn0KbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2dlbmVzYW5kdmFyaWFudHMwLjAxIDwtIGJpbmRfcm93cyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44KSAlPiUgCiAgZmlsdGVyKFNhbXBsZV9BRiA+IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9nZW5lc2FuZHZhcmlhbnRzMC4wMVssYygyOjYsMjU6NTQpXSAlPiUgCiAgZGlzdGluY3QoLmtlZXBfYWxsID0gRkFMU0UpICU+JSAKICB3cml0ZV9leGNlbF9jc3YocGF0aD0ibWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2dlbmVzYW5kdmFyaWFudHMwLjAxLmNzdiIsbmE9Ii4iLGFwcGVuZD1GQUxTRSxjb2xfbmFtZXM9VFJVRSkKcm0obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2dlbmVzYW5kdmFyaWFudHMwLjAxKQpgYGAKCkV4Y2x1ZGUgdmFyaWFudHMgd2l0aCBzYW1wbGUgQUYgPiAwLjAxzJsKYGBge3J9Cm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMixTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzMsU2FtcGxlX0FGIDwgMC4wMSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzAsU2FtcGxlX0FGIDwgMC4wMSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDUsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNl9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNixTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjcsU2FtcGxlX0FGIDwgMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44LFNhbXBsZV9BRiA8IDAuMDEpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBmaWx0ZXIobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxTYW1wbGVfQUYgPCAwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZmlsdGVyKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1LFNhbXBsZV9BRiA8IDAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxIDwtIGZpbHRlcihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44LFNhbXBsZV9BRiA8IDAuMDEpCgpybShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjAsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwLG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTUsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42LG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNyxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjgsbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NSxtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44KQpgYGAKClNhbXBsZSBnZW5lIGNvdW50cyBhbmQgZnJlcXVlbmNpZXMKYGBge3J9CmdlbmVfY291bnRzX0FGIDwtIGZ1bmN0aW9uKHZjZil7CmdlbmVzX29uZVZhckFsbGVsZSA8LSB2Y2YgJT4lIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgc2VsZWN0KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICBncm91cF9ieShTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgc3VtbWFyaXNlKG4oKSkgJT4lIAogIGZpbHRlcigoU2FtcGxlLkdUJWluJWMoIicwLzEiLCInMS8wIikpKSAlPiUgCiAgZHBseXI6OnJlbmFtZShnZW5lX1ZhciA9ICJuKCkiKSAlPiUgCiAgZ3JvdXBfYnkoU1lNQk9MKSAlPiUgCiAgc3VtbWFyaXNlKHN1bShnZW5lX1ZhcikpCmdlbmVzX3R3b1ZhckFsbGVsZSA8LSB2Y2YgJT4lIHNlbGVjdChTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgc2VsZWN0KFNZTUJPTCxTYW1wbGUuR1QpICU+JSAKICBncm91cF9ieShTWU1CT0wsU2FtcGxlLkdUKSAlPiUgCiAgc3VtbWFyaXNlKG4oKSkgJT4lIAogIGZpbHRlcigoU2FtcGxlLkdUIT0iJzAvMSIpJihTYW1wbGUuR1QhPSInMS8wIikpICU+JSAKICBtdXRhdGUoZ2VuZV9WYXIgPSBgbigpYCoyKSAlPiUgCiAgc2VsZWN0KC1gbigpYCkgJT4lIAogIGdyb3VwX2J5KFNZTUJPTCkgJT4lIAogIHN1bW1hcmlzZShzdW0oZ2VuZV9WYXIpKQpnZW5lcyA8LSBmdWxsX2pvaW4oZ2VuZXNfb25lVmFyQWxsZWxlLGdlbmVzX3R3b1ZhckFsbGVsZSxieT0iU1lNQk9MIixjb3B5PUZBTFNFLHN1ZmZpeD1jKCIueCIsIi55IikpICU+JSAKICBtdXRhdGVfYWxsKGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlKFRvdGFsX0dlbmVfQ291bnQ9YHN1bShnZW5lX1ZhcikueGArYHN1bShnZW5lX1ZhcikueWApICU+JSAKICBtdXRhdGUoU2FtcGxlX0dlbmVfRnJlcT1Ub3RhbF9HZW5lX0NvdW50L1RvdGFsX1NhbXBsZV9BbGxlbGVzKQp2Y2YgPC0gbGVmdF9qb2luKHZjZiwgZ2VuZXNbLGMoMSw0OjUpXSxieT0iU1lNQk9MIixjb3B5PUZBTFNFKQp9CgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM19zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDEpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDEpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxIDwtIGdlbmVfY291bnRzX0FGKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDEgPC0gZ2VuZV9jb3VudHNfQUYobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSA8LSBnZW5lX2NvdW50c19BRihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSkKCnJtKGxpc3Q9KGxzKHBhdHRlcm49Il5nZW5lcyIpKSkKYGBgCgpBZGQgR25vbUFEIGdlbmUtbGV2ZWwgZGF0YQpgYGB7cn0KR25vbUFEX3N0YXRzX01TIDwtIHJlYWQuZGVsaW0oIkdub21BRC5nZW5lLnN0YXRzLnYyLjFfbWlzc2Vuc2VfQUZfMC4wMDEudHN2IiwgaGVhZGVyPVRSVUUsIHJvdy5uYW1lcz1OVUxMLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgZHBseXI6OnJlbmFtZShTWU1CT0w9WC5TeW1ib2wpIApHbm9tQURfc3RhdHNfTVMgPC0gR25vbUFEX3N0YXRzX01TWyxjKDE6MTMsMTU2OjI4MSldIAoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxNDoxOSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDIwOjI1KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywyNjozMSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMzI6MzcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsMzg6NDMpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNDQ6NDkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDUwOjU1KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQyNV9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMyw1Njo2MSldLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNjI6NjcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQzMF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtCm11dGF0ZV9hdChtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfc2FtcGxlQUYwLjAxLEdub21BRF9zdGF0c19NU1ssYygyLDY6MTMsNjg6NzMpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTC4wLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDc0Ojc5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDgwOjg1KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDg2OjkxKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyx2YXJzKHN0YXJ0c193aXRoKCJGSUxURVJfIikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUgCiAgbXV0YXRlX2lmKGdyZXBsKCJwb3BtYXgkIiwgbmFtZXMoLikpLGZ1bnMoaWZlbHNlKC4gPT0gIk5BIiwgMCwgYXMubnVtZXJpYyguKSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoZW5kc193aXRoKCJwb3BtYXgiKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LSBsZWZ0X2pvaW4obWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDkyOjk3KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMDQ6MTA5KV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF9zYW1wbGVBRjAuMDEsR25vbUFEX3N0YXRzX01TWyxjKDIsNjoxMywxMTY6MTIxKV0sYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpIAptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEzNDoxMzkpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0gbGVmdF9qb2luKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEyMjoxMjcpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMgPC0KbXV0YXRlX2F0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyQ0FERDE1UkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsdmFycyhzdGFydHNfd2l0aCgiRklMVEVSXyIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lIAogIG11dGF0ZV9pZihncmVwbCgicG9wbWF4JCIsIG5hbWVzKC4pKSxmdW5zKGlmZWxzZSguID09ICJOQSIsIDAsIGFzLm51bWVyaWMoLikpKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKGVuZHNfd2l0aCgicG9wbWF4IikpLGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzIDwtIGxlZnRfam9pbihtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3NhbXBsZUFGMC4wMSxHbm9tQURfc3RhdHNfTVNbLGMoMiw2OjEzLDEyODoxMzMpXSxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0cyA8LQptdXRhdGVfYXQobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzLHZhcnMoc3RhcnRzX3dpdGgoIkZJTFRFUl8iKSksZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JSAKICBtdXRhdGVfaWYoZ3JlcGwoInBvcG1heCQiLCBuYW1lcyguKSksZnVucyhpZmVsc2UoLiA9PSAiTkEiLCAwLCBhcy5udW1lcmljKC4pKSkpICU+JSAKICBtdXRhdGVfYXQodmFycyhlbmRzX3dpdGgoInBvcG1heCIpKSxmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkKCnJtKGxpc3Q9KGxzKHBhdHRlcm49Il9zYW1wbGVBRjAuMDEkIikpKQpgYGAKCkNyZWF0ZSBkYXRhIGZyYW1lcyB3aXRoIEFnaWxlbnQgU3VyZVNlbGVjdCB3aG9sZSBleG9tZSBnZW5lcyAoRU5TVCBhbmQgcHJvdGVpbi1jb2RpbmcpIGFuZCBNUEMtb25seSB0cmFuc2NyaXB0cwpgYGB7cn0KZW5zZW1ibF9iaW90eXBlcyA8LSByZWFkLmRlbGltKCJlbnNlbWJsX2Jpb3R5cGVzLnRzdiIsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpICU+JSAKICBzZWxlY3QoZW5zZW1ibF90cmFuc2NyaXB0X2lkLHRyYW5zY3JpcHRfYmlvdHlwZSkgJT4lIAogIGRwbHlyOjpyZW5hbWUoIkZlYXR1cmUiPSJlbnNlbWJsX3RyYW5zY3JpcHRfaWQiLCJCSU9UWVBFIj0idHJhbnNjcmlwdF9iaW90eXBlIikKR25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyA8LSByZWFkLmRlbGltKCJHbm9tQUQuZ2VuZS5zdGF0cy52Mi5SRi5vbmx5LmFnaWxlbnQudjYub25seS50c3YiLCBoZWFkZXI9VFJVRSwgcm93Lm5hbWVzPU5VTEwsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpICU+JSAKICBmaWx0ZXIoQ0FOT05JQ0FMPT0iWUVTIikgJT4lIAogIGRwbHlyOjpyZW5hbWUoIlNZTUJPTCI9IlguU3ltYm9sIikgJT4lIAogIGRwbHlyOjpyZW5hbWUoIkdlbmUiPSJFTlNHIikgJT4lIAogIGxlZnRfam9pbihlbnNlbWJsX2Jpb3R5cGVzLGJ5PSJGZWF0dXJlIixjb3B5PUZBTFNFKSAlPiUgCiAgZmlsdGVyKEJJT1RZUEUlaW4lYygicHJvdGVpbl9jb2RpbmciKSkKTVBDX3RyYW5zY3JpcHRzIDwtIHJlYWQuZGVsaW0oIk1QQ190cmFuc2NyaXB0c193aXRoX2Nhbm9uaWNpdHkudHN2IiwgaGVhZGVyPVRSVUUsIHJvdy5uYW1lcz1OVUxMLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSAlPiUgCiAgZmlsdGVyKENBTk9OSUNBTCVpbiVjKCJZRVMiKSkgJT4lIAogIHNlbGVjdChGZWF0dXJlLENBTk9OSUNBTCkKCmFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2Rpbmdfb25seSA8LSB0aWJibGUoIlNZTUJPTCI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRTWU1CT0wsIkdlbmUiPUdub21BRF9zdGF0c19BZ2lsZW50U1N2Nl9MT0ZfVkVQX0VOU1RjYW5vbmljYWxfcHJvdGVpbl9jb2RpbmckR2VuZSwiRmVhdHVyZSI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRGZWF0dXJlLCAiQWdpbGVudFNTdjYiPSJZRVMiKSAlPiUgCiAgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSAKICBhcnJhbmdlKFNZTUJPTCkKCmFsbEdlbmVzX0FnaWxlbnRTU3Y2X2xpc3RfcHJvdGVpbl9jb2RpbmdfTVBDb25seTwtIHRpYmJsZSgiU1lNQk9MIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJFNZTUJPTCwiR2VuZSI9R25vbUFEX3N0YXRzX0FnaWxlbnRTU3Y2X0xPRl9WRVBfRU5TVGNhbm9uaWNhbF9wcm90ZWluX2NvZGluZyRHZW5lLCJGZWF0dXJlIj1Hbm9tQURfc3RhdHNfQWdpbGVudFNTdjZfTE9GX1ZFUF9FTlNUY2Fub25pY2FsX3Byb3RlaW5fY29kaW5nJEZlYXR1cmUsICJBZ2lsZW50U1N2NiI9IllFUyIpICU+JSAKICBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIAogIGxlZnRfam9pbihNUENfdHJhbnNjcmlwdHMsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICBmaWx0ZXIoQ0FOT05JQ0FMJWluJWMoIllFUyIpKQoKYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5MiA8LSBzZWxlY3QoYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5LEZlYXR1cmUsQWdpbGVudFNTdjYpCmBgYAoKU3VtIEFDcyBhY3Jvc3Mgc2FtcGxlL0dub21BRCBmb3IgZWFjaCBwcmVkaWN0aW9uIHNjb3JlIGNsYXNzIChNUEMgZmlndXJlcyBpbmNsdWRlIHRyYW5zY3JpcHRzIHdpdGggTVBDIHNjb3JlcyBvbmx5KQpgYGB7cn0KR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmcgPC0gZmlsdGVyKEdub21BRF9zdGF0c19NUyxDQU5PTklDQUwlaW4lYygiWUVTIikpICU+JSAKICBkcGx5cjo6cmVuYW1lKCJHZW5lIj0iRU5TRyIpICU+JSAKICBsZWZ0X2pvaW4oZW5zZW1ibF9iaW90eXBlcyxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogIGZpbHRlcihCSU9UWVBFJWluJWMoInByb3RlaW5fY29kaW5nIikpICU+JSAKICBsZWZ0X2pvaW4oYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5MixieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogIGZpbHRlcihBZ2lsZW50U1N2NiVpbiVjKCJZRVMiKSkgJT4lIAogIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKQpHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUEMgPC0gZmlsdGVyKEdub21BRF9zdGF0c19NUyxDQU5PTklDQUwlaW4lYygiWUVTIikpICU+JSAKICBkcGx5cjo6cmVuYW1lKCJHZW5lIj0iRU5TRyIpICU+JSAKICBsZWZ0X2pvaW4oZW5zZW1ibF9iaW90eXBlcyxieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogIGZpbHRlcihCSU9UWVBFJWluJWMoInByb3RlaW5fY29kaW5nIikpICU+JSAKICBsZWZ0X2pvaW4oYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5MixieT0iRmVhdHVyZSIsY29weT1GQUxTRSkgJT4lIAogIGZpbHRlcihBZ2lsZW50U1N2NiVpbiVjKCJZRVMiKSkgJT4lIAogIGxlZnRfam9pbihNUENfdHJhbnNjcmlwdHMsYnk9IkZlYXR1cmUiLGNvcHk9RkFMU0UpICU+JSAKICBmaWx0ZXIoQ0FOT05JQ0FMLnklaW4lYygiWUVTIikpICU+JSAKICBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkKCkdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw2XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDEwXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWyw2XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTBdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMuMl90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxNF0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxN10pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQzJfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMjBdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMyX05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyM10pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywyNl0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX01QQzIuNV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMjldKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMzX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ19NUENbLDMyXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDM19ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMzVdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQURELjE1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMzhdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQURELjE1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDQxXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDE1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNDRdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMTVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNDddKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMjBfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1MF0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX0NBREQyMF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw1M10pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX0NBREQyNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDU2XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDI1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDU5XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfQ0FERDMwX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNjJdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMzBfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNjVdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNjhdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDcxXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNzRdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNDVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssNzddKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdbLDgwXSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssODNdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNTVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4Nl0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw4OV0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssOTJdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuNl9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWyw5NV0pICU+JSBhcy5udW1lcmljKCkKR25vbUFEX3N0YXRzX01TX1JFVkVMMC43X3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTA0XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTA3XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjhfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMTZdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMTldKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nWywxMzRdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfTkZFX3RvdGFsIDwtIHN1bShHbm9tQURfc3RhdHNfTVNfRU5TVGNhbm9uaWNhbF9BZ2lsZW50U1N2Nl9wcm90ZWluX2NvZGluZ1ssMTM3XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMjJdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMjVdKSAlPiUgYXMubnVtZXJpYygpCkdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwgPC0gc3VtKEdub21BRF9zdGF0c19NU19FTlNUY2Fub25pY2FsX0FnaWxlbnRTU3Y2X3Byb3RlaW5fY29kaW5nX01QQ1ssMTI4XSkgJT4lIGFzLm51bWVyaWMoKQpHbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRV90b3RhbCA8LSBzdW0oR25vbUFEX3N0YXRzX01TX0VOU1RjYW5vbmljYWxfQWdpbGVudFNTdjZfcHJvdGVpbl9jb2RpbmdfTVBDWywxMzFdKSAlPiUgYXMubnVtZXJpYygpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwgPC0gVG90YWxfU2FtcGxlX0FsbGVsZXMqKG5yb3coYWxsR2VuZXNfQWdpbGVudFNTdjZfbGlzdF9wcm90ZWluX2NvZGluZ19vbmx5KSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbCA8LSBUb3RhbF9TYW1wbGVfQWxsZWxlcyoobnJvdyhhbGxHZW5lc19BZ2lsZW50U1N2Nl9saXN0X3Byb3RlaW5fY29kaW5nX01QQ29ubHkpKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyLjVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMzX3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQuMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNbLGMoMzEsMzYsMzcsMjIxKV0gJT4lIGRpc3RpbmN0KC5rZWVwX2FsbD1UUlVFKSAlPiUgc2VsZWN0KDQpICU+JSBjb2xTdW1zKG5hLnJtPVRSVUUpICU+JSBhcy5udW1lcmljKCkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC43X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN19zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjhfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1UkVWRUwwLjQ1X3RvdGFsIDwtIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c1ssYygzMSwzNiwzNywyMjEpXSAlPiUgZGlzdGluY3QoLmtlZXBfYWxsPVRSVUUpICU+JSBzZWxlY3QoNCkgJT4lIGNvbFN1bXMobmEucm09VFJVRSkgJT4lIGFzLm51bWVyaWMoKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCA8LSBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwgPC0gbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzWyxjKDMxLDM2LDM3LDIyMSldICU+JSBkaXN0aW5jdCgua2VlcF9hbGw9VFJVRSkgJT4lIHNlbGVjdCg0KSAlPiUgY29sU3VtcyhuYS5ybT1UUlVFKSAlPiUgYXMubnVtZXJpYygpCmBgYAoKQ2FsY3VsYXRlIG9kZHMgcmF0aW9zIHVzaW5nIG1hdHJpY2VzCmBgYHtyfQpNUEMuMiA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDLjJfdG90YWwsCiAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3RvdGFsLAogICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDLjJfdG90YWwpLAogICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDLjJfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMuMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQy4yX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDLjJfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ19ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQy4yX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMiA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMl9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTVBDX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpNUEMyLjUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfdG90YWwtR25vbUFEX3N0YXRzX01TX01QQzIuNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMi41X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMi41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzIuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyLjVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyLjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMyA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDM190b3RhbCksCiAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpNUEMzX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDM190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzNfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMzX05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMzX05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERC4xNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERC4xNV90b3RhbCksCiAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQuMTVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQURELjE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERC4xNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERC4xNV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQuMTVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQxNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDE1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDE1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDE1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMTVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQyMCA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjBfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDIwX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDIwX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDIwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMjBfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjBfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQyNSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMjVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDI1X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDI1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDI1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMjVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCkNBREQzMCA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMzBfdG90YWwsCiAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfQ0FERDMwX3RvdGFsKSwKICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDMwX05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfQ0FERDMwX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMzBfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMzBfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpClJFVkVMLjAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTC4wLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwuMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMLjAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMLjAuNDVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTC4wLjQ1X05GRV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNDUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNDVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC40NV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpClJFVkVMMC41IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuNV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNV9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjVfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNTUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC41NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNTVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNTVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjU1X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjU1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC41NV9ORkVfdG90YWwpLG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNiA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuNl9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC42X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjZfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX1JFVkVMMC42X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjZfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpClJFVkVMMC43IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc190b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuN190b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpClJFVkVMMC43X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjdfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuN190b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjdfTkZFX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19SRVZFTDAuN19ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKUkVWRUwwLjggPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NQVhfQU5fdG90YWwtR25vbUFEX3N0YXRzX01TX1JFVkVMMC44X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpSRVZFTDAuOF9ORkUgPC0gbWF0cml4KGMobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19SRVZFTDAuOF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX05GRV90b3RhbC1Hbm9tQURfc3RhdHNfTVNfUkVWRUwwLjhfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKQ0FERDE1UkVWRUwwLjQ1IDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX0NBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX3RvdGFsLUdub21BRF9zdGF0c19NU19DQUREMTVSRVZFTDAuNDVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpDQUREMTVSRVZFTDAuNDVfTkZFIDwtIG1hdHJpeChjKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9DQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX0NBREQxNVJFVkVMMC40NV9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9ORkVfdG90YWwtR25vbUFEX3N0YXRzX01TX0NBREQxNVJFVkVMMC40NV9ORkVfdG90YWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMkNBREQxNVJFVkVMMC40NSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfYWxsX2FsbGVsZXNfTVBDb25seV90b3RhbC1tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3c9MixieXJvdz1UUlVFKQpNUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMkNBREQxNVJFVkVMMC40NV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJDQUREMTVSRVZFTDAuNDVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRV90b3RhbCksbnJvdz0yLGJ5cm93PVRSVUUpCk1QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX2FsbF9hbGxlbGVzX01QQ29ubHlfdG90YWwtbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF90b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbm9tQURfc3RhdHNfTVNfTUFYX0FOX01QQ190b3RhbC1Hbm9tQURfc3RhdHNfTVNfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm93PTIsYnlyb3c9VFJVRSkKTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSA8LSBtYXRyaXgoYyhtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9hbGxfYWxsZWxlc19NUENvbmx5X3RvdGFsLW1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkVfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR25vbUFEX3N0YXRzX01TX01BWF9BTl9NUENfTkZFX3RvdGFsLUdub21BRF9zdGF0c19NU19NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjhfTkZFX3RvdGFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdz0yLGJ5cm93PVRSVUUpCgpvZGRzcmF0aW8gPC0gZnVuY3Rpb24gKGEsIGIgPSBOVUxMLCBjID0gTlVMTCwgZCA9IE5VTEwsIGNvbmYubGV2ZWwgPSAwLjk1LCAKICAgIHAuY2FsYy5ieS5pbmRlcGVuZGVuY2UgPSBUUlVFKSAKewogICAgaWYgKGlzLm1hdHJpeChhKSkgewogICAgICAgIGlmICgoZGltKGEpWzFdICE9IDJMKSB8IChkaW0oYSlbMl0gIT0gMkwpKSB7CiAgICAgICAgICAgIHN0b3AoIklucHV0IG1hdHJpeCBtdXN0IGJlIGEgMngyIHRhYmxlLiIpCiAgICAgICAgfQogICAgICAgIC5hIDwtIGFbMSwgMV0KICAgICAgICAuYiA8LSBhWzEsIDJdCiAgICAgICAgLmMgPC0gYVsyLCAxXQogICAgICAgIC5kIDwtIGFbMiwgMl0KICAgICAgICAuZGF0YS5uYW1lIDwtIGRlcGFyc2Uoc3Vic3RpdHV0ZShhKSkKICAgIH0KICAgIGVsc2UgewogICAgICAgIC5hIDwtIGEKICAgICAgICAuYiA8LSBiCiAgICAgICAgLmMgPC0gYwogICAgICAgIC5kIDwtIGQKICAgICAgICAuZGF0YS5uYW1lIDwtIHBhc3RlKGRlcGFyc2Uoc3Vic3RpdHV0ZShhKSksIGRlcGFyc2Uoc3Vic3RpdHV0ZShiKSksIAogICAgICAgICAgICBkZXBhcnNlKHN1YnN0aXR1dGUoYykpLCBkZXBhcnNlKHN1YnN0aXR1dGUoZCkpKQogICAgfQogICAgLk1BVCA8LSBtYXRyaXgoYyguYSwgLmIsIE0xIDwtIC5hICsgLmIsIC5jLCAuZCwgTTAgPC0gLmMgKyAKICAgICAgICAuZCwgTjEgPC0gLmEgKyAuYywgTjAgPC0gLmIgKyAuZCwgVG90YWwgPC0gLmEgKyAuYiArIAogICAgICAgIC5jICsgLmQpLCAzLCAzKQogICAgY29sbmFtZXMoLk1BVCkgPC0gYygiU2FtcGxlIiwgIkdub21BRCIsICJUb3RhbCIpICMoIkRpc2Vhc2UiLCAiTm9uZGlzZWFzZSIsICJUb3RhbCIpCiAgICByb3duYW1lcyguTUFUKSA8LSBjKCJNUyIsICJObyBNUyIsICJUb3RhbCIpICMoIkV4cG9zZWQiLCAiTm9uZXhwb3NlZCIsICJUb3RhbCIpCiAgICBjbGFzcyguTUFUKSA8LSAidGFibGUiCiAgICBwcmludCguTUFUKQogICAgRVNUSU1BVEUgPC0gKC5hIC8uYikvKC5jLy5kKQogICAgbm9ybS5wcCA8LSBxbm9ybSgxIC0gKDEgLSBjb25mLmxldmVsKS8yKQogICAgaWYgKHAuY2FsYy5ieS5pbmRlcGVuZGVuY2UpIHsKICAgICAgICBwLnYgPC0gMiAqICgxIC0gcG5vcm0oYWJzKCguYSAtIE4xICogTTEvVG90YWwpL3NxcnQoTjEgKiAKICAgICAgICAgICAgTjAgKiBNMSAqIE0wL1RvdGFsL1RvdGFsLyhUb3RhbCAtIDEpKSkpKQogICAgfQogICAgZWxzZSB7CiAgICAgICAgcC52IDwtIDIgKiAoMSAtIHBub3JtKGxvZyhpZmVsc2UoRVNUSU1BVEUgPiAxLCBFU1RJTUFURSwgCiAgICAgICAgICAgIDEvRVNUSU1BVEUpKS9zcXJ0KDEvLmEgKyAxLy5iICsgMS8uYyArIDEvLmQpKSkKICAgIH0KICAgIE9STCA8LSBFU1RJTUFURSAqIGV4cCgtbm9ybS5wcCAqIHNxcnQoMS8uYSArIDEvLmIgKyAxLy5jICsgCiAgICAgICAgMS8uZCkpCiAgICBPUlUgPC0gRVNUSU1BVEUgKiBleHAobm9ybS5wcCAqIHNxcnQoMS8uYSArIDEvLmIgKyAxLy5jICsgCiAgICAgICAgMS8uZCkpICU+JSBzaWduaWYoZGlnaXRzPTcpCiAgICBDSU5UIDwtIHBhc3RlKHNpZ25pZihPUkwsZGlnaXRzID0gNyksc2lnbmlmKE9SVSxkaWdpdHMgPSA3KSxzZXA9In4iKQogICAgYXR0cihDSU5ULCAiY29uZi5sZXZlbCIpIDwtIGNvbmYubGV2ZWwKICAgIFJWQUwgPC0gbGlzdChwLnZhbHVlID0gcC52LCBjb25mLmludCA9IENJTlQsIGVzdGltYXRlID0gRVNUSU1BVEUsIAogICAgICAgIG1ldGhvZCA9ICJPZGRzIHJhdGlvIGVzdGltYXRlIGFuZCBpdHMgc2lnbmlmaWNhbmNlIHByb2JhYmlsaXR5IiwgCiAgICAgICAgZGF0YS5uYW1lID0gLmRhdGEubmFtZSkKICAgIGNsYXNzKFJWQUwpIDwtICJodGVzdCIKICAgIHJldHVybihSVkFMKQp9CgpPUl9NUEMuMiA8LSBvZGRzcmF0aW8oTVBDLjIscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMuMl9ORkUgPC0gb2Rkc3JhdGlvKE1QQy4yX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX01QQzIgPC0gb2Rkc3JhdGlvKE1QQzIscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyX05GRSA8LSBvZGRzcmF0aW8oTVBDMl9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyLjUgPC0gb2Rkc3JhdGlvKE1QQzIuNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX01QQzIuNV9ORkUgPC0gb2Rkc3JhdGlvKE1QQzIuNV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMzIDwtIG9kZHNyYXRpbyhNUEMzLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfTVBDM19ORkUgPC0gb2Rkc3JhdGlvKE1QQzNfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERC4xNSA8LSBvZGRzcmF0aW8oQ0FERC4xNSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQuMTVfTkZFIDwtIG9kZHNyYXRpbyhDQURELjE1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQxNSA8LSBvZGRzcmF0aW8oQ0FERDE1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDE1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDE1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQyMCA8LSBvZGRzcmF0aW8oQ0FERDIwLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDIwX05GRSA8LSBvZGRzcmF0aW8oQ0FERDIwX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQyNSA8LSBvZGRzcmF0aW8oQ0FERDI1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDI1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDI1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQzMCA8LSBvZGRzcmF0aW8oQ0FERDMwLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDMwX05GRSA8LSBvZGRzcmF0aW8oQ0FERDMwX05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMLjAuNDUgPC0gb2Rkc3JhdGlvKFJFVkVMLjAuNDUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTC4wLjQ1X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwuMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNDUgPC0gb2Rkc3JhdGlvKFJFVkVMMC40NSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC40NV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNSA8LSBvZGRzcmF0aW8oUkVWRUwwLjUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuNV9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC41X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC41NSA8LSBvZGRzcmF0aW8oUkVWRUwwLjU1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjU1X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjU1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC42IDwtIG9kZHNyYXRpbyhSRVZFTDAuNixwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX1JFVkVMMC42X05GRSA8LSBvZGRzcmF0aW8oUkVWRUwwLjZfTkZFLHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjcgPC0gb2Rkc3JhdGlvKFJFVkVMMC43LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfUkVWRUwwLjdfTkZFIDwtIG9kZHNyYXRpbyhSRVZFTDAuN19ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuOCA8LSBvZGRzcmF0aW8oUkVWRUwwLjgscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9SRVZFTDAuOF9ORkUgPC0gb2Rkc3JhdGlvKFJFVkVMMC44X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX0NBREQxNVJFVkVMMC40NSA8LSBvZGRzcmF0aW8oQ0FERDE1UkVWRUwwLjQ1LHAuY2FsYy5ieS5pbmRlcGVuZGVuY2U9VFJVRSkKT1JfQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBvZGRzcmF0aW8oQ0FERDE1UkVWRUwwLjQ1X05GRSxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX01QQzJDQUREMTVSRVZFTDAuNDUgPC0gb2Rkc3JhdGlvKE1QQzJDQUREMTVSRVZFTDAuNDUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSA8LSBvZGRzcmF0aW8oTVBDMkNBREQxNVJFVkVMMC40NV9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjggPC0gb2Rkc3JhdGlvKE1QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCxwLmNhbGMuYnkuaW5kZXBlbmRlbmNlPVRSVUUpCk9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUgPC0gb2Rkc3JhdGlvKE1QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUscC5jYWxjLmJ5LmluZGVwZW5kZW5jZT1UUlVFKQpgYGAKCkNvbWJpbmUgYWxsIHJlc3VsdHMgaW50byBvbmUgc3ByZWFkc2hlZXQsIGFuZCBzYXZlCmBgYHtyfQphID0gYyhPUl9NUEMuMiRkYXRhLm5hbWUsT1JfTVBDLjJfTkZFJGRhdGEubmFtZSxPUl9NUEMyJGRhdGEubmFtZSxPUl9NUEMyX05GRSRkYXRhLm5hbWUsT1JfTVBDMi41JGRhdGEubmFtZSxPUl9NUEMyLjVfTkZFJGRhdGEubmFtZSxPUl9NUEMzJGRhdGEubmFtZSxPUl9NUEMzX05GRSRkYXRhLm5hbWUsT1JfQ0FERC4xNSRkYXRhLm5hbWUsT1JfQ0FERC4xNV9ORkUkZGF0YS5uYW1lLE9SX0NBREQxNSRkYXRhLm5hbWUsT1JfQ0FERDE1X05GRSRkYXRhLm5hbWUsT1JfQ0FERDIwJGRhdGEubmFtZSxPUl9DQUREMjBfTkZFJGRhdGEubmFtZSxPUl9DQUREMjUkZGF0YS5uYW1lLE9SX0NBREQyNV9ORkUkZGF0YS5uYW1lLE9SX0NBREQzMCRkYXRhLm5hbWUsT1JfQ0FERDMwX05GRSRkYXRhLm5hbWUsT1JfUkVWRUwuMC40NSRkYXRhLm5hbWUsT1JfUkVWRUwuMC40NV9ORkUkZGF0YS5uYW1lLE9SX1JFVkVMMC40NSRkYXRhLm5hbWUsT1JfUkVWRUwwLjQ1X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjUkZGF0YS5uYW1lLE9SX1JFVkVMMC41X05GRSRkYXRhLm5hbWUsT1JfUkVWRUwwLjU1JGRhdGEubmFtZSxPUl9SRVZFTDAuNTVfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNiRkYXRhLm5hbWUsT1JfUkVWRUwwLjZfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuNyRkYXRhLm5hbWUsT1JfUkVWRUwwLjdfTkZFJGRhdGEubmFtZSxPUl9SRVZFTDAuOCRkYXRhLm5hbWUsT1JfUkVWRUwwLjhfTkZFJGRhdGEubmFtZSxPUl9DQUREMTVSRVZFTDAuNDUkZGF0YS5uYW1lLE9SX0NBREQxNVJFVkVMMC40NV9ORkUkZGF0YS5uYW1lLE9SX01QQzJDQUREMTVSRVZFTDAuNDUkZGF0YS5uYW1lLE9SX01QQzJDQUREMTVSRVZFTDAuNDVfTkZFJGRhdGEubmFtZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgkZGF0YS5uYW1lLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkZGF0YS5uYW1lKQpiID0gYyhPUl9NUEMuMiRlc3RpbWF0ZSxPUl9NUEMuMl9ORkUkZXN0aW1hdGUsT1JfTVBDMiRlc3RpbWF0ZSxPUl9NUEMyX05GRSRlc3RpbWF0ZSxPUl9NUEMyLjUkZXN0aW1hdGUsT1JfTVBDMi41X05GRSRlc3RpbWF0ZSxPUl9NUEMzJGVzdGltYXRlLE9SX01QQzNfTkZFJGVzdGltYXRlLE9SX0NBREQuMTUkZXN0aW1hdGUsT1JfQ0FERC4xNV9ORkUkZXN0aW1hdGUsT1JfQ0FERDE1JGVzdGltYXRlLE9SX0NBREQxNV9ORkUkZXN0aW1hdGUsT1JfQ0FERDIwJGVzdGltYXRlLE9SX0NBREQyMF9ORkUkZXN0aW1hdGUsT1JfQ0FERDI1JGVzdGltYXRlLE9SX0NBREQyNV9ORkUkZXN0aW1hdGUsT1JfQ0FERDMwJGVzdGltYXRlLE9SX0NBREQzMF9ORkUkZXN0aW1hdGUsT1JfUkVWRUwuMC40NSRlc3RpbWF0ZSxPUl9SRVZFTC4wLjQ1X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuNDUkZXN0aW1hdGUsT1JfUkVWRUwwLjQ1X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuNSRlc3RpbWF0ZSxPUl9SRVZFTDAuNV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjU1JGVzdGltYXRlLE9SX1JFVkVMMC41NV9ORkUkZXN0aW1hdGUsT1JfUkVWRUwwLjYkZXN0aW1hdGUsT1JfUkVWRUwwLjZfTkZFJGVzdGltYXRlLE9SX1JFVkVMMC43JGVzdGltYXRlLE9SX1JFVkVMMC43X05GRSRlc3RpbWF0ZSxPUl9SRVZFTDAuOCRlc3RpbWF0ZSxPUl9SRVZFTDAuOF9ORkUkZXN0aW1hdGUsT1JfQ0FERDE1UkVWRUwwLjQ1JGVzdGltYXRlLE9SX0NBREQxNVJFVkVMMC40NV9ORkUkZXN0aW1hdGUsT1JfTVBDMkNBREQxNVJFVkVMMC40NSRlc3RpbWF0ZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSRlc3RpbWF0ZSxPUl9NUEMyX09SX0NBREQxNVJFVkVMMC40NV9PUl9DQUREMzBfT1JfUkVWRUwwLjgkZXN0aW1hdGUsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44X05GRSRlc3RpbWF0ZSkKYyA9IGMoT1JfTVBDLjIkY29uZi5pbnQsT1JfTVBDLjJfTkZFJGNvbmYuaW50LE9SX01QQzIkY29uZi5pbnQsT1JfTVBDMl9ORkUkY29uZi5pbnQsT1JfTVBDMi41JGNvbmYuaW50LE9SX01QQzIuNV9ORkUkY29uZi5pbnQsT1JfTVBDMyRjb25mLmludCxPUl9NUEMzX05GRSRjb25mLmludCxPUl9DQURELjE1JGNvbmYuaW50LE9SX0NBREQuMTVfTkZFJGNvbmYuaW50LE9SX0NBREQxNSRjb25mLmludCxPUl9DQUREMTVfTkZFJGNvbmYuaW50LE9SX0NBREQyMCRjb25mLmludCxPUl9DQUREMjBfTkZFJGNvbmYuaW50LE9SX0NBREQyNSRjb25mLmludCxPUl9DQUREMjVfTkZFJGNvbmYuaW50LE9SX0NBREQzMCRjb25mLmludCxPUl9DQUREMzBfTkZFJGNvbmYuaW50LE9SX1JFVkVMLjAuNDUkY29uZi5pbnQsT1JfUkVWRUwuMC40NV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjQ1JGNvbmYuaW50LE9SX1JFVkVMMC40NV9ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjUkY29uZi5pbnQsT1JfUkVWRUwwLjVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC41NSRjb25mLmludCxPUl9SRVZFTDAuNTVfTkZFJGNvbmYuaW50LE9SX1JFVkVMMC42JGNvbmYuaW50LE9SX1JFVkVMMC42X05GRSRjb25mLmludCxPUl9SRVZFTDAuNyRjb25mLmludCxPUl9SRVZFTDAuN19ORkUkY29uZi5pbnQsT1JfUkVWRUwwLjgkY29uZi5pbnQsT1JfUkVWRUwwLjhfTkZFJGNvbmYuaW50LE9SX0NBREQxNVJFVkVMMC40NSRjb25mLmludCxPUl9DQUREMTVSRVZFTDAuNDVfTkZFJGNvbmYuaW50LE9SX01QQzJDQUREMTVSRVZFTDAuNDUkY29uZi5pbnQsT1JfTVBDMkNBREQxNVJFVkVMMC40NV9ORkUkY29uZi5pbnQsT1JfTVBDMl9PUl9DQUREMTVSRVZFTDAuNDVfT1JfQ0FERDMwX09SX1JFVkVMMC44JGNvbmYuaW50LE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkY29uZi5pbnQpCmQgPSBjKE9SX01QQy4yJHAudmFsdWUsT1JfTVBDLjJfTkZFJHAudmFsdWUsT1JfTVBDMiRwLnZhbHVlLE9SX01QQzJfTkZFJHAudmFsdWUsT1JfTVBDMi41JHAudmFsdWUsT1JfTVBDMi41X05GRSRwLnZhbHVlLE9SX01QQzMkcC52YWx1ZSxPUl9NUEMzX05GRSRwLnZhbHVlLE9SX0NBREQuMTUkcC52YWx1ZSxPUl9DQURELjE1X05GRSRwLnZhbHVlLE9SX0NBREQxNSRwLnZhbHVlLE9SX0NBREQxNV9ORkUkcC52YWx1ZSxPUl9DQUREMjAkcC52YWx1ZSxPUl9DQUREMjBfTkZFJHAudmFsdWUsT1JfQ0FERDI1JHAudmFsdWUsT1JfQ0FERDI1X05GRSRwLnZhbHVlLE9SX0NBREQzMCRwLnZhbHVlLE9SX0NBREQzMF9ORkUkcC52YWx1ZSxPUl9SRVZFTC4wLjQ1JHAudmFsdWUsT1JfUkVWRUwuMC40NV9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNDUkcC52YWx1ZSxPUl9SRVZFTDAuNDVfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjUkcC52YWx1ZSxPUl9SRVZFTDAuNV9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNTUkcC52YWx1ZSxPUl9SRVZFTDAuNTVfTkZFJHAudmFsdWUsT1JfUkVWRUwwLjYkcC52YWx1ZSxPUl9SRVZFTDAuNl9ORkUkcC52YWx1ZSxPUl9SRVZFTDAuNyRwLnZhbHVlLE9SX1JFVkVMMC43X05GRSRwLnZhbHVlLE9SX1JFVkVMMC44JHAudmFsdWUsT1JfUkVWRUwwLjhfTkZFJHAudmFsdWUsT1JfQ0FERDE1UkVWRUwwLjQ1JHAudmFsdWUsT1JfQ0FERDE1UkVWRUwwLjQ1X05GRSRwLnZhbHVlLE9SX01QQzJDQUREMTVSRVZFTDAuNDUkcC52YWx1ZSxPUl9NUEMyQ0FERDE1UkVWRUwwLjQ1X05GRSRwLnZhbHVlLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOCRwLnZhbHVlLE9SX01QQzJfT1JfQ0FERDE1UkVWRUwwLjQ1X09SX0NBREQzMF9PUl9SRVZFTDAuOF9ORkUkcC52YWx1ZSkKCk9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfc2FtcGxlMC4wMSA8LSB0aWJibGUoCiAgIkZpbHRlcmluZyI9YSwKICAiT2Rkc19yYXRpbyI9YiwKICAiOTUlX0NJIj1jLAogICJwX3ZhbHVlIj1kCikKCndyaXRlX3RzdihPUnNfbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX3NhbXBsZTAuMDEsIHBhdGg9Ik9Sc19tYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfMC4wMDFfc2FtcGxlMC4wMS50c3YiKQpgYGAKCkNhbGN1bGF0ZSByYXRpb3MgYW5kIEZpc2hlcidzIHRlc3QgdmFsdWVzIGZvciBnZW5lcyBjb250YWluaW5nIGVucmljaGVkIHZhcmlhbnRzIHdpdGggY29ycmVzcG9uZGluZyBwcmVkaWN0aW9uIHNjb3JlcywgYW5kIHNhdmUgb3V0cHV0CmBgYHtyfQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zIDwtIAogIG11dGF0ZShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHMsCiAgICAgICAgICJTYW1wbGVfR2VuZV9MT0ZfRnJlcV9SYXRpb19Hbm9tQURfMC4wMDEiPVNhbXBsZV9HZW5lX0ZyZXEvRklMVEVSX1JGX01TX0FGXzAuMDAxX1JFVkVMMC40NV9BREosCiAgICAgICAgICJTYW1wbGVfR2VuZV9MT0ZfRnJlcV9SYXRpb19Hbm9tQURfTkZFXzAuMDAxIj1TYW1wbGVfR2VuZV9GcmVxL0ZJTFRFUl9SRl9NU19BRl8wLjAwMV9SRVZFTDAuNDVfTkZFX0FESikKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3MyIDwtIG11dGF0ZShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zLCAiU2FtcGxlX0dlbmVfTE9GX0FGX1JhdGlvIj1TYW1wbGVfQUYvR25vbUFEX3YyLjFfbm9uX2NhbmNlcl9BRiwgCiJTYW1wbGVfR2VuZV9MT0ZfQUZfUmF0aW9fTkZFIj1TYW1wbGVfQUYvR25vbUFEX3YyLjFfbm9uX2NhbmNlcl9BRl9uZmUpCgptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMgPC0gbXV0YXRlKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3MyLFRvdGFsX0Nhc2VfQWxsZWxlcz1Ub3RhbF9TYW1wbGVfQWxsZWxlcykKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiA8LSBtdXRhdGUobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzLCBNQVhfQU49cmVwbGFjZShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMkTUFYX0FOLCBpcy5uYShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMkTUFYX0FOKSwgbWF4KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0cyRNQVhfQU4sIG5hLnJtPVRSVUUpKSkgJT4lIAogIG11dGF0ZShNQVhfQU5fTkZFPXJlcGxhY2UoLiRNQVhfQU5fTkZFLCBpcy5uYSguJE1BWF9BTl9ORkUpLCBtYXgobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzJE1BWF9BTl9ORkUsIG5hLnJtPVRSVUUpKSkKCmZpc2hlcnJlc3VsdHNfRU5TVCA8LSBhcHBseShtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyWyxjKDIyMSwyMzEsMjQxLDIyMyldLDEsZnVuY3Rpb24oeCkge2Zpc2hlci50ZXN0KHJiaW5kKHhbMToyXSxjKHhbM10teFsxXSx4WzRdLXhbMl0pKSl9KQoKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRQX3ZhbHVlX0Zpc2hlcl8wLjAwNSA9IHNhcHBseShmaXNoZXJyZXN1bHRzX0VOU1QsZnVuY3Rpb24oeCkgcm91bmQoeCRwLnZhbHVlLDEyKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRPUl8wLjAwNSA9IHNhcHBseShmaXNoZXJyZXN1bHRzX0VOU1QsZnVuY3Rpb24oeCkgcm91bmQoeCRlc3RpbWF0ZSw0KSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRgOTUlQ0lfMC4wMDVgID0gc2FwcGx5KGZpc2hlcnJlc3VsdHNfRU5TVCxmdW5jdGlvbih4KSBwYXN0ZShyb3VuZCh4JGNvbmYuaW50WzE6Ml0sMiksY29sbGFwc2U9In4iKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRCSF8wLjAwNSA9IHAuYWRqdXN0KG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIkUF92YWx1ZV9GaXNoZXJfMC4wMDUsbWV0aG9kID0gIkJIIikKCmZpc2hlcnJlc3VsdHMyX0VOU1QgPC0gYXBwbHkobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMlssYygyMjEsMjM0LDI0MSwyMjcpXSwxLGZ1bmN0aW9uKHgpIHtmaXNoZXIudGVzdChyYmluZCh4WzE6Ml0sYyh4WzNdLXhbMV0seFs0XS14WzJdKSkpfSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIkUF92YWx1ZV9GaXNoZXJfMC4wMDVfTkZFID0gc2FwcGx5KGZpc2hlcnJlc3VsdHMyX0VOU1QsZnVuY3Rpb24oeCkgcm91bmQoeCRwLnZhbHVlLDEyKSkKbWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRPUl8wLjAwNV9ORkUgPSBzYXBwbHkoZmlzaGVycmVzdWx0czJfRU5TVCxmdW5jdGlvbih4KSByb3VuZCh4JGVzdGltYXRlLDQpKQptYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfUkVWRUwwLjQ1X3NhbXBsZUFGMC4wMV93aXRoR25vbUFEc3RhdHNfcmF0aW9zX2Zpc2hlcnJlc3VsdHMyJGA5NSVDSV8wLjAwNV9ORkVgID0gc2FwcGx5KGZpc2hlcnJlc3VsdHMyX0VOU1QsZnVuY3Rpb24oeCkgcGFzdGUocm91bmQoeCRjb25mLmludFsxOjJdLDIpLGNvbGxhcHNlPSJ+IikpCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIkQkhfMC4wMDVfTkZFID0gcC5hZGp1c3QobWFzdGVyZmlsZV9lb2NfZ29vZFFfYmlvdHlwZV9NU19FTlNUY2Fub25pY2FsX1JFVkVMMC40NV9zYW1wbGVBRjAuMDFfd2l0aEdub21BRHN0YXRzX3JhdGlvc19maXNoZXJyZXN1bHRzMiRQX3ZhbHVlX0Zpc2hlcl8wLjAwNV9ORkUsbWV0aG9kID0gIkJIIikKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czMgPC0gbXV0YXRlKG1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czIsIEZpbHRlcmluZ0FGXzk1X0V4Y2VlZHNfTWF4Q3JlZFBvcEFGPSgoR25vbUFEX3YyLjFfbm9uX2NhbmNlcl9GaWx0ZXJpbmdfQUZfOTUpPjAuMDAwMTgxKSkgJT4lIAogIG11dGF0ZShGaWx0ZXJpbmdBRl85NV9ORkVfRXhjZWVkc19NYXhDcmVkUG9wQUY9KChHbm9tQURfdjIuMV9ub25fY2FuY2VyX0ZpbHRlcmluZ19BRl85NV9uZmUpPjAuMDAwMTgxKSkKCm1hc3RlcmZpbGVfZW9jX2dvb2RRX2Jpb3R5cGVfTVNfRU5TVGNhbm9uaWNhbF9SRVZFTDAuNDVfc2FtcGxlQUYwLjAxX3dpdGhHbm9tQURzdGF0c19yYXRpb3NfZmlzaGVycmVzdWx0czMgJT4lIAogIHdyaXRlX2V4Y2VsX2NzdihwYXRoPSJtYXN0ZXJmaWxlX2VvY19nb29kUV9iaW90eXBlX01TX0VOU1RjYW5vbmljYWxfMC4wMDFfUkVWRUwwLjQ1X3NhbXBsZTAuMDEuY3N2IixuYT0iLiIsYXBwZW5kPUZBTFNFLGNvbF9uYW1lcz1UUlVFKQpgYGAK