One Parameter Lindley Distribution

The Lindley distribution is a continuous probability distribution proposed by D.V. Lindley in 1958. It represents a weighted mixture of exponential and gamma distributions, providing a flexible single-parameter model for lifetime data.

\[ f(x;\theta) = \frac{\theta^2}{1+\theta}(1+x)e^{-\theta x}, \quad x > 0, \quad \theta > 0 \]

where \(x\) = random variable (e.g., time, size, amount) and \(\theta\) = shape parameter controlling the distribution.

Given an independent random sample \(X_1, X_2, \dots, X_n\):

\[ L(\theta) = \prod_{i=1}^n f(x_i;\theta) = \prod_{i=1}^n \left[ \frac{\theta^2}{1+\theta} (1 + x_i) e^{-\theta x_i} \right]. \]

Let \(S = \sum_{i=1}^n x_i\), \(\bar{x} = S/n\), and \(C = \sum_{i=1}^n \ln(1 + x_i)\) (constant with respect to \(\theta\)):

\[ \ell(\theta) = \ln L(\theta) = n \ln\left( \frac{\theta^2}{1+\theta} \right) + C - \theta S. \]

After some algebra, we obtain the closed form of the MLE of \(\theta\) in the following

\[ \boxed{\hat{\theta} = \frac{1 - \bar{x} + \sqrt{\bar{x}^2 + 6\bar{x} + 1}}{2\bar{x}}} \]

As good exercise, we can derive the following Fisher information of \(\theta\):

\[ \boxed{I(\theta) = \frac{2}{\theta^2} - \frac{1}{(1+\theta)^2}} \]


This assignment focuses on constructing various confidence intervals of the shape parameter \(\theta\) in the Lindley distribution.


Question: Customer Service Times (minutes)

The customer service call duration data set originates from a major telecommunications provider in North America, operating in a highly competitive market where:

3.2, 5.8, 7.1, 4.5, 10.3, 6.2, 8.7, 5.1, 12.5, 6.9,
9.4, 5.7, 11.8, 4.9, 9.1, 6.5, 13.2, 7.8, 10.6, 6.1,
8.9, 5.4, 12.1, 7.3, 9.8, 5.9, 11.4, 6.8, 10.9, 7.5,
4.2, 8.3, 6.4, 14.1, 5.6, 9.7, 7.9, 11.1, 6.7, 10.2,
5.3, 8.6, 7.2, 12.9, 6.3, 9.3, 8.1, 13.7, 7.6, 10.8

Assuming the data follow a one-parameter Lindley distribution, construct a \(95\%\) confidence interval for the parameter \(\theta\) using the provided data and the specified methods. For each of the following questions, first describe your reasoning process for the analysis, then write code to perform the actual analysis. Finally, summarize the results to conclude the question.

  1. Construct a 95% asymptotic confidence interval based on the asymptotic sampling distribution of the maximum likelihood estimator (MLE) of \(\theta\).
x <- c(
  3.2, 5.8, 7.1, 4.5, 10.3, 6.2, 8.7, 5.1, 12.5, 6.9,
  9.4, 5.7, 11.8, 4.9, 9.1, 6.5, 13.2, 7.8, 10.6, 6.1,
  8.9, 5.4, 12.1, 7.3, 9.8, 5.9, 11.4, 6.8, 10.9, 7.5,
  4.2, 8.3, 6.4, 14.1, 5.6, 9.7, 7.9, 11.1, 6.7, 10.2,
  5.3, 8.6, 7.2, 12.9, 6.3, 9.3, 8.1, 13.7, 7.6, 10.8
)

n <- length(x)
xbar <- mean(x)
S <- sum(x)

# MLE of theta
theta_hat <- (1 - xbar + sqrt(xbar^2 + 6 * xbar + 1)) / (2 * xbar)

# Fisher Information function
I_theta <- function(theta){
  2 / theta^2 - 1 / (1 + theta)^2
}

