I. How do we design an experiment?
Muriel’s claim seemed crazy. The British scholars and researchers who heard her laughed. No way, they said, could she do it.
What Muriel Tasted
Think about adding cool milk to steaming hot tea. The first few drops of milk get scalded leaving a hint of a burnt taste because they have been heated too quickly. If the cool milk is in the cup, the first hot tea drops warm the milk more gradually. Surprisingly, Dr. Bristol’s discriminating taste buds could recognize that tiny bit of difference in the taste of the tea.
Ron appeared thoughtful. Muriel said tea tastes better when the milk is added to the cup before the tea. Muriel was convinced adding the tea first, then the milk, was inferior. She claimed she could taste the difference.
Ron wondered, ``How could we test this scientifically?" Ron decided Muriel a could do a blind taste test. He would have 8 cups of tea prepared, 4 each way, out of Muriel’s sight. Dr. Muriel Bristol, a botanist colleague who worked at the same research lab, would try to separate the cups into two groups, accurately finding the ones that had the milk added first.
Ronald Fischer, the godfather of statistics, later told this story of how his null hypothesis idea was born. He created a hypothesis for Dr. Bristol randomly guessing. What if she just had a coin flip’s chance of getting each cup right? He couldn’t prove that hypothesis, but if Dr. Bristol were extremely accurate it would provide strong evidence that the null hypothesis was false. Fischer knew he could calculate coin flip probabilities and compare them to the observed data from the taste test.
Fischer’s book The Design of Experiments (1935) doesn’t mention the results of the taste test, but reports suggest Dr. Bristol was successful in all 8 cases. Fischer was less concerned with the actual experiment than the innovative idea of using a negating approach to hypothesis testing. His inspiration for the breakthrough was testing Bristol’s taste buds.
Initializing RStudio
The Mosaic package was created by statistics instructors to help students learn the coding in R. Commands are streamlined to be more intuitive. Execute the code block below to load Mosaic (required each session).
library(mosaic)
II. Null Hypothesis
A null hypothesis is one that can only be disproven, never proven. What was Fischer’s hypothesis? A charlatan who made Dr. Bristol’s claim, if tested, would be blindly guessing. The charlatan would have a 50% chance of guessing correctly. Let’s alter the experiment slightly and test it ourselves.
Original Distribution
In Fischer’s book, he used the hypergeometric distribution to calculate Muriel’s chances of properly sorting the 8 cups into two groups of four. Because \(\binom{8}{4}=70\), he calculated the chance of randomly choosing 4 of the 8 that were milk-first would be 1 in 70.
Dr. Bristol will taste eight cups of tea. For each one, we will flip a fair coin. For heads, we pour milk first. For tails, it’s tea first. Each cup could be made either way. We could have 8 cups that were milk-first, or none. A charlatan would, in essence, have to guess the results of 8 coin flips. At each stage, the charlatan would have a fifty-fifty chance of success, so the probability of the charlatan getting all of them right would be: \[\left(\frac{1}{2}\right)^{8}=\frac{1}{2^8} = 0.00390625\]
If Dr. Bristol were to get all 8 correct, this would be strong, odds-defying evidence she had not guessed, that she was actually tasting a difference. The idea of the null hypothesis was born.
Given Fischer’s null hypothesis that assumed random guessing, we have a couple of different choices of how to determine the probabilities.
- Empirical: Use randomized trials to estimate probabilities.
- Theoretical: Assume a probability distribution, use a probability desnity function (pdf) to calculate probabilities.
Traditional statistics relies upon assumed distributions and pdf’s, most typically bell-shaped pdf’s. We live at a statistically interesting moment in history where randomization methods are gaining traction in scientific research publications mainly because computing power for randomization is readily available for virtually research settings. Perhaps in the next decade or so, randomization will replace traditional methods as the gold standard for research-level statistics.
III. Empirical Probabilities with Randomization
RStudio has tools both to conduct the random trials and then collect and analyze the results. Since the tea-first or milk-first choice was determined by coin flipping, random coin flips simulate trying to match the pattern of heads and tails. Here’s the R code for 8 coin flips.
#library(mosaic)
rflip(8)
Flipping 8 coins [ Prob(Heads) = 0.5 ] ...
H T T H H H T H
Number of Heads: 5 [Proportion Heads: 0.625]
Our plan is to repeatedly flip 8 coins and track what happens for each group of 8. Mosaic’s do function behaves like one would think. In the example below, it repeats the rflip(8) process 10,000 times which should produce accurate empirical estimates of the probabilities.
coins = do(10000) * rflip(8)
tally(~ heads, data = coins)
heads
0 1 2 3 4 5 6 7 8
37 335 1112 2229 2683 2199 1083 281 41
The pattern is bell-shaped as can be seen in the histogram.
histogram(~heads, data = coins,
width = 1,
type = "count")

