1 Differential Expression: 20180606

2 Filter the raw data

In sample_estimation, I created sc_filt which is precisely what I want.

3 Start with batch in the model

I am going to leave these running without silence as I want to make sure they are running without troubles.

3.1 Set up contrasts

I use the variable ‘keepers’ to define the numerators/denominators of interest and give their contrasts names which are appropriate. I do this because my all_pairwise() function performs all possible pairwise comparisons in the specific order of: a:b, a:c, a:d, … b:c, b:d, …, c:d, … which is not necessarily what is biologically interesting/intuitive. Thus when we specifically set the numerators/denominators here, it will make sure that the result of the contrast is in the chosen orientation.

keepers <- list(
  "D95A_vs_WT" = c("cbf5_D95A", "WT"),
  "upf1d_vs_WT" = c("upf1d", "WT"),
  "double_vs_D95A" = c("cbf5_D95Aupf1d", "cbf5_D95A"),
  "double_vs_upf1d" = c("cbf5_D95Aupf1d", "upf1d"),
  "double_vs_wt" = c("cbf5_D95Aupf1d", "WT"))

3.3 Repeat pairwise searches with experiment 1, experiment2 batch2

E1E2B2_filt <- sm(normalize_expt(E1E2B2_expt, filter=TRUE))
E1E2B2_fsva <- sm(all_pairwise(input=E1E2B2_filt, model_batch="fsva"))
E1E2B2_fsva_write <- sm(combine_de_tables(
  all_pairwise_result=E1E2B2_fsva, keepers=keepers,
  excel=paste0("excel/nor_sva_in_model_differential_merged-v", ver, ".xlsx"),
  abundant_excel=paste0("excel/nor_sva_in_model_abundance-v", ver, ".xlsx")))
E1E2B2_fsva_sig <- E1E2B2_fsva_write[["significant"]]
strict_E1E2B2_fsva_write <- sm(extract_significant_genes(
  E1E2B2_fsva_write, lfc=2,
  excel=paste0("excel/nor_sva_in_model_sig2lfc-v", ver, ".xlsx")))
new_colors <- c("#008000", "#4CA64C", "#7FBF7F", "#FF0000", "#FF4C4C", "#FF9999")
new_bars <- significant_barplots(E1E2B2_fsva_write, color_list=new_colors)
norcbf5_de_plots <- extract_de_plots(E1E2B2_fsva_write, type="deseq", table="cbf5_D95A_vs_WT")
pp(file="illustrator_input/24_norcbf5_deseq_ma.pdf", image=norcbf5_de_plots$ma$plot)
## Writing the image to: illustrator_input/24_norcbf5_deseq_ma.pdf and calling dev.off().

pp(file="illustrator_input/25_norcbf5_deseq_vol.pdf", image=norcbf5_de_plots$volcano$plot)
## Writing the image to: illustrator_input/25_norcbf5_deseq_vol.pdf and calling dev.off().

pp(file="illustrator_input/26_norredgreen_sigbars.pdf", image=new_bars$deseq)
## Writing the image to: illustrator_input/26_norredgreen_sigbars.pdf and calling dev.off().

pp(file="illustrator_input/27_nor_agreement.pdf", image=E1E2B2_fsva$comparison$heat)
## Writing the image to: illustrator_input/27_nor_agreement.pdf and calling dev.off().

4 20180606 Only old data

We want to use our ‘only_old’ experiment to look at some DE of only experiment 1.

E1_filt <- sm(normalize_expt(E1_expt, filter=TRUE))
keepers <- list("cbf5_vs_wt" = c("cbf5_D95A", "WT"))
E1_de <- sm(all_pairwise(input=E1_filt, model_batch=FALSE))

E1_write <- sm(combine_de_tables(
  all_pairwise_result=E1_de, keepers=keepers,
  excel=paste0("excel/E1_differential-v", ver, ".xlsx"),
  abundant_excel=paste0("excel/E1_abundance-v", ver, ".xlsx"),
  sig_excel=paste0("excel/E1_significant-v", ver, ".xlsx")))

E1_sig <- E1_write[["significant"]]
strict_E1_write <- sm(extract_significant_genes(
  E1_write, lfc=2,
  excel=paste0("excel/E1_sig2lfc-v", ver, ".xlsx")))
