library(wooldridge)
library(tidyverse)
QUESTION 1: WOOLDRIDGE 2.C1
Use the data in k401k to answer this question
r data("k401k") df = as_tibble(k401k) view(df)
Use ?k401k to learn about the sample and variables
r ?k401k
Use ?k401k to learn about the sample and variables The data in k401k are a subset of data analyzed by Papke (1995) to study the relationship between participation in a 401(k) pension plan and the generosity of the plan. The variable prate is the percentage of eligible workers with an active account; this is the variable we would like to explain. The measure of generosity is the plan match rate, mrate. This variable gives the average amount the firm contributes to each worker’s plan for each $1 contribution by the work. For example, if mrate = 0.50, then a $1 contribution by the worker is matched by a 50 cent contribution by the firm.
PART A– Find the average participation rate and the average match rate in the sample of plans
r mean(df$prate)
[1] 87.36291
r mean(df$mrate)
[1] 0.7315124
PART B– Now, estimate the simple regression equation and report the results along with the sample size and R-squared.
r model = lm(prate ~ mrate, data = df) summary(model)
```
Call: lm(formula = prate ~ mrate, data = df)
Residuals: Min 1Q Median 3Q Max -82.303 -8.184 5.178 12.712 16.807
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 83.0755 0.5633 147.48 <2e-16 mrate 5.8611 0.5270 11.12 <2e-16

Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 16.09 on 1532 degrees of freedom Multiple R-squared: 0.0747, Adjusted R-squared: 0.0741 F-statistic: 123.7 on 1 and 1532 DF, p-value: < 2.2e-16




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->

The sample size is 1534. R^2 is 0.075. B0 hat value is 83.07755 and the B1 hat value is 5.8611. The equation to estimate the average prate^ = 83.0755 + 5.8611mrate

PART C-- Find the predicted prate when mrate= 3.5. Is this a reasonable prediction? Explain what is happening here.

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxucHJlZGljdGVkID0gODMuMDc1NSArIDUuODYxMSooMy41KVxucHJpbnQocHJlZGljdGVkKVxuYGBgIn0= -->

```r
predicted = 83.0755 + 5.8611*(3.5)
print(predicted)
[1] 103.5894

The answer is 103.59. This is unreasonable as you cannot have a prate that exceeds 100%. This shows that the regression model estimates that at $3.50 mrate there is an 103.59% participation rate.

PART D– How much of the variation in prate is explained by mrate? Is this a lot in your opinion? The R^2 value is about 0.075. This shows that the mrate is the main reason for a 7.5% variation in the prate. As this percentage is not very significant, it suggests that there are other factors affecting the prate.

