LyoKICogcmVzZXJ2ZWQgY29tbWVudCBibG9jawogKiBETyBOT1QgUkVNT1ZFIE9SIEFMVEVSIQogKi8KLyoKICogJFhGcmVlODY6IHhjL2luY2x1ZGUvZXh0ZW5zaW9ucy9yYW5kci5oLHYgMS40IDIwMDEvMTEvMjQgMDc6MjQ6NTgga2VpdGhwIEV4cCAkCiAqCiAqIENvcHlyaWdodCCpIDIwMDAsIENvbXBhcSBDb21wdXRlciBDb3Jwb3JhdGlvbiwKICogQ29weXJpZ2h0IKkgMjAwMiwgSGV3bGV0dCBQYWNrYXJkLCBJbmMuCiAqCiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwogKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAogKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwogKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBDb21wYXEgb3IgSFAgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcKICogb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAogKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBIUCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCiAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgogKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KICoKICogSFAgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwKICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgSFAKICogQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCiAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgogKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogKgogKiBBdXRob3I6ICBKaW0gR2V0dHlzLCBIUCBMYWJzLCBIZXdsZXR0LVBhY2thcmQsIEluYy4KICovCgojaWZuZGVmIF9SQU5EUl9IXwojZGVmaW5lIF9SQU5EUl9IXwoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgUm90YXRpb247CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIFNpemVJRDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgU3VicGl4ZWxPcmRlcjsKCiNkZWZpbmUgUkFORFJfTkFNRSAgICAgICAgICAgICAgIlJBTkRSIgojZGVmaW5lIFJBTkRSX01BSk9SICAgICAgICAgICAgIDEKI2RlZmluZSBSQU5EUl9NSU5PUiAgICAgICAgICAgICAxCgojZGVmaW5lIFJSTnVtYmVyRXJyb3JzICAgICAgICAgIDAKI2RlZmluZSBSUk51bWJlckV2ZW50cyAgICAgICAgICAxCgojZGVmaW5lIFhfUlJRdWVyeVZlcnNpb24gICAgICAgIDAKLyogd2Ugc2tpcCAxIHRvIG1ha2Ugb2xkIGNsaWVudHMgZmFpbCBwcmV0dHkgaW1tZWRpYXRlbHkgKi8KI2RlZmluZSBYX1JST2xkR2V0U2NyZWVuSW5mbyAgICAxCiNkZWZpbmUgWF9SUjFfMFNldFNjcmVlbkNvbmZpZyAgMgovKiBWMS4wIGFwcHMgc2hhcmUgdGhlIHNhbWUgc2V0IHNjcmVlbiBjb25maWcgcmVxdWVzdCBpZCAqLwojZGVmaW5lIFhfUlJTZXRTY3JlZW5Db25maWcgICAgIDIKI2RlZmluZSBYX1JST2xkU2NyZWVuQ2hhbmdlU2VsZWN0SW5wdXQgIDMKLyogMyB1c2VkIHRvIGJlIFNjcmVlbkNoYW5nZVNlbGVjdElucHV0OyBkZXByZWNhdGVkICovCiNkZWZpbmUgWF9SUlNlbGVjdElucHV0ICAgICAgICAgNAojZGVmaW5lIFhfUlJHZXRTY3JlZW5JbmZvICAgICAgIDUKCi8qIHVzZWQgaW4gWFJSU2VsZWN0SW5wdXQgKi8KCiNkZWZpbmUgUlJTY3JlZW5DaGFuZ2VOb3RpZnlNYXNrICAoMUwgPDwgMCkKCiNkZWZpbmUgUlJTY3JlZW5DaGFuZ2VOb3RpZnkgICAgMAoKLyogdXNlZCBpbiB0aGUgcm90YXRpb24gZmllbGQ7IHJvdGF0aW9uIGFuZCByZWZsZWN0aW9uIGluIDAuMSBwcm90by4gKi8KI2RlZmluZSBSUl9Sb3RhdGVfMCAgICAgICAgICAgICAxCiNkZWZpbmUgUlJfUm90YXRlXzkwICAgICAgICAgICAgMgojZGVmaW5lIFJSX1JvdGF0ZV8xODAgICAgICAgICAgIDQKI2RlZmluZSBSUl9Sb3RhdGVfMjcwICAgICAgICAgICA4CgovKiBuZXcgaW4gMS4wIHByb3RvY29sLCB0byBhbGxvdyByZWZsZWN0aW9uIG9mIHNjcmVlbiAqLwoKI2RlZmluZSBSUl9SZWZsZWN0X1ggICAgICAgICAgICAxNgojZGVmaW5lIFJSX1JlZmxlY3RfWSAgICAgICAgICAgIDMyCgojZGVmaW5lIFJSU2V0Q29uZmlnU3VjY2VzcyAgICAgICAgICAgICAgMAojZGVmaW5lIFJSU2V0Q29uZmlnSW52YWxpZENvbmZpZ1RpbWUgICAgMQojZGVmaW5lIFJSU2V0Q29uZmlnSW52YWxpZFRpbWUgICAgICAgICAgMgojZGVmaW5lIFJSU2V0Q29uZmlnRmFpbGVkICAgICAgICAgICAgICAgMwoKI2VuZGlmICAvKiBfUkFORFJfSF8gKi8K