1 introduction

This is the space where I’ll describe the data set and my team and the year. So on and so forth we go. Below are tables 1 and 2 that describe the overall summary and stats for the overall season as well as my team. (rephrase in own words).

2 Tables/Season Summary

summary %>%
  kbl(caption = "team score summary", digits = 2) %>%
  kable_classic(full_width = F)
team score summary
team_name mean_score
Aces 85.52
Dream 76.93
Fever 84.50
Liberty 84.98
Lynx 82.36
Mercury 81.93
Mystics 79.30
Sky 77.40
Sparks 78.40
Storm 82.67
Sun 80.36
Wings 84.20
my_team %>%
  kbl(caption = "Wings Win Summary", digits = 2) %>%
  kable_classic(full_width = F)
Wings Win Summary
team_score field_goal_pct total_rebounds three_point_field_goal_pct steals team_name team_winner
84 42.9 33 45.0 7 Wings FALSE
109 56.8 33 45.8 7 Wings FALSE
81 38.5 42 22.2 9 Wings FALSE
67 36.6 33 22.2 4 Wings FALSE
91 47.2 28 25.0 3 Wings FALSE
77 40.5 34 20.0 6 Wings FALSE
96 49.3 33 40.0 5 Wings FALSE
86 43.1 44 22.2 3 Wings FALSE
93 39.2 34 41.9 8 Wings FALSE
94 48.2 38 38.9 10 Wings TRUE
93 48.0 40 28.6 4 Wings TRUE
113 52.6 34 36.4 9 Wings TRUE
71 43.5 38 15.4 4 Wings FALSE
74 37.9 28 42.9 7 Wings FALSE
91 43.9 36 41.7 12 Wings FALSE
101 51.3 29 45.0 10 Wings TRUE
81 43.7 33 31.3 6 Wings FALSE
84 50.0 26 36.8 5 Wings FALSE
85 46.1 37 30.0 6 Wings FALSE
85 44.9 27 33.3 16 Wings TRUE
96 49.3 34 29.4 6 Wings FALSE
71 41.9 31 23.5 11 Wings FALSE
76 45.7 32 33.3 12 Wings FALSE
94 48.7 36 60.0 9 Wings TRUE
84 41.2 41 39.3 6 Wings FALSE
69 39.4 36 20.8 6 Wings FALSE
72 35.4 35 34.6 9 Wings FALSE
78 47.9 34 41.2 5 Wings FALSE
67 37.7 29 6.3 3 Wings FALSE
84 47.7 28 46.2 6 Wings FALSE
90 47.4 36 26.1 9 Wings FALSE
72 39.7 35 11.8 7 Wings FALSE
81 37.8 40 20.0 5 Wings FALSE
76 46.2 34 36.4 12 Wings FALSE
72 51.6 30 37.5 3 Wings FALSE
84 42.1 44 16.7 5 Wings TRUE
107 52.0 38 50.0 10 Wings TRUE
78 42.9 35 12.5 6 Wings FALSE
74 34.8 40 38.9 7 Wings FALSE
87 45.1 42 33.3 7 Wings TRUE

3 Histograms

below are my histograms and here is a great and wonderful discussion, through a few sentences, on all they have to offer. looking at winning vs losing and now here they are so special and great, right?

#i refuse to have a 6-7 joke in my coding. you cannot make me
p <- data %>%
  ggplot(aes(x=team_score, fill = team_winner)) +
    geom_histogram(color = "#e9ecef", alpha=0.6, position = 'identity') +
    scale_fill_manual(values=c("#002b5c", "#c4d600")) 

boxplot(team_score ~ result, data = df_hist, notch = TRUE, 
        col = c("#002b5c", "#c4d600"),
        main = "Points score by game result",
        xlab = "Result", ylab = "Points")
## Warning in (function (z, notch = FALSE, width = NULL, varwidth = FALSE, : some
## notches went outside hinges ('box'): maybe set notch=FALSE

4 Models

5 Interaction Models

