Ly8gUmVzb3VyY2Ugc2NyaXB0IGZvciBQeXRob24gY29yZSBETEwuCi8vIEN1cnJlbnRseSBvbmx5IGhvbGRzIHZlcnNpb24gaW5mb3JtYXRpb24uCi8vCiNpbmNsdWRlICJ3aW52ZXIuaCIKCiNkZWZpbmUgTVNfV0lORE9XUwojaW5jbHVkZSAibW9kc3VwcG9ydC5oIgojaW5jbHVkZSAicGF0Y2hsZXZlbC5oIgoKLyogQWNyb3NzIHJlbGVhc2VzLCBjaGFuZ2U6CiAqICAgIE1TX0RMTF9JRCBpZiB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgY2hhbmdlcy4KICogICAgUFlUSE9OX0RMTF9OQU1FIGRpdHRvLgogKiBNU19ETExfSUQgbXVzdCBtYXRjaCBQWV9WRVJTSU9OIGluIHRoZSBXaW5kb3dzIGluc3RhbGwgc2NyaXB0LgogKi8KI2RlZmluZSBNU19ETExfSUQgIjIuMyIKCiNpZm5kZWYgUFlUSE9OX0RMTF9OQU1FCiNkZWZpbmUgUFlUSE9OX0RMTF9OQU1FICJweXRob24yMy5kbGwiCiNlbmRpZgoKLyogTm90aGluZyBiZWxvdyB0aGlzIHNob3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQgZXhjZXB0IGZvciBjb3B5cmlnaHQKICogbm90aWNlcywgY29tcGFueSBuYW1lLCBhbmQgRklFTEQzLiAgVW5mb3J0dW5hdGVseSwgYWxsIGF0dGVtcHRzCiAqIHRvIGdldCB0aGUgcmVzb3VyY2UgY29tcGlsZXIgdG8gZG8gYXJpdGhtZXRpYyBpbiBtYWNyb3MgaGF2ZQogKiBmYWlsZWQgbWlzZXJhYmx5IC0tIGl0IGdpdmVzIHN5bnRheCBlcnJvcnMsIGlnbm9yZXMgb3BlcmF0b3JzLAogKiBvciBkb2VzIHN0dWZmIHRoYXQncyBzaW1wbHkgYml6YXJyZS4KICovCgoKLyogVGhpcyBpcyB3aGF0IHdlJ2QgbGlrZSBGSUVMRDMgdG8gYmU6CiAqCiAqICNkZWZpbmUgRklFTEQzIChQWV9NSUNST19WRVJTSU9OKjEwMDAgKyBQWV9SRUxFQVNFX0xFVkVMKjEwICsgUFlfUkVMRUFTRV9TRVJJQUwpCiAqCiAqIGJ1dCB0aGF0IG5laXRoZXIgZ2l2ZXMgYW4gZXJyb3Igbm9yIGNvbWVzIGFueXdoZXJlIGNsb3NlIHRvIHdvcmtpbmcuICBUaGUKICogZm9sbG93aW5nIGNvbW1lbnQgYW5kICNkZWZpbmUgYXJlIG91dHB1dCBmcm9tIFBDYnVpbGRcZmllbGQzLnB5OgogKgogKiBGb3IgMi4zYzEsCiAqIFBZX01JQ1JPX1ZFUlNJT04gPSAwCiAqIFBZX1JFTEVBU0VfTEVWRUwgPSAnY2FuZGlkYXRlJyA9IDB4YwogKiBQWV9SRUxFQVNFX1NFUklBTCA9IDEKICoKICogYW5kIDAqMTAwMCArIDEyKjEwICsgMSA9IDEyMQogKi8KI2RlZmluZSBGSUVMRDMgMTIxCgovKiBlLmcuLCAyLjFhMgogKiBQWV9WRVJTSU9OIGNvbWVzIGZyb20gcGF0Y2hldmVsLmgKICovCiNkZWZpbmUgUFlUSE9OX1ZFUlNJT04gUFlfVkVSU0lPTiAiXDAiCgovKiA2NC1iaXQgdmVyc2lvbiBudW1iZXIgYXMgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgNCAxNi1iaXQgaW50cyAqLwojaWYgUFlfTUlDUk9fVkVSU0lPTiA+IDY0CiMgICBlcnJvciAiUFlfTUlDUk9fVkVSU0lPTiA+IDY0IgojZW5kaWYKI2lmIFBZX1JFTEVBU0VfTEVWRUwgPiA5OQojICAgZXJyb3IgIlBZX1JFTEVBU0VfTEVWRUwgPiA5OSIKI2VuZGlmCiNpZiBQWV9SRUxFQVNFX1NFUklBTCA+IDkKIyAgIGVycm9yICJQWV9SRUxFQVNFX1NFUklBTCA+IDkiCiNlbmRpZgojZGVmaW5lIFBZVkVSU0lPTjY0IFBZX01BSk9SX1ZFUlNJT04sIFBZX01JTk9SX1ZFUlNJT04sIEZJRUxEMywgUFlUSE9OX0FQSV9WRVJTSU9OCgovLyBTdHJpbmcgVGFibGVzClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICAxMDAwLCAgIE1TX0RMTF9JRApFTkQKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vCi8vIFZlcnNpb24KLy8KClZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTwogRklMRVZFUlNJT04gUFlWRVJTSU9ONjQKIFBST0RVQ1RWRVJTSU9OIFBZVkVSU0lPTjY0CiBGSUxFRkxBR1NNQVNLIDB4M2ZMCiNpZmRlZiBfREVCVUcKIEZJTEVGTEFHUyAweDFMCiNlbHNlCiBGSUxFRkxBR1MgMHgwTAojZW5kaWYKIEZJTEVPUyAweDQwMDA0TAogRklMRVRZUEUgMHgxTAogRklMRVNVQlRZUEUgMHgwTApCRUdJTgogICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgogICAgQkVHSU4KICAgICAgICBCTE9DSyAiMDAwMDA0YjAiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgIlB5dGhvbkxhYnMgYXQgWm9wZSBDb3Jwb3JhdGlvblwwIgogICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIlB5dGhvbiBDb3JlXDAiCiAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIFBZVEhPTl9WRVJTSU9OCiAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAiUHl0aG9uIERMTFwwIgogICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMjAwMS0yMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBDb3B5cmlnaHQgqSAyMDAwIEJlT3Blbi5jb20uIENvcHlyaWdodCCpIDE5OTUtMjAwMSBDTlJJLiBDb3B5cmlnaHQgqSAxOTkxLTE5OTUgU01DLlwwIgogICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsIFBZVEhPTl9ETExfTkFNRSAiXDAiCiAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJQeXRob25cMCIKICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgUFlUSE9OX1ZFUlNJT04KICAgICAgICBFTkQKICAgIEVORAogICAgQkxPQ0sgIlZhckZpbGVJbmZvIgogICAgQkVHSU4KICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDAsIDEyMDAKICAgIEVORApFTkQK