Steiger et al. (2008) studied the Coolidge effect, the decline in males’ interest in mating with the same female compared to novel females, using the burying beetle Nicrophorus vespilloides. Eighteen male beetles were presented with the same female beetle four times, and then a novel female on the fifth occasion. This was a repeated measures design as the same individual males were repeatedly presented with females. There was no evidence that physical exhaustion affected time to mating as a separate control group of males were presented with novel, unmated females five times in succession, and there was no change in time to mating. The within-subjects factor was the order of presented females, and while this could have been treated as a continuous covariate, we treated it as a fixed factor with five groups. The response variable recorded on each occasion was time to mating.

Adult burying beetle. Francisco Welter-Schultes. Wikimedia Commons Creative Commons CC0 1.0 Universal Public Domain Dedication
Adult burying beetle. Francisco Welter-Schultes. Wikimedia Commons Creative Commons CC0 1.0 Universal Public Domain Dedication

Francisco Welter-Schultes, CC0, via Wikimedia Commons

Steiger, S., Franz, R., Eggert, A. K. & Muller, J. K. (2008). The Coolidge effect, individual recognition and selection for distinctive cuticular signatures in a burying beetle. Proceedings of the Royal Society B, 275, 1831-8.

Link to the paper: doi: 10.1098/rspb.2008.0375 and data

Preliminaries

First, load the required packages (afex, car, lattice, lme4, lmerTest, nlme, VCA, ez, emmeans, Rmisc, MuMIn)

Import steiger data file (steiger.csv)

steiger <- read.csv("../data/steiger.csv")
steiger

Set contrasts from afex. Make individual a factor Rearrange matingnumber order to override default alphabetical order

set_sum_contrasts()
steiger$individual <- factor(steiger$individual)
steiger$matingnumber <- factor(steiger$matingnumber, levels=c("first","second","third","fourth","fifth"))

Quick boxplot to look at variances for different mating numbers

boxplot(time~matingnumber, data=steiger)

Fit OLS model with default aov SS

steiger.aov <- aov(time~matingnumber+individual, data=steiger)

Check residuals - some evidence for interaction

plot(steiger.aov)

Do interaction plot

interaction.plot(steiger$matingnumber, steiger$individual, steiger$time)

The rank order of treatments consistent but the sizes of the differences vary greatly between individuals. Quickly try boxplot with log-transformed data to see if any improvement

boxplot(log10(time)~matingnumber, data=steiger)

Transform to logs due to variance heterogeneity and to minimise interaction

steiger$ltime <- log10(steiger$time)

Recheck diagnostics - much better with less interaction

boxplot(ltime~matingnumber, data=steiger)

interaction.plot(steiger$matingnumber, steiger$individual, steiger$ltime)

Fit OLS model with default aov SS

steiger.aov1 <- aov(ltime~matingnumber+individual, data=steiger)

check residuals - look OK

plot(steiger.aov1)

Examine results

Once we’re happy with the model that we’re fitting, we can look at the results.

tidy(steiger.aov1)
emmeans(steiger.aov1, "matingnumber")
 matingnumber emmean    SE df lower.CL upper.CL
 first          1.47 0.136 68     1.20     1.74
 second         1.83 0.136 68     1.56     2.10
 third          2.01 0.136 68     1.74     2.28
 fourth         2.14 0.136 68     1.87     2.41
 fifth          1.35 0.136 68     1.08     1.62

Results are averaged over the levels of: individual 
Confidence level used: 0.95 

Get Greenhouse Geiser adjusted results

ezsteiger1 <- ezANOVA(data=steiger, dv=ltime, wid=individual, within=matingnumber, type=3, detailed=TRUE)
print(ezsteiger1)
$ANOVA
        Effect DFn DFd    SSn   SSd      F        p p<.05   ges
1  (Intercept)   1  17 278.55  6.72 704.49 2.81e-15     * 0.905
2 matingnumber   4  68   8.36 22.50   6.32 2.20e-04     * 0.222

$`Mauchly's Test for Sphericity`
        Effect     W     p p<.05
2 matingnumber 0.431 0.166      

$`Sphericity Corrections`
        Effect   GGe   p[GG] p[GG]<.05   HFe    p[HF] p[HF]<.05
2 matingnumber 0.678 0.00155         * 0.819 0.000657         *

Use VCA package to get anova var comps (with CIs that can be -ve)

steiger.vca <- anovaMM(ltime~matingnumber+(individual), steiger)
steiger.vca


ANOVA-Type Estimation of Mixed Model:
--------------------------------------

    [Fixed Effects]

               int  matingnumberfifth  matingnumberfirst matingnumberfourth matingnumbersecond  matingnumberthird 
             2.009             -0.658             -0.544              0.131             -0.180              0.000 


    [Variance Components]

  Name       DF        SS        MS       VC       %Total    SD       CV[%]    
1 total      84.524647                    0.34383  100       0.58637  33.330258
2 individual 17        6.721791  0.395399 0.012892 3.749614  0.113544 6.454044 
3 error      68        22.503779 0.330938 0.330938 96.250386 0.575272 32.69941 

Mean: 1.76 (N = 90) 

Experimental Design: balanced  |  Method: ANOVA
VCAinference(steiger.vca, alpha=0.05, VarVC=TRUE, excludeNeg=FALSE, constrainCI=FALSE)



Inference from Mixed Model Fit
------------------------------

> VCA Result:
-------------

    [Fixed Effects]

               int  matingnumberfifth  matingnumberfirst matingnumberfourth matingnumbersecond  matingnumberthird 
             2.009             -0.657             -0.543              0.131             -0.180              0.000 


    [Variance Components]

  Name       DF      SS      MS     VC     %Total  SD     CV[%]   Var(VC)
1 total      84.5246                0.3438 100     0.5864 33.3303 0.0028 
2 individual 17      6.7218  0.3954 0.0129 3.7496  0.1135 6.454   9e-04  
3 error      68      22.5038 0.3309 0.3309 96.2504 0.5753 32.6994 0.0032 

Mean: 1.76 (N = 90) 

Experimental Design: balanced  |  Method: ANOVA


> VC:
-----
           Estimate  CI LCL CI UCL One-Sided LCL One-Sided UCL
total        0.3438  0.2598 0.4765        0.2716        0.4517
individual   0.0129 -0.0447 0.0705       -0.0355        0.0613
error        0.3309  0.2428 0.4779        0.2550        0.4499

> SD:
-----
           Estimate CI LCL CI UCL One-Sided LCL One-Sided UCL
total         0.586  0.510  0.690         0.521         0.672
individual    0.114 -0.211  0.266        -0.188         0.247
error         0.575  0.493  0.691         0.505         0.671

> CV[%]:
--------
           Estimate CI LCL CI UCL One-Sided LCL One-Sided UCL
total         33.33     29   39.2          29.6          38.2
individual     6.45    -12   15.1         -10.7          14.1
error         32.70     28   39.3          28.7          38.1


95% Confidence Level  
SAS PROC MIXED method used for computing CIs 

Fit random intercept model using lme4 and REML

steiger.lmer1 <- lmer(ltime~matingnumber + (1|individual), REML=TRUE, steiger)
summary(steiger.lmer1, ddf="Kenward-Roger")
Linear mixed model fit by REML. t-tests use Kenward-Roger's method ['lmerModLmerTest']
Formula: ltime ~ matingnumber + (1 | individual)
   Data: steiger

REML criterion at convergence: 168

Scaled residuals: 
   Min     1Q Median     3Q    Max 
-1.921 -0.815  0.205  0.698  1.927 

Random effects:
 Groups     Name        Variance Std.Dev.
 individual (Intercept) 0.0129   0.114   
 Residual               0.3309   0.575   
Number of obs: 90, groups:  individual, 18

Fixed effects:
              Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)     1.7593     0.0663 17.0000   26.54  2.8e-15 ***
matingnumber1  -0.2934     0.1213 68.0000   -2.42   0.0182 *  
matingnumber2   0.0700     0.1213 68.0000    0.58   0.5657    
matingnumber3   0.2501     0.1213 68.0000    2.06   0.0430 *  
matingnumber4   0.3809     0.1213 68.0000    3.14   0.0025 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) mtngn1 mtngn2 mtngn3
matingnmbr1  0.000                     
matingnmbr2  0.000 -0.250              
matingnmbr3  0.000 -0.250 -0.250       
matingnmbr4  0.000 -0.250 -0.250 -0.250
anova(steiger.lmer1, type=3, ddf="Kenward-Roger")
Type III Analysis of Variance Table with Kenward-Roger's method
             Sum Sq Mean Sq NumDF DenDF F value  Pr(>F)    
