Assignment Objectives

  • Enhance understanding the logic and procedure of hypothesis testing .

  • Implement the procedures for power and sample size calculation for basic hypothesis testing procedures using nuilt-in function and manual calculation.

Policies of Using AI Tools

Policy on AI Tool Use: Please adhere to the AI tool policy specified in the course syllabus. The direct copying of AI-generated content is strictly prohibited. All submitted work must reflect your own understanding; where external tools are consulted, content must be thoroughly rephrased and synthesized in your own words.

Code Inclusion Requirement: Any code included in your essay must be properly commented to explain the purpose and/or expected output of key code lines. Submitting AI-generated code without meaningful, student-added comments will not be accepted.

**Simple versus Composite Hypothesis*

Simple Hypothesis

  • Simple Hypothesis Test is a hypothesis that completely specifies the population distribution. Mathematically, simple hypothesis fixes all parameters to specific values. For example, The simple hypotheses are: \(H_0: \mu = 5\) (if \(\alpha\) is known), \(H_0: \mu = 100, \sigma^2 = 25\), and \(H_1: p = 0.7\) for a Bernoulli distribution.

  • Example Scenario Test if a coin is fair:

\[\begin{aligned} H_0&: p = 0.5 \quad \text{(completely specified)} \\ H_1&: p = 0.6 \quad \text{(also completely specified)} \end{aligned}\]

Both are simple hypotheses.

Composite Hypothesis

  • Composite Hypothesis is a hypothesis that does not completely specify the distribution. Mathematically, it allows a range of values for at least one parameter. For example, in one-sided: \(\mu >5\); in two-sided: \(\mu \le 5\).

  • Example Scenarios

\[\begin{aligned} &H_0: \mu = 5 && \text{(simple)} \\ &H_1: \mu > 5 && \text{(composite)} \end{aligned}\] \[\begin{aligned} &H_0: \mu \leq 5 && \text{(composite)} \\ &H_1: \mu > 5 && \text{(composite)} \end{aligned}\] \[\begin{aligned} &H_0: \text{data follows } N(\mu, 1), \mu = 0 && \text{(simple)} \\ &H_1: \text{data follows Poisson}(\lambda) && \text{(composite – different family)} \end{aligned}\]

This assignment focuses on performing performing a test of mean (\(\mu\)) a normal population and calculating the power and sample size based on various assumptions


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\).

# Given values
xbar <- 29
mu0  <- 25
sigma <- 15
n <- 5

# Standard error
se <- sigma / sqrt(n)

# Z-statistic
z <- (xbar - mu0) / se

# One-sided p-value
p_value <- 1 - pnorm(z)

# Output
z
[1] 0.5962848
p_value
[1] 0.2754925

The test compares the mean cholesterol reduction of CholestFix to the standard value of 25 using a one-sided z-test. The resulting p-value is relatively large (≈ 0.275) indicating that the observed sample mean of 29 is not sufficiently extreme given the variability and small sample size.

This analysis is valid because the population standard deviation is assumed known and the test statistic follows a normal distribution. However, the small sample size (n = 5) limits statistical power.

Conclusion: There is insufficient evidence at the 5% significance level to conclude that CholestFix produces a greater mean reduction than the standard drug.

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?

# Given values
sigma <- 15
n <- 50
delta <- 4   # true mean difference
alpha <- 0.05

# Standard error
se <- sigma / sqrt(n)

# Critical value
z_alpha <- qnorm(1 - alpha)

# Effect size in z-units
effect_z <- delta / se

# Power
power <- 1 - pnorm(z_alpha - effect_z)

# Output
power
[1] 0.5951312

The computed power is approximately 0.60 meaning there is about a 60% probability of correctly rejecting the null hypothesis if the true mean improvement is 4 units above the standard.

This calculation is valid under the assumptions of known population variance and normality. It reflects the test’s sensitivity given the specified effect size and sample size.

Conclusion: The study has only moderate power implying a relatively high chance (40%) of failing to detect a true improvement. A larger sample size would be needed for more reliable detection.

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.

# Given values
sigma <- 15
delta <- 4
alpha <- 0.05
power_target <- 0.80

