1 Introduction

This is the analysis of the PRICE vowel for Oxbury & McCarthy’s UKLVC12 presentation.

1.1 Inspect the data

Load packages:

library(tidyverse)
library(brms)
library(sjstats)
library(bayesplot)

Load data:

data <- read_csv("data/tidied_data.csv")
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  .default = col_double(),
  participant = col_character(),
  vowel = col_character(),
  word = col_character(),
  task = col_character(),
  fol.phonOLOG.seg = col_character(),
  fol.PHONETIC.seg = col_character(),
  age = col_character(),
  sex = col_character(),
  rol.var = col_character(),
  face.l = col_character(),
  price.l = col_character(),
  fol_seg = col_character()
)
See spec(...) for full column specifications.
str(data)
Classes ‘spec_tbl_df’, ‘tbl_df’, ‘tbl’ and 'data.frame':    11641 obs. of  63 variables:
 $ X1              : num  1 2 3 4 5 6 7 8 9 10 ...
 $ participant     : chr  "Ali" "Ali" "Ali" "Ali" ...
 $ vowel           : chr  "face" "face" "face" "face" ...
 $ word            : chr  "AGE" "AGES" "AGES" "AWAY" ...
 $ sound_start     : num  1771 1853 288 1998 116 ...
 $ sound_end       : num  1771 1853 288 1998 116 ...
 $ task            : chr  "soc.int" "soc.int" "soc.int" "soc.int" ...
 $ F1_20           : num  563 428 410 451 539 ...
 $ F1_35           : num  472 449 382 405 510 ...
 $ F1_50           : num  454 409 392 402 439 ...
 $ F1_65           : num  471 416 384 457 481 ...
 $ F1_80           : num  439 403 383 422 456 ...
 $ F2_20           : num  2147 2104 2140 1644 1882 ...
 $ F2_35           : num  2083 2178 2188 1678 1932 ...
 $ F2_50           : num  2043 2163 2216 1654 1997 ...
 $ F2_65           : num  2006 2242 2202 1616 1994 ...
 $ F2_80           : num  1990 2220 2255 1589 2023 ...
 $ fol.phonOLOG.seg: chr  "dÊ’" "dÊ’" "dÊ’" "w" ...
 $ fol.PHONETIC.seg: chr  "dÊ’" "dÊ’" "dÊ’" "w" ...
 $ lex.stress      : num  1 1 1 1 1 1 1 1 1 1 ...
 $ age             : chr  "adolescent" "adolescent" "adolescent" "adolescent" ...
 $ sex             : chr  "M" "M" "M" "M" ...
 $ meanF1          : num  480 421 390 427 485 ...
 $ meanF2          : num  2054 2181 2200 1636 1966 ...
 $ meanFleeceF1    : num  375 375 375 375 375 ...
 $ meanFleeceF2    : num  2128 2128 2128 2128 2128 ...
 $ meanTRAPF1      : num  706 706 706 706 706 ...
 $ u_F1            : num  375 375 375 375 375 ...
 $ u_F2            : num  375 375 375 375 375 ...
 $ trapF2          : num  1252 1252 1252 1252 1252 ...
 $ S_F1            : num  485 485 485 485 485 ...
 $ S_F2            : num  1252 1252 1252 1252 1252 ...
 $ normF1_20       : num  1.16 0.881 0.845 0.928 1.111 ...
 $ normF1_35       : num  0.971 0.925 0.787 0.834 1.05 ...
 $ normF1_50       : num  0.935 0.843 0.808 0.828 0.903 ...
 $ normF1_65       : num  0.971 0.856 0.79 0.942 0.991 ...
 $ normF1_80       : num  0.904 0.83 0.789 0.869 0.938 ...
 $ normF2_20       : num  1.72 1.68 1.71 1.31 1.5 ...
 $ normF2_35       : num  1.66 1.74 1.75 1.34 1.54 ...
 $ normF2_50       : num  1.63 1.73 1.77 1.32 1.6 ...
 $ normF2_65       : num  1.6 1.79 1.76 1.29 1.59 ...
 $ normF2_80       : num  1.59 1.77 1.8 1.27 1.62 ...
 $ duration        : num  0.1935 0.1485 0.1199 0.0772 0.1354 ...
 $ changeF1        : num  -124.5 -24.8 -27.3 -28.8 -83.9 ...
 $ normChangeF1    : num  -0.2564 -0.051 -0.0562 -0.0593 -0.1728 ...
 $ changeF2        : num  -156.3 116.4 115.6 -54.3 140.3 ...
 $ normChangeF2    : num  -0.1249 0.093 0.0924 -0.0434 0.1121 ...
 $ VL              : num  199.8 119 118.8 61.4 163.4 ...
 $ normVL          : num  0.2852 0.1061 0.1081 0.0735 0.206 ...
 $ normVSL1        : num  0.1953 0.0736 0.0691 0.098 0.0734 ...
 $ normVSL2        : num  0.0483 0.0828 0.0312 0.0206 0.155 ...
 $ normVSL3        : num  0.0461 0.0646 0.0213 0.1182 0.0877 ...
 $ normVSL4        : num  0.0681 0.0313 0.0428 0.0761 0.0574 ...
 $ VSL1            : num  111.5 76.9 55.4 57.3 58.2 ...
 $ VSL2            : num  43.7 42.4 30.6 24.8 95.8 ...
 $ VSL3            : num  40.7 79.5 16.9 67.2 42.6 ...
 $ VSL4            : num  36.1 25.4 53.5 44.2 38.3 ...
 $ TrajLength      : num  232 224 156 193 235 ...
 $ norm_TL         : num  0.358 0.252 0.164 0.313 0.373 ...
 $ rol.var         : chr  "n.a." "n.a." "n.a." "n.a." ...
 $ face.l          : chr  "fine" "fine" "fine" "fine" ...
 $ price.l         : chr  "n.a." "n.a." "n.a." "n.a." ...
 $ fol_seg         : chr  "fol_voiced_clus" "fol_voiced_clus" "fol_voiced_clus" "fol_approximant" ...
 - attr(*, "spec")=
  .. cols(
  ..   X1 = col_double(),
  ..   participant = col_character(),
  ..   vowel = col_character(),
  ..   word = col_character(),
  ..   sound_start = col_double(),
  ..   sound_end = col_double(),
  ..   task = col_character(),
  ..   F1_20 = col_double(),
  ..   F1_35 = col_double(),
  ..   F1_50 = col_double(),
  ..   F1_65 = col_double(),
  ..   F1_80 = col_double(),
  ..   F2_20 = col_double(),
  ..   F2_35 = col_double(),
  ..   F2_50 = col_double(),
  ..   F2_65 = col_double(),
  ..   F2_80 = col_double(),
  ..   fol.phonOLOG.seg = col_character(),
  ..   fol.PHONETIC.seg = col_character(),
  ..   lex.stress = col_double(),
  ..   age = col_character(),
  ..   sex = col_character(),
  ..   meanF1 = col_double(),
  ..   meanF2 = col_double(),
  ..   meanFleeceF1 = col_double(),
  ..   meanFleeceF2 = col_double(),
  ..   meanTRAPF1 = col_double(),
  ..   u_F1 = col_double(),
  ..   u_F2 = col_double(),
  ..   trapF2 = col_double(),
  ..   S_F1 = col_double(),
  ..   S_F2 = col_double(),
  ..   normF1_20 = col_double(),
  ..   normF1_35 = col_double(),
  ..   normF1_50 = col_double(),
  ..   normF1_65 = col_double(),
  ..   normF1_80 = col_double(),
  ..   normF2_20 = col_double(),
  ..   normF2_35 = col_double(),
  ..   normF2_50 = col_double(),
  ..   normF2_65 = col_double(),
  ..   normF2_80 = col_double(),
  ..   duration = col_double(),
  ..   changeF1 = col_double(),
  ..   normChangeF1 = col_double(),
  ..   changeF2 = col_double(),
  ..   normChangeF2 = col_double(),
  ..   VL = col_double(),
  ..   normVL = col_double(),
  ..   normVSL1 = col_double(),
  ..   normVSL2 = col_double(),
  ..   normVSL3 = col_double(),
  ..   normVSL4 = col_double(),
  ..   VSL1 = col_double(),
  ..   VSL2 = col_double(),
  ..   VSL3 = col_double(),
  ..   VSL4 = col_double(),
  ..   TrajLength = col_double(),
  ..   norm_TL = col_double(),
  ..   rol.var = col_character(),
  ..   face.l = col_character(),
  ..   price.l = col_character(),
  ..   fol_seg = col_character()
  .. )
data <- data %>% mutate(
  X1 = NULL,
  participant = factor(participant),
  vowel = factor(vowel),
  word = factor(word),
  task = factor(task),
  fol.phonOLOG.seg = factor(fol.phonOLOG.seg),
  fol.PHONETIC.seg = factor(fol.PHONETIC.seg),
  age = factor(age),
  sex = factor(sex),
  rol.var = factor(rol.var),
  face.l = factor(face.l),
  price.l = factor(price.l),
  fol_seg = factor(fol_seg)
)

Subset the key vowels:

price_trap_fleece <- data %>% filter(vowel == "price" | vowel == "fleece" | vowel=="trap")

1.2 Frequent words

Check for really frequent words:

price_trap_fleece %>% group_by(word) %>% 
  summarise(N = n()) %>% arrange(desc(N))

LIKE and I are extremely frequent, so we will remove these. These could be considered for a separate analysis.

price_no_like_I <- price_trap_fleece %>% filter(word != "LIKE",
                                                word != "I")

Check distribution of duration:

ggplot(price_no_like_I, aes(x = duration, fill = age)) + geom_histogram(bins = 100)

Filter so that duration is not more than 0.75.

price2 <- price_no_like_I %>% filter(duration < 0.75)

Try plotting again

ggplot(price2, aes(x = duration, fill = age)) + geom_histogram(bins = 100)

Looks a bit better.

1.3 Data transformations

Log-transform duration

price3 <- mutate(price2,
               LogDur = log10(duration))

… and standardize it

price3 <- mutate(price3,
               Log_dur_z = scale(LogDur))

Recode sex var so that M is the default

price3$sex <- relevel(price3$sex, ref = "M")

Recode following segment so that ‘pause’ is the reference level:

price3$fol_seg <- relevel(price3$fol_seg, ref = "fol_pause")

2 PRICE F2

Select just PRICE and TRAP:

just_price <- price3 %>% filter(vowel=="price")
price_trap <- price3 %>% filter(vowel=="price" | vowel=="trap")

Run a model. Not specifying priors for now

price_F2_m <- brm(normF2_20 ~ Log_dur_z + age*sex + fol_seg + (1|participant) + (1|word), data = just_price)
Compiling the C++ model
recompiling to avoid crashing R session
Start sampling

SAMPLING FOR MODEL '1e2e842938811e2fe81287f02925f257' NOW (CHAIN 1).
Chain 1: 
Chain 1: Gradient evaluation took 0.0006 seconds
Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 6 seconds.
Chain 1: Adjust your expectations accordingly!
Chain 1: 
Chain 1: 
Chain 1: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 1: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 1: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 1: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 1: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 1: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 1: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 1: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 1: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 1: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 1: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 1: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 1: 
Chain 1:  Elapsed Time: 34.3742 seconds (Warm-up)
Chain 1:                18.0267 seconds (Sampling)
Chain 1:                52.4009 seconds (Total)
Chain 1: 

