Question: New Cholesterol Medication
A pharmaceutical company develops “CholestFix” to
reduce Low-Density Lipoprotein (LDL, fat carrier that’s low in
density) cholesterol. The current standard drug
lowers LDL by an average of 25 mg/dL with a standard deviation of 15
mg/dL. A clinical trial with 5 participants were recruited in the study
for three months. At the end of the study, the mean reduction is 29
mg/dL. Assume that the variance of LDL reduction of new drug is the same
as that of the standard drugs.
Based on the results in the clinical trial, researchers in the company
believe
CholestFix is more effective.
a). Perform a formal hypothesis test of the researchers’ belief
regarding LDL reduction, using a significance level of \(\alpha = 0.05\).
Step 1: Gather Available Information for Hypothesis
Testing:
\(n = 5,\quad \bar{x} = 29,\quad \sigma =
15,\quad \mu_0 = 25,\quad \alpha = 0.05\) The claim is that \(\mu > 25\)
Step 2: State the Hypotheses:
\(H_0:\mu = 25\)
\(H_1:\mu > 25\)
\(H_1: \mu > \mu_0\) This is a
right-tailed test.
Step 3: Select an Appropriate Test and Evaluate the Test
Statistic:
One-sample z-test: \[
z = \frac{\bar{x} - \mu_0}{\sigma/\sqrt{n}}
\]
Substitute the given values:
\[
z=\frac{29-25}{15/\sqrt{5}}
\]
\[
z=\frac{4}{6.7082}
\] \[
z=0.5963
\]
Step 4: Determine the Critical Value(s) and/or
P-value:
For a right-tailed test with \(\alpha=0.05\), the critical value is: \(z_{0.95}=1.645\)
The p-value is:
\(p=P(Z>0.5963)=1-\Phi(0.5963)\approx
0.2755\)
Step 5: Make a Decision:
Using the critical value approach:
0.5963 < 1.645 so we fail to reject \(H_0\).
Using the p-value approach:
0.2755 > 0.05 so we again fail to reject \(H_0\).
Step 6: State the Conclusion in Context:
There is insufficient statistical evidence at the \(\alpha=0.05\) level to conclude that
CholestFix lowers LDL cholesterol more than the current standard
drug.
Summary:
Although the sample mean reduction for CholestFix is higher than 25
mg/dL, the sample size is very small and the population standard
deviation is large relative to the observed difference. Therefore, the
observed improvement is not statistically significant.
b). Given \(n = 50, \sigma = 15, \alpha =
0.05\), and an effect size we wish to detect \(\delta = 4\) mg/dL (corresponding to a
reduction from 29 mg/dL to 25 mg/dL). What is the probability that we’d
detect a true improvement?
Step 1: Given Information
\(n = 50, \quad \sigma = 15, \quad \alpha =
0.05, \quad \delta = 4\)
\(\mu_1 = \mu_0 + \delta = 25 + 4 =
29\)
Step 2: Hypotheses
\(H_0: \mu = 25, \qquad H_1: \mu >
25\)
Step 3: Standardized Effect
\[
\lambda = \frac{\delta}{\sigma / \sqrt{n}}
= \frac{4}{15 / \sqrt{50}}
= \frac{4\sqrt{50}}{15}
= 1.8856
\]
Step 4: Power Formula
For a right-tailed test, reject \(H_0\) if \(Z >
z_{0.95} = 1.645\)
Therefore, the power is
\[
\text{Power} = P(Z > 1.645 - 1.8856)
= P(Z > -0.2406)
= P(Z < 0.2406)
= 0.5951
\] Summary: The power was calculated to be
approximately 0.5951. This means that if the true improvement is 4
mg/dL, the probability of correctly rejecting \(H_0\) is about 59.5%. This power is lower
than the commonly desired level of 0.80, indicating that a sample size
of 50 is not sufficient to reliably detect this effect.
c). Determine the minimum sample size required to detect an effect
size of 4 mg/dL with a power of \(1 - \beta =
0.8\) and a significance level of \(\alpha = 0.05\). Assume the standard
deviation of LDL reduction is 15 mg/dL.
Step 1: Given Information
\[
\delta = 4, \quad \sigma = 15, \quad \alpha = 0.05, \quad 1 - \beta =
0.8
\]
Step 2: Formula
\[
n \approx \left( \frac{(z_{1-\alpha} + z_{1-\beta}) \sigma}{\delta}
\right)^2
\]
Step 3: Substitute Values
\[
z_{1-\alpha} = 1.645, \quad z_{1-\beta} = 0.842
\]
\[
n \approx \left( \frac{(1.645 + 0.842)(15)}{4} \right)^2
= \left( \frac{2.487 \cdot 15}{4} \right)^2
= (9.3263)^2
= 86.98
\]
Step 4: Final Answer
\[
n = 87
\]
Summary:The required sample size to achieve 80%
power at the 5% significance level was approximately 86.98, which is
rounded up to 87. This shows that a much larger sample is needed to
reliably detect a true improvement of 4 mg/dL compared to the smaller
sample sizes used earlier.
d). Power curve: To assess the impact of sample size
on power, we can create a power function in terms of the sample size
\(n\) and use the remaining information
from part (b). Plot the power curve by selecting a sequence of sample
sizes.
Step 1: The information is based on part (b):
\[
\alpha = 0.05, \quad \delta = 4, \quad \sigma = 15
\]
Step 2: Power function
For the one-sample right-tailed test, reject \[H_0\] if
\[
Z > 1.645
\]
So the power function is
\[
\pi(n) = P\left(Z > 1.645 - \frac{4\sqrt{n}}{15}\right)
\]
Step 3: Interpretation of the function
As \(n\) increases, the quantity
\(\frac{4\sqrt{n}}{15}\)increases, so
the probability of rejection also increases.
Step 4: Selected values will be computed and plotted
in R.
Step 5: Decision - no reject/fail-to-reject decision
is needed. We examine how power changes with sample size.
Step 6: Interpretation - The power curve shows that
larger sample sizes lead to higher power. Around \[n = 87\], the power reaches approximately
0.80.
Verification Using R:
# Power curve
alpha <- 0.05
delta <- 4
sigma <- 15
n_seq <- seq(5, 150, by = 1)
power_curve <- 1 - pnorm(qnorm(0.95) - delta * sqrt(n_seq) / sigma)
plot(n_seq, power_curve, type = "l", lwd = 2,
xlab = "Sample Size (n)",
ylab = "Power",
main = "Power Curve")
abline(h = 0.80, lty = 2)
abline(v = 87, lty = 2)