QUESTION 2: WOOLDRIDGE 2.C3
Use the data in sleep75 to answer this question
r data("sleep75") df_two = as_tibble(sleep75) view(df_two) ?sleep75
Use the data in sleep75 from Biddle and Hamermesh (1990) to study whether there is a tradeoff between the time spent sleeping per week and the time spent in paid work. We could use either variable as the dependent variable. For concreteness, estimate the model sleep = β0 + β1totwrk + u, where sleep is minutes spent sleeping at night per week and totwrk is total minutes worked during the week.
r model_two = lm(sleep ~totwrk, data = df_two) summary(model_two)
```
Call: lm(formula = sleep ~ totwrk, data = df_two)
Residuals: Min 1Q Median 3Q Max -2429.94 -240.25 4.91 250.53 1339.72
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 3586.37695 38.91243 92.165 <2e-16 totwrk -0.15075 0.01674 -9.005 <2e-16

Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 421.1 on 704 degrees of freedom Multiple R-squared: 0.1033, Adjusted R-squared: 0.102 F-statistic: 81.09 on 1 and 704 DF, p-value: < 2.2e-16




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->


PART A-- Report your results in equation form along with the number of observations and R2. What does the intercept in this equation mean?

Equation: sleep^ = 3586.37695 - 0.15075*totwrk
Sample Size: 706
R^2: 0.1033
The intercept suggests that the estimated amount of sleep per week of someone that works 0 hours per week is 3596.37


PART B--If totwrk increases by 2 hours, by how much is sleep estimated to fall? Do you find this to be large effect?

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuY2hhbmdlX2luX3NsZWVwID0gLTAuMTUwNzUqIDEyMFxucHJpbnQoY2hhbmdlX2luX3NsZWVwKVxuYGBgIn0= -->

```r
change_in_sleep = -0.15075* 120
print(change_in_sleep)
[1] -18.09
QUESTION 3:
Use the data in wage1 to answer this question
r data("wage1") df_three = as_tibble(wage1) view(df_three) ?wage1
PART A– Estimate the model wage = β0 + β1educ + u
r model_three = lm(wage ~educ, data = df_three) summary(model_three)
```
Call: lm(formula = wage ~ educ, data = df_three)
Residuals: Min 1Q Median 3Q Max -5.3396 -2.1501 -0.9674 1.1921 16.6085
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.90485 0.68497 -1.321 0.187 educ 0.54136 0.05325 10.167 <2e-16 ***

Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.378 on 524 degrees of freedom Multiple R-squared: 0.1648, Adjusted R-squared: 0.1632 F-statistic: 103.4 on 1 and 524 DF, p-value: < 2.2e-16




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->


PART B-- Now, create new variables for weekly wages and semesters of education

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuIyBhc3N1bWUgOCBob3VycyBwZXIgZGF5IGFuZCBmaXZlIGRheXMgcGVyIHdlZWtcbmRmX3RocmVlJHdhZ2Vfd2Vla2x5ID0gd2FnZTEkd2FnZSo4KjUgXG4jIGFzc3VtZSAyIHNlbWVzdGVycyBwZXIgeWVhciBcbmRmX3RocmVlJGVkdWNfc2VtZXN0ZXIgPSB3YWdlMSRlZHVjKjJcbnZpZXcoZGZfdGhyZWUpXG5gYGAifQ== -->

```r
# assume 8 hours per day and five days per week
df_three$wage_weekly = wage1$wage*8*5 
# assume 2 semesters per year 
df_three$educ_semester = wage1$educ*2
view(df_three)

PART C– Estimate the model: wage_weekly = β0 + β1educ_semester + u. How do the coefficients compare to those in part a?

model_three = lm(wage_weekly ~ educ_semester, data = df_three)
summary(model_three)

Call:
lm(formula = wage_weekly ~ educ_semester, data = df_three)

Residuals:
    Min      1Q  Median      3Q     Max 
-213.58  -86.00  -38.70   47.68  664.34 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)    -36.194     27.399  -1.321    0.187    
educ_semester   10.827      1.065  10.167   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 135.1 on 524 degrees of freedom
Multiple R-squared:  0.1648,    Adjusted R-squared:  0.1632 
F-statistic: 103.4 on 1 and 524 DF,  p-value: < 2.2e-16

The coefficients of the model are much larger than for part A, this is because now wage is measured weekly instead of hourly.

PART D– Explain how this relations to Problem 10 in the written part of the homework. According to question 10 of the HW, “B~1=(c1/c2)B^1 and B~0=(c1)B^0”. In this question c1=5*8, which represents the days and hrs worked for the week and c2=2 is the number of semesters in a year. Therefore the relationship from question 10 is true.

QUESTION 4: WOOLDRIDGE 2.C11
Use the data in GPA1 for this exercise
```r data(“gpa1”) df_four = as_tibble(gpa1) view(df_four) ?gpa1
```
Use ?gpa1 to learn about the sample and variables It is a sample of Mighigan State University undergraduates from the mid-1990s, and includes current college GPA (colGPA) and a binary variable indicating whether the student owned a personal computer (PC).
PART A– How many students are in the sample? Find the average and highest college GPAs.
r max(df_four$colGPA)
[1] 4
r mean(df_four$colGPA)
[1] 3.056738
PART B– How many students owned their own PC?
r df_four %>% filter(df_four$PC ==1) %>% nrow()
[1] 56
56 students own their own PC
PART C– Estimate the simple regression equation colGPA=β0 +β1PC+u and report your estimates for β0 and β1. Interpret these estimates, including a discussion of the magnitudes.
r model_four = lm(colGPA ~ PC, data = df_four) summary(model_four)
```
Call: lm(formula = colGPA ~ PC, data = df_four)
Residuals: Min 1Q Median 3Q Max -0.95893 -0.25893 0.01059 0.31059 0.84107
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2.98941 0.03950 75.678 <2e-16 * PC 0.16952 0.06268 2.704 0.0077

Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3642 on 139 degrees of freedom Multiple R-squared: 0.04999, Adjusted R-squared: 0.04315 F-statistic: 7.314 on 1 and 139 DF, p-value: 0.007697 ```

