LyoKICogRE9TIEVYRSBsb2FkZXIKICoKICogQ29weXJpZ2h0IDE5OTggT3ZlIEvldmVuCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCiNpZm5kZWYgX19XSU5FX0RPU0VYRV9ICiNkZWZpbmUgX19XSU5FX0RPU0VYRV9ICgojaW5jbHVkZSAid2luZS93aW5kZWYxNi5oIgojaW5jbHVkZSAid2luYmFzZS5oIiAgIC8qIGZvciBMUFNUQVJUVVBJTkZPMzJBICovCiNpbmNsdWRlICJ3aW5udC5oIiAgICAgLyogZm9yIFBDT05URVhUICovCiNpbmNsdWRlICJ3aW5jb24uaCIgICAgLyogZm9yIE1PVVNFX0VWRU5UX1JFQ09SRCAqLwojaW5jbHVkZSAibWlzY2VtdS5oIgoKc3RydWN0IF9ET1NFVkVOVDsKc3RydWN0IF9TVEFDSzE2RlJBTUU7CgovKiBhbW91bnQgb2Ygc3BhY2UgcmVzZXJ2ZWQgZm9yIHJlbGF5IHN0YWNrICovCiNkZWZpbmUgRE9TVk1fUkVMQVlfREFUQV9TSVpFIDQwOTYKCi8qIHZhcmlvdXMgcmVhbC1tb2RlIGNvZGUgc3R1YnMgKi8Kc3RydWN0IERQTUlfc2VnbWVudHMKewogICAgV09SRCB3cmFwX3NlZzsKICAgIFdPUkQgeG1zX3NlZzsKICAgIFdPUkQgZHBtaV9zZWc7CiAgICBXT1JEIGRwbWlfc2VsOwogICAgV09SRCBpbnQ0OF9zZWw7CiAgICBXT1JEIGludDE2X3NlbDsKICAgIFdPUkQgcmVsYXlfY29kZV9zZWw7CiAgICBXT1JEIHJlbGF5X2RhdGFfc2VsOwp9OwoKLyogNDgtYml0IHNlZ21lbnRlZCBwb2ludGVycyBmb3IgRE9TIERQTUkzMiAqLwp0eXBlZGVmIHN0cnVjdCB7CiAgV09SRCAgc2VsZWN0b3I7CiAgRFdPUkQgb2Zmc2V0Owp9IFNFR1BUUjQ4LCBGQVJQUk9DNDg7Cgp0eXBlZGVmIHZvaWQgKCpET1NSRUxBWSkoQ09OVEVYVDg2Kix2b2lkKik7CnR5cGVkZWYgdm9pZCAoV0lOQVBJICpSTUNCUFJPQykoQ09OVEVYVDg2Kik7CnR5cGVkZWYgdm9pZCAoV0lOQVBJICpJTlRQUk9DKShDT05URVhUODYqKTsKCiNkZWZpbmUgRE9TX1BSSU9SSVRZX1JFQUxUSU1FIDAgIC8qIElSUTAgKi8KI2RlZmluZSBET1NfUFJJT1JJVFlfS0VZQk9BUkQgMSAgLyogSVJRMSAqLwojZGVmaW5lIERPU19QUklPUklUWV9WR0EgICAgICAyICAvKiBJUlE5ICovCiNkZWZpbmUgRE9TX1BSSU9SSVRZX01PVVNFICAgIDUgIC8qIElSUTEyICovCiNkZWZpbmUgRE9TX1BSSU9SSVRZX1NFUklBTCAgIDEwIC8qIElSUTQgKi8KCmV4dGVybiBXT1JEIERPU1ZNX3BzcDsgICAgIC8qIHBzcCBvZiBjdXJyZW50IERPUyB0YXNrICovCmV4dGVybiBXT1JEIERPU1ZNX3JldHZhbDsgIC8qIHJldHVybiB2YWx1ZSBvZiBwcmV2aW91cyBET1MgdGFzayAqLwpleHRlcm4gc3RydWN0IERQTUlfc2VnbWVudHMgKkRPU1ZNX2RwbWlfc2VnbWVudHM7CgojaWYgZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChfX2kzODZfXykgJiYgZGVmaW5lZChIQVZFX1NZU19WTTg2X0gpCiMgZGVmaW5lIE1aX1NVUFBPUlRFRAojZW5kaWYgLyogbGludXgtaTM4NiAqLwoKI2RlZmluZSBWODZfRkxBRyAweDAwMDIwMDAwCgojZGVmaW5lIEJJT1NfREFUQSAoKHZvaWQgKikweDQwMCkKCiNkZWZpbmUgQUREX0xPV09SRChkdyx2YWwpICAoKGR3KSA9ICgoZHcpICYgMHhmZmZmMDAwMCkgfCBMT1dPUkQoKERXT1JEKShkdykrKHZhbCkpKQoKLyogbW9kdWxlLmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIE1aX0xvYWRJbWFnZSggTFBDU1RSIGZpbGVuYW1lLCBIQU5ETEUgaEZpbGUgKTsKZXh0ZXJuIEJPT0wgV0lOQVBJIE1aX0V4ZWMoIENPTlRFWFQ4NiAqY29udGV4dCwgTFBDU1RSIGZpbGVuYW1lLCBCWVRFIGZ1bmMsIExQVk9JRCBwYXJhbWJsayApOwpleHRlcm4gdm9pZCBXSU5BUEkgTVpfRXhpdCggQ09OVEVYVDg2ICpjb250ZXh0LCBCT09MIGNzX3BzcCwgV09SRCByZXR2YWwgKTsKZXh0ZXJuIEJPT0wgV0lOQVBJIE1aX0N1cnJlbnQoIHZvaWQgKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIE1aX0FsbG9jRFBNSVRhc2soIHZvaWQgKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIE1aX1J1bkluVGhyZWFkKCBQQVBDRlVOQyBwcm9jLCBVTE9OR19QVFIgYXJnICk7CmV4dGVybiBCT09MIERPU1ZNX0lzV2luMTYodm9pZCk7CgovKiBkb3N2bS5jICovCmV4dGVybiBJTlQgV0lOQVBJIERPU1ZNX0VudGVyKCBDT05URVhUODYgKmNvbnRleHQgKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX1dhaXQoIElOVCByZWFkX3BpcGUsIEhBTkRMRSBoT2JqZWN0ICk7CmV4dGVybiBEV09SRCBXSU5BUEkgRE9TVk1fTG9vcCggSEFORExFIGhUaHJlYWQgKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX1F1ZXVlRXZlbnQoIElOVCBpcnEsIElOVCBwcmlvcml0eSwgRE9TUkVMQVkgcmVsYXksIExQVk9JRCBkYXRhICk7CmV4dGVybiB2b2lkIFdJTkFQSSBET1NWTV9QSUNfaW9wb3J0X291dCggV09SRCBwb3J0LCBCWVRFIHZhbCApOwpleHRlcm4gdm9pZCBXSU5BUEkgRE9TVk1fU2V0VGltZXIoIFVJTlQgdGlja3MgKTsKZXh0ZXJuIFVJTlQgV0lOQVBJIERPU1ZNX0dldFRpbWVyKCB2b2lkICk7CgovKiBkZXZpY2VzLmMgKi8KZXh0ZXJuIHZvaWQgRE9TREVWX0luc3RhbGxET1NEZXZpY2VzKHZvaWQpOwpleHRlcm4gRFdPUkQgRE9TREVWX0NvbnNvbGUodm9pZCk7CmV4dGVybiBEV09SRCBET1NERVZfRmluZENoYXJEZXZpY2UoY2hhcipuYW1lKTsKZXh0ZXJuIGludCBET1NERVZfUGVlayhEV09SRCBkZXYsIEJZVEUqZGF0YSk7CmV4dGVybiBpbnQgRE9TREVWX1JlYWQoRFdPUkQgZGV2LCBEV09SRCBidWYsIGludCBidWZsZW4pOwpleHRlcm4gaW50IERPU0RFVl9Xcml0ZShEV09SRCBkZXYsIERXT1JEIGJ1ZiwgaW50IGJ1ZmxlbiwgaW50IHZlcmlmeSk7CmV4dGVybiBpbnQgRE9TREVWX0lvY3RsUmVhZChEV09SRCBkZXYsIERXT1JEIGJ1ZiwgaW50IGJ1Zmxlbik7CmV4dGVybiBpbnQgRE9TREVWX0lvY3RsV3JpdGUoRFdPUkQgZGV2LCBEV09SRCBidWYsIGludCBidWZsZW4pOwpleHRlcm4gc3RydWN0IF9ET1NfTElTVE9GTElTVFMgKiBET1NNRU1fTE9MKCk7CgovKiBkbWEuYyAqLwpleHRlcm4gaW50IERNQV9UcmFuc2ZlcihpbnQgY2hhbm5lbCxpbnQgcmVxbGVuZ3RoLHZvaWQqIGJ1ZmZlcik7CmV4dGVybiB2b2lkIERNQV9pb3BvcnRfb3V0KCBXT1JEIHBvcnQsIEJZVEUgdmFsICk7CmV4dGVybiBCWVRFIERNQV9pb3BvcnRfaW4oIFdPUkQgcG9ydCApOwoKLyogZG9zYXNwaS5jICovCnZvaWQgV0lOQVBJIERPU1ZNX0FTUElIYW5kbGVyKENPTlRFWFQ4NiopOwoKLyogZnB1LmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDM0SGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDM1SGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDM2SGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDM3SGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDM4SGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDM5SGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDNhSGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDNiSGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDNjSGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDNkSGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDNlSGFuZGxlcihDT05URVhUODYqKTsKCi8qIGhpbWVtLmMgKi8KZXh0ZXJuIHZvaWQgRE9TVk1fSW5pdFNlZ21lbnRzKHZvaWQpOwpleHRlcm4gTFBWT0lEIERPU1ZNX0FsbG9jVU1CKERXT1JEKTsKZXh0ZXJuIExQVk9JRCBET1NWTV9BbGxvY0NvZGVVTUIoRFdPUkQsIFdPUkQgKiwgV09SRCAqKTsKZXh0ZXJuIExQVk9JRCBET1NWTV9BbGxvY0RhdGFVTUIoRFdPUkQsIFdPUkQgKiwgV09SRCAqKTsKCi8qIGludDA5LmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDA5SGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDA5U2VuZFNjYW4oQllURSBzY2FuLEJZVEUgYXNjaWkpOwpleHRlcm4gQllURSBXSU5BUEkgRE9TVk1fSW50MDlSZWFkU2NhbihCWVRFKmFzY2lpKTsKCi8qIGludDEwLmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDEwSGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX1B1dENoYXIoQllURSBhc2NpaSk7CgovKiBpbnQxMS5jICovCmV4dGVybiB2b2lkIFdJTkFQSSBET1NWTV9JbnQxMUhhbmRsZXIoQ09OVEVYVDg2Kik7CgovKiBpbnQxMi5jICovCmV4dGVybiB2b2lkIFdJTkFQSSBET1NWTV9JbnQxMkhhbmRsZXIoQ09OVEVYVDg2Kik7CgovKiBpbnQxMy5jICovCmV4dGVybiB2b2lkIFdJTkFQSSBET1NWTV9JbnQxM0hhbmRsZXIoQ09OVEVYVDg2Kik7CgovKiBpbnQxNS5jICovCmV4dGVybiB2b2lkIFdJTkFQSSBET1NWTV9JbnQxNUhhbmRsZXIoQ09OVEVYVDg2Kik7CgovKiBpbnQxYS5jICovCmV4dGVybiB2b2lkIFdJTkFQSSBET1NWTV9JbnQxYUhhbmRsZXIoQ09OVEVYVDg2Kik7CgovKiBpbnQxNi5jICovCmV4dGVybiB2b2lkIFdJTkFQSSBET1NWTV9JbnQxNkhhbmRsZXIoQ09OVEVYVDg2Kik7CmV4dGVybiBpbnQgV0lOQVBJIERPU1ZNX0ludDE2UmVhZENoYXIoQllURSphc2NpaSxCWVRFKnNjYW4sQk9PTCBwZWVrKTsKZXh0ZXJuIGludCBXSU5BUEkgRE9TVk1fSW50MTZBZGRDaGFyKEJZVEUgYXNjaWksQllURSBzY2FuKTsKCi8qIGludDE3LmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDE3SGFuZGxlcihDT05URVhUODYqKTsKCi8qIGludDE5LmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDE5SGFuZGxlcihDT05URVhUODYqKTsKCi8qIGludDIwLmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDIwSGFuZGxlcihDT05URVhUODYqKTsKCi8qIGludDIxLmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDIxSGFuZGxlcihDT05URVhUODYqKTsKCi8qIGludDI1LmMgKi8KQk9PTCBET1NWTV9SYXdSZWFkKCBCWVRFLCBEV09SRCwgRFdPUkQsIEJZVEUgKiwgQk9PTCApOwp2b2lkIFdJTkFQSSBET1NWTV9JbnQyNUhhbmRsZXIoIENPTlRFWFQ4NiAqICk7CgovKiBpbnQyNi5jICovCkJPT0wgRE9TVk1fUmF3V3JpdGUoIEJZVEUsIERXT1JELCBEV09SRCwgQllURSAqLCBCT09MICk7CnZvaWQgV0lOQVBJIERPU1ZNX0ludDI2SGFuZGxlciggQ09OVEVYVDg2ICogKTsKCi8qIGludDI5LmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDI5SGFuZGxlcihDT05URVhUODYqKTsKCi8qIGludDJhLmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDJhSGFuZGxlcihDT05URVhUODYqKTsKCi8qIGludDJmLmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDJmSGFuZGxlcihDT05URVhUODYqKTsKCi8qIGludDMxLmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDMxSGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX1Jhd01vZGVTd2l0Y2hIYW5kbGVyKENPTlRFWFQ4NiopOwpleHRlcm4gQk9PTCBET1NWTV9Jc0RvczMyKHZvaWQpOwpleHRlcm4gRkFSUFJPQzE2IFdJTkFQSSBEUE1JX0FsbG9jSW50ZXJuYWxSTUNCKFJNQ0JQUk9DKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERQTUlfRnJlZUludGVybmFsUk1DQihGQVJQUk9DMTYpOwpleHRlcm4gaW50IERQTUlfQ2FsbFJNUHJvYyhDT05URVhUODYqLExQV09SRCxpbnQsaW50KTsKZXh0ZXJuIEJPT0wgRE9TVk1fQ2hlY2tXcmFwcGVycyhDT05URVhUODYqKTsKCi8qIGludDMzLmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDMzSGFuZGxlcihDT05URVhUODYqKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0ludDMzTWVzc2FnZShVSU5ULFdQQVJBTSxMUEFSQU0pOwpleHRlcm4gdm9pZCBXSU5BUEkgRE9TVk1fSW50MzNDb25zb2xlKE1PVVNFX0VWRU5UX1JFQ09SRCopOwoKLyogaW50NDEuYyAqLwpleHRlcm4gdm9pZCBXSU5BUEkgRE9TVk1fSW50NDFIYW5kbGVyKENPTlRFWFQ4NiopOwoKLyogaW50NGIuYyAqLwpleHRlcm4gdm9pZCBXSU5BUEkgRE9TVk1fSW50NGJIYW5kbGVyKENPTlRFWFQ4NiopOwoKLyogaW50NWMuYyAqLwpleHRlcm4gdm9pZCBXSU5BUEkgRE9TVk1fSW50NWNIYW5kbGVyKENPTlRFWFQ4NiopOwoKLyogaW50NjcuYyAqLwpleHRlcm4gdm9pZCBXSU5BUEkgRE9TVk1fSW50NjdIYW5kbGVyKENPTlRFWFQ4NiopOwpleHRlcm4gdm9pZCBXSU5BUEkgRU1TX0lvY3RsX0hhbmRsZXIoQ09OVEVYVDg2Kik7CgovKiBpbnRlcnJ1cHRzLmMgKi8KZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0NhbGxCdWlsdGluSGFuZGxlciggQ09OVEVYVDg2ICosIEJZVEUgKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX0VtdWxhdGVJbnRlcnJ1cHRQTSggQ09OVEVYVDg2ICosIEJZVEUgKTsKZXh0ZXJuIEJPT0wgV0lOQVBJIERPU1ZNX0VtdWxhdGVJbnRlcnJ1cHRSTSggQ09OVEVYVDg2ICosIEJZVEUgKTsKZXh0ZXJuIEZBUlBST0MxNiAgIERPU1ZNX0dldFBNSGFuZGxlcjE2KCBCWVRFICk7CmV4dGVybiBGQVJQUk9DNDggICBET1NWTV9HZXRQTUhhbmRsZXI0OCggQllURSApOwpleHRlcm4gRkFSUFJPQzE2ICAgRE9TVk1fR2V0Uk1IYW5kbGVyKCBCWVRFICk7CmV4dGVybiB2b2lkICAgICAgICBET1NWTV9IYXJkd2FyZUludGVycnVwdFBNKCBDT05URVhUODYgKiwgQllURSApOwpleHRlcm4gdm9pZCAgICAgICAgRE9TVk1fSGFyZHdhcmVJbnRlcnJ1cHRSTSggQ09OVEVYVDg2ICosIEJZVEUgKTsKZXh0ZXJuIHZvaWQgICAgICAgIERPU1ZNX1NldFBNSGFuZGxlcjE2KCBCWVRFLCBGQVJQUk9DMTYgKTsKZXh0ZXJuIHZvaWQgICAgICAgIERPU1ZNX1NldFBNSGFuZGxlcjQ4KCBCWVRFLCBGQVJQUk9DNDggKTsKZXh0ZXJuIHZvaWQgICAgICAgIERPU1ZNX1NldFJNSGFuZGxlciggQllURSwgRkFSUFJPQzE2ICk7CgovKiByZWxheS5jICovCnZvaWQgRE9TVk1fUmVsYXlIYW5kbGVyKCBDT05URVhUODYgKiApOwp2b2lkIERPU1ZNX1NhdmVDYWxsRnJhbWUoIENPTlRFWFQ4NiAqLCBzdHJ1Y3QgX1NUQUNLMTZGUkFNRSAqICk7CnZvaWQgRE9TVk1fUmVzdG9yZUNhbGxGcmFtZSggQ09OVEVYVDg2ICosIHN0cnVjdCBfU1RBQ0sxNkZSQU1FICogKTsKdm9pZCBET1NWTV9CdWlsZENhbGxGcmFtZSggQ09OVEVYVDg2ICosIERPU1JFTEFZLCBMUFZPSUQgKTsKCi8qIHNvdW5kYmxhc3Rlci5jICovCmV4dGVybiB2b2lkIFNCX2lvcG9ydF9vdXQoIFdPUkQgcG9ydCwgQllURSB2YWwgKTsKZXh0ZXJuIEJZVEUgU0JfaW9wb3J0X2luKCBXT1JEIHBvcnQgKTsKCi8qIHhtcy5jICovCmV4dGVybiB2b2lkIFdJTkFQSSBYTVNfSGFuZGxlcihDT05URVhUODYqKTsKCiNlbmRpZiAvKiBfX1dJTkVfRE9TRVhFX0ggKi8K