Working Model for the Final Exam
Caution: Please follow
the suggested expressions and guided steps to complete the exam. Other
approaches such as transformation for trivialize the problems that will
not meet the exam objectives.
The Kumaraswamy distribution is a two-parameter
continuous probability distribution defined on the interval (0, 1). It
is often used as an alternative to the Beta distribution due to its
simple closed-form expressions for the cumulative distribution function
(CDF) and quantile function. It is commonly used in
Hydrology: Modeling rainfall, streamflow, or
other bounded natural phenomena
Economics: Income shares, proportions, or
bounded indices
Monte Carlo simulation: Efficient random variate
generation (via inverse transform)
Machine learning: Output layer for bounded
targets, prior distributions in Bayesian models
Reliability engineering: Modeling failure rates
of systems with bounded lifetimes
Let \(X\) be the Kumaraswamy random
variable with Cumulative Distribution Function (CDF)
\[
F(x; a, b) = 1 - (1 - x^a)^b
\]
where \(a > 0\) and \(b > 0\) unknown parameters and \(0 < x < 1\).
The following are two special case of the Kumaraswamy
distribution:
Uniform Distribution: When \(a = 1\) and \(b =
1\), the Kumaraswamy distribution becomes a uniform distribution
over \([0, 1]\) with CDF \(F(x) = x\).
Power Distribution: when \(b = 1\) and \(a
> 0\), the Kumaraswamy distribution becomes a power
distribution over \([0, 1]\) with CDF
\(F(x) = x^a\).
This final exam focuses on inferences of Kumaraswamy distribution and
related data analysis.
Part A: Methodological Derivations
Problem A1:
Show that the density function of the Kumaraswamy distribution is
\[
f(x; a, b) = ab \, x^{a-1} (1 - x^a)^{b-1}.
\]
Problem A2:
Let \(\{x_1, x_2, \cdots, x_n \}\)
be an i.i.d. random sample taken from a population that follows the aove
2-parameter Kumaraswamy distribution. Write out the loglikelihood
function of \(a\) and \(b\), denoted by \(\ell(a,b)\), based on the above random
sample and derive the gradient vector \([\ell_a^\prime(a,b), \ell_b^\prime(a,b)]\),
the first order partial derivative of the log-likelihood with respect to
parameters \(a\) and \(b\).
Problem A3:
Based on the gradients functions obtained in the above problem A2,
derive the observed Fisher Information matrix (i.e, the
negative Hessian Matrix).
Problem A4:
Consider power distribution \(F(x) = x^a,
(a >0 \quad \text{ and }\quad x \in (0,1))\), a special case
of the Kumaraswamy distribution with \(b =
1\), and a random sample from this distribution \(\{ x_1, x_2, \cdots, x_n\}\).
Derive the MLE and MME of \(a\) respectively. [Hint: To find the
MME, you need to compute the moment of the power distribution; that is,
\(E[X^k] = \int_0^1 x^k F'(x) dx\).
Note that both the MLE and the MME have closed-form
expressions.]
Problem A5:
Using the same setting as in Problem A4, find the
asymptotic (Wald) confidence interval for \(a\). [Hint: Compute the Fisher
information for \(a\), then take its
reciprocal to obtain the variance.]
Problem A6:
Using the same setting as in Problem A4, perform a
likelihood ratio test for the hypothesis \(H_0
:a=1\) (i.e., the power distribution reduces to a uniform
distribution). [Hint: Evaluate the log-likelihood function at the
maximum likelihood estimate \(\hat{a}\)
and at \(a=1\), then use these values
to construct the LRT test statistic.]
Part B: Numerical Analysis
All code must be well commented and adhere to best coding
practices
Working Dataset: A small reservoir supplies water to
a town. During the dry season (50 days), engineers record the fraction
of usable storage filled each morning. Values near 0 mean the reservoir
is nearly empty; values near 1 mean it’s full. The distribution tends to
be right‑skewed (mostly low levels due to drought) but with occasional
replenishment.
The following 50 data points (ordered for clarity) represent the
daily proportion of usable storage:
0.12, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.20, 0.21, 0.22,
0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.30, 0.31, 0.32,
0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.40, 0.41, 0.42,
0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.50, 0.51, 0.52,
0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.60, 0.61, 0.78
Problem B1:
Fit the Kumaraswamy distribution to the above data. Use the
derivations in Problem A2 to find the MLE of \(a\) and \(b\). Please copy the key formulas before
coding.
Problem B2:
Fit the power distribution to the above data using
the derived of \(a\) obtained in
Problem A4 to test the following hypothesis using
likelihood ratio procedure ar significance level \(\alpha = 0.05\):
\[
H_0: b = 1 \quad \text{ versus } \quad H_a: b \ne 1.
\]
State the statistical decision clearly. What is the practical
implication of the testing result?
Problem B3:
Use the procedure and code from Problem B1 to
estimate the MLEs of \(a\) and \(b\), and then complete the following
analyses:
(1). Obtain the bootstrap sampling distributions of \(\hat{a}\) and \(\hat{b}\) and plot each distribution using
Gaussian kernel density curves.
(2). Construct both the \(95\%\)
bootstrap confidence interval and the Wald
confidence interval for \(b\).
Do these intervals agree with the results obtained in Problem
B2? [Compute the standard error of \(\hat{b}\) using the observed Fisher
information matrix, i.e., the inverse of the negative Hessian obtained
from optim()]
(3). Based on the bootstrap sampling distributions from part (1) of
this problem, assess whether the validity of the Wald confidence
interval is supported.
Problem B4:
In the introduction to the working model for this exam, the
Kumaraswamy distribution reduces to the uniform distribution on (0,1).
In this problem, we perform a likelihood ratio test for
the following hypothesis to assess whether the data come from the
uniform distribution on (0,1):
\[
H_0: a = 1\quad \& \quad b = 1\quad \text{ versus } \quad H_a: a \ne
1 \quad \text{or} \quad b \ne 1 \quad \text{or}\quad (a \ne 1 \quad
\& \quad b \ne 1).
\]
Provide a practical interpretation of the above test result.
[Hint: \(H_a\) basically says that
there is no constraints for \(a\) and
\(b\). Please review the lecture note
for module 11 on the likelihood ratio test before coding.]
Note: Please download the
template and insert your work into it to complete the exam.
LS0tDQp0aXRsZTogIlNUQSA1MDYgRmluYWwgRXhhbWluYXRpb24iDQphdXRob3I6ICJTcHJpbmcgMjAyNiINCmRhdGU6ICIgRHVlOiBNYXkgNSwgMjAyNiAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vDQogICAgdG9jX2NvbGxhcHNlZDogeWVzDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgc21vb3RoX3Njcm9sbDogeWVzDQogICAgaGlnaGxpZ2h0OiBtb25vY2hyb21lDQogICAgdGhlbWU6IHNwYWNlbGFiDQogIHBkZl9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIGZpZ193aWR0aDogMw0KICAgIGZpZ19oZWlnaHQ6IDMNCiAgd29yZF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAga2VlcF9tZDogeWVzDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOw0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zaXplOiAxLjJlbTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGNvbG9yOiBuYXZ5Ow0KICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KfQ0KDQoNCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8NCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCg0KaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8NCiAgZm9udC1zaXplOiAyMnB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KfQ0KDQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE1cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoNC5kYXRlIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovDQouaGVhZGVyLXNlY3Rpb24tbnVtYmVyOjphZnRlciB7DQogIGNvbnRlbnQ6ICIuIjsNCg0KYm9keSB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0NCg0KLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0NCg0KcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0NCg0KfQ0KYGBgDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IA0KIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuDQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikNCiAgIGxpYnJhcnkoa25pdHIpDQp9DQppZiAoIXJlcXVpcmUoInBhbmRlciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJwYW5kZXIiKQ0KICAgbGlicmFyeShwYW5kZXIpDQp9DQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCiAgbGlicmFyeShnZ3Bsb3QyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCg0KaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKQ0KICBsaWJyYXJ5KHBsb3RseSkNCn0NCiMjIyMNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgIyBpbmNsdWRlIGNvZGUgY2h1bmsgaW4gdGhlIG91dHB1dCBmaWxlDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgICMgc29tZXRpbWVzLCB5b3UgY29kZSBtYXkgcHJvZHVjZSB3YXJuaW5nIG1lc3NhZ2VzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHlvdSBjYW4gY2hvb3NlIHRvIGluY2x1ZGUgdGhlIHdhcm5pbmcgbWVzc2FnZXMgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgb3V0cHV0IGZpbGUuIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgICAjIHlvdSBjYW4gYWxzbyBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlIHRoZSBvdXRwdXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUgb3V0cHV0IGZpbGUuDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQQ0KICAgICAgICAgICAgICAgICAgICAgICkgIA0KYGBgDQogDQogXA0KIA0KIyMgKipGaW5hbCBFeGFtIEd1aWRlbGluZXMqKiANCg0KKiAqKkNvdmVyYWdlKio6IFRoZSBtYWpvciBjb25jZXB0cyBhbmQgaW5mZXJlbmNlIHByb2NlZHVyZXPigJRzdWNoIGFzIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbnMsIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLCBhbmQgaHlwb3RoZXNpcyB0ZXN0aW5n4oCUYXJlIGNvdmVyZWQgYW5kIGltcGxlbWVudGVkIHVzaW5nIGJvdGggY2xhc3NpY2FsIHBhcmFtZXRyaWMgbGlrZWxpaG9vZC1iYXNlZCBtZXRob2RzIGFuZCBtb2Rlcm4gbm9uLXBhcmFtZXRyaWMgYXBwcm9hY2hlcywgaW5jbHVkaW5nIHRoZSBib290c3RyYXAgYW5kIGtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24uDQoNCiogKipQYXJ0IEEqKiByZXF1aXJlcyBkZXJpdmF0aW9uIG9mIHNlbGVjdGVkIGxpa2VsaWhvb2QtYmFzZWQgZnVuY3Rpb25zIGZvciBwZXJmb3JtaW5nIHZhcmlvdXMgdHlwZXMgb2YgaW5mZXJlbmNlLCB3aXRoIHN1ZmZpY2llbnQgZGV0YWlsIHRvIGVuYWJsZSB0cmFuc2xhdGlvbiBvZiB0aGVzZSBkZXJpdmF0aW9ucyBpbnRvIGNvZGUgZm9yIG51bWVyaWNhbCBhbmFseXNpcy4NCg0KKiBZb3VyIGNvZGUgZm9yIHRoZSBwcm9ibGVtcyBpbiAqKlBhcnQgQioqIG11c3QgYWxpZ24gd2l0aCB5b3VyIGRlcml2YXRpb25zIGluICoqUGFydCBBKiogYW5kIGJlIHdlbGwgY29tbWVudGVkIHdoZXJlIG5lY2Vzc2FyeS4NCg0KKiBJbiAqKlBhcnQgQioqLCBhbGwgbnVtZXJpY2FsIHJlc3VsdHMgbXVzdCBiZSBpbnRlcnByZXRlZCBmcm9tIGEgcHJhY3RpY2FsIHBlcnNwZWN0aXZlLg0KDQoNClwNCg0KIyMgKipQb2xpY2llcyBvZiBVc2luZyBBSSBUb29scyoqDQoNCiogKipQb2xpY3kgb24gQUkgVG9vbCBVc2UqKjogU3R1ZGVudHMgbXVzdCBhZGhlcmUgdG8gdGhlIEFJIHRvb2wgcG9saWN5IHNwZWNpZmllZCBpbiB0aGUgY291cnNlIHN5bGxhYnVzLiBUaGUgZGlyZWN0IGNvcHlpbmcgb2YgQUktZ2VuZXJhdGVkIGNvbnRlbnQgaXMgc3RyaWN0bHkgcHJvaGliaXRlZC4gQWxsIHN1Ym1pdHRlZCB3b3JrIG11c3QgcmVmbGVjdCB5b3VyIG93biB1bmRlcnN0YW5kaW5nOyB3aGVyZSBleHRlcm5hbCB0b29scyBhcmUgY29uc3VsdGVkLCBjb250ZW50IG11c3QgYmUgdGhvcm91Z2hseSByZXBocmFzZWQgYW5kIHN5bnRoZXNpemVkIGluIHlvdXIgb3duIHdvcmRzLg0KDQoqICoqQ29kZSBJbmNsdXNpb24gUmVxdWlyZW1lbnQqKjogQW55IGNvZGUgaW5jbHVkZWQgaW4geW91ciBlc3NheSBtdXN0IGJlIHByb3Blcmx5IGNvbW1lbnRlZCB0byBleHBsYWluIHRoZSBwdXJwb3NlIGFuZC9vciBleHBlY3RlZCBvdXRwdXQgb2Yga2V5IGNvZGUgbGluZXMuIFN1Ym1pdHRpbmcgQUktZ2VuZXJhdGVkIGNvZGUgd2l0aG91dCBtZWFuaW5nZnVsLCBzdHVkZW50LWFkZGVkIGNvbW1lbnRzIHdpbGwgbm90IGJlIGFjY2VwdGVkLg0KDQpcDQoNCiMjICoqV29ya2luZyBNb2RlbCBmb3IgdGhlIEZpbmFsIEV4YW0qKg0KDQo8Zm9udCBjb2xvciA9ICJvcmFuZ2UiPioqQ2F1dGlvbioqOiAqUGxlYXNlIGZvbGxvdyB0aGUgc3VnZ2VzdGVkIGV4cHJlc3Npb25zIGFuZCBndWlkZWQgc3RlcHMgdG8gY29tcGxldGUgdGhlIGV4YW0uIE90aGVyIGFwcHJvYWNoZXMgc3VjaCBhcyB0cmFuc2Zvcm1hdGlvbiBmb3IgdHJpdmlhbGl6ZSB0aGUgcHJvYmxlbXMgdGhhdCB3aWxsIG5vdCBtZWV0IHRoZSBleGFtIG9iamVjdGl2ZXMuKjwvZm9udD4NCg0KDQpUaGUgKipLdW1hcmFzd2FteSBkaXN0cmlidXRpb24qKiBpcyBhIHR3by1wYXJhbWV0ZXIgY29udGludW91cyBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24gZGVmaW5lZCBvbiB0aGUgaW50ZXJ2YWwgKDAsIDEpLiBJdCBpcyBvZnRlbiB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBCZXRhIGRpc3RyaWJ1dGlvbiBkdWUgdG8gaXRzIHNpbXBsZSBjbG9zZWQtZm9ybSBleHByZXNzaW9ucyBmb3IgdGhlIGN1bXVsYXRpdmUgZGlzdHJpYnV0aW9uIGZ1bmN0aW9uIChDREYpIGFuZCBxdWFudGlsZSBmdW5jdGlvbi4gSXQgaXMgY29tbW9ubHkgdXNlZCBpbiANCg0KKiAqKkh5ZHJvbG9neSoqOiBNb2RlbGluZyByYWluZmFsbCwgc3RyZWFtZmxvdywgb3Igb3RoZXIgYm91bmRlZCBuYXR1cmFsIHBoZW5vbWVuYQ0KDQoqICoqRWNvbm9taWNzKio6IEluY29tZSBzaGFyZXMsIHByb3BvcnRpb25zLCBvciBib3VuZGVkIGluZGljZXMNCg0KKiAqKk1vbnRlIENhcmxvIHNpbXVsYXRpb24qKjogRWZmaWNpZW50IHJhbmRvbSB2YXJpYXRlIGdlbmVyYXRpb24gKHZpYSBpbnZlcnNlIHRyYW5zZm9ybSkNCg0KKiAqKk1hY2hpbmUgbGVhcm5pbmcqKjogT3V0cHV0IGxheWVyIGZvciBib3VuZGVkIHRhcmdldHMsIHByaW9yIGRpc3RyaWJ1dGlvbnMgaW4gQmF5ZXNpYW4gbW9kZWxzDQoNCiogKipSZWxpYWJpbGl0eSBlbmdpbmVlcmluZyoqOiBNb2RlbGluZyBmYWlsdXJlIHJhdGVzIG9mIHN5c3RlbXMgd2l0aCBib3VuZGVkIGxpZmV0aW1lcw0KDQpcDQoNCkxldCAkWCQgYmUgdGhlIEt1bWFyYXN3YW15IHJhbmRvbSB2YXJpYWJsZSB3aXRoIEN1bXVsYXRpdmUgRGlzdHJpYnV0aW9uIEZ1bmN0aW9uIChDREYpICANCg0KJCQNCkYoeDsgYSwgYikgPSAxIC0gKDEgLSB4XmEpXmINCiQkDQoNCndoZXJlICRhID4gMCQgYW5kICRiID4gMCQgdW5rbm93biBwYXJhbWV0ZXJzIGFuZCAkMCA8IHggPCAxJC4gDQoNClRoZSBmb2xsb3dpbmcgYXJlIHR3byBzcGVjaWFsIGNhc2Ugb2YgdGhlIEt1bWFyYXN3YW15IGRpc3RyaWJ1dGlvbjoNCg0KMS4gKipVbmlmb3JtIERpc3RyaWJ1dGlvbioqOiBXaGVuICRhID0gMSQgYW5kICRiID0gMSQsIHRoZSBLdW1hcmFzd2FteSBkaXN0cmlidXRpb24gYmVjb21lcyBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG92ZXIgJFswLCAxXSQgd2l0aCBDREYgJEYoeCkgPSB4JC4NCg0KDQoyLiAqKlBvd2VyIERpc3RyaWJ1dGlvbioqOiB3aGVuICRiID0gMSQgYW5kICRhID4gMCQsIHRoZSBLdW1hcmFzd2FteSBkaXN0cmlidXRpb24gYmVjb21lcyBhIHBvd2VyIGRpc3RyaWJ1dGlvbiBvdmVyICRbMCwgMV0kIHdpdGggQ0RGICRGKHgpID0geF5hJC4gDQoNClRoaXMgZmluYWwgZXhhbSBmb2N1c2VzIG9uIGluZmVyZW5jZXMgb2YgS3VtYXJhc3dhbXkgZGlzdHJpYnV0aW9uIGFuZCByZWxhdGVkIGRhdGEgYW5hbHlzaXMuDQoNCg0KIyMgUGFydCBBOiBNZXRob2RvbG9naWNhbCBEZXJpdmF0aW9ucw0KDQpcDQoNCiMjIyAqKlByb2JsZW0gQTEqKjogDQpTaG93IHRoYXQgdGhlIGRlbnNpdHkgZnVuY3Rpb24gb2YgdGhlIEt1bWFyYXN3YW15IGRpc3RyaWJ1dGlvbiBpcw0KDQokJA0KZih4OyBhLCBiKSA9IGFiIFwsIHhee2EtMX0gKDEgLSB4XmEpXntiLTF9Lg0KJCQNCg0KXA0KDQojIyMgKipQcm9ibGVtIEEyKio6IA0KTGV0ICRce3hfMSwgeF8yLCBcY2RvdHMsIHhfbiBcfSQgYmUgYW4gaS5pLmQuIHJhbmRvbSBzYW1wbGUgdGFrZW4gZnJvbSBhIHBvcHVsYXRpb24gdGhhdCBmb2xsb3dzIHRoZSBhb3ZlIDItcGFyYW1ldGVyIEt1bWFyYXN3YW15IGRpc3RyaWJ1dGlvbi4gV3JpdGUgb3V0IHRoZSBsb2dsaWtlbGlob29kIGZ1bmN0aW9uIG9mICRhJCBhbmQgJGIkLCBkZW5vdGVkIGJ5ICRcZWxsKGEsYikkLCBiYXNlZCBvbiB0aGUgYWJvdmUgcmFuZG9tIHNhbXBsZSBhbmQgKipkZXJpdmUqKiB0aGUgZ3JhZGllbnQgdmVjdG9yICRbXGVsbF9hXlxwcmltZShhLGIpLCBcZWxsX2JeXHByaW1lKGEsYildJCwgdGhlIGZpcnN0IG9yZGVyIHBhcnRpYWwgZGVyaXZhdGl2ZSBvZiB0aGUgbG9nLWxpa2VsaWhvb2Qgd2l0aCByZXNwZWN0IHRvIHBhcmFtZXRlcnMgJGEkIGFuZCAkYiQuDQoNClwNCg0KIyMjICoqUHJvYmxlbSBBMyoqOiANCkJhc2VkIG9uIHRoZSBncmFkaWVudHMgZnVuY3Rpb25zIG9idGFpbmVkIGluIHRoZSBhYm92ZSBwcm9ibGVtIEEyLCAqKmRlcml2ZSoqIHRoZSBvYnNlcnZlZCBGaXNoZXIgSW5mb3JtYXRpb24gbWF0cml4IChpLmUsIHRoZSBuZWdhdGl2ZSBIZXNzaWFuIE1hdHJpeCkuDQoNClwNCg0KIyMjICoqUHJvYmxlbSBBNCoqOiANCg0KQ29uc2lkZXIgcG93ZXIgZGlzdHJpYnV0aW9uICRGKHgpID0geF5hLCAoYSA+MCBccXVhZCBcdGV4dHsgYW5kIH1ccXVhZCB4IFxpbiAoMCwxKSkkLCBhIHNwZWNpYWwgY2FzZSBvZiB0aGUgS3VtYXJhc3dhbXkgZGlzdHJpYnV0aW9uIHdpdGggJGIgPSAxJCwgYW5kIGEgcmFuZG9tIHNhbXBsZSBmcm9tIHRoaXMgZGlzdHJpYnV0aW9uICRceyB4XzEsIHhfMiwgXGNkb3RzLCB4X25cfSQuICoqRGVyaXZlKiogdGhlIE1MRSBhbmQgTU1FIG9mICRhJCByZXNwZWN0aXZlbHkuIFsqSGludDogVG8gZmluZCB0aGUgTU1FLCB5b3UgbmVlZCB0byBjb21wdXRlIHRoZSBtb21lbnQgb2YgdGhlIHBvd2VyIGRpc3RyaWJ1dGlvbjsgdGhhdCBpcywgJEVbWF5rXSA9IFxpbnRfMF4xIHheayBGJyh4KSBkeCQuIE5vdGUgdGhhdCBib3RoIHRoZSBNTEUgYW5kIHRoZSBNTUUgaGF2ZSBjbG9zZWQtZm9ybSBleHByZXNzaW9ucy4qXQ0KDQpcDQoNCiMjIyAqKlByb2JsZW0gQTUqKjoNCg0KVXNpbmcgdGhlIHNhbWUgc2V0dGluZyBhcyBpbiAqKlByb2JsZW0gQTQqKiwgZmluZCB0aGUgYXN5bXB0b3RpYyAoV2FsZCkgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgJGEkLiBbKkhpbnQ6IENvbXB1dGUgdGhlIEZpc2hlciBpbmZvcm1hdGlvbiBmb3IgJGEkLCB0aGVuIHRha2UgaXRzIHJlY2lwcm9jYWwgdG8gb2J0YWluIHRoZSB2YXJpYW5jZSouXQ0KDQpcDQoNCiMjIyAqKlByb2JsZW0gQTYqKjoNCg0KVXNpbmcgdGhlIHNhbWUgc2V0dGluZyBhcyBpbiAqKlByb2JsZW0gQTQqKiwgcGVyZm9ybSBhIGxpa2VsaWhvb2QgcmF0aW8gdGVzdCBmb3IgdGhlIGh5cG90aGVzaXMgJEhfMCA6YT0xJCAoaS5lLiwgdGhlIHBvd2VyIGRpc3RyaWJ1dGlvbiByZWR1Y2VzIHRvIGEgdW5pZm9ybSBkaXN0cmlidXRpb24pLiBbKkhpbnQ6IEV2YWx1YXRlIHRoZSBsb2ctbGlrZWxpaG9vZCBmdW5jdGlvbiBhdCB0aGUgbWF4aW11bSBsaWtlbGlob29kIGVzdGltYXRlICRcaGF0e2F9JCBhbmQgYXQgJGE9MSQsIHRoZW4gdXNlIHRoZXNlIHZhbHVlcyB0byBjb25zdHJ1Y3QgdGhlIExSVCB0ZXN0IHN0YXRpc3RpYy4qXQ0KDQpcDQoNCiMjIFBhcnQgQjogTnVtZXJpY2FsIEFuYWx5c2lzDQoNCioqQWxsIGNvZGUgbXVzdCBiZSB3ZWxsIGNvbW1lbnRlZCBhbmQgYWRoZXJlIHRvIGJlc3QgY29kaW5nIHByYWN0aWNlcyoqDQoNCioqV29ya2luZyBEYXRhc2V0Kio6IEEgc21hbGwgcmVzZXJ2b2lyIHN1cHBsaWVzIHdhdGVyIHRvIGEgdG93bi4gRHVyaW5nIHRoZSBkcnkgc2Vhc29uICg1MCBkYXlzKSwgZW5naW5lZXJzIHJlY29yZCB0aGUgZnJhY3Rpb24gb2YgdXNhYmxlIHN0b3JhZ2UgZmlsbGVkIGVhY2ggbW9ybmluZy4gVmFsdWVzIG5lYXIgMCBtZWFuIHRoZSByZXNlcnZvaXIgaXMgbmVhcmx5IGVtcHR5OyB2YWx1ZXMgbmVhciAxIG1lYW4gaXQncyBmdWxsLiBUaGUgZGlzdHJpYnV0aW9uIHRlbmRzIHRvIGJlIHJpZ2h04oCRc2tld2VkIChtb3N0bHkgbG93IGxldmVscyBkdWUgdG8gZHJvdWdodCkgYnV0IHdpdGggb2NjYXNpb25hbCByZXBsZW5pc2htZW50Lg0KDQpUaGUgZm9sbG93aW5nIDUwIGRhdGEgcG9pbnRzIChvcmRlcmVkIGZvciBjbGFyaXR5KSByZXByZXNlbnQgdGhlIGRhaWx5IHByb3BvcnRpb24gb2YgdXNhYmxlIHN0b3JhZ2U6DQoNCmBgYA0KMC4xMiwgMC4xNCwgMC4xNSwgMC4xNiwgMC4xNywgMC4xOCwgMC4xOSwgMC4yMCwgMC4yMSwgMC4yMiwNCjAuMjMsIDAuMjQsIDAuMjUsIDAuMjYsIDAuMjcsIDAuMjgsIDAuMjksIDAuMzAsIDAuMzEsIDAuMzIsDQowLjMzLCAwLjM0LCAwLjM1LCAwLjM2LCAwLjM3LCAwLjM4LCAwLjM5LCAwLjQwLCAwLjQxLCAwLjQyLA0KMC40MywgMC40NCwgMC40NSwgMC40NiwgMC40NywgMC40OCwgMC40OSwgMC41MCwgMC41MSwgMC41MiwNCjAuNTMsIDAuNTQsIDAuNTUsIDAuNTYsIDAuNTcsIDAuNTgsIDAuNTksIDAuNjAsIDAuNjEsIDAuNzgNCmBgYA0KDQpcDQoNCiMjIyAqKlByb2JsZW0gQjEqKjoNCg0KRml0IHRoZSBLdW1hcmFzd2FteSBkaXN0cmlidXRpb24gdG8gdGhlIGFib3ZlIGRhdGEuIFVzZSB0aGUgZGVyaXZhdGlvbnMgaW4gKipQcm9ibGVtIEEyKiogdG8gZmluZCB0aGUgTUxFIG9mICRhJCBhbmQgJGIkLiBQbGVhc2UgY29weSB0aGUga2V5IGZvcm11bGFzIGJlZm9yZSBjb2RpbmcuDQoNClwNCg0KIyMjICoqUHJvYmxlbSBCMioqOg0KDQpGaXQgdGhlICoqcG93ZXIgZGlzdHJpYnV0aW9uKiogdG8gdGhlIGFib3ZlIGRhdGEgdXNpbmcgdGhlIGRlcml2ZWQgIG9mICRhJCBvYnRhaW5lZCBpbiAqKlByb2JsZW0gQTQqKiB0byB0ZXN0IHRoZSBmb2xsb3dpbmcgaHlwb3RoZXNpcyB1c2luZyBsaWtlbGlob29kIHJhdGlvIHByb2NlZHVyZSBhciBzaWduaWZpY2FuY2UgbGV2ZWwgJFxhbHBoYSA9IDAuMDUkOg0KDQokJA0KSF8wOiBiID0gMSBccXVhZCBcdGV4dHsgdmVyc3VzIH0gXHF1YWQgSF9hOiBiIFxuZSAxLg0KJCQNCg0KU3RhdGUgdGhlIHN0YXRpc3RpY2FsIGRlY2lzaW9uIGNsZWFybHkuIFdoYXQgaXMgdGhlIHByYWN0aWNhbCBpbXBsaWNhdGlvbiBvZiB0aGUgdGVzdGluZyByZXN1bHQ/DQoNClwNCg0KIyMjICoqUHJvYmxlbSBCMyoqOg0KDQpVc2UgdGhlIHByb2NlZHVyZSBhbmQgY29kZSBmcm9tICoqUHJvYmxlbSBCMSoqIHRvIGVzdGltYXRlIHRoZSBNTEVzIG9mICRhJCBhbmQgJGIkLCBhbmQgdGhlbiBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIGFuYWx5c2VzOg0KDQooMSkuIE9idGFpbiB0aGUgYm9vdHN0cmFwIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbnMgb2YgJFxoYXR7YX0kIGFuZCAkXGhhdHtifSQgYW5kIHBsb3QgZWFjaCBkaXN0cmlidXRpb24gdXNpbmcgKipHYXVzc2lhbiBrZXJuZWwgZGVuc2l0eSBjdXJ2ZXMqKi4NCg0KKDIpLiAgQ29uc3RydWN0IGJvdGggdGhlICQ5NVwlJCAqKmJvb3RzdHJhcCBjb25maWRlbmNlIGludGVydmFsKiogYW5kIHRoZSAqKldhbGQgY29uZmlkZW5jZSBpbnRlcnZhbCoqIGZvciAkYiQuIERvIHRoZXNlIGludGVydmFscyBhZ3JlZSB3aXRoIHRoZSByZXN1bHRzIG9idGFpbmVkIGluICoqUHJvYmxlbSBCMioqPyBbKkNvbXB1dGUgdGhlIHN0YW5kYXJkIGVycm9yIG9mICRcaGF0e2J9JCB1c2luZyB0aGUgb2JzZXJ2ZWQgRmlzaGVyIGluZm9ybWF0aW9uIG1hdHJpeCwgaS5lLiwgdGhlIGludmVyc2Ugb2YgdGhlIG5lZ2F0aXZlIEhlc3NpYW4gb2J0YWluZWQgZnJvbSBvcHRpbSgpKl0NCg0KKDMpLiBCYXNlZCBvbiB0aGUgYm9vdHN0cmFwIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbnMgZnJvbSBwYXJ0ICgxKSBvZiB0aGlzIHByb2JsZW0sIGFzc2VzcyB3aGV0aGVyIHRoZSB2YWxpZGl0eSBvZiB0aGUgV2FsZCBjb25maWRlbmNlIGludGVydmFsIGlzIHN1cHBvcnRlZC4NCg0KDQpcDQoNCiMjIyAqKlByb2JsZW0gQjQqKjoNCg0KSW4gdGhlIGludHJvZHVjdGlvbiB0byB0aGUgd29ya2luZyBtb2RlbCBmb3IgdGhpcyBleGFtLCB0aGUgS3VtYXJhc3dhbXkgZGlzdHJpYnV0aW9uIHJlZHVjZXMgdG8gdGhlIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9uICgwLDEpLiBJbiB0aGlzIHByb2JsZW0sIHdlIHBlcmZvcm0gYSAqKmxpa2VsaWhvb2QgcmF0aW8gdGVzdCoqIGZvciB0aGUgZm9sbG93aW5nIGh5cG90aGVzaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhlIGRhdGEgY29tZSBmcm9tIHRoZSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvbiAoMCwxKToNCg0KJCQNCkhfMDogYSA9IDFccXVhZCBcJiBccXVhZCBiID0gMVxxdWFkIFx0ZXh0eyB2ZXJzdXMgfSBccXVhZCBIX2E6IGEgXG5lIDEgXHF1YWQgXHRleHR7b3J9IFxxdWFkIGIgXG5lIDEgXHF1YWQgXHRleHR7b3J9XHF1YWQgKGEgXG5lIDEgXHF1YWQgXCYgXHF1YWQgYiBcbmUgMSkuDQokJA0KDQpQcm92aWRlIGEgcHJhY3RpY2FsIGludGVycHJldGF0aW9uIG9mIHRoZSBhYm92ZSB0ZXN0IHJlc3VsdC4gWypIaW50OiAkSF9hJCBiYXNpY2FsbHkgc2F5cyB0aGF0IHRoZXJlIGlzIG5vIGNvbnN0cmFpbnRzIGZvciAkYSQgYW5kICRiJC4gUGxlYXNlIHJldmlldyB0aGUgbGVjdHVyZSBub3RlIGZvciBtb2R1bGUgMTEgIG9uIHRoZSBsaWtlbGlob29kIHJhdGlvIHRlc3QgYmVmb3JlIGNvZGluZy4qXQ0KDQpcDQoNCg0KDQoNCg0KDQo8Zm9udCBjb2xvciA9ICJyZWQiPioqTm90ZSoqOiBQbGVhc2UgZG93bmxvYWQgdGhlIHRlbXBsYXRlIGFuZCBpbnNlcnQgeW91ciB3b3JrIGludG8gaXQgdG8gY29tcGxldGUgdGhlIGV4YW0uIDwvZm9udD4NCg0KDQoNCg0K