#PLOT data

library(readxl)
no_negative_data <- read_excel("C:/Users/cngon/Documents/no negative data.xlsx", sheet = "all thesis data no negative")
cleaned_up_thesis_data_5 <- read_excel("C:/Users/cngon/Documents/no negative data.xlsx", sheet = "transformed working hours")
gpatotvidhrs <- read_excel("C:/Users/cngon/Documents/no negative data.xlsx", sheet = "X1video hours")
gpatotsex <- read_excel("C:/Users/cngon/Documents/no negative data.xlsx", sheet = "X1SEX")
gpatotrace <- read_excel("C:/Users/cngon/Documents/no negative data.xlsx", sheet = "X1RACE")
GPA_total <- read_excel("C:/Users/cngon/Documents/no negative data.xlsx", sheet = "X3TGPATOT")
gpatotfamincbin2011 <- read_excel("C:/Users/cngon/Documents/no negative data.xlsx", sheet = "X2FAMINCOMEBIN")
hs_completion <- read_excel("C:/Users/cngon/Documents/no negative data.xlsx", sheet = "gradto1hrvideo")
gpatotfamincbin2011$X2FAMINCOMEBIN <- factor(gpatotfamincbin2011$X2FAMINCOMEBIN)
gpatotrace$X1RACE <- factor(gpatotrace$X1RACE)
gpatotsex$X1SEX <- factor(gpatotsex$X1SEX)
gpatotvidhrs$S1HRVIDEO <- factor(gpatotvidhrs$S1HRVIDEO)
cleaned_up_thesis_data_5$S3CURJOBFTrnsfrmd <- factor(cleaned_up_thesis_data_5$S3CURJOBFTrnsfrmd)

hs_completion$S1HRVIDEO <- factor(hs_completion$S1HRVIDEO)
hs_completion$X3HSCOMPSTAT <- factor(hs_completion$X3HSCOMPSTAT)
no_negative_data$S1HRVIDEO <- factor(no_negative_data$S1HRVIDEO)
no_negative_data$X1SEX <- factor(no_negative_data$X1SEX)
no_negative_data$X1RACE <- factor(no_negative_data$X1RACE)
no_negative_data$S3CURJOBFTrnsfrmd <- factor(no_negative_data$S3CURJOBFTrnsfrmd)
no_negative_data$X2FAMINCOMEBIN <- factor(no_negative_data$X2FAMINCOMEBIN)
library(ggplot2)
ggplot (GPA_total, aes(x=X3TGPATOT)) + geom_density()

ggplot (GPA_total, aes(x=X3TGPATOT)) + geom_histogram(binwidth=.5)

y <- qunif(ppoints(length(GPA_total$X3TGPATOT)))
qqnorm(GPA_total$X3TGPATOT,main="GPAs")
qqline(GPA_total$X3TGPATOT)

#GGPLOT, QNORM, QQLINE
ks.test(GPA_total$X3TGPATOT,y='pnorm',alternative='two.sided')
Warning in ks.test(GPA_total$X3TGPATOT, y = "pnorm", alternative = "two.sided") :
  ties should not be present for the Kolmogorov-Smirnov test

    One-sample Kolmogorov-Smirnov test

data:  GPA_total$X3TGPATOT
D = 0.87335, p-value < 2.2e-16
alternative hypothesis: two-sided
#not normally distributed
library(broom) #for cleaner tables
#anova
gpatotvd.anova<- aov(X3TGPATOT ~ S1HRVIDEO, data = gpatotvidhrs)
tidy(gpatotvd.anova)
#test for homoscedasticity
par(mfrow=c(2,2))
plot(gpatotvd.anova)
par(mfrow=c(1,1))

#tukey test
gpatotvd.anova.tukey<-TukeyHSD(gpatotvd.anova,ordered = TRUE, conf.level = 0.95)
tidy(gpatotvd.anova.tukey)
plot(gpatotvd.anova.tukey, las = 1)


# Levene's test
library(carData)

leveneTest(X3TGPATOT ~ S1HRVIDEO,
  data = gpatotvidhrs)
Levene's Test for Homogeneity of Variance (center = median)
         Df F value  Pr(>F)  
group     5  1.8731 0.09539 .
      18844                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#significant b/c p<.05 and the variances of the groups are similar because Levene test p>0.05
library(broom) #for cleaner tables
#anova
gpatotcurjbft.anova<- aov(X3TGPATOT ~ S3CURJOBFTrnsfrmd, data = cleaned_up_thesis_data_5)
tidy(gpatotcurjbft.anova)
#test for homoscedasticity
par(mfrow=c(2,2))
plot(gpatotcurjbft.anova)
par(mfrow=c(1,1))

#tukey test
gpatotcurjbft.anova.tukey<-TukeyHSD(gpatotcurjbft.anova)
tidy(gpatotcurjbft.anova.tukey)
plot(gpatotcurjbft.anova.tukey, las = 1)

