ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGE3ZWE4ZTMuLmQ3ODM1OWYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtNTE4LDYgKzUxOCwxNCBAQAogRTogemFiQHphYmJvLm5ldAogRDogbWFlc3RybyBwY2kgc291bmQKIAorTTogRGF2aWQgQnJvd25lbGwKK0Q6IEtlcm5lbCBlbmdpbmVlciwgbWVudG9yLCBhbmQgZnJpZW5kLiAgTWFpbnRhaW5lZCBVU0IgRUhDSSBhbmQKK0Q6IGdhZGdldCBsYXllcnMsIFNQSSBzdWJzeXN0ZW0sIEdQSU8gc3Vic3lzdGVtLCBhbmQgbW9yZSB0aGFuIGEgZmV3CitEOiBkZXZpY2UgZHJpdmVycy4gIEhpcyBlbmNvdXJhZ2VtZW50IGFsc28gaGVscGVkIG1hbnkgZW5naW5lZXJzIGdldAorRDogc3RhcnRlZCB3b3JraW5nIG9uIHRoZSBMaW51eCBrZXJuZWwuICBEYXZpZCBwYXNzZWQgYXdheSBpbiBlYXJseQorRDogMjAxMSwgYW5kIHdpbGwgYmUgZ3JlYXRseSBtaXNzZWQuCitXOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMS80LzUvMzYKKwogTjogR2FyeSBCcnViYWtlcgogRTogeGF2eWVyQGl4Lm5ldGNvbS5jb20KIEQ6IFVTQiBTZXJpYWwgRW1wZWcgRW1wZWctY2FyIE1hcmsgSS9JSSBEcml2ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNTQzOGEyZC4uZmQyNDhhMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC05OTksNyArOTk5LDEwIEBACiAJCQlXaXRoIHRoaXMgb3B0aW9uIG9uIGV2ZXJ5IHVubWFwX3NpbmdsZSBvcGVyYXRpb24gd2lsbAogCQkJcmVzdWx0IGluIGEgaGFyZHdhcmUgSU9UTEIgZmx1c2ggb3BlcmF0aW9uIGFzIG9wcG9zZWQKIAkJCXRvIGJhdGNoaW5nIHRoZW0gZm9yIHBlcmZvcm1hbmNlLgotCisJCXNwX29mZiBbRGVmYXVsdCBPZmZdCisJCQlCeSBkZWZhdWx0LCBzdXBlciBwYWdlIHdpbGwgYmUgc3VwcG9ydGVkIGlmIEludGVsIElPTU1VCisJCQloYXMgdGhlIGNhcGFiaWxpdHkuIFdpdGggdGhpcyBvcHRpb24sIHN1cGVyIHBhZ2Ugd2lsbAorCQkJbm90IGJlIHN1cHBvcnRlZC4KIAlpbnRyZW1hcD0JW1g4Ni02NCwgSW50ZWwtSU9NTVVdCiAJCQlGb3JtYXQ6IHsgb24gKGRlZmF1bHQpIHwgb2ZmIHwgbm9zaWQgfQogCQkJb24JZW5hYmxlIEludGVycnVwdCBSZW1hcHBpbmcgKGRlZmF1bHQpCkBAIC0yNTk1LDYgKzI1OTgsOCBAQAogCQkJCQl1bmxvY2sgZWplY3RhYmxlIG1lZGlhKTsKIAkJCQltID0gTUFYX1NFQ1RPUlNfNjQgKGRvbid0IHRyYW5zZmVyIG1vcmUKIAkJCQkJdGhhbiA2NCBzZWN0b3JzID0gMzIgS0IgYXQgYSB0aW1lKTsKKwkJCQluID0gSU5JVElBTF9SRUFEMTAgKGZvcmNlIGEgcmV0cnkgb2YgdGhlCisJCQkJCWluaXRpYWwgUkVBRCgxMCkgY29tbWFuZCk7CiAJCQkJbyA9IENBUEFDSVRZX09LIChhY2NlcHQgdGhlIGNhcGFjaXR5CiAJCQkJCXJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UpOwogCQkJCXIgPSBJR05PUkVfUkVTSURVRSAodGhlIGRldmljZSByZXBvcnRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9NYWtlZmlsZQppbmRleCBiZWJhYzZiLi4wYWMzNDIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjIFRoaXMgY3JlYXRlcyB0aGUgZGVtb25zdHJhdGlvbiB1dGlsaXR5ICJsZ3Vlc3QiIHdoaWNoIHJ1bnMgYSBMaW51eCBndWVzdC4KLSMgTWlzc2luZyBoZWFkZXJzPyAgQWRkICItSS4uLy4uL2luY2x1ZGUgLUkuLi8uLi9hcmNoL3g4Ni9pbmNsdWRlIgorIyBNaXNzaW5nIGhlYWRlcnM/ICBBZGQgIi1JLi4vLi4vLi4vaW5jbHVkZSAtSS4uLy4uLy4uL2FyY2gveDg2L2luY2x1ZGUiCiBDRkxBR1M6PS1tMzIgLVdhbGwgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtTzMgLVVfRk9SVElGWV9TT1VSQ0UKIAogYWxsOiBsZ3Vlc3QKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvbGd1ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC5jCmluZGV4IGQ5ZGE3ZTEuLmNkOWQ2YWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvbGd1ZXN0LmMKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19ybmcuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcmluZy5oPgogI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2xpbnV4L2xndWVzdF9sYXVuY2hlci5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvbGludXgvbGd1ZXN0X2xhdW5jaGVyLmgiCiAvKkw6MTEwCiAgKiBXZSBjYW4gaWdub3JlIHRoZSA0MiBpbmNsdWRlIGZpbGVzIHdlIG5lZWQgZm9yIHRoaXMgcHJvZ3JhbSwgYnV0IEkgZG8gd2FudAogICogdG8gZHJhdyBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBrZXJuZWwtc3R5bGUgdHlwZXMuCkBAIC0xMzUsOSArMTM1LDYgQEAKIAkvKiBJcyBpdCBvcGVyYXRpb25hbCAqLwogCWJvb2wgcnVubmluZzsKIAotCS8qIERvZXMgR3Vlc3Qgd2FudCBhbiBpbnRycnVwdCBvbiBlbXB0eT8gKi8KLQlib29sIGlycV9vbl9lbXB0eTsKLQogCS8qIERldmljZS1zcGVjaWZpYyBkYXRhLiAqLwogCXZvaWQgKnByaXY7CiB9OwpAQCAtNjM3LDEwICs2MzQsNyBAQAogCiAJLyogSWYgdGhleSBkb24ndCB3YW50IGFuIGludGVycnVwdCwgZG9uJ3Qgc2VuZCBvbmUuLi4gKi8KIAlpZiAodnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKSB7Ci0JCS8qIC4uLiB1bmxlc3MgdGhleSd2ZSBhc2tlZCB1cyB0byBmb3JjZSBvbmUgb24gZW1wdHkuICovCi0JCWlmICghdnEtPmRldi0+aXJxX29uX2VtcHR5Ci0JCSAgICB8fCBsZ19sYXN0X2F2YWlsKHZxKSAhPSB2cS0+dnJpbmcuYXZhaWwtPmlkeCkKLQkJCXJldHVybjsKKwkJcmV0dXJuOwogCX0KIAogCS8qIFNlbmQgdGhlIEd1ZXN0IGFuIGludGVycnVwdCB0ZWxsIHRoZW0gd2UgdXNlZCBzb21ldGhpbmcgdXAuICovCkBAIC0xMDU3LDE1ICsxMDUxLDYgQEAKIAljbG9zZSh2cS0+ZXZlbnRmZCk7CiB9CiAKLXN0YXRpYyBib29sIGFjY2VwdGVkX2ZlYXR1cmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0KQotewotCWNvbnN0IHU4ICpmZWF0dXJlcyA9IGdldF9mZWF0dXJlX2JpdHMoZGV2KSArIGRldi0+ZmVhdHVyZV9sZW47Ci0KLQlpZiAoZGV2LT5mZWF0dXJlX2xlbiA8IGJpdCAvIENIQVJfQklUKQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIGZlYXR1cmVzW2JpdCAvIENIQVJfQklUXSAmICgxIDw8IChiaXQgJSBDSEFSX0JJVCkpOwotfQotCiBzdGF0aWMgdm9pZCBzdGFydF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTA3OSw4ICsxMDY0LDYgQEAKIAkJdmVyYm9zZSgiICUwMngiLCBnZXRfZmVhdHVyZV9iaXRzKGRldikKIAkJCVtkZXYtPmZlYXR1cmVfbGVuK2ldKTsKIAotCWRldi0+aXJxX29uX2VtcHR5ID0gYWNjZXB0ZWRfZmVhdHVyZShkZXYsIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSk7Ci0KIAlmb3IgKHZxID0gZGV2LT52cTsgdnE7IHZxID0gdnEtPm5leHQpIHsKIAkJaWYgKHZxLT5zZXJ2aWNlKQogCQkJY3JlYXRlX3RocmVhZCh2cSk7CkBAIC0xNTY0LDcgKzE1NDcsNiBAQAogCS8qIFNldCB1cCB0aGUgdHVuIGRldmljZS4gKi8KIAljb25maWd1cmVfZGV2aWNlKGlwZmQsIHRhcGlmLCBpcCk7CiAKLQlhZGRfZmVhdHVyZShkZXYsIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSk7CiAJLyogRXhwZWN0IEd1ZXN0IHRvIGhhbmRsZSBldmVyeXRoaW5nIGV4Y2VwdCBVRk8gKi8KIAlhZGRfZmVhdHVyZShkZXYsIFZJUlRJT19ORVRfRl9DU1VNKTsKIAlhZGRfZmVhdHVyZShkZXYsIFZJUlRJT19ORVRfRl9HVUVTVF9DU1VNKTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMjk4MDFmNy4uZTUwZmM2ZSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE3MzksNyArMTczOSw3IEBACiBGOglkcml2ZXJzL25ldC9lbmljLwogCiBDSVJSVVMgTE9HSUMgRVA5M1hYIEVUSEVSTkVUIERSSVZFUgotTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KK006CUhhcnRsZXkgU3dlZXRlbiA8aHN3ZWV0ZW5AdmlzaW9uZW5ncmF2ZXJzLmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTQyNTIsOCArNDI1Miw3IEBACiBGOglpbmNsdWRlL2xpbnV4L21tYy8KIAogTVVMVElNRURJQSBDQVJEIChNTUMpIEVUQy4gT1ZFUiBTUEkKLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotUzoJT2RkIEZpeGVzCitTOglPcnBoYW4KIEY6CWRyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jCiBGOglpbmNsdWRlL2xpbnV4L3NwaS9tbWNfc3BpLmgKIApAQCAtNDYwMyw3ICs0NjAyLDYgQEAKIAogT01BUCBVU0IgU1VQUE9SVAogTToJRmVsaXBlIEJhbGJpIDxiYWxiaUB0aS5jb20+Ci1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2JhbGJpL3VzYi5naXQKQEAgLTQ5NDcsNiArNDk0NSw3IEBACiBGOglkcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXVuaWNvcmUzMmlvLmgKIEY6CWRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHV2My5jCiBGOglkcml2ZXJzL3ZpZGVvL2ZiLXB1djMuYworRjoJZHJpdmVycy9ydGMvcnRjLXB1djMuYwogCiBQTUMgU0lFUlJBIE1heFJBSUQgRFJJVkVSCiBNOglBbmlsIFJhdmluZHJhbmF0aCA8YW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20+CkBAIC01OTg0LDcgKzU5ODMsNiBAQAogRjoJZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXgqCiAKIFNQSSBTVUJTWVNURU0KLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgogTDoJc3BpLWRldmVsLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9zcGktZGV2ZWwtZ2VuZXJhbC9saXN0LwpAQCAtNjQzMiw5ICs2NDMwLDggQEAKIEY6CWRyaXZlcnMvdXNiL21pc2MvcmlvNTAwKgogCiBVU0IgRUhDSSBEUklWRVIKLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwotUzoJT2RkIEZpeGVzCitTOglPcnBoYW4KIEY6CURvY3VtZW50YXRpb24vdXNiL2VoY2kudHh0CiBGOglkcml2ZXJzL3VzYi9ob3N0L2VoY2kqCiAKQEAgLTY0NDgsOSArNjQ0NSwxMCBAQAogRjoJZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS8KIAogVVNCIEdBREdFVC9QRVJJUEhFUkFMIFNVQlNZU1RFTQotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitNOglGZWxpcGUgQmFsYmkgPGJhbGJpQHRpLmNvbT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYmFsYmkvdXNiLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy91c2IvZ2FkZ2V0LwogRjoJaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0KgpAQCAtNjQ5Miw5ICs2NDkwLDggQEAKIEY6CXNvdW5kL3VzYi9taWRpLioKIAogVVNCIE9IQ0kgRFJJVkVSCi1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU9kZCBGaXhlcworUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3VzYi9vaGNpLnR4dAogRjoJZHJpdmVycy91c2IvaG9zdC9vaGNpKgogCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGFmYjhlMGQuLjcyYzBlMzIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDMKIFBBVENITEVWRUwgPSAwCiBTVUJMRVZFTCA9IDAKLUVYVFJBVkVSU0lPTiA9IC1yYzEKK0VYVFJBVkVSU0lPTiA9IC1yYzIKIE5BTUUgPSBTbmVha3kgV2Vhc2VsCiAKICMgKkRPQ1VNRU5UQVRJT04qCkBAIC0zNzgsNyArMzc4LDcgQEAKIAogIyBSZWFkIEtFUk5FTFJFTEVBU0UgZnJvbSBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSAoaWYgaXQgZXhpc3RzKQogS0VSTkVMUkVMRUFTRSA9ICQoc2hlbGwgY2F0IGluY2x1ZGUvY29uZmlnL2tlcm5lbC5yZWxlYXNlIDI+IC9kZXYvbnVsbCkKLUtFUk5FTFZFUlNJT04gPSAkKFZFUlNJT04pLiQoUEFUQ0hMRVZFTCkuJChTVUJMRVZFTCkkKEVYVFJBVkVSU0lPTikKK0tFUk5FTFZFUlNJT04gPSAkKFZFUlNJT04pJChpZiAkKFBBVENITEVWRUwpLC4kKFBBVENITEVWRUwpJChpZiAkKFNVQkxFVkVMKSwuJChTVUJMRVZFTCkpKSQoRVhUUkFWRVJTSU9OKQogCiBleHBvcnQgVkVSU0lPTiBQQVRDSExFVkVMIFNVQkxFVkVMIEtFUk5FTFJFTEVBU0UgS0VSTkVMVkVSU0lPTgogZXhwb3J0IEFSQ0ggU1JDQVJDSCBDT05GSUdfU0hFTEwgSE9TVENDIEhPU1RDRkxBR1MgQ1JPU1NfQ09NUElMRSBBUyBMRCBDQwpAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAogZGVmaW5lIGZpbGVjaGtfdmVyc2lvbi5oCiAJKGVjaG8gXCNkZWZpbmUgTElOVVhfVkVSU0lPTl9DT0RFICQoc2hlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlleHByICQoVkVSU0lPTikgXCogNjU1MzYgKyAkKFBBVENITEVWRUwpIFwqIDI1NiArICQoU1VCTEVWRUwpKTsgICAgIFwKKwlleHByICQoVkVSU0lPTikgXCogNjU1MzYgKyAwJChQQVRDSExFVkVMKSBcKiAyNTYgKyAwJChTVUJMRVZFTCkpOyAgICBcCiAJZWNobyAnI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSknOykKIGVuZGVmCiAKQEAgLTExMTAsMTEgKzExMTAsNiBAQAogCiBQSE9OWSArPSBfbW9kaW5zdF8KIF9tb2RpbnN0XzoKLQlAaWYgWyAteiAiYCQoREVQTU9EKSAtViAyPi9kZXYvbnVsbCB8IGdyZXAgbW9kdWxlLWluaXQtdG9vbHNgIiBdOyB0aGVuIFwKLQkJZWNobyAiV2FybmluZzogeW91IG1heSBuZWVkIHRvIGluc3RhbGwgbW9kdWxlLWluaXQtdG9vbHMiOyBcCi0JCWVjaG8gIlNlZSBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrL2RvY3MvcG9zdC1oYWxsb3dlZW4tMi42LnR4dCI7XAotCQlzbGVlcCAxOyBcCi0JZmkKIAlAcm0gLXJmICQoTU9ETElCKS9rZXJuZWwKIAlAcm0gLWYgJChNT0RMSUIpL3NvdXJjZQogCUBta2RpciAtcCAkKE1PRExJQikva2VybmVsCkBAIC0xNTMxLDEyICsxNTI2LDcgQEAKIAogIyBSdW4gZGVwbW9kIG9ubHkgaWYgd2UgaGF2ZSBTeXN0ZW0ubWFwIGFuZCBkZXBtb2QgaXMgZXhlY3V0YWJsZQogcXVpZXRfY21kX2RlcG1vZCA9IERFUE1PRCAgJChLRVJORUxSRUxFQVNFKQotICAgICAgY21kX2RlcG1vZCA9IFwKLQlpZiBbIC1yIFN5c3RlbS5tYXAgLWEgLXggJChERVBNT0QpIF07IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCSQoREVQTU9EKSAtYWUgLUYgU3lzdGVtLm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCSQoaWYgJChzdHJpcCAkKElOU1RBTExfTU9EX1BBVEgpKSwgLWIgJChJTlNUQUxMX01PRF9QQVRIKSApICAgICBcCi0JCSQoS0VSTkVMUkVMRUFTRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZmkKKyAgICAgIGNtZF9kZXBtb2QgPSAkKHNyY3RyZWUpL3NjcmlwdHMvZGVwbW9kLnNoICQoREVQTU9EKSAkKEtFUk5FTFJFTEVBU0UpCiAKICMgQ3JlYXRlIHRlbXBvcmFyeSBkaXIgZm9yIG1vZHVsZSBzdXBwb3J0IGZpbGVzCiAjIGNsZWFuIGl0IHVwIG9ubHkgd2hlbiBidWlsZGluZyBhbGwgbW9kdWxlcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDgyMDc5NTQuLjFkNGI2NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTQwMiwxMSArNDAyLDE1IEBACiAJfQogfTsKIAorc3RhdGljIHU2NCBlcDkzeHhfZXRoX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2V0aF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImVwOTN4eC1ldGgiLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZXA5M3h4X2V0aF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZXA5M3h4X2V0aF9kYXRhLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkuZG1hX21hc2sJCT0gJmVwOTN4eF9ldGhfZG1hX21hc2ssCiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXA5M3h4X2V0aF9yZXNvdXJjZSksCiAJLnJlc291cmNlCT0gZXA5M3h4X2V0aF9yZXNvdXJjZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jCmluZGV4IGQ4NTU5MzQuLmY1YTUyMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYwpAQCAtMjg0LDE0ICsyODQsMTUgQEAKIAlkbWFfYmFzZSA9IGlvcmVtYXAocmVzWzBdLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXNbMF0pKTsKIAlpZiAoIWRtYV9iYXNlKSB7CiAJCXByX2VycigiJXM6IFVuYWJsZSB0byBpb3JlbWFwXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKIAl9CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByZXMsIEFSUkFZX1NJWkUocmVzKSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogVW5hYmxlIHRvIGFkZCByZXNvdXJjZXMgZm9yICVzJWRcbiIsCiAJCQlfX2Z1bmNfXywgcGRldi0+bmFtZSwgcGRldi0+aWQpOwotCQlnb3RvIGV4aXRfZGV2aWNlX2RlbDsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CiAJfQogCiAJcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX3N5c3RlbV9kbWFfcGxhdF9pbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC0yOTksNyArMzAwLDcgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSAncCcgZm9yICVzXG4iLAogCQkJX19mdW5jX18sIHBkZXYtPm5hbWUpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKwkJZ290byBleGl0X2RldmljZV9kZWw7CiAJfQogCiAJZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX2RtYV9kZXZfYXR0ciksIEdGUF9LRVJORUwpOwpAQCAtMzgwLDEwICszODEsMTAgQEAKIAlrZnJlZShkKTsKIGV4aXRfcmVsZWFzZV9wOgogCWtmcmVlKHApOwotZXhpdF9kZXZpY2VfcHV0OgotCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiBleGl0X2RldmljZV9kZWw6CiAJcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2KTsKK2V4aXRfZGV2aWNlX3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKaW5kZXggZDU0OTY5Yi4uNWRlNmVhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKQEAgLTI2LDEzICsyNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCmluZGV4IGFlMjk2M2EuLjVkYWM5NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCkBAIC02MjIsMTkgKzYyMiwxOSBAQAogCQkJIE9NQVBfTVVYX01PREUwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDFfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDFfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAwLAogCS5wYWRzCQk9IHNlcmlhbDFfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDFfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMSwKIAkucGFkcwkJPSBzZXJpYWwyX3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWwyX3BhZHMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsM19kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsM19kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDIsCiAJLnBhZHMJCT0gc2VyaWFsM19wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsM19wYWRzKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKaW5kZXggNzNmYTkwYi4uNjNkZTJkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCXsgRVRIX0tTODg1MV9JUlEsCUdQSU9GX0lOLAkJImV0aF9pcnEiCX0sCiB9OwogCi1zdGF0aWMgaW50IG9tYXBfZXRoZXJuZXRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21hcF9ldGhlcm5ldF9pbml0KHZvaWQpCiB7CiAJaW50IHN0YXR1czsKIApAQCAtMzIyLDYgKzMyMiw3IEBACiAJCS5ncGlvX3dwCT0gLUVJTlZBTCwKIAkJLm5vbnJlbW92YWJsZSAgID0gdHJ1ZSwKIAkJLm9jcl9tYXNrCT0gTU1DX1ZERF8yOV8zMCwKKwkJLm5vX29mZl9pbml0CT0gdHJ1ZSwKIAl9LAogCXsKIAkJLm1tYwkJPSAxLApAQCAtNjgxLDE5ICs2ODIsMTkgQEAKIAkJCSBPTUFQX1BJTl9PVVRQVVQgfCBPTUFQX01VWF9NT0RFMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMSwKIAkucGFkcwkJPSBzZXJpYWwyX3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWwyX3BhZHMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsM19kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsM19kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDIsCiAJLnBhZHMJCT0gc2VyaWFsM19wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsM19wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDRfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDRfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAzLAogCS5wYWRzCQk9IHNlcmlhbDRfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDRfcGFkcyksCkBAIC03MjksNyArNzMwLDcgQEAKIAogCWlmIChvbWFwX3JldigpID09IE9NQVA0NDMwX1JFVl9FUzFfMCkKIAkJcGFja2FnZSA9IE9NQVBfUEFDS0FHRV9DQkw7Ci0Jb21hcDRfbXV4X2luaXQoYm9hcmRfbXV4LCBwYWNrYWdlKTsKKwlvbWFwNF9tdXhfaW5pdChib2FyZF9tdXgsIE5VTEwsIHBhY2thZ2UpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBzZHA0NDMwX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHA0NDMwX2NvbmZpZyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCmluZGV4IGYzYmViOGUuLmIxMjRiZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCkBAIC0yNywxMyArMjcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvbGVkLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYwppbmRleCBjNjMxMTViLi43NzQ1NmRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKQEAgLTYzLDggKzYzLDYgQEAKICNkZWZpbmUgU0JfVDM1X1NNU0M5MTFYX0NTCTQKICNkZWZpbmUgU0JfVDM1X1NNU0M5MTFYX0dQSU8JNjUKIAotI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKLQogI2lmIGRlZmluZWQoQ09ORklHX1NNU0M5MTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTVNDOTExWF9NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMtc21zYzkxMXguaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwppbmRleCAwOGYwOGU4Li5jM2E5ZmQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCkBAIC00OCw2ICs0OCw3IEBACiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAiY29tbW9uLWJvYXJkLWRldmljZXMuaCIKIAogI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19HUElPX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgY21fdDM1MTdfbGVkc1tdID0gewpAQCAtMTc3LDcgKzE3OCw3IEBACiAJLnJlc2V0X2dwaW9fcG9ydFsyXSAgPSAtRUlOVkFMLAogfTsKIAotc3RhdGljIGludCBjbV90MzUxN19pbml0X3VzYmgodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNtX3QzNTE3X2luaXRfdXNiaCh2b2lkKQogewogCWludCBlcnI7CiAKQEAgLTIwMyw4ICsyMDQsNiBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfT01BUDJfTU9EVUxFKQotI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNtX3QzNTE3X25hbmRfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUgICAgICAgICAgID0gInhsb2FkZXIiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYwppbmRleCBjZjUyMGQ3Li4zNDk1NmVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYwpAQCAtNjEsOCArNjEsNiBAQAogI2luY2x1ZGUgInRpbWVyLWdwLmgiCiAjaW5jbHVkZSAiY29tbW9uLWJvYXJkLWRldmljZXMuaCIKIAotI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKLQogI2RlZmluZSBPTUFQX0RNOTAwMF9HUElPX0lSUQkyNQogI2RlZmluZSBPTUFQM19ERVZLSVRfVFNfR1BJTwkyNwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggYmU3MTQyNi4uN2YyMWQyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtNTQsOCArNTQsNiBAQAogI2luY2x1ZGUgInBtLmgiCiAjaW5jbHVkZSAiY29tbW9uLWJvYXJkLWRldmljZXMuaCIKIAotI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKLQogLyoKICAqIE9NQVAzIEJlYWdsZSByZXZpc2lvbgogICogUnVuIHRpbWUgZGV0ZWN0aW9uIG9mIEJlYWdsZSByZXZpc2lvbiBpcyBkb25lIGJ5IHJlYWRpbmcgR1BJTy4KQEAgLTEwNiw2ICsxMDQsOSBAQAogCWJlYWdsZV9yZXYgPSBncGlvX2dldF92YWx1ZSgxNzEpIHwgKGdwaW9fZ2V0X3ZhbHVlKDE3MikgPDwgMSkKIAkJCXwgKGdwaW9fZ2V0X3ZhbHVlKDE3MykgPDwgMik7CiAKKwlncGlvX2ZyZWVfYXJyYXkob21hcDNfYmVhZ2xlX3Jldl9ncGlvcywKKwkJCUFSUkFZX1NJWkUob21hcDNfYmVhZ2xlX3Jldl9ncGlvcykpOworCiAJc3dpdGNoIChiZWFnbGVfcmV2KSB7CiAJY2FzZSA3OgogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMyBCZWFnbGUgUmV2OiBBeC9CeFxuIik7CkBAIC01NzksNiArNTgwLDkgQEAKIAlvbWFwX25hbmRfZmxhc2hfaW5pdChOQU5EX0JVU1dJRFRIXzE2LCBvbWFwM2JlYWdsZV9uYW5kX3BhcnRpdGlvbnMsCiAJCQkgICAgIEFSUkFZX1NJWkUob21hcDNiZWFnbGVfbmFuZF9wYXJ0aXRpb25zKSk7CiAKKwkvKiBFbnN1cmUgbXNlY3VyZSBpcyBtdXgnZCB0byBiZSBhYmxlIHRvIHNldCB0aGUgUlRDLiAqLworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzeXNfZHJtX21zZWN1cmUiLCBPTUFQX1BJTl9PRkZfT1VUUFVUX0hJR0gpOworCiAJLyogRW5zdXJlIFNEUkMgcGlucyBhcmUgbXV4J2QgZm9yIHNlbGYtcmVmcmVzaCAqLwogCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTAiLCBPTUFQX1BJTl9PVVRQVVQpOwogCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTEiLCBPTUFQX1BJTl9PVVRQVVQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggMWQxMDczNi4uMmEwYmI0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CkBAIC00MSw3ICs0Miw2IEBACiAKICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9tY3NwaS5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CkBAIC01Nyw4ICs1Nyw2IEBACiAjZGVmaW5lIFBBTkRPUkFfV0lGSV9OUkVTRVRfR1BJTwkyMwogI2RlZmluZSBPTUFQM19QQU5ET1JBX1RTX0dQSU8JCTk0CiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQkJU1pfMTI4SwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb21hcDNwYW5kb3JhX25hbmRfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUgICAgICAgICAgID0gInhsb2FkZXIiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCmluZGV4IDgyODcyZDcuLjVmNjQ5ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKQEAgLTU2LDggKzU2LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJU1pfMTI4SwotCiAjZGVmaW5lIE9NQVAzX0FDX0dQSU8JCTEzNgogI2RlZmluZSBPTUFQM19UU19HUElPCQkxNjIKICNkZWZpbmUgVEJfQkxfUFdNX1RJTUVSCQk5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jCmluZGV4IDkwNDg1ZmMuLjBjZmUyMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jCkBAIC01MjYsMTkgKzUyNiwxOSBAQAogCQkJIE9NQVBfUElOX09VVFBVVCB8IE9NQVBfTVVYX01PREUwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDJfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDJfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZCAgICAgICAgICAgICA9IDEsCiAJLnBhZHMgICAgICAgICAgID0gc2VyaWFsMl9wYWRzLAogCS5wYWRzX2NudCAgICAgICA9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZCAgICAgICAgICAgICA9IDIsCiAJLnBhZHMgICAgICAgICAgID0gc2VyaWFsM19wYWRzLAogCS5wYWRzX2NudCAgICAgICA9IEFSUkFZX1NJWkUoc2VyaWFsM19wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDRfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDRfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZCAgICAgICAgICAgICA9IDMsCiAJLnBhZHMgICAgICAgICAgID0gc2VyaWFsNF9wYWRzLAogCS5wYWRzX2NudCAgICAgICA9IEFSUkFZX1NJWkUoc2VyaWFsNF9wYWRzKSwKQEAgLTY4Nyw3ICs2ODcsNyBAQAogCiAJaWYgKG9tYXBfcmV2KCkgPT0gT01BUDQ0MzBfUkVWX0VTMV8wKQogCQlwYWNrYWdlID0gT01BUF9QQUNLQUdFX0NCTDsKLQlvbWFwNF9tdXhfaW5pdChib2FyZF9tdXgsIHBhY2thZ2UpOworCW9tYXA0X211eF9pbml0KGJvYXJkX211eCwgTlVMTCwgcGFja2FnZSk7CiAKIAlpZiAod2wxMnh4X3NldF9wbGF0Zm9ybV9kYXRhKCZvbWFwX3BhbmRhX3dsYW5fZGF0YSkpCiAJCXByX2VycigiZXJyb3Igc2V0dGluZyB3bDEyeHggZGF0YVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKaW5kZXggMTU1NTkxOC4uMTc1ZTFhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CkBAIC00NSw3ICs0Niw2IEBACiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDx2aWRlby9vbWFwZHNzLmg+CiAjaW5jbHVkZSA8dmlkZW8vb21hcC1wYW5lbC1nZW5lcmljLWRwaS5oPgotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxwbGF0L25hbmQuaD4KQEAgLTY1LDggKzY1LDYgQEAKICNkZWZpbmUgT1ZFUk9fR1BJT19VU0JIX0NQRU4JMTY4CiAjZGVmaW5lIE9WRVJPX0dQSU9fVVNCSF9OUkVTRVQJMTgzCiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFIFNaXzEyOEsKLQogI2RlZmluZSBPVkVST19TTVNDOTExWF9DUyAgICAgIDUKICNkZWZpbmUgT1ZFUk9fU01TQzkxMVhfR1BJTyAgICAxNzYKICNkZWZpbmUgT1ZFUk9fU01TQzkxMVgyX0NTICAgICA0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGY2MjQ3ZTcuLjk5MDM2NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC00ODgsNiArNDg4LDcgQEAKIAkJLm5hbWUJCQk9ICJWMjhfQSIsCiAJCS5taW5fdVYJCQk9IDI4MDAwMDAsCiAJCS5tYXhfdVYJCQk9IDMwMDAwMDAsCisJCS5hbHdheXNfb24JCT0gdHJ1ZSwgLyogZHVlIFZJTyBsZWFrIHRvIEFJQzM0IFZERHMgKi8KIAkJLmFwcGx5X3VWCQk9IHRydWUsCiAJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCiAJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKQEAgLTU4Miw3ICs1ODMsNyBAQAogewogCS8qIEZJWE1FIHRoaXMgZ3BpbyBzZXR1cCBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yIG5vdyAqLwogCWdwaW9fcmVxdWVzdF9vbmUoZ3BpbyArIDYsIEdQSU9GX09VVF9JTklUX0xPVywgImJhY2tsaWdodF9wd20iKTsKLQlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA3LCBHUElPRl9PVVRfSU5JVF9ISUdILCAic3BlYWtlcl9lbiIpOworCWdwaW9fcmVxdWVzdF9vbmUoZ3BpbyArIDcsIEdQSU9GX09VVF9JTklUX0xPVywgInNwZWFrZXJfZW4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLWRpc3BsYXkuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMKaW5kZXggYzdjNmJlYi4uZDQ2ODNiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLWRpc3BsYXkuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20tZGlzcGxheS5jCkBAIC0yNiw3ICsyNiw3IEBACiAJeyBMQ0RfUEFORUxfUVZHQV9HUElPLAlHUElPRl9PVVRfSU5JVF9ISUdILCAibGNkIHF2Z2EiCSB9LAogfTsKIAotc3RhdGljIHZvaWQgem9vbV9sY2RfcGFuZWxfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHpvb21fbGNkX3BhbmVsX2luaXQodm9pZCkKIHsKIAl6b29tX2xjZF9ncGlvc1swXS5ncGlvID0gKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMzXzApID8KIAkJCUxDRF9QQU5FTF9SRVNFVF9HUElPX1BST0QgOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5jCmluZGV4IGU5NDkwM2IuLjk0Y2NmNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmMKQEAgLTg1LDE4ICs4NSwxOCBAQAogCXN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqc3BpX2JpID0gJmFkczc4NDZfc3BpX2JvYXJkX2luZm87CiAJaW50IGVycjsKIAotCWVyciA9IGdwaW9fcmVxdWVzdChncGlvX3BlbmRvd24sICJUUyBQZW5Eb3duIik7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIkNvdWxkIG5vdCBvYnRhaW4gZ3BpbyBmb3IgVFMgUGVuRG93bjogJWRcbiIsIGVycik7Ci0JCXJldHVybjsKKwlpZiAoYm9hcmRfcGRhdGEgJiYgYm9hcmRfcGRhdGEtPmdldF9wZW5kb3duX3N0YXRlKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdF9vbmUoZ3Bpb19wZW5kb3duLCBHUElPRl9JTiwgIlRTUGVuRG93biIpOworCQlpZiAoZXJyKSB7CisJCQlwcl9lcnIoIkNvdWxkbid0IG9idGFpbiBncGlvIGZvciBUU1BlbkRvd246ICVkXG4iLCBlcnIpOworCQkJcmV0dXJuOworCQl9CisJCWdwaW9fZXhwb3J0KGdwaW9fcGVuZG93biwgMCk7CisKKwkJaWYgKGdwaW9fZGVib3VuY2UpCisJCQlncGlvX3NldF9kZWJvdW5jZShncGlvX3BlbmRvd24sIGdwaW9fZGVib3VuY2UpOwogCX0KIAotCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fcGVuZG93bik7Ci0JZ3Bpb19leHBvcnQoZ3Bpb19wZW5kb3duLCAwKTsKLQotCWlmIChncGlvX2RlYm91bmNlKQotCQlncGlvX3NldF9kZWJvdW5jZShncGlvX3BlbmRvd24sIGdwaW9fZGVib3VuY2UpOwotCiAJYWRzNzg0Nl9jb25maWcuZ3Bpb19wZW5kb3duID0gZ3Bpb19wZW5kb3duOwogCiAJc3BpX2JpLT5idXNfbnVtCT0gYnVzX251bTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuaAppbmRleCBlYjgwYjNiLi42Nzk3MTkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfX09NQVBfQ09NTU9OX0JPQVJEX0RFVklDRVNfXwogI2RlZmluZSBfX09NQVBfQ09NTU9OX0JPQVJEX0RFVklDRVNfXwogCisjZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQlTWl8xMjhLCisKIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgbXRkX3BhcnRpdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCA3Yjg1NTg1Li41YjhjYTY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtOTcsNyArOTcsNyBAQAogCiAJV0FSTihJU19FUlIob2QpLCAiY291bGQgbm90IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlc1xuIiwgb2hfbmFtZSk7CiAKLQlyZXR1cm4gUFRSX0VSUihvZCk7CisJcmV0dXJuIElTX0VSUihvZCkgPyBQVFJfRVJSKG9kKSA6IDA7CiB9CiBwb3N0Y29yZV9pbml0Y2FsbChvbWFwNF9sM19pbml0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCmluZGV4IGIyZjMwYmUuLjY2ODY4YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKQEAgLTE0NSw2ICsxNDUsNyBAQAogCQkJCSBpbnQgcG93ZXJfb24sIGludCB2ZGQpCiB7CiAJdTMyIHJlZzsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAlpZiAocG93ZXJfb24pIHsKIAkJcmVnID0gb21hcDRfY3RybF9wYWRfcmVhZGwoY29udHJvbF9wYmlhc19vZmZzZXQpOwpAQCAtMTU3LDkgKzE1OCwxNSBAQAogCQkJT01BUDRfTU1DMV9QV1JETlpfTUFTSyB8CiAJCQlPTUFQNF9VU0JDMV9JQ1VTQl9QV1JETlpfTUFTSyk7CiAJCW9tYXA0X2N0cmxfcGFkX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKLQkJLyogNCBtaWNyb3NlYyBkZWxheSBmb3IgY29tcGFyYXRvciB0byBnZW5lcmF0ZSBhbiBlcnJvciovCi0JCXVkZWxheSg0KTsKLQkJcmVnID0gb21hcDRfY3RybF9wYWRfcmVhZGwoY29udHJvbF9wYmlhc19vZmZzZXQpOworCisJCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKKwkJZG8geworCQkJcmVnID0gb21hcDRfY3RybF9wYWRfcmVhZGwoY29udHJvbF9wYmlhc19vZmZzZXQpOworCQkJaWYgKCEocmVnICYgT01BUDRfTU1DMV9QQklBU0xJVEVfVk1PREVfRVJST1JfTUFTSykpCisJCQkJYnJlYWs7CisJCQl1c2xlZXBfcmFuZ2UoMTAwLCAyMDApOworCQl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSk7CisKIAkJaWYgKHJlZyAmIE9NQVA0X01NQzFfUEJJQVNMSVRFX1ZNT0RFX0VSUk9SX01BU0spIHsKIAkJCXByX2VycigiUGJpYXMgVm9sdGFnZSBpcyBub3Qgc2FtZSBhcyBMRE9cbiIpOwogCQkJLyogQ2F1dGlvbiA6IE9uIFZNT0RFX0VSUk9SIFBvd2VyIERvd24gTU1DIElPICovCkBAIC0zMzEsNiArMzM4LDkgQEAKIAlpZiAoYy0+bm9fb2ZmKQogCQltbWMtPnNsb3RzWzBdLm5vX29mZiA9IDE7CiAKKwlpZiAoYy0+bm9fb2ZmX2luaXQpCisJCW1tYy0+c2xvdHNbMF0ubm9fcmVndWxhdG9yX29mZl9pbml0ID0gYy0+bm9fb2ZmX2luaXQ7CisKIAlpZiAoYy0+dmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwKQogCQltbWMtPnNsb3RzWzBdLnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCA9IDE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaAppbmRleCBmMTE5MzQ4Li5mNzU3ZTc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCkBAIC0xOCw2ICsxOCw3IEBACiAJYm9vbAlub25yZW1vdmFibGU7CS8qIE5vbnJlbW92YWJsZSBlLmcuIGVNTUMgKi8KIAlib29sCXBvd2VyX3NhdmluZzsJLyogVHJ5IHRvIHNsZWVwIG9yIHBvd2VyIG9mZiB3aGVuIHBvc3NpYmxlICovCiAJYm9vbAlub19vZmY7CQkvKiBwb3dlcl9zYXZpbmcgYW5kIHBvd2VyIGlzIG5vdCB0byBnbyBvZmYgKi8KKwlib29sCW5vX29mZl9pbml0OwkvKiBubyBwb3dlciBvZmYgd2hlbiBub3QgaW4gTU1DIHNsZWVwIHN0YXRlICovCiAJYm9vbAl2Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXA7IC8qIFJlZ3VsYXRvciBvZmYgcmVtYXBwZWQgdG8gc2xlZXAgKi8KIAlpbnQJZ3Bpb19jZDsJLyogb3IgLUVJTlZBTCAqLwogCWludAlncGlvX3dwOwkvKiBvciAtRUlOVkFMICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCBhNGFiMWUzLi5jN2ZiMjJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTgzLDYgKzgzLDkgQEAKIHZvaWQgb21hcF9tdXhfd3JpdGVfYXJyYXkoc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uLAogCQkJCSBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX211eCkKIHsKKwlpZiAoIWJvYXJkX211eCkKKwkJcmV0dXJuOworCiAJd2hpbGUgKGJvYXJkX211eC0+cmVnX29mZnNldCAhPSBPTUFQX01VWF9URVJNSU5BVE9SKSB7CiAJCW9tYXBfbXV4X3dyaXRlKHBhcnRpdGlvbiwgYm9hcmRfbXV4LT52YWx1ZSwKIAkJCSAgICAgICBib2FyZF9tdXgtPnJlZ19vZmZzZXQpOwpAQCAtOTA2LDcgKzkwOSw3IEBACiB1MTYgb21hcF9tdXhfZ2V0X2dwaW8oaW50IGdwaW8pCiB7CiAJc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uOwotCXN0cnVjdCBvbWFwX211eCAqbTsKKwlzdHJ1Y3Qgb21hcF9tdXggKm0gPSBOVUxMOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXJ0aXRpb24sICZtdXhfcGFydGl0aW9ucywgbm9kZSkgewogCQltID0gb21hcF9tdXhfZ2V0X2J5X2dwaW8ocGFydGl0aW9uLCBncGlvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCmluZGV4IDEzN2YzMjEuLjIxMzIzMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaApAQCAtMzIzLDEwICszMjMsMTIgQEAKIAogLyoqCiAgKiBvbWFwNF9tdXhfaW5pdCgpIC0gaW5pdGlhbGl6ZSBtdXggc3lzdGVtIHdpdGggYm9hcmQgc3BlY2lmaWMgc2V0Ci0gKiBAYm9hcmRfbXV4OgkJQm9hcmQgc3BlY2lmaWMgbXV4IHRhYmxlCisgKiBAYm9hcmRfc3Vic2V0OglCb2FyZCBzcGVjaWZpYyBtdXggdGFibGUKKyAqIEBib2FyZF93a3VwX3N1YnNldDoJQm9hcmQgc3BlY2lmaWMgbXV4IHRhYmxlIGZvciB3YWtldXAgaW5zdGFuY2UKICAqIEBmbGFnczoJCU9NQVAgcGFja2FnZSB0eXBlIHVzZWQgZm9yIHRoZSBib2FyZAogICovCi1pbnQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgsIGludCBmbGFncyk7CitpbnQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsCisJc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF93a3VwX3N1YnNldCwgaW50IGZsYWdzKTsKIAogLyoqCiAgKiBvbWFwX211eF9pbml0IC0gcHJpdmF0ZSBtdXggaW5pdCBmdW5jdGlvbiwgZG8gbm90IGNhbGwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXg0NHh4LmMKaW5kZXggOWE2NjQ0NS4uZjVhNzRkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXg0NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXg0NHh4LmMKQEAgLTEzMDksNyArMTMwOSw4IEBACiAjZGVmaW5lIG9tYXA0X3drdXBfY2JsX2Nic19iYWxsICBOVUxMCiAjZW5kaWYKIAotaW50IF9faW5pdCBvbWFwNF9tdXhfaW5pdChzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX3N1YnNldCwgaW50IGZsYWdzKQoraW50IF9faW5pdCBvbWFwNF9tdXhfaW5pdChzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX3N1YnNldCwKKwlzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX3drdXBfc3Vic2V0LCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG9tYXBfYmFsbCAqcGFja2FnZV9iYWxsc19jb3JlOwogCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHNfd2t1cCA9IG9tYXA0X3drdXBfY2JsX2Nic19iYWxsOwpAQCAtMTM0Nyw3ICsxMzQ4LDcgQEAKIAkJCSAgICBPTUFQX01VWF9HUElPX0lOX01PREUzLAogCQkJICAgIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9XS1VQX01VWF9QQkFTRSwKIAkJCSAgICBPTUFQNF9DVFJMX01PRFVMRV9QQURfV0tVUF9NVVhfU0laRSwKLQkJCSAgICBvbWFwNF93a3VwX211eG1vZGVzLCBOVUxMLCBib2FyZF9zdWJzZXQsCisJCQkgICAgb21hcDRfd2t1cF9tdXhtb2RlcywgTlVMTCwgYm9hcmRfd2t1cF9zdWJzZXQsCiAJCQkgICAgcGFja2FnZV9iYWxsc193a3VwKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCmluZGV4IGUwMzQyOTQuLjI5M2ZhNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCkBAIC0xNjI4LDcgKzE2MjgsNyBAQAogCQkJdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgb21hcF9od21vZCAqdGVtcF9vaDsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJaWYgKCFmbikKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKaW5kZXggYWJjNTQ4YS4uZTFjNjlmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYwpAQCAtNTEwOSw3ICs1MTA5LDcgQEAKIAkmb21hcDQ0eHhfaXZhX3NlcTFfaHdtb2QsCiAKIAkvKiBrYmQgY2xhc3MgKi8KLS8qCSZvbWFwNDR4eF9rYmRfaHdtb2QsICovCisJJm9tYXA0NHh4X2tiZF9od21vZCwKIAogCS8qIG1haWxib3ggY2xhc3MgKi8KIAkmb21hcDQ0eHhfbWFpbGJveF9od21vZCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwppbmRleCBmNDc4MTNlLi41ODc3NWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCkBAIC01Niw4ICs1NiwxMCBAQAogCS8qIFBvd2VyIGRvd24gdGhlIHBoeSAqLwogCV9fcmF3X3dyaXRlbChQSFlfUEQsIGN0cmxfYmFzZSArIENPTlRST0xfREVWX0NPTkYpOwogCi0JaWYgKCFkZXYpCisJaWYgKCFkZXYpIHsKKwkJaW91bm1hcChjdHJsX2Jhc2UpOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlwaHljbGsgPSBjbGtfZ2V0KGRldiwgIm9jcDJzY3BfdXNiX3BoeV9pY2siKTsKIAlpZiAoSVNfRVJSKHBoeWNsaykpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCmluZGV4IDA4YWNiNmUuLmY2YjY4N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYwpAQCAtMjQ5LDYgKzI0OSwyOSBAQAogewogCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoR1BJT19QT1JUNDEpOwogfQorLyogTUVSQU0gKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX21lcmFtX2luZm8gbWVyYW1faW5mbyA9IHsKKwkuYWRkcl9tb2RlICAgICAgPSBTSF9NT0JJTEVfTUVSQU1fTU9ERTEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1lcmFtX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgICA9ICJNRVJBTSIsCisJCS5zdGFydCAgPSAweGU4MDAwMDAwLAorCQkuZW5kICAgID0gMHhlODFmZmZmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtZXJhbV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoX21vYmlsZV9tZXJhbSIsCisJLmlkICAgICAgICAgICAgID0gMCwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG1lcmFtX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gbWVyYW1fcmVzb3VyY2VzLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbWVyYW1faW5mbywKKwl9LAorfTsKIAogLyogU0hfTU1DSUYgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfbW1jaWZfcmVzb3VyY2VzW10gPSB7CkBAIC00NDcsMTMgKzQ3MCwyOSBAQAogI2VuZGlmCiAJfSwKIH07CitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9tZXJhbV9jZmcgbGNkX21lcmFtX2NmZyA9IHsKKwkuaWNiWzBdID0geworCQkubWFya2VyX2ljYiAgICAgPSAyOCwKKwkJLmNhY2hlX2ljYiAgICAgID0gMjQsCisJCS5tZXJhbV9vZmZzZXQgICA9IDB4MCwKKwkJLm1lcmFtX3NpemUgICAgID0gMHg0MCwKKwl9LAorCS5pY2JbMV0gPSB7CisJCS5tYXJrZXJfaWNiICAgICA9IDI5LAorCQkuY2FjaGVfaWNiICAgICAgPSAyNSwKKwkJLm1lcmFtX29mZnNldCAgID0gMHg0MCwKKwkJLm1lcmFtX3NpemUgICAgID0gMHg0MCwKKwl9LAorfTsKIAogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIGxjZGNfaW5mbyA9IHsKKwkubWVyYW1fZGV2ID0gJm1lcmFtX2luZm8sCiAJLmNoWzBdID0gewogCQkuY2hhbiA9IExDRENfQ0hBTl9NQUlOTENELAogCQkuYnBwID0gMTYsCiAJCS5sY2RfY2ZnID0gYXA0ZXZiX2xjZGNfbW9kZXMsCiAJCS5udW1fY2ZnID0gQVJSQVlfU0laRShhcDRldmJfbGNkY19tb2RlcyksCisJCS5tZXJhbV9jZmcgPSAmbGNkX21lcmFtX2NmZywKIAl9CiB9OwogCkBAIC03MjQsMTUgKzc2MywzMSBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZnNpX2FrNDY0M19kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoX2ZzaTJfYV9hazQ2NDMiLAogfTsKK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX21lcmFtX2NmZyBoZG1pX21lcmFtX2NmZyA9IHsKKwkuaWNiWzBdID0geworCQkubWFya2VyX2ljYiAgICAgPSAzMCwKKwkJLmNhY2hlX2ljYiAgICAgID0gMjYsCisJCS5tZXJhbV9vZmZzZXQgICA9IDB4ODAsCisJCS5tZXJhbV9zaXplICAgICA9IDB4MTAwLAorCX0sCisJLmljYlsxXSA9IHsKKwkJLm1hcmtlcl9pY2IgICAgID0gMzEsCisJCS5jYWNoZV9pY2IgICAgICA9IDI3LAorCQkubWVyYW1fb2Zmc2V0ICAgPSAweDE4MCwKKwkJLm1lcmFtX3NpemUgICAgID0gMHgxMDAsCisJfSwKK307CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfaW5mbyBzaF9tb2JpbGVfbGNkYzFfaW5mbyA9IHsKIAkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfRVhURVJOQUwsCisJLm1lcmFtX2RldiA9ICZtZXJhbV9pbmZvLAogCS5jaFswXSA9IHsKIAkJLmNoYW4gPSBMQ0RDX0NIQU5fTUFJTkxDRCwKIAkJLmJwcCA9IDE2LAogCQkuaW50ZXJmYWNlX3R5cGUgPSBSR0IyNCwKIAkJLmNsb2NrX2RpdmlkZXIgPSAxLAogCQkuZmxhZ3MgPSBMQ0RDX0ZMQUdTX0RXUE9MLAorCQkubWVyYW1fY2ZnID0gJmhkbWlfbWVyYW1fY2ZnLAogCX0KIH07CiAKQEAgLTk2MSw2ICsxMDE2LDcgQEAKIAkmY3NpMl9kZXZpY2UsCiAJJmNldV9kZXZpY2UsCiAJJmFwNGV2Yl9jYW1lcmEsCisJJm1lcmFtX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoZG1pX2luaXRfcG1fY2xvY2sodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwppbmRleCA0NDhkZGJlLi43NzZmMjA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9zaF9pbnRjLmg+CiAjaW5jbHVkZSA8bGludXgvdGNhNjQxNl9rZXlwYWQuaD4KQEAgLTMxNCw2ICszMTUsMzAgQEAKIAl9LAogfTsKIAorLyogTUVSQU0gKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX21lcmFtX2luZm8gbWFja2VyZWxfbWVyYW1faW5mbyA9IHsKKwkuYWRkcl9tb2RlCT0gU0hfTU9CSUxFX01FUkFNX01PREUxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtZXJhbV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIk1FUkFNIiwKKwkJLnN0YXJ0CT0gMHhlODAwMDAwMCwKKwkJLmVuZAk9IDB4ZTgxZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtZXJhbV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX21vYmlsZV9tZXJhbSIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1lcmFtX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbWVyYW1fcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZtYWNrZXJlbF9tZXJhbV9pbmZvLAorCX0sCit9OworCiAvKiBMQ0RDICovCiBzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBtYWNrZXJlbF9sY2RjX21vZGVzW10gPSB7CiAJewpAQCAtMzQyLDcgKzM2NywyMyBAQAogCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX1BPUlQzMSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX21lcmFtX2NmZyBsY2RfbWVyYW1fY2ZnID0geworCS5pY2JbMF0gPSB7CisJCS5tYXJrZXJfaWNiICAgICA9IDI4LAorCQkuY2FjaGVfaWNiICAgICAgPSAyNCwKKwkJLm1lcmFtX29mZnNldCAgID0gMHgwLAorCQkubWVyYW1fc2l6ZSAgICAgPSAweDQwLAorCX0sCisJLmljYlsxXSA9IHsKKwkJLm1hcmtlcl9pY2IgICAgID0gMjksCisJCS5jYWNoZV9pY2IgICAgICA9IDI1LAorCQkubWVyYW1fb2Zmc2V0ICAgPSAweDQwLAorCQkubWVyYW1fc2l6ZSAgICAgPSAweDQwLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkY19pbmZvID0geworCS5tZXJhbV9kZXYgPSAmbWFja2VyZWxfbWVyYW1faW5mbywKIAkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfQlVTLAogCS5jaFswXSA9IHsKIAkJLmNoYW4gPSBMQ0RDX0NIQU5fTUFJTkxDRCwKQEAgLTM2Miw2ICs0MDMsNyBAQAogCQkJLm5hbWUgPSAic2hfbW9iaWxlX2xjZGNfYmwiLAogCQkJLm1heF9icmlnaHRuZXNzID0gMSwKIAkJfSwKKwkJLm1lcmFtX2NmZyA9ICZsY2RfbWVyYW1fY2ZnLAogCX0KIH07CiAKQEAgLTM4OCw4ICs0MzAsMjMgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbWVyYW1fY2ZnIGhkbWlfbWVyYW1fY2ZnID0geworCS5pY2JbMF0gPSB7CisJCS5tYXJrZXJfaWNiICAgICA9IDMwLAorCQkuY2FjaGVfaWNiICAgICAgPSAyNiwKKwkJLm1lcmFtX29mZnNldCAgID0gMHg4MCwKKwkJLm1lcmFtX3NpemUgICAgID0gMHgxMDAsCisJfSwKKwkuaWNiWzFdID0geworCQkubWFya2VyX2ljYiAgICAgPSAzMSwKKwkJLmNhY2hlX2ljYiAgICAgID0gMjcsCisJCS5tZXJhbV9vZmZzZXQgICA9IDB4MTgwLAorCQkubWVyYW1fc2l6ZSAgICAgPSAweDEwMCwKKwl9LAorfTsKIC8qIEhETUkgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfaW5mbyBoZG1pX2xjZGNfaW5mbyA9IHsKKwkubWVyYW1fZGV2ID0gJm1hY2tlcmVsX21lcmFtX2luZm8sCiAJLmNsb2NrX3NvdXJjZSA9IExDRENfQ0xLX0VYVEVSTkFMLAogCS5jaFswXSA9IHsKIAkJLmNoYW4gPSBMQ0RDX0NIQU5fTUFJTkxDRCwKQEAgLTM5Nyw2ICs0NTQsNyBAQAogCQkuaW50ZXJmYWNlX3R5cGUgPSBSR0IyNCwKIAkJLmNsb2NrX2RpdmlkZXIgPSAxLAogCQkuZmxhZ3MgPSBMQ0RDX0ZMQUdTX0RXUE9MLAorCQkubWVyYW1fY2ZnID0gJmhkbWlfbWVyYW1fY2ZnLAogCX0KIH07CiAKQEAgLTg1Niw2ICs5MTQsMTcgQEAKIH0KIAogLyogU0RISTAgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtYWNrZXJlbF9zZGhpMF9ncGlvX2NkKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcmc7CisJc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gKmluZm8gPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRtaW9fbW1jX2RhdGEgKnBkYXRhID0gaW5mby0+cGRhdGE7CisKKwl0bWlvX21tY19jZF93YWtldXAocGRhdGEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2RoaTBfaW5mbyA9IHsKIAkuZG1hX3NsYXZlX3R4CT0gU0hETUFfU0xBVkVfU0RISTBfVFgsCiAJLmRtYV9zbGF2ZV9yeAk9IFNIRE1BX1NMQVZFX1NESEkwX1JYLApAQCAtMTE1MCw2ICsxMjE5LDcgQEAKIAkmbWFja2VyZWxfY2FtZXJhLAogCSZoZG1pX2xjZGNfZGV2aWNlLAogCSZoZG1pX2RldmljZSwKKwkmbWVyYW1fZGV2aWNlLAogfTsKIAogLyogS2V5cGFkIEluaXRpYWxpemF0aW9uICovCkBAIC0xMjM4LDYgKzEzMDgsNyBAQAogewogCXUzMiBzcmNyNDsKIAlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IHJldDsKIAogCXNoNzM3Ml9waW5tdXhfaW5pdCgpOwogCkBAIC0xMzQzLDYgKzE0MTQsMTMgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDBfMSwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQwXzAsIE5VTEwpOwogCisJcmV0ID0gcmVxdWVzdF9pcnEoZXZ0MmlycSgweDMzNDApLCBtYWNrZXJlbF9zZGhpMF9ncGlvX2NkLAorCQkJICBJUlFGX1RSSUdHRVJfRkFMTElORywgInNkaGkwIGNkIiwgJnNkaGkwX2RldmljZS5kZXYpOworCWlmICghcmV0KQorCQlzZGhpMF9pbmZvLnRtaW9fZmxhZ3MgfD0gVE1JT19NTUNfSEFTX0NPTERfQ0Q7CisJZWxzZQorCQlwcl9lcnIoIkNhbm5vdCBnZXQgSVJRICMlZDogJWRcbiIsIGV2dDJpcnEoMHgzMzQwKSwgcmV0KTsKKwogI2lmICFkZWZpbmVkKENPTkZJR19NTUNfU0hfTU1DSUYpICYmICFkZWZpbmVkKENPTkZJR19NTUNfU0hfTU1DSUZfTU9EVUxFKQogCS8qIGVuYWJsZSBTREhJMSAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElDTUQxLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCmluZGV4IGQxN2ViNjYuLmMwODAwZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYwpAQCAtNTA5LDYgKzUwOSw3IEBACiAgICAgICAgTVNUUDExOCwgTVNUUDExNywgTVNUUDExNiwgTVNUUDExMywKICAgICAgICBNU1RQMTA2LCBNU1RQMTAxLCBNU1RQMTAwLAogICAgICAgIE1TVFAyMjMsCisgICAgICAgTVNUUDIxOCwgTVNUUDIxNywgTVNUUDIxNiwKICAgICAgICBNU1RQMjA3LCBNU1RQMjA2LCBNU1RQMjA0LCBNU1RQMjAzLCBNU1RQMjAyLCBNU1RQMjAxLCBNU1RQMjAwLAogICAgICAgIE1TVFAzMjksIE1TVFAzMjgsIE1TVFAzMjMsIE1TVFAzMjIsIE1TVFAzMTQsIE1TVFAzMTMsIE1TVFAzMTIsCiAgICAgICAgTVNUUDQyMywgTVNUUDQxNSwgTVNUUDQxMywgTVNUUDQxMSwgTVNUUDQxMCwgTVNUUDQwNiwgTVNUUDQwMywKQEAgLTUzNCw2ICs1MzUsOSBAQAogCVtNU1RQMTAxXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X00xXSwgU01TVFBDUjEsIDEsIDApLCAvKiBWUFUgKi8KIAlbTVNUUDEwMF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDAsIDApLCAvKiBMQ0RDMCAqLwogCVtNU1RQMjIzXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NQVV0sIFNNU1RQQ1IyLCAyMywgMCksIC8qIFNQVTIgKi8KKwlbTVNUUDIxOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IyLCAxOCwgMCksIC8qIERNQUMxICovCisJW01TVFAyMTddID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMiwgMTcsIDApLCAvKiBETUFDMiAqLworCVtNU1RQMjE2XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjIsIDE2LCAwKSwgLyogRE1BQzMgKi8KIAlbTVNUUDIwN10gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNywgMCksIC8qIFNDSUZBNSAqLwogCVtNU1RQMjA2XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA2LCAwKSwgLyogU0NJRkIgKi8KIAlbTVNUUDIwNF0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNCwgMCksIC8qIFNDSUZBMCAqLwpAQCAtNjI2LDYgKzYzMCw5IEBACiAJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX2xjZGNfZmIuMCIsICZtc3RwX2Nsa3NbTVNUUDEwMF0pLCAvKiBMQ0RDMCAqLwogCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS42IiwgJm1zdHBfY2xrc1tNU1RQMjIzXSksIC8qIFNQVTJEU1AwICovCiAJQ0xLREVWX0RFVl9JRCgidWlvX3BkcnZfZ2VuaXJxLjciLCAmbXN0cF9jbGtzW01TVFAyMjNdKSwgLyogU1BVMkRTUDEgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1kbWEtZW5naW5lLjAiLCAmbXN0cF9jbGtzW01TVFAyMThdKSwgLyogRE1BQzEgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1kbWEtZW5naW5lLjEiLCAmbXN0cF9jbGtzW01TVFAyMTddKSwgLyogRE1BQzIgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1kbWEtZW5naW5lLjIiLCAmbXN0cF9jbGtzW01TVFAyMTZdKSwgLyogRE1BQzMgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuNSIsICZtc3RwX2Nsa3NbTVNUUDIwN10pLCAvKiBTQ0lGQTUgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuNiIsICZtc3RwX2Nsa3NbTVNUUDIwNl0pLCAvKiBTQ0lGQiAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4wIiwgJm1zdHBfY2xrc1tNU1RQMjA0XSksIC8qIFNDSUZBMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LXBvd2VyLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnktcG93ZXIuYwppbmRleCBjODQ0NDJjLi41YWQ4YjJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnktcG93ZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnktcG93ZXIuYwpAQCAtMjQsNiArMjQsOCBAQAogCiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAKKyNpbmNsdWRlICJib2FyZC1oYXJtb255LmgiCisKICNkZWZpbmUgUE1DX0NUUkwJCTB4MAogI2RlZmluZSBQTUNfQ1RSTF9JTlRSX0xPVwkoMSA8PCAxNykKIApAQCAtOTgsNyArMTAwLDcgQEAKIAkuaXJxX2Jhc2UJPSBURUdSQV9OUl9JUlFTLAogCS5udW1fc3ViZGV2cwk9IEFSUkFZX1NJWkUodHBzX2RldnMpLAogCS5zdWJkZXZzCT0gdHBzX2RldnMsCi0JLmdwaW9fYmFzZQk9IFRFR1JBX05SX0dQSU9TLAorCS5ncGlvX2Jhc2UJPSBIQVJNT05ZX0dQSU9fVFBTNjU4NlgoMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgaGFybW9ueV9yZWd1bGF0b3JzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnkuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5oCmluZGV4IDFlNTdiMDcuLmQ4NTE0MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5oCkBAIC0xNyw3ICsxNyw4IEBACiAjaWZuZGVmIF9NQUNIX1RFR1JBX0JPQVJEX0hBUk1PTllfSAogI2RlZmluZSBfTUFDSF9URUdSQV9CT0FSRF9IQVJNT05ZX0gKIAotI2RlZmluZSBIQVJNT05ZX0dQSU9fV004OTAzKF94XykJKFRFR1JBX05SX0dQSU9TICsgKF94XykpCisjZGVmaW5lIEhBUk1PTllfR1BJT19UUFM2NTg2WChfeF8pCShURUdSQV9OUl9HUElPUyArIChfeF8pKQorI2RlZmluZSBIQVJNT05ZX0dQSU9fV004OTAzKF94XykJKEhBUk1PTllfR1BJT19UUFM2NTg2WCg0KSArIChfeF8pKQogCiAjZGVmaW5lIFRFR1JBX0dQSU9fU0QyX0NECQlURUdSQV9HUElPX1BJNQogI2RlZmluZSBURUdSQV9HUElPX1NEMl9XUAkJVEVHUkFfR1BJT19QSDEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI4NTAwLmMKaW5kZXggYzNjNDE3Ni4uNDU5OGIwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI4NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI4NTAwLmMKQEAgLTE1OSw2ICsxNTksOSBAQAogCQkvKiBObyBjdXN0b20gZGF0YSB5ZXQgKi8KIAl9OwogCisJaWYgKGNwdV9pc191ODUwMHYyKCkpCisJCXBkYXRhLnN1cHBvcnRzX3NsZWVwbW9kZSA9IHRydWU7CisKIAlkYng1MDBfYWRkX2dwaW9zKEFSUkFZX0FORF9TSVpFKGRiODUwMF9ncGlvX2Jhc2UpLAogCQkJIElSUV9EQjg1MDBfR1BJTzAsICZwZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvZ3Bpby5oCmluZGV4IGVhMTlhNWIuLmQ1ZDdlNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvZ3Bpby5oCkBAIC05MCw2ICs5MCw3IEBACiAJaW50IG51bV9ncGlvOwogCXUzMiAoKmdldF9zZWNvbmRhcnlfc3RhdHVzKSh1bnNpZ25lZCBpbnQgYmFuayk7CiAJdm9pZCAoKnNldF9pb2ZvcmNlKShib29sIGVuYWJsZSk7CisJYm9vbCBzdXBwb3J0c19zbGVlcG1vZGU7CiB9OwogCiAjZW5kaWYgLyogX19BU01fUExBVF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZmxhc2guaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZmxhc2guaAppbmRleCAzMDgzMTk1Li4wZDg4NDk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mbGFzaC5oCkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7CiBleHRlcm4gdm9pZCBvbWFwMV9zZXRfdnBwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBlbmFibGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW92bW0uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW92bW0uaAppbmRleCAzMmEyZjZjLi5lOTkyYjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb3ZtbS5oCkBAIC0yOSw5ICsyOSw2IEBACiAgKiBsb3dlciAxNiBiaXQgaXMgdXNlZCBmb3IgaC93IGFuZCB1cHBlciAxNiBiaXQgaXMgZm9yIHMvdy4KICAqLwogI2RlZmluZSBJT1ZNRl9TV19TSElGVAkJMTYKLSNkZWZpbmUgSU9WTUZfSFdfU0laRQkJKDEgPDwgSU9WTUZfU1dfU0hJRlQpCi0jZGVmaW5lIElPVk1GX0hXX01BU0sJCShJT1ZNRl9IV19TSVpFIC0gMSkKLSNkZWZpbmUgSU9WTUZfU1dfTUFTSwkJKH5JT1ZNRl9IV19NQVNLKVVMCiAKIC8qCiAgKiBpb3ZtYTogaC93IGZsYWdzIGRlcml2ZWQgZnJvbSBjYW0gYW5kIHJhbSBhdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oCmluZGV4IGYzOGZlZjkuLmM3Yjg3NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaApAQCAtMTAxLDYgKzEwMSw5IEBACiAJCS8qIElmIHVzaW5nIHBvd2VyX3NhdmluZyBhbmQgdGhlIE1NQyBwb3dlciBpcyBub3QgdG8gZ28gb2ZmICovCiAJCXVuc2lnbmVkIG5vX29mZjoxOwogCisJCS8qIGVNTUMgZG9lcyBub3QgaGFuZGxlIHBvd2VyIG9mZiB3aGVuIG5vdCBpbiBzbGVlcCBzdGF0ZSAqLworCQl1bnNpZ25lZCBub19yZWd1bGF0b3Jfb2ZmX2luaXQ6MTsKKwogCQkvKiBSZWd1bGF0b3Igb2ZmIHJlbWFwcGVkIHRvIHNsZWVwICovCiAJCXVuc2lnbmVkIHZjY19hdXhfZGlzYWJsZV9pc19zbGVlcDoxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb3ZtbS5jCmluZGV4IDUxZWY0M2UuLjgzYTM3YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb3ZtbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb3ZtbS5jCkBAIC02NDgsNyArNjQ4LDYgQEAKIAkJCXJldHVybiBQVFJfRVJSKHZhKTsKIAl9CiAKLQlmbGFncyAmPSBJT1ZNRl9IV19NQVNLOwogCWZsYWdzIHw9IElPVk1GX0RJU0NPTlQ7CiAJZmxhZ3MgfD0gSU9WTUZfTU1JTzsKIApAQCAtNzA2LDcgKzcwNSw2IEBACiAJaWYgKCF2YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmbGFncyAmPSBJT1ZNRl9IV19NQVNLOwogCWZsYWdzIHw9IElPVk1GX0RJU0NPTlQ7CiAJZmxhZ3MgfD0gSU9WTUZfQUxMT0M7CiAKQEAgLTc5NSw3ICs3OTMsNiBAQAogCWlmICghdmEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9MSU5FQVI7CiAJZmxhZ3MgfD0gSU9WTUZfTU1JTzsKIApAQCAtODUzLDcgKzg1MCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXBhID0gdmlydF90b19waHlzKHZhKTsKIAotCWZsYWdzICY9IElPVk1GX0hXX01BU0s7CiAJZmxhZ3MgfD0gSU9WTUZfTElORUFSOwogCWZsYWdzIHw9IElPVk1GX0FMTE9DOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCBhM2Y1MGIzLi42YWYzZDBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQllbHNlIGlmIChjcHVfaXNfb21hcDE2MTEoKSkKIAkJCW9tYXBfc3JhbV9zaXplID0gU1pfMjU2SzsKIAkJZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBkZXRlY3QgU1JBTSBzaXplXG4iKTsKKwkJCXByX2VycigiQ291bGQgbm90IGRldGVjdCBTUkFNIHNpemVcbiIpOwogCQkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CiAJCX0KIAl9CkBAIC0yMjEsMTAgKzIyMSwxMCBAQAogCW9tYXBfc3JhbV9pb19kZXNjWzBdLmxlbmd0aCA9IFJPVU5EX0RPV04ob21hcF9zcmFtX3NpemUsIFBBR0VfU0laRSk7CiAJaW90YWJsZV9pbml0KG9tYXBfc3JhbV9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXBfc3JhbV9pb19kZXNjKSk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTUkFNOiBNYXBwZWQgcGEgMHglMDhseCB0byB2YSAweCUwOGx4IHNpemU6IDB4JWx4XG4iLAotCV9fcGZuX3RvX3BoeXMob21hcF9zcmFtX2lvX2Rlc2NbMF0ucGZuKSwKLQlvbWFwX3NyYW1faW9fZGVzY1swXS52aXJ0dWFsLAotCSAgICAgICBvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGgpOworCXByX2luZm8oIlNSQU06IE1hcHBlZCBwYSAweCUwOGxseCB0byB2YSAweCUwOGx4IHNpemU6IDB4JWx4XG4iLAorCQkobG9uZyBsb25nKSBfX3Bmbl90b19waHlzKG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiksCisJCW9tYXBfc3JhbV9pb19kZXNjWzBdLnZpcnR1YWwsCisJCW9tYXBfc3JhbV9pb19kZXNjWzBdLmxlbmd0aCk7CiAKIAkvKgogCSAqIE5vcm1hbGx5IGRldmljZW1hcHNfaW5pdCgpIHdvdWxkIGZsdXNoIGNhY2hlcyBhbmQgdGxiIGFmdGVyCkBAIC0yNTIsNyArMjUyLDcgQEAKIHZvaWQgKm9tYXBfc3JhbV9wdXNoX2FkZHJlc3ModW5zaWduZWQgbG9uZyBzaXplKQogewogCWlmIChzaXplID4gKG9tYXBfc3JhbV9jZWlsIC0gKG9tYXBfc3JhbV9iYXNlICsgU1JBTV9CT09UTE9BREVSX1NaKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJOb3QgZW5vdWdoIHNwYWNlIGluIFNSQU1cbiIpOworCQlwcl9lcnIoIk5vdCBlbm91Z2ggc3BhY2UgaW4gU1JBTVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvc3RybmNweS5TIGIvYXJjaC9ibGFja2Zpbi9saWIvc3RybmNweS5TCmluZGV4IGYzOTMxZDUuLjJjMDdkZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL3N0cm5jcHkuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9zdHJuY3B5LlMKQEAgLTI1LDcgKzI1LDcgQEAKIAogRU5UUlkoX3N0cm5jcHkpCiAJQ0MgPSBSMiA9PSAwOwotCWlmIENDIEpVTVAgNGY7CisJaWYgQ0MgSlVNUCA2ZjsKIAogCVAyID0gUjIgOyAgICAgICAvKiBzaXplICovCiAJUDAgPSBSMCA7ICAgICAgIC8qIGRzdCovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMWNmMGY0OS4uN2M5MjhkYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzIwLDExICszMjAsMTIgQEAKICNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCQkxMzI4CiAjZGVmaW5lIF9fTlJfc3luY2ZzCQkJMTMyOQogI2RlZmluZSBfX05SX3NldG5zCQkJMTMzMAorI2RlZmluZSBfX05SX3NlbmRtbXNnCQkJMTMzMQogCiAjaWZkZWYgX19LRVJORUxfXwogCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMJCQkzMDcgLyogbGVuZ3RoIG9mIHN5c2NhbGwgdGFibGUgKi8KKyNkZWZpbmUgTlJfc3lzY2FsbHMJCQkzMDggLyogbGVuZ3RoIG9mIHN5c2NhbGwgdGFibGUgKi8KIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBzdG9wIHNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaCBmcm9tIGNvbXBsYWluaW5nIGFib3V0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggOWNhODAxOS4uOTdkZDJhYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTc3Niw2ICsxNzc2LDcgQEAKIAlkYXRhOCBzeXNfY2xvY2tfYWRqdGltZQogCWRhdGE4IHN5c19zeW5jZnMKIAlkYXRhOCBzeXNfc2V0bnMJCQkJLy8gMTMzMAorCWRhdGE4IHN5c19zZW5kbW1zZwogCiAJLm9yZyBzeXNfY2FsbF90YWJsZSArIDgqTlJfc3lzY2FsbHMJLy8gZ3VhcmQgYWdhaW5zdCBmYWlsdXJlcyB0byBpbmNyZWFzZSBOUl9zeXNjYWxscwogI2VuZGlmIC8qIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC90cmFwcy5jCmluZGV4IGYwM2NiMjcuLmJkM2U1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3RyYXBzLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CkBAIC0xNTYsNyArMTU2LDcgQEAKIAogCWNhc2UgRVhDRVBfVFJBUDoKIAljYXNlIEVYQ0VQX1VOSU1QSU5TOgotCQlpZiAoZ2V0X3VzZXIob3Bjb2RlLCAodWludDhfdCBfX3VzZXIgKilyZWdzLT5wYykgIT0gMCkKKwkJaWYgKHByb2JlX2tlcm5lbF9yZWFkKCZvcGNvZGUsICh1OCAqKXJlZ3MtPnBjLCAxKSA8IDApCiAJCQlicmVhazsKIAkJaWYgKG9wY29kZSA9PSAweGZmKSB7CiAJCQlpZiAobm90aWZ5X2RpZShESUVfQlJFQUtQT0lOVCwgc3RyLCByZWdzLCBjb2RlLCAwLCAwKSkKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2ZjcwMmE2Li4xM2M0ODE0IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00NCw2ICs0NCw3IEBACiAgIFJPX0RBVEEoUEFHRV9TSVpFKQogCiAgIC8qIHdyaXRlYWJsZSAqLworICBfc2RhdGEgPSAuOyAgICAgLyogU3RhcnQgb2YgcncgZGF0YSBzZWN0aW9uICovCiAgIFJXX0RBVEFfU0VDVElPTigzMiwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKICAgX2VkYXRhID0gLjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL21tL2NhY2hlLWRiZy1mbHVzaC1ieS1yZWcuUyBiL2FyY2gvbW4xMDMwMC9tbS9jYWNoZS1kYmctZmx1c2gtYnktcmVnLlMKaW5kZXggNjY1OTE5Zi4uYTc3NWVhNSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL21tL2NhY2hlLWRiZy1mbHVzaC1ieS1yZWcuUworKysgYi9hcmNoL21uMTAzMDAvbW0vY2FjaGUtZGJnLWZsdXNoLWJ5LXJlZy5TCkBAIC0xMjAsMTQgKzEyMCwxNCBAQAogCSMgY29uZGl0aW9uYWxseSBwdXJnZSB0aGlzIGxpbmUgaW4gYWxsIHdheXMKIAltb3YJZDEsKEwxX0NBQ0hFX1dBWURJU1AqMCxhMCkKIAotZGVidWdnZXJfbG9jYWxfY2FjaGVfZmx1c2hpbnZfbm9fZGNhY2hlOgorZGVidWdnZXJfbG9jYWxfY2FjaGVfZmx1c2hpbnZfb25lX25vX2RjYWNoZToKIAkjCiAJIyBub3cgdHJ5IHRvIGZsdXNoIHRoZSBpY2FjaGUKIAkjCiAJbW92CUNIQ1RSLGEwCiAJbW92aHUJKGEwKSxkMAogCWJ0c3QJQ0hDVFJfSUNFTixkMAotCWJlcQltbjEwMzAwX2xvY2FsX2ljYWNoZV9pbnZfcmFuZ2VfcmVnX2VuZAorCWJlcQlkZWJ1Z2dlcl9sb2NhbF9jYWNoZV9mbHVzaGludl9vbmVfZW5kCiAKIAlMT0NBTF9DTElfU0FWRShkMSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvLmdpdGlnbm9yZSBiL2FyY2gvcG93ZXJwYy9ib290Ly5naXRpZ25vcmUKaW5kZXggM2Q4MGMzZS4uMTJkYTc3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvLmdpdGlnbm9yZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC8uZ2l0aWdub3JlCkBAIC0xLDUgKzEsNCBAQAogYWRkbm90ZQotZHRjCiBlbXB0eS5jCiBoYWNrLWNvZmYKIGluZmJsb2NrLmMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvLmdpdGlnbm9yZSBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdjM2Y5NC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWR0Yy1sZXhlci5sZXguYwotZHRjLXBhcnNlci50YWIuYwotZHRjLXBhcnNlci50YWIuaApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Jpby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Jpby5oCmluZGV4IGQ5MDJhYmQuLmIxZDJkZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yaW8uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmlvLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNkZWZpbmUgQVNNX1BQQ19SSU9fSAogCiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9yaW9faW5pdCh2b2lkKTsKLSNpZmRlZiBDT05GSUdfUkFQSURJTworI2lmZGVmIENPTkZJR19GU0xfUklPCiBleHRlcm4gaW50IGZzbF9yaW9fbWNoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBmc2xfcmlvX21jaGVja19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHtyZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDM0ZDI3MjIuLjlmYjkzMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTE5NzksNyArMTk3OSw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHg4MDI0MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJlNTUwMCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfRTU1MDAsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9CT09LRSB8IFBQQ19GRUFUVVJFX0hBU19GUFUsCiAJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9UWVBFX0ZTTF9FIHwgTU1VX0ZUUl9CSUdfUEhZUyB8CiAJCQlNTVVfRlRSX1VTRV9UTEJJTFgsCiAJCS5pY2FjaGVfYnNpemUJCT0gNjQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IGYyYzkwNmIuLjhjMzExMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC04MiwxMSArODIsMjkgQEAKIH0KIGVhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9wYXJzZV9tZW0pOwogCisvKgorICogb3ZlcmxhcHNfaW5pdHJkIC0gY2hlY2sgZm9yIG92ZXJsYXAgd2l0aCBwYWdlIGFsaWduZWQgZXh0ZW5zaW9uIG9mCisgKiBpbml0cmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG92ZXJsYXBzX2luaXRyZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJaWYgKCFpbml0cmRfc3RhcnQpCisJCXJldHVybiAwOworCisJcmV0dXJuCShzdGFydCArIHNpemUpID4gX0FMSUdOX0RPV04oaW5pdHJkX3N0YXJ0LCBQQUdFX1NJWkUpICYmCisJCQlzdGFydCA8PSBfQUxJR05fVVAoaW5pdHJkX2VuZCwgUEFHRV9TSVpFKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwogLyoqCiAgKiBtb3ZlX2RldmljZV90cmVlIC0gbW92ZSB0cmVlIHRvIGFuIHVudXNlZCBhcmVhLCBpZiBuZWVkZWQuCiAgKgogICogVGhlIGRldmljZSB0cmVlIG1heSBiZSBhbGxvY2F0ZWQgYmV5b25kIG91ciBtZW1vcnkgbGltaXQsIG9yIGluc2lkZSB0aGUKLSAqIGNyYXNoIGtlcm5lbCByZWdpb24gZm9yIGtkdW1wLiBJZiBzbywgbW92ZSBpdCBvdXQgb2YgdGhlIHdheS4KKyAqIGNyYXNoIGtlcm5lbCByZWdpb24gZm9yIGtkdW1wLCBvciB3aXRoaW4gdGhlIHBhZ2UgYWxpZ25lZCByYW5nZSBvZiBpbml0cmQuCisgKiBJZiBzbywgbW92ZSBpdCBvdXQgb2YgdGhlIHdheS4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IG1vdmVfZGV2aWNlX3RyZWUodm9pZCkKIHsKQEAgLTk5LDcgKzExNyw4IEBACiAJc2l6ZSA9IGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnRvdGFsc2l6ZSk7CiAKIAlpZiAoKG1lbW9yeV9saW1pdCAmJiAoc3RhcnQgKyBzaXplKSA+IFBIWVNJQ0FMX1NUQVJUICsgbWVtb3J5X2xpbWl0KSB8fAotCQkJb3ZlcmxhcHNfY3Jhc2hrZXJuZWwoc3RhcnQsIHNpemUpKSB7CisJCQlvdmVybGFwc19jcmFzaGtlcm5lbChzdGFydCwgc2l6ZSkgfHwKKwkJCW92ZXJsYXBzX2luaXRyZChzdGFydCwgc2l6ZSkpIHsKIAkJcCA9IF9fdmEobWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKSk7CiAJCW1lbWNweShwLCBpbml0aWFsX2Jvb3RfcGFyYW1zLCBzaXplKTsKIAkJaW5pdGlhbF9ib290X3BhcmFtcyA9IChzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKilwOwpAQCAtNTU1LDcgKzU3NCw5IEBACiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJLyogdGhlbiByZXNlcnZlIHRoZSBpbml0cmQsIGlmIGFueSAqLwogCWlmIChpbml0cmRfc3RhcnQgJiYgKGluaXRyZF9lbmQgPiBpbml0cmRfc3RhcnQpKQotCQltZW1ibG9ja19yZXNlcnZlKF9fcGEoaW5pdHJkX3N0YXJ0KSwgaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydCk7CisJCW1lbWJsb2NrX3Jlc2VydmUoX0FMSUdOX0RPV04oX19wYShpbml0cmRfc3RhcnQpLCBQQUdFX1NJWkUpLAorCQkJX0FMSUdOX1VQKGluaXRyZF9lbmQsIFBBR0VfU0laRSkgLQorCQkJX0FMSUdOX0RPV04oaW5pdHJkX3N0YXJ0LCBQQUdFX1NJWkUpKTsKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgKi8KIAogI2lmZGVmIENPTkZJR19QUEMzMgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKaW5kZXggZDY1YjU5MS4uNWRlMGYyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCkBAIC0yMjMsMjEgKzIyMyw2IEBACiAjdW5kZWYgRlJFRVNFQwogfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi12b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpZiAoc3RhcnQgPCBlbmQpCi0JCXByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7Ci0JZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJZnJlZV9wYWdlKHN0YXJ0KTsKLQkJdG90YWxyYW1fcGFnZXMrKzsKLQl9Ci19Ci0jZW5kaWYKLQotCiAjaWZkZWYgQ09ORklHXzh4eCAvKiBObyA4eHggc3BlY2lmaWMgLmMgZmlsZSB0byBwdXQgdGhhdCBpbiAuLi4gKi8KIHZvaWQgc2V0dXBfaW5pdGlhbF9tZW1vcnlfbGltaXQocGh5c19hZGRyX3QgZmlyc3RfbWVtYmxvY2tfYmFzZSwKIAkJCQlwaHlzX2FkZHJfdCBmaXJzdF9tZW1ibG9ja19zaXplKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKaW5kZXggNjM3NGIyMS4uZjZkYmI0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCkBAIC05OSwyMCArOTksNiBAQAogCQkoKHVuc2lnbmVkIGxvbmcpX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKV9faW5pdF9iZWdpbikgPj4gMTApOwogfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi12b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpZiAoc3RhcnQgPCBlbmQpCi0JCXByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7Ci0JZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJZnJlZV9wYWdlKHN0YXJ0KTsKLQkJdG90YWxyYW1fcGFnZXMrKzsKLQl9Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgcGdkX2N0b3Iodm9pZCAqYWRkcikKIHsKIAltZW1zZXQoYWRkciwgMCwgUEdEX1RBQkxFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IDU3ZTU0NWIuLjI5ZDRkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTM4Miw2ICszODIsMjUgQEAKIAltZW1faW5pdF9kb25lID0gMTsKIH0KIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBfX2luaXQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmIChzdGFydCA+PSBlbmQpCisJCXJldHVybjsKKworCXN0YXJ0ID0gX0FMSUdOX0RPV04oc3RhcnQsIFBBR0VfU0laRSk7CisJZW5kID0gX0FMSUdOX1VQKGVuZCwgUEFHRV9TSVpFKTsKKwlwcl9pbmZvKCJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsIChlbmQgLSBzdGFydCkgPj4gMTApOworCisJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKKwkJZnJlZV9wYWdlKHN0YXJ0KTsKKwkJdG90YWxyYW1fcGFnZXMrKzsKKwl9Cit9CisjZW5kaWYKKwogLyoKICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBwYWdlIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IHRoZSBrZXJuZWwuCiAgKiBJdCBqdXN0IG1hcmtzIHRoZSBwYWdlIGFzIG5vdCBpLWNhY2hlIGNsZWFuLiAgV2UgZG8gdGhlIGktY2FjaGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IDkwODliMDQuLjc2NjdkYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwpAQCAtNzE1LDcgKzcxNSw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcG1hY3BpY19zeXNjb3JlKHZvaWQpCiB7Ci0JcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnBtYWNwaWNfc3lzY29yZV9vcHMpOworCWlmIChwbWFjX2lycV9od1swXSkKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnBtYWNwaWNfc3lzY29yZV9vcHMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCmluZGV4IDA2MDhiMTYuLmQ5MTc1NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCkBAIC0xOTYsOSArMTk2LDYgQEAKIAlvdXRfYmUzMigmbGJjLT5sdGVjY3IsIExURUNDUl9DTEVBUik7CiAJb3V0X2JlMzIoJmxiYy0+bHRlZHIsIExURURSX0VOQUJMRSk7CiAKLQkvKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgYW55IGRldGVjdGVkIGV2ZW50cyAqLwotCW91dF9iZTMyKCZsYmMtPmx0ZWlyLCBMVEVJUl9FTkFCTEUpOwotCiAJLyogU2V0IHRoZSBtb25pdG9yIHRpbWVvdXQgdmFsdWUgdG8gdGhlIG1heGltdW0gZm9yIGVycmF0dW0gQTAwMSAqLwogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAiZnNsLGVsYmMiKSkKIAkJY2xyc2V0Yml0c19iZTMyKCZsYmMtPmxiY3IsIExCQ1JfQk1ULCBMQkNSX0JNVFBTKTsKQEAgLTMyMiw2ICszMTksOSBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwkvKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgYW55IGRldGVjdGVkIGV2ZW50cyAqLworCW91dF9iZTMyKCZmc2xfbGJjX2N0cmxfZGV2LT5yZWdzLT5sdGVpciwgTFRFSVJfRU5BQkxFKTsKKwogCXJldHVybiAwOwogCiBlcnI6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDlmYWIyYWEuLjkwZDc3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC04OSw2ICs4OSw3IEBACiAJc2VsZWN0IEhBVkVfR0VUX1VTRVJfUEFHRVNfRkFTVAogCXNlbGVjdCBIQVZFX0FSQ0hfTVVURVhfQ1BVX1JFTEFYCiAJc2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMIGlmICFNQVJDSF9HNQorCXNlbGVjdCBIQVZFX1JDVV9UQUJMRV9GUkVFIGlmIFNNUAogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0sKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLX0JICiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fTE9DSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggZjYzMTRhZi4uMzhlNzFlYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0xNywxNSArMTcsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCi0jZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHt9IHdoaWxlICgwKQotCiB1bnNpZ25lZCBsb25nICpjcnN0X3RhYmxlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiB2b2lkIGNyc3RfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7Ci12b2lkIGNyc3RfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nICopOwogCiB1bnNpZ25lZCBsb25nICpwYWdlX3RhYmxlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiB2b2lkIHBhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7Ci12b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nICopOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCit2b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tdV9nYXRoZXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKl90YWJsZSk7CisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3RhYmxlKHVuc2lnbmVkIGxvbmcgKnMsIHVuc2lnbmVkIGxvbmcgdmFsLCBzaXplX3QgbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGU0ZWZhY2YuLjgwMWZiZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjkzLDE5ICsyOTMsNiBAQAogICogc3dhcCBwdGUgaXMgMTAxMSBhbmQgMDAwMSwgMDAxMSwgMDEwMSwgMDExMSBhcmUgaW52YWxpZC4KICAqLwogCi0vKiBQYWdlIHN0YXR1cyB0YWJsZSBiaXRzIGZvciB2aXJ0dWFsaXphdGlvbiAqLwotI2RlZmluZSBSQ1BfQUNDX0JJVFMJMHhmMDAwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgUkNQX0ZQX0JJVAkweDA4MDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfUENMX0JJVAkweDAwODAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfSFJfQklUCTB4MDA0MDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9IQ19CSVQJMHgwMDIwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgUkNQX0dSX0JJVAkweDAwMDQwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfR0NfQklUCTB4MDAwMjAwMDAwMDAwMDAwMFVMCi0KLS8qIFVzZXIgZGlydHkgLyByZWZlcmVuY2VkIGJpdCBmb3IgS1ZNJ3MgbWlncmF0aW9uIGZlYXR1cmUgKi8KLSNkZWZpbmUgS1ZNX1VSX0JJVAkweDAwMDA4MDAwMDAwMDAwMDBVTAotI2RlZmluZSBLVk1fVUNfQklUCTB4MDAwMDQwMDAwMDAwMDAwMFVMCi0KICNpZm5kZWYgX19zMzkweF9fCiAKIC8qIEJpdHMgaW4gdGhlIHNlZ21lbnQgdGFibGUgYWRkcmVzcy1zcGFjZS1jb250cm9sLWVsZW1lbnQgKi8KQEAgLTMyNSw2ICszMTIsMTkgQEAKICNkZWZpbmUgX1NFR01FTlRfRU5UUlkJCShfU0VHTUVOVF9FTlRSWV9QVEwpCiAjZGVmaW5lIF9TRUdNRU5UX0VOVFJZX0VNUFRZCShfU0VHTUVOVF9FTlRSWV9JTlYpCiAKKy8qIFBhZ2Ugc3RhdHVzIHRhYmxlIGJpdHMgZm9yIHZpcnR1YWxpemF0aW9uICovCisjZGVmaW5lIFJDUF9BQ0NfQklUUwkweGYwMDAwMDAwVUwKKyNkZWZpbmUgUkNQX0ZQX0JJVAkweDA4MDAwMDAwVUwKKyNkZWZpbmUgUkNQX1BDTF9CSVQJMHgwMDgwMDAwMFVMCisjZGVmaW5lIFJDUF9IUl9CSVQJMHgwMDQwMDAwMFVMCisjZGVmaW5lIFJDUF9IQ19CSVQJMHgwMDIwMDAwMFVMCisjZGVmaW5lIFJDUF9HUl9CSVQJMHgwMDA0MDAwMFVMCisjZGVmaW5lIFJDUF9HQ19CSVQJMHgwMDAyMDAwMFVMCisKKy8qIFVzZXIgZGlydHkgLyByZWZlcmVuY2VkIGJpdCBmb3IgS1ZNJ3MgbWlncmF0aW9uIGZlYXR1cmUgKi8KKyNkZWZpbmUgS1ZNX1VSX0JJVAkweDAwMDA4MDAwVUwKKyNkZWZpbmUgS1ZNX1VDX0JJVAkweDAwMDA0MDAwVUwKKwogI2Vsc2UgLyogX19zMzkweF9fICovCiAKIC8qIEJpdHMgaW4gdGhlIHNlZ21lbnQvcmVnaW9uIHRhYmxlIGFkZHJlc3Mtc3BhY2UtY29udHJvbC1lbGVtZW50ICovCkBAIC0zNjcsNiArMzY3LDE5IEBACiAjZGVmaW5lIF9TRUdNRU5UX0VOVFJZX0xBUkdFCTB4NDAwCS8qIFNURS1mb3JtYXQgY29udHJvbCwgbGFyZ2UgcGFnZSAgICovCiAjZGVmaW5lIF9TRUdNRU5UX0VOVFJZX0NPCTB4MTAwCS8qIGNoYW5nZS1yZWNvcmRpbmcgb3ZlcnJpZGUgICAqLwogCisvKiBQYWdlIHN0YXR1cyB0YWJsZSBiaXRzIGZvciB2aXJ0dWFsaXphdGlvbiAqLworI2RlZmluZSBSQ1BfQUNDX0JJVFMJMHhmMDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUkNQX0ZQX0JJVAkweDA4MDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfUENMX0JJVAkweDAwODAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfSFJfQklUCTB4MDA0MDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9IQ19CSVQJMHgwMDIwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUkNQX0dSX0JJVAkweDAwMDQwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfR0NfQklUCTB4MDAwMjAwMDAwMDAwMDAwMFVMCisKKy8qIFVzZXIgZGlydHkgLyByZWZlcmVuY2VkIGJpdCBmb3IgS1ZNJ3MgbWlncmF0aW9uIGZlYXR1cmUgKi8KKyNkZWZpbmUgS1ZNX1VSX0JJVAkweDAwMDA4MDAwMDAwMDAwMDBVTAorI2RlZmluZSBLVk1fVUNfQklUCTB4MDAwMDQwMDAwMDAwMDAwMFVMCisKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCmluZGV4IDM1MGU3ZWUuLjE1Yzk3NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaApAQCAtMTM5LDExMCArMTM5LDQ3IEBACiAJc3RydWN0IHNsaWJlIHNsaWJlW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLCBhbGlnbmVkKDIwNDgpKSk7CiAKLS8qKgotICogc3RydWN0IHNiYWxfZmxhZ3MgLSBzdG9yYWdlIGJsb2NrIGFkZHJlc3MgbGlzdCBmbGFncwotICogQGxhc3Q6IGxhc3QgZW50cnkKLSAqIEBjb250OiBjb250aWd1b3VzIHN0b3JhZ2UKLSAqIEBmcmFnOiBmcmFnbWVudGF0aW9uCi0gKi8KLXN0cnVjdCBzYmFsX2ZsYWdzIHsKLQl1OAk6IDE7Ci0JdTggbGFzdCA6IDE7Ci0JdTggY29udCA6IDE7Ci0JdTgJOiAxOwotCXU4IGZyYWcgOiAyOwotCXU4CTogMjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBTQkFMX0VGTEFHU19MQVNUX0VOVFJZCQkweDQwCisjZGVmaW5lIFNCQUxfRUZMQUdTX0NPTlRJR1VPVVMJCTB4MjAKKyNkZWZpbmUgU0JBTF9FRkxBR1NfRklSU1RfRlJBRwkJMHgwNAorI2RlZmluZSBTQkFMX0VGTEFHU19NSURETEVfRlJBRwkJMHgwOAorI2RlZmluZSBTQkFMX0VGTEFHU19MQVNUX0ZSQUcJCTB4MGMKKyNkZWZpbmUgU0JBTF9FRkxBR1NfTUFTSwkJMHg2ZgogCi0jZGVmaW5lIFNCQUxfRkxBR1NfRklSU1RfRlJBRwkJMHgwNDAwMDAwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1NfTUlERExFX0ZSQUcJCTB4MDgwMDAwMDBVTAotI2RlZmluZSBTQkFMX0ZMQUdTX0xBU1RfRlJBRwkJMHgwYzAwMDAwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1NfTEFTVF9FTlRSWQkJMHg0MDAwMDAwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1NfQ09OVElHVU9VUwkJMHgyMDAwMDAwMFVMCi0KLSNkZWZpbmUgU0JBTF9GTEFHUzBfREFUQV9DT05USU5VQVRJT04JMHgyMFVMCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9QQ0lfUkVRCQkweDQwCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9EQVRBX0NPTlRJTlVBVElPTgkweDIwCiAKIC8qIEF3ZXNvbWUgT3BlbkZDUCBleHRlbnNpb25zICovCi0jZGVmaW5lIFNCQUxfRkxBR1MwX1RZUEVfU1RBVFVTCQkweDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9XUklURQkJMHgwOFVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX1RZUEVfUkVBRAkJMHgxMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRAkweDE4VUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfTU9SRV9TQkFMUwkJMHgwNFVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX0NPTU1BTkQJCTB4MDJVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9MQVNUX1NCQUwJCTB4MDBVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9PTkxZX1NCQUwJCVNCQUxfRkxBR1MwX0NPTU1BTkQKLSNkZWZpbmUgU0JBTF9GTEFHUzBfTUlERExFX1NCQUwJCVNCQUxfRkxBR1MwX01PUkVfU0JBTFMKLSNkZWZpbmUgU0JBTF9GTEFHUzBfRklSU1RfU0JBTCBTQkFMX0ZMQUdTMF9NT1JFX1NCQUxTIHwgU0JBTF9GTEFHUzBfQ09NTUFORAotI2RlZmluZSBTQkFMX0ZMQUdTMF9QQ0kJCQkweDQwCi0KLS8qKgotICogc3RydWN0IHNiYWxfc2JhbGZfMCAtIHNiYWwgZmxhZ3MgZm9yIHNiYWxlIDAKLSAqIEBwY2k6IFBDSSBpbmRpY2F0b3IKLSAqIEBjb250OiBkYXRhIGNvbnRpbnVhdGlvbgotICogQHNidHlwZTogc3RvcmFnZS1ibG9jayB0eXBlIChGQ1ApCi0gKi8KLXN0cnVjdCBzYmFsX3NiYWxmXzAgewotCXU4CSAgOiAxOwotCXU4IHBjaQkgIDogMTsKLQl1OCBjb250ICAgOiAxOwotCXU4IHNidHlwZSA6IDI7Ci0JdTgJICA6IDM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8xIC0gc2JhbCBmbGFncyBmb3Igc2JhbGUgMQotICogQGtleTogc3RvcmFnZSBrZXkKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMSB7Ci0JdTggICAgIDogNDsKLQl1OCBrZXkgOiA0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IHNiYWxfc2JhbGZfMTQgLSBzYmFsIGZsYWdzIGZvciBzYmFsZSAxNAotICogQGVycmlkeDogZXJyb3IgaW5kZXgKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMTQgewotCXU4CSAgOiA0OwotCXU4IGVycmlkeCA6IDQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8xNSAtIHNiYWwgZmxhZ3MgZm9yIHNiYWxlIDE1Ci0gKiBAcmVhc29uOiByZWFzb24gZm9yIGVycm9yIHN0YXRlCi0gKi8KLXN0cnVjdCBzYmFsX3NiYWxmXzE1IHsKLQl1OCByZWFzb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiB1bmlvbiBzYmFsX3NiYWxmIC0gc3RvcmFnZSBibG9jayBhZGRyZXNzIGxpc3QgZmxhZ3MKLSAqIEBpMDogc2JhbGYwCi0gKiBAaTE6IHNiYWxmMQotICogQGkxNDogc2JhbGYxNAotICogQGkxNTogc2JsYWYxNQotICogQHZhbHVlOiByYXcgdmFsdWUKLSAqLwotdW5pb24gc2JhbF9zYmFsZiB7Ci0Jc3RydWN0IHNiYWxfc2JhbGZfMCAgaTA7Ci0Jc3RydWN0IHNiYWxfc2JhbGZfMSAgaTE7Ci0Jc3RydWN0IHNiYWxfc2JhbGZfMTQgaTE0OwotCXN0cnVjdCBzYmFsX3NiYWxmXzE1IGkxNTsKLQl1OCB2YWx1ZTsKLX07CisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9UWVBFX1NUQVRVUwkweDAwCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFCQkweDA4CisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQJCTB4MTAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEVfUkVBRAkweDE4CisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9NT1JFX1NCQUxTCQkweDA0CisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9DT01NQU5ECQkweDAyCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9MQVNUX1NCQUwJCTB4MDAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX09OTFlfU0JBTAkJU0JBTF9TRkxBR1MwX0NPTU1BTkQKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX01JRERMRV9TQkFMCVNCQUxfU0ZMQUdTMF9NT1JFX1NCQUxTCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9GSVJTVF9TQkFMIChTQkFMX1NGTEFHUzBfTU9SRV9TQkFMUyB8IFNCQUxfU0ZMQUdTMF9DT01NQU5EKQogCiAvKioKICAqIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50IC0gU0JBTCBlbnRyeQotICogQGZsYWdzOiBmbGFncworICogQGVmbGFnczogU0JBTCBlbnRyeSBmbGFncworICogQHNjb3VudDogU0JBTCBjb3VudAorICogQHNmbGFnczogd2hvbGUgU0JBTCBmbGFncwogICogQGxlbmd0aDogbGVuZ3RoCiAgKiBAYWRkcjogYWRkcmVzcwogKi8KIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50IHsKLQl1MzIgZmxhZ3M7CisJdTggZWZsYWdzOworCS8qIHByaXZhdGU6ICovCisJdTggcmVzMTsKKwkvKiBwdWJsaWM6ICovCisJdTggc2NvdW50OworCXU4IHNmbGFnczsKIAl1MzIgbGVuZ3RoOwogI2lmZGVmIENPTkZJR18zMkJJVAogCS8qIHByaXZhdGU6ICovCi0Jdm9pZCAqcmVzZXJ2ZWQ7CisJdm9pZCAqcmVzMjsKIAkvKiBwdWJsaWM6ICovCiAjZW5kaWYKIAl2b2lkICphZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDc3ZWVlNTQuLmM2ODdhMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTI2LDY3ICsyNiw2MCBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIHN0cnVjdCBtbXVfZ2F0aGVyIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCXN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoOworI2VuZGlmCiAJdW5zaWduZWQgaW50IGZ1bGxtbTsKLQl1bnNpZ25lZCBpbnQgbnJfcHRlczsKLQl1bnNpZ25lZCBpbnQgbnJfcHhkczsKLQl1bnNpZ25lZCBpbnQgbWF4OwotCXZvaWQgKiphcnJheTsKLQl2b2lkICpsb2NhbFs4XTsKKwl1bnNpZ25lZCBpbnQgbmVlZF9mbHVzaDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9hbGxvY19wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9XQUlUIHwgX19HRlBfTk9XQVJOLCAwKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorc3RydWN0IG1tdV90YWJsZV9iYXRjaCB7CisJc3RydWN0IHJjdV9oZWFkCQlyY3U7CisJdW5zaWduZWQgaW50CQlucjsKKwl2b2lkCQkJKnRhYmxlc1swXTsKK307CiAKLQlpZiAoYWRkcikgewotCQl0bGItPmFycmF5ID0gKHZvaWQgKikgYWRkcjsKLQkJdGxiLT5tYXggPSBQQUdFX1NJWkUgLyBzaXplb2Yodm9pZCAqKTsKLQl9Ci19CisjZGVmaW5lIE1BWF9UQUJMRV9CQVRDSAkJXAorCSgoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2gpKSAvIHNpemVvZih2b2lkICopKQorCitleHRlcm4gdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYik7CitleHRlcm4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKTsKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJCQkgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCSAgdW5zaWduZWQgaW50IGZ1bGxfbW1fZmx1c2gpCiB7CiAJdGxiLT5tbSA9IG1tOwotCXRsYi0+bWF4ID0gQVJSQVlfU0laRSh0bGItPmxvY2FsKTsKLQl0bGItPmFycmF5ID0gdGxiLT5sb2NhbDsKIAl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisJdGxiLT5uZWVkX2ZsdXNoID0gMDsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCXRsYi0+YmF0Y2ggPSBOVUxMOworI2VuZGlmCiAJaWYgKHRsYi0+ZnVsbG1tKQogCQlfX3RsYl9mbHVzaF9tbShtbSk7Ci0JZWxzZQotCQlfX3RsYl9hbGxvY19wYWdlKHRsYik7Ci0JdGxiLT5ucl9wdGVzID0gMDsKLQl0bGItPm5yX3B4ZHMgPSB0bGItPm1heDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIHsKLQlpZiAoIXRsYi0+ZnVsbG1tICYmICh0bGItPm5yX3B0ZXMgPiAwIHx8IHRsYi0+bnJfcHhkcyA8IHRsYi0+bWF4KSkKLQkJX190bGJfZmx1c2hfbW0odGxiLT5tbSk7Ci0Jd2hpbGUgKHRsYi0+bnJfcHRlcyA+IDApCi0JCXBhZ2VfdGFibGVfZnJlZV9yY3UodGxiLT5tbSwgdGxiLT5hcnJheVstLXRsYi0+bnJfcHRlc10pOwotCXdoaWxlICh0bGItPm5yX3B4ZHMgPCB0bGItPm1heCkKLQkJY3JzdF90YWJsZV9mcmVlX3JjdSh0bGItPm1tLCB0bGItPmFycmF5W3RsYi0+bnJfcHhkcysrXSk7CisJaWYgKCF0bGItPm5lZWRfZmx1c2gpCisJCXJldHVybjsKKwl0bGItPm5lZWRfZmx1c2ggPSAwOworCV9fdGxiX2ZsdXNoX21tKHRsYi0+bW0pOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJdGxiX3RhYmxlX2ZsdXNoKHRsYik7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCiAJCQkJICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl0bGJfZmx1c2hfbW11KHRsYik7Ci0KLQlyY3VfdGFibGVfZnJlZWxpc3RfZmluaXNoKCk7Ci0KLQkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KLQljaGVja19wZ3RfY2FjaGUoKTsKLQotCWlmICh0bGItPmFycmF5ICE9IHRsYi0+bG9jYWwpCi0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHRsYi0+YXJyYXksIDApOwogfQogCiAvKgpAQCAtMTEyLDEyICsxMDUsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHB0ZSwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQl0bGItPmFycmF5W3RsYi0+bnJfcHRlcysrXSA9IHB0ZTsKLQkJaWYgKHRsYi0+bnJfcHRlcyA+PSB0bGItPm5yX3B4ZHMpCi0JCQl0bGJfZmx1c2hfbW11KHRsYik7Ci0JfSBlbHNlCi0JCXBhZ2VfdGFibGVfZnJlZSh0bGItPm1tLCAodW5zaWduZWQgbG9uZyAqKSBwdGUpOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJaWYgKCF0bGItPmZ1bGxtbSkKKwkJcmV0dXJuIHBhZ2VfdGFibGVfZnJlZV9yY3UodGxiLCAodW5zaWduZWQgbG9uZyAqKSBwdGUpOworI2VuZGlmCisJcGFnZV90YWJsZV9mcmVlKHRsYi0+bW0sICh1bnNpZ25lZCBsb25nICopIHB0ZSk7CiB9CiAKIC8qCkBAIC0xMzMsMTIgKzEyNSwxMSBAQAogI2lmZGVmIF9fczM5MHhfXwogCWlmICh0bGItPm1tLT5jb250ZXh0LmFzY2VfbGltaXQgPD0gKDFVTCA8PCAzMSkpCiAJCXJldHVybjsKLQlpZiAoIXRsYi0+ZnVsbG1tKSB7Ci0JCXRsYi0+YXJyYXlbLS10bGItPm5yX3B4ZHNdID0gcG1kOwotCQlpZiAodGxiLT5ucl9wdGVzID49IHRsYi0+bnJfcHhkcykKLQkJCXRsYl9mbHVzaF9tbXUodGxiKTsKLQl9IGVsc2UKLQkJY3JzdF90YWJsZV9mcmVlKHRsYi0+bW0sICh1bnNpZ25lZCBsb25nICopIHBtZCk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlyZXR1cm4gdGxiX3JlbW92ZV90YWJsZSh0bGIsIHBtZCk7CisjZW5kaWYKKwljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcG1kKTsKICNlbmRpZgogfQogCkBAIC0xNTUsMTIgKzE0NiwxMSBAQAogI2lmZGVmIF9fczM5MHhfXwogCWlmICh0bGItPm1tLT5jb250ZXh0LmFzY2VfbGltaXQgPD0gKDFVTCA8PCA0MikpCiAJCXJldHVybjsKLQlpZiAoIXRsYi0+ZnVsbG1tKSB7Ci0JCXRsYi0+YXJyYXlbLS10bGItPm5yX3B4ZHNdID0gcHVkOwotCQlpZiAodGxiLT5ucl9wdGVzID49IHRsYi0+bnJfcHhkcykKLQkJCXRsYl9mbHVzaF9tbXUodGxiKTsKLQl9IGVsc2UKLQkJY3JzdF90YWJsZV9mcmVlKHRsYi0+bW0sICh1bnNpZ25lZCBsb25nICopIHB1ZCk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlyZXR1cm4gdGxiX3JlbW92ZV90YWJsZSh0bGIsIHB1ZCk7CisjZW5kaWYKKwljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcHVkKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggMzBjYTg1Yy4uNjczNDVhZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtNzMxLDYgKzczMSw3IEBACiAJfQogCW1lbWNweShmYWNpbGl0aWVzLCBTMzkwX2xvd2NvcmUuc3RmbGVfZmFjX2xpc3QsIDE2KTsKIAlmYWNpbGl0aWVzWzBdICY9IDB4ZmYwMGZmZjNmNDdjMDAwMFVMTDsKKwlmYWNpbGl0aWVzWzFdICY9IDB4MjAxYzAwMDAwMDAwMDAwMFVMTDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUyBiL2FyY2gvczM5MC9rdm0vc2llNjRhLlMKaW5kZXggYWIwZTA0MS4uNWZhYTFiMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUworKysgYi9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TCkBAIC05Myw0ICs5Myw2IEBACiAKIAkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgogCS5xdWFkCXNpZV9pbnN0LHNpZV9lcnIKKwkucXVhZAlzaWVfZXhpdCxzaWVfZXJyCisJLnF1YWQJc2llX3JlZW50ZXIsc2llX2VycgogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggYjA5NzYzZi4uMzdhMjNjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMjQsOTQgKzI0LDEyIEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKLXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgewotCXN0cnVjdCByY3VfaGVhZCByY3U7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JdW5zaWduZWQgaW50IHBndF9pbmRleDsKLQl1bnNpZ25lZCBpbnQgY3JzdF9pbmRleDsKLQl1bnNpZ25lZCBsb25nICp0YWJsZVswXTsKLX07Ci0KLSNkZWZpbmUgUkNVX0ZSRUVMSVNUX1NJWkUgXAotCSgoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QpKSBcCi0JICAvIHNpemVvZih1bnNpZ25lZCBsb25nKSkKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKiwgcmN1X3RhYmxlX2ZyZWVsaXN0KTsKLQotc3RhdGljIHZvaWQgX19wYWdlX3RhYmxlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKnRhYmxlKTsKLQotc3RhdGljIHN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKnJjdV90YWJsZV9mcmVlbGlzdF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqKmJhdGNocCA9ICZfX2dldF9jcHVfdmFyKHJjdV90YWJsZV9mcmVlbGlzdCk7Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqYmF0Y2ggPSAqYmF0Y2hwOwotCi0JaWYgKGJhdGNoKQotCQlyZXR1cm4gYmF0Y2g7Ci0JYmF0Y2ggPSAoc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JaWYgKGJhdGNoKSB7Ci0JCWJhdGNoLT5tbSA9IG1tOwotCQliYXRjaC0+cGd0X2luZGV4ID0gMDsKLQkJYmF0Y2gtPmNyc3RfaW5kZXggPSBSQ1VfRlJFRUxJU1RfU0laRTsKLQkJKmJhdGNocCA9IGJhdGNoOwotCX0KLQlyZXR1cm4gYmF0Y2g7Ci19Ci0KLXN0YXRpYyB2b2lkIHJjdV90YWJsZV9mcmVlbGlzdF9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqYmF0Y2ggPQotCQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCwgcmN1KTsKLQotCXdoaWxlIChiYXRjaC0+cGd0X2luZGV4ID4gMCkKLQkJX19wYWdlX3RhYmxlX2ZyZWUoYmF0Y2gtPm1tLCBiYXRjaC0+dGFibGVbLS1iYXRjaC0+cGd0X2luZGV4XSk7Ci0Jd2hpbGUgKGJhdGNoLT5jcnN0X2luZGV4IDwgUkNVX0ZSRUVMSVNUX1NJWkUpCi0JCWNyc3RfdGFibGVfZnJlZShiYXRjaC0+bW0sIGJhdGNoLT50YWJsZVtiYXRjaC0+Y3JzdF9pbmRleCsrXSk7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBiYXRjaCk7Ci19Ci0KLXZvaWQgcmN1X3RhYmxlX2ZyZWVsaXN0X2ZpbmlzaCh2b2lkKQotewotCXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKipiYXRjaHAgPSAmZ2V0X2NwdV92YXIocmN1X3RhYmxlX2ZyZWVsaXN0KTsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaCA9ICpiYXRjaHA7Ci0KLQlpZiAoIWJhdGNoKQotCQlnb3RvIG91dDsKLQljYWxsX3JjdSgmYmF0Y2gtPnJjdSwgcmN1X3RhYmxlX2ZyZWVsaXN0X2NhbGxiYWNrKTsKLQkqYmF0Y2hwID0gTlVMTDsKLW91dDoKLQlwdXRfY3B1X3ZhcihyY3VfdGFibGVfZnJlZWxpc3QpOwotfQotCi1zdGF0aWMgdm9pZCBzbXBfc3luYyh2b2lkICphcmcpCi17Ci19Ci0KICNpZm5kZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIEFMTE9DX09SREVSCTEKLSNkZWZpbmUgVEFCTEVTX1BFUl9QQUdFCTQKLSNkZWZpbmUgRlJBR19NQVNLCTE1VUwKLSNkZWZpbmUgU0VDT05EX0hBTFZFUwkxMFVMCi0KLXZvaWQgY2xlYXJfdGFibGVfcGdzdGVzKHVuc2lnbmVkIGxvbmcgKnRhYmxlKQotewotCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUvNCk7Ci0JbWVtc2V0KHRhYmxlICsgMjU2LCAwLCBQQUdFX1NJWkUvNCk7Ci0JY2xlYXJfdGFibGUodGFibGUgKyA1MTIsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS80KTsKLQltZW1zZXQodGFibGUgKyA3NjgsIDAsIFBBR0VfU0laRS80KTsKLX0KLQorI2RlZmluZSBGUkFHX01BU0sJMHgwZgogI2Vsc2UKICNkZWZpbmUgQUxMT0NfT1JERVIJMgotI2RlZmluZSBUQUJMRVNfUEVSX1BBR0UJMgotI2RlZmluZSBGUkFHX01BU0sJM1VMCi0jZGVmaW5lIFNFQ09ORF9IQUxWRVMJMlVMCi0KLXZvaWQgY2xlYXJfdGFibGVfcGdzdGVzKHVuc2lnbmVkIGxvbmcgKnRhYmxlKQotewotCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUvMik7Ci0JbWVtc2V0KHRhYmxlICsgMjU2LCAwLCBQQUdFX1NJWkUvMik7Ci19Ci0KKyNkZWZpbmUgRlJBR19NQVNLCTB4MDMKICNlbmRpZgogCiB1bnNpZ25lZCBsb25nIFZNQUxMT0NfU1RBUlQgPSBWTUFMTE9DX0VORCAtIFZNQUxMT0NfU0laRTsKQEAgLTE0MCwyOSArNTgsNiBAQAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHRhYmxlLCBBTExPQ19PUkRFUik7CiB9CiAKLXZvaWQgY3JzdF90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqYmF0Y2g7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPCAyICYmCi0JICAgIGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpIHsKLQkJY3JzdF90YWJsZV9mcmVlKG1tLCB0YWJsZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQliYXRjaCA9IHJjdV90YWJsZV9mcmVlbGlzdF9nZXQobW0pOwotCWlmICghYmF0Y2gpIHsKLQkJc21wX2NhbGxfZnVuY3Rpb24oc21wX3N5bmMsIE5VTEwsIDEpOwotCQljcnN0X3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWJhdGNoLT50YWJsZVstLWJhdGNoLT5jcnN0X2luZGV4XSA9IHRhYmxlOwotCWlmIChiYXRjaC0+cGd0X2luZGV4ID49IGJhdGNoLT5jcnN0X2luZGV4KQotCQlyY3VfdGFibGVfZnJlZWxpc3RfZmluaXNoKCk7Ci1vdXQ6Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQogI2lmZGVmIENPTkZJR182NEJJVAogaW50IGNyc3RfdGFibGVfdXBncmFkZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBsaW1pdCkKIHsKQEAgLTIzOCwxMjQgKzEzMywxNzUgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdG9taWNfeG9yX2JpdHMoYXRvbWljX3QgKnYsIHVuc2lnbmVkIGludCBiaXRzKQoreworCXVuc2lnbmVkIGludCBvbGQsIG5ldzsKKworCWRvIHsKKwkJb2xkID0gYXRvbWljX3JlYWQodik7CisJCW5ldyA9IG9sZCBeIGJpdHM7CisJfSB3aGlsZSAoYXRvbWljX2NtcHhjaGcodiwgb2xkLCBuZXcpICE9IG9sZCk7CisJcmV0dXJuIG5ldzsKK30KKwogLyoKICAqIHBhZ2UgdGFibGUgZW50cnkgYWxsb2NhdGlvbi9mcmVlIHJvdXRpbmVzLgogICovCisjaWZkZWYgQ09ORklHX1BHU1RFCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKnBhZ2VfdGFibGVfYWxsb2NfcGdzdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyAqdGFibGU7CisKKwlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gTlVMTDsKKwlwZ3RhYmxlX3BhZ2VfY3RvcihwYWdlKTsKKwlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIDMpOworCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZV90b19waHlzKHBhZ2UpOworCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUvMik7CisJY2xlYXJfdGFibGUodGFibGUgKyBQVFJTX1BFUl9QVEUsIDAsIFBBR0VfU0laRS8yKTsKKwlyZXR1cm4gdGFibGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2ZyZWVfcGdzdGUodW5zaWduZWQgbG9uZyAqdGFibGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gcGZuX3RvX3BhZ2UoX19wYSh0YWJsZSkgPj4gUEFHRV9TSElGVCk7CisJcGd0YWJsZV9wYWdlX2N0b3IocGFnZSk7CisJYXRvbWljX3NldCgmcGFnZS0+X21hcGNvdW50LCAtMSk7CisJX19mcmVlX3BhZ2UocGFnZSk7Cit9CisjZW5kaWYKKwogdW5zaWduZWQgbG9uZyAqcGFnZV90YWJsZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1bnNpZ25lZCBsb25nICp0YWJsZTsKLQl1bnNpZ25lZCBsb25nIGJpdHM7CisJdW5zaWduZWQgaW50IG1hc2ssIGJpdDsKIAotCWJpdHMgPSAobW0tPmNvbnRleHQuaGFzX3Bnc3RlKSA/IDNVTCA6IDFVTDsKKyNpZmRlZiBDT05GSUdfUEdTVEUKKwlpZiAobW1faGFzX3Bnc3RlKG1tKSkKKwkJcmV0dXJuIHBhZ2VfdGFibGVfYWxsb2NfcGdzdGUobW0pOworI2VuZGlmCisJLyogQWxsb2NhdGUgZnJhZ21lbnRzIG9mIGEgNEsgcGFnZSBhcyAxSy8ySyBwYWdlIHRhYmxlICovCiAJc3Bpbl9sb2NrX2JoKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwotCXBhZ2UgPSBOVUxMOworCW1hc2sgPSBGUkFHX01BU0s7CiAJaWYgKCFsaXN0X2VtcHR5KCZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpKSB7CiAJCXBhZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QsCiAJCQkJCXN0cnVjdCBwYWdlLCBscnUpOwotCQlpZiAoKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSA9PSAoKDFVTCA8PCBUQUJMRVNfUEVSX1BBR0UpIC0gMSkpCi0JCQlwYWdlID0gTlVMTDsKKwkJdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSBwYWdlX3RvX3BoeXMocGFnZSk7CisJCW1hc2sgPSBhdG9taWNfcmVhZCgmcGFnZS0+X21hcGNvdW50KTsKKwkJbWFzayA9IG1hc2sgfCAobWFzayA+PiA0KTsKIAl9Ci0JaWYgKCFwYWdlKSB7CisJaWYgKChtYXNrICYgRlJBR19NQVNLKSA9PSBGUkFHX01BU0spIHsKIAkJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIE5VTEw7CiAJCXBndGFibGVfcGFnZV9jdG9yKHBhZ2UpOwotCQlwYWdlLT5mbGFncyAmPSB+RlJBR19NQVNLOworCQlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIDEpOwogCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2VfdG9fcGh5cyhwYWdlKTsKLQkJaWYgKG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkKLQkJCWNsZWFyX3RhYmxlX3Bnc3Rlcyh0YWJsZSk7Ci0JCWVsc2UKLQkJCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUpOworCQljbGVhcl90YWJsZSh0YWJsZSwgX1BBR0VfVFlQRV9FTVBUWSwgUEFHRV9TSVpFKTsKIAkJc3Bpbl9sb2NrX2JoKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKKwl9IGVsc2UgeworCQlmb3IgKGJpdCA9IDE7IG1hc2sgJiBiaXQ7IGJpdCA8PD0gMSkKKwkJCXRhYmxlICs9IFBUUlNfUEVSX1BURTsKKwkJbWFzayA9IGF0b21pY194b3JfYml0cygmcGFnZS0+X21hcGNvdW50LCBiaXQpOworCQlpZiAoKG1hc2sgJiBGUkFHX01BU0spID09IEZSQUdfTUFTSykKKwkJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCX0KLQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2VfdG9fcGh5cyhwYWdlKTsKLQl3aGlsZSAocGFnZS0+ZmxhZ3MgJiBiaXRzKSB7Ci0JCXRhYmxlICs9IDI1NjsKLQkJYml0cyA8PD0gMTsKLQl9Ci0JcGFnZS0+ZmxhZ3MgfD0gYml0czsKLQlpZiAoKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSA9PSAoKDFVTCA8PCBUQUJMRVNfUEVSX1BBR0UpIC0gMSkpCi0JCWxpc3RfbW92ZV90YWlsKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwogCXJldHVybiB0YWJsZTsKIH0KIAotc3RhdGljIHZvaWQgX19wYWdlX3RhYmxlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKnRhYmxlKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKLQotCWJpdHMgPSAoKHVuc2lnbmVkIGxvbmcpIHRhYmxlKSAmIDE1OwotCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikoKCh1bnNpZ25lZCBsb25nKSB0YWJsZSkgXiBiaXRzKTsKLQlwYWdlID0gcGZuX3RvX3BhZ2UoX19wYSh0YWJsZSkgPj4gUEFHRV9TSElGVCk7Ci0JcGFnZS0+ZmxhZ3MgXj0gYml0czsKLQlpZiAoIShwYWdlLT5mbGFncyAmIEZSQUdfTUFTSykpIHsKLQkJcGd0YWJsZV9wYWdlX2R0b3IocGFnZSk7Ci0JCV9fZnJlZV9wYWdlKHBhZ2UpOwotCX0KLX0KLQogdm9pZCBwYWdlX3RhYmxlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKnRhYmxlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKKwl1bnNpZ25lZCBpbnQgYml0LCBtYXNrOwogCi0JYml0cyA9IChtbS0+Y29udGV4dC5oYXNfcGdzdGUpID8gM1VMIDogMVVMOwotCWJpdHMgPDw9IChfX3BhKHRhYmxlKSAmIChQQUdFX1NJWkUgLSAxKSkgLyAyNTYgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7CisjaWZkZWYgQ09ORklHX1BHU1RFCisJaWYgKG1tX2hhc19wZ3N0ZShtbSkpCisJCXJldHVybiBwYWdlX3RhYmxlX2ZyZWVfcGdzdGUodGFibGUpOworI2VuZGlmCisJLyogRnJlZSAxSy8ySyBwYWdlIHRhYmxlIGZyYWdtZW50IG9mIGEgNEsgcGFnZSAqLwogCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKKwliaXQgPSAxIDw8ICgoX19wYSh0YWJsZSkgJiB+UEFHRV9NQVNLKS8oUFRSU19QRVJfUFRFKnNpemVvZihwdGVfdCkpKTsKIAlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JcGFnZS0+ZmxhZ3MgXj0gYml0czsKLQlpZiAocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spIHsKLQkJLyogUGFnZSBub3cgaGFzIHNvbWUgZnJlZSBwZ3RhYmxlIGZyYWdtZW50cy4gKi8KLQkJaWYgKCFsaXN0X2VtcHR5KCZwYWdlLT5scnUpKQotCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwotCQlwYWdlID0gTlVMTDsKLQl9IGVsc2UKLQkJLyogQWxsIGZyYWdtZW50cyBvZiB0aGUgNEsgcGFnZSBoYXZlIGJlZW4gZnJlZWQuICovCisJaWYgKChhdG9taWNfcmVhZCgmcGFnZS0+X21hcGNvdW50KSAmIEZSQUdfTUFTSykgIT0gRlJBR19NQVNLKQogCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKKwltYXNrID0gYXRvbWljX3hvcl9iaXRzKCZwYWdlLT5fbWFwY291bnQsIGJpdCk7CisJaWYgKG1hc2sgJiBGUkFHX01BU0spCisJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwotCWlmIChwYWdlKSB7CisJaWYgKG1hc2sgPT0gMCkgewogCQlwZ3RhYmxlX3BhZ2VfZHRvcihwYWdlKTsKKwkJYXRvbWljX3NldCgmcGFnZS0+X21hcGNvdW50LCAtMSk7CiAJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCX0KIH0KIAotdm9pZCBwYWdlX3RhYmxlX2ZyZWVfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nICp0YWJsZSkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIGJpdHM7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKIAotCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA8IDIgJiYKLQkgICAgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkgewotCQlwYWdlX3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7CitzdGF0aWMgdm9pZCBfX3BhZ2VfdGFibGVfZnJlZV9yY3Uodm9pZCAqdGFibGUsIHVuc2lnbmVkIGJpdCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworI2lmZGVmIENPTkZJR19QR1NURQorCWlmIChiaXQgPT0gRlJBR19NQVNLKQorCQlyZXR1cm4gcGFnZV90YWJsZV9mcmVlX3Bnc3RlKHRhYmxlKTsKKyNlbmRpZgorCS8qIEZyZWUgMUsvMksgcGFnZSB0YWJsZSBmcmFnbWVudCBvZiBhIDRLIHBhZ2UgKi8KKwlwYWdlID0gcGZuX3RvX3BhZ2UoX19wYSh0YWJsZSkgPj4gUEFHRV9TSElGVCk7CisJaWYgKGF0b21pY194b3JfYml0cygmcGFnZS0+X21hcGNvdW50LCBiaXQpID09IDApIHsKKwkJcGd0YWJsZV9wYWdlX2R0b3IocGFnZSk7CisJCWF0b21pY19zZXQoJnBhZ2UtPl9tYXBjb3VudCwgLTEpOworCQlfX2ZyZWVfcGFnZShwYWdlKTsKIAl9Ci0JYmF0Y2ggPSByY3VfdGFibGVfZnJlZWxpc3RfZ2V0KG1tKTsKLQlpZiAoIWJhdGNoKSB7Ci0JCXNtcF9jYWxsX2Z1bmN0aW9uKHNtcF9zeW5jLCBOVUxMLCAxKTsKLQkJcGFnZV90YWJsZV9mcmVlKG1tLCB0YWJsZSk7Ci0JCWdvdG8gb3V0OworfQorCit2b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdW5zaWduZWQgbG9uZyAqdGFibGUpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgaW50IGJpdCwgbWFzazsKKworCW1tID0gdGxiLT5tbTsKKyNpZmRlZiBDT05GSUdfUEdTVEUKKwlpZiAobW1faGFzX3Bnc3RlKG1tKSkgeworCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIChfX3BhKHRhYmxlKSB8IEZSQUdfTUFTSyk7CisJCXRsYl9yZW1vdmVfdGFibGUodGxiLCB0YWJsZSk7CisJCXJldHVybjsKIAl9Ci0JYml0cyA9IChtbS0+Y29udGV4dC5oYXNfcGdzdGUpID8gM1VMIDogMVVMOwotCWJpdHMgPDw9IChfX3BhKHRhYmxlKSAmIChQQUdFX1NJWkUgLSAxKSkgLyAyNTYgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7CisjZW5kaWYKKwliaXQgPSAxIDw8ICgoX19wYSh0YWJsZSkgJiB+UEFHRV9NQVNLKSAvIChQVFJTX1BFUl9QVEUqc2l6ZW9mKHB0ZV90KSkpOwogCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKIAlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JLyogRGVsYXllZCBmcmVlaW5nIHdpdGggcmN1IHByZXZlbnRzIHJldXNlIG9mIHBndGFibGUgZnJhZ21lbnRzICovCi0JbGlzdF9kZWxfaW5pdCgmcGFnZS0+bHJ1KTsKKwlpZiAoKGF0b21pY19yZWFkKCZwYWdlLT5fbWFwY291bnQpICYgRlJBR19NQVNLKSAhPSBGUkFHX01BU0spCisJCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCW1hc2sgPSBhdG9taWNfeG9yX2JpdHMoJnBhZ2UtPl9tYXBjb3VudCwgYml0IHwgKGJpdCA8PCA0KSk7CisJaWYgKG1hc2sgJiBGUkFHX01BU0spCisJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSgoKHVuc2lnbmVkIGxvbmcpIHRhYmxlKSB8IGJpdHMpOwotCWJhdGNoLT50YWJsZVtiYXRjaC0+cGd0X2luZGV4KytdID0gdGFibGU7Ci0JaWYgKGJhdGNoLT5wZ3RfaW5kZXggPj0gYmF0Y2gtPmNyc3RfaW5kZXgpCi0JCXJjdV90YWJsZV9mcmVlbGlzdF9maW5pc2goKTsKLW91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOworCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgKF9fcGEodGFibGUpIHwgKGJpdCA8PCA0KSk7CisJdGxiX3JlbW92ZV90YWJsZSh0bGIsIHRhYmxlKTsKIH0KIAordm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqX3RhYmxlKQoreworCXZvaWQgKnRhYmxlID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpIF90YWJsZSAmIFBBR0VfTUFTSyk7CisJdW5zaWduZWQgdHlwZSA9ICh1bnNpZ25lZCBsb25nKSBfdGFibGUgJiB+UEFHRV9NQVNLOworCisJaWYgKHR5cGUpCisJCV9fcGFnZV90YWJsZV9mcmVlX3JjdSh0YWJsZSwgdHlwZSk7CisJZWxzZQorCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSB0YWJsZSwgQUxMT0NfT1JERVIpOworfQorCisjZW5kaWYKKwogLyoKICAqIHN3aXRjaCBvbiBwZ3N0ZXMgZm9yIGl0cyB1c2Vyc3BhY2UgcHJvY2VzcyAoZm9yIGt2bSkKICAqLwpAQCAtMzY5LDcgKzMxNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRG8gd2UgaGF2ZSBwZ3N0ZXM/IGlmIHllcywgd2UgYXJlIGRvbmUgKi8KLQlpZiAodHNrLT5tbS0+Y29udGV4dC5oYXNfcGdzdGUpCisJaWYgKG1tX2hhc19wZ3N0ZSh0c2stPm1tKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBsZXRzIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIHJlcGxhY2UgdGhlIG1tICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNzQ0OTVhNS4uZjAzMzM4YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTYxLDcgKzE2MSw3IEBACiAKIGNvbmZpZyBOT19JT1BPUlQKIAlkZWZfYm9vbCAhUENJCi0JZGVwZW5kcyBvbiAhU0hfQ0FZTUFOICYmICFTSF9TSDQyMDJfTUlDUk9ERVYKKwlkZXBlbmRzIG9uICFTSF9DQVlNQU4gJiYgIVNIX1NINDIwMl9NSUNST0RFViAmJiAhU0hfU0hNSU4KIAogY29uZmlnIElPX1RSQVBQRUQKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKaW5kZXggNjE4YmQ1Ni4uOTY5NDIxZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwpAQCAtMzU5LDM3ICszNTksMzEgQEAKIAkucHJpdgkJPSAmY2FtZXJhX2luZm8sCiB9OwogCi1zdGF0aWMgdm9pZCBkdW1teV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLX0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjYW1lcmFfZGV2aWNlOwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjYW1lcmFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzb2NfY2FtZXJhX3BsYXRmb3JtIiwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY2FtZXJhX2luZm8sCi0JCS5yZWxlYXNlCT0gZHVtbXlfcmVsZWFzZSwKLQl9LAotfTsKK3N0YXRpYyB2b2lkIGFwMzI1cnhhX2NhbWVyYV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2UoJmNhbWVyYV9kZXZpY2UpOworfQogCiBzdGF0aWMgaW50IGFwMzI1cnhhX2NhbWVyYV9hZGQoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoaWNsICE9ICZjYW1lcmFfbGluayB8fCBjYW1lcmFfcHJvYmUoKSA8PSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpbnQgcmV0ID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9hZGQoaWNsLCBkZXYsICZjYW1lcmFfZGV2aWNlLCAmY2FtZXJhX2xpbmssCisJCQkJCSAgYXAzMjVyeGFfY2FtZXJhX3JlbGVhc2UsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCi0JY2FtZXJhX2luZm8uZGV2ID0gZGV2OworCXJldCA9IGNhbWVyYV9wcm9iZSgpOworCWlmIChyZXQgPCAwKQorCQlzb2NfY2FtZXJhX3BsYXRmb3JtX2RlbChpY2wsIGNhbWVyYV9kZXZpY2UsICZjYW1lcmFfbGluayk7CiAKLQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjYW1lcmFfZGV2aWNlKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhcDMyNXJ4YV9jYW1lcmFfZGVsKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCkKIHsKLQlpZiAoaWNsICE9ICZjYW1lcmFfbGluaykKLQkJcmV0dXJuOwotCi0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmNhbWVyYV9kZXZpY2UpOwotCW1lbXNldCgmY2FtZXJhX2RldmljZS5kZXYua29iaiwgMCwKLQkgICAgICAgc2l6ZW9mKGNhbWVyYV9kZXZpY2UuZGV2LmtvYmopKTsKKwlzb2NfY2FtZXJhX3BsYXRmb3JtX2RlbChpY2wsIGNhbWVyYV9kZXZpY2UsICZjYW1lcmFfbGluayk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0kyQyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggYmIxM2QwZS4uM2EzMjc0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtODg1LDYgKzg4NSw5IEBACiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2hfbW1jaWZfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBzaF9tbWNpZl9yZXNvdXJjZXMsCisJLmFyY2hkYXRhID0geworCQkuaHdibGtfaWQgPSBIV0JMS19NTUMsCisJfSwKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBkYjg1OTE2Li45MjEwZTkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggNDA3MjViNC4uODhiZDZiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC00MSw3ICs0MSw5IEBACiAKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCQkJKCgocmVncyktPnNyICYgMHg0MDAwMDAwMCk9PTApCiAjZGVmaW5lIGtlcm5lbF9zdGFja19wb2ludGVyKF9yZWdzKQkoKHVuc2lnbmVkIGxvbmcpKF9yZWdzKS0+cmVnc1sxNV0pCi0jZGVmaW5lIEdFVF9VU1AocmVncykgKChyZWdzKS0+cmVnc1sxNV0pCisKKyNkZWZpbmUgR0VUX0ZQKHJlZ3MpCSgocmVncyktPnJlZ3NbMTRdKQorI2RlZmluZSBHRVRfVVNQKHJlZ3MpCSgocmVncyktPnJlZ3NbMTVdKQogCiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CiAKQEAgLTEzMSw3ICsxMzMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl1bnNpZ25lZCBsb25nIHBjID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKKwl1bnNpZ25lZCBsb25nIHBjID0gcmVncy0+cGM7CiAKIAlpZiAodmlydF9hZGRyX3VuY2FjaGVkKHBjKSkKIAkJcmV0dXJuIENBQ19BRERSKHBjKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDZjMzA4ZDguLmVjODhiZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaApAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKICNpZmRlZiBDT05GSUdfTU1VCisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIyLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIyLmgKaW5kZXggN2E1YjhhMy4uYmQwNjIyNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaApAQCAtMjM2LDYgKzIzNiw3IEBACiB9OwogCiBlbnVtIHsKKwlTSERNQV9TTEFWRV9JTlZBTElELAogCVNIRE1BX1NMQVZFX1NDSUYwX1RYLAogCVNIRE1BX1NMQVZFX1NDSUYwX1JYLAogCVNIRE1BX1NMQVZFX1NDSUYxX1RYLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyNC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyNC5oCmluZGV4IDdlYjQzNTkuLjNkYWVmOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzI0LmgKQEAgLTI4NSw2ICsyODUsNyBAQAogfTsKIAogZW51bSB7CisJU0hETUFfU0xBVkVfSU5WQUxJRCwKIAlTSERNQV9TTEFWRV9TQ0lGMF9UWCwKIAlTSERNQV9TTEFWRV9TQ0lGMF9SWCwKIAlTSERNQV9TTEFWRV9TQ0lGMV9UWCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3NTcuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3NTcuaAppbmRleCAwNWI4MTk2Li40MWY5ZjhiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzU3LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc1Ny5oCkBAIC0yNTIsNiArMjUyLDcgQEAKIH07CiAKIGVudW0geworCVNIRE1BX1NMQVZFX0lOVkFMSUQsCiAJU0hETUFfU0xBVkVfU0RISV9UWCwKIAlTSERNQV9TTEFWRV9TREhJX1JYLAogCVNIRE1BX1NMQVZFX01NQ0lGX1RYLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDc2MmExMzkuLmI0NzNmMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwppbmRleCA0MDczM2E5Li5mMjUxYjVmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYworKysgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwpAQCAtODIsNyArODIsNyBAQAogCXZvaWQgKmFkZHI7CiAKIAlhZGRyID0gX19pbl8yOWJpdF9tb2RlKCkgPwotCSAgICAgICAodm9pZCAqKVAxU0VHQUREUigodW5zaWduZWQgbG9uZyl2YWRkcikgOiB2YWRkcjsKKwkgICAgICAgKHZvaWQgKilDQUNfQUREUigodW5zaWduZWQgbG9uZyl2YWRkcikgOiB2YWRkcjsKIAogCXN3aXRjaCAoZGlyZWN0aW9uKSB7CiAJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CQkvKiBpbnZhbGlkYXRlIG9ubHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCBhZjMyZTE3Li4yNTM5ODZiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0yNiw3ICsyNiw2IEBACiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCXNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTAogCXNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19ERVBSRUNBVEVECiAJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKIAlzZWxlY3QgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaWYgU01QCiAKQEAgLTUyOCw2ICs1MjcsMjMgQEAKIGNvbmZpZyBQQ0lfU1lTQ0FMTAogCWRlZl9ib29sIFBDSQogCitjb25maWcgUENJQ19QQ0kKKwlib29sCisJZGVwZW5kcyBvbiBQQ0kgJiYgU1BBUkMzMiAmJiAhU1BBUkNfTEVPTgorCWRlZmF1bHQgeQorCitjb25maWcgTEVPTl9QQ0kKKwlib29sCisJZGVwZW5kcyBvbiBQQ0kgJiYgU1BBUkNfTEVPTgorCWRlZmF1bHQgeQorCitjb25maWcgR1JQQ0kyCisJYm9vbCAiR1JQQ0kyIEhvc3QgQnJpZGdlIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBMRU9OX1BDSQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSB0aGUgR1JQQ0kyIEhvc3QgQnJpZGdlIERyaXZlci4KKwogc291cmNlICJkcml2ZXJzL3BjaS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvcGNtY2lhL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfMzIuaAppbmRleCA0ODJjNzllLi43NDQwOTE1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzMyLmgKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlyZXR1cm4gc3VuX2ZkYy0+ZGF0YV84MjA3MjsKIAljYXNlIDc6IC8qIEZEX0RJUiAqLwogCQlyZXR1cm4gc3VuX3JlYWRfZGlyKCk7Ci0JfTsKKwl9CiAJcGFuaWMoInN1bl84MjA3Ml9mZF9pbmI6IEhvdyBkaWQgSSBnZXQgaGVyZT8iKTsKIH0KIApAQCAtMTYxLDcgKzE2MSw3IEBACiAJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KIAkJc3VuX2ZkYy0+c3RhdHVzXzgyMDcyID0gdmFsdWU7CiAJCWJyZWFrOwotCX07CisJfQogCXJldHVybjsKIH0KIApAQCAtMTg2LDcgKzE4Niw3IEBACiAJCXJldHVybiBzdW5fZmRjLT5kYXRhXzgyMDc3OwogCWNhc2UgNzogLyogRkRfRElSICovCiAJCXJldHVybiBzdW5fcmVhZF9kaXIoKTsKLQl9OworCX0KIAlwYW5pYygic3VuXzgyMDc3X2ZkX2luYjogSG93IGRpZCBJIGdldCBoZXJlPyIpOwogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAKIAljYXNlIDM6IC8qIEZEX1REUiAqLwogCQlzdW5fZmRjLT50YXBlY3RsXzgyMDc3ID0gdmFsdWU7CiAJCWJyZWFrOwotCX07CisJfQogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzY0LmgKaW5kZXggNjU5N2NlOC4uYmNlZjFmNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV82NC5oCkBAIC0xMTEsNyArMTExLDcgQEAKIAljYXNlIDc6IC8qIEZEX0RJUiAqLwogCQkvKiBYWFg6IElzIERDTCBvbiAweDgwIGluIHN1bjRtPyAqLwogCQlyZXR1cm4gc2J1c19yZWFkYigmc3VuX2ZkYy0+ZGlyXzgyMDc3KTsKLQl9OworCX0KIAlwYW5pYygic3VuXzgyMDcyX2ZkX2luYjogSG93IGRpZCBJIGdldCBoZXJlPyIpOwogfQogCkBAIC0xMzUsNyArMTM1LDcgQEAKIAljYXNlIDQ6IC8qIEZEX1NUQVRVUyAqLwogCQlzYnVzX3dyaXRlYih2YWx1ZSwgJnN1bl9mZGMtPnN0YXR1c184MjA3Nyk7CiAJCWJyZWFrOwotCX07CisJfQogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaAppbmRleCA2YmRhZjFlLi5hNGU0NTdmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaApAQCAtMzE4LDYgKzMxOCw5IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGxlb25fYnVpbGRfZGV2aWNlX2lycSh1bnNpZ25lZCBpbnQgcmVhbF9pcnEsCiAJCQkJCSAgIGlycV9mbG93X2hhbmRsZXJfdCBmbG93X2hhbmRsZXIsCiAJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBkb19hY2spOworZXh0ZXJuIHZvaWQgbGVvbl91cGRhdGVfdmlycV9oYW5kbGluZyh1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgIGlycV9mbG93X2hhbmRsZXJfdCBmbG93X2hhbmRsZXIsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZG9fYWNrKTsKIGV4dGVybiB2b2lkIGxlb25fY2xlYXJfY2xvY2tfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgbGVvbl9sb2FkX3Byb2ZpbGVfaXJxKGludCBjcHUsIHVuc2lnbmVkIGludCBsaW1pdCk7CiBleHRlcm4gdm9pZCBsZW9uX2luaXRfdGltZXJzKGlycV9oYW5kbGVyX3QgY291bnRlcl9mbik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb25fcGNpLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb25fcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiNGIzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9wY2kuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogYXNtL2xlb25fcGNpLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWVyb2ZsZXggR2Fpc2xlciBBQiwgRGFuaWVsIEhlbGxzdHJvbQorICovCisKKyNpZm5kZWYgX0FTTV9MRU9OX1BDSV9IXworI2RlZmluZSBfQVNNX0xFT05fUENJX0hfCisKKy8qIFBDSSByZWxhdGVkIGRlZmluaXRpb25zICovCitzdHJ1Y3QgbGVvbl9wY2lfaW5mbyB7CisJc3RydWN0IHBjaV9vcHMgKm9wczsKKwlzdHJ1Y3QgcmVzb3VyY2UJaW9fc3BhY2U7CisJc3RydWN0IHJlc291cmNlCW1lbV9zcGFjZTsKKwlpbnQgKCptYXBfaXJxKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworfTsKKworZXh0ZXJuIHZvaWQgbGVvbl9wY2lfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwKKwkJCQlzdHJ1Y3QgbGVvbl9wY2lfaW5mbyAqaW5mbyk7CisKKyNlbmRpZiAvKiBfQVNNX0xFT05fUENJX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaAppbmRleCAzMzJhYzlhLi44NjJlM2NlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzMyLmgKQEAgLTQ3LDcgKzQ3LDMxIEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKKyNpZm5kZWYgQ09ORklHX0xFT05fUENJCiAvKiBnZW5lcmljIHBjaSBzdHVmZiAqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS5oPgorI2Vsc2UKKy8qCisgKiBPbiBMRU9OIFBDSSBNZW1vcnkgc3BhY2UgaXMgbWFwcGVkIDE6MSB3aXRoIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuCisgKgorICogSS9PIHNwYWNlIGlzIGxvY2F0ZWQgYXQgbG93IDY0S2J5dGVzIGluIFBDSSBJL08gc3BhY2UuIFRoZSBJL08gYWRkcmVzc2VzCisgKiBhcmUgY29udmVydGVkIGludG8gQ1BVIGFkZHJlc3NlcyB0byB2aXJ0dWFsIGFkZHJlc3NlcyB0aGF0IGFyZSBtYXBwZWQgd2l0aAorICogTU1VIHRvIHRoZSBQQ0kgSG9zdCBQQ0kgSS9PIHNwYWNlIHdpbmRvdyB3aGljaCBhcmUgdHJhbnNsYXRlZCB0byB0aGUgbG93CisgKiA2NEtieXRlcyBieSB0aGUgSG9zdCBjb250cm9sbGVyLgorICovCisKK2V4dGVybiB2b2lkCitwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKKwkJCXN0cnVjdCByZXNvdXJjZSAqcmVzKTsKKworZXh0ZXJuIHZvaWQKK3BjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pOworCitzdGF0aWMgaW5saW5lIGludCBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjaGFubmVsKQoreworCXJldHVybiBQQ0lfSVJRX05PTkU7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1BBUkNfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpYy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2ljLmgKaW5kZXggN2ViNWQ3OC4uNjY3NmNiYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2ljLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2ljLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAlpbnQJCQlwY2ljX2ltZGltOwogfTsKIAotI2lmZGVmIENPTkZJR19QQ0kKKyNpZmRlZiBDT05GSUdfUENJQ19QQ0kKIGV4dGVybiBpbnQgcGNpY19wcmVzZW50KHZvaWQpOwogZXh0ZXJuIGludCBwY2ljX3Byb2JlKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpX3RpbWVfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCmluZGV4IDQ3YTdlODYuLmFiYTE2MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaApAQCAtMjIwLDcgKzIyMCw3IEBACiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSA0OgogCQlyZXR1cm4geGNoZ191MzIocHRyLCB4KTsKLQl9OworCX0KIAlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKIAlyZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCmluZGV4IDNjOTZkM2IuLjEwYmNhYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaApAQCAtMjM0LDcgKzIzNCw3IEBACiAJCXJldHVybiB4Y2hnMzIocHRyLCB4KTsKIAljYXNlIDg6CiAJCXJldHVybiB4Y2hnNjQocHRyLCB4KTsKLQl9OworCX0KIAlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKIAlyZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOWNmZjI3MC4uYjkwYjRhMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTczLDcgKzczLDkgQEAKIAogb2JqLXkgICAgICAgICAgICAgICAgICAgICArPSBkbWEubwogCi1vYmotJChDT05GSUdfU1BBUkMzMl9QQ0kpICs9IHBjaWMubworb2JqLSQoQ09ORklHX1BDSUNfUENJKSAgICArPSBwY2ljLm8KK29iai0kKENPTkZJR19MRU9OX1BDSSkgICAgKz0gbGVvbl9wY2kubworb2JqLSQoQ09ORklHX0dSUENJMikgICAgICArPSBsZW9uX3BjaV9ncnBjaTIubwogCiBvYmotJChDT05GSUdfU01QKSAgICAgICAgICs9IHRyYW1wb2xpbmVfJChCSVRTKS5vIHNtcF8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19TUEFSQzMyX1NNUCkgKz0gc3VuNG1fc21wLm8gc3VuNGRfc21wLm8gbGVvbl9zbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYwppbmRleCAxZTM0ZjI5Li5jYWVmOWRlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKLQl9OworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW9fMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvXzMyLmMKaW5kZXggODUwNWUwYS4uYWNmNTE1MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW9fMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpb18zMi5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcGFuaWMoIkNhbid0IHNldCBBVVhJTyByZWdpc3RlciBvbiB0aGlzIG1hY2hpbmUuIik7Ci0JfTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXV4aW9fbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChzZXRfYXV4aW8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvY2htYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvY2htYy5jCmluZGV4IDY2OGM3YmUuLjVmNDUwMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2NobWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jaG1jLmMKQEAgLTY2NCw3ICs2NjQsNyBAQAogCWNhc2UgMHgwOgogCQlicC0+aW50ZXJsZWF2ZSA9IDE2OwogCQlicmVhazsKLQl9OworCX0KIAogCS8qIFVLWzEwXSBpcyByZXNlcnZlZCwgYW5kIFVLWzExXSBpcyBub3Qgc2V0IGZvciB0aGUgU0RSQU0KIAkgKiBiYW5rIHNpemUgZGVmaW5pdGlvbi4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDgzNDE5NjMuLjlmZTA4YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwpAQCAtMjI5LDcgKzIyOSw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCS5nbG9ibAlwYXRjaG1lX21heWJlX3NtcF9tc2cKIAotCWNtcAklbDcsIDEyCisJY21wCSVsNywgMTEKIHBhdGNobWVfbWF5YmVfc21wX21zZzoKIAliZ3UJbWF5YmVfc21wNG1fbXNnCiAJIG5vcApAQCAtMjkzLDcgKzI5Myw3IEBACiAJV1JJVEVfUEFVU0UKIAl3cgklbDQsIFBTUl9FVCwgJXBzcgogCVdSSVRFX1BBVVNFCi0Jc2xsCSVvMiwgMjgsICVvMgkJISBzaGlmdCBmb3Igc2ltcGxlciBjaGVja3MgYmVsb3cKKwlzbGwJJW8zLCAyOCwgJW8yCQkhIHNoaWZ0IGZvciBzaW1wbGVyIGNoZWNrcyBiZWxvdwogbWF5YmVfc21wNG1fbXNnX2NoZWNrX3NpbmdsZToKIAlhbmRjYwklbzIsIDB4MSwgJWcwCiAJYmVxLGEJbWF5YmVfc21wNG1fbXNnX2NoZWNrX21hc2sKQEAgLTE2MDQsNyArMTYwNCw3IEBACiAJcmV0bAogCSBub3AKIAotI2lmZGVmIENPTkZJR19QQ0kKKyNpZmRlZiBDT05GSUdfUENJQ19QQ0kKICNpbmNsdWRlIDxhc20vcGNpYy5oPgogCiAJLmFsaWduCTQKQEAgLTE2NTAsNyArMTY1MCw3IEBACiAJIHJkCSVwc3IsICVsMAogCS53b3JkCTAKIAotI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJQ19QQ0kgKi8KIAogCS5nbG9ibAlmbHVzaHdfYWxsCiBmbHVzaHdfYWxsOgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMKaW5kZXggMmY1MzhhYy4uZDE3MjU1YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCkBAIC0yMzYsNiArMjM2LDIxIEBACiAJcmV0dXJuIGxlb25fYnVpbGRfZGV2aWNlX2lycShyZWFsX2lycSwgaGFuZGxlX3NpbXBsZV9pcnEsICJlZGdlIiwgMCk7CiB9CiAKK3ZvaWQgbGVvbl91cGRhdGVfdmlycV9oYW5kbGluZyh1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgIGlycV9mbG93X2hhbmRsZXJfdCBmbG93X2hhbmRsZXIsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZG9fYWNrKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9ICh1bnNpZ25lZCBsb25nKWlycV9nZXRfY2hpcF9kYXRhKHZpcnEpOworCisJbWFzayAmPSB+TEVPTl9ET19BQ0tfSFc7CisJaWYgKGRvX2FjaykKKwkJbWFzayB8PSBMRU9OX0RPX0FDS19IVzsKKworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKHZpcnEsICZsZW9uX2lycSwKKwkJCQkgICAgICBmbG93X2hhbmRsZXIsIG5hbWUpOworCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsICh2b2lkICopbWFzayk7Cit9CisKIHZvaWQgX19pbml0IGxlb25faW5pdF90aW1lcnMoaXJxX2hhbmRsZXJfdCBjb3VudGVyX2ZuKQogewogCWludCBpcnEsIGVpcnE7CkBAIC0zNjEsNiArMzc2LDIyIEBACiAJCXByb21faGFsdCgpOwogCX0KIAorI2lmZGVmIENPTkZJR19TTVAKKwl7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJLyoKKwkJICogSW4gU01QLCBzdW40bSBhZGRzIGEgSVBJIGhhbmRsZXIgdG8gSVJRIHRyYXAgaGFuZGxlciB0aGF0CisJCSAqIExFT04gbmV2ZXIgbXVzdCB0YWtlLCBzdW40ZCBhbmQgTEVPTiBvdmVyd3JpdGVzIHRoZSBicmFuY2gKKwkJICogd2l0aCBhIE5PUC4KKwkJICovCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJcGF0Y2htZV9tYXliZV9zbXBfbXNnWzBdID0gMHgwMTAwMDAwMDsgLyogTk9QIG91dCB0aGUgYnJhbmNoICovCisJCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorI2VuZGlmCisKIAlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeF0uY3RybCwKIAkJCSAgICAgIExFT04zX0dQVElNRVJfRU4gfAogCQkJICAgICAgTEVPTjNfR1BUSU1FUl9STCB8CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGE5YTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2kuYwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIGxlb25fcGNpLmM6IExFT04gSG9zdCBQQ0kgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZXJvZmxleCBHYWlzbGVyIEFCLCBEYW5pZWwgSGVsbHN0cm9tCisgKgorICogQ29kZSBpcyBwYXJ0aWFsbHkgZGVyaXZlZCBmcm9tIHBjaWMuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgorI2luY2x1ZGUgPGFzbS9sZW9uX3BjaS5oPgorCisvKiBUaGUgTEVPTiBhcmNoaXRlY3R1cmUgZG9lcyBub3QgcmVseSBvbiBhIEJJT1Mgb3IgYm9vdGxvYWRlciB0byBzZXR1cAorICogUENJIGZvciB1cy4gVGhlIExpbnV4IGdlbmVyaWMgcm91dGluZXMgYXJlIHVzZWQgdG8gc2V0dXAgcmVzb3VyY2VzLAorICogcmVzZXQgdmFsdWVzIG9mIGNvbmZ1cmF0aW9uLXNwYWNlIHJlZ2lzdGVycyBzZXR0aW5ncyBhZSBwcmVzZXZlZC4KKyAqLwordm9pZCBsZW9uX3BjaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2LCBzdHJ1Y3QgbGVvbl9wY2lfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqcm9vdF9idXM7CisKKwlyb290X2J1cyA9IHBjaV9zY2FuX2J1c19wYXJlbnRlZCgmb2ZkZXYtPmRldiwgMCwgaW5mby0+b3BzLCBpbmZvKTsKKwlpZiAocm9vdF9idXMpIHsKKwkJcm9vdF9idXMtPnJlc291cmNlWzBdID0gJmluZm8tPmlvX3NwYWNlOworCQlyb290X2J1cy0+cmVzb3VyY2VbMV0gPSAmaW5mby0+bWVtX3NwYWNlOworCQlyb290X2J1cy0+cmVzb3VyY2VbMl0gPSBOVUxMOworCisJCS8qIEluaXQgYWxsIFBDSSBkZXZpY2VzIGludG8gUENJIHRyZWUgKi8KKwkJcGNpX2J1c19hZGRfZGV2aWNlcyhyb290X2J1cyk7CisKKwkJLyogU2V0dXAgSVJRcyBvZiBhbGwgZGV2aWNlcyB1c2luZyBjdXN0b20gcm91dGluZXMgKi8KKwkJcGNpX2ZpeHVwX2lycXMocGNpX2NvbW1vbl9zd2l6emxlLCBpbmZvLT5tYXBfaXJxKTsKKworCQkvKiBBc3NpZ24gZGV2aWNlcyB3aXRoIHJlc291cmNlcyAqLworCQlwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKCk7CisJfQorfQorCisvKiBQQ0kgTWVtb3J5IGFuZCBQcmVmZXRjaGFibGUgTWVtb3J5IGlzIGRpcmVjdC1tYXBwZWQuIEhvd2V2ZXIgSS9PIFNwYWNlIGlzCisgKiBhY2Nlc3NlZCB0aHJvdWdoIGEgV2luZG93IHdoaWNoIGlzIHRyYW5zbGF0ZWQgdG8gbG93IDY0S0IgaW4gUENJIHNwYWNlLCB0aGUKKyAqIGZpcnN0IDRLQiBpcyBub3QgdXNlZCBzbyA2MEtCIGlzIGF2YWlsYWJsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgZ2VuZXJpYyBjb2RlIHRvIHRyYW5zbGF0ZSByZXNvdXJjZSBhZGRyZXNzZXMgaW50bworICogUENJIGFkZHJlc3Nlcy4KKyAqLwordm9pZCBwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKKwkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJc3RydWN0IGxlb25fcGNpX2luZm8gKmluZm8gPSBkZXYtPmJ1cy0+c3lzZGF0YTsKKworCXJlZ2lvbi0+c3RhcnQgPSByZXMtPnN0YXJ0OworCXJlZ2lvbi0+ZW5kID0gcmVzLT5lbmQ7CisKKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJcmVnaW9uLT5zdGFydCAtPSAoaW5mby0+aW9fc3BhY2Uuc3RhcnQgLSAweDEwMDApOworCQlyZWdpb24tPmVuZCAtPSAoaW5mby0+aW9fc3BhY2Uuc3RhcnQgLSAweDEwMDApOworCX0KK30KK0VYUE9SVF9TWU1CT0wocGNpYmlvc19yZXNvdXJjZV90b19idXMpOworCisvKiBzZWUgcGNpYmlvc19yZXNvdXJjZV90b19idXMoKSBjb21tZW50ICovCit2b2lkIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJICAgICBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbikKK3sKKwlzdHJ1Y3QgbGVvbl9wY2lfaW5mbyAqaW5mbyA9IGRldi0+YnVzLT5zeXNkYXRhOworCisJcmVzLT5zdGFydCA9IHJlZ2lvbi0+c3RhcnQ7CisJcmVzLT5lbmQgPSByZWdpb24tPmVuZDsKKworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgeworCQlyZXMtPnN0YXJ0ICs9IChpbmZvLT5pb19zcGFjZS5zdGFydCAtIDB4MTAwMCk7CisJCXJlcy0+ZW5kICs9IChpbmZvLT5pb19zcGFjZS5zdGFydCAtIDB4MTAwMCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChwY2liaW9zX2J1c190b19yZXNvdXJjZSk7CisKK3ZvaWQgX19kZXZpbml0IHBjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpwYnVzKQoreworCXN0cnVjdCBsZW9uX3BjaV9pbmZvICppbmZvID0gcGJ1cy0+c3lzZGF0YTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWludCBpLCBoYXNfaW8sIGhhc19tZW07CisJdTE2IGNtZDsKKworCS8qIEdlbmVyaWMgUENJIGJ1cyBwcm9iaW5nIHNldHMgdGhlc2UgdG8gcG9pbnQgYXQKKwkgKiAmaW97cG9ydCxtZW19X3Jlc291Y2Ugd2hpY2ggaXMgd3JvbmcgZm9yIHVzLgorCSAqLworCWlmIChwYnVzLT5zZWxmID09IE5VTEwpIHsKKwkJcGJ1cy0+cmVzb3VyY2VbMF0gPSAmaW5mby0+aW9fc3BhY2U7CisJCXBidXMtPnJlc291cmNlWzFdID0gJmluZm8tPm1lbV9zcGFjZTsKKwkJcGJ1cy0+cmVzb3VyY2VbMl0gPSBOVUxMOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmcGJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJLyoKKwkJICogV2UgY2FuIG5vdCByZWx5IG9uIHRoYXQgdGhlIGJvb3Rsb2FkZXIgaGFzIGVuYWJsZWQgSS9PCisJCSAqIG9yIG1lbW9yeSBhY2Nlc3MgdG8gUENJIGRldmljZXMuIEluc3RlYWQgd2UgZW5hYmxlIGl0IGhlcmUKKwkJICogaWYgdGhlIGRldmljZSBoYXMgQkFScyBvZiByZXNwZWN0aXZlIHR5cGUuCisJCSAqLworCQloYXNfaW8gPSBoYXNfbWVtID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IFBDSV9ST01fUkVTT1VSQ0U7IGkrKykgeworCQkJdW5zaWduZWQgbG9uZyBmID0gZGV2LT5yZXNvdXJjZVtpXS5mbGFnczsKKwkJCWlmIChmICYgSU9SRVNPVVJDRV9JTykKKwkJCQloYXNfaW8gPSAxOworCQkJZWxzZSBpZiAoZiAmIElPUkVTT1VSQ0VfTUVNKQorCQkJCWhhc19tZW0gPSAxOworCQl9CisJCS8qIFJPTSBCQVJzIGFyZSBtYXBwZWQgaW50byAzMi1iaXQgbWVtb3J5IHNwYWNlICovCisJCWlmIChkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLmVuZCAhPSAwKSB7CisJCQlkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLmZsYWdzIHw9CisJCQkJCQkJSU9SRVNPVVJDRV9ST01fRU5BQkxFOworCQkJaGFzX21lbSA9IDE7CisJCX0KKwkJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKHBidXMsIGRldi0+ZGV2Zm4sIFBDSV9DT01NQU5ELCAmY21kKTsKKwkJaWYgKGhhc19pbyAmJiAhKGNtZCAmIFBDSV9DT01NQU5EX0lPKSkgeworI2lmZGVmIENPTkZJR19QQ0lfREVCVUcKKwkJCXByaW50ayhLRVJOX0lORk8gIkxFT05QQ0k6IEVuYWJsaW5nIEkvTyBmb3IgZGV2ICVzXG4iLAorCQkJCQkgcGNpX25hbWUoZGV2KSk7CisjZW5kaWYKKwkJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKKwkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGJ1cywgZGV2LT5kZXZmbiwgUENJX0NPTU1BTkQsCisJCQkJCQkJCQljbWQpOworCQl9CisJCWlmIChoYXNfbWVtICYmICEoY21kICYgUENJX0NPTU1BTkRfTUVNT1JZKSkgeworI2lmZGVmIENPTkZJR19QQ0lfREVCVUcKKwkJCXByaW50ayhLRVJOX0lORk8gIkxFT05QQ0k6IEVuYWJsaW5nIE1FTU9SWSBmb3IgZGV2IgorCQkJCQkgIiVzXG4iLCBwY2lfbmFtZShkZXYpKTsKKyNlbmRpZgorCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKKwkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGJ1cywgZGV2LT5kZXZmbiwgUENJX0NPTU1BTkQsCisJCQkJCQkJCQljbWQpOworCQl9CisJfQorfQorCisvKgorICogT3RoZXIgYXJjaHMgcGFyc2UgYXJndW1lbnRzIGhlcmUuCisgKi8KK2NoYXIgKiBfX2RldmluaXQgcGNpYmlvc19zZXR1cChjaGFyICpzdHIpCit7CisJcmV0dXJuIHN0cjsKK30KKworcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3sKKwlyZXR1cm4gcmVzLT5zdGFydDsKK30KKworaW50IHBjaWJpb3NfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWFzaykKK3sKKwlyZXR1cm4gcGNpX2VuYWJsZV9yZXNvdXJjZXMoZGV2LCBtYXNrKTsKK30KKworc3RydWN0IGRldmljZV9ub2RlICpwY2lfZGV2aWNlX3RvX09GX25vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJLyoKKwkgKiBDdXJyZW50bHkgdGhlIE9wZW5Cb290IG5vZGVzIGFyZSBub3QgY29ubmVjdGVkIHdpdGggdGhlIFBDSSBkZXZpY2UsCisJICogdGhpcyBpcyBiZWNhdXNlIHRoZSBMRU9OIFBST00gZG9lcyBub3QgY3JlYXRlIFBDSSBub2Rlcy4gRXZlbnR1YWxseQorCSAqIHRoaXMgd2lsbCBjaGFuZ2UgYW5kIHRoZSBzYW1lIGFwcHJvYWNoIGFzIHBjaWMuYyBjYW4gYmUgdXNlZCB0bworCSAqIG1hdGNoIFBST00gbm9kZXMgd2l0aCBwY2kgZGV2aWNlcy4KKwkgKi8KKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wocGNpX2RldmljZV90b19PRl9ub2RlKTsKKwordm9pZCBfX2RldmluaXQgcGNpYmlvc191cGRhdGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpcnEpCit7CisjaWZkZWYgQ09ORklHX1BDSV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJMRU9OUENJOiBBc3NpZ25pbmcgSVJRICUwMmQgdG8gJXNcbiIsIGlycSwKKwkJcGNpX25hbWUoZGV2KSk7CisjZW5kaWYKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGlycSk7Cit9CisKKy8qIGluL291dCByb3V0aW5lcyB0YWtlbiBmcm9tIHBjaWMuYworICoKKyAqIFRoaXMgcHJvYmFibHkgYmVsb25ncyBoZXJlIHJhdGhlciB0aGFuIGlvcG9ydC5jIGJlY2F1c2UKKyAqIHdlIGRvIG5vdCB3YW50IHRoaXMgY3J1ZCBsaW5rZWQgaW50byBTQnVzIGtlcm5lbHMuCisgKiBBbHNvLCB0aGluayBmb3IgYSBtb21lbnQgYWJvdXQgbGlrZXMgb2YgZmxvcHB5LmMgdGhhdAorICogaW5jbHVkZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcGFydHMuIFRoZXkgbWF5IHdhbnQgdG8gcmVkZWZpbmUgaW5zL291dHMuCisgKgorICogV2UgZG8gbm90IHVzZSBob3JyaWJsZSBtYWNyb3MgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8KKyAqIGFkdmFuY2UgcG9pbnRlciBieSBzaXplb2Yoc2l6ZSkuCisgKi8KK3ZvaWQgb3V0c2IodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50IC09IDE7CisJCW91dGIoKihjb25zdCBjaGFyICopc3JjLCBhZGRyKTsKKwkJc3JjICs9IDE7CisJCS8qIGFkZHIgKz0gMTsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKG91dHNiKTsKKwordm9pZCBvdXRzdyh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJY291bnQgLT0gMjsKKwkJb3V0dygqKGNvbnN0IHNob3J0ICopc3JjLCBhZGRyKTsKKwkJc3JjICs9IDI7CisJCS8qIGFkZHIgKz0gMjsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKG91dHN3KTsKKwordm9pZCBvdXRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJY291bnQgLT0gNDsKKwkJb3V0bCgqKGNvbnN0IGxvbmcgKilzcmMsIGFkZHIpOworCQlzcmMgKz0gNDsKKwkJLyogYWRkciArPSA0OyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0wob3V0c2wpOworCit2b2lkIGluc2IodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50IC09IDE7CisJCSoodW5zaWduZWQgY2hhciAqKWRzdCA9IGluYihhZGRyKTsKKwkJZHN0ICs9IDE7CisJCS8qIGFkZHIgKz0gMTsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKGluc2IpOworCit2b2lkIGluc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50IC09IDI7CisJCSoodW5zaWduZWQgc2hvcnQgKilkc3QgPSBpbncoYWRkcik7CisJCWRzdCArPSAyOworCQkvKiBhZGRyICs9IDI7ICovCisJfQorfQorRVhQT1JUX1NZTUJPTChpbnN3KTsKKwordm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQljb3VudCAtPSA0OworCQkvKgorCQkgKiBYWFggSSBhbSBzdXJlIHdlIGFyZSBpbiBmb3IgYW4gdW5hbGlnbmVkIHRyYXAgaGVyZS4KKwkJICovCisJCSoodW5zaWduZWQgbG9uZyAqKWRzdCA9IGlubChhZGRyKTsKKwkJZHN0ICs9IDQ7CisJCS8qIGFkZHIgKz0gNDsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKGluc2wpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2lfZ3JwY2kyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaV9ncnBjaTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGRjMDkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2lfZ3JwY2kyLmMKQEAgLTAsMCArMSw4OTcgQEAKKy8qCisgKiBsZW9uX3BjaV9ncnBjaTIuYzogR1JQQ0kyIEhvc3QgUENJIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZXJvZmxleCBHYWlzbGVyIEFCLCBEYW5pZWwgSGVsbHN0cm9tCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9sZW9uLmg+CisjaW5jbHVkZSA8YXNtL3ZhZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9sZW9uX3BjaS5oPgorCisjaW5jbHVkZSAiaXJxLmgiCisKK3N0cnVjdCBncnBjaTJfYmFyY2ZnIHsKKwl1bnNpZ25lZCBsb25nIHBjaWFkcjsJLyogUENJIFNwYWNlIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGFoYmFkcjsJLyogUENJIEJhc2UgYWRkcmVzcyBtYXBwZWQgdG8gdGhpcyBBSEIgYWRkciAqLworfTsKKworLyogRGV2aWNlIE5vZGUgQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICogIC0gYmFyY2ZncyAgICA6IEN1c3RvbSBDb25maWd1cmF0aW9uIG9mIEhvc3QncyA2IHRhcmdldCBCQVJzCisgKiAgLSBpcnFfbWFzayAgIDogTGltaXQgd2hpY2ggUENJIGludGVycnVwdHMgYXJlIGVuYWJsZWQKKyAqICAtIGRvX3Jlc2V0ICAgOiBGb3JjZSBQQ0kgUmVzZXQgb24gc3RhcnR1cAorICoKKyAqIGJhcmNmZ3MKKyAqID09PT09PT0KKyAqCisgKiBPcHRpb25hbCBjdXN0b20gVGFyZ2V0IEJBUiBjb25maWd1cmF0aW9uIChzZWUgc3RydWN0IGdycGNpMl9iYXJjZmcpLiBBbGwKKyAqIGFkZHJlc3NlcyBhcmUgcGh5c2ljYWwuIEFycmF5IGFsd2F5cyBjb250YWlucyA2IGVsZW1lbnRzIChsZW49Mio0KjYgYnl0ZXMpCisgKgorICogLTEgbWVhbnMgbm90IGNvbmZpZ3VyZWQgKGxldCBob3N0IGRyaXZlciBkbyBkZWZhdWx0IHNldHVwKS4KKyAqCisgKiBbaSoyKzBdID0gUENJIEFkZHJlc3Mgb2YgQkFSW2ldIG9uIHRhcmdldCBpbnRlcmZhY2UKKyAqIFtpKjIrMV0gPSBBY2Nlc3NpbmcgUENJIGFkZHJlc3Mgb2YgQkFSW2ldIHJlc3VsdCBpbiB0aGlzIEFNQkEgYWRkcmVzcworICoKKyAqCisgKiBpcnFfbWFzaworICogPT09PT09PT0KKyAqCisgKiBMaW1pdCB3aGljaCBQQ0kgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4gMD1EaXNhYmxlLCAxPUVuYWJsZS4gQnkgZGVmYXVsdAorICogYWxsIGFyZSBlbmFibGVkLiBVc2UgdGhpcyB3aGVuIFBDSSBpbnRlcnJ1cHQgcGlucyBhcmUgZmxvYXRpbmcgb24gUENCLgorICogaW50LCBsZW49NC4KKyAqICBiaXQwID0gUENJIElOVEEjCisgKiAgYml0MSA9IFBDSSBJTlRCIworICogIGJpdDIgPSBQQ0kgSU5UQyMKKyAqICBiaXQzID0gUENJIElOVEQjCisgKgorICoKKyAqIHJlc2V0CisgKiA9PT09PQorICoKKyAqIEZvcmNlIFBDSSByZXNldCBvbiBzdGFydHVwLiBpbnQsIGxlbj00CisgKi8KKworLyogRW5hYmxlIERlYnVnZ2luZyBDb25maWd1cmF0aW9uIFNwYWNlIEFjY2VzcyAqLworI3VuZGVmIEdSUENJMl9ERUJVR19DRkdBQ0NFU1MKKworLyoKKyAqIEdSUENJMiBBUEIgUmVnaXN0ZXIgTUFQCisgKi8KK3N0cnVjdCBncnBjaTJfcmVncyB7CisJdW5zaWduZWQgaW50IGN0cmw7CQkvKiAweDAwIENvbnRyb2wgKi8KKwl1bnNpZ25lZCBpbnQgc3RzX2NhcDsJCS8qIDB4MDQgU3RhdHVzIC8gQ2FwYWJpbGl0aWVzICovCisJaW50IHJlczE7CQkJLyogMHgwOCAqLworCXVuc2lnbmVkIGludCBpb19tYXA7CQkvKiAweDBDIEkvTyBNYXAgYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBkbWFfY3RybDsJCS8qIDB4MTAgRE1BICovCisJdW5zaWduZWQgaW50IGRtYV9iZGJhc2U7CS8qIDB4MTQgRE1BICovCisJaW50IHJlczJbMl07CQkJLyogMHgxOCAqLworCXVuc2lnbmVkIGludCBiYXJzWzZdOwkJLyogMHgyMCByZWFkLW9ubHkgUENJIEJBUnMgKi8KKwlpbnQgcmVzM1syXTsJCQkvKiAweDM4ICovCisJdW5zaWduZWQgaW50IGFoYm1zdF9tYXBbMTZdOwkvKiAweDQwIEFIQi0+UENJIE1hcCBwZXIgQUhCIE1hc3RlciAqLworCisJLyogUENJIFRyYWNlIEJ1ZmZlciBSZWdpc3RlcnMgKE9QVElPTkFMKSAqLworCXVuc2lnbmVkIGludCB0X2N0cmw7CQkvKiAweDgwICovCisJdW5zaWduZWQgaW50IHRfY250OwkJLyogMHg4NCAqLworCXVuc2lnbmVkIGludCB0X2FkcGF0OwkJLyogMHg4OCAqLworCXVuc2lnbmVkIGludCB0X2FkbWFzazsJCS8qIDB4OEMgKi8KKwl1bnNpZ25lZCBpbnQgdF9zaWdwYXQ7CQkvKiAweDkwICovCisJdW5zaWduZWQgaW50IHRfc2lnbWFzazsJCS8qIDB4OTQgKi8KKwl1bnNpZ25lZCBpbnQgdF9hZHN0YXRlOwkJLyogMHg5OCAqLworCXVuc2lnbmVkIGludCB0X3NpZ3N0YXRlOwkvKiAweDlDICovCit9OworCisjZGVmaW5lIFJFR0xPQUQoYSkJKGJlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKCYoYSkpKSkKKyNkZWZpbmUgUkVHU1RPUkUoYSwgdikJKF9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMih2KSwgJihhKSkpCisKKyNkZWZpbmUgQ1RSTF9CVVNfQklUIDE2CisKKyNkZWZpbmUgQ1RSTF9SRVNFVCAoMTw8MzEpCisjZGVmaW5lIENUUkxfU0kgKDE8PDI3KQorI2RlZmluZSBDVFJMX1BFICgxPDwyNikKKyNkZWZpbmUgQ1RSTF9FSSAoMTw8MjUpCisjZGVmaW5lIENUUkxfRVIgKDE8PDI0KQorI2RlZmluZSBDVFJMX0JVUyAoMHhmZjw8Q1RSTF9CVVNfQklUKQorI2RlZmluZSBDVFJMX0hPU1RJTlQgMHhmCisKKyNkZWZpbmUgU1RTX0hPU1RfQklUCTMxCisjZGVmaW5lIFNUU19NU1RfQklUCTMwCisjZGVmaW5lIFNUU19UQVJfQklUCTI5CisjZGVmaW5lIFNUU19ETUFfQklUCTI4CisjZGVmaW5lIFNUU19ESV9CSVQJMjcKKyNkZWZpbmUgU1RTX0hJX0JJVAkyNgorI2RlZmluZSBTVFNfSVJRTU9ERV9CSVQJMjQKKyNkZWZpbmUgU1RTX1RSQUNFX0JJVAkyMworI2RlZmluZSBTVFNfQ0ZHRVJSVkFMSURfQklUIDIwCisjZGVmaW5lIFNUU19DRkdFUlJfQklUCTE5CisjZGVmaW5lIFNUU19JTlRUWVBFX0JJVAkxMgorI2RlZmluZSBTVFNfSU5UU1RTX0JJVAk4CisjZGVmaW5lIFNUU19GREVQVEhfQklUCTIKKyNkZWZpbmUgU1RTX0ZOVU1fQklUCTAKKworI2RlZmluZSBTVFNfSE9TVAkoMTw8U1RTX0hPU1RfQklUKQorI2RlZmluZSBTVFNfTVNUCQkoMTw8U1RTX01TVF9CSVQpCisjZGVmaW5lIFNUU19UQVIJCSgxPDxTVFNfVEFSX0JJVCkKKyNkZWZpbmUgU1RTX0RNQQkJKDE8PFNUU19ETUFfQklUKQorI2RlZmluZSBTVFNfREkJCSgxPDxTVFNfRElfQklUKQorI2RlZmluZSBTVFNfSEkJCSgxPDxTVFNfSElfQklUKQorI2RlZmluZSBTVFNfSVJRTU9ERQkoMHgzPDxTVFNfSVJRTU9ERV9CSVQpCisjZGVmaW5lIFNUU19UUkFDRQkoMTw8U1RTX1RSQUNFX0JJVCkKKyNkZWZpbmUgU1RTX0NGR0VSUlZBTElECSgxPDxTVFNfQ0ZHRVJSVkFMSURfQklUKQorI2RlZmluZSBTVFNfQ0ZHRVJSCSgxPDxTVFNfQ0ZHRVJSX0JJVCkKKyNkZWZpbmUgU1RTX0lOVFRZUEUJKDB4M2Y8PFNUU19JTlRUWVBFX0JJVCkKKyNkZWZpbmUgU1RTX0lOVFNUUwkoMHhmPDxTVFNfSU5UU1RTX0JJVCkKKyNkZWZpbmUgU1RTX0ZERVBUSAkoMHg3PDxTVFNfRkRFUFRIX0JJVCkKKyNkZWZpbmUgU1RTX0ZOVU0JKDB4Mzw8U1RTX0ZOVU1fQklUKQorCisjZGVmaW5lIFNUU19JU1lTRVJSCSgxPDwxNykKKyNkZWZpbmUgU1RTX0lETUEJKDE8PDE2KQorI2RlZmluZSBTVFNfSURNQUVSUgkoMTw8MTUpCisjZGVmaW5lIFNUU19JTVNUQUJSVAkoMTw8MTQpCisjZGVmaW5lIFNUU19JVEdUQUJSVAkoMTw8MTMpCisjZGVmaW5lIFNUU19JUEFSRVJSCSgxPDwxMikKKworI2RlZmluZSBTVFNfRVJSX0lSUSAoU1RTX0lTWVNFUlIgfCBTVFNfSU1TVEFCUlQgfCBTVFNfSVRHVEFCUlQgfCBTVFNfSVBBUkVSUikKKworc3RydWN0IGdycGNpMl9iZF9jaGFuIHsKKwl1bnNpZ25lZCBpbnQgY3RybDsJLyogMHgwMCBETUEgQ29udHJvbCAqLworCXVuc2lnbmVkIGludCBuY2hhbjsJLyogMHgwNCBOZXh0IERNQSBDaGFubmVsIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgbmJkOwkvKiAweDA4IE5leHQgRGF0YSBEZXNjcmlwdG9yIGluIGNoYW4gKi8KKwl1bnNpZ25lZCBpbnQgcmVzOwkvKiAweDBDIFJlc2VydmVkICovCit9OworCisjZGVmaW5lIEJEX0NIQU5fRU4JCTB4ODAwMDAwMDAKKyNkZWZpbmUgQkRfQ0hBTl9UWVBFCQkweDAwMzAwMDAwCisjZGVmaW5lIEJEX0NIQU5fQkRDTlQJCTB4MDAwMGZmZmYKKyNkZWZpbmUgQkRfQ0hBTl9FTl9CSVQJCTMxCisjZGVmaW5lIEJEX0NIQU5fVFlQRV9CSVQJMjAKKyNkZWZpbmUgQkRfQ0hBTl9CRENOVF9CSVQJMAorCitzdHJ1Y3QgZ3JwY2kyX2JkX2RhdGEgeworCXVuc2lnbmVkIGludCBjdHJsOwkvKiAweDAwIERNQSBEYXRhIENvbnRyb2wgKi8KKwl1bnNpZ25lZCBpbnQgcGNpX2FkcjsJLyogMHgwNCBQQ0kgU3RhcnQgQWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBhaGJfYWRyOwkvKiAweDA4IEFIQiBTdGFydCBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IG5leHQ7CS8qIDB4MEMgTmV4dCBEYXRhIERlc2NyaXB0b3IgaW4gY2hhbiAqLworfTsKKworI2RlZmluZSBCRF9EQVRBX0VOCQkweDgwMDAwMDAwCisjZGVmaW5lIEJEX0RBVEFfSUUJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQkRfREFUQV9EUgkJMHgyMDAwMDAwMAorI2RlZmluZSBCRF9EQVRBX1RZUEUJCTB4MDAzMDAwMDAKKyNkZWZpbmUgQkRfREFUQV9FUgkJMHgwMDA4MDAwMAorI2RlZmluZSBCRF9EQVRBX0xFTgkJMHgwMDAwZmZmZgorI2RlZmluZSBCRF9EQVRBX0VOX0JJVAkJMzEKKyNkZWZpbmUgQkRfREFUQV9JRV9CSVQJCTMwCisjZGVmaW5lIEJEX0RBVEFfRFJfQklUCQkyOQorI2RlZmluZSBCRF9EQVRBX1RZUEVfQklUCTIwCisjZGVmaW5lIEJEX0RBVEFfRVJfQklUCQkxOQorI2RlZmluZSBCRF9EQVRBX0xFTl9CSVQJCTAKKworLyogR1JQQ0kyIENhcGFiaWxpdHkgKi8KK3N0cnVjdCBncnBjaTJfY2FwX2ZpcnN0IHsKKwl1bnNpZ25lZCBpbnQgY3RybDsKKwl1bnNpZ25lZCBpbnQgcGNpMmFoYl9tYXBbNl07CisJdW5zaWduZWQgaW50IGV4dDJhaGJfbWFwOworCXVuc2lnbmVkIGludCBpb19tYXA7CisJdW5zaWduZWQgaW50IHBjaWJhcl9zaXplWzZdOworfTsKKyNkZWZpbmUgQ0FQOV9DVFJMX09GUyAwCisjZGVmaW5lIENBUDlfQkFSX09GUyAweDQKKyNkZWZpbmUgQ0FQOV9JT01BUF9PRlMgMHgyMAorI2RlZmluZSBDQVA5X0JBUlNJWkVfT0ZTIDB4MjQKKworc3RydWN0IGdycGNpMl9wcml2IHsKKwlzdHJ1Y3QgbGVvbl9wY2lfaW5mbwlpbmZvOyAvKiBtdXN0IGJlIG9uIHRvcCBvZiB0aGlzIHN0cnVjdHVyZSAqLworCXN0cnVjdCBncnBjaTJfcmVncwkqcmVnczsKKwljaGFyCQkJaXJxOworCWNoYXIJCQlpcnFfbW9kZTsgLyogSVJRIE1vZGUgZnJvbSBDQVBTVFMgUkVHICovCisJY2hhcgkJCWJ0X2VuYWJsZWQ7CisJY2hhcgkJCWRvX3Jlc2V0OworCWNoYXIJCQlpcnFfbWFzazsKKwl1MzIJCQlwY2lpZDsgLyogUENJIElEIG9mIEhvc3QgKi8KKwl1bnNpZ25lZCBjaGFyCQlpcnFfbWFwWzRdOworCisJLyogVmlydHVhbCBJUlEgbnVtYmVycyAqLworCXVuc2lnbmVkIGludAkJdmlycV9lcnI7CisJdW5zaWduZWQgaW50CQl2aXJxX2RtYTsKKworCS8qIEFIQiBQQ0kgV2luZG93cyAqLworCXVuc2lnbmVkIGxvbmcJCXBjaV9hcmVhOwkvKiBNRU1PUlkgKi8KKwl1bnNpZ25lZCBsb25nCQlwY2lfYXJlYV9lbmQ7CisJdW5zaWduZWQgbG9uZwkJcGNpX2lvOwkJLyogSS9PICovCisJdW5zaWduZWQgbG9uZwkJcGNpX2NvbmY7CS8qIENPTkZJR1VSQVRJT04gKi8KKwl1bnNpZ25lZCBsb25nCQlwY2lfY29uZl9lbmQ7CisJdW5zaWduZWQgbG9uZwkJcGNpX2lvX3ZhOworCisJc3RydWN0IGdycGNpMl9iYXJjZmcJdGd0YmFyc1s2XTsKK307CisKK0RFRklORV9TUElOTE9DSyhncnBjaTJfZGV2X2xvY2spOworc3RydWN0IGdycGNpMl9wcml2ICpncnBjaTJwcml2OworCitpbnQgZ3JwY2kyX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGRldi0+YnVzLT5zeXNkYXRhOworCWludCBpcnFfZ3JvdXA7CisKKwkvKiBVc2UgZGVmYXVsdCBJUlEgZGVjb2Rpbmcgb24gUENJIEJVUzAgYWNjb3JkaW5nIHNsb3QgbnVtYmVyaW5nICovCisJaXJxX2dyb3VwID0gc2xvdCAmIDB4MzsKKwlwaW4gPSAoKHBpbiAtIDEpICsgaXJxX2dyb3VwKSAmIDB4MzsKKworCXJldHVybiBwcml2LT5pcnFfbWFwW3Bpbl07Cit9CisKK3N0YXRpYyBpbnQgZ3JwY2kyX2NmZ19yMzIoc3RydWN0IGdycGNpMl9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYnVzLAorCQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgKnZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgKnBjaV9jb25mOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRtcDsKKworCWlmICh3aGVyZSAmIDB4MykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYnVzID09IDAgJiYgUENJX1NMT1QoZGV2Zm4pICE9IDApCisJCWRldmZuICs9ICgweDggKiA2KTsKKworCS8qIFNlbGVjdCBidXMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7CisJUkVHU1RPUkUocHJpdi0+cmVncy0+Y3RybCwgKFJFR0xPQUQocHJpdi0+cmVncy0+Y3RybCkgJiB+KDB4ZmYgPDwgMTYpKSB8CisJCQkJICAgKGJ1cyA8PCAxNikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworCisJLyogY2xlYXIgb2xkIHN0YXR1cyAqLworCVJFR1NUT1JFKHByaXYtPnJlZ3MtPnN0c19jYXAsIChTVFNfQ0ZHRVJSIHwgU1RTX0NGR0VSUlZBTElEKSk7CisKKwlwY2lfY29uZiA9ICh1bnNpZ25lZCBpbnQgKikgKHByaXYtPnBjaV9jb25mIHwKKwkJCQkJCShkZXZmbiA8PCA4KSB8ICh3aGVyZSAmIDB4ZmMpKTsKKwl0bXAgPSBMRU9OM19CWVBBU1NfTE9BRF9QQShwY2lfY29uZik7CisKKwkvKiBXYWl0IHVudGlsIEdSUENJMiBzaWduYWxzIHRoYXQgQ0ZHIGFjY2VzcyBpcyBkb25lLCBpdCBzaG91bGQgYmUKKwkgKiBkb25lIGluc3RhbnRhbmVvdXNseSB1bmxlc3MgYSBETUEgb3BlcmF0aW9uIGlzIG9uZ29pbmcuLi4KKwkgKi8KKwl3aGlsZSAoKFJFR0xPQUQocHJpdi0+cmVncy0+c3RzX2NhcCkgJiBTVFNfQ0ZHRVJSVkFMSUQpID09IDApCisJCTsKKworCWlmIChSRUdMT0FEKHByaXYtPnJlZ3MtPnN0c19jYXApICYgU1RTX0NGR0VSUikgeworCQkqdmFsID0gMHhmZmZmZmZmZjsKKwl9IGVsc2UgeworCQkvKiBCdXMgYWx3YXlzIGxpdHRsZSBlbmRpYW4gKHVuYWZmZWN0ZWQgYnkgYnl0ZS1zd2FwcGluZykgKi8KKwkJKnZhbCA9IGZsaXBfZHdvcmQodG1wKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncnBjaTJfY2ZnX3IxNihzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBidXMsCisJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiAqdmFsKQoreworCXUzMiB2OworCWludCByZXQ7CisKKwlpZiAod2hlcmUgJiAweDEpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IGdycGNpMl9jZmdfcjMyKHByaXYsIGJ1cywgZGV2Zm4sIHdoZXJlICYgfjB4MywgJnYpOworCSp2YWwgPSAweGZmZmYgJiAodiA+PiAoOCAqICh3aGVyZSAmIDB4MykpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdycGNpMl9jZmdfcjgoc3RydWN0IGdycGNpMl9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYnVzLAorCQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgKnZhbCkKK3sKKwl1MzIgdjsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3JwY2kyX2NmZ19yMzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUgJiB+MHgzLCAmdik7CisJKnZhbCA9IDB4ZmYgJiAodiA+PiAoOCAqICh3aGVyZSAmIDMpKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdycGNpMl9jZmdfdzMyKHN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGJ1cywKKwkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTMyIHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgKnBjaV9jb25mOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAod2hlcmUgJiAweDMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJ1cyA9PSAwICYmIFBDSV9TTE9UKGRldmZuKSAhPSAwKQorCQlkZXZmbiArPSAoMHg4ICogNik7CisKKwkvKiBTZWxlY3QgYnVzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworCVJFR1NUT1JFKHByaXYtPnJlZ3MtPmN0cmwsIChSRUdMT0FEKHByaXYtPnJlZ3MtPmN0cmwpICYgfigweGZmIDw8IDE2KSkgfAorCQkJCSAgIChidXMgPDwgMTYpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncnBjaTJfZGV2X2xvY2ssIGZsYWdzKTsKKworCS8qIGNsZWFyIG9sZCBzdGF0dXMgKi8KKwlSRUdTVE9SRShwcml2LT5yZWdzLT5zdHNfY2FwLCAoU1RTX0NGR0VSUiB8IFNUU19DRkdFUlJWQUxJRCkpOworCisJcGNpX2NvbmYgPSAodW5zaWduZWQgaW50ICopIChwcml2LT5wY2lfY29uZiB8CisJCQkJCQkoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiAweGZjKSk7CisJTEVPTjNfQllQQVNTX1NUT1JFX1BBKHBjaV9jb25mLCBmbGlwX2R3b3JkKHZhbCkpOworCisJLyogV2FpdCB1bnRpbCBHUlBDSTIgc2lnbmFscyB0aGF0IENGRyBhY2Nlc3MgaXMgZG9uZSwgaXQgc2hvdWxkIGJlCisJICogZG9uZSBpbnN0YW50YW5lb3VzbHkgdW5sZXNzIGEgRE1BIG9wZXJhdGlvbiBpcyBvbmdvaW5nLi4uCisJICovCisJd2hpbGUgKChSRUdMT0FEKHByaXYtPnJlZ3MtPnN0c19jYXApICYgU1RTX0NGR0VSUlZBTElEKSA9PSAwKQorCQk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncnBjaTJfY2ZnX3cxNihzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBidXMsCisJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiB2YWwpCit7CisJaW50IHJldDsKKwl1MzIgdjsKKworCWlmICh3aGVyZSAmIDB4MSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gZ3JwY2kyX2NmZ19yMzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUmfjMsICZ2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXYgPSAodiAmIH4oMHhmZmZmIDw8ICg4ICogKHdoZXJlICYgMHgzKSkpKSB8CisJICAgICgoMHhmZmZmICYgdmFsKSA8PCAoOCAqICh3aGVyZSAmIDB4MykpKTsKKwlyZXR1cm4gZ3JwY2kyX2NmZ193MzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUgJiB+MHgzLCB2KTsKK30KKworc3RhdGljIGludCBncnBjaTJfY2ZnX3c4KHN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGJ1cywKKwkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTMyIHZhbCkKK3sKKwlpbnQgcmV0OworCXUzMiB2OworCisJcmV0ID0gZ3JwY2kyX2NmZ19yMzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUgJiB+MHgzLCAmdik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCXYgPSAodiAmIH4oMHhmZiA8PCAoOCAqICh3aGVyZSAmIDB4MykpKSkgfAorCSAgICAoKDB4ZmYgJiB2YWwpIDw8ICg4ICogKHdoZXJlICYgMHgzKSkpOworCXJldHVybiBncnBjaTJfY2ZnX3czMihwcml2LCBidXMsIGRldmZuLCB3aGVyZSAmIH4weDMsIHYpOworfQorCisvKiBSZWFkIGZyb20gQ29uZmlndXJhdGlvbiBTcGFjZS4gV2hlbiBlbnRlcmluZyBoZXJlIHRoZSBQQ0kgbGF5ZXIgaGFzIHRha2VuCisgKiB0aGUgcGNpX2xvY2sgc3BpbmxvY2sgYW5kIElSUSBpcyBvZmYuCisgKi8KK3N0YXRpYyBpbnQgZ3JwY2kyX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQoreworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGdycGNpMnByaXY7CisJdW5zaWduZWQgaW50IGJ1c25vID0gYnVzLT5udW1iZXI7CisJaW50IHJldDsKKworCWlmIChQQ0lfU0xPVChkZXZmbikgPiAxNSB8fCAoUENJX1NMT1QoZGV2Zm4pID09IDAgJiYgYnVzbm8gPT0gMCkpIHsKKwkJKnZhbCA9IH4wOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXJldCA9IGdycGNpMl9jZmdfcjgocHJpdiwgYnVzbm8sIGRldmZuLCB3aGVyZSwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXQgPSBncnBjaTJfY2ZnX3IxNihwcml2LCBidXNubywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXJldCA9IGdycGNpMl9jZmdfcjMyKHByaXYsIGJ1c25vLCBkZXZmbiwgd2hlcmUsIHZhbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworI2lmZGVmIEdSUENJMl9ERUJVR19DRkdBQ0NFU1MKKwlwcmludGsoS0VSTl9JTkZPICJncnBjaTJfcmVhZF9jb25maWc6IFslMDJ4OiUwMng6JXhdIG9mcz0lZCB2YWw9JXggIgorCQkic2l6ZT0lZFxuIiwgYnVzbm8sIFBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pLCB3aGVyZSwKKwkJKnZhbCwgc2l6ZSk7CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFdyaXRlIHRvIENvbmZpZ3VyYXRpb24gU3BhY2UuIFdoZW4gZW50ZXJpbmcgaGVyZSB0aGUgUENJIGxheWVyIGhhcyB0YWtlbgorICogdGhlIHBjaV9sb2NrIHNwaW5sb2NrIGFuZCBJUlEgaXMgb2ZmLgorICovCitzdGF0aWMgaW50IGdycGNpMl93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCit7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZ3JwY2kycHJpdjsKKwl1bnNpZ25lZCBpbnQgYnVzbm8gPSBidXMtPm51bWJlcjsKKworCWlmIChQQ0lfU0xPVChkZXZmbikgPiAxNSB8fCAoUENJX1NMT1QoZGV2Zm4pID09IDAgJiYgYnVzbm8gPT0gMCkpCisJCXJldHVybiAwOworCisjaWZkZWYgR1JQQ0kyX0RFQlVHX0NGR0FDQ0VTUworCXByaW50ayhLRVJOX0lORk8gImdycGNpMl93cml0ZV9jb25maWc6IFslMDJ4OiUwMng6JXhdIG9mcz0lZCBzaXplPSVkICIKKwkJInZhbD0leFxuIiwgYnVzbm8sIFBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pLAorCQl3aGVyZSwgc2l6ZSwgdmFsKTsKKyNlbmRpZgorCisJc3dpdGNoIChzaXplKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSAxOgorCQlyZXR1cm4gZ3JwY2kyX2NmZ193OChwcml2LCBidXNubywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCWNhc2UgMjoKKwkJcmV0dXJuIGdycGNpMl9jZmdfdzE2KHByaXYsIGJ1c25vLCBkZXZmbiwgd2hlcmUsIHZhbCk7CisJY2FzZSA0OgorCQlyZXR1cm4gZ3JwY2kyX2NmZ193MzIocHJpdiwgYnVzbm8sIGRldmZuLCB3aGVyZSwgdmFsKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBncnBjaTJfb3BzID0geworCS5yZWFkID0JCWdycGNpMl9yZWFkX2NvbmZpZywKKwkud3JpdGUgPQlncnBjaTJfd3JpdGVfY29uZmlnLAorfTsKKworLyogR0VOSVJRIElSUSBjaGlwIGltcGxlbWVudGF0aW9uIGZvciBHUlBDSTIgaXJxbW9kZT0wLi4yLiBJbiBjb25maWd1cmF0aW9uCisgKiAzIHdoZXJlIGFsbCBQQ0kgSW50ZXJydXB0cyBoYXMgYSBzZXBhcmF0ZSBJUlEgb24gdGhlIHN5c3RlbSBJUlEgY29udHJvbGxlcgorICogdGhpcyBpcyBub3QgbmVlZGVkIGFuZCB0aGUgc3RhbmRhcmQgSVJRIGNvbnRyb2xsZXIgY2FuIGJlIHVzZWQuCisgKi8KKworc3RhdGljIHZvaWQgZ3JwY2kyX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpcnFpZHg7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZ3JwY2kycHJpdjsKKworCWlycWlkeCA9ICh1bnNpZ25lZCBpbnQpZGF0YS0+Y2hpcF9kYXRhIC0gMTsKKwlpZiAoaXJxaWR4ID4gMykgLyogb25seSBtYXNrIFBDSSBpbnRlcnJ1cHRzIGhlcmUgKi8KKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworCVJFR1NUT1JFKHByaXYtPnJlZ3MtPmN0cmwsIFJFR0xPQUQocHJpdi0+cmVncy0+Y3RybCkgJiB+KDEgPDwgaXJxaWR4KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGdycGNpMl91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpcnFpZHg7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZ3JwY2kycHJpdjsKKworCWlycWlkeCA9ICh1bnNpZ25lZCBpbnQpZGF0YS0+Y2hpcF9kYXRhIC0gMTsKKwlpZiAoaXJxaWR4ID4gMykgLyogb25seSB1bm1hc2sgUENJIGludGVycnVwdHMgaGVyZSAqLworCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7CisJUkVHU1RPUkUocHJpdi0+cmVncy0+Y3RybCwgUkVHTE9BRChwcml2LT5yZWdzLT5jdHJsKSB8ICgxIDw8IGlycWlkeCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdycGNpMl9zdGFydHVwX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZ3JwY2kyX3VubWFza19pcnEoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdycGNpMl9zaHV0ZG93bl9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWdycGNpMl9tYXNrX2lycShkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncnBjaTJfaXJxID0geworCS5uYW1lCQk9ICJncnBjaTIiLAorCS5pcnFfc3RhcnR1cAk9IGdycGNpMl9zdGFydHVwX2lycSwKKwkuaXJxX3NodXRkb3duCT0gZ3JwY2kyX3NodXRkb3duX2lycSwKKwkuaXJxX21hc2sJPSBncnBjaTJfbWFza19pcnEsCisJLmlycV91bm1hc2sJPSBncnBjaTJfdW5tYXNrX2lycSwKK307CisKKy8qIEhhbmRsZSBvbmUgb3IgbXVsdGlwbGUgSVJRcyBmcm9tIHRoZSBQQ0kgY29yZSAqLworc3RhdGljIHZvaWQgZ3JwY2kyX3BjaV9mbG93X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZ3JwY2kycHJpdjsKKwlpbnQgaSwgYWNrID0gMDsKKwl1bnNpZ25lZCBpbnQgY3RybCwgc3RzX2NhcCwgcGNpX2ludHM7CisKKwljdHJsID0gUkVHTE9BRChwcml2LT5yZWdzLT5jdHJsKTsKKwlzdHNfY2FwID0gUkVHTE9BRChwcml2LT5yZWdzLT5zdHNfY2FwKTsKKworCS8qIEVycm9yIEludGVycnVwdD8gKi8KKwlpZiAoc3RzX2NhcCAmIFNUU19FUlJfSVJRKSB7CisJCWdlbmVyaWNfaGFuZGxlX2lycShwcml2LT52aXJxX2Vycik7CisJCWFjayA9IDE7CisJfQorCisJLyogUENJIEludGVycnVwdD8gKi8KKwlwY2lfaW50cyA9ICgofnN0c19jYXApID4+IFNUU19JTlRTVFNfQklUKSAmIGN0cmwgJiBDVFJMX0hPU1RJTlQ7CisJaWYgKHBjaV9pbnRzKSB7CisJCS8qIENhbGwgcmVzcGVjdGl2ZSBQQ0kgSW50ZXJydXB0IGhhbmRsZXIgKi8KKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJaWYgKHBjaV9pbnRzICYgKDEgPDwgaSkpCisJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHByaXYtPmlycV9tYXBbaV0pOworCQl9CisJCWFjayA9IDE7CisJfQorCisJLyoKKwkgKiBEZWNvZGUgRE1BIEludGVycnVwdCBvbmx5IHdoZW4gc2hhcmVkIHdpdGggRXJyIGFuZCBQQ0kgSU5UWCMsIHdoZW4KKwkgKiB0aGUgRE1BIGlzIGEgdW5pcXVlIElSUSB0aGUgRE1BIGludGVycnVwdHMgZG9lc24ndCBlbmQgdXAgaGVyZSwgdGhleQorCSAqIGdvZXMgZGlyZWN0bHkgdG8gRE1BIElTUi4KKwkgKi8KKwlpZiAoKHByaXYtPmlycV9tb2RlID09IDApICYmIChzdHNfY2FwICYgKFNUU19JRE1BIHwgU1RTX0lETUFFUlIpKSkgeworCQlnZW5lcmljX2hhbmRsZV9pcnEocHJpdi0+dmlycV9kbWEpOworCQlhY2sgPSAxOworCX0KKworCS8qCisJICogQ2FsbCAiZmlyc3QgbGV2ZWwiIElSUSBjaGlwIGVuZC1vZi1pcnEgaGFuZGxlci4gSXQgd2lsbCBBQ0sgTEVPTiBJUlEKKwkgKiBDb250cm9sbGVyLCB0aGlzIG11c3QgYmUgZG9uZSBhZnRlciBJUlEgc291cmNlcyBoYXZlIGJlZW4gaGFuZGxlZCB0bworCSAqIGF2b2lkIGRvdWJsZSBJUlEgZ2VuZXJhdGlvbgorCSAqLworCWlmIChhY2spCisJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKK30KKworLyogQ3JlYXRlIGEgdmlydHVhbCBJUlEgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3JwY2kyX2J1aWxkX2RldmljZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgdmlycSA9IDAsIHBpbDsKKworCXBpbCA9IDEgPDwgODsKKwl2aXJxID0gaXJxX2FsbG9jKGlycSwgcGlsKTsKKwlpZiAodmlycSA9PSAwKQorCQlnb3RvIG91dDsKKworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKHZpcnEsICZncnBjaTJfaXJxLCBoYW5kbGVfc2ltcGxlX2lycSwKKwkJCQkgICAgICAicGNpbHZsIik7CisJaXJxX3NldF9jaGlwX2RhdGEodmlycSwgKHZvaWQgKilpcnEpOworCitvdXQ6CisJcmV0dXJuIHZpcnE7Cit9CisKK3ZvaWQgZ3JwY2kyX2h3X2luaXQoc3RydWN0IGdycGNpMl9wcml2ICpwcml2KQoreworCXUzMiBhaGJhZHIsIHBjaWFkciwgYmFyX3N6LCBjYXBwdHIsIGlvX21hcCwgZGF0YTsKKwlzdHJ1Y3QgZ3JwY2kyX3JlZ3MgKnJlZ3MgPSBwcml2LT5yZWdzOworCWludCBpOworCXN0cnVjdCBncnBjaTJfYmFyY2ZnICpiYXJjZmcgPSBwcml2LT50Z3RiYXJzOworCisJLyogUmVzZXQgYW55IGVhcmxpZXIgc2V0dXAgKi8KKwlpZiAocHJpdi0+ZG9fcmVzZXQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiR1JQQ0kyOiBSZXNldHRpbmcgUENJIGJ1c1xuIik7CisJCVJFR1NUT1JFKHJlZ3MtPmN0cmwsIENUUkxfUkVTRVQpOworCQlzc2xlZXAoMSk7IC8qIFdhaXQgZm9yIGJvYXJkcyB0byBzZXR0bGUgKi8KKwl9CisJUkVHU1RPUkUocmVncy0+Y3RybCwgMCk7CisJUkVHU1RPUkUocmVncy0+c3RzX2NhcCwgfjApOyAvKiBDbGVhciBTdGF0dXMgKi8KKwlSRUdTVE9SRShyZWdzLT5kbWFfY3RybCwgMCk7CisJUkVHU1RPUkUocmVncy0+ZG1hX2JkYmFzZSwgMCk7CisKKwkvKiBUcmFuc2xhdGUgSS9PIGFjY2Vzc2VzIHRvIDAsIEkvTyBTcGFjZSBhbHdheXMgQCBQQ0kgbG93IDY0S2J5dGVzICovCisJUkVHU1RPUkUocmVncy0+aW9fbWFwLCBSRUdMT0FEKHJlZ3MtPmlvX21hcCkgJiAweDAwMDBmZmZmKTsKKworCS8qIHNldCAxOjEgbWFwcGluZyBiZXR3ZWVuIEFIQiAtPiBQQ0kgbWVtb3J5IHNwYWNlLCBmb3IgYWxsIE1hc3RlcnMKKwkgKiBFYWNoIEFIQiBtYXN0ZXIgaGFzIGl0J3Mgb3duIG1hcHBpbmcgcmVnaXN0ZXJzLiBNYXggMTYgQUhCIG1hc3RlcnMuCisJICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCVJFR1NUT1JFKHJlZ3MtPmFoYm1zdF9tYXBbaV0sIHByaXYtPnBjaV9hcmVhKTsKKworCS8qIEdldCB0aGUgR1JQQ0kyIEhvc3QgUENJIElEICovCisJZ3JwY2kyX2NmZ19yMzIocHJpdiwgMCwgMCwgUENJX1ZFTkRPUl9JRCwgJnByaXYtPnBjaWlkKTsKKworCS8qIEdldCBhZGRyZXNzIHRvIGZpcnN0IChhbHdheXMgZGVmaW5lZCkgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8KKwlncnBjaTJfY2ZnX3I4KHByaXYsIDAsIDAsIFBDSV9DQVBBQklMSVRZX0xJU1QsICZjYXBwdHIpOworCisJLyogRW5hYmxlL0Rpc2FibGUgQnl0ZSB0d2lzdGluZyAqLworCWdycGNpMl9jZmdfcjMyKHByaXYsIDAsIDAsIGNhcHB0citDQVA5X0lPTUFQX09GUywgJmlvX21hcCk7CisJaW9fbWFwID0gKGlvX21hcCAmIH4weDEpIHwgKHByaXYtPmJ0X2VuYWJsZWQgPyAxIDogMCk7CisJZ3JwY2kyX2NmZ193MzIocHJpdiwgMCwgMCwgY2FwcHRyK0NBUDlfSU9NQVBfT0ZTLCBpb19tYXApOworCisJLyogU2V0dXAgdGhlIEhvc3QncyBQQ0kgVGFyZ2V0IEJBUnMgZm9yIG90aGVyIHBlcmlwaGVyYWxzIHRvIGFjY2VzcywKKwkgKiBhbmQgZG8gRE1BIHRvIHRoZSBob3N0J3MgbWVtb3J5LiBUaGUgdGFyZ2V0IEJBUnMgY2FuIGJlIHNpemVkIGFuZAorCSAqIGVuYWJsZWQgaW5kaXZpZHVhbGx5LgorCSAqCisJICogVXNlciBtYXkgc2V0IGN1c3RvbSB0YXJnZXQgQkFScywgYnV0IGRlZmF1bHQgaXM6CisJICogVGhlIGZpcnN0IEJBUnMgaXMgdXNlZCB0byBtYXAga2VybmVsIGxvdyAoRE1BIGlzIHBhcnQgb2Ygbm9ybWFsCisJICogcmVnaW9uIG9uIHNwYXJjIHdoaWNoIGlzIFNSTU1VX01BWE1FTSBiaWcpIG1haW4gbWVtb3J5IDE6MSB0byB0aGUKKwkgKiBQQ0kgYnVzLCB0aGUgb3RoZXIgQkFScyBhcmUgZGlzYWJsZWQuIFdlIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBCQVIKKwkgKiBpcyBhbHdheXMgYXZhaWxhYmxlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJaWYgKGJhcmNmZ1tpXS5wY2lhZHIgIT0gfjAgJiYgYmFyY2ZnW2ldLmFoYmFkciAhPSB+MCkgeworCQkJLyogVGFyZ2V0IEJBUnMgbXVzdCBoYXZlIHRoZSBwcm9wZXIgYWxpZ25tZW50ICovCisJCQlhaGJhZHIgPSBiYXJjZmdbaV0uYWhiYWRyOworCQkJcGNpYWRyID0gYmFyY2ZnW2ldLnBjaWFkcjsKKwkJCWJhcl9zeiA9ICgocGNpYWRyIC0gMSkgJiB+cGNpYWRyKSArIDE7CisJCX0gZWxzZSB7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJLyogTWFwIG1haW4gbWVtb3J5ICovCisJCQkJYmFyX3N6ID0gMHhmMDAwMDAwODsgLyogMjU2TUIgcHJlZmV0Y2hhYmxlICovCisJCQkJYWhiYWRyID0gMHhmMDAwMDAwMCAmICh1MzIpX19wYShQQUdFX0FMSUdOKAorCQkJCQkodW5zaWduZWQgbG9uZykgJl9lbmQpKTsKKwkJCQlwY2lhZHIgPSBhaGJhZHI7CisJCQl9IGVsc2UgeworCQkJCWJhcl9zeiA9IDA7CisJCQkJYWhiYWRyID0gMDsKKwkJCQlwY2lhZHIgPSAwOworCQkJfQorCQl9CisJCWdycGNpMl9jZmdfdzMyKHByaXYsIDAsIDAsIGNhcHB0citDQVA5X0JBUlNJWkVfT0ZTK2kqNCwgYmFyX3N6KTsKKwkJZ3JwY2kyX2NmZ193MzIocHJpdiwgMCwgMCwgUENJX0JBU0VfQUREUkVTU18wK2kqNCwgcGNpYWRyKTsKKwkJZ3JwY2kyX2NmZ193MzIocHJpdiwgMCwgMCwgY2FwcHRyK0NBUDlfQkFSX09GUytpKjQsIGFoYmFkcik7CisJCXByaW50ayhLRVJOX0lORk8gIiAgICAgICAgVEdUIEJBUlslZF06IDB4JTA4eCAoUENJKS0+IDB4JTA4eFxuIiwKKwkJCWksIHBjaWFkciwgYWhiYWRyKTsKKwl9CisKKwkvKiBzZXQgYXMgYnVzIG1hc3RlciBhbmQgZW5hYmxlIHBjaSBtZW1vcnkgcmVzcG9uc2VzICovCisJZ3JwY2kyX2NmZ19yMzIocHJpdiwgMCwgMCwgUENJX0NPTU1BTkQsICZkYXRhKTsKKwlkYXRhIHw9IChQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIpOworCWdycGNpMl9jZmdfdzMyKHByaXYsIDAsIDAsIFBDSV9DT01NQU5ELCBkYXRhKTsKKworCS8qIEVuYWJsZSBFcnJvciByZXNwb25lIChDUFUtVFJBUCkgb24gaWxsZWdhbCBtZW1vcnkgYWNjZXNzLiAqLworCVJFR1NUT1JFKHJlZ3MtPmN0cmwsIENUUkxfRVIgfCBDVFJMX1BFKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGdycGNpMl9qdW1wX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICphcmcpCit7CisJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IEp1bXAgSVJRIGhhcHBlbmVkXG4iKTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKKy8qIEhhbmRsZSBHUlBDSTIgRXJyb3IgSW50ZXJydXB0ICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3JwY2kyX2Vycl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGFyZzsKKwlzdHJ1Y3QgZ3JwY2kyX3JlZ3MgKnJlZ3MgPSBwcml2LT5yZWdzOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBSRUdMT0FEKHJlZ3MtPnN0c19jYXApOworCWlmICgoc3RhdHVzICYgU1RTX0VSUl9JUlEpID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0dXMgJiBTVFNfSVBBUkVSUikKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IFBhcml0eSBFcnJvclxuIik7CisKKwlpZiAoc3RhdHVzICYgU1RTX0lUR1RBQlJUKQorCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogVGFyZ2V0IEFib3J0XG4iKTsKKworCWlmIChzdGF0dXMgJiBTVFNfSU1TVEFCUlQpCisJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBNYXN0ZXIgQWJvcnRcbiIpOworCisJaWYgKHN0YXR1cyAmIFNUU19JU1lTRVJSKQorCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogU3lzdGVtIEVycm9yXG4iKTsKKworCS8qIENsZWFyIGhhbmRsZWQgSU5UIFRZUEUgSVJRcyAqLworCVJFR1NUT1JFKHJlZ3MtPnN0c19jYXAsIHN0YXR1cyAmIFNUU19FUlJfSVJRKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZ3JwY2kyX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBncnBjaTJfcmVncyAqcmVnczsKKwlzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXY7CisJaW50IGVyciwgaSwgbGVuOworCWNvbnN0IGludCAqdG1wOworCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OworCisJaWYgKGdycGNpMnByaXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IG9ubHkgb25lIEdSUENJMiBjb3JlIHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChvZmRldi0+bnVtX3Jlc291cmNlcyA8IDMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IG5vdCBlbm91Z2ggQVBCL0FIQiByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBGaW5kIERldmljZSBBZGRyZXNzICovCisJcmVncyA9IG9mX2lvcmVtYXAoJm9mZGV2LT5yZXNvdXJjZVswXSwgMCwKKwkJCSAgcmVzb3VyY2Vfc2l6ZSgmb2ZkZXYtPnJlc291cmNlWzBdKSwKKwkJCSAgImdybGliLWdycGNpMiByZWdzIik7CisJaWYgKHJlZ3MgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKgorCSAqIENoZWNrIHRoYXQgd2UncmUgaW4gSG9zdCBTbG90IGFuZCB0aGF0IHdlIGNhbiBhY3QgYXMgYSBIb3N0IEJyaWRnZQorCSAqIGFuZCBub3Qgb25seSBhcyB0YXJnZXQuCisJICovCisJY2FwYWJpbGl0eSA9IFJFR0xPQUQocmVncy0+c3RzX2NhcCk7CisJaWYgKChjYXBhYmlsaXR5ICYgU1RTX0hPU1QpIHx8ICEoY2FwYWJpbGl0eSAmIFNUU19NU1QpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkdSUENJMjogbm90IGluIGhvc3Qgc3lzdGVtIHNsb3RcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycjE7CisJfQorCisJcHJpdiA9IGdycGNpMnByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ3JwY2kyX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ3JwY2kycHJpdiA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisJbWVtc2V0KGdycGNpMnByaXYsIDAsIHNpemVvZigqZ3JwY2kycHJpdikpOworCXByaXYtPnJlZ3MgPSByZWdzOworCXByaXYtPmlycSA9IG9mZGV2LT5hcmNoZGF0YS5pcnFzWzBdOyAvKiBCQVNFIElSUSAqLworCXByaXYtPmlycV9tb2RlID0gKGNhcGFiaWxpdHkgJiBTVFNfSVJRTU9ERSkgPj4gU1RTX0lSUU1PREVfQklUOworCisJcHJpbnRrKEtFUk5fSU5GTyAiR1JQQ0kyOiBob3N0IGZvdW5kIGF0ICVwLCBpcnElZFxuIiwgcmVncywgcHJpdi0+aXJxKTsKKworCS8qIEJ5dGUgdHdpc3Rpbmcgc2hvdWxkIGJlIG1hZGUgY29uZmlndXJhYmxlIGZyb20ga2VybmVsIGNvbW1hbmQgbGluZSAqLworCXByaXYtPmJ0X2VuYWJsZWQgPSAxOworCisJLyogTGV0IHVzZXIgZG8gY3VzdG9tIFRhcmdldCBCQVIgYXNzaWdubWVudCAqLworCXRtcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+ZGV2Lm9mX25vZGUsICJiYXJjZmciLCAmbGVuKTsKKwlpZiAodG1wICYmIChsZW4gPT0gMio0KjYpKQorCQltZW1jcHkocHJpdi0+dGd0YmFycywgdG1wLCAyKjQqNik7CisJZWxzZQorCQltZW1zZXQocHJpdi0+dGd0YmFycywgLTEsIDIqNCo2KTsKKworCS8qIExpbWl0IElSUSB1bm1hc2tpbmcgaW4gaXJxX21vZGUgMiBhbmQgMyAqLworCXRtcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+ZGV2Lm9mX25vZGUsICJpcnFfbWFzayIsICZsZW4pOworCWlmICh0bXAgJiYgKGxlbiA9PSA0KSkKKwkJcHJpdi0+ZG9fcmVzZXQgPSAqdG1wOworCWVsc2UKKwkJcHJpdi0+aXJxX21hc2sgPSAweGY7CisKKwkvKiBPcHRpb25hbCBQQ0kgcmVzZXQuIEZvcmNlIFBDSSByZXNldCBvbiBzdGFydHVwICovCisJdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5kZXYub2Zfbm9kZSwgInJlc2V0IiwgJmxlbik7CisJaWYgKHRtcCAmJiAobGVuID09IDQpKQorCQlwcml2LT5kb19yZXNldCA9ICp0bXA7CisJZWxzZQorCQlwcml2LT5kb19yZXNldCA9IDA7CisKKwkvKiBGaW5kIFBDSSBNZW1vcnksIEkvTyBhbmQgQ29uZmlndXJhdGlvbiBTcGFjZSBXaW5kb3dzICovCisJcHJpdi0+cGNpX2FyZWEgPSBvZmRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7CisJcHJpdi0+cGNpX2FyZWFfZW5kID0gb2ZkZXYtPnJlc291cmNlWzFdLmVuZCsxOworCXByaXYtPnBjaV9pbyA9IG9mZGV2LT5yZXNvdXJjZVsyXS5zdGFydDsKKwlwcml2LT5wY2lfY29uZiA9IG9mZGV2LT5yZXNvdXJjZVsyXS5zdGFydCArIDB4MTAwMDA7CisJcHJpdi0+cGNpX2NvbmZfZW5kID0gcHJpdi0+cGNpX2NvbmYgKyAweDEwMDAwOworCXByaXYtPnBjaV9pb192YSA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXAocHJpdi0+cGNpX2lvLCAweDEwMDAwKTsKKwlpZiAoIXByaXYtPnBjaV9pb192YSkgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycjI7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTworCQkiR1JQQ0kyOiBNRU1PUlkgU1BBQ0UgWzB4JTA4bHggLSAweCUwOGx4XVxuIgorCQkiICAgICAgICBJL08gICAgU1BBQ0UgWzB4JTA4bHggLSAweCUwOGx4XVxuIgorCQkiICAgICAgICBDT05GSUcgU1BBQ0UgWzB4JTA4bHggLSAweCUwOGx4XVxuIiwKKwkJcHJpdi0+cGNpX2FyZWEsIHByaXYtPnBjaV9hcmVhX2VuZC0xLAorCQlwcml2LT5wY2lfaW8sIHByaXYtPnBjaV9jb25mLTEsCisJCXByaXYtPnBjaV9jb25mLCBwcml2LT5wY2lfY29uZl9lbmQtMSk7CisKKwkvKgorCSAqIEkvTyBTcGFjZSByZXNvdXJjZXMgaW4gSS9PIFdpbmRvdyBtYXBwZWQgaW50byBWaXJ0dWFsIEFkciBTcGFjZQorCSAqIFdlIG5ldmVyIHVzZSBsb3cgNEtCIGJlY2F1c2Ugc29tZSBkZXZpY2VzIHNlZW0gaGF2ZSBwcm9ibGVtcyB1c2luZworCSAqIGFkZHJlc3MgMC4KKwkgKi8KKwltZW1zZXQoJnByaXYtPmluZm8uaW9fc3BhY2UsIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwlwcml2LT5pbmZvLmlvX3NwYWNlLm5hbWUgPSAiR1JQQ0kyIFBDSSBJL08gU3BhY2UiOworCXByaXYtPmluZm8uaW9fc3BhY2Uuc3RhcnQgPSBwcml2LT5wY2lfaW9fdmEgKyAweDEwMDA7CisJcHJpdi0+aW5mby5pb19zcGFjZS5lbmQgPSBwcml2LT5wY2lfaW9fdmEgKyAweDEwMDAwIC0gMTsKKwlwcml2LT5pbmZvLmlvX3NwYWNlLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKKworCS8qCisJICogR1JQQ0kyIGhhcyBubyBwcmVmZXRjaGFibGUgbWVtb3J5LCBtYXAgZXZlcnl0aGluZyBhcworCSAqIG5vbi1wcmVmZXRjaGFibGUgbWVtb3J5CisJICovCisJbWVtc2V0KCZwcml2LT5pbmZvLm1lbV9zcGFjZSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOworCXByaXYtPmluZm8ubWVtX3NwYWNlLm5hbWUgPSAiR1JQQ0kyIFBDSSBNRU0gU3BhY2UiOworCXByaXYtPmluZm8ubWVtX3NwYWNlLnN0YXJ0ID0gcHJpdi0+cGNpX2FyZWE7CisJcHJpdi0+aW5mby5tZW1fc3BhY2UuZW5kID0gcHJpdi0+cGNpX2FyZWFfZW5kIC0gMTsKKwlwcml2LT5pbmZvLm1lbV9zcGFjZS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCisJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcHJpdi0+aW5mby5tZW1fc3BhY2UpIDwgMCkKKwkJZ290byBlcnIzOworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZwcml2LT5pbmZvLmlvX3NwYWNlKSA8IDApCisJCWdvdG8gZXJyNDsKKworCWdycGNpMl9od19pbml0KHByaXYpOworCisJLyoKKwkgKiBHZXQgUENJIEludGVycnVwdCB0byBTeXN0ZW0gSVJRIG1hcHBpbmcgYW5kIHNldHVwIElSUSBoYW5kbGluZworCSAqIEVycm9yIElSUSBhbHdheXMgb24gUENJIElOVEEuCisJICovCisJaWYgKHByaXYtPmlycV9tb2RlIDwgMikgeworCQkvKiBBbGwgUENJIGludGVycnVwdHMgYXJlIHNoYXJlZCB1c2luZyB0aGUgc2FtZSBzeXN0ZW0gSVJRICovCisJCWxlb25fdXBkYXRlX3ZpcnFfaGFuZGxpbmcocHJpdi0+aXJxLCBncnBjaTJfcGNpX2Zsb3dfaXJxLAorCQkJCQkgInBjaWx2bCIsIDApOworCisJCXByaXYtPmlycV9tYXBbMF0gPSBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSgxKTsKKwkJcHJpdi0+aXJxX21hcFsxXSA9IGdycGNpMl9idWlsZF9kZXZpY2VfaXJxKDIpOworCQlwcml2LT5pcnFfbWFwWzJdID0gZ3JwY2kyX2J1aWxkX2RldmljZV9pcnEoMyk7CisJCXByaXYtPmlycV9tYXBbM10gPSBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSg0KTsKKworCQlwcml2LT52aXJxX2VyciA9IGdycGNpMl9idWlsZF9kZXZpY2VfaXJxKDUpOworCQlpZiAocHJpdi0+aXJxX21vZGUgJiAxKQorCQkJcHJpdi0+dmlycV9kbWEgPSBvZmRldi0+YXJjaGRhdGEuaXJxc1sxXTsKKwkJZWxzZQorCQkJcHJpdi0+dmlycV9kbWEgPSBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSg2KTsKKworCQkvKiBFbmFibGUgSVJRcyBvbiBMRU9OIElSUSBjb250cm9sbGVyICovCisJCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPmlycSwgZ3JwY2kyX2p1bXBfaW50ZXJydXB0LCAwLAorCQkJCQkiR1JQQ0kyX0pVTVAiLCBwcml2KTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBFUlIgSVJRIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwl9IGVsc2UgeworCQkvKiBBbGwgUENJIGludGVycnVwdHMgaGF2ZSBhbiB1bmlxdWUgSVJRIGludGVycnVwdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkvKiBNYWtlIExFT04gSVJRIGxheWVyIGhhbmRsZSBsZXZlbCBJUlEgYnkgYWNraW5nICovCisJCQlsZW9uX3VwZGF0ZV92aXJxX2hhbmRsaW5nKG9mZGV2LT5hcmNoZGF0YS5pcnFzW2ldLAorCQkJCQkJIGhhbmRsZV9mYXN0ZW9pX2lycSwgInBjaWx2bCIsCisJCQkJCQkgMSk7CisJCQlwcml2LT5pcnFfbWFwW2ldID0gb2ZkZXYtPmFyY2hkYXRhLmlycXNbaV07CisJCX0KKwkJcHJpdi0+dmlycV9lcnIgPSBwcml2LT5pcnFfbWFwWzBdOworCQlpZiAocHJpdi0+aXJxX21vZGUgJiAxKQorCQkJcHJpdi0+dmlycV9kbWEgPSBvZmRldi0+YXJjaGRhdGEuaXJxc1s0XTsKKwkJZWxzZQorCQkJcHJpdi0+dmlycV9kbWEgPSBwcml2LT5pcnFfbWFwWzBdOworCisJCS8qIFVubWFzayBhbGwgUENJIGludGVycnVwdHMsIHJlcXVlc3RfaXJxIHdpbGwgbm90IGRvIHRoYXQgKi8KKwkJUkVHU1RPUkUocmVncy0+Y3RybCwgUkVHTE9BRChyZWdzLT5jdHJsKXwocHJpdi0+aXJxX21hc2smMHhmKSk7CisJfQorCisJLyogU2V0dXAgSVJRIGhhbmRsZXIgZm9yIG5vbi1jb25maWd1cmF0aW9uIHNwYWNlIGFjY2VzcyBlcnJvcnMgKi8KKwllcnIgPSByZXF1ZXN0X2lycShwcml2LT52aXJxX2VyciwgZ3JwY2kyX2Vycl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJCSJHUlBDSTJfRVJSIiwgcHJpdik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiR1JQQ0kyOiBFUlIgVklSUSByZXF1ZXN0IGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyNTsKKwl9CisKKwkvKgorCSAqIEVuYWJsZSBFcnJvciBJbnRlcnJ1cHRzLiBQQ0kgaW50ZXJydXB0cyBhcmUgdW5tYXNrZWQgb25jZSByZXF1ZXN0X2lycQorCSAqIGlzIGNhbGxlZCBieSB0aGUgUENJIERldmljZSBkcml2ZXJzCisJICovCisJUkVHU1RPUkUocmVncy0+Y3RybCwgUkVHTE9BRChyZWdzLT5jdHJsKSB8IENUUkxfRUkgfCBDVFJMX1NJKTsKKworCS8qIEluaXQgY29tbW9uIGxheWVyIGFuZCBzY2FuIGJ1c2VzICovCisJcHJpdi0+aW5mby5vcHMgPSAmZ3JwY2kyX29wczsKKwlwcml2LT5pbmZvLm1hcF9pcnEgPSBncnBjaTJfbWFwX2lycTsKKwlsZW9uX3BjaV9pbml0KG9mZGV2LCAmcHJpdi0+aW5mbyk7CisKKwlyZXR1cm4gMDsKKworZXJyNToKKwlyZWxlYXNlX3Jlc291cmNlKCZwcml2LT5pbmZvLmlvX3NwYWNlKTsKK2VycjQ6CisJcmVsZWFzZV9yZXNvdXJjZSgmcHJpdi0+aW5mby5tZW1fc3BhY2UpOworZXJyMzoKKwllcnIgPSAtRU5PTUVNOworCWlvdW5tYXAoKHZvaWQgKilwcml2LT5wY2lfaW9fdmEpOworZXJyMjoKKwlrZnJlZShwcml2KTsKK2VycjE6CisJb2ZfaW91bm1hcCgmb2ZkZXYtPnJlc291cmNlWzBdLCByZWdzLAorCQlyZXNvdXJjZV9zaXplKCZvZmRldi0+cmVzb3VyY2VbMF0pKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBncnBjaTJfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJIC5uYW1lID0gIkdBSVNMRVJfR1JQQ0kyIiwKKwkgfSwKKwl7CisJIC5uYW1lID0gIjAxXzA3YyIsCisJIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBncnBjaTJfb2ZfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImdycGNpMiIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBncnBjaTJfb2ZfbWF0Y2gsCisJfSwKKwkucHJvYmUgPSBncnBjaTJfb2ZfcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBncnBjaTJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdycGNpMl9vZl9kcml2ZXIpOworfQorCitzdWJzeXNfaW5pdGNhbGwoZ3JwY2kyX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA4ZDM0OGM0Li45OWJhNWJhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJCQkgICAgICAgbWUtPm5hbWUsCiAJCQkgICAgICAgKGludCkgKEVMRl9SX1RZUEUocmVsW2ldLnJfaW5mbykgJiAweGZmKSk7CiAJCQlyZXR1cm4gLUVOT0VYRUM7Ci0JCX07CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMKaW5kZXggNmUzODc0Yi4uYTY4OTU5OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9jb21tb24uYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJY2FzZSA0OgogCQkqdmFsdWUgPSByZXQgJiAweGZmZmZmZmZmOwogCQlicmVhazsKLQl9OworCX0KIAogCiAJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCX0KIAogCWlmICghc2F3X2lvIHx8ICFzYXdfbWVtKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMKaW5kZXggMjgzZmJjMy4uZjAzMGIwMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCWRlZmF1bHQ6CiAJCQl0eXBlX3N0cmluZyA9ICJFQ0MgRXJyb3IiOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAkJcHJpbnRrKCIlczogSU9NTVUgRXJyb3IsIHR5cGVbJXNdXG4iLAogCQkgICAgICAgcGJtLT5uYW1lLCB0eXBlX3N0cmluZyk7CiAKQEAgLTMxOSw3ICszMTksNyBAQAogCQkJZGVmYXVsdDoKIAkJCQl0eXBlX3N0cmluZyA9ICJFQ0MgRXJyb3IiOwogCQkJCWJyZWFrOwotCQkJfTsKKwkJCX0KIAkJCXByaW50aygiJXM6IElPTU1VIFRBRyglZClbZXJyb3IoJXMpIGN0eCgleCkgd3IoJWQpIHN0ciglZCkgIgogCQkJICAgICAgICJzeiglZEspIHZwZyglMDhseCldXG4iLAogCQkJICAgICAgIHBibS0+bmFtZSwgaSwgdHlwZV9zdHJpbmcsCkBAIC0xMzI4LDcgKzEzMjgsNyBAQAogCWRlZmF1bHQ6CiAJCWNoaXBzZXRfbmFtZSA9ICJTQ0hJWk8iOwogCQlicmVhazsKLQl9OworCX0KIAogCS8qIEZvciBTQ0hJWk8sIHRocmVlIE9CUCByZWdzOgogCSAqIDEpIFBCTSBjb250cm9sbGVyIHJlZ3MKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21faXJxdHJhbnMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21faXJxdHJhbnMuYwppbmRleCA1NzBiOThmLi40MGU0OTM2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2lycXRyYW5zLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9pcnF0cmFucy5jCkBAIC02OTQsNyArNjk0LDcgQEAKIAkJY2FzZSAzOgogCQkJaWNsciA9IHJlZ19iYXNlICsgU1lTSU9fSUNMUl9TTE9UMzsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAKIAkJaWNsciArPSAoKHVuc2lnbmVkIGxvbmcpc2J1c19sZXZlbCAtIDFVTCkgKiA4VUw7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5jCmluZGV4IGZlMmFmNjYuLjhkYjQ4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BzeWNob19jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCQlkZWZhdWx0OgogCQkJdHlwZV9zdHIgPSAiRUNDIEVycm9yIjsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IElPTU1VIEVycm9yLCB0eXBlWyVzXVxuIiwKIAkJICAgICAgIHBibS0+bmFtZSwgdHlwZV9zdHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zYnVzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zYnVzLmMKaW5kZXggMmNhMzJkMS4uYTE2MWI5YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2J1cy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NidXMuYwpAQCAtOTcsNyArOTcsNyBAQAogCiAJZGVmYXVsdDoKIAkJcmV0dXJuOwotCX07CisJfQogCiAJdmFsID0gdXBhX3JlYWRxKGNmZ19yZWcpOwogCWlmICh2YWwgJiAoMVVMIDw8IDE0VUwpKSB7CkBAIC0yNDQsNyArMjQ0LDcgQEAKIAkJY2FzZSAzOgogCQkJaWNsciA9IHJlZ19iYXNlICsgU1lTSU9fSUNMUl9TTE9UMzsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAKIAkJaWNsciArPSAoKHVuc2lnbmVkIGxvbmcpc2J1c19sZXZlbCAtIDFVTCkgKiA4VUw7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggMzI0OWQzZi4uZDI2ZTFmNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIAlkZWZhdWx0OgogCQlwcmludGsoIlVOS05PV04hXG4iKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggZjNiNjg1MC4uYzRkZDA5OSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXByb21fcHJpbnRmKCJVbmtub3duIGNwdSB0eXBlLCBoYWx0aW5nLlxuIik7CiAJCQlwcm9tX2hhbHQoKTsKLQkJfTsKKwkJfQogCiAJCSoodW5zaWduZWQgaW50ICopIChhZGRyICsgIDApID0gaW5zbnNbMF07CiAJCXdtYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYwppbmRleCBkNWIzOTU4Li4yMWIxMjUzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCXByaW50aygiVU5LTk9XTiFcbiIpOwogCQlCVUcoKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiB9CiAKIHZvaWQgY3B1X3BhbmljKHZvaWQpCkBAIC0zNzQsNyArMzc0LDcgQEAKIAkJcHJpbnRrKCJVTktOT1dOIVxuIik7CiAJCUJVRygpOwogCQlicmVhazsKLQl9OworCX0KIH0KIAogLyogU2V0IHRoaXMgdXAgZWFybHkgc28gdGhhdCB0aGluZ3MgbGlrZSB0aGUgc2NoZWR1bGVyIGNhbiBpbml0CkBAIC00NDcsNyArNDQ3LDcgQEAKIAkJcHJpbnRrKCJVTktOT1dOIVxuIik7CiAJCUJVRygpOwogCQlicmVhazsKLQl9OworCX0KIAogCWlmICghcmV0KSB7CiAJCWNwdW1hc2tfc2V0X2NwdShjcHUsICZzbXBfY29tbWVuY2VkX21hc2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwppbmRleCBhOWVhNjBlLi4xZDEzYzViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwpAQCAtMTAzLDEwICsxMDMsOSBAQAogCiAJc2JpbCA9IChzYnVzbCA8PCAyKTsKIAkvKiBMb29wIGZvciBlYWNoIHBlbmRpbmcgU0JJICovCi0JZm9yIChzYmlubyA9IDA7IGJ1c19tYXNrOyBzYmlubysrKSB7CisJZm9yIChzYmlubyA9IDA7IGJ1c19tYXNrOyBzYmlubysrLCBidXNfbWFzayA+Pj0gMSkgewogCQl1bnNpZ25lZCBpbnQgaWR4LCBtYXNrOwogCi0JCWJ1c19tYXNrID4+PSAxOwogCQlpZiAoIShidXNfbWFzayAmIDEpKQogCQkJY29udGludWU7CiAJCS8qIFhYWCBUaGlzIHNlZW1zIHRvIEFDSyB0aGUgaXJxIHR3aWNlLiAgYWNxdWlyZV9zYmkoKQpAQCAtMTE4LDE5ICsxMTcsMTYgQEAKIAkJbWFzayAmPSAoMHhmIDw8IHNiaWwpOwogCiAJCS8qIExvb3AgZm9yIGVhY2ggcGVuZGluZyBTQkkgc2xvdCAqLwotCQlpZHggPSAwOwogCQlzbG90ID0gKDEgPDwgc2JpbCk7Ci0JCXdoaWxlIChtYXNrICE9IDApIHsKKwkJZm9yIChpZHggPSAwOyBtYXNrICE9IDA7IGlkeCsrLCBzbG90IDw8PSAxKSB7CiAJCQl1bnNpZ25lZCBpbnQgcGlsOwogCQkJc3RydWN0IGlycV9idWNrZXQgKnA7CiAKLQkJCWlkeCsrOwotCQkJc2xvdCA8PD0gMTsKIAkJCWlmICghKG1hc2sgJiBzbG90KSkKIAkJCQljb250aW51ZTsKIAogCQkJbWFzayAmPSB+c2xvdDsKLQkJCXBpbCA9IHN1bjRkX2VuY29kZV9pcnEoc2Jpbm8sIHNiaWwsIGlkeCk7CisJCQlwaWwgPSBzdW40ZF9lbmNvZGVfaXJxKHNiaW5vLCBzYnVzbCwgaWR4KTsKIAogCQkJcCA9IGlycV9tYXBbcGlsXTsKIAkJCXdoaWxlIChwKSB7CkBAIC0yMTgsMTAgKzIxNCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdW40ZF9pbXNrX2xvY2ssIGZsYWdzKTsKLQljY19zZXRfaW1za19vdGhlcihjcHVpZCwgY2NfZ2V0X2ltc2tfb3RoZXIoY3B1aWQpIHwgfigxIDw8IHJlYWxfaXJxKSk7CisJY2Nfc2V0X2ltc2tfb3RoZXIoY3B1aWQsIGNjX2dldF9pbXNrX290aGVyKGNwdWlkKSAmIH4oMSA8PCByZWFsX2lycSkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1bjRkX2ltc2tfbG9jaywgZmxhZ3MpOwogI2Vsc2UKLQljY19zZXRfaW1zayhjY19nZXRfaW1zaygpIHwgfigxIDw8IHJlYWxfaXJxKSk7CisJY2Nfc2V0X2ltc2soY2NfZ2V0X2ltc2soKSAmIH4oMSA8PCByZWFsX2lycSkpOwogI2VuZGlmCiB9CiAKQEAgLTI5OSw1OCArMjk1LDE5IEBACiAJfQogfQogCi11bnNpZ25lZCBpbnQgc3VuNGRfYnVpbGRfZGV2aWNlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWFsX2lycSkKK3Vuc2lnbmVkIGludCBfc3VuNGRfYnVpbGRfZGV2aWNlX2lycSh1bnNpZ25lZCBpbnQgcmVhbF9pcnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYm9hcmQpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmlvX3VuaXQsICpzYmkgPSBkcC0+cGFyZW50OwotCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKIAlzdHJ1Y3Qgc3VuNGRfaGFuZGxlcl9kYXRhICpoYW5kbGVyX2RhdGE7Ci0JdW5zaWduZWQgaW50IHBpbDsKIAl1bnNpZ25lZCBpbnQgaXJxOwotCWludCBib2FyZCwgc2xvdDsKLQlpbnQgc2J1c2w7Ci0KLQlpcnEgPSAwOwotCXdoaWxlIChzYmkpIHsKLQkJaWYgKCFzdHJjbXAoc2JpLT5uYW1lLCAic2JpIikpCi0JCQlicmVhazsKLQotCQlzYmkgPSBzYmktPnBhcmVudDsKLQl9Ci0JaWYgKCFzYmkpCi0JCWdvdG8gZXJyX291dDsKLQotCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpZiAoIXJlZ3MpCi0JCWdvdG8gZXJyX291dDsKLQotCXNsb3QgPSByZWdzLT53aGljaF9pbzsKLQotCS8qCi0JICogIElmIFNCSSdzIHBhcmVudCBpcyBub3QgaW8tdW5pdCBvciB0aGUgaW8tdW5pdCBsYWNrcwotCSAqIGEgImJvYXJkIyIgcHJvcGVydHksIHNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nLgotCSAqLwotCWlmICghc2JpLT5wYXJlbnQgfHwgc3RyY21wKHNiaS0+cGFyZW50LT5uYW1lLCAiaW8tdW5pdCIpKSB7Ci0JCXByaW50aygiJXM6IEVycm9yLCBwYXJlbnQgaXMgbm90IGlvLXVuaXQuXG4iLCBzYmktPmZ1bGxfbmFtZSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0JaW9fdW5pdCA9IHNiaS0+cGFyZW50OwotCWJvYXJkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGlvX3VuaXQsICJib2FyZCMiLCAtMSk7Ci0JaWYgKGJvYXJkID09IC0xKSB7Ci0JCXByaW50aygiJXM6IEVycm9yLCBsYWNrcyBib2FyZCMgcHJvcGVydHkuXG4iLCBpb191bml0LT5mdWxsX25hbWUpOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCi0Jc2J1c2wgPSBwaWxfdG9fc2J1c1tyZWFsX2lycV07Ci0JaWYgKHNidXNsKQotCQlwaWwgPSBzdW40ZF9lbmNvZGVfaXJxKGJvYXJkLCBzYnVzbCwgc2xvdCk7Ci0JZWxzZQotCQlwaWwgPSByZWFsX2lycTsKIAogCWlycSA9IGlycV9hbGxvYyhyZWFsX2lycSwgcGlsKTsKLQlpZiAoaXJxID09IDApCisJaWYgKGlycSA9PSAwKSB7CisJCXByb21fcHJpbnRmKCJJUlE6IGFsbG9jYXRlIGZvciAlZCAlZCAlZCBmYWlsZWRcbiIsCisJCQlyZWFsX2lycSwgcGlsLCBib2FyZCk7CiAJCWdvdG8gZXJyX291dDsKKwl9CiAKIAloYW5kbGVyX2RhdGEgPSBpcnFfZ2V0X2hhbmRsZXJfZGF0YShpcnEpOwogCWlmICh1bmxpa2VseShoYW5kbGVyX2RhdGEpKQpAQCAtMzY4LDkgKzMyNSw4MCBAQAogCWlycV9zZXRfaGFuZGxlcl9kYXRhKGlycSwgaGFuZGxlcl9kYXRhKTsKIAogZXJyX291dDoKLQlyZXR1cm4gcmVhbF9pcnE7CisJcmV0dXJuIGlycTsKIH0KIAorCisKK3Vuc2lnbmVkIGludCBzdW40ZF9idWlsZF9kZXZpY2VfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlYWxfaXJxKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+ZGV2Lm9mX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpib2FyZF9wYXJlbnQsICpidXMgPSBkcC0+cGFyZW50OworCWNoYXIgKmJ1c19jb25uZWN0aW9uOworCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKKwl1bnNpZ25lZCBpbnQgcGlsOworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IGJvYXJkLCBzbG90OworCWludCBzYnVzbDsKKworCWlycSA9IHJlYWxfaXJxOworCXdoaWxlIChidXMpIHsKKwkJaWYgKCFzdHJjbXAoYnVzLT5uYW1lLCAic2JpIikpIHsKKwkJCWJ1c19jb25uZWN0aW9uID0gImlvLXVuaXQiOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIXN0cmNtcChidXMtPm5hbWUsICJib290YnVzIikpIHsKKwkJCWJ1c19jb25uZWN0aW9uID0gImNwdS11bml0IjsKKwkJCWJyZWFrOworCQl9CisKKwkJYnVzID0gYnVzLT5wYXJlbnQ7CisJfQorCWlmICghYnVzKQorCQlnb3RvIGVycl9vdXQ7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJaWYgKCFyZWdzKQorCQlnb3RvIGVycl9vdXQ7CisKKwlzbG90ID0gcmVncy0+d2hpY2hfaW87CisKKwkvKgorCSAqIElmIEJ1cyBub2RlcyBwYXJlbnQgaXMgbm90IGlvLXVuaXQvY3B1LXVuaXQgb3IgdGhlIGlvLXVuaXQvY3B1LXVuaXQKKwkgKiBsYWNrcyBhICJib2FyZCMiIHByb3BlcnR5LCBzb21ldGhpbmcgaXMgdmVyeSB3cm9uZy4KKwkgKi8KKwlpZiAoIWJ1cy0+cGFyZW50IHx8IHN0cmNtcChidXMtPnBhcmVudC0+bmFtZSwgYnVzX2Nvbm5lY3Rpb24pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yLCBwYXJlbnQgaXMgbm90ICVzLlxuIiwKKwkJCWJ1cy0+ZnVsbF9uYW1lLCBidXNfY29ubmVjdGlvbik7CisJCWdvdG8gZXJyX291dDsKKwl9CisJYm9hcmRfcGFyZW50ID0gYnVzLT5wYXJlbnQ7CisJYm9hcmQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoYm9hcmRfcGFyZW50LCAiYm9hcmQjIiwgLTEpOworCWlmIChib2FyZCA9PSAtMSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciwgbGFja3MgYm9hcmQjIHByb3BlcnR5LlxuIiwKKwkJCWJvYXJkX3BhcmVudC0+ZnVsbF9uYW1lKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXNidXNsID0gcGlsX3RvX3NidXNbcmVhbF9pcnFdOworCWlmIChzYnVzbCkKKwkJcGlsID0gc3VuNGRfZW5jb2RlX2lycShib2FyZCwgc2J1c2wsIHNsb3QpOworCWVsc2UKKwkJcGlsID0gcmVhbF9pcnE7CisKKwlpcnEgPSBfc3VuNGRfYnVpbGRfZGV2aWNlX2lycShyZWFsX2lycSwgcGlsLCBib2FyZCk7CitlcnJfb3V0OgorCXJldHVybiBpcnE7Cit9CisKK3Vuc2lnbmVkIGludCBzdW40ZF9idWlsZF90aW1lcl9pcnEodW5zaWduZWQgaW50IGJvYXJkLCB1bnNpZ25lZCBpbnQgcmVhbF9pcnEpCit7CisJcmV0dXJuIF9zdW40ZF9idWlsZF9kZXZpY2VfaXJxKHJlYWxfaXJxLCByZWFsX2lycSwgYm9hcmQpOworfQorCisKIHN0YXRpYyB2b2lkIF9faW5pdCBzdW40ZF9maXh1cF90cmFwX3RhYmxlKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNDAyLDYgKzQzMCw3IEBACiAJdW5zaWduZWQgaW50IGlycTsKIAljb25zdCB1MzIgKnJlZzsKIAlpbnQgZXJyOworCWludCBib2FyZDsKIAogCWRwID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImNwdS11bml0Iik7CiAJaWYgKCFkcCkgewpAQCAtNDE0LDEyICs0NDMsMTkgQEAKIAkgKiBib290YnVzLgogCSAqLwogCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCW9mX25vZGVfcHV0KGRwKTsKIAlpZiAoIXJlZykgewogCQlwcm9tX3ByaW50Zigic3VuNGRfaW5pdF90aW1lcnM6IE5vIHJlZyBwcm9wZXJ0eVxuIik7CiAJCXByb21faGFsdCgpOwogCX0KIAorCWJvYXJkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiYm9hcmQjIiwgLTEpOworCWlmIChib2FyZCA9PSAtMSkgeworCQlwcm9tX3ByaW50Zigic3VuNGRfaW5pdF90aW1lcnM6IE5vIGJvYXJkIyBwcm9wZXJ0eSBvbiBjcHUtdW5pdFxuIik7CisJCXByb21faGFsdCgpOworCX0KKworCW9mX25vZGVfcHV0KGRwKTsKKwogCXJlcy5zdGFydCA9IHJlZ1sxXTsKIAlyZXMuZW5kID0gcmVnWzJdIC0gMTsKIAlyZXMuZmxhZ3MgPSByZWdbMF0gJiAweGZmOwpAQCAtNDM0LDcgKzQ3MCw3IEBACiAKIAltYXN0ZXJfbDEwX2NvdW50ZXIgPSAmc3VuNGRfdGltZXJzLT5sMTBfY3VyX2NvdW50OwogCi0JaXJxID0gc3VuNGRfYnVpbGRfZGV2aWNlX2lycShOVUxMLCBTVU40RF9USU1FUl9JUlEpOworCWlycSA9IHN1bjRkX2J1aWxkX3RpbWVyX2lycShib2FyZCwgU1VONERfVElNRVJfSVJRKTsKIAllcnIgPSByZXF1ZXN0X2lycShpcnEsIGNvdW50ZXJfZm4sIElSUUZfVElNRVIsICJ0aW1lciIsIE5VTEwpOwogCWlmIChlcnIpIHsKIAkJcHJvbV9wcmludGYoInN1bjRkX2luaXRfdGltZXJzOiByZXF1ZXN0X2lycSgpIGZhaWxlZCB3aXRoICVkXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYzMyLmMKaW5kZXggNmRiMThjNi4uMTcwY2Q4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmMzMi5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PU1lTOwotCX07CisJfQogCiAJcmV0dXJuIC1FTk9TWVM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCmluZGV4IDk2MDgyZDMuLjkwOGI0N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FTk9TWVM7CiAJCQlnb3RvIG91dDsKLQkJfTsKKwkJfQogCX0KIAlpZiAoY2FsbCA8PSBNU0dDVEwpIHsKIAkJc3dpdGNoIChjYWxsKSB7CkBAIC00ODEsNyArNDgxLDcgQEAKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FTk9TWVM7CiAJCQlnb3RvIG91dDsKLQkJfTsKKwkJfQogCX0KIAlpZiAoY2FsbCA8PSBTSE1DVEwpIHsKIAkJc3dpdGNoIChjYWxsKSB7CkBAIC01MDcsNyArNTA3LDcgQEAKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FTk9TWVM7CiAJCQlnb3RvIG91dDsKLQkJfTsKKwkJfQogCX0gZWxzZSB7CiAJCWVyciA9IC1FTk9TWVM7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCmluZGV4IDJiOGQ1NGIuLjFkYjZiMTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgogCQlXQVJOX09OKDEpOwogCQlicmVhazsKLQl9OworCX0KIH0KIAogc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2Ugc3BhcmM2NF9jbG9ja2V2ZW50ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzXzY0LmMKaW5kZXggMWVkNTQ3Yi4uMGNiZGFhNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90cmFwc182NC5jCkBAIC0xODA0LDcgKzE4MDQsNyBAQAogCQlyZXR1cm4gIndhcm5pbmcgcmVzdW1hYmxlIjsKIAlkZWZhdWx0OgogCQlyZXR1cm4gInVua25vd24iOwotCX07CisJfQogfQogCiBzdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzdW40dl9lcnJvcl9lbnRyeSAqZW50LCBpbnQgY3B1LCBjb25zdCBjaGFyICpwZngsIGF0b21pY190ICpvY250KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwppbmRleCBjNzUyYzRjLi5iMmIwMTllIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlCVUcoKTsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJfQogCXJldHVybiBfX2RvX2ludF9zdG9yZShkc3RfYWRkciwgc2l6ZSwgc3JjX3ZhbCwgYXNpKTsKIH0KQEAgLTMyOCw3ICszMjgsNyBAQAogCQljYXNlIEFTSV9TTkZMOgogCQkJYXNpICY9IH4weDA4OwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAkJc3dpdGNoIChkaXIpIHsKIAkJY2FzZSBsb2FkOgogCQkJcmVnX2FkZHIgPSBmZXRjaF9yZWdfYWRkcigoKGluc24+PjI1KSYweDFmKSwgcmVncyk7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAkJCQlkZWZhdWx0OgogCQkJCQlCVUcoKTsKIAkJCQkJYnJlYWs7Ci0JCQkJfTsKKwkJCQl9CiAJCQkJKnJlZ19hZGRyID0gdmFsX2luOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC91czJlX2NwdWZyZXEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3VzMmVfY3B1ZnJlcS5jCmluZGV4IDUzMWQ1NGYuLjQ4OWZjMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VzMmVfY3B1ZnJlcS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3VzMmVfY3B1ZnJlcS5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogCWRlZmF1bHQ6CiAJCUJVRygpOwotCX07CisJfQogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmRleF90b19kaXZpc29yKHVuc2lnbmVkIGludCBpbmRleCkKQEAgLTE5OSw3ICsxOTksNyBAQAogCiAJZGVmYXVsdDoKIAkJQlVHKCk7Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVzdGFyX3RvX2Rpdmlzb3IodW5zaWduZWQgbG9uZyBlc3RhcikKQEAgLTIyNCw3ICsyMjQsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKLQl9OworCX0KIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC91czNfY3B1ZnJlcS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXMzX2NwdWZyZXEuYwppbmRleCA5YThjZWI3Li5lYjE2MjRiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC91czNfY3B1ZnJlcS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3VzM19jcHVmcmVxLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7Ci0JfTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI1LDcgKzEyNSw3IEBACiAKIAlkZWZhdWx0OgogCQlCVUcoKTsKLQl9OworCX0KIAogCXJlZyA9IHJlYWRfc2FmYXJpX2NmZygpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC92aW9ocy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlvaHMuYwppbmRleCBhYTZhYzcwLi4yOTM0OGVhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC92aW9ocy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Zpb2hzLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIGhhbmRzaGFrZV9mYWlsdXJlKHZpbyk7Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19hdHRyKHN0cnVjdCB2aW9fZHJpdmVyX3N0YXRlICp2aW8sIHZvaWQgKnBrdCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYwppbmRleCA5ZGZkMmViLi4zNjM1NzcxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAkJbGVmdCA9IGVkZ2UzMl90YWJfbFsocnMxID4+IDIpICYgMHgxXS5sZWZ0OwogCQlyaWdodCA9IGVkZ2UzMl90YWJfbFsocnMyID4+IDIpICYgMHgxXS5yaWdodDsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAlpZiAoKHJzMSAmIH4weDdVTCkgPT0gKHJzMiAmIH4weDdVTCkpCiAJCXJkX3ZhbCA9IHJpZ2h0ICYgbGVmdDsKQEAgLTM2MCw3ICszNjAsNyBAQAogCQl0c3RhdGUgPSByZWdzLT50c3RhdGUgJiB+KFRTVEFURV9YQ0MgfCBUU1RBVEVfSUNDKTsKIAkJcmVncy0+dHN0YXRlID0gdHN0YXRlIHwgKGNjciA8PCAzMlVMKTsKIAl9Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGFycmF5KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbiwgdW5zaWduZWQgaW50IG9wZikKQEAgLTM5Miw3ICszOTIsNyBAQAogCiAJY2FzZSBBUlJBWTMyX09QRjoKIAkJcmRfdmFsIDw8PSAyOwotCX07CisJfQogCiAJc3RvcmVfcmVnKHJlZ3MsIHJkX3ZhbCwgUkQoaW5zbikpOwogfQpAQCAtNTc3LDcgKzU3Nyw3IEBACiAJCSpmcGRfcmVnYWRkcihmLCBSRChpbnNuKSkgPSByZF92YWw7CiAJCWJyZWFrOwogCX0KLQl9OworCX0KIH0KIAogc3RhdGljIHZvaWQgcG11bChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc24sIHVuc2lnbmVkIGludCBvcGYpCkBAIC02OTMsNyArNjkzLDcgQEAKIAkJKmZwZF9yZWdhZGRyKGYsIFJEKGluc24pKSA9IHJkX3ZhbDsKIAkJYnJlYWs7CiAJfQotCX07CisJfQogfQogCiBzdGF0aWMgdm9pZCBwY21wKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbiwgdW5zaWduZWQgaW50IG9wZikKQEAgLTc4Niw3ICs3ODYsNyBAQAogCQkJCXJkX3ZhbCB8PSAxIDw8IGk7CiAJCX0KIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAltYXliZV9mbHVzaF93aW5kb3dzKDAsIDAsIFJEKGluc24pLCAwKTsKIAlzdG9yZV9yZWcocmVncywgcmRfdmFsLCBSRChpbnNuKSk7CkBAIC04ODUsNyArODg1LDcgQEAKIAljYXNlIEJTSFVGRkxFX09QRjoKIAkJYnNodWZmbGUocmVncywgaW5zbik7CiAJCWJyZWFrOwotCX07CisJfQogCiAJcmVncy0+dHBjID0gcmVncy0+dG5wYzsKIAlyZWdzLT50bnBjICs9IDQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMgYi9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKaW5kZXggYjEwYWM0ZC4uNzU0M2RkYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAKIAlkZWZhdWx0OgogCQlicmVhazsKLQl9OworCX0KIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mIChyZWdzKSk7CiAJcmVncy5wYyA9IHBjOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0XzMyLmMgYi9hcmNoL3NwYXJjL21tL2luaXRfMzIuYwppbmRleCBjYTIxNzMyLi43YjAwZGU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXRfMzIuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfMzIuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJCXByb21fcHJpbnRmKCJwYWdpbmdfaW5pdDogc3BhcmNfY3B1X21vZGVsID0gJWRcbiIsIHNwYXJjX2NwdV9tb2RlbCk7CiAJCXByb21fcHJpbnRmKCJwYWdpbmdfaW5pdDogSGFsdGluZy4uLlxuIik7CiAJCXByb21faGFsdCgpOwotCX07CisJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgcHJvdGVjdGlvbiBtYXAgd2l0aCBub24tY29uc3RhbnQsIE1NVSBkZXBlbmRlbnQgdmFsdWVzLiAqLwogCXByb3RlY3Rpb25fbWFwWzBdID0gUEFHRV9OT05FOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwppbmRleCBlMTBjZDAzLi4zZmQ4ZTE4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwpAQCAtMTYyNSw3ICsxNjI1LDcgQEAKIAkJa3RzYl9kZXNjclswXS5wZ3N6X2lkeCA9IEhWX1BHU1pfSURYXzRNQjsKIAkJa3RzYl9kZXNjclswXS5wZ3N6X21hc2sgPSBIVl9QR1NaX01BU0tfNE1COwogCQlicmVhazsKLQl9OworCX0KIAogCWt0c2JfZGVzY3JbMF0uYXNzb2MgPSAxOwogCWt0c2JfZGVzY3JbMF0ubnVtX3R0ZXMgPSBLRVJORUxfVFNCX05FTlRSSUVTOwpAQCAtMjI2Niw3ICsyMjY2LDcgQEAKIAkJCXJldHVybiBfUEFHRV9TWjUxMktfNFY7CiAJCWNhc2UgNCAqIDEwMjQgKiAxMDI0OgogCQkJcmV0dXJuIF9QQUdFX1NaNE1CXzRWOwotCQl9OworCQl9CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChzeikgewogCQljYXNlIDggKiAxMDI0OgpAQCAtMjI3OCw3ICsyMjc4LDcgQEAKIAkJCXJldHVybiBfUEFHRV9TWjUxMktfNFU7CiAJCWNhc2UgNCAqIDEwMjQgKiAxMDI0OgogCQkJcmV0dXJuIF9QQUdFX1NaNE1CXzRVOwotCQl9OworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggZmUwOWZkOC4uY2JlZjc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtMTY2NSw3ICsxNjY1LDcgQEAKIAlkZWZhdWx0OgogCQlzcm1tdV9tb2R0eXBlID0gU3dpZnRfb2s7CiAJCWJyZWFrOwotCX07CisJfQogCiAJQlRGSVhVUFNFVF9DQUxMKGZsdXNoX2NhY2hlX2FsbCwgc3dpZnRfZmx1c2hfY2FjaGVfYWxsLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfY2FjaGVfbW0sIHN3aWZ0X2ZsdXNoX2NhY2hlX21tLCBCVEZJWFVQQ0FMTF9OT1JNKTsKQEAgLTIwNjksNyArMjA2OSw3IEBACiAJCQkvKiBTb21lIG90aGVyIEN5cHJlc3MgcmV2aXNpb24sIGFzc3VtZSBhIDYwNS4gKi8KIAkJCWluaXRfY3lwcmVzc182MDUobW9kX3Jldik7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCQlyZXR1cm47CiAJfQogCQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCmluZGV4IGEyMzUwYjUuLjFjZjRmMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYworKysgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCQlwcm9tX3ByaW50ZigicHJvYmVfdmFjOiBEaWRuJ3QgZXhwZWN0IHZhYy1saW5lc2l6ZSBvZiAlZCwgaGFsdGluZ1xuIiwKIAkJCSAgICBzdW40Y192YWNpbmZvLmxpbmVzaXplKTsKIAkJcHJvbV9oYWx0KCk7Ci0JfTsKKwl9CiAKIAlzdW40Y19mbHVzaF9hbGwoKTsKIAlzdW40Y19lbmFibGVfdmFjKCk7CkBAIC0zNjQsNyArMzY0LDcgQEAKIAkJCXByb21fcHJpbnRmKCJVbmhhbmRsZWQgbnVtYmVyIG9mIHNlZ21hcHM6ICVkXG4iLAogCQkJCSAgICBudW1fc2VnbWFwcyk7CiAJCQlwcm9tX2hhbHQoKTsKLQl9OworCX0KIAlzd2l0Y2ggKG51bV9jb250ZXh0cykgewogCQljYXNlIDg6CiAJCQkvKiBEZWZhdWx0LCBub3RoaW5nIHRvIGRvLiAqLwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJCQlwcm9tX3ByaW50ZigiVW5oYW5kbGVkIG51bWJlciBvZiBjb250ZXh0czogJWRcbiIsCiAJCQkJICAgIG51bV9jb250ZXh0cyk7CiAJCQlwcm9tX2hhbHQoKTsKLQl9OworCX0KIAogCWlmIChzdW40Y192YWNpbmZvLmRvX2h3Zmx1c2hlcyAhPSAwKSB7CiAJCVBBVENIX0lOU04odmFjX2h3Zmx1c2hfcGF0Y2gxX29uLCB2YWNfaHdmbHVzaF9wYXRjaDEpOwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJCQlwcm9tX3ByaW50ZigiSW1wb3NzaWJsZSBWQUMgbGluZXNpemUgJWQsIGhhbHRpbmcuLi5cbiIsCiAJCQkJICAgIHN1bjRjX3ZhY2luZm8ubGluZXNpemUpOwogCQkJcHJvbV9oYWx0KCk7Ci0JCX07CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vdHNiLmMgYi9hcmNoL3NwYXJjL21tL3RzYi5jCmluZGV4IDk0ODQ2MTUuLmE1ZjUxYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vdHNiLmMKKysrIGIvYXJjaC9zcGFyYy9tbS90c2IuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiVFNCWyVzOiVkXTogSW1wb3NzaWJsZSBUU0Igc2l6ZSAlbHUsIGtpbGxpbmcgcHJvY2Vzcy5cbiIsCiAJCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHRzYl9ieXRlcyk7CiAJCWRvX2V4aXQoU0lHU0VHVik7Ci0JfTsKKwl9CiAJdHRlIHw9IHB0ZV9zel9iaXRzKHBhZ2Vfc3opOwogCiAJaWYgKHRsYl90eXBlID09IGNoZWV0YWhfcGx1cyB8fCB0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CkBAIC0yMTUsNyArMjE1LDcgQEAKICNlbmRpZgogCQlkZWZhdWx0OgogCQkJQlVHKCk7Ci0JCX07CisJCX0KIAkJaHAtPmFzc29jID0gMTsKIAkJaHAtPm51bV90dGVzID0gdHNiX2J5dGVzIC8gMTY7CiAJCWhwLT5jdHhfaWR4ID0gMDsKQEAgLTIzMCw3ICsyMzAsNyBAQAogI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQlCVUcoKTsKLQkJfTsKKwkJfQogCQlocC0+dHNiX2Jhc2UgPSB0c2JfcGFkZHI7CiAJCWhwLT5yZXN2ID0gMDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYwppbmRleCBiMDVlM2RiLi5hMDBmNDdiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJcmVzdG9yZV9jdXJyZW50KCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvbV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGk7IC8qIFVnaCwgd2UgY291bGQgc3BpbiBmb3JldmVyIG9uIHVuc3VwcG9ydGVkIHByb21zIDsoICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vaW5pdF8zMi5jIGIvYXJjaC9zcGFyYy9wcm9tL2luaXRfMzIuYwppbmRleCAwYTYwMWIzLi4yNmM2NGNlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vaW5pdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAkJCSAgICByb212ZWMtPnB2X3JvbXZlcnMpOwogCQlwcm9tX2hhbHQoKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAlwcm9tX3JldiA9IHJvbXZlYy0+cHZfcGx1Z2luX3JldmlzaW9uOwogCXByb21fcHJldiA9IHJvbXZlYy0+cHZfcHJpbnRyZXY7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vbXAuYyBiL2FyY2gvc3BhcmMvcHJvbS9tcC5jCmluZGV4IDk3YzQ0YzkuLjBkYTgyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9tcC5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9tcC5jCkBAIC0zNSw3ICszNSw3IEBACiAJY2FzZSBQUk9NX1YzOgogCQlyZXQgPSAoKihyb212ZWMtPnYzX2NwdXN0YXJ0KSkoY3B1bm9kZSwgKGludCkgY3RhYmxlX3JlZywgY3R4LCBwYyk7CiAJCWJyZWFrOwotCX07CisJfQogCXJlc3RvcmVfY3VycmVudCgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9LY29uZmlnIGIvYXJjaC91bmljb3JlMzIvS2NvbmZpZwppbmRleCBkM2EzMDMyLi5lNTdkY2NlIDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9LY29uZmlnCisrKyBiL2FyY2gvdW5pY29yZTMyL0tjb25maWcKQEAgLTIzMSwxMCArMjMxLDYgQEAKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTkIwOTE2IFBXTSBjb250cm9sbGVycwogCi1jb25maWcgUFVWM19SVEMKLQl0cmlzdGF0ZSAiUEtVbml0eSB2MyBSVEMgU3VwcG9ydCIKLQlkZXBlbmRzIG9uICFBUkNIX0ZQR0EKLQogaWYgUFVWM19OQjA5MTYKIAogbWVudSAiUEtVbml0eSBOZXRCb29rLTA5MTYgRmVhdHVyZXMiCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9NYWtlZmlsZSBiL2FyY2gvdW5pY29yZTMyL01ha2VmaWxlCmluZGV4IDc2YThiZWUuLjZhZjRiYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL01ha2VmaWxlCisrKyBiL2FyY2gvdW5pY29yZTMyL01ha2VmaWxlCkBAIC00MCw0MiArNDAsMTAgQEAKIAogbGlicy15CQkJKz0gYXJjaC91bmljb3JlMzIvbGliLwogCi1BU01fR0VORVJBVEVEX0RJUgk6PSAkKHNyY3RyZWUpL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvZ2VuZXJhdGVkCi1MSU5VWElOQ0xVREUJCSs9IC1JJChBU01fR0VORVJBVEVEX0RJUikKLQotQVNNX0dFTkVSSUNfSEVBREVSUwk6PSBhdG9taWMuaCBhdXh2ZWMuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBiaXRzcGVybG9uZy5oIGJ1Zy5oIGJ1Z3MuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBjcHV0aW1lLmggY3VycmVudC5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGRldmljZS5oIGRpdjY0LmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gZW1lcmdlbmN5LXJlc3RhcnQuaCBlcnJuby5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGZiLmggZmNudGwuaCBmdHJhY2UuaCBmdXRleC5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGhhcmRpcnEuaCBod19pcnEuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBpb2N0bC5oIGlvY3Rscy5oIGlwY2J1Zi5oIGlycV9yZWdzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0ga2RlYnVnLmgga21hcF90eXBlcy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGxvY2FsLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gbW1hbi5oIG1vZHVsZS5oIG1zZ2J1Zi5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IHBhcmFtLmggcGFycG9ydC5oIHBlcmNwdS5oIHBvbGwuaCBwb3NpeF90eXBlcy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IHJlc291cmNlLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gc2NhdHRlcmxpc3QuaCBzZWN0aW9ucy5oIHNlZ21lbnQuaCBzZW1idWYuaCBzZXJpYWwuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBzZXR1cC5oIHNobWJ1Zi5oIHNobXBhcmFtLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gc2lnaW5mby5oIHNpZ25hbC5oIHNpemVzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gc29ja2V0Lmggc29ja2lvcy5oIHN0YXQuaCBzdGF0ZnMuaCBzd2FiLmggc3lzY2FsbHMuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSB0ZXJtYml0cy5oIHRlcm1pb3MuaCB0b3BvbG9neS5oIHR5cGVzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gdWNvbnRleHQuaCB1bmFsaWduZWQuaCB1c2VyLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gdmdhLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0geG9yLmgKLQotYXJjaHByZXBhcmU6Ci1pZm5lcSAoJChBU01fR0VORVJBVEVEX0RJUiksICQod2lsZGNhcmQgJChBU01fR0VORVJBVEVEX0RJUikpKQotCSQoUSlta2RpciAtcCAkKEFTTV9HRU5FUkFURURfRElSKS9hc20KLQkkKFEpJChmb3JlYWNoIGEsICQoQVNNX0dFTkVSSUNfSEVBREVSUyksCVwKLQkJZWNobyAnI2luY2x1ZGUgPGFzbS1nZW5lcmljLyRhPicJXAotCQkJPiAkKEFTTV9HRU5FUkFURURfRElSKS9hc20vJGE7ICkKLWVuZGlmCi0KIGJvb3QJCQk6PSBhcmNoL3VuaWNvcmUzMi9ib290CiAKLSMgRGVmYXVsdCB0YXJnZXQgd2hlbiBleGVjdXRpbmcgcGxhaW4gbWFrZQorIyBEZWZhdWx0IGRlZmNvbmZpZyBhbmQgdGFyZ2V0IHdoZW4gZXhlY3V0aW5nIHBsYWluIG1ha2UKK0tCVUlMRF9ERUZDT05GSUcJOj0gJChBUkNIKV9kZWZjb25maWcKIEtCVUlMRF9JTUFHRQkJOj0gekltYWdlCiAKIGFsbDoJJChLQlVJTERfSU1BR0UpCkBAIC04Myw4ICs1MSw2IEBACiB6SW1hZ2UgSW1hZ2UgdUltYWdlOiB2bWxpbnV4CiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkKGJvb3QpLyRACiAKLU1SUFJPUEVSX0RJUlMJCSs9ICQoQVNNX0dFTkVSQVRFRF9ESVIpCi0KIGFyY2hjbGVhbjoKIAkkKFEpJChNQUtFKSAkKGNsZWFuKT0kKGJvb3QpCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvdW5pY29yZTMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA5NTM3MzQyLi5iMDk1NGEyIDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC91bmljb3JlMzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC01OSw3ICs1OSw3IEBACiAjIFdlIG5vdyBoYXZlIGEgUElDIGRlY29tcHJlc3NvciBpbXBsZW1lbnRhdGlvbi4gIERlY29tcHJlc3NvcnMgcnVubmluZwogIyBmcm9tIFJBTSBzaG91bGQgbm90IGRlZmluZSBaVEVYVEFERFIuICBEZWNvbXByZXNzb3JzIHJ1bm5pbmcgZGlyZWN0bHkKICMgZnJvbSBST00gb3IgRmxhc2ggbXVzdCBkZWZpbmUgWlRFWFRBRERSIChwcmVmZXJhYmx5IHZpYSB0aGUgY29uZmlnKQotWlRFWFRBRERSCTo9IDAKK1pURVhUQUREUgk6PSAweDAzMDAwMDAwCiBaQlNTQUREUgk6PSBBTElHTig0KQogCiBTRURGTEFHU19sZHMJPSBzL1RFWFRfU1RBUlQvJChaVEVYVEFERFIpLztzL0JTU19TVEFSVC8kKFpCU1NBRERSKS8KZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnIGIvYXJjaC91bmljb3JlMzIvY29uZmlncy91bmljb3JlMzJfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvdW5pY29yZTMyL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL3VuaWNvcmUzMi9jb25maWdzL3VuaWNvcmUzMl9kZWZjb25maWcKaW5kZXggYjVmYmRlOS4uYzlkZDMxOSAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIvY29uZmlncy9kZWJ1Z19kZWZjb25maWcKKysrIGIvYXJjaC91bmljb3JlMzIvY29uZmlncy91bmljb3JlMzJfZGVmY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogIyMjIEdlbmVyYWwgc2V0dXAKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRlYnVnIgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXVuaWNvcmUzMiIKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNjQsNyArNjQsNiBAQAogQ09ORklHX0kyQ19FRVBST01fQVQyND1uCiBDT05GSUdfTENEX0JBQ0tMSUdIVD1uCiAKLUNPTkZJR19QVVYzX1JUQz15CiBDT05GSUdfUFVWM19VTUFMPXkKIENPTkZJR19QVVYzX01VU0I9bgogQ09ORklHX1BVVjNfQUM5Nz1uCkBAIC0xNjcsOCArMTY2LDkgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKIAogIwlSZWFsIFRpbWUgQ2xvY2sKLUNPTkZJR19SVENfTElCPW0KLUNPTkZJR19SVENfQ0xBU1M9bQorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0RSVl9QVVYzPXkKIAogIyMjIEZpbGUgc3lzdGVtcwogQ09ORklHX0VYVDJfRlM9bQpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vS2J1aWxkCmluZGV4IGIyMDBmZGEuLmNhMTEzZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL0tidWlsZAorKysgYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTEsMiArMSw2MSBAQAogaW5jbHVkZSBpbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KIAorZ2VuZXJpYy15ICs9IGF0b21pYy5oCitnZW5lcmljLXkgKz0gYXV4dmVjLmgKK2dlbmVyaWMteSArPSBiaXRzcGVybG9uZy5oCitnZW5lcmljLXkgKz0gYnVnLmgKK2dlbmVyaWMteSArPSBidWdzLmgKK2dlbmVyaWMteSArPSBjcHV0aW1lLmgKK2dlbmVyaWMteSArPSBjdXJyZW50LmgKK2dlbmVyaWMteSArPSBkZXZpY2UuaAorZ2VuZXJpYy15ICs9IGRpdjY0LmgKK2dlbmVyaWMteSArPSBlbWVyZ2VuY3ktcmVzdGFydC5oCitnZW5lcmljLXkgKz0gZXJybm8uaAorZ2VuZXJpYy15ICs9IGZiLmgKK2dlbmVyaWMteSArPSBmY250bC5oCitnZW5lcmljLXkgKz0gZnRyYWNlLmgKK2dlbmVyaWMteSArPSBmdXRleC5oCitnZW5lcmljLXkgKz0gaGFyZGlycS5oCitnZW5lcmljLXkgKz0gaHdfaXJxLmgKK2dlbmVyaWMteSArPSBpb2N0bC5oCitnZW5lcmljLXkgKz0gaW9jdGxzLmgKK2dlbmVyaWMteSArPSBpcGNidWYuaAorZ2VuZXJpYy15ICs9IGlycV9yZWdzLmgKK2dlbmVyaWMteSArPSBrZGVidWcuaAorZ2VuZXJpYy15ICs9IGttYXBfdHlwZXMuaAorZ2VuZXJpYy15ICs9IGxvY2FsLmgKK2dlbmVyaWMteSArPSBtbWFuLmgKK2dlbmVyaWMteSArPSBtb2R1bGUuaAorZ2VuZXJpYy15ICs9IG1zZ2J1Zi5oCitnZW5lcmljLXkgKz0gcGFyYW0uaAorZ2VuZXJpYy15ICs9IHBhcnBvcnQuaAorZ2VuZXJpYy15ICs9IHBlcmNwdS5oCitnZW5lcmljLXkgKz0gcG9sbC5oCitnZW5lcmljLXkgKz0gcG9zaXhfdHlwZXMuaAorZ2VuZXJpYy15ICs9IHJlc291cmNlLmgKK2dlbmVyaWMteSArPSBzY2F0dGVybGlzdC5oCitnZW5lcmljLXkgKz0gc2VjdGlvbnMuaAorZ2VuZXJpYy15ICs9IHNlZ21lbnQuaAorZ2VuZXJpYy15ICs9IHNlbWJ1Zi5oCitnZW5lcmljLXkgKz0gc2VyaWFsLmgKK2dlbmVyaWMteSArPSBzZXR1cC5oCitnZW5lcmljLXkgKz0gc2htYnVmLmgKK2dlbmVyaWMteSArPSBzaG1wYXJhbS5oCitnZW5lcmljLXkgKz0gc2lnaW5mby5oCitnZW5lcmljLXkgKz0gc2lnbmFsLmgKK2dlbmVyaWMteSArPSBzaXplcy5oCitnZW5lcmljLXkgKz0gc29ja2V0LmgKK2dlbmVyaWMteSArPSBzb2NraW9zLmgKK2dlbmVyaWMteSArPSBzdGF0LmgKK2dlbmVyaWMteSArPSBzdGF0ZnMuaAorZ2VuZXJpYy15ICs9IHN3YWIuaAorZ2VuZXJpYy15ICs9IHN5c2NhbGxzLmgKK2dlbmVyaWMteSArPSB0ZXJtYml0cy5oCitnZW5lcmljLXkgKz0gdGVybWlvcy5oCitnZW5lcmljLXkgKz0gdG9wb2xvZ3kuaAorZ2VuZXJpYy15ICs9IHR5cGVzLmgKK2dlbmVyaWMteSArPSB1Y29udGV4dC5oCitnZW5lcmljLXkgKz0gdW5hbGlnbmVkLmgKK2dlbmVyaWMteSArPSB1c2VyLmgKK2dlbmVyaWMteSArPSB2Z2EuaAorZ2VuZXJpYy15ICs9IHhvci5oCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZWMyM2EyZi4uYWViMGYxOCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTYsNyArMTYsNiBAQAogb2JqLSQoQ09ORklHX0FSQ0hfUFVWMykJCSs9IGNsb2NrLm8gaXJxLm8gdGltZS5vCiAKIG9iai0kKENPTkZJR19QVVYzX0dQSU8pCQkrPSBncGlvLm8KLW9iai0kKENPTkZJR19QVVYzX1JUQykJCSs9IHJ0Yy5vCiBvYmotJChDT05GSUdfUFVWM19QV00pCQkrPSBwd20ubwogb2JqLSQoQ09ORklHX1BVVjNfUE0pCQkrPSBwbS5vIHNsZWVwLm8KIG9iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gaGliZXJuYXRlLm8gaGliZXJuYXRlX2FzbS5vCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDliZjdmN2EuLjc3ZTQwN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zMCw3ICszMCw3IEBACiAJSEVBRF9URVhUX1NFQ1RJT04KIAlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCi0JUEVSQ1BVKEwxX0NBQ0hFX0JZVEVTLCBQQUdFX1NJWkUpCisJUEVSQ1BVX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMpCiAJX19pbml0X2VuZCA9IC47CiAKIAlfc3RleHQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IGY1YWJlM2EuLjkwYjA2ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBACiAKIGlmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKICMgRG8gbm90IHByb2ZpbGUgZGVidWcgYW5kIGxvd2xldmVsIHV0aWxpdGllcworQ0ZMQUdTX1JFTU9WRV90c2MubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9ydGMubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9wYXJhdmlydC1zcGlubG9ja3MubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9wdmNsb2NrLm8gPSAtcGcKQEAgLTI4LDYgKzI5LDcgQEAKIEdDT1ZfUFJPRklMRV92c3lzY2FsbF82NC5vCTo9IG4KIEdDT1ZfUFJPRklMRV9ocGV0Lm8JCTo9IG4KIEdDT1ZfUFJPRklMRV90c2MubwkJOj0gbgorR0NPVl9QUk9GSUxFX3ZyZWFkX3RzY182NC5vCTo9IG4KIEdDT1ZfUFJPRklMRV9wYXJhdmlydC5vCQk6PSBuCiAKICMgdnJlYWRfdHNjXzY0IGlzIGhvdCBhbmQgc2hvdWxkIGJlIGZ1bGx5IG9wdGltaXplZDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCBjZDhjYmViLi43YzNhOTVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdV9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXVfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYW1kX2lvbW11Lmg+CkBAIC0xNTQsNiArMTU1LDEwIEBACiAJcGRldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KFBDSV9CVVMoYWxpYXMpLCBhbGlhcyAmIDB4ZmYpOwogCWlmIChwZGV2KQogCQlkZXZfZGF0YS0+YWxpYXMgPSAmcGRldi0+ZGV2OworCWVsc2UgeworCQlrZnJlZShkZXZfZGF0YSk7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQogCiAJYXRvbWljX3NldCgmZGV2X2RhdGEtPmJpbmQsIDApOwogCkBAIC0xNjMsNiArMTY4LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlvbW11X2lnbm9yZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXUxNiBkZXZpZCwgYWxpYXM7CisKKwlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlhbGlhcyA9IGFtZF9pb21tdV9hbGlhc190YWJsZVtkZXZpZF07CisKKwltZW1zZXQoJmFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLCAwLCBzaXplb2Yoc3RydWN0IGRldl90YWJsZV9lbnRyeSkpOworCW1lbXNldCgmYW1kX2lvbW11X2Rldl90YWJsZVthbGlhc10sIDAsIHNpemVvZihzdHJ1Y3QgZGV2X3RhYmxlX2VudHJ5KSk7CisKKwlhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF0gPSBOVUxMOworCWFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2FsaWFzXSA9IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIGlvbW11X3VuaW5pdF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCWtmcmVlKGRldi0+YXJjaGRhdGEuaW9tbXUpOwpAQCAtMTkyLDcgKzIxMSw5IEBACiAJCQljb250aW51ZTsKIAogCQlyZXQgPSBpb21tdV9pbml0X2RldmljZSgmcGRldi0+ZGV2KTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCA9PSAtRU5PVFNVUFApCisJCQlpb21tdV9pZ25vcmVfZGV2aWNlKCZwZGV2LT5kZXYpOworCQllbHNlIGlmIChyZXQpCiAJCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMjM4Myw2ICsyNDA0LDIzIEBACiAJLmRtYV9zdXBwb3J0ZWQgPSBhbWRfaW9tbXVfZG1hX3N1cHBvcnRlZCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBkZXZpY2VfZG1hX29wc19pbml0KHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXVuc2lnbmVkIHVuaGFuZGxlZCA9IDA7CisKKwlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKKwkJaWYgKCFjaGVja19kZXZpY2UoJnBkZXYtPmRldikpIHsKKwkJCXVuaGFuZGxlZCArPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlwZGV2LT5kZXYuYXJjaGRhdGEuZG1hX29wcyA9ICZhbWRfaW9tbXVfZG1hX29wczsKKwl9CisKKwlyZXR1cm4gdW5oYW5kbGVkOworfQorCiAvKgogICogVGhlIGZ1bmN0aW9uIHdoaWNoIGNsdWVzIHRoZSBBTUQgSU9NTVUgZHJpdmVyIGludG8gZG1hX29wcy4KICAqLwpAQCAtMjM5NSw3ICsyNDMzLDcgQEAKIGludCBfX2luaXQgYW1kX2lvbW11X2luaXRfZG1hX29wcyh2b2lkKQogewogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwotCWludCByZXQ7CisJaW50IHJldCwgdW5oYW5kbGVkOwogCiAJLyoKIAkgKiBmaXJzdCBhbGxvY2F0ZSBhIGRlZmF1bHQgcHJvdGVjdGlvbiBkb21haW4gZm9yIGV2ZXJ5IElPTU1VIHdlCkBAIC0yNDIxLDcgKzI0NTksMTEgQEAKIAlzd2lvdGxiID0gMDsKIAogCS8qIE1ha2UgdGhlIGRyaXZlciBmaW5hbGx5IHZpc2libGUgdG8gdGhlIGRyaXZlcnMgKi8KLQlkbWFfb3BzID0gJmFtZF9pb21tdV9kbWFfb3BzOworCXVuaGFuZGxlZCA9IGRldmljZV9kbWFfb3BzX2luaXQoKTsKKwlpZiAodW5oYW5kbGVkICYmIG1heF9wZm4gPiBNQVhfRE1BMzJfUEZOKSB7CisJCS8qIFRoZXJlIGFyZSB1bmhhbmRsZWQgZGV2aWNlcyAtIGluaXRpYWxpemUgc3dpb3RsYiBmb3IgdGhlbSAqLworCQlzd2lvdGxiID0gMTsKKwl9CiAKIAlhbWRfaW9tbXVfc3RhdHNfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCmluZGV4IDkxNzljMjEuLmJmYzg0NTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCkBAIC03MzEsOCArNzMxLDggQEAKIHsKIAl1OCAqcCA9ICh1OCAqKWg7CiAJdTggKmVuZCA9IHAsIGZsYWdzID0gMDsKLQl1MTYgZGV2X2ksIGRldmlkID0gMCwgZGV2aWRfc3RhcnQgPSAwLCBkZXZpZF90byA9IDA7Ci0JdTMyIGV4dF9mbGFncyA9IDA7CisJdTE2IGRldmlkID0gMCwgZGV2aWRfc3RhcnQgPSAwLCBkZXZpZF90byA9IDA7CisJdTMyIGRldl9pLCBleHRfZmxhZ3MgPSAwOwogCWJvb2wgYWxpYXMgPSBmYWxzZTsKIAlzdHJ1Y3QgaXZoZF9lbnRyeSAqZTsKIApAQCAtODg3LDcgKzg4Nyw3IEBACiAvKiBJbml0aWFsaXplcyB0aGUgZGV2aWNlLT5pb21tdSBtYXBwaW5nIGZvciB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2lvbW11X2RldmljZXMoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiB7Ci0JdTE2IGk7CisJdTMyIGk7CiAKIAlmb3IgKGkgPSBpb21tdS0+Zmlyc3RfZGV2aWNlOyBpIDw9IGlvbW11LT5sYXN0X2RldmljZTsgKytpKQogCQlzZXRfaW9tbXVfZm9yX2RldmljZShpb21tdSwgaSk7CkBAIC0xMTc3LDcgKzExNzcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBpbml0X2RldmljZV90YWJsZSh2b2lkKQogewotCXUxNiBkZXZpZDsKKwl1MzIgZGV2aWQ7CiAKIAlmb3IgKGRldmlkID0gMDsgZGV2aWQgPD0gYW1kX2lvbW11X2xhc3RfYmRmOyArK2RldmlkKSB7CiAJCXNldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfVkFMSUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNDI2YTViNi4uMmU0OTI4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC02NDIsNyArNjQyLDcgQEAKIAkJYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZSA9IElETEVfUE9MTDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibXdhaXQiKSkgewogCQlib290X29wdGlvbl9pZGxlX292ZXJyaWRlID0gSURMRV9GT1JDRV9NV0FJVDsKLQkJV0FSTl9PTkNFKDEsICJcaWRsZT1td2FpdFwiIHdpbGwgYmUgcmVtb3ZlZCBpbiAyMDEyXCJcbiIpOworCQlXQVJOX09OQ0UoMSwgIlwiaWRsZT1td2FpdFwiIHdpbGwgYmUgcmVtb3ZlZCBpbiAyMDEyXG4iKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiaGFsdCIpKSB7CiAJCS8qCiAJCSAqIFdoZW4gdGhlIGJvb3Qgb3B0aW9uIG9mIGlkbGU9aGFsdCBpcyBhZGRlZCwgaGFsdCBpcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggOGQxMjg3OC4uYTNkMGRjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0yNDUsNyArMjQ1LDYgQEAKIHsKIAlzZXRfdXNlcl9ncyhyZWdzLCAwKTsKIAlyZWdzLT5mcwkJPSAwOwotCXNldF9mcyhVU0VSX0RTKTsKIAlyZWdzLT5kcwkJPSBfX1VTRVJfRFM7CiAJcmVncy0+ZXMJCT0gX19VU0VSX0RTOwogCXJlZ3MtPnNzCQk9IF9fVVNFUl9EUzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IDZjOWRkOTIuLmNhNmY3YWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMzM4LDcgKzMzOCw2IEBACiAJcmVncy0+Y3MJCT0gX2NzOwogCXJlZ3MtPnNzCQk9IF9zczsKIAlyZWdzLT5mbGFncwkJPSBYODZfRUZMQUdTX0lGOwotCXNldF9mcyhVU0VSX0RTKTsKIAkvKgogCSAqIEZyZWUgdGhlIG9sZCBGUCBhbmQgb3RoZXIgZXh0ZW5kZWQgc3RhdGUKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGVlZmQ5NjcuLjMzYTBjMTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMTMzMiw3ICsxMzMyLDcgQEAKIAl2b2lkICptd2FpdF9wdHI7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKTsKIAotCWlmICghdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX01XQUlUKSAmJiBtd2FpdF91c2FibGUoYykpCisJaWYgKCEodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX01XQUlUKSAmJiBtd2FpdF91c2FibGUoYykpKQogCQlyZXR1cm47CiAJaWYgKCF0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFNIKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggZDZlMjQ3Ny4uNmRmODhjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC00NywzOCArNDcsNDAgQEAKICNkZWZpbmUgRHN0REkgICAgICAgKDU8PDEpCS8qIERlc3RpbmF0aW9uIGlzIGluIEVTOihFKURJICovCiAjZGVmaW5lIERzdE1lbTY0ICAgICg2PDwxKQkvKiA2NGJpdCBtZW1vcnkgb3BlcmFuZCAqLwogI2RlZmluZSBEc3RJbW1VQnl0ZSAoNzw8MSkJLyogOC1iaXQgdW5zaWduZWQgaW1tZWRpYXRlIG9wZXJhbmQgKi8KLSNkZWZpbmUgRHN0TWFzayAgICAgKDc8PDEpCisjZGVmaW5lIERzdERYICAgICAgICg4PDwxKQkvKiBEZXN0aW5hdGlvbiBpcyBpbiBEWCByZWdpc3RlciAqLworI2RlZmluZSBEc3RNYXNrICAgICAoMHhmPDwxKQogLyogU291cmNlIG9wZXJhbmQgdHlwZS4gKi8KLSNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDQpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NCkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDQpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCi0jZGVmaW5lIFNyY01lbTMyICAgICg0PDw0KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KLSNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDQpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NCkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjT25lICAgICAgKDc8PDQpCS8qIEltcGxpZWQgJzEnICovCi0jZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw0KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NCkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KLSNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NCkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KLSNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NCkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLwotI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw0KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCi0jZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDQpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLwotI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw0KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KLSNkZWZpbmUgU3JjTWFzayAgICAgKDB4Zjw8NCkKKyNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDUpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NSkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDUpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NSkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCisjZGVmaW5lIFNyY01lbTMyICAgICg0PDw1KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KKyNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDUpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NSkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjT25lICAgICAgKDc8PDUpCS8qIEltcGxpZWQgJzEnICovCisjZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw1KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NSkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KKyNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NSkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KKyNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NSkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLworI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw1KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCisjZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDUpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLworI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw1KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KKyNkZWZpbmUgU3JjRFggICAgICAgKDB4Zjw8NSkJLyogU291cmNlIGlzIGluIERYIHJlZ2lzdGVyICovCisjZGVmaW5lIFNyY01hc2sgICAgICgweGY8PDUpCiAvKiBHZW5lcmljIE1vZFJNIGRlY29kZS4gKi8KLSNkZWZpbmUgTW9kUk0gICAgICAgKDE8PDgpCisjZGVmaW5lIE1vZFJNICAgICAgICgxPDw5KQogLyogRGVzdGluYXRpb24gaXMgb25seSB3cml0dGVuOyBuZXZlciByZWFkLiAqLwotI2RlZmluZSBNb3YgICAgICAgICAoMTw8OSkKLSNkZWZpbmUgQml0T3AgICAgICAgKDE8PDEwKQotI2RlZmluZSBNZW1BYnMgICAgICAoMTw8MTEpICAgICAgLyogTWVtb3J5IG9wZXJhbmQgaXMgYWJzb2x1dGUgZGlzcGxhY2VtZW50ICovCi0jZGVmaW5lIFN0cmluZyAgICAgICgxPDwxMikgICAgIC8qIFN0cmluZyBpbnN0cnVjdGlvbiAocmVwIGNhcGFibGUpICovCi0jZGVmaW5lIFN0YWNrICAgICAgICgxPDwxMykgICAgIC8qIFN0YWNrIGluc3RydWN0aW9uIChwdXNoL3BvcCkgKi8KLSNkZWZpbmUgR3JvdXBNYXNrICAgKDc8PDE0KSAgICAgLyogT3Bjb2RlIHVzZXMgb25lIG9mIHRoZSBncm91cCBtZWNoYW5pc21zICovCi0jZGVmaW5lIEdyb3VwICAgICAgICgxPDwxNCkgICAgIC8qIEJpdHMgMzo1IG9mIG1vZHJtIGJ5dGUgZXh0ZW5kIG9wY29kZSAqLwotI2RlZmluZSBHcm91cER1YWwgICAoMjw8MTQpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KLSNkZWZpbmUgUHJlZml4ICAgICAgKDM8PDE0KSAgICAgLyogSW5zdHJ1Y3Rpb24gdmFyaWVzIHdpdGggNjYvZjIvZjMgcHJlZml4ICovCi0jZGVmaW5lIFJNRXh0ICAgICAgICg0PDwxNCkgICAgIC8qIE9wY29kZSBleHRlbnNpb24gaW4gTW9kUk0gci9tIGlmIG1vZCA9PSAzICovCi0jZGVmaW5lIFNzZSAgICAgICAgICgxPDwxNykgICAgIC8qIFNTRSBWZWN0b3IgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgTW92ICAgICAgICAgKDE8PDEwKQorI2RlZmluZSBCaXRPcCAgICAgICAoMTw8MTEpCisjZGVmaW5lIE1lbUFicyAgICAgICgxPDwxMikgICAgICAvKiBNZW1vcnkgb3BlcmFuZCBpcyBhYnNvbHV0ZSBkaXNwbGFjZW1lbnQgKi8KKyNkZWZpbmUgU3RyaW5nICAgICAgKDE8PDEzKSAgICAgLyogU3RyaW5nIGluc3RydWN0aW9uIChyZXAgY2FwYWJsZSkgKi8KKyNkZWZpbmUgU3RhY2sgICAgICAgKDE8PDE0KSAgICAgLyogU3RhY2sgaW5zdHJ1Y3Rpb24gKHB1c2gvcG9wKSAqLworI2RlZmluZSBHcm91cE1hc2sgICAoNzw8MTUpICAgICAvKiBPcGNvZGUgdXNlcyBvbmUgb2YgdGhlIGdyb3VwIG1lY2hhbmlzbXMgKi8KKyNkZWZpbmUgR3JvdXAgICAgICAgKDE8PDE1KSAgICAgLyogQml0cyAzOjUgb2YgbW9kcm0gYnl0ZSBleHRlbmQgb3Bjb2RlICovCisjZGVmaW5lIEdyb3VwRHVhbCAgICgyPDwxNSkgICAgIC8qIEFsdGVybmF0ZSBkZWNvZGluZyBvZiBtb2QgPT0gMyAqLworI2RlZmluZSBQcmVmaXggICAgICAoMzw8MTUpICAgICAvKiBJbnN0cnVjdGlvbiB2YXJpZXMgd2l0aCA2Ni9mMi9mMyBwcmVmaXggKi8KKyNkZWZpbmUgUk1FeHQgICAgICAgKDQ8PDE1KSAgICAgLyogT3Bjb2RlIGV4dGVuc2lvbiBpbiBNb2RSTSByL20gaWYgbW9kID09IDMgKi8KKyNkZWZpbmUgU3NlICAgICAgICAgKDE8PDE4KSAgICAgLyogU1NFIFZlY3RvciBpbnN0cnVjdGlvbiAqLwogLyogTWlzYyBmbGFncyAqLwogI2RlZmluZSBQcm90ICAgICAgICAoMTw8MjEpIC8qIGluc3RydWN0aW9uIGdlbmVyYXRlcyAjVUQgaWYgbm90IGluIHByb3QtbW9kZSAqLwogI2RlZmluZSBWZW5kb3JTcGVjaWZpYyAoMTw8MjIpIC8qIFZlbmRvciBzcGVjaWZpYyBpbnN0cnVjdGlvbiAqLwpAQCAtMzE1NCw4ICszMTU2LDggQEAKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbSwgZW1faW11bF8zb3ApLAogCUkoU3JjSW1tQnl0ZSB8IE1vdiB8IFN0YWNrLCBlbV9wdXNoKSwKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbUJ5dGUsIGVtX2ltdWxfM29wKSwKLQlEMmJ2SVAoRHN0REkgfCBNb3YgfCBTdHJpbmcsIGlucywgY2hlY2tfcGVybV9pbiksIC8qIGluc2IsIGluc3cvaW5zZCAqLwotCUQyYnZJUChTcmNTSSB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBvdXRzLCBjaGVja19wZXJtX291dCksIC8qIG91dHNiLCBvdXRzdy9vdXRzZCAqLworCUQyYnZJUChEc3RESSB8IFNyY0RYIHwgTW92IHwgU3RyaW5nLCBpbnMsIGNoZWNrX3Blcm1faW4pLCAvKiBpbnNiLCBpbnN3L2luc2QgKi8KKwlEMmJ2SVAoU3JjU0kgfCBEc3REWCB8IFN0cmluZywgb3V0cywgY2hlY2tfcGVybV9vdXQpLCAvKiBvdXRzYiwgb3V0c3cvb3V0c2QgKi8KIAkvKiAweDcwIC0gMHg3RiAqLwogCVgxNihEKFNyY0ltbUJ5dGUpKSwKIAkvKiAweDgwIC0gMHg4NyAqLwpAQCAtMzIxMiw4ICszMjE0LDggQEAKIAkvKiAweEU4IC0gMHhFRiAqLwogCUQoU3JjSW1tIHwgU3RhY2spLCBEKFNyY0ltbSB8IEltcGxpY2l0T3BzKSwKIAlEKFNyY0ltbUZBZGRyIHwgTm82NCksIEQoU3JjSW1tQnl0ZSB8IEltcGxpY2l0T3BzKSwKLQlEMmJ2SVAoU3JjTm9uZSB8IERzdEFjYywgICAgIGluLCAgY2hlY2tfcGVybV9pbiksCi0JRDJidklQKFNyY0FjYyB8IEltcGxpY2l0T3BzLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKKwlEMmJ2SVAoU3JjRFggfCBEc3RBY2MsIGluLCAgY2hlY2tfcGVybV9pbiksCisJRDJidklQKFNyY0FjYyB8IERzdERYLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKIAkvKiAweEYwIC0gMHhGNyAqLwogCU4sIERJKEltcGxpY2l0T3BzLCBpY2VicCksIE4sIE4sCiAJREkoSW1wbGljaXRPcHMgfCBQcml2LCBobHQpLCBEKEltcGxpY2l0T3BzKSwKQEAgLTM2MTMsNiArMzYxNSwxMiBAQAogCQltZW1vcC5ieXRlcyA9IGMtPm9wX2J5dGVzICsgMjsKIAkJZ290byBzcmNtZW1fY29tbW9uOwogCQlicmVhazsKKwljYXNlIFNyY0RYOgorCQljLT5zcmMudHlwZSA9IE9QX1JFRzsKKwkJYy0+c3JjLmJ5dGVzID0gMjsKKwkJYy0+c3JjLmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPnNyYyk7CisJCWJyZWFrOwogCX0KIAogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQpAQCAtMzY4Miw2ICszNjkwLDEyIEBACiAJCWMtPmRzdC5hZGRyLm1lbS5zZWcgPSBWQ1BVX1NSRUdfRVM7CiAJCWMtPmRzdC52YWwgPSAwOwogCQlicmVhazsKKwljYXNlIERzdERYOgorCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJYy0+ZHN0LmJ5dGVzID0gMjsKKwkJYy0+ZHN0LmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPmRzdCk7CisJCWJyZWFrOwogCWNhc2UgSW1wbGljaXRPcHM6CiAJCS8qIFNwZWNpYWwgaW5zdHJ1Y3Rpb25zIGRvIHRoZWlyIG93biBvcGVyYW5kIGRlY29kaW5nLiAqLwogCWRlZmF1bHQ6CkBAIC00MDI3LDcgKzQwNDEsNiBAQAogCQlicmVhazsKIAljYXNlIDB4ZWM6IC8qIGluIGFsLGR4ICovCiAJY2FzZSAweGVkOiAvKiBpbiAoZS9yKWF4LGR4ICovCi0JCWMtPnNyYy52YWwgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOwogCWRvX2lvX2luOgogCQlpZiAoIXBpb19pbl9lbXVsYXRlZChjdHh0LCBvcHMsIGMtPmRzdC5ieXRlcywgYy0+c3JjLnZhbCwKIAkJCQkgICAgICZjLT5kc3QudmFsKSkKQEAgLTQwMzUsNyArNDA0OCw2IEBACiAJCWJyZWFrOwogCWNhc2UgMHhlZTogLyogb3V0IGR4LGFsICovCiAJY2FzZSAweGVmOiAvKiBvdXQgZHgsKGUvcilheCAqLwotCQljLT5kc3QudmFsID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXTsKIAlkb19pb19vdXQ6CiAJCW9wcy0+cGlvX291dF9lbXVsYXRlZChjdHh0LCBjLT5zcmMuYnl0ZXMsIGMtPmRzdC52YWwsCiAJCQkJICAgICAgJmMtPnNyYy52YWwsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKaW5kZXggZTE5MWMwOS4uZGI4MzJmZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCkBAIC05OTMsNiArOTkzLDcgQEAKIHN0YXRpYyB2b2lkIGxndWVzdF90aW1lX2luaXQodm9pZCkKIHsKIAkvKiBTZXQgdXAgdGhlIHRpbWVyIGludGVycnVwdCAoMCkgdG8gZ28gdG8gb3VyIHNpbXBsZSB0aW1lciByb3V0aW5lICovCisJbGd1ZXN0X3NldHVwX2lycSgwKTsKIAlpcnFfc2V0X2hhbmRsZXIoMCwgbGd1ZXN0X3RpbWVfaXJxKTsKIAogCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZsZ3Vlc3RfY2xvY2ssIE5TRUNfUEVSX1NFQyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYwppbmRleCA4YmZmN2U3Li4xYjJiNzNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jCisrKyBiL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKQEAgLTE4OSwxMCArMTg5LDEwIEBACiAJdW5zaWduZWQgYXJnaWR4ID0gcm91bmR1cChiLT5hcmdpZHgsIHNpemVvZih1NjQpKTsKIAogCUJVR19PTihwcmVlbXB0aWJsZSgpKTsKLQlCVUdfT04oYi0+YXJnaWR4ID4gTUNfQVJHUyk7CisJQlVHX09OKGItPmFyZ2lkeCA+PSBNQ19BUkdTKTsKIAogCWlmIChiLT5tY2lkeCA9PSBNQ19CQVRDSCB8fAotCSAgICAoYXJnaWR4ICsgYXJncykgPiBNQ19BUkdTKSB7CisJICAgIChhcmdpZHggKyBhcmdzKSA+PSBNQ19BUkdTKSB7CiAJCW1jX3N0YXRzX2ZsdXNoKGItPm1jaWR4ID09IE1DX0JBVENIID8gRkxfU0xPVFMgOiBGTF9BUkdTKTsKIAkJeGVuX21jX2ZsdXNoKCk7CiAJCWFyZ2lkeCA9IHJvdW5kdXAoYi0+YXJnaWR4LCBzaXplb2YodTY0KSk7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAlyZXQuYXJncyA9ICZiLT5hcmdzW2FyZ2lkeF07CiAJYi0+YXJnaWR4ID0gYXJnaWR4ICsgYXJnczsKIAotCUJVR19PTihiLT5hcmdpZHggPiBNQ19BUkdTKTsKKwlCVUdfT04oYi0+YXJnaWR4ID49IE1DX0FSR1MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIxNiw3ICsyMTYsNyBAQAogCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgcmV0ID0geyBOVUxMLCBOVUxMIH07CiAKIAlCVUdfT04ocHJlZW1wdGlibGUoKSk7Ci0JQlVHX09OKGItPmFyZ2lkeCA+IE1DX0FSR1MpOworCUJVR19PTihiLT5hcmdpZHggPj0gTUNfQVJHUyk7CiAKIAlpZiAoYi0+bWNpZHggPT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTIyNCwxNCArMjI0LDE0IEBACiAJaWYgKGItPmVudHJpZXNbYi0+bWNpZHggLSAxXS5vcCAhPSBvcCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgoYi0+YXJnaWR4ICsgc2l6ZSkgPiBNQ19BUkdTKQorCWlmICgoYi0+YXJnaWR4ICsgc2l6ZSkgPj0gTUNfQVJHUykKIAkJcmV0dXJuIHJldDsKIAogCXJldC5tYyA9ICZiLT5lbnRyaWVzW2ItPm1jaWR4IC0gMV07CiAJcmV0LmFyZ3MgPSAmYi0+YXJnc1tiLT5hcmdpZHhdOwogCWItPmFyZ2lkeCArPSBzaXplOwogCi0JQlVHX09OKGItPmFyZ2lkeCA+IE1DX0FSR1MpOworCUJVR19PTihiLT5hcmdpZHggPj0gTUNfQVJHUyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvYy5jIGIvYmxvY2svYmxrLWlvYy5jCmluZGV4IGM4OTgwNDkuLjM0MmVhZTkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1pb2MuYworKysgYi9ibG9jay9ibGstaW9jLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAlpZiAoIWhsaXN0X2VtcHR5KCZpb2MtPmNpY19saXN0KSkgewogCQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKIAotCQljaWMgPSBsaXN0X2VudHJ5KGlvYy0+Y2ljX2xpc3QuZmlyc3QsIHN0cnVjdCBjZnFfaW9fY29udGV4dCwKKwkJY2ljID0gaGxpc3RfZW50cnkoaW9jLT5jaWNfbGlzdC5maXJzdCwgc3RydWN0IGNmcV9pb19jb250ZXh0LAogCQkJCQkJCQljaWNfbGlzdCk7CiAJCWNpYy0+ZHRvcihpb2MpOwogCX0KQEAgLTU3LDcgKzU3LDcgQEAKIAlpZiAoIWhsaXN0X2VtcHR5KCZpb2MtPmNpY19saXN0KSkgewogCQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKIAotCQljaWMgPSBsaXN0X2VudHJ5KGlvYy0+Y2ljX2xpc3QuZmlyc3QsIHN0cnVjdCBjZnFfaW9fY29udGV4dCwKKwkJY2ljID0gaGxpc3RfZW50cnkoaW9jLT5jaWNfbGlzdC5maXJzdCwgc3RydWN0IGNmcV9pb19jb250ZXh0LAogCQkJCQkJCQljaWNfbGlzdCk7CiAJCWNpYy0+ZXhpdChpb2MpOwogCX0KZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDdjNTJkNjguLjNjN2I1MzcgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJaW50IG5yX2NmcXE7CiAKIAkvKgotCSAqIFBlciBncm91cCBidXN5IHF1ZXVzIGF2ZXJhZ2UuIFVzZWZ1bCBmb3Igd29ya2xvYWQgc2xpY2UgY2FsYy4gV2UKKwkgKiBQZXIgZ3JvdXAgYnVzeSBxdWV1ZXMgYXZlcmFnZS4gVXNlZnVsIGZvciB3b3JrbG9hZCBzbGljZSBjYWxjLiBXZQogCSAqIGNyZWF0ZSB0aGUgYXJyYXkgZm9yIGVhY2ggcHJpbyBjbGFzcyBidXQgYXQgcnVuIHRpbWUgaXQgaXMgdXNlZAogCSAqIG9ubHkgZm9yIFJUIGFuZCBCRSBjbGFzcyBhbmQgc2xvdCBmb3IgSURMRSBjbGFzcyByZW1haW5zIHVudXNlZC4KIAkgKiBUaGlzIGlzIHByaW1hcmlseSBkb25lIHRvIGF2b2lkIGNvbmZ1c2lvbiBhbmQgYSBnY2Mgd2FybmluZy4KQEAgLTM2OSwxNiArMzY5LDE2IEBACiAjZGVmaW5lIGNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCBmbXQsIGFyZ3MuLi4pCVwKIAlibGtfYWRkX3RyYWNlX21zZygoY2ZxZCktPnF1ZXVlLCAiY2ZxJWQlYyAlcyAiIGZtdCwgKGNmcXEpLT5waWQsIFwKIAkJCWNmcV9jZnFxX3N5bmMoKGNmcXEpKSA/ICdTJyA6ICdBJywgXAotCQkJYmxrZ19wYXRoKCYoY2ZxcSktPmNmcWctPmJsa2cpLCAjI2FyZ3MpOworCQkJYmxrZ19wYXRoKCYoY2ZxcSktPmNmcWctPmJsa2cpLCAjI2FyZ3MpCiAKICNkZWZpbmUgY2ZxX2xvZ19jZnFnKGNmcWQsIGNmcWcsIGZtdCwgYXJncy4uLikJCQkJXAogCWJsa19hZGRfdHJhY2VfbXNnKChjZnFkKS0+cXVldWUsICIlcyAiIGZtdCwJCQlcCi0JCQkJYmxrZ19wYXRoKCYoY2ZxZyktPmJsa2cpLCAjI2FyZ3MpOyAgICAgIFwKKwkJCQlibGtnX3BhdGgoJihjZnFnKS0+YmxrZyksICMjYXJncykgICAgICAgXAogCiAjZWxzZQogI2RlZmluZSBjZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgZm10LCBhcmdzLi4uKQlcCiAJYmxrX2FkZF90cmFjZV9tc2coKGNmcWQpLT5xdWV1ZSwgImNmcSVkICIgZm10LCAoY2ZxcSktPnBpZCwgIyNhcmdzKQotI2RlZmluZSBjZnFfbG9nX2NmcWcoY2ZxZCwgY2ZxZywgZm10LCBhcmdzLi4uKQkJZG8ge30gd2hpbGUgKDApOworI2RlZmluZSBjZnFfbG9nX2NmcWcoY2ZxZCwgY2ZxZywgZm10LCBhcmdzLi4uKQkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKICNkZWZpbmUgY2ZxX2xvZyhjZnFkLCBmbXQsIGFyZ3MuLi4pCVwKIAlibGtfYWRkX3RyYWNlX21zZygoY2ZxZCktPnF1ZXVlLCAiY2ZxICIgZm10LCAjI2FyZ3MpCkBAIC0zNzg2LDkgKzM3ODYsNiBAQAogCXJldHVybiAwOwogCiBxdWV1ZV9mYWlsOgotCWlmIChjaWMpCi0JCXB1dF9pb19jb250ZXh0KGNpYy0+aW9jKTsKLQogCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAljZnFfbG9nKGNmcWQsICJzZXRfcmVxdWVzdCBmYWlsIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IGRmYjZlOWQuLjdmMDk5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0yODAyLDEwICsyODAyLDExIEBACiAJfQogCiAJLyoKLQkgKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IGJlIGZyb3plbiB2ZXJ5IHdlbGwgYW5kIG1heSBzZXQKLQkgKiBzcHVydWlvdXMgZXJyb3IgY29uZGl0aW9ucyBkdXJpbmcgcmVzZXQuICBDbGVhciBhY2N1bXVsYXRlZAotCSAqIGVycm9yIGluZm9ybWF0aW9uLiAgQXMgcmVzZXQgaXMgdGhlIGZpbmFsIHJlY292ZXJ5IGFjdGlvbiwKLQkgKiBub3RoaW5nIGlzIGxvc3QgYnkgZG9pbmcgdGhpcy4KKwkgKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IGJlIGZyb3plbiB2ZXJ5IHdlbGwgYW5kIG1heSBzZXQgc3B1cmlvdXMKKwkgKiBlcnJvciBjb25kaXRpb25zIGR1cmluZyByZXNldC4gIENsZWFyIGFjY3VtdWxhdGVkIGVycm9yCisJICogaW5mb3JtYXRpb24gYW5kIHJlLXRoYXcgdGhlIHBvcnQgaWYgZnJvemVuLiAgQXMgcmVzZXQgaXMgdGhlCisJICogZmluYWwgcmVjb3ZlcnkgYWN0aW9uIGFuZCB3ZSBjcm9zcyBjaGVjayBsaW5rIG9ubGluZW5lc3MgYWdhaW5zdAorCSAqIGRldmljZSBjbGFzc2lmaWNhdGlvbiBsYXRlciwgbm8gaG90cGx1ZyBldmVudCBpcyBsb3N0IGJ5IHRoaXMuCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUobGluay0+YXAtPmxvY2ssIGZsYWdzKTsKIAltZW1zZXQoJmxpbmstPmVoX2luZm8sIDAsIHNpemVvZihsaW5rLT5laF9pbmZvKSk7CkBAIC0yODE0LDYgKzI4MTUsOSBAQAogCWFwLT5wZmxhZ3MgJj0gfkFUQV9QRkxBR19FSF9QRU5ESU5HOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobGluay0+YXAtPmxvY2ssIGZsYWdzKTsKIAorCWlmIChhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTikKKwkJYXRhX2VoX3RoYXdfcG9ydChhcCk7CisKIAkvKgogCSAqIE1ha2Ugc3VyZSBvbmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQgY29ycmVzcG9uZC4KIAkgKiBIb3RwbHVnIGNvdWxkIGhhdmUgaGFwcGVuZWQgZHVyaW5nIHJlc2V0IGFuZCBzb21lCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMKaW5kZXggYzBkZDA5ZC4uZWFhOGE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiB7CiAJc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jayAqY2xrbmI7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKLQljaGFyICpjb25faWQ7CisJY2hhciAqKmNvbl9pZDsKIAlpbnQgZXJyb3I7CiAKIAlkZXZfZGJnKGRldiwgIiVzKCkgJWxkXG4iLCBfX2Z1bmNfXywgYWN0aW9uKTsKQEAgLTMwOSw4ICszMDksOCBAQAogCiAJCWRldi0+cHdyX2RvbWFpbiA9IGNsa25iLT5wd3JfZG9tYWluOwogCQlpZiAoY2xrbmItPmNvbl9pZHNbMF0pIHsKLQkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHNbMF07ICpjb25faWQ7IGNvbl9pZCsrKQotCQkJCXBtX3J1bnRpbWVfY2xrX2FkZChkZXYsIGNvbl9pZCk7CisJCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzOyAqY29uX2lkOyBjb25faWQrKykKKwkJCQlwbV9ydW50aW1lX2Nsa19hZGQoZGV2LCAqY29uX2lkKTsKIAkJfSBlbHNlIHsKIAkJCXBtX3J1bnRpbWVfY2xrX2FkZChkZXYsIE5VTEwpOwogCQl9CkBAIC0zODAsNyArMzgwLDcgQEAKIHsKIAlzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrICpjbGtuYjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOwotCWNoYXIgKmNvbl9pZDsKKwljaGFyICoqY29uX2lkOwogCiAJZGV2X2RiZyhkZXYsICIlcygpICVsZFxuIiwgX19mdW5jX18sIGFjdGlvbik7CiAKQEAgLTM4OSwxNiArMzg5LDE2IEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEJVU19OT1RJRllfQUREX0RFVklDRToKIAkJaWYgKGNsa25iLT5jb25faWRzWzBdKSB7Ci0JCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzWzBdOyAqY29uX2lkOyBjb25faWQrKykKLQkJCQllbmFibGVfY2xvY2soZGV2LCBjb25faWQpOworCQkJZm9yIChjb25faWQgPSBjbGtuYi0+Y29uX2lkczsgKmNvbl9pZDsgY29uX2lkKyspCisJCQkJZW5hYmxlX2Nsb2NrKGRldiwgKmNvbl9pZCk7CiAJCX0gZWxzZSB7CiAJCQllbmFibGVfY2xvY2soZGV2LCBOVUxMKTsKIAkJfQogCQlicmVhazsKIAljYXNlIEJVU19OT1RJRllfREVMX0RFVklDRToKIAkJaWYgKGNsa25iLT5jb25faWRzWzBdKSB7Ci0JCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzWzBdOyAqY29uX2lkOyBjb25faWQrKykKLQkJCQlkaXNhYmxlX2Nsb2NrKGRldiwgY29uX2lkKTsKKwkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHM7ICpjb25faWQ7IGNvbl9pZCsrKQorCQkJCWRpc2FibGVfY2xvY2soZGV2LCAqY29uX2lkKTsKIAkJfSBlbHNlIHsKIAkJCWRpc2FibGVfY2xvY2soZGV2LCBOVUxMKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggZTZmYzcxNi4uZjUzM2YzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0xOTIsNyArMTkyLDggQEAKIAkJCWlmIChsby0+eG1pdF90aW1lb3V0KQogCQkJCWRlbF90aW1lcl9zeW5jKCZ0aSk7CiAJCX0gZWxzZQotCQkJcmVzdWx0ID0ga2VybmVsX3JlY3Ztc2coc29jaywgJm1zZywgJmlvdiwgMSwgc2l6ZSwgMCk7CisJCQlyZXN1bHQgPSBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBzaXplLAorCQkJCQkJbXNnLm1zZ19mbGFncyk7CiAKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlzaWdpbmZvX3QgaW5mbzsKQEAgLTc1Myw5ICs3NTQsMjYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYXJ0X3NoaWZ0ID0gMDsKLQlpZiAobWF4X3BhcnQgPiAwKQorCWlmIChtYXhfcGFydCA+IDApIHsKIAkJcGFydF9zaGlmdCA9IGZscyhtYXhfcGFydCk7CiAKKwkJLyoKKwkJICogQWRqdXN0IG1heF9wYXJ0IGFjY29yZGluZyB0byBwYXJ0X3NoaWZ0IGFzIGl0IGlzIGV4cG9ydGVkCisJCSAqIHRvIHVzZXIgc3BhY2Ugc28gdGhhdCB1c2VyIGNhbiBrbm93IHRoZSBtYXggbnVtYmVyIG9mCisJCSAqIHBhcnRpdGlvbiBrZXJuZWwgc2hvdWxkIGJlIGFibGUgdG8gbWFuYWdlLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgLTEgaXMgcmVxdWlyZWQgYmVjYXVzZSBwYXJ0aXRpb24gMCBpcyByZXNlcnZlZAorCQkgKiBmb3IgdGhlIHdob2xlIGRpc2suCisJCSAqLworCQltYXhfcGFydCA9ICgxVUwgPDwgcGFydF9zaGlmdCkgLSAxOworCX0KKworCWlmICgoMVVMIDw8IHBhcnRfc2hpZnQpID4gRElTS19NQVhfUEFSVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5iZHNfbWF4ID4gMVVMIDw8IChNSU5PUkJJVFMgLSBwYXJ0X3NoaWZ0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlmb3IgKGkgPSAwOyBpIDwgbmJkc19tYXg7IGkrKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFsbG9jX2Rpc2soMSA8PCBwYXJ0X3NoaWZ0KTsKIAkJaWYgKCFkaXNrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwppbmRleCBhMGFhYmQ5Li40NmI4MTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwpAQCAtMzIxLDcgKzMyMSw2IEBACiAJCXN0cmNweShkaXNrLT5kaXNrX25hbWUsIGNkLT5uYW1lKTsJLyogdW1tLi4uICovCiAJCWRpc2stPmZvcHMgPSAmcGNkX2Jkb3BzOwogCQlkaXNrLT5mbGFncyA9IEdFTkhEX0ZMX0JMT0NLX0VWRU5UU19PTl9FWENMX1dSSVRFOwotCQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggNmVjZjg5Yy4uMDc5YzA4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTYsMTAgKzYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmxrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdfaGVscGVycy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAKICNkZWZpbmUgUEFSVF9CSVRTIDQKIAogc3RhdGljIGludCBtYWpvciwgaW5kZXg7CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdmlydGJsa193cTsKIAogc3RydWN0IHZpcnRpb19ibGsKIHsKQEAgLTI2LDYgKzI5LDkgQEAKIAogCW1lbXBvb2xfdCAqcG9vbDsKIAorCS8qIFByb2Nlc3MgY29udGV4dCBmb3IgY29uZmlnIHNwYWNlIHVwZGF0ZXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29uZmlnX3dvcms7CisKIAkvKiBXaGF0IGhvc3QgdGVsbHMgdXMsIHBsdXMgMiBmb3IgaGVhZGVyICYgdGFpbGVyLiAqLwogCXVuc2lnbmVkIGludCBzZ19lbGVtczsKIApAQCAtMTQxLDcgKzE0Nyw3IEBACiAJbnVtID0gYmxrX3JxX21hcF9zZyhxLCB2YnItPnJlcSwgdmJsay0+c2cgKyBvdXQpOwogCiAJaWYgKHZici0+cmVxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgewotCQlzZ19zZXRfYnVmKCZ2YmxrLT5zZ1tudW0gKyBvdXQgKyBpbisrXSwgdmJyLT5yZXEtPnNlbnNlLCA5Nik7CisJCXNnX3NldF9idWYoJnZibGstPnNnW251bSArIG91dCArIGluKytdLCB2YnItPnJlcS0+c2Vuc2UsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAJCXNnX3NldF9idWYoJnZibGstPnNnW251bSArIG91dCArIGluKytdLCAmdmJyLT5pbl9oZHIsCiAJCQkgICBzaXplb2YodmJyLT5pbl9oZHIpKTsKIAl9CkBAIC0yOTEsNiArMjk3LDQ2IEBACiB9CiBERVZJQ0VfQVRUUihzZXJpYWwsIFNfSVJVR08sIHZpcnRibGtfc2VyaWFsX3Nob3csIE5VTEwpOwogCitzdGF0aWMgdm9pZCB2aXJ0YmxrX2NvbmZpZ19jaGFuZ2VkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aXJ0aW9fYmxrLCBjb25maWdfd29yayk7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYgPSB2YmxrLT52ZGV2OworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gdmJsay0+ZGlzay0+cXVldWU7CisJY2hhciBjYXBfc3RyXzJbMTBdLCBjYXBfc3RyXzEwWzEwXTsKKwl1NjQgY2FwYWNpdHksIHNpemU7CisKKwkvKiBIb3N0IG11c3QgYWx3YXlzIHNwZWNpZnkgdGhlIGNhcGFjaXR5LiAqLworCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgY2FwYWNpdHkpLAorCQkJICAmY2FwYWNpdHksIHNpemVvZihjYXBhY2l0eSkpOworCisJLyogSWYgY2FwYWNpdHkgaXMgdG9vIGJpZywgdHJ1bmNhdGUgd2l0aCB3YXJuaW5nLiAqLworCWlmICgoc2VjdG9yX3QpY2FwYWNpdHkgIT0gY2FwYWNpdHkpIHsKKwkJZGV2X3dhcm4oJnZkZXYtPmRldiwgIkNhcGFjaXR5ICVsbHUgdG9vIGxhcmdlOiB0cnVuY2F0aW5nXG4iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpY2FwYWNpdHkpOworCQljYXBhY2l0eSA9IChzZWN0b3JfdCktMTsKKwl9CisKKwlzaXplID0gY2FwYWNpdHkgKiBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSk7CisJc3RyaW5nX2dldF9zaXplKHNpemUsIFNUUklOR19VTklUU18yLCBjYXBfc3RyXzIsIHNpemVvZihjYXBfc3RyXzIpKTsKKwlzdHJpbmdfZ2V0X3NpemUoc2l6ZSwgU1RSSU5HX1VOSVRTXzEwLCBjYXBfc3RyXzEwLCBzaXplb2YoY2FwX3N0cl8xMCkpOworCisJZGV2X25vdGljZSgmdmRldi0+ZGV2LAorCQkgICJuZXcgc2l6ZTogJWxsdSAlZC1ieXRlIGxvZ2ljYWwgYmxvY2tzICglcy8lcylcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyljYXBhY2l0eSwKKwkJICBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSksCisJCSAgY2FwX3N0cl8xMCwgY2FwX3N0cl8yKTsKKworCXNldF9jYXBhY2l0eSh2YmxrLT5kaXNrLCBjYXBhY2l0eSk7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRibGtfY29uZmlnX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSB2ZGV2LT5wcml2OworCisJcXVldWVfd29yayh2aXJ0YmxrX3dxLCAmdmJsay0+Y29uZmlnX3dvcmspOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrOwpAQCAtMzI3LDYgKzM3Myw3IEBACiAJdmJsay0+dmRldiA9IHZkZXY7CiAJdmJsay0+c2dfZWxlbXMgPSBzZ19lbGVtczsKIAlzZ19pbml0X3RhYmxlKHZibGstPnNnLCB2YmxrLT5zZ19lbGVtcyk7CisJSU5JVF9XT1JLKCZ2YmxrLT5jb25maWdfd29yaywgdmlydGJsa19jb25maWdfY2hhbmdlZF93b3JrKTsKIAogCS8qIFdlIGV4cGVjdCBvbmUgdmlydHF1ZXVlLCBmb3Igb3V0cHV0LiAqLwogCXZibGstPnZxID0gdmlydGlvX2ZpbmRfc2luZ2xlX3ZxKHZkZXYsIGJsa19kb25lLCAicmVxdWVzdHMiKTsKQEAgLTQ3Nyw2ICs1MjQsOCBAQAogewogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi0+cHJpdjsKIAorCWZsdXNoX3dvcmsoJnZibGstPmNvbmZpZ193b3JrKTsKKwogCS8qIE5vdGhpbmcgc2hvdWxkIGJlIHBlbmRpbmcuICovCiAJQlVHX09OKCFsaXN0X2VtcHR5KCZ2YmxrLT5yZXFzKSk7CiAKQEAgLTUwOCwyNyArNTU3LDQ3IEBACiAgKiBVc2UgX19yZWZkYXRhIHRvIGF2b2lkIHRoaXMgd2FybmluZy4KICAqLwogc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIF9fcmVmZGF0YSB2aXJ0aW9fYmxrID0gewotCS5mZWF0dXJlX3RhYmxlID0gZmVhdHVyZXMsCi0JLmZlYXR1cmVfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLAotCS5kcml2ZXIubmFtZSA9CUtCVUlMRF9NT0ROQU1FLAotCS5kcml2ZXIub3duZXIgPQlUSElTX01PRFVMRSwKLQkuaWRfdGFibGUgPQlpZF90YWJsZSwKLQkucHJvYmUgPQl2aXJ0YmxrX3Byb2JlLAotCS5yZW1vdmUgPQlfX2RldmV4aXRfcCh2aXJ0YmxrX3JlbW92ZSksCisJLmZlYXR1cmVfdGFibGUJCT0gZmVhdHVyZXMsCisJLmZlYXR1cmVfdGFibGVfc2l6ZQk9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLAorCS5kcml2ZXIubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKKwkuZHJpdmVyLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5pZF90YWJsZQkJPSBpZF90YWJsZSwKKwkucHJvYmUJCQk9IHZpcnRibGtfcHJvYmUsCisJLnJlbW92ZQkJCT0gX19kZXZleGl0X3AodmlydGJsa19yZW1vdmUpLAorCS5jb25maWdfY2hhbmdlZAkJPSB2aXJ0YmxrX2NvbmZpZ19jaGFuZ2VkLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogeworCWludCBlcnJvcjsKKworCXZpcnRibGtfd3EgPSBhbGxvY193b3JrcXVldWUoInZpcnRpby1ibGsiLCAwLCAwKTsKKwlpZiAoIXZpcnRibGtfd3EpCisJCXJldHVybiAtRU5PTUVNOworCiAJbWFqb3IgPSByZWdpc3Rlcl9ibGtkZXYoMCwgInZpcnRibGsiKTsKLQlpZiAobWFqb3IgPCAwKQotCQlyZXR1cm4gbWFqb3I7Ci0JcmV0dXJuIHJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnZpcnRpb19ibGspOworCWlmIChtYWpvciA8IDApIHsKKwkJZXJyb3IgPSBtYWpvcjsKKwkJZ290byBvdXRfZGVzdHJveV93b3JrcXVldWU7CisJfQorCisJZXJyb3IgPSByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fYmxrKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfYmxrZGV2OworCXJldHVybiAwOworCitvdXRfdW5yZWdpc3Rlcl9ibGtkZXY6CisJdW5yZWdpc3Rlcl9ibGtkZXYobWFqb3IsICJ2aXJ0YmxrIik7CitvdXRfZGVzdHJveV93b3JrcXVldWU6CisJZGVzdHJveV93b3JrcXVldWUodmlydGJsa193cSk7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewogCXVucmVnaXN0ZXJfYmxrZGV2KG1ham9yLCAidmlydGJsayIpOwogCXVucmVnaXN0ZXJfdmlydGlvX2RyaXZlcigmdmlydGlvX2Jsayk7CisJZGVzdHJveV93b3JrcXVldWUodmlydGJsa193cSk7CiB9CiBtb2R1bGVfaW5pdChpbml0KTsKIG1vZHVsZV9leGl0KGZpbmkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9ibGtiYWNrLmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2Jsa2JhY2suYwppbmRleCBjNzM5MTBjLi41Y2YyOTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2Jsa2JhY2suYworKysgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2Jsa2JhY2suYwpAQCAtODA5LDExICs4MDksMTMgQEAKICBmYWlsZWRfaW5pdDoKIAlrZnJlZShibGtiay0+cGVuZGluZ19yZXFzKTsKIAlrZnJlZShibGtiay0+cGVuZGluZ19ncmFudF9oYW5kbGVzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbW1hcF9wYWdlczsgaSsrKSB7Ci0JCWlmIChibGtiay0+cGVuZGluZ19wYWdlc1tpXSkKLQkJCV9fZnJlZV9wYWdlKGJsa2JrLT5wZW5kaW5nX3BhZ2VzW2ldKTsKKwlpZiAoYmxrYmstPnBlbmRpbmdfcGFnZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1tYXBfcGFnZXM7IGkrKykgeworCQkJaWYgKGJsa2JrLT5wZW5kaW5nX3BhZ2VzW2ldKQorCQkJCV9fZnJlZV9wYWdlKGJsa2JrLT5wZW5kaW5nX3BhZ2VzW2ldKTsKKwkJfQorCQlrZnJlZShibGtiay0+cGVuZGluZ19wYWdlcyk7CiAJfQotCWtmcmVlKGJsa2JrLT5wZW5kaW5nX3BhZ2VzKTsKIAlrZnJlZShibGtiayk7CiAJYmxrYmsgPSBOVUxMOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2sveGVuYnVzLmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL3hlbmJ1cy5jCmluZGV4IDM0NTcwODIuLjZjYzBkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2sveGVuYnVzLmMKKysrIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay94ZW5idXMuYwpAQCAtMzU3LDE0ICszNTcsMTMgQEAKIAl9CiAKIAl2YmQtPmJkZXYgPSBiZGV2OwotCXZiZC0+c2l6ZSA9IHZiZF9zeih2YmQpOwotCiAJaWYgKHZiZC0+YmRldi0+YmRfZGlzayA9PSBOVUxMKSB7CiAJCURQUklOVEsoInhlbl92YmRfY3JlYXRlOiBkZXZpY2UgJTA4eCBkb2Vzbid0IGV4aXN0LlxuIiwKIAkJCXZiZC0+cGRldmljZSk7CiAJCXhlbl92YmRfZnJlZSh2YmQpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CisJdmJkLT5zaXplID0gdmJkX3N6KHZiZCk7CiAKIAlpZiAodmJkLT5iZGV2LT5iZF9kaXNrLT5mbGFncyAmIEdFTkhEX0ZMX0NEIHx8IGNkcm9tKQogCQl2YmQtPnR5cGUgfD0gVkRJU0tfQ0RST007CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCmluZGV4IGIzZjAxOTkuLjQ4YWQyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCkBAIC0zNTUsMjkgKzM1NSwyNCBAQAogICogICAgICAgICAgICAgZmxhZ3MgICAgICAgIHBvaW50ZXIgdG8gZmxhZ3MgZm9yIGRhdGEKICAqICAgICAgICAgICAgIGNvdW50ICAgICAgICBjb3VudCBvZiByZWNlaXZlZCBkYXRhIGluIGJ5dGVzCiAgKiAgICAgCi0gKiBSZXR1cm4gVmFsdWU6ICAgIE51bWJlciBvZiBieXRlcyByZWNlaXZlZAorICogUmV0dXJuIFZhbHVlOiAgICBOb25lCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGNpX3VhcnRfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJY29uc3QgdTggKmRhdGEsIGNoYXIgKmZsYWdzLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBoY2lfdWFydF90dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqZGF0YSwgY2hhciAqZmxhZ3MsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgaGNpX3VhcnQgKmh1ID0gKHZvaWQgKil0dHktPmRpc2NfZGF0YTsKLQlpbnQgcmVjZWl2ZWQ7CiAKIAlpZiAoIWh1IHx8IHR0eSAhPSBodS0+dHR5KQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogCiAJaWYgKCF0ZXN0X2JpdChIQ0lfVUFSVF9QUk9UT19TRVQsICZodS0+ZmxhZ3MpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrKCZodS0+cnhfbG9jayk7Ci0JcmVjZWl2ZWQgPSBodS0+cHJvdG8tPnJlY3YoaHUsICh2b2lkICopIGRhdGEsIGNvdW50KTsKLQlpZiAocmVjZWl2ZWQgPiAwKQotCQlodS0+aGRldi0+c3RhdC5ieXRlX3J4ICs9IHJlY2VpdmVkOworCWh1LT5wcm90by0+cmVjdihodSwgKHZvaWQgKikgZGF0YSwgY291bnQpOworCWh1LT5oZGV2LT5zdGF0LmJ5dGVfcnggKz0gY291bnQ7CiAJc3Bpbl91bmxvY2soJmh1LT5yeF9sb2NrKTsKIAogCXR0eV91bnRocm90dGxlKHR0eSk7Ci0KLQlyZXR1cm4gcmVjZWl2ZWQ7CiB9CiAKIHN0YXRpYyBpbnQgaGNpX3VhcnRfcmVnaXN0ZXJfZGV2KHN0cnVjdCBoY2lfdWFydCAqaHUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKaW5kZXggYWUxNWE0ZC4uNzg3OGRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS92aW9jZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwpAQCAtNjI3LDcgKzYyNyw2IEBACiAJZ2VuZGlzay0+Zm9wcyA9ICZ2aW9jZF9mb3BzOwogCWdlbmRpc2stPmZsYWdzID0gR0VOSERfRkxfQ0QgfCBHRU5IRF9GTF9SRU1PVkFCTEUgfAogCQkJIEdFTkhEX0ZMX0JMT0NLX0VWRU5UU19PTl9FWENMX1dSSVRFOwotCWdlbmRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCXNldF9jYXBhY2l0eShnZW5kaXNrLCAwKTsKIAlnZW5kaXNrLT5wcml2YXRlX2RhdGEgPSBkOwogCWQtPnZpb2NkX2Rpc2sgPSBnZW5kaXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCA4Mzg1NjhhLi5mYjY4YjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMTY3NywxNyArMTY3NywxMiBAQAogCXBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMgPSAxOwogCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQpKSB7CiAJCW11bHRpcG9ydCA9IHRydWU7Ci0JCXZkZXYtPmZlYXR1cmVzWzBdIHw9IDEgPDwgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQ7Ci0KIAkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywKIAkJCQkJCSBtYXhfbnJfcG9ydHMpLAogCQkJCSAgJnBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMsCiAJCQkJICBzaXplb2YocG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykpOwogCX0KIAotCS8qIExldCB0aGUgSG9zdCBrbm93IHdlIHN1cHBvcnQgbXVsdGlwbGUgcG9ydHMuKi8KLQl2ZGV2LT5jb25maWctPmZpbmFsaXplX2ZlYXR1cmVzKHZkZXYpOwotCiAJZXJyID0gaW5pdF92cXMocG9ydGRldik7CiAJaWYgKGVyciA8IDApIHsKIAkJZGV2X2VycigmdmRldi0+ZGV2LCAiRXJyb3IgJWQgaW5pdGlhbGl6aW5nIHZxc1xuIiwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCmluZGV4IDAzNmU1ODYuLmRjN2MwMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CkBAIC0xNTMsMTIgKzE1MiwxMCBAQAogewogCWludCByZXQ7CiAKLQkvKiB3YWtlIHVwIGRldmljZSBhbmQgZW5hYmxlIGNsb2NrICovCi0JcG1fcnVudGltZV9nZXRfc3luYygmcC0+cGRldi0+ZGV2KTsKKwkvKiBlbmFibGUgY2xvY2sgKi8KIAlyZXQgPSBjbGtfZW5hYmxlKHAtPmNsayk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJjYW5ub3QgZW5hYmxlIGNsb2NrXG4iKTsKLQkJcG1fcnVudGltZV9wdXRfc3luYygmcC0+cGRldi0+ZGV2KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTE5MCw5ICsxODcsOCBAQAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBpbiBDTVQgYmxvY2sgKi8KIAlzaF9jbXRfd3JpdGUocCwgQ01DU1IsIDApOwogCi0JLyogc3RvcCBjbG9jayBhbmQgbWFyayBkZXZpY2UgYXMgaWRsZSAqLworCS8qIHN0b3AgY2xvY2sgKi8KIAljbGtfZGlzYWJsZShwLT5jbGspOwotCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnAtPnBkZXYtPmRldik7CiB9CiAKIC8qIHByaXZhdGUgZmxhZ3MgKi8KQEAgLTY2NCw3ICs2NjAsNiBAQAogCiAJaWYgKHApIHsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgImtlcHQgYXMgZWFybHl0aW1lclxuIik7Ci0JCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTY3OSw5ICs2NzQsNiBAQAogCQlrZnJlZShwKTsKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJfQotCi0JaWYgKCFpc19lYXJseV9wbGF0Zm9ybV9kZXZpY2UocGRldikpCi0JCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jCmluZGV4IDE3Mjk2MjguLjgwODEzNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KQEAgLTExMCwxMiArMTA5LDEwIEBACiB7CiAJaW50IHJldDsKIAotCS8qIHdha2UgdXAgZGV2aWNlIGFuZCBlbmFibGUgY2xvY2sgKi8KLQlwbV9ydW50aW1lX2dldF9zeW5jKCZwLT5wZGV2LT5kZXYpOworCS8qIGVuYWJsZSBjbG9jayAqLwogCXJldCA9IGNsa19lbmFibGUocC0+Y2xrKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImNhbm5vdCBlbmFibGUgY2xvY2tcbiIpOwotCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZwLT5wZGV2LT5kZXYpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTQ0LDkgKzE0MSw4IEBACiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGluIFRNVSBibG9jayAqLwogCXNoX3RtdV93cml0ZShwLCBUQ1IsIDB4MDAwMCk7CiAKLQkvKiBzdG9wIGNsb2NrIGFuZCBtYXJrIGRldmljZSBhcyBpZGxlICovCisJLyogc3RvcCBjbG9jayAqLwogCWNsa19kaXNhYmxlKHAtPmNsayk7Ci0JcG1fcnVudGltZV9wdXRfc3luYygmcC0+cGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgc2hfdG11X3NldF9uZXh0KHN0cnVjdCBzaF90bXVfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBkZWx0YSwKQEAgLTQxNSw3ICs0MTEsNiBAQAogCiAJaWYgKHApIHsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgImtlcHQgYXMgZWFybHl0aW1lclxuIik7Ci0JCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQzMCw5ICs0MjUsNiBAQAogCQlrZnJlZShwKTsKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJfQotCi0JaWYgKCFpc19lYXJseV9wbGF0Zm9ybV9kZXZpY2UocGRldikpCi0JCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3NoZG1hLmMgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCmluZGV4IDYzNmU0MDkuLjJhNjM4ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3NoZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvc2hkbWEuYwpAQCAtMzQzLDcgKzM0Myw3IEBACiAKIAkJZG1hZV9zZXRfZG1hcnMoc2hfY2hhbiwgY2ZnLT5taWRfcmlkKTsKIAkJZG1hZV9zZXRfY2hjcihzaF9jaGFuLCBjZmctPmNoY3IpOwotCX0gZWxzZSBpZiAoKHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUikgJiAweGYwMCkgIT0gMHg0MDApIHsKKwl9IGVsc2UgewogCQlkbWFlX2luaXQoc2hfY2hhbik7CiAJfQogCkBAIC0xMTQ0LDYgKzExNDQsOCBAQAogCS8qIHBsYXRmb3JtIGRhdGEgKi8KIAlzaGRldi0+cGRhdGEgPSBwZGF0YTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNoZGV2KTsKKwogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CiAKQEAgLTEyNTYsNyArMTI1OCw2IEBACiAKIAlwbV9ydW50aW1lX3B1dCgmcGRldi0+ZGV2KTsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNoZGV2KTsKIAlkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZzaGRldi0+Y29tbW9uKTsKIAogCXJldHVybiBlcnI7CkBAIC0xMjc4LDYgKzEyNzksOCBAQAogCiAJaWYgKGRtYXJzKQogCQlpb3VubWFwKHNoZGV2LT5kbWFycyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIGVtYXBkbWFyczoKIAlpb3VubWFwKHNoZGV2LT5jaGFuX3JlZyk7CiAJc3luY2hyb25pemVfcmN1KCk7CkBAIC0xMzE2LDYgKzEzMTksOCBAQAogCQlpb3VubWFwKHNoZGV2LT5kbWFycyk7CiAJaW91bm1hcChzaGRldi0+Y2hhbl9yZWcpOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAlrZnJlZShzaGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCmluZGV4IGYwMzJlNDQuLmJmZTcyMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwpAQCAtMTA4LDcgKzEwOCw5IEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgX19pbml0IGZpbmRfaWJmdF9yZWdpb24odW5zaWduZWQgbG9uZyAqc2l6ZXApCiB7CisjaWZkZWYgQ09ORklHX0FDUEkKIAlpbnQgaTsKKyNlbmRpZgogCWliZnRfYWRkciA9IE5VTEw7CiAKICNpZmRlZiBDT05GSUdfQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL0tjb25maWcgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwppbmRleCA0YTdmNjMxLi4yOTY3MDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwpAQCAtODcsMzIgKzg3LDIwIEBACiAJICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBHUElPIGZ1bmN0aW9uYWxpdHkgb2YgSVQ4NzYxRSBzdXBlciBJL08gY2hpcC4KIAogY29uZmlnIEdQSU9fRVhZTk9TNAotCWJvb2wgIlNhbXN1bmcgRXh5bm9zNCBHUElPIGxpYnJhcnkgc3VwcG9ydCIKLQlkZWZhdWx0IHkgaWYgQ1BVX0VYWU5PUzQyMTAKLQlkZXBlbmRzIG9uIEFSTQotCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IFNhbXN1bmcgRXh5bm9zNCBzZXJpZXMgU29DcyBHUElPIGxpYnJhcnkKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBDUFVfRVhZTk9TNDIxMAogCiBjb25maWcgR1BJT19QTEFUX1NBTVNVTkcKLQlib29sICJTYW1zdW5nIFNvQ3MgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIFNBTVNVTkdfR1BJT0xJQl80QklUCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIFNvQ3MgR1BJTyBsaWJyYXJ5CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gU0FNU1VOR19HUElPTElCXzRCSVQKIAogY29uZmlnIEdQSU9fUzVQQzEwMAotCWJvb2wgIlNhbXN1bmcgUzVQQzEwMCBHUElPIGxpYnJhcnkgc3VwcG9ydCIKLQlkZWZhdWx0IHkgaWYgQ1BVX1M1UEMxMDAKLQlkZXBlbmRzIG9uIEFSTQotCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IFNhbXN1bmcgUzVQQzEwMCBTb0NzIEdQSU8gbGlicmFyeQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENQVV9TNVBDMTAwCiAKIGNvbmZpZyBHUElPX1M1UFYyMTAKLQlib29sICJTYW1zdW5nIFM1UFYyMTAvUzVQQzExMCBHUElPIGxpYnJhcnkgc3VwcG9ydCIKLQlkZWZhdWx0IHkgaWYgQ1BVX1M1UFYyMTAKLQlkZXBlbmRzIG9uIEFSTQotCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IFNhbXN1bmcgUzVQVjIxMC9TNVBDMTEwIFNvQ3MgR1BJTyBsaWJyYXJ5CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQ1BVX1M1UFYyMTAKIAogY29uZmlnIEdQSU9fUEwwNjEKIAlib29sICJQcmltZUNlbGwgUEwwNjEgR1BJTyBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tZXh5bm9zNC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tZXh5bm9zNC5jCmluZGV4IGQ1NGNhNmEuLjkwMjk4MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWV4eW5vczQuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1leHlub3M0LmMKQEAgLTIxLDE2ICsyMSwzNyBAQAogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaD4KIAoraW50IHMzY19ncGlvX3NldHB1bGxfZXh5bm9zNChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQl1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCkKK3sKKwlpZiAocHVsbCA9PSBTM0NfR1BJT19QVUxMX1VQKQorCQlwdWxsID0gMzsKKworCXJldHVybiBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93bihjaGlwLCBvZmYsIHB1bGwpOworfQorCitzM2NfZ3Bpb19wdWxsX3QgczNjX2dwaW9fZ2V0cHVsbF9leHlub3M0KHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkJdW5zaWduZWQgaW50IG9mZikKK3sKKwlzM2NfZ3Bpb19wdWxsX3QgcHVsbDsKKworCXB1bGwgPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93bihjaGlwLCBvZmYpOworCWlmIChwdWxsID09IDMpCisJCXB1bGwgPSBTM0NfR1BJT19QVUxMX1VQOworCisJcmV0dXJuIHB1bGw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2ZnIGdwaW9fY2ZnID0gewogCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCwKLQkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93biwKLQkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93biwKKwkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX2V4eW5vczQsCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF9leHlub3M0LAogfTsKIAogc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jZmcgZ3Bpb19jZmdfbm9pbnQgPSB7CiAJLnNldF9jb25maWcJPSBzM2NfZ3Bpb19zZXRjZmdfczNjNjR4eF80Yml0LAotCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfdXBkb3duLAotCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAorCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfZXh5bm9zNCwKKwkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX2V4eW5vczQsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tbm9tYWRpay5jIGIvZHJpdmVycy9ncGlvL2dwaW8tbm9tYWRpay5jCmluZGV4IDQ5NjFlZjkuLjJjMjEyYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLW5vbWFkaWsuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1ub21hZGlrLmMKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSBTVE1pY3JvZWxlY3Ryb25pY3MKICAqIENvcHlyaWdodCAoQykgMjAwOSBBbGVzc2FuZHJvIFJ1YmluaSA8cnViaW5pQHVuaXB2Lml0PgogICogICBSZXdyaXR0ZW4gYmFzZWQgb24gd29yayBieSBQcmFmdWxsYSBXQURBU0tBUiA8cHJhZnVsbGEud2FkYXNrYXJAc3QuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTQ5LDYgKzUwLDcgQEAKIAl1MzIgKCpnZXRfc2Vjb25kYXJ5X3N0YXR1cykodW5zaWduZWQgaW50IGJhbmspOwogCXZvaWQgKCpzZXRfaW9mb3JjZSkoYm9vbCBlbmFibGUpOwogCXNwaW5sb2NrX3QgbG9jazsKKwlib29sIHNsZWVwbW9kZTsKIAkvKiBLZWVwIHRyYWNrIG9mIGNvbmZpZ3VyZWQgZWRnZXMgKi8KIAl1MzIgZWRnZV9yaXNpbmc7CiAJdTMyIGVkZ2VfZmFsbGluZzsKQEAgLTM5MywxNCArMzk1LDI1IEBACiAgKiBAZ3BpbzogcGluIG51bWJlcgogICogQG1vZGU6IE5NS19HUElPX1NMUE1fSU5QVVQgb3IgTk1LX0dQSU9fU0xQTV9OT0NIQU5HRSwKICAqCi0gKiBTZXRzIHRoZSBzbGVlcCBtb2RlIG9mIGEgcGluLiAgSWYgQG1vZGUgaXMgTk1LX0dQSU9fU0xQTV9JTlBVVCwgdGhlIHBpbiBpcwotICogY2hhbmdlZCB0byBhbiBpbnB1dCAod2l0aCBwdWxsdXAvZG93biBlbmFibGVkKSBpbiBzbGVlcCBhbmQgZGVlcCBzbGVlcC4gIElmCi0gKiBAbW9kZSBpcyBOTUtfR1BJT19TTFBNX05PQ0hBTkdFLCB0aGUgcGluIHJlbWFpbnMgaW4gdGhlIHN0YXRlIGl0IHdhcwotICogY29uZmlndXJlZCBldmVuIHdoZW4gaW4gc2xlZXAgYW5kIGRlZXAgc2xlZXAuCisgKiBUaGlzIHJlZ2lzdGVyIGlzIGFjdHVhbGx5IGluIHRoZSBwaW5tdXggbGF5ZXIsIG5vdCB0aGUgR1BJTyBibG9jayBpdHNlbGYuCisgKiBUaGUgR1BJTzFCX1NMUE0gcmVnaXN0ZXIgZGVmaW5lcyB0aGUgR1BJTyBtb2RlIHdoZW4gU0xFRVAvREVFUC1TTEVFUAorICogbW9kZSBpcyBlbnRlcmVkIChpLmUuIHdoZW4gc2lnbmFsIElPRk9SQ0UgaXMgSElHSCBieSB0aGUgcGxhdGZvcm0gY29kZSkuCisgKiBFYWNoIEdQSU8gY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYmUgZm9yY2VkIGludG8gR1BJTyBtb2RlIHdoZW4gSU9GT1JDRSBpcworICogSElHSCwgb3ZlcnJpZGluZyB0aGUgbm9ybWFsIHNldHRpbmcgZGVmaW5lZCBieSBHUElPX0FGU0VMeCByZWdpc3RlcnMuCisgKiBXaGVuIElPRk9SQ0UgcmV0dXJucyBMT1cgKGJ5IHNvZnR3YXJlLCBhZnRlciBTTEVFUC9ERUVQLVNMRUVQIGV4aXQpLAorICogdGhlIEdQSU9zIHJldHVybiB0byB0aGUgbm9ybWFsIHNldHRpbmcgZGVmaW5lZCBieSBHUElPX0FGU0VMeCByZWdpc3RlcnMuCiAgKgotICogT24gREI4NTAwdjIgb253YXJkcywgdGhpcyBzZXR0aW5nIGxvc2VzIHRoZSBwcmV2aW91cyBtZWFuaW5nIGFuZCBpbnN0ZWFkCi0gKiBpbmRpY2F0ZXMgaWYgd2FrZXVwIGRldGVjdGlvbiBpcyBlbmFibGVkIG9uIHRoZSBwaW4uICBOb3RlIHRoYXQKLSAqIGVuYWJsZV9pcnFfd2FrZSgpIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUgd2FrZXVwIGRldGVjdGlvbi4KKyAqIElmIEBtb2RlIGlzIE5NS19HUElPX1NMUE1fSU5QVVQsIHRoZSBjb3JyZXNwb25kaW5nIEdQSU8gaXMgc3dpdGNoZWQgdG8gR1BJTworICogbW9kZSB3aGVuIHNpZ25hbCBJT0ZPUkNFIGlzIEhJR0ggKGkuZS4gd2hlbiBTTEVFUC9ERUVQLVNMRUVQIG1vZGUgaXMKKyAqIGVudGVyZWQpIHJlZ2FyZGxlc3Mgb2YgdGhlIGFsdGZ1bmN0aW9uIHNlbGVjdGVkLiBBbHNvIHdha2UtdXAgZGV0ZWN0aW9uIGlzCisgKiBFTkFCTEVELgorICoKKyAqIElmIEBtb2RlIGlzIE5NS19HUElPX1NMUE1fTk9DSEFOR0UsIHRoZSBjb3JyZXNwb25kaW5nIEdQSU8gcmVtYWlucworICogY29udHJvbGxlZCBieSBOTUtfR1BJT19EQVRDLCBOTUtfR1BJT19EQVRTLCBOTUtfR1BJT19ESVIsIE5NS19HUElPX1BESVMKKyAqIChmb3IgYWx0ZnVuY3Rpb24gR1BJTykgb3IgcmVzcGVjdGl2ZSBvbi1jaGlwIHBlcmlwaGVyYWxzIChmb3Igb3RoZXIKKyAqIGFsdGZ1bmNzKSB3aGVuIElPRk9SQ0UgaXMgSElHSC4gQWxzbyB3YWtlLXVwIGRldGVjdGlvbiBESVNBQkxFRC4KKyAqCisgKiBOb3RlIHRoYXQgZW5hYmxlX2lycV93YWtlKCkgd2lsbCBhdXRvbWF0aWNhbGx5IGVuYWJsZSB3YWtldXAgZGV0ZWN0aW9uLgogICovCiBpbnQgbm1rX2dwaW9fc2V0X3NscG0oaW50IGdwaW8sIGVudW0gbm1rX2dwaW9fc2xwbSBtb2RlKQogewpAQCAtNTUxLDYgKzU2NCwxMiBAQAogc3RhdGljIHZvaWQgX19ubWtfZ3Bpb19zZXRfd2FrZShzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAsCiAJCQkJaW50IGdwaW8sIGJvb2wgb24pCiB7CisJaWYgKG5ta19jaGlwLT5zbGVlcG1vZGUpIHsKKwkJX19ubWtfZ3Bpb19zZXRfc2xwbShubWtfY2hpcCwgZ3BpbyAtIG5ta19jaGlwLT5jaGlwLmJhc2UsCisJCQkJICAgIG9uID8gTk1LX0dQSU9fU0xQTV9XQUtFVVBfRU5BQkxFCisJCQkJICAgIDogTk1LX0dQSU9fU0xQTV9XQUtFVVBfRElTQUJMRSk7CisJfQorCiAJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCBXQUtFLCBvbik7CiB9CiAKQEAgLTkwMSw3ICs5MjAsNyBAQAogCQl3cml0ZWwoY2hpcC0+ZndpbXNjICYgY2hpcC0+cmVhbF93YWtlLAogCQkgICAgICAgY2hpcC0+YWRkciArIE5NS19HUElPX0ZXSU1TQyk7CiAKLQkJaWYgKGNwdV9pc191ODUwMHYyKCkpIHsKKwkJaWYgKGNoaXAtPnNsZWVwbW9kZSkgewogCQkJY2hpcC0+c2xwbSA9IHJlYWRsKGNoaXAtPmFkZHIgKyBOTUtfR1BJT19TTFBDKTsKIAogCQkJLyogMCAtPiB3YWtldXAgZW5hYmxlICovCkBAIC05MjMsNyArOTQyLDcgQEAKIAkJd3JpdGVsKGNoaXAtPnJ3aW1zYywgY2hpcC0+YWRkciArIE5NS19HUElPX1JXSU1TQyk7CiAJCXdyaXRlbChjaGlwLT5md2ltc2MsIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19GV0lNU0MpOwogCi0JCWlmIChjcHVfaXNfdTg1MDB2MigpKQorCQlpZiAoY2hpcC0+c2xlZXBtb2RlKQogCQkJd3JpdGVsKGNoaXAtPnNscG0sIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19TTFBDKTsKIAl9CiB9CkBAIC0xMDEwLDYgKzEwMjksNyBAQAogCW5ta19jaGlwLT5zZWNvbmRhcnlfcGFyZW50X2lycSA9IHNlY29uZGFyeV9pcnE7CiAJbm1rX2NoaXAtPmdldF9zZWNvbmRhcnlfc3RhdHVzID0gcGRhdGEtPmdldF9zZWNvbmRhcnlfc3RhdHVzOwogCW5ta19jaGlwLT5zZXRfaW9mb3JjZSA9IHBkYXRhLT5zZXRfaW9mb3JjZTsKKwlubWtfY2hpcC0+c2xlZXBtb2RlID0gcGRhdGEtPnN1cHBvcnRzX3NsZWVwbW9kZTsKIAlzcGluX2xvY2tfaW5pdCgmbm1rX2NoaXAtPmxvY2spOwogCiAJY2hpcCA9ICZubWtfY2hpcC0+Y2hpcDsKQEAgLTEwNjUsNSArMTA4NSwzIEBACiBNT0RVTEVfQVVUSE9SKCJQcmFmdWxsYSBXQURBU0tBUiBhbmQgQWxlc3NhbmRybyBSdWJpbmkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTm9tYWRpayBHUElPIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYwppbmRleCA2YzUxMTkxLi4wMWY3NGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jCkBAIC00MzIsNyArNDMyLDYgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBiYW5rLT5iYXNlOwogCXUzMiBncGlvX2JpdCA9IDEgPDwgZ3BpbzsKLQl1MzIgdmFsOwogCiAJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCU1PRF9SRUdfQklUKE9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwLCBncGlvX2JpdCwKQEAgLTQ1NSwxNSArNDU0LDggQEAKIAl9CiAJaWYgKGxpa2VseSghKGJhbmstPm5vbl93YWtldXBfZ3Bpb3MgJiBncGlvX2JpdCkpKSB7CiAJCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQkJaWYgKHRyaWdnZXIgIT0gMCkKLQkJCQlfX3Jhd193cml0ZWwoMSA8PCBncGlvLCBiYW5rLT5iYXNlKwotCQkJCQkJT01BUDRfR1BJT19JUlFXQUtFTjApOwotCQkJZWxzZSB7Ci0JCQkJdmFsID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCi0JCQkJCQkJT01BUDRfR1BJT19JUlFXQUtFTjApOwotCQkJCV9fcmF3X3dyaXRlbCh2YWwgJiAofigxIDw8IGdwaW8pKSwgYmFuay0+YmFzZSArCi0JCQkJCQkJIE9NQVA0X0dQSU9fSVJRV0FLRU4wKTsKLQkJCX0KKwkJCU1PRF9SRUdfQklUKE9NQVA0X0dQSU9fSVJRV0FLRU4wLCBncGlvX2JpdCwKKwkJCQl0cmlnZ2VyICE9IDApOwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIEdQSU8gd2FrZXVwIHJlcXVlc3QgY2FuIG9ubHkgYmUgZ2VuZXJhdGVkIG9uIGVkZ2UKQEAgLTExMzQsOCArMTEyNiwxMSBAQAogewogCXVuc2lnbmVkIGludCBncGlvID0gZC0+aXJxIC0gSUhfR1BJT19CQVNFOwogCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAlfcmVzZXRfZ3BpbyhiYW5rLCBncGlvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGdwaW9fYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCkBAIC0xMTUwLDkgKzExNDUsMTIgQEAKIHsKIAl1bnNpZ25lZCBpbnQgZ3BpbyA9IGQtPmlycSAtIElIX0dQSU9fQkFTRTsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvLCAwKTsKIAlfc2V0X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgSVJRX1RZUEVfTk9ORSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBncGlvX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQpAQCAtMTE2MSw3ICsxMTU5LDkgQEAKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJdW5zaWduZWQgaW50IGlycV9tYXNrID0gMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKTsKIAl1MzIgdHJpZ2dlciA9IGlycWRfZ2V0X3RyaWdnZXJfdHlwZShkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAlpZiAodHJpZ2dlcikKIAkJX3NldF9ncGlvX3RyaWdnZXJpbmcoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIHRyaWdnZXIpOwogCkBAIC0xMTczLDYgKzExNzMsNyBAQAogCX0KIAogCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3BpbywgMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxX2NoaXAgPSB7CkBAIC0xNTI0LDcgKzE1MjUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ3Bpb19jaGlwX2luaXQoc3RydWN0IGdwaW9fYmFuayAqYmFuaykKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBvbWFwX2dwaW9fY2hpcF9pbml0KHN0cnVjdCBncGlvX2JhbmsgKmJhbmspCiB7CiAJaW50IGo7CiAJc3RhdGljIGludCBncGlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCA1MWMyMjU3Li40ZDQ2NDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtNzc2LDcgKzc3Niw3IEBACiAJc2VxX3ByaW50ZihtLCAiICBJTlNUUE06IDB4JTA4eFxuIiwgZXJyb3ItPmluc3RwbSk7CiAJc2VxX3ByaW50ZihtLCAiICBzZXFubzogMHglMDh4XG4iLCBlcnJvci0+c2Vxbm8pOwogCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKQogCQlzZXFfcHJpbnRmKG0sICIgIGZlbmNlWyVkXSA9ICUwOGxseFxuIiwgaSwgZXJyb3ItPmZlbmNlW2ldKTsKIAogCWlmIChlcnJvci0+YWN0aXZlX2JvKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZWU2NjAzNS4uZjYzZWUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC03MTYsNiArNzE2LDcgQEAKIAlzdHJ1Y3QgaW50ZWxfZmJkZXYgKmZiZGV2OwogCiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKIAogCWF0b21pY190IGZvcmNld2FrZV9jb3VudDsKIH0gZHJtX2k5MTVfcHJpdmF0ZV90OwpAQCAtOTA5LDEzICs5MTAsNiBAQAogCX0gbW07CiB9OwogCi1lbnVtIGludGVsX2NoaXBfZmFtaWx5IHsKLQlDSElQX0k4WFggPSAweDAxLAotCUNISVBfSTlYWCA9IDB4MDIsCi0JQ0hJUF9JOTE1ID0gMHgwNCwKLQlDSElQX0k5NjUgPSAweDA4LAotfTsKLQogI2RlZmluZSBJTlRFTF9JTkZPKGRldikJKCgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikgKGRldiktPmRldl9wcml2YXRlKS0+aW5mbykKIAogI2RlZmluZSBJU19JODMwKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDM1NzcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCAwYjJlMTY3Li4xMmQzMjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTM1NCw3ICszNTQsNyBAQAogCQkgKiBwYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFLTEpOworCQlwYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKHBhZ2Vfb2Zmc2V0ICsgcmVtYWluKSA+IFBBR0VfU0laRSkKIAkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CkBAIC00NTMsOSArNDUzLDkgQEAKIAkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiB+UEFHRV9NQVNLOworCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCWRhdGFfcGFnZV9pbmRleCA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFIC0gZmlyc3RfZGF0YV9wYWdlOwotCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gZGF0YV9wdHIgJiB+UEFHRV9NQVNLOworCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YV9wdHIpOwogCiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKHNobWVtX3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQpAQCAtNjM4LDggKzYzOCw4IEBACiAJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlwYWdlX2Jhc2UgPSAob2Zmc2V0ICYgfihQQUdFX1NJWkUtMSkpOwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CisJCXBhZ2VfYmFzZSA9IG9mZnNldCAmIFBBR0VfTUFTSzsKKwkJcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpOwogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKIAkJaWYgKChwYWdlX29mZnNldCArIHJlbWFpbikgPiBQQUdFX1NJWkUpCiAJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwpAQCAtNjUwLDcgKzY1MCw2IEBACiAJCSAqLwogCQlpZiAoZmFzdF91c2VyX3dyaXRlKGRldl9wcml2LT5tbS5ndHRfbWFwcGluZywgcGFnZV9iYXNlLAogCQkJCSAgICBwYWdlX29mZnNldCwgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCkpCi0KIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKQEAgLTczMCw5ICs3MjksOSBAQAogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KIAkJZ3R0X3BhZ2VfYmFzZSA9IG9mZnNldCAmIFBBR0VfTUFTSzsKLQkJZ3R0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgflBBR0VfTUFTSzsKKwkJZ3R0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7Ci0JCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhX3B0cik7CiAKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgoZ3R0X3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQpAQCAtNzkxLDcgKzc5MCw3IEBACiAJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgocGFnZV9vZmZzZXQgKyByZW1haW4pID4gUEFHRV9TSVpFKQogCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKQEAgLTg5Niw5ICs4OTUsOSBAQAogCQkgKiBkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGggZGF0YV9wYWdlX2luZGV4IHBhZ2UuCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldCAmIH5QQUdFX01BU0s7CisJCXNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7Ci0JCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhX3B0cik7CiAKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgoc2htZW1fcGFnZV9vZmZzZXQgKyBwYWdlX2xlbmd0aCkgPiBQQUdFX1NJWkUpCkBAIC0xNDUwLDggKzE0NDksOSBAQAogCSAqIGVkZ2Ugb2YgYW4gZXZlbiB0aWxlIHJvdyAod2hlcmUgdGlsZSByb3dzIGFyZSBjb3VudGVkIGFzIGlmIHRoZSBibyBpcwogCSAqIHBsYWNlZCBpbiBhIGZlbmNlZCBndHQgcmVnaW9uKS4KIAkgKi8KLQlpZiAoSVNfR0VOMihkZXYpIHx8Ci0JICAgIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kgJiYgSEFTXzEyOF9CWVRFX1lfVElMSU5HKGRldikpKQorCWlmIChJU19HRU4yKGRldikpCisJCXRpbGVfaGVpZ2h0ID0gMTY7CisJZWxzZSBpZiAob2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZICYmIEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpKQogCQl0aWxlX2hlaWdodCA9IDMyOwogCWVsc2UKIAkJdGlsZV9oZWlnaHQgPSA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggYjc5NjE5YS4uYjlmYWZlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC01MTcsNyArNTE3LDcgQEAKIAlpZiAoZGVfaWlyICYgREVfUElQRUFfVkJMQU5LX0lWQikKIAkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAotCWlmIChkZV9paXIgJiBERV9QSVBFQl9WQkxBTktfSVZCKTsKKwlpZiAoZGVfaWlyICYgREVfUElQRUJfVkJMQU5LX0lWQikKIAkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKIAogCS8qIGNoZWNrIGV2ZW50IGZyb20gUENIICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IGU5M2Y5M2MuLjA5NzlkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC0yODgsNiArMjg4LDggQEAKIAkJICogVGhpcyBtYXkgYmUgYSBEVkktSSBjb25uZWN0b3Igd2l0aCBhIHNoYXJlZCBEREMKIAkJICogbGluayBiZXR3ZWVuIGFuYWxvZyBhbmQgZGlnaXRhbCBvdXRwdXRzLCBzbyB3ZQogCQkgKiBoYXZlIHRvIGNoZWNrIHRoZSBFRElEIGlucHV0IHNwZWMgb2YgdGhlIGF0dGFjaGVkIGRldmljZS4KKwkJICoKKwkJICogT24gdGhlIG90aGVyIGhhbmQsIHdoYXQgc2hvdWxkIHdlIGRvIGlmIGl0IGlzIGEgYnJva2VuIEVESUQ/CiAJCSAqLwogCQlpZiAoZWRpZCAhPSBOVUxMKSB7CiAJCQlpc19kaWdpdGFsID0gZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMOwpAQCAtMjk4LDYgKzMwMCw4IEBACiAJCWlmICghaXNfZGlnaXRhbCkgewogCQkJRFJNX0RFQlVHX0tNUygiQ1JUIGRldGVjdGVkIHZpYSBEREM6MHg1MCBbRURJRF1cbiIpOwogCQkJcmV0dXJuIHRydWU7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUdfS01TKCJDUlQgbm90IGRldGVjdGVkIHZpYSBEREM6MHg1MCBbRURJRCByZXBvcnRzIGEgZGlnaXRhbCBwYW5lbF1cbiIpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggZjU1M2RkZmQuLjgxYTkwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTM5ODMsNTQgKzM5ODMsNiBAQAogI2RlZmluZSBJTEtfTFAwX1BMQU5FX0xBVEVOQ1kJCTcwMAogI2RlZmluZSBJTEtfTFAwX0NVUlNPUl9MQVRFTkNZCQkxMzAwCiAKLXN0YXRpYyBib29sIGlyb25sYWtlX2NvbXB1dGVfd20wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJIGludCBwaXBlLAotCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKLQkJCQkgaW50IGRpc3BsYXlfbGF0ZW5jeV9ucywKLQkJCQkgY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgKmN1cnNvciwKLQkJCQkgaW50IGN1cnNvcl9sYXRlbmN5X25zLAotCQkJCSBpbnQgKnBsYW5lX3dtLAotCQkJCSBpbnQgKmN1cnNvcl93bSkKLXsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JaW50IGh0b3RhbCwgaGRpc3BsYXksIGNsb2NrLCBwaXhlbF9zaXplOwotCWludCBsaW5lX3RpbWVfdXMsIGxpbmVfY291bnQ7Ci0JaW50IGVudHJpZXMsIHRsYl9taXNzOwotCi0JY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldiwgcGlwZSk7Ci0JaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpCi0JCXJldHVybiBmYWxzZTsKLQotCWh0b3RhbCA9IGNydGMtPm1vZGUuaHRvdGFsOwotCWhkaXNwbGF5ID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKLQljbG9jayA9IGNydGMtPm1vZGUuY2xvY2s7Ci0JcGl4ZWxfc2l6ZSA9IGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCAvIDg7Ci0KLQkvKiBVc2UgdGhlIHNtYWxsIGJ1ZmZlciBtZXRob2QgdG8gY2FsY3VsYXRlIHBsYW5lIHdhdGVybWFyayAqLwotCWVudHJpZXMgPSAoKGNsb2NrICogcGl4ZWxfc2l6ZSAvIDEwMDApICogZGlzcGxheV9sYXRlbmN5X25zKSAvIDEwMDA7Ci0JdGxiX21pc3MgPSBkaXNwbGF5LT5maWZvX3NpemUqZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUgLSBoZGlzcGxheSAqIDg7Ci0JaWYgKHRsYl9taXNzID4gMCkKLQkJZW50cmllcyArPSB0bGJfbWlzczsKLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGRpc3BsYXktPmNhY2hlbGluZV9zaXplKTsKLQkqcGxhbmVfd20gPSBlbnRyaWVzICsgZGlzcGxheS0+Z3VhcmRfc2l6ZTsKLQlpZiAoKnBsYW5lX3dtID4gKGludClkaXNwbGF5LT5tYXhfd20pCi0JCSpwbGFuZV93bSA9IGRpc3BsYXktPm1heF93bTsKLQotCS8qIFVzZSB0aGUgbGFyZ2UgYnVmZmVyIG1ldGhvZCB0byBjYWxjdWxhdGUgY3Vyc29yIHdhdGVybWFyayAqLwotCWxpbmVfdGltZV91cyA9ICgoaHRvdGFsICogMTAwMCkgLyBjbG9jayk7Ci0JbGluZV9jb3VudCA9IChjdXJzb3JfbGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cyArIDEwMDApIC8gMTAwMDsKLQllbnRyaWVzID0gbGluZV9jb3VudCAqIDY0ICogcGl4ZWxfc2l6ZTsKLQl0bGJfbWlzcyA9IGN1cnNvci0+Zmlmb19zaXplKmN1cnNvci0+Y2FjaGVsaW5lX3NpemUgLSBoZGlzcGxheSAqIDg7Ci0JaWYgKHRsYl9taXNzID4gMCkKLQkJZW50cmllcyArPSB0bGJfbWlzczsKLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGN1cnNvci0+Y2FjaGVsaW5lX3NpemUpOwotCSpjdXJzb3Jfd20gPSBlbnRyaWVzICsgY3Vyc29yLT5ndWFyZF9zaXplOwotCWlmICgqY3Vyc29yX3dtID4gKGludCljdXJzb3ItPm1heF93bSkKLQkJKmN1cnNvcl93bSA9IChpbnQpY3Vyc29yLT5tYXhfd207Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogLyoKICAqIENoZWNrIHRoZSB3bSByZXN1bHQuCiAgKgpAQCAtNDEzOSwxMiArNDA5MSwxMiBAQAogCXVuc2lnbmVkIGludCBlbmFibGVkOwogCiAJZW5hYmxlZCA9IDA7Ci0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMCwKLQkJCQkgJmlyb25sYWtlX2Rpc3BsYXlfd21faW5mbywKLQkJCQkgSUxLX0xQMF9QTEFORV9MQVRFTkNZLAotCQkJCSAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCi0JCQkJIElMS19MUDBfQ1VSU09SX0xBVEVOQ1ksCi0JCQkJICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKKwlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgMCwKKwkJCSAgICAmaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLAorCQkJICAgIElMS19MUDBfUExBTkVfTEFURU5DWSwKKwkJCSAgICAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCisJCQkgICAgSUxLX0xQMF9DVVJTT1JfTEFURU5DWSwKKwkJCSAgICAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CiAJCUk5MTVfV1JJVEUoV00wX1BJUEVBX0lMSywKIAkJCSAgIChwbGFuZV93bSA8PCBXTTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pOwogCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQSAtIgpAQCAtNDE1MywxMiArNDEwNSwxMiBAQAogCQllbmFibGVkIHw9IDE7CiAJfQogCi0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMSwKLQkJCQkgJmlyb25sYWtlX2Rpc3BsYXlfd21faW5mbywKLQkJCQkgSUxLX0xQMF9QTEFORV9MQVRFTkNZLAotCQkJCSAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCi0JCQkJIElMS19MUDBfQ1VSU09SX0xBVEVOQ1ksCi0JCQkJICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKKwlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgMSwKKwkJCSAgICAmaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLAorCQkJICAgIElMS19MUDBfUExBTkVfTEFURU5DWSwKKwkJCSAgICAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCisJCQkgICAgSUxLX0xQMF9DVVJTT1JfTEFURU5DWSwKKwkJCSAgICAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CiAJCUk5MTVfV1JJVEUoV00wX1BJUEVCX0lMSywKIAkJCSAgIChwbGFuZV93bSA8PCBXTTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pOwogCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQiAtIgpAQCAtNDIyMywxMCArNDE3NSwxMCBAQAogCXVuc2lnbmVkIGludCBlbmFibGVkOwogCiAJZW5hYmxlZCA9IDA7Ci0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMCwKLQkJCQkgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywgbGF0ZW5jeSwKLQkJCQkgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAotCQkJCSAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CisJaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIDAsCisJCQkgICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywgbGF0ZW5jeSwKKwkJCSAgICAmc2FuZHlicmlkZ2VfY3Vyc29yX3dtX2luZm8sIGxhdGVuY3ksCisJCQkgICAgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgewogCQlJOTE1X1dSSVRFKFdNMF9QSVBFQV9JTEssCiAJCQkgICAocGxhbmVfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwgY3Vyc29yX3dtKTsKIAkJRFJNX0RFQlVHX0tNUygiRklGTyB3YXRlcm1hcmtzIEZvciBwaXBlIEEgLSIKQEAgLTQyMzUsMTAgKzQxODcsMTAgQEAKIAkJZW5hYmxlZCB8PSAxOwogCX0KIAotCWlmIChpcm9ubGFrZV9jb21wdXRlX3dtMChkZXYsIDEsCi0JCQkJICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCi0JCQkJICZzYW5keWJyaWRnZV9jdXJzb3Jfd21faW5mbywgbGF0ZW5jeSwKLQkJCQkgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgeworCWlmIChnNHhfY29tcHV0ZV93bTAoZGV2LCAxLAorCQkJICAgICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCisJCQkgICAgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAorCQkJICAgICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKIAkJSTkxNV9XUklURShXTTBfUElQRUJfSUxLLAogCQkJICAgKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8IGN1cnNvcl93bSk7CiAJCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJrcyBGb3IgcGlwZSBCIC0iCkBAIC03Njc1LDYgKzc2MjcsNyBAQAogCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gTlVMTDsKIAkJfSBlbHNlCiAJCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBwaW5ldmlld191cGRhdGVfd207CisJCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0gZ2VuM19pbml0X2Nsb2NrX2dhdGluZzsKIAl9IGVsc2UgaWYgKElTX0c0WChkZXYpKSB7CiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGc0eF91cGRhdGVfd207CiAJCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0gZzR4X2luaXRfY2xvY2tfZ2F0aW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggYTRkODAzMS4uMzkxYjU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC01OSw4ICs1OSw2IEBACiAJYm9vbCBpc19wY2hfZWRwOwogCXVpbnQ4X3QJdHJhaW5fc2V0WzRdOwogCXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Ci0KLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKIH07CiAKIC8qKgpAQCAtMTcwMiw3ICsxNzAwLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHByb3BlcnR5ID09IGludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgeworCWlmIChwcm9wZXJ0eSA9PSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKIAkJaW50IGkgPSB2YWw7CiAJCWJvb2wgaGFzX2F1ZGlvOwogCkBAIC0xODQxLDE2ICsxODM5LDcgQEAKIHN0YXRpYyB2b2lkCiBpbnRlbF9kcF9hZGRfcHJvcGVydGllcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKLQotCWludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSA9Ci0JCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLCAiZm9yY2VfYXVkaW8iLCAyKTsKLQlpZiAoaW50ZWxfZHAtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gLTE7Ci0JCWludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTsKLQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHksIDApOwotCX0KLQorCWludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eShjb25uZWN0b3IpOwogCWludGVsX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KGNvbm5lY3Rvcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggODMxZDdhNC4uOWZmYTYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTIzNiw2ICsyMzYsNyBAQAogaW50IGludGVsX2RkY19nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmMsIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gYm9vbCBpbnRlbF9kZGNfcHJvYmUoc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIsIGludCBkZGNfYnVzKTsKIAorZXh0ZXJuIHZvaWQgaW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogZXh0ZXJuIHZvaWQgaW50ZWxfYXR0YWNoX2Jyb2FkY2FzdF9yZ2JfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAKIGV4dGVybiB2b2lkIGludGVsX2NydF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IGYyODliODYuLmFhMGE4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIAlib29sIGhhc19oZG1pX3Npbms7CiAJYm9vbCBoYXNfYXVkaW87CiAJaW50IGZvcmNlX2F1ZGlvOwotCXN0cnVjdCBkcm1fcHJvcGVydHkgKmZvcmNlX2F1ZGlvX3Byb3BlcnR5OwogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRlbF9oZG1pICplbmNfdG9faW50ZWxfaGRtaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC0xOTQsNyArMTkzLDcgQEAKIAlpZiAobW9kZS0+Y2xvY2sgPiAxNjUwMDApCiAJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CiAJaWYgKG1vZGUtPmNsb2NrIDwgMjAwMDApCi0JCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsKIAogCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikKIAkJcmV0dXJuIE1PREVfTk9fREJMRVNDQU47CkBAIC0yODcsNyArMjg2LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHByb3BlcnR5ID09IGludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CisJaWYgKHByb3BlcnR5ID09IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewogCQlpbnQgaSA9IHZhbDsKIAkJYm9vbCBoYXNfYXVkaW87CiAKQEAgLTM2NSwxNiArMzY0LDcgQEAKIHN0YXRpYyB2b2lkCiBpbnRlbF9oZG1pX2FkZF9wcm9wZXJ0aWVzKHN0cnVjdCBpbnRlbF9oZG1pICppbnRlbF9oZG1pLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKLQotCWludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5ID0KLQkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsICJmb3JjZV9hdWRpbyIsIDIpOwotCWlmIChpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewotCQlpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gLTE7Ci0JCWludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxOwotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LCAwKTsKLQl9Ci0KKwlpbnRlbF9hdHRhY2hfZm9yY2VfYXVkaW9fcHJvcGVydHkoY29ubmVjdG9yKTsKIAlpbnRlbF9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShjb25uZWN0b3IpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggNjdjYjA3Ni4uYjI4ZjdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtNzI3LDYgKzcyNywxNCBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJVODAwIiksCiAJCX0sCiAJfSwKKwl7CisJCS5jYWxsYmFjayA9IGludGVsX25vX2x2ZHNfZG1pX2NhbGxiYWNrLAorCQkuaWRlbnQgPSAiQXN1cyBFZWVCb3ggUEMgRUIxMDA3IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIElOQy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiRUIxMDA3IiksCisJCX0sCisJfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCmluZGV4IDkwMzRkZDhmLi4zYjI2YTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMKQEAgLTgxLDYgKzgxLDM2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKmZvcmNlX2F1ZGlvX25hbWVzW10gPSB7CisJIm9mZiIsCisJImF1dG8iLAorCSJvbiIsCit9OworCit2b2lkCitpbnRlbF9hdHRhY2hfZm9yY2VfYXVkaW9fcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOworCWludCBpOworCisJcHJvcCA9IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eTsKKwlpZiAocHJvcCA9PSBOVUxMKSB7CisJCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9FTlVNLAorCQkJCQkgICAiYXVkaW8iLAorCQkJCQkgICBBUlJBWV9TSVpFKGZvcmNlX2F1ZGlvX25hbWVzKSk7CisJCWlmIChwcm9wID09IE5VTEwpCisJCQlyZXR1cm47CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9yY2VfYXVkaW9fbmFtZXMpOyBpKyspCisJCQlkcm1fcHJvcGVydHlfYWRkX2VudW0ocHJvcCwgaSwgaS0xLCBmb3JjZV9hdWRpb19uYW1lc1tpXSk7CisKKwkJZGV2X3ByaXYtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5ID0gcHJvcDsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBwcm9wLCAwKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKmJyb2FkY2FzdF9yZ2JfbmFtZXNbXSA9IHsKIAkiRnVsbCIsCiAJIkxpbWl0ZWQgMTY6MjM1IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCA3NTQwODZmLi4zMGZlNTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0xNDgsOCArMTQ4LDYgQEAKIAlpbnQgICBmb3JtYXRfc3VwcG9ydGVkX251bTsKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9mb3JtYXQ7CiAKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKLQogCS8qIGFkZCB0aGUgcHJvcGVydHkgZm9yIHRoZSBTRFZPLVRWICovCiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqbGVmdDsKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpyaWdodDsKQEAgLTE3MTIsNyArMTcxMCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKKwlpZiAocHJvcGVydHkgPT0gZGV2X3ByaXYtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CiAJCWludCBpID0gdmFsOwogCQlib29sIGhhc19hdWRpbzsKIApAQCAtMjAzNywxNSArMjAzNSw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+YmFzZS5iYXNlLmRldjsKIAotCWNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkgPQotCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9SQU5HRSwgImZvcmNlX2F1ZGlvIiwgMik7Ci0JaWYgKGNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKLQkJY29ubmVjdG9yLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gLTE7Ci0JCWNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHktPnZhbHVlc1sxXSA9IDE7Ci0JCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UuYmFzZSwKLQkJCQkJICAgICAgY29ubmVjdG9yLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSwgMCk7Ci0JfQotCisJaW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UuYmFzZSk7CiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgJiYgSVNfTU9CSUxFKGRldikpCiAJCWludGVsX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UuYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMKaW5kZXggMDUzZWRmOS4uYmE4OTZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYwpAQCAtOTAwLDYgKzkwMCw3IEBACiAJfQogCS8qIE5WMTEgYW5kIE5WMjAgZG9uJ3QgaGF2ZSB0aGlzLCB0aGV5IHN0b3AgYXQgMHg1Mi4gKi8KIAlpZiAobnZfZ2Y0X2Rpc3BfYXJjaChkZXYpKSB7CisJCXJkX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNDIpOwogCQlyZF9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzUzKTsKIAkJcmRfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV81NCk7CiAKQEAgLTEwMDMsNiArMTAwNCw3IEBACiAJCQlub3V2ZWF1X3dhaXRfZXEoZGV2LCA2NTAwMDAwMDAsIE5WX1BSTUNJT19JTlAwX19DT0xPUiwgMHg4LCAweDApOwogCQl9CiAKKwkJd3JfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV80Mik7CiAJCXdyX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNTMpOwogCQl3cl9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzU0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKaW5kZXggMjk2MGY1OC4uNWVlMTRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJaWYgKHBjaV9kbWFfc3VwcG9ydGVkKGRldi0+cGRldiwgRE1BX0JJVF9NQVNLKDQwKSkpCiAJCQlkbWFfYml0cyA9IDQwOwogCX0gZWxzZQotCWlmIChkcm1fcGNpX2RldmljZV9pc19wY2llKGRldikgJiYKKwlpZiAoMCAmJiBkcm1fcGNpX2RldmljZV9pc19wY2llKGRldikgJiYKIAkgICAgZGV2X3ByaXYtPmNoaXBzZXQgID4gMHg0MCAmJgogCSAgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ1KSB7CiAJCWlmIChwY2lfZG1hX3N1cHBvcnRlZChkZXYtPnBkZXYsIERNQV9CSVRfTUFTSygzOSkpKQpAQCAtODY4LDcgKzg2OCw5IEBACiAJCW5vdXZlYXVfdm1fdW5tYXAoJm5vZGUtPnRtcF92bWEpOwogCQlub3V2ZWF1X3ZtX3B1dCgmbm9kZS0+dG1wX3ZtYSk7CiAJfQorCiAJbWVtLT5tbV9ub2RlID0gTlVMTDsKKwlrZnJlZShub2RlKTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCmluZGV4IGM3NzExMWUuLjgyZmFkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCQlkZXZfcHJpdi0+Z2FydF9pbmZvLnR5cGUgPSBOT1VWRUFVX0dBUlRfSFc7CiAJCWRldl9wcml2LT5nYXJ0X2luZm8uZnVuYyA9ICZudjUwX3NnZG1hX2JhY2tlbmQ7CiAJfSBlbHNlCi0JaWYgKGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgorCWlmICgwICYmIGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgogCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA+IDB4NDAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0NSkgewogCQlpZiAobnY0NF9ncmFwaF9jbGFzcyhkZXYpKSB7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmZ1bmMgPSAmbnY0NF9zZ2RtYV9iYWNrZW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IDM4ZWE2NjIuLjgwMjE4ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTM3MSw2ICszNzEsNyBAQAogCQllbmdpbmUtPnZyYW0uZmxhZ3NfdmFsaWQJPSBudjUwX3ZyYW1fZmxhZ3NfdmFsaWQ7CiAJCWJyZWFrOwogCWNhc2UgMHhDMDoKKwljYXNlIDB4RDA6CiAJCWVuZ2luZS0+aW5zdG1lbS5pbml0CQk9IG52YzBfaW5zdG1lbV9pbml0OwogCQllbmdpbmUtPmluc3RtZW0udGFrZWRvd24JPSBudmMwX2luc3RtZW1fdGFrZWRvd247CiAJCWVuZ2luZS0+aW5zdG1lbS5zdXNwZW5kCQk9IG52YzBfaW5zdG1lbV9zdXNwZW5kOwpAQCAtNTYzLDY4ICs1NjQsNjggQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF90aW1lcjsKIAotCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgewotCWNhc2UgTlZfMDQ6Ci0JCW52MDRfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfMTA6Ci0JCW52MTBfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfMjA6Ci0JY2FzZSBOVl8zMDoKLQkJbnYyMF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl80MDoKLQkJbnY0MF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl81MDoKLQkJbnY1MF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl9DMDoKLQkJbnZjMF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCWNhc2UgMHg4NDoKLQljYXNlIDB4ODY6Ci0JY2FzZSAweDkyOgotCWNhc2UgMHg5NDoKLQljYXNlIDB4OTY6Ci0JY2FzZSAweGEwOgotCQludjg0X2NyeXB0X2NyZWF0ZShkZXYpOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGRldl9wcml2LT5jYXJkX3R5cGUpIHsKLQljYXNlIE5WXzUwOgotCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JCWNhc2UgMHhhMzoKLQkJY2FzZSAweGE1OgotCQljYXNlIDB4YTg6Ci0JCWNhc2UgMHhhZjoKLQkJCW52YTNfY29weV9jcmVhdGUoZGV2KTsKKwlpZiAoIW5vdXZlYXVfbm9hY2NlbCkgeworCQlzd2l0Y2ggKGRldl9wcml2LT5jYXJkX3R5cGUpIHsKKwkJY2FzZSBOVl8wNDoKKwkJCW52MDRfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl8xMDoKKwkJCW52MTBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl8yMDoKKwkJY2FzZSBOVl8zMDoKKwkJCW52MjBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl80MDoKKwkJCW52NDBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl81MDoKKwkJCW52NTBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl9DMDoKKwkJCW52YzBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCWNhc2UgTlZfQzA6Ci0JCW52YzBfY29weV9jcmVhdGUoZGV2LCAwKTsKLQkJbnZjMF9jb3B5X2NyZWF0ZShkZXYsIDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl80MCkKLQkJbnY0MF9tcGVnX2NyZWF0ZShkZXYpOwotCWVsc2UKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCAmJgotCSAgICAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApKQotCQludjUwX21wZWdfY3JlYXRlKGRldik7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDg0OgorCQljYXNlIDB4ODY6CisJCWNhc2UgMHg5MjoKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCWNhc2UgMHhhMDoKKwkJCW52ODRfY3J5cHRfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJfQogCi0JaWYgKCFub3V2ZWF1X25vYWNjZWwpIHsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7CisJCWNhc2UgTlZfNTA6CisJCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJCQljYXNlIDB4YTM6CisJCQljYXNlIDB4YTU6CisJCQljYXNlIDB4YTg6CisJCQljYXNlIDB4YWY6CisJCQkJbnZhM19jb3B5X2NyZWF0ZShkZXYpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTlZfQzA6CisJCQludmMwX2NvcHlfY3JlYXRlKGRldiwgMCk7CisJCQludmMwX2NvcHlfY3JlYXRlKGRldiwgMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNDApCisJCQludjQwX21wZWdfY3JlYXRlKGRldik7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTAgJiYKKwkJICAgIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4OTggfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHhhMCkpCisJCQludjUwX21wZWdfY3JlYXRlKGRldik7CisKIAkJZm9yIChlID0gMDsgZSA8IE5WT0JKX0VOR0lORV9OUjsgZSsrKSB7CiAJCQlpZiAoZGV2X3ByaXYtPmVuZ1tlXSkgewogCQkJCXJldCA9IGRldl9wcml2LT5lbmdbZV0tPmluaXQoZGV2LCBlKTsKQEAgLTkyMiw2ICs5MjMsNyBAQAogCQlkZXZfcHJpdi0+Y2FyZF90eXBlID0gTlZfNTA7CiAJCWJyZWFrOwogCWNhc2UgMHhjMDoKKwljYXNlIDB4ZDA6CiAJCWRldl9wcml2LT5jYXJkX3R5cGUgPSBOVl9DMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uYwppbmRleCAwMDU5ZTZmLi41MTlhNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV92bS5jCkBAIC01OCw2ICs1OCw3IEBACiAJCQludW0gLT0gbGVuOwogCQkJcHRlICs9IGxlbjsKIAkJCWlmICh1bmxpa2VseShlbmQgPj0gbWF4KSkgeworCQkJCXBoeXMgKz0gbGVuIDw8IChiaXRzICsgMTIpOwogCQkJCXBkZSsrOwogCQkJCXB0ZSA9IDA7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCmluZGV4IDNjNzhiYzguLmYxYTNhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCkBAIC0zNzYsNyArMzc2LDEwIEBACiAJICovCiAKIAkvKiBmcmFtZWJ1ZmZlciBjYW4gYmUgbGFyZ2VyIHRoYW4gY3J0YyBzY2Fub3V0IGFyZWEuICovCi0JcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX1JQQzBfSU5ERVhdID0gWExBVEUoZmItPnBpdGNoIC8gOCwgOCwgTlZfQ0lPX0NSRV9SUEMwX09GRlNFVF8xMF84KTsKKwlyZWdwLT5DUlRDW05WX0NJT19DUkVfUlBDMF9JTkRFWF0gPQorCQlYTEFURShmYi0+cGl0Y2ggLyA4LCA4LCBOVl9DSU9fQ1JFX1JQQzBfT0ZGU0VUXzEwXzgpOworCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV80Ml0gPQorCQlYTEFURShmYi0+cGl0Y2ggLyA4LCAxMSwgTlZfQ0lPX0NSRV80Ml9PRkZTRVRfMTEpOwogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV9SUEMxX0lOREVYXSA9IG1vZGUtPmNydGNfaGRpc3BsYXkgPCAxMjgwID8KIAkJCQkJICAgIE1BU0soTlZfQ0lPX0NSRV9SUEMxX0xBUkdFKSA6IDB4MDA7CiAJcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX0xTUl9JTkRFWF0gPSBYTEFURShob3JpekJsYW5rRW5kLCA2LCBOVl9DSU9fQ1JFX0xTUl9IQkVfNikgfApAQCAtODI0LDggKzgyNywxMSBAQAogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSX09GRlNFVF9JTkRFWF0gPSBkcm1fZmItPnBpdGNoID4+IDM7CiAJcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX1JQQzBfSU5ERVhdID0KIAkJWExBVEUoZHJtX2ZiLT5waXRjaCA+PiAzLCA4LCBOVl9DSU9fQ1JFX1JQQzBfT0ZGU0VUXzEwXzgpOworCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV80Ml0gPQorCQlYTEFURShkcm1fZmItPnBpdGNoIC8gOCwgMTEsIE5WX0NJT19DUkVfNDJfT0ZGU0VUXzExKTsKIAljcnRjX3dyX2Npb19zdGF0ZShjcnRjLCByZWdwLCBOVl9DSU9fQ1JFX1JQQzBfSU5ERVgpOwogCWNydGNfd3JfY2lvX3N0YXRlKGNydGMsIHJlZ3AsIE5WX0NJT19DUl9PRkZTRVRfSU5ERVgpOworCWNydGNfd3JfY2lvX3N0YXRlKGNydGMsIHJlZ3AsIE5WX0NJT19DUkVfNDIpOwogCiAJLyogVXBkYXRlIHRoZSBmcmFtZWJ1ZmZlciBsb2NhdGlvbi4gKi8KIAlyZWdwLT5mYl9zdGFydCA9IG52X2NydGMtPmZiLm9mZnNldCAmIH4zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252cmVnLmgKaW5kZXggZmUwZjI1My4uYmJmYjFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udnJlZy5oCkBAIC0yNzcsNiArMjc3LDggQEAKICMJCWRlZmluZSBOVl9DSU9fQ1JFX0VCUl9WREVfMTEJCTI6MgogIwkJZGVmaW5lIE5WX0NJT19DUkVfRUJSX1ZSU18xMQkJNDo0CiAjCQlkZWZpbmUgTlZfQ0lPX0NSRV9FQlJfVkJTXzExCQk2OjYKKyMJZGVmaW5lIE5WX0NJT19DUkVfNDIJCQkweDQyCisjCQlkZWZpbmUgTlZfQ0lPX0NSRV80Ml9PRkZTRVRfMTEJCTY6NgogIwlkZWZpbmUgTlZfQ0lPX0NSRV80MwkJCTB4NDMKICMJZGVmaW5lIE5WX0NJT19DUkVfNDQJCQkweDQ0CS8qIGhlYWQgY29udHJvbCAqLwogIwlkZWZpbmUgTlZfQ0lPX0NSRV9DU0IJCQkweDQ1CS8qIGNvbG91ciBzYXR1cmF0aW9uIGJvb3N0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKaW5kZXggOTc0NmZlZS4uZWE5MmJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZwpAQCAtMjgsMTEgKzI4LDQgQEAKIAkgIFRoZSBrZXJuZWwgd2lsbCBhbHNvIHBlcmZvcm0gc2VjdXJpdHkgY2hlY2sgb24gY29tbWFuZCBzdHJlYW0KIAkgIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLCB3ZSB3YW50IHRvIGNhdGNoIGFuZCBmb3JiaWQgYW55IGlsbGVnYWwgdXNlCiAJICBvZiB0aGUgR1BVIHN1Y2ggYXMgRE1BIGludG8gcmFuZG9tIHN5c3RlbSBtZW1vcnkgb3IgaW50byBtZW1vcnkKLQkgIG5vdCBvd25lZCBieSB0aGUgcHJvY2VzcyBzdXBwbHlpbmcgdGhlIGNvbW1hbmQgc3RyZWFtLiBUaGlzIHBhcnQKLQkgIG9mIHRoZSBjb2RlIGlzIHN0aWxsIGluY29tcGxldGUgYW5kIHRoaXMgd2h5IHdlIHByb3Bvc2UgdGhhdCBwYXRjaAotCSAgYXMgYSBzdGFnaW5nIGRyaXZlciBhZGRpdGlvbiwgZnV0dXJlIHNlY3VyaXR5IG1pZ2h0IGZvcmJpZCBjdXJyZW50Ci0JICBleHBlcmltZW50YWwgdXNlcnNwYWNlIHRvIHJ1bi4KLQotCSAgVGhpcyBjb2RlIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBoYXJkd2FyZSA6IFIxWFgsUjJYWCxSM1hYLFI0WFgsUjVYWAotCSAgKHJhZGVvbiB1cCB0byBYMTk1MCkuIFdvcmtzIGlzIHVuZGVyd2F5IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgUjZYWCwKLQkgIFI3WFggYW5kIG5ld2VyIGhhcmR3YXJlIChyYWRlb24gZnJvbSBIRDJYWFggdG8gSEQ0WFhYKS4KKwkgIG5vdCBvd25lZCBieSB0aGUgcHJvY2VzcyBzdXBwbHlpbmcgdGhlIGNvbW1hbmQgc3RyZWFtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwppbmRleCBlYzg0ODc4Li44NGE2OWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAKIAl1aW50NjRfdCBmYl9sb2NhdGlvbjsKIAl1aW50MzJfdCBmYl9mb3JtYXQsIGZiX3BpdGNoX3BpeGVscywgdGlsaW5nX2ZsYWdzOwogCXUzMiBmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOX05PTkUpOwotCXUzMiB0bXA7CisJdTMyIHRtcCwgdmlld3BvcnRfdywgdmlld3BvcnRfaDsKIAlpbnQgcjsKIAogCS8qIG5vIGZiIGJvdW5kICovCkBAIC0xMTcxLDggKzExNzEsMTAgQEAKIAl5ICY9IH4xOwogCVdSRUczMihFVkVSR1JFRU5fVklFV1BPUlRfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh4IDw8IDE2KSB8IHkpOworCXZpZXdwb3J0X3cgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXZpZXdwb3J0X2ggPSAoY3J0Yy0+bW9kZS52ZGlzcGxheSArIDEpICYgfjE7CiAJV1JFRzMyKEVWRVJHUkVFTl9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKwkgICAgICAgKHZpZXdwb3J0X3cgPDwgMTYpIHwgdmlld3BvcnRfaCk7CiAKIAkvKiBwYWdlZmxpcCBzZXR1cCAqLwogCS8qIG1ha2Ugc3VyZSBmbGlwIGlzIGF0IHZiIHJhdGhlciB0aGFuIGhiICovCkBAIC0xMjEzLDcgKzEyMTUsNyBAQAogCXVpbnQ2NF90IGZiX2xvY2F0aW9uOwogCXVpbnQzMl90IGZiX2Zvcm1hdCwgZmJfcGl0Y2hfcGl4ZWxzLCB0aWxpbmdfZmxhZ3M7CiAJdTMyIGZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl9OT05FOwotCXUzMiB0bXA7CisJdTMyIHRtcCwgdmlld3BvcnRfdywgdmlld3BvcnRfaDsKIAlpbnQgcjsKIAogCS8qIG5vIGZiIGJvdW5kICovCkBAIC0xMzM4LDggKzEzNDAsMTAgQEAKIAl5ICY9IH4xOwogCVdSRUczMihBVklWT19EMU1PREVfVklFV1BPUlRfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh4IDw8IDE2KSB8IHkpOworCXZpZXdwb3J0X3cgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXZpZXdwb3J0X2ggPSAoY3J0Yy0+bW9kZS52ZGlzcGxheSArIDEpICYgfjE7CiAJV1JFRzMyKEFWSVZPX0QxTU9ERV9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKwkgICAgICAgKHZpZXdwb3J0X3cgPDwgMTYpIHwgdmlld3BvcnRfaCk7CiAKIAkvKiBwYWdlZmxpcCBzZXR1cCAqLwogCS8qIG1ha2Ugc3VyZSBmbGlwIGlzIGF0IHZiIHJhdGhlciB0aGFuIGhiICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCmluZGV4IGUxNDhhYjAuLjdiNGVlYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCkBAIC0zOSwxNyArMzksMzM1IEBACiAKIGNvbnN0IHUzMiBjYXltYW5fZGVmYXVsdF9zdGF0ZVtdID0KIHsKLQkvKiBYWFggZmlsbCBpbiBhZGRpdGlvbmFsIGJsaXQgc3RhdGUgKi8KKwkweGMwMDY2OTAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDA2MCwgLyogREJfUkVOREVSX0NPTlRST0wgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9DT1VOVF9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogREJfREVQVEhfVklFVyAqLworCTB4MDAwMDAwMmEsIC8qIERCX1JFTkRFUl9PVkVSUklERSAqLworCTB4MDAwMDAwMDAsIC8qIERCX1JFTkRFUl9PVkVSUklERTIgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9IVElMRV9EQVRBX0JBU0UgKi8KIAogCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDMxNiwKLQkweDAwMDAwMDBlLCAvKiBWR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwgKi8KLQkweDAwMDAwMDEwLCAvKiAgKi8KKwkweDAwMDAwMDBhLAorCTB4MDAwMDAwMDAsIC8qIERCX1NURU5DSUxfQ0xFQVIgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9DTEVBUiAqLworCisJMHhjMDAzNjkwMCwKKwkweDAwMDAwMDBmLAorCTB4MDAwMDAwMDAsIC8qIERCX0RFUFRIX0lORk8gKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9aX0lORk8gKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9TVEVOQ0lMX0lORk8gKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4MCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19XSU5ET1dfT0ZGU0VUICovCisKKwkweGMwMGQ2OTAwLAorCTB4MDAwMDAwODMsCisJMHgwMDAwZmZmZiwgLyogUEFfU0NfQ0xJUFJFQ1RfUlVMRSAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0NMSVBSRUNUXzBfVEwgKi8KKwkweDIwMDAyMDAwLCAvKiBQQV9TQ19DTElQUkVDVF8wX0JSICovCisJMHgwMDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4MDAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDAwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHhhYWFhYWFhYSwgLyogUEFfU0NfRURHRVJVTEUgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9IQVJEV0FSRV9TQ1JFRU5fT0ZGU0VUICovCisJMHgwMDAwMDAwZiwgLyogQ0JfVEFSR0VUX01BU0sgKi8KKwkweDAwMDAwMDBmLCAvKiBDQl9TSEFERVJfTUFTSyAqLworCisJMHhjMDIyNjkwMCwKKwkweDAwMDAwMDk0LAorCTB4ODAwMDAwMDAsIC8qIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMF9UTCAqLworCTB4MjAwMDIwMDAsIC8qIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMF9CUiAqLworCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4MDAwMDAwMDAsIC8qIFBBX1NDX1ZQT1JUX1pNSU5fMCAqLworCTB4M2Y4MDAwMDAsIC8qIFBBX1NDX1ZQT1JUX1pNQVhfMCAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGQ0LAorCTB4MDAwMDAwMDAsIC8qIFNYX01JU0MgKi8KIAogCTB4YzAwMjY5MDAsCiAJMHgwMDAwMDBkOSwKIAkweDAwMDAwMDAwLCAvKiBDUF9SSU5HSUQgKi8KIAkweDAwMDAwMDAwLCAvKiBDUF9WTUlEICovCisKKwkweGMwMDk2OTAwLAorCTB4MDAwMDAxMDAsCisJMHgwMGZmZmZmZiwgLyogVkdUX01BWF9WVFhfSU5EWCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9NSU5fVlRYX0lORFggKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSU5EWF9PRkZTRVQgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfTVVMVElfUFJJTV9JQl9SRVNFVF9JTkRYICovCisJMHgwMDAwMDAwMCwgLyogU1hfQUxQSEFfVEVTVF9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfUkVEICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfR1JFRU4gKi8KKwkweDAwMDAwMDAwLCAvKiBDQl9CTEVORF9CTFVFICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfQUxQSEEgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDE4NywKKwkweDAwMDAwMTAwLCAvKiBTUElfVlNfT1VUX0lEXzAgKi8KKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDE5MSwKKwkweDAwMDAwMTAwLCAvKiBTUElfUFNfSU5QVVRfQ05UTF8wICovCisJMHgwMDAwMDEwMSwgLyogU1BJX1BTX0lOUFVUX0NOVExfMSAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWIxLAorCTB4MDAwMDAwMDAsIC8qIFNQSV9WU19PVVRfQ09ORklHICovCisKKwkweGMwMTA2OTAwLAorCTB4MDAwMDAxYjMsCisJMHgyMDAwMDAwMSwgLyogU1BJX1BTX0lOX0NPTlRST0xfMCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9QU19JTl9DT05UUk9MXzEgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfSU5URVJQX0NPTlRST0xfMCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9JTlBVVF9aICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0ZPR19DTlRMICovCisJMHgwMDEwMDAwMCwgLyogU1BJX0JBUllDX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfUFNfSU5fQ09OVFJPTF8yICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0NPTVBVVEVfSU5QVVRfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX05VTV9USFJFQURfWCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX05VTV9USFJFQURfWSAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX05VTV9USFJFQURfWiAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9HUFJfTUdNVCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9MRFNfTUdNVCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9TVEFDS19NR01UICovCisJMHgwMDAwMDAwMCwgLyogU1BJX1dBVkVfTUdNVF8xICovCisJMHgwMDAwMDAwMCwgLyogU1BJX1dBVkVfTUdNVF8yICovCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxZTAsCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkQwX0NPTlRST0wgKi8KKworCTB4YzAwZTY5MDAsCisJMHgwMDAwMDIwMCwKKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogREJfRVFBQSAqLworCTB4MDBjYzAwMTAsIC8qIENCX0NPTE9SX0NPTlRST0wgKi8KKwkweDAwMDAwMjEwLCAvKiBEQl9TSEFERVJfQ09OVFJPTCAqLworCTB4MDAwMTAwMDAsIC8qIFBBX0NMX0NMSVBfQ05UTCAqLworCTB4MDAwMDAwMDQsIC8qIFBBX1NVX1NDX01PREVfQ05UTCAqLworCTB4MDAwMDAxMDAsIC8qIFBBX0NMX1ZURV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfQ0xfVlNfT1VUX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9DTF9OQU5JTkZfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX0xJTkVfU1RJUFBMRV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfTElORV9TVElQUExFX1NDQUxFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUFJJTV9GSUxURVJfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qICAqLworCTB4MDAwMDAwMDAsIC8qICAqLworCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMjI5LAorCTB4MDAwMDAwMDAsIC8qIFNRX1BHTV9TVEFSVF9GUyAqLworCTB4MDAwMDAwMDAsCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyM2IsCisJMHgwMDAwMDAwMCwgLyogU1FfTERTX0FMTE9DX1BTICovCisKKwkweGMwMDY2OTAwLAorCTB4MDAwMDAyNDAsCisJMHgwMDAwMDAwMCwgLyogU1FfRVNHU19SSU5HX0lURU1TSVpFICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCisJMHhjMDA0NjkwMCwKKwkweDAwMDAwMjQ3LAorCTB4MDAwMDAwMDAsIC8qIFNRX0dTX1ZFUlRfSVRFTVNJWkUgKi8KKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKworCTB4YzAxMTY5MDAsCisJMHgwMDAwMDI4MCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0lOVF9TSVpFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9JTlRfTUlOTUFYICovCisJMHgwMDAwMDAwOCwgLyogUEFfU1VfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9TVElQUExFICovCisJMHgwMDAwMDAwMCwgLyogVkdUX09VVFBVVF9QQVRIX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSE9TX0NOVEwgKi8KKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9HU19NT0RFICovCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyOTIsCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTU9ERV9DTlRMXzAgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19NT0RFX0NOVExfMSAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmExLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9QUklNSVRJVkVJRF9FTiAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmE1LAorCTB4MDAwMDAwMDAsIC8qIFZHVF9NVUxUSV9QUklNX0lCX1JFU0VUX0VOICovCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyYTgsCisJMHgwMDAwMDAwMCwgLyogVkdUX0lOU1RBTkNFX1NURVBfUkFURV8wICovCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDJhZCwKKwkweDAwMDAwMDAwLCAvKiBWR1RfUkVVU0VfT0ZGICovCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJkNSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfU0hBREVSX1NUQUdFU19FTiAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmRjLAorCTB4MDAwMGFhMDAsIC8qIERCX0FMUEhBX1RPX01BU0sgKi8KKworCTB4YzAwNjY5MDAsCisJMHgwMDAwMDJkZSwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0xZX09GRlNFVF9EQl9GTVRfQ05UTCAqLworCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDJlNSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfU1RSTU9VVF9DT05GSUcgKi8KKwkweDAwMDAwMDAwLAorCisJMHhjMDFiNjkwMCwKKwkweDAwMDAwMmY1LAorCTB4NzY1NDMyMTAsIC8qIFBBX1NDX0NFTlRST0lEX1BSSU9SSVRZXzAgKi8KKwkweGZlZGNiYTk4LCAvKiBQQV9TQ19DRU5UUk9JRF9QUklPUklUWV8xICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfQUFfQ09ORklHICovCisJMHgwMDAwMDAwNSwgLyogUEFfU1VfVlRYX0NOVEwgKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9WRVJUX0NMSVBfQURKICovCisJMHgzZjgwMDAwMCwgLyogUEFfQ0xfR0JfVkVSVF9ESVNDX0FESiAqLworCTB4M2Y4MDAwMDAsIC8qIFBBX0NMX0dCX0hPUlpfQ0xJUF9BREogKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9IT1JaX0RJU0NfQURKICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfQUFfU0FNUExFX0xPQ1NfUElYRUxfWDBZMF8wICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhmZmZmZmZmZiwgLyogUEFfU0NfQUFfTUFTS19YMFkwX1gxWTAgKi8KKwkweGZmZmZmZmZmLAorCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMzE2LAorCTB4MDAwMDAwMGUsIC8qIFZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTCAqLworCTB4MDAwMDAwMTAsIC8qICAqLwogfTsKIAorY29uc3QgdTMyIGNheW1hbl92c1tdID0KK3sKKwkweDAwMDAwMDA0LAorCTB4ODA0MDA0MDAsCisJMHgwMDAwYTAzYywKKwkweDk1MDAwNjg4LAorCTB4MDAwMDQwMDAsCisJMHgxNTAwMDY4OCwKKwkweDAwMDAwMDAwLAorCTB4ODgwMDAwMDAsCisJMHgwNDAwMDAwMCwKKwkweDY3OTYxMDAxLAorI2lmZGVmIF9fQklHX0VORElBTgorCTB4MDAwMjAwMDAsCisjZWxzZQorCTB4MDAwMDAwMDAsCisjZW5kaWYKKwkweDAwMDAwMDAwLAorCTB4MDQwMDAwMDAsCisJMHg2Nzk2MTAwMCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMDIwMDA4LAorI2Vsc2UKKwkweDAwMDAwMDA4LAorI2VuZGlmCisJMHgwMDAwMDAwMCwKK307CisKK2NvbnN0IHUzMiBjYXltYW5fcHNbXSA9Cit7CisJMHgwMDAwMDAwNCwKKwkweGEwMGMwMDAwLAorCTB4MDAwMDAwMDgsCisJMHg4MDQwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4OTUwMDA2ODgsCisJMHgwMDAwMDAwMCwKKwkweDg4MDAwMDAwLAorCTB4MDAzODA0MDAsCisJMHgwMDE0NmIxMCwKKwkweDAwMzgwMDAwLAorCTB4MjAxNDZiMTAsCisJMHgwMDM4MDQwMCwKKwkweDQwMTQ2YjAwLAorCTB4ODAzODAwMDAsCisJMHg2MDE0NmIwMCwKKwkweDAwMDAwMDEwLAorCTB4MDAwZDEwMDAsCisJMHhiMDgwMDAwMCwKKwkweDAwMDAwMDAwLAorfTsKKworY29uc3QgdTMyIGNheW1hbl9wc19zaXplID0gQVJSQVlfU0laRShjYXltYW5fcHMpOworY29uc3QgdTMyIGNheW1hbl92c19zaXplID0gQVJSQVlfU0laRShjYXltYW5fdnMpOwogY29uc3QgdTMyIGNheW1hbl9kZWZhdWx0X3NpemUgPSBBUlJBWV9TSVpFKGNheW1hbl9kZWZhdWx0X3N0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jYXltYW5fYmxpdF9zaGFkZXJzLmgKaW5kZXggMzNiNzVlNWQuLmY1ZDBlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oCkBAIC0yNSw4ICsyNSwxMSBAQAogI2lmbmRlZiBDQVlNQU5fQkxJVF9TSEFERVJTX0gKICNkZWZpbmUgQ0FZTUFOX0JMSVRfU0hBREVSU19ICiAKK2V4dGVybiBjb25zdCB1MzIgY2F5bWFuX3BzW107CitleHRlcm4gY29uc3QgdTMyIGNheW1hbl92c1tdOwogZXh0ZXJuIGNvbnN0IHUzMiBjYXltYW5fZGVmYXVsdF9zdGF0ZVtdOwogCitleHRlcm4gY29uc3QgdTMyIGNheW1hbl9wc19zaXplLCBjYXltYW5fdnNfc2l6ZTsKIGV4dGVybiBjb25zdCB1MzIgY2F5bWFuX2RlZmF1bHRfc2l6ZTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCA3YzM3NjM4Li45OGVhNTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTg4LDIxICs4OCwzOSBAQAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwogaW50IGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfTVVMVF9USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KLQkJQVNJQ19UX1NISUZUOwotCXUzMiBhY3R1YWxfdGVtcCA9IDA7CisJdTMyIHRlbXAsIHRvZmZzZXQsIGFjdHVhbF90ZW1wID0gMDsKIAotCWlmICh0ZW1wICYgMHg0MDApCi0JCWFjdHVhbF90ZW1wID0gLTI1NjsKLQllbHNlIGlmICh0ZW1wICYgMHgyMDApCi0JCWFjdHVhbF90ZW1wID0gMjU1OwotCWVsc2UgaWYgKHRlbXAgJiAweDEwMCkgewotCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweDFmZjsKLQkJYWN0dWFsX3RlbXAgfD0gfjB4MWZmOwotCX0gZWxzZQotCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweGZmOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9KVU5JUEVSKSB7CisJCXRvZmZzZXQgPSAoUlJFRzMyKENHX1RIRVJNQUxfQ1RSTCkgJiBUT0ZGU0VUX01BU0spID4+CisJCQlUT0ZGU0VUX1NISUZUOworCQl0ZW1wID0gKFJSRUczMihDR19UUzBfU1RBVFVTKSAmIFRTMF9BRENfRE9VVF9NQVNLKSA+PgorCQkJVFMwX0FEQ19ET1VUX1NISUZUOwogCi0JcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKKwkJaWYgKHRvZmZzZXQgJiAweDEwMCkKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAvIDIgLSAoMHgyMDAgLSB0b2Zmc2V0KTsKKwkJZWxzZQorCQkJYWN0dWFsX3RlbXAgPSB0ZW1wIC8gMiArIHRvZmZzZXQ7CisKKwkJYWN0dWFsX3RlbXAgPSBhY3R1YWxfdGVtcCAqIDEwMDA7CisKKwl9IGVsc2UgeworCQl0ZW1wID0gKFJSRUczMihDR19NVUxUX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgorCQkJQVNJQ19UX1NISUZUOworCisJCWlmICh0ZW1wICYgMHg0MDApCisJCQlhY3R1YWxfdGVtcCA9IC0yNTY7CisJCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKKwkJCWFjdHVhbF90ZW1wID0gMjU1OworCQllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4MWZmOworCQkJYWN0dWFsX3RlbXAgfD0gfjB4MWZmOworCQl9IGVsc2UKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4ZmY7CisKKwkJYWN0dWFsX3RlbXAgPSAoYWN0dWFsX3RlbXAgKiAxMDAwKSAvIDI7CisJfQorCisJcmV0dXJuIGFjdHVhbF90ZW1wOwogfQogCiBpbnQgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTE0MTUsNiArMTQzMyw4IEBACiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9SRURXT09EOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfVFVSS1M6CiAJY2FzZSBDSElQX0NBSUNPUzoKIAkJZm9yY2Vfbm9fc3dpenpsZSA9IGZhbHNlOwpAQCAtMTU0NCw2ICsxNTY0LDggQEAKIAljYXNlIENISVBfUkVEV09PRDoKIAljYXNlIENISVBfQ0VEQVI6CiAJY2FzZSBDSElQX1BBTE06CisJY2FzZSBDSElQX1NVTU86CisJY2FzZSBDSElQX1NVTU8yOgogCWNhc2UgQ0hJUF9UVVJLUzoKIAljYXNlIENISVBfQ0FJQ09TOgogCWRlZmF1bHQ6CkBAIC0xNjg5LDYgKzE3MTEsNTQgQEAKIAkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOwogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSA9IDB4MTMwOwogCQlicmVhazsKKwljYXNlIENISVBfU1VNTzoKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzID0gMTsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfcGlwZXMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aWxlX3BpcGVzID0gMjsKKwkJaWYgKHJkZXYtPnBkZXYtPmRldmljZSA9PSAweDk2NDgpCisJCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zaW1kcyA9IDM7CisJCWVsc2UgaWYgKChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NjQ3KSB8fAorCQkJIChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NjRhKSkKKwkJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gNDsKKwkJZWxzZQorCQkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfc2ltZHMgPSA1OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9iYWNrZW5kcyA9IDIgKiByZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXM7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2dwcnMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RocmVhZHMgPSAyNDg7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2dzX3RocmVhZHMgPSAzMjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9udW1fb2Zfc2V0cyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zaXplID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSA2NDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTkyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9od19jb250ZXh0cyA9IDg7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3FfbnVtX2NmX2luc3RzID0gMjsKKworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX3ByaW1fZmlmb19zaXplID0gMHg0MDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSA9IDB4MTMwOworCQlicmVhazsKKwljYXNlIENISVBfU1VNTzI6CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGlsZV9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gMjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfYmFja2VuZHMgPSAxICogcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aHJlYWRzID0gMjQ4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9nc190aHJlYWRzID0gMzI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3N0YWNrX2VudHJpZXMgPSA1MTI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gNjQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4NDA7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKKwkJYnJlYWs7CiAJY2FzZSBDSElQX0JBUlRTOgogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXMgPSAyOwogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9waXBlcyA9IDQ7CkBAIC0yMDM5LDYgKzIxMDksOCBAQAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfQ0FJQ09TOgogCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KIAkJc3FfY29uZmlnICY9IH5WQ19FTkFCTEU7CkBAIC0yMDYwLDYgKzIxMzIsOCBAQAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAkJcHNfdGhyZWFkX2NvdW50ID0gOTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMDk5LDYgKzIxNzMsOCBAQAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfQ0FJQ09TOgogCQl2Z3RfY2FjaGVfaW52YWxpZGF0aW9uID0gQ0FDSEVfSU5WQUxJREFUSU9OKFRDX09OTFkpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCmluZGV4IGJhMDZhNjkuLjU3ZjNiYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiZXZlcmdyZWVuZC5oIgogI2luY2x1ZGUgImV2ZXJncmVlbl9ibGl0X3NoYWRlcnMuaCIKKyNpbmNsdWRlICJjYXltYW5fYmxpdF9zaGFkZXJzLmgiCiAKICNkZWZpbmUgRElfUFRfUkVDVExJU1QgICAgICAgIDB4MTEKICNkZWZpbmUgRElfSU5ERVhfU0laRV8xNl9CSVQgIDB4MApAQCAtMTUyLDYgKzE1Myw4IEBACiAKIAlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX0NFREFSKSB8fAogCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUEFMTSkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1NVTU8pIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9TVU1PMikgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX0NBSUNPUykpCiAJCWNwX3NldF9zdXJmYWNlX3N5bmMocmRldiwKIAkJCQkgICAgUEFDS0VUM19UQ19BQ1RJT05fRU5BLCA0OCwgZ3B1X2FkZHIpOwpAQCAtMTk5LDYgKzIwMiwxNiBAQAogc2V0X3NjaXNzb3JzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgeDEsIGludCB5MSwKIAkgICAgIGludCB4MiwgaW50IHkyKQogeworCS8qIHdvcmthcm91bmQgc29tZSBodyBidWdzICovCisJaWYgKHgyID09IDApCisJCXgxID0gMTsKKwlpZiAoeTIgPT0gMCkKKwkJeTEgPSAxOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQVlNQU4pIHsKKwkJaWYgKCh4MiA9PSAxKSAmJiAoeTIgPT0gMSkpCisJCQl4MiA9IDI7CisJfQorCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMikpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChQQV9TQ19TQ1JFRU5fU0NJU1NPUl9UTCAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX1NUQVJUKSA+PiAyKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoeDEgPDwgMCkgfCAoeTEgPDwgMTYpKTsKQEAgLTI1NSwyMzggKzI2OCwyODQgQEAKIAl1NjQgZ3B1X2FkZHI7CiAJaW50IGR3b3JkczsKIAotCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7Ci0JY2FzZSBDSElQX0NFREFSOgotCWRlZmF1bHQ6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDk2OwotCQludW1fdnNfdGhyZWFkcyA9IDE2OwotCQludW1fZ3NfdGhyZWFkcyA9IDE2OwotCQludW1fZXNfdGhyZWFkcyA9IDE2OwotCQludW1faHNfdGhyZWFkcyA9IDE2OwotCQludW1fbHNfdGhyZWFkcyA9IDE2OwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQlicmVhazsKLQljYXNlIENISVBfUkVEV09PRDoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDIwOwotCQludW1fZ3NfdGhyZWFkcyA9IDIwOwotCQludW1fZXNfdGhyZWFkcyA9IDIwOwotCQludW1faHNfdGhyZWFkcyA9IDIwOwotCQludW1fbHNfdGhyZWFkcyA9IDIwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQlicmVhazsKLQljYXNlIENISVBfSlVOSVBFUjoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDIwOwotCQludW1fZ3NfdGhyZWFkcyA9IDIwOwotCQludW1fZXNfdGhyZWFkcyA9IDIwOwotCQludW1faHNfdGhyZWFkcyA9IDIwOwotCQludW1fbHNfdGhyZWFkcyA9IDIwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQlicmVhazsKLQljYXNlIENISVBfQ1lQUkVTUzoKLQljYXNlIENISVBfSEVNTE9DSzoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDIwOwotCQludW1fZ3NfdGhyZWFkcyA9IDIwOwotCQludW1fZXNfdGhyZWFkcyA9IDIwOwotCQludW1faHNfdGhyZWFkcyA9IDIwOwotCQludW1fbHNfdGhyZWFkcyA9IDIwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQlicmVhazsKLQljYXNlIENISVBfUEFMTToKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gOTY7Ci0JCW51bV92c190aHJlYWRzID0gMTY7Ci0JCW51bV9nc190aHJlYWRzID0gMTY7Ci0JCW51bV9lc190aHJlYWRzID0gMTY7Ci0JCW51bV9oc190aHJlYWRzID0gMTY7Ci0JCW51bV9sc190aHJlYWRzID0gMTY7Ci0JCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCWJyZWFrOwotCWNhc2UgQ0hJUF9CQVJUUzoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDIwOwotCQludW1fZ3NfdGhyZWFkcyA9IDIwOwotCQludW1fZXNfdGhyZWFkcyA9IDIwOwotCQludW1faHNfdGhyZWFkcyA9IDIwOwotCQludW1fbHNfdGhyZWFkcyA9IDIwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQlicmVhazsKLQljYXNlIENISVBfVFVSS1M6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX0NBSUNPUzoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDEwOwotCQludW1fZ3NfdGhyZWFkcyA9IDEwOwotCQludW1fZXNfdGhyZWFkcyA9IDEwOwotCQludW1faHNfdGhyZWFkcyA9IDEwOwotCQludW1fbHNfdGhyZWFkcyA9IDEwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX0NFREFSKSB8fAotCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUEFMTSkgfHwKLQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX0NBSUNPUykpCi0JCXNxX2NvbmZpZyA9IDA7Ci0JZWxzZQotCQlzcV9jb25maWcgPSBWQ19FTkFCTEU7Ci0KLQlzcV9jb25maWcgfD0gKEVYUE9SVF9TUkNfQyB8Ci0JCSAgICAgIENTX1BSSU8oMCkgfAotCQkgICAgICBMU19QUklPKDApIHwKLQkJICAgICAgSFNfUFJJTygwKSB8Ci0JCSAgICAgIFBTX1BSSU8oMCkgfAotCQkgICAgICBWU19QUklPKDEpIHwKLQkJICAgICAgR1NfUFJJTygyKSB8Ci0JCSAgICAgIEVTX1BSSU8oMykpOwotCi0Jc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfR1BSUyhudW1fcHNfZ3BycykgfAotCQkJCSAgTlVNX1ZTX0dQUlMobnVtX3ZzX2dwcnMpIHwKLQkJCQkgIE5VTV9DTEFVU0VfVEVNUF9HUFJTKG51bV90ZW1wX2dwcnMpKTsKLQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19HUFJTKG51bV9nc19ncHJzKSB8Ci0JCQkJICBOVU1fRVNfR1BSUyhudW1fZXNfZ3BycykpOwotCXNxX2dwcl9yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX0dQUlMobnVtX2hzX2dwcnMpIHwKLQkJCQkgIE5VTV9MU19HUFJTKG51bV9sc19ncHJzKSk7Ci0Jc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMobnVtX3BzX3RocmVhZHMpIHwKLQkJCQkgICBOVU1fVlNfVEhSRUFEUyhudW1fdnNfdGhyZWFkcykgfAotCQkJCSAgIE5VTV9HU19USFJFQURTKG51bV9nc190aHJlYWRzKSB8Ci0JCQkJICAgTlVNX0VTX1RIUkVBRFMobnVtX2VzX3RocmVhZHMpKTsKLQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9IU19USFJFQURTKG51bV9oc190aHJlYWRzKSB8Ci0JCQkJICAgICBOVU1fTFNfVEhSRUFEUyhudW1fbHNfdGhyZWFkcykpOwotCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfU1RBQ0tfRU5UUklFUyhudW1fcHNfc3RhY2tfZW50cmllcykgfAotCQkJCSAgICBOVU1fVlNfU1RBQ0tfRU5UUklFUyhudW1fdnNfc3RhY2tfZW50cmllcykpOwotCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfU1RBQ0tfRU5UUklFUyhudW1fZ3Nfc3RhY2tfZW50cmllcykgfAotCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUyhudW1fZXNfc3RhY2tfZW50cmllcykpOwotCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMyA9IChOVU1fSFNfU1RBQ0tfRU5UUklFUyhudW1faHNfc3RhY2tfZW50cmllcykgfAotCQkJCSAgICBOVU1fTFNfU1RBQ0tfRU5UUklFUyhudW1fbHNfc3RhY2tfZW50cmllcykpOwotCiAJLyogc2V0IGNsZWFyIGNvbnRleHQgc3RhdGUgKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfQ0xFQVJfU1RBVEUsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKIAotCS8qIGRpc2FibGUgZHluIGdwcnMgKi8KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfRFlOX0dQUl9DTlRMX1BTX0ZMVVNIX1JFUSAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpID4+IDIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikgeworCQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCQljYXNlIENISVBfQ0VEQVI6CisJCWRlZmF1bHQ6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2dzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9lc190aHJlYWRzID0gMTY7CisJCQludW1faHNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2xzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQljYXNlIENISVBfUkVEV09PRDoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCQludW1fdnNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9lc190aHJlYWRzID0gMjA7CisJCQludW1faHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQljYXNlIENISVBfSlVOSVBFUjoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCQludW1fdnNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9lc190aHJlYWRzID0gMjA7CisJCQludW1faHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCWJyZWFrOworCQljYXNlIENISVBfQ1lQUkVTUzoKKwkJY2FzZSBDSElQX0hFTUxPQ0s6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1BBTE06CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2dzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9lc190aHJlYWRzID0gMTY7CisJCQludW1faHNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2xzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQljYXNlIENISVBfU1VNTzoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSA5NjsKKwkJCW51bV92c190aHJlYWRzID0gMjU7CisJCQludW1fZ3NfdGhyZWFkcyA9IDI1OworCQkJbnVtX2VzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9oc190aHJlYWRzID0gMjU7CisJCQludW1fbHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9TVU1PMjoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSA5NjsKKwkJCW51bV92c190aHJlYWRzID0gMjU7CisJCQludW1fZ3NfdGhyZWFkcyA9IDI1OworCQkJbnVtX2VzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9oc190aHJlYWRzID0gMjU7CisJCQludW1fbHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9CQVJUUzoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCQludW1fdnNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9lc190aHJlYWRzID0gMjA7CisJCQludW1faHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCWJyZWFrOworCQljYXNlIENISVBfVFVSS1M6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX0NBSUNPUzoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCQludW1fdnNfdGhyZWFkcyA9IDEwOworCQkJbnVtX2dzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9lc190aHJlYWRzID0gMTA7CisJCQludW1faHNfdGhyZWFkcyA9IDEwOworCQkJbnVtX2xzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQl9CiAKLQkvKiBTUSBjb25maWcgKi8KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDExKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0NPTkZJRyAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpID4+IDIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2NvbmZpZyk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMik7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMyk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210XzIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzMpOworCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX0NFREFSKSB8fAorCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfU1VNTykgfHwKKwkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9TVU1PMikgfHwKKwkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQUlDT1MpKQorCQkJc3FfY29uZmlnID0gMDsKKwkJZWxzZQorCQkJc3FfY29uZmlnID0gVkNfRU5BQkxFOworCisJCXNxX2NvbmZpZyB8PSAoRVhQT1JUX1NSQ19DIHwKKwkJCSAgICAgIENTX1BSSU8oMCkgfAorCQkJICAgICAgTFNfUFJJTygwKSB8CisJCQkgICAgICBIU19QUklPKDApIHwKKwkJCSAgICAgIFBTX1BSSU8oMCkgfAorCQkJICAgICAgVlNfUFJJTygxKSB8CisJCQkgICAgICBHU19QUklPKDIpIHwKKwkJCSAgICAgIEVTX1BSSU8oMykpOworCisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX0dQUlMobnVtX3BzX2dwcnMpIHwKKwkJCQkJICBOVU1fVlNfR1BSUyhudW1fdnNfZ3BycykgfAorCQkJCQkgIE5VTV9DTEFVU0VfVEVNUF9HUFJTKG51bV90ZW1wX2dwcnMpKTsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfR1BSUyhudW1fZ3NfZ3BycykgfAorCQkJCQkgIE5VTV9FU19HUFJTKG51bV9lc19ncHJzKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX0dQUlMobnVtX2hzX2dwcnMpIHwKKwkJCQkJICBOVU1fTFNfR1BSUyhudW1fbHNfZ3BycykpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChOVU1fUFNfVEhSRUFEUyhudW1fcHNfdGhyZWFkcykgfAorCQkJCQkgICBOVU1fVlNfVEhSRUFEUyhudW1fdnNfdGhyZWFkcykgfAorCQkJCQkgICBOVU1fR1NfVEhSRUFEUyhudW1fZ3NfdGhyZWFkcykgfAorCQkJCQkgICBOVU1fRVNfVEhSRUFEUyhudW1fZXNfdGhyZWFkcykpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9IU19USFJFQURTKG51bV9oc190aHJlYWRzKSB8CisJCQkJCSAgICAgTlVNX0xTX1RIUkVBRFMobnVtX2xzX3RocmVhZHMpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19TVEFDS19FTlRSSUVTKG51bV9wc19zdGFja19lbnRyaWVzKSB8CisJCQkJCSAgICBOVU1fVlNfU1RBQ0tfRU5UUklFUyhudW1fdnNfc3RhY2tfZW50cmllcykpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX1NUQUNLX0VOVFJJRVMobnVtX2dzX3N0YWNrX2VudHJpZXMpIHwKKwkJCQkJICAgIE5VTV9FU19TVEFDS19FTlRSSUVTKG51bV9lc19zdGFja19lbnRyaWVzKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMyA9IChOVU1fSFNfU1RBQ0tfRU5UUklFUyhudW1faHNfc3RhY2tfZW50cmllcykgfAorCQkJCQkgICAgTlVNX0xTX1NUQUNLX0VOVFJJRVMobnVtX2xzX3N0YWNrX2VudHJpZXMpKTsKKworCQkvKiBkaXNhYmxlIGR5biBncHJzICovCisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfRFlOX0dQUl9DTlRMX1BTX0ZMVVNIX1JFUSAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpID4+IDIpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKworCQkvKiBTUSBjb25maWcgKi8KKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxMSkpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfQ09ORklHIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19TVEFSVCkgPj4gMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2NvbmZpZyk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzEpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9ncHJfcmVzb3VyY2VfbWdtdF8yKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMyk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdF8yKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8zKTsKKwl9CiAKIAkvKiBDT05URVhUX0NPTlRST0wgKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweGMwMDEyODAwKTsKQEAgLTU2MCw3ICs2MTksMTAgQEAKIAltdXRleF9pbml0KCZyZGV2LT5yNjAwX2JsaXQubXV0ZXgpOwogCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgPSAwOwogCi0JcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiA9IGV2ZXJncmVlbl9kZWZhdWx0X3NpemU7CisJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfQ0FZTUFOKQorCQlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZTsKKwllbHNlCisJCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gPSBjYXltYW5fZGVmYXVsdF9zaXplOwogCiAJZHdvcmRzID0gcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbjsKIAl3aGlsZSAoZHdvcmRzICYgMHhmKSB7CkBAIC01NzIsMTEgKzYzNCwxNyBAQAogCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0ID0gb2JqX3NpemU7Ci0Jb2JqX3NpemUgKz0gZXZlcmdyZWVuX3ZzX3NpemUgKiA0OworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikKKwkJb2JqX3NpemUgKz0gZXZlcmdyZWVuX3ZzX3NpemUgKiA0OworCWVsc2UKKwkJb2JqX3NpemUgKz0gY2F5bWFuX3ZzX3NpemUgKiA0OwogCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ID0gb2JqX3NpemU7Ci0Jb2JqX3NpemUgKz0gZXZlcmdyZWVuX3BzX3NpemUgKiA0OworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikKKwkJb2JqX3NpemUgKz0gZXZlcmdyZWVuX3BzX3NpemUgKiA0OworCWVsc2UKKwkJb2JqX3NpemUgKz0gY2F5bWFuX3BzX3NpemUgKiA0OwogCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyID0gcmFkZW9uX2JvX2NyZWF0ZShyZGV2LCBvYmpfc2l6ZSwgUEFHRV9TSVpFLCB0cnVlLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLApAQCAtNTk5LDE2ICs2NjcsMjkgQEAKIAkJcmV0dXJuIHI7CiAJfQogCi0JbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKLQkJICAgIGV2ZXJncmVlbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CisJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfQ0FZTUFOKSB7CisJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQsCisJCQkgICAgZXZlcmdyZWVuX2RlZmF1bHRfc3RhdGUsIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KTsKIAotCWlmIChudW1fcGFja2V0MnMpCi0JCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAotCQkJICAgIHBhY2tldDJzLCBudW1fcGFja2V0MnMgKiA0KTsKLQlmb3IgKGkgPSAwOyBpIDwgZXZlcmdyZWVuX3ZzX3NpemU7IGkrKykKLQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGV2ZXJncmVlbl92c1tpXSk7Ci0JZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl9wc19zaXplOyBpKyspCi0JCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihldmVyZ3JlZW5fcHNbaV0pOworCQlpZiAobnVtX3BhY2tldDJzKQorCQkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCArIChyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCksCisJCQkJICAgIHBhY2tldDJzLCBudW1fcGFja2V0MnMgKiA0KTsKKwkJZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl92c19zaXplOyBpKyspCisJCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3ZzW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl9wc19zaXplOyBpKyspCisJCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3BzW2ldKTsKKwl9IGVsc2UgeworCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0LAorCQkJICAgIGNheW1hbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CisKKwkJaWYgKG51bV9wYWNrZXQycykKKwkJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAorCQkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7CisJCWZvciAoaSA9IDA7IGkgPCBjYXltYW5fdnNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGNheW1hbl92c1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBjYXltYW5fcHNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGNheW1hbl9wc1tpXSk7CisJfQogCXJhZGVvbl9ib19rdW5tYXAocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCXJhZGVvbl9ib191bnJlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCmluZGV4IGYzN2U5MWUuLjE2MzZlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCkBAIC0xNjgsMTAgKzE2OCwxNiBAQAogI2RlZmluZQkJU0VfREJfQlVTWQkJCQkJKDEgPDwgMzApCiAjZGVmaW5lCQlTRV9DQl9CVVNZCQkJCQkoMSA8PCAzMSkKIC8qIGV2ZXJncmVlbiAqLworI2RlZmluZQlDR19USEVSTUFMX0NUUkwJCQkJCTB4NzJjCisjZGVmaW5lCQlUT0ZGU0VUX01BU0sJCQkgICAgICAgIDB4MDAwMDNGRTAKKyNkZWZpbmUJCVRPRkZTRVRfU0hJRlQJCQkgICAgICAgIDUKICNkZWZpbmUJQ0dfTVVMVF9USEVSTUFMX1NUQVRVUwkJCQkweDc0MAogI2RlZmluZQkJQVNJQ19UKHgpCQkJICAgICAgICAoKHgpIDw8IDE2KQotI2RlZmluZQkJQVNJQ19UX01BU0sJCQkgICAgICAgIDB4N0ZGMDAwMAorI2RlZmluZQkJQVNJQ19UX01BU0sJCQkgICAgICAgIDB4MDdGRjAwMDAKICNkZWZpbmUJCUFTSUNfVF9TSElGVAkJCSAgICAgICAgMTYKKyNkZWZpbmUJQ0dfVFMwX1NUQVRVUwkJCQkJMHg3NjAKKyNkZWZpbmUJCVRTMF9BRENfRE9VVF9NQVNLCQkJMHgwMDAwMDNGRgorI2RlZmluZQkJVFMwX0FEQ19ET1VUX1NISUZUCQkJMAogLyogQVBVICovCiAjZGVmaW5lCUNHX1RIRVJNQUxfU1RBVFVTCQkJICAgICAgICAweDY3OAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKaW5kZXggYjIwNWJhMS4uMTZjYWFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYwpAQCAtMTM4NywxNCArMTM4NywxMiBAQAogCQlyZXR1cm4gcjsKIAljYXltYW5fZ3B1X2luaXQocmRldik7CiAKLSNpZiAwCi0JciA9IGNheW1hbl9ibGl0X2luaXQocmRldik7CisJciA9IGV2ZXJncmVlbl9ibGl0X2luaXQocmRldik7CiAJaWYgKHIpIHsKLQkJY2F5bWFuX2JsaXRfZmluaShyZGV2KTsKKwkJZXZlcmdyZWVuX2JsaXRfZmluaShyZGV2KTsKIAkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7CiAJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCBibGl0dGVyICglZCkgZmFsbGluZyBiYWNrIHRvIG1lbWNweVxuIiwgcik7CiAJfQotI2VuZGlmCiAKIAkvKiBhbGxvY2F0ZSB3YiBidWZmZXIgKi8KIAlyID0gcmFkZW9uX3diX2luaXQocmRldik7CkBAIC0xNDUyLDcgKzE0NTAsNyBAQAogCiBpbnQgY2F5bWFuX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JLyogaW50IHI7ICovCisJaW50IHI7CiAKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIHdhaXQgZm9yIHJpbmcgdG8gYmUgZW1wdHkgKi8KIAljYXltYW5fY3BfZW5hYmxlKHJkZXYsIGZhbHNlKTsKQEAgLTE0NjEsMTQgKzE0NTksMTMgQEAKIAlyYWRlb25fd2JfZGlzYWJsZShyZGV2KTsKIAljYXltYW5fcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CiAKLSNpZiAwCiAJLyogdW5waW4gc2hhZGVycyBibyAqLwogCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgZmFsc2UpOwogCWlmIChsaWtlbHkociA9PSAwKSkgewogCQlyYWRlb25fYm9fdW5waW4ocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCQlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAl9Ci0jZW5kaWYKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTgwLDcgKzE1NzcsNyBAQAogCiB2b2lkIGNheW1hbl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCS8qIGNheW1hbl9ibGl0X2ZpbmkocmRldik7ICovCisJZXZlcmdyZWVuX2JsaXRfZmluaShyZGV2KTsKIAljYXltYW5fY3BfZmluaShyZGV2KTsKIAlyNjAwX2lycV9maW5pKHJkZXYpOwogCXJhZGVvbl93Yl9maW5pKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCA2ZjI3NTkzLi5kNzRkNGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtODcsNiArODcsMTAgQEAKIE1PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1BBTE1fcGZwLmJpbiIpOwogTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUEFMTV9tZS5iaW4iKTsKIE1PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU9fcmxjLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vU1VNT19wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9TVU1PX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vU1VNTzJfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vU1VNTzJfbWUuYmluIik7CiAKIGludCByNjAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIApAQCAtMjAyNCw2ICsyMDI4LDE0IEBACiAJCWNoaXBfbmFtZSA9ICJQQUxNIjsKIAkJcmxjX2NoaXBfbmFtZSA9ICJTVU1PIjsKIAkJYnJlYWs7CisJY2FzZSBDSElQX1NVTU86CisJCWNoaXBfbmFtZSA9ICJTVU1PIjsKKwkJcmxjX2NoaXBfbmFtZSA9ICJTVU1PIjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1NVTU8yOgorCQljaGlwX25hbWUgPSAiU1VNTzIiOworCQlybGNfY2hpcF9uYW1lID0gIlNVTU8iOworCQlicmVhazsKIAlkZWZhdWx0OiBCVUcoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKaW5kZXggZmQxOGJlOS4uOTA5YmRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKQEAgLTcxLDIwICs3MSwyMSBAQAogCXU2NAkJCWRiX2JvX21jOwogfTsKIAotI2RlZmluZSBGTVRfOF9CSVQoZm10LCB2YykgW2ZtdF0gPSB7IDEsIDEsIDEsIHZjIH0KLSNkZWZpbmUgRk1UXzE2X0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgMiwgdmMgfQotI2RlZmluZSBGTVRfMjRfQklUKGZtdCkgW2ZtdF0gPSB7IDEsIDEsIDMsIDAgfQotI2RlZmluZSBGTVRfMzJfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCA0LCB2YyB9Ci0jZGVmaW5lIEZNVF80OF9CSVQoZm10KSBbZm10XSA9IHsgMSwgMSwgNiwgMCB9Ci0jZGVmaW5lIEZNVF82NF9CSVQoZm10LCB2YykgW2ZtdF0gPSB7IDEsIDEsIDgsIHZjIH0KLSNkZWZpbmUgRk1UXzk2X0JJVChmbXQpIFtmbXRdID0geyAxLCAxLCAxMiwgMCB9Ci0jZGVmaW5lIEZNVF8xMjhfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCAxNiwgdmMgfQorI2RlZmluZSBGTVRfOF9CSVQoZm10LCB2YykgICBbZm10XSA9IHsgMSwgMSwgMSwgdmMsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF8xNl9CSVQoZm10LCB2YykgIFtmbXRdID0geyAxLCAxLCAyLCB2YywgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzI0X0JJVChmbXQpICAgICAgW2ZtdF0gPSB7IDEsIDEsIDMsICAwLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfMzJfQklUKGZtdCwgdmMpICBbZm10XSA9IHsgMSwgMSwgNCwgdmMsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF80OF9CSVQoZm10KSAgICAgIFtmbXRdID0geyAxLCAxLCA2LCAgMCwgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzY0X0JJVChmbXQsIHZjKSAgW2ZtdF0gPSB7IDEsIDEsIDgsIHZjLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfOTZfQklUKGZtdCkgICAgICBbZm10XSA9IHsgMSwgMSwgMTIsIDAsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF8xMjhfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCAxNix2YywgQ0hJUF9SNjAwIH0KIAogc3RydWN0IGdwdV9mb3JtYXRzIHsKIAl1bnNpZ25lZCBibG9ja3dpZHRoOwogCXVuc2lnbmVkIGJsb2NraGVpZ2h0OwogCXVuc2lnbmVkIGJsb2Nrc2l6ZTsKIAl1bnNpZ25lZCB2YWxpZF9jb2xvcjsKKwllbnVtIHJhZGVvbl9mYW1pbHkgbWluX2ZhbWlseTsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3B1X2Zvcm1hdHMgY29sb3JfZm9ybWF0c190YWJsZVtdID0gewpAQCAtMTU0LDcgKzE1NSwxMSBAQAogCVtWXzAzODAwNF9GTVRfQkMzXSA9IHsgNCwgNCwgMTYsIDAgfSwKIAlbVl8wMzgwMDRfRk1UX0JDNF0gPSB7IDQsIDQsIDgsIDAgfSwKIAlbVl8wMzgwMDRfRk1UX0JDNV0gPSB7IDQsIDQsIDE2LCAwfSwKKwlbVl8wMzgwMDRfRk1UX0JDNl0gPSB7IDQsIDQsIDE2LCAwLCBDSElQX0NFREFSfSwgLyogRXZlcmdyZWVuLW9ubHkgKi8KKwlbVl8wMzgwMDRfRk1UX0JDN10gPSB7IDQsIDQsIDE2LCAwLCBDSElQX0NFREFSfSwgLyogRXZlcmdyZWVuLW9ubHkgKi8KIAorCS8qIFRoZSBvdGhlciBFdmVyZ3JlZW4gZm9ybWF0cyAqLworCVtWXzAzODAwNF9GTVRfMzJfQVNfMzJfMzJfMzJfMzJdID0geyAxLCAxLCA0LCAwLCBDSElQX0NFREFSfSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmbXRfaXNfdmFsaWRfY29sb3IodTMyIGZvcm1hdCkKQEAgLTE2OCwxMSArMTczLDE0IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZm10X2lzX3ZhbGlkX3RleHR1cmUodTMyIGZvcm1hdCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBmbXRfaXNfdmFsaWRfdGV4dHVyZSh1MzIgZm9ybWF0LCBlbnVtIHJhZGVvbl9mYW1pbHkgZmFtaWx5KQogewogCWlmIChmb3JtYXQgPj0gQVJSQVlfU0laRShjb2xvcl9mb3JtYXRzX3RhYmxlKSkKIAkJcmV0dXJuIGZhbHNlOwogCQorCWlmIChmYW1pbHkgPCBjb2xvcl9mb3JtYXRzX3RhYmxlW2Zvcm1hdF0ubWluX2ZhbWlseSkKKwkJcmV0dXJuIGZhbHNlOworCiAJaWYgKGNvbG9yX2Zvcm1hdHNfdGFibGVbZm9ybWF0XS5ibG9ja3dpZHRoID4gMCkKIAkJcmV0dXJuIHRydWU7CiAKQEAgLTEzMjUsNyArMTMzMyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlmb3JtYXQgPSBHXzAzODAwNF9EQVRBX0ZPUk1BVCh3b3JkMSk7Ci0JaWYgKCFmbXRfaXNfdmFsaWRfdGV4dHVyZShmb3JtYXQpKSB7CisJaWYgKCFmbXRfaXNfdmFsaWRfdGV4dHVyZShmb3JtYXQsIHAtPmZhbWlseSkpIHsKIAkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4dHVyZSBpbnZhbGlkIGZvcm1hdCAlZFxuIiwKIAkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCmluZGV4IGIyYjk0NGJjLi5mMTQwYTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCkBAIC0xMzA5LDYgKzEzMDksOSBAQAogI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UX0JDMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKICNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CiAjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfQkM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UX0JDNiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CQzcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfMzJfQVNfMzJfMzJfMzJfMzIgICAgICAgICAgICAgMHgwMDAwMDAzOAogI2RlZmluZSBSXzAzODAxMF9TUV9URVhfUkVTT1VSQ0VfV09SRDRfMCAgICAgICAgICAgICAweDAzODAxMAogI2RlZmluZSAgIFNfMDM4MDEwX0ZPUk1BVF9DT01QX1goeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAwKQogI2RlZmluZSAgIEdfMDM4MDEwX0ZPUk1BVF9DT01QX1goeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCmluZGV4IGQ5NDgyNjUuLjliZDE2MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKQEAgLTkwNiw5ICs5MDYsOSBAQAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmZXZlcmdyZWVuX2dldF92YmxhbmtfY291bnRlciwKIAkuZmVuY2VfcmluZ19lbWl0ID0gJnI2MDBfZmVuY2VfcmluZ19lbWl0LAogCS5jc19wYXJzZSA9ICZldmVyZ3JlZW5fY3NfcGFyc2UsCi0JLmNvcHlfYmxpdCA9IE5VTEwsCi0JLmNvcHlfZG1hID0gTlVMTCwKLQkuY29weSA9IE5VTEwsCisJLmNvcHlfYmxpdCA9ICZldmVyZ3JlZW5fY29weV9ibGl0LAorCS5jb3B5X2RtYSA9ICZldmVyZ3JlZW5fY29weV9ibGl0LAorCS5jb3B5ID0gJmV2ZXJncmVlbl9jb3B5X2JsaXQsCiAJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAogCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCkBAIC0xMDIwLDYgKzEwMjAsOCBAQAogCQlyZGV2LT5hc2ljID0gJmV2ZXJncmVlbl9hc2ljOwogCQlicmVhazsKIAljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfU1VNTzoKKwljYXNlIENISVBfU1VNTzI6CiAJCXJkZXYtPmFzaWMgPSAmc3Vtb19hc2ljOwogCQlicmVhazsKIAljYXNlIENISVBfQkFSVFM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwppbmRleCA4YzE5MTY5Li5mYWUwMGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKQEAgLTIyOCw2ICsyMjgsNyBAQAogCXBhcnNlci5maWxwID0gZmlscDsKIAlwYXJzZXIucmRldiA9IHJkZXY7CiAJcGFyc2VyLmRldiA9IHJkZXYtPmRldjsKKwlwYXJzZXIuZmFtaWx5ID0gcmRldi0+ZmFtaWx5OwogCXIgPSByYWRlb25fY3NfcGFyc2VyX2luaXQoJnBhcnNlciwgZGF0YSk7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXIgIVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IDViNjEzNjQuLmU2ODA1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC04Miw2ICs4Miw4IEBACiAJIkNZUFJFU1MiLAogCSJIRU1MT0NLIiwKIAkiUEFMTSIsCisJIlNVTU8iLAorCSJTVU1PMiIsCiAJIkJBUlRTIiwKIAkiVFVSS1MiLAogCSJDQUlDT1MiLApAQCAtNzUyLDYgKzc1NCw3IEBACiAJZG1hX2JpdHMgPSByZGV2LT5uZWVkX2RtYTMyID8gMzIgOiA0MDsKIAlyID0gcGNpX3NldF9kbWFfbWFzayhyZGV2LT5wZGV2LCBETUFfQklUX01BU0soZG1hX2JpdHMpKTsKIAlpZiAocikgeworCQlyZGV2LT5uZWVkX2RtYTMyID0gdHJ1ZTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicmFkZW9uOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKaW5kZXggYWUyNDdlZS4uMjkyZjczZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwpAQCAtMjY0LDYgKzI2NCw4IEBACiAJCXJhZGVvbl9ib191bnJlc2VydmUod29yay0+b2xkX3Jibyk7CiAJfSBlbHNlCiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlc2VydmUgYnVmZmVyIGFmdGVyIGZsaXBcbiIpOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJndvcmstPm9sZF9yYm8tPmdlbV9iYXNlKTsKIAlrZnJlZSh3b3JrKTsKIH0KIApAQCAtMzcxLDYgKzM3Myw4IEBACiAJbmV3X3JhZGVvbl9mYiA9IHRvX3JhZGVvbl9mcmFtZWJ1ZmZlcihmYik7CiAJLyogc2NoZWR1bGUgdW5waW4gb2YgdGhlIG9sZCBidWZmZXIgKi8KIAlvYmogPSBvbGRfcmFkZW9uX2ZiLT5vYmo7CisJLyogdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgb2xkIG9iamVjdCAqLworCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShvYmopOwogCXJibyA9IGdlbV90b19yYWRlb25fYm8ob2JqKTsKIAl3b3JrLT5vbGRfcmJvID0gcmJvOwogCUlOSVRfV09SSygmd29yay0+d29yaywgcmFkZW9uX3VucGluX3dvcmtfZnVuYyk7CkBAIC0zNzgsMTIgKzM4Miw5IEBACiAJLyogV2UgYm9ycm93IHRoZSBldmVudCBzcGluIGxvY2sgZm9yIHByb3RlY3RpbmcgdW5waW5fd29yayAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAlpZiAocmFkZW9uX2NydGMtPnVucGluX3dvcmspIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Ci0JCWtmcmVlKHdvcmspOwotCQlyYWRlb25fZmVuY2VfdW5yZWYoJmZlbmNlKTsKLQogCQlEUk1fREVCVUdfRFJJVkVSKCJmbGlwIHF1ZXVlOiBjcnRjIGFscmVhZHkgYnVzeVxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCXIgPSAtRUJVU1k7CisJCWdvdG8gdW5sb2NrX2ZyZWU7CiAJfQogCXJhZGVvbl9jcnRjLT51bnBpbl93b3JrID0gd29yazsKIAlyYWRlb25fY3J0Yy0+ZGVmZXJyZWRfZmxpcF9jb21wbGV0aW9uID0gMDsKQEAgLTQ5Nyw2ICs0OTgsOCBAQAogcGZsaXBfY2xlYW51cDoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAJcmFkZW9uX2NydGMtPnVucGluX3dvcmsgPSBOVUxMOwordW5sb2NrX2ZyZWU6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2xkX3JhZGVvbl9mYi0+b2JqKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAlyYWRlb25fZmVuY2VfdW5yZWYoJmZlbmNlKTsKIAlrZnJlZSh3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggMWQzMzA2MC4uNzNkZmJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTExMyw3ICsxMTMsNyBAQAogaW50IHJhZGVvbl90ZXN0aW5nID0gMDsKIGludCByYWRlb25fY29ubmVjdG9yX3RhYmxlID0gMDsKIGludCByYWRlb25fdHYgPSAxOwotaW50IHJhZGVvbl9hdWRpbyA9IDE7CitpbnQgcmFkZW9uX2F1ZGlvID0gMDsKIGludCByYWRlb25fZGlzcF9wcmlvcml0eSA9IDA7CiBpbnQgcmFkZW9uX2h3X2kyYyA9IDA7CiBpbnQgcmFkZW9uX3BjaWVfZ2VuMiA9IDA7CkBAIC0xNTEsNyArMTUxLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0ModHYsICJUViBlbmFibGUgKDAgPSBkaXNhYmxlKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHR2LCByYWRlb25fdHYsIGludCwgMDQ0NCk7CiAKLU1PRFVMRV9QQVJNX0RFU0MoYXVkaW8sICJBdWRpbyBlbmFibGUgKDAgPSBkaXNhYmxlKSIpOworTU9EVUxFX1BBUk1fREVTQyhhdWRpbywgIkF1ZGlvIGVuYWJsZSAoMSA9IGVuYWJsZSkiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChhdWRpbywgcmFkZW9uX2F1ZGlvLCBpbnQsIDA0NDQpOwogCiBNT0RVTEVfUEFSTV9ERVNDKGRpc3BfcHJpb3JpdHksICJEaXNwbGF5IFByaW9yaXR5ICgwID0gYXV0bywgMSA9IG5vcm1hbCwgMiA9IGhpZ2gpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwppbmRleCAxYjU1NzU1Li4wM2YxMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKQEAgLTk1NCwxMCArOTU0LDE1IEBACiAJaW50IGRwX2xhbmVfY291bnQgPSAwOwogCWludCBjb25uZWN0b3Jfb2JqZWN0X2lkID0gMDsKIAlpbnQgaWdwX2xhbmVfaW5mbyA9IDA7CisJaW50IGRpZ19lbmNvZGVyID0gZGlnLT5kaWdfZW5jb2RlcjsKIAotCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkKKwlpZiAoYWN0aW9uID09IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0lOSVQpIHsKIAkJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXJfaW5pdChlbmNvZGVyKTsKLQllbHNlCisJCS8qIGp1c3QgbmVlZGVkIHRvIGF2b2lkIGJhaWxpbmcgaW4gdGhlIGVuY29kZXIgY2hlY2suICB0aGUgZW5jb2RlcgorCQkgKiBpc24ndCB1c2VkIGZvciBpbml0CisJCSAqLworCQlkaWdfZW5jb2RlciA9IDA7CisJfSBlbHNlCiAJCWNvbm5lY3RvciA9IHJhZGVvbl9nZXRfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKGVuY29kZXIpOwogCiAJaWYgKGNvbm5lY3RvcikgewpAQCAtOTczLDcgKzk3OCw3IEBACiAJfQogCiAJLyogbm8gZGlnIGVuY29kZXIgYXNzaWduZWQgKi8KLQlpZiAoZGlnLT5kaWdfZW5jb2RlciA9PSAtMSkKKwlpZiAoZGlnX2VuY29kZXIgPT0gLTEpCiAJCXJldHVybjsKIAogCWlmIChhdG9tYmlvc19nZXRfZW5jb2Rlcl9tb2RlKGVuY29kZXIpID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKQpAQCAtMTAyMyw3ICsxMDI4LDcgQEAKIAogCQlpZiAoZGlnLT5saW5rYikKIAkJCWFyZ3MudjMuYWNDb25maWcudWNMaW5rU2VsID0gMTsKLQkJaWYgKGRpZy0+ZGlnX2VuY29kZXIgJiAxKQorCQlpZiAoZGlnX2VuY29kZXIgJiAxKQogCQkJYXJncy52My5hY0NvbmZpZy51Y0VuY29kZXJTZWwgPSAxOwogCiAJCS8qIFNlbGVjdCB0aGUgUExMIGZvciB0aGUgUEhZCkBAIC0xMDczLDcgKzEwNzgsNyBAQAogCQkJCWFyZ3MudjMuYWNDb25maWcuZkR1YWxMaW5rQ29ubmVjdG9yID0gMTsKIAkJfQogCX0gZWxzZSBpZiAoQVNJQ19JU19EQ0UzMihyZGV2KSkgewotCQlhcmdzLnYyLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IGRpZy0+ZGlnX2VuY29kZXI7CisJCWFyZ3MudjIuYWNDb25maWcudWNFbmNvZGVyU2VsID0gZGlnX2VuY29kZXI7CiAJCWlmIChkaWctPmxpbmtiKQogCQkJYXJncy52Mi5hY0NvbmZpZy51Y0xpbmtTZWwgPSAxOwogCkBAIC0xMTAwLDcgKzExMDUsNyBAQAogCX0gZWxzZSB7CiAJCWFyZ3MudjEudWNDb25maWcgPSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19DTEtTUkNfUFBMTDsKIAotCQlpZiAoZGlnLT5kaWdfZW5jb2RlcikKKwkJaWYgKGRpZ19lbmNvZGVyKQogCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcyX0VOQ09ERVI7CiAJCWVsc2UKIAkJCWFyZ3MudjEudWNDb25maWcgfD0gQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfRElHMV9FTkNPREVSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaAppbmRleCA2ZjFkOWU1Li5lYzJmMWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaApAQCAtODEsNiArODEsOCBAQAogCUNISVBfQ1lQUkVTUywKIAlDSElQX0hFTUxPQ0ssCiAJQ0hJUF9QQUxNLAorCUNISVBfU1VNTywKKwlDSElQX1NVTU8yLAogCUNISVBfQkFSVFMsCiAJQ0hJUF9UVVJLUywKIAlDSElQX0NBSUNPUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCmluZGV4IDg2ZWRhMWUuLmFhYTE5ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtNDg3LDYgKzQ4Nyw3IEBACiAJY2FzZSBUSEVSTUFMX1RZUEVfUlY2WFg6CiAJY2FzZSBUSEVSTUFMX1RZUEVfUlY3NzA6CiAJY2FzZSBUSEVSTUFMX1RZUEVfRVZFUkdSRUVOOgorCWNhc2UgVEhFUk1BTF9UWVBFX05JOgogCWNhc2UgVEhFUk1BTF9UWVBFX1NVTU86CiAJCXJkZXYtPnBtLmludF9od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIocmRldi0+ZGV2KTsKIAkJaWYgKElTX0VSUihyZGV2LT5wbS5pbnRfaHdtb25fZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCmluZGV4IDkyZjE5MDAuLmVhNDk3NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKQEAgLTc1OCw2ICs3NTgsNSBAQAogMHgwMDAwOTcxNCBWQ19FTkhBTkNFCiAweDAwMDA5ODMwIERCX0RFQlVHCiAweDAwMDA5ODM4IERCX1dBVEVSTUFSS1MKLTB4MDAwMjhEMjggREJfU1JFU1VMVFNfQ09NUEFSRV9TVEFURTAKIDB4MDAwMjhENDQgREJfQUxQSEFfVE9fTUFTSwogMHgwMDAwOTcwMCBWQ19DTlRMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMgYi9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKaW5kZXggZGUzZDI0Ni4uODVlOTM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCisrKyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCSAqIElmIHRoZSBUak1heCBpcyBub3QgcGxhdXNpYmxlLCBhbiBhc3N1bXB0aW9uCiAJCSAqIHdpbGwgYmUgdXNlZAogCQkgKi8KLQkJaWYgKHZhbCA+IDgwICYmIHZhbCA8IDEyMCkgeworCQlpZiAodmFsKSB7CiAJCQlkZXZfaW5mbyhkZXYsICJUak1heCBpcyAlZCBDLlxuIiwgdmFsKTsKIAkJCXJldHVybiB2YWwgKiAxMDAwOwogCQl9CkBAIC0zMDQsMjQgKzMwNCw5IEBACiAKIAkvKgogCSAqIEFuIGFzc3VtcHRpb24gaXMgbWFkZSBmb3IgZWFybHkgQ1BVcyBhbmQgdW5yZWFkYWJsZSBNU1IuCi0JICogTk9URTogdGhlIGdpdmVuIHZhbHVlIG1heSBub3QgYmUgY29ycmVjdC4KKwkgKiBOT1RFOiB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBtYXkgbm90IGJlIGNvcnJlY3QuCiAJICovCi0KLQlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgewotCWNhc2UgMHhlOgotCWNhc2UgMHhmOgotCWNhc2UgMHgxNjoKLQljYXNlIDB4MWE6Ci0JCWRldl93YXJuKGRldiwgIlRqTWF4IGlzIGFzc3VtZWQgYXMgMTAwIEMhXG4iKTsKLQkJcmV0dXJuIDEwMDAwMDsKLQljYXNlIDB4MTc6Ci0JY2FzZSAweDFjOgkJLyogQXRvbSBDUFVzICovCi0JCXJldHVybiBhZGp1c3RfdGptYXgoYywgaWQsIGRldik7Ci0JZGVmYXVsdDoKLQkJZGV2X3dhcm4oZGV2LCAiQ1BVIChtb2RlbD0weCV4KSBpcyBub3Qgc3VwcG9ydGVkIHlldCwiCi0JCQkiIHVzaW5nIGRlZmF1bHQgVGpNYXggb2YgMTAwQy5cbiIsIGMtPng4Nl9tb2RlbCk7Ci0JCXJldHVybiAxMDAwMDA7Ci0JfQorCXJldHVybiBhZGp1c3RfdGptYXgoYywgaWQsIGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBnZXRfdWNvZGVfcmV2X29uX2NwdSh2b2lkICplZHgpCkBAIC0zNDEsNyArMzI2LDcgQEAKIAllcnIgPSByZG1zcl9zYWZlX29uX2NwdShjcHUsIE1TUl9JQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCwgJmVheCwgJmVkeCk7CiAJaWYgKCFlcnIpIHsKIAkJdmFsID0gKGVheCA+PiAxNikgJiAweGZmOwotCQlpZiAodmFsID4gODAgJiYgdmFsIDwgMTIwKQorCQlpZiAodmFsKQogCQkJcmV0dXJuIHZhbCAqIDEwMDA7CiAJfQogCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byByZWFkIFBrZy1Uak1heCBmcm9tIENQVToldVxuIiwgY3B1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4NjY0Mi5jIGIvZHJpdmVycy9od21vbi9tYXg2NjQyLmMKaW5kZXggMGY5ZmM0MC4uZTg1NWQzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXg2NjQyLmMKKysrIGIvZHJpdmVycy9od21vbi9tYXg2NjQyLmMKQEAgLTEzNiwxNSArMTM2LDI5IEBACiAJaWYgKG1hbl9pZCAhPSAweDREKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDA0KSAhPSAweDRECisJICAgIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDYpICE9IDB4NEQKKwkgICAgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHhmZikgIT0gMHg0RCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKgogCSAqIFdlIHJlYWQgdGhlIGNvbmZpZyBhbmQgc3RhdHVzIHJlZ2lzdGVyLCB0aGUgNCBsb3dlciBiaXRzIGluIHRoZQogCSAqIGNvbmZpZyByZWdpc3RlciBzaG91bGQgYmUgemVybyBhbmQgYml0IDUsIDMsIDEgYW5kIDAgc2hvdWxkIGJlCiAJICogemVybyBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyLgogCSAqLwogCXJlZ19jb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVg2NjQyX1JFR19SX0NPTkZJRyk7CisJaWYgKChyZWdfY29uZmlnICYgMHgwZikgIT0gMHgwMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBpbiBiZXR3ZWVuLCBhbm90aGVyIHJvdW5kIG9mIHNhbml0eSBjaGVja3MgKi8KKwlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwNCkgIT0gcmVnX2NvbmZpZworCSAgICB8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDA2KSAhPSByZWdfY29uZmlnCisJICAgIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4ZmYpICE9IHJlZ19jb25maWcpCisJCXJldHVybiAtRU5PREVWOworCiAJcmVnX3N0YXR1cyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NDJfUkVHX1JfU1RBVFVTKTsKLQlpZiAoKChyZWdfY29uZmlnICYgMHgwZikgIT0gMHgwMCkgfHwKLQkgICAgKChyZWdfc3RhdHVzICYgMHgyYikgIT0gMHgwMCkpCisJaWYgKChyZWdfc3RhdHVzICYgMHgyYikgIT0gMHgwMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzdHJsY3B5KGluZm8tPnR5cGUsICJtYXg2NjQyIiwgSTJDX05BTUVfU0laRSk7CkBAIC0yNDYsNyArMjYwLDcgQEAKIAkJCSAgICBzZXRfdGVtcF9tYXgsIDAsIE1BWDY2NDJfUkVHX1dfTE9DQUxfSElHSCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKIAkJCSAgICBzZXRfdGVtcF9tYXgsIDEsIE1BWDY2NDJfUkVHX1dfUkVNT1RFX0hJR0gpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfZmF1bHQsIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDYpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDQpOwogCkBAIC0yNTYsNyArMjcwLDcgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4LmRldl9hdHRyLmF0dHIsCiAKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXBfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2ZhdWx0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAogCU5VTEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggNmU1MTIzYi4uMDRiMDk1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTc3OCw3ICs3NzgsOCBAQAogCQkJCQlzZWN0b3JfdCBibG9jaykKIHsKIAlzdHJ1Y3QgaWRlX2NtZCBjbWQ7Ci0JaW50IHVwdG9kYXRlID0gMCwgbnNlY3RvcnM7CisJaW50IHVwdG9kYXRlID0gMDsKKwl1bnNpZ25lZCBpbnQgbnNlY3RvcnM7CiAKIAlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJjbWQ6IDB4JXgsIGJsb2NrOiAlbGx1IiwKIAkJCQkgIHJxLT5jbWRbMF0sICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2spOwpAQCAtMTc4Miw3ICsxNzgzLDYgQEAKIAlpZGVfY2RfcmVhZF90b2MoZHJpdmUsICZzZW5zZSk7CiAJZy0+Zm9wcyA9ICZpZGVjZF9vcHM7CiAJZy0+ZmxhZ3MgfD0gR0VOSERfRkxfUkVNT1ZBQkxFIHwgR0VOSERfRkxfQkxPQ0tfRVZFTlRTX09OX0VYQ0xfV1JJVEU7Ci0JZy0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJYWRkX2Rpc2soZyk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKaW5kZXggZjM2OTg5Ni4uODc1NWY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKQEAgLTEyMCwyMSArMTIwLDE3IEBACiAgKiAnaW50ZXJydXB0JyByb3V0aW5lLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2VycG9ydF9sZGlzY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgc2VycG9ydF9sZGlzY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCBzZXJwb3J0ICpzZXJwb3J0ID0gKHN0cnVjdCBzZXJwb3J0KikgdHR5LT5kaXNjX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY2hfZmxhZ3M7Ci0JaW50IHJldCA9IDA7CiAJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VycG9ydC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKCF0ZXN0X2JpdChTRVJQT1JUX0FDVElWRSwgJnNlcnBvcnQtPmZsYWdzKSkgewotCQlyZXQgPSAtRUlOVkFMOworCWlmICghdGVzdF9iaXQoU0VSUE9SVF9BQ1RJVkUsICZzZXJwb3J0LT5mbGFncykpCiAJCWdvdG8gb3V0OwotCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCXN3aXRjaCAoZnBbaV0pIHsKQEAgLTE1Niw4ICsxNTIsNiBAQAogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VycG9ydC0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldCA9PSAwID8gY291bnQgOiByZXQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYwppbmRleCAxZDQ0ZDQ3Li44NmE1YzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKQEAgLTY3NCw3ICs2NzQsNyBAQAogICoJY2ZsYWdzCWJ1ZmZlciBjb250YWluaW5nIGVycm9yIGZsYWdzIGZvciByZWNlaXZlZCBjaGFyYWN0ZXJzIChpZ25vcmVkKQogICoJY291bnQJbnVtYmVyIG9mIHJlY2VpdmVkIGNoYXJhY3RlcnMKICAqLwotc3RhdGljIHVuc2lnbmVkIGludAorc3RhdGljIHZvaWQKIGdpZ2FzZXRfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkgICAgY2hhciAqY2ZsYWdzLCBpbnQgY291bnQpCiB7CkBAIC02ODMsMTIgKzY4MywxMiBAQAogCXN0cnVjdCBpbmJ1Zl90ICppbmJ1ZjsKIAogCWlmICghY3MpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm47CiAJaW5idWYgPSBjcy0+aW5idWY7CiAJaWYgKCFpbmJ1ZikgewogCQlkZXZfZXJyKGNzLT5kZXYsICIlczogbm8gaW5idWZcbiIsIF9fZnVuY19fKTsKIAkJY3NfcHV0KGNzKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybjsKIAl9CiAKIAl0YWlsID0gaW5idWYtPnRhaWw7CkBAIC03MjUsOCArNzI1LDYgQEAKIAlnaWdfZGJnKERFQlVHX0lOVFIsICIlcy0tPkJIIiwgX19mdW5jX18pOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCWNzX3B1dChjcyk7Ci0KLQlyZXR1cm4gY291bnQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwppbmRleCAzY2NiZmYxLi43MWE4ZWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKQEAgLTI4Myw2ICsyODMsNyBAQAogCV9xdWV1ZV9kYXRhKCZkY2gtPmRldi5ELCBNUEhfSU5GT1JNQVRJT05fSU5ELCBNSVNETl9JRF9BTlksCiAJCXNpemVvZihzdHJ1Y3QgcGhfaW5mb19kY2gpICsgZGNoLT5kZXYubnJiY2hhbiAqCiAJCXNpemVvZihzdHJ1Y3QgcGhfaW5mb19jaCksIHBoaSwgR0ZQX0FUT01JQyk7CisJa2ZyZWUocGhpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCmluZGV4IDRkYzFjYTMuLjdjMzI3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwpAQCAtNjAsOCArNjAsNiBAQAogCWludCBhY3RfbGVuLCByZXQ7CiAJdTggYnVmWzY0XTsKIAotCWlmIChzbGVuID4gc2l6ZW9mKGJ1ZikpCi0JCXNsZW4gPSBzaXplb2YoYnVmKTsKIAltZW1jcHkoJmJ1ZlswXSwgc2J1Ziwgc2xlbik7CiAJYnVmWzYwXSA9IHN0YXRlLT5zZXErKzsKIApAQCAtMTgwLDMwICsxNzgsMzcgQEAKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwogCWludCByZXQgPSAwLCBpbmMsIGkgPSAwOworCXU4IGJ1Zls1Ml07IC8qIDQgKyA0OCAoSTJDIFdSIFVTQiBjb21tYW5kIGhlYWRlciArIEkyQyBXUiBtYXgpICovCiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAl3aGlsZSAoaSA8IG51bSkgewogCQlpZiAobnVtID4gaSArIDEgJiYgKG1zZ1tpKzFdLmZsYWdzICYgSTJDX01fUkQpKSB7Ci0JCQl1OCBidWZbNl07CisJCQlpZiAobXNnW2ldLmxlbiA+IDIgfHwgbXNnW2krMV0ubGVuID4gNjApIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWJ1ZlswXSA9IENNRF9JMkNfUkVBRDsKIAkJCWJ1ZlsxXSA9IChtc2dbaV0uYWRkciA8PCAxKSB8IDB4MDE7CiAJCQlidWZbMl0gPSBtc2dbaV0uYnVmWzBdOwogCQkJYnVmWzNdID0gbXNnW2ldLmJ1ZlsxXTsKIAkJCWJ1Zls0XSA9IG1zZ1tpXS5sZW4tMTsKIAkJCWJ1Zls1XSA9IG1zZ1tpKzFdLmxlbjsKLQkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIHNpemVvZihidWYpLCBtc2dbaSsxXS5idWYsCisJCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCA2LCBtc2dbaSsxXS5idWYsCiAJCQkJbXNnW2krMV0ubGVuKTsKIAkJCWluYyA9IDI7CiAJCX0gZWxzZSB7Ci0JCQl1OCBidWZbNCttc2dbaV0ubGVuXTsKKwkJCWlmIChtc2dbaV0ubGVuID4gNDgpIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWJ1ZlswXSA9IENNRF9JMkNfV1JJVEU7CiAJCQlidWZbMV0gPSAobXNnW2ldLmFkZHIgPDwgMSk7CiAJCQlidWZbMl0gPSBtc2dbaV0ubGVuOwogCQkJYnVmWzNdID0gMHgwMTsKIAkJCW1lbWNweSgmYnVmWzRdLCBtc2dbaV0uYnVmLCBtc2dbaV0ubGVuKTsKLQkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIHNpemVvZihidWYpLCBOVUxMLCAwKTsKKwkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIDQgKyBtc2dbaV0ubGVuLCBOVUxMLCAwKTsKIAkJCWluYyA9IDE7CiAJCX0KIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvbWVkaWEtZGV2bm9kZS5jIGIvZHJpdmVycy9tZWRpYS9tZWRpYS1kZXZub2RlLmMKaW5kZXggYWY1MjYzYy4uN2I0MmFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9tZWRpYS1kZXZub2RlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9tZWRpYS1kZXZub2RlLmMKQEAgLTIxMywxNCArMjEzLDE0IEBACiAKIAkvKiBQYXJ0IDE6IEZpbmQgYSBmcmVlIG1pbm9yIG51bWJlciAqLwogCW11dGV4X2xvY2soJm1lZGlhX2Rldm5vZGVfbG9jayk7Ci0JbWlub3IgPSBmaW5kX25leHRfemVyb19iaXQobWVkaWFfZGV2bm9kZV9udW1zLCAwLCBNRURJQV9OVU1fREVWSUNFUyk7CisJbWlub3IgPSBmaW5kX25leHRfemVyb19iaXQobWVkaWFfZGV2bm9kZV9udW1zLCBNRURJQV9OVU1fREVWSUNFUywgMCk7CiAJaWYgKG1pbm9yID09IE1FRElBX05VTV9ERVZJQ0VTKSB7CiAJCW11dGV4X3VubG9jaygmbWVkaWFfZGV2bm9kZV9sb2NrKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3QgZ2V0IGEgZnJlZSBtaW5vclxuIik7CiAJCXJldHVybiAtRU5GSUxFOwogCX0KIAotCXNldF9iaXQobWRldi0+bWlub3IsIG1lZGlhX2Rldm5vZGVfbnVtcyk7CisJc2V0X2JpdChtaW5vciwgbWVkaWFfZGV2bm9kZV9udW1zKTsKIAltdXRleF91bmxvY2soJm1lZGlhX2Rldm5vZGVfbG9jayk7CiAKIAltZGV2LT5taW5vciA9IG1pbm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKaW5kZXggMjM1NDMzNi4uOTM0MTg1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxtZWRpYS9jeDI1ODQwLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxzdGFnaW5nL2FsdGVyYS5oPgogCisjaW5jbHVkZSAiLi4vLi4vLi4vc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmgiCiAjaW5jbHVkZSAiY3gyMzg4NS5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgogI2luY2x1ZGUgIm5ldHVwLWluaXQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29hcnNlX2V4cG9fYXV0b2dhaW4uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29hcnNlX2V4cG9fYXV0b2dhaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiOWQ5NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIEF1dG8gZ2FpbiBhbGdvcml0aG0gZm9yIGNhbWVyYSdzIHdpdGggYSBjb2Fyc2UgZXhwb3N1cmUgY29udHJvbAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0vKiBBdXRvZ2FpbiArIGV4cG9zdXJlIGFsZ29yaXRobSBmb3IgY2FtZXJhcyB3aXRoIGEgY29hcnNlIGV4cG9zdXJlIGNvbnRyb2wKLSAgICh1c3VhbGx5IHRoaXMgbWVhbnMgd2UgY2FuIG9ubHkgY29udHJvbCB0aGUgY2xvY2tkaXYgdG8gY2hhbmdlIGV4cG9zdXJlKQotICAgQXMgY2hhbmdpbmcgdGhlIGNsb2NrZGl2IHNvIHRoYXQgdGhlIGZwcyBkcm9wcyBmcm9tIDMwIHRvIDE1IGZwcyBmb3IKLSAgIGV4YW1wbGUsIHdpbGwgbGVhZCB0byBhIGh1Z2UgZXhwb3N1cmUgY2hhbmdlIChpdCBlZmZlY3RpdmVseSBkb3VibGVzKSwKLSAgIHRoaXMgYWxnb3JpdGhtIG5vcm1hbGx5IHRyaWVzIHRvIG9ubHkgYWRqdXN0IHRoZSBnYWluIChiZXR3ZWVuIDQwIGFuZAotICAgODAgJSkgYW5kIGlmIHRoYXQgZG9lcyBub3QgaGVscCwgb25seSB0aGVuIGNoYW5nZXMgZXhwb3N1cmUuIFRoaXMgbGVhZHMKLSAgIHRvIGEgbXVjaCBtb3JlIHN0YWJsZSBpbWFnZSB0aGVuIHVzaW5nIHRoZSBrbmVlIGFsZ29yaXRobSB3aGljaCBhdAotICAgY2VydGFpbiBwb2ludHMgb2YgdGhlIGtuZWUgZ3JhcGggd2lsbCBvbmx5IHRyeSB0byBhZGp1c3QgZXhwb3N1cmUsCi0gICB3aGljaCBsZWFkcyB0byBvc2NpbGF0aW5nIGFzIG9uZSBleHBvc3VyZSBzdGVwIGlzIGh1Z2UuCi0KLSAgIE5vdGUgdGhpcyBhc3N1bWVzIHRoYXQgdGhlIHNkIHN0cnVjdCBmb3IgdGhlIGNhbSBpbiBxdWVzdGlvbiBoYXMKLSAgIGV4cF90b29faGlnaF9jbnQgYW5kIGV4cF90b29faGlnaF9jbnQgaW50IG1lbWJlcnMgZm9yIHVzZSBieSB0aGlzIGZ1bmN0aW9uLgotCi0gICBSZXR1cm5zIDAgaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUsIDEgaWYgdGhlIGdhaW4gYW5kIG9yIGV4cG9zdXJlIHNldHRpbmdzCi0gICB3aGVyZSBjaGFuZ2VkLiAqLwotc3RhdGljIGludCBnc3BjYV9jb2Fyc2VfZ3JhaW5lZF9leHBvX2F1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQlpbnQgYXZnX2x1bSwgaW50IGRlc2lyZWRfYXZnX2x1bSwgaW50IGRlYWR6b25lKQotewotCWludCBpLCBzdGVwcywgZ2Fpbiwgb3JpZ19nYWluLCBleHBvc3VyZSwgb3JpZ19leHBvc3VyZTsKLQlpbnQgZ2Fpbl9sb3csIGdhaW5faGlnaDsKLQljb25zdCBzdHJ1Y3QgY3RybCAqZ2Fpbl9jdHJsID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgY3RybCAqZXhwb3N1cmVfY3RybCA9IE5VTEw7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXR2YWwgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGdzcGNhX2Rldi0+c2RfZGVzYy0+bmN0cmxzOyBpKyspIHsKLQkJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9HQUlOKQotCQkJZ2Fpbl9jdHJsID0gJmdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV07Ci0JCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldLnFjdHJsLmlkID09IFY0TDJfQ0lEX0VYUE9TVVJFKQotCQkJZXhwb3N1cmVfY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOwotCX0KLQlpZiAoIWdhaW5fY3RybCB8fCAhZXhwb3N1cmVfY3RybCkgewotCQlQREVCVUcoRF9FUlIsICJFcnJvcjogZ3NwY2FfY29hcnNlX2dyYWluZWRfZXhwb19hdXRvZ2FpbiAiCi0JCQkiY2FsbGVkIG9uIGNhbSB3aXRob3V0IGdhaW4gb3IgZXhwb3N1cmUiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGdhaW5fY3RybC0+Z2V0KGdzcGNhX2RldiwgJmdhaW4pIHx8Ci0JICAgIGV4cG9zdXJlX2N0cmwtPmdldChnc3BjYV9kZXYsICZleHBvc3VyZSkpCi0JCXJldHVybiAwOwotCi0Jb3JpZ19nYWluID0gZ2FpbjsKLQlvcmlnX2V4cG9zdXJlID0gZXhwb3N1cmU7Ci0JZ2Fpbl9sb3cgPQotCQkoZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtIC0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtKSAvIDUgKiAyOwotCWdhaW5fbG93ICs9IGdhaW5fY3RybC0+cWN0cmwubWluaW11bTsKLQlnYWluX2hpZ2ggPQotCQkoZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtIC0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtKSAvIDUgKiA0OwotCWdhaW5faGlnaCArPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07Ci0KLQkvKiBJZiB3ZSBhcmUgb2YgYSBtdWx0aXBsZSBvZiBkZWFkem9uZSwgZG8gbXVsdGlwbGUgc3RlcHMgdG8gcmVhY2ggdGhlCi0JICAgZGVzaXJlZCBsdW1pbmF0aW9uIGZhc3QgKHdpdGggdGhlIHJpc2Mgb2YgYSBzbGlnaHQgb3ZlcnNob290KSAqLwotCXN0ZXBzID0gKGRlc2lyZWRfYXZnX2x1bSAtIGF2Z19sdW0pIC8gZGVhZHpvbmU7Ci0KLQlQREVCVUcoRF9GUkFNLCAiYXV0b2dhaW46IGx1bTogJWQsIGRlc2lyZWQ6ICVkLCBzdGVwczogJWQiLAotCQlhdmdfbHVtLCBkZXNpcmVkX2F2Z19sdW0sIHN0ZXBzKTsKLQotCWlmICgoZ2FpbiArIHN0ZXBzKSA+IGdhaW5faGlnaCAmJgotCSAgICBzZC0+ZXhwb3N1cmUgPCBleHBvc3VyZV9jdHJsLT5xY3RybC5tYXhpbXVtKSB7Ci0JCWdhaW4gPSBnYWluX2hpZ2g7Ci0JCXNkLT5leHBfdG9vX2xvd19jbnQrKzsKLQl9IGVsc2UgaWYgKChnYWluICsgc3RlcHMpIDwgZ2Fpbl9sb3cgJiYKLQkJICAgc2QtPmV4cG9zdXJlID4gZXhwb3N1cmVfY3RybC0+cWN0cmwubWluaW11bSkgewotCQlnYWluID0gZ2Fpbl9sb3c7Ci0JCXNkLT5leHBfdG9vX2hpZ2hfY250Kys7Ci0JfSBlbHNlIHsKLQkJZ2FpbiArPSBzdGVwczsKLQkJaWYgKGdhaW4gPiBnYWluX2N0cmwtPnFjdHJsLm1heGltdW0pCi0JCQlnYWluID0gZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtOwotCQllbHNlIGlmIChnYWluIDwgZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtKQotCQkJZ2FpbiA9IGdhaW5fY3RybC0+cWN0cmwubWluaW11bTsKLQkJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOwotCQlzZC0+ZXhwX3Rvb19sb3dfY250ID0gMDsKLQl9Ci0KLQlpZiAoc2QtPmV4cF90b29faGlnaF9jbnQgPiAzKSB7Ci0JCWV4cG9zdXJlLS07Ci0JCXNkLT5leHBfdG9vX2hpZ2hfY250ID0gMDsKLQl9IGVsc2UgaWYgKHNkLT5leHBfdG9vX2xvd19jbnQgPiAzKSB7Ci0JCWV4cG9zdXJlKys7Ci0JCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOwotCX0KLQotCWlmIChnYWluICE9IG9yaWdfZ2FpbikgewotCQlnYWluX2N0cmwtPnNldChnc3BjYV9kZXYsIGdhaW4pOwotCQlyZXR2YWwgPSAxOwotCX0KLQlpZiAoZXhwb3N1cmUgIT0gb3JpZ19leHBvc3VyZSkgewotCQlleHBvc3VyZV9jdHJsLT5zZXQoZ3NwY2FfZGV2LCBleHBvc3VyZSk7Ci0JCXJldHZhbCA9IDE7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCAzNmE0NmZjLi4wNTdlMjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC02MDksNyArNjA5LDcgQEAKICAqIGJ1ZmZlcnMsIHRoZXJlIGFyZSBzb21lIHByZXR0eSBzdHJpY3QgcmVhbCB0aW1lIGNvbnN0cmFpbnRzIGZvcgogICogaXNvY2hyb25vdXMgdHJhbnNmZXIgZm9yIGxhcmdlciBmcmFtZSBzaXplcykuCiAgKi8KLS8qamZtOiB0aGlzIHZhbHVlIHdvcmtzIHdlbGwgZm9yIDE2MDB4MTIwMCwgYnV0IG5vdCA4MDB4NjAwIC0gc2VlIGlzb2NfaW5pdCAqLworLypqZm06IHRoaXMgdmFsdWUgZG9lcyBub3Qgd29yayBmb3IgODAweDYwMCAtIHNlZSBpc29jX2luaXQgKi8KICNkZWZpbmUgT1ZGWDJfQlVMS19TSVpFICgxMyAqIDQwOTYpCiAKIC8qIEkyQyByZWdpc3RlcnMgKi8KQEAgLTMzMDcsNiArMzMwNyw3IEBACiAKIAlnc3BjYV9kZXYtPmNhbS5jdHJscyA9IHNkLT5jdHJsczsKIAlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOworCXNkLT5mcmFtZV9yYXRlID0gMTU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM0NjksNyArMzQ3MCw2IEBACiAJCQkJQVJSQVlfU0laRShpbml0XzUxOV9vdjc2NjApKTsKIAkJd3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzY2MCwgQVJSQVlfU0laRShub3JtXzc2NjApKTsKIAkJc2QtPmdzcGNhX2Rldi5jdXJyX21vZGUgPSAxOwkvKiA2NDB4NDgwICovCi0JCXNkLT5mcmFtZV9yYXRlID0gMTU7CiAJCW92NTE5X3NldF9tb2RlKHNkKTsKIAkJb3Y1MTlfc2V0X2ZyKHNkKTsKIAkJc2QtPmN0cmxzW0NPTE9SU10ubWF4ID0gNDsJLyogMC4uNCAqLwpAQCAtMzUxMSw3ICszNTExLDcgQEAKIAogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX09WRlgyOgotCQlpZiAoZ3NwY2FfZGV2LT53aWR0aCA9PSAxNjAwKQorCQlpZiAoZ3NwY2FfZGV2LT53aWR0aCAhPSA4MDApCiAJCQlnc3BjYV9kZXYtPmNhbS5idWxrX3NpemUgPSBPVkZYMl9CVUxLX1NJWkU7CiAJCWVsc2UKIAkJCWdzcGNhX2Rldi0+Y2FtLmJ1bGtfc2l6ZSA9IDcgKiA0MDk2OwpAQCAtNDQ3OCw3ICs0NDc4LDcgQEAKIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7CiAKIAkvKiBBIHNob3J0IHJlYWQgc2lnbmFscyBFT0YgKi8KLQlpZiAobGVuIDwgT1ZGWDJfQlVMS19TSVpFKSB7CisJaWYgKGxlbiA8IGdzcGNhX2Rldi0+Y2FtLmJ1bGtfc2l6ZSkgewogCQkvKiBJZiB0aGUgZnJhbWUgaXMgc2hvcnQsIGFuZCBpdCBpcyBvbmUgb2YgdGhlIGZpcnN0IG9uZXMKIAkJICAgdGhlIHNlbnNvciBhbmQgYnJpZGdlIGFyZSBzdGlsbCBzeW5jaW5nLCBzbyBkcm9wIGl0LiAqLwogCQlpZiAoc2QtPmZpcnN0X2ZyYW1lKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwppbmRleCA2NDE1YWZmLi44MWI4YTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAogCXUzMiBwa3RzejsJCQkvKiAodXNlZCBieSBwa3Rfc2NhbikgKi8KIAl1MTYgbnBrdDsKLQl1OCBuY2hnOworCXM4IG5jaGc7CiAJczggc2hvcnRfbWFyazsKIAogCXU4IHF1YWxpdHk7CQkJLyogaW1hZ2UgcXVhbGl0eSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCmluZGV4IGI1MzhkY2UuLmExNGE4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKQEAgLTEyNSw3ICsxMjUsNyBAQAogI2RlZmluZSBIRENTX1NMRUVQX01PREUJCSgxIDw8IDEpCiAKICNkZWZpbmUgSERDU19ERUZBVUxUX0VYUE9TVVJFCTQ4Ci0jZGVmaW5lIEhEQ1NfREVGQVVMVF9HQUlOCTEyOAorI2RlZmluZSBIRENTX0RFRkFVTFRfR0FJTgk1MAogCiBzdGF0aWMgaW50IGhkY3NfcHJvYmVfMXgwMChzdHJ1Y3Qgc2QgKnNkKTsKIHN0YXRpYyBpbnQgaGRjc19wcm9iZV8xMDIwKHN0cnVjdCBzZCAqc2QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwppbmRleCBhNGU0ZGZkLi4wZmI3NTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwpAQCAtMTMyOCw2ICsxMzI4LDggQEAKIAlpZiAoIWl0di0+aGFzX2N4MjM0MTUpCiAJCXdyaXRlX3JlZ19zeW5jKDB4MDMsIElWVFZfUkVHX0RNQUNPTlRST0wpOwogCisJaXZ0dl9zX3N0ZF9lbmMoaXR2LCAmaXR2LT50dW5lcl9zdGQpOworCiAJLyogRGVmYXVsdCBpbnRlcnJ1cHRzIGVuYWJsZWQuIEZvciB0aGUgUFZSMzUwIHRoaXMgaW5jbHVkZXMgdGhlCiAJICAgZGVjb2RlciBWU1lOQyBpbnRlcnJ1cHQsIHdoaWNoIGlzIGFsd2F5cyBvbi4gSXQgaXMgbm90IG9ubHkgdXNlZAogCSAgIGR1cmluZyBkZWNvZGluZyBidXQgYWxzbyBieSB0aGUgT1NELgpAQCAtMTMzNiwxMiArMTMzOCwxMCBAQAogCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7CiAJCWl2dHZfY2xlYXJfaXJxX21hc2soaXR2LCBJVlRWX0lSUV9NQVNLX0lOSVQgfCBJVlRWX0lSUV9ERUNfVlNZTkMpOwogCQlpdnR2X3NldF9vc2RfYWxwaGEoaXR2KTsKLQl9Ci0JZWxzZQorCQlpdnR2X3Nfc3RkX2RlYyhpdHYsICZpdHYtPnR1bmVyX3N0ZCk7CisJfSBlbHNlIHsKIAkJaXZ0dl9jbGVhcl9pcnFfbWFzayhpdHYsIElWVFZfSVJRX01BU0tfSU5JVCk7Ci0KLQkvKiBGb3IgY2FyZHMgd2l0aCB2aWRlbyBvdXQsIHRoaXMgY2FsbCBuZWVkcyBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLQlpdnR2X3Nfc3RkKE5VTEwsICZmaCwgJml0di0+dHVuZXJfc3RkKTsKKwl9CiAKIAkvKiBTZXR1cCBpbml0aWFsIGNvbnRyb2xzICovCiAJY3gyMzQxeF9oYW5kbGVyX3NldHVwKCZpdHYtPmN4aGRsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCmluZGV4IDE0YTFjZWEuLjAyYzVhZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwpAQCAtMjgwLDggKzI4MCw2IEBACiB7CiAJaW50IHJjID0gMDsKIAl2NGwyX3N0ZF9pZCBzdGQ7Ci0Jc3RydWN0IGl2dHZfb3Blbl9pZCBmaDsKLQlmaC5pdHYgPSBpdHY7CiAKIAlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkKIAkJLyogRGlzcGxheSB0ZXN0IGltYWdlIGR1cmluZyByZXN0YXJ0ICovCkBAIC0zMDEsMTQgKzI5OSwxOSBAQAogCS8qIEFsbG93IHNldHRpbmdzIHRvIHJlbG9hZCAqLwogCWl2dHZfbWFpbGJveF9jYWNoZV9pbnZhbGlkYXRlKGl0dik7CiAKLQkvKiBSZXN0b3JlIHZpZGVvIHN0YW5kYXJkICovCisJLyogUmVzdG9yZSBlbmNvZGVyIHZpZGVvIHN0YW5kYXJkICovCiAJc3RkID0gaXR2LT5zdGQ7CiAJaXR2LT5zdGQgPSAwOwotCWl2dHZfc19zdGQoTlVMTCwgJmZoLCAmc3RkKTsKKwlpdnR2X3Nfc3RkX2VuYyhpdHYsICZzdGQpOwogCiAJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpIHsKIAkJaXZ0dl9pbml0X21wZWdfZGVjb2RlcihpdHYpOwogCisJCS8qIFJlc3RvcmUgZGVjb2RlciB2aWRlbyBzdGFuZGFyZCAqLworCQlzdGQgPSBpdHYtPnN0ZF9vdXQ7CisJCWl0di0+c3RkX291dCA9IDA7CisJCWl2dHZfc19zdGRfZGVjKGl0diwgJnN0ZCk7CisKIAkJLyogUmVzdG9yZSBmcmFtZWJ1ZmZlciBpZiBhY3RpdmUgKi8KIAkJaWYgKGl0di0+aXZ0dmZiX3Jlc3RvcmUpCiAJCQlpdHYtPml2dHZmYl9yZXN0b3JlKGl0dik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwppbmRleCAxNjg5NzgzLi5mOWUzNDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKQEAgLTEwNzEsMjggKzEwNzEsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXZ0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpzdGQpCit2b2lkIGl2dHZfc19zdGRfZW5jKHN0cnVjdCBpdnR2ICppdHYsIHY0bDJfc3RkX2lkICpzdGQpCiB7Ci0JREVGSU5FX1dBSVQod2FpdCk7Ci0Jc3RydWN0IGl2dHYgKml0diA9IGZoMmlkKGZoKS0+aXR2OwotCXN0cnVjdCB5dXZfcGxheWJhY2tfaW5mbyAqeWkgPSAmaXR2LT55dXZfaW5mbzsKLQlpbnQgZjsKLQotCWlmICgoKnN0ZCAmIFY0TDJfU1REX0FMTCkgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKnN0ZCA9PSBpdHYtPnN0ZCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodGVzdF9iaXQoSVZUVl9GX0lfUkFESU9fVVNFUiwgJml0di0+aV9mbGFncykgfHwKLQkgICAgYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDAgfHwKLQkgICAgYXRvbWljX3JlYWQoJml0di0+ZGVjb2RpbmcpID4gMCkgewotCQkvKiBTd2l0Y2hpbmcgc3RhbmRhcmQgd291bGQgdHVybiBvZmYgdGhlIHJhZGlvIG9yIG1lc3MKLQkJICAgd2l0aCBhbHJlYWR5IHJ1bm5pbmcgc3RyZWFtcywgcHJldmVudCB0aGF0IGJ5Ci0JCSAgIHJldHVybmluZyBFQlVTWS4gKi8KLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KIAlpdHYtPnN0ZCA9ICpzdGQ7CiAJaXR2LT5pc182MGh6ID0gKCpzdGQgJiBWNEwyX1NURF81MjVfNjApID8gMSA6IDA7CiAJaXR2LT5pc181MGh6ID0gIWl0di0+aXNfNjBoejsKQEAgLTExMDYsNDggKzEwODYsNzkgQEAKIAlpZiAoaXR2LT5od19mbGFncyAmIElWVFZfSFdfQ1gyNTg0MCkKIAkJaXR2LT52Ymkuc2xpY2VkX2RlY29kZXJfbGluZV9zaXplID0gaXR2LT5pc182MGh6ID8gMjcyIDogMjg0OwogCi0JSVZUVl9ERUJVR19JTkZPKCJTd2l0Y2hpbmcgc3RhbmRhcmQgdG8gJWxseC5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpaXR2LT5zdGQpOwotCiAJLyogVHVuZXIgKi8KIAlpdnR2X2NhbGxfYWxsKGl0diwgY29yZSwgc19zdGQsIGl0di0+c3RkKTsKK30KIAotCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7Ci0JCS8qIHNldCBkaXNwbGF5IHN0YW5kYXJkICovCi0JCWl0di0+c3RkX291dCA9ICpzdGQ7Ci0JCWl0di0+aXNfb3V0XzYwaHogPSBpdHYtPmlzXzYwaHo7Ci0JCWl0di0+aXNfb3V0XzUwaHogPSBpdHYtPmlzXzUwaHo7Ci0JCWl2dHZfY2FsbF9hbGwoaXR2LCB2aWRlbywgc19zdGRfb3V0cHV0LCBpdHYtPnN0ZF9vdXQpOwordm9pZCBpdnR2X3Nfc3RkX2RlYyhzdHJ1Y3QgaXZ0diAqaXR2LCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCB5dXZfcGxheWJhY2tfaW5mbyAqeWkgPSAmaXR2LT55dXZfaW5mbzsKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlpbnQgZjsKIAotCQkvKgotCQkgKiBUaGUgbmV4dCBmaXJtd2FyZSBjYWxsIGlzIHRpbWUgc2Vuc2l0aXZlLiBUaW1lIGl0IHRvCi0JCSAqIGF2b2lkIHJpc2sgb2YgYSBoYXJkIGxvY2ssIGJ5IHRyeWluZyB0byBlbnN1cmUgdGhlIGNhbGwKLQkJICogaGFwcGVucyB3aXRoaW4gdGhlIGZpcnN0IDEwMCBsaW5lcyBvZiB0aGUgdG9wIGZpZWxkLgotCQkgKiBNYWtlIDQgYXR0ZW1wdHMgdG8gc3luYyB0byB0aGUgZGVjb2RlciBiZWZvcmUgZ2l2aW5nIHVwLgotCQkgKi8KLQkJZm9yIChmID0gMDsgZiA8IDQ7IGYrKykgewotCQkJcHJlcGFyZV90b193YWl0KCZpdHYtPnZzeW5jX3dhaXRxLCAmd2FpdCwKLQkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQkJaWYgKChyZWFkX3JlZyhJVlRWX1JFR19ERUNfTElORV9GSUVMRCkgPj4gMTYpIDwgMTAwKQotCQkJCWJyZWFrOwotCQkJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDI1KSk7Ci0JCX0KLQkJZmluaXNoX3dhaXQoJml0di0+dnN5bmNfd2FpdHEsICZ3YWl0KTsKKwkvKiBzZXQgZGlzcGxheSBzdGFuZGFyZCAqLworCWl0di0+c3RkX291dCA9ICpzdGQ7CisJaXR2LT5pc19vdXRfNjBoeiA9ICgqc3RkICYgVjRMMl9TVERfNTI1XzYwKSA/IDEgOiAwOworCWl0di0+aXNfb3V0XzUwaHogPSAhaXR2LT5pc19vdXRfNjBoejsKKwlpdnR2X2NhbGxfYWxsKGl0diwgdmlkZW8sIHNfc3RkX291dHB1dCwgaXR2LT5zdGRfb3V0KTsKIAotCQlpZiAoZiA9PSA0KQotCQkJSVZUVl9XQVJOKCJNb2RlIGNoYW5nZSBmYWlsZWQgdG8gc3luYyB0byBkZWNvZGVyXG4iKTsKLQotCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfU1RBTkRBUkQsIDEsIGl0di0+aXNfb3V0XzUwaHopOwotCQlpdHYtPm1haW5fcmVjdC5sZWZ0ID0gaXR2LT5tYWluX3JlY3QudG9wID0gMDsKLQkJaXR2LT5tYWluX3JlY3Qud2lkdGggPSA3MjA7Ci0JCWl0di0+bWFpbl9yZWN0LmhlaWdodCA9IGl0di0+Y3hoZGwuaGVpZ2h0OwotCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX09TRF9TRVRfRlJBTUVCVUZGRVJfV0lORE9XLCA0LAotCQkJNzIwLCBpdHYtPm1haW5fcmVjdC5oZWlnaHQsIDAsIDApOwotCQl5aS0+bWFpbl9yZWN0ID0gaXR2LT5tYWluX3JlY3Q7Ci0JCWlmICghaXR2LT5vc2RfaW5mbykgewotCQkJeWktPm9zZF9mdWxsX3cgPSA3MjA7Ci0JCQl5aS0+b3NkX2Z1bGxfaCA9IGl0di0+aXNfb3V0XzUwaHogPyA1NzYgOiA0ODA7Ci0JCX0KKwkvKgorCSAqIFRoZSBuZXh0IGZpcm13YXJlIGNhbGwgaXMgdGltZSBzZW5zaXRpdmUuIFRpbWUgaXQgdG8KKwkgKiBhdm9pZCByaXNrIG9mIGEgaGFyZCBsb2NrLCBieSB0cnlpbmcgdG8gZW5zdXJlIHRoZSBjYWxsCisJICogaGFwcGVucyB3aXRoaW4gdGhlIGZpcnN0IDEwMCBsaW5lcyBvZiB0aGUgdG9wIGZpZWxkLgorCSAqIE1ha2UgNCBhdHRlbXB0cyB0byBzeW5jIHRvIHRoZSBkZWNvZGVyIGJlZm9yZSBnaXZpbmcgdXAuCisJICovCisJZm9yIChmID0gMDsgZiA8IDQ7IGYrKykgeworCQlwcmVwYXJlX3RvX3dhaXQoJml0di0+dnN5bmNfd2FpdHEsICZ3YWl0LAorCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKChyZWFkX3JlZyhJVlRWX1JFR19ERUNfTElORV9GSUVMRCkgPj4gMTYpIDwgMTAwKQorCQkJYnJlYWs7CisJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygyNSkpOwogCX0KKwlmaW5pc2hfd2FpdCgmaXR2LT52c3luY193YWl0cSwgJndhaXQpOworCisJaWYgKGYgPT0gNCkKKwkJSVZUVl9XQVJOKCJNb2RlIGNoYW5nZSBmYWlsZWQgdG8gc3luYyB0byBkZWNvZGVyXG4iKTsKKworCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1NFVF9TVEFOREFSRCwgMSwgaXR2LT5pc19vdXRfNTBoeik7CisJaXR2LT5tYWluX3JlY3QubGVmdCA9IDA7CisJaXR2LT5tYWluX3JlY3QudG9wID0gMDsKKwlpdHYtPm1haW5fcmVjdC53aWR0aCA9IDcyMDsKKwlpdHYtPm1haW5fcmVjdC5oZWlnaHQgPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOworCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9GUkFNRUJVRkZFUl9XSU5ET1csIDQsCisJCTcyMCwgaXR2LT5tYWluX3JlY3QuaGVpZ2h0LCAwLCAwKTsKKwl5aS0+bWFpbl9yZWN0ID0gaXR2LT5tYWluX3JlY3Q7CisJaWYgKCFpdHYtPm9zZF9pbmZvKSB7CisJCXlpLT5vc2RfZnVsbF93ID0gNzIwOworCQl5aS0+b3NkX2Z1bGxfaCA9IGl0di0+aXNfb3V0XzUwaHogPyA1NzYgOiA0ODA7CisJfQorfQorCitpbnQgaXZ0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IGl2dHYgKml0diA9IGZoMmlkKGZoKS0+aXR2OworCisJaWYgKCgqc3RkICYgVjRMMl9TVERfQUxMKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgqc3RkID09IGl0di0+c3RkKQorCQlyZXR1cm4gMDsKKworCWlmICh0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSB8fAorCSAgICBhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpID4gMCB8fAorCSAgICBhdG9taWNfcmVhZCgmaXR2LT5kZWNvZGluZykgPiAwKSB7CisJCS8qIFN3aXRjaGluZyBzdGFuZGFyZCB3b3VsZCBtZXNzIHdpdGggYWxyZWFkeSBydW5uaW5nCisJCSAgIHN0cmVhbXMsIHByZXZlbnQgdGhhdCBieSByZXR1cm5pbmcgRUJVU1kuICovCisJCXJldHVybiAtRUJVU1k7CisJfQorCisJSVZUVl9ERUJVR19JTkZPKCJTd2l0Y2hpbmcgc3RhbmRhcmQgdG8gJWxseC5cbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpaXR2LT5zdGQpOworCisJaXZ0dl9zX3N0ZF9lbmMoaXR2LCBzdGQpOworCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKQorCQlpdnR2X3Nfc3RkX2RlYyhpdHYsIHN0ZCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmgKaW5kZXggNThmMDAzNC4uODkxODVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5oCkBAIC0yNyw3ICsyNyw4IEBACiB2b2lkIGl2dHZfc2V0X29zZF9hbHBoYShzdHJ1Y3QgaXZ0diAqaXR2KTsKIGludCBpdnR2X3NldF9zcGVlZChzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgc3BlZWQpOwogdm9pZCBpdnR2X3NldF9mdW5jcyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KTsKLWludCBpdnR2X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCk7Cit2b2lkIGl2dHZfc19zdGRfZW5jKHN0cnVjdCBpdnR2ICppdHYsIHY0bDJfc3RkX2lkICpzdGQpOwordm9pZCBpdnR2X3Nfc3RkX2RlYyhzdHJ1Y3QgaXZ0diAqaXR2LCB2NGwyX3N0ZF9pZCAqc3RkKTsKIGludCBpdnR2X3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICp2Zik7CiBpbnQgaXZ0dl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucCk7CiBsb25nIGl2dHZfdjRsMl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCmluZGV4IDk0MjY4MzMuLmU3Nzk0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKQEAgLTU4OSw3ICs1ODksNyBAQAogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfYXVkaW8sIGF1ZGlvLCBzX3N0cmVhbSwgMSk7CiAJCS8qIEF2b2lkIHVucHJlZGljdGFibGUgUENJIGJ1cyBoYW5nIC0gZGlzYWJsZSB2aWRlbyBjbG9ja3MgKi8KIAkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19zdHJlYW0sIDApOwotCQlpdnR2X21zbGVlcF90aW1lb3V0KDMwMCwgMSk7CisJCWl2dHZfbXNsZWVwX3RpbWVvdXQoMzAwLCAwKTsKIAkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9FTkNfSU5JVElBTElaRV9JTlBVVCwgMCk7CiAJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAl9CkBAIC04MzQsNyArODM0LDcgQEAKIAkJfQogCiAJCS8qIEhhbmRsZSBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JCWl2dHZfbXNsZWVwX3RpbWVvdXQoMTAwLCAxKTsKKwkJaXZ0dl9tc2xlZXBfdGltZW91dCgxMDAsIDApOwogCX0KIAogCWF0b21pY19kZWMoJml0di0+Y2FwdHVyaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKaW5kZXggYjZlYjUxYy4uMjkzZGI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkgICBUdXJuaW5nIHRoaXMgc2lnbmFsIG9uIGFuZCBvZmYgY2FuIGNvbmZ1c2UgY2VydGFpbgogCSAgIFRWcy4gQXMgZmFyIGFzIEkgY2FuIHRlbGwgdGhlcmUgaXMgbm8gcmVhc29uIG5vdCB0bwogCSAgIHRyYW5zbWl0IHRoaXMgc2lnbmFsLiAqLwotCWlmICgoaXR2LT5zdGQgJiBWNEwyX1NURF82MjVfNTApICYmICFlbmFibGVkKSB7CisJaWYgKChpdHYtPnN0ZF9vdXQgJiBWNEwyX1NURF82MjVfNTApICYmICFlbmFibGVkKSB7CiAJCWVuYWJsZWQgPSAxOwogCQltb2RlID0gMHgwODsgIC8qIDR4MyBmdWxsIGZvcm1hdCAqLwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYwppbmRleCAxNzI0NzQ1Li42YjdjOWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogc3RhdGljIGludCBpdnR2ZmJfc2V0X2Rpc3BsYXlfd2luZG93KHN0cnVjdCBpdnR2ICppdHYsIHN0cnVjdCB2NGwyX3JlY3QgKml2dHZfd2luZG93KQogewotCWludCBvc2RfaGVpZ2h0X2xpbWl0ID0gaXR2LT5pc181MGh6ID8gNTc2IDogNDgwOworCWludCBvc2RfaGVpZ2h0X2xpbWl0ID0gaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKIAogCS8qIE9ubHkgZmFpbCBpZiByZXNvbHV0aW9uIHRvbyBoaWdoLCBvdGhlcndpc2UgZnVkZ2UgdGhlIHN0YXJ0IGNvb3Jkcy4gKi8KIAlpZiAoKGl2dHZfd2luZG93LT5oZWlnaHQgPiBvc2RfaGVpZ2h0X2xpbWl0KSB8fCAoaXZ0dl93aW5kb3ctPndpZHRoID4gSVZUVl9PU0RfTUFYX1dJRFRIKSkKQEAgLTQ3MSw5ICs0NzEsOSBAQAogCQkJdmJsYW5rLmZsYWdzID0gRkJfVkJMQU5LX0hBVkVfQ09VTlQgfEZCX1ZCTEFOS19IQVZFX1ZDT1VOVCB8CiAJCQkJCUZCX1ZCTEFOS19IQVZFX1ZTWU5DOwogCQkJdHJhY2UgPSByZWFkX3JlZyhJVlRWX1JFR19ERUNfTElORV9GSUVMRCkgPj4gMTY7Ci0JCQlpZiAoaXR2LT5pc181MGh6ICYmIHRyYWNlID4gMzEyKQorCQkJaWYgKGl0di0+aXNfb3V0XzUwaHogJiYgdHJhY2UgPiAzMTIpCiAJCQkJdHJhY2UgLT0gMzEyOwotCQkJZWxzZSBpZiAoaXR2LT5pc182MGh6ICYmIHRyYWNlID4gMjYyKQorCQkJZWxzZSBpZiAoaXR2LT5pc19vdXRfNjBoeiAmJiB0cmFjZSA+IDI2MikKIAkJCQl0cmFjZSAtPSAyNjI7CiAJCQlpZiAodHJhY2UgPT0gMSkKIAkJCQl2YmxhbmsuZmxhZ3MgfD0gRkJfVkJMQU5LX1ZTWU5DSU5HOwpAQCAtNjU2LDcgKzY1Niw3IEBACiAJSVZUVkZCX0RFQlVHX0lORk8oIml2dHZmYl9jaGVja192YXJcbiIpOwogCiAJLyogU2V0IGJhc2UgcmVmZXJlbmNlcyBmb3IgbW9kZSBjYWxjcy4gKi8KLQlpZiAoaXR2LT5pc181MGh6KSB7CisJaWYgKGl0di0+aXNfb3V0XzUwaHopIHsKIAkJcGl4Y2xvY2sgPSA4NDMxNjsKIAkJaGxpbWl0ID0gNzc2OwogCQl2bGltaXQgPSA1OTE7CkBAIC03ODQsMTIgKzc4NCwxMiBAQAogCSAgIElmIHRoZSBtYXJnaW5zIGFyZSB0b28gbGFyZ2UsIGp1c3QgY2VudGVyIHRoZSBzY3JlZW4KIAkgICAoZW5mb3JjaW5nIG1hcmdpbnMgY2F1c2VzIHRvbyBtYW55IHByb2JsZW1zKSAqLwogCi0JaWYgKHZhci0+bGVmdF9tYXJnaW4gKyB2YXItPnhyZXMgPiBJVlRWX09TRF9NQVhfV0lEVEggKyAxKSB7CisJaWYgKHZhci0+bGVmdF9tYXJnaW4gKyB2YXItPnhyZXMgPiBJVlRWX09TRF9NQVhfV0lEVEggKyAxKQogCQl2YXItPmxlZnRfbWFyZ2luID0gMSArICgoSVZUVl9PU0RfTUFYX1dJRFRIIC0gdmFyLT54cmVzKSAvIDIpOwotCX0KLQlpZiAodmFyLT51cHBlcl9tYXJnaW4gKyB2YXItPnlyZXMgPiAoaXR2LT5pc181MGh6ID8gNTc3IDogNDgxKSkgewotCQl2YXItPnVwcGVyX21hcmdpbiA9IDEgKyAoKChpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODApIC0gdmFyLT55cmVzKSAvIDIpOwotCX0KKworCWlmICh2YXItPnVwcGVyX21hcmdpbiArIHZhci0+eXJlcyA+IChpdHYtPmlzX291dF81MGh6ID8gNTc3IDogNDgxKSkKKwkJdmFyLT51cHBlcl9tYXJnaW4gPSAxICsgKCgoaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MCkgLQorCQkJdmFyLT55cmVzKSAvIDIpOwogCiAJLyogTWFpbnRhaW4gb3ZlcmFsbCAnc2l6ZScgZm9yIGEgY29uc3RhbnQgcmVmcmVzaCByYXRlICovCiAJdmFyLT5yaWdodF9tYXJnaW4gPSBobGltaXQgLSB2YXItPmxlZnRfbWFyZ2luIC0gdmFyLT54cmVzOwpAQCAtODM2LDcgKzgzNiwxMiBAQAogCXUzMiBvc2RfcGFuX2luZGV4OwogCXN0cnVjdCBpdnR2ICppdHYgPSAoc3RydWN0IGl2dHYgKikgaW5mby0+cGFyOwogCi0Jb3NkX3Bhbl9pbmRleCA9ICh2YXItPnhvZmZzZXQgKyAodmFyLT55b2Zmc2V0ICogdmFyLT54cmVzX3ZpcnR1YWwpKSp2YXItPmJpdHNfcGVyX3BpeGVsLzg7CisJaWYgKHZhci0+eW9mZnNldCArIGluZm8tPnZhci55cmVzID4gaW5mby0+dmFyLnlyZXNfdmlydHVhbCB8fAorCSAgICB2YXItPnhvZmZzZXQgKyBpbmZvLT52YXIueHJlcyA+IGluZm8tPnZhci54cmVzX3ZpcnR1YWwpCisJCXJldHVybiAtRUlOVkFMOworCisJb3NkX3Bhbl9pbmRleCA9IHZhci0+eW9mZnNldCAqIGluZm8tPmZpeC5saW5lX2xlbmd0aAorCQkgICAgICArIHZhci0+eG9mZnNldCAqIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAvIDg7CiAJd3JpdGVfcmVnKG9zZF9wYW5faW5kZXgsIDB4MDJBMEMpOwogCiAJLyogUGFzcyB0aGlzIGluZm8gYmFjayB0aGUgeXV2IGhhbmRsZXIgKi8KQEAgLTEwMDMsMTkgKzEwMDgsMjEgQEAKIAkvKiBIYXJkd2FyZSBjb29yZHMgc3RhcnQgYXQgMCwgdXNlciBjb29yZHMgc3RhcnQgYXQgMS4gKi8KIAlvc2RfbGVmdC0tOwogCi0Jc3RhcnRfd2luZG93LmxlZnQgPSBvc2RfbGVmdCA+PSAwID8gb3NkX2xlZnQgOiAoKElWVFZfT1NEX01BWF9XSURUSCAtIHN0YXJ0X3dpbmRvdy53aWR0aCkgLyAyKTsKKwlzdGFydF93aW5kb3cubGVmdCA9IG9zZF9sZWZ0ID49IDAgPworCQkgb3NkX2xlZnQgOiAoKElWVFZfT1NEX01BWF9XSURUSCAtIHN0YXJ0X3dpbmRvdy53aWR0aCkgLyAyKTsKIAogCW9pLT5kaXNwbGF5X2J5dGVfc3RyaWRlID0KIAkJCXN0YXJ0X3dpbmRvdy53aWR0aCAqIG9pLT5ieXRlc19wZXJfcGl4ZWw7CiAKIAkvKiBWZXJ0aWNhbCBzaXplICYgcG9zaXRpb24gKi8KIAotCW1heF9oZWlnaHQgPSBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODA7CisJbWF4X2hlaWdodCA9IGl0di0+aXNfb3V0XzUwaHogPyA1NzYgOiA0ODA7CiAKIAlpZiAob3NkX3lyZXMgPiBtYXhfaGVpZ2h0KQogCQlvc2RfeXJlcyA9IG1heF9oZWlnaHQ7CiAKLQlzdGFydF93aW5kb3cuaGVpZ2h0ID0gb3NkX3lyZXMgPyBvc2RfeXJlcyA6IGl0di0+aXNfNTBoeiA/IDQ4MCA6IDQwMDsKKwlzdGFydF93aW5kb3cuaGVpZ2h0ID0gb3NkX3lyZXMgPworCQlvc2RfeXJlcyA6IGl0di0+aXNfb3V0XzUwaHogPyA0ODAgOiA0MDA7CiAKIAkvKiBDaGVjayB2ZXJ0aWNhbCBzdGFydCAob3NkX3VwcGVyKS4gKi8KIAlpZiAob3NkX3VwcGVyICsgc3RhcnRfd2luZG93LmhlaWdodCA+IG1heF9oZWlnaHQgKyAxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYwppbmRleCA0NzJhNjkzLi5jOWZkMDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCX07CiAJaW50IGk7CiAKLQlkZXZfZGJnKGlzcC0+ZGV2LCAiIik7CisJZGV2X2RiZyhpc3AtPmRldiwgIklTUCBJUlE6ICIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmFtZSk7IGkrKykgewogCQlpZiAoKDEgPDwgaSkgJiBpcnFzdGF0dXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IDM5ODg2NDMuLjRlNGQ0MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0xNTEyLDcgKzE1MTIsNyBAQAogICovCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IGRldmljZV90eXBlICp0eXBlID0gaWNkLT52ZGV2LT5kZXYudHlwZTsKKwljb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgKnR5cGUgPSBpY2QtPnZkZXYtPmRldi50eXBlOwogCWludCByZXQ7CiAKIAlpZiAoIWljZC0+ZGV2LnBhcmVudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19lbnRpdHkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19lbnRpdHkuYwppbmRleCBlZGU3ODUyLi5jM2FiMGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZW50aXR5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2VudGl0eS5jCkBAIC0zMCw3ICszMCw3IEBACiAJc3RydWN0IHV2Y19lbnRpdHkgKnJlbW90ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCByZW1vdGVfcGFkOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW50aXR5LT5udW1fcGFkczsgKytpKSB7CiAJCXN0cnVjdCBtZWRpYV9lbnRpdHkgKnNvdXJjZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9rZ2RidHMuYyBiL2RyaXZlcnMvbWlzYy9rZ2RidHMuYwppbmRleCBiMGM1NjMxLi44Y2ViZWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mva2dkYnRzLmMKKysrIGIvZHJpdmVycy9taXNjL2tnZGJ0cy5jCkBAIC0zMDQsNyArMzA0LDEwIEBACiAJCXJldHVybiAxOwogCX0KIAkvKiBSZWFkanVzdCB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBpZiBuZWVkZWQgKi8KLQlpbnN0cnVjdGlvbl9wb2ludGVyX3NldCgma2dkYnRzX3JlZ3MsIGlwICsgb2Zmc2V0KTsKKwlpcCArPSBvZmZzZXQ7CisjaWZkZWYgR0RCX0FESlVTVFNfQlJFQUtfT0ZGU0VUCisJaW5zdHJ1Y3Rpb25fcG9pbnRlcl9zZXQoJmtnZGJ0c19yZWdzLCBpcCk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2NvcmUuYyBiL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9jb3JlLmMKaW5kZXggMWEwNWZlMC4uZjkxZjgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2NvcmUuYworKysgYi9kcml2ZXJzL21pc2MvdGktc3Qvc3RfY29yZS5jCkBAIC03NDcsOCArNzQ3LDggQEAKIAlwcl9kZWJ1ZygiJXM6IGRvbmUgIiwgX19mdW5jX18pOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0X3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGNoYXIgKnR0eV9mbGFncywgaW50IGNvdW50KQorc3RhdGljIHZvaWQgc3RfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCSAgIGNoYXIgKnR0eV9mbGFncywgaW50IGNvdW50KQogewogI2lmZGVmIFZFUkJPU0UKIAlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiPmluPiIsIERVTVBfUFJFRklYX05PTkUsCkBAIC03NjEsOCArNzYxLDYgQEAKIAkgKi8KIAlzdF9yZWN2KHR0eS0+ZGlzY19kYXRhLCBkYXRhLCBjb3VudCk7CiAJcHJfZGVidWcoImRvbmUgJXMiLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gY291bnQ7CiB9CiAKIC8qIHdha2UtdXAgZnVuY3Rpb24gY2FsbGVkIGluIGZyb20gdGhlIFRUWSBsYXllcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwppbmRleCAyNTllY2UwLi41YjJlMjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtNDM1LDYgKzQzNSw5IEBACiAJCXJlZyA9IHJlZ3VsYXRvcl9nZXQoaG9zdC0+ZGV2LCAidm1tY19hdXgiKTsKIAkJaG9zdC0+dmNjX2F1eCA9IElTX0VSUihyZWcpID8gTlVMTCA6IHJlZzsKIAorCQkvKiBGb3IgZU1NQyBkbyBub3QgcG93ZXIgb2ZmIHdoZW4gbm90IGluIHNsZWVwIHN0YXRlICovCisJCWlmIChtbWNfc2xvdChob3N0KS5ub19yZWd1bGF0b3Jfb2ZmX2luaXQpCisJCQlyZXR1cm4gMDsKIAkJLyoKIAkJKiBVR0xZIEhBQ0s6ICB3b3JrYXJvdW5kIHJlZ3VsYXRvciBmcmFtZXdvcmsgYnVncy4KIAkJKiBXaGVuIHRoZSBib290bG9hZGVyIGxlYXZlcyBhIHN1cHBseSBhY3RpdmUsIGl0J3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA5LmMgYi9kcml2ZXJzL25ldC8zYzUwOS5jCmluZGV4IDVmMjU4ODkuLjQ0YjI4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA5LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDkuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiBzdGF0aWMgaW50IG5vcG5wOwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZWwzX2NvbW1vbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBfX2RldmluaXQgZWwzX2NvbW1vbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZWwzX2NvbW1vbl9yZW1vdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdXNob3J0IGlkX3JlYWRfZWVwcm9tKGludCBpbmRleCk7CiBzdGF0aWMgdXNob3J0IHJlYWRfZWVwcm9tKGludCBpb2FkZHIsIGludCBpbmRleCk7CkBAIC0zOTUsNyArMzk1LDcgQEAKIHN0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CiAKICNpZmRlZiBDT05GSUdfUE5QCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgZWwzX3BucF9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RldmljZV9pZCBlbDNfcG5wX2lkc1tdID0gewogCXsgLmlkID0gIlRDTTUwOTAiIH0sIC8qIDNDb20gRXRoZXJsaW5rIElJSSAoVFApICovCiAJeyAuaWQgPSAiVENNNTA5MSIgfSwgLyogM0NvbSBFdGhlcmxpbmsgSUlJICovCiAJeyAuaWQgPSAiVENNNTA5NCIgfSwgLyogM0NvbSBFdGhlcmxpbmsgSUlJIChjb21ibykgKi8KQEAgLTQ3OCw3ICs0NzgsNyBAQAogI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGVsM19laXNhX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIHN0cnVjdCBlaXNhX2RldmljZV9pZCBlbDNfZWlzYV9pZHNbXSA9IHsKIAkJeyAiVENNNTA5MCIgfSwKIAkJeyAiVENNNTA5MSIgfSwKIAkJeyAiVENNNTA5MiIgfSwKQEAgLTUwOCw3ICs1MDgsNyBAQAogI2lmZGVmIENPTkZJR19NQ0EKIHN0YXRpYyBpbnQgZWwzX21jYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgY29uc3Qgc2hvcnQgZWwzX21jYV9hZGFwdGVyX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIHNob3J0IGVsM19tY2FfYWRhcHRlcl9pZHNbXSBfX2luaXRkYXRhID0gewogCQkweDYyN2MsCiAJCTB4NjI3ZCwKIAkJMHg2MmRiLApAQCAtNTE3LDcgKzUxNyw3IEBACiAJCTB4MDAwMAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGVsM19tY2FfYWRhcHRlcl9uYW1lc1tdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIGNoYXIgKmVsM19tY2FfYWRhcHRlcl9uYW1lc1tdIF9faW5pdGRhdGEgPSB7CiAJCSIzQ29tIDNjNTI5IEV0aGVyTGluayBJSUkgKDEwYmFzZTIpIiwKIAkJIjNDb20gM2M1MjkgRXRoZXJMaW5rIElJSSAoMTBiYXNlVCkiLAogCQkiM0NvbSAzYzUyOSBFdGhlckxpbmsgSUlJICh0ZXN0IG1vZGUpIiwKQEAgLTYwMSw3ICs2MDEsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX01DQQotc3RhdGljIGludCBfX2RldmluaXQgZWwzX21jYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBlbDNfbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAkvKiBCYXNlZCBvbiBFcmlrIE55Z3JlbidzIChueWdyZW5AbWl0LmVkdSkgM2M1MjkgcGF0Y2gsCiAJICogaGVhdmlseSBtb2RpZmllZCBieSBDaHJpcyBCZWF1cmVnYXJkCkBAIC02NzEsNyArNjcxLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfTUNBICovCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2RldmluaXQgZWwzX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IGVsM19laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJc2hvcnQgaTsKIAlpbnQgaW9hZGRyLCBpcnEsIGlmX3BvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzU5eC5jIGIvZHJpdmVycy9uZXQvM2M1OXguYwppbmRleCA5OWY0M2QyLi44Y2MyMjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzU5eC5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKQEAgLTkwMSwxNCArOTAxLDE0IEBACiAjZW5kaWYgLyogIUNPTkZJR19QTSAqLwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgdm9ydGV4X2Vpc2FfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIHZvcnRleF9laXNhX2lkc1tdID0gewogCXsgIlRDTTU5MjAiLCBDSF8zQzU5MiB9LAogCXsgIlRDTTU5NzAiLCBDSF8zQzU5NyB9LAogCXsgIiIgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoZWlzYSwgdm9ydGV4X2Vpc2FfaWRzKTsKIAotc3RhdGljIGludCBfX2RldmluaXQgdm9ydGV4X2Vpc2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgdm9ydGV4X2Vpc2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCXZvaWQgX19pb21lbSAqaW9hZGRyOwogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwppbmRleCAwYzkyMTdmLi43YjNlMjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCkBAIC01MCw3ICs1MCw3IEBACiAjaWZkZWYgX19hcm1fXwogc3RhdGljIHZvaWQgd3JpdGVfcnJlZyh1X2xvbmcgYmFzZSwgdV9pbnQgcmVnLCB1X2ludCB2YWwpCiB7Ci0JX19hc21fXygKKwlhc20gdm9sYXRpbGUoCiAJInN0ciU/aAklMSwgWyUyXQlAIE5FVF9SQVBcblx0IgogCSJzdHIlP2gJJTAsIFslMiwgIy00XQlAIE5FVF9SRFAiCiAJOgpAQCAtNjAsNyArNjAsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkX3JyZWcodV9sb25nIGJhc2VfYWRkciwgdV9pbnQgcmVnKQogewogCXVuc2lnbmVkIHNob3J0IHY7Ci0JX19hc21fXygKKwlhc20gdm9sYXRpbGUoCiAJInN0ciU/aAklMSwgWyUyXQlAIE5FVF9SQVBcblx0IgogCSJsZHIlP2gJJTAsIFslMiwgIy00XQlAIE5FVF9SRFAiCiAJOiAiPXIiICh2KQpAQCAtNzAsNyArNzAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfaXJlZyh1X2xvbmcgYmFzZSwgdV9pbnQgcmVnLCB1X2ludCB2YWwpCiB7Ci0JX19hc21fXygKKwlhc20gdm9sYXRpbGUoCiAJInN0ciU/aAklMSwgWyUyXQlAIE5FVF9SQVBcblx0IgogCSJzdHIlP2gJJTAsIFslMiwgIzhdCUAgTkVUX0lEUCIKIAk6CkBAIC04MCw3ICs4MCw3IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHJlYWRfaXJlZyh1X2xvbmcgYmFzZV9hZGRyLCB1X2ludCByZWcpCiB7CiAJdV9zaG9ydCB2OwotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBOQVRfUkFQXG5cdCIKIAkibGRyJT9oCSUwLCBbJTIsICM4XQlAIE5FVF9JRFBcblx0IgogCTogIj1yIiAodikKQEAgLTkxLDQ3ICs5MSw0OCBAQAogI2RlZmluZSBhbV93cml0ZXdvcmQoZGV2LG9mZix2YWwpIF9fcmF3X3dyaXRldyh2YWwsIElTQU1FTV9CQVNFICsgKChvZmYpIDw8IDEpKQogI2RlZmluZSBhbV9yZWFkd29yZChkZXYsb2ZmKSAgICAgIF9fcmF3X3JlYWR3KElTQU1FTV9CQVNFICsgKChvZmYpIDw8IDEpKQogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBhbV93cml0ZWJ1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2ludCBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKIAlvZmZzZXQgPSBJU0FNRU1fQkFTRSArIChvZmZzZXQgPDwgMSk7CiAJbGVuZ3RoID0gKGxlbmd0aCArIDEpICYgfjE7CiAJaWYgKChpbnQpYnVmICYgMikgewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RyJT9oCSUyLCBbJTBdLCAjNCIKKwkJYXNtIHZvbGF0aWxlKCJzdHIlP2gJJTIsIFslMF0sICM0IgogCQkgOiAiPSZyIiAob2Zmc2V0KSA6ICIwIiAob2Zmc2V0KSwgInIiIChidWZbMF0gfCAoYnVmWzFdIDw8IDgpKSk7CiAJCWJ1ZiArPSAyOwogCQlsZW5ndGggLT0gMjsKIAl9CiAJd2hpbGUgKGxlbmd0aCA+IDgpIHsKLQkJdW5zaWduZWQgaW50IHRtcCwgdG1wMjsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQkibGRtJT9pYQklMSEsIHslMiwgJTN9XG5cdCIKKwkJcmVnaXN0ZXIgdW5zaWduZWQgaW50IHRtcCBhc20oInIyIiksIHRtcDIgYXNtKCJyMyIpOworCQlhc20gdm9sYXRpbGUoCisJCQkibGRtJT9pYQklMCEsIHslMSwgJTJ9IgorCQkJOiAiK3IiIChidWYpLCAiPSZyIiAodG1wKSwgIj0mciIgKHRtcDIpKTsKKwkJbGVuZ3RoIC09IDg7CisJCWFzbSB2b2xhdGlsZSgKKwkJCSJzdHIlP2gJJTEsIFslMF0sICM0XG5cdCIKKwkJCSJtb3YlPwklMSwgJTEsIGxzciAjMTZcblx0IgorCQkJInN0ciU/aAklMSwgWyUwXSwgIzRcblx0IgogCQkJInN0ciU/aAklMiwgWyUwXSwgIzRcblx0IgogCQkJIm1vdiU/CSUyLCAlMiwgbHNyICMxNlxuXHQiCi0JCQkic3RyJT9oCSUyLCBbJTBdLCAjNFxuXHQiCi0JCQkic3RyJT9oCSUzLCBbJTBdLCAjNFxuXHQiCi0JCQkibW92JT8JJTMsICUzLCBsc3IgIzE2XG5cdCIKLQkJCSJzdHIlP2gJJTMsIFslMF0sICM0IgotCQk6ICI9JnIiIChvZmZzZXQpLCAiPSZyIiAoYnVmKSwgIj1yIiAodG1wKSwgIj1yIiAodG1wMikKLQkJOiAiMCIgKG9mZnNldCksICIxIiAoYnVmKSk7Ci0JCWxlbmd0aCAtPSA4OworCQkJInN0ciU/aAklMiwgWyUwXSwgIzQiCisJCTogIityIiAob2Zmc2V0KSwgIj0mciIgKHRtcCksICI9JnIiICh0bXAyKSk7CiAJfQogCXdoaWxlIChsZW5ndGggPiAwKSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHIlP2gJJTIsIFslMF0sICM0IgorCQlhc20gdm9sYXRpbGUoInN0ciU/aAklMiwgWyUwXSwgIzQiCiAJCSA6ICI9JnIiIChvZmZzZXQpIDogIjAiIChvZmZzZXQpLCAiciIgKGJ1ZlswXSB8IChidWZbMV0gPDwgOCkpKTsKIAkJYnVmICs9IDI7CiAJCWxlbmd0aCAtPSAyOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogYW1fcmVhZGJ1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2ludCBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKIAlvZmZzZXQgPSBJU0FNRU1fQkFTRSArIChvZmZzZXQgPDwgMSk7CiAJbGVuZ3RoID0gKGxlbmd0aCArIDEpICYgfjE7CiAJaWYgKChpbnQpYnVmICYgMikgewogCQl1bnNpZ25lZCBpbnQgdG1wOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJYXNtIHZvbGF0aWxlKAogCQkJImxkciU/aAklMiwgWyUwXSwgIzRcblx0IgogCQkJInN0ciU/YgklMiwgWyUxXSwgIzFcblx0IgogCQkJIm1vdiU/CSUyLCAlMiwgbHNyICM4XG5cdCIKQEAgLTE0MCwxMiArMTQxLDEyIEBACiAJCWxlbmd0aCAtPSAyOwogCX0KIAl3aGlsZSAobGVuZ3RoID4gOCkgewotCQl1bnNpZ25lZCBpbnQgdG1wLCB0bXAyLCB0bXAzOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJcmVnaXN0ZXIgdW5zaWduZWQgaW50IHRtcCBhc20oInIyIiksIHRtcDIgYXNtKCJyMyIpLCB0bXAzOworCQlhc20gdm9sYXRpbGUoCiAJCQkibGRyJT9oCSUyLCBbJTBdLCAjNFxuXHQiCisJCQkibGRyJT9oCSU0LCBbJTBdLCAjNFxuXHQiCiAJCQkibGRyJT9oCSUzLCBbJTBdLCAjNFxuXHQiCi0JCQkib3JyJT8JJTIsICUyLCAlMywgbHNsICMxNlxuXHQiCi0JCQkibGRyJT9oCSUzLCBbJTBdLCAjNFxuXHQiCisJCQkib3JyJT8JJTIsICUyLCAlNCwgbHNsICMxNlxuXHQiCiAJCQkibGRyJT9oCSU0LCBbJTBdLCAjNFxuXHQiCiAJCQkib3JyJT8JJTMsICUzLCAlNCwgbHNsICMxNlxuXHQiCiAJCQkic3RtJT9pYQklMSEsIHslMiwgJTN9IgpAQCAtMTU1LDcgKzE1Niw3IEBACiAJfQogCXdoaWxlIChsZW5ndGggPiAwKSB7CiAJCXVuc2lnbmVkIGludCB0bXA7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQlhc20gdm9sYXRpbGUoCiAJCQkibGRyJT9oCSUyLCBbJTBdLCAjNFxuXHQiCiAJCQkic3RyJT9iCSUyLCBbJTFdLCAjMVxuXHQiCiAJCQkibW92JT8JJTIsICUyLCBsc3IgIzhcblx0IgpAQCAtMTk2LDYgKzE5Nyw0MiBAQAogCXJldHVybiBlcnJvcmNvdW50OwogfQogCitzdGF0aWMgdm9pZCBhbTc5Yzk2MV9tY19oYXNoKGNoYXIgKmFkZHIsIHUxNiAqaGFzaCkKK3sKKwlpZiAoYWRkclswXSAmIDB4MDEpIHsKKwkJaW50IGlkeCwgYml0OworCQl1MzIgY3JjOworCisJCWNyYyA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgYWRkcik7CisKKwkJaWR4ID0gY3JjID4+IDMwOworCQliaXQgPSAoY3JjID4+IDI2KSAmIDE1OworCisJCWhhc2hbaWR4XSB8PSAxIDw8IGJpdDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYW03OWM5NjFfZ2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2ICpoYXNoKQoreworCXVuc2lnbmVkIGludCBtb2RlID0gTU9ERV9QT1JUXzEwQlQ7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCW1vZGUgfD0gTU9ERV9QUk9NSVNDOworCQltZW1zZXQoaGFzaCwgMHhmZiwgNCAqIHNpemVvZigqaGFzaCkpOworCX0gZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQltZW1zZXQoaGFzaCwgMHhmZiwgNCAqIHNpemVvZigqaGFzaCkpOworCX0gZWxzZSB7CisJCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisKKwkJbWVtc2V0KGhhc2gsIDAsIDQgKiBzaXplb2YoKmhhc2gpKTsKKworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KQorCQkJYW03OWM5NjFfbWNfaGFzaChoYS0+YWRkciwgaGFzaCk7CisJfQorCisJcmV0dXJuIG1vZGU7Cit9CisKIHN0YXRpYyB2b2lkCiBhbTc5Yzk2MV9pbml0X2Zvcl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yMDMsNiArMjQwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgKnA7CiAJdV9pbnQgaGRyX2FkZHIsIGZpcnN0X2ZyZWVfYWRkcjsKKwl1MTYgbXVsdGlfaGFzaFs0XSwgbW9kZSA9IGFtNzljOTYxX2dldF9yeF9tb2RlKGRldiwgbXVsdGlfaGFzaCk7CiAJaW50IGk7CiAKIAkvKgpAQCAtMjE4LDE2ICsyNTYsMTIgQEAKIAl3cml0ZV9pcmVnIChkZXYtPmJhc2VfYWRkciwgMiwgMHgwMDAwKTsgLyogTU9ERSByZWdpc3RlciBzZWxlY3RzIG1lZGlhICovCiAKIAlmb3IgKGkgPSBMQURSTDsgaSA8PSBMQURSSDsgaSsrKQotCQl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgaSwgMCk7CisJCXdyaXRlX3JyZWcgKGRldi0+YmFzZV9hZGRyLCBpLCBtdWx0aV9oYXNoW2kgLSBMQURSTF0pOwogCiAJZm9yIChpID0gUEFEUkwsIHAgPSBkZXYtPmRldl9hZGRyOyBpIDw9IFBBRFJIOyBpKyssIHAgKz0gMikKIAkJd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIGksIHBbMF0gfCAocFsxXSA8PCA4KSk7CiAKLQlpID0gTU9ERV9QT1JUXzEwQlQ7Ci0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLQkJaSB8PSBNT0RFX1BST01JU0M7Ci0KLQl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgTU9ERSwgaSk7CisJd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIE1PREUsIG1vZGUpOwogCXdyaXRlX3JyZWcgKGRldi0+YmFzZV9hZGRyLCBQT0xMSU5ULCAwKTsKIAl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgU0laRVJYUiwgLVJYX0JVRkZFUlMpOwogCXdyaXRlX3JyZWcgKGRldi0+YmFzZV9hZGRyLCBTSVpFVFhSLCAtVFhfQlVGRkVSUyk7CkBAIC0zNDAsMjEgKzM3NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFtNzljOTYxX21jX2hhc2goY2hhciAqYWRkciwgdW5zaWduZWQgc2hvcnQgKmhhc2gpCi17Ci0JaWYgKGFkZHJbMF0gJiAweDAxKSB7Ci0JCWludCBpZHgsIGJpdDsKLQkJdTMyIGNyYzsKLQotCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGFkZHIpOwotCi0JCWlkeCA9IGNyYyA+PiAzMDsKLQkJYml0ID0gKGNyYyA+PiAyNikgJiAxNTsKLQotCQloYXNoW2lkeF0gfD0gMSA8PCBiaXQ7Ci0JfQotfQotCiAvKgogICogU2V0IG9yIGNsZWFyIHByb21pc2N1b3VzL211bHRpY2FzdCBtb2RlIGZpbHRlciBmb3IgdGhpcyBhZGFwdGVyLgogICovCkBAIC0zNjIsMjQgKzM4MSw5IEBACiB7CiAJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHNob3J0IG11bHRpX2hhc2hbNF0sIG1vZGU7CisJdTE2IG11bHRpX2hhc2hbNF0sIG1vZGUgPSBhbTc5Yzk2MV9nZXRfcnhfbW9kZShkZXYsIG11bHRpX2hhc2gpOwogCWludCBpLCBzdG9wcGVkOwogCi0JbW9kZSA9IE1PREVfUE9SVF8xMEJUOwotCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCQltb2RlIHw9IE1PREVfUFJPTUlTQzsKLQl9IGVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKLQkJbWVtc2V0KG11bHRpX2hhc2gsIDB4ZmYsIHNpemVvZihtdWx0aV9oYXNoKSk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKLQotCQltZW1zZXQobXVsdGlfaGFzaCwgMHgwMCwgc2l6ZW9mKG11bHRpX2hhc2gpKTsKLQotCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KQotCQkJYW03OWM5NjFfbWNfaGFzaChoYS0+YWRkciwgbXVsdGlfaGFzaCk7Ci0JfQotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmNoaXBfbG9jaywgZmxhZ3MpOwogCiAJc3RvcHBlZCA9IHJlYWRfcnJlZyhkZXYtPmJhc2VfYWRkciwgQ1NSMCkgJiBDU1IwX1NUT1A7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwppbmRleCA1YTc3MDAxLi4wYjQ2YjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTI4MywxMCArMjgzLDE0IEBACiAKIAkJc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGggKyAyKTsKIAkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKKwkJCXN0cnVjdCBlcDkzeHhfcmRlc2MgKnJ4ZCA9ICZlcC0+ZGVzY3MtPnJkZXNjW2VudHJ5XTsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgMik7Ci0JCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShOVUxMLCBlcC0+ZGVzY3MtPnJkZXNjW2VudHJ5XS5idWZfYWRkciwKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldi0+ZGV2LnBhcmVudCwgcnhkLT5idWZfYWRkciwKIAkJCQkJCWxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKIAkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgZXAtPnJ4X2J1ZltlbnRyeV0sIGxlbmd0aCk7CisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYtPmRldi5wYXJlbnQsCisJCQkJCQkgICByeGQtPmJ1Zl9hZGRyLCBsZW5ndGgsCisJCQkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOwogCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCkBAIC0zNDgsNiArMzUyLDcgQEAKIHN0YXRpYyBpbnQgZXA5M3h4X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZXA5M3h4X3RkZXNjICp0eGQ7CiAJaW50IGVudHJ5OwogCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gTUFYX1BLVF9TSVpFKSkgewpAQCAtMzU5LDExICszNjQsMTQgQEAKIAllbnRyeSA9IGVwLT50eF9wb2ludGVyOwogCWVwLT50eF9wb2ludGVyID0gKGVwLT50eF9wb2ludGVyICsgMSkgJiAoVFhfUVVFVUVfRU5UUklFUyAtIDEpOwogCi0JZXAtPmRlc2NzLT50ZGVzY1tlbnRyeV0udGRlc2MxID0KLQkJVERFU0MxX0VPRiB8IChlbnRyeSA8PCAxNikgfCAoc2tiLT5sZW4gJiAweGZmZik7CisJdHhkID0gJmVwLT5kZXNjcy0+dGRlc2NbZW50cnldOworCisJdHhkLT50ZGVzYzEgPSBUREVTQzFfRU9GIHwgKGVudHJ5IDw8IDE2KSB8IChza2ItPmxlbiAmIDB4ZmZmKTsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYtPmRldi5wYXJlbnQsIHR4ZC0+YnVmX2FkZHIsIHNrYi0+bGVuLAorCQkJCURNQV9UT19ERVZJQ0UpOwogCXNrYl9jb3B5X2FuZF9jc3VtX2Rldihza2IsIGVwLT50eF9idWZbZW50cnldKTsKLQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShOVUxMLCBlcC0+ZGVzY3MtPnRkZXNjW2VudHJ5XS5idWZfYWRkciwKLQkJCQlza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LT5kZXYucGFyZW50LCB0eGQtPmJ1Zl9hZGRyLCBza2ItPmxlbiwKKwkJCQkgICBETUFfVE9fREVWSUNFKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAlzcGluX2xvY2tfaXJxKCZlcC0+dHhfcGVuZGluZ19sb2NrKTsKQEAgLTQ1Nyw4OSArNDY1LDgwIEBACiAKIHN0YXRpYyB2b2lkIGVwOTN4eF9mcmVlX2J1ZmZlcnMoc3RydWN0IGVwOTN4eF9wcml2ICplcCkKIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBlcC0+ZGV2LT5kZXYucGFyZW50OwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IFJYX1FVRVVFX0VOVFJJRVM7IGkgKz0gMikgeworCWZvciAoaSA9IDA7IGkgPCBSWF9RVUVVRV9FTlRSSUVTOyBpKyspIHsKIAkJZG1hX2FkZHJfdCBkOwogCiAJCWQgPSBlcC0+ZGVzY3MtPnJkZXNjW2ldLmJ1Zl9hZGRyOwogCQlpZiAoZCkKLQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgZCwgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGQsIFBLVF9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAogCQlpZiAoZXAtPnJ4X2J1ZltpXSAhPSBOVUxMKQotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWVwLT5yeF9idWZbaV0pOworCQkJa2ZyZWUoZXAtPnJ4X2J1ZltpXSk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IFRYX1FVRVVFX0VOVFJJRVM7IGkgKz0gMikgeworCWZvciAoaSA9IDA7IGkgPCBUWF9RVUVVRV9FTlRSSUVTOyBpKyspIHsKIAkJZG1hX2FkZHJfdCBkOwogCiAJCWQgPSBlcC0+ZGVzY3MtPnRkZXNjW2ldLmJ1Zl9hZGRyOwogCQlpZiAoZCkKLQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgZCwgUEFHRV9TSVpFLCBETUFfVE9fREVWSUNFKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkLCBQS1RfQlVGX1NJWkUsIERNQV9UT19ERVZJQ0UpOwogCiAJCWlmIChlcC0+dHhfYnVmW2ldICE9IE5VTEwpCi0JCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZXAtPnR4X2J1ZltpXSk7CisJCQlrZnJlZShlcC0+dHhfYnVmW2ldKTsKIAl9CiAKLQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBzaXplb2Yoc3RydWN0IGVwOTN4eF9kZXNjcyksIGVwLT5kZXNjcywKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgZXA5M3h4X2Rlc2NzKSwgZXAtPmRlc2NzLAogCQkJCQkJCWVwLT5kZXNjc19kbWFfYWRkcik7CiB9CiAKLS8qCi0gKiBUaGUgaGFyZHdhcmUgZW5mb3JjZXMgYSBzdWItMksgbWF4aW11bSBwYWNrZXQgc2l6ZSwgc28gd2UgcHV0Ci0gKiB0d28gYnVmZmVycyBvbiBldmVyeSBoYXJkd2FyZSBwYWdlLgotICovCiBzdGF0aWMgaW50IGVwOTN4eF9hbGxvY19idWZmZXJzKHN0cnVjdCBlcDkzeHhfcHJpdiAqZXApCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZXAtPmRldi0+ZGV2LnBhcmVudDsKIAlpbnQgaTsKIAotCWVwLT5kZXNjcyA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBzaXplb2Yoc3RydWN0IGVwOTN4eF9kZXNjcyksCi0JCQkJJmVwLT5kZXNjc19kbWFfYWRkciwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWVwLT5kZXNjcyA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgZXA5M3h4X2Rlc2NzKSwKKwkJCQkmZXAtPmRlc2NzX2RtYV9hZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoZXAtPmRlc2NzID09IE5VTEwpCiAJCXJldHVybiAxOwogCi0JZm9yIChpID0gMDsgaSA8IFJYX1FVRVVFX0VOVFJJRVM7IGkgKz0gMikgewotCQl2b2lkICpwYWdlOworCWZvciAoaSA9IDA7IGkgPCBSWF9RVUVVRV9FTlRSSUVTOyBpKyspIHsKKwkJdm9pZCAqYnVmOwogCQlkbWFfYWRkcl90IGQ7CiAKLQkJcGFnZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQkJaWYgKHBhZ2UgPT0gTlVMTCkKKwkJYnVmID0ga21hbGxvYyhQS1RfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmID09IE5VTEwpCiAJCQlnb3RvIGVycjsKIAotCQlkID0gZG1hX21hcF9zaW5nbGUoTlVMTCwgcGFnZSwgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoTlVMTCwgZCkpIHsKLQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYWdlKTsKKwkJZCA9IGRtYV9tYXBfc2luZ2xlKGRldiwgYnVmLCBQS1RfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGQpKSB7CisJCQlrZnJlZShidWYpOwogCQkJZ290byBlcnI7CiAJCX0KIAotCQllcC0+cnhfYnVmW2ldID0gcGFnZTsKKwkJZXAtPnJ4X2J1ZltpXSA9IGJ1ZjsKIAkJZXAtPmRlc2NzLT5yZGVzY1tpXS5idWZfYWRkciA9IGQ7CiAJCWVwLT5kZXNjcy0+cmRlc2NbaV0ucmRlc2MxID0gKGkgPDwgMTYpIHwgUEtUX0JVRl9TSVpFOwotCi0JCWVwLT5yeF9idWZbaSArIDFdID0gcGFnZSArIFBLVF9CVUZfU0laRTsKLQkJZXAtPmRlc2NzLT5yZGVzY1tpICsgMV0uYnVmX2FkZHIgPSBkICsgUEtUX0JVRl9TSVpFOwotCQllcC0+ZGVzY3MtPnJkZXNjW2kgKyAxXS5yZGVzYzEgPSAoKGkgKyAxKSA8PCAxNikgfCBQS1RfQlVGX1NJWkU7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IFRYX1FVRVVFX0VOVFJJRVM7IGkgKz0gMikgewotCQl2b2lkICpwYWdlOworCWZvciAoaSA9IDA7IGkgPCBUWF9RVUVVRV9FTlRSSUVTOyBpKyspIHsKKwkJdm9pZCAqYnVmOwogCQlkbWFfYWRkcl90IGQ7CiAKLQkJcGFnZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQkJaWYgKHBhZ2UgPT0gTlVMTCkKKwkJYnVmID0ga21hbGxvYyhQS1RfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmID09IE5VTEwpCiAJCQlnb3RvIGVycjsKIAotCQlkID0gZG1hX21hcF9zaW5nbGUoTlVMTCwgcGFnZSwgUEFHRV9TSVpFLCBETUFfVE9fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKE5VTEwsIGQpKSB7Ci0JCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7CisJCWQgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGJ1ZiwgUEtUX0JVRl9TSVpFLCBETUFfVE9fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZCkpIHsKKwkJCWtmcmVlKGJ1Zik7CiAJCQlnb3RvIGVycjsKIAkJfQogCi0JCWVwLT50eF9idWZbaV0gPSBwYWdlOworCQllcC0+dHhfYnVmW2ldID0gYnVmOwogCQllcC0+ZGVzY3MtPnRkZXNjW2ldLmJ1Zl9hZGRyID0gZDsKLQotCQllcC0+dHhfYnVmW2kgKyAxXSA9IHBhZ2UgKyBQS1RfQlVGX1NJWkU7Ci0JCWVwLT5kZXNjcy0+dGRlc2NbaSArIDFdLmJ1Zl9hZGRyID0gZCArIFBLVF9CVUZfU0laRTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTgyOSw2ICs4MjgsNyBAQAogCX0KIAllcCA9IG5ldGRldl9wcml2KGRldik7CiAJZXAtPmRldiA9IGRldjsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCW5ldGlmX25hcGlfYWRkKGRldiwgJmVwLT5uYXBpLCBlcDkzeHhfcG9sbCwgNjQpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDE3YjRkZDkuLjY1MmIzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMzg4LDYgKzM4OCw4IEBACiAJcmV0dXJuIG5leHQ7CiB9CiAKKyNkZWZpbmUgYm9uZF9xdWV1ZV9tYXBwaW5nKHNrYikgKCoodTE2ICopKChza2IpLT5jYikpCisKIC8qKgogICogYm9uZF9kZXZfcXVldWVfeG1pdCAtIFByZXBhcmUgc2tiIGZvciB4bWl0LgogICoKQEAgLTQwMCw2ICs0MDIsOSBAQAogewogCXNrYi0+ZGV2ID0gc2xhdmVfZGV2OwogCXNrYi0+cHJpb3JpdHkgPSAxOworCisJc2tiLT5xdWV1ZV9tYXBwaW5nID0gYm9uZF9xdWV1ZV9tYXBwaW5nKHNrYik7CisKIAlpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKHNsYXZlX2RldikpKQogCQlib25kX25ldHBvbGxfc2VuZF9za2IoYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2RldiksIHNrYik7CiAJZWxzZQpAQCAtNDIwNiw2ICs0MjExLDcgQEAKIAlyZXR1cm4gcmVzOwogfQogCisKIHN0YXRpYyB1MTYgYm9uZF9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKgpAQCAtNDIxNiw2ICs0MjIyLDExIEBACiAJICovCiAJdTE2IHR4cSA9IHNrYl9yeF9xdWV1ZV9yZWNvcmRlZChza2IpID8gc2tiX2dldF9yeF9xdWV1ZShza2IpIDogMDsKIAorCS8qCisJICogU2F2ZSB0aGUgb3JpZ2luYWwgdHhxIHRvIHJlc3RvcmUgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGRyaXZlcgorCSAqLworCWJvbmRfcXVldWVfbWFwcGluZyhza2IpID0gc2tiLT5xdWV1ZV9tYXBwaW5nOworCiAJaWYgKHVubGlrZWx5KHR4cSA+PSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcykpIHsKIAkJZG8gewogCQkJdHhxIC09IGRldi0+cmVhbF9udW1fdHhfcXVldWVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NlcmlhbC5jIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NlcmlhbC5jCmluZGV4IDczYzdlMDMuLjNkZjBjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zZXJpYWwuYworKysgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc2VyaWFsLmMKQEAgLTE2Nyw4ICsxNjcsOCBAQAogCiAjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVkIGludCBsZGlzY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IHU4ICpkYXRhLCBjaGFyICpmbGFncywgaW50IGNvdW50KQorc3RhdGljIHZvaWQgbGRpc2NfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqZGF0YSwKKwkJCWNoYXIgKmZsYWdzLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJc3RydWN0IHNlcl9kZXZpY2UgKnNlcjsKQEAgLTIxNSw4ICsyMTUsNiBAQAogCX0gZWxzZQogCQkrK3Nlci0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkOwogCXVwZGF0ZV90dHlfc3RhdHVzKHNlcik7Ci0KLQlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX3R4KHN0cnVjdCBzZXJfZGV2aWNlICpzZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZmxleGNhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2ZsZXhjYW4uYwppbmRleCBkNDk5MDU2Li4xNzY3ODExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vZmxleGNhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9mbGV4Y2FuLmMKQEAgLTkyMyw3ICs5MjMsNyBAQAogCW1lbV9zaXplID0gcmVzb3VyY2Vfc2l6ZShtZW0pOwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIG1lbV9zaXplLCBwZGV2LT5uYW1lKSkgewogCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZmFpbGVkX3JlcTsKKwkJZ290byBmYWlsZWRfZ2V0OwogCX0KIAogCWJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbV9zaXplKTsKQEAgLTk3Nyw5ICs5NzcsOCBAQAogCWlvdW5tYXAoYmFzZSk7CiAgZmFpbGVkX21hcDoKIAlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgbWVtX3NpemUpOwotIGZhaWxlZF9yZXE6Ci0JY2xrX3B1dChjbGspOwogIGZhaWxlZF9nZXQ6CisJY2xrX3B1dChjbGspOwogIGZhaWxlZF9jbG9jazoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vc2xjYW4uYwppbmRleCA3NTYyMmQ1Li4xYjQ5ZGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc2xjYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vc2xjYW4uYwpAQCAtNDI1LDE3ICs0MjUsMTYgQEAKICAqIGluIHBhcmFsbGVsCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBzbGNhbl9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorc3RhdGljIHZvaWQgc2xjYW5fcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCBzbGNhbiAqc2wgPSAoc3RydWN0IHNsY2FuICopIHR0eS0+ZGlzY19kYXRhOwotCWludCBieXRlcyA9IGNvdW50OwogCiAJaWYgKCFzbCB8fCBzbC0+bWFnaWMgIT0gU0xDQU5fTUFHSUMgfHwgIW5ldGlmX3J1bm5pbmcoc2wtPmRldikpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm47CiAKIAkvKiBSZWFkIHRoZSBjaGFyYWN0ZXJzIG91dCBvZiB0aGUgYnVmZmVyICovCi0Jd2hpbGUgKGJ5dGVzLS0pIHsKKwl3aGlsZSAoY291bnQtLSkgewogCQlpZiAoZnAgJiYgKmZwKyspIHsKIAkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpKQogCQkJCXNsLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwpAQCAtNDQ0LDggKzQ0Myw2IEBACiAJCX0KIAkJc2xjYW5fdW5lc2Moc2wsICpjcCsrKTsKIAl9Ci0KLQlyZXR1cm4gY291bnQ7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKaW5kZXggMjlhNGYwNi4uZGNjNGExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKQEAgLTE3ODEsOCArMTc4MSw4IEBACiAJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZW1hY19wcml2KSk7CiAJaWYgKCFuZGV2KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIGFsbG9jYXRpbmcgbmV0X2RldmljZVxuIik7Ci0JCWNsa19wdXQoZW1hY19jbGspOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfY2xrOwogCX0KIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOwpAQCAtMTc5Niw3ICsxNzk2LDggQEAKIAlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmICghcGRhdGEpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gcHJvYmVfcXVpdDsKIAl9CiAKIAkvKiBNQUMgYWRkciBhbmQgUEhZIG1hc2sgLCBSTUlJIGVuYWJsZSBpbmZvIGZyb20gcGxhdGZvcm1fZGF0YSAqLwpAQCAtMTkyOSw4ICsxOTMwLDkgQEAKIAlpb3VubWFwKHByaXYtPnJlbWFwX2FkZHIpOwogCiBwcm9iZV9xdWl0OgotCWNsa19wdXQoZW1hY19jbGspOwogCWZyZWVfbmV0ZGV2KG5kZXYpOworZnJlZV9jbGs6CisJY2xrX3B1dChlbWFjX2Nsayk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCAxNzY1NDA1Li44YjAwODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTMzMSwxOCArMzMxLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFNDIyIixcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiJ9CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZXBjYV9zaWduYXR1cmVbXSBfX2RldmluaXRjb25zdCA9IERFUENBX1NJR05BVFVSRTsKK3N0YXRpYyBjaGFyKiBfX2luaXRkYXRhIGRlcGNhX3NpZ25hdHVyZVtdID0gREVQQ0FfU0lHTkFUVVJFOwogCiBlbnVtIGRlcGNhX3R5cGUgewogCURFUENBLCBkZTEwMCwgZGUxMDEsIGRlMjAwLCBkZTIwMSwgZGUyMDIsIGRlMjEwLCBkZTIxMiwgZGU0MjIsIHVua25vd24KIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyIGRlcGNhX3N0cmluZ1tdID0gImRlcGNhIjsKK3N0YXRpYyBjaGFyIGRlcGNhX3N0cmluZ1tdID0gImRlcGNhIjsKIAogc3RhdGljIGludCBkZXBjYV9kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZGVwY2FfZWlzYV9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZGVwY2FfZWlzYV9pZHNbXSA9IHsKIAl7ICJERUM0MjIwIiwgZGU0MjIgfSwKIAl7ICIiIH0KIH07CkBAIC0zNjcsMTkgKzM2NywxOSBAQAogI2RlZmluZSBERTIxMF9JRCAweDYyOGQKICNkZWZpbmUgREUyMTJfSUQgMHg2ZGVmCiAKLXN0YXRpYyBjb25zdCBzaG9ydCBkZXBjYV9tY2FfYWRhcHRlcl9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzaG9ydCBkZXBjYV9tY2FfYWRhcHRlcl9pZHNbXSA9IHsKIAlERTIxMF9JRCwKIAlERTIxMl9JRCwKIAkweDAwMDAKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpkZXBjYV9tY2FfYWRhcHRlcl9uYW1lW10gPSB7CitzdGF0aWMgY2hhciAqZGVwY2FfbWNhX2FkYXB0ZXJfbmFtZVtdID0gewogCSJERUMgRXRoZXJXT1JLUyBNQyBBZGFwdGVyIChERTIxMCkiLAogCSJERUMgRXRoZXJXT1JLUyBNQyBBZGFwdGVyIChERTIxMikiLAogCU5VTEwKIH07CiAKLXN0YXRpYyBjb25zdCBlbnVtIGRlcGNhX3R5cGUgZGVwY2FfbWNhX2FkYXB0ZXJfdHlwZVtdID0geworc3RhdGljIGVudW0gZGVwY2FfdHlwZSBkZXBjYV9tY2FfYWRhcHRlcl90eXBlW10gPSB7CiAJZGUyMTAsCiAJZGUyMTIsCiAJMApAQCAtNTQxLDkgKzU0MSwxMCBAQAogc3RhdGljIGludCBsb2FkX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIGRlcGNhX2RiZ19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgY29uc3QgdV9jaGFyIGRlMXh4X2lycVtdIF9fZGV2aW5pdGNvbnN0ID0geyAyLCAzLCA0LCA1LCA3LCA5LCAwIH07Ci1zdGF0aWMgY29uc3QgdV9jaGFyIGRlMnh4X2lycVtdIF9fZGV2aW5pdGNvbnN0ID0geyA1LCA5LCAxMCwgMTEsIDE1LCAwIH07Ci1zdGF0aWMgY29uc3QgdV9jaGFyIGRlNDIyX2lycVtdIF9fZGV2aW5pdGNvbnN0ID0geyA1LCA5LCAxMCwgMTEsIDAgfTsKK3N0YXRpYyB1X2NoYXIgZGUxeHhfaXJxW10gX19pbml0ZGF0YSA9IHsgMiwgMywgNCwgNSwgNywgOSwgMCB9Oworc3RhdGljIHVfY2hhciBkZTJ4eF9pcnFbXSBfX2luaXRkYXRhID0geyA1LCA5LCAxMCwgMTEsIDE1LCAwIH07CitzdGF0aWMgdV9jaGFyIGRlNDIyX2lycVtdIF9faW5pdGRhdGEgPSB7IDUsIDksIDEwLCAxMSwgMCB9Oworc3RhdGljIHVfY2hhciAqZGVwY2FfaXJxOwogCiBzdGF0aWMgaW50IGlycTsKIHN0YXRpYyBpbnQgaW87CkBAIC01NzksNyArNTgwLDcgQEAKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGRlcGNhX2h3X2luaXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IGRlcGNhX2h3X2luaXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGVwY2FfcHJpdmF0ZSAqbHA7CiAJaW50IGksIGosIG9mZnNldCwgbmV0UkFNLCBtZW1fbGVuLCBzdGF0dXMgPSAwOwpAQCAtNzQ3LDcgKzc0OCw2IEBACiAJaWYgKGRldi0+aXJxIDwgMikgewogCQl1bnNpZ25lZCBjaGFyIGlycW51bTsKIAkJdW5zaWduZWQgbG9uZyBpcnFfbWFzaywgZGVsYXk7Ci0JCWNvbnN0IHVfY2hhciAqZGVwY2FfaXJxOwogCiAJCWlycV9tYXNrID0gcHJvYmVfaXJxX29uKCk7CiAKQEAgLTc3MCw3ICs3NzAsNiBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWRlcGNhX2lycSA9IE5VTEw7CiAJCQlicmVhazsJLyogTm90IHJlYWNoZWQgKi8KIAkJfQogCkBAIC0xMzAzLDcgKzEzMDIsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZGVwY2FfY29tbW9uX2luaXQgKHVfbG9uZyBpb2FkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2cCkKK3N0YXRpYyBpbnQgX19pbml0IGRlcGNhX2NvbW1vbl9pbml0ICh1X2xvbmcgaW9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldnApCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAKQEAgLTEzMzQsNyArMTMzMyw3IEBACiAvKgogKiogTWljcm9jaGFubmVsIGJ1cyBJL08gZGV2aWNlIHByb2JlCiAqLwotc3RhdGljIGludCBfX2RldmluaXQgZGVwY2FfbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IGRlcGNhX21jYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJdW5zaWduZWQgY2hhciBwb3NbMl07CiAJdW5zaWduZWQgY2hhciB3aGVyZTsKQEAgLTE0NTgsNyArMTQ1Nyw3IEBACiAqKiBJU0EgYnVzIEkvTyBkZXZpY2UgcHJvYmUKICovCiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBkZXBjYV9wbGF0Zm9ybV9wcm9iZSAodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBkZXBjYV9wbGF0Zm9ybV9wcm9iZSAodm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldjsKQEAgLTE0OTgsNyArMTQ5Nyw3IEBACiAJfQogfQogCi1zdGF0aWMgZW51bSBkZXBjYV90eXBlIF9fZGV2aW5pdCBkZXBjYV9zaG1lbV9wcm9iZSAodWxvbmcgKm1lbV9zdGFydCkKK3N0YXRpYyBlbnVtIGRlcGNhX3R5cGUgX19pbml0IGRlcGNhX3NobWVtX3Byb2JlICh1bG9uZyAqbWVtX3N0YXJ0KQogewogCXVfbG9uZyBtZW1fYmFzZVtdID0gREVQQ0FfUkFNX0JBU0VfQUREUkVTU0VTOwogCWVudW0gZGVwY2FfdHlwZSBhZGFwdGVyID0gdW5rbm93bjsKQEAgLTE1NTksNyArMTU1OCw3IEBACiAqLwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBpbnQgX19kZXZpbml0IGRlcGNhX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IGRlcGNhX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAllbnVtIGRlcGNhX3R5cGUgYWRhcHRlciA9IHVua25vd247CiAJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2OwpAQCAtMTYzMCw3ICsxNjI5LDcgQEAKICoqIGFuZCBCb290IChyZWFkYikgUk9NLiBUaGlzIHdpbGwgYWxzbyBnaXZlIHVzIGEgY2x1ZSB0byB0aGUgbmV0d29yayBSQU0KICoqIGJhc2UgYWRkcmVzcy4KICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBEZXBjYVNpZ25hdHVyZShjaGFyICpuYW1lLCB1X2xvbmcgYmFzZV9hZGRyKQorc3RhdGljIGludCBfX2luaXQgRGVwY2FTaWduYXR1cmUoY2hhciAqbmFtZSwgdV9sb25nIGJhc2VfYWRkcikKIHsKIAl1X2ludCBpLCBqLCBrOwogCXZvaWQgX19pb21lbSAqcHRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGwyay5jIGIvZHJpdmVycy9uZXQvZGwyay5jCmluZGV4IGM0NDU0NTcuLjIzMTc5ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTM0Niw3ICszNDYsNyBAQAogCWlmIChucC0+cGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfRExJTkspIHsJLyogRC1MaW5rIE9ubHkgKi8KIAkJLyogQ2hlY2sgQ1JDICovCiAJCWNyYyA9IH5ldGhlcl9jcmNfbGUgKDI1NiAtIDQsIHNyb21kYXRhKTsKLQkJaWYgKHBzcm9tLT5jcmMgIT0gY3JjKSB7CisJCWlmIChwc3JvbS0+Y3JjICE9IGNwdV90b19sZTMyKGNyYykpIHsKIAkJCXByaW50ayAoS0VSTl9FUlIgIiVzOiBFRVBST00gZGF0YSBDUkMgZXJyb3IuXG4iLAogCQkJCQlkZXYtPm5hbWUpOwogCQkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCBmYmFmZjM1Li5lZTU5N2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtMTE1Nyw5ICsxMTU3LDYgQEAKIAogCWlycWZsYWdzIHw9IElSUUZfU0hBUkVEOwogCi0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkbTkwMDBfaW50ZXJydXB0LCBpcnFmbGFncywgZGV2LT5uYW1lLCBkZXYpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQogCS8qIEdQSU8wIG9uIHByZS1hY3RpdmF0ZSBQSFksIFJlZyAxRiBpcyBub3Qgc2V0IGJ5IHJlc2V0ICovCiAJaW93KGRiLCBETTkwMDBfR1BSLCAwKTsJLyogUkVHXzFGIGJpdDAgYWN0aXZhdGUgcGh5eGNlciAqLwogCW1kZWxheSgxKTsgLyogZGVsYXkgbmVlZHMgYnkgRE05MDAwQiAqLwpAQCAtMTE2OCw2ICsxMTY1LDkgQEAKIAlkbTkwMDBfcmVzZXQoZGIpOwogCWRtOTAwMF9pbml0X2RtOTAwMChkZXYpOwogCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkbTkwMDBfaW50ZXJydXB0LCBpcnFmbGFncywgZGV2LT5uYW1lLCBkZXYpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwogCS8qIEluaXQgZHJpdmVyIHZhcmlhYmxlICovCiAJZGItPmRidWdfY250ID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IGZmNjBiMjMuLjJkZmNjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEKICAqIE1vZGlmaWVyOiBTYW5kZWVwIEdvcGFscGV0IDxzYW5kZWVwLmt1bWFyQGZyZWVzY2FsZS5jb20+CiAgKgotICogQ29weXJpZ2h0IDIwMDItMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDItMjAwOSwgMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICogQ29weXJpZ2h0IDIwMDcgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtNDc2LDkgKzQ3Niw2IEBACiAjZW5kaWYKIH07CiAKLXVuc2lnbmVkIGludCBmdHBfcnFmcHJbTUFYX0ZJTEVSX0lEWCArIDFdOwotdW5zaWduZWQgaW50IGZ0cF9ycWZjcltNQVhfRklMRVJfSURYICsgMV07Ci0KIHZvaWQgbG9ja19yeF9xcyhzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KQogewogCWludCBpID0gMHgwOwpAQCAtODY4LDI4ICs4NjUsMjggQEAKIAogCXJxZmFyLS07CiAJcnFmY3IgPSBSUUZDUl9DTEUgfCBSUUZDUl9QSURfTUFTSyB8IFJRRkNSX0NNUF9FWEFDVDsKLQlmdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7Ci0JZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOworCXByaXYtPmZ0cF9ycWZwcltycWZhcl0gPSBycWZwcjsKKwlwcml2LT5mdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7CiAJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBycWZhciwgcnFmY3IsIHJxZnByKTsKIAogCXJxZmFyLS07CiAJcnFmY3IgPSBSUUZDUl9DTVBfTk9NQVRDSDsKLQlmdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7Ci0JZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOworCXByaXYtPmZ0cF9ycWZwcltycWZhcl0gPSBycWZwcjsKKwlwcml2LT5mdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7CiAJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBycWZhciwgcnFmY3IsIHJxZnByKTsKIAogCXJxZmFyLS07CiAJcnFmY3IgPSBSUUZDUl9DTVBfRVhBQ1QgfCBSUUZDUl9QSURfUEFSU0UgfCBSUUZDUl9DTEUgfCBSUUZDUl9BTkQ7CiAJcnFmcHIgPSBjbGFzczsKLQlmdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOworCXByaXYtPmZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CiAJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBycWZhciwgcnFmY3IsIHJxZnByKTsKIAogCXJxZmFyLS07CiAJcnFmY3IgPSBSUUZDUl9DTVBfRVhBQ1QgfCBSUUZDUl9QSURfTUFTSyB8IFJRRkNSX0FORDsKIAlycWZwciA9IGNsYXNzOwotCWZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKLQlmdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CisJcHJpdi0+ZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOworCXByaXYtPmZ0cF9ycWZwcltycWZhcl0gPSBycWZwcjsKIAlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHJxZmFyLCBycWZjciwgcnFmcHIpOwogCiAJcmV0dXJuIHJxZmFyOwpAQCAtOTA0LDggKzkwMSw4IEBACiAKIAkvKiBEZWZhdWx0IHJ1bGUgKi8KIAlycWZjciA9IFJRRkNSX0NNUF9NQVRDSDsKLQlmdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOworCXByaXYtPmZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CiAJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBycWZhciwgcnFmY3IsIHJxZnByKTsKIAogCXJxZmFyID0gY2x1c3Rlcl9lbnRyeV9wZXJfY2xhc3MocHJpdiwgcnFmYXIsIFJRRlBSX0lQVjYpOwpAQCAtOTIxLDggKzkxOCw4IEBACiAJLyogUmVzdCBhcmUgbWFza2VkIHJ1bGVzICovCiAJcnFmY3IgPSBSUUZDUl9DTVBfTk9NQVRDSDsKIAlmb3IgKGkgPSAwOyBpIDwgcnFmYXI7IGkrKykgewotCQlmdHBfcnFmY3JbaV0gPSBycWZjcjsKLQkJZnRwX3JxZnByW2ldID0gcnFmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltpXSA9IHJxZmNyOworCQlwcml2LT5mdHBfcnFmcHJbaV0gPSBycWZwcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBpLCBycWZjciwgcnFmcHIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCBmYzg2ZjUxLi5iYTM2ZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC05LDcgKzksNyBAQAogICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYQogICogTW9kaWZpZXI6IFNhbmRlZXAgR29wYWxwZXQgPHNhbmRlZXAua3VtYXJAZnJlZXNjYWxlLmNvbT4KICAqCi0gKiBDb3B5cmlnaHQgMjAwMi0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwMi0yMDA5LCAyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTExMDcsMTAgKzExMDcsMTIgQEAKIAkvKiBIVyB0aW1lIHN0YW1waW5nIGVuYWJsZWQgZmxhZyAqLwogCWludCBod3RzX3J4X2VuOwogCWludCBod3RzX3R4X2VuOworCisJLypGaWxlciB0YWJsZSovCisJdW5zaWduZWQgaW50IGZ0cF9ycWZwcltNQVhfRklMRVJfSURYICsgMV07CisJdW5zaWduZWQgaW50IGZ0cF9ycWZjcltNQVhfRklMRVJfSURYICsgMV07CiB9OwogCi1leHRlcm4gdW5zaWduZWQgaW50IGZ0cF9ycWZwcltNQVhfRklMRVJfSURYICsgMV07Ci1leHRlcm4gdW5zaWduZWQgaW50IGZ0cF9ycWZjcltNQVhfRklMRVJfSURYICsgMV07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdmYXJfaGFzX2VycmF0YShzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2LAogCQkJCSAgZW51bSBnZmFyX2VycmF0YSBlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCmluZGV4IDQ5M2Q3NDMuLjIzOWUzMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCkBAIC05LDcgKzksNyBAQAogICogIE1haW50YWluZXI6IEt1bWFyIEdhbGEKICAqICBNb2RpZmllcjogU2FuZGVlcCBHb3BhbHBldCA8c2FuZGVlcC5rdW1hckBmcmVlc2NhbGUuY29tPgogICoKLSAqICBDb3B5cmlnaHQgMjAwMy0yMDA2LCAyMDA4LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqICBDb3B5cmlnaHQgMjAwMy0yMDA2LCAyMDA4LTIwMDksIDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiAgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvCiAgKiAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgaW5jb3Jwb3JhdGVkIGhlcmVpbgpAQCAtNjA5LDE1ICs2MDksMTUgQEAKIAlpZiAoZXRoZmxvdyAmIFJYSF9MMkRBKSB7CiAJCWZjciA9IFJRRkNSX1BJRF9EQUggfFJRRkNSX0NNUF9OT01BVENIIHwKIAkJCVJRRkNSX0hBU0ggfCBSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAogCQlmY3IgPSBSUUZDUl9QSURfREFMIHwgUlFGQ1JfQU5EIHwgUlFGQ1JfQ01QX05PTUFUQ0ggfAogCQkJCVJRRkNSX0hBU0ggfCBSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CkBAIC02MjYsMTYgKzYyNiwxNiBAQAogCQlmY3IgPSBSUUZDUl9QSURfVklEIHwgUlFGQ1JfQ01QX05PTUFUQ0ggfCBSUUZDUl9IQVNIIHwKIAkJCQlSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CiAKIAlpZiAoZXRoZmxvdyAmIFJYSF9JUF9TUkMpIHsKIAkJZmNyID0gUlFGQ1JfUElEX1NJQSB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQlSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CkBAIC02NDMsOCArNjQzLDggQEAKIAlpZiAoZXRoZmxvdyAmIChSWEhfSVBfRFNUKSkgewogCQlmY3IgPSBSUUZDUl9QSURfRElBIHwgUlFGQ1JfQ01QX05PTUFUQ0ggfCBSUUZDUl9IQVNIIHwKIAkJCVJRRkNSX0FORCB8IFJRRkNSX0hBU0hUQkxfMDsKLQkJZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CisJCXByaXYtPmZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKKwkJcHJpdi0+ZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsIGZjciwgZnByKTsKIAkJcHJpdi0+Y3VyX2ZpbGVyX2lkeCA9IHByaXYtPmN1cl9maWxlcl9pZHggLSAxOwogCX0KQEAgLTY1Miw4ICs2NTIsOCBAQAogCWlmIChldGhmbG93ICYgUlhIX0wzX1BST1RPKSB7CiAJCWZjciA9IFJRRkNSX1BJRF9MNFAgfCBSUUZDUl9DTVBfTk9NQVRDSCB8IFJRRkNSX0hBU0ggfAogCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjYxLDggKzY2MSw4IEBACiAJaWYgKGV0aGZsb3cgJiBSWEhfTDRfQl8wXzEpIHsKIAkJZmNyID0gUlFGQ1JfUElEX1NQVCB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQlSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CkBAIC02NzAsOCArNjcwLDggQEAKIAlpZiAoZXRoZmxvdyAmIFJYSF9MNF9CXzJfMykgewogCQlmY3IgPSBSUUZDUl9QSURfRFBUIHwgUlFGQ1JfQ01QX05PTUFUQ0ggfCBSUUZDUl9IQVNIIHwKIAkJCVJRRkNSX0FORCB8IFJRRkNSX0hBU0hUQkxfMDsKLQkJZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CisJCXByaXYtPmZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKKwkJcHJpdi0+ZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsIGZjciwgZnByKTsKIAkJcHJpdi0+Y3VyX2ZpbGVyX2lkeCA9IHByaXYtPmN1cl9maWxlcl9pZHggLSAxOwogCX0KQEAgLTcwNSwxMiArNzA1LDEyIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9GSUxFUl9JRFggKyAxOyBpKyspIHsKLQkJbG9jYWxfcnFmcHJbal0gPSBmdHBfcnFmcHJbaV07Ci0JCWxvY2FsX3JxZmNyW2pdID0gZnRwX3JxZmNyW2ldOworCQlsb2NhbF9ycWZwcltqXSA9IHByaXYtPmZ0cF9ycWZwcltpXTsKKwkJbG9jYWxfcnFmY3Jbal0gPSBwcml2LT5mdHBfcnFmY3JbaV07CiAJCWotLTsKLQkJaWYgKChmdHBfcnFmY3JbaV0gPT0gKFJRRkNSX1BJRF9QQVJTRSB8CisJCWlmICgocHJpdi0+ZnRwX3JxZmNyW2ldID09IChSUUZDUl9QSURfUEFSU0UgfAogCQkJUlFGQ1JfQ0xFIHxSUUZDUl9BTkQpKSAmJgotCQkJKGZ0cF9ycWZwcltpXSA9PSBjbXBfcnFmcHIpKQorCQkJKHByaXYtPmZ0cF9ycWZwcltpXSA9PSBjbXBfcnFmcHIpKQogCQkJYnJlYWs7CiAJfQogCkBAIC03MjQsMjAgKzcyNCwyMiBAQAogCSAqIGlmIGl0IHdhcyBhbHJlYWR5IHByb2dyYW1tZWQsIHdlIG5lZWQgdG8gb3ZlcndyaXRlIHRoZXNlIHJ1bGVzCiAJICovCiAJZm9yIChsID0gaSsxOyBsIDwgTUFYX0ZJTEVSX0lEWDsgbCsrKSB7Ci0JCWlmICgoZnRwX3JxZmNyW2xdICYgUlFGQ1JfQ0xFKSAmJgotCQkJIShmdHBfcnFmY3JbbF0gJiBSUUZDUl9BTkQpKSB7Ci0JCQlmdHBfcnFmY3JbbF0gPSBSUUZDUl9DTEUgfCBSUUZDUl9DTVBfRVhBQ1QgfAorCQlpZiAoKHByaXYtPmZ0cF9ycWZjcltsXSAmIFJRRkNSX0NMRSkgJiYKKwkJCSEocHJpdi0+ZnRwX3JxZmNyW2xdICYgUlFGQ1JfQU5EKSkgeworCQkJcHJpdi0+ZnRwX3JxZmNyW2xdID0gUlFGQ1JfQ0xFIHwgUlFGQ1JfQ01QX0VYQUNUIHwKIAkJCQlSUUZDUl9IQVNIVEJMXzAgfCBSUUZDUl9QSURfTUFTSzsKLQkJCWZ0cF9ycWZwcltsXSA9IEZQUl9GSUxFUl9NQVNLOwotCQkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBsLCBmdHBfcnFmY3JbbF0sIGZ0cF9ycWZwcltsXSk7CisJCQlwcml2LT5mdHBfcnFmcHJbbF0gPSBGUFJfRklMRVJfTUFTSzsKKwkJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgbCwgcHJpdi0+ZnRwX3JxZmNyW2xdLAorCQkJCXByaXYtPmZ0cF9ycWZwcltsXSk7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmICghKGZ0cF9ycWZjcltsXSAmIFJRRkNSX0NMRSkgJiYgKGZ0cF9ycWZjcltsXSAmIFJRRkNSX0FORCkpCisJCWlmICghKHByaXYtPmZ0cF9ycWZjcltsXSAmIFJRRkNSX0NMRSkgJiYKKwkJCShwcml2LT5mdHBfcnFmY3JbbF0gJiBSUUZDUl9BTkQpKQogCQkJY29udGludWU7CiAJCWVsc2UgewotCQkJbG9jYWxfcnFmcHJbal0gPSBmdHBfcnFmcHJbbF07Ci0JCQlsb2NhbF9ycWZjcltqXSA9IGZ0cF9ycWZjcltsXTsKKwkJCWxvY2FsX3JxZnByW2pdID0gcHJpdi0+ZnRwX3JxZnByW2xdOworCQkJbG9jYWxfcnFmY3Jbal0gPSBwcml2LT5mdHBfcnFmY3JbbF07CiAJCQlqLS07CiAJCX0KIAl9CkBAIC03NTAsOCArNzUyLDggQEAKIAogCS8qIFdyaXRlIGJhY2sgdGhlIHBvcHBlZCBvdXQgcnVsZXMgYWdhaW4gKi8KIAlmb3IgKGsgPSBqKzE7IGsgPCBNQVhfRklMRVJfSURYOyBrKyspIHsKLQkJZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gbG9jYWxfcnFmcHJba107Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGxvY2FsX3JxZmNyW2tdOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBsb2NhbF9ycWZwcltrXTsKKwkJcHJpdi0+ZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gbG9jYWxfcnFmY3Jba107CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwKIAkJCQlsb2NhbF9ycWZjcltrXSwgbG9jYWxfcnFmcHJba10pOwogCQlpZiAoIXByaXYtPmN1cl9maWxlcl9pZHgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwppbmRleCA5OTIwODk2Li4zZTVkMGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKQEAgLTQ1Niw3ICs0NTYsNyBAQAogICogYSBibG9jayBvZiA2cGFjayBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkLCB3aGljaCBjYW4gbm93IGJlIGRlY2Fwc3VsYXRlZAogICogYW5kIHNlbnQgb24gdG8gc29tZSBJUCBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNpeHBhY2tfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKK3N0YXRpYyB2b2lkIHNpeHBhY2tfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2l4cGFjayAqc3A7CkBAIC00NjQsMTEgKzQ2NCwxMSBAQAogCWludCBjb3VudDE7CiAKIAlpZiAoIWNvdW50KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJc3AgPSBzcF9nZXQodHR5KTsKIAlpZiAoIXNwKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogCiAJbWVtY3B5KGJ1ZiwgY3AsIGNvdW50IDwgc2l6ZW9mKGJ1ZikgPyBjb3VudCA6IHNpemVvZihidWYpKTsKIApAQCAtNDg3LDggKzQ4Nyw2IEBACiAKIAlzcF9wdXQoc3ApOwogCXR0eV91bnRocm90dGxlKHR0eSk7Ci0KLQlyZXR1cm4gY291bnQxOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKaW5kZXggMGU0ZjIzNS4uNGM2MjgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCkBAIC05MjMsMTQgKzkyMywxMyBAQAogICogYSBibG9jayBvZiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkLCB3aGljaCBjYW4gbm93IGJlIGRlY2Fwc3VsYXRlZAogICogYW5kIHNlbnQgb24gdG8gdGhlIEFYLjI1IGxheWVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWtpc3NfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBta2lzc19yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKKwljaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCBta2lzcyAqYXggPSBta2lzc19nZXQodHR5KTsKLQlpbnQgYnl0ZXMgPSBjb3VudDsKIAogCWlmICghYXgpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm47CiAKIAkvKgogCSAqIEFyZ2ghIG10dSBjaGFuZ2UgdGltZSEgLSBjb3N0cyB1cyB0aGUgcGFja2V0IHBhcnQgcmVjZWl2ZWQKQEAgLTk0MCw3ICs5MzksNyBAQAogCQlheF9jaGFuZ2VkbXR1KGF4KTsKIAogCS8qIFJlYWQgdGhlIGNoYXJhY3RlcnMgb3V0IG9mIHRoZSBidWZmZXIgKi8KLQl3aGlsZSAoYnl0ZXMtLSkgeworCXdoaWxlIChjb3VudC0tKSB7CiAJCWlmIChmcCAhPSBOVUxMICYmICpmcCsrKSB7CiAJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQVhGX0VSUk9SLCAmYXgtPmZsYWdzKSkKIAkJCQlheC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKQEAgLTk1Myw4ICs5NTIsNiBAQAogCiAJbWtpc3NfcHV0KGF4KTsKIAl0dHlfdW50aHJvdHRsZSh0dHkpOwotCi0JcmV0dXJuIGNvdW50OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggYzUyYTFkZi4uOGUxMGQyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC0xODgsMTQgKzE4OCwxNCBAQAogICogIHZhcmlhYmxlcwogICovCiAjaWZkZWYgQ09ORklHX0lTQQotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGhwMTAwX2lzYV90YmxbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpocDEwMF9pc2FfdGJsW10gPSB7CiAJIkhXUEYxNTAiLCAvKiBIUCBKMjU3MyByZXYgQSAqLwogCSJIV1AxOTUwIiwgLyogSFAgSjI1NzMgKi8KIH07CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGhwMTAwX2Vpc2FfdGJsW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGhwMTAwX2Vpc2FfdGJsW10gPSB7CiAJeyAiSFdQRjE4MCIgfSwgLyogSFAgSjI1NzcgcmV2IEEgKi8KIAl7ICJIV1AxOTIwIiB9LCAvKiBIUCAyNzI0OEIgKi8KIAl7ICJIV1AxOTQwIiB9LCAvKiBIUCBKMjU3NyAqLwpAQCAtMzM2LDcgKzMzNiw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfSVNBCi1zdGF0aWMgX19kZXZpbml0IGludCBocDEwMF9pc2FfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCitzdGF0aWMgX19pbml0IGludCBocDEwMF9pc2FfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAJY29uc3QgY2hhciAqc2lnOwogCWludCBpOwpAQCAtMzcyLDcgKzM3Miw3IEBACiAgKiBFSVNBIGFuZCBQQ0kgYXJlIGhhbmRsZWQgYnkgZGV2aWNlIGluZnJhc3RydWN0dXJlLgogICovCiAKLXN0YXRpYyBpbnQgIF9fZGV2aW5pdCBocDEwMF9pc2FfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFkZHIpCitzdGF0aWMgaW50ICBfX2luaXQgaHAxMDBfaXNhX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhZGRyKQogewogCWludCBlcnIgPSAtRU5PREVWOwogCkBAIC0zOTYsNyArMzk2LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfSVNBICovCiAKICNpZiAhZGVmaW5lZChNT0RVTEUpICYmIGRlZmluZWQoQ09ORklHX0lTQSkKLXN0cnVjdCBuZXRfZGV2aWNlICogX19kZXZpbml0IGhwMTAwX3Byb2JlKGludCB1bml0KQorc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgaHAxMDBfcHJvYmUoaW50IHVuaXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgaHAxMDBfcHJpdmF0ZSkpOwogCWludCBlcnI7CkBAIC0yODQzLDcgKzI4NDMsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBpbnQgX19kZXZpbml0IGhwMTAwX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmdlbmRldikKK3N0YXRpYyBpbnQgX19pbml0IGhwMTAwX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmdlbmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBocDEwMF9wcml2YXRlKSk7CiAJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2ID0gdG9fZWlzYV9kZXZpY2UoZ2VuZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libWxhbmEuYyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwppbmRleCAxMzZkNzU0Li5hN2Q2Y2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCkBAIC04OTUsMTIgKzg5NSwxMiBAQAogc3RhdGljIGludCBpYm1sYW5hX2lvOwogc3RhdGljIGludCBzdGFydHNsb3Q7CQkvKiBjb3VudHMgdGhyb3VnaCBzbG90cyB3aGVuIHByb2JpbmcgbXVsdGlwbGUgZGV2aWNlcyAqLwogCi1zdGF0aWMgY29uc3Qgc2hvcnQgaWJtbGFuYV9hZGFwdGVyX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIHNob3J0IGlibWxhbmFfYWRhcHRlcl9pZHNbXSBfX2luaXRkYXRhID0gewogCUlCTV9MQU5BX0lELAogCTB4MDAwMAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlibWxhbmFfYWRhcHRlcl9uYW1lc1tdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIGNoYXIgKmlibWxhbmFfYWRhcHRlcl9uYW1lc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJIklCTSBMQU4gQWRhcHRlci9BIiwKIAlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCAxOGZjY2Y5Li4yYzI4NjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMjM3Myw2ICsyMzczLDkgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BDSV9JT1YgKi8KIAlhZGFwdGVyLT5yc3NfcXVldWVzID0gbWluX3QodTMyLCBJR0JfTUFYX1JYX1FVRVVFUywgbnVtX29ubGluZV9jcHVzKCkpOworCS8qIGkzNTAgY2Fubm90IGRvIFJTUyBhbmQgU1ItSU9WIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX2kzNTAgJiYgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJYWRhcHRlci0+cnNzX3F1ZXVlcyA9IDE7CiAKIAkvKgogCSAqIGlmIHJzc19xdWV1ZXMgPiA0IG9yIHZmcyBhcmUgZ29pbmcgdG8gYmUgYWxsb2NhdGVkIHdpdGggcnNzX3F1ZXVlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHktc2lyLmMKaW5kZXggMDM1ODYxZC4uMzM1MmIyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jCkBAIC0yMTYsMjMgKzIxNiwyMyBAQAogICogdXNic2VyaWFsOgl1cmItY29tcGxldGUtaW50ZXJydXB0IC8gc29mdGludAogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXJ0dHlfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBpcnR0eV9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKKwkJCSAgICAgIGNoYXIgKmZwLCBpbnQgY291bnQpIAogewogCXN0cnVjdCBzaXJfZGV2ICpkZXY7CiAJc3RydWN0IHNpcnR0eV9jYiAqcHJpdiA9IHR0eS0+ZGlzY19kYXRhOwogCWludAlpOwogCi0JSVJEQV9BU1NFUlQocHJpdiAhPSBOVUxMLCByZXR1cm4gLUVOT0RFVjspOwotCUlSREFfQVNTRVJUKHByaXYtPm1hZ2ljID09IElSVFRZX01BR0lDLCByZXR1cm4gLUVJTlZBTDspOworCUlSREFfQVNTRVJUKHByaXYgIT0gTlVMTCwgcmV0dXJuOyk7CisJSVJEQV9BU1NFUlQocHJpdi0+bWFnaWMgPT0gSVJUVFlfTUFHSUMsIHJldHVybjspOwogCiAJaWYgKHVubGlrZWx5KGNvdW50PT0wKSkJCS8qIHllcywgdGhpcyBoYXBwZW5zICovCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAlkZXYgPSBwcml2LT5kZXY7CiAJaWYgKCFkZXYpIHsKIAkJSVJEQV9XQVJOSU5HKCIlcygpLCBub3QgcmVhZHkgeWV0IVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CkBAIC0yNDIsMTMgKzI0MiwxMSBAQAogIAkJaWYgKGZwICYmICpmcCsrKSB7IAogCQkJSVJEQV9ERUJVRygwLCAiRnJhbWluZyBvciBwYXJpdHkgZXJyb3IhXG4iKTsKIAkJCXNpcmRldl9yZWNlaXZlKGRldiwgTlVMTCwgMCk7CS8qIG5vdGlmeSBzaXJfZGV2ICh1cGRhdGluZyBzdGF0cykgKi8KLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuOwogIAkJfQogCX0KIAogCXNpcmRldl9yZWNlaXZlKGRldiwgY3AsIGNvdW50KTsKLQotCXJldHVybiBjb3VudDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKaW5kZXggNjliNTcwNy4uODgwMGUxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKQEAgLTIyMiwxOSArMjIyLDE5IEBACiBzdGF0aWMgdm9pZCBzbXNjX2lyY2Nfc2lyX3dhaXRfaHdfdHJhbnNtaXR0ZXJfZmluaXNoKHN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYpOwogCiAvKiBQcm9iaW5nICovCi1zdGF0aWMgaW50IHNtc2NfaXJjY19sb29rX2Zvcl9jaGlwcyh2b2lkKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICogc21zY19pcmNjX3Byb2JlKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1OCByZWcsIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXAsIGNoYXIgKnR5cGUpOwotc3RhdGljIGludCBzbXNjX3N1cGVyaW9fZmxhdChjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwcywgdW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIGNoYXIgKnR5cGUpOwotc3RhdGljIGludCBzbXNjX3N1cGVyaW9fcGFnZWQoY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcHMsIHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCBjaGFyICp0eXBlKTsKLXN0YXRpYyBpbnQgc21zY19zdXBlcmlvX2ZkYyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSk7Ci1zdGF0aWMgaW50IHNtc2Nfc3VwZXJpb19scGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOworc3RhdGljIGludCBfX2luaXQgc21zY19pcmNjX2xvb2tfZm9yX2NoaXBzKHZvaWQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKiBfX2luaXQgc21zY19pcmNjX3Byb2JlKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1OCByZWcsIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXAsIGNoYXIgKnR5cGUpOworc3RhdGljIGludCBfX2luaXQgc21zY19zdXBlcmlvX2ZsYXQoY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcHMsIHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCBjaGFyICp0eXBlKTsKK3N0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19wYWdlZChjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwcywgdW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIGNoYXIgKnR5cGUpOworc3RhdGljIGludCBfX2luaXQgc21zY19zdXBlcmlvX2ZkYyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSk7CitzdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fbHBjKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlKTsKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgaW50IHByZWNvbmZpZ3VyZV9zbXNjX2NoaXAoc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7Ci1zdGF0aWMgaW50IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOwotc3RhdGljIHZvaWQgcHJlY29uZmlndXJlX2FsaV9wb3J0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfc21zY19jaGlwKHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOworc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgdm9pZCBfX2luaXQgcHJlY29uZmlndXJlX2FsaV9wb3J0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBwb3J0KTsKLXN0YXRpYyBpbnQgcHJlY29uZmlndXJlX3Rocm91Z2hfYWxpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOwotc3RhdGljIGludCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCiAJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19maXIsCiAJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19zaXIsCiAJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2RtYSwKQEAgLTM2Niw3ICszNjYsNyBAQAogfQogCiAvKiBQTlAgaG90cGx1ZyBzdXBwb3J0ICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgc21zY19pcmNjX3BucF90YWJsZVtdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHNtc2NfaXJjY19wbnBfdGFibGVbXSA9IHsKIAl7IC5pZCA9ICJTTUNmMDEwIiwgLmRyaXZlcl9kYXRhID0gMCB9LAogCS8qIGFuZCBwcmVzdW1hYmx5IG90aGVycyAqLwogCXsgfQpAQCAtNTE1LDcgKzUxNSw3IEBACiAgKiAgICBUcnkgdG8gb3BlbiBkcml2ZXIgaW5zdGFuY2UKICAqCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNtc2NfaXJjY19vcGVuKHVuc2lnbmVkIGludCBmaXJfYmFzZSwgdW5zaWduZWQgaW50IHNpcl9iYXNlLCB1OCBkbWEsIHU4IGlycSkKK3N0YXRpYyBpbnQgX19pbml0IHNtc2NfaXJjY19vcGVuKHVuc2lnbmVkIGludCBmaXJfYmFzZSwgdW5zaWduZWQgaW50IHNpcl9iYXNlLCB1OCBkbWEsIHU4IGlycSkKIHsKIAlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0yMjczLDcgKzIyNzMsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNtc2NfYWNjZXNzKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1bnNpZ25lZCBjaGFyIHJlZykKK3N0YXRpYyBpbnQgX19pbml0IHNtc2NfYWNjZXNzKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1bnNpZ25lZCBjaGFyIHJlZykKIHsKIAlJUkRBX0RFQlVHKDEsICIlc1xuIiwgX19mdW5jX18pOwogCkBAIC0yMjgxLDcgKzIyODEsNyBAQAogCXJldHVybiBpbmIoY2ZnX2Jhc2UpICE9IHJlZyA/IC0xIDogMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKiBfX2RldmluaXQgc21zY19pcmNjX3Byb2JlKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1OCByZWcsIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXAsIGNoYXIgKnR5cGUpCitzdGF0aWMgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqIF9faW5pdCBzbXNjX2lyY2NfcHJvYmUodW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIHU4IHJlZywgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcCwgY2hhciAqdHlwZSkKIHsKIAl1OCBkZXZpZCwgeGRldmlkLCByZXY7CiAKQEAgLTI0MDYsNyArMjQwNiw3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogI2RlZmluZSBQQ0lJRF9WRU5ET1JfSU5URUwgMHg4MDg2CiAjZGVmaW5lIFBDSUlEX1ZFTkRPUl9BTEkgMHgxMGI5Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uIHN1YnN5c3RlbV9jb25maWd1cmF0aW9uc1tdIF9faW5pdGRhdGEgPSB7CiAJLyoKIAkgKiBTdWJzeXN0ZW1zIG5lZWRpbmcgZW50cmllczoKIAkgKiAweDEwYjk6MHgxNTMzIDB4MTAzYzoweDA4NTAgSFAgbng5MDEwIGZhbWlseQpAQCAtMjUzMiw3ICsyNTMyLDcgQEAKICAqIChGSVIgcG9ydCwgU0lSIHBvcnQsIEZJUiBETUEsIEZJUiBJUlEpCiAgKiB0aHJvdWdoIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gcG9ydC4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgcHJlY29uZmlndXJlX3Ntc2NfY2hpcChzdHJ1Y3QKK3N0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV9zbXNjX2NoaXAoc3RydWN0CiAJCQkJCSBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24KIAkJCQkJICpjb25mKQogewpAQCAtMjYzMyw3ICsyNjMzLDcgQEAKICAqIG9yIEludGVsIDgyODAxREIvREJMIChJQ0g0L0lDSDQtTCkgTFBDIEludGVyZmFjZSBCcmlkZ2UuCiAgKiBUaGV5IGFsbCB3b3JrIHRoZSBzYW1lIHdheSEKICAqLwotc3RhdGljIGludCBfX2RldmluaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCSAgICAgc3RydWN0CiAJCQkJCSAgICAgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uCiAJCQkJCSAgICAgKmNvbmYpCkBAIC0yNzg2LDcgKzI3ODYsNyBAQAogICogVGhpcyBpcyBiYXNlZCBvbiByZXZlcnNlLWVuZ2luZWVyaW5nIHNpbmNlIEFMaSBkb2VzIG5vdAogICogcHJvdmlkZSBhbnkgZGF0YSBzaGVldCBmb3IgdGhlIDE1MzMgY2hpcC4KICAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIHZvaWQgX19pbml0IHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCkKIHsKIAl1bnNpZ25lZCBjaGFyIHJlZzsKQEAgLTI4MjQsNyArMjgyNCw3IEBACiAJSVJEQV9NRVNTQUdFKCJBY3RpdmF0ZWQgQUxpIDE1MzMgSVNBIGJyaWRnZSBwb3J0IDB4JTA0eC5cbiIsIHBvcnQpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoX2FsaShzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCQkgICBzdHJ1Y3QKIAkJCQkJICAgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uCiAJCQkJCSAgICpjb25mKQpAQCAtMjgzNyw3ICsyODM3LDcgQEAKIAlyZXR1cm4gcHJlY29uZmlndXJlX3Ntc2NfY2hpcChjb25mKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAorc3RhdGljIGludCBfX2luaXQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAogCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2NfZmlyLAogCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2Nfc2lyLAogCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgaXJjY19kbWEsCkBAIC0yODQ5LDcgKzI4NDksNyBAQAogCWludCByZXQgPSAwOwogCiAJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKLQkJY29uc3Qgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZjsKKwkJc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZjsKIAogCQkvKgogCQkgKiBDYWNoZSB0aGUgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NDIuYyBiL2RyaXZlcnMvbmV0L2tzODg0Mi5jCmluZGV4IDRkNDA2MjYuLmZjMTJhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg0Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg0Mi5jCkBAIC02NjEsNyArNjYxLDcgQEAKIAogCS8qIGNoZWNrIHRoZSBzdGF0dXMgKi8KIAlpZiAoKHN0YXR1cyAmIFJYU1JfVkFMSUQpICYmICEoc3RhdHVzICYgUlhTUl9FUlJPUikpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24obmV0ZGV2LCBsZW4pOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihuZXRkZXYsIGxlbiArIDMpOwogCiAJCWlmIChza2IpIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUzMjEwLmMgYi9kcml2ZXJzL25ldC9uZTMyMTAuYwppbmRleCBlODk4NGIwYy4uMjQzZWQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUzMjEwLmMKKysrIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKQEAgLTgwLDIwICs4MCwxNyBAQAogCiAjZGVmaW5lIE5FMzIxMF9ERUJVRwkweDAKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXJxX21hcFtdIF9fZGV2aW5pdGNvbnN0ID0KLQl7IDE1LCAxMiwgMTEsIDEwLCA5LCA3LCA1LCAzIH07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNobWVtX21hcFtdIF9fZGV2aW5pdGNvbnN0ID0KLQl7IDB4ZmYwLCAweGZlMCwgMHhmZmYwLCAweGQ4LCAweGZmZTAsIDB4ZmZjMCwgMHhkMCwgMHgwIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaWZtYXBbXSBfX2RldmluaXRjb25zdCA9Ci0JeyAiVVRQIiwgIj8iLCAiQk5DIiwgIkFVSSIgfTsKLXN0YXRpYyBjb25zdCBpbnQgaWZtYXBfdmFsW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgdW5zaWduZWQgY2hhciBpcnFfbWFwW10gX19pbml0ZGF0YSA9IHsxNSwgMTIsIDExLCAxMCwgOSwgNywgNSwgM307CitzdGF0aWMgdW5zaWduZWQgaW50IHNobWVtX21hcFtdIF9faW5pdGRhdGEgPSB7MHhmZjAsIDB4ZmUwLCAweGZmZjAsIDB4ZDgsIDB4ZmZlMCwgMHhmZmMwLCAweGQwLCAweDB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmlmbWFwW10gX19pbml0ZGF0YSA9IHsiVVRQIiwgIj8iLCAiQk5DIiwgIkFVSSJ9Oworc3RhdGljIGludCBpZm1hcF92YWxbXSBfX2luaXRkYXRhID0gewogCQlJRl9QT1JUXzEwQkFTRVQsCiAJCUlGX1BPUlRfVU5LTk9XTiwKIAkJSUZfUE9SVF8xMEJBU0UyLAogCQlJRl9QT1JUX0FVSSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG5lMzIxMF9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBuZTMyMTBfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCXVuc2lnbmVkIGxvbmcgaW9hZGRyLCBwaHlzX21lbTsKIAlpbnQgaSwgcmV0dmFsLCBwb3J0X2luZGV4OwpAQCAtMzE2LDcgKzMxMyw3IEBACiAJbWVtY3B5X3RvaW8oc2htZW0sIGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIG5lMzIxMF9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgbmUzMjEwX2lkc1tdID0gewogCXsgIkVHTDAxMDEiIH0sCiAJeyAiTlZMMTgwMSIgfSwKIAl7ICIiIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCmluZGV4IDUzODcyZDcuLmExYjgyYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCkBAIC0zNDAsNyArMzQwLDcgQEAKIH0KIAogLyogTWF5IHNsZWVwLCBkb24ndCBjYWxsIGZyb20gaW50ZXJydXB0IGxldmVsIG9yIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotc3RhdGljIHVuc2lnbmVkIGludAorc3RhdGljIHZvaWQKIHBwcF9hc3luY3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJICBjaGFyICpjZmxhZ3MsIGludCBjb3VudCkKIHsKQEAgLTM0OCw3ICszNDgsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWFwKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+cmVjdl9sb2NrLCBmbGFncyk7CiAJcHBwX2FzeW5jX2lucHV0KGFwLCBidWYsIGNmbGFncywgY291bnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5yZWN2X2xvY2ssIGZsYWdzKTsKQEAgLTM1Niw4ICszNTYsNiBAQAogCQl0YXNrbGV0X3NjaGVkdWxlKCZhcC0+dHNrKTsKIAlhcF9wdXQoYXApOwogCXR0eV91bnRocm90dGxlKHR0eSk7Ci0KLQlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYwppbmRleCAwODE1NzkwLi4yNTczZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKQEAgLTM4MSw3ICszODEsNyBAQAogfQogCiAvKiBNYXkgc2xlZXAsIGRvbid0IGNhbGwgZnJvbSBpbnRlcnJ1cHQgbGV2ZWwgb3Igd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCi1zdGF0aWMgdW5zaWduZWQgaW50CitzdGF0aWMgdm9pZAogcHBwX3N5bmNfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCSAgY2hhciAqY2ZsYWdzLCBpbnQgY291bnQpCiB7CkBAIC0zODksNyArMzg5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFhcCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybjsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPnJlY3ZfbG9jaywgZmxhZ3MpOwogCXBwcF9zeW5jX2lucHV0KGFwLCBidWYsIGNmbGFncywgY291bnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5yZWN2X2xvY2ssIGZsYWdzKTsKQEAgLTM5Nyw4ICszOTcsNiBAQAogCQl0YXNrbGV0X3NjaGVkdWxlKCZhcC0+dHNrKTsKIAlzcF9wdXQoYXApOwogCXR0eV91bnRocm90dGxlKHR0eSk7Ci0KLQlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMKaW5kZXggZTk2NTY2MS4uYTVkOWZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYwpAQCAtMTQwNiw2ICsxNDA2LDcgQEAKIAogCWZvciAobG9vcCA9IDA7IGxvb3AgPCBxdWUtPm5vX29wczsgbG9vcCsrKSB7CiAJCVFMQ05JQ19XUl9EVU1QX1JFRyhxdWUtPnNlbF9hZGRyLCBiYXNlLCBxdWVfaWQpOworCQlhZGRyID0gcXVlLT5yZWFkX2FkZHI7CiAJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewogCQkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZkYXRhKTsKIAkJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwppbmRleCAzYWI3ZDJjLi4wZjZhZjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwpAQCAtMjE1OSw2ICsyMTU5LDcgQEAKIAogCW5mID0gJnBidWYtPmZyYWdfYXJyYXlbMF07CiAJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBuZi0+ZG1hLCBza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlwYnVmLT5za2IgPSBOVUxMOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCA1ODQ4MDljLi44ZWMxYTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC02NzAsMTcgKzY3MCwxNiBAQAogICogaW4gcGFyYWxsZWwKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHNsaXBfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBzbGlwX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAorCQkJCQkJCWNoYXIgKmZwLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNsaXAgKnNsID0gdHR5LT5kaXNjX2RhdGE7Ci0JaW50IGJ5dGVzID0gY291bnQ7CiAKIAlpZiAoIXNsIHx8IHNsLT5tYWdpYyAhPSBTTElQX01BR0lDIHx8ICFuZXRpZl9ydW5uaW5nKHNsLT5kZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogCiAJLyogUmVhZCB0aGUgY2hhcmFjdGVycyBvdXQgb2YgdGhlIGJ1ZmZlciAqLwotCXdoaWxlIChieXRlcy0tKSB7CisJd2hpbGUgKGNvdW50LS0pIHsKIAkJaWYgKGZwICYmICpmcCsrKSB7CiAJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU0xGX0VSUk9SLCAmc2wtPmZsYWdzKSkKIAkJCQlzbC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKQEAgLTY5NCw4ICs2OTMsNiBAQAogI2VuZGlmCiAJCQlzbGlwX3VuZXNjKHNsLCAqY3ArKyk7CiAJfQotCi0JcmV0dXJuIGNvdW50OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWMtbWNhLmMgYi9kcml2ZXJzL25ldC9zbWMtbWNhLmMKaW5kZXggMGYyOWYyNi4uZDA3YzM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jLW1jYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYy1tY2EuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICB7IDE0LCAxNSB9CiB9OwogCi1zdGF0aWMgY29uc3Qgc2hvcnQgc21jX21jYV9hZGFwdGVyX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIHNob3J0IHNtY19tY2FfYWRhcHRlcl9pZHNbXSBfX2luaXRkYXRhID0gewogCTB4NjFjOCwKIAkweDYxYzksCiAJMHg2ZmMwLApAQCAtMTY4LDcgKzE2OCw3IEBACiAJMHgwMDAwCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc21jX21jYV9hZGFwdGVyX25hbWVzW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgY2hhciAqc21jX21jYV9hZGFwdGVyX25hbWVzW10gX19pbml0ZGF0YSA9IHsKIAkiU01DIEV0aGVyY2FyZCBQTFVTIEVsaXRlL0EgQk5DL0FVSSAoV0Q4MDEzRVAvQSkiLAogCSJTTUMgRXRoZXJjYXJkIFBMVVMgRWxpdGUvQSBVVFAvQVVJIChXRDgwMTNXUC9BKSIsCiAJIldEIEV0aGVyY2FyZCBQTFVTL0EgKFdEODAwM0UvQSBvciBXRDgwMDNFVC9BKSIsCkBAIC0xOTksNyArMTk5LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgdWx0cmFtY2FfcHJvYmUoc3RydWN0IGRldmljZSAqZ2VuX2RldikKK3N0YXRpYyBpbnQgX19pbml0IHVsdHJhbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmdlbl9kZXYpCiB7CiAJdW5zaWduZWQgc2hvcnQgaW9hZGRyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCmluZGV4IGRjNDgwNWYuLmY2Mjg1NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCkBAIC0yNDAwLDggKzI0MDAsMTAgQEAKIAl7IC5jb21wYXRpYmxlID0gInNtc2MsbGFuOTFjOTQiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic21zYyxsYW45MWMxMTEiLCB9LAogCXt9LAotfQorfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNtYzkxeF9tYXRjaCk7CisjZWxzZQorI2RlZmluZSBzbWM5MXhfbWF0Y2ggTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzbWNfZHJ2X3BtX29wcyA9IHsKQEAgLTI0MTYsOSArMjQxOCw3IEBACiAJCS5uYW1lCT0gQ0FSRE5BTUUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkucG0JPSAmc21jX2Rydl9wbV9vcHMsCi0jaWZkZWYgQ09ORklHX09GCiAJCS5vZl9tYXRjaF90YWJsZSA9IHNtYzkxeF9tYXRjaCwKLSNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IGY0YjAxYzYuLmExZjlmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC01Nzc0LDcgKzU3NzQsNyBAQAogCQkJIGRtYV91bm1hcF9hZGRyKHR4YiwgbWFwcGluZyksCiAJCQkgc2tiX2hlYWRsZW4oc2tiKSwKIAkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKLQlmb3IgKGkgPSAwOyBpIDw9IGxhc3Q7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsYXN0OyBpKyspIHsKIAkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwogCiAJCWVudHJ5ID0gTkVYVF9UWChlbnRyeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwppbmRleCAxMzEzYWExLi4yYmVkYzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKQEAgLTcyNyw3ICs3MjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc2hvcnQgbWFkZ2VtY19hZGFwdGVyX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIHNob3J0IG1hZGdlbWNfYWRhcHRlcl9pZHNbXSBfX2luaXRkYXRhID0gewogCTB4MDAyZCwKIAkweDAwMDAKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwppbmRleCA0NTE0NGQ1Li5lZmFhMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTE5OTUsNyArMTk5NSw3IEBACiAKIHN0YXRpYyB1X2NoYXIgZGU0eDVfaXJxW10gPSBFSVNBX0FMTE9XRURfSVJRX0xJU1Q7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGRlNHg1X2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmdlbmRldikKK3N0YXRpYyBpbnQgX19pbml0IGRlNHg1X2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmdlbmRldikKIHsKIAlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXY7CiAJdV9sb25nIGlvYmFzZTsKQEAgLTIwOTcsNyArMjA5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZGU0eDVfZWlzYV9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZGU0eDVfZWlzYV9pZHNbXSA9IHsKICAgICAgICAgeyAiREVDNDI1MCIsIDAgfSwJLyogMCBpcyB0aGUgYm9hcmQgbmFtZSBpbmRleC4uLiAqLwogICAgICAgICB7ICIiIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwppbmRleCBkNzIyMWM0Li44MDU2ZjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCWlmICghcS0+ZGlyICYmIHEtPmJ1ZiAmJiBxLT5sZW4pCiAJCW1lbWNweShjYXRjLT5jdHJsX2J1ZiwgcS0+YnVmLCBxLT5sZW4pOwogCi0JaWYgKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihjYXRjLT5jdHJsX3VyYiwgR0ZQX0tFUk5FTCkpKQorCWlmICgoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoY2F0Yy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkKIAkJZXJyKCJzdWJtaXQoY3RybF91cmIpIHN0YXR1cyAlZCIsIHN0YXR1cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCmluZGV4IGNkZDNhZTQuLmYzM2NhNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYwpAQCAtNTQsNyArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JuZXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CiAKLSNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCQkJIjI0LU1heS0yMDExIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJCQkiMDEtSnVuZS0yMDExIgogCiAvKiBDREMgTkNNIHN1YmNsYXNzIDMuMi4xICovCiAjZGVmaW5lIFVTQl9DRENfTkNNX05EUDE2X0xFTkdUSF9NSU4JCTB4MTAKQEAgLTEyMzQsNiArMTIzNCw3IEBACiAJLmRpc2Nvbm5lY3QgPSBjZGNfbmNtX2Rpc2Nvbm5lY3QsCiAJLnN1c3BlbmQgPSB1c2JuZXRfc3VzcGVuZCwKIAkucmVzdW1lID0gdXNibmV0X3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNibmV0X3Jlc3VtZSwKIAkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IDBjYjBiMDYuLmY2ODUzMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTYwOSw3ICs2MDksNyBAQAogCSAqIGJlZm9yZSBpdCBnZXRzIG91dCBvZiBoYW5kLiAgTmF0dXJhbGx5LCB0aGlzIHdhc3RlcyBlbnRyaWVzLiAqLwogCWlmIChjYXBhY2l0eSA8IDIrTUFYX1NLQl9GUkFHUykgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCWlmICh1bmxpa2VseSghdmlydHF1ZXVlX2VuYWJsZV9jYih2aS0+c3ZxKSkpIHsKKwkJaWYgKHVubGlrZWx5KCF2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWQodmktPnN2cSkpKSB7CiAJCQkvKiBNb3JlIGp1c3QgZ290IHVzZWQsIGZyZWUgdGhlbSB0aGVuIHJlY2hlY2suICovCiAJCQljYXBhY2l0eSArPSBmcmVlX29sZF94bWl0X3NrYnModmkpOwogCQkJaWYgKGNhcGFjaXR5ID49IDIrTUFYX1NLQl9GUkFHUykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYyBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKaW5kZXggNDAzOThiZi4uMjQyOTdiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYworKysgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCkBAIC01MTcsMTggKzUxNywxNyBAQAogICogYW5kIHNlbnQgb24gdG8gc29tZSBJUCBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgeDI1X2FzeV9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorc3RhdGljIHZvaWQgeDI1X2FzeV9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCB4MjVfYXN5ICpzbCA9IHR0eS0+ZGlzY19kYXRhOwotCWludCBieXRlcyA9IGNvdW50OwogCiAJaWYgKCFzbCB8fCBzbC0+bWFnaWMgIT0gWDI1X0FTWV9NQUdJQyB8fCAhbmV0aWZfcnVubmluZyhzbC0+ZGV2KSkKIAkJcmV0dXJuOwogCiAKIAkvKiBSZWFkIHRoZSBjaGFyYWN0ZXJzIG91dCBvZiB0aGUgYnVmZmVyICovCi0Jd2hpbGUgKGJ5dGVzLS0pIHsKKwl3aGlsZSAoY291bnQtLSkgewogCQlpZiAoZnAgJiYgKmZwKyspIHsKIAkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpKQogCQkJCXNsLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwpAQCAtNTM3LDggKzUzNiw2IEBACiAJCX0KIAkJeDI1X2FzeV91bmVzYyhzbCwgKmNwKyspOwogCX0KLQotCXJldHVybiBjb3VudDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCmluZGV4IDIyMDQ3NjIuLmI2YzVkMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwpAQCAtNzIsNiArNzIsMTEgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChhbGxfY2hhbm5lbHMsIG1vZHBhcmFtX2FsbF9jaGFubmVscywgYm9vbCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGFsbF9jaGFubmVscywgIkV4cG9zZSBhbGwgY2hhbm5lbHMgdGhlIGRldmljZSBjYW4gdXNlLiIpOwogCitzdGF0aWMgaW50IG1vZHBhcmFtX2Zhc3RjaGFuc3dpdGNoOworbW9kdWxlX3BhcmFtX25hbWVkKGZhc3RjaGFuc3dpdGNoLCBtb2RwYXJhbV9mYXN0Y2hhbnN3aXRjaCwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGZhc3RjaGFuc3dpdGNoLCAiRW5hYmxlIGZhc3QgY2hhbm5lbCBzd2l0Y2hpbmcgZm9yIEFSMjQxMy9BUjU0MTMgcmFkaW9zLiIpOworCisKIC8qIE1vZHVsZSBpbmZvICovCiBNT0RVTEVfQVVUSE9SKCJKaXJpIFNsYWJ5Iik7CiBNT0RVTEVfQVVUSE9SKCJOaWNrIEtvc3NpZmlkaXMiKTsKQEAgLTI2ODYsNiArMjY5MSw3IEBACiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoNWtfaHdfY29tbW9uKGFoKTsKIAlpbnQgcmV0LCBhbmlfbW9kZTsKKwlib29sIGZhc3Q7CiAKIAlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULCAicmVzZXR0aW5nXG4iKTsKIApAQCAtMjcwNSw3ICsyNzExLDEwIEBACiAJYXRoNWtfZHJhaW5fdHhfYnVmZnMoc2MpOwogCWlmIChjaGFuKQogCQlzYy0+Y3VyY2hhbiA9IGNoYW47Ci0JcmV0ID0gYXRoNWtfaHdfcmVzZXQoYWgsIHNjLT5vcG1vZGUsIHNjLT5jdXJjaGFuLCBjaGFuICE9IE5VTEwsCisKKwlmYXN0ID0gKChjaGFuICE9IE5VTEwpICYmIG1vZHBhcmFtX2Zhc3RjaGFuc3dpdGNoKSA/IDEgOiAwOworCisJcmV0ID0gYXRoNWtfaHdfcmVzZXQoYWgsIHNjLT5vcG1vZGUsIHNjLT5jdXJjaGFuLCBmYXN0LAogCQkJCQkJCQlza2lwX3BjdSk7CiAJaWYgKHJldCkgewogCQlBVEg1S19FUlIoc2MsICJjYW4ndCByZXNldCBoYXJkd2FyZSAoJWQpXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwppbmRleCAzNTEwZGUyLi4xMjZhNGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwpAQCAtMTEyNCw4ICsxMTI0LDExIEBACiAJCQkvKiBOb24gZmF0YWwsIGNhbiBoYXBwZW4gZWcuCiAJCQkgKiBvbiBtb2RlIGNoYW5nZSAqLwogCQkJcmV0ID0gMDsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CisJCQlBVEg1S19EQkcoYWgtPmFoX3NjLCBBVEg1S19ERUJVR19SRVNFVCwKKwkJCQkiZmFzdCBjaGFuIGNoYW5nZSBzdWNjZXNzZnVsXG4iKTsKIAkJCXJldHVybiAwOworCQl9CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWcKaW5kZXggZDlmZjg0MS4uZDljMDhjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWcKQEAgLTI2LDcgKzI2LDYgQEAKIGNvbmZpZyBBVEg5S19QQ0kKIAlib29sICJBdGhlcm9zIGF0aDlrIFBDSS9QQ0llIGJ1cyBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVRIOUsgJiYgUENJCi0JZGVmYXVsdCBQQ0kKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBQQ0kgYnVzIHN1cHBvcnQgaW4gYXRoOWsuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYwppbmRleCAwMTVkOTc0Li4yZDRjMDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jCkBAIC04MjksNyArODI5LDcgQEAKIAlpZiAoQVJfU1JFVl85MjcxKGFoKSkgewogCQlpZiAoIWFyOTI4NV9od19jbF9jYWwoYWgsIGNoYW4pKQogCQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSBpZiAoQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkgeworCX0gZWxzZSBpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7CiAJCWlmICghYXI5Mjg1X2h3X2NsYyhhaCwgY2hhbikpCiAJCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCmluZGV4IDBjYTc2MzUuLmZmODE1MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYwpAQCAtNDY0NSwxMCArNDY0NSwxNiBAQAogCWNhc2UgMToKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQlzY2FsZWRQb3dlciAtPSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTjsKKwkJaWYgKHNjYWxlZFBvd2VyID4gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU4pCisJCQlzY2FsZWRQb3dlciAtPSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTjsKKwkJZWxzZQorCQkJc2NhbGVkUG93ZXIgPSAwOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47CisJCWlmIChzY2FsZWRQb3dlciA+IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU4pCisJCQlzY2FsZWRQb3dlciAtPSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOOworCQllbHNlCisJCQlzY2FsZWRQb3dlciA9IDA7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMKaW5kZXggZWVlMjNlYy4uODkyYzQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jCkBAIC0xMzgxLDMgKzEzODEsMjUgQEAKIAkJIj09PT0gQkIgdXBkYXRlOiBkb25lID09PT1cblxuIik7CiB9CiBFWFBPUlRfU1lNQk9MKGFyOTAwM19od19iYl93YXRjaGRvZ19kYmdfaW5mbyk7CisKK3ZvaWQgYXI5MDAzX2h3X2Rpc2FibGVfcGh5X3Jlc3RhcnQoc3RydWN0IGF0aF9odyAqYWgpCit7CisJdTMyIHZhbDsKKworCS8qIFdoaWxlIHJlY2VpdmluZyB1bnN1cHBvcnRlZCByYXRlIGZyYW1lIHJ4IHN0YXRlIG1hY2hpbmUKKwkgKiBnZXRzIGludG8gYSBzdGF0ZSAweGIgYW5kIGlmIHBoeV9yZXN0YXJ0IGhhcHBlbnMgaW4gdGhhdAorCSAqIHN0YXRlLCBCQiB3b3VsZCBnbyBoYW5nLiBJZiBSWFNNIGlzIGluIDB4YiBzdGF0ZSBhZnRlcgorCSAqIGZpcnN0IGJiIHBhbmljLCBlbnN1cmUgdG8gZGlzYWJsZSB0aGUgcGh5X3Jlc3RhcnQuCisJICovCisJaWYgKCEoKE1TKGFoLT5iYl93YXRjaGRvZ19sYXN0X3N0YXR1cywKKwkJICBBUl9QSFlfV0FUQ0hET0dfUlhfT0ZETV9TTSkgPT0gMHhiKSB8fAorCSAgICBhaC0+YmJfaGFuZ19yeF9vZmRtKSkKKwkJcmV0dXJuOworCisJYWgtPmJiX2hhbmdfcnhfb2ZkbSA9IHRydWU7CisJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9SRVNUQVJUKTsKKwl2YWwgJj0gfkFSX1BIWV9SRVNUQVJUX0VOQTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1JFU1RBUlQsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MKGFyOTAwM19od19kaXNhYmxlX3BoeV9yZXN0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV85Mjg3LmMKaW5kZXggNzg1NmYwZC4uMzQzZmM5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV85Mjg3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV85Mjg3LmMKQEAgLTUyNCwxMCArNTI0LDE2IEBACiAJY2FzZSAxOgogCQlicmVhazsKIAljYXNlIDI6Ci0JCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOworCQlpZiAoc2NhbGVkUG93ZXIgPiBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTikKKwkJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOworCQllbHNlCisJCQlzY2FsZWRQb3dlciA9IDA7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJc2NhbGVkUG93ZXIgLT0gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTjsKKwkJaWYgKHNjYWxlZFBvd2VyID4gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTikKKwkJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47CisJCWVsc2UKKwkJCXNjYWxlZFBvd2VyID0gMDsKIAkJYnJlYWs7CiAJfQogCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCA3MjU0M2NlLi4xYmU3YzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMTU1NSw5ICsxNTU1LDEyIEBACiAJaWYgKGFoLT5idGNvZXhfaHcuZW5hYmxlZCkKIAkJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShhaCk7CiAKLQlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkKKwlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgewogCQlhcjkwMDNfaHdfYmJfd2F0Y2hkb2dfY29uZmlnKGFoKTsKIAorCQlhcjkwMDNfaHdfZGlzYWJsZV9waHlfcmVzdGFydChhaCk7CisJfQorCiAJYXRoOWtfaHdfYXBwbHlfZ3Bpb19vdmVycmlkZShhaCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKaW5kZXggNTc0MzVjZS4uNGIxNTdjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKQEAgLTg0Miw2ICs4NDIsNyBAQAogCiAJdTMyIGJiX3dhdGNoZG9nX2xhc3Rfc3RhdHVzOwogCXUzMiBiYl93YXRjaGRvZ190aW1lb3V0X21zOyAvKiBpbiBtcywgMCB0byBkaXNhYmxlICovCisJdTggYmJfaGFuZ19yeF9vZmRtOyAvKiB0cnVlIGlmIGJiIGhhbmcgZHVlIHRvIHJ4X29mZG0gKi8KIAogCXVuc2lnbmVkIGludCBwYXByZF90YXJnZXRfcG93ZXI7CiAJdW5zaWduZWQgaW50IHBhcHJkX3RyYWluaW5nX3Bvd2VyOwpAQCAtOTkwLDYgKzk5MSw3IEBACiB2b2lkIGFyOTAwM19od19iYl93YXRjaGRvZ19jb25maWcoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhcjkwMDNfaHdfYmJfd2F0Y2hkb2dfcmVhZChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGFyOTAwM19od19iYl93YXRjaGRvZ19kYmdfaW5mbyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGFyOTAwM19od19kaXNhYmxlX3BoeV9yZXN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXI5MDAzX3BhcHJkX2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCB2YWwpOwogdm9pZCBhcjkwMDNfcGFwcmRfcG9wdWxhdGVfc2luZ2xlX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQlzdHJ1Y3QgYXRoOWtfaHdfY2FsX2RhdGEgKmNhbGRhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwppbmRleCBhMTk4ZWUzLi4yY2EzNTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKQEAgLTY3MCw3ICs2NzAsOCBAQAogCXUzMiBzdGF0dXMgPSBzYy0+aW50cnN0YXR1czsKIAl1MzIgcnhtYXNrOwogCi0JaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9GQVRBTCkgeworCWlmICgoc3RhdHVzICYgQVRIOUtfSU5UX0ZBVEFMKSB8fAorCSAgICAoc3RhdHVzICYgQVRIOUtfSU5UX0JCX1dBVENIRE9HKSkgewogCQlhdGhfcmVzZXQoc2MsIHRydWUpOwogCQlyZXR1cm47CiAJfQpAQCAtNzM3LDYgKzczOCw3IEBACiB7CiAjZGVmaW5lIFNDSEVEX0lOVFIgKAkJCQlcCiAJCUFUSDlLX0lOVF9GQVRBTCB8CQlcCisJCUFUSDlLX0lOVF9CQl9XQVRDSERPRyB8CQlcCiAJCUFUSDlLX0lOVF9SWE9STiB8CQlcCiAJCUFUSDlLX0lOVF9SWEVPTCB8CQlcCiAJCUFUSDlLX0lOVF9SWCB8CQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYwppbmRleCAxNzU0MjIxLi5iYTdmMzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYwpAQCAtNjg5LDcgKzY4OSw4IEBACiAKIAlpZiAoV0xBTl9SQ19QSFlfSFQocmF0ZV90YWJsZS0+aW5mb1tyaXhdLnBoeSkpIHsKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX01DUzsKLQkJaWYgKFdMQU5fUkNfUEhZXzQwKHJhdGVfdGFibGUtPmluZm9bcml4XS5waHkpKQorCQlpZiAoV0xBTl9SQ19QSFlfNDAocmF0ZV90YWJsZS0+aW5mb1tyaXhdLnBoeSkgJiYKKwkJICAgIGNvbmZfaXNfaHQ0MCgmdHhyYy0+aHctPmNvbmYpKQogCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKIAkJaWYgKFdMQU5fUkNfUEhZX1NHSShyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5KSkKIAkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKaW5kZXggOWVkNjUxNS4uMDU5NjBkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKQEAgLTMwOTMsNyArMzA5Myw3IEBACiAJaW50IGZyZXE7CiAJYm9vbCBhdm9pZCA9IGZhbHNlOwogCXU4IGxlbmd0aDsKLQl1MTYgdG1wLCBjb3JlLCB0eXBlLCBjb3VudCwgbWF4LCBudW1iLCBsYXN0LCBjbWQ7CisJdTE2IHRtcCwgY29yZSwgdHlwZSwgY291bnQsIG1heCwgbnVtYiwgbGFzdCA9IDAsIGNtZDsKIAljb25zdCB1MTYgKnRhYmxlOwogCWJvb2wgcGh5Nm9yNXg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtbGliLmMKaW5kZXggN2U1ZTg1YS4uYTdhNDczOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtbGliLmMKQEAgLTYyOCwxMSArNjI4LDExIEBACiAKIAkvKiByeF9zdGF0dXMgY2FycmllcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2V0IHRvIG1hYzgwMjExICovCiAJcnhfc3RhdHVzLm1hY3RpbWUgPSBsZTY0X3RvX2NwdShwaHlfcmVzLT50aW1lc3RhbXApOworCXJ4X3N0YXR1cy5iYW5kID0gKHBoeV9yZXMtPnBoeV9mbGFncyAmIFJYX1JFU19QSFlfRkxBR1NfQkFORF8yNF9NU0spID8KKwkJCQlJRUVFODAyMTFfQkFORF8yR0haIDogSUVFRTgwMjExX0JBTkRfNUdIWjsKIAlyeF9zdGF0dXMuZnJlcSA9CiAJCWllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShsZTE2X3RvX2NwdShwaHlfcmVzLT5jaGFubmVsKSwKIAkJCQkJCQlyeF9zdGF0dXMuYmFuZCk7Ci0Jcnhfc3RhdHVzLmJhbmQgPSAocGh5X3Jlcy0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19CQU5EXzI0X01TSykgPwotCQkJCUlFRUU4MDIxMV9CQU5EXzJHSFogOiBJRUVFODAyMTFfQkFORF81R0haOwogCXJ4X3N0YXR1cy5yYXRlX2lkeCA9CiAJCWl3bDQ5NjVfaHdyYXRlX3RvX21hYzgwMjExX2lkeChyYXRlX25fZmxhZ3MsIHJ4X3N0YXR1cy5iYW5kKTsKIAlyeF9zdGF0dXMuZmxhZyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUuYwppbmRleCBmNTQzM2M3Li5mYWNjOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LmMKQEAgLTEyMTgsMTAgKzEyMTgsMTAgQEAKIAkgKiByZWNlaXZlIGNvbW1pdF9yeG9uIHJlcXVlc3QKIAkgKiBhYm9ydCBhbnkgcHJldmlvdXMgY2hhbm5lbCBzd2l0Y2ggaWYgc3RpbGwgaW4gcHJvY2VzcwogCSAqLwotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgJiYKLQkgICAgKHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgIT0gY3R4LT5zdGFnaW5nLmNoYW5uZWwpKSB7CisJaWYgKHRlc3RfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSAmJgorCSAgICAocHJpdi0+c3dpdGNoX2NoYW5uZWwgIT0gY3R4LT5zdGFnaW5nLmNoYW5uZWwpKSB7CiAJCUlXTF9ERUJVR18xMUgocHJpdiwgImFib3J0IGNoYW5uZWwgc3dpdGNoIG9uICVkXG4iLAotCQkgICAgICBsZTE2X3RvX2NwdShwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsKSk7CisJCSAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN3aXRjaF9jaGFubmVsKSk7CiAJCWl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7CiAJfQogCkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogCiAJCW1lbWNweShhY3RpdmVfcnhvbiwgJmN0eC0+c3RhZ2luZywgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwogCQlpd2xfbGVnYWN5X3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdiwgY3R4KTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gc2V0X3R4X3Bvd2VyOwogCX0KIAogCS8qIElmIHdlIGFyZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBhbmQgdGhlIG5ldyBjb25maWcgcmVxdWlyZXMKQEAgLTEzMTcsNiArMTMxNyw3IEBACiAKIAlpd2w0OTY1X2luaXRfc2Vuc2l0aXZpdHkocHJpdik7CiAKK3NldF90eF9wb3dlcjoKIAkvKiBJZiB3ZSBpc3N1ZSBhIG5ldyBSWE9OIGNvbW1hbmQgd2hpY2ggcmVxdWlyZWQgYSB0dW5lIHRoZW4gd2UgbXVzdAogCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLwogCXJldCA9IGl3bF9sZWdhY3lfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX25leHQsIHRydWUpOwpAQCAtMTQwMyw5ICsxNDA0LDYgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgPSBjbWQuY2hhbm5lbDsKLQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSB0cnVlOwotCiAJcmV0dXJuIGl3bF9sZWdhY3lfc2VuZF9jbWRfcGR1KHByaXYsCiAJCQkgUkVQTFlfQ0hBTk5FTF9TV0lUQ0gsIHNpemVvZihjbWQpLCAmY21kKTsKIH0KQEAgLTE1NDMsNyArMTU0MSw3IEBACiAJczMyIHRlbXA7CiAKIAl0ZW1wID0gaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUocHJpdik7Ci0JaWYgKHRlbXAgPCAwKQorCWlmIChJV0xfVFhfUE9XRVJfVEVNUEVSQVRVUkVfT1VUX09GX1JBTkdFKHRlbXApKQogCQlyZXR1cm47CiAKIAlpZiAocHJpdi0+dGVtcGVyYXR1cmUgIT0gdGVtcCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMKaW5kZXggNDJkZjgzMi4uM2JlNzZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jCkBAIC04NTksMTIgKzg1OSw4IEBACiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKLQlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKSB7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKGN0eC0+dmlmLCBpc19zdWNjZXNzKTsKLQkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JfQogfQogRVhQT1JUX1NZTUJPTChpd2xfbGVnYWN5X2Noc3dpdGNoX2RvbmUpOwogCkBAIC04NzYsMTkgKzg3MiwxOSBAQAogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSAmcHJpdi0+Y29udGV4dHNbSVdMX1JYT05fQ1RYX0JTU107CiAJc3RydWN0IGl3bF9sZWdhY3lfcnhvbl9jbWQgKnJ4b24gPSAodm9pZCAqKSZjdHgtPmFjdGl2ZTsKIAotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MpIHsKLQkJaWYgKCFsZTMyX3RvX2NwdShjc2EtPnN0YXR1cykgJiYKLQkJICAgIChjc2EtPmNoYW5uZWwgPT0gcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCkpIHsKLQkJCXJ4b24tPmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci0JCQljdHgtPnN0YWdpbmcuY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKLQkJCUlXTF9ERUJVR18xMUgocHJpdiwgIkNTQSBub3RpZjogY2hhbm5lbCAlZFxuIiwKKwlpZiAoIXRlc3RfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJaWYgKCFsZTMyX3RvX2NwdShjc2EtPnN0YXR1cykgJiYgY3NhLT5jaGFubmVsID09IHByaXYtPnN3aXRjaF9jaGFubmVsKSB7CisJCXJ4b24tPmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7CisJCWN0eC0+c3RhZ2luZy5jaGFubmVsID0gY3NhLT5jaGFubmVsOworCQlJV0xfREVCVUdfMTFIKHByaXYsICJDU0Egbm90aWY6IGNoYW5uZWwgJWRcbiIsCiAJCQkgICAgICBsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpKTsKLQkJCWl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZShwcml2LCB0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCUlXTF9FUlIocHJpdiwgIkNTQSBub3RpZiAoZmFpbCkgOiBjaGFubmVsICVkXG4iLAotCQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSk7Ci0JCQlpd2xfbGVnYWN5X2Noc3dpdGNoX2RvbmUocHJpdiwgZmFsc2UpOwotCQl9CisJCWl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZShwcml2LCB0cnVlKTsKKwl9IGVsc2UgeworCQlJV0xfRVJSKHByaXYsICJDU0Egbm90aWYgKGZhaWwpIDogY2hhbm5lbCAlZFxuIiwKKwkJCWxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCkpOworCQlpd2xfbGVnYWN5X2Noc3dpdGNoX2RvbmUocHJpdiwgZmFsc2UpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woaXdsX2xlZ2FjeV9yeF9jc2EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmgKaW5kZXggYmM2NmM2MC4uYzVmYmRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5oCkBAIC01NjAsNyArNTYwLDcgQEAKICNkZWZpbmUgU1RBVFVTX1NDQU5fSFcJCTE1CiAjZGVmaW5lIFNUQVRVU19QT1dFUl9QTUkJMTYKICNkZWZpbmUgU1RBVFVTX0ZXX0VSUk9SCQkxNwotCisjZGVmaW5lIFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HIDE4CiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9sZWdhY3lfaXNfcmVhZHkoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oCmluZGV4IGJlMDEwNmMuLmVhMzAxMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmgKQEAgLTg1NSwxNyArODU1LDYgQEAKIH07CiAKIC8qCi0gKiBpd2xfc3dpdGNoX3J4b246ICJjaGFubmVsIHN3aXRjaCIgc3RydWN0dXJlCi0gKgotICogQCBzd2l0Y2hfaW5fcHJvZ3Jlc3M6IGNoYW5uZWwgc3dpdGNoIGluIHByb2dyZXNzCi0gKiBAIGNoYW5uZWw6IG5ldyBjaGFubmVsCi0gKi8KLXN0cnVjdCBpd2xfc3dpdGNoX3J4b24gewotCWJvb2wgc3dpdGNoX2luX3Byb2dyZXNzOwotCV9fbGUxNiBjaGFubmVsOwotfTsKLQotLyoKICAqIHNjaGVkdWxlIHRoZSB0aW1lciB0byB3YWtlIHVwIGV2ZXJ5IFVDT0RFX1RSQUNFX1BFUklPRCBtaWxsaXNlY29uZHMKICAqIHRvIHBlcmZvcm0gY29udGludW91cyB1Q29kZSBldmVudCBsb2dnaW5nIG9wZXJhdGlvbiBpZiBlbmFibGVkCiAgKi8KQEAgLTExMTUsNyArMTEwNCw3IEBACiAKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCBjb250ZXh0c1tOVU1fSVdMX1JYT05fQ1RYXTsKIAotCXN0cnVjdCBpd2xfc3dpdGNoX3J4b24gc3dpdGNoX3J4b247CisJX19sZTE2IHN3aXRjaF9jaGFubmVsOwogCiAJLyogMXN0IHJlc3BvbnNlcyBmcm9tIGluaXRpYWxpemUgYW5kIHJ1bnRpbWUgdUNvZGUgaW1hZ2VzLgogCSAqIF80OTY1J3MgaW5pdGlhbGl6ZSBhbGl2ZSByZXNwb25zZSBjb250YWlucyBzb21lIGNhbGlicmF0aW9uIGRhdGEuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0OTY1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCmluZGV4IGFmMmFlMjIuLjcxNTdiYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCkBAIC0yODYxLDE2ICsyODYxLDEzIEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8Ci0JICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpCisJICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgfHwKKwkgICAgdGVzdF9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlnb3RvIG91dDsKIAogCWlmICghaXdsX2xlZ2FjeV9pc19hc3NvY2lhdGVkX2N0eChjdHgpKQogCQlnb3RvIG91dDsKIAotCS8qIGNoYW5uZWwgc3dpdGNoIGluIHByb2dyZXNzICovCi0JaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9PSB0cnVlKQotCQlnb3RvIG91dDsKLQogCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5zZXRfY2hhbm5lbF9zd2l0Y2gpIHsKIAogCQljaCA9IGNoYW5uZWwtPmh3X3ZhbHVlOwpAQCAtMjkxOSwxNSArMjkxNiwxOCBAQAogCQkJICogYXQgdGhpcyBwb2ludCwgc3RhZ2luZ19yeG9uIGhhcyB0aGUKIAkJCSAqIGNvbmZpZ3VyYXRpb24gZm9yIGNoYW5uZWwgc3dpdGNoCiAJCQkgKi8KLQkJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5zZXRfY2hhbm5lbF9zd2l0Y2gocHJpdiwKLQkJCQkJCQkJICAgIGNoX3N3aXRjaCkpCi0JCQkJcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gZmFsc2U7CisJCQlzZXRfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKKwkJCXByaXYtPnN3aXRjaF9jaGFubmVsID0gY3B1X3RvX2xlMTYoY2gpOworCQkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9jaGFubmVsX3N3aXRjaChwcml2LCBjaF9zd2l0Y2gpKSB7CisJCQkJY2xlYXJfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLAorCQkJCQkgICZwcml2LT5zdGF0dXMpOworCQkJCXByaXYtPnN3aXRjaF9jaGFubmVsID0gMDsKKwkJCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgZmFsc2UpOworCQkJfQogCQl9CiAJfQogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCWlmICghcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKQotCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgZmFsc2UpOwogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0yMDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0yMDAwLmMKaW5kZXggODZmZWVjOC4uMjI4MjI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMjAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTIwMDAuYwpAQCAtMTc3LDc5ICsxNzcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl3bDIwMzBfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bF9wcml2ICpwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCAqY2hfc3dpdGNoKQotewotCS8qCi0JICogTVVMVEktRklYTUUKLQkgKiBTZWUgaXdsX21hY19jaGFubmVsX3N3aXRjaC4KLQkgKi8KLQlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gJnByaXYtPmNvbnRleHRzW0lXTF9SWE9OX0NUWF9CU1NdOwotCXN0cnVjdCBpd2w2MDAwX2NoYW5uZWxfc3dpdGNoX2NtZCBjbWQ7Ci0JY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87Ci0JdTMyIHN3aXRjaF90aW1lX2luX3VzZWMsIHVjb2RlX3N3aXRjaF90aW1lOwotCXUxNiBjaDsKLQl1MzIgdHNmX2xvdzsKLQl1OCBzd2l0Y2hfY291bnQ7Ci0JdTE2IGJlYWNvbl9pbnRlcnZhbCA9IGxlMTZfdG9fY3B1KGN0eC0+dGltaW5nLmJlYWNvbl9pbnRlcnZhbCk7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IGN0eC0+dmlmOwotCXN0cnVjdCBpd2xfaG9zdF9jbWQgaGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfQ0hBTk5FTF9TV0lUQ0gsCi0JCS5sZW4gPSB7IHNpemVvZihjbWQpLCB9LAotCQkuZmxhZ3MgPSBDTURfU1lOQywKLQkJLmRhdGEgPSB7ICZjbWQsIH0sCi0JfTsKLQotCWNtZC5iYW5kID0gcHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haOwotCWNoID0gY2hfc3dpdGNoLT5jaGFubmVsLT5od192YWx1ZTsKLQlJV0xfREVCVUdfMTFIKHByaXYsICJjaGFubmVsIHN3aXRjaCBmcm9tICV1IHRvICV1XG4iLAotCQljdHgtPmFjdGl2ZS5jaGFubmVsLCBjaCk7Ci0JY21kLmNoYW5uZWwgPSBjcHVfdG9fbGUxNihjaCk7Ci0JY21kLnJ4b25fZmxhZ3MgPSBjdHgtPnN0YWdpbmcuZmxhZ3M7Ci0JY21kLnJ4b25fZmlsdGVyX2ZsYWdzID0gY3R4LT5zdGFnaW5nLmZpbHRlcl9mbGFnczsKLQlzd2l0Y2hfY291bnQgPSBjaF9zd2l0Y2gtPmNvdW50OwotCXRzZl9sb3cgPSBjaF9zd2l0Y2gtPnRpbWVzdGFtcCAmIDB4MGZmZmZmZmZmOwotCS8qCi0JICogY2FsY3VsYXRlIHRoZSB1Y29kZSBjaGFubmVsIHN3aXRjaCB0aW1lCi0JICogYWRkaW5nIFRTRiBhcyBvbmUgb2YgdGhlIGZhY3RvciBmb3Igd2hlbiB0byBzd2l0Y2gKLQkgKi8KLQlpZiAoKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lID4gdHNmX2xvdykgJiYgYmVhY29uX2ludGVydmFsKSB7Ci0JCWlmIChzd2l0Y2hfY291bnQgPiAoKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lIC0gdHNmX2xvdykgLwotCQkgICAgYmVhY29uX2ludGVydmFsKSkgewotCQkJc3dpdGNoX2NvdW50IC09IChwcml2LT51Y29kZV9iZWFjb25fdGltZSAtCi0JCQkJdHNmX2xvdykgLyBiZWFjb25faW50ZXJ2YWw7Ci0JCX0gZWxzZQotCQkJc3dpdGNoX2NvdW50ID0gMDsKLQl9Ci0JaWYgKHN3aXRjaF9jb3VudCA8PSAxKQotCQljbWQuc3dpdGNoX3RpbWUgPSBjcHVfdG9fbGUzMihwcml2LT51Y29kZV9iZWFjb25fdGltZSk7Ci0JZWxzZSB7Ci0JCXN3aXRjaF90aW1lX2luX3VzZWMgPQotCQkJdmlmLT5ic3NfY29uZi5iZWFjb25faW50ICogc3dpdGNoX2NvdW50ICogVElNRV9VTklUOwotCQl1Y29kZV9zd2l0Y2hfdGltZSA9IGl3bF91c2Vjc190b19iZWFjb25zKHByaXYsCi0JCQkJCQlzd2l0Y2hfdGltZV9pbl91c2VjLAotCQkJCQkJYmVhY29uX2ludGVydmFsKTsKLQkJY21kLnN3aXRjaF90aW1lID0gaXdsX2FkZF9iZWFjb25fdGltZShwcml2LAotCQkJCQkJcHJpdi0+dWNvZGVfYmVhY29uX3RpbWUsCi0JCQkJCQl1Y29kZV9zd2l0Y2hfdGltZSwKLQkJCQkJCWJlYWNvbl9pbnRlcnZhbCk7Ci0JfQotCUlXTF9ERUJVR18xMUgocHJpdiwgInVDb2RlIHRpbWUgZm9yIHRoZSBzd2l0Y2ggaXMgMHgleFxuIiwKLQkJICAgICAgY21kLnN3aXRjaF90aW1lKTsKLQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwgY2gpOwotCWlmIChjaF9pbmZvKQotCQljbWQuZXhwZWN0X2JlYWNvbiA9IGlzX2NoYW5uZWxfcmFkYXIoY2hfaW5mbyk7Ci0JZWxzZSB7Ci0JCUlXTF9FUlIocHJpdiwgImludmFsaWQgY2hhbm5lbCBzd2l0Y2ggZnJvbSAldSB0byAldVxuIiwKLQkJCWN0eC0+YWN0aXZlLmNoYW5uZWwsIGNoKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgPSBjbWQuY2hhbm5lbDsKLQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSB0cnVlOwotCi0JcmV0dXJuIGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZoY21kKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wyMDAwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDIwMDBfaHdfc2V0X2h3X3BhcmFtcywKIAkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bGFnbl9yeF9oYW5kbGVyX3NldHVwLApAQCAtMjU4LDcgKzE4NSw2IEBACiAJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2xhZ25faHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKIAkuc2VuZF90eF9wb3dlciA9IGl3bGFnbl9zZW5kX3R4X3Bvd2VyLAogCS51cGRhdGVfY2hhaW5fZmxhZ3MgPSBpd2xfdXBkYXRlX2NoYWluX2ZsYWdzLAotCS5zZXRfY2hhbm5lbF9zd2l0Y2ggPSBpd2wyMDMwX2h3X2NoYW5uZWxfc3dpdGNoLAogCS5hcG1fb3BzID0gewogCQkuaW5pdCA9IGl3bF9hcG1faW5pdCwKIAkJLmNvbmZpZyA9IGl3bDIwMDBfbmljX2NvbmZpZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCBhNzBiOGNmLi5mOTlmOWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC0zMzEsOCArMzMxLDYgQEAKIAkJCWN0eC0+YWN0aXZlLmNoYW5uZWwsIGNoKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCXByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgPSBjbWQuY2hhbm5lbDsKLQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSB0cnVlOwogCiAJcmV0dXJuIGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZoY21kKTsKIH0KQEAgLTQyNSw3ICs0MjMsNiBAQAogfTsKIHN0YXRpYyBzdHJ1Y3QgaXdsX2h0X3BhcmFtcyBpd2w1MDAwX2h0X3BhcmFtcyA9IHsKIAkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKLQkudXNlX3J0c19mb3JfYWdncmVnYXRpb24gPSB0cnVlLCAvKiB1c2UgcnRzL2N0cyBwcm90ZWN0aW9uICovCiB9OwogCiAjZGVmaW5lIElXTF9ERVZJQ0VfNTAwMAkJCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwppbmRleCBmOGM3MTBkLi5mYmU1NjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC0yNzAsOCArMjcwLDYgQEAKIAkJCWN0eC0+YWN0aXZlLmNoYW5uZWwsIGNoKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCXByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgPSBjbWQuY2hhbm5lbDsKLQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSB0cnVlOwogCiAJcmV0dXJuIGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZoY21kKTsKIH0KQEAgLTYwMywxOSArNjAxLDI3IEBACiAJSVdMX0RFVklDRV82MDUwLAogfTsKIAorI2RlZmluZSBJV0xfREVWSUNFXzYxNTAJCQkJCQlcCisJLmZ3X25hbWVfcHJlID0gSVdMNjA1MF9GV19QUkUsCQkJCVwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwNTBfVUNPREVfQVBJX01BWCwJCQlcCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4sCQkJXAorCS5vcHMgPSAmaXdsNjE1MF9vcHMsCQkJCQlcCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNjE1MF9FRVBST01fVkVSU0lPTiwJCVwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MTUwX1RYX1BPV0VSX1ZFUlNJT04sCVwKKwkuYmFzZV9wYXJhbXMgPSAmaXdsNjA1MF9iYXNlX3BhcmFtcywJCQlcCisJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAkJCQkJXAorCS5sZWRfbW9kZSA9IElXTF9MRURfQkxJTkssCQkJCVwKKwkuaW50ZXJuYWxfd2ltYXhfY29leCA9IHRydWUKKwogc3RydWN0IGl3bF9jZmcgaXdsNjE1MF9iZ25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIFdpcmVsZXNzLU4gKyBXaU1BWCA2MTUwIEJHTiIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNjA1MF9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4sCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNjE1MF9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MTUwX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2w2MTUwX29wcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsNjA1MF9iYXNlX3BhcmFtcywKKwlJV0xfREVWSUNFXzYxNTAsCiAJLmh0X3BhcmFtcyA9ICZpd2w2MDAwX2h0X3BhcmFtcywKLQkubmVlZF9kY19jYWxpYiA9IHRydWUsCi0JLmxlZF9tb2RlID0gSVdMX0xFRF9SRl9TVEFURSwKLQkuaW50ZXJuYWxfd2ltYXhfY29leCA9IHRydWUsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MTUwX2JnX2NmZyA9IHsKKwkubmFtZSA9ICJJbnRlbChSKSBDZW50cmlubyhSKSBXaXJlbGVzcy1OICsgV2lNQVggNjE1MCBCRyIsCisJSVdMX0RFVklDRV82MTUwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC5jCmluZGV4IGIxMmM3MmQuLjIzZmE5M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYwpAQCAtMTYzLDE3ICsxNjMsOSBAQAogCQkJCSAgICAgX19sZTE2IGZjLCBfX2xlMzIgKnR4X2ZsYWdzKQogewogCWlmIChpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTIHx8Ci0JICAgIGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7CisJICAgIGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUIHx8CisJICAgIGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKIAkJKnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfUFJPVF9SRVFVSVJFX01TSzsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChwcml2LT5jZmctPmh0X3BhcmFtcyAmJgotCSAgICBwcml2LT5jZmctPmh0X3BhcmFtcy0+dXNlX3J0c19mb3JfYWdncmVnYXRpb24gJiYKLQkgICAgaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7Ci0JCSp0eF9mbGFncyB8PSBUWF9DTURfRkxHX1BST1RfUkVRVUlSRV9NU0s7Ci0JCXJldHVybjsKLQl9CiB9CiAKIC8qIENhbGMgbWF4IHNpZ25hbCBsZXZlbCAoZEJtKSBhbW9uZyAzIHBvc3NpYmxlIHJlY2VpdmVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMKaW5kZXggYTk1YWQ4NC4uMDlmNjc5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCkBAIC0zMjUsNiArMzI1LDE0IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKKwkvKgorCSAqIGZvcmNlIENUUy10by1zZWxmIGZyYW1lcyBwcm90ZWN0aW9uIGlmIFJUUy1DVFMgaXMgbm90IHByZWZlcnJlZAorCSAqIG9uZSBhZ2dyZWdhdGlvbiBwcm90ZWN0aW9uIG1ldGhvZAorCSAqLworCWlmICghKHByaXYtPmNmZy0+aHRfcGFyYW1zICYmCisJICAgICAgcHJpdi0+Y2ZnLT5odF9wYXJhbXMtPnVzZV9ydHNfZm9yX2FnZ3JlZ2F0aW9uKSkKKwkJY3R4LT5zdGFnaW5nLmZsYWdzIHw9IFJYT05fRkxHX1NFTEZfQ1RTX0VOOworCiAJaWYgKChjdHgtPnZpZiAmJiBjdHgtPnZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3Nsb3QpIHx8CiAJICAgICEoY3R4LT5zdGFnaW5nLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSkKIAkJY3R4LT5zdGFnaW5nLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwpAQCAtMzQyLDEwICszNTAsMTAgQEAKIAkgKiByZWNlaXZlIGNvbW1pdF9yeG9uIHJlcXVlc3QKIAkgKiBhYm9ydCBhbnkgcHJldmlvdXMgY2hhbm5lbCBzd2l0Y2ggaWYgc3RpbGwgaW4gcHJvY2VzcwogCSAqLwotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgJiYKLQkgICAgKHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgIT0gY3R4LT5zdGFnaW5nLmNoYW5uZWwpKSB7CisJaWYgKHRlc3RfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSAmJgorCSAgICAocHJpdi0+c3dpdGNoX2NoYW5uZWwgIT0gY3R4LT5zdGFnaW5nLmNoYW5uZWwpKSB7CiAJCUlXTF9ERUJVR18xMUgocHJpdiwgImFib3J0IGNoYW5uZWwgc3dpdGNoIG9uICVkXG4iLAotCQkgICAgICBsZTE2X3RvX2NwdShwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsKSk7CisJCQkgICAgICBsZTE2X3RvX2NwdShwcml2LT5zd2l0Y2hfY2hhbm5lbCkpOwogCQlpd2xfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7CiAJfQogCkBAIC0zNjIsNiArMzcwLDExIEBACiAJCX0KIAogCQltZW1jcHkoYWN0aXZlLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZSkpOworCQkvKgorCQkgKiBXZSBkbyBub3QgY29tbWl0IHR4IHBvd2VyIHNldHRpbmdzIHdoaWxlIGNoYW5uZWwgY2hhbmdpbmcsCisJCSAqIGRvIGl0IG5vdyBpZiBhZnRlciBzZXR0aW5ncyBjaGFuZ2VkLgorCQkgKi8KKwkJaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl9uZXh0LCBmYWxzZSk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAxMWM2YzExLi44ZTE5NDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMjg0MywxNiArMjg0MywxMyBAQAogCQlnb3RvIG91dDsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSB8fAotCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQorCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpIHx8CisJICAgIHRlc3RfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJZ290byBvdXQ7CiAKIAlpZiAoIWl3bF9pc19hc3NvY2lhdGVkX2N0eChjdHgpKQogCQlnb3RvIG91dDsKIAotCS8qIGNoYW5uZWwgc3dpdGNoIGluIHByb2dyZXNzICovCi0JaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9PSB0cnVlKQotCQlnb3RvIG91dDsKLQogCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5zZXRfY2hhbm5lbF9zd2l0Y2gpIHsKIAogCQljaCA9IGNoYW5uZWwtPmh3X3ZhbHVlOwpAQCAtMjkwMSwxNSArMjg5OCwxOSBAQAogCQkJICogYXQgdGhpcyBwb2ludCwgc3RhZ2luZ19yeG9uIGhhcyB0aGUKIAkJCSAqIGNvbmZpZ3VyYXRpb24gZm9yIGNoYW5uZWwgc3dpdGNoCiAJCQkgKi8KKwkJCXNldF9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOworCQkJcHJpdi0+c3dpdGNoX2NoYW5uZWwgPSBjcHVfdG9fbGUxNihjaCk7CiAJCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2V0X2NoYW5uZWxfc3dpdGNoKHByaXYsCi0JCQkJCQkJCSAgICBjaF9zd2l0Y2gpKQotCQkJCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IGZhbHNlOworCQkJCQkJCQkgICAgY2hfc3dpdGNoKSkgeworCQkJCWNsZWFyX2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywKKwkJCQkJICAmcHJpdi0+c3RhdHVzKTsKKwkJCQlwcml2LT5zd2l0Y2hfY2hhbm5lbCA9IDA7CisJCQkJaWVlZTgwMjExX2Noc3dpdGNoX2RvbmUoY3R4LT52aWYsIGZhbHNlKTsKKwkJCX0KIAkJfQogCX0KIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpZiAoIXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcykKLQkJaWVlZTgwMjExX2Noc3dpdGNoX2RvbmUoY3R4LT52aWYsIGZhbHNlKTsKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIApAQCAtMzgzMSwxMSArMzgzMiwxMSBAQAogCiAvKiA2MTUwIFdpRmkvV2lNYXggU2VyaWVzICovCiAJe0lXTF9QQ0lfREVWSUNFKDB4MDg4NSwgMHgxMzA1LCBpd2w2MTUwX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMDYsIGl3bDYxNTBfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4ODUsIDB4MTMwNywgaXdsNjE1MF9iZ19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMjUsIGl3bDYxNTBfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4ODUsIDB4MTMyNiwgaXdsNjE1MF9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg4NSwgMHgxMzI3LCBpd2w2MTUwX2JnX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDA4ODYsIDB4MTMxNSwgaXdsNjE1MF9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg4NiwgMHgxMzE2LCBpd2w2MTUwX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODg2LCAweDEzMTcsIGl3bDYxNTBfYmdfY2ZnKX0sCiAKIC8qIDEwMDAgU2VyaWVzIFdpRmkgKi8KIAl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgzLCAweDEyMDUsIGl3bDEwMDBfYmduX2NmZyl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uaAppbmRleCAyNDk1ZmU3Li5kMTcxNjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uaApAQCAtODksNiArODksNyBAQAogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFnbl9jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWJnX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MTUwX2Jnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjE1MF9iZ19jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDEwMDBfYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDEwMF9iZ25fY2ZnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCmluZGV4IDQ2NTNkZWEuLjIxM2M4MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKQEAgLTg0MywxMiArODQzLDggQEAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MpIHsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJaWVlZTgwMjExX2Noc3dpdGNoX2RvbmUoY3R4LT52aWYsIGlzX3N1Y2Nlc3MpOwotCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IGZhbHNlOwotCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQl9CiB9CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCmluZGV4IDNiYjc2ZjYuLmE1NGQ0MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKQEAgLTU2MCw2ICs1NjAsNyBAQAogI2RlZmluZSBTVEFUVVNfUE9XRVJfUE1JCTE2CiAjZGVmaW5lIFNUQVRVU19GV19FUlJPUgkJMTcKICNkZWZpbmUgU1RBVFVTX0RFVklDRV9FTkFCTEVECTE4CisjZGVmaW5lIFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HIDE5CiAKIAogc3RhdGljIGlubGluZSBpbnQgaXdsX2lzX3JlYWR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggMjJhNmUzZS4uYzhkZTIzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTk4MiwxNyArOTgyLDYgQEAKIH07CiAKIC8qCi0gKiBpd2xfc3dpdGNoX3J4b246ICJjaGFubmVsIHN3aXRjaCIgc3RydWN0dXJlCi0gKgotICogQCBzd2l0Y2hfaW5fcHJvZ3Jlc3M6IGNoYW5uZWwgc3dpdGNoIGluIHByb2dyZXNzCi0gKiBAIGNoYW5uZWw6IG5ldyBjaGFubmVsCi0gKi8KLXN0cnVjdCBpd2xfc3dpdGNoX3J4b24gewotCWJvb2wgc3dpdGNoX2luX3Byb2dyZXNzOwotCV9fbGUxNiBjaGFubmVsOwotfTsKLQotLyoKICAqIHNjaGVkdWxlIHRoZSB0aW1lciB0byB3YWtlIHVwIGV2ZXJ5IFVDT0RFX1RSQUNFX1BFUklPRCBtaWxsaXNlY29uZHMKICAqIHRvIHBlcmZvcm0gY29udGludW91cyB1Q29kZSBldmVudCBsb2dnaW5nIG9wZXJhdGlvbiBpZiBlbmFibGVkCiAgKi8KQEAgLTEyODcsNyArMTI3Niw3IEBACiAKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCBjb250ZXh0c1tOVU1fSVdMX1JYT05fQ1RYXTsKIAotCXN0cnVjdCBpd2xfc3dpdGNoX3J4b24gc3dpdGNoX3J4b247CisJX19sZTE2IHN3aXRjaF9jaGFubmVsOwogCiAJc3RydWN0IHsKIAkJdTMyIGVycm9yX2V2ZW50X3RhYmxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKaW5kZXggMDA1M2U5ZS4uYjc3NDUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC0yNTAsMTkgKzI1MCwxOSBAQAogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSAmcHJpdi0+Y29udGV4dHNbSVdMX1JYT05fQ1RYX0JTU107CiAJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICh2b2lkICopJmN0eC0+YWN0aXZlOwogCi0JaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcykgewotCQlpZiAoIWxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSAmJgotCQkgICAgKGNzYS0+Y2hhbm5lbCA9PSBwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsKSkgewotCQkJcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKLQkJCWN0eC0+c3RhZ2luZy5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotCQkJSVdMX0RFQlVHXzExSChwcml2LCAiQ1NBIG5vdGlmOiBjaGFubmVsICVkXG4iLAorCWlmICghdGVzdF9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAoIWxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSAmJiBjc2EtPmNoYW5uZWwgPT0gcHJpdi0+c3dpdGNoX2NoYW5uZWwpIHsKKwkJcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKKwkJY3R4LT5zdGFnaW5nLmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7CisJCUlXTF9ERUJVR18xMUgocHJpdiwgIkNTQSBub3RpZjogY2hhbm5lbCAlZFxuIiwKIAkJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCkpOwotCQkJaXdsX2Noc3dpdGNoX2RvbmUocHJpdiwgdHJ1ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlJV0xfRVJSKHByaXYsICJDU0Egbm90aWYgKGZhaWwpIDogY2hhbm5lbCAlZFxuIiwKLQkJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCkpOwotCQkJaXdsX2Noc3dpdGNoX2RvbmUocHJpdiwgZmFsc2UpOwotCQl9CisJCWl3bF9jaHN3aXRjaF9kb25lKHByaXYsIHRydWUpOworCX0gZWxzZSB7CisJCUlXTF9FUlIocHJpdiwgIkNTQSBub3RpZiAoZmFpbCkgOiBjaGFubmVsICVkXG4iLAorCQkJbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSk7CisJCWl3bF9jaHN3aXRjaF9kb25lKHByaXYsIGZhbHNlKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKaW5kZXggODQ1NjZkYi4uNzFjOGYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKQEAgLTk5NCw2ICs5OTQsOCBAQAogCWNtZCA9IGNtZG5vZGUtPmNtZGJ1ZjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCXByaXYtPnNlcW51bSsrOworCWNtZC0+c2VxbnVtID0gY3B1X3RvX2xlMTYocHJpdi0+c2VxbnVtKTsKIAlwcml2LT5jdXJfY21kID0gY21kbm9kZTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCkBAIC0xNjIxLDExICsxNjIzLDkgQEAKIAkvKiBDb3B5IHRoZSBpbmNvbWluZyBjb21tYW5kIHRvIHRoZSBidWZmZXIgKi8KIAltZW1jcHkoY21kbm9kZS0+Y21kYnVmLCBpbl9jbWQsIGluX2NtZF9zaXplKTsKIAotCS8qIFNldCBzZXF1ZW5jZSBudW1iZXIsIGNsZWFuIHJlc3VsdCwgbW92ZSB0byBidWZmZXIgKi8KLQlwcml2LT5zZXFudW0rKzsKKwkvKiBTZXQgY29tbWFuZCwgY2xlYW4gcmVzdWx0LCBtb3ZlIHRvIGJ1ZmZlciAqLwogCWNtZG5vZGUtPmNtZGJ1Zi0+Y29tbWFuZCA9IGNwdV90b19sZTE2KGNvbW1hbmQpOwogCWNtZG5vZGUtPmNtZGJ1Zi0+c2l6ZSAgICA9IGNwdV90b19sZTE2KGluX2NtZF9zaXplKTsKLQljbWRub2RlLT5jbWRidWYtPnNlcW51bSAgPSBjcHVfdG9fbGUxNihwcml2LT5zZXFudW0pOwogCWNtZG5vZGUtPmNtZGJ1Zi0+cmVzdWx0ICA9IDA7CiAKIAlsYnNfZGViX2hvc3QoIlBSRVBfQ01EOiBjb21tYW5kIDB4JTA0eFxuIiwgY29tbWFuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKaW5kZXggYTdiNWNiMC4uMjI0ZTk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYwpAQCAtOTA3LDcgKzkwNyw3IEBACiAJY2FyZCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CiAKIAljYXVzZSA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgSUZfU0RJT19IX0lOVF9TVEFUVVMsICZyZXQpOwotCWlmIChyZXQpCisJaWYgKHJldCB8fCAhY2F1c2UpCiAJCWdvdG8gb3V0OwogCiAJbGJzX2RlYl9zZGlvKCJpbnRlcnJ1cHQ6IDB4JVhcbiIsICh1bnNpZ25lZCljYXVzZSk7CkBAIC0xMDA4LDEwICsxMDA4LDYgQEAKIAlpZiAocmV0KQogCQlnb3RvIHJlbGVhc2U7CiAKLQlyZXQgPSBzZGlvX2NsYWltX2lycShmdW5jLCBpZl9zZGlvX2ludGVycnVwdCk7Ci0JaWYgKHJldCkKLQkJZ290byBkaXNhYmxlOwotCiAJLyogRm9yIDEtYml0IHRyYW5zZmVycyB0byB0aGUgODY4NiBtb2RlbCwgd2UgbmVlZCB0byBlbmFibGUgdGhlCiAJICogaW50ZXJydXB0IGZsYWcgaW4gdGhlIENDQ1IgcmVnaXN0ZXIuIFNldCB0aGUgTU1DX1FVSVJLX0xFTklFTlRfRk4wCiAJICogYml0IHRvIGFsbG93IGFjY2VzcyB0byBub24tdmVuZG9yIHJlZ2lzdGVycy4gKi8KQEAgLTEwODMsNiArMTA3OSwyMSBAQAogCQljYXJkLT5yeF91bml0ID0gMDsKIAogCS8qCisJICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBsYXRlLgorCSAqCisJICogSWYgd2Ugc2V0IGl0IHVwIGVhcmxpZXIsIHRoZSAoYnVnZ3kpIGhhcmR3YXJlIGdlbmVyYXRlcyBhIHNwdXJpb3VzCisJICogaW50ZXJydXB0LCBldmVuIGJlZm9yZSB0aGUgaW50ZXJydXB0IGhhcyBiZWVuIGVuYWJsZWQsIHdpdGgKKwkgKiBDQ0NSX0lOVHggPSAwLgorCSAqCisJICogV2UgcmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyIGxhdGUgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGFueQorCSAqIHNwdXJpb3VzIGludGVycnVwdHMsIGFuZCBhbHNvIHRvIGF2b2lkIGdlbmVyYXRpb24gb2YgdGhhdCBrbm93bgorCSAqIHNwdXJpb3VzIGludGVycnVwdCBpbiB0aGUgZmlyc3QgcGxhY2UuCisJICovCisJcmV0ID0gc2Rpb19jbGFpbV9pcnEoZnVuYywgaWZfc2Rpb19pbnRlcnJ1cHQpOworCWlmIChyZXQpCisJCWdvdG8gZGlzYWJsZTsKKworCS8qCiAJICogRW5hYmxlIGludGVycnVwdHMgbm93IHRoYXQgZXZlcnl0aGluZyBpcyBzZXQgdXAKIAkgKi8KIAlzZGlvX3dyaXRlYihmdW5jLCAweDBmLCBJRl9TRElPX0hfSU5UX01BU0ssICZyZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uaAppbmRleCBhMGU5YmM1Li40ZTk3ZTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uaApAQCAtMTY3LDggKzE2Nyw4IEBACiAvKiBSeCB1bml0IHJlZ2lzdGVyICovCiAjZGVmaW5lIENBUkRfUlhfVU5JVF9SRUcJCTB4NjMKIAotLyogRXZlbnQgaGVhZGVyIExlbiovCi0jZGVmaW5lIE1XSUZJRVhfRVZFTlRfSEVBREVSX0xFTiAgICAgICAgICAgOAorLyogRXZlbnQgaGVhZGVyIGxlbiB3L28gNCBieXRlcyBvZiBpbnRlcmZhY2UgaGVhZGVyICovCisjZGVmaW5lIE1XSUZJRVhfRVZFTlRfSEVBREVSX0xFTiAgICAgICAgICAgNAogCiAvKiBNYXggcmV0cnkgbnVtYmVyIG9mIENNRDUzIHdyaXRlICovCiAjZGVmaW5lIE1BWF9XUklURV9JT01FTV9SRVRSWQkJMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwppbmRleCA5ZGVmMWU1Li5iMmY4YjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwpAQCAtMTY2LDcgKzE2Niw2IEBACiBjb25maWcgUlQyODAwVVNCX1JUNTNYWAogICAgICAgIGJvb2wgInJ0MjgwMHVzYiAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQ1M3h4IGRldmljZXMgKEVYUEVSSU1FTlRBTCkiCiAgICAgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLSAgICAgICBkZWZhdWx0IHkKICAgICAgICAtLS1oZWxwLS0tCiAgICAgICAgICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQ1M3h4IHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5IHRvIHRoZQogICAgICAgICAgcnQyODAwcGNpIGRyaXZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCA1NTUxODBkLi5iNzA0ZTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC0yNTAsNyArMjUwLDggQEAKIAlpZiAoaWVlZTgwMjExX2ZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpCiAJCXJ0MngwMGxpbmtfcmVzZXRfdHVuZXIocnQyeDAwZGV2LCBmYWxzZSk7CiAKLQlpZiAodGVzdF9iaXQoUkVRVUlSRV9QU19BVVRPV0FLRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSAmJgorCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpICYmCisJICAgIHRlc3RfYml0KFJFUVVJUkVfUFNfQVVUT1dBS0UsICZydDJ4MDBkZXYtPmNhcF9mbGFncykgJiYKIAkgICAgKGllZWU4MDIxMV9mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgJiYKIAkgICAgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpKSB7CiAJCWJlYWNvbl9kaWZmID0gKGxvbmcpamlmZmllcyAtIChsb25nKXJ0MngwMGRldi0+bGFzdF9iZWFjb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKaW5kZXggYzAxOGQ2Ny4uOTM5ODIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMTQ2LDYgKzE0Niw5IEBACiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgYXV0b3dha2V1cF93b3JrLndvcmspOwogCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKIAlpZiAocnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIFNUQVRFX0FXQUtFKSkKIAkJRVJST1IocnQyeDAwZGV2LCAiRGV2aWNlIGZhaWxlZCB0byB3YWtldXAuXG4iKTsKIAljbGVhcl9iaXQoQ09ORklHX1BPV0VSU0FWSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CkBAIC0xMTYwLDYgKzExNjMsNyBAQAogCSAqIFN0b3AgYWxsIHdvcmsuCiAJICovCiAJY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT5pbnRmX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5hdXRvd2FrZXVwX3dvcmspOwogCWlmIChydDJ4MDBfaXNfdXNiKHJ0MngwMGRldikpIHsKIAkJZGVsX3RpbWVyX3N5bmMoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGltZXIpOwogCQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJ4ZG9uZV93b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCmluZGV4IGE0MDk1MjguLjlmOGNjYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwpAQCAtNjY5LDYgKzY2OSwxNCBAQAogCQkJCQkJCSAmcnhfc3RhdHVzLAogCQkJCQkJCSAodTggKikgcGRlc2MsIHNrYik7CiAKKwkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKKwkJCWlmICh1bmxpa2VseSghbmV3X3NrYikpIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKKwkJCQkJIERCR19ETUVTRywKKwkJCQkJICgiY2FuJ3QgYWxsb2Mgc2tiIGZvciByeFxuIikpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwogCQkJcGNpX3VubWFwX3NpbmdsZShydGxwY2ktPnBkZXYsCiAJCQkJCSAqKChkbWFfYWRkcl90ICopIHNrYi0+Y2IpLAogCQkJCQkgcnRscGNpLT5yeGJ1ZmZlcnNpemUsCkBAIC02OTAsNyArNjk4LDcgQEAKIAkJCWhkciA9IHJ0bF9nZXRfaGRyKHNrYik7CiAJCQlmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKIAotCQkJaWYgKCFzdGF0cy5jcmMgfHwgIXN0YXRzLmh3ZXJyb3IpIHsKKwkJCWlmICghc3RhdHMuY3JjICYmICFzdGF0cy5od2Vycm9yKSB7CiAJCQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmcnhfc3RhdHVzLAogCQkJCSAgICAgICBzaXplb2Yocnhfc3RhdHVzKSk7CiAKQEAgLTc1OCwxNSArNzY2LDcgQEAKIAkJCQlydGxfbHBzX2xlYXZlKGh3KTsKIAkJCX0KIAotCQkJbmV3X3NrYiA9IGRldl9hbGxvY19za2IocnRscGNpLT5yeGJ1ZmZlcnNpemUpOwotCQkJaWYgKHVubGlrZWx5KCFuZXdfc2tiKSkgewotCQkJCVJUX1RSQUNFKHJ0bHByaXYsIChDT01QX0lOVFIgfCBDT01QX1JFQ1YpLAotCQkJCQkgREJHX0RNRVNHLAotCQkJCQkgKCJjYW4ndCBhbGxvYyBza2IgZm9yIHJ4XG4iKSk7Ci0JCQkJZ290byBkb25lOwotCQkJfQogCQkJc2tiID0gbmV3X3NrYjsKLQkJCS8qc2tiLT5kZXYgPSBkZXY7ICovCiAKIAkJCXJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLnJ4X2J1ZltydGxwY2ktPgogCQkJCQkJCSAgICAgcnhfcmluZwpAQCAtMTExMyw2ICsxMTEzLDEzIEBACiAKIAkJcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uaWR4ID0gMDsKIAorCQkvKiBJZiBhbXNkdV84ayBpcyBkaXNhYmxlZCwgc2V0IGJ1ZmZlcnNpemUgdG8gNDA5Ni4gVGhpcworCQkgKiBjaGFuZ2Ugd2lsbCByZWR1Y2UgbWVtb3J5IGZyYWdtZW50YXRpb24uCisJCSAqLworCQlpZiAocnRscGNpLT5yeGJ1ZmZlcnNpemUgPiA0MDk2ICYmCisJCSAgICBydGxwcml2LT5ydGxoYWwuZGlzYWJsZV9hbXNkdV84aykKKwkJCXJ0bHBjaS0+cnhidWZmZXJzaXplID0gNDA5NjsKKwogCQlmb3IgKGkgPSAwOyBpIDwgcnRscGNpLT5yeHJpbmdjb3VudDsgaSsrKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0KIAkJCSAgICBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY29uZi5oCmluZGV4IDFhYjZjODYuLmM4M2ZlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NvbmYuaApAQCAtMTE1Nyw2ICsxMTU3LDkgQEAKIAkvKiB0aW1lIHRvIHdhaXQgb24gdGhlIGNoYW5uZWwgZm9yIHBhc3NpdmUgc2NhbnMgKGluIFRVcykgKi8KIAl1MzIgZHdlbGxfdGltZV9wYXNzaXZlOwogCisJLyogdGltZSB0byB3YWl0IG9uIHRoZSBjaGFubmVsIGZvciBERlMgc2NhbnMgKGluIFRVcykgKi8KKwl1MzIgZHdlbGxfdGltZV9kZnM7CisKIAkvKiBudW1iZXIgb2YgcHJvYmUgcmVxdWVzdHMgdG8gc2VuZCBvbiBlYWNoIGNoYW5uZWwgaW4gYWN0aXZlIHNjYW5zICovCiAJdTggbnVtX3Byb2JlX3JlcXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jCmluZGV4IGJjMDBlNTIuLmU2NDk3ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYwpAQCAtMzExLDYgKzMxMSw3IEBACiAJCS5taW5fZHdlbGxfdGltZV9hY3RpdmUgPSA4LAogCQkubWF4X2R3ZWxsX3RpbWVfYWN0aXZlID0gMzAsCiAJCS5kd2VsbF90aW1lX3Bhc3NpdmUgICAgPSAxMDAsCisJCS5kd2VsbF90aW1lX2RmcyAgICAgICAgPSAxNTAsCiAJCS5udW1fcHJvYmVfcmVxcyAgICAgICAgPSAyLAogCQkucnNzaV90aHJlc2hvbGQgICAgICAgID0gLTkwLAogCQkuc25yX3RocmVzaG9sZCAgICAgICAgID0gMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Nhbi5jCmluZGV4IGYzN2U1YTMuLjU2Zjc2YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uYwpAQCAtMzMxLDE2ICszMzEsMjIgQEAKIAlzdHJ1Y3QgY29uZl9zY2hlZF9zY2FuX3NldHRpbmdzICpjID0gJndsLT5jb25mLnNjaGVkX3NjYW47CiAJaW50IGksIGo7CiAJdTMyIGZsYWdzOworCWJvb2wgZm9yY2VfcGFzc2l2ZSA9ICFyZXEtPm5fc3NpZHM7CiAKIAlmb3IgKGkgPSAwLCBqID0gc3RhcnQ7CiAJICAgICBpIDwgcmVxLT5uX2NoYW5uZWxzICYmIGogPCBNQVhfQ0hBTk5FTFNfQUxMX0JBTkRTOwogCSAgICAgaSsrKSB7CiAJCWZsYWdzID0gcmVxLT5jaGFubmVsc1tpXS0+ZmxhZ3M7CiAKLQkJaWYgKCEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkgJiYKLQkJICAgICgoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pID09IHBhc3NpdmUpICYmCi0JCSAgICAoKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fUkFEQVIpID09IHJhZGFyKSAmJgotCQkgICAgKHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQgPT0gYmFuZCkpIHsKKwkJaWYgKGZvcmNlX3Bhc3NpdmUpCisJCQlmbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisKKwkJaWYgKChyZXEtPmNoYW5uZWxzW2ldLT5iYW5kID09IGJhbmQpICYmCisJCSAgICAhKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpICYmCisJCSAgICAoISEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikgPT0gcmFkYXIpICYmCisJCSAgICAvKiBpZiByYWRhciBpcyBzZXQsIHdlIGlnbm9yZSB0aGUgcGFzc2l2ZSBmbGFnICovCisJCSAgICAocmFkYXIgfHwKKwkJICAgICAhIShmbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikgPT0gcGFzc2l2ZSkpIHsKIAkJCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiYmFuZCAlZCwgY2VudGVyX2ZyZXEgJWQgIiwKIAkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQsCiAJCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5jZW50ZXJfZnJlcSk7CkBAIC0zNTAsNyArMzU2LDEyIEBACiAJCQl3bDEyNzFfZGVidWcoREVCVUdfU0NBTiwgIm1heF9wb3dlciAlZCIsCiAJCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5tYXhfcG93ZXIpOwogCi0JCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pIHsKKwkJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSB7CisJCQkJY2hhbm5lbHNbal0uZmxhZ3MgfD0gU0NBTl9DSEFOTkVMX0ZMQUdTX0RGUzsKKwkJCQljaGFubmVsc1tqXS5wYXNzaXZlX2R1cmF0aW9uID0KKwkJCQkJY3B1X3RvX2xlMTYoYy0+ZHdlbGxfdGltZV9kZnMpOworCQkJfQorCQkJZWxzZSBpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pIHsKIAkJCQljaGFubmVsc1tqXS5wYXNzaXZlX2R1cmF0aW9uID0KIAkJCQkJY3B1X3RvX2xlMTYoYy0+ZHdlbGxfdGltZV9wYXNzaXZlKTsKIAkJCX0gZWxzZSB7CkBAIC0zNTksNyArMzcwLDcgQEAKIAkJCQljaGFubmVsc1tqXS5tYXhfZHVyYXRpb24gPQogCQkJCQljcHVfdG9fbGUxNihjLT5tYXhfZHdlbGxfdGltZV9hY3RpdmUpOwogCQkJfQotCQkJY2hhbm5lbHNbal0udHhfcG93ZXJfYXR0ID0gcmVxLT5jaGFubmVsc1tqXS0+bWF4X3Bvd2VyOworCQkJY2hhbm5lbHNbal0udHhfcG93ZXJfYXR0ID0gcmVxLT5jaGFubmVsc1tpXS0+bWF4X3Bvd2VyOwogCQkJY2hhbm5lbHNbal0uY2hhbm5lbCA9IHJlcS0+Y2hhbm5lbHNbaV0tPmh3X3ZhbHVlOwogCiAJCQlqKys7CkBAIC0zODYsNyArMzk3LDExIEBACiAJCXdsMTI3MV9zY2FuX2dldF9zY2hlZF9zY2FuX2NoYW5uZWxzKHdsLCByZXEsIGNmZy0+Y2hhbm5lbHMsCiAJCQkJCQkgICAgSUVFRTgwMjExX0JBTkRfMkdIWiwKIAkJCQkJCSAgICBmYWxzZSwgZmFsc2UsIGlkeCk7Ci0JaWR4ICs9IGNmZy0+YWN0aXZlWzBdOworCS8qCisJICogNUdIeiBjaGFubmVscyBhbHdheXMgc3RhcnQgYXQgcG9zaXRpb24gMTQsIG5vdCBpbW1lZGlhdGVseQorCSAqIGFmdGVyIHRoZSBsYXN0IDIuNEdIeiBjaGFubmVsCisJICovCisJaWR4ID0gMTQ7CiAKIAljZmctPnBhc3NpdmVbMV0gPQogCQl3bDEyNzFfc2Nhbl9nZXRfc2NoZWRfc2Nhbl9jaGFubmVscyh3bCwgcmVxLCBjZmctPmNoYW5uZWxzLApAQCAtMzk0LDIyICs0MDksMjMgQEAKIAkJCQkJCSAgICBmYWxzZSwgdHJ1ZSwgaWR4KTsKIAlpZHggKz0gY2ZnLT5wYXNzaXZlWzFdOwogCi0JY2ZnLT5hY3RpdmVbMV0gPQotCQl3bDEyNzFfc2Nhbl9nZXRfc2NoZWRfc2Nhbl9jaGFubmVscyh3bCwgcmVxLCBjZmctPmNoYW5uZWxzLAotCQkJCQkJICAgIElFRUU4MDIxMV9CQU5EXzVHSFosCi0JCQkJCQkgICAgZmFsc2UsIGZhbHNlLCAxNCk7Ci0JaWR4ICs9IGNmZy0+YWN0aXZlWzFdOwotCiAJY2ZnLT5kZnMgPQogCQl3bDEyNzFfc2Nhbl9nZXRfc2NoZWRfc2Nhbl9jaGFubmVscyh3bCwgcmVxLCBjZmctPmNoYW5uZWxzLAogCQkJCQkJICAgIElFRUU4MDIxMV9CQU5EXzVHSFosCi0JCQkJCQkgICAgdHJ1ZSwgZmFsc2UsIGlkeCk7CisJCQkJCQkgICAgdHJ1ZSwgdHJ1ZSwgaWR4KTsKIAlpZHggKz0gY2ZnLT5kZnM7CiAKKwljZmctPmFjdGl2ZVsxXSA9CisJCXdsMTI3MV9zY2FuX2dldF9zY2hlZF9zY2FuX2NoYW5uZWxzKHdsLCByZXEsIGNmZy0+Y2hhbm5lbHMsCisJCQkJCQkgICAgSUVFRTgwMjExX0JBTkRfNUdIWiwKKwkJCQkJCSAgICBmYWxzZSwgZmFsc2UsIGlkeCk7CisJaWR4ICs9IGNmZy0+YWN0aXZlWzFdOworCiAJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICIgICAgMi40R0h6OiBhY3RpdmUgJWQgcGFzc2l2ZSAlZCIsCiAJCSAgICAgY2ZnLT5hY3RpdmVbMF0sIGNmZy0+cGFzc2l2ZVswXSk7CiAJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICIgICAgNUdIejogYWN0aXZlICVkIHBhc3NpdmUgJWQiLAogCQkgICAgIGNmZy0+YWN0aXZlWzFdLCBjZmctPnBhc3NpdmVbMV0pOworCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiICAgIERGUzogJWQiLCBjZmctPmRmcyk7CiAKIAlyZXR1cm4gaWR4OwogfQpAQCAtNDIxLDYgKzQzNyw3IEBACiAJc3RydWN0IHdsMTI3MV9jbWRfc2NoZWRfc2Nhbl9jb25maWcgKmNmZyA9IE5VTEw7CiAJc3RydWN0IGNvbmZfc2NoZWRfc2Nhbl9zZXR0aW5ncyAqYyA9ICZ3bC0+Y29uZi5zY2hlZF9zY2FuOwogCWludCBpLCB0b3RhbF9jaGFubmVscywgcmV0OworCWJvb2wgZm9yY2VfcGFzc2l2ZSA9ICFyZXEtPm5fc3NpZHM7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIHNjaGVkX3NjYW4gc2NhbiBjb25maWciKTsKIApAQCAtNDQ0LDcgKzQ2MSw3IEBACiAJZm9yIChpID0gMDsgaSA8IFNDQU5fTUFYX0NZQ0xFX0lOVEVSVkFMUzsgaSsrKQogCQljZmctPmludGVydmFsc1tpXSA9IGNwdV90b19sZTMyKHJlcS0+aW50ZXJ2YWwpOwogCi0JaWYgKHJlcS0+c3NpZHNbMF0uc3NpZF9sZW4gJiYgcmVxLT5zc2lkc1swXS5zc2lkKSB7CisJaWYgKCFmb3JjZV9wYXNzaXZlICYmIHJlcS0+c3NpZHNbMF0uc3NpZF9sZW4gJiYgcmVxLT5zc2lkc1swXS5zc2lkKSB7CiAJCWNmZy0+ZmlsdGVyX3R5cGUgPSBTQ0FOX1NTSURfRklMVEVSX1NQRUNJRklDOwogCQljZmctPnNzaWRfbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKIAkJbWVtY3B5KGNmZy0+c3NpZCwgcmVxLT5zc2lkc1swXS5zc2lkLApAQCAtNDYxLDcgKzQ3OCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChjZmctPmFjdGl2ZVswXSkgeworCWlmICghZm9yY2VfcGFzc2l2ZSAmJiBjZmctPmFjdGl2ZVswXSkgewogCQlyZXQgPSB3bDEyNzFfY21kX2J1aWxkX3Byb2JlX3JlcSh3bCwgcmVxLT5zc2lkc1swXS5zc2lkLAogCQkJCQkJIHJlcS0+c3NpZHNbMF0uc3NpZF9sZW4sCiAJCQkJCQkgaWVzLT5pZVtJRUVFODAyMTFfQkFORF8yR0haXSwKQEAgLTQ3Myw3ICs0OTAsNyBAQAogCQl9CiAJfQogCi0JaWYgKGNmZy0+YWN0aXZlWzFdKSB7CisJaWYgKCFmb3JjZV9wYXNzaXZlICYmIGNmZy0+YWN0aXZlWzFdKSB7CiAJCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHdsLCAgcmVxLT5zc2lkc1swXS5zc2lkLAogCQkJCQkJIHJlcS0+c3NpZHNbMF0uc3NpZF9sZW4sCiAJCQkJCQkgaWVzLT5pZVtJRUVFODAyMTFfQkFORF81R0haXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Nhbi5oCmluZGV4IGM4MzMxOTUuLmEwYjZjNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uaApAQCAtMTM3LDYgKzEzNyw5IEBACiAJU0NBTl9CU1NfVFlQRV9BTlksCiB9OwogCisjZGVmaW5lIFNDQU5fQ0hBTk5FTF9GTEFHU19ERlMJCUJJVCgwKQorI2RlZmluZSBTQ0FOX0NIQU5ORUxfRkxBR1NfREZTX0VOQUJMRUQJQklUKDEpCisKIHN0cnVjdCBjb25uX3NjYW5fY2hfcGFyYW1zIHsKIAlfX2xlMTYgbWluX2R1cmF0aW9uOwogCV9fbGUxNiBtYXhfZHVyYXRpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCmluZGV4IDBlODE5OTQuLjYzMTE5NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCkBAIC0xNTMzLDYgKzE1MzMsMzEgQEAKIG1vZHVsZV9pbml0KHVzYl9pbml0KTsKIG1vZHVsZV9leGl0KHVzYl9leGl0KTsKIAorc3RhdGljIGludCB6ZF9lcF9yZWdzX291dF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHZvaWQgKmRhdGEsIGludCBsZW4sCisJCQkgICAgICBpbnQgKmFjdHVhbF9sZW5ndGgsIGludCB0aW1lb3V0KQoreworCS8qIEluIFVTQiAyLjAgbW9kZSBFUF9SRUdTX09VVCBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgdHlwZS4gSG93ZXZlciBpbgorCSAqIFVTQiAxLjEgbW9kZSBlbmRwb2ludCBpcyBidWxrLiBTZWxlY3QgY29ycmVjdCB0eXBlIFVSQiBieSBlbmRwb2ludAorCSAqIGRlc2NyaXB0b3IuCisJICovCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKworCXBpcGUgPSB1c2Jfc25kaW50cGlwZSh1ZGV2LCBFUF9SRUdTX09VVCk7CisJZXAgPSB1c2JfcGlwZV9lbmRwb2ludCh1ZGV2LCBwaXBlKTsKKwlpZiAoIWVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoJmVwLT5kZXNjKSkgeworCQlyZXR1cm4gdXNiX2ludGVycnVwdF9tc2codWRldiwgcGlwZSwgZGF0YSwgbGVuLAorCQkJCQkgYWN0dWFsX2xlbmd0aCwgdGltZW91dCk7CisJfSBlbHNlIHsKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1ZGV2LCBFUF9SRUdTX09VVCk7CisJCXJldHVybiB1c2JfYnVsa19tc2codWRldiwgcGlwZSwgZGF0YSwgbGVuLCBhY3R1YWxfbGVuZ3RoLAorCQkJCSAgICB0aW1lb3V0KTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgdXNiX2ludF9yZWdzX2xlbmd0aCh1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgdXNiX2ludF9yZWdzKSArIGNvdW50ICogc2l6ZW9mKHN0cnVjdCByZWdfZGF0YSk7CkBAIC0xNjQ4LDE1ICsxNjczLDE0IEBACiAKIAl1ZGV2ID0gemRfdXNiX3RvX3VzYmRldih1c2IpOwogCXByZXBhcmVfcmVhZF9yZWdzX2ludCh1c2IpOwotCXIgPSB1c2JfaW50ZXJydXB0X21zZyh1ZGV2LCB1c2Jfc25kaW50cGlwZSh1ZGV2LCBFUF9SRUdTX09VVCksCi0JCQkgICAgICByZXEsIHJlcV9sZW4sICZhY3R1YWxfcmVxX2xlbiwgNTAgLyogbXMgKi8pOworCXIgPSB6ZF9lcF9yZWdzX291dF9tc2codWRldiwgcmVxLCByZXFfbGVuLCAmYWN0dWFsX3JlcV9sZW4sIDUwIC8qbXMqLyk7CiAJaWYgKHIpIHsKIAkJZGV2X2RiZ19mKHpkX3VzYl9kZXYodXNiKSwKLQkJCSJlcnJvciBpbiB1c2JfaW50ZXJydXB0X21zZygpLiBFcnJvciBudW1iZXIgJWRcbiIsIHIpOworCQkJImVycm9yIGluIHpkX2VwX3JlZ3Nfb3V0X21zZygpLiBFcnJvciBudW1iZXIgJWRcbiIsIHIpOwogCQlnb3RvIGVycm9yOwogCX0KIAlpZiAocmVxX2xlbiAhPSBhY3R1YWxfcmVxX2xlbikgewotCQlkZXZfZGJnX2YoemRfdXNiX2Rldih1c2IpLCAiZXJyb3IgaW4gdXNiX2ludGVycnVwdF9tc2coKVxuIgorCQlkZXZfZGJnX2YoemRfdXNiX2Rldih1c2IpLCAiZXJyb3IgaW4gemRfZXBfcmVnc19vdXRfbXNnKClcbiIKIAkJCSIgcmVxX2xlbiAlZCAhPSBhY3R1YWxfcmVxX2xlbiAlZFxuIiwKIAkJCXJlcV9sZW4sIGFjdHVhbF9yZXFfbGVuKTsKIAkJciA9IC1FSU87CkBAIC0xODE4LDkgKzE4NDIsMTcgQEAKIAkJcnctPnZhbHVlID0gY3B1X3RvX2xlMTYoaW9yZXFzW2ldLnZhbHVlKTsKIAl9CiAKLQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgdWRldiwgdXNiX3NuZGludHBpcGUodWRldiwgRVBfUkVHU19PVVQpLAotCQkJIHJlcSwgcmVxX2xlbiwgaW93cml0ZTE2dl91cmJfY29tcGxldGUsIHVzYiwKLQkJCSBlcC0+ZGVzYy5iSW50ZXJ2YWwpOworCS8qIEluIFVTQiAyLjAgbW9kZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgdHlwZS4gSG93ZXZlciBpbiBVU0IgMS4xIG1vZGUKKwkgKiBlbmRwb2ludCBpcyBidWxrLiBTZWxlY3QgY29ycmVjdCB0eXBlIFVSQiBieSBlbmRwb2ludCBkZXNjcmlwdG9yLgorCSAqLworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoJmVwLT5kZXNjKSkKKwkJdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVkZXYsIHVzYl9zbmRpbnRwaXBlKHVkZXYsIEVQX1JFR1NfT1VUKSwKKwkJCQkgcmVxLCByZXFfbGVuLCBpb3dyaXRlMTZ2X3VyYl9jb21wbGV0ZSwgdXNiLAorCQkJCSBlcC0+ZGVzYy5iSW50ZXJ2YWwpOworCWVsc2UKKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1ZGV2LCB1c2Jfc25kYnVsa3BpcGUodWRldiwgRVBfUkVHU19PVVQpLAorCQkJCSAgcmVxLCByZXFfbGVuLCBpb3dyaXRlMTZ2X3VyYl9jb21wbGV0ZSwgdXNiKTsKKwogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0ZSRUVfQlVGRkVSOwogCiAJLyogU3VibWl0IHByZXZpb3VzIFVSQiAqLwpAQCAtMTkyNCwxNSArMTk1NiwxNCBAQAogCX0KIAogCXVkZXYgPSB6ZF91c2JfdG9fdXNiZGV2KHVzYik7Ci0JciA9IHVzYl9pbnRlcnJ1cHRfbXNnKHVkZXYsIHVzYl9zbmRpbnRwaXBlKHVkZXYsIEVQX1JFR1NfT1VUKSwKLQkJCSAgICAgIHJlcSwgcmVxX2xlbiwgJmFjdHVhbF9yZXFfbGVuLCA1MCAvKiBtcyAqLyk7CisJciA9IHpkX2VwX3JlZ3Nfb3V0X21zZyh1ZGV2LCByZXEsIHJlcV9sZW4sICZhY3R1YWxfcmVxX2xlbiwgNTAgLyptcyovKTsKIAlpZiAocikgewogCQlkZXZfZGJnX2YoemRfdXNiX2Rldih1c2IpLAotCQkJImVycm9yIGluIHVzYl9pbnRlcnJ1cHRfbXNnKCkuIEVycm9yIG51bWJlciAlZFxuIiwgcik7CisJCQkiZXJyb3IgaW4gemRfZXBfcmVnc19vdXRfbXNnKCkuIEVycm9yIG51bWJlciAlZFxuIiwgcik7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAocmVxX2xlbiAhPSBhY3R1YWxfcmVxX2xlbikgewotCQlkZXZfZGJnX2YoemRfdXNiX2Rldih1c2IpLCAiZXJyb3IgaW4gdXNiX2ludGVycnVwdF9tc2coKSIKKwkJZGV2X2RiZ19mKHpkX3VzYl9kZXYodXNiKSwgImVycm9yIGluIHpkX2VwX3JlZ3Nfb3V0X21zZygpIgogCQkJIiByZXFfbGVuICVkICE9IGFjdHVhbF9yZXFfbGVuICVkXG4iLAogCQkJcmVxX2xlbiwgYWN0dWFsX3JlcV9sZW4pOwogCQlyID0gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggYzg1Zjc0NC4uMDk0MzA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTUxLDYgKzUxLDcgQEAKIG9iai0kKENPTkZJR19NTjEwMzAwKSArPSBzZXR1cC1idXMubwogb2JqLSQoQ09ORklHX01JQ1JPQkxBWkUpICs9IHNldHVwLWJ1cy5vCiBvYmotJChDT05GSUdfVElMRSkgKz0gc2V0dXAtYnVzLm8gc2V0dXAtaXJxLm8KK29iai0kKENPTkZJR19TUEFSQ19MRU9OKSArPSBzZXR1cC1idXMubyBzZXR1cC1pcnEubwogCiAjCiAjIEFDUEkgUmVsYXRlZCBQQ0kgRlcgRnVuY3Rpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFyLmMgYi9kcml2ZXJzL3BjaS9kbWFyLmMKaW5kZXggMTJlMDJiZi4uM2RjOWJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZG1hci5jCisrKyBiL2RyaXZlcnMvcGNpL2RtYXIuYwpAQCAtNjk4LDEyICs2OTgsNyBAQAogCXsKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQlzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICpkbWFyOwotCQkvKgotCQkgKiBmb3Igbm93IHdlIHdpbGwgZGlzYWJsZSBkbWEtcmVtYXBwaW5nIHdoZW4gaW50ZXJydXB0Ci0JCSAqIHJlbWFwcGluZyBpcyBlbmFibGVkLgotCQkgKiBXaGVuIHN1cHBvcnQgZm9yIHF1ZXVlZCBpbnZhbGlkYXRpb24gZm9yIElPVExCIGludmFsaWRhdGlvbgotCQkgKiBpcyBhZGRlZCwgd2Ugd2lsbCBub3QgbmVlZCB0aGlzIGFueSBtb3JlLgotCQkgKi8KKwogCQlkbWFyID0gKHN0cnVjdCBhY3BpX3RhYmxlX2RtYXIgKikgZG1hcl90Ymw7CiAJCWlmIChyZXQgJiYgY3B1X2hhc194MmFwaWMgJiYgZG1hci0+ZmxhZ3MgJiAweDEpCiAJCQlwcmludGsoS0VSTl9JTkZPCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCA2YWY2YjYyLi5mMDJjMzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTQ3LDYgKzQ3LDggQEAKICNkZWZpbmUgUk9PVF9TSVpFCQlWVERfUEFHRV9TSVpFCiAjZGVmaW5lIENPTlRFWFRfU0laRQkJVlREX1BBR0VfU0laRQogCisjZGVmaW5lIElTX0JSSURHRV9IT1NUX0RFVklDRShwZGV2KSBcCisJCQkgICAgKChwZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpCiAjZGVmaW5lIElTX0dGWF9ERVZJQ0UocGRldikgKChwZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkKICNkZWZpbmUgSVNfSVNBX0RFVklDRShwZGV2KSAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfSVNBKQogI2RlZmluZSBJU19BWkFMSUEocGRldikgKChwZGV2KS0+dmVuZG9yID09IDB4ODA4NiAmJiAocGRldiktPmRldmljZSA9PSAweDNhM2UpCkBAIC0xMTYsNiArMTE4LDExIEBACiAJcmV0dXJuIChwZm4gKyBsZXZlbF9zaXplKGxldmVsKSAtIDEpICYgbGV2ZWxfbWFzayhsZXZlbCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsdmxfdG9fbnJfcGFnZXModW5zaWduZWQgaW50IGx2bCkKK3sKKwlyZXR1cm4gIDEgPDwgKChsdmwgLSAxKSAqIExFVkVMX1NUUklERSk7Cit9CisKIC8qIFZULWQgcGFnZXMgbXVzdCBhbHdheXMgYmUgX3NtYWxsZXJfIHRoYW4gTU0gcGFnZXMuIE90aGVyd2lzZSB0aGluZ3MKICAgIGFyZSBuZXZlciBnb2luZyB0byB3b3JrLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRtYV90b19tbV9wZm4odW5zaWduZWQgbG9uZyBkbWFfcGZuKQpAQCAtMTQzLDYgKzE1MCwxMiBAQAogc3RhdGljIGludCByd2JmX3F1aXJrOwogCiAvKgorICogc2V0IHRvIDEgdG8gcGFuaWMga2VybmVsIGlmIGNhbid0IHN1Y2Nlc3NmdWxseSBlbmFibGUgVlQtZAorICogKHVzZWQgd2hlbiBrZXJuZWwgaXMgbGF1bmNoZWQgdy8gVFhUKQorICovCitzdGF0aWMgaW50IGZvcmNlX29uID0gMDsKKworLyoKICAqIDA6IFByZXNlbnQKICAqIDEtMTE6IFJlc2VydmVkCiAgKiAxMi02MzogQ29udGV4dCBQdHIgKDEyIC0gKGhhdy0xKSkKQEAgLTMzOCw2ICszNTEsOSBAQAogCWludAkJaW9tbXVfY29oZXJlbmN5Oy8qIGluZGljYXRlIGNvaGVyZW5jeSBvZiBpb21tdSBhY2Nlc3MgKi8KIAlpbnQJCWlvbW11X3Nub29waW5nOyAvKiBpbmRpY2F0ZSBzbm9vcGluZyBjb250cm9sIGZlYXR1cmUqLwogCWludAkJaW9tbXVfY291bnQ7CS8qIHJlZmVyZW5jZSBjb3VudCBvZiBpb21tdSAqLworCWludAkJaW9tbXVfc3VwZXJwYWdlOy8qIExldmVsIG9mIHN1cGVycGFnZXMgc3VwcG9ydGVkOgorCQkJCQkgICAwID09IDRLaUIgKG5vIHN1cGVycGFnZXMpLCAxID09IDJNaUIsCisJCQkJCSAgIDIgPT0gMUdpQiwgMyA9PSA1MTJHaUIsIDQgPT0gMVRpQiAqLwogCXNwaW5sb2NrX3QJaW9tbXVfbG9jazsJLyogcHJvdGVjdCBpb21tdSBzZXQgaW4gZG9tYWluICovCiAJdTY0CQltYXhfYWRkcjsJLyogbWF4aW11bSBtYXBwZWQgYWRkcmVzcyAqLwogfTsKQEAgLTM4Nyw2ICs0MDMsNyBAQAogc3RhdGljIGludCBkbWFyX21hcF9nZnggPSAxOwogc3RhdGljIGludCBkbWFyX2ZvcmNlZGFjOwogc3RhdGljIGludCBpbnRlbF9pb21tdV9zdHJpY3Q7CitzdGF0aWMgaW50IGludGVsX2lvbW11X3N1cGVycGFnZSA9IDE7CiAKICNkZWZpbmUgRFVNTVlfREVWSUNFX0RPTUFJTl9JTkZPICgoc3RydWN0IGRldmljZV9kb21haW5faW5mbyAqKSgtMSkpCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRldmljZV9kb21haW5fbG9jayk7CkBAIC00MTcsNiArNDM0LDEwIEBACiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkJIkludGVsLUlPTU1VOiBkaXNhYmxlIGJhdGNoZWQgSU9UTEIgZmx1c2hcbiIpOwogCQkJaW50ZWxfaW9tbXVfc3RyaWN0ID0gMTsKKwkJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJzcF9vZmYiLCA2KSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSJJbnRlbC1JT01NVTogZGlzYWJsZSBzdXBwb3J0ZWQgc3VwZXIgcGFnZVxuIik7CisJCQlpbnRlbF9pb21tdV9zdXBlcnBhZ2UgPSAwOwogCQl9CiAKIAkJc3RyICs9IHN0cmNzcG4oc3RyLCAiLCIpOwpAQCAtNTU1LDExICs1NzYsMzIgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGRvbWFpbl91cGRhdGVfaW9tbXVfc3VwZXJwYWdlKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluKQoreworCWludCBpLCBtYXNrID0gMHhmOworCisJaWYgKCFpbnRlbF9pb21tdV9zdXBlcnBhZ2UpIHsKKwkJZG9tYWluLT5pb21tdV9zdXBlcnBhZ2UgPSAwOworCQlyZXR1cm47CisJfQorCisJZG9tYWluLT5pb21tdV9zdXBlcnBhZ2UgPSA0OyAvKiAxVGlCICovCisKKwlmb3JfZWFjaF9zZXRfYml0KGksICZkb21haW4tPmlvbW11X2JtcCwgZ19udW1fb2ZfaW9tbXVzKSB7CisJCW1hc2sgfD0gY2FwX3N1cGVyX3BhZ2VfdmFsKGdfaW9tbXVzW2ldLT5jYXApOworCQlpZiAoIW1hc2spIHsKKwkJCWJyZWFrOworCQl9CisJfQorCWRvbWFpbi0+aW9tbXVfc3VwZXJwYWdlID0gZmxzKG1hc2spOworfQorCiAvKiBTb21lIGNhcGFiaWxpdGllcyBtYXkgYmUgZGlmZmVyZW50IGFjcm9zcyBpb21tdXMgKi8KIHN0YXRpYyB2b2lkIGRvbWFpbl91cGRhdGVfaW9tbXVfY2FwKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluKQogewogCWRvbWFpbl91cGRhdGVfaW9tbXVfY29oZXJlbmN5KGRvbWFpbik7CiAJZG9tYWluX3VwZGF0ZV9pb21tdV9zbm9vcGluZyhkb21haW4pOworCWRvbWFpbl91cGRhdGVfaW9tbXVfc3VwZXJwYWdlKGRvbWFpbik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmRldmljZV90b19pb21tdShpbnQgc2VnbWVudCwgdTggYnVzLCB1OCBkZXZmbikKQEAgLTY4OSwyMyArNzMxLDMxIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX3B0ZSAqcGZuX3RvX2RtYV9wdGUoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBwZm4pCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIGludCBsYXJnZV9sZXZlbCkKIHsKIAlpbnQgYWRkcl93aWR0aCA9IGFnYXdfdG9fd2lkdGgoZG9tYWluLT5hZ2F3KSAtIFZURF9QQUdFX1NISUZUOwogCXN0cnVjdCBkbWFfcHRlICpwYXJlbnQsICpwdGUgPSBOVUxMOwogCWludCBsZXZlbCA9IGFnYXdfdG9fbGV2ZWwoZG9tYWluLT5hZ2F3KTsKLQlpbnQgb2Zmc2V0OworCWludCBvZmZzZXQsIHRhcmdldF9sZXZlbDsKIAogCUJVR19PTighZG9tYWluLT5wZ2QpOwogCUJVR19PTihhZGRyX3dpZHRoIDwgQklUU19QRVJfTE9ORyAmJiBwZm4gPj4gYWRkcl93aWR0aCk7CiAJcGFyZW50ID0gZG9tYWluLT5wZ2Q7CiAKKwkvKiBTZWFyY2ggcHRlICovCisJaWYgKCFsYXJnZV9sZXZlbCkKKwkJdGFyZ2V0X2xldmVsID0gMTsKKwllbHNlCisJCXRhcmdldF9sZXZlbCA9IGxhcmdlX2xldmVsOworCiAJd2hpbGUgKGxldmVsID4gMCkgewogCQl2b2lkICp0bXBfcGFnZTsKIAogCQlvZmZzZXQgPSBwZm5fbGV2ZWxfb2Zmc2V0KHBmbiwgbGV2ZWwpOwogCQlwdGUgPSAmcGFyZW50W29mZnNldF07Ci0JCWlmIChsZXZlbCA9PSAxKQorCQlpZiAoIWxhcmdlX2xldmVsICYmIChwdGUtPnZhbCAmIERNQV9QVEVfTEFSR0VfUEFHRSkpCisJCQlicmVhazsKKwkJaWYgKGxldmVsID09IHRhcmdldF9sZXZlbCkKIAkJCWJyZWFrOwogCiAJCWlmICghZG1hX3B0ZV9wcmVzZW50KHB0ZSkpIHsKQEAgLTczMywxMCArNzgzLDExIEBACiAJcmV0dXJuIHB0ZTsKIH0KIAorCiAvKiByZXR1cm4gYWRkcmVzcydzIHB0ZSBhdCBzcGVjaWZpYyBsZXZlbCAqLwogc3RhdGljIHN0cnVjdCBkbWFfcHRlICpkbWFfcGZuX2xldmVsX3B0ZShzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgcGZuLAotCQkJCQkgaW50IGxldmVsKQorCQkJCQkgaW50IGxldmVsLCBpbnQgKmxhcmdlX3BhZ2UpCiB7CiAJc3RydWN0IGRtYV9wdGUgKnBhcmVudCwgKnB0ZSA9IE5VTEw7CiAJaW50IHRvdGFsID0gYWdhd190b19sZXZlbChkb21haW4tPmFnYXcpOwpAQCAtNzQ5LDggKzgwMCwxNiBAQAogCQlpZiAobGV2ZWwgPT0gdG90YWwpCiAJCQlyZXR1cm4gcHRlOwogCi0JCWlmICghZG1hX3B0ZV9wcmVzZW50KHB0ZSkpCisJCWlmICghZG1hX3B0ZV9wcmVzZW50KHB0ZSkpIHsKKwkJCSpsYXJnZV9wYWdlID0gdG90YWw7CiAJCQlicmVhazsKKwkJfQorCisJCWlmIChwdGUtPnZhbCAmIERNQV9QVEVfTEFSR0VfUEFHRSkgeworCQkJKmxhcmdlX3BhZ2UgPSB0b3RhbDsKKwkJCXJldHVybiBwdGU7CisJCX0KKwogCQlwYXJlbnQgPSBwaHlzX3RvX3ZpcnQoZG1hX3B0ZV9hZGRyKHB0ZSkpOwogCQl0b3RhbC0tOwogCX0KQEAgLTc2Myw2ICs4MjIsNyBAQAogCQkJCXVuc2lnbmVkIGxvbmcgbGFzdF9wZm4pCiB7CiAJaW50IGFkZHJfd2lkdGggPSBhZ2F3X3RvX3dpZHRoKGRvbWFpbi0+YWdhdykgLSBWVERfUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBpbnQgbGFyZ2VfcGFnZSA9IDE7CiAJc3RydWN0IGRtYV9wdGUgKmZpcnN0X3B0ZSwgKnB0ZTsKIAogCUJVR19PTihhZGRyX3dpZHRoIDwgQklUU19QRVJfTE9ORyAmJiBzdGFydF9wZm4gPj4gYWRkcl93aWR0aCk7CkBAIC03NzEsMTQgKzgzMSwxNSBAQAogCiAJLyogd2UgZG9uJ3QgbmVlZCBsb2NrIGhlcmU7IG5vYm9keSBlbHNlIHRvdWNoZXMgdGhlIGlvdmEgcmFuZ2UgKi8KIAlkbyB7Ci0JCWZpcnN0X3B0ZSA9IHB0ZSA9IGRtYV9wZm5fbGV2ZWxfcHRlKGRvbWFpbiwgc3RhcnRfcGZuLCAxKTsKKwkJbGFyZ2VfcGFnZSA9IDE7CisJCWZpcnN0X3B0ZSA9IHB0ZSA9IGRtYV9wZm5fbGV2ZWxfcHRlKGRvbWFpbiwgc3RhcnRfcGZuLCAxLCAmbGFyZ2VfcGFnZSk7CiAJCWlmICghcHRlKSB7Ci0JCQlzdGFydF9wZm4gPSBhbGlnbl90b19sZXZlbChzdGFydF9wZm4gKyAxLCAyKTsKKwkJCXN0YXJ0X3BmbiA9IGFsaWduX3RvX2xldmVsKHN0YXJ0X3BmbiArIDEsIGxhcmdlX3BhZ2UgKyAxKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWRvIHsgCisJCWRvIHsKIAkJCWRtYV9jbGVhcl9wdGUocHRlKTsKLQkJCXN0YXJ0X3BmbisrOworCQkJc3RhcnRfcGZuICs9IGx2bF90b19ucl9wYWdlcyhsYXJnZV9wYWdlKTsKIAkJCXB0ZSsrOwogCQl9IHdoaWxlIChzdGFydF9wZm4gPD0gbGFzdF9wZm4gJiYgIWZpcnN0X3B0ZV9pbl9wYWdlKHB0ZSkpOwogCkBAIC03OTgsNiArODU5LDcgQEAKIAlpbnQgdG90YWwgPSBhZ2F3X3RvX2xldmVsKGRvbWFpbi0+YWdhdyk7CiAJaW50IGxldmVsOwogCXVuc2lnbmVkIGxvbmcgdG1wOworCWludCBsYXJnZV9wYWdlID0gMjsKIAogCUJVR19PTihhZGRyX3dpZHRoIDwgQklUU19QRVJfTE9ORyAmJiBzdGFydF9wZm4gPj4gYWRkcl93aWR0aCk7CiAJQlVHX09OKGFkZHJfd2lkdGggPCBCSVRTX1BFUl9MT05HICYmIGxhc3RfcGZuID4+IGFkZHJfd2lkdGgpOwpAQCAtODEzLDcgKzg3NSwxMCBAQAogCQkJcmV0dXJuOwogCiAJCWRvIHsKLQkJCWZpcnN0X3B0ZSA9IHB0ZSA9IGRtYV9wZm5fbGV2ZWxfcHRlKGRvbWFpbiwgdG1wLCBsZXZlbCk7CisJCQlsYXJnZV9wYWdlID0gbGV2ZWw7CisJCQlmaXJzdF9wdGUgPSBwdGUgPSBkbWFfcGZuX2xldmVsX3B0ZShkb21haW4sIHRtcCwgbGV2ZWwsICZsYXJnZV9wYWdlKTsKKwkJCWlmIChsYXJnZV9wYWdlID4gbGV2ZWwpCisJCQkJbGV2ZWwgPSBsYXJnZV9wYWdlICsgMTsKIAkJCWlmICghcHRlKSB7CiAJCQkJdG1wID0gYWxpZ25fdG9fbGV2ZWwodG1wICsgMSwgbGV2ZWwgKyAxKTsKIAkJCQljb250aW51ZTsKQEAgLTEzOTcsNiArMTQ2Miw3IEBACiAJZWxzZQogCQlkb21haW4tPmlvbW11X3Nub29waW5nID0gMDsKIAorCWRvbWFpbi0+aW9tbXVfc3VwZXJwYWdlID0gZmxzKGNhcF9zdXBlcl9wYWdlX3ZhbChpb21tdS0+Y2FwKSk7CiAJZG9tYWluLT5pb21tdV9jb3VudCA9IDE7CiAJZG9tYWluLT5uaWQgPSBpb21tdS0+bm9kZTsKIApAQCAtMTQxNyw2ICsxNDgzLDEwIEBACiAJaWYgKCFkb21haW4pCiAJCXJldHVybjsKIAorCS8qIEZsdXNoIGFueSBsYXp5IHVubWFwcyB0aGF0IG1heSByZWZlcmVuY2UgdGhpcyBkb21haW4gKi8KKwlpZiAoIWludGVsX2lvbW11X3N0cmljdCkKKwkJZmx1c2hfdW5tYXBzX3RpbWVvdXQoMCk7CisKIAlkb21haW5fcmVtb3ZlX2Rldl9pbmZvKGRvbWFpbik7CiAJLyogZGVzdHJveSBpb3ZhcyAqLwogCXB1dF9pb3ZhX2RvbWFpbigmZG9tYWluLT5pb3ZhZCk7CkBAIC0xNjQ4LDYgKzE3MTgsMzQgQEAKIAlyZXR1cm4gUEFHRV9BTElHTihob3N0X2FkZHIgKyBzaXplKSA+PiBWVERfUEFHRV9TSElGVDsKIH0KIAorLyogUmV0dXJuIGxhcmdlc3QgcG9zc2libGUgc3VwZXJwYWdlIGxldmVsIGZvciBhIGdpdmVuIG1hcHBpbmcgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhhcmR3YXJlX2xhcmdlcGFnZV9jYXBzKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgaW92X3BmbiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHBoeV9wZm4sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBwYWdlcykKK3sKKwlpbnQgc3VwcG9ydCwgbGV2ZWwgPSAxOworCXVuc2lnbmVkIGxvbmcgcGZubWVyZ2U7CisKKwlzdXBwb3J0ID0gZG9tYWluLT5pb21tdV9zdXBlcnBhZ2U7CisKKwkvKiBUbyB1c2UgYSBsYXJnZSBwYWdlLCB0aGUgdmlydHVhbCAqYW5kKiBwaHlzaWNhbCBhZGRyZXNzZXMKKwkgICBtdXN0IGJlIGFsaWduZWQgdG8gMk1pQi8xR2lCL2V0Yy4gTG93ZXIgYml0cyBzZXQgaW4gZWl0aGVyCisJICAgb2YgdGhlbSB3aWxsIG1lYW4gd2UgaGF2ZSB0byB1c2Ugc21hbGxlciBwYWdlcy4gU28ganVzdAorCSAgIG1lcmdlIHRoZW0gYW5kIGNoZWNrIGJvdGggYXQgb25jZS4gKi8KKwlwZm5tZXJnZSA9IGlvdl9wZm4gfCBwaHlfcGZuOworCisJd2hpbGUgKHN1cHBvcnQgJiYgIShwZm5tZXJnZSAmIH5WVERfU1RSSURFX01BU0spKSB7CisJCXBhZ2VzID4+PSBWVERfU1RSSURFX1NISUZUOworCQlpZiAoIXBhZ2VzKQorCQkJYnJlYWs7CisJCXBmbm1lcmdlID4+PSBWVERfU1RSSURFX1NISUZUOworCQlsZXZlbCsrOworCQlzdXBwb3J0LS07CisJfQorCXJldHVybiBsZXZlbDsKK30KKwogc3RhdGljIGludCBfX2RvbWFpbl9tYXBwaW5nKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdl9wZm4sCiAJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBwaHlzX3BmbiwKIAkJCSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBpbnQgcHJvdCkKQEAgLTE2NTYsNiArMTc1NCw4IEBACiAJcGh5c19hZGRyX3QgdW5pbml0aWFsaXplZF92YXIocHRldmFsKTsKIAlpbnQgYWRkcl93aWR0aCA9IGFnYXdfdG9fd2lkdGgoZG9tYWluLT5hZ2F3KSAtIFZURF9QQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgc2dfcmVzOworCXVuc2lnbmVkIGludCBsYXJnZXBhZ2VfbHZsID0gMDsKKwl1bnNpZ25lZCBsb25nIGx2bF9wYWdlcyA9IDA7CiAKIAlCVUdfT04oYWRkcl93aWR0aCA8IEJJVFNfUEVSX0xPTkcgJiYgKGlvdl9wZm4gKyBucl9wYWdlcyAtIDEpID4+IGFkZHJfd2lkdGgpOwogCkBAIC0xNjcxLDcgKzE3NzEsNyBAQAogCQlwdGV2YWwgPSAoKHBoeXNfYWRkcl90KXBoeXNfcGZuIDw8IFZURF9QQUdFX1NISUZUKSB8IHByb3Q7CiAJfQogCi0Jd2hpbGUgKG5yX3BhZ2VzLS0pIHsKKwl3aGlsZSAobnJfcGFnZXMgPiAwKSB7CiAJCXVpbnQ2NF90IHRtcDsKIAogCQlpZiAoIXNnX3JlcykgewpAQCAtMTY3OSwxMSArMTc3OSwyMSBAQAogCQkJc2ctPmRtYV9hZGRyZXNzID0gKChkbWFfYWRkcl90KWlvdl9wZm4gPDwgVlREX1BBR0VfU0hJRlQpICsgc2ctPm9mZnNldDsKIAkJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAkJCXB0ZXZhbCA9IHBhZ2VfdG9fcGh5cyhzZ19wYWdlKHNnKSkgfCBwcm90OworCQkJcGh5c19wZm4gPSBwdGV2YWwgPj4gVlREX1BBR0VfU0hJRlQ7CiAJCX0KKwogCQlpZiAoIXB0ZSkgewotCQkJZmlyc3RfcHRlID0gcHRlID0gcGZuX3RvX2RtYV9wdGUoZG9tYWluLCBpb3ZfcGZuKTsKKwkJCWxhcmdlcGFnZV9sdmwgPSBoYXJkd2FyZV9sYXJnZXBhZ2VfY2Fwcyhkb21haW4sIGlvdl9wZm4sIHBoeXNfcGZuLCBzZ19yZXMpOworCisJCQlmaXJzdF9wdGUgPSBwdGUgPSBwZm5fdG9fZG1hX3B0ZShkb21haW4sIGlvdl9wZm4sIGxhcmdlcGFnZV9sdmwpOwogCQkJaWYgKCFwdGUpCiAJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkvKiBJdCBpcyBsYXJnZSBwYWdlKi8KKwkJCWlmIChsYXJnZXBhZ2VfbHZsID4gMSkKKwkJCQlwdGV2YWwgfD0gRE1BX1BURV9MQVJHRV9QQUdFOworCQkJZWxzZQorCQkJCXB0ZXZhbCAmPSB+KHVpbnQ2NF90KURNQV9QVEVfTEFSR0VfUEFHRTsKKwogCQl9CiAJCS8qIFdlIGRvbid0IG5lZWQgbG9jayBoZXJlLCBub2JvZHkgZWxzZQogCQkgKiB0b3VjaGVzIHRoZSBpb3ZhIHJhbmdlCkBAIC0xNjk5LDE2ICsxODA5LDM4IEBACiAJCQl9CiAJCQlXQVJOX09OKDEpOwogCQl9CisKKwkJbHZsX3BhZ2VzID0gbHZsX3RvX25yX3BhZ2VzKGxhcmdlcGFnZV9sdmwpOworCisJCUJVR19PTihucl9wYWdlcyA8IGx2bF9wYWdlcyk7CisJCUJVR19PTihzZ19yZXMgPCBsdmxfcGFnZXMpOworCisJCW5yX3BhZ2VzIC09IGx2bF9wYWdlczsKKwkJaW92X3BmbiArPSBsdmxfcGFnZXM7CisJCXBoeXNfcGZuICs9IGx2bF9wYWdlczsKKwkJcHRldmFsICs9IGx2bF9wYWdlcyAqIFZURF9QQUdFX1NJWkU7CisJCXNnX3JlcyAtPSBsdmxfcGFnZXM7CisKKwkJLyogSWYgdGhlIG5leHQgUFRFIHdvdWxkIGJlIHRoZSBmaXJzdCBpbiBhIG5ldyBwYWdlLCB0aGVuIHdlCisJCSAgIG5lZWQgdG8gZmx1c2ggdGhlIGNhY2hlIG9uIHRoZSBlbnRyaWVzIHdlJ3ZlIGp1c3Qgd3JpdHRlbi4KKwkJICAgQW5kIHRoZW4gd2UnbGwgbmVlZCB0byByZWNhbGN1bGF0ZSAncHRlJywgc28gY2xlYXIgaXQgYW5kCisJCSAgIGxldCBpdCBnZXQgc2V0IGFnYWluIGluIHRoZSBpZiAoIXB0ZSkgYmxvY2sgYWJvdmUuCisKKwkJICAgSWYgd2UncmUgZG9uZSAoIW5yX3BhZ2VzKSB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBjYWNoZSB0b28uCisKKwkJICAgQWxzbyBpZiB3ZSd2ZSBiZWVuIHNldHRpbmcgc3VwZXJwYWdlcywgd2UgbWF5IG5lZWQgdG8KKwkJICAgcmVjYWxjdWxhdGUgJ3B0ZScgYW5kIHN3aXRjaCBiYWNrIHRvIHNtYWxsZXIgcGFnZXMgZm9yIHRoZQorCQkgICBlbmQgb2YgdGhlIG1hcHBpbmcsIGlmIHRoZSB0cmFpbGluZyBzaXplIGlzIG5vdCBlbm91Z2ggdG8KKwkJICAgdXNlIGFub3RoZXIgc3VwZXJwYWdlIChpLmUuIHNnX3JlcyA8IGx2bF9wYWdlcykuICovCiAJCXB0ZSsrOwotCQlpZiAoIW5yX3BhZ2VzIHx8IGZpcnN0X3B0ZV9pbl9wYWdlKHB0ZSkpIHsKKwkJaWYgKCFucl9wYWdlcyB8fCBmaXJzdF9wdGVfaW5fcGFnZShwdGUpIHx8CisJCSAgICAobGFyZ2VwYWdlX2x2bCA+IDEgJiYgc2dfcmVzIDwgbHZsX3BhZ2VzKSkgewogCQkJZG9tYWluX2ZsdXNoX2NhY2hlKGRvbWFpbiwgZmlyc3RfcHRlLAogCQkJCQkgICAodm9pZCAqKXB0ZSAtICh2b2lkICopZmlyc3RfcHRlKTsKIAkJCXB0ZSA9IE5VTEw7CiAJCX0KLQkJaW92X3BmbisrOwotCQlwdGV2YWwgKz0gVlREX1BBR0VfU0laRTsKLQkJc2dfcmVzLS07Ci0JCWlmICghc2dfcmVzKQorCisJCWlmICghc2dfcmVzICYmIG5yX3BhZ2VzKQogCQkJc2cgPSBzZ19uZXh0KHNnKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yMDE2LDcgKzIxNDgsNyBAQAogCWlmIChwZGV2LT5kZXYuYXJjaGRhdGEuaW9tbXUgPT0gRFVNTVlfREVWSUNFX0RPTUFJTl9JTkZPKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gaW9tbXVfcHJlcGFyZV9pZGVudGl0eV9tYXAocGRldiwgcm1yci0+YmFzZV9hZGRyZXNzLAotCQlybXJyLT5lbmRfYWRkcmVzcyArIDEpOworCQlybXJyLT5lbmRfYWRkcmVzcyk7CiB9CiAKICNpZmRlZiBDT05GSUdfRE1BUl9GTE9QUFlfV0EKQEAgLTIwMzAsNyArMjE2Miw3IEBACiAJCXJldHVybjsKIAogCXByaW50ayhLRVJOX0lORk8gIklPTU1VOiBQcmVwYXJlIDAtMTZNaUIgdW5pdHkgbWFwcGluZyBmb3IgTFBDXG4iKTsKLQlyZXQgPSBpb21tdV9wcmVwYXJlX2lkZW50aXR5X21hcChwZGV2LCAwLCAxNioxMDI0KjEwMjQpOworCXJldCA9IGlvbW11X3ByZXBhcmVfaWRlbnRpdHlfbWFwKHBkZXYsIDAsIDE2KjEwMjQqMTAyNCAtIDEpOwogCiAJaWYgKHJldCkKIAkJcHJpbnRrKEtFUk5fRVJSICJJT01NVTogRmFpbGVkIHRvIGNyZWF0ZSAwLTE2TWlCIGlkZW50aXR5IG1hcDsgIgpAQCAtMjEwNiwxMCArMjIzOCwxMCBAQAogCWlmIChsaWtlbHkoIWlvbW11X2lkZW50aXR5X21hcHBpbmcpKQogCQlyZXR1cm4gMDsKIAorCWluZm8gPSBwZGV2LT5kZXYuYXJjaGRhdGEuaW9tbXU7CisJaWYgKGluZm8gJiYgaW5mbyAhPSBEVU1NWV9ERVZJQ0VfRE9NQUlOX0lORk8pCisJCXJldHVybiAoaW5mby0+ZG9tYWluID09IHNpX2RvbWFpbik7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluZm8sICZzaV9kb21haW4tPmRldmljZXMsIGxpbmspCi0JCWlmIChpbmZvLT5kZXYgPT0gcGRldikKLQkJCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCkBAIC0yMTg3LDggKzIzMTksMTkgQEAKIAkgKiBBc3N1bWUgdGhhdCB0aGV5IHdpbGwgLS0gaWYgdGhleSB0dXJuIG91dCBub3QgdG8gYmUsIHRoZW4gd2UgY2FuIAogCSAqIHRha2UgdGhlbSBvdXQgb2YgdGhlIDE6MSBkb21haW4gbGF0ZXIuCiAJICovCi0JaWYgKCFzdGFydHVwKQotCQlyZXR1cm4gcGRldi0+ZG1hX21hc2sgPiBETUFfQklUX01BU0soMzIpOworCWlmICghc3RhcnR1cCkgeworCQkvKgorCQkgKiBJZiB0aGUgZGV2aWNlJ3MgZG1hX21hc2sgaXMgbGVzcyB0aGFuIHRoZSBzeXN0ZW0ncyBtZW1vcnkKKwkJICogc2l6ZSB0aGVuIHRoaXMgaXMgbm90IGEgY2FuZGlkYXRlIGZvciBpZGVudGl0eSBtYXBwaW5nLgorCQkgKi8KKwkJdTY0IGRtYV9tYXNrID0gcGRldi0+ZG1hX21hc2s7CisKKwkJaWYgKHBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayAmJgorCQkgICAgcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrIDwgZG1hX21hc2spCisJCQlkbWFfbWFzayA9IHBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzazsKKworCQlyZXR1cm4gZG1hX21hc2sgPj0gZG1hX2dldF9yZXF1aXJlZF9tYXNrKCZwZGV2LT5kZXYpOworCX0KIAogCXJldHVybiAxOwogfQpAQCAtMjIwMyw2ICsyMzQ2LDkgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKKwkJLyogU2tpcCBIb3N0L1BDSSBCcmlkZ2UgZGV2aWNlcyAqLworCQlpZiAoSVNfQlJJREdFX0hPU1RfREVWSUNFKHBkZXYpKQorCQkJY29udGludWU7CiAJCWlmIChpb21tdV9zaG91bGRfaWRlbnRpdHlfbWFwKHBkZXYsIDEpKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJJT01NVTogJXMgaWRlbnRpdHkgbWFwcGluZyBmb3IgZGV2aWNlICVzXG4iLAogCQkJICAgICAgIGh3ID8gImhhcmR3YXJlIiA6ICJzb2Z0d2FyZSIsIHBjaV9uYW1lKHBkZXYpKTsKQEAgLTIyMTgsNyArMjM2NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZG1hcnMoaW50IGZvcmNlX29uKQorc3RhdGljIGludCBfX2luaXQgaW5pdF9kbWFycyh2b2lkKQogewogCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKIAlzdHJ1Y3QgZG1hcl9ybXJyX3VuaXQgKnJtcnI7CkBAIC0yNTkyLDggKzI3MzgsNyBAQAogCWlvbW11ID0gZG9tYWluX2dldF9pb21tdShkb21haW4pOwogCXNpemUgPSBhbGlnbmVkX25ycGFnZXMocGFkZHIsIHNpemUpOwogCi0JaW92YSA9IGludGVsX2FsbG9jX2lvdmEoaHdkZXYsIGRvbWFpbiwgZG1hX3RvX21tX3BmbihzaXplKSwKLQkJCQlwZGV2LT5kbWFfbWFzayk7CisJaW92YSA9IGludGVsX2FsbG9jX2lvdmEoaHdkZXYsIGRvbWFpbiwgZG1hX3RvX21tX3BmbihzaXplKSwgZG1hX21hc2spOwogCWlmICghaW92YSkKIAkJZ290byBlcnJvcjsKIApAQCAtMzExOCw3ICszMjYzLDE3IEBACiAJCWlmIChpb21tdS0+cWkpCiAJCQlkbWFyX3JlZW5hYmxlX3FpKGlvbW11KTsKIAotCWZvcl9lYWNoX2FjdGl2ZV9pb21tdShpb21tdSwgZHJoZCkgeworCWZvcl9lYWNoX2lvbW11KGlvbW11LCBkcmhkKSB7CisJCWlmIChkcmhkLT5pZ25vcmVkKSB7CisJCQkvKgorCQkJICogd2UgYWx3YXlzIGhhdmUgdG8gZGlzYWJsZSBQTVJzIG9yIERNQSBtYXkgZmFpbCBvbgorCQkJICogdGhpcyBkZXZpY2UKKwkJCSAqLworCQkJaWYgKGZvcmNlX29uKQorCQkJCWlvbW11X2Rpc2FibGVfcHJvdGVjdF9tZW1fcmVnaW9ucyhpb21tdSk7CisJCQljb250aW51ZTsKKwkJfQorCQogCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoaW9tbXUpOwogCiAJCWlvbW11X3NldF9yb290X2VudHJ5KGlvbW11KTsKQEAgLTMxMjcsNyArMzI4Miw4IEBACiAJCQkJCSAgIERNQV9DQ01EX0dMT0JBTF9JTlZMKTsKIAkJaW9tbXUtPmZsdXNoLmZsdXNoX2lvdGxiKGlvbW11LCAwLCAwLCAwLAogCQkJCQkgRE1BX1RMQl9HTE9CQUxfRkxVU0gpOwotCQlpb21tdV9lbmFibGVfdHJhbnNsYXRpb24oaW9tbXUpOworCQlpZiAoaW9tbXVfZW5hYmxlX3RyYW5zbGF0aW9uKGlvbW11KSkKKwkJCXJldHVybiAxOwogCQlpb21tdV9kaXNhYmxlX3Byb3RlY3RfbWVtX3JlZ2lvbnMoaW9tbXUpOwogCX0KIApAQCAtMzE5NCw3ICszMzUwLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnOwogCiAJaWYgKGluaXRfaW9tbXVfaHcoKSkgewotCQlXQVJOKDEsICJJT01NVSBzZXR1cCBmYWlsZWQsIERNQVIgY2FuIG5vdCByZXN1bWUhXG4iKTsKKwkJaWYgKGZvcmNlX29uKQorCQkJcGFuaWMoInRib290OiBJT01NVSBzZXR1cCBmYWlsZWQsIERNQVIgY2FuIG5vdCByZXN1bWUhXG4iKTsKKwkJZWxzZQorCQkJV0FSTigxLCAiSU9NTVUgc2V0dXAgZmFpbGVkLCBETUFSIGNhbiBub3QgcmVzdW1lIVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMyMjksNyArMzM4OCw3IEBACiB9CiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpbml0X2lvbW11X3BtX29wcyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2lvbW11X3BtX29wcyh2b2lkKSB7fQogI2VuZGlmCS8qIENPTkZJR19QTSAqLwogCiAvKgpAQCAtMzI3MSw3ICszNDMwLDYgQEAKIGludCBfX2luaXQgaW50ZWxfaW9tbXVfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwotCWludCBmb3JjZV9vbiA9IDA7CiAKIAkvKiBWVC1kIGlzIHJlcXVpcmVkIGZvciBhIFRYVC90Ym9vdCBsYXVuY2gsIHNvIGVuZm9yY2UgdGhhdCAqLwogCWZvcmNlX29uID0gdGJvb3RfZm9yY2VfaW9tbXUoKTsKQEAgLTMzMDksNyArMzQ2Nyw3IEBACiAKIAlpbml0X25vX3JlbWFwcGluZ19kZXZpY2VzKCk7CiAKLQlyZXQgPSBpbml0X2RtYXJzKGZvcmNlX29uKTsKKwlyZXQgPSBpbml0X2RtYXJzKCk7CiAJaWYgKHJldCkgewogCQlpZiAoZm9yY2Vfb24pCiAJCQlwYW5pYygidGJvb3Q6IEZhaWxlZCB0byBpbml0aWFsaXplIERNQVJzXG4iKTsKQEAgLTMzODAsOCArMzUzOCw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZV9kb21haW5fbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdG1wLCAmZG9tYWluLT5kZXZpY2VzKSB7CiAJCWluZm8gPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgZGV2aWNlX2RvbWFpbl9pbmZvLCBsaW5rKTsKLQkJLyogTm8gbmVlZCB0byBjb21wYXJlIFBDSSBkb21haW47IGl0IGhhcyB0byBiZSB0aGUgc2FtZSAqLwotCQlpZiAoaW5mby0+YnVzID09IHBkZXYtPmJ1cy0+bnVtYmVyICYmCisJCWlmIChpbmZvLT5zZWdtZW50ID09IHBjaV9kb21haW5fbnIocGRldi0+YnVzKSAmJgorCQkgICAgaW5mby0+YnVzID09IHBkZXYtPmJ1cy0+bnVtYmVyICYmCiAJCSAgICBpbmZvLT5kZXZmbiA9PSBwZGV2LT5kZXZmbikgewogCQkJbGlzdF9kZWwoJmluZm8tPmxpbmspOwogCQkJbGlzdF9kZWwoJmluZm8tPmdsb2JhbCk7CkBAIC0zNDE5LDEwICszNTc3LDEzIEBACiAJCWRvbWFpbl91cGRhdGVfaW9tbXVfY2FwKGRvbWFpbik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgdG1wX2ZsYWdzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIHRtcF9mbGFncyk7Ci0JCWNsZWFyX2JpdChkb21haW4tPmlkLCBpb21tdS0+ZG9tYWluX2lkcyk7Ci0JCWlvbW11LT5kb21haW5zW2RvbWFpbi0+aWRdID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIHRtcF9mbGFncyk7CisJCWlmICghKGRvbWFpbi0+ZmxhZ3MgJiBET01BSU5fRkxBR19WSVJUVUFMX01BQ0hJTkUpICYmCisJCSAgICAhKGRvbWFpbi0+ZmxhZ3MgJiBET01BSU5fRkxBR19TVEFUSUNfSURFTlRJVFkpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIHRtcF9mbGFncyk7CisJCQljbGVhcl9iaXQoZG9tYWluLT5pZCwgaW9tbXUtPmRvbWFpbl9pZHMpOworCQkJaW9tbXUtPmRvbWFpbnNbZG9tYWluLT5pZF0gPSBOVUxMOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIHRtcF9mbGFncyk7CisJCX0KIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2VfZG9tYWluX2xvY2ssIGZsYWdzKTsKQEAgLTM1MDUsNiArMzY2Niw3IEBACiAJZG9tYWluLT5pb21tdV9jb3VudCA9IDA7CiAJZG9tYWluLT5pb21tdV9jb2hlcmVuY3kgPSAwOwogCWRvbWFpbi0+aW9tbXVfc25vb3BpbmcgPSAwOworCWRvbWFpbi0+aW9tbXVfc3VwZXJwYWdlID0gMDsKIAlkb21haW4tPm1heF9hZGRyID0gMDsKIAlkb21haW4tPm5pZCA9IC0xOwogCkBAIC0zNzIwLDcgKzM4ODIsNyBAQAogCXN0cnVjdCBkbWFfcHRlICpwdGU7CiAJdTY0IHBoeXMgPSAwOwogCi0JcHRlID0gcGZuX3RvX2RtYV9wdGUoZG1hcl9kb21haW4sIGlvdmEgPj4gVlREX1BBR0VfU0hJRlQpOworCXB0ZSA9IHBmbl90b19kbWFfcHRlKGRtYXJfZG9tYWluLCBpb3ZhID4+IFZURF9QQUdFX1NISUZULCAwKTsKIAlpZiAocHRlKQogCQlwaHlzID0gZG1hX3B0ZV9hZGRyKHB0ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdmEuYyBiL2RyaXZlcnMvcGNpL2lvdmEuYwppbmRleCA5NjA2ZTU5Li5jNWMyNzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pb3ZhLmMKKysrIGIvZHJpdmVycy9wY2kvaW92YS5jCkBAIC02Myw4ICs2MywxNiBAQAogCWN1cnIgPSBpb3ZhZC0+Y2FjaGVkMzJfbm9kZTsKIAljYWNoZWRfaW92YSA9IGNvbnRhaW5lcl9vZihjdXJyLCBzdHJ1Y3QgaW92YSwgbm9kZSk7CiAKLQlpZiAoZnJlZS0+cGZuX2xvID49IGNhY2hlZF9pb3ZhLT5wZm5fbG8pCi0JCWlvdmFkLT5jYWNoZWQzMl9ub2RlID0gcmJfbmV4dCgmZnJlZS0+bm9kZSk7CisJaWYgKGZyZWUtPnBmbl9sbyA+PSBjYWNoZWRfaW92YS0+cGZuX2xvKSB7CisJCXN0cnVjdCByYl9ub2RlICpub2RlID0gcmJfbmV4dCgmZnJlZS0+bm9kZSk7CisJCXN0cnVjdCBpb3ZhICppb3ZhID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpb3ZhLCBub2RlKTsKKworCQkvKiBvbmx5IGNhY2hlIGlmIGl0J3MgYmVsb3cgMzJiaXQgcGZuICovCisJCWlmIChub2RlICYmIGlvdmEtPnBmbl9sbyA8IGlvdmFkLT5kbWFfMzJiaXRfcGZuKQorCQkJaW92YWQtPmNhY2hlZDMyX25vZGUgPSBub2RlOworCQllbHNlCisJCQlpb3ZhZC0+Y2FjaGVkMzJfbm9kZSA9IE5VTEw7CisJfQogfQogCiAvKiBDb21wdXRlcyB0aGUgcGFkZGluZyBzaXplIHJlcXVpcmVkLCB0byBtYWtlIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggZjgyMmUxMy4uY2UyYWFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0xMDUxLDQgKzEwNTEsMTMgQEAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTGludXggZHJpdmVyIHNpZGUgb2YgdGhlIFRpbGVyYQogCSAgaHlwZXJ2aXNvcidzIHJlYWwtdGltZSBjbG9jayBpbnRlcmZhY2UuCiAKK2NvbmZpZyBSVENfRFJWX1BVVjMKKwl0cmlzdGF0ZSAiUEtVbml0eSB2MyBSVEMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfUFVWMworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUlRDIGluIHRoZSBQS1VuaXR5LXYzIFNvQ3MuCisKKwkgIFRoaXMgZHJpdmUgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtcHV2My4KKwogZW5kaWYgIyBSVENfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggMjEzZDcyNS4uMGZmZWZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTc4LDYgKzc4LDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX1BMMDMwKQkrPSBydGMtcGwwMzAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzEpCSs9IHJ0Yy1wbDAzMS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QUzMpCSs9IHJ0Yy1wczMubworb2JqLSQoQ09ORklHX1JUQ19EUlZfUFVWMykJKz0gcnRjLXB1djMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUFhBKQkrPSBydGMtcHhhLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1I5NzAxKQkrPSBydGMtcjk3MDEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlA1QzAxKQkrPSBydGMtcnA1YzAxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTMuYwppbmRleCAxYTg0YjNlLi43MzE3ZDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDkzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ5My5jCkBAIC0xODksNyArMTg5LDcgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgbTQxdDkzX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShzcGkpOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKIAogCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIva2VybmVsL3J0Yy5jIGIvZHJpdmVycy9ydGMvcnRjLXB1djMuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL3VuaWNvcmUzMi9rZXJuZWwvcnRjLmMKcmVuYW1lIHRvIGRyaXZlcnMvcnRjL3J0Yy1wdXYzLmMKaW5kZXggOGNhZDcwYi4uNDZmMTRiOCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL3J0Yy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wdXYzLmMKQEAgLTEsNyArMSw1IEBACiAvKgotICogbGludXgvYXJjaC91bmljb3JlMzIva2VybmVsL3J0Yy5jCi0gKgotICogQ29kZSBzcGVjaWZpYyB0byBQS1VuaXR5IFNvQyBhbmQgVW5pQ29yZSBJU0EKKyAqIFJUQyBkcml2ZXIgY29kZSBzcGVjaWZpYyB0byBQS1VuaXR5IFNvQyBhbmQgVW5pQ29yZSBJU0EKICAqCiAgKglNYWludGFpbmVkIGJ5IEdVQU4gWHVlLXRhbyA8Z3h0QG1wcmMucGt1LmVkdS5jbj4KICAqCUNvcHlyaWdodCAoQykgMjAwMS0yMDEwIEd1YW4gWHVldGFvCkBAIC0zNiw3ICszNCw2IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHB1djNfcnRjX3BpZV9sb2NrKTsKIAogLyogSVJRIEhhbmRsZXJzICovCi0KIHN0YXRpYyBpcnFyZXR1cm5fdCBwdXYzX3J0Y19hbGFybWlycShpbnQgaXJxLCB2b2lkICppZCkKIHsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcmRldiA9IGlkOwpAQCAtODksNyArODYsNiBAQAogfQogCiAvKiBUaW1lIHJlYWQvd3JpdGUgKi8KLQogc3RhdGljIGludCBwdXYzX3J0Y19nZXR0aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICpydGNfdG0pCiB7CiAJcnRjX3RpbWVfdG9fdG0ocmVhZGwoUlRDX1JDTlIpLCBydGNfdG0pOwpAQCAtMTk2LDcgKzE5Miw2IEBACiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Y19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCS8qIGRvIG5vdCBjbGVhciBBSUUgaGVyZSwgaXQgbWF5IGJlIG5lZWRlZCBmb3Igd2FrZSAqLwotCiAJcHV2M19ydGNfc2V0cGllKGRldiwgMCk7CiAJZnJlZV9pcnEocHV2M19ydGNfYWxhcm1ubywgcnRjX2Rldik7CiAJZnJlZV9pcnEocHV2M19ydGNfdGlja25vLCBydGNfZGV2KTsKQEAgLTIxOCw3ICsyMTMsNiBAQAogCQl3cml0ZWwocmVhZGwoUlRDX1JUU1IpICYgflJUQ19SVFNSX0haRSwgUlRDX1JUU1IpOwogCX0gZWxzZSB7CiAJCS8qIHJlLWVuYWJsZSB0aGUgZGV2aWNlLCBhbmQgY2hlY2sgaXQgaXMgb2sgKi8KLQogCQlpZiAoKHJlYWRsKFJUQ19SVFNSKSAmIFJUQ19SVFNSX0haRSkgPT0gMCkgewogCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmdcbiIpOwogCQkJd3JpdGVsKHJlYWRsKFJUQ19SVFNSKSB8IFJUQ19SVFNSX0haRSwgUlRDX1JUU1IpOwpAQCAtMjUxLDcgKzI0NSw2IEBACiAJcHJfZGVidWcoIiVzOiBwcm9iZT0lcFxuIiwgX19mdW5jX18sIHBkZXYpOwogCiAJLyogZmluZCB0aGUgSVJRcyAqLwotCiAJcHV2M19ydGNfdGlja25vID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKIAlpZiAocHV2M19ydGNfdGlja25vIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIHJ0YyB0aWNrXG4iKTsKQEAgLTI2OCw3ICsyNjEsNiBAQAogCQkgcHV2M19ydGNfdGlja25vLCBwdXYzX3J0Y19hbGFybW5vKTsKIAogCS8qIGdldCB0aGUgbWVtb3J5IHJlZ2lvbiAqLwotCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKQEAgLTI4OCw3ICsyODAsNiBAQAogCXB1djNfcnRjX2VuYWJsZShwZGV2LCAxKTsKIAogCS8qIHJlZ2lzdGVyIFJUQyBhbmQgZXhpdCAqLwotCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicGt1bml0eSIsICZwZGV2LT5kZXYsICZwdXYzX3J0Y29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKIApAQCAtMzE1LDggKzMwNiw2IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotLyogUlRDIFBvd2VyIG1hbmFnZW1lbnQgY29udHJvbCAqLwotCiBzdGF0aWMgaW50IHRpY250X3NhdmU7CiAKIHN0YXRpYyBpbnQgcHV2M19ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC0zNjgsNCArMzU3LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUlRDIERyaXZlciBmb3IgdGhlIFBLVW5pdHkgdjMgY2hpcCIpOwogTU9EVUxFX0FVVEhPUigiSHUgRG9uZ2xpYW5nIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDU1ZThmNzIuLjU3MGQ0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtNDE2LDcgKzQxNiw3IEBACiAKIAkvKiBzcGVjaWFsIGhhbmRsaW5nIGZvciBubyB0YXJnZXQgYnVmZmVyIGVtcHR5ICovCiAJaWYgKCghcS0+aXNfaW5wdXRfcSAmJgotCSAgICAocS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZikgPT0gMHgxMCkpIHsKKwkgICAgKHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5zZmxhZ3MpID09IDB4MTApKSB7CiAJCXFwZXJmX2luYyhxLCB0YXJnZXRfZnVsbCk7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJPVVRGVUxMIEZUQzolMDJ4IiwKIAkJCSAgICAgIHEtPmZpcnN0X3RvX2NoZWNrKTsKQEAgLTQyNyw4ICs0MjcsOCBAQAogCURCRl9FUlJPUigocS0+aXNfaW5wdXRfcSkgPyAiSU46JTJkIiA6ICJPVVQ6JTJkIiwgcS0+bnIpOwogCURCRl9FUlJPUigiRlRDOiUzZCBDOiUzZCIsIHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJREJGX0VSUk9SKCJGMTQ6JTJ4IEYxNTolMngiLAotCQkgIHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE0XS5mbGFncyAmIDB4ZmYsCi0JCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZik7CisJCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTRdLnNmbGFncywKKwkJICBxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNV0uc2ZsYWdzKTsKIAogCS8qCiAJICogSW50ZXJydXB0cyBtYXkgYmUgYXZvaWRlZCBhcyBsb25nIGFzIHRoZSBlcnJvciBpcyBwcmVzZW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAppbmRleCA1NWM2YWExLi5kM2NlZTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKQEAgLTM2MSw3ICszNjEsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBxZXRoX2lzX2xhc3Rfc2JhbGUoc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlKQogewotCXJldHVybiAoc2JhbGUtPmZsYWdzICYgU0JBTF9GTEFHU19MQVNUX0VOVFJZKTsKKwlyZXR1cm4gKHNiYWxlLT5lZmxhZ3MgJiBTQkFMX0VGTEFHU19MQVNUX0VOVFJZKTsKIH0KIAogZW51bSBxZXRoX3FkaW9fYnVmZmVyX3N0YXRlcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggNTAzNjc4YS4uZGQwOGY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtODkwLDcgKzg5MCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCS8qIGlzIFBDSSBmbGFnIHNldCBvbiBidWZmZXI/ICovCi0JaWYgKGJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLmZsYWdzICYgMHg0MCkKKwlpZiAoYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uc2ZsYWdzICYgU0JBTF9TRkxBR1MwX1BDSV9SRVEpCiAJCWF0b21pY19kZWMoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KTsKIAogCXNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KTsKQEAgLTkwNiw5ICs5MDYsMTEgQEAKIAkJYnVmLT5pc19oZWFkZXJbaV0gPSAwOwogCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5sZW5ndGggPSAwOwogCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5hZGRyID0gTlVMTDsKLQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZmxhZ3MgPSAwOworCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5lZmxhZ3MgPSAwOworCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5zZmxhZ3MgPSAwOwogCX0KLQlidWYtPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZmxhZ3MgPSAwOworCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzE1XS5lZmxhZ3MgPSAwOworCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzE1XS5zZmxhZ3MgPSAwOwogCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPSAwOwogCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfRU1QVFkpOwogfQpAQCAtMjM2OCw5ICsyMzcwLDEwIEBACiAJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmxlbmd0aCA9IFBBR0VfU0laRTsKIAkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uYWRkciA9ICBwb29sX2VudHJ5LT5lbGVtZW50c1tpXTsKIAkJaWYgKGkgPT0gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpIC0gMSkKLQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmZsYWdzID0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZWZsYWdzID0gU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKIAkJZWxzZQotCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZmxhZ3MgPSAwOworCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZWZsYWdzID0gMDsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uc2ZsYWdzID0gMDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzE4LDExICsyNzIxLDExIEBACiAJaWYgKHFkaW9fZXJyb3IpIHsKIAkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgZGJmdGV4dCk7CiAJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiIEYxNT0lMDJYIiwKLQkJCSAgICAgICBidWYtPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZik7CisJCQkgICAgICAgYnVmLT5lbGVtZW50WzE1XS5zZmxhZ3MpOwogCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgIiBGMTQ9JTAyWCIsCi0JCQkgICAgICAgYnVmLT5lbGVtZW50WzE0XS5mbGFncyAmIDB4ZmYpOworCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNF0uc2ZsYWdzKTsKIAkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICIgcWVycj0lWCIsIHFkaW9fZXJyb3IpOwotCQlpZiAoKGJ1Zi0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmKSA9PSAweDEyKSB7CisJCWlmICgoYnVmLT5lbGVtZW50WzE1XS5zZmxhZ3MpID09IDB4MTIpIHsKIAkJCWNhcmQtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UKQEAgLTI3OTgsNyArMjgwMSw3IEBACiBzdGF0aWMgaW50IHFldGhfaGFuZGxlX3NlbmRfZXJyb3Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKIAkJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGludCBxZGlvX2VycikKIHsKLQlpbnQgc2JhbGYxNSA9IGJ1ZmZlci0+YnVmZmVyLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmY7CisJaW50IHNiYWxmMTUgPSBidWZmZXItPmJ1ZmZlci0+ZWxlbWVudFsxNV0uc2ZsYWdzOwogCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNiwgImhkc25kZXJyIik7CiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKQEAgLTI5MDcsOCArMjkxMCw4IEBACiAKIAlmb3IgKGkgPSBpbmRleDsgaSA8IGluZGV4ICsgY291bnQ7ICsraSkgewogCQlidWYgPSAmcXVldWUtPmJ1ZnNbaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwotCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsIC0gMV0uZmxhZ3MgfD0KLQkJCQlTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CisJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgLSAxXS5lZmxhZ3MgfD0KKwkJCQlTQkFMX0VGTEFHU19MQVNUX0VOVFJZOwogCiAJCWlmIChxdWV1ZS0+Y2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkKIAkJCWNvbnRpbnVlOwpAQCAtMjkyMSw3ICsyOTI0LDcgQEAKIAkJCQkvKiBpdCdzIGxpa2VseSB0aGF0IHdlJ2xsIGdvIHRvIHBhY2tpbmcKIAkJCQkgKiBtb2RlIHNvb24gKi8KIAkJCQlhdG9taWNfaW5jKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCk7Ci0JCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uZmxhZ3MgfD0gMHg0MDsKKwkJCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5zZmxhZ3MgfD0gU0JBTF9TRkxBR1MwX1BDSV9SRVE7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpIHsKQEAgLTI5MzQsNyArMjkzNyw3IEBACiAJCQkJICogZnVydGhlciBzZW5kIHdhcyByZXF1ZXN0ZWQgYnkgdGhlIHN0YWNrCiAJCQkJICovCiAJCQkJYXRvbWljX2luYygmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpOwotCQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLmZsYWdzIHw9IDB4NDA7CisJCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uc2ZsYWdzIHw9IFNCQUxfU0ZMQUdTMF9QQ0lfUkVROwogCQkJfQogCQl9CiAJfQpAQCAtMzE4MCwyMCArMzE4MywyMCBAQAogCQlpZiAoIWxlbmd0aCkgewogCQkJaWYgKGZpcnN0X2xhcCkKIAkJCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykKLQkJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCQkJCVNCQUxfRkxBR1NfRklSU1RfRlJBRzsKKwkJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9CisJCQkJCQlTQkFMX0VGTEFHU19GSVJTVF9GUkFHOwogCQkJCWVsc2UKLQkJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0gMDsKKwkJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9IDA7CiAJCQllbHNlCi0JCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCQkgICAgU0JBTF9GTEFHU19NSURETEVfRlJBRzsKKwkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0KKwkJCQkgICAgU0JBTF9FRkxBR1NfTUlERExFX0ZSQUc7CiAJCX0gZWxzZSB7CiAJCQlpZiAoZmlyc3RfbGFwKQotCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJICAgIFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKKwkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0KKwkJCQkgICAgU0JBTF9FRkxBR1NfRklSU1RfRlJBRzsKIAkJCWVsc2UKLQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJCSAgICBTQkFMX0ZMQUdTX01JRERMRV9GUkFHOworCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPQorCQkJCSAgICBTQkFMX0VGTEFHU19NSURETEVfRlJBRzsKIAkJfQogCQlkYXRhICs9IGxlbmd0aF9oZXJlOwogCQllbGVtZW50Kys7CkBAIC0zMjA1LDEyICszMjA4LDEyIEBACiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5hZGRyID0gKGNoYXIgKilwYWdlX3RvX3BoeXMoZnJhZy0+cGFnZSkKIAkJCSsgZnJhZy0+cGFnZV9vZmZzZXQ7CiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5sZW5ndGggPSBmcmFnLT5zaXplOwotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSBTQkFMX0ZMQUdTX01JRERMRV9GUkFHOworCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0gU0JBTF9FRkxBR1NfTUlERExFX0ZSQUc7CiAJCWVsZW1lbnQrKzsKIAl9CiAKLQlpZiAoYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5mbGFncykKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9GUkFHOworCWlmIChidWZmZXItPmVsZW1lbnRbZWxlbWVudCAtIDFdLmVmbGFncykKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5lZmxhZ3MgPSBTQkFMX0VGTEFHU19MQVNUX0ZSQUc7CiAJKm5leHRfZWxlbWVudF90b19maWxsID0gZWxlbWVudDsKIH0KIApAQCAtMzIzNCw3ICszMjM3LDcgQEAKIAkJLypmaWxsIGZpcnN0IGJ1ZmZlciBlbnRyeSBvbmx5IHdpdGggaGVhZGVyIGluZm9ybWF0aW9uICovCiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5hZGRyID0gc2tiLT5kYXRhOwogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0ubGVuZ3RoID0gaGRyX2xlbjsKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0gU0JBTF9GTEFHU19GSVJTVF9GUkFHOworCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0gU0JBTF9FRkxBR1NfRklSU1RfRlJBRzsKIAkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCsrOwogCQlza2ItPmRhdGEgKz0gaGRyX2xlbjsKIAkJc2tiLT5sZW4gIC09IGhkcl9sZW47CkBAIC0zMjQ2LDcgKzMyNDksNyBAQAogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IGhkcjsKIAkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsKIAkJCQkJCQloZF9sZW47Ci0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9IFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9IFNCQUxfRUZMQUdTX0ZJUlNUX0ZSQUc7CiAJCWJ1Zi0+aXNfaGVhZGVyW2VsZW1lbnRdID0gMTsKIAkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCsrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IDg1MTJiNWMuLjAyMmZiNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtNjQwLDcgKzY0MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9yZXFfY3JlYXRlKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJCQl1MzIgZnNmX2NtZCwgdTMyIHNidHlwZSwKKwkJCQkJCXUzMiBmc2ZfY21kLCB1OCBzYnR5cGUsCiAJCQkJCQltZW1wb29sX3QgKnBvb2wpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CkBAIC04NDEsNyArODQxLDcgQEAKIAlpZiAoemZjcF9xZGlvX3NiYWxfZ2V0KHFkaW8pKQogCQlnb3RvIG91dDsKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0FCT1JUX0ZDUF9DTU5ELAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuc2NzaV9hYm9ydCk7CiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJlcSA9IE5VTEw7CkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfU0VORF9HRU5FUklDLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELCBwb29sKTsKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsIHBvb2wpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldCA9IFBUUl9FUlIocmVxKTsKQEAgLTExMTAsNyArMTExMCw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9TRU5EX0VMUywKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwgTlVMTCk7CisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9XUklURV9SRUFELCBOVUxMKTsKIAogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXQgPSBQVFJfRVJSKHJlcSk7CkBAIC0xMTU2LDcgKzExNTYsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEEsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9FWENIQU5HRV9DT05GSUdfREFUQSwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwgTlVMTCk7CisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELCBOVUxMKTsKIAogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTEyOTYsNyArMTI5Niw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELCBOVUxMKTsKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsIE5VTEwpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocmVxKTsKQEAgLTE0MTIsNyArMTQxMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTQ3OCw3ICsxNDc4LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX1BPUlQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTU1Myw3ICsxNTUzLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX09QRU5fUE9SVF9XSVRIX0RJRCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xNjA2LDcgKzE2MDYsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfQ0xPU0VfUE9SVCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xNjk4LDcgKzE2OTgsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfQ0xPU0VfUEhZU0lDQUxfUE9SVCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xODEyLDcgKzE4MTIsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfT1BFTl9MVU4sCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgYWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTkwMSw3ICsxOTAxLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX0xVTiwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0yMTYxLDcgKzIxNjEsNyBAQAogewogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlzdHJ1Y3QgZmNwX2NtbmQgKmZjcF9jbW5kOwotCXVuc2lnbmVkIGludCBzYnR5cGUgPSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CisJdTggc2J0eXBlID0gU0JBTF9TRkxBR1MwX1RZUEVfUkVBRDsKIAlpbnQgcmVhbF9ieXRlcywgcmV0dmFsID0gLUVJTywgZGl4X2J5dGVzID0gMDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBzY3NpX2NtbmQtPmRldmljZTsKIAlzdHJ1Y3QgemZjcF9zY3NpX2RldiAqemZjcF9zZGV2ID0gc2Rldl90b196ZmNwKHNkZXYpOwpAQCAtMjE4MSw3ICsyMTgxLDcgQEAKIAl9CiAKIAlpZiAoc2NzaV9jbW5kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQotCQlzYnR5cGUgPSBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFOworCQlzYnR5cGUgPSBTQkFMX1NGTEFHUzBfVFlQRV9XUklURTsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRkNQX0NNTkQsCiAJCQkJICBzYnR5cGUsIGFkYXB0ZXItPnBvb2wuc2NzaV9yZXEpOwpAQCAtMjI4MCw3ICsyMjgwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0ZDUF9DTU5ELAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9XUklURSwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFLAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5zY3NpX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTIzMjgsMTcgKzIzMjgsMTggQEAKIAlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gYWRhcHRlci0+cWRpbzsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEgPSBOVUxMOwogCXN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fc3VwcG9ydCAqYm90dG9tOwotCWludCBkaXJlY3Rpb24sIHJldHZhbCA9IC1FSU8sIGJ5dGVzOworCWludCByZXR2YWwgPSAtRUlPLCBieXRlczsKKwl1OCBkaXJlY3Rpb247CiAKIAlpZiAoIShhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfQ0ZEQykpCiAJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKIAogCXN3aXRjaCAoZnNmX2NmZGMtPmNvbW1hbmQpIHsKIAljYXNlIEZTRl9RVENCX0RPV05MT0FEX0NPTlRST0xfRklMRToKLQkJZGlyZWN0aW9uID0gU0JBTF9GTEFHUzBfVFlQRV9XUklURTsKKwkJZGlyZWN0aW9uID0gU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEU7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1FUQ0JfVVBMT0FEX0NPTlRST0xfRklMRToKLQkJZGlyZWN0aW9uID0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOworCQlkaXJlY3Rpb24gPSBTQkFMX1NGTEFHUzBfVFlQRV9SRUFEOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTI0MTMsNyArMjQxNCw3IEBACiAJCWZzZl9yZXEtPnFkaW9fcmVxLnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKIAkJemZjcF9mc2ZfcmVxX2NvbXBsZXRlKGZzZl9yZXEpOwogCi0JCWlmIChsaWtlbHkoc2JhbGUtPmZsYWdzICYgU0JBTF9GTEFHU19MQVNUX0VOVFJZKSkKKwkJaWYgKGxpa2VseShzYmFsZS0+ZWZsYWdzICYgU0JBTF9FRkxBR1NfTEFTVF9FTlRSWSkpCiAJCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCmluZGV4IDk4ZTk3ZDkuLmQ5YzQwZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogCS8qIHNldCBsYXN0IGVudHJ5IGZsYWcgaW4gY3VycmVudCBTQkFMRSBvZiBjdXJyZW50IFNCQUwgKi8KIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCXNiYWxlLT5lZmxhZ3MgfD0gU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKIAogCS8qIGRvbid0IGV4Y2VlZCBsYXN0IGFsbG93ZWQgU0JBTCAqLwogCWlmIChxX3JlcS0+c2JhbF9sYXN0ID09IHFfcmVxLT5zYmFsX2xpbWl0KQpAQCAtMTMyLDcgKzEzMiw3IEBACiAKIAkvKiBzZXQgY2hhaW5pbmcgZmxhZyBpbiBmaXJzdCBTQkFMRSBvZiBjdXJyZW50IFNCQUwgKi8KIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgcV9yZXEpOwotCXNiYWxlLT5mbGFncyB8PSBTQkFMX0ZMQUdTMF9NT1JFX1NCQUxTOworCXNiYWxlLT5zZmxhZ3MgfD0gU0JBTF9TRkxBR1MwX01PUkVfU0JBTFM7CiAKIAkvKiBjYWxjdWxhdGUgaW5kZXggb2YgbmV4dCBTQkFMICovCiAJcV9yZXEtPnNiYWxfbGFzdCsrOwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIAkvKiBzZXQgc3RvcmFnZS1ibG9jayB0eXBlIGZvciBuZXcgU0JBTCAqLwogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgcV9yZXEpOwotCXNiYWxlLT5mbGFncyB8PSBxX3JlcS0+c2J0eXBlOworCXNiYWxlLT5zZmxhZ3MgfD0gcV9yZXEtPnNidHlwZTsKIAogCXJldHVybiBzYmFsZTsKIH0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCiAJLyogc2V0IHN0b3JhZ2UtYmxvY2sgdHlwZSBmb3IgdGhpcyByZXF1ZXN0ICovCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gcV9yZXEtPnNidHlwZTsKKwlzYmFsZS0+c2ZsYWdzIHw9IHFfcmVxLT5zYnR5cGU7CiAKIAlmb3IgKDsgc2c7IHNnID0gc2dfbmV4dChzZykpIHsKIAkJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfbmV4dChxZGlvLCBxX3JlcSk7CkBAIC0zODQsNyArMzg0LDggQEAKIAlmb3IgKGNjID0gMDsgY2MgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyBjYysrKSB7CiAJCXNiYWxlID0gJihxZGlvLT5yZXNfcVtjY10tPmVsZW1lbnRbMF0pOwogCQlzYmFsZS0+bGVuZ3RoID0gMDsKLQkJc2JhbGUtPmZsYWdzID0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCQlzYmFsZS0+ZWZsYWdzID0gU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKKwkJc2JhbGUtPnNmbGFncyA9IDA7CiAJCXNiYWxlLT5hZGRyID0gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKaW5kZXggMjI5N2Q4ZC4uNTRlMjJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKQEAgLTY3LDcgKzY3LDcgQEAKICAqIEBxZGlvX291dGJfdXNhZ2U6IHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlCiAgKi8KIHN0cnVjdCB6ZmNwX3FkaW9fcmVxIHsKLQl1MzIJc2J0eXBlOworCXU4CXNidHlwZTsKIAl1OAlzYmFsX251bWJlcjsKIAl1OAlzYmFsX2ZpcnN0OwogCXU4CXNiYWxfbGFzdDsKQEAgLTExNiw3ICsxMTYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lCiB2b2lkIHpmY3BfcWRpb19yZXFfaW5pdChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsCi0JCQl1bnNpZ25lZCBsb25nIHJlcV9pZCwgdTMyIHNidHlwZSwgdm9pZCAqZGF0YSwgdTMyIGxlbikKKwkJCXVuc2lnbmVkIGxvbmcgcmVxX2lkLCB1OCBzYnR5cGUsIHZvaWQgKmRhdGEsIHUzMiBsZW4pCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCWludCBjb3VudCA9IG1pbihhdG9taWNfcmVhZCgmcWRpby0+cmVxX3FfZnJlZSksCkBAIC0xMzEsNyArMTMxLDggQEAKIAogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCBxX3JlcSk7CiAJc2JhbGUtPmFkZHIgPSAodm9pZCAqKSByZXFfaWQ7Ci0Jc2JhbGUtPmZsYWdzID0gU0JBTF9GTEFHUzBfQ09NTUFORCB8IHNidHlwZTsKKwlzYmFsZS0+ZWZsYWdzID0gMDsKKwlzYmFsZS0+c2ZsYWdzID0gU0JBTF9TRkxBR1MwX0NPTU1BTkQgfCBzYnR5cGU7CiAKIAlpZiAodW5saWtlbHkoIWRhdGEpKQogCQlyZXR1cm47CkBAIC0xNzMsNyArMTc0LDcgQEAKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAKIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCXNiYWxlLT5lZmxhZ3MgfD0gU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggNTg1ODRkYy4uNDRlOGNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCWtmcmVlKHNkZXYpOwogCQlnb3RvIG91dDsKIAl9Ci0KKwlibGtfZ2V0X3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpOwogCXNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlZGF0YSA9IHNkZXY7CiAJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBlNjM5MTI1Li5lMGJkM2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTMyMiw2ICszMjIsNyBAQAogCQlrZnJlZShldnQpOwogCX0KIAorCWJsa19wdXRfcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CiAJLyogTlVMTCBxdWV1ZSBtZWFucyB0aGUgZGV2aWNlIGNhbid0IGJlIHVzZWQgKi8KIAlzZGV2LT5yZXF1ZXN0X3F1ZXVlID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggNmY4NmJhMC4uOTY5Y2RkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAl1bnNpZ25lZCBpbnQJCWNvdW50LCBjOwogCXVuc2lnbmVkIGxvbmcJCWJhc2UsIHR4X3JlZywgcnhfcmVnOwogCWludAkJCXdvcmRfbGVuLCBkYXRhX3R5cGUsIGVsZW1lbnRfY291bnQ7Ci0JaW50CQkJZWxlbWVudHM7CisJaW50CQkJZWxlbWVudHMgPSAwOwogCXUzMgkJCWw7CiAJdTgJCQkqIHJ4OwogCWNvbnN0IHU4CQkqIHR4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX3BjaWNvcmUuYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9wY2ljb3JlLmMKaW5kZXggODJmZWIzNC4uMmEyMGRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX3BjaWNvcmUuYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfcGNpY29yZS5jCkBAIC01MzksMTAgKzUzOSwxMiBAQAogCWlmICghcGMtPmhvc3Rtb2RlKQogCQlzc2JfcGNpY29yZV9pbml0X2NsaWVudG1vZGUocGMpOwogCi0JLyogQWRkaXRpb25hbCBhbHdheXMgb25jZS1leGVjdXRlZCB3b3JrYXJvdW5kcyAqLwotCXNzYl9wY2ljb3JlX3NlcmRlc193b3JrYXJvdW5kKHBjKTsKLQkvKiBUT0RPOiBBU1BNICovCi0JLyogVE9ETzogQ2xvY2sgUmVxdWVzdCBVcGRhdGUgKi8KKwkvKiBBZGRpdGlvbmFsIFBDSWUgYWx3YXlzIG9uY2UtZXhlY3V0ZWQgd29ya2Fyb3VuZHMgKi8KKwlpZiAoZGV2LT5pZC5jb3JlaWQgPT0gU1NCX0RFVl9QQ0lFKSB7CisJCXNzYl9wY2ljb3JlX3NlcmRlc193b3JrYXJvdW5kKHBjKTsKKwkJLyogVE9ETzogQVNQTSAqLworCQkvKiBUT0RPOiBDbG9jayBSZXF1ZXN0IFVwZGF0ZSAqLworCX0KIH0KIAogc3RhdGljIHUzMiBzc2JfcGNpZV9yZWFkKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHUzMiBhZGRyZXNzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCBkZmMxNmY5Li4xOTYyODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtMjQsMjMgKzI0LDYgQEAKIAogaWYgU1RBR0lORwogCi1jb25maWcgU1RBR0lOR19FWENMVURFX0JVSUxECi0JYm9vbCAiRXhjbHVkZSBTdGFnaW5nIGRyaXZlcnMgZnJvbSBiZWluZyBidWlsdCIgaWYgU1RBR0lORwotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQkgIEFyZSB5b3Ugc3VyZSB5b3UgcmVhbGx5IHdhbnQgdG8gYnVpbGQgdGhlIHN0YWdpbmcgZHJpdmVycz8KLQkgIFRoZXkgdGFpbnQgeW91ciBrZXJuZWwsIGRvbid0IGxpdmUgdXAgdG8gdGhlIG5vcm1hbCBMaW51eAotCSAga2VybmVsIHF1YWxpdHkgc3RhbmRhcmRzLCBhcmUgYSBiaXQgY3J1ZnR5IGFyb3VuZCB0aGUgZWRnZXMsCi0JICBhbmQgbWlnaHQgZ28gb2ZmIGFuZCBraWNrIHlvdXIgZG9nIHdoZW4geW91IGFyZW4ndCBwYXlpbmcKLQkgIGF0dGVudGlvbi4KLQotCSAgU2F5IE4gaGVyZSB0byBiZSBhYmxlIHRvIHNlbGVjdCBhbmQgYnVpbGQgdGhlIFN0YWdpbmcgZHJpdmVycy4KLQkgIFRoaXMgb3B0aW9uIGlzIHByaW1hcmlseSBoZXJlIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGJ1aWx0Ci0JICB3aGVuIHNlbGVjdGluZyAnbWFrZSBhbGx5ZXNjb25mZycgYW5kICdtYWtlIGFsbG1vZGNvbmZpZycgc28KLQkgIGRvbid0IGJlIGFsbCB0aGF0IHB1dCBvZmYsIHlvdXIgZG9nIHdpbGwgYmUganVzdCBmaW5lLgotCi1pZiAhU1RBR0lOR19FWENMVURFX0JVSUxECi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3R0eS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9LY29uZmlnIgpAQCAtMTc3LDUgKzE2MCw0IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL252ZWMvS2NvbmZpZyIKIAotZW5kaWYgIyAhU1RBR0lOR19FWENMVURFX0JVSUxECiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLWp0YWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLWp0YWcuYwppbmRleCA4NzYzMDg4Li44YjE2MjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS1qdGFnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEtanRhZy5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxzdGFnaW5nL2FsdGVyYS5oPgorI2luY2x1ZGUgImFsdGVyYS5oIgogI2luY2x1ZGUgImFsdGVyYS1leHBydC5oIgogI2luY2x1ZGUgImFsdGVyYS1qdGFnLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5jCmluZGV4IDA1YWFkMzUuLjljZDVlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPHN0YWdpbmcvYWx0ZXJhLmg+CisjaW5jbHVkZSAiYWx0ZXJhLmgiCiAjaW5jbHVkZSAiYWx0ZXJhLWV4cHJ0LmgiCiAjaW5jbHVkZSAiYWx0ZXJhLWp0YWcuaCIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGFnaW5nL2FsdGVyYS5oIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9zdGFnaW5nL2FsdGVyYS5oCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL0tjb25maWcKaW5kZXggMWYxNWUxZi4uYWZkNmNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBBVEg2S19MRUdBQ1kKIAl0cmlzdGF0ZSAiQXRoZXJvcyBBUjYwMDMgc3VwcG9ydCAobm9uIG1hYzgwMjExKSIKICAgICAgICAgZGVwZW5kcyBvbiBNTUMgJiYgV0xBTgorCWRlcGVuZHMgb24gQ0ZHODAyMTEKICAgICAgICAgc2VsZWN0IFdJUkVMRVNTX0VYVAogICAgICAgICBzZWxlY3QgV0VYVF9QUklWCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9jZmc4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9jZmc4MDIxMS5jCmluZGV4IDc3ZGZiNDAuLmQzYTc3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2NmZzgwMjExLmMKQEAgLTg3MCw3ICs4NzAsOCBAQAogICAgIGlmKGFyLT5zY2FuX3JlcXVlc3QpCiAgICAgewogICAgICAgICAvKiBUcmFuc2xhdGUgZGF0YSB0byBjZmc4MDIxMSBtZ210IGZvcm1hdCAqLwotICAgICAgICB3bWlfaXRlcmF0ZV9ub2Rlcyhhci0+YXJXbWksIGFyNmtfY2ZnODAyMTFfc2Nhbl9ub2RlLCBhci0+d2Rldi0+d2lwaHkpOworCWlmIChhci0+YXJXbWkpCisJCXdtaV9pdGVyYXRlX25vZGVzKGFyLT5hcldtaSwgYXI2a19jZmc4MDIxMV9zY2FuX25vZGUsIGFyLT53ZGV2LT53aXBoeSk7CiAKICAgICAgICAgY2ZnODAyMTFfc2Nhbl9kb25lKGFyLT5zY2FuX3JlcXVlc3QsCiAgICAgICAgICAgICAoKHN0YXR1cyAmIEFfRUNBTkNFTEVEKSB8fCAoc3RhdHVzICYgQV9FQlVTWSkpID8gdHJ1ZSA6IGZhbHNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYwppbmRleCA5MjljZWFmLi4xNWUxYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3dsX2l3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy93bF9pdy5jCkBAIC02NCw4ICs2NCw2IEBACiBleHRlcm4gYm9vbCB3bF9pd19jb25uX3N0YXR1c19zdHIodTMyIGV2ZW50X3R5cGUsIHUzMiBzdGF0dXMsCiAJCQkJICB1MzIgcmVhc29uLCBjaGFyICpzdHJpbmdCdWYsIHVpbnQgYnVmbGVuKTsKIAotdWludCB3bF9tc2dfbGV2ZWwgPSBXTF9FUlJPUl9WQUw7Ci0KICNkZWZpbmUgTUFYX1dMSVdfSU9DVExfTEVOIDEwMjQKIAogI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMKaW5kZXggMWM0NWMxMS4uYWE4N2IxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMKQEAgLTU0Miw2ICs1NDIsOCBAQAogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJdWludDMyX3QgdHRfcGFnZXM7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dDsKIAogCWRldl9wcml2ID0ga3phbGxvYyhzaXplb2YoKmRldl9wcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldl9wcml2ID09IE5VTEwpCkBAIC02NjMsNyArNjY1LDE4IEBACiAJCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZXYpOwogCX0KIAotCXJldCA9IHBzYl9iYWNrbGlnaHRfaW5pdChkZXYpOworCS8qIE9ubHkgYWRkIGJhY2tsaWdodCBzdXBwb3J0IGlmIHdlIGhhdmUgTFZEUyBvdXRwdXQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsCisJCQkgICAgaGVhZCkgeworCQlwc2JfaW50ZWxfb3V0cHV0ID0gdG9fcHNiX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCisJCXN3aXRjaCAocHNiX2ludGVsX291dHB1dC0+dHlwZSkgeworCQljYXNlIElOVEVMX09VVFBVVF9MVkRTOgorCQkJcmV0ID0gcHNiX2JhY2tsaWdodF9pbml0KGRldik7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAjaWYgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ZiLmMKaW5kZXggOTljMDNhMi4uMDg0YzM2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9mYi5jCkBAIC00NDEsNiArNDQxLDE2IEBACiAJaW5mby0+c2NyZWVuX3NpemUgPSBzaXplOwogCW1lbXNldChpbmZvLT5zY3JlZW5fYmFzZSwgMCwgc2l6ZSk7CiAKKwlpZiAoZGV2X3ByaXYtPnBnLT5zdG9sZW5fc2l6ZSkgeworCQlpbmZvLT5hcGVydHVyZXMgPSBhbGxvY19hcGVydHVyZXMoMSk7CisJCWlmICghaW5mby0+YXBlcnR1cmVzKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZXJyMDsKKwkJfQorCQlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5iYXNlID0gZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlOworCQlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5zaXplID0gZGV2X3ByaXYtPnBnLT5zdG9sZW5fc2l6ZTsKKwl9CisKIAlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCwgZmItPmRlcHRoKTsKIAlkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKGluZm8sICZmYmRldi0+cHNiX2ZiX2hlbHBlciwKIAkJCQlzaXplcy0+ZmJfd2lkdGgsIHNpemVzLT5mYl9oZWlnaHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfYmlvcy5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfYmlvcy5jCmluZGV4IDQ4YWM4YmEuLjQxNzk2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Jpb3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9iaW9zLmMKQEAgLTE1NCwxMCArMTU0LDE1IEBACiAKIAlmaWxsX2RldGFpbF90aW1pbmdfZGF0YShwYW5lbF9maXhlZF9tb2RlLCBkdm9fdGltaW5nKTsKIAotCWRldl9wcml2LT5sZnBfbHZkc192YnRfbW9kZSA9IHBhbmVsX2ZpeGVkX21vZGU7Ci0KLQlEUk1fREVCVUcoIkZvdW5kIHBhbmVsIG1vZGUgaW4gQklPUyBWQlQgdGFibGVzOlxuIik7Ci0JZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShwYW5lbF9maXhlZF9tb2RlKTsKKwlpZiAocGFuZWxfZml4ZWRfbW9kZS0+aHRvdGFsID4gMCAmJiBwYW5lbF9maXhlZF9tb2RlLT52dG90YWwgPiAwKSB7CisJCWRldl9wcml2LT5sZnBfbHZkc192YnRfbW9kZSA9IHBhbmVsX2ZpeGVkX21vZGU7CisJCURSTV9ERUJVRygiRm91bmQgcGFuZWwgbW9kZSBpbiBCSU9TIFZCVCB0YWJsZXM6XG4iKTsKKwkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShwYW5lbF9maXhlZF9tb2RlKTsKKwl9IGVsc2UgeworCQlEUk1fREVCVUcoIklnbm9yaW5nIGJvZ3VzIExWRFMgVkJUIG1vZGUuXG4iKTsKKwkJZGV2X3ByaXYtPmx2ZHNfdmJ0ID0gMDsKKwkJa2ZyZWUocGFuZWxfZml4ZWRfbW9kZSk7CisJfQogCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvbWF4NTE3LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYwppbmRleCA4ODE3NjhkLi4yZmUzNGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIG1heDUxOF9pbmZvID0gewotCS5hdHRycyA9ICZtYXg1MTdfYXR0cmlidXRlX2dyb3VwLAorCS5hdHRycyA9ICZtYXg1MThfYXR0cmlidXRlX2dyb3VwLAogCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYwppbmRleCAyNTg5YTdlLi4zNjEyMzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMKQEAgLTEzNywxMyArMTM3LDEzIEBACiAJCWlmIChzdC0+dmFyaWFudC0+ZmxhZ3MgJiBBRElTMTY0MDBfTk9fQlVSU1QpIHsKIAkJCXJldCA9IGFkaXMxNjM1MF9zcGlfcmVhZF9hbGwoJmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpOwogCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKKwkJCQlnb3RvIGVycjsKIAkJCWZvciAoOyBpIDwgcmluZy0+c2Nhbl9jb3VudDsgaSsrKQogCQkJCWRhdGFbaV0JPSAqKHMxNiAqKShzdC0+cnggKyBpKjIpOwogCQl9IGVsc2UgewogCQkJcmV0ID0gYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KCZpbmRpb19kZXYtPmRldiwgc3QtPnJ4KTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7CisJCQkJZ290byBlcnI7CiAJCQlmb3IgKDsgaSA8IGluZGlvX2Rldi0+cmluZy0+c2Nhbl9jb3VudDsgaSsrKSB7CiAJCQkJaiA9IF9fZmZzKG1hc2spOwogCQkJCW1hc2sgJj0gfigxIDw8IGopOwpAQCAtMTU4LDkgKzE1OCwxMyBAQAogCXJpbmctPmFjY2Vzcy0+c3RvcmVfdG8oaW5kaW9fZGV2LT5yaW5nLCAodTggKikgZGF0YSwgcGYtPnRpbWVzdGFtcCk7CiAKIAlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShpbmRpb19kZXYtPnRyaWcpOwotCWtmcmVlKGRhdGEpOwogCisJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOworCitlcnI6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBhZGlzMTY0MDBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jCmluZGV4IDYxNTkwMjMuLmQ1MDRhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMKQEAgLTI5NCw2ICsyOTQsNyBAQAogCXBmLT5oID0gaDsKIAlwZi0+dGhyZWFkID0gdGhyZWFkOwogCXBmLT50eXBlID0gdHlwZTsKKwlwZi0+cHJpdmF0ZV9kYXRhID0gcHJpdmF0ZTsKIAogCXJldHVybiBwZjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL21laS9pbml0LmMKaW5kZXggMjgxODg1MS4uZDFmZmEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laS9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laS9pbml0LmMKQEAgLTIwNSwxMCArMjA1LDEwIEBACiAJCQkiaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAogCQkJZGV2LT5ob3N0X2h3X3N0YXRlLCBkZXYtPm1lX2h3X3N0YXRlKTsKIAotCQlpZiAoIShkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JEWSkgIT0gSF9SRFkpCisJCWlmICghKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfUkRZKSkKIAkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiaG9zdCB0dXJuIG9mZiBIX1JEWS5cbiIpOwogCi0JCWlmICghKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9SRFlfSFJBKSAhPSBNRV9SRFlfSFJBKQorCQlpZiAoIShkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkpCiAJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIk1FIHR1cm4gb2ZmIE1FX1JEWS5cbiIpOwogCiAJCXByaW50ayhLRVJOX0VSUiAibWVpOiBsaW5rIGxheWVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnCmluZGV4IGIwNTMwNjcuLmZlNDBlMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJdHJpc3RhdGUgIk9uZSBMYXB0b3AgUGVyIENoaWxkIERpc3BsYXkgQ09OdHJvbGxlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gT0xQQyAmJiBGQgogCXNlbGVjdCBJMkMKKwlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCS0tLWhlbHAtLS0KIAkgIEFkZCBzdXBwb3J0IGZvciB0aGUgT0xQQyBYTyBEQ09OIGNvbnRyb2xsZXIuICBUaGlzIGNvbnRyb2xsZXIgaXMKIAkgIG9ubHkgYXZhaWxhYmxlIG9uIE9MUEMgcGxhdGZvcm1zLiAgIFVubGVzcyB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYwppbmRleCBiZGRiMDMxLi5jZGFlNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jCkBAIC0yMzI4LDcgKzIzMjgsNyBAQAogCiAJCQlyZXR2YWwgPSBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIElPX1NFTkRfT1BfQ09ORCwgMCwgU0RfUlNQX1RZUEVfUjQsIHJzcCwgNSk7CiAJCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJaW50IGZ1bmNfbnVtID0gKHJzcFsxXSA+PiA0KSAmJiAweDA3OworCQkJCWludCBmdW5jX251bSA9IChyc3BbMV0gPj4gNCkgJiAweDA3OwogCQkJCWlmIChmdW5jX251bSkgewogCQkJCQlSVFNYX0RFQlVHUCgiU0RfSU8gY2FyZCAoRnVuY3Rpb24gbnVtYmVyOiAlZCkhXG4iLCBmdW5jX251bSk7CiAJCQkJCWNoaXAtPnNkX2lvID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKaW5kZXggNmU5OWVjOC4uOGNiZWE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKQEAgLTI2LDYgKzI2LDggQEAKIHN0YXRpYyBpbnQgc3R1Yl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgc3R1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworc3RhdGljIGludCBzdHViX3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK3N0YXRpYyBpbnQgc3R1Yl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogCiAvKgogICogRGVmaW5lIGRldmljZSBJRHMgaGVyZSBpZiB5b3Ugd2FudCB0byBleHBsaWNpdGx5IGxpbWl0IGV4cG9ydGFibGUgZGV2aWNlcy4KQEAgLTU5LDYgKzYxLDggQEAKIAkucHJvYmUJCT0gc3R1Yl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHN0dWJfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUJPSBzdHViX3RhYmxlLAorCS5wcmVfcmVzZXQJPSBzdHViX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldAk9IHN0dWJfcG9zdF9yZXNldCwKIH07CiAKIC8qCkBAIC01NDEsMyArNTQ1LDIwIEBACiAJCWRlbF9tYXRjaF9idXNpZCgoY2hhciAqKXVkZXZfYnVzaWQpOwogCX0KIH0KKworLyogCisgKiBQcmVzZW5jZSBvZiBwcmVfcmVzZXQgYW5kIHBvc3RfcmVzZXQgcHJldmVudHMgdGhlIGRyaXZlciBmcm9tIGJlaW5nIHVuYm91bmQKKyAqIHdoZW4gdGhlIGRldmljZSBpcyBiZWluZyByZXNldAorICovCisgCitpbnQgc3R1Yl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlkZXZfZGJnKCZpbnRlcmZhY2UtPmRldiwgInByZV9yZXNldFxuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzdHViX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlkZXZfZGJnKCZpbnRlcmZhY2UtPmRldiwgInBvc3RfcmVzZXRcbiIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKaW5kZXggYTVjMWZhMS4uYmM1Nzg0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0xNzUsMTYgKzE3NSwxOCBAQAogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidXNiX3F1ZXVlX3Jlc2V0X2RldmljZVxuIik7CiAKIAkvKgotCSAqIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQgY2F1c2VkIGEgZGVhZGxvY2s6IGl0IGNhdXNlcyB0aGUgZHJpdmVyCi0JICogdG8gdW5iaW5kLiBJbiB0aGUgc2h1dGRvd24gdGhlIHJ4IHRocmVhZCBpcyBzaWduYWxsZWQgdG8gc2h1dCBkb3duCi0JICogYnV0IHRoaXMgdGhyZWFkIGlzIHBlbmRpbmcgaW4gdGhlIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQuCi0JICoKLQkgKiBJbnN0ZWFkIHF1ZXVlIHRoZSByZXNldC4KLQkgKgotCSAqIFVuZm9ydHVuYXRseSBhbiBleGlzdGluZyB1c2JpcCBjb25uZWN0aW9uIHdpbGwgYmUgZHJvcHBlZCBkdWUgdG8KLQkgKiBkcml2ZXIgdW5iaW5kaW5nLgorCSAqIFdpdGggdGhlIGltcGxlbWVudGF0aW9uIG9mIHByZV9yZXNldCBhbmQgcG9zdF9yZXNldCB0aGUgZHJpdmVyIG5vIAorCSAqIGxvbmdlciB1bmJpbmRzLiBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIHN5bmNocm9ub3VzIHJlc2V0LgogCSAqLwotCXVzYl9xdWV1ZV9yZXNldF9kZXZpY2Uoc2Rldi0+aW50ZXJmYWNlKTsKKworCWlmICh1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHNkZXYtPnVkZXYsIHNkZXYtPmludGVyZmFjZSk8MCkKKwl7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJjb3VsZCBub3Qgb2J0YWluIGxvY2sgdG8gcmVzZXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXVzYl9yZXNldF9kZXZpY2Uoc2Rldi0+dWRldik7CisJdXNiX3VubG9ja19kZXZpY2Uoc2Rldi0+dWRldik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl9nc20uYyBiL2RyaXZlcnMvdHR5L25fZ3NtLmMKaW5kZXggYTRjNDJhNy4uMDllOGM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl9nc20uYworKysgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCkBAIC0yMTI4LDggKzIxMjgsOCBAQAogCWdzbS0+dHR5ID0gTlVMTDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBnc21sZF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIGdzbWxkX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAorCQkJICAgICAgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgZ3NtX211eCAqZ3NtID0gdHR5LT5kaXNjX2RhdGE7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqZHA7CkBAIC0yMTYyLDggKzIxNjIsNiBAQAogCX0KIAkvKiBGQVNZTkMgaWYgbmVlZGVkID8gKi8KIAkvKiBJZiBjbG9nZ2VkIGNhbGwgdHR5X3Rocm90dGxlKHR0eSk7ICovCi0KLQlyZXR1cm4gY291bnQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl9oZGxjLmMgYi9kcml2ZXJzL3R0eS9uX2hkbGMuYwppbmRleCBjYWM2NjYzLi5jZWE1NjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9uX2hkbGMuYworKysgYi9kcml2ZXJzL3R0eS9uX2hkbGMuYwpAQCAtMTg4LDggKzE4OCw4IEBACiAJCQkJICAgIHBvbGxfdGFibGUgKndhaXQpOwogc3RhdGljIGludCBuX2hkbGNfdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBuX2hkbGNfdHR5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotc3RhdGljIHVuc2lnbmVkIGludCBuX2hkbGNfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJY29uc3QgX191OCAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpOworc3RhdGljIHZvaWQgbl9oZGxjX3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IF9fdTggKmNwLAorCQkJICAgICAgIGNoYXIgKmZwLCBpbnQgY291bnQpOwogc3RhdGljIHZvaWQgbl9oZGxjX3R0eV93YWtldXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKICNkZWZpbmUgYnNldChwLGIpCSgocClbKGIpID4+IDVdIHw9ICgxIDw8ICgoYikgJiAweDFmKSkpCkBAIC01MDksOCArNTA5LDggQEAKICAqIENhbGxlZCBieSB0dHkgbG93IGxldmVsIGRyaXZlciB3aGVuIHJlY2VpdmUgZGF0YSBpcyBhdmFpbGFibGUuIERhdGEgaXMKICAqIGludGVycHJldGVkIGFzIG9uZSBIRExDIGZyYW1lLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG5faGRsY190dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQljb25zdCBfX3U4ICpkYXRhLCBjaGFyICpmbGFncywgaW50IGNvdW50KQorc3RhdGljIHZvaWQgbl9oZGxjX3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IF9fdTggKmRhdGEsCisJCQkgICAgICAgY2hhciAqZmxhZ3MsIGludCBjb3VudCkKIHsKIAlyZWdpc3RlciBzdHJ1Y3Qgbl9oZGxjICpuX2hkbGMgPSB0dHkybl9oZGxjICh0dHkpOwogCXJlZ2lzdGVyIHN0cnVjdCBuX2hkbGNfYnVmICpidWY7CkBAIC01MjEsMjAgKzUyMSwyMCBAQAogCQkKIAkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgc3R1ZmYgY29tZXMgaW4gb24gdGhlIGJhY2t1cCB0dHkgKi8KIAlpZiAoIW5faGRsYyB8fCB0dHkgIT0gbl9oZGxjLT50dHkpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm47CiAJCQogCS8qIHZlcmlmeSBsaW5lIGlzIHVzaW5nIEhETEMgZGlzY2lwbGluZSAqLwogCWlmIChuX2hkbGMtPm1hZ2ljICE9IEhETENfTUFHSUMpIHsKIAkJcHJpbnRrKCIlcyglZCkgbGluZSBub3QgdXNpbmcgSERMQyBkaXNjaXBsaW5lXG4iLAogCQkJX19GSUxFX18sX19MSU5FX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuOwogCX0KIAkKIAlpZiAoIGNvdW50Pm1heGZyYW1lICkgewogCQlpZiAoZGVidWdsZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQkKIAkJCXByaW50aygiJXMoJWQpIHJ4IGNvdW50Pm1heGZyYW1lc2l6ZSwgZGF0YSBkaXNjYXJkZWRcbiIsCiAJCQkgICAgICAgX19GSUxFX18sX19MSU5FX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuOwogCX0KIAogCS8qIGdldCBhIGZyZWUgSERMQyBidWZmZXIgKi8JCkBAIC01NTAsNyArNTUwLDcgQEAKIAkJaWYgKGRlYnVnbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykJCiAJCQlwcmludGsoIiVzKCVkKSBubyBtb3JlIHJ4IGJ1ZmZlcnMsIGRhdGEgZGlzY2FyZGVkXG4iLAogCQkJICAgICAgIF9fRklMRV9fLF9fTElORV9fKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybjsKIAl9CiAJCQogCS8qIGNvcHkgcmVjZWl2ZWQgZGF0YSB0byBIRExDIGJ1ZmZlciAqLwpAQCAtNTY1LDggKzU2NSw2IEBACiAJaWYgKG5faGRsYy0+dHR5LT5mYXN5bmMgIT0gTlVMTCkKIAkJa2lsbF9mYXN5bmMgKCZuX2hkbGMtPnR0eS0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAKLQlyZXR1cm4gY291bnQ7Ci0KIH0JLyogZW5kIG9mIG5faGRsY190dHlfcmVjZWl2ZSgpICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl9yMzk2NC5jIGIvZHJpdmVycy90dHkvbl9yMzk2NC5jCmluZGV4IGE0YmMzOWMuLjVjNmMzMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fcjM5NjQuYworKysgYi9kcml2ZXJzL3R0eS9uX3IzOTY0LmMKQEAgLTEzOSw4ICsxMzksOCBAQAogc3RhdGljIHZvaWQgcjM5NjRfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwogc3RhdGljIHVuc2lnbmVkIGludCByMzk2NF9wb2xsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwotc3RhdGljIHVuc2lnbmVkIGludCByMzk2NF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCByMzk2NF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKKwkJY2hhciAqZnAsIGludCBjb3VudCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyB0dHlfbGRpc2NfTl9SMzk2NCA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTEyMzksOCArMTIzOSw4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCByMzk2NF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIHIzOTY0X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAorCQkJY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8gPSB0dHktPmRpc2NfZGF0YTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwOwpAQCAtMTI1Nyw4ICsxMjU3LDYgQEAKIAkJfQogCiAJfQotCi0JcmV0dXJuIGNvdW50OwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX3R0eS5jIGIvZHJpdmVycy90dHkvbl90dHkuYwppbmRleCA5NWQwYTljLi4wYWQzMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9uX3R0eS5jCisrKyBiL2RyaXZlcnMvdHR5L25fdHR5LmMKQEAgLTgxLDYgKzgxLDM4IEBACiAJcmV0dXJuIHB1dF91c2VyKHgsIHB0cik7CiB9CiAKKy8qKgorICoJbl90dHlfc2V0X19yb29tCS0JcmVjZWl2ZSBzcGFjZQorICoJQHR0eTogdGVybWluYWwKKyAqCisgKglDYWxsZWQgYnkgdGhlIGRyaXZlciB0byBmaW5kIG91dCBob3cgbXVjaCBkYXRhIGl0IGlzCisgKglwZXJtaXR0ZWQgdG8gZmVlZCB0byB0aGUgbGluZSBkaXNjaXBsaW5lIHdpdGhvdXQgYW55IGJlaW5nIGxvc3QKKyAqCWFuZCB0aHVzIHRvIG1hbmFnZSBmbG93IGNvbnRyb2wuIE5vdCBzZXJpYWxpemVkLiBBbnN3ZXJzIGZvciB0aGUKKyAqCSJpbnN0YW50Ii4KKyAqLworCitzdGF0aWMgdm9pZCBuX3R0eV9zZXRfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCS8qIHR0eS0+cmVhZF9jbnQgaXMgbm90IHJlYWQgbG9ja2VkID8gKi8KKwlpbnQJbGVmdCA9IE5fVFRZX0JVRl9TSVpFIC0gdHR5LT5yZWFkX2NudCAtIDE7CisJaW50IG9sZF9sZWZ0OworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgaW5wdXQgY2Fub25pY2FsaXphdGlvbiwgYW5kIHRoZXJlIGFyZSBubworCSAqIHBlbmRpbmcgbmV3bGluZXMsIGxldCBjaGFyYWN0ZXJzIHRocm91Z2ggd2l0aG91dCBsaW1pdCwgc28KKwkgKiB0aGF0IGVyYXNlIGNoYXJhY3RlcnMgd2lsbCBiZSBoYW5kbGVkLiAgT3RoZXIgZXhjZXNzCisJICogY2hhcmFjdGVycyB3aWxsIGJlIGJlZXBlZC4KKwkgKi8KKwlpZiAobGVmdCA8PSAwKQorCQlsZWZ0ID0gdHR5LT5pY2Fub24gJiYgIXR0eS0+Y2Fub25fZGF0YTsKKwlvbGRfbGVmdCA9IHR0eS0+cmVjZWl2ZV9yb29tOworCXR0eS0+cmVjZWl2ZV9yb29tID0gbGVmdDsKKworCS8qIERpZCB0aGlzIG9wZW4gdXAgdGhlIHJlY2VpdmUgYnVmZmVyPyBXZSBtYXkgbmVlZCB0byBmbGlwICovCisJaWYgKGxlZnQgJiYgIW9sZF9sZWZ0KQorCQlzY2hlZHVsZV93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKK30KKwogc3RhdGljIHZvaWQgcHV0X3R0eV9xdWV1ZV9ub2xvY2sodW5zaWduZWQgY2hhciBjLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWlmICh0dHktPnJlYWRfY250IDwgTl9UVFlfQlVGX1NJWkUpIHsKQEAgLTE1Miw2ICsxODQsNyBAQAogCiAJdHR5LT5jYW5vbl9oZWFkID0gdHR5LT5jYW5vbl9kYXRhID0gdHR5LT5lcmFzaW5nID0gMDsKIAltZW1zZXQoJnR0eS0+cmVhZF9mbGFncywgMCwgc2l6ZW9mIHR0eS0+cmVhZF9mbGFncyk7CisJbl90dHlfc2V0X3Jvb20odHR5KTsKIAljaGVja191bnRocm90dGxlKHR0eSk7CiB9CiAKQEAgLTEzMjcsMTkgKzEzNjAsMTcgQEAKICAqCWNhbGxzIG9uZSBhdCBhIHRpbWUgYW5kIGluIG9yZGVyIChvciB1c2luZyBmbHVzaF90b19sZGlzYykKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IG5fdHR5X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgbl90dHlfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCisJCQkgICAgICBjaGFyICpmcCwgaW50IGNvdW50KQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CiAJY2hhciAqZiwgZmxhZ3MgPSBUVFlfTk9STUFMOwogCWludAlpOwogCWNoYXIJYnVmWzY0XTsKIAl1bnNpZ25lZCBsb25nIGNwdWZsYWdzOwotCWludCBsZWZ0OwotCWludCByZXQgPSAwOwogCiAJaWYgKCF0dHktPnJlYWRfYnVmKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJaWYgKHR0eS0+cmVhbF9yYXcpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+cmVhZF9sb2NrLCBjcHVmbGFncyk7CkBAIC0xMzQ5LDcgKzEzODAsNiBAQAogCQltZW1jcHkodHR5LT5yZWFkX2J1ZiArIHR0eS0+cmVhZF9oZWFkLCBjcCwgaSk7CiAJCXR0eS0+cmVhZF9oZWFkID0gKHR0eS0+cmVhZF9oZWFkICsgaSkgJiAoTl9UVFlfQlVGX1NJWkUtMSk7CiAJCXR0eS0+cmVhZF9jbnQgKz0gaTsKLQkJcmV0ICs9IGk7CiAJCWNwICs9IGk7CiAJCWNvdW50IC09IGk7CiAKQEAgLTEzNTksMTAgKzEzODksOCBAQAogCQltZW1jcHkodHR5LT5yZWFkX2J1ZiArIHR0eS0+cmVhZF9oZWFkLCBjcCwgaSk7CiAJCXR0eS0+cmVhZF9oZWFkID0gKHR0eS0+cmVhZF9oZWFkICsgaSkgJiAoTl9UVFlfQlVGX1NJWkUtMSk7CiAJCXR0eS0+cmVhZF9jbnQgKz0gaTsKLQkJcmV0ICs9IGk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+cmVhZF9sb2NrLCBjcHVmbGFncyk7CiAJfSBlbHNlIHsKLQkJcmV0ID0gY291bnQ7CiAJCWZvciAoaSA9IGNvdW50LCBwID0gY3AsIGYgPSBmcDsgaTsgaS0tLCBwKyspIHsKIAkJCWlmIChmKQogCQkJCWZsYWdzID0gKmYrKzsKQEAgLTEzOTAsNiArMTQxOCw4IEBACiAJCQl0dHktPm9wcy0+Zmx1c2hfY2hhcnModHR5KTsKIAl9CiAKKwluX3R0eV9zZXRfcm9vbSh0dHkpOworCiAJaWYgKCghdHR5LT5pY2Fub24gJiYgKHR0eS0+cmVhZF9jbnQgPj0gdHR5LT5taW5pbXVtX3RvX3dha2UpKSB8fAogCQlMX0VYVFBST0ModHR5KSkgewogCQlraWxsX2Zhc3luYygmdHR5LT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKQEAgLTE0MDIsMTIgKzE0MzIsOCBAQAogCSAqIG1vZGUuICBXZSBkb24ndCB3YW50IHRvIHRocm90dGxlIHRoZSBkcml2ZXIgaWYgd2UncmUgaW4KIAkgKiBjYW5vbmljYWwgbW9kZSBhbmQgZG9uJ3QgaGF2ZSBhIG5ld2xpbmUgeWV0IQogCSAqLwotCWxlZnQgPSBOX1RUWV9CVUZfU0laRSAtIHR0eS0+cmVhZF9jbnQgLSAxOwotCi0JaWYgKGxlZnQgPCBUVFlfVEhSRVNIT0xEX1RIUk9UVExFKQorCWlmICh0dHktPnJlY2VpdmVfcm9vbSA8IFRUWV9USFJFU0hPTERfVEhST1RUTEUpCiAJCXR0eV90aHJvdHRsZSh0dHkpOwotCi0JcmV0dXJuIHJldDsKIH0KIAogaW50IGlzX2lnbm9yZWQoaW50IHNpZykKQEAgLTE0NTEsNiArMTQ3Nyw3IEBACiAJaWYgKHRlc3RfYml0KFRUWV9IV19DT09LX0lOLCAmdHR5LT5mbGFncykpIHsKIAkJdHR5LT5yYXcgPSAxOwogCQl0dHktPnJlYWxfcmF3ID0gMTsKKwkJbl90dHlfc2V0X3Jvb20odHR5KTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoSV9JU1RSSVAodHR5KSB8fCBJX0lVQ0xDKHR0eSkgfHwgSV9JR05DUih0dHkpIHx8CkBAIC0xNTAzLDYgKzE1MzAsNyBAQAogCQllbHNlCiAJCQl0dHktPnJlYWxfcmF3ID0gMDsKIAl9CisJbl90dHlfc2V0X3Jvb20odHR5KTsKIAkvKiBUaGUgdGVybWlvcyBjaGFuZ2UgbWFrZSB0aGUgdHR5IHJlYWR5IGZvciBJL08gKi8KIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnJlYWRfd2FpdCk7CkBAIC0xNzg0LDYgKzE4MTIsOCBAQAogCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlicmVhazsKIAkJCX0KKwkJCS8qIEZJWE1FOiBkb2VzIG5fdHR5X3NldF9yb29tIG5lZWQgbG9ja2luZyA/ICovCisJCQluX3R0eV9zZXRfcm9vbSh0dHkpOwogCQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTg1NSw4ICsxODg1LDEwIEBACiAJCSAqIGxvbmdlciB0aGFuIFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSBpbiBjYW5vbmljYWwgbW9kZSwKIAkJICogd2Ugd29uJ3QgZ2V0IGFueSBtb3JlIGNoYXJhY3RlcnMuCiAJCSAqLwotCQlpZiAobl90dHlfY2hhcnNfaW5fYnVmZmVyKHR0eSkgPD0gVFRZX1RIUkVTSE9MRF9VTlRIUk9UVExFKQorCQlpZiAobl90dHlfY2hhcnNfaW5fYnVmZmVyKHR0eSkgPD0gVFRZX1RIUkVTSE9MRF9VTlRIUk9UVExFKSB7CisJCQluX3R0eV9zZXRfcm9vbSh0dHkpOwogCQkJY2hlY2tfdW50aHJvdHRsZSh0dHkpOworCQl9CiAKIAkJaWYgKGIgLSBidWYgPj0gbWluaW11bSkKIAkJCWJyZWFrOwpAQCAtMTg3OCw2ICsxOTEwLDcgQEAKIAl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChUVFlfUFVTSCwgJnR0eS0+ZmxhZ3MpKQogCQkgZ290byBkb19pdF9hZ2FpbjsKIAorCW5fdHR5X3NldF9yb29tKHR0eSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jIGIvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jCmluZGV4IDQ2ZGUyZTAuLjZjOWI3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMKQEAgLTQxMywxMCArNDEzLDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpKSB7Ci0JCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkLCAqdGFpbCA9IHR0eS0+YnVmLnRhaWw7Ci0JCWludCBzZWVuX3RhaWwgPSAwOworCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqaGVhZDsKIAkJd2hpbGUgKChoZWFkID0gdHR5LT5idWYuaGVhZCkgIT0gTlVMTCkgewotCQkJaW50IGNvcGllZDsKIAkJCWludCBjb3VudDsKIAkJCWNoYXIgKmNoYXJfYnVmOwogCQkJdW5zaWduZWQgY2hhciAqZmxhZ19idWY7CkBAIC00MjUsMTUgKzQyMyw2IEBACiAJCQlpZiAoIWNvdW50KSB7CiAJCQkJaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkKIAkJCQkJYnJlYWs7Ci0JCQkJLyoKLQkJCQkgIFRoZXJlJ3MgYSBwb3NzaWJpbGl0eSB0dHkgbWlnaHQgZ2V0IG5ldyBidWZmZXIKLQkJCQkgIGFkZGVkIGR1cmluZyB0aGUgdW5sb2NrIHdpbmRvdyBiZWxvdy4gV2UgY291bGQKLQkJCQkgIGVuZCB1cCBzcGlubmluZyBpbiBoZXJlIGZvcmV2ZXIgaG9nZ2luZyB0aGUgQ1BVCi0JCQkJICBjb21wbGV0ZWx5LiBUbyBhdm9pZCB0aGlzIGxldCdzIGhhdmUgYSByZXN0IGVhY2gKLQkJCQkgIHRpbWUgd2UgcHJvY2Vzc2VkIHRoZSB0YWlsIGJ1ZmZlci4KLQkJCQkqLwotCQkJCWlmICh0YWlsID09IGhlYWQpCi0JCQkJCXNlZW5fdGFpbCA9IDE7CiAJCQkJdHR5LT5idWYuaGVhZCA9IGhlYWQtPm5leHQ7CiAJCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgaGVhZCk7CiAJCQkJY29udGludWU7CkBAIC00NDMsMTkgKzQzMiwxNyBAQAogCQkJICAgbGluZSBkaXNjaXBsaW5lIGFzIHdlIHdhbnQgdG8gZW1wdHkgdGhlIHF1ZXVlICovCiAJCQlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKQogCQkJCWJyZWFrOworCQkJaWYgKCF0dHktPnJlY2VpdmVfcm9vbSkKKwkJCQlicmVhazsKKwkJCWlmIChjb3VudCA+IHR0eS0+cmVjZWl2ZV9yb29tKQorCQkJCWNvdW50ID0gdHR5LT5yZWNlaXZlX3Jvb207CiAJCQljaGFyX2J1ZiA9IGhlYWQtPmNoYXJfYnVmX3B0ciArIGhlYWQtPnJlYWQ7CiAJCQlmbGFnX2J1ZiA9IGhlYWQtPmZsYWdfYnVmX3B0ciArIGhlYWQtPnJlYWQ7CisJCQloZWFkLT5yZWFkICs9IGNvdW50OwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCQkJY29waWVkID0gZGlzYy0+b3BzLT5yZWNlaXZlX2J1Zih0dHksIGNoYXJfYnVmLAorCQkJZGlzYy0+b3BzLT5yZWNlaXZlX2J1Zih0dHksIGNoYXJfYnVmLAogCQkJCQkJCWZsYWdfYnVmLCBjb3VudCk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCi0JCQloZWFkLT5yZWFkICs9IGNvcGllZDsKLQotCQkJaWYgKGNvcGllZCA9PSAwIHx8IHNlZW5fdGFpbCkgewotCQkJCXNjaGVkdWxlX3dvcmsoJnR0eS0+YnVmLndvcmspOwotCQkJCWJyZWFrOwotCQkJfQogCQl9CiAJCWNsZWFyX2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYyBiL2RyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jCmluZGV4IDY3YjFkMGQuLmZiODY0ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jCisrKyBiL2RyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jCkBAIC0zMzIsNyArMzMyLDggQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWNvdW50ID0gc2VsX2J1ZmZlcl9sdGggLSBwYXN0ZWQ7Ci0JCWNvdW50ID0gdHR5LT5sZGlzYy0+b3BzLT5yZWNlaXZlX2J1Zih0dHksIHNlbF9idWZmZXIgKyBwYXN0ZWQsCisJCWNvdW50ID0gbWluKGNvdW50LCB0dHktPnJlY2VpdmVfcm9vbSk7CisJCXR0eS0+bGRpc2MtPm9wcy0+cmVjZWl2ZV9idWYodHR5LCBzZWxfYnVmZmVyICsgcGFzdGVkLAogCQkJCQkJCQlOVUxMLCBjb3VudCk7CiAJCXBhc3RlZCArPSBjb3VudDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggMzk1YTM0Ny4uZGFjNzY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMTUzMCw2ICsxNTMwLDggQEAKIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwNGNlKSwgfSwgLyogTm9raWEgRTkwICovCiAJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDFkNCksIH0sIC8qIE5va2lhIEU1NSAqLwogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAzMDIpLCB9LCAvKiBOb2tpYSBOOCAqLworCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAzMzUpLCB9LCAvKiBOb2tpYSBFNyAqLworCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAzY2QpLCB9LCAvKiBOb2tpYSBDNyAqLwogCXsgU0FNU1VOR19QQ1NVSVRFX0FDTV9JTkZPKDB4NjY1MSksIH0sIC8qIFNhbXN1bmcgR1RpODUxMCAoSU5OT1Y4KSAqLwogCiAJLyogTk9URTogbm9uLU5va2lhIENPTU0vQUNNLzB4ZmYgaXMgbGlrZWx5IE1TRlQgUk5ESVMuLi4gTk9UIGEgbW9kZW0hICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA3OWE1OGMzLi45MGFlMTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTMzOSw3ICszMzksOCBAQAogewogCWludCBpLCBzdGF0dXMgPSAtRVRJTUVET1VUOwogCi0JZm9yIChpID0gMDsgaSA8IFVTQl9TVFNfUkVUUklFUyAmJiBzdGF0dXMgPT0gLUVUSU1FRE9VVDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFVTQl9TVFNfUkVUUklFUyAmJgorCQkJKHN0YXR1cyA9PSAtRVRJTUVET1VUIHx8IHN0YXR1cyA9PSAtRVBJUEUpOyBpKyspIHsKIAkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9yY3ZjdHJscGlwZShoZGV2LCAwKSwKIAkJCVVTQl9SRVFfR0VUX1NUQVRVUywgVVNCX0RJUl9JTiB8IFVTQl9SVF9IVUIsIDAsIDAsCiAJCQlkYXRhLCBzaXplb2YoKmRhdGEpLCBVU0JfU1RTX1RJTUVPVVQpOwpAQCAtMzU1LDcgKzM1Niw4IEBACiB7CiAJaW50IGksIHN0YXR1cyA9IC1FVElNRURPVVQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmIHN0YXR1cyA9PSAtRVRJTUVET1VUOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmCisJCQkoc3RhdHVzID09IC1FVElNRURPVVQgfHwgc3RhdHVzID09IC1FUElQRSk7IGkrKykgewogCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAogCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCBVU0JfRElSX0lOIHwgVVNCX1JUX1BPUlQsIDAsIHBvcnQxLAogCQkJZGF0YSwgc2l6ZW9mKCpkYXRhKSwgVVNCX1NUU19USU1FT1VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwppbmRleCAxYjEyNWMyLi4yMjc4ZGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCkBAIC0zODksNyArMzg5LDYgQEAKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAoIWVycm9yKQogCQlkX2RlbGV0ZShkZW50cnkpOwotCWRwdXQoZGVudHJ5KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggNTg0NTZkMS4uMDI5ZTI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTYzMiwxMyArNjMyLDEwIEBACiAKIGVuZGNob2ljZQogCisjIFNlbGVjdGVkIGJ5IFVEQyBkcml2ZXJzIHRoYXQgc3VwcG9ydCBoaWdoLXNwZWVkIG9wZXJhdGlvbi4KIGNvbmZpZyBVU0JfR0FER0VUX0RVQUxTUEVFRAogCWJvb2wKIAlkZXBlbmRzIG9uIFVTQl9HQURHRVQKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBNZWFucyB0aGF0IGdhZGdldCBkcml2ZXJzIHNob3VsZCBpbmNsdWRlIGV4dHJhIGRlc2NyaXB0b3JzCi0JICBhbmQgY29kZSB0byBoYW5kbGUgZHVhbC1zcGVlZCBjb250cm9sbGVycy4KIAogIwogIyBVU0IgR2FkZ2V0IERyaXZlcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCmluZGV4IDZlNDJhYWIuLjk1ZTgxMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYwpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IDQxZGMwOTMuLmY0NjkwZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwppbmRleCA2MWZmOTI3Li5kM2RjYWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCkBAIC0xOTA2LDYgKzE5MDYsNyBAQAogCWlmICghaGNkKQogCQlyZXR1cm4gLUVOT01FTTsKIAl0aGVfY29udHJvbGxlciA9IGhjZF90b19kdW1teSAoaGNkKTsKKwloY2QtPmhhc190dCA9IDE7CiAKIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIDAsIDApOwogCWlmIChyZXR2YWwgIT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCBhMDEzODNmLi5hNTY4NzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtNDMxLDggKzQzMSwxMCBAQAogCiAJLyogaGFsdCBhbnkgZW5kcG9pbnQgYnkgZG9pbmcgYSAid3JvbmcgZGlyZWN0aW9uIiBpL28gY2FsbCAqLwogCWlmICghdXNiX2VuZHBvaW50X2Rpcl9pbigmZGF0YS0+ZGVzYykpIHsKLQkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmRhdGEtPmRlc2MpKQorCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYygmZGF0YS0+ZGVzYykpIHsKKwkJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQlEQkcgKGRhdGEtPmRldiwgIiVzIGhhbHRcbiIsIGRhdGEtPm5hbWUpOwogCQlzcGluX2xvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKIAkJaWYgKGxpa2VseSAoZGF0YS0+ZXAgIT0gTlVMTCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbXZfdWRjX2NvcmUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jCmluZGV4IGI2MmIyNjQuLmIxYTgxNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jCkBAIC0yMDgzLDcgKzIwODMsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG12X3VkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbXZfdWRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqX2RldikKIHsKIAlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKIApAQCAtMjA5Miw3ICsyMDkyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdl91ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IG12X3VkY19yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKIHsKIAlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKIAlpbnQgcmV0dmFsOwpAQCAtMjEwMCw3ICsyMTAwLDcgQEAKIAlyZXR2YWwgPSBtdl91ZGNfcGh5X2luaXQodWRjLT5waHlfcmVncyk7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKF9kZXYsICJwaHkgaW5pdGlhbGl6YXRpb24gZXJyb3IgJWRcbiIsIHJldHZhbCk7Ci0JCWdvdG8gZXJyb3I7CisJCXJldHVybiByZXR2YWw7CiAJfQogCXVkY19yZXNldCh1ZGMpOwogCWVwMF9yZXNldCh1ZGMpOwpAQCAtMjEyMiw3ICsyMTIyLDcgQEAKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gInB4YS11Mm8iLAogI2lmZGVmIENPTkZJR19QTQotCQkucG0JPSBtdl91ZGNfcG1fb3BzLAorCQkucG0JPSAmbXZfdWRjX3BtX29wcywKICNlbmRpZgogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggMjQ2OTZmNy4uNDc2ZDg4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKaW5kZXggMzY1YzAyZi4uNzc0NTQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCkBAIC0yMjE2LDcgKzIyMTYsNiBAQAogCQlpZiAocmV0dmFsICE9IDApIHsKIAkJCXByX2VycigiJXM6IGNhbid0IGdldCBpcnEgJWksIGVyciAlZFxuIiwKIAkJCQlkcml2ZXJfbmFtZSwgTFVCQk9DS19VU0JfRElTQ19JUlEsIHJldHZhbCk7Ci1sdWJib2NrX2ZhaWwwOgogCQkJZ290byBlcnJfaXJxX2x1YjsKIAkJfQogCQlyZXR2YWwgPSByZXF1ZXN0X2lycShMVUJCT0NLX1VTQl9JUlEsCkBAIC0yMjI2LDcgKzIyMjUsNiBAQAogCQlpZiAocmV0dmFsICE9IDApIHsKIAkJCXByX2VycigiJXM6IGNhbid0IGdldCBpcnEgJWksIGVyciAlZFxuIiwKIAkJCQlkcml2ZXJfbmFtZSwgTFVCQk9DS19VU0JfSVJRLCByZXR2YWwpOwotCQkJZnJlZV9pcnEoTFVCQk9DS19VU0JfRElTQ19JUlEsIGRldik7CiAJCQlnb3RvIGx1YmJvY2tfZmFpbDA7CiAJCX0KIAl9IGVsc2UKQEAgLTIyMzYsMTAgKzIyMzQsMTEgQEAKIAlyZXR1cm4gMDsKIAogI2lmZGVmCUNPTkZJR19BUkNIX0xVQkJPQ0sKK2x1YmJvY2tfZmFpbDA6CiAJZnJlZV9pcnEoTFVCQk9DS19VU0JfRElTQ19JUlEsIGRldik7CiAgZXJyX2lycV9sdWI6Ci0jZW5kaWYKIAlmcmVlX2lycShpcnEsIGRldik7CisjZW5kaWYKICBlcnJfaXJxMToKIAlpZiAoZ3Bpb19pc192YWxpZChkZXYtPm1hY2gtPmdwaW9fcHVsbHVwKSkKIAkJZ3Bpb19mcmVlKGRldi0+bWFjaC0+Z3Bpb19wdWxsdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCmluZGV4IGFjYjljYzQuLjBkZmVlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKQEAgLTI2ODAsOSArMjY4MCw5IEBACiAKIAl3cml0ZWwoMCwgaHNvdGctPnJlZ3MgKyBTM0NfREFJTlRNU0spOwogCi0JZGV2X2luZm8oaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ESUVQQ1RMMCksCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQQ1RMMCkpOworCWRldl9kYmcoaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCisJCXJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RJRVBDVEwwKSwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRE9FUENUTDApKTsKIAogCS8qIGVuYWJsZSBpbiBhbmQgb3V0IGVuZHBvaW50IGludGVycnVwdHMgKi8KIAlzM2NfaHNvdGdfZW5fZ3NpbnQoaHNvdGcsIFMzQ19HSU5UU1RTX09FUEludCB8IFMzQ19HSU5UU1RTX0lFUEludCk7CkBAIC0yNzAxLDcgKzI3MDEsNyBAQAogCXVkZWxheSgxMCk7ICAvKiBzZWUgb3Blbmlib290ICovCiAJX19iaWMzMihoc290Zy0+cmVncyArIFMzQ19EQ1RMLCBTM0NfRENUTF9QV1JPblByZ0RvbmUpOwogCi0JZGV2X2luZm8oaHNvdGctPmRldiwgIkRDVEw9MHglMDh4XG4iLCByZWFkbChoc290Zy0+cmVncyArIFMzQ19EQ1RMKSk7CisJZGV2X2RiZyhoc290Zy0+ZGV2LCAiRENUTD0weCUwOHhcbiIsIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RDVEwpKTsKIAogCS8qIFMzQ19EeEVQQ1RMX1VTQkFjdEVwIHNheXMgUk8gaW4gbWFudWFsLCBidXQgc2VlbXMgdG8gYmUgc2V0IGJ5CiAJICAgd3JpdGluZyB0byB0aGUgRVBDVEwgcmVnaXN0ZXIuLiAqLwpAQCAtMjcyMSw5ICsyNzIxLDkgQEAKIAogCXMzY19oc290Z19lbnF1ZXVlX3NldHVwKGhzb3RnKTsKIAotCWRldl9pbmZvKGhzb3RnLT5kZXYsICJFUDA6IERJRVBDVEwwPTB4JTA4eCwgRE9FUENUTDA9MHglMDh4XG4iLAotCQkgcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRElFUENUTDApLAotCQkgcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRE9FUENUTDApKTsKKwlkZXZfZGJnKGhzb3RnLT5kZXYsICJFUDA6IERJRVBDVEwwPTB4JTA4eCwgRE9FUENUTDA9MHglMDh4XG4iLAorCQlyZWFkbChoc290Zy0+cmVncyArIFMzQ19ESUVQQ1RMMCksCisJCXJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RPRVBDVEwwKSk7CiAKIAkvKiBjbGVhciBnbG9iYWwgTkFLcyAqLwogCXdyaXRlbChTM0NfRENUTF9DR09VVE5hayB8IFMzQ19EQ1RMX0NHTlBJbk5BSywKQEAgLTI5MjEsOSArMjkyMSw5IEBACiAKIAkvKiBzZXR1cCBmaWZvcyAqLwogCi0JZGV2X2luZm8oaHNvdGctPmRldiwgIkdSWEZTSVo9MHglMDh4LCBHTlBUWEZTSVo9MHglMDh4XG4iLAotCQkgcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfR1JYRlNJWiksCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19HTlBUWEZTSVopKTsKKwlkZXZfZGJnKGhzb3RnLT5kZXYsICJHUlhGU0laPTB4JTA4eCwgR05QVFhGU0laPTB4JTA4eFxuIiwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfR1JYRlNJWiksCisJCXJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0dOUFRYRlNJWikpOwogCiAJczNjX2hzb3RnX2luaXRfZmlmbyhoc290Zyk7CiAKQEAgLTI5NDUsNiArMjk0NSw3IEBACiAKIHN0YXRpYyB2b2lkIHMzY19oc290Z19kdW1wKHN0cnVjdCBzM2NfaHNvdGcgKmhzb3RnKQogeworI2lmZGVmIERFQlVHCiAJc3RydWN0IGRldmljZSAqZGV2ID0gaHNvdGctPmRldjsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBoc290Zy0+cmVnczsKIAl1MzIgdmFsOwpAQCAtMjk4Nyw2ICsyOTg4LDcgQEAKIAogCWRldl9pbmZvKGRldiwgIkRWQlVTRElTPTB4JTA4eCwgRFZCVVNQVUxTRT0lMDh4XG4iLAogCQkgcmVhZGwocmVncyArIFMzQ19EVkJVU0RJUyksIHJlYWRsKHJlZ3MgKyBTM0NfRFZCVVNQVUxTRSkpOworI2VuZGlmCiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jCmluZGV4IGNmZTNjZjUuLmQ1ZTNlMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHN1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtczNjMjQ0My1jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvdWRjLmg+CkBAIC0xMzAxLDcgKzEzMDIsOCBAQAogCWhzdWRjLT51Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiLWRldmljZSIpOwogCWlmIChJU19FUlIoaHN1ZGMtPnVjbGspKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgdXNiLWRldmljZSBjbG9jayBzb3VyY2VcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihoc3VkYy0+dWNsayk7CisJCXJldCA9IFBUUl9FUlIoaHN1ZGMtPnVjbGspOworCQlnb3RvIGVycl9jbGs7CiAJfQogCWNsa19lbmFibGUoaHN1ZGMtPnVjbGspOwogCkBAIC0xMzEwLDcgKzEzMTIsOCBAQAogCWRpc2FibGVfaXJxKGhzdWRjLT5pcnEpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAlyZXR1cm4gMDsKLQorZXJyX2NsazoKKwlmcmVlX2lycShoc3VkYy0+aXJxLCBoc3VkYyk7CiBlcnJfaXJxOgogCWlvdW5tYXAoaHN1ZGMtPnJlZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCmluZGV4IDZkOGIwNDAuLjEwMGYyNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBhZmVmN2IwLi44MGJlNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0zMTIsOCArMzEyLDEwIEBACiAJCXJldHVybiBQVFJfRVJSKHVzYl9jbGspOwogCiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKGRyaXZlciwgJnBkZXYtPmRldiwgInB4YTI3eCIpOwotCWlmICghaGNkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjA7CisJfQogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyKSB7CkBAIC0zNjgsNiArMzcwLDcgQEAKIAlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKICBlcnIxOgogCXVzYl9wdXRfaGNkKGhjZCk7CisgZXJyMDoKIAljbGtfcHV0KHVzYl9jbGspOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKaW5kZXggMmUwNDg2MS4uMWY1MGI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwpAQCAtNDM4LDEzICs0MzgsMTMgQEAKIAlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCBjdHgpOwogCiAJc3dpdGNoIChHRVRfU0xPVF9TVEFURShsZTMyX3RvX2NwdShzbG90X2N0eC0+ZGV2X3N0YXRlKSkpIHsKLQljYXNlIDA6CisJY2FzZSBTTE9UX1NUQVRFX0VOQUJMRUQ6CiAJCXJldHVybiAiZW5hYmxlZC9kaXNhYmxlZCI7Ci0JY2FzZSAxOgorCWNhc2UgU0xPVF9TVEFURV9ERUZBVUxUOgogCQlyZXR1cm4gImRlZmF1bHQiOwotCWNhc2UgMjoKKwljYXNlIFNMT1RfU1RBVEVfQUREUkVTU0VEOgogCQlyZXR1cm4gImFkZHJlc3NlZCI7Ci0JY2FzZSAzOgorCWNhc2UgU0xPVF9TVEFURV9DT05GSUdVUkVEOgogCQlyZXR1cm4gImNvbmZpZ3VyZWQiOwogCWRlZmF1bHQ6CiAJCXJldHVybiAicmVzZXJ2ZWQiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCmluZGV4IDI2Y2FiYTQuLjBmOGUxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKQEAgLTk4NSw5ICs5ODUsMTkgQEAKIAlpbnRlcnZhbCA9IGNsYW1wX3ZhbChlcC0+ZGVzYy5iSW50ZXJ2YWwsIDEsIDE2KSAtIDE7CiAJaWYgKGludGVydmFsICE9IGVwLT5kZXNjLmJJbnRlcnZhbCAtIDEpCiAJCWRldl93YXJuKCZ1ZGV2LT5kZXYsCi0JCQkgImVwICUjeCAtIHJvdW5kaW5nIGludGVydmFsIHRvICVkIG1pY3JvZnJhbWVzXG4iLAorCQkJICJlcCAlI3ggLSByb3VuZGluZyBpbnRlcnZhbCB0byAlZCAlc2ZyYW1lc1xuIiwKIAkJCSBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAotCQkJIDEgPDwgaW50ZXJ2YWwpOworCQkJIDEgPDwgaW50ZXJ2YWwsCisJCQkgdWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwgPyAiIiA6ICJtaWNybyIpOworCisJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSB7CisJCS8qCisJCSAqIEZ1bGwgc3BlZWQgaXNvYyBlbmRwb2ludHMgc3BlY2lmeSBpbnRlcnZhbCBpbiBmcmFtZXMsCisJCSAqIG5vdCBtaWNyb2ZyYW1lcy4gV2UgYXJlIHVzaW5nIG1pY3JvZnJhbWVzIGV2ZXJ5d2hlcmUsCisJCSAqIHNvIGFkanVzdCBhY2NvcmRpbmdseS4KKwkJICovCisJCWludGVydmFsICs9IDM7CS8qIDEgZnJhbWUgPSAyXjMgdWZyYW1lcyAqLworCX0KIAogCXJldHVybiBpbnRlcnZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwppbmRleCBjNDA4ZTlmLi4xNzU0MWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCkBAIC0xMDYsMTIgKzEwNiwyMiBAQAogCiAJLyogTG9vayBmb3IgdmVuZG9yLXNwZWNpZmljIHF1aXJrcyAqLwogCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9GUkVTQ09fTE9HSUMgJiYKLQkJCXBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0ZSRVNDT19MT0dJQ19QREsgJiYKLQkJCXBkZXYtPnJldmlzaW9uID09IDB4MCkgeworCQkJcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRlJFU0NPX0xPR0lDX1BESykgeworCQlpZiAocGRldi0+cmV2aXNpb24gPT0gMHgwKSB7CiAJCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9SRVNFVF9FUF9RVUlSSzsKIAkJCXhoY2lfZGJnKHhoY2ksICJRVUlSSzogRnJlc2NvIExvZ2ljIHhIQyBuZWVkcyBjb25maWd1cmUiCiAJCQkJCSIgZW5kcG9pbnQgY21kIGFmdGVyIHJlc2V0IGVuZHBvaW50XG4iKTsKKwkJfQorCQkvKiBGcmVzY28gTG9naWMgY29uZmlybXM6IGFsbCByZXZpc2lvbnMgb2YgdGhpcyBjaGlwIGRvIG5vdAorCQkgKiBzdXBwb3J0IE1TSSwgZXZlbiB0aG91Z2ggc29tZSBvZiB0aGVtIGNsYWltIHRvIGluIHRoZWlyIFBDSQorCQkgKiBjYXBhYmlsaXRpZXMuCisJCSAqLworCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9CUk9LRU5fTVNJOworCQl4aGNpX2RiZyh4aGNpLCAiUVVJUks6IEZyZXNjbyBMb2dpYyByZXZpc2lvbiAldSAiCisJCQkJImhhcyBicm9rZW4gTVNJIGltcGxlbWVudGF0aW9uXG4iLAorCQkJCXBkZXYtPnJldmlzaW9uKTsKIAl9CisKIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTkVDKQogCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9ORUNfSE9TVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggY2MxNDg1Yi4uODAwZjQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC0xNzgyLDcgKzE3ODIsNyBAQAogCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmcmFtZTsKIAlpbnQgaWR4OwogCi0JZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGV2ZW50LT5idWZmZXIpOworCWVwX3JpbmcgPSB4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKGVwLCBsZTY0X3RvX2NwdShldmVudC0+YnVmZmVyKSk7CiAJdXJiX3ByaXYgPSB0ZC0+dXJiLT5oY3ByaXY7CiAJaWR4ID0gdXJiX3ByaXYtPnRkX2NudDsKIAlmcmFtZSA9ICZ0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCBkOTY2MGViLi4wNmU3MDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtNDMwLDEyICs0MzAsMTkgQEAKIAkJZnJlZV9pcnEoaGNkLT5pcnEsIGhjZCk7CiAJaGNkLT5pcnEgPSAtMTsKIAorCS8qIFNvbWUgRnJlc2NvIExvZ2ljIGhvc3QgY29udHJvbGxlcnMgYWR2ZXJ0aXNlIE1TSSwgYnV0IGZhaWwgdG8KKwkgKiBnZW5lcmF0ZSBpbnRlcnJ1cHRzLiAgRG9uJ3QgZXZlbiB0cnkgdG8gZW5hYmxlIE1TSS4KKwkgKi8KKwlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9CUk9LRU5fTVNJKQorCQlnb3RvIGxlZ2FjeV9pcnE7CisKIAlyZXQgPSB4aGNpX3NldHVwX21zaXgoeGhjaSk7CiAJaWYgKHJldCkKIAkJLyogZmFsbCBiYWNrIHRvIG1zaSovCiAJCXJldCA9IHhoY2lfc2V0dXBfbXNpKHhoY2kpOwogCiAJaWYgKHJldCkgeworbGVnYWN5X2lycToKIAkJLyogZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHQqLwogCQlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZ1c2JfaGNkX2lycSwgSVJRRl9TSEFSRUQsCiAJCQkJCWhjZC0+aXJxX2Rlc2NyLCBoY2QpOwpAQCAtMTg0OSw4ICsxODU2LDggQEAKIAogCS8qIEZyZWUgYW55IHJpbmdzIHRoYXQgd2VyZSBkcm9wcGVkLCBidXQgbm90IGNoYW5nZWQuICovCiAJZm9yIChpID0gMTsgaSA8IDMxOyArK2kpIHsKLQkJaWYgKChjdHJsX2N0eC0+ZHJvcF9mbGFncyAmICgxIDw8IChpICsgMSkpKSAmJgotCQkJCSEoY3RybF9jdHgtPmFkZF9mbGFncyAmICgxIDw8IChpICsgMSkpKSkKKwkJaWYgKChsZTMyX3RvX2NwdShjdHJsX2N0eC0+ZHJvcF9mbGFncykgJiAoMSA8PCAoaSArIDEpKSkgJiYKKwkJICAgICEobGUzMl90b19jcHUoY3RybF9jdHgtPmFkZF9mbGFncykgJiAoMSA8PCAoaSArIDEpKSkpCiAJCQl4aGNpX2ZyZWVfb3JfY2FjaGVfZW5kcG9pbnRfcmluZyh4aGNpLCB2aXJ0X2RldiwgaSk7CiAJfQogCXhoY2lfemVyb19pbl9jdHgoeGhjaSwgdmlydF9kZXYpOwpAQCAtMjQ2Nyw2ICsyNDc0LDcgQEAKIAlzdHJ1Y3QgeGhjaV9jb21tYW5kICpyZXNldF9kZXZpY2VfY21kOwogCWludCB0aW1lbGVmdDsKIAlpbnQgbGFzdF9mcmVlZF9lbmRwb2ludDsKKwlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqc2xvdF9jdHg7CiAKIAlyZXQgPSB4aGNpX2NoZWNrX2FyZ3MoaGNkLCB1ZGV2LCBOVUxMLCAwLCBmYWxzZSwgX19mdW5jX18pOwogCWlmIChyZXQgPD0gMCkKQEAgLTI0OTksNiArMjUwNywxMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogSWYgZGV2aWNlIGlzIG5vdCBzZXR1cCwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcmVzZXR0aW5nIGl0ICovCisJc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCB2aXJ0X2Rldi0+b3V0X2N0eCk7CisJaWYgKEdFVF9TTE9UX1NUQVRFKGxlMzJfdG9fY3B1KHNsb3RfY3R4LT5kZXZfc3RhdGUpKSA9PQorCQkJCQkJU0xPVF9TVEFURV9ESVNBQkxFRCkKKwkJcmV0dXJuIDA7CisKIAl4aGNpX2RiZyh4aGNpLCAiUmVzZXR0aW5nIGRldmljZSB3aXRoIHNsb3QgSUQgJXVcbiIsIHNsb3RfaWQpOwogCS8qIEFsbG9jYXRlIHRoZSBjb21tYW5kIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBzdHJ1Y3QgY29tcGxldGlvbi4KIAkgKiBBc3N1bWUgd2UncmUgaW4gcHJvY2VzcyBjb250ZXh0LCBzaW5jZSB0aGUgbm9ybWFsIGRldmljZSByZXNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCBhYzAxOTZlLi43ZDFlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtNTYwLDYgKzU2MCwxMSBAQAogI2RlZmluZSBTTE9UX1NUQVRFCSgweDFmIDw8IDI3KQogI2RlZmluZSBHRVRfU0xPVF9TVEFURShwKQkoKChwKSAmICgweDFmIDw8IDI3KSkgPj4gMjcpCiAKKyNkZWZpbmUgU0xPVF9TVEFURV9ESVNBQkxFRAkwCisjZGVmaW5lIFNMT1RfU1RBVEVfRU5BQkxFRAlTTE9UX1NUQVRFX0RJU0FCTEVECisjZGVmaW5lIFNMT1RfU1RBVEVfREVGQVVMVAkxCisjZGVmaW5lIFNMT1RfU1RBVEVfQUREUkVTU0VECTIKKyNkZWZpbmUgU0xPVF9TVEFURV9DT05GSUdVUkVECTMKIAogLyoqCiAgKiBzdHJ1Y3QgeGhjaV9lcF9jdHgKQEAgLTEzMDIsNiArMTMwNyw3IEBACiAgKiBjb21tYW5kcy4KICAqLwogI2RlZmluZSBYSENJX0VQX0xJTUlUX1FVSVJLCSgxIDw8IDUpCisjZGVmaW5lIFhIQ0lfQlJPS0VOX01TSQkJKDEgPDwgNikKIAl1bnNpZ25lZCBpbnQJCW51bV9hY3RpdmVfZXBzOwogCXVuc2lnbmVkIGludAkJbGltaXRfYWN0aXZlX2VwczsKIAkvKiBUaGVyZSBhcmUgdHdvIHJvb3RodWJzIHRvIGtlZXAgdHJhY2sgb2YgYnVzIHN1c3BlbmQgaW5mbyBmb3IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IGFiOGUxMDAuLmM3MWIwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2RfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYwppbmRleCAyMDZjZmFiLi41NDc0ODZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYwpAQCAtMTM4MCw1ICsxMzgwLDYgQEAKIHsKIAlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ19wcml2X3RvX2dwcml2KHByaXYpOwogCisJa2ZyZWUoZ3ByaXYtPnVlcCk7CiAJa2ZyZWUoZ3ByaXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBlOGRiZGU1Li4xNjI3Mjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNjQ3LDYgKzY0Nyw3IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBFVkVSX0VDT19QUk9fQ0RTKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzROX0dBTEFYWV9ERV8yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzFfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzJfUElEKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCmluZGV4IDFkOTQ2Y2QuLmFiMWZjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTM1MSw2ICszNTEsNyBAQAogICovCiAjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAogI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKKyNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfM19QSUQJMHhGM0MyCiAKIC8qCiAgKiBMaW54IFRlY2hub2xvZ2llcyBwcm9kdWN0IGlkcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDMxOGRkMDAuLjYwYjI1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTMxMSwxMCArMzExLDYgQEAKICNkZWZpbmUgWlRFX1BST0RVQ1RfQUMyNzI2CQkJMHhmZmY1CiAjZGVmaW5lIFpURV9QUk9EVUNUX0FDODcxMFQJCQkweGZmZmYKIAotLyogWlRFIFBST0RVQ1RTIC0tIGFsdGVybmF0ZSB2ZW5kb3IgSUQgKi8KLSNkZWZpbmUgWlRFX1ZFTkRPUl9JRDIJCQkJMHgxZDZiCi0jZGVmaW5lIFpURV9QUk9EVUNUX01GXzMzMAkJCTB4MDAwMgotCiAjZGVmaW5lIEJFTlFfVkVORE9SX0lECQkJCTB4MDRhNQogI2RlZmluZSBCRU5RX1BST0RVQ1RfSDEwCQkJMHg0MDY4CiAKQEAgLTM0MCwxMSArMzM2LDEyIEBACiAjZGVmaW5lIFRPU0hJQkFfUFJPRFVDVF9HNDUwCQkJMHgwZDQ1CiAKICNkZWZpbmUgQUxJTktfVkVORE9SX0lECQkJCTB4MWUwZQorI2RlZmluZSBBTElOS19QUk9EVUNUX1BIMzAwCQkJMHg5MTAwCiAjZGVmaW5lIEFMSU5LX1BST0RVQ1RfM0dVCQkJMHg5MjAwCiAKIC8qIEFMQ0FURUwgUFJPRFVDVFMgKi8KICNkZWZpbmUgQUxDQVRFTF9WRU5ET1JfSUQJCQkweDFiYmIKLSNkZWZpbmUgQUxDQVRFTF9QUk9EVUNUX1gwNjBTCQkJMHgwMDAwCisjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9YMDYwU19YMjAwCQkweDAwMDAKIAogI2RlZmluZSBQSVJFTExJX1ZFTkRPUl9JRAkJCTB4MTI2NgogI2RlZmluZSBQSVJFTExJX1BST0RVQ1RfQzEwMF8xCQkJMHgxMDAyCkBAIC0zNzksNiArMzc2LDkgQEAKICAqIEl0IHNlZW1zIHRvIGNvbnRhaW4gYSBRdWFsY29tbSBRU0M2MjQwLzYyOTAgY2hpcHNldCAgICAgICAgICAgICovCiAjZGVmaW5lIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0CQkweDk2MDMKIAorLyogWm9vbSAqLworI2RlZmluZSBaT09NX1BST0RVQ1RfNDU5NwkJCTB4OTYwNworCiAvKiBIYWllciBwcm9kdWN0cyAqLwogI2RlZmluZSBIQUlFUl9WRU5ET1JfSUQJCQkJMHgyMDFlCiAjZGVmaW5lIEhBSUVSX1BST0RVQ1RfQ0UxMDAJCQkweDIwMDkKQEAgLTQzMiw2ICs0MzIsMjAgQEAKIAkucmVhc29uID0gT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVAKIH07CiAKK3N0YXRpYyBjb25zdCB1OCBhbGNhdGVsX3gyMDBfbm9fc2VuZHNldHVwW10gPSB7IDAsIDEgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvIGFsY2F0ZWxfeDIwMF9ibGFja2xpc3QgPSB7CisJLmluZm9sZW4gPSBBUlJBWV9TSVpFKGFsY2F0ZWxfeDIwMF9ub19zZW5kc2V0dXApLAorCS5pZmFjZWluZm8gPSBhbGNhdGVsX3gyMDBfbm9fc2VuZHNldHVwLAorCS5yZWFzb24gPSBPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUAorfTsKKworc3RhdGljIGNvbnN0IHU4IHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cFtdID0geyAwLCAxLCAyIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbl9ibGFja2xpc3RfaW5mbyB6dGVfazM3NjVfel9ibGFja2xpc3QgPSB7CisJLmluZm9sZW4gPSBBUlJBWV9TSVpFKHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cCksCisJLmlmYWNlaW5mbyA9IHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cCwKKwkucmVhc29uID0gT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVAKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1JJQ09MQSkgfSwKQEAgLTkxNiwxMyArOTMwLDEzIEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAwNzMsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAxMzAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAxNDEsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCi0JeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDIwMDIsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDIwMDIsIDB4ZmYsCisJICAweGZmLCAweGZmKSwgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZ6dGVfazM3NjVfel9ibGFja2xpc3QgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MjAwMywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0NETUFfVEVDSCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDODcxMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDMjcyNiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDODcxMFQsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCi0JeyBVU0JfREVWSUNFKFpURV9WRU5ET1JfSUQyLCBaVEVfUFJPRFVDVF9NRl8zMzApIH0sCiAJeyBVU0JfREVWSUNFKEJFTlFfVkVORE9SX0lELCBCRU5RX1BST0RVQ1RfSDEwKSB9LAogCXsgVVNCX0RFVklDRShETElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1MikgfSwKIAl7IFVTQl9ERVZJQ0UoQUxJTktfVkVORE9SX0lELCBETElOS19QUk9EVUNUX0RXTV82NTJfVTUpIH0sIC8qIFllcywgQUxJTktfVkVORE9SX0lEICovCkBAIC05MzUsMTMgKzk0OSwxNyBAQAogCXsgVVNCX0RFVklDRShUT1NISUJBX1ZFTkRPUl9JRCwgVE9TSElCQV9QUk9EVUNUX0c0NTApIH0sCiAJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfSFNEUEFfTUlOSUNBUkQgKSB9LCAvKiBUb3NoaWJhIDNHIEhTRFBBID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NzBEIE1pbmlDYXJkICovCiAJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgMHg5MDAwKSB9LAorCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIEFMSU5LX1BST0RVQ1RfUEgzMDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhBTElOS19WRU5ET1JfSUQsIEFMSU5LX1BST0RVQ1RfM0dVLCAweGZmLCAweGZmLCAweGZmKSB9LAotCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTKSB9LAorCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTX1gyMDApLAorCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZhbGNhdGVsX3gyMDBfYmxhY2tsaXN0CisJfSwKIAl7IFVTQl9ERVZJQ0UoQUlSUExVU19WRU5ET1JfSUQsIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTApIH0sCiAJeyBVU0JfREVWSUNFKFRMQVlURUNIX1ZFTkRPUl9JRCwgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDApIH0sCiAJeyBVU0JfREVWSUNFKExPTkdDSEVFUl9WRU5ET1JfSUQsIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0KSwKICAgCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmb3VyX2dfdzE0X2JsYWNrbGlzdAogICAJfSwKKwl7IFVTQl9ERVZJQ0UoTE9OR0NIRUVSX1ZFTkRPUl9JRCwgWk9PTV9QUk9EVUNUXzQ1OTcpIH0sCiAJeyBVU0JfREVWSUNFKEhBSUVSX1ZFTkRPUl9JRCwgSEFJRVJfUFJPRFVDVF9DRTEwMCkgfSwKIAkvKiBQaXJlbGxpICAqLwogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUX0MxMDBfMSl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggMDA0MTg5OS4uZThhZTIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC04MTksNiArODE5LDM1IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFNvbWUgZGV2aWNlcyBkb24ndCB3b3JrIG9yIHJldHVybiBpbmNvcnJlY3QgZGF0YSB0aGUgZmlyc3QKKwkgKiB0aW1lIHRoZXkgZ2V0IGEgUkVBRCgxMCkgY29tbWFuZCwgb3IgZm9yIHRoZSBmaXJzdCBSRUFEKDEwKQorCSAqIGFmdGVyIGEgbWVkaWEgY2hhbmdlLiAgSWYgdGhlIElOSVRJQUxfUkVBRDEwIGZsYWcgaXMgc2V0LAorCSAqIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBSRUFEKDEwKSBjb21tYW5kcyBzdWNjZWVkLiAgSWYgdGhlCisJICogcHJldmlvdXMgb25lIHN1Y2NlZWRlZCBhbmQgdGhpcyBvbmUgZmFpbGVkLCBzZXQgdGhlIFJFRE9fUkVBRDEwCisJICogZmxhZyB0byBmb3JjZSBhIHJldHJ5LgorCSAqLworCWlmICh1bmxpa2VseSgodXMtPmZmbGFncyAmIFVTX0ZMX0lOSVRJQUxfUkVBRDEwKSAmJgorCQkJc3JiLT5jbW5kWzBdID09IFJFQURfMTApKSB7CisJCWlmIChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EKSB7CisJCQlzZXRfYml0KFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQsICZ1cy0+ZGZsYWdzKTsKKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChVU19GTElEWF9SRUFEMTBfV09SS0VELCAmdXMtPmRmbGFncykpIHsKKwkJCWNsZWFyX2JpdChVU19GTElEWF9SRUFEMTBfV09SS0VELCAmdXMtPmRmbGFncyk7CisJCQlzZXRfYml0KFVTX0ZMSURYX1JFRE9fUkVBRDEwLCAmdXMtPmRmbGFncyk7CisJCX0KKworCQkvKgorCQkgKiBOZXh0LCBpZiB0aGUgUkVET19SRUFEMTAgZmxhZyBpcyBzZXQsIHJldHVybiBhIHJlc3VsdAorCQkgKiBjb2RlIHRoYXQgd2lsbCBjYXVzZSB0aGUgU0NTSSBjb3JlIHRvIHJldHJ5IHRoZSBSRUFEKDEwKQorCQkgKiBjb21tYW5kIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1JFRE9fUkVBRDEwLCAmdXMtPmRmbGFncykpIHsKKwkJCWNsZWFyX2JpdChVU19GTElEWF9SRURPX1JFQUQxMCwgJnVzLT5kZmxhZ3MpOworCQkJc3JiLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OworCQkJc3JiLT5zZW5zZV9idWZmZXJbMF0gPSAwOworCQl9CisJfQorCiAJLyogRGlkIHdlIHRyYW5zZmVyIGxlc3MgdGhhbiB0aGUgbWluaW11bSBhbW91bnQgcmVxdWlyZWQ/ICovCiAJaWYgKChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EIHx8IHNyYi0+c2Vuc2VfYnVmZmVyWzJdID09IDApICYmCiAJCQlzY3NpX2J1ZmZsZW4oc3JiKSAtIHNjc2lfZ2V0X3Jlc2lkKHNyYikgPCBzcmItPnVuZGVyZmxvdykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGMxNjAyYjguLmNjZmYzNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTExNCw2ICsxMTE0LDE2IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCisvKiBSZXBvcnRlZCBieSBQYXVsIEhhcnRtYW4gPHBhdWwuaGFydG1hbitsaW51eEBnbWFpbC5jb20+CisgKiBUaGlzIGNhcmQgcmVhZGVyIHJldHVybnMgIklsbGVnYWwgUmVxdWVzdCwgTG9naWNhbCBCbG9jayBBZGRyZXNzCisgKiBPdXQgb2YgUmFuZ2UiIGZvciB0aGUgZmlyc3QgUkVBRCgxMCkgYWZ0ZXIgYSBuZXcgY2FyZCBpcyBpbnNlcnRlZC4KKyAqLworVU5VU1VBTF9ERVYoICAweDA5MGMsIDB4NjAwMCwgMHgwMTAwLCAweDAxMDAsCisJCSJGZWl5YSIsCisJCSJTRC9TREhDIENhcmQgUmVhZGVyIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSU5JVElBTF9SRUFEMTAgKSwKKwogLyogVGhpcyBQZW50YXggc3RpbGwgY2FtZXJhIGlzIG5vdCBjb25mb3JtYW50CiAgKiB0byB0aGUgVVNCIHN0b3JhZ2Ugc3BlY2lmaWNhdGlvbjogLQogICogLSBJdCBkb2VzIG5vdCBsaWtlIHRoZSBJTlFVSVJZIGNvbW1hbmQuIFNvIHdlIG11c3QgaGFuZGxlIHRoaXMgY29tbWFuZApAQCAtMTg4OCw2ICsxODk4LDE1IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PX1JFQURfRElTQ19JTkZPICksCiAKKy8qIFJlcG9ydGVkIGJ5IFN2ZW4gR2VnZ3VzIDxzdmVuLXVzYnN0QGdlZ2d1cy5uZXQ+CisgKiBUaGlzIGVuY3J5cHRlZCBwZW4gZHJpdmUgcmV0dXJucyBib2d1cyBkYXRhIGZvciB0aGUgaW5pdGlhbCBSRUFEKDEwKS4KKyAqLworVU5VU1VBTF9ERVYoICAweDFiMWMsIDB4MWFiNSwgMHgwMjAwLCAweDAyMDAsCisJCSJDb3JzYWlyIiwKKwkJIlBhZGxvY2sgdjIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JTklUSUFMX1JFQUQxMCApLAorCiAvKiBQYXRjaCBieSBSaWNoYXJkIFNjaPx0eiA8ci5zY2h0ekB0LW9ubGluZS5kZT4KICAqIFRoaXMgZXh0ZXJuYWwgaGFyZCBkcml2ZSBlbmNsb3N1cmUgdXNlcyBhIEpNaWNyb24gY2hpcCB3aGljaAogICogbmVlZHMgdGhlIFVTX0ZMX0lHTk9SRV9SRVNJRFVFIGZsYWcgdG8gd29yayBwcm9wZXJseS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDVlZTdhYzQuLjBjYTA5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtNDQwLDcgKzQ0MCw4IEBACiAJCQlVU19GTF9OT1RfTE9DS0FCTEUgfCBVU19GTF9NQVhfU0VDVE9SU182NCB8CiAJCQlVU19GTF9DQVBBQ0lUWV9PSyB8IFVTX0ZMX0lHTk9SRV9SRVNJRFVFIHwKIAkJCVVTX0ZMX1NJTkdMRV9MVU4gfCBVU19GTF9OT19XUF9ERVRFQ1QgfAotCQkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gfCBVU19GTF9OT19SRUFEX0NBUEFDSVRZXzE2KTsKKwkJCVVTX0ZMX05PX1JFQURfRElTQ19JTkZPIHwgVVNfRkxfTk9fUkVBRF9DQVBBQ0lUWV8xNiB8CisJCQlVU19GTF9JTklUSUFMX1JFQUQxMCk7CiAKIAlwID0gcXVpcmtzOwogCXdoaWxlICgqcCkgewpAQCAtNDkwLDYgKzQ5MSw5IEBACiAJCWNhc2UgJ20nOgogCQkJZiB8PSBVU19GTF9NQVhfU0VDVE9SU182NDsKIAkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCWYgfD0gVVNfRkxfSU5JVElBTF9SRUFEMTA7CisJCQlicmVhazsKIAkJY2FzZSAnbyc6CiAJCQlmIHw9IFVTX0ZMX0NBUEFDSVRZX09LOwogCQkJYnJlYWs7CkBAIC05NTMsNiArOTU3LDEzIEBACiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7CiAKKwkvKgorCSAqIElmIHRoZSBkZXZpY2UgcmV0dXJucyBpbnZhbGlkIGRhdGEgZm9yIHRoZSBmaXJzdCBSRUFEKDEwKQorCSAqIGNvbW1hbmQsIGluZGljYXRlIHRoZSBjb21tYW5kIHNob3VsZCBiZSByZXRyaWVkLgorCSAqLworCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfSU5JVElBTF9SRUFEMTApCisJCXNldF9iaXQoVVNfRkxJRFhfUkVET19SRUFEMTAsICZ1cy0+ZGZsYWdzKTsKKwogCS8qIEFjcXVpcmUgYWxsIHRoZSBvdGhlciByZXNvdXJjZXMgYW5kIGFkZCB0aGUgaG9zdCAqLwogCXJlc3VsdCA9IHVzYl9zdG9yX2FjcXVpcmVfcmVzb3VyY2VzKHVzKTsKIAlpZiAocmVzdWx0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKaW5kZXggODlkM2JmZi4uN2IwZjIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCkBAIC03Myw2ICs3Myw4IEBACiAjZGVmaW5lIFVTX0ZMSURYX1JFU0VUVElORwk0CS8qIGRldmljZSByZXNldCBpbiBwcm9ncmVzcyAqLwogI2RlZmluZSBVU19GTElEWF9USU1FRF9PVVQJNQkvKiBTQ1NJIG1pZGxheWVyIHRpbWVkIG91dCAgKi8KICNkZWZpbmUgVVNfRkxJRFhfRE9OVF9TQ0FOCTYJLyogZG9uJ3Qgc2NhbiAoZGlzY29ubmVjdCkgICovCisjZGVmaW5lIFVTX0ZMSURYX1JFRE9fUkVBRDEwCTcJLyogcmVkbyBSRUFEKDEwKSBjb21tYW5kICAgICovCisjZGVmaW5lIFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQJOAkvKiBwcmV2aW91cyBSRUFEKDEwKSBzdWNjZWVkZWQgKi8KIAogI2RlZmluZSBVU0JfU1RPUl9TVFJJTkdfTEVOIDMyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jCmluZGV4IDJmN2M3NmEuLmUyMjRhOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmMKKysrIGIvZHJpdmVycy92aG9zdC9uZXQuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKLQl2aG9zdF9kaXNhYmxlX25vdGlmeSh2cSk7CisJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJm5ldC0+ZGV2LCB2cSk7CiAKIAlpZiAod21lbSA8IHNvY2stPnNrLT5za19zbmRidWYgLyAyKQogCQl0eF9wb2xsX3N0b3AobmV0KTsKQEAgLTE2Niw4ICsxNjYsOCBAQAogCQkJCXNldF9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKHVubGlrZWx5KHZob3N0X2VuYWJsZV9ub3RpZnkodnEpKSkgewotCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKwkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KCZuZXQtPmRldiwgdnEpKSkgeworCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZuZXQtPmRldiwgdnEpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKLQl2aG9zdF9kaXNhYmxlX25vdGlmeSh2cSk7CisJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJm5ldC0+ZGV2LCB2cSk7CiAJdmhvc3RfaGxlbiA9IHZxLT52aG9zdF9obGVuOwogCXNvY2tfaGxlbiA9IHZxLT5zb2NrX2hsZW47CiAKQEAgLTMzNCwxMCArMzM0LDEwIEBACiAJCQlicmVhazsKIAkJLyogT0ssIG5vdyB3ZSBuZWVkIHRvIGtub3cgYWJvdXQgYWRkZWQgZGVzY3JpcHRvcnMuICovCiAJCWlmICghaGVhZGNvdW50KSB7Ci0JCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSh2cSkpKSB7CisJCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSgmbmV0LT5kZXYsIHZxKSkpIHsKIAkJCQkvKiBUaGV5IGhhdmUgc2xpcHBlZCBvbmUgaW4gYXMgd2Ugd2VyZQogCQkJCSAqIGRvaW5nIHRoYXQ6IGNoZWNrIGFnYWluLiAqLwotCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKwkJCQl2aG9zdF9kaXNhYmxlX25vdGlmeSgmbmV0LT5kZXYsIHZxKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCS8qIE5vdGhpbmcgbmV3PyAgV2FpdCBmb3IgZXZlbnRmZCB0byB0ZWxsIHVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Rlc3QuYyBiL2RyaXZlcnMvdmhvc3QvdGVzdC5jCmluZGV4IDA5OWYzMDIuLjczNGUxZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jCisrKyBiL2RyaXZlcnMvdmhvc3QvdGVzdC5jCkBAIC00OSw3ICs0OSw3IEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJnZxLT5tdXRleCk7Ci0Jdmhvc3RfZGlzYWJsZV9ub3RpZnkodnEpOworCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZuLT5kZXYsIHZxKTsKIAogCWZvciAoOzspIHsKIAkJaGVhZCA9IHZob3N0X2dldF92cV9kZXNjKCZuLT5kZXYsIHZxLCB2cS0+aW92LApAQCAtNjEsOCArNjEsOCBAQAogCQkJYnJlYWs7CiAJCS8qIE5vdGhpbmcgbmV3PyAgV2FpdCBmb3IgZXZlbnRmZCB0byB0ZWxsIHVzIHRoZXkgcmVmaWxsZWQuICovCiAJCWlmIChoZWFkID09IHZxLT5udW0pIHsKLQkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KHZxKSkpIHsKLQkJCQl2aG9zdF9kaXNhYmxlX25vdGlmeSh2cSk7CisJCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSgmbi0+ZGV2LCB2cSkpKSB7CisJCQkJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJm4tPmRldiwgdnEpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKaW5kZXggN2FhNGVlYS4uZWE5NjZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtMzcsNiArMzcsOSBAQAogCVZIT1NUX01FTU9SWV9GX0xPRyA9IDB4MSwKIH07CiAKKyNkZWZpbmUgdmhvc3RfdXNlZF9ldmVudCh2cSkgKCh1MTYgX191c2VyICopJnZxLT5hdmFpbC0+cmluZ1t2cS0+bnVtXSkKKyNkZWZpbmUgdmhvc3RfYXZhaWxfZXZlbnQodnEpICgodTE2IF9fdXNlciAqKSZ2cS0+dXNlZC0+cmluZ1t2cS0+bnVtXSkKKwogc3RhdGljIHZvaWQgdmhvc3RfcG9sbF9mdW5jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd3FoLAogCQkJICAgIHBvbGxfdGFibGUgKnB0KQogewpAQCAtMTYxLDYgKzE2NCw4IEBACiAJdnEtPmxhc3RfYXZhaWxfaWR4ID0gMDsKIAl2cS0+YXZhaWxfaWR4ID0gMDsKIAl2cS0+bGFzdF91c2VkX2lkeCA9IDA7CisJdnEtPnNpZ25hbGxlZF91c2VkID0gMDsKKwl2cS0+c2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTsKIAl2cS0+dXNlZF9mbGFncyA9IDA7CiAJdnEtPmxvZ191c2VkID0gZmFsc2U7CiAJdnEtPmxvZ19hZGRyID0gLTF1bGw7CkBAIC00ODksMTYgKzQ5NCwxNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHZxX2FjY2Vzc19vayh1bnNpZ25lZCBpbnQgbnVtLAorc3RhdGljIGludCB2cV9hY2Nlc3Nfb2soc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IG51bSwKIAkJCXN0cnVjdCB2cmluZ19kZXNjIF9fdXNlciAqZGVzYywKIAkJCXN0cnVjdCB2cmluZ19hdmFpbCBfX3VzZXIgKmF2YWlsLAogCQkJc3RydWN0IHZyaW5nX3VzZWQgX191c2VyICp1c2VkKQogeworCXNpemVfdCBzID0gdmhvc3RfaGFzX2ZlYXR1cmUoZCwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpID8gMiA6IDA7CiAJcmV0dXJuIGFjY2Vzc19vayhWRVJJRllfUkVBRCwgZGVzYywgbnVtICogc2l6ZW9mICpkZXNjKSAmJgogCSAgICAgICBhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGF2YWlsLAotCQkJIHNpemVvZiAqYXZhaWwgKyBudW0gKiBzaXplb2YgKmF2YWlsLT5yaW5nKSAmJgorCQkJIHNpemVvZiAqYXZhaWwgKyBudW0gKiBzaXplb2YgKmF2YWlsLT5yaW5nICsgcykgJiYKIAkgICAgICAgYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXNlZCwKLQkJCXNpemVvZiAqdXNlZCArIG51bSAqIHNpemVvZiAqdXNlZC0+cmluZyk7CisJCQlzaXplb2YgKnVzZWQgKyBudW0gKiBzaXplb2YgKnVzZWQtPnJpbmcgKyBzKTsKIH0KIAogLyogQ2FuIHdlIGxvZyB3cml0ZXM/ICovCkBAIC01MTQsOSArNTIwLDExIEBACiAKIC8qIFZlcmlmeSBhY2Nlc3MgZm9yIHdyaXRlIGxvZ2dpbmcuICovCiAvKiBDYWxsZXIgc2hvdWxkIGhhdmUgdnEgbXV0ZXggYW5kIGRldmljZSBtdXRleCAqLwotc3RhdGljIGludCB2cV9sb2dfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB2b2lkIF9fdXNlciAqbG9nX2Jhc2UpCitzdGF0aWMgaW50IHZxX2xvZ19hY2Nlc3Nfb2soc3RydWN0IHZob3N0X2RldiAqZCwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCisJCQkgICAgdm9pZCBfX3VzZXIgKmxvZ19iYXNlKQogewogCXN0cnVjdCB2aG9zdF9tZW1vcnkgKm1wOworCXNpemVfdCBzID0gdmhvc3RfaGFzX2ZlYXR1cmUoZCwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpID8gMiA6IDA7CiAKIAltcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodnEtPmRldi0+bWVtb3J5LAogCQkJCSAgICAgICBsb2NrZGVwX2lzX2hlbGQoJnZxLT5tdXRleCkpOwpAQCAtNTI0LDE1ICs1MzIsMTUgQEAKIAkJCSAgICB2aG9zdF9oYXNfZmVhdHVyZSh2cS0+ZGV2LCBWSE9TVF9GX0xPR19BTEwpKSAmJgogCQkoIXZxLT5sb2dfdXNlZCB8fCBsb2dfYWNjZXNzX29rKGxvZ19iYXNlLCB2cS0+bG9nX2FkZHIsCiAJCQkJCXNpemVvZiAqdnEtPnVzZWQgKwotCQkJCQl2cS0+bnVtICogc2l6ZW9mICp2cS0+dXNlZC0+cmluZykpOworCQkJCQl2cS0+bnVtICogc2l6ZW9mICp2cS0+dXNlZC0+cmluZyArIHMpKTsKIH0KIAogLyogQ2FuIHdlIHN0YXJ0IHZxPyAqLwogLyogQ2FsbGVyIHNob3VsZCBoYXZlIHZxIG11dGV4IGFuZCBkZXZpY2UgbXV0ZXggKi8KIGludCB2aG9zdF92cV9hY2Nlc3Nfb2soc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7Ci0JcmV0dXJuIHZxX2FjY2Vzc19vayh2cS0+bnVtLCB2cS0+ZGVzYywgdnEtPmF2YWlsLCB2cS0+dXNlZCkgJiYKLQkJdnFfbG9nX2FjY2Vzc19vayh2cSwgdnEtPmxvZ19iYXNlKTsKKwlyZXR1cm4gdnFfYWNjZXNzX29rKHZxLT5kZXYsIHZxLT5udW0sIHZxLT5kZXNjLCB2cS0+YXZhaWwsIHZxLT51c2VkKSAmJgorCQl2cV9sb2dfYWNjZXNzX29rKHZxLT5kZXYsIHZxLCB2cS0+bG9nX2Jhc2UpOwogfQogCiBzdGF0aWMgbG9uZyB2aG9zdF9zZXRfbWVtb3J5KHN0cnVjdCB2aG9zdF9kZXYgKmQsIHN0cnVjdCB2aG9zdF9tZW1vcnkgX191c2VyICptKQpAQCAtNTc3LDYgKzU4NSw3IEBACiAKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJdnEtPnNpZ25hbGxlZF91c2VkX3ZhbGlkID0gZmFsc2U7CiAJcmV0dXJuIGdldF91c2VyKHZxLT5sYXN0X3VzZWRfaWR4LCAmdXNlZC0+aWR4KTsKIH0KIApAQCAtNjc0LDcgKzY4Myw3IEBACiAJCSAqIElmIGl0IGlzIG5vdCwgd2UgZG9uJ3QgYXMgc2l6ZSBtaWdodCBub3QgaGF2ZSBiZWVuIHNldHVwLgogCQkgKiBXZSB3aWxsIHZlcmlmeSB3aGVuIGJhY2tlbmQgaXMgY29uZmlndXJlZC4gKi8KIAkJaWYgKHZxLT5wcml2YXRlX2RhdGEpIHsKLQkJCWlmICghdnFfYWNjZXNzX29rKHZxLT5udW0sCisJCQlpZiAoIXZxX2FjY2Vzc19vayhkLCB2cS0+bnVtLAogCQkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEuZGVzY191c2VyX2FkZHIsCiAJCQkJKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYS5hdmFpbF91c2VyX2FkZHIsCiAJCQkJKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYS51c2VkX3VzZXJfYWRkcikpIHsKQEAgLTgxOCw3ICs4MjcsNyBAQAogCQkJdnEgPSBkLT52cXMgKyBpOwogCQkJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKIAkJCS8qIElmIHJpbmcgaXMgaW5hY3RpdmUsIHdpbGwgY2hlY2sgd2hlbiBpdCdzIGVuYWJsZWQuICovCi0JCQlpZiAodnEtPnByaXZhdGVfZGF0YSAmJiAhdnFfbG9nX2FjY2Vzc19vayh2cSwgYmFzZSkpCisJCQlpZiAodnEtPnByaXZhdGVfZGF0YSAmJiAhdnFfbG9nX2FjY2Vzc19vayhkLCB2cSwgYmFzZSkpCiAJCQkJciA9IC1FRkFVTFQ7CiAJCQllbHNlCiAJCQkJdnEtPmxvZ19iYXNlID0gYmFzZTsKQEAgLTEyMTksNiArMTIyOCwxMCBAQAogCiAJLyogT24gc3VjY2VzcywgaW5jcmVtZW50IGF2YWlsIGluZGV4LiAqLwogCXZxLT5sYXN0X2F2YWlsX2lkeCsrOworCisJLyogQXNzdW1lIG5vdGlmaWNhdGlvbnMgZnJvbSBndWVzdCBhcmUgZGlzYWJsZWQgYXQgdGhpcyBwb2ludCwKKwkgKiBpZiB0aGV5IGFyZW4ndCB3ZSB3b3VsZCBuZWVkIHRvIHVwZGF0ZSBhdmFpbF9ldmVudCBpbmRleC4gKi8KKwlCVUdfT04oISh2cS0+dXNlZF9mbGFncyAmIFZSSU5HX1VTRURfRl9OT19OT1RJRlkpKTsKIAlyZXR1cm4gaGVhZDsKIH0KIApAQCAtMTI2Nyw2ICsxMjgwLDEyIEBACiAJCQlldmVudGZkX3NpZ25hbCh2cS0+bG9nX2N0eCwgMSk7CiAJfQogCXZxLT5sYXN0X3VzZWRfaWR4Kys7CisJLyogSWYgdGhlIGRyaXZlciBuZXZlciBib3RoZXJzIHRvIHNpZ25hbCBpbiBhIHZlcnkgbG9uZyB3aGlsZSwKKwkgKiB1c2VkIGluZGV4IG1pZ2h0IHdyYXAgYXJvdW5kLiBJZiB0aGF0IGhhcHBlbnMsIGludmFsaWRhdGUKKwkgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXIKKwkgKiBzaWduYWxzIGF0IGxlYXN0IG9uY2UgaW4gMl4xNiBhbmQgcmVtb3ZlIHRoaXMuICovCisJaWYgKHVubGlrZWx5KHZxLT5sYXN0X3VzZWRfaWR4ID09IHZxLT5zaWduYWxsZWRfdXNlZCkpCisJCXZxLT5zaWduYWxsZWRfdXNlZF92YWxpZCA9IGZhbHNlOwogCXJldHVybiAwOwogfQogCkBAIC0xMjc1LDYgKzEyOTQsNyBAQAogCQkJICAgIHVuc2lnbmVkIGNvdW50KQogewogCXN0cnVjdCB2cmluZ191c2VkX2VsZW0gX191c2VyICp1c2VkOworCXUxNiBvbGQsIG5ldzsKIAlpbnQgc3RhcnQ7CiAKIAlzdGFydCA9IHZxLT5sYXN0X3VzZWRfaWR4ICUgdnEtPm51bTsKQEAgLTEyOTIsNyArMTMxMiwxNCBAQAogCQkJICAgKCh2b2lkIF9fdXNlciAqKXVzZWQgLSAodm9pZCBfX3VzZXIgKil2cS0+dXNlZCksCiAJCQkgIGNvdW50ICogc2l6ZW9mICp1c2VkKTsKIAl9Ci0JdnEtPmxhc3RfdXNlZF9pZHggKz0gY291bnQ7CisJb2xkID0gdnEtPmxhc3RfdXNlZF9pZHg7CisJbmV3ID0gKHZxLT5sYXN0X3VzZWRfaWR4ICs9IGNvdW50KTsKKwkvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLAorCSAqIHVzZWQgaW5kZXggbWlnaHQgd3JhcCBhcm91bmQuIElmIHRoYXQgaGFwcGVucywgaW52YWxpZGF0ZQorCSAqIHNpZ25hbGxlZF91c2VkIGluZGV4IHdlIHN0b3JlZC4gVE9ETzogbWFrZSBzdXJlIGRyaXZlcgorCSAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi8KKwlpZiAodW5saWtlbHkoKHUxNikobmV3IC0gdnEtPnNpZ25hbGxlZF91c2VkKSA8ICh1MTYpKG5ldyAtIG9sZCkpKQorCQl2cS0+c2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMzMSwyOSArMTM1OCw0NyBAQAogCXJldHVybiByOwogfQogCi0vKiBUaGlzIGFjdHVhbGx5IHNpZ25hbHMgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqLwotdm9pZCB2aG9zdF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3N0YXRpYyBib29sIHZob3N0X25vdGlmeShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQogewotCV9fdTE2IGZsYWdzOwotCisJX191MTYgb2xkLCBuZXcsIGV2ZW50OworCWJvb2wgdjsKIAkvKiBGbHVzaCBvdXQgdXNlZCBpbmRleCB1cGRhdGVzLiBUaGlzIGlzIHBhaXJlZAogCSAqIHdpdGggdGhlIGJhcnJpZXIgdGhhdCB0aGUgR3Vlc3QgZXhlY3V0ZXMgd2hlbiBlbmFibGluZwogCSAqIGludGVycnVwdHMuICovCiAJc21wX21iKCk7CiAKLQlpZiAoX19nZXRfdXNlcihmbGFncywgJnZxLT5hdmFpbC0+ZmxhZ3MpKSB7Ci0JCXZxX2Vycih2cSwgIkZhaWxlZCB0byBnZXQgZmxhZ3MiKTsKLQkJcmV0dXJuOworCWlmICh2aG9zdF9oYXNfZmVhdHVyZShkZXYsIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSkgJiYKKwkgICAgdW5saWtlbHkodnEtPmF2YWlsX2lkeCA9PSB2cS0+bGFzdF9hdmFpbF9pZHgpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICghdmhvc3RfaGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCkpIHsKKwkJX191MTYgZmxhZ3M7CisJCWlmIChfX2dldF91c2VyKGZsYWdzLCAmdnEtPmF2YWlsLT5mbGFncykpIHsKKwkJCXZxX2Vycih2cSwgIkZhaWxlZCB0byBnZXQgZmxhZ3MiKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiAhKGZsYWdzICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpOwogCX0KKwlvbGQgPSB2cS0+c2lnbmFsbGVkX3VzZWQ7CisJdiA9IHZxLT5zaWduYWxsZWRfdXNlZF92YWxpZDsKKwluZXcgPSB2cS0+c2lnbmFsbGVkX3VzZWQgPSB2cS0+bGFzdF91c2VkX2lkeDsKKwl2cS0+c2lnbmFsbGVkX3VzZWRfdmFsaWQgPSB0cnVlOwogCi0JLyogSWYgdGhleSBkb24ndCB3YW50IGFuIGludGVycnVwdCwgZG9uJ3Qgc2lnbmFsLCB1bmxlc3MgZW1wdHkuICovCi0JaWYgKChmbGFncyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKSAmJgotCSAgICAodnEtPmF2YWlsX2lkeCAhPSB2cS0+bGFzdF9hdmFpbF9pZHggfHwKLQkgICAgICF2aG9zdF9oYXNfZmVhdHVyZShkZXYsIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSkpKQotCQlyZXR1cm47CisJaWYgKHVubGlrZWx5KCF2KSkKKwkJcmV0dXJuIHRydWU7CiAKKwlpZiAoZ2V0X3VzZXIoZXZlbnQsIHZob3N0X3VzZWRfZXZlbnQodnEpKSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZ2V0IHVzZWQgZXZlbnQgaWR4Iik7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gdnJpbmdfbmVlZF9ldmVudChldmVudCwgbmV3LCBvbGQpOworfQorCisvKiBUaGlzIGFjdHVhbGx5IHNpZ25hbHMgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqLwordm9pZCB2aG9zdF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKIAkvKiBTaWduYWwgdGhlIEd1ZXN0IHRlbGwgdGhlbSB3ZSB1c2VkIHNvbWV0aGluZyB1cC4gKi8KLQlpZiAodnEtPmNhbGxfY3R4KQorCWlmICh2cS0+Y2FsbF9jdHggJiYgdmhvc3Rfbm90aWZ5KGRldiwgdnEpKQogCQlldmVudGZkX3NpZ25hbCh2cS0+Y2FsbF9jdHgsIDEpOwogfQogCkBAIC0xMzc2LDcgKzE0MjEsNyBAQAogfQogCiAvKiBPSywgbm93IHdlIG5lZWQgdG8ga25vdyBhYm91dCBhZGRlZCBkZXNjcmlwdG9ycy4gKi8KLWJvb2wgdmhvc3RfZW5hYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK2Jvb2wgdmhvc3RfZW5hYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQogewogCXUxNiBhdmFpbF9pZHg7CiAJaW50IHI7CkBAIC0xMzg0LDExICsxNDI5LDM0IEBACiAJaWYgKCEodnEtPnVzZWRfZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZKSkKIAkJcmV0dXJuIGZhbHNlOwogCXZxLT51c2VkX2ZsYWdzICY9IH5WUklOR19VU0VEX0ZfTk9fTk9USUZZOwotCXIgPSBwdXRfdXNlcih2cS0+dXNlZF9mbGFncywgJnZxLT51c2VkLT5mbGFncyk7Ci0JaWYgKHIpIHsKLQkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGVuYWJsZSBub3RpZmljYXRpb24gYXQgJXA6ICVkXG4iLAotCQkgICAgICAgJnZxLT51c2VkLT5mbGFncywgcik7Ci0JCXJldHVybiBmYWxzZTsKKwlpZiAoIXZob3N0X2hhc19mZWF0dXJlKGRldiwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpKSB7CisJCXIgPSBwdXRfdXNlcih2cS0+dXNlZF9mbGFncywgJnZxLT51c2VkLT5mbGFncyk7CisJCWlmIChyKSB7CisJCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZW5hYmxlIG5vdGlmaWNhdGlvbiBhdCAlcDogJWRcbiIsCisJCQkgICAgICAgJnZxLT51c2VkLT5mbGFncywgcik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9IGVsc2UgeworCQlyID0gcHV0X3VzZXIodnEtPmF2YWlsX2lkeCwgdmhvc3RfYXZhaWxfZXZlbnQodnEpKTsKKwkJaWYgKHIpIHsKKwkJCXZxX2Vycih2cSwgIkZhaWxlZCB0byB1cGRhdGUgYXZhaWwgZXZlbnQgaW5kZXggYXQgJXA6ICVkXG4iLAorCQkJICAgICAgIHZob3N0X2F2YWlsX2V2ZW50KHZxKSwgcik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisJaWYgKHVubGlrZWx5KHZxLT5sb2dfdXNlZCkpIHsKKwkJdm9pZCBfX3VzZXIgKnVzZWQ7CisJCS8qIE1ha2Ugc3VyZSBkYXRhIGlzIHNlZW4gYmVmb3JlIGxvZy4gKi8KKwkJc21wX3dtYigpOworCQl1c2VkID0gdmhvc3RfaGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCkgPworCQkJJnZxLT51c2VkLT5mbGFncyA6IHZob3N0X2F2YWlsX2V2ZW50KHZxKTsKKwkJLyogTG9nIHVzZWQgZmxhZ3Mgb3IgZXZlbnQgaW5kZXggZW50cnkgd3JpdGUuIEJvdGggYXJlIDE2IGJpdAorCQkgKiBmaWVsZHMuICovCisJCWxvZ193cml0ZSh2cS0+bG9nX2Jhc2UsIHZxLT5sb2dfYWRkciArCisJCQkgICAodXNlZCAtICh2b2lkIF9fdXNlciAqKXZxLT51c2VkKSwKKwkJCSAgc2l6ZW9mKHUxNikpOworCQlpZiAodnEtPmxvZ19jdHgpCisJCQlldmVudGZkX3NpZ25hbCh2cS0+bG9nX2N0eCwgMSk7CiAJfQogCS8qIFRoZXkgY291bGQgaGF2ZSBzbGlwcGVkIG9uZSBpbiBhcyB3ZSB3ZXJlIGRvaW5nIHRoYXQ6IG1ha2UKIAkgKiBzdXJlIGl0J3Mgd3JpdHRlbiwgdGhlbiBjaGVjayBhZ2Fpbi4gKi8KQEAgLTE0MDQsMTUgKzE0NzIsMTcgQEAKIH0KIAogLyogV2UgZG9uJ3QgbmVlZCB0byBiZSBub3RpZmllZCBhZ2Fpbi4gKi8KLXZvaWQgdmhvc3RfZGlzYWJsZV9ub3RpZnkoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCit2b2lkIHZob3N0X2Rpc2FibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7CiAJaW50IHI7CiAKIAlpZiAodnEtPnVzZWRfZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZKQogCQlyZXR1cm47CiAJdnEtPnVzZWRfZmxhZ3MgfD0gVlJJTkdfVVNFRF9GX05PX05PVElGWTsKLQlyID0gcHV0X3VzZXIodnEtPnVzZWRfZmxhZ3MsICZ2cS0+dXNlZC0+ZmxhZ3MpOwotCWlmIChyKQotCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZW5hYmxlIG5vdGlmaWNhdGlvbiBhdCAlcDogJWRcbiIsCi0JCSAgICAgICAmdnEtPnVzZWQtPmZsYWdzLCByKTsKKwlpZiAoIXZob3N0X2hhc19mZWF0dXJlKGRldiwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpKSB7CisJCXIgPSBwdXRfdXNlcih2cS0+dXNlZF9mbGFncywgJnZxLT51c2VkLT5mbGFncyk7CisJCWlmIChyKQorCQkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGVuYWJsZSBub3RpZmljYXRpb24gYXQgJXA6ICVkXG4iLAorCQkJICAgICAgICZ2cS0+dXNlZC0+ZmxhZ3MsIHIpOworCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAppbmRleCBiMzM2M2FlLi44ZTAzMzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oCkBAIC04NCw2ICs4NCwxMiBAQAogCS8qIFVzZWQgZmxhZ3MgKi8KIAl1MTYgdXNlZF9mbGFnczsKIAorCS8qIExhc3QgdXNlZCBpbmRleCB2YWx1ZSB3ZSBoYXZlIHNpZ25hbGxlZCBvbiAqLworCXUxNiBzaWduYWxsZWRfdXNlZDsKKworCS8qIExhc3QgdXNlZCBpbmRleCB2YWx1ZSB3ZSBoYXZlIHNpZ25hbGxlZCBvbiAqLworCWJvb2wgc2lnbmFsbGVkX3VzZWRfdmFsaWQ7CisKIAkvKiBMb2cgd3JpdGVzIHRvIHVzZWQgc3RydWN0dXJlLiAqLwogCWJvb2wgbG9nX3VzZWQ7CiAJdTY0IGxvZ19hZGRyOwpAQCAtMTQ5LDggKzE1NSw4IEBACiB2b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwKIAkJCSAgICAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcywgdW5zaWduZWQgY291bnQpOwogdm9pZCB2aG9zdF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICopOwotdm9pZCB2aG9zdF9kaXNhYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICopOwotYm9vbCB2aG9zdF9lbmFibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7Cit2b2lkIHZob3N0X2Rpc2FibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF9kZXYgKiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKTsKK2Jvb2wgdmhvc3RfZW5hYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7CiAKIGludCB2aG9zdF9sb2dfd3JpdGUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywKIAkJICAgIHVuc2lnbmVkIGludCBsb2dfbnVtLCB1NjQgbGVuKTsKQEAgLTE2MiwxMSArMTY4LDEyIEBACiAJfSB3aGlsZSAoMCkKIAogZW51bSB7Ci0JVkhPU1RfRkVBVFVSRVMgPSAoMSA8PCBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkpIHwKLQkJCSAoMSA8PCBWSVJUSU9fUklOR19GX0lORElSRUNUX0RFU0MpIHwKLQkJCSAoMSA8PCBWSE9TVF9GX0xPR19BTEwpIHwKLQkJCSAoMSA8PCBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUikgfAotCQkJICgxIDw8IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpLAorCVZIT1NUX0ZFQVRVUkVTID0gKDFVTEwgPDwgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZKSB8CisJCQkgKDFVTEwgPDwgVklSVElPX1JJTkdfRl9JTkRJUkVDVF9ERVNDKSB8CisJCQkgKDFVTEwgPDwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpIHwKKwkJCSAoMVVMTCA8PCBWSE9TVF9GX0xPR19BTEwpIHwKKwkJCSAoMVVMTCA8PCBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUikgfAorCQkJICgxVUxMIDw8IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpLAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgdmhvc3RfaGFzX2ZlYXR1cmUoc3RydWN0IHZob3N0X2RldiAqZGV2LCBpbnQgYml0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hcmNmYi5jIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCmluZGV4IDNlYzQ5MjMuLmMyMmU4ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKQEAgLTUxNSwxMSArNTE1LDEwIEBACiAKIAkvKiBXZSBuZWVkIGEgZmxhdCBiYWNraW5nIHN0b3JlIGZvciB0aGUgQXJjJ3MKIAkgICBsZXNzLWZsYXQgYWN0dWFsIHBhZ2VkIGZyYW1lYnVmZmVyICovCi0JaWYgKCEodmlkZW9tZW1vcnkgPSB2bWFsbG9jKHZpZGVvbWVtb3J5c2l6ZSkpKQorCXZpZGVvbWVtb3J5ID0gdnphbGxvYyh2aWRlb21lbW9yeXNpemUpOworCWlmICghdmlkZW9tZW1vcnkpCiAJCXJldHVybiByZXR2YWw7CiAKLQltZW1zZXQodmlkZW9tZW1vcnksIDAsIHZpZGVvbWVtb3J5c2l6ZSk7Ci0KIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcmNmYl9wYXIpLCAmZGV2LT5kZXYpOwogCWlmICghaW5mbykKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMgYi9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKaW5kZXggNDdjMjFmYi4uYmVhNTNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYwpAQCAtNzg5LDYgKzc4OSw3IEBACiAJaTJjX2FkZF9kcml2ZXIoJmFkNTI4MF9kcml2ZXIpOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBNQVhfQlJJR0hFTkVTUzsKIAlibF9kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJiZjUzNy1ibCIsIE5VTEwsIE5VTEwsCiAJCQkJCSAgICZiZmluX2xxMDM1ZmJfYmxfb3BzLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKaW5kZXggZWJkYTY4Ny4uMzc3ZGRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5jCkBAIC0xMTAxLDEyICsxMTAxLDEwIEBACiAKIAl2aWRlb21lbW9yeXNpemUgPSByb3VuZHVwKChkcHl3KmRweWgpLCBQQUdFX1NJWkUpOwogCi0JdmlkZW9tZW1vcnkgPSB2bWFsbG9jKHZpZGVvbWVtb3J5c2l6ZSk7CisJdmlkZW9tZW1vcnkgPSB2emFsbG9jKHZpZGVvbWVtb3J5c2l6ZSk7CiAJaWYgKCF2aWRlb21lbW9yeSkKIAkJZ290byBlcnJfZmJfcmVsOwogCi0JbWVtc2V0KHZpZGVvbWVtb3J5LCAwLCB2aWRlb21lbW9yeXNpemUpOwotCiAJaW5mby0+c2NyZWVuX2Jhc2UgPSAoY2hhciAqKXZpZGVvbWVtb3J5OwogCWluZm8tPmZib3BzID0gJmJyb2Fkc2hlZXRmYl9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwppbmRleCBmYjIwNTg0Li42OWM0OWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKK3N0YXRpYyBib29sIHJlcXVlc3RfbWVtX3N1Y2NlZWRlZCA9IGZhbHNlOworCiBzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGVmaWZiX2RlZmluZWQgX19kZXZpbml0ZGF0YSA9IHsKIAkuYWN0aXZhdGUJCT0gRkJfQUNUSVZBVEVfTk9XLAogCS5oZWlnaHQJCQk9IC0xLApAQCAtMjgxLDcgKzI4Myw5IEBACiB7CiAJaWYgKGluZm8tPnNjcmVlbl9iYXNlKQogCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uYmFzZSwgaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSk7CisJaWYgKHJlcXVlc3RfbWVtX3N1Y2NlZWRlZCkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJhc2UsCisJCQkJICAgaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIH0KIApAQCAtMzI2LDE0ICszMzAsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZWZpZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgZWZpZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCBlcnI7CiAJdW5zaWduZWQgaW50IHNpemVfdm1vZGU7CiAJdW5zaWduZWQgaW50IHNpemVfcmVtYXA7CiAJdW5zaWduZWQgaW50IHNpemVfdG90YWw7Ci0JaW50IHJlcXVlc3Rfc3VjY2VlZGVkID0gMDsKIAogCWlmICghc2NyZWVuX2luZm8ubGZiX2RlcHRoKQogCQlzY3JlZW5faW5mby5sZmJfZGVwdGggPSAzMjsKQEAgLTM4Nyw3ICszOTAsNyBAQAogCWVmaWZiX2ZpeC5zbWVtX2xlbiA9IHNpemVfcmVtYXA7CiAKIAlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBzaXplX3JlbWFwLCAiZWZpZmIiKSkgewotCQlyZXF1ZXN0X3N1Y2NlZWRlZCA9IDE7CisJCXJlcXVlc3RfbWVtX3N1Y2NlZWRlZCA9IHRydWU7CiAJfSBlbHNlIHsKIAkJLyogV2UgY2Fubm90IG1ha2UgdGhpcyBmYXRhbC4gU29tZXRpbWVzIHRoaXMgY29tZXMgZnJvbSBtYWdpYwogCQkgICBzcGFjZXMgb3VyIHJlc291cmNlIGhhbmRsZXJzIHNpbXBseSBkb24ndCBrbm93IGFib3V0ICovCkBAIC00MTMsNyArNDE2LDcgQEAKIAlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5iYXNlID0gZWZpZmJfZml4LnNtZW1fc3RhcnQ7CiAJaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSA9IHNpemVfcmVtYXA7CiAKLQlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoZWZpZmJfZml4LnNtZW1fc3RhcnQsIGVmaWZiX2ZpeC5zbWVtX2xlbik7CisJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX3djKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBlZmlmYl9maXguc21lbV9sZW4pOwogCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlZmlmYjogYWJvcnQsIGNhbm5vdCBpb3JlbWFwIHZpZGVvIG1lbW9yeSAiCiAJCQkJIjB4JXggQCAweCVseFxuIiwKQEAgLTQ5MSwxMyArNDk0LDEyIEBACiBlcnJfcmVsZWFzZV9mYjoKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogZXJyX3JlbGVhc2VfbWVtOgotCWlmIChyZXF1ZXN0X3N1Y2NlZWRlZCkKKwlpZiAocmVxdWVzdF9tZW1fc3VjY2VlZGVkKQogCQlyZWxlYXNlX21lbV9yZWdpb24oZWZpZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVmaWZiX2RyaXZlciA9IHsKLQkucHJvYmUJPSBlZmlmYl9wcm9iZSwKIAkuZHJpdmVyCT0gewogCQkubmFtZQk9ICJlZmlmYiIsCiAJfSwKQEAgLTUyOCwxMyArNTMwLDIxIEBACiAJaWYgKCFzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVmaWZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlZmlmYl9kZXZpY2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlpZiAoIXJldCkgewotCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVmaWZiX2RldmljZSk7Ci0JCWlmIChyZXQpCi0JCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZWZpZmJfZHJpdmVyKTsKKwkvKgorCSAqIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLiAgV2Ugd2lsbCBpbnRlcmZlcmUKKwkgKiB3aXRoIGEgcmVhbCBkcml2ZXIgaWYgd2UgZ2V0IHJlcHJvYmVkLCBzbyBkb24ndCBhbGxvdworCSAqIGl0LgorCSAqLworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZWZpZmJfZHJpdmVyLCBlZmlmYl9wcm9iZSk7CisJaWYgKHJldCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZWZpZmJfZHJpdmVyKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogbW9kdWxlX2luaXQoZWZpZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2hlY3ViYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2hlY3ViYWZiLmMKaW5kZXggMWI5NDY0My4uZmJlZjE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9oZWN1YmFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaGVjdWJhZmIuYwpAQCAtMjMxLDExICsyMzEsMTAgQEAKIAogCXZpZGVvbWVtb3J5c2l6ZSA9IChEUFlfVypEUFlfSCkvODsKIAotCWlmICghKHZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpKSkKKwl2aWRlb21lbW9yeSA9IHZ6YWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwlpZiAoIXZpZGVvbWVtb3J5KQogCQlyZXR1cm4gcmV0dmFsOwogCi0JbWVtc2V0KHZpZGVvbWVtb3J5LCAwLCB2aWRlb21lbW9yeXNpemUpOwotCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgaGVjdWJhZmJfcGFyKSwgJmRldi0+ZGV2KTsKIAlpZiAoIWluZm8pCiAJCWdvdG8gZXJyX2ZiYWxsb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKaW5kZXggZDJjY2ZkNi4uZjEzNWRiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtODU2LDEwICs4NTYsMTAgQEAKIAkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZwZGV2LT5kZXYsZmJpLT5tYXBfc2l6ZSxmYmktPm1hcF9jcHUsCiAJCQlmYmktPm1hcF9kbWEpOwogZmFpbGVkX21hcDoKLQljbGtfcHV0KGZiaS0+Y2xrKTsKLWZhaWxlZF9nZXRjbG9jazoKIAlpb3VubWFwKGZiaS0+cmVncyk7CiBmYWlsZWRfaW9yZW1hcDoKKwljbGtfcHV0KGZiaS0+Y2xrKTsKK2ZhaWxlZF9nZXRjbG9jazoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGZhaWxlZF9yZXE6CiAJa2ZyZWUoaW5mby0+cHNldWRvX3BhbGV0dGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jIGIvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jCmluZGV4IGVkNjRlZGYuLjk3ZDQ1ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKQEAgLTYyOCwxMiArNjI4LDEwIEBACiAJLyogd2UgbmVlZCB0byBhZGQgYSBzcGFyZSBwYWdlIGJlY2F1c2Ugb3VyIGNzdW0gY2FjaGluZyBzY2hlbWUgd2Fsa3MKIAkgKiB0byB0aGUgZW5kIG9mIHRoZSBwYWdlICovCiAJdmlkZW9tZW1vcnlzaXplID0gUEFHRV9TSVpFICsgKGZ3ICogZmgpOwotCXZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCXZpZGVvbWVtb3J5ID0gdnphbGxvYyh2aWRlb21lbW9yeXNpemUpOwogCWlmICghdmlkZW9tZW1vcnkpCiAJCWdvdG8gZXJyX2ZiX3JlbDsKIAotCW1lbXNldCh2aWRlb21lbW9yeSwgMCwgdmlkZW9tZW1vcnlzaXplKTsKLQogCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgX19mb3JjZSBfX2lvbWVtICopdmlkZW9tZW1vcnk7CiAJaW5mby0+ZmJvcHMgPSAmbWV0cm9ub21lZmJfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jIGIvZHJpdmVycy92aWRlby9tb2RlZGIuYwppbmRleCA0OGMzZWE4Li5jYjE3NWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKQEAgLTExMjgsMyArMTEyOCw0IEBACiBFWFBPUlRfU1lNQk9MKGZiX2ZpbmRfbmVhcmVzdF9tb2RlKTsKIEVYUE9SVF9TWU1CT0woZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KTsKIEVYUE9SVF9TWU1CT0woZmJfZmluZF9tb2RlKTsKK0VYUE9SVF9TWU1CT0woZmJfZmluZF9tb2RlX2N2dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMKaW5kZXggMzVmNjFkZC4uYmI5NWVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGExNjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYwpAQCAtNjIzLDE5ICs2MjMsMjEgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJTyBtZW1vcnkgZGVmaW5lZFxuIik7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGZhaWxlZF9wdXRfY2xrOwogCX0KIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gSVJRIGRlZmluZWRcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBmYWlsZWRfcHV0X2NsazsKIAl9CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBweGExNjhmYl9pbmZvKSwgJnBkZXYtPmRldik7CiAJaWYgKGluZm8gPT0gTlVMTCkgewotCQljbGtfcHV0KGNsayk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9wdXRfY2xrOwogCX0KIAogCS8qIEluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCkBAIC02NzEsNyArNjczLDcgQEAKIAlmYmktPnJlZ19iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKGZiaS0+cmVnX2Jhc2UgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxlZDsKKwkJZ290byBmYWlsZWRfZnJlZV9pbmZvOwogCX0KIAogCS8qCkBAIC02ODMsNyArNjg1LDcgQEAKIAkJCQkJCSZmYmktPmZiX3N0YXJ0X2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGluZm8tPnNjcmVlbl9iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZmFpbGVkX2ZyZWVfaW5mbzsKIAl9CiAKIAlpbmZvLT5maXguc21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWZiaS0+ZmJfc3RhcnRfZG1hOwpAQCAtNzcyLDggKzc3NCw5IEBACiBmYWlsZWRfZnJlZV9mYm1lbToKIAlkbWFfZnJlZV9jb2hlcmVudChmYmktPmRldiwgaW5mby0+Zml4LnNtZW1fbGVuLAogCQkJaW5mby0+c2NyZWVuX2Jhc2UsIGZiaS0+ZmJfc3RhcnRfZG1hKTsKLWZhaWxlZDoKK2ZhaWxlZF9mcmVlX2luZm86CiAJa2ZyZWUoaW5mbyk7CitmYWlsZWRfcHV0X2NsazoKIAljbGtfcHV0KGNsayk7CiAKIAlkZXZfZXJyKCZwZGV2LT5kZXYsICJmcmFtZSBidWZmZXIgZGV2aWNlIGluaXQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IDNiN2YyZjUuLjRkZTU0MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0yMjM3LDYgKzIyMzcsMjIgQEAKIAkJCQkgJmluZm8tPm1vZGVsaXN0KTsKICNlbmRpZgogCWluZm8tPnZhciA9IHNhdmFnZWZiX3ZhcjgwMHg2MDB4ODsKKwkvKiBpZiBhIHBhbmVsIHdhcyBkZXRlY3RlZCwgZGVmYXVsdCB0byBhIENWVCBtb2RlIGluc3RlYWQgKi8KKwlpZiAocGFyLT5TYXZhZ2VQYW5lbFdpZHRoKSB7CisJCXN0cnVjdCBmYl92aWRlb21vZGUgY3Z0X21vZGU7CisKKwkJbWVtc2V0KCZjdnRfbW9kZSwgMCwgc2l6ZW9mKGN2dF9tb2RlKSk7CisJCWN2dF9tb2RlLnhyZXMgPSBwYXItPlNhdmFnZVBhbmVsV2lkdGg7CisJCWN2dF9tb2RlLnlyZXMgPSBwYXItPlNhdmFnZVBhbmVsSGVpZ2h0OworCQljdnRfbW9kZS5yZWZyZXNoID0gNjA7CisJCS8qIEZJWE1FOiBpZiB3ZSBrbm93IHRoZXJlIGlzIG9ubHkgdGhlIHBhbmVsCisJCSAqIHdlIGNhbiBlbmFibGUgcmVkdWNlZCBibGFua2luZyBhcyB3ZWxsICovCisJCWlmIChmYl9maW5kX21vZGVfY3Z0KCZjdnRfbW9kZSwgMCwgMCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBDVlQgbW9kZSBmb3VuZCBmb3IgcGFuZWxcbiIpOworCQllbHNlIGlmIChmYl9maW5kX21vZGUoJmluZm8tPnZhciwgaW5mbywgTlVMTCwgTlVMTCwgMCwKKwkJCQkgICAgICAmY3Z0X21vZGUsIDApICE9IDMpCisJCQlpbmZvLT52YXIgPSBzYXZhZ2VmYl92YXI4MDB4NjAweDg7CisJfQogCiAJaWYgKG1vZGVfb3B0aW9uKSB7CiAJCWZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggNDA0YzAzYi4uMDE5ZGJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWludCBicHAgPSAwOwogCXVuc2lnbmVkIGxvbmcgbGRkZHNyOwotCWludCBrLCBtOworCWludCBrLCBtLCByZXQ7CiAKIAkvKiBlbmFibGUgY2xvY2tzIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGhhcmR3YXJlICovCiAJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUocHJpdi0+Y2gpOyBrKyspIHsKQEAgLTU0MCw3ICs1NDAsNyBAQAogCiAJCWJvYXJkX2NmZyA9ICZjaC0+Y2ZnLmJvYXJkX2NmZzsKIAkJaWYgKGJvYXJkX2NmZy0+c2V0dXBfc3lzKSB7Ci0JCQlpbnQgcmV0ID0gYm9hcmRfY2ZnLT5zZXR1cF9zeXMoYm9hcmRfY2ZnLT5ib2FyZF9kYXRhLAorCQkJcmV0ID0gYm9hcmRfY2ZnLT5zZXR1cF9zeXMoYm9hcmRfY2ZnLT5ib2FyZF9kYXRhLAogCQkJCQkJY2gsICZzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCmluZGV4IDUzYjJjNWEuLjMwNWM5NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCkBAIC0xMjY1LDkgKzEyNjUsMTEgQEAKIAogc3RhdGljIHZvaWQgdmdhMTZmYl9kZXN0cm95KHN0cnVjdCBmYl9pbmZvICppbmZvKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihpbmZvLT5kZXZpY2UsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CiAJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIAkvKiBYWFggdW5zaGFyZSBWR0EgcmVnaW9ucyAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCmluZGV4IGEyMDIxOGMuLmJlYWM1MmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKKysrIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCkBAIC0zOTUsMTAgKzM5NSw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJmluZm8tPmRpcnR5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZpbmZvLT5yZXNpemVfbG9jayk7CiAKLQlpbmZvLT5mYiA9IHZtYWxsb2MoZmJfc2l6ZSk7CisJaW5mby0+ZmIgPSB2emFsbG9jKGZiX3NpemUpOwogCWlmIChpbmZvLT5mYiA9PSBOVUxMKQogCQlnb3RvIGVycm9yX25vbWVtOwotCW1lbXNldChpbmZvLT5mYiwgMCwgZmJfc2l6ZSk7CiAKIAlpbmZvLT5ucl9wYWdlcyA9IChmYl9zaXplICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKaW5kZXggMGYxZGE0NS4uZTA1OGFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCkBAIC00MCw5ICs0MCw2IEBACiAJLyogV2FpdGluZyBmb3IgaG9zdCB0byBhY2sgdGhlIHBhZ2VzIHdlIHJlbGVhc2VkLiAqLwogCXN0cnVjdCBjb21wbGV0aW9uIGFja2VkOwogCi0JLyogRG8gd2UgaGF2ZSB0byB0ZWxsIEhvc3QgKmJlZm9yZSogd2UgcmV1c2UgcGFnZXM/ICovCi0JYm9vbCB0ZWxsX2hvc3RfZmlyc3Q7Ci0KIAkvKiBUaGUgcGFnZXMgd2UndmUgdG9sZCB0aGUgSG9zdCB3ZSdyZSBub3QgdXNpbmcuICovCiAJdW5zaWduZWQgaW50IG51bV9wYWdlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VzOwpAQCAtMTUxLDEzICsxNDgsMTQgQEAKIAkJdmItPm51bV9wYWdlcy0tOwogCX0KIAotCWlmICh2Yi0+dGVsbF9ob3N0X2ZpcnN0KSB7Ci0JCXRlbGxfaG9zdCh2YiwgdmItPmRlZmxhdGVfdnEpOwotCQlyZWxlYXNlX3BhZ2VzX2J5X3Bmbih2Yi0+cGZucywgdmItPm51bV9wZm5zKTsKLQl9IGVsc2UgewotCQlyZWxlYXNlX3BhZ2VzX2J5X3Bmbih2Yi0+cGZucywgdmItPm51bV9wZm5zKTsKLQkJdGVsbF9ob3N0KHZiLCB2Yi0+ZGVmbGF0ZV92cSk7Ci0JfQorCisJLyoKKwkgKiBOb3RlIHRoYXQgaWYKKwkgKiB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0JBTExPT05fRl9NVVNUX1RFTExfSE9TVCk7CisJICogaXMgdHJ1ZSwgd2UgKmhhdmUqIHRvIGRvIGl0IGluIHRoaXMgb3JkZXIKKwkgKi8KKwl0ZWxsX2hvc3QodmIsIHZiLT5kZWZsYXRlX3ZxKTsKKwlyZWxlYXNlX3BhZ2VzX2J5X3Bmbih2Yi0+cGZucywgdmItPm51bV9wZm5zKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zdGF0KHN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIsIGludCBpZHgsCkBAIC0zMjUsOSArMzIzLDYgQEAKIAkJZ290byBvdXRfZGVsX3ZxczsKIAl9CiAKLQl2Yi0+dGVsbF9ob3N0X2ZpcnN0Ci0JCT0gdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QpOwotCiAJcmV0dXJuIDA7CiAKIG91dF9kZWxfdnFzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKaW5kZXggYjAwNDNmYi4uNjhiOTEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCkBAIC04Miw2ICs4Miw5IEBACiAJLyogSG9zdCBzdXBwb3J0cyBpbmRpcmVjdCBidWZmZXJzICovCiAJYm9vbCBpbmRpcmVjdDsKIAorCS8qIEhvc3QgcHVibGlzaGVzIGF2YWlsIGV2ZW50IGlkeCAqLworCWJvb2wgZXZlbnQ7CisKIAkvKiBOdW1iZXIgb2YgZnJlZSBidWZmZXJzICovCiAJdW5zaWduZWQgaW50IG51bV9mcmVlOwogCS8qIEhlYWQgb2YgZnJlZSBidWZmZXIgbGlzdC4gKi8KQEAgLTIzNywxOCArMjQwLDIyIEBACiB2b2lkIHZpcnRxdWV1ZV9raWNrKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKIHsKIAlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOworCXUxNiBuZXcsIG9sZDsKIAlTVEFSVF9VU0UodnEpOwogCS8qIERlc2NyaXB0b3JzIGFuZCBhdmFpbGFibGUgYXJyYXkgbmVlZCB0byBiZSBzZXQgYmVmb3JlIHdlIGV4cG9zZSB0aGUKIAkgKiBuZXcgYXZhaWxhYmxlIGFycmF5IGVudHJpZXMuICovCiAJdmlydGlvX3dtYigpOwogCi0JdnEtPnZyaW5nLmF2YWlsLT5pZHggKz0gdnEtPm51bV9hZGRlZDsKKwlvbGQgPSB2cS0+dnJpbmcuYXZhaWwtPmlkeDsKKwluZXcgPSB2cS0+dnJpbmcuYXZhaWwtPmlkeCA9IG9sZCArIHZxLT5udW1fYWRkZWQ7CiAJdnEtPm51bV9hZGRlZCA9IDA7CiAKIAkvKiBOZWVkIHRvIHVwZGF0ZSBhdmFpbCBpbmRleCBiZWZvcmUgY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIG5vdGlmeSAqLwogCXZpcnRpb19tYigpOwogCi0JaWYgKCEodnEtPnZyaW5nLnVzZWQtPmZsYWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpCisJaWYgKHZxLT5ldmVudCA/CisJICAgIHZyaW5nX25lZWRfZXZlbnQodnJpbmdfYXZhaWxfZXZlbnQoJnZxLT52cmluZyksIG5ldywgb2xkKSA6CisJICAgICEodnEtPnZyaW5nLnVzZWQtPmZsYWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpCiAJCS8qIFByb2Qgb3RoZXIgc2lkZSB0byB0ZWxsIGl0IGFib3V0IGNoYW5nZXMuICovCiAJCXZxLT5ub3RpZnkoJnZxLT52cSk7CiAKQEAgLTMyNCw2ICszMzEsMTQgQEAKIAlyZXQgPSB2cS0+ZGF0YVtpXTsKIAlkZXRhY2hfYnVmKHZxLCBpKTsKIAl2cS0+bGFzdF91c2VkX2lkeCsrOworCS8qIElmIHdlIGV4cGVjdCBhbiBpbnRlcnJ1cHQgZm9yIHRoZSBuZXh0IGVudHJ5LCB0ZWxsIGhvc3QKKwkgKiBieSB3cml0aW5nIGV2ZW50IGluZGV4IGFuZCBmbHVzaCBvdXQgdGhlIHdyaXRlIGJlZm9yZQorCSAqIHRoZSByZWFkIGluIHRoZSBuZXh0IGdldF9idWYgY2FsbC4gKi8KKwlpZiAoISh2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpKSB7CisJCXZyaW5nX3VzZWRfZXZlbnQoJnZxLT52cmluZykgPSB2cS0+bGFzdF91c2VkX2lkeDsKKwkJdmlydGlvX21iKCk7CisJfQorCiAJRU5EX1VTRSh2cSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM0NSw3ICszNjAsMTEgQEAKIAogCS8qIFdlIG9wdGltaXN0aWNhbGx5IHR1cm4gYmFjayBvbiBpbnRlcnJ1cHRzLCB0aGVuIGNoZWNrIGlmIHRoZXJlIHdhcwogCSAqIG1vcmUgdG8gZG8uICovCisJLyogRGVwZW5kaW5nIG9uIHRoZSBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCBmZWF0dXJlLCB3ZSBuZWVkIHRvCisJICogZWl0aGVyIGNsZWFyIHRoZSBmbGFncyBiaXQgb3IgcG9pbnQgdGhlIGV2ZW50IGluZGV4IGF0IHRoZSBuZXh0CisJICogZW50cnkuIEFsd2F5cyBkbyBib3RoIHRvIGtlZXAgY29kZSBzaW1wbGUuICovCiAJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmPSB+VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7CisJdnJpbmdfdXNlZF9ldmVudCgmdnEtPnZyaW5nKSA9IHZxLT5sYXN0X3VzZWRfaWR4OwogCXZpcnRpb19tYigpOwogCWlmICh1bmxpa2VseShtb3JlX3VzZWQodnEpKSkgewogCQlFTkRfVVNFKHZxKTsKQEAgLTM1Nyw2ICszNzYsMzMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRxdWV1ZV9lbmFibGVfY2IpOwogCitib29sIHZpcnRxdWV1ZV9lbmFibGVfY2JfZGVsYXllZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCit7CisJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKKwl1MTYgYnVmczsKKworCVNUQVJUX1VTRSh2cSk7CisKKwkvKiBXZSBvcHRpbWlzdGljYWxseSB0dXJuIGJhY2sgb24gaW50ZXJydXB0cywgdGhlbiBjaGVjayBpZiB0aGVyZSB3YXMKKwkgKiBtb3JlIHRvIGRvLiAqLworCS8qIERlcGVuZGluZyBvbiB0aGUgVklSVElPX1JJTkdfRl9VU0VEX0VWRU5UX0lEWCBmZWF0dXJlLCB3ZSBuZWVkIHRvCisJICogZWl0aGVyIGNsZWFyIHRoZSBmbGFncyBiaXQgb3IgcG9pbnQgdGhlIGV2ZW50IGluZGV4IGF0IHRoZSBuZXh0CisJICogZW50cnkuIEFsd2F5cyBkbyBib3RoIHRvIGtlZXAgY29kZSBzaW1wbGUuICovCisJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmPSB+VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7CisJLyogVE9ETzogdHVuZSB0aGlzIHRocmVzaG9sZCAqLworCWJ1ZnMgPSAodTE2KSh2cS0+dnJpbmcuYXZhaWwtPmlkeCAtIHZxLT5sYXN0X3VzZWRfaWR4KSAqIDMgLyA0OworCXZyaW5nX3VzZWRfZXZlbnQoJnZxLT52cmluZykgPSB2cS0+bGFzdF91c2VkX2lkeCArIGJ1ZnM7CisJdmlydGlvX21iKCk7CisJaWYgKHVubGlrZWx5KCh1MTYpKHZxLT52cmluZy51c2VkLT5pZHggLSB2cS0+bGFzdF91c2VkX2lkeCkgPiBidWZzKSkgeworCQlFTkRfVVNFKHZxKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCUVORF9VU0UodnEpOworCXJldHVybiB0cnVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVlX2VuYWJsZV9jYl9kZWxheWVkKTsKKwogdm9pZCAqdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKIHsKIAlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwpAQCAtNDM4LDYgKzQ4NCw3IEBACiAjZW5kaWYKIAogCXZxLT5pbmRpcmVjdCA9IHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fUklOR19GX0lORElSRUNUX0RFU0MpOworCXZxLT5ldmVudCA9IHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCk7CiAKIAkvKiBObyBjYWxsYmFjaz8gIFRlbGwgb3RoZXIgc2lkZSBub3QgdG8gYm90aGVyIHVzLiAqLwogCWlmICghY2FsbGJhY2spCkBAIC00NzIsNiArNTE5LDggQEAKIAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgVklSVElPX1JJTkdfRl9JTkRJUkVDVF9ERVNDOgogCQkJYnJlYWs7CisJCWNhc2UgVklSVElPX1JJTkdfRl9FVkVOVF9JRFg6CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIFdlIGRvbid0IHVuZGVyc3RhbmQgdGhpcyBiaXQuICovCiAJCQljbGVhcl9iaXQoaSwgdmRldi0+ZmVhdHVyZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCAzZmY4MjJiLi41NTNkYTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwpAQCAtNjI2LDYgKzYyNiw5IEBACiAgKgogICogTm90ZTogV2UgZG9uJ3QgYXNzaWduIGFuIGV2ZW50IGNoYW5uZWwgdW50aWwgdGhlIGlycSBhY3R1YWxseSBzdGFydGVkCiAgKiB1cC4gIFJldHVybiBhbiBleGlzdGluZyBpcnEgaWYgd2UndmUgYWxyZWFkeSBnb3Qgb25lIGZvciB0aGUgZ3NpLgorICoKKyAqIFNoYXJlYWJsZSBpbXBsaWVzIGxldmVsIHRyaWdnZXJlZCwgbm90IHNoYXJlYWJsZSBpbXBsaWVzIGVkZ2UKKyAqIHRyaWdnZXJlZCBoZXJlLgogICovCiBpbnQgeGVuX2JpbmRfcGlycV9nc2lfdG9faXJxKHVuc2lnbmVkIGdzaSwKIAkJCSAgICAgdW5zaWduZWQgcGlycSwgaW50IHNoYXJlYWJsZSwgY2hhciAqbmFtZSkKQEAgLTY2NCwxNiArNjY3LDEzIEBACiAKIAlwaXJxX3F1ZXJ5X3VubWFzayhpcnEpOwogCS8qIFdlIHRyeSB0byB1c2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2VtYW50aWMgZm9yIHRoZQotCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGRvZXNuJ3QgbmVlZCBhbiBlb2kKLQkgKiAocGlycV9uZWVkc19lb2kgcmV0dXJucyBmYWxzZSksIHdlIHRyZWF0IGl0IGxpa2UgYW4gZWRnZQotCSAqIHRyaWdnZXJlZCBpbnRlcnJ1cHQgc28gd2UgdXNlIGhhbmRsZV9lZGdlX2lycS4KLQkgKiBBcyBhIG1hdHRlciBvZiBmYWN0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcKLQkgKiBwaHlzaWNhbCBpbnRlcnJ1cHQgaXMgZWRnZSB0cmlnZ2VyZWQgb3IgYW4gbXNpLgorCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGlzIGFuIGVkZ2UgdHJpZ2dlcmVkCisJICogaW50ZXJydXB0IHdlIHVzZSBoYW5kbGVfZWRnZV9pcnEuCiAJICoKLQkgKiBPbiB0aGUgb3RoZXIgaGFuZCBpZiB0aGUgaW50ZXJydXB0IG5lZWRzIGFuIGVvaSAocGlycV9uZWVkc19lb2kKLQkgKiByZXR1cm5zIHRydWUpIHdlIHRyZWF0IGl0IGxpa2UgYSBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0IHNvIHdlCi0JICogdXNlIGhhbmRsZV9mYXN0ZW9pX2lycSBsaWtlIHRoZSBuYXRpdmUgY29kZSBkb2VzIGZvciB0aGlzIGtpbmQgb2YKKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCBpZiB0aGUgaW50ZXJydXB0IGlzIGxldmVsIHRyaWdnZXJlZCB3ZSB1c2UKKwkgKiBoYW5kbGVfZmFzdGVvaV9pcnEgbGlrZSB0aGUgbmF0aXZlIGNvZGUgZG9lcyBmb3IgdGhpcyBraW5kIG9mCiAJICogaW50ZXJydXB0cy4KKwkgKgogCSAqIERlcGVuZGluZyBvbiB0aGUgWGVuIHZlcnNpb24sIHBpcnFfbmVlZHNfZW9pIG1pZ2h0IHJldHVybiB0cnVlCiAJICogbm90IG9ubHkgZm9yIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIGJ1dCBmb3IgZWRnZSB0cmlnZ2VyZWQKIAkgKiBpbnRlcnJ1cHRzIHRvby4gSW4gYW55IGNhc2UgWGVuIGFsd2F5cyBob25vcnMgdGhlIGVvaSBtZWNoYW5pc20sCkBAIC02ODEsNyArNjgxLDcgQEAKIAkgKiBoYXNuJ3QgcmVjZWl2ZWQgYW4gZW9pIHlldC4gVGhlcmVmb3JlIHVzaW5nIHRoZSBmYXN0ZW9pIGhhbmRsZXIKIAkgKiBpcyB0aGUgcmlnaHQgY2hvaWNlIGVpdGhlciB3YXkuCiAJICovCi0JaWYgKHBpcnFfbmVlZHNfZW9pKGlycSkpCisJaWYgKHNoYXJlYWJsZSkKIAkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX3BpcnFfY2hpcCwKIAkJCQloYW5kbGVfZmFzdGVvaV9pcnEsIG5hbWUpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMgYi9kcml2ZXJzL3hlbi9zd2lvdGxiLXhlbi5jCmluZGV4IDY1ZWEyMWEuLjZlOGMxNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMKKysrIGIvZHJpdmVycy94ZW4vc3dpb3RsYi14ZW4uYwpAQCAtMTQ3LDkgKzE0NywxNSBAQAogewogCXVuc2lnbmVkIGxvbmcgYnl0ZXM7CiAJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgbnJfdGJsOwogCi0JeGVuX2lvX3RsYl9uc2xhYnMgPSAoNjQgKiAxMDI0ICogMTAyNCA+PiBJT19UTEJfU0hJRlQpOwotCXhlbl9pb190bGJfbnNsYWJzID0gQUxJR04oeGVuX2lvX3RsYl9uc2xhYnMsIElPX1RMQl9TRUdTSVpFKTsKKwlucl90YmwgPSBzd2lvbHRiX25yX3RibCgpOworCWlmIChucl90YmwpCisJCXhlbl9pb190bGJfbnNsYWJzID0gbnJfdGJsOworCWVsc2UgeworCQl4ZW5faW9fdGxiX25zbGFicyA9ICg2NCAqIDEwMjQgKiAxMDI0ID4+IElPX1RMQl9TSElGVCk7CisJCXhlbl9pb190bGJfbnNsYWJzID0gQUxJR04oeGVuX2lvX3RsYl9uc2xhYnMsIElPX1RMQl9TRUdTSVpFKTsKKwl9CiAKIAlieXRlcyA9IHhlbl9pb190bGJfbnNsYWJzIDw8IElPX1RMQl9TSElGVDsKIApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9yb290LmMgYi9mcy9hdXRvZnM0L3Jvb3QuYwppbmRleCA4N2Q5NWE4Li5mNTVhZTIzIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3Jvb3QuYworKysgYi9mcy9hdXRvZnM0L3Jvb3QuYwpAQCAtNTgzLDggKzU4Myw2IEBACiAJaWYgKCFhdXRvZnM0X296X21vZGUoc2JpKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQlkZW50cnlfdW5oYXNoKGRlbnRyeSk7Ci0KIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW5vLT5jb3VudCkpIHsKIAkJcF9pbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5LT5kX3BhcmVudCk7CiAJCWlmIChwX2lubyAmJiBkZW50cnktPmRfcGFyZW50ICE9IGRlbnRyeSkKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggMWYyYjE5OS4uMWEyNDIxZiAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTEyNzIsOCArMTI3Miw4IEBACiAJCSAqIGluZGl2aWR1YWwgd3JpdGVhYmxlIHJlZmVyZW5jZSBpcyB0b28gZnJhZ2lsZSBnaXZlbiB0aGUKIAkJICogd2F5IEBtb2RlIGlzIHVzZWQgaW4gYmxrZGV2X2dldC9wdXQoKS4KIAkJICovCi0JCWlmICgoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9CTE9DS19FVkVOVFNfT05fRVhDTF9XUklURSkgJiYKLQkJICAgICFyZXMgJiYgKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgIWJkZXYtPmJkX3dyaXRlX2hvbGRlcikgeworCQlpZiAoIXJlcyAmJiAobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiAhYmRldi0+YmRfd3JpdGVfaG9sZGVyICYmCisJCSAgICAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9CTE9DS19FVkVOVFNfT05fRVhDTF9XUklURSkpIHsKIAkJCWJkZXYtPmJkX3dyaXRlX2hvbGRlciA9IHRydWU7CiAJCQlkaXNrX2Jsb2NrX2V2ZW50cyhkaXNrKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaCBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKaW5kZXggOTNiMWFhOS4uNTJkN2VjYSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAorKysgYi9mcy9idHJmcy9idHJmc19pbm9kZS5oCkBAIC0xMjEsOSArMTIxLDYgQEAKIAkgKi8KIAl1NjQgaW5kZXhfY250OwogCi0JLyogdGhlIHN0YXJ0IG9mIGJsb2NrIGdyb3VwIHByZWZlcnJlZCBmb3IgYWxsb2NhdGlvbnMuICovCi0JdTY0IGJsb2NrX2dyb3VwOwotCiAJLyogdGhlIGZzeW5jIGxvZyBoYXMgc29tZSBjb3JuZXIgY2FzZXMgdGhhdCBtZWFuIHdlIGhhdmUgdG8gY2hlY2sKIAkgKiBkaXJlY3RvcmllcyB0byBzZWUgaWYgYW55IHVubGlua3MgaGF2ZSBiZWVuIGRvbmUgYmVmb3JlCiAJICogdGhlIGRpcmVjdG9yeSB3YXMgbG9nZ2VkLiAgU2VlIHRyZWUtbG9nLmMgZm9yIGFsbCB0aGUKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmMgYi9mcy9idHJmcy9jdHJlZS5jCmluZGV4IGIwZTE4ZDkuLjJlNjY3ODYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmMKKysrIGIvZnMvYnRyZnMvY3RyZWUuYwpAQCAtNDMsOCArNDMsNiBAQAogewogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXBhdGggPSBrbWVtX2NhY2hlX3phbGxvYyhidHJmc19wYXRoX2NhY2hlcCwgR0ZQX05PRlMpOwotCWlmIChwYXRoKQotCQlwYXRoLT5yZWFkYSA9IDE7CiAJcmV0dXJuIHBhdGg7CiB9CiAKQEAgLTEyMjQsMTEgKzEyMjIsMTMgQEAKIAl1NjQgc2VhcmNoOwogCXU2NCB0YXJnZXQ7CiAJdTY0IG5yZWFkID0gMDsKKwl1NjQgZ2VuOwogCWludCBkaXJlY3Rpb24gPSBwYXRoLT5yZWFkYTsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWI7CiAJdTMyIG5yOwogCXUzMiBibG9ja3NpemU7CiAJdTMyIG5zY2FuID0gMDsKKwlib29sIG1hcCA9IHRydWU7CiAKIAlpZiAobGV2ZWwgIT0gMSkKIAkJcmV0dXJuOwpAQCAtMTI1MCw3ICsxMjUwLDE5IEBACiAKIAlucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMobm9kZSk7CiAJbnIgPSBzbG90OworCWlmIChub2RlLT5tYXBfdG9rZW4gfHwgcGF0aC0+c2tpcF9sb2NraW5nKQorCQltYXAgPSBmYWxzZTsKKwogCXdoaWxlICgxKSB7CisJCWlmIChtYXAgJiYgIW5vZGUtPm1hcF90b2tlbikgeworCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBidHJmc19ub2RlX2tleV9wdHJfb2Zmc2V0KG5yKTsKKwkJCW1hcF9wcml2YXRlX2V4dGVudF9idWZmZXIobm9kZSwgb2Zmc2V0LAorCQkJCQkJICBzaXplb2Yoc3RydWN0IGJ0cmZzX2tleV9wdHIpLAorCQkJCQkJICAmbm9kZS0+bWFwX3Rva2VuLAorCQkJCQkJICAmbm9kZS0+a2FkZHIsCisJCQkJCQkgICZub2RlLT5tYXBfc3RhcnQsCisJCQkJCQkgICZub2RlLT5tYXBfbGVuLCBLTV9VU0VSMSk7CisJCX0KIAkJaWYgKGRpcmVjdGlvbiA8IDApIHsKIAkJCWlmIChuciA9PSAwKQogCQkJCWJyZWFrOwpAQCAtMTI2OCwxNCArMTI4MCwyMyBAQAogCQlzZWFyY2ggPSBidHJmc19ub2RlX2Jsb2NrcHRyKG5vZGUsIG5yKTsKIAkJaWYgKChzZWFyY2ggPD0gdGFyZ2V0ICYmIHRhcmdldCAtIHNlYXJjaCA8PSA2NTUzNikgfHwKIAkJICAgIChzZWFyY2ggPiB0YXJnZXQgJiYgc2VhcmNoIC0gdGFyZ2V0IDw9IDY1NTM2KSkgewotCQkJcmVhZGFoZWFkX3RyZWVfYmxvY2socm9vdCwgc2VhcmNoLCBibG9ja3NpemUsCi0JCQkJICAgICBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKG5vZGUsIG5yKSk7CisJCQlnZW4gPSBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKG5vZGUsIG5yKTsKKwkJCWlmIChtYXAgJiYgbm9kZS0+bWFwX3Rva2VuKSB7CisJCQkJdW5tYXBfZXh0ZW50X2J1ZmZlcihub2RlLCBub2RlLT5tYXBfdG9rZW4sCisJCQkJCQkgICAgS01fVVNFUjEpOworCQkJCW5vZGUtPm1hcF90b2tlbiA9IE5VTEw7CisJCQl9CisJCQlyZWFkYWhlYWRfdHJlZV9ibG9jayhyb290LCBzZWFyY2gsIGJsb2Nrc2l6ZSwgZ2VuKTsKIAkJCW5yZWFkICs9IGJsb2Nrc2l6ZTsKIAkJfQogCQluc2NhbisrOwogCQlpZiAoKG5yZWFkID4gNjU1MzYgfHwgbnNjYW4gPiAzMikpCiAJCQlicmVhazsKIAl9CisJaWYgKG1hcCAmJiBub2RlLT5tYXBfdG9rZW4pIHsKKwkJdW5tYXBfZXh0ZW50X2J1ZmZlcihub2RlLCBub2RlLT5tYXBfdG9rZW4sIEtNX1VTRVIxKTsKKwkJbm9kZS0+bWFwX3Rva2VuID0gTlVMTDsKKwl9CiB9CiAKIC8qCkBAIC0xNjQ4LDkgKzE2NjksNiBAQAogCQl9CiBjb3dfZG9uZToKIAkJQlVHX09OKCFjb3cgJiYgaW5zX2xlbik7Ci0JCWlmIChsZXZlbCAhPSBidHJmc19oZWFkZXJfbGV2ZWwoYikpCi0JCQlXQVJOX09OKDEpOwotCQlsZXZlbCA9IGJ0cmZzX2hlYWRlcl9sZXZlbChiKTsKIAogCQlwLT5ub2Rlc1tsZXZlbF0gPSBiOwogCQlpZiAoIXAtPnNraXBfbG9ja2luZykKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IDZjMDkzZmE5Li4zNzhiNWI0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTkzMCw3ICs5MzAsNiBAQAogCSAqIGlzIHJlcXVpcmVkIGluc3RlYWQgb2YgdGhlIGZhc3RlciBzaG9ydCBmc3luYyBsb2cgY29tbWl0cwogCSAqLwogCXU2NCBsYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdDsKLQl1NjQgb3Blbl9pb2N0bF90cmFuczsKIAl1bnNpZ25lZCBsb25nIG1vdW50X29wdDoyMDsKIAl1bnNpZ25lZCBsb25nIGNvbXByZXNzX3R5cGU6NDsKIAl1NjQgbWF4X2lubGluZTsKQEAgLTk0Nyw3ICs5NDYsNiBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJc3RydWN0IGlub2RlICpidHJlZV9pbm9kZTsKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBiZGk7Ci0Jc3RydWN0IG11dGV4IHRyYW5zX211dGV4OwogCXN0cnVjdCBtdXRleCB0cmVlX2xvZ19tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggdHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggY2xlYW5lcl9tdXRleDsKQEAgLTk2OCw2ICs5NjYsNyBAQAogCXN0cnVjdCByd19zZW1hcGhvcmUgc3Vidm9sX3NlbTsKIAlzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qgc3Vidm9sX3NyY3U7CiAKKwlzcGlubG9ja190IHRyYW5zX2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCB0cmFuc19saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgaGFzaGVyczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlYWRfcm9vdHM7CkBAIC05ODAsNiArOTc5LDcgQEAKIAlhdG9taWNfdCBhc3luY19zdWJtaXRfZHJhaW5pbmc7CiAJYXRvbWljX3QgbnJfYXN5bmNfYmlvczsKIAlhdG9taWNfdCBhc3luY19kZWxhbGxvY19wYWdlczsKKwlhdG9taWNfdCBvcGVuX2lvY3RsX3RyYW5zOwogCiAJLyoKIAkgKiB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhbGFuY2luZyBjb2RlIHRvIHdhaXQgZm9yIGFsbCB0aGUgcGVuZGluZwpAQCAtMTA0NCw2ICsxMDQ0LDcgQEAKIAlpbnQgY2xvc2luZzsKIAlpbnQgbG9nX3Jvb3RfcmVjb3ZlcmluZzsKIAlpbnQgZW5vc3BjX3VubGluazsKKwlpbnQgdHJhbnNfbm9fam9pbjsKIAogCXU2NCB0b3RhbF9waW5uZWQ7CiAKQEAgLTEwNjUsNyArMTA2Niw2IEBACiAJc3RydWN0IHJlbG9jX2NvbnRyb2wgKnJlbG9jX2N0bDsKIAogCXNwaW5sb2NrX3QgZGVsYWxsb2NfbG9jazsKLQlzcGlubG9ja190IG5ld190cmFuc19sb2NrOwogCXU2NCBkZWxhbGxvY19ieXRlczsKIAogCS8qIGRhdGFfYWxsb2NfY2x1c3RlciBpcyBvbmx5IHVzZWQgaW4gc3NkIG1vZGUgKi8KQEAgLTEzNDAsNiArMTM0MCw3IEBACiAjZGVmaW5lIEJUUkZTX01PVU5UX1VTRVJfU1VCVk9MX1JNX0FMTE9XRUQgKDEgPDwgMTQpCiAjZGVmaW5lIEJUUkZTX01PVU5UX0VOT1NQQ19ERUJVRwkgKDEgPDwgMTUpCiAjZGVmaW5lIEJUUkZTX01PVU5UX0FVVE9fREVGUkFHCQkoMSA8PCAxNikKKyNkZWZpbmUgQlRSRlNfTU9VTlRfSU5PREVfTUFQX0NBQ0hFCSgxIDw8IDE3KQogCiAjZGVmaW5lIGJ0cmZzX2NsZWFyX29wdChvLCBvcHQpCQkoKG8pICY9IH5CVFJGU19NT1VOVF8jI29wdCkKICNkZWZpbmUgYnRyZnNfc2V0X29wdChvLCBvcHQpCQkoKG8pIHw9IEJUUkZTX01PVU5UXyMjb3B0KQpAQCAtMjIzOCw2ICsyMjM5LDkgQEAKIHZvaWQgYnRyZnNfYmxvY2tfcnN2X3JlbGVhc2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkgICAgIHN0cnVjdCBidHJmc19ibG9ja19yc3YgKmJsb2NrX3JzdiwKIAkJCSAgICAgdTY0IG51bV9ieXRlcyk7CitpbnQgYnRyZnNfdHJ1bmNhdGVfcmVzZXJ2ZV9tZXRhZGF0YShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJICAgIHN0cnVjdCBidHJmc19ibG9ja19yc3YgKnJzdik7CiBpbnQgYnRyZnNfc2V0X2Jsb2NrX2dyb3VwX3JvKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlKTsKIGludCBidHJmc19zZXRfYmxvY2tfZ3JvdXBfcncoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCkBAIC0yMzUwLDYgKzIzNTQsMTUgQEAKIAkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJc3RydWN0IGV4dGVudF9idWZmZXIgKm5vZGUsCiAJCQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcGFyZW50KTsKK3N0YXRpYyBpbmxpbmUgaW50IGJ0cmZzX2ZzX2Nsb3Npbmcoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8pCit7CisJLyoKKwkgKiBHZXQgc3luY2VkIHdpdGggY2xvc2VfY3RyZWUoKQorCSAqLworCXNtcF9tYigpOworCXJldHVybiBmc19pbmZvLT5jbG9zaW5nOworfQorCiAvKiByb290LWl0ZW0uYyAqLwogaW50IGJ0cmZzX2ZpbmRfcm9vdF9yZWYoc3RydWN0IGJ0cmZzX3Jvb3QgKnRyZWVfcm9vdCwKIAkJCXN0cnVjdCBidHJmc19wYXRoICpwYXRoLApAQCAtMjUxMiw4ICsyNTI1LDcgQEAKIGludCBidHJmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGludCBidHJmc19jcmVhdGVfc3Vidm9sX3Jvb3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpuZXdfcm9vdCwKLQkJCSAgICAgdTY0IG5ld19kaXJpZCwgdTY0IGFsbG9jX2hpbnQpOworCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqbmV3X3Jvb3QsIHU2NCBuZXdfZGlyaWQpOwogaW50IGJ0cmZzX21lcmdlX2Jpb19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCSBzaXplX3Qgc2l6ZSwgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBsb25nIGJpb19mbGFncyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2RlbGF5ZWQtaW5vZGUuYyBiL2ZzL2J0cmZzL2RlbGF5ZWQtaW5vZGUuYwppbmRleCAwMWUyOTUwLi42NDYyYzI5IDEwMDY0NAotLS0gYS9mcy9idHJmcy9kZWxheWVkLWlub2RlLmMKKysrIGIvZnMvYnRyZnMvZGVsYXllZC1pbm9kZS5jCkBAIC02NzgsNiArNjc4LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmaGVhZCk7CiAKIAluZXh0ID0gaXRlbTsKKwluaXRlbXMgPSAwOwogCiAJLyoKIAkgKiBjb3VudCB0aGUgbnVtYmVyIG9mIHRoZSBjb250aW51b3VzIGl0ZW1zIHRoYXQgd2UgY2FuIGluc2VydCBpbiBiYXRjaApAQCAtMTEyOSw3ICsxMTMwLDcgQEAKIAlkZWxheWVkX25vZGUgPSBhc3luY19ub2RlLT5kZWxheWVkX25vZGU7CiAJcm9vdCA9IGRlbGF5ZWRfbm9kZS0+cm9vdDsKIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpCiAJCWdvdG8gZnJlZV9wYXRoOwogCkBAIC0xNTcyLDggKzE1NzMsNyBAQAogCWJ0cmZzX3NldF9zdGFja19pbm9kZV90cmFuc2lkKGlub2RlX2l0ZW0sIHRyYW5zLT50cmFuc2lkKTsKIAlidHJmc19zZXRfc3RhY2tfaW5vZGVfcmRldihpbm9kZV9pdGVtLCBpbm9kZS0+aV9yZGV2KTsKIAlidHJmc19zZXRfc3RhY2tfaW5vZGVfZmxhZ3MoaW5vZGVfaXRlbSwgQlRSRlNfSShpbm9kZSktPmZsYWdzKTsKLQlidHJmc19zZXRfc3RhY2tfaW5vZGVfYmxvY2tfZ3JvdXAoaW5vZGVfaXRlbSwKLQkJCQkJICBCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXApOworCWJ0cmZzX3NldF9zdGFja19pbm9kZV9ibG9ja19ncm91cChpbm9kZV9pdGVtLCAwKTsKIAogCWJ0cmZzX3NldF9zdGFja190aW1lc3BlY19zZWMoYnRyZnNfaW5vZGVfYXRpbWUoaW5vZGVfaXRlbSksCiAJCQkJICAgICBpbm9kZS0+aV9hdGltZS50dl9zZWMpOwpAQCAtMTU5NSw3ICsxNTk1LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9ub2RlICpkZWxheWVkX25vZGU7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWRlbGF5ZWRfbm9kZSA9IGJ0cmZzX2dldF9vcl9jcmVhdGVfZGVsYXllZF9ub2RlKGlub2RlKTsKIAlpZiAoSVNfRVJSKGRlbGF5ZWRfbm9kZSkpCmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggOThiNmE3MS4uOWY2OGM2OCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtMTUwNSwyNCArMTUwNSwyNCBAQAogCQl2ZnNfY2hlY2tfZnJvemVuKHJvb3QtPmZzX2luZm8tPnNiLCBTQl9GUkVFWkVfV1JJVEUpOwogCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl9rdGhyZWFkX211dGV4KTsKIAotCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJY3VyID0gcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbjsKIAkJaWYgKCFjdXIpIHsKLQkJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJCQlnb3RvIHNsZWVwOwogCQl9CiAKIAkJbm93ID0gZ2V0X3NlY29uZHMoKTsKIAkJaWYgKCFjdXItPmJsb2NrZWQgJiYKIAkJICAgIChub3cgPCBjdXItPnN0YXJ0X3RpbWUgfHwgbm93IC0gY3VyLT5zdGFydF90aW1lIDwgMzApKSB7Ci0JCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQkJZGVsYXkgPSBIWiAqIDU7CiAJCQlnb3RvIHNsZWVwOwogCQl9CiAJCXRyYW5zaWQgPSBjdXItPnRyYW5zaWQ7Ci0JCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlpZiAodHJhbnNpZCA9PSB0cmFucy0+dHJhbnNpZCkgewogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKQEAgLTE2MTMsNyArMTYxMyw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPm9yZGVyZWRfb3BlcmF0aW9ucyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmNhY2hpbmdfYmxvY2tfZ3JvdXBzKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPnJlZl9jYWNoZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPmRlbGF5ZWRfaXB1dF9sb2NrKTsKQEAgLTE2NDUsNiArMTY0NSw3IEBACiAJZnNfaW5mby0+bWF4X2lubGluZSA9IDgxOTIgKiAxMDI0OwogCWZzX2luZm8tPm1ldGFkYXRhX3JhdGlvID0gMDsKIAlmc19pbmZvLT5kZWZyYWdfaW5vZGVzID0gUkJfUk9PVDsKKwlmc19pbmZvLT50cmFuc19ub19qb2luID0gMDsKIAogCWZzX2luZm8tPnRocmVhZF9wb29sX3NpemUgPSBtaW5fdCh1bnNpZ25lZCBsb25nLAogCQkJCQkgIG51bV9vbmxpbmVfY3B1cygpICsgMiwgOCk7CkBAIC0xNjY3LDggKzE2NjgsNiBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZzX2luZm8tPnNjcnViX3BhdXNlX3dhaXQpOwogCWluaXRfcndzZW0oJmZzX2luZm8tPnNjcnViX3N1cGVyX2xvY2spOwogCWZzX2luZm8tPnNjcnViX3dvcmtlcnNfcmVmY250ID0gMDsKLQlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPnNjcnViX3dvcmtlcnMsICJzY3J1YiIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLCAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCiAJc2ItPnNfYmxvY2tzaXplID0gNDA5NjsKIAlzYi0+c19ibG9ja3NpemVfYml0cyA9IGJsa3NpemVfYml0cyg0MDk2KTsKQEAgLTE3MDksNyArMTcwOCw2IEBACiAJZnNfaW5mby0+ZG9fYmFycmllcnMgPSAxOwogCiAKLQltdXRleF9pbml0KCZmc19pbmZvLT50cmFuc19tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZnNfaW5mby0+b3JkZXJlZF9vcGVyYXRpb25zX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT50cmVlX2xvZ19tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZnNfaW5mby0+Y2h1bmtfbXV0ZXgpOwpAQCAtMjQ3OSwxMyArMjQ3NywxMyBAQAogCWRvd25fd3JpdGUoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOwogCXVwX3dyaXRlKCZyb290LT5mc19pbmZvLT5jbGVhbnVwX3dvcmtfc2VtKTsKIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCUJVR19PTihyZXQpOwogCS8qIHJ1biBjb21taXQgYWdhaW4gdG8gZHJvcCB0aGUgb3JpZ2luYWwgc25hcHNob3QgKi8KLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKQEAgLTI5MTEsOSArMjkwOSw4IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmc3BsaWNlKTsKIAotCWxpc3Rfc3BsaWNlX2luaXQoJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2lub2RlcywgJnNwbGljZSk7Ci0KIAlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCWxpc3Rfc3BsaWNlX2luaXQoJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2lub2RlcywgJnNwbGljZSk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnNwbGljZSkpIHsKIAkJYnRyZnNfaW5vZGUgPSBsaXN0X2VudHJ5KHNwbGljZS5uZXh0LCBzdHJ1Y3QgYnRyZnNfaW5vZGUsCkBAIC0zMDI0LDEwICszMDIxLDEzIEBACiAKIAlXQVJOX09OKDEpOwogCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX2t0aHJlYWRfbXV0ZXgpOwogCisJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAlsaXN0X3NwbGljZV9pbml0KCZyb290LT5mc19pbmZvLT50cmFuc19saXN0LCAmbGlzdCk7CisJcm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbiA9IDE7CisJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgewogCQl0ID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCBidHJmc190cmFuc2FjdGlvbiwgbGlzdCk7CiAJCWlmICghdCkKQEAgLTMwNTIsMjMgKzMwNTIsMTggQEAKIAkJdC0+YmxvY2tlZCA9IDA7CiAJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl93YWl0KSkKIAkJCXdha2VfdXAoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQpOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCXQtPmNvbW1pdF9kb25lID0gMTsKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnQtPmNvbW1pdF93YWl0KSkKIAkJCXdha2VfdXAoJnQtPmNvbW1pdF93YWl0KTsKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0KLQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCiAJCWJ0cmZzX2Rlc3Ryb3lfcGVuZGluZ19zbmFwc2hvdHModCk7CiAKIAkJYnRyZnNfZGVzdHJveV9kZWxhbGxvY19pbm9kZXMocm9vdCk7CiAKLQkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBOVUxMOwotCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAKIAkJYnRyZnNfZGVzdHJveV9tYXJrZWRfZXh0ZW50cyhyb290LCAmdC0+ZGlydHlfcGFnZXMsCiAJCQkJCSAgICAgRVhURU5UX0RJUlRZKTsKQEAgLTMwODIsOCArMzA3NywxMCBAQAogCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfdHJhbnNhY3Rpb25fY2FjaGVwLCB0KTsKIAl9CiAKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCXJvb3QtPmZzX2luZm8tPnRyYW5zX25vX2pvaW4gPSAwOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX2t0aHJlYWRfbXV0ZXgpOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCAxNjliZDYyLi5iNDJlZmMyIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogCSAqLwogCXBhdGgtPnNraXBfbG9ja2luZyA9IDE7CiAJcGF0aC0+c2VhcmNoX2NvbW1pdF9yb290ID0gMTsKLQlwYXRoLT5yZWFkYSA9IDI7CisJcGF0aC0+cmVhZGEgPSAxOwogCiAJa2V5Lm9iamVjdGlkID0gbGFzdDsKIAlrZXkub2Zmc2V0ID0gMDsKQEAgLTM2Niw4ICszNjYsNyBAQAogCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKIAogCXdoaWxlICgxKSB7Ci0JCXNtcF9tYigpOwotCQlpZiAoZnNfaW5mby0+Y2xvc2luZyA+IDEpIHsKKwkJaWYgKGJ0cmZzX2ZzX2Nsb3NpbmcoZnNfaW5mbykgPiAxKSB7CiAJCQlsYXN0ID0gKHU2NCktMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zNzksMTUgKzM3OCwxOCBAQAogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAotCQkJY2FjaGluZ19jdGwtPnByb2dyZXNzID0gbGFzdDsKLQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKLQkJCXVwX3JlYWQoJmZzX2luZm8tPmV4dGVudF9jb21taXRfc2VtKTsKLQkJCW11dGV4X3VubG9jaygmY2FjaGluZ19jdGwtPm11dGV4KTsKLQkJCWlmIChidHJmc190cmFuc2FjdGlvbl9pbl9jb21taXQoZnNfaW5mbykpCi0JCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKLQkJCWVsc2UKKwkJCWlmIChuZWVkX3Jlc2NoZWQoKSB8fAorCQkJICAgIGJ0cmZzX25leHRfbGVhZihleHRlbnRfcm9vdCwgcGF0aCkpIHsKKwkJCQljYWNoaW5nX2N0bC0+cHJvZ3Jlc3MgPSBsYXN0OworCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKKwkJCQl1cF9yZWFkKCZmc19pbmZvLT5leHRlbnRfY29tbWl0X3NlbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZjYWNoaW5nX2N0bC0+bXV0ZXgpOwogCQkJCWNvbmRfcmVzY2hlZCgpOwotCQkJZ290byBhZ2FpbjsKKwkJCQlnb3RvIGFnYWluOworCQkJfQorCQkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCQkJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpOworCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAoa2V5Lm9iamVjdGlkIDwgYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCkgewpAQCAtMzA2NSw3ICszMDY3LDcgQEAKIAkJCXNwaW5fdW5sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKIGFsbG9jOgogCQkJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMSk7Ci0JCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJCQlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAKQEAgLTMwODcsMTMgKzMwODksMjEgQEAKIAkJCX0KIAkJCWdvdG8gYWdhaW47CiAJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGxlc3MgcGlubmVkIGJ5dGVzIHRoYW4gd2Ugd2FudCB0byBhbGxvY2F0ZSB0aGVuCisJCSAqIGRvbid0IGJvdGhlciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbiwgaXQgd29uJ3QgaGVscCB1cy4KKwkJICovCisJCWlmIChkYXRhX3NpbmZvLT5ieXRlc19waW5uZWQgPCBieXRlcykKKwkJCWNvbW1pdHRlZCA9IDE7CiAJCXNwaW5fdW5sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKIAogCQkvKiBjb21taXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIHRyeSBhZ2FpbiAqLwogY29tbWl0X3RyYW5zOgotCQlpZiAoIWNvbW1pdHRlZCAmJiAhcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucykgeworCQlpZiAoIWNvbW1pdHRlZCAmJgorCQkgICAgIWF0b21pY19yZWFkKCZyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSkgewogCQkJY29tbWl0dGVkID0gMTsKLQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJCWlmIChJU19FUlIodHJhbnMpKQogCQkJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CkBAIC0zNDcyLDcgKzM0ODIsNyBAQAogCQlnb3RvIG91dDsKIAogCXJldCA9IC1FTk9TUEM7Ci0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJZ290byBvdXQ7CiAJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKQEAgLTM2OTksNyArMzcwOSw3IEBACiAJCWlmICh0cmFucykKIAkJCXJldHVybiAtRUFHQUlOOwogCi0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJCXJldHVybiAwOwpAQCAtMzgzNyw2ICszODQ3LDM3IEBACiAJV0FSTl9PTihmc19pbmZvLT5jaHVua19ibG9ja19yc3YucmVzZXJ2ZWQgPiAwKTsKIH0KIAoraW50IGJ0cmZzX3RydW5jYXRlX3Jlc2VydmVfbWV0YWRhdGEoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCSAgICBzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpyc3YpCit7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqdHJhbnNfcnN2ID0gJnJvb3QtPmZzX2luZm8tPnRyYW5zX2Jsb2NrX3JzdjsKKwl1NjQgbnVtX2J5dGVzOworCWludCByZXQ7CisKKwkvKgorCSAqIFRydW5jYXRlIHNob3VsZCBiZSBmcmVlaW5nIGRhdGEsIGJ1dCBnaXZlIHVzIDIgaXRlbXMganVzdCBpbiBjYXNlIGl0CisJICogbmVlZHMgdG8gdXNlIHNvbWUgc3BhY2UuICBXZSBtYXkgd2FudCB0byBiZSBzbWFydGVyIGFib3V0IHRoaXMgaW4gdGhlCisJICogZnV0dXJlLgorCSAqLworCW51bV9ieXRlcyA9IGJ0cmZzX2NhbGNfdHJhbnNfbWV0YWRhdGFfc2l6ZShyb290LCAyKTsKKworCS8qIFdlIGFscmVhZHkgaGF2ZSBlbm91Z2ggYnl0ZXMsIGp1c3QgcmV0dXJuICovCisJaWYgKHJzdi0+cmVzZXJ2ZWQgPj0gbnVtX2J5dGVzKQorCQlyZXR1cm4gMDsKKworCW51bV9ieXRlcyAtPSByc3YtPnJlc2VydmVkOworCisJLyoKKwkgKiBZb3Ugc2hvdWxkIGhhdmUgcmVzZXJ2ZWQgZW5vdWdoIHNwYWNlIGJlZm9yZSBoYW5kIHRvIGRvIHRoaXMsIHNvIHRoaXMKKwkgKiBzaG91bGQgbm90IGZhaWwuCisJICovCisJcmV0ID0gYmxvY2tfcnN2X21pZ3JhdGVfYnl0ZXModHJhbnNfcnN2LCByc3YsIG51bV9ieXRlcyk7CisJQlVHX09OKHJldCk7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IGJ0cmZzX3RyYW5zX3Jlc2VydmVfbWV0YWRhdGEoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSBpbnQgbnVtX2l0ZW1zKQpAQCAtMzg3NywyMyArMzkxOCwxOCBAQAogCXN0cnVjdCBidHJmc19ibG9ja19yc3YgKmRzdF9yc3YgPSByb290LT5vcnBoYW5fYmxvY2tfcnN2OwogCiAJLyoKLQkgKiBvbmUgZm9yIGRlbGV0aW5nIG9ycGhhbiBpdGVtLCBvbmUgZm9yIHVwZGF0aW5nIGlub2RlIGFuZAotCSAqIHR3byBmb3IgY2FsbGluZyBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcy4KLQkgKgotCSAqIGJ0cmZzX3RydW5jYXRlX2lub2RlX2l0ZW1zIGlzIGEgZGVsZXRlIG9wZXJhdGlvbiwgaXQgZnJlZXMKLQkgKiBtb3JlIHNwYWNlIHRoYW4gaXQgdXNlcyBpbiBtb3N0IGNhc2VzLiBTbyB0d28gdW5pdHMgb2YKLQkgKiBtZXRhZGF0YSBzcGFjZSBzaG91bGQgYmUgZW5vdWdoIGZvciBjYWxsaW5nIGl0IG1hbnkgdGltZXMuCi0JICogSWYgYWxsIG9mIHRoZSBtZXRhZGF0YSBzcGFjZSBpcyB1c2VkLCB3ZSBjYW4gY29tbWl0Ci0JICogdHJhbnNhY3Rpb24gYW5kIHVzZSBzcGFjZSBpdCBmcmVlZC4KKwkgKiBXZSBuZWVkIHRvIGhvbGQgc3BhY2UgaW4gb3JkZXIgdG8gZGVsZXRlIG91ciBvcnBoYW4gaXRlbSBvbmNlIHdlJ3ZlCisJICogYWRkZWQgaXQsIHNvIHRoaXMgdGFrZXMgdGhlIHJlc2VydmF0aW9uIHNvIHdlIGNhbiByZWxlYXNlIGl0IGxhdGVyCisJICogd2hlbiB3ZSBhcmUgdHJ1bHkgZG9uZSB3aXRoIHRoZSBvcnBoYW4gaXRlbS4KIAkgKi8KLQl1NjQgbnVtX2J5dGVzID0gYnRyZnNfY2FsY190cmFuc19tZXRhZGF0YV9zaXplKHJvb3QsIDQpOworCXU2NCBudW1fYnl0ZXMgPSBidHJmc19jYWxjX3RyYW5zX21ldGFkYXRhX3NpemUocm9vdCwgMSk7CiAJcmV0dXJuIGJsb2NrX3Jzdl9taWdyYXRlX2J5dGVzKHNyY19yc3YsIGRzdF9yc3YsIG51bV9ieXRlcyk7CiB9CiAKIHZvaWQgYnRyZnNfb3JwaGFuX3JlbGVhc2VfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwotCXU2NCBudW1fYnl0ZXMgPSBidHJmc19jYWxjX3RyYW5zX21ldGFkYXRhX3NpemUocm9vdCwgNCk7CisJdTY0IG51bV9ieXRlcyA9IGJ0cmZzX2NhbGNfdHJhbnNfbWV0YWRhdGFfc2l6ZShyb290LCAxKTsKIAlidHJmc19ibG9ja19yc3ZfcmVsZWFzZShyb290LCByb290LT5vcnBoYW5fYmxvY2tfcnN2LCBudW1fYnl0ZXMpOwogfQogCkBAIC00OTg3LDYgKzUwMjMsMTUgQEAKIAkJaWYgKHVubGlrZWx5KGJsb2NrX2dyb3VwLT5ybykpCiAJCQlnb3RvIGxvb3A7CiAKKwkJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9jdGwtPnRyZWVfbG9jayk7CisJCWlmIChjYWNoZWQgJiYKKwkJICAgIGJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2N0bC0+ZnJlZV9zcGFjZSA8CisJCSAgICBudW1fYnl0ZXMgKyBlbXB0eV9zaXplKSB7CisJCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsLT50cmVlX2xvY2spOworCQkJZ290byBsb29wOworCQl9CisJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9jdGwtPnRyZWVfbG9jayk7CisKIAkJLyoKIAkJICogT2sgd2Ugd2FudCB0byB0cnkgYW5kIHVzZSB0aGUgY2x1c3RlciBhbGxvY2F0b3IsIHNvIGxldHMgbG9vawogCQkgKiB0aGVyZSwgdW5sZXNzIHdlIGFyZSBvbiBMT09QX05PX0VNUFRZX1NJWkUsIHNpbmNlIHdlIHdpbGwKQEAgLTUxNTAsNiArNTE5NSw3IEBACiAJCQlidHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2Zmc2V0LAogCQkJCQkgICAgIHNlYXJjaF9zdGFydCAtIG9mZnNldCk7CiAJCUJVR19PTihvZmZzZXQgPiBzZWFyY2hfc3RhcnQpOworCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCQlicmVhazsKIGxvb3A6CiAJCWZhaWxlZF9jbHVzdGVyX3JlZmlsbCA9IGZhbHNlOwpAQCAtNTE3Miw5ICs1MjE4LDcgQEAKIAkgKiBMT09QX05PX0VNUFRZX1NJWkUsIHNldCBlbXB0eV9zaXplIGFuZCBlbXB0eV9jbHVzdGVyIHRvIDAgYW5kIHRyeQogCSAqCQkJYWdhaW4KIAkgKi8KLQlpZiAoIWlucy0+b2JqZWN0aWQgJiYgbG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSAmJgotCSAgICAoZm91bmRfdW5jYWNoZWRfYmcgfHwgZW1wdHlfc2l6ZSB8fCBlbXB0eV9jbHVzdGVyIHx8Ci0JICAgICBhbGxvd2VkX2NodW5rX2FsbG9jKSkgeworCWlmICghaW5zLT5vYmplY3RpZCAmJiBsb29wIDwgTE9PUF9OT19FTVBUWV9TSVpFKSB7CiAJCWluZGV4ID0gMDsKIAkJaWYgKGxvb3AgPT0gTE9PUF9GSU5EX0lERUFMICYmIGZvdW5kX3VuY2FjaGVkX2JnKSB7CiAJCQlmb3VuZF91bmNhY2hlZF9iZyA9IGZhbHNlOwpAQCAtNTIxNCw0MiArNTI1OCwzOSBAQAogCQkJZ290byBzZWFyY2g7CiAJCX0KIAotCQlpZiAobG9vcCA8IExPT1BfQ0FDSElOR19XQUlUKSB7Ci0JCQlsb29wKys7Ci0JCQlnb3RvIHNlYXJjaDsKLQkJfQorCQlsb29wKys7CiAKIAkJaWYgKGxvb3AgPT0gTE9PUF9BTExPQ19DSFVOSykgeworCQkgICAgICAgaWYgKGFsbG93ZWRfY2h1bmtfYWxsb2MpIHsKKwkJCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgbnVtX2J5dGVzICsKKwkJCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLAorCQkJCQkJICAgICBDSFVOS19BTExPQ19MSU1JVEVEKTsKKwkJCQlhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKKwkJCQlpZiAocmV0ID09IDEpCisJCQkJCWRvbmVfY2h1bmtfYWxsb2MgPSAxOworCQkJfSBlbHNlIGlmICghZG9uZV9jaHVua19hbGxvYyAmJgorCQkJCSAgIHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID09CisJCQkJICAgQ0hVTktfQUxMT0NfTk9fRk9SQ0UpIHsKKwkJCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IENIVU5LX0FMTE9DX0xJTUlURUQ7CisJCQl9CisKKwkJICAgICAgIC8qCisJCQkqIFdlIGRpZG4ndCBhbGxvY2F0ZSBhIGNodW5rLCBnbyBhaGVhZCBhbmQgZHJvcCB0aGUKKwkJCSogZW1wdHkgc2l6ZSBhbmQgbG9vcCBhZ2Fpbi4KKwkJCSovCisJCSAgICAgICBpZiAoIWRvbmVfY2h1bmtfYWxsb2MpCisJCQkgICAgICAgbG9vcCA9IExPT1BfTk9fRU1QVFlfU0laRTsKKwkJfQorCisJCWlmIChsb29wID09IExPT1BfTk9fRU1QVFlfU0laRSkgewogCQkJZW1wdHlfc2l6ZSA9IDA7CiAJCQllbXB0eV9jbHVzdGVyID0gMDsKIAkJfQogCi0JCWlmIChhbGxvd2VkX2NodW5rX2FsbG9jKSB7Ci0JCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgbnVtX2J5dGVzICsKLQkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGRhdGEsCi0JCQkJCSAgICAgQ0hVTktfQUxMT0NfTElNSVRFRCk7Ci0JCQlhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKLQkJCWRvbmVfY2h1bmtfYWxsb2MgPSAxOwotCQl9IGVsc2UgaWYgKCFkb25lX2NodW5rX2FsbG9jICYmCi0JCQkgICBzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9PSBDSFVOS19BTExPQ19OT19GT1JDRSkgewotCQkJc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPSBDSFVOS19BTExPQ19MSU1JVEVEOwotCQl9Ci0KLQkJaWYgKGxvb3AgPCBMT09QX05PX0VNUFRZX1NJWkUpIHsKLQkJCWxvb3ArKzsKLQkJCWdvdG8gc2VhcmNoOwotCQl9Ci0JCXJldCA9IC1FTk9TUEM7CisJCWdvdG8gc2VhcmNoOwogCX0gZWxzZSBpZiAoIWlucy0+b2JqZWN0aWQpIHsKIAkJcmV0ID0gLUVOT1NQQzsKLQl9Ci0KLQkvKiB3ZSBmb3VuZCB3aGF0IHdlIG5lZWRlZCAqLwotCWlmIChpbnMtPm9iamVjdGlkKSB7Ci0JCWlmICghKGRhdGEgJiBCVFJGU19CTE9DS19HUk9VUF9EQVRBKSkKLQkJCXRyYW5zLT5ibG9ja19ncm91cCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7Ci0KLQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwl9IGVsc2UgaWYgKGlucy0+b2JqZWN0aWQpIHsKIAkJcmV0ID0gMDsKIAl9CiAKQEAgLTY1MjYsNyArNjU2Nyw3IEBACiAKIAlCVUdfT04oY2FjaGUtPnJvKTsKIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJYWxsb2NfZmxhZ3MgPSB1cGRhdGVfYmxvY2tfZ3JvdXBfZmxhZ3Mocm9vdCwgY2FjaGUtPmZsYWdzKTsKQEAgLTY4ODIsNiArNjkyMyw3IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOworCXBhdGgtPnJlYWRhID0gMTsKIAogCWNhY2hlX2dlbiA9IGJ0cmZzX3N1cGVyX2NhY2hlX2dlbmVyYXRpb24oJnJvb3QtPmZzX2luZm8tPnN1cGVyX2NvcHkpOwogCWlmIChjYWNoZV9nZW4gIT0gMCAmJgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMgYi9mcy9idHJmcy9leHRlbnRfaW8uYwppbmRleCBjNWQ5ZmJiLi43MDU1ZDExIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uYworKysgYi9mcy9idHJmcy9leHRlbnRfaW8uYwpAQCAtMTQ3Niw3ICsxNDc2LDcgQEAKIAkJCWlmICh0b3RhbF9ieXRlcyA+PSBtYXhfYnl0ZXMpCiAJCQkJYnJlYWs7CiAJCQlpZiAoIWZvdW5kKSB7Ci0JCQkJKnN0YXJ0ID0gc3RhdGUtPnN0YXJ0OworCQkJCSpzdGFydCA9IG1heChjdXJfc3RhcnQsIHN0YXRlLT5zdGFydCk7CiAJCQkJZm91bmQgPSAxOwogCQkJfQogCQkJbGFzdCA9IHN0YXRlLT5lbmQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uaCBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCmluZGV4IDRlODQ0NWEuLmExMWE5MmUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5oCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCkBAIC0xMjYsOSArMTI2LDkgQEAKIAl1bnNpZ25lZCBsb25nIG1hcF9sZW47CiAJc3RydWN0IHBhZ2UgKmZpcnN0X3BhZ2U7CiAJdW5zaWduZWQgbG9uZyBiZmxhZ3M7Ci0JYXRvbWljX3QgcmVmczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxlYWtfbGlzdDsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CisJYXRvbWljX3QgcmVmczsKIAogCS8qIHRoZSBzcGlubG9jayBpcyB1c2VkIHRvIHByb3RlY3QgbW9zdCBvcGVyYXRpb25zICovCiAJc3BpbmxvY2tfdCBsb2NrOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IGM2YTIyZDcuLmZhNGVmMTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgQVVUT19ERUZSQUcpKQogCQlyZXR1cm4gMDsKIAotCWlmIChyb290LT5mc19pbmZvLT5jbG9zaW5nKQorCWlmIChidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pKQogCQlyZXR1cm4gMDsKIAogCWlmIChCVFJGU19JKGlub2RlKS0+aW5fZGVmcmFnKQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJaWYgKCFkZWZyYWcpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGVmcmFnLT5pbm8gPSBpbm9kZS0+aV9pbm87CisJZGVmcmFnLT5pbm8gPSBidHJmc19pbm8oaW5vZGUpOwogCWRlZnJhZy0+dHJhbnNpZCA9IHRyYW5zaWQ7CiAJZGVmcmFnLT5yb290ID0gcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQ7CiAKQEAgLTIyOSw3ICsyMjksNyBAQAogCQlmaXJzdF9pbm8gPSBkZWZyYWctPmlubyArIDE7CiAJCXJiX2VyYXNlKCZkZWZyYWctPnJiX25vZGUsICZmc19pbmZvLT5kZWZyYWdfaW5vZGVzKTsKIAotCQlpZiAoZnNfaW5mby0+Y2xvc2luZykKKwkJaWYgKGJ0cmZzX2ZzX2Nsb3NpbmcoZnNfaW5mbykpCiAJCQlnb3RvIG5leHRfZnJlZTsKIAogCQlzcGluX3VubG9jaygmZnNfaW5mby0+ZGVmcmFnX2lub2Rlc19sb2NrKTsKQEAgLTE0ODAsMTQgKzE0ODAsMTIgQEAKIAkgKiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgd2UgY2FuIGJhaWwgb3V0IG5vdyB3aXRob3V0IGFueQogCSAqIHN5bmNpbmcKIAkgKi8KLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJc21wX21iKCk7CiAJaWYgKEJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zIDw9CiAJICAgIHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKSB7CiAJCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gMDsKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWdvdG8gb3V0OwogCX0KLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCS8qCiAJICogb2sgd2UgaGF2ZW4ndCBjb21taXR0ZWQgdGhlIHRyYW5zYWN0aW9uIHlldCwgbGV0cyBkbyBhIGNvbW1pdApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IDcwZDQ1NzkuLjlmOTg1YTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkJcmV0dXJuIGlub2RlOwogCiAJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+bG9jayk7Ci0JaWYgKCFyb290LT5mc19pbmZvLT5jbG9zaW5nKSB7CisJaWYgKCFidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pKSB7CiAJCWJsb2NrX2dyb3VwLT5pbm9kZSA9IGlncmFiKGlub2RlKTsKIAkJYmxvY2tfZ3JvdXAtPmlyZWYgPSAxOwogCX0KQEAgLTI1MCw3ICsyNTAsNyBAQAogCXBnb2ZmX3QgaW5kZXggPSAwOwogCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9vZmZzZXQ7CiAJaW50IG51bV9jaGVja3N1bXM7Ci0JaW50IHJldCA9IDAsIHJldDI7CisJaW50IHJldCA9IDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmYml0bWFwcyk7CiAKQEAgLTQwMiw3ICs0MDIsMTQgQEAKIAkJCQlzcGluX2xvY2soJmN0bC0+dHJlZV9sb2NrKTsKIAkJCQlyZXQgPSBsaW5rX2ZyZWVfc3BhY2UoY3RsLCBlKTsKIAkJCQlzcGluX3VubG9jaygmY3RsLT50cmVlX2xvY2spOwotCQkJCUJVR19PTihyZXQpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJEdXBsaWNhdGUgZW50cmllcyBpbiAiCisJCQkJCSAgICAgICAiZnJlZSBzcGFjZSBjYWNoZSwgZHVtcGluZ1xuIik7CisJCQkJCWt1bm1hcChwYWdlKTsKKwkJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQkJZ290byBmcmVlX2NhY2hlOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJZS0+Yml0bWFwID0ga3phbGxvYyhQQUdFX0NBQ0hFX1NJWkUsIEdGUF9OT0ZTKTsKIAkJCQlpZiAoIWUtPmJpdG1hcCkgewpAQCAtNDE0LDEwICs0MjEsMTggQEAKIAkJCQkJZ290byBmcmVlX2NhY2hlOwogCQkJCX0KIAkJCQlzcGluX2xvY2soJmN0bC0+dHJlZV9sb2NrKTsKLQkJCQlyZXQyID0gbGlua19mcmVlX3NwYWNlKGN0bCwgZSk7CisJCQkJcmV0ID0gbGlua19mcmVlX3NwYWNlKGN0bCwgZSk7CiAJCQkJY3RsLT50b3RhbF9iaXRtYXBzKys7CiAJCQkJY3RsLT5vcC0+cmVjYWxjX3RocmVzaG9sZHMoY3RsKTsKIAkJCQlzcGluX3VubG9jaygmY3RsLT50cmVlX2xvY2spOworCQkJCWlmIChyZXQpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJEdXBsaWNhdGUgZW50cmllcyBpbiAiCisJCQkJCSAgICAgICAiZnJlZSBzcGFjZSBjYWNoZSwgZHVtcGluZ1xuIik7CisJCQkJCWt1bm1hcChwYWdlKTsKKwkJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQkJZ290byBmcmVlX2NhY2hlOworCQkJCX0KIAkJCQlsaXN0X2FkZF90YWlsKCZlLT5saXN0LCAmYml0bWFwcyk7CiAJCQl9CiAKQEAgLTQ3OCw4ICs0OTMsNyBAQAogCSAqIElmIHdlJ3JlIHVubW91bnRpbmcgdGhlbiBqdXN0IHJldHVybiwgc2luY2UgdGhpcyBkb2VzIGEgc2VhcmNoIG9uIHRoZQogCSAqIG5vcm1hbCByb290IGFuZCBub3QgdGhlIGNvbW1pdCByb290IGFuZCB3ZSBjb3VsZCBkZWFkbG9jay4KIAkgKi8KLQlzbXBfbWIoKTsKLQlpZiAoZnNfaW5mby0+Y2xvc2luZykKKwlpZiAoYnRyZnNfZnNfY2xvc2luZyhmc19pbmZvKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNTc1LDEwICs1ODksMjUgQEAKIAogCW51bV9wYWdlcyA9IChpX3NpemVfcmVhZChpbm9kZSkgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgogCQlQQUdFX0NBQ0hFX1NISUZUOworCisJLyogU2luY2UgdGhlIGZpcnN0IHBhZ2UgaGFzIGFsbCBvZiBvdXIgY2hlY2tzdW1zIGFuZCBvdXIgZ2VuZXJhdGlvbiB3ZQorCSAqIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcGFnZSB0aGF0IHdlIGNhbiBzdGFydCB3cml0aW5nCisJICogb3VyIGVudHJpZXMuCisJICovCisJZmlyc3RfcGFnZV9vZmZzZXQgPSAoc2l6ZW9mKHUzMikgKiBudW1fcGFnZXMpICsgc2l6ZW9mKHU2NCk7CisKIAlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGlub2RlLT5pX21hcHBpbmcpOwogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSAmCiAJCQkJIH4ocm9vdC0+c2VjdG9yc2l6ZSAtIDEpLCAodTY0KS0xKTsKIAorCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyB0aGF0IGZpcnN0IHBhZ2UgKi8KKwlpZiAoZmlyc3RfcGFnZV9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfZW50cnkpID49IFBBR0VfQ0FDSEVfU0laRSkgeworCQkvKiB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBydW5uaW5nIG91dCBvZiBzcGFjZSwgd2hlcmUgd2UgYWxzbyByZXR1cm4gMCAqLworCQlwcmludGsoS0VSTl9DUklUICJCdHJmczogZnJlZSBzcGFjZSBjYWNoZSB3YXMgdG9vIGJpZyBmb3IgdGhlIGNyYyBwYWdlXG4iKTsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXRfdXBkYXRlOworCX0KKwogCS8qIFdlIG5lZWQgYSBjaGVja3N1bSBwZXIgcGFnZS4gKi8KIAljcmMgPSBjaGVja3N1bXMgPSBremFsbG9jKHNpemVvZih1MzIpICogbnVtX3BhZ2VzLCBHRlBfTk9GUyk7CiAJaWYgKCFjcmMpCkBAIC01OTAsMTIgKzYxOSw2IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQkvKiBTaW5jZSB0aGUgZmlyc3QgcGFnZSBoYXMgYWxsIG9mIG91ciBjaGVja3N1bXMgYW5kIG91ciBnZW5lcmF0aW9uIHdlCi0JICogbmVlZCB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCBpbnRvIHRoZSBwYWdlIHRoYXQgd2UgY2FuIHN0YXJ0IHdyaXRpbmcKLQkgKiBvdXIgZW50cmllcy4KLQkgKi8KLQlmaXJzdF9wYWdlX29mZnNldCA9IChzaXplb2YodTMyKSAqIG51bV9wYWdlcykgKyBzaXplb2YodTY0KTsKLQogCS8qIEdldCB0aGUgY2x1c3RlciBmb3IgdGhpcyBibG9ja19ncm91cCBpZiBpdCBleGlzdHMgKi8KIAlpZiAoYmxvY2tfZ3JvdXAgJiYgIWxpc3RfZW1wdHkoJmJsb2NrX2dyb3VwLT5jbHVzdGVyX2xpc3QpKQogCQljbHVzdGVyID0gbGlzdF9lbnRyeShibG9ja19ncm91cC0+Y2x1c3Rlcl9saXN0Lm5leHQsCkBAIC04NTcsMTIgKzg4MCwxNCBAQAogCXJldCA9IDE7CiAKIG91dF9mcmVlOgorCWtmcmVlKGNoZWNrc3Vtcyk7CisJa2ZyZWUocGFnZXMpOworCitvdXRfdXBkYXRlOgogCWlmIChyZXQgIT0gMSkgewogCQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAwLCBpbmRleCk7CiAJCUJUUkZTX0koaW5vZGUpLT5nZW5lcmF0aW9uID0gMDsKIAl9Ci0Ja2ZyZWUoY2hlY2tzdW1zKTsKLQlrZnJlZShwYWdlcyk7CiAJYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk2MywxMCArOTg4LDE2IEBACiAJCQkgKiBsb2dpY2FsbHkuCiAJCQkgKi8KIAkJCWlmIChiaXRtYXApIHsKLQkJCQlXQVJOX09OKGluZm8tPmJpdG1hcCk7CisJCQkJaWYgKGluZm8tPmJpdG1hcCkgeworCQkJCQlXQVJOX09OX09OQ0UoMSk7CisJCQkJCXJldHVybiAtRUVYSVNUOworCQkJCX0KIAkJCQlwID0gJigqcCktPnJiX3JpZ2h0OwogCQkJfSBlbHNlIHsKLQkJCQlXQVJOX09OKCFpbmZvLT5iaXRtYXApOworCQkJCWlmICghaW5mby0+Yml0bWFwKSB7CisJCQkJCVdBUk5fT05fT05DRSgxKTsKKwkJCQkJcmV0dXJuIC1FRVhJU1Q7CisJCQkJfQogCQkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKIAkJCX0KIAkJfQpAQCAtMTM4Niw2ICsxNDE3LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgYWRkX2J5dGVzX3RvX2JpdG1hcChzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCwKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbywgdTY0IG9mZnNldCwKKwkJCSAgICAgICB1NjQgYnl0ZXMpCit7CisJdTY0IGJ5dGVzX3RvX3NldCA9IDA7CisJdTY0IGVuZDsKKworCWVuZCA9IGluZm8tPm9mZnNldCArICh1NjQpKEJJVFNfUEVSX0JJVE1BUCAqIGN0bC0+dW5pdCk7CisKKwlieXRlc190b19zZXQgPSBtaW4oZW5kIC0gb2Zmc2V0LCBieXRlcyk7CisKKwliaXRtYXBfc2V0X2JpdHMoY3RsLCBpbmZvLCBvZmZzZXQsIGJ5dGVzX3RvX3NldCk7CisKKwlyZXR1cm4gYnl0ZXNfdG9fc2V0OworCit9CisKIHN0YXRpYyBib29sIHVzZV9iaXRtYXAoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwsCiAJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQogewpAQCAtMTQyMiwxMiArMTQ3MCwxOCBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2Vfb3AgZnJlZV9zcGFjZV9vcCA9IHsKKwkucmVjYWxjX3RocmVzaG9sZHMJPSByZWNhbGN1bGF0ZV90aHJlc2hvbGRzLAorCS51c2VfYml0bWFwCQk9IHVzZV9iaXRtYXAsCit9OworCiBzdGF0aWMgaW50IGluc2VydF9pbnRvX2JpdG1hcChzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCwKIAkJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpiaXRtYXBfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwID0gTlVMTDsKIAlpbnQgYWRkZWQgPSAwOwotCXU2NCBieXRlcywgb2Zmc2V0LCBlbmQ7CisJdTY0IGJ5dGVzLCBvZmZzZXQsIGJ5dGVzX2FkZGVkOwogCWludCByZXQ7CiAKIAlieXRlcyA9IGluZm8tPmJ5dGVzOwpAQCAtMTQzNiw3ICsxNDkwLDQ5IEBACiAJaWYgKCFjdGwtPm9wLT51c2VfYml0bWFwKGN0bCwgaW5mbykpCiAJCXJldHVybiAwOwogCisJaWYgKGN0bC0+b3AgPT0gJmZyZWVfc3BhY2Vfb3ApCisJCWJsb2NrX2dyb3VwID0gY3RsLT5wcml2YXRlOwogYWdhaW46CisJLyoKKwkgKiBTaW5jZSB3ZSBsaW5rIGJpdG1hcHMgcmlnaHQgaW50byB0aGUgY2x1c3RlciB3ZSBuZWVkIHRvIHNlZSBpZiB3ZQorCSAqIGhhdmUgYSBjbHVzdGVyIGhlcmUsIGFuZCBpZiBzbyBhbmQgaXQgaGFzIG91ciBiaXRtYXAgd2UgbmVlZCB0byBhZGQKKwkgKiB0aGUgZnJlZSBzcGFjZSB0byB0aGF0IGJpdG1hcC4KKwkgKi8KKwlpZiAoYmxvY2tfZ3JvdXAgJiYgIWxpc3RfZW1wdHkoJmJsb2NrX2dyb3VwLT5jbHVzdGVyX2xpc3QpKSB7CisJCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXI7CisJCXN0cnVjdCByYl9ub2RlICpub2RlOworCQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZW50cnk7CisKKwkJY2x1c3RlciA9IGxpc3RfZW50cnkoYmxvY2tfZ3JvdXAtPmNsdXN0ZXJfbGlzdC5uZXh0LAorCQkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciwKKwkJCQkgICAgIGJsb2NrX2dyb3VwX2xpc3QpOworCQlzcGluX2xvY2soJmNsdXN0ZXItPmxvY2spOworCQlub2RlID0gcmJfZmlyc3QoJmNsdXN0ZXItPnJvb3QpOworCQlpZiAoIW5vZGUpIHsKKwkJCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJCWdvdG8gbm9fY2x1c3Rlcl9iaXRtYXA7CisJCX0KKworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCQlpZiAoIWVudHJ5LT5iaXRtYXApIHsKKwkJCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJCWdvdG8gbm9fY2x1c3Rlcl9iaXRtYXA7CisJCX0KKworCQlpZiAoZW50cnktPm9mZnNldCA9PSBvZmZzZXRfdG9fYml0bWFwKGN0bCwgb2Zmc2V0KSkgeworCQkJYnl0ZXNfYWRkZWQgPSBhZGRfYnl0ZXNfdG9fYml0bWFwKGN0bCwgZW50cnksCisJCQkJCQkJICBvZmZzZXQsIGJ5dGVzKTsKKwkJCWJ5dGVzIC09IGJ5dGVzX2FkZGVkOworCQkJb2Zmc2V0ICs9IGJ5dGVzX2FkZGVkOworCQl9CisJCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJaWYgKCFieXRlcykgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCitub19jbHVzdGVyX2JpdG1hcDoKIAliaXRtYXBfaW5mbyA9IHRyZWVfc2VhcmNoX29mZnNldChjdGwsIG9mZnNldF90b19iaXRtYXAoY3RsLCBvZmZzZXQpLAogCQkJCQkgMSwgMCk7CiAJaWYgKCFiaXRtYXBfaW5mbykgewpAQCAtMTQ0NCwxOSArMTU0MCwxMCBAQAogCQlnb3RvIG5ld19iaXRtYXA7CiAJfQogCi0JZW5kID0gYml0bWFwX2luZm8tPm9mZnNldCArICh1NjQpKEJJVFNfUEVSX0JJVE1BUCAqIGN0bC0+dW5pdCk7Ci0KLQlpZiAob2Zmc2V0ID49IGJpdG1hcF9pbmZvLT5vZmZzZXQgJiYgb2Zmc2V0ICsgYnl0ZXMgPiBlbmQpIHsKLQkJYml0bWFwX3NldF9iaXRzKGN0bCwgYml0bWFwX2luZm8sIG9mZnNldCwgZW5kIC0gb2Zmc2V0KTsKLQkJYnl0ZXMgLT0gZW5kIC0gb2Zmc2V0OwotCQlvZmZzZXQgPSBlbmQ7Ci0JCWFkZGVkID0gMDsKLQl9IGVsc2UgaWYgKG9mZnNldCA+PSBiaXRtYXBfaW5mby0+b2Zmc2V0ICYmIG9mZnNldCArIGJ5dGVzIDw9IGVuZCkgewotCQliaXRtYXBfc2V0X2JpdHMoY3RsLCBiaXRtYXBfaW5mbywgb2Zmc2V0LCBieXRlcyk7Ci0JCWJ5dGVzID0gMDsKLQl9IGVsc2UgewotCQlCVUcoKTsKLQl9CisJYnl0ZXNfYWRkZWQgPSBhZGRfYnl0ZXNfdG9fYml0bWFwKGN0bCwgYml0bWFwX2luZm8sIG9mZnNldCwgYnl0ZXMpOworCWJ5dGVzIC09IGJ5dGVzX2FkZGVkOworCW9mZnNldCArPSBieXRlc19hZGRlZDsKKwlhZGRlZCA9IDA7CiAKIAlpZiAoIWJ5dGVzKSB7CiAJCXJldCA9IDE7CkBAIC0xNzM1LDExICsxODIyLDYgQEAKIAkgICAgICAgIlxuIiwgY291bnQpOwogfQogCi1zdGF0aWMgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2Vfb3AgZnJlZV9zcGFjZV9vcCA9IHsKLQkucmVjYWxjX3RocmVzaG9sZHMJPSByZWNhbGN1bGF0ZV90aHJlc2hvbGRzLAotCS51c2VfYml0bWFwCQk9IHVzZV9iaXRtYXAsCi19OwotCiB2b2lkIGJ0cmZzX2luaXRfZnJlZV9zcGFjZV9jdGwoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCkKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCA9IGJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2N0bDsKQEAgLTIxMTEsOSArMjE5MywxMSBAQAogLyoKICAqIFRoaXMgc2VhcmNoZXMgdGhlIGJsb2NrIGdyb3VwIGZvciBqdXN0IGV4dGVudHMgdG8gZmlsbCB0aGUgY2x1c3RlciB3aXRoLgogICovCi1zdGF0aWMgaW50IHNldHVwX2NsdXN0ZXJfbm9fYml0bWFwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkJICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwKLQkJCQkgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsIHU2NCBtaW5fYnl0ZXMpCitzdGF0aWMgbm9pbmxpbmUgaW50CitzZXR1cF9jbHVzdGVyX25vX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmJpdG1hcHMsIHU2NCBvZmZzZXQsIHU2NCBieXRlcywKKwkJCXU2NCBtaW5fYnl0ZXMpCiB7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwgPSBibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9jdGw7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmZpcnN0ID0gTlVMTDsKQEAgLTIxMzUsNiArMjIxOSw4IEBACiAJICogZXh0ZW50IGVudHJ5LgogCSAqLwogCXdoaWxlIChlbnRyeS0+Yml0bWFwKSB7CisJCWlmIChsaXN0X2VtcHR5KCZlbnRyeS0+bGlzdCkpCisJCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgYml0bWFwcyk7CiAJCW5vZGUgPSByYl9uZXh0KCZlbnRyeS0+b2Zmc2V0X2luZGV4KTsKIAkJaWYgKCFub2RlKQogCQkJcmV0dXJuIC1FTk9TUEM7CkBAIC0yMTU0LDggKzIyNDAsMTIgQEAKIAkJCXJldHVybiAtRU5PU1BDOwogCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOwogCi0JCWlmIChlbnRyeS0+Yml0bWFwKQorCQlpZiAoZW50cnktPmJpdG1hcCkgeworCQkJaWYgKGxpc3RfZW1wdHkoJmVudHJ5LT5saXN0KSkKKwkJCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgYml0bWFwcyk7CiAJCQljb250aW51ZTsKKwkJfQorCiAJCS8qCiAJCSAqIHdlIGhhdmVuJ3QgZmlsbGVkIHRoZSBlbXB0eSBzaXplIGFuZCB0aGUgd2luZG93IGlzCiAJCSAqIHZlcnkgbGFyZ2UuICByZXNldCBhbmQgdHJ5IGFnYWluCkBAIC0yMjA3LDkgKzIyOTcsMTEgQEAKICAqIFRoaXMgc3BlY2lmaWNhbGx5IGxvb2tzIGZvciBiaXRtYXBzIHRoYXQgbWF5IHdvcmsgaW4gdGhlIGNsdXN0ZXIsIHdlIGFzc3VtZQogICogdGhhdCB3ZSBoYXZlIGFscmVhZHkgZmFpbGVkIHRvIGZpbmQgZXh0ZW50cyB0aGF0IHdpbGwgd29yay4KICAqLwotc3RhdGljIGludCBzZXR1cF9jbHVzdGVyX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIsCi0JCQkJdTY0IG9mZnNldCwgdTY0IGJ5dGVzLCB1NjQgbWluX2J5dGVzKQorc3RhdGljIG5vaW5saW5lIGludAorc2V0dXBfY2x1c3Rlcl9iaXRtYXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyLAorCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJpdG1hcHMsIHU2NCBvZmZzZXQsIHU2NCBieXRlcywKKwkJICAgICB1NjQgbWluX2J5dGVzKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsID0gYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsOwogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeTsKQEAgLTIyMTksMTAgKzIzMTEsMzkgQEAKIAlpZiAoY3RsLT50b3RhbF9iaXRtYXBzID09IDApCiAJCXJldHVybiAtRU5PU1BDOwogCisJLyoKKwkgKiBGaXJzdCBjaGVjayBvdXIgY2FjaGVkIGxpc3Qgb2YgYml0bWFwcyBhbmQgc2VlIGlmIHRoZXJlIGlzIGFuIGVudHJ5CisJICogaGVyZSB0aGF0IHdpbGwgd29yay4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBiaXRtYXBzLCBsaXN0KSB7CisJCWlmIChlbnRyeS0+Ynl0ZXMgPCBtaW5fYnl0ZXMpCisJCQljb250aW51ZTsKKwkJcmV0ID0gYnRyZnNfYml0bWFwX2NsdXN0ZXIoYmxvY2tfZ3JvdXAsIGVudHJ5LCBjbHVzdGVyLCBvZmZzZXQsCisJCQkJCSAgIGJ5dGVzLCBtaW5fYnl0ZXMpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgd2UgZG8gaGF2ZSBlbnRyaWVzIG9uIG91ciBsaXN0IGFuZCB3ZSBhcmUgaGVyZSB0aGVuIHdlIGRpZG4ndCBmaW5kCisJICogYW55dGhpbmcsIHNvIGdvIGFoZWFkIGFuZCBnZXQgdGhlIG5leHQgZW50cnkgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4KKwkgKiB0aGlzIGxpc3QgYW5kIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSB0aGVyZS4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoYml0bWFwcykpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KGJpdG1hcHMtPnByZXYsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLAorCQkJCSAgIGxpc3QpOworCQlub2RlID0gcmJfbmV4dCgmZW50cnktPm9mZnNldF9pbmRleCk7CisJCWlmICghbm9kZSkKKwkJCXJldHVybiAtRU5PU1BDOworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCQlnb3RvIHNlYXJjaDsKKwl9CisKIAllbnRyeSA9IHRyZWVfc2VhcmNoX29mZnNldChjdGwsIG9mZnNldF90b19iaXRtYXAoY3RsLCBvZmZzZXQpLCAwLCAxKTsKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLUVOT1NQQzsKIAorc2VhcmNoOgogCW5vZGUgPSAmZW50cnktPm9mZnNldF9pbmRleDsKIAlkbyB7CiAJCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7CkBAIC0yMjUzLDYgKzIzNzQsOCBAQAogCQkJICAgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsIHU2NCBlbXB0eV9zaXplKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsID0gYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsOworCXN0cnVjdCBsaXN0X2hlYWQgYml0bWFwczsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZW50cnksICp0bXA7CiAJdTY0IG1pbl9ieXRlczsKIAlpbnQgcmV0OwogCkBAIC0yMjkxLDExICsyNDE0LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IHNldHVwX2NsdXN0ZXJfbm9fYml0bWFwKGJsb2NrX2dyb3VwLCBjbHVzdGVyLCBvZmZzZXQsIGJ5dGVzLAotCQkJCSAgICAgIG1pbl9ieXRlcyk7CisJSU5JVF9MSVNUX0hFQUQoJmJpdG1hcHMpOworCXJldCA9IHNldHVwX2NsdXN0ZXJfbm9fYml0bWFwKGJsb2NrX2dyb3VwLCBjbHVzdGVyLCAmYml0bWFwcywgb2Zmc2V0LAorCQkJCSAgICAgIGJ5dGVzLCBtaW5fYnl0ZXMpOwogCWlmIChyZXQpCi0JCXJldCA9IHNldHVwX2NsdXN0ZXJfYml0bWFwKGJsb2NrX2dyb3VwLCBjbHVzdGVyLCBvZmZzZXQsCi0JCQkJCSAgIGJ5dGVzLCBtaW5fYnl0ZXMpOworCQlyZXQgPSBzZXR1cF9jbHVzdGVyX2JpdG1hcChibG9ja19ncm91cCwgY2x1c3RlciwgJmJpdG1hcHMsCisJCQkJCSAgIG9mZnNldCwgYnl0ZXMsIG1pbl9ieXRlcyk7CisKKwkvKiBDbGVhciBvdXIgdGVtcG9yYXJ5IGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmJpdG1hcHMsIGxpc3QpCisJCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5saXN0KTsKIAogCWlmICghcmV0KSB7CiAJCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CkBAIC0yNDgxLDcgKzI2MDksNyBAQAogCQlyZXR1cm4gaW5vZGU7CiAKIAlzcGluX2xvY2soJnJvb3QtPmNhY2hlX2xvY2spOwotCWlmICghcm9vdC0+ZnNfaW5mby0+Y2xvc2luZykKKwlpZiAoIWJ0cmZzX2ZzX2Nsb3Npbmcocm9vdC0+ZnNfaW5mbykpCiAJCXJvb3QtPmNhY2hlX2lub2RlID0gaWdyYWIoaW5vZGUpOwogCXNwaW5fdW5sb2NrKCZyb290LT5jYWNoZV9sb2NrKTsKIApAQCAtMjUwNCwxMiArMjYzMiwxNCBAQAogCWludCByZXQgPSAwOwogCXU2NCByb290X2dlbiA9IGJ0cmZzX3Jvb3RfZ2VuZXJhdGlvbigmcm9vdC0+cm9vdF9pdGVtKTsKIAorCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgSU5PREVfTUFQX0NBQ0hFKSkKKwkJcmV0dXJuIDA7CisKIAkvKgogCSAqIElmIHdlJ3JlIHVubW91bnRpbmcgdGhlbiBqdXN0IHJldHVybiwgc2luY2UgdGhpcyBkb2VzIGEgc2VhcmNoIG9uIHRoZQogCSAqIG5vcm1hbCByb290IGFuZCBub3QgdGhlIGNvbW1pdCByb290IGFuZCB3ZSBjb3VsZCBkZWFkbG9jay4KIAkgKi8KLQlzbXBfbWIoKTsKLQlpZiAoZnNfaW5mby0+Y2xvc2luZykKKwlpZiAoYnRyZnNfZnNfY2xvc2luZyhmc19pbmZvKSkKIAkJcmV0dXJuIDA7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwpAQCAtMjU0Myw2ICsyNjczLDkgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWludCByZXQ7CiAKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybiAwOworCiAJaW5vZGUgPSBsb29rdXBfZnJlZV9pbm9faW5vZGUocm9vdCwgcGF0aCk7CiAJaWYgKElTX0VSUihpbm9kZSkpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUtbWFwLmMgYi9mcy9idHJmcy9pbm9kZS1tYXAuYwppbmRleCAzMjYyY2QxLi5iNDA4N2UwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS1tYXAuYworKysgYi9mcy9idHJmcy9pbm9kZS1tYXAuYwpAQCAtMzgsNiArMzgsOSBAQAogCWludCBzbG90OwogCWludCByZXQ7CiAKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybiAwOworCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTksOCArNjIsNyBAQAogCQlnb3RvIG91dDsKIAogCXdoaWxlICgxKSB7Ci0JCXNtcF9tYigpOwotCQlpZiAoZnNfaW5mby0+Y2xvc2luZykKKwkJaWYgKGJ0cmZzX2ZzX2Nsb3NpbmcoZnNfaW5mbykpCiAJCQlnb3RvIG91dDsKIAogCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07CkBAIC0xNDEsNiArMTQzLDkgQEAKIAlpbnQgcmV0OwogCXU2NCBvYmplY3RpZDsKIAorCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgSU5PREVfTUFQX0NBQ0hFKSkKKwkJcmV0dXJuOworCiAJc3Bpbl9sb2NrKCZyb290LT5jYWNoZV9sb2NrKTsKIAlpZiAocm9vdC0+Y2FjaGVkICE9IEJUUkZTX0NBQ0hFX05PKSB7CiAJCXNwaW5fdW5sb2NrKCZyb290LT5jYWNoZV9sb2NrKTsKQEAgLTE3OCw2ICsxODMsOSBAQAogCiBpbnQgYnRyZnNfZmluZF9mcmVlX2lubyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0ICpvYmplY3RpZCkKIHsKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybiBidHJmc19maW5kX2ZyZWVfb2JqZWN0aWQocm9vdCwgb2JqZWN0aWQpOworCiBhZ2FpbjoKIAkqb2JqZWN0aWQgPSBidHJmc19maW5kX2lub19mb3JfYWxsb2Mocm9vdCk7CiAKQEAgLTIwMSw2ICsyMDksMTAgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCA9IHJvb3QtPmZyZWVfaW5vX2N0bDsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKnBpbm5lZCA9IHJvb3QtPmZyZWVfaW5vX3Bpbm5lZDsKKworCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgSU5PREVfTUFQX0NBQ0hFKSkKKwkJcmV0dXJuOworCiBhZ2FpbjoKIAlpZiAocm9vdC0+Y2FjaGVkID09IEJUUkZTX0NBQ0hFX0ZJTklTSEVEKSB7CiAJCV9fYnRyZnNfYWRkX2ZyZWVfc3BhY2UoY3RsLCBvYmplY3RpZCwgMSk7CkBAIC0yNTAsNiArMjYyLDkgQEAKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAl1NjQgY291bnQ7CiAKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybjsKKwogCXdoaWxlICgxKSB7CiAJCW4gPSByYl9maXJzdChyYnJvb3QpOwogCQlpZiAoIW4pCkBAIC0zODgsOSArNDAzLDI0IEBACiAJaW50IHByZWFsbG9jOwogCWJvb2wgcmV0cnkgPSBmYWxzZTsKIAorCS8qIG9ubHkgZnMgdHJlZSBhbmQgc3Vidm9sL3NuYXAgbmVlZHMgaW5vIGNhY2hlICovCisJaWYgKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkICE9IEJUUkZTX0ZTX1RSRUVfT0JKRUNUSUQgJiYKKwkgICAgKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkIDwgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCB8fAorCSAgICAgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQgPiBCVFJGU19MQVNUX0ZSRUVfT0JKRUNUSUQpKQorCQlyZXR1cm4gMDsKKworCS8qIERvbid0IHNhdmUgaW5vZGUgY2FjaGUgaWYgd2UgYXJlIGRlbGV0aW5nIHRoaXMgcm9vdCAqLworCWlmIChidHJmc19yb290X3JlZnMoJnJvb3QtPnJvb3RfaXRlbSkgPT0gMCAmJgorCSAgICByb290ICE9IHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybiAwOworCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOworCiBhZ2FpbjoKIAlpbm9kZSA9IGxvb2t1cF9mcmVlX2lub19pbm9kZShyb290LCBwYXRoKTsKIAlpZiAoSVNfRVJSKGlub2RlKSAmJiBQVFJfRVJSKGlub2RlKSAhPSAtRU5PRU5UKSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCAzOWE5ZDU3Li43NTFkZGY4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTEzOCw3ICsxMzgsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAogCWtleS5vYmplY3RpZCA9IGJ0cmZzX2lubyhpbm9kZSk7CiAJa2V5Lm9mZnNldCA9IHN0YXJ0OwpAQCAtNDI2LDkgKzQyNSw4IEBACiAJCX0KIAl9CiAJaWYgKHN0YXJ0ID09IDApIHsKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCiAJCS8qIGxldHMgdHJ5IHRvIG1ha2UgYW4gaW5saW5lIGV4dGVudCAqLwpAQCAtNjIzLDggKzYyMSw5IEBACiAJCQkgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAogCQkJICAgIEdGUF9OT0ZTKTsKIAotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJQlVHX09OKElTX0VSUih0cmFucykpOworCQl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsCiAJCQkJCSAgIGFzeW5jX2V4dGVudC0+Y29tcHJlc3NlZF9zaXplLAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKQEAgLTc5Myw5ICs3OTIsOCBAQAogCWludCByZXQgPSAwOwogCiAJQlVHX09OKGlzX2ZyZWVfc3BhY2VfaW5vZGUocm9vdCwgaW5vZGUpKTsKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAogCW51bV9ieXRlcyA9IChlbmQgLSBzdGFydCArIGJsb2Nrc2l6ZSkgJiB+KGJsb2Nrc2l6ZSAtIDEpOwpAQCAtMTA3NywxMCArMTA3NSwxMiBAQAogCW5vbG9jayA9IGlzX2ZyZWVfc3BhY2VfaW5vZGUocm9vdCwgaW5vZGUpOwogCiAJaWYgKG5vbG9jaykKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290KTsKIAllbHNlCi0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOworCiAJQlVHX09OKElTX0VSUih0cmFucykpOworCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCiAJY293X3N0YXJ0ID0gKHU2NCktMTsKIAljdXJfb2Zmc2V0ID0gc3RhcnQ7CkBAIC0xNTE5LDggKzE1MTksNiBAQAogewogCXN0cnVjdCBidHJmc19vcmRlcmVkX3N1bSAqc3VtOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1bSwgbGlzdCwgbGlzdCkgewogCQlidHJmc19jc3VtX2ZpbGVfYmxvY2tzKHRyYW5zLAogCQkgICAgICAgQlRSRlNfSShpbm9kZSktPnJvb3QtPmZzX2luZm8tPmNzdW1fcm9vdCwgc3VtKTsKQEAgLTE3MzUsMTEgKzE3MzMsMTAgQEAKIAkJcmV0ID0gYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCAwLCBvcmRlcmVkX2V4dGVudCk7CiAJCWlmICghcmV0KSB7CiAJCQlpZiAobm9sb2NrKQotCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CisJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290KTsKIAkJCWVsc2UKLQkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCQkJQlVHX09OKElTX0VSUih0cmFucykpOwotCQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCQl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAkJCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCQkJQlVHX09OKHJldCk7CkBAIC0xNzUyLDExICsxNzQ5LDEwIEBACiAJCQkgMCwgJmNhY2hlZF9zdGF0ZSwgR0ZQX05PRlMpOwogCiAJaWYgKG5vbG9jaykKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290KTsKIAllbHNlCi0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAogCWlmICh0ZXN0X2JpdChCVFJGU19PUkRFUkVEX0NPTVBSRVNTRUQsICZvcmRlcmVkX2V4dGVudC0+ZmxhZ3MpKQpAQCAtMTk5MCw3ICsxOTg2LDcgQEAKIAl9CiAKIAlpZiAoQlRSRlNfSShpbm9kZSktPmZsYWdzICYgQlRSRlNfSU5PREVfTk9EQVRBU1VNKQotCQlyZXR1cm4gMDsKKwkJZ290byBnb29kOwogCiAJaWYgKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkID09IEJUUkZTX0RBVEFfUkVMT0NfVFJFRV9PQkpFQ1RJRCAmJgogCSAgICB0ZXN0X3JhbmdlX2JpdChpb190cmVlLCBzdGFydCwgZW5kLCBFWFRFTlRfTk9EQVRBU1VNLCAxLCBOVUxMKSkgewpAQCAtMjQzMSw3ICsyNDI3LDcgQEAKIAkJCQkJKHU2NCktMSk7CiAKIAlpZiAocm9vdC0+b3JwaGFuX2Jsb2NrX3JzdiB8fCByb290LT5vcnBoYW5faXRlbV9pbnNlcnRlZCkgewotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJaWYgKCFJU19FUlIodHJhbnMpKQogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl9CkBAIC0yNTExLDEyICsyNTA3LDEyIEBACiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgYnRyZnNfa2V5IGxvY2F0aW9uOwogCWludCBtYXliZV9hY2xzOwotCXU2NCBhbGxvY19ncm91cF9ibG9jazsKIAl1MzIgcmRldjsKIAlpbnQgcmV0OwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAltZW1jcHkoJmxvY2F0aW9uLCAmQlRSRlNfSShpbm9kZSktPmxvY2F0aW9uLCBzaXplb2YobG9jYXRpb24pKTsKIAogCXJldCA9IGJ0cmZzX2xvb2t1cF9pbm9kZShOVUxMLCByb290LCBwYXRoLCAmbG9jYXRpb24sIDApOwpAQCAtMjUyNiw2ICsyNTIyLDEyIEBACiAJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwogCWlub2RlX2l0ZW0gPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKIAkJCQkgICAgc3RydWN0IGJ0cmZzX2lub2RlX2l0ZW0pOworCWlmICghbGVhZi0+bWFwX3Rva2VuKQorCQltYXBfcHJpdmF0ZV9leHRlbnRfYnVmZmVyKGxlYWYsICh1bnNpZ25lZCBsb25nKWlub2RlX2l0ZW0sCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBidHJmc19pbm9kZV9pdGVtKSwKKwkJCQkJICAmbGVhZi0+bWFwX3Rva2VuLCAmbGVhZi0+a2FkZHIsCisJCQkJCSAgJmxlYWYtPm1hcF9zdGFydCwgJmxlYWYtPm1hcF9sZW4sCisJCQkJCSAgS01fVVNFUjEpOwogCiAJaW5vZGUtPmlfbW9kZSA9IGJ0cmZzX2lub2RlX21vZGUobGVhZiwgaW5vZGVfaXRlbSk7CiAJaW5vZGUtPmlfbmxpbmsgPSBidHJmc19pbm9kZV9ubGluayhsZWFmLCBpbm9kZV9pdGVtKTsKQEAgLTI1NTUsOCArMjU1Nyw2IEBACiAJQlRSRlNfSShpbm9kZSktPmluZGV4X2NudCA9ICh1NjQpLTE7CiAJQlRSRlNfSShpbm9kZSktPmZsYWdzID0gYnRyZnNfaW5vZGVfZmxhZ3MobGVhZiwgaW5vZGVfaXRlbSk7CiAKLQlhbGxvY19ncm91cF9ibG9jayA9IGJ0cmZzX2lub2RlX2Jsb2NrX2dyb3VwKGxlYWYsIGlub2RlX2l0ZW0pOwotCiAJLyoKIAkgKiB0cnkgdG8gcHJlY2FjaGUgYSBOVUxMIGFjbCBlbnRyeSBmb3IgZmlsZXMgdGhhdCBkb24ndCBoYXZlCiAJICogYW55IHhhdHRycyBvciBhY2xzCkBAIC0yNTY2LDggKzI1NjYsMTEgQEAKIAlpZiAoIW1heWJlX2FjbHMpCiAJCWNhY2hlX25vX2FjbChpbm9kZSk7CiAKLQlCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXAgPSBidHJmc19maW5kX2Jsb2NrX2dyb3VwKHJvb3QsIDAsCi0JCQkJCQlhbGxvY19ncm91cF9ibG9jaywgMCk7CisJaWYgKGxlYWYtPm1hcF90b2tlbikgeworCQl1bm1hcF9leHRlbnRfYnVmZmVyKGxlYWYsIGxlYWYtPm1hcF90b2tlbiwgS01fVVNFUjEpOworCQlsZWFmLT5tYXBfdG9rZW4gPSBOVUxMOworCX0KKwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAlpbm9kZV9pdGVtID0gTlVMTDsKIApAQCAtMjY0Nyw3ICsyNjUwLDcgQEAKIAlidHJmc19zZXRfaW5vZGVfdHJhbnNpZChsZWFmLCBpdGVtLCB0cmFucy0+dHJhbnNpZCk7CiAJYnRyZnNfc2V0X2lub2RlX3JkZXYobGVhZiwgaXRlbSwgaW5vZGUtPmlfcmRldik7CiAJYnRyZnNfc2V0X2lub2RlX2ZsYWdzKGxlYWYsIGl0ZW0sIEJUUkZTX0koaW5vZGUpLT5mbGFncyk7Ci0JYnRyZnNfc2V0X2lub2RlX2Jsb2NrX2dyb3VwKGxlYWYsIGl0ZW0sIEJUUkZTX0koaW5vZGUpLT5ibG9ja19ncm91cCk7CisJYnRyZnNfc2V0X2lub2RlX2Jsb2NrX2dyb3VwKGxlYWYsIGl0ZW0sIDApOwogCiAJaWYgKGxlYWYtPm1hcF90b2tlbikgewogCQl1bm1hcF9leHRlbnRfYnVmZmVyKGxlYWYsIGxlYWYtPm1hcF90b2tlbiwgS01fVVNFUjEpOwpAQCAtMzAwNCw4ICszMDA3LDYgQEAKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwotCiAJYnRyZnNfcmVjb3JkX3VubGlua19kaXIodHJhbnMsIGRpciwgZGVudHJ5LT5kX2lub2RlLCAwKTsKIAogCXJldCA9IGJ0cmZzX3VubGlua19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBkZW50cnktPmRfaW5vZGUsCkBAIC0zMDk0LDggKzMwOTUsNiBAQAogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7Ci0KIAlpZiAodW5saWtlbHkoYnRyZnNfaW5vKGlub2RlKSA9PSBCVFJGU19FTVBUWV9TVUJWT0xfRElSX09CSkVDVElEKSkgewogCQllcnIgPSBidHJmc191bmxpbmtfc3Vidm9sKHRyYW5zLCByb290LCBkaXIsCiAJCQkJCSAgQlRSRlNfSShpbm9kZSktPmxvY2F0aW9uLm9iamVjdGlkLApAQCAtMzUxNCw3ICszNTEzLDYgQEAKIAkJCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCiAJCQllcnIgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIGlub2RlLCBjdXJfb2Zmc2V0LAogCQkJCQkJIGN1cl9vZmZzZXQgKyBob2xlX3NpemUsCkBAIC0zNjQ4LDkgKzM2NDYsOCBAQAogCWJ0cmZzX2lfc2l6ZV93cml0ZShpbm9kZSwgMCk7CiAKIAl3aGlsZSAoMSkgewotCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCXRyYW5zLT5ibG9ja19yc3YgPSByb290LT5vcnBoYW5fYmxvY2tfcnN2OwogCiAJCXJldCA9IGJ0cmZzX2Jsb2NrX3Jzdl9jaGVjayh0cmFucywgcm9vdCwKQEAgLTQxMzMsNyArNDEzMCw4IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwotCXBhdGgtPnJlYWRhID0gMjsKKworCXBhdGgtPnJlYWRhID0gMTsKIAogCWlmIChrZXlfdHlwZSA9PSBCVFJGU19ESVJfSU5ERVhfS0VZKSB7CiAJCUlOSVRfTElTVF9IRUFEKCZpbnNfbGlzdCk7CkBAIC00MjY4LDE4ICs0MjY2LDE2IEBACiAJaWYgKEJUUkZTX0koaW5vZGUpLT5kdW1teV9pbm9kZSkKIAkJcmV0dXJuIDA7CiAKLQlzbXBfbWIoKTsKLQlpZiAocm9vdC0+ZnNfaW5mby0+Y2xvc2luZyAmJiBpc19mcmVlX3NwYWNlX2lub2RlKHJvb3QsIGlub2RlKSkKKwlpZiAoYnRyZnNfZnNfY2xvc2luZyhyb290LT5mc19pbmZvKSAmJiBpc19mcmVlX3NwYWNlX2lub2RlKHJvb3QsIGlub2RlKSkKIAkJbm9sb2NrID0gdHJ1ZTsKIAogCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkgewogCQlpZiAobm9sb2NrKQotCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKKwkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCk7CiAJCWVsc2UKLQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJaWYgKElTX0VSUih0cmFucykpCiAJCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7Ci0JCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCQlpZiAobm9sb2NrKQogCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX25vbG9jayh0cmFucywgcm9vdCk7CiAJCWVsc2UKQEAgLTQzMDMsOSArNDI5OSw4IEBACiAJaWYgKEJUUkZTX0koaW5vZGUpLT5kdW1teV9pbm9kZSkKIAkJcmV0dXJuOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAlpZiAocmV0ICYmIHJldCA9PSAtRU5PU1BDKSB7CkBAIC00MzE5LDcgKzQzMTQsNiBAQAogCQkJCSAgICAgICBQVFJfRVJSKHRyYW5zKSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAKIAkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJCWlmIChyZXQpIHsKQEAgLTQ0MTgsOCArNDQxMiw4IEBACiAJCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLAotCQkJCSAgICAgdTY0IHJlZl9vYmplY3RpZCwgdTY0IG9iamVjdGlkLAotCQkJCSAgICAgdTY0IGFsbG9jX2hpbnQsIGludCBtb2RlLCB1NjQgKmluZGV4KQorCQkJCSAgICAgdTY0IHJlZl9vYmplY3RpZCwgdTY0IG9iamVjdGlkLCBpbnQgbW9kZSwKKwkJCQkgICAgIHU2NCAqaW5kZXgpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgYnRyZnNfaW5vZGVfaXRlbSAqaW5vZGVfaXRlbTsKQEAgLTQ0NzIsOCArNDQ2Niw2IEBACiAJCW93bmVyID0gMDsKIAllbHNlCiAJCW93bmVyID0gMTsKLQlCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXAgPQotCQkJYnRyZnNfZmluZF9ibG9ja19ncm91cChyb290LCAwLCBhbGxvY19oaW50LCBvd25lcik7CiAKIAlrZXlbMF0ub2JqZWN0aWQgPSBvYmplY3RpZDsKIAlidHJmc19zZXRfa2V5X3R5cGUoJmtleVswXSwgQlRSRlNfSU5PREVfSVRFTV9LRVkpOwpAQCAtNDYyOSwxNSArNDYyMSwxMyBAQAogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7Ci0KIAllcnIgPSBidHJmc19maW5kX2ZyZWVfaW5vKHJvb3QsICZvYmplY3RpZCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJaW5vZGUgPSBidHJmc19uZXdfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGJ0cmZzX2lubyhkaXIpLCBvYmplY3RpZCwKLQkJCQlCVFJGU19JKGRpciktPmJsb2NrX2dyb3VwLCBtb2RlLCAmaW5kZXgpOworCQkJCW1vZGUsICZpbmRleCk7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJZXJyID0gUFRSX0VSUihpbm9kZSk7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTQ2NDksNyArNDYzOSw2IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAllcnIgPSBidHJmc19hZGRfbm9uZGlyKHRyYW5zLCBkaXIsIGRlbnRyeSwgaW5vZGUsIDAsIGluZGV4KTsKIAlpZiAoZXJyKQogCQlkcm9wX2lub2RlID0gMTsKQEAgLTQ2NTgsOCArNDY0Nyw2IEBACiAJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgcmRldik7CiAJCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCX0KLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiBvdXRfdW5sb2NrOgogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CkBAIC00NjkyLDE1ICs0Njc5LDEzIEBACiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKLQogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9pbm8ocm9vdCwgJm9iamVjdGlkKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlpbm9kZSA9IGJ0cmZzX25ld19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCWRlbnRyeS0+ZF9uYW1lLmxlbiwgYnRyZnNfaW5vKGRpciksIG9iamVjdGlkLAotCQkJCUJUUkZTX0koZGlyKS0+YmxvY2tfZ3JvdXAsIG1vZGUsICZpbmRleCk7CisJCQkJbW9kZSwgJmluZGV4KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNDcxMiw3ICs0Njk3LDYgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCWVyciA9IGJ0cmZzX2FkZF9ub25kaXIodHJhbnMsIGRpciwgZGVudHJ5LCBpbm9kZSwgMCwgaW5kZXgpOwogCWlmIChlcnIpCiAJCWRyb3BfaW5vZGUgPSAxOwpAQCAtNDcyMyw4ICs0NzA3LDYgQEAKIAkJaW5vZGUtPmlfb3AgPSAmYnRyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogCQlCVFJGU19JKGlub2RlKS0+aW9fdHJlZS5vcHMgPSAmYnRyZnNfZXh0ZW50X2lvX29wczsKIAl9Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogb3V0X3VubG9jazoKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwpAQCAtNDc3MSw4ICs0NzUzLDYgQEAKIAogCWJ0cmZzX2luY19ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0KLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAJaWhvbGQoaW5vZGUpOwogCiAJZXJyID0gYnRyZnNfYWRkX25vbmRpcih0cmFucywgZGlyLCBkZW50cnksIGlub2RlLCAxLCBpbmRleCk7CkBAIC00NzgxLDcgKzQ3NjEsNiBAQAogCQlkcm9wX2lub2RlID0gMTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZ2V0X3BhcmVudChkZW50cnkpOwotCQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAJCWVyciA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCQlCVUdfT04oZXJyKTsKIAkJYnRyZnNfbG9nX25ld19uYW1lKHRyYW5zLCBpbm9kZSwgTlVMTCwgcGFyZW50KTsKQEAgLTQ4MTgsNyArNDc5Nyw2IEBACiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCA1KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9pbm8ocm9vdCwgJm9iamVjdGlkKTsKIAlpZiAoZXJyKQpAQCAtNDgyNiw4ICs0ODA0LDcgQEAKIAogCWlub2RlID0gYnRyZnNfbmV3X2lub2RlKHRyYW5zLCByb290LCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJZGVudHJ5LT5kX25hbWUubGVuLCBidHJmc19pbm8oZGlyKSwgb2JqZWN0aWQsCi0JCQkJQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCwgU19JRkRJUiB8IG1vZGUsCi0JCQkJJmluZGV4KTsKKwkJCQlTX0lGRElSIHwgbW9kZSwgJmluZGV4KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfZmFpbDsKQEAgLTQ4NDEsNyArNDgxOCw2IEBACiAKIAlpbm9kZS0+aV9vcCA9ICZidHJmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mb3AgPSAmYnRyZnNfZGlyX2ZpbGVfb3BlcmF0aW9uczsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAogCWJ0cmZzX2lfc2l6ZV93cml0ZShpbm9kZSwgMCk7CiAJZXJyID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CkBAIC00ODU1LDggKzQ4MzEsNiBAQAogCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlkcm9wX29uX2VyciA9IDA7Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiBvdXRfZmFpbDoKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKQEAgLTQ5ODksNyArNDk2MywxNSBAQAogCiAJaWYgKCFwYXRoKSB7CiAJCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JCUJVR19PTighcGF0aCk7CisJCWlmICghcGF0aCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qCisJCSAqIENoYW5jZXMgYXJlIHdlJ2xsIGJlIGNhbGxlZCBhZ2Fpbiwgc28gZ28gYWhlYWQgYW5kIGRvCisJCSAqIHJlYWRhaGVhZAorCQkgKi8KKwkJcGF0aC0+cmVhZGEgPSAxOwogCX0KIAogCXJldCA9IGJ0cmZzX2xvb2t1cF9maWxlX2V4dGVudCh0cmFucywgcm9vdCwgcGF0aCwKQEAgLTUxMzAsOCArNTExMiwxMCBAQAogCQkJCWt1bm1hcChwYWdlKTsKIAkJCQlmcmVlX2V4dGVudF9tYXAoZW0pOwogCQkJCWVtID0gTlVMTDsKKwogCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKLQkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOworCiAJCQkJaWYgKElTX0VSUih0cmFucykpCiAJCQkJCXJldHVybiBFUlJfQ0FTVCh0cmFucyk7CiAJCQkJZ290byBhZ2FpbjsKQEAgLTUzNzUsNyArNTM1OSw3IEBACiAJCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBzdGFydCwgc3RhcnQgKyBsZW4gLSAxLCAwKTsKIAl9CiAKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gRVJSX0NBU1QodHJhbnMpOwogCkBAIC01NjExLDcgKzU1OTUsNyBAQAogCQkgKiB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc3RheXMgb3BlbgogCQkgKiB3aGlsZSB3ZSBsb29rIGZvciBub2NvdyBjcm9zcyByZWZzCiAJCSAqLwotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJaWYgKElTX0VSUih0cmFucykpCiAJCQlnb3RvIG11c3RfY293OwogCkBAIC01NzUwLDcgKzU3MzQsNyBAQAogCiAJQlVHX09OKCFvcmRlcmVkKTsKIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC02NTAwLDYgKzY0ODQsNyBAQAogc3RhdGljIGludCBidHJmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqcnN2OwogCWludCByZXQ7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CkBAIC02NTEzLDI4ICs2NDk4LDgwIEBACiAJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCBpbm9kZS0+aV9zaXplICYgKH5tYXNrKSwgKHU2NCktMSk7CiAJYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCBpbm9kZS0+aV9zaXplLCBOVUxMKTsKIAotCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgNSk7Ci0JaWYgKElTX0VSUih0cmFucykpCi0JCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKKwkvKgorCSAqIFllcyBsYWRpZXMgYW5kIGdlbnRlbG1lbnQsIHRoaXMgaXMgaW5kZWVkIHVnbHkuICBUaGUgZmFjdCBpcyB3ZSBoYXZlCisJICogMyB0aGluZ3MgZ29pbmcgb24gaGVyZQorCSAqCisJICogMSkgV2UgbmVlZCB0byByZXNlcnZlIHNwYWNlIGZvciBvdXIgb3JwaGFuIGl0ZW0gYW5kIHRoZSBzcGFjZSB0bworCSAqIGRlbGV0ZSBvdXIgb3JwaGFuIGl0ZW0uICBMb3JkIGtub3dzIHdlIGRvbid0IHdhbnQgdG8gaGF2ZSBhIGRhbmdsaW5nCisJICogb3JwaGFuIGl0ZW0gYmVjYXVzZSB3ZSBkaWRuJ3QgcmVzZXJ2ZSBzcGFjZSB0byByZW1vdmUgaXQuCisJICoKKwkgKiAyKSBXZSBuZWVkIHRvIHJlc2VydmUgc3BhY2UgdG8gdXBkYXRlIG91ciBpbm9kZS4KKwkgKgorCSAqIDMpIFdlIG5lZWQgdG8gaGF2ZSBzb21ldGhpbmcgdG8gY2FjaGUgYWxsIHRoZSBzcGFjZSB0aGF0IGlzIGdvaW5nIHRvCisJICogYmUgZnJlZSdkIHVwIGJ5IHRoZSB0cnVuY2F0ZSBvcGVyYXRpb24sIGJ1dCBhbHNvIGhhdmUgc29tZSBzbGFjaworCSAqIHNwYWNlIHJlc2VydmVkIGluIGNhc2UgaXQgdXNlcyBzcGFjZSBkdXJpbmcgdGhlIHRydW5jYXRlICh0aGFuayB5b3UKKwkgKiB2ZXJ5IG11Y2ggc25hcHNob3R0aW5nKS4KKwkgKgorCSAqIEFuZCB3ZSBuZWVkIHRoZXNlIHRvIGFsbCBiZSBzZXBlcmF0ZS4gIFRoZSBmYWN0IGlzIHdlIGNhbiB1c2UgYWxvdCBvZgorCSAqIHNwYWNlIGRvaW5nIHRoZSB0cnVuY2F0ZSwgYW5kIHdlIGhhdmUgbm8gZWFydGhseSBpZGVhIGhvdyBtdWNoIHNwYWNlCisJICogd2Ugd2lsbCB1c2UsIHNvIHdlIG5lZWQgdGhlIHRydW5jYXRlIHJlc2VydmF0aW9uIHRvIGJlIHNlcGVyYXRlIHNvIGl0CisJICogZG9lc24ndCBlbmQgdXAgdXNpbmcgc3BhY2UgcmVzZXJ2ZWQgZm9yIHVwZGF0aW5nIHRoZSBpbm9kZSBvcgorCSAqIHJlbW92aW5nIHRoZSBvcnBoYW4gaXRlbS4gIFdlIGFsc28gbmVlZCB0byBiZSBhYmxlIHRvIHN0b3AgdGhlCisJICogdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IGEgbmV3IG9uZSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBiZSBhYmxlIHRvCisJICogdXBkYXRlIHRoZSBpbm9kZSBzZXZlcmFsIHRpbWVzLCBhbmQgd2UgaGF2ZSBubyBpZGVhIG9mIGtub3dpbmcgaG93CisJICogbWFueSB0aW1lcyB0aGF0IHdpbGwgYmUsIHNvIHdlIGNhbid0IGp1c3QgcmVzZXJ2ZSAxIGl0ZW0gZm9yIHRoZQorCSAqIGVudGlyZXR5IG9mIHRoZSBvcHJhdGlvbiwgc28gdGhhdCBoYXMgdG8gYmUgZG9uZSBzZXBlcmF0ZWx5IGFzIHdlbGwuCisJICogVGhlbiB0aGVyZSBpcyB0aGUgb3JwaGFuIGl0ZW0sIHdoaWNoIGRvZXMgaW5kZWVkIG5lZWQgdG8gYmUgaGVsZCBvbgorCSAqIHRvIGZvciB0aGUgd2hvbGUgb3BlcmF0aW9uLCBhbmQgd2UgbmVlZCBub2JvZHkgdG8gdG91Y2ggdGhpcyByZXNlcnZlZAorCSAqIHNwYWNlIGV4Y2VwdCB0aGUgb3JwaGFuIGNvZGUuCisJICoKKwkgKiBTbyB0aGF0IGxlYXZlcyB1cyB3aXRoCisJICoKKwkgKiAxKSByb290LT5vcnBoYW5fYmxvY2tfcnN2IC0gZm9yIHRoZSBvcnBoYW4gZGVsZXRpb24uCisJICogMikgcnN2IC0gZm9yIHRoZSB0cnVuY2F0ZSByZXNlcnZhdGlvbiwgd2hpY2ggd2Ugd2lsbCBzdGVhbCBmcm9tIHRoZQorCSAqIHRyYW5zYWN0aW9uIHJlc2VydmF0aW9uLgorCSAqIDMpIGZzX2luZm8tPnRyYW5zX2Jsb2NrX3JzdiAtIHRoaXMgd2lsbCBoYXZlIDEgaXRlbXMgd29ydGggbGVmdCBmb3IKKwkgKiB1cGRhdGluZyB0aGUgaW5vZGUuCisJICovCisJcnN2ID0gYnRyZnNfYWxsb2NfYmxvY2tfcnN2KHJvb3QpOworCWlmICghcnN2KQorCQlyZXR1cm4gLUVOT01FTTsKKwlidHJmc19hZGRfZHVyYWJsZV9ibG9ja19yc3Yocm9vdC0+ZnNfaW5mbywgcnN2KTsKIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgNCk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHRydW5jYXRlIHByb2Nlc3MuICBUcnVuY2F0ZSBzaG91bGQgYmUgYWRkaW5nCisJICogc3BhY2UsIGJ1dCBpZiB0aGVyZSBhcmUgc25hcHNob3RzIGl0IG1heSBlbmQgdXAgdXNpbmcgc3BhY2UuCisJICovCisJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfcmVzZXJ2ZV9tZXRhZGF0YSh0cmFucywgcm9vdCwgcnN2KTsKKwlCVUdfT04ocmV0KTsKIAogCXJldCA9IGJ0cmZzX29ycGhhbl9hZGQodHJhbnMsIGlub2RlKTsKIAlpZiAocmV0KSB7CiAJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCX0KIAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAKLQkvKiBOb3cgc3RhcnQgYSB0cmFuc2FjdGlvbiBmb3IgdGhlIHRydW5jYXRlICovCi0JdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlpZiAoSVNfRVJSKHRyYW5zKSkKLQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwotCXRyYW5zLT5ibG9ja19yc3YgPSByb290LT5vcnBoYW5fYmxvY2tfcnN2OworCS8qCisJICogT2sgc28gd2UndmUgYWxyZWFkeSBtaWdyYXRlZCBvdXIgYnl0ZXMgb3ZlciBmb3IgdGhlIHRydW5jYXRlLCBzbyBoZXJlCisJICoganVzdCByZXNlcnZlIHRoZSBvbmUgc2xvdCB3ZSBuZWVkIGZvciB1cGRhdGluZyB0aGUgaW5vZGUuCisJICovCisJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwkJZ290byBvdXQ7CisJfQorCXRyYW5zLT5ibG9ja19yc3YgPSByc3Y7CiAKIAkvKgogCSAqIHNldGF0dHIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIG9yZGVyZWRfZGF0YV9jbG9zZSBmbGFnLApAQCAtNjU1OCwyNCArNjU5NSwxNyBAQAogCiAJd2hpbGUgKDEpIHsKIAkJaWYgKCF0cmFucykgewotCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKLQkJCWlmIChJU19FUlIodHJhbnMpKQotCQkJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKLQkJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwotCQkJdHJhbnMtPmJsb2NrX3JzdiA9IHJvb3QtPm9ycGhhbl9ibG9ja19yc3Y7Ci0JCX0KKwkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMyk7CisJCQlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQkJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCQkJCWdvdG8gb3V0OworCQkJfQogCi0JCXJldCA9IGJ0cmZzX2Jsb2NrX3Jzdl9jaGVjayh0cmFucywgcm9vdCwKLQkJCQkJICAgIHJvb3QtPm9ycGhhbl9ibG9ja19yc3YsIDAsIDUpOwotCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKLQkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCQl0cmFucyA9IE5VTEw7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChyZXQpIHsKLQkJCWVyciA9IHJldDsKLQkJCWJyZWFrOworCQkJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfcmVzZXJ2ZV9tZXRhZGF0YSh0cmFucywgcm9vdCwKKwkJCQkJCQkgICAgICByc3YpOworCQkJQlVHX09OKHJldCk7CisKKwkJCXRyYW5zLT5ibG9ja19yc3YgPSByc3Y7CiAJCX0KIAogCQlyZXQgPSBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyh0cmFucywgcm9vdCwgaW5vZGUsCkBAIC02NTg2LDYgKzY2MTYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPnRyYW5zX2Jsb2NrX3JzdjsKIAkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJCWlmIChyZXQpIHsKIAkJCWVyciA9IHJldDsKQEAgLTY1OTksNiArNjYzMCw3IEBACiAJfQogCiAJaWYgKHJldCA9PSAwICYmIGlub2RlLT5pX25saW5rID4gMCkgeworCQl0cmFucy0+YmxvY2tfcnN2ID0gcm9vdC0+b3JwaGFuX2Jsb2NrX3JzdjsKIAkJcmV0ID0gYnRyZnNfb3JwaGFuX2RlbCh0cmFucywgaW5vZGUpOwogCQlpZiAocmV0KQogCQkJZXJyID0gcmV0OwpAQCAtNjYxMCwxNSArNjY0MiwyMCBAQAogCQlyZXQgPSBidHJmc19vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTsKIAl9CiAKKwl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPnRyYW5zX2Jsb2NrX3JzdjsKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAlpZiAocmV0ICYmICFlcnIpCiAJCWVyciA9IHJldDsKIAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCXJldCA9IGJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CisJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CisKK291dDoKKwlidHJmc19mcmVlX2Jsb2NrX3Jzdihyb290LCByc3YpOworCiAJaWYgKHJldCAmJiAhZXJyKQogCQllcnIgPSByZXQ7Ci0JYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjYyNywxNSArNjY2NCwxNCBAQAogICogY3JlYXRlIGEgbmV3IHN1YnZvbHVtZSBkaXJlY3RvcnkvaW5vZGUgKGhlbHBlciBmb3IgdGhlIGlvY3RsKS4KICAqLwogaW50IGJ0cmZzX2NyZWF0ZV9zdWJ2b2xfcm9vdChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKm5ld19yb290LAotCQkJICAgICB1NjQgbmV3X2RpcmlkLCB1NjQgYWxsb2NfaGludCkKKwkJCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKm5ld19yb290LCB1NjQgbmV3X2RpcmlkKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IGVycjsKIAl1NjQgaW5kZXggPSAwOwogCiAJaW5vZGUgPSBidHJmc19uZXdfaW5vZGUodHJhbnMsIG5ld19yb290LCBOVUxMLCAiLi4iLCAyLCBuZXdfZGlyaWQsCi0JCQkJbmV3X2RpcmlkLCBhbGxvY19oaW50LCBTX0lGRElSIHwgMDcwMCwgJmluZGV4KTsKKwkJCQluZXdfZGlyaWQsIFNfSUZESVIgfCAwNzAwLCAmaW5kZXgpOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CiAJaW5vZGUtPmlfb3AgPSAmYnRyZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CkBAIC02NzQ4LDIxICs2Nzg0LDYgQEAKIAkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOwogCX0KIAotCWlmIChyb290ID09IHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCkgewotCQlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwOwotCi0JCWJsb2NrX2dyb3VwID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKHJvb3QtPmZzX2luZm8sCi0JCQkJCQlCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXApOwotCQlpZiAoYmxvY2tfZ3JvdXAgJiYgYmxvY2tfZ3JvdXAtPmlub2RlID09IGlub2RlKSB7Ci0JCQlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT5sb2NrKTsKLQkJCWJsb2NrX2dyb3VwLT5pbm9kZSA9IE5VTEw7Ci0JCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPmxvY2spOwotCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKLQkJfSBlbHNlIGlmIChibG9ja19ncm91cCkgewotCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKLQkJfQotCX0KLQogCXNwaW5fbG9jaygmcm9vdC0+b3JwaGFuX2xvY2spOwogCWlmICghbGlzdF9lbXB0eSgmQlRSRlNfSShpbm9kZSktPmlfb3JwaGFuKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJCVFJGUzogaW5vZGUgJWxsdSBzdGlsbCBvbiB0aGUgb3JwaGFuIGxpc3RcbiIsCkBAIC02OTQ4LDggKzY5NjksNiBAQAogICAgICAgICAgICAgICAgIGdvdG8gb3V0X25vdHJhbnM7CiAgICAgICAgIH0KIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgbmV3X2Rpcik7Ci0KIAlpZiAoZGVzdCAhPSByb290KQogCQlidHJmc19yZWNvcmRfcm9vdF9pbl90cmFucyh0cmFucywgZGVzdCk7CiAKQEAgLTcxMzEsMTYgKzcxNTAsMTMgQEAKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwotCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX2lubyhyb290LCAmb2JqZWN0aWQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlub2RlID0gYnRyZnNfbmV3X2lub2RlKHRyYW5zLCByb290LCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJZGVudHJ5LT5kX25hbWUubGVuLCBidHJmc19pbm8oZGlyKSwgb2JqZWN0aWQsCi0JCQkJQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCwgU19JRkxOS3xTX0lSV1hVR08sCi0JCQkJJmluZGV4KTsKKwkJCQlTX0lGTE5LfFNfSVJXWFVHTywgJmluZGV4KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNzE1Miw3ICs3MTY4LDYgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCWVyciA9IGJ0cmZzX2FkZF9ub25kaXIodHJhbnMsIGRpciwgZGVudHJ5LCBpbm9kZSwgMCwgaW5kZXgpOwogCWlmIChlcnIpCiAJCWRyb3BfaW5vZGUgPSAxOwpAQCAtNzE2Myw4ICs3MTc4LDYgQEAKIAkJaW5vZGUtPmlfb3AgPSAmYnRyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogCQlCVFJGU19JKGlub2RlKS0+aW9fdHJlZS5vcHMgPSAmYnRyZnNfZXh0ZW50X2lvX29wczsKIAl9Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCWlmIChkcm9wX2lub2RlKQogCQlnb3RvIG91dF91bmxvY2s7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IDg1ZTgxOGMuLmI3OTNkMTEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJCWlwLT5mbGFncyAmPSB+KEJUUkZTX0lOT0RFX0NPTVBSRVNTIHwgQlRSRlNfSU5PREVfTk9DT01QUkVTUyk7CiAJfQogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKQEAgLTQxNCw4ICs0MTQsNyBAQAogCiAJYnRyZnNfcmVjb3JkX3Jvb3RfaW5fdHJhbnModHJhbnMsIG5ld19yb290KTsKIAotCXJldCA9IGJ0cmZzX2NyZWF0ZV9zdWJ2b2xfcm9vdCh0cmFucywgbmV3X3Jvb3QsIG5ld19kaXJpZCwKLQkJCQkgICAgICAgQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCk7CisJcmV0ID0gYnRyZnNfY3JlYXRlX3N1YnZvbF9yb290KHRyYW5zLCBuZXdfcm9vdCwgbmV3X2RpcmlkKTsKIAkvKgogCSAqIGluc2VydCB0aGUgZGlyZWN0b3J5IGl0ZW0KIAkgKi8KQEAgLTcwNywxNiArNzA2LDE3IEBACiAJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0gKmV4dGVudDsKIAlpbnQgdHlwZTsKIAlpbnQgcmV0OworCXU2NCBpbm8gPSBidHJmc19pbm8oaW5vZGUpOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWluX2tleS5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKKwltaW5fa2V5Lm9iamVjdGlkID0gaW5vOwogCW1pbl9rZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWTsKIAltaW5fa2V5Lm9mZnNldCA9ICpvZmY7CiAKLQltYXhfa2V5Lm9iamVjdGlkID0gaW5vZGUtPmlfaW5vOworCW1heF9rZXkub2JqZWN0aWQgPSBpbm87CiAJbWF4X2tleS50eXBlID0gKHU4KS0xOwogCW1heF9rZXkub2Zmc2V0ID0gKHU2NCktMTsKIApAQCAtNzI3LDcgKzcyNyw3IEBACiAJCQkJCSAgIHBhdGgsIDAsIG5ld2VyX3RoYW4pOwogCQlpZiAocmV0ICE9IDApCiAJCQlnb3RvIG5vbmU7Ci0JCWlmIChtaW5fa2V5Lm9iamVjdGlkICE9IGlub2RlLT5pX2lubykKKwkJaWYgKG1pbl9rZXkub2JqZWN0aWQgIT0gaW5vKQogCQkJZ290byBub25lOwogCQlpZiAobWluX2tleS50eXBlICE9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWSkKIAkJCWdvdG8gbm9uZTsKQEAgLTIwNTQsMjkgKzIwNTQsMzQgQEAKIAogc3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfZnNfaW5mbyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdm9pZCBfX3VzZXIgKmFyZykKIHsKLQlzdHJ1Y3QgYnRyZnNfaW9jdGxfZnNfaW5mb19hcmdzIGZpX2FyZ3M7CisJc3RydWN0IGJ0cmZzX2lvY3RsX2ZzX2luZm9fYXJncyAqZmlfYXJnczsKIAlzdHJ1Y3QgYnRyZnNfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IGJ0cmZzX2RldmljZSAqbmV4dDsKIAlzdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyAqZnNfZGV2aWNlcyA9IHJvb3QtPmZzX2luZm8tPmZzX2RldmljZXM7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlmaV9hcmdzLm51bV9kZXZpY2VzID0gZnNfZGV2aWNlcy0+bnVtX2RldmljZXM7Ci0JZmlfYXJncy5tYXhfaWQgPSAwOwotCW1lbWNweSgmZmlfYXJncy5mc2lkLCByb290LT5mc19pbmZvLT5mc2lkLCBzaXplb2YoZmlfYXJncy5mc2lkKSk7CisJZmlfYXJncyA9IGt6YWxsb2Moc2l6ZW9mKCpmaV9hcmdzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaV9hcmdzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZpX2FyZ3MtPm51bV9kZXZpY2VzID0gZnNfZGV2aWNlcy0+bnVtX2RldmljZXM7CisJbWVtY3B5KCZmaV9hcmdzLT5mc2lkLCByb290LT5mc19pbmZvLT5mc2lkLCBzaXplb2YoZmlfYXJncy0+ZnNpZCkpOwogCiAJbXV0ZXhfbG9jaygmZnNfZGV2aWNlcy0+ZGV2aWNlX2xpc3RfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXZpY2UsIG5leHQsICZmc19kZXZpY2VzLT5kZXZpY2VzLCBkZXZfbGlzdCkgewotCQlpZiAoZGV2aWNlLT5kZXZpZCA+IGZpX2FyZ3MubWF4X2lkKQotCQkJZmlfYXJncy5tYXhfaWQgPSBkZXZpY2UtPmRldmlkOworCQlpZiAoZGV2aWNlLT5kZXZpZCA+IGZpX2FyZ3MtPm1heF9pZCkKKwkJCWZpX2FyZ3MtPm1heF9pZCA9IGRldmljZS0+ZGV2aWQ7CiAJfQogCW11dGV4X3VubG9jaygmZnNfZGV2aWNlcy0+ZGV2aWNlX2xpc3RfbXV0ZXgpOwogCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmaV9hcmdzLCBzaXplb2YoZmlfYXJncykpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoY29weV90b191c2VyKGFyZywgZmlfYXJncywgc2l6ZW9mKCpmaV9hcmdzKSkpCisJCXJldCA9IC1FRkFVTFQ7CiAKLQlyZXR1cm4gMDsKKwlrZnJlZShmaV9hcmdzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgbG9uZyBidHJmc19pb2N0bF9kZXZfaW5mbyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdm9pZCBfX3VzZXIgKmFyZykKQEAgLTI0ODksMTIgKzI0OTQsMTAgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQlyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKys7Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJYXRvbWljX2luYygmcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucyk7CiAKIAlyZXQgPSAtRU5PTUVNOwotCXRyYW5zID0gYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJdHJhbnMgPSBidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihyb290KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJZ290byBvdXRfZHJvcDsKIApAQCAtMjUwMiw5ICsyNTA1LDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2Ryb3A6Ci0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMtLTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlhdG9taWNfZGVjKCZyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKTsKIAltbnRfZHJvcF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMjczOCw5ICsyNzM5LDcgQEAKIAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0Jcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucy0tOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCWF0b21pY19kZWMoJnJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpOwogCiAJbW50X2Ryb3Bfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKaW5kZXggY2EzOGVjYS4uYjFlZjI3YyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwpAQCAtNjc3LDYgKzY3Nyw4IEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KKwlwYXRoMS0+cmVhZGEgPSAxOworCXBhdGgyLT5yZWFkYSA9IDI7CiAKIAlub2RlID0gYWxsb2NfYmFja3JlZl9ub2RlKGNhY2hlKTsKIAlpZiAoIW5vZGUpIHsKQEAgLTE5OTksNiArMjAwMSw3IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOworCXBhdGgtPnJlYWRhID0gMTsKIAogCXJlbG9jX3Jvb3QgPSByb290LT5yZWxvY19yb290OwogCXJvb3RfaXRlbSA9ICZyZWxvY19yb290LT5yb290X2l0ZW07CkBAIC0yMTM5LDEwICsyMTQyLDEwIEBACiAJdTY0IG51bV9ieXRlcyA9IDA7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCXJjLT5tZXJnaW5nX3Jzdl9zaXplICs9IHJvb3QtPm5vZGVzaXplICogKEJUUkZTX01BWF9MRVZFTCAtIDEpICogMjsKIAlyYy0+bWVyZ2luZ19yc3Zfc2l6ZSArPSByYy0+bm9kZXNfcmVsb2NhdGVkICogMjsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiBhZ2FpbjoKIAlpZiAoIWVycikgewogCQludW1fYnl0ZXMgPSByYy0+bWVyZ2luZ19yc3Zfc2l6ZTsKQEAgLTIxNTIsNyArMjE1NSw3IEBACiAJCQllcnIgPSByZXQ7CiAJfQogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpIHsKIAkJaWYgKCFlcnIpCiAJCQlidHJmc19ibG9ja19yc3ZfcmVsZWFzZShyYy0+ZXh0ZW50X3Jvb3QsCkBAIC0yMjExLDkgKzIyMTQsOSBAQAogCWludCByZXQ7CiBhZ2FpbjoKIAlyb290ID0gcmMtPmV4dGVudF9yb290OwotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCWxpc3Rfc3BsaWNlX2luaXQoJnJjLT5yZWxvY19yb290cywgJnJlbG9jX3Jvb3RzKTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlbG9jX3Jvb3RzKSkgewogCQlmb3VuZCA9IDE7CkBAIC0zMjM2LDcgKzMyMzksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAkJcmV0ID0gUFRSX0VSUih0cmFucyk7CkBAIC0zMzAwLDYgKzMzMDMsNyBAQAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKKwlwYXRoLT5yZWFkYSA9IDE7CiAKIAlyb290ID0gcmVhZF9mc19yb290KHJjLT5leHRlbnRfcm9vdC0+ZnNfaW5mbywgcmVmX3Jvb3QpOwogCWlmIChJU19FUlIocm9vdCkpIHsKQEAgLTM1ODYsMTcgKzM1OTAsMTcgQEAKIHN0YXRpYyB2b2lkIHNldF9yZWxvY19jb250cm9sKHN0cnVjdCByZWxvY19jb250cm9sICpyYykKIHsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IHJjLT5leHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQltdXRleF9sb2NrKCZmc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl9sb2NrKCZmc19pbmZvLT50cmFuc19sb2NrKTsKIAlmc19pbmZvLT5yZWxvY19jdGwgPSByYzsKLQltdXRleF91bmxvY2soJmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX3VubG9jaygmZnNfaW5mby0+dHJhbnNfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHVuc2V0X3JlbG9jX2NvbnRyb2woc3RydWN0IHJlbG9jX2NvbnRyb2wgKnJjKQogewogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gcmMtPmV4dGVudF9yb290LT5mc19pbmZvOwotCW11dGV4X2xvY2soJmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX2xvY2soJmZzX2luZm8tPnRyYW5zX2xvY2spOwogCWZzX2luZm8tPnJlbG9jX2N0bCA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl91bmxvY2soJmZzX2luZm8tPnRyYW5zX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX2V4dGVudF9mbGFncyh1NjQgZmxhZ3MpCkBAIC0zNjQ1LDcgKzM2NDksNyBAQAogCXJjLT5jcmVhdGVfcmVsb2NfdHJlZSA9IDE7CiAJc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCk7CiAJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKIAlyZXR1cm4gMDsKQEAgLTM2NjgsNiArMzY3Miw3IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOworCXBhdGgtPnJlYWRhID0gMTsKIAogCXJldCA9IHByZXBhcmVfdG9fcmVsb2NhdGUocmMpOwogCWlmIChyZXQpIHsKQEAgLTM4MzQsNyArMzgzOSw3IEBACiAJYnRyZnNfYmxvY2tfcnN2X3JlbGVhc2UocmMtPmV4dGVudF9yb290LCByYy0+YmxvY2tfcnN2LCAodTY0KS0xKTsKIAogCS8qIGdldCByaWQgb2YgcGlubmVkIGV4dGVudHMgKi8KLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJZXJyID0gUFRSX0VSUih0cmFucyk7CiAJZWxzZQpAQCAtNDA5Myw2ICs0MDk4LDcgQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CisJcGF0aC0+cmVhZGEgPSAtMTsKIAogCWtleS5vYmplY3RpZCA9IEJUUkZTX1RSRUVfUkVMT0NfT0JKRUNUSUQ7CiAJa2V5LnR5cGUgPSBCVFJGU19ST09UX0lURU1fS0VZOwpAQCAtNDE1OSw3ICs0MTY1LDcgQEAKIAogCXNldF9yZWxvY19jb250cm9sKHJjKTsKIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCXVuc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKQEAgLTQxOTMsNyArNDE5OSw3IEBACiAKIAl1bnNldF9yZWxvY19jb250cm9sKHJjKTsKIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKQogCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKIAllbHNlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9zY3J1Yi5jIGIvZnMvYnRyZnMvc2NydWIuYwppbmRleCA2ZGZlZDBjLi5hOGQwM2Q1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zY3J1Yi5jCisrKyBiL2ZzL2J0cmZzL3NjcnViLmMKQEAgLTE2LDEzICsxNiw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlICJjdHJlZS5oIgogI2luY2x1ZGUgInZvbHVtZXMuaCIKICNpbmNsdWRlICJkaXNrLWlvLmgiCkBAIC0xMTcsMzMgKzExMSwzNyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2NydWJfZnJlZV9iaW8oc3RydWN0IGJpbyAqYmlvKQoreworCWludCBpOworCXN0cnVjdCBwYWdlICpsYXN0X3BhZ2UgPSBOVUxMOworCisJaWYgKCFiaW8pCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBiaW8tPmJpX3ZjbnQ7ICsraSkgeworCQlpZiAoYmlvLT5iaV9pb192ZWNbaV0uYnZfcGFnZSA9PSBsYXN0X3BhZ2UpCisJCQljb250aW51ZTsKKwkJbGFzdF9wYWdlID0gYmlvLT5iaV9pb192ZWNbaV0uYnZfcGFnZTsKKwkJX19mcmVlX3BhZ2UobGFzdF9wYWdlKTsKKwl9CisJYmlvX3B1dChiaW8pOworfQorCiBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQgc2NydWJfZnJlZV9kZXYoc3RydWN0IHNjcnViX2RldiAqc2RldikKIHsKIAlpbnQgaTsKLQlpbnQgajsKLQlzdHJ1Y3QgcGFnZSAqbGFzdF9wYWdlOwogCiAJaWYgKCFzZGV2KQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0NSVUJfQklPU19QRVJfREVWOyArK2kpIHsKIAkJc3RydWN0IHNjcnViX2JpbyAqc2JpbyA9IHNkZXYtPmJpb3NbaV07Ci0JCXN0cnVjdCBiaW8gKmJpbzsKIAogCQlpZiAoIXNiaW8pCiAJCQlicmVhazsKIAotCQliaW8gPSBzYmlvLT5iaW87Ci0JCWlmIChiaW8pIHsKLQkJCWxhc3RfcGFnZSA9IE5VTEw7Ci0JCQlmb3IgKGogPSAwOyBqIDwgYmlvLT5iaV92Y250OyArK2opIHsKLQkJCQlpZiAoYmlvLT5iaV9pb192ZWNbal0uYnZfcGFnZSA9PSBsYXN0X3BhZ2UpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWxhc3RfcGFnZSA9IGJpby0+YmlfaW9fdmVjW2pdLmJ2X3BhZ2U7Ci0JCQkJX19mcmVlX3BhZ2UobGFzdF9wYWdlKTsKLQkJCX0KLQkJCWJpb19wdXQoYmlvKTsKLQkJfQorCQlzY3J1Yl9mcmVlX2JpbyhzYmlvLT5iaW8pOwogCQlrZnJlZShzYmlvKTsKIAl9CiAKQEAgLTE1Niw4ICsxNTQsNiBAQAogewogCXN0cnVjdCBzY3J1Yl9kZXYgKnNkZXY7CiAJaW50CQlpOwotCWludAkJajsKLQlpbnQJCXJldDsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IGRldi0+ZGV2X3Jvb3QtPmZzX2luZm87CiAKIAlzZGV2ID0ga3phbGxvYyhzaXplb2YoKnNkZXYpLCBHRlBfTk9GUyk7CkBAIC0xNjUsNyArMTYxLDYgQEAKIAkJZ290byBub21lbTsKIAlzZGV2LT5kZXYgPSBkZXY7CiAJZm9yIChpID0gMDsgaSA8IFNDUlVCX0JJT1NfUEVSX0RFVjsgKytpKSB7Ci0JCXN0cnVjdCBiaW8gKmJpbzsKIAkJc3RydWN0IHNjcnViX2JpbyAqc2JpbzsKIAogCQlzYmlvID0ga3phbGxvYyhzaXplb2YoKnNiaW8pLCBHRlBfTk9GUyk7CkBAIC0xNzMsMzIgKzE2OCwxMCBAQAogCQkJZ290byBub21lbTsKIAkJc2Rldi0+Ymlvc1tpXSA9IHNiaW87CiAKLQkJYmlvID0gYmlvX2ttYWxsb2MoR0ZQX05PRlMsIFNDUlVCX1BBR0VTX1BFUl9CSU8pOwotCQlpZiAoIWJpbykKLQkJCWdvdG8gbm9tZW07Ci0KIAkJc2Jpby0+aW5kZXggPSBpOwogCQlzYmlvLT5zZGV2ID0gc2RldjsKLQkJc2Jpby0+YmlvID0gYmlvOwogCQlzYmlvLT5jb3VudCA9IDA7CiAJCXNiaW8tPndvcmsuZnVuYyA9IHNjcnViX2NoZWNrc3VtOwotCQliaW8tPmJpX3ByaXZhdGUgPSBzZGV2LT5iaW9zW2ldOwotCQliaW8tPmJpX2VuZF9pbyA9IHNjcnViX2Jpb19lbmRfaW87Ci0JCWJpby0+Ymlfc2VjdG9yID0gMDsKLQkJYmlvLT5iaV9iZGV2ID0gZGV2LT5iZGV2OwotCQliaW8tPmJpX3NpemUgPSAwOwotCi0JCWZvciAoaiA9IDA7IGogPCBTQ1JVQl9QQUdFU19QRVJfQklPOyArK2opIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlOwotCQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX05PRlMpOwotCQkJaWYgKCFwYWdlKQotCQkJCWdvdG8gbm9tZW07Ci0KLQkJCXJldCA9IGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIFBBR0VfU0laRSwgMCk7Ci0JCQlpZiAoIXJldCkKLQkJCQlnb3RvIG5vbWVtOwotCQl9Ci0JCVdBUk5fT04oYmlvLT5iaV92Y250ICE9IFNDUlVCX1BBR0VTX1BFUl9CSU8pOwogCiAJCWlmIChpICE9IFNDUlVCX0JJT1NfUEVSX0RFVi0xKQogCQkJc2Rldi0+Ymlvc1tpXS0+bmV4dF9mcmVlID0gaSArIDE7CkBAIC0zNjksOSArMzQyLDYgQEAKIAlpbnQgcmV0OwogCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRlKTsKIAotCS8qIHdlIGFyZSBnb2luZyB0byB3YWl0IG9uIHRoaXMgSU8gKi8KLQlydyB8PSBSRVFfU1lOQzsKLQogCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9GUywgMSk7CiAJYmlvLT5iaV9iZGV2ID0gYmRldjsKIAliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKQEAgLTM4MCw2ICszNTAsNyBAQAogCWJpby0+YmlfcHJpdmF0ZSA9ICZjb21wbGV0ZTsKIAlzdWJtaXRfYmlvKHJ3LCBiaW8pOwogCisJLyogdGhpcyB3aWxsIGFsc28gdW5wbHVnIHRoZSBxdWV1ZSAqLwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsZXRlKTsKIAogCXJldCA9ICF0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKQEAgLTM5NCw2ICszNjUsNyBAQAogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gc2Rldi0+ZGV2LT5kZXZfcm9vdC0+ZnNfaW5mbzsKIAogCXNiaW8tPmVyciA9IGVycjsKKwlzYmlvLT5iaW8gPSBiaW87CiAKIAlidHJmc19xdWV1ZV93b3JrZXIoJmZzX2luZm8tPnNjcnViX3dvcmtlcnMsICZzYmlvLT53b3JrKTsKIH0KQEAgLTQ1Myw2ICs0MjUsOCBAQAogCX0KIAogb3V0OgorCXNjcnViX2ZyZWVfYmlvKHNiaW8tPmJpbyk7CisJc2Jpby0+YmlvID0gTlVMTDsKIAlzcGluX2xvY2soJnNkZXYtPmxpc3RfbG9jayk7CiAJc2Jpby0+bmV4dF9mcmVlID0gc2Rldi0+Zmlyc3RfZnJlZTsKIAlzZGV2LT5maXJzdF9mcmVlID0gc2Jpby0+aW5kZXg7CkBAIC01ODMsMjUgKzU1Nyw1MCBAQAogc3RhdGljIGludCBzY3J1Yl9zdWJtaXQoc3RydWN0IHNjcnViX2RldiAqc2RldikKIHsKIAlzdHJ1Y3Qgc2NydWJfYmlvICpzYmlvOworCXN0cnVjdCBiaW8gKmJpbzsKKwlpbnQgaTsKIAogCWlmIChzZGV2LT5jdXJyID09IC0xKQogCQlyZXR1cm4gMDsKIAogCXNiaW8gPSBzZGV2LT5iaW9zW3NkZXYtPmN1cnJdOwogCi0Jc2Jpby0+YmlvLT5iaV9zZWN0b3IgPSBzYmlvLT5waHlzaWNhbCA+PiA5OwotCXNiaW8tPmJpby0+Ymlfc2l6ZSA9IHNiaW8tPmNvdW50ICogUEFHRV9TSVpFOwotCXNiaW8tPmJpby0+YmlfbmV4dCA9IE5VTEw7Ci0Jc2Jpby0+YmlvLT5iaV9mbGFncyB8PSAxIDw8IEJJT19VUFRPREFURTsKLQlzYmlvLT5iaW8tPmJpX2NvbXBfY3B1ID0gLTE7Ci0Jc2Jpby0+YmlvLT5iaV9iZGV2ID0gc2Rldi0+ZGV2LT5iZGV2OworCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9GUywgc2Jpby0+Y291bnQpOworCWlmICghYmlvKQorCQlnb3RvIG5vbWVtOworCisJYmlvLT5iaV9wcml2YXRlID0gc2JpbzsKKwliaW8tPmJpX2VuZF9pbyA9IHNjcnViX2Jpb19lbmRfaW87CisJYmlvLT5iaV9iZGV2ID0gc2Rldi0+ZGV2LT5iZGV2OworCWJpby0+Ymlfc2VjdG9yID0gc2Jpby0+cGh5c2ljYWwgPj4gOTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmlvLT5jb3VudDsgKytpKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQlpbnQgcmV0OworCisJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0ZTKTsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBub21lbTsKKworCQlyZXQgPSBiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBQQUdFX1NJWkUsIDApOworCQlpZiAoIXJldCkgeworCQkJX19mcmVlX3BhZ2UocGFnZSk7CisJCQlnb3RvIG5vbWVtOworCQl9CisJfQorCiAJc2Jpby0+ZXJyID0gMDsKIAlzZGV2LT5jdXJyID0gLTE7CiAJYXRvbWljX2luYygmc2Rldi0+aW5fZmxpZ2h0KTsKIAotCXN1Ym1pdF9iaW8oMCwgc2Jpby0+YmlvKTsKKwlzdWJtaXRfYmlvKFJFQUQsIGJpbyk7CiAKIAlyZXR1cm4gMDsKKworbm9tZW06CisJc2NydWJfZnJlZV9iaW8oYmlvKTsKKworCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgaW50IHNjcnViX3BhZ2Uoc3RydWN0IHNjcnViX2RldiAqc2RldiwgdTY0IGxvZ2ljYWwsIHU2NCBsZW4sCkBAIC02MzMsNyArNjMyLDExIEBACiAJCXNiaW8tPmxvZ2ljYWwgPSBsb2dpY2FsOwogCX0gZWxzZSBpZiAoc2Jpby0+cGh5c2ljYWwgKyBzYmlvLT5jb3VudCAqIFBBR0VfU0laRSAhPSBwaHlzaWNhbCB8fAogCQkgICBzYmlvLT5sb2dpY2FsICsgc2Jpby0+Y291bnQgKiBQQUdFX1NJWkUgIT0gbG9naWNhbCkgewotCQlzY3J1Yl9zdWJtaXQoc2Rldik7CisJCWludCByZXQ7CisKKwkJcmV0ID0gc2NydWJfc3VibWl0KHNkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAkJZ290byBhZ2FpbjsKIAl9CiAJc2Jpby0+c3BhZ1tzYmlvLT5jb3VudF0uZmxhZ3MgPSBmbGFnczsKQEAgLTY0NSw4ICs2NDgsMTMgQEAKIAkJbWVtY3B5KHNiaW8tPnNwYWdbc2Jpby0+Y291bnRdLmNzdW0sIGNzdW0sIHNkZXYtPmNzdW1fc2l6ZSk7CiAJfQogCSsrc2Jpby0+Y291bnQ7Ci0JaWYgKHNiaW8tPmNvdW50ID09IFNDUlVCX1BBR0VTX1BFUl9CSU8gfHwgZm9yY2UpCi0JCXNjcnViX3N1Ym1pdChzZGV2KTsKKwlpZiAoc2Jpby0+Y291bnQgPT0gU0NSVUJfUEFHRVNfUEVSX0JJTyB8fCBmb3JjZSkgeworCQlpbnQgcmV0OworCisJCXJldCA9IHNjcnViX3N1Ym1pdChzZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC03MjcsNiArNzM1LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IGZzX2luZm8tPmV4dGVudF9yb290OwogCXN0cnVjdCBidHJmc19yb290ICpjc3VtX3Jvb3QgPSBmc19pbmZvLT5jc3VtX3Jvb3Q7CiAJc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtICpleHRlbnQ7CisJc3RydWN0IGJsa19wbHVnIHBsdWc7CiAJdTY0IGZsYWdzOwogCWludCByZXQ7CiAJaW50IHNsb3Q7CkBAIC03ODksMTggKzc5OCwxMiBAQAogCiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfbm9wbHVnOwogCi0JCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCQlidHJmc19pdGVtX2tleV90b19jcHUobCwgJmtleSwgc2xvdCk7Ci0JCWlmIChrZXkub2JqZWN0aWQgIT0gbG9naWNhbCkgewotCQkJcmV0ID0gYnRyZnNfcHJldmlvdXNfaXRlbShyb290LCBwYXRoLCAwLAotCQkJCQkJICBCVFJGU19FWFRFTlRfSVRFTV9LRVkpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQorCQkvKgorCQkgKiB3ZSBtaWdodCBtaXNzIGhhbGYgYW4gZXh0ZW50IGhlcmUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyLAorCQkgKiBhcyBpdCdzIG9ubHkgdGhlIHByZWZldGNoCisJCSAqLwogCQl3aGlsZSAoMSkgewogCQkJbCA9IHBhdGgtPm5vZGVzWzBdOwogCQkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwpAQCAtODA5LDcgKzgxMiw3IEBACiAJCQkJaWYgKHJldCA9PSAwKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAocmV0IDwgMCkKLQkJCQkJZ290byBvdXQ7CisJCQkJCWdvdG8gb3V0X25vcGx1ZzsKIAogCQkJCWJyZWFrOwogCQkJfQpAQCAtODMxLDYgKzgzNCw3IEBACiAJICogdGhlIHNjcnViLiBUaGlzIG1pZ2h0IGN1cnJlbnRseSAoY3JjMzIpIGVuZCB1cCB0byBiZSBhYm91dCAxTUIKIAkgKi8KIAlzdGFydF9zdHJpcGUgPSAwOworCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIGFnYWluOgogCWxvZ2ljYWwgPSBiYXNlICsgb2Zmc2V0ICsgc3RhcnRfc3RyaXBlICogaW5jcmVtZW50OwogCWZvciAoaSA9IHN0YXJ0X3N0cmlwZTsgaSA8IG5zdHJpcGVzOyArK2kpIHsKQEAgLTg5MCwxNSArODk0LDIwIEBACiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwotCi0JCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCQlidHJmc19pdGVtX2tleV90b19jcHUobCwgJmtleSwgc2xvdCk7Ci0JCWlmIChrZXkub2JqZWN0aWQgIT0gbG9naWNhbCkgeworCQlpZiAocmV0ID4gMCkgewogCQkJcmV0ID0gYnRyZnNfcHJldmlvdXNfaXRlbShyb290LCBwYXRoLCAwLAogCQkJCQkJICBCVFJGU19FWFRFTlRfSVRFTV9LRVkpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBvdXQ7CisJCQlpZiAocmV0ID4gMCkgeworCQkJCS8qIHRoZXJlJ3Mgbm8gc21hbGxlciBpdGVtLCBzbyBzdGljayB3aXRoIHRoZQorCQkJCSAqIGxhcmdlciBvbmUgKi8KKwkJCQlidHJmc19yZWxlYXNlX3BhdGgocGF0aCk7CisJCQkJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwKKwkJCQkJCQlwYXRoLCAwLCAwKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJZ290byBvdXQ7CisJCQl9CiAJCX0KIAogCQl3aGlsZSAoMSkgewpAQCAtOTcyLDYgKzk4MSw4IEBACiAJc2NydWJfc3VibWl0KHNkZXYpOwogCiBvdXQ6CisJYmxrX2ZpbmlzaF9wbHVnKCZwbHVnKTsKK291dF9ub3BsdWc6CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KQEAgLTEwNDcsOCArMTA1OCwxNSBAQAogCXdoaWxlICgxKSB7CiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCWlmIChyZXQgPiAwKSB7CisJCQlpZiAocGF0aC0+c2xvdHNbMF0gPj0KKwkJCSAgICBidHJmc19oZWFkZXJfbnJpdGVtcyhwYXRoLT5ub2Rlc1swXSkpIHsKKwkJCQlyZXQgPSBidHJmc19uZXh0X2xlYWYocm9vdCwgcGF0aCk7CisJCQkJaWYgKHJldCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KIAogCQlsID0gcGF0aC0+bm9kZXNbMF07CiAJCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKQEAgLTEwNTgsNyArMTA3Niw3IEBACiAJCWlmIChmb3VuZF9rZXkub2JqZWN0aWQgIT0gc2Rldi0+ZGV2LT5kZXZpZCkKIAkJCWJyZWFrOwogCi0JCWlmIChidHJmc19rZXlfdHlwZSgma2V5KSAhPSBCVFJGU19ERVZfRVhURU5UX0tFWSkKKwkJaWYgKGJ0cmZzX2tleV90eXBlKCZmb3VuZF9rZXkpICE9IEJUUkZTX0RFVl9FWFRFTlRfS0VZKQogCQkJYnJlYWs7CiAKIAkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPj0gZW5kKQpAQCAtMTA4Nyw3ICsxMTA1LDcgQEAKIAkJY2FjaGUgPSBidHJmc19sb29rdXBfYmxvY2tfZ3JvdXAoZnNfaW5mbywgY2h1bmtfb2Zmc2V0KTsKIAkJaWYgKCFjYWNoZSkgewogCQkJcmV0ID0gLUVOT0VOVDsKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCX0KIAkJcmV0ID0gc2NydWJfY2h1bmsoc2RldiwgY2h1bmtfdHJlZSwgY2h1bmtfb2JqZWN0aWQsCiAJCQkJICBjaHVua19vZmZzZXQsIGxlbmd0aCk7CkBAIC0xMDk5LDkgKzExMTcsMTMgQEAKIAkJYnRyZnNfcmVsZWFzZV9wYXRoKHBhdGgpOwogCX0KIAotb3V0OgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiByZXQgY2FuIHN0aWxsIGJlIDEgZnJvbSBzZWFyY2hfc2xvdCBvciBuZXh0X2xlYWYsCisJICogdGhhdCdzIG5vdCBhbiBlcnJvcgorCSAqLworCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KIAogc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgc2NydWJfc3VwZXJzKHN0cnVjdCBzY3J1Yl9kZXYgKnNkZXYpCkBAIC0xMTM4LDggKzExNjAsMTIgQEAKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IHJvb3QtPmZzX2luZm87CiAKIAltdXRleF9sb2NrKCZmc19pbmZvLT5zY3J1Yl9sb2NrKTsKLQlpZiAoZnNfaW5mby0+c2NydWJfd29ya2Vyc19yZWZjbnQgPT0gMCkKKwlpZiAoZnNfaW5mby0+c2NydWJfd29ya2Vyc19yZWZjbnQgPT0gMCkgeworCQlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPnNjcnViX3dvcmtlcnMsICJzY3J1YiIsCisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLCAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOworCQlmc19pbmZvLT5zY3J1Yl93b3JrZXJzLmlkbGVfdGhyZXNoID0gNDsKIAkJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+c2NydWJfd29ya2VycywgMSk7CisJfQogCSsrZnNfaW5mby0+c2NydWJfd29ya2Vyc19yZWZjbnQ7CiAJbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT5zY3J1Yl9sb2NrKTsKIApAQCAtMTE2Niw3ICsxMTkyLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBidHJmc19kZXZpY2UgKmRldjsKIAotCWlmIChyb290LT5mc19pbmZvLT5jbG9zaW5nKQorCWlmIChidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuYwppbmRleCA5YjJlN2U1Li4wYmI0ZWJiIDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTE2MSw3ICsxNjEsOCBAQAogCU9wdF9jb21wcmVzc190eXBlLCBPcHRfY29tcHJlc3NfZm9yY2UsIE9wdF9jb21wcmVzc19mb3JjZV90eXBlLAogCU9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsIE9wdF9kaXNjYXJkLAogCU9wdF9zcGFjZV9jYWNoZSwgT3B0X2NsZWFyX2NhY2hlLCBPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCwKLQlPcHRfZW5vc3BjX2RlYnVnLCBPcHRfc3Vidm9scm9vdGlkLCBPcHRfZGVmcmFnLCBPcHRfZXJyLAorCU9wdF9lbm9zcGNfZGVidWcsIE9wdF9zdWJ2b2xyb290aWQsIE9wdF9kZWZyYWcsCisJT3B0X2lub2RlX2NhY2hlLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtMTkzLDYgKzE5NCw3IEBACiAJe09wdF9lbm9zcGNfZGVidWcsICJlbm9zcGNfZGVidWcifSwKIAl7T3B0X3N1YnZvbHJvb3RpZCwgInN1YnZvbHJvb3RpZD0lZCJ9LAogCXtPcHRfZGVmcmFnLCAiYXV0b2RlZnJhZyJ9LAorCXtPcHRfaW5vZGVfY2FjaGUsICJpbm9kZV9jYWNoZSJ9LAogCXtPcHRfZXJyLCBOVUxMfSwKIH07CiAKQEAgLTM2MSw2ICszNjMsMTAgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiBlbmFibGluZyBkaXNrIHNwYWNlIGNhY2hpbmdcbiIpOwogCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIFNQQUNFX0NBQ0hFKTsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9pbm9kZV9jYWNoZToKKwkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiBlbmFibGluZyBpbm9kZSBtYXAgY2FjaGluZ1xuIik7CisJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgSU5PREVfTUFQX0NBQ0hFKTsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9jbGVhcl9jYWNoZToKIAkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiBmb3JjZSBjbGVhcmluZyBvZiBkaXNrIGNhY2hlXG4iKTsKIAkJCWJ0cmZzX3NldF9vcHQoaW5mby0+bW91bnRfb3B0LCBDTEVBUl9DQUNIRSk7CkBAIC04MTksNyArODI1LDcgQEAKIAl9IGVsc2UgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKLQkJcy0+c19mbGFncyA9IGZsYWdzOworCQlzLT5zX2ZsYWdzID0gZmxhZ3MgfCBNU19OT1NFQzsKIAkJc3RybGNweShzLT5zX2lkLCBiZGV2bmFtZShiZGV2LCBiKSwgc2l6ZW9mKHMtPnNfaWQpKTsKIAkJZXJyb3IgPSBidHJmc19maWxsX3N1cGVyKHMsIGZzX2RldmljZXMsIGRhdGEsCiAJCQkJCSBmbGFncyAmIE1TX1NJTEVOVCA/IDEgOiAwKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IGRjODBmNzEuLjJiMzU5MGIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMzUsNiArMzUsNyBAQAogewogCVdBUk5fT04oYXRvbWljX3JlYWQoJnRyYW5zYWN0aW9uLT51c2VfY291bnQpID09IDApOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0cmFuc2FjdGlvbi0+dXNlX2NvdW50KSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJnRyYW5zYWN0aW9uLT5saXN0KSk7CiAJCW1lbXNldCh0cmFuc2FjdGlvbiwgMCwgc2l6ZW9mKCp0cmFuc2FjdGlvbikpOwogCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfdHJhbnNhY3Rpb25fY2FjaGVwLCB0cmFuc2FjdGlvbik7CiAJfQpAQCAtNDksNDYgKzUwLDcyIEBACiAvKgogICogZWl0aGVyIGFsbG9jYXRlIGEgbmV3IHRyYW5zYWN0aW9uIG9yIGhvcCBpbnRvIHRoZSBleGlzdGluZyBvbmUKICAqLwotc3RhdGljIG5vaW5saW5lIGludCBqb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290KQorc3RhdGljIG5vaW5saW5lIGludCBqb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgbm9mYWlsKQogewogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY3VyX3RyYW5zOworCisJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKKwlpZiAocm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbikgeworCQlpZiAoIW5vZmFpbCkgeworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKwogCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247Ci0JaWYgKCFjdXJfdHJhbnMpIHsKLQkJY3VyX3RyYW5zID0ga21lbV9jYWNoZV9hbGxvYyhidHJmc190cmFuc2FjdGlvbl9jYWNoZXAsCi0JCQkJCSAgICAgR0ZQX05PRlMpOwotCQlpZiAoIWN1cl90cmFucykKLQkJCXJldHVybiAtRU5PTUVNOwotCQlyb290LT5mc19pbmZvLT5nZW5lcmF0aW9uKys7Ci0JCWF0b21pY19zZXQoJmN1cl90cmFucy0+bnVtX3dyaXRlcnMsIDEpOwotCQljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOwotCQljdXJfdHJhbnMtPnRyYW5zaWQgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmY3VyX3RyYW5zLT5jb21taXRfd2FpdCk7Ci0JCWN1cl90cmFucy0+aW5fY29tbWl0ID0gMDsKLQkJY3VyX3RyYW5zLT5ibG9ja2VkID0gMDsKLQkJYXRvbWljX3NldCgmY3VyX3RyYW5zLT51c2VfY291bnQsIDEpOwotCQljdXJfdHJhbnMtPmNvbW1pdF9kb25lID0gMDsKLQkJY3VyX3RyYW5zLT5zdGFydF90aW1lID0gZ2V0X3NlY29uZHMoKTsKLQotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5yb290ID0gUkJfUk9PVDsKLQkJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubnVtX2VudHJpZXMgPSAwOwotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1faGVhZHNfcmVhZHkgPSAwOwotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1faGVhZHMgPSAwOwotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5mbHVzaGluZyA9IDA7Ci0JCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLnJ1bl9kZWxheWVkX3N0YXJ0ID0gMDsKLQkJc3Bpbl9sb2NrX2luaXQoJmN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmxvY2spOwotCi0JCUlOSVRfTElTVF9IRUFEKCZjdXJfdHJhbnMtPnBlbmRpbmdfc25hcHNob3RzKTsKLQkJbGlzdF9hZGRfdGFpbCgmY3VyX3RyYW5zLT5saXN0LCAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbGlzdCk7Ci0JCWV4dGVudF9pb190cmVlX2luaXQoJmN1cl90cmFucy0+ZGlydHlfcGFnZXMsCi0JCQkJICAgICByb290LT5mc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nKTsKLQkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7Ci0JCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBjdXJfdHJhbnM7Ci0JCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7Ci0JfSBlbHNlIHsKKwlpZiAoY3VyX3RyYW5zKSB7CisJCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKIAkJYXRvbWljX2luYygmY3VyX3RyYW5zLT5udW1fd3JpdGVycyk7CiAJCWN1cl90cmFucy0+bnVtX2pvaW5lZCsrOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJCXJldHVybiAwOwogCX0KKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisKKwljdXJfdHJhbnMgPSBrbWVtX2NhY2hlX2FsbG9jKGJ0cmZzX3RyYW5zYWN0aW9uX2NhY2hlcCwgR0ZQX05PRlMpOworCWlmICghY3VyX3RyYW5zKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCWlmIChyb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uKSB7CisJCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc2FjdGlvbl9jYWNoZXAsIGN1cl90cmFucyk7CisJCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247CisJCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKKwkJYXRvbWljX2luYygmY3VyX3RyYW5zLT5udW1fd3JpdGVycyk7CisJCWN1cl90cmFucy0+bnVtX2pvaW5lZCsrOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJCXJldHVybiAwOworCX0KKwlhdG9taWNfc2V0KCZjdXJfdHJhbnMtPm51bV93cml0ZXJzLCAxKTsKKwljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN1cl90cmFucy0+Y29tbWl0X3dhaXQpOworCWN1cl90cmFucy0+aW5fY29tbWl0ID0gMDsKKwljdXJfdHJhbnMtPmJsb2NrZWQgPSAwOworCS8qCisJICogT25lIGZvciB0aGlzIHRyYW5zIGhhbmRsZSwgb25lIHNvIGl0IHdpbGwgbGl2ZSBvbiB1bnRpbCB3ZQorCSAqIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24uCisJICovCisJYXRvbWljX3NldCgmY3VyX3RyYW5zLT51c2VfY291bnQsIDIpOworCWN1cl90cmFucy0+Y29tbWl0X2RvbmUgPSAwOworCWN1cl90cmFucy0+c3RhcnRfdGltZSA9IGdldF9zZWNvbmRzKCk7CisKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5yb290ID0gUkJfUk9PVDsKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1fZW50cmllcyA9IDA7CisJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubnVtX2hlYWRzX3JlYWR5ID0gMDsKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1faGVhZHMgPSAwOworCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nID0gMDsKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5ydW5fZGVsYXllZF9zdGFydCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJmN1cl90cmFucy0+Y29tbWl0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZjdXJfdHJhbnMtPnBlbmRpbmdfc25hcHNob3RzKTsKKwlsaXN0X2FkZF90YWlsKCZjdXJfdHJhbnMtPmxpc3QsICZyb290LT5mc19pbmZvLT50cmFuc19saXN0KTsKKwlleHRlbnRfaW9fdHJlZV9pbml0KCZjdXJfdHJhbnMtPmRpcnR5X3BhZ2VzLAorCQkJICAgICByb290LT5mc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nKTsKKwlyb290LT5mc19pbmZvLT5nZW5lcmF0aW9uKys7CisJY3VyX3RyYW5zLT50cmFuc2lkID0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbjsKKwlyb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uID0gY3VyX3RyYW5zOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTksMzkgKzEyNiwyOCBAQAogICogdG8gbWFrZSBzdXJlIHRoZSBvbGQgcm9vdCBmcm9tIGJlZm9yZSB3ZSBqb2luZWQgdGhlIHRyYW5zYWN0aW9uIGlzIGRlbGV0ZWQKICAqIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHMKICAqLwotc3RhdGljIG5vaW5saW5lIGludCByZWNvcmRfcm9vdF9pbl90cmFucyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290KQoraW50IGJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQogewogCWlmIChyb290LT5yZWZfY293cyAmJiByb290LT5sYXN0X3RyYW5zIDwgdHJhbnMtPnRyYW5zaWQpIHsKIAkJV0FSTl9PTihyb290ID09IHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290KTsKIAkJV0FSTl9PTihyb290LT5jb21taXRfcm9vdCAhPSByb290LT5ub2RlKTsKIAorCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4X2xvY2spOworCQlpZiAocm9vdC0+bGFzdF90cmFucyA9PSB0cmFucy0+dHJhbnNpZCkgeworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4X2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcm9vdC0+bGFzdF90cmFucyA9IHRyYW5zLT50cmFuc2lkOwogCQlyYWRpeF90cmVlX3RhZ19zZXQoJnJvb3QtPmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4LAogCQkJICAgKHVuc2lnbmVkIGxvbmcpcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkgICBCVFJGU19ST09UX1RSQU5TX1RBRyk7Ci0JCXJvb3QtPmxhc3RfdHJhbnMgPSB0cmFucy0+dHJhbnNpZDsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4X2xvY2spOwogCQlidHJmc19pbml0X3JlbG9jX3Jvb3QodHJhbnMsIHJvb3QpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotaW50IGJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQotewotCWlmICghcm9vdC0+cmVmX2Nvd3MpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCWlmIChyb290LT5sYXN0X3RyYW5zID09IHRyYW5zLT50cmFuc2lkKSB7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZWNvcmRfcm9vdF9pbl90cmFucyh0cmFucywgcm9vdCk7Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIHdhaXQgZm9yIGNvbW1pdCBhZ2FpbnN0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRvIGJlY29tZSB1bmJsb2NrZWQKICAqIHdoZW4gdGhpcyBpcyBkb25lLCBpdCBpcyBzYWZlIHRvIHN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uLCBidXQgdGhlIGN1cnJlbnQKICAqIHRyYW5zYWN0aW9uIG1pZ2h0IG5vdCBiZSBmdWxseSBvbiBkaXNrLgpAQCAtMTQwLDIxICsxNTYsMjMgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKmN1cl90cmFuczsKIAorCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJY3VyX3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbjsKIAlpZiAoY3VyX3RyYW5zICYmIGN1cl90cmFucy0+YmxvY2tlZCkgewogCQlERUZJTkVfV0FJVCh3YWl0KTsKIAkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJCXdoaWxlICgxKSB7CiAJCQlwcmVwYXJlX3RvX3dhaXQoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0LAogCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCQlpZiAoIWN1cl90cmFucy0+YmxvY2tlZCkKIAkJCQlicmVhazsKLQkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQkJc2NoZWR1bGUoKTsKLQkJCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJfQogCQlmaW5pc2hfd2FpdCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCwgJndhaXQpOwogCQlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJfQogfQogCkBAIC0xNjcsMTAgKzE4NSwxNiBAQAogCiBzdGF0aWMgaW50IG1heV93YWl0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgdHlwZSkKIHsKLQlpZiAoIXJvb3QtPmZzX2luZm8tPmxvZ19yb290X3JlY292ZXJpbmcgJiYKLQkgICAgKCh0eXBlID09IFRSQU5TX1NUQVJUICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB8fAotCSAgICAgdHlwZSA9PSBUUkFOU19VU0VSU1BBQ0UpKQorCWlmIChyb290LT5mc19pbmZvLT5sb2dfcm9vdF9yZWNvdmVyaW5nKQorCQlyZXR1cm4gMDsKKworCWlmICh0eXBlID09IFRSQU5TX1VTRVJTUEFDRSkKIAkJcmV0dXJuIDE7CisKKwlpZiAodHlwZSA9PSBUUkFOU19TVEFSVCAmJgorCSAgICAhYXRvbWljX3JlYWQoJnJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODQsMzYgKzIwOCw0NCBAQAogCiAJaWYgKHJvb3QtPmZzX2luZm8tPmZzX3N0YXRlICYgQlRSRlNfU1VQRVJfRkxBR19FUlJPUikKIAkJcmV0dXJuIEVSUl9QVFIoLUVST0ZTKTsKKworCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8pIHsKKwkJV0FSTl9PTih0eXBlICE9IFRSQU5TX0pPSU4gJiYgdHlwZSAhPSBUUkFOU19KT0lOX05PTE9DSyk7CisJCWggPSBjdXJyZW50LT5qb3VybmFsX2luZm87CisJCWgtPnVzZV9jb3VudCsrOworCQloLT5vcmlnX3JzdiA9IGgtPmJsb2NrX3JzdjsKKwkJaC0+YmxvY2tfcnN2ID0gTlVMTDsKKwkJZ290byBnb3RfaXQ7CisJfQogYWdhaW46CiAJaCA9IGttZW1fY2FjaGVfYWxsb2MoYnRyZnNfdHJhbnNfaGFuZGxlX2NhY2hlcCwgR0ZQX05PRlMpOwogCWlmICghaCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlpZiAodHlwZSAhPSBUUkFOU19KT0lOX05PTE9DSykKLQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCWlmIChtYXlfd2FpdF90cmFuc2FjdGlvbihyb290LCB0eXBlKSkKIAkJd2FpdF9jdXJyZW50X3RyYW5zKHJvb3QpOwogCi0JcmV0ID0gam9pbl90cmFuc2FjdGlvbihyb290KTsKKwlkbyB7CisJCXJldCA9IGpvaW5fdHJhbnNhY3Rpb24ocm9vdCwgdHlwZSA9PSBUUkFOU19KT0lOX05PTE9DSyk7CisJCWlmIChyZXQgPT0gLUVCVVNZKQorCQkJd2FpdF9jdXJyZW50X3RyYW5zKHJvb3QpOworCX0gd2hpbGUgKHJldCA9PSAtRUJVU1kpOworCiAJaWYgKHJldCA8IDApIHsKIAkJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zX2hhbmRsZV9jYWNoZXAsIGgpOwotCQlpZiAodHlwZSAhPSBUUkFOU19KT0lOX05PTE9DSykKLQkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIAogCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247Ci0JYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwotCWlmICh0eXBlICE9IFRSQU5TX0pPSU5fTk9MT0NLKQotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCWgtPnRyYW5zaWQgPSBjdXJfdHJhbnMtPnRyYW5zaWQ7CiAJaC0+dHJhbnNhY3Rpb24gPSBjdXJfdHJhbnM7CiAJaC0+YmxvY2tzX3VzZWQgPSAwOwotCWgtPmJsb2NrX2dyb3VwID0gMDsKIAloLT5ieXRlc19yZXNlcnZlZCA9IDA7CiAJaC0+ZGVsYXllZF9yZWZfdXBkYXRlcyA9IDA7CisJaC0+dXNlX2NvdW50ID0gMTsKIAloLT5ibG9ja19yc3YgPSBOVUxMOworCWgtPm9yaWdfcnN2ID0gTlVMTDsKIAogCXNtcF9tYigpOwogCWlmIChjdXJfdHJhbnMtPmJsb2NrZWQgJiYgbWF5X3dhaXRfdHJhbnNhY3Rpb24ocm9vdCwgdHlwZSkpIHsKQEAgLTI0MSwxMSArMjczLDggQEAKIAkJfQogCX0KIAotCWlmICh0eXBlICE9IFRSQU5TX0pPSU5fTk9MT0NLKQotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0JcmVjb3JkX3Jvb3RfaW5fdHJhbnMoaCwgcm9vdCk7Ci0JaWYgKHR5cGUgIT0gVFJBTlNfSk9JTl9OT0xPQ0spCi0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworZ290X2l0OgorCWJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKGgsIHJvb3QpOwogCiAJaWYgKCFjdXJyZW50LT5qb3VybmFsX2luZm8gJiYgdHlwZSAhPSBUUkFOU19VU0VSU1BBQ0UpCiAJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IGg7CkBAIC0yNTcsMjIgKzI4NiwxOSBAQAogewogCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1faXRlbXMsIFRSQU5TX1NUQVJUKTsKIH0KLXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCQkgICBpbnQgbnVtX2Jsb2NrcykKK3N0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7CiAJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDAsIFRSQU5TX0pPSU4pOwogfQogCi1zdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJCQkgIGludCBudW1fYmxvY2tzKQorc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2soc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7CiAJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDAsIFRSQU5TX0pPSU5fTk9MT0NLKTsKIH0KIAotc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnIsCi0JCQkJCQkJIGludCBudW1fYmxvY2tzKQorc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHIsIDAsIFRSQU5TX1VTRVJTUEFDRSk7CisJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDAsIFRSQU5TX1VTRVJTUEFDRSk7CiB9CiAKIC8qIHdhaXQgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IHRvIGJlIGZ1bGx5IGNvbXBsZXRlICovCkBAIC0yODAsMTcgKzMwNiwxMyBAQAogCQkJCSAgICBzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKmNvbW1pdCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJd2hpbGUgKCFjb21taXQtPmNvbW1pdF9kb25lKSB7CiAJCXByZXBhcmVfdG9fd2FpdCgmY29tbWl0LT5jb21taXRfd2FpdCwgJndhaXQsCiAJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlpZiAoY29tbWl0LT5jb21taXRfZG9uZSkKIAkJCWJyZWFrOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKLQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCX0KLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlmaW5pc2hfd2FpdCgmY29tbWl0LT5jb21taXRfd2FpdCwgJndhaXQpOwogCXJldHVybiAwOwogfQpAQCAtMzAwLDU5ICszMjIsNTYgQEAKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKmN1cl90cmFucyA9IE5VTEwsICp0OwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0KIAlyZXQgPSAwOwogCWlmICh0cmFuc2lkKSB7CiAJCWlmICh0cmFuc2lkIDw9IHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKQotCQkJZ290byBvdXRfdW5sb2NrOworCQkJZ290byBvdXQ7CiAKIAkJLyogZmluZCBzcGVjaWZpZWQgdHJhbnNhY3Rpb24gKi8KKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbGlzdCwgbGlzdCkgewogCQkJaWYgKHQtPnRyYW5zaWQgPT0gdHJhbnNpZCkgewogCQkJCWN1cl90cmFucyA9IHQ7CisJCQkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKHQtPnRyYW5zaWQgPiB0cmFuc2lkKQogCQkJCWJyZWFrOwogCQl9CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJaWYgKCFjdXJfdHJhbnMpCi0JCQlnb3RvIG91dF91bmxvY2s7ICAvKiBiYWQgdHJhbnNpZCAqLworCQkJZ290byBvdXQ7ICAvKiBiYWQgdHJhbnNpZCAqLwogCX0gZWxzZSB7CiAJCS8qIGZpbmQgbmV3ZXN0IHRyYW5zYWN0aW9uIHRoYXQgaXMgY29tbWl0dGluZyB8IGNvbW1pdHRlZCAqLworCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodCwgJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xpc3QsCiAJCQkJCSAgICBsaXN0KSB7CiAJCQlpZiAodC0+aW5fY29tbWl0KSB7CiAJCQkJaWYgKHQtPmNvbW1pdF9kb25lKQotCQkJCQlnb3RvIG91dF91bmxvY2s7CisJCQkJCWJyZWFrOwogCQkJCWN1cl90cmFucyA9IHQ7CisJCQkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJaWYgKCFjdXJfdHJhbnMpCi0JCQlnb3RvIG91dF91bmxvY2s7ICAvKiBub3RoaW5nIGNvbW1pdHRpbmd8Y29tbWl0dGVkICovCisJCQlnb3RvIG91dDsgIC8qIG5vdGhpbmcgY29tbWl0dGluZ3xjb21taXR0ZWQgKi8KIAl9CiAKLQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0KIAl3YWl0X2Zvcl9jb21taXQocm9vdCwgY3VyX3RyYW5zKTsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAlyZXQgPSAwOwotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGJ0cmZzX3Rocm90dGxlKHN0cnVjdCBidHJmc19yb290ICpyb290KQogewotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQlpZiAoIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpCisJaWYgKCFhdG9taWNfcmVhZCgmcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucykpCiAJCXdhaXRfY3VycmVudF90cmFucyhyb290KTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIH0KIAogc3RhdGljIGludCBzaG91bGRfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApAQCAtMzcwLDYgKzM4OSw3IEBACiAJc3RydWN0IGJ0cmZzX3RyYW5zYWN0aW9uICpjdXJfdHJhbnMgPSB0cmFucy0+dHJhbnNhY3Rpb247CiAJaW50IHVwZGF0ZXM7CiAKKwlzbXBfbWIoKTsKIAlpZiAoY3VyX3RyYW5zLT5ibG9ja2VkIHx8IGN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nKQogCQlyZXR1cm4gMTsKIApAQCAtMzg4LDYgKzQwOCwxMSBAQAogCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKIAlpbnQgY291bnQgPSAwOwogCisJaWYgKC0tdHJhbnMtPnVzZV9jb3VudCkgeworCQl0cmFucy0+YmxvY2tfcnN2ID0gdHJhbnMtPm9yaWdfcnN2OworCQlyZXR1cm4gMDsKKwl9CisKIAl3aGlsZSAoY291bnQgPCA0KSB7CiAJCXVuc2lnbmVkIGxvbmcgY3VyID0gdHJhbnMtPmRlbGF5ZWRfcmVmX3VwZGF0ZXM7CiAJCXRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzID0gMDsKQEAgLTQxMCw5ICs0MzUsMTEgQEAKIAogCWJ0cmZzX3RyYW5zX3JlbGVhc2VfbWV0YWRhdGEodHJhbnMsIHJvb3QpOwogCi0JaWYgKGxvY2sgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMgJiYKLQkgICAgc2hvdWxkX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCkpCisJaWYgKGxvY2sgJiYgIWF0b21pY19yZWFkKCZyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSAmJgorCSAgICBzaG91bGRfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KSkgewogCQl0cmFucy0+dHJhbnNhY3Rpb24tPmJsb2NrZWQgPSAxOworCQlzbXBfd21iKCk7CisJfQogCiAJaWYgKGxvY2sgJiYgY3VyX3RyYW5zLT5ibG9ja2VkICYmICFjdXJfdHJhbnMtPmluX2NvbW1pdCkgewogCQlpZiAodGhyb3R0bGUpCkBAIC03MDMsOSArNzMwLDkgQEAKICAqLwogaW50IGJ0cmZzX2FkZF9kZWFkX3Jvb3Qoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7Ci0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJbGlzdF9hZGQoJnJvb3QtPnJvb3RfbGlzdCwgJnJvb3QtPmZzX2luZm8tPmRlYWRfcm9vdHMpOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzIxLDYgKzc0OCw3IEBACiAJaW50IHJldDsKIAlpbnQgZXJyID0gMDsKIAorCXNwaW5fbG9jaygmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gcmFkaXhfdHJlZV9nYW5nX2xvb2t1cF90YWcoJmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4LAogCQkJCQkJICh2b2lkICoqKWdhbmcsIDAsCkBAIC03MzMsNiArNzYxLDcgQEAKIAkJCXJhZGl4X3RyZWVfdGFnX2NsZWFyKCZmc19pbmZvLT5mc19yb290c19yYWRpeCwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkJCUJUUkZTX1JPT1RfVFJBTlNfVEFHKTsKKwkJCXNwaW5fdW5sb2NrKCZmc19pbmZvLT5mc19yb290c19yYWRpeF9sb2NrKTsKIAogCQkJYnRyZnNfZnJlZV9sb2codHJhbnMsIHJvb3QpOwogCQkJYnRyZnNfdXBkYXRlX3JlbG9jX3Jvb3QodHJhbnMsIHJvb3QpOwpAQCAtNzUzLDEwICs3ODIsMTIgQEAKIAkJCWVyciA9IGJ0cmZzX3VwZGF0ZV9yb290KHRyYW5zLCBmc19pbmZvLT50cmVlX3Jvb3QsCiAJCQkJCQkmcm9vdC0+cm9vdF9rZXksCiAJCQkJCQkmcm9vdC0+cm9vdF9pdGVtKTsKKwkJCXNwaW5fbG9jaygmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOwogCQl9CiAJfQorCXNwaW5fdW5sb2NrKCZmc19pbmZvLT5mc19yb290c19yYWRpeF9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03ODYsNyArODE3LDcgQEAKIAkJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShpbmZvLT50cmVlX3Jvb3QsIG5yKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAKLQkJaWYgKHJvb3QtPmZzX2luZm8tPmNsb3NpbmcgfHwgcmV0ICE9IC1FQUdBSU4pCisJCWlmIChidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pIHx8IHJldCAhPSAtRUFHQUlOKQogCQkJYnJlYWs7CiAJfQogCXJvb3QtPmRlZnJhZ19ydW5uaW5nID0gMDsKQEAgLTg1MSw3ICs4ODIsNyBAQAogCXBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7CiAJcGFyZW50X2lub2RlID0gcGFyZW50LT5kX2lub2RlOwogCXBhcmVudF9yb290ID0gQlRSRlNfSShwYXJlbnRfaW5vZGUpLT5yb290OwotCXJlY29yZF9yb290X2luX3RyYW5zKHRyYW5zLCBwYXJlbnRfcm9vdCk7CisJYnRyZnNfcmVjb3JkX3Jvb3RfaW5fdHJhbnModHJhbnMsIHBhcmVudF9yb290KTsKIAogCS8qCiAJICogaW5zZXJ0IHRoZSBkaXJlY3RvcnkgaXRlbQpAQCAtODY5LDcgKzkwMCw3IEBACiAJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCBwYXJlbnRfcm9vdCwgcGFyZW50X2lub2RlKTsKIAlCVUdfT04ocmV0KTsKIAotCXJlY29yZF9yb290X2luX3RyYW5zKHRyYW5zLCByb290KTsKKwlidHJmc19yZWNvcmRfcm9vdF9pbl90cmFucyh0cmFucywgcm9vdCk7CiAJYnRyZnNfc2V0X3Jvb3RfbGFzdF9zbmFwc2hvdCgmcm9vdC0+cm9vdF9pdGVtLCB0cmFucy0+dHJhbnNpZCk7CiAJbWVtY3B5KG5ld19yb290X2l0ZW0sICZyb290LT5yb290X2l0ZW0sIHNpemVvZigqbmV3X3Jvb3RfaXRlbSkpOwogCWJ0cmZzX2NoZWNrX2FuZF9pbml0X3Jvb3RfaXRlbShuZXdfcm9vdF9pdGVtKTsKQEAgLTk2NywyMCArOTk4LDIwIEBACiBpbnQgYnRyZnNfdHJhbnNhY3Rpb25faW5fY29tbWl0KHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKQogewogCWludCByZXQgPSAwOwotCXNwaW5fbG9jaygmaW5mby0+bmV3X3RyYW5zX2xvY2spOworCXNwaW5fbG9jaygmaW5mby0+dHJhbnNfbG9jayk7CiAJaWYgKGluZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24pCiAJCXJldCA9IGluZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPmluX2NvbW1pdDsKLQlzcGluX3VubG9jaygmaW5mby0+bmV3X3RyYW5zX2xvY2spOworCXNwaW5fdW5sb2NrKCZpbmZvLT50cmFuc19sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgYnRyZnNfdHJhbnNhY3Rpb25fYmxvY2tlZChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbykKIHsKIAlpbnQgcmV0ID0gMDsKLQlzcGluX2xvY2soJmluZm8tPm5ld190cmFuc19sb2NrKTsKKwlzcGluX2xvY2soJmluZm8tPnRyYW5zX2xvY2spOwogCWlmIChpbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uKQogCQlyZXQgPSBpbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uLT5ibG9ja2VkOwotCXNwaW5fdW5sb2NrKCZpbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJc3Bpbl91bmxvY2soJmluZm8tPnRyYW5zX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMDQsOSArMTAzNSw3IEBACiAJCQkJICAgICZ3YWl0KTsKIAkJCWJyZWFrOwogCQl9Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWZpbmlzaF93YWl0KCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl9ibG9ja2VkX3dhaXQsICZ3YWl0KTsKIAl9CiB9CkBAIC0xMDMyLDkgKzEwNjEsNyBAQAogCQkJCSAgICAmd2FpdCk7CiAJCQlicmVhazsKIAkJfQotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKLQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlmaW5pc2hfd2FpdCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCwKIAkJCSAgICAmd2FpdCk7CiAJfQpAQCAtMTA3Miw3ICsxMDk5LDcgQEAKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZhYy0+d29yaywgZG9fYXN5bmNfY29tbWl0KTsKIAlhYy0+cm9vdCA9IHJvb3Q7Ci0JYWMtPm5ld3RyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKKwlhYy0+bmV3dHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIoYWMtPm5ld3RyYW5zKSkgewogCQlpbnQgZXJyID0gUFRSX0VSUihhYy0+bmV3dHJhbnMpOwogCQlrZnJlZShhYyk7CkBAIC0xMDgwLDIzICsxMTA3LDIyIEBACiAJfQogCiAJLyogdGFrZSB0cmFuc2FjdGlvbiByZWZlcmVuY2UgKi8KLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJY3VyX3RyYW5zID0gdHJhbnMtPnRyYW5zYWN0aW9uOwogCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhYy0+d29yaywgMCk7CiAKIAkvKiB3YWl0IGZvciB0cmFuc2FjdGlvbiB0byBzdGFydCBhbmQgdW5ibG9jayAqLwotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlpZiAod2FpdF9mb3JfdW5ibG9jaykKIAkJd2FpdF9jdXJyZW50X3RyYW5zX2NvbW1pdF9zdGFydF9hbmRfdW5ibG9jayhyb290LCBjdXJfdHJhbnMpOwogCWVsc2UKIAkJd2FpdF9jdXJyZW50X3RyYW5zX2NvbW1pdF9zdGFydChyb290LCBjdXJfdHJhbnMpOwotCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCisJaWYgKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9PSB0cmFucykKKwkJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKKworCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTM5LDM4ICsxMTY1LDQxIEBACiAJcmV0ID0gYnRyZnNfcnVuX2RlbGF5ZWRfcmVmcyh0cmFucywgcm9vdCwgMCk7CiAJQlVHX09OKHJldCk7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl9sb2NrKCZjdXJfdHJhbnMtPmNvbW1pdF9sb2NrKTsKIAlpZiAoY3VyX3RyYW5zLT5pbl9jb21taXQpIHsKKwkJc3Bpbl91bmxvY2soJmN1cl90cmFucy0+Y29tbWl0X2xvY2spOwogCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCiAJCXJldCA9IHdhaXRfZm9yX2NvbW1pdChyb290LCBjdXJfdHJhbnMpOwogCQlCVUdfT04ocmV0KTsKIAotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCQlyZXR1cm4gMDsKIAl9CiAKIAl0cmFucy0+dHJhbnNhY3Rpb24tPmluX2NvbW1pdCA9IDE7CiAJdHJhbnMtPnRyYW5zYWN0aW9uLT5ibG9ja2VkID0gMTsKKwlzcGluX3VubG9jaygmY3VyX3RyYW5zLT5jb21taXRfbG9jayk7CiAJd2FrZV91cCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fYmxvY2tlZF93YWl0KTsKIAorCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJaWYgKGN1cl90cmFucy0+bGlzdC5wcmV2ICE9ICZyb290LT5mc19pbmZvLT50cmFuc19saXN0KSB7CiAJCXByZXZfdHJhbnMgPSBsaXN0X2VudHJ5KGN1cl90cmFucy0+bGlzdC5wcmV2LAogCQkJCQlzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24sIGxpc3QpOwogCQlpZiAoIXByZXZfdHJhbnMtPmNvbW1pdF9kb25lKSB7CiAJCQlhdG9taWNfaW5jKCZwcmV2X3RyYW5zLT51c2VfY291bnQpOwotCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAKIAkJCXdhaXRfZm9yX2NvbW1pdChyb290LCBwcmV2X3RyYW5zKTsKIAotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQkJcHV0X3RyYW5zYWN0aW9uKHByZXZfdHJhbnMpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQl9CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCX0KIAogCWlmIChub3cgPCBjdXJfdHJhbnMtPnN0YXJ0X3RpbWUgfHwgbm93IC0gY3VyX3RyYW5zLT5zdGFydF90aW1lIDwgMSkKQEAgLTExNzgsMTIgKzEyMDcsMTIgQEAKIAogCWRvIHsKIAkJaW50IHNuYXBfcGVuZGluZyA9IDA7CisKIAkJam9pbmVkID0gY3VyX3RyYW5zLT5udW1fam9pbmVkOwogCQlpZiAoIWxpc3RfZW1wdHkoJnRyYW5zLT50cmFuc2FjdGlvbi0+cGVuZGluZ19zbmFwc2hvdHMpKQogCQkJc25hcF9wZW5kaW5nID0gMTsKIAogCQlXQVJOX09OKGN1cl90cmFucyAhPSB0cmFucy0+dHJhbnNhY3Rpb24pOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCQlpZiAoZmx1c2hfb25fY29tbWl0IHx8IHNuYXBfcGVuZGluZykgewogCQkJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QsIDEpOwpAQCAtMTIwNiwxNCArMTIzNSwxNSBAQAogCQlwcmVwYXJlX3RvX3dhaXQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQsICZ3YWl0LAogCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAotCQlzbXBfbWIoKTsKIAkJaWYgKGF0b21pY19yZWFkKCZjdXJfdHJhbnMtPm51bV93cml0ZXJzKSA+IDEpCiAJCQlzY2hlZHVsZV90aW1lb3V0KE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAkJZWxzZSBpZiAoc2hvdWxkX2dyb3cpCiAJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwogCi0JCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJZmluaXNoX3dhaXQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQsICZ3YWl0KTsKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKKwkJcm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbiA9IDE7CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAl9IHdoaWxlIChhdG9taWNfcmVhZCgmY3VyX3RyYW5zLT5udW1fd3JpdGVycykgPiAxIHx8CiAJCSAoc2hvdWxkX2dyb3cgJiYgY3VyX3RyYW5zLT5udW1fam9pbmVkICE9IGpvaW5lZCkpOwogCkBAIC0xMjU4LDkgKzEyODgsNiBAQAogCWJ0cmZzX3ByZXBhcmVfZXh0ZW50X2NvbW1pdCh0cmFucywgcm9vdCk7CiAKIAljdXJfdHJhbnMgPSByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uOwotCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOwotCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CiAKIAlidHJmc19zZXRfcm9vdF9ub2RlKCZyb290LT5mc19pbmZvLT50cmVlX3Jvb3QtPnJvb3RfaXRlbSwKIAkJCSAgICByb290LT5mc19pbmZvLT50cmVlX3Jvb3QtPm5vZGUpOwpAQCAtMTI4MSwxMCArMTMwOCwxMyBAQAogCSAgICAgICBzaXplb2Yocm9vdC0+ZnNfaW5mby0+c3VwZXJfY29weSkpOwogCiAJdHJhbnMtPnRyYW5zYWN0aW9uLT5ibG9ja2VkID0gMDsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBOVUxMOworCXJvb3QtPmZzX2luZm8tPnRyYW5zX25vX2pvaW4gPSAwOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAogCXdha2VfdXAoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQpOwogCi0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCUJVR19PTihyZXQpOwogCXdyaXRlX2N0cmVlX3N1cGVyKHRyYW5zLCByb290LCAwKTsKQEAgLTEyOTcsMjIgKzEzMjcsMjEgQEAKIAogCWJ0cmZzX2ZpbmlzaF9leHRlbnRfY29tbWl0KHRyYW5zLCByb290KTsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQogCWN1cl90cmFucy0+Y29tbWl0X2RvbmUgPSAxOwogCiAJcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQgPSBjdXJfdHJhbnMtPnRyYW5zaWQ7CiAKIAl3YWtlX3VwKCZjdXJfdHJhbnMtPmNvbW1pdF93YWl0KTsKIAorCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmY3VyX3RyYW5zLT5saXN0KTsKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAogCXRyYWNlX2J0cmZzX3RyYW5zYWN0aW9uX2NvbW1pdChyb290KTsKIAotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCiAJYnRyZnNfc2NydWJfY29udGludWUocm9vdCk7CiAKIAlpZiAoY3VycmVudC0+am91cm5hbF9pbmZvID09IHRyYW5zKQpAQCAtMTMzNCw5ICsxMzYzLDkgQEAKIAlMSVNUX0hFQUQobGlzdCk7CiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8gPSByb290LT5mc19pbmZvOwogCi0JbXV0ZXhfbG9jaygmZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXNwaW5fbG9jaygmZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmZnNfaW5mby0+ZGVhZF9yb290cywgJmxpc3QpOwotCW11dGV4X3VubG9jaygmZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZmc19pbmZvLT50cmFuc19sb2NrKTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKIAkJcm9vdCA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgYnRyZnNfcm9vdCwgcm9vdF9saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IDgwNGM4ODYuLjAyNTY0ZTYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtMjgsMTAgKzI4LDEyIEBACiAJICogdHJhbnNhY3Rpb24gY2FuIGVuZAogCSAqLwogCWF0b21pY190IG51bV93cml0ZXJzOworCWF0b21pY190IHVzZV9jb3VudDsKIAogCXVuc2lnbmVkIGxvbmcgbnVtX2pvaW5lZDsKKworCXNwaW5sb2NrX3QgY29tbWl0X2xvY2s7CiAJaW50IGluX2NvbW1pdDsKLQlhdG9taWNfdCB1c2VfY291bnQ7CiAJaW50IGNvbW1pdF9kb25lOwogCWludCBibG9ja2VkOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTQ1LDEzICs0NywxNCBAQAogCiBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlIHsKIAl1NjQgdHJhbnNpZDsKLQl1NjQgYmxvY2tfZ3JvdXA7CiAJdTY0IGJ5dGVzX3Jlc2VydmVkOworCXVuc2lnbmVkIGxvbmcgdXNlX2NvdW50OwogCXVuc2lnbmVkIGxvbmcgYmxvY2tzX3Jlc2VydmVkOwogCXVuc2lnbmVkIGxvbmcgYmxvY2tzX3VzZWQ7CiAJdW5zaWduZWQgbG9uZyBkZWxheWVkX3JlZl91cGRhdGVzOwogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CiAJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqYmxvY2tfcnN2OworCXN0cnVjdCBidHJmc19ibG9ja19yc3YgKm9yaWdfcnN2OwogfTsKIAogc3RydWN0IGJ0cmZzX3BlbmRpbmdfc25hcHNob3QgewpAQCAtNjYsMTkgKzY5LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQl0cmFucy0+YmxvY2tfZ3JvdXAgPSBCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAoCi0JCQkJCSAgc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXAgPSB0cmFucy0+YmxvY2tfZ3JvdXA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBidHJmc19zZXRfaW5vZGVfbGFzdF90cmFucyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTkyLDEyICs4Miw5IEBACiAJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkJICAgaW50IG51bV9pdGVtcyk7Ci1zdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQkJICBpbnQgbnVtX2Jsb2Nrcyk7Ci1zdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJCQkgIGludCBudW1fYmxvY2tzKTsKLXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X2lvY3RsX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyLAotCQkJCQkJCSBpbnQgbnVtX2Jsb2Nrcyk7CitzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKK3N0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKK3N0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X2lvY3RsX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc193YWl0X2Zvcl9jb21taXQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCB0cmFuc2lkKTsKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuYyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwppbmRleCBjNDgyMTRlLi4xZWZhNTZlIDEwMDY0NAotLS0gYS9mcy9idHJmcy92b2x1bWVzLmMKKysrIGIvZnMvYnRyZnMvdm9sdW1lcy5jCkBAIC01MDQsNyArNTA0LDcgQEAKIAkJQlVHX09OKCFuZXdfZGV2aWNlKTsKIAkJbWVtY3B5KG5ld19kZXZpY2UsIGRldmljZSwgc2l6ZW9mKCpuZXdfZGV2aWNlKSk7CiAJCW5ld19kZXZpY2UtPm5hbWUgPSBrc3RyZHVwKGRldmljZS0+bmFtZSwgR0ZQX05PRlMpOwotCQlCVUdfT04oIW5ld19kZXZpY2UtPm5hbWUpOworCQlCVUdfT04oZGV2aWNlLT5uYW1lICYmICFuZXdfZGV2aWNlLT5uYW1lKTsKIAkJbmV3X2RldmljZS0+YmRldiA9IE5VTEw7CiAJCW5ld19kZXZpY2UtPndyaXRlYWJsZSA9IDA7CiAJCW5ld19kZXZpY2UtPmluX2ZzX21ldGFkYXRhID0gMDsKQEAgLTY4OSwxMiArNjg5LDggQEAKIAl0cmFuc2lkID0gYnRyZnNfc3VwZXJfZ2VuZXJhdGlvbihkaXNrX3N1cGVyKTsKIAlpZiAoZGlza19zdXBlci0+bGFiZWxbMF0pCiAJCXByaW50ayhLRVJOX0lORk8gImRldmljZSBsYWJlbCAlcyAiLCBkaXNrX3N1cGVyLT5sYWJlbCk7Ci0JZWxzZSB7Ci0JCS8qIEZJWE1FLCBtYWtlIGEgcmVhZGwgdXVpZCBwYXJzZXIgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiZGV2aWNlIGZzaWQgJWxseC0lbGx4ICIsCi0JCSAgICAgICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRpc2tfc3VwZXItPmZzaWQsCi0JCSAgICAgICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShkaXNrX3N1cGVyLT5mc2lkICsgOCkpOwotCX0KKwllbHNlCisJCXByaW50ayhLRVJOX0lORk8gImRldmljZSBmc2lkICVwVSAiLCBkaXNrX3N1cGVyLT5mc2lkKTsKIAlwcmludGsoS0VSTl9DT05UICJkZXZpZCAlbGx1IHRyYW5zaWQgJWxsdSAlc1xuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXZpZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyl0cmFuc2lkLCBwYXRoKTsKIAlyZXQgPSBkZXZpY2VfbGlzdF9hZGQocGF0aCwgZGlza19zdXBlciwgZGV2aWQsIGZzX2RldmljZXNfcmV0KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3hhdHRyLmMgYi9mcy9idHJmcy94YXR0ci5jCmluZGV4IGYzMTA3ZTQuLjUzNjZmZTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3hhdHRyLmMKKysrIGIvZnMvYnRyZnMveGF0dHIuYwpAQCAtMTU4LDggKzE1OCw2IEBACiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwotCiAJcmV0ID0gZG9fc2V0eGF0dHIodHJhbnMsIGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9LY29uZmlnIGIvZnMvY2lmcy9LY29uZmlnCmluZGV4IDFjZDRjM2EuLjUzZWQxYWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvS2NvbmZpZworKysgYi9mcy9jaWZzL0tjb25maWcKQEAgLTcsNiArNyw3IEBACiAJc2VsZWN0IENSWVBUT19NRDUKIAlzZWxlY3QgQ1JZUFRPX0hNQUMKIAlzZWxlY3QgQ1JZUFRPX0FSQzQKKwlzZWxlY3QgQ1JZUFRPX0VDQgogCXNlbGVjdCBDUllQVE9fREVTCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgY2xpZW50IFZGUyBtb2R1bGUgZm9yIHRoZSBDb21tb24gSW50ZXJuZXQgRmlsZSBTeXN0ZW0KQEAgLTE0OCw3ICsxNDksNyBAQAogCiBjb25maWcgQ0lGU19BQ0wKIAkgIGJvb2wgIlByb3ZpZGUgQ0lGUyBBQ0wgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIENJRlNfWEFUVFIKKwkgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIENJRlNfWEFUVFIgJiYgS0VZUwogCSAgaGVscAogCSAgICBBbGxvd3MgdG8gZmV0Y2ggQ0lGUy9OVEZTIEFDTCBmcm9tIHRoZSBzZXJ2ZXIuICBUaGUgREFDTCBibG9iCiAJICAgIGlzIGhhbmRlZCBvdmVyIHRvIHRoZSBhcHBsaWNhdGlvbi9jYWxsZXIuCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKaW5kZXggZGZiZDlmMS4uNWEwZWU3ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJaWYgKGNpZnNfcGR1ID09IE5VTEwgfHwgc2VydmVyID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNpZnNfcGR1LT5Db21tYW5kID09IFNNQl9DT01fTkVHT1RJQVRFKQorCWlmICghc2VydmVyLT5zZXNzaW9uX2VzdGFiKQogCQlyZXR1cm4gMDsKIAogCWlmIChjaWZzX3BkdS0+Q29tbWFuZCA9PSBTTUJfQ09NX0xPQ0tJTkdfQU5EWCkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCA2ZDg4YjgyLi5iYjY1OWViIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtNzg0LDcgKzc4NCw3IEBACiAJCQkgc3RydWN0IHNtYl92b2wgKnZvbCkKIHsKIAljaGFyICp2YWx1ZSwgKmRhdGEsICplbmQ7Ci0JY2hhciAqbW91bnRkYXRhX2NvcHksICpvcHRpb25zOworCWNoYXIgKm1vdW50ZGF0YV9jb3B5ID0gTlVMTCwgKm9wdGlvbnM7CiAJdW5zaWduZWQgaW50ICB0ZW1wX2xlbiwgaSwgajsKIAljaGFyIHNlcGFyYXRvclsyXTsKIAlzaG9ydCBpbnQgb3ZlcnJpZGVfdWlkID0gLTE7CkBAIC0xMzkxLDcgKzEzOTEsNyBAQAogCQkJCSIvcHJvYy9mcy9jaWZzL0xvb2t1cENhY2hlRW5hYmxlZCB0byAwXG4iKTsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAiZnNjIiwgMykgPT0gMCkgewogI2lmbmRlZiBDT05GSUdfQ0lGU19GU0NBQ0hFCi0JCQljRVJST1IoMSwgIkZTLUNhY2hlIHN1cHBvcnQgbmVlZHMgQ09ORklHX0NJRlNfRlNDQUNIRSIKKwkJCWNFUlJPUigxLCAiRlMtQ2FjaGUgc3VwcG9ydCBuZWVkcyBDT05GSUdfQ0lGU19GU0NBQ0hFICIKIAkJCQkgICJrZXJuZWwgY29uZmlnIG9wdGlvbiBzZXQiKTsKIAkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAjZW5kaWYKQEAgLTE5NzYsNyArMTk3Niw3IEBACiAJCXdhcm5lZF9vbl9udGxtID0gdHJ1ZTsKIAkJY0VSUk9SKDEsICJkZWZhdWx0IHNlY3VyaXR5IG1lY2hhbmlzbSByZXF1ZXN0ZWQuICBUaGUgZGVmYXVsdCAiCiAJCQkic2VjdXJpdHkgbWVjaGFuaXNtIHdpbGwgYmUgdXBncmFkZWQgZnJvbSBudGxtIHRvICIKLQkJCSJudGxtdjIgaW4ga2VybmVsIHJlbGVhc2UgMi42LjQxIik7CisJCQkibnRsbXYyIGluIGtlcm5lbCByZWxlYXNlIDMuMSIpOwogCX0KIAlzZXMtPm92ZXJyaWRlU2VjRmxnID0gdm9sdW1lX2luZm8tPnNlY0ZsZzsKIApkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGVhNWY3NDguLjk3ZTBkNTIgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTEwOTMsNiArMTA5Myw3IEBACiAKIAlicHJtLT5tbSA9IE5VTEw7CQkvKiBXZSdyZSB1c2luZyBpdCBub3cgKi8KIAorCXNldF9mcyhVU0VSX0RTKTsKIAljdXJyZW50LT5mbGFncyAmPSB+KFBGX1JBTkRPTUlaRSB8IFBGX0tUSFJFQUQpOwogCWZsdXNoX3RocmVhZCgpOwogCWN1cnJlbnQtPnBlcnNvbmFsaXR5ICY9IH5icHJtLT5wZXJfY2xlYXI7CkBAIC0xMzU3LDEwICsxMzU4LDYgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JLyoga2VybmVsIG1vZHVsZSBsb2FkZXIgZml4dXAgKi8KLQkvKiBzbyB3ZSBkb24ndCB0cnkgdG8gbG9hZCBydW4gbW9kcHJvYmUgaW4ga2VybmVsIHNwYWNlLiAqLwotCXNldF9mcyhVU0VSX0RTKTsKLQogCXJldHZhbCA9IGF1ZGl0X2Jwcm0oYnBybSk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IDcyNTc3NTIuLjcwMThlMWQgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKKysrIGIvZnMvZmF0L2ZpbGUuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCWlmIChhdHRyICYgQVRUUl9TWVMpCiAJCQlpbm9kZS0+aV9mbGFncyB8PSBTX0lNTVVUQUJMRTsKIAkJZWxzZQotCQkJaW5vZGUtPmlfZmxhZ3MgJj0gU19JTU1VVEFCTEU7CisJCQlpbm9kZS0+aV9mbGFncyAmPSB+U19JTU1VVEFCTEU7CiAJfQogCiAJZmF0X3NhdmVfYXR0cnMoaW5vZGUsIGF0dHIpOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9pbm9kZS5jIGIvZnMvZnVzZS9pbm9kZS5jCmluZGV4IGNjNmVjNGIuLjM4Zjg0Y2QgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvaW5vZGUuYworKysgYi9mcy9mdXNlL2lub2RlLmMKQEAgLTkyMSw2ICs5MjEsOCBAQAogCWlmIChzYi0+c19mbGFncyAmIE1TX01BTkRMT0NLKQogCQlnb3RvIGVycjsKIAorCXNiLT5zX2ZsYWdzICY9IH5NU19OT1NFQzsKKwogCWlmICghcGFyc2VfZnVzZV9vcHQoKGNoYXIgKikgZGF0YSwgJmQsIGlzX2JkZXYpKQogCQlnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5jIGIvZnMvZ2ZzMi9nbG9jay5jCmluZGV4IDI3OTJhNzkuLjFjMTMzNmUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suYworKysgYi9mcy9nZnMyL2dsb2NrLmMKQEAgLTY2MywxNCArNjYzLDE5IEBACiAJCWRyb3BfcmVmID0gMTsKIAl9CiAJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChHTEZfUEVORElOR19ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpICYmCisJaWYgKHRlc3RfYml0KEdMRl9QRU5ESU5HX0RFTU9URSwgJmdsLT5nbF9mbGFncykgJiYKIAkgICAgZ2wtPmdsX3N0YXRlICE9IExNX1NUX1VOTE9DS0VEICYmCiAJICAgIGdsLT5nbF9kZW1vdGVfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKSB7CiAJCXVuc2lnbmVkIGxvbmcgaG9sZHRpbWUsIG5vdyA9IGppZmZpZXM7CisKIAkJaG9sZHRpbWUgPSBnbC0+Z2xfdGNoYW5nZSArIGdsLT5nbF9vcHMtPmdvX21pbl9ob2xkX3RpbWU7CiAJCWlmICh0aW1lX2JlZm9yZShub3csIGhvbGR0aW1lKSkKIAkJCWRlbGF5ID0gaG9sZHRpbWUgLSBub3c7Ci0JCXNldF9iaXQoZGVsYXkgPyBHTEZfUEVORElOR19ERU1PVEUgOiBHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKTsKKworCQlpZiAoIWRlbGF5KSB7CisJCQljbGVhcl9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKTsKKwkJCXNldF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncyk7CisJCX0KIAl9CiAJcnVuX3F1ZXVlKGdsLCAwKTsKIAlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19sb2dtZ3IuYyBiL2ZzL2pmcy9qZnNfbG9nbWdyLmMKaW5kZXggMjc4ZTNmYi4uNTgzNjM2ZiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19sb2dtZ3IuYworKysgYi9mcy9qZnMvamZzX2xvZ21nci5jCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCWJkZXYgPSBibGtkZXZfZ2V0X2J5X2RldihzYmktPmxvZ2RldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURXxGTU9ERV9FWENMLAogCQkJCSBsb2cpOwogCWlmIChJU19FUlIoYmRldikpIHsKLQkJcmMgPSAtUFRSX0VSUihiZGV2KTsKKwkJcmMgPSBQVFJfRVJSKGJkZXYpOwogCQlnb3RvIGZyZWU7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAxYWI2NDFmLi45ODAyMzQ1IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTI1NzksNiArMjU3OSw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAorCXNocmlua19kY2FjaGVfcGFyZW50KGRlbnRyeSk7CiAJZXJyb3IgPSBkaXItPmlfb3AtPnJtZGlyKGRpciwgZGVudHJ5KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwpAQCAtMjYyMyw2ICsyNjI0LDEwIEBACiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CiAJaWYgKElTX0VSUihkZW50cnkpKQogCQlnb3RvIGV4aXQyOworCWlmICghZGVudHJ5LT5kX2lub2RlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBleGl0MzsKKwl9CiAJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGV4aXQzOwpAQCAtMjcwOCwxMSArMjcxMywxMCBAQAogCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwogCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKIAkJLyogV2h5IG5vdCBiZWZvcmU/IEJlY2F1c2Ugd2Ugd2FudCBjb3JyZWN0IGVycm9yIHZhbHVlICovCi0JCWlmIChuZC5sYXN0Lm5hbWVbbmQubGFzdC5sZW5dKQotCQkJZ290byBzbGFzaGVzOwogCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKGlub2RlKQotCQkJaWhvbGQoaW5vZGUpOworCQlpZiAobmQubGFzdC5uYW1lW25kLmxhc3QubGVuXSB8fCAhaW5vZGUpCisJCQlnb3RvIHNsYXNoZXM7CisJCWlob2xkKGlub2RlKTsKIAkJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZXhpdDI7CkBAIC0yOTkzLDYgKzI5OTcsOCBAQAogCWlmIChkX21vdW50cG9pbnQob2xkX2RlbnRyeSkgfHwgZF9tb3VudHBvaW50KG5ld19kZW50cnkpKQogCQlnb3RvIG91dDsKIAorCWlmICh0YXJnZXQpCisJCXNocmlua19kY2FjaGVfcGFyZW50KG5ld19kZW50cnkpOwogCWVycm9yID0gb2xkX2Rpci0+aV9vcC0+cmVuYW1lKG9sZF9kaXIsIG9sZF9kZW50cnksIG5ld19kaXIsIG5ld19kZW50cnkpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRyZWUuYyBiL2ZzL25pbGZzMi9idHJlZS5jCmluZGV4IDdlYWZlNDYuLmIyZTNmZjMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9idHJlZS5jCisrKyBiL2ZzL25pbGZzMi9idHJlZS5jCkBAIC0xMzQ2LDYgKzEzNDYsMTEgQEAKIAlwYXRoW2xldmVsXS5icF9iaCA9IE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX25vcChzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsCisJCQkgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCisJCQkgICAgaW50IGxldmVsLCBfX3U2NCAqa2V5cCwgX191NjQgKnB0cnApCit7Cit9CiAKIHN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJlcGFyZV9kZWxldGUoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSAgICAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLApAQCAtMTM1NiwyMCArMTM2MSwxOSBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsICpwYXJlbnQsICpzaWI7CiAJX191NjQgc2licHRyOwotCWludCBwaW5kZXgsIGxldmVsLCBuY21pbiwgbmNtYXgsIG5jYmxrLCByZXQ7CisJaW50IHBpbmRleCwgZGluZGV4LCBsZXZlbCwgbmNtaW4sIG5jbWF4LCBuY2JsaywgcmV0OwogCiAJcmV0ID0gMDsKIAlzdGF0cy0+YnNfbmJsb2NrcyA9IDA7CiAJbmNtaW4gPSBOSUxGU19CVFJFRV9OT0RFX05DSElMRFJFTl9NSU4obmlsZnNfYnRyZWVfbm9kZV9zaXplKGJ0cmVlKSk7CiAJbmNibGsgPSBuaWxmc19idHJlZV9uY2hpbGRyZW5fcGVyX2Jsb2NrKGJ0cmVlKTsKIAotCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsKKwlmb3IgKGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU4sIGRpbmRleCA9IHBhdGhbbGV2ZWxdLmJwX2luZGV4OwogCSAgICAgbGV2ZWwgPCBuaWxmc19idHJlZV9oZWlnaHQoYnRyZWUpIC0gMTsKIAkgICAgIGxldmVsKyspIHsKIAkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOwogCQlwYXRoW2xldmVsXS5icF9vbGRyZXEuYnByX3B0ciA9Ci0JCQluaWxmc19idHJlZV9ub2RlX2dldF9wdHIobm9kZSwgcGF0aFtsZXZlbF0uYnBfaW5kZXgsCi0JCQkJCQkgbmNibGspOworCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIGRpbmRleCwgbmNibGspOwogCQlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfZW5kX3B0cihidHJlZSwKIAkJCQkJCSAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOwogCQlpZiAocmV0IDwgMCkKQEAgLTEzODMsNiArMTM4Nyw3IEBACiAKIAkJcGFyZW50ID0gbmlsZnNfYnRyZWVfZ2V0X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsICsgMSwgJm5jbWF4KTsKIAkJcGluZGV4ID0gcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4OworCQlkaW5kZXggPSBwaW5kZXg7CiAKIAkJaWYgKHBpbmRleCA+IDApIHsKIAkJCS8qIGxlZnQgc2libGluZyAqLwpAQCAtMTQyMSw2ICsxNDI2LDE0IEBACiAJCQkJcGF0aFtsZXZlbF0uYnBfc2liX2JoID0gYmg7CiAJCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9jb25jYXRfcmlnaHQ7CiAJCQkJc3RhdHMtPmJzX25ibG9ja3MrKzsKKwkJCQkvKgorCQkJCSAqIFdoZW4gbWVyZ2luZyByaWdodCBzaWJsaW5nIG5vZGUKKwkJCQkgKiBpbnRvIHRoZSBjdXJyZW50IG5vZGUsIHBvaW50ZXIgdG8KKwkJCQkgKiB0aGUgcmlnaHQgc2libGluZyBub2RlIG11c3QgYmUKKwkJCQkgKiB0ZXJtaW5hdGVkIGluc3RlYWQuICBUaGUgYWRqdXN0bWVudAorCQkJCSAqIGJlbG93IGlzIHJlcXVpcmVkIGZvciB0aGF0LgorCQkJCSAqLworCQkJCWRpbmRleCA9IHBpbmRleCArIDE7CiAJCQkJLyogY29udGludWU7ICovCiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0xNDMxLDI5ICsxNDQ0LDMxIEBACiAJCQkgICAgTklMRlNfQlRSRUVfUk9PVF9OQ0hJTERSRU5fTUFYKSB7CiAJCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9zaHJpbms7CiAJCQkJc3RhdHMtPmJzX25ibG9ja3MgKz0gMjsKKwkJCQlsZXZlbCsrOworCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfbm9wOworCQkJCWdvdG8gc2hyaW5rX3Jvb3RfY2hpbGQ7CiAJCQl9IGVsc2UgewogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfZG9fZGVsZXRlOwogCQkJCXN0YXRzLT5ic19uYmxvY2tzKys7CisJCQkJZ290byBvdXQ7CiAJCQl9Ci0KLQkJCWdvdG8gb3V0OwotCiAJCX0KIAl9CiAKKwkvKiBjaGlsZCBvZiB0aGUgcm9vdCBub2RlIGlzIGRlbGV0ZWQgKi8KKwlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2RlbGV0ZTsKKwlzdGF0cy0+YnNfbmJsb2NrcysrOworCitzaHJpbmtfcm9vdF9jaGlsZDoKIAlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpOwogCXBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcHRyID0KLQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIHBhdGhbbGV2ZWxdLmJwX2luZGV4LAorCQluaWxmc19idHJlZV9ub2RlX2dldF9wdHIobm9kZSwgZGluZGV4LAogCQkJCQkgTklMRlNfQlRSRUVfUk9PVF9OQ0hJTERSRU5fTUFYKTsKIAogCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9lbmRfcHRyKGJ0cmVlLCAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXRfY2hpbGRfbm9kZTsKIAotCS8qIGNoaWxkIG9mIHRoZSByb290IG5vZGUgaXMgZGVsZXRlZCAqLwotCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfZG9fZGVsZXRlOwotCXN0YXRzLT5ic19uYmxvY2tzKys7Ci0KIAkvKiBzdWNjZXNzICovCiAgb3V0OgogCSpsZXZlbHAgPSBsZXZlbDsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zZWdtZW50LmMgYi9mcy9uaWxmczIvc2VnbWVudC5jCmluZGV4IDE0MTY0NmUuLmJiMjRhYjYgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zZWdtZW50LmMKKysrIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwpAQCAtMjU3Myw3ICsyNTczLDcgQEAKIAlzY2ktPnNjX3dhdGVybWFyayA9IE5JTEZTX1NDX0RFRkFVTFRfV0FURVJNQVJLOwogCiAJaWYgKG5pbGZzLT5uc19pbnRlcnZhbCkKLQkJc2NpLT5zY19pbnRlcnZhbCA9IG5pbGZzLT5uc19pbnRlcnZhbDsKKwkJc2NpLT5zY19pbnRlcnZhbCA9IEhaICogbmlsZnMtPm5zX2ludGVydmFsOwogCWlmIChuaWxmcy0+bnNfd2F0ZXJtYXJrKQogCQlzY2ktPnNjX3dhdGVybWFyayA9IG5pbGZzLT5uc193YXRlcm1hcms7CiAJcmV0dXJuIHNjaTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IGNkYmFmNWUuLjU2ZjYxMDIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMTA3Miw3ICsxMDcyLDcgQEAKIAogCXNiLT5zX21hZ2ljID0gT0NGUzJfU1VQRVJfTUFHSUM7CiAKLQlzYi0+c19mbGFncyA9IChzYi0+c19mbGFncyAmIH5NU19QT1NJWEFDTCkgfAorCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfihNU19QT1NJWEFDTCB8IE1TX05PU0VDKSkgfAogCQkoKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID8gTVNfUE9TSVhBQ0wgOiAwKTsKIAogCS8qIEhhcmQgcmVhZG9ubHkgbW9kZSBvbmx5IGlmOiBiZGV2X3JlYWRfb25seSwgTVNfUkRPTkxZLApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IGY4MmU3NjIuLmQ1NDVlOTcgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTI1NSwxMyArMjU1LDcgQEAKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBoZF9zdHJ1Y3QgKnAgPSBkZXZfdG9fcGFydChkZXYpOwotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTsKLQl1bnNpZ25lZCBpbnQgYWxpZ25tZW50ID0gMDsKLQotCWlmIChkaXNrLT5xdWV1ZSkKLQkJYWxpZ25tZW50ID0gcXVldWVfbGltaXRfZGlzY2FyZF9hbGlnbm1lbnQoJmRpc2stPnF1ZXVlLT5saW1pdHMsCi0JCQkJCQkJCXAtPnN0YXJ0X3NlY3QpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBhbGlnbm1lbnQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwLT5kaXNjYXJkX2FsaWdubWVudCk7CiB9CiAKIHNzaXplX3QgcGFydF9zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtNDU1LDYgKzQ0OSw4IEBACiAJcC0+c3RhcnRfc2VjdCA9IHN0YXJ0OwogCXAtPmFsaWdubWVudF9vZmZzZXQgPQogCQlxdWV1ZV9saW1pdF9hbGlnbm1lbnRfb2Zmc2V0KCZkaXNrLT5xdWV1ZS0+bGltaXRzLCBzdGFydCk7CisJcC0+ZGlzY2FyZF9hbGlnbm1lbnQgPQorCQlxdWV1ZV9saW1pdF9kaXNjYXJkX2FsaWdubWVudCgmZGlzay0+cXVldWUtPmxpbWl0cywgc3RhcnQpOwogCXAtPm5yX3NlY3RzID0gbGVuOwogCXAtPnBhcnRubyA9IHBhcnRubzsKIAlwLT5wb2xpY3kgPSBnZXRfZGlza19ybyhkaXNrKTsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IGM3NTU5MzkuLmFiM2Q2NzIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAJfSBlbHNlIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCi0JCXMtPnNfZmxhZ3MgPSBmbGFnczsKKwkJcy0+c19mbGFncyA9IGZsYWdzIHwgTVNfTk9TRUM7CiAJCXMtPnNfbW9kZSA9IG1vZGU7CiAJCXN0cmxjcHkocy0+c19pZCwgYmRldm5hbWUoYmRldiwgYiksIHNpemVvZihzLT5zX2lkKSk7CiAJCXNiX3NldF9ibG9ja3NpemUocywgYmxvY2tfc2l6ZShiZGV2KSk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9pby5jIGIvZnMvdWJpZnMvaW8uYwppbmRleCAxNjY5NTFlLi4zYmU2NDVlIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9pby5jCisrKyBiL2ZzL3ViaWZzL2lvLmMKQEAgLTU4MSw2ICs1ODEsNyBAQAogCXViaWZzX2Fzc2VydCh3YnVmLT5zaXplICUgYy0+bWluX2lvX3NpemUgPT0gMCk7CiAJdWJpZnNfYXNzZXJ0KG11dGV4X2lzX2xvY2tlZCgmd2J1Zi0+aW9fbXV0ZXgpKTsKIAl1Ymlmc19hc3NlcnQoIWMtPnJvX21lZGlhICYmICFjLT5yb19tb3VudCk7CisJdWJpZnNfYXNzZXJ0KCFjLT5zcGFjZV9maXh1cCk7CiAJaWYgKGMtPmxlYl9zaXplIC0gd2J1Zi0+b2ZmcyA+PSBjLT5tYXhfd3JpdGVfc2l6ZSkKIAkJdWJpZnNfYXNzZXJ0KCEoKHdidWYtPm9mZnMgKyB3YnVmLT5zaXplKSAlIGMtPm1heF93cml0ZV9zaXplKSk7CiAKQEAgLTc1OSw2ICs3NjAsNyBAQAogCXViaWZzX2Fzc2VydChsbnVtID49IDAgJiYgbG51bSA8IGMtPmxlYl9jbnQgJiYgb2ZmcyA+PSAwKTsKIAl1Ymlmc19hc3NlcnQob2ZmcyAlIGMtPm1pbl9pb19zaXplID09IDAgJiYgb2ZmcyA8IGMtPmxlYl9zaXplKTsKIAl1Ymlmc19hc3NlcnQoIWMtPnJvX21lZGlhICYmICFjLT5yb19tb3VudCk7CisJdWJpZnNfYXNzZXJ0KCFjLT5zcGFjZV9maXh1cCk7CiAKIAlpZiAoYy0+cm9fZXJyb3IpCiAJCXJldHVybiAtRVJPRlM7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9qb3VybmFsLmMgYi9mcy91Ymlmcy9qb3VybmFsLmMKaW5kZXggMzRiMTY3OS4uY2VmMDQ2MCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvam91cm5hbC5jCisrKyBiL2ZzL3ViaWZzL2pvdXJuYWwuYwpAQCAtNjY5LDYgKzY2OSw3IEBACiAKIG91dF9yZWxlYXNlOgogCXJlbGVhc2VfaGVhZChjLCBCQVNFSEQpOworCWtmcmVlKGRlbnQpOwogb3V0X3JvOgogCXViaWZzX3JvX21vZGUoYywgZXJyKTsKIAlpZiAobGFzdF9yZWZlcmVuY2UpCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9vcnBoYW4uYyBiL2ZzL3ViaWZzL29ycGhhbi5jCmluZGV4IGJkNjQ0YmYuLmE1NDIyZmYgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL29ycGhhbi5jCisrKyBiL2ZzL3ViaWZzL29ycGhhbi5jCkBAIC02NzQsNyArNjc0LDcgQEAKIAkJaWYgKElTX0VSUihzbGViKSkgewogCQkJaWYgKFBUUl9FUlIoc2xlYikgPT0gLUVVQ0xFQU4pCiAJCQkJc2xlYiA9IHViaWZzX3JlY292ZXJfbGViKGMsIGxudW0sIDAsCi0JCQkJCQkJIGMtPnNidWYsIDApOworCQkJCQkJCSBjLT5zYnVmLCAtMSk7CiAJCQlpZiAoSVNfRVJSKHNsZWIpKSB7CiAJCQkJZXJyID0gUFRSX0VSUihzbGViKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMgYi9mcy91Ymlmcy9yZWNvdmVyeS5jCmluZGV4IDczMWQ5ZTIuLjc4M2Q4ZTAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMKKysrIGIvZnMvdWJpZnMvcmVjb3ZlcnkuYwpAQCAtNTY0LDE5ICs1NjQsMTUgQEAKIH0KIAogLyoqCi0gKiBkcm9wX2xhc3Rfbm9kZSAtIGRyb3AgdGhlIGxhc3Qgbm9kZSBvciBncm91cCBvZiBub2Rlcy4KKyAqIGRyb3BfbGFzdF9ncm91cCAtIGRyb3AgdGhlIGxhc3QgZ3JvdXAgb2Ygbm9kZXMuCiAgKiBAc2xlYjogc2Nhbm5lZCBMRUIgaW5mb3JtYXRpb24KICAqIEBvZmZzOiBvZmZzZXQgb2YgZHJvcHBlZCBub2RlcyBpcyByZXR1cm5lZCBoZXJlCi0gKiBAZ3JvdXBlZDogbm9uLXplcm8gaWYgd2hvbGUgZ3JvdXAgb2Ygbm9kZXMgaGF2ZSB0byBiZSBkcm9wcGVkCiAgKgogICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgJ3ViaWZzX3JlY292ZXJfbGViKCknIHdoaWNoIGRyb3BzIHRoZSBsYXN0Ci0gKiBub2RlIG9mIHRoZSBzY2FubmVkIExFQiBvciB0aGUgbGFzdCBncm91cCBvZiBub2RlcyBpZiBAZ3JvdXBlZCBpcyBub3QgemVyby4KLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiBhIG5vZGUgd2FzIGRyb3BwZWQgYW5kICUwIG90aGVyd2lzZS4KKyAqIGdyb3VwIG9mIG5vZGVzIG9mIHRoZSBzY2FubmVkIExFQi4KICAqLwotc3RhdGljIGludCBkcm9wX2xhc3Rfbm9kZShzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWIsIGludCAqb2ZmcywgaW50IGdyb3VwZWQpCitzdGF0aWMgdm9pZCBkcm9wX2xhc3RfZ3JvdXAoc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViLCBpbnQgKm9mZnMpCiB7Ci0JaW50IGRyb3BwZWQgPSAwOwotCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZzbGViLT5ub2RlcykpIHsKIAkJc3RydWN0IHViaWZzX3NjYW5fbm9kZSAqc25vZDsKIAkJc3RydWN0IHViaWZzX2NoICpjaDsKQEAgLTU4NSwxNyArNTgxLDQwIEBACiAJCQkJICBsaXN0KTsKIAkJY2ggPSBzbm9kLT5ub2RlOwogCQlpZiAoY2gtPmdyb3VwX3R5cGUgIT0gVUJJRlNfSU5fTk9ERV9HUk9VUCkKLQkJCXJldHVybiBkcm9wcGVkOwotCQlkYmdfcmN2cnkoImRyb3BwaW5nIG5vZGUgYXQgJWQ6JWQiLCBzbGViLT5sbnVtLCBzbm9kLT5vZmZzKTsKKwkJCWJyZWFrOworCisJCWRiZ19yY3ZyeSgiZHJvcHBpbmcgZ3JvdXBlZCBub2RlIGF0ICVkOiVkIiwKKwkJCSAgc2xlYi0+bG51bSwgc25vZC0+b2Zmcyk7CiAJCSpvZmZzID0gc25vZC0+b2ZmczsKIAkJbGlzdF9kZWwoJnNub2QtPmxpc3QpOwogCQlrZnJlZShzbm9kKTsKIAkJc2xlYi0+bm9kZXNfY250IC09IDE7Ci0JCWRyb3BwZWQgPSAxOwotCQlpZiAoIWdyb3VwZWQpCi0JCQlicmVhazsKIAl9Ci0JcmV0dXJuIGRyb3BwZWQ7Cit9CisKKy8qKgorICogZHJvcF9sYXN0X25vZGUgLSBkcm9wIHRoZSBsYXN0IG5vZGUuCisgKiBAc2xlYjogc2Nhbm5lZCBMRUIgaW5mb3JtYXRpb24KKyAqIEBvZmZzOiBvZmZzZXQgb2YgZHJvcHBlZCBub2RlcyBpcyByZXR1cm5lZCBoZXJlCisgKiBAZ3JvdXBlZDogbm9uLXplcm8gaWYgd2hvbGUgZ3JvdXAgb2Ygbm9kZXMgaGF2ZSB0byBiZSBkcm9wcGVkCisgKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgJ3ViaWZzX3JlY292ZXJfbGViKCknIHdoaWNoIGRyb3BzIHRoZSBsYXN0CisgKiBub2RlIG9mIHRoZSBzY2FubmVkIExFQi4KKyAqLworc3RhdGljIHZvaWQgZHJvcF9sYXN0X25vZGUoc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViLCBpbnQgKm9mZnMpCit7CisJc3RydWN0IHViaWZzX3NjYW5fbm9kZSAqc25vZDsKKworCWlmICghbGlzdF9lbXB0eSgmc2xlYi0+bm9kZXMpKSB7CisJCXNub2QgPSBsaXN0X2VudHJ5KHNsZWItPm5vZGVzLnByZXYsIHN0cnVjdCB1Ymlmc19zY2FuX25vZGUsCisJCQkJICBsaXN0KTsKKworCQlkYmdfcmN2cnkoImRyb3BwaW5nIGxhc3Qgbm9kZSBhdCAlZDolZCIsIHNsZWItPmxudW0sIHNub2QtPm9mZnMpOworCQkqb2ZmcyA9IHNub2QtPm9mZnM7CisJCWxpc3RfZGVsKCZzbm9kLT5saXN0KTsKKwkJa2ZyZWUoc25vZCk7CisJCXNsZWItPm5vZGVzX2NudCAtPSAxOworCX0KIH0KIAogLyoqCkBAIC02MDQsNyArNjIzLDggQEAKICAqIEBsbnVtOiBMRUIgbnVtYmVyCiAgKiBAb2Zmczogb2Zmc2V0CiAgKiBAc2J1ZjogTEVCLXNpemVkIGJ1ZmZlciB0byB1c2UKLSAqIEBncm91cGVkOiBub2RlcyBtYXkgYmUgZ3JvdXBlZCBmb3IgcmVjb3ZlcnkKKyAqIEBqaGVhZDogam91cm5hbCBoZWFkIG51bWJlciB0aGlzIExFQiBiZWxvbmdzIHRvICglLTEgaWYgdGhlIExFQiBkb2VzIG5vdAorICogICAgICAgICBiZWxvbmcgdG8gYW55IGpvdXJuYWwgaGVhZCkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBzY2FuIG9mIGEgTEVCLCBidXQgY2F0ZXJzIGZvciBlcnJvcnMgdGhhdCBtaWdodCBoYXZlCiAgKiBiZWVuIGNhdXNlZCBieSB0aGUgdW5jbGVhbiB1bm1vdW50IGZyb20gd2hpY2ggd2UgYXJlIGF0dGVtcHRpbmcgdG8gcmVjb3Zlci4KQEAgLTYxMiwxMyArNjMyLDE0IEBACiAgKiBmb3VuZCwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCB1Ymlmc19zY2FuX2xlYiAqdWJpZnNfcmVjb3Zlcl9sZWIoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBsbnVtLAotCQkJCQkgaW50IG9mZnMsIHZvaWQgKnNidWYsIGludCBncm91cGVkKQorCQkJCQkgaW50IG9mZnMsIHZvaWQgKnNidWYsIGludCBqaGVhZCkKIHsKIAlpbnQgcmV0ID0gMCwgZXJyLCBsZW4gPSBjLT5sZWJfc2l6ZSAtIG9mZnMsIHN0YXJ0ID0gb2ZmcywgbWluX2lvX3VuaXQ7CisJaW50IGdyb3VwZWQgPSBqaGVhZCA9PSAtMSA/IDAgOiBjLT5qaGVhZHNbamhlYWRdLmdyb3VwZWQ7CiAJc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViOwogCXZvaWQgKmJ1ZiA9IHNidWYgKyBvZmZzOwogCi0JZGJnX3JjdnJ5KCIlZDolZCIsIGxudW0sIG9mZnMpOworCWRiZ19yY3ZyeSgiJWQ6JWQsIGpoZWFkICVkLCBncm91cGVkICVkIiwgbG51bSwgb2ZmcywgamhlYWQsIGdyb3VwZWQpOwogCiAJc2xlYiA9IHViaWZzX3N0YXJ0X3NjYW4oYywgbG51bSwgb2Zmcywgc2J1Zik7CiAJaWYgKElTX0VSUihzbGViKSkKQEAgLTYzNSw3ICs2NTYsNyBAQAogCQkgKiBTY2FuIHF1aWV0bHkgdW50aWwgdGhlcmUgaXMgYW4gZXJyb3IgZnJvbSB3aGljaCB3ZSBjYW5ub3QKIAkJICogcmVjb3ZlcgogCQkgKi8KLQkJcmV0ID0gdWJpZnNfc2Nhbl9hX25vZGUoYywgYnVmLCBsZW4sIGxudW0sIG9mZnMsIDApOworCQlyZXQgPSB1Ymlmc19zY2FuX2Ffbm9kZShjLCBidWYsIGxlbiwgbG51bSwgb2ZmcywgMSk7CiAJCWlmIChyZXQgPT0gU0NBTk5FRF9BX05PREUpIHsKIAkJCS8qIEEgdmFsaWQgbm9kZSwgYW5kIG5vdCBhIHBhZGRpbmcgbm9kZSAqLwogCQkJc3RydWN0IHViaWZzX2NoICpjaCA9IGJ1ZjsKQEAgLTY5NSw1OSArNzE2LDYyIEBACiAJCSAqIElmIG5vZGVzIGFyZSBncm91cGVkLCBhbHdheXMgZHJvcCB0aGUgaW5jb21wbGV0ZSBncm91cCBhdAogCQkgKiB0aGUgZW5kLgogCQkgKi8KLQkJZHJvcF9sYXN0X25vZGUoc2xlYiwgJm9mZnMsIDEpOworCQlkcm9wX2xhc3RfZ3JvdXAoc2xlYiwgJm9mZnMpOwogCi0JLyoKLQkgKiBXaGlsZSB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2FtZSBtaW4uIEkvTyB1bml0IGtlZXAgZHJvcHBpbmcKLQkgKiBub2Rlcy4gU28gYmFzaWNhbGx5LCB3aGF0IHdlIHdhbnQgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxhc3QgbWluLgotCSAqIEkvTyB1bml0IHdoZXJlIHdlIHNhdyB0aGUgY29ycnVwdGlvbiBpcyBkcm9wcGVkIGNvbXBsZXRlbHkgd2l0aCBhbGwKLQkgKiB0aGUgdW5jb3JydXB0ZWQgbm9kZSB3aGljaCBtYXkgcG9zc2libHkgc2l0IHRoZXJlLgotCSAqCi0JICogSW4gb3RoZXIgd29yZHMsIGxldCdzIG5hbWUgdGhlIG1pbi4gSS9PIHVuaXQgd2hlcmUgdGhlIGNvcnJ1cHRpb24KLQkgKiBzdGFydHMgQiwgYW5kIHRoZSBwcmV2aW91cyBtaW4uIEkvTyB1bml0IEEuIFRoZSBiZWxvdyBjb2RlIHRyaWVzIHRvCi0JICogZGVhbCB3aXRoIGEgc2l0dWF0aW9uIHdoZW4gaGFsZiBvZiBCIGNvbnRhaW5zIHZhbGlkIG5vZGVzIG9yIHRoZSBlbmQKLQkgKiBvZiBhIHZhbGlkIG5vZGUsIGFuZCB0aGUgc2Vjb25kIGhhbGYgb2YgQiBjb250YWlucyBjb3JydXB0ZWQgZGF0YSBvcgotCSAqIGdhcmJhZ2UuIFRoaXMgbWVhbnMgdGhhdCBVQklGUyBoYWQgYmVlbiB3cml0aW5nIHRvIEIganVzdCBiZWZvcmUgdGhlCi0JICogcG93ZXIgY3V0IGhhcHBlbmVkLiBJIGRvIG5vdCBrbm93IGhvdyByZWFsaXN0aWMgaXMgdGhpcyBzY2VuYXJpbwotCSAqIHRoYXQgaGFsZiBvZiB0aGUgbWluLiBJL08gdW5pdCBoYWQgYmVlbiB3cml0dGVuIHN1Y2Nlc3NmdWxseSBhbmQgdGhlCi0JICogb3RoZXIgaGFsZiBub3QsIGJ1dCB0aGlzIGlzIHBvc3NpYmxlIGluIG91ciAnZmFpbHVyZSBtb2RlIGVtdWxhdGlvbicKLQkgKiBpbmZyYXN0cnVjdHVyZSBhdCBsZWFzdC4KLQkgKgotCSAqIFNvIHdoYXQgaXMgdGhlIHByb2JsZW0sIHdoeSB3ZSBuZWVkIHRvIGRyb3AgdGhvc2Ugbm9kZXM/IFdoZXkgY2FuJ3QKLQkgKiB3ZSBqdXN0IGNsZWFuLXVwIHRoZSBzZWNvbmQgaGFsZiBvZiBCIGJ5IHB1dHRpbmcgYSBwYWRkaW5nIG5vZGUKLQkgKiB0aGVyZT8gV2UgY2FuLCBhbmQgdGhpcyB3b3JrcyBmaW5lIHdpdGggb25lIGV4Y2VwdGlvbiB3aGljaCB3YXMKLQkgKiByZXByb2R1Y2VkIHdpdGggcG93ZXIgY3V0IGVtdWxhdGlvbiB0ZXN0aW5nIGFuZCBoYXBwZW5zIGV4dHJlbWVseQotCSAqIHJhcmVseS4gVGhlIGRlc2NyaXB0aW9uIGZvbGxvd3MsIGJ1dCBpdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0aGF0IGlzCi0JICogb25seSBhYm91dCB0aGUgR0MgaGVhZCwgc28gd2UgY291bGQgZG8gdGhpcyB0cmljayBvbmx5IGlmIHRoZSBidWQKLQkgKiBiZWxvbmdzIHRvIHRoZSBHQyBoZWFkLCBidXQgaXQgZG9lcyBub3Qgc2VlbSB0byBiZSB3b3J0aCBhbgotCSAqIGFkZGl0aW9uYWwgImlmIiBzdGF0ZW1lbnQuCi0JICoKLQkgKiBTbywgaW1hZ2luZSB0aGUgZmlsZS1zeXN0ZW0gaXMgZnVsbCwgd2UgcnVuIEdDIHdoaWNoIGlzIG1vdmluZyB2YWxpZAotCSAqIG5vZGVzIGZyb20gTEVCIFggdG8gTEVCIFkgKG9idmlvdXNseSwgTEVCIFkgaXMgdGhlIGN1cnJlbnQgR0MgaGVhZAotCSAqIExFQikuIFRoZSBAYy0+Z2NfbG51bSBpcyAtMSwgd2hpY2ggbWVhbnMgdGhhdCBHQyB3aWxsIHJldGFpbiBMRUIgWAotCSAqIGFuZCB3aWxsIHRyeSB0byBjb250aW51ZS4gSW1hZ2luZSB0aGF0IExFQiBYIGlzIGN1cnJlbnRseSB0aGUKLQkgKiBkaXJ0aWVzdCBMRUIsIGFuZCB0aGUgYW1vdW50IG9mIHVzZWQgc3BhY2UgaW4gTEVCIFkgaXMgZXhhY3RseSB0aGUKLQkgKiBzYW1lIGFzIGFtb3VudCBvZiBmcmVlIHNwYWNlIGluIExFQiBYLgotCSAqCi0JICogQW5kIGEgcG93ZXIgY3V0IGhhcHBlbnMgd2hlbiBub2RlcyBhcmUgbW92ZWQgZnJvbSBMRUIgWCB0byBMRUIgWS4gV2UKLQkgKiBhcmUgaGVyZSB0cnlpbmcgdG8gcmVjb3ZlciBMRUIgWSB3aGljaCBpcyB0aGUgR0MgaGVhZCBMRUIuIFdlIGZpbmQKLQkgKiB0aGUgbWluLiBJL08gdW5pdCBCIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhlbiB3ZSBjbGVhbi11cCBMRUIgWSBieQotCSAqIHBhZGRpbmcgbWluLiBJL08gdW5pdC4gQW5kIGxhdGVyICd1Ymlmc19yY3ZyeV9nY19jb21taXQoKScgZnVuY3Rpb24KLQkgKiBmYWlscywgYmVjYXVzZSBpdCBjYW5ub3QgZmluZCBhIGRpcnR5IExFQiB3aGljaCBjb3VsZCBiZSBHQydkIGludG8KLQkgKiBMRUIgWSEgRXZlbiBMRUIgWCBkb2VzIG5vdCBtYXRjaCBiZWNhdXNlIHRoZSBhbW91bnQgb2YgdmFsaWQgbm9kZXMKLQkgKiB0aGVyZSBkb2VzIG5vdCBmaXQgdGhlIGZyZWUgc3BhY2UgaW4gTEVCIFkgYW55IG1vcmUhIEFuZCB0aGlzIGlzCi0JICogYmVjYXVzZSBvZiB0aGUgcGFkZGluZyBub2RlIHdoaWNoIHdlIGFkZGVkIHRvIExFQiBZLiBUaGUKLQkgKiB1c2VyLXZpc2libGUgZWZmZWN0IG9mIHRoaXMgd2hpY2ggSSBvbmNlIG9ic2VydmVkIGFuZCBhbmFseXNlZCBpcwotCSAqIHRoYXQgd2UgY2Fubm90IG1vdW50IHRoZSBmaWxlLXN5c3RlbSB3aXRoIC1FTk9TUEMgZXJyb3IuCi0JICoKLQkgKiBTbyBvYnZpb3VzbHksIHRvIG1ha2Ugc3VyZSB0aGF0IHNpdHVhdGlvbiBkb2VzIG5vdCBoYXBwZW4gd2Ugc2hvdWxkCi0JICogZnJlZSBtaW4uIEkvTyB1bml0IEIgaW4gTEVCIFkgY29tcGxldGVseSBhbmQgdGhlIGxhc3QgdXNlZCBtaW4uIEkvTwotCSAqIHVuaXQgaW4gTEVCIFkgc2hvdWxkIGJlIEEuIFRoaXMgaXMgYmFzaWNhbGx5IHdoYXQgdGhlIGJlbG93IGNvZGUKLQkgKiB0cmllcyB0byBkby4KLQkgKi8KLQl3aGlsZSAobWluX2lvX3VuaXQgPT0gcm91bmRfZG93bihvZmZzLCBjLT5taW5faW9fc2l6ZSkgJiYKLQkgICAgICAgbWluX2lvX3VuaXQgIT0gb2ZmcyAmJgotCSAgICAgICBkcm9wX2xhc3Rfbm9kZShzbGViLCAmb2ZmcywgZ3JvdXBlZCkpOworCWlmIChqaGVhZCA9PSBHQ0hEKSB7CisJCS8qCisJCSAqIElmIHRoaXMgTEVCIGJlbG9uZ3MgdG8gdGhlIEdDIGhlYWQgdGhlbiB3aGlsZSB3ZSBhcmUgaW4gdGhlCisJCSAqIG1pZGRsZSBvZiB0aGUgc2FtZSBtaW4uIEkvTyB1bml0IGtlZXAgZHJvcHBpbmcgbm9kZXMuIFNvCisJCSAqIGJhc2ljYWxseSwgd2hhdCB3ZSB3YW50IGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXN0IG1pbi4KKwkJICogSS9PIHVuaXQgd2hlcmUgd2Ugc2F3IHRoZSBjb3JydXB0aW9uIGlzIGRyb3BwZWQgY29tcGxldGVseQorCQkgKiB3aXRoIGFsbCB0aGUgdW5jb3JydXB0ZWQgbm9kZXMgd2hpY2ggbWF5IHBvc3NpYmx5IHNpdCB0aGVyZS4KKwkJICoKKwkJICogSW4gb3RoZXIgd29yZHMsIGxldCdzIG5hbWUgdGhlIG1pbi4gSS9PIHVuaXQgd2hlcmUgdGhlCisJCSAqIGNvcnJ1cHRpb24gc3RhcnRzIEIsIGFuZCB0aGUgcHJldmlvdXMgbWluLiBJL08gdW5pdCBBLiBUaGUKKwkJICogYmVsb3cgY29kZSB0cmllcyB0byBkZWFsIHdpdGggYSBzaXR1YXRpb24gd2hlbiBoYWxmIG9mIEIKKwkJICogY29udGFpbnMgdmFsaWQgbm9kZXMgb3IgdGhlIGVuZCBvZiBhIHZhbGlkIG5vZGUsIGFuZCB0aGUKKwkJICogc2Vjb25kIGhhbGYgb2YgQiBjb250YWlucyBjb3JydXB0ZWQgZGF0YSBvciBnYXJiYWdlLiBUaGlzCisJCSAqIG1lYW5zIHRoYXQgVUJJRlMgaGFkIGJlZW4gd3JpdGluZyB0byBCIGp1c3QgYmVmb3JlIHRoZSBwb3dlcgorCQkgKiBjdXQgaGFwcGVuZWQuIEkgZG8gbm90IGtub3cgaG93IHJlYWxpc3RpYyBpcyB0aGlzIHNjZW5hcmlvCisJCSAqIHRoYXQgaGFsZiBvZiB0aGUgbWluLiBJL08gdW5pdCBoYWQgYmVlbiB3cml0dGVuIHN1Y2Nlc3NmdWxseQorCQkgKiBhbmQgdGhlIG90aGVyIGhhbGYgbm90LCBidXQgdGhpcyBpcyBwb3NzaWJsZSBpbiBvdXIgJ2ZhaWx1cmUKKwkJICogbW9kZSBlbXVsYXRpb24nIGluZnJhc3RydWN0dXJlIGF0IGxlYXN0LgorCQkgKgorCQkgKiBTbyB3aGF0IGlzIHRoZSBwcm9ibGVtLCB3aHkgd2UgbmVlZCB0byBkcm9wIHRob3NlIG5vZGVzPyBXaHkKKwkJICogY2FuJ3Qgd2UganVzdCBjbGVhbi11cCB0aGUgc2Vjb25kIGhhbGYgb2YgQiBieSBwdXR0aW5nIGEKKwkJICogcGFkZGluZyBub2RlIHRoZXJlPyBXZSBjYW4sIGFuZCB0aGlzIHdvcmtzIGZpbmUgd2l0aCBvbmUKKwkJICogZXhjZXB0aW9uIHdoaWNoIHdhcyByZXByb2R1Y2VkIHdpdGggcG93ZXIgY3V0IGVtdWxhdGlvbgorCQkgKiB0ZXN0aW5nIGFuZCBoYXBwZW5zIGV4dHJlbWVseSByYXJlbHkuCisJCSAqCisJCSAqIEltYWdpbmUgdGhlIGZpbGUtc3lzdGVtIGlzIGZ1bGwsIHdlIHJ1biBHQyB3aGljaCBzdGFydHMKKwkJICogbW92aW5nIHZhbGlkIG5vZGVzIGZyb20gTEVCIFggdG8gTEVCIFkgKG9idmlvdXNseSwgTEVCIFkgaXMKKwkJICogdGhlIGN1cnJlbnQgR0MgaGVhZCBMRUIpLiBUaGUgQGMtPmdjX2xudW0gaXMgLTEsIHdoaWNoIG1lYW5zCisJCSAqIHRoYXQgR0Mgd2lsbCByZXRhaW4gTEVCIFggYW5kIHdpbGwgdHJ5IHRvIGNvbnRpbnVlLiBJbWFnaW5lCisJCSAqIHRoYXQgTEVCIFggaXMgY3VycmVudGx5IHRoZSBkaXJ0aWVzdCBMRUIsIGFuZCB0aGUgYW1vdW50IG9mCisJCSAqIHVzZWQgc3BhY2UgaW4gTEVCIFkgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBhbW91bnQgb2YgZnJlZQorCQkgKiBzcGFjZSBpbiBMRUIgWC4KKwkJICoKKwkJICogQW5kIGEgcG93ZXIgY3V0IGhhcHBlbnMgd2hlbiBub2RlcyBhcmUgbW92ZWQgZnJvbSBMRUIgWCB0bworCQkgKiBMRUIgWS4gV2UgYXJlIGhlcmUgdHJ5aW5nIHRvIHJlY292ZXIgTEVCIFkgd2hpY2ggaXMgdGhlIEdDCisJCSAqIGhlYWQgTEVCLiBXZSBmaW5kIHRoZSBtaW4uIEkvTyB1bml0IEIgYXMgZGVzY3JpYmVkIGFib3ZlLgorCQkgKiBUaGVuIHdlIGNsZWFuLXVwIExFQiBZIGJ5IHBhZGRpbmcgbWluLiBJL08gdW5pdC4gQW5kIGxhdGVyCisJCSAqICd1Ymlmc19yY3ZyeV9nY19jb21taXQoKScgZnVuY3Rpb24gZmFpbHMsIGJlY2F1c2UgaXQgY2Fubm90CisJCSAqIGZpbmQgYSBkaXJ0eSBMRUIgd2hpY2ggY291bGQgYmUgR0MnZCBpbnRvIExFQiBZISBFdmVuIExFQiBYCisJCSAqIGRvZXMgbm90IG1hdGNoIGJlY2F1c2UgdGhlIGFtb3VudCBvZiB2YWxpZCBub2RlcyB0aGVyZSBkb2VzCisJCSAqIG5vdCBmaXQgdGhlIGZyZWUgc3BhY2UgaW4gTEVCIFkgYW55IG1vcmUhIEFuZCB0aGlzIGlzCisJCSAqIGJlY2F1c2Ugb2YgdGhlIHBhZGRpbmcgbm9kZSB3aGljaCB3ZSBhZGRlZCB0byBMRUIgWS4gVGhlCisJCSAqIHVzZXItdmlzaWJsZSBlZmZlY3Qgb2YgdGhpcyB3aGljaCBJIG9uY2Ugb2JzZXJ2ZWQgYW5kCisJCSAqIGFuYWx5c2VkIGlzIHRoYXQgd2UgY2Fubm90IG1vdW50IHRoZSBmaWxlLXN5c3RlbSB3aXRoCisJCSAqIC1FTk9TUEMgZXJyb3IuCisJCSAqCisJCSAqIFNvIG9idmlvdXNseSwgdG8gbWFrZSBzdXJlIHRoYXQgc2l0dWF0aW9uIGRvZXMgbm90IGhhcHBlbiB3ZQorCQkgKiBzaG91bGQgZnJlZSBtaW4uIEkvTyB1bml0IEIgaW4gTEVCIFkgY29tcGxldGVseSBhbmQgdGhlIGxhc3QKKwkJICogdXNlZCBtaW4uIEkvTyB1bml0IGluIExFQiBZIHNob3VsZCBiZSBBLiBUaGlzIGlzIGJhc2ljYWxseQorCQkgKiB3aGF0IHRoZSBiZWxvdyBjb2RlIHRyaWVzIHRvIGRvLgorCQkgKi8KKwkJd2hpbGUgKG9mZnMgPiBtaW5faW9fdW5pdCkKKwkJCWRyb3BfbGFzdF9ub2RlKHNsZWIsICZvZmZzKTsKKwl9CiAKIAlidWYgPSBzYnVmICsgb2ZmczsKIAlsZW4gPSBjLT5sZWJfc2l6ZSAtIG9mZnM7CkBAIC04ODEsNyArOTA1LDcgQEAKIAkJfQogCQl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7CiAJfQotCXJldHVybiB1Ymlmc19yZWNvdmVyX2xlYihjLCBsbnVtLCBvZmZzLCBzYnVmLCAwKTsKKwlyZXR1cm4gdWJpZnNfcmVjb3Zlcl9sZWIoYywgbG51bSwgb2Zmcywgc2J1ZiwgLTEpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3JlcGxheS5jIGIvZnMvdWJpZnMvcmVwbGF5LmMKaW5kZXggNjYxNzI4MC4uNWU5NzE2MSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvcmVwbGF5LmMKKysrIGIvZnMvdWJpZnMvcmVwbGF5LmMKQEAgLTU1Nyw4ICs1NTcsNyBAQAogCQkgKiB0aGVzZSBMRUJzIGNvdWxkIHBvc3NpYmx5IGJlIHdyaXR0ZW4gdG8gYXQgdGhlIHBvd2VyIGN1dAogCQkgKiB0aW1lLgogCQkgKi8KLQkJc2xlYiA9IHViaWZzX3JlY292ZXJfbGViKGMsIGxudW0sIG9mZnMsIGMtPnNidWYsCi0JCQkJCSBiLT5idWQtPmpoZWFkICE9IEdDSEQpOworCQlzbGViID0gdWJpZnNfcmVjb3Zlcl9sZWIoYywgbG51bSwgb2ZmcywgYy0+c2J1ZiwgYi0+YnVkLT5qaGVhZCk7CiAJZWxzZQogCQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCBvZmZzLCBjLT5zYnVmLCAwKTsKIAlpZiAoSVNfRVJSKHNsZWIpKQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvc2hyaW5rZXIuYyBiL2ZzL3ViaWZzL3Nocmlua2VyLmMKaW5kZXggY2E5NTNhOS4uOWUxZDA1NiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc2hyaW5rZXIuYworKysgYi9mcy91Ymlmcy9zaHJpbmtlci5jCkBAIC0yODQsNyArMjg0LDExIEBACiAJbG9uZyBjbGVhbl96bl9jbnQgPSBhdG9taWNfbG9uZ19yZWFkKCZ1Ymlmc19jbGVhbl96bl9jbnQpOwogCiAJaWYgKG5yID09IDApCi0JCXJldHVybiBjbGVhbl96bl9jbnQ7CisJCS8qCisJCSAqIER1ZSB0byB0aGUgd2F5IFVCSUZTIHVwZGF0ZXMgdGhlIGNsZWFuIHpub2RlIGNvdW50ZXIgaXQgbWF5CisJCSAqIHRlbXBvcmFyaWx5IGJlIG5lZ2F0aXZlLgorCQkgKi8KKwkJcmV0dXJuIGNsZWFuX3puX2NudCA+PSAwID8gY2xlYW5fem5fY250IDogMTsKIAogCWlmICghY2xlYW5fem5fY250KSB7CiAJCS8qCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCAxYWIwZDIyLi5iNWFlYjVhIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTgxMSwxNSArODExLDE4IEBACiAKIAkJYy0+amhlYWRzW2ldLndidWYuc3luY19jYWxsYmFjayA9ICZidWRfd2J1Zl9jYWxsYmFjazsKIAkJYy0+amhlYWRzW2ldLndidWYuamhlYWQgPSBpOworCQljLT5qaGVhZHNbaV0uZ3JvdXBlZCA9IDE7CiAJfQogCiAJYy0+amhlYWRzW0JBU0VIRF0ud2J1Zi5kdHlwZSA9IFVCSV9TSE9SVFRFUk07CiAJLyoKIAkgKiBHYXJiYWdlIENvbGxlY3RvciBoZWFkIGxpa2VseSBjb250YWlucyBsb25nLXRlcm0gZGF0YSBhbmQKLQkgKiBkb2VzIG5vdCBuZWVkIHRvIGJlIHN5bmNocm9uaXplZCBieSB0aW1lci4KKwkgKiBkb2VzIG5vdCBuZWVkIHRvIGJlIHN5bmNocm9uaXplZCBieSB0aW1lci4gQWxzbyBHQyBoZWFkIG5vZGVzIGFyZQorCSAqIG5vdCBncm91cGVkLgogCSAqLwogCWMtPmpoZWFkc1tHQ0hEXS53YnVmLmR0eXBlID0gVUJJX0xPTkdURVJNOwogCWMtPmpoZWFkc1tHQ0hEXS53YnVmLm5vX3RpbWVyID0gMTsKKwljLT5qaGVhZHNbR0NIRF0uZ3JvdXBlZCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyODQsMTIgKzEyODcsMjUgQEAKIAlpZiAoKGMtPm1zdF9ub2RlLT5mbGFncyAmIGNwdV90b19sZTMyKFVCSUZTX01TVF9ESVJUWSkpICE9IDApIHsKIAkJdWJpZnNfbXNnKCJyZWNvdmVyeSBuZWVkZWQiKTsKIAkJYy0+bmVlZF9yZWNvdmVyeSA9IDE7Ci0JCWlmICghYy0+cm9fbW91bnQpIHsKLQkJCWVyciA9IHViaWZzX3JlY292ZXJfaW5sX2hlYWRzKGMsIGMtPnNidWYpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIG91dF9tYXN0ZXI7Ci0JCX0KLQl9IGVsc2UgaWYgKCFjLT5yb19tb3VudCkgeworCX0KKworCWlmIChjLT5uZWVkX3JlY292ZXJ5ICYmICFjLT5yb19tb3VudCkgeworCQllcnIgPSB1Ymlmc19yZWNvdmVyX2lubF9oZWFkcyhjLCBjLT5zYnVmKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X21hc3RlcjsKKwl9CisKKwllcnIgPSB1Ymlmc19scHRfaW5pdChjLCAxLCAhYy0+cm9fbW91bnQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X21hc3RlcjsKKworCWlmICghYy0+cm9fbW91bnQgJiYgYy0+c3BhY2VfZml4dXApIHsKKwkJZXJyID0gdWJpZnNfZml4dXBfZnJlZV9zcGFjZShjKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X21hc3RlcjsKKwl9CisKKwlpZiAoIWMtPnJvX21vdW50KSB7CiAJCS8qCiAJCSAqIFNldCB0aGUgImRpcnR5IiBmbGFnIHNvIHRoYXQgaWYgd2UgcmVib290IHVuY2xlYW5seSB3ZQogCQkgKiB3aWxsIG5vdGljZSB0aGlzIGltbWVkaWF0ZWx5IG9uIHRoZSBuZXh0IG1vdW50LgpAQCAtMTI5NywxMyArMTMxMyw5IEBACiAJCWMtPm1zdF9ub2RlLT5mbGFncyB8PSBjcHVfdG9fbGUzMihVQklGU19NU1RfRElSVFkpOwogCQllcnIgPSB1Ymlmc193cml0ZV9tYXN0ZXIoYyk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIG91dF9tYXN0ZXI7CisJCQlnb3RvIG91dF9scHQ7CiAJfQogCi0JZXJyID0gdWJpZnNfbHB0X2luaXQoYywgMSwgIWMtPnJvX21vdW50KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF9scHQ7Ci0KIAllcnIgPSBkYmdfY2hlY2tfaWR4X3NpemUoYywgYy0+Ymkub2xkX2lkeF9zeik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfbHB0OwpAQCAtMTM5NiwxMiArMTQwOCw2IEBACiAJfSBlbHNlCiAJCXViaWZzX2Fzc2VydChjLT5sc3QudGFrZW5fZW1wdHlfbGVicyA+IDApOwogCi0JaWYgKCFjLT5yb19tb3VudCAmJiBjLT5zcGFjZV9maXh1cCkgewotCQllcnIgPSB1Ymlmc19maXh1cF9mcmVlX3NwYWNlKGMpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfaW5mb3M7Ci0JfQotCiAJZXJyID0gZGJnX2NoZWNrX2ZpbGVzeXN0ZW0oYyk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfaW5mb3M7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy90bmMuYyBiL2ZzL3ViaWZzL3RuYy5jCmluZGV4IDgxMTliMWYuLjkxYjQyMTMgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3RuYy5jCisrKyBiL2ZzL3ViaWZzL3RuYy5jCkBAIC0yODc2LDEyICsyODc2LDEzIEBACiAgKi8KIHZvaWQgdWJpZnNfdG5jX2Nsb3NlKHN0cnVjdCB1Ymlmc19pbmZvICpjKQogewotCWxvbmcgY2xlYW5fZnJlZWQ7Ci0KIAl0bmNfZGVzdHJveV9jbmV4dChjKTsKIAlpZiAoYy0+enJvb3Quem5vZGUpIHsKLQkJY2xlYW5fZnJlZWQgPSB1Ymlmc19kZXN0cm95X3RuY19zdWJ0cmVlKGMtPnpyb290Lnpub2RlKTsKLQkJYXRvbWljX2xvbmdfc3ViKGNsZWFuX2ZyZWVkLCAmdWJpZnNfY2xlYW5fem5fY250KTsKKwkJbG9uZyBuOworCisJCXViaWZzX2Rlc3Ryb3lfdG5jX3N1YnRyZWUoYy0+enJvb3Quem5vZGUpOworCQluID0gYXRvbWljX2xvbmdfcmVhZCgmYy0+Y2xlYW5fem5fY250KTsKKwkJYXRvbWljX2xvbmdfc3ViKG4sICZ1Ymlmc19jbGVhbl96bl9jbnQpOwogCX0KIAlrZnJlZShjLT5nYXBfbGVicyk7CiAJa2ZyZWUoYy0+aWxlYnMpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvdWJpZnMuaCBiL2ZzL3ViaWZzL3ViaWZzLmgKaW5kZXggYTcwZDdiNC4uZjc5OTgzZCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvdWJpZnMuaAorKysgYi9mcy91Ymlmcy91Ymlmcy5oCkBAIC03MjIsMTIgKzcyMiwxNCBAQAogICogc3RydWN0IHViaWZzX2poZWFkIC0gam91cm5hbCBoZWFkLgogICogQHdidWY6IGhlYWQncyB3cml0ZS1idWZmZXIKICAqIEBidWRzX2xpc3Q6IGxpc3Qgb2YgYnVkIExFQnMgYmVsb25naW5nIHRvIHRoaXMgam91cm5hbCBoZWFkCisgKiBAZ3JvdXBlZDogbm9uLXplcm8gaWYgVUJJRlMgZ3JvdXBzIG5vZGVzIHdoZW4gd3JpdGluZyB0byB0aGlzIGpvdXJuYWwgaGVhZAogICoKICAqIE5vdGUsIHRoZSBAYnVkcyBsaXN0IGlzIHByb3RlY3RlZCBieSB0aGUgQGMtPmJ1ZHNfbG9jay4KICAqLwogc3RydWN0IHViaWZzX2poZWFkIHsKIAlzdHJ1Y3QgdWJpZnNfd2J1ZiB3YnVmOwogCXN0cnVjdCBsaXN0X2hlYWQgYnVkc19saXN0OworCXVuc2lnbmVkIGludCBncm91cGVkOjE7CiB9OwogCiAvKioKQEAgLTE3NDIsNyArMTc0NCw3IEBACiBpbnQgdWJpZnNfcmVjb3Zlcl9tYXN0ZXJfbm9kZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiBpbnQgdWJpZnNfd3JpdGVfcmN2cmRfbXN0X25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMpOwogc3RydWN0IHViaWZzX3NjYW5fbGViICp1Ymlmc19yZWNvdmVyX2xlYihzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IGxudW0sCi0JCQkJCSBpbnQgb2Zmcywgdm9pZCAqc2J1ZiwgaW50IGdyb3VwZWQpOworCQkJCQkgaW50IG9mZnMsIHZvaWQgKnNidWYsIGludCBqaGVhZCk7CiBzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnViaWZzX3JlY292ZXJfbG9nX2xlYihzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IGxudW0sCiAJCQkJCSAgICAgaW50IG9mZnMsIHZvaWQgKnNidWYpOwogaW50IHViaWZzX3JlY292ZXJfaW5sX2hlYWRzKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCB2b2lkICpzYnVmKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCmluZGV4IGFlOTBlMGYuLjRmNzY5NTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmgKQEAgLTY4Myw5ICs2ODMsMTEgQEAKIF9fU1lTQ0FMTChfX05SX3N5bmNmcywgc3lzX3N5bmNmcykKICNkZWZpbmUgX19OUl9zZXRucyAyNjgKIF9fU1lTQ0FMTChfX05SX3NldG5zLCBzeXNfc2V0bnMpCisjZGVmaW5lIF9fTlJfc2VuZG1tc2cgMjY5CitfX1NDX0NPTVAoX19OUl9zZW5kbW1zZywgc3lzX3NlbmRtbXNnLCBjb21wYXRfc3lzX3NlbmRtbXNnKQogCiAjdW5kZWYgX19OUl9zeXNjYWxscwotI2RlZmluZSBfX05SX3N5c2NhbGxzIDI2OQorI2RlZmluZSBfX05SX3N5c2NhbGxzIDI3MAogCiAvKgogICogQWxsIHN5c2NhbGxzIGJlbG93IGhlcmUgc2hvdWxkIGdvIGF3YXkgcmVhbGx5LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IGYwNGIyYTMuLmUwOGYzNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTQ2Nyw2ICs0NjcsMTcgQEAKIAl7MHgxMDAyLCAweDk2MTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk2MTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk2MTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PMnxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PMnxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjQ3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKKwl7MHgxMDAyLCAweDk2NDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sXAorCXsweDEwMDIsIDB4OTY0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjRlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKKwl7MHgxMDAyLCAweDk2NGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sXAogCXsweDEwMDIsIDB4OTcxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzg4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAogCXsweDEwMDIsIDB4OTcxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzg4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAogCXsweDEwMDIsIDB4OTcxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzg4MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFzaWNfbW1pb19ncGlvLmggYi9pbmNsdWRlL2xpbnV4L2Jhc2ljX21taW9fZ3Bpby5oCmluZGV4IDFhZTEyNzEuLjk4OTk5Y2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jhc2ljX21taW9fZ3Bpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFzaWNfbW1pb19ncGlvLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CiAKIHN0cnVjdCBiZ3Bpb19wZGF0YSB7CiAJaW50IGJhc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCBhZTkwOTFhLi4xYTIzNzIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTEyODIsOCArMTI4Miw4IEBACiAjZGVmaW5lIGJsa19nZXRfaW50ZWdyaXR5KGEpCQkJKDApCiAjZGVmaW5lIGJsa19pbnRlZ3JpdHlfY29tcGFyZShhLCBiKQkJKDApCiAjZGVmaW5lIGJsa19pbnRlZ3JpdHlfcmVnaXN0ZXIoYSwgYikJCSgwKQotI2RlZmluZSBibGtfaW50ZWdyaXR5X3VucmVnaXN0ZXIoYSkJCWRvIHsgfSB3aGlsZSAoMCk7Ci0jZGVmaW5lIGJsa19xdWV1ZV9tYXhfaW50ZWdyaXR5X3NlZ21lbnRzKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCk7CisjZGVmaW5lIGJsa19pbnRlZ3JpdHlfdW5yZWdpc3RlcihhKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBibGtfcXVldWVfbWF4X2ludGVncml0eV9zZWdtZW50cyhhLCBiKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHF1ZXVlX21heF9pbnRlZ3JpdHlfc2VnbWVudHMoYSkJCSgwKQogI2RlZmluZSBibGtfaW50ZWdyaXR5X21lcmdlX3JxKGEsIGIsIGMpCQkoMCkKICNkZWZpbmUgYmxrX2ludGVncml0eV9tZXJnZV9iaW8oYSwgYiwgYykJKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hX3JlbWFwcGluZy5oCmluZGV4IDU2MTlmODUuLmJiZDg2NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hX3JlbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hX3JlbWFwcGluZy5oCkBAIC05LDggKzksMTIgQEAKICNkZWZpbmUgVlREX1BBR0VfTUFTSwkJKCgodTY0KS0xKSA8PCBWVERfUEFHRV9TSElGVCkKICNkZWZpbmUgVlREX1BBR0VfQUxJR04oYWRkcikJKCgoYWRkcikgKyBWVERfUEFHRV9TSVpFIC0gMSkgJiBWVERfUEFHRV9NQVNLKQogCisjZGVmaW5lIFZURF9TVFJJREVfU0hJRlQgICAgICAgICg5KQorI2RlZmluZSBWVERfU1RSSURFX01BU0sgICAgICAgICAoKCh1NjQpLTEpIDw8IFZURF9TVFJJREVfU0hJRlQpCisKICNkZWZpbmUgRE1BX1BURV9SRUFEICgxKQogI2RlZmluZSBETUFfUFRFX1dSSVRFICgyKQorI2RlZmluZSBETUFfUFRFX0xBUkdFX1BBR0UgKDEgPDwgNykKICNkZWZpbmUgRE1BX1BURV9TTlAgKDEgPDwgMTEpCiAKICNkZWZpbmUgQ09OVEVYVF9UVF9NVUxUSV9MRVZFTAkwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IGM2YTg1MGEuLjQzOWIxNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlfX3UzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31QQVVTRVBBUkFNICovCiAKIAkvKiBJZiB0aGUgbGluayBpcyBiZWluZyBhdXRvLW5lZ290aWF0ZWQgKHZpYSBldGh0b29sX2NtZC5hdXRvbmVnCi0JICogYmVpbmcgdHJ1ZSkgdGhlIHVzZXIgbWF5IHNldCAnYXV0b25ldCcgaGVyZSBub24temVybyB0byBoYXZlIHRoZQorCSAqIGJlaW5nIHRydWUpIHRoZSB1c2VyIG1heSBzZXQgJ2F1dG9uZWcnIGhlcmUgbm9uLXplcm8gdG8gaGF2ZSB0aGUKIAkgKiBwYXVzZSBwYXJhbWV0ZXJzIGJlIGF1dG8tbmVnb3RpYXRlZCB0b28uICBJbiBzdWNoIGEgY2FzZSwgdGhlCiAJICoge3J4LHR4fV9wYXVzZSB2YWx1ZXMgYmVsb3cgZGV0ZXJtaW5lIHdoYXQgY2FwYWJpbGl0aWVzIGFyZQogCSAqIGFkdmVydGlzZWQuCkBAIC04MTEsNyArODExLDcgQEAKICAqIEBnZXRfdHhfY3N1bTogRGVwcmVjYXRlZCBhcyByZWR1bmRhbnQuIFJlcG9ydCB3aGV0aGVyIHRyYW5zbWl0IGNoZWNrc3VtcwogICoJYXJlIHR1cm5lZCBvbiBvciBvZmYuCiAgKiBAc2V0X3R4X2NzdW06IERlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGdlbmVyaWMgbmV0ZGV2IGZlYXR1cmVzLiAgVHVybgotICoJdHJhbnNtaXQgY2hlY2tzdW1zIG9uIG9yIG9mZi4gIFJldHVybnMgYSBlZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqCXRyYW5zbWl0IGNoZWNrc3VtcyBvbiBvciBvZmYuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgogICogQGdldF9zZzogRGVwcmVjYXRlZCBhcyByZWR1bmRhbnQuICBSZXBvcnQgd2hldGhlciBzY2F0dGVyLWdhdGhlciBpcwogICoJZW5hYmxlZC4gIAogICogQHNldF9zZzogRGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMuICBUdXJuCkBAIC0xMDg3LDcgKzEwODcsNyBAQAogLyogVGhlIGZvbGxvd2luZyBhcmUgYWxsIGludm9sdmVkIGluIGZvcmNpbmcgYSBwYXJ0aWN1bGFyIGxpbmsKICAqIG1vZGUgZm9yIHRoZSBkZXZpY2UgZm9yIHNldHRpbmcgdGhpbmdzLiAgV2hlbiBnZXR0aW5nIHRoZQogICogZGV2aWNlcyBzZXR0aW5ncywgdGhlc2UgaW5kaWNhdGUgdGhlIGN1cnJlbnQgbW9kZSBhbmQgd2hldGhlcgotICogaXQgd2FzIGZvY2VkIHVwIGludG8gdGhpcyBtb2RlIG9yIGF1dG9uZWdvdGlhdGVkLgorICogaXQgd2FzIGZvcmNlZCB1cCBpbnRvIHRoaXMgbW9kZSBvciBhdXRvbmVnb3RpYXRlZC4KICAqLwogCiAvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCwgMi41R2IsIDEwR2JFLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGM1NWQ2YjcuLjFjNzc3ODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTIwOCw2ICsyMDgsNyBAQAogI2RlZmluZSBNU19LRVJOTU9VTlQJKDE8PDIyKSAvKiB0aGlzIGlzIGEga2Vybl9tb3VudCBjYWxsICovCiAjZGVmaW5lIE1TX0lfVkVSU0lPTgkoMTw8MjMpIC8qIFVwZGF0ZSBpbm9kZSBJX3ZlcnNpb24gZmllbGQgKi8KICNkZWZpbmUgTVNfU1RSSUNUQVRJTUUJKDE8PDI0KSAvKiBBbHdheXMgcGVyZm9ybSBhdGltZSB1cGRhdGVzICovCisjZGVmaW5lIE1TX05PU0VDCSgxPDwyOCkKICNkZWZpbmUgTVNfQk9STgkJKDE8PDI5KQogI2RlZmluZSBNU19BQ1RJVkUJKDE8PDMwKQogI2RlZmluZSBNU19OT1VTRVIJKDE8PDMxKQpAQCAtNzQzLDkgKzc0NCwxMyBAQAogCiAJc3BpbmxvY2tfdAkJaV9sb2NrOwkvKiBpX2Jsb2NrcywgaV9ieXRlcywgbWF5YmUgaV9zaXplICovCiAJdW5zaWduZWQgaW50CQlpX2ZsYWdzOworCXVuc2lnbmVkIGludAkJaV9zdGF0ZTsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKKwl2b2lkCQkJKmlfc2VjdXJpdHk7CisjZW5kaWYKIAlzdHJ1Y3QgbXV0ZXgJCWlfbXV0ZXg7CiAKLQl1bnNpZ25lZCBsb25nCQlpX3N0YXRlOworCiAJdW5zaWduZWQgbG9uZwkJZGlydGllZF93aGVuOwkvKiBqaWZmaWVzIG9mIGZpcnN0IGRpcnR5aW5nICovCiAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlpX2hhc2g7CkBAIC03OTcsOSArODAyLDYgQEAKIAlhdG9taWNfdAkJaV9yZWFkY291bnQ7IC8qIHN0cnVjdCBmaWxlcyBvcGVuIFJPICovCiAjZW5kaWYKIAlhdG9taWNfdAkJaV93cml0ZWNvdW50OwotI2lmZGVmIENPTkZJR19TRUNVUklUWQotCXZvaWQJCQkqaV9zZWN1cml0eTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0wKIAlzdHJ1Y3QgcG9zaXhfYWNsCSppX2FjbDsKIAlzdHJ1Y3QgcG9zaXhfYWNsCSppX2RlZmF1bHRfYWNsOwpAQCAtMjU5MSw3ICsyNTkzLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGlub2RlX2hhc19ub194YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWlmICghaXNfc3hpZChpbm9kZS0+aV9tb2RlKSkKKwlpZiAoIWlzX3N4aWQoaW5vZGUtPmlfbW9kZSkgJiYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfTk9TRUMpKQogCQlpbm9kZS0+aV9mbGFncyB8PSBTX05PU0VDOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggYjc4OTU2Yi4uMzAwZDc1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtMTAwLDYgKzEwMCw3IEBACiAJc2VjdG9yX3Qgc3RhcnRfc2VjdDsKIAlzZWN0b3JfdCBucl9zZWN0czsKIAlzZWN0b3JfdCBhbGlnbm1lbnRfb2Zmc2V0OworCXVuc2lnbmVkIGludCBkaXNjYXJkX2FsaWdubWVudDsKIAlzdHJ1Y3QgZGV2aWNlIF9fZGV2OwogCXN0cnVjdCBrb2JqZWN0ICpob2xkZXJfZGlyOwogCWludCBwb2xpY3ksIHBhcnRubzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCmluZGV4IGIyZWVlNTguLmJmNTZiNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtMTAwMyw4ICsxMDAzLDEyIEBACiAjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9FU1MJCSgxPDwwKQogI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfSUJTUwkJKDE8PDEpCiAKLS8qIEEgbWVzaCBTVEEgc2V0cyB0aGUgRVNTIGFuZCBJQlNTIGNhcGFiaWxpdHkgYml0cyB0byB6ZXJvICovCi0jZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9JU19NQlNTKGNhcCkJXAorLyoKKyAqIEEgbWVzaCBTVEEgc2V0cyB0aGUgRVNTIGFuZCBJQlNTIGNhcGFiaWxpdHkgYml0cyB0byB6ZXJvLgorICogaG93ZXZlciwgdGhpcyBob2xkcyB0cnVlIGZvciBwMnAgcHJvYmUgcmVzcG9uc2VzIChpbiB0aGUgcDJwX2ZpbmQKKyAqIHBoYXNlKSBhcyB3ZWxsLgorICovCisjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9JU19TVEFfQlNTKGNhcCkJXAogCSghKChjYXApICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykpKQogCiAjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9DRl9QT0xMQUJMRQkoMTw8MikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmggYi9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oCmluZGV4IDcyYmZhNWEuLjdiMzE4NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaApAQCAtNjIsNiArNjIsNyBAQAogCV9fdTE2CQl0cF9tYWM7CiAJX191MTYJCXRwX25ldDsKIAlfX3UxNgkJdHBfdmxhbl90Y2k7CisJX191MTYJCXRwX3BhZGRpbmc7CiB9OwogCiAvKiBSeCByaW5nIC0gaGVhZGVyIHN0YXR1cyAqLwpAQCAtNzAsNiArNzEsNyBAQAogI2RlZmluZSBUUF9TVEFUVVNfQ09QWQkJMHgyCiAjZGVmaW5lIFRQX1NUQVRVU19MT1NJTkcJMHg0CiAjZGVmaW5lIFRQX1NUQVRVU19DU1VNTk9UUkVBRFkJMHg4CisjZGVmaW5lIFRQX1NUQVRVU19WTEFOX1ZBTElEICAgMHgxMCAvKiBhdXhkYXRhIGhhcyB2YWxpZCB0cF92bGFuX3RjaSAqLwogCiAvKiBUeCByaW5nIC0gaGVhZGVyIHN0YXR1cyAqLwogI2RlZmluZSBUUF9TVEFUVVNfQVZBSUxBQkxFCTB4MApAQCAtMTAwLDYgKzEwMiw3IEBACiAJX191MzIJCXRwX3NlYzsKIAlfX3UzMgkJdHBfbnNlYzsKIAlfX3UxNgkJdHBfdmxhbl90Y2k7CisJX191MTYJCXRwX3BhZGRpbmc7CiB9OwogCiAjZGVmaW5lIFRQQUNLRVQyX0hEUkxFTgkJKFRQQUNLRVRfQUxJR04oc2l6ZW9mKHN0cnVjdCB0cGFja2V0Ml9oZHIpKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAppbmRleCBkYzAxNjgxLi5hZmZhMjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtMjI1LDcgKzIyNSw3IEBACiB9CiAKIC8qKgotICogX192bGFuX3B1dF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZworICogdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmcKICAqIEBza2I6IHNrYnVmZiB0byB0YWcKICAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0CiAgKgpAQCAtMjM0LDggKzIzNCwxMCBAQAogICoKICAqIEZvbGxvd2luZyB0aGUgc2tiX3Vuc2hhcmUoKSBleGFtcGxlLCBpbiBjYXNlIG9mIGVycm9yLCB0aGUgY2FsbGluZyBmdW5jdGlvbgogICogZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZyZWVpbmcgdGhlIG9yaWdpbmFsIHNrYi4KKyAqCisgKiBEb2VzIG5vdCBjaGFuZ2Ugc2tiLT5wcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX3ZsYW5fcHV0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmxhbl90Y2kpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHZsYW5fdGNpKQogewogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDsKIApAQCAtMjU1LDggKzI1NywyNSBAQAogCS8qIG5vdywgdGhlIFRDSSAqLwogCXZldGgtPmhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7CiAKLQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyMVEpOworCXJldHVybiBza2I7Cit9CiAKKy8qKgorICogX192bGFuX3B1dF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZworICogQHNrYjogc2tidWZmIHRvIHRhZworICogQHZsYW5fdGNpOiBWTEFOIFRDSSB0byBpbnNlcnQKKyAqCisgKiBJbnNlcnRzIHRoZSBWTEFOIHRhZyBpbnRvIEBza2IgYXMgcGFydCBvZiB0aGUgcGF5bG9hZAorICogUmV0dXJucyBhIFZMQU4gdGFnZ2VkIHNrYi4gSWYgYSBuZXcgc2tiIGlzIGNyZWF0ZWQsIEBza2IgaXMgZnJlZWQuCisgKgorICogRm9sbG93aW5nIHRoZSBza2JfdW5zaGFyZSgpIGV4YW1wbGUsIGluIGNhc2Ugb2YgZXJyb3IsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisgKiBkb2Vzbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZnJlZWluZyB0aGUgb3JpZ2luYWwgc2tiLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX3ZsYW5fcHV0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmxhbl90Y2kpCit7CisJc2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgdmxhbl90Y2kpOworCWlmIChza2IpCisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDIxUSk7CiAJcmV0dXJuIHNrYjsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaCBiL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKaW5kZXggODE5YWNhYS4uNzE0YmEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCkBAIC04LDkgKzgsOSBAQAogICogQElSUV9XQUtFX1RIUkVBRAloYW5kbGVyIHJlcXVlc3RzIHRvIHdha2UgdGhlIGhhbmRsZXIgdGhyZWFkCiAgKi8KIGVudW0gaXJxcmV0dXJuIHsKLQlJUlFfTk9ORSwKLQlJUlFfSEFORExFRCwKLQlJUlFfV0FLRV9USFJFQUQsCisJSVJRX05PTkUJCT0gKDAgPDwgMCksCisJSVJRX0hBTkRMRUQJCT0gKDEgPDwgMCksCisJSVJRX1dBS0VfVEhSRUFECQk9ICgxIDw8IDEpLAogfTsKIAogdHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5fdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaAppbmRleCBkNDBiZmExLi5lNWYyMWQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvcGh5c21hcC5oCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KIAogc3RydWN0IG1hcF9pbmZvOworc3RydWN0IHBsYXRmb3JtX2RldmljZTsKIAogc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSB7CiAJdW5zaWduZWQgaW50CQl3aWR0aDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGNhMzMzZTcuLjU0YjhiNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMjU1NSw3ICsyNTU1LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBrb2JqX25zX3R5cGVfb3BlcmF0aW9ucyBuZXRfbnNfdHlwZV9vcGVyYXRpb25zOwogCi1leHRlcm4gY2hhciAqbmV0ZGV2X2RyaXZlcm5hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqYnVmZmVyLCBpbnQgbGVuKTsKK2V4dGVybiBjb25zdCBjaGFyICpuZXRkZXZfZHJpdmVybmFtZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIHZvaWQgbGlua3dhdGNoX3J1bl9xdWV1ZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCmluZGV4IDUwY2RjMjUuLjBkM2RkNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKQEAgLTE4LDYgKzE4LDkgQEAKIAkvKiA+PSB0aGlzIGluZGljYXRlcyByZXBseSBkaXJlY3Rpb24gKi8KIAlJUF9DVF9JU19SRVBMWSwKIAorCUlQX0NUX0VTVEFCTElTSEVEX1JFUExZID0gSVBfQ1RfRVNUQUJMSVNIRUQgKyBJUF9DVF9JU19SRVBMWSwKKwlJUF9DVF9SRUxBVEVEX1JFUExZID0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZLAorCUlQX0NUX05FV19SRVBMWSA9IElQX0NUX05FVyArIElQX0NUX0lTX1JFUExZLAkKIAkvKiBOdW1iZXIgb2YgZGlzdGluY3QgSVBfQ1QgdHlwZXMgKG5vIE5FVyBpbiByZXBseSBkaXJuKS4gKi8KIAlJUF9DVF9OVU1CRVIgPSBJUF9DVF9JU19SRVBMWSAqIDIgLSAxCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCAzNDEyNjg0Li5lMDc4NmUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMTM3LDE0ICsxMzcsMTQgQEAKICAqCiAgKiBzdHJ1Y3QgcmVhZF9mb3JtYXQgewogICoJeyB1NjQJCXZhbHVlOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECisgKgkgIHsgdTY0CQl0aW1lX3J1bm5pbmc7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCiAgKgkgIHsgdTY0CQlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKICAqCX0gJiYgIVBFUkZfRk9STUFUX0dST1VQCiAgKgogICoJeyB1NjQJCW5yOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECisgKgkgIHsgdTY0CQl0aW1lX3J1bm5pbmc7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCiAgKgkgIHsgdTY0CQl2YWx1ZTsKICAqCSAgICB7IHU2NAlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKICAqCSAgfQkJY250cltucl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMmE4NjIxYy4uYTgzN2IyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTA2Myw2ICsxMDYzLDcgQEAKICAqLwogI2RlZmluZSBXRl9TWU5DCQkweDAxCQkvKiB3YWtlciBnb2VzIHRvIHNsZWVwIGFmdGVyIHdha3VwICovCiAjZGVmaW5lIFdGX0ZPUksJCTB4MDIJCS8qIGNoaWxkIHdha2V1cCBhZnRlciBmb3JrICovCisjZGVmaW5lIFdGX01JR1JBVEVECTB4MDQJCS8qIGludGVybmFsIHVzZSwgdGFzayBnb3QgbWlncmF0ZWQgKi8KIAogI2RlZmluZSBFTlFVRVVFX1dBS0VVUAkJMQogI2RlZmluZSBFTlFVRVVFX0hFQUQJCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggZTk4MTE4OS4uYzZkYjlmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIHNlcXVlbmNlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggZThiNzhjZS4uYzBhNGYzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0xMjU2LDYgKzEyNTYsMTEgQEAKIAlza2ItPnRhaWwgKz0gbGVuOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X21hY19sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2ItPm1hY19sZW4gPSBza2ItPm5ldHdvcmtfaGVhZGVyIC0gc2tiLT5tYWNfaGVhZGVyOworfQorCiAjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl90cmFuc3BvcnRfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaCBiL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCmluZGV4IDhjMGUzNDkuLjQ0NTcwMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCkBAIC0yNCw2ICsyNCw3IEBACiAKIGV4dGVybiB2b2lkIHN3aW90bGJfaW5pdChpbnQgdmVyYm9zZSk7CiBleHRlcm4gdm9pZCBzd2lvdGxiX2luaXRfd2l0aF90YmwoY2hhciAqdGxiLCB1bnNpZ25lZCBsb25nIG5zbGFicywgaW50IHZlcmJvc2UpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3dpb2x0Yl9ucl90Ymwodm9pZCk7CiAKIC8qCiAgKiBFbnVtZXJhdGlvbiBmb3Igc3luYyB0YXJnZXRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIGIvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAppbmRleCA1YjA3NzkyLi5mZjdkYzA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKQEAgLTc2LDcgKzc2LDcgQEAKICAqIAl0dHkgZGV2aWNlLiAgSXQgaXMgc29sZWx5IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgbGluZQogICogCWRpc2NpcGxpbmUgdG8gaGFuZGxlIHBvbGwgcmVxdWVzdHMuCiAgKgotICogdW5zaWduZWQgaW50ICgqcmVjZWl2ZV9idWYpKHN0cnVjdCB0dHlfc3RydWN0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAorICogdm9pZAkoKnJlY2VpdmVfYnVmKShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKICAqIAkJICAgICAgIGNoYXIgKmZwLCBpbnQgY291bnQpOwogICoKICAqIAlUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgbG93LWxldmVsIHR0eSBkcml2ZXIgdG8gc2VuZApAQCAtODQsOCArODQsNyBAQAogICogCXByb2Nlc3NpbmcuICA8Y3A+IGlzIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIGlucHV0CiAgKiAJY2hhcmFjdGVyIHJlY2VpdmVkIGJ5IHRoZSBkZXZpY2UuICA8ZnA+IGlzIGEgcG9pbnRlciB0byBhCiAgKiAJcG9pbnRlciBvZiBmbGFnIGJ5dGVzIHdoaWNoIGluZGljYXRlIHdoZXRoZXIgYSBjaGFyYWN0ZXIgd2FzCi0gKiAJcmVjZWl2ZWQgd2l0aCBhIHBhcml0eSBlcnJvciwgZXRjLiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgYnl0ZXMKLSAqIAlyZWNlaXZlZC4KKyAqIAlyZWNlaXZlZCB3aXRoIGEgcGFyaXR5IGVycm9yLCBldGMuCiAgKiAKICAqIHZvaWQJKCp3cml0ZV93YWtldXApKHN0cnVjdCB0dHlfc3RydWN0ICopOwogICoKQEAgLTE0MSw4ICsxNDAsOCBAQAogCS8qCiAJICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgY2FsbGVkIGZyb20gYmVsb3cuCiAJICovCi0JdW5zaWduZWQgaW50ICgqcmVjZWl2ZV9idWYpKHN0cnVjdCB0dHlfc3RydWN0ICosCi0JCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCk7CisJdm9pZAkoKnJlY2VpdmVfYnVmKShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKKwkJCSAgICAgICBjaGFyICpmcCwgaW50IGNvdW50KTsKIAl2b2lkCSgqd3JpdGVfd2FrZXVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKIAl2b2lkCSgqZGNkX2NoYW5nZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgdW5zaWduZWQgaW50LAogCQkJCXN0cnVjdCBwcHNfZXZlbnRfdGltZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCmluZGV4IDcxNjkzZDQuLjE3ZGYzNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaApAQCAtNjIsNyArNjIsOSBAQAogCVVTX0ZMQUcoTk9fUkVBRF9ESVNDX0lORk8sCTB4MDAwNDAwMDApCQlcCiAJCS8qIGNhbm5vdCBoYW5kbGUgUkVBRF9ESVNDX0lORk8gKi8JCVwKIAlVU19GTEFHKE5PX1JFQURfQ0FQQUNJVFlfMTYsCTB4MDAwODAwMDApCQlcCi0JCS8qIGNhbm5vdCBoYW5kbGUgUkVBRF9DQVBBQ0lUWV8xNiAqLworCQkvKiBjYW5ub3QgaGFuZGxlIFJFQURfQ0FQQUNJVFlfMTYgKi8JCVwKKwlVU19GTEFHKElOSVRJQUxfUkVBRDEwLAkweDAwMTAwMDAwKQkJCVwKKwkJLyogSW5pdGlhbCBSRUFEKDEwKSAoYW5kIG90aGVycykgbXVzdCBiZSByZXRyaWVkICovCiAKICNkZWZpbmUgVVNfRkxBRyhuYW1lLCB2YWx1ZSkJVVNfRkxfIyNuYW1lID0gdmFsdWUgLAogZW51bSB7IFVTX0RPX0FMTF9GTEFHUyB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKaW5kZXggYWZmNWI0Zi4uNzEwODg1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCkBAIC01MSw2ICs1MSwxMyBAQAogICoJVGhpcyByZS1lbmFibGVzIGNhbGxiYWNrczsgaXQgcmV0dXJucyAiZmFsc2UiIGlmIHRoZXJlIGFyZSBwZW5kaW5nCiAgKglidWZmZXJzIGluIHRoZSBxdWV1ZSwgdG8gZGV0ZWN0IGEgcG9zc2libGUgcmFjZSBiZXR3ZWVuIHRoZSBkcml2ZXIKICAqCWNoZWNraW5nIGZvciBtb3JlIHdvcmssIGFuZCBlbmFibGluZyBjYWxsYmFja3MuCisgKiB2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWQ6IHJlc3RhcnQgY2FsbGJhY2tzIGFmdGVyIGRpc2FibGVfY2IuCisgKgl2cTogdGhlIHN0cnVjdCB2aXJ0cXVldWUgd2UncmUgdGFsa2luZyBhYm91dC4KKyAqCVRoaXMgcmUtZW5hYmxlcyBjYWxsYmFja3MgYnV0IGhpbnRzIHRvIHRoZSBvdGhlciBzaWRlIHRvIGRlbGF5CisgKglpbnRlcnJ1cHRzIHVudGlsIG1vc3Qgb2YgdGhlIGF2YWlsYWJsZSBidWZmZXJzIGhhdmUgYmVlbiBwcm9jZXNzZWQ7CisgKglpdCByZXR1cm5zICJmYWxzZSIgaWYgdGhlcmUgYXJlIG1hbnkgcGVuZGluZyBidWZmZXJzIGluIHRoZSBxdWV1ZSwKKyAqCXRvIGRldGVjdCBhIHBvc3NpYmxlIHJhY2UgYmV0d2VlbiB0aGUgZHJpdmVyIGNoZWNraW5nIGZvciBtb3JlIHdvcmssCisgKglhbmQgZW5hYmxpbmcgY2FsbGJhY2tzLgogICogdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmOiBkZXRhY2ggZmlyc3QgdW51c2VkIGJ1ZmZlcgogICogCXZxOiB0aGUgc3RydWN0IHZpcnRxdWV1ZSB3ZSdyZSB0YWxraW5nIGFib3V0LgogICogCVJldHVybnMgTlVMTCBvciB0aGUgImRhdGEiIHRva2VuIGhhbmRlZCB0byBhZGRfYnVmCkBAIC04Niw2ICs5Myw4IEBACiAKIGJvb2wgdmlydHF1ZXVlX2VuYWJsZV9jYihzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7CiAKK2Jvb2wgdmlydHF1ZXVlX2VuYWJsZV9jYl9kZWxheWVkKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKKwogdm9pZCAqdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAppbmRleCBlNjhiNDM5Li4yNzdjNGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKQEAgLTEsNyArMSwzMCBAQAogI2lmbmRlZiBfTElOVVhfVklSVElPXzlQX0gKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT185UF9ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAotICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4gKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggYTUwZWNkMS4uNjUyZGM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtMSw3ICsxLDMwIEBACiAjaWZuZGVmIF9MSU5VWF9WSVJUSU9fQkFMTE9PTl9ICiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fQkFMTE9PTl9ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAotICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4gKi8KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCmluZGV4IDE2NzcyMGQuLmUwZWRiNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCkBAIC0xLDcgKzEsMzAgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19CTEtfSAogI2RlZmluZSBfTElOVVhfVklSVElPX0JMS19ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAotICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4gKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCmluZGV4IDgwMDYxN2IuLjM5Yzg4YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCkBAIC0xLDcgKzEsMzAgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19DT05GSUdfSAogI2RlZmluZSBfTElOVVhfVklSVElPX0NPTkZJR19ICiAvKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KLSAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJQk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLiAqLwogCiAvKiBWaXJ0aW8gZGV2aWNlcyB1c2UgYSBzdGFuZGFyZGl6ZWQgY29uZmlndXJhdGlvbiBzcGFjZSB0byBkZWZpbmUgdGhlaXIKICAqIGZlYXR1cmVzIGFuZCBwYXNzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIGJ1dCBlYWNoIGltcGxlbWVudGF0aW9uIGNhbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IGU0ZDMzMzUuLmJkZjRiMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTUsNyArNSwzMSBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIC8qCiAgKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KLSAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCisgKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzOgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIwMDksIDIwMTAsIDIwMTEKICAqIENvcHlyaWdodCAoQykgQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4sIDIwMDksIDIwMTAsIDIwMTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2lkcy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9faWRzLmgKaW5kZXggMDY2NjBjMC4uODViYjBiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9faWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9faWRzLmgKQEAgLTUsNyArNSwyOSBAQAogICoKICAqIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KLSAqLworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJQk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLiAqLwogCiAjZGVmaW5lIFZJUlRJT19JRF9ORVQJCTEgLyogdmlydGlvIG5ldCAqLwogI2RlZmluZSBWSVJUSU9fSURfQkxPQ0sJCTIgLyogdmlydGlvIGJsb2NrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IDA4NWU0MjIuLjEzNjA0MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0xLDcgKzEsMzAgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19ORVRfSAogI2RlZmluZSBfTElOVVhfVklSVElPX05FVF9ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAotICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4gKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19wY2kuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCmluZGV4IDlhM2Q3YzQuLmVhNjZmM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCkBAIC0xMSw2ICsxMSwyOSBAQAogICoKICAqIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIF9MSU5VWF9WSVJUSU9fUENJX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaAppbmRleCBlNGQxNDRiLi40YTMyY2I2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcmluZy5oCkBAIC03LDYgKzcsMjkgQEAKICAqIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KICAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCiAgKiBDb3B5cmlnaHQgUnVzdHkgUnVzc2VsbCBJQk0gQ29ycG9yYXRpb24gMjAwNy4gKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCkBAIC0yOSw2ICs1MiwxMiBAQAogLyogV2Ugc3VwcG9ydCBpbmRpcmVjdCBidWZmZXIgZGVzY3JpcHRvcnMgKi8KICNkZWZpbmUgVklSVElPX1JJTkdfRl9JTkRJUkVDVF9ERVNDCTI4CiAKKy8qIFRoZSBHdWVzdCBwdWJsaXNoZXMgdGhlIHVzZWQgaW5kZXggZm9yIHdoaWNoIGl0IGV4cGVjdHMgYW4gaW50ZXJydXB0CisgKiBhdCB0aGUgZW5kIG9mIHRoZSBhdmFpbCByaW5nLiBIb3N0IHNob3VsZCBpZ25vcmUgdGhlIGF2YWlsLT5mbGFncyBmaWVsZC4gKi8KKy8qIFRoZSBIb3N0IHB1Ymxpc2hlcyB0aGUgYXZhaWwgaW5kZXggZm9yIHdoaWNoIGl0IGV4cGVjdHMgYSBraWNrCisgKiBhdCB0aGUgZW5kIG9mIHRoZSB1c2VkIHJpbmcuIEd1ZXN0IHNob3VsZCBpZ25vcmUgdGhlIHVzZWQtPmZsYWdzIGZpZWxkLiAqLworI2RlZmluZSBWSVJUSU9fUklOR19GX0VWRU5UX0lEWAkJMjkKKwogLyogVmlydGlvIHJpbmcgZGVzY3JpcHRvcnM6IDE2IGJ5dGVzLiAgVGhlc2UgY2FuIGNoYWluIHRvZ2V0aGVyIHZpYSAibmV4dCIuICovCiBzdHJ1Y3QgdnJpbmdfZGVzYyB7CiAJLyogQWRkcmVzcyAoZ3Vlc3QtcGh5c2ljYWwpLiAqLwpAQCAtODMsNiArMTEyLDcgQEAKICAqCV9fdTE2IGF2YWlsX2ZsYWdzOwogICoJX191MTYgYXZhaWxfaWR4OwogICoJX191MTYgYXZhaWxhYmxlW251bV07CisgKglfX3UxNiB1c2VkX2V2ZW50X2lkeDsKICAqCiAgKgkvLyBQYWRkaW5nIHRvIHRoZSBuZXh0IGFsaWduIGJvdW5kYXJ5LgogICoJY2hhciBwYWRbXTsKQEAgLTkxLDggKzEyMSwxNCBAQAogICoJX191MTYgdXNlZF9mbGFnczsKICAqCV9fdTE2IHVzZWRfaWR4OwogICoJc3RydWN0IHZyaW5nX3VzZWRfZWxlbSB1c2VkW251bV07CisgKglfX3UxNiBhdmFpbF9ldmVudF9pZHg7CiAgKiB9OwogICovCisvKiBXZSBwdWJsaXNoIHRoZSB1c2VkIGV2ZW50IGluZGV4IGF0IHRoZSBlbmQgb2YgdGhlIGF2YWlsYWJsZSByaW5nLCBhbmQgdmljZQorICogdmVyc2EuIFRoZXkgYXJlIGF0IHRoZSBlbmQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqLworI2RlZmluZSB2cmluZ191c2VkX2V2ZW50KHZyKSAoKHZyKS0+YXZhaWwtPnJpbmdbKHZyKS0+bnVtXSkKKyNkZWZpbmUgdnJpbmdfYXZhaWxfZXZlbnQodnIpICgqKF9fdTE2ICopJih2ciktPnVzZWQtPnJpbmdbKHZyKS0+bnVtXSkKKwogc3RhdGljIGlubGluZSB2b2lkIHZyaW5nX2luaXQoc3RydWN0IHZyaW5nICp2ciwgdW5zaWduZWQgaW50IG51bSwgdm9pZCAqcCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7CkBAIC0xMDcsNyArMTQzLDIxIEBACiB7CiAJcmV0dXJuICgoc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjKSAqIG51bSArIHNpemVvZihfX3UxNikgKiAoMiArIG51bSkKIAkJICsgYWxpZ24gLSAxKSAmIH4oYWxpZ24gLSAxKSkKLQkJKyBzaXplb2YoX191MTYpICogMiArIHNpemVvZihzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSAqIG51bTsKKwkJKyBzaXplb2YoX191MTYpICogMyArIHNpemVvZihzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSAqIG51bTsKK30KKworLyogVGhlIGZvbGxvd2luZyBpcyB1c2VkIHdpdGggVVNFRF9FVkVOVF9JRFggYW5kIEFWQUlMX0VWRU5UX0lEWCAqLworLyogQXNzdW1pbmcgYSBnaXZlbiBldmVudF9pZHggdmFsdWUgZnJvbSB0aGUgb3RoZXIgc2l6ZSwgaWYKKyAqIHdlIGhhdmUganVzdCBpbmNyZW1lbnRlZCBpbmRleCBmcm9tIG9sZCB0byBuZXdfaWR4LAorICogc2hvdWxkIHdlIHRyaWdnZXIgYW4gZXZlbnQ/ICovCitzdGF0aWMgaW5saW5lIGludCB2cmluZ19uZWVkX2V2ZW50KF9fdTE2IGV2ZW50X2lkeCwgX191MTYgbmV3X2lkeCwgX191MTYgb2xkKQoreworCS8qIE5vdGU6IFhlbiBoYXMgc2ltaWxhciBsb2dpYyBmb3Igbm90aWZpY2F0aW9uIGhvbGQtb2ZmCisJICogaW4gaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvL3JpbmcuaCB3aXRoIHJlcV9ldmVudCBhbmQgcmVxX3Byb2QKKwkgKiBjb3JyZXNwb25kaW5nIHRvIGV2ZW50X2lkeCArIDEgYW5kIG5ld19pZHggcmVzcGVjdGl2ZWx5LgorCSAqIE5vdGUgYWxzbyB0aGF0IHJlcV9ldmVudCBhbmQgcmVxX3Byb2QgaW4gWGVuIHN0YXJ0IGF0IDEsCisJICogZXZlbnQgaW5kZXhlcyBpbiB2aXJ0aW8gc3RhcnQgYXQgMC4gKi8KKwlyZXR1cm4gKF9fdTE2KShuZXdfaWR4IC0gZXZlbnRfaWR4IC0gMSkgPCAoX191MTYpKG5ld19pZHggLSBvbGQpOwogfQogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCmluZGV4IDkzZTk2ZmIuLmM3YzQwZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKQEAgLTEyOCw4ICsxMjgsOCBAQAogCXN0cnVjdCBtdXRleCAqbG9jazsKIH07CiAKLSNkZWZpbmUgbWVkaWFfZW50aXR5X3RvX3ZpZGVvX2RldmljZShlbnRpdHkpIFwKLQljb250YWluZXJfb2YoZW50aXR5LCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBlbnRpdHkpCisjZGVmaW5lIG1lZGlhX2VudGl0eV90b192aWRlb19kZXZpY2UoX19lKSBcCisJY29udGFpbmVyX29mKF9fZSwgc3RydWN0IHZpZGVvX2RldmljZSwgZW50aXR5KQogLyogZGV2IHRvIHZpZGVvLWRldmljZSAqLwogI2RlZmluZSB0b192aWRlb19kZXZpY2UoY2QpIGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgZGV2KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaCBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCmluZGV4IDJiNDQ3NjQuLmRkNjg0N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCkBAIC0xMDcsNiArMTA3LDcgQEAKIAlTQ1RQX0NNRF9VUERBVEVfSU5JVFRBRywgLyogVXBkYXRlIHBlZXIgaW5pdHRhZyAqLwogCVNDVFBfQ01EX1NFTkRfTVNHLAkgLyogU2VuZCB0aGUgd2hvbGUgdXNlIG1lc3NhZ2UgKi8KIAlTQ1RQX0NNRF9TRU5EX05FWFRfQVNDT05GLCAvKiBTZW5kIHRoZSBuZXh0IEFTQ09ORiBhZnRlciBBQ0sgKi8KKwlTQ1RQX0NNRF9QVVJHRV9BU0NPTkZfUVVFVUUsIC8qIFB1cmdlIGFsbCBhc2NvbmYgcXVldWVzLiovCiAJU0NUUF9DTURfTEFTVAogfSBzY3RwX3ZlcmJfdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCA3OTVmNDg4Li43ZGYzMjdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtMTk5Myw3ICsxOTkzLDcgQEAKIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX2Fzc29jX2xvb2t1cF9hc2NvbmZfYWNrKAogCQkJCQljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkJX19iZTMyIHNlcmlhbCk7Ci0KK3ZvaWQgc2N0cF9hc2NvbmZfcXVldWVfdGVhcmRvd24oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwogCiBpbnQgc2N0cF9jbXBfYWRkcl9leGFjdChjb25zdCB1bmlvbiBzY3RwX2FkZHIgKnNzMSwKIAkJCWNvbnN0IHVuaW9uIHNjdHBfYWRkciAqc3MyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL25ldC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbmV0LmgKaW5kZXggNWYyNDdmNS4uZjk5NjQ1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbmV0LmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbmV0LmgKQEAgLTEyLDIyICsxMiwyNCBAQAogVFJBQ0VfRVZFTlQobmV0X2Rldl94bWl0LAogCiAJVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIGludCByYyksCisJCSBpbnQgcmMsCisJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgdW5zaWduZWQgaW50IHNrYl9sZW4pLAogCi0JVFBfQVJHUyhza2IsIHJjKSwKKwlUUF9BUkdTKHNrYiwgcmMsIGRldiwgc2tiX2xlbiksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKAl2b2lkICosCQlza2JhZGRyCQkpCiAJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJbGVuCQkpCiAJCV9fZmllbGQoCWludCwJCXJjCQkpCi0JCV9fc3RyaW5nKAluYW1lLAkJc2tiLT5kZXYtPm5hbWUJKQorCQlfX3N0cmluZygJbmFtZSwJCWRldi0+bmFtZQkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2VudHJ5LT5za2JhZGRyID0gc2tiOwotCQlfX2VudHJ5LT5sZW4gPSBza2ItPmxlbjsKKwkJX19lbnRyeS0+bGVuID0gc2tiX2xlbjsKIAkJX19lbnRyeS0+cmMgPSByYzsKLQkJX19hc3NpZ25fc3RyKG5hbWUsIHNrYi0+ZGV2LT5uYW1lKTsKKwkJX19hc3NpZ25fc3RyKG5hbWUsIGRldi0+bmFtZSk7CiAJKSwKIAogCVRQX3ByaW50aygiZGV2PSVzIHNrYmFkZHI9JXAgbGVuPSV1IHJjPSVkIiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvY29yZS5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKaW5kZXggZDg2M2IzYy4uOWVmZTcxMCAxMDA2NDQKLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmMKKysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKQEAgLTc0MDIsMjYgKzc0MDIsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9jZ3JvdXBfbW92ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgdm9pZAorcGVyZl9jZ3JvdXBfYXR0YWNoX3Rhc2soc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXRhc2tfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfY2dyb3VwX21vdmUsIHRhc2spOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX2Nncm91cF9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAotCQlzdHJ1Y3QgY2dyb3VwICpvbGRfY2dycCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQlib29sIHRocmVhZGdyb3VwKQotewotCXBlcmZfY2dyb3VwX21vdmUodGFzayk7Ci0JaWYgKHRocmVhZGdyb3VwKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqYzsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjLCAmdGFzay0+dGhyZWFkX2dyb3VwLCB0aHJlYWRfZ3JvdXApIHsKLQkJCXBlcmZfY2dyb3VwX21vdmUoYyk7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBwZXJmX2Nncm91cF9leGl0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCwKIAkJc3RydWN0IGNncm91cCAqb2xkX2NncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKQEAgLTc0MzMsNyArNzQxOSw3IEBACiAJaWYgKCEodGFzay0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkKIAkJcmV0dXJuOwogCi0JcGVyZl9jZ3JvdXBfbW92ZSh0YXNrKTsKKwlwZXJmX2Nncm91cF9hdHRhY2hfdGFzayhjZ3JwLCB0YXNrKTsKIH0KIAogc3RydWN0IGNncm91cF9zdWJzeXMgcGVyZl9zdWJzeXMgPSB7CkBAIC03NDQyLDYgKzc0MjgsNiBAQAogCS5jcmVhdGUJCT0gcGVyZl9jZ3JvdXBfY3JlYXRlLAogCS5kZXN0cm95CT0gcGVyZl9jZ3JvdXBfZGVzdHJveSwKIAkuZXhpdAkJPSBwZXJmX2Nncm91cF9leGl0LAotCS5hdHRhY2gJCT0gcGVyZl9jZ3JvdXBfYXR0YWNoLAorCS5hdHRhY2hfdGFzawk9IHBlcmZfY2dyb3VwX2F0dGFjaF90YXNrLAogfTsKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX1BFUkYgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IDkwY2I1NWYuLjQ3MGQwOGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMTMzLDEyICsxMzMsNiBAQAogCQlzd2l0Y2ggKHJlcykgewogCQljYXNlIElSUV9XQUtFX1RIUkVBRDoKIAkJCS8qCi0JCQkgKiBTZXQgcmVzdWx0IHRvIGhhbmRsZWQgc28gdGhlIHNwdXJpb3VzIGNoZWNrCi0JCQkgKiBkb2VzIG5vdCB0cmlnZ2VyLgotCQkJICovCi0JCQlyZXMgPSBJUlFfSEFORExFRDsKLQotCQkJLyoKIAkJCSAqIENhdGNoIGRyaXZlcnMgd2hpY2ggcmV0dXJuIFdBS0VfVEhSRUFEIGJ1dAogCQkJICogZGlkIG5vdCBzZXQgdXAgYSB0aHJlYWQgZnVuY3Rpb24KIAkJCSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pcnFkZXNjLmMgYi9rZXJuZWwvaXJxL2lycWRlc2MuYwppbmRleCA4ODZlODAzLi40YzYwYTUwIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2lycWRlc2MuYworKysgYi9rZXJuZWwvaXJxL2lycWRlc2MuYwpAQCAtMjU3LDEzICsyNTcsMTEgQEAKIAljb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2MpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJZGVzY1tpXS5pcnFfZGF0YS5pcnEgPSBpOwotCQlkZXNjW2ldLmlycV9kYXRhLmNoaXAgPSAmbm9faXJxX2NoaXA7CiAJCWRlc2NbaV0ua3N0YXRfaXJxcyA9IGFsbG9jX3BlcmNwdSh1bnNpZ25lZCBpbnQpOwotCQlpcnFfc2V0dGluZ3NfY2xyX2FuZF9zZXQoZGVzYywgfjAsIF9JUlFfREVGQVVMVF9JTklUX0ZMQUdTKTsKLQkJYWxsb2NfbWFza3MoZGVzYyArIGksIEdGUF9LRVJORUwsIG5vZGUpOwotCQlkZXNjX3NtcF9pbml0KGRlc2MgKyBpLCBub2RlKTsKKwkJYWxsb2NfbWFza3MoJmRlc2NbaV0sIEdGUF9LRVJORUwsIG5vZGUpOworCQlyYXdfc3Bpbl9sb2NrX2luaXQoJmRlc2NbaV0ubG9jayk7CiAJCWxvY2tkZXBfc2V0X2NsYXNzKCZkZXNjW2ldLmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKKwkJZGVzY19zZXRfZGVmYXVsdHMoaSwgJmRlc2NbaV0sIG5vZGUpOwogCX0KIAlyZXR1cm4gYXJjaF9lYXJseV9pcnFfaW5pdCgpOwogfQpAQCAtMzQ2LDYgKzM0NCwxMiBAQAogCWlmICghY250KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChpcnEgPj0gMCkgeworCQlpZiAoZnJvbSA+IGlycSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlmcm9tID0gaXJxOworCX0KKwogCW11dGV4X2xvY2soJnNwYXJzZV9pcnFfbG9jayk7CiAKIAlzdGFydCA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKGFsbG9jYXRlZF9pcnFzLCBJUlFfQklUTUFQX0JJVFMsCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCBmN2NlMDAyLi5kNjRiYWZiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTcyMywxMyArNzIzLDE2IEBACiAgKiBjb250ZXh0LiBTbyB3ZSBuZWVkIHRvIGRpc2FibGUgYmggaGVyZSB0byBhdm9pZCBkZWFkbG9ja3MgYW5kIG90aGVyCiAgKiBzaWRlIGVmZmVjdHMuCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgaXJxcmV0dXJuX3QKIGlycV9mb3JjZWRfdGhyZWFkX2ZuKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogeworCWlycXJldHVybl90IHJldDsKKwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlhY3Rpb24tPnRocmVhZF9mbihhY3Rpb24tPmlycSwgYWN0aW9uLT5kZXZfaWQpOworCXJldCA9IGFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CiAJaXJxX2ZpbmFsaXplX29uZXNob3QoZGVzYywgYWN0aW9uLCBmYWxzZSk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTczNywxMCArNzQwLDE0IEBACiAgKiBwcmVlbXRpYmxlIC0gbWFueSBvZiB0aGVtIG5lZWQgdG8gc2xlZXAgYW5kIHdhaXQgZm9yIHNsb3cgYnVzc2VzIHRvCiAgKiBjb21wbGV0ZS4KICAqLwotc3RhdGljIHZvaWQgaXJxX3RocmVhZF9mbihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKK3N0YXRpYyBpcnFyZXR1cm5fdCBpcnFfdGhyZWFkX2ZuKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogewotCWFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CisJaXJxcmV0dXJuX3QgcmV0OworCisJcmV0ID0gYWN0aW9uLT50aHJlYWRfZm4oYWN0aW9uLT5pcnEsIGFjdGlvbi0+ZGV2X2lkKTsKIAlpcnFfZmluYWxpemVfb25lc2hvdChkZXNjLCBhY3Rpb24sIGZhbHNlKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtNzUzLDcgKzc2MCw4IEBACiAJfTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24gPSBkYXRhOwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGFjdGlvbi0+aXJxKTsKLQl2b2lkICgqaGFuZGxlcl9mbikoc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOworCWlycXJldHVybl90ICgqaGFuZGxlcl9mbikoc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIAlpbnQgd2FrZTsKIAogCWlmIChmb3JjZV9pcnF0aHJlYWRzICYgdGVzdF9iaXQoSVJRVEZfRk9SQ0VEX1RIUkVBRCwKQEAgLTc4Myw4ICs3OTEsMTIgQEAKIAkJCWRlc2MtPmlzdGF0ZSB8PSBJUlFTX1BFTkRJTkc7CiAJCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJfSBlbHNlIHsKKwkJCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CisKIAkJCXJhd19zcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOwotCQkJaGFuZGxlcl9mbihkZXNjLCBhY3Rpb24pOworCQkJYWN0aW9uX3JldCA9IGhhbmRsZXJfZm4oZGVzYywgYWN0aW9uKTsKKwkJCWlmICghbm9pcnFkZWJ1ZykKKwkJCQlub3RlX2ludGVycnVwdChhY3Rpb24tPmlycSwgZGVzYywgYWN0aW9uX3JldCk7CiAJCX0KIAogCQl3YWtlID0gYXRvbWljX2RlY19hbmRfdGVzdCgmZGVzYy0+dGhyZWFkc19hY3RpdmUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9zcHVyaW91cy5jIGIva2VybmVsL2lycS9zcHVyaW91cy5jCmluZGV4IGRmYmQ1NTAuLmFhNTdkNWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYworKysgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKQEAgLTE2Nyw2ICsxNjcsMTMgQEAKIAkJICBqaWZmaWVzICsgUE9MTF9TUFVSSU9VU19JUlFfSU5URVJWQUwpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBiYWRfYWN0aW9uX3JldChpcnFyZXR1cm5fdCBhY3Rpb25fcmV0KQoreworCWlmIChsaWtlbHkoYWN0aW9uX3JldCA8PSAoSVJRX0hBTkRMRUQgfCBJUlFfV0FLRV9USFJFQUQpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBJZiA5OSw5MDAgb2YgdGhlIHByZXZpb3VzIDEwMCwwMDAgaW50ZXJydXB0cyBoYXZlIG5vdCBiZWVuIGhhbmRsZWQKICAqIHRoZW4gYXNzdW1lIHRoYXQgdGhlIElSUSBpcyBzdHVjayBpbiBzb21lIG1hbm5lci4gRHJvcCBhIGRpYWdub3N0aWMKQEAgLTE4Miw3ICsxODksNyBAQAogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGFjdGlvbl9yZXQgIT0gSVJRX0hBTkRMRUQgJiYgYWN0aW9uX3JldCAhPSBJUlFfTk9ORSkgeworCWlmIChiYWRfYWN0aW9uX3JldChhY3Rpb25fcmV0KSkgewogCQlwcmludGsoS0VSTl9FUlIgImlycSBldmVudCAlZDogYm9ndXMgcmV0dXJuIHZhbHVlICV4XG4iLAogCQkJCWlycSwgYWN0aW9uX3JldCk7CiAJfSBlbHNlIHsKQEAgLTIwMSwxMCArMjA4LDExIEBACiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwogCXdoaWxlIChhY3Rpb24pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJbPCVwPl0iLCBhY3Rpb24tPmhhbmRsZXIpOwotCQlwcmludF9zeW1ib2woIiAoJXMpIiwKLQkJCSh1bnNpZ25lZCBsb25nKWFjdGlvbi0+aGFuZGxlcik7Ci0JCXByaW50aygiXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJbPCVwPl0gJXBmIiwgYWN0aW9uLT5oYW5kbGVyLCBhY3Rpb24tPmhhbmRsZXIpOworCQlpZiAoYWN0aW9uLT50aHJlYWRfZm4pCisJCQlwcmludGsoS0VSTl9DT05UICIgdGhyZWFkZWQgWzwlcD5dICVwZiIsCisJCQkJCWFjdGlvbi0+dGhyZWFkX2ZuLCBhY3Rpb24tPnRocmVhZF9mbik7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKIAl9CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKQEAgLTI2Miw3ICsyNzAsMTYgQEAKIAlpZiAoZGVzYy0+aXN0YXRlICYgSVJRU19QT0xMX0lOUFJPR1JFU1MpCiAJCXJldHVybjsKIAotCWlmICh1bmxpa2VseShhY3Rpb25fcmV0ICE9IElSUV9IQU5ETEVEKSkgeworCS8qIHdlIGdldCBoZXJlIGFnYWluIHZpYSB0aGUgdGhyZWFkZWQgaGFuZGxlciAqLworCWlmIChhY3Rpb25fcmV0ID09IElSUV9XQUtFX1RIUkVBRCkKKwkJcmV0dXJuOworCisJaWYgKGJhZF9hY3Rpb25fcmV0KGFjdGlvbl9yZXQpKSB7CisJCXJlcG9ydF9iYWRfaXJxKGlycSwgZGVzYywgYWN0aW9uX3JldCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodW5saWtlbHkoYWN0aW9uX3JldCA9PSBJUlFfTk9ORSkpIHsKIAkJLyoKIAkJICogSWYgd2UgYXJlIHNlZWluZyBvbmx5IHRoZSBvZGQgc3B1cmlvdXMgSVJRIGNhdXNlZCBieQogCQkgKiBidXMgYXN5bmNocm9uaWNpdHkgdGhlbiBkb24ndCBldmVudHVhbGx5IHRyaWdnZXIgYW4gZXJyb3IsCkBAIC0yNzQsOCArMjkxLDYgQEAKIAkJZWxzZQogCQkJZGVzYy0+aXJxc191bmhhbmRsZWQrKzsKIAkJZGVzYy0+bGFzdF91bmhhbmRsZWQgPSBqaWZmaWVzOwotCQlpZiAodW5saWtlbHkoYWN0aW9uX3JldCAhPSBJUlFfTk9ORSkpCi0JCQlyZXBvcnRfYmFkX2lycShpcnEsIGRlc2MsIGFjdGlvbl9yZXQpOwogCX0KIAogCWlmICh1bmxpa2VseSh0cnlfbWlzcm91dGVkX2lycShpcnEsIGRlc2MsIGFjdGlvbl9yZXQpKSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggNjM0MzdkMC4uMjk4YzkyNyAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0zNDI2LDcgKzM0MjYsNyBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uKSkKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIDE7IC8qIGF2b2lkIGZhbHNlIG5lZ2F0aXZlIGxvY2tkZXBfYXNzZXJ0X2hlbGQoKSAqLwogCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAljaGVja19mbGFncyhmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5jIGIva2VybmVsL3JjdXRyZWUuYwppbmRleCA3N2E3NjcxLi44OTQxOWZmIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTE2NDgsNyArMTY0OCw2IEBACiAJaWYgKElTX0VSUih0KSkKIAkJcmV0dXJuIFBUUl9FUlIodCk7CiAJa3RocmVhZF9iaW5kKHQsIGNwdSk7Ci0Jc2V0X3Rhc2tfc3RhdGUodCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAlwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF9jcHUsIGNwdSkgPSBjcHU7CiAJV0FSTl9PTl9PTkNFKHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSkgIT0gTlVMTCk7CiAJcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KSA9IHQ7CkBAIC0xNzU2LDcgKzE3NTUsNiBAQAogCQlpZiAoSVNfRVJSKHQpKQogCQkJcmV0dXJuIFBUUl9FUlIodCk7CiAJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCXNldF90YXNrX3N0YXRlKHQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXJucC0+bm9kZV9rdGhyZWFkX3Rhc2sgPSB0OwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXNwLnNjaGVkX3ByaW9yaXR5ID0gOTk7CkBAIC0xNzY1LDYgKzE3NjMsOCBAQAogCXJldHVybiByY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQocnNwLCBybnAsIHJucF9pbmRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJjdV93YWtlX29uZV9ib29zdF9rdGhyZWFkKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKKwogLyoKICAqIFNwYXduIGFsbCBrdGhyZWFkcyAtLSBjYWxsZWQgYXMgc29vbiBhcyB0aGUgc2NoZWR1bGVyIGlzIHJ1bm5pbmcuCiAgKi8KQEAgLTE3NzIsMTggKzE3NzIsMzAgQEAKIHsKIAlpbnQgY3B1OwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAogCXJjdV9rdGhyZWFkc19zcGF3bmFibGUgPSAxOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJcGVyX2NwdShyY3VfY3B1X2hhc193b3JrLCBjcHUpID0gMDsKLQkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkgewogCQkJKHZvaWQpcmN1X3NwYXduX29uZV9jcHVfa3RocmVhZChjcHUpOworCQkJdCA9IHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSk7CisJCQlpZiAodCkKKwkJCQl3YWtlX3VwX3Byb2Nlc3ModCk7CisJCX0KIAl9CiAJcm5wID0gcmN1X2dldF9yb290KHJjdV9zdGF0ZSk7CiAJKHZvaWQpcmN1X3NwYXduX29uZV9ub2RlX2t0aHJlYWQocmN1X3N0YXRlLCBybnApOworCWlmIChybnAtPm5vZGVfa3RocmVhZF90YXNrKQorCQl3YWtlX3VwX3Byb2Nlc3Mocm5wLT5ub2RlX2t0aHJlYWRfdGFzayk7CiAJaWYgKE5VTV9SQ1VfTk9ERVMgPiAxKSB7Ci0JCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocmN1X3N0YXRlLCBybnApCisJCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocmN1X3N0YXRlLCBybnApIHsKIAkJCSh2b2lkKXJjdV9zcGF3bl9vbmVfbm9kZV9rdGhyZWFkKHJjdV9zdGF0ZSwgcm5wKTsKKwkJCXQgPSBybnAtPm5vZGVfa3RocmVhZF90YXNrOworCQkJaWYgKHQpCisJCQkJd2FrZV91cF9wcm9jZXNzKHQpOworCQkJcmN1X3dha2Vfb25lX2Jvb3N0X2t0aHJlYWQocm5wKTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxODgsMTQgKzIyMDAsMTQgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9vbmxpbmVfY3B1KGludCBjcHUpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3ByZXBhcmVfY3B1KGludCBjcHUpCiB7CiAJcmN1X2luaXRfcGVyY3B1X2RhdGEoY3B1LCAmcmN1X3NjaGVkX3N0YXRlLCAwKTsKIAlyY3VfaW5pdF9wZXJjcHVfZGF0YShjcHUsICZyY3VfYmhfc3RhdGUsIDApOwogCXJjdV9wcmVlbXB0X2luaXRfcGVyY3B1X2RhdGEoY3B1KTsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9vbmxpbmVfa3RocmVhZHMoaW50IGNwdSkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3VfcHJlcGFyZV9rdGhyZWFkcyhpbnQgY3B1KQogewogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIocmN1X3N0YXRlLT5yZGEsIGNwdSk7CiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByZHAtPm15bm9kZTsKQEAgLTIyMDksNiArMjIyMSwzMSBAQAogfQogCiAvKgorICoga3RocmVhZF9jcmVhdGUoKSBjcmVhdGVzIHRocmVhZHMgaW4gVEFTS19VTklOVEVSUlVQVElCTEUgc3RhdGUsCisgKiBidXQgdGhlIFJDVSB0aHJlYWRzIGFyZSB3b2tlbiBvbiBkZW1hbmQsIGFuZCBpZiBkZW1hbmQgaXMgbG93IHRoaXMKKyAqIGNvdWxkIGJlIGEgd2hpbGUgdHJpZ2dlcmluZyB0aGUgaHVuZyB0YXNrIHdhdGNoZG9nLgorICoKKyAqIEluIG9yZGVyIHRvIGF2b2lkIHRoaXMsIHBva2UgYWxsIHRhc2tzIG9uY2UgdGhlIENQVSBpcyBmdWxseQorICogdXAgYW5kIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3Vfb25saW5lX2t0aHJlYWRzKGludCBjcHUpCit7CisJc3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihyY3Vfc3RhdGUtPnJkYSwgY3B1KTsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJkcC0+bXlub2RlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKworCXQgPSBwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF90YXNrLCBjcHUpOworCWlmICh0KQorCQl3YWtlX3VwX3Byb2Nlc3ModCk7CisKKwl0ID0gcm5wLT5ub2RlX2t0aHJlYWRfdGFzazsKKwlpZiAodCkKKwkJd2FrZV91cF9wcm9jZXNzKHQpOworCisJcmN1X3dha2Vfb25lX2Jvb3N0X2t0aHJlYWQocm5wKTsKK30KKworLyoKICAqIEhhbmRsZSBDUFUgb25saW5lL29mZmxpbmUgbm90aWZpY2F0aW9uIGV2ZW50cy4KICAqLwogc3RhdGljIGludCBfX2NwdWluaXQgcmN1X2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLApAQCAtMjIyMSwxMCArMjI1OCwxMSBAQAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKIAljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKLQkJcmN1X29ubGluZV9jcHUoY3B1KTsKLQkJcmN1X29ubGluZV9rdGhyZWFkcyhjcHUpOworCQlyY3VfcHJlcGFyZV9jcHUoY3B1KTsKKwkJcmN1X3ByZXBhcmVfa3RocmVhZHMoY3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfT05MSU5FOgorCQlyY3Vfb25saW5lX2t0aHJlYWRzKGNwdSk7CiAJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CiAJCXJjdV9ub2RlX2t0aHJlYWRfc2V0YWZmaW5pdHkocm5wLCAtMSk7CiAJCXJjdV9jcHVfa3RocmVhZF9zZXRydChjcHUsIDEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAppbmRleCBhNzY3YjdkLi5jOGJmZjMwIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaApAQCAtMTI5NSw3ICsxMjk1LDYgQEAKIAlpZiAoSVNfRVJSKHQpKQogCQlyZXR1cm4gUFRSX0VSUih0KTsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCXNldF90YXNrX3N0YXRlKHQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJcm5wLT5ib29zdF9rdGhyZWFkX3Rhc2sgPSB0OwogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlzcC5zY2hlZF9wcmlvcml0eSA9IFJDVV9LVEhSRUFEX1BSSU87CkBAIC0xMzAzLDYgKzEzMDIsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV93YWtlX29uZV9ib29zdF9rdGhyZWFkKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCWlmIChybnAtPmJvb3N0X2t0aHJlYWRfdGFzaykKKwkJd2FrZV91cF9wcm9jZXNzKHJucC0+Ym9vc3Rfa3RocmVhZF90YXNrKTsKK30KKwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KIAogc3RhdGljIHZvaWQgcmN1X2luaXRpYXRlX2Jvb3N0KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKQpAQCAtMTMyNiw2ICsxMzMxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3Vfd2FrZV9vbmVfYm9vc3Rfa3RocmVhZChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKK30KKwogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiAKICNpZm5kZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBjYmIzYTBlLi4zZjJlNTAyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtNjA1LDEwICs2MDUsMTAgQEAKIC8qCiAgKiBSZXR1cm4gdGhlIGdyb3VwIHRvIHdoaWNoIHRoaXMgdGFza3MgYmVsb25ncy4KICAqCi0gKiBXZSB1c2UgdGFza19zdWJzeXNfc3RhdGVfY2hlY2soKSBhbmQgZXh0ZW5kIHRoZSBSQ1UgdmVyaWZpY2F0aW9uCi0gKiB3aXRoIGxvY2tkZXBfaXNfaGVsZCgmcC0+cGlfbG9jaykgYmVjYXVzZSBjcHVfY2dyb3VwX2F0dGFjaCgpCi0gKiBob2xkcyB0aGF0IGxvY2sgZm9yIGVhY2ggdGFzayBpdCBtb3ZlcyBpbnRvIHRoZSBjZ3JvdXAuIFRoZXJlZm9yZQotICogYnkgaG9sZGluZyB0aGF0IGxvY2ssIHdlIHBpbiB0aGUgdGFzayB0byB0aGUgY3VycmVudCBjZ3JvdXAuCisgKiBXZSB1c2UgdGFza19zdWJzeXNfc3RhdGVfY2hlY2soKSBhbmQgZXh0ZW5kIHRoZSBSQ1UgdmVyaWZpY2F0aW9uIHdpdGgKKyAqIHBpLT5sb2NrIGFuZCBycS0+bG9jayBiZWNhdXNlIGNwdV9jZ3JvdXBfYXR0YWNoKCkgaG9sZHMgdGhvc2UgbG9ja3MgZm9yIGVhY2gKKyAqIHRhc2sgaXQgbW92ZXMgaW50byB0aGUgY2dyb3VwLiBUaGVyZWZvcmUgYnkgaG9sZGluZyBlaXRoZXIgb2YgdGhvc2UgbG9ja3MsCisgKiB3ZSBwaW4gdGhlIHRhc2sgdG8gdGhlIGN1cnJlbnQgY2dyb3VwLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICp0YXNrX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKQEAgLTYxNiw3ICs2MTYsOCBAQAogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CiAKIAljc3MgPSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjayhwLCBjcHVfY2dyb3VwX3N1YnN5c19pZCwKLQkJCWxvY2tkZXBfaXNfaGVsZCgmcC0+cGlfbG9jaykpOworCQkJbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSB8fAorCQkJbG9ja2RlcF9pc19oZWxkKCZ0YXNrX3JxKHApLT5sb2NrKSk7CiAJdGcgPSBjb250YWluZXJfb2YoY3NzLCBzdHJ1Y3QgdGFza19ncm91cCwgY3NzKTsKIAogCXJldHVybiBhdXRvZ3JvdXBfdGFza19ncm91cChwLCB0Zyk7CkBAIC0yMjAwLDYgKzIyMDEsMTYgQEAKIAkJCSEodGFza190aHJlYWRfaW5mbyhwKS0+cHJlZW1wdF9jb3VudCAmIFBSRUVNUFRfQUNUSVZFKSk7CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUAorCS8qCisJICogVGhlIGNhbGxlciBzaG91bGQgaG9sZCBlaXRoZXIgcC0+cGlfbG9jayBvciBycS0+bG9jaywgd2hlbiBjaGFuZ2luZworCSAqIGEgdGFzaydzIENQVS4gLT5waV9sb2NrIGZvciB3YWtpbmcgdGFza3MsIHJxLT5sb2NrIGZvciBydW5uYWJsZSB0YXNrcy4KKwkgKgorCSAqIHNjaGVkX21vdmVfdGFzaygpIGhvbGRzIGJvdGggYW5kIHRodXMgaG9sZGluZyBlaXRoZXIgcGlucyB0aGUgY2dyb3VwLAorCSAqIHNlZSBzZXRfdGFza19ycSgpLgorCSAqCisJICogRnVydGhlcm1vcmUsIGFsbCB0YXNrX3JxIHVzZXJzIHNob3VsZCBhY3F1aXJlIGJvdGggbG9ja3MsIHNlZQorCSAqIHRhc2tfcnFfbG9jaygpLgorCSAqLwogCVdBUk5fT05fT05DRShkZWJ1Z19sb2NrcyAmJiAhKGxvY2tkZXBfaXNfaGVsZCgmcC0+cGlfbG9jaykgfHwKIAkJCQkgICAgICBsb2NrZGVwX2lzX2hlbGQoJnRhc2tfcnEocCktPmxvY2spKSk7CiAjZW5kaWYKQEAgLTI0NDcsNiArMjQ1OCwxMCBAQAogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KKworCWlmICh3YWtlX2ZsYWdzICYgV0ZfTUlHUkFURUQpCisJCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX21pZ3JhdGUpOworCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAJc2NoZWRzdGF0X2luYyhycSwgdHR3dV9jb3VudCk7CkBAIC0yNDU1LDkgKzI0NzAsNiBAQAogCWlmICh3YWtlX2ZsYWdzICYgV0ZfU1lOQykKIAkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfc3luYyk7CiAKLQlpZiAoY3B1ICE9IHRhc2tfY3B1KHApKQotCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19taWdyYXRlKTsKLQogI2VuZGlmIC8qIENPTkZJR19TQ0hFRFNUQVRTICovCiB9CiAKQEAgLTI2MDAsNiArMjYxMiw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApCiAJaWYgKHNjaGVkX2ZlYXQoVFRXVV9RVUVVRSkgJiYgY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkgeworCQlzY2hlZF9jbG9ja19jcHUoY3B1KTsgLyogc3luYyBjbG9ja3MgeC1jcHUgKi8KIAkJdHR3dV9xdWV1ZV9yZW1vdGUocCwgY3B1KTsKIAkJcmV0dXJuOwogCX0KQEAgLTI2NzQsOCArMjY4NywxMCBAQAogCQlwLT5zY2hlZF9jbGFzcy0+dGFza193YWtpbmcocCk7CiAKIAljcHUgPSBzZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX1dBS0UsIHdha2VfZmxhZ3MpOwotCWlmICh0YXNrX2NwdShwKSAhPSBjcHUpCisJaWYgKHRhc2tfY3B1KHApICE9IGNwdSkgeworCQl3YWtlX2ZsYWdzIHw9IFdGX01JR1JBVEVEOwogCQlzZXRfdGFza19jcHUocCwgY3B1KTsKKwl9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAJdHR3dV9xdWV1ZShwLCBjcHUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDRmYzkyNDQuLmYxNzVkOTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTkzOCw2ICs5MzgsMTIgQEAKIAl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisJLyoKKwkgKiBVc2VyLXNwYWNlIHNjcmlwdHMgcmVseSBvbiB0aGUgZXhpc3RlbmNlIG9mIHRoaXMgZmlsZQorCSAqIGFzIGEgZmVhdHVyZSBjaGVjayBmb3IgcGVyZl9ldmVudHMgYmVpbmcgZW5hYmxlZC4KKwkgKgorCSAqIFNvIGl0J3MgYW4gQUJJLCBkbyBub3QgcmVtb3ZlIQorCSAqLwogCXsKIAkJLnByb2NuYW1lCT0gInBlcmZfZXZlbnRfcGFyYW5vaWQiLAogCQkuZGF0YQkJPSAmc3lzY3RsX3BlcmZfZXZlbnRfcGFyYW5vaWQsCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwppbmRleCBjMDI3ZDRmLi5lNGM2OTlkIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKQEAgLTE4Miw3ICsxODIsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKGRldi0+bW9kZSAhPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQpOwotCUJVR19PTighZGV2LT5jcHVtYXNrKTsKKwlpZiAoIWRldi0+Y3B1bWFzaykgeworCQlXQVJOX09OKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKTsKKwkJZGV2LT5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tldmVudHNfbG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IGZkNjE5ODYuLjhjZmYzNjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC03NDksMTYgKzc0OSwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZXhwaXJlc19saW1pdCwgbWFzazsKIAlpbnQgYml0OwogCi0JZXhwaXJlc19saW1pdCA9IGV4cGlyZXM7Ci0KIAlpZiAodGltZXItPnNsYWNrID49IDApIHsKIAkJZXhwaXJlc19saW1pdCA9IGV4cGlyZXMgKyB0aW1lci0+c2xhY2s7CiAJfSBlbHNlIHsKLQkJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCQlsb25nIGRlbHRhID0gZXhwaXJlcyAtIGppZmZpZXM7CiAKLQkJLyogTm8gc2xhY2ssIGlmIGFscmVhZHkgZXhwaXJlZCBlbHNlIGF1dG8gc2xhY2sgMC40JSAqLwotCQlpZiAodGltZV9hZnRlcihleHBpcmVzLCBub3cpKQotCQkJZXhwaXJlc19saW1pdCA9IGV4cGlyZXMgKyAoZXhwaXJlcyAtIG5vdykvMjU2OworCQlpZiAoZGVsdGEgPCAyNTYpCisJCQlyZXR1cm4gZXhwaXJlczsKKworCQlleHBpcmVzX2xpbWl0ID0gZXhwaXJlcyArIGRlbHRhIC8gMjU2OwogCX0KIAltYXNrID0gZXhwaXJlcyBeIGV4cGlyZXNfbGltaXQ7CiAJaWYgKG1hc2sgPT0gMCkKQEAgLTc5NSw2ICs3OTQsOCBAQAogICovCiBpbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQogeworCWV4cGlyZXMgPSBhcHBseV9zbGFjayh0aW1lciwgZXhwaXJlcyk7CisKIAkvKgogCSAqIFRoaXMgaXMgYSBjb21tb24gb3B0aW1pemF0aW9uIHRyaWdnZXJlZCBieSB0aGUKIAkgKiBuZXR3b3JraW5nIGNvZGUgLSBpZiB0aGUgdGltZXIgaXMgcmUtbW9kaWZpZWQKQEAgLTgwMyw4ICs4MDQsNiBAQAogCWlmICh0aW1lcl9wZW5kaW5nKHRpbWVyKSAmJiB0aW1lci0+ZXhwaXJlcyA9PSBleHBpcmVzKQogCQlyZXR1cm4gMTsKIAotCWV4cGlyZXMgPSBhcHBseV9zbGFjayh0aW1lciwgZXhwaXJlcyk7Ci0KIAlyZXR1cm4gX19tb2RfdGltZXIodGltZXIsIGV4cGlyZXMsIGZhbHNlLCBUSU1FUl9OT1RfUElOTkVEKTsKIH0KIEVYUE9SVF9TWU1CT0wobW9kX3RpbWVyKTsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMjhhZmE0Yy4uZGQzNzNjOCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTY5Nyw3ICs2OTcsNyBAQAogCWJvb2wgIlZlcmJvc2UgQlVHKCkgcmVwb3J0aW5nIChhZGRzIDcwSykiIGlmIERFQlVHX0tFUk5FTCAmJiBFWFBFUlQKIAlkZXBlbmRzIG9uIEJVRwogCWRlcGVuZHMgb24gQVJNIHx8IEFWUjMyIHx8IE0zMlIgfHwgTTY4SyB8fCBTUEFSQzMyIHx8IFNQQVJDNjQgfHwgXAotCQkgICBGUlYgfHwgU1VQRVJIIHx8IEdFTkVSSUNfQlVHIHx8IEJMQUNLRklOIHx8IE1OMTAzMDAKKwkJICAgRlJWIHx8IFNVUEVSSCB8fCBHRU5FUklDX0JVRyB8fCBCTEFDS0ZJTiB8fCBNTjEwMzAwIHx8IFRJTEUKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIG1ha2UgQlVHKCkgcGFuaWNzIG91dHB1dCB0aGUgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlcgpkaWZmIC0tZ2l0IGEvbGliL3N3aW90bGIuYyBiL2xpYi9zd2lvdGxiLmMKaW5kZXggOTNjYTA4Yi4uOTkwOTNiMyAxMDA2NDQKLS0tIGEvbGliL3N3aW90bGIuYworKysgYi9saWIvc3dpb3RsYi5jCkBAIC0xMTAsNiArMTEwLDExIEBACiBfX3NldHVwKCJzd2lvdGxiPSIsIHNldHVwX2lvX3RsYl9ucGFnZXMpOwogLyogbWFrZSBpb190bGJfb3ZlcmZsb3cgdHVuYWJsZSB0b28/ICovCiAKK3Vuc2lnbmVkIGxvbmcgc3dpb2x0Yl9ucl90Ymwodm9pZCkKK3sKKwlyZXR1cm4gaW9fdGxiX25zbGFiczsKK30KKwogLyogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB3b3JrIHdpdGggaGlnaG1lbSBwYWdlICovCiBzdGF0aWMgZG1hX2FkZHJfdCBzd2lvdGxiX3ZpcnRfdG9fYnVzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAogCQkJCSAgICAgIHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGMxMTIwNTYuLjQzNjVkZjMgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC02NjYsNiArNjY2LDggQEAKIAkJCWNvbG9ucG9zID0gaTsKIAkJfQogCX0KKwlpZiAobG9uZ2VzdCA9PSAxKQkJLyogZG9uJ3QgY29tcHJlc3MgYSBzaW5nbGUgMCAqLworCQljb2xvbnBvcyA9IC0xOwogCiAJLyogZW1pdCBhZGRyZXNzICovCiAJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKQEAgLTgyNiw3ICs4MjgsNyBAQAogICogICAgICAgSVB2NCB1c2VzIGRvdC1zZXBhcmF0ZWQgZGVjaW1hbCB3aXRoIGxlYWRpbmcgMCdzICgwMTAuMTIzLjA0NS4wMDYpCiAgKiAtICdbSWldNFtobmJsXScgSVB2NCBhZGRyZXNzZXMgaW4gaG9zdCwgbmV0d29yaywgYmlnIG9yIGxpdHRsZSBlbmRpYW4gb3JkZXIKICAqIC0gJ0k2YycgZm9yIElQdjYgYWRkcmVzc2VzIHByaW50ZWQgYXMgc3BlY2lmaWVkIGJ5Ci0gKiAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLTZtYW4tdGV4dC1hZGRyLXJlcHJlc2VudGF0aW9uLTAwCisgKiAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1OTUyCiAgKiAtICdVJyBGb3IgYSAxNiBieXRlIFVVSUQvR1VJRCwgaXQgcHJpbnRzIHRoZSBVVUlEL0dVSUQgaW4gdGhlIGZvcm0KICAqICAgICAgICJ4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiCiAgKiAgICAgICBPcHRpb25zIGZvciAlcFUgYXJlOgpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGQ3YjEwNTcuLmE4MjUxYTggMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTIwMDAsNyArMjAwMCw3IEBACiAJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfa2lsbHByaXYoZGVudHJ5KTsKIAlpZiAoIWVycm9yICYmIGtpbGxzdWlkKQogCQllcnJvciA9IF9fcmVtb3ZlX3N1aWQoZGVudHJ5LCBraWxsc3VpZCk7Ci0JaWYgKCFlcnJvcikKKwlpZiAoIWVycm9yICYmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX05PU0VDKSkKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1NFQzsKIAogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBmMzNiYjMxLi42NDAyNDU4IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0xMDMzLDEwICsxMDMzLDEwIEBACiAJICovCiAJY2hnID0gdm1hX25lZWRzX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7CiAJaWYgKGNoZyA8IDApCi0JCXJldHVybiBFUlJfUFRSKGNoZyk7CisJCXJldHVybiBFUlJfUFRSKC1WTV9GQVVMVF9PT00pOwogCWlmIChjaGcpCiAJCWlmIChodWdldGxiX2dldF9xdW90YShpbm9kZS0+aV9tYXBwaW5nLCBjaGcpKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CisJCQlyZXR1cm4gRVJSX1BUUigtVk1fRkFVTFRfU0lHQlVTKTsKIAogCXNwaW5fbG9jaygmaHVnZXRsYl9sb2NrKTsKIAlwYWdlID0gZGVxdWV1ZV9odWdlX3BhZ2Vfdm1hKGgsIHZtYSwgYWRkciwgYXZvaWRfcmVzZXJ2ZSk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYTRlMWRiMy4uNGU4OTg1YSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMjI0NywxMCArMjI0Nyw2IEBACiAKIAlpZiAoc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZShnZnBfbWFzaywgb3JkZXIpKQogCQlyZXR1cm4gTlVMTDsKLSNpZm5kZWYgQ09ORklHX1pPTkVfRE1BCi0JaWYgKFdBUk5fT05fT05DRShnZnBfbWFzayAmIF9fR0ZQX0RNQSkpCi0JCXJldHVybiBOVUxMOwotI2VuZGlmCiAKIAkvKgogCSAqIENoZWNrIHRoZSB6b25lcyBzdWl0YWJsZSBmb3IgdGhlIGdmcF9tYXNrIGNvbnRhaW4gYXQgbGVhc3Qgb25lCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKaW5kZXggNDE0OTVkYzIuLmZjYzY4NDYgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2NvcmUuYworKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTIzLDYgKzIzLDMxIEBACiAJCXJldHVybiBmYWxzZTsKIAogCXNrYi0+ZGV2ID0gdmxhbl9kZXY7CisJaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX09USEVSSE9TVCkgeworCQkvKiBPdXIgbG93ZXIgbGF5ZXIgdGhpbmtzIHRoaXMgaXMgbm90IGxvY2FsLCBsZXQncyBtYWtlIHN1cmUuCisJCSAqIFRoaXMgYWxsb3dzIHRoZSBWTEFOIHRvIGhhdmUgYSBkaWZmZXJlbnQgTUFDIHRoYW4gdGhlCisJCSAqIHVuZGVybHlpbmcgZGV2aWNlLCBhbmQgc3RpbGwgcm91dGUgY29ycmVjdGx5LiAqLworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktPmhfZGVzdCwKKwkJCQkJdmxhbl9kZXYtPmRldl9hZGRyKSkKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwl9CisKKwlpZiAoISh2bGFuX2Rldl9pbmZvKHZsYW5fZGV2KS0+ZmxhZ3MgJiBWTEFOX0ZMQUdfUkVPUkRFUl9IRFIpKSB7CisJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBza2ItPmRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpOworCisJCS8qCisJCSAqIHZsYW5faW5zZXJ0X3RhZyBleHBlY3Qgc2tiLT5kYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuCisJCSAqIFNvIGNoYW5nZSBza2ItPmRhdGEgYmVmb3JlIGNhbGxpbmcgaXQgYW5kIGNoYW5nZSBiYWNrIHRvCisJCSAqIG9yaWdpbmFsIHBvc2l0aW9uIGxhdGVyCisJCSAqLworCQlza2JfcHVzaChza2IsIG9mZnNldCk7CisJCXNrYiA9ICpza2JwID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgc2tiLT52bGFuX3RjaSk7CisJCWlmICghc2tiKQorCQkJcmV0dXJuIGZhbHNlOworCQlza2JfcHVsbChza2IsIG9mZnNldCArIFZMQU5fSExFTik7CisJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7CisJfQorCiAJc2tiLT5wcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkodmxhbl9kZXYsIHNrYi0+dmxhbl90Y2kpOwogCXNrYi0+dmxhbl90Y2kgPSAwOwogCkBAIC0zMSwyMiArNTYsOCBAQAogCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnJ4X3N0YXRzLT5zeW5jcCk7CiAJcnhfc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAlyeF9zdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0KLQlzd2l0Y2ggKHNrYi0+cGt0X3R5cGUpIHsKLQljYXNlIFBBQ0tFVF9CUk9BRENBU1Q6Ci0JCWJyZWFrOwotCWNhc2UgUEFDS0VUX01VTFRJQ0FTVDoKKwlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKQogCQlyeF9zdGF0cy0+cnhfbXVsdGljYXN0Kys7Ci0JCWJyZWFrOwotCWNhc2UgUEFDS0VUX09USEVSSE9TVDoKLQkJLyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0J3MgbWFrZSBzdXJlLgotCQkgKiBUaGlzIGFsbG93cyB0aGUgVkxBTiB0byBoYXZlIGEgZGlmZmVyZW50IE1BQyB0aGFuIHRoZQotCQkgKiB1bmRlcmx5aW5nIGRldmljZSwgYW5kIHN0aWxsIHJvdXRlIGNvcnJlY3RseS4gKi8KLQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX2Rlc3QsCi0JCQkJCXZsYW5fZGV2LT5kZXZfYWRkcikpCi0JCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7Ci0JCWJyZWFrOwotCX0KIAl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmcnhfc3RhdHMtPnN5bmNwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtODksMTggKzEwMCwxMyBAQAogfQogRVhQT1JUX1NZTUJPTCh2bGFuX2dyb19mcmFncyk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9jaGVja19yZW9yZGVyX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHN0cnVjdCBza19idWZmICp2bGFuX3Jlb3JkZXJfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHZsYW5fZGV2X2luZm8oc2tiLT5kZXYpLT5mbGFncyAmIFZMQU5fRkxBR19SRU9SREVSX0hEUikgewotCQlpZiAoc2tiX2Nvdyhza2IsIHNrYl9oZWFkcm9vbShza2IpKSA8IDApCi0JCQlza2IgPSBOVUxMOwotCQlpZiAoc2tiKSB7Ci0JCQkvKiBMaWZ0ZWQgZnJvbSBHbGViJ3MgVkxBTiBjb2RlLi4uICovCi0JCQltZW1tb3ZlKHNrYi0+ZGF0YSAtIEVUSF9ITEVOLAotCQkJCXNrYi0+ZGF0YSAtIFZMQU5fRVRIX0hMRU4sIDEyKTsKLQkJCXNrYi0+bWFjX2hlYWRlciArPSBWTEFOX0hMRU47Ci0JCX0KLQl9CisJaWYgKHNrYl9jb3coc2tiLCBza2JfaGVhZHJvb20oc2tiKSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwltZW1tb3ZlKHNrYi0+ZGF0YSAtIEVUSF9ITEVOLCBza2ItPmRhdGEgLSBWTEFOX0VUSF9ITEVOLCAyICogRVRIX0FMRU4pOworCXNrYi0+bWFjX2hlYWRlciArPSBWTEFOX0hMRU47CisJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAlyZXR1cm4gc2tiOwogfQogCkBAIC0xNjEsNyArMTY3LDcgQEAKIAlza2JfcHVsbF9yY3N1bShza2IsIFZMQU5fSExFTik7CiAJdmxhbl9zZXRfZW5jYXBfcHJvdG8oc2tiLCB2aGRyKTsKIAotCXNrYiA9IHZsYW5fY2hlY2tfcmVvcmRlcl9oZWFkZXIoc2tiKTsKKwlza2IgPSB2bGFuX3Jlb3JkZXJfaGVhZGVyKHNrYik7CiAJaWYgKHVubGlrZWx5KCFza2IpKQogCQlnb3RvIGVycl9mcmVlOwogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IGYyNDdmNWIuLjdlYTVjZjkgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc3RhdHMtPnN5bmNwKTsKIAkJc3RhdHMtPnR4X3BhY2tldHMrKzsKIAkJc3RhdHMtPnR4X2J5dGVzICs9IGxlbjsKLQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc3RhdHMtPnN5bmNwKTsKKwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnN0YXRzLT5zeW5jcCk7CiAJfSBlbHNlIHsKIAkJdGhpc19jcHVfaW5jKHZsYW5fZGV2X2luZm8oZGV2KS0+dmxhbl9wY3B1X3N0YXRzLT50eF9kcm9wcGVkKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCmluZGV4IGE4NmY5YmEuLmU2NGExYzIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCkBAIC05MDYsNyArOTA2LDcgQEAKIAkJaWYgKGMtPnBzbSA9PSBwc20pIHsKIAkJCS8qIEV4YWN0IG1hdGNoLiAqLwogCQkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIHNyYykpIHsKLQkJCQlyZWFkX3VubG9ja19iaCgmY2hhbl9saXN0X2xvY2spOworCQkJCXJlYWRfdW5sb2NrKCZjaGFuX2xpc3RfbG9jayk7CiAJCQkJcmV0dXJuIGM7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IDNmYTEyMzEuLjU2MTQ5ZWMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtMTA0LDEwICsxMDQsMTYgQEAKIHsKIH0KIAorc3RhdGljIHUzMiAqZmFrZV9jb3dfbWV0cmljcyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHVuc2lnbmVkIGxvbmcgb2xkKQoreworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgZmFrZV9kc3Rfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVCwKIAkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS51cGRhdGVfcG10dSA9CQlmYWtlX3VwZGF0ZV9wbXR1LAorCS5jb3dfbWV0cmljcyA9CQlmYWtlX2Nvd19tZXRyaWNzLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NobmxfbmV0LmMgYi9uZXQvY2FpZi9jaG5sX25ldC5jCmluZGV4IDY0OWViYWMuLmFkYmI0MjQgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NobmxfbmV0LmMKKysrIGIvbmV0L2NhaWYvY2hubF9uZXQuYwpAQCAtMTM5LDE3ICsxMzksMTQgQEAKIAlzdHJ1Y3QgY2hubF9uZXQgKmRldiA9IE5VTEw7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9ub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgKl90bXA7Ci0JLyogTWF5IGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgUlROTCBsb2NrIGhlbGQgKi8KLQlpbnQgaXNsb2NrZWQgPSBydG5sX2lzX2xvY2tlZCgpOwotCWlmICghaXNsb2NrZWQpCi0JCXJ0bmxfbG9jaygpOworCisJcnRubF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3Rfbm9kZSwgX3RtcCwgJmNobmxfbmV0X2xpc3QpIHsKIAkJZGV2ID0gbGlzdF9lbnRyeShsaXN0X25vZGUsIHN0cnVjdCBjaG5sX25ldCwgbGlzdF9maWVsZCk7CiAJCWlmIChkZXYtPnN0YXRlID09IENBSUZfU0hVVERPV04pCiAJCQlkZXZfY2xvc2UoZGV2LT5uZXRkZXYpOwogCX0KLQlpZiAoIWlzbG9ja2VkKQotCQlydG5sX3VubG9jaygpOworCXJ0bmxfdW5sb2NrKCk7CiB9CiBzdGF0aWMgREVDTEFSRV9XT1JLKGNsb3NlX3dvcmtlciwgY2xvc2Vfd29yayk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYzdlMzA1ZC4uOWM1OGMxZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTIwOTYsNiArMjA5Niw3IEBACiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CiAJaW50IHJjID0gTkVUREVWX1RYX09LOworCXVuc2lnbmVkIGludCBza2JfbGVuOwogCiAJaWYgKGxpa2VseSghc2tiLT5uZXh0KSkgewogCQl1MzIgZmVhdHVyZXM7CkBAIC0yMTQ2LDggKzIxNDcsOSBAQAogCQkJfQogCQl9CiAKKwkJc2tiX2xlbiA9IHNrYi0+bGVuOwogCQlyYyA9IG9wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkZXYpOwotCQl0cmFjZV9uZXRfZGV2X3htaXQoc2tiLCByYyk7CisJCXRyYWNlX25ldF9kZXZfeG1pdChza2IsIHJjLCBkZXYsIHNrYl9sZW4pOwogCQlpZiAocmMgPT0gTkVUREVWX1RYX09LKQogCQkJdHhxX3RyYW5zX3VwZGF0ZSh0eHEpOwogCQlyZXR1cm4gcmM7CkBAIC0yMTY3LDggKzIxNjksOSBAQAogCQlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGX1hNSVRfRFNUX1JFTEVBU0UpCiAJCQlza2JfZHN0X2Ryb3AobnNrYik7CiAKKwkJc2tiX2xlbiA9IG5za2ItPmxlbjsKIAkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KG5za2IsIGRldik7Ci0JCXRyYWNlX25ldF9kZXZfeG1pdChuc2tiLCByYyk7CisJCXRyYWNlX25ldF9kZXZfeG1pdChuc2tiLCByYywgZGV2LCBza2JfbGVuKTsKIAkJaWYgKHVubGlrZWx5KHJjICE9IE5FVERFVl9UWF9PSykpIHsKIAkJCWlmIChyYyAmIH5ORVRERVZfVFhfTUFTSykKIAkJCQlnb3RvIG91dF9rZnJlZV9nc29fc2tiOwpAQCAtMzExMSw3ICszMTE0LDcgQEAKIAogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7Ci0Jc2tiLT5tYWNfbGVuID0gc2tiLT5uZXR3b3JrX2hlYWRlciAtIHNrYi0+bWFjX2hlYWRlcjsKKwlza2JfcmVzZXRfbWFjX2xlbihza2IpOwogCiAJcHRfcHJldiA9IE5VTEw7CiAKQEAgLTYxNzUsNiArNjE3OCwxMSBAQAogCQlvbGRzZC0+b3V0cHV0X3F1ZXVlID0gTlVMTDsKIAkJb2xkc2QtPm91dHB1dF9xdWV1ZV90YWlscCA9ICZvbGRzZC0+b3V0cHV0X3F1ZXVlOwogCX0KKwkvKiBBcHBlbmQgTkFQSSBwb2xsIGxpc3QgZnJvbSBvZmZsaW5lIENQVS4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJm9sZHNkLT5wb2xsX2xpc3QpKSB7CisJCWxpc3Rfc3BsaWNlX2luaXQoJm9sZHNkLT5wb2xsX2xpc3QsICZzZC0+cG9sbF9saXN0KTsKKwkJcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpOworCX0KIAogCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9UWF9TT0ZUSVJRKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC02MjYxLDI5ICs2MjY5LDIzIEBACiAvKioKICAqCW5ldGRldl9kcml2ZXJuYW1lIC0gbmV0d29yayBkcml2ZXIgZm9yIHRoZSBkZXZpY2UKICAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCi0gKglAYnVmZmVyOiBidWZmZXIgZm9yIHJlc3VsdGluZyBuYW1lCi0gKglAbGVuOiBzaXplIG9mIGJ1ZmZlcgogICoKICAqCURldGVybWluZSBuZXR3b3JrIGRyaXZlciBmb3IgZGV2aWNlLgogICovCi1jaGFyICpuZXRkZXZfZHJpdmVybmFtZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpidWZmZXIsIGludCBsZW4pCitjb25zdCBjaGFyICpuZXRkZXZfZHJpdmVybmFtZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXI7CiAJY29uc3Qgc3RydWN0IGRldmljZSAqcGFyZW50OwotCi0JaWYgKGxlbiA8PSAwIHx8ICFidWZmZXIpCi0JCXJldHVybiBidWZmZXI7Ci0JYnVmZmVyWzBdID0gMDsKKwljb25zdCBjaGFyICplbXB0eSA9ICIiOwogCiAJcGFyZW50ID0gZGV2LT5kZXYucGFyZW50OwotCiAJaWYgKCFwYXJlbnQpCi0JCXJldHVybiBidWZmZXI7CisJCXJldHVybiBlbXB0eTsKIAogCWRyaXZlciA9IHBhcmVudC0+ZHJpdmVyOwogCWlmIChkcml2ZXIgJiYgZHJpdmVyLT5uYW1lKQotCQlzdHJsY3B5KGJ1ZmZlciwgZHJpdmVyLT5uYW1lLCBsZW4pOwotCXJldHVybiBidWZmZXI7CisJCXJldHVybiBkcml2ZXItPm5hbWU7CisJcmV0dXJuIGVtcHR5OwogfQogCiBzdGF0aWMgaW50IF9fbmV0ZGV2X3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCA2YzZiODZkLi5lNDFlNTExIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC0zMTAsMTkgKzMxMCwxNyBAQAogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBuZXQgKm5ldDsKIAotCW5ldCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJZmlsZSA9IHByb2NfbnNfZmdldChmZCk7Ci0JaWYgKCFmaWxlKQotCQlnb3RvIG91dDsKKwlpZiAoSVNfRVJSKGZpbGUpKQorCQlyZXR1cm4gRVJSX0NBU1QoZmlsZSk7CiAKIAllaSA9IFBST0NfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKGVpLT5uc19vcHMgIT0gJm5ldG5zX29wZXJhdGlvbnMpCi0JCWdvdG8gb3V0OworCWlmIChlaS0+bnNfb3BzID09ICZuZXRuc19vcGVyYXRpb25zKQorCQluZXQgPSBnZXRfbmV0KGVpLT5ucyk7CisJZWxzZQorCQluZXQgPSBFUlJfUFRSKC1FSU5WQUwpOwogCi0JbmV0ID0gZ2V0X25ldChlaS0+bnMpOwotb3V0OgotCWlmIChmaWxlKQotCQlmcHV0KGZpbGUpOworCWZwdXQoZmlsZSk7CiAJcmV0dXJuIG5ldDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IDJkN2Q2ZDQuLjE4ZDljYmQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTc5Miw2ICs3OTIsMTMgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKG5kZXYtPm1hc3RlcikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBpcyBhIHNsYXZlIGRldmljZSwgYWJvcnRpbmcuXG4iLAorCQkgICAgICAgbnAtPm5hbWUsIG5wLT5kZXZfbmFtZSk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBwdXQ7CisJfQorCiAJaWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CiAJCXVuc2lnbmVkIGxvbmcgYXRtb3N0LCBhdGxlYXN0OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggY2MxNDYzMS4uOWMxOTI2MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtNDY1LDYgKzQ2NSw5IEBACiAJaWYgKGFkZHJfbGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpCiAJCWdvdG8gb3V0OwogCisJaWYgKGFkZHItPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkKKwkJZ290byBvdXQ7CisKIAljaGtfYWRkcl9yZXQgPSBpbmV0X2FkZHJfdHlwZShzb2NrX25ldChzayksIGFkZHItPnNpbl9hZGRyLnNfYWRkcik7CiAKIAkvKiBOb3Qgc3BlY2lmaWVkIGJ5IGFueSBzdGFuZGFyZCBwZXItc2UsIGhvd2V2ZXIgaXQgYnJlYWtzIHRvbwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jIGIvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCmluZGV4IGMzMTE4ZTEuLmVjOTMzMzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX29wdGlvbnMuYworKysgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KQEAgLTM1MCw3ICszNTEsNyBAQAogCQkJCWdvdG8gZXJyb3I7CiAJCQl9CiAJCQlpZiAob3B0cHRyWzJdIDw9IG9wdGxlbikgewotCQkJCV9fYmUzMiAqdGltZXB0ciA9IE5VTEw7CisJCQkJdW5zaWduZWQgY2hhciAqdGltZXB0ciA9IE5VTEw7CiAJCQkJaWYgKG9wdHB0clsyXSszID4gb3B0cHRyWzFdKSB7CiAJCQkJCXBwX3B0ciA9IG9wdHB0ciArIDI7CiAJCQkJCWdvdG8gZXJyb3I7CkBAIC0zNTksNyArMzYwLDcgQEAKIAkJCQkgICAgICBjYXNlIElQT1BUX1RTX1RTT05MWToKIAkJCQkJb3B0LT50cyA9IG9wdHB0ciAtIGlwaDsKIAkJCQkJaWYgKHNrYikKLQkJCQkJCXRpbWVwdHIgPSAoX19iZTMyKikmb3B0cHRyW29wdHB0clsyXS0xXTsKKwkJCQkJCXRpbWVwdHIgPSAmb3B0cHRyW29wdHB0clsyXS0xXTsKIAkJCQkJb3B0LT50c19uZWVkdGltZSA9IDE7CiAJCQkJCW9wdHB0clsyXSArPSA0OwogCQkJCQlicmVhazsKQEAgLTM3MSw3ICszNzIsNyBAQAogCQkJCQlvcHQtPnRzID0gb3B0cHRyIC0gaXBoOwogCQkJCQlpZiAocnQpICB7CiAJCQkJCQltZW1jcHkoJm9wdHB0cltvcHRwdHJbMl0tMV0sICZydC0+cnRfc3BlY19kc3QsIDQpOwotCQkJCQkJdGltZXB0ciA9IChfX2JlMzIqKSZvcHRwdHJbb3B0cHRyWzJdKzNdOworCQkJCQkJdGltZXB0ciA9ICZvcHRwdHJbb3B0cHRyWzJdKzNdOwogCQkJCQl9CiAJCQkJCW9wdC0+dHNfbmVlZGFkZHIgPSAxOwogCQkJCQlvcHQtPnRzX25lZWR0aW1lID0gMTsKQEAgLTM4OSw3ICszOTAsNyBAQAogCQkJCQkJaWYgKGluZXRfYWRkcl90eXBlKG5ldCwgYWRkcikgPT0gUlROX1VOSUNBU1QpCiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlpZiAoc2tiKQotCQkJCQkJCXRpbWVwdHIgPSAoX19iZTMyKikmb3B0cHRyW29wdHB0clsyXSszXTsKKwkJCQkJCQl0aW1lcHRyID0gJm9wdHB0cltvcHRwdHJbMl0rM107CiAJCQkJCX0KIAkJCQkJb3B0LT50c19uZWVkdGltZSA9IDE7CiAJCQkJCW9wdHB0clsyXSArPSA4OwpAQCAtNDAzLDEwICs0MDQsMTAgQEAKIAkJCQl9CiAJCQkJaWYgKHRpbWVwdHIpIHsKIAkJCQkJc3RydWN0IHRpbWVzcGVjIHR2OwotCQkJCQlfX2JlMzIgIG1pZHRpbWU7CisJCQkJCXUzMiAgbWlkdGltZTsKIAkJCQkJZ2V0bnN0aW1lb2ZkYXkoJnR2KTsKLQkJCQkJbWlkdGltZSA9IGh0b25sKCh0di50dl9zZWMgJSA4NjQwMCkgKiBNU0VDX1BFUl9TRUMgKyB0di50dl9uc2VjIC8gTlNFQ19QRVJfTVNFQyk7Ci0JCQkJCW1lbWNweSh0aW1lcHRyLCAmbWlkdGltZSwgc2l6ZW9mKF9fYmUzMikpOworCQkJCQltaWR0aW1lID0gKHR2LnR2X3NlYyAlIDg2NDAwKSAqIE1TRUNfUEVSX1NFQyArIHR2LnR2X25zZWMgLyBOU0VDX1BFUl9NU0VDOworCQkJCQlwdXRfdW5hbGlnbmVkX2JlMzIobWlkdGltZSwgdGltZXB0cik7CiAJCQkJCW9wdC0+aXNfY2hhbmdlZCA9IDE7CiAJCQkJfQogCQkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggOThhZjM2OS4uYTgwMjRlYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTc5OSw3ICs3OTksOSBAQAogCWludCBjc3VtbW9kZSA9IENIRUNLU1VNX05PTkU7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWNvcmstPmRzdDsKIAotCWV4dGhkcmxlbiA9IHRyYW5zaGRybGVuID8gcnQtPmRzdC5oZWFkZXJfbGVuIDogMDsKKwlza2IgPSBza2JfcGVla190YWlsKHF1ZXVlKTsKKworCWV4dGhkcmxlbiA9ICFza2IgPyBydC0+ZHN0LmhlYWRlcl9sZW4gOiAwOwogCWxlbmd0aCArPSBleHRoZHJsZW47CiAJdHJhbnNoZHJsZW4gKz0gZXh0aGRybGVuOwogCW10dSA9IGNvcmstPmZyYWdzaXplOwpAQCAtODI1LDggKzgyNyw2IEBACiAJICAgICFleHRoZHJsZW4pCiAJCWNzdW1tb2RlID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAotCXNrYiA9IHNrYl9wZWVrX3RhaWwocXVldWUpOwotCiAJY29yay0+bGVuZ3RoICs9IGxlbmd0aDsKIAlpZiAoKChsZW5ndGggPiBtdHUpIHx8IChza2IgJiYgc2tiX2lzX2dzbyhza2IpKSkgJiYKIAkgICAgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgJiYKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKaW5kZXggZDJjMTMxMS4uZjdmOWJkNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKQEAgLTQwMiw3ICs0MDIsOCBAQAogc3RhdGljIGlubGluZSB2b2lkCiBfX2lwcV9yY3Zfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHN0YXR1cywgdHlwZSwgcGlkLCBmbGFncywgbmxtc2dsZW4sIHNrYmxlbjsKKwlpbnQgc3RhdHVzLCB0eXBlLCBwaWQsIGZsYWdzOworCXVuc2lnbmVkIGludCBubG1zZ2xlbiwgc2tibGVuOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCiAJc2tibGVuID0gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCBkNjA5YWMzLi41YzllOTdjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCSAqIGVycm9yIG1lc3NhZ2VzIChSRUxBVEVEKSBhbmQgaW5mb3JtYXRpb24gcmVxdWVzdHMgKHNlZSBiZWxvdykgKi8KIAlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fSUNNUCAmJgogCSAgICAoY3RpbmZvID09IElQX0NUX1JFTEFURUQgfHwKLQkgICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpKQorCSAgICAgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpKQogCQlyZXR1cm4gWFRfQ09OVElOVUU7CiAKIAkvKiBpcF9jb25udHJhY2tfaWNtcCBndWFyYW50ZWVzIHVzIHRoYXQgd2Ugb25seSBoYXZlIElDTVBfRUNITywKQEAgLTMyMSwxMiArMzIxLDEyIEBACiAJCQljdC0+bWFyayA9IGhhc2g7CiAJCQlicmVhazsKIAkJY2FzZSBJUF9DVF9SRUxBVEVEOgotCQljYXNlIElQX0NUX1JFTEFURUQrSVBfQ1RfSVNfUkVQTFk6CisJCWNhc2UgSVBfQ1RfUkVMQVRFRF9SRVBMWToKIAkJCS8qIEZJWE1FOiB3ZSBkb24ndCBoYW5kbGUgZXhwZWN0YXRpb25zIGF0IHRoZQogCQkJICogbW9tZW50LiAgdGhleSBjYW4gYXJyaXZlIG9uIGEgZGlmZmVyZW50IG5vZGUgdGhhbgogCQkJICogdGhlIG1hc3RlciBjb25uZWN0aW9uIChlLmcuIEZUUCBwYXNzaXZlIG1vZGUpICovCiAJCWNhc2UgSVBfQ1RfRVNUQUJMSVNIRUQ6Ci0JCWNhc2UgSVBfQ1RfRVNUQUJMSVNIRUQrSVBfQ1RfSVNfUkVQTFk6CisJCWNhc2UgSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFk6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwppbmRleCBkMmVkOWRjLi45OTMxMTUyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwpAQCAtNjAsNyArNjAsNyBAQAogCW5hdCA9IG5mY3RfbmF0KGN0KTsKIAogCU5GX0NUX0FTU0VSVChjdCAmJiAoY3RpbmZvID09IElQX0NUX05FVyB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCB8fAotCQkJICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpKTsKKwkJCSAgICBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRF9SRVBMWSkpOwogCiAJLyogU291cmNlIGFkZHJlc3MgaXMgMC4wLjAuMCAtIGxvY2FsbHkgZ2VuZXJhdGVkIHBhY2tldCB0aGF0IGlzCiAJICogcHJvYmFibHkgbm90IHN1cHBvc2VkIHRvIGJlIG1hc3F1ZXJhZGVkLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggNWEwM2MwMi4uZGIxMDA3NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogCS8qIFRoaXMgaXMgd2hlcmUgd2UgY2FsbCB0aGUgaGVscGVyOiBhcyB0aGUgcGFja2V0IGdvZXMgb3V0LiAqLwogCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7Ci0JaWYgKCFjdCB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKQorCWlmICghY3QgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpCiAJCWdvdG8gb3V0OwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCmluZGV4IDc0MDRiZGUuLmFiNWIyN2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAkvKiBVcGRhdGUgc2tiIHRvIHJlZmVyIHRvIHRoaXMgY29ubmVjdGlvbiAqLwogCXNrYi0+bmZjdCA9ICZuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpLT5jdF9nZW5lcmFsOwogCXNrYi0+bmZjdGluZm8gPSAqY3RpbmZvOwotCXJldHVybiAtTkZfQUNDRVBUOworCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKIC8qIFNtYWxsIGFuZCBtb2RpZmllZCB2ZXJzaW9uIG9mIGljbXBfcmN2ICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDljNzFiMjcuLjMzNDZkZTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC00MzMsNyArNDMzLDcgQEAKIAogCS8qIE11c3QgYmUgUkVMQVRFRCAqLwogCU5GX0NUX0FTU0VSVChza2ItPm5mY3RpbmZvID09IElQX0NUX1JFTEFURUQgfHwKLQkJICAgICBza2ItPm5mY3RpbmZvID09IElQX0NUX1JFTEFURUQrSVBfQ1RfSVNfUkVQTFkpOworCQkgICAgIHNrYi0+bmZjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRF9SRVBMWSk7CiAKIAkvKiBSZWRpcmVjdHMgb24gbm9uLW51bGwgbmF0cyBtdXN0IGJlIGRyb3BwZWQsIGVsc2UgdGhleSdsbAogCSAgIHN0YXJ0IHRhbGtpbmcgdG8gZWFjaCBvdGhlciB3aXRob3V0IG91ciB0cmFuc2xhdGlvbiwgYW5kIGJlCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwppbmRleCA5OWNmYTI4Li5lYmM1Zjg4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJaWYgKCEocnQtPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTCkgJiYKLQkJICAgIHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVjRfQ1NVTSkgeworCQkgICAgKCFza2ItPmRldiB8fCBza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1Y0X0NTVU0pKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7CiAJCQlza2ItPmNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArCiAJCQkJCSAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwppbmRleCAyMWMzMDQyLi43MzNjOWFiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwpAQCAtNTMsNyArNTMsNyBAQAogCiAJLyogQ29ubmVjdGlvbiBtdXN0IGJlIHZhbGlkIGFuZCBuZXcuICovCiAJTkZfQ1RfQVNTRVJUKGN0ICYmIChjdGluZm8gPT0gSVBfQ1RfTkVXIHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEIHx8Ci0JCQkgICAgY3RpbmZvID09IElQX0NUX1JFTEFURUQgKyBJUF9DVF9JU19SRVBMWSkpOworCQkJICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEX1JFUExZKSk7CiAJTkZfQ1RfQVNTRVJUKHBhci0+b3V0ICE9IE5VTEwpOwogCiAJcmV0dXJuIG5mX25hdF9zZXR1cF9pbmZvKGN0LCAmbXItPnJhbmdlWzBdLCBJUF9OQVRfTUFOSVBfU1JDKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMKaW5kZXggNzMxN2JkZi4uNDgzYjc2ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAJc3dpdGNoIChjdGluZm8pIHsKIAljYXNlIElQX0NUX1JFTEFURUQ6Ci0JY2FzZSBJUF9DVF9SRUxBVEVEK0lQX0NUX0lTX1JFUExZOgorCWNhc2UgSVBfQ1RfUkVMQVRFRF9SRVBMWToKIAkJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHsKIAkJCWlmICghbmZfbmF0X2ljbXBfcmVwbHlfdHJhbnNsYXRpb24oY3QsIGN0aW5mbywKIAkJCQkJCQkgICBob29rbnVtLCBza2IpKQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJZGVmYXVsdDoKIAkJLyogRVNUQUJMSVNIRUQgKi8KIAkJTkZfQ1RfQVNTRVJUKGN0aW5mbyA9PSBJUF9DVF9FU1RBQkxJU0hFRCB8fAotCQkJICAgICBjdGluZm8gPT0gKElQX0NUX0VTVEFCTElTSEVEK0lQX0NUX0lTX1JFUExZKSk7CisJCQkgICAgIGN0aW5mbyA9PSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSk7CiAJfQogCiAJcmV0dXJuIG5mX25hdF9wYWNrZXQoY3QsIGN0aW5mbywgaG9va251bSwgc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDUyYjBiOTUuLjA0NWYwZWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTMxNiw2ICsxMzE2LDIzIEBACiAJOwogfQogCitzdGF0aWMgYm9vbCBwZWVyX3BtdHVfZXhwaXJlZChzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyKQoreworCXVuc2lnbmVkIGxvbmcgb3JpZyA9IEFDQ0VTU19PTkNFKHBlZXItPnBtdHVfZXhwaXJlcyk7CisKKwlyZXR1cm4gb3JpZyAmJgorCSAgICAgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIG9yaWcpICYmCisJICAgICAgIGNtcHhjaGcoJnBlZXItPnBtdHVfZXhwaXJlcywgb3JpZywgMCkgPT0gb3JpZzsKK30KKworc3RhdGljIGJvb2wgcGVlcl9wbXR1X2NsZWFuZWQoc3RydWN0IGluZXRfcGVlciAqcGVlcikKK3sKKwl1bnNpZ25lZCBsb25nIG9yaWcgPSBBQ0NFU1NfT05DRShwZWVyLT5wbXR1X2V4cGlyZXMpOworCisJcmV0dXJuIG9yaWcgJiYKKwkgICAgICAgY21weGNoZygmcGVlci0+cG10dV9leHBpcmVzLCBvcmlnLCAwKSA9PSBvcmlnOworfQorCiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9uZWdhdGl2ZV9hZHZpY2Uoc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilkc3Q7CkBAIC0xMzMxLDE0ICsxMzQ4LDggQEAKIAkJCQkJCXJ0X2dlbmlkKGRldl9uZXQoZHN0LT5kZXYpKSk7CiAJCQlydF9kZWwoaGFzaCwgcnQpOwogCQkJcmV0ID0gTlVMTDsKLQkJfSBlbHNlIGlmIChydC0+cGVlciAmJgotCQkJICAgcnQtPnBlZXItPnBtdHVfZXhwaXJlcyAmJgotCQkJICAgdGltZV9hZnRlcl9lcShqaWZmaWVzLCBydC0+cGVlci0+cG10dV9leHBpcmVzKSkgewotCQkJdW5zaWduZWQgbG9uZyBvcmlnID0gcnQtPnBlZXItPnBtdHVfZXhwaXJlczsKLQotCQkJaWYgKGNtcHhjaGcoJnJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMsIG9yaWcsIDApID09IG9yaWcpCi0JCQkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX01UVSwKLQkJCQkJICAgICAgIHJ0LT5wZWVyLT5wbXR1X29yaWcpOworCQl9IGVsc2UgaWYgKHJ0LT5wZWVyICYmIHBlZXJfcG10dV9leHBpcmVkKHJ0LT5wZWVyKSkgeworCQkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX01UVSwgcnQtPnBlZXItPnBtdHVfb3JpZyk7CiAJCX0KIAl9CiAJcmV0dXJuIHJldDsKQEAgLTE1MzEsOCArMTU0MiwxMCBAQAogCiBzdGF0aWMgdm9pZCBjaGVja19wZWVyX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyKQogewotCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IHBlZXItPnBtdHVfZXhwaXJlczsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSBBQ0NFU1NfT05DRShwZWVyLT5wbXR1X2V4cGlyZXMpOwogCisJaWYgKCFleHBpcmVzKQorCQlyZXR1cm47CiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGV4cGlyZXMpKSB7CiAJCXUzMiBvcmlnX2RzdF9tdHUgPSBkc3RfbXR1KGRzdCk7CiAJCWlmIChwZWVyLT5wbXR1X2xlYXJuZWQgPCBvcmlnX2RzdF9tdHUpIHsKQEAgLTE1NTUsMTAgKzE1NjgsMTEgQEAKIAkJcnRfYmluZF9wZWVyKHJ0LCBydC0+cnRfZHN0LCAxKTsKIAlwZWVyID0gcnQtPnBlZXI7CiAJaWYgKHBlZXIpIHsKKwkJdW5zaWduZWQgbG9uZyBwbXR1X2V4cGlyZXMgPSBBQ0NFU1NfT05DRShwZWVyLT5wbXR1X2V4cGlyZXMpOworCiAJCWlmIChtdHUgPCBpcF9ydF9taW5fcG10dSkKIAkJCW10dSA9IGlwX3J0X21pbl9wbXR1OwotCQlpZiAoIXBlZXItPnBtdHVfZXhwaXJlcyB8fCBtdHUgPCBwZWVyLT5wbXR1X2xlYXJuZWQpIHsKLQkJCXVuc2lnbmVkIGxvbmcgcG10dV9leHBpcmVzOworCQlpZiAoIXBtdHVfZXhwaXJlcyB8fCBtdHUgPCBwZWVyLT5wbXR1X2xlYXJuZWQpIHsKIAogCQkJcG10dV9leHBpcmVzID0gamlmZmllcyArIGlwX3J0X210dV9leHBpcmVzOwogCQkJaWYgKCFwbXR1X2V4cGlyZXMpCkBAIC0xNjEyLDEzICsxNjI2LDE0IEBACiAJCQlydF9iaW5kX3BlZXIocnQsIHJ0LT5ydF9kc3QsIDApOwogCiAJCXBlZXIgPSBydC0+cGVlcjsKLQkJaWYgKHBlZXIgJiYgcGVlci0+cG10dV9leHBpcmVzKQorCQlpZiAocGVlcikgewogCQkJY2hlY2tfcGVlcl9wbXR1KGRzdCwgcGVlcik7CiAKLQkJaWYgKHBlZXIgJiYgcGVlci0+cmVkaXJlY3RfbGVhcm5lZC5hNCAmJgotCQkgICAgcGVlci0+cmVkaXJlY3RfbGVhcm5lZC5hNCAhPSBydC0+cnRfZ2F0ZXdheSkgewotCQkJaWYgKGNoZWNrX3BlZXJfcmVkaXIoZHN0LCBwZWVyKSkKLQkJCQlyZXR1cm4gTlVMTDsKKwkJCWlmIChwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICYmCisJCQkgICAgcGVlci0+cmVkaXJlY3RfbGVhcm5lZC5hNCAhPSBydC0+cnRfZ2F0ZXdheSkgeworCQkJCWlmIChjaGVja19wZWVyX3JlZGlyKGRzdCwgcGVlcikpCisJCQkJCXJldHVybiBOVUxMOworCQkJfQogCQl9CiAKIAkJcnQtPnJ0X3BlZXJfZ2VuaWQgPSBydF9wZWVyX2dlbmlkKCk7CkBAIC0xNjQ5LDE0ICsxNjY0LDggQEAKIAlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9IT1NUX1VOUkVBQ0gsIDApOwogCiAJcnQgPSBza2JfcnRhYmxlKHNrYik7Ci0JaWYgKHJ0ICYmCi0JICAgIHJ0LT5wZWVyICYmCi0JICAgIHJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMpIHsKLQkJdW5zaWduZWQgbG9uZyBvcmlnID0gcnQtPnBlZXItPnBtdHVfZXhwaXJlczsKLQotCQlpZiAoY21weGNoZygmcnQtPnBlZXItPnBtdHVfZXhwaXJlcywgb3JpZywgMCkgPT0gb3JpZykKLQkJCWRzdF9tZXRyaWNfc2V0KCZydC0+ZHN0LCBSVEFYX01UVSwgcnQtPnBlZXItPnBtdHVfb3JpZyk7Ci0JfQorCWlmIChydCAmJiBydC0+cGVlciAmJiBwZWVyX3BtdHVfY2xlYW5lZChydC0+cGVlcikpCisJCWRzdF9tZXRyaWNfc2V0KCZydC0+ZHN0LCBSVEFYX01UVSwgcnQtPnBlZXItPnBtdHVfb3JpZyk7CiB9CiAKIHN0YXRpYyBpbnQgaXBfcnRfYnVnKHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNzcwLDggKzE3NzksNyBAQAogCQkJICAgICAgIHNpemVvZih1MzIpICogUlRBWF9NQVgpOwogCQlkc3RfaW5pdF9tZXRyaWNzKCZydC0+ZHN0LCBwZWVyLT5tZXRyaWNzLCBmYWxzZSk7CiAKLQkJaWYgKHBlZXItPnBtdHVfZXhwaXJlcykKLQkJCWNoZWNrX3BlZXJfcG10dSgmcnQtPmRzdCwgcGVlcik7CisJCWNoZWNrX3BlZXJfcG10dSgmcnQtPmRzdCwgcGVlcik7CiAJCWlmIChwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICYmCiAJCSAgICBwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICE9IHJ0LT5ydF9nYXRld2F5KSB7CiAJCQlydC0+cnRfZ2F0ZXdheSA9IHBlZXItPnJlZGlyZWN0X2xlYXJuZWQuYTQ7CkBAIC0yNzc1LDcgKzI3ODMsOCBAQAogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwogCXN0cnVjdCBydG1zZyAqcjsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKLQlsb25nIGV4cGlyZXM7CisJbG9uZyBleHBpcmVzID0gMDsKKwljb25zdCBzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcnQtPnBlZXI7CiAJdTMyIGlkID0gMCwgdHMgPSAwLCB0c2FnZSA9IDAsIGVycm9yOwogCiAJbmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKnIpLCBmbGFncyk7CkBAIC0yODIzLDE1ICsyODMyLDE2IEBACiAJCU5MQV9QVVRfQkUzMihza2IsIFJUQV9NQVJLLCBydC0+cnRfbWFyayk7CiAKIAllcnJvciA9IHJ0LT5kc3QuZXJyb3I7Ci0JZXhwaXJlcyA9IChydC0+cGVlciAmJiBydC0+cGVlci0+cG10dV9leHBpcmVzKSA/Ci0JCXJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMgLSBqaWZmaWVzIDogMDsKLQlpZiAocnQtPnBlZXIpIHsKKwlpZiAocGVlcikgewogCQlpbmV0X3BlZXJfcmVmY2hlY2socnQtPnBlZXIpOwotCQlpZCA9IGF0b21pY19yZWFkKCZydC0+cGVlci0+aXBfaWRfY291bnQpICYgMHhmZmZmOwotCQlpZiAocnQtPnBlZXItPnRjcF90c19zdGFtcCkgewotCQkJdHMgPSBydC0+cGVlci0+dGNwX3RzOwotCQkJdHNhZ2UgPSBnZXRfc2Vjb25kcygpIC0gcnQtPnBlZXItPnRjcF90c19zdGFtcDsKKwkJaWQgPSBhdG9taWNfcmVhZCgmcGVlci0+aXBfaWRfY291bnQpICYgMHhmZmZmOworCQlpZiAocGVlci0+dGNwX3RzX3N0YW1wKSB7CisJCQl0cyA9IHBlZXItPnRjcF90czsKKwkJCXRzYWdlID0gZ2V0X3NlY29uZHMoKSAtIHBlZXItPnRjcF90c19zdGFtcDsKIAkJfQorCQlleHBpcmVzID0gQUNDRVNTX09OQ0UocGVlci0+cG10dV9leHBpcmVzKTsKKwkJaWYgKGV4cGlyZXMpCisJCQlleHBpcmVzIC09IGppZmZpZXM7CiAJfQogCiAJaWYgKHJ0X2lzX2lucHV0X3JvdXRlKHJ0KSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggYjc5MTlmOS4uZDQ1MGEyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0yNzIsNiArMjcyLDEwIEBACiAKIAlpZiAoYWRkcl9sZW4gPCBTSU42X0xFTl9SRkMyMTMzKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGRyLT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZSgmYWRkci0+c2luNl9hZGRyKTsKIAlpZiAoKGFkZHJfdHlwZSAmIElQVjZfQUREUl9NVUxUSUNBU1QpICYmIHNvY2stPnR5cGUgPT0gU09DS19TVFJFQU0pCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IDQxM2FiMDcuLjA2NWZlNDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTQwMyw3ICs0MDMsOCBAQAogc3RhdGljIGlubGluZSB2b2lkCiBfX2lwcV9yY3Zfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHN0YXR1cywgdHlwZSwgcGlkLCBmbGFncywgbmxtc2dsZW4sIHNrYmxlbjsKKwlpbnQgc3RhdHVzLCB0eXBlLCBwaWQsIGZsYWdzOworCXVuc2lnbmVkIGludCBubG1zZ2xlbiwgc2tibGVuOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCiAJc2tibGVuID0gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwppbmRleCBjOGFmNThiLi40MTExMDUwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJLyogVGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBoZWxwZXI6IGFzIHRoZSBwYWNrZXQgZ29lcyBvdXQuICovCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKLQlpZiAoIWN0IHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpCisJaWYgKCFjdCB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRF9SRVBMWSkKIAkJZ290byBvdXQ7CiAKIAloZWxwID0gbmZjdF9oZWxwKGN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IDFkZjNjOGIuLjdjMDVlN2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJLyogVXBkYXRlIHNrYiB0byByZWZlciB0byB0aGlzIGNvbm5lY3Rpb24gKi8KIAlza2ItPm5mY3QgPSAmbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKS0+Y3RfZ2VuZXJhbDsKIAlza2ItPm5mY3RpbmZvID0gKmN0aW5mbzsKLQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwlyZXR1cm4gTkZfQUNDRVBUOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmlhcC5jIGIvbmV0L2lyZGEvaXJpYXAuYwppbmRleCAzNjQ3NzUzLi5mODc2ZWVkIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmlhcC5jCisrKyBiL25ldC9pcmRhL2lyaWFwLmMKQEAgLTg3LDYgKzg3LDggQEAKIAkJCSBpcmlhcF93YXRjaGRvZ190aW1lcl9leHBpcmVkKTsKIH0KIAorc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpcmlhc19vYmplY3RzX2tleTsKKwogLyoKICAqIEZ1bmN0aW9uIGlyaWFwX2luaXQgKHZvaWQpCiAgKgpAQCAtMTE0LDYgKzExNiw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKCZpcmlhc19vYmplY3RzLT5oYl9zcGlubG9jaywgJmlyaWFzX29iamVjdHNfa2V5LAorCQkJCSAgICJpcmlhc19vYmplY3RzIik7CisKIAkvKgogCSAqICBSZWdpc3RlciBzb21lIGRlZmF1bHQgc2VydmljZXMgZm9yIElyTE1QCiAJICovCmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYyBiL25ldC9sMnRwL2wydHBfZGVidWdmcy5jCmluZGV4IGI4ZGJhZTguLjc2MTMwMTMgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jCisrKyBiL25ldC9sMnRwL2wydHBfZGVidWdmcy5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAkgKi8KIAlwZC0+bmV0ID0gZ2V0X25ldF9uc19ieV9waWQoY3VycmVudC0+cGlkKTsKIAlpZiAoSVNfRVJSKHBkLT5uZXQpKSB7Ci0JCXJjID0gLVBUUl9FUlIocGQtPm5ldCk7CisJCXJjID0gUFRSX0VSUihwZC0+bmV0KTsKIAkJZ290byBlcnJfZnJlZV9wZDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDQyMWVhYTYuLjU2YzI0Y2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtOTY1LDYgKzk2NSwxMCBAQAogCiAJbXV0ZXhfbG9jaygmc2RhdGEtPnUuaWJzcy5tdHgpOwogCisJc2RhdGEtPnUuaWJzcy5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOworCW1lbXNldChzZGF0YS0+dS5pYnNzLmJzc2lkLCAwLCBFVEhfQUxFTik7CisJc2RhdGEtPnUuaWJzcy5zc2lkX2xlbiA9IDA7CisKIAlhY3RpdmVfaWJzcyA9IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpOwogCiAJaWYgKCFhY3RpdmVfaWJzcyAmJiAhaXNfemVyb19ldGhlcl9hZGRyKGlmaWJzcy0+YnNzaWQpKSB7CkBAIC05OTksOCArMTAwMyw2IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAKIAlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT5za2JfcXVldWUpOwotCW1lbXNldChzZGF0YS0+dS5pYnNzLmJzc2lkLCAwLCBFVEhfQUxFTik7Ci0Jc2RhdGEtPnUuaWJzcy5zc2lkX2xlbiA9IDA7CiAKIAlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUuaWJzcy50aW1lcik7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggMjAyNWFmNS4uMDkwYjBlYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTc3NSw5ICs3NzUsNiBAQAogCiAJaW50IHR4X2hlYWRyb29tOyAvKiByZXF1aXJlZCBoZWFkcm9vbSBmb3IgaGFyZHdhcmUvcmFkaW90YXAgKi8KIAotCS8qIGNvdW50IGZvciBrZXlzIG5lZWRpbmcgdGFpbHJvb20gc3BhY2UgYWxsb2NhdGlvbiAqLwotCWludCBjcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudDsKLQogCS8qIFRhc2tsZXQgYW5kIHNrYiBxdWV1ZSB0byBwcm9jZXNzIGNhbGxzIGZyb20gSVJRIG1vZGUuIEFsbCBmcmFtZXMKIAkgKiBhZGRlZCB0byBza2JfcXVldWUgd2lsbCBiZSBwcm9jZXNzZWQsIGJ1dCBmcmFtZXMgaW4KIAkgKiBza2JfcXVldWVfdW5yZWxpYWJsZSBtYXkgYmUgZHJvcHBlZCBpZiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZXNlCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDQ5ZDRmODYuLmRlZTMwYWUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0xMTQ1LDYgKzExNDUsMTAgQEAKIAkJCQkrIElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NOwogCW5kZXYtPm5lZWRlZF90YWlscm9vbSA9IElFRUU4MDIxMV9FTkNSWVBUX1RBSUxST09NOwogCisJcmV0ID0gZGV2X2FsbG9jX25hbWUobmRldiwgbmRldi0+bmFtZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbDsKKwogCWllZWU4MDIxMV9hc3NpZ25fcGVybV9hZGRyKGxvY2FsLCBuZGV2LCB0eXBlKTsKIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIG5kZXYtPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKG5kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuYwppbmRleCAzMWFmZDcxMi4uZjgyNWUyZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5jCisrKyBiL25ldC9tYWM4MDIxMS9rZXkuYwpAQCAtMTAxLDExICsxMDEsNiBAQAogCiAJaWYgKCFyZXQpIHsKIAkJa2V5LT5mbGFncyB8PSBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTsKLQotCQlpZiAoISgoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpIHx8Ci0JCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpKSkKLQkJCWtleS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250LS07Ci0KIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjEsMTAgKzE1Niw2IEBACiAJCQkgIGtleS0+Y29uZi5rZXlpZHgsIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIsIHJldCk7CiAKIAlrZXktPmZsYWdzICY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTsKLQotCWlmICghKChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQykgfHwKLQkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSkpCi0JCWtleS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250Kys7CiB9CiAKIHZvaWQgaWVlZTgwMjExX2tleV9yZW1vdmVkKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleV9jb25mKQpAQCAtNDAzLDEwICszOTQsOCBAQAogCQlpZWVlODAyMTFfYWVzX2tleV9mcmVlKGtleS0+dS5jY21wLnRmbSk7CiAJaWYgKGtleS0+Y29uZi5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMpCiAJCWllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShrZXktPnUuYWVzX2NtYWMudGZtKTsKLQlpZiAoa2V5LT5sb2NhbCkgeworCWlmIChrZXktPmxvY2FsKQogCQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlKGtleSk7Ci0JCWtleS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250LS07Ci0JfQogCiAJa2ZyZWUoa2V5KTsKIH0KQEAgLTQ2OCw4ICs0NTcsNiBAQAogCiAJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChrZXkpOwogCi0Ja2V5LT5sb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQrKzsKLQogCXJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CiAKIAltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CkBAIC01MTEsMTIgKzQ5OCw4IEBACiAKIAltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogCi0Jc2RhdGEtPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkgewotCQlzZGF0YS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250Kys7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShrZXksICZzZGF0YS0+a2V5X2xpc3QsIGxpc3QpCiAJCWllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7Ci0JfQogCiAJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggNGY2YjI2Ny4uZDU5NTI2NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xMDg5LDYgKzEwODksNyBAQAogCQlsb2NhbC0+aHcuY29uZi5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7CiAJCWNvbmZpZ19jaGFuZ2VkIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUzsKIAl9CisJbG9jYWwtPnBzX3NkYXRhID0gTlVMTDsKIAogCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIGNvbmZpZ19jaGFuZ2VkKTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggMjdhZjY3Mi4uNThmZmE3ZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYworKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zX3BhcmFtcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxuZXQvc2NoX2dlbmVyaWMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDY0ZTBmNzUuLjMxMDRjODQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0xNDgwLDcgKzE0ODAsMTIgQEAKIHsKIAlpbnQgdGFpbF9uZWVkID0gMDsKIAotCWlmIChtYXlfZW5jcnlwdCAmJiBsb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQpIHsKKwkvKgorCSAqIFRoaXMgY291bGQgYmUgb3B0aW1pc2VkLCBkZXZpY2VzIHRoYXQgZG8gZnVsbCBoYXJkd2FyZQorCSAqIGNyeXB0byAoaW5jbHVkaW5nIFRLSVAgTU1JQykgbmVlZCBubyB0YWlscm9vbS4uLiBCdXQgd2UKKwkgKiBoYXZlIG5vIGRyaXZlcnMgZm9yIHN1Y2ggZGV2aWNlcyBjdXJyZW50bHkuCisJICovCisJaWYgKG1heV9lbmNyeXB0KSB7CiAJCXRhaWxfbmVlZCA9IElFRUU4MDIxMV9FTkNSWVBUX1RBSUxST09NOwogCQl0YWlsX25lZWQgLT0gc2tiX3RhaWxyb29tKHNrYik7CiAJCXRhaWxfbmVlZCA9IG1heF90KGludCwgdGFpbF9uZWVkLCAwKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwppbmRleCA4MDQxYmVmLi40MmFhNjRiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCkBAIC03NjcsNyArNzY3LDcgQEAKIAlpZiAoIWF0dHJbSVBTRVRfQVRUUl9TRVROQU1FXSkgewogCQlmb3IgKGkgPSAwOyBpIDwgaXBfc2V0X21heDsgaSsrKSB7CiAJCQlpZiAoaXBfc2V0X2xpc3RbaV0gIT0gTlVMTCAmJiBpcF9zZXRfbGlzdFtpXS0+cmVmKSB7Ci0JCQkJcmV0ID0gSVBTRVRfRVJSX0JVU1k7CisJCQkJcmV0ID0gLUlQU0VUX0VSUl9CVVNZOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwppbmRleCA0NzQzZTU0Li41NjVhN2M1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMKQEAgLTE0Niw4ICsxNDYsOSBAQAogewogCWNvbnN0IHN0cnVjdCBpcF9zZXRfaGFzaCAqaCA9IHNldC0+ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0+dmFyaWFudC0+YWR0W2FkdF07Ci0Jc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGRhdGEgPQotCQl7IC5jaWRyID0gaC0+bmV0c1swXS5jaWRyIHx8IEhPU1RfTUFTSyB9OworCXN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBkYXRhID0geworCQkuY2lkciA9IGgtPm5ldHNbMF0uY2lkciA/IGgtPm5ldHNbMF0uY2lkciA6IEhPU1RfTUFTSworCX07CiAKIAlpZiAoZGF0YS5jaWRyID09IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzk0LDggKzM5NSw5IEBACiB7CiAJY29uc3Qgc3RydWN0IGlwX3NldF9oYXNoICpoID0gc2V0LT5kYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LT52YXJpYW50LT5hZHRbYWR0XTsKLQlzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZGF0YSA9Ci0JCXsgLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgfHwgSE9TVF9NQVNLIH07CisJc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtIGRhdGEgPSB7CisJCS5jaWRyID0gaC0+bmV0c1swXS5jaWRyID8gaC0+bmV0c1swXS5jaWRyIDogSE9TVF9NQVNLCisJfTsKIAogCWlmIChkYXRhLmNpZHIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYwppbmRleCBjNGRiMjAyLi4yYWVlYWJjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMKQEAgLTEzMSw3ICsxMzEsOSBAQAogewogCWNvbnN0IHN0cnVjdCBpcF9zZXRfaGFzaCAqaCA9IHNldC0+ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0+dmFyaWFudC0+YWR0W2FkdF07Ci0Jc3RydWN0IGhhc2hfbmV0NF9lbGVtIGRhdGEgPSB7IC5jaWRyID0gaC0+bmV0c1swXS5jaWRyIHx8IEhPU1RfTUFTSyB9OworCXN0cnVjdCBoYXNoX25ldDRfZWxlbSBkYXRhID0geworCQkuY2lkciA9IGgtPm5ldHNbMF0uY2lkciA/IGgtPm5ldHNbMF0uY2lkciA6IEhPU1RfTUFTSworCX07CiAKIAlpZiAoZGF0YS5jaWRyID09IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjk2LDcgKzI5OCw5IEBACiB7CiAJY29uc3Qgc3RydWN0IGlwX3NldF9oYXNoICpoID0gc2V0LT5kYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LT52YXJpYW50LT5hZHRbYWR0XTsKLQlzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gZGF0YSA9IHsgLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgfHwgSE9TVF9NQVNLIH07CisJc3RydWN0IGhhc2hfbmV0Nl9lbGVtIGRhdGEgPSB7CisJCS5jaWRyID0gaC0+bmV0c1swXS5jaWRyID8gaC0+bmV0c1swXS5jaWRyIDogSE9TVF9NQVNLCisJfTsKIAogCWlmIChkYXRhLmNpZHIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jCmluZGV4IGQyYTQwMzYuLmU1MGQ5YmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jCkBAIC0xNDQsNyArMTQ0LDggQEAKIAljb25zdCBzdHJ1Y3QgaXBfc2V0X2hhc2ggKmggPSBzZXQtPmRhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtPnZhcmlhbnQtPmFkdFthZHRdOwogCXN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gZGF0YSA9IHsKLQkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgfHwgSE9TVF9NQVNLIH07CisJCS5jaWRyID0gaC0+bmV0c1swXS5jaWRyID8gaC0+bmV0c1swXS5jaWRyIDogSE9TVF9NQVNLCisJfTsKIAogCWlmIChkYXRhLmNpZHIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNTcsNyArMzU4LDggQEAKIAljb25zdCBzdHJ1Y3QgaXBfc2V0X2hhc2ggKmggPSBzZXQtPmRhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtPnZhcmlhbnQtPmFkdFthZHRdOwogCXN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZGF0YSA9IHsKLQkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgfHwgSE9TVF9NQVNLIH07CisJCS5jaWRyID0gaC0+bmV0c1swXS5jaWRyID8gaC0+bmV0c1swXS5jaWRyIDogSE9TVF9NQVNLCisJfTsKIAogCWlmIChkYXRhLmNpZHIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCBiZmE4MDhmLi41NWFmMjI0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTE3NzIsNyArMTc3Miw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gOTksCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU1JDIC0gMiwKIAl9LAogCS8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGZvcndhcmQgcGFja2V0IHRocm91Z2ggVlMvRFIsIFZTL1RVTiwKIAkgKiBvciBWUy9OQVQoY2hhbmdlIGRlc3RpbmF0aW9uKSwgc28gdGhhdCBmaWx0ZXJpbmcgcnVsZXMgY2FuIGJlCkBAIC0xNzgyLDcgKzE3ODIsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBQRl9JTkVULAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCi0JCS5wcmlvcml0eQk9IDEwMSwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMgLSAxLAogCX0sCiAJLyogQmVmb3JlIGlwX3ZzX2luLCBjaGFuZ2Ugc291cmNlIG9ubHkgZm9yIFZTL05BVCAqLwogCXsKQEAgLTE3OTAsNyArMTc5MCw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JCS5wcmlvcml0eQk9IC05OSwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9EU1QgKyAxLAogCX0sCiAJLyogQWZ0ZXIgbWFuZ2xlLCBzY2hlZHVsZSBhbmQgZm9yd2FyZCBsb2NhbCByZXF1ZXN0cyAqLwogCXsKQEAgLTE3OTgsNyArMTc5OCw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JCS5wcmlvcml0eQk9IC05OCwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9EU1QgKyAyLAogCX0sCiAJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZyAoYnV0IGJlZm9yZSBpcF92c19vdXRfaWNtcCksIGNhdGNoIGljbXAKIAkgKiBkZXN0aW5lZCBmb3IgMC4wLjAuMC8wLCB3aGljaCBpcyBmb3IgaW5jb21pbmcgSVBWUyBjb25uZWN0aW9ucyAqLwpAQCAtMTgyNCw3ICsxODI0LDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVDYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gOTksCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX1NSQyAtIDIsCiAJfSwKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBmb3J3YXJkIHBhY2tldCB0aHJvdWdoIFZTL0RSLCBWUy9UVU4sCiAJICogb3IgVlMvTkFUKGNoYW5nZSBkZXN0aW5hdGlvbiksIHNvIHRoYXQgZmlsdGVyaW5nIHJ1bGVzIGNhbiBiZQpAQCAtMTgzNCw3ICsxODM0LDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVDYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gMTAxLAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX05BVF9TUkMgLSAxLAogCX0sCiAJLyogQmVmb3JlIGlwX3ZzX2luLCBjaGFuZ2Ugc291cmNlIG9ubHkgZm9yIFZTL05BVCAqLwogCXsKQEAgLTE4NDIsNyArMTg0Miw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JCS5wcmlvcml0eQk9IC05OSwKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9OQVRfRFNUICsgMSwKIAl9LAogCS8qIEFmdGVyIG1hbmdsZSwgc2NoZWR1bGUgYW5kIGZvcndhcmQgbG9jYWwgcmVxdWVzdHMgKi8KIAl7CkBAIC0xODUwLDcgKzE4NTAsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBQRl9JTkVUNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk4LAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX05BVF9EU1QgKyAyLAogCX0sCiAJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZyAoYnV0IGJlZm9yZSBpcF92c19vdXRfaWNtcCksIGNhdGNoIGljbXAKIAkgKiBkZXN0aW5lZCBmb3IgMC4wLjAuMC8wLCB3aGljaCBpcyBmb3IgaW5jb21pbmcgSVBWUyBjb25uZWN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDJlMWMxMWYuLmY3YWY4YjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTg1MCw3ICs4NTAsNyBAQAogCiAJLyogSXQgZXhpc3RzOyB3ZSBoYXZlIChub24tZXhjbHVzaXZlKSByZWZlcmVuY2UuICovCiAJaWYgKE5GX0NUX0RJUkVDVElPTihoKSA9PSBJUF9DVF9ESVJfUkVQTFkpIHsKLQkJKmN0aW5mbyA9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFk7CisJCSpjdGluZm8gPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWTsKIAkJLyogUGxlYXNlIHNldCByZXBseSBiaXQgaWYgdGhpcyBwYWNrZXQgT0sgKi8KIAkJKnNldF9yZXBseSA9IDE7CiAJfSBlbHNlIHsKQEAgLTkyMiw2ICs5MjIsOSBAQAogCQkJcmV0ID0gLXJldDsKIAkJCWdvdG8gb3V0OwogCQl9CisJCS8qIElDTVBbdjZdIHByb3RvY29sIHRyYWNrZXJzIG1heSBhc3NpZ24gb25lIGNvbm50cmFjay4gKi8KKwkJaWYgKHNrYi0+bmZjdCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCWN0ID0gcmVzb2x2ZV9ub3JtYWxfY3QobmV0LCB0bXBsLCBza2IsIGRhdGFvZmYsIHBmLCBwcm90b251bSwKQEAgLTExNDMsNyArMTE0Niw3IEBACiAJLyogVGhpcyBJQ01QIGlzIGluIHJldmVyc2UgZGlyZWN0aW9uIHRvIHRoZSBwYWNrZXQgd2hpY2ggY2F1c2VkIGl0ICovCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAlpZiAoQ1RJTkZPMkRJUihjdGluZm8pID09IElQX0NUX0RJUl9PUklHSU5BTCkKLQkJY3RpbmZvID0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZOworCQljdGluZm8gPSBJUF9DVF9SRUxBVEVEX1JFUExZOwogCWVsc2UKIAkJY3RpbmZvID0gSVBfQ1RfUkVMQVRFRDsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwppbmRleCBlMTdjYjdjLi42ZjU4MDFlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KIAlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKSB7CisJICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkgewogCQlwcl9kZWJ1ZygiZnRwOiBDb25udHJhY2tpbmZvID0gJXVcbiIsIGN0aW5mbyk7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwppbmRleCAxOGIyY2U1Li5mMDNjMmQ0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwpAQCAtNTcxLDEwICs1NzEsOSBAQAogCWludCByZXQ7CiAKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KLQlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKSB7CisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7Ci0JfQorCiAJcHJfZGVidWcoIm5mX2N0X2gyNDU6IHNrYmxlbiA9ICV1XG4iLCBza2ItPmxlbik7CiAKIAlzcGluX2xvY2tfYmgoJm5mX2gzMjNfbG9jayk7CkBAIC0xMTI1LDEwICsxMTI0LDkgQEAKIAlpbnQgcmV0OwogCiAJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24ndCBsb29rIGluIHBhY2tldHMuICovCi0JaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJgotCSAgICBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgKyBJUF9DVF9JU19SRVBMWSkgeworCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKQogCQlyZXR1cm4gTkZfQUNDRVBUOwotCX0KKwogCXByX2RlYnVnKCJuZl9jdF9xOTMxOiBza2JsZW4gPSAldVxuIiwgc2tiLT5sZW4pOwogCiAJc3Bpbl9sb2NrX2JoKCZuZl9oMzIzX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwppbmRleCBiMzk0YWEzLi40ZjkzOTBiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwpAQCAtMTI1LDggKzEyNSw3IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KLQlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKQorCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJLyogTm90IGEgZnVsbCB0Y3AgaGVhZGVyPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCmluZGV4IDA4ODk0NDguLjJmZDQ1NjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKQEAgLTUxOSw4ICs1MTksNyBAQAogCXVfaW50MTZfdCBtc2c7CiAKIAkvKiBkb24ndCBkbyBhbnkgdHJhY2tpbmcgYmVmb3JlIHRjcCBoYW5kc2hha2UgY29tcGxldGUgKi8KLQlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKQorCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJbmV4dGhkcl9vZmYgPSBwcm90b2ZmOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jCmluZGV4IGQ5ZTI3NzMuLjg1MDE4MjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAljdF9zYW5lX2luZm8gPSAmbmZjdF9oZWxwKGN0KS0+aGVscC5jdF9zYW5lX2luZm87CiAJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24ndCBsb29rIGluIHBhY2tldHMuICovCiAJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJgotCSAgICBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQrSVBfQ1RfSVNfUkVQTFkpCisJICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCS8qIE5vdCBhIGZ1bGwgdGNwIGhlYWRlcj8gKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKaW5kZXggY2I1YTI4NS4uOTNmYWY2YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKQEAgLTE0MjMsNyArMTQyMyw3IEBACiAJdHlwZW9mKG5mX25hdF9zaXBfc2VxX2FkanVzdF9ob29rKSBuZl9uYXRfc2lwX3NlcV9hZGp1c3Q7CiAKIAlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKQorCSAgICBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAkvKiBObyBEYXRhID8gKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc29ja2V0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jCmluZGV4IDljYzQ2MzUuLmZlMzlmN2UgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc29ja2V0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYwpAQCAtMTQzLDkgKzE0Myw5IEBACiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAlpZiAoY3QgJiYgIW5mX2N0X2lzX3VudHJhY2tlZChjdCkgJiYKIAkgICAgKChpcGgtPnByb3RvY29sICE9IElQUFJPVE9fSUNNUCAmJgotCSAgICAgIGN0aW5mbyA9PSBJUF9DVF9JU19SRVBMWSArIElQX0NUX0VTVEFCTElTSEVEKSB8fAorCSAgICAgIGN0aW5mbyA9PSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkgfHwKIAkgICAgIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fSUNNUCAmJgotCSAgICAgIGN0aW5mbyA9PSBJUF9DVF9JU19SRVBMWSArIElQX0NUX1JFTEFURUQpKSAmJgorCSAgICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEX1JFUExZKSkgJiYKIAkgICAgKGN0LT5zdGF0dXMgJiBJUFNfU1JDX05BVF9ET05FKSkgewogCiAJCWRhZGRyID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy51My5pcDsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IDkyNWY3MTUuLmMwYzNjZGEgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtNzk4LDcgKzc5OCwxMyBAQAogCQkJZ2V0bnN0aW1lb2ZkYXkoJnRzKTsKIAkJaC5oMi0+dHBfc2VjID0gdHMudHZfc2VjOwogCQloLmgyLT50cF9uc2VjID0gdHMudHZfbnNlYzsKLQkJaC5oMi0+dHBfdmxhbl90Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQkJaC5oMi0+dHBfdmxhbl90Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJCXN0YXR1cyB8PSBUUF9TVEFUVVNfVkxBTl9WQUxJRDsKKwkJfSBlbHNlIHsKKwkJCWguaDItPnRwX3ZsYW5fdGNpID0gMDsKKwkJfQorCQloLmgyLT50cF9wYWRkaW5nID0gMDsKIAkJaGRybGVuID0gc2l6ZW9mKCpoLmgyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE3MjUsOCArMTczMSwxMyBAQAogCQlhdXgudHBfc25hcGxlbiA9IHNrYi0+bGVuOwogCQlhdXgudHBfbWFjID0gMDsKIAkJYXV4LnRwX25ldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpOwotCQlhdXgudHBfdmxhbl90Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKLQorCQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCQlhdXgudHBfdmxhbl90Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJCWF1eC50cF9zdGF0dXMgfD0gVFBfU1RBVFVTX1ZMQU5fVkFMSUQ7CisJCX0gZWxzZSB7CisJCQlhdXgudHBfdmxhbl90Y2kgPSAwOworCQl9CisJCWF1eC50cF9wYWRkaW5nID0gMDsKIAkJcHV0X2Ntc2cobXNnLCBTT0xfUEFDS0VULCBQQUNLRVRfQVVYREFUQSwgc2l6ZW9mKGF1eCksICZhdXgpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCBiMTcyMWQ3Li5iNGM2ODA5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtMjUxLDkgKzI1MSw4IEBACiAJCQl9CiAKIAkJCWlmIChzb21lX3F1ZXVlX3RpbWVkb3V0KSB7Ci0JCQkJY2hhciBkcml2ZXJuYW1lWzY0XTsKIAkJCQlXQVJOX09OQ0UoMSwgS0VSTl9JTkZPICJORVRERVYgV0FUQ0hET0c6ICVzICglcyk6IHRyYW5zbWl0IHF1ZXVlICV1IHRpbWVkIG91dFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBuZXRkZXZfZHJpdmVybmFtZShkZXYsIGRyaXZlcm5hbWUsIDY0KSwgaSk7CisJCQkJICAgICAgIGRldi0+bmFtZSwgbmV0ZGV2X2RyaXZlcm5hbWUoZGV2KSwgaSk7CiAJCQkJZGV2LT5uZXRkZXZfb3BzLT5uZG9fdHhfdGltZW91dChkZXYpOwogCQkJfQogCQkJaWYgKCFtb2RfdGltZXIoJmRldi0+d2F0Y2hkb2dfdGltZXIsCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCmluZGV4IDUyNWY5N2MuLjRhNjI4ODggMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2Fzc29jaW9sYS5jCisrKyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCkBAIC00NDQsMTUgKzQ0NCw3IEBACiAKIAlhc29jLT5wZWVyLnRyYW5zcG9ydF9jb3VudCA9IDA7CiAKLQkvKiBGcmVlIGFueSBjYWNoZWQgQVNDT05GX0FDSyBjaHVuay4gKi8KLQlzY3RwX2Fzc29jX2ZyZWVfYXNjb25mX2Fja3MoYXNvYyk7Ci0KLQkvKiBGcmVlIHRoZSBBU0NPTkYgcXVldWUuICovCi0Jc2N0cF9hc3NvY19mcmVlX2FzY29uZl9xdWV1ZShhc29jKTsKLQotCS8qIEZyZWUgYW55IGNhY2hlZCBBU0NPTkYgY2h1bmsuICovCi0JaWYgKGFzb2MtPmFkZGlwX2xhc3RfYXNjb25mKQotCQlzY3RwX2NodW5rX2ZyZWUoYXNvYy0+YWRkaXBfbGFzdF9hc2NvbmYpOworCXNjdHBfYXNjb25mX3F1ZXVlX3RlYXJkb3duKGFzb2MpOwogCiAJLyogQVVUSCAtIEZyZWUgdGhlIGVuZHBvaW50IHNoYXJlZCBrZXlzICovCiAJc2N0cF9hdXRoX2Rlc3Ryb3lfa2V5cygmYXNvYy0+ZW5kcG9pbnRfc2hhcmVkX2tleXMpOwpAQCAtMTY0NiwzICsxNjM4LDE2IEBACiAKIAlyZXR1cm4gTlVMTDsKIH0KKwordm9pZCBzY3RwX2FzY29uZl9xdWV1ZV90ZWFyZG93bihzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwkvKiBGcmVlIGFueSBjYWNoZWQgQVNDT05GX0FDSyBjaHVuay4gKi8KKwlzY3RwX2Fzc29jX2ZyZWVfYXNjb25mX2Fja3MoYXNvYyk7CisKKwkvKiBGcmVlIHRoZSBBU0NPTkYgcXVldWUuICovCisJc2N0cF9hc3NvY19mcmVlX2FzY29uZl9xdWV1ZShhc29jKTsKKworCS8qIEZyZWUgYW55IGNhY2hlZCBBU0NPTkYgY2h1bmsuICovCisJaWYgKGFzb2MtPmFkZGlwX2xhc3RfYXNjb25mKQorCQlzY3RwX2NodW5rX2ZyZWUoYXNvYy0+YWRkaXBfbGFzdF9hc2NvbmYpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IGQ2MTJjYTEuLjUzNGMyZTUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTE2NzAsNiArMTY3MCw5IEBACiAJCWNhc2UgU0NUUF9DTURfU0VORF9ORVhUX0FTQ09ORjoKIAkJCXNjdHBfY21kX3NlbmRfYXNjb25mKGFzb2MpOwogCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9DTURfUFVSR0VfQVNDT05GX1FVRVVFOgorCQkJc2N0cF9hc2NvbmZfcXVldWVfdGVhcmRvd24oYXNvYyk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByX3dhcm4oIkltcG9zc2libGUgY29tbWFuZDogJXUsICVwXG4iLAogCQkJCWNtZC0+dmVyYiwgY21kLT5vYmoucHRyKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggN2Y0YTRmOC4uYTI5NzI4MyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTE3MTgsMTEgKzE3MTgsMjEgQEAKIAkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTsKIAl9CiAKLQkvKiBGb3Igbm93LCBmYWlsIGFueSB1bnNlbnQvdW5hY2tlZCBkYXRhLiAgQ29uc2lkZXIgdGhlIG9wdGlvbmFsCi0JICogY2hvaWNlIG9mIHJlc2VuZGluZyBvZiB0aGlzIGRhdGEuCisJLyogRm9yIG5vdywgc3RvcCBwZW5kaW5nIFQzLXJ0eCBhbmQgU0FDSyB0aW1lcnMsIGZhaWwgYW55IHVuc2VudC91bmFja2VkCisJICogZGF0YS4gQ29uc2lkZXIgdGhlIG9wdGlvbmFsIGNob2ljZSBvZiByZXNlbmRpbmcgb2YgdGhpcyBkYXRhLgogCSAqLworCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVDNfUlRYX1RJTUVSU19TVE9QLCBTQ1RQX05VTEwoKSk7CisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9TVE9QLAorCQkJU0NUUF9UTyhTQ1RQX0VWRU5UX1RJTUVPVVRfU0FDSykpOwogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUFVSR0VfT1VUUVVFVUUsIFNDVFBfTlVMTCgpKTsKIAorCS8qIFN0b3AgcGVuZGluZyBUNC1ydG8gdGltZXIsIHRlYXJkb3duIEFTQ09ORiBxdWV1ZSwgQVNDT05GLUFDSyBxdWV1ZQorCSAqIGFuZCBBU0NPTkYtQUNLIGNhY2hlLgorCSAqLworCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVElNRVJfU1RPUCwKKwkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1Q0X1JUTykpOworCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUFVSR0VfQVNDT05GX1FVRVVFLCBTQ1RQX05VTEwoKSk7CisKIAlyZXBsID0gc2N0cF9tYWtlX2Nvb2tpZV9hY2sobmV3X2Fzb2MsIGNodW5rKTsKIAlpZiAoIXJlcGwpCiAJCWdvdG8gbm9tZW07CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCBlYzgzZjQxLi45OGZhOGViIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTM0MDYsMTIgKzM0MDYsMTIgQEAKIAlpID0gMDsKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdKSB7CiAJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLCB0bXApIHsKLQkJCWlmIChyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJCWlmIChubGFfbGVuKGF0dHIpID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewogCQkJCWVyciA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KLQkJCW1lbWNweShyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSk7CiAJCQlyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA9IG5sYV9sZW4oYXR0cik7CisJCQltZW1jcHkocmVxdWVzdC0+c3NpZHNbaV0uc3NpZCwgbmxhX2RhdGEoYXR0ciksIG5sYV9sZW4oYXR0cikpOwogCQkJaSsrOwogCQl9CiAJfQpAQCAtMzU3MiwxNCArMzU3MiwxMyBAQAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pIHsKIAkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10sCiAJCQkJICAgIHRtcCkgewotCQkJaWYgKHJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID4KLQkJCSAgICBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CisJCQlpZiAobmxhX2xlbihhdHRyKSA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CisJCQlyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA9IG5sYV9sZW4oYXR0cik7CiAJCQltZW1jcHkocmVxdWVzdC0+c3NpZHNbaV0uc3NpZCwgbmxhX2RhdGEoYXR0ciksCiAJCQkgICAgICAgbmxhX2xlbihhdHRyKSk7Ci0JCQlyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA9IG5sYV9sZW4oYXR0cik7CiAJCQlpKys7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwppbmRleCA3M2E0NDFkLi43YTZjNjc2IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jCisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmMKQEAgLTI2NywxMyArMjY3LDM1IEBACiAJcmV0dXJuIG1lbWNtcChzc2lkaWUgKyAyLCBzc2lkLCBzc2lkX2xlbikgPT0gMDsKIH0KIAorc3RhdGljIGJvb2wgaXNfbWVzaF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYSkKK3sKKwljb25zdCB1OCAqaWU7CisKKwlpZiAoIVdMQU5fQ0FQQUJJTElUWV9JU19TVEFfQlNTKGEtPmNhcGFiaWxpdHkpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZSA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwKKwkJCSAgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAoIWllKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZSA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfTUVTSF9DT05GSUcsCisJCQkgICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJaWYgKCFpZSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBib29sIGlzX21lc2goc3RydWN0IGNmZzgwMjExX2JzcyAqYSwKIAkJICAgIGNvbnN0IHU4ICptZXNoaWQsIHNpemVfdCBtZXNoaWRsZW4sCiAJCSAgICBjb25zdCB1OCAqbWVzaGNmZykKIHsKIAljb25zdCB1OCAqaWU7CiAKLQlpZiAoIVdMQU5fQ0FQQUJJTElUWV9JU19NQlNTKGEtPmNhcGFiaWxpdHkpKQorCWlmICghV0xBTl9DQVBBQklMSVRZX0lTX1NUQV9CU1MoYS0+Y2FwYWJpbGl0eSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWllID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9NRVNIX0lELApAQCAtMzExLDcgKzMzMyw3IEBACiAJaWYgKGEtPmNoYW5uZWwgIT0gYi0+Y2hhbm5lbCkKIAkJcmV0dXJuIGItPmNoYW5uZWwtPmNlbnRlcl9mcmVxIC0gYS0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXE7CiAKLQlpZiAoV0xBTl9DQVBBQklMSVRZX0lTX01CU1MoYS0+Y2FwYWJpbGl0eSB8IGItPmNhcGFiaWxpdHkpKSB7CisJaWYgKGlzX21lc2hfYnNzKGEpICYmIGlzX21lc2hfYnNzKGIpKSB7CiAJCXIgPSBjbXBfaWVzKFdMQU5fRUlEX01FU0hfSUQsCiAJCQkgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCiAJCQkgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLApAQCAtNDU3LDcgKzQ3OSw2IEBACiAJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXMpCiB7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqZm91bmQgPSBOVUxMOwotCWNvbnN0IHU4ICptZXNoaWQsICptZXNoY2ZnOwogCiAJLyoKIAkgKiBUaGUgcmVmZXJlbmNlIHRvICJyZXMiIGlzIGRvbmF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4KQEAgLTQ3MCwyMiArNDkxLDYgQEAKIAogCXJlcy0+dHMgPSBqaWZmaWVzOwogCi0JaWYgKFdMQU5fQ0FQQUJJTElUWV9JU19NQlNTKHJlcy0+cHViLmNhcGFiaWxpdHkpKSB7Ci0JCS8qIG11c3QgYmUgbWVzaCwgdmVyaWZ5ICovCi0JCW1lc2hpZCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwKLQkJCQkJICByZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywKLQkJCQkJICByZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOwotCQltZXNoY2ZnID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKLQkJCQkJICAgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCi0JCQkJCSAgIHJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7Ci0JCWlmICghbWVzaGlkIHx8ICFtZXNoY2ZnIHx8Ci0JCSAgICBtZXNoY2ZnWzFdICE9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hjb25mX2llKSkgewotCQkJLyogYm9ndXMgbWVzaCAqLwotCQkJa3JlZl9wdXQoJnJlcy0+cmVmLCBic3NfcmVsZWFzZSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQogCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CiAKIAlmb3VuZCA9IHJiX2ZpbmRfYnNzKGRldiwgcmVzKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMgYi9uZXQveGZybS94ZnJtX3JlcGxheS5jCmluZGV4IDQ3ZjFiODYuLmIxMWVhNjkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMKKysrIGIvbmV0L3hmcm0veGZybV9yZXBsYXkuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJCQliaXRuciA9IGJpdG5yICYgMHgxRjsKIAkJCXJlcGxheV9lc24tPmJtcFtucl0gfD0gKDFVIDw8IGJpdG5yKTsKIAkJfSBlbHNlIHsKLQkJCW5yID0gcmVwbGF5X2Vzbi0+cmVwbGF5X3dpbmRvdyA+PiA1OworCQkJbnIgPSAocmVwbGF5X2Vzbi0+cmVwbGF5X3dpbmRvdyAtIDEpID4+IDU7CiAJCQlmb3IgKGkgPSAwOyBpIDw9IG5yOyBpKyspCiAJCQkJcmVwbGF5X2Vzbi0+Ym1wW2ldID0gMDsKIApAQCAtNDcxLDcgKzQ3MSw3IEBACiAJCQliaXRuciA9IGJpdG5yICYgMHgxRjsKIAkJCXJlcGxheV9lc24tPmJtcFtucl0gfD0gKDFVIDw8IGJpdG5yKTsKIAkJfSBlbHNlIHsKLQkJCW5yID0gcmVwbGF5X2Vzbi0+cmVwbGF5X3dpbmRvdyA+PiA1OworCQkJbnIgPSAocmVwbGF5X2Vzbi0+cmVwbGF5X3dpbmRvdyAtIDEpID4+IDU7CiAJCQlmb3IgKGkgPSAwOyBpIDw9IG5yOyBpKyspCiAJCQkJcmVwbGF5X2Vzbi0+Ym1wW2ldID0gMDsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5hc20tZ2VuZXJpYyBiL3NjcmlwdHMvTWFrZWZpbGUuYXNtLWdlbmVyaWMKaW5kZXggNDkwMTIyYy4uNDBjYWYzYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5hc20tZ2VuZXJpYworKysgYi9zY3JpcHRzL01ha2VmaWxlLmFzbS1nZW5lcmljCkBAIC0xNyw2ICsxNyw3IEBACiBjbWRfd3JhcCA9IGVjaG8gIlwjaW5jbHVkZSA8YXNtLWdlbmVyaWMvJCouaD4iID4kQAogCiBhbGw6ICQocGF0c3Vic3QgJSwgJChvYmopLyUsICQoZ2VuZXJpYy15KSkKKwlAOgogCiAkKG9iaikvJS5oOgogCSQoY2FsbCBjbWQsd3JhcCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZGVwbW9kLnNoIGIvc2NyaXB0cy9kZXBtb2Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2IwMjljYgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvZGVwbW9kLnNoCkBAIC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorIworIyBBIGRlcG1vZCB3cmFwcGVyIHVzZWQgYnkgdGhlIHRvcGxldmVsIE1ha2VmaWxlCisKK2lmIHRlc3QgJCMgLW5lIDI7IHRoZW4KKwllY2hvICJVc2FnZTogJDAgL3NiaW4vZGVwbW9kIDxrZXJuZWxyZWxlYXNlPiIgPiYyCisJZXhpdCAxCitmaQorREVQTU9EPSQxCitLRVJORUxSRUxFQVNFPSQyCisKK2lmICEgIiRERVBNT0QiIC1WIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSBtb2R1bGUtaW5pdC10b29sczsgdGhlbgorCWVjaG8gIldhcm5pbmc6IHlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIG1vZHVsZS1pbml0LXRvb2xzIiA+JjIKKwllY2hvICJTZWUgaHR0cDovL3d3dy5jb2RlbW9ua2V5Lm9yZy51ay9kb2NzL3Bvc3QtaGFsbG93ZWVuLTIuNi50eHQiID4mMgorCXNsZWVwIDEKK2ZpCisKK2lmICEgdGVzdCAtciBTeXN0ZW0ubWFwIC1hIC14ICIkREVQTU9EIjsgdGhlbgorCWV4aXQgMAorZmkKKyMgb2xkZXIgdmVyc2lvbnMgb2YgZGVwbW9kIHJlcXVpcmUgdGhlIHZlcnNpb24gc3RyaW5nIHRvIHN0YXJ0IHdpdGggdGhyZWUKKyMgbnVtYmVycywgc28gd2UgY2hlYXQgd2l0aCBhIHN5bWxpbmsgaGVyZQorZGVwbW9kX2hhY2tfbmVlZGVkPXRydWUKK21rZGlyIC1wIC50bXBfZGVwbW9kL2xpYi9tb2R1bGVzLyRLRVJORUxSRUxFQVNFCitpZiAiJERFUE1PRCIgLWIgLnRtcF9kZXBtb2QgJEtFUk5FTFJFTEVBU0UgMj4vZGV2L251bGw7IHRoZW4KKwlpZiB0ZXN0IC1lIC50bXBfZGVwbW9kL2xpYi9tb2R1bGVzLyRLRVJORUxSRUxFQVNFL21vZHVsZXMuZGVwIC1vIFwKKwkJLWUgLnRtcF9kZXBtb2QvbGliL21vZHVsZXMvJEtFUk5FTFJFTEVBU0UvbW9kdWxlcy5kZXAuYmluOyB0aGVuCisJCWRlcG1vZF9oYWNrX25lZWRlZD1mYWxzZQorCWZpCitmaQoraWYgJGRlcG1vZF9oYWNrX25lZWRlZDsgdGhlbgorCXN5bWxpbms9IiRJTlNUQUxMX01PRF9QQVRIL2xpYi9tb2R1bGVzLzk5Ljk4LiRLRVJORUxSRUxFQVNFIgorCWxuIC1zICIkS0VSTkVMUkVMRUFTRSIgIiRzeW1saW5rIgorCUtFUk5FTFJFTEVBU0U9OTkuOTguJEtFUk5FTFJFTEVBU0UKK2ZpCisKK3NldCAtLSAtYWUgLUYgU3lzdGVtLm1hcAoraWYgdGVzdCAtbiAiJElOU1RBTExfTU9EX1BBVEgiOyB0aGVuCisJc2V0IC0tICIkQCIgLWIgIiRJTlNUQUxMX01PRF9QQVRIIgorZmkKKyIkREVQTU9EIiAiJEAiICIkS0VSTkVMUkVMRUFTRSIKK3JldD0kPworCitpZiAkZGVwbW9kX2hhY2tfbmVlZGVkOyB0aGVuCisJcm0gLWYgIiRzeW1saW5rIgorZmkKKworZXhpdCAkcmV0CmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9sc20uYyBiL3NlY3VyaXR5L2FwcGFybW9yL2xzbS5jCmluZGV4IGFlM2E2OTguLjNkMmZkMTQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2FwcGFybW9yL2xzbS5jCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL2xzbS5jCkBAIC01OTMsNyArNTkzLDggQEAKIAkJCXNhLmFhZC5vcCA9IE9QX1NFVFBST0NBVFRSOwogCQkJc2EuYWFkLmluZm8gPSBuYW1lOwogCQkJc2EuYWFkLmVycm9yID0gLUVJTlZBTDsKLQkJCXJldHVybiBhYV9hdWRpdChBVURJVF9BUFBBUk1PUl9ERU5JRUQsIE5VTEwsIEdGUF9LRVJORUwsCisJCQlyZXR1cm4gYWFfYXVkaXQoQVVESVRfQVBQQVJNT1JfREVOSUVELAorCQkJCQlfX2FhX2N1cnJlbnRfcHJvZmlsZSgpLCBHRlBfS0VSTkVMLAogCQkJCQkmc2EsIE5VTEwpOwogCQl9CiAJfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImV4ZWMiKSA9PSAwKSB7CkBAIC02MTEsNyArNjEyLDcgQEAKIHN0YXRpYyBpbnQgYXBwYXJtb3JfdGFza19zZXRybGltaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQl1bnNpZ25lZCBpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKm5ld19ybGltKQogewotCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlID0gYWFfY3VycmVudF9wcm9maWxlKCk7CisJc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUgPSBfX2FhX2N1cnJlbnRfcHJvZmlsZSgpOwogCWludCBlcnJvciA9IDA7CiAKIAlpZiAoIXVuY29uZmluZWQocHJvZmlsZSkpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggYTBkMzg0NS4uMjAyMTllZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMTQ3Niw3ICsxNDc2LDYgQEAKIAkJCSAgdW5zaWduZWQgZmxhZ3MpCiB7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKLQlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJdTMyIHNpZDsKIAogCXZhbGlkYXRlX2NyZWRzKGNyZWQpOwpAQCAtMTQ4NywxNSArMTQ4NiwyMSBAQAogCXNpZCA9IGNyZWRfc2lkKGNyZWQpOwogCWlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKIAotCWlmICghYWRwKSB7Ci0JCWFkcCA9ICZhZDsKLQkJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElOT0RFKTsKLQkJYWQudS5pbm9kZSA9IGlub2RlOwotCX0KLQogCXJldHVybiBhdmNfaGFzX3Blcm1fZmxhZ3Moc2lkLCBpc2VjLT5zaWQsIGlzZWMtPnNjbGFzcywgcGVybXMsIGFkcCwgZmxhZ3MpOwogfQogCitzdGF0aWMgaW50IGlub2RlX2hhc19wZXJtX25vYWRwKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAorCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJdTMyIHBlcm1zLAorCQkJCXVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKKworCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBJTk9ERSk7CisJYWQudS5pbm9kZSA9IGlub2RlOworCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgcGVybXMsICZhZCwgZmxhZ3MpOworfQorCiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmcKICAgIHRoZSBkZW50cnkgdG8gaGVscCB0aGUgYXVkaXRpbmcgY29kZSB0byBtb3JlIGVhc2lseSBnZW5lcmF0ZSB0aGUKICAgIHBhdGhuYW1lIGlmIG5lZWRlZC4gKi8KQEAgLTIxMjIsOCArMjEyNyw4IEBACiAJCQkJCQlzdHJ1Y3QgdHR5X2ZpbGVfcHJpdmF0ZSwgbGlzdCk7CiAJCQlmaWxlID0gZmlsZV9wcml2LT5maWxlOwogCQkJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCQkJaWYgKGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLAotCQkJCQkgICBGSUxFX19SRUFEIHwgRklMRV9fV1JJVEUsIE5VTEwsIDApKSB7CisJCQlpZiAoaW5vZGVfaGFzX3Blcm1fbm9hZHAoY3JlZCwgaW5vZGUsCisJCQkJCSAgIEZJTEVfX1JFQUQgfCBGSUxFX19XUklURSwgMCkpIHsKIAkJCQlkcm9wX3R0eSA9IDE7CiAJCQl9CiAJCX0KQEAgLTMyMjgsNyArMzIzMyw3IEBACiAJICogbmV3IGlub2RlIGxhYmVsIG9yIG5ldyBwb2xpY3kuCiAJICogVGhpcyBjaGVjayBpcyBub3QgcmVkdW5kYW50IC0gZG8gbm90IHJlbW92ZS4KIAkgKi8KLQlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIG9wZW5fZmlsZV90b19hdihmaWxlKSwgTlVMTCwgMCk7CisJcmV0dXJuIGlub2RlX2hhc19wZXJtX25vYWRwKGNyZWQsIGlub2RlLCBvcGVuX2ZpbGVfdG9fYXYoZmlsZSksIDApOwogfQogCiAvKiB0YXNrIHNlY3VyaXR5IG9wZXJhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWlzYy5jIGIvc291bmQvY29yZS9taXNjLmMKaW5kZXggMmM0MTgyNS4uZWI5ZmUyZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9taXNjLmMKKysrIGIvc291bmQvY29yZS9taXNjLmMKQEAgLTU4LDI2ICs1OCw2IEBACiAJZWxzZQogCQlyZXR1cm4gcGF0aDsKIH0KLQotLyogcHJpbnQgZmlsZSBhbmQgbGluZSB3aXRoIGEgY2VydGFpbiBwcmludGsgcHJlZml4ICovCi1zdGF0aWMgaW50IHByaW50X3NuZF9wZngodW5zaWduZWQgaW50IGxldmVsLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGluZSwKLQkJCSBjb25zdCBjaGFyICpmb3JtYXQpCi17Ci0JY29uc3QgY2hhciAqZmlsZSA9IHNhbml0eV9maWxlX25hbWUocGF0aCk7Ci0JY2hhciB0bXBbXSA9ICI8MD4iOwotCWNvbnN0IGNoYXIgKnBmeCA9IGxldmVsID8gS0VSTl9ERUJVRyA6IEtFUk5fREVGQVVMVDsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChmb3JtYXRbMF0gPT0gJzwnICYmIGZvcm1hdFsyXSA9PSAnPicpIHsKLQkJdG1wWzFdID0gZm9ybWF0WzFdOwotCQlwZnggPSB0bXA7Ci0JCXJldCA9IDE7Ci0JfQotCXByaW50aygiJXNBTFNBICVzOiVkOiAiLCBwZngsIGZpbGUsIGxpbmUpOwotCXJldHVybiByZXQ7Ci19Ci0jZWxzZQotI2RlZmluZSBwcmludF9zbmRfcGZ4KGxldmVsLCBwYXRoLCBsaW5lLCBmb3JtYXQpCTAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU05EX0RFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEspCkBAIC04NSwxNSArNjUsMjkgQEAKIAkJICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7Ci0JCisjaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOworCWNoYXIgdmVyYm9zZV9mbXRbXSA9IEtFUk5fREVGQVVMVCAiQUxTQSAlczolZCAlcFYiOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCQogCWlmIChkZWJ1ZyA8IGxldmVsKQogCQlyZXR1cm47CiAjZW5kaWYKKwogCXZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0JaWYgKHByaW50X3NuZF9wZngobGV2ZWwsIHBhdGgsIGxpbmUsIGZvcm1hdCkpCi0JCWZvcm1hdCArPSAzOyAvKiBza2lwIHRoZSBwcmludGsgbGV2ZWwtcHJlZml4ICovCisjaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USworCXZhZi5mbXQgPSBmb3JtYXQ7CisJdmFmLnZhID0gJmFyZ3M7CisJaWYgKGZvcm1hdFswXSA9PSAnPCcgJiYgZm9ybWF0WzJdID09ICc+JykgeworCQltZW1jcHkodmVyYm9zZV9mbXQsIGZvcm1hdCwgMyk7CisJCXZhZi5mbXQgPSBmb3JtYXQgKyAzOworCX0gZWxzZSBpZiAobGV2ZWwpCisJCW1lbWNweSh2ZXJib3NlX2ZtdCwgS0VSTl9ERUJVRywgMyk7CisJcHJpbnRrKHZlcmJvc2VfZm10LCBzYW5pdHlfZmlsZV9uYW1lKHBhdGgpLCBsaW5lLCAmdmFmKTsKKyNlbHNlCiAJdnByaW50ayhmb3JtYXQsIGFyZ3MpOworI2VuZGlmCiAJdmFfZW5kKGFyZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19zbmRfcHJpbnRrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYwppbmRleCBmYjMxMWQ4Li41YzZlYTExIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWRzcGNkLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGlkc3BjZC5jCkBAIC02MCw3ICs2MCw3IEBACiAJICAgIEhQSV9WRVJfTUlOT1IoSFBJX1ZFUikgKiAxMDAgKyBIUElfVkVSX1JFTEVBU0UoSFBJX1ZFUikpKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAibGludXgvcGNpLmgiCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc2hvcnQgaHBpX2RzcF9jb2RlX29wZW4odTMyIGFkYXB0ZXIsIHN0cnVjdCBkc3BfY29kZSAqcHNfZHNwX2NvZGUsCiAJdTMyICpwb3NfZXJyb3JfY29kZSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggZWFjZDQ5MC4uYTdlYzcwMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ZtODAxLmMKKysrIGIvc291bmQvcGNpL2ZtODAxLmMKQEAgLTEyMzQsOSArMTIzNCwxMiBAQAogCXNwcmludGYoY2hpcC0+dGVhLmJ1c19pbmZvLCAiUENJOiVzIiwgcGNpX25hbWUocGNpKSk7CiAJaWYgKCh0ZWE1NzV4X3R1bmVyICYgVFVORVJfVFlQRV9NQVNLKSA+IDAgJiYKIAkgICAgKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spIDwgNCkgewotCQlpZiAoc25kX3RlYTU3NXhfaW5pdCgmY2hpcC0+dGVhKSkKKwkJaWYgKHNuZF90ZWE1NzV4X2luaXQoJmNoaXAtPnRlYSkpIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlRFQTU3NXggcmFkaW8gbm90IGZvdW5kXG4iKTsKLQl9IGVsc2UgaWYgKCh0ZWE1NzV4X3R1bmVyICYgVFVORVJfVFlQRV9NQVNLKSA9PSAwKQorCQkJc25kX2ZtODAxX2ZyZWUoY2hpcCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0gZWxzZSBpZiAoKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spID09IDApIHsKIAkJLyogYXV0b2RldGVjdCB0dW5lciBjb25uZWN0aW9uICovCiAJCWZvciAodGVhNTc1eF90dW5lciA9IDE7IHRlYTU3NXhfdHVuZXIgPD0gMzsgdGVhNTc1eF90dW5lcisrKSB7CiAJCQljaGlwLT50ZWE1NzV4X3R1bmVyID0gdGVhNTc1eF90dW5lcjsKQEAgLTEyNDYsNiArMTI0OSwxMiBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCWlmICh0ZWE1NzV4X3R1bmVyID09IDQpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlRFQTU3NXggcmFkaW8gbm90IGZvdW5kXG4iKTsKKwkJCXNuZF9mbTgwMV9mcmVlKGNoaXApOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CiAJc3RybGNweShjaGlwLT50ZWEuY2FyZCwgc25kX2ZtODAxX3RlYTU3NXhfZ3Bpb3NbKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spIC0gMV0ubmFtZSwgc2l6ZW9mKGNoaXAtPnRlYS5jYXJkKSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggNjk2YWMyNS4uZDY5NGU5ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC01MDYsOSArNTA2LDExIEBACiAJCQkJaGRhX25pZF90IGhwKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGZyb250LCAwLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwKKwlpZiAoc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgZnJvbnQpICYgQUNfUElOQ0FQX0VBUEQpCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGZyb250LCAwLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwKIAkJCSAgICAhc3BlYy0+aW52X2VhcGQgPyAweDAwIDogMHgwMik7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgaHAsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAorCWlmIChzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBocCkgJiBBQ19QSU5DQVBfRUFQRCkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgaHAsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAogCQkJICAgICFzcGVjLT5pbnZfZWFwZCA/IDB4MDAgOiAweDAyKTsKIH0KIApAQCAtNTI0LDYgKzUyNiwxMCBAQAogCWNhc2UgMHgxMWQ0MTg0YToKIAljYXNlIDB4MTFkNDE5NGE6CiAJY2FzZSAweDExZDQxOTRiOgorCWNhc2UgMHgxMWQ0MTk4ODoKKwljYXNlIDB4MTFkNDE5OGI6CisJY2FzZSAweDExZDQ5ODlhOgorCWNhc2UgMHgxMWQ0OTg5YjoKIAkJYWQxOTh4X3Bvd2VyX2VhcGRfd3JpdGUoY29kZWMsIDB4MTIsIDB4MTEpOwogCQlicmVhazsKIAljYXNlIDB4MTFkNDE5ODE6CkBAIC01MzMsMTIgKzUzOSw2IEBACiAJY2FzZSAweDExZDQxOTg2OgogCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgxYiwgMHgxYSk7CiAJCWJyZWFrOwotCWNhc2UgMHgxMWQ0MTk4ODoKLQljYXNlIDB4MTFkNDE5OGI6Ci0JY2FzZSAweDExZDQ5ODlhOgotCWNhc2UgMHgxMWQ0OTg5YjoKLQkJYWQxOTh4X3Bvd2VyX2VhcGRfd3JpdGUoY29kZWMsIDB4MjksIDB4MjIpOwotCQlicmVhazsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCAzZTZiOWE4Li42OTRiOWRhZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtMzEwMiw2ICszMTAyLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOGFmLCAiTGVub3ZvIEc1NjAiLCBDWFQ1MDY2X0FTVVMpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM5MzgsICJMZW5vdm8gRzU2NSIsIENYVDUwNjZfQVVUTyksCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIiwgQ1hUNTA2Nl9JREVBUEFEKSwgLyogRmFsbGJhY2sgZm9yIExlbm92b3Mgd2l0aG91dCBkb2NrIG1pYyAqLworCVNORF9QQ0lfUVVJUksoMHgxYjBhLCAweDIwOTIsICJDeWJlcnBvd2VyUEMgR2FtZXIgWHBsb3JlciBONTcwMDEiLCBDWFQ1MDY2X0FVVE8pLAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDdhNGUxMDAuLjQzZmNmYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0xMTQxLDYgKzExNDEsMTMgQEAKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgb247CiAKKwkvKiBDb250cm9sIEhQIHBpbnMvYW1wcyBkZXBlbmRpbmcgb24gbWFzdGVyX211dGUgc3RhdGU7CisJICogaW4gZ2VuZXJhbCwgSFAgcGlucy9hbXBzIGNvbnRyb2wgc2hvdWxkIGJlIGVuYWJsZWQgaW4gYWxsIGNhc2VzLAorCSAqIGJ1dCBjdXJyZW50bHkgc2V0IG9ubHkgZm9yIG1hc3Rlcl9tdXRlLCBqdXN0IHRvIGJlIHNhZmUKKwkgKi8KKwlkb19hdXRvbXV0ZShjb2RlYywgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpLAorCQkgICAgc3BlYy0+YXV0b2NmZy5ocF9waW5zLCBzcGVjLT5tYXN0ZXJfbXV0ZSwgdHJ1ZSk7CisKIAlpZiAoIXNwZWMtPmF1dG9tdXRlKQogCQlvbiA9IDA7CiAJZWxzZQpAQCAtNjIwMSwxMSArNjIwOCw2IEBACiAvKiB1cGRhdGUgSFAsIGxpbmUgYW5kIG1vbm8gb3V0IHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBtYXN0ZXIgc3dpdGNoICovCiBzdGF0aWMgdm9pZCBhbGMyNjBfaHBfbWFzdGVyX3VwZGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQotCS8qIGNoYW5nZSBIUCBwaW5zICovCi0JZG9fYXV0b211dGUoY29kZWMsIEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5ocF9waW5zKSwKLQkJICAgIHNwZWMtPmF1dG9jZmcuaHBfcGlucywgc3BlYy0+bWFzdGVyX211dGUsIHRydWUpOwogCXVwZGF0ZV9zcGVha2Vycyhjb2RlYyk7CiB9CiAKQEAgLTExOTI0LDcgKzExOTI2LDcgQEAKICAqICAweDFiID0gcG9ydCByZXBsaWNhdG9yIGhlYWRwaG9uZSBvdXQKICAqLwogCi0jZGVmaW5lIEFMQ19IUF9FVkVOVAkweDM3CisjZGVmaW5lIEFMQ19IUF9FVkVOVAlBTEM4ODBfSFBfRVZFTlQKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfZnVqaXRzdV91bnNvbF92ZXJic1tdID0gewogCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDX0hQX0VWRU5UfSwKQEAgLTEzODYwLDYgKzEzODYyLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTViLCAiQWNlciBBc3BpcmUgT25lIiwKIAkJCQkJCUFMQzI2OF9BQ0VSX0FTUElSRV9PTkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyNTMsICJEZWxsIE9FTSIsIEFMQzI2OF9ERUxMKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMmIwLCAiRGVsbCBJbnNwaXJvbiA5MTAiLCBBTEMyNjhfQVVUTyksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAyOCwgMHhmZmYwLCAweDAyYjAsCiAJCQkiRGVsbCBJbnNwaXJvbiBNaW5pOS9Wb3N0cm8gQTkwIiwgQUxDMjY4X0RFTEwpLAogCS8qIGFsbW9zdCBjb21wYXRpYmxlIHdpdGggdG9zaGliYSBidXQgd2l0aCBvcHRpb25hbCBkaWdpdGFsIG91dHM7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwppbmRleCA3ZmJmYTA1Li5lZGE5NTViIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKQEAgLTg0OCw5ICs4NDgsMTAgQEAKIAlpZiAoSVNfRVJSKHNzYykpCiAJCXByX3dhcm4oIlVuYWJsZSB0byBwYXJlbnQgQVNvQyBTU0MgREFJIG9uIFNTQzogJWxkXG4iLAogCQkJUFRSX0VSUihzc2MpKTsKLQllbHNlCisJZWxzZSB7CiAJCXNzY19wZGV2LT5kZXYucGFyZW50ID0gJihzc2MtPnBkZXYtPmRldik7Ci0Jc3NjX2ZyZWUoc3NjKTsKKwkJc3NjX2ZyZWUoc3NjKTsKKwl9CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHNzY19wZGV2KTsKIAlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYwppbmRleCBlYTQ5NTFjLi5mNzlkMTY1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxODM2LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jCkBAIC03NSw3ICs3NSw3IEBACiAJCS5jcHVfZGFpX25hbWUgPSAiYmZpbi10ZG0uMCIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJhZDE4MzYtaGlmaSIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gImJmaW4tdGRtLXBjbS1hdWRpbyIsCi0JCS5jb2RlY19uYW1lID0gImFkMTgzNi4wIiwKKwkJLmNvZGVjX25hbWUgPSAic3BpMC40IiwKIAkJLm9wcyA9ICZiZjV4eF9hZDE4MzZfb3BzLAogCX0sCiAJewpAQCAtODQsNyArODQsNyBAQAogCQkuY3B1X2RhaV9uYW1lID0gImJmaW4tdGRtLjEiLAogCQkuY29kZWNfZGFpX25hbWUgPSAiYWQxODM2LWhpZmkiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJiZmluLXRkbS1wY20tYXVkaW8iLAotCQkuY29kZWNfbmFtZSA9ICJhZDE4MzYuMCIsCisJCS5jb2RlY19uYW1lID0gInNwaTAuNCIsCiAJCS5vcHMgPSAmYmY1eHhfYWQxODM2X29wcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCmluZGV4IGFiNjNkNTIuLjc1NGM0OTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYwpAQCAtMTQ1LDIyICsxNDUsMjIgQEAKIAkvKiBiaXQgc2l6ZSAqLwogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKLQkJd29yZF9sZW4gPSAzOworCQl3b3JkX2xlbiA9IEFEMTgzNl9XT1JEX0xFTl8xNjsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6Ci0JCXdvcmRfbGVuID0gMTsKKwkJd29yZF9sZW4gPSBBRDE4MzZfV09SRF9MRU5fMjA7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKLQkJd29yZF9sZW4gPSAwOworCQl3b3JkX2xlbiA9IEFEMTgzNl9XT1JEX0xFTl8yNDsKIAkJYnJlYWs7CiAJfQogCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUQxODM2X0RBQ19DVFJMMSwKLQkJQUQxODM2X0RBQ19XT1JEX0xFTl9NQVNLLCB3b3JkX2xlbik7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUQxODM2X0RBQ19DVFJMMSwgQUQxODM2X0RBQ19XT1JEX0xFTl9NQVNLLAorCQl3b3JkX2xlbiA8PCBBRDE4MzZfREFDX1dPUkRfTEVOX09GRlNFVCk7CiAKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyLAotCQlBRDE4MzZfQURDX1dPUkRfTEVOX01BU0ssIHdvcmRfbGVuKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyLCBBRDE4MzZfQURDX1dPUkRfTEVOX01BU0ssCisJCXdvcmRfbGVuIDw8IEFEMTgzNl9BRENfV09SRF9PRkZTRVQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaAppbmRleCA4NDU1OTY3Li45ZDZhM2Y4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgQUQxODM2X0RBQ19TRVJGTVRfUENLMjU2ICAgICAgICgweDQgPDwgNSkKICNkZWZpbmUgQUQxODM2X0RBQ19TRVJGTVRfUENLMTI4ICAgICAgICgweDUgPDwgNSkKICNkZWZpbmUgQUQxODM2X0RBQ19XT1JEX0xFTl9NQVNLICAgICAgIDB4MTgKKyNkZWZpbmUgQUQxODM2X0RBQ19XT1JEX0xFTl9PRkZTRVQgICAgIDMKIAogI2RlZmluZSBBRDE4MzZfREFDX0NUUkwyICAgICAgICAgICAgICAgMQogI2RlZmluZSBBRDE4MzZfREFDTDFfTVVURSAgICAgICAgICAgICAgMApAQCAtNTEsNiArNTIsNyBAQAogI2RlZmluZSBBRDE4MzZfQURDTDJfTVVURSAJCTIKICNkZWZpbmUgQUQxODM2X0FEQ1IyX01VVEUgCQkzCiAjZGVmaW5lIEFEMTgzNl9BRENfV09SRF9MRU5fTUFTSyAgICAgICAweDMwCisjZGVmaW5lIEFEMTgzNl9BRENfV09SRF9PRkZTRVQgICAgICAgICA1CiAjZGVmaW5lIEFEMTgzNl9BRENfU0VSRk1UX01BU0sJICAgICAgICg3IDw8IDYpCiAjZGVmaW5lIEFEMTgzNl9BRENfU0VSRk1UX1BDSzI1NiAgICAgICAoMHg0IDw8IDYpCiAjZGVmaW5lIEFEMTgzNl9BRENfU0VSRk1UX1BDSzEyOCAgICAgICAoMHg1IDw8IDYpCkBAIC02MCw0ICs2Miw4IEBACiAKICNkZWZpbmUgQUQxODM2X05VTV9SRUdTICAgICAgICAgICAgICAgIDE2CiAKKyNkZWZpbmUgQUQxODM2X1dPUkRfTEVOXzI0IDB4MAorI2RlZmluZSBBRDE4MzZfV09SRF9MRU5fMjAgMHgxCisjZGVmaW5lIEFEMTgzNl9XT1JEX0xFTl8xNiAweDIKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCmluZGV4IGY4YzY2M2QuLmQ2OGVhNTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCkBAIC0yNjIsMTQgKzI2MiwxNCBAQAogfQogCiAvKiBMaW5lIGRpc2NpcGxpbmUgLnJlY2VpdmVfYnVmKCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdjI1M19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgdjI1M19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdHR5LT5kaXNjX2RhdGE7CiAJc3RydWN0IGN4MjA0NDJfcHJpdiAqY3gyMDQ0MjsKIAogCWlmICghY29kZWMpCi0JCXJldHVybiBjb3VudDsKKwkJcmV0dXJuOwogCiAJY3gyMDQ0MiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCkBAIC0yODEsOCArMjgxLDYgQEAKIAkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpdHR5LT5vcHMtPndyaXRlOwogCQljb2RlYy0+Y2FyZC0+cG9wX3RpbWUgPSAxOwogCX0KLQotCXJldHVybiBjb3VudDsKIH0KIAogLyogTGluZSBkaXNjaXBsaW5lIC53cml0ZV93YWtldXAoKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg4MDQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMKaW5kZXggNjc4NTY4OC4uOWE1ZTY3YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg4MDQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jCkBAIC02ODAsMjAgKzY4MCwyNSBAQAogI2RlZmluZSBXTTg4MDRfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorI2RlZmluZSBXTTg4MDRfUkFURVMgKFNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCisJCSAgICAgIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfNjQwMDAgfCBcCisJCSAgICAgIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDAgfCBcCisJCSAgICAgIFNORFJWX1BDTV9SQVRFXzE3NjQwMCB8IFNORFJWX1BDTV9SQVRFXzE5MjAwMCkKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgd204ODA0X2RhaSA9IHsKIAkubmFtZSA9ICJ3bTg4MDQtc3BkaWYiLAogCS5wbGF5YmFjayA9IHsKIAkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKIAkJLmNoYW5uZWxzX21pbiA9IDIsCiAJCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKKwkJLnJhdGVzID0gV004ODA0X1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODgwNF9GT1JNQVRTLAogCX0sCiAJLmNhcHR1cmUgPSB7CiAJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKIAkJLmNoYW5uZWxzX21pbiA9IDIsCiAJCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKKwkJLnJhdGVzID0gV004ODA0X1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODgwNF9GT1JNQVRTLAogCX0sCiAJLm9wcyA9ICZ3bTg4MDRfZGFpX29wcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTE1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5jCmluZGV4IGEwYjFhNzIuLmUyYWI0ZmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTE1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MTUuYwpAQCAtMTgzOSw3ICsxODM5LDcgQEAKIAlpbnQgb2xkOwogCiAJLyogRGlzYWJsZSBTWVNDTEsgd2hpbGUgd2UgcmVjb25maWd1cmUgKi8KLQlvbGQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMSk7CisJb2xkID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfQUlGX0NMT0NLSU5HXzEpICYgV004OTE1X1NZU0NMS19FTkE7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRl9DTE9DS0lOR18xLAogCQkJICAgIFdNODkxNV9TWVNDTEtfRU5BLCAwKTsKIApAQCAtMjAzOCw2ICsyMDM4LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBXTTg5MTVfRkxMX01DTEsyOgogCQlyZWcgPSAxOworCQlicmVhazsKIAljYXNlIFdNODkxNV9GTExfREFDTFJDTEsxOgogCQlyZWcgPSAyOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCmluZGV4IGY5MGFlNDIuLjVlMDVlZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYwpAQCAtMTk5OSwxMiArMTk5OSwxMiBAQAogCQlyZXR1cm4gMDsKIAogCS8qIElmIHRoZSBsZWZ0IFBHQSBpcyBlbmFibGVkIGhpdCB0aGF0IFZVIGJpdC4uLiAqLwotCWlmIChyZWdfY2FjaGVbV004OTYyX1BXUl9NR01UXzJdICYgV004OTYyX0hQT1VUTF9QR0FfRU5BKQorCWlmIChzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2Ml9QV1JfTUdNVF8yKSAmIFdNODk2Ml9IUE9VVExfUEdBX0VOQSkKIAkJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2Ml9IUE9VVExfVk9MVU1FLAogCQkJCSAgICAgcmVnX2NhY2hlW1dNODk2Ml9IUE9VVExfVk9MVU1FXSk7CiAKIAkvKiAuLi5vdGhlcndpc2UgdGhlIHJpZ2h0LiAgVGhlIFZVIGlzIHN0ZXJlby4gKi8KLQlpZiAocmVnX2NhY2hlW1dNODk2Ml9QV1JfTUdNVF8yXSAmIFdNODk2Ml9IUE9VVFJfUEdBX0VOQSkKKwlpZiAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjJfUFdSX01HTVRfMikgJiBXTTg5NjJfSFBPVVRSX1BHQV9FTkEpCiAJCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjJfSFBPVVRSX1ZPTFVNRSwKIAkJCQkgICAgIHJlZ19jYWNoZVtXTTg5NjJfSFBPVVRSX1ZPTFVNRV0pOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCmluZGV4IGU1NWIyOTguLjllMzcwZDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCkBAIC0yMTUsMjMgKzIxNSwyMyBAQAogU09DX1NJTkdMRV9UTFYoIklOMUwgVm9sdW1lIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLCAwLCAzMSwgMCwKIAkgICAgICAgaW5wZ2FfdGx2KSwKIFNPQ19TSU5HTEUoIklOMUwgU3dpdGNoIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLCA3LCAxLCAxKSwKLVNPQ19TSU5HTEUoIklOMUwgWkMgU3dpdGNoIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLCA3LCAxLCAwKSwKK1NPQ19TSU5HTEUoIklOMUwgWkMgU3dpdGNoIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLCA2LCAxLCAwKSwKIAogU09DX1NJTkdMRV9UTFYoIklOMVIgVm9sdW1lIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgMCwgMzEsIDAsCiAJICAgICAgIGlucGdhX3RsdiksCiBTT0NfU0lOR0xFKCJJTjFSIFN3aXRjaCIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsIDcsIDEsIDEpLAotU09DX1NJTkdMRSgiSU4xUiBaQyBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLCA3LCAxLCAwKSwKK1NPQ19TSU5HTEUoIklOMVIgWkMgU3dpdGNoIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNiwgMSwgMCksCiAKIAogU09DX1NJTkdMRV9UTFYoIklOMkwgVm9sdW1lIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCAwLCAzMSwgMCwKIAkgICAgICAgaW5wZ2FfdGx2KSwKIFNPQ19TSU5HTEUoIklOMkwgU3dpdGNoIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA3LCAxLCAxKSwKLVNPQ19TSU5HTEUoIklOMkwgWkMgU3dpdGNoIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA3LCAxLCAwKSwKK1NPQ19TSU5HTEUoIklOMkwgWkMgU3dpdGNoIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA2LCAxLCAwKSwKIAogU09DX1NJTkdMRV9UTFYoIklOMlIgVm9sdW1lIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgMCwgMzEsIDAsCiAJICAgICAgIGlucGdhX3RsdiksCiBTT0NfU0lOR0xFKCJJTjJSIFN3aXRjaCIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsIDcsIDEsIDEpLAotU09DX1NJTkdMRSgiSU4yUiBaQyBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA3LCAxLCAwKSwKK1NPQ19TSU5HTEUoIklOMlIgWkMgU3dpdGNoIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNiwgMSwgMCksCiAKIFNPQ19TSU5HTEVfVExWKCJNSVhJTkwgSU4yTCBWb2x1bWUiLCBXTTg5OTNfSU5QVVRfTUlYRVIzLCA3LCAxLCAwLAogCSAgICAgICBpbm1peF9zd190bHYpLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMgYi9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYwppbmRleCAxNWRhYzBmLi42NjgwYzBiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJICogc2hvdWxkIGFsbG9jYXRlIGEgRE1BIGJ1ZmZlciBvbmx5IGZvciB0aGUgc3RyZWFtcyB0aGF0IGFyZSB2YWxpZC4KIAkgKi8KIAotCWlmIChkYWktPmRyaXZlci0+cGxheWJhY2suY2hhbm5lbHNfbWluKSB7CisJaWYgKHBjbS0+c3RyZWFtc1swXS5zdWJzdHJlYW0pIHsKIAkJcmV0ID0gc25kX2RtYV9hbGxvY19wYWdlcyhTTkRSVl9ETUFfVFlQRV9ERVYsIGNhcmQtPmRldiwKIAkJCWZzbF9kbWFfaGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heCwKIAkJCSZwY20tPnN0cmVhbXNbMF0uc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKQEAgLTMyMCwxMyArMzIwLDEzIEBACiAJCX0KIAl9CiAKLQlpZiAoZGFpLT5kcml2ZXItPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7CisJaWYgKHBjbS0+c3RyZWFtc1sxXS5zdWJzdHJlYW0pIHsKIAkJcmV0ID0gc25kX2RtYV9hbGxvY19wYWdlcyhTTkRSVl9ETUFfVFlQRV9ERVYsIGNhcmQtPmRldiwKIAkJCWZzbF9kbWFfaGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heCwKIAkJCSZwY20tPnN0cmVhbXNbMV0uc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKIAkJaWYgKHJldCkgewotCQkJc25kX2RtYV9mcmVlX3BhZ2VzKCZwY20tPnN0cmVhbXNbMF0uc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKIAkJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY2FuJ3QgYWxsb2MgY2FwdHVyZSBkbWEgYnVmZmVyXG4iKTsKKwkJCXNuZF9kbWFfZnJlZV9wYWdlcygmcGNtLT5zdHJlYW1zWzBdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtNDQ5LDcgKzQ0OSw4IEBACiAJZG1hX3ByaXZhdGUtPmxkX2J1Zl9waHlzID0gbGRfYnVmX3BoeXM7CiAJZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5cyA9IHN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hZGRyOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZG1hX3ByaXZhdGUtPmlycSwgZnNsX2RtYV9pc3IsIDAsICJETUEiLCBkbWFfcHJpdmF0ZSk7CisJcmV0ID0gcmVxdWVzdF9pcnEoZG1hX3ByaXZhdGUtPmlycSwgZnNsX2RtYV9pc3IsIDAsICJmc2xkbWEtYXVkaW8iLAorCQkJICBkbWFfcHJpdmF0ZSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgImNhbid0IHJlZ2lzdGVyIElTUiBmb3IgSVJRICV1IChyZXQ9JWkpXG4iLAogCQkJZG1hX3ByaXZhdGUtPmlycSwgcmV0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jIGIvc291bmQvc29jL3NhbXN1bmcvaTJzLmMKaW5kZXggZmZhMDliMy4uOTkyYTczMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvaTJzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvaTJzLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCWlmICghaTJzKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlhY3RpdmUgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpOworCWFjdGl2ZSA9IHJlYWRsKGkycy0+YWRkciArIEkyU0NPTik7CiAKIAlpZiAoaXNfc2Vjb25kYXJ5KGkycykpCiAJCWFjdGl2ZSAmPSBDT05fVFhTRE1BX0FDVElWRTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCWlmICghaTJzKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlhY3RpdmUgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpICYgQ09OX1JYRE1BX0FDVElWRTsKKwlhY3RpdmUgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNDT04pICYgQ09OX1JYRE1BX0FDVElWRTsKIAogCXJldHVybiBhY3RpdmUgPyB0cnVlIDogZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNhY2hlLmMgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKaW5kZXggMDZiN2I4MS4uYzAwNWNlYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jYWNoZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY2FjaGUuYwpAQCAtNDY2LDYgKzQ2Niw5IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfZ2V0X2NhY2hlX3ZhbChjb25zdCB2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgaWR4LAogCQl1bnNpZ25lZCBpbnQgd29yZF9zaXplKQogeworCWlmICghYmFzZSkKKwkJcmV0dXJuIC0xOworCiAJc3dpdGNoICh3b3JkX3NpemUpIHsKIAljYXNlIDE6IHsKIAkJY29uc3QgdTggKmNhY2hlID0gYmFzZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggOTk5YmIwOC4uMzJhYjdmYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTMyNSw2ICszMjUsNyBAQAogfQogCiBzdGF0aWMgaW50IGRhcG1faXNfc2hhcmVkX2tjb250cm9sKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqa2NvbnRyb2x3LAogCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprY29udHJvbF9uZXcsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqKmtjb250cm9sKQogewpAQCAtMzM0LDYgKzMzNSw4IEBACiAJKmtjb250cm9sID0gTlVMTDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmRhcG0tPmNhcmQtPndpZGdldHMsIGxpc3QpIHsKKwkJaWYgKHcgPT0ga2NvbnRyb2x3IHx8IHctPmRhcG0gIT0ga2NvbnRyb2x3LT5kYXBtKQorCQkJY29udGludWU7CiAJCWZvciAoaSA9IDA7IGkgPCB3LT5udW1fa2NvbnRyb2xzOyBpKyspIHsKIAkJCWlmICgmdy0+a2NvbnRyb2xfbmV3c1tpXSA9PSBrY29udHJvbF9uZXcpIHsKIAkJCQlpZiAody0+a2NvbnRyb2xzKQpAQCAtMzQ3LDkgKzM1MCw5IEBACiB9CiAKIC8qIGNyZWF0ZSBuZXcgZGFwbSBtaXhlciBjb250cm9sICovCi1zdGF0aWMgaW50IGRhcG1fbmV3X21peGVyKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3N0YXRpYyBpbnQgZGFwbV9uZXdfbWl4ZXIoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gdy0+ZGFwbTsKIAlpbnQgaSwgcmV0ID0gMDsKIAlzaXplX3QgbmFtZV9sZW4sIHByZWZpeF9sZW47CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoOwpAQCAtNDQ3LDkgKzQ1MCw5IEBACiB9CiAKIC8qIGNyZWF0ZSBuZXcgZGFwbSBtdXggY29udHJvbCAqLwotc3RhdGljIGludCBkYXBtX25ld19tdXgoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQorc3RhdGljIGludCBkYXBtX25ld19tdXgoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gdy0+ZGFwbTsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnBhdGggPSBOVUxMOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQtPnNuZF9jYXJkOwpAQCAtNDY4LDcgKzQ3MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNoYXJlZCA9IGRhcG1faXNfc2hhcmVkX2tjb250cm9sKGRhcG0sICZ3LT5rY29udHJvbF9uZXdzWzBdLAorCXNoYXJlZCA9IGRhcG1faXNfc2hhcmVkX2tjb250cm9sKGRhcG0sIHcsICZ3LT5rY29udHJvbF9uZXdzWzBdLAogCQkJCQkgJmtjb250cm9sKTsKIAlpZiAoa2NvbnRyb2wpIHsKIAkJd2xpc3QgPSBrY29udHJvbC0+cHJpdmF0ZV9kYXRhOwpAQCAtNTMyLDggKzUzNSw3IEBACiB9CiAKIC8qIGNyZWF0ZSBuZXcgZGFwbSB2b2x1bWUgY29udHJvbCAqLwotc3RhdGljIGludCBkYXBtX25ld19wZ2Eoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQorc3RhdGljIGludCBkYXBtX25ld19wZ2Eoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCiB7CiAJaWYgKHctPm51bV9rY29udHJvbHMpCiAJCWRldl9lcnIody0+ZGFwbS0+ZGV2LApAQCAtMTgyMywxMyArMTgyNSwxMyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJdy0+cG93ZXJfY2hlY2sgPSBkYXBtX2dlbmVyaWNfY2hlY2tfcG93ZXI7Ci0JCQlkYXBtX25ld19taXhlcihkYXBtLCB3KTsKKwkJCWRhcG1fbmV3X21peGVyKHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX211eDoKIAkJY2FzZSBzbmRfc29jX2RhcG1fdmlydF9tdXg6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3ZhbHVlX211eDoKIAkJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwotCQkJZGFwbV9uZXdfbXV4KGRhcG0sIHcpOworCQkJZGFwbV9uZXdfbXV4KHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKIAkJY2FzZSBzbmRfc29jX2RhcG1fYWlmX291dDoKQEAgLTE4NDIsNyArMTg0NCw3IEBACiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKIAkJY2FzZSBzbmRfc29jX2RhcG1fb3V0X2RydjoKIAkJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwotCQkJZGFwbV9uZXdfcGdhKGRhcG0sIHcpOworCQkJZGFwbV9uZXdfcGdhKHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX2lucHV0OgogCQljYXNlIHNuZF9zb2NfZGFwbV9vdXRwdXQ6CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYyBiL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCmluZGV4IGQ0N2JlZmYuLmE5MTcxOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCisrKyBiL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCkBAIC0yMjcsNiArMjI3LDcgQEAKIAlyZXQgPSB1c2I2ZmlyZV9md19paGV4X2luaXQoZncsIHJlYyk7CiAJaWYgKHJldCA8IDApIHsKIAkJa2ZyZWUocmVjKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJlcnJvciB2YWxpZGF0aW5nIGV6dXNiICIKIAkJCQkiZmlybXdhcmUgJXMuXG4iLCBmd25hbWUpOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3F1aXJrcy5jIGIvc291bmQvdXNiL3F1aXJrcy5jCmluZGV4IDJlOTY5Y2IuLjA5MGUxOTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9xdWlya3MuYworKysgYi9zb3VuZC91c2IvcXVpcmtzLmMKQEAgLTQwMyw3ICs0MDMsNyBAQAogc3RhdGljIGludCBzbmRfdXNiX2NtNjIwNl9ib290X3F1aXJrKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCiB7CiAJaW50IGVyciwgcmVnOwotCWludCB2YWxbXSA9IHsweDIwMGMsIDB4MzAwMCwgMHhmODAwLCAweDE0M2YsIDB4MDAwMCwgMHgzMDAwfTsKKwlpbnQgdmFsW10gPSB7MHgyMDA0LCAweDMwMDAsIDB4ZjgwMCwgMHgxNDNmLCAweDAwMDAsIDB4MzAwMH07CiAKIAlmb3IgKHJlZyA9IDA7IHJlZyA8IEFSUkFZX1NJWkUodmFsKTsgcmVnKyspIHsKIAkJZXJyID0gc25kX3VzYl9jbTEwNl93cml0ZV9pbnRfcmVnKGRldiwgcmVnLCB2YWxbcmVnXSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwppbmRleCBiNjcxODYyLi4yZGE5MTYyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCXVuc2lnbmVkIGludCBucl9ldmVudHNbbnN5c2NhbGxzXSwKIAkJICAgICBleHBlY3RlZF9ucl9ldmVudHNbbnN5c2NhbGxzXSwgaSwgajsKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWxzW25zeXNjYWxsc10sICpldnNlbDsKLQlpbnQgc2FtcGxlX3NpemUgPSBwZXJmX3NhbXBsZV9zaXplKGF0dHIuc2FtcGxlX3R5cGUpOworCWludCBzYW1wbGVfc2l6ZSA9IF9fcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUoYXR0ci5zYW1wbGVfdHlwZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnN5c2NhbGxzOyArK2kpIHsKIAkJY2hhciBuYW1lWzY0XTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KaW5kZXggMjZkNGQzZi4uOWM1ZmI0ZCAxMDA3NTUKLS0tIGEvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KKysrIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KQEAgLTIzLDEyICsyMyw3IEBACiB0aGVuCiAJVk49JChlY2hvICIkVk4iIHwgc2VkIC1lICdzLy0vLi9nJyk7CiBlbHNlCi0JZXZhbCAkKGdyZXAgJ15WRVJTSU9OW1s6c3BhY2U6XV0qPScgLi4vLi4vTWFrZWZpbGV8dHIgLWQgJyAnKQotCWV2YWwgJChncmVwICdeUEFUQ0hMRVZFTFtbOnNwYWNlOl1dKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKLQlldmFsICQoZ3JlcCAnXlNVQkxFVkVMW1s6c3BhY2U6XV0qPScgLi4vLi4vTWFrZWZpbGV8dHIgLWQgJyAnKQotCWV2YWwgJChncmVwICdeRVhUUkFWRVJTSU9OW1s6c3BhY2U6XV0qPScgLi4vLi4vTWFrZWZpbGV8dHIgLWQgJyAnKQotCi0JVk49IiR7VkVSU0lPTn0uJHtQQVRDSExFVkVMfS4ke1NVQkxFVkVMfSR7RVhUUkFWRVJTSU9OfSIKKwlWTj0kKG1ha2UgLXNDIC4uLy4uIGtlcm5lbHZlcnNpb24pCiBmaQogCiBWTj0kKGV4cHIgIiRWTiIgOiB2KidcKC4qXCknKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCAwZmU5YWRmLi4zYzFiOGE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtMzUsMjIgKzM1LDYgQEAKIAlyZXR1cm4gcGVyZl9ldmVudF9fbmFtZXNbaWRdOwogfQogCi1pbnQgcGVyZl9zYW1wbGVfc2l6ZSh1NjQgc2FtcGxlX3R5cGUpCi17Ci0JdTY0IG1hc2sgPSBzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX01BU0s7Ci0JaW50IHNpemUgPSAwOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJaWYgKG1hc2sgJiAoMVVMTCA8PCBpKSkKLQkJCXNpemUrKzsKLQl9Ci0KLQlzaXplICo9IHNpemVvZih1NjQpOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9zYW1wbGUgc3ludGhfc2FtcGxlID0gewogCS5waWQJICAgPSAtMSwKIAkudGlkCSAgID0gLTEsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCmluZGV4IGMwODMzMjguLjFkN2Y2NjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCkBAIC04Miw4ICs4Miw2IEBACiAJc3RydWN0IGlwX2NhbGxjaGFpbiAqY2FsbGNoYWluOwogfTsKIAotaW50IHBlcmZfc2FtcGxlX3NpemUodTY0IHNhbXBsZV90eXBlKTsKLQogI2RlZmluZSBCVUlMRF9JRF9TSVpFIDIwCiAKIHN0cnVjdCBidWlsZF9pZF9ldmVudCB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKaW5kZXggNTBhYTM0OC4uYjAyMWVhOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgImV2bGlzdC5oIgogI2luY2x1ZGUgImV2c2VsLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCiAKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogCkBAIC0yNTcsMTkgKzI1NiwxNSBAQAogCXJldHVybiBldmxpc3QtPm1tYXAgIT0gTlVMTCA/IDAgOiAtRU5PTUVNOwogfQogCi1zdGF0aWMgaW50IF9fcGVyZl9ldmxpc3RfX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKK3N0YXRpYyBpbnQgX19wZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwKIAkJCSAgICAgICBpbnQgaWR4LCBpbnQgcHJvdCwgaW50IG1hc2ssIGludCBmZCkKIHsKIAlldmxpc3QtPm1tYXBbaWR4XS5wcmV2ID0gMDsKIAlldmxpc3QtPm1tYXBbaWR4XS5tYXNrID0gbWFzazsKIAlldmxpc3QtPm1tYXBbaWR4XS5iYXNlID0gbW1hcChOVUxMLCBldmxpc3QtPm1tYXBfbGVuLCBwcm90LAogCQkJCSAgICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKLQlpZiAoZXZsaXN0LT5tbWFwW2lkeF0uYmFzZSA9PSBNQVBfRkFJTEVEKSB7Ci0JCWlmIChldmxpc3QtPmNwdXMtPm1hcFtpZHhdID09IC0xICYmIGV2c2VsLT5hdHRyLmluaGVyaXQpCi0JCQl1aV9fd2FybmluZygiSW5oZXJpdCBpcyBub3QgYWxsb3dlZCBvbiBwZXItdGFzayAiCi0JCQkJICAgICJldmVudHMgdXNpbmcgbW1hcC5cbiIpOworCWlmIChldmxpc3QtPm1tYXBbaWR4XS5iYXNlID09IE1BUF9GQUlMRUQpCiAJCXJldHVybiAtMTsKLQl9CiAKIAlwZXJmX2V2bGlzdF9fYWRkX3BvbGxmZChldmxpc3QsIGZkKTsKIAlyZXR1cm4gMDsKQEAgLTI4OSw3ICsyODQsNyBAQAogCiAJCQkJaWYgKG91dHB1dCA9PSAtMSkgewogCQkJCQlvdXRwdXQgPSBmZDsKLQkJCQkJaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCBldnNlbCwgY3B1LAorCQkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGNwdSwKIAkJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCiAJCQkJCQlnb3RvIG91dF91bm1hcDsKIAkJCQl9IGVsc2UgewpAQCAtMzI5LDcgKzMyNCw3IEBACiAKIAkJCWlmIChvdXRwdXQgPT0gLTEpIHsKIAkJCQlvdXRwdXQgPSBmZDsKLQkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGV2c2VsLCB0aHJlYWQsCisJCQkJaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCB0aHJlYWQsCiAJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCiAJCQkJCWdvdG8gb3V0X3VubWFwOwogCQkJfSBlbHNlIHsKQEAgLTQ2MCwzMyArNDU1LDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCitib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfdHlwZShjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOwotCXU2NCB0eXBlID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zLCAqZmlyc3Q7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgewotCQlpZiAoIXR5cGUpCi0JCQl0eXBlID0gcG9zLT5hdHRyLnNhbXBsZV90eXBlOwotCQllbHNlIGlmICh0eXBlICE9IHBvcy0+YXR0ci5zYW1wbGVfdHlwZSkKLQkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV90eXBlIik7CisJcG9zID0gZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgeworCQlpZiAoZmlyc3QtPmF0dHIuc2FtcGxlX3R5cGUgIT0gcG9zLT5hdHRyLnNhbXBsZV90eXBlKQorCQkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXJldHVybiB0eXBlOworCXJldHVybiB0cnVlOworfQorCit1NjQgcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdDsKKworCWZpcnN0ID0gbGlzdF9lbnRyeShldmxpc3QtPmVudHJpZXMubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOworCXJldHVybiBmaXJzdC0+YXR0ci5zYW1wbGVfdHlwZTsKK30KKworYm9vbCBwZXJmX2V2bGlzdF9fdmFsaWRfc2FtcGxlX2lkX2FsbChjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zLCAqZmlyc3Q7CisKKwlwb3MgPSBmaXJzdCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocG9zLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCWlmIChmaXJzdC0+YXR0ci5zYW1wbGVfaWRfYWxsICE9IHBvcy0+YXR0ci5zYW1wbGVfaWRfYWxsKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOwogfQogCiBib29sIHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQogewotCWJvb2wgdmFsdWUgPSBmYWxzZSwgZmlyc3QgPSB0cnVlOwotCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CisJc3RydWN0IHBlcmZfZXZzZWwgKmZpcnN0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKLQkJaWYgKGZpcnN0KSB7Ci0JCQl2YWx1ZSA9IHBvcy0+YXR0ci5zYW1wbGVfaWRfYWxsOwotCQkJZmlyc3QgPSBmYWxzZTsKLQkJfSBlbHNlIGlmICh2YWx1ZSAhPSBwb3MtPmF0dHIuc2FtcGxlX2lkX2FsbCkKLQkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV9pZF9hbGwiKTsKLQl9Ci0KLQlyZXR1cm4gdmFsdWU7CisJZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisJcmV0dXJuIGZpcnN0LT5hdHRyLnNhbXBsZV9pZF9hbGw7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmggYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKaW5kZXggMGExZWYxZi4uYjJiODYyMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaApAQCAtNjYsNyArNjYsOSBAQAogdm9pZCBwZXJmX2V2bGlzdF9fZGVsZXRlX21hcHMoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogaW50IHBlcmZfZXZsaXN0X19zZXRfZmlsdGVycyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7CiAKLXU2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwotYm9vbCBwZXJmX2V2bGlzdF9fc2FtcGxlX2lkX2FsbChjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7Cit1NjQgcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKK2Jvb2wgcGVyZl9ldmxpc3RfX3NhbXBsZV9pZF9hbGwoY29uc3QgY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogCitib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfdHlwZShjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7Citib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKICNlbmRpZiAvKiBfX1BFUkZfRVZMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKaW5kZXggY2NhMjllZC4uMDIzOWViOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKQEAgLTE1LDYgKzE1LDIyIEBACiAKICNkZWZpbmUgRkQoZSwgeCwgeSkgKCooaW50ICopeHlhcnJheV9fZW50cnkoZS0+ZmQsIHgsIHkpKQogCitpbnQgX19wZXJmX2V2c2VsX19zYW1wbGVfc2l6ZSh1NjQgc2FtcGxlX3R5cGUpCit7CisJdTY0IG1hc2sgPSBzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX01BU0s7CisJaW50IHNpemUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJaWYgKG1hc2sgJiAoMVVMTCA8PCBpKSkKKwkJCXNpemUrKzsKKwl9CisKKwlzaXplICo9IHNpemVvZih1NjQpOworCisJcmV0dXJuIHNpemU7Cit9CisKIHZvaWQgcGVyZl9ldnNlbF9faW5pdChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsIGludCBpZHgpCiB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCmluZGV4IGY3OWJiMmMuLjdlOTM2NmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCkBAIC0xNDksNCArMTQ5LDExIEBACiAJcmV0dXJuIF9fcGVyZl9ldnNlbF9fcmVhZChldnNlbCwgbmNwdXMsIG50aHJlYWRzLCB0cnVlKTsKIH0KIAoraW50IF9fcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUodTY0IHNhbXBsZV90eXBlKTsKKworc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQoreworCXJldHVybiBfX3BlcmZfZXZzZWxfX3NhbXBsZV9zaXplKGV2c2VsLT5hdHRyLnNhbXBsZV90eXBlKTsKK30KKwogI2VuZGlmIC8qIF9fUEVSRl9FVlNFTF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKaW5kZXggNjk0MzZiMy4uYTlhYzA1MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYwpAQCAtNjc0LDcgKzY3NCw3IEBACiAJc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QgPSAmcGV2bGlzdC0+ZXZsaXN0OwogCXVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50OwogCWludCBzYW1wbGVfaWRfYWxsID0gMSwgY3B1OwotCXN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic2FtcGxlX2lkX2FsbCIsIE5VTEwsIE5VTEx9OworCXN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiY3B1IiwgInNhbXBsZV9pZF9hbGwiLCBOVUxMLCBOVUxMfTsKIAlpbnQgZXJyOwogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaXxpIiwga3dsaXN0LApAQCAtNjkyLDE2ICs2OTIsMTQgQEAKIAogCQlmaXJzdCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKIAkJZXJyID0gcGVyZl9ldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBmaXJzdC0+YXR0ci5zYW1wbGVfdHlwZSwKLQkJCQkJICAgICAgIHBlcmZfc2FtcGxlX3NpemUoZmlyc3QtPmF0dHIuc2FtcGxlX3R5cGUpLAorCQkJCQkgICAgICAgcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUoZmlyc3QpLAogCQkJCQkgICAgICAgc2FtcGxlX2lkX2FsbCwgJnBldmVudC0+c2FtcGxlKTsKLQkJaWYgKGVycikgewotCQkJcHJfZXJyKCJDYW4ndCBwYXJzZSBzYW1wbGUsIGVyciA9ICVkXG4iLCBlcnIpOwotCQkJZ290byBlbmQ7Ci0JCX0KLQorCQlpZiAoZXJyKQorCQkJcmV0dXJuIFB5RXJyX0Zvcm1hdChQeUV4Y19PU0Vycm9yLAorCQkJCQkgICAgInBlcmY6IGNhbid0IHBhcnNlIHNhbXBsZSwgZXJyPSVkIiwgZXJyKTsKIAkJcmV0dXJuIHB5ZXZlbnQ7CiAJfQotZW5kOgorCiAJUHlfSU5DUkVGKFB5X05vbmUpOwogCXJldHVybiBQeV9Ob25lOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggNjQ1MDBmYy4uZjVhOGZiZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC01OCw2ICs1OCwxNiBAQAogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKKwlpZiAoIXBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfdHlwZShzZWxmLT5ldmxpc3QpKSB7CisJCXByX2Vycigibm9uIG1hdGNoaW5nIHNhbXBsZV90eXBlIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCWlmICghcGVyZl9ldmxpc3RfX3ZhbGlkX3NhbXBsZV9pZF9hbGwoc2VsZi0+ZXZsaXN0KSkgeworCQlwcl9lcnIoIm5vbiBtYXRjaGluZyBzYW1wbGVfaWRfYWxsIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKwogCXNlbGYtPnNpemUgPSBpbnB1dF9zdGF0LnN0X3NpemU7CiAJcmV0dXJuIDA7CiAKQEAgLTk3LDcgKzEwNyw3IEBACiB2b2lkIHBlcmZfc2Vzc2lvbl9fdXBkYXRlX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7CiAJc2VsZi0+c2FtcGxlX3R5cGUgPSBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc2VsZi0+ZXZsaXN0KTsKLQlzZWxmLT5zYW1wbGVfc2l6ZSA9IHBlcmZfc2FtcGxlX3NpemUoc2VsZi0+c2FtcGxlX3R5cGUpOworCXNlbGYtPnNhbXBsZV9zaXplID0gX19wZXJmX2V2c2VsX19zYW1wbGVfc2l6ZShzZWxmLT5zYW1wbGVfdHlwZSk7CiAJc2VsZi0+c2FtcGxlX2lkX2FsbCA9IHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKHNlbGYtPmV2bGlzdCk7CiAJcGVyZl9zZXNzaW9uX19pZF9oZWFkZXJfc2l6ZShzZWxmKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwgYi90b29scy90ZXN0aW5nL2t0ZXN0L2t0ZXN0LnBsCmluZGV4IDFmZDI5YjIuLmNlZjI4ZTYgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwKKysrIGIvdG9vbHMvdGVzdGluZy9rdGVzdC9rdGVzdC5wbApAQCAtNzg4LDcgKzc4OCw3IEBACiAKIHN1YiByZWJvb3RfdG8gewogICAgIGlmICgkcmVib290X3R5cGUgZXEgImdydWIiKSB7Ci0JcnVuX3NzaCAiJyhlY2hvIFwic2F2ZWRlZmF1bHQgLS1kZWZhdWx0PSRncnViX251bWJlciAtLW9uY2VcIiB8IGdydWIgLS1iYXRjaDsgcmVib290KSciOworCXJ1bl9zc2ggIicoZWNobyBcInNhdmVkZWZhdWx0IC0tZGVmYXVsdD0kZ3J1Yl9udW1iZXIgLS1vbmNlXCIgfCBncnViIC0tYmF0Y2ggJiYgcmVib290KSciOwogCXJldHVybjsKICAgICB9CiAKQEAgLTE0ODAsNyArMTQ4MCw3IEBACiAJb3IgZG9kaWUgIkZhaWxlZCB0byByZWFkICRjb25maWciOwogCiAgICAgd2hpbGUgKDxJTj4pIHsKLQlpZiAoL14oLio/KENPTkZJR1xTKikoPS4qfCBpcyBub3Qgc2V0KSkvKSB7CisJaWYgKC9eKChDT05GSUdcUyopPS4qKS8pIHsKIAkgICAgJGNvbmZpZ19pZ25vcmV7JDJ9ID0gJDE7CiAJfQogICAgIH0KQEAgLTE2MzgsNyArMTYzOCw3IEBACiAJaWYgKCEkZm91bmQpIHsKIAkgICAgIyB0cnkgdGhlIG90aGVyIGhhbGYKIAkgICAgZG9wcmludCAiVG9wIGhhbGYgcHJvZHVjZWQgbm8gc2V0IGNvbmZpZ3MsIHRyeWluZyBib3R0b20gaGFsZlxuIjsKLQkgICAgQHRvcGhhbGYgPSBAc3RhcnRfbGlzdFskaGFsZiAuLiAkI3N0YXJ0X2xpc3RdOworCSAgICBAdG9waGFsZiA9IEBzdGFydF9saXN0WyRoYWxmICsgMSAuLiAkI3N0YXJ0X2xpc3RdOwogCSAgICBjcmVhdGVfY29uZmlnIEB0b3BoYWxmOwogCSAgICByZWFkX2N1cnJlbnRfY29uZmlnIFwlY3VycmVudF9jb25maWc7CiAJICAgIGZvcmVhY2ggbXkgJGNvbmZpZyAoQHRvcGhhbGYpIHsKQEAgLTE2OTAsNyArMTY5MCw3IEBACiAJIyByZW1vdmUgaGFsZiB0aGUgY29uZmlncyB3ZSBhcmUgbG9va2luZyBhdCBhbmQgc2VlIGlmCiAJIyB0aGV5IGFyZSBnb29kLgogCSRoYWxmID0gaW50KCQjc3RhcnRfbGlzdCAvIDIpOwotICAgIH0gd2hpbGUgKCRoYWxmID4gMCk7CisgICAgfSB3aGlsZSAoJCNzdGFydF9saXN0ID4gMCk7CiAKICAgICAjIHdlIGZvdW5kIGEgc2luZ2xlIGNvbmZpZywgdHJ5IGl0IGFnYWluIHVubGVzcyB3ZSBhcmUgcnVubmluZyBtYW51YWxseQogCmRpZmYgLS1naXQgYS90b29scy92aXJ0aW8vdmlydGlvX3Rlc3QuYyBiL3Rvb2xzL3ZpcnRpby92aXJ0aW9fdGVzdC5jCmluZGV4IGRmMGM2ZDIuLjc0ZDMzMzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3ZpcnRpby92aXJ0aW9fdGVzdC5jCisrKyBiL3Rvb2xzL3ZpcnRpby92aXJ0aW9fdGVzdC5jCkBAIC0xOTgsNiArMTk4LDE0IEBACiAJCS52YWwgPSAnaCcsCiAJfSwKIAl7CisJCS5uYW1lID0gImV2ZW50LWlkeCIsCisJCS52YWwgPSAnRScsCisJfSwKKwl7CisJCS5uYW1lID0gIm5vLWV2ZW50LWlkeCIsCisJCS52YWwgPSAnZScsCisJfSwKKwl7CiAJCS5uYW1lID0gImluZGlyZWN0IiwKIAkJLnZhbCA9ICdJJywKIAl9LApAQCAtMjExLDEzICsyMTksMTcgQEAKIAogc3RhdGljIHZvaWQgaGVscCgpCiB7Ci0JZnByaW50ZihzdGRlcnIsICJVc2FnZTogdmlydGlvX3Rlc3QgWy0taGVscF0gWy0tbm8taW5kaXJlY3RdXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiB2aXJ0aW9fdGVzdCBbLS1oZWxwXSIKKwkJIiBbLS1uby1pbmRpcmVjdF0iCisJCSIgWy0tbm8tZXZlbnQtaWR4XSIKKwkJIlxuIik7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgdmRldl9pbmZvIGRldjsKLQl1bnNpZ25lZCBsb25nIGxvbmcgZmVhdHVyZXMgPSAxVUxMIDw8IFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZmVhdHVyZXMgPSAoMVVMTCA8PCBWSVJUSU9fUklOR19GX0lORElSRUNUX0RFU0MpIHwKKwkJKDFVTEwgPDwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpOwogCWludCBvOwogCiAJZm9yICg7OykgewpAQCAtMjI4LDYgKzI0MCw5IEBACiAJCWNhc2UgJz8nOgogCQkJaGVscCgpOwogCQkJZXhpdCgyKTsKKwkJY2FzZSAnZSc6CisJCQlmZWF0dXJlcyAmPSB+KDFVTEwgPDwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpOworCQkJYnJlYWs7CiAJCWNhc2UgJ2gnOgogCQkJaGVscCgpOwogCQkJZ290byBkb25lOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMjJjZGI5Ni4uOTZlYmMwNiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00NjcsMTIgKzQ2Nyw4IEBACiAJCWlmICgha3ZtLT5idXNlc1tpXSkKIAkJCWdvdG8gb3V0X2VycjsKIAl9CisKIAlzcGluX2xvY2tfaW5pdCgma3ZtLT5tbXVfbG9jayk7Ci0KLQlyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7Ci0JaWYgKHIpCi0JCWdvdG8gb3V0X2VycjsKLQogCWt2bS0+bW0gPSBjdXJyZW50LT5tbTsKIAlhdG9taWNfaW5jKCZrdm0tPm1tLT5tbV9jb3VudCk7CiAJa3ZtX2V2ZW50ZmRfaW5pdChrdm0pOwpAQCAtNDgwLDYgKzQ3NiwxMSBAQAogCW11dGV4X2luaXQoJmt2bS0+aXJxX2xvY2spOwogCW11dGV4X2luaXQoJmt2bS0+c2xvdHNfbG9jayk7CiAJYXRvbWljX3NldCgma3ZtLT51c2Vyc19jb3VudCwgMSk7CisKKwlyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2VycjsKKwogCXJhd19zcGluX2xvY2soJmt2bV9sb2NrKTsKIAlsaXN0X2FkZCgma3ZtLT52bV9saXN0LCAmdm1fbGlzdCk7CiAJcmF3X3NwaW5fdW5sb2NrKCZrdm1fbG9jayk7CkBAIC02NTEsNyArNjUyLDkgQEAKIAkvKiBXZSBjYW4gcmVhZCB0aGUgZ3Vlc3QgbWVtb3J5IHdpdGggX194eHhfdXNlcigpIGxhdGVyIG9uLiAqLwogCWlmICh1c2VyX2FsbG9jICYmCiAJICAgICgobWVtLT51c2Vyc3BhY2VfYWRkciAmIChQQUdFX1NJWkUgLSAxKSkgfHwKLQkgICAgICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBtZW0tPnVzZXJzcGFjZV9hZGRyLCBtZW0tPm1lbW9yeV9zaXplKSkpCisJICAgICAhYWNjZXNzX29rKFZFUklGWV9XUklURSwKKwkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKW1lbS0+dXNlcnNwYWNlX2FkZHIsCisJCQltZW0tPm1lbW9yeV9zaXplKSkpCiAJCWdvdG8gb3V0OwogCWlmIChtZW0tPnNsb3QgPj0gS1ZNX01FTU9SWV9TTE9UUyArIEtWTV9QUklWQVRFX01FTV9TTE9UUykKIAkJZ290byBvdXQ7Cg==