Let \(x\) be the number of successful guesses out of 10. Using the tallies, we can calculate empirical probabilities.
What is the probability of randomly guessing and getting all 8 correct? About 0.4%. \[P(x = 8)=\frac{41}{10000}\]
What is the probability of randomly guessing and getting 7 or more correct? About 3.5%. \[P(x \geq 7)=\frac{322}{10000}\]
What should the cutoff be? We can all probably agree that if Dr. Bristol gets all 8 correct (which she did), there is ample evidence she is not a charlatan. But is 7 correct potential guesses enough?
The chosen cutoff value for what constitutes evidence against the null hypothesis is called level of significance the notation for which is the Greek letter alpha (\(\alpha\)). In modern statistics, we tend to use \(\alpha = 0.05\) as a default setting in absence of any other information.
IV. Theoretical Probabilities
Since we are modeling Muriel’s guessing with coin flips, the Binomial distribution with 50% chance of success applies. The R function choose produces the binomial coefficients we need.
Let \(x\in \{0,1,2,\dots,9,10\}\) be a random variable indicating the number of successful matches out of ten attempts. If \(x=8\), for example, we learned to calculate the theoretical probability using a term of the binomial expansion. \[P(x=7)=\binom{8}{7}(.5)^7(.5)^1\] We can evaluate this probability using R code.
choose(8,7)*.5^7*.5^1
[1] 0.03125
Let’s have R create a T-Chart of \(x\)-values and probabilities \(p(x)\).
# Creating Function
pFun <- function(t) {
choose(8,t)*(.5)^t *(.5)^(8-t)
}
# Creating T-chart ()
x = 0:8
tChart = data.frame(x,pFun(x))
names(tChart) = c("x","p(x)")
print(tChart)
R Coding. T-charts for pdf’s is not part of this course. Creating a function like pFun will be used in the Exercises.
The theoretical probability that Dr. Bristol earns 7 or more successes with random guessing is calculated using function pFun(k), a probability function we created above to do calculations based on the binomial theorem for \(k\) successes out of 8 trials.
pFun(7)+pFun(8)
[1] 0.03515625
We can use summation by placing a colon between the start and stop values. (This will be helpful in the Exercises.)
sum(pFun(7:8))
[1] 0.03515625
What is the probability of randomly guessing and getting all 8 correct? About 0.4%. \[P(x = 8)=\binom{8}{8}(.5)^8=\frac{1}{256}=.00390625\]
What is the probability of randomly guessing and getting 7 or more correct? About 3.5%. \[P(x \geq 7)=\frac{\binom{8}{7}+\binom{8}{8}}{256}=\frac{9}{256}=.03515625\]
V. Conclusion
What would Fischer do? Fischer had two suggestions to provide even more evidence for Bristol’s claim. First, having Bristol taste test more than 8 cups of tea would provide even more evidence to falsify the null. If Bristol was only 90% accurate but tasted 20 cups of tea, the probability of random guessing being successful drops by a factor of 10.Second, Fischer encouraged validation studies, repeating the same experiment multiple times to compare an contrast the results.
Fischer’s simple advice is often ignored by modern researchers. Too many studies with small sample sizes get published, and too few validation studies are performed. The results have led to the replication crisis in Psychology and the reproducibility crisis in medicine. Only when we design good experiments and replicate them within different populations do we get valid scientific research results.
VI. Exercises
Using the Mosaic function rflip, flip 16 coins and count the number of Heads. Repeat 10,000 times using the Mosaic function do. Estimate the probability that, if Dr. Bristol tasted 16 cups of tea each of which was randomly chosen to be “tea first” or “milk first,” that she would get at least 14 correct using a histogram with the type parameter set to “count.”
Find the theoretical probability in Exercise 1 by altering the code block that created the pFun function. Use your new pFun function and R’s sum function for the calculations. How does your theoretical calculation compare to your empirical estimate in Exercise 1?
pFun <- function(t) {
choose(16,t)*(.5)^t *(.5)^(16-t)
}
For 32 coins flips (and 10,000 randomized draws), estimate the probability that Dr. Bristol would get at least 24 correct if she were guessing at random. Use a histogram with the type parameter set to “count.” Update pFun to find the theoretical probabilities and compare the two results.
How many successes out of 100 would Dr. Bristol need to have before you would believe she was not guessing at random? Explain your reasoning based on empirical or theoretical calculations.
LS0tDQp0aXRsZTogIkV4cGVyaW1lbnRzLCBEYXRhIGFuZCBDb25jbHVzaW9uczogVGhlIExhZHkgYW5kIHRoZSBUZWEiDQpzdWJ0aXRsZTogVU5HIE1BVEggMzM1MCAob25saW5lKQ0KYXV0aG9yOiBSb2JiIFNpbm4NCmRhdGU6IEp1bHkgMjAyMA0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+SS4gSG93IGRvIHdlIGRlc2lnbiBhbiBleHBlcmltZW50Pzwvc3Bhbj4NCg0KTXVyaWVsJ3MgY2xhaW0gc2VlbWVkIGNyYXp5LiBUaGUgQnJpdGlzaCBzY2hvbGFycyBhbmQgcmVzZWFyY2hlcnMgd2hvIGhlYXJkIGhlciBsYXVnaGVkLiBObyB3YXksIHRoZXkgc2FpZCwgY291bGQgc2hlIGRvIGl0LiANCg0KPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7IG1hcmdpbjogOHB4OyBib3JkZXI6MnB4IGJsYWNrIHNvbGlkOyBwYWRkaW5nOiAwcHggMTBweCA1cHgiPg0KIyMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+V2hhdCBNdXJpZWwgVGFzdGVkPC9zcGFuPg0KVGhpbmsgYWJvdXQgYWRkaW5nIGNvb2wgbWlsayB0byBzdGVhbWluZzwvYnI+DQpob3QgdGVhLiBUaGUgZmlyc3QgZmV3IGRyb3BzIG9mIG1pbGsgZ2V0PC9icj4NCnNjYWxkZWQgbGVhdmluZyBhIGhpbnQgb2YgYSBidXJudCB0YXN0ZTwvYnI+DQpiZWNhdXNlIHRoZXkgaGF2ZSBiZWVuIGhlYXRlZCB0b28gcXVpY2tseS48L2JyPg0KSWYgdGhlIGNvb2wgbWlsayBpcyBpbiB0aGUgY3VwLCB0aGUgZmlyc3Q8L2JyPg0KaG90IHRlYSBkcm9wcyB3YXJtIHRoZSBtaWxrIG1vcmUgZ3JhZHVhbGx5LjwvYnI+DQpTdXJwcmlzaW5nbHksIERyLiBCcmlzdG9sJ3MgZGlzY3JpbWluYXRpbmc8L2JyPg0KdGFzdGUgYnVkcyBjb3VsZCByZWNvZ25pemUgdGhhdCB0aW55IGJpdCBvZjwvYnI+DQpkaWZmZXJlbmNlIGluIHRoZSB0YXN0ZSBvZiB0aGUgdGVhLg0KPC9kaXY+DQoNClJvbiBhcHBlYXJlZCB0aG91Z2h0ZnVsLiBNdXJpZWwgc2FpZCB0ZWEgdGFzdGVzIGJldHRlciB3aGVuIHRoZSBtaWxrIGlzIGFkZGVkIHRvIHRoZSBjdXAgYmVmb3JlIHRoZSB0ZWEuIE11cmllbCB3YXMgY29udmluY2VkIGFkZGluZyB0aGUgdGVhIGZpcnN0LCB0aGVuIHRoZSBtaWxrLCB3YXMgaW5mZXJpb3IuIFNoZSBjbGFpbWVkIHNoZSBjb3VsZCB0YXN0ZSB0aGUgZGlmZmVyZW5jZS4NCg0KUm9uIHdvbmRlcmVkLCBgYEhvdyBjb3VsZCB3ZSB0ZXN0IHRoaXMgc2NpZW50aWZpY2FsbHk/IiBSb24gZGVjaWRlZCBNdXJpZWwgYSA8YSBocmVmID0gImh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhZHlfdGFzdGluZ190ZWEiPiBjb3VsZCBkbyBhIGJsaW5kIHRhc3RlIHRlc3Q8L2E+LiBIZSB3b3VsZCBoYXZlIDggY3VwcyBvZiB0ZWEgcHJlcGFyZWQsIDQgZWFjaCB3YXksIG91dCBvZiBNdXJpZWwncyBzaWdodC4gRHIuIE11cmllbCBCcmlzdG9sLCBhIGJvdGFuaXN0IGNvbGxlYWd1ZSB3aG8gd29ya2VkIGF0IHRoZSBzYW1lIHJlc2VhcmNoIGxhYiwgd291bGQgdHJ5IHRvIHNlcGFyYXRlIHRoZSBjdXBzIGludG8gdHdvIGdyb3VwcywgYWNjdXJhdGVseSBmaW5kaW5nIHRoZSBvbmVzIHRoYXQgaGFkIHRoZSBtaWxrIGFkZGVkIGZpcnN0Lg0KDQpSb25hbGQgRmlzY2hlciwgdGhlIGdvZGZhdGhlciBvZiBzdGF0aXN0aWNzLCBsYXRlciB0b2xkIHRoaXMgc3Rvcnkgb2YgaG93IGhpcyAqKm51bGwgaHlwb3RoZXNpcyoqIGlkZWEgd2FzIGJvcm4uIEhlIGNyZWF0ZWQgYSBoeXBvdGhlc2lzIGZvciBEci4gQnJpc3RvbCByYW5kb21seSBndWVzc2luZy4gV2hhdCBpZiBzaGUganVzdCBoYWQgYSBjb2luIGZsaXAncyBjaGFuY2Ugb2YgZ2V0dGluZyBlYWNoIGN1cCByaWdodD8gSGUgY291bGRuJ3QgcHJvdmUgdGhhdCBoeXBvdGhlc2lzLCBidXQgaWYgRHIuIEJyaXN0b2wgd2VyZSBleHRyZW1lbHkgYWNjdXJhdGUgaXQgd291bGQgcHJvdmlkZSBzdHJvbmcgZXZpZGVuY2UgdGhhdCB0aGUgKm51bGwgaHlwb3RoZXNpcyogd2FzIGZhbHNlLiBGaXNjaGVyIGtuZXcgaGUgY291bGQgY2FsY3VsYXRlIGNvaW4gZmxpcCBwcm9iYWJpbGl0aWVzIGFuZCBjb21wYXJlIHRoZW0gdG8gdGhlIG9ic2VydmVkIGRhdGEgZnJvbSB0aGUgdGFzdGUgdGVzdC4gDQoNCkZpc2NoZXIncyBib29rICpUaGUgRGVzaWduIG9mIEV4cGVyaW1lbnRzKiAoMTkzNSkgZG9lc24ndCBtZW50aW9uIHRoZSByZXN1bHRzIG9mIHRoZSB0YXN0ZSB0ZXN0LCBidXQgcmVwb3J0cyBzdWdnZXN0IERyLiBCcmlzdG9sIHdhcyBzdWNjZXNzZnVsIGluIGFsbCA4IGNhc2VzLiBGaXNjaGVyIHdhcyBsZXNzIGNvbmNlcm5lZCB3aXRoIHRoZSBhY3R1YWwgZXhwZXJpbWVudCB0aGFuIHRoZSBpbm5vdmF0aXZlIGlkZWEgb2YgdXNpbmcgYSBuZWdhdGluZyBhcHByb2FjaCB0byBoeXBvdGhlc2lzIHRlc3RpbmcuIEhpcyBpbnNwaXJhdGlvbiBmb3IgdGhlIGJyZWFrdGhyb3VnaCB3YXMgdGVzdGluZyBCcmlzdG9sJ3MgdGFzdGUgYnVkcy4NCg0KPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7IG1hcmdpbjogOHB4OyBib3JkZXI6MnB4IGJsYWNrIHNvbGlkOyBwYWRkaW5nOiAwcHggMTBweCA1cHgiPg0KIyMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+SW5pdGlhbGl6aW5nIFJTdHVkaW88L3NwYW4+DQpUaGUgKipNb3NhaWMqKiBwYWNrYWdlIHdhcyBjcmVhdGVkIGJ5IHN0YXRpc3RpY3MgaW5zdHJ1Y3RvcnMgdG8gaGVscCBzdHVkZW50cyBsZWFybiB0aGUgY29kaW5nIGluIFIuIENvbW1hbmRzIGFyZSBzdHJlYW1saW5lZCB0byBiZSBtb3JlIGludHVpdGl2ZS4gRXhlY3V0ZSB0aGUgY29kZSBibG9jayBiZWxvdyB0byBsb2FkICoqTW9zYWljKiogKHJlcXVpcmVkIGVhY2ggc2Vzc2lvbikuDQpgYGB7cn0NCmxpYnJhcnkobW9zYWljKQ0KYGBgDQo8L2Rpdj4NCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5JSS4gTnVsbCBIeXBvdGhlc2lzPC9zcGFuPg0KDQpBIG51bGwgaHlwb3RoZXNpcyBpcyBvbmUgdGhhdCBjYW4gb25seSBiZSBkaXNwcm92ZW4sIG5ldmVyIHByb3Zlbi4gV2hhdCB3YXMgRmlzY2hlcidzIGh5cG90aGVzaXM/IEEgY2hhcmxhdGFuIHdobyBtYWRlIERyLiBCcmlzdG9sJ3MgY2xhaW0sIGlmIHRlc3RlZCwgd291bGQgYmUgYmxpbmRseSBndWVzc2luZy4gVGhlIGNoYXJsYXRhbiB3b3VsZCBoYXZlIGEgNTAlIGNoYW5jZSBvZiBndWVzc2luZyBjb3JyZWN0bHkuIExldCdzIGFsdGVyIHRoZSBleHBlcmltZW50IHNsaWdodGx5IGFuZCB0ZXN0IGl0IG91cnNlbHZlcy4NCg0KPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7IG1hcmdpbjogOHB4OyBib3JkZXI6MnB4IGJsYWNrIHNvbGlkOyBwYWRkaW5nOiAwcHggMTBweCA1cHgiPg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5PcmlnaW5hbCBEaXN0cmlidXRpb248L3NwYW4+DQpJbiBGaXNjaGVyJ3MgYm9vaywgaGUgdXNlZCB0aGUgaHlwZXJnZW9tZXRyaWM8L2JyPg0KZGlzdHJpYnV0aW9uIHRvIGNhbGN1bGF0ZSBNdXJpZWwncyBjaGFuY2VzIG9mPC9icj4NCnByb3Blcmx5IHNvcnRpbmcgdGhlIDggY3VwcyBpbnRvIHR3byBncm91cHMgb2Y8L2JyPg0KZm91ci4gQmVjYXVzZSAkXGJpbm9tezh9ezR9PTcwJCwgaGUgY2FsY3VsYXRlZDwvYnI+DQp0aGUgY2hhbmNlIG9mIHJhbmRvbWx5IGNob29zaW5nIDQgb2YgdGhlIDggdGhhdDwvYnI+DQp3ZXJlIG1pbGstZmlyc3Qgd291bGQgYmUgPGEgaHJlZiA9IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhZHlfdGFzdGluZ190ZWE+MSBpbiA3MDwvYT4uDQo8L2Rpdj4NCkRyLiBCcmlzdG9sIHdpbGwgdGFzdGUgZWlnaHQgY3VwcyBvZiB0ZWEuIEZvciBlYWNoIG9uZSwgd2Ugd2lsbCBmbGlwIGEgZmFpciBjb2luLiBGb3IgaGVhZHMsIHdlIHBvdXIgbWlsayBmaXJzdC4gRm9yIHRhaWxzLCBpdCdzIHRlYSBmaXJzdC4gRWFjaCBjdXAgY291bGQgYmUgbWFkZSBlaXRoZXIgd2F5LiBXZSBjb3VsZCBoYXZlIDggY3VwcyB0aGF0IHdlcmUgbWlsay1maXJzdCwgb3Igbm9uZS4gQSBjaGFybGF0YW4gd291bGQsIGluIGVzc2VuY2UsIGhhdmUgdG8gZ3Vlc3MgdGhlIHJlc3VsdHMgb2YgOCBjb2luIGZsaXBzLiBBdCBlYWNoIHN0YWdlLCB0aGUgY2hhcmxhdGFuIHdvdWxkIGhhdmUgYSBmaWZ0eS1maWZ0eSBjaGFuY2Ugb2Ygc3VjY2Vzcywgc28gdGhlIHByb2JhYmlsaXR5IG9mIHRoZSBjaGFybGF0YW4gZ2V0dGluZyBhbGwgb2YgdGhlbSByaWdodCB3b3VsZCBiZTogJCRcbGVmdChcZnJhY3sxfXsyfVxyaWdodCleezh9PVxmcmFjezF9ezJeOH0gPSAwLjAwMzkwNjI1JCQNCg0KSWYgRHIuIEJyaXN0b2wgd2VyZSB0byBnZXQgYWxsIDggY29ycmVjdCwgdGhpcyB3b3VsZCBiZSBzdHJvbmcsIG9kZHMtZGVmeWluZyBldmlkZW5jZSBzaGUgaGFkIG5vdCBndWVzc2VkLCB0aGF0IHNoZSB3YXMgYWN0dWFsbHkgdGFzdGluZyBhIGRpZmZlcmVuY2UuIFRoZSBpZGVhIG9mIHRoZSBudWxsIGh5cG90aGVzaXMgd2FzIGJvcm4uDQoNCkdpdmVuIEZpc2NoZXIncyBudWxsIGh5cG90aGVzaXMgdGhhdCBhc3N1bWVkIHJhbmRvbSBndWVzc2luZywgd2UgaGF2ZSBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgY2hvaWNlcyBvZiBob3cgdG8gZGV0ZXJtaW5lIHRoZSBwcm9iYWJpbGl0aWVzLg0KDQoxLiAqKkVtcGlyaWNhbCoqOiBVc2UgcmFuZG9taXplZCB0cmlhbHMgdG8gZXN0aW1hdGUgcHJvYmFiaWxpdGllcy4NCjIuICoqVGhlb3JldGljYWwqKjogQXNzdW1lIGEgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uLCB1c2UgYSBwcm9iYWJpbGl0eSBkZXNuaXR5IGZ1bmN0aW9uIChwZGYpIHRvIGNhbGN1bGF0ZSBwcm9iYWJpbGl0aWVzLg0KDQpUcmFkaXRpb25hbCBzdGF0aXN0aWNzIHJlbGllcyB1cG9uIGFzc3VtZWQgZGlzdHJpYnV0aW9ucyBhbmQgcGRmJ3MsIG1vc3QgdHlwaWNhbGx5IGJlbGwtc2hhcGVkIHBkZidzLiBXZSBsaXZlIGF0IGEgc3RhdGlzdGljYWxseSBpbnRlcmVzdGluZyBtb21lbnQgaW4gaGlzdG9yeSB3aGVyZSByYW5kb21pemF0aW9uIG1ldGhvZHMgYXJlIGdhaW5pbmcgdHJhY3Rpb24gaW4gc2NpZW50aWZpYyByZXNlYXJjaCBwdWJsaWNhdGlvbnMgbWFpbmx5IGJlY2F1c2UgY29tcHV0aW5nIHBvd2VyIGZvciByYW5kb21pemF0aW9uIGlzIHJlYWRpbHkgYXZhaWxhYmxlIGZvciB2aXJ0dWFsbHkgcmVzZWFyY2ggc2V0dGluZ3MuIFBlcmhhcHMgaW4gdGhlIG5leHQgZGVjYWRlIG9yIHNvLCByYW5kb21pemF0aW9uIHdpbGwgcmVwbGFjZSB0cmFkaXRpb25hbCBtZXRob2RzIGFzIHRoZSBnb2xkIHN0YW5kYXJkIGZvciByZXNlYXJjaC1sZXZlbCBzdGF0aXN0aWNzLg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPklJSS4gRW1waXJpY2FsIFByb2JhYmlsaXRpZXMgd2l0aCBSYW5kb21pemF0aW9uPC9zcGFuPg0KUlN0dWRpbyBoYXMgdG9vbHMgYm90aCB0byBjb25kdWN0IHRoZSByYW5kb20gdHJpYWxzIGFuZCB0aGVuIGNvbGxlY3QgYW5kIGFuYWx5emUgdGhlIHJlc3VsdHMuIFNpbmNlIHRoZSB0ZWEtZmlyc3Qgb3IgbWlsay1maXJzdCBjaG9pY2Ugd2FzIGRldGVybWluZWQgYnkgY29pbiBmbGlwcGluZywgcmFuZG9tIGNvaW4gZmxpcHMgc2ltdWxhdGUgdHJ5aW5nIHRvIG1hdGNoIHRoZSBwYXR0ZXJuIG9mIGhlYWRzIGFuZCB0YWlscy4gSGVyZSdzIHRoZSBSIGNvZGUgZm9yIDggY29pbiBmbGlwcy4NCg0KYGBge3J9DQojbGlicmFyeShtb3NhaWMpDQpyZmxpcCg4KQ0KYGBgDQpPdXIgcGxhbiBpcyB0byByZXBlYXRlZGx5IGZsaXAgOCBjb2lucyBhbmQgdHJhY2sgd2hhdCBoYXBwZW5zIGZvciBlYWNoIGdyb3VwIG9mIDguIE1vc2FpYydzICoqZG8qKiBmdW5jdGlvbiBiZWhhdmVzIGxpa2Ugb25lIHdvdWxkIHRoaW5rLiBJbiB0aGUgZXhhbXBsZSBiZWxvdywgaXQgcmVwZWF0cyB0aGUgKipyZmxpcCg4KSoqIHByb2Nlc3MgMTAsMDAwIHRpbWVzIHdoaWNoIHNob3VsZCBwcm9kdWNlIGFjY3VyYXRlIGVtcGlyaWNhbCBlc3RpbWF0ZXMgb2YgdGhlIHByb2JhYmlsaXRpZXMuDQpgYGB7cn0NCmNvaW5zID0gZG8oMTAwMDApICogcmZsaXAoOCkNCnRhbGx5KH4gaGVhZHMsIGRhdGEgPSBjb2lucykNCmBgYA0KVGhlIHBhdHRlcm4gaXMgYmVsbC1zaGFwZWQgYXMgY2FuIGJlIHNlZW4gaW4gdGhlIGhpc3RvZ3JhbS4NCmBgYHtyfQ0KaGlzdG9ncmFtKH5oZWFkcywgZGF0YSA9IGNvaW5zLA0KICAgICAgICAgIHdpZHRoID0gMSwNCiAgICAgICAgICB0eXBlID0gImNvdW50IikNCmBgYA0KDQpMZXQgJHgkIGJlIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bCBndWVzc2VzIG91dCBvZiAxMC4gVXNpbmcgdGhlIHRhbGxpZXMsIHdlIGNhbiBjYWxjdWxhdGUgZW1waXJpY2FsIHByb2JhYmlsaXRpZXMuDQoNCiogV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgb2YgcmFuZG9tbHkgZ3Vlc3NpbmcgYW5kIGdldHRpbmcgYWxsIDggY29ycmVjdD8gQWJvdXQgMC40JS4gDQokJFAoeCA9IDgpPVxmcmFje2ByIHBhc3RlKHRhbGx5KH4gaGVhZHMsIGRhdGEgPSBjb2lucylbOV0pYH17MTAwMDB9JCQNCg0KKiBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSBvZiByYW5kb21seSBndWVzc2luZyBhbmQgZ2V0dGluZyA3IG9yIG1vcmUgY29ycmVjdD8gQWJvdXQgMy41JS4NCiQkUCh4IFxnZXEgNyk9XGZyYWN7YHIgcGFzdGUodGFsbHkofiBoZWFkcywgZGF0YSA9IGNvaW5zKVs4XSt0YWxseSh+IGhlYWRzLCBkYXRhID0gY29pbnMpWzldKWB9ezEwMDAwfSQkDQoNCldoYXQgc2hvdWxkIHRoZSBjdXRvZmYgYmU/IFdlIGNhbiBhbGwgcHJvYmFibHkgYWdyZWUgdGhhdCBpZiBEci4gQnJpc3RvbCBnZXRzIGFsbCA4IGNvcnJlY3QgKHdoaWNoIHNoZSBkaWQpLCB0aGVyZSBpcyBhbXBsZSBldmlkZW5jZSBzaGUgaXMgbm90IGEgY2hhcmxhdGFuLiBCdXQgaXMgNyBjb3JyZWN0IHBvdGVudGlhbCBndWVzc2VzIGVub3VnaD8gIA0KDQpUaGUgY2hvc2VuIGN1dG9mZiB2YWx1ZSBmb3Igd2hhdCBjb25zdGl0dXRlcyBldmlkZW5jZSBhZ2FpbnN0IHRoZSBudWxsIGh5cG90aGVzaXMgaXMgY2FsbGVkICoqbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlKiogdGhlIG5vdGF0aW9uIGZvciB3aGljaCBpcyB0aGUgR3JlZWsgbGV0dGVyIGFscGhhICgkXGFscGhhJCkuIEluIG1vZGVybiBzdGF0aXN0aWNzLCB3ZSB0ZW5kIHRvIHVzZSAkXGFscGhhID0gMC4wNSQgYXMgYSBkZWZhdWx0IHNldHRpbmcgaW4gYWJzZW5jZSBvZiBhbnkgb3RoZXIgaW5mb3JtYXRpb24uDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+SVYuIFRoZW9yZXRpY2FsIFByb2JhYmlsaXRpZXM8L3NwYW4+DQpTaW5jZSB3ZSBhcmUgbW9kZWxpbmcgTXVyaWVsJ3MgZ3Vlc3Npbmcgd2l0aCBjb2luIGZsaXBzLCB0aGUgQmlub21pYWwgZGlzdHJpYnV0aW9uIHdpdGggNTAlIGNoYW5jZSBvZiBzdWNjZXNzIGFwcGxpZXMuIFRoZSBSIGZ1bmN0aW9uICoqY2hvb3NlKiogcHJvZHVjZXMgdGhlIGJpbm9taWFsIGNvZWZmaWNpZW50cyB3ZSBuZWVkLg0KDQpMZXQgJHhcaW4gXHswLDEsMixcZG90cyw5LDEwXH0kIGJlIGEgcmFuZG9tIHZhcmlhYmxlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsIG1hdGNoZXMgb3V0IG9mIHRlbiBhdHRlbXB0cy4gSWYgJHg9OCQsIGZvciBleGFtcGxlLCB3ZSBsZWFybmVkIHRvIGNhbGN1bGF0ZSB0aGUgdGhlb3JldGljYWwgcHJvYmFiaWxpdHkgdXNpbmcgYSB0ZXJtIG9mIHRoZSBiaW5vbWlhbCBleHBhbnNpb24uDQokJFAoeD03KT1cYmlub217OH17N30oLjUpXjcoLjUpXjEkJA0KV2UgY2FuIGV2YWx1YXRlIHRoaXMgcHJvYmFiaWxpdHkgdXNpbmcgUiBjb2RlLg0KYGBge3J9DQpjaG9vc2UoOCw3KSouNV43Ki41XjENCmBgYA0KDQpMZXQncyBoYXZlIFIgY3JlYXRlIGEgVC1DaGFydCBvZiAkeCQtdmFsdWVzIGFuZCBwcm9iYWJpbGl0aWVzICRwKHgpJC4NCg0KYGBge3J9DQojIENyZWF0aW5nIEZ1bmN0aW9uDQpwRnVuIDwtIGZ1bmN0aW9uKHQpIHsNCiAgY2hvb3NlKDgsdCkqKC41KV50ICooLjUpXig4LXQpDQp9DQojIENyZWF0aW5nIFQtY2hhcnQgKCkNCnggPSAwOjgNCnRDaGFydCA9IGRhdGEuZnJhbWUoeCxwRnVuKHgpKQ0KbmFtZXModENoYXJ0KSA9IGMoIngiLCJwKHgpIikNCnByaW50KHRDaGFydCkNCmBgYA0KDQo8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDsgbWFyZ2luOiA4cHg7IGJvcmRlcjoycHggYmxhY2sgc29saWQ7IHBhZGRpbmc6IDBweCAxMHB4IDVweCI+DQoqKjxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPlIgQ29kaW5nPC9zcGFuPioqLiBULWNoYXJ0cyBmb3IgcGRmJ3MgaXMgbm90IHBhcnQgb2YgdGhpcyBjb3Vyc2UuPC9icj4NCkNyZWF0aW5nIGEgZnVuY3Rpb24gbGlrZSAqKnBGdW4qKiB3aWxsIGJlIHVzZWQgaW4gdGhlIEV4ZXJjaXNlcy4NCjwvZGl2Pg0KDQpUaGUgdGhlb3JldGljYWwgcHJvYmFiaWxpdHkgdGhhdCBEci4gQnJpc3RvbCBlYXJucyA3IG9yIG1vcmUgc3VjY2Vzc2VzIHdpdGggcmFuZG9tIGd1ZXNzaW5nIGlzIGNhbGN1bGF0ZWQgdXNpbmcgZnVuY3Rpb24gKipwRnVuKGspKiosIGEgcHJvYmFiaWxpdHkgZnVuY3Rpb24gd2UgY3JlYXRlZCBhYm92ZSB0byBkbyBjYWxjdWxhdGlvbnMgYmFzZWQgb24gdGhlICBiaW5vbWlhbCB0aGVvcmVtIGZvciAkayQgc3VjY2Vzc2VzIG91dCBvZiA4IHRyaWFscy4NCg0KYGBge3J9DQpwRnVuKDcpK3BGdW4oOCkNCmBgYA0KV2UgY2FuIHVzZSBzdW1tYXRpb24gYnkgcGxhY2luZyBhIGNvbG9uIGJldHdlZW4gdGhlICoqc3RhcnQqKiBhbmQgKipzdG9wKiogdmFsdWVzLiAoVGhpcyB3aWxsIGJlIGhlbHBmdWwgaW4gdGhlIEV4ZXJjaXNlcy4pDQoNCmBgYHtyfQ0Kc3VtKHBGdW4oNzo4KSkNCmBgYA0KDQoqIFdoYXQgaXMgdGhlIHByb2JhYmlsaXR5IG9mIHJhbmRvbWx5IGd1ZXNzaW5nIGFuZCBnZXR0aW5nIGFsbCA4IGNvcnJlY3Q/IEFib3V0IDAuNCUuIA0KJCRQKHggPSA4KT1cYmlub217OH17OH0oLjUpXjg9XGZyYWN7MX17MjU2fT0uMDAzOTA2MjUkJA0KDQoqIFdoYXQgaXMgdGhlIHByb2JhYmlsaXR5IG9mIHJhbmRvbWx5IGd1ZXNzaW5nIGFuZCBnZXR0aW5nIDcgb3IgbW9yZSBjb3JyZWN0PyBBYm91dCAzLjUlLg0KJCRQKHggXGdlcSA3KT1cZnJhY3tcYmlub217OH17N30rXGJpbm9tezh9ezh9fXsyNTZ9PVxmcmFjezl9ezI1Nn09LjAzNTE1NjI1JCQNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5WLiBDb25jbHVzaW9uPC9zcGFuPg0KDQpXaGF0IHdvdWxkIEZpc2NoZXIgZG8/IEZpc2NoZXIgaGFkIHR3byBzdWdnZXN0aW9ucyB0byBwcm92aWRlIGV2ZW4gbW9yZSBldmlkZW5jZSBmb3IgQnJpc3RvbCdzIGNsYWltLiBGaXJzdCwgaGF2aW5nIEJyaXN0b2wgdGFzdGUgdGVzdCBtb3JlIHRoYW4gOCBjdXBzIG9mIHRlYSB3b3VsZCBwcm92aWRlIGV2ZW4gbW9yZSBldmlkZW5jZSB0byBmYWxzaWZ5IHRoZSBudWxsLiBJZiBCcmlzdG9sIHdhcyBvbmx5IDkwJSBhY2N1cmF0ZSBidXQgdGFzdGVkIDIwIGN1cHMgb2YgdGVhLCB0aGUgcHJvYmFiaWxpdHkgb2YgcmFuZG9tIGd1ZXNzaW5nIGJlaW5nIHN1Y2Nlc3NmdWwgZHJvcHMgYnkgYSBmYWN0b3Igb2YgMTAuU2Vjb25kLCBGaXNjaGVyIGVuY291cmFnZWQgdmFsaWRhdGlvbiBzdHVkaWVzLCByZXBlYXRpbmcgdGhlIHNhbWUgZXhwZXJpbWVudCBtdWx0aXBsZSB0aW1lcyB0byBjb21wYXJlIGFuIGNvbnRyYXN0IHRoZSByZXN1bHRzLg0KDQpGaXNjaGVyJ3Mgc2ltcGxlIGFkdmljZSBpcyBvZnRlbiBpZ25vcmVkIGJ5IG1vZGVybiByZXNlYXJjaGVycy4gVG9vIG1hbnkgc3R1ZGllcyB3aXRoIHNtYWxsIHNhbXBsZSBzaXplcyBnZXQgcHVibGlzaGVkLCAgYW5kIHRvbyBmZXcgdmFsaWRhdGlvbiBzdHVkaWVzIGFyZSBwZXJmb3JtZWQuIFRoZSByZXN1bHRzIGhhdmUgbGVkIHRvIHRoZSA8YSBocmVmID0gaHR0cHM6Ly93d3cudGhlYXRsYW50aWMuY29tL3NjaWVuY2UvYXJjaGl2ZS8yMDE4LzExL3BzeWNob2xvZ3lzLXJlcGxpY2F0aW9uLWNyaXNpcy1yZWFsLzU3NjIyMy8+cmVwbGljYXRpb24gY3Jpc2lzIGluIFBzeWNob2xvZ3kgPC9hPiBhbmQgdGhlIDxhIGhyZWYgPSBodHRwczovL3d3dy5uYXR1cmUuY29tL2FydGljbGVzL3M0MTc0Ni0wMTktMDA3OS16Pg0KcmVwcm9kdWNpYmlsaXR5IGNyaXNpcyBpbiBtZWRpY2luZTwvYT4uIE9ubHkgd2hlbiB3ZSBkZXNpZ24gZ29vZCBleHBlcmltZW50cyBhbmQgcmVwbGljYXRlIHRoZW0gd2l0aGluIGRpZmZlcmVudCBwb3B1bGF0aW9ucyBkbyB3ZSBnZXQgdmFsaWQgc2NpZW50aWZpYyByZXNlYXJjaCByZXN1bHRzLg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPlZJLiBFeGVyY2lzZXM8L3NwYW4+DQoNCjEuIFVzaW5nIHRoZSAqTW9zYWljKiBmdW5jdGlvbiAqKnJmbGlwKiosIGZsaXAgMTYgY29pbnMgYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgSGVhZHMuIFJlcGVhdCAxMCwwMDAgdGltZXMgdXNpbmcgdGhlICpNb3NhaWMqIGZ1bmN0aW9uICpkbyouIEVzdGltYXRlIHRoZSBwcm9iYWJpbGl0eSB0aGF0LCBpZiBEci4gQnJpc3RvbCB0YXN0ZWQgMTYgY3VwcyBvZiB0ZWEgZWFjaCBvZiB3aGljaCB3YXMgcmFuZG9tbHkgY2hvc2VuIHRvIGJlICJ0ZWEgZmlyc3QiIG9yICJtaWxrIGZpcnN0LCIgdGhhdCBzaGUgd291bGQgZ2V0IGF0IGxlYXN0IDE0IGNvcnJlY3QgdXNpbmcgYSBoaXN0b2dyYW0gd2l0aCB0aGUgKip0eXBlKiogcGFyYW1ldGVyIHNldCB0byAiY291bnQuIg0KDQoyLiBGaW5kIHRoZSB0aGVvcmV0aWNhbCBwcm9iYWJpbGl0eSBpbiBFeGVyY2lzZSAxIGJ5IGFsdGVyaW5nIHRoZSBjb2RlIGJsb2NrIHRoYXQgY3JlYXRlZCB0aGUgKipwRnVuKiogZnVuY3Rpb24uIFVzZSB5b3VyIG5ldyAqKnBGdW4qKiBmdW5jdGlvbiBhbmQgUidzICoqc3VtKiogZnVuY3Rpb24gZm9yIHRoZSBjYWxjdWxhdGlvbnMuIEhvdyBkb2VzIHlvdXIgdGhlb3JldGljYWwgY2FsY3VsYXRpb24gY29tcGFyZSB0byB5b3VyIGVtcGlyaWNhbCBlc3RpbWF0ZSBpbiBFeGVyY2lzZSAxPw0KDQpgYGB7cn0NCnBGdW4gPC0gZnVuY3Rpb24odCkgew0KICBjaG9vc2UoMTYsdCkqKC41KV50ICooLjUpXigxNi10KQ0KfQ0KYGBgDQoNCjMuIEZvciAzMiBjb2lucyBmbGlwcyAoYW5kIDEwLDAwMCByYW5kb21pemVkIGRyYXdzKSwgZXN0aW1hdGUgdGhlIHByb2JhYmlsaXR5IHRoYXQgRHIuIEJyaXN0b2wgd291bGQgZ2V0IGF0IGxlYXN0IDI0IGNvcnJlY3QgaWYgc2hlIHdlcmUgZ3Vlc3NpbmcgYXQgcmFuZG9tLiBVc2UgYSBoaXN0b2dyYW0gd2l0aCB0aGUgKip0eXBlKiogcGFyYW1ldGVyIHNldCB0byAiY291bnQuIiBVcGRhdGUgKipwRnVuKiogdG8gZmluZCB0aGUgdGhlb3JldGljYWwgcHJvYmFiaWxpdGllcyBhbmQgY29tcGFyZSB0aGUgdHdvIHJlc3VsdHMuDQoNCjQuIEhvdyBtYW55IHN1Y2Nlc3NlcyBvdXQgb2YgMTAwIHdvdWxkIERyLiBCcmlzdG9sIG5lZWQgdG8gaGF2ZSBiZWZvcmUgeW91IHdvdWxkIGJlbGlldmUgc2hlIHdhcyBub3QgZ3Vlc3NpbmcgYXQgcmFuZG9tPyBFeHBsYWluIHlvdXIgcmVhc29uaW5nIGJhc2VkIG9uIGVtcGlyaWNhbCBvciB0aGVvcmV0aWNhbCBjYWxjdWxhdGlvbnMu