In this handout, I use ChatGPT 4.0 and the KeyMate.AI Search plugin to synthesize the information from the textbook, give examples, and create R code. All prompts are exact, but some of the output may be modified for correctness.

Hanck, Arnold, Gerber, and Schmelzer (2023). Introduction to Econometrics with R. https://www.econometrics-with-r.org/index.html. This book is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Prompt

Synthesize the information in this website. Include all relevant formulas and definitions. https://www.econometrics-with-r.org/2.1-random-variables-and-probability-distributions.html

Definitions:

  1. Random Variable (RV): A function that assigns a real number to each outcome in a sample space.
  2. Probability Distribution: Describes how probabilities are distributed over the values of the random variable.
  3. Discrete Random Variable: Takes on a countable number of distinct values.
  4. Continuous Random Variable: Takes on an uncountably infinite number of values.
  5. Probability Mass Function (PMF): Gives the probability that a discrete random variable is equal to some value.
  6. Probability Density Function (PDF): A function used to specify the probability of the random variable falling within a particular range of values.
  7. Cumulative Distribution Function (CDF): Gives the probability that the random variable is less than or equal to a certain value.

Formulas:

  1. Expected Value (Mean) of a Discrete Random Variable: \[ E(X) = \sum_{i} x_i \times P(X = x_i) \]

  2. Variance of a Discrete Random Variable: \[ Var(X) = E(X^2) - [E(X)]^2 \]

  3. Expected Value (Mean) of a Continuous Random Variable: \[ E(X) = \int_{-\infty}^{\infty} x \times f(x) \, dx \]

  4. Variance of a Continuous Random Variable: \[ Var(X) = \int_{-\infty}^{\infty} x^2 \times f(x) \, dx - [E(X)]^2 \]

Key Points:

  • The expected value is a measure of the center of the distribution of the random variable.
  • The variance measures the spread or dispersion of the distribution.
  • For a continuous random variable, the probability that it takes on any particular value is zero. Instead, we define probabilities for intervals of values.
  • The CDF is always between 0 and 1, inclusive, and is a non-decreasing function. It provides a cumulative measure of the probability up to a certain value.

Prompt

Please give examples of calculating expected value and variance using these formulas.

1. Discrete Random Variable:

Example: Suppose we roll a fair six-sided die. Let \(X\) be the number that shows up on the die.

Probability Mass Function (PMF): \[ P(X = x_i) = \frac{1}{6} \] for \(x_i\) in {1, 2, 3, 4, 5, 6}.

Expected Value (Mean): \[ E(X) = \sum_{i} x_i \times P(X = x_i) \] \[ E(X) = 1(\frac{1}{6}) + 2(\frac{1}{6}) + 3(\frac{1}{6}) + 4(\frac{1}{6}) + 5(\frac{1}{6}) + 6(\frac{1}{6}) \] \[ E(X) = \frac{21}{6} = 3.5 \]

Variance: \[ Var(X) = E(X^2) - [E(X)]^2 \] First, find \(E(X^2)\): \[ E(X^2) = \sum_{i} x_i^2 \times P(X = x_i) \] \[ E(X^2) = 1^2(\frac{1}{6}) + 2^2(\frac{1}{6}) + 3^2(\frac{1}{6}) + 4^2(\frac{1}{6}) + 5^2(\frac{1}{6}) + 6^2(\frac{1}{6}) \] \[ E(X^2) = \frac{91}{6} \] Now, plug into the variance formula: \[ Var(X) = \frac{91}{6} - (3.5)^2 \] \[ Var(X) = \frac{91}{6} - 12.25 = 2.9167 \]

2. Continuous Random Variable:

Example: Let \(X\) be a random variable representing the time (in hours) it takes for a task to be completed, where \(X\) has a uniform distribution between 1 and 3 hours.

Probability Density Function (PDF): \[ f(x) = \frac{1}{3-1} = 0.5 \] for 1 ≤ \(x\) ≤ 3 and \(f(x) = 0\) otherwise.

Expected Value (Mean): \[ E(X) = \int_{1}^{3} x \times f(x) \, dx \] \[ E(X) = \int_{1}^{3} x(0.5) \, dx \] \[ E(X) = 0.5 \times \frac{x^2}{2} \Big|_1^3 \] \[ E(X) = 2 \]

Variance: \[ Var(X) = \int_{1}^{3} x^2 \times f(x) \, dx - [E(X)]^2 \] First, find \(E(X^2)\): \[ E(X^2) = \int_{1}^{3} x^2(0.5) \, dx \] \[ E(X^2) = 0.5 \times \frac{x^3}{3} \Big|_1^3 \] \[ E(X^2) = \frac{26}{3} \] Now, plug into the variance formula: \[ Var(X) = \frac{26}{3} - 2^2 \] \[ Var(X) = \frac{26}{3} - 4 = \frac{14}{3} = 4.6667 \]

Prompt

Create examples of how to use R to plot the PDF and CDF functions.

1. Discrete Random Variable:

For the six-sided die:

Probability Mass Function (PMF):

# PMF for a fair six-sided die
x <- c(1, 2, 3, 4, 5, 6)
pmf <- rep(1/6, 6)

# Plot PMF
barplot(pmf, names.arg=x, ylim=c(0, 1/6), main="PMF of a Fair Die", xlab="Die Face", ylab="Probability")

Cumulative Distribution Function (CDF):

# CDF for a fair six-sided die
cdf <- cumsum(pmf)

# Plot CDF
plot(x, cdf, type="s", ylim=c(0, 1), main="CDF of a Fair Die", xlab="Die Face", ylab="Cumulative Probability")

2. Continuous Random Variable:

For the task completion time between 1 and 3 hours:

Probability Density Function (PDF):

# PDF for a uniform distribution between 1 and 3
x <- seq(1, 3, by=0.01)
pdf <- rep(0.5, length(x))

# Plot PDF
plot(x, pdf, type="l", ylim=c(0, 0.5), main="PDF of Task Completion Time", xlab="Time (hours)", ylab="Density")

Cumulative Distribution Function (CDF):

# CDF for a uniform distribution between 1 and 3
cdf <- pnorm(x, mean=2, sd=sqrt(4.6667/3))

# Plot CDF
plot(x, cdf, type="l", ylim=c(0, 1), main="CDF of Task Completion Time", xlab="Time (hours)", ylab="Cumulative Probability")

Note: In the CDF plot for the continuous random variable, I used the pnorm function to generate the CDF values. This is because the uniform distribution between 1 and 3 can be approximated using a normal distribution with mean 2 and variance 4.6667/3. However, for a precise uniform distribution, you’d use the punif function.

You can run these scripts in R or RStudio to visualize the PDF and CDF plots for the given examples.