Call: lm(formula = team_score ~ field_goal_pct + total_rebounds + three_point_field_goal_pct + field_goal_pct * total_rebounds + field_goal_pct * three_point_field_goal_pct + total_rebounds * three_point_field_goal_pct, data = my_team)

Residuals: Min 1Q Median 3Q Max -20.0621 -2.8317 0.2787 3.8935 16.3294

Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 22.297634 95.796054 0.233 0.817 field_goal_pct 0.800250 2.399886 0.333 0.741 total_rebounds -0.237118 2.587190 -0.092 0.928 three_point_field_goal_pct -0.034367 1.249697 -0.028 0.978 field_goal_pct:total_rebounds 0.016969 0.063750 0.266 0.792 field_goal_pct:three_point_field_goal_pct 0.001972 0.023458 0.084 0.934 total_rebounds:three_point_field_goal_pct 0.006036 0.027642 0.218 0.829

Residual standard error: 7.467 on 33 degrees of freedom Multiple R-squared: 0.6414, Adjusted R-squared: 0.5762 F-statistic: 9.836 on 6 and 33 DF, p-value: 3.182e-06

\(~\)

After after running all models and reducing models, my final model is team_score= -12.3047153 + 1.4462277 * field_goal_pct + 0.6871829 * total_rebounds + 0.2593569 * three_point_field_goal_pct.

This model significantly predicts team score, F(3, 36) = 21.2378708, p<.0001, 0.6088799.

See table below for results:

Dependent variable:
team_score
field_goal_pct 1.446***
(0.253)
total_rebounds 0.687**
(0.255)
three_point_field_goal_pct 0.259**
(0.112)
Constant -12.305
(14.869)
Observations 40
R2 0.639
Adjusted R2 0.609
Residual Std. Error 7.173 (df = 36)
F Statistic 21.238*** (df = 3; 36)
Note: p<0.1; p<0.05; p<0.01

6 Residuals

#residual plots of a variety of times
ols_plot_resid_fit(model4)

ols_plot_resid_hist(model4)

ols_plot_resid_stud(model4)

ols_plot_resid_lev(model4, threshold = 3)

ols_plot_cooksd_chart(model4)

7 Prediction

I built this model to predict my team’s points for a game in which they achieve the median value for each variable. The predicted team score is 83.908595, with 95% confidence interval (81.5603447, 86.2568453).

