1 Ixodes Initial Differential Expression

At this point, I am reasonably sure that the data is not crazytown or replete with difficult to assay batch effects. We have (I think) a reasonable factor in the experimental design to include as batch, so I will allow my differential expression toys to use that.

2 Preliminary Differential Expression

Lets see what happens!

## Reminder: isc_test just has batches a vs. b (old vs. new)

## For this first attempt, put batch in the model and only work with batches named 'a' and 'b'
## a_isc_test_condbatch <- sm(all_pairwise(isc_test))
## For a second test, do the more complex a/b/c batches and try putting batch in model.
## b_isc_all_condbatch <- sm(all_pairwise(isc_all))
## The prettiest pca plots were obtained when using (f)sva, so try those next.
## c_isc_test_sva <- sm(all_pairwise(isc_test, model_batch="sva"))
## d_isc_all_sva <- sm(all_pairwise(isc_all, model_batch="sva"))
## e_isc_test_fsva <- sm(all_pairwise(isc_test, model_batch="fsva"))
## f_isc_all_fsva <- sm(all_pairwise(isc_all, model_batch="fsva"))
## Also do one run of each with only the new data.
g_isc_new_condbatch <- sm(all_pairwise(isc_new))
## Error in normalize_expt(input, filter = TRUE, batch = FALSE, transform = "log2", : object 'isc_new' not found
## h_isc_new_sva <- sm(all_pairwise(isc_new, model_batch="sva"))
## i_isc_new_fsva <- sm(all_pairwise(isc_new, model_batch="fsva"))

3 Separate reports

I’m going to create a series of excel sheets to compare/contrast these results and therefore will save each excel with a limited number of contrasts.

inf_uninf <- list("gut_infuninf" = c("infected_gut","uninfected_gut"),
                  "sal_infuninf" = c("infected_salivary","uninfected_salivary"))
salv_gut <- list("inf_salvgut" = c("infected_salivary","infected_gut"),
                 "uninf_salvgut" = c("uninfected_salivary","uninfected_gut"))

3.1 Lots of tables

I have thus far done 9 types of contrats of this data. Lets generate some appropriate reports in the hopes of getting an understanding of which did/didn’t work.

##a_infuninf <- combine_de_tables(a_isc_test_condbatch, keepers=inf_uninf, excel=FALSE)
##a_salvgut <- combine_de_tables(a_isc_test_condbatch, keepers=salv_gut, excel=FALSE)
##b_infuninf <- combine_de_tables(b_isc_all_condbatch, keepers=inf_uninf, excel=FALSE)
##b_salvgut <- combine_de_tables(b_isc_all_condbatch, keepers=salv_gut, excel=FALSE)
##c_infuninf <- combine_de_tables(c_isc_test_sva, keepers=inf_uninf, excel=FALSE)
##c_salvgut <- combine_de_tables(c_isc_test_sva, keepers=salv_gut, excel=FALSE)
##d_infuninf <- combine_de_tables(d_isc_all_sva, keepers=inf_uninf, excel=FALSE)
##d_salvgut <- combine_de_tables(d_isc_all_sva, keepers=salv_gut, excel=FALSE)
##e_infuninf <- combine_de_tables(e_isc_test_fsva, keepers=inf_uninf, excel=FALSE)
##e_salvgut <- combine_de_tables(e_isc_test_fsva, keepers=salv_gut, excel=FALSE)
##f_infuninf <- combine_de_tables(f_isc_all_fsva, keepers=inf_uninf, excel=FALSE)
##f_salvgut <- combine_de_tables(f_isc_all_fsva, keepers=salv_gut, excel=FALSE)


