library(readr)
library(ggplot2)
library(dplyr)
library(lattice)
library(car)
library(knitr)
library(car)
library(cowplot)
library(datasets)
barley <- read_delim("http://sciences.ucf.edu/biology/d4lab/wp-content/uploads/sites/125/2017/01/barley.txt", "\t", escape_double = FALSE, trim_ws = TRUE)
zinc <- read_delim("http://sciences.ucf.edu/biology/d4lab/wp-content/uploads/sites/125/2017/01/zinc.txt", "\t", escape_double = FALSE, trim_ws = TRUE)
possum <- read_delim("http://sciences.ucf.edu/biology/d4lab/wp-content/uploads/sites/125/2017/01/possum.txt", "\t", escape_double = FALSE, trim_ws = TRUE)
attach(zinc)
The following objects are masked from zinc (pos = 5):
DIVERSITY, STREAM, ZINC
The following objects are masked from zinc (pos = 9):
DIVERSITY, STREAM, ZINC
The following objects are masked from zinc (pos = 13):
DIVERSITY, STREAM, ZINC
The following objects are masked from zinc (pos = 20):
DIVERSITY, STREAM, ZINC
str(zinc)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 34 obs. of 3 variables:
$ STREAM : chr "Arkan" "Arkan" "Arkan" "Arkan" ...
$ ZINC : chr "LOW" "LOW" "LOW" "LOW" ...
$ DIVERSITY: num 1.4 2.18 1.83 1.88 2.1 2.02 1.94 1.7 2.05 1.98 ...
- attr(*, "spec")=List of 2
..$ cols :List of 3
.. ..$ STREAM : list()
.. .. ..- attr(*, "class")= chr "collector_character" "collector"
.. ..$ ZINC : list()
.. .. ..- attr(*, "class")= chr "collector_character" "collector"
.. ..$ DIVERSITY: list()
.. .. ..- attr(*, "class")= chr "collector_double" "collector"
..$ default: list()
.. ..- attr(*, "class")= chr "collector_guess" "collector"
..- attr(*, "class")= chr "col_spec"
fZinc <- as.factor(ZINC)
leveneTest(DIVERSITY ~ ZINC)
group coerced to factor.
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 3 0.0195 0.9962
30
Zin2 <- aov(DIVERSITY ~ ZINC)
Zin3 <- lm(DIVERSITY ~ ZINC)
summary(Zin2)
Df Sum Sq Mean Sq F value Pr(>F)
ZINC 3 2.567 0.8555 3.939 0.0176 *
Residuals 30 6.516 0.2172
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(Zin3)
Call:
lm(formula = DIVERSITY ~ ZINC)
Residuals:
Min 1Q Median 3Q Max
-1.03750 -0.22896 0.07986 0.33222 0.79750
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.79750 0.16478 10.909 5.81e-12 ***
ZINCHIGH -0.51972 0.22647 -2.295 0.0289 *
ZINCLOW 0.23500 0.23303 1.008 0.3213
ZINCMED -0.07972 0.22647 -0.352 0.7273
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4661 on 30 degrees of freedom
Multiple R-squared: 0.2826, Adjusted R-squared: 0.2108
F-statistic: 3.939 on 3 and 30 DF, p-value: 0.01756
interaction.plot(fZinc, trace.factor=ZINC, response=DIVERSITY,
fun=mean, type="b")

posthoc <- TukeyHSD(x=Zin2, ordered = FALSE, conf.level=0.95)
plot(posthoc)

