LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCANCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIENvcHlyaWdodCAoYykgMjAwOCwgQXRtZWwgQ29ycG9yYXRpb24NCiAqDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogKg0KICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGRpc2NsYWltZXIgYmVsb3cuDQogKg0KICogQXRtZWwncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICoNCiAqIERJU0NMQUlNRVI6IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQogKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQogKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqLw0KDQojaWZuZGVmIF9HTUlJX0RFRklORV9IDQojZGVmaW5lIF9HTUlJX0RFRklORV9IDQoNCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8vICAgICAgICAgRGVmaW5pdGlvbnMNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vSUVFRSBkZWZpbmVkIFJlZ2lzdGVycw0KI2RlZmluZSBHTUlJX0JNQ1IgICAgICAgIDB4MCAgIC8vIEJhc2ljIE1vZGUgQ29udHJvbCBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0JNU1IgICAgICAgIDB4MSAgIC8vIEJhc2ljIE1vZGUgU3RhdHVzIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfUEhZSUQxUiAgICAgMHgyICAgLy8gUEhZIElkZW5kaWZpZXIgUmVnaXN0ZXIgMQ0KI2RlZmluZSBHTUlJX1BIWUlEMlIgICAgIDB4MyAgIC8vIFBIWSBJZGVuZGlmaWVyIFJlZ2lzdGVyIDINCiNkZWZpbmUgR01JSV9BTkFSICAgICAgICAweDQgICAvLyBBdXRvX05lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9BTkxQQVIgICAgICAweDUgICAvLyBBdXRvX25lZ290aWF0aW9uIExpbmsgUGFydG5lciBBYmlsaXR5IFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfQU5FUiAgICAgICAgMHg2ICAgLy8gQXV0by1uZWdvdGlhdGlvbiBFeHBhbnNpb24gUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9BTk5QUiAgICAgICAweDcgICAvLyBBdXRvLW5lZ290aWF0aW9uIE5leHQgUGFnZSBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0FOTFBOUEFSICAgIDB4OCAgIC8vIEF1dG9fbmVnb3RpYXRpb24gTGluayBQYXJ0bmVyIE5leHQgUGFnZSBBYmlsaXR5IFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfQUZFQzBSICAgICAgMHgxMSAgIC8vIEFGRSBDb250cm9sIDAgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9BRkVDM1IgICAgICAweDE0ICAgLy8gQUZFIENvbnRyb2wgMyBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX1JYRVJDUiAgICAgIDB4MTUgICAvLyBSWEVSIENvdXRlciBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX09NU1NSICAgICAgIDB4MTcgICAvLyBPcGVyYXRpb24gTW9kZSBTdHJhcCBTdGF0dXMgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9FQ1IgICAgICAgICAweDE4ICAgLy8gRXhwYW5kZWQgQ29udHJvbCBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0lDU1IgICAgICAgIDB4MUIgICAvLyBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9GQyAgICAgICAgICAweDFDICAgLy8gRnVuY3Rpb24gQ29udHJvbA0KI2RlZmluZSBHTUlJX0xDU1IgICAgICAgIDB4MUQgICAvLyBMaW5rTUSuIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfUEMxUiAgICAgICAgMHgxRSAgIC8vIFBIWSBDb250cm9sIDEgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9QQzJSICAgICAgICAweDFGICAvLyBQSFkgQ29udHJvbCAyIFJlZ2lzdGVyDQoNCg0KLy8gUEhZIElEIElkZW50aWZpZXIgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9MU0JfTUFTSyAgICAgICAgICAgMHgwVQ0KLy8gZGVmaW5pdGlvbnM6IE1JSV9QSFlJRDENCiNkZWZpbmUgR01JSV9PVUlfTVNCICAgICAgICAgICAgMHgwMDIyDQovLyBkZWZpbml0aW9uczogTUlJX1BIWUlEMg0KI2RlZmluZSBHTUlJX09VSV9MU0IgICAgICAgICAgICAweDE1NzIgICAgICAgICAgLy8gS1NaODA2MSBQSFkgSWQyDQoNCg0KDQovLyBCYXNpYyBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKEJNQ1IpDQovLyBCaXQgZGVmaW5pdGlvbnM6IE1JSV9CTUNSDQojZGVmaW5lIEdNSUlfUkVTRVQgICAgICAgICAgICAgKDEgPDwgMTUpIC8vIDE9IFNvZnR3YXJlIFJlc2V0OyAwPU5vcm1hbCBPcGVyYXRpb24NCiNkZWZpbmUgR01JSV9MT09QQkFDSyAgICAgICAgICAoMSA8PCAxNCkgLy8gMT1sb29wYmFjayBFbmFibGVkOyAwPU5vcm1hbCBPcGVyYXRpb24NCiNkZWZpbmUgR01JSV9TUEVFRF9TRUxFQ1RfTFNCICAoMSA8PCAxMykgLy8gMSwwPTEwMDBNYnBzIDAsMT0xMDBNYnBzOyAwLDA9MTBNYnBzDQojZGVmaW5lIEdNSUlfQVVUT05FRyAgICAgICAgICAgKDEgPDwgMTIpIC8vIEF1dG8tbmVnb3RpYXRpb24gRW5hYmxlDQojZGVmaW5lIEdNSUlfUE9XRVJfRE9XTiAgICAgICAgKDEgPDwgMTEpIC8vIDE9UG93ZXIgZG93biAwPU5vcm1hbCBvcGVyYXRpb24NCiNkZWZpbmUgR01JSV9JU09MQVRFICAgICAgICAgICAoMSA8PCAxMCkgLy8gMSA9IElzb2xhdGVzIDAgPSBOb3JtYWwgb3BlcmF0aW9uDQojZGVmaW5lIEdNSUlfUkVTVEFSVF9BVVRPTkVHICAgKDEgPDwgOSkgIC8vIDEgPSBSZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gMCA9IE5vcm1hbCBvcGVyYXRpb24NCiNkZWZpbmUgR01JSV9EVVBMRVhfTU9ERSAgICAgICAoMSA8PCA4KSAgLy8gMSA9IEZ1bGwgZHVwbGV4IG9wZXJhdGlvbiAwID0gTm9ybWFsIG9wZXJhdGlvbg0KLy8gICAgICBSZXNlcnZlZCAgICAgICAgICAgICAgICA3ICAgICAgICAvLyBSZWFkIGFzIDAsIGlnbm9yZSBvbiB3cml0ZQ0KI2RlZmluZSBHTUlJX1NQRUVEX1NFTEVDVF9NU0IgICgxIDw8IDYpICAvLyANCi8vICAgICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgNSB0byAwICAgLy8gUmVhZCBhcyAwLCBpZ25vcmUgb24gd3JpdGUNCg0KDQovLyBCYXNpYyBNb2RlIFN0YXR1cyBSZWdpc3RlciAoQk1TUikNCi8vIEJpdCBkZWZpbml0aW9uczogTUlJX0JNU1INCiNkZWZpbmUgR01JSV8xMDBCQVNFX1Q0ICAgICAgICAoMSA8PCAxNSkgLy8gMTAwQkFTRS1UNCBDYXBhYmxlDQojZGVmaW5lIEdNSUlfMTAwQkFTRV9UWF9GRCAgICAgKDEgPDwgMTQpIC8vIDEwMEJBU0UtVFggRnVsbCBEdXBsZXggQ2FwYWJsZQ0KI2RlZmluZSBHTUlJXzEwMEJBU0VfVDRfSEQgICAgICgxIDw8IDEzKSAvLyAxMDBCQVNFLVRYIEhhbGYgRHVwbGV4IENhcGFibGUNCiNkZWZpbmUgR01JSV8xMEJBU0VfVF9GRCAgICAgICAoMSA8PCAxMikgLy8gMTBCQVNFLVQgRnVsbCBEdXBsZXggQ2FwYWJsZQ0KI2RlZmluZSBHTUlJXzEwQkFTRV9UX0hEICAgICAgICgxIDw8IDExKSAvLyAxMEJBU0UtVCBIYWxmIER1cGxleCBDYXBhYmxlDQovLyAgICAgIFJlc2VydmVkICAgICAgICAgICAgICAgIDEwIHRvIDkgIC8vIFJlYWQgYXMgMCwgaWdub3JlIG9uIHdyaXRlDQojZGVmaW5lIEdNSUlfRVhURU5EX1NUQVRVUyAgICAgKDEgPDwgOCkgIC8vIDEgPSBFeHRlbmQgU3RhdHVzIEluZm9ybWF0aW9uIEluIFJlZyAxNQ0KLy8gICAgICBSZXNlcnZlZCAgICAgICAgICAgICAgICA3DQojZGVmaW5lIEdNSUlfTUZfUFJFQU1CX1NVUFBSICAgKDEgPDwgNikgIC8vIE1JSSBGcmFtZSBQcmVhbWJsZSBTdXBwcmVzc2lvbg0KI2RlZmluZSBHTUlJX0FVVE9ORUdfQ09NUCAgICAgICgxIDw8IDUpICAvLyBBdXRvLW5lZ290aWF0aW9uIENvbXBsZXRlDQojZGVmaW5lIEdNSUlfUkVNT1RFX0ZBVUxUICAgICAgKDEgPDwgNCkgIC8vIFJlbW90ZSBGYXVsdA0KI2RlZmluZSBHTUlJX0FVVE9ORUdfQUJJTElUWSAgICgxIDw8IDMpICAvLyBBdXRvIENvbmZpZ3VyYXRpb24gQWJpbGl0eQ0KI2RlZmluZSBHTUlJX0xJTktfU1RBVFVTICAgICAgICgxIDw8IDIpICAvLyBMaW5rIFN0YXR1cw0KI2RlZmluZSBHTUlJX0pBQkJFUl9ERVRFQ1QgICAgICgxIDw8IDEpICAvLyBKYWJiZXIgRGV0ZWN0DQojZGVmaW5lIEdNSUlfRVhURU5EX0NBUEFCICAgICAgKDEgPDwgMCkgIC8vIEV4dGVuZGVkIENhcGFiaWxpdHkNCg0KDQovLyBBdXRvLW5lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKEFOQVIpDQovLyBBdXRvLW5lZ290aWF0aW9uIExpbmsgUGFydG5lciBBYmlsaXR5IFJlZ2lzdGVyIChBTkxQQVIpDQovLyBCaXQgZGVmaW5pdGlvbnM6IE1JSV9BTkFSLCBNSUlfQU5MUEFSDQojZGVmaW5lIEdNSUlfTlAgICAgICAgICAgICAgICAoMSA8PCAxNSkgLy8gTmV4dCBwYWdlIEluZGljYXRpb24NCi8vICAgICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICA3DQojZGVmaW5lIEdNSUlfUkYgICAgICAgICAgICAgICAoMSA8PCAxMykgLy8gUmVtb3RlIEZhdWx0DQovLyAgICAgIFJlc2VydmVkICAgICAgICAgICAgICAgMTIgICAgICAgLy8gV3JpdGUgYXMgMCwgaWdub3JlIG9uIHJlYWQNCiNkZWZpbmUgR01JSV9QQVVTRV9NQVNLICAgICAgICgzIDw8IDExKSAvLyAwLDAgPSBObyBQYXVzZSAxLDAgPSBBc3ltbWV0cmljIFBhdXNlKGxpbmsgcGFydG5lcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwLDEgPSBTeW1tZXRyaWMgUGF1c2UgMSwxID0gU3ltbWV0cmljJkFzeW1tZXRyaWMgUGF1c2UobG9jYWwgZGV2aWNlKSAgIA0KI2RlZmluZSBHTUlJX1Q0ICAgICAgICAgICAgICAgKDEgPDwgOSkgIC8vIDEwMEJBU0UtVDQgU3VwcG9ydA0KI2RlZmluZSBHTUlJX1RYX0ZEWCAgICAgICAgICAgKDEgPDwgOCkgIC8vIDEwMEJBU0UtVFggRnVsbCBEdXBsZXggU3VwcG9ydA0KI2RlZmluZSBHTUlJX1RYX0hEWCAgICAgICAgICAgKDEgPDwgNykgIC8vIDEwMEJBU0UtVFggU3VwcG9ydA0KI2RlZmluZSBHTUlJXzEwX0ZEWCAgICAgICAgICAgKDEgPDwgNikgIC8vIDEwQkFTRS1UIEZ1bGwgRHVwbGV4IFN1cHBvcnQNCiNkZWZpbmUgR01JSV8xMF9IRFggICAgICAgICAgICgxIDw8IDUpICAvLyAxMEJBU0UtVCBTdXBwb3J0DQovLyAgICAgIFNlbGVjdG9yICAgICAgICAgICAgICAgICA0IHRvIDAgICAvLyBQcm90b2NvbCBTZWxlY3Rpb24gQml0cw0KI2RlZmluZSBHTUlJX0FOX0lFRUVfODAyXzMgICAgICAweDAwMDAxDQoNCg0KDQojZW5kaWYgLy8gI2lmbmRlZiBfTUlJX0RFRklORV9IDQoNCg==