LyoKICogRE9TIEVYRSBsb2FkZXIKICoKICogQ29weXJpZ2h0IDE5OTggT3ZlIEvldmVuCiAqLwoKI2lmbmRlZiBfX1dJTkVfRE9TRVhFX0gKI2RlZmluZSBfX1dJTkVfRE9TRVhFX0gKCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgIndpbmRvd3MuaCIKI2luY2x1ZGUgIndpbm50LmgiCiNpbmNsdWRlICJzaWdfY29udGV4dC5oIgojaW5jbHVkZSAid2ludHlwZXMuaCIKCnR5cGVkZWYgc3RydWN0IF9ET1NUQVNLIHsKIExQVk9JRCBpbWc7CiB1bnNpZ25lZCBpbWdfb2ZzOwogV09SRCBwc3Bfc2VnLGxvYWRfc2VnOwogV09SRCBpbml0X2NzLGluaXRfaXAsaW5pdF9zcyxpbml0X3NwOwogV09SRCB4bXNfc2VnOwogV09SRCBkcG1pX3NlZyxkcG1pX3NlbCxkcG1pX2ZsYWc7CiBXT1JEIHN5c3RlbV90aW1lcjsKIEhNT0RVTEUxNiBoTW9kdWxlOwogY2hhciBtbV9uYW1lWzEyOF07CiBpbnQgbW1fZmQ7CiBpbnQgcmVhZF9waXBlLHdyaXRlX3BpcGU7CiBwaWRfdCB0YXNrOwp9IERPU1RBU0ssICpMUERPU1RBU0s7CgojaWYgZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChfX2kzODZfXykKCiNkZWZpbmUgTVpfU1VQUE9SVEVECgpzdHJ1Y3QgX05FX01PRFVMRTsKCmV4dGVybiBpbnQgTVpfSW5pdFRhc2soIExQRE9TVEFTSyBscERvc1Rhc2sgKTsKZXh0ZXJuIGludCBNWl9Jbml0TWVtb3J5KCBMUERPU1RBU0sgbHBEb3NUYXNrLCBzdHJ1Y3QgX05FX01PRFVMRSAqcE1vZHVsZSApOwpleHRlcm4gdm9pZCBNWl9LaWxsTW9kdWxlKCBMUERPU1RBU0sgbHBEb3NUYXNrICk7CmV4dGVybiBMUERPU1RBU0sgTVpfQWxsb2NEUE1JVGFzayggSE1PRFVMRTE2IGhNb2R1bGUgKTsKCiNlbmRpZiAvKiBsaW51eC1pMzg2ICovCgojZGVmaW5lIFY4Nl9GTEFHIDB4MDAwMjAwMDAKCmV4dGVybiB2b2lkIE1aX1RpY2soIFdPUkQgaGFuZGxlICk7CgpleHRlcm4gSElOU1RBTkNFMTYgTVpfQ3JlYXRlUHJvY2VzcyggTFBDU1RSIG5hbWUsIExQQ1NUUiBjbWRsaW5lLCBMUENTVFIgZW52LCBCT09MMzIgaW5oZXJpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RBUlRVUElORk8zMkEgc3RhcnR1cCwgTFBQUk9DRVNTX0lORk9STUFUSU9OIGluZm8gKTsKZXh0ZXJuIGludCBET1NWTV9FbnRlciggUENPTlRFWFQgY29udGV4dCApOwpleHRlcm4gdm9pZCBET1NWTV9TZXRUaW1lciggdW5zaWduZWQgdGlja3MgKTsKZXh0ZXJuIHVuc2lnbmVkIERPU1ZNX0dldFRpbWVyKCB2b2lkICk7CgojZW5kaWYgLyogX19XSU5FX0RPU0VYRV9IICovCg==