Summary:The power curve shows that power increases
as the sample size increases. For small sample sizes, the power is low,
meaning there is a high chance of failing to detect a true effect. As
the sample size approaches 87, the power reaches approximately 0.80.
This confirms that larger sample sizes improve the ability to detect a
true treatment effect.
LS0tDQp0aXRsZTogIkFzc2lnbm1lbnQgOTogSHlwb3RoZXNpcyBUZXN0aW5nIGFuZCBQb3dlciBhbmQgU2FtcGxlIHNpemUgRGV0ZXJtaW5hdGlvbiINCmF1dGhvcjogIlhpYW95aW5nIE1hICINCmRhdGU6ICIgRHVlOiAwNC8wNy8yMDI2ICINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICBoaWdobGlnaHQ6IG1vbm9jaHJvbWUNCiAgICB0aGVtZTogc3BhY2VsYWINCiAgd29yZF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAga2VlcF9tZDogeWVzDQogIHBkZl9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICBmaWdfd2lkdGg6IDMNCiAgICBmaWdfaGVpZ2h0OiAzDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOw0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zaXplOiAxLjJlbTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGNvbG9yOiBuYXZ5Ow0KICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KfQ0KDQoNCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8NCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCg0KaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8NCiAgZm9udC1zaXplOiAyMnB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KfQ0KDQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE1cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoNC5kYXRlIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovDQouaGVhZGVyLXNlY3Rpb24tbnVtYmVyOjphZnRlciB7DQogIGNvbnRlbnQ6ICIuIjsNCg0KYm9keSB7YmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsNCiAgICAgIGNvbG9yOiAjMDAwMDAwOw0KICAgICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgICAgZm9udC1zaXplOiAxcmVtOw0KICAgICAgbGluZS1oZWlnaHQ6IDEuNjsNCiAgICAgIH0NCg0KLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0NCg0KcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0NCg0KfQ0KYGBgDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IA0KIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuDQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikNCiAgIGxpYnJhcnkoa25pdHIpDQp9DQppZiAoIXJlcXVpcmUoInBhbmRlciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJwYW5kZXIiKQ0KICAgbGlicmFyeShwYW5kZXIpDQp9DQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCiAgbGlicmFyeShnZ3Bsb3QyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCg0KaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKQ0KICBsaWJyYXJ5KHBsb3RseSkNCn0NCg0KaWYgKCFyZXF1aXJlKCJWR0FNIikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygiVkdBTSIpDQogIGxpYnJhcnkoVkdBTSkNCn0NCiMjIyMgVkdBTQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCAgICAgICAjIGluY2x1ZGUgY29kZSBjaHVuayBpbiB0aGUgb3V0cHV0IGZpbGUNCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgIyBzb21ldGltZXMsIHlvdSBjb2RlIG1heSBwcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgeW91IGNhbiBjaG9vc2UgdG8gaW5jbHVkZSB0aGUgd2FybmluZyBtZXNzYWdlcyBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBvdXRwdXQgZmlsZS4gDQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFRSVUUsICAgICMgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluIHRoZSBvdXRwdXQgZmlsZS4NCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BDQogICAgICAgICAgICAgICAgICAgICAgKSAgDQpgYGANCg0KDQojIyAqKlNpbXBsZSB2ZXJzdXMgQ29tcG9zaXRlIEh5cG90aGVzaXMqDQoNCioqU2ltcGxlIEh5cG90aGVzaXMqKg0KDQoqICoqU2ltcGxlIEh5cG90aGVzaXMgVGVzdCoqIGlzIGEgaHlwb3RoZXNpcyB0aGF0IGNvbXBsZXRlbHkgc3BlY2lmaWVzIHRoZSBwb3B1bGF0aW9uIGRpc3RyaWJ1dGlvbi4gTWF0aGVtYXRpY2FsbHksIHNpbXBsZSBoeXBvdGhlc2lzIGZpeGVzIGFsbCBwYXJhbWV0ZXJzIHRvIHNwZWNpZmljIHZhbHVlcy4gRm9yIGV4YW1wbGUsIFRoZSBzaW1wbGUgaHlwb3RoZXNlcyBhcmU6ICRIXzA6IFxtdSA9IDUkIChpZiAkXGFscGhhJCBpcyBrbm93biksICRIXzA6IFxtdSA9IDEwMCwgXHNpZ21hXjIgPSAyNSQsIGFuZCAkSF8xOiBwID0gMC43JCBmb3IgYSBCZXJub3VsbGkgZGlzdHJpYnV0aW9uLg0KDQoqICoqRXhhbXBsZSBTY2VuYXJpbyoqICBUZXN0IGlmIGEgY29pbiBpcyBmYWlyOg0KDQpcYmVnaW57YWxpZ25lZH0NCkhfMCY6IHAgPSAwLjUgXHF1YWQgXHRleHR7KGNvbXBsZXRlbHkgc3BlY2lmaWVkKX0gXFwNCkhfMSY6IHAgPSAwLjYgXHF1YWQgXHRleHR7KGFsc28gY29tcGxldGVseSBzcGVjaWZpZWQpfQ0KXGVuZHthbGlnbmVkfQ0KDQpCb3RoIGFyZSAqKnNpbXBsZSoqIGh5cG90aGVzZXMuDQoNCioqQ29tcG9zaXRlIEh5cG90aGVzaXMqKg0KDQoqICoqQ29tcG9zaXRlIEh5cG90aGVzaXMqKiBpcyBhIGh5cG90aGVzaXMgdGhhdCBkb2VzIG5vdCBjb21wbGV0ZWx5IHNwZWNpZnkgdGhlIGRpc3RyaWJ1dGlvbi4gTWF0aGVtYXRpY2FsbHksIGl0IGFsbG93cyBhIHJhbmdlIG9mIHZhbHVlcyBmb3IgYXQgbGVhc3Qgb25lIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsIGluIG9uZS1zaWRlZDogJFxtdSA+NSQ7IGluIHR3by1zaWRlZDogJFxtdSBcbGUgNSQuDQoNCiogKipFeGFtcGxlIFNjZW5hcmlvcyoqIA0KDQoNClxiZWdpbnthbGlnbmVkfQ0KJkhfMDogXG11ID0gNSAmJiBcdGV4dHsoc2ltcGxlKX0gXFwNCiZIXzE6IFxtdSA+IDUgJiYgXHRleHR7KGNvbXBvc2l0ZSl9DQpcZW5ke2FsaWduZWR9DQoNCg0KDQpcYmVnaW57YWxpZ25lZH0NCiZIXzA6IFxtdSBcbGVxIDUgJiYgXHRleHR7KGNvbXBvc2l0ZSl9IFxcDQomSF8xOiBcbXUgPiA1ICYmIFx0ZXh0eyhjb21wb3NpdGUpfQ0KXGVuZHthbGlnbmVkfQ0KDQoNClxiZWdpbnthbGlnbmVkfQ0KJkhfMDogXHRleHR7ZGF0YSBmb2xsb3dzIH0gTihcbXUsIDEpLCBcbXUgPSAwICYmIFx0ZXh0eyhzaW1wbGUpfSBcXA0KJkhfMTogXHRleHR7ZGF0YSBmb2xsb3dzIFBvaXNzb259KFxsYW1iZGEpICYmIFx0ZXh0eyhjb21wb3NpdGUg4oCTIGRpZmZlcmVudCBmYW1pbHkpfQ0KXGVuZHthbGlnbmVkfQ0KDQoNCg0KPHA+PGZvbnQgY29sb3IgPSAiZGFya3JlZCI+KipUaGlzIGFzc2lnbm1lbnQgZm9jdXNlcyBvbiBwZXJmb3JtaW5nIHBlcmZvcm1pbmcgYSB0ZXN0IG9mIG1lYW4gKCRcbXUkKSBhIG5vcm1hbCBwb3B1bGF0aW9uIGFuZCBjYWxjdWxhdGluZyB0aGUgcG93ZXIgYW5kIHNhbXBsZSBzaXplIGJhc2VkIG9uIHZhcmlvdXMgYXNzdW1wdGlvbnMqKjwvZm9udD48L3A+DQoNCg0KXA0KDQojIyAqKlF1ZXN0aW9uOiBOZXcgQ2hvbGVzdGVyb2wgTWVkaWNhdGlvbioqDQoNCjxwPg0KQSBwaGFybWFjZXV0aWNhbCBjb21wYW55IGRldmVsb3BzICoqIkNob2xlc3RGaXgiKiogdG8gcmVkdWNlIExvdy1EZW5zaXR5IExpcG9wcm90ZWluIChMREwsICpmYXQgY2FycmllciB0aGF0J3MgbG93IGluIGRlbnNpdHkqKSBjaG9sZXN0ZXJvbC4gVGhlICoqY3VycmVudCBzdGFuZGFyZCBkcnVnKiogbG93ZXJzIExETCBieSBhbiBhdmVyYWdlIG9mIDI1IG1nL2RMIHdpdGggYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMTUgbWcvZEwuIEEgY2xpbmljYWwgdHJpYWwgd2l0aCA1IHBhcnRpY2lwYW50cyB3ZXJlIHJlY3J1aXRlZCBpbiB0aGUgc3R1ZHkgZm9yIHRocmVlIG1vbnRocy4gQXQgdGhlIGVuZCBvZiB0aGUgc3R1ZHksIHRoZSBtZWFuIHJlZHVjdGlvbiBpcyAyOSBtZy9kTC4gQXNzdW1lIHRoYXQgdGhlIHZhcmlhbmNlIG9mIExETCByZWR1Y3Rpb24gb2YgbmV3IGRydWcgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgc3RhbmRhcmQgZHJ1Z3MuDQoNCkJhc2VkIG9uIHRoZSByZXN1bHRzIGluIHRoZSBjbGluaWNhbCB0cmlhbCwgcmVzZWFyY2hlcnMgaW4gdGhlIGNvbXBhbnkgYmVsaWV2ZSAqKkNob2xlc3RGaXgqKiBpcyBtb3JlIGVmZmVjdGl2ZS4NCjwvcD4NCg0KDQo8cD4NCmEpLiBQZXJmb3JtIGEgZm9ybWFsIGh5cG90aGVzaXMgdGVzdCBvZiB0aGUgcmVzZWFyY2hlcnPigJkgYmVsaWVmIHJlZ2FyZGluZyBMREwgcmVkdWN0aW9uLCB1c2luZyBhIHNpZ25pZmljYW5jZSBsZXZlbCBvZiAkXGFscGhhID0gMC4wNSQuDQoNCg0KKipTdGVwIDE6IEdhdGhlciBBdmFpbGFibGUgSW5mb3JtYXRpb24gZm9yIEh5cG90aGVzaXMgVGVzdGluZyoqOg0KDQpcKG4gPSA1LFxxdWFkIFxiYXJ7eH0gPSAyOSxccXVhZCBcc2lnbWEgPSAxNSxccXVhZCBcbXVfMCA9IDI1LFxxdWFkIFxhbHBoYSA9IDAuMDUNClwpDQpUaGUgY2xhaW0gaXMgdGhhdA0KJFxtdSA+IDI1JA0KDQoqKlN0ZXAgMjogU3RhdGUgdGhlIEh5cG90aGVzZXMqKjoNCg0KJEhfMDpcbXUgPSAyNSQNCg0KJEhfMTpcbXUgPiAyNSQNCg0KJEhfMTogXG11ID4gXG11XzAkIFRoaXMgaXMgYSAqKnJpZ2h0LXRhaWxlZCB0ZXN0KiouDQoNCioqU3RlcCAzOiBTZWxlY3QgYW4gQXBwcm9wcmlhdGUgVGVzdCBhbmQgRXZhbHVhdGUgdGhlIFRlc3QgU3RhdGlzdGljKio6DQoNCk9uZS1zYW1wbGUgei10ZXN0OiANCiQkDQogIHogPSBcZnJhY3tcYmFye3h9IC0gXG11XzB9e1xzaWdtYS9cc3FydHtufX0NCiQkDQoNClN1YnN0aXR1dGUgdGhlIGdpdmVuIHZhbHVlczoNCg0KJCQNCno9XGZyYWN7MjktMjV9ezE1L1xzcXJ0ezV9fQ0KJCQNCg0KJCQNCno9XGZyYWN7NH17Ni43MDgyfQ0KJCQNCiQkDQp6PTAuNTk2Mw0KJCQNCg0KKipTdGVwIDQ6IERldGVybWluZSB0aGUgQ3JpdGljYWwgVmFsdWUocykgYW5kL29yIFAtdmFsdWUqKjoNCg0KRm9yIGEgcmlnaHQtdGFpbGVkIHRlc3Qgd2l0aCBcKFxhbHBoYT0wLjA1XCksIHRoZSBjcml0aWNhbCB2YWx1ZSBpczogJHpfezAuOTV9PTEuNjQ1JCANCg0KVGhlIHAtdmFsdWUgaXM6DQoNCiRwPVAoWj4wLjU5NjMpPTEtXFBoaSgwLjU5NjMpXGFwcHJveCAwLjI3NTUkDQoNCioqU3RlcCA1OiBNYWtlIGEgRGVjaXNpb24qKjoNCg0KVXNpbmcgdGhlIGNyaXRpY2FsIHZhbHVlIGFwcHJvYWNoOg0KDQowLjU5NjMgPCAxLjY0NSBzbyB3ZSAqKmZhaWwgdG8gcmVqZWN0IFwoSF8wXCkqKi4NCg0KVXNpbmcgdGhlIHAtdmFsdWUgYXBwcm9hY2g6DQoNCjAuMjc1NSA+IDAuMDUgIHNvIHdlIGFnYWluICoqZmFpbCB0byByZWplY3QgXChIXzBcKSoqLg0KDQoqKlN0ZXAgNjogU3RhdGUgdGhlIENvbmNsdXNpb24gaW4gQ29udGV4dCoqOg0KDQpUaGVyZSBpcyBpbnN1ZmZpY2llbnQgc3RhdGlzdGljYWwgZXZpZGVuY2UgYXQgdGhlIFwoXGFscGhhPTAuMDVcKSBsZXZlbCB0byBjb25jbHVkZSB0aGF0IENob2xlc3RGaXggbG93ZXJzIExETCBjaG9sZXN0ZXJvbCBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgc3RhbmRhcmQgZHJ1Zy4NCg0KKipTdW1tYXJ5Kio6DQoNCkFsdGhvdWdoIHRoZSBzYW1wbGUgbWVhbiByZWR1Y3Rpb24gZm9yIENob2xlc3RGaXggaXMgaGlnaGVyIHRoYW4gMjUgbWcvZEwsIHRoZSBzYW1wbGUgc2l6ZSBpcyB2ZXJ5IHNtYWxsIGFuZCB0aGUgcG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24gaXMgbGFyZ2UgcmVsYXRpdmUgdG8gdGhlIG9ic2VydmVkIGRpZmZlcmVuY2UuIFRoZXJlZm9yZSwgdGhlIG9ic2VydmVkIGltcHJvdmVtZW50IGlzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50Lg0KDQoNCmIpLiBHaXZlbiAkbiA9IDUwLCBcc2lnbWEgPSAxNSwgXGFscGhhID0gMC4wNSQsIGFuZCBhbiBlZmZlY3Qgc2l6ZSB3ZSB3aXNoIHRvIGRldGVjdCAkXGRlbHRhID0gNCQgbWcvZEwgKGNvcnJlc3BvbmRpbmcgdG8gYSByZWR1Y3Rpb24gZnJvbSAyOSBtZy9kTCB0byAyNSBtZy9kTCkuICBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHdlJ2QgZGV0ZWN0IGEgdHJ1ZSBpbXByb3ZlbWVudD8NCg0KKipTdGVwIDE6IEdpdmVuIEluZm9ybWF0aW9uKioNCg0KJG4gPSA1MCwgXHF1YWQgXHNpZ21hID0gMTUsIFxxdWFkIFxhbHBoYSA9IDAuMDUsIFxxdWFkIFxkZWx0YSA9IDQkDQoNCiRcbXVfMSA9IFxtdV8wICsgXGRlbHRhID0gMjUgKyA0ID0gMjkkDQoNCg0KKipTdGVwIDI6IEh5cG90aGVzZXMqKg0KDQokSF8wOiBcbXUgPSAyNSwgXHFxdWFkIEhfMTogXG11ID4gMjUkDQoNCioqU3RlcCAzOiBTdGFuZGFyZGl6ZWQgRWZmZWN0KioNCg0KJCQNClxsYW1iZGEgPSBcZnJhY3tcZGVsdGF9e1xzaWdtYSAvIFxzcXJ0e259fSANCj0gXGZyYWN7NH17MTUgLyBcc3FydHs1MH19IA0KPSBcZnJhY3s0XHNxcnR7NTB9fXsxNX0gDQo9IDEuODg1Ng0KJCQNCg0KKipTdGVwIDQ6IFBvd2VyIEZvcm11bGEqKg0KDQpGb3IgYSByaWdodC10YWlsZWQgdGVzdCwgcmVqZWN0ICRIXzAkIGlmICRaID4gel97MC45NX0gPSAxLjY0NSQNCg0KVGhlcmVmb3JlLCB0aGUgcG93ZXIgaXMNCg0KJCQNClx0ZXh0e1Bvd2VyfSA9IFAoWiA+IDEuNjQ1IC0gMS44ODU2KQ0KPSBQKFogPiAtMC4yNDA2KQ0KPSBQKFogPCAwLjI0MDYpDQo9IDAuNTk1MQ0KJCQNCioqU3VtbWFyeSoqOg0KVGhlIHBvd2VyIHdhcyBjYWxjdWxhdGVkIHRvIGJlIGFwcHJveGltYXRlbHkgMC41OTUxLiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHRydWUgaW1wcm92ZW1lbnQgaXMgNCBtZy9kTCwgdGhlIHByb2JhYmlsaXR5IG9mIGNvcnJlY3RseSByZWplY3RpbmcgJEhfMCQgaXMgYWJvdXQgNTkuNSUuIFRoaXMgcG93ZXIgaXMgbG93ZXIgdGhhbiB0aGUgY29tbW9ubHkgZGVzaXJlZCBsZXZlbCBvZiAwLjgwLCBpbmRpY2F0aW5nIHRoYXQgYSBzYW1wbGUgc2l6ZSBvZiA1MCBpcyBub3Qgc3VmZmljaWVudCB0byByZWxpYWJseSBkZXRlY3QgdGhpcyBlZmZlY3QuDQoNCg0KYykuIERldGVybWluZSB0aGUgbWluaW11bSBzYW1wbGUgc2l6ZSByZXF1aXJlZCB0byBkZXRlY3QgYW4gZWZmZWN0IHNpemUgb2YgNCBtZy9kTCB3aXRoIGEgcG93ZXIgb2YgJDEgLSBcYmV0YSA9IDAuOCQgIGFuZCBhIHNpZ25pZmljYW5jZSBsZXZlbCBvZiAkXGFscGhhID0gMC4wNSQuIEFzc3VtZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIExETCByZWR1Y3Rpb24gaXMgMTUgbWcvZEwuDQoNCioqU3RlcCAxOiBHaXZlbiBJbmZvcm1hdGlvbioqDQoNCiQkDQpcZGVsdGEgPSA0LCBccXVhZCBcc2lnbWEgPSAxNSwgXHF1YWQgXGFscGhhID0gMC4wNSwgXHF1YWQgMSAtIFxiZXRhID0gMC44DQokJA0KDQoNCioqU3RlcCAyOiBGb3JtdWxhKioNCg0KJCQNCm4gXGFwcHJveCBcbGVmdCggXGZyYWN7KHpfezEtXGFscGhhfSArIHpfezEtXGJldGF9KSBcc2lnbWF9e1xkZWx0YX0gXHJpZ2h0KV4yDQokJA0KDQoNCioqU3RlcCAzOiBTdWJzdGl0dXRlIFZhbHVlcyoqDQoNCiQkDQp6X3sxLVxhbHBoYX0gPSAxLjY0NSwgXHF1YWQgel97MS1cYmV0YX0gPSAwLjg0Mg0KJCQNCg0KJCQNCm4gXGFwcHJveCBcbGVmdCggXGZyYWN7KDEuNjQ1ICsgMC44NDIpKDE1KX17NH0gXHJpZ2h0KV4yDQo9IFxsZWZ0KCBcZnJhY3syLjQ4NyBcY2RvdCAxNX17NH0gXHJpZ2h0KV4yDQo9ICg5LjMyNjMpXjINCj0gODYuOTgNCiQkDQoNCioqU3RlcCA0OiBGaW5hbCBBbnN3ZXIqKg0KDQokJA0KbiA9IDg3DQokJA0KDQoqKlN1bW1hcnkqKjpUaGUgcmVxdWlyZWQgc2FtcGxlIHNpemUgdG8gYWNoaWV2ZSA4MCUgcG93ZXIgYXQgdGhlIDUlIHNpZ25pZmljYW5jZSBsZXZlbCB3YXMgYXBwcm94aW1hdGVseSA4Ni45OCwgd2hpY2ggaXMgcm91bmRlZCB1cCB0byA4Ny4gVGhpcyBzaG93cyB0aGF0IGEgbXVjaCBsYXJnZXIgc2FtcGxlIGlzIG5lZWRlZCB0byByZWxpYWJseSBkZXRlY3QgYSB0cnVlIGltcHJvdmVtZW50IG9mIDQgbWcvZEwgY29tcGFyZWQgdG8gdGhlIHNtYWxsZXIgc2FtcGxlIHNpemVzIHVzZWQgZWFybGllci4NCg0KZCkuICoqUG93ZXIgY3VydmUqKjogVG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2Ygc2FtcGxlIHNpemUgb24gcG93ZXIsIHdlIGNhbiBjcmVhdGUgYSBwb3dlciBmdW5jdGlvbiBpbiB0ZXJtcyBvZiB0aGUgc2FtcGxlIHNpemUgJG4kIGFuZCB1c2UgdGhlIHJlbWFpbmluZyBpbmZvcm1hdGlvbiBmcm9tIHBhcnQgKGIpLiBQbG90IHRoZSBwb3dlciBjdXJ2ZSBieSBzZWxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBzYW1wbGUgc2l6ZXMuDQoNCioqU3RlcCAxKio6IFRoZSBpbmZvcm1hdGlvbiBpcyBiYXNlZCBvbiBwYXJ0IChiKToNCg0KJCQNClxhbHBoYSA9IDAuMDUsIFxxdWFkIFxkZWx0YSA9IDQsIFxxdWFkIFxzaWdtYSA9IDE1DQokJA0KDQoqKlN0ZXAgMioqOiBQb3dlciBmdW5jdGlvbg0KDQpGb3IgdGhlIG9uZS1zYW1wbGUgcmlnaHQtdGFpbGVkIHRlc3QsIHJlamVjdCAkJEhfMCQkIGlmDQoNCiQkDQpaID4gMS42NDUNCiQkDQoNClNvIHRoZSBwb3dlciBmdW5jdGlvbiBpcw0KDQokJA0KXHBpKG4pID0gUFxsZWZ0KFogPiAxLjY0NSAtIFxmcmFjezRcc3FydHtufX17MTV9XHJpZ2h0KQ0KJCQNCg0KKipTdGVwIDMqKjogSW50ZXJwcmV0YXRpb24gb2YgdGhlIGZ1bmN0aW9uDQoNCkFzICRuJCBpbmNyZWFzZXMsIHRoZSBxdWFudGl0eSAkXGZyYWN7NFxzcXJ0e259fXsxNX0kaW5jcmVhc2VzLCBzbyB0aGUgcHJvYmFiaWxpdHkgb2YgcmVqZWN0aW9uIGFsc28gaW5jcmVhc2VzLg0KDQoqKlN0ZXAgNCoqOiBTZWxlY3RlZCB2YWx1ZXMgd2lsbCBiZSBjb21wdXRlZCBhbmQgcGxvdHRlZCBpbiBSLg0KDQoqKlN0ZXAgNSoqOiBEZWNpc2lvbiAtIG5vIHJlamVjdC9mYWlsLXRvLXJlamVjdCBkZWNpc2lvbiBpcyBuZWVkZWQuIFdlIGV4YW1pbmUgaG93IHBvd2VyIGNoYW5nZXMgd2l0aCBzYW1wbGUgc2l6ZS4NCg0KKipTdGVwIDYqKjogSW50ZXJwcmV0YXRpb24gLSBUaGUgcG93ZXIgY3VydmUgc2hvd3MgdGhhdCBsYXJnZXIgc2FtcGxlIHNpemVzIGxlYWQgdG8gaGlnaGVyIHBvd2VyLiBBcm91bmQgJCRuID0gODckJCwgdGhlIHBvd2VyIHJlYWNoZXMgYXBwcm94aW1hdGVseSAwLjgwLg0KDQoqKlZlcmlmaWNhdGlvbiBVc2luZyBSKio6DQoNCmBgYHtyfQ0KIyBQb3dlciBjdXJ2ZQ0KDQphbHBoYSA8LSAwLjA1DQpkZWx0YSA8LSA0DQpzaWdtYSA8LSAxNQ0Kbl9zZXEgPC0gc2VxKDUsIDE1MCwgYnkgPSAxKQ0KDQpwb3dlcl9jdXJ2ZSA8LSAxIC0gcG5vcm0ocW5vcm0oMC45NSkgLSBkZWx0YSAqIHNxcnQobl9zZXEpIC8gc2lnbWEpDQoNCnBsb3Qobl9zZXEsIHBvd2VyX2N1cnZlLCB0eXBlID0gImwiLCBsd2QgPSAyLA0KICAgICB4bGFiID0gIlNhbXBsZSBTaXplIChuKSIsDQogICAgIHlsYWIgPSAiUG93ZXIiLA0KICAgICBtYWluID0gIlBvd2VyIEN1cnZlIikNCg0KYWJsaW5lKGggPSAwLjgwLCBsdHkgPSAyKQ0KYWJsaW5lKHYgPSA4NywgbHR5ID0gMikNCg0KYGBgDQoNCioqU3VtbWFyeSoqOlRoZSBwb3dlciBjdXJ2ZSBzaG93cyB0aGF0IHBvd2VyIGluY3JlYXNlcyBhcyB0aGUgc2FtcGxlIHNpemUgaW5jcmVhc2VzLiBGb3Igc21hbGwgc2FtcGxlIHNpemVzLCB0aGUgcG93ZXIgaXMgbG93LCBtZWFuaW5nIHRoZXJlIGlzIGEgaGlnaCBjaGFuY2Ugb2YgZmFpbGluZyB0byBkZXRlY3QgYSB0cnVlIGVmZmVjdC4gQXMgdGhlIHNhbXBsZSBzaXplIGFwcHJvYWNoZXMgODcsIHRoZSBwb3dlciByZWFjaGVzIGFwcHJveGltYXRlbHkgMC44MC4gVGhpcyBjb25maXJtcyB0aGF0IGxhcmdlciBzYW1wbGUgc2l6ZXMgaW1wcm92ZSB0aGUgYWJpbGl0eSB0byBkZXRlY3QgYSB0cnVlIHRyZWF0bWVudCBlZmZlY3QuDQoNCg==