This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

1 Loading libraries

library(dplyr)
library(ggplot2)
library(tidyverse)
library(car)
library(RcmdrMisc)
library(colorspace, pos=17)

library(nlme)
library(multcomp)

library(GoodmanKruskal)
library(gridExtra)
library(scales) # For the percent_format() function
library("cowplot")
#options(kableExtra.latex.load_packages = FALSE) 
library(kableExtra)
library(phonR)
library(grid)
library(RColorBrewer)
library(tictoc)

2 Read dataset and manipulate

2.1 Read datasets

Arabic <- read.csv("SpeakingRate24.csv") 
Vratio <- read.csv("Vratio.csv")

2.2 Manipulations

Arabic <- subset(Arabic, select = -Arabic_phrase) ### Supprimer la colonne des phrases en arabe pour éviter les problèmes avec PdfLaTex lors de la compilation LaTex R. Sinon, utiliser XeLaTex pour l'écriture arabe. 
Arabic$CVC <- gsub(' ', '', Arabic$CVC)#supprimer les espaces 
Arabic$V <- gsub(' ', '', Arabic$V)#supprimer les espaces
Arabic$Length <- gsub(' ', '', Arabic$Length)#supprimer les espaces 

Arabic$f0ons <- as.integer(gsub('--undefined--', NA, Arabic$f0ons))
Arabic$f0mid <- as.integer(gsub('--undefined--', NA, Arabic$f0mid))
Arabic$f0off <- as.integer(gsub('--undefined--', NA, Arabic$f0off))


Arabic <- dplyr::mutate_if(Arabic, is.character, as.factor) ## Transformer tous les variables de type "character" à des facteurs. 
#Arabic <- filter(Arabic, V!="e:" & V!="o:")
Arabic$V = factor(Arabic$V, levels = c('i','a','u','i:','a:','u:','e:','o:')) ## ordonner l'ordre de l'apparition V
Arabic$C <- factor(Arabic$C, levels=c("b","d","g","t","k")) ## ordonner l'ordre de l'apparition C
Arabic$VOTi <- as.integer(Arabic$VOTi)
#Arabic$Word_V_ratio <- as.numeric(gsub(',', '.', Arabic$Word_V_ratio)) #remplacer les virgules en points dans les nombres décimaux pour pouvoir faire des calculs. 

levels(Arabic$Rate) <- list("rapide" = "fast",        # Change factor levels
                            "moyen" = "normal",
                            "lent" = "slow")
levels(Arabic$Length) <- list("longue" = "long",        # Change factor levels
                              "courte" = "short")
Arabic <- dplyr::rename(Arabic, Debit = Rate, Longueur = Length)

Arabic$F1midnor <- with(Arabic, normLobanov(F1mid)) #normalisation de F1mid et F2mid
Arabic$F2midnor <- with(Arabic, normLobanov(F2mid)) #normalisation de F1mid et F2mid

Vratio <- dplyr::rename(Vratio, Debit = Rate)

### sous-ensemble 1
ArabicSub1 <- Arabic
ArabicSub1 <- ArabicSub1 %>% 
  filter(Timbre %in% c("i", "a", "u")) %>% droplevels()

### sous-ensemble 2
ArabicSub2 <- Arabic
ArabicSub2 <- ArabicSub2 %>% 
  filter(V %in% c("i", "a", "u", "e:", "u:", "a:")) %>% droplevels()

ArabicSub2$Timbre=gsub('i','e', ArabicSub2$Timbre)
ArabicSub2$Timbre=gsub('u','o', ArabicSub2$Timbre)

ArabicSub2$Timbre= as.factor(ArabicSub2$Timbre)

3 Duration

