LyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBmaWxlICAgIHN0bTMyZjd4eC5oDQogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCiAgKiBAdmVyc2lvbiBWMS4wLjANCiAgKiBAZGF0ZSAgICAyOC1BcHJpbC0yMDE1DQogICogQGJyaWVmICAgQ01TSVMgU1RNMzJGN3h4IERldmljZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZS4gICAgICAgICAgIA0KICAqICAgICAgICAgICAgDQogICogICAgICAgICAgVGhlIGZpbGUgaXMgdGhlIHVuaXF1ZSBpbmNsdWRlIGZpbGUgdGhhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcg0KICAqICAgICAgICAgIGlzIHVzaW5nIGluIHRoZSBDIHNvdXJjZSBjb2RlLCB1c3VhbGx5IGluIG1haW4uYy4gVGhpcyBmaWxlIGNvbnRhaW5zOg0KICAqICAgICAgICAgICAtIENvbmZpZ3VyYXRpb24gc2VjdGlvbiB0aGF0IGFsbG93cyB0byBzZWxlY3Q6DQogICogICAgICAgICAgICAgIC0gVGhlIFNUTTMyRjd4eCBkZXZpY2UgdXNlZCBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uDQogICogICAgICAgICAgICAgIC0gVG8gdXNlIG9yIG5vdCB0aGUgcGVyaXBoZXJhbJJzIGRyaXZlcnMgaW4gYXBwbGljYXRpb24gY29kZShpLmUuIA0KICAqICAgICAgICAgICAgICAgIGNvZGUgd2lsbCBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWyScyByZWdpc3RlcnMgDQogICogICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gZHJpdmVycyBBUEkpLCB0aGlzIG9wdGlvbiBpcyBjb250cm9sbGVkIGJ5IA0KICAqICAgICAgICAgICAgICAgICIjZGVmaW5lIFVTRV9IQUxfRFJJVkVSIg0KICAqICANCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICogQGF0dGVudGlvbg0KICAqDQogICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVChjKSAyMDE1IFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQogICoNCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KICAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCiAgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCiAgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQogICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQogICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCiAgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU1RNaWNyb2VsZWN0cm9uaWNzIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KICAqICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQogICogICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAgKg0KICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KICAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCiAgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQogICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCiAgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KICAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQogICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCiAgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICoNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICovDQoNCi8qKiBAYWRkdG9ncm91cCBDTVNJUw0KICAqIEB7DQogICovDQoNCi8qKiBAYWRkdG9ncm91cCBzdG0zMmY3eHgNCiAgKiBAew0KICAqLw0KICAgIA0KI2lmbmRlZiBfX1NUTTMyRjd4eF9IDQojZGVmaW5lIF9fU1RNMzJGN3h4X0gNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQogZXh0ZXJuICJDIiB7DQojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCiAgDQovKiogQGFkZHRvZ3JvdXAgTGlicmFyeV9jb25maWd1cmF0aW9uX3NlY3Rpb24NCiAgKiBAew0KICAqLw0KDQovKioNCiAgKiBAYnJpZWYgU1RNMzIgRmFtaWx5DQogICovDQojaWYgIWRlZmluZWQgIChTVE0zMkY3KQ0KI2RlZmluZSBTVE0zMkY3DQojZW5kaWYgLyogU1RNMzJGNyAqLw0KDQovKiBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgYWNjb3JkaW5nIHRvIHRoZSB0YXJnZXQgU1RNMzIgZGV2aWNlIHVzZWQgaW4geW91cg0KICAgYXBwbGljYXRpb24gDQogICovDQojaWYgIWRlZmluZWQgKFNUTTMyRjc1Nnh4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNzQ2eHgpICYmICFkZWZpbmVkIChTVE0zMkY3NDV4eCkNCiAgLyogI2RlZmluZSBTVE0zMkY3NTZ4eCAqLyAgIC8qITwgU1RNMzJGNzU2VkcsIFNUTTMyRjc1NlpHLCBTVE0zMkY3NTZaRywgU1RNMzJGNzU2SUcsIFNUTTMyRjc1NkJHLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY3NTZORyBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGNzQ2eHggKi8gICAvKiE8IFNUTTMyRjc0NlZFLCBTVE0zMkY3NDZWRywgU1RNMzJGNzQ2WkUsIFNUTTMyRjc0NlpHLCBTVE0zMkY3NDZJRSwgU1RNMzJGNzQ2SUcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUTTMyRjc0NkJFLCBTVE0zMkY3NDZCRywgU1RNMzJGNzQ2TkUsIFNUTTMyRjc0Nk5HIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkY3NDV4eCAqLyAgIC8qITwgU1RNMzJGNzQ1VkUsIFNUTTMyRjc0NVZHLCBTVE0zMkY3NDVaRywgU1RNMzJGNzQ1WkUsIFNUTTMyRjc0NUlFLCBTVE0zMkY3NDVJRyBEZXZpY2VzICovDQojZW5kaWYNCg0KLyogIFRpcDogVG8gYXZvaWQgbW9kaWZ5aW5nIHRoaXMgZmlsZSBlYWNoIHRpbWUgeW91IG5lZWQgdG8gc3dpdGNoIGJldHdlZW4gdGhlc2UNCiAgICAgICAgZGV2aWNlcywgeW91IGNhbiBkZWZpbmUgdGhlIGRldmljZSBpbiB5b3VyIHRvb2xjaGFpbiBjb21waWxlciBwcmVwcm9jZXNzb3IuDQogICovDQoNCiNpZiAhZGVmaW5lZCAgKFVTRV9IQUxfRFJJVkVSKQ0KLyoqDQogKiBAYnJpZWYgQ29tbWVudCB0aGUgbGluZSBiZWxvdyBpZiB5b3Ugd2lsbCBub3QgdXNlIHRoZSBwZXJpcGhlcmFscyBkcml2ZXJzLg0KICAgSW4gdGhpcyBjYXNlLCB0aGVzZSBkcml2ZXJzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGFuZCB0aGUgYXBwbGljYXRpb24gY29kZSB3aWxsIA0KICAgYmUgYmFzZWQgb24gZGlyZWN0IGFjY2VzcyB0byBwZXJpcGhlcmFscyByZWdpc3RlcnMgDQogICAqLw0KICAvKiNkZWZpbmUgVVNFX0hBTF9EUklWRVIgKi8NCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLw0KDQovKioNCiAgKiBAYnJpZWYgQ01TSVMgRGV2aWNlIHZlcnNpb24gbnVtYmVyIFYxLjAuMA0KICAqLw0KI2RlZmluZSBfX1NUTTMyRjd4eF9DTVNJU19ERVZJQ0VfVkVSU0lPTl9NQUlOICAgKDB4MDEpIC8qITwgWzMxOjI0XSBtYWluIHZlcnNpb24gKi8NCiNkZWZpbmUgX19TVE0zMkY3eHhfQ01TSVNfREVWSUNFX1ZFUlNJT05fU1VCMSAgICgweDAwKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovDQojZGVmaW5lIF9fU1RNMzJGN3h4X0NNU0lTX0RFVklDRV9WRVJTSU9OX1NVQjIgICAoMHgwMCkgLyohPCBbMTU6OF0gIHN1YjIgdmVyc2lvbiAqLw0KI2RlZmluZSBfX1NUTTMyRjd4eF9DTVNJU19ERVZJQ0VfVkVSU0lPTl9SQyAgICAgKDB4MDApIC8qITwgWzc6MF0gIHJlbGVhc2UgY2FuZGlkYXRlICovIA0KI2RlZmluZSBfX1NUTTMyRjd4eF9DTVNJU19ERVZJQ0VfVkVSU0lPTiAgICAgICAgKChfX1NUTTMyRjd4eF9DTVNJU19ERVZJQ0VfVkVSU0lPTl9NQUlOIDw8IDI0KVwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkY3eHhfQ01TSVNfREVWSUNFX1ZFUlNJT05fU1VCMSA8PCAxNilcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGN3h4X0NNU0lTX0RFVklDRV9WRVJTSU9OX1NVQjIgPDwgOCApXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjd4eF9DTVNJU19ERVZJQ0VfVkVSU0lPTikpDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgRGV2aWNlX0luY2x1ZGVkDQogICogQHsNCiAgKi8NCiNpZiBkZWZpbmVkKFNUTTMyRjc1Nnh4KQ0KICAjaW5jbHVkZSAic3RtMzJmNzU2eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNzQ2eHgpDQogICNpbmNsdWRlICJzdG0zMmY3NDZ4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY3NDV4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjc0NXh4LmgiDQojZWxzZQ0KICNlcnJvciAiUGxlYXNlIHNlbGVjdCBmaXJzdCB0aGUgdGFyZ2V0IFNUTTMyRjd4eCBkZXZpY2UgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uIChpbiBzdG0zMmY3eHguaCBmaWxlKSINCiNlbmRpZg0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfdHlwZXMNCiAgKiBAew0KICAqLyANCnR5cGVkZWYgZW51bSANCnsNCiAgUkVTRVQgPSAwLCANCiAgU0VUID0gIVJFU0VUDQp9IEZsYWdTdGF0dXMsIElUU3RhdHVzOw0KDQp0eXBlZGVmIGVudW0gDQp7DQogIERJU0FCTEUgPSAwLCANCiAgRU5BQkxFID0gIURJU0FCTEUNCn0gRnVuY3Rpb25hbFN0YXRlOw0KI2RlZmluZSBJU19GVU5DVElPTkFMX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gRElTQUJMRSkgfHwgKChTVEFURSkgPT0gRU5BQkxFKSkNCg0KdHlwZWRlZiBlbnVtIA0Kew0KICBFUlJPUiA9IDAsIA0KICBTVUNDRVNTID0gIUVSUk9SDQp9IEVycm9yU3RhdHVzOw0KDQovKioNCiAgKiBAfQ0KICAqLw0KICANCi8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF9tYWNybw0KICAqIEB7DQogICovDQojZGVmaW5lIFNFVF9CSVQoUkVHLCBCSVQpICAgICAoKFJFRykgfD0gKEJJVCkpDQoNCiNkZWZpbmUgQ0xFQVJfQklUKFJFRywgQklUKSAgICgoUkVHKSAmPSB+KEJJVCkpDQoNCiNkZWZpbmUgUkVBRF9CSVQoUkVHLCBCSVQpICAgICgoUkVHKSAmIChCSVQpKQ0KDQojZGVmaW5lIENMRUFSX1JFRyhSRUcpICAgICAgICAoKFJFRykgPSAoMHgwKSkNCg0KI2RlZmluZSBXUklURV9SRUcoUkVHLCBWQUwpICAgKChSRUcpID0gKFZBTCkpDQoNCiNkZWZpbmUgUkVBRF9SRUcoUkVHKSAgICAgICAgICgoUkVHKSkNCg0KI2RlZmluZSBNT0RJRllfUkVHKFJFRywgQ0xFQVJNQVNLLCBTRVRNQVNLKSAgV1JJVEVfUkVHKChSRUcpLCAoKChSRUFEX1JFRyhSRUcpKSAmICh+KENMRUFSTUFTSykpKSB8IChTRVRNQVNLKSkpDQoNCiNkZWZpbmUgUE9TSVRJT05fVkFMKFZBTCkgICAgIChfX0NMWihfX1JCSVQoVkFMKSkpIA0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQojaWZkZWYgVVNFX0hBTF9EUklWRVINCiAgI2luY2x1ZGUgInN0bTMyZjd4eF9oYWxfY29uZi5oIg0KI2VuZGlmIC8qIFVTRV9IQUxfRFJJVkVSICovDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQoNCiNlbmRpZiAvKiBfX1NUTTMyRjd4eF9IICovDQoNCi8qKg0KICAqIEB9DQogICovDQoNCiAgLyoqDQogICogQH0NCiAgKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCg==