LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB3NjQgbWluZ3ctcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUi5QRCB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KI2luY2x1ZGUgPF9taW5nd19tYWMuaD4KCgkuZmlsZQkibG9nMXBsLlMiCgkudGV4dAojaWZkZWYgX1dJTjY0CgkuYWxpZ24gOAojZWxzZQoJLmFsaWduIDQKI2VuZGlmCgkvKiBUaGUgZnlsMnhwMSBjYW4gb25seSBiZSB1c2VkIGZvciB2YWx1ZXMgaW4KCSAgIC0xICsgc3FydCgyKSAvIDIgPD0geCA8PSAxIC0gc3FydCgyKSAvIDIKCSAgIDAuMjkgaXMgYSBzYWZlIHZhbHVlLgoJICovCmxpbWl0OgkudGZsb2F0IDAuMjkKCS8qIFBsZWFzZSBub3RlOgkgd2UgdXNlIGEgZG91YmxlIHZhbHVlIGhlcmUuICBTaW5jZSAxLjAgaGFzCgkgICBhbiBleGFjdCByZXByZXNlbnRhdGlvbiB0aGlzIGRvZXMgbm90IGVmZmVjdCB0aGUgYWNjdXJhY3kKCSAgIGJ1dCBpdCBoZWxwcyB0byBvcHRpbWl6ZSB0aGUgY29kZS4gICovCm9uZToJLmRvdWJsZSAxLjAKCi8qCiAqIFVzZSB0aGUgZnlsMnhwMSBmdW5jdGlvbiB3aGVuIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgcmFuZ2UgLTAuMjkgdG8gMC4yOSwKICogb3RoZXJ3aXNlIGZ5bDJ4IHdpdGggdGhlIG5lZWRlZCBleHRyYSBjb21wdXRhdGlvbi4KICovCi5nbG9ibCBfX01JTkdXX1VTWU1CT0wobG9nMXBsKQoJLmRlZglfX01JTkdXX1VTWU1CT0wobG9nMXBsKTsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCl9fTUlOR1dfVVNZTUJPTChsb2cxcGwpOgojaWZkZWYgX1dJTjY0CglmbGRsbjIKCWZsZHQJKCVyZHgpCglmeGFtCglmbnN0c3cKCWZsZAklc3QKCXNhaGYKCWpjCTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYKNDoKCWZhYnMKCWZsZHQJbGltaXQoJXJpcCkKCWZjb21wcAoJZm5zdHN3CglzYWhmCglqbmMJMmYKCWZhZGRsCW9uZSglcmlwKQoJZnlsMngKCW1vdnEJJXJjeCwlcmF4Cgltb3ZxCSQwLDgoJXJjeCkKCWZzdHB0CSglcmN4KQoJcmV0CgoyOglmeWwyeHAxCgltb3ZxCSVyY3gsJXJheAoJbW92cQkkMCw4KCVyY3gpCglmc3RwdAkoJXJjeCkKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCW1vdnEJJXJjeCwlcmF4Cgltb3ZxCSQwLDgoJXJjeCkKCWZzdHB0CSglcmN4KQoJcmV0CiNlbHNlCglmbGRsbjIKCWZsZHQJNCglZXNwKQoJZnhhbQoJZm5zdHN3CglmbGQJJXN0CglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CglmYWJzCglmbGR0CWxpbWl0CglmY29tcHAKCWZuc3RzdwoJc2FoZgoJam5jCTJmCglmYWRkbAlvbmUKCWZ5bDJ4CglyZXQKCjI6CWZ5bDJ4cDEKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCXJldAojZW5kaWYK