Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgX19fXyAgICAgICAgICAgICAgICAgICAgICAgIF8gICAgICBfCi8vICAgICAvIF9fX3xfX19fIF8gICBfIF9fX18gICBfX19ffCB8X18gIHwgfAovLyAgICB8IHwgICAvIF9fX3wgfCB8IHwgIF8gIFwvIF9fX3wgIF8gIFx8IHwKLy8gICAgfCB8X19ffCB8ICB8IHxffCB8IHwgfCB8IHxfX198IHwgfCB8fF98Ci8vICAgICBcX19fX3xffCAgXF9fX19ffF98IHxffFxfX19ffF98IHxffChfKSBNZWRpYSBiZW5jaG1hcmtzCi8vICAgICAgICAgICAKLy8JIKkgMjAwNiwgSW50ZWwgQ29ycG9yYXRpb24sIGxpY2Vuc2VkIHVuZGVyIEFwYWNoZSAyLjAgCi8vCi8vICBmaWxlIDogQ2FtZXJhTW9kZWwuY3BwCi8vICBhdXRob3IgOiBKZWFuLVl2ZXMgQm91Z3VldCAtIGplYW4teXZlcy5ib3VndWV0QGludGVsLmNvbQovLwkJCSBTY290dCBFdHRpbmdlciAtIHNjb3R0Lm0uZXR0aW5nZXJAaW50ZWwuY29tCi8vICBkZXNjcmlwdGlvbiA6IENhbWVyYSBNb2RlbCBkZXNjcmlwdGlvbiAoc2luZ2xlIGFuZCBtdWx0aXBsZSkuCi8vICBtb2RpZmllZCA6IAovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKI2lmIGRlZmluZWQoSEFWRV9DT05GSUdfSCkKIyBpbmNsdWRlICJjb25maWcuaCIKI2VuZGlmCgojaW5jbHVkZSAiQ2FtZXJhTW9kZWwuaCIKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIERNYXRyaXhmIERNYXRyaXg8ZmxvYXQ+Cgpib29sIENhbWVyYTo6TG9hZFBhcmFtcyhjb25zdCBjaGFyICpmbmFtZSkKewkvL2xvYWQgcGFyYW1ldGVycyBmcm9tIGZpbGUKCWlmc3RyZWFtIGYoZm5hbWUpOwoJaWYoIWYuaXNfb3BlbigpKQoJewljb3V0IDw8ICJVbmFibGUgdG8gb3BlbiBjYW1lcmEgY2FsaWJyYXRpb24gZmlsZSA6ICIgPDwgZm5hbWUgPDwgZW5kbDsKCQlyZXR1cm4gZmFsc2U7Cgl9CglmID4+IGZjLnggPj4gZmMueSA+PiBjYy54ID4+IGNjLnkgPj4gYWxwaGFfYzsKCWYgPj4ga2NbMF0gPj4ga2NbMV0gPj4ga2NbMl0gPj4ga2NbM10gPj4ga2NbNF07CglmID4+IFJjX2V4dFswXVswXSA+PiBSY19leHRbMF1bMV0gPj4gUmNfZXh0WzBdWzJdID4+IFJjX2V4dFsxXVswXSA+PiBSY19leHRbMV1bMV0gPj4gUmNfZXh0WzFdWzJdID4+IFJjX2V4dFsyXVswXSA+PiBSY19leHRbMl1bMV0gPj4gUmNfZXh0WzJdWzJdOwoJZiA+PiBUY19leHQueCA+PiBUY19leHQueSA+PiBUY19leHQuejsKCWYgPj4gb21jX2V4dC54ID4+IG9tY19leHQueSA+PiBvbWNfZXh0Lno7CgoJLy9Db21wdXRlIHRoZSBmdWxsIGV4dHJpbnNpY3MgbWF0cml4IGFuZCB0aGUgd29ybGQgY29vcmRpbmF0ZSBwb3NpdGlvbiBvZiB0aGUgY2FtZXJhCgltY19leHQoMCwwKSA9IFJjX2V4dFswXVswXTsgbWNfZXh0KDAsMSkgPSBSY19leHRbMF1bMV07IG1jX2V4dCgwLDIpID0gUmNfZXh0WzBdWzJdOyBtY19leHQoMCwzKSA9IFRjX2V4dC54OwoJbWNfZXh0KDEsMCkgPSBSY19leHRbMV1bMF07CW1jX2V4dCgxLDEpID0gUmNfZXh0WzFdWzFdOyBtY19leHQoMSwyKSA9IFJjX2V4dFsxXVsyXTsJbWNfZXh0KDEsMykgPSBUY19leHQueTsKCW1jX2V4dCgyLDApID0gUmNfZXh0WzJdWzBdOwltY19leHQoMiwxKSA9IFJjX2V4dFsyXVsxXTsJbWNfZXh0KDIsMikgPSBSY19leHRbMl1bMl07IG1jX2V4dCgyLDMpID0gVGNfZXh0Lno7CglETWF0cml4ZiBtMiA9IEludmVyc2UobWNfZXh0KTsKCQoJZXllLnggPSBtMigwLDMpOyBleWUueSA9IG0yKDEsMyk7IGV5ZS56ID0gbTIoMiwzKTsJLy9jYW1lcmEgbG9jYXRpb24gaW4gd29ybGQgc3BhY2UKCXJldHVybiB0cnVlOwp9Cgo=