Libraries

library(tidyverse)
library(ggplot2)
library(ggbeeswarm)
library(plotrix)
library(car)
library(rstatix)
library(SimComp)
library(readxl)
library(dplyr)

Datasets

dataset_exp_1_ballistography <- read_excel (path = "/mnt/c/Users/Toshiya Matsushima/OneDrive/R projects/BM_project/data analysis using Rstudio/BM_project_dataset.xlsx", sheet = "exp_1_3_ballistography")
dataset_exp_1_ballistography_fig <- filter(dataset_exp_1_ballistography, fig_data == 1)
dataset_exp_1_ballistography_imi <- filter(dataset_exp_1_ballistography, drug %in% c("00_ctrl", "07_imi"))
dataset_exp_1_ballistography_bume_vu <- filter(dataset_exp_1_ballistography, drug %in% c("00_ctrl", "08_bume", "09_vu"))

dataset_exp_1_ballistography
dataset_exp_1_ballistography_fig
dataset_exp_1_ballistography_imi
dataset_exp_1_ballistography_bume_vu

Datasets statistics summary

dataset_exp_1_ballistography %>% 
  group_by(label) %>% 
  get_summary_stats(ratio)

dataset_exp_1_ballistography_fig %>% 
  group_by(label) %>% 
  get_summary_stats(ratio)

dataset_exp_1_ballistography_imi %>% 
  group_by(label) %>% 
  get_summary_stats(ratio)

dataset_exp_1_ballistography_bume_vu %>% 
  group_by(label) %>% 
  get_summary_stats(ratio)

Figures

all data

fig <- ggplot(data = dataset_exp_1_ballistography, mapping = aes(x=label, y=ratio)) +
  geom_hline(yintercept=1, linetype = "dotted")+
  geom_boxplot() +
  geom_quasirandom(size = 2, shape = 16, colour = "black") +
  theme_classic()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
fig
ggsave(plot = fig, filename = "exp_1_ratio_label_all.png", dpi = 300, height = 10, width = 15, units = "cm")

All data linear fitting

fit_exp_1_ballistography_all <- lm(ratio ~ label, data = dataset_exp_1_ballistography)
summary(fit_exp_1_ballistography_all)

Call:
lm(formula = ratio ~ label, data = dataset_exp_1_ballistography)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.7238 -0.1620 -0.0269  0.1767  0.9898 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)      1.18063    0.07017  16.824  < 2e-16 ***
label01_vpa_1   -0.37115    0.11637  -3.189  0.00192 ** 
label01_vpa_2   -0.56805    0.11637  -4.881 4.14e-06 ***
label02_keta_2  -0.57210    0.11637  -4.916 3.59e-06 ***
label03_mk801_2 -0.69986    0.11637  -6.014 3.19e-08 ***
label04_tubo_1  -0.43130    0.11637  -3.706  0.00035 ***
label04_tubo_2  -0.67630    0.11637  -5.812 7.88e-08 ***
label05_mla_2   -0.56939    0.11637  -4.893 3.95e-06 ***
label06_dhbe_2  -0.78066    0.11637  -6.708 1.32e-09 ***
label07_imi_1   -0.28187    0.11637  -2.422  0.01728 *  
label07_imi_2   -0.59009    0.11637  -5.071 1.90e-06 ***
label08_bume_1  -0.21975    0.11637  -1.888  0.06196 .  
label09_vu_1     0.03569    0.11637   0.307  0.75973    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2626 on 97 degrees of freedom
Multiple R-squared:  0.5315,    Adjusted R-squared:  0.4735 
F-statistic: 9.169 on 12 and 97 DF,  p-value: 1.501e-11
car::Anova(fit_exp_1_ballistography_all)
Anova Table (Type II tests)

Response: ratio
          Sum Sq Df F value    Pr(>F)    
label     7.5860 12  9.1695 1.501e-11 ***
Residuals 6.6874 97                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Selected data for Fig.1C