LS0tDQp0aXRsZTogIklFUiBDaGFwdGVyIDIuMSBTdW1tYXJ5Ig0KYXV0aG9yOiAiRHIuIFNlbGJ5LUxlYWNoIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiBodG1sX25vdGVib29rIA0KLS0tDQoNCjxzdHlsZT4NCiAgICAvKiBTdHlsaW5nIGZvciBoMSBoZWFkZXJzICovDQogICAgaDEgew0KICAgICAgICBmb250LXdlaWdodDogYm9sZDsgICAgICAgLyogQm9sZCAqLw0KICAgICAgICBjb2xvcjogZGFya2JsdWU7ICAgICAgICAvKiBEYXJrIGJsdWUgY29sb3IgKi8NCiAgICB9DQogICAgLyogU3R5bGluZyBmb3IgaDIgaGVhZGVycyAqLw0KICAgIGgyIHsNCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7IA0KICAgIH0NCg0KICAgIC8qIFN0eWxpbmcgZm9yIGgzIGhlYWRlcnMgKi8NCiAgICBoMyB7DQogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgICAgIC8qIEl0YWxpYyAqLw0KICAgIH0NCjwvc3R5bGU+DQoNCg0KSW4gdGhpcyBoYW5kb3V0LCBJIHVzZSBDaGF0R1BUIDQuMCBhbmQgdGhlIEtleU1hdGUuQUkgU2VhcmNoIHBsdWdpbiB0byBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0ZXh0Ym9vaywgZ2l2ZSBleGFtcGxlcywgYW5kIGNyZWF0ZSBSIGNvZGUuIEFsbCBwcm9tcHRzIGFyZSBleGFjdCwgYnV0IHNvbWUgb2YgdGhlIG91dHB1dCBtYXkgYmUgbW9kaWZpZWQgZm9yIGNvcnJlY3RuZXNzLiANCg0KSGFuY2ssIEFybm9sZCwgR2VyYmVyLCBhbmQgU2NobWVsemVyICgyMDIzKS4gSW50cm9kdWN0aW9uIHRvIEVjb25vbWV0cmljcyB3aXRoIFIuIGh0dHBzOi8vd3d3LmVjb25vbWV0cmljcy13aXRoLXIub3JnL2luZGV4Lmh0bWwuIFRoaXMgYm9vayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwgTGljZW5zZS4NCg0KIyMgUHJvbXB0DQoNClN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgd2Vic2l0ZS4gSW5jbHVkZSBhbGwgcmVsZXZhbnQgZm9ybXVsYXMgYW5kIGRlZmluaXRpb25zLiBodHRwczovL3d3dy5lY29ub21ldHJpY3Mtd2l0aC1yLm9yZy8yLjEtcmFuZG9tLXZhcmlhYmxlcy1hbmQtcHJvYmFiaWxpdHktZGlzdHJpYnV0aW9ucy5odG1sDQoNCiMjIyBEZWZpbml0aW9uczoNCjEuICoqUmFuZG9tIFZhcmlhYmxlIChSVikqKjogQSBmdW5jdGlvbiB0aGF0IGFzc2lnbnMgYSByZWFsIG51bWJlciB0byBlYWNoIG91dGNvbWUgaW4gYSBzYW1wbGUgc3BhY2UuDQoyLiAqKlByb2JhYmlsaXR5IERpc3RyaWJ1dGlvbioqOiBEZXNjcmliZXMgaG93IHByb2JhYmlsaXRpZXMgYXJlIGRpc3RyaWJ1dGVkIG92ZXIgdGhlIHZhbHVlcyBvZiB0aGUgcmFuZG9tIHZhcmlhYmxlLg0KMy4gKipEaXNjcmV0ZSBSYW5kb20gVmFyaWFibGUqKjogVGFrZXMgb24gYSBjb3VudGFibGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcy4NCjQuICoqQ29udGludW91cyBSYW5kb20gVmFyaWFibGUqKjogVGFrZXMgb24gYW4gdW5jb3VudGFibHkgaW5maW5pdGUgbnVtYmVyIG9mIHZhbHVlcy4NCjUuICoqUHJvYmFiaWxpdHkgTWFzcyBGdW5jdGlvbiAoUE1GKSoqOiBHaXZlcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhIGRpc2NyZXRlIHJhbmRvbSB2YXJpYWJsZSBpcyBlcXVhbCB0byBzb21lIHZhbHVlLg0KNi4gKipQcm9iYWJpbGl0eSBEZW5zaXR5IEZ1bmN0aW9uIChQREYpKio6IEEgZnVuY3Rpb24gdXNlZCB0byBzcGVjaWZ5IHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgcmFuZG9tIHZhcmlhYmxlIGZhbGxpbmcgd2l0aGluIGEgcGFydGljdWxhciByYW5nZSBvZiB2YWx1ZXMuDQo3LiAqKkN1bXVsYXRpdmUgRGlzdHJpYnV0aW9uIEZ1bmN0aW9uIChDREYpKio6IEdpdmVzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSByYW5kb20gdmFyaWFibGUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGEgY2VydGFpbiB2YWx1ZS4NCg0KIyMjIEZvcm11bGFzOg0KMS4gKipFeHBlY3RlZCBWYWx1ZSAoTWVhbikgb2YgYSBEaXNjcmV0ZSBSYW5kb20gVmFyaWFibGUqKjoNCiAgIFxbIEUoWCkgPSBcc3VtX3tpfSB4X2kgXHRpbWVzIFAoWCA9IHhfaSkgXF0NCiAgIA0KMi4gKipWYXJpYW5jZSBvZiBhIERpc2NyZXRlIFJhbmRvbSBWYXJpYWJsZSoqOg0KICAgXFsgVmFyKFgpID0gRShYXjIpIC0gW0UoWCldXjIgXF0NCiAgIA0KMy4gKipFeHBlY3RlZCBWYWx1ZSAoTWVhbikgb2YgYSBDb250aW51b3VzIFJhbmRvbSBWYXJpYWJsZSoqOg0KICAgXFsgRShYKSA9IFxpbnRfey1caW5mdHl9XntcaW5mdHl9IHggXHRpbWVzIGYoeCkgXCwgZHggXF0NCiAgIA0KNC4gKipWYXJpYW5jZSBvZiBhIENvbnRpbnVvdXMgUmFuZG9tIFZhcmlhYmxlKio6DQogICBcWyBWYXIoWCkgPSBcaW50X3stXGluZnR5fV57XGluZnR5fSB4XjIgXHRpbWVzIGYoeCkgXCwgZHggLSBbRShYKV1eMiBcXQ0KDQojIyMgS2V5IFBvaW50czoNCi0gVGhlICoqZXhwZWN0ZWQgdmFsdWUqKiBpcyBhIG1lYXN1cmUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSByYW5kb20gdmFyaWFibGUuDQotIFRoZSAqKnZhcmlhbmNlKiogbWVhc3VyZXMgdGhlIHNwcmVhZCBvciBkaXNwZXJzaW9uIG9mIHRoZSBkaXN0cmlidXRpb24uDQotIEZvciBhICoqY29udGludW91cyByYW5kb20gdmFyaWFibGUqKiwgdGhlIHByb2JhYmlsaXR5IHRoYXQgaXQgdGFrZXMgb24gYW55IHBhcnRpY3VsYXIgdmFsdWUgaXMgemVyby4gSW5zdGVhZCwgd2UgZGVmaW5lIHByb2JhYmlsaXRpZXMgZm9yIGludGVydmFscyBvZiB2YWx1ZXMuDQotIFRoZSAqKkNERioqIGlzIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZSwgYW5kIGlzIGEgbm9uLWRlY3JlYXNpbmcgZnVuY3Rpb24uIEl0IHByb3ZpZGVzIGEgY3VtdWxhdGl2ZSBtZWFzdXJlIG9mIHRoZSBwcm9iYWJpbGl0eSB1cCB0byBhIGNlcnRhaW4gdmFsdWUuDQoNCiMjIFByb21wdA0KUGxlYXNlIGdpdmUgZXhhbXBsZXMgb2YgY2FsY3VsYXRpbmcgZXhwZWN0ZWQgdmFsdWUgYW5kIHZhcmlhbmNlIHVzaW5nIHRoZXNlIGZvcm11bGFzLiANCg0KDQojIyMgMS4gRGlzY3JldGUgUmFuZG9tIFZhcmlhYmxlOg0KDQoqKkV4YW1wbGU6KiogDQpTdXBwb3NlIHdlIHJvbGwgYSBmYWlyIHNpeC1zaWRlZCBkaWUuIExldCBcKCBYIFwpIGJlIHRoZSBudW1iZXIgdGhhdCBzaG93cyB1cCBvbiB0aGUgZGllLiANCg0KKipQcm9iYWJpbGl0eSBNYXNzIEZ1bmN0aW9uIChQTUYpKio6DQpcWyBQKFggPSB4X2kpID0gXGZyYWN7MX17Nn0gXF0NCmZvciBcKCB4X2kgXCkgaW4gezEsIDIsIDMsIDQsIDUsIDZ9Lg0KDQoqKkV4cGVjdGVkIFZhbHVlIChNZWFuKSoqOg0KXFsgRShYKSA9IFxzdW1fe2l9IHhfaSBcdGltZXMgUChYID0geF9pKSBcXQ0KXFsgRShYKSA9IDEoXGZyYWN7MX17Nn0pICsgMihcZnJhY3sxfXs2fSkgKyAzKFxmcmFjezF9ezZ9KSArIDQoXGZyYWN7MX17Nn0pICsgNShcZnJhY3sxfXs2fSkgKyA2KFxmcmFjezF9ezZ9KSBcXQ0KXFsgRShYKSA9IFxmcmFjezIxfXs2fSA9IDMuNSBcXQ0KDQoqKlZhcmlhbmNlKio6DQpcWyBWYXIoWCkgPSBFKFheMikgLSBbRShYKV1eMiBcXQ0KRmlyc3QsIGZpbmQgXCggRShYXjIpIFwpOg0KXFsgRShYXjIpID0gXHN1bV97aX0geF9pXjIgXHRpbWVzIFAoWCA9IHhfaSkgXF0NClxbIEUoWF4yKSA9IDFeMihcZnJhY3sxfXs2fSkgKyAyXjIoXGZyYWN7MX17Nn0pICsgM14yKFxmcmFjezF9ezZ9KSArIDReMihcZnJhY3sxfXs2fSkgKyA1XjIoXGZyYWN7MX17Nn0pICsgNl4yKFxmcmFjezF9ezZ9KSBcXQ0KXFsgRShYXjIpID0gXGZyYWN7OTF9ezZ9IFxdDQpOb3csIHBsdWcgaW50byB0aGUgdmFyaWFuY2UgZm9ybXVsYToNClxbIFZhcihYKSA9IFxmcmFjezkxfXs2fSAtICgzLjUpXjIgXF0NClxbIFZhcihYKSA9IFxmcmFjezkxfXs2fSAtIDEyLjI1ID0gMi45MTY3IFxdDQoNCiMjIyAyLiBDb250aW51b3VzIFJhbmRvbSBWYXJpYWJsZToNCg0KKipFeGFtcGxlOioqIA0KTGV0IFwoIFggXCkgYmUgYSByYW5kb20gdmFyaWFibGUgcmVwcmVzZW50aW5nIHRoZSB0aW1lIChpbiBob3VycykgaXQgdGFrZXMgZm9yIGEgdGFzayB0byBiZSBjb21wbGV0ZWQsIHdoZXJlIFwoIFggXCkgaGFzIGEgdW5pZm9ybSBkaXN0cmlidXRpb24gYmV0d2VlbiAxIGFuZCAzIGhvdXJzLg0KDQoqKlByb2JhYmlsaXR5IERlbnNpdHkgRnVuY3Rpb24gKFBERikqKjoNClxbIGYoeCkgPSBcZnJhY3sxfXszLTF9ID0gMC41IFxdDQpmb3IgMSDiiaQgXCggeCBcKSDiiaQgMyBhbmQgXCggZih4KSA9IDAgXCkgb3RoZXJ3aXNlLg0KDQoqKkV4cGVjdGVkIFZhbHVlIChNZWFuKSoqOg0KXFsgRShYKSA9IFxpbnRfezF9XnszfSB4IFx0aW1lcyBmKHgpIFwsIGR4IFxdDQpcWyBFKFgpID0gXGludF97MX1eezN9IHgoMC41KSBcLCBkeCBcXQ0KXFsgRShYKSA9IDAuNSBcdGltZXMgXGZyYWN7eF4yfXsyfSBcQmlnfF8xXjMgXF0NClxbIEUoWCkgPSAyIFxdDQoNCioqVmFyaWFuY2UqKjoNClxbIFZhcihYKSA9IFxpbnRfezF9XnszfSB4XjIgXHRpbWVzIGYoeCkgXCwgZHggLSBbRShYKV1eMiBcXQ0KRmlyc3QsIGZpbmQgXCggRShYXjIpIFwpOg0KXFsgRShYXjIpID0gXGludF97MX1eezN9IHheMigwLjUpIFwsIGR4IFxdDQpcWyBFKFheMikgPSAwLjUgXHRpbWVzIFxmcmFje3heM317M30gXEJpZ3xfMV4zIFxdDQpcWyBFKFheMikgPSBcZnJhY3syNn17M30gXF0NCk5vdywgcGx1ZyBpbnRvIHRoZSB2YXJpYW5jZSBmb3JtdWxhOg0KXFsgVmFyKFgpID0gXGZyYWN7MjZ9ezN9IC0gMl4yIFxdDQpcWyBWYXIoWCkgPSBcZnJhY3syNn17M30gLSA0ID0gXGZyYWN7MTR9ezN9ID0gNC42NjY3IFxdDQoNCiMjIFByb21wdCANCkNyZWF0ZSBleGFtcGxlcyBvZiBob3cgdG8gdXNlIFIgdG8gcGxvdCB0aGUgUERGIGFuZCBDREYgZnVuY3Rpb25zLg0KDQoNCiMjIyAxLiBEaXNjcmV0ZSBSYW5kb20gVmFyaWFibGU6DQoNCkZvciB0aGUgc2l4LXNpZGVkIGRpZToNCg0KKipQcm9iYWJpbGl0eSBNYXNzIEZ1bmN0aW9uIChQTUYpKio6DQoNCmBgYHtyfQ0KIyBQTUYgZm9yIGEgZmFpciBzaXgtc2lkZWQgZGllDQp4IDwtIGMoMSwgMiwgMywgNCwgNSwgNikNCnBtZiA8LSByZXAoMS82LCA2KQ0KDQojIFBsb3QgUE1GDQpiYXJwbG90KHBtZiwgbmFtZXMuYXJnPXgsIHlsaW09YygwLCAxLzYpLCBtYWluPSJQTUYgb2YgYSBGYWlyIERpZSIsIHhsYWI9IkRpZSBGYWNlIiwgeWxhYj0iUHJvYmFiaWxpdHkiKQ0KYGBgDQoNCg0KDQoqKkN1bXVsYXRpdmUgRGlzdHJpYnV0aW9uIEZ1bmN0aW9uIChDREYpKio6DQpgYGB7Un0NCiMgQ0RGIGZvciBhIGZhaXIgc2l4LXNpZGVkIGRpZQ0KY2RmIDwtIGN1bXN1bShwbWYpDQoNCiMgUGxvdCBDREYNCnBsb3QoeCwgY2RmLCB0eXBlPSJzIiwgeWxpbT1jKDAsIDEpLCBtYWluPSJDREYgb2YgYSBGYWlyIERpZSIsIHhsYWI9IkRpZSBGYWNlIiwgeWxhYj0iQ3VtdWxhdGl2ZSBQcm9iYWJpbGl0eSIpDQpgYGANCg0KIyMjIDIuIENvbnRpbnVvdXMgUmFuZG9tIFZhcmlhYmxlOg0KDQpGb3IgdGhlIHRhc2sgY29tcGxldGlvbiB0aW1lIGJldHdlZW4gMSBhbmQgMyBob3VyczoNCg0KKipQcm9iYWJpbGl0eSBEZW5zaXR5IEZ1bmN0aW9uIChQREYpKio6DQpgYGB7Un0NCiMgUERGIGZvciBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uIGJldHdlZW4gMSBhbmQgMw0KeCA8LSBzZXEoMSwgMywgYnk9MC4wMSkNCnBkZiA8LSByZXAoMC41LCBsZW5ndGgoeCkpDQoNCiMgUGxvdCBQREYNCnBsb3QoeCwgcGRmLCB0eXBlPSJsIiwgeWxpbT1jKDAsIDAuNSksIG1haW49IlBERiBvZiBUYXNrIENvbXBsZXRpb24gVGltZSIsIHhsYWI9IlRpbWUgKGhvdXJzKSIsIHlsYWI9IkRlbnNpdHkiKQ0KYGBgDQoNCioqQ3VtdWxhdGl2ZSBEaXN0cmlidXRpb24gRnVuY3Rpb24gKENERikqKjoNCmBgYHtSfQ0KIyBDREYgZm9yIGEgdW5pZm9ybSBkaXN0cmlidXRpb24gYmV0d2VlbiAxIGFuZCAzDQpjZGYgPC0gcG5vcm0oeCwgbWVhbj0yLCBzZD1zcXJ0KDQuNjY2Ny8zKSkNCg0KIyBQbG90IENERg0KcGxvdCh4LCBjZGYsIHR5cGU9ImwiLCB5bGltPWMoMCwgMSksIG1haW49IkNERiBvZiBUYXNrIENvbXBsZXRpb24gVGltZSIsIHhsYWI9IlRpbWUgKGhvdXJzKSIsIHlsYWI9IkN1bXVsYXRpdmUgUHJvYmFiaWxpdHkiKQ0KYGBgDQoNCk5vdGU6IEluIHRoZSBDREYgcGxvdCBmb3IgdGhlIGNvbnRpbnVvdXMgcmFuZG9tIHZhcmlhYmxlLCBJIHVzZWQgdGhlIGBwbm9ybWAgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIENERiB2YWx1ZXMuIFRoaXMgaXMgYmVjYXVzZSB0aGUgdW5pZm9ybSBkaXN0cmlidXRpb24gYmV0d2VlbiAxIGFuZCAzIGNhbiBiZSBhcHByb3hpbWF0ZWQgdXNpbmcgYSBub3JtYWwgZGlzdHJpYnV0aW9uIHdpdGggbWVhbiAyIGFuZCB2YXJpYW5jZSA0LjY2NjcvMy4gSG93ZXZlciwgZm9yIGEgcHJlY2lzZSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiwgeW91J2QgdXNlIHRoZSBgcHVuaWZgIGZ1bmN0aW9uLg0KDQpZb3UgY2FuIHJ1biB0aGVzZSBzY3JpcHRzIGluIFIgb3IgUlN0dWRpbyB0byB2aXN1YWxpemUgdGhlIFBERiBhbmQgQ0RGIHBsb3RzIGZvciB0aGUgZ2l2ZW4gZXhhbXBsZXMu