1 Introduction

We are splitting the creation of the various data structures and their analysis into two separate documents.

1.1 Metadata Sources

## samplesheet <- "sample_sheets/tmrc3_samples_20220615.xlsx"
## Redundant sample sheet entries so we can test if something changed in June
samplesheet <- "sample_sheets/tmrc3_samples_20220714.xlsx"
crf_metadata <- "sample_sheets/20220509_EXP_ESPECIAL_TMRC3_V2.xlsx"

2 Annotation Collection

The primary annotation sources are:

  1. Ensembl’s biomart archive from 2020 for human annotations.
  2. The TriTrypDB release 36 for parasite annotations.

Both provide GO data. They also provide helpful links to other data sources. For the moment, we are focusing on the human annotations.

2.1 Gene annotations

These analyses have focused on gene-level abundances/differences. Thus, when htseq-count was invoked against the hisat2-based mappings, parameters were chosen to count genes rather than transcripts. Similarly, when salmon counts were used via tximport, a mapping of genes to transcripts was used to collapse the matrix to gene-level abundances. This decision may be revisited.

hs_annot <- load_biomart_annotations(year="2020", month="jan")
## The biomart annotations file already exists, loading from it.
hs_annot <- hs_annot[["annotation"]]
hs_annot[["transcript"]] <- paste0(rownames(hs_annot), ".", hs_annot[["version"]])
rownames(hs_annot) <- make.names(hs_annot[["ensembl_gene_id"]], unique=TRUE)
tx_gene_map <- hs_annot[, c("transcript", "ensembl_gene_id")]
summary(hs_annot)
##  ensembl_transcript_id ensembl_gene_id       version     transcript_version
##  Length:227784         Length:227784      Min.   : 1.0   Min.   : 1.00     
##  Class :character      Class :character   1st Qu.: 6.0   1st Qu.: 1.00     
##  Mode  :character      Mode  :character   Median :12.0   Median : 1.00     
##                                           Mean   :10.7   Mean   : 3.08     
##                                           3rd Qu.:15.0   3rd Qu.: 5.00     
##                                           Max.   :28.0   Max.   :17.00     
##                                                                            
##  hgnc_symbol        description        gene_biotype         cds_length    
##  Length:227784      Length:227784      Length:227784      Min.   :     3  
##  Class :character   Class :character   Class :character   1st Qu.:   357  
##  Mode  :character   Mode  :character   Mode  :character   Median :   694  
##                                                           Mean   :  1140  
##                                                           3rd Qu.:  1446  
##                                                           Max.   :107976  
##                                                           NA's   :127222  
##  chromosome_name       strand          start_position      end_position     
##  Length:227784      Length:227784      Min.   :5.77e+02   Min.   :6.47e+02  
##  Class :character   Class :character   1st Qu.:3.11e+07   1st Qu.:3.12e+07  
##  Mode  :character   Mode  :character   Median :6.04e+07   Median :6.06e+07  
##                                        Mean   :7.41e+07   Mean   :7.42e+07  
##                                        3rd Qu.:1.09e+08   3rd Qu.:1.09e+08  
##                                        Max.   :2.49e+08   Max.   :2.49e+08  
##                                                                             
##   transcript       
##  Length:227784     
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 

2.2 Gene ontology data

The set of GO categories has not been limited to the 2020 data at the time of this writing. The GO categories is collected along with lengths for goseq. The other methods either have built-in databases of human data (gProfiler) or support orgDB data (org.Hs.eg.db) (clusterProfiler/topGO/gostats).

hs_go <- load_biomart_go()[["go"]]
## The biomart annotations file already exists, loading from it.
hs_length <- hs_annot[, c("ensembl_gene_id", "cds_length")]
colnames(hs_length) <- c("ID", "length")

3 Dataset: Create the parent data structure of all samples

Before we do any of the following subsets/analyses of the data, we need to collect it all in one place. Let’s do that here and name it ‘hs_expt’, it will comprise the full set of human data. When we cull some samples it will be renamed to ‘hs_valid’.

data_structures <- c()
sanitize_columns <- c("visitnumber", "finaloutcome", "donor",
                      "typeofcells", "clinicalpresentation", "drug",
                      "condition", "batch")
hs_expt <- create_expt(samplesheet,
                       file_column="hg38100hisatfile",
                       savefile=glue::glue("rda/tmrc3_hs_expt_all_raw-v{ver}.rda"),
                       gene_info=hs_annot) %>%
  exclude_genes_expt(column="gene_biotype", method="keep",
                     pattern="protein_coding", meta_column="ncrna_lost") %>%
  sanitize_expt_metadata(columns=sanitize_columns) %>%
  set_expt_factors(columns=sanitize_columns, class="factor") %>%
  set_expt_conditions(fact="finaloutcome") %>%
  set_expt_batches(fact="visitnumber") %>%
  subset_expt(subset="typeofcells!='pbmcs'") %>%
  subset_expt(subset="typeofcells!='macrophages'") %>%
  subset_expt(subset="clinicalpresentation!='h'")
## Reading the sample metadata.
## Dropped 69 rows from the sample metadata because the sample ID is blank.
## The sample definitions comprises: 254 rows(samples) and 88 columns(metadata fields).
## Warning in create_expt(samplesheet, file_column = "hg38100hisatfile", savefile =
## glue::glue("rda/tmrc3_hs_expt_all_raw-v{ver}.rda"), : Some samples were removed
## when cross referencing the samples against the count data.
## Matched 21447 annotations and counts.
## Bringing together the count matrix and gene information.
## Some annotations were lost in merging, setting them to 'undefined'.
## The final expressionset has 21481 features and 246 samples.
## remove_genes_expt(), before removal, there were 21481 genes, now there are 19923.
## There are 8 samples which kept less than 90 percent counts.
## TMRC30015 TMRC30269 TMRC30017 TMRC30019 TMRC30044 TMRC30045 TMRC30154 TMRC30241 
##     79.19     89.18     85.66     89.69     80.29     73.28     83.16     89.37
## subset_expt(): There were 246, now there are 240 samples.
## subset_expt(): There were 240, now there are 212 samples.
## subset_expt(): There were 212, now there are 210 samples.
data_structures <- c(data_structures, "hs_expt")

## The following should make visit 1 the largest if one uses that column as a size factor when plotting.
meta <- pData(hs_expt) %>%
  mutate(visitnumber = fct_relevel(visitnumber, c("3", "2", "1")))
pData(hs_expt) <- meta
save(list = "hs_expt", file = glue::glue("rda/tmrc3_hs_expt_all_sanitized-v{ver}.rda"))

3.1 Add the CRF patient metadata

hs_pd <- pData(hs_expt)
start <- rownames(hs_pd)
hs_crf <- openxlsx::read.xlsx(crf_metadata)
hs_crf[["join"]] <- tolower(hs_crf[["codigo_paciente"]])
hs_pd[["join"]] <- hs_pd[["tubelabelorigin"]]
test <- plyr::join(hs_pd, hs_crf, by="join")
test[["join"]] <- NULL
rownames(test) <- rownames(hs_pd)
na_idx <- is.na(test)
test[na_idx] <- "undefined"
pData(hs_expt) <- test

save(list = "hs_expt", file = glue::glue("rda/tmrc3_hs_expt_all_sanitized_crf-v{ver}.rda"))

3.2 Sanity check, clinical outcome vs. CRF data

two_columns <- pData(hs_expt)[, c("finaloutcome", "ef_lc_estado_final_estudio")]
undef_idx <- two_columns[[2]] == "undefined"
two_columns <- two_columns[!undef_idx, ]
two_columns[["rewritten"]] <- "undef"
cure_idx <- two_columns[[2]] == 0
two_columns[cure_idx, "rewritten"] <- "cure"
fail_idx <- two_columns[[2]] == 1
two_columns[fail_idx, "rewritten"] <- "failure"
lost_idx <- two_columns[[2]] == 2
two_columns[lost_idx, "rewritten"] <- "lost"
same_idx <- two_columns[["finaloutcome"]] == two_columns[["rewritten"]]
broken <- two_columns[!same_idx, ]
broken
## [1] finaloutcome               ef_lc_estado_final_estudio
## [3] rewritten                 
## <0 rows> (or 0-length row.names)

3.3 Summarize: Collect sample numbers before filtering

There are some metadata factors for which I think it will be nice to see the numbers before and after our filters. The following shows how many samples we have of the primary types before filtering.

