IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgR0hBU0ggZm9yIGZvciBQb3dlcklTQSB2Mi4wNy4KIwojIEp1bHkgMjAxNAojCiMgQWNjdXJhdGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzIGFyZSBwcm9ibGVtYXRpYywgYmVjYXVzZSBpdCdzCiMgYWx3YXlzIHZpcnR1YWxpemVkIHNldHVwIHdpdGggcG9zc2libHkgdGhyb3R0bGVkIHByb2Nlc3Nvci4KIyBSZWxhdGl2ZSBjb21wYXJpc29uIGlzIHRoZXJlZm9yZSBtb3JlIGluZm9ybWF0aXZlLiBUaGlzIGluaXRpYWwKIyB2ZXJzaW9uIGlzIH4yLjF4IHNsb3dlciB0aGFuIGhhcmR3YXJlLWFzc2lzdGVkIEFFUy0xMjgtQ1RSLCB+MTJ4CiMgZmFzdGVyIHRoYW4gIjQtYml0IiBpbnRlZ2VyLW9ubHkgY29tcGlsZXItZ2VuZXJhdGVkIDY0LWJpdCBjb2RlLgojICJJbml0aWFsIHZlcnNpb24iIG1lYW5zIHRoYXQgdGhlcmUgaXMgcm9vbSBmb3IgZnV0aGVyIGltcHJvdmVtZW50LgoKJGZsYXZvdXI9c2hpZnQ7CiRvdXRwdXQgPXNoaWZ0OwoKaWYgKCRmbGF2b3VyID1+IC82NC8pIHsKCSRTSVpFX1Q9ODsKCSRMUlNBVkU9MiokU0laRV9UOwoJJFNUVT0ic3RkdSI7CgkkUE9QPSJsZCI7CgkkUFVTSD0ic3RkIjsKfSBlbHNpZiAoJGZsYXZvdXIgPX4gLzMyLykgewoJJFNJWkVfVD00OwoJJExSU0FWRT0kU0laRV9UOwoJJFNUVT0ic3R3dSI7CgkkUE9QPSJsd3oiOwoJJFBVU0g9InN0dyI7Cn0gZWxzZSB7IGRpZSAibm9uc2Vuc2UgJGZsYXZvdXIiOyB9CgokMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwooICR4bGF0ZT0iJHtkaXJ9cHBjLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20vcHBjLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgpkaWUgImNhbid0IGxvY2F0ZSBwcGMteGxhdGUucGwiOwoKb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkZmxhdm91ciAkb3V0cHV0IiB8fCBkaWUgImNhbid0IGNhbGwgJHhsYXRlOiAkISI7CgpteSAoJFhpcCwkSHRibCwkaW5wLCRsZW4pPW1hcCgiciRfIiwoMy4uNikpOwkjIGFyZ3VtZW50IGJsb2NrCgpteSAoJFhsLCRYbSwkWGgsJElOKT1tYXAoInYkXyIsKDAuLjMpKTsKbXkgKCR6ZXJvLCR0MCwkdDEsJHQyLCR4QzIsJEgsJEhoLCRIbCwkbGVtYXNrKT1tYXAoInYkXyIsKDQuLjEyKSk7Cm15ICR2cnNhdmU9InIxMiI7CgokY29kZT08PF9fXzsKLm1hY2hpbmUJImFueSIKCi50ZXh0CgouZ2xvYmwJLmdjbV9pbml0X3A4CglsaXMJCXIwLDB4ZmZmMAoJbGkJCXI4LDB4MTAKCW1mc3ByCQkkdnJzYXZlLDI1NgoJbGkJCXI5LDB4MjAKCW10c3ByCQkyNTYscjAKCWxpCQlyMTAsMHgzMAoJbHZ4X3UJCSRILDAscjQJCQkjIGxvYWQgSAoKCXZzcGx0aXNiCSR4QzIsLTE2CQkjIDB4ZjAKCXZzcGx0aXNiCSR0MCwxCQkJIyBvbmUKCXZhZGR1Ym0JCSR4QzIsJHhDMiwkeEMyCQkjIDB4ZTAKCXZ4b3IJCSR6ZXJvLCR6ZXJvLCR6ZXJvCgl2b3IJCSR4QzIsJHhDMiwkdDAJCSMgMHhlMQoJdnNsZG9pCQkkeEMyLCR4QzIsJHplcm8sMTUJIyAweGUxLi4uCgl2c2xkb2kJCSR0MSwkemVybywkdDAsMQkJIyAuLi4xCgl2YWRkdWJtCQkkeEMyLCR4QzIsJHhDMgkJIyAweGMyLi4uCgl2c3BsdGlzYgkkdDIsNwoJdm9yCQkkeEMyLCR4QzIsJHQxCQkjIDB4YzIuLi4uMDEKCXZzcGx0YgkJJHQxLCRILDAJCSMgbW9zdCBzaWduaWZpY2FudCBieXRlCgl2c2wJCSRILCRILCR0MAkJIyBIPDw9MQoJdnNyYWIJCSR0MSwkdDEsJHQyCQkjIGJyb2FkY2FzdCBjYXJyeSBiaXQKCXZhbmQJCSR0MSwkdDEsJHhDMgoJdnhvcgkJJEgsJEgsJHQxCQkjIHR3aXN0ZWQgSAoKCXZzbGRvaQkJJEgsJEgsJEgsOAkJIyB0d2lzdCBldmVuIG1vcmUgLi4uCgl2c2xkb2kJCSR4QzIsJHplcm8sJHhDMiw4CSMgMHhjMi4wCgl2c2xkb2kJCSRIbCwkemVybywkSCw4CQkjIC4uLiBhbmQgc3BsaXQKCXZzbGRvaQkJJEhoLCRILCR6ZXJvLDgKCglzdHZ4X3UJCSR4QzIsMCxyMwkJIyBzYXZlIHByZS1jb21wdXRlZCB0YWJsZQoJc3R2eF91CQkkSGwscjgscjMKCXN0dnhfdQkJJEgsIHI5LHIzCglzdHZ4X3UJCSRIaCxyMTAscjMKCgltdHNwcgkJMjU2LCR2cnNhdmUKCWJscgoJLmxvbmcJCTAKCS5ieXRlCQkwLDEyLDB4MTQsMCwwLDAsMiwwCgkubG9uZwkJMAouc2l6ZQkuZ2NtX2luaXRfcDgsLi0uZ2NtX2luaXRfcDgKCi5nbG9ibAkuZ2NtX2dtdWx0X3A4CglsaXMJCXIwLDB4ZmZmOAoJbGkJCXI4LDB4MTAKCW1mc3ByCQkkdnJzYXZlLDI1NgoJbGkJCXI5LDB4MjAKCW10c3ByCQkyNTYscjAKCWxpCQlyMTAsMHgzMAoJbHZ4X3UJCSRJTiwwLCRYaXAJCSMgbG9hZCBYaQoKCWx2eF91CQkkSGwscjgsJEh0YmwJCSMgbG9hZCBwcmUtY29tcHV0ZWQgdGFibGUKCSBsZT9sdnNsCSRsZW1hc2sscjAscjAKCWx2eF91CQkkSCwgcjksJEh0YmwKCSBsZT92c3BsdGlzYgkkdDAsMHgwNwoJbHZ4X3UJCSRIaCxyMTAsJEh0YmwKCSBsZT92eG9yCSRsZW1hc2ssJGxlbWFzaywkdDAKCWx2eF91CQkkeEMyLDAsJEh0YmwKCSBsZT92cGVybQkkSU4sJElOLCRJTiwkbGVtYXNrCgl2eG9yCQkkemVybywkemVybywkemVybwoKCXZwbXN1bWQJCSRYbCwkSU4sJEhsCQkjIEgubG+3WGkubG8KCXZwbXN1bWQJCSRYbSwkSU4sJEgJCSMgSC5oabdYaS5sbytILmxvt1hpLmhpCgl2cG1zdW1kCQkkWGgsJElOLCRIaAkJIyBILmhpt1hpLmhpCgoJdnBtc3VtZAkJJHQyLCRYbCwkeEMyCQkjIDFzdCBwaGFzZQoKCXZzbGRvaQkJJHQwLCRYbSwkemVybyw4Cgl2c2xkb2kJCSR0MSwkemVybywkWG0sOAoJdnhvcgkJJFhsLCRYbCwkdDAKCXZ4b3IJCSRYaCwkWGgsJHQxCgoJdnNsZG9pCQkkWGwsJFhsLCRYbCw4Cgl2eG9yCQkkWGwsJFhsLCR0MgoKCXZzbGRvaQkJJHQxLCRYbCwkWGwsOAkJIyAybmQgcGhhc2UKCXZwbXN1bWQJCSRYbCwkWGwsJHhDMgoJdnhvcgkJJHQxLCR0MSwkWGgKCXZ4b3IJCSRYbCwkWGwsJHQxCgoJbGU/dnBlcm0JJFhsLCRYbCwkWGwsJGxlbWFzawoJc3R2eF91CQkkWGwsMCwkWGlwCQkjIHdyaXRlIG91dCBYaQoKCW10c3ByCQkyNTYsJHZyc2F2ZQoJYmxyCgkubG9uZwkJMAoJLmJ5dGUJCTAsMTIsMHgxNCwwLDAsMCwyLDAKCS5sb25nCQkwCi5zaXplCS5nY21fZ211bHRfcDgsLi0uZ2NtX2dtdWx0X3A4CgouZ2xvYmwJLmdjbV9naGFzaF9wOAoJbGlzCQlyMCwweGZmZjgKCWxpCQlyOCwweDEwCgltZnNwcgkJJHZyc2F2ZSwyNTYKCWxpCQlyOSwweDIwCgltdHNwcgkJMjU2LHIwCglsaQkJcjEwLDB4MzAKCWx2eF91CQkkWGwsMCwkWGlwCQkjIGxvYWQgWGkKCglsdnhfdQkJJEhsLHI4LCRIdGJsCQkjIGxvYWQgcHJlLWNvbXB1dGVkIHRhYmxlCgkgbGU/bHZzbAkkbGVtYXNrLHIwLHIwCglsdnhfdQkJJEgsIHI5LCRIdGJsCgkgbGU/dnNwbHRpc2IJJHQwLDB4MDcKCWx2eF91CQkkSGgscjEwLCRIdGJsCgkgbGU/dnhvcgkkbGVtYXNrLCRsZW1hc2ssJHQwCglsdnhfdQkJJHhDMiwwLCRIdGJsCgkgbGU/dnBlcm0JJFhsLCRYbCwkWGwsJGxlbWFzawoJdnhvcgkJJHplcm8sJHplcm8sJHplcm8KCglsdnhfdQkJJElOLDAsJGlucAoJYWRkaQkJJGlucCwkaW5wLDE2CglzdWJpCQkkbGVuLCRsZW4sMTYKCSBsZT92cGVybQkkSU4sJElOLCRJTiwkbGVtYXNrCgl2eG9yCQkkSU4sJElOLCRYbAoJYgkJTG9vcAoKLmFsaWduCTUKTG9vcDoKCSBzdWJpYwkJJGxlbiwkbGVuLDE2Cgl2cG1zdW1kCQkkWGwsJElOLCRIbAkJIyBILmxvt1hpLmxvCgkgc3ViZmUuCQlyMCxyMCxyMAkJIyBib3Jyb3c/LTE6MAoJdnBtc3VtZAkJJFhtLCRJTiwkSAkJIyBILmhpt1hpLmxvK0gubG+3WGkuaGkKCSBhbmQJCXIwLHIwLCRsZW4KCXZwbXN1bWQJCSRYaCwkSU4sJEhoCQkjIEguaGm3WGkuaGkKCSBhZGQJCSRpbnAsJGlucCxyMAoKCXZwbXN1bWQJCSR0MiwkWGwsJHhDMgkJIyAxc3QgcGhhc2UKCgl2c2xkb2kJCSR0MCwkWG0sJHplcm8sOAoJdnNsZG9pCQkkdDEsJHplcm8sJFhtLDgKCXZ4b3IJCSRYbCwkWGwsJHQwCgl2eG9yCQkkWGgsJFhoLCR0MQoKCXZzbGRvaQkJJFhsLCRYbCwkWGwsOAoJdnhvcgkJJFhsLCRYbCwkdDIKCSBsdnhfdQkJJElOLDAsJGlucAoJIGFkZGkJCSRpbnAsJGlucCwxNgoKCXZzbGRvaQkJJHQxLCRYbCwkWGwsOAkJIyAybmQgcGhhc2UKCXZwbXN1bWQJCSRYbCwkWGwsJHhDMgoJIGxlP3ZwZXJtCSRJTiwkSU4sJElOLCRsZW1hc2sKCXZ4b3IJCSR0MSwkdDEsJFhoCgl2eG9yCQkkSU4sJElOLCR0MQoJdnhvcgkJJElOLCRJTiwkWGwKCWJlcQkJTG9vcAkJCSMgZGlkICRsZW4tPTE2IGJvcnJvdz8KCgl2eG9yCQkkWGwsJFhsLCR0MQoJbGU/dnBlcm0JJFhsLCRYbCwkWGwsJGxlbWFzawoJc3R2eF91CQkkWGwsMCwkWGlwCQkjIHdyaXRlIG91dCBYaQoKCW10c3ByCQkyNTYsJHZyc2F2ZQoJYmxyCgkubG9uZwkJMAoJLmJ5dGUJCTAsMTIsMHgxNCwwLDAsMCw0LDAKCS5sb25nCQkwCi5zaXplCS5nY21fZ2hhc2hfcDgsLi0uZ2NtX2doYXNoX3A4CgouYXNjaXogICJHSEFTSCBmb3IgUG93ZXJJU0EgMi4wNywgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKLmFsaWduICAyCl9fXwoKZm9yZWFjaCAoc3BsaXQoIlxuIiwkY29kZSkpIHsKCWlmICgkZmxhdm91ciA9fiAvbGUkL28pIHsJIyBsaXR0bGUtZW5kaWFuCgkgICAgcy9sZVw/Ly9vCQlvcgoJICAgIHMvYmVcPy8jYmUjL287Cgl9IGVsc2UgewoJICAgIHMvbGVcPy8jbGUjL28Jb3IKCSAgICBzL2JlXD8vL287Cgl9CglwcmludCAkXywiXG4iOwp9CgpjbG9zZSBTVERPVVQ7ICMgZW5mb3JjZSBmbHVzaAo=