##h_infuninf <- combine_de_tables(h_isc_new_sva, keepers=inf_uninf, excel=FALSE)
##h_salvgut <- combine_de_tables(h_isc_new_sva, keepers=salv_gut, excel=FALSE)
##i_infuninf <- combine_de_tables(i_isc_new_fsva, keepers=inf_uninf, excel=FALSE)
##i_salvgut <- combine_de_tables(i_isc_new_fsva, keepers=salv_gut, excel=FALSE)
## Perhaps extracting significant genes will be helpful
##a_infuninf_sig <- extract_significant_genes(a_infuninf, excel="excel/a_infuninf_sig.xlsx")
##a_salvgut_sig <- extract_significant_genes(a_savlgut, keepers=salv_gut, excel=FALSE)
##b_infuninf_sig <- extract_significant_genes(b_infuninf, keepers=inf_uninf, excel=FALSE)
##b_salvgut_sig <- extract_significant_genes(b_salvgut, keepers=salv_gut, excel=FALSE)
##c_infuninf_sig <- extract_significant_genes(c_infuninf, keepers=inf_uninf, excel=FALSE)
##c_salvgut_sig <- extract_significant_genes(c_salvgut, keepers=salv_gut, excel=FALSE)
##d_infuninf_sig <- extract_significant_genes(d_infuninf, keepers=inf_uninf, excel=FALSE)
##d_salvgut_sig <- extract_significant_genes(d_salvgut, keepers=salv_gut, excel=FALSE)
##e_infuninf_sig <- extract_significant_genes(e_infuninf, keepers=inf_uninf, excel=FALSE)
##e_salvgut_sig <- extract_significant_genes(e_salvgut, keepers=salv_gut, excel=FALSE)
##f_infuninf_sig <- extract_significant_genes(f_infuninf, keepers=inf_uninf, excel=FALSE)
##f_salvgut_sig <- extract_significant_genes(f_salvgut, keepers=salv_gut, excel=FALSE)

g_infuninf <- sm(combine_de_tables(g_isc_new_condbatch, keepers=inf_uninf,
                                   excel=paste0("excel/g_isc_new_condbatch_tables_infuninf-", ver, ".xlsx")))
## Error in combine_de_tables(g_isc_new_condbatch, keepers = inf_uninf, excel = paste0("excel/g_isc_new_condbatch_tables_infuninf-", : object 'g_isc_new_condbatch' not found
g_salvgut <- sm(combine_de_tables(g_isc_new_condbatch, keepers=salv_gut,
                                  excel=paste0("excel/g_isc_new_condbatch_salvgut_tables-", ver, ".xlsx")))
## Error in combine_de_tables(g_isc_new_condbatch, keepers = salv_gut, excel = paste0("excel/g_isc_new_condbatch_salvgut_tables-", : object 'g_isc_new_condbatch' not found
g_pvalue_salvgut_sig <- extract_significant_genes(g_salvgut, fc=0.01,
                                                  excel=paste0("excel/g_isc_new_condbatch_psig_salvgut-", ver, ".xlsx"))
## Error in extract_significant_genes(g_salvgut, fc = 0.01, excel = paste0("excel/g_isc_new_condbatch_psig_salvgut-", : object 'g_salvgut' not found
g_salvgut_sig <- extract_significant_genes(g_salvgut,
                                           excel=paste0("excel/g_isc_new_condbatch_sig_salvgut-", ver, ".xlsx"))
## Error in extract_significant_genes(g_salvgut, excel = paste0("excel/g_isc_new_condbatch_sig_salvgut-", : object 'g_salvgut' not found
g_pvalue_infuninf_sig <- extract_significant_genes(g_infuninf, fc=0.01,
                                                   excel=paste0("excel/g_isc_new_condbatch_psig_infuninf-", ver, ".xlsx"))
## Error in extract_significant_genes(g_infuninf, fc = 0.01, excel = paste0("excel/g_isc_new_condbatch_psig_infuninf-", : object 'g_infuninf' not found
g_infuninf_sig <- extract_significant_genes(g_infuninf,
                                            excel=paste0("excel/g_isc_new_condbatch_sig_infuninf-", ver, ".xlsx"))
## Error in extract_significant_genes(g_infuninf, excel = paste0("excel/g_isc_new_condbatch_sig_infuninf-", : object 'g_infuninf' not found
##h_infuninf_sig <- extract_significant_genes(h_infuninf, excel=FALSE)
##h_salvgut_sig <- extract_significant_genes(h_salvgut, excel=FALSE)
##i_infuninf_sig <- extract_significant_genes(i_infuninf, excel=FALSE)
##i_salvgut_sig <- extract_significant_genes(i_salvgut, excel=FALSE)
isc_desva <- sm(all_pairwise(isc_most, model_batch="sva"))
contrasts_performed <- isc_desva$edger$contrasts$names
contrasts_performed
tmp <- sm(saveme(filename=this_save))
## Error in paste0(getwd(), "/", directory, "/", filename): object 'this_save' not found

