LyoNCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqICAgIENDMzIyMCBTREsgLSB2MC4xMC4wMC4wMCANCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqDQogKiAgQ29weXJpZ2h0IChDKSAyMDE1IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLyANCiAqICANCiAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgDQogKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIA0KICogIGFyZSBtZXQ6DQogKg0KICogICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgDQogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQogKg0KICogICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgDQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgICANCiAqICAgIGRpc3RyaWJ1dGlvbi4NCiAqDQogKiAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCBub3IgdGhlIG5hbWVzIG9mDQogKiAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkDQogKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogKg0KICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgDQogKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgDQogKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQogKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgDQogKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIA0KICogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgDQogKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQogKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQogKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCANCiAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgDQogKiAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqICANCiAqLw0KDQojaWZuZGVmIF9fSFdfQUVTX0hfXw0KI2RlZmluZSBfX0hXX0FFU19IX18NCg0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLy8NCi8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBBRVNfUCByZWdpc3RlciBvZmZzZXRzLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiNkZWZpbmUgQUVTX09fS0VZMl82ICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFhUUyBzZWNvbmQga2V5IC8gQ0JDLU1BQyB0aGlyZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZXkNCiNkZWZpbmUgQUVTX09fS0VZMl83ICAgICAgICAgIDB4MDAwMDAwMDQgIC8vIFhUUyBzZWNvbmQga2V5IChNU1cgZm9yIDI1Ni1iaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5KSAvIENCQy1NQUMgdGhpcmQga2V5IChNU1cpDQojZGVmaW5lIEFFU19PX0tFWTJfNCAgICAgICAgICAweDAwMDAwMDA4ICAvLyBYVFMgLyBDQ00gc2Vjb25kIGtleSAvIENCQy1NQUMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcmQga2V5IChMU1cpDQojZGVmaW5lIEFFU19PX0tFWTJfNSAgICAgICAgICAweDAwMDAwMDBDICAvLyBYVFMgc2Vjb25kIGtleSAoTVNXIGZvciAxOTItYml0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtleSkgLyBDQkMtTUFDIHRoaXJkIGtleQ0KI2RlZmluZSBBRVNfT19LRVkyXzIgICAgICAgICAgMHgwMDAwMDAxMCAgLy8gWFRTIC8gQ0NNIC8gQ0JDLU1BQyBzZWNvbmQga2V5IC8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFzaCBLZXkgaW5wdXQNCiNkZWZpbmUgQUVTX09fS0VZMl8zICAgICAgICAgIDB4MDAwMDAwMTQgIC8vIFhUUyBzZWNvbmQga2V5IChNU1cgZm9yIDEyOC1iaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5KSArIENDTS9DQkMtTUFDIHNlY29uZCBrZXkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKE1TVykgLyBIYXNoIEtleSBpbnB1dCAoTVNXKQ0KI2RlZmluZSBBRVNfT19LRVkyXzAgICAgICAgICAgMHgwMDAwMDAxOCAgLy8gWFRTIC8gQ0NNIC8gQ0JDLU1BQyBzZWNvbmQga2V5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChMU1cpIC8gSGFzaCBLZXkgaW5wdXQgKExTVykNCiNkZWZpbmUgQUVTX09fS0VZMl8xICAgICAgICAgIDB4MDAwMDAwMUMgIC8vIFhUUyAvIENDTSAvIENCQy1NQUMgc2Vjb25kIGtleSAvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhc2ggS2V5IGlucHV0DQojZGVmaW5lIEFFU19PX0tFWTFfNiAgICAgICAgICAweDAwMDAwMDIwICAvLyBLZXkgKExTVyBmb3IgMjU2LWJpdCBrZXkpDQojZGVmaW5lIEFFU19PX0tFWTFfNyAgICAgICAgICAweDAwMDAwMDI0ICAvLyBLZXkgKE1TVyBmb3IgMjU2LWJpdCBrZXkpDQojZGVmaW5lIEFFU19PX0tFWTFfNCAgICAgICAgICAweDAwMDAwMDI4ICAvLyBLZXkgKExTVyBmb3IgMTkyLWJpdCBrZXkpDQojZGVmaW5lIEFFU19PX0tFWTFfNSAgICAgICAgICAweDAwMDAwMDJDICAvLyBLZXkgKE1TVyBmb3IgMTkyLWJpdCBrZXkpDQojZGVmaW5lIEFFU19PX0tFWTFfMiAgICAgICAgICAweDAwMDAwMDMwICAvLyBLZXkNCiNkZWZpbmUgQUVTX09fS0VZMV8zICAgICAgICAgIDB4MDAwMDAwMzQgIC8vIEtleSAoTVNXIGZvciAxMjgtYml0IGtleSkNCiNkZWZpbmUgQUVTX09fS0VZMV8wICAgICAgICAgIDB4MDAwMDAwMzggIC8vIEtleSAoTFNXIGZvciAxMjgtYml0IGtleSkNCiNkZWZpbmUgQUVTX09fS0VZMV8xICAgICAgICAgIDB4MDAwMDAwM0MgIC8vIEtleQ0KI2RlZmluZSBBRVNfT19JVl9JTl8wICAgICAgICAgMHgwMDAwMDA0MCAgLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIGlucHV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChMU1cpDQojZGVmaW5lIEFFU19PX0lWX0lOXzEgICAgICAgICAweDAwMDAwMDQ0ICAvLyBJbml0aWFsaXphdGlvbiB2ZWN0b3IgaW5wdXQNCiNkZWZpbmUgQUVTX09fSVZfSU5fMiAgICAgICAgIDB4MDAwMDAwNDggIC8vIEluaXRpYWxpemF0aW9uIHZlY3RvciBpbnB1dA0KI2RlZmluZSBBRVNfT19JVl9JTl8zICAgICAgICAgMHgwMDAwMDA0QyAgLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIGlucHV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChNU1cpDQojZGVmaW5lIEFFU19PX0NUUkwgICAgICAgICAgICAweDAwMDAwMDUwICAvLyByZWdpc3RlciBkZXRlcm1pbmVzIHRoZSBtb2RlIG9mDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbiBvZiB0aGUgQUVTIEVuZ2luZQ0KI2RlZmluZSBBRVNfT19DX0xFTkdUSF8wICAgICAgMHgwMDAwMDA1NCAgLy8gQ3J5cHRvIGRhdGEgbGVuZ3RoIHJlZ2lzdGVycw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoTFNXIGFuZCBNU1cpIHN0b3JlIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcnlwdG9ncmFwaGljIGRhdGEgbGVuZ3RoIGluDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIGZvciBhbGwgbW9kZXMuIE9uY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2luZyB3aXRoIHRoaXMgY29udGV4dCBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydGVkQEAgdGhpcyBsZW5ndGggZGVjcmVtZW50cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB6ZXJvLiBEYXRhIGxlbmd0aHMgdXAgdG8gKDJeNjENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g4oCTIDEpIGJ5dGVzIGFyZSBhbGxvd2VkLiBGb3IgR0NNQEANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IHZhbHVlIHVwIHRvIDJeMzYgLSAzMiBieXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gYmUgdXNlZC4gVGhpcyBpcyBiZWNhdXNlIGENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzItYml0IGNvdW50ZXIgbW9kZSBpcyB1c2VkOyB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4aW11bSBudW1iZXIgb2YgMTI4LWJpdCBibG9ja3MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgMl4zMiDigJMgMkBAIHJlc3VsdGluZyBpbiBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9mIDJeMzYgLQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzMi4gQSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJzIHRoZSBlbmdpbmUgdG8gc3RhcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhpcyBjb250ZXh0LiBUaGlzIGlzIHZhbGlkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBhbGwgbW9kZXMgZXhjZXB0IEdDTSBhbmQgQ0NNLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIHRoZSBjb21iaW5lZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2Rlc0BAIHRoaXMgbGVuZ3RoIGRvZXMgbm90DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGF1dGhlbnRpY2F0aW9uIG9ubHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YTsgdGhlIGF1dGhlbnRpY2F0aW9uIGxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBzcGVjaWZpZWQgaW4gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFFU19BVVRIX0xFTkdUSCByZWdpc3RlciBiZWxvdy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsIG1vZGVzIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgY29tYmluZWQgbW9kZXNAQCBpdCBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGxvd2VkIHRvIGhhdmUgb25lIG9mIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGhzIGVxdWFsIHRvIHplcm8uIEZvciB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmFzaWMgZW5jcnlwdGlvbiBtb2Rlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoRUNCL0NCQy9DVFIvSUNNL0NGQjEyOCkgaXQgaXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3dlZCB0byBwcm9ncmFtIHplcm8gdG8gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBmaWVsZDsgaW4gdGhhdCBjYXNlIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGggaXMgYXNzdW1lZCBpbmZpbml0ZS4gQWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgbXVzdCBiZSBieXRlICg4LWJpdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25lZDsgYml0IGFsaWduZWQgZGF0YSBzdHJlYW1zDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBBRVMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5naW5lLiBGb3IgYSBIb3N0IHJlYWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uQEAgdGhlc2UgcmVnaXN0ZXJzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBhbGwtemVyb2VzLg0KI2RlZmluZSBBRVNfT19DX0xFTkdUSF8xICAgICAgMHgwMDAwMDA1OCAgLy8gQ3J5cHRvIGRhdGEgbGVuZ3RoIHJlZ2lzdGVycw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoTFNXIGFuZCBNU1cpIHN0b3JlIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcnlwdG9ncmFwaGljIGRhdGEgbGVuZ3RoIGluDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIGZvciBhbGwgbW9kZXMuIE9uY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2luZyB3aXRoIHRoaXMgY29udGV4dCBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydGVkQEAgdGhpcyBsZW5ndGggZGVjcmVtZW50cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB6ZXJvLiBEYXRhIGxlbmd0aHMgdXAgdG8gKDJeNjENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g4oCTIDEpIGJ5dGVzIGFyZSBhbGxvd2VkLiBGb3IgR0NNQEANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IHZhbHVlIHVwIHRvIDJeMzYgLSAzMiBieXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gYmUgdXNlZC4gVGhpcyBpcyBiZWNhdXNlIGENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzItYml0IGNvdW50ZXIgbW9kZSBpcyB1c2VkOyB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4aW11bSBudW1iZXIgb2YgMTI4LWJpdCBibG9ja3MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgMl4zMiDigJMgMkBAIHJlc3VsdGluZyBpbiBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9mIDJeMzYgLQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzMi4gQSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJzIHRoZSBlbmdpbmUgdG8gc3RhcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhpcyBjb250ZXh0LiBUaGlzIGlzIHZhbGlkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBhbGwgbW9kZXMgZXhjZXB0IEdDTSBhbmQgQ0NNLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIHRoZSBjb21iaW5lZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2Rlc0BAIHRoaXMgbGVuZ3RoIGRvZXMgbm90DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGF1dGhlbnRpY2F0aW9uIG9ubHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YTsgdGhlIGF1dGhlbnRpY2F0aW9uIGxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBzcGVjaWZpZWQgaW4gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFFU19BVVRIX0xFTkdUSCByZWdpc3RlciBiZWxvdy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsIG1vZGVzIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgY29tYmluZWQgbW9kZXNAQCBpdCBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGxvd2VkIHRvIGhhdmUgb25lIG9mIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGhzIGVxdWFsIHRvIHplcm8uIEZvciB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmFzaWMgZW5jcnlwdGlvbiBtb2Rlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoRUNCL0NCQy9DVFIvSUNNL0NGQjEyOCkgaXQgaXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3dlZCB0byBwcm9ncmFtIHplcm8gdG8gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBmaWVsZDsgaW4gdGhhdCBjYXNlIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGggaXMgYXNzdW1lZCBpbmZpbml0ZS4gQWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgbXVzdCBiZSBieXRlICg4LWJpdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25lZDsgYml0IGFsaWduZWQgZGF0YSBzdHJlYW1zDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBBRVMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5naW5lLiBGb3IgYSBIb3N0IHJlYWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uQEAgdGhlc2UgcmVnaXN0ZXJzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBhbGwtemVyb2VzLg0KI2RlZmluZSBBRVNfT19BVVRIX0xFTkdUSCAgICAgMHgwMDAwMDA1QyAgLy8gQUFEIGRhdGEgbGVuZ3RoLiBUaGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXV0aGVudGljYXRpb24gbGVuZ3RoIHJlZ2lzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBpbiBieXRlcyBmb3IgY29tYmluZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kZXMgb25seSAoR0NNIG9yIENDTSkgU3VwcG9ydGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFBRC1sZW5ndGhzIGZvciBDQ00gYXJlIGZyb20gMCB0bw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoMl4xNiAtIDJeOCkgYnl0ZXMuIEZvciBHQ00gYW55DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIHVwIHRvICgyXjMyIC0gMSkgYnl0ZXMgY2FuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHVzZWQuIE9uY2UgcHJvY2Vzc2luZyB3aXRoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgY29udGV4dCBpcyBzdGFydGVkQEAgdGhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGggZGVjcmVtZW50cyB0byB6ZXJvLiBBDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgdHJpZ2dlcnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGVuZ2luZSB0byBzdGFydCB1c2luZyB0aGlzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgZm9yIEdDTSBhbmQgQ0NNLiBGb3IgWFRTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgcmVnaXN0ZXIgaXMgb3B0aW9uYWxseSB1c2VkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGxvYWQg4oCYauKAmS4gTG9hZGluZyBvZiDigJhq4oCZIGlzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgcmVxdWlyZWQgaWYg4oCYauKAmSAhPSAwLiDigJhq4oCZIGlzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgMjgtYml0IHZhbHVlIGFuZCBtdXN0IGJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXR0ZW4gdG8gYml0cyBbMzEtNF0gb2YgdGhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3Rlci4g4oCYauKAmSByZXByZXNlbnRzIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXF1ZW50aWFsIG51bWJlciBvZiB0aGUgMTI4LWJpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBibG9jayBpbnNpZGUgdGhlIGRhdGEgdW5pdC4gRm9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBibG9jayBpbiBhIHVuaXRAQCB0aGlzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlzIHplcm8uIEl0IGlzIG5vdCByZXF1aXJlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBwcm92aWRlIGEg4oCYauKAmSBmb3IgZWFjaCBuZXcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBibG9jayB3aXRoaW4gYSB1bml0LiBOb3RlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gc3RhcnQgd2l0aA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIOKAmGrigJkgdW5lcXVhbCB0byB6ZXJvOyByZWZlciB0bw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUYWJsZSA0IGZvciBtb3JlIGRldGFpbHMuIEZvciBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhvc3QgcmVhZCBvcGVyYXRpb25AQCB0aGVzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlcnMgcmV0dXJuIGFsbC16ZXJvZXMuDQojZGVmaW5lIEFFU19PX0RBVEFfSU5fMCAgICAgICAweDAwMDAwMDYwICAvLyBEYXRhIHJlZ2lzdGVyIHRvIHJlYWQgYW5kIHdyaXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWludGV4dC9jaXBoZXJ0ZXh0IChNU1cpDQojZGVmaW5lIEFFU19PX0RBVEFfSU5fMSAgICAgICAweDAwMDAwMDY0ICAvLyBEYXRhIHJlZ2lzdGVyIHRvIHJlYWQgYW5kIHdyaXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWludGV4dC9jaXBoZXJ0ZXh0DQojZGVmaW5lIEFFU19PX0RBVEFfSU5fMiAgICAgICAweDAwMDAwMDY4ICAvLyBEYXRhIHJlZ2lzdGVyIHRvIHJlYWQgYW5kIHdyaXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWludGV4dC9jaXBoZXJ0ZXh0DQojZGVmaW5lIEFFU19PX0RBVEFfSU5fMyAgICAgICAweDAwMDAwMDZDICAvLyBEYXRhIHJlZ2lzdGVyIHRvIHJlYWQgYW5kIHdyaXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWludGV4dC9jaXBoZXJ0ZXh0IChMU1cpDQojZGVmaW5lIEFFU19PX1RBR19PVVRfMCAgICAgICAweDAwMDAwMDcwDQojZGVmaW5lIEFFU19PX1RBR19PVVRfMSAgICAgICAweDAwMDAwMDc0DQojZGVmaW5lIEFFU19PX1RBR19PVVRfMiAgICAgICAweDAwMDAwMDc4DQojZGVmaW5lIEFFU19PX1RBR19PVVRfMyAgICAgICAweDAwMDAwMDdDDQojZGVmaW5lIEFFU19PX1JFVklTSU9OICAgICAgICAweDAwMDAwMDgwICAvLyBSZWdpc3RlciBBRVNfUkVWSVNJT04NCiNkZWZpbmUgQUVTX09fU1lTQ09ORklHICAgICAgIDB4MDAwMDAwODQgIC8vIFJlZ2lzdGVyIEFFU19TWVNDT05GSUcuVGhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBjb25maWd1cmVzIHRoZSBETUENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmFscyBhbmQgY29udHJvbHMgdGhlIElETEUgYW5kDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IGxvZ2ljDQojZGVmaW5lIEFFU19PX1NZU1NUQVRVUyAgICAgICAweDAwMDAwMDg4DQojZGVmaW5lIEFFU19PX0lSUVNUQVRVUyAgICAgICAweDAwMDAwMDhDICAvLyBUaGlzIHJlZ2lzdGVyIGluZGljYXRlcyB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJydXB0IHN0YXR1cy4gSWYgb25lIG9mIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcnJ1cHQgYml0cyBpcyBzZXQgdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVycnVwdCBvdXRwdXQgd2lsbCBiZSBhc3NlcnRlZA0KI2RlZmluZSBBRVNfT19JUlFFTkFCTEUgICAgICAgMHgwMDAwMDA5MCAgLy8gVGhpcyByZWdpc3RlciBjb250YWlucyBhbiBlbmFibGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0IGZvciBlYWNoIHVuaXF1ZSBpbnRlcnJ1cHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGVkIGJ5IHRoZSBtb2R1bGUuIEl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoZXMgdGhlIGxheW91dCBvZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBRVNfSVJRU1RBVFVTIHJlZ2lzdGVyLiBBbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcnJ1cHQgaXMgZW5hYmxlZCB3aGVuIHRoZSBiaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhpcyByZWdpc3RlciBpcyBzZXQgdG8g4oCYMeKAmS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW4gaW50ZXJydXB0IHRoYXQgaXMgZW5hYmxlZCBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGVkIHRvIHRoZSBTSU5UUkVRVUVTVF94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dHB1dC4gQWxsIGludGVycnVwdHMgbmVlZCB0byBiZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmFibGVkIGV4cGxpY2l0bHkgYnkgd3JpdGluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHJlZ2lzdGVyLg0KDQoNCg0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMl82IHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkyXzZfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMl82X0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMl83IHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkyXzdfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMl83X0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMl80IHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkyXzRfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMl80X0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMl81IHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkyXzVfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMl81X0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMl8yIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkyXzJfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMl8yX0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMl8zIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkyXzNfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMl8zX0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMl8wIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkyXzBfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMl8wX0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMl8xIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkyXzFfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMl8xX0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMV82IHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkxXzZfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMV82X0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMV83IHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkxXzdfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMV83X0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMV80IHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkxXzRfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMV80X0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMV81IHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkxXzVfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMV81X0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMV8yIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkxXzJfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMV8yX0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMV8zIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkxXzNfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMV8zX0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMV8wIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkxXzBfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMV8wX0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fS0VZMV8xIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19LRVkxXzFfS0VZX00gICAgICAweEZGRkZGRkZGICAvLyBrZXkgZGF0YQ0KI2RlZmluZSBBRVNfS0VZMV8xX0tFWV9TICAgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fSVZfSU5fMCByZWdpc3Rlci4NCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KI2RlZmluZSBBRVNfSVZfSU5fMF9EQVRBX00gICAgMHhGRkZGRkZGRiAgLy8gSVYgZGF0YQ0KI2RlZmluZSBBRVNfSVZfSU5fMF9EQVRBX1MgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fSVZfSU5fMSByZWdpc3Rlci4NCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KI2RlZmluZSBBRVNfSVZfSU5fMV9EQVRBX00gICAgMHhGRkZGRkZGRiAgLy8gSVYgZGF0YQ0KI2RlZmluZSBBRVNfSVZfSU5fMV9EQVRBX1MgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fSVZfSU5fMiByZWdpc3Rlci4NCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KI2RlZmluZSBBRVNfSVZfSU5fMl9EQVRBX00gICAgMHhGRkZGRkZGRiAgLy8gSVYgZGF0YQ0KI2RlZmluZSBBRVNfSVZfSU5fMl9EQVRBX1MgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fSVZfSU5fMyByZWdpc3Rlci4NCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KI2RlZmluZSBBRVNfSVZfSU5fM19EQVRBX00gICAgMHhGRkZGRkZGRiAgLy8gSVYgZGF0YQ0KI2RlZmluZSBBRVNfSVZfSU5fM19EQVRBX1MgICAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fQ1RSTCByZWdpc3Rlci4NCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KI2RlZmluZSBBRVNfQ1RSTF9DT05URVhUX1JFQURZIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMCAgLy8gSWYg4oCYMeKAmUBAIHRoaXMgcmVhZC1vbmx5IHN0YXR1cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSByZWdpc3RlcnMgY2FuIGJlIG92ZXJ3cml0dGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgaG9zdCBpcyBwZXJtaXR0ZWQgdG8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGUgdGhlIG5leHQgY29udGV4dC4NCg0KI2RlZmluZSBBRVNfQ1RSTF9TVkNUWFRSRFkgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwICAvLyBJZiDigJgx4oCZQEAgdGhpcyByZWFkLW9ubHkgc3RhdHVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdCBpbmRpY2F0ZXMgdGhhdCBhbiBBRVMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXV0aGVudGljYXRpb24gVEFHIGFuZC9vciBJVg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBibG9jayhzKSBpcy9hcmUgYXZhaWxhYmxlIGZvciB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaG9zdCB0byByZXRyaWV2ZS4gVGhpcyBiaXQgaXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBhc3NlcnRlZCBpZiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g4oCYc2F2ZV9jb250ZXh04oCZIGJpdCBpcyBzZXQgdG8g4oCYMeKAmS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJpdCBpcyBtdXR1YWwgZXhjbHVzaXZlIHdpdGgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIOKAmGNvbnRleHRfcmVhZHnigJkgYml0Lg0KDQojZGVmaW5lIEFFU19DVFJMX1NBVkVfQ09OVEVYVCAweDIwMDAwMDAwICAvLyBUaGlzIGJpdCBpcyB1c2VkIHRvIGluZGljYXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgYW4gYXV0aGVudGljYXRpb24gVEFHIG9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc3VsdCBJViBuZWVkcyB0byBiZSBzdG9yZWQgYXMgYQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXN1bHQgY29udGV4dC4gSWYgdGhpcyBiaXQgaXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0QEAgY29udGV4dCBvdXRwdXQgRE1BIGFuZC9vcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCBpZiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uIGlzIGZpbmlzaGVkIGFuZCByZWxhdGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpZ25hbHMgYXJlIGVuYWJsZWQuDQojZGVmaW5lIEFFU19DVFJMX0NDTV9NICAgICAgMHgwMUMwMDAwMCAgLy8gRGVmaW5lcyDigJxN4oA/IHRoYXQgaW5kaWNhdGVkIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpZWxkIGZvciBDQ00gb3BlcmF0aW9uczsgdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIGZpZWxkIGxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlcXVhbHMgdHdvIHRpbWVzICh0aGUgdmFsdWUgb2YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0NNLU0gcGx1cyBvbmUpLiBOb3RlIHRoYXQgdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFFUyBFbmdpbmUgYWx3YXlzIHJldHVybnMgYQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMjgtYml0IGF1dGhlbnRpY2F0aW9uIGZpZWxkQEAgb2YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggdGhlIE0gbGVhc3Qgc2lnbmlmaWNhbnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgYXJlIHZhbGlkLiBBbGwgdmFsdWVzIGFyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdXBwb3J0ZWQuDQojZGVmaW5lIEFFU19DVFJMX0NDTV9TICAgICAgMjINCiNkZWZpbmUgQUVTX0NUUkxfQ0NNX0xfTSAgICAgIDB4MDAzODAwMDAgIC8vIERlZmluZXMg4oCcTOKAPyB0aGF0IGluZGljYXRlZCB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lkdGggb2YgdGhlIGxlbmd0aCBmaWVsZCBmb3IgQ0NNDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbnM7IHRoZSBsZW5ndGggZmllbGQgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgZXF1YWxzIHRoZSB2YWx1ZSBvZiBDTU0tTA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwbHVzIG9uZS4gU3VwcG9ydGVkIHZhbHVlcyBmb3IgTA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgKHByb2dyYW1tZWQgdmFsdWUpOiAyICgxKUBAIDQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKDMpIGFuZCA4ICg3KS4NCiNkZWZpbmUgQUVTX0NUUkxfQ0NNX0xfUyAgICAgIDE5DQojZGVmaW5lIEFFU19DVFJMX0NDTSAgICAgICAgICAweDAwMDQwMDAwICAvLyBBRVMtQ0NNIGlzIHNlbGVjdGVkQEAgdGhpcyBpcyBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbWJpbmVkIG1vZGVAQCB1c2luZyBBRVMgZm9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJvdGggYXV0aGVudGljYXRpb24gYW5kDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuY3J5cHRpb24uIE5vIGFkZGl0aW9uYWwgbW9kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3Rpb24gaXMgcmVxdWlyZWQuIDAgT3RoZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kZSBzZWxlY3RlZCAxIGNjbSBtb2RlIHNlbGVjdGVkDQojZGVmaW5lIEFFU19DVFJMX0dDTV9NICAgICAgICAweDAwMDMwMDAwICAvLyBBRVMtR0NNIG1vZGUgaXMgc2VsZWN0ZWQudGhpcyBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGNvbWJpbmVkIG1vZGVAQCB1c2luZyB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2Fsb2lzIGZpZWxkIG11bHRpcGxpZXIgR0YoMl4xMjgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBhdXRoZW50aWNhdGlvbiBhbmQgQUVTLUNUUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2RlIGZvciBlbmNyeXB0aW9uQEAgdGhlIGJpdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmeSB0aGUgR0NNIG1vZGUuIDB4MCBObw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24gMHgxIEdIQVNIIHdpdGggSCBsb2FkZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIFkwLWVuY3J5cHRlZCBmb3JjZWQgdG8gemVybw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDIgR0hBU0ggd2l0aCBIIGxvYWRlZCBhbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWTAtZW5jcnlwdGVkIGNhbGN1bGF0ZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJuYWxseSAweDMgQXV0b25vbW91cyBHSEFTSA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoYm90aCBIIGFuZCBZMC1lbmNyeXB0ZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlZCBpbnRlcm5hbGx5KQ0KI2RlZmluZSBBRVNfQ1RSTF9HQ01fUyAgICAgICAgMTYNCiNkZWZpbmUgQUVTX0NUUkxfQ0JDTUFDICAgICAgIDB4MDAwMDgwMDAgIC8vIEFFUy1DQkMgTUFDIGlzIHNlbGVjdGVkQEAgdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBiaXQgbXVzdCBiZSBzZXQgdG8g4oCYMeKAmQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgdGhpcyBtb2RlLiAwIE90aGVyIG1vZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgMSBjYmNtYWMgbW9kZSBzZWxlY3RlZA0KI2RlZmluZSBBRVNfQ1RSTF9GOSAgICAgICAgICAgMHgwMDAwNDAwMCAgLy8gQUVTIGY5IG1vZGUgaXMgc2VsZWN0ZWRAQCB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQUVTIGtleSBzaXplIG11c3QgYmUgc2V0IHRvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEyOC1iaXQgZm9yIHRoaXMgbW9kZS4gMCBPdGhlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2RlIHNlbGVjdGVkIDEgZjkgc2VsZWN0ZWQNCiNkZWZpbmUgQUVTX0NUUkxfRjggICAgICAgICAgIDB4MDAwMDIwMDAgIC8vIEFFUyBmOCBtb2RlIGlzIHNlbGVjdGVkQEAgdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFFUyBrZXkgc2l6ZSBtdXN0IGJlIHNldCB0bw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMjgtYml0IGZvciB0aGlzIG1vZGUuIDAgT3RoZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kZSBzZWxlY3RlZCAxIGY4IHNlbGVjdGVkDQojZGVmaW5lIEFFU19DVFJMX1hUU19NICAgICAgICAweDAwMDAxODAwICAvLyBBRVMtWFRTIG9wZXJhdGlvbiBpcyBzZWxlY3RlZDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJpdHMgc3BlY2lmeSB0aGUgWFRTIG1vZGUuMDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPSBQcmV2aW91cy9pbnRlcm1lZGlhdGUgdHdlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgYW5kIOKAmGrigJkgbG9hZGVkICh2YWx1ZSBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkZWQgdmlhIElWQEAgaiBpcyBsb2FkZWQgdmlhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBBQUQgbGVuZ3RoIHJlZ2lzdGVyKSAweDAgTm8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uIDB4MQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmV2aW91cy9pbnRlcm1lZGlhdGUgdHdlYWsgdmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIOKAmGrigJkgbG9hZGVkICh2YWx1ZSBpcyBsb2FkZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmlhIElWQEAgaiBpcyBsb2FkZWQgdmlhIHRoZSBBQUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIHJlZ2lzdGVyKSAweDIgS2V5MkBAIGkgYW5kDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGogbG9hZGVkIChpIGlzIGxvYWRlZCB2aWEgSVZAQCBqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGxvYWRlZCB2aWEgdGhlIEFBRCBsZW5ndGgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIpIDB4MyBLZXkyIGFuZCBpIGxvYWRlZEBADQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGo9MCAoaSBpcyBsb2FkZWQgdmlhIElWKQ0KI2RlZmluZSBBRVNfQ1RSTF9YVFNfUyAgICAgICAgMTENCiNkZWZpbmUgQUVTX0NUUkxfQ0ZCICAgICAgICAgIDB4MDAwMDA0MDAgIC8vIGZ1bGwgYmxvY2sgQUVTIGNpcGhlciBmZWVkYmFjaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2RlIChDRkIxMjgpIGlzIHNlbGVjdGVkLiAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIG1vZGUgc2VsZWN0ZWQgMSBjZmINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQNCiNkZWZpbmUgQUVTX0NUUkxfSUNNICAgICAgICAgIDB4MDAwMDAyMDAgIC8vIEFFUyBpbnRlZ2VyIGNvdW50ZXIgbW9kZSAoSUNNKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBzZWxlY3RlZEBAIHRoaXMgaXMgYSBjb3VudGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZGUgd2l0aCBhIDE2LWJpdCB3aWRlIGNvdW50ZXIuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgT3RoZXIgbW9kZSBzZWxlY3RlZC4gMSBJQ00gbW9kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZA0KI2RlZmluZSBBRVNfQ1RSTF9DVFJfV0lEVEhfTSAgMHgwMDAwMDE4MCAgLy8gU3BlY2lmaWVzIHRoZSBjb3VudGVyIHdpZHRoIGZvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBRVMtQ1RSIG1vZGUgMHgwIENvdW50ZXIgaXMgMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0cyAweDEgQ291bnRlciBpcyA2NCBiaXRzIDB4Mg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb3VudGVyIGlzIDEyOCBiaXRzIDB4MyBDb3VudGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIDE5MiBiaXRzDQojZGVmaW5lIEFFU19DVFJMX0NUUl9XSURUSF9TICA3DQojZGVmaW5lIEFFU19DVFJMX0NUUiAgICAgICAgICAweDAwMDAwMDQwICAvLyBUdGhpcyBiaXQgbXVzdCBhbHNvIGJlIHNldCBmb3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR0NNIGFuZCBDQ01AQCB3aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlZC4gMCBPdGhlciBtb2RlIHNlbGVjdGVkIDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ291bnRlciBtb2RlDQojZGVmaW5lIEFFU19DVFJMX01PREUgICAgICAgICAweDAwMDAwMDIwICAvLyBlY2IvY2JjIG1vZGUgMCBlY2IgbW9kZSAxIGNiYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2RlDQojZGVmaW5lIEFFU19DVFJMX0tFWV9TSVpFX00gICAweDAwMDAwMDE4ICAvLyBrZXkgc2l6ZSAweDAgcmVzZXJ2ZWQgMHgxIEtleSBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMjggYml0cy4gMHgyIEtleSBpcyAxOTIgYml0cyAweDMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2V5IGlzIDI1Ng0KI2RlZmluZSBBRVNfQ1RSTF9LRVlfU0laRV9TICAgMw0KI2RlZmluZSBBRVNfQ1RSTF9ESVJFQ1RJT04gICAgMHgwMDAwMDAwNCAgLy8gSWYgc2V0IHRvIOKAmDHigJkgYW4gZW5jcnlwdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24gaXMgcGVyZm9ybWVkLiBJZiBzZXQgdG8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g4oCYMOKAmSBhIGRlY3J5cHQgb3BlcmF0aW9uIGlzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBlcmZvcm1lZC4gUmVhZMKgMCBkZWNyeXB0aW9uIGlzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIFJlYWTCoDEgRW5jcnlwdGlvbiBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZA0KI2RlZmluZSBBRVNfQ1RSTF9JTlBVVF9SRUFEWSAgMHgwMDAwMDAwMiAgLy8gSWYg4oCYMeKAmUBAIHRoaXMgcmVhZC1vbmx5IHN0YXR1cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIDE2LWJ5dGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5wdXQgYnVmZmVyIGlzIGVtcHR5QEAgYW5kIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBob3N0IGlzIHBlcm1pdHRlZCB0byB3cml0ZSB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBibG9jayBvZiBkYXRhLg0KI2RlZmluZSBBRVNfQ1RSTF9PVVRQVVRfUkVBRFkgMHgwMDAwMDAwMSAgLy8gSWYg4oCYMeKAmUBAIHRoaXMgcmVhZC1vbmx5IHN0YXR1cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXQgaW5kaWNhdGVzIHRoYXQgYW4gQUVTIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBibG9jayBpcyBhdmFpbGFibGUgZm9yIHRoZSBob3N0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHJldHJpZXZlLg0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUNCi8vIEFFU19PX0NfTEVOR1RIXzAgcmVnaXN0ZXIuDQovLw0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQovLw0KLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlDQovLyBBRVNfT19DX0xFTkdUSF8xIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19DX0xFTkdUSF8xX0xFTkdUSF9NIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRkZGRkZGRiAgLy8gRGF0YSBsZW5ndGggKE1TVykgbGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVycyAoTFNXIGFuZCBNU1cpIHN0b3JlIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcnlwdG9ncmFwaGljIGRhdGEgbGVuZ3RoIGluDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIGZvciBhbGwgbW9kZXMuIE9uY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2luZyB3aXRoIHRoaXMgY29udGV4dCBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydGVkQEAgdGhpcyBsZW5ndGggZGVjcmVtZW50cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB6ZXJvLiBEYXRhIGxlbmd0aHMgdXAgdG8gKDJeNjENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g4oCTIDEpIGJ5dGVzIGFyZSBhbGxvd2VkLiBGb3IgR0NNQEANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IHZhbHVlIHVwIHRvIDJeMzYgLSAzMiBieXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gYmUgdXNlZC4gVGhpcyBpcyBiZWNhdXNlIGENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzItYml0IGNvdW50ZXIgbW9kZSBpcyB1c2VkOyB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4aW11bSBudW1iZXIgb2YgMTI4LWJpdCBibG9ja3MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgMl4zMiDigJMgMkBAIHJlc3VsdGluZyBpbiBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9mIDJeMzYgLQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzMi4gQSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJzIHRoZSBlbmdpbmUgdG8gc3RhcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhpcyBjb250ZXh0LiBUaGlzIGlzIHZhbGlkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBhbGwgbW9kZXMgZXhjZXB0IEdDTSBhbmQgQ0NNLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIHRoZSBjb21iaW5lZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2Rlc0BAIHRoaXMgbGVuZ3RoIGRvZXMgbm90DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGF1dGhlbnRpY2F0aW9uIG9ubHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YTsgdGhlIGF1dGhlbnRpY2F0aW9uIGxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBzcGVjaWZpZWQgaW4gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFFU19BVVRIX0xFTkdUSCByZWdpc3RlciBiZWxvdy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsIG1vZGVzIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgY29tYmluZWQgbW9kZXNAQCBpdCBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGxvd2VkIHRvIGhhdmUgb25lIG9mIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGhzIGVxdWFsIHRvIHplcm8uIEZvciB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmFzaWMgZW5jcnlwdGlvbiBtb2Rlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoRUNCL0NCQy9DVFIvSUNNL0NGQjEyOCkgaXQgaXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3dlZCB0byBwcm9ncmFtIHplcm8gdG8gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBmaWVsZDsgaW4gdGhhdCBjYXNlIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGggaXMgYXNzdW1lZCBpbmZpbml0ZS4gQWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgbXVzdCBiZSBieXRlICg4LWJpdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25lZDsgYml0IGFsaWduZWQgZGF0YSBzdHJlYW1zDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBBRVMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5naW5lLiBGb3IgYSBIb3N0IHJlYWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uQEAgdGhlc2UgcmVnaXN0ZXJzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBhbGwtemVyb2VzLg0KDQojZGVmaW5lIEFFU19DX0xFTkdUSF8xX0xFTkdUSF9TIDANCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQovLw0KLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlDQovLyBBRVNfT19BVVRIX0xFTkdUSCByZWdpc3Rlci4NCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KI2RlZmluZSBBRVNfQVVUSF9MRU5HVEhfQVVUSF9NIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRiAgLy8gZGF0YQ0KDQojZGVmaW5lIEFFU19BVVRIX0xFTkdUSF9BVVRIX1MgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fREFUQV9JTl8wIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19EQVRBX0lOXzBfREFUQV9NICAweEZGRkZGRkZGICAvLyBEYXRhIHRvIGVuY3J5cHQvZGVjcnlwdA0KI2RlZmluZSBBRVNfREFUQV9JTl8wX0RBVEFfUyAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fREFUQV9JTl8xIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19EQVRBX0lOXzFfREFUQV9NICAweEZGRkZGRkZGICAvLyBEYXRhIHRvIGVuY3J5cHQvZGVjcnlwdA0KI2RlZmluZSBBRVNfREFUQV9JTl8xX0RBVEFfUyAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fREFUQV9JTl8yIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19EQVRBX0lOXzJfREFUQV9NICAweEZGRkZGRkZGICAvLyBEYXRhIHRvIGVuY3J5cHQvZGVjcnlwdA0KI2RlZmluZSBBRVNfREFUQV9JTl8yX0RBVEFfUyAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fREFUQV9JTl8zIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19EQVRBX0lOXzNfREFUQV9NICAweEZGRkZGRkZGICAvLyBEYXRhIHRvIGVuY3J5cHQvZGVjcnlwdA0KI2RlZmluZSBBRVNfREFUQV9JTl8zX0RBVEFfUyAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fVEFHX09VVF8wIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19UQUdfT1VUXzBfSEFTSF9NICAweEZGRkZGRkZGICAvLyBIYXNoIHJlc3VsdCAoTVNXKQ0KI2RlZmluZSBBRVNfVEFHX09VVF8wX0hBU0hfUyAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fVEFHX09VVF8xIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19UQUdfT1VUXzFfSEFTSF9NICAweEZGRkZGRkZGICAvLyBIYXNoIHJlc3VsdCAoTVNXKQ0KI2RlZmluZSBBRVNfVEFHX09VVF8xX0hBU0hfUyAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fVEFHX09VVF8yIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19UQUdfT1VUXzJfSEFTSF9NICAweEZGRkZGRkZGICAvLyBIYXNoIHJlc3VsdCAoTVNXKQ0KI2RlZmluZSBBRVNfVEFHX09VVF8yX0hBU0hfUyAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fVEFHX09VVF8zIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19UQUdfT1VUXzNfSEFTSF9NICAweEZGRkZGRkZGICAvLyBIYXNoIHJlc3VsdCAoTFNXKQ0KI2RlZmluZSBBRVNfVEFHX09VVF8zX0hBU0hfUyAgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fUkVWSVNJT04gcmVnaXN0ZXIuDQovLw0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiNkZWZpbmUgQUVTX1JFVklTSU9OX1NDSEVNRV9NIDB4QzAwMDAwMDANCiNkZWZpbmUgQUVTX1JFVklTSU9OX1NDSEVNRV9TIDMwDQojZGVmaW5lIEFFU19SRVZJU0lPTl9GVU5DX00gICAweDBGRkYwMDAwICAvLyBGdW5jdGlvbiBpbmRpY2F0ZXMgYSBzb2Z0d2FyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wYXRpYmxlIG1vZHVsZSBmYW1pbHkuIElmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIGxldmVsIG9mIHNvZnR3YXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBhdGliaWxpdHkgYSBuZXcgRnVuYyBudW1iZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGFuZCBoZW5jZSBSRVZJU0lPTikgc2hvdWxkIGJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbmVkLg0KI2RlZmluZSBBRVNfUkVWSVNJT05fRlVOQ19TICAgMTYNCiNkZWZpbmUgQUVTX1JFVklTSU9OX1JfUlRMX00gIDB4MDAwMEY4MDAgIC8vIFJUTCBWZXJzaW9uIChSKUBAIG1haW50YWluZWQgYnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSVAgZGVzaWduIG93bmVyLiBSVEwgZm9sbG93cyBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlcmluZyBzdWNoIGFzIFguWS5SLlogd2hpY2gNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGV4cGxhaW5lZCBpbiB0aGlzIHRhYmxlLiBSDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZXMgT05MWSB3aGVuOiAoMSkgUERTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwbG9hZHMgb2NjdXIgd2hpY2ggbWF5IGhhdmUgYmVlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkdWUgdG8gc3BlYyBjaGFuZ2VzICgyKSBCdWcgZml4ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2NjdXIgKDMpIFJlc2V0cyB0byAnMCcgd2hlbiBYIG9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFkgY2hhbmdlcy4gRGVzaWduIHRlYW0gaGFzIGFuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVybmFsICdaJyAoY3VzdG9tZXIgaW52aXNpYmxlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgd2hpY2ggaW5jcmVtZW50cyBvbiBldmVyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkcm9wIHRoYXQgaGFwcGVucyBkdWUgdG8gRFYgYW5kDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJUTCB1cGRhdGVzLiBaIHJlc2V0cyB0byAwIHdoZW4gUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnRzLg0KI2RlZmluZSBBRVNfUkVWSVNJT05fUl9SVExfUyAgMTENCiNkZWZpbmUgQUVTX1JFVklTSU9OX1hfTUFKT1JfTSBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAgIC8vIE1ham9yIFJldmlzaW9uIChYKUBAIG1haW50YWluZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgSVAgc3BlY2lmaWNhdGlvbiBvd25lci4gWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VzIE9OTFkgd2hlbjogKDEpIFRoZXJlIGlzIGENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFqb3IgZmVhdHVyZSBhZGRpdGlvbi4gQW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZSB3b3VsZCBiZSBhZGRpbmcgTWFzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vZGUgdG8gVXRvcGlhIExldmVsMi4gVGhlIEZ1bmMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmllbGQgKG9yIENsYXNzL1R5cGUgaW4gb2xkIFBJRA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXQpIHdpbGwgcmVtYWluIHRoZSBzYW1lLiBYDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvZXMgTk9UIGNoYW5nZSBkdWUgdG86ICgxKSBCdWcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZml4ZXMgKDIpIENoYW5nZSBpbiBmZWF0dXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcmFtZXRlcnMuDQoNCiNkZWZpbmUgQUVTX1JFVklTSU9OX1hfTUFKT1JfUyA4DQojZGVmaW5lIEFFU19SRVZJU0lPTl9DVVNUT01fTSAweDAwMDAwMEMwDQojZGVmaW5lIEFFU19SRVZJU0lPTl9DVVNUT01fUyA2DQojZGVmaW5lIEFFU19SRVZJU0lPTl9ZX01JTk9SX00gXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGICAvLyBNaW5vciBSZXZpc2lvbiAoWSlAQCBtYWludGFpbmVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IElQIHNwZWNpZmljYXRpb24gb3duZXIuIFkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlcyBPTkxZIHdoZW46ICgxKSBGZWF0dXJlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2NhbGVkICh1cCBvciBkb3duKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmxleGliaWxpdHkgZXhpc3RzIGluIHRoYXQgdGhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmZWF0dXJlIHNjYWxhYmlsaXR5IG1heSBlaXRoZXIgYmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVwcmVzZW50ZWQgaW4gdGhlIFkgY2hhbmdlIG9yIGENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgcmVnaXN0ZXIgaW4gdGhlIElQIHRoYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5kaWNhdGVzIHdoaWNoIGZlYXR1cmVzIGFyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGFjdGx5IGF2YWlsYWJsZS4gKDIpIFdoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmVhdHVyZSBjcmVlcHMgZnJvbSBJcy1Ob3QgbGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBJcyBsaXN0LiBCdXQgdGhpcyBtYXkgbm90IGJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjYXNlIG9uY2UgaXQgc2VlcyBzaWxpY29uOyBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBjYXNlIFggd2lsbCBjaGFuZ2UuIFkgZG9lcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1QgY2hhbmdlIGR1ZSB0bzogKDEpIEJ1ZyBmaXhlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoMikgVHlwb3Mgb3IgY2xhcmlmaWNhdGlvbnMgKDMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ham9yIGZ1bmN0aW9uYWwvZmVhdHVyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UvYWRkaXRpb24vZGVsZXRpb24uIEluc3RlYWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgY2hhbmdlcyBtYXkgYmUgcmVmbGVjdGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZpYSBSQEAgU0BAIFggYXMgYXBwbGljYWJsZS4gU3BlYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvd25lciBtYWludGFpbnMgYQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXN0b21lci1pbnZpc2libGUgbnVtYmVyICdTJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBjaGFuZ2VzIGR1ZSB0bzogKDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cG9zL2NsYXJpZmljYXRpb25zICgyKSBCdWcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgYnVnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBkdWUgdG8gYSBzcGVjIGNoYW5nZSBidXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHVlIHRvIGltcGxlbWVudGF0aW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXZlcnRoZWxlc3NAQCB0aGUgc3BlYyB0cmFja3MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIElQIGJ1Z3MuIEFuIFJUTCByZWxlYXNlIChzYXkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHNpbGljb24gUEcxLjEpIHRoYXQgb2NjdXJzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGR1ZSB0byBidWcgZml4IHNob3VsZCBkb2N1bWVudA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBzcGVjIG51bWJlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoWC5ZLlMpIGluIGl0cyByZWxlYXNlIG5vdGVzLg0KDQojZGVmaW5lIEFFU19SRVZJU0lPTl9ZX01JTk9SX1MgMA0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vDQovLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQUVTX09fU1lTQ09ORklHIHJlZ2lzdGVyLg0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQojZGVmaW5lIEFFU19TWVNDT05GSUdfTUFDT05URVhUX09VVF9PTl9EQVRBX09VVCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAgIC8vIElmIHNldCB0byAnMScgdGhlIHR3byBjb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dCByZXF1ZXN0cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoZG1hX3JlcV9jb250ZXh0X291dF9lbkBAIEJpdCBbOF0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWJvdmVAQCBhbmQgY29udGV4dF9vdXQgaW50ZXJydXB0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZUBAIEJpdCBbM10gb2YgQUVTX0lSUUVOQUJMRQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlcikgYXJlIG1hcHBlZCBvbiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBkYXRhIG91dHB1dCByZXF1ZXN0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdC4gSW4gdGhpcyBjYXNlQEAgdGhlIG9yaWdpbmFsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOKAmGNvbnRleHQgb3V04oCZIGJpdCB2YWx1ZXMgYXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZWQuDQoNCiNkZWZpbmUgQUVTX1NZU0NPTkZJR19ETUFfUkVRX0NPTlRFWFRfT1VUX0VOIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCAgLy8gSWYgc2V0IHRvIOKAmDHigJlAQCB0aGUgRE1BIGNvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0cHV0IHJlcXVlc3QgaXMgZW5hYmxlZCAoZm9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgZGF0YSBvdXRAQCBlLmcuIFRBRyBmb3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXV0aGVudGljYXRpb24gbW9kZXMpLiAwIERtYQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCAxIERtYSBlbmFibGVkDQoNCiNkZWZpbmUgQUVTX1NZU0NPTkZJR19ETUFfUkVRX0NPTlRFWFRfSU5fRU4gXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwICAvLyBJZiBzZXQgdG8g4oCYMeKAmUBAIHRoZSBETUEgY29udGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1ZXN0IGlzIGVuYWJsZWQuIDAgRG1hDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkIDEgRG1hIGVuYWJsZWQNCg0KI2RlZmluZSBBRVNfU1lTQ09ORklHX0RNQV9SRVFfREFUQV9PVVRfRU4gXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwICAvLyBJZiBzZXQgdG8g4oCYMeKAmUBAIHRoZSBETUEgb3V0cHV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QgaXMgZW5hYmxlZC4gMCBEbWENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgMSBEbWEgZW5hYmxlZA0KDQojZGVmaW5lIEFFU19TWVNDT05GSUdfRE1BX1JFUV9EQVRBX0lOX0VOIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMCAgLy8gSWYgc2V0IHRvIOKAmDHigJlAQCB0aGUgRE1BIGlucHV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QgaXMgZW5hYmxlZC4gMCBEbWENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgMSBEbWEgZW5hYmxlZA0KDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLy8NCi8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRVNfT19TWVNTVEFUVVMgcmVnaXN0ZXIuDQovLw0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiNkZWZpbmUgQUVTX1NZU1NUQVRVU19SRVNFVERPTkUgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxDQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQovLw0KLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFFU19PX0lSUVNUQVRVUyByZWdpc3Rlci4NCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KI2RlZmluZSBBRVNfSVJRU1RBVFVTX0NPTlRFWFRfT1VUIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gVGhpcyBiaXQgaW5kaWNhdGVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIHRhZyAoYW5kIElWKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcnJ1cHQocykgaXMvYXJlIGFjdGl2ZSBhbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlcnMgdGhlIGludGVycnVwdCBvdXRwdXQuDQoNCiNkZWZpbmUgQUVTX0lSUVNUQVRVU19EQVRBX09VVCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgIC8vIFRoaXMgYml0IGluZGljYXRlcyBkYXRhIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcnJ1cHQgaXMgYWN0aXZlIGFuZCB0cmlnZ2Vycw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaW50ZXJydXB0IG91dHB1dC4NCg0KI2RlZmluZSBBRVNfSVJRU1RBVFVTX0RBVEFfSU4gMHgwMDAwMDAwMiAgLy8gVGhpcyBiaXQgaW5kaWNhdGVzIGRhdGEgaW5wdXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJydXB0IGlzIGFjdGl2ZSBhbmQgdHJpZ2dlcnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGludGVycnVwdCBvdXRwdXQuDQojZGVmaW5lIEFFU19JUlFTVEFUVVNfQ09OVEVYX0lOIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gVGhpcyBiaXQgaW5kaWNhdGVzIGNvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJydXB0IGlzIGFjdGl2ZSBhbmQgdHJpZ2dlcnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGludGVycnVwdCBvdXRwdXQuDQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQovLw0KLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFFU19PX0lSUUVOQUJMRSByZWdpc3Rlci4NCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KI2RlZmluZSBBRVNfSVJRRU5BQkxFX0NPTlRFWFRfT1VUIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gVGhpcyBiaXQgaW5kaWNhdGVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIHRhZyAoYW5kIElWKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcnJ1cHQocykgaXMvYXJlIGFjdGl2ZSBhbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlcnMgdGhlIGludGVycnVwdCBvdXRwdXQuDQoNCiNkZWZpbmUgQUVTX0lSUUVOQUJMRV9EQVRBX09VVCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgIC8vIFRoaXMgYml0IGluZGljYXRlcyBkYXRhIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcnJ1cHQgaXMgYWN0aXZlIGFuZCB0cmlnZ2Vycw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaW50ZXJydXB0IG91dHB1dC4NCg0KI2RlZmluZSBBRVNfSVJRRU5BQkxFX0RBVEFfSU4gMHgwMDAwMDAwMiAgLy8gVGhpcyBiaXQgaW5kaWNhdGVzIGRhdGEgaW5wdXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJydXB0IGlzIGFjdGl2ZSBhbmQgdHJpZ2dlcnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGludGVycnVwdCBvdXRwdXQuDQojZGVmaW5lIEFFU19JUlFFTkFCTEVfQ09OVEVYX0lOIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gVGhpcyBiaXQgaW5kaWNhdGVzIGNvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJydXB0IGlzIGFjdGl2ZSBhbmQgdHJpZ2dlcnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGludGVycnVwdCBvdXRwdXQuDQoNCg0KDQoNCiNlbmRpZiAvLyBfX0hXX0FFU19IX18NCg==