# tandard error using plug-in principle
se_theta_hat <- sqrt(1 / (n * I_theta(theta_hat)))

# 95% asymptotic CI
z <- qnorm(0.975)
ci_asym <- c(theta_hat - z * se_theta_hat,
             theta_hat + z * se_theta_hat)
#Output
data.frame(
  theta_hat = theta_hat,
  se_theta_hat = se_theta_hat,
  lower_asym = ci_asym[1],
  upper_asym = ci_asym[2]
)
  theta_hat se_theta_hat lower_asym upper_asym
1 0.2190994   0.02208903  0.1758057  0.2623931

Answer: The asymptotic method suggests that a plausible range for \(\theta\) is about 0.176 to 0.262.

  1. Construct a 95% likelihood ratio confidence interval for \(\theta\).
# Log-likelihood without the constant C
loglik_theta <- function(theta, x){
  n <- length(x)
  S <- sum(x)
  
  if(theta <= 0) return(-Inf)
  
  2 * n * log(theta) - n * log(1 + theta) - theta * S
}

# Maximum log-likelihood
lmax <- loglik_theta(theta_hat, x)

# Cutoff for 95% LR CI
cutoff <- lmax - qchisq(0.95, df = 1) / 2

# Define equation to solve
lr_eq <- function(theta){
  loglik_theta(theta, x) - cutoff
}

# Solve for CI endpoints using uniroot()
theta_left <- uniroot(lr_eq, interval = c(0.001, theta_hat))$root
theta_right <- uniroot(lr_eq, interval = c(theta_hat, 1))$root

ci_lr <- c(theta_left, theta_right)

# Output
data.frame(
  theta_hat = theta_hat,
  lower_lr = ci_lr[1],
  upper_lr = ci_lr[2]
)
  theta_hat  lower_lr upper_lr
1 0.2190994 0.1786415 0.265321

Answer: The likelihood ratio method gives a plausible range for \(\theta\) of about 0.179 to 0.265..

  1. Assuming the two confidence intervals above are valid, compare them in terms of performance and make a recommendation. Justify your recommendation.
# Combine both confidence intervals for comparison
ci_compare <- data.frame(
  Method = c("Asymptotic CI", "Likelihood Ratio CI"),
  Lower = c(ci_asym[1], ci_lr[1]),
  Upper = c(ci_asym[2], ci_lr[2]),
  Width = c(diff(ci_asym), diff(ci_lr))
)

ci_compare
               Method     Lower     Upper      Width
1       Asymptotic CI 0.1758057 0.2623931 0.08658742
2 Likelihood Ratio CI 0.1786415 0.2653210 0.08667944

Answer:Both confidence intervals are very close to each other, which means the results are stable and reliable. The likelihood ratio interval is slightly shifted upward and is a little more asymmetric, which is expected because it is built directly from the likelihood. Since the sample size is fairly large (n = 50), the two methods give almost the same result. Thus,I would recommend Use the likelihood ratio confidence interval as the final answer, and use the asymptotic CI as a quick check.