posthoc
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = DIVERSITY ~ ZINC)
$ZINC
diff lwr upr p adj
HIGH-BACK -0.51972222 -1.1355064 0.09606192 0.1218677
LOW-BACK 0.23500000 -0.3986367 0.86863665 0.7457444
MED-BACK -0.07972222 -0.6955064 0.53606192 0.9847376
LOW-HIGH 0.75472222 0.1389381 1.37050636 0.0116543
MED-HIGH 0.44000000 -0.1573984 1.03739837 0.2095597
MED-LOW -0.31472222 -0.9305064 0.30106192 0.5153456
- The levene’s test is there and shows that the data set does have a normal distribution (we can’t reject the null hypothesis) so it’s safe to use the dataset without doing transformations to the data.
- In the one-way ANOVA statistically we see that Zinc has a significant affect on the data set, meaning that within the dataset there is something that is causing the means to be statistically significant. The LM shows us that between all of the populations within the dataset, the mean that is significantly different is only High levels of Zinc. This means that something is occuring in the High groups that’s causing the means to shift in a significant way in that data group. Biologically High levels of zinc is causing a statistically significant decrease in diversity.
attach(barley)
barley$fblock <- factor(barley$Block)
barley$fvariety <- factor(barley$variety)
leveneTest(yield ~ barley$fvariety)
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 3 0.2868 0.834
12
leveneTest(yield ~ barley$fblock )
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 3 3.3031 0.05756 .
12
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
shapiro.test(yield)
Shapiro-Wilk normality test
data: yield
W = 0.84163, p-value = 0.01028
barley$YIELD<- log(barley$yield)
shapiro.test(barley$YIELD)
Shapiro-Wilk normality test
data: barley$YIELD
W = 0.90372, p-value = 0.09219
modelA <- aov(barley$YIELD ~ barley$fvariety+ barley$fblock)
modelL <- lm(barley$YIELD ~ barley$fvariety+ barley$fblock)
modelT <- aov(barley$YIELD ~ barley$fblock)
modelR <- aov(barley$YIELD ~ barley$fvariety)
summary(modelA)
Df Sum Sq Mean Sq F value Pr(>F)
barley$fvariety 3 0.0538 0.0179 1.714 0.233
barley$fblock 3 1.0817 0.3606 34.451 2.91e-05 ***
Residuals 9 0.0942 0.0105
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(modelL)
Call:
lm(formula = barley$YIELD ~ barley$fvariety + barley$fblock)
Residuals:
Min 1Q Median 3Q Max
-0.156441 -0.040672 0.006526 0.030688 0.163595
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.51009 0.06767 66.650 1.95e-13 ***
barley$fvarietyvar2 -0.03993 0.07234 -0.552 0.594418
barley$fvarietyvar3 -0.14896 0.07234 -2.059 0.069580 .
barley$fvarietyvar4 -0.01724 0.07234 -0.238 0.816992
barley$fblock2 -0.38596 0.07234 -5.335 0.000471 ***
barley$fblock3 -0.55392 0.07234 -7.657 3.14e-05 ***
barley$fblock4 -0.69470 0.07234 -9.603 5.01e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1023 on 9 degrees of freedom
Multiple R-squared: 0.9234, Adjusted R-squared: 0.8723
F-statistic: 18.08 on 6 and 9 DF, p-value: 0.0001496
summary(modelT)
Df Sum Sq Mean Sq F value Pr(>F)
barley$fblock 3 1.082 0.3606 29.23 8.45e-06 ***
Residuals 12 0.148 0.0123
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(modelR)
Df Sum Sq Mean Sq F value Pr(>F)
barley$fvariety 3 0.0538 0.01794 0.183 0.906
Residuals 12 1.1759 0.09800
posthoc1 <- TukeyHSD(x=modelT, ordered = FALSE, conf.level=0.95)
posthoc2 <- TukeyHSD(x=modelR, ordered = FALSE, conf.level=0.95)
posthoc1
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = barley$YIELD ~ barley$fblock)
$`barley$fblock`
diff lwr upr p adj
2-1 -0.3859587 -0.6191245 -0.15279288 0.0017495
3-1 -0.5539242 -0.7870900 -0.32075839 0.0000683
4-1 -0.6946958 -0.9278616 -0.46153002 0.0000069
3-2 -0.1679655 -0.4011313 0.06520030 0.1960145
4-2 -0.3087371 -0.5419029 -0.07557133 0.0093122
4-3 -0.1407716 -0.3739374 0.09239418 0.3231282
posthoc2
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = barley$YIELD ~ barley$fvariety)
$`barley$fvariety`
diff lwr upr p adj
var2-var1 -0.03992891 -0.6971075 0.6172497 0.9977970
var3-var1 -0.14895801 -0.8061366 0.5082206 0.9053096
var4-var1 -0.01723823 -0.6744168 0.6399403 0.9998205
var3-var2 -0.10902910 -0.7662077 0.5481495 0.9592583
var4-var2 0.02269068 -0.6344879 0.6798692 0.9995915
var4-var3 0.13171979 -0.5254588 0.7888983 0.9316379
- What we saw here was that there was no difference between the cultivares of barley but rather the significance that we had observed in the ANOVA was due to the block designs that the barley were placed in. We see that because when you do the LM and then when you run a tukey post-hoc we see that there’s no variation between the yields but that there’s significant variation between the block designs. So we can essentially conclude that there were no discernable difference in yield between the different barley cultivars but any significant differencein yield was due to different environmental factors in the different blocks.
attach(possum)
possum <-na.omit(possum)
leveneTest(totalL ~ sex)
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 1 0.5079 0.4777
100
shapiro.test(totalL)
Shapiro-Wilk normality test
data: totalL
W = 0.98521, p-value = 0.3154
shapiro.test(skullW)
Shapiro-Wilk normality test
data: skullW
W = 0.93754, p-value = 0.0001169
PopulationWhat <- aov(totalL ~ pop)
modelA <- aov(totalL ~ sex*age)
totallength <- aov(totalL ~ pop + Error(sex+age))
summary(PopulationWhat)
Df Sum Sq Mean Sq F value Pr(>F)
pop 1 26 25.97 1.481 0.226
Residuals 100 1753 17.53
summary(modelA)
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 34.3 34.33 2.090 0.1514
age 1 112.9 112.87 6.872 0.0101 *
sex:age 1 22.7 22.69 1.382 0.2427
Residuals 98 1609.5 16.42
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(totallength)
Error: sex
Df Sum Sq Mean Sq
pop 1 34.33 34.33
Error: age
Df Sum Sq Mean Sq
pop 1 112.9 112.9
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
pop 1 9.8 9.771 0.59 0.444
Residuals 98 1622.4 16.555
PopulationWha <- aov(skullW ~ pop)
model <- aov(skullW ~ sex*age)
skulllength <- aov(skullW ~ pop + Error(sex+age))
summary(PopulationWha)
Df Sum Sq Mean Sq F value Pr(>F)
pop 1 1.5 1.475 0.153 0.696
Residuals 100 961.2 9.612
summary(model)
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 10.3 10.31 1.222 0.27174
age 1 82.3 82.30 9.752 0.00236 **
sex:age 1 43.0 43.01 5.096 0.02620 *
Residuals 98 827.0 8.44
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(skulllength)
Error: sex
Df Sum Sq Mean Sq
pop 1 10.31 10.31
Error: age
Df Sum Sq Mean Sq
pop 1 82.3 82.3
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
pop 1 1.5 1.456 0.164 0.686
Residuals 98 868.6 8.863
- So with the total length what we see is that between the popoulations there’s no significant difference between the two populations when you’re controlling for sex and age, but there is a significant difference among ages, with possums getting longer as they get older independent of their sex or the population. Regarding the skull width, I ran the tests on the popoulations but it doesn’t particularly matter because no amount of transforming the data could make the data pass the shapiro or levenes’ tests. So the tests are unreliable and since we don’t know any non parametric tests, I’m going to forgoe attempting to infer the data and assume that it’s not dependable. (Should I attempt to discern the data, there’s an interaction between sex and age on skull width).
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkobGF0dGljZSkKbGlicmFyeShjYXIpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoY2FyKQpsaWJyYXJ5KGNvd3Bsb3QpCmxpYnJhcnkoZGF0YXNldHMpCmBgYAoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmJhcmxleSA8LSByZWFkX2RlbGltKCJodHRwOi8vc2NpZW5jZXMudWNmLmVkdS9iaW9sb2d5L2Q0bGFiL3dwLWNvbnRlbnQvdXBsb2Fkcy9zaXRlcy8xMjUvMjAxNy8wMS9iYXJsZXkudHh0IiwgIlx0IiwgZXNjYXBlX2RvdWJsZSA9IEZBTFNFLCB0cmltX3dzID0gVFJVRSkKemluYyA8LSByZWFkX2RlbGltKCJodHRwOi8vc2NpZW5jZXMudWNmLmVkdS9iaW9sb2d5L2Q0bGFiL3dwLWNvbnRlbnQvdXBsb2Fkcy9zaXRlcy8xMjUvMjAxNy8wMS96aW5jLnR4dCIsICJcdCIsIGVzY2FwZV9kb3VibGUgPSBGQUxTRSwgdHJpbV93cyA9IFRSVUUpCnBvc3N1bSA8LSByZWFkX2RlbGltKCJodHRwOi8vc2NpZW5jZXMudWNmLmVkdS9iaW9sb2d5L2Q0bGFiL3dwLWNvbnRlbnQvdXBsb2Fkcy9zaXRlcy8xMjUvMjAxNy8wMS9wb3NzdW0udHh0IiwgIlx0IiwgZXNjYXBlX2RvdWJsZSA9IEZBTFNFLCB0cmltX3dzID0gVFJVRSkKYGBgCgpgYGB7cn0KYXR0YWNoKHppbmMpCnN0cih6aW5jKQpmWmluYyA8LSBhcy5mYWN0b3IoWklOQykKbGV2ZW5lVGVzdChESVZFUlNJVFkgfiBaSU5DKQpaaW4yIDwtIGFvdihESVZFUlNJVFkgfiBaSU5DKQpaaW4zIDwtIGxtKERJVkVSU0lUWSB+IFpJTkMpCnN1bW1hcnkoWmluMikKc3VtbWFyeShaaW4zKQppbnRlcmFjdGlvbi5wbG90KGZaaW5jLCB0cmFjZS5mYWN0b3I9WklOQywgcmVzcG9uc2U9RElWRVJTSVRZLCAKZnVuPW1lYW4sIHR5cGU9ImIiKQpwb3N0aG9jIDwtIFR1a2V5SFNEKHg9WmluMiwgb3JkZXJlZCA9IEZBTFNFLCBjb25mLmxldmVsPTAuOTUpCnBsb3QocG9zdGhvYykKcG9zdGhvYwpgYGAKQSkgVGhlIGxldmVuZSdzIHRlc3QgaXMgdGhlcmUgYW5kIHNob3dzIHRoYXQgdGhlIGRhdGEgc2V0IGRvZXMgaGF2ZSBhIG5vcm1hbCBkaXN0cmlidXRpb24gKHdlIGNhbid0IHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzKSBzbyBpdCdzIHNhZmUgdG8gdXNlIHRoZSBkYXRhc2V0IHdpdGhvdXQgZG9pbmcgdHJhbnNmb3JtYXRpb25zIHRvIHRoZSBkYXRhLgoxKSBJbiB0aGUgb25lLXdheSBBTk9WQSBzdGF0aXN0aWNhbGx5IHdlIHNlZSB0aGF0IFppbmMgaGFzIGEgc2lnbmlmaWNhbnQgYWZmZWN0IG9uIHRoZSBkYXRhIHNldCwgbWVhbmluZyB0aGF0IHdpdGhpbiB0aGUgZGF0YXNldCB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBpcyBjYXVzaW5nIHRoZSBtZWFucyB0byBiZSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LiBUaGUgTE0gc2hvd3MgdXMgdGhhdCBiZXR3ZWVuIGFsbCBvZiB0aGUgcG9wdWxhdGlvbnMgd2l0aGluIHRoZSBkYXRhc2V0LCB0aGUgbWVhbiB0aGF0IGlzIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGlzIG9ubHkgSGlnaCBsZXZlbHMgb2YgWmluYy4gVGhpcyBtZWFucyB0aGF0IHNvbWV0aGluZyBpcyBvY2N1cmluZyBpbiB0aGUgSGlnaCBncm91cHMgdGhhdCdzIGNhdXNpbmcgdGhlIG1lYW5zIHRvIHNoaWZ0IGluIGEgc2lnbmlmaWNhbnQgd2F5IGluIHRoYXQgZGF0YSBncm91cC4gQmlvbG9naWNhbGx5IEhpZ2ggbGV2ZWxzIG9mIHppbmMgaXMgY2F1c2luZyBhIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZGVjcmVhc2UgaW4gZGl2ZXJzaXR5LiAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQphdHRhY2goYmFybGV5KQpiYXJsZXkkZmJsb2NrIDwtIGZhY3RvcihiYXJsZXkkQmxvY2spCmJhcmxleSRmdmFyaWV0eSA8LSBmYWN0b3IoYmFybGV5JHZhcmlldHkpCmxldmVuZVRlc3QoeWllbGQgfiBiYXJsZXkkZnZhcmlldHkpCmxldmVuZVRlc3QoeWllbGQgfiBiYXJsZXkkZmJsb2NrICkKc2hhcGlyby50ZXN0KHlpZWxkKQpiYXJsZXkkWUlFTEQ8LSBsb2coYmFybGV5JHlpZWxkKQpzaGFwaXJvLnRlc3QoYmFybGV5JFlJRUxEKQptb2RlbEEgPC0gYW92KGJhcmxleSRZSUVMRCB+IGJhcmxleSRmdmFyaWV0eSsgYmFybGV5JGZibG9jaykKbW9kZWxMIDwtIGxtKGJhcmxleSRZSUVMRCB+IGJhcmxleSRmdmFyaWV0eSsgYmFybGV5JGZibG9jaykKbW9kZWxUIDwtIGFvdihiYXJsZXkkWUlFTEQgfiBiYXJsZXkkZmJsb2NrKQptb2RlbFIgPC0gYW92KGJhcmxleSRZSUVMRCB+IGJhcmxleSRmdmFyaWV0eSkKc3VtbWFyeShtb2RlbEEpCnN1bW1hcnkobW9kZWxMKQpzdW1tYXJ5KG1vZGVsVCkKc3VtbWFyeShtb2RlbFIpCnBvc3Rob2MxIDwtIFR1a2V5SFNEKHg9bW9kZWxULCBvcmRlcmVkID0gRkFMU0UsIGNvbmYubGV2ZWw9MC45NSkKcG9zdGhvYzIgPC0gVHVrZXlIU0QoeD1tb2RlbFIsIG9yZGVyZWQgPSBGQUxTRSwgY29uZi5sZXZlbD0wLjk1KQpwb3N0aG9jMQpwb3N0aG9jMgpgYGAKMikgV2hhdCB3ZSBzYXcgaGVyZSB3YXMgdGhhdCB0aGVyZSB3YXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdWx0aXZhcmVzIG9mIGJhcmxleSBidXQgcmF0aGVyIHRoZSBzaWduaWZpY2FuY2UgdGhhdCB3ZSBoYWQgb2JzZXJ2ZWQgaW4gdGhlIEFOT1ZBIHdhcyBkdWUgdG8gdGhlIGJsb2NrIGRlc2lnbnMgdGhhdCB0aGUgYmFybGV5IHdlcmUgcGxhY2VkIGluLiBXZSBzZWUgdGhhdCBiZWNhdXNlIHdoZW4geW91IGRvIHRoZSBMTSBhbmQgdGhlbiB3aGVuIHlvdSBydW4gYSB0dWtleSBwb3N0LWhvYyB3ZSBzZWUgdGhhdCB0aGVyZSdzIG5vIHZhcmlhdGlvbiBiZXR3ZWVuIHRoZSB5aWVsZHMgYnV0IHRoYXQgdGhlcmUncyBzaWduaWZpY2FudCB2YXJpYXRpb24gYmV0d2VlbiB0aGUgYmxvY2sgZGVzaWducy4gU28gd2UgY2FuIGVzc2VudGlhbGx5IGNvbmNsdWRlIHRoYXQgdGhlcmUgd2VyZSBubyBkaXNjZXJuYWJsZSBkaWZmZXJlbmNlIGluIHlpZWxkIGJldHdlZW4gdGhlIGRpZmZlcmVudCBiYXJsZXkgY3VsdGl2YXJzIGJ1dCBhbnkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZWluIHlpZWxkIHdhcyBkdWUgdG8gZGlmZmVyZW50IGVudmlyb25tZW50YWwgZmFjdG9ycyBpbiB0aGUgZGlmZmVyZW50IGJsb2Nrcy4gCgoKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQphdHRhY2gocG9zc3VtKQpwb3NzdW0gPC1uYS5vbWl0KHBvc3N1bSkKbGV2ZW5lVGVzdCh0b3RhbEwgfiBzZXgpCnNoYXBpcm8udGVzdCh0b3RhbEwpCnNoYXBpcm8udGVzdChza3VsbFcpClBvcHVsYXRpb25XaGF0IDwtIGFvdih0b3RhbEwgfiBwb3ApCm1vZGVsQSA8LSBhb3YodG90YWxMIH4gc2V4KmFnZSkKdG90YWxsZW5ndGggPC0gYW92KHRvdGFsTCB+IHBvcCArIEVycm9yKHNleCthZ2UpKQpzdW1tYXJ5KFBvcHVsYXRpb25XaGF0KQpzdW1tYXJ5KG1vZGVsQSkKc3VtbWFyeSh0b3RhbGxlbmd0aCkKUG9wdWxhdGlvbldoYSA8LSBhb3Yoc2t1bGxXIH4gcG9wKQptb2RlbCA8LSBhb3Yoc2t1bGxXIH4gc2V4KmFnZSkKc2t1bGxsZW5ndGggPC0gYW92KHNrdWxsVyB+IHBvcCArIEVycm9yKHNleCthZ2UpKQpzdW1tYXJ5KFBvcHVsYXRpb25XaGEpCnN1bW1hcnkobW9kZWwpCnN1bW1hcnkoc2t1bGxsZW5ndGgpCmBgYAoKMykgU28gd2l0aCB0aGUgdG90YWwgbGVuZ3RoIHdoYXQgd2Ugc2VlIGlzIHRoYXQgYmV0d2VlbiB0aGUgcG9wb3VsYXRpb25zIHRoZXJlJ3Mgbm8gc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnMgd2hlbiB5b3UncmUgY29udHJvbGxpbmcgZm9yIHNleCBhbmQgYWdlLCBidXQgdGhlcmUgaXMgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGFtb25nIGFnZXMsIHdpdGggcG9zc3VtcyBnZXR0aW5nIGxvbmdlciBhcyB0aGV5IGdldCBvbGRlciBpbmRlcGVuZGVudCBvZiB0aGVpciBzZXggb3IgdGhlIHBvcHVsYXRpb24uIFJlZ2FyZGluZyB0aGUgc2t1bGwgd2lkdGgsIEkgcmFuIHRoZSB0ZXN0cyBvbiB0aGUgcG9wb3VsYXRpb25zIGJ1dCBpdCBkb2Vzbid0IHBhcnRpY3VsYXJseSBtYXR0ZXIgYmVjYXVzZSBubyBhbW91bnQgb2YgdHJhbnNmb3JtaW5nIHRoZSBkYXRhIGNvdWxkIG1ha2UgdGhlIGRhdGEgcGFzcyB0aGUgc2hhcGlybyBvciBsZXZlbmVzJyB0ZXN0cy4gU28gdGhlIHRlc3RzIGFyZSB1bnJlbGlhYmxlIGFuZCBzaW5jZSB3ZSBkb24ndCBrbm93IGFueSBub24gcGFyYW1ldHJpYyB0ZXN0cywgSSdtIGdvaW5nIHRvIGZvcmdvZSBhdHRlbXB0aW5nIHRvIGluZmVyIHRoZSBkYXRhIGFuZCBhc3N1bWUgdGhhdCBpdCdzIG5vdCBkZXBlbmRhYmxlLiAoU2hvdWxkIEkgYXR0ZW1wdCB0byBkaXNjZXJuIHRoZSBkYXRhLCB0aGVyZSdzIGFuIGludGVyYWN0aW9uIGJldHdlZW4gc2V4IGFuZCBhZ2Ugb24gc2t1bGwgd2lkdGgpLiAKCgo=