LyoKICogRE9TIEVYRSBsb2FkZXIKICoKICogQ29weXJpZ2h0IDE5OTggT3ZlIEvldmVuCiAqLwoKI2lmbmRlZiBfX1dJTkVfRE9TRVhFX0gKI2RlZmluZSBfX1dJTkVfRE9TRVhFX0gKCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogcGlkX3QgKi8KI2luY2x1ZGUgIndpbmJhc2UuaCIgICAvKiBmb3IgTFBTVEFSVFVQSU5GTzMyQSAqLwojaW5jbHVkZSAid2lubnQuaCIgICAgIC8qIGZvciBQQ09OVEVYVCAqLwoKc3RydWN0IF9ET1NFVkVOVDsKCnR5cGVkZWYgc3RydWN0IF9ET1NUQVNLIHsKIFdPUkQgcHNwX3NlZywgcmV0dmFsOwogV09SRCBkcG1pX2ZsYWc7Cn0gRE9TVEFTSywgKkxQRE9TVEFTSzsKCiNkZWZpbmUgRE9TX1BSSU9SSVRZX1JFQUxUSU1FIDAgIC8qIElSUTAgKi8KI2RlZmluZSBET1NfUFJJT1JJVFlfS0VZQk9BUkQgMSAgLyogSVJRMSAqLwojZGVmaW5lIERPU19QUklPUklUWV9WR0EgICAgICAyICAvKiBJUlE5ICovCiNkZWZpbmUgRE9TX1BSSU9SSVRZX01PVVNFICAgIDUgIC8qIElSUTEyICovCiNkZWZpbmUgRE9TX1BSSU9SSVRZX1NFUklBTCAgIDEwIC8qIElSUTQgKi8KCiNpZiBkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKF9faTM4Nl9fKQojZGVmaW5lIE1aX1NVUFBPUlRFRAojZW5kaWYgLyogbGludXgtaTM4NiAqLwoKI2RlZmluZSBWODZfRkxBRyAweDAwMDIwMDAwCgpleHRlcm4gQk9PTCBNWl9Mb2FkSW1hZ2UoIExQQ1NUUiBjbWRsaW5lICk7CmV4dGVybiBCT09MIE1aX0V4ZWMoIENPTlRFWFQ4NiAqY29udGV4dCwgTFBDU1RSIGZpbGVuYW1lLCBCWVRFIGZ1bmMsIExQVk9JRCBwYXJhbWJsayApOwpleHRlcm4gdm9pZCBNWl9FeGl0KCBDT05URVhUODYgKmNvbnRleHQsIEJPT0wgY3NfcHNwLCBXT1JEIHJldHZhbCApOwpleHRlcm4gTFBET1NUQVNLIE1aX0N1cnJlbnQoIHZvaWQgKTsKZXh0ZXJuIExQRE9TVEFTSyBNWl9BbGxvY0RQTUlUYXNrKCB2b2lkICk7CmV4dGVybiBpbnQgRE9TVk1fRW50ZXIoIENPTlRFWFQ4NiAqY29udGV4dCApOwpleHRlcm4gdm9pZCBET1NWTV9XYWl0KCBpbnQgcmVhZF9waXBlLCBIQU5ETEUgaE9iamVjdCApOwpleHRlcm4gdm9pZCBET1NWTV9RdWV1ZUV2ZW50KCBpbnQgaXJxLCBpbnQgcHJpb3JpdHksIHZvaWQgKCpyZWxheSkoQ09OVEVYVDg2Kix2b2lkKiksIHZvaWQgKmRhdGEgKTsKZXh0ZXJuIHZvaWQgRE9TVk1fUElDX2lvcG9ydF9vdXQoIFdPUkQgcG9ydCwgQllURSB2YWwgKTsKZXh0ZXJuIHZvaWQgRE9TVk1fU2V0VGltZXIoIHVuc2lnbmVkIHRpY2tzICk7CmV4dGVybiB1bnNpZ25lZCBET1NWTV9HZXRUaW1lciggdm9pZCApOwoKI2VuZGlmIC8qIF9fV0lORV9ET1NFWEVfSCAqLwo=