Reading Data

BLOC 2022-2024

2022 First

Elo First 2022

competitors = 24

#####_ Elo History _

2022 Second

Elo Second 2022

-competitors = 24-

#####_ Elo History _

2022 Third

Elo Third 2022

Competitors = 28

debut list

#####_ Elo History _

Elo Accumulated 2022

* Capturando los futuros Sub16

* Los sub16 “salen”

2023

2023 First

Elo First 2023

-Competitors = 30-

#####_ Elo History _

Elo Accumulated First_2023

2023 Second

#####Elo Second 2023 -Competitors = 32-

#####_ Elo History _

Elo Accumulated Second_2023

2023 Third

Elo Third 2023

-Competitors = 33-

#####_ Elo History _

Elo Accumulated Third_2023

2023 Champ

Elo Camp 2023

-Competitors = 33-

#####_ Elo History _

Elo Accumulated Champ_2023

* Capturando los futuros Sub16

* Los sub16 “salen”

2024

2024 First

Elo First 2024

-Competitors = 47-

#####_ Elo History _

Elo Accumulated First_2024

2024 Second

Elo Second 2024

-Competitors = 40-

#####_ Elo History _

Elo Accumulated Second_2024

2024 Third

Elo Third 2024

-Competitors = 41-

#####_ Elo History _

Elo in time

Elo Accumulated Third_2024

competitor Team R.new Prob.Finals Prob.podium
Nicolau TAULATS MCDONALD FAM-AND 1155.05 67.7 % 62.9 %
Javier Leon GENTO BLANCO FEGAMON 1068.06 55.9 % 50.7 %
Mateo VÁSCONEZ GONZÁLEZ FEGAMON 1063.84 55.3 % 50.1 %
Nicolás SCUTELNICU ILIE FEMECV 1063.45 55.3 % 50 %
Joan ALEJANDRO ILLA FEEC 1056.88 54.3 % 49.1 %
Markel GONZÁLEZ DE OLANO FDMESCyL 1042.28 52.2 % 47 %
Abel ACOSTA CARRAMOLINO FADMES 1041.80 52.9 % 50 %
Lur GUENETXEA MANTEROLA EMF-FVM 1031.27 50.6 % 45.4 %
Xoel LORES REY FEGAMON 1030.46 50.5 % 45.3 %
David REYES HARO FADMES 1026.82 50 % 44.7 %
Mateo GIL CANO FMM 1022.80 49.4 % 44.2 %
Hugo DÍAZ BUSTOS FMM 1020.09 49 % 43.8 %
Nico AMAYA LÓPEZ FADMES 1017.01 48.6 % 43.4 %
Massimo ROMAGNOLI FEMECV 1016.82 48.6 % 43.3 %
Pablo GARRUCHO DÍAZ FADMES 1013.67 48.1 % 42.9 %
Óscar DÍAZ MARTÍNEZ FEMECV 1009.90 47.6 % 42.4 %
Marcos MEDINA CALVO FDMCLM 1006.68 47.1 % 41.9 %
Héctor MORENO LECHA FEEC 1005.82 47 % 41.8 %
Miguel GONZÁLEZ MENDOZA FEXME 1003.49 58.8 % 49.4 %
Xabi ESTANYOL ELORRIAGA EMF-FVM 997.62 45.8 % 40.6 %
Aiden MELWANI FECAMON 997.28 48.4 % 44.4 %
Markel KORTA FERNÁNDEZ EMF-FVM 996.57 45.7 % 40.5 %
Teo BEERENWINKEL FERNÁNDEZ FECAMON 995.15 57.7 % 48.2 %
Marko DELARIBERETTE AZNAR FADMES 993.75 57.5 % 48 %
Jaime BLAS ASENSIO FAM 992.82 45.1 % 40 %
Abel ACOSTA GRANADOS FADMES 990.48 44.8 % 39.6 %
Paulo GARCIA AMENEIRO FNDME 989.76 44.7 % 39.6 %
Aday FELIPE RAMÍREZ FECAMON 989.58 56.9 % 47.4 %
Aitor ALARTE CECERE FEMECV 987.93 44.4 % 39.3 %
David GARRIDO SÁNCHEZ FDMESCyL 987.70 44.4 % 39.3 %
Asher HUDSON FEEC 987.58 42.4 % 37.8 %
Dídac PÉREZ NIETO FEMECV 985.41 56.3 % 46.8 %
Luis HUESO TERRADEZ FEMECV 985.41 56.3 % 46.8 %
Óliver BERGOÑÓS MARTÍNEZ FDMCLM 985.41 56.3 % 46.8 %
Paolo TORRE ESPERANDIEU FMM 985.41 56.3 % 46.8 %
Yeray MARIN RIESCO FEMECV 985.41 56.3 % 46.8 %
Jaime YÁÑEZ RODRÍGUEZ FECAMON 984.76 44.7 % 41.8 %
Nicolas GUTIERREZ GÓMEZ FEXME 983.75 44.5 % 41.7 %
Dante GABARRE ANTONI FAM 983.22 43.8 % 38.7 %
Lucas FERNÁNDEZ ACEBO FAM 983.22 43.8 % 38.7 %
Mateo BERDEJO LASSO FAM 983.22 43.8 % 38.7 %
Mateo FERNÁNDEZ NOVAL FAM 983.22 43.8 % 38.7 %
Unax RODRÍGUEZ ANTÓN EMF-FVM 983.22 43.8 % 38.7 %
Teo HERRERO PEÑA FMM 979.53 43.2 % 38.2 %
Iraultza AZKUE ALKORTA EMF-FVM 977.98 43 % 37.9 %
Pablo MARTÍNEZ REVILLA FDMESCyL 977.04 43.6 % 40.8 %
Carlos GONZÁLEZ LÓPEZ FEXME 976.24 42.8 % 37.7 %
Alberto PORTERO SÁNCHEZ FMM 973.97 41.5 % 37.3 %
Javier JIMÉNEZ CABÁN FMM 972.82 37.4 % 32.9 %
Isaac OBREGÓN BERNABÉ FMM 972.27 42.9 % 40.1 %
Pol SARGATAL TORREGROSA FEEC 969.00 39.8 % 35.3 %
Sebastian MAZZONI FEEC 966.93 47.7 % 41.7 %
Adrian NAVARRETE ALCARAZ FEMECV 966.85 41.5 % 36.4 %
Elias GARCIA-BOUZA CARRILLO FMM 966.76 44 % 40.1 %
Gael CLUA CAÑIZARES FDMCLM 965.86 41.3 % 36.3 %
Gonzalo PÉREZ DOMINGO FDMCLM 964.94 41.9 % 39.1 %
Hugo GIL DOMÍNGUEZ FDMCLM 957.50 40.8 % 38.1 %
Rudy ANTÓN GARCÍA FDMCLM 955.86 40.6 % 37.9 %
Pablo SALA PÉREZ FEMECV 955.40 39.9 % 34.9 %
Abian DELGADO THONFELD FECAMON 943.94 38.3 % 33.4 %
Andres RODRIGALVAREZ FDMCM 943.29 37.3 % 33.3 %
Haize JIMÉNEZ LÓPEZ FEGAMON 941.52 50 % 40.6 %
Adrián NEUSTADT FMM 940.52 36.9 % 32.9 %
Fernando Juan PLA LADIOS FEMECV 939.04 37.6 % 32.8 %
Santiago GONZALEZ PAMPIN FEGAMON 924.96 35.7 % 31.1 %
Eric GIMENEZ SERRANO FEEC 903.49 33 % 28.5 %
Miguel GARCIA MENDOZA FEXME 900.36 32.6 % 28.1 %
Amets REYES DÍAZ FEXME 889.30 27 % 23.2 %
Pablo SUAREZ PALIZAS FEMPA 887.71 31 % 26.7 %