new_colors <- c("#008000", "#4CA64C", "#7FBF7F", "#FF0000", "#FF4C4C", "#FF9999")
new_bars <- significant_barplots(E1_write, color_list=new_colors)
E1_de_plots <- extract_de_plots(E1_write, type="deseq", table="cbf5_D95A_vs_WT")
pp(file="illustrator_input/28_E1_deseq_ma.pdf", image=E1_de_plots$ma$plot)
## Writing the image to: illustrator_input/28_E1_deseq_ma.pdf and calling dev.off().

pp(file="illustrator_input/29_E1_deseq_vol.pdf", image=E1_de_plots$volcano$plot)
## Writing the image to: illustrator_input/29_E1_deseq_vol.pdf and calling dev.off().

pp(file="illustrator_input/30_E1_sigbars.pdf", image=new_bars$deseq)
## Writing the image to: illustrator_input/30_E1_sigbars.pdf and calling dev.off().

LS0tCnRpdGxlOiAiUy4gY2VyZXZpc2lhZSAyMDE3OiBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbiwgbWVyZ2VkIHNhbXBsZSBlZGl0aW9uICgyMDE4MDYwNikuIgphdXRob3I6ICJhdGIgYWJlbGV3QGdtYWlsLmNvbSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiBodG1sX2RvY3VtZW50OgogIGNvZGVfZG93bmxvYWQ6IHRydWUKICBjb2RlX2ZvbGRpbmc6IHNob3cKICBmaWdfY2FwdGlvbjogdHJ1ZQogIGZpZ19oZWlnaHQ6IDcKICBmaWdfd2lkdGg6IDcKICBoaWdobGlnaHQ6IGRlZmF1bHQKICBrZWVwX21kOiBmYWxzZQogIG1vZGU6IHNlbGZjb250YWluZWQKICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogIHRoZW1lOiByZWFkYWJsZQogIHRvYzogdHJ1ZQogIHRvY19mbG9hdDoKICAgIGNvbGxhcHNlZDogZmFsc2UKICAgIHNtb290aF9zY3JvbGw6IGZhbHNlCi0tLQoKPHN0eWxlPgogIGJvZHkgLm1haW4tY29udGFpbmVyIHsKICAgIG1heC13aWR0aDogMTYwMHB4OwogIH0KPC9zdHlsZT4KCmBgYHtyIG9wdGlvbnMsIGluY2x1ZGU9RkFMU0V9CmlmICghaXNUUlVFKGdldDAoInNraXBfbG9hZCIpKSkgewogIGxpYnJhcnkoImhwZ2x0b29scyIpCiAgdHQgPC0gZGV2dG9vbHM6OmxvYWRfYWxsKCJ+L2hwZ2x0b29scyIpCiAga25pdHI6Om9wdHNfa25pdCRzZXQocHJvZ3Jlc3M9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9OTAsCiAgICAgICAgICAgICAgICAgICAgICAgZWNobz1UUlVFKQogIGtuaXRyOjpvcHRzX2NodW5rJHNldChlcnJvcj1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGg9OCwKICAgICAgICAgICAgICAgICAgICAgICAgZmlnLmhlaWdodD04LAogICAgICAgICAgICAgICAgICAgICAgICBkcGk9OTYpCiAgb2xkX29wdGlvbnMgPC0gb3B0aW9ucyhkaWdpdHM9NCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICBrbml0ci5kdXBsaWNhdGUubGFiZWw9ImFsbG93IikKICBnZ3Bsb3QyOjp0aGVtZV9zZXQoZ2dwbG90Mjo6dGhlbWVfYncoYmFzZV9zaXplPTEwKSkKICBzZXQuc2VlZCgxKQogIHZlciA8LSAiMjAxODA2MDYiCiAgcHJldmlvdXNfZmlsZSA8LSBwYXN0ZTAoIjAyX3NhbXBsZV9lc3RpbWF0aW9uX21lcmdlZC12IiwgdmVyLCAiLlJtZCIpCgogIHRtcCA8LSBzbShsb2FkbWUoZmlsZW5hbWU9cGFzdGUwKGdzdWIocGF0dGVybj0iXFwuUm1kIiwgcmVwbGFjZT0iIiwgeD1wcmV2aW91c19maWxlKSwgIi12IiwgdmVyLCAiLnJkYS54eiIpKSkKICBybWRfZmlsZSA8LSBwYXN0ZTAoIjAzX2RpZmZlcmVudGlhbF9leHByZXNzaW9uX21lcmdlZC12IiwgdmVyLCAiLlJtZCIpCn0KYGBgCgojIERpZmZlcmVudGlhbCBFeHByZXNzaW9uOiBgciB2ZXJgCgojIEZpbHRlciB0aGUgcmF3IGRhdGEKCkluIHNhbXBsZV9lc3RpbWF0aW9uLCBJIGNyZWF0ZWQgc2NfZmlsdCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBJIHdhbnQuCgojIFN0YXJ0IHdpdGggYmF0Y2ggaW4gdGhlIG1vZGVsCgpJIGFtIGdvaW5nIHRvIGxlYXZlIHRoZXNlIHJ1bm5pbmcgd2l0aG91dCBzaWxlbmNlIGFzIEkgd2FudCB0byBtYWtlIHN1cmUgdGhleQphcmUgcnVubmluZyB3aXRob3V0IHRyb3VibGVzLgoKIyMgU2V0IHVwIGNvbnRyYXN0cwoKSSB1c2UgdGhlIHZhcmlhYmxlICdrZWVwZXJzJyB0byBkZWZpbmUgdGhlIG51bWVyYXRvcnMvZGVub21pbmF0b3JzIG9mIGludGVyZXN0CmFuZCBnaXZlIHRoZWlyIGNvbnRyYXN0cyBuYW1lcyB3aGljaCBhcmUgYXBwcm9wcmlhdGUuICBJIGRvIHRoaXMgYmVjYXVzZSBteQphbGxfcGFpcndpc2UoKSBmdW5jdGlvbiBwZXJmb3JtcyBhbGwgcG9zc2libGUgcGFpcndpc2UgY29tcGFyaXNvbnMgaW4gdGhlCnNwZWNpZmljIG9yZGVyIG9mOiBhOmIsIGE6YywgYTpkLCAuLi4gYjpjLCBiOmQsIC4uLiwgYzpkLCAuLi4Kd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHdoYXQgaXMgYmlvbG9naWNhbGx5IGludGVyZXN0aW5nL2ludHVpdGl2ZS4gIFRodXMgd2hlbgp3ZSBzcGVjaWZpY2FsbHkgc2V0IHRoZSBudW1lcmF0b3JzL2Rlbm9taW5hdG9ycyBoZXJlLCBpdCB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZQpyZXN1bHQgb2YgdGhlIGNvbnRyYXN0IGlzIGluIHRoZSBjaG9zZW4gb3JpZW50YXRpb24uCgpgYGB7ciBiYXRjaF9tb2RlbH0Ka2VlcGVycyA8LSBsaXN0KAogICJEOTVBX3ZzX1dUIiA9IGMoImNiZjVfRDk1QSIsICJXVCIpLAogICJ1cGYxZF92c19XVCIgPSBjKCJ1cGYxZCIsICJXVCIpLAogICJkb3VibGVfdnNfRDk1QSIgPSBjKCJjYmY1X0Q5NUF1cGYxZCIsICJjYmY1X0Q5NUEiKSwKICAiZG91YmxlX3ZzX3VwZjFkIiA9IGMoImNiZjVfRDk1QXVwZjFkIiwgInVwZjFkIiksCiAgImRvdWJsZV92c193dCIgPSBjKCJjYmY1X0Q5NUF1cGYxZCIsICJXVCIpKQpgYGAKCiMjIFBlcmZvcm0gc2VhcmNoCgpBcyBJIHN1c3BlY3QgeW91IGtub3csIGFsbF9wYWlyd2lzZSgpIGlzIHRoZSB3b3JrIGhvcnNlLiAgSXQgcnVucwpkZXNlcS9lZGdlci9saW1tYS9iYXNpYyBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbiBzZWFyY2hlcyBhbmQgYXR0ZW1wdHMgdG8gdXNlCnNpbWlsYXIvY29tcGF0aWJsZSBzdGF0aXN0aWNhbCBtb2RlbHMgZm9yIGVhY2ggc2VhcmNoIChleGNlcHQgYmFzaWMgd2hpY2ggaXMKaW50ZW5kZWQgYXMgYSBkaWFnbm9zdGljL25lZ2F0aXZlIGNvbnRyb2wpLgoKY29tYmluZV9kZV90YWJsZXMoKSBkb2VzIG1vc3Qgb2YgdGhlIHdvcmsuICBJdCB0YWtlcyB0aGUgZGF0YSBmcm9tCmFsbF9wYWlyd2lzZSgpLCBjb21iaW5lcyB0aGVtLCBhbmQgd3JpdGVzIHRoZW0gb3V0LgoKSSBzaG91bGQgYWRkIHNvbWUgbW9yZSBwaWN0dXJlcyBoZXJlLgoKYGBge3IgcGVyZm9ybV9hbGxfZGUsIGZpZy5zaG93PSJoaWRlIn0KZnN2YSA8LSBzbShhbGxfcGFpcndpc2UoaW5wdXQ9YWxsX2ZpbHQsIG1vZGVsX2JhdGNoPSJmc3ZhIikpCgpmc3ZhX3dyaXRlIDwtIHNtKGNvbWJpbmVfZGVfdGFibGVzKAogIGFsbF9wYWlyd2lzZV9yZXN1bHQ9ZnN2YSwga2VlcGVycz1rZWVwZXJzLAogIGV4Y2VsPXBhc3RlMCgiZXhjZWwvYWxsX3N2YV9pbl9tb2RlbF9kaWZmZXJlbnRpYWwtdiIsIHZlciwgIi54bHN4IiksCiAgYWJ1bmRhbnRfZXhjZWw9cGFzdGUwKCJleGNlbC9hbGxfc3ZhX2luX21vZGVsX2FidW5kYW5jZS12IiwgdmVyLCAiLnhsc3giKSkpCnN0cmljdF9zaWdfd3JpdGUgPC0gc20oZXh0cmFjdF9zaWduaWZpY2FudF9nZW5lcygKICBmc3ZhX3dyaXRlLCBhY2NvcmRpbmdfdG89ImRlc2VxIiwgbGZjPTIsCiAgZXhjZWw9cGFzdGUwKCJleGNlbC9hbGxfc3ZhX2luX21vZGVsX3NpZzJsZmMtdiIsIHZlciwgIi54bHN4IikpKQpuZXdfY29sb3JzIDwtIGMoIiMwMDgwMDAiLCAiIzRDQTY0QyIsICIjN0ZCRjdGIiwgIiNGRjAwMDAiLCAiI0ZGNEM0QyIsICIjRkY5OTk5IikKbmV3X2JhcnMgPC0gc2lnbmlmaWNhbnRfYmFycGxvdHMoZnN2YV93cml0ZSwgY29sb3JfbGlzdD1uZXdfY29sb3JzKQpjYmY1X2RlX3Bsb3RzIDwtIGV4dHJhY3RfZGVfcGxvdHMoZnN2YV93cml0ZSwgdHlwZT0iZGVzZXEiLCB0YWJsZT0iY2JmNV9EOTVBX3ZzX1dUIikKYGBgCgpTaG93IHNvbWUgcGxvdHMhCgpgYGB7ciBwZXJmb3JtX2FsbF9kZV9wbG90c30KcHAoZmlsZT0iaWxsdXN0cmF0b3JfaW5wdXQvMjFfY2JmNV9kZXNlcV9tYS5wZGYiLCBpbWFnZT1jYmY1X2RlX3Bsb3RzJG1hJHBsb3QpCnBwKGZpbGU9ImlsbHVzdHJhdG9yX2lucHV0LzIyX2NiZjVfZGVzZXFfdm9sLnBkZiIsIGltYWdlPWNiZjVfZGVfcGxvdHMkdm9sY2FubyRwbG90KQpwcChmaWxlPSJpbGx1c3RyYXRvcl9pbnB1dC8yM19yZWRncmVlbl9zaWdiYXJzLnBkZiIsIGltYWdlPW5ld19iYXJzJGRlc2VxKQpgYGAKCiMjIFJlcGVhdCBwYWlyd2lzZSBzZWFyY2hlcyB3aXRoIGV4cGVyaW1lbnQgMSwgZXhwZXJpbWVudDIgYmF0Y2gyCgpgYGB7ciBwZXJmb3JtX0UxRTJCMl9kZSwgZmlnLnNob3c9ImhpZGUifQpFMUUyQjJfZmlsdCA8LSBzbShub3JtYWxpemVfZXhwdChFMUUyQjJfZXhwdCwgZmlsdGVyPVRSVUUpKQpFMUUyQjJfZnN2YSA8LSBzbShhbGxfcGFpcndpc2UoaW5wdXQ9RTFFMkIyX2ZpbHQsIG1vZGVsX2JhdGNoPSJmc3ZhIikpCgpFMUUyQjJfZnN2YV93cml0ZSA8LSBzbShjb21iaW5lX2RlX3RhYmxlcygKICBhbGxfcGFpcndpc2VfcmVzdWx0PUUxRTJCMl9mc3ZhLCBrZWVwZXJzPWtlZXBlcnMsCiAgZXhjZWw9cGFzdGUwKCJleGNlbC9ub3Jfc3ZhX2luX21vZGVsX2RpZmZlcmVudGlhbF9tZXJnZWQtdiIsIHZlciwgIi54bHN4IiksCiAgYWJ1bmRhbnRfZXhjZWw9cGFzdGUwKCJleGNlbC9ub3Jfc3ZhX2luX21vZGVsX2FidW5kYW5jZS12IiwgdmVyLCAiLnhsc3giKSkpCkUxRTJCMl9mc3ZhX3NpZyA8LSBFMUUyQjJfZnN2YV93cml0ZVtbInNpZ25pZmljYW50Il1dCnN0cmljdF9FMUUyQjJfZnN2YV93cml0ZSA8LSBzbShleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKAogIEUxRTJCMl9mc3ZhX3dyaXRlLCBsZmM9MiwKICBleGNlbD1wYXN0ZTAoImV4Y2VsL25vcl9zdmFfaW5fbW9kZWxfc2lnMmxmYy12IiwgdmVyLCAiLnhsc3giKSkpCm5ld19jb2xvcnMgPC0gYygiIzAwODAwMCIsICIjNENBNjRDIiwgIiM3RkJGN0YiLCAiI0ZGMDAwMCIsICIjRkY0QzRDIiwgIiNGRjk5OTkiKQpuZXdfYmFycyA8LSBzaWduaWZpY2FudF9iYXJwbG90cyhFMUUyQjJfZnN2YV93cml0ZSwgY29sb3JfbGlzdD1uZXdfY29sb3JzKQpub3JjYmY1X2RlX3Bsb3RzIDwtIGV4dHJhY3RfZGVfcGxvdHMoRTFFMkIyX2ZzdmFfd3JpdGUsIHR5cGU9ImRlc2VxIiwgdGFibGU9ImNiZjVfRDk1QV92c19XVCIpCmBgYAoKYGBge3IgcGVyZm9ybV9FMUUyQjJfZGVfcGxvdHN9CnBwKGZpbGU9ImlsbHVzdHJhdG9yX2lucHV0LzI0X25vcmNiZjVfZGVzZXFfbWEucGRmIiwgaW1hZ2U9bm9yY2JmNV9kZV9wbG90cyRtYSRwbG90KQpwcChmaWxlPSJpbGx1c3RyYXRvcl9pbnB1dC8yNV9ub3JjYmY1X2Rlc2VxX3ZvbC5wZGYiLCBpbWFnZT1ub3JjYmY1X2RlX3Bsb3RzJHZvbGNhbm8kcGxvdCkKcHAoZmlsZT0iaWxsdXN0cmF0b3JfaW5wdXQvMjZfbm9ycmVkZ3JlZW5fc2lnYmFycy5wZGYiLCBpbWFnZT1uZXdfYmFycyRkZXNlcSkKCnBwKGZpbGU9ImlsbHVzdHJhdG9yX2lucHV0LzI3X25vcl9hZ3JlZW1lbnQucGRmIiwgaW1hZ2U9RTFFMkIyX2ZzdmEkY29tcGFyaXNvbiRoZWF0KQpgYGAKCiMgMjAxODA2MDYgT25seSBvbGQgZGF0YQoKV2Ugd2FudCB0byB1c2Ugb3VyICdvbmx5X29sZCcgZXhwZXJpbWVudCB0byBsb29rIGF0IHNvbWUgREUgb2Ygb25seSBleHBlcmltZW50IDEuCgpgYGB7ciBkZV9FMX0KRTFfZmlsdCA8LSBzbShub3JtYWxpemVfZXhwdChFMV9leHB0LCBmaWx0ZXI9VFJVRSkpCmtlZXBlcnMgPC0gbGlzdCgiY2JmNV92c193dCIgPSBjKCJjYmY1X0Q5NUEiLCAiV1QiKSkKRTFfZGUgPC0gc20oYWxsX3BhaXJ3aXNlKGlucHV0PUUxX2ZpbHQsIG1vZGVsX2JhdGNoPUZBTFNFKSkKCkUxX3dyaXRlIDwtIHNtKGNvbWJpbmVfZGVfdGFibGVzKAogIGFsbF9wYWlyd2lzZV9yZXN1bHQ9RTFfZGUsIGtlZXBlcnM9a2VlcGVycywKICBleGNlbD1wYXN0ZTAoImV4Y2VsL0UxX2RpZmZlcmVudGlhbC12IiwgdmVyLCAiLnhsc3giKSwKICBhYnVuZGFudF9leGNlbD1wYXN0ZTAoImV4Y2VsL0UxX2FidW5kYW5jZS12IiwgdmVyLCAiLnhsc3giKSwKICBzaWdfZXhjZWw9cGFzdGUwKCJleGNlbC9FMV9zaWduaWZpY2FudC12IiwgdmVyLCAiLnhsc3giKSkpCkUxX3NpZyA8LSBFMV93cml0ZVtbInNpZ25pZmljYW50Il1dCnN0cmljdF9FMV93cml0ZSA8LSBzbShleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKAogIEUxX3dyaXRlLCBsZmM9MiwKICBleGNlbD1wYXN0ZTAoImV4Y2VsL0UxX3NpZzJsZmMtdiIsIHZlciwgIi54bHN4IikpKQpuZXdfY29sb3JzIDwtIGMoIiMwMDgwMDAiLCAiIzRDQTY0QyIsICIjN0ZCRjdGIiwgIiNGRjAwMDAiLCAiI0ZGNEM0QyIsICIjRkY5OTk5IikKbmV3X2JhcnMgPC0gc2lnbmlmaWNhbnRfYmFycGxvdHMoRTFfd3JpdGUsIGNvbG9yX2xpc3Q9bmV3X2NvbG9ycykKRTFfZGVfcGxvdHMgPC0gZXh0cmFjdF9kZV9wbG90cyhFMV93cml0ZSwgdHlwZT0iZGVzZXEiLCB0YWJsZT0iY2JmNV9EOTVBX3ZzX1dUIikKYGBgCgpgYGB7ciBFMV9wbG90c30KcHAoZmlsZT0iaWxsdXN0cmF0b3JfaW5wdXQvMjhfRTFfZGVzZXFfbWEucGRmIiwgaW1hZ2U9RTFfZGVfcGxvdHMkbWEkcGxvdCkKcHAoZmlsZT0iaWxsdXN0cmF0b3JfaW5wdXQvMjlfRTFfZGVzZXFfdm9sLnBkZiIsIGltYWdlPUUxX2RlX3Bsb3RzJHZvbGNhbm8kcGxvdCkKcHAoZmlsZT0iaWxsdXN0cmF0b3JfaW5wdXQvMzBfRTFfc2lnYmFycy5wZGYiLCBpbWFnZT1uZXdfYmFycyRkZXNlcSkKYGBgCgpgYGB7ciBzYXZlbWUsIGluY2x1ZGU9RkFMU0V9CmlmICghaXNUUlVFKGdldDAoInNraXBfbG9hZCIpKSkgewogIHBhbmRlcjo6cGFuZGVyKHNlc3Npb25JbmZvKCkpCiAgbWVzc2FnZShwYXN0ZTAoIlRoaXMgaXMgaHBnbHRvb2xzIGNvbW1pdDogIiwgZ2V0X2dpdF9jb21taXQoKSkpCiAgdGhpc19zYXZlIDwtIHBhc3RlMChnc3ViKHBhdHRlcm49IlxcLlJtZCIsIHJlcGxhY2U9IiIsIHg9cm1kX2ZpbGUpLCAiLXYiLCB2ZXIsICIucmRhLnh6IikKICB0bXAgPC0gc20oc2F2ZW1lKGZpbGVuYW1lPXRoaXNfc2F2ZSkpCn0KYGBgCg==