The B0 value is 2.98941.This estimates when a student does not own a PC the avg colGPA is 2.99 The B1 value is 0.16952.This estimates that for each additional unit of PC on avg the colGPA increases by 0.16952

The B0 value was higher that would mean that on avg students without a PC will have a higher GPA, however this does impact their GPA.

PART D– What is the R-squared from the regression? What do you make of its magnitude?

The R^2 is 0.04999, this means that owning a PC is about 4.9% to blame for the variation of colGPA. This is a small percentage, meaning that other factors have a higher impact on the GPA of students.

PART E– Does your finding in part (c) imply that owning a PC has a causal effect on colGPA? Explain

No, owning a PC does not have a causal effect on colGPA. In our model we find that there is only about 4.9% of the variation between owning a PC and colGPA. This suggests that other factors have a higher impact and more direct relationship on GPA. However, a higher R^2 value wouldn’t necessarily explain a causal relationship, but it would suggest that the estimated colGPA values were more closely accurate to the actual GPA values.

LS0tCnRpdGxlOiAiUHJvYmxlbSBTZXQgMiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyfQpsaWJyYXJ5KHdvb2xkcmlkZ2UpCmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUVVFU1RJT04gMTogV09PTERSSURHRSAyLkMxCgpVc2UgdGhlIGRhdGEgaW4gazQwMWsgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24KYGBge3J9CmRhdGEoIms0MDFrIikKZGYgPSBhc190aWJibGUoazQwMWspCnZpZXcoZGYpCmBgYApVc2UgP2s0MDFrIHRvIGxlYXJuIGFib3V0IHRoZSBzYW1wbGUgYW5kIHZhcmlhYmxlcwpgYGB7cn0KP2s0MDFrCmBgYApVc2UgP2s0MDFrIHRvIGxlYXJuIGFib3V0IHRoZSBzYW1wbGUgYW5kIHZhcmlhYmxlcwpUaGUgZGF0YSBpbiBrNDAxayBhcmUgYSBzdWJzZXQgb2YgZGF0YSBhbmFseXplZCBieSBQYXBrZSAoMTk5NSkgdG8gc3R1ZHkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhcnRpY2lwYXRpb24gaW4gYSA0MDEoaykgcGVuc2lvbiBwbGFuIGFuZCB0aGUgZ2VuZXJvc2l0eSBvZiB0aGUgcGxhbi4gVGhlIHZhcmlhYmxlIHByYXRlIGlzIHRoZSBwZXJjZW50YWdlIG9mIGVsaWdpYmxlIHdvcmtlcnMgd2l0aCBhbiBhY3RpdmUgYWNjb3VudDsgdGhpcyBpcyB0aGUgdmFyaWFibGUgd2Ugd291bGQgbGlrZSB0byBleHBsYWluLiBUaGUgbWVhc3VyZSBvZiBnZW5lcm9zaXR5IGlzIHRoZSBwbGFuIG1hdGNoIHJhdGUsIG1yYXRlLiBUaGlzIHZhcmlhYmxlIGdpdmVzIHRoZSBhdmVyYWdlIGFtb3VudCB0aGUgZmlybSBjb250cmlidXRlcyB0byBlYWNoIHdvcmtlcuKAmXMgcGxhbiBmb3IgZWFjaCAkMSBjb250cmlidXRpb24gYnkgdGhlIHdvcmsuIEZvciBleGFtcGxlLCBpZiBtcmF0ZSA9IDAuNTAsIHRoZW4gYSAkMSBjb250cmlidXRpb24gYnkgdGhlIHdvcmtlciBpcyBtYXRjaGVkIGJ5IGEgNTAgY2VudCBjb250cmlidXRpb24gYnkgdGhlIGZpcm0uCgpQQVJUIEEtLSBGaW5kIHRoZSBhdmVyYWdlIHBhcnRpY2lwYXRpb24gcmF0ZSBhbmQgdGhlIGF2ZXJhZ2UgbWF0Y2ggcmF0ZSBpbiB0aGUgc2FtcGxlIG9mIHBsYW5zCmBgYHtyfQptZWFuKGRmJHByYXRlKQptZWFuKGRmJG1yYXRlKQpgYGAKUEFSVCBCLS0gTm93LCBlc3RpbWF0ZSB0aGUgc2ltcGxlIHJlZ3Jlc3Npb24gZXF1YXRpb24gYW5kIHJlcG9ydCB0aGUgcmVzdWx0cyBhbG9uZyB3aXRoIHRoZSBzYW1wbGUgc2l6ZSBhbmQgUi1zcXVhcmVkLgpgYGB7cn0KbW9kZWwgPSBsbShwcmF0ZSB+IG1yYXRlLCBkYXRhID0gZGYpCnN1bW1hcnkobW9kZWwpCmBgYApUaGUgc2FtcGxlIHNpemUgaXMgMTUzNC4gUl4yIGlzIDAuMDc1LiBCMCBoYXQgdmFsdWUgaXMgODMuMDc3NTUgYW5kIHRoZSBCMSBoYXQgdmFsdWUgaXMgNS44NjExLiBUaGUgZXF1YXRpb24gdG8gZXN0aW1hdGUgdGhlIGF2ZXJhZ2UgcHJhdGVeID0gODMuMDc1NSArIDUuODYxMW1yYXRlCgpQQVJUIEMtLSBGaW5kIHRoZSBwcmVkaWN0ZWQgcHJhdGUgd2hlbiBtcmF0ZT0gMy41LiBJcyB0aGlzIGEgcmVhc29uYWJsZSBwcmVkaWN0aW9uPyBFeHBsYWluIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUuCmBgYHtyfQpwcmVkaWN0ZWQgPSA4My4wNzU1ICsgNS44NjExKigzLjUpCnByaW50KHByZWRpY3RlZCkKYGBgClRoZSBhbnN3ZXIgaXMgMTAzLjU5LiBUaGlzIGlzIHVucmVhc29uYWJsZSBhcyB5b3UgY2Fubm90IGhhdmUgYSBwcmF0ZSB0aGF0IGV4Y2VlZHMgMTAwJS4gVGhpcyBzaG93cyB0aGF0IHRoZSByZWdyZXNzaW9uIG1vZGVsIGVzdGltYXRlcyB0aGF0IGF0ICQzLjUwIG1yYXRlIHRoZXJlIGlzIGFuIDEwMy41OSUgcGFydGljaXBhdGlvbiByYXRlLiAKClBBUlQgRC0tIEhvdyBtdWNoIG9mIHRoZSB2YXJpYXRpb24gaW4gcHJhdGUgaXMgZXhwbGFpbmVkIGJ5IG1yYXRlPyBJcyB0aGlzIGEgbG90IGluIHlvdXIgb3Bpbmlvbj8KVGhlIFJeMiB2YWx1ZSBpcyBhYm91dCAwLjA3NS4gVGhpcyBzaG93cyB0aGF0IHRoZSBtcmF0ZSBpcyB0aGUgbWFpbiByZWFzb24gZm9yIGEgNy41JSB2YXJpYXRpb24gaW4gdGhlIHByYXRlLiBBcyB0aGlzIHBlcmNlbnRhZ2UgaXMgbm90IHZlcnkgc2lnbmlmaWNhbnQsIGl0IHN1Z2dlc3RzIHRoYXQgdGhlcmUgYXJlIG90aGVyIGZhY3RvcnMgYWZmZWN0aW5nIHRoZSBwcmF0ZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClFVRVNUSU9OIDI6IFdPT0xEUklER0UgMi5DMwoKVXNlIHRoZSBkYXRhIGluIHNsZWVwNzUgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24KYGBge3J9CmRhdGEoInNsZWVwNzUiKQpkZl90d28gPSBhc190aWJibGUoc2xlZXA3NSkKdmlldyhkZl90d28pCj9zbGVlcDc1CmBgYAoKVXNlIHRoZSBkYXRhIGluIHNsZWVwNzUgZnJvbSBCaWRkbGUgYW5kIEhhbWVybWVzaCAoMTk5MCkgdG8gc3R1ZHkgd2hldGhlciB0aGVyZSBpcyBhIHRyYWRlb2ZmIGJldHdlZW4gdGhlIHRpbWUgc3BlbnQgc2xlZXBpbmcgcGVyIHdlZWsgYW5kIHRoZSB0aW1lIHNwZW50IGluIHBhaWQgd29yay4gV2UgY291bGQgdXNlIGVpdGhlciB2YXJpYWJsZSBhcyB0aGUgZGVwZW5kZW50IHZhcmlhYmxlLgpGb3IgY29uY3JldGVuZXNzLCBlc3RpbWF0ZSB0aGUgbW9kZWwKc2xlZXAgPSDOsjAgKyDOsjF0b3R3cmsgKyB1LAp3aGVyZSBzbGVlcCBpcyBtaW51dGVzIHNwZW50IHNsZWVwaW5nIGF0IG5pZ2h0IHBlciB3ZWVrIGFuZCB0b3R3cmsgaXMgdG90YWwgbWludXRlcyB3b3JrZWQgZHVyaW5nIHRoZSB3ZWVrLgpgYGB7cn0KbW9kZWxfdHdvID0gbG0oc2xlZXAgfnRvdHdyaywgZGF0YSA9IGRmX3R3bykKc3VtbWFyeShtb2RlbF90d28pCgpgYGAKClBBUlQgQS0tIFJlcG9ydCB5b3VyIHJlc3VsdHMgaW4gZXF1YXRpb24gZm9ybSBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zIGFuZCBSMi4gV2hhdCBkb2VzIHRoZSBpbnRlcmNlcHQgaW4gdGhpcyBlcXVhdGlvbiBtZWFuPwoKRXF1YXRpb246IHNsZWVwXiA9IDM1ODYuMzc2OTUgLSAwLjE1MDc1KnRvdHdyawpTYW1wbGUgU2l6ZTogNzA2ClJeMjogMC4xMDMzClRoZSBpbnRlcmNlcHQgc3VnZ2VzdHMgdGhhdCB0aGUgZXN0aW1hdGVkIGFtb3VudCBvZiBzbGVlcCBwZXIgd2VlayBvZiBzb21lb25lIHRoYXQgd29ya3MgMCBob3VycyBwZXIgd2VlayBpcyAzNTk2LjM3CgoKUEFSVCBCLS1JZiB0b3R3cmsgaW5jcmVhc2VzIGJ5IDIgaG91cnMsIGJ5IGhvdyBtdWNoIGlzIHNsZWVwIGVzdGltYXRlZCB0byBmYWxsPyBEbyB5b3UgZmluZCB0aGlzIHRvIGJlIGxhcmdlIGVmZmVjdD8KYGBge3J9CmNoYW5nZV9pbl9zbGVlcCA9IC0wLjE1MDc1KiAxMjAKcHJpbnQoY2hhbmdlX2luX3NsZWVwKQpgYGAKCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpRVUVTVElPTiAzOiAKClVzZSB0aGUgZGF0YSBpbiB3YWdlMSB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbgpgYGB7cn0KZGF0YSgid2FnZTEiKQpkZl90aHJlZSA9IGFzX3RpYmJsZSh3YWdlMSkKdmlldyhkZl90aHJlZSkKP3dhZ2UxCmBgYAoKUEFSVCBBLS0gRXN0aW1hdGUgdGhlIG1vZGVsIHdhZ2UgPSDOsjAgKyDOsjFlZHVjICsgdQpgYGB7cn0KbW9kZWxfdGhyZWUgPSBsbSh3YWdlIH5lZHVjLCBkYXRhID0gZGZfdGhyZWUpCnN1bW1hcnkobW9kZWxfdGhyZWUpCmBgYAoKUEFSVCBCLS0gTm93LCBjcmVhdGUgbmV3IHZhcmlhYmxlcyBmb3Igd2Vla2x5IHdhZ2VzIGFuZCBzZW1lc3RlcnMgb2YgZWR1Y2F0aW9uCmBgYHtyfQojIGFzc3VtZSA4IGhvdXJzIHBlciBkYXkgYW5kIGZpdmUgZGF5cyBwZXIgd2VlawpkZl90aHJlZSR3YWdlX3dlZWtseSA9IHdhZ2UxJHdhZ2UqOCo1IAojIGFzc3VtZSAyIHNlbWVzdGVycyBwZXIgeWVhciAKZGZfdGhyZWUkZWR1Y19zZW1lc3RlciA9IHdhZ2UxJGVkdWMqMgp2aWV3KGRmX3RocmVlKQpgYGAKClBBUlQgQy0tIEVzdGltYXRlIHRoZSBtb2RlbDogd2FnZV93ZWVrbHkgPSDOsjAgKyDOsjFlZHVjX3NlbWVzdGVyICsgdS4gSG93IGRvIHRoZSBjb2VmZmljaWVudHMgY29tcGFyZSB0byB0aG9zZSBpbiBwYXJ0IGE/CmBgYHtyfQptb2RlbF90aHJlZSA9IGxtKHdhZ2Vfd2Vla2x5IH4gZWR1Y19zZW1lc3RlciwgZGF0YSA9IGRmX3RocmVlKQpzdW1tYXJ5KG1vZGVsX3RocmVlKQpgYGAKVGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgbW9kZWwgYXJlIG11Y2ggbGFyZ2VyIHRoYW4gZm9yIHBhcnQgQSwgdGhpcyBpcyBiZWNhdXNlIG5vdyB3YWdlIGlzIG1lYXN1cmVkIHdlZWtseSBpbnN0ZWFkIG9mIGhvdXJseS4gCgpQQVJUIEQtLSBFeHBsYWluIGhvdyB0aGlzIHJlbGF0aW9ucyB0byBQcm9ibGVtIDEwIGluIHRoZSB3cml0dGVuIHBhcnQgb2YgdGhlIGhvbWV3b3JrLgpBY2NvcmRpbmcgdG8gcXVlc3Rpb24gMTAgb2YgdGhlIEhXLCAiQn4xPShjMS9jMilCXjEgYW5kIEJ+MD0oYzEpQl4wIi4gSW4gdGhpcyBxdWVzdGlvbiBjMT01KjgsIHdoaWNoIHJlcHJlc2VudHMgdGhlIGRheXMgYW5kIGhycyB3b3JrZWQgZm9yIHRoZSB3ZWVrIGFuZCBjMj0yIGlzIHRoZSBudW1iZXIgb2Ygc2VtZXN0ZXJzIGluIGEgeWVhci4gVGhlcmVmb3JlIHRoZSByZWxhdGlvbnNoaXAgZnJvbSBxdWVzdGlvbiAxMCBpcyB0cnVlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUVVFU1RJT04gNDogV09PTERSSURHRSAyLkMxMQoKVXNlIHRoZSBkYXRhIGluIEdQQTEgZm9yIHRoaXMgZXhlcmNpc2UKYGBge3J9CmRhdGEoImdwYTEiKQpkZl9mb3VyID0gYXNfdGliYmxlKGdwYTEpCnZpZXcoZGZfZm91cikKP2dwYTEKCmBgYApVc2UgP2dwYTEgdG8gbGVhcm4gYWJvdXQgdGhlIHNhbXBsZSBhbmQgdmFyaWFibGVzCkl0IGlzIGEgc2FtcGxlIG9mIE1pZ2hpZ2FuIFN0YXRlIFVuaXZlcnNpdHkgdW5kZXJncmFkdWF0ZXMgZnJvbSB0aGUgbWlkLTE5OTBzLCBhbmQgaW5jbHVkZXMgY3VycmVudCBjb2xsZWdlCkdQQSAoY29sR1BBKSBhbmQgYSBiaW5hcnkgdmFyaWFibGUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzdHVkZW50IG93bmVkIGEgcGVyc29uYWwgY29tcHV0ZXIgKFBDKS4KClBBUlQgQS0tIEhvdyBtYW55IHN0dWRlbnRzIGFyZSBpbiB0aGUgc2FtcGxlPyBGaW5kIHRoZSBhdmVyYWdlIGFuZCBoaWdoZXN0IGNvbGxlZ2UgR1BBcy4KYGBge3J9Cm1heChkZl9mb3VyJGNvbEdQQSkKbWVhbihkZl9mb3VyJGNvbEdQQSkKCmBgYAoKUEFSVCBCLS0gSG93IG1hbnkgc3R1ZGVudHMgb3duZWQgdGhlaXIgb3duIFBDPwpgYGB7cn0KZGZfZm91ciAlPiUKICBmaWx0ZXIoZGZfZm91ciRQQyA9PTEpICU+JQogIG5yb3coKQpgYGAKNTYgc3R1ZGVudHMgb3duIHRoZWlyIG93biBQQwoKUEFSVCBDLS0gRXN0aW1hdGUgdGhlIHNpbXBsZSByZWdyZXNzaW9uIGVxdWF0aW9uIGNvbEdQQT3OsjAgK86yMVBDK3UgYW5kIHJlcG9ydCB5b3VyIGVzdGltYXRlcyBmb3IgzrIwIGFuZCDOsjEuIEludGVycHJldCB0aGVzZSBlc3RpbWF0ZXMsIGluY2x1ZGluZyBhIGRpc2N1c3Npb24gb2YgdGhlIG1hZ25pdHVkZXMuCmBgYHtyfQptb2RlbF9mb3VyID0gbG0oY29sR1BBIH4gUEMsIGRhdGEgPSBkZl9mb3VyKQpzdW1tYXJ5KG1vZGVsX2ZvdXIpCmBgYApUaGUgQjAgdmFsdWUgaXMgMi45ODk0MS5UaGlzIGVzdGltYXRlcyB3aGVuIGEgc3R1ZGVudCBkb2VzIG5vdCBvd24gYSBQQyB0aGUgYXZnIGNvbEdQQSBpcyAyLjk5ClRoZSBCMSB2YWx1ZSBpcyAwLjE2OTUyLlRoaXMgZXN0aW1hdGVzIHRoYXQgZm9yIGVhY2ggYWRkaXRpb25hbCB1bml0IG9mIFBDIG9uIGF2ZyB0aGUgY29sR1BBIGluY3JlYXNlcyBieSAwLjE2OTUyCgpUaGUgQjAgdmFsdWUgd2FzIGhpZ2hlciB0aGF0IHdvdWxkIG1lYW4gdGhhdCBvbiBhdmcgc3R1ZGVudHMgd2l0aG91dCBhIFBDIHdpbGwgaGF2ZSBhIGhpZ2hlciBHUEEsIGhvd2V2ZXIgdGhpcyBkb2VzIGltcGFjdCB0aGVpciBHUEEuCgoKClBBUlQgRC0tIFdoYXQgaXMgdGhlIFItc3F1YXJlZCBmcm9tIHRoZSByZWdyZXNzaW9uPyBXaGF0IGRvIHlvdSBtYWtlIG9mIGl0cyBtYWduaXR1ZGU/CgpUaGUgUl4yIGlzIDAuMDQ5OTksIHRoaXMgbWVhbnMgdGhhdCBvd25pbmcgYSBQQyBpcyBhYm91dCA0LjklIHRvIGJsYW1lIGZvciB0aGUgdmFyaWF0aW9uIG9mIGNvbEdQQS4gVGhpcyBpcyBhIHNtYWxsIHBlcmNlbnRhZ2UsIG1lYW5pbmcgdGhhdCBvdGhlciBmYWN0b3JzIGhhdmUgYSBoaWdoZXIgaW1wYWN0IG9uIHRoZSBHUEEgb2Ygc3R1ZGVudHMuCgoKUEFSVCBFLS0gRG9lcyB5b3VyIGZpbmRpbmcgaW4gcGFydCAoYykgaW1wbHkgdGhhdCBvd25pbmcgYSBQQyBoYXMgYSBjYXVzYWwgZWZmZWN0IG9uIGNvbEdQQT8gRXhwbGFpbgoKTm8sIG93bmluZyBhIFBDIGRvZXMgbm90IGhhdmUgYSBjYXVzYWwgZWZmZWN0IG9uIGNvbEdQQS4gSW4gb3VyIG1vZGVsIHdlIGZpbmQgdGhhdCB0aGVyZSBpcyBvbmx5IGFib3V0IDQuOSUgb2YgdGhlIHZhcmlhdGlvbiBiZXR3ZWVuIG93bmluZyBhIFBDIGFuZCBjb2xHUEEuIFRoaXMgc3VnZ2VzdHMgdGhhdCBvdGhlciBmYWN0b3JzIGhhdmUgYSBoaWdoZXIgaW1wYWN0IGFuZCBtb3JlIGRpcmVjdCByZWxhdGlvbnNoaXAgb24gR1BBLiBIb3dldmVyLCBhIGhpZ2hlciBSXjIgdmFsdWUgd291bGRuJ3QgbmVjZXNzYXJpbHkgZXhwbGFpbiBhIGNhdXNhbCByZWxhdGlvbnNoaXAsIGJ1dCBpdCB3b3VsZCBzdWdnZXN0IHRoYXQgdGhlIGVzdGltYXRlZCBjb2xHUEEgdmFsdWVzIHdlcmUgbW9yZSBjbG9zZWx5IGFjY3VyYXRlIHRvIHRoZSBhY3R1YWwgR1BBIHZhbHVlcy4gIAoKCgoK