## upcoming SEASON

###* Capturando los futuros Sub16

###* Los sub16 “salen”

LS0tDQp0aXRsZTogIkVsb19TcG9ydC5DbGltYmluZ19FU1BfMS4wIChTdWIxNE0pIg0KYXV0aG9yOiAiRmVkZXJpY28gSi4gVmlsbGF0b3JvIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KLS0tDQoNCiMjIyMjIEZ1ZW50ZTogW2h0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvXShodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mby8pDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShmbGV4ZGFzaGJvYXJkKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBlY2hvID0gRkFMU0UsDQoJbWVzc2FnZSA9IEZBTFNFLA0KICB3YXJuaW5nID0gRkFMU0UsDQoJaW5jbHVkZSA9IEZBTFNFDQopDQpgYGAgIA0KDQpgYGB7ciBwYWNrYWdlcywgbWVzc2FnZT1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCmlmKCFyZXF1aXJlKHRpZHl2ZXJzZSkpe2luc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIscmVwb3MgPSAiaHR0cDovL2NyYW4udXMuci1wcm9qZWN0Lm9yZyIpfQ0KaWYoIXJlcXVpcmUoZ29vZ2xlc2hlZXRzNCkpe2luc3RhbGwucGFja2FnZXMoImdvb2dsZXNoZWV0czQiKX0NCmlmKCFyZXF1aXJlKGdvb2dsZWRyaXZlKSl7aW5zdGFsbC5wYWNrYWdlcygiZ29vZ2xlZHJpdmUiKX0NCmlmKCFyZXF1aXJlKGRwbHlyKSl7aW5zdGFsbC5wYWNrYWdlcygiZHBseXIiKX0NCmlmKCFyZXF1aXJlKGh0dHIyKSl7aW5zdGFsbC5wYWNrYWdlcygiaHR0cjIiKX0NCmlmKCFyZXF1aXJlKGpzb25saXRlKSl7aW5zdGFsbC5wYWNrYWdlcygianNvbmxpdGUiKX0NCmlmKCFyZXF1aXJlKFJzZWxlbml1bSkpe2luc3RhbGwucGFja2FnZXMoIlJzZWxlbml1bSIpfQ0KaWYoIXJlcXVpcmUoY2hyb21vdGUpKXtpbnN0YWxsLnBhY2thZ2VzKCJjaHJvbW90ZSIpfQ0KaWYoIXJlcXVpcmUocHVycnIpKXtpbnN0YWxsLnBhY2thZ2VzKCJwdXJyciIpfQ0KaWYoIXJlcXVpcmUod2RtYW4pKXtpbnN0YWxsLnBhY2thZ2VzKCJ3ZG1hbiIpfQ0KaWYoIXJlcXVpcmUoRFQpKXtpbnN0YWxsLnBhY2thZ2VzKCJEVCIpfQ0KaWYoIXJlcXVpcmUocGxvdGx5KSl7aW5zdGFsbC5wYWNrYWdlcygicGxvdGx5Iil9DQojIw0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShjaHJvbW90ZSkNCmxpYnJhcnkocHVycnIpDQpsaWJyYXJ5KHdkbWFuKQ0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocnZlc3QpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShqc29ubGl0ZSkNCmxpYnJhcnkoUlNlbGVuaXVtKQ0KDQpsaWJyYXJ5KGdvb2dsZXNoZWV0czQpDQpsaWJyYXJ5KGdvb2dsZWRyaXZlKQ0KDQpgYGAgIA0KDQoNCiMjIyMjIFJlYWRpbmcgRGF0YQ0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KDQpvcHRpb25zKGdhcmdsZV9vYXV0aF9lbWFpbCA9ICJ2aWxsYXRvcm9wYXpmakBkYXRhYW5hbHlzaXNsYWIuY29tIikNCg0Kc3MgPC0gImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFrWFlVSDlfUVdOQmJkSWhWa2dydGhYQWcyU1VDNXA2LXJCNjUxSGx5RzZrL2VkaXQ/dXNwPXNoYXJpbmciDQpob2phID0gMg0KcmFuZ28gPSAiQTE6TTU0MzUiDQpyYW5rcyA8LSByZWFkX3NoZWV0KHNzLA0KICAgICAgICAgICAgICAgIHNoZWV0PWhvamEsDQogICAgICAgICAgICAgICAgcmFuZ2U9IHJhbmdvLCANCiAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBUUlVFKQ0KDQpyYW5rcyA8LSAgcmFua3MgJT4lDQogIG11dGF0ZV9pZihpcy5jaGFyYWN0ZXIsIGFzLmZhY3RvcikNCg0KYGBgICANCg0KDQojIyBCTE9DIDIwMjItMjAyNA0KIyMjIDIwMjIgRmlyc3QNCmBgYHtyIGluY2x1ZGU9RkFMU0UsIHJvd3MucHJpbnQ9IDh9DQpibG9jLlN1YjE0TSA8LSByYW5rcyAlPiUNCiAgZmlsdGVyKHN0YWdlPT0iQ2xhc2lmaWMiLA0KICAgICAgICAgQ2F0ZWdvcnk9PSJTdWIxNF9NIiwNCiAgICAgICAgIHllYXI9PSIyMDIyInx5ZWFyPT0iMjAyMyINCiAgICAjICAgICBOYW1lPT0gbm9tYnJlDQogICAgICAgICApICU+JQ0KICBncm91cF9ieShjb21wZXRpdG9yPSBOYW1lLA0KICAgICAgICAgICBZZWFyPSB5ZWFyLA0KICAgICAgICAgICBDb21wZT0gQ29tcGVfLA0KICAgICAgICAgICBUZWFtID0gVGVhbSwNCiAgICAgICAgICAgRGF0ZT0gRGF0ZSkgJT4lDQogIHJlZnJhbWUocmFuaz0gUmFuaykgJT4lDQogIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvciArIFRlYW0gfiBDb21wZSwgDQogICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpDQoNCmJsb2MuU3ViMTRNIDwtIGFzX3RpYmJsZShibG9jLlN1YjE0TSkNCiMjDQpibG9jLlN1YjE0TVtvcmRlcihibG9jLlN1YjE0TSRhLmJsb2MuZmlyc3QuMjIpLGMoMSwyLDMpXSANCg0KY29tcGV0aXRvcnMuYSA8LSBucm93KGJsb2MuU3ViMTRNWyFpcy5uYShibG9jLlN1YjE0TSRhLmJsb2MuZmlyc3QuMjIpLF0pDQpjb21wZXRpdG9ycy5iIDwtIG5yb3coYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGIuYmxvYy5zZWMuMjIpLF0pDQpjb21wZXRpdG9ycy5jIDwtIG5yb3coYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGMuYmxvYy50aHJkLjIyKSxdKQ0KY29tcGV0aXRvcnMuZCA8LSBucm93KGJsb2MuU3ViMTRNWyFpcy5uYShibG9jLlN1YjE0TSRkLmJsb2MuZmlyc3QuMjMpLF0pDQpjb21wZXRpdG9ycy5lIDwtIG5yb3coYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGUuYmxvYy5zZWMuMjMpLF0pDQpjb21wZXRpdG9ycy5mIDwtIG5yb3coYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGYuYmxvYy50aHJkLjIzKSxdKQ0KY29tcGV0aXRvcnMuZyA8LSBucm93KGJsb2MuU3ViMTRNWyFpcy5uYShibG9jLlN1YjE0TSRnLmJsb2MuY2FtcC4yMyksXSkNCmBgYCAgDQoNCg0KIyMjIEVsbyBGaXJzdCAyMDIyICANCg0KKl9jb21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmFgXyoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KTiA8LSBsZW5ndGgoYmxvYy5TdWIxNE0kYS5ibG9jLmZpcnN0LjIyWyFpcy5uYShibG9jLlN1YjE0TSRhLmJsb2MuZmlyc3QuMjIpXSkNClIgPC0gcmVwKDEwMDAsIE4pDQpuYW1lcyA8LSBibG9jLlN1YjE0TVshaXMubmEoYmxvYy5TdWIxNE0kYS5ibG9jLmZpcnN0LjIyKSwgMV0NClRlYW0gPC0gYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGEuYmxvYy5maXJzdC4yMiksIDJdDQojY2F0ZWcgPC0gYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGEuYmxvYy5maXJzdC4yMiksIF0NCnJlc3VsdHMgPC0gYmxvYy5TdWIxNE0kYS5ibG9jLmZpcnN0LjIyWyFpcy5uYShibG9jLlN1YjE0TSRhLmJsb2MuZmlyc3QuMjIpXQ0Kc3RkZXYgPC0gc2QocmVzdWx0cykNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKFIpDQptZWRpYW5hIDwtIG1lZGlhbihyZXN1bHRzKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KUyA8LSAoKG1lZGlhbmEtcmVzdWx0cykgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KZWxvLmEuYmxvYy5maXJzdC4yMiA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICBTID0gUywNCiAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLCAiJSIpLCANCiAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwiJSIgKSApDQoNCmVsby5hLmJsb2MuZmlyc3QuMjIgPC0gYXNfdGliYmxlKGVsby5hLmJsb2MuZmlyc3QuMjIpDQoNCmtuaXRyOjprYWJsZShlbG8uYS5ibG9jLmZpcnN0LjIyW29yZGVyKGVsby5hLmJsb2MuZmlyc3QuMjIkcmVzdWx0cyksIGMoMSwyLDMsNCw2LDcsOCldLCApDQoNCg0KDQpgYGAgIA0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KDQpgYGB7cn0NCmVsby5oaXN0b3J5Lmxhc3QgPC0NCmVsby5hLmJsb2MuZmlyc3QuMjIgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcCgiMjAyMi4xIiwgbGVuZ3RoKGVsby5hLmJsb2MuZmlyc3QuMjIkY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0TSIsIGxlbmd0aChlbG8uYS5ibG9jLmZpcnN0LjIyJGNvbXBldGl0b3IpKSkNCmVsby5oaXN0b3J5IDwtIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQpgYGANCg0KDQojIyMgMjAyMiBTZWNvbmQgDQpgYGB7ciBpbmNsdWRlPUZBTFNFLCByb3dzLnByaW50PTh9DQpibG9jLlN1YjE0TVtvcmRlcihibG9jLlN1YjE0TSRiLmJsb2Muc2VjLjIyKSwgYygxLDIsMyw0KV0NCiMNCmJsb2MuU3ViMTRNLmFfYiA8LSBibG9jLlN1YjE0TVssYygxOjQpXSAlPiUNCiAgZmlsdGVyKCFpcy5uYShibG9jLlN1YjE0TSRiLmJsb2Muc2VjLjIyKSYhaXMubmEoYmxvYy5TdWIxNE0kYS5ibG9jLmZpcnN0LjIyKSkNCg0KYmxvYy5TdWIxNE0uYV9iIDwtIGVsby5hLmJsb2MuZmlyc3QuMjIgJT4lIA0KICByaWdodF9qb2luKGJsb2MuU3ViMTRNLmFfYiwgYnk9ICJjb21wZXRpdG9yIikgJT4lDQogIGFzX3RpYmJsZSgpDQoNCmBgYCAgDQoNCg0KIyMjIEVsbyBTZWNvbmQgMjAyMg0KKi1jb21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmJgLSoNCg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGJsb2MuU3ViMTRNLmFfYiRiLmJsb2Muc2VjLjIyKQ0KTiA8LSBsZW5ndGgoYmxvYy5TdWIxNE0kYi5ibG9jLnNlYy4yMlshaXMubmEoYmxvYy5TdWIxNE0kYi5ibG9jLnNlYy4yMildKQ0KUiA8LSBibG9jLlN1YjE0TS5hX2IkUi5uZXcNCm5hbWVzIDwtIGJsb2MuU3ViMTRNLmFfYlshaXMubmEoYmxvYy5TdWIxNE0uYV9iJGIuYmxvYy5zZWMuMjIpLDFdDQpUZWFtIDwtIGJsb2MuU3ViMTRNLmFfYiRUZWFtLngNCiNjYXRlZyA8LSBibG9jLlN1YjE0TS5hX2INCnJlc3VsdHMgPC0gYmxvYy5TdWIxNE0kYi5ibG9jLnNlYy4yMlshaXMubmEoYmxvYy5TdWIxNE0kYi5ibG9jLnNlYy4yMildDQpzdGRldiA8LSBzZChyZXN1bHRzKQ0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgTi1uICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4oYmxvYy5TdWIxNE0kYi5ibG9jLnNlYy4yMlshaXMubmEoYmxvYy5TdWIxNE0kYi5ibG9jLnNlYy4yMildKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIw0KUyA8LSAoKG1lZGlhbmEgLSBibG9jLlN1YjE0TS5hX2IkYi5ibG9jLnNlYy4yMiApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCg0KZWxvLmIuYmxvYy5zZWMuMjIgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBibG9jLlN1YjE0TS5hX2IkYi5ibG9jLnNlYy4yMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmIuYmxvYy5zZWMuMjIgPC0gYXNfdGliYmxlKGVsby5iLmJsb2Muc2VjLjIyKQ0KDQojIyMjIGRlYnV0IGxpc3QNCmJsb2MuU3ViMTRNLmIuZGVidXQgPC0gYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGIuYmxvYy5zZWMuMjIpLGMoMSwyLDQpXSAlPiUgYW50aV9qb2luKGJsb2MuU3ViMTRNLmFfYlssIGMoMSldLCBieT0gImNvbXBldGl0b3IiKSAlPiUgYXNfdGliYmxlKCkNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChibG9jLlN1YjE0TS5iLmRlYnV0JGIuYmxvYy5zZWMuMjIpDQpOIDwtIGxlbmd0aChibG9jLlN1YjE0TSRiLmJsb2Muc2VjLjIyWyFpcy5uYShibG9jLlN1YjE0TSRiLmJsb2Muc2VjLjIyKV0pDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gYmxvYy5TdWIxNE0uYi5kZWJ1dFssMV0NClRlYW0gPC0gYmxvYy5TdWIxNE0uYi5kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNE0uYV9iDQpTIDwtICgobWVkaWFuYS0gYmxvYy5TdWIxNE0uYi5kZWJ1dCRiLmJsb2Muc2VjLjIyKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5iLmJsb2Muc2VjLjIyJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmIuYmxvYy5zZWMuMjIkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLmIuYmxvYy5zZWMuMjIuZGVidXQgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBibG9jLlN1YjE0TS5iLmRlYnV0JGIuYmxvYy5zZWMuMjIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5iLmJsb2Muc2VjLjIyLmRlYnV0IDwtIGFzX3RpYmJsZShlbG8uYi5ibG9jLnNlYy4yMi5kZWJ1dCkNCg0KZWxvLmIuYmxvYy5zZWMuMjIgPC0gZWxvLmIuYmxvYy5zZWMuMjIgJT4lIHJiaW5kKGVsby5iLmJsb2Muc2VjLjIyLmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8uYi5ibG9jLnNlYy4yMltvcmRlcihlbG8uYi5ibG9jLnNlYy4yMiRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgICANCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyfQ0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8uYi5ibG9jLnNlYy4yMiAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKCIyMDIyLjIiLCBsZW5ndGgoZWxvLmIuYmxvYy5zZWMuMjIkY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0TSIsIGxlbmd0aChlbG8uYi5ibG9jLnNlYy4yMiRjb21wZXRpdG9yKSkpDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KZWxvLmhpc3RvcnkudF9zZXJpZXMgPC0gZWxvLmhpc3RvcnkgJT4lIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKQ0KYGBgICANCg0KDQojIyMgMjAyMiBUaGlyZA0KYGBge3IgaW5jbHVkZT1GQUxTRSwgcm93cy5wcmludD04fQ0KYmxvYy5TdWIxNE1bb3JkZXIoYmxvYy5TdWIxNE0kYy5ibG9jLnRocmQuMjIpLCBjKDEsMiwzLDQsNSldDQpgYGANCg0KIyMjIEVsbyBUaGlyZCAyMDIyICANCg0KKkNvbXBldGl0b3JzID0gYHIgY29tcGV0aXRvcnMuY2AqDQoNCmBgYHtyfQ0KYmxvYy5TdWIxNE0uYyA8LSBhc190aWJibGUoYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGMuYmxvYy50aHJkLjIyKSAsIGMoMSwyLDUpXSkNCiMjDQpibG9jLlN1YjE0TS5jLmRlYnV0IDwtIGJsb2MuU3ViMTRNW2lzLm5hKGJsb2MuU3ViMTRNJGEuYmxvYy5maXJzdC4yMikmaXMubmEoYmxvYy5TdWIxNE0kYi5ibG9jLnNlYy4yMiYhaXMubmEoYmxvYy5TdWIxNE0kYy5ibG9jLnRocmQuMjIpKSAsIGMoMSwyLDUpXQ0KIyMNCmJsb2MuU3ViMTRNLmFfYl9jIDwtIGJsb2MuU3ViMTRNWyFpcy5uYShibG9jLlN1YjE0TSRhLmJsb2MuZmlyc3QuMjIpJiFpcy5uYShibG9jLlN1YjE0TSRiLmJsb2Muc2VjLjIyKSYhaXMubmEoYmxvYy5TdWIxNE0kYy5ibG9jLnRocmQuMjIpLCBjKDEsMiw1KV0NCiMjDQpibG9jLlN1YjE0TS5hX19jIDwtIGJsb2MuU3ViMTRNWyFpcy5uYShibG9jLlN1YjE0TSRhLmJsb2MuZmlyc3QuMjIpJmlzLm5hKGJsb2MuU3ViMTRNJGIuYmxvYy5zZWMuMjIpJiFpcy5uYShibG9jLlN1YjE0TSRjLmJsb2MudGhyZC4yMiksIGMoMSwyLDMsNSldDQojDQpibG9jLlN1YjE0TS5hX29ubHkgPC0gYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGEuYmxvYy5maXJzdC4yMikmaXMubmEoYmxvYy5TdWIxNE0kYi5ibG9jLnNlYy4yMikmaXMubmEoYmxvYy5TdWIxNE0kYy5ibG9jLnRocmQuMjIpLF0NCiMjIyBFTE9zIyMjDQplbG8uYS5ibG9jLmZpcnN0LjIyLmFfb25seSA8LSBlbG8uYS5ibG9jLmZpcnN0LjIyWyxdICU+JSBhbnRpX2pvaW4oZWxvLmIuYmxvYy5zZWMuMjIsIGJ5PSJjb21wZXRpdG9yIikNCiMjIyBFbG8gQWNjdW11bGF0ZWQgc2Vjb25kIGNvbXANCmVsby5iLmJsb2Muc2VjLjIyLmFjY3VtIDwtIGVsby5iLmJsb2Muc2VjLjIyICU+JSByYmluZChlbG8uYS5ibG9jLmZpcnN0LjIyLmFfb25seSkNCmVsby5iLmJsb2Muc2VjLjIyLmFjY3VtICA8LSANCiAgZWxvLmIuYmxvYy5zZWMuMjIuYWNjdW1bb3JkZXIoZWxvLmIuYmxvYy5zZWMuMjIuYWNjdW0kY29tcGV0aXRvciksXQ0KYGBgDQoNCmRlYnV0IGxpc3QNCmByIGJsb2MuU3ViMTRNLmMuZGVidXRgDQoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChlbG8uYi5ibG9jLnNlYy4yMi5hY2N1bSRjb21wZXRpdG9yKQ0Kbi5kZWJ1dCA9IGxlbmd0aChibG9jLlN1YjE0TS5jLmRlYnV0JGNvbXBldGl0b3IpDQojIyMNCmMgPC0gYmxvYy5TdWIxNE0uYyAlPiUgcmlnaHRfam9pbihlbG8uYi5ibG9jLnNlYy4yMi5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChjJGNvbXBldGl0b3JbIWlzLm5hKGMkYy5ibG9jLnRocmQuMjIpXSkNClIgPC0gYyRSLm5ld1shaXMubmEoYyRjLmJsb2MudGhyZC4yMildDQpuYW1lcyA8LSBjWyFpcy5uYShjJGMuYmxvYy50aHJkLjIyKSwxXQ0KVGVhbSA8LSBjJFRlYW0ueFshaXMubmEoYyRjLmJsb2MudGhyZC4yMildDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gYmxvYy5TdWIxNE0uYyRjLmJsb2MudGhyZC4yMg0Kc3RkZXYgPC0gc2QocmVzdWx0cykNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbihibG9jLlN1YjE0TSRjLmJsb2MudGhyZC4yMlshaXMubmEoYmxvYy5TdWIxNE0kYy5ibG9jLnRocmQuMjIpXSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSBjJGMuYmxvYy50aHJkLjIyWyFpcy5uYShjJGMuYmxvYy50aHJkLjIyKV0gKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQoNCmVsby5jLmJsb2MudGhyZC4yMiA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGMkYy5ibG9jLnRocmQuMjJbIWlzLm5hKGMkYy5ibG9jLnRocmQuMjIpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5jLmJsb2MudGhyZC4yMiA8LSBhc190aWJibGUoZWxvLmMuYmxvYy50aHJkLjIyKQ0KDQojIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChibG9jLlN1YjE0TS5jLmRlYnV0JGMuYmxvYy50aHJkLjIyKQ0KTiA8LSBsZW5ndGgoYmxvYy5TdWIxNE0kYy5ibG9jLnRocmQuMjJbIWlzLm5hKGJsb2MuU3ViMTRNJGMuYmxvYy50aHJkLjIyKV0pDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gYmxvYy5TdWIxNE0uYy5kZWJ1dFssMV0NClRlYW0gPC0gYmxvYy5TdWIxNE0uYy5kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNE0uYV9iDQpTIDwtICgobWVkaWFuYS0gYmxvYy5TdWIxNE0uYy5kZWJ1dCRjLmJsb2MudGhyZC4yMikgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8uYy5ibG9jLnRocmQuMjIkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8uYy5ibG9jLnRocmQuMjIkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLmMuYmxvYy50aHJkLjIyLmRlYnV0IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gYmxvYy5TdWIxNE0uYy5kZWJ1dCRjLmJsb2MudGhyZC4yMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmMuYmxvYy50aHJkLjIyLmRlYnV0IDwtIGFzX3RpYmJsZShlbG8uYy5ibG9jLnRocmQuMjIuZGVidXQpDQoNCmVsby5jLmJsb2MudGhyZC4yMiA8LSBlbG8uYy5ibG9jLnRocmQuMjIgJT4lIHJiaW5kKGVsby5jLmJsb2MudGhyZC4yMi5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmMuYmxvYy50aHJkLjIyW29yZGVyKGVsby5jLmJsb2MudGhyZC4yMiRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgICANCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyfQ0KY29tcGUgPC0gIjIwMjIuMyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmMuYmxvYy50aHJkLjIyICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8uYy5ibG9jLnRocmQuMjIkY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0TSIsIGxlbmd0aChlbG8uYy5ibG9jLnRocmQuMjIkY29tcGV0aXRvcikpKQ0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCmVsby5oaXN0b3J5LnRfc2VyaWVzIDwtIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKQ0KYGBgICANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIDIwMjIqKg0KYGBge3IgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD03fQ0KZWxvLmIuYmxvYy5zZWMuMjIuYWNjdW0uY19hYnNlbnQgPC0gZWxvLmIuYmxvYy5zZWMuMjIuYWNjdW0gJT4lIGFudGlfam9pbihlbG8uYy5ibG9jLnRocmQuMjIsIGJ5PSJjb21wZXRpdG9yIikNCiMjDQplbG8uYy5ibG9jLnRocmQuMjIuYWNjdW0gPC0gZWxvLmMuYmxvYy50aHJkLjIyICU+JSByYmluZChlbG8uYi5ibG9jLnNlYy4yMi5hY2N1bS5jX2Fic2VudCkNCmVsby5jLmJsb2MudGhyZC4yMi5hY2N1bSA8LSBlbG8uYy5ibG9jLnRocmQuMjIuYWNjdW1bb3JkZXIoZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8uYy5ibG9jLnRocmQuMjIuYWNjdW1bb3JkZXIoZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYA0KDQoNCiMjIyMgKiAqKkNhcHR1cmFuZG8gbG9zIGZ1dHVyb3MgU3ViMTYqKiANCmBgYHtyIGVjaG89VFJVRSwgaW5jbHVkZT1GQUxTRX0NCmJsb2MuU3ViMTZNLjIzIDwtIHJhbmtzICU+JQ0KICBmaWx0ZXIoc3RhZ2U9PSJDbGFzaWZpYyIsDQogICAgICAgICBDYXRlZ29yeT09IlN1YjE2X00iLA0KICAgICAgICAgeWVhcj09IjIwMjMiDQogICAgIyAgICAgTmFtZT09IG5vbWJyZQ0KICAgICAgICAgKSAlPiUNCiAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAgICAgICAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IENvbXBlXywNCiAgICAgICAgICAgVGVhbSA9IFRlYW0sDQogICAgICAgICAgIERhdGU9IERhdGUpICU+JQ0KICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBUZWFtIH4gQ29tcGUsIA0KICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKQ0KDQpibG9jLlN1YjE2TS4yMyA8LSBhc190aWJibGUoYmxvYy5TdWIxNk0uMjMpDQpgYGANCg0KDQojIyMjICogKl9Mb3Mgc3ViMTYgInNhbGVuIl8qDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0UsIGVjaG89VFJVRSwgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD03fQ0KIyMgZW52aWFuZG8gbG9zIHN1YjE2IGEgb3RybyBhcmNoaXZvDQplbG8uMjIuYWNjdW0udG9fc3ViMTYgPC0gZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtICU+JSBzZW1pX2pvaW4oYmxvYy5TdWIxNk0uMjMsYnk9ImNvbXBldGl0b3IiKQ0KDQojIyBzdWIxNiBzYWxpZW5kbw0KZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtIDwtIGVsby5jLmJsb2MudGhyZC4yMi5hY2N1bSAlPiUgYW50aV9qb2luKGJsb2MuU3ViMTZNLjIzLGJ5PSJjb21wZXRpdG9yIikgDQpgYGAgIA0KDQoNCiMjIyAqKjIwMjMqKiANCg0KIyMjIDIwMjMgRmlyc3QNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmJsb2MuU3ViMTRNW29yZGVyKGJsb2MuU3ViMTRNJGQuYmxvYy5maXJzdC4yMyksIGMoMSwyLDYpXSAlPiUgcHJpbnQobj02MCkNCmBgYCAgDQoNCiMjIyBFbG8gRmlyc3QgMjAyMyANCiotQ29tcGV0aXRvcnMgPSBgciBjb21wZXRpdG9ycy5kYC0qDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpibG9jLlN1YjE0TS5kIDwtIGJsb2MuU3ViMTRNWyxjKDEsMiw2KV0gJT4lIGZpbHRlcihibG9jLlN1YjE0TSRkLmJsb2MuZmlyc3QuMjMhPSJOQSIpIA0KIw0KYmxvYy5TdWIxNE0uZC5kZWJ1dCA8LSBibG9jLlN1YjE0TS5kICU+JSBhbnRpX2pvaW4oZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgoYmxvYy5TdWIxNE0uZC5kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQpkIDwtIGJsb2MuU3ViMTRNLmQgJT4lIHJpZ2h0X2pvaW4oZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGQkY29tcGV0aXRvclshaXMubmEoZCRkLmJsb2MuZmlyc3QuMjMpXSkNClIgPC0gZCRSLm5ld1shaXMubmEoZCRkLmJsb2MuZmlyc3QuMjMpXQ0KbmFtZXMgPC0gZFshaXMubmEoZCRkLmJsb2MuZmlyc3QuMjMpLDFdDQpUZWFtIDwtIGQkVGVhbS54WyFpcy5uYShkJGQuYmxvYy5maXJzdC4yMyldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gYmxvYy5TdWIxNE0uZCRkLmJsb2MuZmlyc3QuMjMNCnN0ZGV2IDwtIHNkKHJlc3VsdHMpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4oYmxvYy5TdWIxNE0kZC5ibG9jLmZpcnN0LjIzWyFpcy5uYShibG9jLlN1YjE0TSRkLmJsb2MuZmlyc3QuMjMpXSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSBkJGQuYmxvYy5maXJzdC4yM1shaXMubmEoZCRkLmJsb2MuZmlyc3QuMjMpXSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCg0KZWxvLmQuYmxvYy5maXJzdC4yMyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGQkZC5ibG9jLmZpcnN0LjIzWyFpcy5uYShkJGQuYmxvYy5maXJzdC4yMyldLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmQuYmxvYy5maXJzdC4yMyA8LSBhc190aWJibGUoZWxvLmQuYmxvYy5maXJzdC4yMykNCg0KIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgoYmxvYy5TdWIxNE0uZC5kZWJ1dCRkLmJsb2MuZmlyc3QuMjMpDQpOIDwtIGxlbmd0aChibG9jLlN1YjE0TSRkLmJsb2MuZmlyc3QuMjNbIWlzLm5hKGJsb2MuU3ViMTRNJGQuYmxvYy5maXJzdC4yMyldKQ0KUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCm5hbWVzIDwtIGJsb2MuU3ViMTRNLmQuZGVidXRbLDFdDQpUZWFtIDwtIGJsb2MuU3ViMTRNLmQuZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGJsb2MuU3ViMTRNLmFfYg0KUyA8LSAoKG1lZGlhbmEtIGJsb2MuU3ViMTRNLmQuZGVidXQkZC5ibG9jLmZpcnN0LjIzKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5kLmJsb2MuZmlyc3QuMjMkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8uZC5ibG9jLmZpcnN0LjIzJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5kLmJsb2MuZmlyc3QuMjMuZGVidXQgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBibG9jLlN1YjE0TS5kLmRlYnV0JGQuYmxvYy5maXJzdC4yMywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmQuYmxvYy5maXJzdC4yMy5kZWJ1dCA8LSBhc190aWJibGUoZWxvLmQuYmxvYy5maXJzdC4yMy5kZWJ1dCkNCg0KZWxvLmQuYmxvYy5maXJzdC4yMyA8LSBlbG8uZC5ibG9jLmZpcnN0LjIzICU+JSByYmluZChlbG8uZC5ibG9jLmZpcnN0LjIzLmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8uZC5ibG9jLmZpcnN0LjIzW29yZGVyKGVsby5kLmJsb2MuZmlyc3QuMjMkcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYCAgDQoNCg0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KYGBge3IgZXZhbD1UUlVFfQ0KIw0KIyBTYWNhbmRvIHN1YjE2DQpjb21wZSA8LSAiMjAyMy4xIg0KI2Vsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLjIyLmFjY3VtLnRvX3N1YjE2ICU+JSANCiMgIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLjIyLmFjY3VtLnRvX3N1YjE2JGNvbXBldGl0b3IpKSwNCiAjICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMTZNIiwgbGVuZ3RoKGVsby4yMi5hY2N1bS50b19zdWIxNiRjb21wZXRpdG9yKSkpDQojDQojZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQojIyANCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmQuYmxvYy5maXJzdC4yMyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmQuYmxvYy5maXJzdC4yMyRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMTRNIiwgbGVuZ3RoKGVsby5kLmJsb2MuZmlyc3QuMjMkY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KIyB0aW1lLXNlcmllcyBkYXRhLmZyYW1lDQojIyBzdWIxNE0NCmVsby5oaXN0b3J5LnRfc2VyaWVzLlMxNE0gPC0gDQogIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUNCiAgICAgICAgICAgICAgZmlsdGVyKGNhdGVnPT0iU3ViMTRNIikgJT4lDQogICAgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQojIyANCiMjIHN1YjE2TQ0KI2Vsby5oaXN0b3J5LnRfc2VyaWVzLlMxNk0gPC0gDQogIyBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICMgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxNk0iKSAlPiUNCiAgICMgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQoNCmBgYCAgDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBGaXJzdF8yMDIzKioNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMjDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8uYy5ibG9jLnRocmQuMjIuYWNjdW0NCmVsby5sYXN0LmNvbXAgPC0gZWxvLmQuYmxvYy5maXJzdC4yMw0KIyMjDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcCxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KDQojIyMgMjAyMyBTZWNvbmQgIA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KYmxvYy5TdWIxNE1bb3JkZXIoYmxvYy5TdWIxNE0kZS5ibG9jLnNlYy4yMyksIGMoMSwyLDYsNyldICU+JSBwcmludChuPTY1KQ0KYGBgICANCg0KIyMjIyNfRWxvIFNlY29uZCAyMDIzXyANCiotQ29tcGV0aXRvcnMgPSBgciBjb21wZXRpdG9ycy5lYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPUZBTFNFfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMTRNWyxjKDEsMiw3KV0gJT4lIGZpbHRlcihibG9jLlN1YjE0TSRlLmJsb2Muc2VjLjIzIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKHJlc3VsdHMpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGJsb2MuU3ViMTRNLmFfYg0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyMy4yIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0TSIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIHN1YjE0TQ0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE0TSA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxNE0iKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGAgIA0KDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBTZWNvbmRfMjAyMyoqDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PTd9DQoNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYCAgDQoNCiMjIyAyMDIzIFRoaXJkDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9RkFMU0V9DQpibG9jLlN1YjE0TVtvcmRlcihibG9jLlN1YjE0TSRmLmJsb2MudGhyZC4yMyksYygxLDIsNiw3LDgpXSAlPiUgZmlsdGVyKGYuYmxvYy50aHJkLjIzIT0iTkEiICkNCmBgYA0KDQojIyMgRWxvIFRoaXJkIDIwMjMgDQoqLUNvbXBldGl0b3JzID0gYHIgY29tcGV0aXRvcnMuZmAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1GQUxTRX0NCmxhc3QuY29tcCA8LSBibG9jLlN1YjE0TVssYygxLDIsOCldICU+JSBmaWx0ZXIoYmxvYy5TdWIxNE0kZi5ibG9jLnRocmQuMjMhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGAgIA0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QocmVzdWx0cykNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNE0uYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYCAgDQoNCiMjIyMjXyBFbG8gSGlzdG9yeSBfDQpgYGB7cn0NCiMjIA0KY29tcGU9ICIyMDIzLjMiDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMTRNIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgc3ViMTRNDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMTRNIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IlN1YjE0TSIpICU+JQ0KICAgICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KIyMgDQoNCmBgYCAgDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBUaGlyZF8yMDIzKioNCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCmBgYA0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KIyMjIDIwMjMgQ2hhbXANCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCmJsb2MuU3ViMTRNW29yZGVyKGJsb2MuU3ViMTRNJGcuYmxvYy5jYW1wLjIzKSxjKDEsMiw2LDcsOCw5KV0gJT4lIGZpbHRlcihnLmJsb2MuY2FtcC4yMyE9Ik5BIiApDQpgYGANCg0KIyMjIEVsbyBDYW1wIDIwMjMgDQoqLUNvbXBldGl0b3JzID0gYHIgY29tcGV0aXRvcnMuZmAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1GQUxTRX0NCmxhc3QuY29tcCA8LSBibG9jLlN1YjE0TVssYygxLDIsOSldICU+JSBmaWx0ZXIoYmxvYy5TdWIxNE0kZy5ibG9jLmNhbXAuMjMhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGAgIA0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QocmVzdWx0cykNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNE0uYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYCAgDQoNCiMjIyMjXyBFbG8gSGlzdG9yeSBfDQpgYGB7cn0NCiMjIA0KY29tcGU9ICIyMDIzLmNoYW1wIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0TSIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIHN1YjE0TQ0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE0TSA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxNE0iKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGAgIA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgQ2hhbXBfMjAyMyoqDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PTd9DQoNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYCAgDQoNCg0KIyMjIyAqICoqQ2FwdHVyYW5kbyBsb3MgZnV0dXJvcyBTdWIxNioqIA0KYGBge3IgZWNobz1UUlVFLCBpbmNsdWRlPUZBTFNFfQ0KYmxvYy5TdWIxNk0uMjQgPC0gcmFua3MgJT4lDQogIGZpbHRlcihzdGFnZT09IkNsYXNpZmljIiwNCiAgICAgICAgIENhdGVnb3J5PT0iU3ViMTZfTSIsDQogICAgICAgICB5ZWFyPT0iMjAyNCINCiAgICAjICAgICBOYW1lPT0gbm9tYnJlDQogICAgICAgICApICU+JQ0KICBncm91cF9ieShjb21wZXRpdG9yPSBOYW1lLA0KICAgICAgICAgICBZZWFyPSB5ZWFyLA0KICAgICAgICAgICBDb21wZT0gQ29tcGVfLA0KICAgICAgICAgICBUZWFtID0gVGVhbSwNCiAgICAgICAgICAgRGF0ZT0gRGF0ZSkgJT4lDQogIHJlZnJhbWUocmFuaz0gUmFuaykgJT4lDQogIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvciArIFRlYW0gfiBDb21wZSwgDQogICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpDQoNCmJsb2MuU3ViMTZNLjI0IDwtIGFzX3RpYmJsZShibG9jLlN1YjE2TS4yNCkNCmBgYA0KDQoNCiMjIyMgKiAqX0xvcyBzdWIxNiAic2FsZW4iXyoNCmBgYHtyIGVjaG89VFJVRSwgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD03fQ0KIyMgZW52aWFuZG8gbG9zIHN1YjE2IGEgb3RybyBhcmNoaXZvDQplbG8uMjMuYWNjdW0udG9fc3ViMTYgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIHNlbWlfam9pbihibG9jLlN1YjE2TS4yNCxieT0iY29tcGV0aXRvciIpDQoNCiMjIHN1YjE2IHNhbGllbmRvDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGJsb2MuU3ViMTZNLjI0LGJ5PSJjb21wZXRpdG9yIikgDQpgYGAgIA0KDQoNCiMjIyAqKjIwMjQqKiANCg0KIyMjIDIwMjQgRmlyc3QgIA0KYGBge3IgaW5jbHVkZT1GQUxTRSwgcm93cy5wcmludD0gOH0NCmJsb2MuU3ViMTRNIDwtIHJhbmtzICU+JQ0KICBmaWx0ZXIoc3RhZ2U9PSJDbGFzaWZpYyIsDQogICAgICAgICBDYXRlZ29yeT09IlN1YjE0X00iLA0KICAgICAgICB5ZWFyPT0iMjAyMyJ8eWVhcj09IjIwMjQiDQogICAgIyAgICAgTmFtZT09IG5vbWJyZQ0KICAgICAgICAgKSAlPiUNCiAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAgICAgICAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IENvbXBlXywNCiAgICAgICAgICAgVGVhbSA9IFRlYW0sDQogICAgICAgICAgIERhdGU9IERhdGUpICU+JQ0KICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBUZWFtIH4gQ29tcGUsIA0KICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKQ0KDQpibG9jLlN1YjE0TSA8LSBhc190aWJibGUoYmxvYy5TdWIxNE0pDQojIw0KYmxvYy5TdWIxNE1bb3JkZXIoYmxvYy5TdWIxNE0kaC5ibG9jLmZpcnN0LjI0KSxjKDEsMiw3KV0gDQojDQpjb21wZXRpdG9ycy5oIDwtIG5yb3coYmxvYy5TdWIxNE1bIWlzLm5hKGJsb2MuU3ViMTRNJGguYmxvYy5maXJzdC4yNCksXSkNCmNvbXBldGl0b3JzLmkgPC0gbnJvdyhibG9jLlN1YjE0TVshaXMubmEoYmxvYy5TdWIxNE0kaS5ibG9jLnNlYy4yNCksXSkNCmNvbXBldGl0b3JzLmogPC0gbnJvdyhibG9jLlN1YjE0TVshaXMubmEoYmxvYy5TdWIxNE0kai5ibG9jLnRocmQuMjQpLF0pDQpgYGAgIA0KDQojIyMgRWxvIEZpcnN0IDIwMjQgDQoqLUNvbXBldGl0b3JzID0gYHIgY29tcGV0aXRvcnMuaGAtKg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMTRNWyxjKDEsMiw3KV0gJT4lIGZpbHRlcihibG9jLlN1YjE0TSRoLmJsb2MuZmlyc3QuMjQhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGAgIA0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsIGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKHJlc3VsdHMpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGJsb2MuU3ViMTRNLmFfYg0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyNC4xIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0TSIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIHN1YjE0TQ0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE0TSA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxNE0iKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGAgIA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgRmlyc3RfMjAyNCoqDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PTd9DQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGAgIA0KDQojIyMgMjAyNCBTZWNvbmQNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmJsb2MuU3ViMTRNW29yZGVyKGJsb2MuU3ViMTRNJGkuYmxvYy5zZWMuMjQpLCBjKDEsMiw3LDgpXSAlPiUgcHJpbnQobj0xMjApDQpgYGAgIA0KDQojIyMgRWxvIFNlY29uZCAyMDI0IA0KKi1Db21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmlgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9RkFMU0V9DQpsYXN0LmNvbXAgPC0gYmxvYy5TdWIxNE1bLGMoMSwyLDgpXSAlPiUgZmlsdGVyKGJsb2MuU3ViMTRNJGkuYmxvYy5zZWMuMjQhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsYXN0LmNvbXAgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksMV0NClRlYW0gPC0gbGFzdC5jb21wLmNhbGMkVGVhbS54WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdDQpyZXN1bHRzIDwtICh1bmxpc3QocmVzdWx0cykpDQpzdGRldiA8LSBzZChyZXN1bHRzKQ0KIw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCApKSkNCm1lZGlhbmEgPC0gbWVkaWFuKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSB1bmxpc3QobGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10pICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmxhc3QuY29tcC5uZXcgPC0gYXNfdGliYmxlKGVsby5sYXN0LmNvbXAubmV3KQ0KIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCm5hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dFssMV0NClRlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCiNjYXRlZyA8LSBibG9jLlN1YjE0TS5hX2INClMgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5jb21wLm5ld1tvcmRlcihlbG8ubGFzdC5jb21wLm5ldyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgICANCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyfQ0KIyMgDQpjb21wZT0gIjIwMjQuMiINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJTdWIxNE0iLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KIyB0aW1lLXNlcmllcyBkYXRhLmZyYW1lDQojIyBzdWIxNE0NCmVsby5oaXN0b3J5LnRfc2VyaWVzLlMxNE0gPC0gDQogIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUNCiAgICAgICAgICAgICAgZmlsdGVyKGNhdGVnPT0iU3ViMTRNIikgJT4lDQogICAgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQojIyANCg0KYGBgICANCg0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgU2Vjb25kXzIwMjQqKg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCmVsby5sYXN0LmFjY3VtDQplbG8ubGFzdC5jb21wLm5ldw0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGAgIA0KDQoNCiMjIyAyMDI0IFRoaXJkDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9RkFMU0V9DQpibG9jLlN1YjE0TVtvcmRlcihibG9jLlN1YjE0TSRqLmJsb2MudGhyZC4yNCksYygxLDIsNyw4LDkpXSAlPiUgZmlsdGVyKGouYmxvYy50aHJkLjI0IT0iTkEiICkNCmBgYA0KDQojIyMgRWxvIFRoaXJkIDIwMjQgDQoqLUNvbXBldGl0b3JzID0gYHIgY29tcGV0aXRvcnMuamAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1GQUxTRX0NCmxhc3QuY29tcCA8LSBibG9jLlN1YjE0TVssYygxLDIsOSldICU+JSBmaWx0ZXIoYmxvYy5TdWIxNE0kai5ibG9jLnRocmQuMjQhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGAgIA0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QocmVzdWx0cykNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNE0uYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYCAgDQoNCiMjIyMjXyBFbG8gSGlzdG9yeSBfDQpgYGB7cn0NCiMjIA0KY29tcGU9ICIyMDI0LjMiDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMTRNIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgc3ViMTRNDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMTRNIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IlN1YjE0TSIpICU+JQ0KICAgICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KIyMgDQoNCmBgYCAgDQoNCiMjIyBFbG8gaW4gdGltZQ0KYGBge3IgaW5jbHVkZT1UUlVFLCBmaWcuaGVpZ2h0PTEyLCBmaWcud2lkdGg9IDE2fQ0KI2lkID0gIiINCiNzaG9ydG5hbWUgPSAiIg0KIw0KI2NvbHM9IGMoIkZFRUMvRkVNRUNWIiA9ICJkYXJrb3JhbmdlMyIsDQogIyAgICAgICAiY2N0MjEiPSAieWVsbG93MyIsDQogICMgICAgICAiRkVNRUNWIiA9ICJyZWQ0IiwNCiAgICMgICAgICJPdGhlciBjbGltbmJlcnMiID0gImdyYXkiDQogICAgIyAgICApDQojDQpjY3QgPSBjKCJjY3QyMSIgPSAiYmxhY2siLA0KICAgICAgICAiRkVFQyIgPSAiZGFya29yYW5nZTMiLA0KICAgICAgICAiRkVNRUNWIiA9ICJyZWQ0IiwNCiAgICAgICAgIk90aGVyIGNsaW1iZXJzIj0gImRhcmtncmF5IikNCiMjDQpwIDwtIGVsby5oaXN0b3J5ICU+JQ0KICBtdXRhdGUoZm9jdXMgPSBjYXNlX3doZW4oDQogICAgY29tcGV0aXRvciA9PSAiS2VhbnUgSXNyYWVsIFZJTExBVE9STyBLVVBFUk1BTiIgfiAiY2N0MjEiLGNvbXBldGl0b3IgPT0gICJKYW4gTU9MSVNUIERPTUlOR08iIH4gImNjdDIxIiwNCiAgICBjb21wZXRpdG9yID09ICAiUm9jIFZFUkfDiVMgU09Mw4kiIH4gImNjdDIxIiwNCiAgICBjb21wZXRpdG9yID09ICAiTWFydMOtIEZBUlLDmlMgU09SSUFOTyIgfiAiY2N0MjEiLA0KICAgIGNvbXBldGl0b3IgPT0gICJUb20gRkVMREVOS1JJWiIgfiAiY2N0MjEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGV0aXRvciA9PSAgIlNlcmdpbyBNSVJBTkRBIENJRCIgfiAiY2N0MjEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGV0aXRvciA9PSAgIkJpZWwgU0VSUkEgTExPUCIgfiAiY2N0MjEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGV0aXRvciA9PSAgIlJvbWFuIEtPU0lOVFNFViIgfiAiY2N0MjEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGV0aXRvciA9PSAiTWlxdWVsIMOAbmdlbCBKQVVTRVQgU0FCQVRFUiIgfiAiY2N0MjEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGV0aXRvciA9PSAiRXJpYyBHT05aQUxFWiBJTkdMw4lTIiB+ICJjY3QyMSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wZXRpdG9yID09ICJCZWwgVE9SUkVOVFMgUEFMT01BUkVTIiB+ICJjY3QyMSIsDQogICAgICAgICAgICAgICAgICAgICBjb21wZXRpdG9yID09ICJKb2FuIEFMRUpBTkRSTyBJTExBIiB+ICJjY3QyMSIsDQogICAgICAgICAgICAgICAgICAgICBjb21wZXRpdG9yID09ICJFcmljIEdJTUVORVogU0VSUkFOTyIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICJCZXJuYXQgTVVOTkUgR1VJVEFSVCIgfiAiY2N0MjEiLA0KICAgIGNvbXBldGl0b3IgPT0gIk5pY29sYXUgVEFVTEFUUyBNQ0RPTkFMRCIgfiAiY2N0MjEiLA0KICAgICAgICAgICAgICAgICAgICAgVGVhbT09ICJGRUVDIiB+ICJGRUVDIiwNCiAgICAgICAgICAgICAgICAgICAgIFRlYW09PSAiRkVNRUNWIiB+ICJGRU1FQ1YiLA0KICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJPdGhlciBjbGltYmVycyIpKSAlPiUNCiAgZmlsdGVyKGNhdGVnPT0iU3ViMTRNIiwgUi5uZXc+PTApICU+JQ0KICBnZ3Bsb3QoYWVzKHg9IGNvbXAsIHk9IFIubmV3LCBncm91cCA9IGNvbXBldGl0b3IsIGNvbCA9IGZvY3VzKSkgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fbGluZShsaW5ldHlwZT0gImRhc2hlZCIpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdD0xMDAwLGxpbmV0eXBlPSAiZGFzaGVkIikgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwobmFtZSA9ICJDbGltYmVyIiwNCiAgICAgICAgICAgICAgICAgICAgIGFlc3RoZXRpY3MgPSAiY29sb3IiLA0KICAgICAgICAgICAgICAgICAgICAgLA0KICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY2N0DQogICAgICAgICAgICAgICAgICAgICApDQoNCiNwDQpnZ3Bsb3RseShwKQ0KYGBgICANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIFRoaXJkXzIwMjQqKg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCmVsby5sYXN0LmFjY3VtDQplbG8ubGFzdC5jb21wLm5ldw0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PTd9DQoNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYCAgDQoNCiMjIyAjIyB1cGNvbWluZyBTRUFTT04gIyMjIyMNCg0KIyMjKiAqKkNhcHR1cmFuZG8gbG9zIGZ1dHVyb3MgU3ViMTYqKiANCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpibG9jLlN1YjE2TS4yNSA8LSByYW5rcyAlPiUNCiAgZmlsdGVyKHN0YWdlPT0iQ2xhc2lmaWMiLA0KICAgICAgICAgQ2F0ZWdvcnk9PSJTdWIxNl9NIiwNCiAgICAgICAgIHllYXI9PSIyMDI1Ig0KICAgICMgICAgIE5hbWU9PSBub21icmUNCiAgICAgICAgICkgJT4lDQogIGdyb3VwX2J5KGNvbXBldGl0b3I9IE5hbWUsDQogICAgICAgICAgIFllYXI9IHllYXIsDQogICAgICAgICAgIENvbXBlPSBDb21wZV8sDQogICAgICAgICAgIFRlYW0gPSBUZWFtLA0KICAgICAgICAgICBEYXRlPSBEYXRlKSAlPiUNCiAgcmVmcmFtZShyYW5rPSBSYW5rKSAlPiUNCiAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yICsgVGVhbSB+IENvbXBlLCANCiAgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkNCg0KYmxvYy5TdWIxNk0uMjUgPC0gYXNfdGliYmxlKGJsb2MuU3ViMTZNLjI1KQ0KYGBgDQoNCg0KIyMjKiAqX0xvcyBzdWIxNiAic2FsZW4iXyoNCmBgYHtyIGV2YWw9IEZBTFNFLCBpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PTd9DQojIyBlbnZpYW5kbyBsb3Mgc3ViMTYgYSBvdHJvIGFyY2hpdm8NCmVsby4yNC5hY2N1bS50b19zdWIxNiA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgc2VtaV9qb2luKGJsb2MuU3ViMTZNLjI1LGJ5PSJjb21wZXRpdG9yIikNCg0KIyMgc3ViMTYgc2FsaWVuZG8NCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oYmxvYy5TdWIxNk0uMjUsYnk9ImNvbXBldGl0b3IiKSANCmBgYCANCg==