Ly8gLSotIEMrKyAtKi0KLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gX19jb25maWcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLy8KLy8gysrKysrKysrKysrKysrKysrKyspUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQovLwovLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgovLwovLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwoKI2lmbmRlZiBfTElCQ1BQX0NPTkZJRwojZGVmaW5lIF9MSUJDUFBfQ09ORklHCgojcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCgojZGVmaW5lIF9MSUJDUFBfVkVSU0lPTiAxMDAwCgojZGVmaW5lIF9MSUJDUFBfQUJJX1ZFUlNJT04gMQoKI2RlZmluZSBfTElCQ1BQX0NPTkNBVDEoX0xJQkNQUF9YLF9MSUJDUFBfWSkgX0xJQkNQUF9YIyNfTElCQ1BQX1kKI2RlZmluZSBfTElCQ1BQX0NPTkNBVChfTElCQ1BQX1gsX0xJQkNQUF9ZKSBfTElCQ1BQX0NPTkNBVDEoX0xJQkNQUF9YLF9MSUJDUFBfWSkKCiNkZWZpbmUgX0xJQkNQUF9OQU1FU1BBQ0UgX0xJQkNQUF9DT05DQVQoX18sX0xJQkNQUF9BQklfVkVSU0lPTikKCiNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwojaWYgX19MSVRUTEVfRU5ESUFOX18KI2RlZmluZSBfTElCQ1BQX0xJVFRMRV9FTkRJQU4gMQojZGVmaW5lIF9MSUJDUFBfQklHX0VORElBTiAgICAwCiNlbmRpZgojZW5kaWYKCiNpZmRlZiBfX0JJR19FTkRJQU5fXwojaWYgX19CSUdfRU5ESUFOX18KI2RlZmluZSBfTElCQ1BQX0xJVFRMRV9FTkRJQU4gMAojZGVmaW5lIF9MSUJDUFBfQklHX0VORElBTiAgICAxCiNlbmRpZgojZW5kaWYKCiNpZiAhZGVmaW5lZChfTElCQ1BQX0xJVFRMRV9FTkRJQU4pIHx8ICFkZWZpbmVkKF9MSUJDUFBfQklHX0VORElBTikKI2Vycm9yIHVuYWJsZSB0byBkZXRlcm1pbmUgZW5kaWFuCiNlbmRpZgoKI2lmbmRlZiBfTElCQ1BQX1ZJU0lCSUxJVFlfVEFHCiNkZWZpbmUgX0xJQkNQUF9WSVNJQklMSVRZX1RBRyAxCiNlbmRpZgoKI2lmIF9MSUJDUFBfVklTSUJJTElUWV9UQUcKI2RlZmluZSBfTElCQ1BQX0hJRERFTiBfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18oImhpZGRlbiIpKSkKI2RlZmluZSBfTElCQ1BQX1ZJU0lCTEUgX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKQojZWxzZQojZGVmaW5lIF9MSUJDUFBfSElEREVOCiNkZWZpbmUgX0xJQkNQUF9WSVNJQkxFCiNlbmRpZgoKI2lmbmRlZiBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCiNkZWZpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18oImhpZGRlbiIpLCBfX2Fsd2F5c19pbmxpbmVfXykpCiNlbmRpZgoKI2lmbmRlZiBfTElCQ1BQX0VYQ0VQVElPTl9BQkkKI2RlZmluZSBfTElCQ1BQX0VYQ0VQVElPTl9BQkkgX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKQojZW5kaWYKCiNkZWZpbmUgX0xJQkNQUF9DQU5UVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fbm90aHJvd19fKSkKCiNkZWZpbmUgX0xJQkNQUF9BTFdBWVNfSU5MSU5FICBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCgojaWYgX19HTlVDX18gPj0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzCiNkZWZpbmUgX0xJQkNQUF9NT1ZFCiNlbmRpZgoKI2lmICEoX19HTlVDX18gPj0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKQojZGVmaW5lIF9MSUJDUFBfSEFTX05PX1NUQVRJQ19BU1NFUlQKI2VuZGlmCgojZGVmaW5lIF9MSUJDUFBfSEFTX05PX05VTExQVFIKCiNpZiAhKF9fR05VQ19fID49IDQgJiYgX19HTlVDX01JTk9SX18gPj0gMykKI2RlZmluZSBfTElCQ1BQX0hBU19OT19WQVJJQURJQ1MKI2RlZmluZSBfTElCQ1BQX0hBU19OT19ERUNMVFlQRQojZW5kaWYKCiNpZiAhKF9fR05VQ19fID49IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkKI2RlZmluZSBfTElCQ1BQX0hBU19OT19VTklDT0RFX0NIQVJTCiNkZWZpbmUgX0xJQkNQUF9IQVNfTk9fQURWQU5DRURfU0ZJTkFFCiNlbmRpZgoKI2lmIGRlZmluZWQoX19jbGFuZ19fKQojZGVmaW5lIF9MSUJDUFBfSEFTX05PX1NUUk9OR19VU0lORwojZW5kaWYKCiNkZWZpbmUgX0xJQkNQUF9IQVNfTk9fVEVNUExBVEVfQUxJQVNFUwoKI2lmZGVmIF9MSUJDUFBfSEFTX05PX1NUUk9OR19VU0lORwojZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURCBuYW1lc3BhY2Ugc3RkIHsKI2RlZmluZSBfTElCQ1BQX0VORF9OQU1FU1BBQ0VfU1REIH0KI2RlZmluZSBfU1REIHN0ZAojZWxzZQojZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURCBuYW1lc3BhY2Ugc3RkIHsgbmFtZXNwYWNlIF9MSUJDUFBfTkFNRVNQQUNFIHsKI2RlZmluZSBfTElCQ1BQX0VORF9OQU1FU1BBQ0VfU1REICB9IH0KCm5hbWVzcGFjZSBzdGQgewpuYW1lc3BhY2UgX0xJQkNQUF9OQU1FU1BBQ0Ugewp9CnVzaW5nIG5hbWVzcGFjZSBfTElCQ1BQX05BTUVTUEFDRSBfX2F0dHJpYnV0ZV9fKChfX3N0cm9uZ19fKSk7Cn0KCiNkZWZpbmUgX1NURCBzdGQ6Ol9MSUJDUFBfTkFNRVNQQUNFCiNlbmRpZgoKI2lmZGVmIF9MSUJDUFBfSEFTX05PX1VOSUNPREVfQ0hBUlMKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgY2hhcjE2X3Q7CiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAgIGNoYXIzMl90OwojZW5kaWYKCiNpZmRlZiBfTElCQ1BQX0hBU19OT19TVEFUSUNfQVNTRVJUCgp0ZW1wbGF0ZSA8Ym9vbD4gc3RydWN0IF9fc3RhdGljX2Fzc2VydF90ZXN0Owp0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX19zdGF0aWNfYXNzZXJ0X3Rlc3Q8dHJ1ZT4ge307CnRlbXBsYXRlIDx1bnNpZ25lZD4gc3RydWN0IF9fc3RhdGljX2Fzc2VydF9jaGVjayB7fTsKI2RlZmluZSBzdGF0aWNfYXNzZXJ0KF9fYiwgX19tKSBcCiAgICB0eXBlZGVmIF9fc3RhdGljX2Fzc2VydF9jaGVjazxzaXplb2YoX19zdGF0aWNfYXNzZXJ0X3Rlc3Q8KF9fYik+KT4gXAogICAgX0xJQkNQUF9DT05DQVQoX190LCBfX0xJTkVfXykKCiNlbmRpZgoKI2lmZGVmIF9MSUJDUFBfSEFTX05PX0RFQ0xUWVBFCgojZGVmaW5lIGRlY2x0eXBlKHgpIF9fdHlwZW9mX18oeCkKCiNlbmRpZgoKI2lmICFfX0VYQ0VQVElPTlMKI2RlZmluZSBfTElCQ1BQX05PX0VYQ0VQVElPTlMKI2VuZGlmCgojZW5kaWYgIC8vIF9MSUJDUFBfQ09ORklHCg==