LS0tDQp0aXRsZTogIkFzc2lnbm1lbnQgNjogQ29uc3RydWN0aW5nIExpa2VsaWhvb2QgUmF0aW8gQ29uZmlkZW5jZSBJbnRlcnZhbCINCmF1dGhvcjogIlhpYW95aW5nIE1hIg0KZGF0ZTogIiBEdWU6IDAzLzI0LzIwMjYgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIHRvY19jb2xsYXBzZWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHNtb290aF9zY3JvbGw6IHllcw0KICAgIGhpZ2hsaWdodDogbW9ub2Nocm9tZQ0KICAgIHRoZW1lOiBzcGFjZWxhYg0KICBwZGZfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgZmlnX3dpZHRoOiAzDQogICAgZmlnX2hlaWdodDogMw0KICB3b3JkX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBrZWVwX21kOiB5ZXMNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQ0KLS0tDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCiNUT0M6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICJUYWJsZSBvZiBDb250ZW50cyI7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LXNpemU6IDEuMmVtOw0KICBkaXNwbGF5OiBibG9jazsNCiAgY29sb3I6IG5hdnk7DQogIG1hcmdpbi1ib3R0b206IDEwcHg7DQp9DQoNCg0KZGl2I1RPQyBsaSB7ICAgICAvKiB0YWJsZSBvZiBjb250ZW50ICAqLw0KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47DQogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOw0KICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOw0KfQ0KDQpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLw0KICBmb250LXNpemU6IDIycHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7DQp9DQoNCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMTVweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7DQogIGNvbG9yOiBuYXZ5Ow0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoMSB7IC8qIEhlYWRlciAxIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAyMHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoMyB7IC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmg0IHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE0cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8NCi5oZWFkZXItc2VjdGlvbi1udW1iZXI6OmFmdGVyIHsNCiAgY29udGVudDogIi4iOw0KDQpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQ0KDQouaGlnaGxpZ2h0bWUgeyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgfQ0KDQpwIHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQ0KDQp9DQpgYGANCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQojIGNvZGUgY2h1bmsgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIFIgY29kZSwgd2FybmluZ3MsIGFuZCBvdXRwdXQgDQojIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBmaWxlcy4NCmlmICghcmVxdWlyZSgia25pdHIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KICAgbGlicmFyeShrbml0cikNCn0NCmlmICghcmVxdWlyZSgicGFuZGVyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInBhbmRlciIpDQogICBsaWJyYXJ5KHBhbmRlcikNCn0NCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7DQogIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQ0KICBsaWJyYXJ5KGdncGxvdDIpDQp9DQppZiAoIXJlcXVpcmUoInRpZHl2ZXJzZSIpKSB7DQogIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQogIGxpYnJhcnkodGlkeXZlcnNlKQ0KfQ0KDQppZiAoIXJlcXVpcmUoInBsb3RseSIpKSB7DQogIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpDQogIGxpYnJhcnkocGxvdGx5KQ0KfQ0KDQppZiAoIXJlcXVpcmUoIlZHQU0iKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJWR0FNIikNCiAgbGlicmFyeShWR0FNKQ0KfQ0KIyMjIyBWR0FNDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgICMgaW5jbHVkZSBjb2RlIGNodW5rIGluIHRoZSBvdXRwdXQgZmlsZQ0KICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgICAjIHNvbWV0aW1lcywgeW91IGNvZGUgbWF5IHByb2R1Y2Ugd2FybmluZyBtZXNzYWdlcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB5b3UgY2FuIGNob29zZSB0byBpbmNsdWRlIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIGluDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIG91dHB1dCBmaWxlLiANCiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gVFJVRSwgICAgIyB5b3UgY2FuIGFsc28gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgb3V0cHV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIG91dHB1dCBmaWxlLg0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gTkENCiAgICAgICAgICAgICAgICAgICAgICApICANCmBgYA0KIA0KDQoNCioqT25lIFBhcmFtZXRlciBMaW5kbGV5IERpc3RyaWJ1dGlvbioqDQoNClRoZSAqKkxpbmRsZXkgZGlzdHJpYnV0aW9uKiogaXMgYSAqKmNvbnRpbnVvdXMgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uKiogcHJvcG9zZWQgYnkgRC5WLiBMaW5kbGV5IGluIDE5NTguIEl0IHJlcHJlc2VudHMgYSAqKndlaWdodGVkIG1peHR1cmUqKiBvZiBleHBvbmVudGlhbCBhbmQgZ2FtbWEgZGlzdHJpYnV0aW9ucywgcHJvdmlkaW5nIGEgZmxleGlibGUgc2luZ2xlLXBhcmFtZXRlciBtb2RlbCBmb3IgbGlmZXRpbWUgZGF0YS4gDQoNCiQkDQpmKHg7XHRoZXRhKSA9IFxmcmFje1x0aGV0YV4yfXsxK1x0aGV0YX0oMSt4KWVeey1cdGhldGEgeH0sIFxxdWFkIHggPiAwLCBccXVhZCBcdGhldGEgPiAwDQokJA0KDQp3aGVyZSAkeCQgPSByYW5kb20gdmFyaWFibGUgKGUuZy4sIHRpbWUsIHNpemUsIGFtb3VudCkgYW5kICRcdGhldGEkID0gc2hhcGUgcGFyYW1ldGVyIGNvbnRyb2xsaW5nIHRoZSBkaXN0cmlidXRpb24uDQoNCkdpdmVuIGFuIGluZGVwZW5kZW50IHJhbmRvbSBzYW1wbGUgJFhfMSwgWF8yLCBcZG90cywgWF9uJDoNCg0KJCQNCkwoXHRoZXRhKSA9IFxwcm9kX3tpPTF9Xm4gZih4X2k7XHRoZXRhKSA9IFxwcm9kX3tpPTF9Xm4gXGxlZnRbIFxmcmFje1x0aGV0YV4yfXsxK1x0aGV0YX0gKDEgKyB4X2kpIGVeey1cdGhldGEgeF9pfSBccmlnaHRdLg0KJCQNCg0KTGV0ICRTID0gXHN1bV97aT0xfV5uIHhfaSQsICRcYmFye3h9ID0gUy9uJCwgIGFuZCAkQyA9IFxzdW1fe2k9MX1ebiBcbG4oMSArIHhfaSkkIChjb25zdGFudCB3aXRoIHJlc3BlY3QgdG8gJFx0aGV0YSQpOg0KDQokJA0KXGVsbChcdGhldGEpID0gXGxuIEwoXHRoZXRhKSA9IG4gXGxuXGxlZnQoIFxmcmFje1x0aGV0YV4yfXsxK1x0aGV0YX0gXHJpZ2h0KSArIEMgLSBcdGhldGEgUy4NCiQkDQoNCkFmdGVyIHNvbWUgYWxnZWJyYSwgd2Ugb2J0YWluIHRoZSBjbG9zZWQgZm9ybSBvZiB0aGUgTUxFIG9mICRcdGhldGEkIGluIHRoZSBmb2xsb3dpbmcNCg0KJCQNClxib3hlZHtcaGF0e1x0aGV0YX0gPSBcZnJhY3sxIC0gXGJhcnt4fSArIFxzcXJ0e1xiYXJ7eH1eMiArIDZcYmFye3h9ICsgMX19ezJcYmFye3h9fX0NCiQkDQoNCkFzIGdvb2QgZXhlcmNpc2UsIHdlIGNhbiBkZXJpdmUgdGhlIGZvbGxvd2luZyBGaXNoZXIgaW5mb3JtYXRpb24gb2YgJFx0aGV0YSQ6DQoNCiQkDQpcYm94ZWR7SShcdGhldGEpID0gXGZyYWN7Mn17XHRoZXRhXjJ9IC0gXGZyYWN7MX17KDErXHRoZXRhKV4yfX0NCiQkDQoNCg0KXA0KDQo8Zm9udCBjb2xvciA9ICJibHVlIj4qKlRoaXMgYXNzaWdubWVudCBmb2N1c2VzIG9uIGNvbnN0cnVjdGluZyB2YXJpb3VzIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9mIHRoZSBzaGFwZSBwYXJhbWV0ZXIgJFx0aGV0YSQgaW4gdGhlIExpbmRsZXkgZGlzdHJpYnV0aW9uLioqPC9mb250Pg0KDQoNClwNCg0KIyMgKipRdWVzdGlvbjogQ3VzdG9tZXIgU2VydmljZSBUaW1lcyAobWludXRlcykqKg0KDQpUaGUgY3VzdG9tZXIgc2VydmljZSBjYWxsIGR1cmF0aW9uIGRhdGEgc2V0IG9yaWdpbmF0ZXMgZnJvbSBhIG1ham9yIHRlbGVjb21tdW5pY2F0aW9ucyBwcm92aWRlciBpbiBOb3J0aCBBbWVyaWNhLCBvcGVyYXRpbmcgaW4gYSBoaWdobHkgY29tcGV0aXRpdmUgbWFya2V0IHdoZXJlOg0KDQpgYGANCjMuMiwgNS44LCA3LjEsIDQuNSwgMTAuMywgNi4yLCA4LjcsIDUuMSwgMTIuNSwgNi45LA0KOS40LCA1LjcsIDExLjgsIDQuOSwgOS4xLCA2LjUsIDEzLjIsIDcuOCwgMTAuNiwgNi4xLA0KOC45LCA1LjQsIDEyLjEsIDcuMywgOS44LCA1LjksIDExLjQsIDYuOCwgMTAuOSwgNy41LA0KNC4yLCA4LjMsIDYuNCwgMTQuMSwgNS42LCA5LjcsIDcuOSwgMTEuMSwgNi43LCAxMC4yLA0KNS4zLCA4LjYsIDcuMiwgMTIuOSwgNi4zLCA5LjMsIDguMSwgMTMuNywgNy42LCAxMC44DQpgYGANCg0KQXNzdW1pbmcgdGhlIGRhdGEgZm9sbG93IGEgb25lLXBhcmFtZXRlciBMaW5kbGV5IGRpc3RyaWJ1dGlvbiwgY29uc3RydWN0IGEgJDk1XCUkIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZm9yIHRoZSBwYXJhbWV0ZXIgJFx0aGV0YSQgdXNpbmcgdGhlIHByb3ZpZGVkIGRhdGEgYW5kIHRoZSBzcGVjaWZpZWQgbWV0aG9kcy4gRm9yIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMsIGZpcnN0IGRlc2NyaWJlIHlvdXIgcmVhc29uaW5nIHByb2Nlc3MgZm9yIHRoZSBhbmFseXNpcywgdGhlbiB3cml0ZSBjb2RlIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBhbmFseXNpcy4gRmluYWxseSwgc3VtbWFyaXplIHRoZSByZXN1bHRzIHRvIGNvbmNsdWRlIHRoZSBxdWVzdGlvbi4NCg0KYSkgQ29uc3RydWN0IGEgKio5NSUgYXN5bXB0b3RpYyBjb25maWRlbmNlIGludGVydmFsKiogYmFzZWQgb24gdGhlIGFzeW1wdG90aWMgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIG9mIHRoZSBtYXhpbXVtIGxpa2VsaWhvb2QgZXN0aW1hdG9yIChNTEUpIG9mICRcdGhldGEkLg0KYGBge3J9DQp4IDwtIGMoDQogIDMuMiwgNS44LCA3LjEsIDQuNSwgMTAuMywgNi4yLCA4LjcsIDUuMSwgMTIuNSwgNi45LA0KICA5LjQsIDUuNywgMTEuOCwgNC45LCA5LjEsIDYuNSwgMTMuMiwgNy44LCAxMC42LCA2LjEsDQogIDguOSwgNS40LCAxMi4xLCA3LjMsIDkuOCwgNS45LCAxMS40LCA2LjgsIDEwLjksIDcuNSwNCiAgNC4yLCA4LjMsIDYuNCwgMTQuMSwgNS42LCA5LjcsIDcuOSwgMTEuMSwgNi43LCAxMC4yLA0KICA1LjMsIDguNiwgNy4yLCAxMi45LCA2LjMsIDkuMywgOC4xLCAxMy43LCA3LjYsIDEwLjgNCikNCg0KbiA8LSBsZW5ndGgoeCkNCnhiYXIgPC0gbWVhbih4KQ0KUyA8LSBzdW0oeCkNCg0KIyBNTEUgb2YgdGhldGENCnRoZXRhX2hhdCA8LSAoMSAtIHhiYXIgKyBzcXJ0KHhiYXJeMiArIDYgKiB4YmFyICsgMSkpIC8gKDIgKiB4YmFyKQ0KDQojIEZpc2hlciBJbmZvcm1hdGlvbiBmdW5jdGlvbg0KSV90aGV0YSA8LSBmdW5jdGlvbih0aGV0YSl7DQogIDIgLyB0aGV0YV4yIC0gMSAvICgxICsgdGhldGEpXjINCn0NCg0KIyB0YW5kYXJkIGVycm9yIHVzaW5nIHBsdWctaW4gcHJpbmNpcGxlDQpzZV90aGV0YV9oYXQgPC0gc3FydCgxIC8gKG4gKiBJX3RoZXRhKHRoZXRhX2hhdCkpKQ0KDQojIDk1JSBhc3ltcHRvdGljIENJDQp6IDwtIHFub3JtKDAuOTc1KQ0KY2lfYXN5bSA8LSBjKHRoZXRhX2hhdCAtIHogKiBzZV90aGV0YV9oYXQsDQogICAgICAgICAgICAgdGhldGFfaGF0ICsgeiAqIHNlX3RoZXRhX2hhdCkNCiNPdXRwdXQNCmRhdGEuZnJhbWUoDQogIHRoZXRhX2hhdCA9IHRoZXRhX2hhdCwNCiAgc2VfdGhldGFfaGF0ID0gc2VfdGhldGFfaGF0LA0KICBsb3dlcl9hc3ltID0gY2lfYXN5bVsxXSwNCiAgdXBwZXJfYXN5bSA9IGNpX2FzeW1bMl0NCikNCmBgYA0KKipBbnN3ZXI6KiogVGhlIGFzeW1wdG90aWMgbWV0aG9kIHN1Z2dlc3RzIHRoYXQgYSBwbGF1c2libGUgcmFuZ2UgZm9yIA0KJFx0aGV0YSQgaXMgYWJvdXQgMC4xNzYgdG8gMC4yNjIuDQoNCmIpIENvbnN0cnVjdCBhICoqOTUlIGxpa2VsaWhvb2QgcmF0aW8gY29uZmlkZW5jZSBpbnRlcnZhbCoqIGZvciAkXHRoZXRhJC4NCmBgYHtyfQ0KIyBMb2ctbGlrZWxpaG9vZCB3aXRob3V0IHRoZSBjb25zdGFudCBDDQpsb2dsaWtfdGhldGEgPC0gZnVuY3Rpb24odGhldGEsIHgpew0KICBuIDwtIGxlbmd0aCh4KQ0KICBTIDwtIHN1bSh4KQ0KICANCiAgaWYodGhldGEgPD0gMCkgcmV0dXJuKC1JbmYpDQogIA0KICAyICogbiAqIGxvZyh0aGV0YSkgLSBuICogbG9nKDEgKyB0aGV0YSkgLSB0aGV0YSAqIFMNCn0NCg0KIyBNYXhpbXVtIGxvZy1saWtlbGlob29kDQpsbWF4IDwtIGxvZ2xpa190aGV0YSh0aGV0YV9oYXQsIHgpDQoNCiMgQ3V0b2ZmIGZvciA5NSUgTFIgQ0kNCmN1dG9mZiA8LSBsbWF4IC0gcWNoaXNxKDAuOTUsIGRmID0gMSkgLyAyDQoNCiMgRGVmaW5lIGVxdWF0aW9uIHRvIHNvbHZlDQpscl9lcSA8LSBmdW5jdGlvbih0aGV0YSl7DQogIGxvZ2xpa190aGV0YSh0aGV0YSwgeCkgLSBjdXRvZmYNCn0NCg0KIyBTb2x2ZSBmb3IgQ0kgZW5kcG9pbnRzIHVzaW5nIHVuaXJvb3QoKQ0KdGhldGFfbGVmdCA8LSB1bmlyb290KGxyX2VxLCBpbnRlcnZhbCA9IGMoMC4wMDEsIHRoZXRhX2hhdCkpJHJvb3QNCnRoZXRhX3JpZ2h0IDwtIHVuaXJvb3QobHJfZXEsIGludGVydmFsID0gYyh0aGV0YV9oYXQsIDEpKSRyb290DQoNCmNpX2xyIDwtIGModGhldGFfbGVmdCwgdGhldGFfcmlnaHQpDQoNCiMgT3V0cHV0DQpkYXRhLmZyYW1lKA0KICB0aGV0YV9oYXQgPSB0aGV0YV9oYXQsDQogIGxvd2VyX2xyID0gY2lfbHJbMV0sDQogIHVwcGVyX2xyID0gY2lfbHJbMl0NCikNCmBgYA0KKipBbnN3ZXI6KiogVGhlIGxpa2VsaWhvb2QgcmF0aW8gbWV0aG9kIGdpdmVzIGEgcGxhdXNpYmxlIHJhbmdlIGZvciANCiRcdGhldGEkIG9mIGFib3V0IDAuMTc5IHRvIDAuMjY1Li4NCg0KYykgQXNzdW1pbmcgdGhlIHR3byBjb25maWRlbmNlIGludGVydmFscyBhYm92ZSBhcmUgdmFsaWQsIGNvbXBhcmUgdGhlbSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgbWFrZSBhIHJlY29tbWVuZGF0aW9uLiBKdXN0aWZ5IHlvdXIgcmVjb21tZW5kYXRpb24uDQoNCmBgYHtyfQ0KDQojIENvbWJpbmUgYm90aCBjb25maWRlbmNlIGludGVydmFscyBmb3IgY29tcGFyaXNvbg0KY2lfY29tcGFyZSA8LSBkYXRhLmZyYW1lKA0KICBNZXRob2QgPSBjKCJBc3ltcHRvdGljIENJIiwgIkxpa2VsaWhvb2QgUmF0aW8gQ0kiKSwNCiAgTG93ZXIgPSBjKGNpX2FzeW1bMV0sIGNpX2xyWzFdKSwNCiAgVXBwZXIgPSBjKGNpX2FzeW1bMl0sIGNpX2xyWzJdKSwNCiAgV2lkdGggPSBjKGRpZmYoY2lfYXN5bSksIGRpZmYoY2lfbHIpKQ0KKQ0KDQpjaV9jb21wYXJlDQpgYGANCg0KKipBbnN3ZXI6KipCb3RoIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGFyZSB2ZXJ5IGNsb3NlIHRvIGVhY2ggb3RoZXIsIHdoaWNoIG1lYW5zIHRoZSByZXN1bHRzIGFyZSBzdGFibGUgYW5kIHJlbGlhYmxlLiBUaGUgbGlrZWxpaG9vZCByYXRpbyBpbnRlcnZhbCBpcyBzbGlnaHRseSBzaGlmdGVkIHVwd2FyZCBhbmQgaXMgYSBsaXR0bGUgbW9yZSBhc3ltbWV0cmljLCB3aGljaCBpcyBleHBlY3RlZCBiZWNhdXNlIGl0IGlzIGJ1aWx0IGRpcmVjdGx5IGZyb20gdGhlIGxpa2VsaWhvb2QuIFNpbmNlIHRoZSBzYW1wbGUgc2l6ZSBpcyBmYWlybHkgbGFyZ2UgKG4gPSA1MCksIHRoZSB0d28gbWV0aG9kcyBnaXZlIGFsbW9zdCB0aGUgc2FtZSByZXN1bHQuIFRodXMsSSB3b3VsZCByZWNvbW1lbmQgVXNlIHRoZSBsaWtlbGlob29kIHJhdGlvIGNvbmZpZGVuY2UgaW50ZXJ2YWwgYXMgdGhlIGZpbmFsIGFuc3dlciwgYW5kIHVzZSB0aGUgYXN5bXB0b3RpYyBDSSBhcyBhIHF1aWNrIGNoZWNrLg0KDQo=