fig <- ggplot(data = dataset_exp_1_ballistography_fig, mapping = aes(x=label, y=ratio)) +
  geom_hline(yintercept=1, linetype = "dotted")+
  geom_boxplot() +
  geom_quasirandom(size = 3, shape = 16, colour = "black") +
  theme_classic()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
fig
ggsave(plot = fig, filename = "exp_1_ratio_label_selected.png", dpi = 300, height = 10, width = 10, units = "cm")

Selected data liner fitting

fit_exp_1_ballistography_selected <- lm(ratio ~ label, data = dataset_exp_1_ballistography_fig)
summary(fit_exp_1_ballistography_selected)

Call:
lm(formula = ratio ~ label, data = dataset_exp_1_ballistography_fig)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.72375 -0.16201 -0.04892  0.17336  0.98976 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)      1.18063    0.07899  14.947  < 2e-16 ***
label01_vpa_2   -0.56805    0.13099  -4.337 6.23e-05 ***
label02_keta_2  -0.57210    0.13099  -4.368 5.60e-05 ***
label03_mk801_2 -0.69986    0.13099  -5.343 1.80e-06 ***
label04_tubo_2  -0.67630    0.13099  -5.163 3.46e-06 ***
label05_mla_2   -0.56939    0.13099  -4.347 6.01e-05 ***
label06_dhbe_2  -0.78066    0.13099  -5.960 1.87e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2956 on 55 degrees of freedom
Multiple R-squared:  0.5006,    Adjusted R-squared:  0.4461 
F-statistic: 9.188 on 6 and 55 DF,  p-value: 5.765e-07
car::Anova(fit_exp_1_ballistography_selected)
Anova Table (Type II tests)

Response: ratio
          Sum Sq Df F value    Pr(>F)    
label     4.8154  6  9.1878 5.765e-07 ***
Residuals 4.8043 55                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

All data ANOVA

dataset_exp_1_ballistography %>%
  anova_test(ratio ~ drug)
Coefficient covariances computed by hccm()
ANOVA Table (type II tests)

  Effect DFn DFd      F        p p<.05   ges
1   drug   9 100 10.141 5.94e-11     * 0.477

All data multiple comparison (vs. control)

dataset_exp_1_ballistography %>% mutate(drug2=factor(drug)) -> dataset_exp_1_ballistography2
dataset_exp_1_ballistography2 <- data.frame(dataset_exp_1_ballistography2)
SimTestDiff(data = dataset_exp_1_ballistography2, grp = "drug2", resp = "ratio", base = 1, type = "Dunnett", covar.equal = F)  
 
Test for differences of means of multiple endpoints 
Assumption: Heterogeneous covariance matrices for the groups 
Alternative hypotheses: True differences not equal to the margins 
 
NANANA

Imidacloprid data for supplementary material Fig.S1B

fig <- ggplot(data = dataset_exp_1_ballistography_imi, mapping = aes(x=label, y=ratio)) +
  geom_hline(yintercept=1, linetype = "dotted")+
  geom_boxplot() +
  geom_quasirandom(size = 3, shape = 16, colour = "black") +
  theme_classic()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
fig
ggsave(plot = fig, filename = "exp_1_ratio_label_imi.png", dpi = 300, height = 10, width = 6, units = "cm")

Imidacloprid data linear fitting

fit_exp_1_ballistography_selected <- lm(ratio ~ label, data = dataset_exp_1_ballistography_imi)
summary(fit_exp_1_ballistography_selected)

Call:
lm(formula = ratio ~ label, data = dataset_exp_1_ballistography_imi)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.7238 -0.1692 -0.0065  0.2175  0.5436 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)    1.18063    0.08043  14.679 2.17e-14 ***
label07_imi_1 -0.28187    0.13337  -2.113 0.043951 *  
label07_imi_2 -0.59009    0.13337  -4.424 0.000143 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3009 on 27 degrees of freedom
Multiple R-squared:  0.4239,    Adjusted R-squared:  0.3812 
F-statistic: 9.934 on 2 and 27 DF,  p-value: 0.0005842
car::Anova(fit_exp_1_ballistography_selected)
Anova Table (Type II tests)