# Z values
z_alpha <- qnorm(1 - alpha)
z_beta  <- qnorm(power_target)

# Sample size formula
n_required <- (( (z_alpha + z_beta) * sigma ) / delta)^2

# Round up
n_required <- ceiling(n_required)

# Output
n_required
[1] 87

The required sample size to achieve 80% power is 87. This ensures a high probability of detecting a true effect of size 4 at the 5% significance level.

This result follows from standard sample size formulas for z-tests under normality and known variance assumptions.

Conclusion: A larger sample size than initially used is necessary to achieve adequate statistical power.

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.

# Parameters
sigma <- 15
delta <- 4
alpha <- 0.05

# Sample size range
n_seq <- seq(10, 150, by = 1)

# Function to compute power
power_func <- function(n) {
  se <- sigma / sqrt(n)
  z_alpha <- qnorm(1 - alpha)
  effect_z <- delta / se
  1 - pnorm(z_alpha - effect_z)
}

# Compute power for each n
power_vals <- sapply(n_seq, power_func)

# Plot
plot(n_seq, power_vals, type = "l",
     xlab = "Sample Size (n)",
     ylab = "Power",
     main = "Power Curve")

# Add reference line at 80% power
abline(h = 0.8, lty = 2) 

The power curve shows that the statistical power increases as sample size increases. For small sample sizes, when power is low, true effects are likely to be missed but as sample size approaches 87, power reaches the desired 80% level.

This analysis is valid because it applies the same assumptions as earlier parts while systematically varying sample size.

Conclusion: Increasing sample size significantly improves the ability to detect meaningful effects even though gains become more gradual at larger sample sizes.

Note: For each of the questions above, write a short summary of what you observed, justify why your analysis is valid, and interpret the results.

