LyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBmaWxlICAgIHN0bTMyZjR4eC5oDQogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCiAgKiBAdmVyc2lvbiBWMi42LjENCiAgKiBAZGF0ZSAgICAxNC1GZWJydWFyeS0yMDE3DQogICogQGJyaWVmICAgQ01TSVMgU1RNMzJGNHh4IERldmljZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZS4NCiAgKiAgICAgICAgICAgIA0KICAqICAgICAgICAgIFRoZSBmaWxlIGlzIHRoZSB1bmlxdWUgaW5jbHVkZSBmaWxlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXINCiAgKiAgICAgICAgICBpcyB1c2luZyBpbiB0aGUgQyBzb3VyY2UgY29kZSwgdXN1YWxseSBpbiBtYWluLmMuIFRoaXMgZmlsZSBjb250YWluczoNCiAgKiAgICAgICAgICAgLSBDb25maWd1cmF0aW9uIHNlY3Rpb24gdGhhdCBhbGxvd3MgdG8gc2VsZWN0Og0KICAqICAgICAgICAgICAgICAtIFRoZSBTVE0zMkY0eHggZGV2aWNlIHVzZWQgaW4gdGhlIHRhcmdldCBhcHBsaWNhdGlvbg0KICAqICAgICAgICAgICAgICAtIFRvIHVzZSBvciBub3QgdGhlIHBlcmlwaGVyYWyScyBkcml2ZXJzIGluIGFwcGxpY2F0aW9uIGNvZGUoaS5lLiANCiAgKiAgICAgICAgICAgICAgICBjb2RlIHdpbGwgYmUgYmFzZWQgb24gZGlyZWN0IGFjY2VzcyB0byBwZXJpcGhlcmFsknMgcmVnaXN0ZXJzIA0KICAqICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGRyaXZlcnMgQVBJKSwgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBieSANCiAgKiAgICAgICAgICAgICAgICAiI2RlZmluZSBVU0VfSEFMX0RSSVZFUiINCiAgKiAgDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBhdHRlbnRpb24NCiAgKg0KICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KICAqDQogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCiAgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KICAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNUTWljcm9lbGVjdHJvbmljcyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCiAgKiAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KICAqICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICoNCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCiAgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQogICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KICAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQogICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCiAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KICAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQogICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICAqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgQ01TSVMNCiAgKiBAew0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgc3RtMzJmNHh4DQogICogQHsNCiAgKi8NCiAgICANCiNpZm5kZWYgX19TVE0zMkY0eHhfSA0KI2RlZmluZSBfX1NUTTMyRjR4eF9IDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KIGV4dGVybiAiQyIgew0KI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQogICANCi8qKiBAYWRkdG9ncm91cCBMaWJyYXJ5X2NvbmZpZ3VyYXRpb25fc2VjdGlvbg0KICAqIEB7DQogICovDQogIA0KLyoqDQogICogQGJyaWVmIFNUTTMyIEZhbWlseQ0KICAqLw0KI2lmICFkZWZpbmVkICAoU1RNMzJGNCkNCiNkZWZpbmUgU1RNMzJGNA0KI2VuZGlmIC8qIFNUTTMyRjQgKi8NCg0KLyogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGFjY29yZGluZyB0byB0aGUgdGFyZ2V0IFNUTTMyIGRldmljZSB1c2VkIGluIHlvdXINCiAgIGFwcGxpY2F0aW9uIA0KICAqLw0KI2lmICFkZWZpbmVkIChTVE0zMkY0MDV4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjQxNXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNDA3eHgpICYmICFkZWZpbmVkIChTVE0zMkY0MTd4eCkgJiYgXA0KICAgICFkZWZpbmVkIChTVE0zMkY0Mjd4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjQzN3h4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNDI5eHgpICYmICFkZWZpbmVkIChTVE0zMkY0Mzl4eCkgJiYgXA0KICAgICFkZWZpbmVkIChTVE0zMkY0MDF4QykgJiYgIWRlZmluZWQgKFNUTTMyRjQwMXhFKSAmJiAhZGVmaW5lZCAoU1RNMzJGNDEwVHgpICYmICFkZWZpbmVkIChTVE0zMkY0MTBDeCkgJiYgXA0KICAgICFkZWZpbmVkIChTVE0zMkY0MTBSeCkgJiYgIWRlZmluZWQgKFNUTTMyRjQxMXhFKSAmJiAhZGVmaW5lZCAoU1RNMzJGNDQ2eHgpICYmICFkZWZpbmVkIChTVE0zMkY0Njl4eCkgJiYgXA0KICAgICFkZWZpbmVkIChTVE0zMkY0Nzl4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjQxMkN4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNDEyUngpICYmICFkZWZpbmVkIChTVE0zMkY0MTJWeCkgJiYgXA0KICAgICFkZWZpbmVkIChTVE0zMkY0MTJaeCkgJiYgIWRlZmluZWQgKFNUTTMyRjQxM3h4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNDIzeHgpDQogIC8qICNkZWZpbmUgU1RNMzJGNDA1eHggKi8gICAvKiE8IFNUTTMyRjQwNVJHLCBTVE0zMkY0MDVWRyBhbmQgU1RNMzJGNDA1WkcgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjQxNXh4ICovICAgLyohPCBTVE0zMkY0MTVSRywgU1RNMzJGNDE1VkcgYW5kIFNUTTMyRjQxNVpHIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkY0MDd4eCAqLyAgIC8qITwgU1RNMzJGNDA3VkcsIFNUTTMyRjQwN1ZFLCBTVE0zMkY0MDdaRywgU1RNMzJGNDA3WkUsIFNUTTMyRjQwN0lHICBhbmQgU1RNMzJGNDA3SUUgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjQxN3h4ICovICAgLyohPCBTVE0zMkY0MTdWRywgU1RNMzJGNDE3VkUsIFNUTTMyRjQxN1pHLCBTVE0zMkY0MTdaRSwgU1RNMzJGNDE3SUcgYW5kIFNUTTMyRjQxN0lFIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkY0Mjd4eCAqLyAgIC8qITwgU1RNMzJGNDI3VkcsIFNUTTMyRjQyN1ZJLCBTVE0zMkY0MjdaRywgU1RNMzJGNDI3WkksIFNUTTMyRjQyN0lHIGFuZCBTVE0zMkY0MjdJSSBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGNDM3eHggKi8gICAvKiE8IFNUTTMyRjQzN1ZHLCBTVE0zMkY0MzdWSSwgU1RNMzJGNDM3WkcsIFNUTTMyRjQzN1pJLCBTVE0zMkY0MzdJRyBhbmQgU1RNMzJGNDM3SUkgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjQyOXh4ICovICAgLyohPCBTVE0zMkY0MjlWRywgU1RNMzJGNDI5VkksIFNUTTMyRjQyOVpHLCBTVE0zMkY0MjlaSSwgU1RNMzJGNDI5QkcsIFNUTTMyRjQyOUJJLCBTVE0zMkY0MjlORywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUTTMyRjQzOU5JLCBTVE0zMkY0MjlJRyAgYW5kIFNUTTMyRjQyOUlJIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkY0Mzl4eCAqLyAgIC8qITwgU1RNMzJGNDM5VkcsIFNUTTMyRjQzOVZJLCBTVE0zMkY0MzlaRywgU1RNMzJGNDM5WkksIFNUTTMyRjQzOUJHLCBTVE0zMkY0MzlCSSwgU1RNMzJGNDM5TkcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY0MzlOSSwgU1RNMzJGNDM5SUcgYW5kIFNUTTMyRjQzOUlJIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkY0MDF4QyAqLyAgIC8qITwgU1RNMzJGNDAxQ0IsIFNUTTMyRjQwMUNDLCBTVE0zMkY0MDFSQiwgU1RNMzJGNDAxUkMsIFNUTTMyRjQwMVZCIGFuZCBTVE0zMkY0MDFWQyBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGNDAxeEUgKi8gICAvKiE8IFNUTTMyRjQwMUNELCBTVE0zMkY0MDFSRCwgU1RNMzJGNDAxVkQsIFNUTTMyRjQwMUNFLCBTVE0zMkY0MDFSRSBhbmQgU1RNMzJGNDAxVkUgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjQxMFR4ICovICAgLyohPCBTVE0zMkY0MTBUOCBhbmQgU1RNMzJGNDEwVEIgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjQxMEN4ICovICAgLyohPCBTVE0zMkY0MTBDOCBhbmQgU1RNMzJGNDEwQ0IgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjQxMFJ4ICovICAgLyohPCBTVE0zMkY0MTBSOCBhbmQgU1RNMzJGNDEwUkIgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjQxMXhFICovICAgLyohPCBTVE0zMkY0MTFDQywgU1RNMzJGNDExUkMsIFNUTTMyRjQxMVZDLCBTVE0zMkY0MTFDRSwgU1RNMzJGNDExUkUgYW5kIFNUTTMyRjQxMVZFIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkY0NDZ4eCAqLyAgIC8qITwgU1RNMzJGNDQ2TUMsIFNUTTMyRjQ0Nk1FLCBTVE0zMkY0NDZSQywgU1RNMzJGNDQ2UkUsIFNUTTMyRjQ0NlZDLCBTVE0zMkY0NDZWRSwgU1RNMzJGNDQ2WkMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgU1RNMzJGNDQ2WkUgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjQ2OXh4ICovICAgLyohPCBTVE0zMkY0NjlBSSwgU1RNMzJGNDY5SUksIFNUTTMyRjQ2OUJJLCBTVE0zMkY0NjlOSSwgU1RNMzJGNDY5QUcsIFNUTTMyRjQ2OUlHLCBTVE0zMkY0NjlCRywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUTTMyRjQ2OU5HLCBTVE0zMkY0NjlBRSwgU1RNMzJGNDY5SUUsIFNUTTMyRjQ2OUJFIGFuZCBTVE0zMkY0NjlORSBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGNDc5eHggKi8gICAvKiE8IFNUTTMyRjQ3OUFJLCBTVE0zMkY0NzlJSSwgU1RNMzJGNDc5QkksIFNUTTMyRjQ3OU5JLCBTVE0zMkY0NzlBRywgU1RNMzJGNDc5SUcsIFNUTTMyRjQ3OUJHIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgU1RNMzJGNDc5TkcgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjQxMkN4ICovICAgLyohPCBTVE0zMkY0MTJDRVUgYW5kIFNUTTMyRjQxMkNHVSBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGNDEyWnggKi8gICAvKiE8IFNUTTMyRjQxMlpFVCwgU1RNMzJGNDEyWkdULCBTVE0zMkY0MTJaRUogYW5kIFNUTTMyRjQxMlpHSiBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGNDEyVnggKi8gICAvKiE8IFNUTTMyRjQxMlZFVCwgU1RNMzJGNDEyVkdULCBTVE0zMkY0MTJWRUggYW5kIFNUTTMyRjQxMlZHSCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGNDEyUnggKi8gICAvKiE8IFNUTTMyRjQxMlJFVCwgU1RNMzJGNDEyUkdULCBTVE0zMkY0MTJSRVkgYW5kIFNUTTMyRjQxMlJHWSBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGNDEzeHggKi8gICAvKiE8IFNUTTMyRjQxM0NILCBTVE0zMkY0MTNNSCwgU1RNMzJGNDEzUkgsIFNUTTMyRjQxM1ZILCBTVE0zMkY0MTNaSCwgU1RNMzJGNDEzQ0csIFNUTTMyRjQxM01HLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY0MTNSRywgU1RNMzJGNDEzVkcgYW5kIFNUTTMyRjQxM1pHIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkY0MjN4eCAqLyAgIC8qITwgU1RNMzJGNDIzQ0gsIFNUTTMyRjQyM1JILCBTVE0zMkY0MjNWSCBhbmQgU1RNMzJGNDIzWkggRGV2aWNlcyAqLw0KI2VuZGlmDQogICANCi8qICBUaXA6IFRvIGF2b2lkIG1vZGlmeWluZyB0aGlzIGZpbGUgZWFjaCB0aW1lIHlvdSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHRoZXNlDQogICAgICAgIGRldmljZXMsIHlvdSBjYW4gZGVmaW5lIHRoZSBkZXZpY2UgaW4geW91ciB0b29sY2hhaW4gY29tcGlsZXIgcHJlcHJvY2Vzc29yLg0KICAqLw0KI2lmICFkZWZpbmVkICAoVVNFX0hBTF9EUklWRVIpDQovKioNCiAqIEBicmllZiBDb21tZW50IHRoZSBsaW5lIGJlbG93IGlmIHlvdSB3aWxsIG5vdCB1c2UgdGhlIHBlcmlwaGVyYWxzIGRyaXZlcnMuDQogICBJbiB0aGlzIGNhc2UsIHRoZXNlIGRyaXZlcnMgd2lsbCBub3QgYmUgaW5jbHVkZWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdpbGwgDQogICBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWxzIHJlZ2lzdGVycyANCiAgICovDQogIC8qI2RlZmluZSBVU0VfSEFMX0RSSVZFUiAqLw0KI2VuZGlmIC8qIFVTRV9IQUxfRFJJVkVSICovDQoNCi8qKg0KICAqIEBicmllZiBDTVNJUyB2ZXJzaW9uIG51bWJlciBWMi42LjENCiAgKi8NCiNkZWZpbmUgX19TVE0zMkY0eHhfQ01TSVNfVkVSU0lPTl9NQUlOICAgKDB4MDJVKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovDQojZGVmaW5lIF9fU1RNMzJGNHh4X0NNU0lTX1ZFUlNJT05fU1VCMSAgICgweDA2VSkgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLw0KI2RlZmluZSBfX1NUTTMyRjR4eF9DTVNJU19WRVJTSU9OX1NVQjIgICAoMHgwMVUpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8NCiNkZWZpbmUgX19TVE0zMkY0eHhfQ01TSVNfVkVSU0lPTl9SQyAgICAgKDB4MDBVKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLw0KI2RlZmluZSBfX1NUTTMyRjR4eF9DTVNJU19WRVJTSU9OICAgICAgICAoKF9fU1RNMzJGNHh4X0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAyNClcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkY0eHhfQ01TSVNfVkVSU0lPTl9TVUIxIDw8IDE2KVwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjR4eF9DTVNJU19WRVJTSU9OX1NVQjIgPDwgOCApXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGNHh4X0NNU0lTX1ZFUlNJT04pKQ0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgRGV2aWNlX0luY2x1ZGVkDQogICogQHsNCiAgKi8NCg0KI2lmIGRlZmluZWQoU1RNMzJGNDA1eHgpDQogICNpbmNsdWRlICJzdG0zMmY0MDV4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY0MTV4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjQxNXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjQwN3h4KQ0KICAjaW5jbHVkZSAic3RtMzJmNDA3eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNDE3eHgpDQogICNpbmNsdWRlICJzdG0zMmY0MTd4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY0Mjd4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjQyN3h4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjQzN3h4KQ0KICAjaW5jbHVkZSAic3RtMzJmNDM3eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNDI5eHgpDQogICNpbmNsdWRlICJzdG0zMmY0Mjl4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY0Mzl4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjQzOXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjQwMXhDKQ0KICAjaW5jbHVkZSAic3RtMzJmNDAxeGMuaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNDAxeEUpDQogICNpbmNsdWRlICJzdG0zMmY0MDF4ZS5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY0MTBUeCkNCiAgI2luY2x1ZGUgInN0bTMyZjQxMHR4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjQxMEN4KQ0KICAjaW5jbHVkZSAic3RtMzJmNDEwY3guaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNDEwUngpDQogICNpbmNsdWRlICJzdG0zMmY0MTByeC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY0MTF4RSkNCiAgI2luY2x1ZGUgInN0bTMyZjQxMXhlLmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjQ0Nnh4KQ0KICAjaW5jbHVkZSAic3RtMzJmNDQ2eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNDY5eHgpDQogICNpbmNsdWRlICJzdG0zMmY0Njl4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY0Nzl4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjQ3OXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjQxMkN4KQ0KICAjaW5jbHVkZSAic3RtMzJmNDEyY3guaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNDEyWngpDQogICNpbmNsdWRlICJzdG0zMmY0MTJ6eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY0MTJSeCkNCiAgI2luY2x1ZGUgInN0bTMyZjQxMnJ4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjQxMlZ4KQ0KICAjaW5jbHVkZSAic3RtMzJmNDEydnguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNDEzeHgpDQogICNpbmNsdWRlICJzdG0zMmY0MTN4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY0MjN4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjQyM3h4LmgiDQojZWxzZQ0KICNlcnJvciAiUGxlYXNlIHNlbGVjdCBmaXJzdCB0aGUgdGFyZ2V0IFNUTTMyRjR4eCBkZXZpY2UgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uIChpbiBzdG0zMmY0eHguaCBmaWxlKSINCiNlbmRpZg0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfdHlwZXMNCiAgKiBAew0KICAqLyANCnR5cGVkZWYgZW51bSANCnsNCiAgUkVTRVQgPSAwVSwgDQogIFNFVCA9ICFSRVNFVA0KfSBGbGFnU3RhdHVzLCBJVFN0YXR1czsNCg0KdHlwZWRlZiBlbnVtIA0Kew0KICBESVNBQkxFID0gMFUsIA0KICBFTkFCTEUgPSAhRElTQUJMRQ0KfSBGdW5jdGlvbmFsU3RhdGU7DQojZGVmaW5lIElTX0ZVTkNUSU9OQUxfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBESVNBQkxFKSB8fCAoKFNUQVRFKSA9PSBFTkFCTEUpKQ0KDQp0eXBlZGVmIGVudW0gDQp7DQogIEVSUk9SID0gMFUsIA0KICBTVUNDRVNTID0gIUVSUk9SDQp9IEVycm9yU3RhdHVzOw0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQoNCi8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF9tYWNybw0KICAqIEB7DQogICovDQojZGVmaW5lIFNFVF9CSVQoUkVHLCBCSVQpICAgICAoKFJFRykgfD0gKEJJVCkpDQoNCiNkZWZpbmUgQ0xFQVJfQklUKFJFRywgQklUKSAgICgoUkVHKSAmPSB+KEJJVCkpDQoNCiNkZWZpbmUgUkVBRF9CSVQoUkVHLCBCSVQpICAgICgoUkVHKSAmIChCSVQpKQ0KDQojZGVmaW5lIENMRUFSX1JFRyhSRUcpICAgICAgICAoKFJFRykgPSAoMHgwKSkNCg0KI2RlZmluZSBXUklURV9SRUcoUkVHLCBWQUwpICAgKChSRUcpID0gKFZBTCkpDQoNCiNkZWZpbmUgUkVBRF9SRUcoUkVHKSAgICAgICAgICgoUkVHKSkNCg0KI2RlZmluZSBNT0RJRllfUkVHKFJFRywgQ0xFQVJNQVNLLCBTRVRNQVNLKSAgV1JJVEVfUkVHKChSRUcpLCAoKChSRUFEX1JFRyhSRUcpKSAmICh+KENMRUFSTUFTSykpKSB8IChTRVRNQVNLKSkpDQoNCiNkZWZpbmUgUE9TSVRJT05fVkFMKFZBTCkgICAgIChfX0NMWihfX1JCSVQoVkFMKSkpIA0KDQoNCi8qKg0KICAqIEB9DQogICovDQoNCiNpZiBkZWZpbmVkIChVU0VfSEFMX0RSSVZFUikNCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbC5oIg0KI2VuZGlmIC8qIFVTRV9IQUxfRFJJVkVSICovDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQoNCiNlbmRpZiAvKiBfX1NUTTMyRjR4eF9IICovDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKioNCiAgKiBAfQ0KICAqLw0KICANCg0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQo=