1 Introduction

This data set looks at the Dallas Wings WNBA team’s game data from the 2025 year. The team did not make it to the playoffs. They won 9 games and lost 31. Below are Tables 1 and 2. Table 1 describes the overall season results for all teams, while Table 2 describes a summary of Dallas Wings’s results from the season. Based on the data from this season, we will try to predict the point score for a “median” game for the Dallas Wings.

2 Tables/Season Summary

#creating summary table for entire league
summary %>%
  kbl(caption = "team score summary", digits = 2) %>%
  kable_classic(full_width = F)
team score summary
team_name mean_score sd_score mean_rebounds sd_rebounds mean_field_goal_pct sd_field_goal_pct mean_3PFGper sd_3PFGper mean_steals sd_steals
Aces 85.52 9.56 33.78 5.88 45.27 5.82 35.27 7.08 6.80 2.67
Dream 76.93 10.59 35.95 4.41 41.28 6.78 30.83 9.32 7.14 2.82
Fever 84.50 10.17 35.10 5.49 45.56 5.38 35.00 8.99 5.88 2.29
Liberty 84.98 9.92 36.90 5.77 44.53 5.61 35.38 10.06 7.75 2.19
Lynx 82.36 11.39 33.15 5.06 45.21 6.34 37.80 9.43 8.36 3.17
Mercury 81.93 12.60 32.26 5.39 44.28 7.34 32.97 10.34 6.55 2.12
Mystics 79.30 8.69 31.85 4.66 43.36 4.82 36.64 8.69 7.28 2.24
Sky 77.40 9.62 36.60 5.57 42.44 5.22 31.74 11.62 7.00 3.30
Sparks 78.40 10.57 32.67 5.52 42.63 6.15 32.09 11.00 7.30 2.78
Storm 82.67 9.65 34.67 6.02 43.43 5.39 28.35 9.03 9.24 3.27
Sun 80.36 9.89 33.43 4.62 44.30 5.28 32.84 11.67 7.89 3.29
Wings 84.20 11.47 34.75 4.65 44.47 5.24 32.06 11.75 7.12 2.95
#creating summary table for just wings
my_team_win %>%
  kbl(caption = "Wings Win Summary", digits = 2) %>%
  kable_classic(full_width = F)
Wings Win Summary
team_winner mean sd
FALSE 80.97 9.83
TRUE 95.33 9.96

3 Box Plots

Below are two boxplots based on the points scored by game result (win or lose). In both scenarios, there is about equal variation, though the point range and median for wins is higher than losses. Their minimum game score was 67 while the highest was 109 for losing games, while minimum was 84 and maximum was 113 for winning games.

#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 = FALSE, 
        col = c("#002b5c", "#c4d600"),
        main = "Points score by game result",
        xlab = "Result", ylab = "Points")

4 Models

\(~\)

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

5 Residuals

For our residual analysis, we will start with the residual vs fitted values plot. There is no distinct shape or pattern that would cause concern about equal variances. For the histogram, we see a relatively normal shape, meaning we can accept our assumption of normality. The studentized residuals plot reveals observation 35 to be an outlier. The outlier and leverage diagnostic shows us 3 leverage points (29, 39, and 14) and again 35 as an outlier. Observation 29 was a game against Chicago Sky on 5.18.24, observation 39 was a game against Connecticut Sun on 6/15/24, observation 14 was a game against New York Liberty on 8/22/24, and observation 35 was a game against Connecticut Sun on 5/31/24.

#residual plots 
ols_plot_resid_fit(model4) #versus fit

ols_plot_resid_hist(model4) #histogram

ols_plot_resid_stud(model4) #studentized residuals

ols_plot_resid_lev(model4, threshold = 3) #outlier and leverage diagnostics

ols_plot_cooksd_chart(model4) #cook's d chart

6 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).