SAMPLING FOR MODEL '1e2e842938811e2fe81287f02925f257' NOW (CHAIN 2).
Chain 2: 
Chain 2: Gradient evaluation took 0.000517 seconds
Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 5.17 seconds.
Chain 2: Adjust your expectations accordingly!
Chain 2: 
Chain 2: 
Chain 2: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 2: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 2: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 2: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 2: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 2: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 2: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 2: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 2: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 2: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 2: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 2: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 2: 
Chain 2:  Elapsed Time: 34.2707 seconds (Warm-up)
Chain 2:                17.6604 seconds (Sampling)
Chain 2:                51.9311 seconds (Total)
Chain 2: 

SAMPLING FOR MODEL '1e2e842938811e2fe81287f02925f257' NOW (CHAIN 3).
Chain 3: 
Chain 3: Gradient evaluation took 0.000568 seconds
Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 5.68 seconds.
Chain 3: Adjust your expectations accordingly!
Chain 3: 
Chain 3: 
Chain 3: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 3: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 3: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 3: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 3: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 3: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 3: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 3: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 3: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 3: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 3: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 3: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 3: 
Chain 3:  Elapsed Time: 33.8957 seconds (Warm-up)
Chain 3:                17.6197 seconds (Sampling)
Chain 3:                51.5154 seconds (Total)
Chain 3: 

SAMPLING FOR MODEL '1e2e842938811e2fe81287f02925f257' NOW (CHAIN 4).
Chain 4: 
Chain 4: Gradient evaluation took 0.000485 seconds
Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 4.85 seconds.
Chain 4: Adjust your expectations accordingly!
Chain 4: 
Chain 4: 
Chain 4: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 4: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 4: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 4: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 4: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 4: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 4: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 4: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 4: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 4: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 4: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 4: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 4: 
Chain 4:  Elapsed Time: 34.0228 seconds (Warm-up)
Chain 4:                17.7701 seconds (Sampling)
Chain 4:                51.7928 seconds (Total)
Chain 4: 

Check the model summary:

tidy_stan(price_F2_m, prob=0.89, type="fixed", digits=4)
longer object length is not a multiple of shorter object length

# Summary Statistics of Stan-Model

                           estimate std.error          HDI(89%)  ratio   rhat   mcse
 Intercept                   1.1102    0.0226 [ 1.0734  1.1450] 0.3155 1.0000 0.0006
 Log_dur_z                  -0.0206    0.0029 [-0.0255 -0.0162] 1.3128 0.9995 0.0000
 Log_dur_z                  -0.0206    0.0029 [-0.0255 -0.0162] 1.3128 0.9995 0.0000
 agechild                   -0.0851    0.0328 [-0.1429 -0.0346] 0.3141 1.0023 0.0010
 sexF                       -0.1603    0.0329 [-0.2143 -0.1085] 0.3341 1.0000 0.0009
 fol_segfol_approximant     -0.0178    0.0163 [-0.0434  0.0072] 0.6619 1.0013 0.0003
 fol_segfol_nasal           -0.0285    0.0166 [-0.0532 -0.0006] 0.5835 1.0010 0.0003
 fol_segfol_voiced_C        -0.0171    0.0145 [-0.0399  0.0078] 0.6040 1.0004 0.0003
 fol_segfol_voiced_clus     -0.0333    0.0230 [-0.0676  0.0049] 0.8671 1.0000 0.0004
 fol_segfol_voiceless_C     -0.0263    0.0153 [-0.0510 -0.0020] 0.6000 1.0010 0.0003
 fol_segfol_voiceless_clus   0.0061    0.0203 [-0.0250  0.0384] 0.7592 0.9996 0.0004
 fol_segother               -0.0033    0.0145 [-0.0266  0.0195] 0.5296 1.0017 0.0003
 agechild.sexF               0.1842    0.0506 [ 0.1026  0.2651] 0.3429 1.0000 0.0014

Equivalence test:

equivalence_test(price_F2_m, ci=0.89)
Possible multicollinearity between b_fol_segother and b_fol_segfol_approximant (r = 0.71), b_fol_segfol_voiced_C and b_fol_segfol_nasal (r = 0.75), b_fol_segfol_voiceless_C and b_fol_segfol_nasal (r = 0.73), b_fol_segother and b_fol_segfol_nasal (r = 0.77), b_fol_segfol_voiceless_C and b_fol_segfol_voiced_C (r = 0.77), b_fol_segother and b_fol_segfol_voiced_C (r = 0.82), b_fol_segother and b_fol_segfol_voiceless_C (r = 0.8). This might lead to inappropriate results. See 'Details' in '?equivalence_test'.
# Test for Practical Equivalence

  ROPE: [-0.02 0.02]

                 Parameter        H0 inside ROPE       89% HDI
                 Intercept  Rejected      0.00 % [ 1.07  1.15]
                 Log_dur_z  Rejected      0.00 % [-0.03 -0.02]
                  agechild  Rejected      0.00 % [-0.14 -0.03]
                      sexF  Rejected      0.00 % [-0.21 -0.11]
    fol_segfol_approximant Undecided     44.96 % [-0.04  0.01]
          fol_segfol_nasal Undecided     20.44 % [-0.05 -0.00]
       fol_segfol_voiced_C Undecided     45.91 % [-0.04  0.01]
    fol_segfol_voiced_clus Undecided     19.97 % [-0.07  0.00]
    fol_segfol_voiceless_C Undecided     20.39 % [-0.05 -0.00]
 fol_segfol_voiceless_clus Undecided     60.21 % [-0.02  0.04]
              fol_segother Undecided     80.03 % [-0.03  0.02]
             agechild.sexF  Rejected      0.00 % [ 0.10  0.27]

Visualise the posteriors:

price_F2_pos <- as.matrix(price_F2_m)
#dimnames(face_posterior1)
#color_scheme_set("brightblue")
mcmc_intervals(price_F2_pos,
           pars = c("b_Log_dur_z",
                    "b_agechild", 
                    "b_sexF",
                    "b_fol_segfol_nasal",
                    "b_fol_segfol_approximant",
                    "b_fol_segfol_voiced_C",
                    "b_fol_segfol_voiced_clus",
                    "b_fol_segfol_voiceless_C",
                    "b_fol_segfol_voiceless_clus",
                    "b_fol_segother",
                    "b_agechild:sexF"),
           prob=0.89) + ggplot2::theme_minimal() + ggplot2::geom_vline(xintercept=0)

mcmc_areas(price_F2_pos,
           pars = c("b_Log_dur_z",
                    "b_agechild", 
                    "b_sexF",
                    "b_fol_segfol_nasal",
                    "b_fol_segfol_approximant",
                    "b_fol_segfol_voiced_C",
                    "b_fol_segfol_voiced_clus",
                    "b_fol_segfol_voiceless_C",
                    "b_fol_segfol_voiceless_clus",
                    "b_fol_segother",
                    "b_agechild:sexF"),
           prob=0.89) + ggplot2::theme_minimal() + ggplot2::geom_vline(xintercept=0)

2.1 Summary of model

So it looks like:

  • none of the following segments have much of an effect on F2 at onset. The posterior medians are all pretty close to zero, but also in most cases, the 89% credible interval contains 0.

  • Duration has a small but pretty definitive effect on F2 at onset: a longer duration predicts a lower F2, i.e. more back nucleus to PRICE.

  • Being a child as opposed to adolescent, and female adolescent as opposed to male adolescent, predicts a lower F2 at onset. Female adolescents are predicted to have an F2 at 20% than is around 0.15 (remember, working with normalized formants) lower than the boys.

  • There is a positive age-sex interaction: female children are expected to have a higher F2 than male children. This is the opposite of the sex effect among adolescents.

2.2 F2: plot

Establish palette

vowel_cols <- c("#0072B2", "#99CCFF")
pd <- position_dodge(0.9)
x <- ggplot(just_price, aes(x = sex, y = normF2_20, fill=sex)) + facet_grid(cols = vars(age)) +
  geom_boxplot(width = 0.3, position = position_dodge(0.9)) + 
  theme_minimal() +
  scale_fill_manual(values = vowel_cols) +
   theme(legend.title = element_blank(),
        strip.text = element_text(size = rel(2)),
        legend.text = element_blank(),
        axis.title = element_text(size = rel(2)), 
        axis.text = element_text(size = rel(2)), 
        plot.title = element_text(size = rel(2.5))) +
  labs(x = "Age", y = "Normalized F2", title = "PRICE: F2 at 20%")
x

3 F2: PRICE and TRAP

Here, we compare the F2 of PRICE at its onset to the F2 of TRAP. The logic is that in Cockney or RP, TRAP is central/front, while PRICE has a back onset; but then in MLE, the onsets of PRICE and TRAP are pretty similar and pretty central.

Check that the reference vowel is price:

price_trap$vowel <- relevel(price_trap$vowel, ref = "price")

Run the model:

price_trap_m <- brm(normF2_20 ~ Log_dur_z + vowel*age*sex + fol_seg + (1+vowel|participant) + (1|word), data = price_trap)
Compiling the C++ model
Start sampling

SAMPLING FOR MODEL '97662c0437317ce5ce93b02827263cfe' NOW (CHAIN 1).
Chain 1: 
Chain 1: Gradient evaluation took 0.001139 seconds
Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 11.39 seconds.
Chain 1: Adjust your expectations accordingly!
Chain 1: 
Chain 1: 
Chain 1: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 1: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 1: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 1: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 1: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 1: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 1: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 1: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 1: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 1: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 1: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 1: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 1: 
Chain 1:  Elapsed Time: 58.0205 seconds (Warm-up)
Chain 1:                32.814 seconds (Sampling)
Chain 1:                90.8345 seconds (Total)
Chain 1: 

SAMPLING FOR MODEL '97662c0437317ce5ce93b02827263cfe' NOW (CHAIN 2).
Chain 2: 
Chain 2: Gradient evaluation took 0.000874 seconds
Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 8.74 seconds.
Chain 2: Adjust your expectations accordingly!
Chain 2: 
Chain 2: 
Chain 2: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 2: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 2: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 2: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 2: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 2: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 2: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 2: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 2: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 2: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 2: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 2: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 2: 
Chain 2:  Elapsed Time: 71.9545 seconds (Warm-up)
Chain 2:                30.8979 seconds (Sampling)
Chain 2:                102.852 seconds (Total)
Chain 2: 

SAMPLING FOR MODEL '97662c0437317ce5ce93b02827263cfe' NOW (CHAIN 3).
Chain 3: 
Chain 3: Gradient evaluation took 0.000678 seconds
Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 6.78 seconds.
Chain 3: Adjust your expectations accordingly!
Chain 3: 
Chain 3: 
Chain 3: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 3: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 3: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 3: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 3: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 3: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 3: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 3: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 3: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 3: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 3: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 3: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 3: 
Chain 3:  Elapsed Time: 68.7824 seconds (Warm-up)
Chain 3:                31.1332 seconds (Sampling)
Chain 3:                99.9157 seconds (Total)
Chain 3: 

