LyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBAZmlsZSAgICBzdG0zMmY3eHguaAogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAqIEBicmllZiAgIENNU0lTIFNUTTMyRjd4eCBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUuCiAgKgogICogICAgICAgICAgVGhlIGZpbGUgaXMgdGhlIHVuaXF1ZSBpbmNsdWRlIGZpbGUgdGhhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcgogICogICAgICAgICAgaXMgdXNpbmcgaW4gdGhlIEMgc291cmNlIGNvZGUsIHVzdWFsbHkgaW4gbWFpbi5jLiBUaGlzIGZpbGUgY29udGFpbnM6CiAgKiAgICAgICAgICAgLSBDb25maWd1cmF0aW9uIHNlY3Rpb24gdGhhdCBhbGxvd3MgdG8gc2VsZWN0OgogICogICAgICAgICAgICAgIC0gVGhlIFNUTTMyRjd4eCBkZXZpY2UgdXNlZCBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCiAgKiAgICAgICAgICAgICAgLSBUbyB1c2Ugb3Igbm90IHRoZSBwZXJpcGhlcmFsknMgZHJpdmVycyBpbiBhcHBsaWNhdGlvbiBjb2RlKGkuZS4KICAqICAgICAgICAgICAgICAgIGNvZGUgd2lsbCBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWyScyByZWdpc3RlcnMKICAqICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGRyaXZlcnMgQVBJKSwgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBieQogICogICAgICAgICAgICAgICAgIiNkZWZpbmUgVVNFX0hBTF9EUklWRVIiCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQGF0dGVudGlvbgogICoKICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICoKICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAogICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQogICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KCi8qKiBAYWRkdG9ncm91cCBDTVNJUwogICogQHsKICAqLwoKLyoqIEBhZGR0b2dyb3VwIHN0bTMyZjd4eAogICogQHsKICAqLwoKI2lmbmRlZiBfX1NUTTMyRjd4eF9ICiNkZWZpbmUgX19TVE0zMkY3eHhfSAoKI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCgovKiogQGFkZHRvZ3JvdXAgTGlicmFyeV9jb25maWd1cmF0aW9uX3NlY3Rpb24KICAqIEB7CiAgKi8KCi8qKgogICogQGJyaWVmIFNUTTMyIEZhbWlseQogICovCiNpZiAhZGVmaW5lZCAgKFNUTTMyRjcpCiNkZWZpbmUgU1RNMzJGNwojZW5kaWYgLyogU1RNMzJGNyAqLwoKLyogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGFjY29yZGluZyB0byB0aGUgdGFyZ2V0IFNUTTMyIGRldmljZSB1c2VkIGluIHlvdXIKICAgYXBwbGljYXRpb24KICAqLwojaWYgIWRlZmluZWQgKFNUTTMyRjc1Nnh4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNzQ2eHgpICYmICFkZWZpbmVkIChTVE0zMkY3NDV4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjc2NXh4KSAmJiBcCiAgICAhZGVmaW5lZCAoU1RNMzJGNzY3eHgpICYmICFkZWZpbmVkIChTVE0zMkY3Njl4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjc3N3h4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNzc5eHgpICYmIFwKICAgICFkZWZpbmVkIChTVE0zMkY3MjJ4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjcyM3h4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNzMyeHgpICYmICFkZWZpbmVkIChTVE0zMkY3MzN4eCkgJiYgXAogICAgIWRlZmluZWQgKFNUTTMyRjczMHh4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNzUweHgpCgogIC8qICNkZWZpbmUgU1RNMzJGNzU2eHggKi8gICAvKiE8IFNUTTMyRjc1NlZHLCBTVE0zMkY3NTZaRywgU1RNMzJGNzU2WkcsIFNUTTMyRjc1NklHLCBTVE0zMkY3NTZCRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY3NTZORyBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkY3NDZ4eCAqLyAgIC8qITwgU1RNMzJGNzQ2VkUsIFNUTTMyRjc0NlZHLCBTVE0zMkY3NDZaRSwgU1RNMzJGNzQ2WkcsIFNUTTMyRjc0NklFLCBTVE0zMkY3NDZJRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY3NDZCRSwgU1RNMzJGNzQ2QkcsIFNUTTMyRjc0Nk5FLCBTVE0zMkY3NDZORyBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkY3NDV4eCAqLyAgIC8qITwgU1RNMzJGNzQ1VkUsIFNUTTMyRjc0NVZHLCBTVE0zMkY3NDVaRywgU1RNMzJGNzQ1WkUsIFNUTTMyRjc0NUlFLCBTVE0zMkY3NDVJRyBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkY3NjV4eCAqLyAgIC8qITwgU1RNMzJGNzY1QkksIFNUTTMyRjc2NUJHLCBTVE0zMkY3NjVOSSwgU1RNMzJGNzY1TkcsIFNUTTMyRjc2NUlJLCBTVE0zMkY3NjVJRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY3NjVaSSwgU1RNMzJGNzY1WkcsIFNUTTMyRjc2NVZJLCBTVE0zMkY3NjVWRyBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkY3Njd4eCAqLyAgIC8qITwgU1RNMzJGNzY3QkcsIFNUTTMyRjc2N0JJLCBTVE0zMkY3NjdJRywgU1RNMzJGNzY3SUksIFNUTTMyRjc2N05HLCBTVE0zMkY3NjdOSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY3NjdWRywgU1RNMzJGNzY3VkksIFNUTTMyRjc2N1pHLCBTVE0zMkY3NjdaSSBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkY3Njl4eCAqLyAgIC8qITwgU1RNMzJGNzY5QUcsIFNUTTMyRjc2OUFJLCBTVE0zMkY3NjlCRywgU1RNMzJGNzY5QkksIFNUTTMyRjc2OUlHLCBTVE0zMkY3NjlJSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY3NjlORywgU1RNMzJGNzY5TkksIFNUTTMyRjc2OEFJIERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyRjc3N3h4ICovICAgLyohPCBTVE0zMkY3NzdWSSwgU1RNMzJGNzc3WkksIFNUTTMyRjc3N0lJLCBTVE0zMkY3NzdCSSwgU1RNMzJGNzc3TkkgRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJGNzc5eHggKi8gICAvKiE8IFNUTTMyRjc3OUlJLCBTVE0zMkY3NzlCSSwgU1RNMzJGNzc5TkksIFNUTTMyRjc3OUFJLCBTVE0zMkY3NzhBSSBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkY3MjJ4eCAqLyAgIC8qITwgU1RNMzJGNzIySUUsIFNUTTMyRjcyMlpFLCBTVE0zMkY3MjJWRSwgU1RNMzJGNzIyUkUsIFNUTTMyRjcyMklDLCBTVE0zMkY3MjJaQywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY3MjJWQywgU1RNMzJGNzIyUkMgRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJGNzIzeHggKi8gICAvKiE8IFNUTTMyRjcyM0lFLCBTVE0zMkY3MjNaRSwgU1RNMzJGNzIzVkUsIFNUTTMyRjcyM0lDLCBTVE0zMkY3MjNaQywgU1RNMzJGNzIzVkMgRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJGNzMyeHggKi8gICAvKiE8IFNUTTMyRjczMklFLCBTVE0zMkY3MzJaRSwgU1RNMzJGNzMyVkUsIFNUTTMyRjczMlJFIERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyRjczM3h4ICovICAgLyohPCBTVE0zMkY3MzNJRSwgU1RNMzJGNzMzWkUsIFNUTTMyRjczM1ZFIERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyRjczMHh4ICovICAgLyohPCBTVE0zMkY3MzBSLCBTVE0zMkY3MzBWLCBTVE0zMkY3MzBaLCBTVE0zMkY3MzBJIERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyRjc1MHh4ICovICAgLyohPCBTVE0zMkY3NTBWLCBTVE0zMkY3NTBaLCBTVE0zMkY3NTBOIERldmljZXMgKi8KI2VuZGlmCgovKiAgVGlwOiBUbyBhdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlIGVhY2ggdGltZSB5b3UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiB0aGVzZQogICAgICAgIGRldmljZXMsIHlvdSBjYW4gZGVmaW5lIHRoZSBkZXZpY2UgaW4geW91ciB0b29sY2hhaW4gY29tcGlsZXIgcHJlcHJvY2Vzc29yLgogICovCgojaWYgIWRlZmluZWQgIChVU0VfSEFMX0RSSVZFUikKLyoqCiAqIEBicmllZiBDb21tZW50IHRoZSBsaW5lIGJlbG93IGlmIHlvdSB3aWxsIG5vdCB1c2UgdGhlIHBlcmlwaGVyYWxzIGRyaXZlcnMuCiAgIEluIHRoaXMgY2FzZSwgdGhlc2UgZHJpdmVycyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBhbmQgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2lsbAogICBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWxzIHJlZ2lzdGVycwogICAqLwogIC8qI2RlZmluZSBVU0VfSEFMX0RSSVZFUiAqLwojZW5kaWYgLyogVVNFX0hBTF9EUklWRVIgKi8KCi8qKgogICogQGJyaWVmIENNU0lTIERldmljZSB2ZXJzaW9uIG51bWJlciBWMS4yLjUKICAqLwojZGVmaW5lIF9fU1RNMzJGN19DTVNJU19WRVJTSU9OX01BSU4gICAoMHgwMSkgLyohPCBbMzE6MjRdIG1haW4gdmVyc2lvbiAqLwojZGVmaW5lIF9fU1RNMzJGN19DTVNJU19WRVJTSU9OX1NVQjEgICAoMHgwMikgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLwojZGVmaW5lIF9fU1RNMzJGN19DTVNJU19WRVJTSU9OX1NVQjIgICAoMHgwNSkgLyohPCBbMTU6OF0gIHN1YjIgdmVyc2lvbiAqLwojZGVmaW5lIF9fU1RNMzJGN19DTVNJU19WRVJTSU9OX1JDICAgICAoMHgwMCkgLyohPCBbNzowXSAgcmVsZWFzZSBjYW5kaWRhdGUgKi8KI2RlZmluZSBfX1NUTTMyRjdfQ01TSVNfVkVSU0lPTiAgICAgICAgKChfX1NUTTMyRjdfQ01TSVNfVkVSU0lPTl9NQUlOIDw8IDI0KVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjdfQ01TSVNfVkVSU0lPTl9TVUIxIDw8IDE2KVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjdfQ01TSVNfVkVSU0lPTl9TVUIyIDw8IDggKVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjdfQ01TSVNfVkVSU0lPTl9SQykpCi8qKgogICogQH0KICAqLwoKLyoqIEBhZGR0b2dyb3VwIERldmljZV9JbmNsdWRlZAogICogQHsKICAqLwojaWYgZGVmaW5lZChTVE0zMkY3MjJ4eCkKICAjaW5jbHVkZSAic3RtMzJmNzIyeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3MjN4eCkKICAjaW5jbHVkZSAic3RtMzJmNzIzeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3MzJ4eCkKICAjaW5jbHVkZSAic3RtMzJmNzMyeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3MzN4eCkKICAjaW5jbHVkZSAic3RtMzJmNzMzeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3NTZ4eCkKICAjaW5jbHVkZSAic3RtMzJmNzU2eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3NDZ4eCkKICAjaW5jbHVkZSAic3RtMzJmNzQ2eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3NDV4eCkKICAjaW5jbHVkZSAic3RtMzJmNzQ1eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3NjV4eCkKICAjaW5jbHVkZSAic3RtMzJmNzY1eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3Njd4eCkKICAjaW5jbHVkZSAic3RtMzJmNzY3eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3Njl4eCkKICAjaW5jbHVkZSAic3RtMzJmNzY5eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3Nzd4eCkKICAjaW5jbHVkZSAic3RtMzJmNzc3eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3Nzl4eCkKICAjaW5jbHVkZSAic3RtMzJmNzc5eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3MzB4eCkKICAjaW5jbHVkZSAic3RtMzJmNzMweHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkY3NTB4eCkKICAjaW5jbHVkZSAic3RtMzJmNzUweHguaCIKI2Vsc2UKICNlcnJvciAiUGxlYXNlIHNlbGVjdCBmaXJzdCB0aGUgdGFyZ2V0IFNUTTMyRjd4eCBkZXZpY2UgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uIChpbiBzdG0zMmY3eHguaCBmaWxlKSIKI2VuZGlmCgovKioKICAqIEB9CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF90eXBlcwogICogQHsKICAqLwp0eXBlZGVmIGVudW0KewogIFJFU0VUID0gMFUsCiAgU0VUID0gIVJFU0VUCn0gRmxhZ1N0YXR1cywgSVRTdGF0dXM7Cgp0eXBlZGVmIGVudW0KewogIERJU0FCTEUgPSAwVSwKICBFTkFCTEUgPSAhRElTQUJMRQp9IEZ1bmN0aW9uYWxTdGF0ZTsKI2RlZmluZSBJU19GVU5DVElPTkFMX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gRElTQUJMRSkgfHwgKChTVEFURSkgPT0gRU5BQkxFKSkKCnR5cGVkZWYgZW51bQp7CiAgU1VDQ0VTUyA9IDBVLAogIEVSUk9SID0gIVNVQ0NFU1MKfSBFcnJvclN0YXR1czsKCi8qKgogICogQH0KICAqLwoKLyoqIEBhZGR0b2dyb3VwIEV4cG9ydGVkX21hY3JvCiAgKiBAewogICovCiNkZWZpbmUgU0VUX0JJVChSRUcsIEJJVCkgICAgICgoUkVHKSB8PSAoQklUKSkKCiNkZWZpbmUgQ0xFQVJfQklUKFJFRywgQklUKSAgICgoUkVHKSAmPSB+KEJJVCkpCgojZGVmaW5lIFJFQURfQklUKFJFRywgQklUKSAgICAoKFJFRykgJiAoQklUKSkKCiNkZWZpbmUgQ0xFQVJfUkVHKFJFRykgICAgICAgICgoUkVHKSA9ICgweDApKQoKI2RlZmluZSBXUklURV9SRUcoUkVHLCBWQUwpICAgKChSRUcpID0gKFZBTCkpCgojZGVmaW5lIFJFQURfUkVHKFJFRykgICAgICAgICAoKFJFRykpCgojZGVmaW5lIE1PRElGWV9SRUcoUkVHLCBDTEVBUk1BU0ssIFNFVE1BU0spICBXUklURV9SRUcoKFJFRyksICgoKFJFQURfUkVHKFJFRykpICYgKH4oQ0xFQVJNQVNLKSkpIHwgKFNFVE1BU0spKSkKCiNkZWZpbmUgUE9TSVRJT05fVkFMKFZBTCkgICAgIChfX0NMWihfX1JCSVQoVkFMKSkpCgovKioKICAqIEB9CiAgKi8KCiNpZmRlZiBVU0VfSEFMX0RSSVZFUgogI2luY2x1ZGUgInN0bTMyZjd4eF9oYWwuaCIKI2VuZGlmIC8qIFVTRV9IQUxfRFJJVkVSICovCgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KCiNlbmRpZiAvKiBfX1NUTTMyRjd4eF9IICovCgovKioKICAqIEB9CiAgKi8KCi8qKgogICogQH0KICAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8K