LyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBAZmlsZSAgICBzdG0zMmwxeHguaAogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAqIEBicmllZiAgIENNU0lTIFNUTTMyTDF4eCBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUuIAogICoKICAqICAgICAgICAgIFRoZSBmaWxlIGlzIHRoZSB1bmlxdWUgaW5jbHVkZSBmaWxlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIKICAqICAgICAgICAgIGlzIHVzaW5nIGluIHRoZSBDIHNvdXJjZSBjb2RlLCB1c3VhbGx5IGluIG1haW4uYy4gVGhpcyBmaWxlIGNvbnRhaW5zOgogICogICAgICAgICAgICAtIENvbmZpZ3VyYXRpb24gc2VjdGlvbiB0aGF0IGFsbG93cyB0byBzZWxlY3Q6CiAgKiAgICAgICAgICAgICAgLSBUaGUgU1RNMzJMMXh4IGRldmljZSB1c2VkIGluIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KICAqICAgICAgICAgICAgICAtIFRvIHVzZSBvciBub3QgdGhlIHBlcmlwaGVyYWyScyBkcml2ZXJzIGluIGFwcGxpY2F0aW9uIGNvZGUoaS5lLiAKICAqICAgICAgICAgICAgICAgIGNvZGUgd2lsbCBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWyScyByZWdpc3RlcnMgCiAgKiAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBkcml2ZXJzIEFQSSksIHRoaXMgb3B0aW9uIGlzIGNvbnRyb2xsZWQgYnkgCiAgKiAgICAgICAgICAgICAgICAiI2RlZmluZSBVU0VfSEFMX0RSSVZFUiIKICAqICAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEBhdHRlbnRpb24KICAqCiAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCgovKiogQGFkZHRvZ3JvdXAgQ01TSVMKICAqIEB7CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBzdG0zMmwxeHgKICAqIEB7CiAgKi8KICAgIAojaWZuZGVmIF9fU1RNMzJMMVhYX0gKI2RlZmluZSBfX1NUTTMyTDFYWF9ICgojaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KICAKLyoqIEBhZGR0b2dyb3VwIExpYnJhcnlfY29uZmlndXJhdGlvbl9zZWN0aW9uCiAgKiBAewogICovCgovKioKICAqIEBicmllZiBTVE0zMiBGYW1pbHkKICAqLwojaWYgIWRlZmluZWQgKFNUTTMyTDEpCiNkZWZpbmUgU1RNMzJMMQojZW5kaWYgLyogU1RNMzJMMSAqLwoKCi8qIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyBhY2NvcmRpbmcgdG8gdGhlIHRhcmdldCBTVE0zMkwgZGV2aWNlIHVzZWQgaW4geW91ciAKICAgYXBwbGljYXRpb24gCiAgKi8KCiNpZiAhZGVmaW5lZCAoU1RNMzJMMTAweEIpICYmICFkZWZpbmVkIChTVE0zMkwxMDB4QkEpICYmICFkZWZpbmVkIChTVE0zMkwxMDB4QykgJiYgXAogICAgIWRlZmluZWQgKFNUTTMyTDE1MXhCKSAmJiAhZGVmaW5lZCAoU1RNMzJMMTUxeEJBKSAmJiAhZGVmaW5lZCAoU1RNMzJMMTUxeEMpICYmICFkZWZpbmVkIChTVE0zMkwxNTF4Q0EpICYmICFkZWZpbmVkIChTVE0zMkwxNTF4RCkgJiYgIWRlZmluZWQgKFNUTTMyTDE1MXhEWCkgJiYgIWRlZmluZWQgKFNUTTMyTDE1MXhFKSAmJiBcCiAgICAhZGVmaW5lZCAoU1RNMzJMMTUyeEIpICYmICFkZWZpbmVkIChTVE0zMkwxNTJ4QkEpICYmICFkZWZpbmVkIChTVE0zMkwxNTJ4QykgJiYgIWRlZmluZWQgKFNUTTMyTDE1MnhDQSkgJiYgIWRlZmluZWQgKFNUTTMyTDE1MnhEKSAmJiAhZGVmaW5lZCAoU1RNMzJMMTUyeERYKSAmJiAhZGVmaW5lZCAoU1RNMzJMMTUyeEUpICYmIFwKICAgICFkZWZpbmVkIChTVE0zMkwxNjJ4QykgJiYgIWRlZmluZWQgKFNUTTMyTDE2MnhDQSkgJiYgIWRlZmluZWQgKFNUTTMyTDE2MnhEKSAmJiAhZGVmaW5lZCAoU1RNMzJMMTYyeERYKSAmJiAhZGVmaW5lZCAoU1RNMzJMMTYyeEUpCiAgLyogI2RlZmluZSBTVE0zMkwxMDB4QiAgKi8gICAvKiE8IFNUTTMyTDEwMEM2LCBTVE0zMkwxMDBSIGFuZCBTVE0zMkwxMDBSQiBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkwxMDB4QkEgKi8gICAvKiE8IFNUTTMyTDEwMEM2LUEsIFNUTTMyTDEwMFI4LUEgYW5kIFNUTTMyTDEwMFJCLUEgRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMMTAweEMgICovICAgLyohPCBTVE0zMkwxMDBSQyBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkwxNTF4QiAgKi8gICAvKiE8IFNUTTMyTDE1MUM2LCBTVE0zMkwxNTFSNiwgU1RNMzJMMTUxQzgsIFNUTTMyTDE1MVI4LCBTVE0zMkwxNTFWOCwgU1RNMzJMMTUxQ0IsIFNUTTMyTDE1MVJCIGFuZCBTVE0zMkwxNTFWQiAqLwogIC8qICNkZWZpbmUgU1RNMzJMMTUxeEJBICovICAgLyohPCBTVE0zMkwxNTFDNi1BLCBTVE0zMkwxNTFSNi1BLCBTVE0zMkwxNTFDOC1BLCBTVE0zMkwxNTFSOC1BLCBTVE0zMkwxNTFWOC1BLCBTVE0zMkwxNTFDQi1BLCBTVE0zMkwxNTFSQi1BIGFuZCBTVE0zMkwxNTFWQi1BICovIAogIC8qICNkZWZpbmUgU1RNMzJMMTUxeEMgICovICAgLyohPCBTVE0zMkwxNTFDQywgU1RNMzJMMTUxVUMsIFNUTTMyTDE1MVJDIGFuZCBTVE0zMkwxNTFWQyAqLwogIC8qICNkZWZpbmUgU1RNMzJMMTUxeENBICovICAgLyohPCBTVE0zMkwxNTFSQy1BLCBTVE0zMkwxNTFWQy1BLCBTVE0zMkwxNTFRQyBhbmQgU1RNMzJMMTUxWkMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDE1MXhEICAqLyAgIC8qITwgU1RNMzJMMTUxUUQsIFNUTTMyTDE1MVJELCBTVE0zMkwxNTFWRCAmIFNUTTMyTDE1MVpEICovCiAgLyogI2RlZmluZSBTVE0zMkwxNTF4RFggICovICAvKiE8IFNUTTMyTDE1MVZELVggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMMTUxeEUgICovICAgLyohPCBTVE0zMkwxNTFRRSwgU1RNMzJMMTUxUkUsIFNUTTMyTDE1MVZFIGFuZCBTVE0zMkwxNTFaRSAqLwogIC8qICNkZWZpbmUgU1RNMzJMMTUyeEIgICovICAgLyohPCBTVE0zMkwxNTJDNiwgU1RNMzJMMTUyUjYsIFNUTTMyTDE1MkM4LCBTVE0zMkwxNTJSOCwgU1RNMzJMMTUyVjgsIFNUTTMyTDE1MkNCLCBTVE0zMkwxNTJSQiBhbmQgU1RNMzJMMTUyVkIgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDE1MnhCQSAqLyAgIC8qITwgU1RNMzJMMTUyQzYtQSwgU1RNMzJMMTUyUjYtQSwgU1RNMzJMMTUyQzgtQSwgU1RNMzJMMTUyUjgtQSwgU1RNMzJMMTUyVjgtQSwgU1RNMzJMMTUyQ0ItQSwgU1RNMzJMMTUyUkItQSBhbmQgU1RNMzJMMTUyVkItQSAqLwogIC8qICNkZWZpbmUgU1RNMzJMMTUyeEMgICovICAgLyohPCBTVE0zMkwxNTJDQywgU1RNMzJMMTUyVUMsIFNUTTMyTDE1MlJDIGFuZCBTVE0zMkwxNTJWQyAqLwogIC8qICNkZWZpbmUgU1RNMzJMMTUyeENBICovICAgLyohPCBTVE0zMkwxNTJSQy1BLCBTVE0zMkwxNTJWQy1BLCBTVE0zMkwxNTJRQyBhbmQgU1RNMzJMMTUyWkMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDE1MnhEICAqLyAgIC8qITwgU1RNMzJMMTUyUUQsIFNUTTMyTDE1MlJELCBTVE0zMkwxNTJWRCBhbmQgU1RNMzJMMTUyWkQgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDE1MnhEWCAgKi8gIC8qITwgU1RNMzJMMTUyVkQtWCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkwxNTJ4RSAgKi8gICAvKiE8IFNUTTMyTDE1MlFFLCBTVE0zMkwxNTJSRSwgU1RNMzJMMTUyVkUgYW5kIFNUTTMyTDE1MlpFICovCiAgLyogI2RlZmluZSBTVE0zMkwxNjJ4QyAgKi8gICAvKiE8IFNUTTMyTDE2MlJDIGFuZCBTVE0zMkwxNjJWQyAqLwogIC8qICNkZWZpbmUgU1RNMzJMMTYyeENBICovICAgLyohPCBTVE0zMkwxNjJSQy1BLCBTVE0zMkwxNjJWQy1BLCBTVE0zMkwxNjJRQyBhbmQgU1RNMzJMMTYyWkMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDE2MnhEICAqLyAgIC8qITwgU1RNMzJMMTYyUUQsIFNUTTMyTDE2MlJELCBTVE0zMkwxNjJWRCBhbmQgU1RNMzJMMTYyWkQgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDE2MnhEWCAgKi8gIC8qITwgU1RNMzJMMTYyVkQtWCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkwxNjJ4RSAgKi8gICAvKiE8IFNUTTMyTDE2MlJFLCBTVE0zMkwxNjJWRSBhbmQgU1RNMzJMMTYyWkUgKi8KI2VuZGlmCgovKiAgVGlwOiBUbyBhdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlIGVhY2ggdGltZSB5b3UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiB0aGVzZQogICAgICAgIGRldmljZXMsIHlvdSBjYW4gZGVmaW5lIHRoZSBkZXZpY2UgaW4geW91ciB0b29sY2hhaW4gY29tcGlsZXIgcHJlcHJvY2Vzc29yLgogICovCiAgCiNpZiAhZGVmaW5lZCAgKFVTRV9IQUxfRFJJVkVSKQovKioKICogQGJyaWVmIENvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdpbGwgbm90IHVzZSB0aGUgcGVyaXBoZXJhbHMgZHJpdmVycy4KICAgSW4gdGhpcyBjYXNlLCB0aGVzZSBkcml2ZXJzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGFuZCB0aGUgYXBwbGljYXRpb24gY29kZSB3aWxsIAogICBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWxzIHJlZ2lzdGVycyAKICAgKi8KICAvKiNkZWZpbmUgVVNFX0hBTF9EUklWRVIgKi8KI2VuZGlmIC8qIFVTRV9IQUxfRFJJVkVSICovCgovKioKICAqIEBicmllZiBDTVNJUyBEZXZpY2UgdmVyc2lvbiBudW1iZXIKICAqLwojZGVmaW5lIF9fU1RNMzJMMXh4X0NNU0lTX1ZFUlNJT05fTUFJTiAgICgweDAyKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAojZGVmaW5lIF9fU1RNMzJMMXh4X0NNU0lTX1ZFUlNJT05fU1VCMSAgICgweDAzKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCiNkZWZpbmUgX19TVE0zMkwxeHhfQ01TSVNfVkVSU0lPTl9TVUIyICAgKDB4MDApIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8KI2RlZmluZSBfX1NUTTMyTDF4eF9DTVNJU19WRVJTSU9OX1JDICAgICAoMHgwMCkgLyohPCBbNzowXSAgcmVsZWFzZSBjYW5kaWRhdGUgKi8gCiNkZWZpbmUgX19TVE0zMkwxeHhfQ01TSVNfVkVSU0lPTiAgICAgICAgKChfX1NUTTMyTDF4eF9DTVNJU19WRVJTSU9OX01BSU4gPDwgMjQpXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkwxeHhfQ01TSVNfVkVSU0lPTl9TVUIxIDw8IDE2KVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJMMXh4X0NNU0lTX1ZFUlNJT05fU1VCMiA8PCA4IClcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyTDF4eF9DTVNJU19WRVJTSU9OX1JDKSkKCi8qKgogICogQH0KICAqLwoKLyoqIEBhZGR0b2dyb3VwIERldmljZV9JbmNsdWRlZAogICogQHsKICAqLwoKI2lmIGRlZmluZWQoU1RNMzJMMTAweEIpCiAgI2luY2x1ZGUgInN0bTMybDEwMHhiLmgiCiNlbGlmIGRlZmluZWQoU1RNMzJMMTAweEJBKQogICNpbmNsdWRlICJzdG0zMmwxMDB4YmEuaCIKI2VsaWYgZGVmaW5lZChTVE0zMkwxMDB4QykKICAjaW5jbHVkZSAic3RtMzJsMTAweGMuaCIKI2VsaWYgZGVmaW5lZChTVE0zMkwxNTF4QikKICAjaW5jbHVkZSAic3RtMzJsMTUxeGIuaCIKI2VsaWYgZGVmaW5lZChTVE0zMkwxNTF4QkEpCiAgI2luY2x1ZGUgInN0bTMybDE1MXhiYS5oIgojZWxpZiBkZWZpbmVkKFNUTTMyTDE1MXhDKQogICNpbmNsdWRlICJzdG0zMmwxNTF4Yy5oIgojZWxpZiBkZWZpbmVkKFNUTTMyTDE1MXhDQSkKICAjaW5jbHVkZSAic3RtMzJsMTUxeGNhLmgiCiNlbGlmIGRlZmluZWQoU1RNMzJMMTUxeEQpCiAgI2luY2x1ZGUgInN0bTMybDE1MXhkLmgiCiNlbGlmIGRlZmluZWQoU1RNMzJMMTUxeERYKQogICNpbmNsdWRlICJzdG0zMmwxNTF4ZHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkwxNTF4RSkKICAjaW5jbHVkZSAic3RtMzJsMTUxeGUuaCIKI2VsaWYgZGVmaW5lZChTVE0zMkwxNTJ4QikKICAjaW5jbHVkZSAic3RtMzJsMTUyeGIuaCIKI2VsaWYgZGVmaW5lZChTVE0zMkwxNTJ4QkEpCiAgI2luY2x1ZGUgInN0bTMybDE1MnhiYS5oIgojZWxpZiBkZWZpbmVkKFNUTTMyTDE1MnhDKQogICNpbmNsdWRlICJzdG0zMmwxNTJ4Yy5oIgojZWxpZiBkZWZpbmVkKFNUTTMyTDE1MnhDQSkKICAjaW5jbHVkZSAic3RtMzJsMTUyeGNhLmgiCiNlbGlmIGRlZmluZWQoU1RNMzJMMTUyeEQpCiAgI2luY2x1ZGUgInN0bTMybDE1MnhkLmgiCiNlbGlmIGRlZmluZWQoU1RNMzJMMTUyeERYKQogICNpbmNsdWRlICJzdG0zMmwxNTJ4ZHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkwxNTJ4RSkKICAjaW5jbHVkZSAic3RtMzJsMTUyeGUuaCIKI2VsaWYgZGVmaW5lZChTVE0zMkwxNjJ4QykKICAjaW5jbHVkZSAic3RtMzJsMTYyeGMuaCIKI2VsaWYgZGVmaW5lZChTVE0zMkwxNjJ4Q0EpCiAgI2luY2x1ZGUgInN0bTMybDE2MnhjYS5oIgojZWxpZiBkZWZpbmVkKFNUTTMyTDE2MnhEKQogICNpbmNsdWRlICJzdG0zMmwxNjJ4ZC5oIgojZWxpZiBkZWZpbmVkKFNUTTMyTDE2MnhEWCkKICAjaW5jbHVkZSAic3RtMzJsMTYyeGR4LmgiCiNlbGlmIGRlZmluZWQoU1RNMzJMMTYyeEUpCiAgI2luY2x1ZGUgInN0bTMybDE2MnhlLmgiCiNlbHNlCiAjZXJyb3IgIlBsZWFzZSBzZWxlY3QgZmlyc3QgdGhlIHRhcmdldCBTVE0zMkwxeHggZGV2aWNlIHVzZWQgaW4geW91ciBhcHBsaWNhdGlvbiAoaW4gc3RtMzJsMXh4LmggZmlsZSkiCiNlbmRpZgoKLyoqCiAgKiBAfQogICovCgovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfdHlwZXMKICAqIEB7CiAgKi8gIAp0eXBlZGVmIGVudW0gCnsKICBSRVNFVCA9IDAsIAogIFNFVCA9ICFSRVNFVAp9IEZsYWdTdGF0dXMsIElUU3RhdHVzOwoKdHlwZWRlZiBlbnVtIAp7CiAgRElTQUJMRSA9IDAsIAogIEVOQUJMRSA9ICFESVNBQkxFCn0gRnVuY3Rpb25hbFN0YXRlOwojZGVmaW5lIElTX0ZVTkNUSU9OQUxfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBESVNBQkxFKSB8fCAoKFNUQVRFKSA9PSBFTkFCTEUpKQoKdHlwZWRlZiBlbnVtIAp7CiAgU1VDQ0VTUyA9IDAsCiAgRVJST1IgPSAhU1VDQ0VTUwp9IEVycm9yU3RhdHVzOwoKLyoqCiAgKiBAfQogICovCgoKLyoqIEBhZGR0b2dyb3VwIEV4cG9ydGVkX21hY3JvcwogICogQHsKICAqLwojZGVmaW5lIFNFVF9CSVQoUkVHLCBCSVQpICAgICAoKFJFRykgfD0gKEJJVCkpCgojZGVmaW5lIENMRUFSX0JJVChSRUcsIEJJVCkgICAoKFJFRykgJj0gfihCSVQpKQoKI2RlZmluZSBSRUFEX0JJVChSRUcsIEJJVCkgICAgKChSRUcpICYgKEJJVCkpCgojZGVmaW5lIENMRUFSX1JFRyhSRUcpICAgICAgICAoKFJFRykgPSAoMHgwKSkKCiNkZWZpbmUgV1JJVEVfUkVHKFJFRywgVkFMKSAgICgoUkVHKSA9IChWQUwpKQoKI2RlZmluZSBSRUFEX1JFRyhSRUcpICAgICAgICAgKChSRUcpKQoKI2RlZmluZSBNT0RJRllfUkVHKFJFRywgQ0xFQVJNQVNLLCBTRVRNQVNLKSAgV1JJVEVfUkVHKChSRUcpLCAoKChSRUFEX1JFRyhSRUcpKSAmICh+KENMRUFSTUFTSykpKSB8IChTRVRNQVNLKSkpCgojZGVmaW5lIFBPU0lUSU9OX1ZBTChWQUwpICAgICAoX19DTFooX19SQklUKFZBTCkpKSAKCgovKioKICAqIEB9CiAgKi8KCiNpZiBkZWZpbmVkIChVU0VfSEFMX0RSSVZFUikKICNpbmNsdWRlICJzdG0zMmwxeHhfaGFsLmgiCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLwoKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKI2VuZGlmIC8qIF9fU1RNMzJMMXh4X0ggKi8KLyoqCiAgKiBAfQogICovCgovKioKICAqIEB9CiAgKi8KICAKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8K