1 WorkFlow

  • Data available:

    • European leagues (EURO) from 2023 to 2026
    • UEFA Champion League (UCL) from 2023 to 2026
    • EURO included (SP1: Spain; E0: English; D1: Dutch; I1: Italy; F1: France)
  • Model (ucl & euro):

    • To use 2023 to 2026 ucl & euro data
    • Create train & test
  • Evaluating quality predictions

  • Forecast UCL2526 results

2 Data (EURO & UCL)

2.1 EURO

  • euro2324, euro2425 & euro2526 (actual season)
  • Leagues: SP1: Spain, E0: English, D1: Dutch, I1: Italy, F1: France
Rows: 7,022
Columns: 6
$ date      <date> 2021-08-13, 2021-08-14, 2021-08-14, 2021-08-14, 2021-08-14, 2021-08-14, 20…
$ cup       <chr> "euro2122E0", "euro2122E0", "euro2122E0", "euro2122E0", "euro2122E0", "euro…
$ home_team <chr> "Brentford", "Man United", "Burnley", "Chelsea", "Everton", "Leicester", "W…
$ away_team <chr> "Arsenal", "Leeds", "Brighton", "Crystal Palace", "Southampton", "Wolves", …
$ home_goal <dbl> 2, 5, 1, 3, 3, 1, 3, 0, 2, 1, 2, 2, 0, 2, 5, 2, 1, 0, 0, 4, 5, 1, 0, 2, 1, …
$ away_goal <dbl> 0, 1, 2, 0, 1, 0, 2, 3, 4, 0, 0, 0, 0, 2, 0, 0, 1, 1, 2, 1, 0, 1, 2, 2, 2, …

2.2 UCL

  • UEFA Champion League: ucl2324, ucl2425 & ucl2526 (current season)

  • FIFA World Cup 2025 (fwc25)

3 Data to run BRMS model

3.1 Real Madrid home team goals difference

3.2 Real Madrid away team goals difference

3.3 Split data (80-20)

4 Run BRMA Evaluation Quality Prediction

  • MSE a statistical measure of the average of the squares of the errors between estimated and actual values.

  • Hit rate is a metric that measures the success rate of correct prediction.

  • The log loss value is the negative log-likelihood of the model, where a lower value indicates better predictive accuracy.

4.1 EURO-UCL models

4.2 Plot: Evaluation data test goals distribution

5 Run BRMA for Prediction

5.1 Create schedule (sch)

  • UCL schedule
  • EURO schedule
Rows: 654
Columns: 3
$ cup       <chr> "euro2526E0", "euro2526E0", "euro2526E0", "euro2526E0", "euro2526E0", "euro…
$ home_team <chr> "Liverpool", "Aston Villa", "Brighton", "Sunderland", "Tottenham", "Wolves"…
$ away_team <chr> "Bournemouth", "Newcastle", "Fulham", "West Ham", "Burnley", "Man City", "C…

6 Evaluating quality predictions

7 Forecast