LS0tDQp0aXRsZTogIkFzc2lnbm1lbnQgOTogSHlwb3RoZXNpcyBUZXN0aW5nIGFuZCBQb3dlciBhbmQgU2FtcGxlIHNpemUgRGV0ZXJtaW5hdGlvbiINCmF1dGhvcjogIktpZXJhbiBIZWZmZXJhbiAiDQpkYXRlOiAiIER1ZTogNC83LzI2ICINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICBoaWdobGlnaHQ6IG1vbm9jaHJvbWUNCiAgICB0aGVtZTogc3BhY2VsYWINCiAgd29yZF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAga2VlcF9tZDogeWVzDQogIHBkZl9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICBmaWdfd2lkdGg6IDMNCiAgICBmaWdfaGVpZ2h0OiAzDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOw0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zaXplOiAxLjJlbTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGNvbG9yOiBuYXZ5Ow0KICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KfQ0KDQoNCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8NCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCg0KaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8NCiAgZm9udC1zaXplOiAyMnB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KfQ0KDQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE1cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoNC5kYXRlIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovDQouaGVhZGVyLXNlY3Rpb24tbnVtYmVyOjphZnRlciB7DQogIGNvbnRlbnQ6ICIuIjsNCg0KYm9keSB7YmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsNCiAgICAgIGNvbG9yOiAjMDAwMDAwOw0KICAgICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgICAgZm9udC1zaXplOiAxcmVtOw0KICAgICAgbGluZS1oZWlnaHQ6IDEuNjsNCiAgICAgIH0NCg0KLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0NCg0KcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0NCg0KfQ0KYGBgDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IA0KIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuDQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikNCiAgIGxpYnJhcnkoa25pdHIpDQp9DQppZiAoIXJlcXVpcmUoInBhbmRlciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJwYW5kZXIiKQ0KICAgbGlicmFyeShwYW5kZXIpDQp9DQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCiAgbGlicmFyeShnZ3Bsb3QyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCg0KaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKQ0KICBsaWJyYXJ5KHBsb3RseSkNCn0NCg0KaWYgKCFyZXF1aXJlKCJWR0FNIikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygiVkdBTSIpDQogIGxpYnJhcnkoVkdBTSkNCn0NCiMjIyMgVkdBTQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCAgICAgICAjIGluY2x1ZGUgY29kZSBjaHVuayBpbiB0aGUgb3V0cHV0IGZpbGUNCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgIyBzb21ldGltZXMsIHlvdSBjb2RlIG1heSBwcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgeW91IGNhbiBjaG9vc2UgdG8gaW5jbHVkZSB0aGUgd2FybmluZyBtZXNzYWdlcyBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBvdXRwdXQgZmlsZS4gDQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFRSVUUsICAgICMgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluIHRoZSBvdXRwdXQgZmlsZS4NCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BDQogICAgICAgICAgICAgICAgICAgICAgKSAgDQpgYGANCiANCiBcDQogDQojIyAqKkFzc2lnbm1lbnQgT2JqZWN0aXZlcyoqIA0KDQo8cD4NCiogRW5oYW5jZSB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBhbmQgcHJvY2VkdXJlIG9mIGh5cG90aGVzaXMgdGVzdGluZyAuDQoNCiogSW1wbGVtZW50IHRoZSBwcm9jZWR1cmVzIGZvciBwb3dlciBhbmQgc2FtcGxlIHNpemUgY2FsY3VsYXRpb24gZm9yIGJhc2ljIGh5cG90aGVzaXMgdGVzdGluZyBwcm9jZWR1cmVzIHVzaW5nIG51aWx0LWluIGZ1bmN0aW9uIGFuZCBtYW51YWwgY2FsY3VsYXRpb24uDQo8L3A+DQoNCg0KIyMgKipQb2xpY2llcyBvZiBVc2luZyBBSSBUb29scyoqDQoNCjxwPg0KKipQb2xpY3kgb24gQUkgVG9vbCBVc2UqKjogUGxlYXNlIGFkaGVyZSB0byB0aGUgQUkgdG9vbCBwb2xpY3kgc3BlY2lmaWVkIGluIHRoZSBjb3Vyc2Ugc3lsbGFidXMuIFRoZSBkaXJlY3QgY29weWluZyBvZiBBSS1nZW5lcmF0ZWQgY29udGVudCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBBbGwgc3VibWl0dGVkIHdvcmsgbXVzdCByZWZsZWN0IHlvdXIgb3duIHVuZGVyc3RhbmRpbmc7IHdoZXJlIGV4dGVybmFsIHRvb2xzIGFyZSBjb25zdWx0ZWQsIGNvbnRlbnQgbXVzdCBiZSB0aG9yb3VnaGx5IHJlcGhyYXNlZCBhbmQgc3ludGhlc2l6ZWQgaW4geW91ciBvd24gd29yZHMuDQo8L3A+DQoNCjxwPg0KKipDb2RlIEluY2x1c2lvbiBSZXF1aXJlbWVudCoqOiBBbnkgY29kZSBpbmNsdWRlZCBpbiB5b3VyIGVzc2F5IG11c3QgYmUgcHJvcGVybHkgY29tbWVudGVkIHRvIGV4cGxhaW4gdGhlIHB1cnBvc2UgYW5kL29yIGV4cGVjdGVkIG91dHB1dCBvZiBrZXkgY29kZSBsaW5lcy4gU3VibWl0dGluZyBBSS1nZW5lcmF0ZWQgY29kZSB3aXRob3V0IG1lYW5pbmdmdWwsIHN0dWRlbnQtYWRkZWQgY29tbWVudHMgd2lsbCBub3QgYmUgYWNjZXB0ZWQuDQo8L3A+DQoNCg0KIyMgKipTaW1wbGUgdmVyc3VzIENvbXBvc2l0ZSBIeXBvdGhlc2lzKg0KDQoqKlNpbXBsZSBIeXBvdGhlc2lzKioNCg0KKiAqKlNpbXBsZSBIeXBvdGhlc2lzIFRlc3QqKiBpcyBhIGh5cG90aGVzaXMgdGhhdCBjb21wbGV0ZWx5IHNwZWNpZmllcyB0aGUgcG9wdWxhdGlvbiBkaXN0cmlidXRpb24uIE1hdGhlbWF0aWNhbGx5LCBzaW1wbGUgaHlwb3RoZXNpcyBmaXhlcyBhbGwgcGFyYW1ldGVycyB0byBzcGVjaWZpYyB2YWx1ZXMuIEZvciBleGFtcGxlLCBUaGUgc2ltcGxlIGh5cG90aGVzZXMgYXJlOiAkSF8wOiBcbXUgPSA1JCAoaWYgJFxhbHBoYSQgaXMga25vd24pLCAkSF8wOiBcbXUgPSAxMDAsIFxzaWdtYV4yID0gMjUkLCBhbmQgJEhfMTogcCA9IDAuNyQgZm9yIGEgQmVybm91bGxpIGRpc3RyaWJ1dGlvbi4NCg0KKiAqKkV4YW1wbGUgU2NlbmFyaW8qKiAgVGVzdCBpZiBhIGNvaW4gaXMgZmFpcjoNCg0KXGJlZ2lue2FsaWduZWR9DQpIXzAmOiBwID0gMC41IFxxdWFkIFx0ZXh0eyhjb21wbGV0ZWx5IHNwZWNpZmllZCl9IFxcDQpIXzEmOiBwID0gMC42IFxxdWFkIFx0ZXh0eyhhbHNvIGNvbXBsZXRlbHkgc3BlY2lmaWVkKX0NClxlbmR7YWxpZ25lZH0NCg0KQm90aCBhcmUgKipzaW1wbGUqKiBoeXBvdGhlc2VzLg0KDQoqKkNvbXBvc2l0ZSBIeXBvdGhlc2lzKioNCg0KKiAqKkNvbXBvc2l0ZSBIeXBvdGhlc2lzKiogaXMgYSBoeXBvdGhlc2lzIHRoYXQgZG9lcyBub3QgY29tcGxldGVseSBzcGVjaWZ5IHRoZSBkaXN0cmlidXRpb24uIE1hdGhlbWF0aWNhbGx5LCBpdCBhbGxvd3MgYSByYW5nZSBvZiB2YWx1ZXMgZm9yIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuIEZvciBleGFtcGxlLCBpbiBvbmUtc2lkZWQ6ICRcbXUgPjUkOyBpbiB0d28tc2lkZWQ6ICRcbXUgXGxlIDUkLg0KDQoqICoqRXhhbXBsZSBTY2VuYXJpb3MqKiANCg0KDQpcYmVnaW57YWxpZ25lZH0NCiZIXzA6IFxtdSA9IDUgJiYgXHRleHR7KHNpbXBsZSl9IFxcDQomSF8xOiBcbXUgPiA1ICYmIFx0ZXh0eyhjb21wb3NpdGUpfQ0KXGVuZHthbGlnbmVkfQ0KDQoNCg0KXGJlZ2lue2FsaWduZWR9DQomSF8wOiBcbXUgXGxlcSA1ICYmIFx0ZXh0eyhjb21wb3NpdGUpfSBcXA0KJkhfMTogXG11ID4gNSAmJiBcdGV4dHsoY29tcG9zaXRlKX0NClxlbmR7YWxpZ25lZH0NCg0KDQpcYmVnaW57YWxpZ25lZH0NCiZIXzA6IFx0ZXh0e2RhdGEgZm9sbG93cyB9IE4oXG11LCAxKSwgXG11ID0gMCAmJiBcdGV4dHsoc2ltcGxlKX0gXFwNCiZIXzE6IFx0ZXh0e2RhdGEgZm9sbG93cyBQb2lzc29ufShcbGFtYmRhKSAmJiBcdGV4dHsoY29tcG9zaXRlIOKAkyBkaWZmZXJlbnQgZmFtaWx5KX0NClxlbmR7YWxpZ25lZH0NCg0KDQoNCjxwPjxmb250IGNvbG9yID0gImRhcmtyZWQiPioqVGhpcyBhc3NpZ25tZW50IGZvY3VzZXMgb24gcGVyZm9ybWluZyBwZXJmb3JtaW5nIGEgdGVzdCBvZiBtZWFuICgkXG11JCkgYSBub3JtYWwgcG9wdWxhdGlvbiBhbmQgY2FsY3VsYXRpbmcgdGhlIHBvd2VyIGFuZCBzYW1wbGUgc2l6ZSBiYXNlZCBvbiB2YXJpb3VzIGFzc3VtcHRpb25zKio8L2ZvbnQ+PC9wPg0KDQoNClwNCg0KIyMgKipRdWVzdGlvbjogTmV3IENob2xlc3Rlcm9sIE1lZGljYXRpb24qKg0KDQo8cD4NCkEgcGhhcm1hY2V1dGljYWwgY29tcGFueSBkZXZlbG9wcyAqKiJDaG9sZXN0Rml4IioqIHRvIHJlZHVjZSBMb3ctRGVuc2l0eSBMaXBvcHJvdGVpbiAoTERMLCAqZmF0IGNhcnJpZXIgdGhhdCdzIGxvdyBpbiBkZW5zaXR5KikgY2hvbGVzdGVyb2wuIFRoZSAqKmN1cnJlbnQgc3RhbmRhcmQgZHJ1ZyoqIGxvd2VycyBMREwgYnkgYW4gYXZlcmFnZSBvZiAyNSBtZy9kTCB3aXRoIGEgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIDE1IG1nL2RMLiBBIGNsaW5pY2FsIHRyaWFsIHdpdGggNSBwYXJ0aWNpcGFudHMgd2VyZSByZWNydWl0ZWQgaW4gdGhlIHN0dWR5IGZvciB0aHJlZSBtb250aHMuIEF0IHRoZSBlbmQgb2YgdGhlIHN0dWR5LCB0aGUgbWVhbiByZWR1Y3Rpb24gaXMgMjkgbWcvZEwuIEFzc3VtZSB0aGF0IHRoZSB2YXJpYW5jZSBvZiBMREwgcmVkdWN0aW9uIG9mIG5ldyBkcnVnIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIHN0YW5kYXJkIGRydWdzLg0KDQpCYXNlZCBvbiB0aGUgcmVzdWx0cyBpbiB0aGUgY2xpbmljYWwgdHJpYWwsIHJlc2VhcmNoZXJzIGluIHRoZSBjb21wYW55IGJlbGlldmUgKipDaG9sZXN0Rml4KiogaXMgbW9yZSBlZmZlY3RpdmUuDQo8L3A+DQoNCg0KPHA+DQphKS4gUGVyZm9ybSBhIGZvcm1hbCBoeXBvdGhlc2lzIHRlc3Qgb2YgdGhlIHJlc2VhcmNoZXJz4oCZIGJlbGllZiByZWdhcmRpbmcgTERMIHJlZHVjdGlvbiwgdXNpbmcgYSBzaWduaWZpY2FuY2UgbGV2ZWwgb2YgJFxhbHBoYSA9IDAuMDUkLg0KYGBge3J9DQojIEdpdmVuIHZhbHVlcw0KeGJhciA8LSAyOQ0KbXUwICA8LSAyNQ0Kc2lnbWEgPC0gMTUNCm4gPC0gNQ0KDQojIFN0YW5kYXJkIGVycm9yDQpzZSA8LSBzaWdtYSAvIHNxcnQobikNCg0KIyBaLXN0YXRpc3RpYw0KeiA8LSAoeGJhciAtIG11MCkgLyBzZQ0KDQojIE9uZS1zaWRlZCBwLXZhbHVlDQpwX3ZhbHVlIDwtIDEgLSBwbm9ybSh6KQ0KDQojIE91dHB1dA0Keg0KcF92YWx1ZQ0KYGBgDQoqVGhlIHRlc3QgY29tcGFyZXMgdGhlIG1lYW4gY2hvbGVzdGVyb2wgcmVkdWN0aW9uIG9mIENob2xlc3RGaXggdG8gdGhlIHN0YW5kYXJkIHZhbHVlIG9mIDI1IHVzaW5nIGEgb25lLXNpZGVkIHotdGVzdC4gVGhlIHJlc3VsdGluZyBwLXZhbHVlIGlzIHJlbGF0aXZlbHkgbGFyZ2UgKOKJiCAwLjI3NSkgaW5kaWNhdGluZyB0aGF0IHRoZSBvYnNlcnZlZCBzYW1wbGUgbWVhbiBvZiAyOSBpcyBub3Qgc3VmZmljaWVudGx5IGV4dHJlbWUgZ2l2ZW4gdGhlIHZhcmlhYmlsaXR5IGFuZCBzbWFsbCBzYW1wbGUgc2l6ZS4qDQoNCipUaGlzIGFuYWx5c2lzIGlzIHZhbGlkIGJlY2F1c2UgdGhlIHBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uIGlzIGFzc3VtZWQga25vd24gYW5kIHRoZSB0ZXN0IHN0YXRpc3RpYyBmb2xsb3dzIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gSG93ZXZlciwgdGhlIHNtYWxsIHNhbXBsZSBzaXplIChuID0gNSkgbGltaXRzIHN0YXRpc3RpY2FsIHBvd2VyLioNCg0KKipDb25jbHVzaW9uOiBUaGVyZSBpcyBpbnN1ZmZpY2llbnQgZXZpZGVuY2UgYXQgdGhlIDUlIHNpZ25pZmljYW5jZSBsZXZlbCB0byBjb25jbHVkZSB0aGF0IENob2xlc3RGaXggcHJvZHVjZXMgYSBncmVhdGVyIG1lYW4gcmVkdWN0aW9uIHRoYW4gdGhlIHN0YW5kYXJkIGRydWcuKiogDQoNCmIpLiBHaXZlbiAkbiA9IDUwLCBcc2lnbWEgPSAxNSwgXGFscGhhID0gMC4wNSQsIGFuZCBhbiBlZmZlY3Qgc2l6ZSB3ZSB3aXNoIHRvIGRldGVjdCAkXGRlbHRhID0gNCQgbWcvZEwgKGNvcnJlc3BvbmRpbmcgdG8gYSByZWR1Y3Rpb24gZnJvbSAyOSBtZy9kTCB0byAyNSBtZy9kTCkuICBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHdlJ2QgZGV0ZWN0IGEgdHJ1ZSBpbXByb3ZlbWVudD8NCmBgYHtyfQ0KIyBHaXZlbiB2YWx1ZXMNCnNpZ21hIDwtIDE1DQpuIDwtIDUwDQpkZWx0YSA8LSA0ICAgIyB0cnVlIG1lYW4gZGlmZmVyZW5jZQ0KYWxwaGEgPC0gMC4wNQ0KDQojIFN0YW5kYXJkIGVycm9yDQpzZSA8LSBzaWdtYSAvIHNxcnQobikNCg0KIyBDcml0aWNhbCB2YWx1ZQ0Kel9hbHBoYSA8LSBxbm9ybSgxIC0gYWxwaGEpDQoNCiMgRWZmZWN0IHNpemUgaW4gei11bml0cw0KZWZmZWN0X3ogPC0gZGVsdGEgLyBzZQ0KDQojIFBvd2VyDQpwb3dlciA8LSAxIC0gcG5vcm0oel9hbHBoYSAtIGVmZmVjdF96KQ0KDQojIE91dHB1dA0KcG93ZXINCmBgYA0KKlRoZSBjb21wdXRlZCBwb3dlciBpcyBhcHByb3hpbWF0ZWx5IDAuNjAgbWVhbmluZyB0aGVyZSBpcyBhYm91dCBhIDYwJSBwcm9iYWJpbGl0eSBvZiBjb3JyZWN0bHkgcmVqZWN0aW5nIHRoZSBudWxsIGh5cG90aGVzaXMgaWYgdGhlIHRydWUgbWVhbiBpbXByb3ZlbWVudCBpcyA0IHVuaXRzIGFib3ZlIHRoZSBzdGFuZGFyZC4qDQoNCipUaGlzIGNhbGN1bGF0aW9uIGlzIHZhbGlkIHVuZGVyIHRoZSBhc3N1bXB0aW9ucyBvZiBrbm93biBwb3B1bGF0aW9uIHZhcmlhbmNlIGFuZCBub3JtYWxpdHkuIEl0IHJlZmxlY3RzIHRoZSB0ZXN04oCZcyBzZW5zaXRpdml0eSBnaXZlbiB0aGUgc3BlY2lmaWVkIGVmZmVjdCBzaXplIGFuZCBzYW1wbGUgc2l6ZS4qDQoNCioqQ29uY2x1c2lvbjogVGhlIHN0dWR5IGhhcyBvbmx5IG1vZGVyYXRlIHBvd2VyIGltcGx5aW5nIGEgcmVsYXRpdmVseSBoaWdoIGNoYW5jZSAoNDAlKSBvZiBmYWlsaW5nIHRvIGRldGVjdCBhIHRydWUgaW1wcm92ZW1lbnQuIEEgbGFyZ2VyIHNhbXBsZSBzaXplIHdvdWxkIGJlIG5lZWRlZCBmb3IgbW9yZSByZWxpYWJsZSBkZXRlY3Rpb24uKioNCg0KYykuIERldGVybWluZSB0aGUgbWluaW11bSBzYW1wbGUgc2l6ZSByZXF1aXJlZCB0byBkZXRlY3QgYW4gZWZmZWN0IHNpemUgb2YgNCBtZy9kTCB3aXRoIGEgcG93ZXIgb2YgJDEgLSBcYmV0YSA9IDAuOCQgIGFuZCBhIHNpZ25pZmljYW5jZSBsZXZlbCBvZiAkXGFscGhhID0gMC4wNSQuIEFzc3VtZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIExETCByZWR1Y3Rpb24gaXMgMTUgbWcvZEwuDQpgYGB7cn0NCiMgR2l2ZW4gdmFsdWVzDQpzaWdtYSA8LSAxNQ0KZGVsdGEgPC0gNA0KYWxwaGEgPC0gMC4wNQ0KcG93ZXJfdGFyZ2V0IDwtIDAuODANCg0KIyBaIHZhbHVlcw0Kel9hbHBoYSA8LSBxbm9ybSgxIC0gYWxwaGEpDQp6X2JldGEgIDwtIHFub3JtKHBvd2VyX3RhcmdldCkNCg0KIyBTYW1wbGUgc2l6ZSBmb3JtdWxhDQpuX3JlcXVpcmVkIDwtICgoICh6X2FscGhhICsgel9iZXRhKSAqIHNpZ21hICkgLyBkZWx0YSleMg0KDQojIFJvdW5kIHVwDQpuX3JlcXVpcmVkIDwtIGNlaWxpbmcobl9yZXF1aXJlZCkNCg0KIyBPdXRwdXQNCm5fcmVxdWlyZWQNCmBgYA0KKlRoZSByZXF1aXJlZCBzYW1wbGUgc2l6ZSB0byBhY2hpZXZlIDgwJSBwb3dlciBpcyA4Ny4gVGhpcyBlbnN1cmVzIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBkZXRlY3RpbmcgYSB0cnVlIGVmZmVjdCBvZiBzaXplIDQgYXQgdGhlIDUlIHNpZ25pZmljYW5jZSBsZXZlbC4qDQoNCipUaGlzIHJlc3VsdCBmb2xsb3dzIGZyb20gc3RhbmRhcmQgc2FtcGxlIHNpemUgZm9ybXVsYXMgZm9yIHotdGVzdHMgdW5kZXIgbm9ybWFsaXR5IGFuZCBrbm93biB2YXJpYW5jZSBhc3N1bXB0aW9ucy4qDQoNCioqQ29uY2x1c2lvbjogQSBsYXJnZXIgc2FtcGxlIHNpemUgdGhhbiBpbml0aWFsbHkgdXNlZCBpcyBuZWNlc3NhcnkgdG8gYWNoaWV2ZSBhZGVxdWF0ZSBzdGF0aXN0aWNhbCBwb3dlci4qKg0KDQpkKS4gKipQb3dlciBjdXJ2ZSoqOiBUbyBhc3Nlc3MgdGhlIGltcGFjdCBvZiBzYW1wbGUgc2l6ZSBvbiBwb3dlciwgd2UgY2FuIGNyZWF0ZSBhIHBvd2VyIGZ1bmN0aW9uIGluIHRlcm1zIG9mIHRoZSBzYW1wbGUgc2l6ZSAkbiQgYW5kIHVzZSB0aGUgcmVtYWluaW5nIGluZm9ybWF0aW9uIGZyb20gcGFydCAoYikuIFBsb3QgdGhlIHBvd2VyIGN1cnZlIGJ5IHNlbGVjdGluZyBhIHNlcXVlbmNlIG9mIHNhbXBsZSBzaXplcy4NCjwvcD4NCmBgYHtyfQ0KIyBQYXJhbWV0ZXJzDQpzaWdtYSA8LSAxNQ0KZGVsdGEgPC0gNA0KYWxwaGEgPC0gMC4wNQ0KDQojIFNhbXBsZSBzaXplIHJhbmdlDQpuX3NlcSA8LSBzZXEoMTAsIDE1MCwgYnkgPSAxKQ0KDQojIEZ1bmN0aW9uIHRvIGNvbXB1dGUgcG93ZXINCnBvd2VyX2Z1bmMgPC0gZnVuY3Rpb24obikgew0KICBzZSA8LSBzaWdtYSAvIHNxcnQobikNCiAgel9hbHBoYSA8LSBxbm9ybSgxIC0gYWxwaGEpDQogIGVmZmVjdF96IDwtIGRlbHRhIC8gc2UNCiAgMSAtIHBub3JtKHpfYWxwaGEgLSBlZmZlY3RfeikNCn0NCg0KIyBDb21wdXRlIHBvd2VyIGZvciBlYWNoIG4NCnBvd2VyX3ZhbHMgPC0gc2FwcGx5KG5fc2VxLCBwb3dlcl9mdW5jKQ0KDQojIFBsb3QNCnBsb3Qobl9zZXEsIHBvd2VyX3ZhbHMsIHR5cGUgPSAibCIsDQogICAgIHhsYWIgPSAiU2FtcGxlIFNpemUgKG4pIiwNCiAgICAgeWxhYiA9ICJQb3dlciIsDQogICAgIG1haW4gPSAiUG93ZXIgQ3VydmUiKQ0KDQojIEFkZCByZWZlcmVuY2UgbGluZSBhdCA4MCUgcG93ZXINCmFibGluZShoID0gMC44LCBsdHkgPSAyKSANCg0KYGBgDQoNCipUaGUgcG93ZXIgY3VydmUgc2hvd3MgdGhhdCB0aGUgc3RhdGlzdGljYWwgcG93ZXIgaW5jcmVhc2VzIGFzIHNhbXBsZSBzaXplIGluY3JlYXNlcy4gRm9yIHNtYWxsIHNhbXBsZSBzaXplcywgd2hlbiBwb3dlciBpcyBsb3csIHRydWUgZWZmZWN0cyBhcmUgbGlrZWx5IHRvIGJlIG1pc3NlZCBidXQgYXMgc2FtcGxlIHNpemUgYXBwcm9hY2hlcyA4NywgcG93ZXIgcmVhY2hlcyB0aGUgZGVzaXJlZCA4MCUgbGV2ZWwuKg0KDQoqVGhpcyBhbmFseXNpcyBpcyB2YWxpZCBiZWNhdXNlIGl0IGFwcGxpZXMgdGhlIHNhbWUgYXNzdW1wdGlvbnMgYXMgZWFybGllciBwYXJ0cyB3aGlsZSBzeXN0ZW1hdGljYWxseSB2YXJ5aW5nIHNhbXBsZSBzaXplLioNCg0KKipDb25jbHVzaW9uOiBJbmNyZWFzaW5nIHNhbXBsZSBzaXplIHNpZ25pZmljYW50bHkgaW1wcm92ZXMgdGhlIGFiaWxpdHkgdG8gZGV0ZWN0IG1lYW5pbmdmdWwgZWZmZWN0cyBldmVuIHRob3VnaCBnYWlucyBiZWNvbWUgbW9yZSBncmFkdWFsIGF0IGxhcmdlciBzYW1wbGUgc2l6ZXMuKioNCg0KDQo8Zm9udCBjb2xvciA9ICJyZWQiPioqTm90ZSoqOiBGb3IgZWFjaCBvZiB0aGUgcXVlc3Rpb25zIGFib3ZlLCB3cml0ZSBhIHNob3J0IHN1bW1hcnkgb2Ygd2hhdCB5b3Ugb2JzZXJ2ZWQsIGp1c3RpZnkgd2h5IHlvdXIgYW5hbHlzaXMgaXMgdmFsaWQsIGFuZCBpbnRlcnByZXQgdGhlIHJlc3VsdHMuPC9mb250Pg0KDQo=