LyoKICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICogUHVibGljIGRvbWFpbi4KICogQWRhcHRlZCBmb3IgZmxvYXQgdHlwZSBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPi4KICoKICogQ2hhbmdlZCB0byB1c2UgZnlsMnhwMSBmb3IgdmFsdWVzIG5lYXIgMSwgPGRyZXBwZXJAY3lnbnVzLmNvbT4uCiAqLwoKI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CgoJLnNlY3Rpb24gLnJvZGF0YS5jc3Q4LCJhTSIsQHByb2diaXRzLDgKCgkucDJhbGlnbiAzCgkudHlwZSBvbmUsQG9iamVjdApvbmU6CS5kb3VibGUgMS4wCglBU01fU0laRV9ESVJFQ1RJVkUob25lKQoJLyogSXQgaXMgbm90IGltcG9ydGFudCB0aGF0IHRoaXMgY29uc3RhbnQgaXMgcHJlY2lzZS4gIEl0IGlzIG9ubHkKCSAgIGEgdmFsdWUgd2hpY2ggaXMga25vd24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZSBmb3IgdXNpbmcgdGhlCgkgICBmeWwyeHAxIGluc3RydWN0aW9uLiAgKi8KCS50eXBlIGxpbWl0LEBvYmplY3QKbGltaXQ6CS5kb3VibGUgMC4yOQoJQVNNX1NJWkVfRElSRUNUSVZFKGxpbWl0KQoKCiNpZmRlZiBQSUMKIyBkZWZpbmUgTU8ob3ApIG9wIyNAR09UT0ZGKCVlZHgpCiNlbHNlCiMgZGVmaW5lIE1PKG9wKSBvcAojZW5kaWYKCgkudGV4dApFTlRSWShfX2llZWU3NTRfbG9nMTBmKQoJZmxkbGcyCQkJLy8gbG9nMTAoMikKCWZsZHMJNCglZXNwKQkJLy8geCA6IGxvZzEwKDIpCiNpZmRlZiBQSUMKCUxPQURfUElDX1JFRyAoZHgpCiNlbmRpZgoJZnhhbQoJZm5zdHN3CglmbGQJJXN0CQkvLyB4IDogeCA6IGxvZzEwKDIpCglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CWZzdWJsCU1PKG9uZSkJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IGxvZzEwKDIpCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZjb21wbAlNTyhsaW1pdCkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWFuZGIJJDB4NDUsICVhaAoJanoJMmYKCWZ4YW0KCWZuc3RzdwoJYW5kYgkkMHg0NSwgJWFoCgljbXBiCSQweDQwLCAlYWgKCWpuZQk1ZgoJZmFicwkJCS8vIGxvZzEwKDEpIGlzICswIGluIGFsbCByb3VuZGluZyBtb2Rlcy4KNToJZnN0cAklc3QoMSkJCS8vIHgtMSA6IGxvZzEwKDIpCglmeWwyeHAxCQkJLy8gbG9nMTAoeCkKCXJldAoKMjoJZnN0cAklc3QoMCkJCS8vIHggOiBsb2cxMCgyKQoJZnlsMngJCQkvLyBsb2cxMCh4KQoJcmV0CgozOglqcAk0YgkJLy8gaW4gY2FzZSB4IGlzILFJbmYKCWZzdHAJJXN0KDEpCglmc3RwCSVzdCgxKQoJcmV0CkVORCAoX19pZWVlNzU0X2xvZzEwZikKc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfbG9nMTBmLCBfX2xvZzEwZl9maW5pdGUpCg==