SAMPLING FOR MODEL '97662c0437317ce5ce93b02827263cfe' NOW (CHAIN 4).
Chain 4: 
Chain 4: Gradient evaluation took 0.000788 seconds
Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 7.88 seconds.
Chain 4: Adjust your expectations accordingly!
Chain 4: 
Chain 4: 
Chain 4: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 4: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 4: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 4: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 4: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 4: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 4: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 4: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 4: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 4: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 4: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 4: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 4: 
Chain 4:  Elapsed Time: 62.676 seconds (Warm-up)
Chain 4:                29.3766 seconds (Sampling)
Chain 4:                92.0526 seconds (Total)
Chain 4: 

Check the model summary:

tidy_stan(price_trap_m, prob=0.89, type="fixed", digits=4)
longer object length is not a multiple of shorter object length

# Summary Statistics of Stan-Model

                           estimate std.error          HDI(89%)  ratio   rhat   mcse
 Intercept                   1.1107    0.0233 [ 1.0728  1.1450] 0.1923 1.0041 0.0008
 Log_dur_z                  -0.0190    0.0027 [-0.0231 -0.0145] 1.2914 0.9993 0.0000
 Log_dur_z                  -0.0190    0.0027 [-0.0231 -0.0145] 1.2914 0.9993 0.0000
 voweltrap                  -0.0182    0.0193 [-0.0521  0.0117] 0.5536 0.9997 0.0004
 agechild                   -0.0894    0.0339 [-0.1466 -0.0373] 0.1937 1.0020 0.0012
 sexF                       -0.1631    0.0334 [-0.2170 -0.1054] 0.1897 1.0062 0.0012
 fol_segfol_approximant     -0.0167    0.0154 [-0.0393  0.0098] 0.4119 1.0002 0.0004
 fol_segfol_nasal           -0.0263    0.0157 [-0.0507 -0.0003] 0.3352 1.0003 0.0004
 fol_segfol_voiced_C        -0.0164    0.0143 [-0.0386  0.0074] 0.3712 1.0002 0.0004
 fol_segfol_voiced_clus     -0.0312    0.0222 [-0.0679  0.0042] 0.5691 1.0002 0.0005
 fol_segfol_voiceless_C     -0.0242    0.0146 [-0.0478  0.0000] 0.3849 0.9996 0.0004
 fol_segfol_voiceless_clus   0.0086    0.0198 [-0.0238  0.0392] 0.5419 1.0003 0.0004
 fol_segother               -0.0016    0.0144 [-0.0232  0.0217] 0.3358 1.0005 0.0004
 voweltrap.agechild          0.0356    0.0267 [-0.0095  0.0783] 0.5515 1.0006 0.0006
 voweltrap.sexF              0.0788    0.0289 [ 0.0289  0.1225] 0.6586 1.0001 0.0006
 agechild.sexF               0.1888    0.0538 [ 0.1061  0.2737] 0.2289 1.0035 0.0018
 voweltrap.agechild.sexF    -0.0741    0.0419 [-0.1470 -0.0096] 0.5786 1.0004 0.0009

Visualise the posteriors:

price_trap_pos <- as.matrix(price_trap_m)
#dimnames(price_trap_pos)
mcmc_intervals(price_trap_pos,
           pars = c("b_Log_dur_z",
                    "b_voweltrap",
                    "b_agechild", 
                    "b_sexF",
                    "b_agechild:sexF",
                    "b_voweltrap:agechild",
                    "b_voweltrap:sexF",
                    "b_agechild:sexF",
                    "b_voweltrap:agechild:sexF"),
           prob=0.89) + ggplot2::theme_minimal() + ggplot2::geom_vline(xintercept=0)

mcmc_areas(price_trap_pos,
           pars = c("b_Log_dur_z",
                    "b_voweltrap",
                    "b_agechild", 
                    "b_sexF",
                    "b_agechild:sexF",
                    "b_voweltrap:agechild",
                    "b_voweltrap:sexF",
                    "b_agechild:sexF",
                    "b_voweltrap:agechild:sexF"),
           prob=0.89) + ggplot2::theme_minimal() + ggplot2::geom_vline(xintercept=0)

3.1 Summary of model

From the model comparing PRICE and TRAP, it seems:

  • The vowel TRAP has a median F2 actually slightly lower than PRICE – whereas in Cockney or RP, we would expect TRAP to have a higher F2. This is a very small effect and the credible interval contains 0, so basically in frequentist terms, there isn’t a significant difference between PRICE and TRAP. In fact, if there is an effect (we think there isn’t), it’s in the opposite direction to what we would have predicted!

  • Looking at the voweltrap:agechild interaction: -0.02 + 0.04 = 0.02; male children seem to have a TRAP vowel that is more front than PRICE, based on the posterior median. This effect isn’t very robust though, as the 89% credible interval contains 0.

  • Looking at the voweltrap:sexF interaction: -0.02 + 0.08 = 0.06; female adolescents seem to have a TRAP vowel that is more front than PRICE. You can see from the graphs that the 89% credible interval does not contain 0; however, when you look at the posterior distribution in the mcmc_areas graph, the distribution does cross the 0 line. But when we plot PRICE and TRAP in a boxplot in a moment, you’ll see that female adolescents do indeed seem to have a separation between PRICE and TRAP.

  • Now the voweltrap.agechild.sexF interaction: -0.02 + 0.04 - 0.07 = -0.05; female children seem to have a TRAP vowel that is more back than PRICE – by a very tiny amount. This effect isn’t very robust though: the posterior is fairly wide and contains 0.

3.2 Random slopes

We can also have a look at the random slopes for this model.

#dimnames(price_trap_pos)
mcmc_intervals(price_trap_pos,
           pars = c("r_participant[Ali,voweltrap]",
                    "r_participant[Amanda,voweltrap]",
                    "r_participant[CB,voweltrap]",
                    "r_participant[Chantelle,voweltrap]",
                    "r_participant[ChrisB,voweltrap]",
                    "r_participant[Daniel,voweltrap]",
                    "r_participant[Denzel,voweltrap]",
                    "r_participant[F1,voweltrap]",
                    "r_participant[F10,voweltrap]",
                    "r_participant[F3,voweltrap]",
                    "r_participant[F4,voweltrap]",
                    "r_participant[F7,voweltrap]",
                    "r_participant[F8,voweltrap]",
                    "r_participant[F9,voweltrap]",
                    "r_participant[GW,voweltrap]",
                    "r_participant[Ibrahim,voweltrap]",
                    "r_participant[Jessica,voweltrap]",
                    "r_participant[Joe,voweltrap]",
                    "r_participant[Kai,voweltrap]",
                    "r_participant[Khadir,voweltrap]",
                    "r_participant[Lola,voweltrap]",
                    "r_participant[Lucy,voweltrap]",
                    "r_participant[M1,voweltrap]",
                    "r_participant[M3,voweltrap]",
                    "r_participant[M4,voweltrap]",
                    "r_participant[M5,voweltrap]",
                    "r_participant[M6,voweltrap]",
                    "r_participant[M7,voweltrap]",
                    "r_participant[M8,voweltrap]",
                    "r_participant[Matisse,voweltrap]",
                    "r_participant[Moses,voweltrap]",
                    "r_participant[Omar,voweltrap]",
                    "r_participant[Sami,voweltrap]",
                    "r_participant[SD,voweltrap]",
                    "r_participant[Shantel,voweltrap]",
                    "r_participant[Tariq,voweltrap]",
                    "r_participant[Tony,voweltrap]",
                    "r_participant[ZR,voweltrap]"),
           prob=0.89) + ggplot2::theme_minimal() + ggplot2::geom_vline(xintercept=0)

mcmc_areas(price_trap_pos,
           pars = c("r_participant[Ali,voweltrap]",
                    "r_participant[Amanda,voweltrap]",
                    "r_participant[CB,voweltrap]",
                    "r_participant[Chantelle,voweltrap]",
                    "r_participant[ChrisB,voweltrap]",
                    "r_participant[Daniel,voweltrap]",
                    "r_participant[Denzel,voweltrap]",
                    "r_participant[F1,voweltrap]",
                    "r_participant[F10,voweltrap]",
                    "r_participant[F3,voweltrap]",
                    "r_participant[F4,voweltrap]",
                    "r_participant[F7,voweltrap]",
                    "r_participant[F8,voweltrap]",
                    "r_participant[F9,voweltrap]",
                    "r_participant[GW,voweltrap]",
                    "r_participant[Ibrahim,voweltrap]",
                    "r_participant[Jessica,voweltrap]",
                    "r_participant[Joe,voweltrap]",
                    "r_participant[Kai,voweltrap]",
                    "r_participant[Khadir,voweltrap]",
                    "r_participant[Lola,voweltrap]",
                    "r_participant[Lucy,voweltrap]",
                    "r_participant[M1,voweltrap]",
                    "r_participant[M3,voweltrap]",
                    "r_participant[M4,voweltrap]",
                    "r_participant[M5,voweltrap]",
                    "r_participant[M6,voweltrap]",
                    "r_participant[M7,voweltrap]",
                    "r_participant[M8,voweltrap]",
                    "r_participant[Matisse,voweltrap]",
                    "r_participant[Moses,voweltrap]",
                    "r_participant[Omar,voweltrap]",
                    "r_participant[Sami,voweltrap]",
                    "r_participant[SD,voweltrap]",
                    "r_participant[Shantel,voweltrap]",
                    "r_participant[Tariq,voweltrap]",
                    "r_participant[Tony,voweltrap]",
                    "r_participant[ZR,voweltrap]"),
           prob=0.89) + ggplot2::theme_minimal() + ggplot2::geom_vline(xintercept=0)

3.3 PRICE and TRAP boxplot

Establish palette:

vowel_cols <- c("#0072B2", "#D55E00")
pd <- position_dodge(0.9)
x2 <- ggplot(price_trap,
             aes(x = sex,
                 y = normF2_20,
                 fill = vowel)) + 
  facet_grid(cols = vars(age)) +
  geom_boxplot(width = 0.3, position = pd) + 
  theme_minimal() + 
  scale_fill_manual(values = vowel_cols) + 
  theme(legend.title = element_text(size = rel(1.5)),
        strip.text = element_text(size = rel(1.5)),
        legend.text = element_text(size = rel(1.5)),
        axis.title = element_text(size = rel(1.5)), 
        axis.text = element_text(size = rel(1.5)), 
        plot.title = element_text(size = rel(2))) +
  labs(x = "Age", y = "Normalized F2", title = "PRICE: F2 at 20%")
x2

This boxplot shows that adolescent females tend to have a more front TRAP than PRICE.

4 PRICE Trajectory Length

We’re going to look at Trajectory Length now, so we’ll subset out PRICE and FLEECE – the logic being that we want to compare the Trajectory Length of PRICE, which is supposed to be a diphthong, with FLEECE, which is supposed to be a monophthong.

price_fleece <- price3 %>% filter(vowel=="price" | vowel =="fleece")

Check distribution of duration

ggplot(price_fleece, aes(x = norm_TL, fill=vowel)) + geom_histogram(bins = 100)

Get rid of outliers

price_fleece2 <- price_fleece %>% filter(norm_TL <2.1)

Set vowel reference level to price:

price_fleece2$vowel <- relevel(price_fleece2$vowel, ref = "price")

Build the model:

price_traj_m <- brm(norm_TL ~ Log_dur_z + vowel*age*sex + fol_seg + (1+vowel|participant) + (1|word), data = price_fleece2)
Compiling the C++ model
recompiling to avoid crashing R session
Start sampling