# Levene's test
library(car)
Loading required package: carData
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
leveneTest(X3TGPATOT ~ S3CURJOBFTrnsfrmd, data = cleaned_up_thesis_data_5)
Levene's Test for Homogeneity of Variance (center = median)
         Df F value    Pr(>F)    
group     2  70.361 < 2.2e-16 ***
      15092                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#significant b/c p<.05 and the variances of the groups are not similar because Levene test p<0.05

#perform Welch's ANOVA
oneway.test(X3TGPATOT ~ S3CURJOBFTrnsfrmd, data = cleaned_up_thesis_data_5, var.equal=FALSE)

    One-way analysis of means (not assuming equal variances)

data:  X3TGPATOT and S3CURJOBFTrnsfrmd
F = 132.53, num df = 2.0, denom df = 5628.7, p-value < 2.2e-16
#pvalue is <.05 which means we can reject the null hypothesis that the gpa totals are equal between the current job ft groups

#there is significance 
library(broom) #for cleaner tables
#anova
gpatotfamincbin2011.anova<- aov(X3TGPATOT ~ X2FAMINCOMEBIN, data = gpatotfamincbin2011)
tidy(gpatotfamincbin2011.anova)
#test for homoscedasticity
par(mfrow=c(2,2))
plot(gpatotcurjbft.anova)
par(mfrow=c(1,1))

#tukey test
gpatotfamincbin2011.anova.tukey<-TukeyHSD(gpatotfamincbin2011.anova, ordered = TRUE, conf.level = 0.95)
tidy(gpatotfamincbin2011.anova.tukey)
plot(gpatotfamincbin2011.anova.tukey, las = 1)


# Levene's test
library(car)

leveneTest(X3TGPATOT ~ X2FAMINCOMEBIN, data = gpatotfamincbin2011)
Levene's Test for Homogeneity of Variance (center = median)
         Df F value    Pr(>F)    
group     9   27.16 < 2.2e-16 ***
      17004                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#significant b/c p<.05 and the variances of the groups are not similar because Levene test p<0.05

#perform Welch's ANOVA
oneway.test(X3TGPATOT ~ X2FAMINCOMEBIN, data = gpatotfamincbin2011, var.equal=FALSE)

    One-way analysis of means (not assuming equal variances)

data:  X3TGPATOT and X2FAMINCOMEBIN
F = 211.09, num df = 9.0, denom df = 5320.9, p-value < 2.2e-16
#pvalue is <.05 which means we can reject the null hypothesis that the gpa totals are equal between the fam income bin2011 groups
library(broom) #for cleaner tables
#anova
gpatotraces.anova<- aov(X3TGPATOT ~ X1RACE, data = gpatotrace)
tidy(gpatotraces.anova)
#test for homoscedasticity
par(mfrow=c(2,2))
plot(gpatotraces.anova)
par(mfrow=c(1,1))

#tukey test
gpatotraces.anova.tukey<-TukeyHSD(gpatotraces.anova)
tidy(gpatotraces.anova.tukey)
plot(gpatotraces.anova.tukey, las = 1)

# Levene's test
library(car)

leveneTest(X3TGPATOT ~ X1RACE, data = gpatotrace)
Levene's Test for Homogeneity of Variance (center = median)
         Df F value    Pr(>F)    
group     7  9.6196 5.361e-12 ***
      18842                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#significant b/c p<.05 and the variances of the groups are not similar because Levene test p<0.05

#perform Welch's ANOVA
oneway.test(X3TGPATOT ~ X1RACE, data = gpatotrace, var.equal=FALSE)

    One-way analysis of means (not assuming equal variances)

data:  X3TGPATOT and X1RACE
F = 215.26, num df = 7.00, denom df = 800.49, p-value < 2.2e-16
#pvalue is <.05 which means we can reject the null hypothesis that the gpa totals are equal between the race groups
library(broom) #for cleaner tables
#anova
gpatotsex.anova<- aov(X3TGPATOT ~ X1SEX, data = gpatotsex)
tidy(gpatotsex.anova)
#test for homoscedasticity
par(mfrow=c(2,2))
plot(gpatotsex.anova)
par(mfrow=c(1,1))

#tukey test
gpatotsex.anova.tukey<-TukeyHSD(gpatotsex.anova)
tidy(gpatotsex.anova.tukey)
plot(gpatotsex.anova.tukey, las = 1)

# Levene's test
library(car)

leveneTest(X3TGPATOT ~ X1SEX, data = gpatotsex)
Levene's Test for Homogeneity of Variance (center = median)
         Df F value    Pr(>F)    
group     1   72.34 < 2.2e-16 ***
      18848                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#significant b/c p<.05 and the variances of the groups are not similar because Levene test p<0.05

