Copa España 2022 - 1a Prueba Bloque
Abs_M
[1] " Copa España 2022 - 1a Prueba Bloque - Madrid "
[1] 40
Abs_F
[1] " Copa España 2022 - 1a Prueba Bloque - Madrid "
[1] 16
Sub18_M
[1] " Copa España 2022 - 1a Prueba Bloque - Madrid "
[1] 29
Sub18_F
[1] " Copa España 2022 - 1a Prueba Bloque - Madrid "
[1] 20
Sub16_M
[1] " Copa España 2022 - 1a Prueba Bloque - Madrid "
[1] 42
Sub16_F
[1] " Copa España 2022 - 1a Prueba Bloque - Madrid "
[1] 26
Sub14_M
[1] " Copa España 2022 - 1a Prueba Bloque - Madrid "
[1] 24
Sub14_F
[1] " Copa España 2022 - 1a Prueba Bloque - Madrid "
[1] 32
Copa España 2022 - 2a Prueba Bloque
Abs_M
[1] " Copa España 2022 - 2a Prueba Bloque - 1a Prueba Velocidad - Oviedo "
[1] 34
Abs_F
[1] " Copa España 2022 - 2a Prueba Bloque - 1a Prueba Velocidad - Oviedo "
[1] 20
Sub18_M
[1] " Copa España 2022 - 2a Prueba Bloque - 1a Prueba Velocidad - Oviedo "
[1] 30
Sub18_F
[1] " Copa España 2022 - 2a Prueba Bloque - 1a Prueba Velocidad - Oviedo "
[1] 16
Sub16_M
[1] " Copa España 2022 - 2a Prueba Bloque - 1a Prueba Velocidad - Oviedo "
[1] 34
Sub16_F
[1] " Copa España 2022 - 2a Prueba Bloque - 1a Prueba Velocidad - Oviedo "
[1] 30
Sub14_M
[1] " Copa España 2022 - 2a Prueba Bloque - 1a Prueba Velocidad - Oviedo "
[1] 24
Sub14_F
[1] " Copa España 2022 - 2a Prueba Bloque - 1a Prueba Velocidad - Oviedo "
[1] 33
Copa España 2022 - 3a Prueba Bloque
Abs_M
[1] " Copa España 2022 - 3a Prueba Bloque - 2a Prueba Velocidad - Cáceres "
[1] 36
Abs_F
[1] " Copa España 2022 - 3a Prueba Bloque - 2a Prueba Velocidad - Cáceres "
[1] 19
Sub18_M
[1] " Copa España 2022 - 3a Prueba Bloque - 2a Prueba Velocidad - Cáceres "
[1] 28
Sub18_F
[1] " Copa España 2022 - 3a Prueba Bloque - 2a Prueba Velocidad - Cáceres "
[1] 19
Sub16_M
[1] " Copa España 2022 - 3a Prueba Bloque - 2a Prueba Velocidad - Cáceres "
[1] 35
Sub16_F
[1] " Copa España 2022 - 3a Prueba Bloque - 2a Prueba Velocidad - Cáceres "
[1] 25
Sub14_M
[1] " Copa España 2022 - 3a Prueba Bloque - 2a Prueba Velocidad - Cáceres "
[1] 28
Sub14_F
[1] " Copa España 2022 - 3a Prueba Bloque - 2a Prueba Velocidad - Cáceres "
[1] 36
LS0tDQp0aXRsZTogImZlZG1lLmZlZWMucmVzdWx0c19Ob3RlQl8yMl9ibG9jIg0KYXV0aG9yOiAiRmVkZXJpY28gSi4gVmlsbGF0b3JvIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDMNCiAgICB0b2NfZmxvYXQ6IHRydWUNCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCi0tLQ0KDQojIyMjIyBGdWVudGU6IFtodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mb10oaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vKQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoZmxleGRhc2hib2FyZCkNCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgZWNobyA9IEZBTFNFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCiAgd2FybmluZyA9IEZBTFNFLA0KCWluY2x1ZGUgPSBGQUxTRQ0KKQ0KYGBgICANCg0KYGBge3IgcGFja2FnZXMsIG1lc3NhZ2U9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQppZighcmVxdWlyZSh0aWR5dmVyc2UpKXtpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKX0NCmlmKCFyZXF1aXJlKGdvb2dsZXNoZWV0czQpKXtpbnN0YWxsLnBhY2thZ2VzKCJnb29nbGVzaGVldHM0Iil9DQppZighcmVxdWlyZShnb29nbGVkcml2ZSkpe2luc3RhbGwucGFja2FnZXMoImdvb2dsZWRyaXZlIil9DQppZighcmVxdWlyZShkcGx5cikpe2luc3RhbGwucGFja2FnZXMoImRwbHlyIil9DQppZighcmVxdWlyZShodHRyMikpe2luc3RhbGwucGFja2FnZXMoImh0dHIyIil9DQppZighcmVxdWlyZShqc29ubGl0ZSkpe2luc3RhbGwucGFja2FnZXMoImpzb25saXRlIil9DQppZighcmVxdWlyZShSc2VsZW5pdW0pKXtpbnN0YWxsLnBhY2thZ2VzKCJSc2VsZW5pdW0iKX0NCmlmKCFyZXF1aXJlKGNocm9tb3RlKSl7aW5zdGFsbC5wYWNrYWdlcygiY2hyb21vdGUiKX0NCmlmKCFyZXF1aXJlKHB1cnJyKSl7aW5zdGFsbC5wYWNrYWdlcygicHVycnIiKX0NCmlmKCFyZXF1aXJlKHdkbWFuKSl7aW5zdGFsbC5wYWNrYWdlcygid2RtYW4iKX0NCmlmKCFyZXF1aXJlKHBkZnRvb2xzKSl7aW5zdGFsbC5wYWNrYWdlcygicGRmdG9vbHMiKX0NCiMjDQpsaWJyYXJ5KHBkZnRvb2xzKQ0KbGlicmFyeShjaHJvbW90ZSkNCmxpYnJhcnkocHVycnIpDQpsaWJyYXJ5KHdkbWFuKQ0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocnZlc3QpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShqc29ubGl0ZSkNCmxpYnJhcnkoUlNlbGVuaXVtKQ0KDQpsaWJyYXJ5KGdvb2dsZXNoZWV0czQpDQpsaWJyYXJ5KGdvb2dsZWRyaXZlKQ0KDQpgYGAgIA0KDQojIyBDb3BhIEVzcGHDsWEgMjAyMiAtIDFhIFBydWViYSBCbG9xdWUNCg0KIyMjIEFic19NICANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCnVybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvNC9nZW5lcmFsL2JvdWxkZXIiDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCmIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQojIE5hdmlnYXRlIHRvIHRoZSB3ZWJwYWdlDQpiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDEpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKQ0KIyMjIA0KYGBgICANCg0KDQoNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KY29tcGUgPC0gcGFnZSAlPiUNCiAgaHRtbF9lbGVtZW50cygnZGl2LmdyLWV2ZW50LW5hbWUnKSAlPiUNCiAgaHRtbF90ZXh0KCkNCiMjIw0KY29tcGV0aXRvcl9kaXZzIDwtIHBhZ2UgJT4lIA0KICBodG1sX2VsZW1lbnRzKCJkaXYuYXRobGV0ZS1iYXNpYy1saW5lIikgDQojIyMNCg0KIyBFeHRyYWN0IGFuZCBjbGVhbiBkYXRhDQpzY3JhcCA8LSBjb21wZXRpdG9yX2RpdnMgJT4lDQogIG1hcF9kZih+ew0KICAgIHJhbmsgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnJhbmsiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIG5hbWUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnItbmFtZSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgc2NvcmUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIikgJT4lIGh0bWxfdGV4dCh0cmltID0gRkFMU0UpICMgc2NvcmUNCiAgICAjc2NvcmUuY2xhc2lmIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSBxdWFsaSBjZWxsIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBzY29yZQ0KICAgIHRlYW0gPC0gLnggJT4lIGh0bWxfZWxlbWVudCgic3BhbjpudGgtY2hpbGQoMikiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIFRlYW0NCiAgICANCiAgICAjIFJldHVybiBhcyBhIHRpYmJsZQ0KICAgIHRpYmJsZShOYW1lID0gbmFtZSwgDQogICAgICAgICAgIFJhbmsgPSByYW5rLCANCiAgICAgICAgICAgU2NvcmUgPSBzY29yZSwgDQogICAgICAgICAgICNDbGFzaWZpYyA9IHNjb3JlLmNsYXNpZiwNCiAgICAgICAgICAgVGVhbSA9IHRlYW0pDQogIH0pDQojIyMNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgc2VwYXJhdGUoU2NvcmUsIGludG8gPSBjKE5BLCAic2NvcmUiLCAiVHMiLCAiWnMiLCJTY29yZS5yYW5rIiwgTkEpLCBzZXAgPSAiICIpDQojc2NyYXAgPC0gc2NyYXAgJT4lIA0KICMgc2VwYXJhdGUoc2NvcmUucmFuaywgaW50byA9IGMoTkEsTkEsInNjb3JlLnJhbmsiKSwgc2VwID0gIigpIikNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgbXV0YXRlKFJhbmsgPSBhcy5udW1lcmljKFJhbmspLCBUcyA9IGFzLm51bWVyaWMoVHMpLCBacyA9IGFzLm51bWVyaWMoWnMpKSAgDQoNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiQWJzX00iLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNCkFic19NIDwtIHNjcmFwDQpgYGAgIA0KDQojIyMgQWJzX0YNCmBgYHtyfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgc2NyYXBpbmcgYWN0aXZlIHBhZ2UgdXNpbmcgY2hyb21vdGUgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgQWJzRiBET25lDQojIEFic00NCg0KIyMgVVJMIG9mIHRoZSB3ZWJwYWdlIHRvIHNjcmFwZQ0KDQojIHVybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvMzAvZ2VuZXJhbC9sZWFkIg0KDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCiMgYiA8LSBDaHJvbW90ZVNlc3Npb24kbmV3KCkNCg0KIyBOYXZpZ2F0ZSB0byB0aGUgd2VicGFnZQ0KIyBiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KDQojIEV4dHJhY3QgdGhlIHJlbmRlcmVkIEhUTUwNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCdkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubXgtMjpudGgtY2hpbGQoMikiKS5jbGljaygpOycpICAjIFJlcGxhY2Ugd2l0aCB5b3VyIENTUyBzZWxlY3Rvcg0KU3lzLnNsZWVwKDYpIA0KDQojIyMgV0FJVCBmb3IgImJhY2tzdGFnZSIgcGFnZSBsb2FkaW5nICMjIyMNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MIikkcmVzdWx0JHZhbHVlDQojIyANCnBhZ2UgPC0gcmVhZF9odG1sKGh0bWwpICANCmBgYCAgDQoNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMjIA0KY29tcGUgPC0gcGFnZSAlPiUNCiAgaHRtbF9lbGVtZW50cygnZGl2LmdyLWV2ZW50LW5hbWUnKSAlPiUNCiAgaHRtbF90ZXh0KCkNCiMjIw0KY29tcGV0aXRvcl9kaXZzIDwtIHBhZ2UgJT4lIA0KICBodG1sX2VsZW1lbnRzKCJkaXYuYXRobGV0ZS1iYXNpYy1saW5lIikgIyANCiMjIw0KDQojIEV4dHJhY3QgYW5kIGNsZWFuIGRhdGENCnNjcmFwIDwtIGNvbXBldGl0b3JfZGl2cyAlPiUNCiAgbWFwX2RmKH57DQogICAgcmFuayA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIucmFuayIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgbmFtZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuci1uYW1lIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBzY29yZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBGQUxTRSkgIyBzY29yZQ0KICAgICNzY29yZS5jbGFzaWYgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIHF1YWxpIGNlbGwiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIHNjb3JlDQogICAgdGVhbSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCJzcGFuOm50aC1jaGlsZCgyKSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgVGVhbQ0KICAgIA0KICAgICMgUmV0dXJuIGFzIGEgdGliYmxlDQogICAgdGliYmxlKE5hbWUgPSBuYW1lLCANCiAgICAgICAgICAgUmFuayA9IHJhbmssIA0KICAgICAgICAgICBTY29yZSA9IHNjb3JlLCANCiAgICAgICAgICAgI0NsYXNpZmljID0gc2NvcmUuY2xhc2lmLA0KICAgICAgICAgICBUZWFtID0gdGVhbSkNCiAgfSkNCiMjIw0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBzZXBhcmF0ZShTY29yZSwgaW50byA9IGMoTkEsICJzY29yZSIsICJUcyIsICJacyIsIlNjb3JlLnJhbmsiLCBOQSksIHNlcCA9ICIgIikNCiNzY3JhcCA8LSBzY3JhcCAlPiUgDQogIyBzZXBhcmF0ZShzY29yZS5yYW5rLCBpbnRvID0gYyhOQSxOQSwic2NvcmUucmFuayIpLCBzZXAgPSAiKCkiKQ0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBtdXRhdGUoUmFuayA9IGFzLm51bWVyaWMoUmFuayksIFRzID0gYXMubnVtZXJpYyhUcyksIFpzID0gYXMubnVtZXJpYyhacykpDQpzY3JhcCRDYXRlZ29yeSA8LSByZXAoIkFic19GIiwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCnNjcmFwJENvbXBldGl0aW9uIDwtIHJlcChjb21wZSwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCiMjDQpjb21wZQ0Kbi5jb21wZXRpdG9ycyA8LSBsZW5ndGgoc2NyYXAkUmFua1shaXMubmEoc2NyYXAkUmFuayldKS8yOyBuLmNvbXBldGl0b3JzDQojIw0Kc2NyYXAkeWVhciA8LSBjKHJlcCgiMjAyMyIsIGxlbmd0aChzY3JhcCROYW1lKSkpDQpzY3JhcCRzdGFnZSA8LSBjKHJlcCgiZmluYWwiLCA4KSwgcmVwKE5BLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgLTgpLCBOQSwgcmVwKCJDbGFzaWZpYyIsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSApICkNCiMjDQojIHNjcmFwICU+JSBwcmludChuPWxlbmd0aChzY3JhcCROYW1lKSkNCnNjcmFwWyxjKDE6OSldICU+JSANCiAgZmlsdGVyKCFpcy5uYShzY29yZSkpICU+JQ0KICBwcmludChuID0gMTcpDQojIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjIyMjIyMjIyMjDQpBYnNfRiA8LSBzY3JhcA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpgYGAgIA0KDQojIyMgU3ViMThfTQ0KDQpgYGB7cn0NCiMgc2NyYXBpbmcgYWN0aXZlIHBhZ2UgdXNpbmcgY2hyb21vdGUgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgQWJzRiBET25lDQojIEFic00gRE9ORQ0KIyBTdWIxOE0NCg0KIyBVUkwgb2YgdGhlIHdlYnBhZ2UgdG8gc2NyYXBlDQojIHVybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvMzAvZ2VuZXJhbC9sZWFkIg0KDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCiMgYiA8LSBDaHJvbW90ZVNlc3Npb24kbmV3KCkNCg0KIyBOYXZpZ2F0ZSB0byB0aGUgd2VicGFnZQ0KIyBiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KDQojIEV4dHJhY3QgdGhlIHJlbmRlcmVkIEhUTUwNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCdkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubXgtMjpudGgtY2hpbGQoNSkiKS5jbGljaygpOycpICAjIFJlcGxhY2Ugd2l0aCB5b3VyIENTUyBzZWxlY3Rvcg0KU3lzLnNsZWVwKDYpIA0KDQojIyMgV0FJVCBmb3IgImJhY2tzdGFnZSIgcGFnZSBsb2FkaW5nICMjIyMNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MIikkcmVzdWx0JHZhbHVlDQojIyANCnBhZ2UgPC0gcmVhZF9odG1sKGh0bWwpDQpgYGAgIA0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQojIyMgDQpjb21wZSA8LSBwYWdlICU+JQ0KICBodG1sX2VsZW1lbnRzKCdkaXYuZ3ItZXZlbnQtbmFtZScpICU+JQ0KICBodG1sX3RleHQoKQ0KIyMjDQpjb21wZXRpdG9yX2RpdnMgPC0gcGFnZSAlPiUgDQogIGh0bWxfZWxlbWVudHMoImRpdi5hdGhsZXRlLWJhc2ljLWxpbmUiKSAjIA0KDQojIEV4dHJhY3QgYW5kIGNsZWFuIGRhdGENCnNjcmFwIDwtIGNvbXBldGl0b3JfZGl2cyAlPiUNCiAgbWFwX2RmKH57DQogICAgcmFuayA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIucmFuayIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgbmFtZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuci1uYW1lIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBzY29yZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBGQUxTRSkgIyBzY29yZQ0KICAgICNzY29yZS5jbGFzaWYgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIHF1YWxpIGNlbGwiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIHNjb3JlDQogICAgdGVhbSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCJzcGFuOm50aC1jaGlsZCgyKSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgVGVhbQ0KICAgIA0KICAgICMgUmV0dXJuIGFzIGEgdGliYmxlDQogICAgdGliYmxlKE5hbWUgPSBuYW1lLCANCiAgICAgICAgICAgUmFuayA9IHJhbmssIA0KICAgICAgICAgICBTY29yZSA9IHNjb3JlLCANCiAgICAgICAgICAgI0NsYXNpZmljID0gc2NvcmUuY2xhc2lmLA0KICAgICAgICAgICBUZWFtID0gdGVhbSkNCiAgfSkNCiMjIw0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBzZXBhcmF0ZShTY29yZSwgaW50byA9IGMoTkEsICJzY29yZSIsICJUcyIsICJacyIsIlNjb3JlLnJhbmsiLCBOQSksIHNlcCA9ICIgIikNCiNzY3JhcCA8LSBzY3JhcCAlPiUgDQogIyBzZXBhcmF0ZShzY29yZS5yYW5rLCBpbnRvID0gYyhOQSxOQSwic2NvcmUucmFuayIpLCBzZXAgPSAiKCkiKQ0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBtdXRhdGUoUmFuayA9IGFzLm51bWVyaWMoUmFuayksIFRzID0gYXMubnVtZXJpYyhUcyksIFpzID0gYXMubnVtZXJpYyhacykpDQpzY3JhcCRDYXRlZ29yeSA8LSByZXAoIlN1YjE4X00iLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNClN1YjE4TSA8LSBzY3JhcA0KYGBgICANCg0KIyMjIFN1YjE4X0YNCg0KYGBge3J9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBBYnNGIERPTkUNCiMgQWJzTSBET05FDQojIFN1YjE4IE0gRE9ORQ0KIyBTdWIxOCBGDQojIFN1YjE2IE0NCiMgU3ViMTYgRg0KIyBTdWIxNCBNDQojIFN1YjE0IEYNCg0KIyBzY3JhcGluZyBhY3RpdmUgcGFnZSB1c2luZyBjaHJvbW90ZSAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyBBYnNGIERPbmUNCiMgQWJzTSBET05FDQojIFN1YjE4TSBET05FDQojIFN1YjE4RiANCg0KIyBVUkwgb2YgdGhlIHdlYnBhZ2UgdG8gc2NyYXBlDQojIHVybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvMzAvZ2VuZXJhbC9sZWFkIg0KDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCiMgYiA8LSBDaHJvbW90ZVNlc3Npb24kbmV3KCkNCg0KIyBOYXZpZ2F0ZSB0byB0aGUgd2VicGFnZQ0KIyBiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KDQojIEV4dHJhY3QgdGhlIHJlbmRlcmVkIEhUTUwNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCdkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubXgtMjpudGgtY2hpbGQoNikiKS5jbGljaygpOycpICAjIFJlcGxhY2Ugd2l0aCB5b3VyIENTUyBzZWxlY3Rvcg0KU3lzLnNsZWVwKDYpIA0KDQojIyMgV0FJVCBmb3IgImJhY2tzdGFnZSIgcGFnZSBsb2FkaW5nICMjIyMNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MIikkcmVzdWx0JHZhbHVlDQojIyANCnBhZ2UgPC0gcmVhZF9odG1sKGh0bWwpDQpgYGAgIA0KDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjIyANCmNvbXBlIDwtIHBhZ2UgJT4lDQogIGh0bWxfZWxlbWVudHMoJ2Rpdi5nci1ldmVudC1uYW1lJykgJT4lDQogIGh0bWxfdGV4dCgpDQojIyMNCmNvbXBldGl0b3JfZGl2cyA8LSBwYWdlICU+JSANCiAgaHRtbF9lbGVtZW50cygiZGl2LmF0aGxldGUtYmFzaWMtbGluZSIpICMgDQoNCiMgRXh0cmFjdCBhbmQgY2xlYW4gZGF0YQ0Kc2NyYXAgPC0gY29tcGV0aXRvcl9kaXZzICU+JQ0KICBtYXBfZGYofnsNCiAgICByYW5rIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yYW5rIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBuYW1lIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yLW5hbWUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIHNjb3JlIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSIpICU+JSBodG1sX3RleHQodHJpbSA9IEZBTFNFKSAjIHNjb3JlDQogICAgI3Njb3JlLmNsYXNpZiA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUgcXVhbGkgY2VsbCIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgc2NvcmUNCiAgICB0ZWFtIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoInNwYW46bnRoLWNoaWxkKDIpIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBUZWFtDQogICAgDQogICAgIyBSZXR1cm4gYXMgYSB0aWJibGUNCiAgICB0aWJibGUoTmFtZSA9IG5hbWUsIA0KICAgICAgICAgICBSYW5rID0gcmFuaywgDQogICAgICAgICAgIFNjb3JlID0gc2NvcmUsIA0KICAgICAgICAgICAjQ2xhc2lmaWMgPSBzY29yZS5jbGFzaWYsDQogICAgICAgICAgIFRlYW0gPSB0ZWFtKQ0KICB9KQ0KIyMjDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIHNlcGFyYXRlKFNjb3JlLCBpbnRvID0gYyhOQSwgInNjb3JlIiwgIlRzIiwgIlpzIiwiU2NvcmUucmFuayIsIE5BKSwgc2VwID0gIiAiKQ0KI3NjcmFwIDwtIHNjcmFwICU+JSANCiAjIHNlcGFyYXRlKHNjb3JlLnJhbmssIGludG8gPSBjKE5BLE5BLCJzY29yZS5yYW5rIiksIHNlcCA9ICIoKSIpDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIG11dGF0ZShSYW5rID0gYXMubnVtZXJpYyhSYW5rKSwgVHMgPSBhcy5udW1lcmljKFRzKSwgWnMgPSBhcy5udW1lcmljKFpzKSkNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiU3ViMThfRiIsIGxlbmd0aChzY3JhcCROYW1lKSApDQpzY3JhcCRDb21wZXRpdGlvbiA8LSByZXAoY29tcGUsIGxlbmd0aChzY3JhcCROYW1lKSApDQojIw0KY29tcGUNCm4uY29tcGV0aXRvcnMgPC0gbGVuZ3RoKHNjcmFwJFJhbmtbIWlzLm5hKHNjcmFwJFJhbmspXSkvMjsgbi5jb21wZXRpdG9ycw0KIyMNCnNjcmFwJHllYXIgPC0gYyhyZXAoIjIwMjMiLCBsZW5ndGgoc2NyYXAkTmFtZSkpKQ0Kc2NyYXAkc3RhZ2UgPC0gYyhyZXAoImZpbmFsIiwgOCksIHJlcChOQSwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpIC04KSwgTkEsIHJlcCgiQ2xhc2lmaWMiLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgKSApDQojIw0KIyBzY3JhcCAlPiUgcHJpbnQobj1sZW5ndGgoc2NyYXAkTmFtZSkpDQpzY3JhcFssYygxOjkpXSAlPiUgDQogIGZpbHRlcighaXMubmEoc2NvcmUpKSAlPiUNCiAgcHJpbnQobiA9IDE3KQ0KIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIyMjIyMjIyMjIw0KU3ViMThGIDwtIHNjcmFwDQpgYGAgIA0KIyMjIFN1YjE2X00NCg0KYGBge3J9DQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIEFic0YgRE9uZQ0KIyBBYnNNIERPTkUNCiMgU3ViMThNIERPTkUNCiMgU3ViMThGIERPTkUNCiMgU3ViMTZNDQoNCiMgVVJMIG9mIHRoZSB3ZWJwYWdlIHRvIHNjcmFwZQ0KIyB1cmwgPC0gImh0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvL2V2ZW50LzMwL2dlbmVyYWwvbGVhZCINCg0KIyMjIyMjIyMjIyMjICAgY2hyb21vdGU6OiBPUFRJT04gIyMjIyMjDQojIENyZWF0ZSBhIG5ldyBDaHJvbW90ZSBzZXNzaW9uDQojIGIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQoNCiMgTmF2aWdhdGUgdG8gdGhlIHdlYnBhZ2UNCiMgYiRQYWdlJG5hdmlnYXRlKHVybCkNCg0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDcpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKQ0KYGBgICANCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMjIA0KY29tcGUgPC0gcGFnZSAlPiUNCiAgaHRtbF9lbGVtZW50cygnZGl2LmdyLWV2ZW50LW5hbWUnKSAlPiUNCiAgaHRtbF90ZXh0KCkNCiMjIw0KY29tcGV0aXRvcl9kaXZzIDwtIHBhZ2UgJT4lIA0KICBodG1sX2VsZW1lbnRzKCJkaXYuYXRobGV0ZS1iYXNpYy1saW5lIikgIyANCg0KIyBFeHRyYWN0IGFuZCBjbGVhbiBkYXRhDQpzY3JhcCA8LSBjb21wZXRpdG9yX2RpdnMgJT4lDQogIG1hcF9kZih+ew0KICAgIHJhbmsgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnJhbmsiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIG5hbWUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnItbmFtZSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgc2NvcmUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIikgJT4lIGh0bWxfdGV4dCh0cmltID0gRkFMU0UpICMgc2NvcmUNCiAgICAjc2NvcmUuY2xhc2lmIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSBxdWFsaSBjZWxsIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBzY29yZQ0KICAgIHRlYW0gPC0gLnggJT4lIGh0bWxfZWxlbWVudCgic3BhbjpudGgtY2hpbGQoMikiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIFRlYW0NCiAgICANCiAgICAjIFJldHVybiBhcyBhIHRpYmJsZQ0KICAgIHRpYmJsZShOYW1lID0gbmFtZSwgDQogICAgICAgICAgIFJhbmsgPSByYW5rLCANCiAgICAgICAgICAgU2NvcmUgPSBzY29yZSwgDQogICAgICAgICAgICNDbGFzaWZpYyA9IHNjb3JlLmNsYXNpZiwNCiAgICAgICAgICAgVGVhbSA9IHRlYW0pDQogIH0pDQojIyMNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgc2VwYXJhdGUoU2NvcmUsIGludG8gPSBjKE5BLCAic2NvcmUiLCAiVHMiLCAiWnMiLCJTY29yZS5yYW5rIiwgTkEpLCBzZXAgPSAiICIpDQojc2NyYXAgPC0gc2NyYXAgJT4lIA0KICMgc2VwYXJhdGUoc2NvcmUucmFuaywgaW50byA9IGMoTkEsTkEsInNjb3JlLnJhbmsiKSwgc2VwID0gIigpIikNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgbXV0YXRlKFJhbmsgPSBhcy5udW1lcmljKFJhbmspLCBUcyA9IGFzLm51bWVyaWMoVHMpLCBacyA9IGFzLm51bWVyaWMoWnMpKQ0Kc2NyYXAkQ2F0ZWdvcnkgPC0gcmVwKCJTdWIxNl9NIiwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCnNjcmFwJENvbXBldGl0aW9uIDwtIHJlcChjb21wZSwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCiMjDQpjb21wZQ0Kbi5jb21wZXRpdG9ycyA8LSBsZW5ndGgoc2NyYXAkUmFua1shaXMubmEoc2NyYXAkUmFuayldKS8yOyBuLmNvbXBldGl0b3JzDQojIw0Kc2NyYXAkeWVhciA8LSBjKHJlcCgiMjAyMyIsIGxlbmd0aChzY3JhcCROYW1lKSkpDQpzY3JhcCRzdGFnZSA8LSBjKHJlcCgiZmluYWwiLCA4KSwgcmVwKE5BLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgLTgpLCBOQSwgcmVwKCJDbGFzaWZpYyIsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSApICkNCiMjDQojIHNjcmFwICU+JSBwcmludChuPWxlbmd0aChzY3JhcCROYW1lKSkNCnNjcmFwWyxjKDE6OSldICU+JSANCiAgZmlsdGVyKCFpcy5uYShzY29yZSkpICU+JQ0KICBwcmludChuID0gMTcpDQojIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjIyMjIyMjIyMjDQpTdWIxNk0gPC0gc2NyYXANCmBgYCAgDQojIyMgU3ViMTZfRg0KDQpgYGB7cn0NCiMgc2NyYXBpbmcgYWN0aXZlIHBhZ2UgdXNpbmcgY2hyb21vdGUgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgQWJzRiBET25lDQojIEFic00gRE9ORQ0KIyBTdWIxOE0gRE9ORQ0KIyBTdWIxOEYgRE9ORQ0KIyBTdWIxNk0gRE9ORQ0KIyBTdWIxNkYgDQoNCiMgVVJMIG9mIHRoZSB3ZWJwYWdlIHRvIHNjcmFwZQ0KIyB1cmwgPC0gImh0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvL2V2ZW50LzMwL2dlbmVyYWwvbGVhZCINCg0KIyMjIyMjIyMjIyMjICAgY2hyb21vdGU6OiBPUFRJT04gIyMjIyMjDQojIENyZWF0ZSBhIG5ldyBDaHJvbW90ZSBzZXNzaW9uDQojYiA8LSBDaHJvbW90ZVNlc3Npb24kbmV3KCkNCg0KIyBOYXZpZ2F0ZSB0byB0aGUgd2VicGFnZQ0KIyBiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KDQojIEV4dHJhY3QgdGhlIHJlbmRlcmVkIEhUTUwNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCdkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubXgtMjpudGgtY2hpbGQoOCkiKS5jbGljaygpOycpICAjIFJlcGxhY2Ugd2l0aCB5b3VyIENTUyBzZWxlY3Rvcg0KU3lzLnNsZWVwKDYpIA0KDQojIyMgV0FJVCBmb3IgImJhY2tzdGFnZSIgcGFnZSBsb2FkaW5nICMjIyMNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MIikkcmVzdWx0JHZhbHVlDQojIyANCnBhZ2UgPC0gcmVhZF9odG1sKGh0bWwpDQpgYGAgIA0KDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjIyANCmNvbXBlIDwtIHBhZ2UgJT4lDQogIGh0bWxfZWxlbWVudHMoJ2Rpdi5nci1ldmVudC1uYW1lJykgJT4lDQogIGh0bWxfdGV4dCgpDQojIyMNCmNvbXBldGl0b3JfZGl2cyA8LSBwYWdlICU+JSANCiAgaHRtbF9lbGVtZW50cygiZGl2LmF0aGxldGUtYmFzaWMtbGluZSIpICMgDQoNCiMgRXh0cmFjdCBhbmQgY2xlYW4gZGF0YQ0Kc2NyYXAgPC0gY29tcGV0aXRvcl9kaXZzICU+JQ0KICBtYXBfZGYofnsNCiAgICByYW5rIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yYW5rIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBuYW1lIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yLW5hbWUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIHNjb3JlIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSIpICU+JSBodG1sX3RleHQodHJpbSA9IEZBTFNFKSAjIHNjb3JlDQogICAgI3Njb3JlLmNsYXNpZiA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUgcXVhbGkgY2VsbCIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgc2NvcmUNCiAgICB0ZWFtIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoInNwYW46bnRoLWNoaWxkKDIpIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBUZWFtDQogICAgDQogICAgIyBSZXR1cm4gYXMgYSB0aWJibGUNCiAgICB0aWJibGUoTmFtZSA9IG5hbWUsIA0KICAgICAgICAgICBSYW5rID0gcmFuaywgDQogICAgICAgICAgIFNjb3JlID0gc2NvcmUsIA0KICAgICAgICAgICAjQ2xhc2lmaWMgPSBzY29yZS5jbGFzaWYsDQogICAgICAgICAgIFRlYW0gPSB0ZWFtKQ0KICB9KQ0KIyMjDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIHNlcGFyYXRlKFNjb3JlLCBpbnRvID0gYyhOQSwgInNjb3JlIiwgIlRzIiwgIlpzIiwiU2NvcmUucmFuayIsIE5BKSwgc2VwID0gIiAiKQ0KI3NjcmFwIDwtIHNjcmFwICU+JSANCiAjIHNlcGFyYXRlKHNjb3JlLnJhbmssIGludG8gPSBjKE5BLE5BLCJzY29yZS5yYW5rIiksIHNlcCA9ICIoKSIpDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIG11dGF0ZShSYW5rID0gYXMubnVtZXJpYyhSYW5rKSwgVHMgPSBhcy5udW1lcmljKFRzKSwgWnMgPSBhcy5udW1lcmljKFpzKSkNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiU3ViMTZfRiIsIGxlbmd0aChzY3JhcCROYW1lKSApDQpzY3JhcCRDb21wZXRpdGlvbiA8LSByZXAoY29tcGUsIGxlbmd0aChzY3JhcCROYW1lKSApDQojIw0KY29tcGUNCm4uY29tcGV0aXRvcnMgPC0gbGVuZ3RoKHNjcmFwJFJhbmtbIWlzLm5hKHNjcmFwJFJhbmspXSkvMjsgbi5jb21wZXRpdG9ycw0KIyMNCnNjcmFwJHllYXIgPC0gYyhyZXAoIjIwMjMiLCBsZW5ndGgoc2NyYXAkTmFtZSkpKQ0Kc2NyYXAkc3RhZ2UgPC0gYyhyZXAoImZpbmFsIiwgOCksIHJlcChOQSwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpIC04KSwgTkEsIHJlcCgiQ2xhc2lmaWMiLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgKSApDQojIw0KIyBzY3JhcCAlPiUgcHJpbnQobj1sZW5ndGgoc2NyYXAkTmFtZSkpDQpzY3JhcFssYygxOjkpXSAlPiUgDQogIGZpbHRlcighaXMubmEoc2NvcmUpKSAlPiUNCiAgcHJpbnQobiA9IDE3KQ0KIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIyMjIyMjIyMjIw0KU3ViMTZGIDwtIHNjcmFwDQpgYGAgIA0KDQojIyMgU3ViMTRfTQ0KDQpgYGB7cn0NCiMgc2NyYXBpbmcgYWN0aXZlIHBhZ2UgdXNpbmcgY2hyb21vdGUgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgQWJzRiBET25lDQojIEFic00gRE9ORQ0KIyBTdWIxOE0gRE9ORQ0KIyBTdWIxOEYgRE9ORQ0KIyBTdWIxNk0gRE9ORQ0KIyBTdWIxNkYgRE9ORQ0KIyBTdWIxNE0gDQoNCiMgVVJMIG9mIHRoZSB3ZWJwYWdlIHRvIHNjcmFwZQ0KIyB1cmwgPC0gImh0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvL2V2ZW50LzMwL2dlbmVyYWwvbGVhZCINCg0KIyMjIyMjIyMjIyMjICAgY2hyb21vdGU6OiBPUFRJT04gIyMjIyMjDQojIENyZWF0ZSBhIG5ldyBDaHJvbW90ZSBzZXNzaW9uDQojIGIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQoNCiMgTmF2aWdhdGUgdG8gdGhlIHdlYnBhZ2UNCiMgYiRQYWdlJG5hdmlnYXRlKHVybCkNCg0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDkpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKQ0KYGBgICANCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMjIA0KY29tcGUgPC0gcGFnZSAlPiUNCiAgaHRtbF9lbGVtZW50cygnZGl2LmdyLWV2ZW50LW5hbWUnKSAlPiUNCiAgaHRtbF90ZXh0KCkNCiMjIw0KY29tcGV0aXRvcl9kaXZzIDwtIHBhZ2UgJT4lIA0KICBodG1sX2VsZW1lbnRzKCJkaXYuYXRobGV0ZS1iYXNpYy1saW5lIikgIyANCg0KIyBFeHRyYWN0IGFuZCBjbGVhbiBkYXRhDQpzY3JhcCA8LSBjb21wZXRpdG9yX2RpdnMgJT4lDQogIG1hcF9kZih+ew0KICAgIHJhbmsgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnJhbmsiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIG5hbWUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnItbmFtZSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgc2NvcmUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIikgJT4lIGh0bWxfdGV4dCh0cmltID0gRkFMU0UpIA0KICAgICMgc2NvcmUNCiAgICAjc2NvcmUuY2xhc2lmIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSBxdWFsaSBjZWxsIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBzY29yZQ0KICAgIHRlYW0gPC0gLnggJT4lIGh0bWxfZWxlbWVudCgic3BhbjpudGgtY2hpbGQoMikiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIFRlYW0NCiAgICANCiAgICAjIFJldHVybiBhcyBhIHRpYmJsZQ0KICAgIHRpYmJsZShOYW1lID0gbmFtZSwgDQogICAgICAgICAgIFJhbmsgPSByYW5rLCANCiAgICAgICAgICAgU2NvcmUgPSBzY29yZSwgDQogICAgICAgICAgICNDbGFzaWZpYyA9IHNjb3JlLmNsYXNpZiwNCiAgICAgICAgICAgVGVhbSA9IHRlYW0pDQogIH0pDQojIyMNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgc2VwYXJhdGUoU2NvcmUsIGludG8gPSBjKE5BLCAic2NvcmUiLCAiVHMiLCAiWnMiLCJTY29yZS5yYW5rIiwgTkEpLCBzZXAgPSAiICIpDQojc2NyYXAgPC0gc2NyYXAgJT4lIA0KICMgc2VwYXJhdGUoc2NvcmUucmFuaywgaW50byA9IGMoTkEsTkEsInNjb3JlLnJhbmsiKSwgc2VwID0gIigpIikNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgbXV0YXRlKFJhbmsgPSBhcy5udW1lcmljKFJhbmspLCBUcyA9IGFzLm51bWVyaWMoVHMpLCBacyA9IGFzLm51bWVyaWMoWnMpKQ0Kc2NyYXAkQ2F0ZWdvcnkgPC0gcmVwKCJTdWIxNF9NIiwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCnNjcmFwJENvbXBldGl0aW9uIDwtIHJlcChjb21wZSwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCiMjDQpjb21wZQ0Kbi5jb21wZXRpdG9ycyA8LSBsZW5ndGgoc2NyYXAkUmFua1shaXMubmEoc2NyYXAkUmFuayldKS8yOyBuLmNvbXBldGl0b3JzDQojIw0Kc2NyYXAkeWVhciA8LSBjKHJlcCgiMjAyMyIsIGxlbmd0aChzY3JhcCROYW1lKSkpDQpzY3JhcCRzdGFnZSA8LSBjKHJlcCgiZmluYWwiLCA4KSwgcmVwKE5BLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgLTgpLCBOQSwgcmVwKCJDbGFzaWZpYyIsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSApICkNCiMjDQojIHNjcmFwICU+JSBwcmludChuPWxlbmd0aChzY3JhcCROYW1lKSkNCnNjcmFwWyxjKDE6OSldICU+JSANCiAgZmlsdGVyKCFpcy5uYShzY29yZSkpICU+JQ0KICBwcmludChuID0gMTcpDQojIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjIyMjIyMjIyMjDQpTdWIxNE0gPC0gc2NyYXANCmBgYCAgDQoNCg0KIyMjIFN1YjE0X0YNCg0KDQpgYGB7cn0NCiMgc2NyYXBpbmcgYWN0aXZlIHBhZ2UgdXNpbmcgY2hyb21vdGUgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgQWJzRiBET25lDQojIEFic00gRE9ORQ0KIyBTdWIxOE0gRE9ORQ0KIyBTdWIxOEYgRE9ORQ0KIyBTdWIxNk0gRE9ORQ0KIyBTdWIxNkYgRE9ORQ0KIyBTdWIxNE0gRE9ORQ0KIyBTdWIxNEYgDQoNCiMgVVJMIG9mIHRoZSB3ZWJwYWdlIHRvIHNjcmFwZQ0KI3VybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvMzAvZ2VuZXJhbC9sZWFkIg0KDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCiMgYiA8LSBDaHJvbW90ZVNlc3Npb24kbmV3KCkNCg0KIyBOYXZpZ2F0ZSB0byB0aGUgd2VicGFnZQ0KIyBiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KDQojIEV4dHJhY3QgdGhlIHJlbmRlcmVkIEhUTUwNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCdkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubXgtMjpudGgtY2hpbGQoMTApIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKQ0KYGBgICANCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMjIA0KY29tcGUgPC0gcGFnZSAlPiUNCiAgaHRtbF9lbGVtZW50cygnZGl2LmdyLWV2ZW50LW5hbWUnKSAlPiUNCiAgaHRtbF90ZXh0KCkNCiMjIw0KY29tcGV0aXRvcl9kaXZzIDwtIHBhZ2UgJT4lIA0KICBodG1sX2VsZW1lbnRzKCJkaXYuYXRobGV0ZS1iYXNpYy1saW5lIikgIyANCg0KIyBFeHRyYWN0IGFuZCBjbGVhbiBkYXRhDQpzY3JhcCA8LSBjb21wZXRpdG9yX2RpdnMgJT4lDQogIG1hcF9kZih+ew0KICAgIHJhbmsgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnJhbmsiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIG5hbWUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnItbmFtZSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgc2NvcmUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIikgJT4lIGh0bWxfdGV4dCh0cmltID0gRkFMU0UpICMgc2NvcmUNCiAgICAjc2NvcmUuY2xhc2lmIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSBxdWFsaSBjZWxsIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBzY29yZQ0KICAgIHRlYW0gPC0gLnggJT4lIGh0bWxfZWxlbWVudCgic3BhbjpudGgtY2hpbGQoMikiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIFRlYW0NCiAgICANCiAgICAjIFJldHVybiBhcyBhIHRpYmJsZQ0KICAgIHRpYmJsZShOYW1lID0gbmFtZSwgDQogICAgICAgICAgIFJhbmsgPSByYW5rLCANCiAgICAgICAgICAgU2NvcmUgPSBzY29yZSwgDQogICAgICAgICAgICNDbGFzaWZpYyA9IHNjb3JlLmNsYXNpZiwNCiAgICAgICAgICAgVGVhbSA9IHRlYW0pDQogIH0pDQojIyMNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgc2VwYXJhdGUoU2NvcmUsIGludG8gPSBjKE5BLCAic2NvcmUiLCAiVHMiLCAiWnMiLCJTY29yZS5yYW5rIiwgTkEpLCBzZXAgPSAiICIpDQojc2NyYXAgPC0gc2NyYXAgJT4lIA0KICMgc2VwYXJhdGUoc2NvcmUucmFuaywgaW50byA9IGMoTkEsTkEsInNjb3JlLnJhbmsiKSwgc2VwID0gIigpIikNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgbXV0YXRlKFJhbmsgPSBhcy5udW1lcmljKFJhbmspLCBUcyA9IGFzLm51bWVyaWMoVHMpLCBacyA9IGFzLm51bWVyaWMoWnMpKQ0Kc2NyYXAkQ2F0ZWdvcnkgPC0gcmVwKCJTdWIxNF9GIiwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCnNjcmFwJENvbXBldGl0aW9uIDwtIHJlcChjb21wZSwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCiMjDQpjb21wZQ0Kbi5jb21wZXRpdG9ycyA8LSBsZW5ndGgoc2NyYXAkUmFua1shaXMubmEoc2NyYXAkUmFuayldKS8yOyBuLmNvbXBldGl0b3JzDQojIw0Kc2NyYXAkeWVhciA8LSBjKHJlcCgiMjAyMyIsIGxlbmd0aChzY3JhcCROYW1lKSkpDQpzY3JhcCRzdGFnZSA8LSBjKHJlcCgiZmluYWwiLCA4KSwgcmVwKE5BLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgLTgpLCBOQSwgcmVwKCJDbGFzaWZpYyIsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSApICkNCiMjDQojIHNjcmFwICU+JSBwcmludChuPWxlbmd0aChzY3JhcCROYW1lKSkNCnNjcmFwWyxjKDE6OSldICU+JSANCiAgZmlsdGVyKCFpcy5uYShzY29yZSkpICU+JQ0KICBwcmludChuID0gMTcpDQojIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjIyMjIyMjIyMjDQpTdWIxNEYgPC0gc2NyYXANCmBgYCAgDQoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIFdyaXRlIGdvb2dsZSBzaGVldCAjIyMNCkZpcnN0LkJvdWxkZXJfRVNQLjIyIDwtIHJiaW5kKEFic19GLCANCiAgICAgICAgICAgICBBYnNfTSwgDQogICAgICAgICAgICAgU3ViMThNLCANCiAgICAgICAgICAgICBTdWIxOEYsDQogICAgICAgICAgICAgU3ViMTZNLA0KICAgICAgICAgICAgIFN1YjE2RiwNCiAgICAgICAgICAgICBTdWIxNE0sDQogICAgICAgICAgICAgU3ViMTRGKQ0KRmlyc3QuQm91bGRlcl9FU1AuMjIgJT4lIHByaW50KG49bGVuZ3RoKEZpcnN0LkJvdWxkZXJfRVNQLjIyJE5hbWUpKQ0KDQpvcHRpb25zKGdhcmdsZV9vYXV0aF9lbWFpbCA9ICJ2aWxsYXRvcm9wYXpmakBkYXRhYW5hbHlzaXNsYWIuY29tIikNCmdzNF9kZWF1dGgoKQ0KZ3M0X2F1dGgoKQ0Kc2hlZXRfd3JpdGUoZGF0YSA9IEZpcnN0LkJvdWxkZXJfRVNQLjIyLA0KICAgICAgICAgICAgc3M9ICJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8xa1hZVUg5X1FXTkJiZEloVmtncnRoWEFnMlNVQzVwNi1yQjY1MUhseUc2ay9lZGl0P3VzcD1zaGFyaW5nIiwgDQogICAgICAgICAgICBzaGVldD1wYXN0ZSgiRmlyc3QuQm91bGRlcl9FU1AuMjIiLCAiXyIsIFN5cy5EYXRlKCkpKQ0KDQoNCmBgYA0KDQoNCiMjIENvcGEgRXNwYcOxYSAyMDIyIC0gMmEgUHJ1ZWJhIEJsb3F1ZQ0KDQojIyMgQWJzX00NCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCnVybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvMi9nZW5lcmFsL2JvdWxkZXIiDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCmIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQojIE5hdmlnYXRlIHRvIHRoZSB3ZWJwYWdlDQpiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDEpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKQ0KIyMjIA0KYGBgICANCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMjIA0KY29tcGUgPC0gcGFnZSAlPiUNCiAgaHRtbF9lbGVtZW50cygnZGl2LmdyLWV2ZW50LW5hbWUnKSAlPiUNCiAgaHRtbF90ZXh0KCkNCiMjIw0KY29tcGV0aXRvcl9kaXZzIDwtIHBhZ2UgJT4lIA0KICBodG1sX2VsZW1lbnRzKCJkaXYuYXRobGV0ZS1iYXNpYy1saW5lIikgIyANCiMjIw0KDQojIEV4dHJhY3QgYW5kIGNsZWFuIGRhdGENCnNjcmFwIDwtIGNvbXBldGl0b3JfZGl2cyAlPiUNCiAgbWFwX2RmKH57DQogICAgcmFuayA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIucmFuayIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgbmFtZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuci1uYW1lIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBzY29yZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBGQUxTRSkgIyBzY29yZQ0KICAgICNzY29yZS5jbGFzaWYgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIHF1YWxpIGNlbGwiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIHNjb3JlDQogICAgdGVhbSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCJzcGFuOm50aC1jaGlsZCgyKSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgVGVhbQ0KICAgIA0KICAgICMgUmV0dXJuIGFzIGEgdGliYmxlDQogICAgdGliYmxlKE5hbWUgPSBuYW1lLCANCiAgICAgICAgICAgUmFuayA9IHJhbmssIA0KICAgICAgICAgICBTY29yZSA9IHNjb3JlLCANCiAgICAgICAgICAgI0NsYXNpZmljID0gc2NvcmUuY2xhc2lmLA0KICAgICAgICAgICBUZWFtID0gdGVhbSkNCiAgfSkNCiMjIw0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBzZXBhcmF0ZShTY29yZSwgaW50byA9IGMoTkEsICJzY29yZSIsICJUcyIsICJacyIsIlNjb3JlLnJhbmsiLCBOQSksIHNlcCA9ICIgIikNCiNzY3JhcCA8LSBzY3JhcCAlPiUgDQogIyBzZXBhcmF0ZShzY29yZS5yYW5rLCBpbnRvID0gYyhOQSxOQSwic2NvcmUucmFuayIpLCBzZXAgPSAiKCkiKQ0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBtdXRhdGUoUmFuayA9IGFzLm51bWVyaWMoUmFuayksIFRzID0gYXMubnVtZXJpYyhUcyksIFpzID0gYXMubnVtZXJpYyhacykpDQpzY3JhcCRDYXRlZ29yeSA8LSByZXAoIkFic19NIiwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCnNjcmFwJENvbXBldGl0aW9uIDwtIHJlcChjb21wZSwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCiMjDQpjb21wZQ0Kbi5jb21wZXRpdG9ycyA8LSBsZW5ndGgoc2NyYXAkUmFua1shaXMubmEoc2NyYXAkUmFuayldKS8yOyBuLmNvbXBldGl0b3JzDQojIw0Kc2NyYXAkeWVhciA8LSBjKHJlcCgiMjAyMyIsIGxlbmd0aChzY3JhcCROYW1lKSkpDQpzY3JhcCRzdGFnZSA8LSBjKHJlcCgiZmluYWwiLCA4KSwgcmVwKE5BLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgLTgpLCBOQSwgcmVwKCJDbGFzaWZpYyIsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSApICkNCiMjDQojIHNjcmFwICU+JSBwcmludChuPWxlbmd0aChzY3JhcCROYW1lKSkNCnNjcmFwWyxjKDE6OSldICU+JSANCiAgZmlsdGVyKCFpcy5uYShzY29yZSkpICU+JQ0KICBwcmludChuID0gMTcpDQojIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjIyMjIyMjIyMjDQpBYnNfTSA8LSBzY3JhcA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpgYGAgIA0KDQoNCiMjIyBBYnNfRg0KDQpgYGB7cn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIEFic0YgRE9uZQ0KIyBBYnNNDQoNCiMjIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCg0KIyB1cmwgPC0gImh0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvL2V2ZW50LzMwL2dlbmVyYWwvbGVhZCINCg0KIyMjIyMjIyMjIyMjICAgY2hyb21vdGU6OiBPUFRJT04gIyMjIyMjDQojIENyZWF0ZSBhIG5ldyBDaHJvbW90ZSBzZXNzaW9uDQojIGIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQoNCiMgTmF2aWdhdGUgdG8gdGhlIHdlYnBhZ2UNCiMgYiRQYWdlJG5hdmlnYXRlKHVybCkNCg0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDIpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKSAgDQpgYGAgIA0KDQoNCg0KDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmNvbXBlIDwtIHBhZ2UgJT4lDQogIGh0bWxfZWxlbWVudHMoJ2Rpdi5nci1ldmVudC1uYW1lJykgJT4lDQogIGh0bWxfdGV4dCgpDQojIyMNCmNvbXBldGl0b3JfZGl2cyA8LSBwYWdlICU+JSANCiAgaHRtbF9lbGVtZW50cygiZGl2LmF0aGxldGUtYmFzaWMtbGluZSIpIA0KIyMjDQoNCiMgRXh0cmFjdCBhbmQgY2xlYW4gZGF0YQ0Kc2NyYXAgPC0gY29tcGV0aXRvcl9kaXZzICU+JQ0KICBtYXBfZGYofnsNCiAgICByYW5rIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yYW5rIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBuYW1lIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yLW5hbWUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIHNjb3JlIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSIpICU+JSBodG1sX3RleHQodHJpbSA9IEZBTFNFKSAjIHNjb3JlDQogICAgI3Njb3JlLmNsYXNpZiA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUgcXVhbGkgY2VsbCIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgc2NvcmUNCiAgICB0ZWFtIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoInNwYW46bnRoLWNoaWxkKDIpIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBUZWFtDQogICAgDQogICAgIyBSZXR1cm4gYXMgYSB0aWJibGUNCiAgICB0aWJibGUoTmFtZSA9IG5hbWUsIA0KICAgICAgICAgICBSYW5rID0gcmFuaywgDQogICAgICAgICAgIFNjb3JlID0gc2NvcmUsIA0KICAgICAgICAgICAjQ2xhc2lmaWMgPSBzY29yZS5jbGFzaWYsDQogICAgICAgICAgIFRlYW0gPSB0ZWFtKQ0KICB9KQ0KIyMjDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIHNlcGFyYXRlKFNjb3JlLCBpbnRvID0gYyhOQSwgInNjb3JlIiwgIlRzIiwgIlpzIiwiU2NvcmUucmFuayIsIE5BKSwgc2VwID0gIiAiKQ0KI3NjcmFwIDwtIHNjcmFwICU+JSANCiAjIHNlcGFyYXRlKHNjb3JlLnJhbmssIGludG8gPSBjKE5BLE5BLCJzY29yZS5yYW5rIiksIHNlcCA9ICIoKSIpDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIG11dGF0ZShSYW5rID0gYXMubnVtZXJpYyhSYW5rKSwgVHMgPSBhcy5udW1lcmljKFRzKSwgWnMgPSBhcy5udW1lcmljKFpzKSkNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiQWJzX0YiLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNCkFic19GIDwtIHNjcmFwDQpgYGAgIA0KDQoNCg0KIyMjIFN1YjE4X00NCg0KYGBge3J9DQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIEFic0YgRE9uZQ0KIyBBYnNNIERPTkUNCiMgU3ViMThNDQoNCiMgVVJMIG9mIHRoZSB3ZWJwYWdlIHRvIHNjcmFwZQ0KIyB1cmwgPC0gImh0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvL2V2ZW50LzMwL2dlbmVyYWwvbGVhZCINCg0KIyMjIyMjIyMjIyMjICAgY2hyb21vdGU6OiBPUFRJT04gIyMjIyMjDQojIENyZWF0ZSBhIG5ldyBDaHJvbW90ZSBzZXNzaW9uDQojIGIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQoNCiMgTmF2aWdhdGUgdG8gdGhlIHdlYnBhZ2UNCiMgYiRQYWdlJG5hdmlnYXRlKHVybCkNCg0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDUpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKQ0KYGBgICANCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMjIA0KY29tcGUgPC0gcGFnZSAlPiUNCiAgaHRtbF9lbGVtZW50cygnZGl2LmdyLWV2ZW50LW5hbWUnKSAlPiUNCiAgaHRtbF90ZXh0KCkNCiMjIw0KY29tcGV0aXRvcl9kaXZzIDwtIHBhZ2UgJT4lIA0KICBodG1sX2VsZW1lbnRzKCJkaXYuYXRobGV0ZS1iYXNpYy1saW5lIikgIyANCg0KIyBFeHRyYWN0IGFuZCBjbGVhbiBkYXRhDQpzY3JhcCA8LSBjb21wZXRpdG9yX2RpdnMgJT4lDQogIG1hcF9kZih+ew0KICAgIHJhbmsgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnJhbmsiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIG5hbWUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnItbmFtZSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgc2NvcmUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIikgJT4lIGh0bWxfdGV4dCh0cmltID0gRkFMU0UpICMgc2NvcmUNCiAgICAjc2NvcmUuY2xhc2lmIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSBxdWFsaSBjZWxsIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBzY29yZQ0KICAgIHRlYW0gPC0gLnggJT4lIGh0bWxfZWxlbWVudCgic3BhbjpudGgtY2hpbGQoMikiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIFRlYW0NCiAgICANCiAgICAjIFJldHVybiBhcyBhIHRpYmJsZQ0KICAgIHRpYmJsZShOYW1lID0gbmFtZSwgDQogICAgICAgICAgIFJhbmsgPSByYW5rLCANCiAgICAgICAgICAgU2NvcmUgPSBzY29yZSwgDQogICAgICAgICAgICNDbGFzaWZpYyA9IHNjb3JlLmNsYXNpZiwNCiAgICAgICAgICAgVGVhbSA9IHRlYW0pDQogIH0pDQojIyMNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgc2VwYXJhdGUoU2NvcmUsIGludG8gPSBjKE5BLCAic2NvcmUiLCAiVHMiLCAiWnMiLCJTY29yZS5yYW5rIiwgTkEpLCBzZXAgPSAiICIpDQojc2NyYXAgPC0gc2NyYXAgJT4lIA0KICMgc2VwYXJhdGUoc2NvcmUucmFuaywgaW50byA9IGMoTkEsTkEsInNjb3JlLnJhbmsiKSwgc2VwID0gIigpIikNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgbXV0YXRlKFJhbmsgPSBhcy5udW1lcmljKFJhbmspLCBUcyA9IGFzLm51bWVyaWMoVHMpLCBacyA9IGFzLm51bWVyaWMoWnMpKQ0Kc2NyYXAkQ2F0ZWdvcnkgPC0gcmVwKCJTdWIxOF9NIiwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCnNjcmFwJENvbXBldGl0aW9uIDwtIHJlcChjb21wZSwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCiMjDQpjb21wZQ0Kbi5jb21wZXRpdG9ycyA8LSBsZW5ndGgoc2NyYXAkUmFua1shaXMubmEoc2NyYXAkUmFuayldKS8yOyBuLmNvbXBldGl0b3JzDQojIw0Kc2NyYXAkeWVhciA8LSBjKHJlcCgiMjAyMyIsIGxlbmd0aChzY3JhcCROYW1lKSkpDQpzY3JhcCRzdGFnZSA8LSBjKHJlcCgiZmluYWwiLCA4KSwgcmVwKE5BLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgLTgpLCBOQSwgcmVwKCJDbGFzaWZpYyIsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSApICkNCiMjDQojIHNjcmFwICU+JSBwcmludChuPWxlbmd0aChzY3JhcCROYW1lKSkNCnNjcmFwWyxjKDE6OSldICU+JSANCiAgZmlsdGVyKCFpcy5uYShzY29yZSkpICU+JQ0KICBwcmludChuID0gMTcpDQojIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjIyMjIyMjIyMjDQpTdWIxOE0gPC0gc2NyYXANCmBgYCAgDQoNCiMjIyBTdWIxOF9GDQoNCmBgYHtyfQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgQWJzRiBET05FDQojIEFic00gRE9ORQ0KIyBTdWIxOCBNIERPTkUNCiMgU3ViMTggRg0KIyBTdWIxNiBNDQojIFN1YjE2IEYNCiMgU3ViMTQgTQ0KIyBTdWIxNCBGDQoNCiMgc2NyYXBpbmcgYWN0aXZlIHBhZ2UgdXNpbmcgY2hyb21vdGUgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgQWJzRiBET25lDQojIEFic00gRE9ORQ0KIyBTdWIxOE0gRE9ORQ0KIyBTdWIxOEYgDQoNCiMgVVJMIG9mIHRoZSB3ZWJwYWdlIHRvIHNjcmFwZQ0KIyB1cmwgPC0gImh0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvL2V2ZW50LzMwL2dlbmVyYWwvbGVhZCINCg0KIyMjIyMjIyMjIyMjICAgY2hyb21vdGU6OiBPUFRJT04gIyMjIyMjDQojIENyZWF0ZSBhIG5ldyBDaHJvbW90ZSBzZXNzaW9uDQojIGIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQoNCiMgTmF2aWdhdGUgdG8gdGhlIHdlYnBhZ2UNCiMgYiRQYWdlJG5hdmlnYXRlKHVybCkNCg0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDYpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKQ0KYGBgICANCg0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQojIyMgDQpjb21wZSA8LSBwYWdlICU+JQ0KICBodG1sX2VsZW1lbnRzKCdkaXYuZ3ItZXZlbnQtbmFtZScpICU+JQ0KICBodG1sX3RleHQoKQ0KIyMjDQpjb21wZXRpdG9yX2RpdnMgPC0gcGFnZSAlPiUgDQogIGh0bWxfZWxlbWVudHMoImRpdi5hdGhsZXRlLWJhc2ljLWxpbmUiKSAjIA0KDQojIEV4dHJhY3QgYW5kIGNsZWFuIGRhdGENCnNjcmFwIDwtIGNvbXBldGl0b3JfZGl2cyAlPiUNCiAgbWFwX2RmKH57DQogICAgcmFuayA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIucmFuayIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgbmFtZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuci1uYW1lIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBzY29yZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBGQUxTRSkgIyBzY29yZQ0KICAgICNzY29yZS5jbGFzaWYgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIHF1YWxpIGNlbGwiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIHNjb3JlDQogICAgdGVhbSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCJzcGFuOm50aC1jaGlsZCgyKSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgVGVhbQ0KICAgIA0KICAgICMgUmV0dXJuIGFzIGEgdGliYmxlDQogICAgdGliYmxlKE5hbWUgPSBuYW1lLCANCiAgICAgICAgICAgUmFuayA9IHJhbmssIA0KICAgICAgICAgICBTY29yZSA9IHNjb3JlLCANCiAgICAgICAgICAgI0NsYXNpZmljID0gc2NvcmUuY2xhc2lmLA0KICAgICAgICAgICBUZWFtID0gdGVhbSkNCiAgfSkNCiMjIw0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBzZXBhcmF0ZShTY29yZSwgaW50byA9IGMoTkEsICJzY29yZSIsICJUcyIsICJacyIsIlNjb3JlLnJhbmsiLCBOQSksIHNlcCA9ICIgIikNCiNzY3JhcCA8LSBzY3JhcCAlPiUgDQogIyBzZXBhcmF0ZShzY29yZS5yYW5rLCBpbnRvID0gYyhOQSxOQSwic2NvcmUucmFuayIpLCBzZXAgPSAiKCkiKQ0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBtdXRhdGUoUmFuayA9IGFzLm51bWVyaWMoUmFuayksIFRzID0gYXMubnVtZXJpYyhUcyksIFpzID0gYXMubnVtZXJpYyhacykpDQpzY3JhcCRDYXRlZ29yeSA8LSByZXAoIlN1YjE4X0YiLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNClN1YjE4RiA8LSBzY3JhcA0KYGBgICANCiMjIyBTdWIxNl9NDQoNCmBgYHtyfQ0KIyBzY3JhcGluZyBhY3RpdmUgcGFnZSB1c2luZyBjaHJvbW90ZSAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyBBYnNGIERPbmUNCiMgQWJzTSBET05FDQojIFN1YjE4TSBET05FDQojIFN1YjE4RiBET05FDQojIFN1YjE2TQ0KDQojIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCiMgdXJsIDwtICJodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mby9ldmVudC8zMC9nZW5lcmFsL2xlYWQiDQoNCiMjIyMjIyMjIyMjIyAgIGNocm9tb3RlOjogT1BUSU9OICMjIyMjIw0KIyBDcmVhdGUgYSBuZXcgQ2hyb21vdGUgc2Vzc2lvbg0KIyBiIDwtIENocm9tb3RlU2Vzc2lvbiRuZXcoKQ0KDQojIE5hdmlnYXRlIHRvIHRoZSB3ZWJwYWdlDQojIGIkUGFnZSRuYXZpZ2F0ZSh1cmwpDQoNCiMgRXh0cmFjdCB0aGUgcmVuZGVyZWQgSFRNTA0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoJ2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5teC0yOm50aC1jaGlsZCg3KSIpLmNsaWNrKCk7JykgICMgUmVwbGFjZSB3aXRoIHlvdXIgQ1NTIHNlbGVjdG9yDQpTeXMuc2xlZXAoNikgDQoNCiMjIyBXQUlUIGZvciAiYmFja3N0YWdlIiBwYWdlIGxvYWRpbmcgIyMjIw0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoImRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUwiKSRyZXN1bHQkdmFsdWUNCiMjIA0KcGFnZSA8LSByZWFkX2h0bWwoaHRtbCkNCmBgYCAgDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjIyANCmNvbXBlIDwtIHBhZ2UgJT4lDQogIGh0bWxfZWxlbWVudHMoJ2Rpdi5nci1ldmVudC1uYW1lJykgJT4lDQogIGh0bWxfdGV4dCgpDQojIyMNCmNvbXBldGl0b3JfZGl2cyA8LSBwYWdlICU+JSANCiAgaHRtbF9lbGVtZW50cygiZGl2LmF0aGxldGUtYmFzaWMtbGluZSIpICMgDQoNCiMgRXh0cmFjdCBhbmQgY2xlYW4gZGF0YQ0Kc2NyYXAgPC0gY29tcGV0aXRvcl9kaXZzICU+JQ0KICBtYXBfZGYofnsNCiAgICByYW5rIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yYW5rIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBuYW1lIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yLW5hbWUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIHNjb3JlIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSIpICU+JSBodG1sX3RleHQodHJpbSA9IEZBTFNFKSAjIHNjb3JlDQogICAgI3Njb3JlLmNsYXNpZiA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUgcXVhbGkgY2VsbCIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgc2NvcmUNCiAgICB0ZWFtIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoInNwYW46bnRoLWNoaWxkKDIpIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBUZWFtDQogICAgDQogICAgIyBSZXR1cm4gYXMgYSB0aWJibGUNCiAgICB0aWJibGUoTmFtZSA9IG5hbWUsIA0KICAgICAgICAgICBSYW5rID0gcmFuaywgDQogICAgICAgICAgIFNjb3JlID0gc2NvcmUsIA0KICAgICAgICAgICAjQ2xhc2lmaWMgPSBzY29yZS5jbGFzaWYsDQogICAgICAgICAgIFRlYW0gPSB0ZWFtKQ0KICB9KQ0KIyMjDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIHNlcGFyYXRlKFNjb3JlLCBpbnRvID0gYyhOQSwgInNjb3JlIiwgIlRzIiwgIlpzIiwiU2NvcmUucmFuayIsIE5BKSwgc2VwID0gIiAiKQ0KI3NjcmFwIDwtIHNjcmFwICU+JSANCiAjIHNlcGFyYXRlKHNjb3JlLnJhbmssIGludG8gPSBjKE5BLE5BLCJzY29yZS5yYW5rIiksIHNlcCA9ICIoKSIpDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIG11dGF0ZShSYW5rID0gYXMubnVtZXJpYyhSYW5rKSwgVHMgPSBhcy5udW1lcmljKFRzKSwgWnMgPSBhcy5udW1lcmljKFpzKSkNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiU3ViMTZfTSIsIGxlbmd0aChzY3JhcCROYW1lKSApDQpzY3JhcCRDb21wZXRpdGlvbiA8LSByZXAoY29tcGUsIGxlbmd0aChzY3JhcCROYW1lKSApDQojIw0KY29tcGUNCm4uY29tcGV0aXRvcnMgPC0gbGVuZ3RoKHNjcmFwJFJhbmtbIWlzLm5hKHNjcmFwJFJhbmspXSkvMjsgbi5jb21wZXRpdG9ycw0KIyMNCnNjcmFwJHllYXIgPC0gYyhyZXAoIjIwMjMiLCBsZW5ndGgoc2NyYXAkTmFtZSkpKQ0Kc2NyYXAkc3RhZ2UgPC0gYyhyZXAoImZpbmFsIiwgOCksIHJlcChOQSwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpIC04KSwgTkEsIHJlcCgiQ2xhc2lmaWMiLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgKSApDQojIw0KIyBzY3JhcCAlPiUgcHJpbnQobj1sZW5ndGgoc2NyYXAkTmFtZSkpDQpzY3JhcFssYygxOjkpXSAlPiUgDQogIGZpbHRlcighaXMubmEoc2NvcmUpKSAlPiUNCiAgcHJpbnQobiA9IDE3KQ0KIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIyMjIyMjIyMjIw0KU3ViMTZNIDwtIHNjcmFwDQpgYGAgIA0KIyMjIFN1YjE2X0YNCg0KYGBge3J9DQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIEFic0YgRE9uZQ0KIyBBYnNNIERPTkUNCiMgU3ViMThNIERPTkUNCiMgU3ViMThGIERPTkUNCiMgU3ViMTZNIERPTkUNCiMgU3ViMTZGIA0KDQojIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCiMgdXJsIDwtICJodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mby9ldmVudC8zMC9nZW5lcmFsL2xlYWQiDQoNCiMjIyMjIyMjIyMjIyAgIGNocm9tb3RlOjogT1BUSU9OICMjIyMjIw0KIyBDcmVhdGUgYSBuZXcgQ2hyb21vdGUgc2Vzc2lvbg0KI2IgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQoNCiMgTmF2aWdhdGUgdG8gdGhlIHdlYnBhZ2UNCiMgYiRQYWdlJG5hdmlnYXRlKHVybCkNCg0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDgpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKQ0KYGBgICANCg0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQojIyMgDQpjb21wZSA8LSBwYWdlICU+JQ0KICBodG1sX2VsZW1lbnRzKCdkaXYuZ3ItZXZlbnQtbmFtZScpICU+JQ0KICBodG1sX3RleHQoKQ0KIyMjDQpjb21wZXRpdG9yX2RpdnMgPC0gcGFnZSAlPiUgDQogIGh0bWxfZWxlbWVudHMoImRpdi5hdGhsZXRlLWJhc2ljLWxpbmUiKSAjIA0KDQojIEV4dHJhY3QgYW5kIGNsZWFuIGRhdGENCnNjcmFwIDwtIGNvbXBldGl0b3JfZGl2cyAlPiUNCiAgbWFwX2RmKH57DQogICAgcmFuayA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIucmFuayIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgbmFtZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuci1uYW1lIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBzY29yZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBGQUxTRSkgIyBzY29yZQ0KICAgICNzY29yZS5jbGFzaWYgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIHF1YWxpIGNlbGwiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIHNjb3JlDQogICAgdGVhbSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCJzcGFuOm50aC1jaGlsZCgyKSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgVGVhbQ0KICAgIA0KICAgICMgUmV0dXJuIGFzIGEgdGliYmxlDQogICAgdGliYmxlKE5hbWUgPSBuYW1lLCANCiAgICAgICAgICAgUmFuayA9IHJhbmssIA0KICAgICAgICAgICBTY29yZSA9IHNjb3JlLCANCiAgICAgICAgICAgI0NsYXNpZmljID0gc2NvcmUuY2xhc2lmLA0KICAgICAgICAgICBUZWFtID0gdGVhbSkNCiAgfSkNCiMjIw0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBzZXBhcmF0ZShTY29yZSwgaW50byA9IGMoTkEsICJzY29yZSIsICJUcyIsICJacyIsIlNjb3JlLnJhbmsiLCBOQSksIHNlcCA9ICIgIikNCiNzY3JhcCA8LSBzY3JhcCAlPiUgDQogIyBzZXBhcmF0ZShzY29yZS5yYW5rLCBpbnRvID0gYyhOQSxOQSwic2NvcmUucmFuayIpLCBzZXAgPSAiKCkiKQ0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBtdXRhdGUoUmFuayA9IGFzLm51bWVyaWMoUmFuayksIFRzID0gYXMubnVtZXJpYyhUcyksIFpzID0gYXMubnVtZXJpYyhacykpDQpzY3JhcCRDYXRlZ29yeSA8LSByZXAoIlN1YjE2X0YiLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNClN1YjE2RiA8LSBzY3JhcA0KYGBgICANCg0KIyMjIFN1YjE0X00NCg0KYGBge3J9DQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIEFic0YgRE9uZQ0KIyBBYnNNIERPTkUNCiMgU3ViMThNIERPTkUNCiMgU3ViMThGIERPTkUNCiMgU3ViMTZNIERPTkUNCiMgU3ViMTZGIERPTkUNCiMgU3ViMTRNIA0KDQojIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCiMgdXJsIDwtICJodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mby9ldmVudC8zMC9nZW5lcmFsL2xlYWQiDQoNCiMjIyMjIyMjIyMjIyAgIGNocm9tb3RlOjogT1BUSU9OICMjIyMjIw0KIyBDcmVhdGUgYSBuZXcgQ2hyb21vdGUgc2Vzc2lvbg0KIyBiIDwtIENocm9tb3RlU2Vzc2lvbiRuZXcoKQ0KDQojIE5hdmlnYXRlIHRvIHRoZSB3ZWJwYWdlDQojIGIkUGFnZSRuYXZpZ2F0ZSh1cmwpDQoNCiMgRXh0cmFjdCB0aGUgcmVuZGVyZWQgSFRNTA0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoJ2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5teC0yOm50aC1jaGlsZCg5KSIpLmNsaWNrKCk7JykgICMgUmVwbGFjZSB3aXRoIHlvdXIgQ1NTIHNlbGVjdG9yDQpTeXMuc2xlZXAoNikgDQoNCiMjIyBXQUlUIGZvciAiYmFja3N0YWdlIiBwYWdlIGxvYWRpbmcgIyMjIw0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoImRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUwiKSRyZXN1bHQkdmFsdWUNCiMjIA0KcGFnZSA8LSByZWFkX2h0bWwoaHRtbCkNCmBgYCAgDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjIyANCmNvbXBlIDwtIHBhZ2UgJT4lDQogIGh0bWxfZWxlbWVudHMoJ2Rpdi5nci1ldmVudC1uYW1lJykgJT4lDQogIGh0bWxfdGV4dCgpDQojIyMNCmNvbXBldGl0b3JfZGl2cyA8LSBwYWdlICU+JSANCiAgaHRtbF9lbGVtZW50cygiZGl2LmF0aGxldGUtYmFzaWMtbGluZSIpICMgDQoNCiMgRXh0cmFjdCBhbmQgY2xlYW4gZGF0YQ0Kc2NyYXAgPC0gY29tcGV0aXRvcl9kaXZzICU+JQ0KICBtYXBfZGYofnsNCiAgICByYW5rIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yYW5rIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBuYW1lIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yLW5hbWUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIHNjb3JlIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSIpICU+JSBodG1sX3RleHQodHJpbSA9IEZBTFNFKSANCiAgICAjIHNjb3JlDQogICAgI3Njb3JlLmNsYXNpZiA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUgcXVhbGkgY2VsbCIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgc2NvcmUNCiAgICB0ZWFtIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoInNwYW46bnRoLWNoaWxkKDIpIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBUZWFtDQogICAgDQogICAgIyBSZXR1cm4gYXMgYSB0aWJibGUNCiAgICB0aWJibGUoTmFtZSA9IG5hbWUsIA0KICAgICAgICAgICBSYW5rID0gcmFuaywgDQogICAgICAgICAgIFNjb3JlID0gc2NvcmUsIA0KICAgICAgICAgICAjQ2xhc2lmaWMgPSBzY29yZS5jbGFzaWYsDQogICAgICAgICAgIFRlYW0gPSB0ZWFtKQ0KICB9KQ0KIyMjDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIHNlcGFyYXRlKFNjb3JlLCBpbnRvID0gYyhOQSwgInNjb3JlIiwgIlRzIiwgIlpzIiwiU2NvcmUucmFuayIsIE5BKSwgc2VwID0gIiAiKQ0KI3NjcmFwIDwtIHNjcmFwICU+JSANCiAjIHNlcGFyYXRlKHNjb3JlLnJhbmssIGludG8gPSBjKE5BLE5BLCJzY29yZS5yYW5rIiksIHNlcCA9ICIoKSIpDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIG11dGF0ZShSYW5rID0gYXMubnVtZXJpYyhSYW5rKSwgVHMgPSBhcy5udW1lcmljKFRzKSwgWnMgPSBhcy5udW1lcmljKFpzKSkNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiU3ViMTRfTSIsIGxlbmd0aChzY3JhcCROYW1lKSApDQpzY3JhcCRDb21wZXRpdGlvbiA8LSByZXAoY29tcGUsIGxlbmd0aChzY3JhcCROYW1lKSApDQojIw0KY29tcGUNCm4uY29tcGV0aXRvcnMgPC0gbGVuZ3RoKHNjcmFwJFJhbmtbIWlzLm5hKHNjcmFwJFJhbmspXSkvMjsgbi5jb21wZXRpdG9ycw0KIyMNCnNjcmFwJHllYXIgPC0gYyhyZXAoIjIwMjMiLCBsZW5ndGgoc2NyYXAkTmFtZSkpKQ0Kc2NyYXAkc3RhZ2UgPC0gYyhyZXAoImZpbmFsIiwgOCksIHJlcChOQSwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpIC04KSwgTkEsIHJlcCgiQ2xhc2lmaWMiLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgKSApDQojIw0KIyBzY3JhcCAlPiUgcHJpbnQobj1sZW5ndGgoc2NyYXAkTmFtZSkpDQpzY3JhcFssYygxOjkpXSAlPiUgDQogIGZpbHRlcighaXMubmEoc2NvcmUpKSAlPiUNCiAgcHJpbnQobiA9IDE3KQ0KIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIyMjIyMjIyMjIw0KU3ViMTRNIDwtIHNjcmFwDQpgYGAgIA0KDQoNCiMjIyBTdWIxNF9GDQoNCg0KYGBge3J9DQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIEFic0YgRE9uZQ0KIyBBYnNNIERPTkUNCiMgU3ViMThNIERPTkUNCiMgU3ViMThGIERPTkUNCiMgU3ViMTZNIERPTkUNCiMgU3ViMTZGIERPTkUNCiMgU3ViMTRNIERPTkUNCiMgU3ViMTRGIA0KDQojIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCiN1cmwgPC0gImh0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvL2V2ZW50LzMwL2dlbmVyYWwvbGVhZCINCg0KIyMjIyMjIyMjIyMjICAgY2hyb21vdGU6OiBPUFRJT04gIyMjIyMjDQojIENyZWF0ZSBhIG5ldyBDaHJvbW90ZSBzZXNzaW9uDQojIGIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQoNCiMgTmF2aWdhdGUgdG8gdGhlIHdlYnBhZ2UNCiMgYiRQYWdlJG5hdmlnYXRlKHVybCkNCg0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDEwKSIpLmNsaWNrKCk7JykgICMgUmVwbGFjZSB3aXRoIHlvdXIgQ1NTIHNlbGVjdG9yDQpTeXMuc2xlZXAoNikgDQoNCiMjIyBXQUlUIGZvciAiYmFja3N0YWdlIiBwYWdlIGxvYWRpbmcgIyMjIw0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoImRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUwiKSRyZXN1bHQkdmFsdWUNCiMjIA0KcGFnZSA8LSByZWFkX2h0bWwoaHRtbCkNCmBgYCAgDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjIyANCmNvbXBlIDwtIHBhZ2UgJT4lDQogIGh0bWxfZWxlbWVudHMoJ2Rpdi5nci1ldmVudC1uYW1lJykgJT4lDQogIGh0bWxfdGV4dCgpDQojIyMNCmNvbXBldGl0b3JfZGl2cyA8LSBwYWdlICU+JSANCiAgaHRtbF9lbGVtZW50cygiZGl2LmF0aGxldGUtYmFzaWMtbGluZSIpICMgDQoNCiMgRXh0cmFjdCBhbmQgY2xlYW4gZGF0YQ0Kc2NyYXAgPC0gY29tcGV0aXRvcl9kaXZzICU+JQ0KICBtYXBfZGYofnsNCiAgICByYW5rIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yYW5rIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBuYW1lIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yLW5hbWUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIHNjb3JlIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSIpICU+JSBodG1sX3RleHQodHJpbSA9IEZBTFNFKSAjIHNjb3JlDQogICAgI3Njb3JlLmNsYXNpZiA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUgcXVhbGkgY2VsbCIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgc2NvcmUNCiAgICB0ZWFtIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoInNwYW46bnRoLWNoaWxkKDIpIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBUZWFtDQogICAgDQogICAgIyBSZXR1cm4gYXMgYSB0aWJibGUNCiAgICB0aWJibGUoTmFtZSA9IG5hbWUsIA0KICAgICAgICAgICBSYW5rID0gcmFuaywgDQogICAgICAgICAgIFNjb3JlID0gc2NvcmUsIA0KICAgICAgICAgICAjQ2xhc2lmaWMgPSBzY29yZS5jbGFzaWYsDQogICAgICAgICAgIFRlYW0gPSB0ZWFtKQ0KICB9KQ0KIyMjDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIHNlcGFyYXRlKFNjb3JlLCBpbnRvID0gYyhOQSwgInNjb3JlIiwgIlRzIiwgIlpzIiwiU2NvcmUucmFuayIsIE5BKSwgc2VwID0gIiAiKQ0KI3NjcmFwIDwtIHNjcmFwICU+JSANCiAjIHNlcGFyYXRlKHNjb3JlLnJhbmssIGludG8gPSBjKE5BLE5BLCJzY29yZS5yYW5rIiksIHNlcCA9ICIoKSIpDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIG11dGF0ZShSYW5rID0gYXMubnVtZXJpYyhSYW5rKSwgVHMgPSBhcy5udW1lcmljKFRzKSwgWnMgPSBhcy5udW1lcmljKFpzKSkNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiU3ViMTRfRiIsIGxlbmd0aChzY3JhcCROYW1lKSApDQpzY3JhcCRDb21wZXRpdGlvbiA8LSByZXAoY29tcGUsIGxlbmd0aChzY3JhcCROYW1lKSApDQojIw0KY29tcGUNCm4uY29tcGV0aXRvcnMgPC0gbGVuZ3RoKHNjcmFwJFJhbmtbIWlzLm5hKHNjcmFwJFJhbmspXSkvMjsgbi5jb21wZXRpdG9ycw0KIyMNCnNjcmFwJHllYXIgPC0gYyhyZXAoIjIwMjMiLCBsZW5ndGgoc2NyYXAkTmFtZSkpKQ0Kc2NyYXAkc3RhZ2UgPC0gYyhyZXAoImZpbmFsIiwgOCksIHJlcChOQSwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpIC04KSwgTkEsIHJlcCgiQ2xhc2lmaWMiLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgKSApDQojIw0KIyBzY3JhcCAlPiUgcHJpbnQobj1sZW5ndGgoc2NyYXAkTmFtZSkpDQpzY3JhcFssYygxOjkpXSAlPiUgDQogIGZpbHRlcighaXMubmEoc2NvcmUpKSAlPiUNCiAgcHJpbnQobiA9IDE3KQ0KIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIyMjIyMjIyMjIw0KU3ViMTRGIDwtIHNjcmFwDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIFdyaXRlIGdvb2dsZSBzaGVldCAjIyMNClNlY29uZC5Cb3VsZGVyX0VTUC4yMiA8LSByYmluZChBYnNfRiwgDQogICAgICAgICAgICAgQWJzX00sIA0KICAgICAgICAgICAgIFN1YjE4TSwgDQogICAgICAgICAgICAgU3ViMThGLA0KICAgICAgICAgICAgIFN1YjE2TSwNCiAgICAgICAgICAgICBTdWIxNkYsDQogICAgICAgICAgICAgU3ViMTRNLA0KICAgICAgICAgICAgIFN1YjE0RikNClNlY29uZC5Cb3VsZGVyX0VTUC4yMiAlPiUgcHJpbnQobj1sZW5ndGgoRmlyc3QuQm91bGRlcl9FU1AuMjIkTmFtZSkpDQoNCm9wdGlvbnMoZ2FyZ2xlX29hdXRoX2VtYWlsID0gInZpbGxhdG9yb3BhemZqQGRhdGFhbmFseXNpc2xhYi5jb20iKQ0KZ3M0X2RlYXV0aCgpDQpnczRfYXV0aCgpDQpzaGVldF93cml0ZShkYXRhID0gU2Vjb25kLkJvdWxkZXJfRVNQLjIyLA0KICAgICAgICAgICAgc3M9ICJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8xa1hZVUg5X1FXTkJiZEloVmtncnRoWEFnMlNVQzVwNi1yQjY1MUhseUc2ay9lZGl0P3VzcD1zaGFyaW5nIiwgDQogICAgICAgICAgICBzaGVldD1wYXN0ZSgiU2Vjb25kLkJvdWxkZXJfRVNQLjIyIiwgIl8iLCBTeXMuRGF0ZSgpKSkNCg0KDQpgYGANCg0KDQojIyBDb3BhIEVzcGHDsWEgMjAyMiAtIDNhIFBydWViYSBCbG9xdWUNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCnVybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvMy9nZW5lcmFsL2JvdWxkZXIiDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCmIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQojIE5hdmlnYXRlIHRvIHRoZSB3ZWJwYWdlDQpiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDEpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKQ0KIyMjIA0KYGBgICANCg0KIyMjIEFic19NDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQojIyMgDQpjb21wZSA8LSBwYWdlICU+JQ0KICBodG1sX2VsZW1lbnRzKCdkaXYuZ3ItZXZlbnQtbmFtZScpICU+JQ0KICBodG1sX3RleHQoKQ0KIyMjDQpjb21wZXRpdG9yX2RpdnMgPC0gcGFnZSAlPiUgDQogIGh0bWxfZWxlbWVudHMoImRpdi5hdGhsZXRlLWJhc2ljLWxpbmUiKSAjIA0KIyMjDQoNCiMgRXh0cmFjdCBhbmQgY2xlYW4gZGF0YQ0Kc2NyYXAgPC0gY29tcGV0aXRvcl9kaXZzICU+JQ0KICBtYXBfZGYofnsNCiAgICByYW5rIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yYW5rIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBuYW1lIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yLW5hbWUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIHNjb3JlIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSIpICU+JSBodG1sX3RleHQodHJpbSA9IEZBTFNFKSAjIHNjb3JlDQogICAgI3Njb3JlLmNsYXNpZiA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUgcXVhbGkgY2VsbCIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgc2NvcmUNCiAgICB0ZWFtIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoInNwYW46bnRoLWNoaWxkKDIpIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBUZWFtDQogICAgDQogICAgIyBSZXR1cm4gYXMgYSB0aWJibGUNCiAgICB0aWJibGUoTmFtZSA9IG5hbWUsIA0KICAgICAgICAgICBSYW5rID0gcmFuaywgDQogICAgICAgICAgIFNjb3JlID0gc2NvcmUsIA0KICAgICAgICAgICAjQ2xhc2lmaWMgPSBzY29yZS5jbGFzaWYsDQogICAgICAgICAgIFRlYW0gPSB0ZWFtKQ0KICB9KQ0KIyMjDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIHNlcGFyYXRlKFNjb3JlLCBpbnRvID0gYyhOQSwgInNjb3JlIiwgIlRzIiwgIlpzIiwiU2NvcmUucmFuayIsIE5BKSwgc2VwID0gIiAiKQ0KI3NjcmFwIDwtIHNjcmFwICU+JSANCiAjIHNlcGFyYXRlKHNjb3JlLnJhbmssIGludG8gPSBjKE5BLE5BLCJzY29yZS5yYW5rIiksIHNlcCA9ICIoKSIpDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIG11dGF0ZShSYW5rID0gYXMubnVtZXJpYyhSYW5rKSwgVHMgPSBhcy5udW1lcmljKFRzKSwgWnMgPSBhcy5udW1lcmljKFpzKSkNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiQWJzX00iLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNCkFic19NIDwtIHNjcmFwDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmBgYCAgDQoNCg0KDQoNCg0KDQoNCg0KDQpgYGB7cn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIEFic0YgRE9uZQ0KIyBBYnNNDQoNCiMjIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCg0KIyB1cmwgPC0gImh0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvL2V2ZW50LzMwL2dlbmVyYWwvbGVhZCINCg0KIyMjIyMjIyMjIyMjICAgY2hyb21vdGU6OiBPUFRJT04gIyMjIyMjDQojIENyZWF0ZSBhIG5ldyBDaHJvbW90ZSBzZXNzaW9uDQojIGIgPC0gQ2hyb21vdGVTZXNzaW9uJG5ldygpDQoNCiMgTmF2aWdhdGUgdG8gdGhlIHdlYnBhZ2UNCiMgYiRQYWdlJG5hdmlnYXRlKHVybCkNCg0KIyBFeHRyYWN0IHRoZSByZW5kZXJlZCBIVE1MDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgnZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm14LTI6bnRoLWNoaWxkKDIpIikuY2xpY2soKTsnKSAgIyBSZXBsYWNlIHdpdGggeW91ciBDU1Mgc2VsZWN0b3INClN5cy5zbGVlcCg2KSANCg0KIyMjIFdBSVQgZm9yICJiYWNrc3RhZ2UiIHBhZ2UgbG9hZGluZyAjIyMjDQpodG1sIDwtIGIkUnVudGltZSRldmFsdWF0ZSgiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCIpJHJlc3VsdCR2YWx1ZQ0KIyMgDQpwYWdlIDwtIHJlYWRfaHRtbChodG1sKSAgDQpgYGAgIA0KDQojIyMgQWJzX0YNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmNvbXBlIDwtIHBhZ2UgJT4lDQogIGh0bWxfZWxlbWVudHMoJ2Rpdi5nci1ldmVudC1uYW1lJykgJT4lDQogIGh0bWxfdGV4dCgpDQojIyMNCmNvbXBldGl0b3JfZGl2cyA8LSBwYWdlICU+JSANCiAgaHRtbF9lbGVtZW50cygiZGl2LmF0aGxldGUtYmFzaWMtbGluZSIpIA0KIyMjDQoNCiMgRXh0cmFjdCBhbmQgY2xlYW4gZGF0YQ0Kc2NyYXAgPC0gY29tcGV0aXRvcl9kaXZzICU+JQ0KICBtYXBfZGYofnsNCiAgICByYW5rIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yYW5rIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBuYW1lIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yLW5hbWUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIHNjb3JlIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSIpICU+JSBodG1sX3RleHQodHJpbSA9IEZBTFNFKSAjIHNjb3JlDQogICAgI3Njb3JlLmNsYXNpZiA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUgcXVhbGkgY2VsbCIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgc2NvcmUNCiAgICB0ZWFtIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoInNwYW46bnRoLWNoaWxkKDIpIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBUZWFtDQogICAgDQogICAgIyBSZXR1cm4gYXMgYSB0aWJibGUNCiAgICB0aWJibGUoTmFtZSA9IG5hbWUsIA0KICAgICAgICAgICBSYW5rID0gcmFuaywgDQogICAgICAgICAgIFNjb3JlID0gc2NvcmUsIA0KICAgICAgICAgICAjQ2xhc2lmaWMgPSBzY29yZS5jbGFzaWYsDQogICAgICAgICAgIFRlYW0gPSB0ZWFtKQ0KICB9KQ0KIyMjDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIHNlcGFyYXRlKFNjb3JlLCBpbnRvID0gYyhOQSwgInNjb3JlIiwgIlRzIiwgIlpzIiwiU2NvcmUucmFuayIsIE5BKSwgc2VwID0gIiAiKQ0KI3NjcmFwIDwtIHNjcmFwICU+JSANCiAjIHNlcGFyYXRlKHNjb3JlLnJhbmssIGludG8gPSBjKE5BLE5BLCJzY29yZS5yYW5rIiksIHNlcCA9ICIoKSIpDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIG11dGF0ZShSYW5rID0gYXMubnVtZXJpYyhSYW5rKSwgVHMgPSBhcy5udW1lcmljKFRzKSwgWnMgPSBhcy5udW1lcmljKFpzKSkNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiQWJzX0YiLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNCkFic19GIDwtIHNjcmFwDQpgYGAgIA0KDQoNCiMjIyBTdWIxOF9NDQoNCmBgYHtyfQ0KIyBzY3JhcGluZyBhY3RpdmUgcGFnZSB1c2luZyBjaHJvbW90ZSAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyBBYnNGIERPbmUNCiMgQWJzTSBET05FDQojIFN1YjE4TQ0KDQojIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCiMgdXJsIDwtICJodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mby9ldmVudC8zMC9nZW5lcmFsL2xlYWQiDQoNCiMjIyMjIyMjIyMjIyAgIGNocm9tb3RlOjogT1BUSU9OICMjIyMjIw0KIyBDcmVhdGUgYSBuZXcgQ2hyb21vdGUgc2Vzc2lvbg0KIyBiIDwtIENocm9tb3RlU2Vzc2lvbiRuZXcoKQ0KDQojIE5hdmlnYXRlIHRvIHRoZSB3ZWJwYWdlDQojIGIkUGFnZSRuYXZpZ2F0ZSh1cmwpDQoNCiMgRXh0cmFjdCB0aGUgcmVuZGVyZWQgSFRNTA0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoJ2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5teC0yOm50aC1jaGlsZCg1KSIpLmNsaWNrKCk7JykgICMgUmVwbGFjZSB3aXRoIHlvdXIgQ1NTIHNlbGVjdG9yDQpTeXMuc2xlZXAoNikgDQoNCiMjIyBXQUlUIGZvciAiYmFja3N0YWdlIiBwYWdlIGxvYWRpbmcgIyMjIw0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoImRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUwiKSRyZXN1bHQkdmFsdWUNCiMjIA0KcGFnZSA8LSByZWFkX2h0bWwoaHRtbCkNCmBgYCAgDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjIyANCmNvbXBlIDwtIHBhZ2UgJT4lDQogIGh0bWxfZWxlbWVudHMoJ2Rpdi5nci1ldmVudC1uYW1lJykgJT4lDQogIGh0bWxfdGV4dCgpDQojIyMNCmNvbXBldGl0b3JfZGl2cyA8LSBwYWdlICU+JSANCiAgaHRtbF9lbGVtZW50cygiZGl2LmF0aGxldGUtYmFzaWMtbGluZSIpICMgDQoNCiMgRXh0cmFjdCBhbmQgY2xlYW4gZGF0YQ0Kc2NyYXAgPC0gY29tcGV0aXRvcl9kaXZzICU+JQ0KICBtYXBfZGYofnsNCiAgICByYW5rIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yYW5rIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBuYW1lIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5yLW5hbWUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIHNjb3JlIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSIpICU+JSBodG1sX3RleHQodHJpbSA9IEZBTFNFKSAjIHNjb3JlDQogICAgI3Njb3JlLmNsYXNpZiA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUgcXVhbGkgY2VsbCIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgc2NvcmUNCiAgICB0ZWFtIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoInNwYW46bnRoLWNoaWxkKDIpIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBUZWFtDQogICAgDQogICAgIyBSZXR1cm4gYXMgYSB0aWJibGUNCiAgICB0aWJibGUoTmFtZSA9IG5hbWUsIA0KICAgICAgICAgICBSYW5rID0gcmFuaywgDQogICAgICAgICAgIFNjb3JlID0gc2NvcmUsIA0KICAgICAgICAgICAjQ2xhc2lmaWMgPSBzY29yZS5jbGFzaWYsDQogICAgICAgICAgIFRlYW0gPSB0ZWFtKQ0KICB9KQ0KIyMjDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIHNlcGFyYXRlKFNjb3JlLCBpbnRvID0gYyhOQSwgInNjb3JlIiwgIlRzIiwgIlpzIiwiU2NvcmUucmFuayIsIE5BKSwgc2VwID0gIiAiKQ0KI3NjcmFwIDwtIHNjcmFwICU+JSANCiAjIHNlcGFyYXRlKHNjb3JlLnJhbmssIGludG8gPSBjKE5BLE5BLCJzY29yZS5yYW5rIiksIHNlcCA9ICIoKSIpDQpzY3JhcCA8LSBzY3JhcCAlPiUgDQogIG11dGF0ZShSYW5rID0gYXMubnVtZXJpYyhSYW5rKSwgVHMgPSBhcy5udW1lcmljKFRzKSwgWnMgPSBhcy5udW1lcmljKFpzKSkNCnNjcmFwJENhdGVnb3J5IDwtIHJlcCgiU3ViMThfTSIsIGxlbmd0aChzY3JhcCROYW1lKSApDQpzY3JhcCRDb21wZXRpdGlvbiA8LSByZXAoY29tcGUsIGxlbmd0aChzY3JhcCROYW1lKSApDQojIw0KY29tcGUNCm4uY29tcGV0aXRvcnMgPC0gbGVuZ3RoKHNjcmFwJFJhbmtbIWlzLm5hKHNjcmFwJFJhbmspXSkvMjsgbi5jb21wZXRpdG9ycw0KIyMNCnNjcmFwJHllYXIgPC0gYyhyZXAoIjIwMjMiLCBsZW5ndGgoc2NyYXAkTmFtZSkpKQ0Kc2NyYXAkc3RhZ2UgPC0gYyhyZXAoImZpbmFsIiwgOCksIHJlcChOQSwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpIC04KSwgTkEsIHJlcCgiQ2xhc2lmaWMiLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgKSApDQojIw0KIyBzY3JhcCAlPiUgcHJpbnQobj1sZW5ndGgoc2NyYXAkTmFtZSkpDQpzY3JhcFssYygxOjkpXSAlPiUgDQogIGZpbHRlcighaXMubmEoc2NvcmUpKSAlPiUNCiAgcHJpbnQobiA9IDE3KQ0KIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIyMjIyMjIyMjIw0KU3ViMThNIDwtIHNjcmFwDQpgYGAgIA0KDQojIyMgU3ViMThfRg0KDQpgYGB7cn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIEFic0YgRE9ORQ0KIyBBYnNNIERPTkUNCiMgU3ViMTggTSBET05FDQojIFN1YjE4IEYNCiMgU3ViMTYgTQ0KIyBTdWIxNiBGDQojIFN1YjE0IE0NCiMgU3ViMTQgRg0KDQojIHNjcmFwaW5nIGFjdGl2ZSBwYWdlIHVzaW5nIGNocm9tb3RlICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIEFic0YgRE9uZQ0KIyBBYnNNIERPTkUNCiMgU3ViMThNIERPTkUNCiMgU3ViMThGIA0KDQojIFVSTCBvZiB0aGUgd2VicGFnZSB0byBzY3JhcGUNCiMgdXJsIDwtICJodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mby9ldmVudC8zMC9nZW5lcmFsL2xlYWQiDQoNCiMjIyMjIyMjIyMjIyAgIGNocm9tb3RlOjogT1BUSU9OICMjIyMjIw0KIyBDcmVhdGUgYSBuZXcgQ2hyb21vdGUgc2Vzc2lvbg0KIyBiIDwtIENocm9tb3RlU2Vzc2lvbiRuZXcoKQ0KDQojIE5hdmlnYXRlIHRvIHRoZSB3ZWJwYWdlDQojIGIkUGFnZSRuYXZpZ2F0ZSh1cmwpDQoNCiMgRXh0cmFjdCB0aGUgcmVuZGVyZWQgSFRNTA0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoJ2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5teC0yOm50aC1jaGlsZCg2KSIpLmNsaWNrKCk7JykgICMgUmVwbGFjZSB3aXRoIHlvdXIgQ1NTIHNlbGVjdG9yDQpTeXMuc2xlZXAoNikgDQoNCiMjIyBXQUlUIGZvciAiYmFja3N0YWdlIiBwYWdlIGxvYWRpbmcgIyMjIw0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoImRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUwiKSRyZXN1bHQkdmFsdWUNCiMjIA0KcGFnZSA8LSByZWFkX2h0bWwoaHRtbCkNCmBgYCAgDQoNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMjIA0KY29tcGUgPC0gcGFnZSAlPiUNCiAgaHRtbF9lbGVtZW50cygnZGl2LmdyLWV2ZW50LW5hbWUnKSAlPiUNCiAgaHRtbF90ZXh0KCkNCiMjIw0KY29tcGV0aXRvcl9kaXZzIDwtIHBhZ2UgJT4lIA0KICBodG1sX2VsZW1lbnRzKCJkaXYuYXRobGV0ZS1iYXNpYy1saW5lIikgIyANCg0KIyBFeHRyYWN0IGFuZCBjbGVhbiBkYXRhDQpzY3JhcCA8LSBjb21wZXRpdG9yX2RpdnMgJT4lDQogIG1hcF9kZih+ew0KICAgIHJhbmsgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnJhbmsiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIG5hbWUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnItbmFtZSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgc2NvcmUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIikgJT4lIGh0bWxfdGV4dCh0cmltID0gRkFMU0UpICMgc2NvcmUNCiAgICAjc2NvcmUuY2xhc2lmIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSBxdWFsaSBjZWxsIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBzY29yZQ0KICAgIHRlYW0gPC0gLnggJT4lIGh0bWxfZWxlbWVudCgic3BhbjpudGgtY2hpbGQoMikiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIFRlYW0NCiAgICANCiAgICAjIFJldHVybiBhcyBhIHRpYmJsZQ0KICAgIHRpYmJsZShOYW1lID0gbmFtZSwgDQogICAgICAgICAgIFJhbmsgPSByYW5rLCANCiAgICAgICAgICAgU2NvcmUgPSBzY29yZSwgDQogICAgICAgICAgICNDbGFzaWZpYyA9IHNjb3JlLmNsYXNpZiwNCiAgICAgICAgICAgVGVhbSA9IHRlYW0pDQogIH0pDQojIyMNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgc2VwYXJhdGUoU2NvcmUsIGludG8gPSBjKE5BLCAic2NvcmUiLCAiVHMiLCAiWnMiLCJTY29yZS5yYW5rIiwgTkEpLCBzZXAgPSAiICIpDQojc2NyYXAgPC0gc2NyYXAgJT4lIA0KICMgc2VwYXJhdGUoc2NvcmUucmFuaywgaW50byA9IGMoTkEsTkEsInNjb3JlLnJhbmsiKSwgc2VwID0gIigpIikNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgbXV0YXRlKFJhbmsgPSBhcy5udW1lcmljKFJhbmspLCBUcyA9IGFzLm51bWVyaWMoVHMpLCBacyA9IGFzLm51bWVyaWMoWnMpKQ0Kc2NyYXAkQ2F0ZWdvcnkgPC0gcmVwKCJTdWIxOF9GIiwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCnNjcmFwJENvbXBldGl0aW9uIDwtIHJlcChjb21wZSwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCiMjDQpjb21wZQ0Kbi5jb21wZXRpdG9ycyA8LSBsZW5ndGgoc2NyYXAkUmFua1shaXMubmEoc2NyYXAkUmFuayldKS8yOyBuLmNvbXBldGl0b3JzDQojIw0Kc2NyYXAkeWVhciA8LSBjKHJlcCgiMjAyMyIsIGxlbmd0aChzY3JhcCROYW1lKSkpDQpzY3JhcCRzdGFnZSA8LSBjKHJlcCgiZmluYWwiLCA4KSwgcmVwKE5BLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgLTgpLCBOQSwgcmVwKCJDbGFzaWZpYyIsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSApICkNCiMjDQojIHNjcmFwICU+JSBwcmludChuPWxlbmd0aChzY3JhcCROYW1lKSkNCnNjcmFwWyxjKDE6OSldICU+JSANCiAgZmlsdGVyKCFpcy5uYShzY29yZSkpICU+JQ0KICBwcmludChuID0gMTcpDQojIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjIyMjIyMjIyMjDQpTdWIxOEYgPC0gc2NyYXANCmBgYCAgDQojIyMgU3ViMTZfTQ0KDQpgYGB7cn0NCiMgc2NyYXBpbmcgYWN0aXZlIHBhZ2UgdXNpbmcgY2hyb21vdGUgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgQWJzRiBET25lDQojIEFic00gRE9ORQ0KIyBTdWIxOE0gRE9ORQ0KIyBTdWIxOEYgRE9ORQ0KIyBTdWIxNk0NCg0KIyBVUkwgb2YgdGhlIHdlYnBhZ2UgdG8gc2NyYXBlDQojIHVybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvMzAvZ2VuZXJhbC9sZWFkIg0KDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCiMgYiA8LSBDaHJvbW90ZVNlc3Npb24kbmV3KCkNCg0KIyBOYXZpZ2F0ZSB0byB0aGUgd2VicGFnZQ0KIyBiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KDQojIEV4dHJhY3QgdGhlIHJlbmRlcmVkIEhUTUwNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCdkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubXgtMjpudGgtY2hpbGQoNykiKS5jbGljaygpOycpICAjIFJlcGxhY2Ugd2l0aCB5b3VyIENTUyBzZWxlY3Rvcg0KU3lzLnNsZWVwKDYpIA0KDQojIyMgV0FJVCBmb3IgImJhY2tzdGFnZSIgcGFnZSBsb2FkaW5nICMjIyMNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MIikkcmVzdWx0JHZhbHVlDQojIyANCnBhZ2UgPC0gcmVhZF9odG1sKGh0bWwpDQpgYGAgIA0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQojIyMgDQpjb21wZSA8LSBwYWdlICU+JQ0KICBodG1sX2VsZW1lbnRzKCdkaXYuZ3ItZXZlbnQtbmFtZScpICU+JQ0KICBodG1sX3RleHQoKQ0KIyMjDQpjb21wZXRpdG9yX2RpdnMgPC0gcGFnZSAlPiUgDQogIGh0bWxfZWxlbWVudHMoImRpdi5hdGhsZXRlLWJhc2ljLWxpbmUiKSAjIA0KDQojIEV4dHJhY3QgYW5kIGNsZWFuIGRhdGENCnNjcmFwIDwtIGNvbXBldGl0b3JfZGl2cyAlPiUNCiAgbWFwX2RmKH57DQogICAgcmFuayA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIucmFuayIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgbmFtZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuci1uYW1lIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBzY29yZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBGQUxTRSkgIyBzY29yZQ0KICAgICNzY29yZS5jbGFzaWYgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIHF1YWxpIGNlbGwiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIHNjb3JlDQogICAgdGVhbSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCJzcGFuOm50aC1jaGlsZCgyKSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgVGVhbQ0KICAgIA0KICAgICMgUmV0dXJuIGFzIGEgdGliYmxlDQogICAgdGliYmxlKE5hbWUgPSBuYW1lLCANCiAgICAgICAgICAgUmFuayA9IHJhbmssIA0KICAgICAgICAgICBTY29yZSA9IHNjb3JlLCANCiAgICAgICAgICAgI0NsYXNpZmljID0gc2NvcmUuY2xhc2lmLA0KICAgICAgICAgICBUZWFtID0gdGVhbSkNCiAgfSkNCiMjIw0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBzZXBhcmF0ZShTY29yZSwgaW50byA9IGMoTkEsICJzY29yZSIsICJUcyIsICJacyIsIlNjb3JlLnJhbmsiLCBOQSksIHNlcCA9ICIgIikNCiNzY3JhcCA8LSBzY3JhcCAlPiUgDQogIyBzZXBhcmF0ZShzY29yZS5yYW5rLCBpbnRvID0gYyhOQSxOQSwic2NvcmUucmFuayIpLCBzZXAgPSAiKCkiKQ0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBtdXRhdGUoUmFuayA9IGFzLm51bWVyaWMoUmFuayksIFRzID0gYXMubnVtZXJpYyhUcyksIFpzID0gYXMubnVtZXJpYyhacykpDQpzY3JhcCRDYXRlZ29yeSA8LSByZXAoIlN1YjE2X00iLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNClN1YjE2TSA8LSBzY3JhcA0KYGBgICANCiMjIyBTdWIxNl9GDQoNCmBgYHtyfQ0KIyBzY3JhcGluZyBhY3RpdmUgcGFnZSB1c2luZyBjaHJvbW90ZSAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyBBYnNGIERPbmUNCiMgQWJzTSBET05FDQojIFN1YjE4TSBET05FDQojIFN1YjE4RiBET05FDQojIFN1YjE2TSBET05FDQojIFN1YjE2RiANCg0KIyBVUkwgb2YgdGhlIHdlYnBhZ2UgdG8gc2NyYXBlDQojIHVybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvMzAvZ2VuZXJhbC9sZWFkIg0KDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCiNiIDwtIENocm9tb3RlU2Vzc2lvbiRuZXcoKQ0KDQojIE5hdmlnYXRlIHRvIHRoZSB3ZWJwYWdlDQojIGIkUGFnZSRuYXZpZ2F0ZSh1cmwpDQoNCiMgRXh0cmFjdCB0aGUgcmVuZGVyZWQgSFRNTA0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoJ2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5teC0yOm50aC1jaGlsZCg4KSIpLmNsaWNrKCk7JykgICMgUmVwbGFjZSB3aXRoIHlvdXIgQ1NTIHNlbGVjdG9yDQpTeXMuc2xlZXAoNikgDQoNCiMjIyBXQUlUIGZvciAiYmFja3N0YWdlIiBwYWdlIGxvYWRpbmcgIyMjIw0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoImRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUwiKSRyZXN1bHQkdmFsdWUNCiMjIA0KcGFnZSA8LSByZWFkX2h0bWwoaHRtbCkNCmBgYCAgDQoNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMjIA0KY29tcGUgPC0gcGFnZSAlPiUNCiAgaHRtbF9lbGVtZW50cygnZGl2LmdyLWV2ZW50LW5hbWUnKSAlPiUNCiAgaHRtbF90ZXh0KCkNCiMjIw0KY29tcGV0aXRvcl9kaXZzIDwtIHBhZ2UgJT4lIA0KICBodG1sX2VsZW1lbnRzKCJkaXYuYXRobGV0ZS1iYXNpYy1saW5lIikgIyANCg0KIyBFeHRyYWN0IGFuZCBjbGVhbiBkYXRhDQpzY3JhcCA8LSBjb21wZXRpdG9yX2RpdnMgJT4lDQogIG1hcF9kZih+ew0KICAgIHJhbmsgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnJhbmsiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIA0KICAgIG5hbWUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnItbmFtZSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgc2NvcmUgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIikgJT4lIGh0bWxfdGV4dCh0cmltID0gRkFMU0UpICMgc2NvcmUNCiAgICAjc2NvcmUuY2xhc2lmIDwtIC54ICU+JSBodG1sX2VsZW1lbnQoIi5zY29yZSBxdWFsaSBjZWxsIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyBzY29yZQ0KICAgIHRlYW0gPC0gLnggJT4lIGh0bWxfZWxlbWVudCgic3BhbjpudGgtY2hpbGQoMikiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIFRlYW0NCiAgICANCiAgICAjIFJldHVybiBhcyBhIHRpYmJsZQ0KICAgIHRpYmJsZShOYW1lID0gbmFtZSwgDQogICAgICAgICAgIFJhbmsgPSByYW5rLCANCiAgICAgICAgICAgU2NvcmUgPSBzY29yZSwgDQogICAgICAgICAgICNDbGFzaWZpYyA9IHNjb3JlLmNsYXNpZiwNCiAgICAgICAgICAgVGVhbSA9IHRlYW0pDQogIH0pDQojIyMNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgc2VwYXJhdGUoU2NvcmUsIGludG8gPSBjKE5BLCAic2NvcmUiLCAiVHMiLCAiWnMiLCJTY29yZS5yYW5rIiwgTkEpLCBzZXAgPSAiICIpDQojc2NyYXAgPC0gc2NyYXAgJT4lIA0KICMgc2VwYXJhdGUoc2NvcmUucmFuaywgaW50byA9IGMoTkEsTkEsInNjb3JlLnJhbmsiKSwgc2VwID0gIigpIikNCnNjcmFwIDwtIHNjcmFwICU+JSANCiAgbXV0YXRlKFJhbmsgPSBhcy5udW1lcmljKFJhbmspLCBUcyA9IGFzLm51bWVyaWMoVHMpLCBacyA9IGFzLm51bWVyaWMoWnMpKQ0Kc2NyYXAkQ2F0ZWdvcnkgPC0gcmVwKCJTdWIxNl9GIiwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCnNjcmFwJENvbXBldGl0aW9uIDwtIHJlcChjb21wZSwgbGVuZ3RoKHNjcmFwJE5hbWUpICkNCiMjDQpjb21wZQ0Kbi5jb21wZXRpdG9ycyA8LSBsZW5ndGgoc2NyYXAkUmFua1shaXMubmEoc2NyYXAkUmFuayldKS8yOyBuLmNvbXBldGl0b3JzDQojIw0Kc2NyYXAkeWVhciA8LSBjKHJlcCgiMjAyMyIsIGxlbmd0aChzY3JhcCROYW1lKSkpDQpzY3JhcCRzdGFnZSA8LSBjKHJlcCgiZmluYWwiLCA4KSwgcmVwKE5BLCAobGVuZ3RoKHNjcmFwJE5hbWVbIWlzLm5hKHNjcmFwJE5hbWUpXSkvMikgLTgpLCBOQSwgcmVwKCJDbGFzaWZpYyIsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSApICkNCiMjDQojIHNjcmFwICU+JSBwcmludChuPWxlbmd0aChzY3JhcCROYW1lKSkNCnNjcmFwWyxjKDE6OSldICU+JSANCiAgZmlsdGVyKCFpcy5uYShzY29yZSkpICU+JQ0KICBwcmludChuID0gMTcpDQojIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjIyMjIyMjIyMjDQpTdWIxNkYgPC0gc2NyYXANCmBgYCAgDQoNCiMjIyBTdWIxNF9NDQoNCmBgYHtyfQ0KIyBzY3JhcGluZyBhY3RpdmUgcGFnZSB1c2luZyBjaHJvbW90ZSAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyBBYnNGIERPbmUNCiMgQWJzTSBET05FDQojIFN1YjE4TSBET05FDQojIFN1YjE4RiBET05FDQojIFN1YjE2TSBET05FDQojIFN1YjE2RiBET05FDQojIFN1YjE0TSANCg0KIyBVUkwgb2YgdGhlIHdlYnBhZ2UgdG8gc2NyYXBlDQojIHVybCA8LSAiaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vZXZlbnQvMzAvZ2VuZXJhbC9sZWFkIg0KDQojIyMjIyMjIyMjIyMgICBjaHJvbW90ZTo6IE9QVElPTiAjIyMjIyMNCiMgQ3JlYXRlIGEgbmV3IENocm9tb3RlIHNlc3Npb24NCiMgYiA8LSBDaHJvbW90ZVNlc3Npb24kbmV3KCkNCg0KIyBOYXZpZ2F0ZSB0byB0aGUgd2VicGFnZQ0KIyBiJFBhZ2UkbmF2aWdhdGUodXJsKQ0KDQojIEV4dHJhY3QgdGhlIHJlbmRlcmVkIEhUTUwNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCdkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubXgtMjpudGgtY2hpbGQoOSkiKS5jbGljaygpOycpICAjIFJlcGxhY2Ugd2l0aCB5b3VyIENTUyBzZWxlY3Rvcg0KU3lzLnNsZWVwKDYpIA0KDQojIyMgV0FJVCBmb3IgImJhY2tzdGFnZSIgcGFnZSBsb2FkaW5nICMjIyMNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MIikkcmVzdWx0JHZhbHVlDQojIyANCnBhZ2UgPC0gcmVhZF9odG1sKGh0bWwpDQpgYGAgIA0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQojIyMgDQpjb21wZSA8LSBwYWdlICU+JQ0KICBodG1sX2VsZW1lbnRzKCdkaXYuZ3ItZXZlbnQtbmFtZScpICU+JQ0KICBodG1sX3RleHQoKQ0KIyMjDQpjb21wZXRpdG9yX2RpdnMgPC0gcGFnZSAlPiUgDQogIGh0bWxfZWxlbWVudHMoImRpdi5hdGhsZXRlLWJhc2ljLWxpbmUiKSAjIA0KDQojIEV4dHJhY3QgYW5kIGNsZWFuIGRhdGENCnNjcmFwIDwtIGNvbXBldGl0b3JfZGl2cyAlPiUNCiAgbWFwX2RmKH57DQogICAgcmFuayA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIucmFuayIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgbmFtZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuci1uYW1lIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBzY29yZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBGQUxTRSkgDQogICAgIyBzY29yZQ0KICAgICNzY29yZS5jbGFzaWYgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIHF1YWxpIGNlbGwiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIHNjb3JlDQogICAgdGVhbSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCJzcGFuOm50aC1jaGlsZCgyKSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgVGVhbQ0KICAgIA0KICAgICMgUmV0dXJuIGFzIGEgdGliYmxlDQogICAgdGliYmxlKE5hbWUgPSBuYW1lLCANCiAgICAgICAgICAgUmFuayA9IHJhbmssIA0KICAgICAgICAgICBTY29yZSA9IHNjb3JlLCANCiAgICAgICAgICAgI0NsYXNpZmljID0gc2NvcmUuY2xhc2lmLA0KICAgICAgICAgICBUZWFtID0gdGVhbSkNCiAgfSkNCiMjIw0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBzZXBhcmF0ZShTY29yZSwgaW50byA9IGMoTkEsICJzY29yZSIsICJUcyIsICJacyIsIlNjb3JlLnJhbmsiLCBOQSksIHNlcCA9ICIgIikNCiNzY3JhcCA8LSBzY3JhcCAlPiUgDQogIyBzZXBhcmF0ZShzY29yZS5yYW5rLCBpbnRvID0gYyhOQSxOQSwic2NvcmUucmFuayIpLCBzZXAgPSAiKCkiKQ0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBtdXRhdGUoUmFuayA9IGFzLm51bWVyaWMoUmFuayksIFRzID0gYXMubnVtZXJpYyhUcyksIFpzID0gYXMubnVtZXJpYyhacykpDQpzY3JhcCRDYXRlZ29yeSA8LSByZXAoIlN1YjE0X00iLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNClN1YjE0TSA8LSBzY3JhcA0KYGBgICANCg0KDQojIyMgU3ViMTRfRg0KDQoNCmBgYHtyfQ0KIyBzY3JhcGluZyBhY3RpdmUgcGFnZSB1c2luZyBjaHJvbW90ZSAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyBBYnNGIERPbmUNCiMgQWJzTSBET05FDQojIFN1YjE4TSBET05FDQojIFN1YjE4RiBET05FDQojIFN1YjE2TSBET05FDQojIFN1YjE2RiBET05FDQojIFN1YjE0TSBET05FDQojIFN1YjE0RiANCg0KIyBVUkwgb2YgdGhlIHdlYnBhZ2UgdG8gc2NyYXBlDQojdXJsIDwtICJodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mby9ldmVudC8zMC9nZW5lcmFsL2xlYWQiDQoNCiMjIyMjIyMjIyMjIyAgIGNocm9tb3RlOjogT1BUSU9OICMjIyMjIw0KIyBDcmVhdGUgYSBuZXcgQ2hyb21vdGUgc2Vzc2lvbg0KIyBiIDwtIENocm9tb3RlU2Vzc2lvbiRuZXcoKQ0KDQojIE5hdmlnYXRlIHRvIHRoZSB3ZWJwYWdlDQojIGIkUGFnZSRuYXZpZ2F0ZSh1cmwpDQoNCiMgRXh0cmFjdCB0aGUgcmVuZGVyZWQgSFRNTA0KaHRtbCA8LSBiJFJ1bnRpbWUkZXZhbHVhdGUoJ2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5teC0yOm50aC1jaGlsZCgxMCkiKS5jbGljaygpOycpICAjIFJlcGxhY2Ugd2l0aCB5b3VyIENTUyBzZWxlY3Rvcg0KU3lzLnNsZWVwKDYpIA0KDQojIyMgV0FJVCBmb3IgImJhY2tzdGFnZSIgcGFnZSBsb2FkaW5nICMjIyMNCmh0bWwgPC0gYiRSdW50aW1lJGV2YWx1YXRlKCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MIikkcmVzdWx0JHZhbHVlDQojIyANCnBhZ2UgPC0gcmVhZF9odG1sKGh0bWwpDQpgYGAgIA0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQojIyMgDQpjb21wZSA8LSBwYWdlICU+JQ0KICBodG1sX2VsZW1lbnRzKCdkaXYuZ3ItZXZlbnQtbmFtZScpICU+JQ0KICBodG1sX3RleHQoKQ0KIyMjDQpjb21wZXRpdG9yX2RpdnMgPC0gcGFnZSAlPiUgDQogIGh0bWxfZWxlbWVudHMoImRpdi5hdGhsZXRlLWJhc2ljLWxpbmUiKSAjIA0KDQojIEV4dHJhY3QgYW5kIGNsZWFuIGRhdGENCnNjcmFwIDwtIGNvbXBldGl0b3JfZGl2cyAlPiUNCiAgbWFwX2RmKH57DQogICAgcmFuayA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIucmFuayIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgDQogICAgbmFtZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuci1uYW1lIikgJT4lIGh0bWxfdGV4dCh0cmltID0gVFJVRSkgIyANCiAgICBzY29yZSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCIuc2NvcmUiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBGQUxTRSkgIyBzY29yZQ0KICAgICNzY29yZS5jbGFzaWYgPC0gLnggJT4lIGh0bWxfZWxlbWVudCgiLnNjb3JlIHF1YWxpIGNlbGwiKSAlPiUgaHRtbF90ZXh0KHRyaW0gPSBUUlVFKSAjIHNjb3JlDQogICAgdGVhbSA8LSAueCAlPiUgaHRtbF9lbGVtZW50KCJzcGFuOm50aC1jaGlsZCgyKSIpICU+JSBodG1sX3RleHQodHJpbSA9IFRSVUUpICMgVGVhbQ0KICAgIA0KICAgICMgUmV0dXJuIGFzIGEgdGliYmxlDQogICAgdGliYmxlKE5hbWUgPSBuYW1lLCANCiAgICAgICAgICAgUmFuayA9IHJhbmssIA0KICAgICAgICAgICBTY29yZSA9IHNjb3JlLCANCiAgICAgICAgICAgI0NsYXNpZmljID0gc2NvcmUuY2xhc2lmLA0KICAgICAgICAgICBUZWFtID0gdGVhbSkNCiAgfSkNCiMjIw0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBzZXBhcmF0ZShTY29yZSwgaW50byA9IGMoTkEsICJzY29yZSIsICJUcyIsICJacyIsIlNjb3JlLnJhbmsiLCBOQSksIHNlcCA9ICIgIikNCiNzY3JhcCA8LSBzY3JhcCAlPiUgDQogIyBzZXBhcmF0ZShzY29yZS5yYW5rLCBpbnRvID0gYyhOQSxOQSwic2NvcmUucmFuayIpLCBzZXAgPSAiKCkiKQ0Kc2NyYXAgPC0gc2NyYXAgJT4lIA0KICBtdXRhdGUoUmFuayA9IGFzLm51bWVyaWMoUmFuayksIFRzID0gYXMubnVtZXJpYyhUcyksIFpzID0gYXMubnVtZXJpYyhacykpDQpzY3JhcCRDYXRlZ29yeSA8LSByZXAoIlN1YjE0X0YiLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0Kc2NyYXAkQ29tcGV0aXRpb24gPC0gcmVwKGNvbXBlLCBsZW5ndGgoc2NyYXAkTmFtZSkgKQ0KIyMNCmNvbXBlDQpuLmNvbXBldGl0b3JzIDwtIGxlbmd0aChzY3JhcCRSYW5rWyFpcy5uYShzY3JhcCRSYW5rKV0pLzI7IG4uY29tcGV0aXRvcnMNCiMjDQpzY3JhcCR5ZWFyIDwtIGMocmVwKCIyMDIzIiwgbGVuZ3RoKHNjcmFwJE5hbWUpKSkNCnNjcmFwJHN0YWdlIDwtIGMocmVwKCJmaW5hbCIsIDgpLCByZXAoTkEsIChsZW5ndGgoc2NyYXAkTmFtZVshaXMubmEoc2NyYXAkTmFtZSldKS8yKSAtOCksIE5BLCByZXAoIkNsYXNpZmljIiwgKGxlbmd0aChzY3JhcCROYW1lWyFpcy5uYShzY3JhcCROYW1lKV0pLzIpICkgKQ0KIyMNCiMgc2NyYXAgJT4lIHByaW50KG49bGVuZ3RoKHNjcmFwJE5hbWUpKQ0Kc2NyYXBbLGMoMTo5KV0gJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNjb3JlKSkgJT4lDQogIHByaW50KG4gPSAxNykNCiMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNClN1YjE0RiA8LSBzY3JhcA0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyBXcml0ZSBnb29nbGUgc2hlZXQgIyMjDQpUaGlyZC5Cb3VsZGVyX0VTUC4yMiA8LSByYmluZChBYnNfRiwgDQogICAgICAgICAgICAgQWJzX00sIA0KICAgICAgICAgICAgIFN1YjE4TSwgDQogICAgICAgICAgICAgU3ViMThGLA0KICAgICAgICAgICAgIFN1YjE2TSwNCiAgICAgICAgICAgICBTdWIxNkYsDQogICAgICAgICAgICAgU3ViMTRNLA0KICAgICAgICAgICAgIFN1YjE0RikNClRoaXJkLkJvdWxkZXJfRVNQLjIyICU+JSBwcmludChuPWxlbmd0aChUaGlyZC5Cb3VsZGVyX0VTUC4yMiROYW1lKSkNCg0Kb3B0aW9ucyhnYXJnbGVfb2F1dGhfZW1haWwgPSAidmlsbGF0b3JvcGF6ZmpAZGF0YWFuYWx5c2lzbGFiLmNvbSIpDQpnczRfZGVhdXRoKCkNCmdzNF9hdXRoKCkNCnNoZWV0X3dyaXRlKGRhdGEgPSBUaGlyZC5Cb3VsZGVyX0VTUC4yMiwNCiAgICAgICAgICAgIHNzPSAiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMWtYWVVIOV9RV05CYmRJaFZrZ3J0aFhBZzJTVUM1cDYtckI2NTFIbHlHNmsvZWRpdD91c3A9c2hhcmluZyIsIA0KICAgICAgICAgICAgc2hlZXQ9cGFzdGUoIlRoaXJkLkJvdWxkZXJfRVNQLjIyIiwgIl8iLCBTeXMuRGF0ZSgpKSkNCg0KDQpgYGANCg0KDQoNCg0KIyMjIENvbnNvbGlkYWRvIGVuIGxhIFtIb2phIEdvb2dsZV0oaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMWtYWVVIOV9RV05CYmRJaFZrZ3J0aFhBZzJTVUM1cDYtckI2NTFIbHlHNmsvZWRpdD91c3A9c2hhcmluZykNCg0KDQoNCg0K