library(rio)
Fifa <- import("/Users/bengalycisse/Downloads/male_teams.csv")

Data screening:

Relevant Attributes:

# Define the relevant columns
relevant_columns <- c(
  "team_id","overall", "attack", "midfield", "defence", "transfer_budget_eur", 
  "club_worth_eur", "starting_xi_average_age", "whole_team_average_age", 
  "coach_id", "international_prestige", "domestic_prestige", "rival_team"
)

# Subset the 'Fifa' dataframe to keep only the relevant columns
Fifa_cleaned <- Fifa[, relevant_columns]

Accuracy:

str(Fifa_cleaned)
## 'data.frame':    385055 obs. of  13 variables:
##  $ team_id                : int  10 73 243 1337 5 9 21 241 1318 44 ...
##  $ overall                : int  85 85 85 85 84 84 84 84 84 83 ...
##  $ attack                 : int  85 87 85 82 83 84 78 84 85 85 ...
##  $ midfield               : int  86 83 86 85 83 82 86 85 83 83 ...
##  $ defence                : int  86 83 84 82 83 86 83 82 83 83 ...
##  $ transfer_budget_eur    : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ club_worth_eur         :integer64 -2147483648 -2147483648 -2147483648 NA -2147483648 -2147483648 -2147483648 -2147483648 ... 
##  $ starting_xi_average_age: num  27.1 26.8 28.6 28.3 26.7 ...
##  $ whole_team_average_age : num  25.9 26 24.6 27.2 24.6 ...
##  $ coach_id               : int  455361 524011 455800 37352367 452683 455353 458813 184942 474589 128160 ...
##  $ international_prestige : int  10 9 10 10 8 9 10 10 8 7 ...
##  $ domestic_prestige      : int  10 10 10 NA 9 9 10 10 NA 9 ...
##  $ rival_team             : int  11 219 241 1318 1 11 22 243 1337 47 ...
summary(Fifa_cleaned)
##     team_id          overall         attack         midfield    
##  Min.   :     1   Min.   :50.0   Min.   :46.00   Min.   :48.00  
##  1st Qu.:   485   1st Qu.:65.0   1st Qu.:66.00   1st Qu.:65.00  
##  Median :  1877   Median :69.0   Median :69.00   Median :68.00  
##  Mean   : 44058   Mean   :69.1   Mean   :69.62   Mean   :68.91  
##  3rd Qu.:110827   3rd Qu.:72.0   3rd Qu.:73.00   3rd Qu.:72.00  
##  Max.   :116361   Max.   :86.0   Max.   :93.00   Max.   :89.00  
##                                                                 
##     defence      transfer_budget_eur club_worth_eur       
##  Min.   :48.00   Min.   :   100000   Min.   :-2147483648  
##  1st Qu.:64.00   1st Qu.:  1200000   1st Qu.:    5000000  
##  Median :68.00   Median :  2900000   Median :   13000000  
##  Mean   :68.34   Mean   :  8070019   Mean   :   48005629  
##  3rd Qu.:72.00   3rd Qu.:  7000000   3rd Qu.:   51000000  
##  Max.   :87.00   Max.   :190900000   Max.   : 2100000000  
##                  NA's   :31922       NA's   :      94962  
##  starting_xi_average_age whole_team_average_age    coach_id       
##  Min.   :18.82           Min.   :19.00          Min.   :      24  
##  1st Qu.:25.18           1st Qu.:23.96          1st Qu.:  219788  
##  Median :26.36           Median :24.88          Median :  467859  
##  Mean   :26.31           Mean   :24.95          Mean   : 6398032  
##  3rd Qu.:27.45           3rd Qu.:25.86          3rd Qu.: 1553390  
##  Max.   :33.64           Max.   :33.11          Max.   :37666625  
##                                                 NA's   :2328      
##  international_prestige domestic_prestige   rival_team    
##  Min.   : 1.000         Min.   : 1.000    Min.   :     1  
##  1st Qu.: 1.000         1st Qu.: 4.000    1st Qu.:   300  
##  Median : 3.000         Median : 6.000    Median :  1463  
##  Mean   : 3.797         Mean   : 6.643    Mean   : 34452  
##  3rd Qu.: 5.000         3rd Qu.: 9.000    3rd Qu.:101151  
##  Max.   :20.000         Max.   :20.000    Max.   :116361  
##                         NA's   :25829

Missing

# Check for missing values in each column
colSums(is.na(Fifa_cleaned))
##                 team_id                 overall                  attack 
##                       0                       0                       0 
##                midfield                 defence     transfer_budget_eur 
##                       0                       0                   31922 
##          club_worth_eur starting_xi_average_age  whole_team_average_age 
##                   94962                       0                       0 
##                coach_id  international_prestige       domestic_prestige 
##                    2328                       0                   25829 
##              rival_team 
##                       0
library(VIM, quietly = T)
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
## 
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
## 
##     sleep
aggr(Fifa_cleaned, numbers = T)
## Warning in plot.aggr(res, ...): not enough horizontal space to display
## frequencies

percentmiss <- function(x){ sum(is.na(x))/length(x) * 100 }
missing <- apply(Fifa_cleaned, 1, percentmiss)
table(missing)
## missing
##                0 7.69230769230769 15.3846153846154 
##           347350            11782            25923
# Assuming 'Fifa_cleaned' is your dataset
replace_rows <- Fifa_cleaned[rowSums(is.na(Fifa_cleaned)) == 0, ]

… ## Outliers

str(replace_rows)
## 'data.frame':    282672 obs. of  13 variables:
##  $ team_id                : int  9 10 73 5 21 243 11 240 241 44 ...
##  $ overall                : int  85 85 85 84 84 84 83 83 83 82 ...
##  $ attack                 : int  86 84 89 84 92 85 82 84 83 82 ...
##  $ midfield               : int  84 87 82 85 85 86 83 82 85 82 ...
##  $ defence                : int  85 86 84 83 82 83 81 82 81 83 ...
##  $ transfer_budget_eur    : int  95000000 176000000 160000000 85000000 100000000 150000000 175000000 68600000 130000000 99500000 ...
##  $ club_worth_eur         :integer64 -2147483648 -2147483648 -2147483648 -2147483648 -2147483648 -2147483648 -2147483648 1200000000 ... 
##  $ starting_xi_average_age: num  27.7 26.1 26.2 27.4 26.8 ...
##  $ whole_team_average_age : num  24.8 23.8 25.5 24.4 24.5 ...
##  $ coach_id               : int  455353 455361 524011 452683 458813 455800 456113 452946 184942 128160 ...
##  $ international_prestige : int  9 10 9 8 10 10 8 9 10 7 ...
##  $ domestic_prestige      : int  9 10 10 8 10 10 9 9 10 9 ...
##  $ rival_team             : int  11 11 219 1 22 241 9 243 243 47 ...

Normality

# List of numeric columns
numeric_cols <- c("overall", "attack", "midfield", "defence",
                  "starting_xi_average_age", "whole_team_average_age",
                  "coach_id", "international_prestige", "domestic_prestige", "rival_team")

# Loop through each numeric column and plot histograms
for (col in numeric_cols) {
  hist(replace_rows[[col]], main = col, xlab = col)
}

Hypothesis

Null Hypothesis (H0): There is no significant relationship between the transfer budget and performance Alternative Hypothesis (H1): There is a significant relationship between the transfer budget and performance # Conduct t-tests

# Between transfer_budget_eur and Overall attribute
t_test_Overall <- t.test(replace_rows$transfer_budget_eur, replace_rows$overall)
print(t_test_Overall)
## 
##  Welch Two Sample t-test
## 
## data:  replace_rows$transfer_budget_eur and replace_rows$overall
## t = 255.78, df = 282671, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  8716012 8850619
## sample estimates:
##    mean of x    mean of y 
## 8.783385e+06 6.894352e+01
# Between transfer_budget_eur and Club Worth

      # Remove rows with missing values in transfer_budget_eur and club_worth_eur columns
replace_rows_complete <- replace_rows[complete.cases(replace_rows[, c("transfer_budget_eur", "club_worth_eur")]), ]