SAMPLING FOR MODEL 'd93beac45d3bb02918b6ac08195de742' NOW (CHAIN 1).
Chain 1: 
Chain 1: Gradient evaluation took 0.001181 seconds
Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 11.81 seconds.
Chain 1: Adjust your expectations accordingly!
Chain 1: 
Chain 1: 
Chain 1: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 1: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 1: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 1: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 1: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 1: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 1: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 1: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 1: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 1: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 1: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 1: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 1: 
Chain 1:  Elapsed Time: 47.9536 seconds (Warm-up)
Chain 1:                14.7824 seconds (Sampling)
Chain 1:                62.736 seconds (Total)
Chain 1: 

SAMPLING FOR MODEL 'd93beac45d3bb02918b6ac08195de742' NOW (CHAIN 2).
Chain 2: 
Chain 2: Gradient evaluation took 0.000986 seconds
Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 9.86 seconds.
Chain 2: Adjust your expectations accordingly!
Chain 2: 
Chain 2: 
Chain 2: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 2: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 2: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 2: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 2: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 2: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 2: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 2: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 2: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 2: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 2: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 2: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 2: 
Chain 2:  Elapsed Time: 44.8161 seconds (Warm-up)
Chain 2:                17.332 seconds (Sampling)
Chain 2:                62.1481 seconds (Total)
Chain 2: 

SAMPLING FOR MODEL 'd93beac45d3bb02918b6ac08195de742' NOW (CHAIN 3).
Chain 3: 
Chain 3: Gradient evaluation took 0.000956 seconds
Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 9.56 seconds.
Chain 3: Adjust your expectations accordingly!
Chain 3: 
Chain 3: 
Chain 3: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 3: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 3: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 3: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 3: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 3: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 3: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 3: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 3: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 3: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 3: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 3: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 3: 
Chain 3:  Elapsed Time: 51.8732 seconds (Warm-up)
Chain 3:                19.2022 seconds (Sampling)
Chain 3:                71.0754 seconds (Total)
Chain 3: 

SAMPLING FOR MODEL 'd93beac45d3bb02918b6ac08195de742' NOW (CHAIN 4).
Chain 4: 
Chain 4: Gradient evaluation took 0.000905 seconds
Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 9.05 seconds.
Chain 4: Adjust your expectations accordingly!
Chain 4: 
Chain 4: 
Chain 4: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 4: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 4: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 4: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 4: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 4: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 4: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 4: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 4: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 4: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 4: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 4: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 4: 
Chain 4:  Elapsed Time: 54.3576 seconds (Warm-up)
Chain 4:                16.6103 seconds (Sampling)
Chain 4:                70.9679 seconds (Total)
Chain 4: 

Model summary:

tidy_stan(price_traj_m, prob=0.89, type="fixed", digits=4)
longer object length is not a multiple of shorter object length

# Summary Statistics of Stan-Model

                           estimate std.error          HDI(89%)  ratio   rhat   mcse
 Intercept                   0.4097    0.0325 [ 0.3566  0.4599] 0.2131 1.0019 0.0011
 Log_dur_z                   0.1262    0.0052 [ 0.1176  0.1347] 1.2704 0.9998 0.0001
 Log_dur_z                   0.1262    0.0052 [ 0.1176  0.1347] 1.2704 0.9998 0.0001
 vowelfleece                -0.0762    0.0343 [-0.1285 -0.0179] 0.4352 1.0022 0.0008
 agechild                    0.2718    0.0385 [ 0.2072  0.3318] 0.2251 1.0022 0.0013
 sexF                        0.0837    0.0357 [ 0.0253  0.1409] 0.2112 1.0051 0.0013
 fol_segfol_approximant      0.0303    0.0306 [-0.0201  0.0796] 0.4187 1.0003 0.0008
 fol_segfol_nasal            0.0464    0.0309 [-0.0022  0.0936] 0.3207 1.0016 0.0008
 fol_segfol_voiced_C         0.0705    0.0276 [ 0.0256  0.1150] 0.3063 1.0018 0.0008
 fol_segfol_voiced_clus      0.0579    0.0431 [-0.0043  0.1341] 0.4907 1.0011 0.0010
 fol_segfol_voiceless_C      0.0407    0.0288 [-0.0070  0.0846] 0.3213 1.0014 0.0008
 fol_segfol_voiceless_clus   0.0228    0.0374 [-0.0365  0.0847] 0.3956 1.0029 0.0010
 fol_segother                0.0124    0.0277 [-0.0308  0.0559] 0.3217 1.0016 0.0008
 vowelfleece.agechild       -0.2743    0.0500 [-0.3558 -0.1927] 0.3942 1.0012 0.0013
 vowelfleece.sexF           -0.0258    0.0513 [-0.1088  0.0537] 0.4687 1.0018 0.0012
 agechild.sexF              -0.1142    0.0548 [-0.2064 -0.0224] 0.2209 1.0019 0.0020
 vowelfleece.agechild.sexF   0.0316    0.0740 [-0.0869  0.1530] 0.4348 1.0005 0.0018

Visualise these effects

price_traj_pos <- as.matrix(price_traj_m)
#dimnames(price_traj_pos)
mcmc_areas(price_traj_pos,
           pars = c("b_Log_dur_z",
                    "b_vowelfleece",
                    "b_agechild", 
                    "b_sexF",
                    "b_fol_segfol_approximant",
                    "b_fol_segfol_nasal",
                    "b_fol_segfol_voiced_C",
                    "b_fol_segfol_voiced_clus",
                    "b_fol_segfol_voiceless_C",
                    "b_fol_segfol_voiceless_clus",
                    "b_fol_segother",
                    "b_vowelfleece:agechild",
                    "b_vowelfleece:sexF",
                    "b_agechild:sexF",
                    "b_vowelfleece:agechild:sexF"),
           prob=0.89) + ggplot2::theme_minimal() + ggplot2::geom_vline(xintercept=0)

mcmc_intervals(price_traj_pos,
           pars = c("b_Log_dur_z",
                    "b_vowelfleece",
                    "b_agechild", 
                    "b_sexF",
                    "b_fol_segfol_approximant",
                    "b_fol_segfol_nasal",
                    "b_fol_segfol_voiced_C",
                    "b_fol_segfol_voiced_clus",
                    "b_fol_segfol_voiceless_C",
                    "b_fol_segfol_voiceless_clus",
                    "b_fol_segother",
                    "b_vowelfleece:agechild",
                    "b_vowelfleece:sexF",
                    "b_agechild:sexF",
                    "b_vowelfleece:agechild:sexF"),
           prob=0.89) + ggplot2::theme_minimal() + ggplot2::geom_vline(xintercept=0)

4.1 Summary of model

What this tells us is that:

  • An increase in duration predicts an increase in Trajectory Length (unsurprisingly)

  • FLEECE tends to have a shorter TL than PRICE - by about 0.08. The 89% credible interval does not contain 0 (though the posterior distribution, i.e. the 100% credible interval, does): this is important because it means that even adolescent males, who tend to lead in monophthongization, robustly have a PRICE vowel that is more diphthongal than their FLEECE vowel. By contrast, we found that for FACE and GOAT, the adolescent boys don’t seem to have a FACE or GOAT vowel that is any more diphthongal than their FLEECE.

  • Being a child as opposed to adolescent predicts a greater TL, by about 0.27 – this is quite a big effect. This effect is pretty robust: the posterior does not contain 0. So, children are much more diphthongal than adolescents (take a look at the boxplot below!)

  • Being a female adolescent as opposed to male adolescent predicts a greater TL by about 0.08. The 89% credible interval does not contain 0, though the posterior distribution does.

  • Age-sex interaction: 0.27 - 0.1142 = 0.1558, i.e. female children have a smaller TL than male children by about 0.11 / female children have a greater TL than male adolescents by about 0.16. However you want to put it! The 89% credible interval on this interaction term does not contain 0, but notice that the posterior distribution (the 100% credible interval!) does contain 0.

  • Most following segments predict a greater TL compared to following pause – so following pause predicts a more monophthongal realization? These effects are pretty small – less than 0.01 – and for all except following voiced consonant, the 89% credible interval contains 0.

  • There is a negative vowelfleece:agechild interaction: -0.08 - 0.27 = -0.35: for children, the TL of FLEECE tends to be about 0.35 less than the TL of PRICE.

  • vowelfleece.sexF interaction: -0.08 -0.03 = -0.11: For adolescent girls, FLEECE has a shorter TL than PRICE by about 0.11. This effect isn’t robust: 89% credible interval contains 0, so it’s possible that the difference between FLEECE’s TL and PRICE’s TL for adolescent girls isn’t any different from what it is for adolescent boys. It’s possible that the interaction is actually -0.08 + 0.0537 = -0.03, i.e. for adolescent girls, the difference between FLEECE and PRICE is actually less than what it is for adolescent boys.

  • vowelfleece.agechild.sexF: this posterior is also very wide, with the 89% credible interval containing 0, so we wouldn’t want to conclude that the difference between FLEECE and PRICE for female children is any different from what it is for male children.

4.2 Boxplot of PRICE Traj

price_fleece_cols <- c("#0072B2", "#E69F00")
z <- ggplot(price_fleece2, aes(x = sex, y = norm_TL, fill = vowel)) + facet_grid(cols = vars(age)) +
  geom_boxplot(width = 0.3, position = position_dodge(0.9)) + 
  theme_minimal() + 
  scale_fill_manual(values = price_fleece_cols) + 
   theme(legend.title = element_text(size = rel(2)),
        strip.text = element_text(size = rel(2)),
        legend.text = element_text(size = rel(2)),
        axis.title = element_text(size = rel(2)), 
        axis.text = element_text(size = rel(2)), 
        plot.title = element_text(size = rel(2.5))) +
  labs(x = "Age", y = "Trajectory Length", title = "PRICE: Trajectory Length") +
  ylim(0, 2)
z

price_fleece_cols <- c("#0072B2", "#E69F00")
transparency <- c(1, 0.2)
faded <- c("#000000", "#CCCCCC")
z2 <- ggplot(price_fleece2, aes(x = sex, y = norm_TL, fill = vowel, alpha=vowel)) + facet_grid(cols = vars(age)) +
  geom_boxplot(aes(colour=vowel), width = 0.3, position = position_dodge(0.9)) + 
  theme_minimal() + 
   scale_colour_manual(values = faded) +
  scale_fill_manual(values = price_fleece_cols) + 
  scale_alpha_manual(values = transparency) + 
   theme(legend.title = element_text(size = rel(2)),
        strip.text = element_text(size = rel(2)),
        legend.text = element_text(size = rel(2)),
        axis.title = element_text(size = rel(2)), 
        axis.text = element_text(size = rel(2)), 
        plot.title = element_text(size = rel(2.5))) +
  labs(x = "Age", y = "Trajectory Length", title = "PRICE: Trajectory Length") +
  ylim(0, 2)
z2

LS0tCnRpdGxlOiAiVUtMVkMgYW5hbHlzaXM6IFBSSUNFIgphdXRob3I6ICJSb3NpZSBPeGJ1cnkiCmRhdGU6ICJTZXB0ZW1iZXIgMjAxOSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICB0b2NfZGVwdGg6IDMKLS0tCgojIEludHJvZHVjdGlvbgoKVGhpcyBpcyB0aGUgYW5hbHlzaXMgb2YgdGhlIFBSSUNFIHZvd2VsIGZvciBPeGJ1cnkgJiBNY0NhcnRoeSdzIFVLTFZDMTIgcHJlc2VudGF0aW9uLgoKIyMgSW5zcGVjdCB0aGUgZGF0YQpMb2FkIHBhY2thZ2VzOgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoYnJtcykKbGlicmFyeShzanN0YXRzKQpsaWJyYXJ5KGJheWVzcGxvdCkKYGBgCgpMb2FkIGRhdGE6CmBgYHtyfQpkYXRhIDwtIHJlYWRfY3N2KCJkYXRhL3RpZGllZF9kYXRhLmNzdiIpCgpzdHIoZGF0YSkKCmRhdGEgPC0gZGF0YSAlPiUgbXV0YXRlKAogIFgxID0gTlVMTCwKICBwYXJ0aWNpcGFudCA9IGZhY3RvcihwYXJ0aWNpcGFudCksCiAgdm93ZWwgPSBmYWN0b3Iodm93ZWwpLAogIHdvcmQgPSBmYWN0b3Iod29yZCksCiAgdGFzayA9IGZhY3Rvcih0YXNrKSwKICBmb2wucGhvbk9MT0cuc2VnID0gZmFjdG9yKGZvbC5waG9uT0xPRy5zZWcpLAogIGZvbC5QSE9ORVRJQy5zZWcgPSBmYWN0b3IoZm9sLlBIT05FVElDLnNlZyksCiAgYWdlID0gZmFjdG9yKGFnZSksCiAgc2V4ID0gZmFjdG9yKHNleCksCiAgcm9sLnZhciA9IGZhY3Rvcihyb2wudmFyKSwKICBmYWNlLmwgPSBmYWN0b3IoZmFjZS5sKSwKICBwcmljZS5sID0gZmFjdG9yKHByaWNlLmwpLAogIGZvbF9zZWcgPSBmYWN0b3IoZm9sX3NlZykKKQpgYGAKClN1YnNldCB0aGUga2V5IHZvd2VsczoKYGBge3J9CnByaWNlX3RyYXBfZmxlZWNlIDwtIGRhdGEgJT4lIGZpbHRlcih2b3dlbCA9PSAicHJpY2UiIHwgdm93ZWwgPT0gImZsZWVjZSIgfCB2b3dlbD09InRyYXAiKQpgYGAKCiMjIEZyZXF1ZW50IHdvcmRzCkNoZWNrIGZvciByZWFsbHkgZnJlcXVlbnQgd29yZHM6CmBgYHtyfQpwcmljZV90cmFwX2ZsZWVjZSAlPiUgZ3JvdXBfYnkod29yZCkgJT4lIAogIHN1bW1hcmlzZShOID0gbigpKSAlPiUgYXJyYW5nZShkZXNjKE4pKQpgYGAKTElLRSBhbmQgSSBhcmUgZXh0cmVtZWx5IGZyZXF1ZW50LCBzbyB3ZSB3aWxsIHJlbW92ZSB0aGVzZS4gVGhlc2UgY291bGQgYmUgY29uc2lkZXJlZCBmb3IgYSBzZXBhcmF0ZSBhbmFseXNpcy4KCmBgYHtyfQpwcmljZV9ub19saWtlX0kgPC0gcHJpY2VfdHJhcF9mbGVlY2UgJT4lIGZpbHRlcih3b3JkICE9ICJMSUtFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCAhPSAiSSIpCmBgYAoKQ2hlY2sgZGlzdHJpYnV0aW9uIG9mIGR1cmF0aW9uOgpgYGB7cn0KZ2dwbG90KHByaWNlX25vX2xpa2VfSSwgYWVzKHggPSBkdXJhdGlvbiwgZmlsbCA9IGFnZSkpICsgZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDEwMCkKYGBgCkZpbHRlciBzbyB0aGF0IGR1cmF0aW9uIGlzIG5vdCBtb3JlIHRoYW4gMC43NS4KYGBge3J9CnByaWNlMiA8LSBwcmljZV9ub19saWtlX0kgJT4lIGZpbHRlcihkdXJhdGlvbiA8IDAuNzUpCmBgYApUcnkgcGxvdHRpbmcgYWdhaW4KYGBge3J9CmdncGxvdChwcmljZTIsIGFlcyh4ID0gZHVyYXRpb24sIGZpbGwgPSBhZ2UpKSArIGdlb21faGlzdG9ncmFtKGJpbnMgPSAxMDApCmBgYAoKTG9va3MgYSBiaXQgYmV0dGVyLgoKIyMgRGF0YSB0cmFuc2Zvcm1hdGlvbnMKTG9nLXRyYW5zZm9ybSBkdXJhdGlvbgpgYGB7cn0KcHJpY2UzIDwtIG11dGF0ZShwcmljZTIsCiAgICAgICAgICAgICAgIExvZ0R1ciA9IGxvZzEwKGR1cmF0aW9uKSkKYGBgCgouLi4gYW5kIHN0YW5kYXJkaXplIGl0CmBgYHtyfQpwcmljZTMgPC0gbXV0YXRlKHByaWNlMywKICAgICAgICAgICAgICAgTG9nX2R1cl96ID0gc2NhbGUoTG9nRHVyKSkKYGBgCgpSZWNvZGUgc2V4IHZhciBzbyB0aGF0IE0gaXMgdGhlIGRlZmF1bHQKYGBge3J9CnByaWNlMyRzZXggPC0gcmVsZXZlbChwcmljZTMkc2V4LCByZWYgPSAiTSIpCmBgYAoKUmVjb2RlIGZvbGxvd2luZyBzZWdtZW50IHNvIHRoYXQgJ3BhdXNlJyBpcyB0aGUgcmVmZXJlbmNlIGxldmVsOgpgYGB7cn0KcHJpY2UzJGZvbF9zZWcgPC0gcmVsZXZlbChwcmljZTMkZm9sX3NlZywgcmVmID0gImZvbF9wYXVzZSIpCmBgYAoKCiMgUFJJQ0UgRjIKU2VsZWN0IGp1c3QgUFJJQ0UgYW5kIFRSQVA6CmBgYHtyfQpqdXN0X3ByaWNlIDwtIHByaWNlMyAlPiUgZmlsdGVyKHZvd2VsPT0icHJpY2UiKQpwcmljZV90cmFwIDwtIHByaWNlMyAlPiUgZmlsdGVyKHZvd2VsPT0icHJpY2UiIHwgdm93ZWw9PSJ0cmFwIikKYGBgCgoKUnVuIGEgbW9kZWwuIE5vdCBzcGVjaWZ5aW5nIHByaW9ycyBmb3Igbm93CmBgYHtyfQpwcmljZV9GMl9tIDwtIGJybShub3JtRjJfMjAgfiBMb2dfZHVyX3ogKyBhZ2Uqc2V4ICsgZm9sX3NlZyArICgxfHBhcnRpY2lwYW50KSArICgxfHdvcmQpLCBkYXRhID0ganVzdF9wcmljZSkKYGBgCgpDaGVjayB0aGUgbW9kZWwgc3VtbWFyeToKYGBge3J9CnRpZHlfc3RhbihwcmljZV9GMl9tLCBwcm9iPTAuODksIHR5cGU9ImZpeGVkIiwgZGlnaXRzPTQpCmBgYAoKRXF1aXZhbGVuY2UgdGVzdDoKYGBge3J9CmVxdWl2YWxlbmNlX3Rlc3QocHJpY2VfRjJfbSwgY2k9MC44OSkKYGBgCgpWaXN1YWxpc2UgdGhlIHBvc3RlcmlvcnM6CmBgYHtyIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTh9CnByaWNlX0YyX3BvcyA8LSBhcy5tYXRyaXgocHJpY2VfRjJfbSkKCiNkaW1uYW1lcyhmYWNlX3Bvc3RlcmlvcjEpCgojY29sb3Jfc2NoZW1lX3NldCgiYnJpZ2h0Ymx1ZSIpCm1jbWNfaW50ZXJ2YWxzKHByaWNlX0YyX3BvcywKICAgICAgICAgICBwYXJzID0gYygiYl9Mb2dfZHVyX3oiLAogICAgICAgICAgICAgICAgICAgICJiX2FnZWNoaWxkIiwgCiAgICAgICAgICAgICAgICAgICAgImJfc2V4RiIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF9uYXNhbCIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF9hcHByb3hpbWFudCIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWRfQyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWRfY2x1cyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWxlc3NfQyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWxlc3NfY2x1cyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ290aGVyIiwKICAgICAgICAgICAgICAgICAgICAiYl9hZ2VjaGlsZDpzZXhGIiksCiAgICAgICAgICAgcHJvYj0wLjg5KSArIGdncGxvdDI6OnRoZW1lX21pbmltYWwoKSArIGdncGxvdDI6Omdlb21fdmxpbmUoeGludGVyY2VwdD0wKQoKbWNtY19hcmVhcyhwcmljZV9GMl9wb3MsCiAgICAgICAgICAgcGFycyA9IGMoImJfTG9nX2R1cl96IiwKICAgICAgICAgICAgICAgICAgICAiYl9hZ2VjaGlsZCIsIAogICAgICAgICAgICAgICAgICAgICJiX3NleEYiLAogICAgICAgICAgICAgICAgICAgICJiX2ZvbF9zZWdmb2xfbmFzYWwiLAogICAgICAgICAgICAgICAgICAgICJiX2ZvbF9zZWdmb2xfYXBwcm94aW1hbnQiLAogICAgICAgICAgICAgICAgICAgICJiX2ZvbF9zZWdmb2xfdm9pY2VkX0MiLAogICAgICAgICAgICAgICAgICAgICJiX2ZvbF9zZWdmb2xfdm9pY2VkX2NsdXMiLAogICAgICAgICAgICAgICAgICAgICJiX2ZvbF9zZWdmb2xfdm9pY2VsZXNzX0MiLAogICAgICAgICAgICAgICAgICAgICJiX2ZvbF9zZWdmb2xfdm9pY2VsZXNzX2NsdXMiLAogICAgICAgICAgICAgICAgICAgICJiX2ZvbF9zZWdvdGhlciIsCiAgICAgICAgICAgICAgICAgICAgImJfYWdlY2hpbGQ6c2V4RiIpLAogICAgICAgICAgIHByb2I9MC44OSkgKyBnZ3Bsb3QyOjp0aGVtZV9taW5pbWFsKCkgKyBnZ3Bsb3QyOjpnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9MCkKYGBgCgojIyBTdW1tYXJ5IG9mIG1vZGVsCgpTbyBpdCBsb29rcyBsaWtlOgoKLSBub25lIG9mIHRoZSBmb2xsb3dpbmcgc2VnbWVudHMgaGF2ZSBtdWNoIG9mIGFuIGVmZmVjdCBvbiBGMiBhdCBvbnNldC4gVGhlIHBvc3RlcmlvciBtZWRpYW5zIGFyZSBhbGwgcHJldHR5IGNsb3NlIHRvIHplcm8sIGJ1dCBhbHNvIGluIG1vc3QgY2FzZXMsIHRoZSA4OSUgY3JlZGlibGUgaW50ZXJ2YWwgY29udGFpbnMgMC4KCi0gRHVyYXRpb24gaGFzIGEgc21hbGwgYnV0IHByZXR0eSBkZWZpbml0aXZlIGVmZmVjdCBvbiBGMiBhdCBvbnNldDogYSBsb25nZXIgZHVyYXRpb24gcHJlZGljdHMgYSBsb3dlciBGMiwgaS5lLiBtb3JlIGJhY2sgbnVjbGV1cyB0byBQUklDRS4KCi0gQmVpbmcgYSBjaGlsZCBhcyBvcHBvc2VkIHRvIGFkb2xlc2NlbnQsIGFuZCBmZW1hbGUgYWRvbGVzY2VudCBhcyBvcHBvc2VkIHRvIG1hbGUgYWRvbGVzY2VudCwgcHJlZGljdHMgYSBsb3dlciBGMiBhdCBvbnNldC4gRmVtYWxlIGFkb2xlc2NlbnRzIGFyZSBwcmVkaWN0ZWQgdG8gaGF2ZSBhbiBGMiBhdCAyMCUgdGhhbiBpcyBhcm91bmQgMC4xNSAocmVtZW1iZXIsIHdvcmtpbmcgd2l0aCBub3JtYWxpemVkIGZvcm1hbnRzKSBsb3dlciB0aGFuIHRoZSBib3lzLgoKLSBUaGVyZSBpcyBhIHBvc2l0aXZlIGFnZS1zZXggaW50ZXJhY3Rpb246IGZlbWFsZSBjaGlsZHJlbiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBhICpoaWdoZXIqIEYyIHRoYW4gbWFsZSBjaGlsZHJlbi4gVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIHNleCBlZmZlY3QgYW1vbmcgYWRvbGVzY2VudHMuCgojIyBGMjogcGxvdApFc3RhYmxpc2ggcGFsZXR0ZQpgYGB7cn0Kdm93ZWxfY29scyA8LSBjKCIjMDA3MkIyIiwgIiM5OUNDRkYiKQpwZCA8LSBwb3NpdGlvbl9kb2RnZSgwLjkpCmBgYAoKCmBgYHtyIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTZ9CnggPC0gZ2dwbG90KGp1c3RfcHJpY2UsIGFlcyh4ID0gc2V4LCB5ID0gbm9ybUYyXzIwLCBmaWxsPXNleCkpICsgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhhZ2UpKSArCiAgZ2VvbV9ib3hwbG90KHdpZHRoID0gMC4zLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSkpICsgCiAgdGhlbWVfbWluaW1hbCgpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSB2b3dlbF9jb2xzKSArCiAgIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMikpLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgyKSksIAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDIpKSwgCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDIuNSkpKSArCiAgbGFicyh4ID0gIkFnZSIsIHkgPSAiTm9ybWFsaXplZCBGMiIsIHRpdGxlID0gIlBSSUNFOiBGMiBhdCAyMCUiKQp4CmBgYAoKIyBGMjogUFJJQ0UgYW5kIFRSQVAKCkhlcmUsIHdlIGNvbXBhcmUgdGhlIEYyIG9mIFBSSUNFIGF0IGl0cyBvbnNldCB0byB0aGUgRjIgb2YgVFJBUC4gVGhlIGxvZ2ljIGlzIHRoYXQgaW4gQ29ja25leSBvciBSUCwgVFJBUCBpcyBjZW50cmFsL2Zyb250LCB3aGlsZSBQUklDRSBoYXMgYSBiYWNrIG9uc2V0OyBidXQgdGhlbiBpbiBNTEUsIHRoZSBvbnNldHMgb2YgUFJJQ0UgYW5kIFRSQVAgYXJlIHByZXR0eSBzaW1pbGFyIGFuZCBwcmV0dHkgY2VudHJhbC4gCgpDaGVjayB0aGF0IHRoZSByZWZlcmVuY2Ugdm93ZWwgaXMgcHJpY2U6CmBgYHtyfQpwcmljZV90cmFwJHZvd2VsIDwtIHJlbGV2ZWwocHJpY2VfdHJhcCR2b3dlbCwgcmVmID0gInByaWNlIikKYGBgCgpSdW4gdGhlIG1vZGVsOgpgYGB7cn0KcHJpY2VfdHJhcF9tIDwtIGJybShub3JtRjJfMjAgfiBMb2dfZHVyX3ogKyB2b3dlbCphZ2Uqc2V4ICsgZm9sX3NlZyArICgxK3Zvd2VsfHBhcnRpY2lwYW50KSArICgxfHdvcmQpLCBkYXRhID0gcHJpY2VfdHJhcCkKYGBgCgpDaGVjayB0aGUgbW9kZWwgc3VtbWFyeToKYGBge3J9CnRpZHlfc3RhbihwcmljZV90cmFwX20sIHByb2I9MC44OSwgdHlwZT0iZml4ZWQiLCBkaWdpdHM9NCkKYGBgCgpWaXN1YWxpc2UgdGhlIHBvc3RlcmlvcnM6CmBgYHtyIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTh9CnByaWNlX3RyYXBfcG9zIDwtIGFzLm1hdHJpeChwcmljZV90cmFwX20pCgojZGltbmFtZXMocHJpY2VfdHJhcF9wb3MpCm1jbWNfaW50ZXJ2YWxzKHByaWNlX3RyYXBfcG9zLAogICAgICAgICAgIHBhcnMgPSBjKCJiX0xvZ19kdXJfeiIsCiAgICAgICAgICAgICAgICAgICAgImJfdm93ZWx0cmFwIiwKICAgICAgICAgICAgICAgICAgICAiYl9hZ2VjaGlsZCIsIAogICAgICAgICAgICAgICAgICAgICJiX3NleEYiLAogICAgICAgICAgICAgICAgICAgICJiX2FnZWNoaWxkOnNleEYiLAogICAgICAgICAgICAgICAgICAgICJiX3Zvd2VsdHJhcDphZ2VjaGlsZCIsCiAgICAgICAgICAgICAgICAgICAgImJfdm93ZWx0cmFwOnNleEYiLAogICAgICAgICAgICAgICAgICAgICJiX2FnZWNoaWxkOnNleEYiLAogICAgICAgICAgICAgICAgICAgICJiX3Zvd2VsdHJhcDphZ2VjaGlsZDpzZXhGIiksCiAgICAgICAgICAgcHJvYj0wLjg5KSArIGdncGxvdDI6OnRoZW1lX21pbmltYWwoKSArIGdncGxvdDI6Omdlb21fdmxpbmUoeGludGVyY2VwdD0wKQoKbWNtY19hcmVhcyhwcmljZV90cmFwX3BvcywKICAgICAgICAgICBwYXJzID0gYygiYl9Mb2dfZHVyX3oiLAogICAgICAgICAgICAgICAgICAgICJiX3Zvd2VsdHJhcCIsCiAgICAgICAgICAgICAgICAgICAgImJfYWdlY2hpbGQiLCAKICAgICAgICAgICAgICAgICAgICAiYl9zZXhGIiwKICAgICAgICAgICAgICAgICAgICAiYl9hZ2VjaGlsZDpzZXhGIiwKICAgICAgICAgICAgICAgICAgICAiYl92b3dlbHRyYXA6YWdlY2hpbGQiLAogICAgICAgICAgICAgICAgICAgICJiX3Zvd2VsdHJhcDpzZXhGIiwKICAgICAgICAgICAgICAgICAgICAiYl9hZ2VjaGlsZDpzZXhGIiwKICAgICAgICAgICAgICAgICAgICAiYl92b3dlbHRyYXA6YWdlY2hpbGQ6c2V4RiIpLAogICAgICAgICAgIHByb2I9MC44OSkgKyBnZ3Bsb3QyOjp0aGVtZV9taW5pbWFsKCkgKyBnZ3Bsb3QyOjpnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9MCkKYGBgCgojIyBTdW1tYXJ5IG9mIG1vZGVsCgpGcm9tIHRoZSBtb2RlbCBjb21wYXJpbmcgUFJJQ0UgYW5kIFRSQVAsIGl0IHNlZW1zOgoKLSBUaGUgdm93ZWwgVFJBUCBoYXMgYSBtZWRpYW4gRjIgYWN0dWFsbHkgc2xpZ2h0bHkgKmxvd2VyKiB0aGFuIFBSSUNFIC0tIHdoZXJlYXMgaW4gQ29ja25leSBvciBSUCwgd2Ugd291bGQgZXhwZWN0IFRSQVAgdG8gaGF2ZSBhICpoaWdoZXIqIEYyLiBUaGlzIGlzIGEgdmVyeSBzbWFsbCBlZmZlY3QgYW5kIHRoZSBjcmVkaWJsZSBpbnRlcnZhbCBjb250YWlucyAwLCBzbyBiYXNpY2FsbHkgaW4gZnJlcXVlbnRpc3QgdGVybXMsIHRoZXJlIGlzbid0IGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIFBSSUNFIGFuZCBUUkFQLiBJbiBmYWN0LCBpZiB0aGVyZSBpcyBhbiBlZmZlY3QgKHdlIHRoaW5rIHRoZXJlIGlzbid0KSwgaXQncyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHdoYXQgd2Ugd291bGQgaGF2ZSBwcmVkaWN0ZWQhCgotIExvb2tpbmcgYXQgdGhlIHZvd2VsdHJhcDphZ2VjaGlsZCBpbnRlcmFjdGlvbjogLTAuMDIgKyAwLjA0ID0gMC4wMjsgbWFsZSBjaGlsZHJlbiBzZWVtIHRvIGhhdmUgYSBUUkFQIHZvd2VsIHRoYXQgaXMgbW9yZSBmcm9udCB0aGFuIFBSSUNFLCBiYXNlZCBvbiB0aGUgcG9zdGVyaW9yIG1lZGlhbi4gVGhpcyBlZmZlY3QgaXNuJ3QgdmVyeSByb2J1c3QgdGhvdWdoLCBhcyB0aGUgODklIGNyZWRpYmxlIGludGVydmFsIGNvbnRhaW5zIDAuCgotIExvb2tpbmcgYXQgdGhlIHZvd2VsdHJhcDpzZXhGIGludGVyYWN0aW9uOiAtMC4wMiArIDAuMDggPSAwLjA2OyBmZW1hbGUgYWRvbGVzY2VudHMgc2VlbSB0byBoYXZlIGEgVFJBUCB2b3dlbCB0aGF0IGlzIG1vcmUgZnJvbnQgdGhhbiBQUklDRS4gWW91IGNhbiBzZWUgZnJvbSB0aGUgZ3JhcGhzIHRoYXQgdGhlIDg5JSBjcmVkaWJsZSBpbnRlcnZhbCBkb2VzIG5vdCBjb250YWluIDA7IGhvd2V2ZXIsIHdoZW4geW91IGxvb2sgYXQgdGhlIHBvc3RlcmlvciBkaXN0cmlidXRpb24gaW4gdGhlIG1jbWNfYXJlYXMgZ3JhcGgsIHRoZSBkaXN0cmlidXRpb24gZG9lcyBjcm9zcyB0aGUgMCBsaW5lLiBCdXQgd2hlbiB3ZSBwbG90IFBSSUNFIGFuZCBUUkFQIGluIGEgYm94cGxvdCBpbiBhIG1vbWVudCwgeW91J2xsIHNlZSB0aGF0IGZlbWFsZSBhZG9sZXNjZW50cyBkbyBpbmRlZWQgc2VlbSB0byBoYXZlIGEgc2VwYXJhdGlvbiBiZXR3ZWVuIFBSSUNFIGFuZCBUUkFQLgoKLSBOb3cgdGhlIHZvd2VsdHJhcC5hZ2VjaGlsZC5zZXhGIGludGVyYWN0aW9uOiAtMC4wMiArIDAuMDQgLSAwLjA3ID0gLTAuMDU7IGZlbWFsZSBjaGlsZHJlbiBzZWVtIHRvIGhhdmUgYSBUUkFQIHZvd2VsIHRoYXQgaXMgbW9yZSBiYWNrIHRoYW4gUFJJQ0UgLS0gYnkgYSB2ZXJ5IHRpbnkgYW1vdW50LiBUaGlzIGVmZmVjdCBpc24ndCB2ZXJ5IHJvYnVzdCB0aG91Z2g6IHRoZSBwb3N0ZXJpb3IgaXMgZmFpcmx5IHdpZGUgYW5kIGNvbnRhaW5zIDAuCgojIyBSYW5kb20gc2xvcGVzCgpXZSBjYW4gYWxzbyBoYXZlIGEgbG9vayBhdCB0aGUgcmFuZG9tIHNsb3BlcyBmb3IgdGhpcyBtb2RlbC4KCmBgYHtyIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTh9CiNkaW1uYW1lcyhwcmljZV90cmFwX3BvcykKCm1jbWNfaW50ZXJ2YWxzKHByaWNlX3RyYXBfcG9zLAogICAgICAgICAgIHBhcnMgPSBjKCJyX3BhcnRpY2lwYW50W0FsaSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtBbWFuZGEsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbQ0Isdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbQ2hhbnRlbGxlLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0NocmlzQix2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtEYW5pZWwsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbRGVuemVsLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0YxLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0YxMCx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtGMyx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtGNCx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtGNyx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtGOCx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtGOSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtHVyx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtJYnJhaGltLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0plc3NpY2Esdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbSm9lLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0thaSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtLaGFkaXIsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbTG9sYSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtMdWN5LHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W00xLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W00zLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W000LHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W001LHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W002LHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W003LHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W004LHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W01hdGlzc2Usdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbTW9zZXMsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbT21hcix2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtTYW1pLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W1NELHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W1NoYW50ZWwsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbVGFyaXEsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbVG9ueSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtaUix2b3dlbHRyYXBdIiksCiAgICAgICAgICAgcHJvYj0wLjg5KSArIGdncGxvdDI6OnRoZW1lX21pbmltYWwoKSArIGdncGxvdDI6Omdlb21fdmxpbmUoeGludGVyY2VwdD0wKQoKbWNtY19hcmVhcyhwcmljZV90cmFwX3BvcywKICAgICAgICAgICBwYXJzID0gYygicl9wYXJ0aWNpcGFudFtBbGksdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbQW1hbmRhLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0NCLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0NoYW50ZWxsZSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtDaHJpc0Isdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbRGFuaWVsLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0RlbnplbCx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtGMSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtGMTAsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbRjMsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbRjQsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbRjcsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbRjgsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbRjksdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbR1csdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbSWJyYWhpbSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtKZXNzaWNhLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0pvZSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtLYWksdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbS2hhZGlyLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W0xvbGEsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbTHVjeSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtNMSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtNMyx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtNNCx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtNNSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtNNix2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtNNyx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtNOCx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtNYXRpc3NlLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W01vc2VzLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W09tYXIsdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbU2FtaSx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtTRCx2b3dlbHRyYXBdIiwKICAgICAgICAgICAgICAgICAgICAicl9wYXJ0aWNpcGFudFtTaGFudGVsLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W1RhcmlxLHZvd2VsdHJhcF0iLAogICAgICAgICAgICAgICAgICAgICJyX3BhcnRpY2lwYW50W1Rvbnksdm93ZWx0cmFwXSIsCiAgICAgICAgICAgICAgICAgICAgInJfcGFydGljaXBhbnRbWlIsdm93ZWx0cmFwXSIpLAogICAgICAgICAgIHByb2I9MC44OSkgKyBnZ3Bsb3QyOjp0aGVtZV9taW5pbWFsKCkgKyBnZ3Bsb3QyOjpnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9MCkKYGBgCgojIyBQUklDRSBhbmQgVFJBUCBib3hwbG90CgpFc3RhYmxpc2ggcGFsZXR0ZToKYGBge3J9CnZvd2VsX2NvbHMgPC0gYygiIzAwNzJCMiIsICIjRDU1RTAwIikKcGQgPC0gcG9zaXRpb25fZG9kZ2UoMC45KQpgYGAKCgpgYGB7ciBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD02fQp4MiA8LSBnZ3Bsb3QocHJpY2VfdHJhcCwKICAgICAgICAgICAgIGFlcyh4ID0gc2V4LAogICAgICAgICAgICAgICAgIHkgPSBub3JtRjJfMjAsCiAgICAgICAgICAgICAgICAgZmlsbCA9IHZvd2VsKSkgKyAKICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKGFnZSkpICsKICBnZW9tX2JveHBsb3Qod2lkdGggPSAwLjMsIHBvc2l0aW9uID0gcGQpICsgCiAgdGhlbWVfbWluaW1hbCgpICsgCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gdm93ZWxfY29scykgKyAKICB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwKICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS41KSksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS41KSksIAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuNSkpLCAKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMikpKSArCiAgbGFicyh4ID0gIkFnZSIsIHkgPSAiTm9ybWFsaXplZCBGMiIsIHRpdGxlID0gIlBSSUNFOiBGMiBhdCAyMCUiKQp4MgpgYGAKClRoaXMgYm94cGxvdCBzaG93cyB0aGF0IGFkb2xlc2NlbnQgZmVtYWxlcyB0ZW5kIHRvIGhhdmUgYSBtb3JlIGZyb250IFRSQVAgdGhhbiBQUklDRS4KCiMgUFJJQ0UgVHJhamVjdG9yeSBMZW5ndGgKCldlJ3JlIGdvaW5nIHRvIGxvb2sgYXQgVHJhamVjdG9yeSBMZW5ndGggbm93LCBzbyB3ZSdsbCBzdWJzZXQgb3V0IFBSSUNFIGFuZCBGTEVFQ0UgLS0gdGhlIGxvZ2ljIGJlaW5nIHRoYXQgd2Ugd2FudCB0byBjb21wYXJlIHRoZSBUcmFqZWN0b3J5IExlbmd0aCBvZiBQUklDRSwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUgYSBkaXBodGhvbmcsIHdpdGggRkxFRUNFLCB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBhIG1vbm9waHRob25nLgoKYGBge3J9CnByaWNlX2ZsZWVjZSA8LSBwcmljZTMgJT4lIGZpbHRlcih2b3dlbD09InByaWNlIiB8IHZvd2VsID09ImZsZWVjZSIpCmBgYAoKQ2hlY2sgZGlzdHJpYnV0aW9uIG9mIGR1cmF0aW9uCmBgYHtyfQpnZ3Bsb3QocHJpY2VfZmxlZWNlLCBhZXMoeCA9IG5vcm1fVEwsIGZpbGw9dm93ZWwpKSArIGdlb21faGlzdG9ncmFtKGJpbnMgPSAxMDApCmBgYApHZXQgcmlkIG9mIG91dGxpZXJzCmBgYHtyfQpwcmljZV9mbGVlY2UyIDwtIHByaWNlX2ZsZWVjZSAlPiUgZmlsdGVyKG5vcm1fVEwgPDIuMSkKYGBgCgpTZXQgdm93ZWwgcmVmZXJlbmNlIGxldmVsIHRvIHByaWNlOgpgYGB7cn0KcHJpY2VfZmxlZWNlMiR2b3dlbCA8LSByZWxldmVsKHByaWNlX2ZsZWVjZTIkdm93ZWwsIHJlZiA9ICJwcmljZSIpCmBgYAoKQnVpbGQgdGhlIG1vZGVsOgpgYGB7cn0KcHJpY2VfdHJhal9tIDwtIGJybShub3JtX1RMIH4gTG9nX2R1cl96ICsgdm93ZWwqYWdlKnNleCArIGZvbF9zZWcgKyAoMSt2b3dlbHxwYXJ0aWNpcGFudCkgKyAoMXx3b3JkKSwgZGF0YSA9IHByaWNlX2ZsZWVjZTIpCmBgYAoKTW9kZWwgc3VtbWFyeToKYGBge3J9CnRpZHlfc3RhbihwcmljZV90cmFqX20sIHByb2I9MC44OSwgdHlwZT0iZml4ZWQiLCBkaWdpdHM9NCkKYGBgCgpWaXN1YWxpc2UgdGhlc2UgZWZmZWN0cwpgYGB7ciBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD04fQpwcmljZV90cmFqX3BvcyA8LSBhcy5tYXRyaXgocHJpY2VfdHJhal9tKQoKI2RpbW5hbWVzKHByaWNlX3RyYWpfcG9zKQptY21jX2FyZWFzKHByaWNlX3RyYWpfcG9zLAogICAgICAgICAgIHBhcnMgPSBjKCJiX0xvZ19kdXJfeiIsCiAgICAgICAgICAgICAgICAgICAgImJfdm93ZWxmbGVlY2UiLAogICAgICAgICAgICAgICAgICAgICJiX2FnZWNoaWxkIiwgCiAgICAgICAgICAgICAgICAgICAgImJfc2V4RiIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF9hcHByb3hpbWFudCIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF9uYXNhbCIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWRfQyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWRfY2x1cyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWxlc3NfQyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWxlc3NfY2x1cyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ290aGVyIiwKICAgICAgICAgICAgICAgICAgICAiYl92b3dlbGZsZWVjZTphZ2VjaGlsZCIsCiAgICAgICAgICAgICAgICAgICAgImJfdm93ZWxmbGVlY2U6c2V4RiIsCiAgICAgICAgICAgICAgICAgICAgImJfYWdlY2hpbGQ6c2V4RiIsCiAgICAgICAgICAgICAgICAgICAgImJfdm93ZWxmbGVlY2U6YWdlY2hpbGQ6c2V4RiIpLAogICAgICAgICAgIHByb2I9MC44OSkgKyBnZ3Bsb3QyOjp0aGVtZV9taW5pbWFsKCkgKyBnZ3Bsb3QyOjpnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9MCkKCm1jbWNfaW50ZXJ2YWxzKHByaWNlX3RyYWpfcG9zLAogICAgICAgICAgIHBhcnMgPSBjKCJiX0xvZ19kdXJfeiIsCiAgICAgICAgICAgICAgICAgICAgImJfdm93ZWxmbGVlY2UiLAogICAgICAgICAgICAgICAgICAgICJiX2FnZWNoaWxkIiwgCiAgICAgICAgICAgICAgICAgICAgImJfc2V4RiIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF9hcHByb3hpbWFudCIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF9uYXNhbCIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWRfQyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWRfY2x1cyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWxlc3NfQyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ2ZvbF92b2ljZWxlc3NfY2x1cyIsCiAgICAgICAgICAgICAgICAgICAgImJfZm9sX3NlZ290aGVyIiwKICAgICAgICAgICAgICAgICAgICAiYl92b3dlbGZsZWVjZTphZ2VjaGlsZCIsCiAgICAgICAgICAgICAgICAgICAgImJfdm93ZWxmbGVlY2U6c2V4RiIsCiAgICAgICAgICAgICAgICAgICAgImJfYWdlY2hpbGQ6c2V4RiIsCiAgICAgICAgICAgICAgICAgICAgImJfdm93ZWxmbGVlY2U6YWdlY2hpbGQ6c2V4RiIpLAogICAgICAgICAgIHByb2I9MC44OSkgKyBnZ3Bsb3QyOjp0aGVtZV9taW5pbWFsKCkgKyBnZ3Bsb3QyOjpnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9MCkKYGBgCgojIyBTdW1tYXJ5IG9mIG1vZGVsCgpXaGF0IHRoaXMgdGVsbHMgdXMgaXMgdGhhdDoKCi0gQW4gaW5jcmVhc2UgaW4gZHVyYXRpb24gcHJlZGljdHMgYW4gaW5jcmVhc2UgaW4gVHJhamVjdG9yeSBMZW5ndGggKHVuc3VycHJpc2luZ2x5KQoKLSBGTEVFQ0UgdGVuZHMgdG8gaGF2ZSBhIHNob3J0ZXIgVEwgdGhhbiBQUklDRSAtIGJ5IGFib3V0IDAuMDguIFRoZSA4OSUgY3JlZGlibGUgaW50ZXJ2YWwgZG9lcyBub3QgY29udGFpbiAwICh0aG91Z2ggdGhlIHBvc3RlcmlvciBkaXN0cmlidXRpb24sIGkuZS4gdGhlIDEwMCUgY3JlZGlibGUgaW50ZXJ2YWwsIGRvZXMpOiB0aGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgZXZlbiBhZG9sZXNjZW50IG1hbGVzLCB3aG8gdGVuZCB0byBsZWFkIGluIG1vbm9waHRob25naXphdGlvbiwgcm9idXN0bHkgaGF2ZSBhIFBSSUNFIHZvd2VsIHRoYXQgaXMgbW9yZSBkaXBodGhvbmdhbCB0aGFuIHRoZWlyIEZMRUVDRSB2b3dlbC4gQnkgY29udHJhc3QsIHdlIGZvdW5kIHRoYXQgZm9yIEZBQ0UgYW5kIEdPQVQsIHRoZSBhZG9sZXNjZW50IGJveXMgZG9uJ3Qgc2VlbSB0byBoYXZlIGEgRkFDRSBvciBHT0FUIHZvd2VsIHRoYXQgaXMgYW55IG1vcmUgZGlwaHRob25nYWwgdGhhbiB0aGVpciBGTEVFQ0UuCgotIEJlaW5nIGEgY2hpbGQgYXMgb3Bwb3NlZCB0byBhZG9sZXNjZW50IHByZWRpY3RzIGEgZ3JlYXRlciBUTCwgYnkgYWJvdXQgMC4yNyAtLSB0aGlzIGlzIHF1aXRlIGEgYmlnIGVmZmVjdC4gVGhpcyBlZmZlY3QgaXMgcHJldHR5IHJvYnVzdDogdGhlIHBvc3RlcmlvciBkb2VzIG5vdCBjb250YWluIDAuIFNvLCBjaGlsZHJlbiBhcmUgbXVjaCBtb3JlIGRpcGh0aG9uZ2FsIHRoYW4gYWRvbGVzY2VudHMgKHRha2UgYSBsb29rIGF0IHRoZSBib3hwbG90IGJlbG93ISkKCi0gQmVpbmcgYSBmZW1hbGUgYWRvbGVzY2VudCBhcyBvcHBvc2VkIHRvIG1hbGUgYWRvbGVzY2VudCBwcmVkaWN0cyBhIGdyZWF0ZXIgVEwgYnkgYWJvdXQgMC4wOC4gVGhlIDg5JSBjcmVkaWJsZSBpbnRlcnZhbCBkb2VzIG5vdCBjb250YWluIDAsIHRob3VnaCB0aGUgcG9zdGVyaW9yIGRpc3RyaWJ1dGlvbiBkb2VzLgoKLSBBZ2Utc2V4IGludGVyYWN0aW9uOiAwLjI3IC0gMC4xMTQyID0gMC4xNTU4LCBpLmUuIGZlbWFsZSBjaGlsZHJlbiBoYXZlIGEgc21hbGxlciBUTCB0aGFuIG1hbGUgY2hpbGRyZW4gYnkgYWJvdXQgMC4xMSAvIGZlbWFsZSBjaGlsZHJlbiBoYXZlIGEgZ3JlYXRlciBUTCB0aGFuIG1hbGUgYWRvbGVzY2VudHMgYnkgYWJvdXQgMC4xNi4gSG93ZXZlciB5b3Ugd2FudCB0byBwdXQgaXQhIFRoZSA4OSUgY3JlZGlibGUgaW50ZXJ2YWwgb24gdGhpcyBpbnRlcmFjdGlvbiB0ZXJtIGRvZXMgbm90IGNvbnRhaW4gMCwgYnV0IG5vdGljZSB0aGF0IHRoZSBwb3N0ZXJpb3IgZGlzdHJpYnV0aW9uICh0aGUgMTAwJSBjcmVkaWJsZSBpbnRlcnZhbCEpIGRvZXMgY29udGFpbiAwLgoKLSBNb3N0IGZvbGxvd2luZyBzZWdtZW50cyBwcmVkaWN0IGEgZ3JlYXRlciBUTCBjb21wYXJlZCB0byBmb2xsb3dpbmcgcGF1c2UgLS0gc28gZm9sbG93aW5nIHBhdXNlIHByZWRpY3RzIGEgbW9yZSBtb25vcGh0aG9uZ2FsIHJlYWxpemF0aW9uPyBUaGVzZSBlZmZlY3RzIGFyZSBwcmV0dHkgc21hbGwgLS0gbGVzcyB0aGFuIDAuMDEgLS0gYW5kIGZvciBhbGwgZXhjZXB0IGZvbGxvd2luZyB2b2ljZWQgY29uc29uYW50LCB0aGUgODklIGNyZWRpYmxlIGludGVydmFsIGNvbnRhaW5zIDAuCgotIFRoZXJlIGlzIGEgbmVnYXRpdmUgdm93ZWxmbGVlY2U6YWdlY2hpbGQgaW50ZXJhY3Rpb246IC0wLjA4IC0gMC4yNyA9IC0wLjM1OiBmb3IgY2hpbGRyZW4sIHRoZSBUTCBvZiBGTEVFQ0UgdGVuZHMgdG8gYmUgYWJvdXQgMC4zNSBsZXNzIHRoYW4gdGhlIFRMIG9mIFBSSUNFLgoKLSB2b3dlbGZsZWVjZS5zZXhGIGludGVyYWN0aW9uOiAtMC4wOCAtMC4wMyA9IC0wLjExOiBGb3IgYWRvbGVzY2VudCBnaXJscywgRkxFRUNFIGhhcyBhIHNob3J0ZXIgVEwgdGhhbiBQUklDRSBieSBhYm91dCAwLjExLiBUaGlzIGVmZmVjdCBpc24ndCByb2J1c3Q6IDg5JSBjcmVkaWJsZSBpbnRlcnZhbCBjb250YWlucyAwLCBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBGTEVFQ0UncyBUTCBhbmQgUFJJQ0UncyBUTCBmb3IgYWRvbGVzY2VudCBnaXJscyBpc24ndCBhbnkgZGlmZmVyZW50IGZyb20gd2hhdCBpdCBpcyBmb3IgYWRvbGVzY2VudCBib3lzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGludGVyYWN0aW9uIGlzIGFjdHVhbGx5IC0wLjA4ICsgMC4wNTM3ID0gLTAuMDMsIGkuZS4gZm9yIGFkb2xlc2NlbnQgZ2lybHMsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gRkxFRUNFIGFuZCBQUklDRSBpcyBhY3R1YWxseSBsZXNzIHRoYW4gd2hhdCBpdCBpcyBmb3IgYWRvbGVzY2VudCBib3lzLgoKLSB2b3dlbGZsZWVjZS5hZ2VjaGlsZC5zZXhGOiB0aGlzIHBvc3RlcmlvciBpcyBhbHNvIHZlcnkgd2lkZSwgd2l0aCB0aGUgODklIGNyZWRpYmxlIGludGVydmFsIGNvbnRhaW5pbmcgMCwgc28gd2Ugd291bGRuJ3Qgd2FudCB0byBjb25jbHVkZSB0aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gRkxFRUNFIGFuZCBQUklDRSBmb3IgZmVtYWxlIGNoaWxkcmVuIGlzIGFueSBkaWZmZXJlbnQgZnJvbSB3aGF0IGl0IGlzIGZvciBtYWxlIGNoaWxkcmVuLgoKIyMgQm94cGxvdCBvZiBQUklDRSBUcmFqCmBgYHtyIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTZ9CnByaWNlX2ZsZWVjZV9jb2xzIDwtIGMoIiMwMDcyQjIiLCAiI0U2OUYwMCIpCgoKeiA8LSBnZ3Bsb3QocHJpY2VfZmxlZWNlMiwgYWVzKHggPSBzZXgsIHkgPSBub3JtX1RMLCBmaWxsID0gdm93ZWwpKSArIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoYWdlKSkgKwogIGdlb21fYm94cGxvdCh3aWR0aCA9IDAuMywgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjkpKSArIAogIHRoZW1lX21pbmltYWwoKSArIAogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IHByaWNlX2ZsZWVjZV9jb2xzKSArIAogICB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgyKSksCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDIpKSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDIpKSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMikpLCAKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgyKSksIAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgyLjUpKSkgKwogIGxhYnMoeCA9ICJBZ2UiLCB5ID0gIlRyYWplY3RvcnkgTGVuZ3RoIiwgdGl0bGUgPSAiUFJJQ0U6IFRyYWplY3RvcnkgTGVuZ3RoIikgKwogIHlsaW0oMCwgMikKegpgYGAKCmBgYHtyIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTZ9CnByaWNlX2ZsZWVjZV9jb2xzIDwtIGMoIiMwMDcyQjIiLCAiI0U2OUYwMCIpCgp0cmFuc3BhcmVuY3kgPC0gYygxLCAwLjIpCmZhZGVkIDwtIGMoIiMwMDAwMDAiLCAiI0NDQ0NDQyIpCgp6MiA8LSBnZ3Bsb3QocHJpY2VfZmxlZWNlMiwgYWVzKHggPSBzZXgsIHkgPSBub3JtX1RMLCBmaWxsID0gdm93ZWwsIGFscGhhPXZvd2VsKSkgKyBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKGFnZSkpICsKICBnZW9tX2JveHBsb3QoYWVzKGNvbG91cj12b3dlbCksIHdpZHRoID0gMC4zLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSkpICsgCiAgdGhlbWVfbWluaW1hbCgpICsgCiAgIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gZmFkZWQpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBwcmljZV9mbGVlY2VfY29scykgKyAKICBzY2FsZV9hbHBoYV9tYW51YWwodmFsdWVzID0gdHJhbnNwYXJlbmN5KSArIAogICB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgyKSksCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDIpKSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDIpKSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMikpLCAKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgyKSksIAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgyLjUpKSkgKwogIGxhYnMoeCA9ICJBZ2UiLCB5ID0gIlRyYWplY3RvcnkgTGVuZ3RoIiwgdGl0bGUgPSAiUFJJQ0U6IFRyYWplY3RvcnkgTGVuZ3RoIikgKwogIHlsaW0oMCwgMikKejIKYGBgCg==