I2lmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgZGVmaW5lZChfX3NwYXJjdjkpCiMgZGVmaW5lIEFCSTY0ICAvKiBUaGV5J3ZlIHNhaWQgLXhhcmNoPXY5IGF0IGNvbW1hbmQgbGluZSAqLwojZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCiMgZGVmaW5lIEFCSTY0ICAvKiBUaGV5J3ZlIHNhaWQgLW02NCBhdCBjb21tYW5kIGxpbmUgKi8KI2VuZGlmCgojaWZkZWYgQUJJNjQKICAucmVnaXN0ZXIJJWcyLCNzY3JhdGNoCiAgLnJlZ2lzdGVyCSVnMywjc2NyYXRjaAojIGRlZmluZQlGUkFNRQktMTkyCiMgZGVmaW5lCUJJQVMJMjA0NwojZWxzZQojIGRlZmluZQlGUkFNRQktOTYKIyBkZWZpbmUJQklBUwkwCiNlbmRpZgoKLnRleHQKLmFsaWduCTMyCi5nbG9iYWwJT1BFTlNTTF93aXBlX2NwdQoudHlwZQlPUEVOU1NMX3dpcGVfY3B1LCNmdW5jdGlvbgohIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgZG9lcyBub3QgZXhjdXNlIHVzIGZyb20gd2lwaW5nIHRoZSBzdGFjayEKISBUaGlzIHJvdXRpbmUgd2lwZXMgcmVnaXN0ZXJzLCBidXQgbm90IHRoZSBiYWNraW5nIHN0b3JlIFt3aGljaAohIHJlc2lkZXMgb24gdGhlIHN0YWNrLCB0b3dhcmQgbG93ZXIgYWRkcmVzc2VzXS4gVG8gZmFjaWxpdGF0ZSBmb3IKISBzdGFjayB3aXBpbmcgSSByZXR1cm4gcG9pbnRlciB0byB0aGUgdG9wIG9mIHN0YWNrIG9mIHRoZSAqY2FsbGVyKi4KT1BFTlNTTF93aXBlX2NwdToKCXNhdmUJJXNwLEZSQU1FLCVzcAoJbm9wCiNpZmRlZiBfX3N1bgojaW5jbHVkZSA8c3lzL3RyYXAuaD4KCXRhCVNUX0NMRUFOX1dJTkRPV1MKI2Vsc2UKCWNhbGwJLndhbGsucmVnLndpbnMKI2VuZGlmCglub3AKCWNhbGwJLlBJQy56ZXJvLnVwCgltb3YJLnplcm8tKC4tNCksJW8wCglsZAlbJW8wXSwlZjAKCWxkCVslbzBdLCVmMQoKCXN1YmNjCSVnMCwxLCVvMAoJISBGb2xsb3dpbmcgaXMgVjkgInJkICVjY3IsJW8wIiBpbnN0cnVjdGlvbi4gSG93ZXZlciEgVjgKCSEgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgaXQgKCJyZCAlYXNyMiwlbzAiIGluIFY4IHRlcm1zKSBkb2VzCgkhIG5vdCBjYXVzZSBpbGxlZ2FsX2luc3RydWN0aW9uIHRyYXAuIEl0IHRoZXJlZm9yZSBjYW4gYmUgdXNlZAoJISB0byBkZXRlcm1pbmUgaWYgdGhlIENQVSB0aGUgY29kZSBpcyBleGVjdXRpbmcgb24gaXMgVjgtIG9yCgkhIFY5LWNvbXBsaWFudCwgYXMgVjkgcmV0dXJucyBhIGRpc3RpbmN0IHZhbHVlIG9mIDB4OTksCgkhICJuZWdhdGl2ZSIgYW5kICJib3Jyb3ciIGJpdHMgc2V0IGluIGJvdGggJWljYyBhbmQgJXhjYy4KCS53b3JkCTB4OTE0MDgwMDAJIXJkCSVjY3IsJW8wCgljbXAJJW8wLDB4OTkKCWJuZQkudjgKCW5vcAoJCQkhIEV2ZW4gdGhvdWdoIHdlIGRvIG5vdCB1c2UgJWZwIHJlZ2lzdGVyIGJhbmssCgkJCSEgd2Ugd2lwZSBpdCBhcyBtZW1jcHkgbWlnaHQgaGF2ZSB1c2VkIGl0Li4uCgkJCS53b3JkCTB4YmZhMDAwNDAJIWZtb3ZkCSVmMCwlZjYyCgkJCS53b3JkCTB4YmJhMDAwNDAJIS4uLgoJCQkud29yZAkweGI3YTAwMDQwCgkJCS53b3JkCTB4YjNhMDAwNDAKCQkJLndvcmQJMHhhZmEwMDA0MAoJCQkud29yZAkweGFiYTAwMDQwCgkJCS53b3JkCTB4YTdhMDAwNDAKCQkJLndvcmQJMHhhM2EwMDA0MAoJCQkud29yZAkweDlmYTAwMDQwCgkJCS53b3JkCTB4OWJhMDAwNDAKCQkJLndvcmQJMHg5N2EwMDA0MAoJCQkud29yZAkweDkzYTAwMDQwCgkJCS53b3JkCTB4OGZhMDAwNDAKCQkJLndvcmQJMHg4YmEwMDA0MAoJCQkud29yZAkweDg3YTAwMDQwCgkJCS53b3JkCTB4ODNhMDAwNDAJIWZtb3ZkCSVmMCwlZjMyCi52ODoJCQlmbW92cwklZjEsJWYzMQoJY2xyCSVvMAoJCQlmbW92cwklZjAsJWYzMAoJY2xyCSVvMQoJCQlmbW92cwklZjEsJWYyOQoJY2xyCSVvMgoJCQlmbW92cwklZjAsJWYyOAoJY2xyCSVvMwoJCQlmbW92cwklZjEsJWYyNwoJY2xyCSVvNAoJCQlmbW92cwklZjAsJWYyNgoJY2xyCSVvNQoJCQlmbW92cwklZjEsJWYyNQoJY2xyCSVvNwoJCQlmbW92cwklZjAsJWYyNAoJY2xyCSVsMAoJCQlmbW92cwklZjEsJWYyMwoJY2xyCSVsMQoJCQlmbW92cwklZjAsJWYyMgoJY2xyCSVsMgoJCQlmbW92cwklZjEsJWYyMQoJY2xyCSVsMwoJCQlmbW92cwklZjAsJWYyMAoJY2xyCSVsNAoJCQlmbW92cwklZjEsJWYxOQoJY2xyCSVsNQoJCQlmbW92cwklZjAsJWYxOAoJY2xyCSVsNgoJCQlmbW92cwklZjEsJWYxNwoJY2xyCSVsNwoJCQlmbW92cwklZjAsJWYxNgoJY2xyCSVpMAoJCQlmbW92cwklZjEsJWYxNQoJY2xyCSVpMQoJCQlmbW92cwklZjAsJWYxNAoJY2xyCSVpMgoJCQlmbW92cwklZjEsJWYxMwoJY2xyCSVpMwoJCQlmbW92cwklZjAsJWYxMgoJY2xyCSVpNAoJCQlmbW92cwklZjEsJWYxMQoJY2xyCSVpNQoJCQlmbW92cwklZjAsJWYxMAoJY2xyCSVnMQoJCQlmbW92cwklZjEsJWY5CgljbHIJJWcyCgkJCWZtb3ZzCSVmMCwlZjgKCWNscgklZzMKCQkJZm1vdnMJJWYxLCVmNwoJY2xyCSVnNAoJCQlmbW92cwklZjAsJWY2CgljbHIJJWc1CgkJCWZtb3ZzCSVmMSwlZjUKCQkJZm1vdnMJJWYwLCVmNAoJCQlmbW92cwklZjEsJWYzCgkJCWZtb3ZzCSVmMCwlZjIKCglhZGQJJWZwLEJJQVMsJWkwCSEgcmV0dXJuIHBvaW50ZXIgdG8gY2FsbGVytHMgdG9wIG9mIHN0YWNrCgoJcmV0CglyZXN0b3JlCgouemVybzoJLmxvbmcJMHgwLDB4MAouUElDLnplcm8udXA6CglyZXRsCglhZGQJJW8wLCVvNywlbzAKI2lmZGVmIERFQlVHCi5nbG9iYWwJd2Fsa19yZWdfd2lucwoudHlwZQl3YWxrX3JlZ193aW5zLCNmdW5jdGlvbgp3YWxrX3JlZ193aW5zOgojZW5kaWYKLndhbGsucmVnLndpbnM6CglzYXZlCSVzcCxGUkFNRSwlc3AKCWNtcAklaTcsJW83CgliZQkyZgoJY2xyCSVvMAoJY21wCSVvNywwCSEgY29tcGlsZXIgbmV2ZXIgY2xlYW5zICVvNy4uLgoJYmUJMWYJISBjb3VsZCBoYXZlIGJlZW4gYSBsZWFmIGZ1bmN0aW9uLi4uCgljbHIJJW8xCgljYWxsCS53YWxrLnJlZy53aW5zCglub3AKMToJY2xyCSVvMgoJY2xyCSVvMwoJY2xyCSVvNAoJY2xyCSVvNQoJY2xyCSVvNwoJY2xyCSVsMAoJY2xyCSVsMQoJY2xyCSVsMgoJY2xyCSVsMwoJY2xyCSVsNAoJY2xyCSVsNQoJY2xyCSVsNgoJY2xyCSVsNwoJYWRkCSVvMCwxLCVpMAkhIHVzZWQgZm9yIGRlYnVnZ2luZwoyOglyZXQKCXJlc3RvcmUKLnNpemUJT1BFTlNTTF93aXBlX2NwdSwuLU9QRU5TU0xfd2lwZV9jcHUKCi5nbG9iYWwJT1BFTlNTTF9hdG9taWNfYWRkCi50eXBlCU9QRU5TU0xfYXRvbWljX2FkZCwjZnVuY3Rpb24KLmFsaWduCTMyCk9QRU5TU0xfYXRvbWljX2FkZDoKI2lmbmRlZiBBQkk2NAoJc3ViY2MJJWcwLDEsJW8yCgkud29yZAkweDk1NDA4MDAwCSFyZAklY2NyLCVvMiwgc2VlIGNvbW1lbnQgYWJvdmUKCWNtcAklbzIsMHg5OQoJYmUJLnY5Cglub3AKCXNhdmUJJXNwLEZSQU1FLCVzcAoJYmEJLmVudGVyCglub3AKI2lmZGVmIF9fc3VuCiEgTm90ZSB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGxpbmsgd2l0aCBsaWJ0aHJlYWQgdG8gY2FsbCB0aHJfeWllbGQsCiEgYXMgbGliYyBwcm92aWRlcyBhIHN0dWIsIHdoaWNoIGlzIG92ZXJsb2FkZWQgdGhlIG1vbWVudCB5b3UgbGluawohIHdpdGggKmVpdGhlciogbGlicHRocmVhZCBvciBsaWJ0aHJlYWQuLi4KI2RlZmluZQlZSUVMRF9DUFUJdGhyX3lpZWxkCiNlbHNlCiEgYXBwbGllcyBhdCBsZWFzdCB0byBMaW51eCBhbmQgRnJlZUJTRC4uLiBGZWVkYmFjayBleHBlY3RlZC4uLgojZGVmaW5lCVlJRUxEX0NQVQlzY2hlZF95aWVsZAojZW5kaWYKLnNwaW46CWNhbGwJWUlFTERfQ1BVCglub3AKLmVudGVyOglsZAlbJWkwXSwlaTIKCWNtcAklaTIsLTQwOTYKCWJlCS5zcGluCgltb3YJLTEsJWkyCglzd2FwCVslaTBdLCVpMgoJY21wCSVpMiwtMQoJYmUJLnNwaW4KCWFkZAklaTIsJWkxLCVpMgoJc3RiYXIKCXN0CSVpMixbJWkwXQoJc3JhCSVpMiwlZzAsJWkwCglyZXQKCXJlc3RvcmUKLnY5OgojZW5kaWYKCWxkCVslbzBdLCVvMgoxOglhZGQJJW8xLCVvMiwlbzMKCS53b3JkCTB4ZDdlMjEwMGEJIWNhcyBbJW8wXSwlbzIsJW8zLCBjb21wYXJlIFslbzBdIHdpdGggJW8yIGFuZCBzd2FwICVvMwoJY21wCSVvMiwlbzMKCWJuZQkxYgoJbW92CSVvMywlbzIJCSEgY2FzIGlzIGFsd2F5cyBmZXRjaGluZyB0byBkZXN0LiByZWdpc3RlcgoJYWRkCSVvMSwlbzIsJW8wCSEgT3BlblNTTCBleHBlY3RzIHRoZSBuZXcgdmFsdWUKCXJldGwKCXNyYQklbzAsJWcwLCVvMAkhIHdlIHJldHVybiBzaWduZWQgaW50LCByZW1lbWJlcj8KLnNpemUJT1BFTlNTTF9hdG9taWNfYWRkLC4tT1BFTlNTTF9hdG9taWNfYWRkCgouZ2xvYmFsCV9zcGFyY3Y5X3JkdGljawouYWxpZ24JMzIKX3NwYXJjdjlfcmR0aWNrOgoJc3ViY2MJJWcwLDEsJW8wCgkud29yZAkweDkxNDA4MDAwCSFyZAklY2NyLCVvMAoJY21wCSVvMCwweDk5CglibmUJLm5vdGljawoJeG9yCSVvMCwlbzAsJW8wCgkud29yZAkweDkxNDEwMDAwCSFyZAkldGljaywlbzAKCXJldGwKCS53b3JkCTB4OTMzMjMwMjAJIXNybHgJJW8yLDMyLCVvMQoubm90aWNrOgoJcmV0bAoJeG9yCSVvMSwlbzEsJW8xCi50eXBlCV9zcGFyY3Y5X3JkdGljaywjZnVuY3Rpb24KLnNpemUJX3NwYXJjdjlfcmR0aWNrLC4tX3NwYXJjdjlfcmR0aWNrCgouZ2xvYmFsCU9QRU5TU0xfY2xlYW5zZQouYWxpZ24JMzIKT1BFTlNTTF9jbGVhbnNlOgoJY21wCSVvMSwxNAoJbm9wCiNpZmRlZiBBQkk2NAoJYmd1CSV4Y2MsLkxvdAojZWxzZQoJYmd1CS5Mb3QKI2VuZGlmCgljbXAJJW8xLDAKCWJuZQkuTGl0dGxlCglub3AKCXJldGwKCW5vcAoKLkxpdHRsZToKCXN0YgklZzAsWyVvMF0KCXN1YmNjCSVvMSwxLCVvMQoJYm56CS5MaXR0bGUKCWFkZAklbzAsMSwlbzAKCXJldGwKCW5vcAouYWxpZ24JMzIKLkxvdDoKI2lmbmRlZiBBQkk2NAoJc3ViY2MJJWcwLDEsJWcxCgkhIHNlZSBhYm92ZSBmb3IgZXhwbGFuYXRpb24KCS53b3JkCTB4ODM0MDgwMDAJIXJkCSVjY3IsJWcxCgljbXAJJWcxLDB4OTkKCWJuZQkudjhsb3QKCW5vcAojZW5kaWYKCi52OWxvdDoJYW5kY2MJJW8wLDcsJWcwCgliegkudjlhbGlnbmVkCglub3AKCXN0YgklZzAsWyVvMF0KCXN1YgklbzEsMSwlbzEKCWJhCS52OWxvdAoJYWRkCSVvMCwxLCVvMAouYWxpZ24JMTYsMHgwMTAwMDAwMAoudjlhbGlnbmVkOgoJLndvcmQJMHhjMDcyMDAwMAkhc3R4CSVnMCxbJW8wXQoJc3ViCSVvMSw4LCVvMQoJYW5kY2MJJW8xLC04LCVnMAojaWZkZWYgQUJJNjQKCS53b3JkCTB4MTI2ZmZmZmQJIWJuegkleGNjLC52OWFsaWduZWQKI2Vsc2UKCS53b3JkCTB4MTI0ZmZmZmQJIWJuegklaWNjLC52OWFsaWduZWQKI2VuZGlmCglhZGQJJW8wLDgsJW8wCgoJY21wCSVvMSwwCglibmUJLkxpdHRsZQoJbm9wCglyZXRsCglub3AKI2lmbmRlZiBBQkk2NAoudjhsb3Q6CWFuZGNjCSVvMCwzLCVnMAoJYnoJLnY4YWxpZ25lZAoJbm9wCglzdGIJJWcwLFslbzBdCglzdWIJJW8xLDEsJW8xCgliYQkudjhsb3QKCWFkZAklbzAsMSwlbzAKCW5vcAoudjhhbGlnbmVkOgoJc3QJJWcwLFslbzBdCglzdWIJJW8xLDQsJW8xCglhbmRjYwklbzEsLTQsJWcwCglibnoJLnY4YWxpZ25lZAoJYWRkCSVvMCw0LCVvMAoKCWNtcAklbzEsMAoJYm5lCS5MaXR0bGUKCW5vcAoJcmV0bAoJbm9wCiNlbmRpZgoudHlwZQlPUEVOU1NMX2NsZWFuc2UsI2Z1bmN0aW9uCi5zaXplCU9QRU5TU0xfY2xlYW5zZSwuLU9QRU5TU0xfY2xlYW5zZQoKLnNlY3Rpb24JIi5pbml0IiwjYWxsb2MsI2V4ZWNpbnN0cgoJY2FsbAlPUEVOU1NMX2NwdWlkX3NldHVwCglub3AK