ZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IGNmYjFmZmYuLjdlOTk3OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtOTUsNyArOTUsNyBAQAogCXNwaW5fbG9ja19pbml0KCZkZXZpY2UtPm1lbV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlX2xvY2spOwogCWF0b21pY19zZXQgKCZkZXZpY2UtPnRhc2tsZXRfc2NoZWR1bGVkLCAwKTsKLQl0YXNrbGV0X2luaXQoJmRldmljZS0+dGFza2xldCwgCisJdGFza2xldF9pbml0KCZkZXZpY2UtPnRhc2tsZXQsCiAJCSAgICAgKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKSBkYXNkX3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGRldmljZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldmljZS0+Y2N3X3F1ZXVlKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogCWludCByYzsKIAogCS8qCi0JICogQXMgbG9uZyBhcyB0aGUgZGV2aWNlIGlzIG5vdCBpbiBzdGF0ZSBEQVNEX1NUQVRFX05FVyB3ZSB3YW50IHRvIAorCSAqIEFzIGxvbmcgYXMgdGhlIGRldmljZSBpcyBub3QgaW4gc3RhdGUgREFTRF9TVEFURV9ORVcgd2Ugd2FudCB0bwogCSAqIGtlZXAgdGhlIHJlZmVyZW5jZSBjb3VudCA+IDAuCiAJICovCiAJZGFzZF9nZXRfZGV2aWNlKGRldmljZSk7CkBAIC0zMzYsNyArMzM2LDcgQEAKIAlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX09OTElORSAmJgogCSAgICBkZXZpY2UtPnRhcmdldCA8PSBEQVNEX1NUQVRFX1JFQURZKQogCQlkYXNkX3N0YXRlX29ubGluZV90b19yZWFkeShkZXZpY2UpOwotCQorCiAJaWYgKGRldmljZS0+c3RhdGUgPT0gREFTRF9TVEFURV9SRUFEWSAmJgogCSAgICBkZXZpY2UtPnRhcmdldCA8PSBEQVNEX1NUQVRFX0JBU0lDKQogCQlkYXNkX3N0YXRlX3JlYWR5X3RvX2Jhc2ljKGRldmljZSk7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX0JBU0lDICYmCiAJICAgIGRldmljZS0+dGFyZ2V0IDw9IERBU0RfU1RBVEVfS05PV04pCiAJCWRhc2Rfc3RhdGVfYmFzaWNfdG9fa25vd24oZGV2aWNlKTsKLQkKKwogCWlmIChkZXZpY2UtPnN0YXRlID09IERBU0RfU1RBVEVfS05PV04gJiYKIAkgICAgZGV2aWNlLT50YXJnZXQgPD0gREFTRF9TVEFURV9ORVcpCiAJCWRhc2Rfc3RhdGVfa25vd25fdG9fbmV3KGRldmljZSk7CkBAIC05OTQsNyArOTk0LDcgQEAKIAkJICAgICAgKChpcmItPnNjc3cuY3N0YXQgPDwgOCkgfCBpcmItPnNjc3cuZHN0YXQpLCBjcXIpOwogCiAgCS8qIEZpbmQgb3V0IHRoZSBhcHByb3ByaWF0ZSBlcmFfYWN0aW9uLiAqLwotCWlmIChpcmItPnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9IQUxUX0ZVTkMpIAorCWlmIChpcmItPnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9IQUxUX0ZVTkMpCiAJCWVyYSA9IGRhc2RfZXJhX2ZhdGFsOwogCWVsc2UgaWYgKGlyYi0+c2Nzdy5kc3RhdCA9PSAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpICYmCiAJCSBpcmItPnNjc3cuY3N0YXQgPT0gMCAmJgpAQCAtMTAwNCw3ICsxMDA0LDcgQEAKICAJICAgICAgICBlcmEgPSBkYXNkX2VyYV9mYXRhbDsgLyogZG9uJ3QgcmVjb3ZlciB0aGlzIHJlcXVlc3QgKi8KIAllbHNlIGlmIChpcmItPmVzdy5lc3cwLmVydy5jb25zKQogCQllcmEgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPmV4YW1pbmVfZXJyb3IoY3FyLCBpcmIpOwotCWVsc2UgCisJZWxzZQogCQllcmEgPSBkYXNkX2VyYV9yZWNvdmVyOwogCiAJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImVyYV9jb2RlICVkIiwgZXJhKTsKQEAgLTEyODcsNyArMTI4Nyw3IEBACiB9CiAKIC8qCi0gKiBSZW1vdmUgcmVxdWVzdHMgZnJvbSB0aGUgY2N3IHF1ZXVlLiAKKyAqIFJlbW92ZSByZXF1ZXN0cyBmcm9tIHRoZSBjY3cgcXVldWUuCiAgKi8KIHN0YXRpYyB2b2lkCiBkYXNkX2ZsdXNoX2Njd19xdWV1ZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKiBkZXZpY2UsIGludCBhbGwpCkBAIC0xNDUwLDIzICsxNDUwLDIzIEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWludCByYzsKLQkKKwogCWRldmljZSA9IGNxci0+ZGV2aWNlOwogCXNwaW5fbG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwotCQorCiAJaW5pdF93YWl0cXVldWVfaGVhZCAoJndhaXRfcSk7CiAJY3FyLT5jYWxsYmFjayA9IGRhc2Rfd2FrZXVwX2NiOwogCWNxci0+Y2FsbGJhY2tfZGF0YSA9ICh2b2lkICopICZ3YWl0X3E7CiAJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJbGlzdF9hZGRfdGFpbCgmY3FyLT5saXN0LCAmZGV2aWNlLT5jY3dfcXVldWUpOwotCQorCiAJLyogbGV0IHRoZSBiaCBzdGFydCB0aGUgcmVxdWVzdCB0byBrZWVwIHRoZW0gaW4gb3JkZXIgKi8KIAlkYXNkX3NjaGVkdWxlX2JoKGRldmljZSk7Ci0JCisKIAlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCiAJd2FpdF9ldmVudCh3YWl0X3EsIF93YWl0X2Zvcl93YWtldXAoY3FyKSk7Ci0JCisKIAkvKiBSZXF1ZXN0IHN0YXR1cyBpcyBlaXRoZXIgZG9uZSBvciBmYWlsZWQuICovCiAJcmMgPSAoY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfRkFJTEVEKSA/IC1FSU8gOiAwOwogCXJldHVybiByYzsKQEAgLTE1NjgsNyArMTU2OCw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWludCByYzsKLQkKKwogCWRldmljZSA9IGNxci0+ZGV2aWNlOwogCXNwaW5fbG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCXJjID0gX2Rhc2RfdGVybV9ydW5uaW5nX2NxcihkZXZpY2UpOwpAQCAtMTU3NiwyMCArMTU3NiwyMCBAQAogCQlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCQlyZXR1cm4gcmM7CiAJfQotCQorCiAJaW5pdF93YWl0cXVldWVfaGVhZCAoJndhaXRfcSk7CiAJY3FyLT5jYWxsYmFjayA9IGRhc2Rfd2FrZXVwX2NiOwogCWNxci0+Y2FsbGJhY2tfZGF0YSA9ICh2b2lkICopICZ3YWl0X3E7CiAJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJbGlzdF9hZGQoJmNxci0+bGlzdCwgJmRldmljZS0+Y2N3X3F1ZXVlKTsKLQkKKwogCS8qIGxldCB0aGUgYmggc3RhcnQgdGhlIHJlcXVlc3QgdG8ga2VlcCB0aGVtIGluIG9yZGVyICovCiAJZGFzZF9zY2hlZHVsZV9iaChkZXZpY2UpOwotCQorCiAJc3Bpbl91bmxvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKIAogCXdhaXRfZXZlbnQod2FpdF9xLCBfd2FpdF9mb3Jfd2FrZXVwKGNxcikpOwotCQorCiAJLyogUmVxdWVzdCBzdGF0dXMgaXMgZWl0aGVyIGRvbmUgb3IgZmFpbGVkLiAqLwogCXJjID0gKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0ZBSUxFRCkgPyAtRUlPIDogMDsKIAlyZXR1cm4gcmM7CkBAIC0xNzI1LDcgKzE3MjUsNyBAQAogCiAJaWYgKCFkZXZpY2UtPnJlcXVlc3RfcXVldWUpCiAJCXJldHVybjsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmRldmljZS0+cmVxdWVzdF9xdWV1ZV9sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldmljZS0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfaGVhZCkpIHsKIAkJcmVxID0gZWx2X25leHRfcmVxdWVzdChkZXZpY2UtPnJlcXVlc3RfcXVldWUpOwpAQCAtMjE3MiwyMSArMjE3MiwzIEBACiBFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2dlbmVyaWNfc2V0X29mZmxpbmUpOwogRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9nZW5lcmljX2F1dG9fb25saW5lKTsKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1pbmRlbnQtbGV2ZWw6IDQKLSAqIGMtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAotICogYy1icmFjZS1vZmZzZXQ6IC00Ci0gKiBjLWFyZ2RlY2wtaW5kZW50OiA0Ci0gKiBjLWxhYmVsLW9mZnNldDogLTQKLSAqIGMtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDQKLSAqIGMtY29udGludWVkLWJyYWNlLW9mZnNldDogMAotICogaW5kZW50LXRhYnMtbW9kZTogMQotICogdGFiLXdpZHRoOiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzMzNzBfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zMzcwX2VycC5jCmluZGV4IDFkMTFjMmEuLjFkZGFiODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzMzNzBfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzM3MF9lcnAuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIEZpbGUuLi4uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzM3MF9lcnAuYwogICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIDxIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20+CiAgKiBCdWdyZXBvcnRzLnRvLi46IDxMaW51eDM5MEBkZS5pYm0uY29tPgpAQCAtMTIsMTAgKzEyLDEwIEBACiAKIAogLyoKLSAqIERBU0RfMzM3MF9FUlBfRVhBTUlORSAKKyAqIERBU0RfMzM3MF9FUlBfRVhBTUlORQogICoKICAqIERFU0NSSVBUSU9OCi0gKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyIGVycm9yLiAKKyAqICAgQ2hlY2tzIG9ubHkgZm9yIGZhdGFsL25vL3JlY292ZXIgZXJyb3IuCiAgKiAgIEEgZGV0YWlsZWQgZXhhbWluYXRpb24gb2YgdGhlIHNlbnNlIGRhdGEgaXMgZG9uZSBsYXRlciBvdXRzaWRlCiAgKiAgIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqCkBAIC0yMyw3ICsyMyw3IEBACiAgKiAgICdDaGFwdGVyIDcuIDMzNzAgU2Vuc2UgRGF0YScuCiAgKgogICogUkVUVVJOIFZBTFVFUwotICogICBkYXNkX2VyYV9ub25lCW5vIGVycm9yIAorICogICBkYXNkX2VyYV9ub25lCW5vIGVycm9yCiAgKiAgIGRhc2RfZXJhX2ZhdGFsCWZvciBhbGwgZmF0YWwgKHVucmVjb3ZlcmFibGUgZXJyb3JzKQogICogICBkYXNkX2VyYV9yZWNvdmVyCWZvciBhbGwgb3RoZXJzLgogICovCkBAIC04MiwyMiArODIsMyBAQAogCXJldHVybiBkYXNkX2VyYV9yZWNvdmVyOwogCiB9CQkJCS8qIEVORCBkYXNkXzMzNzBfZXJwX2V4YW1pbmUgKi8KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1pbmRlbnQtbGV2ZWw6IDQgCi0gKiBjLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKLSAqIGMtYnJhY2Utb2Zmc2V0OiAtNAotICogYy1hcmdkZWNsLWluZGVudDogNAotICogYy1sYWJlbC1vZmZzZXQ6IC00Ci0gKiBjLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiA0Ci0gKiBjLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKLSAqIGluZGVudC10YWJzLW1vZGU6IDEKLSAqIHRhYi13aWR0aDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCAyZWQ1MTU2Li42Njk4MDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTEsNiArMSw2IEBACi0vKiAKKy8qCiAgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKLSAqIEF1dGhvcihzKS4uLi4uLjogSG9yc3QgIEh1bW1lbCAgICA8SG9yc3QuSHVtbWVsQGRlLmlibS5jb20+IAorICogQXV0aG9yKHMpLi4uLi4uOiBIb3JzdCAgSHVtbWVsICAgIDxIb3JzdC5IdW1tZWxAZGUuaWJtLmNvbT4KICAqCQkgICAgSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KICAqIChDKSBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCAyMDAwLCAyMDAxCkBAIC0yNSwyMyArMjUsMjMgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRUNUSU9OIEVSUCBFWEFNSU5BVElPTgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfRVhBTUlORV8yNCAKKyAqIERBU0RfMzk5MF9FUlBfRVhBTUlORV8yNAogICoKICAqIERFU0NSSVBUSU9OCi0gKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbCAodW5yZWNvdmVyYWJsZSkgZXJyb3IuIAorICogICBDaGVja3Mgb25seSBmb3IgZmF0YWwgKHVucmVjb3ZlcmFibGUpIGVycm9yLgogICogICBBIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoZSBzZW5zZSBkYXRhIGlzIGRvbmUgbGF0ZXIgb3V0c2lkZQogICogICB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCiAgKgogICogICBFYWNoIGJpdCBjb25maWd1cmF0aW9uIGxlYWRpbmcgdG8gYW4gYWN0aW9uIGNvZGUgMiAoRXhpdCB3aXRoCiAgKiAgIHByb2dyYW1taW5nIGVycm9yIG9yIHVudXN1YWwgY29uZGl0aW9uIGluZGljYXRpb24pCiAgKiAgIGFyZSBoYW5kbGVkIGFzIGZhdGFsIGVycm9ytHMuCi0gKiAKKyAqCiAgKiAgIEFsbCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgaGFuZGxlZCBhcyByZWNvdmVyYWJsZSBlcnJvcnMuCiAgKgogICogUkVUVVJOIFZBTFVFUwpAQCAtOTMsMTUgKzkzLDE1IEBACiB9CQkJCS8qIEVORCBkYXNkXzM5OTBfZXJwX2V4YW1pbmVfMjQgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfRVhBTUlORV8zMiAKKyAqIERBU0RfMzk5MF9FUlBfRVhBTUlORV8zMgogICoKICAqIERFU0NSSVBUSU9OCi0gKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyYWJsZSBlcnJvci4gCisgKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyYWJsZSBlcnJvci4KICAqICAgQSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiB0aGUgc2Vuc2UgZGF0YSBpcyBkb25lIGxhdGVyIG91dHNpZGUKICAqICAgdGhlIGludGVycnVwdCBoYW5kbGVyLgogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvciAKKyAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvcgogICogICBkYXNkX2VyYV9mYXRhbAlmb3IgYWxsIGZhdGFsICh1bnJlY292ZXJhYmxlIGVycm9ycykKICAqICAgZGFzZF9lcmFfcmVjb3Zlcglmb3IgcmVjb3ZlcmFibGUgb3RoZXJzLgogICovCkBAIC0xMjgsMTAgKzEyOCwxMCBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9leGFtaW5lXzMyICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0VYQU1JTkUgCisgKiBEQVNEXzM5OTBfRVJQX0VYQU1JTkUKICAqCiAgKiBERVNDUklQVElPTgotICogICBDaGVja3Mgb25seSBmb3IgZmF0YWwvbm8vcmVjb3ZlciBlcnJvci4gCisgKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyIGVycm9yLgogICogICBBIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoZSBzZW5zZSBkYXRhIGlzIGRvbmUgbGF0ZXIgb3V0c2lkZQogICogICB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCiAgKgpAQCAtMTM5LDcgKzEzOSw3IEBACiAgKiAgICdDaGFwdGVyIDcuIEVycm9yIFJlY292ZXJ5IFByb2NlZHVyZXMnLgogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvciAKKyAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvcgogICogICBkYXNkX2VyYV9mYXRhbAlmb3IgYWxsIGZhdGFsICh1bnJlY292ZXJhYmxlIGVycm9ycykKICAqICAgZGFzZF9lcmFfcmVjb3Zlcglmb3IgYWxsIG90aGVycy4KICAqLwpAQCAtMTc4LDE4ICsxNzgsMTggQEAKIH0JCQkJLyogRU5EIGRhc2RfMzk5MF9lcnBfZXhhbWluZSAqLwogCiAvKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRUNUSU9OIEVSUCBIQU5ETElORwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIC8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIDI0IGFuZCAzMiBieXRlIHNlbnNlIEVSUCBmdW5jdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0NMRUFOVVAgCisgKiBEQVNEXzM5OTBfRVJQX0NMRUFOVVAKICAqCiAgKiBERVNDUklQVElPTgogICogICBSZW1vdmVzIHRoZSBhbHJlYWR5IGJ1aWxkIGJ1dCBub3QgbmVjZXNzYXJ5IEVSUCByZXF1ZXN0IGFuZCBzZXRzCkBAIC0xOTcsMTAgKzE5NywxMCBAQAogICoKICAqICBQQVJBTUVURVIKICAqICAgZXJwCQlyZXF1ZXN0IHRvIGJlIGJsb2NrZWQKLSAqICAgZmluYWxfc3RhdHVzCWVpdGhlciBEQVNEX0NRUl9ET05FIG9yIERBU0RfQ1FSX0ZBSUxFRCAKKyAqICAgZmluYWxfc3RhdHVzCWVpdGhlciBEQVNEX0NRUl9ET05FIG9yIERBU0RfQ1FSX0ZBSUxFRAogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgY3FyCQlvcmlnaW5hbCBjcXIJCSAgIAorICogICBjcXIJCW9yaWdpbmFsIGNxcgogICovCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoc3RydWN0IGRhc2RfY2N3X3JlcSAqIGVycCwgY2hhciBmaW5hbF9zdGF0dXMpCkBAIC0yMTQsNyArMjE0LDcgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfY2xlYW51cCAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9CTE9DS19RVUVVRSAKKyAqIERBU0RfMzk5MF9FUlBfQkxPQ0tfUVVFVUUKICAqCiAgKiBERVNDUklQVElPTgogICogICBCbG9jayB0aGUgZ2l2ZW4gZGV2aWNlIHJlcXVlc3QgcXVldWUgdG8gcHJldmVudCBmcm9tIGZ1cnRoZXIKQEAgLTIzNyw3ICsyMzcsNyBAQAogfQogCiAvKgotICogREFTRF8zOTkwX0VSUF9JTlRfUkVRIAorICogREFTRF8zOTkwX0VSUF9JTlRfUkVRCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyAnSW50ZXJ2ZW50aW9uIFJlcXVpcmVkJyBlcnJvci4KQEAgLTI3Nyw3ICsyNzcsNyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9pbnRfcmVxICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0FMVEVSTkFURV9QQVRIIAorICogREFTRF8zOTkwX0VSUF9BTFRFUk5BVEVfUEFUSAogICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIFJlcGVhdCB0aGUgb3BlcmF0aW9uIG9uIGEgZGlmZmVyZW50IGNoYW5uZWwgcGF0aC4KQEAgLTMzMCwxNSArMzMwLDE1IEBACiAgKiBEQVNEXzM5OTBfRVJQX0RDVEwKICAqCiAgKiBERVNDUklQVElPTgotICogICBTZXR1cCBjcXIgdG8gZG8gdGhlIERpYWdub3N0aWMgQ29udHJvbCAoRENUTCkgY29tbWFuZCB3aXRoIGFuIAorICogICBTZXR1cCBjcXIgdG8gZG8gdGhlIERpYWdub3N0aWMgQ29udHJvbCAoRENUTCkgY29tbWFuZCB3aXRoIGFuCiAgKiAgIEluaGliaXQgV3JpdGUgc3ViY29tbWFuZCAoMHgyMCkgYW5kIHRoZSBnaXZlbiBtb2RpZmllci4KICAqCiAgKiAgUEFSQU1FVEVSCiAgKiAgIGVycAkJcG9pbnRlciB0byB0aGUgY3VycmVudCAoZmFpbGVkKSBFUlAKICAqICAgbW9kaWZpZXIJCXN1YmNvbW1hbmQgbW9kaWZpZXIKLSAqICAgCisgKgogICogUkVUVVJOIFZBTFVFUwotICogICBkY3RsX2NxcgkJcG9pbnRlciB0byBORVcgZGN0bF9jcXIgCisgKiAgIGRjdGxfY3FyCQlwb2ludGVyIHRvIE5FVyBkY3RsX2NxcgogICoKICAqLwogc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKgpAQCAtMzg2LDcgKzM4Niw3IEBACiB9CQkJCS8qIGVuZCBkYXNkXzM5OTBfZXJwX0RDVEwgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfQUNUSU9OXzEgCisgKiBEQVNEXzM5OTBfRVJQX0FDVElPTl8xCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgU2V0dXAgRVJQIHRvIGRvIHRoZSBFUlAgYWN0aW9uIDEgKHNlZSBSZWZlcmVuY2UgbWFudWFsKS4KQEAgLTQxNSw3ICs0MTUsNyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9hY3Rpb25fMSAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9BQ1RJT05fNCAKKyAqIERBU0RfMzk5MF9FUlBfQUNUSU9OXzQKICAqCiAgKiBERVNDUklQVElPTgogICogICBTZXR1cCBFUlAgdG8gZG8gdGhlIEVSUCBhY3Rpb24gNCAoc2VlIFJlZmVyZW5jZSBtYW51YWwpLgpAQCAtNDUzLDExICs0NTMsMTEgQEAKIAogCQlpZiAoc2Vuc2VbMjVdID09IDB4MUQpIHsJLyogc3RhdGUgY2hhbmdlIHBlbmRpbmcgKi8KIAotCQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsIAorCQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICJ3YWl0aW5nIGZvciBzdGF0ZSBjaGFuZ2UgcGVuZGluZyAiCiAJCQkJICAgICJpbnRlcnJ1cHQsICVkIHJldHJpZXMgbGVmdCIsCiAJCQkJICAgIGVycC0+cmV0cmllcyk7Ci0JCQkKKwogCQkJZGFzZF8zOTkwX2VycF9ibG9ja19xdWV1ZShlcnAsIDMwKkhaKTsKIAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vuc2VbMjVdID09IDB4MUUpIHsJLyogYnVzeSAqLwpAQCAtNDY5LDkgKzQ2OSw5IEBACiAJCX0gZWxzZSB7CiAKIAkJCS8qIG5vIHN0YXRlIGNoYW5nZSBwZW5kaW5nIC0gcmV0cnkgKi8KLQkJCURFVl9NRVNTQUdFIChLRVJOX0lORk8sIGRldmljZSwgCisJCQlERVZfTUVTU0FHRSAoS0VSTl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICAicmVkcml2aW5nIHJlcXVlc3QgaW1tZWRpYXRlbHksICIKLQkJCQkgICAgICIlZCByZXRyaWVzIGxlZnQiLCAKKwkJCQkgICAgICIlZCByZXRyaWVzIGxlZnQiLAogCQkJCSAgICAgZXJwLT5yZXRyaWVzKTsKIAkJCWVycC0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOwogCQl9CkBAIC00ODIsMTMgKzQ4MiwxMyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9hY3Rpb25fNCAqLwogCiAvKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAyNCBieXRlIHNlbnNlIEVSUCBmdW5jdGlvbnMgKG9ubHkpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9BQ1RJT05fNSAKKyAqIERBU0RfMzk5MF9FUlBfQUNUSU9OXzUKICAqCiAgKiBERVNDUklQVElPTgogICogICBTZXR1cCBFUlAgdG8gZG8gdGhlIEVSUCBhY3Rpb24gNSAoc2VlIFJlZmVyZW5jZSBtYW51YWwpLgpAQCAtNTIzLDcgKzUyMyw3IEBACiAgKgogICogUEFSQU1FVEVSCiAgKiAgIHNlbnNlCQljdXJyZW50IHNlbnNlIGRhdGEKLSAqICAgCisgKgogICogUkVUVVJOIFZBTFVFUwogICogICB2b2lkCiAgKi8KQEAgLTExNTAsOSArMTE1MCw5IEBACiAgKiBQQVJBTUVURVIKICAqICAgZXJwCQljdXJyZW50IGVycF9oZWFkCiAgKiAgIHNlbnNlCQljdXJyZW50IHNlbnNlIGRhdGEKLSAqIAorICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZXJwCQknbmV3JyBlcnBfaGVhZCAtIHBvaW50ZXIgdG8gbmV3IEVSUCAKKyAqICAgZXJwCQknbmV3JyBlcnBfaGVhZCAtIHBvaW50ZXIgdG8gbmV3IEVSUAogICovCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCiBkYXNkXzM5OTBfZXJwX2NvbV9yZWooc3RydWN0IGRhc2RfY2N3X3JlcSAqIGVycCwgY2hhciAqc2Vuc2UpCkBAIC0xMTg1LDcgKzExODUsNyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9jb21fcmVqICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0JVU19PVVQgCisgKiBEQVNEXzM5OTBfRVJQX0JVU19PVVQKICAqCiAgKiBERVNDUklQVElPTgogICogICBIYW5kbGVzIDI0IGJ5dGUgJ0J1cyBPdXQgUGFyaXR5IENoZWNrJyBlcnJvci4KQEAgLTE0ODMsNyArMTQ4Myw3IEBACiAgKgogICogUEFSQU1FVEVSCiAgKiAgIGVycAkJYWxyZWFkeSBhZGRlZCBkZWZhdWx0IEVSUAotICoJCQorICoKICAqIFJFVFVSTiBWQUxVRVMKICAqICAgZXJwCQluZXcgZXJwX2hlYWQgLSBwb2ludGVyIHRvIG5ldyBFUlAKICAqLwpAQCAtMTUyNywxMSArMTUyNywxMSBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9maWxlX3Byb3QgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfSU5TUEVDVF8yNCAKKyAqIERBU0RfMzk5MF9FUlBfSU5TUEVDVF8yNAogICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIERvZXMgYSBkZXRhaWxlZCBpbnNwZWN0aW9uIG9mIHRoZSAyNCBieXRlIHNlbnNlIGRhdGEKLSAqICAgYW5kIHNldHMgdXAgYSByZWxhdGVkIGVycm9yIHJlY292ZXJ5IGFjdGlvbi4gIAorICogICBhbmQgc2V0cyB1cCBhIHJlbGF0ZWQgZXJyb3IgcmVjb3ZlcnkgYWN0aW9uLgogICoKICAqIFBBUkFNRVRFUgogICogICBzZW5zZQkJc2Vuc2UgZGF0YSBvZiB0aGUgYWN0dWFsIGVycm9yCkBAIC0xNjAyLDEzICsxNjAyLDEzIEBACiB9CQkJCS8qIEVORCBkYXNkXzM5OTBfZXJwX2luc3BlY3RfMjQgKi8KIAogLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogMzIgYnl0ZSBzZW5zZSBFUlAgZnVuY3Rpb25zIChvbmx5KQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBBQ1RJT05fMTBfMzIgCisgKiBEQVNEXzM5OTBfRVJQQUNUSU9OXzEwXzMyCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyAzMiBieXRlICdBY3Rpb24gMTAnIG9mIFNpbmdsZSBQcm9ncmFtIEFjdGlvbiBDb2Rlcy4KQEAgLTE2MTYsNyArMTYxNiw3IEBACiAgKgogICogUEFSQU1FVEVSCiAgKiAgIGVycAkJY3VycmVudCBlcnBfaGVhZAotICogICBzZW5zZQkJY3VycmVudCBzZW5zZSBkYXRhIAorICogICBzZW5zZQkJY3VycmVudCBzZW5zZSBkYXRhCiAgKiBSRVRVUk4gVkFMVUVTCiAgKiAgIGVycAkJbW9kaWZpZWQgZXJwX2hlYWQKICAqLwpAQCAtMTY0MCwxOCArMTY0MCwxOCBAQAogICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIEhhbmRsZXMgMzIgYnl0ZSAnQWN0aW9uIDFCJyBvZiBTaW5nbGUgUHJvZ3JhbSBBY3Rpb24gQ29kZXMuCi0gKiAgIEEgd3JpdGUgb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBmaW5pc2hlZCBiZWNhdXNlIG9mIGFuIHVuZXhwZWN0ZWQgCisgKiAgIEEgd3JpdGUgb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBmaW5pc2hlZCBiZWNhdXNlIG9mIGFuIHVuZXhwZWN0ZWQKICAqICAgY29uZGl0aW9uLgotICogICBUaGUgYWxyZWFkeSBjcmVhdGVkICdkZWZhdWx0IGVycCcgaXMgdXNlZCB0byBnZXQgdGhlIGxpbmsgdG8gCi0gKiAgIHRoZSBlcnAgY2hhaW4sIGJ1dCBpdCBjYW4gbm90IGJlIHVzZWQgZm9yIHRoaXMgcmVjb3ZlcnkgCisgKiAgIFRoZSBhbHJlYWR5IGNyZWF0ZWQgJ2RlZmF1bHQgZXJwJyBpcyB1c2VkIHRvIGdldCB0aGUgbGluayB0bworICogICB0aGUgZXJwIGNoYWluLCBidXQgaXQgY2FuIG5vdCBiZSB1c2VkIGZvciB0aGlzIHJlY292ZXJ5CiAgKiAgIGFjdGlvbiBiZWNhdXNlIGl0IGNvbnRhaW5zIG5vIERFL0xPIGRhdGEgc3BhY2UuCiAgKgogICogUEFSQU1FVEVSCiAgKiAgIGRlZmF1bHRfZXJwCWFscmVhZHkgYWRkZWQgZGVmYXVsdCBlcnAuCi0gKiAgIHNlbnNlCQljdXJyZW50IHNlbnNlIGRhdGEgCisgKiAgIHNlbnNlCQljdXJyZW50IHNlbnNlIGRhdGEKICAqCiAgKiBSRVRVUk4gVkFMVUVTCi0gKiAgIGVycAkJbmV3IGVycCBvciAKKyAqICAgZXJwCQluZXcgZXJwIG9yCiAgKgkJCWRlZmF1bHRfZXJwIGluIGNhc2Ugb2YgaW1wcmVjaXNlIGVuZGluZyBvciBlcnJvcgogICovCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCkBAIC0xNzg5LDE2ICsxNzg5LDE2IEBACiAgKiBEQVNEXzM5OTBfVVBEQVRFXzFCCiAgKgogICogREVTQ1JJUFRJT04KLSAqICAgSGFuZGxlcyB0aGUgdXBkYXRlIHRvIHRoZSAzMiBieXRlICdBY3Rpb24gMUInIG9mIFNpbmdsZSBQcm9ncmFtIAorICogICBIYW5kbGVzIHRoZSB1cGRhdGUgdG8gdGhlIDMyIGJ5dGUgJ0FjdGlvbiAxQicgb2YgU2luZ2xlIFByb2dyYW0KICAqICAgQWN0aW9uIENvZGVzIGluIGNhc2UgdGhlIGZpcnN0IGFjdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwuCiAgKiAgIFRoZSBhbHJlYWR5IGNyZWF0ZWQgJ3ByZXZpb3VzX2VycCcgaXMgdGhlIGN1cnJlbnRseSBub3Qgc3VjY2Vzc2Z1bAotICogICBFUlAuIAorICogICBFUlAuCiAgKgogICogUEFSQU1FVEVSCiAgKiAgIHByZXZpb3VzX2VycAlhbHJlYWR5IGNyZWF0ZWQgcHJldmlvdXMgZXJwLgotICogICBzZW5zZQkJY3VycmVudCBzZW5zZSBkYXRhIAorICogICBzZW5zZQkJY3VycmVudCBzZW5zZSBkYXRhCiAgKiBSRVRVUk4gVkFMVUVTCi0gKiAgIGVycAkJbW9kaWZpZWQgZXJwIAorICogICBlcnAJCW1vZGlmaWVkIGVycAogICovCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCiBkYXNkXzM5OTBfdXBkYXRlXzFCKHN0cnVjdCBkYXNkX2Njd19yZXEgKiBwcmV2aW91c19lcnAsIGNoYXIgKnNlbnNlKQpAQCAtMTg5Nyw3ICsxODk3LDcgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF91cGRhdGVfMUIgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkRfUkVUUlkgCisgKiBEQVNEXzM5OTBfRVJQX0NPTVBPVU5EX1JFVFJZCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyB0aGUgY29tcG91bmQgRVJQIGFjdGlvbiByZXRyeSBjb2RlLgpAQCAtMTk0Myw3ICsxOTQzLDcgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcmV0cnkgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkRfUEFUSCAKKyAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkRfUEFUSAogICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIEhhbmRsZXMgdGhlIGNvbXBvdW5kIEVSUCBhY3Rpb24gZm9yIHJldHJ5IG9uIGFsdGVybmF0ZQpAQCAtMTk2NSw3ICsxOTY1LDcgQEAKIAkJZGFzZF8zOTkwX2VycF9hbHRlcm5hdGVfcGF0aChlcnApOwogCiAJCWlmIChlcnAtPnN0YXR1cyA9PSBEQVNEX0NRUl9GQUlMRUQpIHsKLQkJCS8qIHJlc2V0IHRoZSBscG0gYW5kIHRoZSBzdGF0dXMgdG8gYmUgYWJsZSB0byAKKwkJCS8qIHJlc2V0IHRoZSBscG0gYW5kIHRoZSBzdGF0dXMgdG8gYmUgYWJsZSB0bwogCQkJICogdHJ5IGZ1cnRoZXIgYWN0aW9ucy4gKi8KIAogCQkJZXJwLT5scG0gPSAwOwpAQCAtMTk4MCw3ICsxOTgwLDcgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcGF0aCAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9DT01QT1VORF9DT0RFIAorICogREFTRF8zOTkwX0VSUF9DT01QT1VORF9DT0RFCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyB0aGUgY29tcG91bmQgRVJQIGFjdGlvbiBmb3IgcmV0cnkgY29kZS4KQEAgLTIwMDEsMTggKzIwMDEsMTggQEAKIAogCQlzd2l0Y2ggKHNlbnNlWzI4XSkgewogCQljYXNlIDB4MTc6Ci0JCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4gCisJCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4KIAkJCSAqIEluaGliaXQgV3JpdGUgc3ViY29tbWFuZCBhbmQgY29udHJvbGVyIG1vZGlmaWVyICovCiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX0RDVEwoZXJwLCAweDIwKTsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAweDI1OgogCQkJLyogd2FpdCBmb3IgNSBzZWNvbmRzIGFuZCByZXRyeSBhZ2FpbiAqLwogCQkJZXJwLT5yZXRyaWVzID0gMTsKLQkJCQorCiAJCQlkYXNkXzM5OTBfZXJwX2Jsb2NrX3F1ZXVlIChlcnAsIDUqSFopOwogCQkJYnJlYWs7Ci0JCQkKKwogCQlkZWZhdWx0OgogCQkJLyogc2hvdWxkIG5vdCBoYXBwZW4gLSBjb250aW51ZSAqLwogCQkJYnJlYWs7CkBAIC0yMDI2LDcgKzIwMjYsNyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb2RlICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0NPTVBPVU5EX0NPTkZJRyAKKyAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkRfQ09ORklHCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyB0aGUgY29tcG91bmQgRVJQIGFjdGlvbiBmb3IgY29uZmlncnVhdGlvbgpAQCAtMjA2MywxMCArMjA2MywxMCBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb25maWcgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkQgCisgKiBEQVNEXzM5OTBfRVJQX0NPTVBPVU5ECiAgKgogICogREVTQ1JJUFRJT04KLSAqICAgRG9lcyB0aGUgZnVydGhlciBjb21wb3VuZCBwcm9ncmFtIGFjdGlvbiBpZiAKKyAqICAgRG9lcyB0aGUgZnVydGhlciBjb21wb3VuZCBwcm9ncmFtIGFjdGlvbiBpZgogICogICBjb21wb3VuZCByZXRyeSB3YXMgbm90IHN1Y2Nlc3NmdWwuCiAgKgogICogUEFSQU1FVEVSCkBAIC0yMTEwLDExICsyMTEwLDExIEBACiB9CQkJCS8qIGVuZCBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0lOU1BFQ1RfMzIgCisgKiBEQVNEXzM5OTBfRVJQX0lOU1BFQ1RfMzIKICAqCiAgKiBERVNDUklQVElPTgogICogICBEb2VzIGEgZGV0YWlsZWQgaW5zcGVjdGlvbiBvZiB0aGUgMzIgYnl0ZSBzZW5zZSBkYXRhCi0gKiAgIGFuZCBzZXRzIHVwIGEgcmVsYXRlZCBlcnJvciByZWNvdmVyeSBhY3Rpb24uICAKKyAqICAgYW5kIHNldHMgdXAgYSByZWxhdGVkIGVycm9yIHJlY292ZXJ5IGFjdGlvbi4KICAqCiAgKiBQQVJBTUVURVIKICAqICAgc2Vuc2UJCXNlbnNlIGRhdGEgb2YgdGhlIGFjdHVhbCBlcnJvcgpAQCAtMjIyOCw5ICsyMjI4LDkgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfaW5zcGVjdF8zMiAqLwogCiAvKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBtYWluIEVSUCBjb250cm9sIGZ1Y3Rpb25zICgyNCBhbmQgMzIgYnl0ZSBzZW5zZSkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKIC8qCkBAIC0yMjQzLDcgKzIyNDMsNyBAQAogICogUEFSQU1FVEVSCiAgKiAgIGVycAkJcG9pbnRlciB0byB0aGUgY3VycmVudGx5IGNyZWF0ZWQgZGVmYXVsdCBFUlAKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZXJwX25ldwkJY29udGVucyB3YXMgcG9zc2libHkgbW9kaWZpZWQgCisgKiAgIGVycF9uZXcJCWNvbnRlbnMgd2FzIHBvc3NpYmx5IG1vZGlmaWVkCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICoKIGRhc2RfMzk5MF9lcnBfaW5zcGVjdChzdHJ1Y3QgZGFzZF9jY3dfcmVxICogZXJwKQpAQCAtMjI3MiwxNCArMjI3MiwxNCBAQAogCiAvKgogICogREFTRF8zOTkwX0VSUF9BRERfRVJQCi0gKiAKKyAqCiAgKiBERVNDUklQVElPTgogICogICBUaGlzIGZ1bnRpb24gYWRkcyBhbiBhZGRpdGlvbmFsIHJlcXVlc3QgYmxvY2sgKEVSUCkgdG8gdGhlIGhlYWQgb2YKICAqICAgdGhlIGdpdmVuIGNxciAob3IgZXJwKS4KICAqICAgVGhpcyBlcnAgaXMgaW5pdGlhbGl6ZWQgYXMgYW4gZGVmYXVsdCBlcnAgKHJldHJ5IFRJQykKICAqCiAgKiBQQVJBTUVURVIKLSAqICAgY3FyCQloZWFkIG9mIHRoZSBjdXJyZW50IEVSUC1jaGFpbiAob3Igc2luZ2xlIGNxciBpZiAKKyAqICAgY3FyCQloZWFkIG9mIHRoZSBjdXJyZW50IEVSUC1jaGFpbiAob3Igc2luZ2xlIGNxciBpZgogICoJCQlmaXJzdCBlcnJvcikKICAqIFJFVFVSTiBWQUxVRVMKICAqICAgZXJwCQlwb2ludGVyIHRvIG5ldyBFUlAtY2hhaW4gaGVhZApAQCAtMjMzMiwxNSArMjMzMiwxNSBAQAogfQogCiAvKgotICogREFTRF8zOTkwX0VSUF9BRERJVElPTkFMX0VSUCAKLSAqIAorICogREFTRF8zOTkwX0VSUF9BRERJVElPTkFMX0VSUAorICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIEFuIGFkZGl0aW9uYWwgRVJQIGlzIG5lZWRlZCB0byBoYW5kbGUgdGhlIGN1cnJlbnQgZXJyb3IuCiAgKiAgIEFkZCBFUlAgdG8gdGhlIGhlYWQgb2YgdGhlIEVSUC1jaGFpbiBjb250YWluaW5nIHRoZSBFUlAgcHJvY2Vzc2luZwogICogICBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBzZW5zZSBkYXRhLgogICoKICAqIFBBUkFNRVRFUgotICogICBjcXIJCWhlYWQgb2YgdGhlIGN1cnJlbnQgRVJQLWNoYWluIChvciBzaW5nbGUgY3FyIGlmIAorICogICBjcXIJCWhlYWQgb2YgdGhlIGN1cnJlbnQgRVJQLWNoYWluIChvciBzaW5nbGUgY3FyIGlmCiAgKgkJCWZpcnN0IGVycm9yKQogICoKICAqIFJFVFVSTiBWQUxVRVMKQEAgLTIzNzYsNyArMjM3Niw3IEBACiAgKiAgIDI0IGJ5dGUgc2Vuc2UgYnl0ZSAyNSBhbmQgMjcgaXMgc2V0IGFzIHdlbGwuCiAgKgogICogUEFSQU1FVEVSCi0gKiAgIGNxcjEJCWZpcnN0IGNxciwgd2hpY2ggd2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSAKKyAqICAgY3FyMQkJZmlyc3QgY3FyLCB3aGljaCB3aWxsIGJlIGNvbXBhcmVkIHdpdGggdGhlCiAgKiAgIGNxcjIJCXNlY29uZCBjcXIuCiAgKgogICogUkVUVVJOIFZBTFVFUwpAQCAtMjQxNSw3ICsyNDE1LDcgQEAKICAqICAgY3FyCQlmYWlsZWQgY3FyIChlaXRoZXIgb3JpZ2luYWwgY3FyIG9yIGFscmVhZHkgYW4gZXJwKQogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZXJwCQllcnAtcG9pbnRlciB0byB0aGUgYWxyZWFkeSBkZWZpbmVkIGVycm9yIAorICogICBlcnAJCWVycC1wb2ludGVyIHRvIHRoZSBhbHJlYWR5IGRlZmluZWQgZXJyb3IKICAqCQkJcmVjb3ZlcnkgcHJvY2VkdXJlIE9SCiAgKgkJCU5VTEwgaWYgYSAnbmV3JyBlcnJvciBvY2N1cnJlZC4KICAqLwpAQCAtMjQ1MSwxMCArMjQ1MSwxMCBAQAogICogREFTRF8zOTkwX0VSUF9GVVJUSEVSX0VSUCAoMjQgJiAzMiBieXRlIHNlbnNlKQogICoKICAqIERFU0NSSVBUSU9OCi0gKiAgIE5vIHJldHJ5IGlzIGxlZnQgZm9yIHRoZSBjdXJyZW50IEVSUC4gQ2hlY2sgd2hhdCBoYXMgdG8gYmUgZG9uZSAKKyAqICAgTm8gcmV0cnkgaXMgbGVmdCBmb3IgdGhlIGN1cnJlbnQgRVJQLiBDaGVjayB3aGF0IGhhcyB0byBiZSBkb25lCiAgKiAgIHdpdGggdGhlIEVSUC4KICAqICAgICAtIGRvIGZ1cnRoZXIgZGVmaW5lZCBFUlAgYWN0aW9uIG9yCi0gKiAgICAgLSB3YWl0IGZvciBpbnRlcnJ1cHQgb3IJCisgKiAgICAgLSB3YWl0IGZvciBpbnRlcnJ1cHQgb3IKICAqICAgICAtIGV4aXQgd2l0aCBwZXJtYW5lbnQgZXJyb3IKICAqCiAgKiBQQVJBTUVURVIKQEAgLTI0ODUsNyArMjQ4NSw3IEBACiAKIAkJaWYgKCEoc2Vuc2VbMl0gJiBEQVNEX1NFTlNFX0JJVF8wKSkgewogCi0JCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4gCisJCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4KIAkJCSAqIEluaGliaXQgV3JpdGUgc3ViY29tbWFuZCAqLwogCiAJCQlzd2l0Y2ggKHNlbnNlWzI1XSkgewpAQCAtMjUzNSwxNCArMjUzNSwxNCBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9mdXJ0aGVyX2VycCAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9IQU5ETEVfTUFUQ0hfRVJQIAorICogREFTRF8zOTkwX0VSUF9IQU5ETEVfTUFUQ0hfRVJQCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgQW4gZXJyb3Igb2NjdXJyZWQgYWdhaW4gYW5kIGFuIEVSUCBoYXMgYmVlbiBkZXRlY3RlZCB3aGljaCBpcyBhbHJlYWR5Ci0gKiAgIHVzZWQgdG8gaGFuZGxlIHRoaXMgZXJyb3IgKGUuZy4gcmV0cmllcykuIAorICogICB1c2VkIHRvIGhhbmRsZSB0aGlzIGVycm9yIChlLmcuIHJldHJpZXMpLgogICogICBBbGwgcHJpb3IgRVJQJ3MgYXJlIGFzdW1lZCB0byBiZSBzdWNjZXNzZnVsIGFuZCB0aGVyZWZvcmUgcmVtb3ZlZAogICogICBmcm9tIHF1ZXVlLgotICogICBJZiByZXRyeSBjb3VudGVyIG9mIG1hdGNoaW5nIGVycCBpcyBhbHJlYWR5IDAsIGl0IGlzIGNoZWNrZWQgaWYgZnVydGhlciAKKyAqICAgSWYgcmV0cnkgY291bnRlciBvZiBtYXRjaGluZyBlcnAgaXMgYWxyZWFkeSAwLCBpdCBpcyBjaGVja2VkIGlmIGZ1cnRoZXIKICAqICAgYWN0aW9uIGlzIG5lZWRlZCAoYmVzaWRlcyByZXRyeSkgb3IgaWYgdGhlIEVSUCBoYXMgZmFpbGVkLgogICoKICAqIFBBUkFNRVRFUgpAQCAtMjYzMSw3ICsyNjMxLDcgQEAKICAqICAgZXJwCQllcnAtcG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgRVJQIGFjdGlvbiBjaGFpbi4KICAqCQkJVGhpcyBtZWFuczoKICAqCQkJIC0gZWl0aGVyIGEgcHRyIHRvIGFuIGFkZGl0aW9uYWwgRVJQIGNxciBvcgotICoJCQkgLSB0aGUgb3JpZ2luYWwgZ2l2ZW4gY3FyICh3aGljaCdzIHN0YXR1cyBtaWdodCAKKyAqCQkJIC0gdGhlIG9yaWdpbmFsIGdpdmVuIGNxciAod2hpY2gncyBzdGF0dXMgbWlnaHQKICAqCQkJICAgYmUgbW9kaWZpZWQpCiAgKi8KIHN0cnVjdCBkYXNkX2Njd19yZXEgKgpAQCAtMjcyMywyMiArMjcyMywzIEBACiAJcmV0dXJuIGVycDsKIAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9hY3Rpb24gKi8KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1pbmRlbnQtbGV2ZWw6IDQgCi0gKiBjLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKLSAqIGMtYnJhY2Utb2Zmc2V0OiAtNAotICogYy1hcmdkZWNsLWluZGVudDogNAotICogYy1sYWJlbC1vZmZzZXQ6IC00Ci0gKiBjLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiA0Ci0gKiBjLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKLSAqIGluZGVudC10YWJzLW1vZGU6IDEKLSAqIHRhYi13aWR0aDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF85MzM2X2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfOTMzNl9lcnAuYwppbmRleCBkYzg2MTQ0Li42ZTA4MjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF85MzM2X2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzkzMzZfZXJwLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzkzMzZfZXJwLmMKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KQEAgLTEyLDEwICsxMiwxMCBAQAogCiAKIC8qCi0gKiBEQVNEXzkzMzZfRVJQX0VYQU1JTkUgCisgKiBEQVNEXzkzMzZfRVJQX0VYQU1JTkUKICAqCiAgKiBERVNDUklQVElPTgotICogICBDaGVja3Mgb25seSBmb3IgZmF0YWwvbm8vcmVjb3ZlciBlcnJvci4gCisgKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyIGVycm9yLgogICogICBBIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoZSBzZW5zZSBkYXRhIGlzIGRvbmUgbGF0ZXIgb3V0c2lkZQogICogICB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCiAgKgpAQCAtMjMsNyArMjMsNyBAQAogICogICAnQ2hhcHRlciA3LiA5MzM2IFNlbnNlIERhdGEnLgogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvciAKKyAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvcgogICogICBkYXNkX2VyYV9mYXRhbAlmb3IgYWxsIGZhdGFsICh1bnJlY292ZXJhYmxlIGVycm9ycykKICAqICAgZGFzZF9lcmFfcmVjb3Zlcglmb3IgYWxsIG90aGVycy4KICAqLwpAQCAtMzksMjIgKzM5LDMgQEAKIAlyZXR1cm4gZGFzZF9lcmFfcmVjb3ZlcjsKIAogfQkJCQkvKiBFTkQgZGFzZF85MzM2X2VycF9leGFtaW5lICovCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtaW5kZW50LWxldmVsOiA0IAotICogYy1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCi0gKiBjLWJyYWNlLW9mZnNldDogLTQKLSAqIGMtYXJnZGVjbC1pbmRlbnQ6IDQKLSAqIGMtbGFiZWwtb2Zmc2V0OiAtNAotICogYy1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogNAotICogYy1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCi0gKiBpbmRlbnQtdGFicy1tb2RlOiAxCi0gKiB0YWItd2lkdGg6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfOTM0M19lcnAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzkzNDNfZXJwLmMKaW5kZXggNGE1Yjc5NS4uZGRlY2I5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfOTM0M19lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF85MzQzX2VycC5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogRmlsZS4uLi4uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF85MzQ1X2VycC5jCiAgKiBBdXRob3IocykuLi4uLi46IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4KICAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDIxNmJjNGYuLjY3MmU1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIGRhc2RfYnVzaWQoY2hhciAqKnN0ciwgaW50ICppZDAsIGludCAqaWQxLCBpbnQgKmRldm5vKQogewogCWludCB2YWwsIG9sZF9zdHlsZTsKLSAKKwogCS8qIGNoZWNrIGZvciBsZWFkaW5nICcweCcgKi8KIAlvbGRfc3R5bGUgPSAwOwogCWlmICgoKnN0cilbMF0gPT0gJzAnICYmICgqc3RyKVsxXSA9PSAneCcpIHsKQEAgLTE3OSw3ICsxNzksNyBAQAogCWZlYXR1cmVzID0gMDsKIAogCXdoaWxlICgxKSB7Ci0JCWZvciAobGVuID0gMDsgCisJCWZvciAobGVuID0gMDsKIAkJICAgICBzdHJbbGVuXSAmJiBzdHJbbGVuXSAhPSAnOicgJiYgc3RyW2xlbl0gIT0gJyknOyBsZW4rKyk7CiAJCWlmIChsZW4gPT0gMiAmJiAhc3RybmNtcChzdHIsICJybyIsIDIpKQogCQkJZmVhdHVyZXMgfD0gREFTRF9GRUFUVVJFX1JFQURPTkxZOwpAQCAtMzU5LDcgKzM1OSw3IEBACiAgKiBBZGQgYSBkZXZtYXAgZm9yIHRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IGJ1c2lkLiBJdCBpcyBwb3NzaWJsZSB0aGF0CiAgKiB0aGUgZGV2bWFwIGFscmVhZHkgZXhpc3RzIChkYXNkPSBwYXJhbWV0ZXIpLiBUaGUgb3JkZXIgb2YgdGhlIGRldmljZXMKICAqIGFkZGVkIHRocm91Z2ggdGhpcyBmdW5jdGlvbiB3aWxsIGRlZmluZSB0aGUga2RldnMgZm9yIHRoZSBpbmRpdmlkdWFsCi0gKiBkZXZpY2VzLiAKKyAqIGRldmljZXMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGFzZF9kZXZtYXAgKgogZGFzZF9hZGRfYnVzaWQoY2hhciAqYnVzX2lkLCBpbnQgZmVhdHVyZXMpCkBAIC0zNjgsNyArMzY4LDcgQEAKIAlpbnQgaGFzaDsKIAogCW5ldyA9IChzdHJ1Y3QgZGFzZF9kZXZtYXAgKikKLQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZGV2bWFwKSwgR0ZQX0tFUk5FTCk7CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2Rldm1hcCksIEdGUF9LRVJORUwpOwogCWlmICghbmV3KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOwpAQCAtNjMwLDcgKzYzMCw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1kYXNkX3JvX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorZGFzZF9yb19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOwogCWludCByb19mbGFnOwpAQCAtNjU4LDcgKzY1OSw3IEBACiAgKiB1c2VfZGlhZyBjb250cm9scyB3aGV0aGVyIHRoZSBkcml2ZXIgc2hvdWxkIHVzZSBkaWFnIHJhdGhlciB0aGFuIHNzY2gKICAqIHRvIHRhbGsgdG8gdGhlIGRldmljZQogICovCi1zdGF0aWMgc3NpemVfdCAKK3N0YXRpYyBzc2l6ZV90CiBkYXNkX3VzZV9kaWFnX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOwpAQCAtNjczLDcgKzY3NCw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1kYXNkX3VzZV9kaWFnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorZGFzZF91c2VfZGlhZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CiAJc3NpemVfdCByYzsKQEAgLTY5NywxMSArNjk5LDExIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMKLURFVklDRV9BVFRSKHVzZV9kaWFnLCAwNjQ0LCBkYXNkX3VzZV9kaWFnX3Nob3csIGRhc2RfdXNlX2RpYWdfc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKHVzZV9kaWFnLCAwNjQ0LCBkYXNkX3VzZV9kaWFnX3Nob3csIGRhc2RfdXNlX2RpYWdfc3RvcmUpOwogCiBzdGF0aWMgc3NpemVfdAotZGFzZF9kaXNjaXBsaW5lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorZGFzZF9kaXNjaXBsaW5lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CiAJY2hhciAqZG5hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKaW5kZXggM2Y5ZDcwNC4uNDAwMmY2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIEZpbGUuLi4uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCiAgKiBBdXRob3IocykuLi4uLi46IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4KICAqIEJhc2VkIG9uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL21kaXNrLmMKQEAgLTMzNiw3ICszMzYsNyBAQAogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9kaWFnX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWlmIChwcml2YXRlID09IE5VTEwpIHsKLQkJcHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2RpYWdfcHJpdmF0ZSksR0ZQX0tFUk5FTCk7CisJCXByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9kaWFnX3ByaXZhdGUpLEdGUF9LRVJORUwpOwogCQlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7CiAJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCQkibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlIGRhdGEiKTsKQEAgLTUyNyw3ICs1MjcsNyBAQAogCQkJCSAgIGRhdGFzaXplLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkKIAkJcmV0dXJuIGNxcjsKLQkKKwogCWRyZXEgPSAoc3RydWN0IGRhc2RfZGlhZ19yZXEgKikgY3FyLT5kYXRhOwogCWRyZXEtPmJsb2NrX2NvdW50ID0gY291bnQ7CiAJZGJpbyA9IGRyZXEtPmJpbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuaAppbmRleCAzOGE0ZTU1Li5iOGM3ODI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogRmlsZS4uLi4uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmgKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogQmFzZWQgb24uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svbWRpc2suaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IDc1NjVkMzAuLjEyMjU3NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTEsNyArMSw3IEBACi0vKiAKKy8qCiAgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwogICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIDxIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20+Ci0gKgkJICAgIEhvcnN0IEh1bW1lbCA8SG9yc3QuSHVtbWVsQGRlLmlibS5jb20+IAorICoJCSAgICBIb3JzdCBIdW1tZWwgPEhvcnN0Lkh1bW1lbEBkZS5pYm0uY29tPgogICoJCSAgICBDYXJzdGVuIE90dGUgPENvdHRlQGRlLmlibS5jb20+CiAgKgkJICAgIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CkBAIC0yMTAsMTQgKzIxMCwxNCBAQAogCiAgICAgICAgIC8qIHN3aXRjaCBvbiBTeXN0ZW0gVGltZSBTdGFtcCAtIG5lZWRlZCBmb3IgWFJDIFN1cHBvcnQgKi8KICAgICAgICAgaWYgKHByaXZhdGUtPnJkY19kYXRhLmZhY2lsaXRpZXMuWFJDX3N1cHBvcnRlZCkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGF0YS0+Z2FfZXh0ZW5kZWQgfD0gMHgwODsgLyogc3dpdGNoIG9uICdUaW1lIFN0YW1wIFZhbGlkJyAgICovCiAgICAgICAgICAgICAgICAgZGF0YS0+Z2FfZXh0ZW5kZWQgfD0gMHgwMjsgLyogc3dpdGNoIG9uICdFeHRlbmRlZCBQYXJhbWV0ZXInICovCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkYXRhLT5lcF9zeXNfdGltZSA9IGdldF9jbG9jayAoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlX2Njdy0+Y291bnQgPSBzaXplb2YgKHN0cnVjdCBERV9lY2tkX2RhdGEpOwotICAgICAgICAgICAgICAgIGRlX2Njdy0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOyAgCisJCWRlX2Njdy0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuOwpAQCAtMjk2LDggKzI5Niw4IEBACiAJLyogY2hlY2sgZm9yIHNlcXVlbnRpYWwgcHJlc3RhZ2UgLSBlbmhhbmNlIGN5bGluZGVyIHJhbmdlICovCiAJaWYgKGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX1BSRVNUQUdFIHx8CiAJICAgIGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX0FDQ0VTUykgewotCQkKLQkJaWYgKGVuZC5jeWwgKyBwcml2YXRlLT5hdHRyaWIubnJfY3lsIDwgZ2VvLmN5bCkgCisKKwkJaWYgKGVuZC5jeWwgKyBwcml2YXRlLT5hdHRyaWIubnJfY3lsIDwgZ2VvLmN5bCkKIAkJCWVuZC5jeWwgKz0gcHJpdmF0ZS0+YXR0cmliLm5yX2N5bDsKIAkJZWxzZQogCQkJZW5kLmN5bCA9IChnZW8uY3lsIC0gMSk7CkBAIC0zMTcsNyArMzE3LDcgQEAKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CiAJaW50IHNlY3RvcjsKIAlpbnQgZG4sIGQ7Ci0JCQkJCisKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CiAKIAlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsCkBAIC01NTQsNyArNTU0LDcgQEAKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7Ci0JCXByaXZhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUpLAorCQlwcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlKSwKIAkJCQkgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAkJaWYgKHByaXZhdGUgPT0gTlVMTCkgewogCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCkBAIC01NjIsNyArNTYyLDYgQEAKIAkJCQkgICAgImRhdGEiKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCW1lbXNldChwcml2YXRlLCAwLCBzaXplb2Yoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlKSk7CiAJCWRldmljZS0+cHJpdmF0ZSA9ICh2b2lkICopIHByaXZhdGU7CiAJfQogCS8qIEludmFsaWRhdGUgc3RhdHVzIG9mIGluaXRpYWwgYW5hbHlzaXMuICovCkBAIC03NzMsNyArNzcyLDcgQEAKIAkJICAgICgocHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsICoKIAkJICAgICAgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwgKgogCQkgICAgICBibGtfcGVyX3RyayAqIChkZXZpY2UtPmJwX2Jsb2NrID4+IDkpKSA+PiAxKSwKLQkJICAgICgoYmxrX3Blcl90cmsgKiBkZXZpY2UtPmJwX2Jsb2NrKSA+PiAxMCksIAorCQkgICAgKChibGtfcGVyX3RyayAqIGRldmljZS0+YnBfYmxvY2spID4+IDEwKSwKIAkJICAgIHByaXZhdGUtPnVzZXNfY2RsID8KIAkJICAgICJjb21wYXRpYmxlIGRpc2sgbGF5b3V0IiA6ICJsaW51eCBkaXNrIGxheW91dCIpOwogCkBAIC05NzAsNyArOTY5LDcgQEAKIAkJCQlpZiAoaSA8IDMpIHsKIAkJCQkJZWN0LT5rbCA9IDQ7CiAJCQkJCWVjdC0+ZGwgPSBzaXplc190cmswW2ldIC0gNDsKLQkJCQl9IAorCQkJCX0KIAkJCX0KIAkJCWlmICgoZmRhdGEtPmludGVuc2l0eSAmIDB4MDgpICYmCiAJCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQgPT0gMSkgewpAQCAtMTI3MCw3ICsxMjY5LDcgQEAKIAogLyoKICAqIFJlbGVhc2UgZGV2aWNlIGlvY3RsLgotICogQnVpbHMgYSBjaGFubmVsIHByb2dyYW1tIHRvIHJlbGVhc2VzIGEgcHJpb3IgcmVzZXJ2ZWQgCisgKiBCdWlscyBhIGNoYW5uZWwgcHJvZ3JhbW0gdG8gcmVsZWFzZXMgYSBwcmlvciByZXNlcnZlZAogICogKHNlZSBkYXNkX2Vja2RfcmVzZXJ2ZSkgZGV2aWNlLgogICovCiBzdGF0aWMgaW50CkBAIC0xMzEwLDggKzEzMDksOCBAQAogLyoKICAqIFJlc2VydmUgZGV2aWNlIGlvY3RsLgogICogT3B0aW9ucyBhcmUgc2V0IHRvICdzeW5jaHJvbm91cyB3YWl0IGZvciBpbnRlcnJ1cHQnIGFuZAotICogJ3RpbWVvdXQgdGhlIHJlcXVlc3QnLiBUaGlzIGxlYWRzIHRvIGEgdGVybWluYXRlIElPIGlmIAotICogdGhlIGludGVycnVwdCBpcyBvdXRzdGFuZGluZyBmb3IgYSBjZXJ0YWluIHRpbWUuIAorICogJ3RpbWVvdXQgdGhlIHJlcXVlc3QnLiBUaGlzIGxlYWRzIHRvIGEgdGVybWluYXRlIElPIGlmCisgKiB0aGUgaW50ZXJydXB0IGlzIG91dHN0YW5kaW5nIGZvciBhIGNlcnRhaW4gdGltZS4KICAqLwogc3RhdGljIGludAogZGFzZF9lY2tkX3Jlc2VydmUoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCkBAIC0xMzQ5LDcgKzEzNDgsNyBAQAogCiAvKgogICogU3RlYWwgbG9jayBpb2N0bCAtIHVuY29uZGl0aW9uYWwgcmVzZXJ2ZSBkZXZpY2UuCi0gKiBCdWlscyBhIGNoYW5uZWwgcHJvZ3JhbW0gdG8gYnJlYWsgYSBkZXZpY2UncyByZXNlcnZhdGlvbi4gCisgKiBCdWlscyBhIGNoYW5uZWwgcHJvZ3JhbW0gdG8gYnJlYWsgYSBkZXZpY2UncyByZXNlcnZhdGlvbi4KICAqICh1bmNvbmRpdGlvbmFsIHJlc2VydmUpCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTE3MDYsMjIgKzE3MDUsMyBAQAogCiBtb2R1bGVfaW5pdChkYXNkX2Vja2RfaW5pdCk7CiBtb2R1bGVfZXhpdChkYXNkX2Vja2RfY2xlYW51cCk7Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtaW5kZW50LWxldmVsOiA0IAotICogYy1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCi0gKiBjLWJyYWNlLW9mZnNldDogLTQKLSAqIGMtYXJnZGVjbC1pbmRlbnQ6IDQKLSAqIGMtbGFiZWwtb2Zmc2V0OiAtNAotICogYy1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogNAotICogYy1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCi0gKiBpbmRlbnQtdGFicy1tb2RlOiAxCi0gKiB0YWItd2lkdGg6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCmluZGV4IGQ1NzM0ZTkuLjlkOTFjODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKQEAgLTEsNyArMSw3IEBACi0vKiAKKy8qCiAgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAogICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIDxIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20+Ci0gKiAgICAgICAgICAgICAgICAgIEhvcnN0IEh1bW1lbCA8SG9yc3QuSHVtbWVsQGRlLmlibS5jb20+IAorICoJCSAgICBIb3JzdCBIdW1tZWwgPEhvcnN0Lkh1bW1lbEBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KICAqIChDKSBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCAxOTk5LDIwMDAKICAqCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkJdW5zaWduZWQgY2hhciByZXNlcnZlZDI6NDsKIAkJdW5zaWduZWQgY2hhciByZXNlcnZlZDM6ODsKIAkJdW5zaWduZWQgY2hhciBkZWZlY3Rfd3I6MTsKLQkJdW5zaWduZWQgY2hhciBYUkNfc3VwcG9ydGVkOjE7IAorCQl1bnNpZ25lZCBjaGFyIFhSQ19zdXBwb3J0ZWQ6MTsKIAkJdW5zaWduZWQgY2hhciByZXNlcnZlZDQ6MTsKIAkJdW5zaWduZWQgY2hhciBzdHJpcGluZzoxOwogCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkNTo0OwpAQCAtMzQzLDcgKzM0Myw3IEBACiB9OwogCiAvKgotICogUGVyZm9ybSBTdWJzeXN0ZW0gRnVuY3Rpb24gLSBQcmVwYXJlIGZvciBSZWFkIFN1YnN5c3RlbSBEYXRhCSAKKyAqIFBlcmZvcm0gU3Vic3lzdGVtIEZ1bmN0aW9uIC0gUHJlcGFyZSBmb3IgUmVhZCBTdWJzeXN0ZW0gRGF0YQogICovCiBzdHJ1Y3QgZGFzZF9wc2ZfcHJzc2RfZGF0YSB7CiAJdW5zaWduZWQgY2hhciBvcmRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKaW5kZXggYjg0MjM3Ny4uNDEwOGQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAogICAgICAgICAvKiBqdXN0IHJldHJ5IC0gdGhlcmUgaXMgbm90aGluZyB0byBzYXZlIC4uLiBJIGdvdCBubyBzZW5zZSBkYXRhLi4uLiAqLwogICAgICAgICBpZiAoY3FyLT5yZXRyaWVzID4gMCkgewotICAgICAgICAgICAgICAgIERFVl9NRVNTQUdFIChLRVJOX0RFQlVHLCBkZXZpY2UsIAorCQlERVZfTUVTU0FHRSAoS0VSTl9ERUJVRywgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdCBFUlAgY2FsbGVkICglaSByZXRyaWVzIGxlZnQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3FyLT5yZXRyaWVzKTsKIAkJY3FyLT5scG0gICAgPSBMUE1fQU5ZUEFUSDsKQEAgLTE1NSw3ICsxNTUsNyBAQAogCiAvKgogICogUHJpbnQgdGhlIGhleCBkdW1wIG9mIHRoZSBtZW1vcnkgdXNlZCBieSBhIHJlcXVlc3QuIFRoaXMgaW5jbHVkZXMKLSAqIGFsbCBlcnJvciByZWNvdmVyeSBjY3dzIHRoYXQgaGF2ZSBiZWVuIGNoYWluZWQgaW4gZnJvbSBvZiB0aGUgCisgKiBhbGwgZXJyb3IgcmVjb3ZlcnkgY2N3cyB0aGF0IGhhdmUgYmVlbiBjaGFpbmVkIGluIGZyb20gb2YgdGhlCiAgKiByZWFsIHJlcXVlc3QuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjI3LDEyICsyMjcsMTIgQEAKIAkJLyoKIAkJICogTG9nIGJ5dGVzIGFycm91bmQgZmFpbGVkIENDVyBidXQgb25seSBpZiB3ZSBkaWQKIAkJICogbm90IGxvZyB0aGUgd2hvbGUgQ1Agb2YgdGhlIENDVyBpcyBvdXRzaWRlIHRoZQotCQkgKiBsb2dnZWQgQ1AuIAorCQkgKiBsb2dnZWQgQ1AuCiAJCSAqLwogCQlpZiAoY3BsZW5ndGggPiA0MCB8fAogCQkgICAgKChhZGRyX3QpIGNwYSA8IChhZGRyX3QpIGxjcXItPmNwYWRkciAmJgogCQkgICAgIChhZGRyX3QpIGNwYSA+IChhZGRyX3QpIChsY3FyLT5jcGFkZHIgKyBjcGxlbmd0aCArIDQpKSkgewotCQkJCisKIAkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCiAJCQkJICAgICJGYWlsZWQgQ0NXICglcCkgKGFyZWEpOiIsCiAJCQkJICAgICh2b2lkICopIChsb25nKSBjcGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwppbmRleCA5MTE0NTY5Li5kMzMxYzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIEZpbGUuLi4uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KQEAgLTEyNSwxMyArMTI1LDEzIEBACiBkYXNkX2ZiYV9jaGVja19jaGFyYWN0ZXJpc3RpY3Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRhc2RfZmJhX3ByaXZhdGUgKnByaXZhdGU7Ci0Jc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSBkZXZpY2UtPmNkZXY7CQorCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2ID0gZGV2aWNlLT5jZGV2OwogCXZvaWQgKnJkY19kYXRhOwogCWludCByYzsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZmJhX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWlmIChwcml2YXRlID09IE5VTEwpIHsKLQkJcHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2ZiYV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJCXByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCQlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7CiAJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCQkgICAgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgcHJpdmF0ZSAiCkBAIC0yMDQsNyArMjA0LDcgQEAKIAlpZiAoaXJiLT5zY3N3LmNzdGF0ID09IDB4MDAgJiYKIAkgICAgaXJiLT5zY3N3LmRzdGF0ID09IChERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkpCiAJCXJldHVybiBkYXNkX2VyYV9ub25lOwotCQorCiAJY2RldiA9IGRldmljZS0+Y2RldjsKIAlzd2l0Y2ggKGNkZXYtPmlkLmRldl90eXBlKSB7CiAJY2FzZSAweDMzNzA6CkBAIC01MzksNyArNTM5LDcgQEAKICAqIDgxOTIgYnl0ZXMgKD0yIHBhZ2VzKS4gRm9yIDY0IGJpdCBvbmUgZGFzZF9tY2h1bmt0X3Qgc3RydWN0dXJlIGhhcwogICogMjQgYnl0ZXMsIHRoZSBzdHJ1Y3QgZGFzZF9jY3dfcmVxIGhhcyAxMzYgYnl0ZXMgYW5kIGVhY2ggYmxvY2sgY2FuIHVzZQogICogdXAgdG8gMTYgYnl0ZXMgKDggZm9yIHRoZSBjY3cgYW5kIDggZm9yIHRoZSBpZGFsIHBvaW50ZXIpLiBJbgotICogYWRkaXRpb24gd2UgaGF2ZSBvbmUgZGVmaW5lIGV4dGVudCBjY3cgKyAxNiBieXRlcyBvZiBkYXRhIGFuZCBhIAorICogYWRkaXRpb24gd2UgaGF2ZSBvbmUgZGVmaW5lIGV4dGVudCBjY3cgKyAxNiBieXRlcyBvZiBkYXRhIGFuZCBhCiAgKiBsb2NhdGUgcmVjb3JkIGNjdyBmb3IgZWFjaCBibG9jayAoc3R1cGlkIGRldmljZXMhKSArIDE2IGJ5dGVzIG9mIGRhdGEuCiAgKiBUaGF0IG1ha2VzOgogICogKDgxOTIgLSAyNCAtIDEzNiAtIDggLSAxNikgLyA0MCA9IDIwMC4yIGJsb2NrcyBhdCBtYXhpbXVtLgpAQCAtNTg5LDIyICs1ODksMyBAQAogCiBtb2R1bGVfaW5pdChkYXNkX2ZiYV9pbml0KTsKIG1vZHVsZV9leGl0KGRhc2RfZmJhX2NsZWFudXApOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWluZGVudC1sZXZlbDogNCAKLSAqIGMtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAotICogYy1icmFjZS1vZmZzZXQ6IC00Ci0gKiBjLWFyZ2RlY2wtaW5kZW50OiA0Ci0gKiBjLWxhYmVsLW9mZnNldDogLTQKLSAqIGMtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDQKLSAqIGMtY29udGludWVkLWJyYWNlLW9mZnNldDogMAotICogaW5kZW50LXRhYnMtbW9kZTogMQotICogdGFiLXdpZHRoOiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmgKaW5kZXggZGExZmE5MS4uMTRjOTEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmgKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5oCiAgKiBBdXRob3IocykuLi4uLi46IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4KICAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IGQ0YjEzZTMuLjJjMWZhODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC0xLDcgKzEsNyBAQAotLyogCisvKgogICogRmlsZS4uLi4uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAogICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIDxIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20+Ci0gKiAgICAgICAgICAgICAgICAgIEhvcnN0IEh1bW1lbCA8SG9yc3QuSHVtbWVsQGRlLmlibS5jb20+IAorICoJCSAgICBIb3JzdCBIdW1tZWwgPEhvcnN0Lkh1bW1lbEBkZS5pYm0uY29tPgogICoJCSAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKiBCdWdyZXBvcnRzLnRvLi46IDxMaW51eDM5MEBkZS5pYm0uY29tPgogICogKEMpIElCTSBDb3Jwb3JhdGlvbiwgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIDE5OTksMjAwMApAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2RhdGE7CiB9OwogCi0vKiAKKy8qCiAgKiBkYXNkX2Njd19yZXEgLT4gc3RhdHVzIGNhbiBiZToKICAqLwogI2RlZmluZSBEQVNEX0NRUl9GSUxMRUQgICAweDAwCS8qIHJlcXVlc3QgaXMgcmVhZHkgdG8gYmUgcHJvY2Vzc2VkICovCkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogRXJyb3IgcmVjb3ZlcnkgZnVuY3Rpb25zLiBleGFtaW5lX2Vycm9yKCkgcmV0dXJucyBhIHZhbHVlIHRoYXQKICAgICAgICAgICogaW5kaWNhdGVzIHdoYXQgdG8gZG8gZm9yIGFuIGVycm9yIGNvbmRpdGlvbi4gSWYgZXhhbWluZV9lcnJvcigpCi0gICAgICAgICAqIHJldHVybnMgJ2Rhc2RfZXJhX3JlY292ZXInIGVycF9hY3Rpb24oKSBpcyBjYWxsZWQgdG8gY3JlYXRlIGEgCisJICogcmV0dXJucyAnZGFzZF9lcmFfcmVjb3ZlcicgZXJwX2FjdGlvbigpIGlzIGNhbGxlZCB0byBjcmVhdGUgYQogICAgICAgICAgKiBzcGVjaWFsIGVycm9yIHJlY292ZXJ5IGNjdy4gZXJwX3Bvc3RhY3Rpb24oKSBpcyBjYWxsZWQgYWZ0ZXIKICAgICAgICAgICogYW4gZXJyb3IgcmVjb3ZlcnkgY2N3IGhhcyBmaW5pc2hlZCBpdHMgZXhlY3V0aW9uLiBkdW1wX3NlbnNlCiAgICAgICAgICAqIGlzIGNhbGxlZCBmb3IgZXZlcnkgZXJyb3IgY29uZGl0aW9uIHRvIHByaW50IHRoZSBzZW5zZSBkYXRhCkBAIC0zMDIsMTEgKzMwMiwxMSBAQAogCXNwaW5sb2NrX3QgcmVxdWVzdF9xdWV1ZV9sb2NrOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAgICAgICAgIHVuc2lnbmVkIGludCBkZXZpbmRleDsKLQl1bnNpZ25lZCBsb25nIGJsb2NrczsJCS8qIHNpemUgb2Ygdm9sdW1lIGluIGJsb2NrcyAqLwotCXVuc2lnbmVkIGludCBicF9ibG9jazsJCS8qIGJ5dGVzIHBlciBibG9jayAqLwotCXVuc2lnbmVkIGludCBzMmJfc2hpZnQ7CQkvKiBsb2cyIChicF9ibG9jay81MTIpICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIHBlciBkZXZpY2UgZmxhZ3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBmZWF0dXJlczsgICAgICAgIC8qIGNvcHkgb2YgZGV2bWFwLWZlYXR1cmVzIChyZWFkLW9ubHkhKSAqLworCXVuc2lnbmVkIGxvbmcgYmxvY2tzOwkgICAvKiBzaXplIG9mIHZvbHVtZSBpbiBibG9ja3MgKi8KKwl1bnNpZ25lZCBpbnQgYnBfYmxvY2s7CSAgIC8qIGJ5dGVzIHBlciBibG9jayAqLworCXVuc2lnbmVkIGludCBzMmJfc2hpZnQ7CSAgIC8qIGxvZzIgKGJwX2Jsb2NrLzUxMikgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkgICAvKiBwZXIgZGV2aWNlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgZmVhdHVyZXM7ICAgLyogY29weSBvZiBkZXZtYXAtZmVhdHVyZXMgKHJlYWQtb25seSEpICovCiAKIAkvKiBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcgc3R1ZmYgKGVlcikgKi8KIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICplZXJfY3FyOwpAQCAtNjA2LDIyICs2MDYsMyBAQAogI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCQkJCS8qIERBU0RfSCAqLwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWluZGVudC1sZXZlbDogNCAKLSAqIGMtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAotICogYy1icmFjZS1vZmZzZXQ6IC00Ci0gKiBjLWFyZ2RlY2wtaW5kZW50OiA0Ci0gKiBjLWxhYmVsLW9mZnNldDogLTQKLSAqIGMtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDQKLSAqIGMtY29udGludWVkLWJyYWNlLW9mZnNldDogMAotICogaW5kZW50LXRhYnMtbW9kZTogMQotICogdGFiLXdpZHRoOiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IGI4YzgwZDIuLjMwMmJjZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtOTAsMTAgKzkwLDEwIEBACiBkYXNkX2lvY3RsX3F1aWVzY2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKKwogCWlmICghY2FwYWJsZSAoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwotCQorCiAJREVWX01FU1NBR0UgKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKIAkJICAgICAiUXVpZXNjZSBJTyBvbiBkZXZpY2UiKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOwpAQCAtMTEwLDEzICsxMTAsMTMgQEAKIGRhc2RfaW9jdGxfcmVzdW1lKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCi0JaWYgKCFjYXBhYmxlIChDQVBfU1lTX0FETUlOKSkgCisKKwlpZiAoIWNhcGFibGUgKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAogCURFVl9NRVNTQUdFIChLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCSAgICAgInJlc3VtZSBJTyBvbiBkZXZpY2UiKTsKLQkKKwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CiAJZGV2aWNlLT5zdG9wcGVkICY9IH5EQVNEX1NUT1BQRURfUVVJRVNDRTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CkBAIC0yODcsNyArMjg3LDcgQEAKIAlkYXNkX2luZm8tPm9wZW5fY291bnQgPSBhdG9taWNfcmVhZCgmZGV2aWNlLT5vcGVuX2NvdW50KTsKIAlpZiAoIWRldmljZS0+YmRldikKIAkJZGFzZF9pbmZvLT5vcGVuX2NvdW50Kys7Ci0JCisKIAkvKgogCSAqIGNoZWNrIGlmIGRldmljZSBpcyByZWFsbHkgZm9ybWF0dGVkCiAJICogTERMIC8gQ0RMIHdhcyByZXR1cm5lZCBieSAnZmlsbF9pbmZvJwo=