Response: ratio
          Sum Sq Df F value    Pr(>F)    
label     1.7993  2  9.9341 0.0005842 ***
Residuals 2.4452 27                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Bumetanide & VU0463271 data for supplementary material Fig.S1B

fig <- ggplot(data = dataset_exp_1_ballistography_bume_vu, mapping = aes(x=label, y=ratio)) +
  geom_hline(yintercept=1, linetype = "dotted")+
  geom_boxplot() +
  geom_quasirandom(size = 3, shape = 16, colour = "black") +
  theme_classic()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
fig
ggsave(plot = fig, filename = "exp_1_ratio_label_bume_vu.png", dpi = 300, height = 10, width = 6, units = "cm")

Bumetanide & VU0463271 data linear fitting

fit_exp_1_ballistography_selected_bumeta_vu <- lm(ratio ~ label, data = dataset_exp_1_ballistography_bume_vu)
summary(fit_exp_1_ballistography_selected_bumeta_vu)

Call:
lm(formula = ratio ~ label, data = dataset_exp_1_ballistography_bume_vu)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.72375 -0.17054 -0.03289  0.19799  0.54361 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)     1.18063    0.08848  13.343 2.11e-13 ***
label08_bume_1 -0.21975    0.14674  -1.498    0.146    
label09_vu_1    0.03569    0.14674   0.243    0.810    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3311 on 27 degrees of freedom
Multiple R-squared:  0.09874,   Adjusted R-squared:  0.03198 
F-statistic: 1.479 on 2 and 27 DF,  p-value: 0.2457
car::Anova(fit_exp_1_ballistography_selected_bumeta_vu)
Anova Table (Type II tests)

Response: ratio
           Sum Sq Df F value Pr(>F)
label     0.32425  2   1.479 0.2457
Residuals 2.95958 27               

sessionInfo

sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.3 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0