LS0tCnRpdGxlOiAiQXNzaWdubWVudCA2IFNUQTMxOSBTcHJpbmcgMjAyNiIKYXV0aG9yOiAiIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdG9jX2NvbGxhcHNlZDogeWVzCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgc21vb3RoX3Njcm9sbDogeWVzCiAgICB0aGVtZTogbHVtZW4KICBwZGZfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgZmlnX2NhcHRpb246IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIGZpZ193aWR0aDogMwogICAgZmlnX2hlaWdodDogMwogIHdvcmRfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgZmlnX2NhcHRpb246IHllcwogICAga2VlcF9tZDogeWVzCmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQoKYGBge2NzcywgZWNobyA9IEZBTFNFfQojVE9DOjpiZWZvcmUgewogIGNvbnRlbnQ6ICJUYWJsZSBvZiBDb250ZW50cyI7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1zaXplOiAxLjJlbTsKICBkaXNwbGF5OiBibG9jazsKICBjb2xvcjogbmF2eTsKICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgoKZGl2I1RPQyBsaSB7ICAgICAvKiB0YWJsZSBvZiBjb250ZW50ICAqLwogICAgbGlzdC1zdHlsZTp1cHBlci1yb21hbjsKICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsKICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7Cn0KCmgxLnRpdGxlIHsgICAgLyogbGV2ZWwgMSBoZWFkZXIgb2YgdGl0bGUgICovCiAgZm9udC1zaXplOiAyMnB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGNvbG9yOiBEYXJrUmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7Cn0KCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxNXB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7CiAgY29sb3I6IG5hdnk7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpoNC5kYXRlIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICBmb250LXNpemU6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOwogIGNvbG9yOiBEYXJrQmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmgzIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmg0IHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IGRhcmtyZWQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovCi5oZWFkZXItc2VjdGlvbi1udW1iZXI6OmFmdGVyIHsKICBjb250ZW50OiAiLiI7Cgpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQoKLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0KCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9Cgp9CmBgYAoKCmBgYCB7ciBzZXR1cCwgaW5jbHVkZT1GfQogc2V0d2QoIn4vRGVza3RvcC9Db2xsZWdlL1NUQTMxOSIpCgpkYXRhPXJlYWQuY3N2KCJXTkJBXzIwMjVfYm94LXNjb3Jlcy5jc3YiLCBoZWFkZXI9VCkKCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKI3ZpZiBmdW5jdGlvbiBpbiB0aGUgY2FyIHBhY2thZ2UKbGlicmFyeShjYXIpCmxpYnJhcnkob2xzcnIpCiNrYWJsZWV4dHJhIGZvciBuaWNlIG1hcmtkb3duIHRhYmxlcwpsaWJyYXJ5KGthYmxlRXh0cmEpCgpgYGAKCgpgYGB7ciB3cmFuZ2xpbmcsIGluY2x1ZGU9Rn0Kc3VtbWFyeShkYXRhKQpsaWJyYXJ5KGRwbHlyKQoKI2ZpbHRlcmluZyBvdXQgZXh0cmFuZW91cyBvYnNlcnZhdGlvbnMsIGFsbCBXTkJBIHRlYW1zIGluY2x1ZGVkLCByZW1vdmUgc2NvcmVzIGZyb20gQUxMIHN0YXJ0IGdhbWUKZGF0YSA9IGRhdGEgJT4lCiAgZmlsdGVyKHRlYW1fbmFtZSAhPSAiVGVhbSBXTkJBIiAmIHRlYW1fbmFtZSAhPSAiVGVhbSBVU0EiKQoKI2dyb3VwIGRhdGEgYnkgdGVhbSwgZmluZCBNIGFuZCBTRCBvZiBhbGwgdmFyaWFibGVzCnN1bW1hcnkgPSBkYXRhICU+JQogIGdyb3VwX2J5KHRlYW1fbmFtZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmU9bWVhbih0ZWFtX3Njb3JlLCBzZF9zY29yZT1zZCh0ZWFtX3Njb3JlKSwKICAgICAgICAgICAgbWVhbl9yZWJvdW5kcz1tZWFuKHRvdGFsX3JlYm91bmRzKSwgc2RfcmVib3VuZHM9c2QodG90YWxfcmVib3VuZHMpCiAgICAgICAgICAgICkpCgojc2VsZWN0aW5nIHZhcmlhYmxlcyB3ZSBuZWVkIGFuZCBmaWx0ZXIgbXkgdGVhbSwgd2luZ3MgZGlkIE5PVCBtYWtlIHRoZSBwbGF5b2ZmcywgYiBhbmQgc29tZSBvZiBkCm15X3RlYW0gPSBkYXRhICU+JSAKICBzZWxlY3QodGVhbV9zY29yZSwgZmllbGRfZ29hbF9wY3QsIHRvdGFsX3JlYm91bmRzLCAKICAgICAgICAgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIHN0ZWFscywgdGVhbV9uYW1lLCB0ZWFtX3dpbm5lcikgJT4lIAogIGZpbHRlcih0ZWFtX25hbWUgPT0gIldpbmdzIikKCiNncm91cHMgY2FzZXMgYnkgd2luIHZzIGxvc3MKI3N1bW1hcml6ZSBhbGwgdmFyaWFibGVzIHdpdGggbWVhbiBhbmQgU0QKbXlfdGVhbV93aW4gPSBteV90ZWFtICU+JQogIGdyb3VwX2J5KHRlYW1fd2lubmVyKSAlPiUKICBzdW1tYXJpc2UobWVhbj1tZWFuKHRlYW1fc2NvcmUpKQoKZGZfaGlzdCA9IGRhdGEgJT4lCiAgZmlsdGVyKHRlYW1fbmFtZSA9PSAiV2luZ3MiKSU+JQogIG11dGF0ZShyZXN1bHQgPSBjYXNlX3doZW4odGVhbV93aW5uZXI9PVRSVUUgfiJXaW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlYW1fd2lubmVyPT1GQUxTRSB+ICJsb3NzIikpCmBgYAoKIyBpbnRyb2R1Y3Rpb24KVGhpcyBpcyB0aGUgc3BhY2Ugd2hlcmUgSSdsbCBkZXNjcmliZSB0aGUgZGF0YSBzZXQgYW5kIG15IHRlYW0gYW5kIHRoZSB5ZWFyLiBTbyBvbiBhbmQgc28gZm9ydGggd2UgZ28uIEJlbG93IGFyZSB0YWJsZXMgMSBhbmQgMiB0aGF0IGRlc2NyaWJlIHRoZSBvdmVyYWxsIHN1bW1hcnkgYW5kIHN0YXRzIGZvciB0aGUgb3ZlcmFsbCBzZWFzb24gYXMgd2VsbCBhcyBteSB0ZWFtLiAocmVwaHJhc2UgaW4gb3duIHdvcmRzKS4gCgojIFRhYmxlcy9TZWFzb24gU3VtbWFyeQoKYGBge3IgdGFibGVzLCBpbmNsdWRlPVR9CnN1bW1hcnkgJT4lCiAga2JsKGNhcHRpb24gPSAidGVhbSBzY29yZSBzdW1tYXJ5IiwgZGlnaXRzID0gMikgJT4lCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRikKCm15X3RlYW0gJT4lCiAga2JsKGNhcHRpb24gPSAiV2luZ3MgV2luIFN1bW1hcnkiLCBkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGKQoKYGBgCgojIEhpc3RvZ3JhbXMKYmVsb3cgYXJlIG15IGhpc3RvZ3JhbXMgYW5kIGhlcmUgaXMgYSBncmVhdCBhbmQgd29uZGVyZnVsIGRpc2N1c3Npb24sIHRocm91Z2ggYSBmZXcgc2VudGVuY2VzLCBvbiBhbGwgdGhleSBoYXZlIHRvIG9mZmVyLiBsb29raW5nIGF0IHdpbm5pbmcgdnMgbG9zaW5nIGFuZCBub3cgaGVyZSB0aGV5IGFyZSBzbyBzcGVjaWFsIGFuZCBncmVhdCwgcmlnaHQ/CgoKYGBge3IgZ3JhcGhzLCBpbmNsdWRlPVQsIGZpZy53aWR0aD03LCBmaWcuaGVpZ2h0PTd9CiNpIHJlZnVzZSB0byBoYXZlIGEgNi03IGpva2UgaW4gbXkgY29kaW5nLiB5b3UgY2Fubm90IG1ha2UgbWUKcCA8LSBkYXRhICU+JQogIGdncGxvdChhZXMoeD10ZWFtX3Njb3JlLCBmaWxsID0gdGVhbV93aW5uZXIpKSArCiAgICBnZW9tX2hpc3RvZ3JhbShjb2xvciA9ICIjZTllY2VmIiwgYWxwaGE9MC42LCBwb3NpdGlvbiA9ICdpZGVudGl0eScpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjMDAyYjVjIiwgIiNjNGQ2MDAiKSkgCgpib3hwbG90KHRlYW1fc2NvcmUgfiByZXN1bHQsIGRhdGEgPSBkZl9oaXN0LCBub3RjaCA9IFRSVUUsIAogICAgICAgIGNvbCA9IGMoIiMwMDJiNWMiLCAiI2M0ZDYwMCIpLAogICAgICAgIG1haW4gPSAiUG9pbnRzIHNjb3JlIGJ5IGdhbWUgcmVzdWx0IiwKICAgICAgICB4bGFiID0gIlJlc3VsdCIsIHlsYWIgPSAiUG9pbnRzIikKYGBgCgojIE1vZGVscwoKYGBge3IgRmlyc3QgT3JkZXIgTW9kZWwsIGluY2x1ZGUgPSBGfQoKI2NyZWF0aW5nIG1vZGVsIDEKbW9kZWwxPWxtKHRlYW1fc2NvcmV+ZmllbGRfZ29hbF9wY3QrdG90YWxfcmVib3VuZHMrdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QrCiAgICAgICAgICAgIHN0ZWFscywgZGF0YT1teV90ZWFtKQpzdW1tYXJ5KG1vZGVsMSkKCiNjcmVhdGluZyBjb3JyZWxhdGlvbiBtYXRyaXgKY29yX2RhdGEgPSBteV90ZWFtICU+JQogIHNlbGVjdCh0ZWFtX3Njb3JlLCBmaWVsZF9nb2FsX3BjdCwgdG90YWxfcmVib3VuZHMsIAogICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCwgc3RlYWxzKQoKY29yKGNvcl9kYXRhKQoKI2ZpbmRpbmcgdmlmIHZhbHVlcwp2aWYobW9kZWwxKQoKCiNjcmVhdGluZyBtb2RlbCAyLCBzYW1lIGFzIG1vZGVsIDEgZHVlIHRvIG5vIGhpZ2hseSBjb3JyZWxhdGVkIHBhaXJzCm1vZGVsMj1sbSh0ZWFtX3Njb3JlfmZpZWxkX2dvYWxfcGN0K3RvdGFsX3JlYm91bmRzK3RocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KwogICAgICAgICAgICBzdGVhbHMsIGRhdGE9bXlfdGVhbSkKc3VtbWFyeShtb2RlbDIpCgpgYGAKCiMgSW50ZXJhY3Rpb24gTW9kZWxzCgpgYGB7ciBJbnRlcmFjdGlvbiBNb2RlbCwgcmVzdWx0cz0nYXNpcycsIGVjaG89RiwgaW5jbHVkZSA9IFQsIGNvbW1lbnQ9TkF9CiNjcmVhdGluZyBtb2RlbCAzCm1vZGVsMz1sbSh0ZWFtX3Njb3JlfmZpZWxkX2dvYWxfcGN0K3RvdGFsX3JlYm91bmRzK3RocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0ICsgZmllbGRfZ29hbF9wY3QqdG90YWxfcmVib3VuZHMgKyBmaWVsZF9nb2FsX3BjdCp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCt0b3RhbF9yZWJvdW5kcyp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCwgZGF0YT1teV90ZWFtKQpzdW1tYXJ5KG1vZGVsMykKCiNtb2RlbDMgaGFkIG5vIHNpZ25pZmljYW50IGVmZmVjdHMsIHNvIHRoaXMgaXMgYSByZWR1Y2VkIG1vZGVsIGluY2x1ZGluZyB0aGUgcmVtb3ZhbCBvZiBzdGVhbHMgZHVlIHRvIGl0IG5vdCBiZWluZyBzaWduaWZpY2FudCBldmVuIHdpdGhvdXQgdGhlIGludGVyYWN0aW9uIGVmZmVjdHMKbW9kZWw0PWxtKHRlYW1fc2NvcmV+ZmllbGRfZ29hbF9wY3QrdG90YWxfcmVib3VuZHMrdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIGRhdGE9bXlfdGVhbSkKbW9kZWw0c3VtPXN1bW1hcnkobW9kZWw0KQoKCmBgYAoKJH4kCgpBZnRlciBhZnRlciBydW5uaW5nIGFsbCBtb2RlbHMgYW5kIHJlZHVjaW5nIG1vZGVscywgbXkgZmluYWwgbW9kZWwgaXMgdGVhbV9zY29yZT0gYHIgbW9kZWw0JGNvZWZmaWNpZW50c1sxXWAgKyBgciBtb2RlbDQkY29lZmZpY2llbnRzWzJdYCAqIGZpZWxkX2dvYWxfcGN0ICsgYHIgbW9kZWw0JGNvZWZmaWNpZW50c1szXWAgKiB0b3RhbF9yZWJvdW5kcyArIGByIG1vZGVsNCRjb2VmZmljaWVudHNbNF1gICogdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QuCgpUaGlzIG1vZGVsIHNpZ25pZmljYW50bHkgcHJlZGljdHMgdGVhbSBzY29yZSwgRihgciBtb2RlbDRzdW0kZnN0YXRpc3RpY1syXWAsIGByIG1vZGVsNHN1bSRmc3RhdGlzdGljWzNdYCkgPSBgciBtb2RlbDRzdW0kZnN0YXRpc3RpY1sxXWAsIHA8LjAwMDEsIGByIG1vZGVsNHN1bSRhZGouci5zcXVhcmVkYC4KClNlZSB0YWJsZSBiZWxvdyBmb3IgcmVzdWx0czoKYGBge3IsIGluY2x1ZGU9VCwgZWNobz1GLCByZXN1bHRzPSJhc2lzIiwgbWVzc2FnZT1GfQpsaWJyYXJ5KHN0YXJnYXplcikKc3RhcmdhemVyKG1vZGVsNCwgdHlwZSA9ICJodG1sIikKYGBgCgojIFJlc2lkdWFscwoKYGBge3IgUmVzaWR1YWxzfQojcmVzaWR1YWwgcGxvdHMgb2YgYSB2YXJpZXR5IG9mIHRpbWVzCm9sc19wbG90X3Jlc2lkX2ZpdChtb2RlbDQpCm9sc19wbG90X3Jlc2lkX2hpc3QobW9kZWw0KQpvbHNfcGxvdF9yZXNpZF9zdHVkKG1vZGVsNCkKb2xzX3Bsb3RfcmVzaWRfbGV2KG1vZGVsNCwgdGhyZXNob2xkID0gMykKb2xzX3Bsb3RfY29va3NkX2NoYXJ0KG1vZGVsNCkKYGBgCgojIFByZWRpY3Rpb24KCmBgYHtyIFByZWRpY3Rpb24sIGluY2x1ZGUgPSBGfQojZm9yIGZkaW5naW5nIG1lZGlhbiB2YWx1ZXMKc3VtbWFyeShjb3JfZGF0YSkKCiNuZXcgZGF0YSBmcmFtZSBmb3IgdGhlIG1lZGlhbiBnYW1lCm5ld2RhdGE9ZGF0YS5mcmFtZShmaWVsZF9nb2FsX3BjdD00NC40MCwgdG90YWxfcmVib3VuZHM9MzQuMDAsIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0PTMzLjMwLCBzdGVhbHM9Ni41MCkKCiNwcmVkaWNpdG5nIG1lZGlhbiBnYW1lCnByZWRpY3Rpb24gPSBwcmVkaWN0KG1vZGVsNCwgbmV3ZGF0YSwgaW50ZXJ2YWwgPSAiY29uZmlkZW5jZSIsIGxldmVsPS45NSkKYGBgCkkgYnVpbHQgdGhpcyBtb2RlbCB0byBwcmVkaWN0IG15IHRlYW0ncyBwb2ludHMgZm9yIGEgZ2FtZSBpbiB3aGljaCB0aGV5IGFjaGlldmUgdGhlIG1lZGlhbiB2YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gVGhlIHByZWRpY3RlZCB0ZWFtIHNjb3JlIGlzIGByIHByZWRpY3Rpb25bMV1gLCB3aXRoIDk1JSBjb25maWRlbmNlIGludGVydmFsIChgciBwcmVkaWN0aW9uWzJdYCwgYHIgcHJlZGljdGlvblszXWApLgoKICAgICA=