LS0tCnRpdGxlOiAiQXNzaWdubWVudCA2IFNUQTMxOSBTcHJpbmcgMjAyNiIKYXV0aG9yOiAiR2FsZWUgR3JlaXNsZXIiCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogeWVzCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMKICAgIHRoZW1lOiBsdW1lbgogIHBkZl9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgZmlnX3dpZHRoOiAzCiAgICBmaWdfaGVpZ2h0OiAzCiAgd29yZF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBrZWVwX21kOiB5ZXMKZWRpdG9yX29wdGlvbnM6IAogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUKLS0tCgpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9CiNUT0M6OmJlZm9yZSB7CiAgY29udGVudDogIlRhYmxlIG9mIENvbnRlbnRzIjsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LXNpemU6IDEuMmVtOwogIGRpc3BsYXk6IGJsb2NrOwogIGNvbG9yOiBuYXZ5OwogIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCgpkaXYjVE9DIGxpIHsgICAgIC8qIHRhYmxlIG9mIGNvbnRlbnQgICovCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOwogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOwogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsKICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsKfQoKaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8KICBmb250LXNpemU6IDIycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgY29sb3I6IERhcmtSZWQ7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsKfQoKaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICBmb250LXNpemU6IDE1cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsKICBjb2xvcjogbmF2eTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMThweDsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAyMHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBkYXJrcmVkOwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIuIjsKCmJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9CgouaGlnaGxpZ2h0bWUgeyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgfQoKcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0KCn0KYGBgCgoKYGBgIHtyIHNldHVwLCBpbmNsdWRlPUZ9CiBzZXR3ZCgifi9EZXNrdG9wL0NvbGxlZ2UvU1RBMzE5IikKCmRhdGE9cmVhZC5jc3YoIldOQkFfMjAyNV9ib3gtc2NvcmVzLmNzdiIsIGhlYWRlcj1UKQoKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGRwbHlyKQojdmlmIGZ1bmN0aW9uIGluIHRoZSBjYXIgcGFja2FnZQpsaWJyYXJ5KGNhcikKbGlicmFyeShvbHNycikKI2thYmxlZXh0cmEgZm9yIG5pY2UgbWFya2Rvd24gdGFibGVzCmxpYnJhcnkoa2FibGVFeHRyYSkKCmBgYAoKCmBgYHtyIHdyYW5nbGluZywgaW5jbHVkZT1GfQpzdW1tYXJ5KGRhdGEpCmxpYnJhcnkoZHBseXIpCgojZmlsdGVyaW5nIG91dCBleHRyYW5lb3VzIG9ic2VydmF0aW9ucywgYWxsIFdOQkEgdGVhbXMgaW5jbHVkZWQsIHJlbW92ZSBzY29yZXMgZnJvbSBBTEwgc3RhcnQgZ2FtZQpkYXRhID0gZGF0YSAlPiUKICBmaWx0ZXIodGVhbV9uYW1lICE9ICJUZWFtIFdOQkEiICYgdGVhbV9uYW1lICE9ICJUZWFtIFVTQSIpCgojZ3JvdXAgZGF0YSBieSB0ZWFtLCBmaW5kIE0gYW5kIFNEIG9mIGFsbCB2YXJpYWJsZXMKc3VtbWFyeSA9IGRhdGEgJT4lCiAgZ3JvdXBfYnkodGVhbV9uYW1lKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZT1tZWFuKHRlYW1fc2NvcmUpLCBzZF9zY29yZT1zZCh0ZWFtX3Njb3JlKSwKICAgICAgICAgICAgbWVhbl9yZWJvdW5kcz1tZWFuKHRvdGFsX3JlYm91bmRzKSwgc2RfcmVib3VuZHM9c2QodG90YWxfcmVib3VuZHMpLAogICAgICAgICAgICBtZWFuX2ZpZWxkX2dvYWxfcGN0PW1lYW4oZmllbGRfZ29hbF9wY3QpLAogICAgICAgICAgICBzZF9maWVsZF9nb2FsX3BjdD1zZChmaWVsZF9nb2FsX3BjdCksCiAgICAgICAgICAgIG1lYW5fM1BGR3Blcj1tZWFuKHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KSwKICAgICAgICAgICAgc2RfM1BGR3Blcj1zZCh0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCksCiAgICAgICAgICAgIG1lYW5fc3RlYWxzPW1lYW4oc3RlYWxzKSwgc2Rfc3RlYWxzPXNkKHN0ZWFscykKICAgICAgICAgICAgKQoKI3NlbGVjdGluZyB2YXJpYWJsZXMgd2UgbmVlZCBhbmQgZmlsdGVyIG15IHRlYW0sIHdpbmdzIGRpZCBOT1QgbWFrZSB0aGUgcGxheW9mZnMsIGIgYW5kIHNvbWUgb2YgZApteV90ZWFtID0gZGF0YSAlPiUgCiAgc2VsZWN0KHRlYW1fc2NvcmUsIGZpZWxkX2dvYWxfcGN0LCB0b3RhbF9yZWJvdW5kcywgCiAgICAgICAgIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0LCBzdGVhbHMsIHRlYW1fbmFtZSwgdGVhbV93aW5uZXIpICU+JSAKICBmaWx0ZXIodGVhbV9uYW1lID09ICJXaW5ncyIpCgojZ3JvdXBzIGNhc2VzIGJ5IHdpbiB2cyBsb3NzCiNzdW1tYXJpemUgYWxsIHZhcmlhYmxlcyB3aXRoIG1lYW4gYW5kIFNECm15X3RlYW1fd2luID0gbXlfdGVhbSAlPiUKICBncm91cF9ieSh0ZWFtX3dpbm5lcikgJT4lCiAgc3VtbWFyaXNlKG1lYW49bWVhbih0ZWFtX3Njb3JlKSwgc2Q9c2QodGVhbV9zY29yZSkpCgojc2VwYXJhdGluZyB3aW5ncyBkYXRhIGJ5IHdpbiBhbmQgbG9zcwpkZl9oaXN0ID0gZGF0YSAlPiUKICBmaWx0ZXIodGVhbV9uYW1lID09ICJXaW5ncyIpJT4lCiAgbXV0YXRlKHJlc3VsdCA9IGNhc2Vfd2hlbih0ZWFtX3dpbm5lcj09VFJVRSB+IldpbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhbV93aW5uZXI9PUZBTFNFIH4gIkxvc3MiKSkKCiNjcmVhdGluZyBkYXRhZnJhbWUgZm9yIHdpbmdzIHdpbiBhbmQgbG9zcyBkYXRhCmRmX21vZGVsMSA9IGRhdGEgJT4lCiAgZmlsdGVyKHRlYW1fbmFtZSA9PSAiV2luZ3MiKQpgYGAKCiMgSW50cm9kdWN0aW9uClRoaXMgZGF0YSBzZXQgbG9va3MgYXQgdGhlIERhbGxhcyBXaW5ncyBXTkJBIHRlYW0ncyBnYW1lIGRhdGEgZnJvbSB0aGUgMjAyNSB5ZWFyLiBUaGUgdGVhbSBkaWQgbm90IG1ha2UgaXQgdG8gdGhlIHBsYXlvZmZzLiBUaGV5IHdvbiA5IGdhbWVzIGFuZCBsb3N0IDMxLiBCZWxvdyBhcmUgVGFibGVzIDEgYW5kIDIuIFRhYmxlIDEgZGVzY3JpYmVzIHRoZSBvdmVyYWxsIHNlYXNvbiByZXN1bHRzIGZvciBhbGwgdGVhbXMsIHdoaWxlIFRhYmxlIDIgZGVzY3JpYmVzIGEgc3VtbWFyeSBvZiBEYWxsYXMgV2luZ3MncyByZXN1bHRzIGZyb20gdGhlIHNlYXNvbi4gQmFzZWQgb24gdGhlIGRhdGEgZnJvbSB0aGlzIHNlYXNvbiwgd2Ugd2lsbCB0cnkgdG8gcHJlZGljdCB0aGUgcG9pbnQgc2NvcmUgZm9yIGEgIm1lZGlhbiIgZ2FtZSBmb3IgdGhlIERhbGxhcyBXaW5ncy4KCiMgVGFibGVzL1NlYXNvbiBTdW1tYXJ5CgpgYGB7ciB0YWJsZXMsIGluY2x1ZGU9VH0KI2NyZWF0aW5nIHN1bW1hcnkgdGFibGUgZm9yIGVudGlyZSBsZWFndWUKc3VtbWFyeSAlPiUKICBrYmwoY2FwdGlvbiA9ICJ0ZWFtIHNjb3JlIHN1bW1hcnkiLCBkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGKQoKI2NyZWF0aW5nIHN1bW1hcnkgdGFibGUgZm9yIGp1c3Qgd2luZ3MKbXlfdGVhbV93aW4gJT4lCiAga2JsKGNhcHRpb24gPSAiV2luZ3MgV2luIFN1bW1hcnkiLCBkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGKQoKYGBgCgojIEJveCBQbG90cwpCZWxvdyBhcmUgdHdvIGJveHBsb3RzIGJhc2VkIG9uIHRoZSBwb2ludHMgc2NvcmVkIGJ5IGdhbWUgcmVzdWx0ICh3aW4gb3IgbG9zZSkuIEluIGJvdGggc2NlbmFyaW9zLCB0aGVyZSBpcyBhYm91dCBlcXVhbCB2YXJpYXRpb24sIHRob3VnaCB0aGUgcG9pbnQgcmFuZ2UgYW5kIG1lZGlhbiBmb3Igd2lucyBpcyBoaWdoZXIgdGhhbiBsb3NzZXMuIFRoZWlyIG1pbmltdW0gZ2FtZSBzY29yZSB3YXMgNjcgd2hpbGUgdGhlIGhpZ2hlc3Qgd2FzIDEwOSBmb3IgbG9zaW5nIGdhbWVzLCB3aGlsZSBtaW5pbXVtIHdhcyA4NCBhbmQgbWF4aW11bSB3YXMgMTEzIGZvciB3aW5uaW5nIGdhbWVzLiAKCgpgYGB7ciBncmFwaHMsIGluY2x1ZGU9VCwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9N30KI2kgcmVmdXNlIHRvIGhhdmUgYSA2LTcgam9rZSBpbiBteSBjb2RpbmcuIHlvdSBjYW5ub3QgbWFrZSBtZQpwIDwtIGRhdGEgJT4lCiAgZ2dwbG90KGFlcyh4PXRlYW1fc2NvcmUsIGZpbGwgPSB0ZWFtX3dpbm5lcikpICsKICAgIGdlb21faGlzdG9ncmFtKGNvbG9yID0gIiNlOWVjZWYiLCBhbHBoYT0wLjYsIHBvc2l0aW9uID0gJ2lkZW50aXR5JykgKwogICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoIiMwMDJiNWMiLCAiI2M0ZDYwMCIpKSAKCmJveHBsb3QodGVhbV9zY29yZSB+IHJlc3VsdCwgZGF0YSA9IGRmX2hpc3QsIG5vdGNoID0gRkFMU0UsIAogICAgICAgIGNvbCA9IGMoIiMwMDJiNWMiLCAiI2M0ZDYwMCIpLAogICAgICAgIG1haW4gPSAiUG9pbnRzIHNjb3JlIGJ5IGdhbWUgcmVzdWx0IiwKICAgICAgICB4bGFiID0gIlJlc3VsdCIsIHlsYWIgPSAiUG9pbnRzIikKYGBgCgojIE1vZGVscwoKYGBge3IgRmlyc3QgT3JkZXIgTW9kZWwsIGluY2x1ZGUgPSBGfQoKI2NyZWF0aW5nIG1vZGVsIDEKbW9kZWwxPWxtKHRlYW1fc2NvcmV+ZmllbGRfZ29hbF9wY3QrdG90YWxfcmVib3VuZHMrdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QrCiAgICAgICAgICAgIHN0ZWFscywgZGF0YT1teV90ZWFtKQpzdW1tYXJ5KG1vZGVsMSkKCiNjcmVhdGluZyBjb3JyZWxhdGlvbiBtYXRyaXgKY29yX2RhdGEgPSBteV90ZWFtICU+JQogIHNlbGVjdCh0ZWFtX3Njb3JlLCBmaWVsZF9nb2FsX3BjdCwgdG90YWxfcmVib3VuZHMsIAogICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCwgc3RlYWxzKQoKY29yKGNvcl9kYXRhKQoKI2ZpbmRpbmcgdmlmIHZhbHVlcwp2aWYobW9kZWwxKQoKCiNjcmVhdGluZyBtb2RlbCAyLCBzYW1lIGFzIG1vZGVsIDEgZHVlIHRvIG5vIGhpZ2hseSBjb3JyZWxhdGVkIHBhaXJzCm1vZGVsMj1sbSh0ZWFtX3Njb3JlfmZpZWxkX2dvYWxfcGN0K3RvdGFsX3JlYm91bmRzK3RocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KwogICAgICAgICAgICBzdGVhbHMsIGRhdGE9bXlfdGVhbSkKc3VtbWFyeShtb2RlbDIpCgpgYGAKCgpgYGB7ciBJbnRlcmFjdGlvbiBNb2RlbCwgcmVzdWx0cz0nYXNpcycsIGVjaG89RiwgaW5jbHVkZSA9IEYsIGNvbW1lbnQ9TkF9CiNjcmVhdGluZyBtb2RlbCAzCm1vZGVsMz1sbSh0ZWFtX3Njb3JlfmZpZWxkX2dvYWxfcGN0K3RvdGFsX3JlYm91bmRzK3RocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0ICsgZmllbGRfZ29hbF9wY3QqdG90YWxfcmVib3VuZHMgKyBmaWVsZF9nb2FsX3BjdCp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCt0b3RhbF9yZWJvdW5kcyp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCwgZGF0YT1teV90ZWFtKQpzdW1tYXJ5KG1vZGVsMykKCiNtb2RlbDMgaGFkIG5vIHNpZ25pZmljYW50IGVmZmVjdHMsIHNvIHRoaXMgaXMgYSByZWR1Y2VkIG1vZGVsIGluY2x1ZGluZyB0aGUgcmVtb3ZhbCBvZiBzdGVhbHMgZHVlIHRvIGl0IG5vdCBiZWluZyBzaWduaWZpY2FudCBldmVuIHdpdGhvdXQgdGhlIGludGVyYWN0aW9uIGVmZmVjdHMKbW9kZWw0PWxtKHRlYW1fc2NvcmV+ZmllbGRfZ29hbF9wY3QrdG90YWxfcmVib3VuZHMrdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIGRhdGE9bXlfdGVhbSkKbW9kZWw0c3VtPXN1bW1hcnkobW9kZWw0KQoKCmBgYAoKJH4kCgpBZnRlciBhZnRlciBydW5uaW5nIGFsbCBtb2RlbHMgYW5kIHJlZHVjaW5nIG1vZGVscywgbXkgZmluYWwgbW9kZWwgaXMgdGVhbV9zY29yZT0gYHIgbW9kZWw0JGNvZWZmaWNpZW50c1sxXWAgKyBgciBtb2RlbDQkY29lZmZpY2llbnRzWzJdYCAqIGZpZWxkX2dvYWxfcGN0ICsgYHIgbW9kZWw0JGNvZWZmaWNpZW50c1szXWAgKiB0b3RhbF9yZWJvdW5kcyArIGByIG1vZGVsNCRjb2VmZmljaWVudHNbNF1gICogdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QuCgpUaGlzIG1vZGVsIHNpZ25pZmljYW50bHkgcHJlZGljdHMgdGVhbSBzY29yZSwgRihgciBtb2RlbDRzdW0kZnN0YXRpc3RpY1syXWAsIGByIG1vZGVsNHN1bSRmc3RhdGlzdGljWzNdYCkgPSBgciBtb2RlbDRzdW0kZnN0YXRpc3RpY1sxXWAsIHA8LjAwMDEsIGByIG1vZGVsNHN1bSRhZGouci5zcXVhcmVkYC4KClNlZSB0YWJsZSBiZWxvdyBmb3IgcmVzdWx0czoKYGBge3IsIGluY2x1ZGU9VCwgZWNobz1GLCByZXN1bHRzPSJhc2lzIiwgbWVzc2FnZT1GfQpsaWJyYXJ5KHN0YXJnYXplcikKc3RhcmdhemVyKG1vZGVsNCwgdHlwZSA9ICJodG1sIikKYGBgCgojIFJlc2lkdWFscwpGb3Igb3VyIHJlc2lkdWFsIGFuYWx5c2lzLCB3ZSB3aWxsIHN0YXJ0IHdpdGggdGhlIHJlc2lkdWFsIHZzIGZpdHRlZCB2YWx1ZXMgcGxvdC4gVGhlcmUgaXMgbm8gZGlzdGluY3Qgc2hhcGUgb3IgcGF0dGVybiB0aGF0IHdvdWxkIGNhdXNlIGNvbmNlcm4gYWJvdXQgZXF1YWwgdmFyaWFuY2VzLiBGb3IgdGhlIGhpc3RvZ3JhbSwgd2Ugc2VlIGEgcmVsYXRpdmVseSBub3JtYWwgc2hhcGUsIG1lYW5pbmcgd2UgY2FuIGFjY2VwdCBvdXIgYXNzdW1wdGlvbiBvZiBub3JtYWxpdHkuIFRoZSBzdHVkZW50aXplZCByZXNpZHVhbHMgcGxvdCByZXZlYWxzIG9ic2VydmF0aW9uIDM1IHRvIGJlIGFuIG91dGxpZXIuIFRoZSBvdXRsaWVyIGFuZCBsZXZlcmFnZSBkaWFnbm9zdGljIHNob3dzIHVzIDMgbGV2ZXJhZ2UgcG9pbnRzICgyOSwgMzksIGFuZCAxNCkgYW5kIGFnYWluIDM1IGFzIGFuIG91dGxpZXIuIE9ic2VydmF0aW9uIDI5IHdhcyBhIGdhbWUgYWdhaW5zdCBDaGljYWdvIFNreSBvbiA1LjE4LjI0LCBvYnNlcnZhdGlvbiAzOSB3YXMgYSBnYW1lIGFnYWluc3QgQ29ubmVjdGljdXQgU3VuIG9uIDYvMTUvMjQsIG9ic2VydmF0aW9uIDE0IHdhcyBhIGdhbWUgYWdhaW5zdCBOZXcgWW9yayBMaWJlcnR5IG9uIDgvMjIvMjQsIGFuZCBvYnNlcnZhdGlvbiAzNSB3YXMgYSBnYW1lIGFnYWluc3QgQ29ubmVjdGljdXQgU3VuIG9uIDUvMzEvMjQuCmBgYHtyIFJlc2lkdWFsc30KI3Jlc2lkdWFsIHBsb3RzIApvbHNfcGxvdF9yZXNpZF9maXQobW9kZWw0KSAjdmVyc3VzIGZpdApvbHNfcGxvdF9yZXNpZF9oaXN0KG1vZGVsNCkgI2hpc3RvZ3JhbQpvbHNfcGxvdF9yZXNpZF9zdHVkKG1vZGVsNCkgI3N0dWRlbnRpemVkIHJlc2lkdWFscwpvbHNfcGxvdF9yZXNpZF9sZXYobW9kZWw0LCB0aHJlc2hvbGQgPSAzKSAjb3V0bGllciBhbmQgbGV2ZXJhZ2UgZGlhZ25vc3RpY3MKb2xzX3Bsb3RfY29va3NkX2NoYXJ0KG1vZGVsNCkgI2Nvb2sncyBkIGNoYXJ0CmBgYAoKIyBQcmVkaWN0aW9uCgpgYGB7ciBQcmVkaWN0aW9uLCBpbmNsdWRlID0gRn0KI2ZvciBmaW5kaW5nIG1lZGlhbiB2YWx1ZXMKc3VtbWFyeShjb3JfZGF0YSkKCiNuZXcgZGF0YSBmcmFtZSBmb3IgdGhlIG1lZGlhbiBnYW1lCm5ld2RhdGE9ZGF0YS5mcmFtZShmaWVsZF9nb2FsX3BjdD00NC40MCwgdG90YWxfcmVib3VuZHM9MzQuMDAsIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0PTMzLjMwLCBzdGVhbHM9Ni41MCkKCiNwcmVkaWN0aW5nIG1lZGlhbiBnYW1lCnByZWRpY3Rpb24gPSBwcmVkaWN0KG1vZGVsNCwgbmV3ZGF0YSwgaW50ZXJ2YWwgPSAiY29uZmlkZW5jZSIsIGxldmVsPS45NSkKYGBgCkkgYnVpbHQgdGhpcyBtb2RlbCB0byBwcmVkaWN0IG15IHRlYW0ncyBwb2ludHMgZm9yIGEgZ2FtZSBpbiB3aGljaCB0aGV5IGFjaGlldmUgdGhlIG1lZGlhbiB2YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gVGhlIHByZWRpY3RlZCB0ZWFtIHNjb3JlIGlzIGByIHByZWRpY3Rpb25bMV1gLCB3aXRoIDk1JSBjb25maWRlbmNlIGludGVydmFsIChgciBwcmVkaWN0aW9uWzJdYCwgYHIgcHJlZGljdGlvblszXWApLgoKICAgICA=