# Perform t-test between transfer_budget_eur and club_worth_eur
t_test_club_worth <- t.test(replace_rows_complete$transfer_budget_eur, replace_rows_complete$club_worth_eur)

#t_test_club_worth<- t.test(replace_rows$transfer_budget_eur, replace_rows$club_worth_eur)
print(t_test_club_worth)
## 
##  Welch Two Sample t-test
## 
## data:  replace_rows_complete$transfer_budget_eur and replace_rows_complete$club_worth_eur
## t = -2957.9, df = 279212, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -68294474 -68204026
## sample estimates:
##     mean of x     mean of y 
##  7.349660e+06 3.735082e-316
# Between transfer_budget_eur and attack
t_test_attack<- t.test(replace_rows$transfer_budget_eur, replace_rows$attack)
print(t_test_attack)
## 
##  Welch Two Sample t-test
## 
## data:  replace_rows$transfer_budget_eur and replace_rows$attack
## t = 255.78, df = 282671, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  8716012 8850619
## sample estimates:
##    mean of x    mean of y 
## 8.783385e+06 6.949291e+01
# Between transfer_budget_eur and midfield
t_test_midfield<- t.test(replace_rows$transfer_budget_eur, replace_rows$midfield)
print(t_test_midfield)
## 
##  Welch Two Sample t-test
## 
## data:  replace_rows$transfer_budget_eur and replace_rows$midfield
## t = 255.78, df = 282671, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  8716012 8850619
## sample estimates:
##    mean of x    mean of y 
## 8.783385e+06 6.890881e+01
# Between transfer_budget_eur and defence
t_test_defence<- t.test(replace_rows$transfer_budget_eur, replace_rows$defence)
print(t_test_defence)
## 
##  Welch Two Sample t-test
## 
## data:  replace_rows$transfer_budget_eur and replace_rows$defence
## t = 255.78, df = 282671, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  8716013 8850620
## sample estimates:
##    mean of x    mean of y 
## 8.783385e+06 6.829902e+01
# Between transfer_budget_eur and Internation Prestige
t_test_int_prestige<- t.test(replace_rows$transfer_budget_eur, replace_rows$international_prestige)
print(t_test_int_prestige)
## 
##  Welch Two Sample t-test
## 
## data:  replace_rows$transfer_budget_eur and replace_rows$international_prestige
## t = 255.78, df = 282671, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  8716078 8850685
## sample estimates:
##    mean of x    mean of y 
## 8.783385e+06 2.671446e+00
# Between transfer_budget_eur and domestic prestige
t_test_domestic_prestige<- t.test(replace_rows$transfer_budget_eur, replace_rows$domestic_prestige)
print(t_test_domestic_prestige)
## 
##  Welch Two Sample t-test
## 
## data:  replace_rows$transfer_budget_eur and replace_rows$domestic_prestige
## t = 255.78, df = 282671, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  8716076 8850683
## sample estimates:
##    mean of x    mean of y 
## 8.783385e+06 5.497488e+00
# Between transfer_budget_eur and rival_team
t_test_rival_team<- t.test(replace_rows$transfer_budget_eur, replace_rows$rival_team)
print(t_test_rival_team)
## 
##  Welch Two Sample t-test
## 
## data:  replace_rows$transfer_budget_eur and replace_rows$rival_team
## t = 254.73, df = 282675, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  8679807 8814414
## sample estimates:
##  mean of x  mean of y 
## 8783384.65   36274.36
# Scatter plot for Overall attribute with regression line
plot(replace_rows$transfer_budget_eur, replace_rows$overall, 
     xlab = "Transfer Budget (EUR)", ylab = "Overall Rating",
     main = "Scatter Plot: Transfer Budget vs Overall Rating")
abline(lm(overall ~ transfer_budget_eur, data = replace_rows), col = "red")

# Scatter plot for Attack attribute with regression line
plot(replace_rows$transfer_budget_eur, replace_rows$attack, 
     xlab = "Transfer Budget (EUR)", ylab = "Attack Rating",
     main = "Scatter Plot: Transfer Budget vs Attack Rating")
