Foundations for Inference
library(tidyverse)
library(openintro)
Heights of adults. (7.7, p. 260)
Researchers studying anthropometry collected body girth measurements and skeletal diameter measurements, as well as age, weight, height and gender, for 507 physically active individuals. The histogram below shows the sample distribution of heights in centimeters.

(a) What is the point estimate for the average height of active individuals? What about the median?
c(avg=mean(bdims$hgt), med=median(bdims$hgt))
## avg med
## 171.1438 170.3000
(b) What is the point estimate for the standard deviation of the heights of active individuals? What about the IQR?
c(sd=sd(bdims$hgt), iqr=IQR(bdims$hgt))
## sd iqr
## 9.407205 14.000000
(c) Is a person who is 1m 80cm (180 cm) tall considered unusually tall? And is a person who is 1m 55cm (155cm) considered unusually short? Explain your reasoning. The first person is above average but within 1 standard deviation, so we could call that person tall. The second person is about 1.7 sd away from the mean, we could call that person short. Because none of these values fall within 2 standard deviations, we can not call them unusual.
c(too_tall=(180-171.14)/9.41, too_short=(155-171.14)/9.41)
## too_tall too_short
## 0.9415515 -1.7151966
(d) The researchers take another random sample of physically active individuals. Would you expect the mean and the standard deviation of this new sample to be the ones given above? Explain your reasoning.
No. I would expect some variations between the two samples.
(e) The sample means obtained are point estimates for the mean height of all active individuals, if the sample of individuals is equivalent to a simple random sample. What measure do we use to quantify the variability of such an estimate (Hint: recall that \(SD_x = \frac{\sigma}{\sqrt{n}}\))? Compute this quantity using the data from the original sample under the condition that the data are a simple random sample.
sqrt(var(bdims$hgt)/nrow(bdims))
## [1] 0.4177887
Thanksgiving spending, Part I.
The 2009 holiday retail season, which kicked off on November 27, 2009 (the day after Thanksgiving), had been marked by somewhat lower self-reported consumer spending than was seen during the comparable period in 2008. To get an estimate of consumer spending, 436 randomly sampled American adults were surveyed. Daily consumer spending for the six-day period after Thanksgiving, spanning the Black Friday weekend and Cyber Monday, averaged $84.71. A 95% confidence interval based on this sample is ($80.31, $89.11). Determine whether the following statements are true or false, and explain your reasoning.

(a) We are 95% confident that the average spending of these 436 American adults is between $80.31 and $89.11. False. We are 100% confident this is the case.
mean(thanksgiving_spend$spending)
## [1] 84.70677
(b) This confidence interval is not valid since the distribution of spending in the sample is right skewed. False. This confidence interval is valid regardless of the shape of the distribution due to the size of the sample. Sample size > 30.
(c) 95% of random samples have a sample mean between $80.31 and $89.11. Mostly true. 95% of random samples should have a sample within this range.
(d) We are 95% confident that the average spending of all American adults is between $80.31 and $89.11. True. Because the survey was random and with a large number of observations.
(e) A 90% confidence interval would be narrower than the 95% confidence interval since we don’t need to be as sure about our estimate. True.
(f) In order to decrease the margin of error of a 95% confidence interval to a third of what it is now, we would need to use a sample 3 times larger. False. We would need to increase the sample size by 9.
(g) The margin of error is 4.4.
z = 1.96
se = sqrt(var(thanksgiving_spend$spending)/nrow(thanksgiving_spend))
se * z
## [1] 4.405038
True
Gifted children, Part I.
Researchers investigating characteristics of gifted children col- lected data from schools in a large city on a random sample of thirty-six children who were identified as gifted children soon after they reached the age of four. The following histogram shows the dis- tribution of the ages (in months) at which these children first counted to 10 successfully. Also provided are some sample statistics.

(a) Are conditions for inference satisfied? Yes. We have an almost normal distribution, a random sample of over 30 independent observations.
(b) Suppose you read online that children first count to 10 successfully when they are 32 months old, on average. Perform a hypothesis test to evaluate if these data provide convincing evidence that the average age at which gifted children fist count to 10 successfully is less than the general average of 32 months. Use a significance level of 0.10.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 21.00 28.00 31.00 30.69 34.25 39.00
H0: Gifted children first count to 10 at the same avg age as the population H1: Gifted children first count to 10 at a different avg age than the pop.
gifted_sd <- sd(gifted$count)
gifted_sd
## [1] 4.314887
se <- gifted_sd/sqrt(36)
Z <- (30.69 - 32)/(se)
p <- pnorm(Z) * 2
p
## [1] 0.06851567
(c) Interpret the p-value in context of the hypothesis test and the data. Because the significant level is less than 0.10 we reject the null hypothesis.
(d) Calculate a 90% confidence interval for the average age at which gifted children first count to 10 successfully.
cv <- 1.64
ci_low <- round(30.69 - cv * se,2)
ci_high <- round(30.69 + cv * se,2)
c(ci_low, ci_high)
## [1] 29.51 31.87
The 90% confidence interval for the avg counting age is: (29.51, 31.87)
(e) Do your results from the hypothesis test and the confidence interval agree? Explain.
They do. Because we rejected the hypothesis, we know the avg age for gifted children is different than the avg age for normal children to start counting. Based on this confidence interval, the avg age will be between 29.5 and 31.8 which would be lower than the avg for the normal population.
Gifted children, Part II.
Exercise above describes a study on gifted children. In this study, along with variables on the children, the researchers also collected data on the mother’s and father’s IQ of the 36 randomly sampled gifted children. The histogram below shows the distribution of mother’s IQ. Also provided are some sample statistics.

