LyoKICogIGluY2x1ZGUvYXNtLXBwYy9oeWRyYS5oIC0tIE1hYyBJL08gYEh5ZHJhJyBkZWZpbml0aW9ucwogKgogKiAgQ29weXJpZ2h0IChDKSAxOTk3IEdlZXJ0IFV5dHRlcmhvZXZlbgogKgogKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjoKICoKICoJTWFjaW50b3NoIFRlY2hub2xvZ3kgaW4gdGhlIENvbW1vbiBIYXJkd2FyZSBSZWZlcmVuY2UgUGxhdGZvcm0KICoJQXBwbGUgQ29tcHV0ZXIsIEluYy4KICoKICoJqSBDb3B5cmlnaHQgMTk5NSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiAgSXQncyBhdmFpbGFibGUgb25saW5lIGZyb20gaHR0cDovL2NocnAuYXBwbGUuY29tL01hY1RlY2gucGRmLgogKiAgWW91IGNhbiBvYnRhaW4gcGFwZXIgY29waWVzIG9mIHRoaXMgYm9vayBmcm9tIGNvbXB1dGVyIGJvb2tzdG9yZXMgb3IgYnkKICogIHdyaXRpbmcgTW9yZ2FuIEthdWZtYW5uIFB1Ymxpc2hlcnMsIEluYy4sIDM0MCBQaW5lIFN0cmVldCwgU2l4dGggRmxvb3IsIFNhbgogKiAgRnJhbmNpc2NvLCBDQSA5NDEwNC4gUmVmZXJlbmNlIElTQk4gMS01NTg2MC0zOTMtWC4KICoKICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogKiAgZm9yIG1vcmUgZGV0YWlscy4KICovCgojaWZuZGVmIF9BU01QUENfSFlEUkFfSAojZGVmaW5lIF9BU01QUENfSFlEUkFfSAoKI2lmZGVmIF9fS0VSTkVMX18KCnN0cnVjdCBIeWRyYSB7CiAgICAvKiBEQkRNQSBDb250cm9sbGVyIFJlZ2lzdGVyIFNwYWNlICovCiAgICBjaGFyIFBhZDFbMHgzMF07CiAgICB1X2ludCBDYWNoZVBEOwogICAgdV9pbnQgSURzOwogICAgdV9pbnQgRmVhdHVyZV9Db250cm9sOwogICAgY2hhciBQYWQyWzB4N2ZjNF07CiAgICAvKiBEQkRNQSBDaGFubmVsIFJlZ2lzdGVyIFNwYWNlICovCiAgICBjaGFyIFNDU0lfRE1BWzB4MTAwXTsKICAgIGNoYXIgUGFkM1sweDMwMF07CiAgICBjaGFyIFNDQ0FfVHhfRE1BWzB4MTAwXTsKICAgIGNoYXIgU0NDQV9SeF9ETUFbMHgxMDBdOwogICAgY2hhciBTQ0NCX1R4X0RNQVsweDEwMF07CiAgICBjaGFyIFNDQ0JfUnhfRE1BWzB4MTAwXTsKICAgIGNoYXIgUGFkNFsweDc4MDBdOwogICAgLyogRGV2aWNlIFJlZ2lzdGVyIFNwYWNlICovCiAgICBjaGFyIFNDU0lbMHgxMDAwXTsKICAgIGNoYXIgQURCWzB4MTAwMF07CiAgICBjaGFyIFNDQ19MZWdhY3lbMHgxMDAwXTsKICAgIGNoYXIgU0NDWzB4MTAwMF07CiAgICBjaGFyIFBhZDlbMHgyMDAwXTsKICAgIGNoYXIgVklBWzB4MjAwMF07CiAgICBjaGFyIFBhZDEwWzB4MjgwMDBdOwogICAgY2hhciBPcGVuUElDWzB4NDAwMDBdOwp9OwoKZXh0ZXJuIHZvbGF0aWxlIHN0cnVjdCBIeWRyYSAqSHlkcmE7CgoKICAgIC8qCiAgICAgKiAgRmVhdHVyZSBDb250cm9sIFJlZ2lzdGVyCiAgICAgKi8KCiNkZWZpbmUgSFlEUkFfRkNfU0NDX0NFTExfRU4JMHgwMDAwMDAwMQkvKiBFbmFibGUgU0NDIENsb2NrICovCiNkZWZpbmUgSFlEUkFfRkNfU0NTSV9DRUxMX0VOCTB4MDAwMDAwMDIJLyogRW5hYmxlIFNDU0kgQ2xvY2sgKi8KI2RlZmluZSBIWURSQV9GQ19TQ0NBX0VOQUJMRQkweDAwMDAwMDA0CS8qIEVuYWJsZSBTQ0MgQSBMaW5lcyAqLwojZGVmaW5lIEhZRFJBX0ZDX1NDQ0JfRU5BQkxFCTB4MDAwMDAwMDgJLyogRW5hYmxlIFNDQyBCIExpbmVzICovCiNkZWZpbmUgSFlEUkFfRkNfQVJCX0JZUEFTUwkweDAwMDAwMDEwCS8qIEJ5cGFzcyBJbnRlcm5hbCBBcmJpdGVyICovCiNkZWZpbmUgSFlEUkFfRkNfUkVTRVRfU0NDCTB4MDAwMDAwMjAJLyogUmVzZXQgU0NDICovCiNkZWZpbmUgSFlEUkFfRkNfTVBJQ19FTkFCTEUJMHgwMDAwMDA0MAkvKiBFbmFibGUgT3BlblBJQyAqLwojZGVmaW5lIEhZRFJBX0ZDX1NMT1dfU0NDX1BDTEsJMHgwMDAwMDA4MAkvKiAxPTE1LjY2NzIsIDA9MjUgTUh6ICovCiNkZWZpbmUgSFlEUkFfRkNfTVBJQ19JU19NQVNURVIJMHgwMDAwMDEwMAkvKiBPcGVuUElDIE1hc3RlciBNb2RlICovCgoKICAgIC8qCiAgICAgKiAgT3BlblBJQyBJbnRlcnJ1cHQgU291cmNlcwogICAgICovCgojZGVmaW5lIEhZRFJBX0lOVF9TSU8JCTAKI2RlZmluZSBIWURSQV9JTlRfU0NTSV9ETUEJMQojZGVmaW5lIEhZRFJBX0lOVF9TQ0NBX1RYX0RNQQkyCiNkZWZpbmUgSFlEUkFfSU5UX1NDQ0FfUlhfRE1BCTMKI2RlZmluZSBIWURSQV9JTlRfU0NDQl9UWF9ETUEJNAojZGVmaW5lIEhZRFJBX0lOVF9TQ0NCX1JYX0RNQQk1CiNkZWZpbmUgSFlEUkFfSU5UX1NDU0kJCTYKI2RlZmluZSBIWURSQV9JTlRfU0NDQQkJNwojZGVmaW5lIEhZRFJBX0lOVF9TQ0NCCQk4CiNkZWZpbmUgSFlEUkFfSU5UX1ZJQQkJOQojZGVmaW5lIEhZRFJBX0lOVF9BREIJCTEwCiNkZWZpbmUgSFlEUkFfSU5UX0FEQl9OTUkJMTEKI2RlZmluZSBIWURSQV9JTlRfRVhUMQkJMTIJLyogUENJIElSUVcgKi8KI2RlZmluZSBIWURSQV9JTlRfRVhUMgkJMTMJLyogUENJIElSUVggKi8KI2RlZmluZSBIWURSQV9JTlRfRVhUMwkJMTQJLyogUENJIElSUVkgKi8KI2RlZmluZSBIWURSQV9JTlRfRVhUNAkJMTUJLyogUENJIElSUVogKi8KI2RlZmluZSBIWURSQV9JTlRfRVhUNQkJMTYJLyogSURFIFByaW1heS9TZWNvbmRhcnkgKi8KI2RlZmluZSBIWURSQV9JTlRfRVhUNgkJMTcJLyogSURFIFNlY29uZGFyeSAqLwojZGVmaW5lIEhZRFJBX0lOVF9FWFQ3CQkxOAkvKiBQb3dlciBPZmYgUmVxdWVzdCAqLwojZGVmaW5lIEhZRFJBX0lOVF9TUEFSRQkJMTkKCmV4dGVybiBpbnQgaHlkcmFfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgbWFjaW9fYWRiX2luaXQodm9pZCk7CgojZW5kaWYgLyogX19LRVJORUxfXyAqLwoKI2VuZGlmIC8qIF9BU01QUENfSFlEUkFfSCAqLwo=