LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgovKgogKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKICovCgojaWZuZGVmIF9fQ09ORklHX0gKI2RlZmluZSBfX0NPTkZJR19ICgovKgogKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogKiAoZWFzeSB0byBjaGFuZ2UpCiAqLwoKI2RlZmluZSBDT05GSUdfWDg2CQkxCS8qIFRoaXMgaXMgYSBYODYgQ1BVCQkqLwojZGVmaW5lIENPTkZJR19TQzUyMAkJMQkvKiBJbmNsdWRlIHN1cHBvcnQgZm9yIEFNRCBTQzUyMCAqLwojZGVmaW5lIENPTkZJR19BTEkxNTJYCQkxCS8qIEluY2x1ZGUgc3VwcG9ydCBmb3IgQWxpIDE1MnggU0lPICovCgojZGVmaW5lIENGR19TRFJBTV9QUkVDSEFSR0VfREVMQVkgNiAgICAgLyogNlQgKi8KI2RlZmluZSBDRkdfU0RSQU1fUkVGUkVTSF9SQVRFICAgIDc4ICAgIC8qIDcuOHVTIChjaG9pY2VzIGFyZSA3LjgsIDE1LjYsIDMxLjIgb3IgNjIuNXVTKSAqLwojZGVmaW5lIENGR19TRFJBTV9SQVNfQ0FTX0RFTEFZICAgMyAgICAgLyogM1QgKi8KCi8qIGRlZmluZSBhdCBtb3N0IG9uZSBvZiB0aGVzZSAqLwojdW5kZWYgQ0ZHX1NEUkFNX0NBU19MQVRFTkNZXzJUCiNkZWZpbmUgQ0ZHX1NEUkFNX0NBU19MQVRFTkNZXzNUCgojZGVmaW5lIENGR19TQzUyMF9ISUdIX1NQRUVEICAgIDAgICAgICAgLyogMTAwIG9yIDEzM01IeiAqLwojZGVmaW5lIENGR19SRVNFVF9HRU5FUklDICAgICAgIDEgICAgICAgLyogdXNlIHRyaXBwbGUtZmF1bHQgdG8gcmVzZXQgY3B1ICovCiN1bmRlZiAgQ0ZHX1JFU0VUX1NDNTIwICAgICAgICAgICAgICAgICAvKiB1c2UgU0M1MjAgTU1DUidzIHRvIHJlc2V0IGNwdSAqLwojdW5kZWYgIENGR19USU1FUl9TQzUyMCAgICAgICAgICAgICAgICAgLyogdXNlIFNDNTIwIHN3dGltZXJzICovCiNkZWZpbmUgQ0ZHX1RJTUVSX0dFTkVSSUMgICAgICAgMSAgICAgICAvKiB1c2UgdGhlIGk4MjU0IFBJVCB0aW1lcnMgKi8KI3VuZGVmICBDRkdfVElNRVJfVFNDICAgICAgICAgICAgICAgICAgIC8qIHVzZSB0aGUgUGVudGl1bSBUU0MgdGltZXJzICovCiNkZWZpbmUgIENGR19VU0VfU0lPX1VBUlQgICAgICAgMCAgICAgICAvKiBwcmVmZXIgdGhlIHVhcnRzIG9uIHRoZSBTSU8gdG8gdGhvc2UKCQkJCQkgKiBpbiB0aGUgU0M1MjAgb24gdGhlIENEUCAqLwoKI2RlZmluZSBDRkdfU1RBQ0tfU0laRSAgICAgICAgICAweDgwMDAgIC8qIFNpemUgb2YgYm9vdGxvYWRlciBzdGFjayAqLwoKI2RlZmluZSBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTIDEKI2RlZmluZSBDT05GSUdfTEFTVF9TVEFHRV9JTklUICAgIDEKCi8qCiAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAogKi8KI2RlZmluZSBDT05GSUdfTUFMTE9DX1NJWkUJKENGR19FTlZfU0laRSArIDEyOCoxMDI0KQoKI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTk2MDAKCi8qCiAqIEJPT1RQIG9wdGlvbnMKICovCiNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRQojZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAojZGVmaW5lIENPTkZJR19CT09UUF9HQVRFV0FZCiNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCgoKLyoKICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCiAqLwojaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CgojZGVmaW5lIENPTkZJR19DTURfUENJCiNkZWZpbmUgQ09ORklHX0NNRF9TQVRBCiNkZWZpbmUgQ09ORklHX0NNRF9KRkZTMgojZGVmaW5lIENPTkZJR19DTURfTkVUCiNkZWZpbmUgQ09ORklHX0NNRF9FRVBST00KCiNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkxNQojZGVmaW5lIENPTkZJR19CT09UQVJHUwkJInJvb3Q9L2Rldi9tdGRibG9jazAgY29uc29sZT10dHlTMCw5NjAwIgovKiAjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYm9vdG0gMzgwMDAwMDAiICovCgojaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCiNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMTE1MjAwCQkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLwojZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkyCQkvKiB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KI2VuZGlmCgovKgogKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCiAqLwojZGVmaW5lCUNGR19MT05HSEVMUAkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KI2RlZmluZQlDRkdfUFJPTVBUCQkiYm9vdCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLwojZGVmaW5lCUNGR19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KI2RlZmluZQlDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KI2RlZmluZQlDRkdfTUFYQVJHUwkJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCiNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KCiNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDEwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCiNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDAxMDAwMDAwCS8qIDEgLi4uIDE2IE1CIGluIERSQU0JKi8KCiN1bmRlZiAgQ0ZHX0NMS1NfSU5fSFoJCS8qIGV2ZXJ5dGhpbmcsIGluY2wgYm9hcmQgaW5mbywgaW4gSHogKi8KCiNkZWZpbmUJQ0ZHX0xPQURfQUREUgkJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KCiNkZWZpbmUJQ0ZHX0haCQkJMTAyNAkJLyogaW5jcmVtZW50ZXIgZnJlcTogMWtIeiAqLwoKCQkJCQkJLyogdmFsaWQgYmF1ZHJhdGVzICovCiNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUGh5c2ljYWwgTWVtb3J5IE1hcAogKi8KI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwk0CSAgIC8qIHdlIGhhdmUgNCBiYW5rcyBvZiBEUkFNICovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KICovCiNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkzCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwojZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk2NAkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KCi8qIHRpbWVvdXQgdmFsdWVzIGFyZSBpbiB0aWNrcyAqLwojZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCSgyKkNGR19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkoMipDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCgojZGVmaW5lIENPTkZJR19TUElfRUVQUk9NICAgICAgLyogU3VwcG9ydCBmb3IgU1BJIEVFUFJPTXMgKEFUMjUxMjgpICovCiNkZWZpbmUgQ09ORklHX01XX0VFUFJPTSAgICAgICAvKiBTdXBwb3J0IGZvciBNaWNyb1dpcmUgRUVQUk9NcyAoQVQ5M0xDNDYpICovCgovKiBhbGxvdyB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCiNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKCi8qIEVudmlyb25tZW50IGluIEVFUFJPTSAqLwojZGVmaW5lIENGR19FTlZfSVNfSU5fRUVQUk9NICAgMQojZGVmaW5lIENPTkZJR19TUEkKI2RlZmluZSBDRkdfRU5WX1NJWkUJICAgICAgIDB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IEVFUFJPTSAxNmsgaXMgU1BJIGlzIHVzZWQgb3IgMTI4IGJ5dGVzIGlmIE1XIGlzIHVzZWQqLwojZGVmaW5lIENGR19FTlZfT0ZGU0VUICAgICAgICAgMAojZGVmaW5lIENPTkZJR19TQzUyMF9DRFBfVVNFX1NQSSAgLyogU3RvcmUgY29uZmlndXJhdGlvbiBpbiB0aGUgU1BJIHBhcnQgKi8KI3VuZGVmIENPTkZJR19TQzUyMF9DRFBfVVNFX01XICAgIC8qIFN0b3JlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIE1pY3JvV2lyZSBwYXJ0ICovCiNkZWZpbmUgQ09ORklHX1NQSV9YIDEKCi8qCiAqIEpGRlMyIHBhcnRpdGlvbnMKICovCi8qIE5vIGNvbW1hbmQgbGluZSwgb25lIHN0YXRpYyBwYXJ0aXRpb24sIHdob2xlIGRldmljZSAqLwojdW5kZWYgQ09ORklHX0pGRlMyX0NNRExJTkUKI2RlZmluZSBDT05GSUdfSkZGUzJfREVWCQkibm9yMCIKI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCQkweEZGRkZGRkZGCiNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUCTB4MDAwMDAwMDAKCi8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCi8qCiNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9U0M1MjBDRFAgRmxhc2ggQmFuayAjMCIKI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1TQzUyMENEUCBGbGFzaCBCYW5rICMwOi0oamZmczIpIgoqLwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBEZXZpY2UgZHJpdmVycwogKi8KI2RlZmluZSBDT05GSUdfTkVUX01VTFRJICAgICAgICAvKiBNdWx0aSBldGhlcm5ldCBjYXJkcyBzdXBwb3J0ICovCiNkZWZpbmUgQ09ORklHX1BDTkVUCiNkZWZpbmUgQ09ORklHX1BDTkVUXzc5Qzk3MwojZGVmaW5lIENPTkZJR19QQ05FVF83OUM5NzUKI2RlZmluZSBQQ05FVF9IQVNfUFJPTSAgICAgICAgIDEKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKlNBVEEvTmF0aXZlIFN0dWZmCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBDRkdfU0FUQV9NQVhCVVMgICAgICAgICAyICAgICAgIC8qTWF4IFNhdGEgYnVzZXMgc3VwcG9ydGVkICovCiNkZWZpbmUgQ0ZHX1NBVEFfREVWU19QRVJfQlVTICAgMiAgICAgIC8qTWF4IG5vLiBvZiBkZXZpY2VzIHBlciBidXMvcG9ydCAqLwojZGVmaW5lIENGR19TQVRBX01BWF9ERVZJQ0UgICAgIChDRkdfU0FUQV9NQVhCVVMqIENGR19TQVRBX0RFVlNfUEVSX0JVUykKI2RlZmluZSBDRkdfQVRBX1BJSVggICAgICAgICAgICAxICAgICAgIC8qU3VwcG9ydHMgYXRhX3BpaXggZHJpdmVyICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIERJU0sgUGFydGl0aW9uIHN1cHBvcnQKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgojZGVmaW5lIENPTkZJR19NQUNfUEFSVElUSU9OCiNkZWZpbmUgQ09ORklHX0lTT19QQVJUSVRJT04gLyogRXhwZXJpbWVudGFsICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFZpZGVvL0tleWJvYXJkIHN1cHBvcnQKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBDT05GSUdfVklERU8JCQkvKiBUbyBlbmFibGUgdmlkZW8gY29udHJvbGxlciBzdXBwb3J0ICovCiNkZWZpbmUgQ09ORklHX0k4MDQyX0tCRAojZGVmaW5lIENGR19JU0FfSU8gMAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBSVEMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojZGVmaW5lIENPTkZJR19SVENfTUMxNDY4MTgKI3VuZGVmIENPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLwoKLyoKICogUENJIHN0dWZmCiAqLwojZGVmaW5lIENPTkZJR19QQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluY2x1ZGUgcGNpIHN1cHBvcnQgKi8KI2RlZmluZSBDT05GSUdfUENJX1BOUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwY2kgcGx1Zy1hbmQtcGxheSAqLwojZGVmaW5lIENPTkZJR19QQ0lfU0NBTl9TSE9XCgojZGVmaW5lCUNGR19GSVJTVF9QQ0lfSVJRICAgMTAKI2RlZmluZQlDRkdfU0VDT05EX1BDSV9JUlEgIDkKI2RlZmluZSBDRkdfVEhJUkRfUENJX0lSUSAgIDExCiNkZWZpbmUJQ0ZHX0ZPUlRIX1BDSV9JUlEgICAxNQoKI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8K