#perform Welch's ANOVA
oneway.test(X3TGPATOT ~ X1SEX, data = gpatotsex, var.equal=FALSE)

    One-way analysis of means (not assuming equal variances)

data:  X3TGPATOT and X1SEX
F = 677.4, num df = 1, denom df = 18839, p-value < 2.2e-16
#pvalue is <.05 which means we can reject the null hypothesis that the gpa totals are equal between the sex groups
chisq.test(hs_completion$S1HRVIDEO, hs_completion$X3HSCOMPSTAT, correct=FALSE)
Warning in chisq.test(hs_completion$S1HRVIDEO, hs_completion$X3HSCOMPSTAT,  :
  Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  hs_completion$S1HRVIDEO and hs_completion$X3HSCOMPSTAT
X-squared = 141.14, df = 20, p-value < 2.2e-16
#Would affect each other.

chisq.test(no_negative_data$S1HRVIDEO, no_negative_data$X1SEX, correct=FALSE)

    Pearson's Chi-squared test

data:  no_negative_data$S1HRVIDEO and no_negative_data$X1SEX
X-squared = 2522.2, df = 5, p-value < 2.2e-16
chisq.test(no_negative_data$S1HRVIDEO, no_negative_data$X1RACE, correct=FALSE)
Warning in chisq.test(no_negative_data$S1HRVIDEO, no_negative_data$X1RACE,  :
  Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  no_negative_data$S1HRVIDEO and no_negative_data$X1RACE
X-squared = 98.423, df = 35, p-value = 6.102e-08
chisq.test(no_negative_data$S1HRVIDEO, no_negative_data$S3CURJOBFTrnsfrmd, correct=FALSE)

    Pearson's Chi-squared test

data:  no_negative_data$S1HRVIDEO and no_negative_data$S3CURJOBFTrnsfrmd
X-squared = 96.341, df = 10, p-value = 2.935e-16
chisq.test(no_negative_data$S1HRVIDEO, no_negative_data$X2FAMINCOMEBIN, correct=FALSE)

    Pearson's Chi-squared test

data:  no_negative_data$S1HRVIDEO and no_negative_data$X2FAMINCOMEBIN
X-squared = 146.57, df = 45, p-value = 1.098e-12
library(broom) #for cleaner tables
#anova for all variables
all.anova<- aov( X3TGPATOT ~ S1HRVIDEO*X1SEX*X1RACE*X2FAMINCOMEBIN*S3CURJOBFTrnsfrmd,data=no_negative_data)
tidy(all.anova)
#test for homoscedasticity
par(mfrow=c(2,2))
plot(all.anova)
Warning: not plotting observations with leverage one:
  39, 115, 150, 206, 210, 270, 271, 385, 641, 696, 739, 770, 849, 1131, 1158, 1528, 2062, 2265, 2411, 2417, 2440, 2716, 2722, 3146, 3234, 3325, 3327, 3357, 3441, 3520, 3552, 3783, 3874, 4003, 4085, 4109, 4117, 4175, 4191, 4199, 4747, 4857, 4993, 5075, 5083, 5093, 5153, 5451, 5476, 5492, 5602, 5644, 5726, 5727, 5736, 5755, 5771, 5777, 5861, 5866, 5877, 5978, 6238, 6294, 6347, 6457, 6526, 6536, 6702, 6705, 6719, 6814, 6826, 6834, 6853, 6936, 6990, 7081, 7091, 7094, 7100, 7106, 7142, 7154, 7159, 7195, 7196, 7206, 7216, 7220, 7249, 7304, 7403, 7526, 7554, 7686, 7687, 7723, 7730, 7745, 7748, 7834, 7877, 7889, 7909, 7918, 7927, 7980, 8010, 8044, 8085, 8106, 8151, 8163, 8257, 8308, 8385, 8438, 8472, 8483, 8527, 8553, 8605, 8623, 8655, 8661, 8677, 8679, 8737, 8766, 8785, 8792, 8798, 8822, 8828, 8871, 8877, 8886, 8888, 8917, 8919, 8935, 8945, 8952, 8960, 8983, 9016, 9043, 9054, 9120, 9142, 9173, 9182, 9207, 9215, 9241, 9322, 9326, 9338, 9404, 9463, 9 [... truncated]
Warning in sqrt(crit * p * (1 - hh)/hh) : NaNs produced
Warning in sqrt(crit * p * (1 - hh)/hh) : NaNs produced
par(mfrow=c(1,1))

#tukey test
all.anova.tukey<-TukeyHSD(all.anova)
tidy(all.anova.tukey)
plot(all.anova.tukey, las = 1)

# Levene's test
library(car)

leveneTest(X3TGPATOT ~ S1HRVIDEO* X1SEX*X1RACE*X2FAMINCOMEBIN*S3CURJOBFTrnsfrmd, data =no_negative_data)
Levene's Test for Homogeneity of Variance (center = median)
         Df F value    Pr(>F)    
group  1329  1.2752 3.221e-10 ***
      12951                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#significant b/c p<.05 and the variances of the groups are not similar because Levene test p<0.05
library(broom) #for cleaner tables
#anova for all variables with confounding variables
GPAanovaWBlocking <- aov(X3TGPATOT ~ S1HRVIDEO + X1SEX + X1RACE +X2FAMINCOMEBIN + S3CURJOBFTrnsfrmd, data =no_negative_data)
tidy(GPAanovaWBlocking)
#test for homoscedasticity
par(mfrow=c(2,2))
plot(GPAanovaWBlocking)
par(mfrow=c(1,1))

#tukey test
GPAanovaWBlocking.tukey<-TukeyHSD(GPAanovaWBlocking)
tidy(GPAanovaWBlocking.tukey)
plot(GPAanovaWBlocking.tukey, las = 1)

NA
NA
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojUExPVCBkYXRhDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQpub19uZWdhdGl2ZV9kYXRhIDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL2NuZ29uL0RvY3VtZW50cy9ubyBuZWdhdGl2ZSBkYXRhLnhsc3giLCBzaGVldCA9ICJhbGwgdGhlc2lzIGRhdGEgbm8gbmVnYXRpdmUiKQ0KY2xlYW5lZF91cF90aGVzaXNfZGF0YV81IDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL2NuZ29uL0RvY3VtZW50cy9ubyBuZWdhdGl2ZSBkYXRhLnhsc3giLCBzaGVldCA9ICJ0cmFuc2Zvcm1lZCB3b3JraW5nIGhvdXJzIikNCmdwYXRvdHZpZGhycyA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9jbmdvbi9Eb2N1bWVudHMvbm8gbmVnYXRpdmUgZGF0YS54bHN4Iiwgc2hlZXQgPSAiWDF2aWRlbyBob3VycyIpDQpncGF0b3RzZXggPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvY25nb24vRG9jdW1lbnRzL25vIG5lZ2F0aXZlIGRhdGEueGxzeCIsIHNoZWV0ID0gIlgxU0VYIikNCmdwYXRvdHJhY2UgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvY25nb24vRG9jdW1lbnRzL25vIG5lZ2F0aXZlIGRhdGEueGxzeCIsIHNoZWV0ID0gIlgxUkFDRSIpDQpHUEFfdG90YWwgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvY25nb24vRG9jdW1lbnRzL25vIG5lZ2F0aXZlIGRhdGEueGxzeCIsIHNoZWV0ID0gIlgzVEdQQVRPVCIpDQpncGF0b3RmYW1pbmNiaW4yMDExIDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL2NuZ29uL0RvY3VtZW50cy9ubyBuZWdhdGl2ZSBkYXRhLnhsc3giLCBzaGVldCA9ICJYMkZBTUlOQ09NRUJJTiIpDQpoc19jb21wbGV0aW9uIDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL2NuZ29uL0RvY3VtZW50cy9ubyBuZWdhdGl2ZSBkYXRhLnhsc3giLCBzaGVldCA9ICJncmFkdG8xaHJ2aWRlbyIpDQpncGF0b3RmYW1pbmNiaW4yMDExJFgyRkFNSU5DT01FQklOIDwtIGZhY3RvcihncGF0b3RmYW1pbmNiaW4yMDExJFgyRkFNSU5DT01FQklOKQ0KZ3BhdG90cmFjZSRYMVJBQ0UgPC0gZmFjdG9yKGdwYXRvdHJhY2UkWDFSQUNFKQ0KZ3BhdG90c2V4JFgxU0VYIDwtIGZhY3RvcihncGF0b3RzZXgkWDFTRVgpDQpncGF0b3R2aWRocnMkUzFIUlZJREVPIDwtIGZhY3RvcihncGF0b3R2aWRocnMkUzFIUlZJREVPKQ0KY2xlYW5lZF91cF90aGVzaXNfZGF0YV81JFMzQ1VSSk9CRlRybnNmcm1kIDwtIGZhY3RvcihjbGVhbmVkX3VwX3RoZXNpc19kYXRhXzUkUzNDVVJKT0JGVHJuc2ZybWQpDQoNCmhzX2NvbXBsZXRpb24kUzFIUlZJREVPIDwtIGZhY3Rvcihoc19jb21wbGV0aW9uJFMxSFJWSURFTykNCmhzX2NvbXBsZXRpb24kWDNIU0NPTVBTVEFUIDwtIGZhY3Rvcihoc19jb21wbGV0aW9uJFgzSFNDT01QU1RBVCkNCm5vX25lZ2F0aXZlX2RhdGEkUzFIUlZJREVPIDwtIGZhY3Rvcihub19uZWdhdGl2ZV9kYXRhJFMxSFJWSURFTykNCm5vX25lZ2F0aXZlX2RhdGEkWDFTRVggPC0gZmFjdG9yKG5vX25lZ2F0aXZlX2RhdGEkWDFTRVgpDQpub19uZWdhdGl2ZV9kYXRhJFgxUkFDRSA8LSBmYWN0b3Iobm9fbmVnYXRpdmVfZGF0YSRYMVJBQ0UpDQpub19uZWdhdGl2ZV9kYXRhJFMzQ1VSSk9CRlRybnNmcm1kIDwtIGZhY3Rvcihub19uZWdhdGl2ZV9kYXRhJFMzQ1VSSk9CRlRybnNmcm1kKQ0Kbm9fbmVnYXRpdmVfZGF0YSRYMkZBTUlOQ09NRUJJTiA8LSBmYWN0b3Iobm9fbmVnYXRpdmVfZGF0YSRYMkZBTUlOQ09NRUJJTikNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdCAoR1BBX3RvdGFsLCBhZXMoeD1YM1RHUEFUT1QpKSArIGdlb21fZGVuc2l0eSgpDQpnZ3Bsb3QgKEdQQV90b3RhbCwgYWVzKHg9WDNUR1BBVE9UKSkgKyBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aD0uNSkNCnkgPC0gcXVuaWYocHBvaW50cyhsZW5ndGgoR1BBX3RvdGFsJFgzVEdQQVRPVCkpKQ0KcXFub3JtKEdQQV90b3RhbCRYM1RHUEFUT1QsbWFpbj0iR1BBcyIpDQpxcWxpbmUoR1BBX3RvdGFsJFgzVEdQQVRPVCkNCiNHR1BMT1QsIFFOT1JNLCBRUUxJTkUNCmBgYA0KYGBge3J9DQprcy50ZXN0KEdQQV90b3RhbCRYM1RHUEFUT1QseT0ncG5vcm0nLGFsdGVybmF0aXZlPSd0d28uc2lkZWQnKQ0KI25vdCBub3JtYWxseSBkaXN0cmlidXRlZA0KYGBgDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGJyb29tKSAjZm9yIGNsZWFuZXIgdGFibGVzDQojYW5vdmENCmdwYXRvdHZkLmFub3ZhPC0gYW92KFgzVEdQQVRPVCB+IFMxSFJWSURFTywgZGF0YSA9IGdwYXRvdHZpZGhycykNCnRpZHkoZ3BhdG90dmQuYW5vdmEpDQojdGVzdCBmb3IgaG9tb3NjZWRhc3RpY2l0eQ0KcGFyKG1mcm93PWMoMiwyKSkNCnBsb3QoZ3BhdG90dmQuYW5vdmEpDQpwYXIobWZyb3c9YygxLDEpKQ0KI3R1a2V5IHRlc3QNCmdwYXRvdHZkLmFub3ZhLnR1a2V5PC1UdWtleUhTRChncGF0b3R2ZC5hbm92YSxvcmRlcmVkID0gVFJVRSwgY29uZi5sZXZlbCA9IDAuOTUpDQp0aWR5KGdwYXRvdHZkLmFub3ZhLnR1a2V5KQ0KcGxvdChncGF0b3R2ZC5hbm92YS50dWtleSwgbGFzID0gMSkNCg0KIyBMZXZlbmUncyB0ZXN0DQpsaWJyYXJ5KGNhckRhdGEpDQoNCmxldmVuZVRlc3QoWDNUR1BBVE9UIH4gUzFIUlZJREVPLA0KICBkYXRhID0gZ3BhdG90dmlkaHJzKQ0KDQojc2lnbmlmaWNhbnQgYi9jIHA8LjA1IGFuZCB0aGUgdmFyaWFuY2VzIG9mIHRoZSBncm91cHMgYXJlIHNpbWlsYXIgYmVjYXVzZSBMZXZlbmUgdGVzdCBwPjAuMDUNCmBgYA0KDQoNCmBgYHtyfQ0KbGlicmFyeShicm9vbSkgI2ZvciBjbGVhbmVyIHRhYmxlcw0KI2Fub3ZhDQpncGF0b3RjdXJqYmZ0LmFub3ZhPC0gYW92KFgzVEdQQVRPVCB+IFMzQ1VSSk9CRlRybnNmcm1kLCBkYXRhID0gY2xlYW5lZF91cF90aGVzaXNfZGF0YV81KQ0KdGlkeShncGF0b3RjdXJqYmZ0LmFub3ZhKQ0KI3Rlc3QgZm9yIGhvbW9zY2VkYXN0aWNpdHkNCnBhcihtZnJvdz1jKDIsMikpDQpwbG90KGdwYXRvdGN1cmpiZnQuYW5vdmEpDQpwYXIobWZyb3c9YygxLDEpKQ0KI3R1a2V5IHRlc3QNCmdwYXRvdGN1cmpiZnQuYW5vdmEudHVrZXk8LVR1a2V5SFNEKGdwYXRvdGN1cmpiZnQuYW5vdmEpDQp0aWR5KGdwYXRvdGN1cmpiZnQuYW5vdmEudHVrZXkpDQpwbG90KGdwYXRvdGN1cmpiZnQuYW5vdmEudHVrZXksIGxhcyA9IDEpDQojIExldmVuZSdzIHRlc3QNCmxpYnJhcnkoY2FyKQ0KDQpsZXZlbmVUZXN0KFgzVEdQQVRPVCB+IFMzQ1VSSk9CRlRybnNmcm1kLCBkYXRhID0gY2xlYW5lZF91cF90aGVzaXNfZGF0YV81KQ0KI3NpZ25pZmljYW50IGIvYyBwPC4wNSBhbmQgdGhlIHZhcmlhbmNlcyBvZiB0aGUgZ3JvdXBzIGFyZSBub3Qgc2ltaWxhciBiZWNhdXNlIExldmVuZSB0ZXN0IHA8MC4wNQ0KDQojcGVyZm9ybSBXZWxjaCdzIEFOT1ZBDQpvbmV3YXkudGVzdChYM1RHUEFUT1QgfiBTM0NVUkpPQkZUcm5zZnJtZCwgZGF0YSA9IGNsZWFuZWRfdXBfdGhlc2lzX2RhdGFfNSwgdmFyLmVxdWFsPUZBTFNFKQ0KI3B2YWx1ZSBpcyA8LjA1IHdoaWNoIG1lYW5zIHdlIGNhbiByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZSBncGEgdG90YWxzIGFyZSBlcXVhbCBiZXR3ZWVuIHRoZSBjdXJyZW50IGpvYiBmdCBncm91cHMNCg0KI3RoZXJlIGlzIHNpZ25pZmljYW5jZSANCmBgYA0KYGBge3J9DQpsaWJyYXJ5KGJyb29tKSAjZm9yIGNsZWFuZXIgdGFibGVzDQojYW5vdmENCmdwYXRvdGZhbWluY2JpbjIwMTEuYW5vdmE8LSBhb3YoWDNUR1BBVE9UIH4gWDJGQU1JTkNPTUVCSU4sIGRhdGEgPSBncGF0b3RmYW1pbmNiaW4yMDExKQ0KdGlkeShncGF0b3RmYW1pbmNiaW4yMDExLmFub3ZhKQ0KI3Rlc3QgZm9yIGhvbW9zY2VkYXN0aWNpdHkNCnBhcihtZnJvdz1jKDIsMikpDQpwbG90KGdwYXRvdGN1cmpiZnQuYW5vdmEpDQpwYXIobWZyb3c9YygxLDEpKQ0KI3R1a2V5IHRlc3QNCmdwYXRvdGZhbWluY2JpbjIwMTEuYW5vdmEudHVrZXk8LVR1a2V5SFNEKGdwYXRvdGZhbWluY2JpbjIwMTEuYW5vdmEsIG9yZGVyZWQgPSBUUlVFLCBjb25mLmxldmVsID0gMC45NSkNCnRpZHkoZ3BhdG90ZmFtaW5jYmluMjAxMS5hbm92YS50dWtleSkNCnBsb3QoZ3BhdG90ZmFtaW5jYmluMjAxMS5hbm92YS50dWtleSwgbGFzID0gMSkNCg0KIyBMZXZlbmUncyB0ZXN0DQpsaWJyYXJ5KGNhcikNCg0KbGV2ZW5lVGVzdChYM1RHUEFUT1QgfiBYMkZBTUlOQ09NRUJJTiwgZGF0YSA9IGdwYXRvdGZhbWluY2JpbjIwMTEpDQojc2lnbmlmaWNhbnQgYi9jIHA8LjA1IGFuZCB0aGUgdmFyaWFuY2VzIG9mIHRoZSBncm91cHMgYXJlIG5vdCBzaW1pbGFyIGJlY2F1c2UgTGV2ZW5lIHRlc3QgcDwwLjA1DQoNCiNwZXJmb3JtIFdlbGNoJ3MgQU5PVkENCm9uZXdheS50ZXN0KFgzVEdQQVRPVCB+IFgyRkFNSU5DT01FQklOLCBkYXRhID0gZ3BhdG90ZmFtaW5jYmluMjAxMSwgdmFyLmVxdWFsPUZBTFNFKQ0KI3B2YWx1ZSBpcyA8LjA1IHdoaWNoIG1lYW5zIHdlIGNhbiByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZSBncGEgdG90YWxzIGFyZSBlcXVhbCBiZXR3ZWVuIHRoZSBmYW0gaW5jb21lIGJpbjIwMTEgZ3JvdXBzDQoNCmBgYA0KDQoNCmBgYHtyfQ0KbGlicmFyeShicm9vbSkgI2ZvciBjbGVhbmVyIHRhYmxlcw0KI2Fub3ZhDQpncGF0b3RyYWNlcy5hbm92YTwtIGFvdihYM1RHUEFUT1QgfiBYMVJBQ0UsIGRhdGEgPSBncGF0b3RyYWNlKQ0KdGlkeShncGF0b3RyYWNlcy5hbm92YSkNCiN0ZXN0IGZvciBob21vc2NlZGFzdGljaXR5DQpwYXIobWZyb3c9YygyLDIpKQ0KcGxvdChncGF0b3RyYWNlcy5hbm92YSkNCnBhcihtZnJvdz1jKDEsMSkpDQojdHVrZXkgdGVzdA0KZ3BhdG90cmFjZXMuYW5vdmEudHVrZXk8LVR1a2V5SFNEKGdwYXRvdHJhY2VzLmFub3ZhKQ0KdGlkeShncGF0b3RyYWNlcy5hbm92YS50dWtleSkNCnBsb3QoZ3BhdG90cmFjZXMuYW5vdmEudHVrZXksIGxhcyA9IDEpDQojIExldmVuZSdzIHRlc3QNCmxpYnJhcnkoY2FyKQ0KDQpsZXZlbmVUZXN0KFgzVEdQQVRPVCB+IFgxUkFDRSwgZGF0YSA9IGdwYXRvdHJhY2UpDQojc2lnbmlmaWNhbnQgYi9jIHA8LjA1IGFuZCB0aGUgdmFyaWFuY2VzIG9mIHRoZSBncm91cHMgYXJlIG5vdCBzaW1pbGFyIGJlY2F1c2UgTGV2ZW5lIHRlc3QgcDwwLjA1DQoNCiNwZXJmb3JtIFdlbGNoJ3MgQU5PVkENCm9uZXdheS50ZXN0KFgzVEdQQVRPVCB+IFgxUkFDRSwgZGF0YSA9IGdwYXRvdHJhY2UsIHZhci5lcXVhbD1GQUxTRSkNCiNwdmFsdWUgaXMgPC4wNSB3aGljaCBtZWFucyB3ZSBjYW4gcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgdGhhdCB0aGUgZ3BhIHRvdGFscyBhcmUgZXF1YWwgYmV0d2VlbiB0aGUgcmFjZSBncm91cHMNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCmxpYnJhcnkoYnJvb20pICNmb3IgY2xlYW5lciB0YWJsZXMNCiNhbm92YQ0KZ3BhdG90c2V4LmFub3ZhPC0gYW92KFgzVEdQQVRPVCB+IFgxU0VYLCBkYXRhID0gZ3BhdG90c2V4KQ0KdGlkeShncGF0b3RzZXguYW5vdmEpDQojdGVzdCBmb3IgaG9tb3NjZWRhc3RpY2l0eQ0KcGFyKG1mcm93PWMoMiwyKSkNCnBsb3QoZ3BhdG90c2V4LmFub3ZhKQ0KcGFyKG1mcm93PWMoMSwxKSkNCiN0dWtleSB0ZXN0DQpncGF0b3RzZXguYW5vdmEudHVrZXk8LVR1a2V5SFNEKGdwYXRvdHNleC5hbm92YSkNCnRpZHkoZ3BhdG90c2V4LmFub3ZhLnR1a2V5KQ0KcGxvdChncGF0b3RzZXguYW5vdmEudHVrZXksIGxhcyA9IDEpDQojIExldmVuZSdzIHRlc3QNCmxpYnJhcnkoY2FyKQ0KDQpsZXZlbmVUZXN0KFgzVEdQQVRPVCB+IFgxU0VYLCBkYXRhID0gZ3BhdG90c2V4KQ0KI3NpZ25pZmljYW50IGIvYyBwPC4wNSBhbmQgdGhlIHZhcmlhbmNlcyBvZiB0aGUgZ3JvdXBzIGFyZSBub3Qgc2ltaWxhciBiZWNhdXNlIExldmVuZSB0ZXN0IHA8MC4wNQ0KDQojcGVyZm9ybSBXZWxjaCdzIEFOT1ZBDQpvbmV3YXkudGVzdChYM1RHUEFUT1QgfiBYMVNFWCwgZGF0YSA9IGdwYXRvdHNleCwgdmFyLmVxdWFsPUZBTFNFKQ0KI3B2YWx1ZSBpcyA8LjA1IHdoaWNoIG1lYW5zIHdlIGNhbiByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZSBncGEgdG90YWxzIGFyZSBlcXVhbCBiZXR3ZWVuIHRoZSBzZXggZ3JvdXBzDQoNCmBgYA0KYGBge3J9DQpjaGlzcS50ZXN0KGhzX2NvbXBsZXRpb24kUzFIUlZJREVPLCBoc19jb21wbGV0aW9uJFgzSFNDT01QU1RBVCwgY29ycmVjdD1GQUxTRSkNCiNyZW1vdmUgdGhpcyBiZWNhdXNlIHdlIGFyZSBub3QgY29uc2lkZXJpbmcgaW4gbWFpbiBBTk9WQQ0KDQpjaGlzcS50ZXN0KG5vX25lZ2F0aXZlX2RhdGEkUzFIUlZJREVPLCBub19uZWdhdGl2ZV9kYXRhJFgxU0VYLCBjb3JyZWN0PUZBTFNFKQ0KY2hpc3EudGVzdChub19uZWdhdGl2ZV9kYXRhJFMxSFJWSURFTywgbm9fbmVnYXRpdmVfZGF0YSRYMVJBQ0UsIGNvcnJlY3Q9RkFMU0UpDQpjaGlzcS50ZXN0KG5vX25lZ2F0aXZlX2RhdGEkUzFIUlZJREVPLCBub19uZWdhdGl2ZV9kYXRhJFMzQ1VSSk9CRlRybnNmcm1kLCBjb3JyZWN0PUZBTFNFKQ0KY2hpc3EudGVzdChub19uZWdhdGl2ZV9kYXRhJFMxSFJWSURFTywgbm9fbmVnYXRpdmVfZGF0YSRYMkZBTUlOQ09NRUJJTiwgY29ycmVjdD1GQUxTRSkNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmxpYnJhcnkoYnJvb20pICNmb3IgY2xlYW5lciB0YWJsZXMNCiNhbm92YSBmb3IgYWxsIHZhcmlhYmxlcw0KYWxsLmFub3ZhPC0gYW92KCBYM1RHUEFUT1QgfiBTMUhSVklERU8qWDFTRVgqWDFSQUNFKlgyRkFNSU5DT01FQklOKlMzQ1VSSk9CRlRybnNmcm1kLGRhdGE9bm9fbmVnYXRpdmVfZGF0YSkNCnRpZHkoYWxsLmFub3ZhKQ0KI3Rlc3QgZm9yIGhvbW9zY2VkYXN0aWNpdHkNCnBhcihtZnJvdz1jKDIsMikpDQpwbG90KGFsbC5hbm92YSkNCnBhcihtZnJvdz1jKDEsMSkpDQojdHVrZXkgdGVzdA0KYWxsLmFub3ZhLnR1a2V5PC1UdWtleUhTRChhbGwuYW5vdmEpDQp0aWR5KGFsbC5hbm92YS50dWtleSkNCnBsb3QoYWxsLmFub3ZhLnR1a2V5LCBsYXMgPSAxKQ0KIyBMZXZlbmUncyB0ZXN0DQpsaWJyYXJ5KGNhcikNCg0KbGV2ZW5lVGVzdChYM1RHUEFUT1QgfiBTMUhSVklERU8qIFgxU0VYKlgxUkFDRSpYMkZBTUlOQ09NRUJJTipTM0NVUkpPQkZUcm5zZnJtZCwgZGF0YSA9bm9fbmVnYXRpdmVfZGF0YSkNCiNzaWduaWZpY2FudCBiL2MgcDwuMDUgYW5kIHRoZSB2YXJpYW5jZXMgb2YgdGhlIGdyb3VwcyBhcmUgbm90IHNpbWlsYXIgYmVjYXVzZSBMZXZlbmUgdGVzdCBwPDAuMDUNCg0KDQpgYGANCg0KDQpgYGB7cn0NCmxpYnJhcnkoYnJvb20pICNmb3IgY2xlYW5lciB0YWJsZXMNCiNhbm92YSBmb3IgYWxsIHZhcmlhYmxlcyB3aXRoIGNvbmZvdW5kaW5nIHZhcmlhYmxlcw0KR1BBYW5vdmFXQmxvY2tpbmcgPC0gYW92KFgzVEdQQVRPVCB+IFMxSFJWSURFTyArIFgxU0VYICsgWDFSQUNFICtYMkZBTUlOQ09NRUJJTiArIFMzQ1VSSk9CRlRybnNmcm1kLCBkYXRhID1ub19uZWdhdGl2ZV9kYXRhKQ0KdGlkeShHUEFhbm92YVdCbG9ja2luZykNCiN0ZXN0IGZvciBob21vc2NlZGFzdGljaXR5DQpwYXIobWZyb3c9YygyLDIpKQ0KcGxvdChHUEFhbm92YVdCbG9ja2luZykNCnBhcihtZnJvdz1jKDEsMSkpDQojdHVrZXkgdGVzdA0KR1BBYW5vdmFXQmxvY2tpbmcudHVrZXk8LVR1a2V5SFNEKEdQQWFub3ZhV0Jsb2NraW5nKQ0KdGlkeShHUEFhbm92YVdCbG9ja2luZy50dWtleSkNCnBsb3QoR1BBYW5vdmFXQmxvY2tpbmcudHVrZXksIGxhcyA9IDEpDQoNCg0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K