abline(lm(attack ~ transfer_budget_eur, data = replace_rows), col = "blue")

# Scatter plot for Midfield attribute with regression line
plot(replace_rows$transfer_budget_eur, replace_rows$midfield, 
     xlab = "Transfer Budget (EUR)", ylab = "Midfield Rating",
     main = "Scatter Plot: Transfer Budget vs Midfield Rating")
abline(lm(midfield ~ transfer_budget_eur, data = replace_rows), col = "green")

# Scatter plot for Midfield attribute with regression line
plot(replace_rows$transfer_budget_eur, replace_rows$defence, 
     xlab = "Transfer Budget (EUR)", ylab = "Defence Rating",
     main = "Scatter Plot: Transfer Budget vs Defence Rating")
abline(lm(midfield ~ transfer_budget_eur, data = replace_rows), col = "yellow")

LS0tCnRpdGxlOiAiSW1wYWN0IG9mIEJ1ZGdldCBvbiBhIFNvY2NlciB0ZWFtIFBlcmZvcm1hbmNlIgphdXRob3I6ICJCZW5nYWx5ICIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydAotLS0KCmBgYHtyIGxvYWQtcGFja2FnZXMsIG1lc3NhZ2U9RkFMU0V9CmxpYnJhcnkocmlvKQpGaWZhIDwtIGltcG9ydCgiL1VzZXJzL2JlbmdhbHljaXNzZS9Eb3dubG9hZHMvbWFsZV90ZWFtcy5jc3YiKQpgYGAKCiMgRGF0YSBzY3JlZW5pbmc6CgojIyBSZWxldmFudCBBdHRyaWJ1dGVzOgoKYGBge3J9CiMgRGVmaW5lIHRoZSByZWxldmFudCBjb2x1bW5zCnJlbGV2YW50X2NvbHVtbnMgPC0gYygKICAidGVhbV9pZCIsIm92ZXJhbGwiLCAiYXR0YWNrIiwgIm1pZGZpZWxkIiwgImRlZmVuY2UiLCAidHJhbnNmZXJfYnVkZ2V0X2V1ciIsIAogICJjbHViX3dvcnRoX2V1ciIsICJzdGFydGluZ194aV9hdmVyYWdlX2FnZSIsICJ3aG9sZV90ZWFtX2F2ZXJhZ2VfYWdlIiwgCiAgImNvYWNoX2lkIiwgImludGVybmF0aW9uYWxfcHJlc3RpZ2UiLCAiZG9tZXN0aWNfcHJlc3RpZ2UiLCAicml2YWxfdGVhbSIKKQoKIyBTdWJzZXQgdGhlICdGaWZhJyBkYXRhZnJhbWUgdG8ga2VlcCBvbmx5IHRoZSByZWxldmFudCBjb2x1bW5zCkZpZmFfY2xlYW5lZCA8LSBGaWZhWywgcmVsZXZhbnRfY29sdW1uc10KCmBgYAoKIyMgQWNjdXJhY3k6CgpgYGB7ciBBY2N1cmFjeX0Kc3RyKEZpZmFfY2xlYW5lZCkKc3VtbWFyeShGaWZhX2NsZWFuZWQpCgpgYGAKCiMjIE1pc3NpbmcKCmBgYHtyfQojIENoZWNrIGZvciBtaXNzaW5nIHZhbHVlcyBpbiBlYWNoIGNvbHVtbgpjb2xTdW1zKGlzLm5hKEZpZmFfY2xlYW5lZCkpCmxpYnJhcnkoVklNLCBxdWlldGx5ID0gVCkKYWdncihGaWZhX2NsZWFuZWQsIG51bWJlcnMgPSBUKQpwZXJjZW50bWlzcyA8LSBmdW5jdGlvbih4KXsgc3VtKGlzLm5hKHgpKS9sZW5ndGgoeCkgKiAxMDAgfQptaXNzaW5nIDwtIGFwcGx5KEZpZmFfY2xlYW5lZCwgMSwgcGVyY2VudG1pc3MpCnRhYmxlKG1pc3NpbmcpCgoKIyBBc3N1bWluZyAnRmlmYV9jbGVhbmVkJyBpcyB5b3VyIGRhdGFzZXQKcmVwbGFjZV9yb3dzIDwtIEZpZmFfY2xlYW5lZFtyb3dTdW1zKGlzLm5hKEZpZmFfY2xlYW5lZCkpID09IDAsIF0KCmBgYAoKLi4uIFwjIyBPdXRsaWVycwoKYGBge3J9CnN0cihyZXBsYWNlX3Jvd3MpCmBgYAoKIyMgTm9ybWFsaXR5CgpgYGB7ciBsaW5lYXJpdHl9CiMgTGlzdCBvZiBudW1lcmljIGNvbHVtbnMKbnVtZXJpY19jb2xzIDwtIGMoIm92ZXJhbGwiLCAiYXR0YWNrIiwgIm1pZGZpZWxkIiwgImRlZmVuY2UiLAogICAgICAgICAgICAgICAgICAic3RhcnRpbmdfeGlfYXZlcmFnZV9hZ2UiLCAid2hvbGVfdGVhbV9hdmVyYWdlX2FnZSIsCiAgICAgICAgICAgICAgICAgICJjb2FjaF9pZCIsICJpbnRlcm5hdGlvbmFsX3ByZXN0aWdlIiwgImRvbWVzdGljX3ByZXN0aWdlIiwgInJpdmFsX3RlYW0iKQoKIyBMb29wIHRocm91Z2ggZWFjaCBudW1lcmljIGNvbHVtbiBhbmQgcGxvdCBoaXN0b2dyYW1zCmZvciAoY29sIGluIG51bWVyaWNfY29scykgewogIGhpc3QocmVwbGFjZV9yb3dzW1tjb2xdXSwgbWFpbiA9IGNvbCwgeGxhYiA9IGNvbCkKfQoKYGBgCgojIyBIeXBvdGhlc2lzCgpOdWxsIEh5cG90aGVzaXMgKEgwKTogVGhlcmUgaXMgbm8gc2lnbmlmaWNhbnQgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHRyYW5zZmVyIGJ1ZGdldCBhbmQgcGVyZm9ybWFuY2UgQWx0ZXJuYXRpdmUgSHlwb3RoZXNpcyAoSDEpOiBUaGVyZSBpcyBhIHNpZ25pZmljYW50IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0cmFuc2ZlciBidWRnZXQgYW5kIHBlcmZvcm1hbmNlIFwjIENvbmR1Y3QgdC10ZXN0cwoKYGBge3J9CiMgQmV0d2VlbiB0cmFuc2Zlcl9idWRnZXRfZXVyIGFuZCBPdmVyYWxsIGF0dHJpYnV0ZQp0X3Rlc3RfT3ZlcmFsbCA8LSB0LnRlc3QocmVwbGFjZV9yb3dzJHRyYW5zZmVyX2J1ZGdldF9ldXIsIHJlcGxhY2Vfcm93cyRvdmVyYWxsKQpwcmludCh0X3Rlc3RfT3ZlcmFsbCkKIyBCZXR3ZWVuIHRyYW5zZmVyX2J1ZGdldF9ldXIgYW5kIENsdWIgV29ydGgKCiAgICAgICMgUmVtb3ZlIHJvd3Mgd2l0aCBtaXNzaW5nIHZhbHVlcyBpbiB0cmFuc2Zlcl9idWRnZXRfZXVyIGFuZCBjbHViX3dvcnRoX2V1ciBjb2x1bW5zCnJlcGxhY2Vfcm93c19jb21wbGV0ZSA8LSByZXBsYWNlX3Jvd3NbY29tcGxldGUuY2FzZXMocmVwbGFjZV9yb3dzWywgYygidHJhbnNmZXJfYnVkZ2V0X2V1ciIsICJjbHViX3dvcnRoX2V1ciIpXSksIF0KCiMgUGVyZm9ybSB0LXRlc3QgYmV0d2VlbiB0cmFuc2Zlcl9idWRnZXRfZXVyIGFuZCBjbHViX3dvcnRoX2V1cgp0X3Rlc3RfY2x1Yl93b3J0aCA8LSB0LnRlc3QocmVwbGFjZV9yb3dzX2NvbXBsZXRlJHRyYW5zZmVyX2J1ZGdldF9ldXIsIHJlcGxhY2Vfcm93c19jb21wbGV0ZSRjbHViX3dvcnRoX2V1cikKCiN0X3Rlc3RfY2x1Yl93b3J0aDwtIHQudGVzdChyZXBsYWNlX3Jvd3MkdHJhbnNmZXJfYnVkZ2V0X2V1ciwgcmVwbGFjZV9yb3dzJGNsdWJfd29ydGhfZXVyKQpwcmludCh0X3Rlc3RfY2x1Yl93b3J0aCkKIyBCZXR3ZWVuIHRyYW5zZmVyX2J1ZGdldF9ldXIgYW5kIGF0dGFjawp0X3Rlc3RfYXR0YWNrPC0gdC50ZXN0KHJlcGxhY2Vfcm93cyR0cmFuc2Zlcl9idWRnZXRfZXVyLCByZXBsYWNlX3Jvd3MkYXR0YWNrKQpwcmludCh0X3Rlc3RfYXR0YWNrKQojIEJldHdlZW4gdHJhbnNmZXJfYnVkZ2V0X2V1ciBhbmQgbWlkZmllbGQKdF90ZXN0X21pZGZpZWxkPC0gdC50ZXN0KHJlcGxhY2Vfcm93cyR0cmFuc2Zlcl9idWRnZXRfZXVyLCByZXBsYWNlX3Jvd3MkbWlkZmllbGQpCnByaW50KHRfdGVzdF9taWRmaWVsZCkKIyBCZXR3ZWVuIHRyYW5zZmVyX2J1ZGdldF9ldXIgYW5kIGRlZmVuY2UKdF90ZXN0X2RlZmVuY2U8LSB0LnRlc3QocmVwbGFjZV9yb3dzJHRyYW5zZmVyX2J1ZGdldF9ldXIsIHJlcGxhY2Vfcm93cyRkZWZlbmNlKQpwcmludCh0X3Rlc3RfZGVmZW5jZSkKIyBCZXR3ZWVuIHRyYW5zZmVyX2J1ZGdldF9ldXIgYW5kIEludGVybmF0aW9uIFByZXN0aWdlCnRfdGVzdF9pbnRfcHJlc3RpZ2U8LSB0LnRlc3QocmVwbGFjZV9yb3dzJHRyYW5zZmVyX2J1ZGdldF9ldXIsIHJlcGxhY2Vfcm93cyRpbnRlcm5hdGlvbmFsX3ByZXN0aWdlKQpwcmludCh0X3Rlc3RfaW50X3ByZXN0aWdlKQojIEJldHdlZW4gdHJhbnNmZXJfYnVkZ2V0X2V1ciBhbmQgZG9tZXN0aWMgcHJlc3RpZ2UKdF90ZXN0X2RvbWVzdGljX3ByZXN0aWdlPC0gdC50ZXN0KHJlcGxhY2Vfcm93cyR0cmFuc2Zlcl9idWRnZXRfZXVyLCByZXBsYWNlX3Jvd3MkZG9tZXN0aWNfcHJlc3RpZ2UpCnByaW50KHRfdGVzdF9kb21lc3RpY19wcmVzdGlnZSkKIyBCZXR3ZWVuIHRyYW5zZmVyX2J1ZGdldF9ldXIgYW5kIHJpdmFsX3RlYW0KdF90ZXN0X3JpdmFsX3RlYW08LSB0LnRlc3QocmVwbGFjZV9yb3dzJHRyYW5zZmVyX2J1ZGdldF9ldXIsIHJlcGxhY2Vfcm93cyRyaXZhbF90ZWFtKQpwcmludCh0X3Rlc3Rfcml2YWxfdGVhbSkKYGBgCgpgYGB7cn0KIyBTY2F0dGVyIHBsb3QgZm9yIE92ZXJhbGwgYXR0cmlidXRlIHdpdGggcmVncmVzc2lvbiBsaW5lCnBsb3QocmVwbGFjZV9yb3dzJHRyYW5zZmVyX2J1ZGdldF9ldXIsIHJlcGxhY2Vfcm93cyRvdmVyYWxsLCAKICAgICB4bGFiID0gIlRyYW5zZmVyIEJ1ZGdldCAoRVVSKSIsIHlsYWIgPSAiT3ZlcmFsbCBSYXRpbmciLAogICAgIG1haW4gPSAiU2NhdHRlciBQbG90OiBUcmFuc2ZlciBCdWRnZXQgdnMgT3ZlcmFsbCBSYXRpbmciKQphYmxpbmUobG0ob3ZlcmFsbCB+IHRyYW5zZmVyX2J1ZGdldF9ldXIsIGRhdGEgPSByZXBsYWNlX3Jvd3MpLCBjb2wgPSAicmVkIikKCiMgU2NhdHRlciBwbG90IGZvciBBdHRhY2sgYXR0cmlidXRlIHdpdGggcmVncmVzc2lvbiBsaW5lCnBsb3QocmVwbGFjZV9yb3dzJHRyYW5zZmVyX2J1ZGdldF9ldXIsIHJlcGxhY2Vfcm93cyRhdHRhY2ssIAogICAgIHhsYWIgPSAiVHJhbnNmZXIgQnVkZ2V0IChFVVIpIiwgeWxhYiA9ICJBdHRhY2sgUmF0aW5nIiwKICAgICBtYWluID0gIlNjYXR0ZXIgUGxvdDogVHJhbnNmZXIgQnVkZ2V0IHZzIEF0dGFjayBSYXRpbmciKQphYmxpbmUobG0oYXR0YWNrIH4gdHJhbnNmZXJfYnVkZ2V0X2V1ciwgZGF0YSA9IHJlcGxhY2Vfcm93cyksIGNvbCA9ICJibHVlIikKCiMgU2NhdHRlciBwbG90IGZvciBNaWRmaWVsZCBhdHRyaWJ1dGUgd2l0aCByZWdyZXNzaW9uIGxpbmUKcGxvdChyZXBsYWNlX3Jvd3MkdHJhbnNmZXJfYnVkZ2V0X2V1ciwgcmVwbGFjZV9yb3dzJG1pZGZpZWxkLCAKICAgICB4bGFiID0gIlRyYW5zZmVyIEJ1ZGdldCAoRVVSKSIsIHlsYWIgPSAiTWlkZmllbGQgUmF0aW5nIiwKICAgICBtYWluID0gIlNjYXR0ZXIgUGxvdDogVHJhbnNmZXIgQnVkZ2V0IHZzIE1pZGZpZWxkIFJhdGluZyIpCmFibGluZShsbShtaWRmaWVsZCB+IHRyYW5zZmVyX2J1ZGdldF9ldXIsIGRhdGEgPSByZXBsYWNlX3Jvd3MpLCBjb2wgPSAiZ3JlZW4iKQoKIyBTY2F0dGVyIHBsb3QgZm9yIE1pZGZpZWxkIGF0dHJpYnV0ZSB3aXRoIHJlZ3Jlc3Npb24gbGluZQpwbG90KHJlcGxhY2Vfcm93cyR0cmFuc2Zlcl9idWRnZXRfZXVyLCByZXBsYWNlX3Jvd3MkZGVmZW5jZSwgCiAgICAgeGxhYiA9ICJUcmFuc2ZlciBCdWRnZXQgKEVVUikiLCB5bGFiID0gIkRlZmVuY2UgUmF0aW5nIiwKICAgICBtYWluID0gIlNjYXR0ZXIgUGxvdDogVHJhbnNmZXIgQnVkZ2V0IHZzIERlZmVuY2UgUmF0aW5nIikKYWJsaW5lKGxtKG1pZGZpZWxkIH4gdHJhbnNmZXJfYnVkZ2V0X2V1ciwgZGF0YSA9IHJlcGxhY2Vfcm93cyksIGNvbCA9ICJ5ZWxsb3ciKQoKYGBgCg==