This is part of a series of pages related to EPL Away Wins:

Exploratory data analysis for English Premier League results, for seasons 2000/01 to 2018/19. How well can Away wins be predicted from individual match variables?

Summary of Selected Variables

For each game, we have home team and away team data for:

We have data for the previous 4 games for the home team and away team. We also have data for:

We can look at summary statistics and distributions of some of these variables.

       HS             HST               HC               HF              HY            HomexG     
 Min.   : 0.00   Min.   : 0.000   Min.   : 0.000   Min.   : 0.00   Min.   :0.000   Min.   :0.000  
 1st Qu.:10.00   1st Qu.: 4.000   1st Qu.: 4.000   1st Qu.: 9.00   1st Qu.:0.000   1st Qu.:0.850  
 Median :13.00   Median : 6.000   Median : 6.000   Median :11.00   Median :1.000   Median :1.370  
 Mean   :13.53   Mean   : 6.363   Mean   : 6.167   Mean   :11.37   Mean   :1.376   Mean   :1.505  
 3rd Qu.:17.00   3rd Qu.: 8.000   3rd Qu.: 8.000   3rd Qu.:14.00   3rd Qu.:2.000   3rd Qu.:2.030  
 Max.   :43.00   Max.   :24.000   Max.   :19.000   Max.   :33.00   Max.   :7.000   Max.   :5.730  
                                                                                   NA's   :4620   
      Dist             winpc_H         top6_perfH    
 Min.   :  0.9521   Min.   :  0.00   Min.   :0.0000  
 1st Qu.:108.4414   1st Qu.: 24.00   1st Qu.:0.1482  
 Median :174.1738   Median : 33.33   Median :0.2667  
 Mean   :187.5508   Mean   : 36.70   Mean   :0.3031  
 3rd Qu.:278.3909   3rd Qu.: 48.15   3rd Qu.:0.4444  
 Max.   :472.2527   Max.   :100.00   Max.   :1.0000  
                                     NA's   :61      

We only have xG data for a couple of seasons, so there are a lot of missing values for this. There are a small number of missing values for top 6 performance variables, but all the other variables are complete.

Yellow card data is very discrete and will not be investigated further at this stage.

Normalisation of these distributions using transformations is not deemed to be required.

Feature Correlations

We will now demonstrate how much correlation is observed between the feature variables. We will just compare Home variables for the previous game as indicators.

Only variables with at least one correlation coefficient outside ±0.65 are included in the above plot.

This plot shows that:

Away Wins

What proportion of results are Away Wins and how does this vary?

overall, how many games are Away wins:
   0    1 
4514 1756 

by season:

Therefore, approximately 28% of these games are Away wins. The proportion of these that are Away wins varies on a season basis from ~22-33%. The change in proportion over time suggests that the proportion could be increasing, however the p-value for the season component of a linear fit to this data is 0.104.

Two Variable Plots

We will now create plots to illustrate how feature variables affect the observed proportion of Away wins. We will sum the match variables over the previous 4 matches to give perhaps a better representation of current form.

Some of the conclusions on relationship with Away Win proportion that we can draw from these:

So recommended to take the following forward for predictive purposes:


End

