LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTcgSGVucmlrIE9sc2VuCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCi8qIFRoaXMgZmlsZSBpcyBub3QgeWV0IGNvbXBsZXRlICEhICovCgojZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgRGEKI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgIDYKCi8qIE1lbnUgKi8KCiNkZWZpbmUgTUVOVV9GSUxFICAgICAgICAgICAgICAgICAgICAiJkZpbGVyIgojZGVmaW5lIE1FTlVfRklMRV9PUEVOICAgICAgICAgICAgICAgIsUmYm4uLi4iCiNkZWZpbmUgTUVOVV9GSUxFX1BSSU5UICAgICAgICAgICAgICAiJlVkc2tyaXYgZW1uZSIKI2RlZmluZSBNRU5VX0ZJTEVfUFJJTlRFUl9TRVRVUCAgICAgICImSW5kc3RpbCBwcmludGVyIgojZGVmaW5lIE1FTlVfRklMRV9FWElUICAgICAgICAgICAgICAgIiZBZnNsdXQiCgojZGVmaW5lIE1FTlVfRURJVCAgICAgICAgICAgICAgICAgICAgIiZSZWRpZ2VyIgojZGVmaW5lIE1FTlVfRURJVF9DT1BZX0RJQUxPRyAgICAgICAgIksmb3BpZXIuLi4iCiNkZWZpbmUgTUVOVV9FRElUX0FOTk9UQVRFICAgICAgICAgICAiJkFubeZyay4uLiIKCiNkZWZpbmUgTUVOVV9CT09LTUFSSyAgICAgICAgICAgICAgICAiQm9nJm3mcmtlIgojZGVmaW5lIE1FTlVfQk9PS01BUktfREVGSU5FICAgICAgICAgIiZEZWZpbmVyLi4uIgoKI2RlZmluZSBNRU5VX0hFTFAgICAgICAgICAgICAgICAgICAgICImSGrmbHAiCiNkZWZpbmUgTUVOVV9IRUxQX09OX0hFTFAgICAgICAgICAgICAiJkJydWcgYWYgSGrmbHAiCiNkZWZpbmUgTUVOVV9IRUxQX09OX1RPUCAgICAgICAgICAgICAiQWx0aWQgJvh2ZXJzdCIKI2RlZmluZSBNRU5VX0hFTFBfSU5GTyAgICAgICAgICAgICAgICImSW5mby4uLiIKI2RlZmluZSBNRU5VX0hFTFBfQUJPVVRfV0lORSAgICAgICAgICJPbSAmV0lORSIKCi8qIFN0cmluZ3MgKi8KCiNkZWZpbmUgU1RSSU5HX1dJTkVfSEVMUCAgICAgICAgICAgICAiV0lORSBIauZscCIKI2RlZmluZSBTVFJJTkdfRVJST1IgICAgICAgICAgICAgICAgICJGRUpMIgojZGVmaW5lIFNUUklOR19XQVJOSU5HICAgICAgICAgICAgICAgIkFEVkFSU0VMIgojZGVmaW5lIFNUUklOR19JTkZPICAgICAgICAgICAgICAgICAgIkluZm9ybWF0aW9uIgojZGVmaW5lIFNUUklOR19OT1RfSU1QTEVNRU5URUQgICAgICAgIklra2UgaW1wbGVtZW50ZXJldCIKI2RlZmluZSBTVFJJTkdfSExQRklMRV9FUlJPUl9zICAgICAgICJGZWpsIHZlZCBs5nNuaW5nIGFmIGZpbGVuIGAlcyciCiNkZWZpbmUgU1RSSU5HX0NPTlRFTlRTICAgICAgICAgICAgICAiJkluZGhvbGQiCiNkZWZpbmUgU1RSSU5HX1NFQVJDSCAgICAgICAgICAgICAgICAiJlP4ZyIKI2RlZmluZSBTVFJJTkdfQkFDSyAgICAgICAgICAgICAgICAgICImVGlsYmFnZSIKI2RlZmluZSBTVFJJTkdfSElTVE9SWSAgICAgICAgICAgICAgICImT3ZlcnNpZ3QiCiNkZWZpbmUgU1RSSU5HX0FMTF9GSUxFUyAgICAgICAgICAgICAiQWxsZSBmaWxlciAoKi4qKSIKI2RlZmluZSBTVFJJTkdfSEVMUF9GSUxFU19ITFAgICAgICAgICJIauZscGUgZmlsZXIgKCouaGxwKSIKCiNpbmNsdWRlICJYeC5yYyIK