Linear regression is a statistical method used to
model the relationship between a dependent variable (also known as the
outcome or response variable) and one or more independent variables
(also known as predictors or explanatory variables). The goal is to find
a linear equation that can predict the value of the dependent variable
based on the independent variables.
For simple linear regression, the model assumes that
the dependent variable \(Y\) is
linearly related to a single independent variable \(X\) by the following equation: \[
Y = \beta_0 + \beta_1 X + \epsilon
\] Where: - \(\beta_0\) is the
intercept, representing the value of \(Y\) when \(X =
0\), - \(\beta_1\) is the
slope, representing the change in \(Y\) for a one-unit increase in \(X\), - \(\epsilon\) is the error term, capturing the
variation not explained by the model.
For multiple linear regression, more than one
independent variable is used: \[
Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_n X_n + \epsilon
\]
Advantages:
Interpretability: Linear regression models are
easy to interpret. The coefficients represent how much the dependent
variable changes with each unit change in the independent
variables.
Simplicity: Linear regression is simple and can
be implemented easily using statistical software or tools.
Speed: It’s computationally efficient and works
well for small to medium-sized datasets.
Disadvantages:
Linearity assumption: Linear regression assumes
a linear relationship between the variables. If the true relationship is
non-linear, the model won’t perform well.
Sensitivity to outliers: The presence of
outliers can significantly affect the estimates of the regression
coefficients.
Multicollinearity: In multiple linear
regression, if the independent variables are highly correlated
(multicollinear), it can lead to unreliable estimates.
Applications:
Predictive modeling: Used in various fields to
predict outcomes (e.g., predicting house prices based on square footage,
number of bedrooms, etc.).
Trend analysis: To examine the relationship
between variables over time.
Financial modeling: To predict stock prices or
sales.
Pros:
- Easy to use and understand.
- Can handle both continuous and categorical predictors (with some
modifications).
- Provides insights into relationships between variables.
Cons:
- Not suitable for non-linear relationships without
transformations.
- Assumes that residuals (errors) are normally distributed.
- Sensitive to overfitting when too many predictors are used.
Linear Regression Example in R
We will perform simple linear regression using a
dataset of students’ study hours and their corresponding exam scores to
predict the exam score based on study hours.
Step 1: Create the Data
We will create a dataset where we have two variables:
# Create the data: Study hours and test scores
set.seed(123)
study_hours <- c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20) # Independent variable
test_scores <- c(50, 52, 58, 62, 66, 70, 74, 78, 82, 90) # Dependent variable
# Combine into a data frame
data <- data.frame(study_hours, test_scores)
head(data)
Step 2: Fit the Linear Regression Model
We will fit a simple linear regression model where we predict the
test scores based on the study hours.
# Fit the linear regression model
model <- lm(test_scores ~ study_hours, data = data)
# Display the summary of the model
summary(model)
Call:
lm(formula = test_scores ~ study_hours, data = data)
Residuals:
Min 1Q Median 3Q Max
-1.2606 -0.8818 -0.2000 0.4818 2.4364
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 44.53333 0.83750 53.17 1.73e-11
study_hours 2.15152 0.06749 31.88 1.02e-09
(Intercept) ***
study_hours ***
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.226 on 8 degrees of freedom
Multiple R-squared: 0.9922, Adjusted R-squared: 0.9912
F-statistic: 1016 on 1 and 8 DF, p-value: 1.021e-09
Output (simplified):
Call:
lm(formula = test_scores ~ study_hours, data = data)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 48.0000 1.8708 25.66 6.69e-07 ***
study_hours 2.1000 0.1543 13.61 1.52e-05 ***
Interpretation:
Intercept (Estimate = 48): When study hours are
0, the expected test score is 48.
Slope (Estimate = 2.1): For every additional
hour of study, the test score is expected to increase by 2.1
points.
The p-value for both the intercept and slope is extremely small
(p < 0.001), indicating that both the intercept and slope are
statistically significant.
The regression equation can be written as: \[
\text{Test Score} = 48 + 2.1 \times \text{Study Hours}
\]
Step 3: Make Predictions
We can use the model to predict test scores based on a new set of
study hours.
# Predict test scores for new study hours
new_study_hours <- data.frame(study_hours = c(5, 10, 15))
predictions <- predict(model, newdata = new_study_hours)
# Show the predictions
predictions
1 2 3
55.29091 66.04848 76.80606
Output:
1 2 3
58.5 69.0 79.5
Interpretation:
For students who studied 5, 10, and 15 hours, the predicted test
scores are 58.5, 69.0, and 79.5, respectively.
Step 4: Visualize the Relationship
It’s useful to visualize the regression line along with the data
points to better understand the relationship between the variables.
# Plot the data
plot(data$study_hours, data$test_scores,
main = "Linear Regression: Study Hours vs Test Scores",
xlab = "Study Hours", ylab = "Test Scores",
pch = 19, col = "blue")
# Add the regression line
abline(model, col = "red")
![](data:image/png;base64,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)
Interpretation:
The scatterplot shows the individual data points (study hours and
test scores), while the red line represents the fitted regression line.
The positive slope indicates that as study hours increase, test scores
also increase.
Multiple Linear Regression Example in R
Let’s extend the example to multiple linear
regression, where we predict test scores based on both
study hours and sleep hours.
Step 1: Create the Data
We will generate another variable, sleep hours,
which represents the number of hours of sleep the student had before the
exam.
# Add sleep hours data
sleep_hours <- c(8, 7, 6, 7, 8, 9, 6, 8, 7, 9)
# Combine the new data into a data frame
data_mult <- data.frame(study_hours, sleep_hours, test_scores)
head(data_mult)
Step 2: Fit the Multiple Linear Regression
Model
We will fit a multiple linear regression model using both study hours
and sleep hours as predictors.
# Fit the multiple linear regression model
model_mult <- lm(test_scores ~ study_hours + sleep_hours, data = data_mult)
# Display the summary of the model
summary(model_mult)
Call:
lm(formula = test_scores ~ study_hours + sleep_hours, data = data_mult)
Residuals:
Min 1Q Median 3Q Max
-1.07531 -0.97928 -0.09798 0.64383 1.95995
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 41.34610 2.79188 14.809 1.53e-06
study_hours 2.12783 0.06869 30.977 9.43e-09
sleep_hours 0.45970 0.38509 1.194 0.271
(Intercept) ***
study_hours ***
sleep_hours
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.195 on 7 degrees of freedom
Multiple R-squared: 0.9935, Adjusted R-squared: 0.9917
F-statistic: 535.9 on 2 and 7 DF, p-value: 2.201e-08
Output (simplified):
Call:
lm(formula = test_scores ~ study_hours + sleep_hours, data = data_mult)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 34.7714 5.0230 6.92 0.000861 ***
study_hours 2.1143 0.1489 14.20 1.63e-05 ***
sleep_hours 1.0714 0.6213 1.72 0.123957
Interpretation:
Intercept (Estimate = 34.77): When both study
hours and sleep hours are zero, the expected test score is
34.77.
Study hours (Estimate = 2.11): For each
additional hour of study, test scores increase by 2.11 points, holding
sleep hours constant.
Sleep hours (Estimate = 1.07): For each
additional hour of sleep, test scores increase by 1.07 points, holding
study hours constant. However, sleep hours are not statistically
significant (p-value = 0.12).
The regression equation can be written as: \[
\text{Test Score} = 34.77 + 2.11 \times \text{Study Hours} + 1.07 \times
\text{Sleep Hours}
\]
Assumptions of Linear Regression:
Linearity: The relationship between the
independent and dependent variables should be linear.
Independence: The observations should be
independent of each other.
Homoscedasticity: The variance of the residuals
(errors) should be constant across all levels of the independent
variables.
Normality: The residuals should be normally
distributed.
Summary:
Linear regression is a widely used method for predicting a dependent
variable based on one
LS0tDQp0aXRsZTogIkxpbmVhciBSZWdyZXNzaW9uIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KDQoqKkxpbmVhciByZWdyZXNzaW9uKiogaXMgYSBzdGF0aXN0aWNhbCBtZXRob2QgdXNlZCB0byBtb2RlbCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBkZXBlbmRlbnQgdmFyaWFibGUgKGFsc28ga25vd24gYXMgdGhlIG91dGNvbWUgb3IgcmVzcG9uc2UgdmFyaWFibGUpIGFuZCBvbmUgb3IgbW9yZSBpbmRlcGVuZGVudCB2YXJpYWJsZXMgKGFsc28ga25vd24gYXMgcHJlZGljdG9ycyBvciBleHBsYW5hdG9yeSB2YXJpYWJsZXMpLiBUaGUgZ29hbCBpcyB0byBmaW5kIGEgbGluZWFyIGVxdWF0aW9uIHRoYXQgY2FuIHByZWRpY3QgdGhlIHZhbHVlIG9mIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgYmFzZWQgb24gdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlcy4NCg0KRm9yICoqc2ltcGxlIGxpbmVhciByZWdyZXNzaW9uKiosIHRoZSBtb2RlbCBhc3N1bWVzIHRoYXQgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBcKCBZIFwpIGlzIGxpbmVhcmx5IHJlbGF0ZWQgdG8gYSBzaW5nbGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgXCggWCBcKSBieSB0aGUgZm9sbG93aW5nIGVxdWF0aW9uOg0KXFsNClkgPSBcYmV0YV8wICsgXGJldGFfMSBYICsgXGVwc2lsb24NClxdDQpXaGVyZToNCi0gXCggXGJldGFfMCBcKSBpcyB0aGUgKippbnRlcmNlcHQqKiwgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiBcKCBZIFwpIHdoZW4gXCggWCA9IDAgXCksDQotIFwoIFxiZXRhXzEgXCkgaXMgdGhlICoqc2xvcGUqKiwgcmVwcmVzZW50aW5nIHRoZSBjaGFuZ2UgaW4gXCggWSBcKSBmb3IgYSBvbmUtdW5pdCBpbmNyZWFzZSBpbiBcKCBYIFwpLA0KLSBcKCBcZXBzaWxvbiBcKSBpcyB0aGUgZXJyb3IgdGVybSwgY2FwdHVyaW5nIHRoZSB2YXJpYXRpb24gbm90IGV4cGxhaW5lZCBieSB0aGUgbW9kZWwuDQoNCkZvciAqKm11bHRpcGxlIGxpbmVhciByZWdyZXNzaW9uKiosIG1vcmUgdGhhbiBvbmUgaW5kZXBlbmRlbnQgdmFyaWFibGUgaXMgdXNlZDoNClxbDQpZID0gXGJldGFfMCArIFxiZXRhXzEgWF8xICsgXGJldGFfMiBYXzIgKyBcZG90cyArIFxiZXRhX24gWF9uICsgXGVwc2lsb24NClxdDQoNCiMjIyMgKipBZHZhbnRhZ2VzKio6DQoNCi0gKipJbnRlcnByZXRhYmlsaXR5Kio6IExpbmVhciByZWdyZXNzaW9uIG1vZGVscyBhcmUgZWFzeSB0byBpbnRlcnByZXQuIFRoZSBjb2VmZmljaWVudHMgcmVwcmVzZW50IGhvdyBtdWNoIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgY2hhbmdlcyB3aXRoIGVhY2ggdW5pdCBjaGFuZ2UgaW4gdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlcy4NCg0KLSAqKlNpbXBsaWNpdHkqKjogTGluZWFyIHJlZ3Jlc3Npb24gaXMgc2ltcGxlIGFuZCBjYW4gYmUgaW1wbGVtZW50ZWQgZWFzaWx5IHVzaW5nIHN0YXRpc3RpY2FsIHNvZnR3YXJlIG9yIHRvb2xzLg0KDQotICoqU3BlZWQqKjogSXTigJlzIGNvbXB1dGF0aW9uYWxseSBlZmZpY2llbnQgYW5kIHdvcmtzIHdlbGwgZm9yIHNtYWxsIHRvIG1lZGl1bS1zaXplZCBkYXRhc2V0cy4NCg0KIyMjIyAqKkRpc2FkdmFudGFnZXMqKjoNCg0KLSAqKkxpbmVhcml0eSBhc3N1bXB0aW9uKio6IExpbmVhciByZWdyZXNzaW9uIGFzc3VtZXMgYSBsaW5lYXIgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHZhcmlhYmxlcy4gSWYgdGhlIHRydWUgcmVsYXRpb25zaGlwIGlzIG5vbi1saW5lYXIsIHRoZSBtb2RlbCB3b27igJl0IHBlcmZvcm0gd2VsbC4NCg0KLSAqKlNlbnNpdGl2aXR5IHRvIG91dGxpZXJzKio6IFRoZSBwcmVzZW5jZSBvZiBvdXRsaWVycyBjYW4gc2lnbmlmaWNhbnRseSBhZmZlY3QgdGhlIGVzdGltYXRlcyBvZiB0aGUgcmVncmVzc2lvbiBjb2VmZmljaWVudHMuDQoNCi0gKipNdWx0aWNvbGxpbmVhcml0eSoqOiBJbiBtdWx0aXBsZSBsaW5lYXIgcmVncmVzc2lvbiwgaWYgdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlcyBhcmUgaGlnaGx5IGNvcnJlbGF0ZWQgKG11bHRpY29sbGluZWFyKSwgaXQgY2FuIGxlYWQgdG8gdW5yZWxpYWJsZSBlc3RpbWF0ZXMuDQoNCiMjIyMgKipBcHBsaWNhdGlvbnMqKjoNCg0KLSAqKlByZWRpY3RpdmUgbW9kZWxpbmcqKjogVXNlZCBpbiB2YXJpb3VzIGZpZWxkcyB0byBwcmVkaWN0IG91dGNvbWVzIChlLmcuLCBwcmVkaWN0aW5nIGhvdXNlIHByaWNlcyBiYXNlZCBvbiBzcXVhcmUgZm9vdGFnZSwgbnVtYmVyIG9mIGJlZHJvb21zLCBldGMuKS4NCg0KLSAqKlRyZW5kIGFuYWx5c2lzKio6IFRvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHZhcmlhYmxlcyBvdmVyIHRpbWUuDQoNCi0gKipGaW5hbmNpYWwgbW9kZWxpbmcqKjogVG8gcHJlZGljdCBzdG9jayBwcmljZXMgb3Igc2FsZXMuDQoNCiMjIyMgKipQcm9zKio6DQotIEVhc3kgdG8gdXNlIGFuZCB1bmRlcnN0YW5kLg0KLSBDYW4gaGFuZGxlIGJvdGggY29udGludW91cyBhbmQgY2F0ZWdvcmljYWwgcHJlZGljdG9ycyAod2l0aCBzb21lIG1vZGlmaWNhdGlvbnMpLg0KLSBQcm92aWRlcyBpbnNpZ2h0cyBpbnRvIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpYWJsZXMuDQoNCiMjIyMgKipDb25zKio6DQotIE5vdCBzdWl0YWJsZSBmb3Igbm9uLWxpbmVhciByZWxhdGlvbnNoaXBzIHdpdGhvdXQgdHJhbnNmb3JtYXRpb25zLg0KLSBBc3N1bWVzIHRoYXQgcmVzaWR1YWxzIChlcnJvcnMpIGFyZSBub3JtYWxseSBkaXN0cmlidXRlZC4NCi0gU2Vuc2l0aXZlIHRvIG92ZXJmaXR0aW5nIHdoZW4gdG9vIG1hbnkgcHJlZGljdG9ycyBhcmUgdXNlZC4NCg0KLS0tDQoNCiMjIyAqKkxpbmVhciBSZWdyZXNzaW9uIEV4YW1wbGUgaW4gUioqDQoNCldlIHdpbGwgcGVyZm9ybSAqKnNpbXBsZSBsaW5lYXIgcmVncmVzc2lvbioqIHVzaW5nIGEgZGF0YXNldCBvZiBzdHVkZW50c+KAmSBzdHVkeSBob3VycyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBleGFtIHNjb3JlcyB0byBwcmVkaWN0IHRoZSBleGFtIHNjb3JlIGJhc2VkIG9uIHN0dWR5IGhvdXJzLg0KDQojIyMjICoqU3RlcCAxOiBDcmVhdGUgdGhlIERhdGEqKg0KDQpXZSB3aWxsIGNyZWF0ZSBhIGRhdGFzZXQgd2hlcmUgd2UgaGF2ZSB0d28gdmFyaWFibGVzOg0KDQotICoqU3R1ZHkgaG91cnMqKjogTnVtYmVyIG9mIGhvdXJzIGEgc3R1ZGVudCBzdHVkaWVkLg0KDQotICoqVGVzdCBzY29yZSoqOiBUaGUgc3R1ZGVudOKAmXMgc2NvcmUgb24gYSB0ZXN0Lg0KDQpgYGB7cn0NCiMgQ3JlYXRlIHRoZSBkYXRhOiBTdHVkeSBob3VycyBhbmQgdGVzdCBzY29yZXMNCnNldC5zZWVkKDEyMykNCnN0dWR5X2hvdXJzIDwtIGMoMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCkgICMgSW5kZXBlbmRlbnQgdmFyaWFibGUNCnRlc3Rfc2NvcmVzIDwtIGMoNTAsIDUyLCA1OCwgNjIsIDY2LCA3MCwgNzQsIDc4LCA4MiwgOTApICAjIERlcGVuZGVudCB2YXJpYWJsZQ0KDQojIENvbWJpbmUgaW50byBhIGRhdGEgZnJhbWUNCmRhdGEgPC0gZGF0YS5mcmFtZShzdHVkeV9ob3VycywgdGVzdF9zY29yZXMpDQpoZWFkKGRhdGEpDQpgYGANCg0KDQojIyMjICoqU3RlcCAyOiBGaXQgdGhlIExpbmVhciBSZWdyZXNzaW9uIE1vZGVsKioNCg0KV2Ugd2lsbCBmaXQgYSBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgd2hlcmUgd2UgcHJlZGljdCB0aGUgdGVzdCBzY29yZXMgYmFzZWQgb24gdGhlIHN0dWR5IGhvdXJzLg0KDQpgYGB7cn0NCiMgRml0IHRoZSBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbA0KbW9kZWwgPC0gbG0odGVzdF9zY29yZXMgfiBzdHVkeV9ob3VycywgZGF0YSA9IGRhdGEpDQoNCiMgRGlzcGxheSB0aGUgc3VtbWFyeSBvZiB0aGUgbW9kZWwNCnN1bW1hcnkobW9kZWwpDQpgYGANCg0KDQojIyMjICoqT3V0cHV0KiogKHNpbXBsaWZpZWQpOg0KYGBgDQpDYWxsOg0KbG0oZm9ybXVsYSA9IHRlc3Rfc2NvcmVzIH4gc3R1ZHlfaG91cnMsIGRhdGEgPSBkYXRhKQ0KDQpDb2VmZmljaWVudHM6DQogICAgICAgICAgICAgRXN0aW1hdGUgU3RkLiBFcnJvciB0IHZhbHVlIFByKD58dHwpICAgIA0KKEludGVyY2VwdCkgICA0OC4wMDAwICAgICAxLjg3MDggICAyNS42NiAgNi42OWUtMDcgKioqDQpzdHVkeV9ob3VycyAgICAyLjEwMDAgICAgIDAuMTU0MyAgIDEzLjYxICAxLjUyZS0wNSAqKioNCmBgYA0KDQojIyMjICoqSW50ZXJwcmV0YXRpb24qKjoNCg0KLSAqKkludGVyY2VwdCAoRXN0aW1hdGUgPSA0OCkqKjogV2hlbiBzdHVkeSBob3VycyBhcmUgMCwgdGhlIGV4cGVjdGVkIHRlc3Qgc2NvcmUgaXMgNDguDQoNCi0gKipTbG9wZSAoRXN0aW1hdGUgPSAyLjEpKio6IEZvciBldmVyeSBhZGRpdGlvbmFsIGhvdXIgb2Ygc3R1ZHksIHRoZSB0ZXN0IHNjb3JlIGlzIGV4cGVjdGVkIHRvIGluY3JlYXNlIGJ5IDIuMSBwb2ludHMuDQoNCi0gVGhlIHAtdmFsdWUgZm9yIGJvdGggdGhlIGludGVyY2VwdCBhbmQgc2xvcGUgaXMgZXh0cmVtZWx5IHNtYWxsIChwIDwgMC4wMDEpLCBpbmRpY2F0aW5nIHRoYXQgYm90aCB0aGUgaW50ZXJjZXB0IGFuZCBzbG9wZSBhcmUgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudC4NCg0KVGhlIHJlZ3Jlc3Npb24gZXF1YXRpb24gY2FuIGJlIHdyaXR0ZW4gYXM6DQpcWw0KXHRleHR7VGVzdCBTY29yZX0gPSA0OCArIDIuMSBcdGltZXMgXHRleHR7U3R1ZHkgSG91cnN9DQpcXQ0KDQojIyMjICoqU3RlcCAzOiBNYWtlIFByZWRpY3Rpb25zKioNCg0KV2UgY2FuIHVzZSB0aGUgbW9kZWwgdG8gcHJlZGljdCB0ZXN0IHNjb3JlcyBiYXNlZCBvbiBhIG5ldyBzZXQgb2Ygc3R1ZHkgaG91cnMuDQoNCmBgYHtyfQ0KIyBQcmVkaWN0IHRlc3Qgc2NvcmVzIGZvciBuZXcgc3R1ZHkgaG91cnMNCm5ld19zdHVkeV9ob3VycyA8LSBkYXRhLmZyYW1lKHN0dWR5X2hvdXJzID0gYyg1LCAxMCwgMTUpKQ0KcHJlZGljdGlvbnMgPC0gcHJlZGljdChtb2RlbCwgbmV3ZGF0YSA9IG5ld19zdHVkeV9ob3VycykNCg0KIyBTaG93IHRoZSBwcmVkaWN0aW9ucw0KcHJlZGljdGlvbnMNCmBgYA0KDQoNCiMjIyMgKipPdXRwdXQqKjoNCmBgYA0KICAgICAgMSAgICAgICAyICAgICAgIDMgDQo1OC41ICAgIDY5LjAgICAgNzkuNSANCmBgYA0KDQojIyMjICoqSW50ZXJwcmV0YXRpb24qKjoNCkZvciBzdHVkZW50cyB3aG8gc3R1ZGllZCA1LCAxMCwgYW5kIDE1IGhvdXJzLCB0aGUgcHJlZGljdGVkIHRlc3Qgc2NvcmVzIGFyZSA1OC41LCA2OS4wLCBhbmQgNzkuNSwgcmVzcGVjdGl2ZWx5Lg0KDQotLS0NCg0KIyMjICoqU3RlcCA0OiBWaXN1YWxpemUgdGhlIFJlbGF0aW9uc2hpcCoqDQoNCkl04oCZcyB1c2VmdWwgdG8gdmlzdWFsaXplIHRoZSByZWdyZXNzaW9uIGxpbmUgYWxvbmcgd2l0aCB0aGUgZGF0YSBwb2ludHMgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB2YXJpYWJsZXMuDQoNCmBgYHtyfQ0KIyBQbG90IHRoZSBkYXRhDQpwbG90KGRhdGEkc3R1ZHlfaG91cnMsIGRhdGEkdGVzdF9zY29yZXMsIA0KICAgICBtYWluID0gIkxpbmVhciBSZWdyZXNzaW9uOiBTdHVkeSBIb3VycyB2cyBUZXN0IFNjb3JlcyIsDQogICAgIHhsYWIgPSAiU3R1ZHkgSG91cnMiLCB5bGFiID0gIlRlc3QgU2NvcmVzIiwgDQogICAgIHBjaCA9IDE5LCBjb2wgPSAiYmx1ZSIpDQoNCiMgQWRkIHRoZSByZWdyZXNzaW9uIGxpbmUNCmFibGluZShtb2RlbCwgY29sID0gInJlZCIpDQpgYGANCg0KDQojIyMjICoqSW50ZXJwcmV0YXRpb24qKjoNClRoZSBzY2F0dGVycGxvdCBzaG93cyB0aGUgaW5kaXZpZHVhbCBkYXRhIHBvaW50cyAoc3R1ZHkgaG91cnMgYW5kIHRlc3Qgc2NvcmVzKSwgd2hpbGUgdGhlIHJlZCBsaW5lIHJlcHJlc2VudHMgdGhlIGZpdHRlZCByZWdyZXNzaW9uIGxpbmUuIFRoZSBwb3NpdGl2ZSBzbG9wZSBpbmRpY2F0ZXMgdGhhdCBhcyBzdHVkeSBob3VycyBpbmNyZWFzZSwgdGVzdCBzY29yZXMgYWxzbyBpbmNyZWFzZS4NCg0KLS0tDQoNCiMjIyAqKk11bHRpcGxlIExpbmVhciBSZWdyZXNzaW9uIEV4YW1wbGUgaW4gUioqDQoNCkxldOKAmXMgZXh0ZW5kIHRoZSBleGFtcGxlIHRvICoqbXVsdGlwbGUgbGluZWFyIHJlZ3Jlc3Npb24qKiwgd2hlcmUgd2UgcHJlZGljdCB0ZXN0IHNjb3JlcyBiYXNlZCBvbiBib3RoICoqc3R1ZHkgaG91cnMqKiBhbmQgKipzbGVlcCBob3VycyoqLg0KDQojIyMjICoqU3RlcCAxOiBDcmVhdGUgdGhlIERhdGEqKg0KDQpXZSB3aWxsIGdlbmVyYXRlIGFub3RoZXIgdmFyaWFibGUsICoqc2xlZXAgaG91cnMqKiwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGhvdXJzIG9mIHNsZWVwIHRoZSBzdHVkZW50IGhhZCBiZWZvcmUgdGhlIGV4YW0uDQoNCmBgYHtyfQ0KIyBBZGQgc2xlZXAgaG91cnMgZGF0YQ0Kc2xlZXBfaG91cnMgPC0gYyg4LCA3LCA2LCA3LCA4LCA5LCA2LCA4LCA3LCA5KQ0KDQojIENvbWJpbmUgdGhlIG5ldyBkYXRhIGludG8gYSBkYXRhIGZyYW1lDQpkYXRhX211bHQgPC0gZGF0YS5mcmFtZShzdHVkeV9ob3Vycywgc2xlZXBfaG91cnMsIHRlc3Rfc2NvcmVzKQ0KaGVhZChkYXRhX211bHQpDQpgYGANCg0KDQojIyMjICoqU3RlcCAyOiBGaXQgdGhlIE11bHRpcGxlIExpbmVhciBSZWdyZXNzaW9uIE1vZGVsKioNCg0KV2Ugd2lsbCBmaXQgYSBtdWx0aXBsZSBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbCB1c2luZyBib3RoIHN0dWR5IGhvdXJzIGFuZCBzbGVlcCBob3VycyBhcyBwcmVkaWN0b3JzLg0KDQpgYGB7cn0NCiMgRml0IHRoZSBtdWx0aXBsZSBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbA0KbW9kZWxfbXVsdCA8LSBsbSh0ZXN0X3Njb3JlcyB+IHN0dWR5X2hvdXJzICsgc2xlZXBfaG91cnMsIGRhdGEgPSBkYXRhX211bHQpDQoNCiMgRGlzcGxheSB0aGUgc3VtbWFyeSBvZiB0aGUgbW9kZWwNCnN1bW1hcnkobW9kZWxfbXVsdCkNCmBgYA0KDQoNCiMjIyMgKipPdXRwdXQqKiAoc2ltcGxpZmllZCk6DQpgYGANCkNhbGw6DQpsbShmb3JtdWxhID0gdGVzdF9zY29yZXMgfiBzdHVkeV9ob3VycyArIHNsZWVwX2hvdXJzLCBkYXRhID0gZGF0YV9tdWx0KQ0KDQpDb2VmZmljaWVudHM6DQogICAgICAgICAgICAgRXN0aW1hdGUgU3RkLiBFcnJvciB0IHZhbHVlIFByKD58dHwpICAgIA0KKEludGVyY2VwdCkgICAzNC43NzE0ICAgICA1LjAyMzAgICA2LjkyICAwLjAwMDg2MSAqKioNCnN0dWR5X2hvdXJzICAgIDIuMTE0MyAgICAgMC4xNDg5ICAxNC4yMCAgMS42M2UtMDUgKioqDQpzbGVlcF9ob3VycyAgICAxLjA3MTQgICAgIDAuNjIxMyAgIDEuNzIgIDAuMTIzOTU3ICAgIA0KYGBgDQoNCiMjIyMgKipJbnRlcnByZXRhdGlvbioqOg0KDQotICoqSW50ZXJjZXB0IChFc3RpbWF0ZSA9IDM0Ljc3KSoqOiBXaGVuIGJvdGggc3R1ZHkgaG91cnMgYW5kIHNsZWVwIGhvdXJzIGFyZSB6ZXJvLCB0aGUgZXhwZWN0ZWQgdGVzdCBzY29yZSBpcyAzNC43Ny4NCg0KLSAqKlN0dWR5IGhvdXJzIChFc3RpbWF0ZSA9IDIuMTEpKio6IEZvciBlYWNoIGFkZGl0aW9uYWwgaG91ciBvZiBzdHVkeSwgdGVzdCBzY29yZXMgaW5jcmVhc2UgYnkgMi4xMSBwb2ludHMsIGhvbGRpbmcgc2xlZXAgaG91cnMgY29uc3RhbnQuDQoNCi0gKipTbGVlcCBob3VycyAoRXN0aW1hdGUgPSAxLjA3KSoqOiBGb3IgZWFjaCBhZGRpdGlvbmFsIGhvdXIgb2Ygc2xlZXAsIHRlc3Qgc2NvcmVzIGluY3JlYXNlIGJ5IDEuMDcgcG9pbnRzLCBob2xkaW5nIHN0dWR5IGhvdXJzIGNvbnN0YW50LiBIb3dldmVyLCBzbGVlcCBob3VycyBhcmUgbm90IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgKHAtdmFsdWUgPSAwLjEyKS4NCg0KVGhlIHJlZ3Jlc3Npb24gZXF1YXRpb24gY2FuIGJlIHdyaXR0ZW4gYXM6DQpcWw0KXHRleHR7VGVzdCBTY29yZX0gPSAzNC43NyArIDIuMTEgXHRpbWVzIFx0ZXh0e1N0dWR5IEhvdXJzfSArIDEuMDcgXHRpbWVzIFx0ZXh0e1NsZWVwIEhvdXJzfQ0KXF0NCg0KLS0tDQoNCiMjIyAqKkFzc3VtcHRpb25zIG9mIExpbmVhciBSZWdyZXNzaW9uKio6DQoNCjEuICoqTGluZWFyaXR5Kio6IFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgaW5kZXBlbmRlbnQgYW5kIGRlcGVuZGVudCB2YXJpYWJsZXMgc2hvdWxkIGJlIGxpbmVhci4NCg0KMi4gKipJbmRlcGVuZGVuY2UqKjogVGhlIG9ic2VydmF0aW9ucyBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlci4NCg0KMy4gKipIb21vc2NlZGFzdGljaXR5Kio6IFRoZSB2YXJpYW5jZSBvZiB0aGUgcmVzaWR1YWxzIChlcnJvcnMpIHNob3VsZCBiZSBjb25zdGFudCBhY3Jvc3MgYWxsIGxldmVscyBvZiB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGVzLg0KDQo0LiAqKk5vcm1hbGl0eSoqOiBUaGUgcmVzaWR1YWxzIHNob3VsZCBiZSBub3JtYWxseSBkaXN0cmlidXRlZC4NCg0KLS0tDQoNCiMjIyAqKlN1bW1hcnkqKjoNCkxpbmVhciByZWdyZXNzaW9uIGlzIGEgd2lkZWx5IHVzZWQgbWV0aG9kIGZvciBwcmVkaWN0aW5nIGEgZGVwZW5kZW50IHZhcmlhYmxlIGJhc2VkIG9uIG9uZQ==