LS0tDQp0aXRsZTogIkVQTCBFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KVGhpcyBpcyBwYXJ0IG9mIGEgc2VyaWVzIG9mIHBhZ2VzIHJlbGF0ZWQgdG8gRVBMIEF3YXkgV2luczogIA0KDQoqIEV4cGxvcmF0b3J5IERhdGEgQW5hbHlzaXMgKHRoaXMgcGFnZSkNCiogW0RhdGEgTW9kZWxsaW5nXShodHRwczovL3JwdWJzLmNvbS9HYXJldGhDaGFkL0VQTF9tb2RlbGxpbmcpDQoqIFtCZXR0aW5nIFN0cmF0ZWdpZXNdKGh0dHBzOi8vcnB1YnMuY29tL0dhcmV0aENoYWQvRVBMX3N0cmF0ZWd5KQ0KDQoNCkV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgZm9yIEVuZ2xpc2ggUHJlbWllciBMZWFndWUgcmVzdWx0cywgZm9yIHNlYXNvbnMgMjAwMC8wMSB0byAyMDE4LzE5LiBIb3cgd2VsbCBjYW4gQXdheSB3aW5zIGJlIHByZWRpY3RlZCBmcm9tIGluZGl2aWR1YWwgbWF0Y2ggdmFyaWFibGVzPyAgDQoNCg0KYGBge3IgSW5pdGlhbGlzZSBhbmQgTG9hZCBEYXRhLCBpbmNsdWRlPUZBTFNFfQ0Kcm0obGlzdCA9IGxzKCkpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShncmlkRXh0cmEpDQoNCmxvYWQoaGVyZTo6aGVyZSgiZGF0YS9pbnRlcmltL0VuX2ZlYXR1cmVzLlJEYXRhIikpDQpFbl9mZWF0dXJlcyA8LSBFbl9mZWF0dXJlcyAlPiUNCiAgZmlsdGVyKGluZGV4IDwgMTkwMDApDQoNCkVuX2ZlYXR1cmVzJG1vbnRoIDwtIGZhY3Rvcihmb3JtYXQoRW5fZmVhdHVyZXMkRGF0ZSwgIiVCIiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIiwgIkphbnVhcnkiLCAiRmVicnVhcnkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIpKQ0KYGBgDQoNCmBgYHtyIEZ1bmN0aW9uIGRlZmluaXRpb24sIGluY2x1ZGU9RkFMU0V9DQp0d29fdmFyX3Bsb3QgPC0gZnVuY3Rpb24oZGYsIHZhcil7DQogIA0KICBuZXdfdmFyIDwtIGVucXVvKHZhcikNCiAgDQogIHBsb3RfZGYgPC0gZGYgJT4lDQogICAgbXV0YXRlKHZhcl9iaW4gPSBjdXQoISFuZXdfdmFyLCBicmVha3MgPSAxMCkpICU+JQ0KICAgIGdyb3VwX2J5KHZhcl9iaW4pICU+JQ0KICAgIHN1bW1hcmlzZShwcm9wX2F3YXlzID0gbWVhbihBd2F5V2luKSwNCiAgICAgICAgICAgICAgbnVtX2JpbiA9IG4oKSkNCiAgDQogIHZhcl9zdHJpbmcgPC0gZGVwYXJzZShzdWJzdGl0dXRlKHZhcikpDQogIA0KICBwbG90IDwtIGdncGxvdChwbG90X2RmLCBhZXModmFyX2JpbiwgcHJvcF9hd2F5cywgZ3JvdXAgPSAxKSkgKyBnZW9tX2xpbmUoKSArIGdlb21fcG9pbnQoYWVzKHNpemUgPSBudW1fYmluKSkgKw0KICAgIHRoZW1lX2J3KCkgKyBsYWJzKHggPSBwYXN0ZTAoIkJpbiBmb3IgIiwgdmFyX3N0cmluZyksIHkgPSAiUHJvcG9ydGlvbiBBd2F5IFdpbnMiKSArIA0KICAgIHRoZW1lKGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpDQogIA0KICByZXR1cm4ocGxvdCkNCn0NCmBgYA0KDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjp0ZWFsOyI+U3VtbWFyeSBvZiBTZWxlY3RlZCBWYXJpYWJsZXM8L3NwYW4+ICANCkZvciBlYWNoIGdhbWUsIHdlIGhhdmUgaG9tZSB0ZWFtIGFuZCBhd2F5IHRlYW0gZGF0YSBmb3I6ICANCg0KKiBzaG90cyBmb3IgYW5kIGFnYWluc3QNCiogc2hvdHMgb24gdGFyZ2V0IGZvciBhbmQgYWdhaW5zdA0KKiBjb3JuZXJzIGZvciBhbmQgYWdhaW5zdA0KKiBmb3VscyBmb3IgYW5kIGFnYWluc3QNCiogeWVsbG93IGNhcmRzIGZvciBhbmQgYWdhaW5zdA0KKiBleHBlY3RlZCBnb2FscyAoeEcpIGZvciBhbmQgYWdhaW5zdA0KKiBnb2FscyBzY29yZWQgZm9yIGFuZCBhZ2FpbnN0DQoqIG1hdGNoIHJlc3VsdCAod2luLCBkcmF3IG9yIGxvc3MpDQoqIGF2ZXJhZ2UgYm9va21ha2VyIG9kZHMgZm9yIGhvbWUgd2luLCBkcmF3IGFuZCBhd2F5IHdpbg0KDQpXZSBoYXZlIGRhdGEgZm9yIHRoZSBwcmV2aW91cyA0IGdhbWVzIGZvciB0aGUgaG9tZSB0ZWFtIGFuZCBhd2F5IHRlYW0uIFdlIGFsc28gaGF2ZSBkYXRhIGZvcjoNCg0KKiBzZWFzb24gd2luIHBlcmNlbnRhZ2UNCiogY3VycmVudCB0YWJsZSBwb3NpdGlvbg0KKiBmcmFjdGlvbmFsIHBvaW50cyBnYWluIGFnYWluc3QgYWdhaW5zdCB0b3AgNiBzaWRlcw0KKiBnZW9ncmFwaGljYWwgZGlzdGFuY2UgYmV0d2VlbiB0ZWFtcw0KKiB0YWJsZSBmaW5pc2hlcyBvdmVyIGxhc3QgdHdvIHNlYXNvbnMNCiogZGF0ZQ0KDQpXZSBjYW4gbG9vayBhdCBzdW1tYXJ5IHN0YXRpc3RpY3MgYW5kIGRpc3RyaWJ1dGlvbnMgb2Ygc29tZSBvZiB0aGVzZSB2YXJpYWJsZXMuDQoNCg0KYGBge3IgRGF0YSBTdW1tYXJ5LCBlY2hvPUZBTFNFfQ0Kc3VtbWFyeShFbl9mZWF0dXJlcyAlPiUgc2VsZWN0KEhTLCBIU1QsIEhDLCBIRiwgSFksIEhvbWV4RywgRGlzdCwgd2lucGNfSCwgdG9wNl9wZXJmSCkpDQpgYGANCg0KYGBge3IgUGxvdCBIaXN0b2dyYW1zLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcGxvdF8xIDwtIGdncGxvdChFbl9mZWF0dXJlcywgYWVzKEhTKSkgKyBnZW9tX2RlbnNpdHkoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpICsgdGhlbWVfbWluaW1hbCgpDQpwbG90XzIgPC0gZ2dwbG90KEVuX2ZlYXR1cmVzLCBhZXMoSFNUKSkgKyBnZW9tX2RlbnNpdHkoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpICsgdGhlbWVfbWluaW1hbCgpDQpwbG90XzMgPC0gZ2dwbG90KEVuX2ZlYXR1cmVzLCBhZXMoSEMpKSArIGdlb21fZGVuc2l0eShmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikgKyB0aGVtZV9taW5pbWFsKCkNCnBsb3RfNCA8LSBnZ3Bsb3QoRW5fZmVhdHVyZXMsIGFlcyhIRikpICsgZ2VvbV9kZW5zaXR5KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKSArIHRoZW1lX21pbmltYWwoKQ0KcGxvdF81IDwtIGdncGxvdChFbl9mZWF0dXJlcywgYWVzKEhZKSkgKyBnZW9tX2hpc3RvZ3JhbShmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikgKyB0aGVtZV9taW5pbWFsKCkNCnBsb3RfNiA8LSBnZ3Bsb3QoRW5fZmVhdHVyZXMsIGFlcyhIb21leEcpKSArIGdlb21fZGVuc2l0eShmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikgKyB0aGVtZV9taW5pbWFsKCkNCnBsb3RfNyA8LSBnZ3Bsb3QoRW5fZmVhdHVyZXMsIGFlcyhEaXN0KSkgKyBnZW9tX2hpc3RvZ3JhbShmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikgKyB0aGVtZV9taW5pbWFsKCkNCnBsb3RfOCA8LSBnZ3Bsb3QoRW5fZmVhdHVyZXMsIGFlcyh3aW5wY19IKSkgKyBnZW9tX2RlbnNpdHkoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpICsgdGhlbWVfbWluaW1hbCgpDQpwbG90XzkgPC0gZ2dwbG90KEVuX2ZlYXR1cmVzLCBhZXModG9wNl9wZXJmSCkpICsgZ2VvbV9kZW5zaXR5KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKSArIHRoZW1lX21pbmltYWwoKQ0KDQoNCmdyaWRfcGxvdDEgPC0gYXJyYW5nZUdyb2IocGxvdF8xLCBwbG90XzIsIHBsb3RfMywgcGxvdF80LCBwbG90XzUsIHBsb3RfNiwgcGxvdF83LCBwbG90XzgsIHBsb3RfOSwgDQogICAgICAgICAgICAgbmNvbCA9IDIpDQpnZ3NhdmUoaGVyZTo6aGVyZSgicGxvdHMvZWRhX2dyaWRfcGxvdDEucG5nIiksIGdyaWRfcGxvdDEsIGRwaSA9IDYwMCwgaGVpZ2h0ID0gNykNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoInBsb3RzL2VkYV9ncmlkX3Bsb3QxLnBuZyIpKQ0KDQpgYGANCg0KV2Ugb25seSBoYXZlIHhHIGRhdGEgZm9yIGEgY291cGxlIG9mIHNlYXNvbnMsIHNvIHRoZXJlIGFyZSBhIGxvdCBvZiBtaXNzaW5nIHZhbHVlcyBmb3IgdGhpcy4gVGhlcmUgYXJlIGEgc21hbGwgbnVtYmVyIG9mIG1pc3NpbmcgdmFsdWVzIGZvciB0b3AgNiBwZXJmb3JtYW5jZSB2YXJpYWJsZXMsIGJ1dCBhbGwgdGhlIG90aGVyIHZhcmlhYmxlcyBhcmUgY29tcGxldGUuICANCg0KWWVsbG93IGNhcmQgZGF0YSBpcyB2ZXJ5IGRpc2NyZXRlIGFuZCB3aWxsIG5vdCBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlciBhdCB0aGlzIHN0YWdlLiAgDQoNCk5vcm1hbGlzYXRpb24gb2YgdGhlc2UgZGlzdHJpYnV0aW9ucyB1c2luZyB0cmFuc2Zvcm1hdGlvbnMgaXMgbm90IGRlZW1lZCB0byBiZSByZXF1aXJlZC4gIA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6dGVhbDsiPkZlYXR1cmUgQ29ycmVsYXRpb25zPC9zcGFuPiAgDQpXZSB3aWxsIG5vdyBkZW1vbnN0cmF0ZSBob3cgbXVjaCBjb3JyZWxhdGlvbiBpcyBvYnNlcnZlZCBiZXR3ZWVuIHRoZSBmZWF0dXJlIHZhcmlhYmxlcy4gV2Ugd2lsbCBqdXN0IGNvbXBhcmUgSG9tZSB2YXJpYWJsZXMgZm9yIHRoZSBwcmV2aW91cyBnYW1lIGFzIGluZGljYXRvcnMuICANCg0KDQpgYGB7ciBGZWF0dXJlIENvcnJlbGF0aW9uLCBlY2hvPUZBTFNFLCBmaWcud2lkdGg9MTB9DQpjb3JyIDwtIGNvcihFbl9mZWF0dXJlc1ssIGMoMzo3LCA5OjE0LCAxNiwgMTg6MTksIDE2OSwgMTcxLCAxNzM6MTc3LCAxODA6MTgxKV0sIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKQ0KDQpsaW1pdCA8LSAwLjY1DQprZWVwX3ZlYyA8LSBudW1lcmljKCkNCg0KIyByZW1vdmUgYWxsIHZhcmlhYmxlcyB3aXRoIG9ubHkgbG93IGNvcnJlbGF0aW9uDQpmb3IgKGkgaW4gMTpuY29sKGNvcnIpKXsNCiAgY29ycltpLCBpXSA8LSAwDQogIGlmIChhbnkoYWJzKGNvcnJbLCBpXSkgPiBsaW1pdCkpew0KICAgIGtlZXBfdmVjW2xlbmd0aChrZWVwX3ZlYykgKyAxXSA8LSBpDQogIH0NCn0NCg0KcmVkdWNlZF9jb3JyIDwtIGNvcnJba2VlcF92ZWMsIGtlZXBfdmVjXQ0KDQpnZ2NvcnJwbG90OjpnZ2NvcnJwbG90KHJlZHVjZWRfY29yciwgdHlwZSA9ICJsb3dlciIsIGxhYiA9IFRSVUUpDQoNCmBgYA0KDQpPbmx5IHZhcmlhYmxlcyB3aXRoIGF0IGxlYXN0IG9uZSBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBvdXRzaWRlIMKxYHIgbGltaXRgIGFyZSBpbmNsdWRlZCBpbiB0aGUgYWJvdmUgcGxvdC4gIA0KDQpUaGlzIHBsb3Qgc2hvd3MgdGhhdDogIA0KDQogKiB3aW4gcGVyY2VudGFnZSBpcyBoaWdobHkgaW52ZXJzZWx5IGNvcnJlbGF0ZWQgdG8gdGFibGUgcG9zaXRpb24gLT4ganVzdCBrZWVwIHdpbiBwZXJjZW50YWdlDQogKiBzaG90cywgc2hvdHMgb24gdGFyZ2V0IGFuZCB4RyBhcmUgcmVhc29uYWJseSBjb3JyZWxhdGVkIHdpdGggZWFjaCBvdGhlciAtPiB3ZSBoYXZlIGxlc3MgZGF0YSBmb3IgeEcgYW5kIHNob3RzIG9uIHRhcmdldCBhcmUgbGlrZWx5IHRvIGJlIG1vcmUgdXNlZnVsIHRoYW4gdG90YWwgc2hvdHMsIHNvIHdpbGwganVzdCBrZWVwIHNob3RzIG9uIHRhcmdldA0KICogYXdheSB0ZWFtIHdpbiBwZXJjZW50YWdlIGFuZCB0YWJsZSBwb3NpdGlvbiBhcmUgY29ycmVsYXRlZCB3aXRoIHRoZWlyIHBlcmZvcm1hbmNlIGFnYWluc3QgdGhlIHRvcCA2IC0+IHdlIGNhbiBrZWVwIHdpbiBwZXJjZW50YWdlIGFuZCB0b3AgNiBwZXJmb3JtYW5jZSBkYXRhIGFzIGl0IGNvdWxkIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQogDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6dGVhbDsiPkF3YXkgV2luczwvc3Bhbj4gIA0KV2hhdCBwcm9wb3J0aW9uIG9mIHJlc3VsdHMgYXJlIEF3YXkgV2lucyBhbmQgaG93IGRvZXMgdGhpcyB2YXJ5PyAgDQogDQpgYGB7ciBGaWx0ZXIgRGF0YSBieSBPZGRzIGFuZCBTdW1tYXJpc2UgQXdheSBXaW5zLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9MTB9DQpFbl9mZWF0dXJlcyA8LSBFbl9mZWF0dXJlcyAlPiUNCiAgbXV0YXRlKHNlYXNvbiA9IChpbmRleCAlLyUgMTAwMCkgKyAyMDAwKQ0KDQpjYXQoIm92ZXJhbGwsIGhvdyBtYW55IGdhbWVzIGFyZSBBd2F5IHdpbnM6IikNCnRhYmxlKEVuX2ZlYXR1cmVzJEF3YXlXaW4pDQoNCmNhdCgiXG5ieSBzZWFzb246IikNCnRibF9kYXRhIDwtIGFzX3RpYmJsZSh0YWJsZShFbl9mZWF0dXJlcyRzZWFzb24sIEVuX2ZlYXR1cmVzJEF3YXlXaW4pLCAubmFtZV9yZXBhaXIgPSAidW5pcXVlIikNCm5hbWVzKHRibF9kYXRhKVsxXSA8LSAic2Vhc29uIg0KbmFtZXModGJsX2RhdGEpWzJdIDwtICJyZXN1bHQiDQoNCnRibF9kYXRhIDwtIHRibF9kYXRhICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gcmVzdWx0LCBuYW1lc19wcmVmaXggPSAiQXdheVdpbl8iLCB2YWx1ZXNfZnJvbSA9IG4pICU+JQ0KICBtdXRhdGUocHJvcF9Bd2F5ID0gQXdheVdpbl8xIC8gKEF3YXlXaW5fMCArIEF3YXlXaW5fMSksDQogICAgICAgICBzZWFzb24gPSBhcy5udW1lcmljKHNlYXNvbikpDQoNCnByaW50KHRibF9kYXRhKQ0KDQphd2F5X21vZGVsIDwtIGxtKHByb3BfQXdheSB+IHNlYXNvbiwgZGF0YSA9IHRibF9kYXRhKQ0KYXdheV9tb2RlbF9zdW1tYXJ5IDwtIHN1bW1hcnkoYXdheV9tb2RlbCkNCg0Kc2Vhc29uX3Bsb3QgPC0gZ2dwbG90KHRibF9kYXRhLCBhZXMoc2Vhc29uLCBwcm9wX0F3YXksIGdyb3VwID0gMSkpICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KCkgKw0KICB0aGVtZV9idygpICsgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKyANCiAgbGFicyh4ID0gIlNlYXNvbiIsIHkgPSAiUHJvcG9ydGlvbiBBd2F5IFdpbnMiKQ0KZ2dzYXZlKGhlcmU6OmhlcmUoInBsb3RzL3Bsb3RfMS5wbmciKSwgZHBpID0gNjAwLCBoZWlnaHQgPSA1KQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJwbG90cy9wbG90XzEucG5nIikpDQoNCmBgYA0KIA0KVGhlcmVmb3JlLCBhcHByb3hpbWF0ZWx5IGByIHJvdW5kKG1lYW4oRW5fZmVhdHVyZXMkQXdheVdpbikgKiAxMDAsIDApYCUgb2YgdGhlc2UgZ2FtZXMgYXJlIEF3YXkgd2lucy4gVGhlIHByb3BvcnRpb24gb2YgdGhlc2UgdGhhdCBhcmUgQXdheSB3aW5zIHZhcmllcyBvbiBhIHNlYXNvbiBiYXNpcyBmcm9tIH4yMi0zMyUuIFRoZSBjaGFuZ2UgaW4gcHJvcG9ydGlvbiBvdmVyIHRpbWUgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvcG9ydGlvbiBjb3VsZCBiZSBpbmNyZWFzaW5nLCBob3dldmVyIHRoZSBwLXZhbHVlIGZvciB0aGUgKipzZWFzb24qKiBjb21wb25lbnQgb2YgYSBsaW5lYXIgZml0IHRvIHRoaXMgZGF0YSBpcyANCmByIHJvdW5kKGF3YXlfbW9kZWxfc3VtbWFyeSRjb2VmZmljaWVudHNbMiwgNF0sIDMpYC4NCiANCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjp0ZWFsOyI+VHdvIFZhcmlhYmxlIFBsb3RzPC9zcGFuPiAgDQoNCldlIHdpbGwgbm93IGNyZWF0ZSBwbG90cyB0byBpbGx1c3RyYXRlIGhvdyBmZWF0dXJlIHZhcmlhYmxlcyBhZmZlY3QgdGhlIG9ic2VydmVkIHByb3BvcnRpb24gb2YgQXdheSB3aW5zLiBXZSB3aWxsIHN1bSB0aGUgbWF0Y2ggdmFyaWFibGVzIG92ZXIgdGhlIHByZXZpb3VzIDQgbWF0Y2hlcyB0byBnaXZlIHBlcmhhcHMgYSBiZXR0ZXIgcmVwcmVzZW50YXRpb24gb2YgY3VycmVudCBmb3JtLiAgDQoNCmBgYHtyIFR3byBWYXJpYWJsZSBQbG90cywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCkVuX2ZlYXR1cmVzIDwtIEVuX2ZlYXR1cmVzICU+JQ0KICBtdXRhdGUoc3VtX0hTVCA9IExhc3RIU1QxICsgTGFzdEhTVDIgKyBMYXN0SFNUMyArIExhc3RIU1Q0LA0KICAgICAgICAgc3VtX0hDID0gTGFzdEhDMSArIExhc3RIQzIgKyBMYXN0SEMzICsgTGFzdEhDNCwNCiAgICAgICAgIHN1bV9IRiA9IExhc3RIRjEgKyBMYXN0SEYyICsgTGFzdEhGMyArIExhc3RIRjQsDQogICAgICAgICBzdW1fSEdTID0gTGFzdEhHUzEgKyBMYXN0SEdTMiArIExhc3RIR1MzICsgTGFzdEhHUzQsDQogICAgICAgICBzdW1fSEdDID0gTGFzdEhHQzEgKyBMYXN0SEdDMiArIExhc3RIR0MzICsgTGFzdEhHQzQsDQogICAgICAgICBzdW1fQVNUID0gTGFzdEFTVDEgKyBMYXN0QVNUMiArIExhc3RBU1QzICsgTGFzdEFTVDQsDQogICAgICAgICBzdW1fQUMgPSBMYXN0QUMxICsgTGFzdEFDMiArIExhc3RBQzMgKyBMYXN0QUM0LA0KICAgICAgICAgc3VtX0FGID0gTGFzdEFGMSArIExhc3RBRjIgKyBMYXN0QUYzICsgTGFzdEFGNCwNCiAgICAgICAgIHN1bV9BR1MgPSBMYXN0QUdTMSArIExhc3RBR1MyICsgTGFzdEFHUzMgKyBMYXN0QUdTNCwNCiAgICAgICAgIHN1bV9BR0MgPSBMYXN0QUdDMSArIExhc3RBR0MyICsgTGFzdEFHQzMgKyBMYXN0QUdDNCwNCiAgICAgICAgIHN1bV9Ib3BwU1QgPSBMYXN0SG9wcFNUMSArIExhc3RIb3BwU1QyICsgTGFzdEhvcHBTVDMgKyBMYXN0SG9wcFNUNCwNCiAgICAgICAgIHN1bV9Ib3BwQyA9IExhc3RIb3BwQzEgKyBMYXN0SG9wcEMyICsgTGFzdEhvcHBDMyArIExhc3RIb3BwQzQsDQogICAgICAgICBzdW1fSG9wcEYgPSBMYXN0SG9wcEYxICsgTGFzdEhvcHBGMiArIExhc3RIb3BwRjMgKyBMYXN0SG9wcEY0LA0KICAgICAgICAgc3VtX0FvcHBTVCA9IExhc3RBb3BwU1QxICsgTGFzdEFvcHBTVDIgKyBMYXN0QW9wcFNUMyArIExhc3RBb3BwU1Q0LA0KICAgICAgICAgc3VtX0FvcHBDID0gTGFzdEFvcHBDMSArIExhc3RBb3BwQzIgKyBMYXN0QW9wcEMzICsgTGFzdEFvcHBDNCwNCiAgICAgICAgIHN1bV9Bb3BwRiA9IExhc3RBb3BwRjEgKyBMYXN0QW9wcEYyICsgTGFzdEFvcHBGMyArIExhc3RBb3BwRjQpDQoNCnN1bUhTVF9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgc3VtX0hTVCkNCnN1bUhDX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fSEMpDQpzdW1IRl9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgc3VtX0hGKQ0Kc3VtSEdDX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fSEdDKQ0Kc3VtSEdTX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fSEdTKQ0Kc3VtQVNUX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fQVNUKQ0Kc3VtQUNfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHN1bV9BQykNCnN1bUFGX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fQUYpDQpzdW1BR0NfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHN1bV9BR0MpDQpzdW1BR1NfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHN1bV9BR1MpDQoNCnN1bUhvcHBTVF9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgc3VtX0hvcHBTVCkNCnN1bUhvcHBDX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fSG9wcEMpDQpzdW1Ib3BwRl9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgc3VtX0hvcHBGKQ0Kc3VtQW9wcFNUX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fQW9wcFNUKQ0Kc3VtQW9wcENfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHN1bV9Bb3BwQykNCnN1bUFvcHBGX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fQW9wcEYpDQoNCndpbnBjX0hfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHdpbnBjX0gpDQp3aW5wY19BX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCB3aW5wY19BKQ0KdG9wNl9wZXJmSF9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgdG9wNl9wZXJmSCkNCnRvcDZfcGVyZkFfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHRvcDZfcGVyZkEpDQpIb21lRmluX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBIb21lRmluMSkNCkF3YXlGaW5fcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIEF3YXlGaW4xKQ0KRGlzdF9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgRGlzdCkNCg0KbW9udGhfZGYgPC0gRW5fZmVhdHVyZXMgJT4lDQogIGdyb3VwX2J5KG1vbnRoKSAlPiUNCiAgc3VtbWFyaXNlKHByb3BfYXdheXMgPSBtZWFuKEF3YXlXaW4pLA0KICAgICAgICAgICAgICBudW1fYmluID0gbigpKQ0KDQptb250aF9wbG90IDwtIGdncGxvdChtb250aF9kZiwgYWVzKG1vbnRoLCBwcm9wX2F3YXlzLCBncm91cCA9IDEpKSArIGdlb21fbGluZSgpICsgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IG51bV9iaW4pKSArDQogICAgdGhlbWVfYncoKSArIGxhYnMoeCA9ICJNb250aCIsIHkgPSAiUHJvcG9ydGlvbiBBd2F5IFdpbnMiKSArIA0KICAgIHRoZW1lKGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpDQoNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KZ3JpZF9wbG90MiA8LSBhcnJhbmdlR3JvYih3aW5wY19IX3Bsb3QsIHdpbnBjX0FfcGxvdCwgdG9wNl9wZXJmSF9wbG90LCB0b3A2X3BlcmZBX3Bsb3QsIG5jb2wgPSAyKQ0KZ2dzYXZlKGhlcmU6OmhlcmUoInBsb3RzL2VkYV9ncmlkX3Bsb3QyLnBuZyIpLCBncmlkX3Bsb3QyLCBkcGkgPSA2MDAsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEwKQ0KZ3JpZF9wbG90MyA8LSBhcnJhbmdlR3JvYihIb21lRmluX3Bsb3QsIEF3YXlGaW5fcGxvdCwgRGlzdF9wbG90LCBtb250aF9wbG90LCBuY29sID0gMikNCmdnc2F2ZShoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90My5wbmciKSwgZ3JpZF9wbG90MywgZHBpID0gNjAwLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCkNCmdyaWRfcGxvdDQgPC0gYXJyYW5nZUdyb2Ioc3VtSFNUX3Bsb3QsIHN1bUhDX3Bsb3QsIHN1bUhGX3Bsb3QsIHN1bUhHU19wbG90LCBuY29sID0gMikNCmdnc2F2ZShoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90NC5wbmciKSwgZ3JpZF9wbG90NCwgZHBpID0gNjAwLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCkNCmdyaWRfcGxvdDUgPC0gYXJyYW5nZUdyb2Ioc3VtSEdDX3Bsb3QsIHN1bUFTVF9wbG90LCBzdW1BQ19wbG90LCBzdW1BRl9wbG90LCBuY29sID0gMikNCmdnc2F2ZShoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90NS5wbmciKSwgZ3JpZF9wbG90NSwgZHBpID0gNjAwLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCkNCmdyaWRfcGxvdDYgPC0gYXJyYW5nZUdyb2Ioc3VtQUdTX3Bsb3QsIHN1bUFHQ19wbG90LCBzdW1Ib3BwU1RfcGxvdCwgc3VtSG9wcENfcGxvdCwgbmNvbCA9IDIpDQpnZ3NhdmUoaGVyZTo6aGVyZSgicGxvdHMvZWRhX2dyaWRfcGxvdDYucG5nIiksIGdyaWRfcGxvdDYsIGRwaSA9IDYwMCwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTApDQpncmlkX3Bsb3Q3IDwtIGFycmFuZ2VHcm9iKHN1bUhvcHBGX3Bsb3QsIHN1bUFvcHBTVF9wbG90LCBzdW1Bb3BwQ19wbG90LCBzdW1Bb3BwRl9wbG90LCBuY29sID0gMikNCmdnc2F2ZShoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90Ny5wbmciKSwgZ3JpZF9wbG90NywgZHBpID0gNjAwLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCkNCg0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgicGxvdHMvZWRhX2dyaWRfcGxvdDIucG5nIikpDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90My5wbmciKSkNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoInBsb3RzL2VkYV9ncmlkX3Bsb3Q0LnBuZyIpKQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgicGxvdHMvZWRhX2dyaWRfcGxvdDUucG5nIikpDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90Ni5wbmciKSkNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoInBsb3RzL2VkYV9ncmlkX3Bsb3Q3LnBuZyIpKQ0KYGBgDQoNCg0KIFNvbWUgb2YgdGhlIGNvbmNsdXNpb25zIG9uIHJlbGF0aW9uc2hpcCB3aXRoIEF3YXkgV2luIHByb3BvcnRpb24gdGhhdCB3ZSBjYW4gZHJhdyBmcm9tIHRoZXNlOiAgDQogDQogKiBDbGVhciByZWxhdGlvbnNoaXBzIHdpdGggSG9tZSBhbmQgQXdheSB3aW4gcGVyY2VudGFnZSBhbmQgcGVyZm9ybWFuY2UgYWdhaW5zdCB0b3AgNg0KICogQWxzbyBjbGVhciByZWxhdGlvbnNoaXBzIHdpdGggbGFzdCBIb21lIGFuZCBBd2F5IHRhYmxlIGZpbmlzaCwgYWx0aG91Z2ggQXdheSBmaW5pc2ggcmVsYXRpb25zaGlwIG1heSBub3QgYmUgbGluZWFyDQogKiBMYXN0IEhvbWUgc2hvdHMgb24gdGFyZ2V0LCBjb3JuZXJzLCBnb2FscyBzY29yZWQsIGdvYWxzIGNvbmNlZGVkIGhhdmUgcmVsYXRpb25zaGlwLCBidXQgbm90IGZvdWxzDQogKiBMYXN0IEF3YXkgc2hvdHMgb24gdGFyZ2V0LCBjb3JuZXJzLCBmb3VscywgZ29hbHMgc2NvcmVkIGFuZCBnb2FscyBjb25jZWRlZCBoYXZlIHNvbWUgcmVsYXRpb25zaGlwDQogKiBMYXN0IEhvbWUgYW5kIEF3YXkgb3Bwb3NpdGlvbiBzaG90cyBvbiB0YXJnZXQgYW5kIGNvcm5lcnMgaGF2ZSByZWxhdGlvbnNoaXAsIGJ1dCBub3QgZm91bHMNCiAqIERpc3RhbmNlIHNlZW1zIHRvIHBlcmhhcHMgaGF2ZSBhIG1pbm9yIGVmZmVjdCwgd2l0aCBmZXdlciBBd2F5IHdpbnMgZm9yIHRlYW1zIHRoYXQgdHJhdmVsIGZ1cnRoZXINCiAqIFVuY2xlYXIgZWZmZWN0IG9mIE1vbnRoIC0gc2xpZ2h0bHkgaGlnaGVyIHByb3BvcnRpb25zIGluIERlYyBhbmQgTWFyLCBhcm91bmQgdGhlIENocmlzdG1hcyBhbmQgRWFzdGVyIGludGVuc2l2ZSBwZXJpb2RzDQogDQogU28gcmVjb21tZW5kZWQgdG8gdGFrZSB0aGUgZm9sbG93aW5nIGZvcndhcmQgZm9yIHByZWRpY3RpdmUgcHVycG9zZXM6DQogDQogKiB3aW5wY19ILCB3aW5wY19BDQogKiB0b3A2X3BlcmZILCB0b3A2cGVyZkENCiAqIEhvbWVGaW4xLTIsIEF3YXlGaW4xLTINCiAqIERpc3RhbmNlLCBNb250aA0KICogc3VtSFNULCBzdW1IQywgc3VtSEdTLCBzdW1IR0MNCiAqIHN1bUFTVCwgc3VtQUMsIHN1bUFGLCBzdW1BR1MsIHN1bUFHQw0KICogc3VtSG9wcFNULCBzdW1Ib3BwQw0KICogc3VtQW9wcFNULCBzdW1Bb3BwQw0KIA0KDQoqKioNCkVuZA0K