Arabic %>% 
  ggplot(aes(y = Duration, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
  geom_smooth(aes(x = as.numeric(Debit), y = Duration), method = "lm", color = "blue") +
  facet_grid(~ V)
`geom_smooth()` using formula = 'y ~
x'

4 F1midnor

Arabic %>% 
  ggplot(aes(y = F1midnor, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) + 
  geom_smooth(aes(x = as.numeric(Debit), y = F1midnor), method = "lm", color = "blue") +
  facet_grid(~ V)
`geom_smooth()` using formula = 'y ~
x'

5 F2midnor

Arabic %>% 
  ggplot(aes(y = F2midnor, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
    geom_smooth(aes(x = as.numeric(Debit), y = F2midnor), method = "lm", color = "blue") +
  facet_grid(~ V)
`geom_smooth()` using formula = 'y ~
x'

6 Word_V_ratio

Arabic %>% 
  ggplot(aes(y = Word_V_ratio, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
  geom_smooth(aes(x = as.numeric(Debit), y = Word_V_ratio), method = "lm", color = "blue") +
  facet_grid(~ V)
`geom_smooth()` using formula = 'y ~
x'

7 Vratio

Vratio %>% 
  ggplot(aes(y = Vratio, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
  facet_grid(~ Timbre)

8 F1midnor - Timbre

Arabic %>% 
  ggplot(aes(y = F1midnor, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
  geom_smooth(aes(x = as.numeric(Debit), y = F1midnor), method = "lm", color = "blue") +
  facet_grid(~ Timbre)
`geom_smooth()` using formula = 'y ~
x'

9 F2midnor - Timbre

Arabic %>% 
  ggplot(aes(y = F2midnor, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
  geom_smooth(aes(x = as.numeric(Debit), y = F2midnor), method = "lm", color = "blue") +
  facet_grid(~ Timbre)
`geom_smooth()` using formula = 'y ~
x'

10 F1midnor - Subset 1 - Timbre

ArabicSub1 %>% 
  ggplot(aes(y = F1midnor, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
  geom_smooth(aes(x = as.numeric(Debit), y = F1midnor), method = "lm", color = "blue") +
  facet_grid(~ Timbre)
`geom_smooth()` using formula = 'y ~
x'

11 F2midnor - Subset 1 - Timbre

ArabicSub1 %>% 
  ggplot(aes(y = F2midnor, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
  geom_smooth(aes(x = as.numeric(Debit), y = F2midnor), method = "lm", color = "blue") +
  facet_grid(~ Timbre)
`geom_smooth()` using formula = 'y ~
x'

12 F1midnor - Subset 2 - Timbre

ArabicSub2 %>% 
  ggplot(aes(y = F1midnor, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
  geom_smooth(aes(x = as.numeric(Debit), y = F1midnor), method = "lm", color = "blue") +
  facet_grid(~ Timbre)
`geom_smooth()` using formula = 'y ~
x'

13 F2midnor - Subset 2 - Timbre

ArabicSub2 %>% 
  ggplot(aes(y = F2midnor, x = Debit, colour = Sex)) +
  geom_violin() + 
  geom_jitter(position = position_jitter(seed = 1, width = 0.2)) +
  geom_smooth(aes(x = as.numeric(Debit), y = F2midnor), method = "lm", color = "blue") +
  facet_grid(~ Timbre)
`geom_smooth()` using formula = 'y ~
x'

14 session info

sessionInfo()
R version 4.4.1 (2024-06-14 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 10 x64 (build 19045)

Matrix products: default


locale:
[1] LC_COLLATE=English_United Kingdom.utf8 
[2] LC_CTYPE=English_United Kingdom.utf8   
[3] LC_MONETARY=English_United Kingdom.utf8
[4] LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.utf8    

time zone: Europe/Paris
tzcode source: internal

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

other attached packages:
 [1] tictoc_1.2.1        
 [2] RColorBrewer_1.1-3  
 [3] phonR_1.0-7         
 [4] kableExtra_1.4.0    
 [5] cowplot_1.1.3       
 [6] scales_1.3.0        
 [7] gridExtra_2.3       
 [8] GoodmanKruskal_0.0.3
 [9] multcomp_1.4-26     
[10] TH.data_1.1-2       
[11] MASS_7.3-61         
[12] survival_3.7-0      
[13] mvtnorm_1.2-6       
[14] nlme_3.1-166        
[15] RcmdrMisc_2.9-1     
[16] sandwich_3.1-0      
[17] car_3.1-2           
[18] carData_3.0-5       
[19] lubridate_1.9.3     
[20] forcats_1.0.0       
[21] stringr_1.5.1       
[22] purrr_1.0.2         
[23] readr_2.1.5         
[24] tidyr_1.3.1         
[25] tibble_3.2.1        
[26] tidyverse_2.0.0     
[27] ggplot2_3.5.1       
[28] dplyr_1.1.4         
[29] lmerTest_3.1-3      
[30] colorspace_2.1-1    
[31] lme4_1.1-35.5       
[32] Matrix_1.7-0        

loaded via a namespace (and not attached):
 [1] tidyselect_1.2.1   
 [2] viridisLite_0.4.2  
 [3] farver_2.1.2       
 [4] fastmap_1.2.0      
 [5] digest_0.6.37      
 [6] rpart_4.1.23       
 [7] timechange_0.3.0   
 [8] lifecycle_1.0.4    
 [9] cluster_2.1.6      
[10] magrittr_2.0.3     
[11] compiler_4.4.1     
[12] sass_0.4.9         
[13] rlang_1.1.4        
[14] Hmisc_5.1-3        
[15] tools_4.4.1        
[16] utf8_1.2.4         
[17] yaml_2.3.10        
[18] data.table_1.16.0  
[19] knitr_1.48         
[20] labeling_0.4.3     
[21] htmlwidgets_1.6.4  
[22] xml2_1.3.6         
[23] abind_1.4-5        
[24] withr_3.0.1        
[25] foreign_0.8-86     
[26] numDeriv_2016.8-1.1
[27] nnet_7.3-19        
[28] fansi_1.0.6        
[29] e1071_1.7-14       
[30] cli_3.6.3          
[31] rmarkdown_2.28     
[32] generics_0.1.3     
[33] rstudioapi_0.16.0  
[34] tzdb_0.4.0         
[35] readxl_1.4.3       
[36] cachem_1.1.0       
[37] minqa_1.2.8        
[38] proxy_0.4-27       
[39] splines_4.4.1      
[40] cellranger_1.1.0   
[41] base64enc_0.1-3    
[42] vctrs_0.6.5        
[43] boot_1.3-30        
[44] jsonlite_1.8.8     
[45] hms_1.1.3          
[46] Formula_1.2-5      
[47] htmlTable_2.4.3    
[48] systemfonts_1.1.0  
[49] nortest_1.0-4      
[50] jquerylib_0.1.4    
[51] glue_1.7.0         
[52] nloptr_2.1.1       
[53] codetools_0.2-20   
[54] stringi_1.8.4      
[55] gtable_0.3.5       
[56] munsell_0.5.1      
[57] pillar_1.9.0       
[58] htmltools_0.5.8.1  
[59] R6_2.5.1           
[60] evaluate_0.24.0    
[61] lattice_0.22-6     
[62] haven_2.5.4        
[63] backports_1.5.0    
[64] bslib_0.8.0        
[65] class_7.3-22       
[66] Rcpp_1.0.13        
[67] svglite_2.1.3      
[68] checkmate_2.3.2    
[69] mgcv_1.9-1         
[70] xfun_0.47          
[71] zoo_1.8-12         
[72] pkgconfig_2.0.3    
LS0tDQp0aXRsZTogIk1vZGVsbGluZyBBcmFiaWMgZGF0YSAtIFZpc3VhbGlzYXRpb24iDQphdXRob3I6IA0KICBuYW1lOiAiSmFsYWwgQWwtVGFtaW1pIg0KICBhZmZpbGlhdGlvbjogIlVuaXZlcnNpdMOpIFBhcmlzIENpdMOpIg0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJWQgJUIgJVknKWAiDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNg0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogdHJ1ZQ0KLS0tDQoNClRoaXMgaXMgYW4gW1IgTWFya2Rvd25dKGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20pIE5vdGVib29rLiBXaGVuIHlvdSBleGVjdXRlIGNvZGUgd2l0aGluIHRoZSBub3RlYm9vaywgdGhlIHJlc3VsdHMgYXBwZWFyIGJlbmVhdGggdGhlIGNvZGUuIA0KDQpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIA0KDQoNCiMgTG9hZGluZyBsaWJyYXJpZXMNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGNhcikNCmxpYnJhcnkoUmNtZHJNaXNjKQ0KbGlicmFyeShjb2xvcnNwYWNlLCBwb3M9MTcpDQoNCmxpYnJhcnkobmxtZSkNCmxpYnJhcnkobXVsdGNvbXApDQoNCmxpYnJhcnkoR29vZG1hbktydXNrYWwpDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmxpYnJhcnkoc2NhbGVzKSAjIEZvciB0aGUgcGVyY2VudF9mb3JtYXQoKSBmdW5jdGlvbg0KbGlicmFyeSgiY293cGxvdCIpDQojb3B0aW9ucyhrYWJsZUV4dHJhLmxhdGV4LmxvYWRfcGFja2FnZXMgPSBGQUxTRSkgDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KHBob25SKQ0KbGlicmFyeShncmlkKQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQpsaWJyYXJ5KHRpY3RvYykNCmBgYA0KDQoNCiMgUmVhZCBkYXRhc2V0IGFuZCBtYW5pcHVsYXRlDQoNCiMjIFJlYWQgZGF0YXNldHMNCg0KYGBge3J9DQpBcmFiaWMgPC0gcmVhZC5jc3YoIlNwZWFraW5nUmF0ZTI0LmNzdiIpIA0KVnJhdGlvIDwtIHJlYWQuY3N2KCJWcmF0aW8uY3N2IikNCmBgYA0KDQojIyBNYW5pcHVsYXRpb25zDQoNCmBgYHtyfQ0KQXJhYmljIDwtIHN1YnNldChBcmFiaWMsIHNlbGVjdCA9IC1BcmFiaWNfcGhyYXNlKSAjIyMgU3VwcHJpbWVyIGxhIGNvbG9ubmUgZGVzIHBocmFzZXMgZW4gYXJhYmUgcG91ciDDqXZpdGVyIGxlcyBwcm9ibMOobWVzIGF2ZWMgUGRmTGFUZXggbG9ycyBkZSBsYSBjb21waWxhdGlvbiBMYVRleCBSLiBTaW5vbiwgdXRpbGlzZXIgWGVMYVRleCBwb3VyIGwnw6ljcml0dXJlIGFyYWJlLiANCkFyYWJpYyRDVkMgPC0gZ3N1YignICcsICcnLCBBcmFiaWMkQ1ZDKSNzdXBwcmltZXIgbGVzIGVzcGFjZXMgDQpBcmFiaWMkViA8LSBnc3ViKCcgJywgJycsIEFyYWJpYyRWKSNzdXBwcmltZXIgbGVzIGVzcGFjZXMNCkFyYWJpYyRMZW5ndGggPC0gZ3N1YignICcsICcnLCBBcmFiaWMkTGVuZ3RoKSNzdXBwcmltZXIgbGVzIGVzcGFjZXMgDQoNCkFyYWJpYyRmMG9ucyA8LSBhcy5pbnRlZ2VyKGdzdWIoJy0tdW5kZWZpbmVkLS0nLCBOQSwgQXJhYmljJGYwb25zKSkNCkFyYWJpYyRmMG1pZCA8LSBhcy5pbnRlZ2VyKGdzdWIoJy0tdW5kZWZpbmVkLS0nLCBOQSwgQXJhYmljJGYwbWlkKSkNCkFyYWJpYyRmMG9mZiA8LSBhcy5pbnRlZ2VyKGdzdWIoJy0tdW5kZWZpbmVkLS0nLCBOQSwgQXJhYmljJGYwb2ZmKSkNCg0KDQpBcmFiaWMgPC0gZHBseXI6Om11dGF0ZV9pZihBcmFiaWMsIGlzLmNoYXJhY3RlciwgYXMuZmFjdG9yKSAjIyBUcmFuc2Zvcm1lciB0b3VzIGxlcyB2YXJpYWJsZXMgZGUgdHlwZSAiY2hhcmFjdGVyIiDDoCBkZXMgZmFjdGV1cnMuIA0KI0FyYWJpYyA8LSBmaWx0ZXIoQXJhYmljLCBWIT0iZToiICYgViE9Im86IikNCkFyYWJpYyRWID0gZmFjdG9yKEFyYWJpYyRWLCBsZXZlbHMgPSBjKCdpJywnYScsJ3UnLCdpOicsJ2E6JywndTonLCdlOicsJ286JykpICMjIG9yZG9ubmVyIGwnb3JkcmUgZGUgbCdhcHBhcml0aW9uIFYNCkFyYWJpYyRDIDwtIGZhY3RvcihBcmFiaWMkQywgbGV2ZWxzPWMoImIiLCJkIiwiZyIsInQiLCJrIikpICMjIG9yZG9ubmVyIGwnb3JkcmUgZGUgbCdhcHBhcml0aW9uIEMNCkFyYWJpYyRWT1RpIDwtIGFzLmludGVnZXIoQXJhYmljJFZPVGkpDQojQXJhYmljJFdvcmRfVl9yYXRpbyA8LSBhcy5udW1lcmljKGdzdWIoJywnLCAnLicsIEFyYWJpYyRXb3JkX1ZfcmF0aW8pKSAjcmVtcGxhY2VyIGxlcyB2aXJndWxlcyBlbiBwb2ludHMgZGFucyBsZXMgbm9tYnJlcyBkw6ljaW1hdXggcG91ciBwb3V2b2lyIGZhaXJlIGRlcyBjYWxjdWxzLiANCg0KbGV2ZWxzKEFyYWJpYyRSYXRlKSA8LSBsaXN0KCJyYXBpZGUiID0gImZhc3QiLCAgICAgICAgIyBDaGFuZ2UgZmFjdG9yIGxldmVscw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3llbiIgPSAibm9ybWFsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGVudCIgPSAic2xvdyIpDQpsZXZlbHMoQXJhYmljJExlbmd0aCkgPC0gbGlzdCgibG9uZ3VlIiA9ICJsb25nIiwgICAgICAgICMgQ2hhbmdlIGZhY3RvciBsZXZlbHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VydGUiID0gInNob3J0IikNCkFyYWJpYyA8LSBkcGx5cjo6cmVuYW1lKEFyYWJpYywgRGViaXQgPSBSYXRlLCBMb25ndWV1ciA9IExlbmd0aCkNCg0KQXJhYmljJEYxbWlkbm9yIDwtIHdpdGgoQXJhYmljLCBub3JtTG9iYW5vdihGMW1pZCkpICNub3JtYWxpc2F0aW9uIGRlIEYxbWlkIGV0IEYybWlkDQpBcmFiaWMkRjJtaWRub3IgPC0gd2l0aChBcmFiaWMsIG5vcm1Mb2Jhbm92KEYybWlkKSkgI25vcm1hbGlzYXRpb24gZGUgRjFtaWQgZXQgRjJtaWQNCg0KVnJhdGlvIDwtIGRwbHlyOjpyZW5hbWUoVnJhdGlvLCBEZWJpdCA9IFJhdGUpDQoNCiMjIyBzb3VzLWVuc2VtYmxlIDENCkFyYWJpY1N1YjEgPC0gQXJhYmljDQpBcmFiaWNTdWIxIDwtIEFyYWJpY1N1YjEgJT4lIA0KICBmaWx0ZXIoVGltYnJlICVpbiUgYygiaSIsICJhIiwgInUiKSkgJT4lIGRyb3BsZXZlbHMoKQ0KDQojIyMgc291cy1lbnNlbWJsZSAyDQpBcmFiaWNTdWIyIDwtIEFyYWJpYw0KQXJhYmljU3ViMiA8LSBBcmFiaWNTdWIyICU+JSANCiAgZmlsdGVyKFYgJWluJSBjKCJpIiwgImEiLCAidSIsICJlOiIsICJ1OiIsICJhOiIpKSAlPiUgZHJvcGxldmVscygpDQoNCkFyYWJpY1N1YjIkVGltYnJlPWdzdWIoJ2knLCdlJywgQXJhYmljU3ViMiRUaW1icmUpDQpBcmFiaWNTdWIyJFRpbWJyZT1nc3ViKCd1JywnbycsIEFyYWJpY1N1YjIkVGltYnJlKQ0KDQpBcmFiaWNTdWIyJFRpbWJyZT0gYXMuZmFjdG9yKEFyYWJpY1N1YjIkVGltYnJlKQ0KYGBgDQoNCiMgRHVyYXRpb24NCg0KYGBge3J9DQpBcmFiaWMgJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSBEdXJhdGlvbiwgeCA9IERlYml0LCBjb2xvdXIgPSBTZXgpKSArDQogIGdlb21fdmlvbGluKCkgKyANCiAgZ2VvbV9qaXR0ZXIocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIoc2VlZCA9IDEsIHdpZHRoID0gMC4yKSkgKw0KICBnZW9tX3Ntb290aChhZXMoeCA9IGFzLm51bWVyaWMoRGViaXQpLCB5ID0gRHVyYXRpb24pLCBtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibHVlIikgKw0KICBmYWNldF9ncmlkKH4gVikNCmBgYA0KDQojIEYxbWlkbm9yDQoNCmBgYHtyfQ0KQXJhYmljICU+JSANCiAgZ2dwbG90KGFlcyh5ID0gRjFtaWRub3IsIHggPSBEZWJpdCwgY29sb3VyID0gU2V4KSkgKw0KICBnZW9tX3Zpb2xpbigpICsgDQogIGdlb21faml0dGVyKHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHNlZWQgPSAxLCB3aWR0aCA9IDAuMikpICsgDQogIGdlb21fc21vb3RoKGFlcyh4ID0gYXMubnVtZXJpYyhEZWJpdCksIHkgPSBGMW1pZG5vciksIG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsdWUiKSArDQogIGZhY2V0X2dyaWQofiBWKQ0KYGBgDQoNCg0KIyBGMm1pZG5vcg0KDQoNCg0KYGBge3J9DQpBcmFiaWMgJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSBGMm1pZG5vciwgeCA9IERlYml0LCBjb2xvdXIgPSBTZXgpKSArDQogIGdlb21fdmlvbGluKCkgKyANCiAgZ2VvbV9qaXR0ZXIocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIoc2VlZCA9IDEsIHdpZHRoID0gMC4yKSkgKw0KICAgIGdlb21fc21vb3RoKGFlcyh4ID0gYXMubnVtZXJpYyhEZWJpdCksIHkgPSBGMm1pZG5vciksIG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsdWUiKSArDQogIGZhY2V0X2dyaWQofiBWKQ0KYGBgDQoNCg0KDQojIFdvcmRfVl9yYXRpbw0KDQoNCmBgYHtyfQ0KQXJhYmljICU+JSANCiAgZ2dwbG90KGFlcyh5ID0gV29yZF9WX3JhdGlvLCB4ID0gRGViaXQsIGNvbG91ciA9IFNleCkpICsNCiAgZ2VvbV92aW9saW4oKSArIA0KICBnZW9tX2ppdHRlcihwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcihzZWVkID0gMSwgd2lkdGggPSAwLjIpKSArDQogIGdlb21fc21vb3RoKGFlcyh4ID0gYXMubnVtZXJpYyhEZWJpdCksIHkgPSBXb3JkX1ZfcmF0aW8pLCBtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibHVlIikgKw0KICBmYWNldF9ncmlkKH4gVikNCmBgYA0KDQoNCiMgVnJhdGlvDQoNCg0KYGBge3J9DQpWcmF0aW8gJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSBWcmF0aW8sIHggPSBEZWJpdCwgY29sb3VyID0gU2V4KSkgKw0KICBnZW9tX3Zpb2xpbigpICsgDQogIGdlb21faml0dGVyKHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHNlZWQgPSAxLCB3aWR0aCA9IDAuMikpICsNCiAgZmFjZXRfZ3JpZCh+IFRpbWJyZSkNCmBgYA0KDQojIEYxbWlkbm9yIC0gVGltYnJlDQoNCg0KDQpgYGB7cn0NCkFyYWJpYyAlPiUgDQogIGdncGxvdChhZXMoeSA9IEYxbWlkbm9yLCB4ID0gRGViaXQsIGNvbG91ciA9IFNleCkpICsNCiAgZ2VvbV92aW9saW4oKSArIA0KICBnZW9tX2ppdHRlcihwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcihzZWVkID0gMSwgd2lkdGggPSAwLjIpKSArDQogIGdlb21fc21vb3RoKGFlcyh4ID0gYXMubnVtZXJpYyhEZWJpdCksIHkgPSBGMW1pZG5vciksIG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsdWUiKSArDQogIGZhY2V0X2dyaWQofiBUaW1icmUpDQpgYGANCg0KDQojIEYybWlkbm9yIC0gVGltYnJlDQoNCg0KYGBge3J9DQpBcmFiaWMgJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSBGMm1pZG5vciwgeCA9IERlYml0LCBjb2xvdXIgPSBTZXgpKSArDQogIGdlb21fdmlvbGluKCkgKyANCiAgZ2VvbV9qaXR0ZXIocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIoc2VlZCA9IDEsIHdpZHRoID0gMC4yKSkgKw0KICBnZW9tX3Ntb290aChhZXMoeCA9IGFzLm51bWVyaWMoRGViaXQpLCB5ID0gRjJtaWRub3IpLCBtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibHVlIikgKw0KICBmYWNldF9ncmlkKH4gVGltYnJlKQ0KYGBgDQoNCg0KIyBGMW1pZG5vciAtIFN1YnNldCAxIC0gVGltYnJlDQoNCg0KDQpgYGB7cn0NCkFyYWJpY1N1YjEgJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSBGMW1pZG5vciwgeCA9IERlYml0LCBjb2xvdXIgPSBTZXgpKSArDQogIGdlb21fdmlvbGluKCkgKyANCiAgZ2VvbV9qaXR0ZXIocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIoc2VlZCA9IDEsIHdpZHRoID0gMC4yKSkgKw0KICBnZW9tX3Ntb290aChhZXMoeCA9IGFzLm51bWVyaWMoRGViaXQpLCB5ID0gRjFtaWRub3IpLCBtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibHVlIikgKw0KICBmYWNldF9ncmlkKH4gVGltYnJlKQ0KYGBgDQoNCg0KIyBGMm1pZG5vciAtIFN1YnNldCAxIC0gVGltYnJlDQoNCg0KDQpgYGB7cn0NCkFyYWJpY1N1YjEgJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSBGMm1pZG5vciwgeCA9IERlYml0LCBjb2xvdXIgPSBTZXgpKSArDQogIGdlb21fdmlvbGluKCkgKyANCiAgZ2VvbV9qaXR0ZXIocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIoc2VlZCA9IDEsIHdpZHRoID0gMC4yKSkgKw0KICBnZW9tX3Ntb290aChhZXMoeCA9IGFzLm51bWVyaWMoRGViaXQpLCB5ID0gRjJtaWRub3IpLCBtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibHVlIikgKw0KICBmYWNldF9ncmlkKH4gVGltYnJlKQ0KYGBgDQoNCg0KIyBGMW1pZG5vciAtIFN1YnNldCAyIC0gVGltYnJlDQoNCg0KYGBge3J9DQpBcmFiaWNTdWIyICU+JSANCiAgZ2dwbG90KGFlcyh5ID0gRjFtaWRub3IsIHggPSBEZWJpdCwgY29sb3VyID0gU2V4KSkgKw0KICBnZW9tX3Zpb2xpbigpICsgDQogIGdlb21faml0dGVyKHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHNlZWQgPSAxLCB3aWR0aCA9IDAuMikpICsNCiAgZ2VvbV9zbW9vdGgoYWVzKHggPSBhcy5udW1lcmljKERlYml0KSwgeSA9IEYxbWlkbm9yKSwgbWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmx1ZSIpICsNCiAgZmFjZXRfZ3JpZCh+IFRpbWJyZSkNCmBgYA0KDQoNCiMgRjJtaWRub3IgLSBTdWJzZXQgMiAtIFRpbWJyZQ0KDQoNCmBgYHtyfQ0KQXJhYmljU3ViMiAlPiUgDQogIGdncGxvdChhZXMoeSA9IEYybWlkbm9yLCB4ID0gRGViaXQsIGNvbG91ciA9IFNleCkpICsNCiAgZ2VvbV92aW9saW4oKSArIA0KICBnZW9tX2ppdHRlcihwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcihzZWVkID0gMSwgd2lkdGggPSAwLjIpKSArDQogIGdlb21fc21vb3RoKGFlcyh4ID0gYXMubnVtZXJpYyhEZWJpdCksIHkgPSBGMm1pZG5vciksIG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsdWUiKSArDQogIGZhY2V0X2dyaWQofiBUaW1icmUpDQpgYGANCg0KDQojIHNlc3Npb24gaW5mbw0KDQpgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0NCnNlc3Npb25JbmZvKCkNCmBgYA0K