dim(pData(hs_expt))
## [1] 210 148
table(pData(hs_expt)$drug)
## 
##    antimony miltefosine 
##         202           8
table(pData(hs_expt)$clinic)
## 
##   Cali Tumaco 
##     67    143
table(pData(hs_expt)$typeofcells)
## 
##      biopsy eosinophils   monocytes neutrophils 
##          21          45          73          71
table(pData(hs_expt)$visit)
## 
##   3   2   1 
##  54  56 100
summary(as.numeric(pData(hs_expt)$eb_lc_tiempo_evolucion))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2.00    4.00    6.00    8.25   12.00   21.00
summary(as.numeric(pData(hs_expt)$eb_lc_tto_mcto_glucan_dosis))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    13.0    14.0    19.0    54.6    20.0   999.0
summary(as.numeric(pData(hs_expt)$v3_lc_ejey_lesion_mm_1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0     7.4    32.0   269.5   771.8   999.0
summary(as.numeric(pData(hs_expt)$v3_lc_lesion_area_1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0     226     999    2412    3016   16965
summary(as.numeric(pData(hs_expt)$v3_lc_ejex_ulcera_mm_1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0     0.0     9.1   259.6   761.7   999.0
table(pData(hs_expt)$eb_lc_sexo)
## 
##   1   2 
## 173  37
table(pData(hs_expt)$eb_lc_etnia)
## 
##   1   2   3 
## 101  62  47
summary(as.numeric(pData(hs_expt)$edad))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    18.0    25.0    28.5    30.7    36.0    51.0
table(pData(hs_expt)$eb_lc_peso)
## 
##  53.9  55.9  57.9    58  58.1  58.3  58.6    59  59.6    62    63    67  69.4 
##     9     2     2     6     7    10    13    14     1     8     6     6    10 
##    72  74.7    75  75.6  76.5    77    78  79.2    82  83.3  83.4  86.4    87 
##     9     3     2     3     3    18    10    10     9     4    10     9     3 
##    89  93.3   100 100.8 
##     9     7     5     2
table(pData(hs_expt)$eb_lc_estatura)
## 
## 145 152 154 155 156 158 159 160 162 163 164 165 166 167 169 172 173 174 175 176 
##   6   1  10   9   6  17   2   6  10   9  15  12  19   3   2  10   9  32   2   1 
## 177 182 183 
##  10   9  10
table(pData(hs_expt)$ef_lc_estado_final_estudio)
## 
##   0   1   2 
## 130  64  16
table(pData(hs_expt)$finaloutcome)
## 
##    cure failure    lost 
##     130      64      16

3.4 Define desired colors for the various subsets

There are lots of ways which we will categorize the data, here are some potential color choices for them.

color_choices <- list(
    "cf" = list(
        "cure" = "#998EC3",
        "failure" = "#F1A340"),
    "type_visit" = list(
        "monocytes_v1" = "#DD1C77",
        "monocytes_v2" = "#C994C7",
        "monocytes_v3" = "#E7E1EF",
        "eosinophils_v1" = "#31A354",
        "eosinophils_v2" = "#ADDD8E",
        "eosinophils_v3" = "#F7FCD9",
        "neutrophils_v1" = "#3182BD",
        "neutrophils_v2" = "#9ECAE1",
        "neutrophils_v3" = "#DEEBF7",
        "biopsy_v1" = "#D95F0E"),
    "type" = list(
        "monocytes" = "#DD1C77",
        "eosinophils" = "#31A354",
        "neutrophils" = "#3182BD",
        "biopsy" = "#D95F0E"),
    "visit" = list(
        ## Turns out we never decided on visit-specific colors...
        "v1" = "#DD0000",
        "v2" = "#00DD00",
        "v3" = "#0000DD"),
    "cf_type" <- list(
        cure_biopsy = "#D95F0E",
        failure_biopsy = "#FEC44F",
        cure_monocytes = "#DD1C77",
        failure_monocytes = "#C994C7",
        cure_eosinophils = "#31A354",
        failure_eosinophils = "#ADDD8E",
        cure_neutrophils = "#3182BD",
        failure_neutrophils = "#9ECAE1"))
data_structures <- c(data_structures, "color_choices")

4 Define the starting data

4.1 Set our initial coverage goal

4.2 Figure XX: Non-zero genes before sample filtering

all_nz <- plot_nonzero(hs_expt)
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'fill' is already present. Adding another scale for 'fill', which
## will replace the existing scale.
all_nz$plot
## Warning: ggrepel: 195 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

4.3 Subset: Filter out problematic samples

To my eyes, there are 3 or 4 samples which are likely candidates for removal. In addition, we will remove samples which were lost during the treatment and/or ones which were used in other experiments but included in the TMRC3 sample sheet (thus the ‘notapplicable’ or ‘null’).

NOTE: I changed the prefix of the data structures to reflect the clinic(s) from which they were acquired. This will likely be a problem until I carefully step through the file; but will make sure I do not accidently upload data with the Cali samples.

tc_valid <- subset_expt(hs_expt, nonzero=11000) %>%
  subset_expt(subset="finaloutcome!='lost'") %>%
  subset_expt(subset="drug=='antimony'") %>%
  set_expt_colors(color_choices[["cf"]])
## The samples (and read coverage) removed when filtering 11000 non-zero genes are:
## TMRC30010 TMRC30050 TMRC30052 
##     52429    807571   3086349
## subset_expt(): There were 210, now there are 207 samples.
## subset_expt(): There were 207, now there are 192 samples.
## subset_expt(): There were 192, now there are 184 samples.
save(list = "tc_valid", file = glue::glue("rda/tmrc3_tc_valid-v{ver}.rda"))
data_structures <- c(data_structures, "tc_valid")

4.4 Figure XX + 1: Non-zero genes after sample filtering

The following plot is essentially identical to the previous with two exceptions:

  1. The samples with too few genes (11,000 currently) are gone.
  2. The samples are colored by cure(purple)/fail(yellow)
nz_post <- plot_nonzero(tc_valid)
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'fill' is already present. Adding another scale for 'fill', which
## will replace the existing scale.
nz_post$plot
## Warning: ggrepel: 163 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

4.5 Summarize: Tally samples after filtering

We need to keep track of how many of each sample type is lost when we do our various filters. Thus I am repeating the same set of tallies. This will likely happen one more time, following the removal of samples which came from Cali.

table(pData(tc_valid)$drug)
## 
## antimony 
##      184
table(pData(tc_valid)$clinic)
## 
##   Cali Tumaco 
##     61    123
table(pData(tc_valid)$finaloutcome)
## 
##    cure failure 
##     122      62
table(pData(tc_valid)$typeofcells)
## 
##      biopsy eosinophils   monocytes neutrophils 
##          18          41          63          62
table(pData(tc_valid)$visit)
## 
##  3  2  1 
## 51 50 83
summary(as.numeric(pData(tc_valid)$eb_lc_tiempo_evolucion))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2.00    4.00    6.00    8.19   12.00   21.00
summary(as.numeric(pData(tc_valid)$eb_lc_tto_mcto_glucan_dosis))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    13.0    14.8    19.0    17.5    20.0    20.0
summary(as.numeric(pData(tc_valid)$v3_lc_ejey_lesion_mm_1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0     7.2    32.0   303.4   999.0   999.0
summary(as.numeric(pData(tc_valid)$v3_lc_lesion_area_1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0     226     999    2328    2448   16965
summary(as.numeric(pData(tc_valid)$v3_lc_ejex_ulcera_mm_1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0     0.0    12.5   295.9   999.0   999.0
table(pData(tc_valid)$eb_lc_sexo)
## 
##   1   2 
## 156  28
table(pData(tc_valid)$eb_lc_etnia)
## 
##  1  2  3 
## 91 46 47
summary(as.numeric(pData(tc_valid)$edad))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    18.0    25.0    28.5    30.7    36.0    51.0
table(pData(tc_valid)$eb_lc_peso)
## 
##  53.9  57.9    58  58.1  58.3  58.6    59  59.6    62    63    67  69.4    72 
##     9     2     6     7    10     3     8     1     6     6     6    10     9 
##    75  76.5    77    78  79.2    82  83.3  83.4  86.4    87    89  93.3   100 
##     2     3    18    10    10     9     4    10     9     3     9     7     5 
## 100.8 
##     2
table(pData(tc_valid)$eb_lc_estatura)
## 
## 152 154 155 156 158 159 160 163 164 165 166 167 169 172 173 174 176 177 182 183 
##   1  10   9   6  15   2   3   9  15  12  19   3   2  10   9  32   1   7   9  10
length(unique(pData(tc_valid)[["codigo_paciente"]]))
## [1] 29

5 Subset: Separate samples by cell type and visit

all_types <- table(pData(tc_valid)[["typeofcells"]])
all_types
## 
##      biopsy eosinophils   monocytes neutrophils 
##          18          41          63          62
all_times <- table(pData(tc_valid)[["visitnumber"]])
all_times
## 
##  3  2  1 
## 51 50 83
## Note, I will save these data structures in a little bit when I decide how I want
## to set the conditions, batches, and colors.
tc_eosinophils <- subset_expt(tc_valid, subset="typeofcells=='eosinophils'")
## subset_expt(): There were 184, now there are 41 samples.
tc_monocytes <- subset_expt(tc_valid, subset="typeofcells=='monocytes'")
## subset_expt(): There were 184, now there are 63 samples.
tc_neutrophils <- subset_expt(tc_valid, subset="typeofcells=='neutrophils'")
## subset_expt(): There were 184, now there are 62 samples.
## Currently, these are not used, but instead I pulled the samples from the hs_clinical
## which means the biopsies are not included.
tcv1_samples <- subset_expt(tc_valid, subset="visitnumber=='1'")
## subset_expt(): There were 184, now there are 83 samples.
save(list = "tcv1_samples", file = glue::glue("rda/tmrc3_tcv1_samples-v{ver}.rda"))
data_structures <- c(data_structures, "tcv1_samples")

tcv2_samples <- subset_expt(tc_valid, subset="visitnumber=='2'")
## subset_expt(): There were 184, now there are 50 samples.
save(list = "tcv2_samples", file = glue::glue("rda/tmrc3_tcv2_samples-v{ver}.rda"))
data_structures <- c(data_structures, "tcv2_samples")

tcv3_samples <- subset_expt(tc_valid, subset="visitnumber=='3'")
## subset_expt(): There were 184, now there are 51 samples.
save(list = "tcv3_samples", file = glue::glue("rda/tmrc3_tcv3_samples-v{ver}.rda"))
data_structures <- c(data_structures, "tcv3_samples")

6 Dataset: Parasite reads

Make an expressionset of the parasite reads in the TMRC3 samples and distinguish between the faux and real reads. E.g: Are there samples which definitively contain parasites?

Later, I manually went through the mappings of samples with a significant number of parasite reads in IGV with some TMRC2 known zymodeme samples. In many cases it is possible to state definitively the classification of the parasite which infected an individual.

lp_expt <- create_expt(
    samplesheet,
    file_column="lpanamensisv36hisatfile", gene_info = NULL) %>%
  subset_expt(coverage=1000) %>%
  set_expt_conditions(fact="typeofcells")
## Reading the sample metadata.
## Dropped 69 rows from the sample metadata because the sample ID is blank.
## The sample definitions comprises: 254 rows(samples) and 88 columns(metadata fields).
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30156/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30185/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30186/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30178/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30179/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30221/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30222/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30223/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30224/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30269/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30148/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30149/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30253/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30150/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30140/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30138/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30176/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30153/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30151/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30234/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30235/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30270/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30225/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30226/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30227/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30228/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30229/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30230/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30231/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30232/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30233/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30209/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30210/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30211/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30212/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30213/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30216/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30214/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30215/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30271/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30273/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30275/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30272/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30274/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30276/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30254/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30255/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30256/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30277/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30239/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30240/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30278/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30279/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30280/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30257/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30258/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30281/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30283/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30284/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30282/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30050/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30285/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30071/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30056/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30052/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30113/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30105/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30058/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30164/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30080/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30094/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30119/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30059/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30060/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30061/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30062/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30063/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30051/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30064/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30065/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30162/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30066/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30067/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30117/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30057/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30069/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30082/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30103/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30122/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30169/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30093/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30107/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30170/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30096/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30083/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30115/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30118/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30180/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30121/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30196/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30165/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30194/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30166/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30195/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30048/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30054/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30046/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30070/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30049/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30055/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30047/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30191/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30053/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30068/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30171/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30192/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30139/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30188/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30158/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30132/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30160/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30157/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30189/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30183/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30167/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30123/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30181/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30072/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30133/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30078/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30116/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30184/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30076/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30159/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30129/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30088/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30172/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30134/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30174/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30137/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30161/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30142/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30175/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30190/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30145/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30143/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30168/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30197/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30146/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30182/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30199/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30198/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30266/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30268/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30286/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30249/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30252/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30250/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30251/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30245/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30246/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30247/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30248/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30244/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30201/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30200/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30203/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30202/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30205/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30204/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30152/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30177/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30155/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30154/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30241/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30242/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30237/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30206/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30136/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30207/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30238/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30074/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30217/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30208/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30077/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30219/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30218/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30079/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30260/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30220/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30262/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30261/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30135/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30173/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30264/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30263/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30144/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30147/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a
## multiple of shorter object length
## Warning in read_counts_expt(sample_ids, filenames, countdir = countdir, :
## The file: /mnt/cbcb/fs01_abelew/cbcb-lab/nelsayed/scratch/atb/rnaseq/
## lpanamensis_tmrc_git/preprocessing/TMRC30265/outputs/03hisat2_lpanamensis_v36/
## sno_gene_gene_id.count.xz has mismatched rownames.
## Warning in create_expt(samplesheet, file_column = "lpanamensisv36hisatfile", :
## Some samples were removed when cross referencing the samples against the count
## data.
## Matched 8778 annotations and counts.
## Bringing together the count matrix and gene information.
## Warning in create_expt(samplesheet, file_column =
## "lpanamensisv36hisatfile", : The following samples have no counts!
## TMRC30010TMRC30185TMRC30221TMRC30222TMRC30223TMRC30234TMRC30235TMRC30225TMRC30226TMRC30227TMRC30228TMRC30229TMRC30230TMRC30231TMRC30233TMRC30209TMRC30210TMRC30211TMRC30212TMRC30213TMRC30216TMRC30214TMRC30272TMRC30274TMRC30278TMRC30279TMRC30285TMRC30145TMRC30146TMRC30207TMRC30217TMRC30219TMRC30220TMRC30144
## Saving the expressionset to 'expt.rda'.
## The final expressionset has 8778 features and 244 samples.
## The samples removed (and read coverage) when filtering samples with less than 1000 reads are:
## TMRC30001 TMRC30002 TMRC30003 TMRC30004 TMRC30005 TMRC30006 TMRC30007 TMRC30008 
##        12         8         9        16        25        29         3        16 
## TMRC30009 TMRC30010 TMRC30011 TMRC30012 TMRC30013 TMRC30185 TMRC30186 TMRC30178 
##        16         0         5         9        13         0       852       420 
## TMRC30179 TMRC30221 TMRC30222 TMRC30223 TMRC30224 TMRC30269 TMRC30148 TMRC30150 
##       515         0         0         0         2        58       706       470 
## TMRC30140 TMRC30138 TMRC30151 TMRC30234 TMRC30235 TMRC30270 TMRC30225 TMRC30226 
##       153       156       480         0         0        21         0         0 
## TMRC30227 TMRC30228 TMRC30229 TMRC30230 TMRC30231 TMRC30232 TMRC30233 TMRC30018 
##         0         0         0         0         0         1         0       110 
## TMRC30209 TMRC30210 TMRC30211 TMRC30212 TMRC30213 TMRC30216 TMRC30214 TMRC30215 
##         0         0         0         0         0         0         0         1 
## TMRC30271 TMRC30273 TMRC30275 TMRC30272 TMRC30274 TMRC30276 TMRC30254 TMRC30277 
##         4         2         2         0         0         1       208         6 
## TMRC30239 TMRC30240 TMRC30278 TMRC30279 TMRC30280 TMRC30257 TMRC30281 TMRC30283 
##       209       314         0         0         3       427       548        18 
## TMRC30284 TMRC30282 TMRC30050 TMRC30285 TMRC30164 TMRC30119 TMRC30025 TMRC30032 
##         4         1       345         0       424       419       954        22 
## TMRC30028 TMRC30118 TMRC30014 TMRC30196 TMRC30030 TMRC30021 TMRC30023 TMRC30037 
##        93       747         4       687         3        88       120         9 
## TMRC30031 TMRC30165 TMRC30027 TMRC30194 TMRC30033 TMRC30038 TMRC30166 TMRC30036 
##         8       433       108       198        36       208       496        11 
## TMRC30024 TMRC30195 TMRC30034 TMRC30045 TMRC30040 TMRC30035 TMRC30041 TMRC30171 
##        49       458        21       334       896       153       264       370 
## TMRC30192 TMRC30139 TMRC30042 TMRC30158 TMRC30160 TMRC30189 TMRC30123 TMRC30181 
##       384       140       545       284       296       307       304       613 
## TMRC30043 TMRC30159 TMRC30129 TMRC30172 TMRC30174 TMRC30137 TMRC30161 TMRC30142 
##       571       405       353       383       644       389       300         4 
## TMRC30190 TMRC30145 TMRC30143 TMRC30197 TMRC30146 TMRC30182 TMRC30198 TMRC30266 
##       537         0         1       202         0       468       158       822 
## TMRC30201 TMRC30200 TMRC30203 TMRC30202 TMRC30205 TMRC30152 TMRC30155 TMRC30154 
##       149        96       104       145       169       495       508       398 
## TMRC30206 TMRC30207 TMRC30238 TMRC30217 TMRC30208 TMRC30219 TMRC30218 TMRC30260 
##       125         0       335         0         1         0         2       291 
## TMRC30220 TMRC30262 TMRC30261 TMRC30173 TMRC30264 TMRC30263 TMRC30144 TMRC30147 
##         0       905       500       898       309       431         0         1 
## TMRC30265 
##       596
## subset_expt(): There were 244, now there are 99 samples.
visit_fact <- pData(lp_expt)[["visitnumber"]]
batch_na <- is.na(visit_fact)
visit_fact[batch_na] <- "undefined"
lp_expt <- set_expt_batches(lp_expt, fact = visit_fact)
save(list = "lp_expt", file = glue::glue("rda/tmrc3_lp_expt_all_sanitized-v{ver}.rda"))
data_structures <- c(data_structures, "lp_expt")

The above block is similar in concept to the previous expressionset creation. It uses a different column and currently ignores the gene annotations. Given that many of the samples have essentially 0 reads, I set a cutoff of only 20 observed genes. Finally, I did a quick and dirty PCA plot of this peculiar data structure in the hopes of being able to ‘see’ the difference between what are assumed to be ‘real’ samples with a significant number of ‘real’ parasite reads vs. those samples which just have a couple of potentially spurious reads.

7 Host Distributions/Visualizations of interest

The sets of samples used to visualize the data will also comprise the sets used when later performing the various differential expression analyses.

tc_clinical <- tc_valid %>%
  set_expt_conditions(fact="finaloutcome") %>%
  set_expt_batches(fact="typeofcells") %>%
  set_expt_colors(color_choices[["cf"]])
save(list = "tc_clinical", file = glue::glue("rda/tmrc3_tc_clinical-v{ver}.rda"))
data_structures <- c(data_structures, "tc_clinical")

tc_clinical_nobiop <- subset_expt(tc_clinical, subset="typeofcells!='biopsy'")
## subset_expt(): There were 184, now there are 166 samples.
save(list = "tc_clinical_nobiop", file = glue::glue("rda/tmrc3_tc_clinical_nobiop-v{ver}.rda"))
data_structures <- c(data_structures, "tc_clinical_nobiop")

tc_biopsies <- tc_valid %>%
  set_expt_conditions(fact="clinic") %>%
  set_expt_batches(fact="finaloutcome") %>%
  subset_expt(subset="typeofcells=='biopsy'")
## subset_expt(): There were 184, now there are 18 samples.
tc_cf <- paste0(pData(tc_biopsies)[["clinic"]], "_",
                pData(tc_biopsies)[["finaloutcome"]])
table(tc_cf)
## tc_cf
##      Cali_cure    Tumaco_cure Tumaco_failure 
##              4              9              5
tc_biopsies <- set_expt_conditions(tc_biopsies, fact=tc_cf) %>%
  set_expt_batches(fact="visitnumber")
save(list = "tc_biopsies", file = glue::glue("rda/tmrc3_tc_biopsies-v{ver}.rda"))
data_structures <- c(data_structures, "tc_biopsies")

7.1 Subset: Eosinophils by clinic

In contrast, the Eosinophil samples do have significant amounts of variance which discriminates the two clinics. At the time of this writing, there are fewer eosinophil samples than monocytes nor neutrophils; as a result there are no samples which failed from Cali. This is somewhat limiting is we wish to look for differences between the cure and fail samples which came from the two clinics.

clinic_cf <- paste0(pData(tc_eosinophils)[["clinic"]], "_",
                    pData(tc_eosinophils)[["finaloutcome"]])
table(clinic_cf)
## clinic_cf
##      Cali_cure    Tumaco_cure Tumaco_failure 
##             15             17              9
tc_eosinophils <- set_expt_conditions(tc_eosinophils, fact=clinic_cf) %>%
  set_expt_batches(fact="visitnumber")
save(list = "tc_eosinophils", file = glue::glue("rda/tmrc3_tc_eosinophils-v{ver}.rda"))
data_structures <- c(data_structures, "tc_eosinophils")

tcv1_eosinophils <- subset_expt(tc_eosinophils, subset="visitnumber=='1'")
## subset_expt(): There were 41, now there are 14 samples.
save(list = "tcv1_eosinophils", file = glue::glue("rda/tmrc3_tcv1_eosinophils-v{ver}.rda"))
data_structures <- c(data_structures, "tcv1_eosinophils")
tcv2_eosinophils <- subset_expt(tc_eosinophils, subset="visitnumber=='2'")
## subset_expt(): There were 41, now there are 14 samples.
save(list = "tcv2_eosinophils", file = glue::glue("rda/tmrc3_tcv2_eosinophils-v{ver}.rda"))
data_structures <- c(data_structures, "tcv2_eosinophils")
tcv3_eosinophils <- subset_expt(tc_eosinophils, subset="visitnumber=='3'")
## subset_expt(): There were 41, now there are 13 samples.
save(list = "tcv3_eosinophils", file = glue::glue("rda/tmrc3_tcv3_eosinophils-v{ver}.rda"))
data_structures <- c(data_structures, "tcv3_eosinophils")

7.2 Subset: Monocytes by clinic

In contrast with the eosinophil samples, we have one patient’s monocyte and neutrophil samples which did not cure. As we will see, there is one person from Cali who did not cure, this person is not different with respect to tracscriptome than the other people from Cali.

clinic_cf <- paste0(pData(tc_monocytes)[["clinic"]], "_",
                    pData(tc_monocytes)[["finaloutcome"]])
table(clinic_cf)
## clinic_cf
##      Cali_cure   Cali_failure    Tumaco_cure Tumaco_failure 
##             18              3             21             21
tc_monocytes <- set_expt_conditions(tc_monocytes, fact=clinic_cf) %>%
  set_expt_batches(fact="visitnumber")
save(list = "tc_monocytes", file = glue::glue("rda/tmrc3_tc_monocytes-v{ver}.rda"))
data_structures <- c(data_structures, "tc_monocytes")

tcv1_monocytes <- subset_expt(tc_monocytes, subset="visitnumber=='1'")
## subset_expt(): There were 63, now there are 26 samples.
save(list = "tcv1_monocytes", file = glue::glue("rda/tmrc3_tcv1_monocytes-v{ver}.rda"))
data_structures <- c(data_structures, "tcv1_monocytes")
tcv2_monocytes <- subset_expt(tc_monocytes, subset="visitnumber=='2'")
## subset_expt(): There were 63, now there are 18 samples.
save(list = "tcv2_monocytes", file = glue::glue("rda/tmrc3_tcv2_monocytes-v{ver}.rda"))
data_structures <- c(data_structures, "tcv2_monocytes")
tcv3_monocytes <- subset_expt(tc_monocytes, subset="visitnumber=='3'")
## subset_expt(): There were 63, now there are 19 samples.
save(list = "tcv3_monocytes", file = glue::glue("rda/tmrc3_tcv3_monocytes-v{ver}.rda"))
data_structures <- c(data_structures, "tcv3_monocytes")

7.3 Subset: Neutrophils by clinic

Finally, that same one person does appear to be different than the others from Cali.

clinic_cf <- paste0(pData(tc_neutrophils)[["clinic"]], "_",
                    pData(tc_neutrophils)[["finaloutcome"]])
table(clinic_cf)
## clinic_cf
##      Cali_cure   Cali_failure    Tumaco_cure Tumaco_failure 
##             18              3             20             21
tc_neutrophils <- set_expt_conditions(tc_neutrophils, fact=clinic_cf) %>%
  set_expt_batches(fact="visitnumber")
save(list = "tc_neutrophils", file = glue::glue("rda/tmrc3_tc_neutrophils-v{ver}.rda"))
data_structures <- c(data_structures, "tc_neutrophils")

tcv1_neutrophils <- subset_expt(tc_neutrophils, subset="visitnumber=='1'")
## subset_expt(): There were 62, now there are 25 samples.
save(list = "tcv1_neutrophils", file = glue::glue("rda/tmrc3_tcv1_neutrophils-v{ver}.rda"))
data_structures <- c(data_structures, "tcv1_neutrophils")
tcv2_neutrophils <- subset_expt(tc_neutrophils, subset="visitnumber=='2'")
## subset_expt(): There were 62, now there are 18 samples.
save(list = "tcv2_neutrophils", file = glue::glue("rda/tmrc3_tcv2_neutrophils-v{ver}.rda"))
data_structures <- c(data_structures, "tcv2_neutrophils")
tcv3_neutrophils <- subset_expt(tc_neutrophils, subset="visitnumber=='3'")
## subset_expt(): There were 62, now there are 19 samples.
save(list = "tcv3_neutrophils", file = glue::glue("rda/tmrc3_tcv3_neutrophils-v{ver}.rda"))
data_structures <- c(data_structures, "tcv3_neutrophils")

8 Summarize: Tabulate sample numbers

Here is an outline of the samples in their current state:

  • By type: ncol(exprs(tc_valid)), Cure: sum(pData(tc_valid)[["finaloutcome"]] == "cure"), Fail: sum(pData(tc_valid)[["finaloutcome"]] == "failure")
    • Biopsy: all_types[["biopsy"]], Cure: sum(pData(tc_biopsies)[["finaloutcome"]] == "cure"), Fail: sum(pData(tc_biopsies)[["finaloutcome"]] == "failure")
      • All biopsy samples are visit 1.
    • Eosinophils: all_types[["eosinophils"]], Cure: sum(pData(tc_eosinophils)[["finaloutcome"]] == "cure"), Fail: sum(pData(tc_eosinophils)[["finaloutcome"]] == "failure")
      • V1 Eosinophils: nrow(pData(tcv1_eosinophils)), Cure: sum(pData(tcv1_eosinophils)[["finaloutcome"]] == "cure"), Fail: sum(pData(tcv1_eosinophils)[["finaloutcome"]] == "failure")
      • V2 Eosinophils: nrow(pData(tcv2_eosinophils)), Cure: sum(pData(tcv2_eosinophils)[["finaloutcome"]] == "cure"), Fail: sum(pData(tcv2_eosinophils)[["finaloutcome"]] == "failure")
      • V3 Eosinophils: nrow(pData(tcv3_eosinophils)), Cure: sum(pData(tcv3_eosinophils)[["finaloutcome"]] == "cure"), Fail: sum(pData(tcv3_eosinophils)[["finaloutcome"]] == "failure")
    • Monocytes: all_types[["monocytes"]], Cure: sum(pData(tc_monocytes)[["finaloutcome"]] == "cure"), Fail: sum(pData(tc_monocytes)[["finaloutcome"]] == "failure")
      • V1 Monocytes: nrow(pData(tcv1_monocytes)), Cure: sum(pData(tcv1_monocytes)[["finaloutcome"]] == "cure"), Fail: sum(pData(tcv1_monocytes)[["finaloutcome"]] == "failure")
      • V2 Monocytes: nrow(pData(tcv2_monocytes)), Cure: sum(pData(tcv2_monocytes)[["finaloutcome"]] == "cure"), Fail: sum(pData(tcv2_monocytes)[["finaloutcome"]] == "failure")
      • V3 Monocytes: nrow(pData(tcv3_monocytes)), Cure: sum(pData(tcv3_monocytes)[["finaloutcome"]] == "cure"), Fail: sum(pData(tcv3_monocytes)[["finaloutcome"]] == "failure")
    • Neutrophils: all_types[["neutrophils"]], Cure: sum(pData(tc_neutrophils)[["finaloutcome"]] == "cure"), Fail: sum(pData(tc_neutrophils)[["finaloutcome"]] == "failure")
      • V1 Neutrophils: nrow(pData(tcv1_neutrophils)), Cure: sum(pData(tcv1_neutrophils)[["finaloutcome"]] == "cure"), Fail: sum(pData(tcv1_neutrophils)[["finaloutcome"]] == "failure")
      • V2 Neutrophils: nrow(pData(tcv2_monocytes)), Cure: sum(pData(tcv2_neutrophils)[["finaloutcome"]] == "cure"), Fail: sum(pData(tcv2_neutrophils)[["finaloutcome"]] == "failure")
      • V3 Neutrophils: nrow(pData(tcv3_neutrophils)), Cure: sum(pData(tcv3_neutrophils)[["finaloutcome"]] == "cure"), Fail: sum(pData(tcv3_neutrophils)[["finaloutcome"]] == "failure")

9 Dataset: Only Tumaco samples

Our recent discussions have settled one big question regarding which samples to use: We will limit our analyses to only those samples from Tumaco.

The following block will therefore set that group as our default for future analyses.

t_clinical <- tc_clinical %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 184, now there are 123 samples.
save(list = "t_clinical", file = glue::glue("rda/tmrc3_t_clinical-v{ver}.rda"))
data_structures <- c(data_structures, "t_clinical")

t_clinical_nobiop <- subset_expt(t_clinical, subset="typeofcells!='biopsy'")
## subset_expt(): There were 123, now there are 109 samples.
save(list = "t_clinical_nobiop", file = glue::glue("rda/tmrc3_t_clinical_nobiop-v{ver}.rda"))
data_structures <- c(data_structures, "t_clinical_nobiop")

9.1 Summarize: Collect Tumaco sample numbers.

At least in theory, everything which follows will be using the above ‘clinical’ data structure. Thus, let us count it up and get a sense of what we will work with.

table(pData(t_clinical)$drug)
## 
## antimony 
##      123
table(pData(t_clinical)$clinic)
## 
## Tumaco 
##    123
table(pData(t_clinical)$finaloutcome)
## 
##    cure failure 
##      67      56
table(pData(t_clinical)$typeofcells)
## 
##      biopsy eosinophils   monocytes neutrophils 
##          14          26          42          41
table(pData(t_clinical)$visit)
## 
##  3  2  1 
## 34 35 54
summary(as.numeric(pData(t_clinical)$eb_lc_tiempo_evolucion))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2.00    4.00    4.00    7.03    8.00   21.00
summary(as.numeric(pData(t_clinical)$eb_lc_tto_mcto_glucan_dosis))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      13      14      17      17      20      20
summary(as.numeric(pData(t_clinical)$v3_lc_ejey_lesion_mm_1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     3.0     7.2    31.3   389.6   999.0   999.0
summary(as.numeric(pData(t_clinical)$v3_lc_lesion_area_1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      46     222     999    1089     999    5055
summary(as.numeric(pData(t_clinical)$v3_lc_ejex_ulcera_mm_1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0       0       0     383     999     999
table(pData(t_clinical)$eb_lc_sexo)
## 
##   1   2 
## 101  22
table(pData(t_clinical)$eb_lc_etnia)
## 
##  1  2  3 
## 76 19 28
summary(as.numeric(pData(t_clinical)$edad))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    18.0    23.0    25.0    28.5    34.0    51.0
table(pData(t_clinical)$eb_lc_peso)
## 
##  53.9  57.9  58.1  58.3  58.6    59  59.6    62    63  69.4    77    78  79.2 
##     9     2     7    10     3     8     1     6     6    10     9    10    10 
##  83.3  83.4  86.4  93.3 100.8 
##     4    10     9     7     2
table(pData(t_clinical)$eb_lc_estatura)
## 
## 152 154 158 159 163 164 165 166 172 173 174 176 177 182 183 
##   1  10  15   2   9  15  12  10  10   4   8   1   7   9  10
length(unique(pData(t_clinical)[["codigo_paciente"]]))
## [1] 19
only_cure <- pData(t_clinical)[["finaloutcome"]] == "cure"
c_meta <- pData(t_clinical)[only_cure, ]
length(unique(c_meta[["codigo_paciente"]]))
## [1] 10
only_fail <- pData(t_clinical)[["finaloutcome"]] == "failure"
f_meta <- pData(t_clinical)[only_fail, ]
length(unique(f_meta[["codigo_paciente"]]))
## [1] 9

9.2 Subset: Create Tumaco-specific versions of the various structures

I previously made a bunch of data subsets by visit, cell type, etc. So let us overwrite them all with versions which contain only the Tumaco samples.

There is no going back to the Cali samples after this block unless we regenerate the data from the original expressionsets.

t_biopsies <- tc_biopsies %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 18, now there are 14 samples.
save(list = "t_biopsies", file = glue::glue("rda/tmrc3_t_biopsies-v{ver}.rda"))
data_structures <- c(data_structures, "t_biopsies")

t_eosinophils <- tc_eosinophils %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 41, now there are 26 samples.
save(list = "t_eosinophils", file = glue::glue("rda/tmrc3_t_eosinophils-v{ver}.rda"))
data_structures <- c(data_structures, "t_eosinophils")

t_monocytes <- tc_monocytes %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 63, now there are 42 samples.
save(list = "t_monocytes", file = glue::glue("rda/tmrc3_t_monocytes-v{ver}.rda"))
data_structures <- c(data_structures, "t_monocytes")

t_neutrophils <- tc_neutrophils %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 62, now there are 41 samples.
save(list = "t_neutrophils", file = glue::glue("rda/tmrc3_t_neutrophils-v{ver}.rda"))
data_structures <- c(data_structures, "t_neutrophils")

tv1_samples <- tcv1_samples %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 83, now there are 54 samples.
save(list = "tv1_samples", file = glue::glue("rda/tmrc3_tv1_samples-v{ver}.rda"))
data_structures <- c(data_structures, "tv1_samples")

tv2_samples <- tcv2_samples %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 50, now there are 35 samples.
save(list = "tv2_samples", file = glue::glue("rda/tmrc3_tv2_samples-v{ver}.rda"))
data_structures <- c(data_structures, "tv2_samples")

tv3_samples <- tcv3_samples %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 51, now there are 34 samples.
save(list = "tv3_samples", file = glue::glue("rda/tmrc3_tv3_samples-v{ver}.rda"))
data_structures <- c(data_structures, "tv3_samples")

tv1_eosinophils <- tcv1_eosinophils %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 14, now there are 8 samples.
save(list = "tv1_eosinophils", file = glue::glue("rda/tmrc3_tv1_eosinophils-v{ver}.rda"))
data_structures <- c(data_structures, "tv1_eosinophils")

tv2_eosinophils <- tcv2_eosinophils %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 14, now there are 9 samples.
save(list = "tv2_eosinophils", file = glue::glue("rda/tmrc3_tv2_eosinophils-v{ver}.rda"))
data_structures <- c(data_structures, "tv2_eosinophils")

tv3_eosinophils <- tcv3_eosinophils %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 13, now there are 9 samples.
save(list = "tv3_eosinophils", file = glue::glue("rda/tmrc3_tv3_eosinophils-v{ver}.rda"))
data_structures <- c(data_structures, "tv3_eosinophils")

tv1_monocytes <- tcv1_monocytes %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 26, now there are 16 samples.
save(list = "tv1_monocytes", file = glue::glue("rda/tmrc3_tv1_monocytes-v{ver}.rda"))
data_structures <- c(data_structures, "tv1_monocytes")

tv2_monocytes <- tcv2_monocytes %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 18, now there are 13 samples.
save(list = "tv2_monocytes", file = glue::glue("rda/tmrc3_tv2_monocytes-v{ver}.rda"))
data_structures <- c(data_structures, "tv2_monocytes")

tv3_monocytes <- tcv3_monocytes %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 19, now there are 13 samples.
save(list = "tv3_monocytes", file = glue::glue("rda/tmrc3_tv3_monocytes-v{ver}.rda"))
data_structures <- c(data_structures, "tv3_monocytes")

tv1_neutrophils <- tcv1_neutrophils %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 25, now there are 16 samples.
save(list = "tv1_neutrophils", file = glue::glue("rda/tmrc3_tv1_neutrophils-v{ver}.rda"))
data_structures <- c(data_structures, "tv1_neutrophils")

tv2_neutrophils <- tcv2_neutrophils %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 18, now there are 13 samples.
save(list = "tv2_neutrophils", file = glue::glue("rda/tmrc3_tv2_neutrophils-v{ver}.rda"))
data_structures <- c(data_structures, "tv2_neutrophils")

tv3_neutrophils <- tcv3_neutrophils %>%
  subset_expt(subset="clinic=='Tumaco'")
## subset_expt(): There were 19, now there are 12 samples.
save(list = "tv3_neutrophils", file = glue::glue("rda/tmrc3_tv3_neutrophils-v{ver}.rda"))
data_structures <- c(data_structures, "tv3_neutrophils")
t_visit <- set_expt_conditions(t_clinical, fact = "visitnumber") %>%
  set_expt_batches(fact = "finaloutcome") %>%
  subset_expt(subset="typeofcells!='biopsy'")
## subset_expt(): There were 123, now there are 109 samples.
save(list = "t_visit", file = glue::glue("rda/tmrc3_t_visit-v{ver}.rda"))
data_structures <- c(data_structures, "t_visit")
visit_cf_expt_factor <- paste0("v", pData(t_clinical)[["visitnumber"]],
                               pData(t_clinical)[["finaloutcome"]])
t_visitcf <- set_expt_conditions(t_clinical, fact = visit_cf_expt_factor)
save(list = "t_visitcf", file = glue::glue("rda/tmrc3_t_visitcf-v{ver}.rda"))
data_structures <- c(data_structures, "t_visitcf")

t_visitcf_eosinophil <- subset_expt(t_visitcf, subset="typeofcells=='eosinophils'")
## subset_expt(): There were 123, now there are 26 samples.
save(list = "t_visitcf_eosinophil", file = glue::glue("rda/tmrc3_t_visitcf_eosinophil-v{ver}.rda"))
data_structures <- c(data_structures, "t_visitcf_eosinophil")

t_visitcf_monocyte <- subset_expt(t_visitcf, subset="typeofcells=='monocytes'")
## subset_expt(): There were 123, now there are 42 samples.
save(list = "t_visitcf_monocyte", file = glue::glue("rda/tmrc3_t_visitcf_monocyte-v{ver}.rda"))
data_structures <- c(data_structures, "t_visitcf_monocyte")

t_visitcf_neutrophil <- subset_expt(t_visitcf, subset="typeofcells=='neutrophils'")
## subset_expt(): There were 123, now there are 41 samples.
save(list = "t_visitcf_neutrophil", file = glue::glue("rda/tmrc3_t_visitcf_neutrophil-v{ver}.rda"))
data_structures <- c(data_structures, "t_visitcf_neutrophil")

10 Persistence

t_persistence <- subset_expt(t_clinical, subset = "persistence=='Y'|persistence=='N'") %>%
  subset_expt(subset = 'visitnumber==3') %>%
  set_expt_conditions(fact = 'persistence')
## subset_expt(): There were 123, now there are 83 samples.
## subset_expt(): There were 83, now there are 30 samples.
save(list = "t_persistence", file = glue::glue("rda/tmrc3_t_persistence-v{ver}.rda"))
data_structures <- c(data_structures, "t_persistence")

t_persistence_monocyte <- subset_expt(t_persistence, subset = "typeofcells=='monocytes'")
## subset_expt(): There were 30, now there are 12 samples.
save(list = "t_persistence_monocyte", file = glue::glue("rda/tmrc3_t_persistence_monocyte-v{ver}.rda"))
data_structures <- c(data_structures, "t_persistence_monocyte")

t_persistence_neutrophil <- subset_expt(t_persistence, subset = "typeofcells=='neutrophils'")
## subset_expt(): There were 30, now there are 10 samples.
save(list = "t_persistence_neutrophil", file = glue::glue("rda/tmrc3_t_persistence_neutrophil-v{ver}.rda"))
data_structures <- c(data_structures, "t_persistence_neutrophil")

t_persistence_eosinophil <- subset_expt(t_persistence, subset = "typeofcells=='eosinophils'")
## subset_expt(): There were 30, now there are 8 samples.
save(list = "t_persistence_eosinophil", file = glue::glue("rda/tmrc3_t_persistence_eosinophil-v{ver}.rda"))
data_structures <- c(data_structures, "t_persistence_eosinophil")

11 Save all data structures into one big pile

save(list = data_structures, file = glue::glue("rda/tmrc3_data_structures-v{ver}.rda"))
if (!isTRUE(get0("skip_load"))) {
  pander::pander(sessionInfo())
  message(paste0("This is hpgltools commit: ", get_git_commit()))
  message(paste0("Saving to ", savefile))
  tmp <- sm(saveme(filename=savefile))
}
tmp <- loadme(filename=savefile)
LS0tCnRpdGxlOiAiTC4gcGFuYW1lbnNpcyAyMDIyMDc6IENyZWF0ZSBUTVJDMyBEYXRhIFN0cnVjdHVyZXMiCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKIGh0bWxfZG9jdW1lbnQ6CiAgY29kZV9kb3dubG9hZDogdHJ1ZQogIGNvZGVfZm9sZGluZzogc2hvdwogIGZpZ19jYXB0aW9uOiB0cnVlCiAgZmlnX2hlaWdodDogNwogIGZpZ193aWR0aDogNwogIGhpZ2hsaWdodDogZGVmYXVsdAogIGtlZXBfbWQ6IGZhbHNlCiAgbW9kZTogc2VsZmNvbnRhaW5lZAogIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogIHNlbGZfY29udGFpbmVkOiB0cnVlCiAgdGhlbWU6IHJlYWRhYmxlCiAgdG9jOiB0cnVlCiAgdG9jX2Zsb2F0OgogICBjb2xsYXBzZWQ6IGZhbHNlCiAgIHNtb290aF9zY3JvbGw6IGZhbHNlCi0tLQoKPHN0eWxlPgogIGJvZHkgLm1haW4tY29udGFpbmVyIHsKICAgIG1heC13aWR0aDogMTYwMHB4OwogIH0KPC9zdHlsZT4KCmBgYHtyIG9wdGlvbnMsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoaHBnbHRvb2xzKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGZvcmNhdHMpCnR0IDwtIHNtKGRldnRvb2xzOjpsb2FkX2FsbCgifi9ocGdsdG9vbHMiKSkKa25pdHI6Om9wdHNfa25pdCRzZXQocHJvZ3Jlc3M9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT1UUlVFLAogICAgICAgICAgICAgICAgICAgICB3aWR0aD05MCwKICAgICAgICAgICAgICAgICAgICAgZWNobz1UUlVFKQprbml0cjo6b3B0c19jaHVuayRzZXQoZXJyb3I9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgIGZpZy53aWR0aD04LAogICAgICAgICAgICAgICAgICAgICAgZmlnLmhlaWdodD04LAogICAgICAgICAgICAgICAgICAgICAgZHBpPTk2KQpvbGRfb3B0aW9ucyA8LSBvcHRpb25zKGRpZ2l0cz00LAogICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAga25pdHIuZHVwbGljYXRlLmxhYmVsPSJhbGxvdyIpCmdncGxvdDI6OnRoZW1lX3NldChnZ3Bsb3QyOjp0aGVtZV9idyhiYXNlX3NpemU9MTIpKQp2ZXIgPC0gIjIwMjIwNyIKcHJldmlvdXNfZmlsZSA8LSBwYXN0ZTAoIjAxX2Fubm90YXRpb25fdiIsIHZlciwgIi5SbWQiKQpydW5kYXRlIDwtIGZvcm1hdChTeXMuRGF0ZSgpLCBmb3JtYXQ9IiVZJW0lZCIpCgojI3RtcCA8LSB0cnkoc20obG9hZG1lKGZpbGVuYW1lPWdzdWIocGF0dGVybj0iXFwuUm1kIiwgcmVwbGFjZT0iXFwucmRhXFwueHoiLCB4PXByZXZpb3VzX2ZpbGUpKSkpCnJtZF9maWxlIDwtICJ0bXJjM19kYXRhc2V0c18yMDIyMDcuUm1kIgpzYXZlZmlsZSA8LSBnc3ViKHBhdHRlcm49IlxcLlJtZCIsIHJlcGxhY2U9IlxcLnJkYVxcLnh6IiwgeD1ybWRfZmlsZSkKYGBgCgojIEludHJvZHVjdGlvbgoKV2UgYXJlIHNwbGl0dGluZyB0aGUgY3JlYXRpb24gb2YgdGhlIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGVpcgphbmFseXNpcyBpbnRvIHR3byBzZXBhcmF0ZSBkb2N1bWVudHMuCgojIyBNZXRhZGF0YSBTb3VyY2VzCgpgYGB7ciBtZXRhZGF0YV9zb3VyY2VzfQojIyBzYW1wbGVzaGVldCA8LSAic2FtcGxlX3NoZWV0cy90bXJjM19zYW1wbGVzXzIwMjIwNjE1Lnhsc3giCiMjIFJlZHVuZGFudCBzYW1wbGUgc2hlZXQgZW50cmllcyBzbyB3ZSBjYW4gdGVzdCBpZiBzb21ldGhpbmcgY2hhbmdlZCBpbiBKdW5lCnNhbXBsZXNoZWV0IDwtICJzYW1wbGVfc2hlZXRzL3RtcmMzX3NhbXBsZXNfMjAyMjA3MTQueGxzeCIKY3JmX21ldGFkYXRhIDwtICJzYW1wbGVfc2hlZXRzLzIwMjIwNTA5X0VYUF9FU1BFQ0lBTF9UTVJDM19WMi54bHN4IgpgYGAKCiMgQW5ub3RhdGlvbiBDb2xsZWN0aW9uCgpUaGUgcHJpbWFyeSBhbm5vdGF0aW9uIHNvdXJjZXMgYXJlOgoKMS4gIEVuc2VtYmwncyBiaW9tYXJ0IGFyY2hpdmUgZnJvbSAyMDIwIGZvciBodW1hbiBhbm5vdGF0aW9ucy4KMi4gIFRoZSBUcmlUcnlwREIgcmVsZWFzZSAzNiBmb3IgcGFyYXNpdGUgYW5ub3RhdGlvbnMuCgpCb3RoIHByb3ZpZGUgR08gZGF0YS4gIFRoZXkgYWxzbyBwcm92aWRlIGhlbHBmdWwgbGlua3MgdG8gb3RoZXIgZGF0YQpzb3VyY2VzLiAgRm9yIHRoZSBtb21lbnQsIHdlIGFyZSBmb2N1c2luZyBvbiB0aGUgaHVtYW4gYW5ub3RhdGlvbnMuCgojIyBHZW5lIGFubm90YXRpb25zCgpUaGVzZSBhbmFseXNlcyBoYXZlIGZvY3VzZWQgb24gZ2VuZS1sZXZlbCBhYnVuZGFuY2VzL2RpZmZlcmVuY2VzLgpUaHVzLCB3aGVuIGh0c2VxLWNvdW50IHdhcyBpbnZva2VkIGFnYWluc3QgdGhlIGhpc2F0Mi1iYXNlZCBtYXBwaW5ncywKcGFyYW1ldGVycyB3ZXJlIGNob3NlbiB0byBjb3VudCBnZW5lcyByYXRoZXIgdGhhbiB0cmFuc2NyaXB0cy4KU2ltaWxhcmx5LCB3aGVuIHNhbG1vbiBjb3VudHMgd2VyZSB1c2VkIHZpYSB0eGltcG9ydCwgYSBtYXBwaW5nIG9mCmdlbmVzIHRvIHRyYW5zY3JpcHRzIHdhcyB1c2VkIHRvIGNvbGxhcHNlIHRoZSBtYXRyaXggdG8gZ2VuZS1sZXZlbAphYnVuZGFuY2VzLiAgVGhpcyBkZWNpc2lvbiBtYXkgYmUgcmV2aXNpdGVkLgoKYGBge3IgY29sbGVjdF9hbm5vdGF0aW9uc30KaHNfYW5ub3QgPC0gbG9hZF9iaW9tYXJ0X2Fubm90YXRpb25zKHllYXI9IjIwMjAiLCBtb250aD0iamFuIikKaHNfYW5ub3QgPC0gaHNfYW5ub3RbWyJhbm5vdGF0aW9uIl1dCmhzX2Fubm90W1sidHJhbnNjcmlwdCJdXSA8LSBwYXN0ZTAocm93bmFtZXMoaHNfYW5ub3QpLCAiLiIsIGhzX2Fubm90W1sidmVyc2lvbiJdXSkKcm93bmFtZXMoaHNfYW5ub3QpIDwtIG1ha2UubmFtZXMoaHNfYW5ub3RbWyJlbnNlbWJsX2dlbmVfaWQiXV0sIHVuaXF1ZT1UUlVFKQp0eF9nZW5lX21hcCA8LSBoc19hbm5vdFssIGMoInRyYW5zY3JpcHQiLCAiZW5zZW1ibF9nZW5lX2lkIildCnN1bW1hcnkoaHNfYW5ub3QpCmBgYAoKIyMgR2VuZSBvbnRvbG9neSBkYXRhCgpUaGUgc2V0IG9mIEdPIGNhdGVnb3JpZXMgaGFzIG5vdCBiZWVuIGxpbWl0ZWQgdG8gdGhlIDIwMjAgZGF0YSBhdCB0aGUKdGltZSBvZiB0aGlzIHdyaXRpbmcuICBUaGUgR08gY2F0ZWdvcmllcyBpcyBjb2xsZWN0ZWQgYWxvbmcgd2l0aApsZW5ndGhzIGZvciBnb3NlcS4gIFRoZSBvdGhlciBtZXRob2RzIGVpdGhlciBoYXZlIGJ1aWx0LWluIGRhdGFiYXNlcwpvZiBodW1hbiBkYXRhIChnUHJvZmlsZXIpIG9yIHN1cHBvcnQgb3JnREIgZGF0YSAob3JnLkhzLmVnLmRiKQooY2x1c3RlclByb2ZpbGVyL3RvcEdPL2dvc3RhdHMpLgoKYGBge3IgaHNfZ299CmhzX2dvIDwtIGxvYWRfYmlvbWFydF9nbygpW1siZ28iXV0KaHNfbGVuZ3RoIDwtIGhzX2Fubm90WywgYygiZW5zZW1ibF9nZW5lX2lkIiwgImNkc19sZW5ndGgiKV0KY29sbmFtZXMoaHNfbGVuZ3RoKSA8LSBjKCJJRCIsICJsZW5ndGgiKQpgYGAKCiMgRGF0YXNldDogQ3JlYXRlIHRoZSBwYXJlbnQgZGF0YSBzdHJ1Y3R1cmUgb2YgYWxsIHNhbXBsZXMKCkJlZm9yZSB3ZSBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZyBzdWJzZXRzL2FuYWx5c2VzIG9mIHRoZSBkYXRhLCB3ZQpuZWVkIHRvIGNvbGxlY3QgaXQgYWxsIGluIG9uZSBwbGFjZS4gIExldCdzIGRvIHRoYXQgaGVyZSBhbmQgbmFtZSBpdAonaHNfZXhwdCcsIGl0IHdpbGwgY29tcHJpc2UgdGhlIGZ1bGwgc2V0IG9mIGh1bWFuIGRhdGEuICBXaGVuIHdlIGN1bGwKc29tZSBzYW1wbGVzIGl0IHdpbGwgYmUgcmVuYW1lZCB0byAnaHNfdmFsaWQnLgoKYGBge3IgYWxsX2RhdGF9CmRhdGFfc3RydWN0dXJlcyA8LSBjKCkKc2FuaXRpemVfY29sdW1ucyA8LSBjKCJ2aXNpdG51bWJlciIsICJmaW5hbG91dGNvbWUiLCAiZG9ub3IiLAogICAgICAgICAgICAgICAgICAgICAgInR5cGVvZmNlbGxzIiwgImNsaW5pY2FscHJlc2VudGF0aW9uIiwgImRydWciLAogICAgICAgICAgICAgICAgICAgICAgImNvbmRpdGlvbiIsICJiYXRjaCIpCmhzX2V4cHQgPC0gY3JlYXRlX2V4cHQoc2FtcGxlc2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9jb2x1bW49ImhnMzgxMDBoaXNhdGZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgIHNhdmVmaWxlPWdsdWU6OmdsdWUoInJkYS90bXJjM19oc19leHB0X2FsbF9yYXctdnt2ZXJ9LnJkYSIpLAogICAgICAgICAgICAgICAgICAgICAgIGdlbmVfaW5mbz1oc19hbm5vdCkgJT4lCiAgZXhjbHVkZV9nZW5lc19leHB0KGNvbHVtbj0iZ2VuZV9iaW90eXBlIiwgbWV0aG9kPSJrZWVwIiwKICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj0icHJvdGVpbl9jb2RpbmciLCBtZXRhX2NvbHVtbj0ibmNybmFfbG9zdCIpICU+JQogIHNhbml0aXplX2V4cHRfbWV0YWRhdGEoY29sdW1ucz1zYW5pdGl6ZV9jb2x1bW5zKSAlPiUKICBzZXRfZXhwdF9mYWN0b3JzKGNvbHVtbnM9c2FuaXRpemVfY29sdW1ucywgY2xhc3M9ImZhY3RvciIpICU+JQogIHNldF9leHB0X2NvbmRpdGlvbnMoZmFjdD0iZmluYWxvdXRjb21lIikgJT4lCiAgc2V0X2V4cHRfYmF0Y2hlcyhmYWN0PSJ2aXNpdG51bWJlciIpICU+JQogIHN1YnNldF9leHB0KHN1YnNldD0idHlwZW9mY2VsbHMhPSdwYm1jcyciKSAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9InR5cGVvZmNlbGxzIT0nbWFjcm9waGFnZXMnIikgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJjbGluaWNhbHByZXNlbnRhdGlvbiE9J2gnIikKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAiaHNfZXhwdCIpCgojIyBUaGUgZm9sbG93aW5nIHNob3VsZCBtYWtlIHZpc2l0IDEgdGhlIGxhcmdlc3QgaWYgb25lIHVzZXMgdGhhdCBjb2x1bW4gYXMgYSBzaXplIGZhY3RvciB3aGVuIHBsb3R0aW5nLgptZXRhIDwtIHBEYXRhKGhzX2V4cHQpICU+JQogIG11dGF0ZSh2aXNpdG51bWJlciA9IGZjdF9yZWxldmVsKHZpc2l0bnVtYmVyLCBjKCIzIiwgIjIiLCAiMSIpKSkKcERhdGEoaHNfZXhwdCkgPC0gbWV0YQpzYXZlKGxpc3QgPSAiaHNfZXhwdCIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfaHNfZXhwdF9hbGxfc2FuaXRpemVkLXZ7dmVyfS5yZGEiKSkKYGBgCgojIyBBZGQgdGhlIENSRiBwYXRpZW50IG1ldGFkYXRhCgpgYGB7ciBtZXJnZV9jcmZ9CmhzX3BkIDwtIHBEYXRhKGhzX2V4cHQpCnN0YXJ0IDwtIHJvd25hbWVzKGhzX3BkKQpoc19jcmYgPC0gb3Blbnhsc3g6OnJlYWQueGxzeChjcmZfbWV0YWRhdGEpCmhzX2NyZltbImpvaW4iXV0gPC0gdG9sb3dlcihoc19jcmZbWyJjb2RpZ29fcGFjaWVudGUiXV0pCmhzX3BkW1siam9pbiJdXSA8LSBoc19wZFtbInR1YmVsYWJlbG9yaWdpbiJdXQp0ZXN0IDwtIHBseXI6OmpvaW4oaHNfcGQsIGhzX2NyZiwgYnk9ImpvaW4iKQp0ZXN0W1siam9pbiJdXSA8LSBOVUxMCnJvd25hbWVzKHRlc3QpIDwtIHJvd25hbWVzKGhzX3BkKQpuYV9pZHggPC0gaXMubmEodGVzdCkKdGVzdFtuYV9pZHhdIDwtICJ1bmRlZmluZWQiCnBEYXRhKGhzX2V4cHQpIDwtIHRlc3QKCnNhdmUobGlzdCA9ICJoc19leHB0IiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM19oc19leHB0X2FsbF9zYW5pdGl6ZWRfY3JmLXZ7dmVyfS5yZGEiKSkKYGBgCgojIyBTYW5pdHkgY2hlY2ssIGNsaW5pY2FsIG91dGNvbWUgdnMuIENSRiBkYXRhCgpgYGB7ciBjZl9zYW5pdHl9CnR3b19jb2x1bW5zIDwtIHBEYXRhKGhzX2V4cHQpWywgYygiZmluYWxvdXRjb21lIiwgImVmX2xjX2VzdGFkb19maW5hbF9lc3R1ZGlvIildCnVuZGVmX2lkeCA8LSB0d29fY29sdW1uc1tbMl1dID09ICJ1bmRlZmluZWQiCnR3b19jb2x1bW5zIDwtIHR3b19jb2x1bW5zWyF1bmRlZl9pZHgsIF0KdHdvX2NvbHVtbnNbWyJyZXdyaXR0ZW4iXV0gPC0gInVuZGVmIgpjdXJlX2lkeCA8LSB0d29fY29sdW1uc1tbMl1dID09IDAKdHdvX2NvbHVtbnNbY3VyZV9pZHgsICJyZXdyaXR0ZW4iXSA8LSAiY3VyZSIKZmFpbF9pZHggPC0gdHdvX2NvbHVtbnNbWzJdXSA9PSAxCnR3b19jb2x1bW5zW2ZhaWxfaWR4LCAicmV3cml0dGVuIl0gPC0gImZhaWx1cmUiCmxvc3RfaWR4IDwtIHR3b19jb2x1bW5zW1syXV0gPT0gMgp0d29fY29sdW1uc1tsb3N0X2lkeCwgInJld3JpdHRlbiJdIDwtICJsb3N0IgpzYW1lX2lkeCA8LSB0d29fY29sdW1uc1tbImZpbmFsb3V0Y29tZSJdXSA9PSB0d29fY29sdW1uc1tbInJld3JpdHRlbiJdXQpicm9rZW4gPC0gdHdvX2NvbHVtbnNbIXNhbWVfaWR4LCBdCmJyb2tlbgpgYGAKCiMjIFN1bW1hcml6ZTogQ29sbGVjdCBzYW1wbGUgbnVtYmVycyBiZWZvcmUgZmlsdGVyaW5nCgpUaGVyZSBhcmUgc29tZSBtZXRhZGF0YSBmYWN0b3JzIGZvciB3aGljaCBJIHRoaW5rIGl0IHdpbGwgYmUgbmljZSB0bwpzZWUgdGhlIG51bWJlcnMgYmVmb3JlIGFuZCBhZnRlciBvdXIgZmlsdGVycy4gIFRoZSBmb2xsb3dpbmcgc2hvd3MgaG93Cm1hbnkgc2FtcGxlcyB3ZSBoYXZlIG9mIHRoZSBwcmltYXJ5IHR5cGVzIGJlZm9yZSBmaWx0ZXJpbmcuCgpgYGB7ciB0YWJsZV92YWxpZF9wcmV9CmRpbShwRGF0YShoc19leHB0KSkKdGFibGUocERhdGEoaHNfZXhwdCkkZHJ1ZykKdGFibGUocERhdGEoaHNfZXhwdCkkY2xpbmljKQp0YWJsZShwRGF0YShoc19leHB0KSR0eXBlb2ZjZWxscykKdGFibGUocERhdGEoaHNfZXhwdCkkdmlzaXQpCnN1bW1hcnkoYXMubnVtZXJpYyhwRGF0YShoc19leHB0KSRlYl9sY190aWVtcG9fZXZvbHVjaW9uKSkKc3VtbWFyeShhcy5udW1lcmljKHBEYXRhKGhzX2V4cHQpJGViX2xjX3R0b19tY3RvX2dsdWNhbl9kb3NpcykpCnN1bW1hcnkoYXMubnVtZXJpYyhwRGF0YShoc19leHB0KSR2M19sY19lamV5X2xlc2lvbl9tbV8xKSkKc3VtbWFyeShhcy5udW1lcmljKHBEYXRhKGhzX2V4cHQpJHYzX2xjX2xlc2lvbl9hcmVhXzEpKQpzdW1tYXJ5KGFzLm51bWVyaWMocERhdGEoaHNfZXhwdCkkdjNfbGNfZWpleF91bGNlcmFfbW1fMSkpCnRhYmxlKHBEYXRhKGhzX2V4cHQpJGViX2xjX3NleG8pCnRhYmxlKHBEYXRhKGhzX2V4cHQpJGViX2xjX2V0bmlhKQpzdW1tYXJ5KGFzLm51bWVyaWMocERhdGEoaHNfZXhwdCkkZWRhZCkpCnRhYmxlKHBEYXRhKGhzX2V4cHQpJGViX2xjX3Blc28pCnRhYmxlKHBEYXRhKGhzX2V4cHQpJGViX2xjX2VzdGF0dXJhKQp0YWJsZShwRGF0YShoc19leHB0KSRlZl9sY19lc3RhZG9fZmluYWxfZXN0dWRpbykKdGFibGUocERhdGEoaHNfZXhwdCkkZmluYWxvdXRjb21lKQpgYGAKCiMjIERlZmluZSBkZXNpcmVkIGNvbG9ycyBmb3IgdGhlIHZhcmlvdXMgc3Vic2V0cwoKVGhlcmUgYXJlIGxvdHMgb2Ygd2F5cyB3aGljaCB3ZSB3aWxsIGNhdGVnb3JpemUgdGhlIGRhdGEsIGhlcmUgYXJlCnNvbWUgcG90ZW50aWFsIGNvbG9yIGNob2ljZXMgZm9yIHRoZW0uCgpgYGB7ciBjb2xvcl9jaG9pY2VzfQpjb2xvcl9jaG9pY2VzIDwtIGxpc3QoCiAgICAiY2YiID0gbGlzdCgKICAgICAgICAiY3VyZSIgPSAiIzk5OEVDMyIsCiAgICAgICAgImZhaWx1cmUiID0gIiNGMUEzNDAiKSwKICAgICJ0eXBlX3Zpc2l0IiA9IGxpc3QoCiAgICAgICAgIm1vbm9jeXRlc192MSIgPSAiI0REMUM3NyIsCiAgICAgICAgIm1vbm9jeXRlc192MiIgPSAiI0M5OTRDNyIsCiAgICAgICAgIm1vbm9jeXRlc192MyIgPSAiI0U3RTFFRiIsCiAgICAgICAgImVvc2lub3BoaWxzX3YxIiA9ICIjMzFBMzU0IiwKICAgICAgICAiZW9zaW5vcGhpbHNfdjIiID0gIiNBREREOEUiLAogICAgICAgICJlb3Npbm9waGlsc192MyIgPSAiI0Y3RkNEOSIsCiAgICAgICAgIm5ldXRyb3BoaWxzX3YxIiA9ICIjMzE4MkJEIiwKICAgICAgICAibmV1dHJvcGhpbHNfdjIiID0gIiM5RUNBRTEiLAogICAgICAgICJuZXV0cm9waGlsc192MyIgPSAiI0RFRUJGNyIsCiAgICAgICAgImJpb3BzeV92MSIgPSAiI0Q5NUYwRSIpLAogICAgInR5cGUiID0gbGlzdCgKICAgICAgICAibW9ub2N5dGVzIiA9ICIjREQxQzc3IiwKICAgICAgICAiZW9zaW5vcGhpbHMiID0gIiMzMUEzNTQiLAogICAgICAgICJuZXV0cm9waGlscyIgPSAiIzMxODJCRCIsCiAgICAgICAgImJpb3BzeSIgPSAiI0Q5NUYwRSIpLAogICAgInZpc2l0IiA9IGxpc3QoCiAgICAgICAgIyMgVHVybnMgb3V0IHdlIG5ldmVyIGRlY2lkZWQgb24gdmlzaXQtc3BlY2lmaWMgY29sb3JzLi4uCiAgICAgICAgInYxIiA9ICIjREQwMDAwIiwKICAgICAgICAidjIiID0gIiMwMEREMDAiLAogICAgICAgICJ2MyIgPSAiIzAwMDBERCIpLAogICAgImNmX3R5cGUiIDwtIGxpc3QoCiAgICAgICAgY3VyZV9iaW9wc3kgPSAiI0Q5NUYwRSIsCiAgICAgICAgZmFpbHVyZV9iaW9wc3kgPSAiI0ZFQzQ0RiIsCiAgICAgICAgY3VyZV9tb25vY3l0ZXMgPSAiI0REMUM3NyIsCiAgICAgICAgZmFpbHVyZV9tb25vY3l0ZXMgPSAiI0M5OTRDNyIsCiAgICAgICAgY3VyZV9lb3Npbm9waGlscyA9ICIjMzFBMzU0IiwKICAgICAgICBmYWlsdXJlX2Vvc2lub3BoaWxzID0gIiNBREREOEUiLAogICAgICAgIGN1cmVfbmV1dHJvcGhpbHMgPSAiIzMxODJCRCIsCiAgICAgICAgZmFpbHVyZV9uZXV0cm9waGlscyA9ICIjOUVDQUUxIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgImNvbG9yX2Nob2ljZXMiKQpgYGAKCiMgRGVmaW5lIHRoZSBzdGFydGluZyBkYXRhCgojIyBTZXQgb3VyIGluaXRpYWwgY292ZXJhZ2UgZ29hbAoKIyMgRmlndXJlIFhYOiBOb24temVybyBnZW5lcyBiZWZvcmUgc2FtcGxlIGZpbHRlcmluZwoKYGBge3IgaHNfcHJlX256fQphbGxfbnogPC0gcGxvdF9ub256ZXJvKGhzX2V4cHQpCmFsbF9ueiRwbG90CmBgYAoKIyMgU3Vic2V0OiBGaWx0ZXIgb3V0IHByb2JsZW1hdGljIHNhbXBsZXMKClRvIG15IGV5ZXMsIHRoZXJlIGFyZSAzIG9yIDQgc2FtcGxlcyB3aGljaCBhcmUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yCnJlbW92YWwuICBJbiBhZGRpdGlvbiwgd2Ugd2lsbCByZW1vdmUgc2FtcGxlcyB3aGljaCB3ZXJlIGxvc3QgZHVyaW5nCnRoZSB0cmVhdG1lbnQgYW5kL29yIG9uZXMgd2hpY2ggd2VyZSB1c2VkIGluIG90aGVyIGV4cGVyaW1lbnRzIGJ1dAppbmNsdWRlZCBpbiB0aGUgVE1SQzMgc2FtcGxlIHNoZWV0ICh0aHVzIHRoZSAnbm90YXBwbGljYWJsZScgb3IKJ251bGwnKS4KCk5PVEU6IEkgY2hhbmdlZCB0aGUgcHJlZml4IG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgdG8gcmVmbGVjdCB0aGUKY2xpbmljKHMpIGZyb20gd2hpY2ggdGhleSB3ZXJlIGFjcXVpcmVkLiBUaGlzIHdpbGwgbGlrZWx5IGJlIGEgcHJvYmxlbQp1bnRpbCBJIGNhcmVmdWxseSBzdGVwIHRocm91Z2ggdGhlIGZpbGU7IGJ1dCB3aWxsIG1ha2Ugc3VyZSBJIGRvIG5vdAphY2NpZGVudGx5IHVwbG9hZCBkYXRhIHdpdGggdGhlIENhbGkgc2FtcGxlcy4KCmBgYHtyIHRjX3ZhbGlkfQp0Y192YWxpZCA8LSBzdWJzZXRfZXhwdChoc19leHB0LCBub256ZXJvPTExMDAwKSAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9ImZpbmFsb3V0Y29tZSE9J2xvc3QnIikgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJkcnVnPT0nYW50aW1vbnknIikgJT4lCiAgc2V0X2V4cHRfY29sb3JzKGNvbG9yX2Nob2ljZXNbWyJjZiJdXSkKc2F2ZShsaXN0ID0gInRjX3ZhbGlkIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190Y192YWxpZC12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjX3ZhbGlkIikKYGBgCgojIyBGaWd1cmUgWFggKyAxOiBOb24temVybyBnZW5lcyBhZnRlciBzYW1wbGUgZmlsdGVyaW5nCgpUaGUgZm9sbG93aW5nIHBsb3QgaXMgZXNzZW50aWFsbHkgaWRlbnRpY2FsIHRvIHRoZSBwcmV2aW91cyB3aXRoIHR3bwpleGNlcHRpb25zOgoKMS4gIFRoZSBzYW1wbGVzIHdpdGggdG9vIGZldyBnZW5lcyAoMTEsMDAwIGN1cnJlbnRseSkgYXJlIGdvbmUuCjIuICBUaGUgc2FtcGxlcyBhcmUgY29sb3JlZCBieSBjdXJlKHB1cnBsZSkvZmFpbCh5ZWxsb3cpCgpgYGB7ciBuel9wb3N0fQpuel9wb3N0IDwtIHBsb3Rfbm9uemVybyh0Y192YWxpZCkKbnpfcG9zdCRwbG90CmBgYAoKIyMgU3VtbWFyaXplOiBUYWxseSBzYW1wbGVzIGFmdGVyIGZpbHRlcmluZwoKV2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IG9mIGVhY2ggc2FtcGxlIHR5cGUgaXMgbG9zdCB3aGVuIHdlCmRvIG91ciB2YXJpb3VzIGZpbHRlcnMuICBUaHVzIEkgYW0gcmVwZWF0aW5nIHRoZSBzYW1lIHNldCBvZiB0YWxsaWVzLgpUaGlzIHdpbGwgbGlrZWx5IGhhcHBlbiBvbmUgbW9yZSB0aW1lLCBmb2xsb3dpbmcgdGhlIHJlbW92YWwgb2YKc2FtcGxlcyB3aGljaCBjYW1lIGZyb20gQ2FsaS4KCmBgYHtyIHRhYmxlX3ZhbGlkfQp0YWJsZShwRGF0YSh0Y192YWxpZCkkZHJ1ZykKdGFibGUocERhdGEodGNfdmFsaWQpJGNsaW5pYykKdGFibGUocERhdGEodGNfdmFsaWQpJGZpbmFsb3V0Y29tZSkKdGFibGUocERhdGEodGNfdmFsaWQpJHR5cGVvZmNlbGxzKQp0YWJsZShwRGF0YSh0Y192YWxpZCkkdmlzaXQpCnN1bW1hcnkoYXMubnVtZXJpYyhwRGF0YSh0Y192YWxpZCkkZWJfbGNfdGllbXBvX2V2b2x1Y2lvbikpCnN1bW1hcnkoYXMubnVtZXJpYyhwRGF0YSh0Y192YWxpZCkkZWJfbGNfdHRvX21jdG9fZ2x1Y2FuX2Rvc2lzKSkKc3VtbWFyeShhcy5udW1lcmljKHBEYXRhKHRjX3ZhbGlkKSR2M19sY19lamV5X2xlc2lvbl9tbV8xKSkKc3VtbWFyeShhcy5udW1lcmljKHBEYXRhKHRjX3ZhbGlkKSR2M19sY19sZXNpb25fYXJlYV8xKSkKc3VtbWFyeShhcy5udW1lcmljKHBEYXRhKHRjX3ZhbGlkKSR2M19sY19lamV4X3VsY2VyYV9tbV8xKSkKdGFibGUocERhdGEodGNfdmFsaWQpJGViX2xjX3NleG8pCnRhYmxlKHBEYXRhKHRjX3ZhbGlkKSRlYl9sY19ldG5pYSkKc3VtbWFyeShhcy5udW1lcmljKHBEYXRhKHRjX3ZhbGlkKSRlZGFkKSkKdGFibGUocERhdGEodGNfdmFsaWQpJGViX2xjX3Blc28pCnRhYmxlKHBEYXRhKHRjX3ZhbGlkKSRlYl9sY19lc3RhdHVyYSkKCmxlbmd0aCh1bmlxdWUocERhdGEodGNfdmFsaWQpW1siY29kaWdvX3BhY2llbnRlIl1dKSkKYGBgCgojIFN1YnNldDogU2VwYXJhdGUgc2FtcGxlcyBieSBjZWxsIHR5cGUgYW5kIHZpc2l0CgpgYGB7ciBpbml0aWFsX3N1YnNldHN9CmFsbF90eXBlcyA8LSB0YWJsZShwRGF0YSh0Y192YWxpZClbWyJ0eXBlb2ZjZWxscyJdXSkKYWxsX3R5cGVzCmFsbF90aW1lcyA8LSB0YWJsZShwRGF0YSh0Y192YWxpZClbWyJ2aXNpdG51bWJlciJdXSkKYWxsX3RpbWVzCgojIyBOb3RlLCBJIHdpbGwgc2F2ZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgaW4gYSBsaXR0bGUgYml0IHdoZW4gSSBkZWNpZGUgaG93IEkgd2FudAojIyB0byBzZXQgdGhlIGNvbmRpdGlvbnMsIGJhdGNoZXMsIGFuZCBjb2xvcnMuCnRjX2Vvc2lub3BoaWxzIDwtIHN1YnNldF9leHB0KHRjX3ZhbGlkLCBzdWJzZXQ9InR5cGVvZmNlbGxzPT0nZW9zaW5vcGhpbHMnIikKdGNfbW9ub2N5dGVzIDwtIHN1YnNldF9leHB0KHRjX3ZhbGlkLCBzdWJzZXQ9InR5cGVvZmNlbGxzPT0nbW9ub2N5dGVzJyIpCnRjX25ldXRyb3BoaWxzIDwtIHN1YnNldF9leHB0KHRjX3ZhbGlkLCBzdWJzZXQ9InR5cGVvZmNlbGxzPT0nbmV1dHJvcGhpbHMnIikKCiMjIEN1cnJlbnRseSwgdGhlc2UgYXJlIG5vdCB1c2VkLCBidXQgaW5zdGVhZCBJIHB1bGxlZCB0aGUgc2FtcGxlcyBmcm9tIHRoZSBoc19jbGluaWNhbAojIyB3aGljaCBtZWFucyB0aGUgYmlvcHNpZXMgYXJlIG5vdCBpbmNsdWRlZC4KdGN2MV9zYW1wbGVzIDwtIHN1YnNldF9leHB0KHRjX3ZhbGlkLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMSciKQpzYXZlKGxpc3QgPSAidGN2MV9zYW1wbGVzIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190Y3YxX3NhbXBsZXMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0Y3YxX3NhbXBsZXMiKQoKdGN2Ml9zYW1wbGVzIDwtIHN1YnNldF9leHB0KHRjX3ZhbGlkLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMiciKQpzYXZlKGxpc3QgPSAidGN2Ml9zYW1wbGVzIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190Y3YyX3NhbXBsZXMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0Y3YyX3NhbXBsZXMiKQoKdGN2M19zYW1wbGVzIDwtIHN1YnNldF9leHB0KHRjX3ZhbGlkLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMyciKQpzYXZlKGxpc3QgPSAidGN2M19zYW1wbGVzIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190Y3YzX3NhbXBsZXMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0Y3YzX3NhbXBsZXMiKQpgYGAKCiMgRGF0YXNldDogUGFyYXNpdGUgcmVhZHMKCk1ha2UgYW4gZXhwcmVzc2lvbnNldCBvZiB0aGUgcGFyYXNpdGUgcmVhZHMgaW4gdGhlIFRNUkMzIHNhbXBsZXMgYW5kCmRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGZhdXggYW5kIHJlYWwgcmVhZHMuCkUuZzogQXJlIHRoZXJlIHNhbXBsZXMgd2hpY2ggZGVmaW5pdGl2ZWx5IGNvbnRhaW4gcGFyYXNpdGVzPwoKTGF0ZXIsIEkgbWFudWFsbHkgd2VudCB0aHJvdWdoIHRoZSBtYXBwaW5ncyBvZiBzYW1wbGVzIHdpdGggYQpzaWduaWZpY2FudCBudW1iZXIgb2YgcGFyYXNpdGUgcmVhZHMgaW4gSUdWIHdpdGggc29tZSBUTVJDMiBrbm93bgp6eW1vZGVtZSBzYW1wbGVzLiAgSW4gbWFueSBjYXNlcyBpdCBpcyBwb3NzaWJsZSB0byBzdGF0ZSBkZWZpbml0aXZlbHkKdGhlIGNsYXNzaWZpY2F0aW9uIG9mIHRoZSBwYXJhc2l0ZSB3aGljaCBpbmZlY3RlZCBhbiBpbmRpdmlkdWFsLgoKYGBge3IgcGFyYXNpdGVfZXhwdH0KbHBfZXhwdCA8LSBjcmVhdGVfZXhwdCgKICAgIHNhbXBsZXNoZWV0LAogICAgZmlsZV9jb2x1bW49ImxwYW5hbWVuc2lzdjM2aGlzYXRmaWxlIiwgZ2VuZV9pbmZvID0gTlVMTCkgJT4lCiAgc3Vic2V0X2V4cHQoY292ZXJhZ2U9MTAwMCkgJT4lCiAgc2V0X2V4cHRfY29uZGl0aW9ucyhmYWN0PSJ0eXBlb2ZjZWxscyIpCnZpc2l0X2ZhY3QgPC0gcERhdGEobHBfZXhwdClbWyJ2aXNpdG51bWJlciJdXQpiYXRjaF9uYSA8LSBpcy5uYSh2aXNpdF9mYWN0KQp2aXNpdF9mYWN0W2JhdGNoX25hXSA8LSAidW5kZWZpbmVkIgpscF9leHB0IDwtIHNldF9leHB0X2JhdGNoZXMobHBfZXhwdCwgZmFjdCA9IHZpc2l0X2ZhY3QpCnNhdmUobGlzdCA9ICJscF9leHB0IiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM19scF9leHB0X2FsbF9zYW5pdGl6ZWQtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJscF9leHB0IikKYGBgCgpUaGUgYWJvdmUgYmxvY2sgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIHRoZSBwcmV2aW91cyBleHByZXNzaW9uc2V0CmNyZWF0aW9uLiAgSXQgdXNlcyBhIGRpZmZlcmVudCBjb2x1bW4gYW5kIGN1cnJlbnRseSBpZ25vcmVzIHRoZSBnZW5lCmFubm90YXRpb25zLiAgR2l2ZW4gdGhhdCBtYW55IG9mIHRoZSBzYW1wbGVzIGhhdmUgZXNzZW50aWFsbHkgMCByZWFkcywKSSBzZXQgYSBjdXRvZmYgb2Ygb25seSAyMCBvYnNlcnZlZCBnZW5lcy4gIEZpbmFsbHksIEkgZGlkIGEgcXVpY2sgYW5kCmRpcnR5IFBDQSBwbG90IG9mIHRoaXMgcGVjdWxpYXIgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlIGhvcGVzIG9mIGJlaW5nCmFibGUgdG8gJ3NlZScgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3aGF0IGFyZSBhc3N1bWVkIHRvIGJlICdyZWFsJwpzYW1wbGVzIHdpdGggYSBzaWduaWZpY2FudCBudW1iZXIgb2YgJ3JlYWwnIHBhcmFzaXRlIHJlYWRzIHZzLiB0aG9zZQpzYW1wbGVzIHdoaWNoIGp1c3QgaGF2ZSBhIGNvdXBsZSBvZiBwb3RlbnRpYWxseSBzcHVyaW91cyByZWFkcy4KCiMgSG9zdCBEaXN0cmlidXRpb25zL1Zpc3VhbGl6YXRpb25zIG9mIGludGVyZXN0CgpUaGUgc2V0cyBvZiBzYW1wbGVzIHVzZWQgdG8gdmlzdWFsaXplIHRoZSBkYXRhIHdpbGwgYWxzbyBjb21wcmlzZSB0aGUKc2V0cyB1c2VkIHdoZW4gbGF0ZXIgcGVyZm9ybWluZyB0aGUgdmFyaW91cyBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbgphbmFseXNlcy4KCmBgYHtyIGNsaW5pY2FsX2hzfQp0Y19jbGluaWNhbCA8LSB0Y192YWxpZCAlPiUKICBzZXRfZXhwdF9jb25kaXRpb25zKGZhY3Q9ImZpbmFsb3V0Y29tZSIpICU+JQogIHNldF9leHB0X2JhdGNoZXMoZmFjdD0idHlwZW9mY2VsbHMiKSAlPiUKICBzZXRfZXhwdF9jb2xvcnMoY29sb3JfY2hvaWNlc1tbImNmIl1dKQpzYXZlKGxpc3QgPSAidGNfY2xpbmljYWwiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RjX2NsaW5pY2FsLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidGNfY2xpbmljYWwiKQoKdGNfY2xpbmljYWxfbm9iaW9wIDwtIHN1YnNldF9leHB0KHRjX2NsaW5pY2FsLCBzdWJzZXQ9InR5cGVvZmNlbGxzIT0nYmlvcHN5JyIpCnNhdmUobGlzdCA9ICJ0Y19jbGluaWNhbF9ub2Jpb3AiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RjX2NsaW5pY2FsX25vYmlvcC12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjX2NsaW5pY2FsX25vYmlvcCIpCgp0Y19iaW9wc2llcyA8LSB0Y192YWxpZCAlPiUKICBzZXRfZXhwdF9jb25kaXRpb25zKGZhY3Q9ImNsaW5pYyIpICU+JQogIHNldF9leHB0X2JhdGNoZXMoZmFjdD0iZmluYWxvdXRjb21lIikgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJ0eXBlb2ZjZWxscz09J2Jpb3BzeSciKQp0Y19jZiA8LSBwYXN0ZTAocERhdGEodGNfYmlvcHNpZXMpW1siY2xpbmljIl1dLCAiXyIsCiAgICAgICAgICAgICAgICBwRGF0YSh0Y19iaW9wc2llcylbWyJmaW5hbG91dGNvbWUiXV0pCnRhYmxlKHRjX2NmKQp0Y19iaW9wc2llcyA8LSBzZXRfZXhwdF9jb25kaXRpb25zKHRjX2Jpb3BzaWVzLCBmYWN0PXRjX2NmKSAlPiUKICBzZXRfZXhwdF9iYXRjaGVzKGZhY3Q9InZpc2l0bnVtYmVyIikKc2F2ZShsaXN0ID0gInRjX2Jpb3BzaWVzIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190Y19iaW9wc2llcy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjX2Jpb3BzaWVzIikKYGBgCgojIyBTdWJzZXQ6IEVvc2lub3BoaWxzIGJ5IGNsaW5pYwoKSW4gY29udHJhc3QsIHRoZSBFb3Npbm9waGlsIHNhbXBsZXMgZG8gaGF2ZSBzaWduaWZpY2FudCBhbW91bnRzIG9mCnZhcmlhbmNlIHdoaWNoIGRpc2NyaW1pbmF0ZXMgdGhlIHR3byBjbGluaWNzLiAgQXQgdGhlIHRpbWUgb2YgdGhpcwp3cml0aW5nLCB0aGVyZSBhcmUgZmV3ZXIgZW9zaW5vcGhpbCBzYW1wbGVzIHRoYW4gbW9ub2N5dGVzIG5vcgpuZXV0cm9waGlsczsgYXMgYSByZXN1bHQgdGhlcmUgYXJlIG5vIHNhbXBsZXMgd2hpY2ggZmFpbGVkIGZyb20gQ2FsaS4KVGhpcyBpcyBzb21ld2hhdCBsaW1pdGluZyBpcyB3ZSB3aXNoIHRvIGxvb2sgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4KdGhlIGN1cmUgYW5kIGZhaWwgc2FtcGxlcyB3aGljaCBjYW1lIGZyb20gdGhlIHR3byBjbGluaWNzLgoKYGBge3IgY2xpbmljX2Vvc2lub3BoaWxfcGNhfQpjbGluaWNfY2YgPC0gcGFzdGUwKHBEYXRhKHRjX2Vvc2lub3BoaWxzKVtbImNsaW5pYyJdXSwgIl8iLAogICAgICAgICAgICAgICAgICAgIHBEYXRhKHRjX2Vvc2lub3BoaWxzKVtbImZpbmFsb3V0Y29tZSJdXSkKdGFibGUoY2xpbmljX2NmKQp0Y19lb3Npbm9waGlscyA8LSBzZXRfZXhwdF9jb25kaXRpb25zKHRjX2Vvc2lub3BoaWxzLCBmYWN0PWNsaW5pY19jZikgJT4lCiAgc2V0X2V4cHRfYmF0Y2hlcyhmYWN0PSJ2aXNpdG51bWJlciIpCnNhdmUobGlzdCA9ICJ0Y19lb3Npbm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGNfZW9zaW5vcGhpbHMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0Y19lb3Npbm9waGlscyIpCgp0Y3YxX2Vvc2lub3BoaWxzIDwtIHN1YnNldF9leHB0KHRjX2Vvc2lub3BoaWxzLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMSciKQpzYXZlKGxpc3QgPSAidGN2MV9lb3Npbm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGN2MV9lb3Npbm9waGlscy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjdjFfZW9zaW5vcGhpbHMiKQp0Y3YyX2Vvc2lub3BoaWxzIDwtIHN1YnNldF9leHB0KHRjX2Vvc2lub3BoaWxzLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMiciKQpzYXZlKGxpc3QgPSAidGN2Ml9lb3Npbm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGN2Ml9lb3Npbm9waGlscy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjdjJfZW9zaW5vcGhpbHMiKQp0Y3YzX2Vvc2lub3BoaWxzIDwtIHN1YnNldF9leHB0KHRjX2Vvc2lub3BoaWxzLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMyciKQpzYXZlKGxpc3QgPSAidGN2M19lb3Npbm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGN2M19lb3Npbm9waGlscy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjdjNfZW9zaW5vcGhpbHMiKQpgYGAKCiMjIFN1YnNldDogTW9ub2N5dGVzIGJ5IGNsaW5pYwoKSW4gY29udHJhc3Qgd2l0aCB0aGUgZW9zaW5vcGhpbCBzYW1wbGVzLCB3ZSBoYXZlIG9uZSBwYXRpZW50J3MKbW9ub2N5dGUgYW5kIG5ldXRyb3BoaWwgc2FtcGxlcyB3aGljaCBkaWQgbm90IGN1cmUuICBBcyB3ZSB3aWxsIHNlZSwKdGhlcmUgaXMgb25lIHBlcnNvbiBmcm9tIENhbGkgd2hvIGRpZCBub3QgY3VyZSwgdGhpcyBwZXJzb24gaXMgbm90CmRpZmZlcmVudCB3aXRoIHJlc3BlY3QgdG8gdHJhY3NjcmlwdG9tZSB0aGFuIHRoZSBvdGhlciBwZW9wbGUgZnJvbSBDYWxpLgoKYGBge3IgY2xpbmljX21vbm9jeXRlX3BjYX0KY2xpbmljX2NmIDwtIHBhc3RlMChwRGF0YSh0Y19tb25vY3l0ZXMpW1siY2xpbmljIl1dLCAiXyIsCiAgICAgICAgICAgICAgICAgICAgcERhdGEodGNfbW9ub2N5dGVzKVtbImZpbmFsb3V0Y29tZSJdXSkKdGFibGUoY2xpbmljX2NmKQp0Y19tb25vY3l0ZXMgPC0gc2V0X2V4cHRfY29uZGl0aW9ucyh0Y19tb25vY3l0ZXMsIGZhY3Q9Y2xpbmljX2NmKSAlPiUKICBzZXRfZXhwdF9iYXRjaGVzKGZhY3Q9InZpc2l0bnVtYmVyIikKc2F2ZShsaXN0ID0gInRjX21vbm9jeXRlcyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGNfbW9ub2N5dGVzLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidGNfbW9ub2N5dGVzIikKCnRjdjFfbW9ub2N5dGVzIDwtIHN1YnNldF9leHB0KHRjX21vbm9jeXRlcywgc3Vic2V0PSJ2aXNpdG51bWJlcj09JzEnIikKc2F2ZShsaXN0ID0gInRjdjFfbW9ub2N5dGVzIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190Y3YxX21vbm9jeXRlcy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjdjFfbW9ub2N5dGVzIikKdGN2Ml9tb25vY3l0ZXMgPC0gc3Vic2V0X2V4cHQodGNfbW9ub2N5dGVzLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMiciKQpzYXZlKGxpc3QgPSAidGN2Ml9tb25vY3l0ZXMiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RjdjJfbW9ub2N5dGVzLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidGN2Ml9tb25vY3l0ZXMiKQp0Y3YzX21vbm9jeXRlcyA8LSBzdWJzZXRfZXhwdCh0Y19tb25vY3l0ZXMsIHN1YnNldD0idmlzaXRudW1iZXI9PSczJyIpCnNhdmUobGlzdCA9ICJ0Y3YzX21vbm9jeXRlcyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGN2M19tb25vY3l0ZXMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0Y3YzX21vbm9jeXRlcyIpCmBgYAoKIyMgU3Vic2V0OiBOZXV0cm9waGlscyBieSBjbGluaWMKCkZpbmFsbHksIHRoYXQgc2FtZSBvbmUgcGVyc29uIGRvZXMgYXBwZWFyIHRvIGJlIGRpZmZlcmVudCB0aGFuIHRoZQpvdGhlcnMgZnJvbSBDYWxpLgoKYGBge3IgY2xpbmljX25ldXRyb3BoaWxfcGNhfQpjbGluaWNfY2YgPC0gcGFzdGUwKHBEYXRhKHRjX25ldXRyb3BoaWxzKVtbImNsaW5pYyJdXSwgIl8iLAogICAgICAgICAgICAgICAgICAgIHBEYXRhKHRjX25ldXRyb3BoaWxzKVtbImZpbmFsb3V0Y29tZSJdXSkKdGFibGUoY2xpbmljX2NmKQp0Y19uZXV0cm9waGlscyA8LSBzZXRfZXhwdF9jb25kaXRpb25zKHRjX25ldXRyb3BoaWxzLCBmYWN0PWNsaW5pY19jZikgJT4lCiAgc2V0X2V4cHRfYmF0Y2hlcyhmYWN0PSJ2aXNpdG51bWJlciIpCnNhdmUobGlzdCA9ICJ0Y19uZXV0cm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGNfbmV1dHJvcGhpbHMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0Y19uZXV0cm9waGlscyIpCgp0Y3YxX25ldXRyb3BoaWxzIDwtIHN1YnNldF9leHB0KHRjX25ldXRyb3BoaWxzLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMSciKQpzYXZlKGxpc3QgPSAidGN2MV9uZXV0cm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGN2MV9uZXV0cm9waGlscy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjdjFfbmV1dHJvcGhpbHMiKQp0Y3YyX25ldXRyb3BoaWxzIDwtIHN1YnNldF9leHB0KHRjX25ldXRyb3BoaWxzLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMiciKQpzYXZlKGxpc3QgPSAidGN2Ml9uZXV0cm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGN2Ml9uZXV0cm9waGlscy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjdjJfbmV1dHJvcGhpbHMiKQp0Y3YzX25ldXRyb3BoaWxzIDwtIHN1YnNldF9leHB0KHRjX25ldXRyb3BoaWxzLCBzdWJzZXQ9InZpc2l0bnVtYmVyPT0nMyciKQpzYXZlKGxpc3QgPSAidGN2M19uZXV0cm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdGN2M19uZXV0cm9waGlscy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRjdjNfbmV1dHJvcGhpbHMiKQpgYGAKCiMgU3VtbWFyaXplOiBUYWJ1bGF0ZSBzYW1wbGUgbnVtYmVycwoKSGVyZSBpcyBhbiBvdXRsaW5lIG9mIHRoZSBzYW1wbGVzIGluIHRoZWlyIGN1cnJlbnQgc3RhdGU6CgoqIEJ5IHR5cGU6IGBuY29sKGV4cHJzKHRjX3ZhbGlkKSlgLCBDdXJlOiBgc3VtKHBEYXRhKHRjX3ZhbGlkKVtbImZpbmFsb3V0Y29tZSJdXSA9PSAiY3VyZSIpYCwgRmFpbDogYHN1bShwRGF0YSh0Y192YWxpZClbWyJmaW5hbG91dGNvbWUiXV0gPT0gImZhaWx1cmUiKWAKICAgICogIEJpb3BzeTogYGFsbF90eXBlc1tbImJpb3BzeSJdXWAsIEN1cmU6IGBzdW0ocERhdGEodGNfYmlvcHNpZXMpW1siZmluYWxvdXRjb21lIl1dID09ICJjdXJlIilgLCBGYWlsOiBgc3VtKHBEYXRhKHRjX2Jpb3BzaWVzKVtbImZpbmFsb3V0Y29tZSJdXSA9PSAiZmFpbHVyZSIpYAogICAgICAgICogQWxsIGJpb3BzeSBzYW1wbGVzIGFyZSB2aXNpdCAxLgogICAgKiAgRW9zaW5vcGhpbHM6IGBhbGxfdHlwZXNbWyJlb3Npbm9waGlscyJdXWAsIEN1cmU6IGBzdW0ocERhdGEodGNfZW9zaW5vcGhpbHMpW1siZmluYWxvdXRjb21lIl1dID09ICJjdXJlIilgLCBGYWlsOiBgc3VtKHBEYXRhKHRjX2Vvc2lub3BoaWxzKVtbImZpbmFsb3V0Y29tZSJdXSA9PSAiZmFpbHVyZSIpYAogICAgICAgICogVjEgRW9zaW5vcGhpbHM6IGBucm93KHBEYXRhKHRjdjFfZW9zaW5vcGhpbHMpKWAsIEN1cmU6IGBzdW0ocERhdGEodGN2MV9lb3Npbm9waGlscylbWyJmaW5hbG91dGNvbWUiXV0gPT0gImN1cmUiKWAsIEZhaWw6IGBzdW0ocERhdGEodGN2MV9lb3Npbm9waGlscylbWyJmaW5hbG91dGNvbWUiXV0gPT0gImZhaWx1cmUiKWAKICAgICAgICAqIFYyIEVvc2lub3BoaWxzOiBgbnJvdyhwRGF0YSh0Y3YyX2Vvc2lub3BoaWxzKSlgLCBDdXJlOiBgc3VtKHBEYXRhKHRjdjJfZW9zaW5vcGhpbHMpW1siZmluYWxvdXRjb21lIl1dID09ICJjdXJlIilgLCBGYWlsOiBgc3VtKHBEYXRhKHRjdjJfZW9zaW5vcGhpbHMpW1siZmluYWxvdXRjb21lIl1dID09ICJmYWlsdXJlIilgCiAgICAgICAgKiBWMyBFb3Npbm9waGlsczogYG5yb3cocERhdGEodGN2M19lb3Npbm9waGlscykpYCwgQ3VyZTogYHN1bShwRGF0YSh0Y3YzX2Vvc2lub3BoaWxzKVtbImZpbmFsb3V0Y29tZSJdXSA9PSAiY3VyZSIpYCwgRmFpbDogYHN1bShwRGF0YSh0Y3YzX2Vvc2lub3BoaWxzKVtbImZpbmFsb3V0Y29tZSJdXSA9PSAiZmFpbHVyZSIpYAogICAgKiAgTW9ub2N5dGVzOiBgYWxsX3R5cGVzW1sibW9ub2N5dGVzIl1dYCwgQ3VyZTogYHN1bShwRGF0YSh0Y19tb25vY3l0ZXMpW1siZmluYWxvdXRjb21lIl1dID09ICJjdXJlIilgLCBGYWlsOiBgc3VtKHBEYXRhKHRjX21vbm9jeXRlcylbWyJmaW5hbG91dGNvbWUiXV0gPT0gImZhaWx1cmUiKWAKICAgICAgICAqIFYxIE1vbm9jeXRlczogYG5yb3cocERhdGEodGN2MV9tb25vY3l0ZXMpKWAsIEN1cmU6IGBzdW0ocERhdGEodGN2MV9tb25vY3l0ZXMpW1siZmluYWxvdXRjb21lIl1dID09ICJjdXJlIilgLCBGYWlsOiBgc3VtKHBEYXRhKHRjdjFfbW9ub2N5dGVzKVtbImZpbmFsb3V0Y29tZSJdXSA9PSAiZmFpbHVyZSIpYAogICAgICAgICogVjIgTW9ub2N5dGVzOiBgbnJvdyhwRGF0YSh0Y3YyX21vbm9jeXRlcykpYCwgQ3VyZTogYHN1bShwRGF0YSh0Y3YyX21vbm9jeXRlcylbWyJmaW5hbG91dGNvbWUiXV0gPT0gImN1cmUiKWAsIEZhaWw6IGBzdW0ocERhdGEodGN2Ml9tb25vY3l0ZXMpW1siZmluYWxvdXRjb21lIl1dID09ICJmYWlsdXJlIilgCiAgICAgICAgKiBWMyBNb25vY3l0ZXM6IGBucm93KHBEYXRhKHRjdjNfbW9ub2N5dGVzKSlgLCBDdXJlOiBgc3VtKHBEYXRhKHRjdjNfbW9ub2N5dGVzKVtbImZpbmFsb3V0Y29tZSJdXSA9PSAiY3VyZSIpYCwgRmFpbDogYHN1bShwRGF0YSh0Y3YzX21vbm9jeXRlcylbWyJmaW5hbG91dGNvbWUiXV0gPT0gImZhaWx1cmUiKWAKICAgICogIE5ldXRyb3BoaWxzOiBgYWxsX3R5cGVzW1sibmV1dHJvcGhpbHMiXV1gLCBDdXJlOiBgc3VtKHBEYXRhKHRjX25ldXRyb3BoaWxzKVtbImZpbmFsb3V0Y29tZSJdXSA9PSAiY3VyZSIpYCwgRmFpbDogYHN1bShwRGF0YSh0Y19uZXV0cm9waGlscylbWyJmaW5hbG91dGNvbWUiXV0gPT0gImZhaWx1cmUiKWAKICAgICAgICAqIFYxIE5ldXRyb3BoaWxzOiBgbnJvdyhwRGF0YSh0Y3YxX25ldXRyb3BoaWxzKSlgLCBDdXJlOiBgc3VtKHBEYXRhKHRjdjFfbmV1dHJvcGhpbHMpW1siZmluYWxvdXRjb21lIl1dID09ICJjdXJlIilgLCBGYWlsOiBgc3VtKHBEYXRhKHRjdjFfbmV1dHJvcGhpbHMpW1siZmluYWxvdXRjb21lIl1dID09ICJmYWlsdXJlIilgCiAgICAgICAgKiBWMiBOZXV0cm9waGlsczogYG5yb3cocERhdGEodGN2Ml9tb25vY3l0ZXMpKWAsIEN1cmU6IGBzdW0ocERhdGEodGN2Ml9uZXV0cm9waGlscylbWyJmaW5hbG91dGNvbWUiXV0gPT0gImN1cmUiKWAsIEZhaWw6IGBzdW0ocERhdGEodGN2Ml9uZXV0cm9waGlscylbWyJmaW5hbG91dGNvbWUiXV0gPT0gImZhaWx1cmUiKWAKICAgICAgICAqIFYzIE5ldXRyb3BoaWxzOiBgbnJvdyhwRGF0YSh0Y3YzX25ldXRyb3BoaWxzKSlgLCBDdXJlOiBgc3VtKHBEYXRhKHRjdjNfbmV1dHJvcGhpbHMpW1siZmluYWxvdXRjb21lIl1dID09ICJjdXJlIilgLCBGYWlsOiBgc3VtKHBEYXRhKHRjdjNfbmV1dHJvcGhpbHMpW1siZmluYWxvdXRjb21lIl1dID09ICJmYWlsdXJlIilgCgojIERhdGFzZXQ6IE9ubHkgVHVtYWNvIHNhbXBsZXMKCk91ciByZWNlbnQgZGlzY3Vzc2lvbnMgaGF2ZSBzZXR0bGVkIG9uZSBiaWcgcXVlc3Rpb24gcmVnYXJkaW5nIHdoaWNoCnNhbXBsZXMgdG8gdXNlOiAgV2Ugd2lsbCBsaW1pdCBvdXIgYW5hbHlzZXMgdG8gb25seSB0aG9zZSBzYW1wbGVzIGZyb20KVHVtYWNvLgoKVGhlIGZvbGxvd2luZyBibG9jayB3aWxsIHRoZXJlZm9yZSBzZXQgdGhhdCBncm91cCBhcyBvdXIgZGVmYXVsdCBmb3IKZnV0dXJlIGFuYWx5c2VzLgoKYGBge3IgdHVtYWNvX29ubHl9CnRfY2xpbmljYWwgPC0gdGNfY2xpbmljYWwgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJjbGluaWM9PSdUdW1hY28nIikKc2F2ZShsaXN0ID0gInRfY2xpbmljYWwiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RfY2xpbmljYWwtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0X2NsaW5pY2FsIikKCnRfY2xpbmljYWxfbm9iaW9wIDwtIHN1YnNldF9leHB0KHRfY2xpbmljYWwsIHN1YnNldD0idHlwZW9mY2VsbHMhPSdiaW9wc3knIikKc2F2ZShsaXN0ID0gInRfY2xpbmljYWxfbm9iaW9wIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190X2NsaW5pY2FsX25vYmlvcC12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRfY2xpbmljYWxfbm9iaW9wIikKYGBgCgojIyBTdW1tYXJpemU6IENvbGxlY3QgVHVtYWNvIHNhbXBsZSBudW1iZXJzLgoKQXQgbGVhc3QgaW4gdGhlb3J5LCBldmVyeXRoaW5nIHdoaWNoIGZvbGxvd3Mgd2lsbCBiZSB1c2luZyB0aGUgYWJvdmUKJ2NsaW5pY2FsJyBkYXRhIHN0cnVjdHVyZS4gIFRodXMsIGxldCB1cyBjb3VudCBpdCB1cCBhbmQgZ2V0IGEgc2Vuc2UKb2Ygd2hhdCB3ZSB3aWxsIHdvcmsgd2l0aC4KCmBgYHtyIGNvdW50X3R1bWFjb30KdGFibGUocERhdGEodF9jbGluaWNhbCkkZHJ1ZykKdGFibGUocERhdGEodF9jbGluaWNhbCkkY2xpbmljKQp0YWJsZShwRGF0YSh0X2NsaW5pY2FsKSRmaW5hbG91dGNvbWUpCnRhYmxlKHBEYXRhKHRfY2xpbmljYWwpJHR5cGVvZmNlbGxzKQp0YWJsZShwRGF0YSh0X2NsaW5pY2FsKSR2aXNpdCkKc3VtbWFyeShhcy5udW1lcmljKHBEYXRhKHRfY2xpbmljYWwpJGViX2xjX3RpZW1wb19ldm9sdWNpb24pKQpzdW1tYXJ5KGFzLm51bWVyaWMocERhdGEodF9jbGluaWNhbCkkZWJfbGNfdHRvX21jdG9fZ2x1Y2FuX2Rvc2lzKSkKc3VtbWFyeShhcy5udW1lcmljKHBEYXRhKHRfY2xpbmljYWwpJHYzX2xjX2VqZXlfbGVzaW9uX21tXzEpKQpzdW1tYXJ5KGFzLm51bWVyaWMocERhdGEodF9jbGluaWNhbCkkdjNfbGNfbGVzaW9uX2FyZWFfMSkpCnN1bW1hcnkoYXMubnVtZXJpYyhwRGF0YSh0X2NsaW5pY2FsKSR2M19sY19lamV4X3VsY2VyYV9tbV8xKSkKdGFibGUocERhdGEodF9jbGluaWNhbCkkZWJfbGNfc2V4bykKdGFibGUocERhdGEodF9jbGluaWNhbCkkZWJfbGNfZXRuaWEpCnN1bW1hcnkoYXMubnVtZXJpYyhwRGF0YSh0X2NsaW5pY2FsKSRlZGFkKSkKdGFibGUocERhdGEodF9jbGluaWNhbCkkZWJfbGNfcGVzbykKdGFibGUocERhdGEodF9jbGluaWNhbCkkZWJfbGNfZXN0YXR1cmEpCgpsZW5ndGgodW5pcXVlKHBEYXRhKHRfY2xpbmljYWwpW1siY29kaWdvX3BhY2llbnRlIl1dKSkKb25seV9jdXJlIDwtIHBEYXRhKHRfY2xpbmljYWwpW1siZmluYWxvdXRjb21lIl1dID09ICJjdXJlIgpjX21ldGEgPC0gcERhdGEodF9jbGluaWNhbClbb25seV9jdXJlLCBdCmxlbmd0aCh1bmlxdWUoY19tZXRhW1siY29kaWdvX3BhY2llbnRlIl1dKSkKb25seV9mYWlsIDwtIHBEYXRhKHRfY2xpbmljYWwpW1siZmluYWxvdXRjb21lIl1dID09ICJmYWlsdXJlIgpmX21ldGEgPC0gcERhdGEodF9jbGluaWNhbClbb25seV9mYWlsLCBdCmxlbmd0aCh1bmlxdWUoZl9tZXRhW1siY29kaWdvX3BhY2llbnRlIl1dKSkKYGBgCgojIyBTdWJzZXQ6IENyZWF0ZSBUdW1hY28tc3BlY2lmaWMgdmVyc2lvbnMgb2YgdGhlIHZhcmlvdXMgc3RydWN0dXJlcwoKSSBwcmV2aW91c2x5IG1hZGUgYSBidW5jaCBvZiBkYXRhIHN1YnNldHMgYnkgdmlzaXQsIGNlbGwgdHlwZSwgZXRjLgpTbyBsZXQgdXMgb3ZlcndyaXRlIHRoZW0gYWxsIHdpdGggdmVyc2lvbnMgd2hpY2ggY29udGFpbiBvbmx5IHRoZQpUdW1hY28gc2FtcGxlcy4KClRoZXJlIGlzIG5vIGdvaW5nIGJhY2sgdG8gdGhlIENhbGkgc2FtcGxlcyBhZnRlciB0aGlzIGJsb2NrIHVubGVzcyB3ZQpyZWdlbmVyYXRlIHRoZSBkYXRhIGZyb20gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb25zZXRzLgoKYGBge3IgdHVtYWNvX3N1YnNldHN9CnRfYmlvcHNpZXMgPC0gdGNfYmlvcHNpZXMgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJjbGluaWM9PSdUdW1hY28nIikKc2F2ZShsaXN0ID0gInRfYmlvcHNpZXMiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RfYmlvcHNpZXMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0X2Jpb3BzaWVzIikKCnRfZW9zaW5vcGhpbHMgPC0gdGNfZW9zaW5vcGhpbHMgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJjbGluaWM9PSdUdW1hY28nIikKc2F2ZShsaXN0ID0gInRfZW9zaW5vcGhpbHMiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RfZW9zaW5vcGhpbHMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0X2Vvc2lub3BoaWxzIikKCnRfbW9ub2N5dGVzIDwtIHRjX21vbm9jeXRlcyAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9ImNsaW5pYz09J1R1bWFjbyciKQpzYXZlKGxpc3QgPSAidF9tb25vY3l0ZXMiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RfbW9ub2N5dGVzLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidF9tb25vY3l0ZXMiKQoKdF9uZXV0cm9waGlscyA8LSB0Y19uZXV0cm9waGlscyAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9ImNsaW5pYz09J1R1bWFjbyciKQpzYXZlKGxpc3QgPSAidF9uZXV0cm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdF9uZXV0cm9waGlscy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRfbmV1dHJvcGhpbHMiKQoKdHYxX3NhbXBsZXMgPC0gdGN2MV9zYW1wbGVzICU+JQogIHN1YnNldF9leHB0KHN1YnNldD0iY2xpbmljPT0nVHVtYWNvJyIpCnNhdmUobGlzdCA9ICJ0djFfc2FtcGxlcyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdHYxX3NhbXBsZXMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0djFfc2FtcGxlcyIpCgp0djJfc2FtcGxlcyA8LSB0Y3YyX3NhbXBsZXMgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJjbGluaWM9PSdUdW1hY28nIikKc2F2ZShsaXN0ID0gInR2Ml9zYW1wbGVzIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190djJfc2FtcGxlcy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInR2Ml9zYW1wbGVzIikKCnR2M19zYW1wbGVzIDwtIHRjdjNfc2FtcGxlcyAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9ImNsaW5pYz09J1R1bWFjbyciKQpzYXZlKGxpc3QgPSAidHYzX3NhbXBsZXMiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3R2M19zYW1wbGVzLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidHYzX3NhbXBsZXMiKQoKdHYxX2Vvc2lub3BoaWxzIDwtIHRjdjFfZW9zaW5vcGhpbHMgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJjbGluaWM9PSdUdW1hY28nIikKc2F2ZShsaXN0ID0gInR2MV9lb3Npbm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdHYxX2Vvc2lub3BoaWxzLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidHYxX2Vvc2lub3BoaWxzIikKCnR2Ml9lb3Npbm9waGlscyA8LSB0Y3YyX2Vvc2lub3BoaWxzICU+JQogIHN1YnNldF9leHB0KHN1YnNldD0iY2xpbmljPT0nVHVtYWNvJyIpCnNhdmUobGlzdCA9ICJ0djJfZW9zaW5vcGhpbHMiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3R2Ml9lb3Npbm9waGlscy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInR2Ml9lb3Npbm9waGlscyIpCgp0djNfZW9zaW5vcGhpbHMgPC0gdGN2M19lb3Npbm9waGlscyAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9ImNsaW5pYz09J1R1bWFjbyciKQpzYXZlKGxpc3QgPSAidHYzX2Vvc2lub3BoaWxzIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190djNfZW9zaW5vcGhpbHMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0djNfZW9zaW5vcGhpbHMiKQoKdHYxX21vbm9jeXRlcyA8LSB0Y3YxX21vbm9jeXRlcyAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9ImNsaW5pYz09J1R1bWFjbyciKQpzYXZlKGxpc3QgPSAidHYxX21vbm9jeXRlcyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdHYxX21vbm9jeXRlcy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInR2MV9tb25vY3l0ZXMiKQoKdHYyX21vbm9jeXRlcyA8LSB0Y3YyX21vbm9jeXRlcyAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9ImNsaW5pYz09J1R1bWFjbyciKQpzYXZlKGxpc3QgPSAidHYyX21vbm9jeXRlcyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdHYyX21vbm9jeXRlcy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInR2Ml9tb25vY3l0ZXMiKQoKdHYzX21vbm9jeXRlcyA8LSB0Y3YzX21vbm9jeXRlcyAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9ImNsaW5pYz09J1R1bWFjbyciKQpzYXZlKGxpc3QgPSAidHYzX21vbm9jeXRlcyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdHYzX21vbm9jeXRlcy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInR2M19tb25vY3l0ZXMiKQoKdHYxX25ldXRyb3BoaWxzIDwtIHRjdjFfbmV1dHJvcGhpbHMgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJjbGluaWM9PSdUdW1hY28nIikKc2F2ZShsaXN0ID0gInR2MV9uZXV0cm9waGlscyIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdHYxX25ldXRyb3BoaWxzLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidHYxX25ldXRyb3BoaWxzIikKCnR2Ml9uZXV0cm9waGlscyA8LSB0Y3YyX25ldXRyb3BoaWxzICU+JQogIHN1YnNldF9leHB0KHN1YnNldD0iY2xpbmljPT0nVHVtYWNvJyIpCnNhdmUobGlzdCA9ICJ0djJfbmV1dHJvcGhpbHMiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3R2Ml9uZXV0cm9waGlscy12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInR2Ml9uZXV0cm9waGlscyIpCgp0djNfbmV1dHJvcGhpbHMgPC0gdGN2M19uZXV0cm9waGlscyAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQ9ImNsaW5pYz09J1R1bWFjbyciKQpzYXZlKGxpc3QgPSAidHYzX25ldXRyb3BoaWxzIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190djNfbmV1dHJvcGhpbHMtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0djNfbmV1dHJvcGhpbHMiKQpgYGAKCmBgYHtyIGNvbXBhcmVfYWxsX3Zpc2l0c30KdF92aXNpdCA8LSBzZXRfZXhwdF9jb25kaXRpb25zKHRfY2xpbmljYWwsIGZhY3QgPSAidmlzaXRudW1iZXIiKSAlPiUKICBzZXRfZXhwdF9iYXRjaGVzKGZhY3QgPSAiZmluYWxvdXRjb21lIikgJT4lCiAgc3Vic2V0X2V4cHQoc3Vic2V0PSJ0eXBlb2ZjZWxscyE9J2Jpb3BzeSciKQpzYXZlKGxpc3QgPSAidF92aXNpdCIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdF92aXNpdC12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRfdmlzaXQiKQpgYGAKCmBgYHtyIHNldHVwX3Zpc2l0X2NmX2RhdGFfY29udHJhc3RzfQp2aXNpdF9jZl9leHB0X2ZhY3RvciA8LSBwYXN0ZTAoInYiLCBwRGF0YSh0X2NsaW5pY2FsKVtbInZpc2l0bnVtYmVyIl1dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERhdGEodF9jbGluaWNhbClbWyJmaW5hbG91dGNvbWUiXV0pCnRfdmlzaXRjZiA8LSBzZXRfZXhwdF9jb25kaXRpb25zKHRfY2xpbmljYWwsIGZhY3QgPSB2aXNpdF9jZl9leHB0X2ZhY3RvcikKc2F2ZShsaXN0ID0gInRfdmlzaXRjZiIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdF92aXNpdGNmLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidF92aXNpdGNmIikKCnRfdmlzaXRjZl9lb3Npbm9waGlsIDwtIHN1YnNldF9leHB0KHRfdmlzaXRjZiwgc3Vic2V0PSJ0eXBlb2ZjZWxscz09J2Vvc2lub3BoaWxzJyIpCnNhdmUobGlzdCA9ICJ0X3Zpc2l0Y2ZfZW9zaW5vcGhpbCIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdF92aXNpdGNmX2Vvc2lub3BoaWwtdnt2ZXJ9LnJkYSIpKQpkYXRhX3N0cnVjdHVyZXMgPC0gYyhkYXRhX3N0cnVjdHVyZXMsICJ0X3Zpc2l0Y2ZfZW9zaW5vcGhpbCIpCgp0X3Zpc2l0Y2ZfbW9ub2N5dGUgPC0gc3Vic2V0X2V4cHQodF92aXNpdGNmLCBzdWJzZXQ9InR5cGVvZmNlbGxzPT0nbW9ub2N5dGVzJyIpCnNhdmUobGlzdCA9ICJ0X3Zpc2l0Y2ZfbW9ub2N5dGUiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RfdmlzaXRjZl9tb25vY3l0ZS12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRfdmlzaXRjZl9tb25vY3l0ZSIpCgp0X3Zpc2l0Y2ZfbmV1dHJvcGhpbCA8LSBzdWJzZXRfZXhwdCh0X3Zpc2l0Y2YsIHN1YnNldD0idHlwZW9mY2VsbHM9PSduZXV0cm9waGlscyciKQpzYXZlKGxpc3QgPSAidF92aXNpdGNmX25ldXRyb3BoaWwiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RfdmlzaXRjZl9uZXV0cm9waGlsLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidF92aXNpdGNmX25ldXRyb3BoaWwiKQpgYGAKCiMgUGVyc2lzdGVuY2UKCmBgYHtyIHBlcnNpc3RlbmNlX2V4cHR9CnRfcGVyc2lzdGVuY2UgPC0gc3Vic2V0X2V4cHQodF9jbGluaWNhbCwgc3Vic2V0ID0gInBlcnNpc3RlbmNlPT0nWSd8cGVyc2lzdGVuY2U9PSdOJyIpICU+JQogIHN1YnNldF9leHB0KHN1YnNldCA9ICd2aXNpdG51bWJlcj09MycpICU+JQogIHNldF9leHB0X2NvbmRpdGlvbnMoZmFjdCA9ICdwZXJzaXN0ZW5jZScpCnNhdmUobGlzdCA9ICJ0X3BlcnNpc3RlbmNlIiwgZmlsZSA9IGdsdWU6OmdsdWUoInJkYS90bXJjM190X3BlcnNpc3RlbmNlLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidF9wZXJzaXN0ZW5jZSIpCgp0X3BlcnNpc3RlbmNlX21vbm9jeXRlIDwtIHN1YnNldF9leHB0KHRfcGVyc2lzdGVuY2UsIHN1YnNldCA9ICJ0eXBlb2ZjZWxscz09J21vbm9jeXRlcyciKQpzYXZlKGxpc3QgPSAidF9wZXJzaXN0ZW5jZV9tb25vY3l0ZSIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdF9wZXJzaXN0ZW5jZV9tb25vY3l0ZS12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRfcGVyc2lzdGVuY2VfbW9ub2N5dGUiKQoKdF9wZXJzaXN0ZW5jZV9uZXV0cm9waGlsIDwtIHN1YnNldF9leHB0KHRfcGVyc2lzdGVuY2UsIHN1YnNldCA9ICJ0eXBlb2ZjZWxscz09J25ldXRyb3BoaWxzJyIpCnNhdmUobGlzdCA9ICJ0X3BlcnNpc3RlbmNlX25ldXRyb3BoaWwiLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX3RfcGVyc2lzdGVuY2VfbmV1dHJvcGhpbC12e3Zlcn0ucmRhIikpCmRhdGFfc3RydWN0dXJlcyA8LSBjKGRhdGFfc3RydWN0dXJlcywgInRfcGVyc2lzdGVuY2VfbmV1dHJvcGhpbCIpCgp0X3BlcnNpc3RlbmNlX2Vvc2lub3BoaWwgPC0gc3Vic2V0X2V4cHQodF9wZXJzaXN0ZW5jZSwgc3Vic2V0ID0gInR5cGVvZmNlbGxzPT0nZW9zaW5vcGhpbHMnIikKc2F2ZShsaXN0ID0gInRfcGVyc2lzdGVuY2VfZW9zaW5vcGhpbCIsIGZpbGUgPSBnbHVlOjpnbHVlKCJyZGEvdG1yYzNfdF9wZXJzaXN0ZW5jZV9lb3Npbm9waGlsLXZ7dmVyfS5yZGEiKSkKZGF0YV9zdHJ1Y3R1cmVzIDwtIGMoZGF0YV9zdHJ1Y3R1cmVzLCAidF9wZXJzaXN0ZW5jZV9lb3Npbm9waGlsIikKYGBgCgojIFNhdmUgYWxsIGRhdGEgc3RydWN0dXJlcyBpbnRvIG9uZSBiaWcgcGlsZQoKYGBge3Igc2F2ZV9hbGxfZGF0YX0Kc2F2ZShsaXN0ID0gZGF0YV9zdHJ1Y3R1cmVzLCBmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL3RtcmMzX2RhdGFfc3RydWN0dXJlcy12e3Zlcn0ucmRhIikpCmBgYAoKYGBge3Igc2F2ZW1lLCBldmFsPUZBTFNFfQppZiAoIWlzVFJVRShnZXQwKCJza2lwX2xvYWQiKSkpIHsKICBwYW5kZXI6OnBhbmRlcihzZXNzaW9uSW5mbygpKQogIG1lc3NhZ2UocGFzdGUwKCJUaGlzIGlzIGhwZ2x0b29scyBjb21taXQ6ICIsIGdldF9naXRfY29tbWl0KCkpKQogIG1lc3NhZ2UocGFzdGUwKCJTYXZpbmcgdG8gIiwgc2F2ZWZpbGUpKQogIHRtcCA8LSBzbShzYXZlbWUoZmlsZW5hbWU9c2F2ZWZpbGUpKQp9CmBgYAoKYGBge3IgbG9hZG1lX2FmdGVyLCBldmFsPUZBTFNFfQp0bXAgPC0gbG9hZG1lKGZpbGVuYW1lPXNhdmVmaWxlKQpgYGAK