LyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBmaWxlICAgIHN0bTMyZjJ4eC5oDQogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCiAgKiBAYnJpZWYgICBDTVNJUyBTVE0zMkYyeHggRGV2aWNlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlLiANCiAgKg0KICAqICAgICAgICAgIFRoZSBmaWxlIGlzIHRoZSB1bmlxdWUgaW5jbHVkZSBmaWxlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXINCiAgKiAgICAgICAgICBpcyB1c2luZyBpbiB0aGUgQyBzb3VyY2UgY29kZSwgdXN1YWxseSBpbiBtYWluLmMuIFRoaXMgZmlsZSBjb250YWluczoNCiAgKiAgICAgICAgICAgLSBDb25maWd1cmF0aW9uIHNlY3Rpb24gdGhhdCBhbGxvd3MgdG8gc2VsZWN0Og0KICAqICAgICAgICAgICAgICAtIFRoZSBTVE0zMkYyeHggZGV2aWNlIHVzZWQgaW4gdGhlIHRhcmdldCBhcHBsaWNhdGlvbg0KICAqICAgICAgICAgICAgICAtIFRvIHVzZSBvciBub3QgdGhlIHBlcmlwaGVyYWyScyBkcml2ZXJzIGluIGFwcGxpY2F0aW9uIGNvZGUoaS5lLiANCiAgKiAgICAgICAgICAgICAgICBjb2RlIHdpbGwgYmUgYmFzZWQgb24gZGlyZWN0IGFjY2VzcyB0byBwZXJpcGhlcmFsknMgcmVnaXN0ZXJzIA0KICAqICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGRyaXZlcnMgQVBJKSwgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBieSANCiAgKiAgICAgICAgICAgICAgICAiI2RlZmluZSBVU0VfSEFMX0RSSVZFUiINCiAgKiAgDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBhdHRlbnRpb24NCiAgKg0KICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KICAqDQogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCiAgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KICAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNUTWljcm9lbGVjdHJvbmljcyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCiAgKiAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KICAqICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICoNCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCiAgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQogICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KICAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQogICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCiAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KICAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQogICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICAqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgQ01TSVMNCiAgKiBAew0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgc3RtMzJmMnh4DQogICogQHsNCiAgKi8NCiAgICANCiNpZm5kZWYgX19TVE0zMkYyeHhfSA0KI2RlZmluZSBfX1NUTTMyRjJ4eF9IDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KIGV4dGVybiAiQyIgew0KI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQogICANCi8qKiBAYWRkdG9ncm91cCBMaWJyYXJ5X2NvbmZpZ3VyYXRpb25fc2VjdGlvbg0KICAqIEB7DQogICovDQoNCi8qKg0KICAqIEBicmllZiBTVE0zMiBGYW1pbHkNCiAgKi8NCiNpZiAhZGVmaW5lZCAoU1RNMzJGMikNCiNkZWZpbmUgU1RNMzJGMg0KI2VuZGlmIC8qIFNUTTMyRjIgKi8NCiAgIA0KLyogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGFjY29yZGluZyB0byB0aGUgdGFyZ2V0IFNUTTMyIGRldmljZSB1c2VkIGluIHlvdXINCiAgIGFwcGxpY2F0aW9uIA0KICAqLw0KI2lmICFkZWZpbmVkIChTVE0zMkYyMDV4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjIxNXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJGMjA3eHgpICYmICFkZWZpbmVkIChTVE0zMkYyMTd4eCkNCg0KICAvKiAjZGVmaW5lIFNUTTMyRjIwNXh4ICovICAgLyohPCBTVE0zMkYyMDVSRywgU1RNMzJGMjA1VkcsIFNUTTMyRjIwNVpHLCBTVE0zMkYyMDVSRiwgU1RNMzJGMjA1VkYsIFNUTTMyRjIwNVpGLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkYyMDVSRSwgU1RNMzJGMjA1VkUsIFNUTTMyRjIwNVpFLCBTVE0zMkYyMDVSQywgU1RNMzJGMjA1VkMsIFNUTTMyRjIwNVpDLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkYyMDVSQiBhbmQgU1RNMzJGMjA1VkIgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjIxNXh4ICovICAgLyohPCBTVE0zMkYyMTVSRywgU1RNMzJGMjE1VkcsIFNUTTMyRjIxNVpHLCBTVE0zMkYyMTVSRSwgU1RNMzJGMjE1VkUgYW5kIFNUTTMyRjIxNVpFIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkYyMDd4eCAqLyAgIC8qITwgU1RNMzJGMjA3VkcsIFNUTTMyRjIwN1pHLCBTVE0zMkYyMDdJRywgU1RNMzJGMjA3VkYsIFNUTTMyRjIwN1pGLCBTVE0zMkYyMDdJRiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RNMzJGMjA3VkUsIFNUTTMyRjIwN1pFLCBTVE0zMkYyMDdJRSwgU1RNMzJGMjA3VkMsIFNUTTMyRjIwN1pDIGFuZCBTVE0zMkYyMDdJQyBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGMjE3eHggKi8gICAvKiE8IFNUTTMyRjIxN1ZHLCBTVE0zMkYyMTdaRywgU1RNMzJGMjE3SUcsIFNUTTMyRjIxN1ZFLCBTVE0zMkYyMTdaRSBhbmQgU1RNMzJGMjE3SUUgRGV2aWNlcyAqLw0KICAgIA0KI2VuZGlmDQogICANCi8qICBUaXA6IFRvIGF2b2lkIG1vZGlmeWluZyB0aGlzIGZpbGUgZWFjaCB0aW1lIHlvdSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHRoZXNlDQogICAgICAgIGRldmljZXMsIHlvdSBjYW4gZGVmaW5lIHRoZSBkZXZpY2UgaW4geW91ciB0b29sY2hhaW4gY29tcGlsZXIgcHJlcHJvY2Vzc29yLg0KICAqLw0KI2lmICFkZWZpbmVkICAoVVNFX0hBTF9EUklWRVIpDQovKioNCiAqIEBicmllZiBDb21tZW50IHRoZSBsaW5lIGJlbG93IGlmIHlvdSB3aWxsIG5vdCB1c2UgdGhlIHBlcmlwaGVyYWxzIGRyaXZlcnMuDQogICBJbiB0aGlzIGNhc2UsIHRoZXNlIGRyaXZlcnMgd2lsbCBub3QgYmUgaW5jbHVkZWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdpbGwgDQogICBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWxzIHJlZ2lzdGVycyANCiAgICovDQogIC8qI2RlZmluZSBVU0VfSEFMX0RSSVZFUiAqLw0KI2VuZGlmIC8qIFVTRV9IQUxfRFJJVkVSICovDQoNCi8qKg0KICAqIEBicmllZiBDTVNJUyBEZXZpY2UgdmVyc2lvbiBudW1iZXIgVjIuMi4xDQogICovDQojZGVmaW5lIF9fU1RNMzJGMnh4X0NNU0lTX1ZFUlNJT05fTUFJTiAgICgweDAyVSkgLyohPCBbMzE6MjRdIG1haW4gdmVyc2lvbiAqLw0KI2RlZmluZSBfX1NUTTMyRjJ4eF9DTVNJU19WRVJTSU9OX1NVQjEgICAoMHgwMlUpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8NCiNkZWZpbmUgX19TVE0zMkYyeHhfQ01TSVNfVkVSU0lPTl9TVUIyICAgKDB4MDFVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovDQojZGVmaW5lIF9fU1RNMzJGMnh4X0NNU0lTX1ZFUlNJT05fUkMgICAgICgweDAwVSkgLyohPCBbNzowXSAgcmVsZWFzZSBjYW5kaWRhdGUgKi8NCiNkZWZpbmUgX19TVE0zMkYyeHhfQ01TSVNfVkVSU0lPTiAgICAgICAgKChfX1NUTTMyRjJ4eF9DTVNJU19WRVJTSU9OX01BSU4gPDwgMjQpXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGMnh4X0NNU0lTX1ZFUlNJT05fU1VCMSA8PCAxNilcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkYyeHhfQ01TSVNfVkVSU0lPTl9TVUIyIDw8IDggKVwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjJ4eF9DTVNJU19WRVJTSU9OKSkNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIERldmljZV9JbmNsdWRlZA0KICAqIEB7DQogICovDQoNCiNpZiBkZWZpbmVkKFNUTTMyRjIwNXh4KQ0KICAjaW5jbHVkZSAic3RtMzJmMjA1eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGMjE1eHgpDQogICNpbmNsdWRlICJzdG0zMmYyMTV4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkYyMDd4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjIwN3h4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjIxN3h4KQ0KICAjaW5jbHVkZSAic3RtMzJmMjE3eHguaCINCiNlbHNlDQogI2Vycm9yICJQbGVhc2Ugc2VsZWN0IGZpcnN0IHRoZSB0YXJnZXQgU1RNMzJGMnh4IGRldmljZSB1c2VkIGluIHlvdXIgYXBwbGljYXRpb24gKGluIHN0bTMyZjJ4eC5oIGZpbGUpIg0KI2VuZGlmDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF90eXBlcw0KICAqIEB7DQogICovIA0KdHlwZWRlZiBlbnVtIA0Kew0KICBSRVNFVCA9IDAsIA0KICBTRVQgPSAhUkVTRVQNCn0gRmxhZ1N0YXR1cywgSVRTdGF0dXM7DQoNCnR5cGVkZWYgZW51bSANCnsNCiAgRElTQUJMRSA9IDAsIA0KICBFTkFCTEUgPSAhRElTQUJMRQ0KfSBGdW5jdGlvbmFsU3RhdGU7DQojZGVmaW5lIElTX0ZVTkNUSU9OQUxfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBESVNBQkxFKSB8fCAoKFNUQVRFKSA9PSBFTkFCTEUpKQ0KDQp0eXBlZGVmIGVudW0gDQp7DQogIEVSUk9SID0gMCwgDQogIFNVQ0NFU1MgPSAhRVJST1INCn0gRXJyb3JTdGF0dXM7DQoNCi8qKg0KICAqIEB9DQogICovDQoNCg0KLyoqIEBhZGR0b2dyb3VwIEV4cG9ydGVkX21hY3JvDQogICogQHsNCiAgKi8NCiNkZWZpbmUgU0VUX0JJVChSRUcsIEJJVCkgICAgICgoUkVHKSB8PSAoQklUKSkNCg0KI2RlZmluZSBDTEVBUl9CSVQoUkVHLCBCSVQpICAgKChSRUcpICY9IH4oQklUKSkNCg0KI2RlZmluZSBSRUFEX0JJVChSRUcsIEJJVCkgICAgKChSRUcpICYgKEJJVCkpDQoNCiNkZWZpbmUgQ0xFQVJfUkVHKFJFRykgICAgICAgICgoUkVHKSA9ICgweDApKQ0KDQojZGVmaW5lIFdSSVRFX1JFRyhSRUcsIFZBTCkgICAoKFJFRykgPSAoVkFMKSkNCg0KI2RlZmluZSBSRUFEX1JFRyhSRUcpICAgICAgICAgKChSRUcpKQ0KDQojZGVmaW5lIE1PRElGWV9SRUcoUkVHLCBDTEVBUk1BU0ssIFNFVE1BU0spICBXUklURV9SRUcoKFJFRyksICgoKFJFQURfUkVHKFJFRykpICYgKH4oQ0xFQVJNQVNLKSkpIHwgKFNFVE1BU0spKSkNCg0KI2RlZmluZSBQT1NJVElPTl9WQUwoVkFMKSAgICAgKF9fQ0xaKF9fUkJJVChWQUwpKSkgDQoNCg0KLyoqDQogICogQH0NCiAgKi8NCiAgDQojaWYgZGVmaW5lZCAoVVNFX0hBTF9EUklWRVIpDQogI2luY2x1ZGUgInN0bTMyZjJ4eF9oYWwuaCINCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLw0KDQojaWZkZWYgX19jcGx1c3BsdXMNCn0NCiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KDQojZW5kaWYgLyogX19TVE0zMkYyeHhfSCAqLw0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKioNCiAgKiBAfQ0KICAqLw0KICANCg0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQo=