library(readr)
Day10<- read_csv("~/Documents/RobertsLab/Methylome/Day10-methcounts-all.csv", col_types = cols(`EPI-111` = col_double(), 
                          EPI_103 = col_double()))

Day135 <- read_csv("~/Documents/RobertsLab/Methylome/Day135-methcounts-all.csv")
Sample.with.NA <- as.data.frame("EPI-103", stringsAsFactors=FALSE)
colnames(Sample.with.NA)[1] <- "Sample" 
Sample.with.NA[2,1] <- "EPI-104"
Sample.with.NA[3,1] <- "EPI-111"
Sample.with.NA[4,1] <- "EPI-113"
Sample.with.NA[5,1] <- "EPI-119"
Sample.with.NA[6,1] <- "EPI-120"
Sample.with.NA[7,1] <- "EPI-127"
Sample.with.NA[8,1] <- "EPI-128"
Sample.with.NA[9,1] <- "EPI-135"
Sample.with.NA[10,1] <- "EPI-136"
Sample.with.NA[11,1] <- "EPI-143"
Sample.with.NA[12,1] <- "EPI-145"
Sample.with.NA[13,1] <- "EPI-151"
Sample.with.NA[14,1] <- "EPI-152"
Sample.with.NA[15,1] <- "EPI-153"
Sample.with.NA[16,1] <- "EPI-154"
Sample.with.NA[17,1] <- "EPI-159"
Sample.with.NA[18,1] <- "EPI-160"
Sample.with.NA[19,1] <- "EPI-161"
Sample.with.NA[20,1] <- "EPI-162"
Sample.with.NA[21,1] <- "EPI-167"
Sample.with.NA[22,1] <- "EPI-168"
Sample.with.NA[23,1] <- "EPI-169"
Sample.with.NA[24,1] <- "EPI-170"
Sample.wo.NA <- as.data.frame("EPI-103", stringsAsFactors=FALSE)
colnames(Sample.wo.NA)[1] <- "Sample"
Sample.wo.NA[2,1] <- "EPI-104"
Sample.wo.NA[3,1] <- "EPI-111"
Sample.wo.NA[4,1] <- "EPI-113"
Sample.wo.NA[5,1] <- "EPI-119"
Sample.wo.NA[6,1] <- "EPI-120"
Sample.wo.NA[7,1] <- "EPI-127"
Sample.wo.NA[8,1] <- "EPI-128"
Sample.wo.NA[9,1] <- "EPI-135"
Sample.wo.NA[10,1] <- "EPI-136"
Sample.wo.NA[11,1] <- "EPI-143"
Sample.wo.NA[12,1] <- "EPI-145"
Sample.wo.NA[13,1] <- "EPI-151"
Sample.wo.NA[14,1] <- "EPI-152"
Sample.wo.NA[15,1] <- "EPI-153"
Sample.wo.NA[16,1] <- "EPI-154"
Sample.wo.NA[17,1] <- "EPI-159"
Sample.wo.NA[18,1] <- "EPI-160"
Sample.wo.NA[19,1] <- "EPI-161"
Sample.wo.NA[20,1] <- "EPI-162"
Sample.wo.NA[21,1] <- "EPI-167"
Sample.wo.NA[22,1] <- "EPI-168"
Sample.wo.NA[23,1] <- "EPI-169"
Sample.wo.NA[24,1] <- "EPI-170"
Sample.with.NA$mean[1] <- sum(Day10$EPI_103, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[1] <- mean(Day10$EPI_103, na.rm = TRUE)
Sample.with.NA$mean[2] <- sum(Day10$`EPI-104`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[2] <- mean(Day10$`EPI-104`, na.rm = TRUE)
Sample.with.NA$mean[3] <- sum(Day10$`EPI-111`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[3] <- mean(Day10$`EPI-111`, na.rm = TRUE)
Sample.with.NA$mean[4] <- sum(Day10$`EPI-113`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[4] <- mean(Day10$`EPI-113`, na.rm = TRUE)
Sample.with.NA$mean[5] <- sum(Day10$`EPI-119`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[5] <- mean(Day10$`EPI-119`, na.rm = TRUE)
Sample.with.NA$mean[6] <- sum(Day10$`EPI-120`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[6] <- mean(Day10$`EPI-120`, na.rm = TRUE)
Sample.with.NA$mean[7] <- sum(Day10$`EPI-127`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[7] <- mean(Day10$`EPI-127`, na.rm = TRUE)
Sample.with.NA$mean[8] <- sum(Day10$`EPI-128`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[8] <- mean(Day10$`EPI-128`, na.rm = TRUE)
Sample.with.NA$mean[9] <- sum(Day10$`EPI-135`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[9] <- mean(Day10$`EPI-135`, na.rm = TRUE)
Sample.with.NA$mean[10] <- sum(Day10$`EPI-136`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[10] <- mean(Day10$`EPI-136`, na.rm = TRUE)
Sample.with.NA$mean[11] <- sum(Day10$`EPI-143`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[1] <- mean(Day10$`EPI-143`, na.rm = TRUE)
Sample.with.NA$mean[12] <- sum(Day10$`EPI-145`, na.rm = TRUE) / nrow(Day10_methcounts_all)
Sample.wo.NA$mean[12] <- mean(Day10$`EPI-145`, na.rm = TRUE)
Sample.with.NA$trt <- as.factor(c(1,1,2,2,0,0,1,1,0,0,2,2,0,0,0,0,1,1,1,1,2,2,2,2))
Sample.wo.NA$trt <- as.factor(c(1,1,2,2,0,0,1,1,0,0,2,2,0,0,0,0,1,1,1,1,2,2,2,2))
Sample.with.NA$time <- as.factor(c(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1))
Sample.wo.NA$time <- as.factor(c(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1))
aov.with.NA <- aov(mean ~ trt + time, data = Sample.with.NA)
aov.wo.NA <- aov(mean ~ trt + time, data = Sample.wo.NA)

And lets see what the summary look like for the version with all NAs. As well as some simple residual plots

summary.lm(aov.with.NA)

Call:
aov(formula = mean ~ trt + time, data = Sample.with.NA)

Residuals:
       Min         1Q     Median         3Q        Max 
-0.0099056 -0.0006313  0.0002180  0.0004133  0.0125698 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.1275478  0.0017802  71.647  < 2e-16 ***
trt1        -0.0010446  0.0021803  -0.479    0.637    
trt2        -0.0008492  0.0021803  -0.389    0.701    
time1       -0.0103189  0.0017802  -5.796 1.14e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.004361 on 20 degrees of freedom
Multiple R-squared:  0.6286,    Adjusted R-squared:  0.5729 
F-statistic: 11.29 on 3 and 20 DF,  p-value: 0.0001501
plot(aov.with.NA)

summary.lm(aov.wo.NA)

Call:
aov(formula = mean ~ trt + time, data = Sample.wo.NA)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.013714 -0.000951  0.000316  0.001512  0.008046 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.235847   0.001673 140.960  < 2e-16 ***
trt1         0.003341   0.002049   1.630  0.11869    
trt2         0.001196   0.002049   0.584  0.56585    
time1       -0.005002   0.001673  -2.989  0.00725 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.004098 on 20 degrees of freedom
Multiple R-squared:  0.3684,    Adjusted R-squared:  0.2737 
F-statistic: 3.888 on 3 and 20 DF,  p-value: 0.02435

So both show time as a signfiicant predictor variable. That’s something!

How about interactions?

int.aov.with.NA <- aov(mean ~ trt*time, data = Sample.with.NA)
summary.lm(int.aov.with.NA)

Call:
aov(formula = mean ~ trt * time, data = Sample.with.NA)

Residuals:
       Min         1Q     Median         3Q        Max 
-0.0094923  0.0000000  0.0000000  0.0002328  0.0129831 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.128179   0.002283  56.138  < 2e-16 ***
trt1        -0.002089   0.003229  -0.647  0.52582    
trt2        -0.001698   0.003229  -0.526  0.60532    
time1       -0.011581   0.003229  -3.587  0.00211 ** 
trt1:time1   0.002089   0.004567   0.457  0.65280    
trt2:time1   0.001698   0.004567   0.372  0.71429    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.004567 on 18 degrees of freedom
Multiple R-squared:  0.6335,    Adjusted R-squared:  0.5317 
F-statistic: 6.222 on 5 and 18 DF,  p-value: 0.001617

Again, not super exciting. Just showing that there’s a difference in methylation by time.

What is interesting however is the normal QQ plot. That is a beautiful example of a “heavy-tailed” distribution. Which means we’re definetly departing from our assumption of normality. Was worth a shot though!

LS0tCnRpdGxlOiAiRGF5IDEwIGFuZCBEYXkgMTM1IDItd2F5IEFOT1ZBIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKYGBge3J9CgoKbGlicmFyeShyZWFkcikKRGF5MTA8LSByZWFkX2Nzdigifi9Eb2N1bWVudHMvUm9iZXJ0c0xhYi9NZXRoeWxvbWUvRGF5MTAtbWV0aGNvdW50cy1hbGwuY3N2IiwgY29sX3R5cGVzID0gY29scyhgRVBJLTExMWAgPSBjb2xfZG91YmxlKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgIEVQSV8xMDMgPSBjb2xfZG91YmxlKCkpKQoKRGF5MTM1IDwtIHJlYWRfY3N2KCJ+L0RvY3VtZW50cy9Sb2JlcnRzTGFiL01ldGh5bG9tZS9EYXkxMzUtbWV0aGNvdW50cy1hbGwuY3N2IikKCgpgYGAKCgoKYGBge3J9CgoKU2FtcGxlLndpdGguTkEgPC0gYXMuZGF0YS5mcmFtZSgiRVBJLTEwMyIsIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpCmNvbG5hbWVzKFNhbXBsZS53aXRoLk5BKVsxXSA8LSAiU2FtcGxlIiAKU2FtcGxlLndpdGguTkFbMiwxXSA8LSAiRVBJLTEwNCIKU2FtcGxlLndpdGguTkFbMywxXSA8LSAiRVBJLTExMSIKU2FtcGxlLndpdGguTkFbNCwxXSA8LSAiRVBJLTExMyIKU2FtcGxlLndpdGguTkFbNSwxXSA8LSAiRVBJLTExOSIKU2FtcGxlLndpdGguTkFbNiwxXSA8LSAiRVBJLTEyMCIKU2FtcGxlLndpdGguTkFbNywxXSA8LSAiRVBJLTEyNyIKU2FtcGxlLndpdGguTkFbOCwxXSA8LSAiRVBJLTEyOCIKU2FtcGxlLndpdGguTkFbOSwxXSA8LSAiRVBJLTEzNSIKU2FtcGxlLndpdGguTkFbMTAsMV0gPC0gIkVQSS0xMzYiClNhbXBsZS53aXRoLk5BWzExLDFdIDwtICJFUEktMTQzIgpTYW1wbGUud2l0aC5OQVsxMiwxXSA8LSAiRVBJLTE0NSIKU2FtcGxlLndpdGguTkFbMTMsMV0gPC0gIkVQSS0xNTEiClNhbXBsZS53aXRoLk5BWzE0LDFdIDwtICJFUEktMTUyIgpTYW1wbGUud2l0aC5OQVsxNSwxXSA8LSAiRVBJLTE1MyIKU2FtcGxlLndpdGguTkFbMTYsMV0gPC0gIkVQSS0xNTQiClNhbXBsZS53aXRoLk5BWzE3LDFdIDwtICJFUEktMTU5IgpTYW1wbGUud2l0aC5OQVsxOCwxXSA8LSAiRVBJLTE2MCIKU2FtcGxlLndpdGguTkFbMTksMV0gPC0gIkVQSS0xNjEiClNhbXBsZS53aXRoLk5BWzIwLDFdIDwtICJFUEktMTYyIgpTYW1wbGUud2l0aC5OQVsyMSwxXSA8LSAiRVBJLTE2NyIKU2FtcGxlLndpdGguTkFbMjIsMV0gPC0gIkVQSS0xNjgiClNhbXBsZS53aXRoLk5BWzIzLDFdIDwtICJFUEktMTY5IgpTYW1wbGUud2l0aC5OQVsyNCwxXSA8LSAiRVBJLTE3MCIKClNhbXBsZS53by5OQSA8LSBhcy5kYXRhLmZyYW1lKCJFUEktMTAzIiwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkKY29sbmFtZXMoU2FtcGxlLndvLk5BKVsxXSA8LSAiU2FtcGxlIgpTYW1wbGUud28uTkFbMiwxXSA8LSAiRVBJLTEwNCIKU2FtcGxlLndvLk5BWzMsMV0gPC0gIkVQSS0xMTEiClNhbXBsZS53by5OQVs0LDFdIDwtICJFUEktMTEzIgpTYW1wbGUud28uTkFbNSwxXSA8LSAiRVBJLTExOSIKU2FtcGxlLndvLk5BWzYsMV0gPC0gIkVQSS0xMjAiClNhbXBsZS53by5OQVs3LDFdIDwtICJFUEktMTI3IgpTYW1wbGUud28uTkFbOCwxXSA8LSAiRVBJLTEyOCIKU2FtcGxlLndvLk5BWzksMV0gPC0gIkVQSS0xMzUiClNhbXBsZS53by5OQVsxMCwxXSA8LSAiRVBJLTEzNiIKU2FtcGxlLndvLk5BWzExLDFdIDwtICJFUEktMTQzIgpTYW1wbGUud28uTkFbMTIsMV0gPC0gIkVQSS0xNDUiClNhbXBsZS53by5OQVsxMywxXSA8LSAiRVBJLTE1MSIKU2FtcGxlLndvLk5BWzE0LDFdIDwtICJFUEktMTUyIgpTYW1wbGUud28uTkFbMTUsMV0gPC0gIkVQSS0xNTMiClNhbXBsZS53by5OQVsxNiwxXSA8LSAiRVBJLTE1NCIKU2FtcGxlLndvLk5BWzE3LDFdIDwtICJFUEktMTU5IgpTYW1wbGUud28uTkFbMTgsMV0gPC0gIkVQSS0xNjAiClNhbXBsZS53by5OQVsxOSwxXSA8LSAiRVBJLTE2MSIKU2FtcGxlLndvLk5BWzIwLDFdIDwtICJFUEktMTYyIgpTYW1wbGUud28uTkFbMjEsMV0gPC0gIkVQSS0xNjciClNhbXBsZS53by5OQVsyMiwxXSA8LSAiRVBJLTE2OCIKU2FtcGxlLndvLk5BWzIzLDFdIDwtICJFUEktMTY5IgpTYW1wbGUud28uTkFbMjQsMV0gPC0gIkVQSS0xNzAiCgpTYW1wbGUud2l0aC5OQSRtZWFuWzFdIDwtIHN1bShEYXkxMCRFUElfMTAzLCBuYS5ybSA9IFRSVUUpIC8gbnJvdyhEYXkxMF9tZXRoY291bnRzX2FsbCkKU2FtcGxlLndvLk5BJG1lYW5bMV0gPC0gbWVhbihEYXkxMCRFUElfMTAzLCBuYS5ybSA9IFRSVUUpCgpTYW1wbGUud2l0aC5OQSRtZWFuWzJdIDwtIHN1bShEYXkxMCRgRVBJLTEwNGAsIG5hLnJtID0gVFJVRSkgLyBucm93KERheTEwX21ldGhjb3VudHNfYWxsKQpTYW1wbGUud28uTkEkbWVhblsyXSA8LSBtZWFuKERheTEwJGBFUEktMTA0YCwgbmEucm0gPSBUUlVFKQoKU2FtcGxlLndpdGguTkEkbWVhblszXSA8LSBzdW0oRGF5MTAkYEVQSS0xMTFgLCBuYS5ybSA9IFRSVUUpIC8gbnJvdyhEYXkxMF9tZXRoY291bnRzX2FsbCkKU2FtcGxlLndvLk5BJG1lYW5bM10gPC0gbWVhbihEYXkxMCRgRVBJLTExMWAsIG5hLnJtID0gVFJVRSkKClNhbXBsZS53aXRoLk5BJG1lYW5bNF0gPC0gc3VtKERheTEwJGBFUEktMTEzYCwgbmEucm0gPSBUUlVFKSAvIG5yb3coRGF5MTBfbWV0aGNvdW50c19hbGwpClNhbXBsZS53by5OQSRtZWFuWzRdIDwtIG1lYW4oRGF5MTAkYEVQSS0xMTNgLCBuYS5ybSA9IFRSVUUpCgpTYW1wbGUud2l0aC5OQSRtZWFuWzVdIDwtIHN1bShEYXkxMCRgRVBJLTExOWAsIG5hLnJtID0gVFJVRSkgLyBucm93KERheTEwX21ldGhjb3VudHNfYWxsKQpTYW1wbGUud28uTkEkbWVhbls1XSA8LSBtZWFuKERheTEwJGBFUEktMTE5YCwgbmEucm0gPSBUUlVFKQoKU2FtcGxlLndpdGguTkEkbWVhbls2XSA8LSBzdW0oRGF5MTAkYEVQSS0xMjBgLCBuYS5ybSA9IFRSVUUpIC8gbnJvdyhEYXkxMF9tZXRoY291bnRzX2FsbCkKU2FtcGxlLndvLk5BJG1lYW5bNl0gPC0gbWVhbihEYXkxMCRgRVBJLTEyMGAsIG5hLnJtID0gVFJVRSkKClNhbXBsZS53aXRoLk5BJG1lYW5bN10gPC0gc3VtKERheTEwJGBFUEktMTI3YCwgbmEucm0gPSBUUlVFKSAvIG5yb3coRGF5MTBfbWV0aGNvdW50c19hbGwpClNhbXBsZS53by5OQSRtZWFuWzddIDwtIG1lYW4oRGF5MTAkYEVQSS0xMjdgLCBuYS5ybSA9IFRSVUUpCgpTYW1wbGUud2l0aC5OQSRtZWFuWzhdIDwtIHN1bShEYXkxMCRgRVBJLTEyOGAsIG5hLnJtID0gVFJVRSkgLyBucm93KERheTEwX21ldGhjb3VudHNfYWxsKQpTYW1wbGUud28uTkEkbWVhbls4XSA8LSBtZWFuKERheTEwJGBFUEktMTI4YCwgbmEucm0gPSBUUlVFKQoKU2FtcGxlLndpdGguTkEkbWVhbls5XSA8LSBzdW0oRGF5MTAkYEVQSS0xMzVgLCBuYS5ybSA9IFRSVUUpIC8gbnJvdyhEYXkxMF9tZXRoY291bnRzX2FsbCkKU2FtcGxlLndvLk5BJG1lYW5bOV0gPC0gbWVhbihEYXkxMCRgRVBJLTEzNWAsIG5hLnJtID0gVFJVRSkKClNhbXBsZS53aXRoLk5BJG1lYW5bMTBdIDwtIHN1bShEYXkxMCRgRVBJLTEzNmAsIG5hLnJtID0gVFJVRSkgLyBucm93KERheTEwX21ldGhjb3VudHNfYWxsKQpTYW1wbGUud28uTkEkbWVhblsxMF0gPC0gbWVhbihEYXkxMCRgRVBJLTEzNmAsIG5hLnJtID0gVFJVRSkKClNhbXBsZS53aXRoLk5BJG1lYW5bMTFdIDwtIHN1bShEYXkxMCRgRVBJLTE0M2AsIG5hLnJtID0gVFJVRSkgLyBucm93KERheTEwX21ldGhjb3VudHNfYWxsKQpTYW1wbGUud28uTkEkbWVhblsxXSA8LSBtZWFuKERheTEwJGBFUEktMTQzYCwgbmEucm0gPSBUUlVFKQoKU2FtcGxlLndpdGguTkEkbWVhblsxMl0gPC0gc3VtKERheTEwJGBFUEktMTQ1YCwgbmEucm0gPSBUUlVFKSAvIG5yb3coRGF5MTBfbWV0aGNvdW50c19hbGwpClNhbXBsZS53by5OQSRtZWFuWzEyXSA8LSBtZWFuKERheTEwJGBFUEktMTQ1YCwgbmEucm0gPSBUUlVFKQoKU2FtcGxlLndpdGguTkEkdHJ0IDwtIGFzLmZhY3RvcihjKDEsMSwyLDIsMCwwLDEsMSwwLDAsMiwyLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyKSkKU2FtcGxlLndvLk5BJHRydCA8LSBhcy5mYWN0b3IoYygxLDEsMiwyLDAsMCwxLDEsMCwwLDIsMiwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMikpCgpTYW1wbGUud2l0aC5OQSR0aW1lIDwtIGFzLmZhY3RvcihjKDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxKSkKU2FtcGxlLndvLk5BJHRpbWUgPC0gYXMuZmFjdG9yKGMoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEpKQpgYGAKCmBgYHtyfQoKYW92LndpdGguTkEgPC0gYW92KG1lYW4gfiB0cnQgKyB0aW1lLCBkYXRhID0gU2FtcGxlLndpdGguTkEpCmFvdi53by5OQSA8LSBhb3YobWVhbiB+IHRydCArIHRpbWUsIGRhdGEgPSBTYW1wbGUud28uTkEpCgpgYGAKCkFuZCBsZXRzIHNlZSB3aGF0IHRoZSBzdW1tYXJ5IGxvb2sgbGlrZSBmb3IgdGhlIHZlcnNpb24gd2l0aCBhbGwgTkFzLiBBcyB3ZWxsIGFzIHNvbWUgc2ltcGxlIHJlc2lkdWFsIHBsb3RzCmBgYHtyfQoKc3VtbWFyeS5sbShhb3Yud2l0aC5OQSkKCmBgYAoKYGBge3J9CgpwbG90KGFvdi53aXRoLk5BKQoKYGBgCgpgYGB7cn0KCnN1bW1hcnkubG0oYW92LndvLk5BKQoKYGBgCgoKYGBge3J9CgpwbG90KGFvdi53by5OQSkKCmBgYApTbyBib3RoIHNob3cgdGltZSBhcyBhIHNpZ25maWljYW50IHByZWRpY3RvciB2YXJpYWJsZS4gVGhhdCdzIHNvbWV0aGluZyEKCkhvdyBhYm91dCBpbnRlcmFjdGlvbnM/CgpgYGB7cn0KCmludC5hb3Yud2l0aC5OQSA8LSBhb3YobWVhbiB+IHRydCp0aW1lLCBkYXRhID0gU2FtcGxlLndpdGguTkEpCgpgYGAKCgpgYGB7cn0KCnN1bW1hcnkubG0oaW50LmFvdi53aXRoLk5BKQoKYGBgCgpgYGB7cn0KCnBsb3QoaW50LmFvdi53aXRoLk5BKQoKYGBgCgpBZ2Fpbiwgbm90IHN1cGVyIGV4Y2l0aW5nLiBKdXN0IHNob3dpbmcgdGhhdCB0aGVyZSdzIGEgZGlmZmVyZW5jZSBpbiBtZXRoeWxhdGlvbiBieSB0aW1lLiAKCldoYXQgaXMgaW50ZXJlc3RpbmcgaG93ZXZlciBpcyB0aGUgbm9ybWFsIFFRIHBsb3QuIFRoYXQgaXMgYSBiZWF1dGlmdWwgZXhhbXBsZSBvZiBhICJoZWF2eS10YWlsZWQiIGRpc3RyaWJ1dGlvbi4gV2hpY2ggbWVhbnMgd2UncmUgZGVmaW5ldGx5IGRlcGFydGluZyBmcm9tIG91ciBhc3N1bXB0aW9uIG9mIG5vcm1hbGl0eS4gV2FzIHdvcnRoIGEgc2hvdCB0aG91Z2ghCgo=