(a) Perform a hypothesis test to evaluate if these data provide convincing evidence that the average IQ of mothers of gifted children is different than the average IQ for the population at large, which is 100. Use a significance level of 0.10. H0: The Avg IQ of mothers of gifted children is different as the population H1: The Avg IQ of mothers of gifted children is the same as the populations
cv <- 1.64
se <- sd(gifted$motheriq)/sqrt(36)
Z <- (100 - 118.16)/(se)
p <- pnorm(Z) * 2
format(round(p,3), nsmall=3)
## [1] "0.000"
The p value is so small that it approaches 0. We accept the null hypothesis.
(b) Calculate a 90% confidence interval for the average IQ of mothers of gifted children.
avg <- mean(gifted$motheriq)
avg
## [1] 118.1667
ci_low <- round(118.16 - cv * se,2)
ci_high <- round(118.16 + cv * se,2)
c( ci_low, ci_high)
## [1] 116.38 119.94
The 90% confidence interval for mother IQ’s of gifted children is (116.38, 119.94)
(c) Do your results from the hypothesis test and the confidence interval agree? Explain.
Yes. Because we accepted the null hypothesis we know that the avg IQ for mothers of gifted children is different than the normal population. This confidence interval points to that avg being between 116 and 120, which is higher than 100.
CLT.
Define the term “sampling distribution” of the mean, and describe how the shape, center, and spread of the sampling distribution of the mean change as sample size increases.
The sampling distribution of the mean is the mean of the population from which the scores were sampled. Therefore, if a population has a mean μ, then the mean of the sampling distribution of the mean is also μ.
CFLBs.
A manufacturer of compact fluorescent light bulbs advertises that the distribution of the lifespans of these light bulbs is nearly normal with a mean of 9,000 hours and a standard deviation of 1,000 hours.
(a) What is the probability that a randomly chosen light bulb lasts more than 10,500 hours?
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
v <- 1 - pnorm(10500, 9000, 1000)
percent(v,accuracy = 0.01)
## [1] "6.68%"
(b) Describe the distribution of the mean lifespan of 15 light bulbs. Due to the fact that this is a nearly normal distribution, we can assume the distribution of 15 bulbs will look normal as well.
(c) What is the probability that the mean lifespan of 15 randomly chosen light bulbs is more than 10,500 hours?
v <- 1 - pnorm(10500, 9000, 1000/sqrt(15))
percent(v,accuracy = 0.000000001)
## [1] "0.000000313%"
Really, really small.
(d) Sketch the two distributions (population and sampling) on the same scale.
pop_x <- 5000:12000
pop_y <- dnorm(pop_x,mean=9000,sd=1000)
sample_x <- 5000:12000
sample_y <- dnorm(sample_x,mean=9000,sd=1000/sqrt(15))
plot(pop_x,pop_y)


