LyoKICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICogQWRhcHRlZCBmb3IgdXNlIGFzIGxvZzIgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4uCiAqIFB1YmxpYyBkb21haW4uCiAqCiAqIENoYW5nZWQgdG8gdXNlIGZ5bDJ4cDEgZm9yIHZhbHVlcyBuZWFyIDEsIDxkcmVwcGVyQGN5Z251cy5jb20+LgogKiBBZGFwdGVkIGZvciB4ODYtNjQgYnkgQW5kcmVhcyBKYWVnZXIgPGFqQHN1c2UuZGU+LgogKi8KCiNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgoKI2lmZGVmIF9fRUxGX18KCS5zZWN0aW9uIC5yb2RhdGEKI2Vsc2UKCS50ZXh0CiNlbmRpZgoJLmFsaWduIEFMSUdOQVJHKDQpCglBU01fVFlQRV9ESVJFQ1RJVkUob25lLEBvYmplY3QpCm9uZToJLmRvdWJsZSAxLjAKCUFTTV9TSVpFX0RJUkVDVElWRShvbmUpCgkvKiBJdCBpcyBub3QgaW1wb3J0YW50IHRoYXQgdGhpcyBjb25zdGFudCBpcyBwcmVjaXNlLiAgSXQgaXMgb25seQoJICAgYSB2YWx1ZSB3aGljaCBpcyBrbm93biB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIGZvciB1c2luZyB0aGUKCSAgIGZ5bDJ4cDEgaW5zdHJ1Y3Rpb24uICAqLwoJQVNNX1RZUEVfRElSRUNUSVZFKGxpbWl0LEBvYmplY3QpCmxpbWl0OgkuZG91YmxlIDAuMjkKCUFTTV9TSVpFX0RJUkVDVElWRShsaW1pdCkKCgojaWZkZWYgUElDCiNkZWZpbmUgTU8ob3ApIG9wIyMoJXJpcCkKI2Vsc2UKI2RlZmluZSBNTyhvcCkgb3AKI2VuZGlmCgoJLnRleHQKRU5UUlkoX19pZWVlNzU0X2xvZzJsKQoJZmxkbAlNTyhvbmUpCglmbGR0CTgoJXJzcCkJCS8vIHggOiAxCglmeGFtCglmbnN0c3cKCWZsZAklc3QJCS8vIHggOiB4IDogMQoJdGVzdGIJJDEsICVhaAoJam56CTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYKNDoJZnN1Ygklc3QoMiksICVzdAkvLyB4LTEgOiB4IDogMQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IDEKCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiAxCglmY29tcGwJTU8obGltaXQpCS8vIHgtMSA6IHggOiAxCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogMQoJYW5kYgkkMHg0NSwgJWFoCglqegkyZgoJZnN0cAklc3QoMSkJCS8vIHgtMSA6IDEKCWZ5bDJ4cDEJCQkvLyBsb2coeCkKCXJldAoKMjoJZnN0cAklc3QoMCkJCS8vIHggOiAxCglmeWwyeAkJCS8vIGxvZyh4KQoJcmV0CgozOgl0ZXN0YgkkNCwgJWFoCglqbnoJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCXJldApFTkQgKF9faWVlZTc1NF9sb2cybCkK