index.html sample_estimation.html

LS0tCnRpdGxlOiAiSS5zY2FwdWxhcmlzIDIwMTc6IFRpY2sgRGlmZmVyZW50aWFsIEV4cHJlc3Npb24uIgphdXRob3I6ICJhdGIiCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogaHRtbF9kb2N1bWVudDoKICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgY29kZV9mb2xkaW5nOiBzaG93CiAgZmlnX2NhcHRpb246IHRydWUKICBmaWdfaGVpZ2h0OiA3CiAgZmlnX3dpZHRoOiA3CiAgaGlnaGxpZ2h0OiBkZWZhdWx0CiAga2VlcF9tZDogZmFsc2UKICBtb2RlOiBzZWxmY29udGFpbmVkCiAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgc2VsZl9jb250YWluZWQ6IHRydWUKICB0aGVtZTogcmVhZGFibGUKICB0b2M6IHRydWUKICB0b2NfZmxvYXQ6CiAgICBjb2xsYXBzZWQ6IGZhbHNlCiAgICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQotLS0KCjxzdHlsZT4KICBib2R5IC5tYWluLWNvbnRhaW5lciB7CiAgICBtYXgtd2lkdGg6IDE2MDBweDsKfQo8L3N0eWxlPgoKYGBge3Igb3B0aW9ucywgaW5jbHVkZT1GQUxTRX0KaWYgKCFpc1RSVUUoZ2V0MCgic2tpcF9sb2FkIikpKSB7CiAgbGlicmFyeSgiaHBnbHRvb2xzIikKICB0dCA8LSBkZXZ0b29sczo6bG9hZF9hbGwoIn4vaHBnbHRvb2xzIikKICBrbml0cjo6b3B0c19rbml0JHNldChwcm9ncmVzcz1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2U9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD05MCwKICAgICAgICAgICAgICAgICAgICAgICBlY2hvPVRSVUUpCiAga25pdHI6Om9wdHNfY2h1bmskc2V0KGVycm9yPVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZy53aWR0aD04LAogICAgICAgICAgICAgICAgICAgICAgICBmaWcuaGVpZ2h0PTgsCiAgICAgICAgICAgICAgICAgICAgICAgIGRwaT05NikKICBvbGRfb3B0aW9ucyA8LSBvcHRpb25zKGRpZ2l0cz00LAogICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgIGtuaXRyLmR1cGxpY2F0ZS5sYWJlbD0iYWxsb3ciKQogIGdncGxvdDI6OnRoZW1lX3NldChnZ3Bsb3QyOjp0aGVtZV9idyhiYXNlX3NpemU9MTApKQogIHZlciA8LSAiMjAxODAxMTkiCiAgcHJldmlvdXNfZmlsZSA8LSAiMDJfc2FtcGxlX2VzdGltYXRpb25faXNjYXB1bGFyaXMuUm1kIgoKICB0bXAgPC0gdHJ5KHNtKGxvYWRtZShmaWxlbmFtZT1wYXN0ZTAoZ3N1YihwYXR0ZXJuPSJcXC5SbWQiLCByZXBsYWNlPSIiLCB4PXByZXZpb3VzX2ZpbGUpLCAiLXYiLCB2ZXIsICIucmRhLnh6IikpKSkKICBybWRfZmlsZSA8LSAiMDNfZGlmZmVyZW50aWFsX2V4cHJlc3Npb24uUm1kIgp9CmBgYAoKSXhvZGVzIEluaXRpYWwgRGlmZmVyZW50aWFsIEV4cHJlc3Npb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkF0IHRoaXMgcG9pbnQsIEkgYW0gcmVhc29uYWJseSBzdXJlIHRoYXQgdGhlIGRhdGEgaXMgbm90IGNyYXp5dG93biBvciByZXBsZXRlIHdpdGggZGlmZmljdWx0IHRvCmFzc2F5IGJhdGNoIGVmZmVjdHMuICBXZSBoYXZlIChJIHRoaW5rKSBhIHJlYXNvbmFibGUgZmFjdG9yIGluIHRoZSBleHBlcmltZW50YWwgZGVzaWduIHRvIGluY2x1ZGUgYXMKYmF0Y2gsIHNvIEkgd2lsbCBhbGxvdyBteSBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbiB0b3lzIHRvIHVzZSB0aGF0LgoKIyBQcmVsaW1pbmFyeSBEaWZmZXJlbnRpYWwgRXhwcmVzc2lvbgoKTGV0cyBzZWUgd2hhdCBoYXBwZW5zIQoKYGBge3IgZGV9CiMjIFJlbWluZGVyOiBpc2NfdGVzdCBqdXN0IGhhcyBiYXRjaGVzIGEgdnMuIGIgKG9sZCB2cy4gbmV3KQoKIyMgRm9yIHRoaXMgZmlyc3QgYXR0ZW1wdCwgcHV0IGJhdGNoIGluIHRoZSBtb2RlbCBhbmQgb25seSB3b3JrIHdpdGggYmF0Y2hlcyBuYW1lZCAnYScgYW5kICdiJwojIyBhX2lzY190ZXN0X2NvbmRiYXRjaCA8LSBzbShhbGxfcGFpcndpc2UoaXNjX3Rlc3QpKQojIyBGb3IgYSBzZWNvbmQgdGVzdCwgZG8gdGhlIG1vcmUgY29tcGxleCBhL2IvYyBiYXRjaGVzIGFuZCB0cnkgcHV0dGluZyBiYXRjaCBpbiBtb2RlbC4KIyMgYl9pc2NfYWxsX2NvbmRiYXRjaCA8LSBzbShhbGxfcGFpcndpc2UoaXNjX2FsbCkpCiMjIFRoZSBwcmV0dGllc3QgcGNhIHBsb3RzIHdlcmUgb2J0YWluZWQgd2hlbiB1c2luZyAoZilzdmEsIHNvIHRyeSB0aG9zZSBuZXh0LgojIyBjX2lzY190ZXN0X3N2YSA8LSBzbShhbGxfcGFpcndpc2UoaXNjX3Rlc3QsIG1vZGVsX2JhdGNoPSJzdmEiKSkKIyMgZF9pc2NfYWxsX3N2YSA8LSBzbShhbGxfcGFpcndpc2UoaXNjX2FsbCwgbW9kZWxfYmF0Y2g9InN2YSIpKQojIyBlX2lzY190ZXN0X2ZzdmEgPC0gc20oYWxsX3BhaXJ3aXNlKGlzY190ZXN0LCBtb2RlbF9iYXRjaD0iZnN2YSIpKQojIyBmX2lzY19hbGxfZnN2YSA8LSBzbShhbGxfcGFpcndpc2UoaXNjX2FsbCwgbW9kZWxfYmF0Y2g9ImZzdmEiKSkKIyMgQWxzbyBkbyBvbmUgcnVuIG9mIGVhY2ggd2l0aCBvbmx5IHRoZSBuZXcgZGF0YS4KZ19pc2NfbmV3X2NvbmRiYXRjaCA8LSBzbShhbGxfcGFpcndpc2UoaXNjX25ldykpCiMjIGhfaXNjX25ld19zdmEgPC0gc20oYWxsX3BhaXJ3aXNlKGlzY19uZXcsIG1vZGVsX2JhdGNoPSJzdmEiKSkKIyMgaV9pc2NfbmV3X2ZzdmEgPC0gc20oYWxsX3BhaXJ3aXNlKGlzY19uZXcsIG1vZGVsX2JhdGNoPSJmc3ZhIikpCmBgYAoKIyBTZXBhcmF0ZSByZXBvcnRzCgpJJ20gZ29pbmcgdG8gY3JlYXRlIGEgc2VyaWVzIG9mIGV4Y2VsIHNoZWV0cyB0byBjb21wYXJlL2NvbnRyYXN0IHRoZXNlIHJlc3VsdHMgYW5kIHRoZXJlZm9yZQp3aWxsIHNhdmUgZWFjaCBleGNlbCB3aXRoIGEgbGltaXRlZCBudW1iZXIgb2YgY29udHJhc3RzLgoKYGBge3Iga2VwdF9zdWJzZXRzfQppbmZfdW5pbmYgPC0gbGlzdCgiZ3V0X2luZnVuaW5mIiA9IGMoImluZmVjdGVkX2d1dCIsInVuaW5mZWN0ZWRfZ3V0IiksCiAgICAgICAgICAgICAgICAgICJzYWxfaW5mdW5pbmYiID0gYygiaW5mZWN0ZWRfc2FsaXZhcnkiLCJ1bmluZmVjdGVkX3NhbGl2YXJ5IikpCnNhbHZfZ3V0IDwtIGxpc3QoImluZl9zYWx2Z3V0IiA9IGMoImluZmVjdGVkX3NhbGl2YXJ5IiwiaW5mZWN0ZWRfZ3V0IiksCiAgICAgICAgICAgICAgICAgInVuaW5mX3NhbHZndXQiID0gYygidW5pbmZlY3RlZF9zYWxpdmFyeSIsInVuaW5mZWN0ZWRfZ3V0IikpCmBgYAoKIyMgTG90cyBvZiB0YWJsZXMKCkkgaGF2ZSB0aHVzIGZhciBkb25lIDkgdHlwZXMgb2YgY29udHJhdHMgb2YgdGhpcyBkYXRhLiAgTGV0cyBnZW5lcmF0ZSBzb21lIGFwcHJvcHJpYXRlIHJlcG9ydHMgaW4KdGhlIGhvcGVzIG9mIGdldHRpbmcgYW4gdW5kZXJzdGFuZGluZyBvZiB3aGljaCBkaWQvZGlkbid0IHdvcmsuCgpgYGB7ciB2YXJpb3VzIHRhYmxlc30KIyNhX2luZnVuaW5mIDwtIGNvbWJpbmVfZGVfdGFibGVzKGFfaXNjX3Rlc3RfY29uZGJhdGNoLCBrZWVwZXJzPWluZl91bmluZiwgZXhjZWw9RkFMU0UpCiMjYV9zYWx2Z3V0IDwtIGNvbWJpbmVfZGVfdGFibGVzKGFfaXNjX3Rlc3RfY29uZGJhdGNoLCBrZWVwZXJzPXNhbHZfZ3V0LCBleGNlbD1GQUxTRSkKIyNiX2luZnVuaW5mIDwtIGNvbWJpbmVfZGVfdGFibGVzKGJfaXNjX2FsbF9jb25kYmF0Y2gsIGtlZXBlcnM9aW5mX3VuaW5mLCBleGNlbD1GQUxTRSkKIyNiX3NhbHZndXQgPC0gY29tYmluZV9kZV90YWJsZXMoYl9pc2NfYWxsX2NvbmRiYXRjaCwga2VlcGVycz1zYWx2X2d1dCwgZXhjZWw9RkFMU0UpCiMjY19pbmZ1bmluZiA8LSBjb21iaW5lX2RlX3RhYmxlcyhjX2lzY190ZXN0X3N2YSwga2VlcGVycz1pbmZfdW5pbmYsIGV4Y2VsPUZBTFNFKQojI2Nfc2Fsdmd1dCA8LSBjb21iaW5lX2RlX3RhYmxlcyhjX2lzY190ZXN0X3N2YSwga2VlcGVycz1zYWx2X2d1dCwgZXhjZWw9RkFMU0UpCiMjZF9pbmZ1bmluZiA8LSBjb21iaW5lX2RlX3RhYmxlcyhkX2lzY19hbGxfc3ZhLCBrZWVwZXJzPWluZl91bmluZiwgZXhjZWw9RkFMU0UpCiMjZF9zYWx2Z3V0IDwtIGNvbWJpbmVfZGVfdGFibGVzKGRfaXNjX2FsbF9zdmEsIGtlZXBlcnM9c2Fsdl9ndXQsIGV4Y2VsPUZBTFNFKQojI2VfaW5mdW5pbmYgPC0gY29tYmluZV9kZV90YWJsZXMoZV9pc2NfdGVzdF9mc3ZhLCBrZWVwZXJzPWluZl91bmluZiwgZXhjZWw9RkFMU0UpCiMjZV9zYWx2Z3V0IDwtIGNvbWJpbmVfZGVfdGFibGVzKGVfaXNjX3Rlc3RfZnN2YSwga2VlcGVycz1zYWx2X2d1dCwgZXhjZWw9RkFMU0UpCiMjZl9pbmZ1bmluZiA8LSBjb21iaW5lX2RlX3RhYmxlcyhmX2lzY19hbGxfZnN2YSwga2VlcGVycz1pbmZfdW5pbmYsIGV4Y2VsPUZBTFNFKQojI2Zfc2Fsdmd1dCA8LSBjb21iaW5lX2RlX3RhYmxlcyhmX2lzY19hbGxfZnN2YSwga2VlcGVycz1zYWx2X2d1dCwgZXhjZWw9RkFMU0UpCgoKIyNoX2luZnVuaW5mIDwtIGNvbWJpbmVfZGVfdGFibGVzKGhfaXNjX25ld19zdmEsIGtlZXBlcnM9aW5mX3VuaW5mLCBleGNlbD1GQUxTRSkKIyNoX3NhbHZndXQgPC0gY29tYmluZV9kZV90YWJsZXMoaF9pc2NfbmV3X3N2YSwga2VlcGVycz1zYWx2X2d1dCwgZXhjZWw9RkFMU0UpCiMjaV9pbmZ1bmluZiA8LSBjb21iaW5lX2RlX3RhYmxlcyhpX2lzY19uZXdfZnN2YSwga2VlcGVycz1pbmZfdW5pbmYsIGV4Y2VsPUZBTFNFKQojI2lfc2Fsdmd1dCA8LSBjb21iaW5lX2RlX3RhYmxlcyhpX2lzY19uZXdfZnN2YSwga2VlcGVycz1zYWx2X2d1dCwgZXhjZWw9RkFMU0UpCiMjIFBlcmhhcHMgZXh0cmFjdGluZyBzaWduaWZpY2FudCBnZW5lcyB3aWxsIGJlIGhlbHBmdWwKIyNhX2luZnVuaW5mX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGFfaW5mdW5pbmYsIGV4Y2VsPSJleGNlbC9hX2luZnVuaW5mX3NpZy54bHN4IikKIyNhX3NhbHZndXRfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoYV9zYXZsZ3V0LCBrZWVwZXJzPXNhbHZfZ3V0LCBleGNlbD1GQUxTRSkKIyNiX2luZnVuaW5mX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGJfaW5mdW5pbmYsIGtlZXBlcnM9aW5mX3VuaW5mLCBleGNlbD1GQUxTRSkKIyNiX3NhbHZndXRfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoYl9zYWx2Z3V0LCBrZWVwZXJzPXNhbHZfZ3V0LCBleGNlbD1GQUxTRSkKIyNjX2luZnVuaW5mX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGNfaW5mdW5pbmYsIGtlZXBlcnM9aW5mX3VuaW5mLCBleGNlbD1GQUxTRSkKIyNjX3NhbHZndXRfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoY19zYWx2Z3V0LCBrZWVwZXJzPXNhbHZfZ3V0LCBleGNlbD1GQUxTRSkKIyNkX2luZnVuaW5mX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGRfaW5mdW5pbmYsIGtlZXBlcnM9aW5mX3VuaW5mLCBleGNlbD1GQUxTRSkKIyNkX3NhbHZndXRfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoZF9zYWx2Z3V0LCBrZWVwZXJzPXNhbHZfZ3V0LCBleGNlbD1GQUxTRSkKIyNlX2luZnVuaW5mX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGVfaW5mdW5pbmYsIGtlZXBlcnM9aW5mX3VuaW5mLCBleGNlbD1GQUxTRSkKIyNlX3NhbHZndXRfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoZV9zYWx2Z3V0LCBrZWVwZXJzPXNhbHZfZ3V0LCBleGNlbD1GQUxTRSkKIyNmX2luZnVuaW5mX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGZfaW5mdW5pbmYsIGtlZXBlcnM9aW5mX3VuaW5mLCBleGNlbD1GQUxTRSkKIyNmX3NhbHZndXRfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoZl9zYWx2Z3V0LCBrZWVwZXJzPXNhbHZfZ3V0LCBleGNlbD1GQUxTRSkKCmdfaW5mdW5pbmYgPC0gc20oY29tYmluZV9kZV90YWJsZXMoZ19pc2NfbmV3X2NvbmRiYXRjaCwga2VlcGVycz1pbmZfdW5pbmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZWw9cGFzdGUwKCJleGNlbC9nX2lzY19uZXdfY29uZGJhdGNoX3RhYmxlc19pbmZ1bmluZi0iLCB2ZXIsICIueGxzeCIpKSkKZ19zYWx2Z3V0IDwtIHNtKGNvbWJpbmVfZGVfdGFibGVzKGdfaXNjX25ld19jb25kYmF0Y2gsIGtlZXBlcnM9c2Fsdl9ndXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlbD1wYXN0ZTAoImV4Y2VsL2dfaXNjX25ld19jb25kYmF0Y2hfc2Fsdmd1dF90YWJsZXMtIiwgdmVyLCAiLnhsc3giKSkpCgpnX3B2YWx1ZV9zYWx2Z3V0X3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGdfc2Fsdmd1dCwgZmM9MC4wMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlbD1wYXN0ZTAoImV4Y2VsL2dfaXNjX25ld19jb25kYmF0Y2hfcHNpZ19zYWx2Z3V0LSIsIHZlciwgIi54bHN4IikpCmdfc2Fsdmd1dF9zaWcgPC0gZXh0cmFjdF9zaWduaWZpY2FudF9nZW5lcyhnX3NhbHZndXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlbD1wYXN0ZTAoImV4Y2VsL2dfaXNjX25ld19jb25kYmF0Y2hfc2lnX3NhbHZndXQtIiwgdmVyLCAiLnhsc3giKSkKCmdfcHZhbHVlX2luZnVuaW5mX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGdfaW5mdW5pbmYsIGZjPTAuMDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsPXBhc3RlMCgiZXhjZWwvZ19pc2NfbmV3X2NvbmRiYXRjaF9wc2lnX2luZnVuaW5mLSIsIHZlciwgIi54bHN4IikpCmdfaW5mdW5pbmZfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoZ19pbmZ1bmluZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlbD1wYXN0ZTAoImV4Y2VsL2dfaXNjX25ld19jb25kYmF0Y2hfc2lnX2luZnVuaW5mLSIsIHZlciwgIi54bHN4IikpCgojI2hfaW5mdW5pbmZfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoaF9pbmZ1bmluZiwgZXhjZWw9RkFMU0UpCiMjaF9zYWx2Z3V0X3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGhfc2Fsdmd1dCwgZXhjZWw9RkFMU0UpCiMjaV9pbmZ1bmluZl9zaWcgPC0gZXh0cmFjdF9zaWduaWZpY2FudF9nZW5lcyhpX2luZnVuaW5mLCBleGNlbD1GQUxTRSkKIyNpX3NhbHZndXRfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoaV9zYWx2Z3V0LCBleGNlbD1GQUxTRSkKYGBgCgpgYGB7ciBkZV9zdmEsIGV2YWw9RkFMU0V9CmlzY19kZXN2YSA8LSBzbShhbGxfcGFpcndpc2UoaXNjX21vc3QsIG1vZGVsX2JhdGNoPSJzdmEiKSkKY29udHJhc3RzX3BlcmZvcm1lZCA8LSBpc2NfZGVzdmEkZWRnZXIkY29udHJhc3RzJG5hbWVzCmNvbnRyYXN0c19wZXJmb3JtZWQKYGBgCgpgYGB7ciBzYXZlbWV9CnRtcCA8LSBzbShzYXZlbWUoZmlsZW5hbWU9dGhpc19zYXZlKSkKYGBgCgpbaW5kZXguaHRtbF0oaW5kZXguaHRtbCkgW3NhbXBsZV9lc3RpbWF0aW9uLmh0bWxdKHNhbXBsZV9lc3RpbWF0aW9uLmh0bWwpCg==