locale:
 [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8        LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8   
 [6] LC_MESSAGES=C.UTF-8    LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C           LC_TELEPHONE=C        
[11] LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   

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

other attached packages:
 [1] readxl_1.3.1     SimComp_3.3      rstatix_0.7.0    car_3.0-12       carData_3.0-5    plotrix_3.8-2    ggbeeswarm_0.6.0
 [8] forcats_0.5.1    stringr_1.4.0    dplyr_1.0.7      purrr_0.3.4      readr_2.1.1      tidyr_1.1.4      tibble_3.1.6    
[15] ggplot2_3.3.5    tidyverse_1.3.1 

loaded via a namespace (and not attached):
 [1] httr_1.4.2           jsonlite_1.7.2       splines_3.6.3        modelr_0.1.8         assertthat_0.2.1     vipor_0.4.5         
 [7] cellranger_1.1.0     yaml_2.2.1           pillar_1.6.4         backports_1.4.1      lattice_0.20-40      glue_1.6.0          
[13] digest_0.6.29        rvest_1.0.2          colorspace_2.0-2     sandwich_3.0-1       htmltools_0.5.2      Matrix_1.2-18       
[19] pkgconfig_2.0.3      broom_0.7.10         haven_2.4.3          mvtnorm_1.1-3        scales_1.1.1         tzdb_0.2.0          
[25] farver_2.1.0         generics_0.1.1       ellipsis_0.3.2       TH.data_1.1-0        withr_2.4.3          cli_3.1.0           
[31] survival_3.1-8       magrittr_2.0.1       crayon_1.4.2         evaluate_0.14        fs_1.5.2             fansi_0.5.0         
[37] MASS_7.3-51.5        xml2_1.3.3           beeswarm_0.4.0       tools_3.6.3          hms_1.1.1            lifecycle_1.0.1     
[43] multcomp_1.4-18      munsell_0.5.0        reprex_2.0.1         mratios_1.4.2        compiler_3.6.3       jquerylib_0.1.4     
[49] survPresmooth_1.1-11 rlang_0.4.12         grid_3.6.3           rstudioapi_0.13      labeling_0.4.2       rmarkdown_2.11      
[55] gtable_0.3.0         codetools_0.2-16     abind_1.4-5          DBI_1.1.1            R6_2.5.1             zoo_1.8-9           
[61] lubridate_1.8.0      knitr_1.37           fastmap_1.1.0        utf8_1.2.2           stringi_1.7.6        Rcpp_1.0.7          
[67] vctrs_0.3.8          dbplyr_2.1.1         tidyselect_1.1.1     xfun_0.29           
LS0tCnRpdGxlOiAiQk1fcHJvamVjdF9leHBfMV9iYWxsaXN0b2dyYXBoeSIKb3V0cHV0OiBodG1sX25vdGVib29rCmF1dGhvcjogIlRvc2hpeWEgTWF0c3VzaGltYSIKZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpKWAiCi0tLQoKIyBMaWJyYXJpZXMKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZ2diZWVzd2FybSkKbGlicmFyeShwbG90cml4KQpsaWJyYXJ5KGNhcikKbGlicmFyeShyc3RhdGl4KQpsaWJyYXJ5KFNpbUNvbXApCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGRwbHlyKQpgYGAKCgojIERhdGFzZXRzCmBgYHtyfQpkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5IDwtIHJlYWRfZXhjZWwgKHBhdGggPSAiL21udC9jL1VzZXJzL1Rvc2hpeWEgTWF0c3VzaGltYS9PbmVEcml2ZS9SIHByb2plY3RzL0JNX3Byb2plY3QvZGF0YSBhbmFseXNpcyB1c2luZyBSc3R1ZGlvL0JNX3Byb2plY3RfZGF0YXNldC54bHN4Iiwgc2hlZXQgPSAiZXhwXzFfM19iYWxsaXN0b2dyYXBoeSIpCmRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHlfZmlnIDwtIGZpbHRlcihkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5LCBmaWdfZGF0YSA9PSAxKQpkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X2ltaSA8LSBmaWx0ZXIoZGF0YXNldF9leHBfMV9iYWxsaXN0b2dyYXBoeSwgZHJ1ZyAlaW4lIGMoIjAwX2N0cmwiLCAiMDdfaW1pIikpCmRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHlfYnVtZV92dSA8LSBmaWx0ZXIoZGF0YXNldF9leHBfMV9iYWxsaXN0b2dyYXBoeSwgZHJ1ZyAlaW4lIGMoIjAwX2N0cmwiLCAiMDhfYnVtZSIsICIwOV92dSIpKQoKZGF0YXNldF9leHBfMV9iYWxsaXN0b2dyYXBoeQpkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X2ZpZwpkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X2ltaQpkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X2J1bWVfdnUKYGBgCgojIyBEYXRhc2V0cyBzdGF0aXN0aWNzIHN1bW1hcnkKYGBge3J9CmRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHkgJT4lIAogIGdyb3VwX2J5KGxhYmVsKSAlPiUgCiAgZ2V0X3N1bW1hcnlfc3RhdHMocmF0aW8pCgpkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X2ZpZyAlPiUgCiAgZ3JvdXBfYnkobGFiZWwpICU+JSAKICBnZXRfc3VtbWFyeV9zdGF0cyhyYXRpbykKCmRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHlfaW1pICU+JSAKICBncm91cF9ieShsYWJlbCkgJT4lIAogIGdldF9zdW1tYXJ5X3N0YXRzKHJhdGlvKQoKZGF0YXNldF9leHBfMV9iYWxsaXN0b2dyYXBoeV9idW1lX3Z1ICU+JSAKICBncm91cF9ieShsYWJlbCkgJT4lIAogIGdldF9zdW1tYXJ5X3N0YXRzKHJhdGlvKQpgYGAKCgojIEZpZ3VyZXMKIyMgYWxsIGRhdGEKYGBge3J9CmZpZyA8LSBnZ3Bsb3QoZGF0YSA9IGRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHksIG1hcHBpbmcgPSBhZXMoeD1sYWJlbCwgeT1yYXRpbykpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MSwgbGluZXR5cGUgPSAiZG90dGVkIikrCiAgZ2VvbV9ib3hwbG90KCkgKwogIGdlb21fcXVhc2lyYW5kb20oc2l6ZSA9IDIsIHNoYXBlID0gMTYsIGNvbG91ciA9ICJibGFjayIpICsKICB0aGVtZV9jbGFzc2ljKCkrCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKZmlnCmdnc2F2ZShwbG90ID0gZmlnLCBmaWxlbmFtZSA9ICJleHBfMV9yYXRpb19sYWJlbF9hbGwucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSAxMCwgd2lkdGggPSAxNSwgdW5pdHMgPSAiY20iKQpgYGAKCiMjIEFsbCBkYXRhIGxpbmVhciBmaXR0aW5nCmBgYHtyfQpmaXRfZXhwXzFfYmFsbGlzdG9ncmFwaHlfYWxsIDwtIGxtKHJhdGlvIH4gbGFiZWwsIGRhdGEgPSBkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5KQpzdW1tYXJ5KGZpdF9leHBfMV9iYWxsaXN0b2dyYXBoeV9hbGwpCmNhcjo6QW5vdmEoZml0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X2FsbCkKYGBgCgoKIyBTZWxlY3RlZCBkYXRhIGZvciBGaWcuMUMKYGBge3J9CmZpZyA8LSBnZ3Bsb3QoZGF0YSA9IGRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHlfZmlnLCBtYXBwaW5nID0gYWVzKHg9bGFiZWwsIHk9cmF0aW8pKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEsIGxpbmV0eXBlID0gImRvdHRlZCIpKwogIGdlb21fYm94cGxvdCgpICsKICBnZW9tX3F1YXNpcmFuZG9tKHNpemUgPSAzLCBzaGFwZSA9IDE2LCBjb2xvdXIgPSAiYmxhY2siKSArCiAgdGhlbWVfY2xhc3NpYygpKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpCmZpZwpnZ3NhdmUocGxvdCA9IGZpZywgZmlsZW5hbWUgPSAiZXhwXzFfcmF0aW9fbGFiZWxfc2VsZWN0ZWQucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSAxMCwgd2lkdGggPSAxMCwgdW5pdHMgPSAiY20iKQpgYGAKCgojIyBTZWxlY3RlZCBkYXRhIGxpbmVyIGZpdHRpbmcgCmBgYHtyfQpmaXRfZXhwXzFfYmFsbGlzdG9ncmFwaHlfc2VsZWN0ZWQgPC0gbG0ocmF0aW8gfiBsYWJlbCwgZGF0YSA9IGRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHlfZmlnKQpzdW1tYXJ5KGZpdF9leHBfMV9iYWxsaXN0b2dyYXBoeV9zZWxlY3RlZCkKY2FyOjpBbm92YShmaXRfZXhwXzFfYmFsbGlzdG9ncmFwaHlfc2VsZWN0ZWQpCmBgYAoKCiMjIEFsbCBkYXRhIEFOT1ZBCmBgYHtyfQpkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5ICU+JQogIGFub3ZhX3Rlc3QocmF0aW8gfiBkcnVnKQpgYGAKCgojIyBBbGwgZGF0YSBtdWx0aXBsZSBjb21wYXJpc29uICh2cy4gY29udHJvbCkKYGBge3J9CmRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHkgJT4lIG11dGF0ZShkcnVnMj1mYWN0b3IoZHJ1ZykpIC0+IGRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHkyCmRhdGFzZXRfZXhwXzFfYmFsbGlzdG9ncmFwaHkyIDwtIGRhdGEuZnJhbWUoZGF0YXNldF9leHBfMV9iYWxsaXN0b2dyYXBoeTIpClNpbVRlc3REaWZmKGRhdGEgPSBkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5MiwgZ3JwID0gImRydWcyIiwgcmVzcCA9ICJyYXRpbyIsIGJhc2UgPSAxLCB0eXBlID0gIkR1bm5ldHQiLCBjb3Zhci5lcXVhbCA9IEYpICAKYGBgCgojIyBJbWlkYWNsb3ByaWQgZGF0YSBmb3Igc3VwcGxlbWVudGFyeSBtYXRlcmlhbCBGaWcuUzFCCmBgYHtyfQpmaWcgPC0gZ2dwbG90KGRhdGEgPSBkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X2ltaSwgbWFwcGluZyA9IGFlcyh4PWxhYmVsLCB5PXJhdGlvKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdD0xLCBsaW5ldHlwZSA9ICJkb3R0ZWQiKSsKICBnZW9tX2JveHBsb3QoKSArCiAgZ2VvbV9xdWFzaXJhbmRvbShzaXplID0gMywgc2hhcGUgPSAxNiwgY29sb3VyID0gImJsYWNrIikgKwogIHRoZW1lX2NsYXNzaWMoKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQpmaWcKZ2dzYXZlKHBsb3QgPSBmaWcsIGZpbGVuYW1lID0gImV4cF8xX3JhdGlvX2xhYmVsX2ltaS5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDEwLCB3aWR0aCA9IDYsIHVuaXRzID0gImNtIikKYGBgCgojIyBJbWlkYWNsb3ByaWQgZGF0YSBsaW5lYXIgZml0dGluZwpgYGB7cn0KZml0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X3NlbGVjdGVkIDwtIGxtKHJhdGlvIH4gbGFiZWwsIGRhdGEgPSBkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X2ltaSkKc3VtbWFyeShmaXRfZXhwXzFfYmFsbGlzdG9ncmFwaHlfc2VsZWN0ZWQpCmNhcjo6QW5vdmEoZml0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X3NlbGVjdGVkKQpgYGAKCiMjIEJ1bWV0YW5pZGUgJiBWVTA0NjMyNzEgZGF0YSBmb3Igc3VwcGxlbWVudGFyeSBtYXRlcmlhbCBGaWcuUzFCCmBgYHtyfQpmaWcgPC0gZ2dwbG90KGRhdGEgPSBkYXRhc2V0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X2J1bWVfdnUsIG1hcHBpbmcgPSBhZXMoeD1sYWJlbCwgeT1yYXRpbykpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MSwgbGluZXR5cGUgPSAiZG90dGVkIikrCiAgZ2VvbV9ib3hwbG90KCkgKwogIGdlb21fcXVhc2lyYW5kb20oc2l6ZSA9IDMsIHNoYXBlID0gMTYsIGNvbG91ciA9ICJibGFjayIpICsKICB0aGVtZV9jbGFzc2ljKCkrCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKZmlnCmdnc2F2ZShwbG90ID0gZmlnLCBmaWxlbmFtZSA9ICJleHBfMV9yYXRpb19sYWJlbF9idW1lX3Z1LnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gMTAsIHdpZHRoID0gNiwgdW5pdHMgPSAiY20iKQpgYGAKCiMjIEJ1bWV0YW5pZGUgJiBWVTA0NjMyNzEgZGF0YSBsaW5lYXIgZml0dGluZwpgYGB7cn0KZml0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X3NlbGVjdGVkX2J1bWV0YV92dSA8LSBsbShyYXRpbyB+IGxhYmVsLCBkYXRhID0gZGF0YXNldF9leHBfMV9iYWxsaXN0b2dyYXBoeV9idW1lX3Z1KQpzdW1tYXJ5KGZpdF9leHBfMV9iYWxsaXN0b2dyYXBoeV9zZWxlY3RlZF9idW1ldGFfdnUpCmNhcjo6QW5vdmEoZml0X2V4cF8xX2JhbGxpc3RvZ3JhcGh5X3NlbGVjdGVkX2J1bWV0YV92dSkKYGBgCgoKIyBzZXNzaW9uSW5mbwpgYGB7cn0Kc2Vzc2lvbkluZm8oKQpgYGAK