LS0tCnRpdGxlOiAiQlJNUzogRm9yZWNhc3QgVUNMMjUyNiByZXN1bHRzIgphdXRob3I6ICJBbmRyZXMgUEVOQSIKZGF0ZTogMjAyNS0xMS0yNQpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUgCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIHRoZW1lOiBjZXJ1bGVhbgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUgICAgICAKICAgIGNvZGUtZm9sZDogdHJ1ZQogICAgY29kZS1zdW1tYXJ5OiAiU2hvdyB0aGUgY29kZSIKICAgIGNzczogfi9Eb2N1bWVudHMvc3R5bGUuY3NzIAotLS0KCmBgYHtyIGluY2x1ZGU9RkFMU0V9CgogICAga25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UpCmBgYAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kcm0obGlzdCA9IGxzKCkpCgojIFNvdXJjZSBsb2NhdGlvbjoKIyBiZXRzL3ZpZ25ldHRlcy80Ny5EZXZfYnJtcy92aWduZXR0ZXMiCgojIERhdGEgYXZhaWxhYmxlOgoKIyBVQ0wgcmVzdWx0cyAmIGZ1dHVyZSBnYW1lcwoKIyBodHRwczovL3d3dy50cmFuc2Zlcm1hcmt0LmNvbS91ZWZhLWNoYW1waW9ucy1sZWFndWUvZ2VzYW10c3BpZWxwbGFuL3Bva2Fsd2V0dGJld2VyYi9DTC9zcGllbHRhZy8zL3NhaXNvbl9pZC8yMDI1CgojIEVVUk8gc2V2ZXJhbCBsZWFndWVzIHJlc3VsdHMKCiMgaHR0cHM6Ly93d3cuZm9vdGJhbGwtZGF0YS5jby51ay9kb3dubG9hZG0ucGhwCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgbG9hZCBwYWNrYWdlcyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaW52aXNpYmxlKHNhcHBseShjKCd0aWR5dmVyc2UnLCAiYnJtcyIsICJwbG90bHkiLCAicnN0YW4iLAogICAgICAgICAgICAgICAgICAgImhyYnJ0aGVtZXMiLCAiZ29vZ2xlc2hlZXRzNCIsICJTdGFuSGVhZGVycyIsCiAgICAgICAgICAgICAgICAgICAiZ29vZ2xlZHJpdmUiLCAibHVicmlkYXRlIiwgInN0cmluZ2kiLCAiRFQiLCAKICAgICAgICAgICAgICAgICAgICJyZWFkeGwiLCAidGlkeW1vZGVscyIsICJndG9vbHMiLCAicHVycnIiKSwgCiAgICAgICAgICAgICAgICAgcmVxdWlyZSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkKCm9wdGlvbnMoZHBseXIuc3VtbWFyaXNlLmluZm9ybSA9IEZBTFNFKQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIGxvYWQgZnVuY3Rpb25zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiBpbnZpc2libGUoc2FwcGx5KAogICAgbGlzdC5maWxlcyhwYXR0ZXJuID0gIlsuXVIkIiwgCiAgICAgICAgICAgICAgIHBhdGggPSAifi9Eb2N1bWVudHMvYmV0cy9SIiwgCiAgICAgICAgICAgICAgIGZ1bGwubmFtZXMgPSBUUlVFKSwgc291cmNlKSkKIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgbG9hZCBmdW5jdGlvbnMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBpbnZpc2libGUoc2FwcGx5KAogICAgbGlzdC5maWxlcyhwYXR0ZXJuID0gIlsuXVIkIiwgCiAgICAgICAgICAgICAgIHBhdGggPSAifi9Eb2N1bWVudHMvYmV0cy92aWduZXR0ZXMvNDcuZGV2X3NvY2Nlcl9tb2RlbC9SIiwgCiAgICAgICAgICAgICAgIGZ1bGwubmFtZXMgPSBUUlVFKSwgc291cmNlKSkKCmBgYAoKIyAqKldvcmtGbG93KioKCi0gICBEYXRhIGF2YWlsYWJsZToKCiAgICAtICAgRXVyb3BlYW4gbGVhZ3VlcyAoRVVSTykgZnJvbSAyMDIzIHRvIDIwMjYKICAgIC0gICBVRUZBIENoYW1waW9uIExlYWd1ZSAoVUNMKSBmcm9tIDIwMjMgdG8gMjAyNgogICAgLSAgIEVVUk8gaW5jbHVkZWQgKFNQMTogU3BhaW47IEUwOiBFbmdsaXNoOyBEMTogRHV0Y2g7IEkxOiBJdGFseTsgRjE6IEZyYW5jZSkKCi0gICBNb2RlbCAodWNsICYgZXVybyk6CgogICAgLSAgIFRvIHVzZSAyMDIzIHRvIDIwMjYgdWNsICYgZXVybyBkYXRhCiAgICAtICAgQ3JlYXRlIHRyYWluICYgdGVzdAoKLSAgIEV2YWx1YXRpbmcgcXVhbGl0eSBwcmVkaWN0aW9ucwoKLSAgIEZvcmVjYXN0IFVDTDI1MjYgcmVzdWx0cwoKIyBEYXRhIChFVVJPICYgVUNMKQoKIyMgRVVSTwoKLSAgIGV1cm8yMzI0LCBldXJvMjQyNSAmIGV1cm8yNTI2IChhY3R1YWwgc2Vhc29uKQotICAgTGVhZ3VlczogU1AxOiBTcGFpbiwgRTA6IEVuZ2xpc2gsIEQxOiBEdXRjaCwgSTE6IEl0YWx5LCBGMTogRnJhbmNlCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAojIHVzZSByZWFkX2ZpbGVzX3NoZWV0X3hsc3ggZnVuY3Rpb24gdG8gcmVhZCBkYXRhIAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAogCmZpbGVfZGlyIDwtICJ+L0RvY3VtZW50cy9iZXRzL2RhdGEiCnNlbF9zaGVldCA8LSBjKCJFMCIsICJTUDEiLCAiSTEiLCAiRjEiLCAiRDEiKQoKZGFfZXVybyA9IHJlYWRfZmlsZXNfc2hlZXRfeGxzeF9mdW4oZmlsZV9kaXIsIHNlbF9zaGVldCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRyb24gPSAiKi54bHN4JCIpCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgd3JhbmdsaW5nIGRhdGEKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZGFfZXVybzEgPC0gYmluZF9yb3dzKGRhX2V1cm8sIC5pZCA9ICJpZCIpICU+JSAKICBzZWxlY3QoaWQsIGRpdiA9IERpdiwgZGF0ZSA9IERhdGUsIAogICAgICAgICBob21lX3RlYW0gPSBIb21lVGVhbSwgYXdheV90ZWFtID0gQXdheVRlYW0sCiAgICAgICAgIGhvbWVfZ29hbCA9IEZUSEcsIGF3YXlfZ29hbCA9IEZUQUcpICU+JQogIHNlcGFyYXRlKGlkLCBjKCJhIiwgImIiLCAiYyIsICJ5ZWFyMSIsICJ5ZWFyMiIsICJsZWFndWUiKSkgJT4lICAKICBtdXRhdGUoZGF0ZSA9IHltZChkYXRlKSwgeWVhcjEgPSBhcy5pbnRlZ2VyKHllYXIxKSwKICAgICAgICAgeWVhcjIgPSBhcy5pbnRlZ2VyKHllYXIyKSwKICAgICAgICAgeWVhcjJkMSA9IHN1YnN0cih5ZWFyMSwgMywgNCksCiAgICAgICAgIHllYXIyZDIgPSBzdWJzdHIoeWVhcjIsIDMsIDQpLAogICAgICAgICBjdXAgPSBwYXN0ZSgiZXVybyIsIHllYXIyZDEsIHllYXIyZDIsIGRpdiwgc2VwID0gIiIpKSAlPiUKICBzZWxlY3QoZGF0ZSwgY3VwLCBob21lX3RlYW06YXdheV9nb2FsKQoKZ2xpbXBzZShkYV9ldXJvMSkKYGBgCgojIyBVQ0wKCi0gICBVRUZBIENoYW1waW9uIExlYWd1ZTogdWNsMjMyNCwgdWNsMjQyNSAmIHVjbDI1MjYgKGN1cnJlbnQgc2Vhc29uKQoKLSAgIEZJRkEgV29ybGQgQ3VwIDIwMjUgKGZ3YzI1KQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKIyBsZWFndWUgbmFtZSAKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKCiAgbGVhZ3VlX25hbWUgPSAiVUVGQSBDaGFtcGlvcyBMZWFndWUiCiAgCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCiMgRGF0YSBVQ0wgKHNldmVyYWwgc2Vhc29ucykKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgCiAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKICAjIERhdGE6IFVDTDIwMjMvMjAyNCAKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAogIAogIGxvYWQoIn4vRG9jdW1lbnRzL2JldHMvZGF0YS91Y2wyMzI0XzAzbm92MjUucmRhIikgIAogIGQyMyA8LSB1Y2wyMzI0ICU+JSAKICAgIG11dGF0ZShkYXRlID0geW1kKGRhdGUpKSAlPiUKICAgIHNlbGVjdChkYXRlLCBjdXAsIAogICAgICAgICAgIGhvbWVfdGVhbSwgYXdheV90ZWFtLAogICAgICAgICAgIGhvbWVfZ29hbCwKICAgICAgICAgICBhd2F5X2dvYWwpICU+JQogICAgZHJvcF9uYShob21lX2dvYWwpICU+JQogICAgbXV0YXRlKGhvbWVfdGVhbSA9IGNhc2Vfd2hlbigKICAgICAgaG9tZV90ZWFtID09ICJQU0ciIH4gIlBhcmlzIFNHIiwKICAgICAgaG9tZV90ZWFtID09ICJQU1YiIH4gIlBTViBFaW5kaG92ZW4iLCAgCiAgICAgIGhvbWVfdGVhbSA9PSAiQm9ydXNzaWEgRG9ydG11bmQiIH4gIkJvci4gRG9ydG11bmQiLCAgCiAgICAgIGhvbWVfdGVhbSA9PSAiQXRsZXRpY28gZGUgTWFkcmlkIiB+ICJBdGxldGljbyBNYWRyaWQiLAogICAgICAuZGVmYXVsdCA9IGFzLmNoYXJhY3Rlcihob21lX3RlYW0pCiAgICApKSAlPiUKICAgIG11dGF0ZShhd2F5X3RlYW0gPSBjYXNlX3doZW4oCiAgICAgIGF3YXlfdGVhbSA9PSAiUFNHIiB+ICJQYXJpcyBTRyIsCiAgICAgIGF3YXlfdGVhbSA9PSAiUFNWIiB+ICJQU1YgRWluZGhvdmVuIiwgICAgCiAgICAgIGF3YXlfdGVhbSA9PSAiQm9ydXNzaWEgRG9ydG11bmQiIH4gIkJvci4gRG9ydG11bmQiLCAgCiAgICAgIGF3YXlfdGVhbSA9PSAiQXRsZXRpY28gZGUgTWFkcmlkIiB+ICJBdGxldGljbyBNYWRyaWQiLCAgCiAgICAgIC5kZWZhdWx0ID0gYXMuY2hhcmFjdGVyKGF3YXlfdGVhbSkpKQogIAogICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCiAgIyBEYXRhOiBVQ0wyMDI0LzIwMjUgCiAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgCiAgc2V0d2QoIn4vRG9jdW1lbnRzL2JldHMvdmlnbmV0dGVzLzQyLlVDTC9kYXRhIikKICBsb2FkKCJ1Y2wyNDI1LlJEYXRhIikKICBkMjQgPC0gZ2FtZV9hbGxzICU+JSAgICAKICAgIG11dGF0ZShob21lX2dvYWwgPSBhcy5udW1lcmljKGhvbWVfZ29hbCksIAogICAgICAgICAgIGF3YXlfZ29hbCA9IGFzLm51bWVyaWMoYXdheV9nb2FsKSwKICAgICAgICAgICBob21lX3RlYW0gPSBzdHJpX3RyYW5zX2dlbmVyYWwoCiAgICAgICAgICAgICBob21lX3RlYW0sIGlkID0gIkxhdGluLUFTQ0lJIiksCiAgICAgICAgICAgYXdheV90ZWFtID0gc3RyaV90cmFuc19nZW5lcmFsKAogICAgICAgICAgICAgYXdheV90ZWFtLCBpZCA9ICJMYXRpbi1BU0NJSSIpLCAKICAgICAgICAgICBjdXAgPSAidWNsMjQyNSIsIAogICAgICAgICAgIGRhdGUgPSB5bWQoZGF0ZSkpICU+JQogICAgc2VsZWN0KGRhdGUsIGN1cCwgaG9tZV90ZWFtLCBhd2F5X3RlYW0sCiAgICAgICAgICAgaG9tZV9nb2FsLCBhd2F5X2dvYWwpCiAgCiAgcmVtb3ZlKGdhbWVfYWxscykKICAKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAjIERhdGE6IFVDTDIwMjUvMjAyNgogICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAKICBzZXR3ZCgifi9Eb2N1bWVudHMvYmV0cy9kYXRhIikKICBkMjUgPC0gcmVhZF9jc3YoInVjbDI1MjZfMDJub3YyNS5jc3YiKSAlPiUKICAgIHNlcGFyYXRlKHJlc3VsdHMsIGludG8gPSBjKCJob21lX2dvYWwiLCJhd2F5X2dvYWwiKSwgCiAgICAgICAgICAgICBzZXAgPSAiOiIpICU+JQogICAgbXV0YXRlKGhvbWVfZ29hbCA9IGFzLm51bWVyaWMoaG9tZV9nb2FsKSwgCiAgICAgICAgICAgYXdheV9nb2FsID0gYXMubnVtZXJpYyhhd2F5X2dvYWwpLAogICAgICAgICAgIGhvbWVfdGVhbSA9IHN0cmlfdHJhbnNfZ2VuZXJhbCgKICAgICAgICAgICAgIGhvbWVfdGVhbSwgaWQgPSAiTGF0aW4tQVNDSUkiKSwKICAgICAgICAgICBhd2F5X3RlYW0gPSBzdHJpX3RyYW5zX2dlbmVyYWwoCiAgICAgICAgICAgICBhd2F5X3RlYW0sIGlkID0gIkxhdGluLUFTQ0lJIiksIAogICAgICAgICAgIGRhdGUgPSBkbXkoZGF0ZSkpICU+JQogICAgbXV0YXRlKGN1cCA9ICJ1Y2wyNTI2IikgJT4lCiAgICBzZWxlY3QoZGF0ZSwgY3VwLCBob21lX3RlYW0sIGF3YXlfdGVhbSwgaG9tZV9nb2FsLCAKICAgICAgICAgICBhd2F5X2dvYWwpICU+JQogICAgYXJyYW5nZShkYXRlLCBob21lX3RlYW0pICU+JSAKICAgIAogICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICMgQ29ycmVjdCBzb21lIHRlYW0gbmFtZXMgCiAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogIAogIG11dGF0ZShob21lX3RlYW0gPSBjYXNlX3doZW4oCiAgICBob21lX3RlYW0gPT0gIlBTRyIgfiAiUGFyaXMgU0ciLAogICAgaG9tZV90ZWFtID09ICJGQyBCYXllcm4iIH4gIkJheWVybiBNdW5pY2giLCAgCiAgICBob21lX3RlYW0gPT0gIkJvci4gRG9ydG11bmQiIH4gIkRvcnRtdW5kIiwgIAogICAgaG9tZV90ZWFtID09ICJBdGxldGljbyIgfiAiQXRsZXRpY28gTWFkcmlkIiwgICAgIAogICAgaG9tZV90ZWFtID09ICJTcG9ydGluZyBDUCIgfiAiU3BvcnRpbmciLCAgICAKICAgIC5kZWZhdWx0ID0gYXMuY2hhcmFjdGVyKGhvbWVfdGVhbSkKICApKSAlPiUKICAgIG11dGF0ZShhd2F5X3RlYW0gPSBjYXNlX3doZW4oCiAgICAgIGF3YXlfdGVhbSA9PSAiUFNHIiB+ICJQYXJpcyBTRyIsCiAgICAgIGF3YXlfdGVhbSA9PSAiRkMgQmF5ZXJuIiB+ICJCYXllcm4gTXVuaWNoIiwgICAgCiAgICAgIGF3YXlfdGVhbSA9PSAiQm9yLiBEb3J0bXVuZCIgfiAiRG9ydG11bmQiLCAgCiAgICAgIGF3YXlfdGVhbSA9PSAiQXRsZXRpY28iIH4gIkF0bGV0aWNvIE1hZHJpZCIsICAgCiAgICAgIGF3YXlfdGVhbSA9PSAiU3BvcnRpbmcgQ1AiIH4gIlNwb3J0aW5nIiwgICAgICAKICAgICAgLmRlZmF1bHQgPSBhcy5jaGFyYWN0ZXIoYXdheV90ZWFtKQogICAgKSkKICAKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAjIERhdGE6IEZJRkEgV29ybGQgQ3VwIDIwMjUgKGZ3YzI1KQogICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAKICBzZXR3ZCgifi9Eb2N1bWVudHMvYmV0cy9kYXRhIikKICBmd2MyNSA8LSByZWFkX2NzdigiZmlmYV93b3JsZF9jdXAyNS5jc3YiKSAlPiUKICAgIG11dGF0ZShob21lX3RlYW0gPSBzdHJpX3RyYW5zX2dlbmVyYWwoCiAgICAgIGhvbWVfdGVhbSwgaWQgPSAiTGF0aW4tQVNDSUkiKSwKICAgICAgYXdheV90ZWFtID0gc3RyaV90cmFuc19nZW5lcmFsKAogICAgICAgIGF3YXlfdGVhbSwgaWQgPSAiTGF0aW4tQVNDSUkiKSkgJT4lCiAgICBtdXRhdGUoaG9tZV9nb2FsID0gYXMubnVtZXJpYyhob21lX2dvYWwpLCAKICAgICAgICAgICBhd2F5X2dvYWwgPSBhcy5udW1lcmljKGF3YXlfZ29hbCksCiAgICAgICAgICAgIyBkYXRlID0geW1kKGRhdGUpLAogICAgICAgICAgIGN1cCA9ICJmd2MyNSIsCiAgICAgICAgICAgZGF0ZV9vYmplY3QgPSBhcy5EYXRlKGRhdGUsIGZvcm1hdCA9ICIlYiAlZCwgJVkiKSwgCiAgICAgICAgICAgZGF0ZSA9IGZvcm1hdChkYXRlX29iamVjdCwgIiVZLSVtLSVkIiksCiAgICAgICAgICAgZGF0ZSA9IHltZChkYXRlKSkgJT4lCiAgICBzZWxlY3QoZGF0ZSwgY3VwLCBob21lX3RlYW0sIGF3YXlfdGVhbSwgCiAgICAgICAgICAgaG9tZV9nb2FsLCBhd2F5X2dvYWwpICU+JQogICAgYXJyYW5nZShkYXRlLCBob21lX3RlYW0pICAKICAKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAgIyBKb2luIGFsbCB1Y2wgZGF0YSB3aXRoIGZ3YzI1IAogICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAKICBkYV91Y2wgPC0gcmJpbmQoZDIzLCBkMjQsIGZ3YzI1LCBkMjUpCiAgCiAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICMgQ29ycmVjdCBzb21lIHRlYW0gbmFtZXMsIHN0aWxsIHNvbWUgd3JvbmcgbmFtZXMgCiAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogIAogIGRhX3VjbCA8LSBkYV91Y2wgJT4lIAogICAgbXV0YXRlKGhvbWVfdGVhbSA9IGNhc2Vfd2hlbigKICAgICAgaG9tZV90ZWFtID09ICJQU0ciIH4gIlBhcmlzIFNHIiwKICAgICAgaG9tZV90ZWFtID09ICJGQyBCYXllcm4iIH4gIkJheWVybiBNdW5pY2giLCAgCiAgICAgIGhvbWVfdGVhbSA9PSAiQm9yLiBEb3J0bXVuZCIgfiAiRG9ydG11bmQiLCAgCiAgICAgIGhvbWVfdGVhbSA9PSAiQXRsZXRpY28iIH4gIkF0bGV0aWNvIE1hZHJpZCIsICAgICAKICAgICAgaG9tZV90ZWFtID09ICJTcG9ydGluZyBDUCIgfiAiU3BvcnRpbmciLCAgCiAgICAgIGhvbWVfdGVhbSA9PSAiTWFuY2hlc3RlciBDaXR5IiB+ICJNYW4gQ2l0eSIsICAKICAgICAgLmRlZmF1bHQgPSBhcy5jaGFyYWN0ZXIoaG9tZV90ZWFtKQogICAgKSkgJT4lCiAgICBtdXRhdGUoYXdheV90ZWFtID0gY2FzZV93aGVuKAogICAgICBhd2F5X3RlYW0gPT0gIlBTRyIgfiAiUGFyaXMgU0ciLAogICAgICBhd2F5X3RlYW0gPT0gIkZDIEJheWVybiIgfiAiQmF5ZXJuIE11bmljaCIsICAgIAogICAgICBhd2F5X3RlYW0gPT0gIkJvci4gRG9ydG11bmQiIH4gIkRvcnRtdW5kIiwgIAogICAgICBhd2F5X3RlYW0gPT0gIkF0bGV0aWNvIiB+ICJBdGxldGljbyBNYWRyaWQiLCAgIAogICAgICBhd2F5X3RlYW0gPT0gIlNwb3J0aW5nIENQIiB+ICJTcG9ydGluZyIsICAKICAgICAgYXdheV90ZWFtID09ICJNYW5jaGVzdGVyIENpdHkiIH4gIk1hbiBDaXR5IiwgICAgICAgIAogICAgICAuZGVmYXVsdCA9IGFzLmNoYXJhY3Rlcihhd2F5X3RlYW0pCiAgICApKSAKICAKZ2xpbXBzZShkYV91Y2wpCmBgYAoKYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyBxYyBkYXRhIAoKdGVhbUggPC0gZGF0YV9mcmFtZShob21lX3RlYW0gPSBzb3J0KHVuaXF1ZShkYV9ldXJvMSRob21lX3RlYW0pKSkgJT4lCiAgZmlsdGVyKGhvbWVfdGVhbSAhPSAiRXN0cmVsbGEgUm9qYSIgJiAjIGF1c2VudGUgZW4gYXdheV90ZWFtCiAgICAgICAgICAgaG9tZV90ZWFtICE9ICJTYWx6YnVyZ28iICYgIyBhdXNlbnRlIGVuIGF3YXlfdGVhbQogICAgICAgICAgIGhvbWVfdGVhbSAhPSAiU2hha2h0YXIgRG9uZXRzayIgJiAjIGNoYW5nZSBuYW1lOiBTaGFraHRhciBELgogICAgICAgICAgIGhvbWVfdGVhbSAhPSAiWW91bmcgQm95cyIgJiAjIGNoYW5nZSBuYW1lOiBCU0MgWW91bmcgQm95CiAgICAgICAgICAgaG9tZV90ZWFtICE9ICJNYW5jaGVzdGVyIENpdHkiKSAjIGNoYW5nZSBuYW1lOiBNYW5jaGVzdGVyIENpdHkKCnRlYW1BIDwtIGRhdGFfZnJhbWUoYXdheV90ZWFtID0gc29ydCh1bmlxdWUoZGFfZXVybzEkYXdheV90ZWFtKSkpICU+JQogIGZpbHRlcihhd2F5X3RlYW0gIT0gIlNldmlsbGEiICYgIyBhdXNlbnRlIGVuIGhvbWVfdGVhbQogICAgICAgICAgIGF3YXlfdGVhbSAhPSAiU2hha2h0YXIgRG9uZXRzayIgJiAjIGNoYW5nZSBuYW1lOiBTaGFraHRhciBELgogICAgICAgICAgIGF3YXlfdGVhbSAhPSAiU3BvcnRpbmcgQnJhZ2EiICYgIyBhZGRzIGluIGhvbWVfdGVhbQogICAgICAgICAgIGF3YXlfdGVhbSAhPSAiWW91bmcgQm95cyIgJiAjIGNoYW5nZSBuYW1lOiBCU0MgWW91bmcgQm95CiAgICAgICAgICAgYXdheV90ZWFtICE9ICJNYW5jaGVzdGVyIENpdHkiKSAjIGNoYW5nZSBuYW1lOiBNYW5jaGVzdGVyIENpdHkKCnRlYW1zIDwtIGRhdGFfZnJhbWUodGVhbUgsIHRlYW1BKQpgYGAKCiMgRGF0YSB0byBydW4gQlJNUyBtb2RlbAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAojIGRhX21vZGVsIAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCmRhX21vZGVsIDwtIGZ1bGxfam9pbihkYV91Y2wsIGRhX2V1cm8xKQoKUHJpbnREVChkYV9tb2RlbCwgNSwgIiIsIDIpCmBgYAoKIyMgUmVhbCBNYWRyaWQgaG9tZSB0ZWFtIGdvYWxzIGRpZmZlcmVuY2UKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQbG90OiBSZWFsIE1hZHJpZCBob21lIHRlYW0gZ29hbHMgZGlmZmVyZW5jZSAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmRhdCA9IGRhX21vZGVsICU+JSAKICBmaWx0ZXIoaG9tZV90ZWFtID09ICJSZWFsIE1hZHJpZCIpICU+JQogIG11dGF0ZSh2YWx1ZXMgPSByb3VuZChob21lX2dvYWwtYXdheV9nb2FsKSwgMCkKCmhpc3RvZ3JhbSA8LSBjcmVhdGVfaGlzdG9ncmFtKAogIGRhdGEgPSBkYXQsIAogIHhfdmFyaWFibGUgPSAidmFsdWVzIiwgCiAgYmluX3dpZHRoID0gMSwKICB0aXRsZSA9ICJSZWFsIE1hZHJpZCBnb2FscyBkaWZmZXJlbmNlIiwKICB4X2xhYmVsID0gIlZhbHVlIiwKICB5X2xhYmVsID0gIkZyZXF1ZW5jeSIKKQoKaGlzdG9ncmFtCmBgYAoKIyMgUmVhbCBNYWRyaWQgYXdheSB0ZWFtIGdvYWxzIGRpZmZlcmVuY2UKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQbG90OiBSZWFsIE1hZHJpZCBhd2F5IHRlYW0gZ29hbHMgZGlmZmVyZW5jZSAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmRhdCA9IGRhX21vZGVsICU+JSAKICBmaWx0ZXIoYXdheV90ZWFtID09ICJSZWFsIE1hZHJpZCIpICU+JQogIG11dGF0ZSh2YWx1ZXMgPSByb3VuZChob21lX2dvYWwtYXdheV9nb2FsKSwgMCkKCmhpc3RvZ3JhbSA8LSBjcmVhdGVfaGlzdG9ncmFtKAogIGRhdGEgPSBkYXQsIAogIHhfdmFyaWFibGUgPSAidmFsdWVzIiwgCiAgYmluX3dpZHRoID0gMSwKICB0aXRsZSA9ICJSZWFsIE1hZHJpZCBhd2F5IHRlYW0gZ29hbHMgZGlmZmVyZW5jZSIsCiAgeF9sYWJlbCA9ICJWYWx1ZSIsCiAgeV9sYWJlbCA9ICJGcmVxdWVuY3kiCikKCmhpc3RvZ3JhbQpgYGAKCiMjIFNwbGl0IGRhdGEgKDgwLTIwKQoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFNwbGl0IGRhdGEgZXVybwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgMS4gU2V0IGEgc2VlZCBmb3IgcmVwcm9kdWNpYmlsaXR5CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnNldC5zZWVkKDEzNTMpCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgMi4gQ3JlYXRlIGEgcmFuZG9tIGluZGV4IG9mIHJvd3MgZm9yIHRoZSB0cmFpbmluZyBzZXQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKdHJhaW5faW5kaWNlcyA8LSBzYW1wbGUoMTpucm93KGRhX21vZGVsKSwgc2l6ZSA9IDAuOCAqIG5yb3coZGFfbW9kZWwpKQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIDMuIENyZWF0ZSB0aGUgdHJhaW5pbmcgYW5kIHRlc3Rpbmcgc2V0cyB1c2luZyB0aGUgaW5kaWNlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp0cmFpbiA8LSBkYV9tb2RlbFt0cmFpbl9pbmRpY2VzLCBdCnRlc3QgPC0gZGFfbW9kZWxbLXRyYWluX2luZGljZXMsIF0KClByaW50RFQodHJhaW4sIDUsICJUcmFpbiBkYXRhIHVzZWQgdG8gcnVuIG1vZGVsIiwgMikKYGBgCgojIFJ1biBCUk1BIEV2YWx1YXRpb24gUXVhbGl0eSBQcmVkaWN0aW9uCgotICAgKipNU0UqKiBhIHN0YXRpc3RpY2FsIG1lYXN1cmUgb2YgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHNxdWFyZXMgb2YgdGhlIGVycm9ycyBiZXR3ZWVuIGVzdGltYXRlZCBhbmQgYWN0dWFsIHZhbHVlcy4KCi0gICAqKkhpdCByYXRlKiogaXMgYSBtZXRyaWMgdGhhdCBtZWFzdXJlcyB0aGUgc3VjY2VzcyByYXRlIG9mICoqY29ycmVjdCBwcmVkaWN0aW9uKiouCgotICAgVGhlICoqbG9nIGxvc3MgdmFsdWUqKiBpcyB0aGUgbmVnYXRpdmUgbG9nLWxpa2VsaWhvb2Qgb2YgdGhlIG1vZGVsLCB3aGVyZSBhIGxvd2VyIHZhbHVlIGluZGljYXRlcyBiZXR0ZXIgcHJlZGljdGl2ZSBhY2N1cmFjeS4KCiMjIEVVUk8tVUNMIG1vZGVscwoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHJlbW92ZSBuYSAgIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp0cmFpbiA8LSB0cmFpbiAlPiUgZHJvcF9uYShob21lX2dvYWwpCnRlc3QgPC0gdGVzdCAlPiUgZHJvcF9uYShob21lX2dvYWwpCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgcnVuIGJybXNfZXZhbF9xdWFsX3ByZWRfdjAxIGZ1bmN0aW9uICAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnN5c3RlbS50aW1lKGV1cm9fbW9kIDwtIGJybXNfZXZhbF9xdWFsX3ByZWRfdjAxKHRyYWluLCB0ZXN0KSkKYGBgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIFNhdmUgdGhlIGRhdGEgZnJhbWUgdG8gYW4gcmRhIGZpbGUKc2V0d2QoIn4vRG9jdW1lbnRzL2JldHMvdmlnbmV0dGVzLzQ3LmRldl9zb2NjZXJfbW9kZWwvbW9kZWwiKQojIHNhdmUoZXVyb19tb2QsIGZpbGUgPSAiZXVyb19tb2RfMjRub3YyNS5yZGEiKQojIHNhdmUoYnJtc19ob21lX21vZGVsXzI0bm92MjUsIGZpbGUgPSAiYnJtc19ob21lX21vZGVsXzI0bm92MjUucmRhIikKbG9hZCgiZXVyb19tb2RfMjRub3YyNS5yZGEiKQpgYGAKCiMjIFBsb3Q6IEV2YWx1YXRpb24gZGF0YSB0ZXN0IGdvYWxzIGRpc3RyaWJ1dGlvbgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFBsb3Q6IEV2YWx1YXRpb24gZGF0YSB0ZXN0IGdvYWxzIGRpc3RyaWJ1dGlvbiAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZGF0ID0gZXVyb19tb2Qkc3Q1JGV2YWxfZGF0YV90ZXN0ICU+JQogIG11dGF0ZSh2YWx1ZXMgPSByb3VuZChob21lX2dvYWwtYXdheV9nb2FsKSwgMCkKCmhpc3RvZ3JhbSA8LSBjcmVhdGVfaGlzdG9ncmFtKAogIGRhdGEgPSBkYXQsIAogIHhfdmFyaWFibGUgPSAidmFsdWVzIiwgCiAgYmluX3dpZHRoID0gMSwKICB0aXRsZSA9ICJFdmFsdWF0aW9uIGRhdGEgdGVzdCBnb2FscyBkaXN0cmlidXRpb24iLAogIHhfbGFiZWwgPSAiVmFsdWUiLAogIHlfbGFiZWwgPSAiRnJlcXVlbmN5IgopCgpoaXN0b2dyYW0KYGBgCgojIFJ1biBCUk1BIGZvciBQcmVkaWN0aW9uCgojIyBDcmVhdGUgc2NoZWR1bGUgKHNjaCkKCi0gICBVQ0wgc2NoZWR1bGVcCi0gICBFVVJPIHNjaGVkdWxlCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiMgQ3JlYXRlIFVDTCBzY2hlZHVsZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCgpzY2hfdWNsIDwtIHN1YnNldChkMjUsIGlzLm5hKGhvbWVfZ29hbCkpICU+JQogIHNlbGVjdChjdXAsIGhvbWVfdGVhbSwgYXdheV90ZWFtKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAojIENyZWF0ZSBFVVJPIHNjaGVkdWxlIAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCgpzY2hfZXVybyA8LSBkYV9tb2RlbCAlPiUgCiAgZmlsdGVyKGN1cCAlaW4lIGMoImV1cm8yNTI2RTAiLCAiZXVybzI1MjZTUDEiLCAiZXVybzI1MjZJMSIsICAKICAgICAgICAgICAgICAgICAgICAiZXVybzI1MjZGMSIsICAiZXVybzI1MjZEMSIpKSAgJT4lCiAgc2VsZWN0KGN1cCwgaG9tZV90ZWFtLCBhd2F5X3RlYW0pCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiMgQ3JlYXRlIHNjaGVkdWxlIChqb2luIEVVUk8gJiBVQ0wpIAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCgpzY2ggPC0gZnVsbF9qb2luKHNjaF9ldXJvLCBzY2hfdWNsLAogICAgICAgICAgICAgICAgIGJ5ID0gam9pbl9ieShjdXAsIGhvbWVfdGVhbSwgYXdheV90ZWFtKSkKCmdsaW1wc2Uoc2NoKQpgYGAKCiMgRXZhbHVhdGluZyBxdWFsaXR5IHByZWRpY3Rpb25zCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAojIEV2YWx1YXRpbmcgcXVhbGl0eSBwcmVkaWN0aW9ucwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAoKZ3AgPSBnZW5lcmF0aW5nX3ByZWRpY3Rpb25zX3YwMShldXJvX21vZCRzdDMkbW9kZWxfaG9tZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVyb19tb2Qkc3QzJG1vZGVsX2F3YXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoKSAKCmdwX3ByZWQgPSBncCRwcmVkCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAojIEV2YWx1YXRpbmcgcXVhbGl0eSBwcmVkaWN0aW9ucyB1c2luZyBQcmVkIGRhdGEKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKCmVxcHMgPC0gZXZhbHVhdGluZ19xdWFsaXR5X3ByZWRpY3Rpb25zX3NjaF92MDEoZ3BfcHJlZCwgc2NoKQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKIyB3cmFuZ2xpbmcgcmVzdWx0cyBkYXRhIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAoKcmVzdWx0cyA8LSBlcXBzJGV2YWxfZGF0YV9zY2ggJT4lCiAgc2VsZWN0KGN1cCwgaG9tZV90ZWFtLCBhd2F5X3RlYW0sIHByZWRpY3RlZF9yZXN1bHQsIAogICAgICAgICBleHBlY3RlZF9ob21lX2dvYWxzOnByb2Jfd2luX2F3YXkpCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnREVAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpQcmludERUKHJlc3VsdHMsIDEwLCAiUHJlZGljdGlvbiBtb2RlbCByZXN1bHRzIiwgMykKYGBgCgojIEZvcmVjYXN0CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpodCA8LSBjKCJDaGVsc2VhIiwgIkRvcnRtdW5kIiwgIkJvZG8vR2xpbXQiLCAiTWFuIENpdHkiLCAKICAgICAgICAiTWFyc2VpbGxlIiwiUGFyaXMgU0ciLCAiT2x5bXBpYWNvcyIsICJMaXZlcnBvb2wiLCAKICAgICAgICAiQXJzZW5hbCIsICJBdGxldGljbyBNYWRyaWQiKQoKYXQgPC0gYygiQmFyY2Vsb25hIiwgIlZpbGxhcnJlYWwiLCAiSnV2ZW50dXMiLCAiTGV2ZXJrdXNlbiIsIAogICAgICAgICJOZXdjYXN0bGUiLCJUb3R0ZW5oYW0iLCAiUmVhbCBNYWRyaWQiLCAiUFNWIiwgCiAgICAgICAgIkJheWVybiBNdW5pY2giLCAiSW50ZXIiKQoKZm9yZWNhc3QgPSByZXN1bHRzICU+JSAKICBmaWx0ZXIoY3VwID09ICJ1Y2wyNTI2IiwgCiAgICAgICAgIGhvbWVfdGVhbSAlaW4lIGh0ICYgYXdheV90ZWFtICVpbiUgYXQpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIDIpCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnREVAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpQcmludERUKGZvcmVjYXN0LCAxMiwgIkZvcmVjYXN0IiwgMTIpCmBgYAo=