(e) Could you estimate the probabilities from parts (a) and (c) if the lifespans of light bulbs had a skewed distribution?
Probably not.
Same observation, different sample size.
Suppose you conduct a hypothesis test based on a sample where the sample size is n = 50, and arrive at a p-value of 0.08. You then refer back to your notes and discover that you made a careless mistake, the sample size should have been n = 500. Will your p-value increase, decrease, or stay the same? Explain.
The p value should decrease as the denominator increased in size. …
LS0tDQp0aXRsZTogIkRTNjA2LUhXNSINCmF1dGhvcjogIkdlb3JnZSBDcnV6Ig0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQNCi0tLQ0KDQojIEZvdW5kYXRpb25zIGZvciBJbmZlcmVuY2UNCg0KYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShvcGVuaW50cm8pDQpgYGANCg0KIyMjICoqSGVpZ2h0cyBvZiBhZHVsdHMuKiogKDcuNywgcC4gMjYwKSANClJlc2VhcmNoZXJzIHN0dWR5aW5nIGFudGhyb3BvbWV0cnkgY29sbGVjdGVkIGJvZHkgZ2lydGggbWVhc3VyZW1lbnRzIGFuZCBza2VsZXRhbCBkaWFtZXRlciBtZWFzdXJlbWVudHMsIGFzIHdlbGwgYXMgYWdlLCB3ZWlnaHQsIGhlaWdodCBhbmQgZ2VuZGVyLCBmb3IgNTA3IHBoeXNpY2FsbHkgYWN0aXZlIGluZGl2aWR1YWxzLiBUaGUgaGlzdG9ncmFtIGJlbG93IHNob3dzIHRoZSBzYW1wbGUgZGlzdHJpYnV0aW9uIG9mIGhlaWdodHMgaW4gY2VudGltZXRlcnMuDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9M30NCmxpYnJhcnkob3BlbmludHJvKQ0KZGF0YShiZGltcykNCnBhcihtYXI9YygzLjcsMi41LDAuNSwwLjUpLCBsYXM9MSwgbWdwPWMoMi41LDAuNywwKSwgY2V4LmxhYiA9IDEuNSkNCmhpc3RQbG90KGJkaW1zJGhndCwgY29sID0gQ09MWzFdLCB4bGFiID0gIkhlaWdodCIsIHlsYWIgPSAiIikNCmBgYA0KDQoqKihhKSBXaGF0IGlzIHRoZSBwb2ludCBlc3RpbWF0ZSBmb3IgdGhlIGF2ZXJhZ2UgaGVpZ2h0IG9mIGFjdGl2ZSBpbmRpdmlkdWFscz8gV2hhdCBhYm91dCB0aGUgbWVkaWFuPyoqDQpgYGB7cn0NCmMoYXZnPW1lYW4oYmRpbXMkaGd0KSwgbWVkPW1lZGlhbihiZGltcyRoZ3QpKQ0KYGBgDQoNCioqKGIpIFdoYXQgaXMgdGhlIHBvaW50IGVzdGltYXRlIGZvciB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBoZWlnaHRzIG9mIGFjdGl2ZSBpbmRpdmlkdWFscz8gV2hhdCBhYm91dCB0aGUgSVFSPyoqDQpgYGB7cn0NCmMoc2Q9c2QoYmRpbXMkaGd0KSwgaXFyPUlRUihiZGltcyRoZ3QpKQ0KYGBgDQoNCioqKGMpIElzIGEgcGVyc29uIHdobyBpcyAxbSA4MGNtICgxODAgY20pIHRhbGwgY29uc2lkZXJlZCB1bnVzdWFsbHkgdGFsbD8gQW5kIGlzIGEgcGVyc29uIHdobyBpcyAxbSA1NWNtICgxNTVjbSkgY29uc2lkZXJlZCB1bnVzdWFsbHkgc2hvcnQ/IEV4cGxhaW4geW91ciByZWFzb25pbmcuKioNClRoZSBmaXJzdCBwZXJzb24gaXMgYWJvdmUgYXZlcmFnZSBidXQgd2l0aGluIDEgc3RhbmRhcmQgZGV2aWF0aW9uLCBzbyB3ZSBjb3VsZCBjYWxsIHRoYXQgcGVyc29uIHRhbGwuICBUaGUgc2Vjb25kIHBlcnNvbiBpcyBhYm91dCAxLjcgc2QgYXdheSBmcm9tIHRoZSBtZWFuLCB3ZSBjb3VsZCBjYWxsIHRoYXQgcGVyc29uIHNob3J0LiBCZWNhdXNlIG5vbmUgb2YgdGhlc2UgdmFsdWVzIGZhbGwgd2l0aGluIDIgc3RhbmRhcmQgZGV2aWF0aW9ucywgd2UgY2FuIG5vdCBjYWxsIHRoZW0gdW51c3VhbC4gDQoNCmBgYHtyfQ0KYyh0b29fdGFsbD0oMTgwLTE3MS4xNCkvOS40MSwgdG9vX3Nob3J0PSgxNTUtMTcxLjE0KS85LjQxKQ0KYGBgDQoNCioqKGQpIFRoZSByZXNlYXJjaGVycyB0YWtlIGFub3RoZXIgcmFuZG9tIHNhbXBsZSBvZiBwaHlzaWNhbGx5IGFjdGl2ZSBpbmRpdmlkdWFscy4gV291bGQgeW91IGV4cGVjdCB0aGUgbWVhbiBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGlzIG5ldyBzYW1wbGUgdG8gYmUgdGhlIG9uZXMgZ2l2ZW4gYWJvdmU/IEV4cGxhaW4geW91ciByZWFzb25pbmcuKioNCg0KTm8uICBJIHdvdWxkIGV4cGVjdCBzb21lIHZhcmlhdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHNhbXBsZXMuIA0KDQoqKihlKSBUaGUgc2FtcGxlIG1lYW5zIG9idGFpbmVkIGFyZSBwb2ludCBlc3RpbWF0ZXMgZm9yIHRoZSBtZWFuIGhlaWdodCBvZiBhbGwgYWN0aXZlIGluZGl2aWR1YWxzLCBpZiB0aGUgc2FtcGxlIG9mIGluZGl2aWR1YWxzIGlzIGVxdWl2YWxlbnQgdG8gYSBzaW1wbGUgcmFuZG9tIHNhbXBsZS4gV2hhdCBtZWFzdXJlIGRvIHdlIHVzZSB0byBxdWFudGlmeSB0aGUgdmFyaWFiaWxpdHkgb2Ygc3VjaCBhbiBlc3RpbWF0ZSAoSGludDogcmVjYWxsIHRoYXQgJFNEX3ggPSBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSQpPyBDb21wdXRlIHRoaXMgcXVhbnRpdHkgdXNpbmcgdGhlIGRhdGEgZnJvbSB0aGUgb3JpZ2luYWwgc2FtcGxlIHVuZGVyIHRoZSBjb25kaXRpb24gdGhhdCB0aGUgZGF0YSBhcmUgYSBzaW1wbGUgcmFuZG9tIHNhbXBsZS4qKg0KDQpgYGB7cn0NCnNxcnQodmFyKGJkaW1zJGhndCkvbnJvdyhiZGltcykpDQpgYGANCg0KIyMjICoqVGhhbmtzZ2l2aW5nIHNwZW5kaW5nLCBQYXJ0IEkuKiogDQpUaGUgMjAwOSBob2xpZGF5IHJldGFpbCBzZWFzb24sIHdoaWNoIGtpY2tlZCBvZmYgb24gTm92ZW1iZXIgMjcsIDIwMDkgKHRoZSBkYXkgYWZ0ZXIgVGhhbmtzZ2l2aW5nKSwgaGFkIGJlZW4gbWFya2VkIGJ5IHNvbWV3aGF0IGxvd2VyIHNlbGYtcmVwb3J0ZWQgY29uc3VtZXIgc3BlbmRpbmcgdGhhbiB3YXMgc2VlbiBkdXJpbmcgdGhlIGNvbXBhcmFibGUgcGVyaW9kIGluIDIwMDguIFRvIGdldCBhbiBlc3RpbWF0ZSBvZiBjb25zdW1lciBzcGVuZGluZywgNDM2IHJhbmRvbWx5IHNhbXBsZWQgQW1lcmljYW4gYWR1bHRzIHdlcmUgc3VydmV5ZWQuIERhaWx5IGNvbnN1bWVyIHNwZW5kaW5nIGZvciB0aGUgc2l4LWRheSBwZXJpb2QgYWZ0ZXIgVGhhbmtzZ2l2aW5nLCBzcGFubmluZyB0aGUgQmxhY2sgRnJpZGF5IHdlZWtlbmQgYW5kIEN5YmVyIE1vbmRheSwgYXZlcmFnZWQgJDg0LjcxLiBBIDk1JSBjb25maWRlbmNlIGludGVydmFsIGJhc2VkIG9uIHRoaXMgc2FtcGxlIGlzICgkODAuMzEsICQ4OS4xMSkuIERldGVybWluZSB3aGV0aGVyIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50cyBhcmUgdHJ1ZSBvciBmYWxzZSwgYW5kIGV4cGxhaW4geW91ciByZWFzb25pbmcuDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9M30NCmxpYnJhcnkob3BlbmludHJvKQ0KZGF0YSh0aGFua3NnaXZpbmdfc3BlbmQpDQpwYXIobWFyPWMoMy43LDIuMiwwLjUsMC41KSwgbGFzPTEsIG1ncD1jKDIuNSwwLjcsMCksIGNleC5sYWIgPSAxLjUpDQpoaXN0UGxvdCh0aGFua3NnaXZpbmdfc3BlbmQkc3BlbmRpbmcsIGNvbCA9IENPTFsxXSwgeGxhYiA9ICJTcGVuZGluZyIsIHlsYWIgPSAiIikNCmBgYA0KDQoqKihhKSBXZSBhcmUgOTUlIGNvbmZpZGVudCB0aGF0IHRoZSBhdmVyYWdlIHNwZW5kaW5nIG9mIHRoZXNlIDQzNiBBbWVyaWNhbiBhZHVsdHMgaXMgYmV0d2VlbiAkODAuMzEgYW5kICQ4OS4xMS4qKiBGYWxzZS4gIFdlIGFyZSAxMDAlIGNvbmZpZGVudCB0aGlzIGlzIHRoZSBjYXNlLiANCmBgYHtyfQ0KbWVhbih0aGFua3NnaXZpbmdfc3BlbmQkc3BlbmRpbmcpDQpgYGANCg0KKiooYikgVGhpcyBjb25maWRlbmNlIGludGVydmFsIGlzIG5vdCB2YWxpZCBzaW5jZSB0aGUgZGlzdHJpYnV0aW9uIG9mIHNwZW5kaW5nIGluIHRoZSBzYW1wbGUgaXMgcmlnaHQgc2tld2VkLioqDQpGYWxzZS4gVGhpcyBjb25maWRlbmNlIGludGVydmFsIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIHNoYXBlIG9mIHRoZSBkaXN0cmlidXRpb24gZHVlIHRvIHRoZSBzaXplIG9mIHRoZSBzYW1wbGUuIFNhbXBsZSBzaXplID4gMzAuDQoNCioqKGMpIDk1JSBvZiByYW5kb20gc2FtcGxlcyBoYXZlIGEgc2FtcGxlIG1lYW4gYmV0d2VlbiAkODAuMzEgYW5kICQ4OS4xMS4qKg0KTW9zdGx5IHRydWUuICA5NSUgb2YgcmFuZG9tIHNhbXBsZXMgc2hvdWxkIGhhdmUgYSBzYW1wbGUgd2l0aGluIHRoaXMgcmFuZ2UuIA0KDQoqKihkKSBXZSBhcmUgOTUlIGNvbmZpZGVudCB0aGF0IHRoZSBhdmVyYWdlIHNwZW5kaW5nIG9mIGFsbCBBbWVyaWNhbiBhZHVsdHMgaXMgYmV0d2VlbiAkODAuMzEgYW5kICQ4OS4xMS4qKg0KVHJ1ZS4gIEJlY2F1c2UgdGhlIHN1cnZleSB3YXMgcmFuZG9tIGFuZCB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIG9ic2VydmF0aW9ucy4NCg0KKiooZSkgQSA5MCUgY29uZmlkZW5jZSBpbnRlcnZhbCB3b3VsZCBiZSBuYXJyb3dlciB0aGFuIHRoZSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGJlIGFzIHN1cmUgYWJvdXQgb3VyIGVzdGltYXRlLioqDQpUcnVlLg0KDQoqKihmKSBJbiBvcmRlciB0byBkZWNyZWFzZSB0aGUgbWFyZ2luIG9mIGVycm9yIG9mIGEgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgdG8gYSB0aGlyZCBvZiB3aGF0IGl0IGlzIG5vdywgd2Ugd291bGQgbmVlZCB0byB1c2UgYSBzYW1wbGUgMyB0aW1lcyBsYXJnZXIuKioNCkZhbHNlLiBXZSB3b3VsZCBuZWVkIHRvIGluY3JlYXNlIHRoZSBzYW1wbGUgc2l6ZSBieSA5Lg0KDQoqKihnKSBUaGUgbWFyZ2luIG9mIGVycm9yIGlzIDQuNC4qKg0KDQpgYGB7ciBjb2RlLWNodW5rLWxhYmVsfQ0KeiA9IDEuOTYNCnNlID0gc3FydCh2YXIodGhhbmtzZ2l2aW5nX3NwZW5kJHNwZW5kaW5nKS9ucm93KHRoYW5rc2dpdmluZ19zcGVuZCkpDQoNCnNlICogeg0KYGBgDQoNClRydWUNCg0KIyMjICoqR2lmdGVkIGNoaWxkcmVuLCBQYXJ0IEkuKiogDQpSZXNlYXJjaGVycyBpbnZlc3RpZ2F0aW5nIGNoYXJhY3RlcmlzdGljcyBvZiBnaWZ0ZWQgY2hpbGRyZW4gY29sLSBsZWN0ZWQgZGF0YSBmcm9tIHNjaG9vbHMgaW4gYSBsYXJnZSBjaXR5IG9uIGEgcmFuZG9tIHNhbXBsZSBvZiB0aGlydHktc2l4IGNoaWxkcmVuIHdobyB3ZXJlIGlkZW50aWZpZWQgYXMgZ2lmdGVkIGNoaWxkcmVuIHNvb24gYWZ0ZXIgdGhleSByZWFjaGVkIHRoZSBhZ2Ugb2YgZm91ci4gVGhlIGZvbGxvd2luZyBoaXN0b2dyYW0gc2hvd3MgdGhlIGRpcy0gdHJpYnV0aW9uIG9mIHRoZSBhZ2VzIChpbiBtb250aHMpIGF0IHdoaWNoIHRoZXNlIGNoaWxkcmVuIGZpcnN0IGNvdW50ZWQgdG8gMTAgc3VjY2Vzc2Z1bGx5LiBBbHNvIHByb3ZpZGVkIGFyZSBzb21lIHNhbXBsZSBzdGF0aXN0aWNzLg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTN9DQpsaWJyYXJ5KG9wZW5pbnRybykNCmRhdGEoZ2lmdGVkKQ0KcGFyKG1hcj1jKDMuNywyLjIsMC41LDAuNSksIGxhcz0xLCBtZ3A9YygyLjUsMC43LDApLCBjZXgubGFiID0gMS41KQ0KaGlzdFBsb3QoZ2lmdGVkJGNvdW50LCBjb2wgPSBDT0xbMV0sIA0KICAgICAgICAgeGxhYiA9ICJBZ2UgY2hpbGQgZmlyc3QgY291bnRlZCB0byAxMCAoaW4gbW9udGhzKSIsIHlsYWIgPSAiIiwgDQogICAgICAgICBheGVzID0gRkFMU0UpDQpheGlzKDEpDQpheGlzKDIsIGF0ID0gYygwLDMsNikpDQpgYGANCg0KXGJlZ2lue3RhYnVsYXJ9e3IgfCBsfQ0KbiAgICYgMzYgXFwNCm1pbiAmIDIxIFxcDQptZWFuICAgICYgMzAuNjkgXFwNCnNkICAmIDQuMzEgXFwNCm1heCAmIDM5IA0KXGVuZHt0YWJ1bGFyfQ0KDQoqKihhKSBBcmUgY29uZGl0aW9ucyBmb3IgaW5mZXJlbmNlIHNhdGlzZmllZD8qKg0KWWVzLiAgV2UgaGF2ZSBhbiBhbG1vc3Qgbm9ybWFsIGRpc3RyaWJ1dGlvbiwgYSByYW5kb20gc2FtcGxlIG9mIG92ZXIgMzAgaW5kZXBlbmRlbnQgb2JzZXJ2YXRpb25zLg0KDQoqKihiKSBTdXBwb3NlIHlvdSByZWFkIG9ubGluZSB0aGF0IGNoaWxkcmVuIGZpcnN0IGNvdW50IHRvIDEwIHN1Y2Nlc3NmdWxseSB3aGVuIHRoZXkgYXJlIDMyIG1vbnRocyBvbGQsIG9uIGF2ZXJhZ2UuIFBlcmZvcm0gYSBoeXBvdGhlc2lzIHRlc3QgdG8gZXZhbHVhdGUgaWYgdGhlc2UgZGF0YSBwcm92aWRlIGNvbnZpbmNpbmcgZXZpZGVuY2UgdGhhdCB0aGUgYXZlcmFnZSBhZ2UgYXQgd2hpY2ggZ2lmdGVkIGNoaWxkcmVuIGZpc3QgY291bnQgdG8gMTAgc3VjY2Vzc2Z1bGx5IGlzIGxlc3MgdGhhbiB0aGUgZ2VuZXJhbCBhdmVyYWdlIG9mIDMyIG1vbnRocy4gVXNlIGEgc2lnbmlmaWNhbmNlIGxldmVsIG9mIDAuMTAuKioNCmBgYHtyfQ0Kc3VtbWFyeShnaWZ0ZWQkY291bnQpDQoNCmBgYA0KDQpIMDogR2lmdGVkIGNoaWxkcmVuIGZpcnN0IGNvdW50IHRvIDEwIGF0IHRoZSBzYW1lIGF2ZyBhZ2UgYXMgdGhlIHBvcHVsYXRpb24NCkgxOiBHaWZ0ZWQgY2hpbGRyZW4gZmlyc3QgY291bnQgdG8gMTAgYXQgYSBkaWZmZXJlbnQgYXZnIGFnZSB0aGFuIHRoZSBwb3AuDQoNCmBgYHtyfQ0KZ2lmdGVkX3NkIDwtIHNkKGdpZnRlZCRjb3VudCkNCmdpZnRlZF9zZA0KYGBgDQpgYGB7cn0NCnNlIDwtIGdpZnRlZF9zZC9zcXJ0KDM2KQ0KWiA8LSAoMzAuNjkgLSAzMikvKHNlKQ0KcCA8LSBwbm9ybShaKSAqIDINCnANCmBgYA0KDQoqKihjKSBJbnRlcnByZXQgdGhlIHAtdmFsdWUgaW4gY29udGV4dCBvZiB0aGUgaHlwb3RoZXNpcyB0ZXN0IGFuZCB0aGUgZGF0YS4qKg0KQmVjYXVzZSB0aGUgc2lnbmlmaWNhbnQgbGV2ZWwgaXMgbGVzcyB0aGFuIDAuMTAgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMuIA0KDQoqKihkKSBDYWxjdWxhdGUgYSA5MCUgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgdGhlIGF2ZXJhZ2UgYWdlIGF0IHdoaWNoIGdpZnRlZCBjaGlsZHJlbiBmaXJzdCBjb3VudCB0byAxMCBzdWNjZXNzZnVsbHkuKioNCmBgYHtyfQ0KY3YgPC0gMS42NA0KDQpjaV9sb3cgPC0gcm91bmQoMzAuNjkgLSBjdiAqIHNlLDIpDQpjaV9oaWdoIDwtIHJvdW5kKDMwLjY5ICsgY3YgKiBzZSwyKQ0KDQpjKGNpX2xvdywgY2lfaGlnaCkNCmBgYA0KDQpUaGUgOTAlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZm9yIHRoZSBhdmcgY291bnRpbmcgYWdlIGlzOiAoMjkuNTEsIDMxLjg3KQ0KDQoqKihlKSBEbyB5b3VyIHJlc3VsdHMgZnJvbSB0aGUgaHlwb3RoZXNpcyB0ZXN0IGFuZCB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBhZ3JlZT8gRXhwbGFpbi4qKg0KDQpUaGV5IGRvLiAgQmVjYXVzZSB3ZSByZWplY3RlZCB0aGUgaHlwb3RoZXNpcywgd2Uga25vdyB0aGUgYXZnIGFnZSBmb3IgZ2lmdGVkIGNoaWxkcmVuIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBhdmcgYWdlIGZvciBub3JtYWwgY2hpbGRyZW4gdG8gc3RhcnQgY291bnRpbmcuICBCYXNlZCBvbiB0aGlzIGNvbmZpZGVuY2UgaW50ZXJ2YWwsIHRoZSBhdmcgYWdlIHdpbGwgYmUgYmV0d2VlbiAyOS41IGFuZCAzMS44IHdoaWNoIHdvdWxkIGJlIGxvd2VyIHRoYW4gdGhlIGF2ZyBmb3IgdGhlIG5vcm1hbCBwb3B1bGF0aW9uLiANCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KXGNsZWFycGFnZQ0KDQojIyMgKipHaWZ0ZWQgY2hpbGRyZW4sIFBhcnQgSUkuKiogDQpFeGVyY2lzZSBhYm92ZSBkZXNjcmliZXMgYSBzdHVkeSBvbiBnaWZ0ZWQgY2hpbGRyZW4uIEluIHRoaXMgc3R1ZHksIGFsb25nIHdpdGggdmFyaWFibGVzIG9uIHRoZSBjaGlsZHJlbiwgdGhlIHJlc2VhcmNoZXJzIGFsc28gY29sbGVjdGVkIGRhdGEgb24gdGhlIG1vdGhlcidzIGFuZCBmYXRoZXIncyBJUSBvZiB0aGUgMzYgcmFuZG9tbHkgc2FtcGxlZCBnaWZ0ZWQgY2hpbGRyZW4uIFRoZSBoaXN0b2dyYW0gYmVsb3cgc2hvd3MgdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb3RoZXIncyBJUS4gQWxzbyBwcm92aWRlZCBhcmUgc29tZSBzYW1wbGUgc3RhdGlzdGljcy4NCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD0zfQ0KbGlicmFyeShvcGVuaW50cm8pDQpkYXRhKGdpZnRlZCkNCnBhcihtYXI9YygzLjcsMi4yLDAuNSwwLjUpLCBsYXM9MSwgbWdwPWMoMi41LDAuNywwKSwgY2V4LmxhYiA9IDEuNSkNCmhpc3RQbG90KGdpZnRlZCRtb3RoZXJpcSwgY29sID0gQ09MWzFdLCANCiAgICAgICAgIHhsYWIgPSAiTW90aGVyJ3MgSVEiLCB5bGFiID0gIiIsIGF4ZXMgPSBGQUxTRSkNCmF4aXMoMSkNCmF4aXMoMiwgYXQgPSBjKDAsNCw4LDEyKSkNCmBgYA0KDQpcYmVnaW57dGFidWxhcn17ciB8IGx9DQpuICAgJiAzNiBcXA0KbWluICYgMTAxIFxcDQptZWFuICAgICYgMTE4LjIgXFwNCnNkICAmIDYuNSBcXA0KbWF4ICYgMTMxIA0KXGVuZHt0YWJ1bGFyfQ0KDQoqKihhKSBQZXJmb3JtIGEgaHlwb3RoZXNpcyB0ZXN0IHRvIGV2YWx1YXRlIGlmIHRoZXNlIGRhdGEgcHJvdmlkZSBjb252aW5jaW5nIGV2aWRlbmNlIHRoYXQgdGhlIGF2ZXJhZ2UgSVEgb2YgbW90aGVycyBvZiBnaWZ0ZWQgY2hpbGRyZW4gaXMgZGlmZmVyZW50IHRoYW4gdGhlIGF2ZXJhZ2UgSVEgZm9yIHRoZSBwb3B1bGF0aW9uIGF0IGxhcmdlLCB3aGljaCBpcyAxMDAuIFVzZSBhIHNpZ25pZmljYW5jZSBsZXZlbCBvZiAwLjEwLioqDQpIMDogVGhlIEF2ZyBJUSBvZiBtb3RoZXJzIG9mIGdpZnRlZCBjaGlsZHJlbiBpcyBkaWZmZXJlbnQgYXMgdGhlIHBvcHVsYXRpb24NCkgxOiBUaGUgQXZnIElRIG9mIG1vdGhlcnMgb2YgZ2lmdGVkIGNoaWxkcmVuIGlzIHRoZSBzYW1lIGFzIHRoZSBwb3B1bGF0aW9ucw0KYGBge3J9DQpjdiA8LSAxLjY0DQpzZSA8LSBzZChnaWZ0ZWQkbW90aGVyaXEpL3NxcnQoMzYpDQpaIDwtICgxMDAgLSAxMTguMTYpLyhzZSkNCnAgPC0gcG5vcm0oWikgKiAyDQpmb3JtYXQocm91bmQocCwzKSwgbnNtYWxsPTMpDQpgYGANCg0KVGhlIHAgdmFsdWUgaXMgc28gc21hbGwgdGhhdCBpdCBhcHByb2FjaGVzIDAuICBXZSBhY2NlcHQgdGhlIG51bGwgaHlwb3RoZXNpcy4gDQoNCioqKGIpIENhbGN1bGF0ZSBhIDkwJSBjb25maWRlbmNlIGludGVydmFsIGZvciB0aGUgYXZlcmFnZSBJUSBvZiBtb3RoZXJzIG9mIGdpZnRlZCBjaGlsZHJlbi4qKg0KYGBge3J9DQphdmcgPC0gbWVhbihnaWZ0ZWQkbW90aGVyaXEpDQphdmcNCmBgYA0KDQoNCmBgYHtyfQ0KY2lfbG93IDwtIHJvdW5kKDExOC4xNiAtIGN2ICogc2UsMikNCmNpX2hpZ2ggPC0gcm91bmQoMTE4LjE2ICsgY3YgKiBzZSwyKQ0KDQpjKCBjaV9sb3csIGNpX2hpZ2gpDQpgYGANCg0KDQpUaGUgOTAlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZm9yIG1vdGhlciBJUSdzIG9mIGdpZnRlZCBjaGlsZHJlbiBpcyAoMTE2LjM4LCAxMTkuOTQpDQoNCg0KKiooYykgRG8geW91ciByZXN1bHRzIGZyb20gdGhlIGh5cG90aGVzaXMgdGVzdCBhbmQgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgYWdyZWU/IEV4cGxhaW4uKioNCg0KWWVzLiAgQmVjYXVzZSB3ZSBhY2NlcHRlZCB0aGUgbnVsbCBoeXBvdGhlc2lzIHdlIGtub3cgdGhhdCB0aGUgYXZnIElRIGZvciBtb3RoZXJzIG9mIGdpZnRlZCBjaGlsZHJlbiBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgbm9ybWFsIHBvcHVsYXRpb24uIFRoaXMgY29uZmlkZW5jZSBpbnRlcnZhbCBwb2ludHMgdG8gdGhhdCBhdmcgYmVpbmcgYmV0d2VlbiAxMTYgYW5kIDEyMCwgd2hpY2ggaXMgaGlnaGVyIHRoYW4gMTAwLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpcY2xlYXJwYWdlDQoNCiMjIyAqKkNMVC4qKiANCkRlZmluZSB0aGUgdGVybSAic2FtcGxpbmcgZGlzdHJpYnV0aW9uIiBvZiB0aGUgbWVhbiwgYW5kIGRlc2NyaWJlIGhvdyB0aGUgc2hhcGUsIGNlbnRlciwgYW5kIHNwcmVhZCBvZiB0aGUgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIG9mIHRoZSBtZWFuIGNoYW5nZSBhcyBzYW1wbGUgc2l6ZSBpbmNyZWFzZXMuDQoNCioqVGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbWVhbiBpcyB0aGUgbWVhbiBvZiB0aGUgcG9wdWxhdGlvbiBmcm9tIHdoaWNoIHRoZSBzY29yZXMgd2VyZSBzYW1wbGVkLiBUaGVyZWZvcmUsIGlmIGEgcG9wdWxhdGlvbiBoYXMgYSBtZWFuIM68LCB0aGVuIHRoZSBtZWFuIG9mIHRoZSBzYW1wbGluZyBkaXN0cmlidXRpb24gb2YgdGhlIG1lYW4gaXMgYWxzbyDOvC4qKg0KDQoNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KXGNsZWFycGFnZQ0KDQojIyMgKipDRkxCcy4qKiANCkEgbWFudWZhY3R1cmVyIG9mIGNvbXBhY3QgZmx1b3Jlc2NlbnQgbGlnaHQgYnVsYnMgYWR2ZXJ0aXNlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGxpZmVzcGFucyBvZiB0aGVzZSBsaWdodCBidWxicyBpcyBuZWFybHkgbm9ybWFsIHdpdGggYSBtZWFuIG9mIDksMDAwIGhvdXJzIGFuZCBhIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAxLDAwMCBob3Vycy4NCg0KKiooYSkgV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhIHJhbmRvbWx5IGNob3NlbiBsaWdodCBidWxiIGxhc3RzIG1vcmUgdGhhbiAxMCw1MDAgaG91cnM/KioNCg0KYGBge3J9DQpsaWJyYXJ5KHNjYWxlcykNCg0KdiA8LSAxIC0gcG5vcm0oMTA1MDAsIDkwMDAsIDEwMDApDQoNCnBlcmNlbnQodixhY2N1cmFjeSA9IDAuMDEpDQpgYGANCg0KKiooYikgRGVzY3JpYmUgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbWVhbiBsaWZlc3BhbiBvZiAxNSBsaWdodCBidWxicy4qKg0KRHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyBhIG5lYXJseSBub3JtYWwgZGlzdHJpYnV0aW9uLCB3ZSBjYW4gYXNzdW1lIHRoZSBkaXN0cmlidXRpb24gb2YgMTUgYnVsYnMgd2lsbCBsb29rIG5vcm1hbCBhcyB3ZWxsLiANCg0KKiooYykgV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCB0aGUgbWVhbiBsaWZlc3BhbiBvZiAxNSByYW5kb21seSBjaG9zZW4gbGlnaHQgYnVsYnMgaXMgbW9yZSB0aGFuIDEwLDUwMCBob3Vycz8qKg0KYGBge3J9DQp2IDwtIDEgLSBwbm9ybSgxMDUwMCwgOTAwMCwgMTAwMC9zcXJ0KDE1KSkNCnBlcmNlbnQodixhY2N1cmFjeSA9IDAuMDAwMDAwMDAxKQ0KYGBgDQpSZWFsbHksIHJlYWxseSBzbWFsbC4gDQoNCioqKGQpIFNrZXRjaCB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgKHBvcHVsYXRpb24gYW5kIHNhbXBsaW5nKSBvbiB0aGUgc2FtZSBzY2FsZS4qKg0KYGBge3J9DQpwb3BfeCA8LSA1MDAwOjEyMDAwDQpwb3BfeSA8LSBkbm9ybShwb3BfeCxtZWFuPTkwMDAsc2Q9MTAwMCkNCg0Kc2FtcGxlX3ggPC0gNTAwMDoxMjAwMA0Kc2FtcGxlX3kgPC0gZG5vcm0oc2FtcGxlX3gsbWVhbj05MDAwLHNkPTEwMDAvc3FydCgxNSkpDQoNCnBsb3QocG9wX3gscG9wX3kpDQpgYGANCg0KDQpgYGB7cn0NCnBsb3Qoc2FtcGxlX3gsIHNhbXBsZV95KQ0KYGBgDQoNCg0KKiooZSkgQ291bGQgeW91IGVzdGltYXRlIHRoZSBwcm9iYWJpbGl0aWVzIGZyb20gcGFydHMgKGEpIGFuZCAoYykgaWYgdGhlIGxpZmVzcGFucyBvZiBsaWdodCBidWxicyBoYWQgYSBza2V3ZWQgZGlzdHJpYnV0aW9uPyoqDQoNClByb2JhYmx5IG5vdC4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KXGNsZWFycGFnZQ0KDQojIyMgKipTYW1lIG9ic2VydmF0aW9uLCBkaWZmZXJlbnQgc2FtcGxlIHNpemUuKiogDQpTdXBwb3NlIHlvdSBjb25kdWN0IGEgaHlwb3RoZXNpcyB0ZXN0IGJhc2VkIG9uIGEgc2FtcGxlIHdoZXJlIHRoZSBzYW1wbGUgc2l6ZSBpcyBuID0gNTAsIGFuZCBhcnJpdmUgYXQgYSBwLXZhbHVlIG9mIDAuMDguIFlvdSB0aGVuIHJlZmVyIGJhY2sgdG8geW91ciBub3RlcyBhbmQgZGlzY292ZXIgdGhhdCB5b3UgbWFkZSBhIGNhcmVsZXNzIG1pc3Rha2UsIHRoZSBzYW1wbGUgc2l6ZSBzaG91bGQgaGF2ZSBiZWVuIG4gPSA1MDAuIFdpbGwgeW91ciBwLXZhbHVlIGluY3JlYXNlLCBkZWNyZWFzZSwgb3Igc3RheSB0aGUgc2FtZT8gRXhwbGFpbi4NCg0KKipUaGUgcCB2YWx1ZSBzaG91bGQgZGVjcmVhc2UgYXMgdGhlIGRlbm9taW5hdG9yIGluY3JlYXNlZCBpbiBzaXplLioqDQouLi4NCg0K