LyoKICogVkdBIGVtdWxhdGlvbgogKiAKICogQ29weXJpZ2h0IDE5OTggT3ZlIEvFdmVuCiAqCiAqLwoKI2lmbmRlZiBfX1dJTkVfVkdBX0gKI2RlZmluZSBfX1dJTkVfVkdBX0gKCiNpbmNsdWRlICJ3aW5iYXNlLmgiCiNpbmNsdWRlICJ3aW5nZGkuaCIKCi8qIGdyYXBoaWNzIG1vZGUgKi8KaW50IFZHQV9TZXRNb2RlKHVuc2lnbmVkIFhyZXMsdW5zaWduZWQgWXJlcyx1bnNpZ25lZCBEZXB0aCk7CmludCBWR0FfR2V0TW9kZSh1bnNpZ25lZCpIZWlnaHQsdW5zaWduZWQqV2lkdGgsdW5zaWduZWQqRGVwdGgpOwp2b2lkIFZHQV9FeGl0KHZvaWQpOwp2b2lkIFZHQV9TZXRQYWxldHRlKFBBTEVUVEVFTlRSWSpwYWwsaW50IHN0YXJ0LGludCBsZW4pOwp2b2lkIFZHQV9TZXRRdWFkUGFsZXR0ZShSR0JRVUFEKmNvbG9yLGludCBzdGFydCxpbnQgbGVuKTsKTFBTVFIgVkdBX0xvY2sodW5zaWduZWQqUGl0Y2gsdW5zaWduZWQqSGVpZ2h0LHVuc2lnbmVkKldpZHRoLHVuc2lnbmVkKkRlcHRoKTsKdm9pZCBWR0FfVW5sb2NrKHZvaWQpOwoKLyogdGV4dCBtb2RlICovCmludCBWR0FfU2V0QWxwaGFNb2RlKHVuc2lnbmVkIFhyZXMsdW5zaWduZWQgWXJlcyk7CnZvaWQgVkdBX0dldEFscGhhTW9kZSh1bnNpZ25lZCpYcmVzLHVuc2lnbmVkKllyZXMpOwp2b2lkIFZHQV9TZXRDdXJzb3JQb3ModW5zaWduZWQgWCx1bnNpZ25lZCBZKTsKdm9pZCBWR0FfR2V0Q3Vyc29yUG9zKHVuc2lnbmVkKlgsdW5zaWduZWQqWSk7CgovKiBjb250cm9sICovCnZvaWQgQ0FMTEJBQ0sgVkdBX1BvbGwoVUxPTkdfUFRSIGFyZyk7CnZvaWQgVkdBX2lvcG9ydF9vdXQoV09SRCBwb3J0LCBCWVRFIHZhbCk7CkJZVEUgVkdBX2lvcG9ydF9pbihXT1JEIHBvcnQpOwp2b2lkIFZHQV9DbGVhbih2b2lkKTsKCiNlbmRpZiAvKiBfX1dJTkVfVkdBX0ggKi8K