ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBlYjE5YzBlLi5lOWE3OTk4IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDEyICsyLDIzIEBACiBDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjEuMToKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorKiBQYXRjaCBieSBTYXNjaGEgSGF1ZXIsIDI4IEp1bjoKKyAgLSBhZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciBNb3Rvcm9sYSBpLk1YIGFyY2hpdGVjdHVyZQorICAtIGFkZCBzdXBwb3J0IGZvciBteDFhZHMsIG14MWZzMiBhbmQgc2NiOTMyOCBib2FyZHMKKworKiBQYXRjaGVzIGJ5IE1hcmMgTGVlbWFuLCAyMyBKdWwgMjAwNDoKKyAgLSBBZGQgZGVmaW5lIGZvciB0aGUgUENJL01lbW9yeSBCdWZmZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICAtIGNvcnJlY3RlZCBjb21tZW50cyBpbiBjcHUvbXBjODI0eC9jcHVfaW5pdC5jCisKKyogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNlcmlhbCBpbnRlcmZhY2VzCisgIChmb3IgZXhhbXBsZSB0byBhbGxvdyBtb2RlbSBkaWFsLWluIC8gZGlhbC1vdXQpCisKICogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBKdWwgMjAwNDoKICAgY3B1L3BwYzR4eC9zZHJhbS5jIHJld3JpdHRlbiBub3cgdXNpbmcgZ2V0X3JhbV9zaXplKCkKIAogKiBGaXggTlNDVSBjb25maWc7IGFkZCBldGhlcm5ldCB3YWtldXAgY29kZS4KIAotKiBBZGQgbGluayBmb3IgcHJlbG9hZGVyIGZvciBNb3Rvcm9sYSBDb2xkZmlyZSB0byBSQUVETUUubTY4aworKiBBZGQgbGluayBmb3IgcHJlbG9hZGVyIGZvciBNb3Rvcm9sYSBDb2xkZmlyZSB0byBSRUFETUUubTY4awogCiAqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDEyIEp1bCAyMDA0OgogICBmaXggb3V0cHV0IGZvcm1hdHRpbmcgaW4gZHJpdmVycy9jZmlfZmxhc2guYwpkaWZmIC0tZ2l0IGEvTUFLRUFMTCBiL01BS0VBTEwKaW5kZXggYTRmMjk0NC4uMTMxZGMzNyAxMDA2NDQKLS0tIGEvTUFLRUFMTAorKysgYi9NQUtFQUxMCkBAIC0xMzksMTEgKzEzOSwxMCBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBMSVNUX0FSTTk9IglcCi0JYXQ5MXJtOTIwMGRrCWludGVncmF0b3JjcAlpbnRlZ3JhdG9yYXAJCQlcCi0JbHBkN2E0MDAJbXgxYWRzCQlvbWFwMTUxMGlubgkJCVwKLQlvbWFwMTYxMGgyCW9tYXAxNjEwaW5uCW9tYXA3MzBwMgkJCVwKLQlzbWRrMjQwMAlzbWRrMjQxMAl0cmFiCQkJCVwKLQlWQ01BOQkJdmVyc2F0aWxlCQkJCQlcCisJYXQ5MXJtOTIwMGRrCWludGVncmF0b3JjcAlpbnRlZ3JhdG9yYXAgCWxwZDdhNDAwCVwKKwlteDFhZHMJCW14MWZzMgkJb21hcDE1MTBpbm4Jb21hcDE2MTBoMglcCisJb21hcDE2MTBpbm4Jb21hcDczMHAyCXNjYjkzMjgJCXNtZGsyNDAwCVwKKwlzbWRrMjQxMAl0cmFiCQlWQ01BOQkJdmVyc2F0aWxlCVwKICIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAxNjAxZDdkLi41ZGExNjI4IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNzU3LDYgKzc1Nyw3IEBACiBQTUM0MDVfY29uZmlnOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBwbWM0MDUgZXNkCiAKK1BQQ2hhbWVsZW9uRVZCX2NvbmZpZwkJXAogUFBDaGFtZWxlb25FVkJfQkFfMjVfY29uZmlnCVwKIFBQQ2hhbWVsZW9uRVZCX01FXzI1X2NvbmZpZwlcCiBQUENoYW1lbGVvbkVWQl9ISV8yNV9jb25maWcJXApAQCAtMTE1NCw2ICsxMTU1LDEyIEBACiBscGQ3YTQwNF9jb25maWc6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gbGg3YTQweCBscGQ3YTQweAogCitteDFhZHNfY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG14MWFkcworCitteDFmczJfY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG14MWZzMgorCiBvbWFwMTUxMGlubl9jb25maWcgOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNXQgb21hcDE1MTBpbm4KIApAQCAtMTE5Miw2ICsxMTk5LDkgQEAKIAlmaTsKIAlALi9ta2NvbmZpZyAtYSAkKGNhbGwgeHRyYWN0X29tYXA3MzBwMiwkQCkgYXJtIGFybTkyNmVqcyBvbWFwNzMwcDIKIAorc2NiOTMyOF9jb25maWcJOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgc2NiOTMyOAorCiBzbWRrMjQwMF9jb25maWcJOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgc21kazI0MDAKIApAQCAtMTI0MCwxMyArMTI1MCw2IEBACiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gczNjNDRiMCBCMiBkYXZlCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIE1DOTMyOCAoRHJhZ29uYmFsbCkgU3lzdGVtcwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1teDFhZHNfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBtYzkzMjggbXgxYWRzCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIEFSTTcyMFQgU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9sd21vbi9sd21vbi5jIGIvYm9hcmQvbHdtb24vbHdtb24uYwppbmRleCA2Nzc2ZGJmLi45MDRlN2VhIDEwMDY0NAotLS0gYS9ib2FyZC9sd21vbi9sd21vbi5jCisrKyBiL2JvYXJkL2x3bW9uL2x3bW9uLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8cG9zdC5oPgorI2luY2x1ZGUgPHNlcmlhbC5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogZm9yIHN0cmR1cCAqLwpAQCAtNDY4LDYgKzQ2OSwxMyBAQAogCXJldHVybiAoMCk7CiB9CiAKK3N0cnVjdCBzZXJpYWxfZGV2aWNlICogZGVmYXVsdF9zZXJpYWxfY29uc29sZSAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCXJldHVybiBnZC0+ZG9fbWRtX2luaXQgPyAmc2VyaWFsX3NjY19kZXZpY2UgOiAmc2VyaWFsX3NtY19kZXZpY2U7Cit9CisKIHN0YXRpYyB2b2lkIGtiZF9pbml0ICh2b2lkKQogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXgxYWRzL214MWFkcy5jIGIvYm9hcmQvbXgxYWRzL214MWFkcy5jCmluZGV4IDQ1M2U0YmIuLjY2MWZiYWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL214MWFkcy9teDFhZHMuYworKysgYi9ib2FyZC9teDFhZHMvbXgxYWRzLmMKQEAgLTIzLDkgKzIzLDkgQEAKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bWM5MzI4Lmg+CisvKiNpbmNsdWRlIDxtYzkzMjguaD4qLworI2luY2x1ZGUgPGFzbS9hcmNoLWFybTkyMHQvaW14LXJlZ3MuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC02Nyw3ICs2Nyw2IEBACiAgKiBNaXNjZWxsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMKICAqLwogCi0KIHZvaWQgU2V0QXN5bmNoTW9kZSh2b2lkKSB7CiAJX19hc21fXyAoCiAJCSJtcmMgcDE1LDAscjAsYzEsYzAsMCBcbiIKQEAgLTg1LDQyICs4NCwzNCBAQAogCiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICB0bXA7CiAKLQltYzkzMjhzaWQJPSBNWDFfU0lEUjsKKwltYzkzMjhzaWQJPSBTSURSOwogCi0JTVgxX0dQQ1IgCT0gMHgwMDAwMDNBQjsJCS8qIEkvTyBwYWQgZHJpdmluZyBzdHJlbmd0aCAJKi8KKwlHUENSIAkJPSAweDAwMDAwM0FCOwkJLyogSS9PIHBhZCBkcml2aW5nIHN0cmVuZ3RoIAkqLwogCiAvKglNWDFfQ1MxVSAJPSAweDAwMDAwQTAwOwkqLwkvKiBTUkFNIGluaXRpYWxpemF0aW9uIAkJKi8KIC8qCU1YMV9DUzFMIAk9IDB4MTExMTA2MDE7IAkqLwogCi0JTVgxX01QQ1RMMCAJPSAweDA0NjMyNDEwOwkvKiBzZXR0aW5nIGZvciAxNTAgTUh6IE1DVSBQTEwgQ0xLCSovCi0KLS8qCU1YMV9NUENUTDAgCT0gMHgwMDNmMTQzNzsJKi8gLyogc2V0dGluZyBmb3IgMTkyIE1IeiBNQ1UgUExMIENMSwkqLworCU1QQ1RMMCAJCT0gMHgwNDYzMjQxMDsJLyogc2V0dGluZyBmb3IgMTUwIE1IeiBNQ1UgUExMIENMSwkqLwogCiAvKiBzZXQgRkNMSyBkaXZpZGVyIDEgKGkuZS4gRkNMSyB0byBNQ1UgUExMIENMSykgYW5kCiAgKiBCQ0xLIGRpdmlkZXIgdG8gMiAoaS5lLiBCQ0xLIHRvIDQ4IE1IeikKICAqLwotCU1YMV9DU0NSIAk9IDB4QUYwMDA0MDM7CisJQ1NDUiAJPSAweEFGMDAwNDAzOwogCi0JTVgxX0NTQ1IgCXw9IDB4MDAyMDAwMDA7ICAgCS8qIFRyaWdnZXIgdGhlIHJlc3RhcnQgYml0KGJpdCAyMSkJKi8KLQlNWDFfQ1NDUiAJJj0gMHhGRkZGN0ZGRjsJCS8qIFByb2dyYW0gUFJFU0MgYml0KGJpdCAxNSkgdG8gMCB0byBkaXZpZGUtYnktMSAqLworCUNTQ1IgCXw9IDB4MDAyMDAwMDA7ICAgCS8qIFRyaWdnZXIgdGhlIHJlc3RhcnQgYml0KGJpdCAyMSkJKi8KKwlDU0NSIAkmPSAweEZGRkY3RkZGOwkJLyogUHJvZ3JhbSBQUkVTQyBiaXQoYml0IDE1KSB0byAwIHRvIGRpdmlkZS1ieS0xICovCiAKIC8qIHNldHVwIGNzNCBmb3IgY3M4OTAwIGV0aGVybmV0ICovCiAKLQlNWDFfQ1M0VQk9IDB4MDAwMDBGMDA7CS8qIEluaXRpYWxpemUgQ1M0IGZvciBDUzg5MDAgZXRoZXJuZXQgCSovCi0JTVgxX0NTNEwJPSAweDAwMDAxNTAxOworCUNTNFUJPSAweDAwMDAwRjAwOwkvKiBJbml0aWFsaXplIENTNCBmb3IgQ1M4OTAwIGV0aGVybmV0IAkqLworCUNTNEwJPSAweDAwMDAxNTAxOwogCi0JTVgxX0dJVVNfQQkmPSAweEZGM0ZGRkZGOwotCU1YMV9HUFJfQQkmPSAweEZGM0ZGRkZGOworCUdJVVMoMCkJJj0gMHhGRjNGRkZGRjsKKwlHUFIoMCkJJj0gMHhGRjNGRkZGRjsKIAogCXRtcCA9ICoodW5zaWduZWQgaW50ICopKDB4MTUwMDAwMEMpOwogCXRtcCA9ICoodW5zaWduZWQgaW50ICopKDB4MTUwMDAwMEMpOwogCi0vKiBzZXR1cCB0aW1lciAxIGFzIHN5c3RlbSB0aW1lciAgCSovCi0KLQlNWDFfVFBSRVIxCT0gMHgxZjsJCS8qIGRpdmlkZSBieSAzMiAJCSovCi0JTVgxX1RDVEwxCT0gMHgxOTsJCS8qIGNsb2NrIGluIGZyb20gMzJrIE9zYy4JKi8KLQotCiAJU2V0QXN5bmNoTW9kZSgpOwogCiAJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IDE2MDsJLyogQXJjaCBudW1iZXIgb2YgTVgxQURTIEJvYXJkIAkJKi8KQEAgLTEzMSwxOSArMTIyLDE5IEBACiAJZGNhY2hlX2VuYWJsZSgpOwogCiAvKiBzZXQgUEVSQ0xLcwkJCQkqLwotCU1YMV9QQ0RSID0gMHgwMDAwMDA1NTsgICAgIAkvKiBzZXQgUEVSQ0xLUwkJCQkqLworCVBDRFIgPSAweDAwMDAwMDU1OyAgICAgCS8qIHNldCBQRVJDTEtTCQkJCSovCiAKIC8qIFBFUkNMSzMgaXMgb25seSB1c2VkIGJ5IFNTSSBzbyB0aGUgU1NJIGRyaXZlciBjYW4gc2V0IGl0IGFueSB2YWx1ZSBpdCBsaWtlcwogICogUEVSQ0xLMSBhbmQgUEVSQ0xLMiBhcmUgc2hhcmVkIHNvIERPIE5PVCBjaGFuZ2UgaXQgaW4gYW55IG90aGVyIHBsYWNlCiAgKiBhbGwgc291cmNlcyBzZWxlY3RlZCBhcyBub3JtYWwgaW50ZXJydXB0CiAgKi8KLQlNWDFfSU5UVFlQRUggPSAwOwotCU1YMV9JTlRUWVBFTCA9IDA7CiAKKy8qCU1YMV9JTlRUWVBFSCA9IDA7CisJTVgxX0lOVFRZUEVMID0gMDsKKyovCiAJcmV0dXJuIDA7CiB9CiAKLQogaW50IGJvYXJkX2xhdGVfaW5pdCh2b2lkKSB7CiAKIAlzZXRlbnYoInN0ZG91dCIsICJzZXJpYWwiKTsKQEAgLTE2MywxMyArMTU0LDEwIEBACiAJCWRlZmF1bHQgOgogCQkJcHJpbnRmICgiTVgxQURTIGJvYXJkIHdpdGggVU5LTk9XTiBNQzkzMjggY3B1LCBTaWxpY29uIElEIDB4JTA4eCBcbiIsbWM5MzI4c2lkKTsKIAkJCWJyZWFrOwotCiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLQogaW50IGRyYW1faW5pdCAodm9pZCkgewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCmRpZmYgLS1naXQgYS9ib2FyZC9teDFhZHMvc3luY2ZsYXNoLmMgYi9ib2FyZC9teDFhZHMvc3luY2ZsYXNoLmMKaW5kZXggMDlmYzBmOC4uZWI3ZmRlNSAxMDA2NDQKLS0tIGEvYm9hcmQvbXgxYWRzL3N5bmNmbGFzaC5jCisrKyBiL2JvYXJkL214MWFkcy9zeW5jZmxhc2guYwpAQCAtMjQsNyArMjQsOCBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxtYzkzMjguaD4KKy8qI2luY2x1ZGUgPG1jOTMyOC5oPiovCisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nICogcF91MzI7CiAKQEAgLTMzLDI3ICszNCwyNiBAQAogZmxhc2hfaW5mb190IGZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107CS8qIGluZm8gZm9yIEZMQVNIIGNoaXBzICAgICovCiAKIC8qICBGb2xsb3dpbmcgU2V0dGluZyBpcyBmb3IgQ1NEMQkqLwotI2RlZmluZSBTRkNUTAkJMHgwMDIyMTAwNAotI2RlZmluZSByZWdfU0ZDVEwJX19SRUcoU0ZDVEwpCisjZGVmaW5lIFNGQ1RMCQkJMHgwMDIyMTAwNAorI2RlZmluZSByZWdfU0ZDVEwJCV9fUkVHKFNGQ1RMKQogCi0jZGVmaW5lIFNZTkNGTEFTSF9BMTAJKDB4MDAxMDAwMDApCisjZGVmaW5lIFNZTkNGTEFTSF9BMTAJCSgweDAwMTAwMDAwKQogCi0jZGVmaW5lIENNRF9OT1JNQUwJKDB4ODEwMjAzMDApCQkJLyogTm9ybWFsIE1vZGUJCQkqLwotI2RlZmluZSBDTURfUFJFQwkoQ01EX05PUk1BTCArIDB4MTAwMDAwMDApIAkvKiBQcmVjaGFyZ2UgQ29tbWFuZAkJKi8KLSNkZWZpbmUgQ01EX0FVVE8JKENNRF9OT1JNQUwgKyAweDIwMDAwMDAwKSAJLyogQXV0byBSZWZyZXNoIENvbW1hbmQJCSovCi0jZGVmaW5lIENNRF9MTVIJCShDTURfTk9STUFMICsgMHgzMDAwMDAwMCkgCS8qIExvYWQgTW9kZSBSZWdpc3RlciBDb21tYW5kIAkqLwotI2RlZmluZSBDTURfTENSCQkoQ01EX05PUk1BTCArIDB4NjAwMDAwMDApIAkvKiBMQ1IgQ29tbWFuZAkJCSovCi0jZGVmaW5lIENNRF9QUk9HUkFNCShDTURfTk9STUFMICsgMHg3MDAwMDAwMCkKKyNkZWZpbmUgQ01EX05PUk1BTAkJKDB4ODEwMjAzMDApCQkJLyogTm9ybWFsIE1vZGUJCQkqLworI2RlZmluZSBDTURfUFJFQwkJKENNRF9OT1JNQUwgKyAweDEwMDAwMDAwKSAJLyogUHJlY2hhcmdlIENvbW1hbmQJCSovCisjZGVmaW5lIENNRF9BVVRPCQkoQ01EX05PUk1BTCArIDB4MjAwMDAwMDApIAkvKiBBdXRvIFJlZnJlc2ggQ29tbWFuZAkJKi8KKyNkZWZpbmUgQ01EX0xNUgkJCShDTURfTk9STUFMICsgMHgzMDAwMDAwMCkgCS8qIExvYWQgTW9kZSBSZWdpc3RlciBDb21tYW5kIAkqLworI2RlZmluZSBDTURfTENSCQkJKENNRF9OT1JNQUwgKyAweDYwMDAwMDAwKSAJLyogTENSIENvbW1hbmQJCQkqLworI2RlZmluZSBDTURfUFJPR1JBTQkJKENNRF9OT1JNQUwgKyAweDcwMDAwMDAwKQogCi0jZGVmaW5lIE1PREVfUkVHX1ZBTAkoQ0ZHX0ZMQVNIX0JBU0UrMHgwMDA4Q0MwMCkgCS8qIENhcyBMYXRlbmN5IDMJCSovCisjZGVmaW5lIE1PREVfUkVHX1ZBTAkJKENGR19GTEFTSF9CQVNFKzB4MDAwOENDMDApIAkvKiBDYXMgTGF0ZW5jeSAzCQkqLwogCiAvKiBMQ1IgQ29tbWFuZCAqLwotI2RlZmluZSBMQ1JfUkVBRFNUQVRVUwkJKDB4MDAwMUMwMDApCQkvKiAweDcwCQkJCSovCi0jZGVmaW5lIExDUl9FUkFTRV9DT05GSVJNCSgweDAwMDA4MDAwKQkJLyogMHgyMAkJCQkqLwotI2RlZmluZSBMQ1JfRVJBU0VfTlZNT0RFCSgweDAwMDBDMDAwKQkJLyogMHgzMAkJCQkqLwotI2RlZmluZSBMQ1JfUFJPR19OVk1PREUJCSgweDAwMDI4MDAwKQkJLyogMHhBMAkJCQkqLwotI2RlZmluZSBMQ1JfU1JfQ0xFQVIJCSgweDAwMDE0MDAwKQkJLyogMHg1MAkJCQkqLwotCisjZGVmaW5lIExDUl9SRUFEU1RBVFVTCQkoMHgwMDAxQzAwMCkJCQkvKiAweDcwCQkJCSovCisjZGVmaW5lIExDUl9FUkFTRV9DT05GSVJNCSgweDAwMDA4MDAwKQkJCS8qIDB4MjAJCQkJKi8KKyNkZWZpbmUgTENSX0VSQVNFX05WTU9ERQkoMHgwMDAwQzAwMCkJCQkvKiAweDMwCQkJCSovCisjZGVmaW5lIExDUl9QUk9HX05WTU9ERQkJKDB4MDAwMjgwMDApCQkJLyogMHhBMAkJCQkqLworI2RlZmluZSBMQ1JfU1JfQ0xFQVIJCSgweDAwMDE0MDAwKQkJCS8qIDB4NTAJCQkJKi8KIAogLyogR2V0IFN0YXR1cyByZWdpc3RlciAJCQkqLwogdTMyIFNGX1NSKHZvaWQpIHsKQEAgLTgyLDcgKzgyLDYgQEAKIAogCWlmICgodG1wICYgMHgwMDAwMDA4MCkgJiYgKHRtcCAmIDB4MDAwMDAwMUMpKSB7CiAJCXByaW50ZiAoIlN5bmNGbGFzaCBFcnJvciBjb2RlICUwOHhcbiIsdG1wKTsKLQogCX07CiAKIAlpZiAodG1wID09IDB4MDA4MDAwODApIAkJLyogVGVzdCBCaXQgNyBvZiBTUgkqLwpAQCAtOTgsNyArOTcsNiBAQAogCiAJcmVnX1NGQ1RMCT0gQ01EX1BSRUM7CQkJLyogU2V0IFByZWNoYXJnZSBDb21tYW5kIAkqLwogCXRtcCAJCT0gX19SRUcoQ0ZHX0ZMQVNIX0JBU0UgKyBTWU5DRkxBU0hfQTEwKTsgLyogSXNzdWUgUHJlY2hhcmdlIEFsbCBDb21tYW5kICovCi0KIH0KIAogLyogc2V0IFN5bmNGbGFzaCB0byBub3JtYWwgbW9kZQkJCSovCkBAIC0xMjgsNyArMTI2LDYgQEAKIAl3aGlsZSghU0ZfUmVhZHkoKSk7CiB9CiAKLQogdm9pZCBTRl9Odm1vZGVFcmFzZSh2b2lkKSB7CiAJU0ZfUHJlY2hhcmdlQWxsKCk7CiAKQEAgLTE0OSwxMCArMTQ2LDggQEAKIAogCXJlZ19TRkNUTAk9IENNRF9OT1JNQUw7CQkJLyogUmV0dXJuIHRvIE5vcm1hbCBtb2RlIAkqLwogCV9fUkVHKENGR19GTEFTSF9CQVNFK0xDUl9QUk9HX05WTU9ERSkgPSAweEMwQzBDMEMwOyAJLyogQ29uZmlybSBub3QgbmVlZGVkIAkqLwotCiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHVsb25nIGZsYXNoX2luaXQodm9pZCkgewpAQCAtMTk1LDcgKzE5MCw2IEBACiAJcmV0dXJuIEZMQVNIX0JBTktfU0laRTsKIH0KIAotCiB2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqaW5mbykgewogCiAJaW50IGk7CkBAIC0yMDksNyArMjAzLDYgQEAKIAkJCWJyZWFrOwogCX0KIAotCiAJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CiAJCWNhc2UgKEZMQVNIX01UMjhTNE0xNkxDICYgRkxBU0hfVFlQRU1BU0spOgogCQkJcHJpbnRmKCIyeCBGTEFTSF9NVDI4UzRNMTZMQyAoMTZNQiBUb3RhbClcbiIpOwpAQCAtMjM2LDcgKzIyOSw2IEBACiAJcHJpbnRmICgiXG4iKTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KSB7CmRpZmYgLS1naXQgYS9ib2FyZC9teDFhZHMvdS1ib290LmxkcyBiL2JvYXJkL214MWFkcy91LWJvb3QubGRzCmluZGV4IDUzNzQzY2QuLjY0OTIxNmEgMTAwNjQ0Ci0tLSBhL2JvYXJkL214MWFkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL214MWFkcy91LWJvb3QubGRzCkBAIC0yMyw3ICsyMyw2IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLQogT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQogT1VUUFVUX0FSQ0goYXJtKQogRU5UUlkoX3N0YXJ0KQpAQCAtMzQsNyArMzMsNyBAQAogCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgIDoKIAl7Ci0JICBjcHUvbWM5MzI4L3N0YXJ0Lm8JKC50ZXh0KQorCSAgY3B1L2FybTkyMHQvc3RhcnQubwkoLnRleHQpCiAJICAqKC50ZXh0KQogCX0KIApkaWZmIC0tZ2l0IGEvY3B1L21jOTMyOC9NYWtlZmlsZSBiL2JvYXJkL214MWZzMi9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDc1JQpjb3B5IGZyb20gY3B1L21jOTMyOC9NYWtlZmlsZQpjb3B5IHRvIGJvYXJkL214MWZzMi9NYWtlZmlsZQppbmRleCBmY2NjNmFiLi44NmFlZjVjIDEwMDY0NAotLS0gYS9jcHUvbWM5MzI4L01ha2VmaWxlCisrKyBiL2JvYXJkL214MWZzMi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMSArMjMsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSBsaWIkKEJPQVJEKS5hCiAKLVNUQVJUCT0gc3RhcnQubwotT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubworT0JKUwk6PSBteDFmczIubyBmbGFzaC5vCitTT0JKUwk6PSBtZW1zZXR1cC5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkXgogCi0kKExJQik6CSQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJChPQkpTKQorY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKIAotc2luY2x1ZGUgLmRlcGVuZAorLWluY2x1ZGUgLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9teDFmczIvY29uZmlnLm1rIGIvYm9hcmQvbXgxZnMyL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWFiNTQyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXgxZnMyL2NvbmZpZy5tawpAQCAtMCwwICsxLDEwIEBACisjCisjIFRoaXMgY29uZmlnIGZpbGUgaXMgdXNlZCBmb3IgY29tcGlsYXRpb24gb2YgSU1YIHNvdXJjZXMKKyMKKyMgWW91IG1pZ2h0IGNoYW5nZSBsb2NhdGlvbiBvZiBVLUJvb3QgaW4gbWVtb3J5IGJ5IHNldHRpbmcgcmlnaHQgVEVYVF9CQVNFLgorIyBUaGlzIGFsbG93cyBmb3IgZXhhbXBsZSBoYXZpbmcgb25lIGNvcHkgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHJhbSBhbmQgc3RvcmVkCisjIGluIGZsYXNoIGRldmljZSBhbmQgbGF0ZXIgb24gd2hpbGUgZGV2ZWxvcGluZyB1c2Ugb3RoZXIgbG9jYXRpb24gdG8gdGVzdAorIyB0aGUgY29kZSBpbiBSQU0gZGV2aWNlIG9ubHkuCisjCisKK1RFWFRfQkFTRSA9IDB4MDhmMDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL214MWZzMi9mbGFzaC5jIGIvYm9hcmQvbXgxZnMyL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E3OWE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL214MWZzMi9mbGFzaC5jCkBAIC0wLDAgKzEsOTE0IEBACisvKgorICogKEMpIDIwMDAtMjAwNCBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICogKEMpIDIwMDMgQXVndXN0IEhvZXJhZW5kbCwgTG9nb3Ryb25pYyBHbWJICisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI3VuZGVmIENPTkZJR19GTEFTSF8xNkJJVAorCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZiBkZWZpbmVkIENGR19KRkZTX0NVU1RPTV9QQVJUCisjaW5jbHVkZSA8amZmczIvamZmczIuaD4KKyNlbmRpZgorCisjZGVmaW5lIEZMQVNIX0JBTktfU0laRSBNWDFGUzJfRkxBU0hfQkFOS19TSVpFCisjZGVmaW5lIE1BSU5fU0VDVF9TSVpFICBNWDFGUzJfRkxBU0hfU0VDVF9TSVpFCisKK2ZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOwkvKiBpbmZvIGZvciBGTEFTSCBjaGlwcyAgICovCisKKy8qCisgKiBOT1RFIC0gQ09ORklHX0ZMQVNIXzE2QklUIG1lYW5zIHRoZSBDUFUgaW50ZXJmYWNlIGlzIDE2LWJpdCwgaXQKKyAqICAgICAgICBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBmbGFzaCBjaGlwIGJlaW5nIDgtYml0IG9yIDE2LWJpdC4KKyAqLworI2lmZGVmIENPTkZJR19GTEFTSF8xNkJJVAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBGTEFTSF9QT1JUX1dJRFRIOwordHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBGTEFTSF9QT1JUX1dJRFRIVjsKKworI2RlZmluZQlGTEFTSF9JRF9NQVNLCTB4RkZGRgorI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBGTEFTSF9QT1JUX1dJRFRIOwordHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIEZMQVNIX1BPUlRfV0lEVEhWOworCisjZGVmaW5lCUZMQVNIX0lEX01BU0sJMHhGRkZGRkZGRgorI2VuZGlmCisKKyNkZWZpbmUgRlBXCUZMQVNIX1BPUlRfV0lEVEgKKyNkZWZpbmUgRlBXVglGTEFTSF9QT1JUX1dJRFRIVgorCisjZGVmaW5lIE9STUFTSyhzaXplKSAoKC1zaXplKSAmIE9SX0FNX01TSykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRnVuY3Rpb25zCisgKi8KKyNpZiAwCitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUoRlBXViAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pOworc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHModWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICogaW5mbyk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIGZsYXNoX3Jlc2V0KGZsYXNoX2luZm9fdCAqIGluZm8pOworc3RhdGljIGludCB3cml0ZV93b3JkX2ludGVsKGZsYXNoX2luZm9fdCAqIGluZm8sIEZQV1YgKiBkZXN0LCBGUFcgZGF0YSk7CitzdGF0aWMgaW50IHdyaXRlX3dvcmRfYW1kKGZsYXNoX2luZm9fdCAqIGluZm8sIEZQV1YgKiBkZXN0LCBGUFcgZGF0YSk7CisjZGVmaW5lIHdyaXRlX3dvcmQoaW4sIGRlLCBkYSkgICB3cml0ZV93b3JkX2FtZChpbiwgZGUsIGRhKQorI2lmZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCitzdGF0aWMgdm9pZCBmbGFzaF9zeW5jX3JlYWxfcHJvdGVjdChmbGFzaF9pbmZvX3QgKiBpbmZvKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBDRkdfSkZGU19DVVNUT01fUEFSVAorCisvKioKKyAqIGpmZnMyX3BhcnRfaW5mbyAtIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhIEpGRlMyIHBhcnRpdGlvbgorICoKKyAqIEBwYXJ0X251bTogbnVtYmVyIG9mIHRoZSBwYXJ0aXRpb24geW91IHdhbnQgdG8gZ2V0IGluZm8gYWJvdXQKKyAqIEByZXR1cm46ICAgc3RydWN0IHBhcnRfaW5mbyogaW4gY2FzZSBvZiBzdWNjZXNzLCAwIGlmIGZhaWx1cmUKKyAqLworCitzdGF0aWMgc3RydWN0IHBhcnRfaW5mbyBwYXJ0Oworc3RhdGljIGludCBjdXJyZW50X3BhcnQgPSAtMTsKKworc3RydWN0IHBhcnRfaW5mbyAqCitqZmZzMl9wYXJ0X2luZm8oaW50IHBhcnRfbnVtKQoreworCXZvaWQgKmpmZnMyX3ByaXZfc2F2ZWQgPSBwYXJ0LmpmZnMyX3ByaXY7CisKKwlwcmludGYoImpmZnMyX3BhcnRfaW5mbzogcGFydF9udW09JWlcbiIsIHBhcnRfbnVtKTsKKworCWlmIChjdXJyZW50X3BhcnQgPT0gcGFydF9udW0pCisJCXJldHVybiAmcGFydDsKKworCS8qIHJvb3RmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWlmIChwYXJ0X251bSA9PSAwKSB7CisJCW1lbXNldCgmcGFydCwgMCwgc2l6ZW9mIChwYXJ0KSk7CisKKwkJcGFydC5vZmZzZXQgPSAoY2hhciAqKSBNWDFGUzJfSkZGUzJfUEFSVDBfU1RBUlQ7CisJCXBhcnQuc2l6ZSA9IE1YMUZTMl9KRkZTMl9QQVJUMF9TSVpFOworCisJCS8qIE1hcmsgdGhlIHN0cnVjdCBhcyByZWFkeSAqLworCQljdXJyZW50X3BhcnQgPSBwYXJ0X251bTsKKworCQlwcmludGYoInBhcnQub2Zmc2V0ID0gMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBwYXJ0Lm9mZnNldCk7CisJCXByaW50ZigicGFydC5zaXplICAgPSAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIHBhcnQuc2l6ZSk7CisJfQorCisJLyogdXNlcmZzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpZiAocGFydF9udW0gPT0gMSkgeworCQltZW1zZXQoJnBhcnQsIDAsIHNpemVvZiAocGFydCkpOworCisJCXBhcnQub2Zmc2V0ID0gKGNoYXIgKikgTVgxRlMyX0pGRlMyX1BBUlQxX1NUQVJUOworCQlwYXJ0LnNpemUgPSBNWDFGUzJfSkZGUzJfUEFSVDFfU0laRTsKKworCQkvKiBNYXJrIHRoZSBzdHJ1Y3QgYXMgcmVhZHkgKi8KKwkJY3VycmVudF9wYXJ0ID0gcGFydF9udW07CisKKwkJcHJpbnRmKCJwYXJ0Lm9mZnNldCA9IDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgcGFydC5vZmZzZXQpOworCQlwcmludGYoInBhcnQuc2l6ZSAgID0gMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBwYXJ0LnNpemUpOworCX0KKworCWlmIChjdXJyZW50X3BhcnQgPT0gcGFydF9udW0pIHsKKwkJcGFydC51c3JfcHJpdiA9ICZjdXJyZW50X3BhcnQ7CisJCXBhcnQuamZmczJfcHJpdiA9IGpmZnMyX3ByaXZfc2F2ZWQ7CisJCXJldHVybiAmcGFydDsKKwl9CisKKwlwcmludGYoImpmZnMyX3BhcnRfaW5mbzogZW5kIG9mIHBhcnRpdGlvbiB0YWJsZVxuIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJCQkJLyogQ0ZHX0pGRlNfQ1VTVE9NX1BBUlQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZmxhc2hfaW5pdCgpCisgKgorICogc2V0cyB1cCBmbGFzaF9pbmZvIGFuZCByZXR1cm5zIHNpemUgb2YgRkxBU0ggKGJ5dGVzKQorICovCit1bG9uZworZmxhc2hfaW5pdCh2b2lkKQoreworCWludCBpLCBqOworCXVsb25nIHNpemUgPSAwOworCisJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkrKykgeworCQl1bG9uZyBmbGFzaGJhc2UgPSAwOworCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0KKwkJICAgIChGTEFTSF9NQU5fQU1EICYgRkxBU0hfVkVORE1BU0spIHwKKwkJICAgIChGTEFTSF9BTTY0MFUgJiBGTEFTSF9UWVBFTUFTSyk7CisJCWZsYXNoX2luZm9baV0uc2l6ZSA9IEZMQVNIX0JBTktfU0laRTsKKwkJZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQgPSBDRkdfTUFYX0ZMQVNIX1NFQ1Q7CisJCW1lbXNldChmbGFzaF9pbmZvW2ldLnByb3RlY3QsIDAsIENGR19NQVhfRkxBU0hfU0VDVCk7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQlmbGFzaGJhc2UgPSBNWDFGUzJfRkxBU0hfQkFTRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGFuaWMoImNvbmZpZ3VyZWQgdG9vIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudDsgaisrKSB7CisJCQlmbGFzaF9pbmZvW2ldLnN0YXJ0W2pdID0gZmxhc2hiYXNlICsgaiAqIE1BSU5fU0VDVF9TSVpFOworCQl9CisJCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOworCX0KKworCS8qIFByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycyAqLworCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKwkJICAgICAgQ0ZHX0ZMQVNIX0JBU0UsCisJCSAgICAgIENGR19GTEFTSF9CQVNFICsgX2Jzc19zdGFydCAtIF9hcm1ib290X3N0YXJ0LAorCQkgICAgICAmZmxhc2hfaW5mb1swXSk7CisKKwlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCSAgICAgIENGR19FTlZfQUREUiwKKwkJICAgICAgQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFIC0gMSwgJmZsYXNoX2luZm9bMF0pOworCisJcmV0dXJuIHNpemU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK2ZsYXNoX3Jlc2V0KGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJRlBXViAqYmFzZSA9IChGUFdWICopIChpbmZvLT5zdGFydFswXSk7CisKKwkvKiBQdXQgRkxBU0ggYmFjayBpbiByZWFkIG1vZGUgKi8KKwlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTCkKKwkJKmJhc2UgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiBJbnRlbCBSZWFkIE1vZGUgKi8KKwllbHNlIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0FNRCkKKwkJKmJhc2UgPSAoRlBXKSAweDAwRjAwMEYwOwkvKiBBTUQgUmVhZCBNb2RlICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmIDAKK3N0YXRpYyB2b2lkCitmbGFzaF9nZXRfb2Zmc2V0cyh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCWludCBpOworCisJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCisJaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwKKwkgICAgJiYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfQlRZUEUpKSB7CisJCWludCBib290c2VjdF9zaXplOwkvKiBudW1iZXIgb2YgYnl0ZXMvYm9vdCBzZWN0b3IgICovCisJCWludCBzZWN0X3NpemU7CS8qIG51bWJlciBvZiBieXRlcy9yZWd1bGFyIHNlY3RvciAqLworCisJCWJvb3RzZWN0X3NpemUgPSAweDAwMDAyMDAwICogKHNpemVvZiAoRlBXKSAvIDIpOworCQlzZWN0X3NpemUgPSAweDAwMDEwMDAwICogKHNpemVvZiAoRlBXKSAvIDIpOworCisJCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgYm90dG9tIGJvb3QgYmxvY2sgdHlwZSAgICAgICAgKi8KKwkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiBib290c2VjdF9zaXplKTsKKwkJfQorCQlmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKKwkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArICgoaSAtIDcpICogc2VjdF9zaXplKTsKKwkJfQorCX0gZWxzZSBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9BTUQKKwkJICAgJiYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNNjQwVSkgeworCisJCWludCBzZWN0X3NpemU7CS8qIG51bWJlciBvZiBieXRlcy9zZWN0b3IgKi8KKworCQlzZWN0X3NpemUgPSAweDAwMDEwMDAwICogKHNpemVvZiAoRlBXKSAvIDIpOworCisJCS8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAodW5pZm9ybSBzZWN0b3IgdHlwZSkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQorCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiBzZWN0X3NpemUpOworCX0KK30KKyNlbmRpZiAvKiAwICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit2b2lkCitmbGFzaF9wcmludF9pbmZvKGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisJdWNoYXIgKmJvb3R0eXBlOworCXVjaGFyICpib290bGV0dGVyOworCXVjaGFyICpmbXQ7CisJdWNoYXIgYm90Ym9vdGxldHRlcltdID0gIkIiOworCXVjaGFyIHRvcGJvb3RsZXR0ZXJbXSA9ICJUIjsKKwl1Y2hhciBib3Rib290dHlwZVtdID0gImJvdHRvbSBib290IHNlY3RvciI7CisJdWNoYXIgdG9wYm9vdHR5cGVbXSA9ICJ0b3AgYm9vdCBzZWN0b3IiOworCisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJcHJpbnRmKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKKwljYXNlIEZMQVNIX01BTl9BTUQ6CisJCXByaW50ZigiQU1EICIpOworCQlicmVhazsKKwljYXNlIEZMQVNIX01BTl9CTToKKwkJcHJpbnRmKCJCUklHSFQgTUlDUk8gIik7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfTUFOX0ZVSjoKKwkJcHJpbnRmKCJGVUpJVFNVICIpOworCQlicmVhazsKKwljYXNlIEZMQVNIX01BTl9TU1Q6CisJCXByaW50ZigiU1NUICIpOworCQlicmVhazsKKwljYXNlIEZMQVNIX01BTl9TVE06CisJCXByaW50ZigiU1RNICIpOworCQlicmVhazsKKwljYXNlIEZMQVNIX01BTl9JTlRFTDoKKwkJcHJpbnRmKCJJTlRFTCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJVbmtub3duIFZlbmRvciAiKTsKKwkJYnJlYWs7CisJfQorCisJLyogY2hlY2sgZm9yIHRvcCBvciBib3R0b20gYm9vdCwgaWYgaXQgYXBwbGllcyAqLworCWlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSB7CisJCWJvb3R0eXBlID0gYm90Ym9vdHR5cGU7CisJCWJvb3RsZXR0ZXIgPSBib3Rib290bGV0dGVyOworCX0gZWxzZSB7CisJCWJvb3R0eXBlID0gdG9wYm9vdHR5cGU7CisJCWJvb3RsZXR0ZXIgPSB0b3Bib290bGV0dGVyOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgeworCWNhc2UgRkxBU0hfQU02NDBVOgorCQlmbXQgPSAiMjlMVjY0MUQgKDY0IE1iaXQsIHVuaWZvcm0gc2VjdG9ycylcbiI7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfMjhGODAwQzNCOgorCWNhc2UgRkxBU0hfMjhGODAwQzNUOgorCQlmbXQgPSAiMjhGODAwQzMlcyAoOCBNYml0LCAlcylcbiI7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfSU5URUw4MDBCOgorCWNhc2UgRkxBU0hfSU5URUw4MDBUOgorCQlmbXQgPSAiMjhGODAwQjMlcyAoOCBNYml0LCAlcylcbiI7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfMjhGMTYwQzNCOgorCWNhc2UgRkxBU0hfMjhGMTYwQzNUOgorCQlmbXQgPSAiMjhGMTYwQzMlcyAoMTYgTWJpdCwgJXMpXG4iOworCQlicmVhazsKKwljYXNlIEZMQVNIX0lOVEVMMTYwQjoKKwljYXNlIEZMQVNIX0lOVEVMMTYwVDoKKwkJZm10ID0gIjI4RjE2MEIzJXMgKDE2IE1iaXQsICVzKVxuIjsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF8yOEYzMjBDM0I6CisJY2FzZSBGTEFTSF8yOEYzMjBDM1Q6CisJCWZtdCA9ICIyOEYzMjBDMyVzICgzMiBNYml0LCAlcylcbiI7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfSU5URUwzMjBCOgorCWNhc2UgRkxBU0hfSU5URUwzMjBUOgorCQlmbXQgPSAiMjhGMzIwQjMlcyAoMzIgTWJpdCwgJXMpXG4iOworCQlicmVhazsKKwljYXNlIEZMQVNIXzI4RjY0MEMzQjoKKwljYXNlIEZMQVNIXzI4RjY0MEMzVDoKKwkJZm10ID0gIjI4RjY0MEMzJXMgKDY0IE1iaXQsICVzKVxuIjsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF9JTlRFTDY0MEI6CisJY2FzZSBGTEFTSF9JTlRFTDY0MFQ6CisJCWZtdCA9ICIyOEY2NDBCMyVzICg2NCBNYml0LCAlcylcbiI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZtdCA9ICJVbmtub3duIENoaXAgVHlwZVxuIjsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRmKGZtdCwgYm9vdGxldHRlciwgYm9vdHR5cGUpOworCisJcHJpbnRmKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAorCSAgICAgICBpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKKwkJaWYgKChpICUgNSkgPT0gMCkgeworCQkJcHJpbnRmKCJcbiAgICIpOworCQl9CisKKwkJcHJpbnRmKCIgJTA4bFglcyIsIGluZm8tPnN0YXJ0W2ldLAorCQkgICAgICAgaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiKTsKKwl9CisKKwlwcmludGYoIlxuIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKKyAqLworCisjaWYgMAordWxvbmcKK2ZsYXNoX2dldF9zaXplKEZQV1YgKiBhZGRyLCBmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCisKKwkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kIHNlcXVlbmNlIGFuZCB0ZXN0IEZMQVNIIGFuc3dlciAqLworCWFkZHJbMHgwNTU1XSA9IChGUFcpIDB4MDBBQTAwQUE7CS8qIGZvciBBTUQsIEludGVsIGlnbm9yZXMgdGhpcyAqLworCWFkZHJbMHgwMkFBXSA9IChGUFcpIDB4MDA1NTAwNTU7CS8qIGZvciBBTUQsIEludGVsIGlnbm9yZXMgdGhpcyAqLworCWFkZHJbMHgwNTU1XSA9IChGUFcpIDB4MDA5MDAwOTA7CS8qIHNlbGVjdHMgSW50ZWwgb3IgQU1EICovCisKKwkvKiBUaGUgbWFudWZhY3R1cmVyIGNvZGVzIGFyZSBvbmx5IDEgYnl0ZSwgc28ganVzdCB1c2UgMSBieXRlLgorCSAqIFRoaXMgd29ya3MgZm9yIGFueSBidXMgd2lkdGggYW5kIGFueSBGTEFTSCBkZXZpY2Ugd2lkdGguCisJICovCisJc3dpdGNoIChhZGRyWzBdICYgMHhmZikgeworCisJY2FzZSAodWNoYXIpIEFNRF9NQU5VRkFDVDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOworCQlicmVhazsKKworCWNhc2UgKHVjaGFyKSBJTlRFTF9NQU5VRkFDVDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fSU5URUw7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSAwOworCQlpbmZvLT5zaXplID0gMDsKKwkJYnJlYWs7CisJfQorCisJLyogQ2hlY2sgMTYgYml0cyBvciAzMiBiaXRzIG9mIElEIHNvIHdvcmsgb24gMzIgb3IgMTYgYml0IGJ1cy4gKi8KKwlpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTikKKwkJc3dpdGNoIChhZGRyWzFdKSB7CisKKwkJY2FzZSAoRlBXKSBBTURfSURfTFY2NDBVOgkvKiAyOUxWNjQwIGFuZCAyOUxWNjQxIGhhdmUgc2FtZSBJRCAqLworCQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU02NDBVOworCQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTI4OworCQkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDAgKiAoc2l6ZW9mIChGUFcpIC8gMik7CisJCQlicmVhazsJLyogPT4gOCBvciAxNiBNQiAgICAgICAgKi8KKworCQljYXNlIChGUFcpIElOVEVMX0lEXzI4RjgwMEMzQjoKKwkJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjgwMEMzQjsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDIzOworCQkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDAgKiAoc2l6ZW9mIChGUFcpIC8gMik7CisJCQlicmVhazsJLyogPT4gMSBvciAyIE1CICAgICAgICAgKi8KKworCQljYXNlIChGUFcpIElOVEVMX0lEXzI4RjgwMEIzQjoKKwkJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0lOVEVMODAwQjsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDIzOworCQkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDAgKiAoc2l6ZW9mIChGUFcpIC8gMik7CisJCQlicmVhazsJLyogPT4gMSBvciAyIE1CICAgICAgICAgKi8KKworCQljYXNlIChGUFcpIElOVEVMX0lEXzI4RjE2MEMzQjoKKwkJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjE2MEMzQjsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDM5OworCQkJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDAgKiAoc2l6ZW9mIChGUFcpIC8gMik7CisJCQlicmVhazsJLyogPT4gMiBvciA0IE1CICAgICAgICAgKi8KKworCQljYXNlIChGUFcpIElOVEVMX0lEXzI4RjE2MEIzQjoKKwkJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0lOVEVMMTYwQjsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDM5OworCQkJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDAgKiAoc2l6ZW9mIChGUFcpIC8gMik7CisJCQlicmVhazsJLyogPT4gMiBvciA0IE1CICAgICAgICAgKi8KKworCQljYXNlIChGUFcpIElOVEVMX0lEXzI4RjMyMEMzQjoKKwkJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjMyMEMzQjsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOworCQkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDAgKiAoc2l6ZW9mIChGUFcpIC8gMik7CisJCQlicmVhazsJLyogPT4gNCBvciA4IE1CICAgICAgICAgKi8KKworCQljYXNlIChGUFcpIElOVEVMX0lEXzI4RjMyMEIzQjoKKwkJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0lOVEVMMzIwQjsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOworCQkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDAgKiAoc2l6ZW9mIChGUFcpIC8gMik7CisJCQlicmVhazsJLyogPT4gNCBvciA4IE1CICAgICAgICAgKi8KKworCQljYXNlIChGUFcpIElOVEVMX0lEXzI4RjY0MEMzQjoKKwkJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjY0MEMzQjsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDEzNTsKKwkJCWluZm8tPnNpemUgPSAweDAwODAwMDAwICogKHNpemVvZiAoRlBXKSAvIDIpOworCQkJYnJlYWs7CS8qID0+IDggb3IgMTYgTUIgICAgICAgICovCisKKwkJY2FzZSAoRlBXKSBJTlRFTF9JRF8yOEY2NDBCM0I6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9JTlRFTDY0MEI7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMzU7CisJCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwMCAqIChzaXplb2YgKEZQVykgLyAyKTsKKwkJCWJyZWFrOwkvKiA9PiA4IG9yIDE2IE1CICAgICAgICAqLworCisJCWRlZmF1bHQ6CisJCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAwOworCQkJaW5mby0+c2l6ZSA9IDA7CisJCQlyZXR1cm4gKDApOwkvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCisJCX0KKworCWZsYXNoX2dldF9vZmZzZXRzKCh1bG9uZykgYWRkciwgaW5mbyk7CisKKwkvKiBQdXQgRkxBU0ggYmFjayBpbiByZWFkIG1vZGUgKi8KKwlmbGFzaF9yZXNldChpbmZvKTsKKworCXJldHVybiAoaW5mby0+c2l6ZSk7Cit9CisjZW5kaWYgLyogMCAqLworCisjaWZkZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgdm9pZAorZmxhc2hfc3luY19yZWFsX3Byb3RlY3QoZmxhc2hfaW5mb190ICogaW5mbykKK3sKKwlGUFdWICphZGRyID0gKEZQV1YgKikgKGluZm8tPnN0YXJ0WzBdKTsKKwlGUFdWICpzZWN0OworCWludCBpOworCisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CisJY2FzZSBGTEFTSF8yOEY4MDBDM0I6CisJY2FzZSBGTEFTSF8yOEY4MDBDM1Q6CisJY2FzZSBGTEFTSF8yOEYxNjBDM0I6CisJY2FzZSBGTEFTSF8yOEYxNjBDM1Q6CisJY2FzZSBGTEFTSF8yOEYzMjBDM0I6CisJY2FzZSBGTEFTSF8yOEYzMjBDM1Q6CisJY2FzZSBGTEFTSF8yOEY2NDBDM0I6CisJY2FzZSBGTEFTSF8yOEY2NDBDM1Q6CisJCS8qIGNoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLworCQkqYWRkciA9IChGUFcpIDB4MDA5MDAwOTA7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQkJLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcywgKEE3IC4uIEEwKSA9IDB4MDIuCisJCQkgKiBEMCA9IDEgZm9yIGVhY2ggZGV2aWNlIGlmIHByb3RlY3RlZC4KKwkJCSAqIElmIGF0IGxlYXN0IG9uZSBkZXZpY2UgaXMgcHJvdGVjdGVkIHRoZSBzZWN0b3IgaXMgbWFya2VkCisJCQkgKiBwcm90ZWN0ZWQsIGJ1dCBtaXhlZCBwcm90ZWN0ZWQgYW5kICB1bnByb3RlY3RlZCBkZXZpY2VzCisJCQkgKiB3aXRoaW4gYSBzZWN0b3Igc2hvdWxkIG5ldmVyIGhhcHBlbi4KKwkJCSAqLworCQkJc2VjdCA9IChGUFdWICopIChpbmZvLT5zdGFydFtpXSk7CisJCQlpbmZvLT5wcm90ZWN0W2ldID0KKwkJCSAgICAoc2VjdFsyXSAmIChGUFcpICgweDAwMDEwMDAxKSkgPyAxIDogMDsKKwkJfQorCisJCS8qIFB1dCBGTEFTSCBiYWNrIGluIHJlYWQgbW9kZSAqLworCQlmbGFzaF9yZXNldChpbmZvKTsKKwkJYnJlYWs7CisKKwljYXNlIEZMQVNIX0FNNjQwVToKKwlkZWZhdWx0OgorCQkvKiBubyBoYXJkd2FyZSBwcm90ZWN0IHRoYXQgd2Ugc3VwcG9ydCAqLworCQlicmVhazsKKwl9Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK2ludAorZmxhc2hfZXJhc2UoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCit7CisJRlBXViAqYWRkcjsKKwlpbnQgZmxhZywgcHJvdCwgc2VjdDsKKwlpbnQgaW50ZWwgPSAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMOworCXVsb25nIHN0YXJ0LCBub3csIGxhc3Q7CisJaW50IHJjb2RlID0gMDsKKworCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgeworCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQkJcHJpbnRmKCItIG1pc3NpbmdcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCQl9CisJCXJldHVybiAxOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgeworCWNhc2UgRkxBU0hfSU5URUw4MDBCOgorCWNhc2UgRkxBU0hfSU5URUwxNjBCOgorCWNhc2UgRkxBU0hfSU5URUwzMjBCOgorCWNhc2UgRkxBU0hfSU5URUw2NDBCOgorCWNhc2UgRkxBU0hfMjhGODAwQzNCOgorCWNhc2UgRkxBU0hfMjhGMTYwQzNCOgorCWNhc2UgRkxBU0hfMjhGMzIwQzNCOgorCWNhc2UgRkxBU0hfMjhGNjQwQzNCOgorCWNhc2UgRkxBU0hfQU02NDBVOgorCQlicmVhazsKKwljYXNlIEZMQVNIX1VOS05PV046CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgJTA4bHggLSBhYm9ydGVkXG4iLAorCQkgICAgICAgaW5mby0+Zmxhc2hfaWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcm90ID0gMDsKKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7CisJCQlwcm90Kys7CisJCX0KKwl9CisKKwlpZiAocHJvdCkgeworCQlwcmludGYoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKKwkJICAgICAgIHByb3QpOworCX0gZWxzZSB7CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwlzdGFydCA9IGdldF90aW1lcigwKTsKKwlsYXN0ID0gc3RhcnQ7CisKKwkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3QgJiYgcmNvZGUgPT0gMDsgc2VjdCsrKSB7CisKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gIT0gMCkJLyogcHJvdGVjdGVkLCBza2lwIGl0ICovCisJCQljb250aW51ZTsKKworCQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwkJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJCWFkZHIgPSAoRlBXViAqKSAoaW5mby0+c3RhcnRbc2VjdF0pOworCQlpZiAoaW50ZWwpIHsKKwkJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkqYWRkciA9IChGUFcpIDB4MDAyMDAwMjA7CS8qIGVyYXNlIHNldHVwICovCisJCQkqYWRkciA9IChGUFcpIDB4MDBEMDAwRDA7CS8qIGVyYXNlIGNvbmZpcm0gKi8KKwkJfSBlbHNlIHsKKwkJCS8qIG11c3QgYmUgQU1EIHN0eWxlIGlmIG5vdCBJbnRlbCAqLworCQkJRlBXViAqYmFzZTsJLyogZmlyc3QgYWRkcmVzcyBpbiBiYW5rICovCisKKwkJCWJhc2UgPSAoRlBXViAqKSAoaW5mby0+c3RhcnRbMF0pOworCQkJYmFzZVsweDA1NTVdID0gKEZQVykgMHgwMEFBMDBBQTsJLyogdW5sb2NrICovCisJCQliYXNlWzB4MDJBQV0gPSAoRlBXKSAweDAwNTUwMDU1OwkvKiB1bmxvY2sgKi8KKwkJCWJhc2VbMHgwNTU1XSA9IChGUFcpIDB4MDA4MDAwODA7CS8qIGVyYXNlIG1vZGUgKi8KKwkJCWJhc2VbMHgwNTU1XSA9IChGUFcpIDB4MDBBQTAwQUE7CS8qIHVubG9jayAqLworCQkJYmFzZVsweDAyQUFdID0gKEZQVykgMHgwMDU1MDA1NTsJLyogdW5sb2NrICovCisJCQkqYWRkciA9IChGUFcpIDB4MDAzMDAwMzA7CS8qIGVyYXNlIHNlY3RvciAqLworCQl9CisKKwkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisJCWlmIChmbGFnKQorCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCQkvKiB3YWl0IGF0IGxlYXN0IDUwdXMgZm9yIEFNRCwgODB1cyBmb3IgSW50ZWwuCisJCSAqIExldCdzIHdhaXQgMSBtcy4KKwkJICovCisJCXVkZWxheSgxMDAwKTsKKworCQl3aGlsZSAoKCphZGRyICYgKEZQVykgMHgwMDgwMDA4MCkgIT0gKEZQVykgMHgwMDgwMDA4MCkgeworCQkJaWYgKChub3cgPSBnZXRfdGltZXIoMCkpIC0gc3RhcnQgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJCXByaW50ZigiVGltZW91dFxuIik7CisKKwkJCQlpZiAoaW50ZWwpIHsKKwkJCQkJLyogc3VzcGVuZCBlcmFzZSAgICAgICAgKi8KKwkJCQkJKmFkZHIgPSAoRlBXKSAweDAwQjAwMEIwOworCQkJCX0KKworCQkJCWZsYXNoX3Jlc2V0KGluZm8pOwkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwkJCQlyY29kZSA9IDE7CS8qIGZhaWxlZCAqLworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCQkJaWYgKChub3cgLSBsYXN0KSA+IDEwMDApIHsJLyogZXZlcnkgc2Vjb25kICovCisJCQkJcHV0YygnLicpOworCQkJCWxhc3QgPSBub3c7CisJCQl9CisJCX0KKworCQlmbGFzaF9yZXNldChpbmZvKTsJLyogcmVzZXQgdG8gcmVhZCBtb2RlICAgKi8KKwl9CisKKwlwcmludGYoIiBkb25lXG4iKTsKKwlyZXR1cm4gcmNvZGU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gd3JpdGUgdGltZW91dAorICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKKyAqLworaW50CitiYWRfd3JpdGVfYnVmZihmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQoreworCUZQVyBkYXRhID0gMDsJCS8qIDE2IG9yIDMyIGJpdCB3b3JkLCBtYXRjaGVzIGZsYXNoIGJ1cyB3aWR0aCBvbiBNUEM4WFggKi8KKwlpbnQgYnl0ZXM7CQkvKiBudW1iZXIgb2YgYnl0ZXMgdG8gcHJvZ3JhbSBpbiBjdXJyZW50IHdvcmQgICAgICAgICAqLworCWludCBsZWZ0OwkJLyogbnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gcHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgaSwgcmVzOworCisJZm9yIChsZWZ0ID0gY250LCByZXMgPSAwOworCSAgICAgbGVmdCA+IDAgJiYgcmVzID09IDA7CisJICAgICBhZGRyICs9IHNpemVvZiAoZGF0YSksIGxlZnQgLT0gc2l6ZW9mIChkYXRhKSAtIGJ5dGVzKSB7CisKKwkJYnl0ZXMgPSBhZGRyICYgKHNpemVvZiAoZGF0YSkgLSAxKTsKKwkJYWRkciAmPSB+KHNpemVvZiAoZGF0YSkgLSAxKTsKKworCQkvKiBjb21iaW5lIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGF0YSBzbyBjYW4gcHJvZ3JhbQorCQkgKiBhbiBlbnRpcmUgd29yZCBvZiAxNiBvciAzMiBiaXRzCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChkYXRhKTsgaSsrKSB7CisJCQlkYXRhIDw8PSA4OworCQkJaWYgKGkgPCBieXRlcyB8fCBpIC0gYnl0ZXMgPj0gbGVmdCkKKwkJCQlkYXRhICs9ICooKHVjaGFyICopIGFkZHIgKyBpKTsKKwkJCWVsc2UKKwkJCQlkYXRhICs9ICpzcmMrKzsKKwkJfQorCisJCS8qIHdyaXRlIG9uZSB3b3JkIHRvIHRoZSBmbGFzaCAqLworCQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKKwkJY2FzZSBGTEFTSF9NQU5fQU1EOgorCQkJcmVzID0gd3JpdGVfd29yZF9hbWQoaW5mbywgKEZQV1YgKikgYWRkciwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9NQU5fSU5URUw6CisJCQlyZXMgPSB3cml0ZV93b3JkX2ludGVsKGluZm8sIChGUFdWICopIGFkZHIsIGRhdGEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiB1bmtub3duIGZsYXNoIHR5cGUsIGVycm9yISAqLworCQkJcHJpbnRmKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJCQlyZXMgPSAxOwkvKiBub3QgcmVhbGx5IGEgdGltZW91dCwgYnV0IGdpdmVzIGVycm9yICovCisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAocmVzKTsKK30KKworLyoqCisgKiB3cml0ZV9idWY6IC0gQ29weSBtZW1vcnkgdG8gZmxhc2guCisgKgorICogQHBhcmFtIGluZm86CisgKiBAcGFyYW0gc3JjOglzb3VyY2Ugb2YgY29weSB0cmFuc2FjdGlvbgorICogQHBhcmFtIGFkZHI6CXdoZXJlIHRvIGNvcHkgdG8KKyAqIEBwYXJhbSBjbnQ6IAludW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICoKKyAqIEByZXR1cm4JZXJyb3IgY29kZQorICovCisKK2ludAord3JpdGVfYnVmZihmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQoreworCXVsb25nIGNwLCB3cDsKKwlGUFcgZGF0YTsKKwlpbnQgbDsKKwlpbnQgaSwgcmM7CisKKwl3cCA9IChhZGRyICYgfjEpOwkvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KKworCS8qIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMgKi8KKwlpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKKwkJZGF0YSA9IDA7CisJCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCBsOyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopIGNwIDw8IDgpOworCQl9CisJCWZvciAoOyBpIDwgMiAmJiBjbnQgPiAwOyArK2kpIHsKKwkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqc3JjKysgPDwgOCk7CisJCQktLWNudDsKKwkJCSsrY3A7CisJCX0KKwkJZm9yICg7IGNudCA9PSAwICYmIGkgPCAyOyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopIGNwIDw8IDgpOworCQl9CisKKwkJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgKEZQV1YgKil3cCwgZGF0YSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICs9IDI7CisJfQorCisJLyogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0ICovCisJd2hpbGUgKGNudCA+PSAyKSB7CisJCS8qIGRhdGEgPSAqKCh2dXNob3J0KilzcmMpOyAqLworCQlkYXRhID0gKigoRlBXICopIHNyYyk7CisJCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIChGUFdWICopd3AsIGRhdGEpKSAhPSAwKSB7CisJCQlyZXR1cm4gKHJjKTsKKwkJfQorCQlzcmMgKz0gc2l6ZW9mIChGUFcpOworCQl3cCArPSBzaXplb2YgKEZQVyk7CisJCWNudCAtPSBzaXplb2YgKEZQVyk7CisJfQorCisJaWYgKGNudCA9PSAwKQorCQlyZXR1cm4gRVJSX09LOworCisJLyoKKwkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKKwkgKi8KKwlkYXRhID0gMDsKKwlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgMiAmJiBjbnQgPiAwOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCpzcmMrKyA8PCA4KTsKKwkJLS1jbnQ7CisJfQorCWZvciAoOyBpIDwgMjsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopIGNwIDw8IDgpOworCX0KKworCXJldHVybiB3cml0ZV93b3JkKGluZm8sIChGUFdWICopd3AsIGRhdGEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2ggZm9yIEFNRCBGTEFTSAorICogQSB3b3JkIGlzIDE2IG9yIDMyIGJpdHMsIHdoaWNoZXZlciB0aGUgYnVzIHdpZHRoIG9mIHRoZSBmbGFzaCBiYW5rCisgKiAobm90IGFuIGluZGl2aWR1YWwgY2hpcCkgaXMuCisgKgorICogcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK3N0YXRpYyBpbnQKK3dyaXRlX3dvcmRfYW1kKGZsYXNoX2luZm9fdCAqIGluZm8sIEZQV1YgKiBkZXN0LCBGUFcgZGF0YSkKK3sKKwl1bG9uZyBzdGFydDsKKwlpbnQgZmxhZzsKKwlpbnQgcmVzID0gMDsJCS8qIHJlc3VsdCwgYXNzdW1lIHN1Y2Nlc3MgICAgICAgKi8KKwlGUFdWICpiYXNlOwkJLyogZmlyc3QgYWRkcmVzcyBpbiBmbGFzaCBiYW5rICAqLworCisJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCisJaWYgKCgqZGVzdCAmIGRhdGEpICE9IGRhdGEpIHsKKwkJcmV0dXJuICgyKTsKKwl9CisKKwliYXNlID0gKEZQV1YgKikgKGluZm8tPnN0YXJ0WzBdKTsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwliYXNlWzB4MDU1NV0gPSAoRlBXKSAweDAwQUEwMEFBOwkvKiB1bmxvY2sgKi8KKwliYXNlWzB4MDJBQV0gPSAoRlBXKSAweDAwNTUwMDU1OwkvKiB1bmxvY2sgKi8KKwliYXNlWzB4MDU1NV0gPSAoRlBXKSAweDAwQTAwMEEwOwkvKiBzZWxlY3RzIHByb2dyYW0gbW9kZSAqLworCisJKmRlc3QgPSBkYXRhOwkJLyogc3RhcnQgcHJvZ3JhbW1pbmcgdGhlIGRhdGEgICAqLworCisJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGZsYWcpCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwlzdGFydCA9IGdldF90aW1lcigwKTsKKworCS8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KKwl3aGlsZSAocmVzID09IDAKKwkgICAgICAgJiYgKCpkZXN0ICYgKEZQVykgMHgwMDgwMDA4MCkgIT0gKGRhdGEgJiAoRlBXKSAweDAwODAwMDgwKSkgeworCQlpZiAoZ2V0X3RpbWVyKDApIC0gc3RhcnQgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQkJKmRlc3QgPSAoRlBXKSAweDAwRjAwMEYwOwkvKiByZXNldCBiYW5rICovCisJCQlwcmludGYoIlNIQSB0aW1lb3V0XG4iKTsKKwkJCXJlcyA9IDE7CisJCX0KKwl9CisKKwlyZXR1cm4gKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdyaXRlIGEgd29yZCB0byBGbGFzaCBmb3IgSW50ZWwgRkxBU0gKKyAqIEEgd29yZCBpcyAxNiBvciAzMiBiaXRzLCB3aGljaGV2ZXIgdGhlIGJ1cyB3aWR0aCBvZiB0aGUgZmxhc2ggYmFuaworICogKG5vdCBhbiBpbmRpdmlkdWFsIGNoaXApIGlzLgorICoKKyAqIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICovCitzdGF0aWMgaW50Cit3cml0ZV93b3JkX2ludGVsKGZsYXNoX2luZm9fdCAqIGluZm8sIEZQV1YgKiBkZXN0LCBGUFcgZGF0YSkKK3sKKwl1bG9uZyBzdGFydDsKKwlpbnQgZmxhZzsKKwlpbnQgcmVzID0gMDsJCS8qIHJlc3VsdCwgYXNzdW1lIHN1Y2Nlc3MgICAgICAgKi8KKworCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLworCWlmICgoKmRlc3QgJiBkYXRhKSAhPSBkYXRhKSB7CisJCXJldHVybiAoMik7CisJfQorCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJKmRlc3QgPSAoRlBXKSAweDAwNTAwMDUwOwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICovCisJKmRlc3QgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiBtYWtlIHN1cmUgaW4gcmVhZCBtb2RlICAgICAgICovCisJKmRlc3QgPSAoRlBXKSAweDAwNDAwMDQwOwkvKiBwcm9ncmFtIHNldHVwICAgICAgICAgICAgICAgICovCisKKwkqZGVzdCA9IGRhdGE7CQkvKiBzdGFydCBwcm9ncmFtbWluZyB0aGUgZGF0YSAgICovCisKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoZmxhZykKKwkJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOworCisJd2hpbGUgKHJlcyA9PSAwICYmICgqZGVzdCAmIChGUFcpIDB4MDA4MDAwODApICE9IChGUFcpIDB4MDA4MDAwODApIHsKKwkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQkJKmRlc3QgPSAoRlBXKSAweDAwQjAwMEIwOwkvKiBTdXNwZW5kIHByb2dyYW0gICAgICAqLworCQkJcmVzID0gMTsKKwkJfQorCX0KKworCWlmIChyZXMgPT0gMCAmJiAoKmRlc3QgJiAoRlBXKSAweDAwMTAwMDEwKSkKKwkJcmVzID0gMTsJLyogd3JpdGUgZmFpbGVkLCB0aW1lIG91dCBlcnJvciBpcyBjbG9zZSBlbm91Z2ggKi8KKworCSpkZXN0ID0gKEZQVykgMHgwMDUwMDA1MDsJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAqLworCSpkZXN0ID0gKEZQVykgMHgwMEZGMDBGRjsJLyogbWFrZSBzdXJlIGluIHJlYWQgbW9kZSAgICAgICAqLworCisJcmV0dXJuIChyZXMpOworfQorCisjaWZkZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CitmbGFzaF9yZWFsX3Byb3RlY3QoZmxhc2hfaW5mb190ICogaW5mbywgbG9uZyBzZWN0b3IsIGludCBwcm90KQoreworCWludCByY29kZSA9IDA7CQkvKiBhc3N1bWUgc3VjY2VzcyAqLworCUZQV1YgKmFkZHI7CQkvKiBhZGRyZXNzIG9mIHNlY3RvciAqLworCUZQVyB2YWx1ZTsKKworCWFkZHIgPSAoRlBXViAqKSAoaW5mby0+c3RhcnRbc2VjdG9yXSk7CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKKwljYXNlIEZMQVNIXzI4RjgwMEMzQjoKKwljYXNlIEZMQVNIXzI4RjgwMEMzVDoKKwljYXNlIEZMQVNIXzI4RjE2MEMzQjoKKwljYXNlIEZMQVNIXzI4RjE2MEMzVDoKKwljYXNlIEZMQVNIXzI4RjMyMEMzQjoKKwljYXNlIEZMQVNIXzI4RjMyMEMzVDoKKwljYXNlIEZMQVNIXzI4RjY0MEMzQjoKKwljYXNlIEZMQVNIXzI4RjY0MEMzVDoKKwkJZmxhc2hfcmVzZXQoaW5mbyk7CS8qIG1ha2Ugc3VyZSBpbiByZWFkIG1vZGUgKi8KKwkJKmFkZHIgPSAoRlBXKSAweDAwNjAwMDYwTDsJLyogbG9jayBjb21tYW5kIHNldHVwICovCisJCWlmIChwcm90KQorCQkJKmFkZHIgPSAoRlBXKSAweDAwMDEwMDAxTDsJLyogbG9jayBzZWN0b3IgKi8KKwkJZWxzZQorCQkJKmFkZHIgPSAoRlBXKSAweDAwRDAwMEQwTDsJLyogdW5sb2NrIHNlY3RvciAqLworCQlmbGFzaF9yZXNldChpbmZvKTsJLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCisKKwkJLyogbm93IHNlZSBpZiBpdCByZWFsbHkgaXMgbG9ja2VkL3VubG9ja2VkIGFzIHJlcXVlc3RlZCAqLworCQkqYWRkciA9IChGUFcpIDB4MDA5MDAwOTA7CisJCS8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyLgorCQkgKiBEMCA9IDEgZm9yIGVhY2ggZGV2aWNlIGlmIHByb3RlY3RlZC4KKwkJICogSWYgYXQgbGVhc3Qgb25lIGRldmljZSBpcyBwcm90ZWN0ZWQgdGhlIHNlY3RvciBpcyBtYXJrZWQKKwkJICogcHJvdGVjdGVkLCBidXQgcmV0dXJuIGZhaWx1cmUuIE1peGVkIHByb3RlY3RlZCBhbmQKKwkJICogdW5wcm90ZWN0ZWQgZGV2aWNlcyB3aXRoaW4gYSBzZWN0b3Igc2hvdWxkIG5ldmVyIGhhcHBlbi4KKwkJICovCisJCXZhbHVlID0gYWRkclsyXSAmIChGUFcpIDB4MDAwMTAwMDE7CisJCWlmICh2YWx1ZSA9PSAwKQorCQkJaW5mby0+cHJvdGVjdFtzZWN0b3JdID0gMDsKKwkJZWxzZSBpZiAodmFsdWUgPT0gKEZQVykgMHgwMDAxMDAwMSkKKwkJCWluZm8tPnByb3RlY3Rbc2VjdG9yXSA9IDE7CisJCWVsc2UgeworCQkJLyogZXJyb3IsIG1peGVkIHByb3RlY3RlZCBhbmQgdW5wcm90ZWN0ZWQgKi8KKwkJCXJjb2RlID0gMTsKKwkJCWluZm8tPnByb3RlY3Rbc2VjdG9yXSA9IDE7CisJCX0KKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdG9yXSAhPSBwcm90KQorCQkJcmNvZGUgPSAxOwkvKiBmYWlsZWQgdG8gcHJvdGVjdC91bnByb3RlY3QgYXMgcmVxdWVzdGVkICovCisKKwkJLyogcmVsb2FkIGFsbCBwcm90ZWN0aW9uIGJpdHMgZnJvbSBoYXJkd2FyZSBmb3Igbm93ICovCisJCWZsYXNoX3N5bmNfcmVhbF9wcm90ZWN0KGluZm8pOworCQlicmVhazsKKworCWNhc2UgRkxBU0hfQU02NDBVOgorCWRlZmF1bHQ6CisJCS8qIG5vIGhhcmR3YXJlIHByb3RlY3QgdGhhdCB3ZSBzdXBwb3J0ICovCisJCWluZm8tPnByb3RlY3Rbc2VjdG9yXSA9IHByb3Q7CisJCWJyZWFrOworCX0KKworCXJldHVybiByY29kZTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbXgxZnMyL2ludGVsLmggYi9ib2FyZC9teDFmczIvaW50ZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGI1ZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXgxZnMyL2ludGVsLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBFVEMgcy5yLm8uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRVRDIHMuci5vLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFdyaXR0ZW4gYnkgTWFyY2VsIFRlbGthIDxtYXJjZWxAdGVsa2Euc2s+LCAyMDAyLgorICoKKyAqIERvY3VtZW50YXRpb246CisgKiBbMV0gSW50ZWwgQ29ycG9yYXRpb24sICIzIFZvbHQgSW50ZWwgU3RyYXRhIEZsYXNoIE1lbW9yeSAyOEYxMjhKM0EsIDI4RjY0MEozQSwKKyAqICAgICAyOEYzMjBKM0EgKHg4L3gxNikiLCBBcHJpbCAyMDAyLCBPcmRlciBOdW1iZXI6IDI5MDY2Ny0wMTEKKyAqIFsyXSBJbnRlbCBDb3Jwb3JhdGlvbiwgIjMgVm9sdCBTeW5jaHJvbm91cyBJbnRlbCBTdHJhdGEgRmxhc2ggTWVtb3J5IDI4RjY0MEszLCAyOEY2NDBLMTgsCisgKiAgICAgMjhGMTI4SzMsIDI4RjEyOEsxOCwgMjhGMjU2SzMsIDI4RjI1NksxOCAoeDE2KSIsIEp1bmUgMjAwMiwgT3JkZXIgTnVtYmVyOiAyOTA3MzctMDA1CisgKgorICogVGhpcyBmaWxlIGlzIHRha2VuIGZyb20gT3BlbldpbkNFIHByb2plY3QgaG9zdGVkIGJ5IFNvdXJjZUZvcmdlLm5ldAorICoKKyAqLworCisjaWZuZGVmCUZMQVNIX0lOVEVMX0gKKyNkZWZpbmUJRkxBU0hfSU5URUxfSAorCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKy8qIEludGVsIENGSSBjb21tYW5kcyAtIHNlZSBUYWJsZSA0LiBpbiBbMV0gYW5kIFRhYmxlIDMuIGluIFsyXSAqLworCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfUkVBRF9BUlJBWQkJMHhGRgkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX0NNRF9SRUFEX0lERU5USUZJRVIJCTB4OTAJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfUkVBRF9RVUVSWQkJMHg5OAkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX0NNRF9SRUFEX1NUQVRVU19SRUdJU1RFUgkweDcwCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX0NMRUFSX1NUQVRVU19SRUdJU1RFUgkweDUwCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX1BST0dSQU0xCQkJMHg0MAkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX0NNRF9QUk9HUkFNMgkJCTB4MTAJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfV1JJVEVfVE9fQlVGRkVSCQkweEU4CS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX0NPTkZJUk0JCQkweEQwCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX0JMT0NLX0VSQVNFCQkweDIwCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX1NVU1BFTkQJCQkweEIwCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX1JFU1VNRQkJCTB4RDAJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfTE9DS19TRVRVUAkJMHg2MAkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX0NNRF9MT0NLX0JMT0NLCQkweDAxCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX1VOTE9DS19CTE9DSwkJMHhEMAkvKiAyOEZ4eHhKM0EgLSB1bmxvY2tzIGFsbCBibG9ja3MsIDI4RkZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfTE9DS19ET1dOX0JMT0NLCQkweDJGCS8qIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKworLyogSW50ZWwgQ0ZJIFN0YXR1cyBSZWdpc3RlciBiaXRzIC0gc2VlIFRhYmxlIDYuIGluIFsxXSBhbmQgVGFibGUgNy4gaW4gWzJdICovCisKKyNkZWZpbmUJQ0ZJX0lOVEVMX1NSX1JFQURZCQkJMSA8PCA3CS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfU1JfRVJBU0VfU1VTUEVORAkJMSA8PCA2CS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfU1JfRVJBU0VfRVJST1IJCTEgPDwgNQkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX1NSX1BST0dSQU1fRVJST1IJCTEgPDwgNAkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX1NSX1ZQRU5fRVJST1IJCQkxIDw8IDMJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9TUl9QUk9HUkFNX1NVU1BFTkQJCTEgPDwgMgkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX1NSX0JMT0NLX0xPQ0tFRAkJMSA8PCAxCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfU1JfQkVGUAkJCTEgPDwgMAkvKiAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisKKy8qIEludGVsIGZsYXNoIGRldmljZSBJRCBjb2RlcyBmb3IgMjhGeHh4SjNBIC0gc2VlIFRhYmxlIDUuIGluIFsxXSAqLworCisjZGVmaW5lCUNGSV9DSElQX0lOVEVMXzI4RjMyMEozQQkJMHgwMDE2CisjZGVmaW5lCUNGSV9DSElQTl9JTlRFTF8yOEYzMjBKM0EJCSIyOEYzMjBKM0EiCisjZGVmaW5lCUNGSV9DSElQX0lOVEVMXzI4RjY0MEozQQkJMHgwMDE3CisjZGVmaW5lCUNGSV9DSElQTl9JTlRFTF8yOEY2NDBKM0EJCSIyOEY2NDBKM0EiCisjZGVmaW5lCUNGSV9DSElQX0lOVEVMXzI4RjEyOEozQQkJMHgwMDE4CisjZGVmaW5lCUNGSV9DSElQTl9JTlRFTF8yOEYxMjhKM0EJCSIyOEYxMjhKM0EiCisKKy8qIEludGVsIGZsYXNoIGRldmljZSBJRCBjb2RlcyBmb3IgMjhGeHh4SzMgYW5kIDI4Rnh4eEsxOCAtIHNlZSBUYWJsZSA4LiBpbiBbMl0gKi8KKworI2RlZmluZQlDRklfQ0hJUF9JTlRFTF8yOEY2NDBLMwkJCTB4ODgwMQorI2RlZmluZQlDRklfQ0hJUE5fSU5URUxfMjhGNjQwSzMJCSIyOEY2NDBLMyIKKyNkZWZpbmUJQ0ZJX0NISVBfSU5URUxfMjhGMTI4SzMJCQkweDg4MDIKKyNkZWZpbmUJQ0ZJX0NISVBOX0lOVEVMXzI4RjEyOEszCQkiMjhGMTI4SzMiCisjZGVmaW5lCUNGSV9DSElQX0lOVEVMXzI4RjI1NkszCQkJMHg4ODAzCisjZGVmaW5lCUNGSV9DSElQTl9JTlRFTF8yOEYyNTZLMwkJIjI4RjI1NkszIgorI2RlZmluZQlDRklfQ0hJUF9JTlRFTF8yOEY2NDBLMTgJCTB4ODgwNQorI2RlZmluZQlDRklfQ0hJUE5fSU5URUxfMjhGNjQwSzE4CQkiMjhGNjQwSzE4IgorI2RlZmluZQlDRklfQ0hJUF9JTlRFTF8yOEYxMjhLMTgJCTB4ODgwNgorI2RlZmluZQlDRklfQ0hJUE5fSU5URUxfMjhGMTI4SzE4CQkiMjhGMTI4SzE4IgorI2RlZmluZQlDRklfQ0hJUF9JTlRFTF8yOEYyNTZLMTgJCTB4ODgwNworI2RlZmluZQlDRklfQ0hJUE5fSU5URUxfMjhGMjU2SzE4CQkiMjhGMjU2SzE4IgorCisjZW5kaWYJCQkJLyogRkxBU0hfSU5URUxfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXgxZnMyL21lbXNldHVwLlMgYi9ib2FyZC9teDFmczIvbWVtc2V0dXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWM3NTFiCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXgxZnMyL21lbXNldHVwLlMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisKKy5nbG9ibCBtZW1zZXR1cAorbWVtc2V0dXA6CisKKwltb3YJcjEwLCBscgorCisvKiBDaGFuZ2UgUEVSQ0xLMURJViB0byAxNCBpZSAxNCsxICovCisJbGRyCQlyMCwJPVBDRFIKKwlsZHIJCXIxLAk9Q0ZHX1BDRFJfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKy8qIHNldCBNQ1UgUExMIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworCisJbGRyCQlyMCwJPU1QQ1RMMAorCWxkcgkJcjEsCT1DRkdfTVBDVEwwX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisvKiBzZXQgTUNVIFBMTCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKworCWxkcgkJcjAsCT1NUENUTDEKKwlsZHIJCXIxLAk9Q0ZHX01QQ1RMMV9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworLyogc2V0IG1wbGwgcmVzdGFydCBiaXQgKi8KKwlsZHIJCXIwLCA9Q1NDUgorCWxkcgkJcjEsIFtyMF0KKwlvcnIJCXIxLHIxLCMoMTw8MjEpCisJc3RyCQlyMSwgW3IwXQorCisJbW92CQlyMiwjMHgxMAorMToKKwltb3YJCXIzLCMweDIwMDAKKzI6CisJc3VicwlyMyxyMywjMQorCWJuZQkJMmIKKworCXN1YnMJcjIscjIsIzEKKwlibmUJCTFiCisKKy8qIHNldCBTeXN0ZW0gUExMIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworCisJbGRyCQlyMCwJPVNQQ1RMMAorCWxkcgkJcjEsCT1DRkdfU1BDVEwwX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisvKiBzZXQgU3lzdGVtIFBMTCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKworCWxkcgkJcjAsCT1TUENUTDEKKwlsZHIJCXIxLAk9Q0ZHX1NQQ1RMMV9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworLyogc2V0IHNwbGwgcmVzdGFydCBiaXQgKi8KKwlsZHIJCXIwLCA9Q1NDUgorCWxkcgkJcjEsIFtyMF0KKwlvcnIJCXIxLHIxLCMoMTw8MjIpCisJc3RyCQlyMSwgW3IwXQorCisJbW92CQlyMiwjMHgxMAorMToKKwltb3YJCXIzLCMweDIwMDAKKzI6CisJc3VicwlyMyxyMywjMQorCWJuZQkJMmIKKworCXN1YnMJcjIscjIsIzEKKwlibmUJCTFiCisKKwlsZHIJCXIwLCAgID1DU0NSCisJbGRyCQlyMSwgICA9Q0ZHX0NTQ1JfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLCAgID1HUENSCisJbGRyCQlyMSwgICA9Q0ZHX0dQQ1JfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKy8qCisgKiBJIGhhdmUgbm93IHJlYWQgdGhlIEFSTTkyMCBEYXRhU2hlZXQgYmFjay10by1CYWNrLCBhbmQgaGF2ZSBzdHVtYmxlZCB1cG9uCisgKiB0aGlzLi4uLi4KKyAqCisgKiBJdCB3b3VsZCBhcHBlYXIgdGhhdCBmcm9tIGEgQ29sZC1Cb290IHRoZSBBUk05MjBUIGVudGVycyAiRmFzdEJ1cyIgbW9kZSBDUDE1CisgKiByZWdpc3RlciAxLCB0aGlzIHN0b3BzIGl0IHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIFBMTCBhbmQgdGh1cyBydW5zIGF0IHRoZQorICogc2xvdyByYXRlLiBVbmxlc3MgeW91IHBsYWNlIHRoZSBDb3JlIGludG8gIkFzeW5jaCIgbW9kZSwgdGhlIENQVSB3aWxsIG5ldmVyCisgKiB1c2UgdGhlIHZhbHVlIHNldCBpbiB0aGUgQ01fT1NDIHJlZ2lzdGVycy4uLnJlZ2FyZGxlc3Mgb2Ygd2hhdCB5b3Ugc2V0IGl0CisgKiB0b28hICBUaHVzLCBhbHRob3VnaCBpIHRob3VnaHQgaSB3YXMgcnVubmluZyBhdCAxNDBNSHosIGknbSBhY3R1YWxseSBydW5uaW5nCisgKiBhdCA0MCEuLgorICoKKyAqIFNsYXBwaW5nIHRoaXMgaW50byBteSBib290bG9hZGVyIGRvZXMgdGhlIHRyaWNrLi4uCisgKgorICogTVJDIHAxNSwwLHIwLGMxLGMwLDAgICAgOyByZWFkIGNvcmUgY29uZmlndXJhdGlvbiByZWdpc3RlcgorICogT1JSIHIwLHIwLCMweEMwMDAwMDAwICAgOyBzZXQgYXN5bmNocm9ub3VzIGNsb2NrcyBhbmQgbm90IGZhc3RidXMgbW9kZQorICogTUNSIHAxNSwwLHIwLGMxLGMwLDAgICAgOyB3cml0ZSBtb2RpZmllZCB2YWx1ZSB0byBjb3JlIGNvbmZpZ3VyYXRpb24KKyAqIHJlZ2lzdGVyCisgKgorICovCisJTVJDIHAxNSwwLHIwLGMxLGMwLDAKKy8qCU9SUiByMCxyMCwjMHhDMDAwMDAwMCBhc3luYyBtb2RlICovCisvKglPUlIgcjAscjAsIzB4NDAwMDAwMDAgc3luYyBtb2RlICovCisJT1JSIHIwLHIwLCMweEMwMDAwMDAwCisJTUNSIHAxNSwwLHIwLGMxLGMwLDAKKworCWxkcgkJcjAsCT1HSVVTKDApCisJbGRyCQlyMSwJPUNGR19HSVVTX0FfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9Rk1DUgorCWxkcgkJcjEsCT1DRkdfRk1DUl9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1DUzBVCisJbGRyCQlyMSwJPUNGR19DUzBVX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUNTMEwKKwlsZHIJCXIxLAk9Q0ZHX0NTMExfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9Q1MxVQorCWxkcgkJcjEsCT1DRkdfQ1MxVV9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1DUzFMCisJbGRyCQlyMSwJPUNGR19DUzFMX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUNTNFUKKwlsZHIJCXIxLAk9Q0ZHX0NTNFVfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9Q1M0TAorCWxkcgkJcjEsCT1DRkdfQ1M0TF9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1DUzVVCisJbGRyCQlyMSwJPUNGR19DUzVVX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUNTNUwKKwlsZHIJCXIxLAk9Q0ZHX0NTNUxfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKy8qIFNEUkFNIFNldHVwICovCisKKwlsZHIgIHIxLD0weDAwMjIxMDAwICAgLyogYWRyIG9mIFNEQ1RSTDAJCQkqLworCWxkciAgcjAsPTB4OTIxMjAyMDAKKwlzdHIgIHIwLFtyMSwjMF0gICAgICAgLyogcHV0IGluIHByZWNoYXJnZSBjb21tYW5kIG1vZGUgICAgKi8KKwlsZHIgIHIyLD0weDA4MjAwMDAwICAgLyogYWRyIGZvciBwcmVjaGFyZ2UgY21kIAkgICAqLworCWxkciAgcjAsW3IyLCMwXSAgICAgICAvKiBwcmVjaGFyZ2UJCQkgICAqLworCWxkciAgcjAsPTB4QTIxMjAyMDAKKwlsZHIgIHIyLD0weDA4MDAwMDAwICAgLyogc3RhcnQgb2YgU0RSQU0JCSAgICovCisJc3RyICByMCxbcjEsIzBdICAgICAgIC8qIHB1dCBpbiBhdXRvLXJlZnJlc2ggbW9kZQkgICAqLworCWxkciAgcjAsW3IyLCMwXSAgICAgICAvKiBhdXRvLXJlZnJlc2ggIAkJICAgKi8KKwlsZHIgIHIwLFtyMiwjMF0gICAgICAgLyogYXV0by1yZWZyZXNoICAJCSAgICovCisJbGRyICByMCxbcjIsIzBdICAgICAgIC8qIGF1dG8tcmVmcmVzaCAgCQkgICAqLworCWxkciAgcjAsW3IyLCMwXSAgICAgICAvKiBhdXRvLXJlZnJlc2ggIAkJICAgKi8KKwlsZHIgIHIwLFtyMiwjMF0gICAgICAgLyogYXV0by1yZWZyZXNoICAJCSAgICovCisJbGRyICByMCxbcjIsIzBdICAgICAgIC8qIGF1dG8tcmVmcmVzaCAgCQkgICAqLworCWxkciAgcjAsW3IyLCMwXSAgICAgICAvKiBhdXRvLXJlZnJlc2ggIAkJICAgKi8KKwlsZHIgIHIwLD0weEIyMTIwMjAwCisJbGRyICByMiw9MHgwODExMTgwMAorCXN0ciAgcjAsW3IxLCMwXSAgICAgICAvKiBzZXR1cCBmb3IgbW9kZSByZWdpc3RlciBvZiBTRFJBTSAqLworCWxkciAgcjAsW3IyLCMwXSAgICAgICAvKiBwcm9ncmFtIG1vZGUgcmVnaXN0ZXIgCSAgICovCisJbGRyICByMCw9MHg4MjEyNDI2NworCXN0ciAgcjAsW3IxLCMwXSAgICAgICAvKiBiYWNrIHRvIG5vcm1hbCBvcGVyYXRpb24JICAgKi8KKworCW1vdglwYyxyMTAKZGlmZiAtLWdpdCBhL2JvYXJkL214MWZzMi9teDFmczIuYyBiL2JvYXJkL214MWZzMi9teDFmczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTEwODVhCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXgxZnMyL214MWZzMi5jCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKworI2RlZmluZSBTSE9XX0JPT1RfUFJPR1JFU1MoYXJnKSAgICAgICAgc2hvd19ib290X3Byb2dyZXNzKGFyZykKKworZXh0ZXJuIHZvaWQgaW14X2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKTsKKworc3RhdGljIHZvaWQgbG9nb19pbml0KHZvaWQpCit7CisJaW14X2dwaW9fbW9kZShQRDE1X1BGX0xEMCk7CisJaW14X2dwaW9fbW9kZShQRDE2X1BGX0xEMSk7CisJaW14X2dwaW9fbW9kZShQRDE3X1BGX0xEMik7CisJaW14X2dwaW9fbW9kZShQRDE4X1BGX0xEMyk7CisJaW14X2dwaW9fbW9kZShQRDE5X1BGX0xENCk7CisJaW14X2dwaW9fbW9kZShQRDIwX1BGX0xENSk7CisJaW14X2dwaW9fbW9kZShQRDIxX1BGX0xENik7CisJaW14X2dwaW9fbW9kZShQRDIyX1BGX0xENyk7CisJaW14X2dwaW9fbW9kZShQRDIzX1BGX0xEOCk7CisJaW14X2dwaW9fbW9kZShQRDI0X1BGX0xEOSk7CisJaW14X2dwaW9fbW9kZShQRDI1X1BGX0xEMTApOworCWlteF9ncGlvX21vZGUoUEQyNl9QRl9MRDExKTsKKwlpbXhfZ3Bpb19tb2RlKFBEMjdfUEZfTEQxMik7CisJaW14X2dwaW9fbW9kZShQRDI4X1BGX0xEMTMpOworCWlteF9ncGlvX21vZGUoUEQyOV9QRl9MRDE0KTsKKwlpbXhfZ3Bpb19tb2RlKFBEMzBfUEZfTEQxNSk7CisJaW14X2dwaW9fbW9kZShQRDE0X1BGX0ZMTV9WU1lOQyk7CisJaW14X2dwaW9fbW9kZShQRDEzX1BGX0xQX0hTWU5DKTsKKwlpbXhfZ3Bpb19tb2RlKFBENl9QRl9MU0NMSyk7CisJaW14X2dwaW9fbW9kZShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0dQSU8pOworCWlteF9ncGlvX21vZGUoUEQxMV9QRl9DT05UUkFTVCk7CisJaW14X2dwaW9fbW9kZShQRDEwX1BGX1NQTF9TUFIpOworCisJTENEQ19STUNSID0gMHgwMDAwMDAwMDsKKwlMQ0RDX1BDUiA9IFBDUl9DT0xPUiB8IFBDUl9QQlNJWl84IHwgUENSX0JQSVhfMTYgfCBQQ1JfUENEKDUpOworCUxDRENfSENSID0gSENSX0hfV0lEVEgoMik7CisJTENEQ19WQ1IgPSBWQ1JfVl9XSURUSCgyKTsKKworCUxDRENfUFdNUiA9IDB4MDAwMDAzODA7ICAgLyogY29udHJhc3QgdG8gMHg4MCBtaWRkbGUgKGlzIGJlc3QgISEhKSAqLworCUxDRENfU1NBICA9IDB4MTAwNDAwMDA7ICAgLyogaW1hZ2UgaW4gZmxhc2ggKi8KKworCUxDRENfU0laRSA9IFNJWkVfWE1BWCgzMjApIHwgU0laRV9ZTUFYKDI0MCk7ICAgLyogc2NyZWVuIHNpemUgKi8KKworCUxDRENfVlBXICA9IDB4MDAwMDAwQTA7ICAgLyogVmlydHVhbCBQYWdlIFdpZHRoIFJlZ2lzdGVyICovCisJTENEQ19QT1MgID0gMHgwMDAwMDAwMDsgICAvKiBwYW5uaW5nIG9mZnNldCAwICgwIHBpeGVsIG9mZnNldCkgKi8KKworCS8qIGRpc2FibGUgQ3Vyc29yICovCisJTENEQ19DUE9TICA9IDB4MDAwMDAwMDA7CisKKwkvKiBmaXhlZCBidXJzdCBsZW5ndGggKi8KKwlMQ0RDX0RNQUNSID0gRE1BQ1JfQlVSU1QgfCBETUFDUl9ITSg4KSB8IERNQUNSX1RNKDIpOworCisJLyogZW5hYmxlIExDRCAqLworCURSKDMpICAgfD0gMHgwMDAwMTAwMDsKKwlMQ0RDX1JNQ1IgPSBSTUNSX0xDRENfRU47CisKK30KKworaW50Citib2FyZF9pbml0KHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gNDcwOworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweDA4MDAwMTAwOworc2VyaWFsX2luaXQoKTsKKwlsb2dvX2luaXQoKTsKKwlyZXR1cm4gMDsKK30KKworaW50CitkcmFtX2luaXQodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmICggQ09ORklHX05SX0RSQU1fQkFOS1MgPiAwICkKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBNWDFGUzJfU0RSQU1fMTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IE1YMUZTMl9TRFJBTV8xX1NJWkU7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzaG93X2Jvb3RfcHJvZ3Jlc3M6IC0gaW5kaWNhdGUgc3RhdGUgb2YgdGhlIGJvb3QgcHJvY2VzcworICoKKyAqIEBwYXJhbSBzdGF0dXM6IFN0YXR1cyBudW1iZXIgLSBzZWUgUkVBRE1FIGZvciBkZXRhaWxzLgorICoKKyAqLworCit2b2lkCitzaG93X2Jvb3RfcHJvZ3Jlc3MoaW50IHN0YXR1cykKK3sKKwkvKiBXZSB1c2UgdGhpcyBhcyBhIGhvb2sgdG8gZGlzYWJsZSBzZXJpYWwgcG9ydHMganVzdCBiZWZvcmUgYm9vdGluZworCSAqIFRoaXMgd2F5IHdlIHN1cHByZXNzIHRoZSAidW5jb21wcmVzc2luZyBsaW51eC4uLiIgbWVzc2FnZQorCSAqLworI2lmZGVmIENPTkZJR19TSUxFTlRfQ09OU09MRQorCWlmKCBzdGF0dXMgPT0gOCkgeworCQlpZiggZ2V0ZW52KCJzaWxlbnQiKSAhPSBOVUxMICkgeworCQkJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopMHgyMDYwODAgJj0gfjE7CisJCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikweDIwNzA4MCAmPSB+MTsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL214MWZzMi91LWJvb3QubGRzIGIvYm9hcmQvbXgxZnMyL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3NjMwMwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL214MWZzMi91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCAgICAgIDoKKwl7CisJCWNwdS9hcm05MjB0L3N0YXJ0Lm8JKC50ZXh0KQorCQkqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL25ldHBob25lL3Bob25lX2NvbnNvbGUuYyBiL2JvYXJkL25ldHBob25lL3Bob25lX2NvbnNvbGUuYwppbmRleCBkZDU5OTY5Li40MDhhZGEwIDEwMDY0NAotLS0gYS9ib2FyZC9uZXRwaG9uZS9waG9uZV9jb25zb2xlLmMKKysrIGIvYm9hcmQvbmV0cGhvbmUvcGhvbmVfY29uc29sZS5jCkBAIC0zMjYsNyArMzI2LDYgQEAKIGludCBkcnZfcGhvbmVfaW5pdCh2b2lkKQogewogCWRldmljZV90IGNvbnNvbGVfZGV2OwotCWNoYXIgKnBlbnY7CiAKIAljb25zb2xlX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjODU2MC9zYmM4NTYwLmMgYi9ib2FyZC9zYmM4NTYwL3NiYzg1NjAuYwppbmRleCBhNzg0ZTM0Li4xYWVkNjFiIDEwMDY0NAotLS0gYS9ib2FyZC9zYmM4NTYwL3NiYzg1NjAuYworKysgYi9ib2FyZC9zYmM4NTYwL3NiYzg1NjAuYwpAQCAtMjU2LDExICsyNTYsMTMgQEAKIAlsb25nIGRyYW1fc2l6ZSA9IDA7CiAJZXh0ZXJuIGxvbmcgc3BkX3NkcmFtICh2b2lkKTsKIAl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisjaWYgMAogI2lmICFkZWZpbmVkKENPTkZJR19SQU1fQVNfRkxBU0gpCiAJdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjPSAmaW1tYXAtPmltX2xiYzsKIAlzeXNfaW5mb190IHN5c2luZm87CiAJdWludCB0ZW1wX2xiY2RsbCA9IDA7CiAjZW5kaWYKKyNlbmRpZiAvKiAwICovCiAjaWYgIWRlZmluZWQoQ09ORklHX1JBTV9BU19GTEFTSCkgfHwgZGVmaW5lZChDT05GSUdfRERSX0RMTCkKIAl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXI9ICZpbW1hcC0+aW1fZ3VyOwogI2VuZGlmCkBAIC0yNzksNyArMjgxLDcgQEAKIAlkcmFtX3NpemUgPSBmaXhlZF9zZHJhbSAoKTsKICNlbmRpZgogCi0jaWYgWFhYCisjaWYgMAogI2lmICFkZWZpbmVkKENPTkZJR19SQU1fQVNfRkxBU0gpIC8qIExvY2FsQnVzIFNEUkFNIGlzIG5vdCBlbXVsYXRpbmcgZmxhc2ggKi8KIAlnZXRfc3lzX2luZm8oJnN5c2luZm8pOwogCS8qIGlmIGxvY2FsYnVzIGZyZXEgaXMgbGVzcyB0aGFuIDY2TWh6LHdlIHVzZSBieXBhc3MgbW9kZSxvdGhlcndpc2UgdXNlIERMTCAqLwpkaWZmIC0tZ2l0IGEvY3B1L21jOTMyOC9NYWtlZmlsZSBiL2JvYXJkL3NjYjkzMjgvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCA3NSUKcmVuYW1lIGZyb20gY3B1L21jOTMyOC9NYWtlZmlsZQpyZW5hbWUgdG8gYm9hcmQvc2NiOTMyOC9NYWtlZmlsZQppbmRleCBmY2NjNmFiLi4yMTJlZmNjIDEwMDY0NAotLS0gYS9jcHUvbWM5MzI4L01ha2VmaWxlCisrKyBiL2JvYXJkL3NjYjkzMjgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjEgKzIzLDI1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gbGliJChCT0FSRCkuYQogCi1TVEFSVAk9IHN0YXJ0Lm8KLU9CSlMJPSBzZXJpYWwubyBpbnRlcnJ1cHRzLm8gY3B1Lm8KK09CSlMJOj0gc2NiOTMyOC5vIGZsYXNoLm8KK1NPQkpTCTo9IG1lbXNldHVwLm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICReCiAKLSQoTElCKToJJChPQkpTKQotCSQoQVIpIGNydiAkQCAkKE9CSlMpCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAogCi1zaW5jbHVkZSAuZGVwZW5kCistaW5jbHVkZSAuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NjYjkzMjgvY29uZmlnLm1rIGIvYm9hcmQvc2NiOTMyOC9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxZDc5YQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NjYjkzMjgvY29uZmlnLm1rCkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgVGhpcyBjb25maWcgZmlsZSBpcyB1c2VkIGZvciBjb21waWxhdGlvbiBvZiBzY2I5MzMyOCBzb3VyY2VzCisjCisjIFlvdSBtaWdodCBjaGFuZ2UgbG9jYXRpb24gb2YgVS1Cb290IGluIG1lbW9yeSBieSBzZXR0aW5nIHJpZ2h0IFRFWFRfQkFTRS4KKyMgVGhpcyBhbGxvd3MgZm9yIGV4YW1wbGUgaGF2aW5nIG9uZSBjb3B5IGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiByYW0gYW5kIHN0b3JlZAorIyBpbiBmbGFzaCBkZXZpY2UgYW5kIGxhdGVyIG9uIHdoaWxlIGRldmVsb3BpbmcgdXNlIG90aGVyIGxvY2F0aW9uIHRvIHRlc3QKKyMgdGhlIGNvZGUgaW4gUkFNIGRldmljZSBvbmx5LgorIworCitURVhUX0JBU0UgPSAweDA4ZjAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9zY2I5MzI4L2ZsYXNoLmMgYi9ib2FyZC9zY2I5MzI4L2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1NmY4YwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NjYjkzMjgvZmxhc2guYwpAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBFVEMgcy5yLm8uCisgKgorICogVGhpcyBjb2RlIHdhcyBpbnNwaXJlZCBieSBNYXJpdXMgR3JvZWdlciBhbmQgS3lsZSBIYXJyaXMgY29kZQorICogYXZhaWxhYmxlIGluIG90aGVyIGJvYXJkIHBvcnRzIGZvciBVLUJvb3QKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBXcml0dGVuIGJ5IFBldGVyIEZpZ3VsaSA8cGVwb3NoQGV0Yy5zaz4sIDIwMDMuCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlICJpbnRlbC5oIgorCisKKy8qCisgKiBUaGlzIGNvZGUgc2hvdWxkIGhhbmRsZSBDRkkgRkxBU0ggbWVtb3J5IGRldmljZS4gVGhpcyBjb2RlIGlzIHZlcnkKKyAqIG1pbmltYWxpc3RpYyBhcHByb2FjaCB3aXRob3V0IG1hbnkgZXNzZW50aWFsIGVycm9yIGhhbmRsaW5nIGNvZGUgYXMgd2VsbC4KKyAqIEJlY2F1c2UgVS1Cb290IGFjdHVhbGx5IGlzIG1pc3Npbmcgc21hcnQgaGFuZGxpbmcgb2YgRkxBU0ggZGV2aWNlLAorICogd2UganVzdCBzZXQgZmxhc2hfaWQgdG8gYW55dGhpbmcgZWxzZSB0byBGTEFTSF9VTktOT1csIHNvIGNvbW1vbiBjb2RlCisgKiBjYW4gY2FsbCB1cyB3aXRob3V0IGFueSByZXN0cmljdGlvbnMuCisgKiBUT0RPOiBBZGQgQ0ZJIFF1ZXJ5LCB0byBiZSBhYmxlIHRvIGRldGVybWluZSBGTEFTSCBkZXZpY2UuCisgKiBUT0RPOiBBZGQgZXJyb3IgaGFuZGxpbmcgY29kZQorICogTk9URTogVGhpcyBjb2RlIHdhcyB0ZXN0ZWQgd2l0aCBCVVNfV0lEVEggNCBhbmQgSVRFUkxFQVZFIDIgb25seSwgYnV0CisgKiAgICAgICBob3BlZnVsbHkgbWF5IHdvcmsgd2l0aCBvdGhlciBjb25maWd1cmF0aW9ucy4KKyAqLworCisjaWYgKCBTQ0I5MzI4X0ZMQVNIX0JVU19XSURUSCA9PSAxICkKKyMgIGRlZmluZSBGTEFTSF9CVVMgdnVfY2hhcgorIyAgaWYgKCBTQ0I5MzI4X0ZMQVNIX0lOVEVSTEVBVkUgPT0gMSApCisjICAgIGRlZmluZSBGTEFTSF9DTUQoIHggKSB4CisjICBlbHNlCisjICAgIGVycm9yICJXaXRoIDhiaXQgYnVzIG9ubHkgb25lIGNoaXAgaXMgYWxsb3dlZCIKKyMgIGVuZGlmCisKKworI2VsaWYgKCBTQ0I5MzI4X0ZMQVNIX0JVU19XSURUSCA9PSAyICkKKyMgIGRlZmluZSBGTEFTSF9CVVMgdnVfc2hvcnQKKyMgIGlmICggU0NCOTMyOF9GTEFTSF9JTlRFUkxFQVZFID09IDEgKQorIyAgICBkZWZpbmUgRkxBU0hfQ01EKCB4ICkgeAorIyAgZWxpZiAoIFNDQjkzMjhfRkxBU0hfSU5URVJMRUFWRSA9PSAyICkKKyMgICAgZGVmaW5lIEZMQVNIX0NNRCggeCApICgoIHggPDwgOCApfCB4ICkKKyMgIGVsc2UKKyMgICAgZXJyb3IgIldpdGggMTZiaXQgYnVzIG9ubHkgMSBvciAyIGNoaXAocykgYXJlIGFsbG93ZWQiCisjICBlbmRpZgorCisKKyNlbGlmICggU0NCOTMyOF9GTEFTSF9CVVNfV0lEVEggPT0gNCApCisjICBkZWZpbmUgRkxBU0hfQlVTIHZ1X2xvbmcKKyMgIGlmICggU0NCOTMyOF9GTEFTSF9JTlRFUkxFQVZFID09IDEgKQorIyAgICBkZWZpbmUgRkxBU0hfQ01EKCB4ICkgeAorIyAgZWxpZiAoIFNDQjkzMjhfRkxBU0hfSU5URVJMRUFWRSA9PSAyICkKKyMgICAgZGVmaW5lIEZMQVNIX0NNRCggeCApICgoIHggPDwgMTYgKXwgeCApCisjICBlbGlmICggU0NCOTMyOF9GTEFTSF9JTlRFUkxFQVZFID09IDQgKQorIyAgICBkZWZpbmUgRkxBU0hfQ01EKCB4ICkgKCggeCA8PCAyNCApfCggeCA8PCAxNiApICggeCA8PCA4ICl8IHggKQorIyAgZWxzZQorIyAgICBlcnJvciAiV2l0aCAzMmJpdCBidXMgb25seSAxLDIgb3IgNCBjaGlwKHMpIGFyZSBhbGxvd2VkIgorIyAgZW5kaWYKKworI2Vsc2UKKyMgIGVycm9yICJGbGFzaCBidXMgd2lkdGggbWlnaHQgYmUgMSwyLDQgZm9yIDgsMTYsMzIgYml0IGNvbmZpZ3VyYXRpb24iCisjZW5kaWYKKworCitmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsKKworc3RhdGljIEZMQVNIX0JVUyBmbGFzaF9zdGF0dXNfcmVnICh2b2lkKQoreworCisJRkxBU0hfQlVTICphZGRyID0gKEZMQVNIX0JVUyAqKSAwOworCisJKmFkZHIgPSBGTEFTSF9DTUQgKENGSV9JTlRFTF9DTURfUkVBRF9TVEFUVVNfUkVHSVNURVIpOworCisJcmV0dXJuICphZGRyOworfQorCitzdGF0aWMgaW50IGZsYXNoX3JlYWR5ICh1bG9uZyB0aW1lb3V0KQoreworCWludCBvayA9IDE7CisKKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisJd2hpbGUgKChmbGFzaF9zdGF0dXNfcmVnICgpICYgRkxBU0hfQ01EIChDRklfSU5URUxfU1JfUkVBRFkpKSAhPQorCQkgICBGTEFTSF9DTUQgKENGSV9JTlRFTF9TUl9SRUFEWSkpIHsKKwkJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPiB0aW1lb3V0ICYmIHRpbWVvdXQgIT0gMCkgeworCQkJb2sgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG9rOworfQorCisjaWYgKCBDRkdfTUFYX0ZMQVNIX0JBTktTICE9IDEgKQorIyAgZXJyb3IgIlNDQjkzMjggcGxhdGZvcm0gaGFzIG9ubHkgb25lIGZsYXNoIGJhbmshIgorI2VuZGlmCisKKwordWxvbmcgZmxhc2hfaW5pdCAodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBTQ0I5MzI4X0ZMQVNIX0JBU0U7CisKKwlmbGFzaF9pbmZvWzBdLnNpemUgPSBTQ0I5MzI4X0ZMQVNIX0JBTktfU0laRTsKKwlmbGFzaF9pbmZvWzBdLnNlY3Rvcl9jb3VudCA9IENGR19NQVhfRkxBU0hfU0VDVDsKKwlmbGFzaF9pbmZvWzBdLmZsYXNoX2lkID0gSU5URUxfTUFOVUZBQ1Q7CisJbWVtc2V0IChmbGFzaF9pbmZvWzBdLnByb3RlY3QsIDAsIENGR19NQVhfRkxBU0hfU0VDVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9TRUNUOyBpKyspIHsKKwkJZmxhc2hfaW5mb1swXS5zdGFydFtpXSA9IGFkZHJlc3M7CisjaWZkZWYgU0NCOTMyOF9GTEFTSF9VTkxPQ0sKKwkJLyogU29tZSBkZXZpY2VzIGFyZSBodyBsb2NrZWQgYWZ0ZXIgc3RhcnQuICovCisJCSooKEZMQVNIX0JVUyAqKSBhZGRyZXNzKSA9IEZMQVNIX0NNRCAoQ0ZJX0lOVEVMX0NNRF9MT0NLX1NFVFVQKTsKKwkJKigoRkxBU0hfQlVTICopIGFkZHJlc3MpID0gRkxBU0hfQ01EIChDRklfSU5URUxfQ01EX1VOTE9DS19CTE9DSyk7CisJCWZsYXNoX3JlYWR5ICgwKTsKKwkJKigoRkxBU0hfQlVTICopIGFkZHJlc3MpID0gRkxBU0hfQ01EIChDRklfSU5URUxfQ01EX1JFQURfQVJSQVkpOworI2VuZGlmCisJCWFkZHJlc3MgKz0gU0NCOTMyOF9GTEFTSF9TRUNUX1NJWkU7CisJfQorCisJZmxhc2hfcHJvdGVjdCAoRkxBR19QUk9URUNUX1NFVCwKKwkJCQkgICBDRkdfRkxBU0hfQkFTRSwKKwkJCQkgICBDRkdfRkxBU0hfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkJCQkgICAmZmxhc2hfaW5mb1swXSk7CisKKwlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkJCSAgIENGR19FTlZfQUREUiwKKwkJCQkgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLCAmZmxhc2hfaW5mb1swXSk7CisKKwlyZXR1cm4gU0NCOTMyOF9GTEFTSF9CQU5LX1NJWkU7Cit9CisKK3ZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICogaW5mbykKK3sKKwlpbnQgaTsKKworCXByaW50ZiAoIiBJbnRlbCB2ZW5kb3JcbiIpOworCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCisJCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQlpZiAoIShpICUgNSkpIHsKKwkJCXByaW50ZiAoIlxuIik7CisJCX0KKworCQlwcmludGYgKCIgJTA4bFglcyIsIGluZm8tPnN0YXJ0W2ldLAorCQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7CisJfQorCXByaW50ZiAoIlxuIik7Cit9CisKKworaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3sKKwlpbnQgZmxhZywgbm9uX3Byb3RlY3RlZCA9IDAsIHNlY3RvcjsKKwlpbnQgcmMgPSBFUlJfT0s7CisKKwlGTEFTSF9CVVMgKmFkZHJlc3M7CisKKwlmb3IgKHNlY3RvciA9IHNfZmlyc3Q7IHNlY3RvciA8PSBzX2xhc3Q7IHNlY3RvcisrKSB7CisJCWlmICghaW5mby0+cHJvdGVjdFtzZWN0b3JdKSB7CisJCQlub25fcHJvdGVjdGVkKys7CisJCX0KKwl9CisKKwlpZiAoIW5vbl9wcm90ZWN0ZWQpIHsKKwkJcmV0dXJuIEVSUl9QUk9URUNURUQ7CisJfQorCisJLyoKKwkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0CisJICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCisJICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQorCSAqICh0aWNrZXIpIGV4Y2VwdGlvbiB0byBoYXBwZW4gd2hpbGUgdGhlIGZsYXNoCisJICogY2hpcCBpcyBpbiBwcm9ncmFtbWluZyBtb2RlLgorCSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisKKworCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKHNlY3RvciA9IHNfZmlyc3Q7IHNlY3RvciA8PSBzX2xhc3QgJiYgIWN0cmxjICgpOyBzZWN0b3IrKykgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0b3JdKSB7CisJCQlwcmludGYgKCJQcm90ZWN0ZWQgc2VjdG9yICUyZCBza2lwcGluZy4uLlxuIiwgc2VjdG9yKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJcHJpbnRmICgiRXJhc2luZyBzZWN0b3IgJTJkIC4uLiAiLCBzZWN0b3IpOworCQl9CisKKwkJYWRkcmVzcyA9IChGTEFTSF9CVVMgKikgKGluZm8tPnN0YXJ0W3NlY3Rvcl0pOworCisJCSphZGRyZXNzID0gRkxBU0hfQ01EIChDRklfSU5URUxfQ01EX0JMT0NLX0VSQVNFKTsKKwkJKmFkZHJlc3MgPSBGTEFTSF9DTUQgKENGSV9JTlRFTF9DTURfQ09ORklSTSk7CisJCWlmIChmbGFzaF9yZWFkeSAoQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpKSB7CisJCQkqYWRkcmVzcyA9IEZMQVNIX0NNRCAoQ0ZJX0lOVEVMX0NNRF9DTEVBUl9TVEFUVVNfUkVHSVNURVIpOworCQkJcHJpbnRmICgib2suXG4iKTsKKwkJfSBlbHNlIHsKKwkJCSphZGRyZXNzID0gRkxBU0hfQ01EIChDRklfSU5URUxfQ01EX1NVU1BFTkQpOworCQkJcmMgPSBFUlJfVElNT1VUOworCQkJcHJpbnRmICgidGltZW91dCEgQWJvcnRpbmcuLi5cbiIpOworCQkJYnJlYWs7CisJCX0KKwkJKmFkZHJlc3MgPSBGTEFTSF9DTUQgKENGSV9JTlRFTF9DTURfUkVBRF9BUlJBWSk7CisJfQorCWlmIChjdHJsYyAoKSkKKwkJcHJpbnRmICgiVXNlciBJbnRlcnJ1cHQhXG4iKTsKKworCS8qIGFsbG93IGZsYXNoIHRvIHNldHRsZSAtIHdhaXQgMTAgbXMgKi8KKwl1ZGVsYXlfbWFza2VkICgxMDAwMCk7CisJaWYgKGZsYWcpIHsKKwkJZW5hYmxlX2ludGVycnVwdHMgKCk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHdyaXRlX2RhdGEgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGRlc3QsIEZMQVNIX0JVUyBkYXRhKQoreworCUZMQVNIX0JVUyAqYWRkcmVzcyA9IChGTEFTSF9CVVMgKikgZGVzdDsKKwlpbnQgcmMgPSBFUlJfT0s7CisJaW50IGZsYWc7CisKKwkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKwlpZiAoKCphZGRyZXNzICYgZGF0YSkgIT0gZGF0YSkgeworCQlyZXR1cm4gRVJSX05PVF9FUkFTRUQ7CisJfQorCisJLyoKKwkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0CisJICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCisJICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQorCSAqICh0aWNrZXIpIGV4Y2VwdGlvbiB0byBoYXBwZW4gd2hpbGUgdGhlIGZsYXNoCisJICogY2hpcCBpcyBpbiBwcm9ncmFtbWluZyBtb2RlLgorCSAqLworCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKworCSphZGRyZXNzID0gRkxBU0hfQ01EIChDRklfSU5URUxfQ01EX0NMRUFSX1NUQVRVU19SRUdJU1RFUik7CisJKmFkZHJlc3MgPSBGTEFTSF9DTUQgKENGSV9JTlRFTF9DTURfUFJPR1JBTTEpOworCSphZGRyZXNzID0gZGF0YTsKKworCWlmICghZmxhc2hfcmVhZHkgKENGR19GTEFTSF9XUklURV9UT1VUKSkgeworCQkqYWRkcmVzcyA9IEZMQVNIX0NNRCAoQ0ZJX0lOVEVMX0NNRF9TVVNQRU5EKTsKKwkJcmMgPSBFUlJfVElNT1VUOworCQlwcmludGYgKCJ0aW1lb3V0ISBBYm9ydGluZy4uLlxuIik7CisJfQorCisJKmFkZHJlc3MgPSBGTEFTSF9DTUQgKENGSV9JTlRFTF9DTURfUkVBRF9BUlJBWSk7CisJaWYgKGZsYWcpIHsKKwkJZW5hYmxlX2ludGVycnVwdHMgKCk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKK3sKKwl1bG9uZyByZWFkX2FkZHIsIHdyaXRlX2FkZHI7CisJRkxBU0hfQlVTIGRhdGE7CisJaW50IGksIHJlc3VsdCA9IEVSUl9PSzsKKworCisJcmVhZF9hZGRyID0gYWRkciAmIH4oc2l6ZW9mIChGTEFTSF9CVVMpIC0gMSk7CisJd3JpdGVfYWRkciA9IHJlYWRfYWRkcjsKKwlpZiAocmVhZF9hZGRyICE9IGFkZHIpIHsKKwkJZGF0YSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgKEZMQVNIX0JVUyk7IGkrKykgeworCQkJaWYgKHJlYWRfYWRkciA8IGFkZHIgfHwgY250ID09IDApIHsKKwkJCQlkYXRhIHw9ICooKHVjaGFyICopIHJlYWRfYWRkcikgPDwgaSAqIDg7CisJCQl9IGVsc2UgeworCQkJCWRhdGEgfD0gKCpzcmMrKykgPDwgaSAqIDg7CisJCQkJY250LS07CisJCQl9CisJCQlyZWFkX2FkZHIrKzsKKwkJfQorCQlpZiAoKHJlc3VsdCA9IHdyaXRlX2RhdGEgKGluZm8sIHdyaXRlX2FkZHIsIGRhdGEpKSAhPSBFUlJfT0spIHsKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJd3JpdGVfYWRkciArPSBzaXplb2YgKEZMQVNIX0JVUyk7CisJfQorCWZvciAoOyBjbnQgPj0gc2l6ZW9mIChGTEFTSF9CVVMpOyBjbnQgLT0gc2l6ZW9mIChGTEFTSF9CVVMpKSB7CisJCWlmICgocmVzdWx0ID0gd3JpdGVfZGF0YSAoaW5mbywgd3JpdGVfYWRkciwKKwkJCQkJCQkJICAqKChGTEFTSF9CVVMgKikgc3JjKSkpICE9IEVSUl9PSykgeworCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQl3cml0ZV9hZGRyICs9IHNpemVvZiAoRkxBU0hfQlVTKTsKKwkJc3JjICs9IHNpemVvZiAoRkxBU0hfQlVTKTsKKwl9CisJaWYgKGNudCA+IDApIHsKKwkJcmVhZF9hZGRyID0gd3JpdGVfYWRkcjsKKwkJZGF0YSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgKEZMQVNIX0JVUyk7IGkrKykgeworCQkJaWYgKGNudCA+IDApIHsKKwkJCQlkYXRhIHw9ICgqc3JjKyspIDw8IGkgKiA4OworCQkJCWNudC0tOworCQkJfSBlbHNlIHsKKwkJCQlkYXRhIHw9ICooKHVjaGFyICopIHJlYWRfYWRkcikgPDwgaSAqIDg7CisJCQl9CisJCQlyZWFkX2FkZHIrKzsKKwkJfQorCQlpZiAoKHJlc3VsdCA9IHdyaXRlX2RhdGEgKGluZm8sIHdyaXRlX2FkZHIsIGRhdGEpKSAhPSAwKSB7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJfQorCXJldHVybiBFUlJfT0s7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9zY2I5MzI4L2ludGVsLmggYi9ib2FyZC9zY2I5MzI4L2ludGVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0OThiNgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NjYjkzMjgvaW50ZWwuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEVUQyBzLnIuby4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFVEMgcy5yLm8uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogV3JpdHRlbiBieSBNYXJjZWwgVGVsa2EgPG1hcmNlbEB0ZWxrYS5zaz4sIDIwMDIuCisgKgorICogRG9jdW1lbnRhdGlvbjoKKyAqIFsxXSBJbnRlbCBDb3Jwb3JhdGlvbiwgIjMgVm9sdCBJbnRlbCBTdHJhdGEgRmxhc2ggTWVtb3J5IDI4RjEyOEozQSwgMjhGNjQwSjNBLAorICogICAgIDI4RjMyMEozQSAoeDgveDE2KSIsIEFwcmlsIDIwMDIsIE9yZGVyIE51bWJlcjogMjkwNjY3LTAxMQorICogWzJdIEludGVsIENvcnBvcmF0aW9uLCAiMyBWb2x0IFN5bmNocm9ub3VzIEludGVsIFN0cmF0YSBGbGFzaCBNZW1vcnkgMjhGNjQwSzMsIDI4RjY0MEsxOCwKKyAqICAgICAyOEYxMjhLMywgMjhGMTI4SzE4LCAyOEYyNTZLMywgMjhGMjU2SzE4ICh4MTYpIiwgSnVuZSAyMDAyLCBPcmRlciBOdW1iZXI6IDI5MDczNy0wMDUKKyAqCisgKiBUaGlzIGZpbGUgaXMgdGFrZW4gZnJvbSBPcGVuV2luQ0UgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlRm9yZ2UubmV0CisgKgorICovCisKKyNpZm5kZWYJRkxBU0hfSU5URUxfSAorI2RlZmluZQlGTEFTSF9JTlRFTF9ICisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworLyogSW50ZWwgQ0ZJIGNvbW1hbmRzIC0gc2VlIFRhYmxlIDQuIGluIFsxXSBhbmQgVGFibGUgMy4gaW4gWzJdICovCisKKyNkZWZpbmUJQ0ZJX0lOVEVMX0NNRF9SRUFEX0FSUkFZCQkweEZGCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX1JFQURfSURFTlRJRklFUgkJMHg5MAkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX0NNRF9SRUFEX1FVRVJZCQkweDk4CS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX1JFQURfU1RBVFVTX1JFR0lTVEVSCTB4NzAJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfQ0xFQVJfU1RBVFVTX1JFR0lTVEVSCTB4NTAJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfUFJPR1JBTTEJCQkweDQwCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX1BST0dSQU0yCQkJMHgxMAkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX0NNRF9XUklURV9UT19CVUZGRVIJCTB4RTgJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfQ09ORklSTQkJCTB4RDAJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfQkxPQ0tfRVJBU0UJCTB4MjAJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfU1VTUEVORAkJCTB4QjAJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfUkVTVU1FCQkJMHhEMAkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX0NNRF9MT0NLX1NFVFVQCQkweDYwCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfQ01EX0xPQ0tfQkxPQ0sJCTB4MDEJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9DTURfVU5MT0NLX0JMT0NLCQkweEQwCS8qIDI4Rnh4eEozQSAtIHVubG9ja3MgYWxsIGJsb2NrcywgMjhGRnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX0NNRF9MT0NLX0RPV05fQkxPQ0sJCTB4MkYJLyogMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworCisvKiBJbnRlbCBDRkkgU3RhdHVzIFJlZ2lzdGVyIGJpdHMgLSBzZWUgVGFibGUgNi4gaW4gWzFdIGFuZCBUYWJsZSA3LiBpbiBbMl0gKi8KKworI2RlZmluZQlDRklfSU5URUxfU1JfUkVBRFkJCQkxIDw8IDcJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9TUl9FUkFTRV9TVVNQRU5ECQkxIDw8IDYJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9TUl9FUkFTRV9FUlJPUgkJMSA8PCA1CS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfU1JfUFJPR1JBTV9FUlJPUgkJMSA8PCA0CS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfU1JfVlBFTl9FUlJPUgkJCTEgPDwgMwkvKiAyOEZ4eHhKM0EsIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKyNkZWZpbmUJQ0ZJX0lOVEVMX1NSX1BST0dSQU1fU1VTUEVORAkJMSA8PCAyCS8qIDI4Rnh4eEozQSwgMjhGeHh4SzMsIDI4Rnh4eEsxOCAqLworI2RlZmluZQlDRklfSU5URUxfU1JfQkxPQ0tfTE9DS0VECQkxIDw8IDEJLyogMjhGeHh4SjNBLCAyOEZ4eHhLMywgMjhGeHh4SzE4ICovCisjZGVmaW5lCUNGSV9JTlRFTF9TUl9CRUZQCQkJMSA8PCAwCS8qIDI4Rnh4eEszLCAyOEZ4eHhLMTggKi8KKworLyogSW50ZWwgZmxhc2ggZGV2aWNlIElEIGNvZGVzIGZvciAyOEZ4eHhKM0EgLSBzZWUgVGFibGUgNS4gaW4gWzFdICovCisKKyNkZWZpbmUJQ0ZJX0NISVBfSU5URUxfMjhGMzIwSjNBCQkweDAwMTYKKyNkZWZpbmUJQ0ZJX0NISVBOX0lOVEVMXzI4RjMyMEozQQkJIjI4RjMyMEozQSIKKyNkZWZpbmUJQ0ZJX0NISVBfSU5URUxfMjhGNjQwSjNBCQkweDAwMTcKKyNkZWZpbmUJQ0ZJX0NISVBOX0lOVEVMXzI4RjY0MEozQQkJIjI4RjY0MEozQSIKKyNkZWZpbmUJQ0ZJX0NISVBfSU5URUxfMjhGMTI4SjNBCQkweDAwMTgKKyNkZWZpbmUJQ0ZJX0NISVBOX0lOVEVMXzI4RjEyOEozQQkJIjI4RjEyOEozQSIKKworLyogSW50ZWwgZmxhc2ggZGV2aWNlIElEIGNvZGVzIGZvciAyOEZ4eHhLMyBhbmQgMjhGeHh4SzE4IC0gc2VlIFRhYmxlIDguIGluIFsyXSAqLworCisjZGVmaW5lCUNGSV9DSElQX0lOVEVMXzI4RjY0MEszCQkJMHg4ODAxCisjZGVmaW5lCUNGSV9DSElQTl9JTlRFTF8yOEY2NDBLMwkJIjI4RjY0MEszIgorI2RlZmluZQlDRklfQ0hJUF9JTlRFTF8yOEYxMjhLMwkJCTB4ODgwMgorI2RlZmluZQlDRklfQ0hJUE5fSU5URUxfMjhGMTI4SzMJCSIyOEYxMjhLMyIKKyNkZWZpbmUJQ0ZJX0NISVBfSU5URUxfMjhGMjU2SzMJCQkweDg4MDMKKyNkZWZpbmUJQ0ZJX0NISVBOX0lOVEVMXzI4RjI1NkszCQkiMjhGMjU2SzMiCisjZGVmaW5lCUNGSV9DSElQX0lOVEVMXzI4RjY0MEsxOAkJMHg4ODA1CisjZGVmaW5lCUNGSV9DSElQTl9JTlRFTF8yOEY2NDBLMTgJCSIyOEY2NDBLMTgiCisjZGVmaW5lCUNGSV9DSElQX0lOVEVMXzI4RjEyOEsxOAkJMHg4ODA2CisjZGVmaW5lCUNGSV9DSElQTl9JTlRFTF8yOEYxMjhLMTgJCSIyOEYxMjhLMTgiCisjZGVmaW5lCUNGSV9DSElQX0lOVEVMXzI4RjI1NksxOAkJMHg4ODA3CisjZGVmaW5lCUNGSV9DSElQTl9JTlRFTF8yOEYyNTZLMTgJCSIyOEYyNTZLMTgiCisKKyNlbmRpZiAvKiBGTEFTSF9JTlRFTF9IICovCmRpZmYgLS1naXQgYS9ib2FyZC9zY2I5MzI4L21lbXNldHVwLlMgYi9ib2FyZC9zY2I5MzI4L21lbXNldHVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1NjUwYQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NjYjkzMjgvbWVtc2V0dXAuUwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBTYXNjaGEgSGF1ZXIsIFN5bmVydHJvbml4eCBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKworLmdsb2JsIG1lbXNldHVwCittZW1zZXR1cDoKKworCW1vdglyMTAsIGxyCisKKy8qIENoYW5nZSBQRVJDTEsxRElWIHRvIDE0IGllIDE0KzEgKi8KKwlsZHIJCXIwLAk9UENEUgorCWxkcgkJcjEsCT1DRkdfUENEUl9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworLyogc2V0IE1DVSBQTEwgQ29udHJvbCBSZWdpc3RlciAwICovCisKKwlsZHIJCXIwLAk9TVBDVEwwCisJbGRyCQlyMSwJPUNGR19NUENUTDBfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKy8qIHNldCBtcGxsIHJlc3RhcnQgYml0ICovCisJbGRyCQlyMCwgPUNTQ1IKKwlsZHIJCXIxLCBbcjBdCisJb3JyCQlyMSxyMSwjKDE8PDIxKQorCXN0cgkJcjEsIFtyMF0KKworCW1vdgkJcjIsIzB4MTAKKzE6CisJbW92CQlyMywjMHgyMDAwCisyOgorCXN1YnMJcjMscjMsIzEKKwlibmUJCTJiCisKKwlzdWJzCXIyLHIyLCMxCisJYm5lCQkxYgorCisvKiBzZXQgU3lzdGVtIFBMTCBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKworCWxkcgkJcjAsCT1TUENUTDAKKwlsZHIJCXIxLAk9Q0ZHX1NQQ1RMMF9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworLyogc2V0IHNwbGwgcmVzdGFydCBiaXQgKi8KKwlsZHIJCXIwLCA9Q1NDUgorCWxkcgkJcjEsIFtyMF0KKwlvcnIJCXIxLHIxLCMoMTw8MjIpCisJc3RyCQlyMSwgW3IwXQorCisJbW92CQlyMiwjMHgxMAorMToKKwltb3YJCXIzLCMweDIwMDAKKzI6CisJc3VicwlyMyxyMywjMQorCWJuZQkJMmIKKworCXN1YnMJcjIscjIsIzEKKwlibmUJCTFiCisKKwlsZHIJCXIwLCAgID1DU0NSCisJbGRyCQlyMSwgICA9Q0ZHX0NTQ1JfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKy8qIEkgaGF2ZSBub3cgcmVhZCB0aGUgQVJNOTIwIERhdGFTaGVldCBiYWNrLXRvLUJhY2ssIGFuZCBoYXZlIHN0dW1ibGVkIHVwb24KKyAqdGhpcy4uLi4uCisgKgorICogSXQgd291bGQgYXBwZWFyIHRoYXQgZnJvbSBhIENvbGQtQm9vdCB0aGUgQVJNOTIwVCBlbnRlcnMgIkZhc3RCdXMiIG1vZGUgQ1AxNQorICogcmVnaXN0ZXIgMSwgdGhpcyBzdG9wcyBpdCB1c2luZyB0aGUgb3V0cHV0IG9mIHRoZSBQTEwgYW5kIHRodXMgcnVucyBhdCB0aGUKKyAqIHNsb3cgcmF0ZS4gVW5sZXNzIHlvdSBwbGFjZSB0aGUgQ29yZSBpbnRvICJBc3luY2giIG1vZGUsIHRoZSBDUFUgd2lsbCBuZXZlcgorICogdXNlIHRoZSB2YWx1ZSBzZXQgaW4gdGhlIENNX09TQyByZWdpc3RlcnMuLi5yZWdhcmRsZXNzIG9mIHdoYXQgeW91IHNldCBpdAorICogdG9vISAgVGh1cywgYWx0aG91Z2ggaSB0aG91Z2h0IGkgd2FzIHJ1bm5pbmcgYXQgMTQwTUh6LCBpJ20gYWN0dWFsbHkgcnVubmluZworICogYXQgNDAhLi4KKworICogU2xhcHBpbmcgdGhpcyBpbnRvIG15IGJvb3Rsb2FkZXIgZG9lcyB0aGUgdHJpY2suLi4KKworICogTVJDIHAxNSwwLHIwLGMxLGMwLDAgICAgOyByZWFkIGNvcmUgY29uZmlndXJhdGlvbiByZWdpc3RlcgorICogT1JSIHIwLHIwLCMweEMwMDAwMDAwICAgOyBzZXQgYXN5bmNocm9ub3VzIGNsb2NrcyBhbmQgbm90IGZhc3RidXMgbW9kZQorICogTUNSIHAxNSwwLHIwLGMxLGMwLDAgICAgOyB3cml0ZSBtb2RpZmllZCB2YWx1ZSB0byBjb3JlIGNvbmZpZ3VyYXRpb24KKyAqIHJlZ2lzdGVyCisgKi8KKwlNUkMgcDE1LDAscjAsYzEsYzAsMAorCU9SUiByMCxyMCwjMHhDMDAwMDAwMAorCU1DUiBwMTUsMCxyMCxjMSxjMCwwCisKKwlsZHIJCXIwLAk9R1BSKDApCisJbGRyCQlyMSwJPUNGR19HUFJfQV9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HSVVTKDApCisJbGRyCQlyMSwJPUNGR19HSVVTX0FfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKy8qIENTMyBiZWNvbWVzIENTMyBieSBjbGVhcmluZyByZXNldCBkZWZhdWx0IGJpdCAxIGluIEZNQ1IgKi8KKworCWxkcgkJcjAsCT1GTUNSCisJbGRyCQlyMSwJPUNGR19GTUNSX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUNTMFUKKwlsZHIJCXIxLAk9Q0ZHX0NTMFVfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9Q1MwTAorCWxkcgkJcjEsCT1DRkdfQ1MwTF9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1DUzFVCisJbGRyCQlyMSwJPUNGR19DUzFVX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUNTMUwKKwlsZHIJCXIxLAk9Q0ZHX0NTMUxfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9Q1MyVQorCWxkcgkJcjEsCT1DRkdfQ1MyVV9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1DUzJMCisJbGRyCQlyMSwJPUNGR19DUzJMX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUNTM1UKKwlsZHIJCXIxLAk9Q0ZHX0NTM1VfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9Q1MzTAorCWxkcgkJcjEsCT1DRkdfQ1MzTF9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1DUzRVCisJbGRyCQlyMSwJPUNGR19DUzRVX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUNTNEwKKwlsZHIJCXIxLAk9Q0ZHX0NTNExfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9Q1M1VQorCWxkcgkJcjEsCT1DRkdfQ1M1VV9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1DUzVMCisJbGRyCQlyMSwJPUNGR19DUzVMX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisvKiBTRFJBTSBTZXR1cCAqLworCisJbGRyCQlyMCwgPVNEQ1RMMAorCWxkcgkJcjEsID1QUkVDSEFSR0VfQ01ECisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLCA9MHgwODIwMDAwMAorCWxkcgkJcjEsID0weDAgLyogSXNzdWUgUHJlY2hhcmdlIGFsbCBDb21tYW5kICovCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLCA9U0RDVEwwCisJbGRyCQlyMSwgPUFVVE9SRUZSRVNIX0NNRAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwgPTB4MDgwMDAwMDAKKwlsZHIJCXIxLCA9MHgwIC8qIElzc3VlIEF1dG9SZWZyZXNoIENvbW1hbmQgKi8KKwlzdHIJCXIxLCAgIFtyMF0KKwlzdHIJCXIxLCAgIFtyMF0KKwlzdHIJCXIxLCAgIFtyMF0KKwlzdHIJCXIxLCAgIFtyMF0KKwlzdHIJCXIxLCAgIFtyMF0KKwlzdHIJCXIxLCAgIFtyMF0KKwlzdHIJCXIxLCAgIFtyMF0KKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsID1TRENUTDAKKwlsZHIJCXIxLCA9MHhiMTBhODMwMAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwgPTB4MDgyMjMwMDAgLyogQ0FTIExhdGVuY3kgMiAqLworCWxkcgkJcjEsID0weDAgICAvKiBJc3N1ZSBNb2RlIFJlZ2lzdGVyIENvbW1hbmQsIEJ1cnN0IExlbmd0aCA9IDggKi8KKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsID1TRENUTDAKKwlsZHIJCXIxLCA9MHg4MTBhODIwMCAvKiBTZXQgdG8gTm9ybWFsIE1vZGUgQ0FTIDIgKi8KKwlzdHIJCXIxLCAgIFtyMF0KKworCW1vdglwYyxyMTAKZGlmZiAtLWdpdCBhL2JvYXJkL3NjYjkzMjgvc2NiOTMyOC5jIGIvYm9hcmQvc2NiOTMyOC9zY2I5MzI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmZTBhZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NjYjkzMjgvc2NiOTMyOC5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU2FzY2hhIEhhdWVyLCBTeW5lcnRyb25peHggR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZmRlZiBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTCisjIGRlZmluZSBTSE9XX0JPT1RfUFJPR1JFU1MoYXJnKSAgICAgICAgc2hvd19ib290X3Byb2dyZXNzKGFyZykKKyNlbHNlCisjIGRlZmluZSBTSE9XX0JPT1RfUFJPR1JFU1MoYXJnKQorI2VuZGlmCisKK2ludCBib2FyZF9pbml0KCB2b2lkICl7CisgIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisgIGdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSA1MDg7CisgIGdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweDA4MDAwMTAwOworCisgIHJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KCB2b2lkICl7CisgIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisjaWYgKCBDT05GSUdfTlJfRFJBTV9CQU5LUyA+IDAgKQorICBnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBTQ0I5MzI4X1NEUkFNXzE7CisgIGdkLT5iZC0+YmlfZHJhbVswXS5zaXplICA9IFNDQjkzMjhfU0RSQU1fMV9TSVpFOworI2VuZGlmCisjaWYgKCBDT05GSUdfTlJfRFJBTV9CQU5LUyA+IDEgKQorICBnZC0+YmQtPmJpX2RyYW1bMV0uc3RhcnQgPSBTQ0I5MzI4X1NEUkFNXzI7CisgIGdkLT5iZC0+YmlfZHJhbVsxXS5zaXplICA9IFNDQjkzMjhfU0RSQU1fMl9TSVpFOworI2VuZGlmCisjaWYgKCBDT05GSUdfTlJfRFJBTV9CQU5LUyA+IDIgKQorICBnZC0+YmQtPmJpX2RyYW1bMl0uc3RhcnQgPSBTQ0I5MzI4X1NEUkFNXzM7CisgIGdkLT5iZC0+YmlfZHJhbVsyXS5zaXplICA9IFNDQjkzMjhfU0RSQU1fM19TSVpFOworI2VuZGlmCisjaWYgKCBDT05GSUdfTlJfRFJBTV9CQU5LUyA+IDMgKQorICBnZC0+YmQtPmJpX2RyYW1bM10uc3RhcnQgPSBTQ0I5MzI4X1NEUkFNXzQ7CisgIGdkLT5iZC0+YmlfZHJhbVszXS5zaXplICA9IFNDQjkzMjhfU0RSQU1fNF9TSVpFOworI2VuZGlmCisKKyAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2hvd19ib290X3Byb2dyZXNzOiAtIGluZGljYXRlIHN0YXRlIG9mIHRoZSBib290IHByb2Nlc3MKKyAqCisgKiBAcGFyYW0gc3RhdHVzOiBTdGF0dXMgbnVtYmVyIC0gc2VlIFJFQURNRSBmb3IgZGV0YWlscy4KKyAqCisgKiBUaGUgQ1NCMjI2IGRvZXMgb25seSBoYXZlIDMgTEVEcywgc28gd2Ugc3dpdGNoIHRoZW0gb24gYXQgdGhlIG1vc3QKKyAqIGltcG9ydGFudCBzdGF0ZXMgKDEsIDUsIDE1KS4KKyAqLworCit2b2lkIHNob3dfYm9vdF9wcm9ncmVzcyAoaW50IHN0YXR1cykKK3sKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9zY2I5MzI4L3UtYm9vdC5sZHMgYi9ib2FyZC9zY2I5MzI4L3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3NjMwMwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NjYjkzMjgvdS1ib290LmxkcwpAQCAtMCwwICsxLDU2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgICAgICA6CisJeworCQljcHUvYXJtOTIwdC9zdGFydC5vCSgudGV4dCkKKwkJKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC90b3RhbDUyMDAvdG90YWw1MjAwLmMgYi9ib2FyZC90b3RhbDUyMDAvdG90YWw1MjAwLmMKaW5kZXggNGVjN2I5Ni4uMWEzNTE4NyAxMDA2NDQKLS0tIGEvYm9hcmQvdG90YWw1MjAwL3RvdGFsNTIwMC5jCisrKyBiL2JvYXJkL3RvdGFsNTIwMC90b3RhbDUyMDAuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiB2b2lkIHZpZGVvX2dldF9pbmZvX3N0ciAoaW50IGxpbmVfbnVtYmVyLCBjaGFyICppbmZvKQogewogCWlmIChsaW5lX251bWJlciA9PSAxKSB7Ci0jaWYgQ09ORklHX01HVDUxMDAKKyNpZmRlZiBDT05GSUdfTUdUNTEwMAogCQlzdHJjcHkgKGluZm8sICIgVG90YWw1MTAwIik7CiAjZWxpZiBDT05GSUdfVE9UQUw1MjAwX1JFVj09MQogCQlzdHJjcHkgKGluZm8sICIgVG90YWw1MjAwIik7CmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUgYi9jb21tb24vTWFrZWZpbGUKaW5kZXggNGEzNjY3My4uOTQzZGE1ZSAxMDA2NDQKLS0tIGEvY29tbW9uL01ha2VmaWxlCisrKyBiL2NvbW1vbi9NYWtlZmlsZQpAQCAtNDUsNyArNDUsNyBAQAogCSAgZW52X25hbmQubyBlbnZfZGF0YWZsYXNoLm8gZW52X2ZsYXNoLm8gZW52X2VlcHJvbS5vIGVudl9udnJhbS5vIGVudl9ub3doZXJlLm8gZXhwb3J0cy5vIFwKIAkgIGZsYXNoLm8gZnBnYS5vIFwKIAkgIGh1c2gubyBrZ2RiLm8gbGlzdHMubyBseW54a2RpLm8gbWVtc2l6ZS5vIG1paXBoeWJiLm8gbWlpcGh5dXRpbC5vIFwKLQkgIHNfcmVjb3JkLm8gc29mdF9pMmMubyBzb2Z0X3NwaS5vIHNwYXJ0YW4yLm8gXAorCSAgc19yZWNvcmQubyBzZXJpYWwubyBzb2Z0X2kyYy5vIHNvZnRfc3BpLm8gc3BhcnRhbjIubyBcCiAJICB1c2IubyB1c2Jfa2JkLm8gdXNiX3N0b3JhZ2UubyBcCiAJICB2aXJ0ZXgyLm8geGlsaW54Lm8gY2lyY2J1Zi5vCiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm1wLmMgYi9jb21tb24vY21kX2JtcC5jCmluZGV4IGMxZDRjMGIuLjNhOTcxMzMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfYm1wLmMKKysrIGIvY29tbW9uL2NtZF9ibXAuYwpAQCAtMTIzLDE0ICsxMjMsMTUgQEAKICAqLwogc3RhdGljIGludCBibXBfZGlzcGxheSh1bG9uZyBhZGRyLCBpbnQgeCwgaW50IHkpCiB7Ci0jaWZkZWYgQ09ORklHX0xDRAotICAgIGV4dGVybiBpbnQgbGNkX2Rpc3BsYXlfYml0bWFwICh1bG9uZywgaW50LCBpbnQpOworI2lmIGRlZmluZWQoQ09ORklHX0xDRCkKKwlleHRlcm4gaW50IGxjZF9kaXNwbGF5X2JpdG1hcCAodWxvbmcsIGludCwgaW50KTsKIAogCXJldHVybiAobGNkX2Rpc3BsYXlfYml0bWFwIChhZGRyLCB4LCB5KSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVklERU8KKyNlbGlmIGRlZmluZWQoQ09ORklHX1ZJREVPKQogCWV4dGVybiBpbnQgdmlkZW9fZGlzcGxheV9iaXRtYXAgKHVsb25nLCBpbnQsIGludCk7CiAJcmV0dXJuICh2aWRlb19kaXNwbGF5X2JpdG1hcCAoYWRkciwgeCwgeSkpOworI2Vsc2UKKyMgZXJyb3IgYm1wX2Rpc3BsYXkoKSByZXF1aXJlcyBDT05GSUdfTENEIG9yIENPTkZJR19WSURFTwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbnZlZGl0LmMgYi9jb21tb24vY21kX252ZWRpdC5jCmluZGV4IGFhZjZkZTkuLjM1MTA1NjEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfbnZlZGl0LmMKKysrIGIvY29tbW9uL2NtZF9udmVkaXQuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxlbnZpcm9ubWVudC5oPgogI2luY2x1ZGUgPHdhdGNoZG9nLmg+CisjaW5jbHVkZSA8c2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05FVCkKQEAgLTIxNiw2ICsyMTcsMTEgQEAKIAkJCS8qIFRyeSBhc3NpZ25pbmcgc3BlY2lmaWVkIGRldmljZSAqLwogCQkJaWYgKGNvbnNvbGVfYXNzaWduIChjb25zb2xlLCBhcmd2WzJdKSA8IDApCiAJCQkJcmV0dXJuIDE7CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX01VTFRJCisJCQlpZiAoc2VyaWFsX2Fzc2lnbiAoYXJndlsyXSkgPCAwKQorCQkJCXJldHVybiAxOworI2VuZGlmCiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvY29tbW9uL2RldmljZXMuYyBiL2NvbW1vbi9kZXZpY2VzLmMKaW5kZXggN2M4NTk1Mi4uYjM3Yzk5YSAxMDA2NDQKLS0tIGEvY29tbW9uL2RldmljZXMuYworKysgYi9jb21tb24vZGV2aWNlcy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8ZGV2aWNlcy5oPgorI2luY2x1ZGUgPHNlcmlhbC5oPgogI2lmZGVmIENPTkZJR19MT0dCVUZGRVIKICNpbmNsdWRlIDxsb2didWZmLmg+CiAjZW5kaWYKQEAgLTE5NCw2ICsxOTUsOSBAQAogCWRydl9sb2didWZmX2luaXQgKCk7CiAjZW5kaWYKIAlkcnZfc3lzdGVtX2luaXQgKCk7CisjaWZkZWYgQ09ORklHX1NFUklBTF9NVUxUSQorCXNlcmlhbF9kZXZpY2VzX2luaXQgKCk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfVVNCX1RUWQogCWRydl91c2J0dHlfaW5pdCAoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tbW9uL3NlcmlhbC5jIGIvY29tbW9uL3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OWJiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vc2VyaWFsLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHNlcmlhbC5oPgorI2luY2x1ZGUgPGRldmljZXMuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKKworc3RhdGljIHN0cnVjdCBzZXJpYWxfZGV2aWNlICpzZXJpYWxfZGV2aWNlcyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHNlcmlhbF9kZXZpY2UgKnNlcmlhbF9jdXJyZW50ID0gTlVMTDsKKworI2lmbmRlZiBDT05GSUdfTFdNT04KK3N0cnVjdCBzZXJpYWxfZGV2aWNlICogZGVmYXVsdF9zZXJpYWxfY29uc29sZSAodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TTUMxKSB8fCBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TTUMyKQorCXJldHVybiAmc2VyaWFsX3NtY19kZXZpY2U7CisjZWxpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MxKSB8fCBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MyKSBcCisgICB8fCBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MzKSB8fCBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0M0KQorCXJldHVybiAmc2VyaWFsX3NjY19kZXZpY2U7CisjZWxzZQorI2Vycm9yIE5vIGRlZmF1bHQgY29uc29sZQorI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIGludCBzZXJpYWxfcmVnaXN0ZXIoc3RydWN0IHNlcmlhbF9kZXZpY2UqIGRldikKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCWRldi0+aW5pdCArPSBnZC0+cmVsb2Nfb2ZmOworCWRldi0+c2V0YnJnICs9IGdkLT5yZWxvY19vZmY7CisJZGV2LT5nZXRjICs9IGdkLT5yZWxvY19vZmY7CisJZGV2LT50c3RjICs9IGdkLT5yZWxvY19vZmY7CisJZGV2LT5wdXRjICs9IGdkLT5yZWxvY19vZmY7CisJZGV2LT5wdXRzICs9IGdkLT5yZWxvY19vZmY7CisKKwlkZXYtPm5leHQgPSBzZXJpYWxfZGV2aWNlczsKKwlzZXJpYWxfZGV2aWNlcyA9IGRldjsKKworCXJldHVybiAwOworfQorCit2b2lkIHNlcmlhbF9pbml0aWFsaXplKHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU01DMSkgfHwgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU01DMikKKwlzZXJpYWxfcmVnaXN0ZXIoJnNlcmlhbF9zbWNfZGV2aWNlKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NDQzEpIHx8IGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NDQzIpIFwKKyB8fCBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MzKSB8fCBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0M0KQorCXNlcmlhbF9yZWdpc3Rlcigmc2VyaWFsX3NjY19kZXZpY2UpOworI2VuZGlmCisKKwlzZXJpYWxfYXNzaWduKGRlZmF1bHRfc2VyaWFsX2NvbnNvbGUoKS0+bmFtZSk7Cit9CisKK3ZvaWQgc2VyaWFsX2RldmljZXNfaW5pdCh2b2lkKQoreworCWRldmljZV90IGRldjsKKwlzdHJ1Y3Qgc2VyaWFsX2RldmljZSAqcyA9IHNlcmlhbF9kZXZpY2VzOworCisJd2hpbGUgKHMpCisJeworCQltZW1zZXQgKCZkZXYsIDAsIHNpemVvZiAoZGV2KSk7CisKKwkJc3RyY3B5IChkZXYubmFtZSwgcy0+bmFtZSk7CisJCWRldi5mbGFncyA9IERFVl9GTEFHU19PVVRQVVQgfCBERVZfRkxBR1NfSU5QVVQ7CisKKwkJZGV2LnN0YXJ0ID0gcy0+aW5pdDsKKwkJZGV2LnB1dGMgPSBzLT5wdXRjOworCQlkZXYucHV0cyA9IHMtPnB1dHM7CisJCWRldi5nZXRjID0gcy0+Z2V0YzsKKwkJZGV2LnRzdGMgPSBzLT50c3RjOworCisJCWRldmljZV9yZWdpc3RlciAoJmRldik7CisKKwkJcyA9IHMtPm5leHQ7CisJfQorfQorCitpbnQgc2VyaWFsX2Fzc2lnbihjaGFyICogbmFtZSkKK3sKKwlzdHJ1Y3Qgc2VyaWFsX2RldmljZSAqczsKKworCWZvciAocyA9IHNlcmlhbF9kZXZpY2VzOyBzOyBzID0gcy0+bmV4dCkKKwl7CisJCWlmIChzdHJjbXAocy0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJeworCQkJc2VyaWFsX2N1cnJlbnQgPSBzOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBzZXJpYWxfcmVpbml0X2FsbCh2b2lkKQoreworCXN0cnVjdCBzZXJpYWxfZGV2aWNlICpzOworCisJZm9yIChzID0gc2VyaWFsX2RldmljZXM7IHM7IHMgPSBzLT5uZXh0KQorCXsKKwkJcy0+aW5pdCgpOworCX0KK30KKworaW50IHNlcmlhbF9pbml0KHZvaWQpCit7CisJaWYgKCFzZXJpYWxfY3VycmVudCkKKwl7CisJCXN0cnVjdCBzZXJpYWxfZGV2aWNlICpkZXYgPSBkZWZhdWx0X3NlcmlhbF9jb25zb2xlKCk7CisJCXJldHVybiBkZXYtPmluaXQoKTsKKwl9CisKKwlyZXR1cm4gc2VyaWFsX2N1cnJlbnQtPmluaXQoKTsKK30KKwordm9pZCBzZXJpYWxfc2V0YnJnKHZvaWQpCit7CisJaWYgKCFzZXJpYWxfY3VycmVudCkKKwl7CisJCXN0cnVjdCBzZXJpYWxfZGV2aWNlICpkZXYgPSBkZWZhdWx0X3NlcmlhbF9jb25zb2xlKCk7CisJCWRldi0+c2V0YnJnKCk7CisJCXJldHVybjsKKwl9CisKKwlzZXJpYWxfY3VycmVudC0+c2V0YnJnKCk7Cit9CisKK2ludCBzZXJpYWxfZ2V0Yyh2b2lkKQoreworCWlmICghc2VyaWFsX2N1cnJlbnQpCisJeworCQlzdHJ1Y3Qgc2VyaWFsX2RldmljZSAqZGV2ID0gZGVmYXVsdF9zZXJpYWxfY29uc29sZSgpOworCQlyZXR1cm4gZGV2LT5nZXRjKCk7CisJfQorCisJcmV0dXJuIHNlcmlhbF9jdXJyZW50LT5nZXRjKCk7Cit9CisKK2ludCBzZXJpYWxfdHN0Yyh2b2lkKQoreworCWlmICghc2VyaWFsX2N1cnJlbnQpCisJeworCQlzdHJ1Y3Qgc2VyaWFsX2RldmljZSAqZGV2ID0gZGVmYXVsdF9zZXJpYWxfY29uc29sZSgpOworCQlyZXR1cm4gZGV2LT50c3RjKCk7CisJfQorCisJcmV0dXJuIHNlcmlhbF9jdXJyZW50LT50c3RjKCk7Cit9CisKK3ZvaWQgc2VyaWFsX3B1dGMoY29uc3QgY2hhciBjKQoreworCWlmICghc2VyaWFsX2N1cnJlbnQpCisJeworCQlzdHJ1Y3Qgc2VyaWFsX2RldmljZSAqZGV2ID0gZGVmYXVsdF9zZXJpYWxfY29uc29sZSgpOworCQlkZXYtPnB1dGMoYyk7CisJCXJldHVybjsKKwl9CisKKwlzZXJpYWxfY3VycmVudC0+cHV0YyhjKTsKK30KKwordm9pZCBzZXJpYWxfcHV0cyhjb25zdCBjaGFyICpzKQoreworCWlmICghc2VyaWFsX2N1cnJlbnQpCisJeworCQlzdHJ1Y3Qgc2VyaWFsX2RldmljZSAqZGV2ID0gZGVmYXVsdF9zZXJpYWxfY29uc29sZSgpOworCQlkZXYtPnB1dHMocyk7CisJCXJldHVybjsKKwl9CisKKwlzZXJpYWxfY3VycmVudC0+cHV0cyhzKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfTVVMVEkgKi8KZGlmZiAtLWdpdCBhL2NwdS9hcm03MjB0L2NwdS5jIGIvY3B1L2FybTcyMHQvY3B1LmMKaW5kZXggNThlYWI0ZS4uZWYzZmJmMyAxMDA2NDQKLS0tIGEvY3B1L2FybTcyMHQvY3B1LmMKKysrIGIvY3B1L2FybTcyMHQvY3B1LmMKQEAgLTQxLDggKzQxLDYgQEAKIAkgKiBzZXR1cCB1cCBzdGFja3MgaWYgbmVjZXNzYXJ5CiAJICovCiAjaWZkZWYgQ09ORklHX1VTRV9JUlEKLQlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQogCUlSUV9TVEFDS19TVEFSVCA9IF9hcm1ib290X3N0YXJ0IC0gQ0ZHX01BTExPQ19MRU4gLSBDRkdfR0JMX0RBVEFfU0laRSAtIDQ7CiAJRklRX1NUQUNLX1NUQVJUID0gSVJRX1NUQUNLX1NUQVJUIC0gQ09ORklHX1NUQUNLU0laRV9JUlE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L01ha2VmaWxlIGIvY3B1L2FybTkyMHQvTWFrZWZpbGUKaW5kZXggNjA1YWRmMy4uNjhhMzNkNiAxMDA2NDQKLS0tIGEvY3B1L2FybTkyMHQvTWFrZWZpbGUKKysrIGIvY3B1L2FybTkyMHQvTWFrZWZpbGUKQEAgLTI2LDcgKzI2LDExIEBACiBMSUIJPSBsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8KLU9CSlMJPSBzZXJpYWwubyBpbnRlcnJ1cHRzLm8gY3B1Lm8gc3BlZWQubyB1c2Jfb2hjaS5vCitPQkpTCT0gY3B1Lm8JXAorCSAgaW14X2dlbmVyaWMubyBpbXhfaW50ZXJydXB0cy5vIGlteF9zcGVlZC5vIFwKKwkgIGludGVycnVwdHMubyBcCisJICBzM2MyNHgwX2ludGVycnVwdHMubyBzM2MyNHgwX3NlcmlhbC5vIHMzYzI0eDBfc3BlZWQubyBcCisJICB1c2Jfb2hjaS5vCiAKIGFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvaW14X2dlbmVyaWMuYyBiL2NwdS9hcm05MjB0L2lteF9nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3YzhjMQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjB0L2lteF9nZW5lcmljLmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMKKyAqCisgKiAgYXV0aG9yOiBTYXNjaGEgSGF1ZXIKKyAqICBDcmVhdGVkOiBhcHJpbCAyMHRoLCAyMDA0CisgKiAgQ29weXJpZ2h0OiBTeW5lcnRyb25peHggR21iSAorICoKKyAqICBDb21tb24gY29kZSBmb3IgaS5NWCBtYWNoaW5lcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjaWZkZWYgQ09ORklHX0lNWAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKwordm9pZCBpbXhfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCit7CisJdW5zaWduZWQgaW50IHBpbiA9IGdwaW9fbW9kZSAmIEdQSU9fUElOX01BU0s7CisJdW5zaWduZWQgaW50IHBvcnQgPSAoZ3Bpb19tb2RlICYgR1BJT19QT1JUX01BU0spID4+IDU7CisJdW5zaWduZWQgaW50IG9jciA9IChncGlvX21vZGUgJiBHUElPX09DUl9NQVNLKSA+PiAxMDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogUHVsbHVwIGVuYWJsZSAqLworCWlmKGdwaW9fbW9kZSAmIEdQSU9fUFVFTikKKwkJUFVFTihwb3J0KSB8PSAoMTw8cGluKTsKKwllbHNlCisJCVBVRU4ocG9ydCkgJj0gfigxPDxwaW4pOworCisJLyogRGF0YSBkaXJlY3Rpb24gKi8KKwlpZihncGlvX21vZGUgJiBHUElPX09VVCkKKwkJRERJUihwb3J0KSB8PSAxPDxwaW47CisJZWxzZQorCQlERElSKHBvcnQpICY9IH4oMTw8cGluKTsKKworCS8qIFByaW1hcnkgLyBhbHRlcm5hdGUgZnVuY3Rpb24gKi8KKwlpZihncGlvX21vZGUgJiBHUElPX0FGKQorCQlHUFIocG9ydCkgfD0gKDE8PHBpbik7CisJZWxzZQorCQlHUFIocG9ydCkgJj0gfigxPDxwaW4pOworCisJLyogdXNlIGFzIGdwaW8/ICovCisJaWYoIG9jciA9PSAzICkKKwkJR0lVUyhwb3J0KSB8PSAoMTw8cGluKTsKKwllbHNlCisJCUdJVVMocG9ydCkgJj0gfigxPDxwaW4pOworCisJLyogT3V0cHV0IC8gaW5wdXQgY29uZmlndXJhdGlvbiAqLworCS8qIEZJWE1FOiBJJ20gbm90IHZlcnkgc3VyZSBhYm91dCBPQ1IgYW5kIElDT05GLCBzb21lb25lCisJICogc2hvdWxkIGhhdmUgYSBsb29rIG92ZXIgaXQKKwkgKi8KKwlpZihwaW48MTYpIHsKKwkJdG1wID0gT0NSMShwb3J0KTsKKwkJdG1wICY9IH4oIDM8PChwaW4qMikpOworCQl0bXAgfD0gKG9jciA8PCAocGluKjIpKTsKKwkJT0NSMShwb3J0KSA9IHRtcDsKKworCQlpZiggZ3Bpb19tb2RlICYJR1BJT19BT1VUICkKKwkJCUlDT05GQTEocG9ydCkgJj0gfiggMzw8KHBpbioyKSk7CisJCWlmKCBncGlvX21vZGUgJglHUElPX0JPVVQgKQorCQkJSUNPTkZCMShwb3J0KSAmPSB+KCAzPDwocGluKjIpKTsKKwl9IGVsc2UgeworCQl0bXAgPSBPQ1IyKHBvcnQpOworCQl0bXAgJj0gfiggMzw8KChwaW4tMTYpKjIpKTsKKwkJdG1wIHw9IChvY3IgPDwgKChwaW4tMTYpKjIpKTsKKwkJT0NSMihwb3J0KSA9IHRtcDsKKworCQlpZiggZ3Bpb19tb2RlICYJR1BJT19BT1VUICkKKwkJCUlDT05GQTIocG9ydCkgJj0gfiggMzw8KChwaW4tMTYpKjIpKTsKKwkJaWYoIGdwaW9fbW9kZSAmCUdQSU9fQk9VVCApCisJCQlJQ09ORkIyKHBvcnQpICY9IH4oIDM8PCgocGluLTE2KSoyKSk7CisJfQorfQorCisjZW5kaWYgLyogQ09ORklHX0lNWCAqLwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvaW14X2ludGVycnVwdHMuYyBiL2NwdS9hcm05MjB0L2lteF9pbnRlcnJ1cHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhZTJmYQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjB0L2lteF9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBBbGV4IFp1ZXBrZSA8YXp1QHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpZiBkZWZpbmVkIChDT05GSUdfSU1YKQorCisjaW5jbHVkZSA8YXJtOTIwdC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisKK2ludCBpbnRlcnJ1cHRfaW5pdCAodm9pZCkKK3sKKwlpbnQgaTsKKwkvKiBzZXR1cCBHUCBUaW1lciAxICovCisJVENUTDEgPSBUQ1RMX1NXUjsKKwlmb3IgKCBpPTA7IGk8MTAwOyBpKyspIFRDVEwxID0gMDsgLyogV2UgaGF2ZSBubyB1ZGVsYXkgYnkgbm93ICovCisJVFBSRVIxID0gZ2V0X1BFUkNMSzEoKSAvIDEwMDAwMDA7IC8qIDEgTUh6ICovCisJVENUTDEgfD0gVENUTF9GUlIgfCAoMTw8MSk7IC8qIEZyZWVydW4gTW9kZSwgUEVSQ0xLMSBpbnB1dCAqLworCisJcmVzZXRfdGltZXJfbWFza2VkKCk7CisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogdGltZXIgd2l0aG91dCBpbnRlcnJ1cHRzCisgKi8KKwordm9pZCByZXNldF90aW1lciAodm9pZCkKK3sKKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7Cit9CisKK3Vsb25nIGdldF90aW1lciAodWxvbmcgYmFzZSkKK3sKKwlyZXR1cm4gZ2V0X3RpbWVyX21hc2tlZCAoKTsKK30KKwordm9pZCBzZXRfdGltZXIgKHVsb25nIHQpCit7CisJLyogbm9wICovCit9CisKK3ZvaWQgcmVzZXRfdGltZXJfbWFza2VkICh2b2lkKQoreworCVRDVEwxICY9IH5UQ1RMX1RFTjsKKwlUQ1RMMSB8PSBUQ1RMX1RFTjsgLyogRW5hYmxlIHRpbWVyICovCit9CisKK3Vsb25nIGdldF90aW1lcl9tYXNrZWQgKHZvaWQpCit7CisJcmV0dXJuIFRDTjE7Cit9CisKK3ZvaWQgdWRlbGF5X21hc2tlZCAodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVsb25nIHN0YXJ0ID0gZ2V0X3RpbWVyX21hc2tlZCgpOworCisJd2hpbGUgKGdldF90aW1lcl9tYXNrZWQgKCkgLSBzdGFydCA8IHVzZWMgKQorCQkvKk5PUCovOworfQorCit2b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVkZWxheV9tYXNrZWQodXNlYyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHJlYWQgdGltZWJhc2UgYXMgbG9uZyBsb25nKS4KKyAqIE9uIEFSTSBpdCBqdXN0IHJldHVybnMgdGhlIHRpbWVyIHZhbHVlLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X3RpY2tzKHZvaWQpCit7CisJcmV0dXJuIGdldF90aW1lcigwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAodGltZWJhc2UgY2xvY2sgZnJlcXVlbmN5KS4KKyAqIE9uIEFSTSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIHNlY29uZC4KKyAqLwordWxvbmcgZ2V0X3RiY2xrICh2b2lkKQoreworCXVsb25nIHRiY2xrOworCisJdGJjbGsgPSBDRkdfSFo7CisKKwlyZXR1cm4gdGJjbGs7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIChDT05GSUdfSU1YKSAqLwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvaW14X3NwZWVkLmMgYi9jcHUvYXJtOTIwdC9pbXhfc3BlZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTI5Njk4Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyMHQvaW14X3NwZWVkLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKgorICogKGMpIDIwMDQgU2FzY2hhIEhhdWVyIDxzYXNjaGFAc2FzY2hhaGF1ZXIuZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaWYgZGVmaW5lZCAoQ09ORklHX0lNWCkKKworI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE5PVEU6IFRoaXMgZGVzY3JpYmVzIHRoZSBwcm9wZXIgdXNlIG9mIHRoaXMgZmlsZS4KKyAqCisgKiBDT05GSUdfU1lTX0NMS19GUkVRIHNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBpbnB1dCBmcmVxdWVuY3kgb2YgdGhlIFBMTC4KKyAqIFNIIEZJWE1FOiAxNjc4MDAwMCBpbiBvdXIgY2FzZQorICogZ2V0X0ZDTEsoKSwgZ2V0X0hDTEsoKSwgZ2V0X1BDTEsoKSBhbmQgZ2V0X1VDTEsoKSByZXR1cm4gdGhlIGNsb2NrIG9mCisgKiB0aGUgc3BlY2lmaWVkIGJ1cyBpbiBIWi4KKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit1bG9uZyBnZXRfc3lzdGVtUExMQ0xLKHZvaWQpCit7CisJLyogRklYTUU6IFdlIGFzc3VtZSBTeXN0ZW1fU0VMID0gMCBoZXJlICovCisJdTMyIHNwY3RsMCA9IFNQQ1RMMDsKKwl1MzIgbWZpID0gKHNwY3RsMCA+PiAxMCkgJiAweGY7CisJdTMyIG1mbiA9IHNwY3RsMCAmIDB4M2Y7CisJdTMyIG1mZCA9IChzcGN0bDAgPj4gMTYpICYgMHgzZjsKKwl1MzIgcGQgPSAgKHNwY3RsMCA+PiAyNikgJiAweGY7CisKKwltZmkgPSBtZmk8PTUgPyA1IDogbWZpOworCisJcmV0dXJuICgyKihDT05GSUdfU1lTUExMX0NMS19GUkVRPj4xMCkqKCAobWZpPDwxMCkgKyAobWZuPDwxMCkvKG1mZCsxKSkpLyhwZCsxKTsKK30KKwordWxvbmcgZ2V0X21jdVBMTENMSyh2b2lkKQoreworCS8qIEZJWE1FOiBXZSBhc3N1bWUgU3lzdGVtX1NFTCA9IDAgaGVyZSAqLworCXUzMiBtcGN0bDAgPSBNUENUTDA7CisJdTMyIG1maSA9IChtcGN0bDAgPj4gMTApICYgMHhmOworCXUzMiBtZm4gPSBtcGN0bDAgJiAweDNmOworCXUzMiBtZmQgPSAobXBjdGwwID4+IDE2KSAmIDB4M2Y7CisJdTMyIHBkID0gIChtcGN0bDAgPj4gMjYpICYgMHhmOworCisJbWZpID0gbWZpPD01ID8gNSA6IG1maTsKKworCXJldHVybiAoMiooQ09ORklHX1NZU19DTEtfRlJFUT4+MTApKiggKG1maTw8MTApICsgKG1mbjw8MTApLyhtZmQrMSkpKS8ocGQrMSk7Cit9CisKK3Vsb25nIGdldF9GQ0xLKHZvaWQpCit7CisJcmV0dXJuICgoIENTQ1I+PjE1KSYxKSA/IGdldF9tY3VQTExDTEsoKT4+MSA6IGdldF9tY3VQTExDTEsoKTsKK30KKworLyogcmV0dXJuIEhDTEsgZnJlcXVlbmN5ICovCit1bG9uZyBnZXRfSENMSyh2b2lkKQoreworCXUzMiBiY2xrZGl2ID0gKCggQ1NDUiA+PiAxMCApICYgMHhmKSArIDE7CisJcHJpbnRmKCJiY2xrZGl2OiAlZFxuIiwgYmNsa2Rpdik7CisJcmV0dXJuIGdldF9zeXN0ZW1QTExDTEsoKSAvIGJjbGtkaXY7Cit9CisKKy8qIHJldHVybiBCQ0xLIGZyZXF1ZW5jeSAqLwordWxvbmcgZ2V0X0JDTEsodm9pZCkKK3sKKwlyZXR1cm4gZ2V0X0hDTEsoKTsKK30KKwordWxvbmcgZ2V0X1BFUkNMSzEodm9pZCkKK3sKKwlyZXR1cm4gZ2V0X3N5c3RlbVBMTENMSygpIC8gKCgoUENEUikgJiAweGYpKzEpOworfQorCit1bG9uZyBnZXRfUEVSQ0xLMih2b2lkKQoreworCXJldHVybiBnZXRfc3lzdGVtUExMQ0xLKCkgLyAoKChQQ0RSPj40KSAmIDB4ZikrMSk7Cit9CisKK3Vsb25nIGdldF9QRVJDTEszKHZvaWQpCit7CisJcmV0dXJuIGdldF9zeXN0ZW1QTExDTEsoKSAvICgoKFBDRFI+PjE2KSAmIDB4N2YpKzEpOworfQorCisjZW5kaWYgLyogZGVmaW5lZCAoQ09ORklHX0lNWCkgKi8KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2ludGVycnVwdHMuYyBiL2NwdS9hcm05MjB0L2ludGVycnVwdHMuYwppbmRleCA1MjFjNGY0Li5lYTU4ZjE1IDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L2FybTkyMHQvaW50ZXJydXB0cy5jCkBAIC0zMCwyNSArMzAsMTEgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXJtOTIwdC5oPgotI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApCi0jaW5jbHVkZSA8czNjMjQwMC5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKLSNpbmNsdWRlIDxzM2MyNDEwLmg+Ci0jZW5kaWYKIAorI2luY2x1ZGUgPGFybTkyMHQuaD4KICNpbmNsdWRlIDxhc20vcHJvYy1hcm12L3B0cmFjZS5oPgogCiBleHRlcm4gdm9pZCByZXNldF9jcHUodWxvbmcgYWRkcik7Ci1pbnQgdGltZXJfbG9hZF92YWwgPSAwOwotCi0vKiBtYWNybyB0byByZWFkIHRoZSAxNiBiaXQgdGltZXIgKi8KLXN0YXRpYyBpbmxpbmUgdWxvbmcgUkVBRF9USU1FUih2b2lkKQotewotCVMzQzI0WDBfVElNRVJTICogY29uc3QgdGltZXJzID0gUzNDMjRYMF9HZXRCYXNlX1RJTUVSUygpOwotCi0JcmV0dXJuICh0aW1lcnMtPlRDTlRPNCAmIDB4ZmZmZik7Ci19CiAKICNpZmRlZiBDT05GSUdfVVNFX0lSUQogLyogZW5hYmxlIElSUSBpbnRlcnJ1cHRzICovCkBAIC0xODIsMTMwICsxNjgsMyBAQAogCXNob3dfcmVncyAocHRfcmVncyk7CiAJYmFkX21vZGUgKCk7CiB9Ci0KLXN0YXRpYyB1bG9uZyB0aW1lc3RhbXA7Ci1zdGF0aWMgdWxvbmcgbGFzdGRlYzsKLQotaW50IGludGVycnVwdF9pbml0ICh2b2lkKQotewotCVMzQzI0WDBfVElNRVJTICogY29uc3QgdGltZXJzID0gUzNDMjRYMF9HZXRCYXNlX1RJTUVSUygpOwotCi0JLyogdXNlIFBXTSBUaW1lciA0IGJlY2F1c2UgaXQgaGFzIG5vIG91dHB1dCAqLwotCS8qIHByZXNjYWxlciBmb3IgVGltZXIgNCBpcyAxNiAqLwotCXRpbWVycy0+VENGRzAgPSAweDBmMDA7Ci0JaWYgKHRpbWVyX2xvYWRfdmFsID09IDApCi0JewotCQkvKgotCQkgKiBmb3IgMTAgbXMgY2xvY2sgcGVyaW9kIEAgUENMSyB3aXRoIDQgYml0IGRpdmlkZXIgPSAxLzIKLQkJICogKGRlZmF1bHQpIGFuZCBwcmVzY2FsZXIgPSAxNi4gU2hvdWxkIGJlIDEwMzkwCi0JCSAqIEAzMy4yNU1IeiBhbmQgMTU2MjUgQCA1MCBNSHoKLQkJICovCi0JCXRpbWVyX2xvYWRfdmFsID0gZ2V0X1BDTEsoKS8oMiAqIDE2ICogMTAwKTsKLQl9Ci0JLyogbG9hZCB2YWx1ZSBmb3IgMTAgbXMgdGltZW91dCAqLwotCWxhc3RkZWMgPSB0aW1lcnMtPlRDTlRCNCA9IHRpbWVyX2xvYWRfdmFsOwotCS8qIGF1dG8gbG9hZCwgbWFudWFsIHVwZGF0ZSBvZiBUaW1lciA0ICovCi0JdGltZXJzLT5UQ09OID0gKHRpbWVycy0+VENPTiAmIH4weDA3MDAwMDApIHwgMHg2MDAwMDA7Ci0JLyogYXV0byBsb2FkLCBzdGFydCBUaW1lciA0ICovCi0JdGltZXJzLT5UQ09OID0gKHRpbWVycy0+VENPTiAmIH4weDA3MDAwMDApIHwgMHg1MDAwMDA7Ci0JdGltZXN0YW1wID0gMDsKLQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiB0aW1lciB3aXRob3V0IGludGVycnVwdHMKLSAqLwotCi12b2lkIHJlc2V0X3RpbWVyICh2b2lkKQotewotCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKLX0KLQotdWxvbmcgZ2V0X3RpbWVyICh1bG9uZyBiYXNlKQotewotCXJldHVybiBnZXRfdGltZXJfbWFza2VkICgpIC0gYmFzZTsKLX0KLQotdm9pZCBzZXRfdGltZXIgKHVsb25nIHQpCi17Ci0JdGltZXN0YW1wID0gdDsKLX0KLQotdm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKLXsKLQl1bG9uZyB0bW87Ci0JdWxvbmcgc3RhcnQgPSBnZXRfdGltZXIoMCk7Ci0KLQl0bW8gPSB1c2VjIC8gMTAwMDsKLQl0bW8gKj0gKHRpbWVyX2xvYWRfdmFsICogMTAwKTsKLQl0bW8gLz0gMTAwMDsKLQotCXdoaWxlICgodWxvbmcpKGdldF90aW1lcl9tYXNrZWQgKCkgLSBzdGFydCkgPCB0bW8pCi0JCS8qTk9QKi87Ci19Ci0KLXZvaWQgcmVzZXRfdGltZXJfbWFza2VkICh2b2lkKQotewotCS8qIHJlc2V0IHRpbWUgKi8KLQlsYXN0ZGVjID0gUkVBRF9USU1FUigpOwotCXRpbWVzdGFtcCA9IDA7Ci19Ci0KLXVsb25nIGdldF90aW1lcl9tYXNrZWQgKHZvaWQpCi17Ci0JdWxvbmcgbm93ID0gUkVBRF9USU1FUigpOwotCi0JaWYgKGxhc3RkZWMgPj0gbm93KSB7Ci0JCS8qIG5vcm1hbCBtb2RlICovCi0JCXRpbWVzdGFtcCArPSBsYXN0ZGVjIC0gbm93OwotCX0gZWxzZSB7Ci0JCS8qIHdlIGhhdmUgYW4gb3ZlcmZsb3cgLi4uICovCi0JCXRpbWVzdGFtcCArPSBsYXN0ZGVjICsgdGltZXJfbG9hZF92YWwgLSBub3c7Ci0JfQotCWxhc3RkZWMgPSBub3c7Ci0KLQlyZXR1cm4gdGltZXN0YW1wOwotfQotCi12b2lkIHVkZWxheV9tYXNrZWQgKHVuc2lnbmVkIGxvbmcgdXNlYykKLXsKLQl1bG9uZyB0bW87Ci0KLQl0bW8gPSB1c2VjIC8gMTAwMDsKLQl0bW8gKj0gKHRpbWVyX2xvYWRfdmFsICogMTAwKTsKLQl0bW8gLz0gMTAwMDsKLQotCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKLQotCXdoaWxlIChnZXRfdGltZXJfbWFza2VkICgpIDwgdG1vKQotCQkvKk5PUCovOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlIChyZWFkIHRpbWViYXNlIGFzIGxvbmcgbG9uZykuCi0gKiBPbiBBUk0gaXQganVzdCByZXR1cm5zIHRoZSB0aW1lciB2YWx1ZS4KLSAqLwotdW5zaWduZWQgbG9uZyBsb25nIGdldF90aWNrcyh2b2lkKQotewotCXJldHVybiBnZXRfdGltZXIoMCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHRpbWViYXNlIGNsb2NrIGZyZXF1ZW5jeSkuCi0gKiBPbiBBUk0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVyIHRpY2tzIHBlciBzZWNvbmQuCi0gKi8KLXVsb25nIGdldF90YmNsayAodm9pZCkKLXsKLQl1bG9uZyB0YmNsazsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NNREsyNDAwKSB8fCBkZWZpbmVkKENPTkZJR19UUkFCKQotCXRiY2xrID0gdGltZXJfbG9hZF92YWwgKiAxMDA7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TTURLMjQxMCkgfHwgZGVmaW5lZChDT05GSUdfVkNNQTkpCi0JdGJjbGsgPSBDRkdfSFo7Ci0jZWxzZQotIwllcnJvciAidGJjbGsgbm90IGNvbmZpZ3VyZWQiCi0jZW5kaWYKLQotCXJldHVybiB0YmNsazsKLX0KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L3MzYzI0eDBfaW50ZXJydXB0cy5jIGIvY3B1L2FybTkyMHQvczNjMjR4MF9pbnRlcnJ1cHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyOThiMAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjB0L3MzYzI0eDBfaW50ZXJydXB0cy5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogQWxleCBadWVwa2UgPGF6dUBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkgfHwgZGVmaW5lZCAoQ09ORklHX1MzQzI0MTApIHx8IGRlZmluZWQgKENPTkZJR19UUkFCKQorCisjaW5jbHVkZSA8YXJtOTIwdC5oPgorI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApCisjaW5jbHVkZSA8czNjMjQwMC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKKyNpbmNsdWRlIDxzM2MyNDEwLmg+CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgcmVzZXRfY3B1KHVsb25nIGFkZHIpOworaW50IHRpbWVyX2xvYWRfdmFsID0gMDsKKworLyogbWFjcm8gdG8gcmVhZCB0aGUgMTYgYml0IHRpbWVyICovCitzdGF0aWMgaW5saW5lIHVsb25nIFJFQURfVElNRVIodm9pZCkKK3sKKwlTM0MyNFgwX1RJTUVSUyAqIGNvbnN0IHRpbWVycyA9IFMzQzI0WDBfR2V0QmFzZV9USU1FUlMoKTsKKworCXJldHVybiAodGltZXJzLT5UQ05UTzQgJiAweGZmZmYpOworfQorCitzdGF0aWMgdWxvbmcgdGltZXN0YW1wOworc3RhdGljIHVsb25nIGxhc3RkZWM7CisKK2ludCBpbnRlcnJ1cHRfaW5pdCAodm9pZCkKK3sKKwlTM0MyNFgwX1RJTUVSUyAqIGNvbnN0IHRpbWVycyA9IFMzQzI0WDBfR2V0QmFzZV9USU1FUlMoKTsKKworCS8qIHVzZSBQV00gVGltZXIgNCBiZWNhdXNlIGl0IGhhcyBubyBvdXRwdXQgKi8KKwkvKiBwcmVzY2FsZXIgZm9yIFRpbWVyIDQgaXMgMTYgKi8KKwl0aW1lcnMtPlRDRkcwID0gMHgwZjAwOworCWlmICh0aW1lcl9sb2FkX3ZhbCA9PSAwKQorCXsKKwkJLyoKKwkJICogZm9yIDEwIG1zIGNsb2NrIHBlcmlvZCBAIFBDTEsgd2l0aCA0IGJpdCBkaXZpZGVyID0gMS8yCisJCSAqIChkZWZhdWx0KSBhbmQgcHJlc2NhbGVyID0gMTYuIFNob3VsZCBiZSAxMDM5MAorCQkgKiBAMzMuMjVNSHogYW5kIDE1NjI1IEAgNTAgTUh6CisJCSAqLworCQl0aW1lcl9sb2FkX3ZhbCA9IGdldF9QQ0xLKCkvKDIgKiAxNiAqIDEwMCk7CisJfQorCS8qIGxvYWQgdmFsdWUgZm9yIDEwIG1zIHRpbWVvdXQgKi8KKwlsYXN0ZGVjID0gdGltZXJzLT5UQ05UQjQgPSB0aW1lcl9sb2FkX3ZhbDsKKwkvKiBhdXRvIGxvYWQsIG1hbnVhbCB1cGRhdGUgb2YgVGltZXIgNCAqLworCXRpbWVycy0+VENPTiA9ICh0aW1lcnMtPlRDT04gJiB+MHgwNzAwMDAwKSB8IDB4NjAwMDAwOworCS8qIGF1dG8gbG9hZCwgc3RhcnQgVGltZXIgNCAqLworCXRpbWVycy0+VENPTiA9ICh0aW1lcnMtPlRDT04gJiB+MHgwNzAwMDAwKSB8IDB4NTAwMDAwOworCXRpbWVzdGFtcCA9IDA7CisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogdGltZXIgd2l0aG91dCBpbnRlcnJ1cHRzCisgKi8KKwordm9pZCByZXNldF90aW1lciAodm9pZCkKK3sKKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7Cit9CisKK3Vsb25nIGdldF90aW1lciAodWxvbmcgYmFzZSkKK3sKKwlyZXR1cm4gZ2V0X3RpbWVyX21hc2tlZCAoKSAtIGJhc2U7Cit9CisKK3ZvaWQgc2V0X3RpbWVyICh1bG9uZyB0KQoreworCXRpbWVzdGFtcCA9IHQ7Cit9CisKK3ZvaWQgdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisJdWxvbmcgdG1vOworCXVsb25nIHN0YXJ0ID0gZ2V0X3RpbWVyKDApOworCisJdG1vID0gdXNlYyAvIDEwMDA7CisJdG1vICo9ICh0aW1lcl9sb2FkX3ZhbCAqIDEwMCk7CisJdG1vIC89IDEwMDA7CisKKwl3aGlsZSAoKHVsb25nKShnZXRfdGltZXJfbWFza2VkICgpIC0gc3RhcnQpIDwgdG1vKQorCQkvKk5PUCovOworfQorCit2b2lkIHJlc2V0X3RpbWVyX21hc2tlZCAodm9pZCkKK3sKKwkvKiByZXNldCB0aW1lICovCisJbGFzdGRlYyA9IFJFQURfVElNRVIoKTsKKwl0aW1lc3RhbXAgPSAwOworfQorCit1bG9uZyBnZXRfdGltZXJfbWFza2VkICh2b2lkKQoreworCXVsb25nIG5vdyA9IFJFQURfVElNRVIoKTsKKworCWlmIChsYXN0ZGVjID49IG5vdykgeworCQkvKiBub3JtYWwgbW9kZSAqLworCQl0aW1lc3RhbXAgKz0gbGFzdGRlYyAtIG5vdzsKKwl9IGVsc2UgeworCQkvKiB3ZSBoYXZlIGFuIG92ZXJmbG93IC4uLiAqLworCQl0aW1lc3RhbXAgKz0gbGFzdGRlYyArIHRpbWVyX2xvYWRfdmFsIC0gbm93OworCX0KKwlsYXN0ZGVjID0gbm93OworCisJcmV0dXJuIHRpbWVzdGFtcDsKK30KKwordm9pZCB1ZGVsYXlfbWFza2VkICh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisJdWxvbmcgdG1vOworCisJdG1vID0gdXNlYyAvIDEwMDA7CisJdG1vICo9ICh0aW1lcl9sb2FkX3ZhbCAqIDEwMCk7CisJdG1vIC89IDEwMDA7CisKKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisKKwl3aGlsZSAoZ2V0X3RpbWVyX21hc2tlZCAoKSA8IHRtbykKKwkJLypOT1AqLzsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAocmVhZCB0aW1lYmFzZSBhcyBsb25nIGxvbmcpLgorICogT24gQVJNIGl0IGp1c3QgcmV0dXJucyB0aGUgdGltZXIgdmFsdWUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBnZXRfdGlja3Modm9pZCkKK3sKKwlyZXR1cm4gZ2V0X3RpbWVyKDApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlICh0aW1lYmFzZSBjbG9jayBmcmVxdWVuY3kpLgorICogT24gQVJNIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lciB0aWNrcyBwZXIgc2Vjb25kLgorICovCit1bG9uZyBnZXRfdGJjbGsgKHZvaWQpCit7CisJdWxvbmcgdGJjbGs7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TTURLMjQwMCkgfHwgZGVmaW5lZChDT05GSUdfVFJBQikKKwl0YmNsayA9IHRpbWVyX2xvYWRfdmFsICogMTAwOworI2VsaWYgZGVmaW5lZChDT05GSUdfU01ESzI0MTApIHx8IGRlZmluZWQoQ09ORklHX1ZDTUE5KQorCXRiY2xrID0gQ0ZHX0haOworI2Vsc2UKKyMJZXJyb3IgInRiY2xrIG5vdCBjb25maWd1cmVkIgorI2VuZGlmCisKKwlyZXR1cm4gdGJjbGs7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19TM0MyNDAwKSB8fCBkZWZpbmVkIChDT05GSUdfUzNDMjQxMCkgfHwgZGVmaW5lZCAoQ09ORklHX1RSQUIpICovCmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9zZXJpYWwuYyBiL2NwdS9hcm05MjB0L3MzYzI0eDBfc2VyaWFsLmMKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gY3B1L2FybTkyMHQvc2VyaWFsLmMKcmVuYW1lIHRvIGNwdS9hcm05MjB0L3MzYzI0eDBfc2VyaWFsLmMKaW5kZXggMTc0OWU4Mi4uODMyNzQ0MyAxMDA2NDQKLS0tIGEvY3B1L2FybTkyMHQvc2VyaWFsLmMKKysrIGIvY3B1L2FybTkyMHQvczNjMjR4MF9zZXJpYWwuYwpAQCAtMSwyNCArMSwyNiBAQAotCS8qCi0JICogKEMpIENvcHlyaWdodCAyMDAyCi0JICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgotCSAqCi0JICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLQkgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotCSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0JICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQkgKgotCSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotCSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0JICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotCSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0JICoKLQkgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqCiAgKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgorI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApIHx8IGRlZmluZWQgKENPTkZJR19TM0MyNDEwKSB8fCBkZWZpbmVkIChDT05GSUdfVFJBQikKKwogI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApIHx8IGRlZmluZWQoQ09ORklHX1RSQUIpCiAjaW5jbHVkZSA8czNjMjQwMC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKQEAgLTE3NiwzICsxNzgsNSBAQAogCQlzZXJpYWxfcHV0YyAoKnMrKyk7CiAJfQogfQorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUzNDMjQwMCkgfHwgZGVmaW5lZCAoQ09ORklHX1MzQzI0MTApIHx8IGRlZmluZWQgKENPTkZJR19UUkFCKSAqLwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvc3BlZWQuYyBiL2NwdS9hcm05MjB0L3MzYzI0eDBfc3BlZWQuYwpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBjcHUvYXJtOTIwdC9zcGVlZC5jCnJlbmFtZSB0byBjcHUvYXJtOTIwdC9zM2MyNHgwX3NwZWVkLmMKaW5kZXggMWY0MzU0My4uZTBkY2E2MiAxMDA2NDQKLS0tIGEvY3B1L2FybTkyMHQvc3BlZWQuYworKysgYi9jcHUvYXJtOTIwdC9zM2MyNHgwX3NwZWVkLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDAxLTIwMDIKKyAqIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA0CiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgpAQCAtMzAsNiArMzAsOCBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KKyNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDAwKSB8fCBkZWZpbmVkIChDT05GSUdfUzNDMjQxMCkgfHwgZGVmaW5lZCAoQ09ORklHX1RSQUIpCisKICNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDAwKQogI2luY2x1ZGUgPHMzYzI0MDAuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX1MzQzI0MTApCkBAIC05NSwzICs5Nyw1IEBACiB7CiAgICAgcmV0dXJuKGdldF9QTExDTEsoVVBMTCkpOwogfQorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUzNDMjQwMCkgfHwgZGVmaW5lZCAoQ09ORklHX1MzQzI0MTApIHx8IGRlZmluZWQgKENPTkZJR19UUkFCKSAqLwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvc3RhcnQuUyBiL2NwdS9hcm05MjB0L3N0YXJ0LlMKaW5kZXggMGUzNzJkMC4uNzhjNDcwZCAxMDA2NDQKLS0tIGEvY3B1L2FybTkyMHQvc3RhcnQuUworKysgYi9jcHUvYXJtOTIwdC9zdGFydC5TCkBAIC0xMTgsMjAgKzExOCwxNyBAQAogCiAvKiB0dXJuIG9mZiB0aGUgd2F0Y2hkb2cgKi8KICNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDAwKQotI2RlZmluZSBwV1RDT04JCTB4MTUzMDAwMDAKLS8qIEludGVydXB0LUNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzZXMgKi8KLSNkZWZpbmUgSU5UTVNLCQkweDE0NDAwMDA4Ci0vKiBjbG9jayBkaXZpc29yIHJlZ2lzdGVyICovCi0jZGVmaW5lIENMS0RJVk4JCTB4MTQ4MDAwMTQKKyMgZGVmaW5lIHBXVENPTgkJMHgxNTMwMDAwMAorIyBkZWZpbmUgSU5UTVNLCQkweDE0NDAwMDA4CS8qIEludGVydXB0LUNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzZXMgKi8KKyMgZGVmaW5lIENMS0RJVk4JMHgxNDgwMDAxNAkvKiBjbG9jayBkaXZpc29yIHJlZ2lzdGVyICovCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQotI2RlZmluZSBwV1RDT04JCTB4NTMwMDAwMDAKLS8qIEludGVydXB0LUNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzZXMgKi8KLSNkZWZpbmUgSU5UTVNLCQkweDRBMDAwMDA4Ci0jZGVmaW5lIElOVFNVQk1TSwkweDRBMDAwMDFDCi0vKiBjbG9jayBkaXZpc29yIHJlZ2lzdGVyICovCi0jZGVmaW5lIENMS0RJVk4JCTB4NEMwMDAwMTQKKyMgZGVmaW5lIHBXVENPTgkJMHg1MzAwMDAwMAorIyBkZWZpbmUgSU5UTVNLCQkweDRBMDAwMDA4CS8qIEludGVydXB0LUNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzZXMgKi8KKyMgZGVmaW5lIElOVFNVQk1TSwkweDRBMDAwMDFDCisjIGRlZmluZSBDTEtESVZOCTB4NEMwMDAwMTQJLyogY2xvY2sgZGl2aXNvciByZWdpc3RlciAqLwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDAwKSB8fCBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQogCWxkciAgICAgcjAsID1wV1RDT04KIAltb3YgICAgIHIxLCAjMHgwCiAJc3RyICAgICByMSwgW3IwXQpAQCAtMTQyLDE3ICsxMzksMTggQEAKIAltb3YJcjEsICMweGZmZmZmZmZmCiAJbGRyCXIwLCA9SU5UTVNLCiAJc3RyCXIxLCBbcjBdCi0jaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKKyMgaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKIAlsZHIJcjEsID0weDNmZgogCWxkcglyMCwgPUlOVFNVQk1TSwogCXN0cglyMSwgW3IwXQotI2VuZGlmCisjIGVuZGlmCiAKIAkvKiBGQ0xLOkhDTEs6UENMSyA9IDE6Mjo0ICovCiAJLyogZGVmYXVsdCBGQ0xLIGlzIDEyMCBNSHogISAqLwogCWxkcglyMCwgPUNMS0RJVk4KIAltb3YJcjEsICMzCiAJc3RyCXIxLCBbcjBdCisjZW5kaWYJLyogQ09ORklHX1MzQzI0MDAgfHwgQ09ORklHX1MzQzI0MTAgKi8KIAogCS8qCiAJICogd2UgZG8gc3lzLWNyaXRpY2FsIGluaXRzIG9ubHkgYXQgcmVib290LApkaWZmIC0tZ2l0IGEvY3B1L21jOTMyOC9jb25maWcubWsgYi9jcHUvbWM5MzI4L2NvbmZpZy5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmN2QyNi4uMDAwMDAwMAotLS0gYS9jcHUvbWM5MzI4L2NvbmZpZy5taworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAyCi0jIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KLSMKLSMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSMgcHJvamVjdC4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSMgTUEgMDIxMTEtMTMwNyBVU0EKLSMKLQotUExBVEZPUk1fUkVMRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1mbm8tY29tbW9uIC1mZml4ZWQtcjggXAotCS1tc2hvcnQtbG9hZC1ieXRlcyAtbXNvZnQtZmxvYXQKLQotUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcGNzLTMyIC1tYXJjaD1hcm12NApkaWZmIC0tZ2l0IGEvY3B1L21jOTMyOC9jcHUuYyBiL2NwdS9tYzkzMjgvY3B1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMmI1NzguLjAwMDAwMDAKLS0tIGEvY3B1L21jOTMyOC9jcHUuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogQ1BVIHNwZWNpZmljIGNvZGUKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGFybTkyMHQuaD4KLQotLyogcmVhZCBjby1wcm9jZXNzb3IgMTUsIHJlZ2lzdGVyICMxIChjb250cm9sIHJlZ2lzdGVyKSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF9wMTVfYzEgKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibXJjICAgICBwMTUsIDAsICUwLCBjMSwgYzAsIDAgICBAIHJlYWQgY29udHJvbCByZWdcbiIKLQkJOiAiPXIiICh2YWx1ZSkKLQkJOgotCQk6ICJtZW1vcnkiKTsKLQotI2lmZGVmIE1NVV9ERUJVRwotCXByaW50ZiAoInAxNS9jMSBpcyA9ICUwOGx4XG4iLCB2YWx1ZSk7Ci0jZW5kaWYKLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLS8qIHdyaXRlIHRvIGNvLXByb2Nlc3NvciAxNSwgcmVnaXN0ZXIgIzEgKGNvbnRyb2wgcmVnaXN0ZXIpICovCi1zdGF0aWMgdm9pZCB3cml0ZV9wMTVfYzEgKHVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0jaWZkZWYgTU1VX0RFQlVHCi0JcHJpbnRmICgid3JpdGUgJTA4bHggdG8gcDE1L2MxXG4iLCB2YWx1ZSk7Ci0jZW5kaWYKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIm1jciAgICAgcDE1LCAwLCAlMCwgYzEsIGMwLCAwICAgQCB3cml0ZSBpdCBiYWNrXG4iCi0JCToKLQkJOiAiciIgKHZhbHVlKQotCQk6ICJtZW1vcnkiKTsKLQotCXJlYWRfcDE1X2MxICgpOwotfQotCi1zdGF0aWMgdm9pZCBjcF9kZWxheSAodm9pZCkKLXsKLQl2b2xhdGlsZSBpbnQgaTsKLQotCS8qIGNvcHJvIHNlZW1zIHRvIG5lZWQgc29tZSBkZWxheSBiZXR3ZWVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspOwotfQotCi0vKiBTZWUgYWxzbyBBUk0gUmVmLiBNYW4uICovCi0jZGVmaW5lIEMxX01NVQkJKDE8PDApCQkvKiBtbXUgb2ZmL29uICovCi0jZGVmaW5lIEMxX0FMSUdOCSgxPDwxKQkJLyogYWxpZ25tZW50IGZhdWx0cyBvZmYvb24gKi8KLSNkZWZpbmUgQzFfREMJCSgxPDwyKQkJLyogZGNhY2hlIG9mZi9vbiAqLwotI2RlZmluZSBDMV9CSUdfRU5ESUFOCSgxPDw3KQkvKiBiaWcgZW5kaWFuIG9mZi9vbiAqLwotI2RlZmluZSBDMV9TWVNfUFJPVAkoMTw8OCkJCS8qIHN5c3RlbSBwcm90ZWN0aW9uICovCi0jZGVmaW5lIEMxX1JPTV9QUk9UCSgxPDw5KQkJLyogUk9NIHByb3RlY3Rpb24gKi8KLSNkZWZpbmUgQzFfSUMJCSgxPDwxMikJCS8qIGljYWNoZSBvZmYvb24gKi8KLSNkZWZpbmUgQzFfSElHSF9WRUNUT1JTCSgxPDwxMykJLyogbG9jYXRpb24gb2YgdmVjdG9yczogbG93L2hpZ2ggYWRkcmVzc2VzICovCi0jZGVmaW5lIFJFU0VSVkVEXzEJKDB4ZiA8PCAzKQkvKiBtdXN0IGJlIDExMWIgZm9yIFIvVyAqLwotCi1pbnQgY3B1X2luaXQgKHZvaWQpCi17Ci0JLyoKLQkgKiBzZXR1cCB1cCBzdGFja3MgaWYgbmVjZXNzYXJ5Ci0JICovCi0jaWZkZWYgQ09ORklHX1VTRV9JUlEKLQlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQotCUlSUV9TVEFDS19TVEFSVCA9IF9hcm1ib290X3N0YXJ0IC0gQ0ZHX01BTExPQ19MRU4gLSBDRkdfR0JMX0RBVEFfU0laRSAtIDQ7Ci0JRklRX1NUQUNLX1NUQVJUID0gSVJRX1NUQUNLX1NUQVJUIC0gQ09ORklHX1NUQUNLU0laRV9JUlE7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotaW50IGNsZWFudXBfYmVmb3JlX2xpbnV4ICh2b2lkKQotewotCS8qCi0JICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQganVzdCBiZWZvcmUgd2UgY2FsbCBsaW51eAotCSAqIGl0IHByZXBhcmVzIHRoZSBwcm9jZXNzb3IgZm9yIGxpbnV4Ci0JICoKLQkgKiB3ZSB0dXJuIG9mZiBjYWNoZXMgZXRjIC4uLgotCSAqLwotCi0JdW5zaWduZWQgbG9uZyBpOwotCi0JZGlzYWJsZV9pbnRlcnJ1cHRzICgpOwotCi0JLyogdHVybiBvZmYgSS9ELWNhY2hlICovCi0JYXNtICgibXJjIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCI6Ij1yIiAoaSkpOwotCWkgJj0gfihDMV9EQyB8IEMxX0lDKTsKLQlhc20gKCJtY3IgcDE1LCAwLCAlMCwgYzEsIGMwLCAwIjogOiJyIiAoaSkpOwotCi0JLyogZmx1c2ggSS9ELWNhY2hlICovCi0JaSA9IDA7Ci0JYXNtICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNywgMCI6IDoiciIgKGkpKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWV4dGVybiB2b2lkIHJlc2V0X2NwdSAodWxvbmcgYWRkcik7Ci0KLQlkaXNhYmxlX2ludGVycnVwdHMgKCk7Ci0JcmVzZXRfY3B1ICgwKTsKLQkvKk5PVFJFQUNIRUQqLwotCXJldHVybiAoMCk7Ci19Ci0KLXZvaWQgaWNhY2hlX2VuYWJsZSAodm9pZCkKLXsKLQl1bG9uZyByZWc7Ci0KLQlyZWcgPSByZWFkX3AxNV9jMSAoKTsKLQljcF9kZWxheSAoKTsKLQl3cml0ZV9wMTVfYzEgKHJlZyB8IEMxX0lDKTsKLX0KLQotdm9pZCBpY2FjaGVfZGlzYWJsZSAodm9pZCkKLXsKLQl1bG9uZyByZWc7Ci0KLQlyZWcgPSByZWFkX3AxNV9jMSAoKTsKLQljcF9kZWxheSAoKTsKLQl3cml0ZV9wMTVfYzEgKHJlZyAmIH5DMV9JQyk7Ci19Ci0KLWludCBpY2FjaGVfc3RhdHVzICh2b2lkKQotewotCXJldHVybiAocmVhZF9wMTVfYzEgKCkgJiBDMV9JQykgIT0gMDsKLX0KLQotI2lmZGVmIFVTRV85MjBUX01NVQotLyogSXQgbWFrZXMgbm8gc2Vuc2UgdG8gdXNlIHRoZSBkY2FjaGUgaWYgdGhlIE1NVSBpcyBub3QgZW5hYmxlZCAqLwotdm9pZCBkY2FjaGVfZW5hYmxlICh2b2lkKQotewotCXVsb25nIHJlZzsKLQotCXJlZyA9IHJlYWRfcDE1X2MxICgpOwotCWNwX2RlbGF5ICgpOwotCXdyaXRlX3AxNV9jMSAocmVnIHwgQzFfREMpOwotfQotCi12b2lkIGRjYWNoZV9kaXNhYmxlICh2b2lkKQotewotCXVsb25nIHJlZzsKLQotCXJlZyA9IHJlYWRfcDE1X2MxICgpOwotCWNwX2RlbGF5ICgpOwotCXJlZyAmPSB+QzFfREM7Ci0Jd3JpdGVfcDE1X2MxIChyZWcpOwotfQotCi1pbnQgZGNhY2hlX3N0YXR1cyAodm9pZCkKLXsKLQlyZXR1cm4gKHJlYWRfcDE1X2MxICgpICYgQzFfREMpICE9IDA7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9tYzkzMjgvaW50ZXJydXB0cy5jIGIvY3B1L21jOTMyOC9pbnRlcnJ1cHRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MDdkYjYuLjAwMDAwMDAKLS0tIGEvY3B1L21jOTMyOC9pbnRlcnJ1cHRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+Ci0gKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqIEFsZXggWnVlcGtlIDxhenVAc3lzZ28uZGU+Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFybTkyMHQuaD4KLSNpbmNsdWRlIDxtYzkzMjguaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jLWFybXYvcHRyYWNlLmg+Ci0KLWV4dGVybiB2b2lkIHJlc2V0X2NwdSh1bG9uZyBhZGRyKTsKLWludCB0aW1lcl9sb2FkX3ZhbCA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfVVNFX0lSUQotLyogZW5hYmxlIElSUSBpbnRlcnJ1cHRzICovCi12b2lkIGVuYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdGVtcDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLCBjcHNyXG4iCi0JCQkgICAgICJiaWMgJTAsICUwLCAjMHg4MFxuIgotCQkJICAgICAibXNyIGNwc3JfYywgJTAiCi0JCQkgICAgIDogIj1yIiAodGVtcCkKLQkJCSAgICAgOgotCQkJICAgICA6ICJtZW1vcnkiKTsKLX0KLQotCi0vKgotICogZGlzYWJsZSBJUlEvRklRIGludGVycnVwdHMKLSAqIHJldHVybnMgdHJ1ZSBpZiBpbnRlcnJ1cHRzIGhhZCBiZWVuIGVuYWJsZWQgYmVmb3JlIHdlIGRpc2FibGVkIHRoZW0KLSAqLwotaW50IGRpc2FibGVfaW50ZXJydXB0cyAodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG9sZCx0ZW1wOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJtcnMgJTAsIGNwc3JcbiIKLQkJCSAgICAgIm9yciAlMSwgJTAsICMweGMwXG4iCi0JCQkgICAgICJtc3IgY3Bzcl9jLCAlMSIKLQkJCSAgICAgOiAiPXIiIChvbGQpLCAiPXIiICh0ZW1wKQotCQkJICAgICA6Ci0JCQkgICAgIDogIm1lbW9yeSIpOwotCXJldHVybiAob2xkICYgMHg4MCkgPT0gMDsKLX0KLSNlbHNlCi12b2lkIGVuYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQotewotCXJldHVybjsKLX0KLWludCBkaXNhYmxlX2ludGVycnVwdHMgKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotCi12b2lkIGJhZF9tb2RlICh2b2lkKQotewotCXBhbmljICgiUmVzZXR0aW5nIENQVSAuLi5cbiIpOwotCXJlc2V0X2NwdSAoMCk7Ci19Ci0KLXZvaWQgc2hvd19yZWdzIChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNvbnN0IGNoYXIgKnByb2Nlc3Nvcl9tb2Rlc1tdID0gewotCSJVU0VSXzI2IiwJIkZJUV8yNiIsCSJJUlFfMjYiLAkiU1ZDXzI2IiwKLQkiVUs0XzI2IiwJIlVLNV8yNiIsCSJVSzZfMjYiLAkiVUs3XzI2IiwKLQkiVUs4XzI2IiwJIlVLOV8yNiIsCSJVSzEwXzI2IiwJIlVLMTFfMjYiLAotCSJVSzEyXzI2IiwJIlVLMTNfMjYiLAkiVUsxNF8yNiIsCSJVSzE1XzI2IiwKLQkiVVNFUl8zMiIsCSJGSVFfMzIiLAkiSVJRXzMyIiwJIlNWQ18zMiIsCi0JIlVLNF8zMiIsCSJVSzVfMzIiLAkiVUs2XzMyIiwJIkFCVF8zMiIsCi0JIlVLOF8zMiIsCSJVSzlfMzIiLAkiVUsxMF8zMiIsCSJVTkRfMzIiLAotCSJVSzEyXzMyIiwJIlVLMTNfMzIiLAkiVUsxNF8zMiIsCSJTWVNfMzIiLAotCX07Ci0KLQlmbGFncyA9IGNvbmRpdGlvbl9jb2RlcyAocmVncyk7Ci0KLQlwcmludGYgKCJwYyA6IFs8JTA4bHg+XSAgICBsciA6IFs8JTA4bHg+XVxuIgotCQkic3AgOiAlMDhseCAgaXAgOiAlMDhseCAgZnAgOiAlMDhseFxuIiwKLQkJaW5zdHJ1Y3Rpb25fcG9pbnRlciAocmVncyksCi0JCXJlZ3MtPkFSTV9sciwgcmVncy0+QVJNX3NwLCByZWdzLT5BUk1faXAsIHJlZ3MtPkFSTV9mcCk7Ci0JcHJpbnRmICgicjEwOiAlMDhseCAgcjkgOiAlMDhseCAgcjggOiAlMDhseFxuIiwKLQkJcmVncy0+QVJNX3IxMCwgcmVncy0+QVJNX3I5LCByZWdzLT5BUk1fcjgpOwotCXByaW50ZiAoInI3IDogJTA4bHggIHI2IDogJTA4bHggIHI1IDogJTA4bHggIHI0IDogJTA4bHhcbiIsCi0JCXJlZ3MtPkFSTV9yNywgcmVncy0+QVJNX3I2LCByZWdzLT5BUk1fcjUsIHJlZ3MtPkFSTV9yNCk7Ci0JcHJpbnRmICgicjMgOiAlMDhseCAgcjIgOiAlMDhseCAgcjEgOiAlMDhseCAgcjAgOiAlMDhseFxuIiwKLQkJcmVncy0+QVJNX3IzLCByZWdzLT5BUk1fcjIsIHJlZ3MtPkFSTV9yMSwgcmVncy0+QVJNX3IwKTsKLQlwcmludGYgKCJGbGFnczogJWMlYyVjJWMiLAotCQlmbGFncyAmIENDX05fQklUID8gJ04nIDogJ24nLAotCQlmbGFncyAmIENDX1pfQklUID8gJ1onIDogJ3onLAotCQlmbGFncyAmIENDX0NfQklUID8gJ0MnIDogJ2MnLCBmbGFncyAmIENDX1ZfQklUID8gJ1YnIDogJ3YnKTsKLQlwcmludGYgKCIgIElSUXMgJXMgIEZJUXMgJXMgIE1vZGUgJXMlc1xuIiwKLQkJaW50ZXJydXB0c19lbmFibGVkIChyZWdzKSA/ICJvbiIgOiAib2ZmIiwKLQkJZmFzdF9pbnRlcnJ1cHRzX2VuYWJsZWQgKHJlZ3MpID8gIm9uIiA6ICJvZmYiLAotCQlwcm9jZXNzb3JfbW9kZXNbcHJvY2Vzc29yX21vZGUgKHJlZ3MpXSwKLQkJdGh1bWJfbW9kZSAocmVncykgPyAiIChUKSIgOiAiIik7Ci19Ci0KLXZvaWQgZG9fdW5kZWZpbmVkX2luc3RydWN0aW9uIChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKLXsKLQlwcmludGYgKCJ1bmRlZmluZWQgaW5zdHJ1Y3Rpb25cbiIpOwotCXNob3dfcmVncyAocHRfcmVncyk7Ci0JYmFkX21vZGUgKCk7Ci19Ci0KLXZvaWQgZG9fc29mdHdhcmVfaW50ZXJydXB0IChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKLXsKLQlwcmludGYgKCJzb2Z0d2FyZSBpbnRlcnJ1cHRcbiIpOwotCXNob3dfcmVncyAocHRfcmVncyk7Ci0JYmFkX21vZGUgKCk7Ci19Ci0KLXZvaWQgZG9fcHJlZmV0Y2hfYWJvcnQgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQotewotCXByaW50ZiAoInByZWZldGNoIGFib3J0XG4iKTsKLQlzaG93X3JlZ3MgKHB0X3JlZ3MpOwotCWJhZF9tb2RlICgpOwotfQotCi12b2lkIGRvX2RhdGFfYWJvcnQgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQotewotCXByaW50ZiAoImRhdGEgYWJvcnRcbiIpOwotCXNob3dfcmVncyAocHRfcmVncyk7Ci0JYmFkX21vZGUgKCk7Ci19Ci0KLXZvaWQgZG9fbm90X3VzZWQgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQotewotCXByaW50ZiAoIm5vdCB1c2VkXG4iKTsKLQlzaG93X3JlZ3MgKHB0X3JlZ3MpOwotCWJhZF9tb2RlICgpOwotfQotCi12b2lkIGRvX2ZpcSAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCi17Ci0JcHJpbnRmICgiZmFzdCBpbnRlcnJ1cHQgcmVxdWVzdFxuIik7Ci0Jc2hvd19yZWdzIChwdF9yZWdzKTsKLQliYWRfbW9kZSAoKTsKLX0KLQotdm9pZCBkb19pcnEgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQotewotCXByaW50ZiAoImludGVycnVwdCByZXF1ZXN0XG4iKTsKLQlzaG93X3JlZ3MgKHB0X3JlZ3MpOwotCWJhZF9tb2RlICgpOwotfQotCi0KLWludCBpbnRlcnJ1cHRfaW5pdCAodm9pZCkKLXsKLQotLyogd2UgZG9uJ3QgdXNlIGludGVycnVwdCAqLwotCXJldHVybigwKTsKLX0KLQotLyoKLSAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cwotICovCi0KLXZvaWQgcmVzZXRfdGltZXIgKHZvaWQpCi17Ci0JcmVzZXRfdGltZXJfbWFza2VkICgpOwotfQotCi11bG9uZyBnZXRfdGltZXIgKHVsb25nIGJhc2UpCi17Ci0JcmV0dXJuIGdldF90aW1lcl9tYXNrZWQgKCk7Ci19Ci0KLXZvaWQgc2V0X3RpbWVyICh1bG9uZyB0KQotewotLyogTm9wCSovCi19Ci0KLXZvaWQgdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCi17Ci0JdWRlbGF5X21hc2tlZCAodXNlYyk7Ci19Ci0KLXZvaWQgcmVzZXRfdGltZXJfbWFza2VkICh2b2lkKQotewotCXUzMiAJdG1wOwotCU1YMV9UQ1RMMSAgICAgICA9IDB4MDk7Ci0JdG1wID0gMHgxZjsJCS8qIGEgbGl0dGxlIGRlbGF5IGZvciB0aW1lciB0byByZXNldCAqLwotCU1YMV9UUFJFUjEJPSAweDFmOwotCU1YMV9UQ1RMMQk9IDB4MTk7Ci19Ci0KLXVsb25nIGdldF90aW1lcl9tYXNrZWQgKHZvaWQpCi17Ci0JcmV0dXJuIE1YMV9UQ04xOwotfQotCi12b2lkIHVkZWxheV9tYXNrZWQgKHVuc2lnbmVkIGxvbmcgdXNlYykKLXsKLQl1bG9uZyB0bW87Ci0KLQl0bW8gPSB1c2VjIC8gMTAwMDsKLQl0bW8gKj0gQ0ZHX0haOwotCXRtbyAvPSAxMDAwOwotCi0JcmVzZXRfdGltZXJfbWFza2VkICgpOwotCi0Jd2hpbGUgKGdldF90aW1lcl9tYXNrZWQgKCkgPCB0bW8pOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlIChyZWFkIHRpbWViYXNlIGFzIGxvbmcgbG9uZykuCi0gKiBPbiBBUk0gaXQganVzdCByZXR1cm5zIHRoZSB0aW1lciB2YWx1ZS4KLSAqLwotdW5zaWduZWQgbG9uZyBsb25nIGdldF90aWNrcyh2b2lkKQotewotCXJldHVybiBnZXRfdGltZXIoMCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHRpbWViYXNlIGNsb2NrIGZyZXF1ZW5jeSkuCi0gKiBPbiBBUk0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVyIHRpY2tzIHBlciBzZWNvbmQuCi0gKi8KLQotdWxvbmcgIGdldF90YmNsayAodm9pZCkgewotCXJldHVybiBDRkdfSFo7Ci19CmRpZmYgLS1naXQgYS9jcHUvbWM5MzI4L3NlcmlhbC5jIGIvY3B1L21jOTMyOC9zZXJpYWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjZmI4MC4uMDAwMDAwMAotLS0gYS9jcHUvbWM5MzI4L3NlcmlhbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBjcHUvbWM5MzI4L3NlcmlhbC5jCi0gKgotICogKGMpIENvcHlyaWdodCAyMDA0Ci0gKiBUZWNod2FyZSBJbmZvcm1hdGlvbiBUZWNobm9sb2d5LCBJbmMuCi0gKiBodHRwOi8vd3d3LnRlY2h3YXJlLmNvbS50dy8KLSAqCi0gKiBNaW5nLUxlbiBXdSA8bWluZ2xlbl93dUB0ZWNod2FyZS5jb20udHc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG1jOTMyOC5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfVUFSVDEpCi0vKiBHUElPIFBPUlQgQiAJCSovCi0KLSNkZWZpbmUgcmVnX0dJVVMJTVgxX0dJVVNfQwotI2RlZmluZSByZWdfR1BSCQlNWDFfR1BSX0IKLSNkZWZpbmUgR1BJT19NQVNLCTB4RkZGRkUxRkYKLSNkZWZpbmUgVUFSVF9CQVNFCTB4MDAyMDYwMDAKLQotI2VsaWYgZGVmaW5lZCAoQ09ORklHX1VBUlQyKQotLyogR1BJTyBQT1JUIEMgIAkqLwotCi0jZGVmaW5lIHJlZ19HSVVTCU1YMV9HSVVTX0MKLSNkZWZpbmUgcmVnX0dQUgkJTVgxX0dQUl9DCi0jZGVmaW5lIEdQSU9fTUFTSyAJMHgwRkZGRkZGRgotI2RlZmluZSBVQVJUX0JBU0UJMHgyMDcwMDAKLQotI2VuZGlmCi0KLSNkZWZpbmUgcmVnX1VSWEQJKCooKHZvbGF0aWxlIHUzMiAqKShVQVJUX0JBU0UrMHgwMCkpKQotI2RlZmluZSByZWdfVVRYRAkoKigodm9sYXRpbGUgdTMyICopKFVBUlRfQkFTRSsweDQwKSkpCi0jZGVmaW5lIHJlZ19VQ1IxCSgqKCh2b2xhdGlsZSB1MzIgKikoVUFSVF9CQVNFKzB4ODApKSkKLSNkZWZpbmUgcmVnX1VDUjIJKCooKHZvbGF0aWxlIHUzMiAqKShVQVJUX0JBU0UrMHg4NCkpKQotI2RlZmluZSByZWdfVUNSMwkoKigodm9sYXRpbGUgdTMyICopKFVBUlRfQkFTRSsweDg4KSkpCi0jZGVmaW5lIHJlZ19VQ1I0CSgqKCh2b2xhdGlsZSB1MzIgKikoVUFSVF9CQVNFKzB4OEMpKSkKLSNkZWZpbmUgcmVnX1VGQ1IJKCooKHZvbGF0aWxlIHUzMiAqKShVQVJUX0JBU0UrMHg5MCkpKQotI2RlZmluZSByZWdfVVNSMQkoKigodm9sYXRpbGUgdTMyICopKFVBUlRfQkFTRSsweDk0KSkpCi0jZGVmaW5lIHJlZ19VU1IyCSgqKCh2b2xhdGlsZSB1MzIgKikoVUFSVF9CQVNFKzB4OTgpKSkKLSNkZWZpbmUgcmVnX1VFU0MJKCooKHZvbGF0aWxlIHUzMiAqKShVQVJUX0JBU0UrMHg5QykpKQotI2RlZmluZSByZWdfVVRJTQkoKigodm9sYXRpbGUgdTMyICopKFVBUlRfQkFTRSsweEEwKSkpCi0jZGVmaW5lIHJlZ19VQklSCSgqKCh2b2xhdGlsZSB1MzIgKikoVUFSVF9CQVNFKzB4QTQpKSkKLSNkZWZpbmUgcmVnX1VCTVIJKCooKHZvbGF0aWxlIHUzMiAqKShVQVJUX0JBU0UrMHhBOCkpKQotI2RlZmluZSByZWdfVUJSQwkoKigodm9sYXRpbGUgdTMyICopKFVBUlRfQkFTRSsweEFDKSkpCi0KLSNkZWZpbmUgVFhGRV9NQVNLCTB4NDAwMCAgCS8qIFR4IGJ1ZmZlciBlbXB0eQkqLwotI2RlZmluZSBSRFJfTUFTSwkweDAwMDEJCS8qIHJlY2VpdmUgZGF0YSByZWFkeQkqLwotCi12b2lkIHNlcmlhbF9zZXRicmcgKHZvaWQpIHsKLQotCS8qIGNvbmZpZyBJL08gcGlucyBmb3IgVUFSVCAJKi8KLQlyZWdfR0lVUyAJJj0gR1BJT19NQVNLOwotCXJlZ19HUFIJCSY9IEdQSU9fTUFTSzsKLQotCS8qIGNvbmZpZyBVQVJUCQkJKi8KLQlyZWdfVUNSMSAJPSA1OwotCXJlZ19VQ1IyIAk9IDB4NDAyNzsKLQlyZWdfVUNSNCAJPSAxOwotCXJlZ19VRkNSIAk9IDB4QTgxOwotCi0JcmVnX1VCSVIgCT0gMHhGOwotCXJlZ19VQk1SIAk9IDB4OEE7Ci0JcmVnX1VCUkMgCT0gODsKLX0KLQotLyoKLSAqIEluaXRpYWxpc2UgdGhlIHNlcmlhbCBwb3J0IHdpdGggdGhlIGdpdmVuIGJhdWRyYXRlLiBUaGUgc2V0dGluZ3MKLSAqIGFyZSBhbHdheXMgOCBkYXRhIGJpdHMsIG5vIHBhcml0eSwgMSBzdG9wIGJpdCwgbm8gc3RhcnQgYml0cy4KLSAqCi0gKi8KLQotaW50IHNlcmlhbF9pbml0ICh2b2lkKSB7Ci0Jc2VyaWFsX3NldGJyZyAoKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBSZWFkIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgc2VyaWFsIHBvcnQuIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwCi0gKiBvdGhlcndpc2UuIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIHN1Y2Nlc2Z1bGwsIHRoZSBjaGFyYWN0ZXIgcmVhZCBpcwotICogd3JpdHRlbiBpbnRvIGl0cyBhcmd1bWVudCBjLgotICovCi1pbnQgc2VyaWFsX2dldGMgKHZvaWQpIHsKLQotCXdoaWxlICghKHJlZ19VU1IyICYgUkRSX01BU0spKSA7IAkvKiB3YWl0IHVudGlsIFJEUiBiaXQgc2V0IAkJKi8KLQotCXJldHVybiAodTgpcmVnX1VSWEQ7Ci19Ci0KLS8qCi0gKiBPdXRwdXQgYSBzaW5nbGUgYnl0ZSB0byB0aGUgc2VyaWFsIHBvcnQuCi0gKi8KLXZvaWQgc2VyaWFsX3B1dGMgKGNvbnN0IGNoYXIgYykgewotCi0Jd2hpbGUgKCEocmVnX1VTUjIgJiBUWEZFX01BU0spKTsJLyogd2FpdCB1bnRpbCBUWEZFIGJpdCBzZXQJCSovCi0KLQlyZWdfVVRYRCA9ICh1MTYpIGM7Ci0KLQlpZiAoYyA9PSAnXG4nKQl7CQkJLyogY2FycmlhZ2UgcmV0dXJuID8gYXBwZW5kIGxpbmUtZmVlZAkqLwotCQl3aGlsZSAoIShyZWdfVVNSMiAmIFRYRkVfTUFTSykpOwkvKiB3YWl0IHVudGlsIFRYRkUgYml0IHNldAkqLwotCQlyZWdfVVRYRCA9ICdccic7Ci0JfQotCi19Ci0KLS8qCi0gKiBUZXN0IHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMgaW4gdGhlIFJYIGJ1ZmZlcgotICovCi1pbnQgc2VyaWFsX3RzdGMgKHZvaWQpIHsKLQlyZXR1cm4gcmVnX1VTUjIgJiBSRFJfTUFTSzsKLX0KLQotdm9pZCBzZXJpYWxfcHV0cyAoY29uc3QgY2hhciAqcykgewotCXdoaWxlICgqcykgewotCQlzZXJpYWxfcHV0YyAoKnMrKyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvY3B1L21jOTMyOC9zdGFydC5TIGIvY3B1L21jOTMyOC9zdGFydC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGZjZTEyLi4wMDAwMDAwCi0tLSBhL2NwdS9tYzkzMjgvc3RhcnQuUworKysgL2Rldi9udWxsCkBAIC0xLDM4OCArMCwwIEBACi0vKgotICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTkyMCBDUFUtY29yZQotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdy9mdlciA8bWFnQHN5c2dvLmRlPgotICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDAyCUdhcnkgSmVubmVqb2huIDxnakBkZW54LmRlPgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2luY2x1ZGUgPHZlcnNpb24uaD4KLQotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBKdW1wIHZlY3RvciB0YWJsZSBhcyBpbiB0YWJsZSAzLjEgaW4gWzFdCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0KLS5nbG9ibCBfc3RhcnQKLV9zdGFydDoJYiAgICAgICByZXNldAotCWxkcglwYywgX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgotCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAotCWxkcglwYywgX3ByZWZldGNoX2Fib3J0Ci0JbGRyCXBjLCBfZGF0YV9hYm9ydAotCWxkcglwYywgX25vdF91c2VkCi0JbGRyCXBjLCBfaXJxCi0JbGRyCXBjLCBfZmlxCi0KLV91bmRlZmluZWRfaW5zdHJ1Y3Rpb246CS53b3JkIHVuZGVmaW5lZF9pbnN0cnVjdGlvbgotX3NvZnR3YXJlX2ludGVycnVwdDoJLndvcmQgc29mdHdhcmVfaW50ZXJydXB0Ci1fcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Ci1fZGF0YV9hYm9ydDoJCS53b3JkIGRhdGFfYWJvcnQKLV9ub3RfdXNlZDoJCS53b3JkIG5vdF91c2VkCi1faXJxOgkJCS53b3JkIGlycQotX2ZpcToJCQkud29yZCBmaXEKLQotCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKLQotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKLSAqCi0gKiBkbyBpbXBvcnRhbnQgaW5pdCBvbmx5IGlmIHdlIGRvbid0IHN0YXJ0IGZyb20gbWVtb3J5IQotICogcmVsb2NhdGUgYXJtYm9vdCB0byByYW0KLSAqIHNldHVwIHN0YWNrCi0gKiBqdW1wIHRvIHNlY29uZCBzdGFnZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotX1RFWFRfQkFTRToKLQkud29yZAlURVhUX0JBU0UKLQotLmdsb2JsIF9hcm1ib290X3N0YXJ0Ci1fYXJtYm9vdF9zdGFydDoKLQkud29yZCBfc3RhcnQKLQotLyoKLSAqIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBib2FyZC1zcGVjaWZpYyBsaW5rZXIgc2NyaXB0LgotICovCi0uZ2xvYmwgX2Jzc19zdGFydAotX2Jzc19zdGFydDoKLQkud29yZCBfX2Jzc19zdGFydAotCi0uZ2xvYmwgX2Jzc19lbmQKLV9ic3NfZW5kOgotCS53b3JkIF9lbmQKLQotI2lmZGVmIENPTkZJR19VU0VfSVJRCi0vKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLwotLmdsb2JsIElSUV9TVEFDS19TVEFSVAotSVJRX1NUQUNLX1NUQVJUOgotCS53b3JkCTB4MGJhZGMwZGUKLQotLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLS5nbG9ibCBGSVFfU1RBQ0tfU1RBUlQKLUZJUV9TVEFDS19TVEFSVDoKLQkud29yZCAweDBiYWRjMGRlCi0jZW5kaWYKLQotCi0vKgotICogdGhlIGFjdHVhbCByZXNldCBjb2RlCi0gKi8KLQotcmVzZXQ6Ci0JLyoKLQkgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCi0JICovCi0JbXJzCXIwLGNwc3IKLQliaWMJcjAscjAsIzB4MWYKLQlvcnIJcjAscjAsIzB4ZDMKLQltc3IJY3BzcixyMAotCi0JLyoKLQkgKiB3ZSBkbyBzeXMtY3JpdGljYWwgaW5pdHMgb25seSBhdCByZWJvb3QsCi0JICogbm90IHdoZW4gYm9vdGluZyBmcm9tIHJhbSEKLQkgKi8KLSNpZmRlZiBDT05GSUdfSU5JVF9DUklUSUNBTAotCWJsCWNwdV9pbml0X2NyaXQKLSNlbmRpZgotCi1yZWxvY2F0ZToJCQkJLyogcmVsb2NhdGUgVS1Cb290IHRvIFJBTQkgICAgKi8KLQlhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KLQlsZHIJcjEsIF9URVhUX0JBU0UJCS8qIHRlc3QgaWYgd2UgcnVuIGZyb20gZmxhc2ggb3IgUkFNICovCi0JY21wICAgICByMCwgcjEgICAgICAgICAgICAgICAgICAvKiBkb24ndCByZWxvYyBkdXJpbmcgZGVidWcgICAgICAgICAqLwotCWJlcSAgICAgc3RhY2tfc2V0dXAKLQotCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKLQlsZHIJcjMsIF9ic3Nfc3RhcnQKLQlzdWIJcjIsIHIzLCByMgkJLyogcjIgPC0gc2l6ZSBvZiBhcm1ib290ICAgICAgICAgICAgKi8KLQlhZGQJcjIsIHIwLCByMgkJLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzICAgICAgICAgKi8KLQotY29weV9sb29wOgotCWxkbWlhCXIwISwge3IzLXIxMH0JCS8qIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdICAgICovCi0Jc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KLQljbXAJcjAsIHIyCQkJLyogdW50aWwgc291cmNlIGVuZCBhZGRyZWVlIFtyMl0gICAgKi8KLQlibGUJY29weV9sb29wCi0KLQkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCi1zdGFja19zZXR1cDoKLQlsZHIJcjAsIF9URVhUX0JBU0UJCS8qIHVwcGVyIDEyOCBLaUI6IHJlbG9jYXRlZCB1Ym9vdCAgICovCi0Jc3ViCXIwLCByMCwgI0NGR19NQUxMT0NfTEVOCS8qIG1hbGxvYyBhcmVhICAgICAgICAgICAgICAgICAgICAgICovCi0Jc3ViCXIwLCByMCwgI0NGR19HQkxfREFUQV9TSVpFIC8qIGJkaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZkZWYgQ09ORklHX1VTRV9JUlEKLQlzdWIJcjAsIHIwLCAjKENPTkZJR19TVEFDS1NJWkVfSVJRK0NPTkZJR19TVEFDS1NJWkVfRklRKQotI2VuZGlmCi0Jc3ViCXNwLCByMCwgIzEyCQkvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAgICAqLwotCi1jbGVhcl9ic3M6Ci0JbGRyCXIwLCBfYnNzX3N0YXJ0CQkvKiBmaW5kIHN0YXJ0IG9mIGJzcyBzZWdtZW50ICAgICAgICAqLwotCWxkcglyMSwgX2Jzc19lbmQJCS8qIHN0b3AgaGVyZSAgICAgICAgICAgICAgICAgICAgICAgICovCi0JbW92IAlyMiwgIzB4MDAwMDAwMDAJCS8qIGNsZWFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLWNsYnNzX2w6c3RyCXIyLCBbcjBdCQkvKiBjbGVhciBsb29wLi4uICAgICAgICAgICAgICAgICAgICAqLwotCWFkZAlyMCwgcjAsICM0Ci0JY21wCXIwLCByMQotCWJuZQljbGJzc19sCi0KLQlsZHIJcGMsIF9zdGFydF9hcm1ib290Ci0KLV9zdGFydF9hcm1ib290Ogkud29yZCBzdGFydF9hcm1ib290Ci0KLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ1BVX2luaXRfY3JpdGljYWwgcmVnaXN0ZXJzCi0gKgotICogc2V0dXAgaW1wb3J0YW50IHJlZ2lzdGVycwotICogc2V0dXAgbWVtb3J5IHRpbWluZwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotCi1jcHVfaW5pdF9jcml0OgotCS8qCi0JICogZmx1c2ggdjQgSS9EIGNhY2hlcwotCSAqLwotCW1vdglyMCwgIzAKLQltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCi0JbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkvKiBmbHVzaCB2NCBUTEIgKi8KLQotCS8qCi0JICogZGlzYWJsZSBNTVUgc3R1ZmYgYW5kIGNhY2hlcwotCSAqLwotCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKLQliaWMJcjAsIHIwLCAjMHgwMDAwMjMwMAlAIGNsZWFyIGJpdHMgMTMsIDk6OCAoLS1WLSAtLVJTKQotCWJpYwlyMCwgcjAsICMweDAwMDAwMDg3CUAgY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkKLQlvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMiAoQSkgQWxpZ24KLQlvcnIJcjAsIHIwLCAjMHgwMDAwMTAwMAlAIHNldCBiaXQgMTIgKEkpIEktQ2FjaGUKLQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCi0KLQotCS8qCi0JICogYmVmb3JlIHJlbG9jYXRpbmcsIHdlIGhhdmUgdG8gc2V0dXAgUkFNIHRpbWluZwotCSAqIGJlY2F1c2UgbWVtb3J5IHRpbWluZyBpcyBib2FyZC1kZXBlbmRlbmQsIHlvdSB3aWxsCi0JICogZmluZCBhIG1lbXNldHVwLlMgaW4geW91ciBib2FyZCBkaXJlY3RvcnkuCi0JICovCi0JbW92CWlwLCBscgotCWJsCW1lbXNldHVwCi0JbW92CWxyLCBpcAotCi0JbW92CXBjLCBscgotCi0KLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEludGVycnVwdCBoYW5kbGluZwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotQAotQCBJUlEgc3RhY2sgZnJhbWUuCi1ACi0jZGVmaW5lIFNfRlJBTUVfU0laRQk3MgotCi0jZGVmaW5lIFNfT0xEX1IwCTY4Ci0jZGVmaW5lIFNfUFNSCQk2NAotI2RlZmluZSBTX1BDCQk2MAotI2RlZmluZSBTX0xSCQk1NgotI2RlZmluZSBTX1NQCQk1MgotCi0jZGVmaW5lIFNfSVAJCTQ4Ci0jZGVmaW5lIFNfRlAJCTQ0Ci0jZGVmaW5lIFNfUjEwCQk0MAotI2RlZmluZSBTX1I5CQkzNgotI2RlZmluZSBTX1I4CQkzMgotI2RlZmluZSBTX1I3CQkyOAotI2RlZmluZSBTX1I2CQkyNAotI2RlZmluZSBTX1I1CQkyMAotI2RlZmluZSBTX1I0CQkxNgotI2RlZmluZSBTX1IzCQkxMgotI2RlZmluZSBTX1IyCQk4Ci0jZGVmaW5lIFNfUjEJCTQKLSNkZWZpbmUgU19SMAkJMAotCi0jZGVmaW5lIE1PREVfU1ZDIDB4MTMKLSNkZWZpbmUgSV9CSVQJIDB4ODAKLQotLyoKLSAqIHVzZSBiYWRfc2F2ZV91c2VyX3JlZ3MgZm9yIGFib3J0L3ByZWZldGNoL3VuZGVmL3N3aSAuLi4KLSAqIHVzZSBpcnFfc2F2ZV91c2VyX3JlZ3MgLyBpcnFfcmVzdG9yZV91c2VyX3JlZ3MgZm9yIElSUS9GSVEgaGFuZGxpbmcKLSAqLwotCi0JLm1hY3JvCWJhZF9zYXZlX3VzZXJfcmVncwotCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKLQlzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMC1yMTIKLQlsZHIJcjIsIF9hcm1ib290X3N0YXJ0Ci0Jc3ViCXIyLCByMiwgIyhDT05GSUdfU1RBQ0tTSVpFK0NGR19NQUxMT0NfTEVOKQotCXN1YglyMiwgcjIsICMoQ0ZHX0dCTF9EQVRBX1NJWkUrOCkgIEAgc2V0IGJhc2UgMiB3b3JkcyBpbnRvIGFib3J0IHN0YWNrCi0JbGRtaWEJcjIsIHtyMiAtIHIzfQkJCUAgZ2V0IHBjLCBjcHNyCi0JYWRkCXIwLCBzcCwgI1NfRlJBTUVfU0laRQkJQCByZXN0b3JlIHNwX1NWQwotCi0JYWRkCXI1LCBzcCwgI1NfU1AKLQltb3YJcjEsIGxyCi0Jc3RtaWEJcjUsIHtyMCAtIHIzfQkJCUAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IKLQltb3YJcjAsIHNwCi0JLmVuZG0KLQotCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKLQlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCi0Jc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCi0JYWRkICAgICByOCwgc3AsICNTX1BDCi0Jc3RtZGIgICByOCwge3NwLCBscn1eICAgICAgICAgICAgICAgICAgIEAgQ2FsbGluZyBTUCwgTFIKLQlzdHIgICAgIGxyLCBbcjgsICMwXSAgICAgICAgICAgICAgICAgICAgQCBTYXZlIGNhbGxpbmcgUEMKLQltcnMgICAgIHI2LCBzcHNyCi0Jc3RyICAgICByNiwgW3I4LCAjNF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBDUFNSCi0Jc3RyICAgICByMCwgW3I4LCAjOF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBPTERfUjAKLQltb3YJcjAsIHNwCi0JLmVuZG0KLQotCS5tYWNybwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKLQlsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgQ2FsbGluZyByMCAtIGxyCi0JbW92CXIwLCByMAotCWxkcglsciwgW3NwLCAjU19QQ10JCQlAIEdldCBQQwotCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUKLQlzdWJzCXBjLCBsciwgIzQJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCi0JLmVuZG0KLQotCS5tYWNybyBnZXRfYmFkX3N0YWNrCi0JbGRyCXIxMywgX2FybWJvb3Rfc3RhcnQJCUAgc2V0dXAgb3VyIG1vZGUgc3RhY2sKLQlzdWIJcjEzLCByMTMsICMoQ09ORklHX1NUQUNLU0laRStDRkdfTUFMTE9DX0xFTikKLQlzdWIJcjEzLCByMTMsICMoQ0ZHX0dCTF9EQVRBX1NJWkUrOCkgQCByZXNlcnZlZCBhIGNvdXBsZSBzcG90cyBpbiBhYm9ydCBzdGFjawotCi0Jc3RyCWxyLCBbcjEzXQkJCUAgc2F2ZSBjYWxsZXIgbHIgLyBzcHNyCi0JbXJzCWxyLCBzcHNyCi0Jc3RyICAgICBsciwgW3IxMywgIzRdCi0KLQltb3YJcjEzLCAjTU9ERV9TVkMJCQlAIHByZXBhcmUgU1ZDLU1vZGUKLQlAIG1zcglzcHNyX2MsIHIxMwotCW1zcglzcHNyLCByMTMKLQltb3YJbHIsIHBjCi0JbW92cwlwYywgbHIKLQkuZW5kbQotCi0JLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjawotCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCi0JLmVuZG0KLQotCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKLQlsZHIJc3AsIEZJUV9TVEFDS19TVEFSVAotCS5lbmRtCi0KLS8qCi0gKiBleGNlcHRpb24gaGFuZGxlcnMKLSAqLwotCS5hbGlnbiAgNQotdW5kZWZpbmVkX2luc3RydWN0aW9uOgotCWdldF9iYWRfc3RhY2sKLQliYWRfc2F2ZV91c2VyX3JlZ3MKLQlibCAJZG9fdW5kZWZpbmVkX2luc3RydWN0aW9uCi0KLQkuYWxpZ24JNQotc29mdHdhcmVfaW50ZXJydXB0OgotCWdldF9iYWRfc3RhY2sKLQliYWRfc2F2ZV91c2VyX3JlZ3MKLQlibCAJZG9fc29mdHdhcmVfaW50ZXJydXB0Ci0KLQkuYWxpZ24JNQotcHJlZmV0Y2hfYWJvcnQ6Ci0JZ2V0X2JhZF9zdGFjawotCWJhZF9zYXZlX3VzZXJfcmVncwotCWJsIAlkb19wcmVmZXRjaF9hYm9ydAotCi0JLmFsaWduCTUKLWRhdGFfYWJvcnQ6Ci0JZ2V0X2JhZF9zdGFjawotCWJhZF9zYXZlX3VzZXJfcmVncwotCWJsIAlkb19kYXRhX2Fib3J0Ci0KLQkuYWxpZ24JNQotbm90X3VzZWQ6Ci0JZ2V0X2JhZF9zdGFjawotCWJhZF9zYXZlX3VzZXJfcmVncwotCWJsIAlkb19ub3RfdXNlZAotCi0jaWZkZWYgQ09ORklHX1VTRV9JUlEKLQotCS5hbGlnbgk1Ci1pcnE6Ci0JZ2V0X2lycV9zdGFjawotCWlycV9zYXZlX3VzZXJfcmVncwotCWJsIAlkb19pcnEKLQlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKLQotCS5hbGlnbgk1Ci1maXE6Ci0JZ2V0X2ZpcV9zdGFjawotCS8qIHNvbWVvbmUgb3VnaHQgdG8gd3JpdGUgYSBtb3JlIGVmZmljdGlvbiBmaXFfc2F2ZV91c2VyX3JlZ3MgKi8KLQlpcnFfc2F2ZV91c2VyX3JlZ3MKLQlibCAJZG9fZmlxCi0JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCi0KLSNlbHNlCi0KLQkuYWxpZ24JNQotaXJxOgotCWdldF9iYWRfc3RhY2sKLQliYWRfc2F2ZV91c2VyX3JlZ3MKLQlibCAJZG9faXJxCi0KLQkuYWxpZ24JNQotZmlxOgotCWdldF9iYWRfc3RhY2sKLQliYWRfc2F2ZV91c2VyX3JlZ3MKLQlibCAJZG9fZmlxCi0KLSNlbmRpZgotCi0JLmFsaWduCTUKLS5nbG9ibCByZXNldF9jcHUKLXJlc2V0X2NwdToKLQltb3YgICAgIGlwLCAjMAotCW1jciAgICAgcDE1LCAwLCBpcCwgYzcsIGM3LCAwICAgICAgICAgICBAIGludmFsaWRhdGUgY2FjaGUKLQltY3IgICAgIHAxNSwgMCwgaXAsIGM4LCBjNywgMCAgICAgICAgICAgQCBmbHVzaCBUTEIgKHY0KQotCW1yYyAgICAgcDE1LCAwLCBpcCwgYzEsIGMwLCAwICAgICAgICAgICBAIGdldCBjdHJsIHJlZ2lzdGVyCi0JYmljICAgICBpcCwgaXAsICMweDAwMGYgICAgICAgICAgICAgICAgIEAgLi4uLi4uLi4uLi4ud2NhbQotCWJpYyAgICAgaXAsIGlwLCAjMHgyMTAwICAgICAgICAgICAgICAgICBAIC4udi4uLi5zLi4uLi4uLi4KLQltY3IgICAgIHAxNSwgMCwgaXAsIGMxLCBjMCwgMCAgICAgICAgICAgQCBjdHJsIHJlZ2lzdGVyCi0JbW92ICAgICBwYywgcjAKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2NwdV9pbml0LmMgYi9jcHUvbXBjODI0eC9jcHVfaW5pdC5jCmluZGV4IDA4ZjVjNGEuLmQwYzdhM2IgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzgyNHgvY3B1X2luaXQuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKIAlDT05GSUdfUkVBRF9CWVRFKFBDTUJDUix2YWwpOwogCS8qIGluIG9yZGVyIG5vdCB0byBjb3JydXB0IGRhdGEgd2hpY2ggaXMgYmVpbmcgcmVhZCBvdmVyIHRoZSBQQ0kgYnVzCi0JKiB3aXRoIHRoZSBQUEMgYXMgbWFzdGVyLCB3ZSBuZWVkIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFBDTVJCcyB0byAxLAorCSogd2l0aCB0aGUgUFBDIGFzIHNsYXZlLCB3ZSBuZWVkIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFBDTVJCcyB0byAxLAogCSogNC4xMSBpbiB0aGUgIHByb2Nlc3NvciB1c2VyIG1hbnVhbAogCSogKi8KIApAQCAtMTE3LDYgKzExNywxMCBAQAogI2Vsc2UKIAlDT05GSUdfV1JJVEVfQllURShQQ01CQ1IsKHZhbHwweDgwKSk7IC8qIDIgUENNUkJzICovCiAJQ09ORklHX1dSSVRFX0JZVEUoUENNQkNSLCh2YWx8MHg0MCkpOyAvKiAzIFBDTVJCcyAqLworCS8qIGRlZmF1bHQsIDQgUENNUkJzIGFyZSB1c2VkLCBzbyBkb24ndCBjaGFuZ2UgdGhlCisJICogcmVnaXN0ZXIgaXMgdGhpcyBpcyBfcmVhbGx5XyB3aGF0IHlvdSB3YW50OiBkYXRhCisJICogY29ycnVwdGlvbiB3aXRoIG5vIHBlcmZvcm1hbmNlIGdhaW4KKwkgKi8KICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L3NwZWVkLmMgYi9jcHUvbXBjODV4eC9zcGVlZC5jCmluZGV4IGQ0MGNkOGMuLjc4N2Y3ZmEgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L3NwZWVkLmMKKysrIGIvY3B1L21wYzg1eHgvc3BlZWQuYwpAQCAtMzMsNyArMzMsNiBAQAogCiB2b2lkIGdldF9zeXNfaW5mbyAoc3lzX2luZm9fdCAqIHN5c0luZm8pCiB7Ci0JREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAJdm9sYXRpbGUgaW1tYXBfdCAgICAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOwogCXVpbnQgcGxhdF9yYXRpbyxlNTAwX3JhdGlvOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9zY2MuYyBiL2NwdS9tcGM4eHgvc2NjLmMKaW5kZXggNzhiMmY5OS4uNmI5MTEwZiAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9zY2MuYworKysgYi9jcHUvbXBjOHh4L3NjYy5jCkBAIC0xOTMsNiArMTkzLDEwIEBACiAKIAl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19MV01PTikKKwlyZXNldF9waHkoKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0ZBRFMKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4NnhBRFMpIHx8IGRlZmluZWQoQ09ORklHX01QQzg2MFQpCiAJLyogVGhlIE1QQzg2eEFEUy9GQURTODYwVCBkb24ndCB1c2UgdGhlIE1PREVNX0VOIG9yIERBVEFfVk9JQ0Ugc2lnbmFscy4gKi8KQEAgLTU1MCw2ICs1NTQsOCBAQAogCiAJaW1tci0+aW1fY3BtLmNwX3NjY1tTQ0NfRU5FVF0uc2NjX2dzbXJsICY9CiAJCX4oU0NDX0dTTVJMX0VOUiB8IFNDQ19HU01STF9FTlQpOworCisJaW1tci0+aW1faW9wb3J0LmlvcF9wY3NvICAmPSAgfihQQ19FTkVUX0NMU04gfCBQQ19FTkVUX1JFTkEpOwogfQogCiAjaWYgMApkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9zZXJpYWwuYyBiL2NwdS9tcGM4eHgvc2VyaWFsLmMKaW5kZXggNzFmM2FlMS4uZmEwNDA1ZiAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9zZXJpYWwuYworKysgYi9jcHUvbXBjOHh4L3NlcmlhbC5jCkBAIC0yNCw0OSArMjQsNDQgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tcHJvYy5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxzZXJpYWwuaD4KICNpbmNsdWRlIDx3YXRjaGRvZy5oPgogCiAjaWYgIWRlZmluZWQoQ09ORklHXzh4eF9DT05TX05PTkUpCS8qIE5vIENvbnNvbGUgYXQgYWxsICovCiAKICNpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TTUMxKQkvKiBDb25zb2xlIG9uIFNNQzEgKi8KICNkZWZpbmUJU01DX0lOREVYCTAKLSN1bmRlZiAJU0NDX0lOREVYCiAjZGVmaW5lIFBST0ZGX1NNQwlQUk9GRl9TTUMxCiAjZGVmaW5lIENQTV9DUl9DSF9TTUMJQ1BNX0NSX0NIX1NNQzEKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU01DMikJLyogQ29uc29sZSBvbiBTTUMyICovCiAjZGVmaW5lIFNNQ19JTkRFWAkxCi0jdW5kZWYgCVNDQ19JTkRFWAogI2RlZmluZSBQUk9GRl9TTUMJUFJPRkZfU01DMgogI2RlZmluZSBDUE1fQ1JfQ0hfU01DCUNQTV9DUl9DSF9TTUMyCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NDQzEpCS8qIENvbnNvbGUgb24gU0NDMSAqLwotI3VuZGVmICBTTUNfSU5ERVgKKyNlbmRpZiAvKiBDT05GSUdfOHh4X0NPTlNfU01DeCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDMSkJLyogQ29uc29sZSBvbiBTQ0MxICovCiAjZGVmaW5lIFNDQ19JTkRFWAkwCiAjZGVmaW5lIFBST0ZGX1NDQwlQUk9GRl9TQ0MxCiAjZGVmaW5lIENQTV9DUl9DSF9TQ0MJQ1BNX0NSX0NIX1NDQzEKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDMikJLyogQ29uc29sZSBvbiBTQ0MyICovCi0jdW5kZWYgIFNNQ19JTkRFWAogI2RlZmluZSBTQ0NfSU5ERVgJMQogI2RlZmluZSBQUk9GRl9TQ0MJUFJPRkZfU0NDMgogI2RlZmluZSBDUE1fQ1JfQ0hfU0NDCUNQTV9DUl9DSF9TQ0MyCiAKICNlbGlmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NDQzMpCS8qIENvbnNvbGUgb24gU0NDMyAqLwotI3VuZGVmICBTTUNfSU5ERVgKICNkZWZpbmUgU0NDX0lOREVYCTIKICNkZWZpbmUgUFJPRkZfU0NDCVBST0ZGX1NDQzMKICNkZWZpbmUgQ1BNX0NSX0NIX1NDQwlDUE1fQ1JfQ0hfU0NDMwogCiAjZWxpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0M0KQkvKiBDb25zb2xlIG9uIFNDQzQgKi8KLSN1bmRlZiAgU01DX0lOREVYCiAjZGVmaW5lIFNDQ19JTkRFWAkzCiAjZGVmaW5lIFBST0ZGX1NDQwlQUk9GRl9TQ0M0CiAjZGVmaW5lIENQTV9DUl9DSF9TQ0MJQ1BNX0NSX0NIX1NDQzQKIAotI2Vsc2UgLyogQ09ORklHXzh4eF9DT05TXz8gKi8KLSNlcnJvciAiY29uc29sZSBub3QgY29ycmVjdGx5IGRlZmluZWQiCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfOHh4X0NPTlNfU0NDeCAqLwogCiBzdGF0aWMgdm9pZCBzZXJpYWxfc2V0ZGl2aXNvcih2b2xhdGlsZSBjcG04eHhfdCAqY3ApCiB7CkBAIC05Niw3ICs5MSwyMyBAQAogICogYXMgc2VyaWFsIGNvbnNvbGUgaW50ZXJmYWNlLgogICovCiAKLWludCBzZXJpYWxfaW5pdCAodm9pZCkKK3N0YXRpYyB2b2lkIHNtY19zZXRicmcgKHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGNwbTh4eF90ICpjcCA9ICYoaW0tPmltX2NwbSk7CisKKwkvKiBTZXQgdXAgdGhlIGJhdWQgcmF0ZSBnZW5lcmF0b3IuCisJICogU2VlIDh4eF9pby9jb21tcHJvYy5jIGZvciBkZXRhaWxzLgorCSAqCisJICogV2lyZSBCUkcxIHRvIFNNQ3gKKwkgKi8KKworCWNwLT5jcF9zaW1vZGUgPSAweDAwMDAwMDAwOworCisJc2VyaWFsX3NldGRpdmlzb3IoY3ApOworfQorCitzdGF0aWMgaW50IHNtY19pbml0ICh2b2lkKQogewogCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBzbWNfdCAqc3A7CkBAIC0yMTcsNyArMjI4LDcgQEAKIAogCS8qIFNldCB1cCB0aGUgYmF1ZCByYXRlIGdlbmVyYXRvci4KIAkqLwotCXNlcmlhbF9zZXRicmcgKCk7CisJc21jX3NldGJyZyAoKTsKIAogCS8qIE1ha2UgdGhlIGZpcnN0IGJ1ZmZlciB0aGUgb25seSBidWZmZXIuCiAJKi8KQEAgLTI0NywzOSArMjU4LDggQEAKIAlyZXR1cm4gKDApOwogfQogCi12b2lkCi1zZXJpYWxfc2V0YnJnICh2b2lkKQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjcG04eHhfdCAqY3AgPSAmKGltLT5pbV9jcG0pOwotCi0JLyogU2V0IHVwIHRoZSBiYXVkIHJhdGUgZ2VuZXJhdG9yLgotCSAqIFNlZSA4eHhfaW8vY29tbXByb2MuYyBmb3IgZGV0YWlscy4KLQkgKgotCSAqIFdpcmUgQlJHMSB0byBTTUN4Ci0JICovCi0KLQljcC0+Y3Bfc2ltb2RlID0gMHgwMDAwMDAwMDsKLQotCXNlcmlhbF9zZXRkaXZpc29yKGNwKTsKLX0KLQotI2lmZGVmIENPTkZJR19NT0RFTV9TVVBQT1JUCi12b2lkIGRpc2FibGVfcHV0Yyh2b2lkKQotewotCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCWdkLT5iZV9xdWlldCA9IDE7Ci19Ci0KLXZvaWQgZW5hYmxlX3B1dGModm9pZCkKLXsKLQlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQlnZC0+YmVfcXVpZXQgPSAwOwotfQotI2VuZGlmCi0KLXZvaWQKLXNlcmlhbF9wdXRjKGNvbnN0IGNoYXIgYykKK3N0YXRpYyB2b2lkCitzbWNfcHV0Yyhjb25zdCBjaGFyIGMpCiB7CiAJdm9sYXRpbGUgY2JkX3QJCSp0YmRmOwogCXZvbGF0aWxlIGNoYXIJCSpidWY7CkBAIC0yOTUsNyArMjc1LDcgQEAKICNlbmRpZgogCiAJaWYgKGMgPT0gJ1xuJykKLQkJc2VyaWFsX3B1dGMgKCdccicpOworCQlzbWNfcHV0YyAoJ1xyJyk7CiAKIAl1cCA9IChzbWNfdWFydF90ICopJmNwbXAtPmNwX2RwYXJhbVtQUk9GRl9TTUNdOwogCkBAIC0zMTcsOCArMjk3LDE2IEBACiAJfQogfQogCi1pbnQKLXNlcmlhbF9nZXRjKHZvaWQpCitzdGF0aWMgdm9pZAorc21jX3B1dHMgKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXNtY19wdXRjICgqcysrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NtY19nZXRjKHZvaWQpCiB7CiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJ1ZjsKQEAgLTM0NCw4ICszMzIsOCBAQAogCXJldHVybihjKTsKIH0KIAotaW50Ci1zZXJpYWxfdHN0YygpCitzdGF0aWMgaW50CitzbWNfdHN0Yyh2b2lkKQogewogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKQEAgLTM1OSw5ICszNDcsNDEgQEAKIAlyZXR1cm4oIShyYmRmLT5jYmRfc2MgJiBCRF9TQ19FTVBUWSkpOwogfQogCi0jZWxzZQkvKiAhIENPTkZJR184eHhfQ09OU19TTUMxLCBDT05GSUdfOHh4X0NPTlNfU01DMiAqLworc3RydWN0IHNlcmlhbF9kZXZpY2Ugc2VyaWFsX3NtY19kZXZpY2UgPQoreworCSJzZXJpYWxfc21jIiwKKwkiU01DIiwKKwlzbWNfaW5pdCwKKwlzbWNfc2V0YnJnLAorCXNtY19nZXRjLAorCXNtY190c3RjLAorCXNtY19wdXRjLAorCXNtY19wdXRzLAorfTsKIAotaW50IHNlcmlhbF9pbml0ICh2b2lkKQorI2VuZGlmIC8qIENPTkZJR184eHhfQ09OU19TTUMxIHx8IENPTkZJR184eHhfQ09OU19TTUMyICovCisKKyNpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MxKSB8fCBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MyKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDMykgfHwgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDNCkKKworc3RhdGljIHZvaWQKK3NjY19zZXRicmcgKHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGNwbTh4eF90ICpjcCA9ICYoaW0tPmltX2NwbSk7CisKKwkvKiBTZXQgdXAgdGhlIGJhdWQgcmF0ZSBnZW5lcmF0b3IuCisJICogU2VlIDh4eF9pby9jb21tcHJvYy5jIGZvciBkZXRhaWxzLgorCSAqCisJICogV2lyZSBCUkcxIHRvIFNDQ3gKKwkgKi8KKworCWNwLT5jcF9zaWNyICY9IH4oMHgwMDAwMDBGRiA8PCAoOCAqIFNDQ19JTkRFWCkpOworCisJc2VyaWFsX3NldGRpdmlzb3IoY3ApOworfQorCitzdGF0aWMgaW50IHNjY19pbml0ICh2b2lkKQogewogCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBzY2NfdCAqc3A7CkBAIC00MjYsNyArNDQ2LDcgQEAKICNpZmRlZiBDRkdfQUxMT0NfRFBSQU0KIAlkcGFkZHIgPSBkcHJhbV9hbGxvY19hbGlnbiAoc2l6ZW9mKGNiZF90KSoyICsgMiwgOCkgOwogI2Vsc2UKLQlkcGFkZHIgPSBDUE1fU0VSSUFMX0JBU0UgOworCWRwYWRkciA9IENQTV9TRVJJQUwyX0JBU0UgOwogI2VuZGlmCiAKIAkvKiBFbmFibGUgU0RNQS4KQEAgLTQ0Niw3ICs0NjYsNyBAQAogCiAJLyogU2V0IHVwIHRoZSBiYXVkIHJhdGUgZ2VuZXJhdG9yLgogCSovCi0Jc2VyaWFsX3NldGJyZyAoKTsKKwlzY2Nfc2V0YnJnICgpOwogCiAJLyogU2V0IHVwIHRoZSB1YXJ0IHBhcmFtZXRlcnMgaW4gdGhlIHBhcmFtZXRlciByYW0uCiAJKi8KQEAgLTQ5Nyw5ICs1MTcsMTEgQEAKIAogCS8qIFNldCBVQVJUIG1vZGUsIGNsb2NrIGRpdmlkZXIgMTYgb24gVHggYW5kIFJ4CiAJICovCisJc3AtPnNjY19nc21ybCAmPSB+MHhGOwogCXNwLT5zY2NfZ3NtcmwgfD0KIAkJKFNDQ19HU01STF9NT0RFX1VBUlQgfCBTQ0NfR1NNUkxfVERDUl8xNiB8IFNDQ19HU01STF9SRENSXzE2KTsKIAorCXNwLT5zY2NfcHNtciAgPSAwOwogCXNwLT5zY2NfcHNtciAgfD0gU0NVX1BTTVJfQ0w7CiAKIAkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzIGFuZCByZW1vdmUgYW55dGhpbmcgcGVuZGluZy4KQEAgLTUyMSwyNSArNTQzLDggQEAKIAlyZXR1cm4gKDApOwogfQogCi12b2lkCi1zZXJpYWxfc2V0YnJnICh2b2lkKQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjcG04eHhfdCAqY3AgPSAmKGltLT5pbV9jcG0pOwotCi0JLyogU2V0IHVwIHRoZSBiYXVkIHJhdGUgZ2VuZXJhdG9yLgotCSAqIFNlZSA4eHhfaW8vY29tbXByb2MuYyBmb3IgZGV0YWlscy4KLQkgKgotCSAqIFdpcmUgQlJHMSB0byBTQ0N4Ci0JICovCi0KLQljcC0+Y3Bfc2ljciAmPSB+KDB4MDAwMDAwRkYgPDwgKDggKiBTQ0NfSU5ERVgpKTsKLQotCXNlcmlhbF9zZXRkaXZpc29yKGNwKTsKLX0KLQotdm9pZAotc2VyaWFsX3B1dGMoY29uc3QgY2hhciBjKQorc3RhdGljIHZvaWQKK3NjY19wdXRjKGNvbnN0IGNoYXIgYykKIHsKIAl2b2xhdGlsZSBjYmRfdAkJKnRiZGY7CiAJdm9sYXRpbGUgY2hhcgkJKmJ1ZjsKQEAgLTU0Nyw4ICs1NTIsMTUgQEAKIAl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY3BtOHh4X3QJKmNwbXAgPSAmKGltLT5pbV9jcG0pOwogCisjaWZkZWYgQ09ORklHX01PREVNX1NVUFBPUlQKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCWlmIChnZC0+YmVfcXVpZXQpCisJCXJldHVybjsKKyNlbmRpZgorCiAJaWYgKGMgPT0gJ1xuJykKLQkJc2VyaWFsX3B1dGMgKCdccicpOworCQlzY2NfcHV0YyAoJ1xyJyk7CiAKIAl1cCA9IChzY2NfdWFydF90ICopJmNwbXAtPmNwX2RwYXJhbVtQUk9GRl9TQ0NdOwogCkBAIC01NzAsOCArNTgyLDE2IEBACiAJfQogfQogCi1pbnQKLXNlcmlhbF9nZXRjKHZvaWQpCitzdGF0aWMgdm9pZAorc2NjX3B1dHMgKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXNjY19wdXRjICgqcysrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NjY19nZXRjKHZvaWQpCiB7CiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJ1ZjsKQEAgLTU5Nyw4ICs2MTcsOCBAQAogCXJldHVybihjKTsKIH0KIAotaW50Ci1zZXJpYWxfdHN0YygpCitzdGF0aWMgaW50CitzY2NfdHN0Yyh2b2lkKQogewogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSBzY2NfdWFydF90CSp1cDsKQEAgLTYxMiwzNiArNjMyLDY2IEBACiAJcmV0dXJuKCEocmJkZi0+Y2JkX3NjICYgQkRfU0NfRU1QVFkpKTsKIH0KIAotI2VuZGlmCS8qIENPTkZJR184eHhfQ09OU19TTUMxLCBDT05GSUdfOHh4X0NPTlNfU01DMiAqLwotCi0KLXZvaWQKLXNlcmlhbF9wdXRzIChjb25zdCBjaGFyICpzKQorc3RydWN0IHNlcmlhbF9kZXZpY2Ugc2VyaWFsX3NjY19kZXZpY2UgPQogewotCXdoaWxlICgqcykgewotCQlzZXJpYWxfcHV0YyAoKnMrKyk7Ci0JfQorCSJzZXJpYWxfc2NjIiwKKwkiU0NDIiwKKwlzY2NfaW5pdCwKKwlzY2Nfc2V0YnJnLAorCXNjY19nZXRjLAorCXNjY190c3RjLAorCXNjY19wdXRjLAorCXNjY19wdXRzLAorfTsKKworI2VuZGlmCS8qIENPTkZJR184eHhfQ09OU19TQ0N4ICovCisKKyNpZmRlZiBDT05GSUdfTU9ERU1fU1VQUE9SVAordm9pZCBkaXNhYmxlX3B1dGModm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwlnZC0+YmVfcXVpZXQgPSAxOwogfQogCit2b2lkIGVuYWJsZV9wdXRjKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisJZ2QtPmJlX3F1aWV0ID0gMDsKK30KKyNlbmRpZgogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKIAogdm9pZAoga2dkYl9zZXJpYWxfaW5pdCh2b2lkKQogeworCWludCBpID0gLTE7CisKKwlpZiAoc3RyY21wKGRlZmF1bHRfc2VyaWFsX2NvbnNvbGUoKS0+Y3RsciwgIlNNQyIpID09IDApCisJewogI2lmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NNQzEpCi0Jc2VyaWFsX3ByaW50ZigiW29uIFNNQzFdICIpOworCQlpID0gMTsKICNlbGlmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NNQzIpCi0Jc2VyaWFsX3ByaW50ZigiW29uIFNNQzJdICIpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDMSkKLQlzZXJpYWxfcHJpbnRmKCJbb24gU0NDMV0gIik7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MyKQotCXNlcmlhbF9wcmludGYoIltvbiBTQ0MyXSAiKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NDQzMpCi0Jc2VyaWFsX3ByaW50ZigiW29uIFNDQzNdICIpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDNCkKLQlzZXJpYWxfcHJpbnRmKCJbb24gU0NDNF0gIik7CisJCWkgPSAyOwogI2VuZGlmCisJfQorCWVsc2UgaWYgKHN0cmNtcChkZWZhdWx0X3NlcmlhbF9jb25zb2xlKCktPmN0bHIsICJTTUMiKSA9PSAwKQorCXsKKyNpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MxKQorCQlpID0gMTsKKyNlbGlmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NDQzIpCisJCWkgPSAyOworI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDMykKKwkJaSA9IDM7CisjZWxpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0M0KQorCQlpID0gNDsKKyNlbmRpZgorCX0KKworCWlmIChpID49IDApCisJeworCQlzZXJpYWxfcHJpbnRmKCJbb24gJXMlZF0gIiwgZGVmYXVsdF9zZXJpYWxfY29uc29sZSgpLT5jdGxyLCBpKTsKKwl9CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvc3BpLmMgYi9jcHUvbXBjOHh4L3NwaS5jCmluZGV4IDVkNzUyMDcuLjkyMTNkMTAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvc3BpLmMKKysrIGIvY3B1L21wYzh4eC9zcGkuYwpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8cG9zdC5oPgotI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPHNlcmlhbC5oPgogCiAjaWYgKGRlZmluZWQoQ09ORklHX1NQSSkpIHx8IChDT05GSUdfUE9TVCAmIENGR19QT1NUX1NQSSkKIApAQCAtNTQyLDEzICs1NDIsMTMgQEAKIAljcC0+Y3Bfc3Btb2RlICY9IH5TUE1PREVfTE9PUDsKIAogCS8qCi0JICogU0NDMiBFdGhlcm5ldCBwYXJhbWV0ZXIgUkFNIHNwYWNlIG92ZXJsYXBzCisJICogU0NDMiBwYXJhbWV0ZXIgUkFNIHNwYWNlIG92ZXJsYXBzCiAJICogdGhlIFNQSSBwYXJhbWV0ZXIgUkFNIHNwYWNlLiBTbyB3ZSBuZWVkIHRvIHJlc3RvcmUKLQkgKiB0aGUgU0NDMiBjb25maWd1cmF0aW9uIGlmIGl0IGlzIHVzZWQgYnkgVUFSVCBvciBFdGhlcm5ldC4KKwkgKiB0aGUgU0NDMiBjb25maWd1cmF0aW9uIGlmIGl0IGlzIHVzZWQgYnkgVUFSVC4KIAkgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NDQzIpCi0Jc2VyaWFsX2luaXQgKCk7CisjaWYgIWRlZmluZWQoQ09ORklHXzh4eF9DT05TX05PTkUpCisJc2VyaWFsX3JlaW5pdF9hbGwgKCk7CiAjZW5kaWYKIAogCWlmIChyZXMgIT0gMCkgewpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5zZXJpYWxfbXVsdGkgYi9kb2MvUkVBRE1FLnNlcmlhbF9tdWx0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDczMzc2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5zZXJpYWxfbXVsdGkKQEAgLTAsMCArMSwzNyBAQAorVGhlIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNlcmlhbCBpbnRlcmZhY2VzIGFzIGltcGxlbWVudGVkIGlzIG1haW5seQoraW50ZW5kZWQgdG8gYWxsb3cgZm9yIG1vZGVtIGRpYWwtaW4gLyBkaWFsLW91dCB3aGlsZSBzdGlsbCBiZWluZyBhYmxlCit0byB1c2UgYSBzZXJpYWwgY29uc29sZSBvbiBhIChkaWZmZXJlbnQpIHNlcmlhbCBwb3J0LgorCitBdCB0aGUgbW9tZW50LCB0aGUgcG9ydHMgbXVzdCBiZSBzcGxpdCBvbiBhIFNNQyBhbmQgYSBTQ0MgcG9ydCAgb24gIGEKKzh4eCBwcm9jZXNzb3I7IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBub3QgKHlldCkgc3VwcG9ydGVkLgorCitTdXBwb3J0IGZvciBoYXJkd2FyZSBoYW5kc2hha2UgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIHlldCAoYnV0IGlzCitpbiB0aGUgd29ya3MpLgorCisqKSBUaGUgZGVmYXVsdCBjb25zb2xlIGRlcGVuZHMgb24gdGhlIGtleXMgcHJlc3NlZDoKKwktIFNNQyBpZiBrZXlzIG5vdCBwcmVzc2VkIChtb2RlbSBub3QgZW5hYmxlZCkKKwktIFNDQyBpZiBrZXlzIHByZXNzZWQgKG1vZGVtIGVuYWJsZWQpCisKKyopIFRoZSBjb25zb2xlIGNhbiBiZSBzd2l0Y2hlZCB0byBTQ0MgYnkgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKwlzZXRlbnYgc3Rkb3V0IHNlcmlhbF9zY2MKKwlzZXRlbnYgc3RkaW4gc2VyaWFsX3NjYworCXNldGVudiBzdGRlcnIgc2VyaWFsX3NjYworCisqKSBUaGUgY29uc29sZSBjYW4gYmUgc3dpdGNoZWQgdG8gU01DIGJ5IGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCisJc2V0ZW52IHN0ZG91dCBzZXJpYWxfc21jCisJc2V0ZW52IHN0ZGluIHNlcmlhbF9zbWMKKwlzZXRlbnYgc3RkZXJyIHNlcmlhbF9zbWMKKworKikgSWYgYSBmaWxlIGRlc2NyaXB0b3IgaXMgc2V0IHRvICJzZXJpYWwiIHRoZW4gdGhlIGN1cnJlbnQgc2VyaWFsIGRldmljZQord2lsbCBiZSB1c2VkIHdoaWNoLCBpbiB0dXJuLCBjYW4gYmUgc3dpdGNoZWQgYnkgYWJvdmUgY29tbWFuZHMuCisKKyopIFRoZSBiYXVkcmF0ZSBpcyB0aGUgc2FtZSBmb3IgYWxsIHNlcmlhbCBkZXZpY2VzLiBCdXQgaXQgY2FuIGJlIHN3aXRjaGVkCitqdXN0IGFmdGVyIHN3aXRjaGluZyB0aGUgY29uc29sZToKKworCXNldGVudiBzb3V0IHNlcmlhbF9zY2M7IHNldGVudiBiYXVkcmF0ZSAzODQwMAorCitBZnRlciB0aGF0IHByZXNzICdlbnRlcicgYXQgdGhlIFNDQyBjb25zb2xlLiBOb3RlIHRoYXQgYmF1ZHJhdGVzIDwzODQwMAorYXJlIG5vdCBhbGxvd2VkIG9uIExXTU9OIHdpdGggd2F0Y2hkb2cgZW5hYmxlZCAoc2VlIENGR19CQVVEUkFURV9UQUJMRSBpbgoraW5jbHVkZS9jb25maWdzL2x3bW9uLmgpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggMTE3MzhiOS4uYWZjYTcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0yOSwyMyArMjksMjMgQEAKIAogT0JKUwk9IDNjNTg5Lm8gNTcwMXJscy5vIGFsaTUxMngubyBcCiAJICBiY201NzB4Lm8gYmNtNTcweF9hdXRvbmVnLm8gY2ZiX2NvbnNvbGUubyBjZmlfZmxhc2gubyBcCi0JICBjczg5MDAubyBjdDY5MDAwLm8gZGF0YWZsYXNoLm8gZGMyMTE0eC5vCSAgICBcCisJICBjczg5MDAubyBjdDY5MDAwLm8gZGF0YWZsYXNoLm8gZGMyMTE0eC5vIGRtOTAwMHgubyBcCiAJICBlMTAwMC5vIGVlcHJvMTAwLm8gXAogCSAgaTgwNDIubyBpODIzNjUubyBpbmNhLWlwX3N3Lm8ga2V5Ym9hcmQubyBcCiAJICBsYW45MWM5Ni5vIG5hdHNlbWkubyBuZXRhcm1fZXRoLm8gXAotCSAgbnMxNjU1MC5vIG5zODM4MngubyBuczg3MzA4Lm8gXAorCSAgbnMxNjU1MC5vIG5zODM4MngubyBuczg3MzA4Lm8gb21hcDE1MTBfaTJjLm8gXAogCSAgcGNpLm8gcGNpX2F1dG8ubyBwY2lfaW5kaXJlY3QubyBcCiAJICBwY25ldC5vIHBsYjI4MDBfZXRoLm8gXAogCSAgcHMyc2VyLm8gcHMybXVsdC5vIHBjX2tleWIubyBcCiAJICBydGw4MDE5Lm8gcnRsODEzOS5vIHJ0bDgxNjkubyBcCiAJICBzM2MyNHgwX2kyYy5vIHMzYzQ1MTBiX2V0aC5vIHMzYzQ1MTBiX3VhcnQubyBcCiAJICBzZWQxMzgwNi5vIHNlZDE1NngubyBcCi0JICBzZXJpYWwubyBzZXJpYWxfbWF4MzEwMC5vIHNlcmlhbF9wbDAxMC5vIHNlcmlhbF9wbDAxMS5vIFwKLQkgIHNlcmlhbF94dWFydGxpdGUubyBzbDgxMV91c2IubyBcCi0JICBzbWM5MTExMS5vIHNtaUx5bnhFTS5vIHN0YXR1c19sZWQubyBzeW01M2M4eHgubyBcCi0JICB0aV9wY2kxNDEwYS5vIHRpZ29uMy5vIHc4M2M1NTNmLm8gb21hcDE1MTBfaTJjLm8gXAorCSAgc2VyaWFsLm8gc2VyaWFsX2lteC5vIHNlcmlhbF9tYXgzMTAwLm8gXAorCSAgc2VyaWFsX3BsMDEwLm8gc2VyaWFsX3BsMDExLm8gc2VyaWFsX3h1YXJ0bGl0ZS5vIFwKKwkgIHNsODExX3VzYi5vIHNtYzkxMTExLm8gc21pTHlueEVNLm8gc3RhdHVzX2xlZC5vIHN5bTUzYzh4eC5vIFwKKwkgIHRpX3BjaTE0MTBhLm8gdGlnb24zLm8gXAogCSAgdXNiZGNvcmUubyB1c2JkY29yZV9lcDAubyB1c2JkY29yZV9vbWFwMTUxMC5vIHVzYnR0eS5vIFwKLQkgIHZpZGVvbW9kZXMubworCSAgdmlkZW9tb2Rlcy5vIHc4M2M1NTNmLm8KIAogYWxsOgkkKExJQikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZmJfY29uc29sZS5jIGIvZHJpdmVycy9jZmJfY29uc29sZS5jCmluZGV4IDZhOGRmNzkuLjNkMjZhZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2ZiX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NmYl9jb25zb2xlLmMKQEAgLTExNjksNyArMTE2OSw2IEBACiB7CiAJaW50IHNraXBfZGV2X2luaXQ7CiAJZGV2aWNlX3QgY29uc29sZV9kZXY7Ci0JY2hhciAqcGVudjsKIAogCXNraXBfZGV2X2luaXQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtOTAwMHguYyBiL2RyaXZlcnMvZG05MDAweC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDc1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtOTAwMHguYwpAQCAtMCwwICsxLDU5MCBAQAorLyoKKyAgZG05MDAwLmM6IFZlcnNpb24gMS4yIDEyLzE1LzIwMDMKKworCUEgRGF2aWNvbSBETTkwMDAgSVNBIE5JQyBmYXN0IEV0aGVybmV0IGRyaXZlciBmb3IgTGludXguCisJQ29weXJpZ2h0IChDKSAxOTk3ICBTdGVuIFdhbmcKKworCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKwltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisJb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKwlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKwlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKwlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIChDKUNvcHlyaWdodCAxOTk3LTE5OTggREFWSUNPTSBTZW1pY29uZHVjdG9yLEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVjAuMTEJMDYvMjAvMjAwMQlSRUdfMEEgYml0Mz0xLCBkZWZhdWx0IGVuYWJsZSBCUCB3aXRoIERBIG1hdGNoCisJMDYvMjIvMjAwMSAJU3VwcG9ydCBETTk4MDEgcHJvZ3JtbWluZworCSAJIAlFMzogUjI1ID0gKChSMjQgKyBORikgJiAweDAwZmYpIHwgMHhmMDAwCisJCSAJRTQ6IFIyNSA9ICgoUjI0ICsgTkYpICYgMHgwMGZmKSB8IDB4YzIwMAorICAgICAJCVIxNyA9IChSMTcgJiAweGZmZjApIHwgTkYgKyAzCisJCSAJRTU6IFIyNSA9ICgoUjI0ICsgTkYgLSAzKSAmIDB4MDBmZikgfCAweGMyMDAKKyAgICAgCQlSMTcgPSAoUjE3ICYgMHhmZmYwKSB8IE5GCisKK3YxLjAwICAgICAgICAgICAgICAgCW1vZGlmeSBieSBzaW1vbiAyMDAxLjkuNQorCSAgICAgICAgICAgICAgICBjaGFuZ2UgZm9yIGtlcm5lbCAyLjQueAorCit2MS4xICAgMTEvMDkvMjAwMSAgICAgIAlmaXggZm9yY2UgbW9kZSBidWcKKwordjEuMiAgIDAzLzE4LzIwMDMgICAgICAgV2VpbHVuIEh1YW5nIDx3ZWlsdW5faHVhbmdAZGF2aWNvbS5jb20udHc+OgorCQkJRml4ZWQgcGh5IHJlc2V0LgorCQkJQWRkZWQgdHgvcnggMzIgYml0IG1vZGUuCisJCQlDbGVhbmVkIHVwIGZvciBrZXJuZWwgbWVyZ2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAxMi8xNS8yMDAzICAgICAgIEluaXRpYWwgcG9ydCB0byB1LWJvb3QgYnkgU2FzY2hhIEhhdWVyIDxzYXNjaGFoYXVlckB3ZWIuZGU+CisKK1RPRE86IEhvbWVydW4gTklDIGFuZCBsb25ncnVuIE5JQyBhcmUgbm90IGZ1bmN0aW9uYWwsIG9ubHkgaW50ZXJuYWwgYXQgdGhlCisgICAgICBtb21lbnQuCisqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWZkZWYgQ09ORklHX0RSSVZFUl9ETTkwMDAKKworI2luY2x1ZGUgImRtOTAwMHguaCIKKworLyogQm9hcmQvU3lzdGVtL0RlYnVnIGluZm9ybWF0aW9uL2RlZmluaXRpb24gLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIERNOTgwMV9OT0lTRV9GTE9PUgkweDA4CisjZGVmaW5lIERNOTgwMl9OT0lTRV9GTE9PUgkweDA1CisKKy8qICNkZWZpbmUgQ09ORklHX0RNOTAwMF9ERUJVRyAqLworCisjaWZkZWYgQ09ORklHX0RNOTAwMF9ERUJVRworI2RlZmluZSBETTkwMDBfREJHKGZtdCxhcmdzLi4uKSBwcmludGYoZm10ICwjI2FyZ3MpCisjZWxzZQkJCQkvKiAgKi8KKyNkZWZpbmUgRE05MDAwX0RCRyhmbXQsYXJncy4uLikKKyNlbmRpZgkJCQkvKiAgKi8KK2VudW0gRE05MDAwX1BIWV9tb2RlIHsgRE05MDAwXzEwTUhEID0gMCwgRE05MDAwXzEwME1IRCA9CisJICAgIDEsIERNOTAwMF8xME1GRCA9IDQsIERNOTAwMF8xMDBNRkQgPSA1LCBETTkwMDBfQVVUTyA9CisJICAgIDgsIERNOTAwMF8xTV9IUE5BID0gMHgxMAorfTsKK2VudW0gRE05MDAwX05JQ19UWVBFIHsgRkFTVEVUSEVSX05JQyA9IDAsIEhPTUVSVU5fTklDID0gMSwgTE9OR1JVTl9OSUMgPSAyCit9OworCisvKiBTdHJ1Y3R1cmUvZW51bSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIHN0cnVjdCBib2FyZF9pbmZvIHsKKwl1MzIgcnVudF9sZW5ndGhfY291bnRlcjsJLyogY291bnRlcjogUlggbGVuZ3RoIDwgNjRieXRlICovCisJdTMyIGxvbmdfbGVuZ3RoX2NvdW50ZXI7CS8qIGNvdW50ZXI6IFJYIGxlbmd0aCA+IDE1MTRieXRlICovCisJdTMyIHJlc2V0X2NvdW50ZXI7CS8qIGNvdW50ZXI6IFJFU0VUICovCisJdTMyIHJlc2V0X3R4X3RpbWVvdXQ7CS8qIFJFU0VUIGNhdXNlZCBieSBUWCBUaW1lb3V0ICovCisJdTMyIHJlc2V0X3J4X3N0YXR1czsJLyogUkVTRVQgY2F1c2VkIGJ5IFJYIFN0YXRzdXMgd3JvbmcgKi8KKwl1MTYgdHhfcGt0X2NudDsKKwl1MTYgcXVldWVfc3RhcnRfYWRkcjsKKwl1MTYgZGJ1Z19jbnQ7CisJdTggcGh5X2FkZHI7CisJdTggZGV2aWNlX3dhaXRfcmVzZXQ7CS8qIGRldmljZSBzdGF0ZSAqLworCXU4IG5pY190eXBlOwkJLyogTklDIHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIHNyb21bMTI4XTsKK30gYm9hcmRfaW5mb190OworYm9hcmRfaW5mb190IGRtZmVfaW5mbzsKKworLyogRm9yIG1vZHVsZSBpbnB1dCBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBpbnQgbWVkaWFfbW9kZSA9IERNOTAwMF9BVVRPOworc3RhdGljIHU4IG5mbG9vciA9IDA7CisKKy8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK2ludCBldGhfaW5pdChiZF90ICogYmQpOworaW50IGV0aF9zZW5kKHZvbGF0aWxlIHZvaWQgKiwgaW50KTsKK2ludCBldGhfcngodm9pZCk7Cit2b2lkIGV0aF9oYWx0KHZvaWQpOworc3RhdGljIGludCBkbTkwMDBfcHJvYmUodm9pZCk7CitzdGF0aWMgdTE2IHBoeV9yZWFkKGludCk7CitzdGF0aWMgdm9pZCBwaHlfd3JpdGUoaW50LCB1MTYpOworc3RhdGljIHUxNiByZWFkX3Nyb21fd29yZChpbnQpOworc3RhdGljIHU4IERNOTAwMF9pb3IoaW50KTsKK3N0YXRpYyB2b2lkIERNOTAwMF9pb3coaW50IHJlZywgdTggdmFsdWUpOworCisvKiBETTkwMDAgbmV0d29yayBib2FyZCByb3V0aW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBETTkwMDBfb3V0YihkLHIpICggKih2b2xhdGlsZSB1OCAqKXIgPSBkICkKKyNkZWZpbmUgRE05MDAwX291dHcoZCxyKSAoICoodm9sYXRpbGUgdTE2ICopciA9IGQgKQorI2RlZmluZSBETTkwMDBfb3V0bChkLHIpICggKih2b2xhdGlsZSB1MzIgKilyID0gZCApCisjZGVmaW5lIERNOTAwMF9pbmIocikgKCoodm9sYXRpbGUgdTggKilyKQorI2RlZmluZSBETTkwMDBfaW53KHIpICgqKHZvbGF0aWxlIHUxNiAqKXIpCisjZGVmaW5lIERNOTAwMF9pbmwocikgKCoodm9sYXRpbGUgdTMyICopcikKKworI2lmZGVmIENPTkZJR19ETTkwMDBfREVCVUcKK3N0YXRpYyB2b2lkCitkdW1wX3JlZ3Modm9pZCkKK3sKKwlETTkwMDBfREJHKCJcbiIpOworCURNOTAwMF9EQkcoIk5DUiAgICgweDAwKTogJTAyeFxuIiwgRE05MDAwX2lvcigwKSk7CisJRE05MDAwX0RCRygiTlNSICAgKDB4MDEpOiAlMDJ4XG4iLCBETTkwMDBfaW9yKDEpKTsKKwlETTkwMDBfREJHKCJUQ1IgICAoMHgwMik6ICUwMnhcbiIsIERNOTAwMF9pb3IoMikpOworCURNOTAwMF9EQkcoIlRTUkkgICgweDAzKTogJTAyeFxuIiwgRE05MDAwX2lvcigzKSk7CisJRE05MDAwX0RCRygiVFNSSUkgKDB4MDQpOiAlMDJ4XG4iLCBETTkwMDBfaW9yKDQpKTsKKwlETTkwMDBfREJHKCJSQ1IgICAoMHgwNSk6ICUwMnhcbiIsIERNOTAwMF9pb3IoNSkpOworCURNOTAwMF9EQkcoIlJTUiAgICgweDA2KTogJTAyeFxuIiwgRE05MDAwX2lvcig2KSk7CisJRE05MDAwX0RCRygiSVNSICAgKDB4RkUpOiAlMDJ4XG4iLCBETTkwMDBfaW9yKElTUikpOworCURNOTAwMF9EQkcoIlxuIik7Cit9CisjZW5kaWYJCQkJLyogICovCisKKy8qCisgIFNlYXJjaCBETTkwMDAgYm9hcmQsIGFsbG9jYXRlIHNwYWNlIGFuZCByZWdpc3RlciBpdAorKi8KK2ludAorZG05MDAwX3Byb2JlKHZvaWQpCit7CisJdTMyIGlkX3ZhbDsKKwlpZF92YWwgPSBETTkwMDBfaW9yKERNOTAwMF9WSURMKTsKKwlpZF92YWwgfD0gRE05MDAwX2lvcihETTkwMDBfVklESCkgPDwgODsKKwlpZF92YWwgfD0gRE05MDAwX2lvcihETTkwMDBfUElETCkgPDwgMTY7CisJaWRfdmFsIHw9IERNOTAwMF9pb3IoRE05MDAwX1BJREgpIDw8IDI0OworCWlmIChpZF92YWwgPT0gRE05MDAwX0lEKSB7CisJCXByaW50ZigiZG05MDAwIGkvbzogMHgleCwgaWQ6IDB4JXggXG4iLCBDT05GSUdfRE05MDAwX0JBU0UsCisJCSAgICAgICBpZF92YWwpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlwcmludGYoImRtOTAwMCBub3QgZm91bmQgYXQgMHglMDh4IGlkOiAweCUwOHhcbiIsCisJCSAgICAgICBDT05GSUdfRE05MDAwX0JBU0UsIGlkX3ZhbCk7CisJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qIFNldCBQSFkgb3BlcmF0aW9uZyBtb2RlCisqLworc3RhdGljIHZvaWQKK3NldF9QSFlfbW9kZSh2b2lkKQoreworCXUxNiBwaHlfcmVnNCA9IDB4MDFlMSwgcGh5X3JlZzAgPSAweDEwMDA7CisJaWYgKCEobWVkaWFfbW9kZSAmIERNOTAwMF9BVVRPKSkgeworCQlzd2l0Y2ggKG1lZGlhX21vZGUpIHsKKwkJY2FzZSBETTkwMDBfMTBNSEQ6CisJCQlwaHlfcmVnNCA9IDB4MjE7CisJCQlwaHlfcmVnMCA9IDB4MDAwMDsKKwkJCWJyZWFrOworCQljYXNlIERNOTAwMF8xME1GRDoKKwkJCXBoeV9yZWc0ID0gMHg0MTsKKwkJCXBoeV9yZWcwID0gMHgxMTAwOworCQkJYnJlYWs7CisJCWNhc2UgRE05MDAwXzEwME1IRDoKKwkJCXBoeV9yZWc0ID0gMHg4MTsKKwkJCXBoeV9yZWcwID0gMHgyMDAwOworCQkJYnJlYWs7CisJCWNhc2UgRE05MDAwXzEwME1GRDoKKwkJCXBoeV9yZWc0ID0gMHgxMDE7CisJCQlwaHlfcmVnMCA9IDB4MzEwMDsKKwkJCWJyZWFrOworCQl9CisJCXBoeV93cml0ZSg0LCBwaHlfcmVnNCk7CS8qIFNldCBQSFkgbWVkaWEgbW9kZSAqLworCQlwaHlfd3JpdGUoMCwgcGh5X3JlZzApOwkvKiAgVG1wICovCisJfQorCURNOTAwMF9pb3coRE05MDAwX0dQQ1IsIDB4MDEpOwkvKiBMZXQgR1BJTzAgb3V0cHV0ICovCisJRE05MDAwX2lvdyhETTkwMDBfR1BSLCAweDAwKTsJLyogRW5hYmxlIFBIWSAqLworfQorCisvKgorCUluaXQgSG9tZVJ1biBETTk4MDEKKyovCitzdGF0aWMgdm9pZAorcHJvZ3JhbV9kbTk4MDEodTE2IEhQTkFfcmV2KQoreworCV9fdTE2IHJlZzE2LCByZWcxNywgcmVnMjQsIHJlZzI1OworCWlmICghbmZsb29yKQorCQluZmxvb3IgPSBETTk4MDFfTk9JU0VfRkxPT1I7CisJcmVnMTYgPSBwaHlfcmVhZCgxNik7CisJcmVnMTcgPSBwaHlfcmVhZCgxNyk7CisJcmVnMjQgPSBwaHlfcmVhZCgyNCk7CisJcmVnMjUgPSBwaHlfcmVhZCgyNSk7CisJc3dpdGNoIChIUE5BX3JldikgeworCWNhc2UgMHhiOTAwOgkJLyogRE05ODAxIEUzICovCisJCXJlZzE2IHw9IDB4MTAwMDsKKwkJcmVnMjUgPSAoKHJlZzI0ICsgbmZsb29yKSAmIDB4MDBmZikgfCAweGYwMDA7CisJCWJyZWFrOworCWNhc2UgMHhiOTAxOgkJLyogRE05ODAxIEU0ICovCisJCXJlZzI1ID0gKChyZWcyNCArIG5mbG9vcikgJiAweDAwZmYpIHwgMHhjMjAwOworCQlyZWcxNyA9IChyZWcxNyAmIDB4ZmZmMCkgKyBuZmxvb3IgKyAzOworCQlicmVhazsKKwljYXNlIDB4YjkwMjoJCS8qIERNOTgwMSBFNSAqLworCWNhc2UgMHhiOTAzOgkJLyogRE05ODAxIEU2ICovCisJZGVmYXVsdDoKKwkJcmVnMTYgfD0gMHgxMDAwOworCQlyZWcyNSA9ICgocmVnMjQgKyBuZmxvb3IgLSAzKSAmIDB4MDBmZikgfCAweGMyMDA7CisJCXJlZzE3ID0gKHJlZzE3ICYgMHhmZmYwKSArIG5mbG9vcjsKKwl9CisJcGh5X3dyaXRlKDE2LCByZWcxNik7CisJcGh5X3dyaXRlKDE3LCByZWcxNyk7CisJcGh5X3dyaXRlKDI1LCByZWcyNSk7Cit9CisKKy8qCisJSW5pdCBMb25nUnVuIERNOTgwMgorKi8KK3N0YXRpYyB2b2lkCitwcm9ncmFtX2RtOTgwMih2b2lkKQoreworCV9fdTE2IHJlZzI1OworCWlmICghbmZsb29yKQorCQluZmxvb3IgPSBETTk4MDJfTk9JU0VfRkxPT1I7CisJcmVnMjUgPSBwaHlfcmVhZCgyNSk7CisJcmVnMjUgPSAocmVnMjUgJiAweGZmMDApICsgbmZsb29yOworCXBoeV93cml0ZSgyNSwgcmVnMjUpOworfQorCisvKiBJZGVudGlmeSBOSUMgdHlwZQorKi8KK3N0YXRpYyB2b2lkCitpZGVudGlmeV9uaWModm9pZCkKK3sKKwlzdHJ1Y3QgYm9hcmRfaW5mbyAqZGIgPSAmZG1mZV9pbmZvOwkvKiBQb2ludCBhIGJvYXJkIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLworCXUxNiBwaHlfcmVnMzsKKwlETTkwMDBfaW93KERNOTAwMF9OQ1IsIE5DUl9FWFRfUEhZKTsKKwlwaHlfcmVnMyA9IHBoeV9yZWFkKDMpOworCXN3aXRjaCAocGh5X3JlZzMgJiAweGZmZjApIHsKKwljYXNlIDB4YjkwMDoKKwkJaWYgKHBoeV9yZWFkKDMxKSA9PSAweDQ0MDQpIHsKKwkJCWRiLT5uaWNfdHlwZSA9IEhPTUVSVU5fTklDOworCQkJcHJvZ3JhbV9kbTk4MDEocGh5X3JlZzMpOworCQkJRE05MDAwX0RCRygiZm91bmQgaG9tZXJ1biBOSUNcbiIpOworCQl9IGVsc2UgeworCQkJZGItPm5pY190eXBlID0gTE9OR1JVTl9OSUM7CisJCQlETTkwMDBfREJHKCJmb3VuZCBsb25ncnVuIE5JQ1xuIik7CisJCQlwcm9ncmFtX2RtOTgwMigpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRiLT5uaWNfdHlwZSA9IEZBU1RFVEhFUl9OSUM7CisJCWJyZWFrOworCX0KKwlETTkwMDBfaW93KERNOTAwMF9OQ1IsIDApOworfQorCisvKiBHZW5lcmFsIFB1cnBvc2UgZG05MDAwIHJlc2V0IHJvdXRpbmUgKi8KK3N0YXRpYyB2b2lkCitkbTkwMDBfcmVzZXQodm9pZCkKK3sKKwlETTkwMDBfREJHKCJyZXNldHRpbmdcbiIpOworCURNOTAwMF9pb3coRE05MDAwX05DUiwgTkNSX1JTVCk7CisJdWRlbGF5KDEwMDApOwkJLyogZGVsYXkgMW1zICovCit9CisKKy8qIEluaXRpbGl6ZSBkbTkwMDAgYm9hcmQKKyovCitpbnQKK2V0aF9pbml0KGJkX3QgKiBiZCkKK3sKKwlpbnQgaSwgb2Z0LCBsbms7CisJRE05MDAwX0RCRygiZXRoX2luaXQoKVxuIik7CisKKwkvKiBSRVNFVCBkZXZpY2UgKi8KKwlkbTkwMDBfcmVzZXQoKTsKKwlkbTkwMDBfcHJvYmUoKTsKKworCS8qIE5JQyBUeXBlOiBGQVNURVRIRVIsIEhPTUVSVU4sIExPTkdSVU4gKi8KKwlpZGVudGlmeV9uaWMoKTsKKworCS8qIEdQSU8wIG9uIHByZS1hY3RpdmF0ZSBQSFkgKi8KKwlETTkwMDBfaW93KERNOTAwMF9HUFIsIDB4MDApOwkvKlJFR18xRiBiaXQwIGFjdGl2YXRlIHBoeXhjZXIgKi8KKworCS8qIFNldCBQSFkgKi8KKwlzZXRfUEhZX21vZGUoKTsKKworCS8qIFByb2dyYW0gb3BlcmF0aW5nIHJlZ2lzdGVyICovCisJRE05MDAwX2lvdyhETTkwMDBfTkNSLCAweDApOwkvKiBvbmx5IGludGVybiBwaHkgc3VwcG9ydGVkIGJ5IG5vdyAqLworCURNOTAwMF9pb3coRE05MDAwX1RDUiwgMCk7CS8qIFRYIFBvbGxpbmcgY2xlYXIgKi8KKwlETTkwMDBfaW93KERNOTAwMF9CUFRSLCAweDNmKTsJLyogTGVzcyAzS2IsIDIwMHVzICovCisJRE05MDAwX2lvdyhETTkwMDBfRkNUUiwgRkNUUl9IV09UKDMpIHwgRkNUUl9MV09UKDgpKTsJLyogRmxvdyBDb250cm9sIDogSGlnaC9Mb3cgV2F0ZXIgKi8KKwlETTkwMDBfaW93KERNOTAwMF9GQ1IsIDB4MCk7CS8qIFNIIEZJWE1FOiBUaGlzIGxvb2tzIHN0cmFuZ2UhIEZsb3cgQ29udHJvbCAqLworCURNOTAwMF9pb3coRE05MDAwX1NNQ1IsIDApOwkvKiBTcGVjaWFsIE1vZGUgKi8KKwlETTkwMDBfaW93KERNOTAwMF9OU1IsIE5TUl9XQUtFU1QgfCBOU1JfVFgyRU5EIHwgTlNSX1RYMUVORCk7CS8qIGNsZWFyIFRYIHN0YXR1cyAqLworCURNOTAwMF9pb3coRE05MDAwX0lTUiwgMHgwZik7CS8qIENsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KKworCS8qIFNldCBOb2RlIGFkZHJlc3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkoKHUxNiAqKSBiZC0+YmlfZW5ldGFkZHIpW2ldID0gcmVhZF9zcm9tX3dvcmQoaSk7CisJcHJpbnRmKCJNQUM6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBiZC0+YmlfZW5ldGFkZHJbMF0sCisJICAgICAgIGJkLT5iaV9lbmV0YWRkclsxXSwgYmQtPmJpX2VuZXRhZGRyWzJdLCBiZC0+YmlfZW5ldGFkZHJbM10sCisJICAgICAgIGJkLT5iaV9lbmV0YWRkcls0XSwgYmQtPmJpX2VuZXRhZGRyWzVdKTsKKwlmb3IgKGkgPSAwLCBvZnQgPSAweDEwOyBpIDwgNjsgaSsrLCBvZnQrKykKKwkJRE05MDAwX2lvdyhvZnQsIGJkLT5iaV9lbmV0YWRkcltpXSk7CisJZm9yIChpID0gMCwgb2Z0ID0gMHgxNjsgaSA8IDg7IGkrKywgb2Z0KyspCisJCURNOTAwMF9pb3cob2Z0LCAweGZmKTsKKworCS8qIHJlYWQgYmFjayBtYWMsIGp1c3QgdG8gYmUgc3VyZSAqLworCWZvciAoaSA9IDAsIG9mdCA9IDB4MTA7IGkgPCA2OyBpKyssIG9mdCsrKQorCQlETTkwMDBfREJHKCIlMDJ4OiIsIERNOTAwMF9pb3Iob2Z0KSk7CisJRE05MDAwX0RCRygiXG4iKTsKKworCS8qIEFjdGl2YXRlIERNOTAwMCAqLworCURNOTAwMF9pb3coRE05MDAwX1JDUiwgUkNSX0RJU19MT05HIHwgUkNSX0RJU19DUkMgfCBSQ1JfUlhFTik7CS8qIFJYIGVuYWJsZSAqLworCURNOTAwMF9pb3coRE05MDAwX0lNUiwgSU1SX1BBUik7CS8qIEVuYWJsZSBUWC9SWCBpbnRlcnJ1cHQgbWFzayAqLworCWkgPSAwOworCXdoaWxlICghKHBoeV9yZWFkKDEpICYgMHgyMCkpIHsJLyogYXV0b25lZ2F0aW9uIGNvbXBsZXRlIGJpdCAqLworCQl1ZGVsYXkoMTAwMCk7CisJCWkrKzsKKwkJaWYgKGkgPT0gMTAwMDApIHsKKwkJCXByaW50ZigiY291bGQgbm90IGVzdGFibGlzaCBsaW5rXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogc2VlIHdoYXQgd2UndmUgZ290ICovCisJbG5rID0gcGh5X3JlYWQoMTcpID4+IDEyOworCXByaW50Zigib3BlcmF0aW5nIGF0ICIpOworCXN3aXRjaCAobG5rKSB7CisJY2FzZSAxOgorCQlwcmludGYoIjEwTSBoYWxmIGR1cGxleCAiKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwcmludGYoIjEwTSBmdWxsIGR1cGxleCAiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwcmludGYoIjEwME0gaGFsZiBkdXBsZXggIik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcHJpbnRmKCIxMDBNIGZ1bGwgZHVwbGV4ICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoInVua25vd246ICVkICIsIGxuayk7CisJCWJyZWFrOworCX0KKwlwcmludGYoIm1vZGVcbiIpOworCXJldHVybiAwOworfQorCisvKgorICBIYXJkd2FyZSBzdGFydCB0cmFuc21pc3Npb24uCisgIFNlbmQgYSBwYWNrZXQgdG8gbWVkaWEgZnJvbSB0aGUgdXBwZXIgbGF5ZXIuCisqLworaW50CitldGhfc2VuZCh2b2xhdGlsZSB2b2lkICpwYWNrZXQsIGludCBsZW5ndGgpCit7CisJY2hhciAqZGF0YV9wdHI7CisJdTMyIHRtcGxlbiwgaTsKKwlpbnQgdG1vOworCURNOTAwMF9EQkcoImV0aF9zZW5kOiBsZW5ndGg6ICVkXG4iLCBsZW5ndGgpOworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlpZiAoaSAlIDggPT0gMCkKKwkJCURNOTAwMF9EQkcoIlxuU2VuZDogMDJ4OiAiLCBpKTsKKwkJRE05MDAwX0RCRygiJTAyeCAiLCAoKHVuc2lnbmVkIGNoYXIgKikgcGFja2V0KVtpXSk7CisJfSBETTkwMDBfREJHKCJcbiIpOworCisJLyogTW92ZSBkYXRhIHRvIERNOTAwMCBUWCBSQU0gKi8KKwlkYXRhX3B0ciA9IChjaGFyICopIHBhY2tldDsKKwlETTkwMDBfb3V0YihETTkwMDBfTVdDTUQsIERNOTAwMF9JTyk7CisKKyNpZmRlZiBDT05GSUdfRE05MDAwX1VTRV84QklUCisJLyogQnl0ZSBtb2RlICovCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorCQlETTkwMDBfb3V0YigoZGF0YV9wdHJbaV0gJiAweGZmKSwgRE05MDAwX0RBVEEpOworCisjZW5kaWYJCQkJLyogICovCisjaWZkZWYgQ09ORklHX0RNOTAwMF9VU0VfMTZCSVQKKwl0bXBsZW4gPSAobGVuZ3RoICsgMSkgLyAyOworCWZvciAoaSA9IDA7IGkgPCB0bXBsZW47IGkrKykKKwkJRE05MDAwX291dHcoKCh1MTYgKikgZGF0YV9wdHIpW2ldLCBETTkwMDBfREFUQSk7CisKKyNlbmRpZgkJCQkvKiAgKi8KKyNpZmRlZiBDT05GSUdfRE05MDAwX1VTRV8zMkJJVAorCXRtcGxlbiA9IChsZW5ndGggKyAzKSAvIDQ7CisJZm9yIChpID0gMDsgaSA8IHRtcGxlbjsgaSsrKQorCQlETTkwMDBfb3V0bCgoKHUzMiAqKSBkYXRhX3B0cilbaV0sIERNOTAwMF9EQVRBKTsKKworI2VuZGlmCQkJCS8qICAqLworCisJLyogU2V0IFRYIGxlbmd0aCB0byBETTkwMDAgKi8KKwlETTkwMDBfaW93KERNOTAwMF9UWFBMTCwgbGVuZ3RoICYgMHhmZik7CisJRE05MDAwX2lvdyhETTkwMDBfVFhQTEgsIChsZW5ndGggPj4gOCkgJiAweGZmKTsKKworCS8qIElzc3VlIFRYIHBvbGxpbmcgY29tbWFuZCAqLworCURNOTAwMF9pb3coRE05MDAwX1RDUiwgVENSX1RYUkVRKTsJLyogQ2xlYXJlZCBhZnRlciBUWCBjb21wbGV0ZSAqLworCisJLyogd2FpdCBmb3IgZW5kIG9mIHRyYW5zbWlzc2lvbiAqLworCXRtbyA9IGdldF90aW1lcigwKSArIDUgKiBDRkdfSFo7CisJd2hpbGUgKERNOTAwMF9pb3IoRE05MDAwX1RDUikgJiBUQ1JfVFhSRVEpIHsKKwkJaWYgKGdldF90aW1lcigwKSA+PSB0bW8pIHsKKwkJCXByaW50ZigidHJhbnNtaXNzaW9uIHRpbWVvdXRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJRE05MDAwX0RCRygidHJhbnNtaXQgZG9uZVxuXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgU3RvcCB0aGUgaW50ZXJmYWNlLgorICBUaGUgaW50ZXJmYWNlIGlzIHN0b3BwZWQgd2hlbiBpdCBpcyBicm91Z2h0LgorKi8KK3ZvaWQKK2V0aF9oYWx0KHZvaWQpCit7CisJRE05MDAwX0RCRygiZXRoX2hhbHRcbiIpOworCisJLyogUkVTRVQgZGV2aWUgKi8KKwlwaHlfd3JpdGUoMCwgMHg4MDAwKTsJLyogUEhZIFJFU0VUICovCisJRE05MDAwX2lvdyhETTkwMDBfR1BSLCAweDAxKTsJLyogUG93ZXItRG93biBQSFkgKi8KKwlETTkwMDBfaW93KERNOTAwMF9JTVIsIDB4ODApOwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHQgKi8KKwlETTkwMDBfaW93KERNOTAwMF9SQ1IsIDB4MDApOwkvKiBEaXNhYmxlIFJYICovCit9CisKKy8qCisgIFJlY2VpdmVkIGEgcGFja2V0IGFuZCBwYXNzIHRvIHVwcGVyIGxheWVyCisqLworaW50CitldGhfcngodm9pZCkKK3sKKwl1OCByeGJ5dGUsICpyZHB0ciA9ICh1OCAqKSBOZXRSeFBhY2tldHNbMF07CisJdTE2IFJ4U3RhdHVzLCBSeExlbiA9IDA7CisJdTMyIHRtcGxlbiwgaTsKKworCS8qIENoZWNrIHBhY2tldCByZWFkeSBvciBub3QgKi8KKwlETTkwMDBfaW9yKERNOTAwMF9NUkNNRFgpOwkvKiBEdW1teSByZWFkICovCisJcnhieXRlID0gRE05MDAwX2luYihETTkwMDBfREFUQSk7CS8qIEdvdCBtb3N0IHVwZGF0ZWQgZGF0YSAqLworCWlmIChyeGJ5dGUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBTdGF0dXMgY2hlY2s6IHRoaXMgYnl0ZSBtdXN0IGJlIDAgb3IgMSAqLworCWlmIChyeGJ5dGUgPiAxKSB7CisJCURNOTAwMF9pb3coRE05MDAwX1JDUiwgMHgwMCk7CS8qIFN0b3AgRGV2aWNlICovCisJCURNOTAwMF9pb3coRE05MDAwX0lTUiwgMHg4MCk7CS8qIFN0b3AgSU5UIHJlcXVlc3QgKi8KKwkJRE05MDAwX0RCRygicnggc3RhdHVzIGNoZWNrOiAlZFxuIiwgcnhieXRlKTsKKwl9CisJRE05MDAwX0RCRygicmVjZWl2aW5nIHBhY2tldFxuIik7CisKKwkvKiBBIHBhY2tldCByZWFkeSBub3cgICYgR2V0IHN0YXR1cy9sZW5ndGggKi8KKwlETTkwMDBfb3V0YihETTkwMDBfTVJDTUQsIERNOTAwMF9JTyk7CisKKyNpZmRlZiBDT05GSUdfRE05MDAwX1VTRV84QklUCisJUnhTdGF0dXMgPSBETTkwMDBfaW5iKERNOTAwMF9EQVRBKSArIChETTkwMDBfaW5iKERNOTAwMF9EQVRBKSA8PCA4KTsKKwlSeExlbiA9IERNOTAwMF9pbmIoRE05MDAwX0RBVEEpICsgKERNOTAwMF9pbmIoRE05MDAwX0RBVEEpIDw8IDgpOworCisjZW5kaWYJCQkJLyogICovCisjaWZkZWYgQ09ORklHX0RNOTAwMF9VU0VfMTZCSVQKKwlSeFN0YXR1cyA9IERNOTAwMF9pbncoRE05MDAwX0RBVEEpOworCVJ4TGVuID0gRE05MDAwX2ludyhETTkwMDBfREFUQSk7CisKKyNlbmRpZgkJCQkvKiAgKi8KKyNpZmRlZiBDT05GSUdfRE05MDAwX1VTRV8zMkJJVAorCXRtcGRhdGEgPSBETTkwMDBfaW5sKERNOTAwMF9EQVRBKTsKKwlSeFN0YXR1cyA9IHRtcGRhdGE7CisJUnhMZW4gPSB0bXBkYXRhID4+IDE2OworCisjZW5kaWYJCQkJLyogICovCisJRE05MDAwX0RCRygicnggc3RhdHVzOiAweCUwNHggcnggbGVuOiAlZFxuIiwgUnhTdGF0dXMsIFJ4TGVuKTsKKworCS8qIE1vdmUgZGF0YSBmcm9tIERNOTAwMCAqLworCS8qIFJlYWQgcmVjZWl2ZWQgcGFja2V0IGZyb20gUlggU1JBTSAqLworI2lmZGVmIENPTkZJR19ETTkwMDBfVVNFXzhCSVQKKwlmb3IgKGkgPSAwOyBpIDwgUnhMZW47IGkrKykKKwkJcmRwdHJbaV0gPSBETTkwMDBfaW5iKERNOTAwMF9EQVRBKTsKKworI2VuZGlmCQkJCS8qICAqLworI2lmZGVmIENPTkZJR19ETTkwMDBfVVNFXzE2QklUCisJdG1wbGVuID0gKFJ4TGVuICsgMSkgLyAyOworCWZvciAoaSA9IDA7IGkgPCB0bXBsZW47IGkrKykKKwkJKCh1MTYgKikgcmRwdHIpW2ldID0gRE05MDAwX2ludyhETTkwMDBfREFUQSk7CisKKyNlbmRpZgkJCQkvKiAgKi8KKyNpZmRlZiBDT05GSUdfRE05MDAwX1VTRV8zMkJJVAorCXRtcGxlbiA9IChSeExlbiArIDMpIC8gNDsKKwlmb3IgKGkgPSAwOyBpIDwgdG1wbGVuOyBpKyspCisJCSgodTMyICopIHJkcHRyKVtpXSA9IERNOTAwMF9pbmwoRE05MDAwX0RBVEEpOworCisjZW5kaWYJCQkJLyogICovCisJaWYgKChSeFN0YXR1cyAmIDB4YmYwMCkgfHwgKFJ4TGVuIDwgMHg0MCkKKwkgICAgfHwgKFJ4TGVuID4gRE05MDAwX1BLVF9NQVgpKSB7CisJCWlmIChSeFN0YXR1cyAmIDB4MTAwKSB7CisJCQlwcmludGYoInJ4IGZpZm8gZXJyb3JcbiIpOworCQl9CisJCWlmIChSeFN0YXR1cyAmIDB4MjAwKSB7CisJCQlwcmludGYoInJ4IGNyYyBlcnJvclxuIik7CisJCX0KKwkJaWYgKFJ4U3RhdHVzICYgMHg4MDAwKSB7CisJCQlwcmludGYoInJ4IGxlbmd0aCBlcnJvclxuIik7CisJCX0KKwkJaWYgKFJ4TGVuID4gRE05MDAwX1BLVF9NQVgpIHsKKwkJCXByaW50ZigicnggbGVuZ3RoIHRvbyBiaWdcbiIpOworCQkJZG05MDAwX3Jlc2V0KCk7CisJCX0KKwl9IGVsc2UgeworCisJCS8qIFBhc3MgdG8gdXBwZXIgbGF5ZXIgKi8KKwkJRE05MDAwX0RCRygicGFzc2luZyBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJcbiIpOworCQlOZXRSZWNlaXZlKE5ldFJ4UGFja2V0c1swXSwgUnhMZW4pOworCQlyZXR1cm4gUnhMZW47CisJfQorCXJldHVybiAwOworfQorCisvKgorICBSZWFkIGEgd29yZCBkYXRhIGZyb20gU1JPTQorKi8KK3N0YXRpYyB1MTYKK3JlYWRfc3JvbV93b3JkKGludCBvZmZzZXQpCit7CisJRE05MDAwX2lvdyhETTkwMDBfRVBBUiwgb2Zmc2V0KTsKKwlETTkwMDBfaW93KERNOTAwMF9FUENSLCAweDQpOworCXVkZWxheSgyMDApOworCURNOTAwMF9pb3coRE05MDAwX0VQQ1IsIDB4MCk7CisJcmV0dXJuIChETTkwMDBfaW9yKERNOTAwMF9FUERSTCkgKyAoRE05MDAwX2lvcihETTkwMDBfRVBEUkgpIDw8IDgpKTsKK30KKworLyoKKyAgIFJlYWQgYSBieXRlIGZyb20gSS9PIHBvcnQKKyovCitzdGF0aWMgdTgKK0RNOTAwMF9pb3IoaW50IHJlZykKK3sKKwlETTkwMDBfb3V0YihyZWcsIERNOTAwMF9JTyk7CisJcmV0dXJuIERNOTAwMF9pbmIoRE05MDAwX0RBVEEpOworfQorCisvKgorICAgV3JpdGUgYSBieXRlIHRvIEkvTyBwb3J0CisqLworc3RhdGljIHZvaWQKK0RNOTAwMF9pb3coaW50IHJlZywgdTggdmFsdWUpCit7CisJRE05MDAwX291dGIocmVnLCBETTkwMDBfSU8pOworCURNOTAwMF9vdXRiKHZhbHVlLCBETTkwMDBfREFUQSk7Cit9CisKKy8qCisgICBSZWFkIGEgd29yZCBmcm9tIHBoeXhjZXIKKyovCitzdGF0aWMgdTE2CitwaHlfcmVhZChpbnQgcmVnKQoreworCXUxNiB2YWw7CisKKwkvKiBGaWxsIHRoZSBwaHl4Y2VyIHJlZ2lzdGVyIGludG8gUkVHXzBDICovCisJRE05MDAwX2lvdyhETTkwMDBfRVBBUiwgRE05MDAwX1BIWSB8IHJlZyk7CisJRE05MDAwX2lvdyhETTkwMDBfRVBDUiwgMHhjKTsJLyogSXNzdWUgcGh5eGNlciByZWFkIGNvbW1hbmQgKi8KKwl1ZGVsYXkoMTAwKTsJCS8qIFdhaXQgcmVhZCBjb21wbGV0ZSAqLworCURNOTAwMF9pb3coRE05MDAwX0VQQ1IsIDB4MCk7CS8qIENsZWFyIHBoeXhjZXIgcmVhZCBjb21tYW5kICovCisJdmFsID0gKERNOTAwMF9pb3IoRE05MDAwX0VQRFJIKSA8PCA4KSB8IERNOTAwMF9pb3IoRE05MDAwX0VQRFJMKTsKKworCS8qIFRoZSByZWFkIGRhdGEga2VlcHMgb24gUkVHXzBEICYgUkVHXzBFICovCisJRE05MDAwX0RCRygicGh5X3JlYWQoJWQpOiAlZFxuIiwgcmVnLCB2YWwpOworCXJldHVybiB2YWw7Cit9CisKKy8qCisgICBXcml0ZSBhIHdvcmQgdG8gcGh5eGNlcgorKi8KK3N0YXRpYyB2b2lkCitwaHlfd3JpdGUoaW50IHJlZywgdTE2IHZhbHVlKQoreworCisJLyogRmlsbCB0aGUgcGh5eGNlciByZWdpc3RlciBpbnRvIFJFR18wQyAqLworCURNOTAwMF9pb3coRE05MDAwX0VQQVIsIERNOTAwMF9QSFkgfCByZWcpOworCisJLyogRmlsbCB0aGUgd3JpdHRlbiBkYXRhIGludG8gUkVHXzBEICYgUkVHXzBFICovCisJRE05MDAwX2lvdyhETTkwMDBfRVBEUkwsICh2YWx1ZSAmIDB4ZmYpKTsKKwlETTkwMDBfaW93KERNOTAwMF9FUERSSCwgKCh2YWx1ZSA+PiA4KSAmIDB4ZmYpKTsKKwlETTkwMDBfaW93KERNOTAwMF9FUENSLCAweGEpOwkvKiBJc3N1ZSBwaHl4Y2VyIHdyaXRlIGNvbW1hbmQgKi8KKwl1ZGVsYXkoNTAwKTsJCS8qIFdhaXQgd3JpdGUgY29tcGxldGUgKi8KKwlETTkwMDBfaW93KERNOTAwMF9FUENSLCAweDApOwkvKiBDbGVhciBwaHl4Y2VyIHdyaXRlIGNvbW1hbmQgKi8KKwlETTkwMDBfREJHKCJwaHlfd3JpdGUocmVnOiVkLCB2YWx1ZTolZClcbiIsIHJlZywgdmFsdWUpOworfQorI2VuZGlmCQkJCS8qIENPTkZJR19EUklWRVJfRE05MDAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtOTAwMHguaCBiL2RyaXZlcnMvZG05MDAweC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0N2ZmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtOTAwMHguaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIGRtOTAwMCBFdGhlcm5ldAorICovCisKKyNpZmRlZiBDT05GSUdfRFJJVkVSX0RNOTAwMAorCisjZGVmaW5lIERNOTAwMF9JRAkJMHg5MDAwMEE0NgorI2RlZmluZSBETTkwMDBfUEtUX01BWAkJMTUzNgkvKiBSZWNlaXZlZCBwYWNrZXQgbWF4IHNpemUgKi8KKyNkZWZpbmUgRE05MDAwX1BLVF9SRFkJCTB4MDEJLyogUGFja2V0IHJlYWR5IHRvIHJlY2VpdmUgKi8KKworLyogYWx0aG91Z2ggdGhlIHJlZ2lzdGVycyBhcmUgMTYgYml0LCB0aGV5IGFyZSAzMi1iaXQgYWxpZ25lZC4KKyAqLworCisjZGVmaW5lIERNOTAwMF9OQ1IgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBETTkwMDBfTlNSICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgRE05MDAwX1RDUiAgICAgICAgICAgICAweDAyCisjZGVmaW5lIERNOTAwMF9UU1IxICAgICAgICAgICAgMHgwMworI2RlZmluZSBETTkwMDBfVFNSMiAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgRE05MDAwX1JDUiAgICAgICAgICAgICAweDA1CisjZGVmaW5lIERNOTAwMF9SU1IgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBETTkwMDBfUk9DUiAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgRE05MDAwX0JQVFIgICAgICAgICAgICAweDA4CisjZGVmaW5lIERNOTAwMF9GQ1RSICAgICAgICAgICAgMHgwOQorI2RlZmluZSBETTkwMDBfRkNSICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgRE05MDAwX0VQQ1IgICAgICAgICAgICAweDBCCisjZGVmaW5lIERNOTAwMF9FUEFSICAgICAgICAgICAgMHgwQworI2RlZmluZSBETTkwMDBfRVBEUkwgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgRE05MDAwX0VQRFJIICAgICAgICAgICAweDBFCisjZGVmaW5lIERNOTAwMF9XQ1IgICAgICAgICAgICAgMHgwRgorCisjZGVmaW5lIERNOTAwMF9QQVIgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBETTkwMDBfTUFSICAgICAgICAgICAgIDB4MTYKKworI2RlZmluZSBETTkwMDBfR1BDUgkJCTB4MWUKKyNkZWZpbmUgRE05MDAwX0dQUiAgICAgICAgICAgICAweDFmCisjZGVmaW5lIERNOTAwMF9UUlBBTCAgICAgICAgICAgMHgyMgorI2RlZmluZSBETTkwMDBfVFJQQUggICAgICAgICAgIDB4MjMKKyNkZWZpbmUgRE05MDAwX1JXUEFMICAgICAgICAgICAweDI0CisjZGVmaW5lIERNOTAwMF9SV1BBSCAgICAgICAgICAgMHgyNQorCisjZGVmaW5lIERNOTAwMF9WSURMICAgICAgICAgICAgMHgyOAorI2RlZmluZSBETTkwMDBfVklESCAgICAgICAgICAgIDB4MjkKKyNkZWZpbmUgRE05MDAwX1BJREwgICAgICAgICAgICAweDJBCisjZGVmaW5lIERNOTAwMF9QSURIICAgICAgICAgICAgMHgyQgorCisjZGVmaW5lIERNOTAwMF9DSElQUiAgICAgICAgICAgMHgyQworI2RlZmluZSBETTkwMDBfU01DUiAgICAgICAgICAgIDB4MkYKKworI2RlZmluZSBETTkwMDBfUEhZCQkweDQwCS8qIFBIWSBhZGRyZXNzIDB4MDEgKi8KKworI2RlZmluZSBETTkwMDBfTVJDTURYICAgICAgICAgIDB4RjAKKyNkZWZpbmUgRE05MDAwX01SQ01EICAgICAgICAgICAweEYyCisjZGVmaW5lIERNOTAwMF9NUlJMICAgICAgICAgICAgMHhGNAorI2RlZmluZSBETTkwMDBfTVJSSCAgICAgICAgICAgIDB4RjUKKyNkZWZpbmUgRE05MDAwX01XQ01EWAkJCTB4RjYKKyNkZWZpbmUgRE05MDAwX01XQ01EICAgICAgICAgICAweEY4CisjZGVmaW5lIERNOTAwMF9NV1JMICAgICAgICAgICAgMHhGQQorI2RlZmluZSBETTkwMDBfTVdSSCAgICAgICAgICAgIDB4RkIKKyNkZWZpbmUgRE05MDAwX1RYUExMICAgICAgICAgICAweEZDCisjZGVmaW5lIERNOTAwMF9UWFBMSCAgICAgICAgICAgMHhGRAorI2RlZmluZSBETTkwMDBfSVNSICAgICAgICAgICAgIDB4RkUKKyNkZWZpbmUgRE05MDAwX0lNUiAgICAgICAgICAgICAweEZGCisKKyNkZWZpbmUgTkNSX0VYVF9QSFkJCSgxPDw3KQorI2RlZmluZSBOQ1JfV0FLRUVOCQkoMTw8NikKKyNkZWZpbmUgTkNSX0ZDT0wJCSgxPDw0KQorI2RlZmluZSBOQ1JfRkRYCQkJKDE8PDMpCisjZGVmaW5lIE5DUl9MQksJCQkoMzw8MSkKKyNkZWZpbmUgTkNSX1JTVAkJCSgxPDwwKQorCisjZGVmaW5lIE5TUl9TUEVFRAkJKDE8PDcpCisjZGVmaW5lIE5TUl9MSU5LU1QJCSgxPDw2KQorI2RlZmluZSBOU1JfV0FLRVNUCQkoMTw8NSkKKyNkZWZpbmUgTlNSX1RYMkVORAkJKDE8PDMpCisjZGVmaW5lIE5TUl9UWDFFTkQJCSgxPDwyKQorI2RlZmluZSBOU1JfUlhPVgkJKDE8PDEpCisKKyNkZWZpbmUgVENSX1RKRElTCQkoMTw8NikKKyNkZWZpbmUgVENSX0VYQ0VDTQkJKDE8PDUpCisjZGVmaW5lIFRDUl9QQURfRElTMgkoMTw8NCkKKyNkZWZpbmUgVENSX0NSQ19ESVMyCSgxPDwzKQorI2RlZmluZSBUQ1JfUEFEX0RJUzEJKDE8PDIpCisjZGVmaW5lIFRDUl9DUkNfRElTMQkoMTw8MSkKKyNkZWZpbmUgVENSX1RYUkVRCQkoMTw8MCkKKworI2RlZmluZSBUU1JfVEpUTwkJKDE8PDcpCisjZGVmaW5lIFRTUl9MQwkJCSgxPDw2KQorI2RlZmluZSBUU1JfTkMJCQkoMTw8NSkKKyNkZWZpbmUgVFNSX0xDT0wJCSgxPDw0KQorI2RlZmluZSBUU1JfQ09MCQkJKDE8PDMpCisjZGVmaW5lIFRTUl9FQwkJCSgxPDwyKQorCisjZGVmaW5lIFJDUl9XVERJUwkJKDE8PDYpCisjZGVmaW5lIFJDUl9ESVNfTE9ORwkoMTw8NSkKKyNkZWZpbmUgUkNSX0RJU19DUkMJCSgxPDw0KQorI2RlZmluZSBSQ1JfQUxMCQkJKDE8PDMpCisjZGVmaW5lIFJDUl9SVU5UCQkoMTw8MikKKyNkZWZpbmUgUkNSX1BSTVNDCQkoMTw8MSkKKyNkZWZpbmUgUkNSX1JYRU4JCSgxPDwwKQorCisjZGVmaW5lIFJTUl9SRgkJCSgxPDw3KQorI2RlZmluZSBSU1JfTUYJCQkoMTw8NikKKyNkZWZpbmUgUlNSX0xDUwkJCSgxPDw1KQorI2RlZmluZSBSU1JfUldUTwkJKDE8PDQpCisjZGVmaW5lIFJTUl9QTEUJCQkoMTw8MykKKyNkZWZpbmUgUlNSX0FFCQkJKDE8PDIpCisjZGVmaW5lIFJTUl9DRQkJCSgxPDwxKQorI2RlZmluZSBSU1JfRk9FCQkJKDE8PDApCisKKyNkZWZpbmUgRkNUUl9IV09UKG90KQkoKCBvdCAmIDB4ZiApIDw8IDQgKQorI2RlZmluZSBGQ1RSX0xXT1Qob3QpCSggb3QgJiAweGYgKQorCisjZGVmaW5lIElNUl9QQVIJCQkoMTw8NykKKyNkZWZpbmUgSU1SX1JPT00JCSgxPDwzKQorI2RlZmluZSBJTVJfUk9NCQkJKDE8PDIpCisjZGVmaW5lIElNUl9QVE0JCQkoMTw8MSkKKyNkZWZpbmUgSU1SX1BSTQkJCSgxPDwwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsX2lteC5jIGIvZHJpdmVycy9zZXJpYWxfaW14LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiYWE1NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsX2lteC5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogKGMpIDIwMDQgU2FzY2hhIEhhdWVyIDxzYXNjaGFAc2FzY2hhaGF1ZXIuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaWYgZGVmaW5lZCAoQ09ORklHX0lNWCkKKworI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisKKyNpZm5kZWYgQ09ORklHX0lNWF9TRVJJQUxfTk9ORQorCisjaWYgZGVmaW5lZCBDT05GSUdfSU1YX1NFUklBTDEKKyNkZWZpbmUgVUFSVF9CQVNFIElNWF9VQVJUMV9CQVNFCisjZWxpZiBkZWZpbmVkIENPTkZJR19JTVhfU0VSSUFMMgorI2RlZmluZSBVQVJUX0JBU0UgSU1YX1VBUlQyX0JBU0UKKyNlbHNlCisjZXJyb3IgImRlZmluZSBDT05GSUdfSU1YX1NFUklBTDEsIENPTkZJR19JTVhfU0VSSUFMMiBvciBDT05GSUdfSU1YX1NFUklBTF9OT05FIgorI2VuZGlmCisKK3N0cnVjdCBpbXhfc2VyaWFsIHsKKwl2b2xhdGlsZSB1aW50MzJfdCB1cnhkWzE2XTsKKwl2b2xhdGlsZSB1aW50MzJfdCB1dHhkWzE2XTsKKwl2b2xhdGlsZSB1aW50MzJfdCB1Y3IxOworCXZvbGF0aWxlIHVpbnQzMl90IHVjcjI7CisJdm9sYXRpbGUgdWludDMyX3QgdWNyMzsKKwl2b2xhdGlsZSB1aW50MzJfdCB1Y3I0OworCXZvbGF0aWxlIHVpbnQzMl90IHVmY3I7CisJdm9sYXRpbGUgdWludDMyX3QgdXNyMTsKKwl2b2xhdGlsZSB1aW50MzJfdCB1c3IyOworCXZvbGF0aWxlIHVpbnQzMl90IHVlc2M7CisJdm9sYXRpbGUgdWludDMyX3QgdXRpbTsKKwl2b2xhdGlsZSB1aW50MzJfdCB1YmlyOworCXZvbGF0aWxlIHVpbnQzMl90IHVibXI7CisJdm9sYXRpbGUgdWludDMyX3QgdWJyYzsKKwl2b2xhdGlsZSB1aW50MzJfdCBiaXByWzRdOworCXZvbGF0aWxlIHVpbnQzMl90IGJtcHJbNF07CisJdm9sYXRpbGUgdWludDMyX3QgdXRzOworfTsKKwordm9pZCBzZXJpYWxfc2V0YnJnICh2b2lkKQoreworCXNlcmlhbF9pbml0KCk7Cit9CisKK2V4dGVybiB2b2lkIGlteF9ncGlvX21vZGUoaW50IGdwaW9fbW9kZSk7CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBzZXJpYWwgcG9ydCB3aXRoIHRoZSBnaXZlbiBiYXVkcmF0ZS4gVGhlIHNldHRpbmdzCisgKiBhcmUgYWx3YXlzIDggZGF0YSBiaXRzLCBubyBwYXJpdHksIDEgc3RvcCBiaXQsIG5vIHN0YXJ0IGJpdHMuCisgKgorICovCitpbnQgc2VyaWFsX2luaXQgKHZvaWQpCit7CisJdm9sYXRpbGUgc3RydWN0IGlteF9zZXJpYWwqIGJhc2UgPSAoc3RydWN0IGlteF9zZXJpYWwgKilVQVJUX0JBU0U7CisjaWZkZWYgQ09ORklHX0lNWF9TRVJJQUwxCisJaW14X2dwaW9fbW9kZShQQzExX1BGX1VBUlQxX1RYRCk7CisJaW14X2dwaW9fbW9kZShQQzEyX1BGX1VBUlQxX1JYRCk7CisjZWxzZQorCWlteF9ncGlvX21vZGUoUEIzMF9QRl9VQVJUMl9UWEQpOworCWlteF9ncGlvX21vZGUoUEIzMV9QRl9VQVJUMl9SWEQpOworI2VuZGlmCisKKwkvKiBEaXNhYmxlIFVBUlQgKi8KKwliYXNlLT51Y3IxICY9IH5VQ1IxX1VBUlRFTjsKKworCS8qIFNldCB0byBkZWZhdWx0IFBPUiBzdGF0ZSAqLworCisJYmFzZS0+dWNyMSA9IDB4MDAwMDAwMDQ7CisJYmFzZS0+dWNyMiA9IDB4MDAwMDAwMDA7CisJYmFzZS0+dWNyMyA9IDB4MDAwMDAwMDA7CisJYmFzZS0+dWNyNCA9IDB4MDAwMDgwNDA7CisJYmFzZS0+dWVzYyA9IDB4MDAwMDAwMkI7CisJYmFzZS0+dXRpbSA9IDB4MDAwMDAwMDA7CisJYmFzZS0+dWJpciA9IDB4MDAwMDAwMDA7CisJYmFzZS0+dWJtciA9IDB4MDAwMDAwMDA7CisJYmFzZS0+dXRzICA9IDB4MDAwMDAwMDA7CisJLyogU2V0IGNsb2NrcyAqLworCWJhc2UtPnVjcjQgfD0gVUNSNF9SRUYxNjsKKworCS8qIENvbmZpZ3VyZSBGSUZPcyAqLworCWJhc2UtPnVmY3IgPSAweGE4MTsKKworCS8qIFNldCB0aGUgbnVtZXJhdG9yIHZhbHVlIG1pbnVzIG9uZSBvZiB0aGUgQlJNIHJhdGlvICovCisJYmFzZS0+dWJpciA9IChDT05GSUdfQkFVRFJBVEUgLyAxMDApIC0gMTsKKworCS8qIFNldCB0aGUgZGVub21pbmF0b3IgdmFsdWUgbWludXMgb25lIG9mIHRoZSBCUk0gcmF0aW8JKi8KKwliYXNlLT51Ym1yID0gMTAwMDAgLSAxOworCisJLyogU2V0IHRvIDhOMSAqLworCWJhc2UtPnVjcjIgJj0gflVDUjJfUFJFTjsKKwliYXNlLT51Y3IyIHw9IFVDUjJfV1M7CisJYmFzZS0+dWNyMiAmPSB+VUNSMl9TVFBCOworCisJLyogSWdub3JlIFJUUyAqLworCWJhc2UtPnVjcjIgfD0gVUNSMl9JUlRTOworCisJLyogRW5hYmxlIFVBUlQgKi8KKwliYXNlLT51Y3IxIHw9IFVDUjFfVUFSVEVOIHwgVUNSMV9VQVJUQ0xLRU47CisKKwkvKiBFbmFibGUgRklGT3MgKi8KKwliYXNlLT51Y3IyIHw9IFVDUjJfU1JTVCB8IFVDUjJfUlhFTiB8IFVDUjJfVFhFTjsKKworICAJLyogQ2xlYXIgc3RhdHVzIGZsYWdzICovCisJYmFzZS0+dXNyMiB8PSBVU1IyX0FERVQgIHwKKwkgICAgICAgICAgVVNSMl9EVFJGICB8CisJICAgICAgICAgIFVTUjJfSURMRSAgfAorCSAgICAgICAgICBVU1IyX0lSSU5UIHwKKwkgICAgICAgICAgVVNSMl9XQUtFICB8CisJICAgICAgICAgIFVTUjJfUlRTRiAgfAorCSAgICAgICAgICBVU1IyX0JSQ0QgIHwKKwkgICAgICAgICAgVVNSMl9PUkUgICB8CisJICAgICAgICAgIFVTUjJfUkRSOworCisgIAkvKiBDbGVhciBzdGF0dXMgZmxhZ3MgKi8KKwliYXNlLT51c3IxIHw9IFVTUjFfUEFSSVRZRVJSIHwKKwkgICAgICAgICAgVVNSMV9SVFNEICAgICAgfAorCSAgICAgICAgICBVU1IxX0VTQ0YgICAgICB8CisJICAgICAgICAgIFVTUjFfRlJBTUVSUiAgIHwKKwkgICAgICAgICAgVVNSMV9BSVJJTlQgICAgfAorCSAgICAgICAgICBVU1IxX0FXQUtFOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBSZWFkIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgc2VyaWFsIHBvcnQuIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwCisgKiBvdGhlcndpc2UuIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZSBjaGFyYWN0ZXIgcmVhZCBpcworICogd3JpdHRlbiBpbnRvIGl0cyBhcmd1bWVudCBjLgorICovCitpbnQgc2VyaWFsX2dldGMgKHZvaWQpCit7CisJdm9sYXRpbGUgc3RydWN0IGlteF9zZXJpYWwqIGJhc2UgPSAoc3RydWN0IGlteF9zZXJpYWwgKilVQVJUX0JBU0U7CisJdW5zaWduZWQgY2hhciBjaDsKKworCXdoaWxlKGJhc2UtPnV0cyAmIFVUU19SWEVNUFRZKTsKKworCWNoID0gKGNoYXIpYmFzZS0+dXJ4ZFswXTsKKworCXJldHVybiBjaDsKK30KKworI2lmZGVmIENPTkZJR19IV0ZMT1cKK3N0YXRpYyBpbnQgaHdmbG93ID0gMDsgLyogdHVybmVkIG9mZiBieSBkZWZhdWx0ICovCitpbnQgaHdmbG93X29ub2ZmKGludCBvbikKK3sKK30KKyNlbmRpZgorCisvKgorICogT3V0cHV0IGEgc2luZ2xlIGJ5dGUgdG8gdGhlIHNlcmlhbCBwb3J0LgorICovCit2b2lkIHNlcmlhbF9wdXRjIChjb25zdCBjaGFyIGMpCit7CisJdm9sYXRpbGUgc3RydWN0IGlteF9zZXJpYWwqIGJhc2UgPSAoc3RydWN0IGlteF9zZXJpYWwgKilVQVJUX0JBU0U7CisKKwkvKiBXYWl0IGZvciBUeCBGSUZPIG5vdCBmdWxsICovCisJd2hpbGUgKGJhc2UtPnV0cyAmIFVUU19UWEZVTEwpOworCisJYmFzZS0+dXR4ZFswXSA9IGM7CisKKwkvKiBJZiBcbiwgYWxzbyBkbyBcciAqLworCWlmIChjID09ICdcbicpCisJCXNlcmlhbF9wdXRjICgnXHInKTsKK30KKworLyoKKyAqIFRlc3Qgd2hldGhlciBhIGNoYXJhY3RlciBpcyBpbiB0aGUgUlggYnVmZmVyCisgKi8KK2ludCBzZXJpYWxfdHN0YyAodm9pZCkKK3sKKwl2b2xhdGlsZSBzdHJ1Y3QgaW14X3NlcmlhbCogYmFzZSA9IChzdHJ1Y3QgaW14X3NlcmlhbCAqKVVBUlRfQkFTRTsKKworCS8qIElmIHJlY2VpdmUgZmlmbyBpcyBlbXB0eSwgcmV0dXJuIGZhbHNlICovCisJaWYgKGJhc2UtPnV0cyAmIFVUU19SWEVNUFRZKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwordm9pZAorc2VyaWFsX3B1dHMgKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXNlcmlhbF9wdXRjICgqcysrKTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0lNWF9TRVJJQUxfTk9ORSAqLworI2VuZGlmIC8qIGRlZmluZWQgQ09ORklHX0lNWCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtOTIwdC9pbXgtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtOTIwdC9pbXgtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODZiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm05MjB0L2lteC1yZWdzLmgKQEAgLTAsMCArMSw1NzEgQEAKKyNpZm5kZWYgX0lNWF9SRUdTX0gKKyNkZWZpbmUgX0lNWF9SRUdTX0gKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIE1vdG9yb2xhIElNWCBzeXN0ZW0gcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKi8KKworIyBpZm5kZWYgX19BU1NFTUJMWV9fCisjICBkZWZpbmUgX19SRUcoeCkJKCooKHZvbGF0aWxlIHUzMiAqKSh4KSkpCisjIGRlZmluZSBfX1JFRzIoeCx5KQlcCisJKCBfX2J1aWx0aW5fY29uc3RhbnRfcCh5KSA/IChfX1JFRygoeCkgKyAoeSkpKSBcCisJCQkgIDogKCoodm9sYXRpbGUgdTMyICopKCh1MzIpJl9fUkVHKHgpICsgKHkpKSkgKQorIyBlbHNlCisjICBkZWZpbmUgX19SRUcoeCkgKHgpCisjICBkZWZpbmUgX19SRUcyKHgseSkgKCh4KSsoeSkpCisjZW5kaWYKKworI2RlZmluZSBJTVhfSU9fQkFTRQkJMHgwMDIwMDAwMAorCisvKgorICogIFJlZ2lzdGVyIEJBU0VzLCBiYXNlZCBvbiBPRkZTRVRzCisgKgorICovCisjZGVmaW5lIElNWF9BSVBJMV9CQVNFICAgICAgICAgICAgICgweDAwMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9XRFRfQkFTRSAgICAgICAgICAgICAgICgweDAxMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9USU0xX0JBU0UgICAgICAgICAgICAgICgweDAyMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9USU0yX0JBU0UgICAgICAgICAgICAgICgweDAzMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9SVENfQkFTRSAgICAgICAgICAgICAgICgweDA0MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9MQ0RDX0JBU0UgICAgICAgICAgICAgICgweDA1MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9VQVJUMV9CQVNFICAgICAgICAgICAgICgweDA2MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9VQVJUMl9CQVNFICAgICAgICAgICAgICgweDA3MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9QV01fQkFTRSAgICAgICAgICAgICAgICgweDA4MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9ETUFDX0JBU0UgICAgICAgICAgICAgICgweDA5MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9BSVBJMl9CQVNFICAgICAgICAgICAgICgweDEwMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TSU1fQkFTRSAgICAgICAgICAgICAgICgweDExMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9VU0JEX0JBU0UgICAgICAgICAgICAgICgweDEyMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TUEkxX0JBU0UgICAgICAgICAgICAgICgweDEzMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9NTUNfQkFTRSAgICAgICAgICAgICAgICgweDE0MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9BU1BfQkFTRSAgICAgICAgICAgICAgICgweDE1MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9CVEFfQkFTRSAgICAgICAgICAgICAgICgweDE2MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9JMkNfQkFTRSAgICAgICAgICAgICAgICgweDE3MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TU0lfQkFTRSAgICAgICAgICAgICAgICgweDE4MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TUEkyX0JBU0UgICAgICAgICAgICAgICgweDE5MDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9NU0hDX0JBU0UgICAgICAgICAgICAgICgweDFBMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9QTExfQkFTRSAgICAgICAgICAgICAgICgweDFCMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TWVNDVFJMX0JBU0UgICAgICAgICAgICgweDFCODAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9HUElPX0JBU0UgICAgICAgICAgICAgICgweDFDMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9FSU1fQkFTRSAgICAgICAgICAgICAgICgweDIwMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9TRFJBTUNfQkFTRSAgICAgICAgICAgICgweDIxMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9NTUFfQkFTRSAgICAgICAgICAgICAgICgweDIyMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9BSVRDX0JBU0UgICAgICAgICAgICAgICgweDIzMDAwICsgSU1YX0lPX0JBU0UpCisjZGVmaW5lIElNWF9DU0lfQkFTRSAgICAgICAgICAgICAgICgweDI0MDAwICsgSU1YX0lPX0JBU0UpCisKKy8qIFNZU0NUUkwgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNJRFIgICBfX1JFRyhJTVhfU1lTQ1RSTF9CQVNFICsgMHg0KSAvKiBTaWxpY29uIElEIFJlZ2lzdGVyCQkgICAgKi8KKyNkZWZpbmUgRk1DUiAgIF9fUkVHKElNWF9TWVNDVFJMX0JBU0UgKyAweDgpIC8qIEZ1bmN0aW9uIE11bHRpcGxleCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdQQ1IgICBfX1JFRyhJTVhfU1lTQ1RSTF9CQVNFICsgMHhDKSAvKiBGdW5jdGlvbiBNdWx0aXBsZXggQ29udHJvbCBSZWdpc3RlciAqLworCisvKiBDaGlwIFNlbGVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ1MwVSBfX1JFRyhJTVhfRUlNX0JBU0UpICAgICAgICAvKiBDaGlwIFNlbGVjdCAwIFVwcGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIENTMEwgX19SRUcoSU1YX0VJTV9CQVNFICsgMHg0KSAgLyogQ2hpcCBTZWxlY3QgMCBMb3dlciBSZWdpc3RlciAqLworI2RlZmluZSBDUzFVIF9fUkVHKElNWF9FSU1fQkFTRSArIDB4OCkgIC8qIENoaXAgU2VsZWN0IDEgVXBwZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ1MxTCBfX1JFRyhJTVhfRUlNX0JBU0UgKyAweGMpICAvKiBDaGlwIFNlbGVjdCAxIExvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIENTMlUgX19SRUcoSU1YX0VJTV9CQVNFICsgMHgxMCkgLyogQ2hpcCBTZWxlY3QgMiBVcHBlciBSZWdpc3RlciAqLworI2RlZmluZSBDUzJMIF9fUkVHKElNWF9FSU1fQkFTRSArIDB4MTQpIC8qIENoaXAgU2VsZWN0IDIgTG93ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ1MzVSBfX1JFRyhJTVhfRUlNX0JBU0UgKyAweDE4KSAvKiBDaGlwIFNlbGVjdCAzIFVwcGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIENTM0wgX19SRUcoSU1YX0VJTV9CQVNFICsgMHgxYykgLyogQ2hpcCBTZWxlY3QgMyBMb3dlciBSZWdpc3RlciAqLworI2RlZmluZSBDUzRVIF9fUkVHKElNWF9FSU1fQkFTRSArIDB4MjApIC8qIENoaXAgU2VsZWN0IDQgVXBwZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ1M0TCBfX1JFRyhJTVhfRUlNX0JBU0UgKyAweDI0KSAvKiBDaGlwIFNlbGVjdCA0IExvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIENTNVUgX19SRUcoSU1YX0VJTV9CQVNFICsgMHgyOCkgLyogQ2hpcCBTZWxlY3QgNSBVcHBlciBSZWdpc3RlciAqLworI2RlZmluZSBDUzVMIF9fUkVHKElNWF9FSU1fQkFTRSArIDB4MmMpIC8qIENoaXAgU2VsZWN0IDUgTG93ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUlNICBfX1JFRyhJTVhfRUlNX0JBU0UgKyAweDMwKSAvKiBFSU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCisvKiBTRFJBTSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFNEQ1RMMCBfX1JFRyhJTVhfU0RSQU1DX0JBU0UpICAgICAgICAvKiBTRFJBTSAwIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0RDVEwxIF9fUkVHKElNWF9TRFJBTUNfQkFTRSArIDB4NCkgIC8qIFNEUkFNIDEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTRE1JU0MgX19SRUcoSU1YX1NEUkFNQ19CQVNFICsgMHgxNCkgLyogTWlzY2VsbGFuZW91cyBSZWdpc3RlciAqLworI2RlZmluZSBTRFJTVCAgX19SRUcoSU1YX1NEUkFNQ19CQVNFICsgMHgxOCkgLyogU0RSQU0gUmVzZXQgUmVnaXN0ZXIgKi8KKworLyogUExMIHJlZ2lzdGVycyAqLworI2RlZmluZSBDU0NSICAgX19SRUcoSU1YX1BMTF9CQVNFKSAgICAgICAgLyogQ2xvY2sgU291cmNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVBDVEwwIF9fUkVHKElNWF9QTExfQkFTRSArIDB4NCkgIC8qIE1DVSBQTEwgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIE1QQ1RMMSBfX1JFRyhJTVhfUExMX0JBU0UgKyAweDgpICAvKiBNQ1UgUExMIGFuZCBTeXN0ZW0gQ2xvY2sgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUENUTDAgX19SRUcoSU1YX1BMTF9CQVNFICsgMHhjKSAgLyogU3lzdGVtIFBMTCBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BDVEwxIF9fUkVHKElNWF9QTExfQkFTRSArIDB4MTApIC8qIFN5c3RlbSBQTEwgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFBDRFIgICBfX1JFRyhJTVhfUExMX0JBU0UgKyAweDIwKSAvKiBQZXJpcGhlcmFsIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBDU0NSX01QTExfUkVTVEFSVCAoMTw8MjEpCisKKy8qCisgKiAgR1BJTyBNb2R1bGUgYW5kIEkvTyBNdWx0aXBsZXhlcgorICogIHggPSAwLi4zIGZvciByZWdfQSwgcmVnX0IsIHJlZ19DLCByZWdfRAorICovCisjZGVmaW5lIERESVIoeCkgICAgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDAwLCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgT0NSMSh4KSAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MDQsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBPQ1IyKHgpICAgIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgwOCwgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIElDT05GQTEoeCkgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDBjLCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgSUNPTkZBMih4KSBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MTAsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBJQ09ORkIxKHgpIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgxNCwgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIElDT05GQjIoeCkgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDE4LCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgRFIoeCkgICAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MWMsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBHSVVTKHgpICAgIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgyMCwgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIFNTUih4KSAgICAgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDI0LCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgSUNSMSh4KSAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MjgsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBJQ1IyKHgpICAgIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgyYywgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIElNUih4KSAgICAgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDMwLCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgSVNSKHgpICAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4MzQsICgoeCkgJiAzKSA8PCA4KQorI2RlZmluZSBHUFIoeCkgICAgIF9fUkVHMihJTVhfR1BJT19CQVNFICsgMHgzOCwgKCh4KSAmIDMpIDw8IDgpCisjZGVmaW5lIFNXUih4KSAgICAgX19SRUcyKElNWF9HUElPX0JBU0UgKyAweDNjLCAoKHgpICYgMykgPDwgOCkKKyNkZWZpbmUgUFVFTih4KSAgICBfX1JFRzIoSU1YX0dQSU9fQkFTRSArIDB4NDAsICgoeCkgJiAzKSA8PCA4KQorCisjZGVmaW5lIEdQSU9fUElOX01BU0sgMHgxZgorI2RlZmluZSBHUElPX1BPUlRfTUFTSyAoMHgzIDw8IDUpCisKKyNkZWZpbmUgR1BJT19QT1JUQSAoMDw8NSkKKyNkZWZpbmUgR1BJT19QT1JUQiAoMTw8NSkKKyNkZWZpbmUgR1BJT19QT1JUQyAoMjw8NSkKKyNkZWZpbmUgR1BJT19QT1JURCAoMzw8NSkKKworI2RlZmluZSBHUElPX09VVCAgICgxPDw3KQorI2RlZmluZSBHUElPX0lOICAgICgwPDw3KQorI2RlZmluZSBHUElPX1BVRU4gICgxPDw4KQorCisjZGVmaW5lIEdQSU9fUEYgICAgKDA8PDkpCisjZGVmaW5lIEdQSU9fQUYgICAgKDE8PDkpCisKKyNkZWZpbmUgR1BJT19PQ1JfTUFTSyAoMzw8MTApCisjZGVmaW5lIEdQSU9fQUlOICAgKDA8PDEwKQorI2RlZmluZSBHUElPX0JJTiAgICgxPDwxMCkKKyNkZWZpbmUgR1BJT19DSU4gICAoMjw8MTApCisjZGVmaW5lIEdQSU9fR1BJTyAgKDM8PDEwKQorCisjZGVmaW5lIEdQSU9fQU9VVCAgKDE8PDEyKQorI2RlZmluZSBHUElPX0JPVVQgICgxPDwxMykKKworLyogYXNzaWduZW1lbnRzIGZvciBHUElPIGFsdGVybmF0ZS9wcmltYXJ5IGZ1bmN0aW9ucyAqLworCisvKiBGSVhNRTogVGhpcyBsaXN0IGlzIG5vdCBjb21wbGV0ZWQuIFRoZSBjb3JyZWN0IGRpcmVjdGlvbnMgYXJlCisgKiBtaXNzaW5nIG9uIHNvbWUgKG1hbnkpIHBpbnMKKyAqLworI2RlZmluZSBQQTBfUEZfQTI0ICAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMCApCisjZGVmaW5lIFBBMF9BSU5fU1BJMl9DTEsgICAgICggR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAwICkKKyNkZWZpbmUgUEEwX0FGX0VUTVRSQUNFU1lOQyAgKCBHUElPX1BPUlRBIHwgR1BJT19BRiB8IDAgKQorI2RlZmluZSBQQTFfQU9VVF9TUEkyX1JYRCAgICAoIEdQSU9fUE9SVEEgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgMSApCisjZGVmaW5lIFBBMV9QRl9USU4gICAgICAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxICkKKyNkZWZpbmUgUEEyX1BGX1BXTTAgICAgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMiApCisjZGVmaW5lIFBBM19QRl9DU0lfTUNMSyAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzICkKKyNkZWZpbmUgUEE0X1BGX0NTSV9EMCAgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDQgKQorI2RlZmluZSBQQTVfUEZfQ1NJX0QxICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNSApCisjZGVmaW5lIFBBNl9QRl9DU0lfRDIgICAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA2ICkKKyNkZWZpbmUgUEE3X1BGX0NTSV9EMyAgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDcgKQorI2RlZmluZSBQQThfUEZfQ1NJX0Q0ICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgOCApCisjZGVmaW5lIFBBOV9QRl9DU0lfRDUgICAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA5ICkKKyNkZWZpbmUgUEExMF9QRl9DU0lfRDYgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEwICkKKyNkZWZpbmUgUEExMV9QRl9DU0lfRDcgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDExICkKKyNkZWZpbmUgUEExMl9QRl9DU0lfVlNZTkMgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEyICkKKyNkZWZpbmUgUEExM19QRl9DU0lfSFNZTkMgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEzICkKKyNkZWZpbmUgUEExNF9QRl9DU0lfUElYQ0xLICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDE0ICkKKyNkZWZpbmUgUEExNV9QRl9JMkNfU0RBICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTUgKQorI2RlZmluZSBQQTE2X1BGX0kyQ19TQ0wgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNiApCisjZGVmaW5lIFBBMTdfQUZfRVRNVFJBQ0VQS1Q0ICggR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNyApCisjZGVmaW5lIFBBMTdfQUlOX1NQSTJfU1MgICAgICggR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgMTcgKQorI2RlZmluZSBQQTE4X0FGX0VUTVRSQUNFUEtUNSAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTggKQorI2RlZmluZSBQQTE5X0FGX0VUTVRSQUNFUEtUNiAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTkgKQorI2RlZmluZSBQQTIwX0FGX0VUTVRSQUNFUEtUNyAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjAgKQorI2RlZmluZSBQQTIxX1BGX0EwICAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjEgKQorI2RlZmluZSBQQTIyX1BGX0NTNCAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjIgKQorI2RlZmluZSBQQTIzX1BGX0NTNSAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjMgKQorI2RlZmluZSBQQTI0X1BGX0ExNiAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjQgKQorI2RlZmluZSBQQTI0X0FGX0VUTVRSQUNFUEtUMCAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjQgKQorI2RlZmluZSBQQTI1X1BGX0ExNyAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjUgKQorI2RlZmluZSBQQTI1X0FGX0VUTVRSQUNFUEtUMSAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjUgKQorI2RlZmluZSBQQTI2X1BGX0ExOCAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjYgKQorI2RlZmluZSBQQTI2X0FGX0VUTVRSQUNFUEtUMiAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjYgKQorI2RlZmluZSBQQTI3X1BGX0ExOSAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjcgKQorI2RlZmluZSBQQTI3X0FGX0VUTVRSQUNFUEtUMyAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjcgKQorI2RlZmluZSBQQTI4X1BGX0EyMCAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjggKQorI2RlZmluZSBQQTI4X0FGX0VUTVBJUEVTVEFUMCAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjggKQorI2RlZmluZSBQQTI5X1BGX0EyMSAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjkgKQorI2RlZmluZSBQQTI5X0FGX0VUTVBJUEVTVEFUMSAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjkgKQorI2RlZmluZSBQQTMwX1BGX0EyMiAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMzAgKQorI2RlZmluZSBQQTMwX0FGX0VUTVBJUEVTVEFUMiAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzAgKQorI2RlZmluZSBQQTMxX1BGX0EyMyAgICAgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMzEgKQorI2RlZmluZSBQQTMxX0FGX0VUTVRSQUNFQ0xLICAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzEgKQorI2RlZmluZSBQQjhfUEZfU0RfREFUMCAgICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOIHwgOCApCisjZGVmaW5lIFBCOF9BRl9NU19QSU8gICAgICAgICggR1BJT19QT1JUQiB8IEdQSU9fQUYgfCA4ICkKKyNkZWZpbmUgUEI5X1BGX1NEX0RBVDEgICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiAgfCA5ICkKKyNkZWZpbmUgUEI5X0FGX01TX1BJMSAgICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDkgKQorI2RlZmluZSBQQjEwX1BGX1NEX0RBVDIgICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOICB8IDEwICkKKyNkZWZpbmUgUEIxMF9BRl9NU19TQ0xLSSAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEwICkKKyNkZWZpbmUgUEIxMV9QRl9TRF9EQVQzICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiAgfCAxMSApCisjZGVmaW5lIFBCMTFfQUZfTVNfU0RJTyAgICAgICggR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMSApCisjZGVmaW5lIFBCMTJfUEZfU0RfQ0xLICAgICAgICggR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyICkKKyNkZWZpbmUgUEIxMl9BRl9NU19TQ0xLMCAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEyICkKKyNkZWZpbmUgUEIxM19QRl9TRF9DTUQgICAgICAgKCBHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgR1BJT19QVUVOIHwgMTMgKQorI2RlZmluZSBQQjEzX0FGX01TX0JTICAgICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTMgKQorI2RlZmluZSBQQjE0X0FGX1NTSV9SWEZTICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTQgKQorI2RlZmluZSBQQjE1X0FGX1NTSV9SWENMSyAgICAoIEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTUgKQorI2RlZmluZSBQQjE2X0FGX1NTSV9SWERBVCAgICAoIEdQSU9fUE9SVEIgfCBHUElPX0lOIHwgR1BJT19BRiB8IDE2ICkKKyNkZWZpbmUgUEIxN19BRl9TU0lfVFhEQVQgICAgKCBHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMTcgKQorI2RlZmluZSBQQjE4X0FGX1NTSV9UWEZTICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTggKQorI2RlZmluZSBQQjE5X0FGX1NTSV9UWENMSyAgICAoIEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTkgKQorI2RlZmluZSBQQjIwX1BGX1VTQkRfQUZFICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjAgKQorI2RlZmluZSBQQjIxX1BGX1VTQkRfT0UgICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjEgKQorI2RlZmluZSBQQjIyX1BGVVNCRF9SQ1YgICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjIgKQorI2RlZmluZSBQQjIzX1BGX1VTQkRfU1VTUE5EICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjMgKQorI2RlZmluZSBQQjI0X1BGX1VTQkRfVlAgICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjQgKQorI2RlZmluZSBQQjI1X1BGX1VTQkRfVk0gICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjUgKQorI2RlZmluZSBQQjI2X1BGX1VTQkRfVlBPICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjYgKQorI2RlZmluZSBQQjI3X1BGX1VTQkRfVk1PICAgICAoIEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjcgKQorI2RlZmluZSBQQjI4X1BGX1VBUlQyX0NUUyAgICAoIEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyOCApCisjZGVmaW5lIFBCMjlfUEZfVUFSVDJfUlRTICAgICggR1BJT19QT1JUQiB8IEdQSU9fSU4gfCBHUElPX1BGIHwgMjkgKQorI2RlZmluZSBQQjMwX1BGX1VBUlQyX1RYRCAgICAoIEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAzMCApCisjZGVmaW5lIFBCMzFfUEZfVUFSVDJfUlhEICAgICggR1BJT19QT1JUQiB8IEdQSU9fSU4gfCBHUElPX1BGIHwgMzEgKQorI2RlZmluZSBQQzNfUEZfU1NJX1JYRlMgICAgICAoIEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMyApCisjZGVmaW5lIFBDNF9QRl9TU0lfUlhDTEsgICAgICggR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA0ICkKKyNkZWZpbmUgUEM1X1BGX1NTSV9SWERBVCAgICAgKCBHUElPX1BPUlRDIHwgR1BJT19JTiB8IEdQSU9fUEYgfCA1ICkKKyNkZWZpbmUgUEM2X1BGX1NTSV9UWERBVCAgICAgKCBHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNiApCisjZGVmaW5lIFBDN19QRl9TU0lfVFhGUyAgICAgICggR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA3ICkKKyNkZWZpbmUgUEM4X1BGX1NTSV9UWENMSyAgICAgKCBHUElPX1BPUlRDIHwgR1BJT19QRiB8IDggKQorI2RlZmluZSBQQzlfUEZfVUFSVDFfQ1RTICAgICAoIEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA5ICkKKyNkZWZpbmUgUEMxMF9QRl9VQVJUMV9SVFMgICAgKCBHUElPX1BPUlRDIHwgR1BJT19JTiB8IEdQSU9fUEYgfCAxMCApCisjZGVmaW5lIFBDMTFfUEZfVUFSVDFfVFhEICAgICggR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDExICkKKyNkZWZpbmUgUEMxMl9QRl9VQVJUMV9SWEQgICAgKCBHUElPX1BPUlRDIHwgR1BJT19JTiB8IEdQSU9fUEYgfCAxMiApCisjZGVmaW5lIFBDMTNfUEZfU1BJMV9TUElfUkRZICggR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMyApCisjZGVmaW5lIFBDMTRfUEZfU1BJMV9TQ0xLICAgICggR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNCApCisjZGVmaW5lIFBDMTVfUEZfU1BJMV9TUyAgICAgICggR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNSApCisjZGVmaW5lIFBDMTZfUEZfU1BJMV9NSVNPICAgICggR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNiApCisjZGVmaW5lIFBDMTdfUEZfU1BJMV9NT1NJICAgICggR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNyApCisjZGVmaW5lIFBENl9QRl9MU0NMSyAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDYgKQorI2RlZmluZSBQRDdfUEZfUkVWICAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgNyApCisjZGVmaW5lIFBEN19BRl9VQVJUMl9EVFIgICAgICggR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FGIHwgNyApCisjZGVmaW5lIFBEN19BSU5fU1BJMl9TQ0xLICAgICggR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgNyApCisjZGVmaW5lIFBEOF9QRl9DTFMgICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fUEYgfCA4ICkKKyNkZWZpbmUgUEQ4X0FGX1VBUlQyX0RDRCAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgOCApCisjZGVmaW5lIFBEOF9BSU5fU1BJMl9TUyAgICAgICggR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgOCApCisjZGVmaW5lIFBEOV9QRl9QUyAgICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fUEYgfCA5ICkKKyNkZWZpbmUgUEQ5X0FGX1VBUlQyX1JJICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgOSApCisjZGVmaW5lIFBEOV9BT1VUX1NQSTJfUlhEICAgICggR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCA5ICkKKyNkZWZpbmUgUEQxMF9QRl9TUExfU1BSICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTAgKQorI2RlZmluZSBQRDEwX0FGX1VBUlQyX0RTUiAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAxMCApCisjZGVmaW5lIFBEMTBfQUlOX1NQSTJfVFhEICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAxMCApCisjZGVmaW5lIFBEMTFfUEZfQ09OVFJBU1QgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDExICkKKyNkZWZpbmUgUEQxMl9QRl9BQ0RfT0UgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTIgKQorI2RlZmluZSBQRDEzX1BGX0xQX0hTWU5DICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMyApCisjZGVmaW5lIFBEMTRfUEZfRkxNX1ZTWU5DICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE0ICkKKyNkZWZpbmUgUEQxNV9QRl9MRDAgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTUgKQorI2RlZmluZSBQRDE2X1BGX0xEMSAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNiApCisjZGVmaW5lIFBEMTdfUEZfTEQyICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE3ICkKKyNkZWZpbmUgUEQxOF9QRl9MRDMgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTggKQorI2RlZmluZSBQRDE5X1BGX0xENCAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxOSApCisjZGVmaW5lIFBEMjBfUEZfTEQ1ICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIwICkKKyNkZWZpbmUgUEQyMV9QRl9MRDYgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjEgKQorI2RlZmluZSBQRDIyX1BGX0xENyAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMiApCisjZGVmaW5lIFBEMjNfUEZfTEQ4ICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIzICkKKyNkZWZpbmUgUEQyNF9QRl9MRDkgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjQgKQorI2RlZmluZSBQRDI1X1BGX0xEMTAgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNSApCisjZGVmaW5lIFBEMjZfUEZfTEQxMSAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI2ICkKKyNkZWZpbmUgUEQyN19QRl9MRDEyICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjcgKQorI2RlZmluZSBQRDI4X1BGX0xEMTMgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyOCApCisjZGVmaW5lIFBEMjlfUEZfTEQxNCAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI5ICkKKyNkZWZpbmUgUEQzMF9QRl9MRDE1ICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMzAgKQorI2RlZmluZSBQRDMxX1BGX1RNUjJPVVQgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMzEgKQorI2RlZmluZSBQRDMxX0JJTl9TUEkyX1RYRCAgICAoIEdQSU9fUE9SVEQgfCBHUElPX0JJTiB8IDMxICkKKworLyoKKyAqICBETUEgQ29udHJvbGxlcgorICovCisjZGVmaW5lIERDUiAgICAgX19SRUcoSU1YX0RNQUNfQkFTRSArMHgwMCkJLyogRE1BIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElTUiAgICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDA0KQkvKiBETUEgSW50ZXJydXB0IHN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBESU1SICAgIF9fUkVHKElNWF9ETUFDX0JBU0UgKzB4MDgpCS8qIERNQSBJbnRlcnJ1cHQgbWFzayBSZWdpc3RlciAqLworI2RlZmluZSBEQlRPU1IgIF9fUkVHKElNWF9ETUFDX0JBU0UgKzB4MGMpCS8qIERNQSBCdXJzdCB0aW1lb3V0IHN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBEUlRPU1IgIF9fUkVHKElNWF9ETUFDX0JBU0UgKzB4MTApCS8qIERNQSBSZXF1ZXN0IHRpbWVvdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRFNFU1IgICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDE0KQkvKiBETUEgVHJhbnNmZXIgRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERCT1NSICAgX19SRUcoSU1YX0RNQUNfQkFTRSArMHgxOCkJLyogRE1BIEJ1ZmZlciBvdmVyZmxvdyBzdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgREJUT0NSICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDFjKQkvKiBETUEgQnVyc3QgdGltZW91dCBjb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFdTUkEgICAgX19SRUcoSU1YX0RNQUNfQkFTRSArMHg0MCkJLyogVy1TaXplIFJlZ2lzdGVyIEEgKi8KKyNkZWZpbmUgWFNSQSAgICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDQ0KQkvKiBYLVNpemUgUmVnaXN0ZXIgQSAqLworI2RlZmluZSBZU1JBICAgIF9fUkVHKElNWF9ETUFDX0JBU0UgKzB4NDgpCS8qIFktU2l6ZSBSZWdpc3RlciBBICovCisjZGVmaW5lIFdTUkIgICAgX19SRUcoSU1YX0RNQUNfQkFTRSArMHg0YykJLyogVy1TaXplIFJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgWFNSQiAgICBfX1JFRyhJTVhfRE1BQ19CQVNFICsweDUwKQkvKiBYLVNpemUgUmVnaXN0ZXIgQiAqLworI2RlZmluZSBZU1JCICAgIF9fUkVHKElNWF9ETUFDX0JBU0UgKzB4NTQpCS8qIFktU2l6ZSBSZWdpc3RlciBCICovCisjZGVmaW5lIFNBUih4KSAgX19SRUcyKCBJTVhfRE1BQ19CQVNFICsgMHg4MCwgKHgpIDw8IDYpCS8qIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBEQVIoeCkgIF9fUkVHMiggSU1YX0RNQUNfQkFTRSArIDB4ODQsICh4KSA8PCA2KQkvKiBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBDTlRSKHgpIF9fUkVHMiggSU1YX0RNQUNfQkFTRSArIDB4ODgsICh4KSA8PCA2KQkvKiBDb3VudCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ0NSKHgpICBfX1JFRzIoIElNWF9ETUFDX0JBU0UgKyAweDhjLCAoeCkgPDwgNikJLyqgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUlNTUih4KSBfX1JFRzIoIElNWF9ETUFDX0JBU0UgKyAweDkwLCAoeCkgPDwgNikJLyogUmVxdWVzdCBzb3VyY2Ugc2VsZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBCTFIoeCkgIF9fUkVHMiggSU1YX0RNQUNfQkFTRSArIDB4OTQsICh4KSA8PCA2KQkvKiBCdXJzdCBsZW5ndGggUmVnaXN0ZXJzICovCisjZGVmaW5lIFJUT1IoeCkgX19SRUcyKCBJTVhfRE1BQ19CQVNFICsgMHg5OCwgKHgpIDw8IDYpCS8qIFJlcXVlc3QgdGltZW91dCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQlVDUih4KSBfX1JFRzIoIElNWF9ETUFDX0JBU0UgKyAweDk4LCAoeCkgPDwgNikJLyogQnVzIFV0aWxpemF0aW9uIFJlZ2lzdGVycyAqLworCisvKiBUT0RPOiBkZWZpbmUgRE1BX1JFUSBsaW5lcyAqLworCisjZGVmaW5lIERDUl9EUlNUICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgRENSX0RFTiAgICAgICAgICAgICgxPDwwKQorI2RlZmluZSBEQlRPQ1JfRU4gICAgICAgICAgKDE8PDE1KQorI2RlZmluZSBEQlRPQ1JfQ05UKHgpICAgICAgKCh4KSAmIDB4N2ZmZiApCisjZGVmaW5lIENOVFJfQ05UKHgpICAgICAgICAoKHgpICYgMHhmZmZmZmYgKQorI2RlZmluZSBDQ1JfRE1PRF9MSU5FQVIgICAgKCAweDAgPDwgMTIgKQorI2RlZmluZSBDQ1JfRE1PRF8yRCAgICAgICAgKCAweDEgPDwgMTIgKQorI2RlZmluZSBDQ1JfRE1PRF9GSUZPICAgICAgKCAweDIgPDwgMTIgKQorI2RlZmluZSBDQ1JfRE1PRF9FT0JGSUZPICAgKCAweDMgPDwgMTIgKQorI2RlZmluZSBDQ1JfU01PRF9MSU5FQVIgICAgKCAweDAgPDwgMTAgKQorI2RlZmluZSBDQ1JfU01PRF8yRCAgICAgICAgKCAweDEgPDwgMTAgKQorI2RlZmluZSBDQ1JfU01PRF9GSUZPICAgICAgKCAweDIgPDwgMTAgKQorI2RlZmluZSBDQ1JfU01PRF9FT0JGSUZPICAgKCAweDMgPDwgMTAgKQorI2RlZmluZSBDQ1JfTURJUl9ERUMgICAgICAgKDE8PDkpCisjZGVmaW5lIENDUl9NU0VMX0IgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgQ0NSX0RTSVpfMzIgICAgICAgICggMHgwIDw8IDYgKQorI2RlZmluZSBDQ1JfRFNJWl84ICAgICAgICAgKCAweDEgPDwgNiApCisjZGVmaW5lIENDUl9EU0laXzE2ICAgICAgICAoIDB4MiA8PCA2ICkKKyNkZWZpbmUgQ0NSX1NTSVpfMzIgICAgICAgICggMHgwIDw8IDQgKQorI2RlZmluZSBDQ1JfU1NJWl84ICAgICAgICAgKCAweDEgPDwgNCApCisjZGVmaW5lIENDUl9TU0laXzE2ICAgICAgICAoIDB4MiA8PCA0ICkKKyNkZWZpbmUgQ0NSX1JFTiAgICAgICAgICAgICgxPDwzKQorI2RlZmluZSBDQ1JfUlBUICAgICAgICAgICAgKDE8PDIpCisjZGVmaW5lIENDUl9GUkMgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgQ0NSX0NFTiAgICAgICAgICAgICgxPDwwKQorI2RlZmluZSBSVE9SX0VOICAgICAgICAgICAgKDE8PDE1KQorI2RlZmluZSBSVE9SX0NMSyAgICAgICAgICAgKDE8PDE0KQorI2RlZmluZSBSVE9SX1BTQyAgICAgICAgICAgKDE8PDEzKQorCisvKgorICogTENEIENvbnRyb2xsZXIKKyAqLworCisjZGVmaW5lIExDRENfU1NBCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgwMCkKKworI2RlZmluZSBMQ0RDX1NJWkUJX19SRUcoSU1YX0xDRENfQkFTRSsweDA0KQorI2RlZmluZSBTSVpFX1hNQVgoeCkJKCgoKHgpID4+IDQpICYgMHgzZikgPDwgMjApCisjZGVmaW5lIFNJWkVfWU1BWCh5KSAgICAoICh5KSAmIDB4MWZmICkKKworI2RlZmluZSBMQ0RDX1ZQVwlfX1JFRyhJTVhfTENEQ19CQVNFKzB4MDgpCisjZGVmaW5lIFZQV19WUFcoeCkJKCAoeCkgJiAweDNmZiApCisKKyNkZWZpbmUgTENEQ19DUE9TCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgwQykKKyNkZWZpbmUgQ1BPU19DQzEgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgQ1BPU19DQzAgICAgICAgICgxPDwzMCkKKyNkZWZpbmUgQ1BPU19PUCAgICAgICAgICgxPDwyOCkKKyNkZWZpbmUgQ1BPU19DWFAoeCkgICAgICgoKHgpICYgM2ZmKSA8PCAxNikKKyNkZWZpbmUgQ1BPU19DWVAoeSkgICAgICgoeSkgJiAweDFmZikKKworI2RlZmluZSBMQ0RDX0xDV0hCCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgxMCkKKyNkZWZpbmUgTENXSEJfQktfRU4gICAgICgxPDwzMSkKKyNkZWZpbmUgTENXSEJfQ1codykgICAgICgoKHcpICYgMHgxZikgPDwgMjQpCisjZGVmaW5lIExDV0hCX0NIKGgpICAgICAoKChoKSAmIDB4MWYpIDw8IDE2KQorI2RlZmluZSBMQ1dIQl9CRCh4KSAgICAgKCh4KSAmIDB4ZmYpCisKKyNkZWZpbmUgTENEQ19MQ0hDQwlfX1JFRyhJTVhfTENEQ19CQVNFKzB4MTQpCisjZGVmaW5lIExDSENDX0NVUl9DT0xfUihyKSAoKChyKSAmIDB4MWYpIDw8IDExKQorI2RlZmluZSBMQ0hDQ19DVVJfQ09MX0coZykgKCgoZykgJiAweDNmKSA8PCA1KQorI2RlZmluZSBMQ0hDQ19DVVJfQ09MX0IoYikgKChiKSAmIDB4MWYpCisKKyNkZWZpbmUgTENEQ19QQ1IJX19SRUcoSU1YX0xDRENfQkFTRSsweDE4KQorI2RlZmluZSBQQ1JfVEZUICAgICAgICAgKDE8PDMxKQorI2RlZmluZSBQQ1JfQ09MT1IgICAgICAgKDE8PDMwKQorI2RlZmluZSBQQ1JfUEJTSVpfMSAgICAgKDA8PDI4KQorI2RlZmluZSBQQ1JfUEJTSVpfMiAgICAgKDE8PDI4KQorI2RlZmluZSBQQ1JfUEJTSVpfNCAgICAgKDI8PDI4KQorI2RlZmluZSBQQ1JfUEJTSVpfOCAgICAgKDM8PDI4KQorI2RlZmluZSBQQ1JfQlBJWF8xICAgICAgKDA8PDI1KQorI2RlZmluZSBQQ1JfQlBJWF8yICAgICAgKDE8PDI1KQorI2RlZmluZSBQQ1JfQlBJWF80ICAgICAgKDI8PDI1KQorI2RlZmluZSBQQ1JfQlBJWF84ICAgICAgKDM8PDI1KQorI2RlZmluZSBQQ1JfQlBJWF8xMiAgICAgKDQ8PDI1KQorI2RlZmluZSBQQ1JfQlBJWF8xNiAgICAgKDQ8PDI1KQorI2RlZmluZSBQQ1JfUElYUE9MICAgICAgKDE8PDI0KQorI2RlZmluZSBQQ1JfRkxNUE9MICAgICAgKDE8PDIzKQorI2RlZmluZSBQQ1JfTFBQT0wgICAgICAgKDE8PDIyKQorI2RlZmluZSBQQ1JfQ0xLUE9MICAgICAgKDE8PDIxKQorI2RlZmluZSBQQ1JfT0VQT0wgICAgICAgKDE8PDIwKQorI2RlZmluZSBQQ1JfU0NMS0lETEUgICAgKDE8PDE5KQorI2RlZmluZSBQQ1JfRU5EX1NFTCAgICAgKDE8PDE4KQorI2RlZmluZSBQQ1JfRU5EX0JZVEVfU1dBUCAoMTw8MTcpCisjZGVmaW5lIFBDUl9SRVZfVlMgICAgICAoMTw8MTYpCisjZGVmaW5lIFBDUl9BQ0RfU0VMICAgICAoMTw8MTUpCisjZGVmaW5lIFBDUl9BQ0QoeCkgICAgICAoKCh4KSAmIDB4N2YpIDw8IDgpCisjZGVmaW5lIFBDUl9TQ0xLX1NFTCAgICAoMTw8NykKKyNkZWZpbmUgUENSX1NIQVJQICAgICAgICgxPDw2KQorI2RlZmluZSBQQ1JfUENEKHgpICAgICAgKCh4KSAmIDB4M2YpCisKKyNkZWZpbmUgTENEQ19IQ1IJX19SRUcoSU1YX0xDRENfQkFTRSsweDFDKQorI2RlZmluZSBIQ1JfSF9XSURUSCh4KSAgKCgoeCkgJiAweDNmKSA8PCAyNikKKyNkZWZpbmUgSENSX0hfV0FJVF8xKHgpICgoKHgpICYgMHhmZikgPDwgOCkKKyNkZWZpbmUgSENSX0hfV0FJVF8yKHgpICgoeCkgJiAweGZmKQorCisjZGVmaW5lIExDRENfVkNSCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgyMCkKKyNkZWZpbmUgVkNSX1ZfV0lEVEgoeCkgICgoKHgpICYgMHgzZikgPDwgMjYpCisjZGVmaW5lIFZDUl9WX1dBSVRfMSh4KSAoKCh4KSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFZDUl9WX1dBSVRfMih4KSAoKHgpICYgMHhmZikKKworI2RlZmluZSBMQ0RDX1BPUwlfX1JFRyhJTVhfTENEQ19CQVNFKzB4MjQpCisjZGVmaW5lIFBPU19QT1MoeCkgICAgICAoKHgpICYgMWYpCisKKyNkZWZpbmUgTENEQ19MU0NSMQlfX1JFRyhJTVhfTENEQ19CQVNFKzB4MjgpCisjZGVmaW5lIExTQ1IxX0dSQVkxKHgpICAoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgTFNDUjFfR1JBWTIoeCkgICgoeCkgJiAweGYpCisKKyNkZWZpbmUgTENEQ19QV01SCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgyQykKKyNkZWZpbmUgUFdNUl9DTFMoeCkgICAgICgoKHgpICYgMHgxZmYpIDw8IDE2KQorI2RlZmluZSBQV01SX0xETVNLICAgICAgKDE8PDE1KQorI2RlZmluZSBQV01SX1NDUjEgICAgICAgKDE8PDEwKQorI2RlZmluZSBQV01SX1NDUjAgICAgICAgKDE8PDkpCisjZGVmaW5lIFBXTVJfQ0NfRU4gICAgICAoMTw8OCkKKyNkZWZpbmUgUFdNUl9QVyh4KSAgICAgICgoeCkgJiAweGZmKQorCisjZGVmaW5lIExDRENfRE1BQ1IJX19SRUcoSU1YX0xDRENfQkFTRSsweDMwKQorI2RlZmluZSBETUFDUl9CVVJTVCAgICAgKDE8PDMxKQorI2RlZmluZSBETUFDUl9ITSh4KSAgICAgKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBETUFDUl9UTSh4KSAgICAgKCh4KSAmMHhmKQorCisjZGVmaW5lIExDRENfUk1DUglfX1JFRyhJTVhfTENEQ19CQVNFKzB4MzQpCisjZGVmaW5lIFJNQ1JfTENEQ19FTgkJKDE8PDEpCisjZGVmaW5lIFJNQ1JfU0VMRl9SRUYJCSgxPDwwKQorCisjZGVmaW5lIExDRENfTENESUNSCV9fUkVHKElNWF9MQ0RDX0JBU0UrMHgzOCkKKyNkZWZpbmUgTENESUNSX0lOVF9TWU4gICgxPDwyKQorI2RlZmluZSBMQ0RJQ1JfSU5UX0NPTiAgKDEpCisKKyNkZWZpbmUgTENEQ19MQ0RJU1IJX19SRUcoSU1YX0xDRENfQkFTRSsweDQwKQorI2RlZmluZSBMQ0RJU1JfVURSX0VSUiAoMTw8MykKKyNkZWZpbmUgTENESVNSX0VSUl9SRVMgKDE8PDIpCisjZGVmaW5lIExDRElTUl9FT0YgICAgICgxPDwxKQorI2RlZmluZSBMQ0RJU1JfQk9GICAgICAoMTw8MCkKKy8qCisgKiAgVUFSVCBNb2R1bGUKKyAqLworI2RlZmluZSBVUlhEMCh4KSBfX1JFRzIoIElNWF9VQVJUMV9CQVNFICsgMHgwLCAoKHgpICYgMSkgPDwgMTIpCS8qIFJlY2VpdmVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFVSVFgwKHgpIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweDQwLCAoKHgpICYgMSkgPDwgMTIpCS8qIFRyYW5zbWl0dGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFVDUjEoeCkgIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweDgwLCAoKHgpICYgMSkgPDwgMTIpCS8qIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBVQ1IyKHgpICBfX1JFRzIoIElNWF9VQVJUMV9CQVNFICsgMHg4NCwgKCh4KSAmIDEpIDw8IDEyKQkvKiBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgVUNSMyh4KSAgX19SRUcyKCBJTVhfVUFSVDFfQkFTRSArIDB4ODgsICgoeCkgJiAxKSA8PCAxMikJLyogQ29udHJvbCBSZWdpc3RlciAzICovCisjZGVmaW5lIFVDUjQoeCkgIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweDhjLCAoKHgpICYgMSkgPDwgMTIpCS8qIENvbnRyb2wgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBVRkNSKHgpICBfX1JFRzIoIElNWF9VQVJUMV9CQVNFICsgMHg5MCwgKCh4KSAmIDEpIDw8IDEyKQkvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNSMSh4KSAgX19SRUcyKCBJTVhfVUFSVDFfQkFTRSArIDB4OTQsICgoeCkgJiAxKSA8PCAxMikJLyogU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgVVNSMih4KSAgX19SRUcyKCBJTVhfVUFSVDFfQkFTRSArIDB4OTgsICgoeCkgJiAxKSA8PCAxMikJLyogU3RhdHVzIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgVUVTQyh4KSAgX19SRUcyKCBJTVhfVUFSVDFfQkFTRSArIDB4OWMsICgoeCkgJiAxKSA8PCAxMikJLyogRXNjYXBlIENoYXJhY3RlciBSZWdpc3RlciAqLworI2RlZmluZSBVVElNKHgpICBfX1JFRzIoIElNWF9VQVJUMV9CQVNFICsgMHhhMCwgKCh4KSAmIDEpIDw8IDEyKQkvKiBFc2NhcGUgVGltZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUJJUih4KSAgX19SRUcyKCBJTVhfVUFSVDFfQkFTRSArIDB4YTQsICgoeCkgJiAxKSA8PCAxMikJLyogQlJNIEluY3JlbWVudGFsIFJlZ2lzdGVyICovCisjZGVmaW5lIFVCTVIoeCkgIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweGE4LCAoKHgpICYgMSkgPDwgMTIpCS8qIEJSTSBNb2R1bGF0b3IgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUJSQyh4KSAgX19SRUcyKCBJTVhfVUFSVDFfQkFTRSArIDB4YWMsICgoeCkgJiAxKSA8PCAxMikJLyogQmF1ZCBSYXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIEJJUFIxKHgpIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweGIwLCAoKHgpICYgMSkgPDwgMTIpCS8qIEluY3JlbWVudGFsIFByZXNldCBSZWdpc3RlciAxICovCisjZGVmaW5lIEJJUFIyKHgpIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweGI0LCAoKHgpICYgMSkgPDwgMTIpCS8qIEluY3JlbWVudGFsIFByZXNldCBSZWdpc3RlciAyICovCisjZGVmaW5lIEJJUFIzKHgpIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweGI4LCAoKHgpICYgMSkgPDwgMTIpCS8qIEluY3JlbWVudGFsIFByZXNldCBSZWdpc3RlciAzICovCisjZGVmaW5lIEJJUFI0KHgpIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweGJjLCAoKHgpICYgMSkgPDwgMTIpCS8qIEluY3JlbWVudGFsIFByZXNldCBSZWdpc3RlciA0ICovCisjZGVmaW5lIEJNUFIxKHgpIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweGMwLCAoKHgpICYgMSkgPDwgMTIpCS8qIEJSTSBNb2R1bGF0b3IgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBCTVBSMih4KSBfX1JFRzIoIElNWF9VQVJUMV9CQVNFICsgMHhjNCwgKCh4KSAmIDEpIDw8IDEyKQkvKiBCUk0gTW9kdWxhdG9yIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQk1QUjMoeCkgX19SRUcyKCBJTVhfVUFSVDFfQkFTRSArIDB4YzgsICgoeCkgJiAxKSA8PCAxMikJLyogQlJNIE1vZHVsYXRvciBSZWdpc3RlciAzICovCisjZGVmaW5lIEJNUFI0KHgpIF9fUkVHMiggSU1YX1VBUlQxX0JBU0UgKyAweGNjLCAoKHgpICYgMSkgPDwgMTIpCS8qIEJSTSBNb2R1bGF0b3IgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBVVFMoeCkgICBfX1JFRzIoIElNWF9VQVJUMV9CQVNFICsgMHhkMCwgKCh4KSAmIDEpIDw8IDEyKQkvKiBVQVJUIFRlc3QgUmVnaXN0ZXIgKi8KKworLyogVUFSVCBDb250cm9sIFJlZ2lzdGVyIEJpdCBGaWVsZHMuKi8KKyNkZWZpbmUgIFVSWERfQ0hBUlJEWSAgICAoMTw8MTUpCisjZGVmaW5lICBVUlhEX0VSUiAgICAgICAgKDE8PDE0KQorI2RlZmluZSAgVVJYRF9PVlJSVU4gICAgICgxPDwxMykKKyNkZWZpbmUgIFVSWERfRlJNRVJSICAgICAoMTw8MTIpCisjZGVmaW5lICBVUlhEX0JSSyAgICAgICAgKDE8PDExKQorI2RlZmluZSAgVVJYRF9QUkVSUiAgICAgICgxPDwxMCkKKyNkZWZpbmUgIFVDUjFfQURFTiAgICAgICAoMTw8MTUpIC8qIEF1dG8gZGVjdGVjdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgIFVDUjFfQURCUiAgICAgICAoMTw8MTQpIC8qIEF1dG8gZGV0ZWN0IGJhdWQgcmF0ZSAqLworI2RlZmluZSAgVUNSMV9UUkRZRU4gICAgICgxPDwxMykgLyogVHJhbnNtaXR0ZXIgcmVhZHkgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSMV9JREVOICAgICAgICgxPDwxMikgLyogSWRsZSBjb25kaXRpb24gaW50ZXJydXB0ICovCisjZGVmaW5lICBVQ1IxX1JSRFlFTiAgICAgKDE8PDkpCSAvKiBSZWN2IHJlYWR5IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjFfUkRNQUVOICAgICAoMTw8OCkJIC8qIFJlY3YgcmVhZHkgRE1BIGVuYWJsZSAqLworI2RlZmluZSAgVUNSMV9JUkVOICAgICAgICgxPDw3KQkgLyogSW5mcmFyZWQgaW50ZXJmYWNlIGVuYWJsZSAqLworI2RlZmluZSAgVUNSMV9UWE1QVFlFTiAgICgxPDw2KQkgLyogVHJhbnNpbWl0dGVyIGVtcHR5IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjFfUlRTREVOICAgICAoMTw8NSkJIC8qIFJUUyBkZWx0YSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1IxX1NOREJSSyAgICAgKDE8PDQpCSAvKiBTZW5kIGJyZWFrICovCisjZGVmaW5lICBVQ1IxX1RETUFFTiAgICAgKDE8PDMpCSAvKiBUcmFuc21pdHRlciByZWFkeSBETUEgZW5hYmxlICovCisjZGVmaW5lICBVQ1IxX1VBUlRDTEtFTiAgKDE8PDIpCSAvKiBVQVJUIGNsb2NrIGVuYWJsZWQgKi8KKyNkZWZpbmUgIFVDUjFfRE9aRSAgICAgICAoMTw8MSkJIC8qIERvemUgKi8KKyNkZWZpbmUgIFVDUjFfVUFSVEVOICAgICAoMTw8MCkJIC8qIFVBUlQgZW5hYmxlZCAqLworI2RlZmluZSAgVUNSMl9FU0NJICAgICAJICgxPDwxNSkgLyogRXNjYXBlIHNlcSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1IyX0lSVFMgIAkgKDE8PDE0KSAvKiBJZ25vcmUgUlRTIHBpbiAqLworI2RlZmluZSAgVUNSMl9DVFNDICAJICgxPDwxMykgLyogQ1RTIHBpbiBjb250cm9sICovCisjZGVmaW5lICBVQ1IyX0NUUyAgICAgICAgKDE8PDEyKSAvKiBDbGVhciB0byBzZW5kICovCisjZGVmaW5lICBVQ1IyX0VTQ0VOICAgICAgKDE8PDExKSAvKiBFc2NhcGUgZW5hYmxlICovCisjZGVmaW5lICBVQ1IyX1BSRU4gICAgICAgKDE8PDgpIC8qIFBhcml0eSBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjJfUFJPRSAgICAgICAoMTw8NykgLyogUGFyaXR5IG9kZC9ldmVuICovCisjZGVmaW5lICBVQ1IyX1NUUEIgICAgICAgKDE8PDYpCS8qIFN0b3AgKi8KKyNkZWZpbmUgIFVDUjJfV1MgICAgICAgICAoMTw8NSkJLyogV29yZCBzaXplICovCisjZGVmaW5lICBVQ1IyX1JUU0VOICAgICAgKDE8PDQpCS8qIFJlcXVlc3QgdG8gc2VuZCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1IyX1RYRU4gICAgICAgKDE8PDIpCS8qIFRyYW5zbWl0dGVyIGVuYWJsZWQgKi8KKyNkZWZpbmUgIFVDUjJfUlhFTiAgICAgICAoMTw8MSkJLyogUmVjZWl2ZXIgZW5hYmxlZCAqLworI2RlZmluZSAgVUNSMl9TUlNUIAkgKDE8PDApCS8qIFNXIHJlc2V0ICovCisjZGVmaW5lICBVQ1IzX0RUUkVOIAkgKDE8PDEzKSAvKiBEVFIgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSM19QQVJFUlJFTiAgICgxPDwxMikgLyogUGFyaXR5IGVuYWJsZSAqLworI2RlZmluZSAgVUNSM19GUkFFUlJFTiAgICgxPDwxMSkgLyogRnJhbWUgZXJyb3IgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSM19EU1IgICAgICAgICgxPDwxMCkgLyogRGF0YSBzZXQgcmVhZHkgKi8KKyNkZWZpbmUgIFVDUjNfRENEICAgICAgICAoMTw8OSkgIC8qIERhdGEgY2FycmllciBkZXRlY3QgKi8KKyNkZWZpbmUgIFVDUjNfUkkgICAgICAgICAoMTw8OCkgIC8qIFJpbmcgaW5kaWNhdG9yICovCisjZGVmaW5lICBVQ1IzX1RJTUVPVVRFTiAgKDE8PDcpICAvKiBUaW1lb3V0IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjNfUlhEU0VOCSAoMTw8NikgIC8qIFJlY2VpdmUgc3RhdHVzIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjNfQUlSSU5URU4gICAoMTw8NSkgIC8qIEFzeW5jIElSIHdha2UgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSM19BV0FLRU4JICgxPDw0KSAgLyogQXN5bmMgd2FrZSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1IzX1JFRjI1IAkgKDE8PDMpICAvKiBSZWYgZnJlcSAyNSBNSHogKi8KKyNkZWZpbmUgIFVDUjNfUkVGMzAgCSAoMTw8MikgIC8qIFJlZiBGcmVxIDMwIE1IeiAqLworI2RlZmluZSAgVUNSM19JTlZUICAJICgxPDwxKSAgLyogSW52ZXJ0ZWQgSW5mcmFyZWQgdHJhbnNtaXNzaW9uICovCisjZGVmaW5lICBVQ1IzX0JQRU4gIAkgKDE8PDApICAvKiBQcmVzZXQgcmVnaXN0ZXJzIGVuYWJsZSAqLworI2RlZmluZSAgVUNSNF9DVFNUTF8zMiAgICgzMjw8MTApIC8qIENUUyB0cmlnZ2VyIGxldmVsICgzMiBjaGFycykgKi8KKyNkZWZpbmUgIFVDUjRfSU5WUiAgCSAoMTw8OSkgIC8qIEludmVydGVkIGluZnJhcmVkIHJlY2VwdGlvbiAqLworI2RlZmluZSAgVUNSNF9FTklSSSAJICgxPDw4KSAgLyogU2VyaWFsIGluZnJhcmVkIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgIFVDUjRfV0tFTiAgCSAoMTw8NykgIC8qIFdha2UgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSNF9SRUYxNiAJICgxPDw2KSAgLyogUmVmIGZyZXEgMTYgTUh6ICovCisjZGVmaW5lICBVQ1I0X0lSU0MgIAkgKDE8PDUpIC8qIElSIHNwZWNpYWwgY2FzZSAqLworI2RlZmluZSAgVUNSNF9UQ0VOICAJICgxPDwzKSAvKiBUcmFuc21pdCBjb21wbGV0ZSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1I0X0JLRU4gIAkgKDE8PDIpIC8qIEJyZWFrIGNvbmRpdGlvbiBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICBVQ1I0X09SRU4gIAkgKDE8PDEpIC8qIFJlY2VpdmVyIG92ZXJydW4gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUNSNF9EUkVOICAJICgxPDwwKSAvKiBSZWN2IGRhdGEgcmVhZHkgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgVUZDUl9SWFRMX1NIRiAgIDAgICAgICAvKiBSZWNlaXZlciB0cmlnZ2VyIGxldmVsIHNoaWZ0ICovCisjZGVmaW5lICBVRkNSX1JGRElWICAgICAgKDc8PDcpIC8qIFJlZmVyZW5jZSBmcmVxIGRpdmlkZXIgbWFzayAqLworI2RlZmluZSAgVUZDUl9UWFRMX1NIRiAgIDEwICAgICAvKiBUcmFuc21pdHRlciB0cmlnZ2VyIGxldmVsIHNoaWZ0ICovCisjZGVmaW5lICBVU1IxX1BBUklUWUVSUiAgKDE8PDE1KSAvKiBQYXJpdHkgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyNkZWZpbmUgIFVTUjFfUlRTUyAgCSAoMTw8MTQpIC8qIFJUUyBwaW4gc3RhdHVzICovCisjZGVmaW5lICBVU1IxX1RSRFkgIAkgKDE8PDEzKSAvKiBUcmFuc21pdHRlciByZWFkeSBpbnRlcnJ1cHQvZG1hIGZsYWcgKi8KKyNkZWZpbmUgIFVTUjFfUlRTRCAgCSAoMTw8MTIpIC8qIFJUUyBkZWx0YSAqLworI2RlZmluZSAgVVNSMV9FU0NGICAJICgxPDwxMSkgLyogRXNjYXBlIHNlcSBpbnRlcnJ1cHQgZmxhZyAqLworI2RlZmluZSAgVVNSMV9GUkFNRVJSICAgICgxPDwxMCkgLyogRnJhbWUgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyNkZWZpbmUgIFVTUjFfUlJEWSAgICAgICAoMTw8OSkJLyogUmVjZWl2ZXIgcmVhZHkgaW50ZXJydXB0L2RtYSBmbGFnICovCisjZGVmaW5lICBVU1IxX1RJTUVPVVQgICAgKDE8PDcpCS8qIFJlY2VpdmUgdGltZW91dCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICBVU1IxX1JYRFMgIAkgKDE8PDYpCS8qIFJlY2VpdmVyIGlkbGUgaW50ZXJydXB0IGZsYWcgKi8KKyNkZWZpbmUgIFVTUjFfQUlSSU5UCSAoMTw8NSkJLyogQXN5bmMgSVIgd2FrZSBpbnRlcnJ1cHQgZmxhZyAqLworI2RlZmluZSAgVVNSMV9BV0FLRSAJICgxPDw0KQkvKiBBeXNuYyB3YWtlIGludGVycnVwdCBmbGFnICovCisjZGVmaW5lICBVU1IyX0FERVQgIAkgKDE8PDE1KSAvKiBBdXRvIGJhdWQgcmF0ZSBkZXRlY3QgY29tcGxldGUgKi8KKyNkZWZpbmUgIFVTUjJfVFhGRSAgCSAoMTw8MTQpIC8qIFRyYW5zbWl0IGJ1ZmZlciBGSUZPIGVtcHR5ICovCisjZGVmaW5lICBVU1IyX0RUUkYgIAkgKDE8PDEzKSAvKiBEVFIgZWRnZSBpbnRlcnJ1cHQgZmxhZyAqLworI2RlZmluZSAgVVNSMl9JRExFICAJICgxPDwxMikgLyogSWRsZSBjb25kaXRpb24gKi8KKyNkZWZpbmUgIFVTUjJfSVJJTlQgCSAoMTw8OCkJLyogU2VyaWFsIGluZnJhcmVkIGludGVycnVwdCBmbGFnICovCisjZGVmaW5lICBVU1IyX1dBS0UgIAkgKDE8PDcpCS8qIFdha2UgKi8KKyNkZWZpbmUgIFVTUjJfUlRTRiAgCSAoMTw8NCkJLyogUlRTIGVkZ2UgaW50ZXJydXB0IGZsYWcgKi8KKyNkZWZpbmUgIFVTUjJfVFhEQyAgCSAoMTw8MykJLyogVHJhbnNtaXR0ZXIgY29tcGxldGUgKi8KKyNkZWZpbmUgIFVTUjJfQlJDRCAgCSAoMTw8MikJLyogQnJlYWsgY29uZGl0aW9uICovCisjZGVmaW5lICBVU1IyX09SRSAgICAgICAgKDE8PDEpCS8qIE92ZXJydW4gZXJyb3IgKi8KKyNkZWZpbmUgIFVTUjJfUkRSICAgICAgICAoMTw8MCkJLyogUmVjdiBkYXRhIHJlYWR5ICovCisjZGVmaW5lICBVVFNfRlJDUEVSUgkgKDE8PDEzKSAvKiBGb3JjZSBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgIFVUU19MT09QICAgICAgICAoMTw8MTIpIC8qIExvb3AgdHggYW5kIHJ4ICovCisjZGVmaW5lICBVVFNfVFhFTVBUWQkgKDE8PDYpCS8qIFR4RklGTyBlbXB0eSAqLworI2RlZmluZSAgVVRTX1JYRU1QVFkJICgxPDw1KQkvKiBSeEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgIFVUU19UWEZVTEwgCSAoMTw8NCkJLyogVHhGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgIFVUU19SWEZVTEwgCSAoMTw8MykJLyogUnhGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgIFVUU19TT0ZUUlNUCSAoMTw8MCkJLyogU29mdHdhcmUgcmVzZXQgKi8KKworLyogR2VuZXJhbCBwdXJwb3NlIHRpbWVycyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVENUTDEgICBfX1JFRyhJTVhfVElNMV9CQVNFKQorI2RlZmluZSBUUFJFUjEgIF9fUkVHKElNWF9USU0xX0JBU0UgKyAweDQpCisjZGVmaW5lIFRDTVAxICAgX19SRUcoSU1YX1RJTTFfQkFTRSArIDB4OCkKKyNkZWZpbmUgVENSMSAgICBfX1JFRyhJTVhfVElNMV9CQVNFICsgMHhjKQorI2RlZmluZSBUQ04xICAgIF9fUkVHKElNWF9USU0xX0JBU0UgKyAweDEwKQorI2RlZmluZSBUU1RBVDEgIF9fUkVHKElNWF9USU0xX0JBU0UgKyAweDE0KQorI2RlZmluZSBUQ1RMMiAgIF9fUkVHKElNWF9USU0yX0JBU0UpCisjZGVmaW5lIFRQUkVSMiAgX19SRUcoSU1YX1RJTTJfQkFTRSArIDB4NCkKKyNkZWZpbmUgVENNUDIgICBfX1JFRyhJTVhfVElNMl9CQVNFICsgMHg4KQorI2RlZmluZSBUQ1IyICAgIF9fUkVHKElNWF9USU0yX0JBU0UgKyAweGMpCisjZGVmaW5lIFRDTjIgICAgX19SRUcoSU1YX1RJTTJfQkFTRSArIDB4MTApCisjZGVmaW5lIFRTVEFUMiAgX19SRUcoSU1YX1RJTTJfQkFTRSArIDB4MTQpCisKKy8qIEdlbmVyYWwgcHVycG9zZSB0aW1lcnMgYml0ZmllbGRzICovCisjZGVmaW5lIFRDVExfU1dSICAgICAgICgxPDwxNSkgLyogU29mdHdhcmUgcmVzZXQgKi8KKyNkZWZpbmUgVENUTF9GUlIgICAgICAgKDE8PDgpICAvKiBGcmVlcnVuIC8gcmVzdGFydCAqLworI2RlZmluZSBUQ1RMX0NBUCAgICAgICAoMzw8NikgIC8qIENhcHR1cmUgRWRnZSAqLworI2RlZmluZSBUQ1RMX09NICAgICAgICAoMTw8NSkgIC8qIG91dHB1dCBtb2RlICovCisjZGVmaW5lIFRDVExfSVJRRU4gICAgICgxPDw0KSAgLyogaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBUQ1RMX0NMS1NPVVJDRSAoNzw8MSkgIC8qIENsb2NrIHNvdXJjZSAqLworI2RlZmluZSBUQ1RMX1RFTiAgICAgICAoMSkgICAgIC8qIFRpbWVyIGVuYWJsZSAqLworI2RlZmluZSBUUFJFUl9QUkVTICAgICAoMHhmZikgIC8qIFByZXNjYWxlICovCisjZGVmaW5lIFRTVEFUX0NBUFQgICAgICgxPDwxKSAgLyogQ2FwdHVyZSBldmVudCAqLworI2RlZmluZSBUU1RBVF9DT01QICAgICAoMSkgICAgIC8qIENvbXBhcmUgZXZlbnQgKi8KKworI2VuZGlmCQkJCS8qIF9JTVhfUkVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1vbi5oIGIvaW5jbHVkZS9jb21tb24uaAppbmRleCAwMmVmYmEzLi40OGUzOGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvY29tbW9uLmgKQEAgLTEyNiw2ICsxMjYsMTcgQEAKICMgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIENPTkZJR19TRVJJQUxfTVVMVEkKKworI2lmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NNQzEpIHx8IGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NNQzIpIFwKKyB8fCBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MxKSB8fCBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MyKSBcCisgfHwgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDMykgfHwgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDNCkKKworI2RlZmluZSBDT05GSUdfU0VSSUFMX01VTFRJCTEKKworI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX01VTFRJICovCiAKIC8qCiAgKiBHZW5lcmFsIFB1cnBvc2UgVXRpbGl0aWVzCkBAIC00MDMsNiArNDE0LDE1IEBACiAjaWYgZGVmaW5lZCBDT05GSUdfSU5DQV9JUAogdWludAlpbmNhaXBfZ2V0X2NwdWNsayAodm9pZCk7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19JTVgpCit1bG9uZyBnZXRfc3lzdGVtUExMQ0xLKHZvaWQpOwordWxvbmcgZ2V0X0ZDTEsodm9pZCk7Cit1bG9uZyBnZXRfSENMSyh2b2lkKTsKK3Vsb25nIGdldF9CQ0xLKHZvaWQpOwordWxvbmcgZ2V0X1BFUkNMSzEodm9pZCk7Cit1bG9uZyBnZXRfUEVSQ0xLMih2b2lkKTsKK3Vsb25nIGdldF9QRVJDTEszKHZvaWQpOworI2VuZGlmCiB1bG9uZwlnZXRfYnVzX2ZyZXEgICh1bG9uZyk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4NXh4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tcHJvYy5oIGIvaW5jbHVkZS9jb21tcHJvYy5oCmluZGV4IGY4NzYyMGUuLjgzMTE5NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbXByb2MuaAorKysgYi9pbmNsdWRlL2NvbW1wcm9jLmgKQEAgLTc0LDkgKzc0LDEwIEBACiAjZGVmaW5lIENQTV9JMkNfQkFTRQkJMHgwODIwCiAjZGVmaW5lIENQTV9TUElfQkFTRQkJMHgwODQwCiAjZGVmaW5lIENQTV9GRUNfQkFTRQkJMHgwODYwCi0jZGVmaW5lIENQTV9XTEtCRF9CQVNFCQkweDA4ODAKKyNkZWZpbmUgQ1BNX1NFUklBTDJfQkFTRQkweDA4ODAKICNkZWZpbmUgQ1BNX1NDQ19CQVNFCQkweDA5MDAKICNkZWZpbmUgQ1BNX1BPU1RfQkFTRQkJMHgwOTgwCisjZGVmaW5lIENQTV9XTEtCRF9CQVNFCQkweDBhMDAKIAogI2VuZGlmCiAKQEAgLTEwNDEsNyArMTA0Miw3IEBACiAKIC8qKiogIExXTU9OICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfTFdNT04pICYmICFkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MyKQorI2lmIGRlZmluZWQoQ09ORklHX0xXTU9OKQogLyogQml0cyBpbiBwYXJhbGxlbCBJL08gcG9ydCByZWdpc3RlcnMgdGhhdCBoYXZlIHRvIGJlIHNldC9jbGVhcmVkCiAgKiB0byBjb25maWd1cmUgdGhlIHBpbnMgZm9yIFNDQzIgdXNlLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUFBDaGFtZWxlb25FVkIuaCBiL2luY2x1ZGUvY29uZmlncy9QUENoYW1lbGVvbkVWQi5oCmluZGV4IGJiOGNlNDMuLmIxZjQxYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QUENoYW1lbGVvbkVWQi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QUENoYW1lbGVvbkVWQi5oCkBAIC00Myw2ICs0Myw5IEBACiAgKiBDT05GSUdfUFBDSEFNRUxFT05fQ0xLXzI1CiAgKiBDT05GSUdfUFBDSEFNRUxFT05fQ0xLXzMzCiAgKi8KKyNpZiAoIWRlZmluZWQoQ09ORklHX1BQQ0hBTUVMRU9OX0NMS18yNSkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ0hBTUVMRU9OX0NMS18zMykpCisjZGVmaW5lIENPTkZJR19QUENIQU1FTEVPTl9DTEtfMzMKKyNlbmRpZgogCiAjaWYgKGRlZmluZWQoQ09ORklHX1BQQ0hBTUVMRU9OX0NMS18yNSkgJiYgZGVmaW5lZChDT05GSUdfUFBDSEFNRUxFT05fQ0xLXzMzKSkKICNlcnJvciAiKiBUd28gZXh0ZXJuYWwgZnJlcXVlbmNpZXMgKFN5c0NsaykgYXJlIGRlZmluZWQhICoiCkBAIC03NCwxMSArNzcsMTEgQEAKIAogCiAjaWZkZWYgQ09ORklHX1BQQ0hBTUVMRU9OX0NMS18yNQotCSNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkyNTAwMDAwMCAvKiBleHRlcm5hbCBmcmVxdWVuY3kgdG8gcGxsCSovCisjIGRlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTI1MDAwMDAwIC8qIGV4dGVybmFsIGZyZXF1ZW5jeSB0byBwbGwJKi8KICNlbGlmIChkZWZpbmVkIChDT05GSUdfUFBDSEFNRUxFT05fQ0xLXzMzKSkKLSNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkzMzMzMzMzMyAvKiBleHRlcm5hbCBmcmVxdWVuY3kgdG8gcGxsCSovCisjIGRlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTMzMzMzMzMzIC8qIGV4dGVybmFsIGZyZXF1ZW5jeSB0byBwbGwJKi8KICNlbHNlCi0jZXJyb3IgIiogRXh0ZXJuYWwgZnJlcXVlbmN5IChTeXNDbGspIG5vdCBkZWZpbmVkISAqIgorIyBlcnJvciAiKiBFeHRlcm5hbCBmcmVxdWVuY3kgKFN5c0Nsaykgbm90IGRlZmluZWQhICoiCiAjZW5kaWYKIAogI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1RvdGFsNTIwMC5oIGIvaW5jbHVkZS9jb25maWdzL1RvdGFsNTIwMC5oCmluZGV4IDgzMGJmODEuLjQ3ZjI0YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9Ub3RhbDUyMDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVG90YWw1MjAwLmgKQEAgLTY0LDYgKzY0LDcgQEAKICAqIFZpZGVvIGNvbnNvbGUKICAqLwogI2lmIDEKKyNkZWZpbmUgQ09ORklHX1ZJREVPCiAjZGVmaW5lIENPTkZJR19WSURFT19TRUQxMzgwNgogI2RlZmluZSBDT05GSUdfVklERU9fU0VEMTM4MDZfMTZCUFAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2x3bW9uLmggYi9pbmNsdWRlL2NvbmZpZ3MvbHdtb24uaAppbmRleCBkOTQ0ZWQ4Li5hNzZlYzIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvbHdtb24uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbHdtb24uaApAQCAtNDcsMTEgKzQ3LDkgQEAKIAogI2RlZmluZQlDT05GSUdfU1BMQVNIX1NDUkVFTgkJLyogLi4uIHdpdGggc3BsYXNoc2NyZWVuIHN1cHBvcnQqLwogCi0jaWYgMQorI2RlZmluZSBDT05GSUdfU0VSSUFMX01VTFRJCTEKICNkZWZpbmUgQ09ORklHXzh4eF9DT05TX1NNQzIJMQkvKiBDb25zb2xlIGlzIG9uIFNNQzIJCSovCi0jZWxzZQotI2RlZmluZSBDT05GSUdfOHh4X0NPTlNfU0NDMgotI2VuZGlmCisjZGVmaW5lIENPTkZJR184eHhfQ09OU19TQ0MyCTEJLyogQ29uc29sZSBpcyBvbiBTQ0MyCQkqLwogCiAjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCS8qIHdpdGggd2F0Y2hkb2cgPj0gMzg0MDAgbmVlZGVkICovCiAKQEAgLTE1MSwxNyArMTQ5LDYgQEAKICNkZWZpbmUgQ0ZHX0NNRF9QT1NUX0RJQUcgMAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfOHh4X0NPTlNfU0NDMgkvKiBDYW4ndCB1c2UgZXRoZXJuZXQsIHRoZW4gKi8KLSNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSAgICAgKCAoQ09ORklHX0NNRF9ERkwgJiB+Q0ZHX0NNRF9ORVQpIHwgXAotCQkJCUNGR19DTURfQVNLRU5WCXwgXAotCQkJCUNGR19DTURfREFURQl8IFwKLQkJCQlDRkdfQ01EX0kyQwl8IFwKLQkJCQlDRkdfQ01EX0VFUFJPTQl8IFwKLQkJCQlDRkdfQ01EX0lERQl8IFwKLQkJCQlDRkdfQ01EX0JTUAl8IFwKLQkJCQlDRkdfQ01EX0JNUAl8IFwKLQkJCQlDRkdfQ01EX1BPU1RfRElBRyApCi0jZWxzZQogI2RlZmluZSBDT05GSUdfQ09NTUFORFMJICAgICAgKCBDT05GSUdfQ01EX0RGTAl8IFwKIAkJCQlDRkdfQ01EX0FTS0VOVgl8IFwKIAkJCQlDRkdfQ01EX0RIQ1AJfCBcCkBAIC0xNzIsNyArMTU5LDYgQEAKIAkJCQlDRkdfQ01EX0JTUAl8IFwKIAkJCQlDRkdfQ01EX0JNUAl8IFwKIAkJCQlDRkdfQ01EX1BPU1RfRElBRyApCi0jZW5kaWYKICNkZWZpbmUgQ09ORklHX01BQ19QQVJUSVRJT04KICNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL214MWFkcy5oIGIvaW5jbHVkZS9jb25maWdzL214MWFkcy5oCmluZGV4IDVjZjA5MmEuLmRmOTUxZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9teDFhZHMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbXgxYWRzLmgKQEAgLTE2LDcgKzE2LDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yNSw3ICsyNSw2IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLQogI2lmbmRlZiBfX0NPTkZJR19ICiAjZGVmaW5lIF9fQ09ORklHX0gKIApAQCAtNDAsMTQgKzM5LDE5IEBACiAgKiAoZWFzeSB0byBjaGFuZ2UpCiAgKi8KICNkZWZpbmUgQ09ORklHX0FSTTkyMFQJCTEJLyogVGhpcyBpcyBhbiBBUk05MjBUIENvcmUJCSovCi0jZGVmaW5lCUNPTkZJR19NQzkzMjgJCTEJLyogSXQncyBhIE1vdG9yb2xhIE1DOTMyOCBTb0MgCQkqLwotI2RlZmluZSBDT05GSUdfTVgxQURTCQkxCS8qIG9uIGEgTW90b3JvbGEgTVgxQURTIEJvYXJkICAJCSovCisjZGVmaW5lIENPTkZJR19JTVgJCTEJLyogSXQncyBhIE1vdG9yb2xhIE1DOTMyOCBTb0MJCSovCisjZGVmaW5lIENPTkZJR19NWDFBRFMJCTEJLyogb24gYSBNb3Rvcm9sYSBNWDFBRFMgQm9hcmQJCSovCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYJCSovCisKKy8qCisgKiBTZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICAqLworI2RlZmluZSBDT05GSUdfSU1YX1NFUklBTDEJCS8qIGludGVybmFsIHVhcnQgMSAqLworLyogI2RlZmluZSBfQ09ORklHX1VBUlQyICovCQkvKiBpbnRlcm5hbCB1YXJ0IDIgKi8KKy8qICNkZWZpbmUgQ09ORklHX1NJTEVOVF9DT05TT0xFICovCS8qIHVzZSB0aGlzIHRvIGRpc2FibGUgb3V0cHV0ICovCiAKICNkZWZpbmUgQk9BUkRfTEFURV9JTklUCQkxCi0KLQogI2RlZmluZSBVU0VfOTIwVF9NTVUJCTEKLSN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAJCSovCiAKICNpZiAwCiAjZGVmaW5lIENGR19NWDFfR1BDUgkJMHgwMDAwMDNBQgkvKiBmb3IgTVgxQURTIDBMNDROCQkqLwpAQCAtNjAsNiArNjQsOCBAQAogICovCiAKICNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjgqMTAyNCkKKworCiAjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KIAogLyoKQEAgLTY3LDEzICs3MywxMyBAQAogICovCiAjZGVmaW5lIENPTkZJR19EUklWRVJfQ1M4OTAwCTEJLyogd2UgaGF2ZSBhIENTODkwMCBvbi1ib2FyZCAqLwogI2RlZmluZSBDUzg5MDBfQkFTRQkJMHgxNTAwMDMwMAotI2RlZmluZSBDUzg5MDBfQlVTMTYJCTEgCS8qIHRoZSBMaW51eCBkcml2ZXIgZG9lcyBhY2Nlc3NlcyBhcyBzaG9ydHMgKi8KKyNkZWZpbmUgQ1M4OTAwX0JVUzE2CQkxCS8qIHRoZSBMaW51eCBkcml2ZXIgZG9lcyBhY2Nlc3NlcyBhcyBzaG9ydHMgKi8KIAogLyoKICAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCiAgKi8KIAotI2RlZmluZSBDT05GSUdfVUFSVDEgCQkxCisvKiAjZGVmaW5lIENPTkZJR19VQVJUMQkJCSovCiAvKiAjZGVmaW5lIENPTkZJR19VQVJUMgkJMQkqLwogCiAjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCkBAIC04NSwyNCArOTEsMjAgQEAKICNkZWZpbmUgQ09ORklHX0NPTU1BTkRTIFwKIAkJCShDT05GSUdfQ01EX0RGTAkgfCBcCiAJCQlDRkdfQ01EX0NBQ0hFCSB8IFwKLQkJCS8qQ0ZHX0NNRF9OQU5ECSB8Ki8gXAotCQkJLypDRkdfQ01EX0VFUFJPTSB8Ki8gXAotCQkJLypDRkdfQ01EX0kyQwkgfCovIFwKLQkJCS8qQ0ZHX0NNRF9VU0IJIHwqLyBcCi0JCQlDRkdfQ01EX1JFR0lORk8gIHwgXAorCQkJQ0ZHX0NNRF9SRUdJTkZPCSB8IFwKIAkJCUNGR19DTURfRUxGKQogCiAvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCiAjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CiAKICNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCi0jZGVmaW5lIENPTkZJR19CT09UQVJHUyAgICAJInJvb3Q9L2Rldi9kb2NicCBtZW09NDhNIgorI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJCSJyb290PS9kZXYvbXNkayBtZW09NDhNIgogI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDg6MDA6M2U6MjY6MGE6NWMKLSNkZWZpbmUgQ09ORklHX05FVE1BU0sgICAgICAgICAgMjU1LjI1NS4yNTUuMAorI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4yNTUuMAogI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMjIKICNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMTEKICNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQkibXgxYWRzIgotLyojZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkidGZ0cDsgYm9vdG0iICovCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkidGZ0cDsgYm9vdG0iCiAKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQogI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkxMTUyMDAJCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCkBAIC0xMTQsMTAgKzExNiwxMCBAQAogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCiAKLSNkZWZpbmUgQ0ZHX0hVU0hfUEFSU0VSICAgICAgICAgMQorI2RlZmluZSBDRkdfSFVTSF9QQVJTRVIJCTEKICNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMgkiPiAiCiAKLSNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCiAKICNpZmRlZiBDRkdfSFVTSF9QQVJTRVIKICNkZWZpbmUgQ0ZHX1BST01QVAkJIk1YMUFEUyQgIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCkBAIC0xMjUsMjEgKzEyNywyMCBAQAogI2RlZmluZSBDRkdfUFJPTVBUCQkiTVgxQURTPT4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCiAjZW5kaWYKIAotI2RlZmluZQlDRkdfQ0JTSVpFCQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZGVmaW5lCUNGR19QQlNJWkUgCQkoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KQogCQkJCQkJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUJQ0ZHX01BWEFSR1MJCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCiAjZGVmaW5lIENGR19CQVJHU0laRQkJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCiAKICNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwOTAwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCiAjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwQUYwMDAwMAkvKiA2MyBNQiBpbiBEUkFNCSovCiAKLSN1bmRlZiAgQ0ZHX0NMS1NfSU5fSFoJCQkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLwotCi0jZGVmaW5lCUNGR19MT0FEX0FERFIJCTB4MDg4MDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KLQotCi0jZGVmaW5lCUNGR19IWgkJCTEwMDAKKyN1bmRlZglDRkdfQ0xLU19JTl9IWgkJCQkvKiBldmVyeXRoaW5nLCBpbmNsIGJvYXJkIGluZm8sIGluIEh6ICovCisjZGVmaW5lIENGR19MT0FEX0FERFIJCTB4MDg4MDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKy8qI2RlZmluZQlDRkdfSFoJCQkxMDAwICovCisjZGVmaW5lIENGR19IWgkJCTM2ODY0MDAKKyNkZWZpbmUgQ0ZHX0NQVVNQRUVECQkweDE0MQogCiAvKiB2YWxpZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KQEAgLTE1OSwyNyArMTYwLDM1IEBACiAgKiBQaHlzaWNhbCBNZW1vcnkgTWFwCiAgKi8KIAorI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCQkvKiB3ZSBoYXZlIDEgYmFuayBvZiBTRFJBTQkqLworI2RlZmluZSBQSFlTX1NEUkFNXzEJCTB4MDgwMDAwMDAJLyogU0RSQU0gIG9uIENTRDAJCSovCisjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCTB4MDQwMDAwMDAJLyogNjQgTUIJCQkqLwogCi0jZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEJICAgCS8qIHdlIGhhdmUgMSBiYW5rIG9mIFNEUkFNIAkqLwotI2RlZmluZSBQSFlTX1NEUkFNXzEJCTB4MDgwMDAwMDAgCS8qIFNEUkFNICBvbiBDU0QwIAkJKi8KLSNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJMHgwNDAwMDAwMCAJLyogNjQgTUIgCQkJKi8KLQotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJCS8qIDEgYmFuayBvZiBTeW5jRmxhc2ggCQkqLwotI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHgwQzAwMDAwMCAJLyogU3luY0ZsYXNoIG9uIENTRDEgCQkqLwotI2RlZmluZSBGTEFTSF9CQU5LX1NJWkUJCTB4MDEwMDAwMDAJLyogMTYgTUIgVG90YWwgCQkgCSovCi0KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCQkvKiAxIGJhbmsgb2YgU3luY0ZsYXNoCQkqLworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHgwQzAwMDAwMAkvKiBTeW5jRmxhc2ggb24gQ1NEMQkJKi8KKyNkZWZpbmUgRkxBU0hfQkFOS19TSVpFCQkweDAxMDAwMDAwCS8qIDE2IE1CIFRvdGFsCQkJKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgogICovCiAKLQogI2RlZmluZSBDT05GSUdfU1lOQ0ZMQVNICTEKICNkZWZpbmUgUEhZU19GTEFTSF9TSVpFCQkweDAxMDAwMDAwCiAjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkoMTYpCi0jZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFKzB4MDBmZjAwMDApCisjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFKzB4MDBmZjgwMDApCiAKLSNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCi0jZGVmaW5lIENGR19FTlZfU0laRQkJMHgwZjAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDA0MDAwIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCiAjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4MTAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEVuYWJsZSBwYXNzaW5nIEFUQUdTCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRIDE2NzgwMDAwCisjZGVmaW5lIENPTkZJR19TWVNQTExfQ0xLX0ZSRVEgMTYwMDAwMDAKKwogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9teDFmczIuaCBiL2luY2x1ZGUvY29uZmlncy9teDFmczIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWEzYjI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL214MWZzMi5oCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisjZGVmaW5lIENPTkZJR19BUk05MjBUCSAgIDEJIC8qIHRoaXMgaXMgYW4gQVJNOTIwVCBDUFUgICAgICovCisjZGVmaW5lIENPTkZJR19JTVgJICAgMQkgLyogaW4gYSBNb3Rvcm9sYSBNQzkzMjhNWEwgQ2hpcCAqLworI2RlZmluZSBDT05GSUdfTVgxRlMyCSAgIDEJIC8qIG9uIGEgbXgxZnMyIGJvYXJkICovCisjdW5kZWYJQ09ORklHX1VTRV9JUlEJCSAvKiBkb24ndCBuZWVkIHVzZSBJUlEvRklRICAgICovCisKKy8qCisgKiBTZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisjdW5kZWYJX0NPTkZJR19VQVJUMSAvKiBpbnRlcm5hbCB1YXJ0IDEgKi8KKyNkZWZpbmUgX0NPTkZJR19VQVJUMiAvKiBpbnRlcm5hbCB1YXJ0IDIgKi8KKyN1bmRlZglfQ09ORklHX1VBUlQzIC8qIGludGVybmFsIHVhcnQgMyAqLworI3VuZGVmCV9DT05GSUdfVUFSVDQgLyogaW50ZXJuYWwgdWFydCA0ICovCisjdW5kZWYJQ09ORklHX1NJTEVOVF9DT05TT0xFICAvKiB1c2UgdGhpcyB0byBkaXNhYmxlIG91dHB1dCAqLworCisvKgorICogRGVmaW5pdGlvbiBvZiB1LWJvb3QgYnVpbGQgaW4gY29tbWFuZHMuIENoZWNrIG91dCBDT05GSUdfQ01EX0RGTCBpZgorICogbmVjY2Vzc2FyeSBpbiBpbmNsdWRlL2NtZF9jb25mZGVmcy5oIGZpbGUuIChVbiljb21tZW50IGZvciBnZXR0aW5nCisgKiBmdW5jdGlvbmFsaXR5IG9yIHNpemUgb2YgdS1ib290IGNvZGUuCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ09ORklHX0NNRF9ERkwJCSBcCisJCQkJJiB+Q0ZHX0NNRF9MT0FEUwkgXAorCQkJCSYgfkNGR19DTURfQ09OU09MRQkgXAorCQkJCSYgfkNGR19DTURfQVVUT1NDUklQVAkgXAorCQkJCSYgfkNGR19DTURfTkVUCQkgXAorCQkJCSYgfkNGR19DTURfUElORwkJIFwKKwkJCQkmIH5DRkdfQ01EX0RIQ1AJCSBcCisJCQkJfCBDRkdfQ01EX0pGRlMyCQkgXAorCQkJCSkKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisvKgorICogQm9vdCBvcHRpb25zLiBTZXR0aW5nIGRlbGF5IHRvIC0xIHN0b3BzIGF1dG9zdGFydCBjb3VudCBkb3duLgorICovCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkgICAxMAorI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJICAgInJvb3Q9L2Rldi9tdGRibG9jazQgY29uc29sZT10dHlTTVgwLDExNTIwMG44IHJvb3Rmc3R5cGU9amZmczIiCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORCAiYm9vdG0gMTAwODAwMDAiCisjZGVmaW5lIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKKworLyoKKyAqIEdlbmVyYWwgb3B0aW9ucyBmb3IgdS1ib290LiBNb2RpZnkgdG8gc2F2ZSBtZW1vcnkgZm9vdCBwcmludAorICovCisjZGVmaW5lIENGR19MT05HSEVMUAkJCQkgICAgICAvKiB1bmRlZiBzYXZlcyBtZW1vcnkgICovCisjZGVmaW5lIENGR19QUk9NUFQJCSJteDFmczI+ICIJICAgICAgLyogcHJvbXB0IHN0cmluZwkgICAgICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJICAgICAgLyogY29uc29sZSBJL08gYnVmZmVyICAqLworI2RlZmluZSBDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikgLyogcHJpbnQgYnVmZmVyIHNpemUgICAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCSAgICAgIC8qIG1heCBjb21tYW5kIGFyZ3MgICAgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCSAgICAgIC8qIGJvb3QgYXJncyBidWYgc2l6ZSAgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDA4MTAwMDAwCSAgICAgIC8qIG1lbXRlc3QgdGVzdCBhcmVhICAgKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDA4RjAwMDAwCisKKyN1bmRlZglDRkdfQ0xLU19JTl9IWgkJCSAgICAgLyogdXNlIEhaIGZvciBmcmVxLiBkaXNwbGF5ICAgICAqLworCisjZGVmaW5lIENGR19IWgkJCTM2ODY0MDAJICAgICAvKiBpbmNyZW1lbnRlciBmcmVxOiAzLjY4NjQgTUh6ICovCisjZGVmaW5lIENGR19DUFVTUEVFRAkJMHgxNDEJICAgICAvKiBjb3JlIGNsb2NrIC0gcmVnaXN0ZXIgdmFsdWUgICovCisKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFIDExNTIwMAorLyoKKyAqIERlZmluaXRpb25zIHJlbGF0ZWQgdG8gcGFzc2luZyBhcmd1bWVudHMgdG8ga2VybmVsLgorICovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkgICAgIDEJIC8qIHNlbmQgY29tbWFuZGxpbmUgdG8gS2VybmVsCSAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTICAgICAxCSAvKiBzZW5kIG1lbW9yeSBkZWZpbml0aW9uIHRvIGtlcm5lbCAqLworI2RlZmluZQkgQ09ORklHX0lOSVRSRF9UQUcJICAgICAxCSAgIC8qIHNlbmQgaW5pdHJkIHBhcmFtcwkqLworI3VuZGVmCUNPTkZJR19WRkQJCQkgLyogZG8gbm90IHNlbmQgZnJhbWVidWZmZXIgc2V0dXAgICAgKi8KKworI2RlZmluZSBDRkdfSkZGU19DVVNUT01fUEFSVAorLyoKKyAqIE1hbGxvYyBwb29sIG5lZWQgdG8gaG9zdCBlbnYgKyAxMjggS2IgcmVzZXJ2ZSBmb3Igb3RoZXIgYWxsb2NhdGlvbnMuCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JICAoQ0ZHX0VOVl9TSVpFICsgKDEyODw8MTApICkKKworCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgxMjA8PDEwKSAgICAgIC8qIHN0YWNrIHNpemUgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRCSg0PDwxMCkJICAgICAgIC8qIElSUSBzdGFjayAgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9GSVEJKDQ8PDEwKQkgICAgICAgLyogRklRIHN0YWNrICAqLworI2VuZGlmCisKKy8qIFNEUkFNIFNldHVwIFZhbHVlcworICogMHg5MTBhODMwMCBQcmVjaGFyZ2UgQ29tbWFuZCBDQVMgMworICogMHg5MTBhODIwMCBQcmVjaGFyZ2UgQ29tbWFuZCBDQVMgMgorICoKKyAqIDB4YTEwYTgzMDAgQXV0b1JlZnJlc2ggQ29tbWFuZCBDQVMgMworICogMHhhMTBhODIwMCBTZXQgQXV0b1JlZnJlc2ggQ29tbWFuZCBDQVMgMgorICovCisjZGVmaW5lIFBSRUNIQVJHRV9DTUQgMHg5MTBhODMwMAorI2RlZmluZSBBVVRPUkVGUkVTSF9DTUQgMHhhMTBhODMwMAorCisjZGVmaW5lIENPTkZJR19JTklUX0NSSVRJQ0FMCisKKyNkZWZpbmUgQlVTMzJCSVRfVkVSU0lPTgorLyoKKyAqIFNEUkFNIE1lbW9yeSBNYXAKKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUyAgMQkJCSAgICAgLyogd2UgaGF2ZSAxIGJhbmsgb2YgU0RSQU0gKi8KKyNkZWZpbmUgTVgxRlMyX1NEUkFNXzEJICAgICAgMHgwODAwMDAwMAkgICAgIC8qIFNEUkFNIGJhbmsgIzEJCSovCisjaWZkZWYgQlVTMzJCSVRfVkVSU0lPTgorI2RlZmluZSBNWDFGUzJfU0RSQU1fMV9TSVpFICAoMHgwNDAwMDAwMCAtIDB4MTAwMDAwKSAvKiA2NCBNQiAtIDFNIEZyYW1lYnVmZmVyICovCisjZWxzZQorI2RlZmluZSBNWDFGUzJfU0RSQU1fMV9TSVpFICAoMHgwMUZDMDAwMCAtIDB4MTAwMDAwKSAvKiAzMiBNQiAtIDFNIEZyYW1lYnVmZmVyICovCisjZW5kaWYKKy8qCisgKiBGbGFzaCBDb250cm9sbGVyIHNldHRpbmdzCisgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogRkxBU0ggYmFua3MgY291bnQgKG5vdCBjaGlwIGNvdW50KSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbnVtYmVyIG9mIHNlY3RvciBpbiBGTEFTSCBiYW5rICAgICovCisKKyNpZmRlZiBCVVMzMkJJVF9WRVJTSU9OCisjZGVmaW5lIE1YMUZTMl9GTEFTSF9CVVNfV0lEVEgJNAkvKiB3ZSB1c2UgMzIgYml0IEZMQVNIIG1lbW9yeS4uLiAgICAgKi8KKyNkZWZpbmUgTVgxRlMyX0ZMQVNIX0lOVEVSTEVBVkUgMgkvKiAuLi4gbWFkZSBvZiAyIGNoaXBzICovCisjZGVmaW5lIE1YMUZTMl9GTEFTSF9CQU5LX1NJWkUJMHgwMjAwMDAwMCAgLyogc2l6ZSBvZiBvbmUgZmxhc2ggYmFuayovCisjZGVmaW5lIE1YMUZTMl9GTEFTSF9TRUNUX1NJWkUJMHgwMDAyMDAwMCAgLyogc2l6ZSBvZiBlcmFzZSBzZWN0b3IgKi8KKyNkZWZpbmUgTVgxRlMyX0pGRlMyX1BBUlQwX1NUQVJUIDB4MTAyMDAwMDAKKyNkZWZpbmUgTVgxRlMyX0pGRlMyX1BBUlQwX1NJWkUJIDB4MDA1MDAwMDAKKyNkZWZpbmUgTVgxRlMyX0pGRlMyX1BBUlQxX1NUQVJUIDB4MTA3MDAwMDAKKyNkZWZpbmUgTVgxRlMyX0pGRlMyX1BBUlQxX1NJWkUJIDB4MDA5MDAwMDAKKyNlbHNlCisjZGVmaW5lIE1YMUZTMl9GTEFTSF9CVVNfV0lEVEgJMgkvKiB3ZSB1c2UgMTYgYml0IEZMQVNIIG1lbW9yeS4uLiAgICAgKi8KKyNkZWZpbmUgTVgxRlMyX0ZMQVNIX0lOVEVSTEVBVkUgMQkvKiAuLi4gbWFkZSBvZiAxIGNoaXAgKi8KKyNkZWZpbmUgTVgxRlMyX0ZMQVNIX0JBTktfU0laRQkweDAxMDAwMDAwICAvKiBzaXplIG9mIG9uZSBmbGFzaCBiYW5rKi8KKyNkZWZpbmUgTVgxRlMyX0ZMQVNIX1NFQ1RfU0laRQkweDAwMDEwMDAwICAvKiBzaXplIG9mIGVyYXNlIHNlY3RvciAqLworI2VuZGlmCisjZGVmaW5lIE1YMUZTMl9GTEFTSF9CQVNFCTB4MTAwMDAwMDAgIC8qIGxvY2F0aW9uIG9mIGZsYXNoIG1lbW9yeSAqLworI2RlZmluZSBNWDFGUzJfRkxBU0hfVU5MT0NLCSAgIDEJICAgLyogcGVyZm9ybSBodyB1bmxvY2sgZmlyc3QgKi8KKworLyogVGhpcyBzaG91bGQgYmUgZGVmaW5lZCBpZiBDRkkgRkxBU0ggZGV2aWNlIGlzIHByZXNlbnQuIEFjdHVhbGx5IGJlbmVmaXQKKyAgIGlzIG5vdCBzbyBjbGVhciB0byBtZS4gSW4gb3RoZXIgd29yZHMgd2UgY2FuIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbnMKKyAgIHRvIHVzZXIsIGJ1dCB0aGlzIGV4cGVjdHMgbW9yZSBjb21wbGV4IGZsYXNoIGhhbmRsaW5nIHdlIGRvIG5vdCBwcm92aWRlCisgICBub3cuKi8KKyN1bmRlZglDRkdfRkxBU0hfQ0ZJCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJKDIqQ0ZHX0haKSAgICAvKiB0aW1lb3V0IGZvciBFcmFzZSBvcGVyYXRpb24gKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJKDIqQ0ZHX0haKSAgICAvKiB0aW1lb3V0IGZvciBXcml0ZSBvcGVyYXRpb24gKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJTVgxRlMyX0ZMQVNIX0JBU0UKKworLyoKKyAqIFRoaXMgaXMgc2V0dGluZyBmb3IgSkZGUzIgc3VwcG9ydCBpbiB1LWJvb3QuCisgKiBSaWdodCBub3cgdGhlcmUgaXMgbm8gZ2FpbiBmb3IgdXNlciwgYnV0IGxhdGVyIG9uIGJvb3Rpbmcga2VybmVsIG1pZ2h0IGJlCisgKiBwb3NzaWJsZS4gQ29uc2lkZXIgdXNpbmcgWElQIGtlcm5lbCBydW5uaW5nIGZyb20gZmxhc2ggdG8gc2F2ZSBSQU0KKyAqIGZvb3RwcmludC4KKyAqIE5PVEU6IEVuYWJsZSBDRkdfQ01EX0pGRlMyIGZvciBKRkZTMiBzdXBwb3J0LgorICovCisjZGVmaW5lIENGR19KRkZTMl9GSVJTVF9CQU5LCQkwCisjZGVmaW5lIENGR19KRkZTMl9GSVJTVF9TRUNUT1IJCTUKKyNkZWZpbmUgQ0ZHX0pGRlMyX05VTV9CQU5LUwkJMQorCisvKgorICogRW52aXJvbm1lbnQgc2V0dXAuIERlZmluaXRpb25zIG9mIG1vbml0b3IgbG9jYXRpb24gYW5kIHNpemUgd2l0aAorICogZGVmaW5pdGlvbiBvZiBlbnZpcm9ubWVudCBzZXR1cCBlbmRzIHVwIGluIDIgcG9zc2liaWxpdGllcy4KKyAqIDEuIEVtYmVkZWQgZW52aXJvbm1lbnQgLSBpbiB1LWJvb3QgY29kZSBpcyBzcGFjZSBmb3IgZW52aXJvbm1lbnQKKyAqIDIuIEVudmlyb25tZW50IGlzIHJlYWQgZnJvbSBwcmVkZWZpbmVkIHNlY3RvciBvZiBmbGFzaAorICogUmlnaHQgbm93IHdlIHN1cHBvcnQgMi4gcG9zc2libGl0eSwgYnV0IGV4cGVjdGluZyBubyBlbnYgcGxhY2VkCisgKiBvbiBtZW50aW9uZWQgYWRkcmVzcyByaWdodCBub3cuIFRoaXMgYWxzbyBuZWVkcyB0byBwcm92aWRlIHdob2xlCisgKiBzZWN0b3IgZm9yIGl0IC0gZm9yIHVzIDI1NktiIGlzIHJlYWxseSB3YXN0ZSBvZiBtZW1vcnkuIFUtYm9vdCB1c2VzCisgKiBkZWZhdWx0IGVudi4gYW5kIHVudGlsIGtlcm5lbCBwYXJhbWV0ZXJzIGNvdWxkIGJlIHNlbnQgdG8ga2VybmVsCisgKiBlbnYuIGhhcyBubyBzZW5zZSB0byB1cy4KKyAqLworCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJMHgxMDAwMDAwMAorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCTB4MjAwMDAJCS8qIDEyOGIgKCAxIGZsYXNoIHNlY3RvciApICAgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfQUREUgkJMHgxMDAyMDAwMAkvKiBhYnNvbHV0ZSBhZGRyZXNzIGZvciBub3cgICovCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAorCisjZGVmaW5lCSBDT05GSUdfRU5WX09WRVJXUklURQkxCQkvKiBlbnYgaXMgbm90IHdyaXRhYmxlIG5vdyAgICovCisKKy8qIFNldHVwIENTNCBhbmQgQ1M1ICovCisjZGVmaW5lIENGR19HSVVTX0FfVkFMCQkweDAwMDNmZmZlCisKKy8qCisgKiBDU3hVX1ZBTDoKKyAqIDYzfCB4CXggeCB4IHwgeCB4IHggeCB8IHggeCAgeCAgICB4IHwgeCB4IHggeCB8IHggeCB4IHggfCB4IHggeCB4IHwgeCB4IHggeCB8IHggeCB4IHh8MzIKKyAqICAgfERUQUNLX1NFTHwwfEJDRCB8CSAgQkNTCXwgUFNafFBNRXxTWU5DfAkgRE9MCXwgQ05DfAkgIFdTQwkgICAgfCAwfCBXV1MgIHwJICBFREMgIHwKKyAqCisgKiBDU3hMX1ZBTDoKKyAqIDMxfCB4IHggeCB4IHwgeCB4IHggeCB8IHggeCB4IHggfCB4IHggeCB4IHwgeCB4IHggeCB8ICB4IHggeCB4IHwgeCB4CSB4IHggfCB4IHggIHgJIHh8IDAKKyAqICAgfAkgT0VBICAgfCAgIE9FTgkgfCAgIFdFQSAgIHwgICBXRU4gICB8CSBDU0EgICB8RUJDfCBEU1ogIHwgMHxTUHwwfFdQfCAwIDB8UEF8Q1NFTnwKKyAqLworCisjZGVmaW5lIENGR19DUzBVX1ZBTCAweDAwMDA4QzAwCisjZGVmaW5lIENGR19DUzBMX1ZBTCAweDIyMjIyNjAxCisjZGVmaW5lIENGR19DUzFVX1ZBTCAweDAwMDA4QzAwCisjZGVmaW5lIENGR19DUzFMX1ZBTCAweDIyMjIyMzAxCisjZGVmaW5lIENGR19DUzRVX1ZBTCAweDAwMDA4QzAwCisjZGVmaW5lIENGR19DUzRMX1ZBTCAweDIyMjIyMzAxCisjZGVmaW5lIENGR19DUzVVX1ZBTCAweDAwMDA4QzAwCisjZGVmaW5lIENGR19DUzVMX1ZBTCAweDIyMjIyMzAxCisKKy8qIGZfe2RwbGx9PTIqZntyZWZ9KihNRkkrTUZOLyhNRkQrMSkpLyhQRCsxKQorICAgZl9yZWY9MTYsNzc3TUh6CisKKyAgIDB4MDAyYTE0MWY6IDE5MSw5OTQ0TUh6CisgICAweDA0MGIyMDA3OiAxNDRNSHoKKyAgIDB4MDQyYTE0MWY6IDk2TUh6CisgICAweDA4MTExNDBkOiA2NE1IegorICAgMHgwNDBlMjAwZTogMTUwTUh6CisgICAweDAwMzIxNDMxOiAyMDBNSHoKKworICAgMHgwODAwMTgwMDogNjRNSHogbWl0IDE2ZXIgUXVhcnoKKyAgIDB4MDQwMDE4MDA6IDk2TUh6IG1pdCAxNmVyIFF1YXJ6CisgICAweDA0MDAyNDAwOiAxNDRNSHogbWl0IDE2ZXIgUXVhcnoKKworICAgMzEgfHggeCB4IHh8eCB4IHggeHx4IHggeCB4fHggeCB4IHh8eCB4IHggeHx4IHggeCB4fHggeCB4IHh8eCB4IHggeHwgMAorICAgICAgfFhYWHwtLVBELS0tfC0tLS0tLS1NRkQtLS0tLS0tLS18WFhYfC0tTUZJLS18LS0tLS1NRk4tLS0tLS0tLS0tLXwJICAgICovCisKKyNkZWZpbmUgQ0ZHX01QQ1RMMF9WQUwJCTB4MDdFNzIzQUQKKyNkZWZpbmUgQ0ZHX01QQ1RMMV9WQUwJCTB4MDAwMDAwNDAKKyNkZWZpbmUgQ0ZHX1BDRFJfVkFMCQkweDAwMDEwMDA1CisjZGVmaW5lIENGR19HUENSX1ZBTAkJMHgwMDAwMEZGQgorCisjZGVmaW5lIFVTRV8xNk1fT1NaSSAvKiBJZiB5b3UgaGF2ZSBvbmUsIHlvdSB3YW50IHRvIHVzZSBpdAorCQkJVGhlIGludGVybmFsIDMya0h6IG9zemlsbGF0b3Igaml0dGVycyAqLworI2lmZGVmIFVTRV8xNk1fT1NaSQorCisjZGVmaW5lIENGR19TUENUTDBfVkFMCQkweDA0MDAxNDAxCisjZGVmaW5lIENGR19TUENUTDFfVkFMCQkweDBDMDAwMDQwCisjZGVmaW5lIENGR19DU0NSX1ZBTAkJMHgwNzAzMDAwMworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTE2NzgwMDAwCisjZGVmaW5lIENPTkZJR19TWVNQTExfQ0xLX0ZSRVEJMTYwMDAwMDAKKworI2Vsc2UKKworI2RlZmluZSBDRkdfU1BDVEwwX1ZBTAkJMHgwN0U3MTZEMQorI2RlZmluZSBDRkdfQ1NDUl9WQUwJCTB4MDYwMDAwMDMKKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkxNjc4MDAwMAorI2RlZmluZSBDT05GSUdfU1lTUExMX0NMS19GUkVRCTE2NzgwMDAwCisKKyNlbmRpZgorCisvKgorICogV2VsbCB0aGlzIGhhcyB0byBiZSBkZWZpbmVkLCBidXQgb24gdGhlIG90aGVyIGhhbmQgaXQgaXMgdXNlZCBkaWZmZXJlbnRseQorICogb25lIG1heSBleHBlY3QuIEZvciBpbnN0YW5jZSBsb2FkYiBjb21tYW5kIGRvIG5vdCBjYXJlcyA6LSkKKyAqIFNvIGFkdmljZSBpcyAtIGRvIG5vdCByZWxheSBvbiB0aGlzLi4uCisgKi8KKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJMHgwODQwMDAwMAorCisjZGVmaW5lIENGR19GTUNSX1ZBTAkJMHgwMDAwMDAwMyAvKiBSZXNldCBEZWZhdWx0ICovCisKKy8qIEJpdFswOjNdIGNvbnRhaW4gUEVSQ0xLMURJViBmb3IgVUFSVCAxCisgICAweDAwMGIwMGIgLT5iPC0gLT4gMTkyTUh6LzEyPTE2TUh6CisgICAweDAwMGIwMGIgLT44PC0gLT4gMTQ0TUh6LzA5PTE2TUh6CisgICAweDAwMGIwMGIgLT4zPC0gLT4gNjRNSHovND0xNk1IeiAqLworCisjaWZkZWYgX0NPTkZJR19VQVJUMQorI2RlZmluZSBDT05GSUdfSU1YX1NFUklBTDEKKyNlbGlmIGRlZmluZWQgX0NPTkZJR19VQVJUMgorI2RlZmluZSBDT05GSUdfSU1YX1NFUklBTDIKKyNlbGlmIGRlZmluZWQgX0NPTkZJR19VQVJUMyB8IGRlZmluZWQgX0NPTkZJR19VQVJUNAorI2RlZmluZSBDT05GSUdfSU1YX1NFUklBTF9OT05FCisjZGVmaW5lIENGR19OUzE2NTUwCisjZGVmaW5lIENGR19OUzE2NTUwX1NFUklBTAorI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCTM2ODY0MDAKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUJMQorI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkxCisjaWZkZWYgX0NPTkZJR19VQVJUMworI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xCTB4MTUwMDAwMDAKKyNlbGlmIGRlZmluZWQgX0NPTkZJR19VQVJUNAorI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xCTB4MTYwMDAwMDAKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc2NiOTMyOC5oIGIvaW5jbHVkZS9jb25maWdzL3NjYjkzMjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q5MTI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL3NjYjkzMjguaApAQCAtMCwwICsxLDM1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBFVEMgcy5yLm8uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogV3JpdHRlbiBieSBQZXRlciBGaWd1bGkgPHBlcG9zaEBldGMuc2s+LCAyMDAzLgorICoKKyAqIDIwMDMvMTMvMDYgSW5pdGlhbCBNUDEwIFN1cHBvcnQgY29waWVkIGZyb20gd2VwZXAyNTAKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisjZGVmaW5lIENPTkZJR19BUk05MjBUCQkxICAgICAvKiB0aGlzIGlzIGFuIEFSTTkyMFQgQ1BVCSAgICAqLworI2RlZmluZSBDT05GSUdfSU1YCQkxICAgICAvKiBpbiBhIE1vdG9yb2xhIE1DOTMyOE1YTCBDaGlwICovCisjZGVmaW5lIENPTkZJR19TQ0I5MzI4CQkxICAgICAvKiBvbiBhIHNjYjkzMjh0cm9uaXggYm9hcmQgKi8KKyN1bmRlZglDT05GSUdfVVNFX0lSUQkJICAgICAgLyogZG9uJ3QgbmVlZCB1c2UgSVJRL0ZJUQkgICAqLworCisjZGVmaW5lIENPTkZJR19JTVhfU0VSSUFMMQorLyoKKyAqIFNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCisgKi8KKworCisvKgorICogRGVmaW5pdGlvbiBvZiB1LWJvb3QgYnVpbGQgaW4gY29tbWFuZHMuIENoZWNrIG91dCBDT05GSUdfQ01EX0RGTCBpZgorICogbmVjY2Vzc2FyeSBpbiBpbmNsdWRlL2NtZF9jb25mZGVmcy5oIGZpbGUuIChVbiljb21tZW50IGZvciBnZXR0aW5nCisgKiBmdW5jdGlvbmFsaXR5IG9yIHNpemUgb2YgdS1ib290IGNvZGUuCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ09ORklHX0NNRF9ERkwJCVwKKwkJCQkmIH5DRkdfQ01EX0xPQURTCVwKKwkJCQkmIH5DRkdfQ01EX0NPTlNPTEUJXAorCQkJCSYgfkNGR19DTURfQVVUT1NDUklQVAlcCisJCQkJfCBDRkdfQ01EX05FVAkJXAorCQkJCXwgQ0ZHX0NNRF9QSU5HCQlcCisJCQkJfCBDRkdfQ01EX0RIQ1AJCVwKKwkJCQkpCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworLyoKKyAqIEJvb3Qgb3B0aW9ucy4gU2V0dGluZyBkZWxheSB0byAtMSBzdG9wcyBhdXRvc3RhcnQgY291bnQgZG93bi4KKyAqIE5PVEU6IFNlbmRpbmcgcGFyYW1ldGVycyB0byBrZXJuZWwgZGVwZW5kcyBvbiBrZXJuZWwgdmVyc2lvbiBhbmQKKyAqIDIuNC4xOS1ybWs2LXB4YTEgcGF0Y2ggdXNlZCB3aGlsZSBteSB1LWJvb3QgY29kaW5nIGRpZG4ndCBhY2NlcHQKKyAqIHBhcmFtZXRlcnMgYXQgYWxsISBEbyBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHRoZW0gc28uCisgKi8KKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWSAgIC0xCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkgICAiY29uc29sZT10dHlTTVgwLDExNTIwMG44IHJvb3Q9L2Rldi9tdGRibG9jazMgcm9vdGZzdHlwZT1qZmZzMiBtdGRwYXJ0cz1zY2I5MzI4X2ZsYXNoOjEyOGsoVS1ib290KXJvLDEyOGsoVS1ib290X2VudiksMW0oa2VybmVsKSw0bShyb290KSw0bShmcykgZXZhbF9ib2FyZD1ldms5MzI4IgorI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgImJvb3RtIDEwMDQwMDAwIgorI2RlZmluZSBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQk4MDo4MTo4Mjo4Mzo4NDo4NQorI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4yNTUuMAorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxMC4xMC4xMC45CisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTAuMTAuMTAuMTAKKworLyoKKyAqIEdlbmVyYWwgb3B0aW9ucyBmb3IgdS1ib290LiBNb2RpZnkgdG8gc2F2ZSBtZW1vcnkgZm9vdCBwcmludAorICovCisjZGVmaW5lIENGR19MT05HSEVMUAkJCQkgICAgICAvKiB1bmRlZiBzYXZlcyBtZW1vcnkgICovCisjZGVmaW5lIENGR19QUk9NUFQJCSJzY2I5MzI4PiAiCSAgICAgIC8qIHByb21wdCBzdHJpbmcJICAgICAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCSAgICAgIC8qIGNvbnNvbGUgSS9PIGJ1ZmZlciAgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpIC8qIHByaW50IGJ1ZmZlciBzaXplICAgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkgICAgICAvKiBtYXggY29tbWFuZCBhcmdzICAgICovCisjZGVmaW5lIENGR19CQVJHU0laRQkJQ0ZHX0NCU0laRQkgICAgICAvKiBib290IGFyZ3MgYnVmIHNpemUgICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwODEwMDAwMAkgICAgICAvKiBtZW10ZXN0IHRlc3QgYXJlYSAgICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwOEYwMDAwMAorCisjdW5kZWYJQ0ZHX0NMS1NfSU5fSFoJCQkgICAgIC8qIHVzZSBIWiBmb3IgZnJlcS4gZGlzcGxheSAgICAgKi8KKworI2RlZmluZSBDRkdfSFoJCQkzNjg2NDAwCSAgICAgLyogaW5jcmVtZW50ZXIgZnJlcTogMy42ODY0IE1IeiAqLworI2RlZmluZSBDRkdfQ1BVU1BFRUQJCTB4MTQxCSAgICAgLyogY29yZSBjbG9jayAtIHJlZ2lzdGVyIHZhbHVlICAqLworCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisjZGVmaW5lIENPTkZJR19CQVVEUkFURSAxMTUyMDAKKy8qCisgKiBEZWZpbml0aW9ucyByZWxhdGVkIHRvIHBhc3NpbmcgYXJndW1lbnRzIHRvIGtlcm5lbC4KKyAqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJICAgICAxCSAvKiBzZW5kIGNvbW1hbmRsaW5lIHRvIEtlcm5lbAkgICAgICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUyAgICAgMQkgLyogc2VuZCBtZW1vcnkgZGVmaW5pdGlvbiB0byBrZXJuZWwgKi8KKyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJICAgICAxCSAvKiBzZW5kIGluaXRyZCBwYXJhbXMJCSAgICAgKi8KKyN1bmRlZglDT05GSUdfVkZECQkJIC8qIGRvIG5vdCBzZW5kIGZyYW1lYnVmZmVyIHNldHVwICAgICovCisKKworLyoKKyAqIE1hbGxvYyBwb29sIG5lZWQgdG8gaG9zdCBlbnYgKyAxMjggS2IgcmVzZXJ2ZSBmb3Igb3RoZXIgYWxsb2NhdGlvbnMuCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAoMTI4PDwxMCkgKQorCisKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDEyMDw8MTApICAgICAgLyogc3RhY2sgc2l6ZQkJICAgICAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEJKDQ8PDEwKQkgICAgICAgLyogSVJRIHN0YWNrCQkgICAgICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRCSg0PDwxMCkJICAgICAgIC8qIEZJUSBzdGFjawkJICAgICAqLworI2VuZGlmCisKKy8qIFNEUkFNIFNldHVwIFZhbHVlcworMHg5MTBhODMwMCBQcmVjaGFyZ2UgQ29tbWFuZCBDQVMgMworMHg5MTBhODIwMCBQcmVjaGFyZ2UgQ29tbWFuZCBDQVMgMgorCisweGExMGE4MzAwIEF1dG9SZWZyZXNoIENvbW1hbmQgQ0FTIDMKKzB4YTEwYTgyMDAgU2V0IEF1dG9SZWZyZXNoIENvbW1hbmQgQ0FTIDIgKi8KKworI2RlZmluZSBQUkVDSEFSR0VfQ01EIDB4OTEwYTgyMDAKKyNkZWZpbmUgQVVUT1JFRlJFU0hfQ01EIDB4YTEwYTgyMDAKKyNkZWZpbmUgQ09ORklHX0lOSVRfQ1JJVElDQUwKKworLyoKKyAqIFNEUkFNIE1lbW9yeSBNYXAKKyAqLworLyogU0ggRklYTUUgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQkJLyogd2UgaGF2ZSAxIGJhbmsgb2YgU0RSQU0gKi8KKyNkZWZpbmUgU0NCOTMyOF9TRFJBTV8xCQkweDA4MDAwMDAwCS8qIFNEUkFNIGJhbmsgIzEJICAgKi8KKyNkZWZpbmUgU0NCOTMyOF9TRFJBTV8xX1NJWkUJMHgwMTAwMDAwMAkvKiAxNiBNQgkJICAgKi8KKworLyoKKyAqIEZsYXNoIENvbnRyb2xsZXIgc2V0dGluZ3MKKyAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKworLyoKKyAqIENvbmZpZ3VyYXRpb24gZm9yIEZMQVNIIG1lbW9yeSBmb3IgdGhlIFN5bmVydHJvbml4eCBib2FyZAorICovCisKKy8qICNkZWZpbmUgU0NCOTMyOF9GTEFTSF8zMk0gKi8KKworLyogMzJNQiAqLworI2lmZGVmIFNDQjkzMjhfRkxBU0hfMzJNCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEJLyogRkxBU0ggYmFua3MgY291bnQgKG5vdCBjaGlwIGNvdW50KSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMjU2CS8qIG51bWJlciBvZiBzZWN0b3IgaW4gRkxBU0ggYmFuayAgICAqLworI2RlZmluZSBTQ0I5MzI4X0ZMQVNIX0JVU19XSURUSAkJMgkvKiB3ZSB1c2UgMTYgYml0IEZMQVNIIG1lbW9yeS4uLiAgICAgKi8KKyNkZWZpbmUgU0NCOTMyOF9GTEFTSF9JTlRFUkxFQVZFCTEJLyogLi4uIG1hZGUgb2YgMSBjaGlwCQkgICAgICovCisjZGVmaW5lIFNDQjkzMjhfRkxBU0hfQkFOS19TSVpFCSAweDAyMDAwMDAwCS8qIHNpemUgb2Ygb25lIGZsYXNoIGJhbmsJICAgICAqLworI2RlZmluZSBTQ0I5MzI4X0ZMQVNIX1NFQ1RfU0laRQkgMHgwMDAyMDAwMAkvKiBzaXplIG9mIGVyYXNlIHNlY3RvcgkJICAgICAqLworI2RlZmluZSBTQ0I5MzI4X0ZMQVNIX0JBU0UJIDB4MTAwMDAwMDAJLyogbG9jYXRpb24gb2YgZmxhc2ggbWVtb3J5CSAgICAgKi8KKyNkZWZpbmUgU0NCOTMyOF9GTEFTSF9VTkxPQ0sJCTEJLyogcGVyZm9ybSBodyB1bmxvY2sgZmlyc3QJICAgICAqLworI2Vsc2UKKworLyogMTZNQiAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxCS8qIEZMQVNIIGJhbmtzIGNvdW50IChub3QgY2hpcCBjb3VudCkqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEyOAkvKiBudW1iZXIgb2Ygc2VjdG9yIGluIEZMQVNIIGJhbmsgICAgKi8KKyNkZWZpbmUgU0NCOTMyOF9GTEFTSF9CVVNfV0lEVEgJCTIJLyogd2UgdXNlIDE2IGJpdCBGTEFTSCBtZW1vcnkuLi4gICAgICovCisjZGVmaW5lIFNDQjkzMjhfRkxBU0hfSU5URVJMRUFWRQkxCS8qIC4uLiBtYWRlIG9mIDEgY2hpcAkJICAgICAqLworI2RlZmluZSBTQ0I5MzI4X0ZMQVNIX0JBTktfU0laRQkgMHgwMTAwMDAwMAkvKiBzaXplIG9mIG9uZSBmbGFzaCBiYW5rCSAgICAgKi8KKyNkZWZpbmUgU0NCOTMyOF9GTEFTSF9TRUNUX1NJWkUJIDB4MDAwMjAwMDAJLyogc2l6ZSBvZiBlcmFzZSBzZWN0b3IJCSAgICAgKi8KKyNkZWZpbmUgU0NCOTMyOF9GTEFTSF9CQVNFCSAweDEwMDAwMDAwCS8qIGxvY2F0aW9uIG9mIGZsYXNoIG1lbW9yeQkgICAgICovCisjZGVmaW5lIFNDQjkzMjhfRkxBU0hfVU5MT0NLCQkxCS8qIHBlcmZvcm0gaHcgdW5sb2NrIGZpcnN0CSAgICAgKi8KKyNlbmRpZiAvKiBTQ0I5MzI4X0ZMQVNIXzMyTSAqLworCisvKiBUaGlzIHNob3VsZCBiZSBkZWZpbmVkIGlmIENGSSBGTEFTSCBkZXZpY2UgaXMgcHJlc2VudC4gQWN0dWFsbHkgYmVuZWZpdAorICAgaXMgbm90IHNvIGNsZWFyIHRvIG1lLiBJbiBvdGhlciB3b3JkcyB3ZSBjYW4gcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9ucworICAgdG8gdXNlciwgYnV0IHRoaXMgZXhwZWN0cyBtb3JlIGNvbXBsZXggZmxhc2ggaGFuZGxpbmcgd2UgZG8gbm90IHByb3ZpZGUKKyAgIG5vdy4qLworI3VuZGVmCUNGR19GTEFTSF9DRkkKKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkoMipDRkdfSFopICAgIC8qIHRpbWVvdXQgZm9yIEVyYXNlIG9wZXJhdGlvbiAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkoMipDRkdfSFopICAgIC8qIHRpbWVvdXQgZm9yIFdyaXRlIG9wZXJhdGlvbiAqLworCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQlTQ0I5MzI4X0ZMQVNIX0JBU0UKKworLyoKKyAqIFRoaXMgaXMgc2V0dGluZyBmb3IgSkZGUzIgc3VwcG9ydCBpbiB1LWJvb3QuCisgKiBSaWdodCBub3cgdGhlcmUgaXMgbm8gZ2FpbiBmb3IgdXNlciwgYnV0IGxhdGVyIG9uIGJvb3Rpbmcga2VybmVsIG1pZ2h0IGJlCisgKiBwb3NzaWJsZS4gQ29uc2lkZXIgdXNpbmcgWElQIGtlcm5lbCBydW5uaW5nIGZyb20gZmxhc2ggdG8gc2F2ZSBSQU0KKyAqIGZvb3RwcmludC4KKyAqIE5PVEU6IEVuYWJsZSBDRkdfQ01EX0pGRlMyIGZvciBKRkZTMiBzdXBwb3J0LgorICovCisjZGVmaW5lIENGR19KRkZTMl9GSVJTVF9CQU5LCQkwCisjZGVmaW5lIENGR19KRkZTMl9GSVJTVF9TRUNUT1IJCTUKKyNkZWZpbmUgQ0ZHX0pGRlMyX05VTV9CQU5LUwkJMQorCisvKgorICogRW52aXJvbm1lbnQgc2V0dXAuIERlZmluaXRpb25zIG9mIG1vbml0b3IgbG9jYXRpb24gYW5kIHNpemUgd2l0aAorICogZGVmaW5pdGlvbiBvZiBlbnZpcm9ubWVudCBzZXR1cCBlbmRzIHVwIGluIDIgcG9zc2liaWxpdGllcy4KKyAqIDEuIEVtYmVkZWQgZW52aXJvbm1lbnQgLSBpbiB1LWJvb3QgY29kZSBpcyBzcGFjZSBmb3IgZW52aXJvbm1lbnQKKyAqIDIuIEVudmlyb25tZW50IGlzIHJlYWQgZnJvbSBwcmVkZWZpbmVkIHNlY3RvciBvZiBmbGFzaAorICogUmlnaHQgbm93IHdlIHN1cHBvcnQgMi4gcG9zc2libGl0eSwgYnV0IGV4cGVjdGluZyBubyBlbnYgcGxhY2VkCisgKiBvbiBtZW50aW9uZWQgYWRkcmVzcyByaWdodCBub3cuIFRoaXMgYWxzbyBuZWVkcyB0byBwcm92aWRlIHdob2xlCisgKiBzZWN0b3IgZm9yIGl0IC0gZm9yIHVzIDI1NktiIGlzIHJlYWxseSB3YXN0ZSBvZiBtZW1vcnkuIFUtYm9vdCB1c2VzCisgKiBkZWZhdWx0IGVudi4gYW5kIHVudGlsIGtlcm5lbCBwYXJhbWV0ZXJzIGNvdWxkIGJlIHNlbnQgdG8ga2VybmVsCisgKiBlbnYuIGhhcyBubyBzZW5zZSB0byB1cy4KKyAqLworCisvKiBTZXR1cCBmb3IgUEEyMyB3aGljaCBpcyBSZXNldCBEZWZhdWx0IFBBMjMgYnV0IGhhcyB0byBiZWNvbWUKKyAgIENTNSAqLworCisjZGVmaW5lIENGR19HUFJfQV9WQUwJCTB4MDA4MDAwMDAKKyNkZWZpbmUgQ0ZHX0dJVVNfQV9WQUwJCTB4MDA0M2ZmZmUKKworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCTB4MTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkweDIwMDAwCQkvKiAxMjhiICggMSBmbGFzaCBzZWN0b3IgKSAgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfQUREUgkJMHgxMDAyMDAwMAkvKiBhYnNvbHV0ZSBhZGRyZXNzIGZvciBub3cgICovCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAorCisjZGVmaW5lCSBDT05GSUdfRU5WX09WRVJXUklURSAgMQkJLyogZW52IGlzIG5vdCB3cml0YWJsZSBub3cgICAqLworCisvKgorICogQ1N4VV9WQUw6CisgKiA2M3wgeAl4IHggeCB8IHggeCB4IHggfCB4IHggIHggICAgeCB8IHggeCB4IHggfCB4IHggeCB4IHwgeCB4IHggeCB8IHggeCB4IHggfCB4IHggeCB4fDMyCisgKiAgIHxEVEFDS19TRUx8MHxCQ0QgfAkgIEJDUwl8IFBTWnxQTUV8U1lOQ3wJIERPTAl8IENOQ3wJICBXU0MJICAgIHwgMHwgV1dTICB8CSAgRURDICB8CisgKgorICogQ1N4TF9WQUw6CisgKiAzMXwgeCB4IHggeCB8IHggeCB4IHggfCB4IHggeCB4IHwgeCB4IHggeCB8IHggeCB4IHggfCAgeCB4IHggeCB8IHggeAkgeCB4IHwgeCB4ICB4CSB4fCAwCisgKiAgIHwJIE9FQSAgIHwgICBPRU4JIHwgICBXRUEgICB8ICAgV0VOICAgfAkgQ1NBICAgfEVCQ3wgRFNaICB8IDB8U1B8MHxXUHwgMCAwfFBBfENTRU58CisgKi8KKworI2RlZmluZSBDRkdfQ1MwVV9WQUwgMHgwMDBGMjAwMAorI2RlZmluZSBDRkdfQ1MwTF9WQUwgMHgxMTExMGQwMQorI2RlZmluZSBDRkdfQ1MxVV9WQUwgMHgwMDBGMGEwMAorI2RlZmluZSBDRkdfQ1MxTF9WQUwgMHgxMTExMDYwMQorI2RlZmluZSBDRkdfQ1MyVV9WQUwgMHgwCisjZGVmaW5lIENGR19DUzJMX1ZBTCAweDAKKworI2RlZmluZSBDRkdfQ1MzVV9WQUwgMHgwMDBGRkZGRgorI2RlZmluZSBDRkdfQ1MzTF9WQUwgMHgwMDAwMDMwMworCisjZGVmaW5lIENGR19DUzRVX1ZBTCAweDAwMEYwYTAwCisjZGVmaW5lIENGR19DUzRMX1ZBTCAweDExMTEwMzAxCisKKy8qIENOQyA9PSAzIHRvbyBsb25nCisgICAjZGVmaW5lIENGR19DUzVVX1ZBTCAweDAwMDBDMjEwICovCisKKy8qICNkZWZpbmUgQ0ZHX0NTNVVfVkFMIDB4MDAwMDg0MDAKKyAgIG1hbCBsYWVuZ2VyIG1haGNlbiwgb2IgZGVyIGJlaSAxNTBNSHogbGFlbmdlciBoYWVsdCBkYW5uIHVuZAorICAga2F1bSBsYW5nc2FtZXIgaXN0ICovCisvKiAjZGVmaW5lIENGR19DUzVVX1ZBTCAweDAwMDA5NDAwCisgICAjZGVmaW5lIENGR19DUzVMX1ZBTCAweDExMDEwRDAzICovCisKKyNkZWZpbmUgQ0ZHX0NTNVVfVkFMIDB4MDAwMDg0MDAKKyNkZWZpbmUgQ0ZHX0NTNUxfVkFMIDB4MDAwMDBEMDMKKworI2RlZmluZSBDT05GSUdfRFJJVkVSX0RNOTAwMAkJMQorI2RlZmluZSBDT05GSUdfRFJJVkVSX0RNOTAwMAkJMQorI2RlZmluZSBDT05GSUdfRE05MDAwX0JBU0UJCTB4MTYwMDAwMDAKKyNkZWZpbmUgRE05MDAwX0lPCQkJQ09ORklHX0RNOTAwMF9CQVNFCisjZGVmaW5lIERNOTAwMF9EQVRBCQkJKENPTkZJR19ETTkwMDBfQkFTRSs0KQorLyogI2RlZmluZSBDT05GSUdfRE05MDAwX1VTRV84QklUICovCisjZGVmaW5lIENPTkZJR19ETTkwMDBfVVNFXzE2QklUCisvKiAjZGVmaW5lIENPTkZJR19ETTkwMDBfVVNFXzMyQklUICovCisKKy8qIGZfe2RwbGx9PTIqZntyZWZ9KihNRkkrTUZOLyhNRkQrMSkpLyhQRCsxKQorICAgZl9yZWY9MTYsNzc3TUh6CisKKyAgIDB4MDAyYTE0MWY6IDE5MSw5OTQ0TUh6CisgICAweDA0MGIyMDA3OiAxNDRNSHoKKyAgIDB4MDQyYTE0MWY6IDk2TUh6CisgICAweDA4MTExNDBkOiA2NE1IegorICAgMHgwNDBlMjAwZTogMTUwTUh6CisgICAweDAwMzIxNDMxOiAyMDBNSHoKKworICAgMHgwODAwMTgwMDogNjRNSHogbWl0IDE2ZXIgUXVhcnoKKyAgIDB4MDQwMDE4MDA6IDk2TUh6IG1pdCAxNmVyIFF1YXJ6CisgICAweDA0MDAyNDAwOiAxNDRNSHogbWl0IDE2ZXIgUXVhcnoKKworICAgMzEgfHggeCB4IHh8eCB4IHggeHx4IHggeCB4fHggeCB4IHh8eCB4IHggeHx4IHggeCB4fHggeCB4IHh8eCB4IHggeHwgMAorICAgICAgfFhYWHwtLVBELS0tfC0tLS0tLS1NRkQtLS0tLS0tLS18WFhYfC0tTUZJLS18LS0tLS1NRk4tLS0tLS0tLS0tLXwJICAgICovCisKKyNkZWZpbmUgQ1BVMjAwCisKKyNpZmRlZiBDUFUyMDAKKyNkZWZpbmUgQ0ZHX01QQ1RMMF9WQUwgMHgwMDMyMTQzMQorI2Vsc2UKKyNkZWZpbmUgQ0ZHX01QQ1RMMF9WQUwgMHgwNDBlMjAwZQorI2VuZGlmCisKKy8qICNkZWZpbmUgQlVTNjQgKi8KKyNkZWZpbmUgQlVTNzIKKworI2lmZGVmIEJVUzcyCisjZGVmaW5lIENGR19TUENUTDBfVkFMIDB4MDQwMDI0MDAKKyNlbmRpZgorCisjaWZkZWYgQlVTOTYKKyNkZWZpbmUgQ0ZHX1NQQ1RMMF9WQUwgMHgwNDAwMTgwMAorI2VuZGlmCisKKyNpZmRlZiBCVVM2NAorI2RlZmluZSBDRkdfU1BDVEwwX1ZBTCAweDA4MDAxODAwCisjZW5kaWYKKworLyogRGFzIGlzdCBkZXIgQkNMSyBEaXZpZGVyLCBkZXIgYXVzIGRlciBTeXN0ZW0gUExMCisgICBCQ0xLIHVuZCBIQ0xLIGVyemV1Z3Q6CisgICAzMSB8IHh4eHggeHh4eCB4eHh4IHh4eHggeHgxMCAxMXh4IHh4eHggeHh4eCB8IDAKKyAgIDB4MmYwMDg0MDMgOiAxOTJNSHovMj05Nk1IeiwgMTQ0TUh6LzI9NzJNSHogUFJFU0M9MS0+QkNMS0RJVj0yCisgICAweDJmMDA4ODAzIDogMTkyTUh6LzM9NjRNSHosIDI0ME1Iei8zPTgwTUh6IFBSRVNDPTEtPkJDTEtESVY9MgorICAgMHgyZjAwMTAwMyA6IDE5Mk1Iei81PTM4LDRNSHoKKyAgIDB4MmYwMDAwMDMgOiA2NE1Iei8xCisgICBCaXQgMjI6IFNQTEwgUmVzdGFydAorICAgQml0IDIxOiBNUExMIFJlc3RhcnQgKi8KKworI2lmZGVmIEJVUzY0CisjZGVmaW5lIENGR19DU0NSX1ZBTCAweDJmMDMwMDAzCisjZW5kaWYKKworI2lmZGVmIEJVUzcyCisjZGVmaW5lIENGR19DU0NSX1ZBTCAweDJmMDMwNDAzCisjZW5kaWYKKworLyoKKyAqIFdlbGwgdGhpcyBoYXMgdG8gYmUgZGVmaW5lZCwgYnV0IG9uIHRoZSBvdGhlciBoYW5kIGl0IGlzIHVzZWQgZGlmZmVyZW50bHkKKyAqIG9uZSBtYXkgZXhwZWN0LiBGb3IgaW5zdGFuY2UgbG9hZGIgY29tbWFuZCBkbyBub3QgY2FyZXMgOi0pCisgKiBTbyBhZHZpY2UgaXMgLSBkbyBub3QgcmVsYXkgb24gdGhpcy4uLgorICovCisjZGVmaW5lIENGR19MT0FEX0FERFIgMHgwODQwMDAwMAorCisjZGVmaW5lIE1IWjE2UVVBUlpJTlVTRQorCisjaWZkZWYgTUhaMTZRVUFSWklOVVNFCisjZGVmaW5lIENPTkZJR19TWVNQTExfQ0xLX0ZSRVEgMTYwMDAwMDAKKyNlbHNlCisjZGVmaW5lIENPTkZJR19TWVNQTExfQ0xLX0ZSRVEgMTY3ODAwMDAKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEgMTY3ODAwMDAKKworLyogRk1DUiBCaXQgMCBiZWNvbWVzIDAgdG8gbWFrZSBDUzMgQ1MzIDpQICovCisjZGVmaW5lIENGR19GTUNSX1ZBTCAweDAwMDAwMDAxCisKKy8qIEJpdFswOjNdIGNvbnRhaW4gUEVSQ0xLMURJViBmb3IgVUFSVCAxCisgICAweDAwMGIwMGIgLT5iPC0gLT4gMTkyTUh6LzEyPTE2TUh6CisgICAweDAwMGIwMGIgLT44PC0gLT4gMTQ0TUh6LzA5PTE2TUh6CisgICAweDAwMGIwMGIgLT4zPC0gLT4gNjRNSHovND0xNk1IeiAqLworCisjaWZkZWYgQlVTOTYKKyNkZWZpbmUgQ0ZHX1BDRFJfVkFMIDB4MDAwYjAwYjUKKyNlbmRpZgorCisjaWZkZWYgQlVTNjQKKyNkZWZpbmUgQ0ZHX1BDRFJfVkFMIDB4MDAwYjAwYjMKKyNlbmRpZgorCisjaWZkZWYgQlVTNzIKKyNkZWZpbmUgQ0ZHX1BDRFJfVkFMIDB4MDAwYjAwYjgKKyNlbmRpZgorCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kZXZpY2VzLmggYi9pbmNsdWRlL2RldmljZXMuaAppbmRleCA5ZjJhMGMzLi4wOWMyYzVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RldmljZXMuaAorKysgYi9pbmNsdWRlL2RldmljZXMuaApAQCAtMzksNyArMzksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCWludAlmbGFnczsJCQkvKiBEZXZpY2UgZmxhZ3M6IGlucHV0L291dHB1dC9zeXN0ZW0JKi8KIAlpbnQJZXh0OwkJCS8qIFN1cHBvcnRlZCBleHRlbnNpb25zCQkJKi8KLQljaGFyCW5hbWVbOF07CQkvKiBEZXZpY2UgbmFtZQkJCQkqLworCWNoYXIJbmFtZVsxNl07CQkvKiBEZXZpY2UgbmFtZQkJCQkqLwogCiAvKiBHRU5FUkFMIGZ1bmN0aW9ucyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21jOTMyOC5oIGIvaW5jbHVkZS9tYzkzMjguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2ZTc1Ny4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL21jOTMyOC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MSArMCwwIEBACi0vKgotICogaW5jbHVkZS9tYzkzMjguaAotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwNAotICogVGVjaHdhcmUgSW5mb3JtYXRpb24gVGVjaG5vbG9neSwgSW5jLgotICogaHR0cDovL3d3dy50ZWNod2FyZS5jb20udHcvCi0gKgotICogTWluZy1MZW4gV3UgPG1pbmdsZW5fd3VAdGVjaHdhcmUuY29tLnR3PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpZm5kZWYgX19NQzkzMjhfSF9fCi0jZGVmaW5lIF9fTUM5MzI4X0hfXwotCi10eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJVlUzMjsKLXR5cGVkZWYgVlUzMgkqCQlQX1ZVMzI7Ci0KLSNkZWZpbmUgX19SRUcoeCkJCSgqKCh2b2xhdGlsZSB1MzIgKikoeCkpKQotCi0vKgotICogTVgxIENoaXAgc2VsZWN0cyAmIGludGVybmFsIG1lbW9yeSdzCi0gKi8KLSNkZWZpbmUgTVgxX0RNSV9QSFlTCTB4MDAwMDAwMDAJLyogZG91YmxlIG1hcCBpbWFnZQkqLwotI2RlZmluZSBNWDFfQlJPTV9QSFlTCTB4MDAxMDAwMDAJLyogQm9vdHN0cmFwZSBST00JKi8KLSNkZWZpbmUgTVgxX0VTUkFNX1BIWVMJMHgwMDMwMDAwMAkvKiBFbWJlZGRlZCBTUkFNICgxMjhLQikqLwotCi0jZGVmaW5lIE1YMV9DU0QwX1BIWVMJMHgwODAwMDAwMAkvKiBDU0QwIDY0TUIgKFNEUkFNKQkqLwotI2RlZmluZSBNWDFfQ1NEMV9QSFlTCTB4MEMwMDAwMDAJLyogQ1NEMSA2NE1CIChTRFJBTSkJKi8KLSNkZWZpbmUgTVgxX0NTMF9QSFlTCTB4MTAwMDAwMDAJLyogQ1MwIDMyTUIgKEZsYXNoKQkqLwotI2RlZmluZSBNWDFfQ1MxX1BIWVMJMHgxMjAwMDAwMAkvKiBDUzEgMTZNQiAoRmxhc2gpCSovCi0jZGVmaW5lIE1YMV9DUzJfUEhZUwkweDEzMDAwMDAwCS8qIENTMiAxNk1CIChFeHQgU1JBTSkJKi8KLSNkZWZpbmUgTVgxX0NTM19QSFlTCTB4MTQwMDAwMDAJLyogQ1MzIDE2TUIgKFNwYXJlKQkqLwotI2RlZmluZSBNWDFfQ1M0X1BIWVMJMHgxNTAwMDAwMAkvKiBDUzQgMTZNQiAoU3BhcmUpCSovCi0jZGVmaW5lIE1YMV9DUzVfUEhZUwkweDE2MDAwMDAwCS8qIENTNSAxNk1CIChTcGFyZSkJKi8KLQotLyoKLSAqCU1YMSBXYXRjaGRvZyByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBNWDFfV0NSCQlfX1JFRygweDAwMjAxMDAwKSAgLyogV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1dTUgkJX19SRUcoMHgwMDIwMTAwNCkgIC8qIFdhdGNoZG9nIFNlcnZpY2UgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9XU1RSCV9fUkVHKDB4MDAyMDEwMDgpICAvKiBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIJCSovCi0KLS8qCi0gKglNWDEgVGltZXIgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgTVgxX1RDVEwxCV9fUkVHKDB4MDAyMDIwMDApICAvKiBUaW1lciAxIENvbnRyb2wgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9UUFJFUjEJX19SRUcoMHgwMDIwMjAwNCkgIC8qIFRpbWVyIDEgUHJlc2NhbGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9UQ01QMQlfX1JFRygweDAwMjAyMDA4KSAgLyogVGltZXIgMSBDb21wYXJlIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfVENSMQlfX1JFRygweDAwMjAyMDBDKSAgLyogVGltZXIgMSBDYXB0dXJlIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfVENOMQlfX1JFRygweDAwMjAyMDEwKSAgLyogVGltZXIgMSBDb3VudGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfVFNUQVQxCV9fUkVHKDB4MDAyMDIwMTQpICAvKiBUaW1lciAxIFN0YXR1cyBSZWdpc3RlcgkJKi8KLQotI2RlZmluZSBNWDFfVENUTDIJX19SRUcoMHgwMDIwMzAwMCkgIC8qIFRpbWVyIDIgQ29udHJvbCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1RQUkVSMglfX1JFRygweDAwMjAzMDA0KSAgLyogVGltZXIgMiBQcmVzY2FsZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1RDTVAyCV9fUkVHKDB4MDAyMDMwMDgpICAvKiBUaW1lciAyIENvbXBhcmUgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9UQ1IyCV9fUkVHKDB4MDAyMDMwMEMpICAvKiBUaW1lciAyIENhcHR1cmUgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9UQ04yCV9fUkVHKDB4MDAyMDMwMTApICAvKiBUaW1lciAyIENvdW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9UU1RBVDIJX19SRUcoMHgwMDIwMzAxNCkgIC8qIFRpbWVyIDIgU3RhdHVzIFJlZ2lzdGVyCQkqLwotCi0vKgotICoJTVgxIFJUQyByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBNWDFfSE9VUk1JTglfX1JFRygweDAwMjA0MDAwKSAgLyogUlRDIEhvdXIgJiBNaW4gQ291bnRlciBSZWdpc3RlcnMJKi8KLSNkZWZpbmUgTVgxX1NFQ09ORFMJX19SRUcoMHgwMDIwNDAwNCkgIC8qIFJUQyBTZWNvbmRzIENvdW50ZXIgUmVnaXN0ZXJzCSovCi0jZGVmaW5lIE1YMV9BTFJNX0hNCV9fUkVHKDB4MDAyMDQwMDgpICAvKiBSVEMgSG91ciAmIE1pbiBBbGFybSBSZWdpc3RlcnMJKi8KLSNkZWZpbmUgTVgxX0FMUk1fU0VDCV9fUkVHKDB4MDAyMDQwMEMpICAvKiBSVEMgU2Vjb25kcyBBbGFybSBSZWdpc3RlcnMJKi8KLSNkZWZpbmUgTVgxX1JDQ1RMCV9fUkVHKDB4MDAyMDQwMTApICAvKiBSVEMgQ29udHJvbCBSZWdpc3RlcnMJCSovCi0jZGVmaW5lIE1YMV9SVENJU1IJX19SRUcoMHgwMDIwNDAxNCkgIC8qIFJUQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVycwkqLwotI2RlZmluZSBNWDFfUlRDSUVOUglfX1JFRygweDAwMjA0MDE4KSAgLyogUlRDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXJzCSovCi0jZGVmaW5lIE1YMV9TVFBXQ0gJX19SRUcoMHgwMDIwNDAxQykgIC8qIFJUQyBTdG9wd2F0Y2ggTWludXRlcyBSZWdpc3RlcnMJKi8KLSNkZWZpbmUgTVgxX0RBWVIJX19SRUcoMHgwMDIwNDAyMCkgIC8qIFJUQyBEYXlzIENvdW50ZXIgUmVnaXN0ZXJzCSovCi0jZGVmaW5lIE1YMV9EQVlBTEFSTQlfX1JFRygweDAwMjA0MDIwKSAgLyogUlRDIERheSBBbGFybSBSZWdpc3RlcnMJCSovCi0KLS8qCi0gKglNWDEgTENEIENvbnRyb2xsZXIgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgTVgxX1NTQQkJX19SRUcoMHgwMDIwNTAwMCkgIC8qIFNjcmVlbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9TSVpFCV9fUkVHKDB4MDAyMDUwMDQpICAvKiBTaXplIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgTVgxX1ZQVwkJX19SRUcoMHgwMDIwNTAwOCkgIC8qIFZpcnR1YWwgUGFnZSBXaWR0aCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ1BPUwlfX1JFRygweDAwMjA1MDBDKSAgLyogTENEIEN1cnNvciBQb3NpdGlvbiAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0xDV0hCCV9fUkVHKDB4MDAyMDUwMTApICAvKiBMQ0QgQ3Vyc29yIFdpZHRoIEhlaWdodCAmIEJsaW5rIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9MQ0hDQwlfX1JFRygweDAwMjA1MDE0KSAgLyogTENEIENvbG9yIEN1cnNvciBNYXBwaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9QQ1IJCV9fUkVHKDB4MDAyMDUwMTgpICAvKiBMQ0QgUGFuZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfSENSCQlfX1JFRygweDAwMjA1MDFDKSAgLyogSG9yaXpvbnRhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9WQ1IJCV9fUkVHKDB4MDAyMDUwMjApICAvKiBWZXJ0aWNhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9QT1MJCV9fUkVHKDB4MDAyMDUwMjQpICAvKiBQYW5uaW5nIE9mZnNldCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0xHUE1SCV9fUkVHKDB4MDAyMDUwMjgpICAvKiBMQ0QgR3JheSBQYWxldHRlIE1hcHBpbmcgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX1BXTVIJX19SRUcoMHgwMDIwNTAyQykgIC8qIFBXTSBDb250cmFzdCBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9ETUFDUglfX1JFRygweDAwMjA1MDMwKSAgLyogRE1BIENvbnRyb2wgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9STUNSCV9fUkVHKDB4MDAyMDUwMzQpICAvKiBSZWZyZXNoIE1vZGUgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfTENESUNSCV9fUkVHKDB4MDAyMDUwMzgpICAvKiBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfTENESVNSCV9fUkVHKDB4MDAyMDUwNDApICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCQkqLwotCi0vKgotICoJTVgxIFVBUlQgcmVnaXN0ZXJzCi0gKi8KLQotLyogVUFSVCAxICovCi0jZGVmaW5lIE1YMV9VUlgwRF8xCV9fUkVHKDB4MDAyMDYwMDApICAvKiBVQVJUIDEgUmVjZWl2ZXIgUmVnaXN0ZXIgMAkqLwotI2RlZmluZSBNWDFfVVJYMURfMQlfX1JFRygweDAwMjA2MDA0KSAgLyogVUFSVCAxIFJlY2VpdmVyIFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgTVgxX1VSWDJEXzEJX19SRUcoMHgwMDIwNjAwOCkgIC8qIFVBUlQgMSBSZWNlaXZlciBSZWdpc3RlciAyCSovCi0jZGVmaW5lIE1YMV9VUlgzRF8xCV9fUkVHKDB4MDAyMDYwMEMpICAvKiBVQVJUIDEgUmVjZWl2ZXIgUmVnaXN0ZXIgMwkqLwotI2RlZmluZSBNWDFfVVJYNERfMQlfX1JFRygweDAwMjA2MDEwKSAgLyogVUFSVCAxIFJlY2VpdmVyIFJlZ2lzdGVyIDQJKi8KLSNkZWZpbmUgTVgxX1VSWDVEXzEJX19SRUcoMHgwMDIwNjAxNCkgIC8qIFVBUlQgMSBSZWNlaXZlciBSZWdpc3RlciA1CSovCi0jZGVmaW5lIE1YMV9VUlg2RF8xCV9fUkVHKDB4MDAyMDYwMTgpICAvKiBVQVJUIDEgUmVjZWl2ZXIgUmVnaXN0ZXIgNgkqLwotI2RlZmluZSBNWDFfVVJYN0RfMQlfX1JFRygweDAwMjA2MDFDKSAgLyogVUFSVCAxIFJlY2VpdmVyIFJlZ2lzdGVyIDcJKi8KLSNkZWZpbmUgTVgxX1VSWDhEXzEJX19SRUcoMHgwMDIwNjAyMCkgIC8qIFVBUlQgMSBSZWNlaXZlciBSZWdpc3RlciA4CSovCi0jZGVmaW5lIE1YMV9VUlg5RF8xCV9fUkVHKDB4MDAyMDYwMjQpICAvKiBVQVJUIDEgUmVjZWl2ZXIgUmVnaXN0ZXIgOQkqLwotI2RlZmluZSBNWDFfVVJYMTBEXzEJX19SRUcoMHgwMDIwNjAyOCkgIC8qIFVBUlQgMSBSZWNlaXZlciBSZWdpc3RlciAxMAkqLwotI2RlZmluZSBNWDFfVVJYMTFEXzEJX19SRUcoMHgwMDIwNjAyQykgIC8qIFVBUlQgMSBSZWNlaXZlciBSZWdpc3RlciAxMQkqLwotI2RlZmluZSBNWDFfVVJYMTJEXzEJX19SRUcoMHgwMDIwNjAzMCkgIC8qIFVBUlQgMSBSZWNlaXZlciBSZWdpc3RlciAxMgkqLwotI2RlZmluZSBNWDFfVVJYMTNEXzEJX19SRUcoMHgwMDIwNjAzNCkgIC8qIFVBUlQgMSBSZWNlaXZlciBSZWdpc3RlciAxMwkqLwotI2RlZmluZSBNWDFfVVJYMTREXzEJX19SRUcoMHgwMDIwNjAzOCkgIC8qIFVBUlQgMSBSZWNlaXZlciBSZWdpc3RlciAxNAkqLwotI2RlZmluZSBNWDFfVVJYMTVEXzEJX19SRUcoMHgwMDIwNjAzYykgIC8qIFVBUlQgMSBSZWNlaXZlciBSZWdpc3RlciAxNQkqLwotCi0jZGVmaW5lIE1YMV9VVFgwRF8xCV9fUkVHKDB4MDAyMDYwNDApICAvKiBVQVJUIDEgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgMAkqLwotI2RlZmluZSBNWDFfVVRYMURfMQlfX1JFRygweDAwMjA2MDQ0KSAgLyogVUFSVCAxIFRyYW5zbWl0dGVyIFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgTVgxX1VUWDJEXzEJX19SRUcoMHgwMDIwNjA0OCkgIC8qIFVBUlQgMSBUcmFuc21pdHRlciBSZWdpc3RlciAyCSovCi0jZGVmaW5lIE1YMV9VVFgzRF8xCV9fUkVHKDB4MDAyMDYwNEMpICAvKiBVQVJUIDEgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgMwkqLwotI2RlZmluZSBNWDFfVVRYNERfMQlfX1JFRygweDAwMjA2MDUwKSAgLyogVUFSVCAxIFRyYW5zbWl0dGVyIFJlZ2lzdGVyIDQJKi8KLSNkZWZpbmUgTVgxX1VUWDVEXzEJX19SRUcoMHgwMDIwNjA1NCkgIC8qIFVBUlQgMSBUcmFuc21pdHRlciBSZWdpc3RlciA1CSovCi0jZGVmaW5lIE1YMV9VVFg2RF8xCV9fUkVHKDB4MDAyMDYwNTgpICAvKiBVQVJUIDEgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgNgkqLwotI2RlZmluZSBNWDFfVVRYN0RfMQlfX1JFRygweDAwMjA2MDVDKSAgLyogVUFSVCAxIFRyYW5zbWl0dGVyIFJlZ2lzdGVyIDcJKi8KLSNkZWZpbmUgTVgxX1VUWDhEXzEJX19SRUcoMHgwMDIwNjA2MCkgIC8qIFVBUlQgMSBUcmFuc21pdHRlciBSZWdpc3RlciA4CSovCi0jZGVmaW5lIE1YMV9VVFg5RF8xCV9fUkVHKDB4MDAyMDYwNjQpICAvKiBVQVJUIDEgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgOQkqLwotI2RlZmluZSBNWDFfVVRYMTBEXzEJX19SRUcoMHgwMDIwNjA2OCkgIC8qIFVBUlQgMSBUcmFuc21pdHRlciBSZWdpc3RlciAxMAkqLwotI2RlZmluZSBNWDFfVVRYMTFEXzEJX19SRUcoMHgwMDIwNjA2QykgIC8qIFVBUlQgMSBUcmFuc21pdHRlciBSZWdpc3RlciAxMQkqLwotI2RlZmluZSBNWDFfVVRYMTJEXzEJX19SRUcoMHgwMDIwNjA2MCkgIC8qIFVBUlQgMSBUcmFuc21pdHRlciBSZWdpc3RlciAxMgkqLwotI2RlZmluZSBNWDFfVVRYMTNEXzEJX19SRUcoMHgwMDIwNjA3NCkgIC8qIFVBUlQgMSBUcmFuc21pdHRlciBSZWdpc3RlciAxMwkqLwotI2RlZmluZSBNWDFfVVRYMTREXzEJX19SRUcoMHgwMDIwNjA3OCkgIC8qIFVBUlQgMSBUcmFuc21pdHRlciBSZWdpc3RlciAxNAkqLwotI2RlZmluZSBNWDFfVVRYMTVEXzEJX19SRUcoMHgwMDIwNjA3YykgIC8qIFVBUlQgMSBUcmFuc21pdHRlciBSZWdpc3RlciAxNQkqLwotCi0jZGVmaW5lIE1YMV9VQ1IxXzEJX19SRUcoMHgwMDIwNjA4MCkgIC8qIFVBUlQgMSBDb250cm9sIFJlZ2lzdGVyIDEJCSovCi0jZGVmaW5lIE1YMV9VQ1IyXzEJX19SRUcoMHgwMDIwNjA4NCkgIC8qIFVBUlQgMSBDb250cm9sIFJlZ2lzdGVyIDIJCSovCi0jZGVmaW5lIE1YMV9VQ1IzXzEJX19SRUcoMHgwMDIwNjA4OCkgIC8qIFVBUlQgMSBDb250cm9sIFJlZ2lzdGVyIDMJCSovCi0jZGVmaW5lIE1YMV9VQ1I0XzEJX19SRUcoMHgwMDIwNjA4QykgIC8qIFVBUlQgMSBDb250cm9sIFJlZ2lzdGVyIDQJCSovCi0jZGVmaW5lIE1YMV9VRkNSXzEJX19SRUcoMHgwMDIwNjA5MCkgIC8qIFVBUlQgMSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTUjFfMQlfX1JFRygweDAwMjA2MDk0KSAgLyogVUFSVCAxIFN0YXR1cyAgUmVnaXN0ZXIgMQkJKi8KLSNkZWZpbmUgTVgxX1VTUjJfMQlfX1JFRygweDAwMjA2MDk4KSAgLyogVUFSVCAxIFN0YXR1cyAgUmVnaXN0ZXIgMgkJKi8KLSNkZWZpbmUgTVgxX1VFU0NfMQlfX1JFRygweDAwMjA2MDlDKSAgLyogVUFSVCAxIEVzY2FwZSBDaGFyYWN0ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VUSU1fMQlfX1JFRygweDAwMjA2MEEwKSAgLyogVUFSVCAxIEVzY2FwZSBUaW1lciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVUJJUl8xCV9fUkVHKDB4MDAyMDYwQTQpICAvKiBVQVJUIDEgQlJNIEluY3JlbWVudGFsIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VQk1SXzEJX19SRUcoMHgwMDIwNjBBOCkgIC8qIFVBUlQgMSBCUk0gTW9kdWxhdG9yIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VQlJDXzEJX19SRUcoMHgwMDIwNjBBQykgIC8qIFVBUlQgMSBCYXVkIFJhdGUgQ291bnQgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0JJUFIxXzEJX19SRUcoMHgwMDIwNjBCMCkgIC8qIFVBUlQgMSBCUk0gSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgTVgxX0JJUFIyXzEJX19SRUcoMHgwMDIwNjBCNCkgIC8qIFVBUlQgMSBCUk0gSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDIJKi8KLSNkZWZpbmUgTVgxX0JJUFIzXzEJX19SRUcoMHgwMDIwNjBCOCkgIC8qIFVBUlQgMSBCUk0gSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDMJKi8KLSNkZWZpbmUgTVgxX0JJUFI0XzEJX19SRUcoMHgwMDIwNjBCQykgIC8qIFVBUlQgMSBCUk0gSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDQJKi8KLSNkZWZpbmUgTVgxX0JNUFIxXzEJX19SRUcoMHgwMDIwNjBDMCkgIC8qIFVBUlQgMSBCUk0gTW9kdWxhdG9yIFByZXNldCBSZWdpc3RlciAxCSovCi0jZGVmaW5lIE1YMV9CTVBSMl8xCV9fUkVHKDB4MDAyMDYwQzQpICAvKiBVQVJUIDEgQlJNIE1vZHVsYXRvciBQcmVzZXQgUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBNWDFfQk1QUjNfMQlfX1JFRygweDAwMjA2MEM4KSAgLyogVUFSVCAxIEJSTSBNb2R1bGF0b3IgUHJlc2V0IFJlZ2lzdGVyIDMJKi8KLSNkZWZpbmUgTVgxX0JNUFI0XzEJX19SRUcoMHgwMDIwNjBDQykgIC8qIFVBUlQgMSBCUk0gTW9kdWxhdG9yIFByZXNldCBSZWdpc3RlciA0CSovCi0jZGVmaW5lIE1YMV9VVFNfMQlfX1JFRygweDAwMjA2MEQwKSAgLyogVUFSVCAxIFRlc3QgUmVnaXN0ZXIgMQkJKi8KLQotLyogVUFSVCAyICovCi0jZGVmaW5lIE1YMV9VUlgwRF8yCV9fUkVHKDB4MDAyMDcwMDApICAvKiBVQVJUIDIgUmVjZWl2ZXIgUmVnaXN0ZXIgMAkqLwotI2RlZmluZSBNWDFfVVJYMURfMglfX1JFRygweDAwMjA3MDA0KSAgLyogVUFSVCAyIFJlY2VpdmVyIFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgTVgxX1VSWDJEXzIJX19SRUcoMHgwMDIwNzAwOCkgIC8qIFVBUlQgMiBSZWNlaXZlciBSZWdpc3RlciAyCSovCi0jZGVmaW5lIE1YMV9VUlgzRF8yCV9fUkVHKDB4MDAyMDcwMEMpICAvKiBVQVJUIDIgUmVjZWl2ZXIgUmVnaXN0ZXIgMwkqLwotI2RlZmluZSBNWDFfVVJYNERfMglfX1JFRygweDAwMjA3MDEwKSAgLyogVUFSVCAyIFJlY2VpdmVyIFJlZ2lzdGVyIDQJKi8KLSNkZWZpbmUgTVgxX1VSWDVEXzIJX19SRUcoMHgwMDIwNzAxNCkgIC8qIFVBUlQgMiBSZWNlaXZlciBSZWdpc3RlciA1CSovCi0jZGVmaW5lIE1YMV9VUlg2RF8yCV9fUkVHKDB4MDAyMDcwMTgpICAvKiBVQVJUIDIgUmVjZWl2ZXIgUmVnaXN0ZXIgNgkqLwotI2RlZmluZSBNWDFfVVJYN0RfMglfX1JFRygweDAwMjA3MDFDKSAgLyogVUFSVCAyIFJlY2VpdmVyIFJlZ2lzdGVyIDcJKi8KLSNkZWZpbmUgTVgxX1VSWDhEXzIJX19SRUcoMHgwMDIwNzAyMCkgIC8qIFVBUlQgMiBSZWNlaXZlciBSZWdpc3RlciA4CSovCi0jZGVmaW5lIE1YMV9VUlg5RF8yCV9fUkVHKDB4MDAyMDcwMjQpICAvKiBVQVJUIDIgUmVjZWl2ZXIgUmVnaXN0ZXIgOQkqLwotI2RlZmluZSBNWDFfVVJYMTBEXzIJX19SRUcoMHgwMDIwNzAyOCkgIC8qIFVBUlQgMiBSZWNlaXZlciBSZWdpc3RlciAxMAkqLwotI2RlZmluZSBNWDFfVVJYMTFEXzIJX19SRUcoMHgwMDIwNzAyQykgIC8qIFVBUlQgMiBSZWNlaXZlciBSZWdpc3RlciAxMQkqLwotI2RlZmluZSBNWDFfVVJYMTJEXzIJX19SRUcoMHgwMDIwNzAzMCkgIC8qIFVBUlQgMiBSZWNlaXZlciBSZWdpc3RlciAxMgkqLwotI2RlZmluZSBNWDFfVVJYMTNEXzIJX19SRUcoMHgwMDIwNzAzNCkgIC8qIFVBUlQgMiBSZWNlaXZlciBSZWdpc3RlciAxMwkqLwotI2RlZmluZSBNWDFfVVJYMTREXzIJX19SRUcoMHgwMDIwNzAzOCkgIC8qIFVBUlQgMiBSZWNlaXZlciBSZWdpc3RlciAxNAkqLwotI2RlZmluZSBNWDFfVVJYMTVEXzIJX19SRUcoMHgwMDIwNzAzYykgIC8qIFVBUlQgMiBSZWNlaXZlciBSZWdpc3RlciAxNQkqLwotCi0jZGVmaW5lIE1YMV9VVFgwRF8yCV9fUkVHKDB4MDAyMDcwNDApICAvKiBVQVJUIDIgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgMAkqLwotI2RlZmluZSBNWDFfVVRYMURfMglfX1JFRygweDAwMjA3MDQ0KSAgLyogVUFSVCAyIFRyYW5zbWl0dGVyIFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgTVgxX1VUWDJEXzIJX19SRUcoMHgwMDIwNzA0OCkgIC8qIFVBUlQgMiBUcmFuc21pdHRlciBSZWdpc3RlciAyCSovCi0jZGVmaW5lIE1YMV9VVFgzRF8yCV9fUkVHKDB4MDAyMDcwNEMpICAvKiBVQVJUIDIgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgMwkqLwotI2RlZmluZSBNWDFfVVRYNERfMglfX1JFRygweDAwMjA3MDUwKSAgLyogVUFSVCAyIFRyYW5zbWl0dGVyIFJlZ2lzdGVyIDQJKi8KLSNkZWZpbmUgTVgxX1VUWDVEXzIJX19SRUcoMHgwMDIwNzA1NCkgIC8qIFVBUlQgMiBUcmFuc21pdHRlciBSZWdpc3RlciA1CSovCi0jZGVmaW5lIE1YMV9VVFg2RF8yCV9fUkVHKDB4MDAyMDcwNTgpICAvKiBVQVJUIDIgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgNgkqLwotI2RlZmluZSBNWDFfVVRYN0RfMglfX1JFRygweDAwMjA3MDVDKSAgLyogVUFSVCAyIFRyYW5zbWl0dGVyIFJlZ2lzdGVyIDcJKi8KLSNkZWZpbmUgTVgxX1VUWDhEXzIJX19SRUcoMHgwMDIwNzA2MCkgIC8qIFVBUlQgMiBUcmFuc21pdHRlciBSZWdpc3RlciA4CSovCi0jZGVmaW5lIE1YMV9VVFg5RF8yCV9fUkVHKDB4MDAyMDcwNjQpICAvKiBVQVJUIDIgVHJhbnNtaXR0ZXIgUmVnaXN0ZXIgOQkqLwotI2RlZmluZSBNWDFfVVRYMTBEXzIJX19SRUcoMHgwMDIwNzA2OCkgIC8qIFVBUlQgMiBUcmFuc21pdHRlciBSZWdpc3RlciAxMAkqLwotI2RlZmluZSBNWDFfVVRYMTFEXzIJX19SRUcoMHgwMDIwNzA2QykgIC8qIFVBUlQgMiBUcmFuc21pdHRlciBSZWdpc3RlciAxMQkqLwotI2RlZmluZSBNWDFfVVRYMTJEXzIJX19SRUcoMHgwMDIwNzA2MCkgIC8qIFVBUlQgMiBUcmFuc21pdHRlciBSZWdpc3RlciAxMgkqLwotI2RlZmluZSBNWDFfVVRYMTNEXzIJX19SRUcoMHgwMDIwNzA3NCkgIC8qIFVBUlQgMiBUcmFuc21pdHRlciBSZWdpc3RlciAxMwkqLwotI2RlZmluZSBNWDFfVVRYMTREXzIJX19SRUcoMHgwMDIwNzA3OCkgIC8qIFVBUlQgMiBUcmFuc21pdHRlciBSZWdpc3RlciAxNAkqLwotI2RlZmluZSBNWDFfVVRYMTVEXzIJX19SRUcoMHgwMDIwNzA3YykgIC8qIFVBUlQgMiBUcmFuc21pdHRlciBSZWdpc3RlciAxNQkqLwotCi0jZGVmaW5lIE1YMV9VQ1IxXzIJX19SRUcoMHgwMDIwNzA4MCkgIC8qIFVBUlQgMiBDb250cm9sIFJlZ2lzdGVyIDEJCSovCi0jZGVmaW5lIE1YMV9VQ1IyXzIJX19SRUcoMHgwMDIwNzA4NCkgIC8qIFVBUlQgMiBDb250cm9sIFJlZ2lzdGVyIDIJCSovCi0jZGVmaW5lIE1YMV9VQ1IzXzIJX19SRUcoMHgwMDIwNzA4OCkgIC8qIFVBUlQgMiBDb250cm9sIFJlZ2lzdGVyIDMJCSovCi0jZGVmaW5lIE1YMV9VQ1I0XzIJX19SRUcoMHgwMDIwNzA4QykgIC8qIFVBUlQgMiBDb250cm9sIFJlZ2lzdGVyIDQJCSovCi0jZGVmaW5lIE1YMV9VRkNSXzIJX19SRUcoMHgwMDIwNzA5MCkgIC8qIFVBUlQgMiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTUjFfMglfX1JFRygweDAwMjA3MDk0KSAgLyogVUFSVCAyIFN0YXR1cyAgUmVnaXN0ZXIgMQkJKi8KLSNkZWZpbmUgTVgxX1VTUjJfMglfX1JFRygweDAwMjA3MDk4KSAgLyogVUFSVCAyIFN0YXR1cyAgUmVnaXN0ZXIgMgkJKi8KLSNkZWZpbmUgTVgxX1VFU0NfMglfX1JFRygweDAwMjA3MDlDKSAgLyogVUFSVCAyIEVzY2FwZSBDaGFyYWN0ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VUSU1fMglfX1JFRygweDAwMjA3MEEwKSAgLyogVUFSVCAyIEVzY2FwZSBUaW1lciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVUJJUl8yCV9fUkVHKDB4MDAyMDcwQTQpICAvKiBVQVJUIDIgQlJNIEluY3JlbWVudGFsIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VQk1SXzIJX19SRUcoMHgwMDIwNzBBOCkgIC8qIFVBUlQgMiBCUk0gTW9kdWxhdG9yIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VQlJDXzIJX19SRUcoMHgwMDIwNzBBQykgIC8qIFVBUlQgMiBCYXVkIFJhdGUgQ291bnQgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0JJUFIxXzIJX19SRUcoMHgwMDIwNzBCMCkgIC8qIFVBUlQgMiBCUk0gSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgTVgxX0JJUFIyXzIJX19SRUcoMHgwMDIwNzBCNCkgIC8qIFVBUlQgMiBCUk0gSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDIJKi8KLSNkZWZpbmUgTVgxX0JJUFIzXzIJX19SRUcoMHgwMDIwNzBCOCkgIC8qIFVBUlQgMiBCUk0gSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDMJKi8KLSNkZWZpbmUgTVgxX0JJUFI0XzIJX19SRUcoMHgwMDIwNzBCQykgIC8qIFVBUlQgMiBCUk0gSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDQJKi8KLSNkZWZpbmUgTVgxX0JNUFIxXzIJX19SRUcoMHgwMDIwNzBDMCkgIC8qIFVBUlQgMiBCUk0gTW9kdWxhdG9yIFByZXNldCBSZWdpc3RlciAxCSovCi0jZGVmaW5lIE1YMV9CTVBSMl8yCV9fUkVHKDB4MDAyMDcwQzQpICAvKiBVQVJUIDIgQlJNIE1vZHVsYXRvciBQcmVzZXQgUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBNWDFfQk1QUjNfMglfX1JFRygweDAwMjA3MEM4KSAgLyogVUFSVCAyIEJSTSBNb2R1bGF0b3IgUHJlc2V0IFJlZ2lzdGVyIDMJKi8KLSNkZWZpbmUgTVgxX0JNUFI0XzIJX19SRUcoMHgwMDIwNzBDQykgIC8qIFVBUlQgMiBCUk0gTW9kdWxhdG9yIFByZXNldCBSZWdpc3RlciA0CSovCi0jZGVmaW5lIE1YMV9VVFNfMglfX1JFRygweDAwMjA3MEQwKSAgLyogVUFSVCAyIFRlc3QgUmVnaXN0ZXIgMQkJKi8KLQotLyoKLSAqCU1YMSBQV00gcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgTVgxX1BXTUMJX19SRUcoMHgwMDIwODAwMCkgIC8qIFBXTSBDb250cm9sIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfUFdNUwlfX1JFRygweDAwMjA4MDA0KSAgLyogUFdNIFNhbXBsZSBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1BXTVAJX19SRUcoMHgwMDIwODAwOCkgIC8qIFBXTSBQZXJpb2QgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9QV01DTlQJX19SRUcoMHgwMDIwODAwQykgIC8qIFBXTSBDb3VudGVyIFJlZ2lzdGVyCQkqLwotCi0vKgotICoJTVgxIERNQUMgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgTVgxX0RDUgkJX19SRUcoMHgwMDIwOTAwMCkgIC8qIERNQSBDb250cm9sIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfRElTUglfX1JFRygweDAwMjA5MDA0KSAgLyogRE1BIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0RJTVIJX19SRUcoMHgwMDIwOTAwOCkgIC8qIERNQSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfREJUT1NSCV9fUkVHKDB4MDAyMDkwMEMpICAvKiBETUEgQnVyc3QgVGltZS1PdXQgU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9EUlRPU1IJX19SRUcoMHgwMDIwOTAxMCkgIC8qIERNQSBSZXF1ZXN0IFRpbWUtT3V0IFN0YXR1cyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfRFNFU1IJX19SRUcoMHgwMDIwOTAxNCkgIC8qIERNQSBSZXF1ZXN0IFRpbWUtT3V0IFN0YXR1cyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfREJPU1IJX19SRUcoMHgwMDIwOTAxOCkgIC8qIERNQSBCdWZmZXIgT3ZlcmZsb3cgU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9EQlRPQ1IJX19SRUcoMHgwMDIwOTAxQykgIC8qIERNQSBCdXJzdCBUaW1lLU91dCBDb250cm9sIFJlZ2lzdGVyCSovCi0KLSNkZWZpbmUgTVgxX1dTUkEJX19SRUcoMHgwMDIwOTA0MCkgIC8qIERNQSBXLVNpemUgUmVnaXN0ZXIgQQkJKi8KLSNkZWZpbmUgTVgxX1hTUkEJX19SRUcoMHgwMDIwOTA0NCkgIC8qIERNQSBYLVNpemUgUmVnaXN0ZXIgQQkJKi8KLSNkZWZpbmUgTVgxX1lTUkEJX19SRUcoMHgwMDIwOTA0OCkgIC8qIERNQSBZLVNpemUgUmVnaXN0ZXIgQQkJKi8KLQotI2RlZmluZSBNWDFfV1NSQglfX1JFRygweDAwMjA5MDRDKSAgLyogRE1BIFctU2l6ZSBSZWdpc3RlciBCCQkqLwotI2RlZmluZSBNWDFfWFNSQglfX1JFRygweDAwMjA5MDUwKSAgLyogRE1BIFgtU2l6ZSBSZWdpc3RlciBCCQkqLwotI2RlZmluZSBNWDFfWVNSQglfX1JFRygweDAwMjA5MDU0KSAgLyogRE1BIFktU2l6ZSBSZWdpc3RlciBCCQkqLwotCi0vKiBDaGFubmVsIDAgKi8KLQotI2RlZmluZSBNWDFfU0FSMAlfX1JFRygweDAwMjA5MDgwKSAgLyogQ2hhbm5lbCAwIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVIwCV9fUkVHKDB4MDAyMDkwODQpICAvKiBDaGFubmVsIDAgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjAJX19SRUcoMHgwMDIwOTA4OCkgIC8qIENoYW5uZWwgMCBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjAJX19SRUcoMHgwMDIwOTA4QykgIC8qIENoYW5uZWwgMCBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSMAlfX1JFRygweDAwMjA5MDkwKSAgLyogQ2hhbm5lbCAwIFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSMAlfX1JFRygweDAwMjA5MDk0KSAgLyogQ2hhbm5lbCAwIEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1IwCV9fUkVHKDB4MDAyMDkwOTgpICAvKiBDaGFubmVsIDAgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjAJX19SRUcoMHgwMDIwOTA5OCkgIC8qIENoYW5uZWwgMCBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDEgKi8KLQotI2RlZmluZSBNWDFfU0FSMQlfX1JFRygweDAwMjA5MEMwKSAgLyogQ2hhbm5lbCAxIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVIxCV9fUkVHKDB4MDAyMDkwQzQpICAvKiBDaGFubmVsIDEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjEJX19SRUcoMHgwMDIwOTBDOCkgIC8qIENoYW5uZWwgMSBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjEJX19SRUcoMHgwMDIwOTBDQykgIC8qIENoYW5uZWwgMSBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSMQlfX1JFRygweDAwMjA5MEQwKSAgLyogQ2hhbm5lbCAxIFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSMQlfX1JFRygweDAwMjA5MEQ0KSAgLyogQ2hhbm5lbCAxIEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1IxCV9fUkVHKDB4MDAyMDkwRDgpICAvKiBDaGFubmVsIDEgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjEJX19SRUcoMHgwMDIwOTBEOCkgIC8qIENoYW5uZWwgMSBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDIgKi8KLQotI2RlZmluZSBNWDFfU0FSMglfX1JFRygweDAwMjA5MTAwKSAgLyogQ2hhbm5lbCAyIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVIyCV9fUkVHKDB4MDAyMDkxMDQpICAvKiBDaGFubmVsIDIgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjIJX19SRUcoMHgwMDIwOTEwOCkgIC8qIENoYW5uZWwgMiBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjIJX19SRUcoMHgwMDIwOTEwQykgIC8qIENoYW5uZWwgMiBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSMglfX1JFRygweDAwMjA5MTEwKSAgLyogQ2hhbm5lbCAyIFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSMglfX1JFRygweDAwMjA5MTE0KSAgLyogQ2hhbm5lbCAyIEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1IyCV9fUkVHKDB4MDAyMDkxMTgpICAvKiBDaGFubmVsIDIgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjIJX19SRUcoMHgwMDIwOTExOCkgIC8qIENoYW5uZWwgMiBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDMgKi8KLQotI2RlZmluZSBNWDFfU0FSMwlfX1JFRygweDAwMjA5MTQwKSAgLyogQ2hhbm5lbCAzIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVIzCV9fUkVHKDB4MDAyMDkxNDQpICAvKiBDaGFubmVsIDMgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjMJX19SRUcoMHgwMDIwOTE0OCkgIC8qIENoYW5uZWwgMyBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjMJX19SRUcoMHgwMDIwOTE0QykgIC8qIENoYW5uZWwgMyBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSMwlfX1JFRygweDAwMjA5MTUwKSAgLyogQ2hhbm5lbCAzIFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSMwlfX1JFRygweDAwMjA5MTU0KSAgLyogQ2hhbm5lbCAzIEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1IzCV9fUkVHKDB4MDAyMDkxNTgpICAvKiBDaGFubmVsIDMgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjMJX19SRUcoMHgwMDIwOTE1OCkgIC8qIENoYW5uZWwgMyBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDQgKi8KLQotI2RlZmluZSBNWDFfU0FSNAlfX1JFRygweDAwMjA5MTgwKSAgLyogQ2hhbm5lbCA0IFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVI0CV9fUkVHKDB4MDAyMDkxODQpICAvKiBDaGFubmVsIDQgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjQJX19SRUcoMHgwMDIwOTE4OCkgIC8qIENoYW5uZWwgNCBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjQJX19SRUcoMHgwMDIwOTE4QykgIC8qIENoYW5uZWwgNCBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSNAlfX1JFRygweDAwMjA5MTkwKSAgLyogQ2hhbm5lbCA0IFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSNAlfX1JFRygweDAwMjA5MTk0KSAgLyogQ2hhbm5lbCA0IEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1I0CV9fUkVHKDB4MDAyMDkxOTgpICAvKiBDaGFubmVsIDQgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjQJX19SRUcoMHgwMDIwOTE5OCkgIC8qIENoYW5uZWwgNCBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDUgKi8KLQotI2RlZmluZSBNWDFfU0FSNQlfX1JFRygweDAwMjA5MUMwKSAgLyogQ2hhbm5lbCA1IFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVI1CV9fUkVHKDB4MDAyMDkxQzQpICAvKiBDaGFubmVsIDUgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjUJX19SRUcoMHgwMDIwOTFDOCkgIC8qIENoYW5uZWwgNSBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjUJX19SRUcoMHgwMDIwOTFDQykgIC8qIENoYW5uZWwgNSBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSNQlfX1JFRygweDAwMjA5MUQwKSAgLyogQ2hhbm5lbCA1IFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSNQlfX1JFRygweDAwMjA5MUQ0KSAgLyogQ2hhbm5lbCA1IEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1I1CV9fUkVHKDB4MDAyMDkxRDgpICAvKiBDaGFubmVsIDUgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjUJX19SRUcoMHgwMDIwOTFEOCkgIC8qIENoYW5uZWwgNSBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDYgKi8KLQotI2RlZmluZSBNWDFfU0FSNglfX1JFRygweDAwMjA5MjAwKSAgLyogQ2hhbm5lbCA2IFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVI2CV9fUkVHKDB4MDAyMDkyMDQpICAvKiBDaGFubmVsIDYgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjYJX19SRUcoMHgwMDIwOTIwOCkgIC8qIENoYW5uZWwgNiBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjYJX19SRUcoMHgwMDIwOTIwQykgIC8qIENoYW5uZWwgNiBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSNglfX1JFRygweDAwMjA5MjEwKSAgLyogQ2hhbm5lbCA2IFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSNglfX1JFRygweDAwMjA5MjE0KSAgLyogQ2hhbm5lbCA2IEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1I2CV9fUkVHKDB4MDAyMDkyMTgpICAvKiBDaGFubmVsIDYgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjYJX19SRUcoMHgwMDIwOTIxOCkgIC8qIENoYW5uZWwgNiBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDcgKi8KLQotI2RlZmluZSBNWDFfU0FSNwlfX1JFRygweDAwMjA5MjQwKSAgLyogQ2hhbm5lbCA3IFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVI3CV9fUkVHKDB4MDAyMDkyNDQpICAvKiBDaGFubmVsIDcgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjcJX19SRUcoMHgwMDIwOTI0OCkgIC8qIENoYW5uZWwgNyBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjcJX19SRUcoMHgwMDIwOTI0QykgIC8qIENoYW5uZWwgNyBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSNwlfX1JFRygweDAwMjA5MjUwKSAgLyogQ2hhbm5lbCA3IFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSNwlfX1JFRygweDAwMjA5MjU0KSAgLyogQ2hhbm5lbCA3IEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1I3CV9fUkVHKDB4MDAyMDkyNTgpICAvKiBDaGFubmVsIDcgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjcJX19SRUcoMHgwMDIwOTI1OCkgIC8qIENoYW5uZWwgNyBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDggKi8KLQotI2RlZmluZSBNWDFfU0FSOAlfX1JFRygweDAwMjA5MjgwKSAgLyogQ2hhbm5lbCA4IFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVI4CV9fUkVHKDB4MDAyMDkyODQpICAvKiBDaGFubmVsIDggRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjgJX19SRUcoMHgwMDIwOTI4OCkgIC8qIENoYW5uZWwgOCBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjgJX19SRUcoMHgwMDIwOTI4QykgIC8qIENoYW5uZWwgOCBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSOAlfX1JFRygweDAwMjA5MjkwKSAgLyogQ2hhbm5lbCA4IFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSOAlfX1JFRygweDAwMjA5Mjk0KSAgLyogQ2hhbm5lbCA4IEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1I4CV9fUkVHKDB4MDAyMDkyOTgpICAvKiBDaGFubmVsIDggUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjgJX19SRUcoMHgwMDIwOTI5OCkgIC8qIENoYW5uZWwgOCBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDkgKi8KLQotI2RlZmluZSBNWDFfU0FSOQlfX1JFRygweDAwMjA5MkMwKSAgLyogQ2hhbm5lbCA5IFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVI5CV9fUkVHKDB4MDAyMDkyQzQpICAvKiBDaGFubmVsIDkgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ05UUjkJX19SRUcoMHgwMDIwOTJDOCkgIC8qIENoYW5uZWwgOSBDb3VudCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NDUjkJX19SRUcoMHgwMDIwOTJDQykgIC8qIENoYW5uZWwgOSBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SU1NSOQlfX1JFRygweDAwMjA5MkQwKSAgLyogQ2hhbm5lbCA5IFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQkxSOQlfX1JFRygweDAwMjA5MkQ0KSAgLyogQ2hhbm5lbCA5IEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1JUT1I5CV9fUkVHKDB4MDAyMDkyRDgpICAvKiBDaGFubmVsIDkgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjkJX19SRUcoMHgwMDIwOTJEOCkgIC8qIENoYW5uZWwgOSBCdXMgVXRpbGl6YXRpb24gQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKiBDaGFubmVsIDEwICovCi0KLSNkZWZpbmUgTVgxX1NBUjEwCV9fUkVHKDB4MDAyMDkzMDApICAvKiBDaGFubmVsIDEwIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9EQVIxMAlfX1JFRygweDAwMjA5MzA0KSAgLyogQ2hhbm5lbCAxMCBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9DTlRSMTAJX19SRUcoMHgwMDIwOTMwOCkgIC8qIENoYW5uZWwgMTAgQ291bnQgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBNWDFfQ0NSMTAJX19SRUcoMHgwMDIwOTMwQykgIC8qIENoYW5uZWwgMTAgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfUlNTUjEwCV9fUkVHKDB4MDAyMDkzMTApICAvKiBDaGFubmVsIDEwIFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0JMUjEwCV9fUkVHKDB4MDAyMDkzMTQpICAvKiBDaGFubmVsIDEwIEJ1cnN0IExlbmd0aCAgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9SVE9SMTAJX19SRUcoMHgwMDIwOTMxOCkgIC8qIENoYW5uZWwgMTAgUmVxdWVzdCBUaW1lLU91dCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQlVDUjEwCV9fUkVHKDB4MDAyMDkzMTgpICAvKiBDaGFubmVsIDEwIEJ1cyBVdGlsaXphdGlvbiBDb250cm9sIFJlZ2lzdGVyCSovCi0KLSNkZWZpbmUgTVgxX1RDUgkJX19SRUcoMHgwMDIwOTM0MCkgIC8qIFRlc3QgQ29udHJvbCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1RGSUZPQVIJX19SRUcoMHgwMDIwOTM0NCkgIC8qIFRlc3QgRklGTyBBICBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1REUlIJX19SRUcoMHgwMDIwOTM0OCkgIC8qIFRlc3QgRE1BIFJlcXVlc3QgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9URElQUglfX1JFRygweDAwMjA5MzRDKSAgLyogVGVzdCBETUEgSW4gUHJvZ3Jlc3MgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1RGSUZPQlIJX19SRUcoMHgwMDIwOTM1MCkgIC8qIFRlc3QgRklGTyBCIFJlZ2lzdGVyCQkqLwotCi0vKgotICoJTVgxIFNJTSByZWdpc3RlcnMKLSAqLwotCi0jZGVmaW5lIE1YMV9QT1JUX0NOVEwJX19SRUcoMHgwMDIxMTAwMCkgIC8qIFBvcnQgQ29udHJvbCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NOVEwJX19SRUcoMHgwMDIxMTAwNCkgIC8qIENvbnRyb2wgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBNWDFfUkNWX1RIUkVTSE9MRCBfX1JFRygweDAwMjExMDA4KS8qIFJlY2VpdmUgVGhyZXNob2xkCSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfRU5BQkxFCV9fUkVHKDB4MDAyMTEwMEMpICAvKiBUcmFuc21pdC9SZWNlaXZlIEVuYWJsZSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfWE1UX1NUQVRVUwlfX1JFRygweDAwMjExMDEwKSAgLyogVHJhbnNtaXQgU3RhdHVzICBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1JDVl9TVEFUVVMJX19SRUcoMHgwMDIxMTAxNCkgIC8qIFJlY2VpdmUgU3RhdHVzICBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1NJTV9JTlRfTUFTSwlfX1JFRygweDAwMjExMDE4KSAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9YTVRfQlVGCV9fUkVHKDB4MDAyMTEwMUMpICAvKiBQb3J0IFRyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfUkNWX0JVRglfX1JFRygweDAwMjExMDIwKSAgLyogUmVjZWl2ZSBCdWZmZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9QT1JUX0RFVEVDVCBfX1JFRygweDAwMjExMDI0KSAgLyogRGV0ZWN0IFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgTVgxX1hNVF9USFJFU0hPTEQgX19SRUcoMHgwMDIxMTAyOCkvKiBUcmFuc21pdCBUaHJlc2hvbGQgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0dVQVJEX0NOVEwJX19SRUcoMHgwMDIxMTAyQykgIC8qIFRyYW5zbWl0IEd1YXJkIENvbnRyb2wgIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9PRF9DT05GSUcJX19SRUcoMHgwMDIxMTAzMCkgIC8qIE9wZW4tRHJhaW4gQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9SRVNFVF9DTlRMCV9fUkVHKDB4MDAyMTEwMzQpICAvKiBSZXNldCAgQ29udHJvbCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NIQVJfV0FJVAlfX1JFRygweDAwMjExMDM4KSAgLyogQ2hhcmFjdG9yIFdhaXQgVGltZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0dQQ05UCV9fUkVHKDB4MDAyMTEwM0MpICAvKiBHZW5lcmFsIFB1cnBvc2UgQ291bnRlciAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0RJVklTT1IJX19SRUcoMHgwMDIxMTA0MCkgIC8qIERpdmlzb3IgUmVnaXN0ZXIJCQkqLwotCi0vKgotICoJTVgxIFVTQkQgcmVnaXN0ZXJzCi0gKi8KLQotI2RlZmluZSBNWDFfVVNCX0ZSQU1FCV9fUkVHKDB4MDAyMTIwMDApICAvKiBVU0IgRnJhbWUgTnVtYmVyIGFuZCBNYXRjaCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX1NQRUMJX19SRUcoMHgwMDIxMjAwNCkgIC8qIFVTQiBTcGVjICYgUmVsZWFzZSBOdW1iZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9TVEFUCV9fUkVHKDB4MDAyMTIwMDgpICAvKiBVU0IgU3RhdHVzIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfVVNCX0NUUkwJX19SRUcoMHgwMDIxMjAwQykgIC8qIFVTQiBDb250cm9sIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfVVNCX0RBRFIJX19SRUcoMHgwMDIxMjAxMCkgIC8qIFVTQiBEZXNjcmlwdG9yIFJBTSBBZGRyZXNzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRERBVAlfX1JFRygweDAwMjEyMDE0KSAgLyogVVNCIERlc2NyaXB0b3IgUkFNL0VuZHBvaW50IGJ1ZmZlciBEYXRhICBSZWdpc3RlciAqLwotI2RlZmluZSBNWDFfVVNCX0lOVFIJX19SRUcoMHgwMDIxMjAxOCkgIC8qIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfTUFTSwlfX1JFRygweDAwMjEyMDFDKSAgLyogVVNCIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRU5BQglfX1JFRygweDAwMjEyMDI0KSAgLyogVVNCIEVuYWJsZSBSZWdpc3RlcgkJKi8KLQotLyogRW5kcG9pbnQgMCAgKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDBfU1RBVCBfX1JFRygweDAwMjEyMDMwKSAvKiBFbmRwb2ludCAwIFN0YXR1cy9Db250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAwX0lOVFIgX19SRUcoMHgwMDIxMjAzNCkgLyogRW5kcG9pbnQgMCBJbnRlcnJ1cHQgU3RhdHVzICBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQMF9NQVNLIF9fUkVHKDB4MDAyMTIwMzgpIC8qIEVuZHBvaW50IDAgSW50ZXJydXB0IE1hc2sJIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAwX0ZEQVQgX19SRUcoMHgwMDIxMjAzQykgLyogRW5kcG9pbnQgMCBGSUZPIERhdGEgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDBfRlNUQVQgX19SRUcoMHgwMDIxMjA0MCkgLyogRW5kcG9pbnQgMCBGSUZPIFN0YXR1cyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQMF9GQ1RSTCBfX1JFRygweDAwMjEyMDQ0KSAvKiBFbmRwb2ludCAwIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBNWDFfVVNCX0VQMF9MUkZQIF9fUkVHKDB4MDAyMTIwNDgpIC8qIEVuZHBvaW50IDAgTGFzdCBSZWFkIEZyYW1lIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDBfTFdGUCBfX1JFRygweDAwMjEyMDRDKSAvKiBFbmRwb2ludCAwIExhc3QgV3JpdGUgRnJhbWUgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQMF9GQUxSTSBfX1JFRygweDAwMjEyMDUwKSAvKiBFbmRwb2ludCAwIEZJRk8gQWxhcm0gIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAwX0ZSRFAgX19SRUcoMHgwMDIxMjA1NCkgLyogRW5kcG9pbnQgMCBGSUZPIFJlYWQgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQMF9GV1JQIF9fUkVHKDB4MDAyMTIwNTgpIC8qIEVuZHBvaW50IDAgRklGTyBXcml0ZSBQb2ludGVyIFJlZ2lzdGVyCSovCi0KLS8qIEVuZHBvaW50IDEgICovCi0jZGVmaW5lIE1YMV9VU0JfRVAxX1NUQVQgX19SRUcoMHgwMDIxMjA2MCkgLyogRW5kcG9pbnQgMSBTdGF0dXMvQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQMV9JTlRSIF9fUkVHKDB4MDAyMTIwNjQpIC8qIEVuZHBvaW50IDEgSW50ZXJydXB0IFN0YXR1cyAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDFfTUFTSyBfX1JFRygweDAwMjEyMDY4KSAvKiBFbmRwb2ludCAxIEludGVycnVwdCBNYXNrCSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQMV9GREFUIF9fUkVHKDB4MDAyMTIwNkMpIC8qIEVuZHBvaW50IDEgRklGTyBEYXRhIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAxX0ZTVEFUIF9fUkVHKDB4MDAyMTIwNzApIC8qIEVuZHBvaW50IDEgRklGTyBTdGF0dXMgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDFfRkNUUkwgX19SRUcoMHgwMDIxMjA3NCkgLyogRW5kcG9pbnQgMSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDFfTFJGUCBfX1JFRygweDAwMjEyMDc4KSAvKiBFbmRwb2ludCAxIExhc3QgUmVhZCBGcmFtZSBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAxX0xXRlAgX19SRUcoMHgwMDIxMjA3QykgLyogRW5kcG9pbnQgMSBMYXN0IFdyaXRlIEZyYW1lIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDFfRkFMUk0gX19SRUcoMHgwMDIxMjA4MCkgLyogRW5kcG9pbnQgMSBGSUZPIEFsYXJtICBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQMV9GUkRQIF9fUkVHKDB4MDAyMTIwODQpIC8qIEVuZHBvaW50IDEgRklGTyBSZWFkIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDFfRldSUCBfX1JFRygweDAwMjEyMDg4KSAvKiBFbmRwb2ludCAxIEZJRk8gV3JpdGUgUG9pbnRlciBSZWdpc3RlcgkqLwotCi0vKiBFbmRwb2ludCAyICAqLwotI2RlZmluZSBNWDFfVVNCX0VQMl9TVEFUIF9fUkVHKDB4MDAyMTIwOTApIC8qIEVuZHBvaW50IDIgU3RhdHVzL0NvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDJfSU5UUiBfX1JFRygweDAwMjEyMDk0KSAvKiBFbmRwb2ludCAyIEludGVycnVwdCBTdGF0dXMgIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAyX01BU0sgX19SRUcoMHgwMDIxMjA5OCkgLyogRW5kcG9pbnQgMiBJbnRlcnJ1cHQgTWFzawkgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDJfRkRBVCBfX1JFRygweDAwMjEyMDlDKSAvKiBFbmRwb2ludCAyIEZJRk8gRGF0YSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQMl9GU1RBVCBfX1JFRygweDAwMjEyMEEwKSAvKiBFbmRwb2ludCAyIEZJRk8gU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAyX0ZDVFJMIF9fUkVHKDB4MDAyMTIwQTQpIC8qIEVuZHBvaW50IDIgRklGTyBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9VU0JfRVAyX0xSRlAgX19SRUcoMHgwMDIxMjBBOCkgLyogRW5kcG9pbnQgMiBMYXN0IFJlYWQgRnJhbWUgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQMl9MV0ZQIF9fUkVHKDB4MDAyMTIwQUMpIC8qIEVuZHBvaW50IDIgTGFzdCBXcml0ZSBGcmFtZSBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAyX0ZBTFJNIF9fUkVHKDB4MDAyMTIwQjApIC8qIEVuZHBvaW50IDIgRklGTyBBbGFybSAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDJfRlJEUCBfX1JFRygweDAwMjEyMEI0KSAvKiBFbmRwb2ludCAyIEZJRk8gUmVhZCBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAyX0ZXUlAgX19SRUcoMHgwMDIxMjBCOCkgLyogRW5kcG9pbnQgMiBGSUZPIFdyaXRlIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLQotLyogRW5kcG9pbnQgMyAgKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDNfU1RBVCBfX1JFRygweDAwMjEyMEMwKSAvKiBFbmRwb2ludCAzIFN0YXR1cy9Db250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAzX0lOVFIgX19SRUcoMHgwMDIxMjBDNCkgLyogRW5kcG9pbnQgMyBJbnRlcnJ1cHQgU3RhdHVzICBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQM19NQVNLIF9fUkVHKDB4MDAyMTIwQzgpIC8qIEVuZHBvaW50IDMgSW50ZXJydXB0IE1hc2sJIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAzX0ZEQVQgX19SRUcoMHgwMDIxMjBDQykgLyogRW5kcG9pbnQgMyBGSUZPIERhdGEgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDNfRlNUQVQgX19SRUcoMHgwMDIxMjBEMCkgLyogRW5kcG9pbnQgMyBGSUZPIFN0YXR1cyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQM19GQ1RSTCBfX1JFRygweDAwMjEyMEQ0KSAvKiBFbmRwb2ludCAzIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBNWDFfVVNCX0VQM19MUkZQIF9fUkVHKDB4MDAyMTIwRDgpIC8qIEVuZHBvaW50IDMgTGFzdCBSZWFkIEZyYW1lIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDNfTFdGUCBfX1JFRygweDAwMjEyMERDKSAvKiBFbmRwb2ludCAzIExhc3QgV3JpdGUgRnJhbWUgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQM19GQUxSTSBfX1JFRygweDAwMjEyMEUwKSAvKiBFbmRwb2ludCAzIEZJRk8gQWxhcm0gIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVAzX0ZSRFAgX19SRUcoMHgwMDIxMjBFNCkgLyogRW5kcG9pbnQgMyBGSUZPIFJlYWQgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQM19GV1JQIF9fUkVHKDB4MDAyMTIwRTgpIC8qIEVuZHBvaW50IDMgRklGTyBXcml0ZSBQb2ludGVyIFJlZ2lzdGVyCSovCi0KLS8qIEVuZHBvaW50IDQgICovCi0jZGVmaW5lIE1YMV9VU0JfRVA0X1NUQVQgX19SRUcoMHgwMDIxMjBGMCkgLyogRW5kcG9pbnQgNCBTdGF0dXMvQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQNF9JTlRSIF9fUkVHKDB4MDAyMTIwRjQpIC8qIEVuZHBvaW50IDQgSW50ZXJydXB0IFN0YXR1cyAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDRfTUFTSyBfX1JFRygweDAwMjEyMEY4KSAvKiBFbmRwb2ludCA0IEludGVycnVwdCBNYXNrCSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQNF9GREFUIF9fUkVHKDB4MDAyMTIwRkMpIC8qIEVuZHBvaW50IDQgRklGTyBEYXRhIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVA0X0ZTVEFUIF9fUkVHKDB4MDAyMTIxMDApIC8qIEVuZHBvaW50IDQgRklGTyBTdGF0dXMgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDRfRkNUUkwgX19SRUcoMHgwMDIxMjEwNCkgLyogRW5kcG9pbnQgNCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDRfTFJGUCBfX1JFRygweDAwMjEyMTA4KSAvKiBFbmRwb2ludCA0IExhc3QgUmVhZCBGcmFtZSBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVA0X0xXRlAgX19SRUcoMHgwMDIxMjEwQykgLyogRW5kcG9pbnQgNCBMYXN0IFdyaXRlIEZyYW1lIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDRfRkFMUk0gX19SRUcoMHgwMDIxMjExMCkgLyogRW5kcG9pbnQgNCBGSUZPIEFsYXJtICBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQNF9GUkRQIF9fUkVHKDB4MDAyMTIxMTQpIC8qIEVuZHBvaW50IDQgRklGTyBSZWFkIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDRfRldSUCBfX1JFRygweDAwMjEyMTE4KSAvKiBFbmRwb2ludCA0IEZJRk8gV3JpdGUgUG9pbnRlciBSZWdpc3RlcgkqLwotCi0vKiBFbmRwb2ludCA1ICAqLwotI2RlZmluZSBNWDFfVVNCX0VQNV9TVEFUIF9fUkVHKDB4MDAyMTIxMjApIC8qIEVuZHBvaW50IDUgU3RhdHVzL0NvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDVfSU5UUiBfX1JFRygweDAwMjEyMTI0KSAvKiBFbmRwb2ludCA1IEludGVycnVwdCBTdGF0dXMgIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVA1X01BU0sgX19SRUcoMHgwMDIxMjEyOCkgLyogRW5kcG9pbnQgNSBJbnRlcnJ1cHQgTWFzawkgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDVfRkRBVCBfX1JFRygweDAwMjEyMTJDKSAvKiBFbmRwb2ludCA1IEZJRk8gRGF0YSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQNV9GU1RBVCBfX1JFRygweDAwMjEyMTMwKSAvKiBFbmRwb2ludCA1IEZJRk8gU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVA1X0ZDVFJMIF9fUkVHKDB4MDAyMTIxMzQpIC8qIEVuZHBvaW50IDUgRklGTyBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9VU0JfRVA1X0xSRlAgX19SRUcoMHgwMDIxMjEzOCkgLyogRW5kcG9pbnQgNSBMYXN0IFJlYWQgRnJhbWUgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVVNCX0VQNV9MV0ZQIF9fUkVHKDB4MDAyMTIxM0MpIC8qIEVuZHBvaW50IDUgTGFzdCBXcml0ZSBGcmFtZSBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVA1X0ZBTFJNIF9fUkVHKDB4MDAyMTIxNDApIC8qIEVuZHBvaW50IDUgRklGTyBBbGFybSAgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1VTQl9FUDVfRlJEUCBfX1JFRygweDAwMjEyMTQ0KSAvKiBFbmRwb2ludCA1IEZJRk8gUmVhZCBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9VU0JfRVA1X0ZXUlAgX19SRUcoMHgwMDIxMjE0OCkgLyogRW5kcG9pbnQgNSBGSUZPIFdyaXRlIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLQotLyoKLSAqCU1YMSBTUEkgMSByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBNWDFfUlhEQVRBUkVHMQlfX1JFRygweDAwMjEzMDAwKSAgLyogU1BJIDEgUnggRGF0YSBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1RYREFUQVJFRzEJX19SRUcoMHgwMDIxMzAwNCkgIC8qIFNQSSAxIFR4IERhdGEgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9DT05UUk9MUkVHMSBfX1JFRygweDAwMjEzMDA4KSAgLyogU1BJIDEgQ29udHJvbCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0lOVFJFRzEJX19SRUcoMHgwMDIxMzAwQykgIC8qIFNQSSAxIEludGVycnVwdCBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfVEVTVFJFRzEJX19SRUcoMHgwMDIxMzAxMCkgIC8qIFNQSSAxIFRlc3QgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9QRVJJT0RSRUcxCV9fUkVHKDB4MDAyMTMwMTQpICAvKiBTUEkgMSBTYW1wbGUgUGVyaW9kIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0RNQVJFRzEJX19SRUcoMHgwMDIxMzAxOCkgIC8qIFNQSSAxIERNQSBDb250cm9sCSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfUkVTRVRSRUcxCV9fUkVHKDB4MDAyMTMwMTgpICAvKiBTUEkgMSBTb2Z0IFJlc2V0IFJlZ2lzdGVyCQkqLwotCi0vKgotICoJTVgxIE1NQy9TREhDIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIE1YMV9TVFJfU1RQX0NMSyBfX1JFRygweDAwMjE0MDAwKSAgLyogTU1DL1NEIENsb2NrIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1NUQVRVUwlfX1JFRygweDAwMjE0MDA0KSAgLyogTU1DL1NEIFN0YXR1cyBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NMS19SQVRFCV9fUkVHKDB4MDAyMTQwMDgpICAvKiBNTUMvU0QgQ2xvY2sgUmF0ZSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ01EX0RBVF9DT05UIF9fUkVHKDB4MDAyMTQwMEMpICAvKiBNTUMvU0QgQ29tbWFuZCAmIERhdGEgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfUkVTX1RPCV9fUkVHKDB4MDAyMTQwMTApICAvKiBNTUMvU0QgUmVzcG9uc2UgVGltZSBPdXQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX1JFQURfVE8JX19SRUcoMHgwMDIxNDAxNCkgIC8qIE1NQy9TRCBSZWFkIFRpbWUgT3V0IFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9CTEtfTEVOCV9fUkVHKDB4MDAyMTQwMTgpICAvKiBNTUMvU0QgQmxvY2sgTGVuZ3RoIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9OT0IJCV9fUkVHKDB4MDAyMTQwMUMpICAvKiBNTUMvU0QgTnVtYmVyIG9mIEJsb2NrIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SRVZfTk8JX19SRUcoMHgwMDIxNDAyMCkgIC8qIE1NQy9TRCBSZXZpc2lvbiBOdW1iZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01NQ19JTlRfTUFTSwlfX1JFRygweDAwMjE0MDI0KSAgLyogTU1DL1NEIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9DTUQJCV9fUkVHKDB4MDAyMTQwMjgpICAvKiBNTUMvU0QgQ29tbWFuZCBOdW1iZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0FSR0gJX19SRUcoMHgwMDIxNDAyQykgIC8qIE1NQy9TRCBIaWdoZXIgQXJndW1lbnQgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0FSR0wJX19SRUcoMHgwMDIxNDAzMCkgIC8qIE1NQy9TRCBMb3dlciBBcmd1bWVudCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfUkVTX0ZJRk8JX19SRUcoMHgwMDIxNDAzNCkgIC8qIE1NQy9TRCBSZXNwb25zZSBGSUZPIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9CVUZGRVJfQUNDRVNTIF9fUkVHKDB4MDAyMTQwMzgpICAvKiBNTUMvU0QgQnVmZmVyIEFjY2VzcyBSZWdpc3RlcgkqLwotCi0vKgotICoJTVgxIEFTUCByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBNWDFfQVNQX1BBREZJRk8gX19SRUcoMHgwMDIxNTAwMCkgIC8qIFBlbiBTYW1wbGUgRklGTwkJCSovCi0jZGVmaW5lIE1YMV9BU1BfVkFERklGTyBfX1JFRygweDAwMjE1MDA0KSAgLyogVm9pY2UgQURDIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfQVNQX1ZEQUZJRk8gX19SRUcoMHgwMDIxNTAwOCkgIC8qIFZvaWNlIERBQyBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0FTUF9WQURDT0VGIF9fUkVHKDB4MDAyMTUwMEMpICAvKiBWb2ljZSBBREMgRklSIENvZWZmaWNpZW50cyBSQU0JKi8KLSNkZWZpbmUgTVgxX0FTUF9BQ05UTENSIF9fUkVHKDB4MDAyMTUwMTApICAvKiBDb250cm9sIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgTVgxX0FTUF9QU01QTFJHIF9fUkVHKDB4MDAyMTUwMTQpICAvKiBQZW4gQS9EIFNhbXBsZSBSYXRlIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0FTUF9JQ05UTFIJX19SRUcoMHgwMDIxNTAxOCkgIC8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9BU1BfSVNUQVRSCV9fUkVHKDB4MDAyMTUwMUMpICAvKiBJbnRlcnJ1cHQvRXJyb3IgU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9BU1BfVkFER0FJTiBfX1JFRygweDAwMjE1MDIwKSAgLyogVm9pY2UgQURDIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0FTUF9WREFHQUlOIF9fUkVHKDB4MDAyMTUwMjQpICAvKiBWb2ljZSBEQUMgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQVNQX1ZEQUNPRUYgX19SRUcoMHgwMDIxNTAyOCkgIC8qIFZvaWNlIERBQyBGSVIgQ29lZmZpY2llbnRzIFJBTQkqLwotI2RlZmluZSBNWDFfQVNQX0NMS0RJVglfX1JFRygweDAwMjE1MDJDKSAgLyogQ2xvY2sgRGl2aWRlIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfQVNQX0NNUENOVEwgX19SRUcoMHgwMDIxNTAyQykgIC8qIENvbXBhcmUgQ29udHJvbCBSZWdpc3RlcgkJKi8KLQotLyoKLSAqCU1YMSBCVEEgcmVnaXN0ZXJzCi0gKi8KLQotLyoKLSAqCU1YMSBJMkMgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgTVgxX0lBRFIJX19SRUcoMHgwMDIxNzAwMCkgIC8qIEkyQyBBZGRyZXNzIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfSUZEUglfX1JFRygweDAwMjE3MDA0KSAgLyogSTJDIEZyZXF1ZW5jeSBEaXZpZGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9JMkNSCV9fUkVHKDB4MDAyMTcwMDgpICAvKiBJMkMgQ29udHJvbCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0kyQ1NSCV9fUkVHKDB4MDAyMTcwMEMpICAvKiBJMkMgU3RhdHVzIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfSTJEUglfX1JFRygweDAwMjE3MDEwKSAgLyogSTJDIERhdGEgSS9PIFJlZ2lzdGVyCQkqLwotCi0vKgotICoJTVgxIFNTSSByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBNWDFfU1RYCQlfX1JFRygweDAwMjE4MDAwKSAgLyogU1NJIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1NSWAkJX19SRUcoMHgwMDIxODAwNCkgIC8qIFNTSSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9TQ1NSCV9fUkVHKDB4MDAyMTgwMDgpICAvKiBTU0kgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1NUQ1IJX19SRUcoMHgwMDIxODAwQykgIC8qIFNTSSBUcmFuc21pdCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9TUkNSCV9fUkVHKDB4MDAyMTgwMTApICAvKiBTU0kgUmVjaWV2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9TVENDUglfX1JFRygweDAwMjE4MDE0KSAgLyogU1NJIFRyYW5zbWl0IENsb2NrIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1NSQ0NSCV9fUkVHKDB4MDAyMTgwMTgpICAvKiBTU0kgUmVjZWl2ZSBDbG9jayBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9TVFNSCV9fUkVHKDB4MDAyMTgwMUMpICAvKiBTU0kgVGltZSBTbG90IFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfU0ZDU1IJX19SRUcoMHgwMDIxODAyMCkgIC8qIFNTSSBGSUZPIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9TT1IJCV9fUkVHKDB4MDAyMTgwMjQpICAvKiBTU0kgT3B0aW9uIFJlZ2lzdGVyCQkqLwotCi0vKgotICoJTVgxIFNQSSAyIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIE1YMV9SWERBVEFSRUcyCV9fUkVHKDB4MDAyMTkwMDApICAvKiBTUEkgMiBSeCBEYXRhIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfVFhEQVRBUkVHMglfX1JFRygweDAwMjE5MDA0KSAgLyogU1BJIDIgVHggRGF0YSBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0NPTlRST0xSRUcyIF9fUkVHKDB4MDAyMTkwMDgpICAvKiBTUEkgMiBDb250cm9sIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfSU5UUkVHMglfX1JFRygweDAwMjE5MDBDKSAgLyogU1BJIDIgSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9URVNUUkVHMglfX1JFRygweDAwMjE5MDEwKSAgLyogU1BJIDIgVGVzdCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1BFUklPRFJFRzIJX19SRUcoMHgwMDIxOTAxNCkgIC8qIFNQSSAyIFNhbXBsZSBQZXJpb2QgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfRE1BUkVHMglfX1JFRygweDAwMjE5MDE4KSAgLyogU1BJIDIgRE1BIENvbnRyb2wJIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9SRVNFVFJFRzIJX19SRUcoMHgwMDIxOTAxOCkgIC8qIFNQSSAyIFNvZnQgUmVzZXQgUmVnaXN0ZXIJCSovCi0KLS8qCi0gKglNWDEgTVNIQyByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBNWDFfTVNDTUQJX19SRUcoMHgwMDIxQTAwMCkgIC8qIE1lbW9yeSBTdGljayBDb21tYW5kIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NU0NTCV9fUkVHKDB4MDAyMUEwMDIpICAvKiBNZW1vcnkgU3RpY2sgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01TVERBVEEJX19SRUcoMHgwMDIxQTAwNCkgIC8qIE1lbW9yeSBTdGljayBUcmFuc21pdCBGSUZPIERhdGEgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01TUkRBVEEJX19SRUcoMHgwMDIxQTAwNCkgIC8qIE1lbW9yeSBTdGljayBSZWNpZXZlIEZJRk8gRGF0YSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfTVNJQ1MJX19SRUcoMHgwMDIxQTAwNikgIC8qIE1lbW9yeSBTdGljayBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01TUFBDRAlfX1JFRygweDAwMjFBMDA4KSAgLyogTWVtb3J5IFN0aWNrIFBhcmFsbGVsIFBvcnQgQ29udHJvbC9EYXRhIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NU0MyCV9fUkVHKDB4MDAyMUEwMEEpICAvKiBNZW1vcnkgU3RpY2sgQ29udHJvbCAyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NU0FDRAlfX1JFRygweDAwMjFBMDBDKSAgLyogTWVtb3J5IFN0aWNrIEF1dG8gQ29tbWFuZCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfTVNGQUVDUwlfX1JFRygweDAwMjFBMDBFKSAgLyogTWVtb3J5IFN0aWNrIEZJRk8gQWNjZXNzIEVycm9yIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NU0NMS0QJX19SRUcoMHgwMDIxQTAxMCkgIC8qIE1lbW9yeSBTdGljayBTZXJpYWwgQ2xvY2sgZGl2aWRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfTVNEUlFDCV9fUkVHKDB4MDAyMUEwMTIpICAvKiBNZW1vcnkgU3RpY2sgRE1BIFJlcXVlc3QgQ29udHJvbCBSZWdpc3RlciAqLwotCi0vKgotICoJTVgxIFBMTENMSyByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBNWDFfQ1NDUglfX1JFRygweDAwMjFCMDAwKSAgLyogQ2xvY2sgU291cmNlIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01QQ1RMMAlfX1JFRygweDAwMjFCMDA0KSAgLyogTUNVIFBMTCBDb250cm9sIFJlZ2lzdGVyIDAJKi8KLSNkZWZpbmUgTVgxX01QQ1RMMQlfX1JFRygweDAwMjFCMDA4KSAgLyogTUNVIFBMTCAmIFN5c3RlbSBDbG9jayBDb250cm9sIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgTVgxX1VQQ1RMMAlfX1JFRygweDAwMjFCMDBDKSAgLyogVVNCIFBMTCBDb250cm9sIFJlZ2lzdGVyIDAJKi8KLSNkZWZpbmUgTVgxX1VQQ1RMMQlfX1JFRygweDAwMjFCMDEwKSAgLyogVVNCIFBMTCBDb250cm9sIFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgTVgxX1BDRFIJX19SRUcoMHgwMDIxQjAyMCkgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAqLwotCi0vKgotICoJTVgxIFJFU0VUIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIE1YMV9SU1IJCV9fUkVHKDB4MDAyMUI4MDApICAvKiBSZXNldCBTb3VyY2UgUmVnaXN0ZXIJCSovCi0KLS8qCi0gKglNWDEgU1lTIENUUkwgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgTVgxX1NJRFIJX19SRUcoMHgwMDIxQjgwNCkgIC8qIFNpbGljb24gSUQgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9GTUNSCV9fUkVHKDB4MDAyMUI4MDgpICAvKiBGdW5jdGlvbiBNdWx0aVBsZXhpbmcgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfR1BDUglfX1JFRygweDAwMjFCODBDKSAgLyogR2xvYmFsIFBlcmlwaGVyYWwgQ29udHJvbCBSZWdpc3RlcgkqLwotCi0vKgotICoJTVgxIEdQSU8gcmVnaXN0ZXJzCi0gKi8KLQotLyogUG9ydCBBICovCi0jZGVmaW5lIE1YMV9ERElSX0EJX19SRUcoMHgwMDIxQzAwMCkgIC8qIFBvcnQgQSBEYXRhIERpcmVjdGlvbiBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfT0NSMV9BCV9fUkVHKDB4MDAyMUMwMDQpICAvKiBQb3J0IEEgT3V0cHV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQkqLwotI2RlZmluZSBNWDFfT0NSMl9BCV9fUkVHKDB4MDAyMUMwMDgpICAvKiBQb3J0IEEgT3V0cHV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBNWDFfSUNPTkZBMV9BCV9fUkVHKDB4MDAyMUMwMEMpICAvKiBQb3J0IEEgSW5wdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBBMQkqLwotI2RlZmluZSBNWDFfSUNPTkZBMl9BCV9fUkVHKDB4MDAyMUMwMTApICAvKiBQb3J0IEEgSW5wdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBBMgkqLwotI2RlZmluZSBNWDFfSUNPTkZCMV9BCV9fUkVHKDB4MDAyMUMwMTQpICAvKiBQb3J0IEEgSW5wdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBCMQkqLwotI2RlZmluZSBNWDFfSUNPTkZCMl9BCV9fUkVHKDB4MDAyMUMwMTgpICAvKiBQb3J0IEEgSW5wdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBCMgkqLwotI2RlZmluZSBNWDFfRFJfQQlfX1JFRygweDAwMjFDMDFDKSAgLyogUG9ydCBBIERhdGEgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9HSVVTX0EJX19SRUcoMHgwMDIxQzAyMCkgIC8qIFBvcnQgQSBHUElPIEluIFVzZSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfU1NSX0EJX19SRUcoMHgwMDIxQzAyNCkgIC8qIFBvcnQgQSBTYW1wbGUgU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9JQ1IxX0EJX19SRUcoMHgwMDIxQzAyOCkgIC8qIFBvcnQgQSBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCi0jZGVmaW5lIE1YMV9JQ1IyX0EJX19SRUcoMHgwMDIxQzAyQykgIC8qIFBvcnQgQSBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCi0jZGVmaW5lIE1YMV9JTVJfQQlfX1JFRygweDAwMjFDMDMwKSAgLyogUG9ydCBBIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9JU1JfQQlfX1JFRygweDAwMjFDMDM0KSAgLyogUG9ydCBBIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0dQUl9BCV9fUkVHKDB4MDAyMUMwMzgpICAvKiBQb3J0IEEgR2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9TV1JfQQlfX1JFRygweDAwMjFDMDNDKSAgLyogUG9ydCBBIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9QVUVOX0EJX19SRUcoMHgwMDIxQzA0MCkgIC8qIFBvcnQgQSBQdWxsIFVwIEVuYWJsZSBSZWdpc3RlcgkqLwotCi0vKiBQb3J0IEIgKi8KLSNkZWZpbmUgTVgxX0RESVJfQglfX1JFRygweDAwMjFDMTAwKSAgLyogUG9ydCBCIERhdGEgRGlyZWN0aW9uIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9PQ1IxX0IJX19SRUcoMHgwMDIxQzEwNCkgIC8qIFBvcnQgQiBPdXRwdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCSovCi0jZGVmaW5lIE1YMV9PQ1IyX0IJX19SRUcoMHgwMDIxQzEwOCkgIC8qIFBvcnQgQiBPdXRwdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCSovCi0jZGVmaW5lIE1YMV9JQ09ORkExX0IJX19SRUcoMHgwMDIxQzEwQykgIC8qIFBvcnQgQiBJbnB1dCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIEExCSovCi0jZGVmaW5lIE1YMV9JQ09ORkEyX0IJX19SRUcoMHgwMDIxQzExMCkgIC8qIFBvcnQgQiBJbnB1dCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIEEyCSovCi0jZGVmaW5lIE1YMV9JQ09ORkIxX0IJX19SRUcoMHgwMDIxQzExNCkgIC8qIFBvcnQgQiBJbnB1dCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIEIxCSovCi0jZGVmaW5lIE1YMV9JQ09ORkIyX0IJX19SRUcoMHgwMDIxQzExOCkgIC8qIFBvcnQgQiBJbnB1dCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIEIyCSovCi0jZGVmaW5lIE1YMV9EUl9CCV9fUkVHKDB4MDAyMUMxMUMpICAvKiBQb3J0IEIgRGF0YSBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX0dJVVNfQglfX1JFRygweDAwMjFDMTIwKSAgLyogUG9ydCBCIEdQSU8gSW4gVXNlIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9TU1JfQglfX1JFRygweDAwMjFDMTI0KSAgLyogUG9ydCBCIFNhbXBsZSBTdGF0dXMgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0lDUjFfQglfX1JFRygweDAwMjFDMTI4KSAgLyogUG9ydCBCIEludGVycnVwdCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgTVgxX0lDUjJfQglfX1JFRygweDAwMjFDMTJDKSAgLyogUG9ydCBCIEludGVycnVwdCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgTVgxX0lNUl9CCV9fUkVHKDB4MDAyMUMxMzApICAvKiBQb3J0IEIgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0lTUl9CCV9fUkVHKDB4MDAyMUMxMzQpICAvKiBQb3J0IEIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfR1BSX0IJX19SRUcoMHgwMDIxQzEzOCkgIC8qIFBvcnQgQiBHZW5lcmFsIFB1cnBvc2UgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1NXUl9CCV9fUkVHKDB4MDAyMUMxM0MpICAvKiBQb3J0IEIgU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1BVRU5fQglfX1JFRygweDAwMjFDMTQwKSAgLyogUG9ydCBCIFB1bGwgVXAgRW5hYmxlIFJlZ2lzdGVyCSovCi0KLS8qIFBvcnQgQyAqLwotI2RlZmluZSBNWDFfRERJUl9DCV9fUkVHKDB4MDAyMUMyMDApICAvKiBQb3J0IEMgRGF0YSBEaXJlY3Rpb24gUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX09DUjFfQwlfX1JFRygweDAwMjFDMjA0KSAgLyogUG9ydCBDIE91dHB1dCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgTVgxX09DUjJfQwlfX1JFRygweDAwMjFDMjA4KSAgLyogUG9ydCBDIE91dHB1dCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIJKi8KLSNkZWZpbmUgTVgxX0lDT05GQTFfQwlfX1JFRygweDAwMjFDMjBDKSAgLyogUG9ydCBDIElucHV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgQTEJKi8KLSNkZWZpbmUgTVgxX0lDT05GQTJfQwlfX1JFRygweDAwMjFDMjEwKSAgLyogUG9ydCBDIElucHV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgQTIJKi8KLSNkZWZpbmUgTVgxX0lDT05GQjFfQwlfX1JFRygweDAwMjFDMjE0KSAgLyogUG9ydCBDIElucHV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgQjEJKi8KLSNkZWZpbmUgTVgxX0lDT05GQjJfQwlfX1JFRygweDAwMjFDMjE4KSAgLyogUG9ydCBDIElucHV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgQjIJKi8KLSNkZWZpbmUgTVgxX0RSX0MJX19SRUcoMHgwMDIxQzIxQykgIC8qIFBvcnQgQyBEYXRhIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfR0lVU19DCV9fUkVHKDB4MDAyMUMyMjApICAvKiBQb3J0IEMgR1BJTyBJbiBVc2UgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX1NTUl9DCV9fUkVHKDB4MDAyMUMyMjQpICAvKiBQb3J0IEMgU2FtcGxlIFN0YXR1cyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfSUNSMV9DCV9fUkVHKDB4MDAyMUMyMjgpICAvKiBQb3J0IEMgSW50ZXJydXB0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwotI2RlZmluZSBNWDFfSUNSMl9DCV9fUkVHKDB4MDAyMUMyMkMpICAvKiBQb3J0IEMgSW50ZXJydXB0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBNWDFfSU1SX0MJX19SRUcoMHgwMDIxQzIzMCkgIC8qIFBvcnQgQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfSVNSX0MJX19SRUcoMHgwMDIxQzIzNCkgIC8qIFBvcnQgQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9HUFJfQwlfX1JFRygweDAwMjFDMjM4KSAgLyogUG9ydCBDIEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfU1dSX0MJX19SRUcoMHgwMDIxQzIzQykgIC8qIFBvcnQgQyBTb2Z0d2FyZSBSZXNldCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfUFVFTl9DCV9fUkVHKDB4MDAyMUMyNDApICAvKiBQb3J0IEMgUHVsbCBVcCBFbmFibGUgUmVnaXN0ZXIJKi8KLQotLyogUG9ydCBEICovCi0jZGVmaW5lIE1YMV9ERElSX0QJX19SRUcoMHgwMDIxQzMwMCkgIC8qIFBvcnQgRCBEYXRhIERpcmVjdGlvbiBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfT0NSMV9ECV9fUkVHKDB4MDAyMUMzMDQpICAvKiBQb3J0IEQgT3V0cHV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQkqLwotI2RlZmluZSBNWDFfT0NSMl9ECV9fUkVHKDB4MDAyMUMzMDgpICAvKiBQb3J0IEQgT3V0cHV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBNWDFfSUNPTkZBMV9ECV9fUkVHKDB4MDAyMUMzMEMpICAvKiBQb3J0IEQgSW5wdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBBMQkqLwotI2RlZmluZSBNWDFfSUNPTkZBMl9ECV9fUkVHKDB4MDAyMUMzMTApICAvKiBQb3J0IEQgSW5wdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBBMgkqLwotI2RlZmluZSBNWDFfSUNPTkZCMV9ECV9fUkVHKDB4MDAyMUMzMTQpICAvKiBQb3J0IEQgSW5wdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBCMQkqLwotI2RlZmluZSBNWDFfSUNPTkZCMl9ECV9fUkVHKDB4MDAyMUMzMTgpICAvKiBQb3J0IEQgSW5wdXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBCMgkqLwotI2RlZmluZSBNWDFfRFJfRAlfX1JFRygweDAwMjFDMzFDKSAgLyogUG9ydCBEIERhdGEgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIE1YMV9HSVVTX0QJX19SRUcoMHgwMDIxQzMyMCkgIC8qIFBvcnQgRCBHUElPIEluIFVzZSBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfU1NSX0QJX19SRUcoMHgwMDIxQzMyNCkgIC8qIFBvcnQgRCBTYW1wbGUgU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9JQ1IxX0QJX19SRUcoMHgwMDIxQzMyOCkgIC8qIFBvcnQgRCBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCi0jZGVmaW5lIE1YMV9JQ1IyX0QJX19SRUcoMHgwMDIxQzMyQykgIC8qIFBvcnQgRCBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCi0jZGVmaW5lIE1YMV9JTVJfRAlfX1JFRygweDAwMjFDMzMwKSAgLyogUG9ydCBEIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9JU1JfRAlfX1JFRygweDAwMjFDMzM0KSAgLyogUG9ydCBEIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0dQUl9ECV9fUkVHKDB4MDAyMUMzMzgpICAvKiBQb3J0IEQgR2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9TV1JfRAlfX1JFRygweDAwMjFDMzNDKSAgLyogUG9ydCBEIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9QVUVOX0QJX19SRUcoMHgwMDIxQzM0MCkgIC8qIFBvcnQgRCBQdWxsIFVwIEVuYWJsZSBSZWdpc3RlcgkqLwotCi0vKgotICoJTVgxIEVJTSByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBNWDFfQ1MwVQlfX1JFRygweDAwMjIwMDAwKSAgLyogQ2hpcCBTZWxlY3QgMCBVcHBlciBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9DUzBMCV9fUkVHKDB4MDAyMjAwMDQpICAvKiBDaGlwIFNlbGVjdCAwIExvd2VyIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0NTMVUJX19SRUcoMHgwMDIyMDAwOCkgIC8qIENoaXAgU2VsZWN0IDEgVXBwZXIgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ1MxTAlfX1JFRygweDAwMjIwMDBDKSAgLyogQ2hpcCBTZWxlY3QgMSBMb3dlciBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9DUzJVCV9fUkVHKDB4MDAyMjAwMTApICAvKiBDaGlwIFNlbGVjdCAyIFVwcGVyIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0NTMkwJX19SRUcoMHgwMDIyMDAxNCkgIC8qIENoaXAgU2VsZWN0IDIgTG93ZXIgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ1MzVQlfX1JFRygweDAwMjIwMDE4KSAgLyogQ2hpcCBTZWxlY3QgMyBVcHBlciBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9DUzNMCV9fUkVHKDB4MDAyMjAwMUMpICAvKiBDaGlwIFNlbGVjdCAzIExvd2VyIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0NTNFUJX19SRUcoMHgwMDIyMDAyMCkgIC8qIENoaXAgU2VsZWN0IDQgVXBwZXIgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfQ1M0TAlfX1JFRygweDAwMjIwMDI0KSAgLyogQ2hpcCBTZWxlY3QgNCBMb3dlciBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9DUzVVCV9fUkVHKDB4MDAyMjAwMjgpICAvKiBDaGlwIFNlbGVjdCA1IFVwcGVyIENvbnRyb2wgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0NTNUwJX19SRUcoMHgwMDIyMDAyQykgIC8qIENoaXAgU2VsZWN0IDUgTG93ZXIgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfV0VJTQlfX1JFRygweDAwMjIwMDMwKSAgLyogd2VpbSBjT05GSUdVUkFUSU9OIFJlZ2lzdGVyCSovCi0KLS8qCi0gKglNWDEgU0RSQU1DIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIE1YMV9TRENUTDAJX19SRUcoMHgwMDIyMTAwMCkgIC8qIFNEUkFNIDAgQ29udHJvbCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1NEQ1RMMQlfX1JFRygweDAwMjIxMDA0KSAgLyogU0RSQU0gMSBDb250cm9sIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfTUlTQ0VMTEFORU9VUyBfX1JFRygweDAwMjIxMDE0KSAgLyogTWlzY2VsbGFuZW91cyBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX1NEUlNUCV9fUkVHKDB4MDAyMjEwMTgpICAvKiBTRFJBTSBSZXNldCBSZWdpc3RlcgkJKi8KLQotLyoKLSAqCU1YMSBNTUEgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfTU9EIF9fUkVHKDB4MDAyMjIwMDApICAvKiBNTUEgTUFDIE1vZHVsZSBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfQ1RSTCBfX1JFRygweDAwMjIyMDA0KSAgLyogTU1BIE1BQyBDb250cm9sIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfTU1BX01BQ19NVUxUIF9fUkVHKDB4MDAyMjIwMDgpICAvKiBNTUEgTUFDIE11bHRpcGx5IENvdW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfQUNDVSBfX1JFRygweDAwMjIyMDBDKSAgLyogTU1BIE1BQyBBY2N1bXVsYXRlIENvdW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfSU5UUiBfX1JFRygweDAwMjIyMDEwKSAgLyogTU1BIE1BQyBJbnRlcnJ1cHQgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfSU5UUl9NQVNLIF9fUkVHKDB4MDAyMjIwMTQpCSAvKiBNTUEgTUFDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NTUFfTUFDX0ZJRk8gX19SRUcoMHgwMDIyMjAxOCkgIC8qIE1NQSBNQUMgRklGTyBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfRklGT19TVEFUIF9fUkVHKDB4MDAyMjIwMUMpCSAvKiBNTUEgTUFDIEZJRk8gU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NTUFfTUFDX0JVUlNUIF9fUkVHKDB4MDAyMjIwMjApICAvKiBNTUEgTUFDIEJ1cnN0IENvdW50IFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NTUFfTUFDX0JJVFNFTCBfX1JFRygweDAwMjIyMDI0KSAgLyogTU1BIE1BQyBCaXQgU2VsZWN0IFJlZ2lzdGVyCSovCi0KLSNkZWZpbmUgTVgxX01NQV9NQUNfWEJBU0UgX19SRUcoMHgwMDIyMjIwMCkgIC8qIE1NQSBNQUMgWCBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfWElOREVYIF9fUkVHKDB4MDAyMjIyMDQpICAvKiBNTUEgTUFDIFggSW5kZXggUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfWExFTkdUSCBfX1JFRygweDAwMjIyMjA4KSAgLyogTU1BIE1BQyBYIExlbmd0aCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfTU1BX01BQ19YTU9ESUZZIF9fUkVHKDB4MDAyMjIyMEMpICAvKiBNTUEgTUFDIFggTW9kaWZ5IFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NTUFfTUFDX1hJTkNSIF9fUkVHKDB4MDAyMjIyMTApICAvKiBNTUEgTUFDIFggSW5jcmVtZW50IFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NTUFfTUFDX1hDT1VOVCBfX1JFRygweDAwMjIyMjE0KSAgLyogTU1BIE1BQyBYIENvdW50IFJlZ2lzdGVyCSovCi0KLSNkZWZpbmUgTVgxX01NQV9NQUNfWUJBU0UgX19SRUcoMHgwMDIyMjMwMCkgIC8qIE1NQSBNQUMgWSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfWUlOREVYIF9fUkVHKDB4MDAyMjIzMDQpICAvKiBNTUEgTUFDIFkgSW5kZXggUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01NQV9NQUNfWUxFTkdUSCBfX1JFRygweDAwMjIyMzA4KSAgLyogTU1BIE1BQyBZIExlbmd0aCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfTU1BX01BQ19ZTU9ESUZZIF9fUkVHKDB4MDAyMjIzMEMpICAvKiBNTUEgTUFDIFkgTW9kaWZ5IFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NTUFfTUFDX1lJTkNSIF9fUkVHKDB4MDAyMjIzMTApICAvKiBNTUEgTUFDIFkgSW5jcmVtZW50IFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NTUFfTUFDX1lDT1VOVCBfX1JFRygweDAwMjIyMzE0KSAgLyogTU1BIE1BQyBZIENvdW50IFJlZ2lzdGVyCSovCi0KLSNkZWZpbmUgTVgxX01NQV9EQ1RDVFJMIF9fUkVHKDB4MDAyMjI0MDApICAvKiBEQ1QvaURDVCBDb250cm9sIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNWDFfTU1BX0RDVFZFUlNJT04gX19SRUcoMHgwMDIyMjQwNCkgIC8qIERDVC9pRENUIFZlcnNpb24gUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01NQV9EQ1RJUlFFTkEgX19SRUcoMHgwMDIyMjQwOCkgIC8qIERDVC9pRENUIElSUSBFbmFibGUgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX01NQV9EQ1RJUlFTVEFUIF9fUkVHKDB4MDAyMjI0MEMpICAvKiBEQ1QvaURDVCBJUlEgU3RhdHVzIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1YMV9NTUFfRENUU1JDREFUQSBfX1JFRygweDAwMjIyNDEwKSAgLyogRENUL2lEQ1QgU291cmNlIERhdGEgQWRkcmVzcwkqLwotI2RlZmluZSBNWDFfTU1BX0RDVERFU0RBVEEgX19SRUcoMHgwMDIyMjQxNCkgIC8qIERDVC9pRENUIERlc3RpbmF0aW9uIERhdGEgQWRkcmVzcwkqLwotI2RlZmluZSBNWDFfTU1BX0RDVFhPRkYgX19SRUcoMHgwMDIyMjQxOCkgIC8qIERDVC9pRENUIFgtT2Zmc2V0IEFkZHJlc3MJCSovCi0jZGVmaW5lIE1YMV9NTUFfRENUWU9GRiBfX1JFRygweDAwMjIyNDFDKSAgLyogRENUL2lEQ1QgWS1PZmZzZXQgQWRkcmVzcwkJKi8KLSNkZWZpbmUgTVgxX01NQV9EQ1RYWUNOVCBfX1JFRygweDAwMjIyNDIwKSAgLyogRENUL2lEQ1QgWFkgQ291bnQJCSovCi0jZGVmaW5lIE1YMV9NTUFfRENUU0tJUCBfX1JFRygweDAwMjIyNDI0KSAgLyogRENUL2lEQ1QgU2tpcCBBZGRyZXNzCQkqLwotI2RlZmluZSBNWDFfTU1BX0RDVEZJRk8gX19SRUcoMHgwMDIyMjUwMCkgIC8qIERDVC9pRENUIERhdGEgRklGTwkJKi8KLQotLyoKLSAqCU1YMSBBSVRDIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIE1YMV9JTlRDTlRMCV9fUkVHKDB4MDAyMjMwMDApICAvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfTklNQVNLCV9fUkVHKDB4MDAyMjMwMDQpICAvKiBOb3JtYWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTVgxX0lOVEVOTlVNCV9fUkVHKDB4MDAyMjMwMDgpICAvKiBJbnRlcnJ1cHQgRW5hYmxlIE51bWJlciBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfSU5URElTTlVNCV9fUkVHKDB4MDAyMjMwMEMpICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBOdW1iZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0lOVEVOQUJMRUgJX19SRUcoMHgwMDIyMzAxMCkgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgSGlnaAkqLwotI2RlZmluZSBNWDFfSU5URU5BQkxFTAlfX1JFRygweDAwMjIzMDE0KSAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBMb3cJKi8KLSNkZWZpbmUgTVgxX0lOVFRZUEVICV9fUkVHKDB4MDAyMjMwMTgpICAvKiBJbnRlcnJ1cHQgVHlwZSBSZWdpc3RlciBIaWdoCSovCi0jZGVmaW5lIE1YMV9JTlRUWVBFTAlfX1JFRygweDAwMjIzMDFDKSAgLyogSW50ZXJydXB0IFR5cGUgUmVnaXN0ZXIgTG93CSovCi0jZGVmaW5lIE1YMV9OSVBSSU9SSVRZNyBfX1JFRygweDAwMjIzMDIwKSAgLyogTm9ybWFsIEludGVycnVwdCBQcmlvcml0eSBMZXZlbCBSZWdpc3RlciA3Ki8KLSNkZWZpbmUgTVgxX05JUFJJT1JJVFk2IF9fUkVHKDB4MDAyMjMwMjQpICAvKiBOb3JtYWwgSW50ZXJydXB0IFByaW9yaXR5IExldmVsIFJlZ2lzdGVyIDYqLwotI2RlZmluZSBNWDFfTklQUklPUklUWTUgX19SRUcoMHgwMDIyMzAyOCkgIC8qIE5vcm1hbCBJbnRlcnJ1cHQgUHJpb3JpdHkgTGV2ZWwgUmVnaXN0ZXIgNSovCi0jZGVmaW5lIE1YMV9OSVBSSU9SSVRZNCBfX1JFRygweDAwMjIzMDJDKSAgLyogTm9ybWFsIEludGVycnVwdCBQcmlvcml0eSBMZXZlbCBSZWdpc3RlciA0Ki8KLSNkZWZpbmUgTVgxX05JUFJJT1JJVFkzIF9fUkVHKDB4MDAyMjMwMzApICAvKiBOb3JtYWwgSW50ZXJydXB0IFByaW9yaXR5IExldmVsIFJlZ2lzdGVyIDMqLwotI2RlZmluZSBNWDFfTklQUklPUklUWTIgX19SRUcoMHgwMDIyMzAzNCkgIC8qIE5vcm1hbCBJbnRlcnJ1cHQgUHJpb3JpdHkgTGV2ZWwgUmVnaXN0ZXIgMiovCi0jZGVmaW5lIE1YMV9OSVBSSU9SSVRZMSBfX1JFRygweDAwMjIzMDM4KSAgLyogTm9ybWFsIEludGVycnVwdCBQcmlvcml0eSBMZXZlbCBSZWdpc3RlciAxKi8KLSNkZWZpbmUgTVgxX05JUFJJT1JJVFkwIF9fUkVHKDB4MDAyMjMwM0MpICAvKiBOb3JtYWwgSW50ZXJydXB0IFByaW9yaXR5IExldmVsIFJlZ2lzdGVyIDAqLwotI2RlZmluZSBNWDFfTklWRUNTUglfX1JFRygweDAwMjIzMDQwKSAgLyogTm9ybWFsIEludGVycnVwdCBWZWN0b3IgJiBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0ZJVkVDU1IJX19SRUcoMHgwMDIyMzA0NCkgIC8qIEZhc3QgSW50ZXJydXB0IFZlY3RvciAmIFN0YXR1cyBSZWdpc3RlcgkqLwotI2RlZmluZSBNWDFfSU5UU1JDSAlfX1JFRygweDAwMjIzMDQ4KSAgLyogSW50ZXJydXB0IFNvdXJjZSBSZWdpc3RlciBIaWdoCSovCi0jZGVmaW5lIE1YMV9JTlRTUkNMCV9fUkVHKDB4MDAyMjMwNEMpICAvKiBJbnRlcnJ1cHQgU291cmNlIFJlZ2lzdGVyIExvdwkqLwotI2RlZmluZSBNWDFfSU5URlJDSAlfX1JFRygweDAwMjIzMDUwKSAgLyogSW50ZXJydXB0IEZvcmNlIFJlZ2lzdGVyIEhpZ2gJKi8KLSNkZWZpbmUgTVgxX0lOVEZSQ0wJX19SRUcoMHgwMDIyMzA1NCkgIC8qIEludGVycnVwdCBGb3JjZSBSZWdpc3RlciBMb3cJKi8KLSNkZWZpbmUgTVgxX05JUE5ESAlfX1JFRygweDAwMjIzMDU4KSAgLyogTm9ybWFsIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIEhpZ2gJKi8KLSNkZWZpbmUgTVgxX05JUE5ETAlfX1JFRygweDAwMjIzMDVDKSAgLyogTm9ybWFsIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIExvdwkqLwotI2RlZmluZSBNWDFfRklQTkRICV9fUkVHKDB4MDAyMjMwNjApICAvKiBGYXN0IEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIEhpZ2gJKi8KLSNkZWZpbmUgTVgxX0ZJUE5ETAlfX1JFRygweDAwMjIzMDY0KSAgLyogRmFzdCBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciBMb3cJKi8KLQotLyoKLSAqCU1YMSBDU0kgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgTVgxX0NTSUNSMQlfX1JFRygweDAwMjI0MDAwKSAgLyogQ1NJIENvbnRyb2wgUmVnaXN0ZXIgMQkJKi8KLSNkZWZpbmUgTVgxX0NTSUNSMglfX1JFRygweDAwMjI0MDA0KSAgLyogQ1NJIENvbnRyb2wgUmVnaXN0ZXIgMgkJKi8KLSNkZWZpbmUgTVgxX0NTSVNSCV9fUkVHKDB4MDAyMjQwMDgpICAvKiBDU0kgU3RhdHVzIFJlZ2lzdGVyIDEJCSovCi0jZGVmaW5lIE1YMV9DU0lTVEFUUglfX1JFRygweDAwMjI0MDBDKSAgLyogQ1NJIFN0YXRpc3RpYyBGSUZPIFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgTVgxX0NTSVJYUglfX1JFRygweDAwMjI0MDEwKSAgLyogQ1NJIFJ4RklGTyBSZWdpc3RlciAxCQkqLwotCi0jZW5kaWYJLyogIF9fTUM5MzI4X0hfXyAqLwotCi0jaWYgMAotLyoKLQlNWDEgZG1hIGRlZmluaXRpb24KLSovCi0KLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweGZmZmZmZmZmCi0KLS8qI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTAgKi8KLQotI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCQkxMQotI2RlZmluZSBNQVhfRE1BXzJEX1JFR1NFVAkJMgotCi0vKiBNWDEgRE1BIG1vZHVsZSByZWdpc3RlcnMnIGFkZHJlc3MgKi8KLQotI2RlZmluZSBNWDFfRE1BX0JBU0UJCUlPX0FERFJFU1MoMHgwMDIwOTAwMCkKLSNkZWZpbmUgTVgxX0RNQV9EQ1IJCShNWDFfRE1BX0JBU0UgKyAweDAwKQkJLyogRE1BIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0RNQV9ESVNSCQkoTVgxX0RNQV9CQVNFICsgMHgwNCkJCS8qIERNQSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9ETUFfRElNUgkJKE1YMV9ETUFfQkFTRSArIDB4MDgpCQkvKiBETUEgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0RNQV9EQlRPU1IJCShNWDFfRE1BX0JBU0UgKyAweDBDKQkJLyogRE1BIGJ1cnN0IHRpbWUtb3V0IHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBNWDFfRE1BX0RSVE9TUgkJKE1YMV9ETUFfQkFTRSArIDB4MTApCQkvKiBETUEgcmVxdWVzdCB0aW1lLW91dCBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0RNQV9EU0VTUgkJKE1YMV9ETUFfQkFTRSArIDB4MTQpCQkvKiBETUEgdHJhbnNmZXIgZXJyb3Igc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1YMV9ETUFfREJPU1IJCShNWDFfRE1BX0JBU0UgKyAweDE4KQkJLyogRE1BIGJ1ZmZlciBvdmVyZmxvdyBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0RNQV9EQlRPQ1IJCShNWDFfRE1BX0JBU0UgKyAweDFDKQkJLyogRE1BIGJ1cnN0IHRpbWUtb3V0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0RNQV9XU1JBCQkoTVgxX0RNQV9CQVNFICsgMHg0MCkJCS8qIFctc2l6ZSByZWdpc3RlciBBICovCi0jZGVmaW5lIE1YMV9ETUFfWFNSQQkJKE1YMV9ETUFfQkFTRSArIDB4NDQpCQkvKiBYLXNpemUgcmVnaXN0ZXIgQSAqLwotI2RlZmluZSBNWDFfRE1BX1lTUkEJCShNWDFfRE1BX0JBU0UgKyAweDQ4KQkJLyogWS1zaXplIHJlZ2lzdGVyIEEgKi8KLSNkZWZpbmUgTVgxX0RNQV9XU1JCCQkoTVgxX0RNQV9CQVNFICsgMHg0QykJCS8qIFctc2l6ZSByZWdpc3RlciBCICovCi0jZGVmaW5lIE1YMV9ETUFfWFNSQgkJKE1YMV9ETUFfQkFTRSArIDB4NTApCQkvKiBYLXNpemUgcmVnaXN0ZXIgQiAqLwotI2RlZmluZSBNWDFfRE1BX1lTUkIJCShNWDFfRE1BX0JBU0UgKyAweDU0KQkJLyogWS1zaXplIHJlZ2lzdGVyIEIgKi8KLQotI2RlZmluZSBNWDFfRE1BX1NBUjAJCShNWDFfRE1BX0JBU0UgKyAweDgwKQkJLyogc291cmNlIGFkZHJlc3MgcmVnaXN0ZXIgMCAqLwotI2RlZmluZSBNWDFfRE1BX0RBUjAJCShNWDFfRE1BX0JBU0UgKyAweDg0KQkJLyogZGVzdGluYXRpb24gYWRkcmVzcyByZWdpc3RlciAwICovCi0jZGVmaW5lIE1YMV9ETUFfQ05UUjAJCShNWDFfRE1BX0JBU0UgKyAweDg4KQkJLyogY291bnQgcmVnaXN0ZXIgMCAqLwotI2RlZmluZSBNWDFfRE1BX0NDUjAJCShNWDFfRE1BX0JBU0UgKyAweDhDKQkJLyogY2hhbm5lbCBjb250cm9sIHJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgTVgxX0RNQV9SU1NSMAkJKE1YMV9ETUFfQkFTRSArIDB4OTApCQkvKiByZXF1ZXN0IHNvdXJjZSBzZWxlY3QgcmVnaXN0ZXIgMCAqLwotI2RlZmluZSBNWDFfRE1BX0JMUjAJCShNWDFfRE1BX0JBU0UgKyAweDk0KQkJLyogYnVyc3QgbGVuZ3RoIHJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgTVgxX0RNQV9SVE9SMAkJKE1YMV9ETUFfQkFTRSArIDB4OTgpCQkvKiByZXF1ZXN0IHRpbWUtb3V0IHJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgTVgxX0RNQV9CVUNSMAkJKE1YMV9ETUFfQkFTRSArIDB4OTgpCQkvKiBidXMgdXRpbGl6YXRpb24gY29udHJvbCByZWdpc3RlciAwICovCi0KLS8qIHJlZ2lzdGVyIHNldCAxIHRvIDEwIGFyZSBvZmZzZXRlZCBieSAweDQwIGVhY2ggPSAweDEwIHBvaW50ZXJzIGF3YXkgKi8KLQotI2RlZmluZSBETUFfUkVHX1NFVF9PRlMJCTB4MTAKLQotLyogTVgxIERNQSBtb2R1bGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIF9yZWdfRE1BX0RDUgkJKCooKFBfVlUzMilNWDFfRE1BX0RDUikpCi0jZGVmaW5lIF9yZWdfRE1BX0RJU1IJCSgqKChQX1ZVMzIpTVgxX0RNQV9ESVNSKSkKLSNkZWZpbmUgX3JlZ19ETUFfRElNUgkJKCooKFBfVlUzMilNWDFfRE1BX0RJTVIpKQotI2RlZmluZSBfcmVnX0RNQV9EQlRPU1IJCSgqKChQX1ZVMzIpTVgxX0RNQV9EQlRPU1IpKQotI2RlZmluZSBfcmVnX0RNQV9EUlRPU1IJCSgqKChQX1ZVMzIpTVgxX0RNQV9EUlRPU1IpKQotI2RlZmluZSBfcmVnX0RNQV9EU0VTUgkJKCooKFBfVlUzMilNWDFfRE1BX0RTRVNSKSkKLSNkZWZpbmUgX3JlZ19ETUFfREJPU1IJCSgqKChQX1ZVMzIpTVgxX0RNQV9EQk9TUikpCi0jZGVmaW5lIF9yZWdfRE1BX0RCVE9DUgkJKCooKFBfVlUzMilNWDFfRE1BX0RCVE9DUikpCi0jZGVmaW5lIF9yZWdfRE1BX1dTUkEJCSgqKChQX1ZVMzIpTVgxX0RNQV9XU1JBKSkKLSNkZWZpbmUgX3JlZ19ETUFfWFNSQQkJKCooKFBfVlUzMilNWDFfRE1BX1hTUkEpKQotI2RlZmluZSBfcmVnX0RNQV9ZU1JBCQkoKigoUF9WVTMyKU1YMV9ETUFfWVNSQSkpCi0jZGVmaW5lIF9yZWdfRE1BX1dTUkIJCSgqKChQX1ZVMzIpTVgxX0RNQV9XU1JCKSkKLSNkZWZpbmUgX3JlZ19ETUFfWFNSQgkJKCooKFBfVlUzMilNWDFfRE1BX1hTUkIpKQotI2RlZmluZSBfcmVnX0RNQV9ZU1JCCQkoKigoUF9WVTMyKU1YMV9ETUFfWVNSQikpCi0jZGVmaW5lIF9yZWdfRE1BX1NBUjAJCSgqKChQX1ZVMzIpTVgxX0RNQV9TQVIwKSkKLSNkZWZpbmUgX3JlZ19ETUFfREFSMAkJKCooKFBfVlUzMilNWDFfRE1BX0RBUjApKQotI2RlZmluZSBfcmVnX0RNQV9DTlRSMAkJKCooKFBfVlUzMilNWDFfRE1BX0NOVFIwKSkKLSNkZWZpbmUgX3JlZ19ETUFfQ0NSMAkJKCooKFBfVlUzMilNWDFfRE1BX0NDUjApKQotI2RlZmluZSBfcmVnX0RNQV9SU1NSMAkJKCooKFBfVlUzMilNWDFfRE1BX1JTU1IwKSkKLSNkZWZpbmUgX3JlZ19ETUFfQkxSMAkJKCooKFBfVlUzMilNWDFfRE1BX0JMUjApKQotI2RlZmluZSBfcmVnX0RNQV9SVE9SMAkJKCooKFBfVlUzMilNWDFfRE1BX1JUT1IwKSkKLSNkZWZpbmUgX3JlZ19ETUFfQlVDUjAJCSgqKChQX1ZVMzIpTVgxX0RNQV9CVUNSMCkpCi0KLS8qICBETUEgZXJyb3IgdHlwZSBkZWZpbml0aW9uICovCi0jZGVmaW5lIE1YMV9ETUFfRVJSX0JUTwkJMAkvKiBidXJzdCB0aW1lLW91dCAqLwotI2RlZmluZSBNWDFfRE1BX0VSUl9SVE8JCTEJLyogcmVxdWVzdCB0aW1lLW91dCAqLwotI2RlZmluZSBNWDFfRE1BX0VSUl9URQkJMgkvKiB0cmFuc2ZlciBlcnJvciAqLwotI2RlZmluZSBNWDFfRE1BX0VSUl9CTwkJMwkvKiBidWZmZXIgb3ZlcmZsb3cgKi8KLQotLyogRW1iZWRkZWQgU1JBTSAqLwotCi0jZGVmaW5lIE1YMV9TUkFNX0JBU0UJCTB4MDAzMDAwMDAKLSNkZWZpbmUgTVgxX1NSQU1fU0laRQkJMHgwMDAyMDAwMAotCi0jZGVmaW5lCi0KLSNkZWZpbmUgTVgxQURTX1NGTEFTSF9CQVNFCTB4MEMwMDAwMDAKLSNkZWZpbmUgTVgxQURTX1NGTEFTSF9TSVpFCVNaXzE2TQotCi0jZGVmaW5lIE1YMUFEU19JT19CQVNFCQkweDAwMjAwMDAwCi0jZGVmaW5lIE1YMUFEU19JT19TSVpFCQlTWl8yNTZLCi0KLSNkZWZpbmUgTVgxQURTX1ZJRF9CQVNFCQkweDAwMzAwMDAwCi0jZGVmaW5lIE1YMUFEU19WSURfU0laRQkJMHgyNjAwMAotCi0jZGVmaW5lIE1YMUFEU19WSURfU1RBUlQJSU9fQUREUkVTUyhNWDFBRFNfVklEX0JBU0UpCi0KLSNkZWZpbmUgTVgxX0dQSU9fQkFTRQkJMHgwMDIxQzAwMAkvKiBHUElPICovCi0jZGVmaW5lIE1YMV9FWFRfVUFSVF9CQVNFCTB4MTUwMDAwMDAJLyogZXh0ZXJuYWwgVUFSVCAqLwotI2RlZmluZSBNWDFfVE1SMV9CQVNFCQkweDAwMjAyMDAwCS8qIFRpbWVyMSAqLwotI2RlZmluZSBNWDFBRFNfRkxBU0hfQkFTRQkweDBDMDAwMDAwCS8qIHN5bmMgRkxBU0ggKi8KLSNkZWZpbmUgTVgxX0VTUkFNX0JBU0UJCTB4MDAzMDAwMDAJLyogZW1iZWRkZWQgU1JBTSAqLwotI2RlZmluZSBNWDFBRFNfU0RSQU1fRElTS19CQVNFCTB4MEIwMDAwMDAJLyogU0RSQU0gZGlzayBiYXNlIChsYXN0IDE2TSBvZiBTRFJBTSkgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTW90b3JvbGEgTVgxIHN5c3RlbSByZWdpc3RlcnMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLwotCi0vKgotICogIFJlZ2lzdGVyIG9mZmVzdHMuCi0gKgotICovCi0KLSNkZWZpbmUgTVgxQURTX0FJUEkxX09GRlNFVAkJMHgwMDAwMAotI2RlZmluZSBNWDFBRFNfV0RUX09GRlNFVAkJMHgwMTAwMAotI2RlZmluZSBNWDFBRFNfVElNMV9PRkZTRVQJCTB4MDIwMDAKLSNkZWZpbmUgTVgxQURTX1RJTTJfT0ZGU0VUCQkweDAzMDAwCi0jZGVmaW5lIE1YMUFEU19SVENfT0ZGU0VUCQkweDA0MDAwCi0jZGVmaW5lIE1YMUFEU19MQ0RDX09GRlNFVAkJMHgwNTAwMAotI2RlZmluZSBNWDFBRFNfVUFSVDFfT0ZGU0VUCQkweDA2MDAwCi0jZGVmaW5lIE1YMUFEU19VQVJUMl9PRkZTRVQJCTB4MDcwMDAKLSNkZWZpbmUgTVgxQURTX1BXTV9PRkZTRVQJCTB4MDgwMDAKLSNkZWZpbmUgTVgxQURTX0RNQUNfT0ZGU0VUCQkweDA5MDAwCi0jZGVmaW5lIE1YMUFEU19BSVBJMl9PRkZTRVQJCTB4MTAwMDAKLSNkZWZpbmUgTVgxQURTX1NJTV9PRkZTRVQJCTB4MTEwMDAKLSNkZWZpbmUgTVgxQURTX1VTQkRfT0ZGU0VUCQkweDEyMDAwCi0jZGVmaW5lIE1YMUFEU19TUEkxX09GRlNFVAkJMHgxMzAwMAotI2RlZmluZSBNWDFBRFNfTU1DX09GRlNFVAkJMHgxNDAwMAotI2RlZmluZSBNWDFBRFNfQVNQX09GRlNFVAkJMHgxNTAwMAotI2RlZmluZSBNWDFBRFNfQlRBX09GRlNFVAkJMHgxNjAwMAotI2RlZmluZSBNWDFBRFNfSTJDX09GRlNFVAkJMHgxNzAwMAotI2RlZmluZSBNWDFBRFNfU1NJX09GRlNFVAkJMHgxODAwMAotI2RlZmluZSBNWDFBRFNfU1BJMl9PRkZTRVQJCTB4MTkwMDAKLSNkZWZpbmUgTVgxQURTX01TSENfT0ZGU0VUCQkweDFBMDAwCi0jZGVmaW5lIE1YMUFEU19QTExfT0ZGU0VUCQkweDFCMDAwCi0jZGVmaW5lIE1YMUFEU19HUElPX09GRlNFVAkJMHgxQzAwMAotI2RlZmluZSBNWDFBRFNfRUlNX09GRlNFVAkJMHgyMDAwMAotI2RlZmluZSBNWDFBRFNfU0RSQU1DX09GRlNFVAkJMHgyMTAwMAotI2RlZmluZSBNWDFBRFNfTU1BX09GRlNFVAkJMHgyMjAwMAotI2RlZmluZSBNWDFBRFNfQUlUQ19PRkZTRVQJCTB4MjMwMDAKLSNkZWZpbmUgTVgxQURTX0NTSV9PRkZTRVQJCTB4MjQwMDAKLQotLyoKLSAqICBSZWdpc3RlciBCQVNFcywgYmFzZWQgb24gT0ZGU0VUcwotICoKLSAqLwotCi0jZGVmaW5lIE1YMUFEU19BSVBJMV9CQVNFCQkoTVgxQURTX0FJUEkxX09GRlNFVCArIE1YMUFEU19JT19CQVNFKQotI2RlZmluZSBNWDFBRFNfV0RUX0JBU0UJCQkoTVgxQURTX1dEVF9PRkZTRVQgKyBNWDFBRFNfSU9fQkFTRSkKLSNkZWZpbmUgTVgxQURTX1RJTTFfQkFTRQkJKE1YMUFEU19USU0xX09GRlNFVCArIE1YMUFEU19JT19CQVNFKQotI2RlZmluZSBNWDFBRFNfVElNMl9CQVNFCQkoTVgxQURTX1RJTTJfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19SVENfQkFTRQkJCShNWDFBRFNfUlRDX09GRlNFVCArIE1YMUFEU19JT19CQVNFKQotI2RlZmluZSBNWDFBRFNfTENEQ19CQVNFCQkoTVgxQURTX0xDRENfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19VQVJUMV9CQVNFCQkoTVgxQURTX1VBUlQxX09GRlNFVCArIE1YMUFEU19JT19CQVNFKQotI2RlZmluZSBNWDFBRFNfVUFSVDJfQkFTRQkJKE1YMUFEU19VQVJUMl9PRkZTRVQgKyBNWDFBRFNfSU9fQkFTRSkKLSNkZWZpbmUgTVgxQURTX1BXTV9CQVNFCQkJKE1YMUFEU19QV01fT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19ETUFDX0JBU0UJCShNWDFBRFNfRE1BQ19PRkZTRVQgKyBNWDFBRFNfSU9fQkFTRSkKLSNkZWZpbmUgTVgxQURTX0FJUEkyX0JBU0UJCShNWDFBRFNfQUlQSTJfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19TSU1fQkFTRQkJCShNWDFBRFNfU0lNX09GRlNFVCArIE1YMUFEU19JT19CQVNFKQotI2RlZmluZSBNWDFBRFNfVVNCRF9CQVNFCQkoTVgxQURTX1VTQkRfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19TUEkxX0JBU0UJCShNWDFBRFNfU1BJMV9PRkZTRVQgKyBNWDFBRFNfSU9fQkFTRSkKLSNkZWZpbmUgTVgxQURTX01NQ19CQVNFCQkJKE1YMUFEU19NTUNfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19BU1BfQkFTRQkJCShNWDFBRFNfQVNQX09GRlNFVCArIE1YMUFEU19JT19CQVNFKQotI2RlZmluZSBNWDFBRFNfQlRBX0JBU0UJCQkoTVgxQURTX0JUQV9PRkZTRVQgKyBNWDFBRFNfSU9fQkFTRSkKLSNkZWZpbmUgTVgxQURTX0kyQ19CQVNFCQkJKE1YMUFEU19JMkNfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19TU0lfQkFTRQkJCShNWDFBRFNfU1NJX09GRlNFVCArIE1YMUFEU19JT19CQVNFKQotI2RlZmluZSBNWDFBRFNfU1BJMl9CQVNFCQkoTVgxQURTX1NQSTJfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19NU0hDX0JBU0UJCShNWDFBRFNfTVNIQ19PRkZTRVQgKyBNWDFBRFNfSU9fQkFTRSkKLSNkZWZpbmUgTVgxQURTX1BMTF9CQVNFCQkJKE1YMUFEU19QTExfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19HUElPX0JBU0UJCShNWDFBRFNfR1BJT19PRkZTRVQgKyBNWDFBRFNfSU9fQkFTRSkKLSNkZWZpbmUgTVgxQURTX0VJTV9CQVNFCQkJKE1YMUFEU19FSU1fT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19TRFJBTUNfQkFTRQkJKE1YMUFEU19TRFJBTUNfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19NTUFfQkFTRQkJCShNWDFBRFNfTU1BX09GRlNFVCArIE1YMUFEU19JT19CQVNFKQotI2RlZmluZSBNWDFBRFNfQUlUQ19CQVNFCQkoTVgxQURTX0FJVENfT0ZGU0VUICsgTVgxQURTX0lPX0JBU0UpCi0jZGVmaW5lIE1YMUFEU19DU0lfQkFTRQkJCShNWDFBRFNfQ1NJX09GRlNFVCArIE1YMUFEU19JT19CQVNFKQotCi0vKgotICogIE1YMSBJbnRlcnJ1cHQgbnVtYmVycwotICoKLSAqLwotI2RlZmluZSBJTlRfU09GVElOVAkJCTAKLSNkZWZpbmUgQ1NJX0lOVAkJCQk2Ci0jZGVmaW5lIERTUEFfTUFDX0lOVAkJCTcKLSNkZWZpbmUgRFNQQV9JTlQJCQk4Ci0jZGVmaW5lIENPTVBfSU5UCQkJOQotI2RlZmluZSBNU0hDX1hJTlQJCQkxMAotI2RlZmluZSBHUElPX0lOVF9QT1JUQQkJCTExCi0jZGVmaW5lIEdQSU9fSU5UX1BPUlRCCQkJMTIKLSNkZWZpbmUgR1BJT19JTlRfUE9SVEMJCQkxMwotI2RlZmluZSBMQ0RDX0lOVAkJCTE0Ci0jZGVmaW5lIFNJTV9JTlQJCQkJMTUKLSNkZWZpbmUgU0lNX0RBVEFfSU5UCQkJMTYKLSNkZWZpbmUgUlRDX0lOVAkJCQkxNwotI2RlZmluZSBSVENfU0FNSU5UCQkJMTgKLSNkZWZpbmUgVUFSVDJfTUlOVF9QRkVSUgkJMTkKLSNkZWZpbmUgVUFSVDJfTUlOVF9SVFMJCQkyMAotI2RlZmluZSBVQVJUMl9NSU5UX0RUUgkJCTIxCi0jZGVmaW5lIFVBUlQyX01JTlRfVUFSVEMJCTIyCi0jZGVmaW5lIFVBUlQyX01JTlRfVFgJCQkyMwotI2RlZmluZSBVQVJUMl9NSU5UX1JYCQkJMjQKLSNkZWZpbmUgVUFSVDFfTUlOVF9QRkVSUgkJMjUKLSNkZWZpbmUgVUFSVDFfTUlOVF9SVFMJCQkyNgotI2RlZmluZSBVQVJUMV9NSU5UX0RUUgkJCTI3Ci0jZGVmaW5lIFVBUlQxX01JTlRfVUFSVEMJCTI4Ci0jZGVmaW5lIFVBUlQxX01JTlRfVFgJCQkyOQotI2RlZmluZSBVQVJUMV9NSU5UX1JYCQkJMzAKLSNkZWZpbmUgVk9JQ0VfREFDX0lOVAkJCTMxCi0jZGVmaW5lIFZPSUNFX0FEQ19JTlQJCQkzMgotI2RlZmluZSBQRU5fREFUQV9JTlQJCQkzMwotI2RlZmluZSBQV01fSU5UCQkJCTM0Ci0jZGVmaW5lIFNESENfSU5UCQkJMzUKLSNkZWZpbmUgSTJDX0lOVAkJCQkzOQotI2RlZmluZSBDU1BJX0lOVAkJCTQxCi0jZGVmaW5lIFNTSV9UWF9JTlQJCQk0MgotI2RlZmluZSBTU0lfVFhfRVJSX0lOVAkJCTQzCi0jZGVmaW5lIFNTSV9SWF9JTlQJCQk0NAotI2RlZmluZSBTU0lfUlhfRVJSX0lOVAkJCTQ1Ci0jZGVmaW5lIFRPVUNIX0lOVAkJCTQ2Ci0jZGVmaW5lIFVTQkRfSU5UMAkJCTQ3Ci0jZGVmaW5lIFVTQkRfSU5UMQkJCTQ4Ci0jZGVmaW5lIFVTQkRfSU5UMgkJCTQ5Ci0jZGVmaW5lIFVTQkRfSU5UMwkJCTUwCi0jZGVmaW5lIFVTQkRfSU5UNAkJCTUxCi0jZGVmaW5lIFVTQkRfSU5UNQkJCTUyCi0jZGVmaW5lIFVTQkRfSU5UNgkJCTUzCi0jZGVmaW5lIEJUU1lTX0lOVAkJCTU1Ci0jZGVmaW5lIEJUVElNX0lOVAkJCTU2Ci0jZGVmaW5lIEJUV1VJX0lOVAkJCTU3Ci0jZGVmaW5lIFRJTUVSMl9JTlQJCQk1OAotI2RlZmluZSBUSU1FUjFfSU5UCQkJNTkKLSNkZWZpbmUgRE1BX0VSUgkJCQk2MAotI2RlZmluZSBETUFfSU5UCQkJCTYxCi0jZGVmaW5lIEdQSU9fSU5UX1BPUlRECQkJNjIKLQotI2RlZmluZSBNQVhJUlFOVU0JCQk2MgotI2RlZmluZSBNQVhGSVFOVU0JCQk2MgotI2RlZmluZSBNQVhTV0lOVU0JCQk2MgotCi0jZGVmaW5lIFRJQ0tTX1BFUl91U0VDCQkJMjQKLQotLyoKLSAqICBUaGVzZSBhcmUgdXNlY29uZHMgTk9UIHRpY2tzLgotICoKLSAqLwotI2RlZmluZSBtU0VDXzEJCQkJMTAwMAotI2RlZmluZSBtU0VDXzUJCQkJKG1TRUNfMSAqIDUpCi0jZGVmaW5lIG1TRUNfMTAJCQkJKG1TRUNfMSAqIDEwKQotI2RlZmluZSBtU0VDXzI1CQkJCShtU0VDXzEgKiAyNSkKLSNkZWZpbmUgU0VDXzEJCQkJKG1TRUNfMSAqIDEwMDApCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tcGM4MjR4LmggYi9pbmNsdWRlL21wYzgyNHguaAppbmRleCAwY2Q3ODk4Li4zMGZjNzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21wYzgyNHguaAorKysgYi9pbmNsdWRlL21wYzgyNHguaApAQCAtMjk3LDYgKzI5Nyw3IEBACiAjZGVmaW5lIFBCRVNSCQkweDgwMDAwMGM3ICAvKiBQQ0kgQnVzIEVycm9yIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBQQkVBUgkJMHg4MDAwMDBjOCAgLyogUHJvY2Vzc29yL1BDSSBCdXMgRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lIEFNQk9SCQkweDgwMDAwMGUwICAvKiBBZGRyZXNzIE1hcCBCIE9wdGlvbnMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENNQkNSCQkweDgwMDAwMGUxICAvKiBQQ0kvTWVtb3J5IEJ1ZmZlciBDb25maWd1cmF0aW9uICovCiAjZGVmaW5lIE1DQ1IxCQkweDgwMDAwMGYwICAvKiBNZW1vcnkgQ29udHJvbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KICNkZWZpbmUgTUNDUjIJCTB4ODAwMDAwZjQgIC8qIE1lbW9yeSBDb250cm9sIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLwogI2RlZmluZSBNQ0NSMwkJMHg4MDAwMDBmOCAgLyogTWVtb3J5IENvbnRyb2wgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NlcmlhbC5oIGIvaW5jbHVkZS9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjA2NTQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zZXJpYWwuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9fU0VSSUFMX0hfXworI2RlZmluZSBfX1NFUklBTF9IX18KKworI2RlZmluZSBOQU1FU0laRSAxNgorI2RlZmluZSBDVExSU0laRSA4CisKK3N0cnVjdCBzZXJpYWxfZGV2aWNlIHsKKwljaGFyIG5hbWVbTkFNRVNJWkVdOworCWNoYXIgY3RscltDVExSU0laRV07CisKKwlpbnQgICgqaW5pdCkgKHZvaWQpOworCXZvaWQgKCpzZXRicmcpICh2b2lkKTsKKwlpbnQgKCpnZXRjKSAodm9pZCk7CisJaW50ICgqdHN0YykgKHZvaWQpOworCXZvaWQgKCpwdXRjKSAoY29uc3QgY2hhciBjKTsKKwl2b2lkICgqcHV0cykgKGNvbnN0IGNoYXIgKnMpOworCisJc3RydWN0IHNlcmlhbF9kZXZpY2UgKm5leHQ7Cit9OworCitleHRlcm4gc3RydWN0IHNlcmlhbF9kZXZpY2Ugc2VyaWFsX3NtY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHNlcmlhbF9kZXZpY2Ugc2VyaWFsX3NjY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHNlcmlhbF9kZXZpY2UgKiBkZWZhdWx0X3NlcmlhbF9jb25zb2xlICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc2VyaWFsX2luaXRpYWxpemUodm9pZCk7CitleHRlcm4gdm9pZCBzZXJpYWxfZGV2aWNlc19pbml0KHZvaWQpOworZXh0ZXJuIGludCBzZXJpYWxfYXNzaWduKGNoYXIgKiBuYW1lKTsKK2V4dGVybiB2b2lkIHNlcmlhbF9yZWluaXRfYWxsKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYl9hcm0vYm9hcmQuYyBiL2xpYl9hcm0vYm9hcmQuYwppbmRleCA5Y2ZmYjRlLi42ZjhjN2ZlIDEwMDY0NAotLS0gYS9saWJfYXJtL2JvYXJkLmMKKysrIGIvbGliX2FybS9ib2FyZC5jCkBAIC0yNTAsNiArMjUwLDkgQEAKICNlbmRpZiAvKiBDT05GSUdfVkZEICovCiAKICNpZmRlZiBDT05GSUdfTENECisjCWlmbmRlZiBQQUdFX1NJWkUKKyMJICBkZWZpbmUgUEFHRV9TSVpFIDQwOTYKKyMJZW5kaWYKIAkvKgogCSAqIHJlc2VydmUgbWVtb3J5IGZvciBMQ0QgZGlzcGxheSAoYWx3YXlzIGZ1bGwgcGFnZXMpCiAJICovCmRpZmYgLS1naXQgYS9saWJfcHBjL2JvYXJkLmMgYi9saWJfcHBjL2JvYXJkLmMKaW5kZXggNDJiNDY3MS4uOTc3NTNiMyAxMDA2NDQKLS0tIGEvbGliX3BwYy9ib2FyZC5jCisrKyBiL2xpYl9wcGMvYm9hcmQuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPHN0YXR1c19sZWQuaD4KICNlbmRpZgogI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPHNlcmlhbC5oPgogI2lmZGVmIENGR19BTExPQ19EUFJBTQogI2lmICEoZGVmaW5lZChDT05GSUdfODI2MCl8fGRlZmluZWQoQ09ORklHX01QQzg1NjApKQogI2luY2x1ZGUgPGNvbW1wcm9jLmg+CkBAIC01ODIsNiArNTgzLDEwIEBACiAKIAltb25pdG9yX2ZsYXNoX2xlbiA9ICh1bG9uZykmX19pbml0X2VuZCAtIGRlc3RfYWRkcjsKIAorI2lmZGVmIENPTkZJR19TRVJJQUxfTVVMVEkKKwlzZXJpYWxfaW5pdGlhbGl6ZSgpOworI2VuZGlmCisKIAkvKgogCSAqIFdlIGhhdmUgdG8gcmVsb2NhdGUgdGhlIGNvbW1hbmQgdGFibGUgbWFudWFsbHkKIAkgKi8KQEAgLTg3Miw3ICs4NzcsNiBAQAogICAgIGRlZmluZWQoQ09ORklHX0lQODYwKQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfSVZNTDI0KQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfSVZNUzgpCXx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19MV01PTikJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01QQzgyNjBBRFMpCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19NUEM4MjY2QURTKQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTVBDODU2MEFEUykJfHwgXApkaWZmIC0tZ2l0IGEvcG9zdC9ldGhlci5jIGIvcG9zdC9ldGhlci5jCmluZGV4IDQ3YWEzNTIuLjY2MDYyMGUgMTAwNjQ0Ci0tLSBhL3Bvc3QvZXRoZXIuYworKysgYi9wb3N0L2V0aGVyLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxuZXQuaD4KKyNpbmNsdWRlIDxzZXJpYWwuaD4KIAogI2RlZmluZSBNSU5fUEFDS0VUX0xFTkdUSAk2NAogI2RlZmluZSBNQVhfUEFDS0VUX0xFTkdUSAkyNTYKQEAgLTc3LDggKzc4LDYgQEAKIAogc3RhdGljIGNoYXIgKmN0bHJfbmFtZVsxXSA9IHsgIlNDQyIgfTsKIAotc3RhdGljIGludCB1c2VkX2J5X3VhcnRbMV0gPSB7IC0xIH07Ci0KIC8qIEV0aGVybmV0IFRyYW5zbWl0IGFuZCBSZWNlaXZlIEJ1ZmZlcnMgKi8KICNkZWZpbmUgREJVRl9MRU5HVEggIDE1MjAKIApAQCAtNDU4LDYgKzQ1Nyw3IEBACiAKIAlpbW1yLT5pbV9jcG0uY3Bfc2NjW3NjY19pbmRleF0uc2NjX2dzbXJsICY9CiAJCQl+KFNDQ19HU01STF9FTlIgfCBTQ0NfR1NNUkxfRU5UKTsKKwlpbW1yLT5pbV9pb3BvcnQuaW9wX3Bjc28gICY9ICB+KFBDX0VORVRfQ0xTTiB8IFBDX0VORVRfUkVOQSk7CiB9CiAKIHN0YXRpYyBpbnQgc2NjX3NlbmQgKGludCBpbmRleCwgdm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKQpAQCAtNTEzLDcgKzUxMyw3IEBACiAJCXJ4SWR4Kys7CiAJfQogCi0gIERvbmU6CitEb25lOgogCXJldHVybiBsZW5ndGg7CiB9CiAKQEAgLTU3OSwxNiArNTc5LDEwIEBACiAKIAlyZXMgPSAwOwogCi0gIERvbmU6CitEb25lOgogCiAJY3Rscl9wcm9jW2N0bHJdLmhhbHQgKGluZGV4KTsKIAotI2lmICFkZWZpbmVkKENPTkZJR184eHhfQ09OU19OT05FKQotCWlmICh1c2VkX2J5X3VhcnRbY3Rscl0gPT0gaW5kZXgpIHsKLQkJc2VyaWFsX2luaXQgKCk7Ci0JfQotI2VuZGlmCi0KIAkvKgogCSAqIFNDQzIgRXRoZXJuZXQgcGFyYW1ldGVyIFJBTSBzcGFjZSBvdmVybGFwcwogCSAqIHRoZSBTUEkgcGFyYW1ldGVyIFJBTSBzcGFjZS4gU28gd2UgbmVlZCB0byByZXN0b3JlCkBAIC02MTQsMTYgKzYwOCw2IEBACiAJaW50IHJlcyA9IDA7CiAJaW50IGk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MxKQotCXVzZWRfYnlfdWFydFtDVExSX1NDQ10gPSAwOwotI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDMikKLQl1c2VkX2J5X3VhcnRbQ1RMUl9TQ0NdID0gMTsKLSNlbGlmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NDQzMpCi0JdXNlZF9ieV91YXJ0W0NUTFJfU0NDXSA9IDI7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0M0KQotCXVzZWRfYnlfdWFydFtDVExSX1NDQ10gPSAzOwotI2VuZGlmCi0KIAljdGxyX3Byb2NbQ1RMUl9TQ0NdLmluaXQgPSBzY2NfaW5pdDsKIAljdGxyX3Byb2NbQ1RMUl9TQ0NdLmhhbHQgPSBzY2NfaGFsdDsKIAljdGxyX3Byb2NbQ1RMUl9TQ0NdLnNlbmQgPSBzY2Nfc2VuZDsKQEAgLTYzNSw2ICs2MTksOSBAQAogCQl9CiAJfQogCisjaWYgIWRlZmluZWQoQ09ORklHXzh4eF9DT05TX05PTkUpCisJc2VyaWFsX3JlaW5pdF9hbGwgKCk7CisjZW5kaWYKIAlyZXR1cm4gcmVzOwogfQogCmRpZmYgLS1naXQgYS9wb3N0L3VhcnQuYyBiL3Bvc3QvdWFydC5jCmluZGV4IGY2OTM2Y2EuLjIzYmYwMzYgMTAwNjQ0Ci0tLSBhL3Bvc3QvdWFydC5jCisrKyBiL3Bvc3QvdWFydC5jCkBAIC00OCw3ICs0OCw3IEBACiAjZXJyb3IgIkFwcGFyZW50bHkgYSBiYWQgY29uZmlndXJhdGlvbiwgcGxlYXNlIGZpeC4iCiAjZW5kaWYKICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8bmV0Lmg+CisjaW5jbHVkZSA8c2VyaWFsLmg+CiAKICNkZWZpbmUgQ1RMUl9TTUMgMAogI2RlZmluZSBDVExSX1NDQyAxCkBAIC02NSwxNCArNjUsMTMgQEAKIAogc3RhdGljIHN0cnVjdCB7CiAJdm9pZCAoKmluaXQpIChpbnQgaW5kZXgpOworCXZvaWQgKCpoYWx0KSAoaW50IGluZGV4KTsKIAl2b2lkICgqcHV0YykgKGludCBpbmRleCwgY29uc3QgY2hhciBjKTsKIAlpbnQgKCpnZXRjKSAoaW50IGluZGV4KTsKIH0gY3Rscl9wcm9jWzJdOwogCiBzdGF0aWMgY2hhciAqY3Rscl9uYW1lWzJdID0geyAiU01DIiwgIlNDQyIgfTsKIAotc3RhdGljIGludCB1c2VkX2J5X3VhcnRbMl0gPSB7IC0xLCAtMSB9OwotCiBzdGF0aWMgaW50IHByb2ZmX3NtY1tdID0geyBQUk9GRl9TTUMxLCBQUk9GRl9TTUMyIH07CiBzdGF0aWMgaW50IHByb2ZmX3NjY1tdID0KIAkJeyBQUk9GRl9TQ0MxLCBQUk9GRl9TQ0MyLCBQUk9GRl9TQ0MzLCBQUk9GRl9TQ0M0IH07CkBAIC0yMTIsNiArMjExLDEwIEBACiAJc3AtPnNtY19zbWNtciB8PSBTTUNNUl9SRU4gfCBTTUNNUl9URU47CiB9CiAKK3N0YXRpYyB2b2lkIHNtY19oYWx0KGludCBzbWNfaW5kZXgpCit7Cit9CisKIHN0YXRpYyB2b2lkIHNtY19wdXRjIChpbnQgc21jX2luZGV4LCBjb25zdCBjaGFyIGMpCiB7CiAJdm9sYXRpbGUgY2JkX3QgKnRiZGY7CkBAIC00MTksNiArNDIyLDE1IEBACiAJc3AtPnNjY19nc21ybCB8PSAoU0NDX0dTTVJMX0VOUiB8IFNDQ19HU01STF9FTlQpOwogfQogCitzdGF0aWMgdm9pZCBzY2NfaGFsdChpbnQgc2NjX2luZGV4KQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gJihpbS0+aW1fY3BtKTsKKwl2b2xhdGlsZSBzY2NfdCAqc3AgPSAoc2NjX3QgKikgJiAoY3AtPmNwX3NjY1tzY2NfaW5kZXhdKTsKKworCXNwLT5zY2NfZ3NtcmwgJj0gfihTQ0NfR1NNUkxfRU5SIHwgU0NDX0dTTVJMX0VOVCB8IFNDQ19HU01STF9ESUFHX0xFKTsKK30KKwogc3RhdGljIHZvaWQgc2NjX3B1dGMgKGludCBzY2NfaW5kZXgsIGNvbnN0IGNoYXIgYykKIHsKIAl2b2xhdGlsZSBjYmRfdCAqdGJkZjsKQEAgLTQ5NiwxMiArNTA4LDYgQEAKIAljaGFyIHRlc3Rfc3RyW10gPSAiKioqIFVBUlQgVGVzdCBTdHJpbmcgKioqXHJcbiI7CiAJaW50IGk7CiAKLSNpZiAhZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfTk9ORSkKLQlpZiAodXNlZF9ieV91YXJ0W2N0bHJdID09IGluZGV4KSB7Ci0JCXdoaWxlIChjdGxyX3Byb2NbY3Rscl0uZ2V0YyAoaW5kZXgpICE9IC0xKTsKLQl9Ci0jZW5kaWYKLQogCWN0bHJfcHJvY1tjdGxyXS5pbml0IChpbmRleCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mICh0ZXN0X3N0cikgLSAxOyBpKyspIHsKQEAgLTUxMiwxMyArNTE4LDggQEAKIAogCXJlcyA9IDA7CiAKLSAgRG9uZToKLQotI2lmICFkZWZpbmVkKENPTkZJR184eHhfQ09OU19OT05FKQotCWlmICh1c2VkX2J5X3VhcnRbY3Rscl0gPT0gaW5kZXgpIHsKLQkJc2VyaWFsX2luaXQgKCk7Ci0JfQotI2VuZGlmCitEb25lOgorCWN0bHJfcHJvY1tjdGxyXS5oYWx0IChpbmRleCk7CiAKIAlpZiAocmVzICE9IDApIHsKIAkJcG9zdF9sb2cgKCJ1YXJ0ICVzJWQgdGVzdCBmYWlsZWRcbiIsCkBAIC01MzMsMjUgKzUzNCwxMyBAQAogCWludCByZXMgPSAwOwogCWludCBpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU01DMSkKLQl1c2VkX2J5X3VhcnRbQ1RMUl9TTUNdID0gMDsKLSNlbGlmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NNQzIpCi0JdXNlZF9ieV91YXJ0W0NUTFJfU01DXSA9IDE7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0MxKQotCXVzZWRfYnlfdWFydFtDVExSX1NDQ10gPSAwOwotI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfU0NDMikKLQl1c2VkX2J5X3VhcnRbQ1RMUl9TQ0NdID0gMTsKLSNlbGlmIGRlZmluZWQoQ09ORklHXzh4eF9DT05TX1NDQzMpCi0JdXNlZF9ieV91YXJ0W0NUTFJfU0NDXSA9IDI7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TQ0M0KQotCXVzZWRfYnlfdWFydFtDVExSX1NDQ10gPSAzOwotI2VuZGlmCi0KIAljdGxyX3Byb2NbQ1RMUl9TTUNdLmluaXQgPSBzbWNfaW5pdDsKKwljdGxyX3Byb2NbQ1RMUl9TTUNdLmhhbHQgPSBzbWNfaGFsdDsKIAljdGxyX3Byb2NbQ1RMUl9TTUNdLnB1dGMgPSBzbWNfcHV0YzsKIAljdGxyX3Byb2NbQ1RMUl9TTUNdLmdldGMgPSBzbWNfZ2V0YzsKIAogCWN0bHJfcHJvY1tDVExSX1NDQ10uaW5pdCA9IHNjY19pbml0OworCWN0bHJfcHJvY1tDVExSX1NDQ10uaGFsdCA9IHNjY19oYWx0OwogCWN0bHJfcHJvY1tDVExSX1NDQ10ucHV0YyA9IHNjY19wdXRjOwogCWN0bHJfcHJvY1tDVExSX1NDQ10uZ2V0YyA9IHNjY19nZXRjOwogCkBAIC01NjEsNiArNTUwLDEwIEBACiAJCX0KIAl9CiAKKyNpZiAhZGVmaW5lZChDT05GSUdfOHh4X0NPTlNfTk9ORSkKKwlzZXJpYWxfcmVpbml0X2FsbCAoKTsKKyNlbmRpZgorCiAJcmV0dXJuIHJlczsKIH0KIAo=