matingnumber   8.36    2.09     4    68    6.32 0.00022 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
emmeans(steiger.lmer1, ~matingnumber)
 matingnumber emmean    SE   df lower.CL upper.CL
 first          1.47 0.138 84.5     1.19     1.74
 second         1.83 0.138 84.5     1.55     2.10
 third          2.01 0.138 84.5     1.74     2.28
 fourth         2.14 0.138 84.5     1.86     2.42
 fifth          1.35 0.138 84.5     1.08     1.63

Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

Note different CIs compared to OLS model fitting due to K-R adjustment

CI on variance components (remembering to square CIs from lmer which are in SD units)

steiger.ci1 <- confint.merMod(steiger.lmer1, oldNames=FALSE)
Computing profile confidence intervals ...
steiger.vc1 <- (steiger.ci1)^2
print(steiger.vc1)
                             2.5 %  97.5 %
sd_(Intercept)|individual 0.000000 0.09445
sigma                     0.229286 0.43705
(Intercept)               2.643805 3.58182
matingnumber1             0.278325 0.00352
matingnumber2             0.026936 0.09249
matingnumber3             0.000254 0.23443
matingnumber4             0.021535 0.37820

Bar graph for time main effect

steiger_sum <- summarySE(steiger, measurevar= 'ltime', groupvars= 'matingnumber')
ggplot(steiger_sum, aes(x=matingnumber, y=ltime))+
  geom_bar(stat="identity", position="dodge", fill="lightblue")+
  geom_errorbar(aes(ymin=ltime-se, ymax=ltime+se), width=0.3, color="darkblue")

LS0tCnRpdGxlOiAiUUsgQm94IDEyLjEiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgaHRtbF9ub3RlYm9vazoKICAgIGRmX3ByaW50OiBwYWdlZAotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKU3RlaWdlciBldCBhbC4gKDIwMDgpIHN0dWRpZWQgdGhlIENvb2xpZGdlIGVmZmVjdCwgdGhlIGRlY2xpbmUgaW4gbWFsZXMnIGludGVyZXN0IGluIG1hdGluZyB3aXRoIHRoZSBzYW1lIGZlbWFsZSBjb21wYXJlZCB0byBub3ZlbCBmZW1hbGVzLCB1c2luZyB0aGUgYnVyeWluZyBiZWV0bGUgKk5pY3JvcGhvcnVzIHZlc3BpbGxvaWRlcyouIEVpZ2h0ZWVuIG1hbGUgYmVldGxlcyB3ZXJlIHByZXNlbnRlZCB3aXRoIHRoZSBzYW1lIGZlbWFsZSBiZWV0bGUgZm91ciB0aW1lcywgYW5kIHRoZW4gYSBub3ZlbCBmZW1hbGUgb24gdGhlIGZpZnRoIG9jY2FzaW9uLiBUaGlzIHdhcyBhIHJlcGVhdGVkIG1lYXN1cmVzIGRlc2lnbiBhcyB0aGUgc2FtZSBpbmRpdmlkdWFsIG1hbGVzIHdlcmUgcmVwZWF0ZWRseSBwcmVzZW50ZWQgd2l0aCBmZW1hbGVzLiBUaGVyZSB3YXMgbm8gZXZpZGVuY2UgdGhhdCBwaHlzaWNhbCBleGhhdXN0aW9uIGFmZmVjdGVkIHRpbWUgdG8gbWF0aW5nIGFzIGEgc2VwYXJhdGUgY29udHJvbCBncm91cCBvZiBtYWxlcyB3ZXJlIHByZXNlbnRlZCB3aXRoIG5vdmVsLCB1bm1hdGVkIGZlbWFsZXMgZml2ZSB0aW1lcyBpbiBzdWNjZXNzaW9uLCBhbmQgdGhlcmUgd2FzIG5vIGNoYW5nZSBpbiB0aW1lIHRvIG1hdGluZy4gVGhlIHdpdGhpbi1zdWJqZWN0cyBmYWN0b3Igd2FzIHRoZSBvcmRlciBvZiBwcmVzZW50ZWQgZmVtYWxlcywgYW5kIHdoaWxlIHRoaXMgY291bGQgaGF2ZSBiZWVuIHRyZWF0ZWQgYXMgYSBjb250aW51b3VzIGNvdmFyaWF0ZSwgd2UgdHJlYXRlZCBpdCBhcyBhIGZpeGVkIGZhY3RvciB3aXRoIGZpdmUgZ3JvdXBzLiBUaGUgcmVzcG9uc2UgdmFyaWFibGUgcmVjb3JkZWQgb24gZWFjaCBvY2Nhc2lvbiB3YXMgdGltZSB0byBtYXRpbmcuCgohW0FkdWx0IGJ1cnlpbmcgYmVldGxlLiBGcmFuY2lzY28gV2VsdGVyLVNjaHVsdGVzLiBXaWtpbWVkaWEgQ29tbW9ucyBDcmVhdGl2ZSBDb21tb25zIENDMCAxLjAgVW5pdmVyc2FsIFB1YmxpYyBEb21haW4gRGVkaWNhdGlvbl0oLi4vbWVkaWEvTmljcm9waG9ydXMtdmVzcGlsbG9pZGVzLTA0LWZ3cy5qcGcpe3dpZHRoPSIzOTIifQoKRnJhbmNpc2NvIFdlbHRlci1TY2h1bHRlcywgW0NDMF0oaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC9kZWVkLmVuKSwgdmlhIFdpa2ltZWRpYSBDb21tb25zCgpTdGVpZ2VyLCBTLiwgRnJhbnosIFIuLCBFZ2dlcnQsIEEuIEsuICYgTXVsbGVyLCBKLiBLLiAoMjAwOCkuIFRoZSBDb29saWRnZSBlZmZlY3QsIGluZGl2aWR1YWwgcmVjb2duaXRpb24gYW5kIHNlbGVjdGlvbiBmb3IgZGlzdGluY3RpdmUgY3V0aWN1bGFyIHNpZ25hdHVyZXMgaW4gYSBidXJ5aW5nIGJlZXRsZS4gKlByb2NlZWRpbmdzIG9mIHRoZSBSb3lhbCBTb2NpZXR5IEIqLCAyNzUsIDE4MzEtOC4KCkxpbmsgdG8gdGhlIHBhcGVyOiBkb2k6IFsxMC4xMDk4L3JzcGIuMjAwOC4wMzc1XShodHRwczovL2RvaS5vcmcvMTAuMTA5OC9yc3BiLjIwMDguMDM3NSkgYW5kIFtkYXRhXShodHRwOi8vcnNwYi5yb3lhbHNvY2lldHlwdWJsaXNoaW5nLm9yZy9jb250ZW50L3N1cHBsLzIwMDkvMDIvMjAvMjc1LjE2NDUuMTgzMS5EQzEuaHQlMjBtbCkKCiMjIyBQcmVsaW1pbmFyaWVzCgpGaXJzdCwgbG9hZCB0aGUgcmVxdWlyZWQgcGFja2FnZXMgKGFmZXgsIGNhciwgbGF0dGljZSwgbG1lNCwgbG1lclRlc3QsIG5sbWUsIFZDQSwgZXosIGVtbWVhbnMsIFJtaXNjLCBNdU1JbikKCmBgYHtyIGluY2x1ZGU9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQpkZXZ0b29sczo6c291cmNlX3VybCgiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21qa2VvdWdoL21qa2VvdWdoLmdpdGh1Yi5pby9yZWZzL2hlYWRzL21haW4vUi9saWJyYXJpZXMuUiIpICAgI1RoaXMgaXMgdGhlIGNvbW1vbiBzZXQgb2YgcGFja2FnZXMKYGBgCgpJbXBvcnQgc3RlaWdlciBkYXRhIGZpbGUgKHN0ZWlnZXIuY3N2KQoKYGBge3J9CnN0ZWlnZXIgPC0gcmVhZC5jc3YoIi4uL2RhdGEvc3RlaWdlci5jc3YiKQpzdGVpZ2VyCmBgYAoKU2V0IGNvbnRyYXN0cyBmcm9tIGFmZXguIE1ha2UgaW5kaXZpZHVhbCBhIGZhY3RvciBSZWFycmFuZ2UgbWF0aW5nbnVtYmVyIG9yZGVyIHRvIG92ZXJyaWRlIGRlZmF1bHQgYWxwaGFiZXRpY2FsIG9yZGVyCgpgYGB7ciByZXN1bHRzPSdoaWRlJ30Kc2V0X3N1bV9jb250cmFzdHMoKQpzdGVpZ2VyJGluZGl2aWR1YWwgPC0gZmFjdG9yKHN0ZWlnZXIkaW5kaXZpZHVhbCkKc3RlaWdlciRtYXRpbmdudW1iZXIgPC0gZmFjdG9yKHN0ZWlnZXIkbWF0aW5nbnVtYmVyLCBsZXZlbHM9YygiZmlyc3QiLCJzZWNvbmQiLCJ0aGlyZCIsImZvdXJ0aCIsImZpZnRoIikpCmBgYAoKUXVpY2sgYm94cGxvdCB0byBsb29rIGF0IHZhcmlhbmNlcyBmb3IgZGlmZmVyZW50IG1hdGluZyBudW1iZXJzCgpgYGB7ciB9CmJveHBsb3QodGltZX5tYXRpbmdudW1iZXIsIGRhdGE9c3RlaWdlcikKYGBgCgojIyMgRml0IE9MUyBtb2RlbCB3aXRoIGRlZmF1bHQgYW92IFNTCgpgYGB7ciB9CnN0ZWlnZXIuYW92IDwtIGFvdih0aW1lfm1hdGluZ251bWJlcitpbmRpdmlkdWFsLCBkYXRhPXN0ZWlnZXIpCmBgYAoKQ2hlY2sgcmVzaWR1YWxzIC0gc29tZSBldmlkZW5jZSBmb3IgaW50ZXJhY3Rpb24KCmBgYHtyIH0KcGxvdChzdGVpZ2VyLmFvdikKYGBgCgojIyMgRG8gaW50ZXJhY3Rpb24gcGxvdAoKYGBge3IgfQppbnRlcmFjdGlvbi5wbG90KHN0ZWlnZXIkbWF0aW5nbnVtYmVyLCBzdGVpZ2VyJGluZGl2aWR1YWwsIHN0ZWlnZXIkdGltZSkKYGBgCgpUaGUgcmFuayBvcmRlciBvZiB0cmVhdG1lbnRzIGNvbnNpc3RlbnQgYnV0IHRoZSBzaXplcyBvZiB0aGUgZGlmZmVyZW5jZXMgdmFyeSBncmVhdGx5IGJldHdlZW4gaW5kaXZpZHVhbHMuIFF1aWNrbHkgdHJ5IGJveHBsb3Qgd2l0aCBsb2ctdHJhbnNmb3JtZWQgZGF0YSB0byBzZWUgaWYgYW55IGltcHJvdmVtZW50CgpgYGB7ciB9CmJveHBsb3QobG9nMTAodGltZSl+bWF0aW5nbnVtYmVyLCBkYXRhPXN0ZWlnZXIpCmBgYAoKIyMjIFRyYW5zZm9ybSB0byBsb2dzIGR1ZSB0byB2YXJpYW5jZSBoZXRlcm9nZW5laXR5IGFuZCB0byBtaW5pbWlzZSBpbnRlcmFjdGlvbgoKYGBge3IgfQpzdGVpZ2VyJGx0aW1lIDwtIGxvZzEwKHN0ZWlnZXIkdGltZSkKYGBgCgpSZWNoZWNrIGRpYWdub3N0aWNzIC0gbXVjaCBiZXR0ZXIgd2l0aCBsZXNzIGludGVyYWN0aW9uCgpgYGB7ciB9CmJveHBsb3QobHRpbWV+bWF0aW5nbnVtYmVyLCBkYXRhPXN0ZWlnZXIpCmludGVyYWN0aW9uLnBsb3Qoc3RlaWdlciRtYXRpbmdudW1iZXIsIHN0ZWlnZXIkaW5kaXZpZHVhbCwgc3RlaWdlciRsdGltZSkKYGBgCgojIyMgRml0IE9MUyBtb2RlbCB3aXRoIGRlZmF1bHQgYW92IFNTCgpgYGB7ciB9CnN0ZWlnZXIuYW92MSA8LSBhb3YobHRpbWV+bWF0aW5nbnVtYmVyK2luZGl2aWR1YWwsIGRhdGE9c3RlaWdlcikKYGBgCgpjaGVjayByZXNpZHVhbHMgLSBsb29rIE9LCgpgYGB7ciB9CnBsb3Qoc3RlaWdlci5hb3YxKQpgYGAKCiMjIyBFeGFtaW5lIHJlc3VsdHMKCk9uY2Ugd2UncmUgaGFwcHkgd2l0aCB0aGUgbW9kZWwgdGhhdCB3ZSdyZSBmaXR0aW5nLCB3ZSBjYW4gbG9vayBhdCB0aGUgcmVzdWx0cy4KCmBgYHtyIH0KdGlkeShzdGVpZ2VyLmFvdjEpCmVtbWVhbnMoc3RlaWdlci5hb3YxLCAibWF0aW5nbnVtYmVyIikKYGBgCgpHZXQgR3JlZW5ob3VzZSBHZWlzZXIgYWRqdXN0ZWQgcmVzdWx0cwoKYGBge3IgfQplenN0ZWlnZXIxIDwtIGV6QU5PVkEoZGF0YT1zdGVpZ2VyLCBkdj1sdGltZSwgd2lkPWluZGl2aWR1YWwsIHdpdGhpbj1tYXRpbmdudW1iZXIsIHR5cGU9MywgZGV0YWlsZWQ9VFJVRSkKcHJpbnQoZXpzdGVpZ2VyMSkKYGBgCgpVc2UgVkNBIHBhY2thZ2UgdG8gZ2V0IGFub3ZhIHZhciBjb21wcyAod2l0aCBDSXMgdGhhdCBjYW4gYmUgLXZlKQoKYGBge3IgfQpzdGVpZ2VyLnZjYSA8LSBhbm92YU1NKGx0aW1lfm1hdGluZ251bWJlcisoaW5kaXZpZHVhbCksIHN0ZWlnZXIpCnN0ZWlnZXIudmNhClZDQWluZmVyZW5jZShzdGVpZ2VyLnZjYSwgYWxwaGE9MC4wNSwgVmFyVkM9VFJVRSwgZXhjbHVkZU5lZz1GQUxTRSwgY29uc3RyYWluQ0k9RkFMU0UpCmBgYAoKIyMgRml0IHJhbmRvbSBpbnRlcmNlcHQgbW9kZWwgdXNpbmcgbG1lNCBhbmQgUkVNTAoKYGBge3IgfQpzdGVpZ2VyLmxtZXIxIDwtIGxtZXIobHRpbWV+bWF0aW5nbnVtYmVyICsgKDF8aW5kaXZpZHVhbCksIFJFTUw9VFJVRSwgc3RlaWdlcikKc3VtbWFyeShzdGVpZ2VyLmxtZXIxLCBkZGY9IktlbndhcmQtUm9nZXIiKQphbm92YShzdGVpZ2VyLmxtZXIxLCB0eXBlPTMsIGRkZj0iS2Vud2FyZC1Sb2dlciIpCmVtbWVhbnMoc3RlaWdlci5sbWVyMSwgfm1hdGluZ251bWJlcikKYGBgCgpOb3RlIGRpZmZlcmVudCBDSXMgY29tcGFyZWQgdG8gT0xTIG1vZGVsIGZpdHRpbmcgZHVlIHRvIEstUiBhZGp1c3RtZW50CgpDSSBvbiB2YXJpYW5jZSBjb21wb25lbnRzIChyZW1lbWJlcmluZyB0byBzcXVhcmUgQ0lzIGZyb20gbG1lciB3aGljaCBhcmUgaW4gU0QgdW5pdHMpCgpgYGB7ciB9CnN0ZWlnZXIuY2kxIDwtIGNvbmZpbnQubWVyTW9kKHN0ZWlnZXIubG1lcjEsIG9sZE5hbWVzPUZBTFNFKQpzdGVpZ2VyLnZjMSA8LSAoc3RlaWdlci5jaTEpXjIKcHJpbnQoc3RlaWdlci52YzEpCmBgYAoKIyMjIEJhciBncmFwaCBmb3IgdGltZSBtYWluIGVmZmVjdAoKYGBge3IgfQpzdGVpZ2VyX3N1bSA8LSBzdW1tYXJ5U0Uoc3RlaWdlciwgbWVhc3VyZXZhcj0gJ2x0aW1lJywgZ3JvdXB2YXJzPSAnbWF0aW5nbnVtYmVyJykKZ2dwbG90KHN0ZWlnZXJfc3VtLCBhZXMoeD1tYXRpbmdudW1iZXIsIHk9bHRpbWUpKSsKICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIHBvc2l0aW9uPSJkb2RnZSIsIGZpbGw9ImxpZ2h0Ymx1ZSIpKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49bHRpbWUtc2UsIHltYXg9bHRpbWUrc2UpLCB3aWR0aD0wLjMsIGNvbG9yPSJkYXJrYmx1ZSIpCmBgYAo=