From mboxrd@z Thu Jan 1 00:00:00 1970 From: Harry Wentland Subject: [PATCH 12/32] drm/amd/display: Refactor FreeSync module Date: Tue, 3 Apr 2018 21:27:27 -0400 Message-ID: <20180404012747.5651-13-harry.wentland@amd.com> References: <20180404012747.5651-1-harry.wentland@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180404012747.5651-1-harry.wentland-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Harry Wentland , Anthony Koo RnJvbTogQW50aG9ueSBLb28gPEFudGhvbnkuS29vQGFtZC5jb20+CgpSZW1vdmUgZGVwZW5kZW5j eSBvbiBpbnRlcm5hbCBzaW5rIG1hcCBhbmQgaW5zdGVhZAp1c2UgZXhpc3Rpbmcgc3RyZWFtIGFu ZCBwbGFuZSBzdGF0ZQoKU2lnbmVkLW9mZi1ieTogQW50aG9ueSBLb28gPEFudGhvbnkuS29vQGFt ZC5jb20+ClNpZ25lZC1vZmYtYnk6IEhhcnJ5IFdlbnRsYW5kIDxoYXJyeS53ZW50bGFuZEBhbWQu Y29tPgpSZXZpZXdlZC1ieTogVG9ueSBDaGVuZyA8VG9ueS5DaGVuZ0BhbWQuY29tPgpBY2tlZC1i eTogSGFycnkgV2VudGxhbmQgPGhhcnJ5LndlbnRsYW5kQGFtZC5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYyAgfCAgMzIyICsrLS0KIGRy aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmggIHwgICAxOCAr LQogLi4uL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG1fbXN0X3R5cGVzLmMgICAgfCAg ICA5ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kYy5jICAgICAgICAg ICB8ICAgNjAgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjX2xpbmtf ZHAuYyAgIHwgICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19y ZXNvdXJjZS5jICB8ICAxMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY19o d190eXBlcy5oICAgICAgIHwgICAgNiAtCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMv ZGNfc3RyZWFtLmggICAgICAgICB8ICAgMjkgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9kYy9kY190eXBlcy5oICAgICAgICAgIHwgICAyMiArLQogLi4uL2FtZC9kaXNwbGF5L2RjL2Rj ZTExMC9kY2UxMTBfaHdfc2VxdWVuY2VyLmMgICAgfCAgIDM0ICstCiAuLi4vZHJtL2FtZC9kaXNw bGF5L2RjL2RjbjEwL2RjbjEwX2h3X3NlcXVlbmNlci5jICB8ICAgMjcgKy0KIC4uLi9ncHUvZHJt L2FtZC9kaXNwbGF5L2luY2x1ZGUvc2V0X21vZGVfdHlwZXMuaCAgIHwgICAxMiAtCiAuLi4vZHJt L2FtZC9kaXNwbGF5L21vZHVsZXMvZnJlZXN5bmMvZnJlZXN5bmMuYyAgICB8IDE4MzYgKysrKysr Ky0tLS0tLS0tLS0tLS0KIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaW5jL21vZF9m cmVlc3luYy5oIHwgIDE0NCArLQogMTQgZmlsZXMgY2hhbmdlZCwgOTM3IGluc2VydGlvbnMoKyks IDE2OTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9h bWRncHVfZG0vYW1kZ3B1X2RtLmMKaW5kZXggN2JjMzFmMjgwYTU2Li41NWE4YWFmNjhhMWYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2Rt LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0u YwpAQCAtNTQsOCArNTQsNiBAQAogI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CiAjaW5j bHVkZSA8ZHJtL2RybV9lZGlkLmg+CiAKLSNpbmNsdWRlICJtb2R1bGVzL2luYy9tb2RfZnJlZXN5 bmMuaCIKLQogI2lmIGRlZmluZWQoQ09ORklHX0RSTV9BTURfRENfRENOMV8wKQogI2luY2x1ZGUg Iml2c3JjaWQvaXJxc3Jjc19kY25fMV8wLmgiCiAKQEAgLTg1MCw4ICs4NDgsNyBAQCBhbWRncHVf ZG1fdXBkYXRlX2Nvbm5lY3Rvcl9hZnRlcl9kZXRlY3Qoc3RydWN0IGFtZGdwdV9kbV9jb25uZWN0 b3IgKmFjb25uZWN0b3IpCiAKIAkJaWYgKHNpbmspIHsKIAkJCWlmIChhY29ubmVjdG9yLT5kY19z aW5rKSB7Ci0JCQkJYW1kZ3B1X2RtX3JlbW92ZV9zaW5rX2Zyb21fZnJlZXN5bmNfbW9kdWxlKAot CQkJCQkJCQljb25uZWN0b3IpOworCQkJCWFtZGdwdV9kbV91cGRhdGVfZnJlZXN5bmNfY2Fwcyhj b25uZWN0b3IsIE5VTEwpOwogCQkJCS8qIHJldGFpbiBhbmQgcmVsZWFzZSBiZWxsb3cgYXJlIHVz ZWQgZm9yCiAJCQkJICogYnVtcCB1cCByZWZjb3VudCBmb3Igc2luayBiZWNhdXNlIHRoZSBsaW5r IGRvbid0IHBvaW50CiAJCQkJICogdG8gaXQgYW55bW9yZSBhZnRlciBkaXNjb25uZWN0IHNvIG9u IG5leHQgY3J0YyB0byBjb25uZWN0b3IKQEAgLTg2MSwxMCArODU4LDEwIEBAIGFtZGdwdV9kbV91 cGRhdGVfY29ubmVjdG9yX2FmdGVyX2RldGVjdChzdHJ1Y3QgYW1kZ3B1X2RtX2Nvbm5lY3RvciAq YWNvbm5lY3RvcikKIAkJCQkJZGNfc2lua19yZWxlYXNlKGFjb25uZWN0b3ItPmRjX3NpbmspOwog CQkJfQogCQkJYWNvbm5lY3Rvci0+ZGNfc2luayA9IHNpbms7Ci0JCQlhbWRncHVfZG1fYWRkX3Np bmtfdG9fZnJlZXN5bmNfbW9kdWxlKAotCQkJCQkJY29ubmVjdG9yLCBhY29ubmVjdG9yLT5lZGlk KTsKKwkJCWFtZGdwdV9kbV91cGRhdGVfZnJlZXN5bmNfY2Fwcyhjb25uZWN0b3IsCisJCQkJCWFj b25uZWN0b3ItPmVkaWQpOwogCQl9IGVsc2UgewotCQkJYW1kZ3B1X2RtX3JlbW92ZV9zaW5rX2Zy b21fZnJlZXN5bmNfbW9kdWxlKGNvbm5lY3Rvcik7CisJCQlhbWRncHVfZG1fdXBkYXRlX2ZyZWVz eW5jX2NhcHMoY29ubmVjdG9yLCBOVUxMKTsKIAkJCWlmICghYWNvbm5lY3Rvci0+ZGNfc2luaykK IAkJCQlhY29ubmVjdG9yLT5kY19zaW5rID0gYWNvbm5lY3Rvci0+ZGNfZW1fc2luazsKIAkJCWVs c2UgaWYgKGFjb25uZWN0b3ItPmRjX3NpbmsgIT0gYWNvbm5lY3Rvci0+ZGNfZW1fc2luaykKQEAg LTkwMSw4ICs4OTgsNyBAQCBhbWRncHVfZG1fdXBkYXRlX2Nvbm5lY3Rvcl9hZnRlcl9kZXRlY3Qo c3RydWN0IGFtZGdwdV9kbV9jb25uZWN0b3IgKmFjb25uZWN0b3IpCiAJCS8qIFRPRE86IGNoZWNr IGlmIHdlIHN0aWxsIG5lZWQgdGhlIFMzIG1vZGUgdXBkYXRlIHdvcmthcm91bmQuCiAJCSAqIElm IHllcywgcHV0IGl0IGhlcmUuICovCiAJCWlmIChhY29ubmVjdG9yLT5kY19zaW5rKQotCQkJYW1k Z3B1X2RtX3JlbW92ZV9zaW5rX2Zyb21fZnJlZXN5bmNfbW9kdWxlKAotCQkJCQkJCWNvbm5lY3Rv cik7CisJCQlhbWRncHVfZG1fdXBkYXRlX2ZyZWVzeW5jX2NhcHMoY29ubmVjdG9yLCBOVUxMKTsK IAogCQlhY29ubmVjdG9yLT5kY19zaW5rID0gc2luazsKIAkJaWYgKHNpbmstPmRjX2VkaWQubGVu Z3RoID09IDApIHsKQEAgLTkxNSwxMCArOTExLDEwIEBAIGFtZGdwdV9kbV91cGRhdGVfY29ubmVj dG9yX2FmdGVyX2RldGVjdChzdHJ1Y3QgYW1kZ3B1X2RtX2Nvbm5lY3RvciAqYWNvbm5lY3RvcikK IAkJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsCiAJ CQkJCWFjb25uZWN0b3ItPmVkaWQpOwogCQl9Ci0JCWFtZGdwdV9kbV9hZGRfc2lua190b19mcmVl c3luY19tb2R1bGUoY29ubmVjdG9yLCBhY29ubmVjdG9yLT5lZGlkKTsKKwkJYW1kZ3B1X2RtX3Vw ZGF0ZV9mcmVlc3luY19jYXBzKGNvbm5lY3RvciwgYWNvbm5lY3Rvci0+ZWRpZCk7CiAKIAl9IGVs c2UgewotCQlhbWRncHVfZG1fcmVtb3ZlX3NpbmtfZnJvbV9mcmVlc3luY19tb2R1bGUoY29ubmVj dG9yKTsKKwkJYW1kZ3B1X2RtX3VwZGF0ZV9mcmVlc3luY19jYXBzKGNvbm5lY3RvciwgTlVMTCk7 CiAJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIE5V TEwpOwogCQlhY29ubmVjdG9yLT5udW1fbW9kZXMgPSAwOwogCQlhY29ubmVjdG9yLT5kY19zaW5r ID0gTlVMTDsKQEAgLTE1OTQsMzEgKzE1OTAsNzIgQEAgc3RhdGljIHU4IGRtX2dldF9iYWNrbGln aHRfbGV2ZWwoc3RydWN0IGFtZGdwdV9lbmNvZGVyICphbWRncHVfZW5jb2RlcikKIHN0YXRpYyBp bnQgYW1kZ3B1X25vdGlmeV9mcmVlc3luYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3QgbW9kX2ZyZWVzeW5j X3BhcmFtcyBmcmVlc3luY19wYXJhbXM7Ci0JdWludDhfdCBudW1fc3RyZWFtczsKLQl1aW50OF90 IGk7Ci0KLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJ c3RydWN0IGRybV9hbWRncHVfZnJlZXN5bmMgKmFyZ3MgPSBkYXRhOwotCWludCByID0gMDsKKwlz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7CisJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVp cmVfY3R4IGN0eDsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbl9zdGF0 ZSwgKm5ld19jb25fc3RhdGU7CisJaW50IHJldCA9IDA7CisJdWludDhfdCBpOworCWJvb2wgZW5h YmxlID0gZmFsc2U7CiAKLQlmcmVlc3luY19wYXJhbXMuc3RhdGUgID0gRlJFRVNZTkNfU1RBVEVf RlVMTFNDUkVFTjsKIAlpZiAoYXJncy0+b3AgPT0gQU1ER1BVX0ZSRUVTWU5DX0ZVTExTQ1JFRU5f RU5URVIpCi0JCWZyZWVzeW5jX3BhcmFtcy5lbmFibGUgPSB0cnVlOwotCWVsc2UKLQkJZnJlZXN5 bmNfcGFyYW1zLmVuYWJsZSA9IGZhbHNlOworCQllbmFibGUgPSB0cnVlOwogCi0JbnVtX3N0cmVh bXMgPSBkY19nZXRfY3VycmVudF9zdHJlYW1fY291bnQoYWRldi0+ZG0uZGMpOworCWRybV9tb2Rl c2V0X2FjcXVpcmVfaW5pdCgmY3R4LCAwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1fc3RyZWFt czsgaSsrKSB7Ci0JCXN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbTsKLQkJc3RyZWFtID0g ZGNfZ2V0X3N0cmVhbV9hdF9pbmRleChhZGV2LT5kbS5kYywgaSk7CisJc3RhdGUgPSBkcm1fYXRv bWljX3N0YXRlX2FsbG9jKGRldik7CisJaWYgKCFzdGF0ZSkgeworCQlyZXQgPSAtRU5PTUVNOwor CQlnb3RvIG91dDsKKwl9CisJc3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKIAotCQltb2RfZnJl ZXN5bmNfdXBkYXRlX3N0YXRlKGFkZXYtPmRtLmZyZWVzeW5jX21vZHVsZSwKLQkJCQkJICAmc3Ry ZWFtLCAxLCAmZnJlZXN5bmNfcGFyYW1zKTsKK3JldHJ5OgorCWRybV9mb3JfZWFjaF9jcnRjKGNy dGMsIGRldikgeworCQlyZXQgPSBkcm1fYXRvbWljX2FkZF9hZmZlY3RlZF9jb25uZWN0b3JzKHN0 YXRlLCBjcnRjKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKworCQkvKiBUT0RPIHJld29y ayBhbWRncHVfZG1fY29tbWl0X3BsYW5lcyBzbyB3ZSBkb24ndCBuZWVkIHRoaXMgKi8KKwkJcmV0 ID0gZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfcGxhbmVzKHN0YXRlLCBjcnRjKTsKKwkJaWYgKHJl dCkKKwkJCWdvdG8gZmFpbDsKIAl9CiAKLQlyZXR1cm4gcjsKKwlmb3JfZWFjaF9vbGRuZXdfY29u bmVjdG9yX2luX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IsIG9sZF9jb25fc3RhdGUsIG5ld19jb25f c3RhdGUsIGkpIHsKKwkJc3RydWN0IGRtX2Nvbm5lY3Rvcl9zdGF0ZSAqZG1fbmV3X2Nvbl9zdGF0 ZSA9IHRvX2RtX2Nvbm5lY3Rvcl9zdGF0ZShuZXdfY29uX3N0YXRlKTsKKwkJc3RydWN0IGRybV9j cnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZTsKKwkJc3RydWN0IGFtZGdwdV9jcnRjICphY3J0YyA9 IHRvX2FtZGdwdV9jcnRjKGRtX25ld19jb25fc3RhdGUtPmJhc2UuY3J0Yyk7CisJCXN0cnVjdCBk bV9jcnRjX3N0YXRlICpkbV9uZXdfY3J0Y19zdGF0ZTsKKworCQlpZiAoIWFjcnRjKSB7CisJCQlB U1NFUlQoMCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW5ld19jcnRjX3N0YXRlID0gZHJtX2F0 b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsICZhY3J0Yy0+YmFzZSk7CisJCWRtX25ld19j cnRjX3N0YXRlID0gdG9fZG1fY3J0Y19zdGF0ZShuZXdfY3J0Y19zdGF0ZSk7CisKKwkJZG1fbmV3 X2NydGNfc3RhdGUtPmZyZWVzeW5jX2VuYWJsZWQgPSBlbmFibGU7CisJfQorCisJcmV0ID0gZHJt X2F0b21pY19jb21taXQoc3RhdGUpOworCitmYWlsOgorCWlmIChyZXQgPT0gLUVERUFETEspIHsK KwkJZHJtX2F0b21pY19zdGF0ZV9jbGVhcihzdGF0ZSk7CisJCWRybV9tb2Rlc2V0X2JhY2tvZmYo JmN0eCk7CisJCWdvdG8gcmV0cnk7CisJfQorCisJZHJtX2F0b21pY19zdGF0ZV9wdXQoc3RhdGUp OworCitvdXQ6CisJZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKKwlkcm1fbW9kZXNldF9h Y3F1aXJlX2ZpbmkoJmN0eCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVj dCBhbWRncHVfZGlzcGxheV9mdW5jcyBkbV9kaXNwbGF5X2Z1bmNzID0gewpAQCAtMjU1Miw2ICsy NTg5LDEwIEBAIGRtX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK IAkJZGNfc3RyZWFtX3JldGFpbihzdGF0ZS0+c3RyZWFtKTsKIAl9CiAKKwlzdGF0ZS0+YWRqdXN0 ID0gY3VyLT5hZGp1c3Q7CisJc3RhdGUtPnZycl9pbmZvcGFja2V0ID0gY3VyLT52cnJfaW5mb3Bh Y2tldDsKKwlzdGF0ZS0+ZnJlZXN5bmNfZW5hYmxlZCA9IGN1ci0+ZnJlZXN5bmNfZW5hYmxlZDsK KwogCS8qIFRPRE8gRHVwbGljYXRlIGRjX3N0cmVhbSBhZnRlciBvYmplY3RzIGFyZSBzdHJlYW0g b2JqZWN0IGlzIGZsYXR0ZW5lZCAqLwogCiAJcmV0dXJuICZzdGF0ZS0+YmFzZTsKQEAgLTI2NjEs MjEgKzI3MDIsNyBAQCBpbnQgYW1kZ3B1X2RtX2Nvbm5lY3Rvcl9hdG9taWNfc2V0X3Byb3BlcnR5 KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCWRtX25ld19zdGF0ZS0+dW5kZXJz Y2FuX2VuYWJsZSA9IHZhbDsKIAkJcmV0ID0gMDsKIAl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGFk ZXYtPm1vZGVfaW5mby5mcmVlc3luY19wcm9wZXJ0eSkgewotCQlzdHJ1Y3QgYW1kZ3B1X2NydGMg KmFjcnRjOwotCQlzdHJ1Y3QgZG1fY3J0Y19zdGF0ZSAqYWNydGNfc3RhdGU7Ci0KLQkJZG1fbmV3 X3N0YXRlLT51c2VyX2VuYWJsZS5lbmFibGVfZm9yX2dhbWluZyA9IHZhbDsKLQkJZG1fbmV3X3N0 YXRlLT51c2VyX2VuYWJsZS5lbmFibGVfZm9yX3N0YXRpYyA9IHZhbDsKLQkJZG1fbmV3X3N0YXRl LT51c2VyX2VuYWJsZS5lbmFibGVfZm9yX3ZpZGVvID0gdmFsOwotCi0JCWlmIChhZGV2LT5kbS5m cmVlc3luY19tb2R1bGUgJiYgY29ubmVjdG9yX3N0YXRlLT5jcnRjKSB7Ci0JCQlhY3J0YyA9IHRv X2FtZGdwdV9jcnRjKGNvbm5lY3Rvcl9zdGF0ZS0+Y3J0Yyk7Ci0JCQlhY3J0Y19zdGF0ZSA9IHRv X2RtX2NydGNfc3RhdGUoY29ubmVjdG9yX3N0YXRlLT5jcnRjLT5zdGF0ZSk7Ci0JCQltb2RfZnJl ZXN5bmNfc2V0X3VzZXJfZW5hYmxlKGFkZXYtPmRtLmZyZWVzeW5jX21vZHVsZSwKLQkJCQkJCSAg ICAgJmFjcnRjX3N0YXRlLT5zdHJlYW0sIDEsCi0JCQkJCQkgICAgICZkbV9uZXdfc3RhdGUtPnVz ZXJfZW5hYmxlKTsKLQkJfQotCisJCWRtX25ld19zdGF0ZS0+ZnJlZXN5bmNfZW5hYmxlID0gdmFs OwogCQlyZXQgPSAwOwogCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gYWRldi0+bW9kZV9pbmZvLmZy ZWVzeW5jX2NhcGFibGVfcHJvcGVydHkpIHsKIAkJZG1fbmV3X3N0YXRlLT5mcmVlc3luY19jYXBh YmxlID0gdmFsOwpAQCAtMjcyMyw3ICsyNzUwLDcgQEAgaW50IGFtZGdwdV9kbV9jb25uZWN0b3Jf YXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkq dmFsID0gZG1fc3RhdGUtPnVuZGVyc2Nhbl9lbmFibGU7CiAJCXJldCA9IDA7CiAJfSBlbHNlIGlm IChwcm9wZXJ0eSA9PSBhZGV2LT5tb2RlX2luZm8uZnJlZXN5bmNfcHJvcGVydHkpIHsKLQkJKnZh bCA9IGRtX3N0YXRlLT51c2VyX2VuYWJsZS5lbmFibGVfZm9yX2dhbWluZzsKKwkJKnZhbCA9IGRt X3N0YXRlLT5mcmVlc3luY19lbmFibGU7CiAJCXJldCA9IDA7CiAJfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBhZGV2LT5tb2RlX2luZm8uZnJlZXN5bmNfY2FwYWJsZV9wcm9wZXJ0eSkgewogCQkqdmFs ID0gZG1fc3RhdGUtPmZyZWVzeW5jX2NhcGFibGU7CkBAIC0yNzgyLDEzICsyODA5LDE1IEBAIGFt ZGdwdV9kbV9jb25uZWN0b3JfYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQogCXN0cnVjdCBkbV9jb25uZWN0b3Jfc3RhdGUgKm5ld19zdGF0ZSA9 CiAJCQlrbWVtZHVwKHN0YXRlLCBzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAo bmV3X3N0YXRlKSB7Ci0JCV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9z dGF0ZShjb25uZWN0b3IsCi0JCQkJCQkJICAgICAgJm5ld19zdGF0ZS0+YmFzZSk7Ci0JCXJldHVy biAmbmV3X3N0YXRlLT5iYXNlOwotCX0KKwlpZiAoIW5ld19zdGF0ZSkKKwkJcmV0dXJuIE5VTEw7 CiAKLQlyZXR1cm4gTlVMTDsKKwlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNh dGVfc3RhdGUoY29ubmVjdG9yLCAmbmV3X3N0YXRlLT5iYXNlKTsKKworCW5ld19zdGF0ZS0+ZnJl ZXN5bmNfY2FwYWJsZSA9IHN0YXRlLT5mcmVlc3luY19jYXBhYmxlOworCW5ld19zdGF0ZS0+ZnJl ZXN5bmNfZW5hYmxlID0gc3RhdGUtPmZyZWVzeW5jX2VuYWJsZTsKKworCXJldHVybiAmbmV3X3N0 YXRlLT5iYXNlOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3Mg YW1kZ3B1X2RtX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKQEAgLTM1NDUsMTAgKzM1NzQsOSBAQCB2b2lk IGFtZGdwdV9kbV9jb25uZWN0b3JfaW5pdF9oZWxwZXIoc3RydWN0IGFtZGdwdV9kaXNwbGF5X21h bmFnZXIgKmRtLAogCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERN SUEgfHwKIAkgICAgY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQ b3J0KSB7CiAJCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZhY29ubmVjdG9yLT5iYXNlLmJh c2UsCi0JCQkJCSAgYWRldi0+bW9kZV9pbmZvLmZyZWVzeW5jX3Byb3BlcnR5LCAwKTsKKwkJCQlh ZGV2LT5tb2RlX2luZm8uZnJlZXN5bmNfcHJvcGVydHksIDApOwogCQlkcm1fb2JqZWN0X2F0dGFj aF9wcm9wZXJ0eSgmYWNvbm5lY3Rvci0+YmFzZS5iYXNlLAotCQkJCSAgICAgIGFkZXYtPm1vZGVf aW5mby5mcmVlc3luY19jYXBhYmxlX3Byb3BlcnR5LAotCQkJCQkgICAwKTsKKwkJCQlhZGV2LT5t b2RlX2luZm8uZnJlZXN5bmNfY2FwYWJsZV9wcm9wZXJ0eSwgMCk7CiAJfQogfQogCkBAIC0zNzky LDggKzM4MjAsNiBAQCBzdGF0aWMgdm9pZCByZW1vdmVfc3RyZWFtKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAogCQkJICBzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0pCiB7CiAJLyog dGhpcyBpcyB0aGUgdXBkYXRlIG1vZGUgY2FzZSAqLwotCWlmIChhZGV2LT5kbS5mcmVlc3luY19t b2R1bGUpCi0JCW1vZF9mcmVlc3luY19yZW1vdmVfc3RyZWFtKGFkZXYtPmRtLmZyZWVzeW5jX21v ZHVsZSwgc3RyZWFtKTsKIAogCWFjcnRjLT5vdGdfaW5zdCA9IC0xOwogCWFjcnRjLT5lbmFibGVk ID0gZmFsc2U7CkBAIC00MDY1LDYgKzQwOTEsMTEgQEAgc3RhdGljIGJvb2wgY29tbWl0X3BsYW5l c190b19zdHJlYW0oCiAJc3RyZWFtX3VwZGF0ZS0+ZHN0ID0gZGNfc3RyZWFtLT5kc3Q7CiAJc3Ry ZWFtX3VwZGF0ZS0+b3V0X3RyYW5zZmVyX2Z1bmMgPSBkY19zdHJlYW0tPm91dF90cmFuc2Zlcl9m dW5jOwogCisJaWYgKGRtX25ld19jcnRjX3N0YXRlLT5mcmVlc3luY19lbmFibGVkICE9IGRtX29s ZF9jcnRjX3N0YXRlLT5mcmVlc3luY19lbmFibGVkKSB7CisJCXN0cmVhbV91cGRhdGUtPnZycl9p bmZvcGFja2V0ID0gJmRjX3N0cmVhbS0+dnJyX2luZm9wYWNrZXQ7CisJCXN0cmVhbV91cGRhdGUt PmFkanVzdCA9ICZkY19zdHJlYW0tPmFkanVzdDsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgbmV3 X3BsYW5lX2NvdW50OyBpKyspIHsKIAkJdXBkYXRlc1tpXS5zdXJmYWNlID0gcGxhbmVfc3RhdGVz W2ldOwogCQl1cGRhdGVzW2ldLmdhbW1hID0KQEAgLTQyMDEsNiArNDIzMiw4IEBAIHN0YXRpYyB2 b2lkIGFtZGdwdV9kbV9jb21taXRfcGxhbmVzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZs YWdzKTsKIAkJfQogCisJCWRjX3N0cmVhbV9hdHRhY2gtPmFkanVzdCA9IGFjcnRjX3N0YXRlLT5h ZGp1c3Q7CisJCWRjX3N0cmVhbV9hdHRhY2gtPnZycl9pbmZvcGFja2V0ID0gYWNydGNfc3RhdGUt PnZycl9pbmZvcGFja2V0OwogCiAJCWlmIChmYWxzZSA9PSBjb21taXRfcGxhbmVzX3RvX3N0cmVh bShkbS0+ZGMsCiAJCQkJCQkJcGxhbmVfc3RhdGVzX2NvbnN0cnVjdGVkLApAQCAtNDM0Nyw2MiAr NDM4MCw2IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9kbV9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCQl9CiAJfSAvKiBmb3JfZWFjaF9jcnRjX2luX3N0 YXRlKCkgKi8KIAotCS8qCi0JICogQWRkIHN0cmVhbXMgYWZ0ZXIgcmVxdWlyZWQgc3RyZWFtcyBm cm9tIG5ldyBhbmQgcmVwbGFjZWQgc3RyZWFtcwotCSAqIGFyZSByZW1vdmVkIGZyb20gZnJlZXN5 bmMgbW9kdWxlCi0JICovCi0JaWYgKGFkZXYtPmRtLmZyZWVzeW5jX21vZHVsZSkgewotCQlmb3Jf ZWFjaF9vbGRuZXdfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0Yywgb2xkX2NydGNfc3RhdGUsCi0J CQkJCSAgICAgIG5ld19jcnRjX3N0YXRlLCBpKSB7Ci0JCQlzdHJ1Y3QgYW1kZ3B1X2RtX2Nvbm5l Y3RvciAqYWNvbm5lY3RvciA9IE5VTEw7Ci0JCQlzdHJ1Y3QgZG1fY29ubmVjdG9yX3N0YXRlICpk bV9uZXdfY29uX3N0YXRlID0gTlVMTDsKLQkJCXN0cnVjdCBhbWRncHVfY3J0YyAqYWNydGMgPSBO VUxMOwotCQkJYm9vbCBtb2Rlc2V0X25lZWRlZDsKLQotCQkJZG1fbmV3X2NydGNfc3RhdGUgPSB0 b19kbV9jcnRjX3N0YXRlKG5ld19jcnRjX3N0YXRlKTsKLQkJCWRtX29sZF9jcnRjX3N0YXRlID0g dG9fZG1fY3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSk7Ci0JCQltb2Rlc2V0X25lZWRlZCA9IG1v ZGVzZXRfcmVxdWlyZWQoCi0JCQkJCW5ld19jcnRjX3N0YXRlLAotCQkJCQlkbV9uZXdfY3J0Y19z dGF0ZS0+c3RyZWFtLAotCQkJCQlkbV9vbGRfY3J0Y19zdGF0ZS0+c3RyZWFtKTsKLQkJCS8qIFdl IGFkZCBzdHJlYW0gdG8gZnJlZXN5bmMgaWY6Ci0JCQkgKiAxLiBTYWlkIHN0cmVhbSBpcyBub3Qg bnVsbCwgYW5kCi0JCQkgKiAyLiBBIG1vZGVzZXQgaXMgcmVxdWVzdGVkLiBUaGlzIG1lYW5zIHRo YXQgdGhlCi0JCQkgKiAgICBzdHJlYW0gd2FzIHJlbW92ZWQgcHJldmlvdXNseSwgYW5kIG5lZWRz IHRvIGJlCi0JCQkgKiAgICByZXBsYWNlZC4KLQkJCSAqLwotCQkJaWYgKGRtX25ld19jcnRjX3N0 YXRlLT5zdHJlYW0gPT0gTlVMTCB8fAotCQkJCQkhbW9kZXNldF9uZWVkZWQpCi0JCQkJY29udGlu dWU7Ci0KLQkJCWFjcnRjID0gdG9fYW1kZ3B1X2NydGMoY3J0Yyk7Ci0KLQkJCWFjb25uZWN0b3Ig PQotCQkJCWFtZGdwdV9kbV9maW5kX2ZpcnN0X2NydGNfbWF0Y2hpbmdfY29ubmVjdG9yKAotCQkJ CQlzdGF0ZSwgY3J0Yyk7Ci0JCQlpZiAoIWFjb25uZWN0b3IpIHsKLQkJCQlEUk1fREVCVUdfRFJJ VkVSKCJBdG9taWMgY29tbWl0OiBGYWlsZWQgdG8gIgotCQkJCQkJICJmaW5kIGNvbm5lY3RvciBm b3IgYWNydGMgIgotCQkJCQkJICJpZDolZCBza2lwcGluZyBmcmVlc3luYyAiCi0JCQkJCQkgImlu aXRcbiIsCi0JCQkJCQkgYWNydGMtPmNydGNfaWQpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0J CQltb2RfZnJlZXN5bmNfYWRkX3N0cmVhbShhZGV2LT5kbS5mcmVlc3luY19tb2R1bGUsCi0JCQkJ CQlkbV9uZXdfY3J0Y19zdGF0ZS0+c3RyZWFtLAotCQkJCQkJJmFjb25uZWN0b3ItPmNhcHMpOwot CQkJbmV3X2Nvbl9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jb25uZWN0b3Jfc3RhdGUoCi0J CQkJCXN0YXRlLCAmYWNvbm5lY3Rvci0+YmFzZSk7Ci0JCQlkbV9uZXdfY29uX3N0YXRlID0gdG9f ZG1fY29ubmVjdG9yX3N0YXRlKG5ld19jb25fc3RhdGUpOwotCi0JCQltb2RfZnJlZXN5bmNfc2V0 X3VzZXJfZW5hYmxlKGFkZXYtPmRtLmZyZWVzeW5jX21vZHVsZSwKLQkJCQkJCSAgICAgJmRtX25l d19jcnRjX3N0YXRlLT5zdHJlYW0sCi0JCQkJCQkgICAgIDEsCi0JCQkJCQkgICAgICZkbV9uZXdf Y29uX3N0YXRlLT51c2VyX2VuYWJsZSk7Ci0JCX0KLQl9Ci0KIAlpZiAoZG1fc3RhdGUtPmNvbnRl eHQpIHsKIAkJZG1fZW5hYmxlX3Blcl9mcmFtZV9jcnRjX21hc3Rlcl9zeW5jKGRtX3N0YXRlLT5j b250ZXh0KTsKIAkJV0FSTl9PTighZGNfY29tbWl0X3N0YXRlKGRtLT5kYywgZG1fc3RhdGUtPmNv bnRleHQpKTsKQEAgLTQ0NTYsNiArNDQzMyw5IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9kbV9hdG9t aWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCQlXQVJOX09O KCFzdGF0dXMpOwogCQlXQVJOX09OKCFzdGF0dXMtPnBsYW5lX2NvdW50KTsKIAorCQlkbV9uZXdf Y3J0Y19zdGF0ZS0+c3RyZWFtLT5hZGp1c3QgPSBkbV9uZXdfY3J0Y19zdGF0ZS0+YWRqdXN0Owor CQlkbV9uZXdfY3J0Y19zdGF0ZS0+c3RyZWFtLT52cnJfaW5mb3BhY2tldCA9IGRtX25ld19jcnRj X3N0YXRlLT52cnJfaW5mb3BhY2tldDsKKwogCQkvKlRPRE8gSG93IGl0IHdvcmtzIHdpdGggTVBP ID8qLwogCQlpZiAoIWNvbW1pdF9wbGFuZXNfdG9fc3RyZWFtKAogCQkJCWRtLT5kYywKQEAgLTQ0 ODUsMTEgKzQ0NjUsNiBAQCBzdGF0aWMgdm9pZCBhbWRncHVfZG1fYXRvbWljX2NvbW1pdF90YWls KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIAkJaWYgKGRtX25ld19jcnRjX3N0YXRl LT5zdHJlYW0gPT0gTlVMTCB8fCAhbW9kZXNldF9uZWVkZWQpCiAJCQljb250aW51ZTsKIAotCQlp ZiAoYWRldi0+ZG0uZnJlZXN5bmNfbW9kdWxlKQotCQkJbW9kX2ZyZWVzeW5jX25vdGlmeV9tb2Rl X2NoYW5nZSgKLQkJCQlhZGV2LT5kbS5mcmVlc3luY19tb2R1bGUsCi0JCQkJJmRtX25ld19jcnRj X3N0YXRlLT5zdHJlYW0sIDEpOwotCiAJCW1hbmFnZV9kbV9pbnRlcnJ1cHRzKGFkZXYsIGFjcnRj LCB0cnVlKTsKIAl9CiAKQEAgLTQ2NjQsNyArNDYzOSw0MiBAQCBzdGF0aWMgaW50IGRvX2FxdWly ZV9nbG9iYWxfbG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXJldHVybiByZXQgPCAwID8g cmV0IDogMDsKIH0KIAotc3RhdGljIGludCBkbV91cGRhdGVfY3J0Y3Nfc3RhdGUoc3RydWN0IGRj ICpkYywKK3ZvaWQgc2V0X2ZyZWVzeW5jX29uX3N0cmVhbShzdHJ1Y3QgYW1kZ3B1X2Rpc3BsYXlf bWFuYWdlciAqZG0sCisJCQkgICAgc3RydWN0IGRtX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRl LAorCQkJICAgIHN0cnVjdCBkbV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25fc3RhdGUsCisJCQkg ICAgc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqbmV3X3N0cmVhbSkKK3sKKwlzdHJ1Y3QgbW9kX2Zy ZWVzeW5jX2NvbmZpZyBjb25maWcgPSB7MH07CisJc3RydWN0IG1vZF92cnJfcGFyYW1zIHZyciA9 IHswfTsKKwlzdHJ1Y3QgZGNfaW5mb19wYWNrZXQgdnJyX2luZm9wYWNrZXQgPSB7MH07CisJc3Ry dWN0IGFtZGdwdV9kbV9jb25uZWN0b3IgKmFjb25uZWN0b3IgPQorCQkJdG9fYW1kZ3B1X2RtX2Nv bm5lY3RvcihuZXdfY29uX3N0YXRlLT5iYXNlLmNvbm5lY3Rvcik7CisKKwlpZiAobmV3X2Nvbl9z dGF0ZS0+ZnJlZXN5bmNfY2FwYWJsZSAmJgorCSAgICBuZXdfY29uX3N0YXRlLT5mcmVlc3luY19l bmFibGUpIHsKKwkJY29uZmlnLnN0YXRlID0gbmV3X2NydGNfc3RhdGUtPmZyZWVzeW5jX2VuYWJs ZWQgPworCQkJCVZSUl9TVEFURV9BQ1RJVkVfVkFSSUFCTEUgOgorCQkJCVZSUl9TVEFURV9JTkFD VElWRTsKKwkJY29uZmlnLm1pbl9yZWZyZXNoX2luX3VoeiA9CisJCQkJYWNvbm5lY3Rvci0+bWlu X3ZmcmVxICogMTAwMDAwMDsKKwkJY29uZmlnLm1heF9yZWZyZXNoX2luX3VoeiA9CisJCQkJYWNv bm5lY3Rvci0+bWF4X3ZmcmVxICogMTAwMDAwMDsKKwl9CisKKwltb2RfZnJlZXN5bmNfYnVpbGRf dnJyX3BhcmFtcyhkbS0+ZnJlZXN5bmNfbW9kdWxlLAorCQkJCSAgICAgIG5ld19zdHJlYW0sCisJ CQkJICAgICAgJmNvbmZpZywgJnZycik7CisKKwltb2RfZnJlZXN5bmNfYnVpbGRfdnJyX2luZm9w YWNrZXQoZG0tPmZyZWVzeW5jX21vZHVsZSwKKwkJCQkJICBuZXdfc3RyZWFtLAorCQkJCQkgICZ2 cnIsCisJCQkJCSAgJnZycl9pbmZvcGFja2V0KTsKKworCW5ld19jcnRjX3N0YXRlLT5hZGp1c3Qg PSB2cnIuYWRqdXN0OworCW5ld19jcnRjX3N0YXRlLT52cnJfaW5mb3BhY2tldCA9IHZycl9pbmZv cGFja2V0OworfQorCitzdGF0aWMgaW50IGRtX3VwZGF0ZV9jcnRjc19zdGF0ZShzdHJ1Y3QgYW1k Z3B1X2Rpc3BsYXlfbWFuYWdlciAqZG0sCiAJCQkJIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSwKIAkJCQkgYm9vbCBlbmFibGUsCiAJCQkJIGJvb2wgKmxvY2tfYW5kX3ZhbGlkYXRpb25f bmVlZGVkKQpAQCAtNDcyMyw2ICs0NzMzLDkgQEAgc3RhdGljIGludCBkbV91cGRhdGVfY3J0Y3Nf c3RhdGUoc3RydWN0IGRjICpkYywKIAkJCQlicmVhazsKIAkJCX0KIAorCQkJc2V0X2ZyZWVzeW5j X29uX3N0cmVhbShkbSwgZG1fbmV3X2NydGNfc3RhdGUsCisJCQkJCSAgICAgICBkbV9jb25uX3N0 YXRlLCBuZXdfc3RyZWFtKTsKKwogCQkJaWYgKGRjX2lzX3N0cmVhbV91bmNoYW5nZWQobmV3X3N0 cmVhbSwgZG1fb2xkX2NydGNfc3RhdGUtPnN0cmVhbSkgJiYKIAkJCSAgICBkY19pc19zdHJlYW1f c2NhbGluZ191bmNoYW5nZWQobmV3X3N0cmVhbSwgZG1fb2xkX2NydGNfc3RhdGUtPnN0cmVhbSkp IHsKIAkJCQluZXdfY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkID0gZmFsc2U7CkBAIC00NzMxLDYg KzQ3NDQsOSBAQCBzdGF0aWMgaW50IGRtX3VwZGF0ZV9jcnRjc19zdGF0ZShzdHJ1Y3QgZGMgKmRj LAogCQkJfQogCQl9CiAKKwkJaWYgKGRtX29sZF9jcnRjX3N0YXRlLT5mcmVlc3luY19lbmFibGVk ICE9IGRtX25ld19jcnRjX3N0YXRlLT5mcmVlc3luY19lbmFibGVkKQorCQkJbmV3X2NydGNfc3Rh dGUtPm1vZGVfY2hhbmdlZCA9IHRydWU7CisKIAkJaWYgKCFkcm1fYXRvbWljX2NydGNfbmVlZHNf bW9kZXNldChuZXdfY3J0Y19zdGF0ZSkpCiAJCQlnb3RvIG5leHRfY3J0YzsKIApAQCAtNDc1Nyw3 ICs0NzczLDcgQEAgc3RhdGljIGludCBkbV91cGRhdGVfY3J0Y3Nfc3RhdGUoc3RydWN0IGRjICpk YywKIAogCQkJLyogaS5lLiByZXNldCBtb2RlICovCiAJCQlpZiAoZGNfcmVtb3ZlX3N0cmVhbV9m cm9tX2N0eCgKLQkJCQkJZGMsCisJCQkJCWRtLT5kYywKIAkJCQkJZG1fc3RhdGUtPmNvbnRleHQs CiAJCQkJCWRtX29sZF9jcnRjX3N0YXRlLT5zdHJlYW0pICE9IERDX09LKSB7CiAJCQkJcmV0ID0g LUVJTlZBTDsKQEAgLTQ3OTQsNyArNDgxMCw3IEBAIHN0YXRpYyBpbnQgZG1fdXBkYXRlX2NydGNz X3N0YXRlKHN0cnVjdCBkYyAqZGMsCiAJCQkJCQkJY3J0Yy0+YmFzZS5pZCk7CiAKIAkJCQlpZiAo ZGNfYWRkX3N0cmVhbV90b19jdHgoCi0JCQkJCQlkYywKKwkJCQkJCWRtLT5kYywKIAkJCQkJCWRt X3N0YXRlLT5jb250ZXh0LAogCQkJCQkJZG1fbmV3X2NydGNfc3RhdGUtPnN0cmVhbSkgIT0gRENf T0spIHsKIAkJCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTQ4MzMsNiArNDg0OSw4IEBAIHN0YXRpYyBp bnQgZG1fdXBkYXRlX2NydGNzX3N0YXRlKHN0cnVjdCBkYyAqZGMsCiAJCQkJZ290byBmYWlsOwog CQkJYW1kZ3B1X2RtX3NldF9jdG0oZG1fbmV3X2NydGNfc3RhdGUpOwogCQl9CisKKwogCX0KIAog CXJldHVybiByZXQ7CkBAIC01MDI1LDEyICs1MDQzLDE2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2Rt X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQlnb3RvIGZhaWw7CiAKIAlm b3JfZWFjaF9vbGRuZXdfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0Yywgb2xkX2NydGNfc3RhdGUs IG5ld19jcnRjX3N0YXRlLCBpKSB7CisJCXN0cnVjdCBkbV9jcnRjX3N0YXRlICpkbV9uZXdfY3J0 Y19zdGF0ZSA9IHRvX2RtX2NydGNfc3RhdGUobmV3X2NydGNfc3RhdGUpOworCQlzdHJ1Y3QgZG1f Y3J0Y19zdGF0ZSAqZG1fb2xkX2NydGNfc3RhdGUgID0gdG9fZG1fY3J0Y19zdGF0ZShvbGRfY3J0 Y19zdGF0ZSk7CisKIAkJcmV0ID0gZG1fYXRvbWljX2NoZWNrX3BsYW5lX3N0YXRlX2ZiKHN0YXRl LCBjcnRjKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZmFpbDsKIAogCQlpZiAoIWRybV9hdG9taWNf Y3J0Y19uZWVkc19tb2Rlc2V0KG5ld19jcnRjX3N0YXRlKSAmJgotCQkgICAgIW5ld19jcnRjX3N0 YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQpCisJCSAgICAhbmV3X2NydGNfc3RhdGUtPmNvbG9yX21n bXRfY2hhbmdlZCAmJgorCQkgICAgKGRtX29sZF9jcnRjX3N0YXRlLT5mcmVlc3luY19lbmFibGVk ID09IGRtX25ld19jcnRjX3N0YXRlLT5mcmVlc3luY19lbmFibGVkKSkKIAkJCWNvbnRpbnVlOwog CiAJCWlmICghbmV3X2NydGNfc3RhdGUtPmVuYWJsZSkKQEAgLTUwNTYsMTMgKzUwNzgsMTMgQEAg c3RhdGljIGludCBhbWRncHVfZG1fYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAJfQogCiAJLyogRGlzYWJsZSBhbGwgY3J0Y3Mgd2hpY2ggcmVxdWlyZSBkaXNhYmxlICovCi0J cmV0ID0gZG1fdXBkYXRlX2NydGNzX3N0YXRlKGRjLCBzdGF0ZSwgZmFsc2UsICZsb2NrX2FuZF92 YWxpZGF0aW9uX25lZWRlZCk7CisJcmV0ID0gZG1fdXBkYXRlX2NydGNzX3N0YXRlKCZhZGV2LT5k bSwgc3RhdGUsIGZhbHNlLCAmbG9ja19hbmRfdmFsaWRhdGlvbl9uZWVkZWQpOwogCWlmIChyZXQp IHsKIAkJZ290byBmYWlsOwogCX0KIAogCS8qIEVuYWJsZSBhbGwgY3J0Y3Mgd2hpY2ggcmVxdWly ZSBlbmFibGUgKi8KLQlyZXQgPSBkbV91cGRhdGVfY3J0Y3Nfc3RhdGUoZGMsIHN0YXRlLCB0cnVl LCAmbG9ja19hbmRfdmFsaWRhdGlvbl9uZWVkZWQpOworCXJldCA9IGRtX3VwZGF0ZV9jcnRjc19z dGF0ZSgmYWRldi0+ZG0sIHN0YXRlLCB0cnVlLCAmbG9ja19hbmRfdmFsaWRhdGlvbl9uZWVkZWQp OwogCWlmIChyZXQpIHsKIAkJZ290byBmYWlsOwogCX0KQEAgLTUxNTUsOCArNTE3Nyw4IEBAIHN0 YXRpYyBib29sIGlzX2RwX2NhcGFibGVfd2l0aG91dF90aW1pbmdfbXNhKHN0cnVjdCBkYyAqZGMs CiAKIAlyZXR1cm4gY2FwYWJsZTsKIH0KLXZvaWQgYW1kZ3B1X2RtX2FkZF9zaW5rX3RvX2ZyZWVz eW5jX21vZHVsZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJCQkgICBzdHJ1 Y3QgZWRpZCAqZWRpZCkKK3ZvaWQgYW1kZ3B1X2RtX3VwZGF0ZV9mcmVlc3luY19jYXBzKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCXN0cnVjdCBlZGlkICplZGlkKQogewog CWludCBpOwogCWJvb2wgZWRpZF9jaGVja19yZXF1aXJlZDsKQEAgLTUxNzUsNiArNTE5NywxOCBA QCB2b2lkIGFtZGdwdV9kbV9hZGRfc2lua190b19mcmVlc3luY19tb2R1bGUoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKIAkJcmV0dXJuOwogCX0KIAorCWlmICghZWRpZCkgeworCQlk bV9jb25fc3RhdGUgPSB0b19kbV9jb25uZWN0b3Jfc3RhdGUoY29ubmVjdG9yLT5zdGF0ZSk7CisK KwkJYW1kZ3B1X2RtX2Nvbm5lY3Rvci0+bWluX3ZmcmVxID0gMDsKKwkJYW1kZ3B1X2RtX2Nvbm5l Y3Rvci0+bWF4X3ZmcmVxID0gMDsKKwkJYW1kZ3B1X2RtX2Nvbm5lY3Rvci0+cGl4ZWxfY2xvY2tf bWh6ID0gMDsKKworCQlkbV9jb25fc3RhdGUtPmZyZWVzeW5jX2NhcGFibGUgPSBmYWxzZTsKKwkJ ZG1fY29uX3N0YXRlLT5mcmVlc3luY19lbmFibGUgPSBmYWxzZTsKKwkJcmV0dXJuOworCX0KKwog CWRtX2Nvbl9zdGF0ZSA9IHRvX2RtX2Nvbm5lY3Rvcl9zdGF0ZShjb25uZWN0b3ItPnN0YXRlKTsK IAogCWVkaWRfY2hlY2tfcmVxdWlyZWQgPSBmYWxzZTsKQEAgLTUyMjUsNDYgKzUyNTksMTAgQEAg dm9pZCBhbWRncHVfZG1fYWRkX3NpbmtfdG9fZnJlZXN5bmNfbW9kdWxlKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsCiAJCX0KIAogCQlpZiAoYW1kZ3B1X2RtX2Nvbm5lY3Rvci0+bWF4 X3ZmcmVxIC0KLQkJCQlhbWRncHVfZG1fY29ubmVjdG9yLT5taW5fdmZyZXEgPiAxMCkgewotCQkJ YW1kZ3B1X2RtX2Nvbm5lY3Rvci0+Y2Fwcy5zdXBwb3J0ZWQgPSB0cnVlOwotCQkJYW1kZ3B1X2Rt X2Nvbm5lY3Rvci0+Y2Fwcy5taW5fcmVmcmVzaF9pbl9taWNyb19oeiA9Ci0JCQkJCWFtZGdwdV9k bV9jb25uZWN0b3ItPm1pbl92ZnJlcSAqIDEwMDAwMDA7Ci0JCQlhbWRncHVfZG1fY29ubmVjdG9y LT5jYXBzLm1heF9yZWZyZXNoX2luX21pY3JvX2h6ID0KLQkJCQkJYW1kZ3B1X2RtX2Nvbm5lY3Rv ci0+bWF4X3ZmcmVxICogMTAwMDAwMDsKKwkJICAgIGFtZGdwdV9kbV9jb25uZWN0b3ItPm1pbl92 ZnJlcSA+IDEwKSB7CisKIAkJCWRtX2Nvbl9zdGF0ZS0+ZnJlZXN5bmNfY2FwYWJsZSA9IHRydWU7 CiAJCX0KIAl9CiB9CiAKLXZvaWQgYW1kZ3B1X2RtX3JlbW92ZV9zaW5rX2Zyb21fZnJlZXN5bmNf bW9kdWxlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGFtZGdw dV9kbV9jb25uZWN0b3IgKmFtZGdwdV9kbV9jb25uZWN0b3IgPQotCQkJdG9fYW1kZ3B1X2RtX2Nv bm5lY3Rvcihjb25uZWN0b3IpOwotCXN0cnVjdCBkbV9jb25uZWN0b3Jfc3RhdGUgKmRtX2Nvbl9z dGF0ZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Ci0Jc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKCFhbWRncHVf ZG1fY29ubmVjdG9yLT5kY19zaW5rIHx8ICFhZGV2LT5kbS5mcmVlc3luY19tb2R1bGUpIHsKLQkJ RFJNX0VSUk9SKCJkY19zaW5rIE5VTEwgb3Igbm8gZnJlZV9zeW5jIG1vZHVsZS5cbiIpOwotCQly ZXR1cm47Ci0JfQotCi0JaWYgKCFjb25uZWN0b3ItPnN0YXRlKSB7Ci0JCURSTV9FUlJPUigiJXMg LSBDb25uZWN0b3IgaGFzIG5vIHN0YXRlIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0J ZG1fY29uX3N0YXRlID0gdG9fZG1fY29ubmVjdG9yX3N0YXRlKGNvbm5lY3Rvci0+c3RhdGUpOwot Ci0JYW1kZ3B1X2RtX2Nvbm5lY3Rvci0+bWluX3ZmcmVxID0gMDsKLQlhbWRncHVfZG1fY29ubmVj dG9yLT5tYXhfdmZyZXEgPSAwOwotCWFtZGdwdV9kbV9jb25uZWN0b3ItPnBpeGVsX2Nsb2NrX21o eiA9IDA7Ci0KLQltZW1zZXQoJmFtZGdwdV9kbV9jb25uZWN0b3ItPmNhcHMsIDAsIHNpemVvZihh bWRncHVfZG1fY29ubmVjdG9yLT5jYXBzKSk7Ci0KLQlkbV9jb25fc3RhdGUtPmZyZWVzeW5jX2Nh cGFibGUgPSBmYWxzZTsKLQotCWRtX2Nvbl9zdGF0ZS0+dXNlcl9lbmFibGUuZW5hYmxlX2Zvcl9n YW1pbmcgPSBmYWxzZTsKLQlkbV9jb25fc3RhdGUtPnVzZXJfZW5hYmxlLmVuYWJsZV9mb3Jfc3Rh dGljID0gZmFsc2U7Ci0JZG1fY29uX3N0YXRlLT51c2VyX2VuYWJsZS5lbmFibGVfZm9yX3ZpZGVv ID0gZmFsc2U7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1k Z3B1X2RtL2FtZGdwdV9kbS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9k bS9hbWRncHVfZG0uaAppbmRleCBiNWNmNDY4ZTkwYWUuLjY4ZWI5NTllNDFkMyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5oCkBAIC0x OTMsOSArMTkzLDYgQEAgc3RydWN0IGFtZGdwdV9kbV9jb25uZWN0b3IgewogCWludCBtYXhfdmZy ZXEgOwogCWludCBwaXhlbF9jbG9ja19taHo7CiAKLQkvKmZyZWVzeW5jIGNhcHMqLwotCXN0cnVj dCBtb2RfZnJlZXN5bmNfY2FwcyBjYXBzOwotCiAJc3RydWN0IG11dGV4IGhwZF9sb2NrOwogCiAJ Ym9vbCBmYWtlX2VuYWJsZTsKQEAgLTIyMyw5ICsyMjAsMTMgQEAgc3RydWN0IGRtX2NydGNfc3Rh dGUgewogCiAJaW50IGNyY19za2lwX2NvdW50OwogCWJvb2wgY3JjX2VuYWJsZWQ7CisKKwlib29s IGZyZWVzeW5jX2VuYWJsZWQ7CisJc3RydWN0IGRjX2NydGNfdGltaW5nX2FkanVzdCBhZGp1c3Q7 CisJc3RydWN0IGRjX2luZm9fcGFja2V0IHZycl9pbmZvcGFja2V0OwogfTsKIAotI2RlZmluZSB0 b19kbV9jcnRjX3N0YXRlKHgpICAgIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZG1fY3J0Y19zdGF0 ZSwgYmFzZSkKKyNkZWZpbmUgdG9fZG1fY3J0Y19zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3Ry dWN0IGRtX2NydGNfc3RhdGUsIGJhc2UpCiAKIHN0cnVjdCBkbV9hdG9taWNfc3RhdGUgewogCXN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlIGJhc2U7CkBAIC0yNDIsNyArMjQzLDcgQEAgc3RydWN0IGRt X2Nvbm5lY3Rvcl9zdGF0ZSB7CiAJdWludDhfdCB1bmRlcnNjYW5fdmJvcmRlcjsKIAl1aW50OF90 IHVuZGVyc2Nhbl9oYm9yZGVyOwogCWJvb2wgdW5kZXJzY2FuX2VuYWJsZTsKLQlzdHJ1Y3QgbW9k X2ZyZWVzeW5jX3VzZXJfZW5hYmxlIHVzZXJfZW5hYmxlOworCWJvb2wgZnJlZXN5bmNfZW5hYmxl OwogCWJvb2wgZnJlZXN5bmNfY2FwYWJsZTsKIH07CiAKQEAgLTI3NiwxMSArMjc3LDggQEAgaW50 IGFtZGdwdV9kbV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAogdm9pZCBkbV9yZXN0b3JlX2RybV9jb25uZWN0b3Jfc3RhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAK LXZvaWQgYW1kZ3B1X2RtX2FkZF9zaW5rX3RvX2ZyZWVzeW5jX21vZHVsZShzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAotCQkJCQkgICBzdHJ1Y3QgZWRpZCAqZWRpZCk7Ci0KLXZvaWQK LWFtZGdwdV9kbV9yZW1vdmVfc2lua19mcm9tX2ZyZWVzeW5jX21vZHVsZShzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKTsKK3ZvaWQgYW1kZ3B1X2RtX3VwZGF0ZV9mcmVlc3luY19jYXBz KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCXN0cnVjdCBlZGlkICplZGlk KTsKIAogLyogYW1kZ3B1X2RtX2NyYy5jICovCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9t c3RfdHlwZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1 X2RtX21zdF90eXBlcy5jCmluZGV4IDMwNTI5MmE5ZmY4MC4uNzgyNDkxZTczZWZjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9tc3Rf dHlwZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdw dV9kbV9tc3RfdHlwZXMuYwpAQCAtMjEyLDggKzIxMiw5IEBAIHZvaWQgZG1fZHBfbXN0X2RjX3Np bmtfY3JlYXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiAJZGNfc2luay0+cHJp diA9IGFjb25uZWN0b3I7CiAJYWNvbm5lY3Rvci0+ZGNfc2luayA9IGRjX3Npbms7CiAKLQlhbWRn cHVfZG1fYWRkX3NpbmtfdG9fZnJlZXN5bmNfbW9kdWxlKAotCQkJY29ubmVjdG9yLCBhY29ubmVj dG9yLT5lZGlkKTsKKwlpZiAoYWNvbm5lY3Rvci0+ZGNfc2luaykKKwkJYW1kZ3B1X2RtX3VwZGF0 ZV9mcmVlc3luY19jYXBzKAorCQkJCWNvbm5lY3RvciwgYWNvbm5lY3Rvci0+ZWRpZCk7CiB9CiAK IHN0YXRpYyBpbnQgZG1fZHBfbXN0X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQpAQCAtMjUxLDcgKzI1Miw3IEBAIHN0YXRpYyBpbnQgZG1fZHBfbXN0X2dldF9tb2Rl cyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogCQlhY29ubmVjdG9yLT5kY19zaW5r ID0gZGNfc2luazsKIAogCQlpZiAoYWNvbm5lY3Rvci0+ZGNfc2luaykKLQkJCWFtZGdwdV9kbV9h ZGRfc2lua190b19mcmVlc3luY19tb2R1bGUoCisJCQlhbWRncHVfZG1fdXBkYXRlX2ZyZWVzeW5j X2NhcHMoCiAJCQkJCWNvbm5lY3RvciwgZWRpZCk7CiAKIAkJZHJtX21vZGVfY29ubmVjdG9yX3Vw ZGF0ZV9lZGlkX3Byb3BlcnR5KApAQCAtNDE1LDcgKzQxNiw3IEBAIHN0YXRpYyB2b2lkIGRtX2Rw X2Rlc3Ryb3lfbXN0X2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n ciwKIAogCWFjb25uZWN0b3ItPnBvcnQgPSBOVUxMOwogCWlmIChhY29ubmVjdG9yLT5kY19zaW5r KSB7Ci0JCWFtZGdwdV9kbV9yZW1vdmVfc2lua19mcm9tX2ZyZWVzeW5jX21vZHVsZShjb25uZWN0 b3IpOworCQlhbWRncHVfZG1fdXBkYXRlX2ZyZWVzeW5jX2NhcHMoY29ubmVjdG9yLCBOVUxMKTsK IAkJZGNfbGlua19yZW1vdmVfcmVtb3RlX3NpbmsoYWNvbm5lY3Rvci0+ZGNfbGluaywgYWNvbm5l Y3Rvci0+ZGNfc2luayk7CiAJCWRjX3NpbmtfcmVsZWFzZShhY29ubmVjdG9yLT5kY19zaW5rKTsK IAkJYWNvbm5lY3Rvci0+ZGNfc2luayA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kYy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L2RjL2NvcmUvZGMuYwppbmRleCBiMzMxZDllNzhjZGIuLjc0ZjUxNjkwM2FjZCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUvZGMuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kYy5jCkBAIC0xNzAsMTEgKzE3MCw5IEBAIHN0 YXRpYyBib29sIGNyZWF0ZV9saW5rcygKIH0KIAogYm9vbCBkY19zdHJlYW1fYWRqdXN0X3ZtaW5f dm1heChzdHJ1Y3QgZGMgKmRjLAotCQlzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICoqc3RyZWFtcywg aW50IG51bV9zdHJlYW1zLAotCQlpbnQgdm1pbiwgaW50IHZtYXgpCisJCXN0cnVjdCBkY19zdHJl YW1fc3RhdGUgKnN0cmVhbSwKKwkJc3RydWN0IGRjX2NydGNfdGltaW5nX2FkanVzdCAqYWRqdXN0 KQogewotCS8qIFRPRE86IFN1cHBvcnQgbXVsdGlwbGUgc3RyZWFtcyAqLwotCXN0cnVjdCBkY19z dHJlYW1fc3RhdGUgKnN0cmVhbSA9IHN0cmVhbXNbMF07CiAJaW50IGkgPSAwOwogCWJvb2wgcmV0 ID0gZmFsc2U7CiAKQEAgLTE4MiwxMSArMTgwLDExIEBAIGJvb2wgZGNfc3RyZWFtX2FkanVzdF92 bWluX3ZtYXgoc3RydWN0IGRjICpkYywKIAkJc3RydWN0IHBpcGVfY3R4ICpwaXBlID0gJmRjLT5j dXJyZW50X3N0YXRlLT5yZXNfY3R4LnBpcGVfY3R4W2ldOwogCiAJCWlmIChwaXBlLT5zdHJlYW0g PT0gc3RyZWFtICYmIHBpcGUtPnN0cmVhbV9yZXMuc3RyZWFtX2VuYykgewotCQkJZGMtPmh3c3Mu c2V0X2RycigmcGlwZSwgMSwgdm1pbiwgdm1heCk7Ci0KLQkJCS8qIGJ1aWxkIGFuZCB1cGRhdGUg dGhlIGluZm8gZnJhbWUgKi8KLQkJCXJlc291cmNlX2J1aWxkX2luZm9fZnJhbWUocGlwZSk7Ci0J CQlkYy0+aHdzcy51cGRhdGVfaW5mb19mcmFtZShwaXBlKTsKKwkJCXBpcGUtPnN0cmVhbS0+YWRq dXN0ID0gKmFkanVzdDsKKwkJCWRjLT5od3NzLnNldF9kcnIoJnBpcGUsCisJCQkJCTEsCisJCQkJ CWFkanVzdC0+dl90b3RhbF9taW4sCisJCQkJCWFkanVzdC0+dl90b3RhbF9tYXgpOwogCiAJCQly ZXQgPSB0cnVlOwogCQl9CkBAIC0xOTksNyArMTk3LDcgQEAgYm9vbCBkY19zdHJlYW1fZ2V0X2Ny dGNfcG9zaXRpb24oc3RydWN0IGRjICpkYywKIAkJdW5zaWduZWQgaW50ICp2X3BvcywgdW5zaWdu ZWQgaW50ICpub21fdl9wb3MpCiB7CiAJLyogVE9ETzogU3VwcG9ydCBtdWx0aXBsZSBzdHJlYW1z ICovCi0Jc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtID0gc3RyZWFtc1swXTsKKwljb25z dCBzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0gPSBzdHJlYW1zWzBdOwogCWludCBpID0g MDsKIAlib29sIHJldCA9IGZhbHNlOwogCXN0cnVjdCBjcnRjX3Bvc2l0aW9uIHBvc2l0aW9uOwpA QCAtMTE3Niw4ICsxMTc0LDI1IEBAIHN0YXRpYyBlbnVtIHN1cmZhY2VfdXBkYXRlX3R5cGUgY2hl Y2tfdXBkYXRlX3N1cmZhY2VzX2Zvcl9zdHJlYW0oCiAJaWYgKHN0cmVhbV9zdGF0dXMgPT0gTlVM TCB8fCBzdHJlYW1fc3RhdHVzLT5wbGFuZV9jb3VudCAhPSBzdXJmYWNlX2NvdW50KQogCQlyZXR1 cm4gVVBEQVRFX1RZUEVfRlVMTDsKIAotCWlmIChzdHJlYW1fdXBkYXRlKQotCQlyZXR1cm4gVVBE QVRFX1RZUEVfRlVMTDsKKwkvKiBzb21lIHN0cmVhbSB1cGRhdGVzIHJlcXVpcmUgcGFzc2l2ZSB1 cGRhdGUgKi8KKwlpZiAoc3RyZWFtX3VwZGF0ZSkgeworCQlpZiAoKHN0cmVhbV91cGRhdGUtPnNy Yy5oZWlnaHQgIT0gMCkgJiYKKwkJCQkoc3RyZWFtX3VwZGF0ZS0+c3JjLndpZHRoICE9IDApKQor CQkJcmV0dXJuIFVQREFURV9UWVBFX0ZVTEw7CisKKwkJaWYgKChzdHJlYW1fdXBkYXRlLT5kc3Qu aGVpZ2h0ICE9IDApICYmCisJCQkJKHN0cmVhbV91cGRhdGUtPmRzdC53aWR0aCAhPSAwKSkKKwkJ CXJldHVybiBVUERBVEVfVFlQRV9GVUxMOworCisJCWlmIChzdHJlYW1fdXBkYXRlLT5vdXRfdHJh bnNmZXJfZnVuYykKKwkJCXJldHVybiBVUERBVEVfVFlQRV9GVUxMOworCisJCWlmIChzdHJlYW1f dXBkYXRlLT5oZHJfc3RhdGljX21ldGFkYXRhKQorCQkJcmV0dXJuIFVQREFURV9UWVBFX0ZVTEw7 CisKKwkJaWYgKHN0cmVhbV91cGRhdGUtPmFibV9sZXZlbCkKKwkJCXJldHVybiBVUERBVEVfVFlQ RV9GVUxMOworCX0KIAogCWZvciAoaSA9IDAgOyBpIDwgc3VyZmFjZV9jb3VudDsgaSsrKSB7CiAJ CWVudW0gc3VyZmFjZV91cGRhdGVfdHlwZSB0eXBlID0KQEAgLTEyNTYsNyArMTI3MSw2IEBAIHN0 YXRpYyB2b2lkIGNvbW1pdF9wbGFuZXNfZm9yX3N0cmVhbShzdHJ1Y3QgZGMgKmRjLAogCQlyZXR1 cm47CiAJfQogCi0JLyogRnVsbCBmZSB1cGRhdGUqLwogCWZvciAoaiA9IDA7IGogPCBkYy0+cmVz X3Bvb2wtPnBpcGVfY291bnQ7IGorKykgewogCQlzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4ID0g JmNvbnRleHQtPnJlc19jdHgucGlwZV9jdHhbal07CiAKQEAgLTEyNjcsMTEgKzEyODEsMjIgQEAg c3RhdGljIHZvaWQgY29tbWl0X3BsYW5lc19mb3Jfc3RyZWFtKHN0cnVjdCBkYyAqZGMsCiAKIAkJ CXRvcF9waXBlX3RvX3Byb2dyYW0gPSBwaXBlX2N0eDsKIAotCQkJaWYgKHVwZGF0ZV90eXBlID09 IFVQREFURV9UWVBFX0ZBU1QgfHwgIXBpcGVfY3R4LT5wbGFuZV9zdGF0ZSkKKwkJCWlmICghcGlw ZV9jdHgtPnBsYW5lX3N0YXRlKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBGYXN0IHVwZGF0ZSov CisJCQkvLyBWUlIgcHJvZ3JhbSBjYW4gYmUgZG9uZSBhcyBwYXJ0IG9mIEZBU1QgVVBEQVRFCisJ CQlpZiAoc3RyZWFtX3VwZGF0ZSAmJiBzdHJlYW1fdXBkYXRlLT5hZGp1c3QpCisJCQkJZGMtPmh3 c3Muc2V0X2RycigmcGlwZV9jdHgsIDEsCisJCQkJCXN0cmVhbV91cGRhdGUtPmFkanVzdC0+dl90 b3RhbF9taW4sCisJCQkJCXN0cmVhbV91cGRhdGUtPmFkanVzdC0+dl90b3RhbF9tYXgpOworCisJ CQkvKiBGdWxsIGZlIHVwZGF0ZSovCisJCQlpZiAodXBkYXRlX3R5cGUgPT0gVVBEQVRFX1RZUEVf RkFTVCkKIAkJCQljb250aW51ZTsKIAogCQkJc3RyZWFtX3N0YXR1cyA9Ci0JCQkJCXN0cmVhbV9n ZXRfc3RhdHVzKGNvbnRleHQsIHBpcGVfY3R4LT5zdHJlYW0pOworCQkJCXN0cmVhbV9nZXRfc3Rh dHVzKGNvbnRleHQsIHBpcGVfY3R4LT5zdHJlYW0pOwogCiAJCQlkYy0+aHdzcy5hcHBseV9jdHhf Zm9yX3N1cmZhY2UoCiAJCQkJCWRjLCBwaXBlX2N0eC0+c3RyZWFtLCBzdHJlYW1fc3RhdHVzLT5w bGFuZV9jb3VudCwgY29udGV4dCk7CkBAIC0xMzI2LDcgKzEzNTEsNyBAQCBzdGF0aWMgdm9pZCBj b21taXRfcGxhbmVzX2Zvcl9zdHJlYW0oc3RydWN0IGRjICpkYywKIAkJZGMtPmh3c3MucGlwZV9j b250cm9sX2xvY2soZGMsIHRvcF9waXBlX3RvX3Byb2dyYW0sIGZhbHNlKTsKIAl9CiAKLQlpZiAo c3RyZWFtICYmIHN0cmVhbV91cGRhdGUgJiYgdXBkYXRlX3R5cGUgPiBVUERBVEVfVFlQRV9GQVNU KQorCWlmIChzdHJlYW0gJiYgc3RyZWFtX3VwZGF0ZSkKIAkJZm9yIChqID0gMDsgaiA8IGRjLT5y ZXNfcG9vbC0+cGlwZV9jb3VudDsgaisrKSB7CiAJCQlzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4 ID0KIAkJCQkJJmNvbnRleHQtPnJlc19jdHgucGlwZV9jdHhbal07CkBAIC0xMzM0LDcgKzEzNTks OCBAQCBzdGF0aWMgdm9pZCBjb21taXRfcGxhbmVzX2Zvcl9zdHJlYW0oc3RydWN0IGRjICpkYywK IAkJCWlmIChwaXBlX2N0eC0+c3RyZWFtICE9IHN0cmVhbSkKIAkJCQljb250aW51ZTsKIAotCQkJ aWYgKHN0cmVhbV91cGRhdGUtPmhkcl9zdGF0aWNfbWV0YWRhdGEpIHsKKwkJCWlmIChzdHJlYW1f dXBkYXRlLT5oZHJfc3RhdGljX21ldGFkYXRhIHx8CisJCQkJKHN0cmVhbV91cGRhdGUtPnZycl9p bmZvcGFja2V0KSkgewogCQkJCXJlc291cmNlX2J1aWxkX2luZm9fZnJhbWUocGlwZV9jdHgpOwog CQkJCWRjLT5od3NzLnVwZGF0ZV9pbmZvX2ZyYW1lKHBpcGVfY3R4KTsKIAkJCX0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjX2xpbmtfZHAuYyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjX2xpbmtfZHAuYwppbmRleCBiODYz MjViYjYzNmYuLmUxMDNjZThlMDU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2NvcmUvZGNfbGlua19kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9kYy9jb3JlL2RjX2xpbmtfZHAuYwpAQCAtMjMyNyw2ICsyMzI3LDkgQEAgc3RhdGljIGJv b2wgcmV0cmlldmVfbGlua19jYXAoc3RydWN0IGRjX2xpbmsgKmxpbmspCiAKIAlkcF93YV9wb3dl cl91cF8wMDEwRkEobGluaywgZHBjZF9kYXRhLCBzaXplb2YoZHBjZF9kYXRhKSk7CiAKKwlkb3du X3N0cm1fcG9ydF9jb3VudC5yYXcgPSBkcGNkX2RhdGFbRFBfRE9XTl9TVFJFQU1fUE9SVF9DT1VO VCAtCisJCQkJIERQX0RQQ0RfUkVWXTsKKwogCWxpbmstPmRwY2RfY2Fwcy5hbGxvd19pbnZhbGlk X01TQV90aW1pbmdfcGFyYW0gPQogCQlkb3duX3N0cm1fcG9ydF9jb3VudC5iaXRzLklHTk9SRV9N U0FfVElNSU5HX1BBUkFNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvZGMvY29yZS9kY19yZXNvdXJjZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2NvcmUvZGNfcmVzb3VyY2UuYwppbmRleCA1MGI4NGY2OWJkMjUuLjFkZThmNTUxODc4MiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUvZGNfcmVzb3VyY2Uu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19yZXNvdXJjZS5j CkBAIC0yMTg4LDExOSArMjE4OCwxMyBAQCBzdGF0aWMgdm9pZCBzZXRfc3BkX2luZm9fcGFja2V0 KAogewogCS8qIFNQRCBpbmZvIHBhY2tldCBmb3IgRnJlZVN5bmMgKi8KIAotCXVuc2lnbmVkIGNo YXIgY2hlY2tzdW0gPSAwOwotCXVuc2lnbmVkIGludCBpZHgsIHBheWxvYWRfc2l6ZSA9IDA7Ci0K IAkvKiBDaGVjayBpZiBGcmVlc3luYyBpcyBzdXBwb3J0ZWQuIFJldHVybiBpZiBmYWxzZS4gSWYg dHJ1ZSwKIAkgKiBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBpbmZvIHBhY2tldAog CSAqLwotCWlmIChzdHJlYW0tPmZyZWVzeW5jX2N0eC5zdXBwb3J0ZWQgPT0gZmFsc2UpCisJaWYg KCFzdHJlYW0tPnZycl9pbmZvcGFja2V0LnZhbGlkKQogCQlyZXR1cm47CiAKLQlpZiAoZGNfaXNf aGRtaV9zaWduYWwoc3RyZWFtLT5zaWduYWwpKSB7Ci0KLQkJLyogSEVBREVSICovCi0KLQkJLyog SEIwICA9IFBhY2tldCBUeXBlID0gMHg4MyAoU291cmNlIFByb2R1Y3QKLQkJICoJICBEZXNjcmlw dG9yIEluZm9GcmFtZSkKLQkJICovCi0JCWluZm9fcGFja2V0LT5oYjAgPSBIRE1JX0lORk9GUkFN RV9UWVBFX1NQRDsKLQotCQkvKiBIQjEgID0gVmVyc2lvbiA9IDB4MDEgKi8KLQkJaW5mb19wYWNr ZXQtPmhiMSA9IDB4MDE7Ci0KLQkJLyogSEIyICA9IFtCaXRzIDc6NSA9IDBdIFtCaXRzIDQ6MCA9 IExlbmd0aCA9IDB4MDhdICovCi0JCWluZm9fcGFja2V0LT5oYjIgPSAweDA4OwotCi0JCXBheWxv YWRfc2l6ZSA9IDB4MDg7Ci0KLQl9IGVsc2UgaWYgKGRjX2lzX2RwX3NpZ25hbChzdHJlYW0tPnNp Z25hbCkpIHsKLQotCQkvKiBIRUFERVIgKi8KLQotCQkvKiBIQjAgID0gU2Vjb25kYXJ5LWRhdGEg UGFja2V0IElEID0gMCAtIE9ubHkgbm9uLXplcm8KLQkJICoJICB3aGVuIHVzZWQgdG8gYXNzb2Np YXRlIGF1ZGlvIHJlbGF0ZWQgaW5mbyBwYWNrZXRzCi0JCSAqLwotCQlpbmZvX3BhY2tldC0+aGIw ID0gMHgwMDsKLQotCQkvKiBIQjEgID0gUGFja2V0IFR5cGUgPSAweDgzIChTb3VyY2UgUHJvZHVj dAotCQkgKgkgIERlc2NyaXB0b3IgSW5mb0ZyYW1lKQotCQkgKi8KLQkJaW5mb19wYWNrZXQtPmhi MSA9IEhETUlfSU5GT0ZSQU1FX1RZUEVfU1BEOwotCi0JCS8qIEhCMiAgPSBbQml0cyA3OjAgPSBM ZWFzdCBzaWduaWZpY2FudCBlaWdodCBiaXRzIC0KLQkJICoJICBGb3IgSU5GT0ZSQU1FLCB0aGUg dmFsdWUgbXVzdCBiZSAxQmhdCi0JCSAqLwotCQlpbmZvX3BhY2tldC0+aGIyID0gMHgxQjsKLQot CQkvKiBIQjMgID0gW0JpdHMgNzoyID0gSU5GT0ZSQU1FIFNEUCBWZXJzaW9uIE51bWJlciA9IDB4 MV0KLQkJICoJICBbQml0cyAxOjAgPSBNb3N0IHNpZ25pZmljYW50IHR3byBiaXRzID0gMHgwMF0K LQkJICovCi0JCWluZm9fcGFja2V0LT5oYjMgPSAweDA0OwotCi0JCXBheWxvYWRfc2l6ZSA9IDB4 MUI7Ci0JfQotCi0JLyogUEIxID0gMHgxQSAoMjRiaXQgQU1EIElFRUUgT1VJICgweDAwMDAxQSkg LSBCeXRlIDApICovCi0JaW5mb19wYWNrZXQtPnNiWzFdID0gMHgxQTsKLQotCS8qIFBCMiA9IDB4 MDAgKDI0Yml0IEFNRCBJRUVFIE9VSSAoMHgwMDAwMUEpIC0gQnl0ZSAxKSAqLwotCWluZm9fcGFj a2V0LT5zYlsyXSA9IDB4MDA7Ci0KLQkvKiBQQjMgPSAweDAwICgyNGJpdCBBTUQgSUVFRSBPVUkg KDB4MDAwMDFBKSAtIEJ5dGUgMikgKi8KLQlpbmZvX3BhY2tldC0+c2JbM10gPSAweDAwOwotCi0J LyogUEI0ID0gUmVzZXJ2ZWQgKi8KLQlpbmZvX3BhY2tldC0+c2JbNF0gPSAweDAwOwotCi0JLyog UEI1ID0gUmVzZXJ2ZWQgKi8KLQlpbmZvX3BhY2tldC0+c2JbNV0gPSAweDAwOwotCi0JLyogUEI2 ID0gW0JpdHMgNzozID0gUmVzZXJ2ZWRdICovCi0JaW5mb19wYWNrZXQtPnNiWzZdID0gMHgwMDsK LQotCWlmIChzdHJlYW0tPmZyZWVzeW5jX2N0eC5zdXBwb3J0ZWQgPT0gdHJ1ZSkKLQkJLyogUEI2 ID0gW0JpdCAwID0gRnJlZVN5bmMgU3VwcG9ydGVkXSAqLwotCQlpbmZvX3BhY2tldC0+c2JbNl0g fD0gMHgwMTsKLQotCWlmIChzdHJlYW0tPmZyZWVzeW5jX2N0eC5lbmFibGVkID09IHRydWUpCi0J CS8qIFBCNiA9IFtCaXQgMSA9IEZyZWVTeW5jIEVuYWJsZWRdICovCi0JCWluZm9fcGFja2V0LT5z Yls2XSB8PSAweDAyOwotCi0JaWYgKHN0cmVhbS0+ZnJlZXN5bmNfY3R4LmFjdGl2ZSA9PSB0cnVl KQotCQkvKiBQQjYgPSBbQml0IDIgPSBGcmVlU3luYyBBY3RpdmVdICovCi0JCWluZm9fcGFja2V0 LT5zYls2XSB8PSAweDA0OwotCi0JLyogUEI3ID0gRnJlZVN5bmMgTWluaW11bSByZWZyZXNoIHJh dGUgKEh6KSAqLwotCWluZm9fcGFja2V0LT5zYls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoc3RyZWFt LT5mcmVlc3luY19jdHguCi0JCQltaW5fcmVmcmVzaF9pbl9taWNyb19oeiAvIDEwMDAwMDApOwot Ci0JLyogUEI4ID0gRnJlZVN5bmMgTWF4aW11bSByZWZyZXNoIHJhdGUgKEh6KQotCSAqCi0JICog Tm90ZTogV2UgZG8gbm90IHVzZSB0aGUgbWF4aW11bSBjYXBhYmxlIHJlZnJlc2ggcmF0ZQotCSAq IG9mIHRoZSBwYW5lbCwgYmVjYXVzZSB3ZSBzaG91bGQgbmV2ZXIgZ28gYWJvdmUgdGhlIGZpZWxk Ci0JICogcmF0ZSBvZiB0aGUgbW9kZSB0aW1pbmcgc2V0LgotCSAqLwotCWluZm9fcGFja2V0LT5z Yls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoc3RyZWFtLT5mcmVlc3luY19jdHguCi0JCQlub21pbmFs X3JlZnJlc2hfaW5fbWljcm9faHogLyAxMDAwMDAwKTsKLQotCS8qIFBCOSAtIFBCMjcgID0gUmVz ZXJ2ZWQgKi8KLQlmb3IgKGlkeCA9IDk7IGlkeCA8PSAyNzsgaWR4KyspCi0JCWluZm9fcGFja2V0 LT5zYltpZHhdID0gMHgwMDsKLQotCS8qIENhbGN1bGF0ZSBjaGVja3N1bSAqLwotCWNoZWNrc3Vt ICs9IGluZm9fcGFja2V0LT5oYjA7Ci0JY2hlY2tzdW0gKz0gaW5mb19wYWNrZXQtPmhiMTsKLQlj aGVja3N1bSArPSBpbmZvX3BhY2tldC0+aGIyOwotCWNoZWNrc3VtICs9IGluZm9fcGFja2V0LT5o YjM7Ci0KLQlmb3IgKGlkeCA9IDE7IGlkeCA8PSBwYXlsb2FkX3NpemU7IGlkeCsrKQotCQljaGVj a3N1bSArPSBpbmZvX3BhY2tldC0+c2JbaWR4XTsKLQotCS8qIFBCMCA9IENoZWNrc3VtIChvbmUg Ynl0ZSBjb21wbGVtZW50KSAqLwotCWluZm9fcGFja2V0LT5zYlswXSA9ICh1bnNpZ25lZCBjaGFy KSAoMHgxMDAgLSBjaGVja3N1bSk7Ci0KLQlpbmZvX3BhY2tldC0+dmFsaWQgPSB0cnVlOworCSpp bmZvX3BhY2tldCA9IHN0cmVhbS0+dnJyX2luZm9wYWNrZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNl dF9oZHJfc3RhdGljX2luZm9fcGFja2V0KApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2RjL2RjX2h3X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvZGNfaHdfdHlwZXMuaAppbmRleCBiODNhN2RjMmY1YTkuLjU0NzIzMTY4MjJjZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjX2h3X3R5cGVzLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjX2h3X3R5cGVzLmgKQEAgLTY5MiwxMiAr NjkyLDYgQEAgc3RydWN0IGNydGNfdHJpZ2dlcl9pbmZvIHsKIAllbnVtIHRyaWdnZXJfZGVsYXkg ZGVsYXk7CiB9OwogCi1lbnVtIHZycl9zdGF0ZSB7Ci0JVlJSX1NUQVRFX09GRiA9IDAsCi0JVlJS X1NUQVRFX1ZBUklBQkxFLAotCVZSUl9TVEFURV9GSVhFRCwKLX07Ci0KIHN0cnVjdCBkY19jcnRj X3RpbWluZ19hZGp1c3QgewogCXVpbnQzMl90IHZfdG90YWxfbWluOwogCXVpbnQzMl90IHZfdG90 YWxfbWF4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjX3N0 cmVhbS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjX3N0cmVhbS5oCmluZGV4 IDI5NzFjZDA3ZTA5My4uY2E0MzdlMTQxMmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvZGMvZGNfc3RyZWFtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2RjL2RjX3N0cmVhbS5oCkBAIC00NSwxOSArNDUsMjUgQEAgc3RydWN0IGRjX3N0cmVhbV9z dGF0dXMgewogCXN0cnVjdCBkY19saW5rICpsaW5rOwogfTsKIAorLy8gVE9ETzogUmVmZXJlbmNl cyB0byB0aGlzIG5lZWRzIHRvIGJlIHJlbW92ZWQuLgorc3RydWN0IGZyZWVzeW5jX2NvbnRleHQg eworCWJvb2wgZHVtbXk7Cit9OworCiBzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlIHsKIAlzdHJ1Y3Qg ZGNfc2luayAqc2luazsKIAlzdHJ1Y3QgZGNfY3J0Y190aW1pbmcgdGltaW5nOwotCXN0cnVjdCBk Y19jcnRjX3RpbWluZ19hZGp1c3QgdGltaW5nX2FkanVzdDsKLQlzdHJ1Y3QgdnJyX3BhcmFtcyB2 cnJfcGFyYW1zOworCXN0cnVjdCBkY19jcnRjX3RpbWluZ19hZGp1c3QgYWRqdXN0OworCXN0cnVj dCBkY19pbmZvX3BhY2tldCB2cnJfaW5mb3BhY2tldDsKIAogCXN0cnVjdCByZWN0IHNyYzsgLyog Y29tcG9zaXRpb24gYXJlYSAqLwogCXN0cnVjdCByZWN0IGRzdDsgLyogc3RyZWFtIGFkZHJlc3Nh YmxlIGFyZWEgKi8KIAotCXN0cnVjdCBhdWRpb19pbmZvIGF1ZGlvX2luZm87Ci0KKwkvLyBUT0RP OiBSZWZlcmVuY2VzIHRvIHRoaXMgbmVlZHMgdG8gYmUgcmVtb3ZlZC4uCiAJc3RydWN0IGZyZWVz eW5jX2NvbnRleHQgZnJlZXN5bmNfY3R4OwogCisJc3RydWN0IGF1ZGlvX2luZm8gYXVkaW9faW5m bzsKKwogCXN0cnVjdCBkY19oZHJfc3RhdGljX21ldGFkYXRhIGhkcl9zdGF0aWNfbWV0YWRhdGE7 CiAJc3RydWN0IGRjX3RyYW5zZmVyX2Z1bmMgKm91dF90cmFuc2Zlcl9mdW5jOwogCXN0cnVjdCBj b2xvcnNwYWNlX3RyYW5zZm9ybSBnYW11dF9yZW1hcF9tYXRyaXg7CkBAIC0xMTcsNiArMTIzLDgg QEAgc3RydWN0IGRjX3N0cmVhbV91cGRhdGUgewogCWVudW0gY29sb3JfdHJhbnNmZXJfZnVuYyBj b2xvcl9vdXRwdXRfdGY7CiAJdW5zaWduZWQgaW50ICphYm1fbGV2ZWw7CiAJdW5zaWduZWQgbG9u ZyBsb25nICpwZXJpb2RpY19mbl92c3luY19kZWx0YTsKKwlzdHJ1Y3QgZGNfY3J0Y190aW1pbmdf YWRqdXN0ICphZGp1c3Q7CisJc3RydWN0IGRjX2luZm9fcGFja2V0ICp2cnJfaW5mb3BhY2tldDsK IH07CiAKIGJvb2wgZGNfaXNfc3RyZWFtX3VuY2hhbmdlZCgKQEAgLTI1NywxMCArMjY1LDggQEAg Ym9vbCBkY19zdHJlYW1fc2V0X2N1cnNvcl9wb3NpdGlvbigKIAljb25zdCBzdHJ1Y3QgZGNfY3Vy c29yX3Bvc2l0aW9uICpwb3NpdGlvbik7CiAKIGJvb2wgZGNfc3RyZWFtX2FkanVzdF92bWluX3Zt YXgoc3RydWN0IGRjICpkYywKLQkJCQlzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICoqc3RyZWFtLAot CQkJCWludCBudW1fc3RyZWFtcywKLQkJCQlpbnQgdm1pbiwKLQkJCQlpbnQgdm1heCk7CisJCQkJ c3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAorCQkJCXN0cnVjdCBkY19jcnRjX3RpbWlu Z19hZGp1c3QgKmFkanVzdCk7CiAKIGJvb2wgZGNfc3RyZWFtX2dldF9jcnRjX3Bvc2l0aW9uKHN0 cnVjdCBkYyAqZGMsCiAJCQkJIHN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKipzdHJlYW0sCkBAIC0y ODcsMTMgKzI5Myw2IEBAIHZvaWQgZGNfc3RyZWFtX3NldF9zdGF0aWNfc2NyZWVuX2V2ZW50cyhz dHJ1Y3QgZGMgKmRjLAogdm9pZCBkY19zdHJlYW1fc2V0X2RpdGhlcl9vcHRpb24oc3RydWN0IGRj X3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAogCQkJCSBlbnVtIGRjX2RpdGhlcl9vcHRpb24gb3B0aW9u KTsKIAotCi1ib29sIGRjX3N0cmVhbV9hZGp1c3Rfdm1pbl92bWF4KHN0cnVjdCBkYyAqZGMsCi0J CQkJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqKnN0cmVhbSwKLQkJCQlpbnQgbnVtX3N0cmVhbXMs Ci0JCQkJaW50IHZtaW4sCi0JCQkJaW50IHZtYXgpOwotCiBib29sIGRjX3N0cmVhbV9nZXRfY3J0 Y19wb3NpdGlvbihzdHJ1Y3QgZGMgKmRjLAogCQkJCSBzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICoq c3RyZWFtLAogCQkJCSBpbnQgbnVtX3N0cmVhbXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvZGMvZGNfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9kYy9kY190eXBlcy5oCmluZGV4IGNkMzI0YmNjNDVlOC4uOTBmNDBlZWNjMmJjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNfdHlwZXMuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNfdHlwZXMuaApAQCAtNTIxLDEzICs1MjEsMTEg QEAgc3RydWN0IGF1ZGlvX2luZm8gewogCXN0cnVjdCBhdWRpb19tb2RlIG1vZGVzW0RDX01BWF9B VURJT19ERVNDX0NPVU5UXTsKIH07CiAKLXN0cnVjdCB2cnJfcGFyYW1zIHsKLQllbnVtIHZycl9z dGF0ZSBzdGF0ZTsKLQl1aW50MzJfdCB3aW5kb3dfbWluOwotCXVpbnQzMl90IHdpbmRvd19tYXg7 Ci0JdWludDMyX3QgaW5zZXJ0ZWRfZnJhbWVfZHVyYXRpb25faW5fdXM7Ci0JdWludDMyX3QgZnJh bWVzX3RvX2luc2VydDsKLQl1aW50MzJfdCBmcmFtZV9jb3VudGVyOworZW51bSBkY19pbmZvZnJh bWVfdHlwZSB7CisJRENfSERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1IgPSAweDgxLAorCURDX0hE TUlfSU5GT0ZSQU1FX1RZUEVfQVZJID0gMHg4MiwKKwlEQ19IRE1JX0lORk9GUkFNRV9UWVBFX1NQ RCA9IDB4ODMsCisJRENfSERNSV9JTkZPRlJBTUVfVFlQRV9BVURJTyA9IDB4ODQsCiB9OwogCiBz dHJ1Y3QgZGNfaW5mb19wYWNrZXQgewpAQCAtNTQ3LDE2ICs1NDUsNiBAQCBzdHJ1Y3QgZGNfcGxh bmVfZmxpcF90aW1lIHsKIAl1bnNpZ25lZCBpbnQgcHJldl91cGRhdGVfdGltZV9pbl91czsKIH07 CiAKLS8vIFdpbGwgY29tYmluZSB3aXRoIHZycl9wYXJhbXMgYXQgc29tZSBwb2ludC4KLXN0cnVj dCBmcmVlc3luY19jb250ZXh0IHsKLQlib29sIHN1cHBvcnRlZDsKLQlib29sIGVuYWJsZWQ7Ci0J Ym9vbCBhY3RpdmU7Ci0KLQl1bnNpZ25lZCBpbnQgbWluX3JlZnJlc2hfaW5fbWljcm9faHo7Ci0J dW5zaWduZWQgaW50IG5vbWluYWxfcmVmcmVzaF9pbl9taWNyb19oejsKLX07Ci0KIHN0cnVjdCBw c3JfY29uZmlnIHsKIAl1bnNpZ25lZCBjaGFyIHBzcl92ZXJzaW9uOwogCXVuc2lnbmVkIGludCBw c3JfcmZiX3NldHVwX3RpbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvZGMvZGNlMTEwL2RjZTExMF9od19zZXF1ZW5jZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9kYy9kY2UxMTAvZGNlMTEwX2h3X3NlcXVlbmNlci5jCmluZGV4IGRiMmQxNWRmYjgz MS4uNDMyYmVkNjNlYTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvZGNlMTEwL2RjZTExMF9od19zZXF1ZW5jZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvZGMvZGNlMTEwL2RjZTExMF9od19zZXF1ZW5jZXIuYwpAQCAtMTIzNSw2ICsxMjM1 LDggQEAgc3RhdGljIGVudW0gZGNfc3RhdHVzIGRjZTExMF9wcm9nX3BpeGNsa19jcnRjX290ZygK IAlzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4X29sZCA9ICZkYy0+Y3VycmVudF9zdGF0ZS0+cmVz X2N0eC4KIAkJCXBpcGVfY3R4W3BpcGVfY3R4LT5waXBlX2lkeF07CiAJc3RydWN0IHRnX2NvbG9y IGJsYWNrX2NvbG9yID0gezB9OworCXN0cnVjdCBkcnJfcGFyYW1zIHBhcmFtcyA9IHswfTsKKwl1 bnNpZ25lZCBpbnQgZXZlbnRfdHJpZ2dlcnMgPSAwOwogCiAJaWYgKCFwaXBlX2N0eF9vbGQtPnN0 cmVhbSkgewogCkBAIC0xMjY0LDkgKzEyNjYsMTkgQEAgc3RhdGljIGVudW0gZGNfc3RhdHVzIGRj ZTExMF9wcm9nX3BpeGNsa19jcnRjX290ZygKIAkJCQkmc3RyZWFtLT50aW1pbmcsCiAJCQkJdHJ1 ZSk7CiAKLQkJcGlwZV9jdHgtPnN0cmVhbV9yZXMudGctPmZ1bmNzLT5zZXRfc3RhdGljX3NjcmVl bl9jb250cm9sKAotCQkJCXBpcGVfY3R4LT5zdHJlYW1fcmVzLnRnLAotCQkJCTB4MTgyKTsKKwkJ cGFyYW1zLnZlcnRpY2FsX3RvdGFsX21pbiA9IHN0cmVhbS0+YWRqdXN0LnZfdG90YWxfbWluOwor CQlwYXJhbXMudmVydGljYWxfdG90YWxfbWF4ID0gc3RyZWFtLT5hZGp1c3Qudl90b3RhbF9tYXg7 CisJCWlmIChwaXBlX2N0eC0+c3RyZWFtX3Jlcy50Zy0+ZnVuY3MtPnNldF9kcnIpCisJCQlwaXBl X2N0eC0+c3RyZWFtX3Jlcy50Zy0+ZnVuY3MtPnNldF9kcnIoCisJCQkJcGlwZV9jdHgtPnN0cmVh bV9yZXMudGcsICZwYXJhbXMpOworCisJCS8vIERSUiBzaG91bGQgc2V0IHRyaWdnZXIgZXZlbnQg dG8gbW9uaXRvciBzdXJmYWNlIHVwZGF0ZSBldmVudAorCQlpZiAoc3RyZWFtLT5hZGp1c3Qudl90 b3RhbF9taW4gIT0gMCAmJgorCQkJCXN0cmVhbS0+YWRqdXN0LnZfdG90YWxfbWF4ICE9IDApCisJ CQlldmVudF90cmlnZ2VycyA9IDB4ODA7CisJCWlmIChwaXBlX2N0eC0+c3RyZWFtX3Jlcy50Zy0+ ZnVuY3MtPnNldF9zdGF0aWNfc2NyZWVuX2NvbnRyb2wpCisJCQlwaXBlX2N0eC0+c3RyZWFtX3Jl cy50Zy0+ZnVuY3MtPnNldF9zdGF0aWNfc2NyZWVuX2NvbnRyb2woCisJCQkJcGlwZV9jdHgtPnN0 cmVhbV9yZXMudGcsIGV2ZW50X3RyaWdnZXJzKTsKIAl9CiAKIAlpZiAoIXBpcGVfY3R4X29sZC0+ c3RyZWFtKSB7CkBAIC0xMjc3LDggKzEyODksNiBAQCBzdGF0aWMgZW51bSBkY19zdGF0dXMgZGNl MTEwX3Byb2dfcGl4Y2xrX2NydGNfb3RnKAogCQl9CiAJfQogCi0KLQogCXJldHVybiBEQ19PSzsK IH0KIApAQCAtMTYyNywxNiArMTYzNywyNCBAQCBzdGF0aWMgdm9pZCBzZXRfZHJyKHN0cnVjdCBw aXBlX2N0eCAqKnBpcGVfY3R4LAogewogCWludCBpID0gMDsKIAlzdHJ1Y3QgZHJyX3BhcmFtcyBw YXJhbXMgPSB7MH07CisJLy8gRFJSIHNob3VsZCBzZXQgdHJpZ2dlciBldmVudCB0byBtb25pdG9y IHN1cmZhY2UgdXBkYXRlIGV2ZW50CisJdW5zaWduZWQgaW50IGV2ZW50X3RyaWdnZXJzID0gMHg4 MDsKIAogCXBhcmFtcy52ZXJ0aWNhbF90b3RhbF9tYXggPSB2bWF4OwogCXBhcmFtcy52ZXJ0aWNh bF90b3RhbF9taW4gPSB2bWluOwogCiAJLyogVE9ETzogSWYgbXVsdGlwbGUgcGlwZXMgYXJlIHRv IGJlIHN1cHBvcnRlZCwgeW91IG5lZWQKLQkgKiBzb21lIEdTTCBzdHVmZgorCSAqIHNvbWUgR1NM IHN0dWZmLiBTdGF0aWMgc2NyZWVuIHRyaWdnZXJzIG1heSBiZSBwcm9ncmFtbWVkIGRpZmZlcmVu dGx5CisJICogYXMgd2VsbC4KIAkgKi8KLQogCWZvciAoaSA9IDA7IGkgPCBudW1fcGlwZXM7IGkr KykgewotCQlwaXBlX2N0eFtpXS0+c3RyZWFtX3Jlcy50Zy0+ZnVuY3MtPnNldF9kcnIocGlwZV9j dHhbaV0tPnN0cmVhbV9yZXMudGcsICZwYXJhbXMpOworCQlwaXBlX2N0eFtpXS0+c3RyZWFtX3Jl cy50Zy0+ZnVuY3MtPnNldF9kcnIoCisJCQlwaXBlX2N0eFtpXS0+c3RyZWFtX3Jlcy50ZywgJnBh cmFtcyk7CisKKwkJaWYgKHZtYXggIT0gMCAmJiB2bWluICE9IDApCisJCQlwaXBlX2N0eFtpXS0+ c3RyZWFtX3Jlcy50Zy0+ZnVuY3MtPnNldF9zdGF0aWNfc2NyZWVuX2NvbnRyb2woCisJCQkJCXBp cGVfY3R4W2ldLT5zdHJlYW1fcmVzLnRnLAorCQkJCQlldmVudF90cmlnZ2Vycyk7CiAJfQogfQog CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvZGNuMTBf aHdfc2VxdWVuY2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvZGNu MTBfaHdfc2VxdWVuY2VyLmMKaW5kZXggZjMzNDFhMjM5OWZhLi5kZmE2YWQ1MDc4YjIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9kY24xMF9od19zZXF1 ZW5jZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvZGNuMTBf aHdfc2VxdWVuY2VyLmMKQEAgLTQ4MCw2ICs0ODAsOCBAQCBzdGF0aWMgZW51bSBkY19zdGF0dXMg ZGNuMTBfcHJvZ19waXhjbGtfY3J0Y19vdGcoCiAJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3Ry ZWFtID0gcGlwZV9jdHgtPnN0cmVhbTsKIAllbnVtIGRjX2NvbG9yX3NwYWNlIGNvbG9yX3NwYWNl OwogCXN0cnVjdCB0Z19jb2xvciBibGFja19jb2xvciA9IHswfTsKKwlzdHJ1Y3QgZHJyX3BhcmFt cyBwYXJhbXMgPSB7MH07CisJdW5zaWduZWQgaW50IGV2ZW50X3RyaWdnZXJzID0gMDsKIAogCS8q IGJ5IHVwcGVyIGNhbGxlciBsb29wLCBwaXBlMCBpcyBwYXJlbnQgcGlwZSBhbmQgYmUgY2FsbGVk IGZpcnN0LgogCSAqIGJhY2sgZW5kIGlzIHNldCB1cCBieSBmb3IgcGlwZTAuIE90aGVyIGNoaWxk cmVuIHBpcGUgc2hhcmUgYmFjayBlbmQKQEAgLTU0Nyw2ICs1NDksMTkgQEAgc3RhdGljIGVudW0g ZGNfc3RhdHVzIGRjbjEwX3Byb2dfcGl4Y2xrX2NydGNfb3RnKAogCQlyZXR1cm4gRENfRVJST1Jf VU5FWFBFQ1RFRDsKIAl9CiAKKwlwYXJhbXMudmVydGljYWxfdG90YWxfbWluID0gc3RyZWFtLT5h ZGp1c3Qudl90b3RhbF9taW47CisJcGFyYW1zLnZlcnRpY2FsX3RvdGFsX21heCA9IHN0cmVhbS0+ YWRqdXN0LnZfdG90YWxfbWF4OworCWlmIChwaXBlX2N0eC0+c3RyZWFtX3Jlcy50Zy0+ZnVuY3Mt PnNldF9kcnIpCisJCXBpcGVfY3R4LT5zdHJlYW1fcmVzLnRnLT5mdW5jcy0+c2V0X2RycigKKwkJ CXBpcGVfY3R4LT5zdHJlYW1fcmVzLnRnLCAmcGFyYW1zKTsKKworCS8vIERSUiBzaG91bGQgc2V0 IHRyaWdnZXIgZXZlbnQgdG8gbW9uaXRvciBzdXJmYWNlIHVwZGF0ZSBldmVudAorCWlmIChzdHJl YW0tPmFkanVzdC52X3RvdGFsX21pbiAhPSAwICYmIHN0cmVhbS0+YWRqdXN0LnZfdG90YWxfbWF4 ICE9IDApCisJCWV2ZW50X3RyaWdnZXJzID0gMHg4MDsKKwlpZiAocGlwZV9jdHgtPnN0cmVhbV9y ZXMudGctPmZ1bmNzLT5zZXRfc3RhdGljX3NjcmVlbl9jb250cm9sKQorCQlwaXBlX2N0eC0+c3Ry ZWFtX3Jlcy50Zy0+ZnVuY3MtPnNldF9zdGF0aWNfc2NyZWVuX2NvbnRyb2woCisJCQkJcGlwZV9j dHgtPnN0cmVhbV9yZXMudGcsIGV2ZW50X3RyaWdnZXJzKTsKKwogCS8qIFRPRE8gcHJvZ3JhbSBj cnRjIHNvdXJjZSBzZWxlY3QgZm9yIG5vbi12aXJ0dWFsIHNpZ25hbCovCiAJLyogVE9ETyBwcm9n cmFtIEZNVCAqLwogCS8qIFRPRE8gc2V0dXAgbGlua19lbmMgKi8KQEAgLTIzMTMsMTUgKzIzMjgs MjMgQEAgc3RhdGljIHZvaWQgc2V0X2RycihzdHJ1Y3QgcGlwZV9jdHggKipwaXBlX2N0eCwKIHsK IAlpbnQgaSA9IDA7CiAJc3RydWN0IGRycl9wYXJhbXMgcGFyYW1zID0gezB9OworCS8vIERSUiBz aG91bGQgc2V0IHRyaWdnZXIgZXZlbnQgdG8gbW9uaXRvciBzdXJmYWNlIHVwZGF0ZSBldmVudAor CXVuc2lnbmVkIGludCBldmVudF90cmlnZ2VycyA9IDB4ODA7CiAKIAlwYXJhbXMudmVydGljYWxf dG90YWxfbWF4ID0gdm1heDsKIAlwYXJhbXMudmVydGljYWxfdG90YWxfbWluID0gdm1pbjsKIAog CS8qIFRPRE86IElmIG11bHRpcGxlIHBpcGVzIGFyZSB0byBiZSBzdXBwb3J0ZWQsIHlvdSBuZWVk Ci0JICogc29tZSBHU0wgc3R1ZmYKKwkgKiBzb21lIEdTTCBzdHVmZi4gU3RhdGljIHNjcmVlbiB0 cmlnZ2VycyBtYXkgYmUgcHJvZ3JhbW1lZCBkaWZmZXJlbnRseQorCSAqIGFzIHdlbGwuCiAJICov CiAJZm9yIChpID0gMDsgaSA8IG51bV9waXBlczsgaSsrKSB7Ci0JCXBpcGVfY3R4W2ldLT5zdHJl YW1fcmVzLnRnLT5mdW5jcy0+c2V0X2RycihwaXBlX2N0eFtpXS0+c3RyZWFtX3Jlcy50ZywgJnBh cmFtcyk7CisJCXBpcGVfY3R4W2ldLT5zdHJlYW1fcmVzLnRnLT5mdW5jcy0+c2V0X2RycigKKwkJ CXBpcGVfY3R4W2ldLT5zdHJlYW1fcmVzLnRnLCAmcGFyYW1zKTsKKwkJaWYgKHZtYXggIT0gMCAm JiB2bWluICE9IDApCisJCQlwaXBlX2N0eFtpXS0+c3RyZWFtX3Jlcy50Zy0+ZnVuY3MtPnNldF9z dGF0aWNfc2NyZWVuX2NvbnRyb2woCisJCQkJCXBpcGVfY3R4W2ldLT5zdHJlYW1fcmVzLnRnLAor CQkJCQlldmVudF90cmlnZ2Vycyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvaW5jbHVkZS9zZXRfbW9kZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2luY2x1ZGUvc2V0X21vZGVfdHlwZXMuaAppbmRleCBmZWUyYjZmZmNmYzEu LjJiODM2ZTU4MmMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvc2V0X21vZGVfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv aW5jbHVkZS9zZXRfbW9kZV90eXBlcy5oCkBAIC05MCwxOCArOTAsNiBAQCB1bmlvbiBoZG1pX2lu Zm9fcGFja2V0IHsKIAlzdHJ1Y3QgaW5mb19wYWNrZXRfcmF3X2RhdGEgcGFja2V0X3Jhd19kYXRh OwogfTsKIAotc3RydWN0IGluZm9fcGFja2V0IHsKLQllbnVtIGluZm9fZnJhbWVfZmxhZyBmbGFn czsKLQl1bmlvbiBoZG1pX2luZm9fcGFja2V0IGluZm9fcGFja2V0X2hkbWk7Ci19OwotCi1zdHJ1 Y3QgaW5mb19mcmFtZSB7Ci0Jc3RydWN0IGluZm9fcGFja2V0IGF2aV9pbmZvX3BhY2tldDsKLQlz dHJ1Y3QgaW5mb19wYWNrZXQgZ2FtdXRfcGFja2V0OwotCXN0cnVjdCBpbmZvX3BhY2tldCB2ZW5k b3JfaW5mb19wYWNrZXQ7Ci0Jc3RydWN0IGluZm9fcGFja2V0IHNwZF9pbmZvX3BhY2tldDsKLX07 Ci0KICNwcmFnbWEgcGFjayhwb3ApCiAKICNlbmRpZiAvKiBfX0RBTF9TRVRfTU9ERV9UWVBFU19I X18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2Zy ZWVzeW5jL2ZyZWVzeW5jLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9m cmVlc3luYy9mcmVlc3luYy5jCmluZGV4IDI3ZDQwMDNhYTJjNy4uNWUxMmU0NjNjMDZhIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9mcmVlc3luYy9mcmVl c3luYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2ZyZWVzeW5j L2ZyZWVzeW5jLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2RlZmluZSBNT0RfRlJFRVNZTkNfTUFY X0NPTkNVUlJFTlRfU1RSRUFNUyAgMzIKIAorI2RlZmluZSBNSU5fUkVGUkVTSF9SQU5HRV9JTl9V UyAxMDAwMDAwMAogLyogUmVmcmVzaCByYXRlIHJhbXAgYXQgYSBmaXhlZCByYXRlIG9mIDY1IEh6 L3NlY29uZCAqLwogI2RlZmluZSBTVEFUSUNfU0NSRUVOX1JBTVBfREVMVEFfUkVGUkVTSF9SQVRF X1BFUl9GUkFNRSAoKDEwMDAgLyA2MCkgKiA2NSkKIC8qIE51bWJlciBvZiBlbGVtZW50cyBpbiB0 aGUgcmVuZGVyIHRpbWVzIGNhY2hlIGFycmF5ICovCkBAIC00MCwxMDMgKzQxLDkgQEAKICNkZWZp bmUgRklYRURfUkVGUkVTSF9FTlRFUl9GUkFNRV9DT1VOVCA1CiAjZGVmaW5lIEZJWEVEX1JFRlJF U0hfRVhJVF9GUkFNRV9DT1VOVCA1CiAKLSNkZWZpbmUgRlJFRVNZTkNfUkVHSVNUUllfTkFNRSAi ZnJlZXN5bmNfdjEiCi0KLSNkZWZpbmUgRlJFRVNZTkNfTk9fU1RBVElDX0ZPUl9FWFRFUk5BTF9E UF9SRUdLRVkgIkRhbEZyZWVTeW5jTm9TdGF0aWNGb3JFeHRlcm5hbERwIgotCi0jZGVmaW5lIEZS RUVTWU5DX05PX1NUQVRJQ19GT1JfSU5URVJOQUxfUkVHS0VZICJEYWxGcmVlU3luY05vU3RhdGlj Rm9ySW50ZXJuYWwiCi0KLSNkZWZpbmUgRlJFRVNZTkNfREVGQVVMVF9SRUdLRVkgIkxDREZyZWVT eW5jRGVmYXVsdCIKLQotc3RydWN0IGdyYWR1YWxfc3RhdGljX3JhbXAgewotCWJvb2wgcmFtcF9p c19hY3RpdmU7Ci0JYm9vbCByYW1wX2RpcmVjdGlvbl9pc191cDsKLQl1bnNpZ25lZCBpbnQgcmFt cF9jdXJyZW50X2ZyYW1lX2R1cmF0aW9uX2luX25zOwotfTsKLQotc3RydWN0IGZyZWVzeW5jX3Rp bWUgewotCS8qIHZpZGVvICg0OEh6IGZlYXR1cmUpIHJlbGF0ZWQgKi8KLQl1bnNpZ25lZCBpbnQg dXBkYXRlX2R1cmF0aW9uX2luX25zOwotCi0JLyogQlRSL2ZpeGVkIHJlZnJlc2ggcmVsYXRlZCAq LwotCXVuc2lnbmVkIGludCBwcmV2X3RpbWVfc3RhbXBfaW5fdXM7Ci0KLQl1bnNpZ25lZCBpbnQg bWluX3JlbmRlcl90aW1lX2luX3VzOwotCXVuc2lnbmVkIGludCBtYXhfcmVuZGVyX3RpbWVfaW5f dXM7Ci0KLQl1bnNpZ25lZCBpbnQgcmVuZGVyX3RpbWVzX2luZGV4OwotCXVuc2lnbmVkIGludCBy ZW5kZXJfdGltZXNbUkVOREVSX1RJTUVTX01BWF9DT1VOVF07Ci0KLQl1bnNpZ25lZCBpbnQgbWlu X3dpbmRvdzsKLQl1bnNpZ25lZCBpbnQgbWF4X3dpbmRvdzsKLX07Ci0KLXN0cnVjdCBiZWxvd190 aGVfcmFuZ2UgewotCWJvb2wgYnRyX2FjdGl2ZTsKLQlib29sIHByb2dyYW1fYnRyOwotCi0JdW5z aWduZWQgaW50IG1pZF9wb2ludF9pbl91czsKLQotCXVuc2lnbmVkIGludCBpbnNlcnRlZF9mcmFt ZV9kdXJhdGlvbl9pbl91czsKLQl1bnNpZ25lZCBpbnQgZnJhbWVzX3RvX2luc2VydDsKLQl1bnNp Z25lZCBpbnQgZnJhbWVfY291bnRlcjsKLX07Ci0KLXN0cnVjdCBmaXhlZF9yZWZyZXNoIHsKLQli b29sIGZpeGVkX2FjdGl2ZTsKLQlib29sIHByb2dyYW1fZml4ZWQ7Ci0JdW5zaWduZWQgaW50IGZy YW1lX2NvdW50ZXI7Ci19OwotCi1zdHJ1Y3QgZnJlZXN5bmNfcmFuZ2UgewotCXVuc2lnbmVkIGlu dCBtaW5fcmVmcmVzaDsKLQl1bnNpZ25lZCBpbnQgbWF4X2ZyYW1lX2R1cmF0aW9uOwotCXVuc2ln bmVkIGludCB2bWF4OwotCi0JdW5zaWduZWQgaW50IG1heF9yZWZyZXNoOwotCXVuc2lnbmVkIGlu dCBtaW5fZnJhbWVfZHVyYXRpb247Ci0JdW5zaWduZWQgaW50IHZtaW47Ci19OwotCi1zdHJ1Y3Qg ZnJlZXN5bmNfc3RhdGUgewotCWJvb2wgZnVsbHNjcmVlbjsKLQlib29sIHN0YXRpY19zY3JlZW47 Ci0JYm9vbCB2aWRlbzsKLQotCXVuc2lnbmVkIGludCB2bWluOwotCXVuc2lnbmVkIGludCB2bWF4 OwotCi0Jc3RydWN0IGZyZWVzeW5jX3RpbWUgdGltZTsKLQotCXVuc2lnbmVkIGludCBub21pbmFs X3JlZnJlc2hfcmF0ZV9pbl9taWNyb19oejsKLQlib29sIHdpbmRvd2VkX2Z1bGxzY3JlZW47Ci0K LQlzdHJ1Y3QgZ3JhZHVhbF9zdGF0aWNfcmFtcCBzdGF0aWNfcmFtcDsKLQlzdHJ1Y3QgYmVsb3df dGhlX3JhbmdlIGJ0cjsKLQlzdHJ1Y3QgZml4ZWRfcmVmcmVzaCBmaXhlZF9yZWZyZXNoOwotCXN0 cnVjdCBmcmVlc3luY19yYW5nZSBmcmVlc3luY19yYW5nZTsKLX07Ci0KLXN0cnVjdCBmcmVlc3lu Y19lbnRpdHkgewotCXN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbTsKLQlzdHJ1Y3QgbW9k X2ZyZWVzeW5jX2NhcHMgKmNhcHM7Ci0Jc3RydWN0IGZyZWVzeW5jX3N0YXRlIHN0YXRlOwotCXN0 cnVjdCBtb2RfZnJlZXN5bmNfdXNlcl9lbmFibGUgdXNlcl9lbmFibGU7Ci19OwotCi1zdHJ1Y3Qg ZnJlZXN5bmNfcmVnaXN0cnlfb3B0aW9ucyB7Ci0JYm9vbCBkcnJfZXh0ZXJuYWxfc3VwcG9ydGVk OwotCWJvb2wgZHJyX2ludGVybmFsX3N1cHBvcnRlZDsKLQlib29sIGxjZF9mcmVlc3luY19kZWZh dWx0X3NldDsKLQlpbnQgbGNkX2ZyZWVzeW5jX2RlZmF1bHRfdmFsdWU7Ci19OwotCiBzdHJ1Y3Qg Y29yZV9mcmVlc3luYyB7CiAJc3RydWN0IG1vZF9mcmVlc3luYyBwdWJsaWM7CiAJc3RydWN0IGRj ICpkYzsKLQlzdHJ1Y3QgZnJlZXN5bmNfcmVnaXN0cnlfb3B0aW9ucyBvcHRzOwotCXN0cnVjdCBm cmVlc3luY19lbnRpdHkgKm1hcDsKLQlpbnQgbnVtX2VudGl0aWVzOwogfTsKIAogI2RlZmluZSBN T0RfRlJFRVNZTkNfVE9fQ09SRShtb2RfZnJlZXN5bmMpXApAQCAtMTQ3LDY4ICs1NCwxNiBAQCBz dHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmNfY3JlYXRlKHN0cnVjdCBkYyAqZGMpCiAJ c3RydWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMgPQogCQkJa3phbGxvYyhzaXplb2Yo c3RydWN0IGNvcmVfZnJlZXN5bmMpLCBHRlBfS0VSTkVMKTsKIAotCi0Jc3RydWN0IHBlcnNpc3Rl bnRfZGF0YV9mbGFnIGZsYWc7Ci0KLQlpbnQgaSwgZGF0YSA9IDA7Ci0KIAlpZiAoY29yZV9mcmVl c3luYyA9PSBOVUxMKQogCQlnb3RvIGZhaWxfYWxsb2NfY29udGV4dDsKIAotCWNvcmVfZnJlZXN5 bmMtPm1hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmcmVlc3luY19lbnRpdHkpICogTU9EX0ZS RUVTWU5DX01BWF9DT05DVVJSRU5UX1NUUkVBTVMsCi0JCQkJCUdGUF9LRVJORUwpOwotCi0JaWYg KGNvcmVfZnJlZXN5bmMtPm1hcCA9PSBOVUxMKQotCQlnb3RvIGZhaWxfYWxsb2NfbWFwOwotCi0J Zm9yIChpID0gMDsgaSA8IE1PRF9GUkVFU1lOQ19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TOyBpKysp Ci0JCWNvcmVfZnJlZXN5bmMtPm1hcFtpXS5zdHJlYW0gPSBOVUxMOwotCi0JY29yZV9mcmVlc3lu Yy0+bnVtX2VudGl0aWVzID0gMDsKLQogCWlmIChkYyA9PSBOVUxMKQogCQlnb3RvIGZhaWxfY29u c3RydWN0OwogCiAJY29yZV9mcmVlc3luYy0+ZGMgPSBkYzsKLQotCS8qIENyZWF0ZSBpbml0aWFs IG1vZHVsZSBmb2xkZXIgaW4gcmVnaXN0cnkgZm9yIGZyZWVzeW5jIGVuYWJsZSBkYXRhICovCi0J ZmxhZy5zYXZlX3Blcl9lZGlkID0gdHJ1ZTsKLQlmbGFnLnNhdmVfcGVyX2xpbmsgPSBmYWxzZTsK LQlkbV93cml0ZV9wZXJzaXN0ZW50X2RhdGEoZGMtPmN0eCwgTlVMTCwgRlJFRVNZTkNfUkVHSVNU UllfTkFNRSwKLQkJCU5VTEwsIE5VTEwsIDAsICZmbGFnKTsKLQlmbGFnLnNhdmVfcGVyX2VkaWQg PSBmYWxzZTsKLQlmbGFnLnNhdmVfcGVyX2xpbmsgPSBmYWxzZTsKLQotCWlmIChkbV9yZWFkX3Bl cnNpc3RlbnRfZGF0YShkYy0+Y3R4LCBOVUxMLCBOVUxMLAotCQkJRlJFRVNZTkNfTk9fU1RBVElD X0ZPUl9JTlRFUk5BTF9SRUdLRVksCi0JCQkmZGF0YSwgc2l6ZW9mKGRhdGEpLCAmZmxhZykpIHsK LQkJY29yZV9mcmVlc3luYy0+b3B0cy5kcnJfaW50ZXJuYWxfc3VwcG9ydGVkID0KLQkJCShkYXRh ICYgMSkgPyBmYWxzZSA6IHRydWU7Ci0JfQotCi0JaWYgKGRtX3JlYWRfcGVyc2lzdGVudF9kYXRh KGRjLT5jdHgsIE5VTEwsIE5VTEwsCi0JCQlGUkVFU1lOQ19OT19TVEFUSUNfRk9SX0VYVEVSTkFM X0RQX1JFR0tFWSwKLQkJCSZkYXRhLCBzaXplb2YoZGF0YSksICZmbGFnKSkgewotCQljb3JlX2Zy ZWVzeW5jLT5vcHRzLmRycl9leHRlcm5hbF9zdXBwb3J0ZWQgPQotCQkJCShkYXRhICYgMSkgPyBm YWxzZSA6IHRydWU7Ci0JfQotCi0JaWYgKGRtX3JlYWRfcGVyc2lzdGVudF9kYXRhKGRjLT5jdHgs IE5VTEwsIE5VTEwsCi0JCQlGUkVFU1lOQ19ERUZBVUxUX1JFR0tFWSwKLQkJCSZkYXRhLCBzaXpl b2YoZGF0YSksICZmbGFnKSkgewotCQljb3JlX2ZyZWVzeW5jLT5vcHRzLmxjZF9mcmVlc3luY19k ZWZhdWx0X3NldCA9IHRydWU7Ci0JCWNvcmVfZnJlZXN5bmMtPm9wdHMubGNkX2ZyZWVzeW5jX2Rl ZmF1bHRfdmFsdWUgPSBkYXRhOwotCX0gZWxzZSB7Ci0JCWNvcmVfZnJlZXN5bmMtPm9wdHMubGNk X2ZyZWVzeW5jX2RlZmF1bHRfc2V0ID0gZmFsc2U7Ci0JCWNvcmVfZnJlZXN5bmMtPm9wdHMubGNk X2ZyZWVzeW5jX2RlZmF1bHRfdmFsdWUgPSAwOwotCX0KLQogCXJldHVybiAmY29yZV9mcmVlc3lu Yy0+cHVibGljOwogCiBmYWlsX2NvbnN0cnVjdDoKLQlrZnJlZShjb3JlX2ZyZWVzeW5jLT5tYXAp OwotCi1mYWlsX2FsbG9jX21hcDoKIAlrZnJlZShjb3JlX2ZyZWVzeW5jKTsKIAogZmFpbF9hbGxv Y19jb250ZXh0OgpAQCAtMjE3LDk2OCArNzIsMzk2IEBAIHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1v ZF9mcmVlc3luY19jcmVhdGUoc3RydWN0IGRjICpkYykKIAogdm9pZCBtb2RfZnJlZXN5bmNfZGVz dHJveShzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMpCiB7Ci0JaWYgKG1vZF9mcmVl c3luYyAhPSBOVUxMKSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgY29yZV9mcmVlc3luYyAqY29yZV9m cmVlc3luYyA9Ci0JCQkJTU9EX0ZSRUVTWU5DX1RPX0NPUkUobW9kX2ZyZWVzeW5jKTsKLQotCQlm b3IgKGkgPSAwOyBpIDwgY29yZV9mcmVlc3luYy0+bnVtX2VudGl0aWVzOyBpKyspCi0JCQlpZiAo Y29yZV9mcmVlc3luYy0+bWFwW2ldLnN0cmVhbSkKLQkJCQlkY19zdHJlYW1fcmVsZWFzZShjb3Jl X2ZyZWVzeW5jLT5tYXBbaV0uc3RyZWFtKTsKLQotCQlrZnJlZShjb3JlX2ZyZWVzeW5jLT5tYXAp OwotCi0JCWtmcmVlKGNvcmVfZnJlZXN5bmMpOwotCX0KLX0KLQotLyogR2l2ZW4gYSBzcGVjaWZp YyBkY19zdHJlYW0qIHRoaXMgZnVuY3Rpb24gZmluZHMgaXRzIGVxdWl2YWxlbnQKLSAqIG9uIHRo ZSBjb3JlX2ZyZWVzeW5jLT5tYXAgYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXgK LSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBtYXBfaW5kZXhfZnJvbV9zdHJlYW0oc3RydWN0IGNv cmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMsCi0JCXN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0 cmVhbSkKLXsKLQl1bnNpZ25lZCBpbnQgaW5kZXggPSAwOwotCi0JZm9yIChpbmRleCA9IDA7IGlu ZGV4IDwgY29yZV9mcmVlc3luYy0+bnVtX2VudGl0aWVzOyBpbmRleCsrKSB7Ci0JCWlmIChjb3Jl X2ZyZWVzeW5jLT5tYXBbaW5kZXhdLnN0cmVhbSA9PSBzdHJlYW0pIHsKLQkJCXJldHVybiBpbmRl eDsKLQkJfQotCX0KLQkvKiBDb3VsZCBub3QgZmluZCBzdHJlYW0gcmVxdWVzdGVkICovCi0JQVNT RVJUKGZhbHNlKTsKLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLWJvb2wgbW9kX2ZyZWVzeW5jX2FkZF9z dHJlYW0oc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAotCQlzdHJ1Y3QgZGNfc3Ry ZWFtX3N0YXRlICpzdHJlYW0sIHN0cnVjdCBtb2RfZnJlZXN5bmNfY2FwcyAqY2FwcykKLXsKLQlz dHJ1Y3QgZGMgICpkYyA9IE5VTEw7CiAJc3RydWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5 bmMgPSBOVUxMOwotCWludCBwZXJzaXN0ZW50X2ZyZWVzeW5jX2VuYWJsZSA9IDA7Ci0Jc3RydWN0 IHBlcnNpc3RlbnRfZGF0YV9mbGFnIGZsYWc7Ci0JdW5zaWduZWQgaW50IG5vbV9yZWZyZXNoX3Jh dGVfdWh6OwotCXVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wOwotCiAJaWYgKG1vZF9mcmVlc3luYyA9 PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KKwkJcmV0dXJuOwogCWNvcmVfZnJlZXN5bmMgPSBN T0RfRlJFRVNZTkNfVE9fQ09SRShtb2RfZnJlZXN5bmMpOwotCWRjID0gY29yZV9mcmVlc3luYy0+ ZGM7Ci0KLQlmbGFnLnNhdmVfcGVyX2VkaWQgPSB0cnVlOwotCWZsYWcuc2F2ZV9wZXJfbGluayA9 IGZhbHNlOwotCi0JaWYgKGNvcmVfZnJlZXN5bmMtPm51bV9lbnRpdGllcyA8IE1PRF9GUkVFU1lO Q19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7Ci0KLQkJZGNfc3RyZWFtX3JldGFpbihzdHJlYW0p OwotCi0JCXRlbXAgPSBzdHJlYW0tPnRpbWluZy5waXhfY2xrX2toejsKLQkJdGVtcCAqPSAxMDAw VUxMICogMTAwMFVMTCAqIDEwMDBVTEw7Ci0JCXRlbXAgPSBkaXZfdTY0KHRlbXAsIHN0cmVhbS0+ dGltaW5nLmhfdG90YWwpOwotCQl0ZW1wID0gZGl2X3U2NCh0ZW1wLCBzdHJlYW0tPnRpbWluZy52 X3RvdGFsKTsKLQotCQlub21fcmVmcmVzaF9yYXRlX3VoeiA9ICh1bnNpZ25lZCBpbnQpIHRlbXA7 Ci0KLQkJY29yZV9mcmVlc3luYy0+bWFwW2NvcmVfZnJlZXN5bmMtPm51bV9lbnRpdGllc10uc3Ry ZWFtID0gc3RyZWFtOwotCQljb3JlX2ZyZWVzeW5jLT5tYXBbY29yZV9mcmVlc3luYy0+bnVtX2Vu dGl0aWVzXS5jYXBzID0gY2FwczsKLQotCQljb3JlX2ZyZWVzeW5jLT5tYXBbY29yZV9mcmVlc3lu Yy0+bnVtX2VudGl0aWVzXS5zdGF0ZS4KLQkJCWZ1bGxzY3JlZW4gPSBmYWxzZTsKLQkJY29yZV9m cmVlc3luYy0+bWFwW2NvcmVfZnJlZXN5bmMtPm51bV9lbnRpdGllc10uc3RhdGUuCi0JCQlzdGF0 aWNfc2NyZWVuID0gZmFsc2U7Ci0JCWNvcmVfZnJlZXN5bmMtPm1hcFtjb3JlX2ZyZWVzeW5jLT5u dW1fZW50aXRpZXNdLnN0YXRlLgotCQkJdmlkZW8gPSBmYWxzZTsKLQkJY29yZV9mcmVlc3luYy0+ bWFwW2NvcmVfZnJlZXN5bmMtPm51bV9lbnRpdGllc10uc3RhdGUudGltZS4KLQkJCXVwZGF0ZV9k dXJhdGlvbl9pbl9ucyA9IDA7Ci0JCWNvcmVfZnJlZXN5bmMtPm1hcFtjb3JlX2ZyZWVzeW5jLT5u dW1fZW50aXRpZXNdLnN0YXRlLgotCQkJc3RhdGljX3JhbXAucmFtcF9pc19hY3RpdmUgPSBmYWxz ZTsKLQotCQkvKiBnZXQgcGVyc2lzdGVudCBkYXRhIGZyb20gcmVnaXN0cnkgKi8KLQkJaWYgKGRt X3JlYWRfcGVyc2lzdGVudF9kYXRhKGRjLT5jdHgsIHN0cmVhbS0+c2luaywKLQkJCQkJRlJFRVNZ TkNfUkVHSVNUUllfTkFNRSwKLQkJCQkJInVzZXJlbmFibGUiLCAmcGVyc2lzdGVudF9mcmVlc3lu Y19lbmFibGUsCi0JCQkJCXNpemVvZihpbnQpLCAmZmxhZykpIHsKLQkJCWNvcmVfZnJlZXN5bmMt Pm1hcFtjb3JlX2ZyZWVzeW5jLT5udW1fZW50aXRpZXNdLnVzZXJfZW5hYmxlLgotCQkJCWVuYWJs ZV9mb3JfZ2FtaW5nID0KLQkJCQkocGVyc2lzdGVudF9mcmVlc3luY19lbmFibGUgJiAxKSA/IHRy dWUgOiBmYWxzZTsKLQkJCWNvcmVfZnJlZXN5bmMtPm1hcFtjb3JlX2ZyZWVzeW5jLT5udW1fZW50 aXRpZXNdLnVzZXJfZW5hYmxlLgotCQkJCWVuYWJsZV9mb3Jfc3RhdGljID0KLQkJCQkocGVyc2lz dGVudF9mcmVlc3luY19lbmFibGUgJiAyKSA/IHRydWUgOiBmYWxzZTsKLQkJCWNvcmVfZnJlZXN5 bmMtPm1hcFtjb3JlX2ZyZWVzeW5jLT5udW1fZW50aXRpZXNdLnVzZXJfZW5hYmxlLgotCQkJCWVu YWJsZV9mb3JfdmlkZW8gPQotCQkJCShwZXJzaXN0ZW50X2ZyZWVzeW5jX2VuYWJsZSAmIDQpID8g dHJ1ZSA6IGZhbHNlOwotCQkvKiBJZiBGcmVlU3luYyBkaXNwbGF5IGFuZCBMQ0RGcmVlU3luY0Rl ZmF1bHQgaXMgc2V0LCB1c2UgYXMgZGVmYXVsdCB2YWx1ZXMgd3JpdGUgYmFjayB0byB1c2VyZW5h YmxlICovCi0JCX0gZWxzZSBpZiAoY2Fwcy0+c3VwcG9ydGVkICYmIChjb3JlX2ZyZWVzeW5jLT5v cHRzLmxjZF9mcmVlc3luY19kZWZhdWx0X3NldCkpIHsKLQkJCWNvcmVfZnJlZXN5bmMtPm1hcFtj b3JlX2ZyZWVzeW5jLT5udW1fZW50aXRpZXNdLnVzZXJfZW5hYmxlLmVuYWJsZV9mb3JfZ2FtaW5n ID0KLQkJCQkoY29yZV9mcmVlc3luYy0+b3B0cy5sY2RfZnJlZXN5bmNfZGVmYXVsdF92YWx1ZSAm IDEpID8gdHJ1ZSA6IGZhbHNlOwotCQkJY29yZV9mcmVlc3luYy0+bWFwW2NvcmVfZnJlZXN5bmMt Pm51bV9lbnRpdGllc10udXNlcl9lbmFibGUuZW5hYmxlX2Zvcl9zdGF0aWMgPQotCQkJCShjb3Jl X2ZyZWVzeW5jLT5vcHRzLmxjZF9mcmVlc3luY19kZWZhdWx0X3ZhbHVlICYgMikgPyB0cnVlIDog ZmFsc2U7Ci0JCQljb3JlX2ZyZWVzeW5jLT5tYXBbY29yZV9mcmVlc3luYy0+bnVtX2VudGl0aWVz XS51c2VyX2VuYWJsZS5lbmFibGVfZm9yX3ZpZGVvID0KLQkJCQkoY29yZV9mcmVlc3luYy0+b3B0 cy5sY2RfZnJlZXN5bmNfZGVmYXVsdF92YWx1ZSAmIDQpID8gdHJ1ZSA6IGZhbHNlOwotCQkJZG1f d3JpdGVfcGVyc2lzdGVudF9kYXRhKGRjLT5jdHgsIHN0cmVhbS0+c2luaywKLQkJCQkJCUZSRUVT WU5DX1JFR0lTVFJZX05BTUUsCi0JCQkJCQkidXNlcmVuYWJsZSIsICZjb3JlX2ZyZWVzeW5jLT5v cHRzLmxjZF9mcmVlc3luY19kZWZhdWx0X3ZhbHVlLAotCQkJCQkJc2l6ZW9mKGludCksICZmbGFn KTsKLQkJfSBlbHNlIHsKLQkJCWNvcmVfZnJlZXN5bmMtPm1hcFtjb3JlX2ZyZWVzeW5jLT5udW1f ZW50aXRpZXNdLnVzZXJfZW5hYmxlLgotCQkJCQllbmFibGVfZm9yX2dhbWluZyA9IGZhbHNlOwot CQkJY29yZV9mcmVlc3luYy0+bWFwW2NvcmVfZnJlZXN5bmMtPm51bV9lbnRpdGllc10udXNlcl9l bmFibGUuCi0JCQkJCWVuYWJsZV9mb3Jfc3RhdGljID0gZmFsc2U7Ci0JCQljb3JlX2ZyZWVzeW5j LT5tYXBbY29yZV9mcmVlc3luYy0+bnVtX2VudGl0aWVzXS51c2VyX2VuYWJsZS4KLQkJCQkJZW5h YmxlX2Zvcl92aWRlbyA9IGZhbHNlOwotCQl9Ci0KLQkJaWYgKGNhcHMtPnN1cHBvcnRlZCAmJgot CQkJbm9tX3JlZnJlc2hfcmF0ZV91aHogPj0gY2Fwcy0+bWluX3JlZnJlc2hfaW5fbWljcm9faHog JiYKLQkJCW5vbV9yZWZyZXNoX3JhdGVfdWh6IDw9IGNhcHMtPm1heF9yZWZyZXNoX2luX21pY3Jv X2h6KQotCQkJc3RyZWFtLT5pZ25vcmVfbXNhX3RpbWluZ19wYXJhbSA9IDE7Ci0KLQkJY29yZV9m cmVlc3luYy0+bnVtX2VudGl0aWVzKys7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFs c2U7CisJa2ZyZWUoY29yZV9mcmVlc3luYyk7CiB9CiAKLWJvb2wgbW9kX2ZyZWVzeW5jX3JlbW92 ZV9zdHJlYW0oc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAotCQlzdHJ1Y3QgZGNf c3RyZWFtX3N0YXRlICpzdHJlYW0pCisjaWYgMCAvKiB1bnVzZWQgY3VycmVudGx5ICovCitzdGF0 aWMgdW5zaWduZWQgaW50IGNhbGNfcmVmcmVzaF9pbl91aHpfZnJvbV9kdXJhdGlvbigKKwkJdW5z aWduZWQgaW50IGR1cmF0aW9uX2luX25zKQogewotCWludCBpID0gMDsKLQlzdHJ1Y3QgY29yZV9m cmVlc3luYyAqY29yZV9mcmVlc3luYyA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IGluZGV4ID0gMDsK LQotCWlmIChtb2RfZnJlZXN5bmMgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOworCXVuc2lnbmVk IGludCByZWZyZXNoX2luX3VoeiA9CisJCQkoKHVuc2lnbmVkIGludCkoZGl2NjRfdTY0KCgxMDAw MDAwMDAwVUxMICogMTAwMDAwMCksCisJCQkJCWR1cmF0aW9uX2luX25zKSkpOworCXJldHVybiBy ZWZyZXNoX2luX3VoejsKK30KKyNlbmRpZgogCi0JY29yZV9mcmVlc3luYyA9IE1PRF9GUkVFU1lO Q19UT19DT1JFKG1vZF9mcmVlc3luYyk7Ci0JaW5kZXggPSBtYXBfaW5kZXhfZnJvbV9zdHJlYW0o Y29yZV9mcmVlc3luYywgc3RyZWFtKTsKLQotCWRjX3N0cmVhbV9yZWxlYXNlKGNvcmVfZnJlZXN5 bmMtPm1hcFtpbmRleF0uc3RyZWFtKTsKLQljb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLnN0cmVh bSA9IE5VTEw7Ci0JLyogVG8gcmVtb3ZlIHRoaXMgZW50aXR5LCBzaGlmdCBldmVyeXRoaW5nIGFm dGVyIGRvd24gKi8KLQlmb3IgKGkgPSBpbmRleDsgaSA8IGNvcmVfZnJlZXN5bmMtPm51bV9lbnRp dGllcyAtIDE7IGkrKykKLQkJY29yZV9mcmVlc3luYy0+bWFwW2ldID0gY29yZV9mcmVlc3luYy0+ bWFwW2kgKyAxXTsKLQljb3JlX2ZyZWVzeW5jLT5udW1fZW50aXRpZXMtLTsKLQlyZXR1cm4gdHJ1 ZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY19kdXJhdGlvbl9pbl91c19mcm9tX3JlZnJlc2hf aW5fdWh6KAorCQl1bnNpZ25lZCBpbnQgcmVmcmVzaF9pbl91aHopCit7CisJdW5zaWduZWQgaW50 IGR1cmF0aW9uX2luX3VzID0KKwkJCSgodW5zaWduZWQgaW50KShkaXY2NF91NjQoKDEwMDAwMDAw MDBVTEwgKiAxMDAwKSwKKwkJCQkJcmVmcmVzaF9pbl91aHopKSk7CisJcmV0dXJuIGR1cmF0aW9u X2luX3VzOwogfQogCi1zdGF0aWMgdm9pZCBhZGp1c3Rfdm1pbl92bWF4KHN0cnVjdCBjb3JlX2Zy ZWVzeW5jICpjb3JlX2ZyZWVzeW5jLAotCQkJCXN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKipzdHJl YW1zLAotCQkJCWludCBudW1fc3RyZWFtcywKLQkJCQlpbnQgbWFwX2luZGV4LAotCQkJCXVuc2ln bmVkIGludCB2X3RvdGFsX21pbiwKLQkJCQl1bnNpZ25lZCBpbnQgdl90b3RhbF9tYXgpCitzdGF0 aWMgdW5zaWduZWQgaW50IGNhbGNfZHVyYXRpb25faW5fdXNfZnJvbV92X3RvdGFsKAorCQljb25z dCBzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0sCisJCWNvbnN0IHN0cnVjdCBtb2RfdnJy X3BhcmFtcyAqaW5fdnJyLAorCQl1bnNpZ25lZCBpbnQgdl90b3RhbCkKIHsKLQlpZiAobnVtX3N0 cmVhbXMgPT0gMCB8fCBzdHJlYW1zID09IE5VTEwgfHwgbnVtX3N0cmVhbXMgPiAxKQotCQlyZXR1 cm47CisJdW5zaWduZWQgaW50IGR1cmF0aW9uX2luX3VzID0KKwkJCSh1bnNpZ25lZCBpbnQpKGRp djY0X3U2NCgoKHVuc2lnbmVkIGxvbmcgbG9uZykodl90b3RhbCkKKwkJCQkqIDEwMDApICogc3Ry ZWFtLT50aW1pbmcuaF90b3RhbCwKKwkJCQkJc3RyZWFtLT50aW1pbmcucGl4X2Nsa19raHopKTsK IAotCWNvcmVfZnJlZXN5bmMtPm1hcFttYXBfaW5kZXhdLnN0YXRlLnZtaW4gPSB2X3RvdGFsX21p bjsKLQljb3JlX2ZyZWVzeW5jLT5tYXBbbWFwX2luZGV4XS5zdGF0ZS52bWF4ID0gdl90b3RhbF9t YXg7CisJaWYgKGR1cmF0aW9uX2luX3VzIDwgaW5fdnJyLT5taW5fZHVyYXRpb25faW5fdXMpCisJ CWR1cmF0aW9uX2luX3VzID0gaW5fdnJyLT5taW5fZHVyYXRpb25faW5fdXM7CiAKLQlkY19zdHJl YW1fYWRqdXN0X3ZtaW5fdm1heChjb3JlX2ZyZWVzeW5jLT5kYywgc3RyZWFtcywKLQkJCQludW1f c3RyZWFtcywgdl90b3RhbF9taW4sCi0JCQkJdl90b3RhbF9tYXgpOwotfQorCWlmIChkdXJhdGlv bl9pbl91cyA+IGluX3Zyci0+bWF4X2R1cmF0aW9uX2luX3VzKQorCQlkdXJhdGlvbl9pbl91cyA9 IGluX3Zyci0+bWF4X2R1cmF0aW9uX2luX3VzOwogCisJcmV0dXJuIGR1cmF0aW9uX2luX3VzOwor fQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfc3RyZWFtX2ZyZWVzeW5jX2NvbnRleHQoc3RydWN0IGNv cmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMsCi0JCXN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0 cmVhbSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY192X3RvdGFsX2Zyb21fcmVmcmVzaCgKKwkJ Y29uc3Qgc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAorCQl1bnNpZ25lZCBpbnQgcmVm cmVzaF9pbl91aHopCiB7Ci0JdW5zaWduZWQgaW50IGluZGV4OwotCXN0cnVjdCBmcmVlc3luY19j b250ZXh0ICpjdHg7CisJdW5zaWduZWQgaW50IHZfdG90YWwgPSBzdHJlYW0tPnRpbWluZy52X3Rv dGFsOworCXVuc2lnbmVkIGludCBmcmFtZV9kdXJhdGlvbl9pbl9uczsKIAotCWN0eCA9ICZzdHJl YW0tPmZyZWVzeW5jX2N0eDsKKwlmcmFtZV9kdXJhdGlvbl9pbl9ucyA9CisJCQkoKHVuc2lnbmVk IGludCkoZGl2NjRfdTY0KCgxMDAwMDAwMDAwVUxMICogMTAwMDAwMCksCisJCQkJCXJlZnJlc2hf aW5fdWh6KSkpOwogCi0JaW5kZXggPSBtYXBfaW5kZXhfZnJvbV9zdHJlYW0oY29yZV9mcmVlc3lu Yywgc3RyZWFtKTsKKwl2X3RvdGFsID0gZGl2NjRfdTY0KGRpdjY0X3U2NCgoKHVuc2lnbmVkIGxv bmcgbG9uZykoCisJCQlmcmFtZV9kdXJhdGlvbl9pbl9ucykgKiBzdHJlYW0tPnRpbWluZy5waXhf Y2xrX2toeiksCisJCQlzdHJlYW0tPnRpbWluZy5oX3RvdGFsKSwgMTAwMDAwMCk7CiAKLQljdHgt PnN1cHBvcnRlZCA9IGNvcmVfZnJlZXN5bmMtPm1hcFtpbmRleF0uY2Fwcy0+c3VwcG9ydGVkOwot CWN0eC0+ZW5hYmxlZCA9IChjb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLnVzZXJfZW5hYmxlLmVu YWJsZV9mb3JfZ2FtaW5nIHx8Ci0JCWNvcmVfZnJlZXN5bmMtPm1hcFtpbmRleF0udXNlcl9lbmFi bGUuZW5hYmxlX2Zvcl92aWRlbyB8fAotCQljb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLnVzZXJf ZW5hYmxlLmVuYWJsZV9mb3Jfc3RhdGljKTsKLQljdHgtPmFjdGl2ZSA9IChjb3JlX2ZyZWVzeW5j LT5tYXBbaW5kZXhdLnN0YXRlLmZ1bGxzY3JlZW4gfHwKLQkJY29yZV9mcmVlc3luYy0+bWFwW2lu ZGV4XS5zdGF0ZS52aWRlbyB8fAotCQljb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLnN0YXRlLnN0 YXRpY19yYW1wLnJhbXBfaXNfYWN0aXZlKTsKLQljdHgtPm1pbl9yZWZyZXNoX2luX21pY3JvX2h6 ID0KLQkJCWNvcmVfZnJlZXN5bmMtPm1hcFtpbmRleF0uY2Fwcy0+bWluX3JlZnJlc2hfaW5fbWlj cm9faHo7Ci0JY3R4LT5ub21pbmFsX3JlZnJlc2hfaW5fbWljcm9faHogPSBjb3JlX2ZyZWVzeW5j LT4KLQkJbWFwW2luZGV4XS5zdGF0ZS5ub21pbmFsX3JlZnJlc2hfcmF0ZV9pbl9taWNyb19oejsK KwkvKiB2X3RvdGFsIGNhbm5vdCBiZSBsZXNzIHRoYW4gbm9taW5hbCAqLworCWlmICh2X3RvdGFs IDwgc3RyZWFtLT50aW1pbmcudl90b3RhbCkgeworCQlBU1NFUlQodl90b3RhbCA8IHN0cmVhbS0+ dGltaW5nLnZfdG90YWwpOworCQl2X3RvdGFsID0gc3RyZWFtLT50aW1pbmcudl90b3RhbDsKKwl9 CiAKKwlyZXR1cm4gdl90b3RhbDsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3N0cmVhbShzdHJ1 Y3QgY29yZV9mcmVlc3luYyAqY29yZV9mcmVlc3luYywKLQkJc3RydWN0IGRjX3N0cmVhbV9zdGF0 ZSAqc3RyZWFtKQorc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX3ZfdG90YWxfZnJvbV9kdXJhdGlv bigKKwkJY29uc3Qgc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAorCQljb25zdCBzdHJ1 Y3QgbW9kX3Zycl9wYXJhbXMgKnZyciwKKwkJdW5zaWduZWQgaW50IGR1cmF0aW9uX2luX3VzKQog ewotCXVuc2lnbmVkIGludCBpbmRleCA9IG1hcF9pbmRleF9mcm9tX3N0cmVhbShjb3JlX2ZyZWVz eW5jLCBzdHJlYW0pOwotCWlmIChjb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLmNhcHMtPnN1cHBv cnRlZCkgewotCQlzdHJlYW0tPmlnbm9yZV9tc2FfdGltaW5nX3BhcmFtID0gMTsKLQkJdXBkYXRl X3N0cmVhbV9mcmVlc3luY19jb250ZXh0KGNvcmVfZnJlZXN5bmMsIHN0cmVhbSk7Ci0JfQotfQor CXVuc2lnbmVkIGludCB2X3RvdGFsID0gMDsKIAotc3RhdGljIHZvaWQgY2FsY19mcmVlc3luY19y YW5nZShzdHJ1Y3QgY29yZV9mcmVlc3luYyAqY29yZV9mcmVlc3luYywKLQkJc3RydWN0IGRjX3N0 cmVhbV9zdGF0ZSAqc3RyZWFtLAotCQlzdHJ1Y3QgZnJlZXN5bmNfc3RhdGUgKnN0YXRlLAotCQl1 bnNpZ25lZCBpbnQgbWluX3JlZnJlc2hfaW5fdWh6LAotCQl1bnNpZ25lZCBpbnQgbWF4X3JlZnJl c2hfaW5fdWh6KQotewotCXVuc2lnbmVkIGludCBtaW5fZnJhbWVfZHVyYXRpb25faW5fbnMgPSAw LCBtYXhfZnJhbWVfZHVyYXRpb25faW5fbnMgPSAwOwotCXVuc2lnbmVkIGludCBpbmRleCA9IG1h cF9pbmRleF9mcm9tX3N0cmVhbShjb3JlX2ZyZWVzeW5jLCBzdHJlYW0pOwotCXVpbnQzMl90IHZ0 b3RhbCA9IHN0cmVhbS0+dGltaW5nLnZfdG90YWw7Ci0KLQlpZiAoKG1pbl9yZWZyZXNoX2luX3Vo eiA9PSAwKSB8fCAobWF4X3JlZnJlc2hfaW5fdWh6ID09IDApKSB7Ci0JCXN0YXRlLT5mcmVlc3lu Y19yYW5nZS5taW5fcmVmcmVzaCA9Ci0JCQkJc3RhdGUtPm5vbWluYWxfcmVmcmVzaF9yYXRlX2lu X21pY3JvX2h6OwotCQlzdGF0ZS0+ZnJlZXN5bmNfcmFuZ2UubWF4X3JlZnJlc2ggPQotCQkJCXN0 YXRlLT5ub21pbmFsX3JlZnJlc2hfcmF0ZV9pbl9taWNyb19oejsKKwlpZiAoZHVyYXRpb25faW5f dXMgPCB2cnItPm1pbl9kdXJhdGlvbl9pbl91cykKKwkJZHVyYXRpb25faW5fdXMgPSB2cnItPm1p bl9kdXJhdGlvbl9pbl91czsKIAotCQlzdGF0ZS0+ZnJlZXN5bmNfcmFuZ2UubWF4X2ZyYW1lX2R1 cmF0aW9uID0gMDsKLQkJc3RhdGUtPmZyZWVzeW5jX3JhbmdlLm1pbl9mcmFtZV9kdXJhdGlvbiA9 IDA7CisJaWYgKGR1cmF0aW9uX2luX3VzID4gdnJyLT5tYXhfZHVyYXRpb25faW5fdXMpCisJCWR1 cmF0aW9uX2luX3VzID0gdnJyLT5tYXhfZHVyYXRpb25faW5fdXM7CiAKLQkJc3RhdGUtPmZyZWVz eW5jX3JhbmdlLnZtYXggPSB2dG90YWw7Ci0JCXN0YXRlLT5mcmVlc3luY19yYW5nZS52bWluID0g dnRvdGFsOwotCi0JCXJldHVybjsKLQl9CisJdl90b3RhbCA9IGRpdjY0X3U2NChkaXY2NF91NjQo KCh1bnNpZ25lZCBsb25nIGxvbmcpKAorCQkJCWR1cmF0aW9uX2luX3VzKSAqIHN0cmVhbS0+dGlt aW5nLnBpeF9jbGtfa2h6KSwKKwkJCQlzdHJlYW0tPnRpbWluZy5oX3RvdGFsKSwgMTAwMCk7CiAK LQltaW5fZnJhbWVfZHVyYXRpb25faW5fbnMgPSAoKHVuc2lnbmVkIGludCkgKGRpdjY0X3U2NCgK LQkJCQkJKDEwMDAwMDAwMDBVTEwgKiAxMDAwMDAwKSwKLQkJCQkJbWF4X3JlZnJlc2hfaW5fdWh6 KSkpOwotCW1heF9mcmFtZV9kdXJhdGlvbl9pbl9ucyA9ICgodW5zaWduZWQgaW50KSAoZGl2NjRf dTY0KAotCQkoMTAwMDAwMDAwMFVMTCAqIDEwMDAwMDApLAotCQltaW5fcmVmcmVzaF9pbl91aHop KSk7Ci0KLQlzdGF0ZS0+ZnJlZXN5bmNfcmFuZ2UubWluX3JlZnJlc2ggPSBtaW5fcmVmcmVzaF9p bl91aHo7Ci0Jc3RhdGUtPmZyZWVzeW5jX3JhbmdlLm1heF9yZWZyZXNoID0gbWF4X3JlZnJlc2hf aW5fdWh6OwotCi0Jc3RhdGUtPmZyZWVzeW5jX3JhbmdlLm1heF9mcmFtZV9kdXJhdGlvbiA9IG1h eF9mcmFtZV9kdXJhdGlvbl9pbl9uczsKLQlzdGF0ZS0+ZnJlZXN5bmNfcmFuZ2UubWluX2ZyYW1l X2R1cmF0aW9uID0gbWluX2ZyYW1lX2R1cmF0aW9uX2luX25zOwotCi0Jc3RhdGUtPmZyZWVzeW5j X3JhbmdlLnZtYXggPSBkaXY2NF91NjQoZGl2NjRfdTY0KCgodW5zaWduZWQgbG9uZyBsb25nKSgK LQkJbWF4X2ZyYW1lX2R1cmF0aW9uX2luX25zKSAqIHN0cmVhbS0+dGltaW5nLnBpeF9jbGtfa2h6 KSwKLQkJc3RyZWFtLT50aW1pbmcuaF90b3RhbCksIDEwMDAwMDApOwotCXN0YXRlLT5mcmVlc3lu Y19yYW5nZS52bWluID0gZGl2NjRfdTY0KGRpdjY0X3U2NCgoKHVuc2lnbmVkIGxvbmcgbG9uZyko Ci0JCW1pbl9mcmFtZV9kdXJhdGlvbl9pbl9ucykgKiBzdHJlYW0tPnRpbWluZy5waXhfY2xrX2to eiksCi0JCXN0cmVhbS0+dGltaW5nLmhfdG90YWwpLCAxMDAwMDAwKTsKLQotCS8qIHZtaW4vdm1h eCBjYW5ub3QgYmUgbGVzcyB0aGFuIHZ0b3RhbCAqLwotCWlmIChzdGF0ZS0+ZnJlZXN5bmNfcmFu Z2Uudm1pbiA8IHZ0b3RhbCkgewotCQkvKiBFcnJvciBvZiAxIGlzIHBlcm1pc3NpYmxlICovCi0J CUFTU0VSVCgoc3RhdGUtPmZyZWVzeW5jX3JhbmdlLnZtaW4gKyAxKSA+PSB2dG90YWwpOwotCQlz dGF0ZS0+ZnJlZXN5bmNfcmFuZ2Uudm1pbiA9IHZ0b3RhbDsKKwkvKiB2X3RvdGFsIGNhbm5vdCBi ZSBsZXNzIHRoYW4gbm9taW5hbCAqLworCWlmICh2X3RvdGFsIDwgc3RyZWFtLT50aW1pbmcudl90 b3RhbCkgeworCQlBU1NFUlQodl90b3RhbCA8IHN0cmVhbS0+dGltaW5nLnZfdG90YWwpOworCQl2 X3RvdGFsID0gc3RyZWFtLT50aW1pbmcudl90b3RhbDsKIAl9CiAKLQlpZiAoc3RhdGUtPmZyZWVz eW5jX3JhbmdlLnZtYXggPCB2dG90YWwpIHsKLQkJLyogRXJyb3Igb2YgMSBpcyBwZXJtaXNzaWJs ZSAqLwotCQlBU1NFUlQoKHN0YXRlLT5mcmVlc3luY19yYW5nZS52bWF4ICsgMSkgPj0gdnRvdGFs KTsKLQkJc3RhdGUtPmZyZWVzeW5jX3JhbmdlLnZtYXggPSB2dG90YWw7Ci0JfQotCi0JLyogRGV0 ZXJtaW5lIHdoZXRoZXIgQlRSIGNhbiBiZSBzdXBwb3J0ZWQgKi8KLQlpZiAobWF4X2ZyYW1lX2R1 cmF0aW9uX2luX25zID49Ci0JCQkyICogbWluX2ZyYW1lX2R1cmF0aW9uX2luX25zKQotCQljb3Jl X2ZyZWVzeW5jLT5tYXBbaW5kZXhdLmNhcHMtPmJ0cl9zdXBwb3J0ZWQgPSB0cnVlOwotCWVsc2UK LQkJY29yZV9mcmVlc3luYy0+bWFwW2luZGV4XS5jYXBzLT5idHJfc3VwcG9ydGVkID0gZmFsc2U7 Ci0KLQkvKiBDYWNoZSB0aGUgdGltZSB2YXJpYWJsZXMgKi8KLQlzdGF0ZS0+dGltZS5tYXhfcmVu ZGVyX3RpbWVfaW5fdXMgPQotCQltYXhfZnJhbWVfZHVyYXRpb25faW5fbnMgLyAxMDAwOwotCXN0 YXRlLT50aW1lLm1pbl9yZW5kZXJfdGltZV9pbl91cyA9Ci0JCW1pbl9mcmFtZV9kdXJhdGlvbl9p bl9ucyAvIDEwMDA7Ci0Jc3RhdGUtPmJ0ci5taWRfcG9pbnRfaW5fdXMgPQotCQkobWF4X2ZyYW1l X2R1cmF0aW9uX2luX25zICsKLQkJbWluX2ZyYW1lX2R1cmF0aW9uX2luX25zKSAvIDIwMDA7CisJ cmV0dXJuIHZfdG90YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGNhbGNfdl90b3RhbF9mcm9tX2R1cmF0 aW9uKHN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbSwKLQkJdW5zaWduZWQgaW50IGR1cmF0 aW9uX2luX25zLCBpbnQgKnZfdG90YWxfbm9taW5hbCkKK3N0YXRpYyB2b2lkIHVwZGF0ZV92X3Rv dGFsX2Zvcl9zdGF0aWNfcmFtcCgKKwkJc3RydWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5 bmMsCisJCWNvbnN0IHN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbSwKKwkJc3RydWN0IG1v ZF92cnJfcGFyYW1zICppbl9vdXRfdnJyKQogewotCSp2X3RvdGFsX25vbWluYWwgPSBkaXY2NF91 NjQoZGl2NjRfdTY0KCgodW5zaWduZWQgbG9uZyBsb25nKSgKLQkJCQlkdXJhdGlvbl9pbl9ucykg KiBzdHJlYW0tPnRpbWluZy5waXhfY2xrX2toeiksCi0JCQkJc3RyZWFtLT50aW1pbmcuaF90b3Rh bCksIDEwMDAwMDApOwotfQotCi1zdGF0aWMgdm9pZCBjYWxjX3ZfdG90YWxfZm9yX3N0YXRpY19y YW1wKHN0cnVjdCBjb3JlX2ZyZWVzeW5jICpjb3JlX2ZyZWVzeW5jLAotCQlzdHJ1Y3QgZGNfc3Ry ZWFtX3N0YXRlICpzdHJlYW0sCi0JCXVuc2lnbmVkIGludCBpbmRleCwgaW50ICp2X3RvdGFsKQot ewotCXVuc2lnbmVkIGludCBmcmFtZV9kdXJhdGlvbiA9IDA7Ci0KLQlzdHJ1Y3QgZ3JhZHVhbF9z dGF0aWNfcmFtcCAqc3RhdGljX3JhbXBfdmFyaWFibGVzID0KLQkJCQkmY29yZV9mcmVlc3luYy0+ bWFwW2luZGV4XS5zdGF0ZS5zdGF0aWNfcmFtcDsKKwl1bnNpZ25lZCBpbnQgdl90b3RhbCA9IDA7 CisJdW5zaWduZWQgaW50IGN1cnJlbnRfZHVyYXRpb25faW5fdXMgPQorCQkJY2FsY19kdXJhdGlv bl9pbl91c19mcm9tX3ZfdG90YWwoCisJCQkJc3RyZWFtLCBpbl9vdXRfdnJyLAorCQkJCWluX291 dF92cnItPmFkanVzdC52X3RvdGFsX21heCk7CisJdW5zaWduZWQgaW50IHRhcmdldF9kdXJhdGlv bl9pbl91cyA9CisJCQljYWxjX2R1cmF0aW9uX2luX3VzX2Zyb21fcmVmcmVzaF9pbl91aHooCisJ CQkJaW5fb3V0X3Zyci0+Zml4ZWQudGFyZ2V0X3JlZnJlc2hfaW5fdWh6KTsKKwlib29sIHJhbXBf ZGlyZWN0aW9uX2lzX3VwID0gKGN1cnJlbnRfZHVyYXRpb25faW5fdXMgPgorCQkJCXRhcmdldF9k dXJhdGlvbl9pbl91cykgPyB0cnVlIDogZmFsc2U7CiAKIAkvKiBDYWxjIHJhdGlvIGJldHdlZW4g bmV3IGFuZCBjdXJyZW50IGZyYW1lIGR1cmF0aW9uIHdpdGggMyBkaWdpdCAqLwogCXVuc2lnbmVk IGludCBmcmFtZV9kdXJhdGlvbl9yYXRpbyA9IGRpdjY0X3U2NCgxMDAwMDAwLAogCQkoMTAwMCAr ICBkaXY2NF91NjQoKCh1bnNpZ25lZCBsb25nIGxvbmcpKAogCQlTVEFUSUNfU0NSRUVOX1JBTVBf REVMVEFfUkVGUkVTSF9SQVRFX1BFUl9GUkFNRSkgKgotCQlzdGF0aWNfcmFtcF92YXJpYWJsZXMt PnJhbXBfY3VycmVudF9mcmFtZV9kdXJhdGlvbl9pbl9ucyksCi0JCTEwMDAwMDAwMDApKSk7CisJ CWN1cnJlbnRfZHVyYXRpb25faW5fdXMpLAorCQkxMDAwMDAwKSkpOwogCi0JLyogQ2FsY3VsYXRl IGRlbHRhIGJldHdlZW4gbmV3IGFuZCBjdXJyZW50IGZyYW1lIGR1cmF0aW9uIGluIG5zICovCisJ LyogQ2FsY3VsYXRlIGRlbHRhIGJldHdlZW4gbmV3IGFuZCBjdXJyZW50IGZyYW1lIGR1cmF0aW9u IGluIHVzICovCiAJdW5zaWduZWQgaW50IGZyYW1lX2R1cmF0aW9uX2RlbHRhID0gZGl2NjRfdTY0 KCgodW5zaWduZWQgbG9uZyBsb25nKSgKLQkJc3RhdGljX3JhbXBfdmFyaWFibGVzLT5yYW1wX2N1 cnJlbnRfZnJhbWVfZHVyYXRpb25faW5fbnMpICoKKwkJY3VycmVudF9kdXJhdGlvbl9pbl91cykg KgogCQkoMTAwMCAtIGZyYW1lX2R1cmF0aW9uX3JhdGlvKSksIDEwMDApOwogCiAJLyogQWRqdXN0 IGZyYW1lIGR1cmF0aW9uIGRlbHRhIGJhc2VkIG9uIHJhdGlvIGJldHdlZW4gY3VycmVudCBhbmQK IAkgKiBzdGFuZGFyZCBmcmFtZSBkdXJhdGlvbiAoZnJhbWUgZHVyYXRpb24gYXQgNjAgSHogcmVm cmVzaCByYXRlKS4KIAkgKi8KIAl1bnNpZ25lZCBpbnQgcmFtcF9yYXRlX2ludGVycG9sYXRlZCA9 IGRpdjY0X3U2NCgoKHVuc2lnbmVkIGxvbmcgbG9uZykoCi0JCWZyYW1lX2R1cmF0aW9uX2RlbHRh KSAqIHN0YXRpY19yYW1wX3ZhcmlhYmxlcy0+Ci0JCXJhbXBfY3VycmVudF9mcmFtZV9kdXJhdGlv bl9pbl9ucyksIDE2NjY2NjY2KTsKKwkJZnJhbWVfZHVyYXRpb25fZGVsdGEpICogY3VycmVudF9k dXJhdGlvbl9pbl91cyksIDE2NjY2KTsKIAogCS8qIEdvaW5nIHRvIGEgaGlnaGVyIHJlZnJlc2gg cmF0ZSAobG93ZXIgZnJhbWUgZHVyYXRpb24pICovCi0JaWYgKHN0YXRpY19yYW1wX3ZhcmlhYmxl cy0+cmFtcF9kaXJlY3Rpb25faXNfdXApIHsKKwlpZiAocmFtcF9kaXJlY3Rpb25faXNfdXApIHsK IAkJLyogcmVkdWNlIGZyYW1lIGR1cmF0aW9uICovCi0JCXN0YXRpY19yYW1wX3ZhcmlhYmxlcy0+ cmFtcF9jdXJyZW50X2ZyYW1lX2R1cmF0aW9uX2luX25zIC09Ci0JCQlyYW1wX3JhdGVfaW50ZXJw b2xhdGVkOwotCi0JCS8qIG1pbiBmcmFtZSBkdXJhdGlvbiAqLwotCQlmcmFtZV9kdXJhdGlvbiA9 ICgodW5zaWduZWQgaW50KSAoZGl2NjRfdTY0KAotCQkJKDEwMDAwMDAwMDBVTEwgKiAxMDAwMDAw KSwKLQkJCWNvcmVfZnJlZXN5bmMtPm1hcFtpbmRleF0uc3RhdGUuCi0JCQlub21pbmFsX3JlZnJl c2hfcmF0ZV9pbl9taWNyb19oeikpKTsKKwkJY3VycmVudF9kdXJhdGlvbl9pbl91cyAtPSByYW1w X3JhdGVfaW50ZXJwb2xhdGVkOwogCiAJCS8qIGFkanVzdCBmb3IgZnJhbWUgZHVyYXRpb24gYmVs b3cgbWluICovCi0JCWlmIChzdGF0aWNfcmFtcF92YXJpYWJsZXMtPnJhbXBfY3VycmVudF9mcmFt ZV9kdXJhdGlvbl9pbl9ucyA8PQotCQkJZnJhbWVfZHVyYXRpb24pIHsKLQotCQkJc3RhdGljX3Jh bXBfdmFyaWFibGVzLT5yYW1wX2lzX2FjdGl2ZSA9IGZhbHNlOwotCQkJc3RhdGljX3JhbXBfdmFy aWFibGVzLT4KLQkJCQlyYW1wX2N1cnJlbnRfZnJhbWVfZHVyYXRpb25faW5fbnMgPQotCQkJCWZy YW1lX2R1cmF0aW9uOworCQlpZiAoY3VycmVudF9kdXJhdGlvbl9pbl91cyA8PSB0YXJnZXRfZHVy YXRpb25faW5fdXMpIHsKKwkJCWluX291dF92cnItPmZpeGVkLnJhbXBpbmdfYWN0aXZlID0gZmFs c2U7CisJCQlpbl9vdXRfdnJyLT5maXhlZC5yYW1waW5nX2RvbmUgPSB0cnVlOworCQkJY3VycmVu dF9kdXJhdGlvbl9pbl91cyA9CisJCQkJY2FsY19kdXJhdGlvbl9pbl91c19mcm9tX3JlZnJlc2hf aW5fdWh6KAorCQkJCWluX291dF92cnItPmZpeGVkLnRhcmdldF9yZWZyZXNoX2luX3Voeik7CiAJ CX0KIAkvKiBHb2luZyB0byBhIGxvd2VyIHJlZnJlc2ggcmF0ZSAobGFyZ2VyIGZyYW1lIGR1cmF0 aW9uKSAqLwogCX0gZWxzZSB7CiAJCS8qIGluY3JlYXNlIGZyYW1lIGR1cmF0aW9uICovCi0JCXN0 YXRpY19yYW1wX3ZhcmlhYmxlcy0+cmFtcF9jdXJyZW50X2ZyYW1lX2R1cmF0aW9uX2luX25zICs9 Ci0JCQlyYW1wX3JhdGVfaW50ZXJwb2xhdGVkOwotCi0JCS8qIG1heCBmcmFtZSBkdXJhdGlvbiAq LwotCQlmcmFtZV9kdXJhdGlvbiA9ICgodW5zaWduZWQgaW50KSAoZGl2NjRfdTY0KAotCQkJKDEw MDAwMDAwMDBVTEwgKiAxMDAwMDAwKSwKLQkJCWNvcmVfZnJlZXN5bmMtPm1hcFtpbmRleF0uY2Fw cy0+bWluX3JlZnJlc2hfaW5fbWljcm9faHopKSk7CisJCWN1cnJlbnRfZHVyYXRpb25faW5fdXMg Kz0gcmFtcF9yYXRlX2ludGVycG9sYXRlZDsKIAogCQkvKiBhZGp1c3QgZm9yIGZyYW1lIGR1cmF0 aW9uIGFib3ZlIG1heCAqLwotCQlpZiAoc3RhdGljX3JhbXBfdmFyaWFibGVzLT5yYW1wX2N1cnJl bnRfZnJhbWVfZHVyYXRpb25faW5fbnMgPj0KLQkJCWZyYW1lX2R1cmF0aW9uKSB7Ci0KLQkJCXN0 YXRpY19yYW1wX3ZhcmlhYmxlcy0+cmFtcF9pc19hY3RpdmUgPSBmYWxzZTsKLQkJCXN0YXRpY19y YW1wX3ZhcmlhYmxlcy0+Ci0JCQkJcmFtcF9jdXJyZW50X2ZyYW1lX2R1cmF0aW9uX2luX25zID0K LQkJCQlmcmFtZV9kdXJhdGlvbjsKKwkJaWYgKGN1cnJlbnRfZHVyYXRpb25faW5fdXMgPj0gdGFy Z2V0X2R1cmF0aW9uX2luX3VzKSB7CisJCQlpbl9vdXRfdnJyLT5maXhlZC5yYW1waW5nX2FjdGl2 ZSA9IGZhbHNlOworCQkJaW5fb3V0X3Zyci0+Zml4ZWQucmFtcGluZ19kb25lID0gdHJ1ZTsKKwkJ CWN1cnJlbnRfZHVyYXRpb25faW5fdXMgPQorCQkJCWNhbGNfZHVyYXRpb25faW5fdXNfZnJvbV9y ZWZyZXNoX2luX3VoeigKKwkJCQlpbl9vdXRfdnJyLT5maXhlZC50YXJnZXRfcmVmcmVzaF9pbl91 aHopOwogCQl9CiAJfQogCi0JY2FsY192X3RvdGFsX2Zyb21fZHVyYXRpb24oc3RyZWFtLCBzdGF0 aWNfcmFtcF92YXJpYWJsZXMtPgotCQlyYW1wX2N1cnJlbnRfZnJhbWVfZHVyYXRpb25faW5fbnMs IHZfdG90YWwpOwotfQotCi1zdGF0aWMgdm9pZCByZXNldF9mcmVlc3luY19zdGF0ZV92YXJpYWJs ZXMoc3RydWN0IGZyZWVzeW5jX3N0YXRlKiBzdGF0ZSkKLXsKLQlzdGF0ZS0+c3RhdGljX3JhbXAu cmFtcF9pc19hY3RpdmUgPSBmYWxzZTsKLQlpZiAoc3RhdGUtPm5vbWluYWxfcmVmcmVzaF9yYXRl X2luX21pY3JvX2h6KQotCQlzdGF0ZS0+c3RhdGljX3JhbXAucmFtcF9jdXJyZW50X2ZyYW1lX2R1 cmF0aW9uX2luX25zID0KLQkJCSgodW5zaWduZWQgaW50KSAoZGl2NjRfdTY0KAotCQkJKDEwMDAw MDAwMDBVTEwgKiAxMDAwMDAwKSwKLQkJCXN0YXRlLT5ub21pbmFsX3JlZnJlc2hfcmF0ZV9pbl9t aWNyb19oeikpKTsKLQotCXN0YXRlLT5idHIuYnRyX2FjdGl2ZSA9IGZhbHNlOwotCXN0YXRlLT5i dHIuZnJhbWVfY291bnRlciA9IDA7Ci0Jc3RhdGUtPmJ0ci5mcmFtZXNfdG9faW5zZXJ0ID0gMDsK LQlzdGF0ZS0+YnRyLmluc2VydGVkX2ZyYW1lX2R1cmF0aW9uX2luX3VzID0gMDsKLQlzdGF0ZS0+ YnRyLnByb2dyYW1fYnRyID0gZmFsc2U7Ci0KLQlzdGF0ZS0+Zml4ZWRfcmVmcmVzaC5maXhlZF9h Y3RpdmUgPSBmYWxzZTsKLQlzdGF0ZS0+Zml4ZWRfcmVmcmVzaC5wcm9ncmFtX2ZpeGVkID0gZmFs c2U7Ci19Ci0vKgotICogU2V0cyBmcmVlc3luYyBtb2RlIG9uIGEgc3RyZWFtIGRlcGVuZGluZyBv biBjdXJyZW50IGZyZWVzeW5jIHN0YXRlLgotICovCi1zdGF0aWMgYm9vbCBzZXRfZnJlZXN5bmNf b25fc3RyZWFtcyhzdHJ1Y3QgY29yZV9mcmVlc3luYyAqY29yZV9mcmVlc3luYywKLQkJc3RydWN0 IGRjX3N0cmVhbV9zdGF0ZSAqKnN0cmVhbXMsIGludCBudW1fc3RyZWFtcykKLXsKLQlpbnQgdl90 b3RhbF9ub21pbmFsID0gMCwgdl90b3RhbF9taW4gPSAwLCB2X3RvdGFsX21heCA9IDA7Ci0JdW5z aWduZWQgaW50IHN0cmVhbV9pZHgsIG1hcF9pbmRleCA9IDA7Ci0Jc3RydWN0IGZyZWVzeW5jX3N0 YXRlICpzdGF0ZTsKKwl2X3RvdGFsID0gY2FsY192X3RvdGFsX2Zyb21fZHVyYXRpb24oc3RyZWFt LAorCQkJaW5fb3V0X3ZyciwKKwkJCWN1cnJlbnRfZHVyYXRpb25faW5fdXMpOwogCi0JaWYgKG51 bV9zdHJlYW1zID09IDAgfHwgc3RyZWFtcyA9PSBOVUxMIHx8IG51bV9zdHJlYW1zID4gMSkKLQkJ cmV0dXJuIGZhbHNlOwogCi0JZm9yIChzdHJlYW1faWR4ID0gMDsgc3RyZWFtX2lkeCA8IG51bV9z dHJlYW1zOyBzdHJlYW1faWR4KyspIHsKLQotCQltYXBfaW5kZXggPSBtYXBfaW5kZXhfZnJvbV9z dHJlYW0oY29yZV9mcmVlc3luYywKLQkJCQlzdHJlYW1zW3N0cmVhbV9pZHhdKTsKLQotCQlzdGF0 ZSA9ICZjb3JlX2ZyZWVzeW5jLT5tYXBbbWFwX2luZGV4XS5zdGF0ZTsKLQotCQlpZiAoY29yZV9m cmVlc3luYy0+bWFwW21hcF9pbmRleF0uY2Fwcy0+c3VwcG9ydGVkKSB7Ci0KLQkJCS8qIEZ1bGxz Y3JlZW4gaGFzIHRoZSB0b3Btb3N0IHByaW9yaXR5LiBJZiB0aGUKLQkJCSAqIGZ1bGxzY3JlZW4g Yml0IGlzIHNldCwgd2UgYXJlIGluIGEgZnVsbHNjcmVlbgotCQkJICogYXBwbGljYXRpb24gd2hl cmUgaXQgc2hvdWxkIG5vdCBtYXR0ZXIgaWYgaXQgaXMKLQkJCSAqIHN0YXRpYyBzY3JlZW4uIFdl IHNob3VsZCBub3QgY2hlY2sgdGhlIHN0YXRpY19zY3JlZW4KLQkJCSAqIG9yIHZpZGVvIGJpdC4K LQkJCSAqCi0JCQkgKiBTcGVjaWFsIGNhc2VzIG9mIGZ1bGxzY3JlZW4gaW5jbHVkZSBidHIgYW5k IGZpeGVkCi0JCQkgKiByZWZyZXNoLiBXZSBwcm9ncmFtIGJ0ciBvbiBldmVyeSBmbGlwIGFuZCBp bnZvbHZlcwotCQkJICogcHJvZ3JhbW1pbmcgZnVsbCByYW5nZSByaWdodCBiZWZvcmUgdGhlIGxh c3QgaW5zZXJ0ZWQgZnJhbWUuCi0JCQkgKiBIb3dldmVyLCB3ZSBkbyBub3Qgd2FudCB0byBwcm9n cmFtIHRoZSBmdWxsIGZyZWVzeW5jIHJhbmdlCi0JCQkgKiB3aGVuIGZpeGVkIHJlZnJlc2ggaXMg YWN0aXZlLCBiZWNhdXNlIHdlIG9ubHkgcHJvZ3JhbQotCQkJICogdGhhdCBsb2dpYyBvbmNlIGFu ZCB0aGlzIHdpbGwgb3ZlcnJpZGUgaXQuCi0JCQkgKi8KLQkJCWlmIChjb3JlX2ZyZWVzeW5jLT5t YXBbbWFwX2luZGV4XS51c2VyX2VuYWJsZS4KLQkJCQllbmFibGVfZm9yX2dhbWluZyA9PSB0cnVl ICYmCi0JCQkJc3RhdGUtPmZ1bGxzY3JlZW4gPT0gdHJ1ZSAmJgotCQkJCXN0YXRlLT5maXhlZF9y ZWZyZXNoLmZpeGVkX2FjdGl2ZSA9PSBmYWxzZSkgewotCQkJCS8qIEVuYWJsZSBmcmVlc3luYyAq LwotCi0JCQkJdl90b3RhbF9taW4gPSBzdGF0ZS0+ZnJlZXN5bmNfcmFuZ2Uudm1pbjsKLQkJCQl2 X3RvdGFsX21heCA9IHN0YXRlLT5mcmVlc3luY19yYW5nZS52bWF4OwotCi0JCQkJLyogVXBkYXRl IHRoZSBmcmVlc3luYyBjb250ZXh0IGZvciB0aGUgc3RyZWFtICovCi0JCQkJdXBkYXRlX3N0cmVh bV9mcmVlc3luY19jb250ZXh0KGNvcmVfZnJlZXN5bmMsCi0JCQkJCQlzdHJlYW1zW3N0cmVhbV9p ZHhdKTsKLQotCQkJCWFkanVzdF92bWluX3ZtYXgoY29yZV9mcmVlc3luYywgc3RyZWFtcywKLQkJ CQkJCW51bV9zdHJlYW1zLCBtYXBfaW5kZXgsCi0JCQkJCQl2X3RvdGFsX21pbiwKLQkJCQkJCXZf dG90YWxfbWF4KTsKLQotCQkJCXJldHVybiB0cnVlOwotCi0JCQl9IGVsc2UgaWYgKGNvcmVfZnJl ZXN5bmMtPm1hcFttYXBfaW5kZXhdLnVzZXJfZW5hYmxlLgotCQkJCWVuYWJsZV9mb3JfdmlkZW8g JiYgc3RhdGUtPnZpZGVvID09IHRydWUpIHsKLQkJCQkvKiBFbmFibGUgNDhIeiBmZWF0dXJlICov Ci0KLQkJCQljYWxjX3ZfdG90YWxfZnJvbV9kdXJhdGlvbihzdHJlYW1zW3N0cmVhbV9pZHhdLAot CQkJCQlzdGF0ZS0+dGltZS51cGRhdGVfZHVyYXRpb25faW5fbnMsCi0JCQkJCSZ2X3RvdGFsX25v bWluYWwpOwotCi0JCQkJLyogUHJvZ3JhbSBvbmx5IGlmIHZfdG90YWxfbm9taW5hbCBpcyBpbiBy YW5nZSovCi0JCQkJaWYgKHZfdG90YWxfbm9taW5hbCA+PQotCQkJCQlzdHJlYW1zW3N0cmVhbV9p ZHhdLT50aW1pbmcudl90b3RhbCkgewotCi0JCQkJCS8qIFVwZGF0ZSB0aGUgZnJlZXN5bmMgY29u dGV4dCBmb3IKLQkJCQkJICogdGhlIHN0cmVhbQotCQkJCQkgKi8KLQkJCQkJdXBkYXRlX3N0cmVh bV9mcmVlc3luY19jb250ZXh0KAotCQkJCQkJY29yZV9mcmVlc3luYywKLQkJCQkJCXN0cmVhbXNb c3RyZWFtX2lkeF0pOwotCi0JCQkJCWFkanVzdF92bWluX3ZtYXgoCi0JCQkJCQljb3JlX2ZyZWVz eW5jLCBzdHJlYW1zLAotCQkJCQkJbnVtX3N0cmVhbXMsIG1hcF9pbmRleCwKLQkJCQkJCXZfdG90 YWxfbm9taW5hbCwKLQkJCQkJCXZfdG90YWxfbm9taW5hbCk7Ci0JCQkJfQotCQkJCXJldHVybiB0 cnVlOwotCi0JCQl9IGVsc2UgewotCQkJCS8qIERpc2FibGUgZnJlZXN5bmMgKi8KLQkJCQl2X3Rv dGFsX25vbWluYWwgPSBzdHJlYW1zW3N0cmVhbV9pZHhdLT4KLQkJCQkJdGltaW5nLnZfdG90YWw7 Ci0KLQkJCQkvKiBVcGRhdGUgdGhlIGZyZWVzeW5jIGNvbnRleHQgZm9yCi0JCQkJICogdGhlIHN0 cmVhbQotCQkJCSAqLwotCQkJCXVwZGF0ZV9zdHJlYW1fZnJlZXN5bmNfY29udGV4dCgKLQkJCQkJ Y29yZV9mcmVlc3luYywKLQkJCQkJc3RyZWFtc1tzdHJlYW1faWR4XSk7Ci0KLQkJCQlhZGp1c3Rf dm1pbl92bWF4KGNvcmVfZnJlZXN5bmMsIHN0cmVhbXMsCi0JCQkJCQludW1fc3RyZWFtcywgbWFw X2luZGV4LAotCQkJCQkJdl90b3RhbF9ub21pbmFsLAotCQkJCQkJdl90b3RhbF9ub21pbmFsKTsK LQotCQkJCS8qIFJlc2V0IHRoZSBjYWNoZWQgdmFyaWFibGVzICovCi0JCQkJcmVzZXRfZnJlZXN5 bmNfc3RhdGVfdmFyaWFibGVzKHN0YXRlKTsKLQotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9 IGVsc2UgewotCQkJLyogRGlzYWJsZSBmcmVlc3luYyAqLwotCQkJdl90b3RhbF9ub21pbmFsID0g c3RyZWFtc1tzdHJlYW1faWR4XS0+Ci0JCQkJdGltaW5nLnZfdG90YWw7Ci0JCQkvKgotCQkJICog d2UgaGF2ZSB0byByZXNldCBkcnIgYWx3YXlzIGV2ZW4gc2luayBkb2VzCi0JCQkgKiBub3Qgc3Vw cG9ydCBmcmVlc3luYyBiZWNhdXNlIGEgZm9ybWVyIHN0cmVhbSBoYXMKLQkJCSAqIGJlIHByb2dy YW1tZWQKLQkJCSAqLwotCQkJYWRqdXN0X3ZtaW5fdm1heChjb3JlX2ZyZWVzeW5jLCBzdHJlYW1z LAotCQkJCQkJbnVtX3N0cmVhbXMsIG1hcF9pbmRleCwKLQkJCQkJCXZfdG90YWxfbm9taW5hbCwK LQkJCQkJCXZfdG90YWxfbm9taW5hbCk7Ci0JCQkvKiBSZXNldCB0aGUgY2FjaGVkIHZhcmlhYmxl cyAqLwotCQkJcmVzZXRfZnJlZXN5bmNfc3RhdGVfdmFyaWFibGVzKHN0YXRlKTsKLQkJfQotCi0J fQotCi0JcmV0dXJuIGZhbHNlOworCWluX291dF92cnItPmFkanVzdC52X3RvdGFsX21pbiA9IHZf dG90YWw7CisJaW5fb3V0X3Zyci0+YWRqdXN0LnZfdG90YWxfbWF4ID0gdl90b3RhbDsKIH0KIAot c3RhdGljIHZvaWQgc2V0X3N0YXRpY19yYW1wX3ZhcmlhYmxlcyhzdHJ1Y3QgY29yZV9mcmVlc3lu YyAqY29yZV9mcmVlc3luYywKLQkJdW5zaWduZWQgaW50IGluZGV4LCBib29sIGVuYWJsZV9zdGF0 aWNfc2NyZWVuKQotewotCXVuc2lnbmVkIGludCBmcmFtZV9kdXJhdGlvbiA9IDA7Ci0JdW5zaWdu ZWQgaW50IG5vbWluYWxfcmVmcmVzaF9yYXRlID0gY29yZV9mcmVlc3luYy0+bWFwW2luZGV4XS5z dGF0ZS4KLQkJCW5vbWluYWxfcmVmcmVzaF9yYXRlX2luX21pY3JvX2h6OwotCXVuc2lnbmVkIGlu dCBtaW5fcmVmcmVzaF9yYXRlPSBjb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLmNhcHMtPgotCQkJ bWluX3JlZnJlc2hfaW5fbWljcm9faHo7Ci0Jc3RydWN0IGdyYWR1YWxfc3RhdGljX3JhbXAgKnN0 YXRpY19yYW1wX3ZhcmlhYmxlcyA9Ci0JCQkmY29yZV9mcmVlc3luYy0+bWFwW2luZGV4XS5zdGF0 ZS5zdGF0aWNfcmFtcDsKLQotCS8qIElmIHdlIGFyZSBFTkFCTElORyBzdGF0aWMgc2NyZWVuLCBy ZWZyZXNoIHJhdGUgc2hvdWxkIGdvIERPV04uCi0JICogSWYgd2UgYXJlIERJU0FCTElORyBzdGF0 aWMgc2NyZWVuLCByZWZyZXNoIHJhdGUgc2hvdWxkIGdvIFVQLgotCSAqLwotCWlmIChlbmFibGVf c3RhdGljX3NjcmVlbikKLQkJc3RhdGljX3JhbXBfdmFyaWFibGVzLT5yYW1wX2RpcmVjdGlvbl9p c191cCA9IGZhbHNlOwotCWVsc2UKLQkJc3RhdGljX3JhbXBfdmFyaWFibGVzLT5yYW1wX2RpcmVj dGlvbl9pc191cCA9IHRydWU7Ci0KLQkvKiBJZiByYW1wIGlzIG5vdCBhY3RpdmUsIHNldCBpbml0 aWFsIGZyYW1lIGR1cmF0aW9uIGRlcGVuZGluZyBvbgotCSAqIHdoZXRoZXIgd2UgYXJlIGVuYWJs aW5nL2Rpc2FibGluZyBzdGF0aWMgc2NyZWVuIG1vZGUuIElmIHRoZSByYW1wIGlzCi0JICogYWxy ZWFkeSBhY3RpdmUsIHJhbXAgc2hvdWxkIGNvbnRpbnVlIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rp b24KLQkgKiBzdGFydGluZyB3aXRoIHRoZSBjdXJyZW50IGZyYW1lIGR1cmF0aW9uCi0JICovCi0J aWYgKCFzdGF0aWNfcmFtcF92YXJpYWJsZXMtPnJhbXBfaXNfYWN0aXZlKSB7Ci0JCWlmIChlbmFi bGVfc3RhdGljX3NjcmVlbiA9PSB0cnVlKSB7Ci0JCQkvKiBHb2luZyB0byBsb3dlciByZWZyZXNo IHJhdGUsIHNvIHN0YXJ0IGZyb20gbWF4Ci0JCQkgKiByZWZyZXNoIHJhdGUgKG1pbiBmcmFtZSBk dXJhdGlvbikKLQkJCSAqLwotCQkJZnJhbWVfZHVyYXRpb24gPSAoKHVuc2lnbmVkIGludCkgKGRp djY0X3U2NCgKLQkJCQkoMTAwMDAwMDAwMFVMTCAqIDEwMDAwMDApLAotCQkJCW5vbWluYWxfcmVm cmVzaF9yYXRlKSkpOwotCQl9IGVsc2UgewotCQkJLyogR29pbmcgdG8gaGlnaGVyIHJlZnJlc2gg cmF0ZSwgc28gc3RhcnQgZnJvbSBtaW4KLQkJCSAqIHJlZnJlc2ggcmF0ZSAobWF4IGZyYW1lIGR1 cmF0aW9uKQotCQkJICovCi0JCQlmcmFtZV9kdXJhdGlvbiA9ICgodW5zaWduZWQgaW50KSAoZGl2 NjRfdTY0KAotCQkJCSgxMDAwMDAwMDAwVUxMICogMTAwMDAwMCksCi0JCQkJbWluX3JlZnJlc2hf cmF0ZSkpKTsKLQkJfQotCQlzdGF0aWNfcmFtcF92YXJpYWJsZXMtPgotCQkJcmFtcF9jdXJyZW50 X2ZyYW1lX2R1cmF0aW9uX2luX25zID0gZnJhbWVfZHVyYXRpb247Ci0KLQkJc3RhdGljX3JhbXBf dmFyaWFibGVzLT5yYW1wX2lzX2FjdGl2ZSA9IHRydWU7Ci0JfQotfQotCi12b2lkIG1vZF9mcmVl c3luY19oYW5kbGVfdl91cGRhdGUoc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAot CQlzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICoqc3RyZWFtcywgaW50IG51bV9zdHJlYW1zKQorc3Rh dGljIHZvaWQgYXBwbHlfYmVsb3dfdGhlX3JhbmdlKHN0cnVjdCBjb3JlX2ZyZWVzeW5jICpjb3Jl X2ZyZWVzeW5jLAorCQljb25zdCBzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0sCisJCXVu c2lnbmVkIGludCBsYXN0X3JlbmRlcl90aW1lX2luX3VzLAorCQlzdHJ1Y3QgbW9kX3Zycl9wYXJh bXMgKmluX291dF92cnIpCiB7Ci0JdW5zaWduZWQgaW50IGluZGV4LCB2X3RvdGFsLCBpbnNlcnRl ZF9mcmFtZV92X3RvdGFsID0gMDsKLQl1bnNpZ25lZCBpbnQgbWluX2ZyYW1lX2R1cmF0aW9uX2lu X25zLCB2bWF4LCB2bWluID0gMDsKLQlzdHJ1Y3QgZnJlZXN5bmNfc3RhdGUgKnN0YXRlOwotCXN0 cnVjdCBjb3JlX2ZyZWVzeW5jICpjb3JlX2ZyZWVzeW5jID0gTlVMTDsKLQlzdHJ1Y3QgZGNfc3Rh dGljX3NjcmVlbl9ldmVudHMgdHJpZ2dlcnMgPSB7MH07Ci0KLQlpZiAobW9kX2ZyZWVzeW5jID09 IE5VTEwpCi0JCXJldHVybjsKLQotCWNvcmVfZnJlZXN5bmMgPSBNT0RfRlJFRVNZTkNfVE9fQ09S RShtb2RfZnJlZXN5bmMpOwotCi0JaWYgKGNvcmVfZnJlZXN5bmMtPm51bV9lbnRpdGllcyA9PSAw KQotCQlyZXR1cm47Ci0KLQlpbmRleCA9IG1hcF9pbmRleF9mcm9tX3N0cmVhbShjb3JlX2ZyZWVz eW5jLAotCQlzdHJlYW1zWzBdKTsKLQotCWlmIChjb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLmNh cHMtPnN1cHBvcnRlZCA9PSBmYWxzZSkKLQkJcmV0dXJuOwotCi0Jc3RhdGUgPSAmY29yZV9mcmVl c3luYy0+bWFwW2luZGV4XS5zdGF0ZTsKLQotCS8qIEJlbG93IHRoZSBSYW5nZSBMb2dpYyAqLwot Ci0JLyogT25seSBleGVjdXRlIGlmIGluIGZ1bGxzY3JlZW4gbW9kZSAqLwotCWlmIChzdGF0ZS0+ ZnVsbHNjcmVlbiA9PSB0cnVlICYmCi0JCWNvcmVfZnJlZXN5bmMtPm1hcFtpbmRleF0udXNlcl9l bmFibGUuZW5hYmxlX2Zvcl9nYW1pbmcgJiYKLQkJY29yZV9mcmVlc3luYy0+bWFwW2luZGV4XS5j YXBzLT5idHJfc3VwcG9ydGVkICYmCi0JCXN0YXRlLT5idHIuYnRyX2FjdGl2ZSkgeworCXVuc2ln bmVkIGludCBpbnNlcnRlZF9mcmFtZV9kdXJhdGlvbl9pbl91cyA9IDA7CisJdW5zaWduZWQgaW50 IG1pZF9wb2ludF9mcmFtZXNfY2VpbCA9IDA7CisJdW5zaWduZWQgaW50IG1pZF9wb2ludF9mcmFt ZXNfZmxvb3IgPSAwOworCXVuc2lnbmVkIGludCBmcmFtZV90aW1lX2luX3VzID0gMDsKKwl1bnNp Z25lZCBpbnQgZGVsdGFfZnJvbV9taWRfcG9pbnRfaW5fdXNfMSA9IDB4RkZGRkZGRkY7CisJdW5z aWduZWQgaW50IGRlbHRhX2Zyb21fbWlkX3BvaW50X2luX3VzXzIgPSAweEZGRkZGRkZGOworCXVu c2lnbmVkIGludCBmcmFtZXNfdG9faW5zZXJ0ID0gMDsKKwl1bnNpZ25lZCBpbnQgbWluX2ZyYW1l X2R1cmF0aW9uX2luX25zID0gMDsKKwl1bnNpZ25lZCBpbnQgbWF4X3JlbmRlcl90aW1lX2luX3Vz ID0gaW5fb3V0X3Zyci0+bWF4X2R1cmF0aW9uX2luX3VzOwogCi0JCS8qIFRPRE86IHBhc3MgaW4g ZmxhZyBmb3IgUHJlLURDRTEyIEFTSUMKLQkJICogaW4gb3JkZXIgZm9yIGZyYW1lIHZhcmlhYmxl IGR1cmF0aW9uIHRvIHRha2UgYWZmZWN0LAotCQkgKiBpdCBuZWVkcyB0byBiZSBkb25lIG9uZSBW U1lOQyBlYXJseSwgd2hpY2ggaXMgYXQKLQkJICogZnJhbWVDb3VudGVyID09IDEuCi0JCSAqIEZv ciBEQ0UxMiBhbmQgbmV3ZXIgdXBkYXRlcyB0byBWX1RPVEFMX01JTi9NQVgKLQkJICogd2lsbCB0 YWtlIGFmZmVjdCBvbiBjdXJyZW50IGZyYW1lCi0JCSAqLwotCQlpZiAoc3RhdGUtPmJ0ci5mcmFt ZXNfdG9faW5zZXJ0ID09IHN0YXRlLT5idHIuZnJhbWVfY291bnRlcikgeworCW1pbl9mcmFtZV9k dXJhdGlvbl9pbl9ucyA9ICgodW5zaWduZWQgaW50KSAoZGl2NjRfdTY0KAorCQkoMTAwMDAwMDAw MFVMTCAqIDEwMDAwMDApLAorCQlpbl9vdXRfdnJyLT5tYXhfcmVmcmVzaF9pbl91aHopKSk7CiAK LQkJCW1pbl9mcmFtZV9kdXJhdGlvbl9pbl9ucyA9ICgodW5zaWduZWQgaW50KSAoZGl2NjRfdTY0 KAotCQkJCQkoMTAwMDAwMDAwMFVMTCAqIDEwMDAwMDApLAotCQkJCQlzdGF0ZS0+bm9taW5hbF9y ZWZyZXNoX3JhdGVfaW5fbWljcm9faHopKSk7CisJLyogUHJvZ3JhbSBCVFIgKi8KKwlpZiAobGFz dF9yZW5kZXJfdGltZV9pbl91cyArIEJUUl9FWElUX01BUkdJTiA8IG1heF9yZW5kZXJfdGltZV9p bl91cykgeworCQkvKiBFeGl0IEJlbG93IHRoZSBSYW5nZSAqLworCQlpZiAoaW5fb3V0X3Zyci0+ YnRyLmJ0cl9hY3RpdmUpIHsKKwkJCWluX291dF92cnItPmJ0ci5mcmFtZV9jb3VudGVyID0gMDsK KwkJCWluX291dF92cnItPmJ0ci5idHJfYWN0aXZlID0gZmFsc2U7CiAKLQkJCXZtaW4gPSBzdGF0 ZS0+ZnJlZXN5bmNfcmFuZ2Uudm1pbjsKKwkJLyogRXhpdCBGaXhlZCBSZWZyZXNoIG1vZGUgKi8K KwkJfSBlbHNlIGlmIChpbl9vdXRfdnJyLT5maXhlZC5maXhlZF9hY3RpdmUpIHsKIAotCQkJaW5z ZXJ0ZWRfZnJhbWVfdl90b3RhbCA9IHZtaW47CisJCQlpbl9vdXRfdnJyLT5maXhlZC5mcmFtZV9j b3VudGVyKys7CiAKLQkJCWlmIChtaW5fZnJhbWVfZHVyYXRpb25faW5fbnMgLyAxMDAwKQotCQkJ CWluc2VydGVkX2ZyYW1lX3ZfdG90YWwgPQotCQkJCQlzdGF0ZS0+YnRyLmluc2VydGVkX2ZyYW1l X2R1cmF0aW9uX2luX3VzICoKLQkJCQkJdm1pbiAvIChtaW5fZnJhbWVfZHVyYXRpb25faW5fbnMg LyAxMDAwKTsKKwkJCWlmIChpbl9vdXRfdnJyLT5maXhlZC5mcmFtZV9jb3VudGVyID4KKwkJCQkJ RklYRURfUkVGUkVTSF9FWElUX0ZSQU1FX0NPVU5UKSB7CisJCQkJaW5fb3V0X3Zyci0+Zml4ZWQu ZnJhbWVfY291bnRlciA9IDA7CisJCQkJaW5fb3V0X3Zyci0+Zml4ZWQuZml4ZWRfYWN0aXZlID0g ZmFsc2U7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGxhc3RfcmVuZGVyX3RpbWVfaW5fdXMgPiBt YXhfcmVuZGVyX3RpbWVfaW5fdXMpIHsKKwkJLyogRW50ZXIgQmVsb3cgdGhlIFJhbmdlICovCisJ CWlmICghaW5fb3V0X3Zyci0+YnRyLmJ0cl9hY3RpdmUgJiYKKwkJCQlpbl9vdXRfdnJyLT5idHIu YnRyX2VuYWJsZWQpIHsKKwkJCWluX291dF92cnItPmJ0ci5idHJfYWN0aXZlID0gdHJ1ZTsKIAot CQkJLyogU2V0IGxlbmd0aCBvZiBpbnNlcnRlZCBmcmFtZXMgYXMgdl90b3RhbF9tYXgqLwotCQkJ dm1heCA9IGluc2VydGVkX2ZyYW1lX3ZfdG90YWw7Ci0JCQl2bWluID0gaW5zZXJ0ZWRfZnJhbWVf dl90b3RhbDsKKwkJLyogRW50ZXIgRml4ZWQgUmVmcmVzaCBtb2RlICovCisJCX0gZWxzZSBpZiAo IWluX291dF92cnItPmZpeGVkLmZpeGVkX2FjdGl2ZSAmJgorCQkJCSFpbl9vdXRfdnJyLT5idHIu YnRyX2VuYWJsZWQpIHsKKwkJCWluX291dF92cnItPmZpeGVkLmZyYW1lX2NvdW50ZXIrKzsKIAot CQkJLyogUHJvZ3JhbSBWX1RPVEFMICovCi0JCQlhZGp1c3Rfdm1pbl92bWF4KGNvcmVfZnJlZXN5 bmMsIHN0cmVhbXMsCi0JCQkJCQludW1fc3RyZWFtcywgaW5kZXgsCi0JCQkJCQl2bWluLCB2bWF4 KTsKKwkJCWlmIChpbl9vdXRfdnJyLT5maXhlZC5mcmFtZV9jb3VudGVyID4KKwkJCQkJRklYRURf UkVGUkVTSF9FTlRFUl9GUkFNRV9DT1VOVCkgeworCQkJCWluX291dF92cnItPmZpeGVkLmZyYW1l X2NvdW50ZXIgPSAwOworCQkJCWluX291dF92cnItPmZpeGVkLmZpeGVkX2FjdGl2ZSA9IHRydWU7 CisJCQl9CiAJCX0KKwl9CiAKLQkJaWYgKHN0YXRlLT5idHIuZnJhbWVfY291bnRlciA+IDApCi0J CQlzdGF0ZS0+YnRyLmZyYW1lX2NvdW50ZXItLTsKKwkvKiBCVFIgc2V0IHRvICJub3QgYWN0aXZl IiBzbyBkaXNlbmdhZ2UgKi8KKwlpZiAoIWluX291dF92cnItPmJ0ci5idHJfYWN0aXZlKSB7CisJ CWluX291dF92cnItPmJ0ci5idHJfYWN0aXZlID0gZmFsc2U7CisJCWluX291dF92cnItPmJ0ci5p bnNlcnRlZF9kdXJhdGlvbl9pbl91cyA9IDA7CisJCWluX291dF92cnItPmJ0ci5mcmFtZXNfdG9f aW5zZXJ0ID0gMDsKKwkJaW5fb3V0X3Zyci0+YnRyLmZyYW1lX2NvdW50ZXIgPSAwOwogCiAJCS8q IFJlc3RvcmUgRnJlZVN5bmMgKi8KLQkJaWYgKHN0YXRlLT5idHIuZnJhbWVfY291bnRlciA9PSAw KQotCQkJc2V0X2ZyZWVzeW5jX29uX3N0cmVhbXMoY29yZV9mcmVlc3luYywgc3RyZWFtcywgbnVt X3N0cmVhbXMpOwotCX0KLQotCS8qIElmIGluIGZ1bGxzY3JlZW4gZnJlZXN5bmMgbW9kZSBvciBp biB2aWRlbywgZG8gbm90IHByb2dyYW0KLQkgKiBzdGF0aWMgc2NyZWVuIHJhbXAgdmFsdWVzCi0J ICovCi0JaWYgKHN0YXRlLT5mdWxsc2NyZWVuID09IHRydWUgfHwgc3RhdGUtPnZpZGVvID09IHRy dWUpIHsKKwkJaW5fb3V0X3Zyci0+YWRqdXN0LnZfdG90YWxfbWluID0KKwkJCWNhbGNfdl90b3Rh bF9mcm9tX3JlZnJlc2goc3RyZWFtLAorCQkJCWluX291dF92cnItPm1heF9yZWZyZXNoX2luX3Vo eik7CisJCWluX291dF92cnItPmFkanVzdC52X3RvdGFsX21heCA9CisJCQljYWxjX3ZfdG90YWxf ZnJvbV9yZWZyZXNoKHN0cmVhbSwKKwkJCQlpbl9vdXRfdnJyLT5taW5fcmVmcmVzaF9pbl91aHop OworCS8qIEJUUiBzZXQgdG8gImFjdGl2ZSIgc28gZW5nYWdlICovCisJfSBlbHNlIHsKIAotCQlz dGF0ZS0+c3RhdGljX3JhbXAucmFtcF9pc19hY3RpdmUgPSBmYWxzZTsKKwkJLyogQ2FsY3VsYXRl IG51bWJlciBvZiBtaWRQb2ludCBmcmFtZXMgdGhhdCBjb3VsZCBmaXQgd2l0aGluCisJCSAqIHRo ZSByZW5kZXIgdGltZSBpbnRlcnZhbC0gdGFrZSBjZWlsIG9mIHRoaXMgdmFsdWUKKwkJICovCisJ CW1pZF9wb2ludF9mcmFtZXNfY2VpbCA9IChsYXN0X3JlbmRlcl90aW1lX2luX3VzICsKKwkJCQlp bl9vdXRfdnJyLT5idHIubWlkX3BvaW50X2luX3VzIC0gMSkgLworCQkJCQlpbl9vdXRfdnJyLT5i dHIubWlkX3BvaW50X2luX3VzOwogCi0JCXJldHVybjsKLQl9CisJCWlmIChtaWRfcG9pbnRfZnJh bWVzX2NlaWwgPiAwKSB7CisJCQlmcmFtZV90aW1lX2luX3VzID0gbGFzdF9yZW5kZXJfdGltZV9p bl91cyAvCisJCQkJbWlkX3BvaW50X2ZyYW1lc19jZWlsOworCQkJZGVsdGFfZnJvbV9taWRfcG9p bnRfaW5fdXNfMSA9CisJCQkJKGluX291dF92cnItPmJ0ci5taWRfcG9pbnRfaW5fdXMgPgorCQkJ CWZyYW1lX3RpbWVfaW5fdXMpID8KKwkJCQkoaW5fb3V0X3Zyci0+YnRyLm1pZF9wb2ludF9pbl91 cyAtIGZyYW1lX3RpbWVfaW5fdXMpIDoKKwkJCQkoZnJhbWVfdGltZV9pbl91cyAtIGluX291dF92 cnItPmJ0ci5taWRfcG9pbnRfaW5fdXMpOworCQl9CiAKLQkvKiBHcmFkdWFsIFN0YXRpYyBTY3Jl ZW4gUmFtcGluZyBMb2dpYyAqLworCQkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIG1pZFBvaW50IGZy YW1lcyB0aGF0IGNvdWxkIGZpdCB3aXRoaW4KKwkJICogdGhlIHJlbmRlciB0aW1lIGludGVydmFs LSB0YWtlIGZsb29yIG9mIHRoaXMgdmFsdWUKKwkJICovCisJCW1pZF9wb2ludF9mcmFtZXNfZmxv b3IgPSBsYXN0X3JlbmRlcl90aW1lX2luX3VzIC8KKwkJCQlpbl9vdXRfdnJyLT5idHIubWlkX3Bv aW50X2luX3VzOwogCi0JLyogRXhlY3V0ZSBpZiByYW1wIGlzIGFjdGl2ZSBhbmQgdXNlciBlbmFi bGVkIGZyZWVzeW5jIHN0YXRpYyBzY3JlZW4qLwotCWlmIChzdGF0ZS0+c3RhdGljX3JhbXAucmFt cF9pc19hY3RpdmUgJiYKLQkJY29yZV9mcmVlc3luYy0+bWFwW2luZGV4XS51c2VyX2VuYWJsZS5l bmFibGVfZm9yX3N0YXRpYykgeworCQlpZiAobWlkX3BvaW50X2ZyYW1lc19mbG9vciA+IDApIHsK IAotCQljYWxjX3ZfdG90YWxfZm9yX3N0YXRpY19yYW1wKGNvcmVfZnJlZXN5bmMsIHN0cmVhbXNb MF0sCi0JCQkJaW5kZXgsICZ2X3RvdGFsKTsKKwkJCWZyYW1lX3RpbWVfaW5fdXMgPSBsYXN0X3Jl bmRlcl90aW1lX2luX3VzIC8KKwkJCQltaWRfcG9pbnRfZnJhbWVzX2Zsb29yOworCQkJZGVsdGFf ZnJvbV9taWRfcG9pbnRfaW5fdXNfMiA9CisJCQkJKGluX291dF92cnItPmJ0ci5taWRfcG9pbnRf aW5fdXMgPgorCQkJCWZyYW1lX3RpbWVfaW5fdXMpID8KKwkJCQkoaW5fb3V0X3Zyci0+YnRyLm1p ZF9wb2ludF9pbl91cyAtIGZyYW1lX3RpbWVfaW5fdXMpIDoKKwkJCQkoZnJhbWVfdGltZV9pbl91 cyAtIGluX291dF92cnItPmJ0ci5taWRfcG9pbnRfaW5fdXMpOworCQl9CiAKLQkJLyogVXBkYXRl IHRoZSBmcmVlc3luYyBjb250ZXh0IGZvciB0aGUgc3RyZWFtICovCi0JCXVwZGF0ZV9zdHJlYW1f ZnJlZXN5bmNfY29udGV4dChjb3JlX2ZyZWVzeW5jLCBzdHJlYW1zWzBdKTsKKwkJLyogQ2hvb3Nl IG51bWJlciBvZiBmcmFtZXMgdG8gaW5zZXJ0IGJhc2VkIG9uIGhvdyBjbG9zZSBpdAorCQkgKiBj YW4gZ2V0IHRvIHRoZSBtaWQgcG9pbnQgb2YgdGhlIHZhcmlhYmxlIHJhbmdlLgorCQkgKi8KKwkJ aWYgKGRlbHRhX2Zyb21fbWlkX3BvaW50X2luX3VzXzEgPCBkZWx0YV9mcm9tX21pZF9wb2ludF9p bl91c18yKQorCQkJZnJhbWVzX3RvX2luc2VydCA9IG1pZF9wb2ludF9mcmFtZXNfY2VpbDsKKwkJ ZWxzZQorCQkJZnJhbWVzX3RvX2luc2VydCA9IG1pZF9wb2ludF9mcmFtZXNfZmxvb3I7CiAKLQkJ LyogUHJvZ3JhbSBzdGF0aWMgc2NyZWVuIHJhbXAgdmFsdWVzICovCi0JCWFkanVzdF92bWluX3Zt YXgoY29yZV9mcmVlc3luYywgc3RyZWFtcywKLQkJCQkJbnVtX3N0cmVhbXMsIGluZGV4LAotCQkJ CQl2X3RvdGFsLAotCQkJCQl2X3RvdGFsKTsKKwkJLyogRWl0aGVyIHdlJ3ZlIGNhbGN1bGF0ZWQg dGhlIG51bWJlciBvZiBmcmFtZXMgdG8gaW5zZXJ0LAorCQkgKiBvciB3ZSBuZWVkIHRvIGluc2Vy dCBtaW4gZHVyYXRpb24gZnJhbWVzCisJCSAqLworCQlpZiAoZnJhbWVzX3RvX2luc2VydCA+IDAp CisJCQlpbnNlcnRlZF9mcmFtZV9kdXJhdGlvbl9pbl91cyA9IGxhc3RfcmVuZGVyX3RpbWVfaW5f dXMgLworCQkJCQkJCWZyYW1lc190b19pbnNlcnQ7CiAKLQkJdHJpZ2dlcnMub3ZlcmxheV91cGRh dGUgPSB0cnVlOwotCQl0cmlnZ2Vycy5zdXJmYWNlX3VwZGF0ZSA9IHRydWU7CisJCWlmIChpbnNl cnRlZF9mcmFtZV9kdXJhdGlvbl9pbl91cyA8CisJCQkoMTAwMDAwMCAvIGluX291dF92cnItPm1h eF9yZWZyZXNoX2luX3VoeikpCisJCQlpbnNlcnRlZF9mcmFtZV9kdXJhdGlvbl9pbl91cyA9CisJ CQkJKDEwMDAwMDAgLyBpbl9vdXRfdnJyLT5tYXhfcmVmcmVzaF9pbl91aHopOwogCi0JCWRjX3N0 cmVhbV9zZXRfc3RhdGljX3NjcmVlbl9ldmVudHMoY29yZV9mcmVlc3luYy0+ZGMsIHN0cmVhbXMs Ci0JCQkJCQkgICBudW1fc3RyZWFtcywgJnRyaWdnZXJzKTsKKwkJLyogQ2FjaGUgdGhlIGNhbGN1 bGF0ZWQgdmFyaWFibGVzICovCisJCWluX291dF92cnItPmJ0ci5pbnNlcnRlZF9kdXJhdGlvbl9p bl91cyA9CisJCQlpbnNlcnRlZF9mcmFtZV9kdXJhdGlvbl9pbl91czsKKwkJaW5fb3V0X3Zyci0+ YnRyLmZyYW1lc190b19pbnNlcnQgPSBmcmFtZXNfdG9faW5zZXJ0OworCQlpbl9vdXRfdnJyLT5i dHIuZnJhbWVfY291bnRlciA9IGZyYW1lc190b19pbnNlcnQ7CisKKwkJaW5fb3V0X3Zyci0+YWRq dXN0LnZfdG90YWxfbWluID0KKwkJCWNhbGNfdl90b3RhbF9mcm9tX2R1cmF0aW9uKHN0cmVhbSwg aW5fb3V0X3ZyciwKKwkJCQlpbl9vdXRfdnJyLT5idHIuaW5zZXJ0ZWRfZHVyYXRpb25faW5fdXMp OworCQlpbl9vdXRfdnJyLT5hZGp1c3Qudl90b3RhbF9tYXggPQorCQkJCWluX291dF92cnItPmFk anVzdC52X3RvdGFsX21pbjsKIAl9CiB9CiAKLXZvaWQgbW9kX2ZyZWVzeW5jX3VwZGF0ZV9zdGF0 ZShzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMsCi0JCXN0cnVjdCBkY19zdHJlYW1f c3RhdGUgKipzdHJlYW1zLCBpbnQgbnVtX3N0cmVhbXMsCi0JCXN0cnVjdCBtb2RfZnJlZXN5bmNf cGFyYW1zICpmcmVlc3luY19wYXJhbXMpCitzdGF0aWMgdm9pZCBhcHBseV9maXhlZF9yZWZyZXNo KHN0cnVjdCBjb3JlX2ZyZWVzeW5jICpjb3JlX2ZyZWVzeW5jLAorCQljb25zdCBzdHJ1Y3QgZGNf c3RyZWFtX3N0YXRlICpzdHJlYW0sCisJCXVuc2lnbmVkIGludCBsYXN0X3JlbmRlcl90aW1lX2lu X3VzLAorCQlzdHJ1Y3QgbW9kX3Zycl9wYXJhbXMgKmluX291dF92cnIpCiB7Ci0JYm9vbCBmcmVl c3luY19wcm9ncmFtX3JlcXVpcmVkID0gZmFsc2U7Ci0JdW5zaWduZWQgaW50IHN0cmVhbV9pbmRl eDsKLQlzdHJ1Y3QgZnJlZXN5bmNfc3RhdGUgKnN0YXRlOwotCXN0cnVjdCBjb3JlX2ZyZWVzeW5j ICpjb3JlX2ZyZWVzeW5jID0gTlVMTDsKLQlzdHJ1Y3QgZGNfc3RhdGljX3NjcmVlbl9ldmVudHMg dHJpZ2dlcnMgPSB7MH07CisJYm9vbCB1cGRhdGUgPSBmYWxzZTsKKwl1bnNpZ25lZCBpbnQgbWF4 X3JlbmRlcl90aW1lX2luX3VzID0gaW5fb3V0X3Zyci0+bWF4X2R1cmF0aW9uX2luX3VzOwogCi0J aWYgKG1vZF9mcmVlc3luYyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQljb3JlX2ZyZWVzeW5jID0g TU9EX0ZSRUVTWU5DX1RPX0NPUkUobW9kX2ZyZWVzeW5jKTsKLQotCWlmIChjb3JlX2ZyZWVzeW5j LT5udW1fZW50aXRpZXMgPT0gMCkKLQkJcmV0dXJuOworCWlmIChsYXN0X3JlbmRlcl90aW1lX2lu X3VzICsgQlRSX0VYSVRfTUFSR0lOIDwgbWF4X3JlbmRlcl90aW1lX2luX3VzKSB7CisJCS8qIEV4 aXQgRml4ZWQgUmVmcmVzaCBtb2RlICovCisJCWlmIChpbl9vdXRfdnJyLT5maXhlZC5maXhlZF9h Y3RpdmUpIHsKKwkJCWluX291dF92cnItPmZpeGVkLmZyYW1lX2NvdW50ZXIrKzsKIAotCWZvcihz dHJlYW1faW5kZXggPSAwOyBzdHJlYW1faW5kZXggPCBudW1fc3RyZWFtczsgc3RyZWFtX2luZGV4 KyspIHsKLQotCQl1bnNpZ25lZCBpbnQgbWFwX2luZGV4ID0gbWFwX2luZGV4X2Zyb21fc3RyZWFt KGNvcmVfZnJlZXN5bmMsCi0JCQkJc3RyZWFtc1tzdHJlYW1faW5kZXhdKTsKLQotCQlib29sIGlz X2VtYmVkZGVkID0gZGNfaXNfZW1iZWRkZWRfc2lnbmFsKAotCQkJCXN0cmVhbXNbc3RyZWFtX2lu ZGV4XS0+c2luay0+c2lua19zaWduYWwpOwotCi0JCXN0cnVjdCBmcmVlc3luY19yZWdpc3RyeV9v cHRpb25zICpvcHRzID0gJmNvcmVfZnJlZXN5bmMtPm9wdHM7Ci0KLQkJc3RhdGUgPSAmY29yZV9m cmVlc3luYy0+bWFwW21hcF9pbmRleF0uc3RhdGU7Ci0KLQkJc3dpdGNoIChmcmVlc3luY19wYXJh bXMtPnN0YXRlKXsKLQkJY2FzZSBGUkVFU1lOQ19TVEFURV9GVUxMU0NSRUVOOgotCQkJc3RhdGUt PmZ1bGxzY3JlZW4gPSBmcmVlc3luY19wYXJhbXMtPmVuYWJsZTsKLQkJCWZyZWVzeW5jX3Byb2dy YW1fcmVxdWlyZWQgPSB0cnVlOwotCQkJc3RhdGUtPndpbmRvd2VkX2Z1bGxzY3JlZW4gPQotCQkJ CQlmcmVlc3luY19wYXJhbXMtPndpbmRvd2VkX2Z1bGxzY3JlZW47Ci0JCQlicmVhazsKLQkJY2Fz ZSBGUkVFU1lOQ19TVEFURV9TVEFUSUNfU0NSRUVOOgotCQkJLyogU3RhdGljIHNjcmVlbiByYW1w IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGJ1dCBjYW4KLQkJCSAqIGJlIGVuYWJsZWQgdGhyb3Vn aCByZWdrZXkuCi0JCQkgKi8KLQkJCWlmICgoaXNfZW1iZWRkZWQgJiYgb3B0cy0+ZHJyX2ludGVy bmFsX3N1cHBvcnRlZCkgfHwKLQkJCQkoIWlzX2VtYmVkZGVkICYmIG9wdHMtPmRycl9leHRlcm5h bF9zdXBwb3J0ZWQpKQotCi0JCQkJaWYgKHN0YXRlLT5zdGF0aWNfc2NyZWVuICE9Ci0JCQkJCQlm cmVlc3luY19wYXJhbXMtPmVuYWJsZSkgewotCi0JCQkJCS8qIENoYW5nZSB0aGUgc3RhdGUgZmxh ZyAqLwotCQkJCQlzdGF0ZS0+c3RhdGljX3NjcmVlbiA9Ci0JCQkJCQkJZnJlZXN5bmNfcGFyYW1z LT5lbmFibGU7Ci0KLQkJCQkJLyogVXBkYXRlIHN0YXRpYyBzY3JlZW4gcmFtcCAqLwotCQkJCQlz ZXRfc3RhdGljX3JhbXBfdmFyaWFibGVzKGNvcmVfZnJlZXN5bmMsCi0JCQkJCQltYXBfaW5kZXgs Ci0JCQkJCQlmcmVlc3luY19wYXJhbXMtPmVuYWJsZSk7Ci0JCQkJfQotCQkJLyogV2UgcHJvZ3Jh bSB0aGUgcmFtcCBzdGFydGluZyBuZXh0IFZVcGRhdGUgKi8KLQkJCWJyZWFrOwotCQljYXNlIEZS RUVTWU5DX1NUQVRFX1ZJREVPOgotCQkJLyogQ2hhbmdlIGNvcmUgdmFyaWFibGVzIG9ubHkgaWYg dGhlcmUgaXMgYSBjaGFuZ2UqLwotCQkJaWYoZnJlZXN5bmNfcGFyYW1zLT51cGRhdGVfZHVyYXRp b25faW5fbnMgIT0KLQkJCQlzdGF0ZS0+dGltZS51cGRhdGVfZHVyYXRpb25faW5fbnMpIHsKLQot CQkJCXN0YXRlLT52aWRlbyA9IGZyZWVzeW5jX3BhcmFtcy0+ZW5hYmxlOwotCQkJCXN0YXRlLT50 aW1lLnVwZGF0ZV9kdXJhdGlvbl9pbl9ucyA9Ci0JCQkJCWZyZWVzeW5jX3BhcmFtcy0+dXBkYXRl X2R1cmF0aW9uX2luX25zOwotCi0JCQkJZnJlZXN5bmNfcHJvZ3JhbV9yZXF1aXJlZCA9IHRydWU7 CisJCQlpZiAoaW5fb3V0X3Zyci0+Zml4ZWQuZnJhbWVfY291bnRlciA+CisJCQkJCUZJWEVEX1JF RlJFU0hfRVhJVF9GUkFNRV9DT1VOVCkgeworCQkJCWluX291dF92cnItPmZpeGVkLmZyYW1lX2Nv dW50ZXIgPSAwOworCQkJCWluX291dF92cnItPmZpeGVkLmZpeGVkX2FjdGl2ZSA9IGZhbHNlOwor CQkJCWluX291dF92cnItPmZpeGVkLnRhcmdldF9yZWZyZXNoX2luX3VoeiA9IDA7CisJCQkJdXBk YXRlID0gdHJ1ZTsKIAkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEZSRUVTWU5DX1NUQVRFX05PTkU6 Ci0JCQkvKiBoYW5kbGUgaGVyZSB0byBhdm9pZCB3YXJuaW5nICovCi0JCQlicmVhazsKIAkJfQot CX0KLQotCS8qIFVwZGF0ZSBtYXNrICovCi0JdHJpZ2dlcnMub3ZlcmxheV91cGRhdGUgPSB0cnVl OwotCXRyaWdnZXJzLnN1cmZhY2VfdXBkYXRlID0gdHJ1ZTsKLQotCWRjX3N0cmVhbV9zZXRfc3Rh dGljX3NjcmVlbl9ldmVudHMoY29yZV9mcmVlc3luYy0+ZGMsIHN0cmVhbXMsCi0JCQkJCSAgIG51 bV9zdHJlYW1zLCAmdHJpZ2dlcnMpOwotCi0JaWYgKGZyZWVzeW5jX3Byb2dyYW1fcmVxdWlyZWQp Ci0JCS8qIFByb2dyYW0gZnJlZXN5bmMgYWNjb3JkaW5nIHRvIGN1cnJlbnQgc3RhdGUqLwotCQlz ZXRfZnJlZXN5bmNfb25fc3RyZWFtcyhjb3JlX2ZyZWVzeW5jLCBzdHJlYW1zLCBudW1fc3RyZWFt cyk7Ci19Ci0KLQotYm9vbCBtb2RfZnJlZXN5bmNfZ2V0X3N0YXRlKHN0cnVjdCBtb2RfZnJlZXN5 bmMgKm1vZF9mcmVlc3luYywKLQkJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAotCQlz dHJ1Y3QgbW9kX2ZyZWVzeW5jX3BhcmFtcyAqZnJlZXN5bmNfcGFyYW1zKQotewotCXVuc2lnbmVk IGludCBpbmRleCA9IDA7Ci0Jc3RydWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMgPSBO VUxMOwotCi0JaWYgKG1vZF9mcmVlc3luYyA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJfSBl bHNlIGlmIChsYXN0X3JlbmRlcl90aW1lX2luX3VzID4gbWF4X3JlbmRlcl90aW1lX2luX3VzKSB7 CisJCS8qIEVudGVyIEZpeGVkIFJlZnJlc2ggbW9kZSAqLworCQlpZiAoIWluX291dF92cnItPmZp eGVkLmZpeGVkX2FjdGl2ZSkgeworCQkJaW5fb3V0X3Zyci0+Zml4ZWQuZnJhbWVfY291bnRlcisr OwogCi0JY29yZV9mcmVlc3luYyA9IE1PRF9GUkVFU1lOQ19UT19DT1JFKG1vZF9mcmVlc3luYyk7 Ci0JaW5kZXggPSBtYXBfaW5kZXhfZnJvbV9zdHJlYW0oY29yZV9mcmVlc3luYywgc3RyZWFtKTsK LQotCWlmIChjb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLnN0YXRlLmZ1bGxzY3JlZW4pIHsKLQkJ ZnJlZXN5bmNfcGFyYW1zLT5zdGF0ZSA9IEZSRUVTWU5DX1NUQVRFX0ZVTExTQ1JFRU47Ci0JCWZy ZWVzeW5jX3BhcmFtcy0+ZW5hYmxlID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKGNvcmVfZnJlZXN5bmMt Pm1hcFtpbmRleF0uc3RhdGUuc3RhdGljX3NjcmVlbikgewotCQlmcmVlc3luY19wYXJhbXMtPnN0 YXRlID0gRlJFRVNZTkNfU1RBVEVfU1RBVElDX1NDUkVFTjsKLQkJZnJlZXN5bmNfcGFyYW1zLT5l bmFibGUgPSB0cnVlOwotCX0gZWxzZSBpZiAoY29yZV9mcmVlc3luYy0+bWFwW2luZGV4XS5zdGF0 ZS52aWRlbykgewotCQlmcmVlc3luY19wYXJhbXMtPnN0YXRlID0gRlJFRVNZTkNfU1RBVEVfVklE RU87Ci0JCWZyZWVzeW5jX3BhcmFtcy0+ZW5hYmxlID0gdHJ1ZTsKLQl9IGVsc2UgewotCQlmcmVl c3luY19wYXJhbXMtPnN0YXRlID0gRlJFRVNZTkNfU1RBVEVfTk9ORTsKLQkJZnJlZXN5bmNfcGFy YW1zLT5lbmFibGUgPSBmYWxzZTsKKwkJCWlmIChpbl9vdXRfdnJyLT5maXhlZC5mcmFtZV9jb3Vu dGVyID4KKwkJCQkJRklYRURfUkVGUkVTSF9FTlRFUl9GUkFNRV9DT1VOVCkgeworCQkJCWluX291 dF92cnItPmZpeGVkLmZyYW1lX2NvdW50ZXIgPSAwOworCQkJCWluX291dF92cnItPmZpeGVkLmZp eGVkX2FjdGl2ZSA9IHRydWU7CisJCQkJaW5fb3V0X3Zyci0+Zml4ZWQudGFyZ2V0X3JlZnJlc2hf aW5fdWh6ID0KKwkJCQkJCWluX291dF92cnItPm1heF9yZWZyZXNoX2luX3VoejsKKwkJCQl1cGRh dGUgPSB0cnVlOworCQkJfQorCQl9CiAJfQogCi0JZnJlZXN5bmNfcGFyYW1zLT51cGRhdGVfZHVy YXRpb25faW5fbnMgPQotCQljb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLnN0YXRlLnRpbWUudXBk YXRlX2R1cmF0aW9uX2luX25zOwotCi0JZnJlZXN5bmNfcGFyYW1zLT53aW5kb3dlZF9mdWxsc2Ny ZWVuID0KLQkJCWNvcmVfZnJlZXN5bmMtPm1hcFtpbmRleF0uc3RhdGUud2luZG93ZWRfZnVsbHNj cmVlbjsKLQotCXJldHVybiB0cnVlOwotfQotCi1ib29sIG1vZF9mcmVlc3luY19zZXRfdXNlcl9l bmFibGUoc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAotCQlzdHJ1Y3QgZGNfc3Ry ZWFtX3N0YXRlICoqc3RyZWFtcywgaW50IG51bV9zdHJlYW1zLAotCQlzdHJ1Y3QgbW9kX2ZyZWVz eW5jX3VzZXJfZW5hYmxlICp1c2VyX2VuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgc3RyZWFtX2lu ZGV4LCBtYXBfaW5kZXg7Ci0JaW50IHBlcnNpc3RlbnRfZGF0YSA9IDA7Ci0Jc3RydWN0IHBlcnNp c3RlbnRfZGF0YV9mbGFnIGZsYWc7Ci0Jc3RydWN0IGRjICAqZGMgPSBOVUxMOwotCXN0cnVjdCBj b3JlX2ZyZWVzeW5jICpjb3JlX2ZyZWVzeW5jID0gTlVMTDsKLQotCWlmIChtb2RfZnJlZXN5bmMg PT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JY29yZV9mcmVlc3luYyA9IE1PRF9GUkVFU1lO Q19UT19DT1JFKG1vZF9mcmVlc3luYyk7Ci0JZGMgPSBjb3JlX2ZyZWVzeW5jLT5kYzsKLQotCWZs YWcuc2F2ZV9wZXJfZWRpZCA9IHRydWU7Ci0JZmxhZy5zYXZlX3Blcl9saW5rID0gZmFsc2U7Ci0K LQlmb3Ioc3RyZWFtX2luZGV4ID0gMDsgc3RyZWFtX2luZGV4IDwgbnVtX3N0cmVhbXM7Ci0JCQlz dHJlYW1faW5kZXgrKyl7Ci0KLQkJbWFwX2luZGV4ID0gbWFwX2luZGV4X2Zyb21fc3RyZWFtKGNv cmVfZnJlZXN5bmMsCi0JCQkJc3RyZWFtc1tzdHJlYW1faW5kZXhdKTsKLQotCQljb3JlX2ZyZWVz eW5jLT5tYXBbbWFwX2luZGV4XS51c2VyX2VuYWJsZSA9ICp1c2VyX2VuYWJsZTsKLQotCQkvKiBX cml0ZSBwZXJzaXN0ZW50IGRhdGEgaW4gcmVnaXN0cnkqLwotCQlpZiAoY29yZV9mcmVlc3luYy0+ bWFwW21hcF9pbmRleF0udXNlcl9lbmFibGUuCi0JCQkJZW5hYmxlX2Zvcl9nYW1pbmcpCi0JCQlw ZXJzaXN0ZW50X2RhdGEgPSBwZXJzaXN0ZW50X2RhdGEgfCAxOwotCQlpZiAoY29yZV9mcmVlc3lu Yy0+bWFwW21hcF9pbmRleF0udXNlcl9lbmFibGUuCi0JCQkJZW5hYmxlX2Zvcl9zdGF0aWMpCi0J CQlwZXJzaXN0ZW50X2RhdGEgPSBwZXJzaXN0ZW50X2RhdGEgfCAyOwotCQlpZiAoY29yZV9mcmVl c3luYy0+bWFwW21hcF9pbmRleF0udXNlcl9lbmFibGUuCi0JCQkJZW5hYmxlX2Zvcl92aWRlbykK LQkJCXBlcnNpc3RlbnRfZGF0YSA9IHBlcnNpc3RlbnRfZGF0YSB8IDQ7Ci0KLQkJZG1fd3JpdGVf cGVyc2lzdGVudF9kYXRhKGRjLT5jdHgsCi0JCQkJCXN0cmVhbXNbc3RyZWFtX2luZGV4XS0+c2lu aywKLQkJCQkJRlJFRVNZTkNfUkVHSVNUUllfTkFNRSwKLQkJCQkJInVzZXJlbmFibGUiLAotCQkJ CQkmcGVyc2lzdGVudF9kYXRhLAotCQkJCQlzaXplb2YoaW50KSwKLQkJCQkJJmZsYWcpOworCWlm ICh1cGRhdGUpIHsKKwkJaWYgKGluX291dF92cnItPmZpeGVkLmZpeGVkX2FjdGl2ZSkgeworCQkJ aW5fb3V0X3Zyci0+YWRqdXN0LnZfdG90YWxfbWluID0KKwkJCQljYWxjX3ZfdG90YWxfZnJvbV9y ZWZyZXNoKAorCQkJCXN0cmVhbSwgaW5fb3V0X3Zyci0+bWF4X3JlZnJlc2hfaW5fdWh6KTsKKwkJ CWluX291dF92cnItPmFkanVzdC52X3RvdGFsX21heCA9CisJCQkJCWluX291dF92cnItPmFkanVz dC52X3RvdGFsX21pbjsKKwkJfSBlbHNlIHsKKwkJCWluX291dF92cnItPmFkanVzdC52X3RvdGFs X21pbiA9CisJCQkJY2FsY192X3RvdGFsX2Zyb21fcmVmcmVzaCgKKwkJCQlzdHJlYW0sIGluX291 dF92cnItPm1heF9yZWZyZXNoX2luX3Voeik7CisJCQlpbl9vdXRfdnJyLT5hZGp1c3Qudl90b3Rh bF9tYXggPQorCQkJCWluX291dF92cnItPmFkanVzdC52X3RvdGFsX21pbjsKKwkJfQogCX0KLQot CXNldF9mcmVlc3luY19vbl9zdHJlYW1zKGNvcmVfZnJlZXN5bmMsIHN0cmVhbXMsIG51bV9zdHJl YW1zKTsKLQotCXJldHVybiB0cnVlOwogfQogCi1ib29sIG1vZF9mcmVlc3luY19nZXRfdXNlcl9l bmFibGUoc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAotCQlzdHJ1Y3QgZGNfc3Ry ZWFtX3N0YXRlICpzdHJlYW0sCi0JCXN0cnVjdCBtb2RfZnJlZXN5bmNfdXNlcl9lbmFibGUgKnVz ZXJfZW5hYmxlKQotewotCXVuc2lnbmVkIGludCBpbmRleCA9IDA7Ci0Jc3RydWN0IGNvcmVfZnJl ZXN5bmMgKmNvcmVfZnJlZXN5bmMgPSBOVUxMOwotCi0JaWYgKG1vZF9mcmVlc3luYyA9PSBOVUxM KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQljb3JlX2ZyZWVzeW5jID0gTU9EX0ZSRUVTWU5DX1RPX0NP UkUobW9kX2ZyZWVzeW5jKTsKLQlpbmRleCA9IG1hcF9pbmRleF9mcm9tX3N0cmVhbShjb3JlX2Zy ZWVzeW5jLCBzdHJlYW0pOwotCi0JKnVzZXJfZW5hYmxlID0gY29yZV9mcmVlc3luYy0+bWFwW2lu ZGV4XS51c2VyX2VuYWJsZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1ib29sIG1vZF9mcmVlc3lu Y19nZXRfc3RhdGljX3JhbXBfYWN0aXZlKHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3lu YywKLQkJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAotCQlib29sICppc19yYW1wX2Fj dGl2ZSkKLXsKLQl1bnNpZ25lZCBpbnQgaW5kZXggPSAwOwotCXN0cnVjdCBjb3JlX2ZyZWVzeW5j ICpjb3JlX2ZyZWVzeW5jID0gTlVMTDsKLQotCWlmIChtb2RfZnJlZXN5bmMgPT0gTlVMTCkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JY29yZV9mcmVlc3luYyA9IE1PRF9GUkVFU1lOQ19UT19DT1JFKG1v ZF9mcmVlc3luYyk7Ci0JaW5kZXggPSBtYXBfaW5kZXhfZnJvbV9zdHJlYW0oY29yZV9mcmVlc3lu Yywgc3RyZWFtKTsKLQotCSppc19yYW1wX2FjdGl2ZSA9Ci0JCWNvcmVfZnJlZXN5bmMtPm1hcFtp bmRleF0uc3RhdGUuc3RhdGljX3JhbXAucmFtcF9pc19hY3RpdmU7Ci0KLQlyZXR1cm4gdHJ1ZTsK LX0KLQotYm9vbCBtb2RfZnJlZXN5bmNfb3ZlcnJpZGVfbWluX21heChzdHJ1Y3QgbW9kX2ZyZWVz eW5jICptb2RfZnJlZXN5bmMsCi0JCXN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbXMsCi0J CXVuc2lnbmVkIGludCBtaW5fcmVmcmVzaCwKLQkJdW5zaWduZWQgaW50IG1heF9yZWZyZXNoLAot CQlzdHJ1Y3QgbW9kX2ZyZWVzeW5jX2NhcHMgKmNhcHMpCitzdGF0aWMgYm9vbCB2cnJfc2V0dGlu Z3NfcmVxdWlyZV91cGRhdGUoc3RydWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMsCisJ CXN0cnVjdCBtb2RfZnJlZXN5bmNfY29uZmlnICppbl9jb25maWcsCisJCXVuc2lnbmVkIGludCBt aW5fcmVmcmVzaF9pbl91aHosCisJCXVuc2lnbmVkIGludCBtYXhfcmVmcmVzaF9pbl91aHosCisJ CXN0cnVjdCBtb2RfdnJyX3BhcmFtcyAqaW5fdnJyKQogewotCXVuc2lnbmVkIGludCBpbmRleCA9 IDA7Ci0Jc3RydWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmM7Ci0Jc3RydWN0IGZyZWVz eW5jX3N0YXRlICpzdGF0ZTsKLQotCWlmIChtb2RfZnJlZXN5bmMgPT0gTlVMTCkKLQkJcmV0dXJu IGZhbHNlOwotCi0JY29yZV9mcmVlc3luYyA9IE1PRF9GUkVFU1lOQ19UT19DT1JFKG1vZF9mcmVl c3luYyk7Ci0JaW5kZXggPSBtYXBfaW5kZXhfZnJvbV9zdHJlYW0oY29yZV9mcmVlc3luYywgc3Ry ZWFtcyk7Ci0Jc3RhdGUgPSAmY29yZV9mcmVlc3luYy0+bWFwW2luZGV4XS5zdGF0ZTsKLQotCWlm IChtYXhfcmVmcmVzaCA9PSAwKQotCQltYXhfcmVmcmVzaCA9IHN0YXRlLT5ub21pbmFsX3JlZnJl c2hfcmF0ZV9pbl9taWNyb19oejsKLQotCWlmIChtaW5fcmVmcmVzaCA9PSAwKSB7Ci0JCS8qIFJl c3RvcmUgZGVmYXVsdHMgKi8KLQkJY2FsY19mcmVlc3luY19yYW5nZShjb3JlX2ZyZWVzeW5jLCBz dHJlYW1zLCBzdGF0ZSwKLQkJCWNvcmVfZnJlZXN5bmMtPm1hcFtpbmRleF0uY2Fwcy0+Ci0JCQlt aW5fcmVmcmVzaF9pbl9taWNyb19oeiwKLQkJCXN0YXRlLT5ub21pbmFsX3JlZnJlc2hfcmF0ZV9p bl9taWNyb19oeik7Ci0JfSBlbHNlIHsKLQkJY2FsY19mcmVlc3luY19yYW5nZShjb3JlX2ZyZWVz eW5jLCBzdHJlYW1zLAotCQkJCXN0YXRlLAotCQkJCW1pbl9yZWZyZXNoLAotCQkJCW1heF9yZWZy ZXNoKTsKLQotCQkvKiBQcm9ncmFtIHZ0b3RhbCBtaW4vbWF4ICovCi0JCWFkanVzdF92bWluX3Zt YXgoY29yZV9mcmVlc3luYywgJnN0cmVhbXMsIDEsIGluZGV4LAotCQkJCXN0YXRlLT5mcmVlc3lu Y19yYW5nZS52bWluLAotCQkJCXN0YXRlLT5mcmVlc3luY19yYW5nZS52bWF4KTsKLQl9Ci0KLQlp ZiAobWluX3JlZnJlc2ggIT0gMCAmJgotCQkJZGNfaXNfZW1iZWRkZWRfc2lnbmFsKHN0cmVhbXMt PnNpbmstPnNpbmtfc2lnbmFsKSAmJgotCQkJKG1heF9yZWZyZXNoIC0gbWluX3JlZnJlc2ggPj0g MTAwMDAwMDApKSB7Ci0JCWNhcHMtPnN1cHBvcnRlZCA9IHRydWU7Ci0JCWNhcHMtPm1pbl9yZWZy ZXNoX2luX21pY3JvX2h6ID0gbWluX3JlZnJlc2g7Ci0JCWNhcHMtPm1heF9yZWZyZXNoX2luX21p Y3JvX2h6ID0gbWF4X3JlZnJlc2g7CisJaWYgKGluX3Zyci0+c3RhdGUgIT0gaW5fY29uZmlnLT5z dGF0ZSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgaWYgKGluX3Zyci0+c3RhdGUgPT0gVlJS X1NUQVRFX0FDVElWRV9GSVhFRCAmJgorCQkJaW5fdnJyLT5maXhlZC50YXJnZXRfcmVmcmVzaF9p bl91aHogIT0KKwkJCQkJaW5fY29uZmlnLT5taW5fcmVmcmVzaF9pbl91aHopIHsKKwkJcmV0dXJu IHRydWU7CisJfSBlbHNlIGlmIChpbl92cnItPm1pbl9yZWZyZXNoX2luX3VoeiAhPSBtaW5fcmVm cmVzaF9pbl91aHopIHsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlIGlmIChpbl92cnItPm1heF9y ZWZyZXNoX2luX3VoeiAhPSBtYXhfcmVmcmVzaF9pbl91aHopIHsKKwkJcmV0dXJuIHRydWU7CiAJ fQogCi0JLyogVXBkYXRlIHRoZSBzdHJlYW0gKi8KLQl1cGRhdGVfc3RyZWFtKGNvcmVfZnJlZXN5 bmMsIHN0cmVhbXMpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgbW9kX2ZyZWVzeW5jX2dl dF9taW5fbWF4KHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3luYywKLQkJc3RydWN0IGRj X3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAotCQl1bnNpZ25lZCBpbnQgKm1pbl9yZWZyZXNoLAotCQl1 bnNpZ25lZCBpbnQgKm1heF9yZWZyZXNoKQotewotCXVuc2lnbmVkIGludCBpbmRleCA9IDA7Ci0J c3RydWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMgPSBOVUxMOwotCi0JaWYgKG1vZF9m cmVlc3luYyA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQljb3JlX2ZyZWVzeW5jID0gTU9E X0ZSRUVTWU5DX1RPX0NPUkUobW9kX2ZyZWVzeW5jKTsKLQlpbmRleCA9IG1hcF9pbmRleF9mcm9t X3N0cmVhbShjb3JlX2ZyZWVzeW5jLCBzdHJlYW0pOwotCi0JKm1pbl9yZWZyZXNoID0KLQkJY29y ZV9mcmVlc3luYy0+bWFwW2luZGV4XS5zdGF0ZS5mcmVlc3luY19yYW5nZS5taW5fcmVmcmVzaDsK LQkqbWF4X3JlZnJlc2ggPQotCQljb3JlX2ZyZWVzeW5jLT5tYXBbaW5kZXhdLnN0YXRlLmZyZWVz eW5jX3JhbmdlLm1heF9yZWZyZXNoOwotCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOwog fQogCiBib29sIG1vZF9mcmVlc3luY19nZXRfdm1pbl92bWF4KHN0cnVjdCBtb2RfZnJlZXN5bmMg Km1vZF9mcmVlc3luYywKLQkJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAorCQljb25z dCBzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0sCiAJCXVuc2lnbmVkIGludCAqdm1pbiwK IAkJdW5zaWduZWQgaW50ICp2bWF4KQogewotCXVuc2lnbmVkIGludCBpbmRleCA9IDA7Ci0Jc3Ry dWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMgPSBOVUxMOwotCi0JaWYgKG1vZF9mcmVl c3luYyA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQljb3JlX2ZyZWVzeW5jID0gTU9EX0ZS RUVTWU5DX1RPX0NPUkUobW9kX2ZyZWVzeW5jKTsKLQlpbmRleCA9IG1hcF9pbmRleF9mcm9tX3N0 cmVhbShjb3JlX2ZyZWVzeW5jLCBzdHJlYW0pOwotCi0JKnZtaW4gPQotCQljb3JlX2ZyZWVzeW5j LT5tYXBbaW5kZXhdLnN0YXRlLmZyZWVzeW5jX3JhbmdlLnZtaW47Ci0JKnZtYXggPQotCQljb3Jl X2ZyZWVzeW5jLT5tYXBbaW5kZXhdLnN0YXRlLmZyZWVzeW5jX3JhbmdlLnZtYXg7CisJKnZtaW4g PSBzdHJlYW0tPmFkanVzdC52X3RvdGFsX21pbjsKKwkqdm1heCA9IHN0cmVhbS0+YWRqdXN0LnZf dG90YWxfbWF4OwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMTg4LDcgKzQ3MSw2IEBAIGJvb2wg bW9kX2ZyZWVzeW5jX2dldF92X3Bvc2l0aW9uKHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVl c3luYywKIAkJdW5zaWduZWQgaW50ICpub21fdl9wb3MsCiAJCXVuc2lnbmVkIGludCAqdl9wb3Mp CiB7Ci0JdW5zaWduZWQgaW50IGluZGV4ID0gMDsKIAlzdHJ1Y3QgY29yZV9mcmVlc3luYyAqY29y ZV9mcmVlc3luYyA9IE5VTEw7CiAJc3RydWN0IGNydGNfcG9zaXRpb24gcG9zaXRpb247CiAKQEAg LTExOTYsNyArNDc4LDYgQEAgYm9vbCBtb2RfZnJlZXN5bmNfZ2V0X3ZfcG9zaXRpb24oc3RydWN0 IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAogCQlyZXR1cm4gZmFsc2U7CiAKIAljb3JlX2Zy ZWVzeW5jID0gTU9EX0ZSRUVTWU5DX1RPX0NPUkUobW9kX2ZyZWVzeW5jKTsKLQlpbmRleCA9IG1h cF9pbmRleF9mcm9tX3N0cmVhbShjb3JlX2ZyZWVzeW5jLCBzdHJlYW0pOwogCiAJaWYgKGRjX3N0 cmVhbV9nZXRfY3J0Y19wb3NpdGlvbihjb3JlX2ZyZWVzeW5jLT5kYywgJnN0cmVhbSwgMSwKIAkJ CQkJJnBvc2l0aW9uLnZlcnRpY2FsX2NvdW50LApAQCAtMTIxMSwzMTAgKzQ5MiwzNjggQEAgYm9v bCBtb2RfZnJlZXN5bmNfZ2V0X3ZfcG9zaXRpb24oc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2Zy ZWVzeW5jLAogCXJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBtb2RfZnJlZXN5bmNfbm90aWZ5X21v ZGVfY2hhbmdlKHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3luYywKLQkJc3RydWN0IGRj X3N0cmVhbV9zdGF0ZSAqKnN0cmVhbXMsIGludCBudW1fc3RyZWFtcykKK3ZvaWQgbW9kX2ZyZWVz eW5jX2J1aWxkX3Zycl9pbmZvcGFja2V0KHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3lu YywKKwkJY29uc3Qgc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAorCQljb25zdCBzdHJ1 Y3QgbW9kX3Zycl9wYXJhbXMgKnZyciwKKwkJc3RydWN0IGRjX2luZm9fcGFja2V0ICppbmZvcGFj a2V0KQogewotCXVuc2lnbmVkIGludCBzdHJlYW1faW5kZXgsIG1hcF9pbmRleDsKLQlzdHJ1Y3Qg ZnJlZXN5bmNfc3RhdGUgKnN0YXRlOwotCXN0cnVjdCBjb3JlX2ZyZWVzeW5jICpjb3JlX2ZyZWVz eW5jID0gTlVMTDsKLQlzdHJ1Y3QgZGNfc3RhdGljX3NjcmVlbl9ldmVudHMgdHJpZ2dlcnMgPSB7 MH07Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRlbXAgPSAwOworCS8qIFNQRCBpbmZvIHBhY2tldCBm b3IgRnJlZVN5bmMgKi8KKwl1bnNpZ25lZCBjaGFyIGNoZWNrc3VtID0gMDsKKwl1bnNpZ25lZCBp bnQgaWR4LCBwYXlsb2FkX3NpemUgPSAwOwogCi0JaWYgKG1vZF9mcmVlc3luYyA9PSBOVUxMKQor CS8qIENoZWNrIGlmIEZyZWVzeW5jIGlzIHN1cHBvcnRlZC4gUmV0dXJuIGlmIGZhbHNlLiBJZiB0 cnVlLAorCSAqIHNldCB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIGluZm8gcGFja2V0CisJ ICovCisJaWYgKCF2cnItPnN1cHBvcnRlZCkKIAkJcmV0dXJuOwogCi0JY29yZV9mcmVlc3luYyA9 IE1PRF9GUkVFU1lOQ19UT19DT1JFKG1vZF9mcmVlc3luYyk7CisJaWYgKGRjX2lzX2hkbWlfc2ln bmFsKHN0cmVhbS0+c2lnbmFsKSkgewogCi0JZm9yIChzdHJlYW1faW5kZXggPSAwOyBzdHJlYW1f aW5kZXggPCBudW1fc3RyZWFtczsgc3RyZWFtX2luZGV4KyspIHsKLQkJbWFwX2luZGV4ID0gbWFw X2luZGV4X2Zyb21fc3RyZWFtKGNvcmVfZnJlZXN5bmMsCi0JCQkJc3RyZWFtc1tzdHJlYW1faW5k ZXhdKTsKLQotCQlzdGF0ZSA9ICZjb3JlX2ZyZWVzeW5jLT5tYXBbbWFwX2luZGV4XS5zdGF0ZTsK LQotCQkvKiBVcGRhdGUgdGhlIGZpZWxkIHJhdGUgZm9yIG5ldyB0aW1pbmcgKi8KLQkJdGVtcCA9 IHN0cmVhbXNbc3RyZWFtX2luZGV4XS0+dGltaW5nLnBpeF9jbGtfa2h6OwotCQl0ZW1wICo9IDEw MDBVTEwgKiAxMDAwVUxMICogMTAwMFVMTDsKLQkJdGVtcCA9IGRpdl91NjQodGVtcCwKLQkJCQlz dHJlYW1zW3N0cmVhbV9pbmRleF0tPnRpbWluZy5oX3RvdGFsKTsKLQkJdGVtcCA9IGRpdl91NjQo dGVtcCwKLQkJCQlzdHJlYW1zW3N0cmVhbV9pbmRleF0tPnRpbWluZy52X3RvdGFsKTsKLQkJc3Rh dGUtPm5vbWluYWxfcmVmcmVzaF9yYXRlX2luX21pY3JvX2h6ID0KLQkJCQkodW5zaWduZWQgaW50 KSB0ZW1wOwotCi0JCWlmIChjb3JlX2ZyZWVzeW5jLT5tYXBbbWFwX2luZGV4XS5jYXBzLT5zdXBw b3J0ZWQpIHsKLQotCQkJLyogVXBkYXRlIHRoZSBzdHJlYW0gKi8KLQkJCXVwZGF0ZV9zdHJlYW0o Y29yZV9mcmVlc3luYywgc3RyZWFtc1tzdHJlYW1faW5kZXhdKTsKLQotCQkJLyogQ2FsY3VsYXRl IHZtaW4vdm1heCBhbmQgcmVmcmVzaCByYXRlIGZvcgotCQkJICogY3VycmVudCBtb2RlCi0JCQkg Ki8KLQkJCWNhbGNfZnJlZXN5bmNfcmFuZ2UoY29yZV9mcmVlc3luYywgKnN0cmVhbXMsIHN0YXRl LAotCQkJCWNvcmVfZnJlZXN5bmMtPm1hcFttYXBfaW5kZXhdLmNhcHMtPgotCQkJCW1pbl9yZWZy ZXNoX2luX21pY3JvX2h6LAotCQkJCXN0YXRlLT5ub21pbmFsX3JlZnJlc2hfcmF0ZV9pbl9taWNy b19oeik7Ci0KLQkJCS8qIFVwZGF0ZSBtYXNrICovCi0JCQl0cmlnZ2Vycy5vdmVybGF5X3VwZGF0 ZSA9IHRydWU7Ci0JCQl0cmlnZ2Vycy5zdXJmYWNlX3VwZGF0ZSA9IHRydWU7Ci0KLQkJCWRjX3N0 cmVhbV9zZXRfc3RhdGljX3NjcmVlbl9ldmVudHMoY29yZV9mcmVlc3luYy0+ZGMsCi0JCQkJCQkJ ICAgc3RyZWFtcywgbnVtX3N0cmVhbXMsCi0JCQkJCQkJICAgJnRyaWdnZXJzKTsKLQkJfQotCX0K KwkJLyogSEVBREVSICovCiAKLQkvKiBQcm9ncmFtIGZyZWVzeW5jIGFjY29yZGluZyB0byBjdXJy ZW50IHN0YXRlKi8KLQlzZXRfZnJlZXN5bmNfb25fc3RyZWFtcyhjb3JlX2ZyZWVzeW5jLCBzdHJl YW1zLCBudW1fc3RyZWFtcyk7Ci19CisJCS8qIEhCMCAgPSBQYWNrZXQgVHlwZSA9IDB4ODMgKFNv dXJjZSBQcm9kdWN0CisJCSAqCSAgRGVzY3JpcHRvciBJbmZvRnJhbWUpCisJCSAqLworCQlpbmZv cGFja2V0LT5oYjAgPSBEQ19IRE1JX0lORk9GUkFNRV9UWVBFX1NQRDsKIAotLyogQWRkIHRoZSB0 aW1lc3RhbXBzIHRvIHRoZSBjYWNoZSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgQlRSIHByb2dyYW1t aW5nCi0gKiBpcyByZXF1aXJlZCwgZGVwZW5kaW5nIG9uIHRoZSB0aW1lcyBjYWxjdWxhdGVkCi0g Ki8KLXN0YXRpYyB2b2lkIHVwZGF0ZV90aW1lc3RhbXBzKHN0cnVjdCBjb3JlX2ZyZWVzeW5jICpj b3JlX2ZyZWVzeW5jLAotCQljb25zdCBzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0sIHVu c2lnbmVkIGludCBtYXBfaW5kZXgsCi0JCXVuc2lnbmVkIGludCBsYXN0X3JlbmRlcl90aW1lX2lu X3VzKQotewotCXN0cnVjdCBmcmVlc3luY19zdGF0ZSAqc3RhdGUgPSAmY29yZV9mcmVlc3luYy0+ bWFwW21hcF9pbmRleF0uc3RhdGU7CisJCS8qIEhCMSAgPSBWZXJzaW9uID0gMHgwMSAqLworCQlp bmZvcGFja2V0LT5oYjEgPSAweDAxOwogCi0Jc3RhdGUtPnRpbWUucmVuZGVyX3RpbWVzW3N0YXRl LT50aW1lLnJlbmRlcl90aW1lc19pbmRleF0gPQotCQkJbGFzdF9yZW5kZXJfdGltZV9pbl91czsK LQlzdGF0ZS0+dGltZS5yZW5kZXJfdGltZXNfaW5kZXgrKzsKKwkJLyogSEIyICA9IFtCaXRzIDc6 NSA9IDBdIFtCaXRzIDQ6MCA9IExlbmd0aCA9IDB4MDhdICovCisJCWluZm9wYWNrZXQtPmhiMiA9 IDB4MDg7CiAKLQlpZiAoc3RhdGUtPnRpbWUucmVuZGVyX3RpbWVzX2luZGV4ID49IFJFTkRFUl9U SU1FU19NQVhfQ09VTlQpCi0JCXN0YXRlLT50aW1lLnJlbmRlcl90aW1lc19pbmRleCA9IDA7CisJ CXBheWxvYWRfc2l6ZSA9IDB4MDg7CiAKLQlpZiAobGFzdF9yZW5kZXJfdGltZV9pbl91cyArIEJU Ul9FWElUX01BUkdJTiA8Ci0JCXN0YXRlLT50aW1lLm1heF9yZW5kZXJfdGltZV9pbl91cykgewor CX0gZWxzZSBpZiAoZGNfaXNfZHBfc2lnbmFsKHN0cmVhbS0+c2lnbmFsKSkgewogCi0JCS8qIEV4 aXQgQmVsb3cgdGhlIFJhbmdlICovCi0JCWlmIChzdGF0ZS0+YnRyLmJ0cl9hY3RpdmUpIHsKKwkJ LyogSEVBREVSICovCiAKLQkJCXN0YXRlLT5idHIucHJvZ3JhbV9idHIgPSB0cnVlOwotCQkJc3Rh dGUtPmJ0ci5idHJfYWN0aXZlID0gZmFsc2U7Ci0JCQlzdGF0ZS0+YnRyLmZyYW1lX2NvdW50ZXIg PSAwOworCQkvKiBIQjAgID0gU2Vjb25kYXJ5LWRhdGEgUGFja2V0IElEID0gMCAtIE9ubHkgbm9u LXplcm8KKwkJICoJICB3aGVuIHVzZWQgdG8gYXNzb2NpYXRlIGF1ZGlvIHJlbGF0ZWQgaW5mbyBw YWNrZXRzCisJCSAqLworCQlpbmZvcGFja2V0LT5oYjAgPSAweDAwOwogCi0JCS8qIEV4aXQgRml4 ZWQgUmVmcmVzaCBtb2RlICovCi0JCX0gZWxzZSBpZiAoc3RhdGUtPmZpeGVkX3JlZnJlc2guZml4 ZWRfYWN0aXZlKSB7CisJCS8qIEhCMSAgPSBQYWNrZXQgVHlwZSA9IDB4ODMgKFNvdXJjZSBQcm9k dWN0CisJCSAqCSAgRGVzY3JpcHRvciBJbmZvRnJhbWUpCisJCSAqLworCQlpbmZvcGFja2V0LT5o YjEgPSBEQ19IRE1JX0lORk9GUkFNRV9UWVBFX1NQRDsKIAotCQkJc3RhdGUtPmZpeGVkX3JlZnJl c2guZnJhbWVfY291bnRlcisrOworCQkvKiBIQjIgID0gW0JpdHMgNzowID0gTGVhc3Qgc2lnbmlm aWNhbnQgZWlnaHQgYml0cyAtCisJCSAqCSAgRm9yIElORk9GUkFNRSwgdGhlIHZhbHVlIG11c3Qg YmUgMUJoXQorCQkgKi8KKwkJaW5mb3BhY2tldC0+aGIyID0gMHgxQjsKIAotCQkJaWYgKHN0YXRl LT5maXhlZF9yZWZyZXNoLmZyYW1lX2NvdW50ZXIgPgotCQkJCQlGSVhFRF9SRUZSRVNIX0VYSVRf RlJBTUVfQ09VTlQpIHsKLQkJCQlzdGF0ZS0+Zml4ZWRfcmVmcmVzaC5mcmFtZV9jb3VudGVyID0g MDsKLQkJCQlzdGF0ZS0+Zml4ZWRfcmVmcmVzaC5wcm9ncmFtX2ZpeGVkID0gdHJ1ZTsKLQkJCQlz dGF0ZS0+Zml4ZWRfcmVmcmVzaC5maXhlZF9hY3RpdmUgPSBmYWxzZTsKLQkJCX0KLQkJfQorCQkv KiBIQjMgID0gW0JpdHMgNzoyID0gSU5GT0ZSQU1FIFNEUCBWZXJzaW9uIE51bWJlciA9IDB4MV0K KwkJICoJICBbQml0cyAxOjAgPSBNb3N0IHNpZ25pZmljYW50IHR3byBiaXRzID0gMHgwMF0KKwkJ ICovCisJCWluZm9wYWNrZXQtPmhiMyA9IDB4MDQ7CiAKLQl9IGVsc2UgaWYgKGxhc3RfcmVuZGVy X3RpbWVfaW5fdXMgPiBzdGF0ZS0+dGltZS5tYXhfcmVuZGVyX3RpbWVfaW5fdXMpIHsKKwkJcGF5 bG9hZF9zaXplID0gMHgxQjsKKwl9CiAKLQkJLyogRW50ZXIgQmVsb3cgdGhlIFJhbmdlICovCi0J CWlmICghc3RhdGUtPmJ0ci5idHJfYWN0aXZlICYmCi0JCQljb3JlX2ZyZWVzeW5jLT5tYXBbbWFw X2luZGV4XS5jYXBzLT5idHJfc3VwcG9ydGVkKSB7CisJLyogUEIxID0gMHgxQSAoMjRiaXQgQU1E IElFRUUgT1VJICgweDAwMDAxQSkgLSBCeXRlIDApICovCisJaW5mb3BhY2tldC0+c2JbMV0gPSAw eDFBOwogCi0JCQlzdGF0ZS0+YnRyLnByb2dyYW1fYnRyID0gdHJ1ZTsKLQkJCXN0YXRlLT5idHIu YnRyX2FjdGl2ZSA9IHRydWU7CisJLyogUEIyID0gMHgwMCAoMjRiaXQgQU1EIElFRUUgT1VJICgw eDAwMDAxQSkgLSBCeXRlIDEpICovCisJaW5mb3BhY2tldC0+c2JbMl0gPSAweDAwOwogCi0JCS8q IEVudGVyIEZpeGVkIFJlZnJlc2ggbW9kZSAqLwotCQl9IGVsc2UgaWYgKCFzdGF0ZS0+Zml4ZWRf cmVmcmVzaC5maXhlZF9hY3RpdmUgJiYKLQkJCSFjb3JlX2ZyZWVzeW5jLT5tYXBbbWFwX2luZGV4 XS5jYXBzLT5idHJfc3VwcG9ydGVkKSB7CisJLyogUEIzID0gMHgwMCAoMjRiaXQgQU1EIElFRUUg T1VJICgweDAwMDAxQSkgLSBCeXRlIDIpICovCisJaW5mb3BhY2tldC0+c2JbM10gPSAweDAwOwog Ci0JCQlzdGF0ZS0+Zml4ZWRfcmVmcmVzaC5mcmFtZV9jb3VudGVyKys7CisJLyogUEI0ID0gUmVz ZXJ2ZWQgKi8KIAotCQkJaWYgKHN0YXRlLT5maXhlZF9yZWZyZXNoLmZyYW1lX2NvdW50ZXIgPgot CQkJCQlGSVhFRF9SRUZSRVNIX0VOVEVSX0ZSQU1FX0NPVU5UKSB7Ci0JCQkJc3RhdGUtPmZpeGVk X3JlZnJlc2guZnJhbWVfY291bnRlciA9IDA7Ci0JCQkJc3RhdGUtPmZpeGVkX3JlZnJlc2gucHJv Z3JhbV9maXhlZCA9IHRydWU7Ci0JCQkJc3RhdGUtPmZpeGVkX3JlZnJlc2guZml4ZWRfYWN0aXZl ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCX0KKwkvKiBQQjUgPSBSZXNlcnZlZCAqLwogCi0JLyogV2hl biBCZWxvdyB0aGUgUmFuZ2UgaXMgYWN0aXZlLCBtdXN0IHJlYWN0IG9uIGV2ZXJ5IGZyYW1lICov Ci0JaWYgKHN0YXRlLT5idHIuYnRyX2FjdGl2ZSkKLQkJc3RhdGUtPmJ0ci5wcm9ncmFtX2J0ciA9 IHRydWU7Ci19CisJLyogUEI2ID0gW0JpdHMgNzozID0gUmVzZXJ2ZWRdICovCiAKLXN0YXRpYyB2 b2lkIGFwcGx5X2JlbG93X3RoZV9yYW5nZShzdHJ1Y3QgY29yZV9mcmVlc3luYyAqY29yZV9mcmVl c3luYywKLQkJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLCB1bnNpZ25lZCBpbnQgbWFw X2luZGV4LAotCQl1bnNpZ25lZCBpbnQgbGFzdF9yZW5kZXJfdGltZV9pbl91cykKLXsKLQl1bnNp Z25lZCBpbnQgaW5zZXJ0ZWRfZnJhbWVfZHVyYXRpb25faW5fdXMgPSAwOwotCXVuc2lnbmVkIGlu dCBtaWRfcG9pbnRfZnJhbWVzX2NlaWwgPSAwOwotCXVuc2lnbmVkIGludCBtaWRfcG9pbnRfZnJh bWVzX2Zsb29yID0gMDsKLQl1bnNpZ25lZCBpbnQgZnJhbWVfdGltZV9pbl91cyA9IDA7Ci0JdW5z aWduZWQgaW50IGRlbHRhX2Zyb21fbWlkX3BvaW50X2luX3VzXzEgPSAweEZGRkZGRkZGOwotCXVu c2lnbmVkIGludCBkZWx0YV9mcm9tX21pZF9wb2ludF9pbl91c18yID0gMHhGRkZGRkZGRjsKLQl1 bnNpZ25lZCBpbnQgZnJhbWVzX3RvX2luc2VydCA9IDA7Ci0JdW5zaWduZWQgaW50IG1pbl9mcmFt ZV9kdXJhdGlvbl9pbl9ucyA9IDA7Ci0Jc3RydWN0IGZyZWVzeW5jX3N0YXRlICpzdGF0ZSA9ICZj b3JlX2ZyZWVzeW5jLT5tYXBbbWFwX2luZGV4XS5zdGF0ZTsKKwkvKiBQQjYgPSBbQml0IDAgPSBG cmVlU3luYyBTdXBwb3J0ZWRdICovCisJaWYgKHZyci0+c3RhdGUgIT0gVlJSX1NUQVRFX1VOU1VQ UE9SVEVEKQorCQlpbmZvcGFja2V0LT5zYls2XSB8PSAweDAxOwogCi0JaWYgKCFzdGF0ZS0+YnRy LnByb2dyYW1fYnRyKQotCQlyZXR1cm47CisJLyogUEI2ID0gW0JpdCAxID0gRnJlZVN5bmMgRW5h YmxlZF0gKi8KKwlpZiAodnJyLT5zdGF0ZSAhPSBWUlJfU1RBVEVfRElTQUJMRUQgJiYKKwkJCXZy ci0+c3RhdGUgIT0gVlJSX1NUQVRFX1VOU1VQUE9SVEVEKQorCQlpbmZvcGFja2V0LT5zYls2XSB8 PSAweDAyOwogCi0Jc3RhdGUtPmJ0ci5wcm9ncmFtX2J0ciA9IGZhbHNlOworCS8qIFBCNiA9IFtC aXQgMiA9IEZyZWVTeW5jIEFjdGl2ZV0gKi8KKwlpZiAodnJyLT5zdGF0ZSA9PSBWUlJfU1RBVEVf QUNUSVZFX1ZBUklBQkxFIHx8CisJCQl2cnItPnN0YXRlID09IFZSUl9TVEFURV9BQ1RJVkVfRklY RUQpCisJCWluZm9wYWNrZXQtPnNiWzZdIHw9IDB4MDQ7CiAKLQltaW5fZnJhbWVfZHVyYXRpb25f aW5fbnMgPSAoKHVuc2lnbmVkIGludCkgKGRpdjY0X3U2NCgKLQkJKDEwMDAwMDAwMDBVTEwgKiAx MDAwMDAwKSwKLQkJc3RhdGUtPm5vbWluYWxfcmVmcmVzaF9yYXRlX2luX21pY3JvX2h6KSkpOwor CS8qIFBCNyA9IEZyZWVTeW5jIE1pbmltdW0gcmVmcmVzaCByYXRlIChIeikgKi8KKwlpbmZvcGFj a2V0LT5zYls3XSA9ICh1bnNpZ25lZCBjaGFyKSh2cnItPm1pbl9yZWZyZXNoX2luX3VoeiAvIDEw MDAwMDApOwogCi0JLyogUHJvZ3JhbSBCVFIgKi8KKwkvKiBQQjggPSBGcmVlU3luYyBNYXhpbXVt IHJlZnJlc2ggcmF0ZSAoSHopCisJICogTm90ZTogV2Ugc2hvdWxkIG5ldmVyIGdvIGFib3ZlIHRo ZSBmaWVsZCByYXRlIG9mIHRoZSBtb2RlIHRpbWluZyBzZXQuCisJICovCisJaW5mb3BhY2tldC0+ c2JbOF0gPSAodW5zaWduZWQgY2hhcikodnJyLT5tYXhfcmVmcmVzaF9pbl91aHogLyAxMDAwMDAw KTsKIAotCS8qIEJUUiBzZXQgdG8gIm5vdCBhY3RpdmUiIHNvIGRpc2VuZ2FnZSAqLwotCWlmICgh c3RhdGUtPmJ0ci5idHJfYWN0aXZlKQorCS8qIFBCOSAtIFBCMjcgID0gUmVzZXJ2ZWQgKi8KIAot CQkvKiBSZXN0b3JlIEZyZWVTeW5jICovCi0JCXNldF9mcmVlc3luY19vbl9zdHJlYW1zKGNvcmVf ZnJlZXN5bmMsICZzdHJlYW0sIDEpOworCS8qIENhbGN1bGF0ZSBjaGVja3N1bSAqLworCWNoZWNr c3VtICs9IGluZm9wYWNrZXQtPmhiMDsKKwljaGVja3N1bSArPSBpbmZvcGFja2V0LT5oYjE7CisJ Y2hlY2tzdW0gKz0gaW5mb3BhY2tldC0+aGIyOworCWNoZWNrc3VtICs9IGluZm9wYWNrZXQtPmhi MzsKIAotCS8qIEJUUiBzZXQgdG8gImFjdGl2ZSIgc28gZW5nYWdlICovCi0JZWxzZSB7CisJZm9y IChpZHggPSAxOyBpZHggPD0gcGF5bG9hZF9zaXplOyBpZHgrKykKKwkJY2hlY2tzdW0gKz0gaW5m b3BhY2tldC0+c2JbaWR4XTsKIAotCQkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIG1pZFBvaW50IGZy YW1lcyB0aGF0IGNvdWxkIGZpdCB3aXRoaW4KLQkJICogdGhlIHJlbmRlciB0aW1lIGludGVydmFs LSB0YWtlIGNlaWwgb2YgdGhpcyB2YWx1ZQotCQkgKi8KLQkJbWlkX3BvaW50X2ZyYW1lc19jZWls ID0gKGxhc3RfcmVuZGVyX3RpbWVfaW5fdXMgKwotCQkJc3RhdGUtPmJ0ci5taWRfcG9pbnRfaW5f dXMtIDEpIC8KLQkJCXN0YXRlLT5idHIubWlkX3BvaW50X2luX3VzOworCS8qIFBCMCA9IENoZWNr c3VtIChvbmUgYnl0ZSBjb21wbGVtZW50KSAqLworCWluZm9wYWNrZXQtPnNiWzBdID0gKHVuc2ln bmVkIGNoYXIpKDB4MTAwIC0gY2hlY2tzdW0pOwogCi0JCWlmIChtaWRfcG9pbnRfZnJhbWVzX2Nl aWwgPiAwKSB7CisJaW5mb3BhY2tldC0+dmFsaWQgPSB0cnVlOworfQogCi0JCQlmcmFtZV90aW1l X2luX3VzID0gbGFzdF9yZW5kZXJfdGltZV9pbl91cyAvCi0JCQkJbWlkX3BvaW50X2ZyYW1lc19j ZWlsOwotCQkJZGVsdGFfZnJvbV9taWRfcG9pbnRfaW5fdXNfMSA9Ci0JCQkJKHN0YXRlLT5idHIu bWlkX3BvaW50X2luX3VzID4KLQkJCQlmcmFtZV90aW1lX2luX3VzKSA/Ci0JCQkJKHN0YXRlLT5i dHIubWlkX3BvaW50X2luX3VzIC0gZnJhbWVfdGltZV9pbl91cyk6Ci0JCQkJKGZyYW1lX3RpbWVf aW5fdXMgLSBzdGF0ZS0+YnRyLm1pZF9wb2ludF9pbl91cyk7Ci0JCX0KK3ZvaWQgbW9kX2ZyZWVz eW5jX2J1aWxkX3Zycl9wYXJhbXMoc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAor CQljb25zdCBzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0sCisJCXN0cnVjdCBtb2RfZnJl ZXN5bmNfY29uZmlnICppbl9jb25maWcsCisJCXN0cnVjdCBtb2RfdnJyX3BhcmFtcyAqaW5fb3V0 X3ZycikKK3sKKwlzdHJ1Y3QgY29yZV9mcmVlc3luYyAqY29yZV9mcmVlc3luYyA9IE5VTEw7CisJ dW5zaWduZWQgbG9uZyBsb25nIG5vbWluYWxfZmllbGRfcmF0ZV9pbl91aHogPSAwOworCWJvb2wg bm9taW5hbF9maWVsZF9yYXRlX2luX3JhbmdlID0gdHJ1ZTsKKwl1bnNpZ25lZCBpbnQgcmVmcmVz aF9yYW5nZSA9IDA7CisJdW5zaWduZWQgaW50IG1pbl9yZWZyZXNoX2luX3VoeiA9IDA7CisJdW5z aWduZWQgaW50IG1heF9yZWZyZXNoX2luX3VoeiA9IDA7CiAKLQkJLyogQ2FsY3VsYXRlIG51bWJl ciBvZiBtaWRQb2ludCBmcmFtZXMgdGhhdCBjb3VsZCBmaXQgd2l0aGluCi0JCSAqIHRoZSByZW5k ZXIgdGltZSBpbnRlcnZhbC0gdGFrZSBmbG9vciBvZiB0aGlzIHZhbHVlCi0JCSAqLwotCQltaWRf cG9pbnRfZnJhbWVzX2Zsb29yID0gbGFzdF9yZW5kZXJfdGltZV9pbl91cyAvCi0JCQlzdGF0ZS0+ YnRyLm1pZF9wb2ludF9pbl91czsKKwlpZiAobW9kX2ZyZWVzeW5jID09IE5VTEwpCisJCXJldHVy bjsKIAotCQlpZiAobWlkX3BvaW50X2ZyYW1lc19mbG9vciA+IDApIHsKKwljb3JlX2ZyZWVzeW5j ID0gTU9EX0ZSRUVTWU5DX1RPX0NPUkUobW9kX2ZyZWVzeW5jKTsKIAotCQkJZnJhbWVfdGltZV9p bl91cyA9IGxhc3RfcmVuZGVyX3RpbWVfaW5fdXMgLwotCQkJCW1pZF9wb2ludF9mcmFtZXNfZmxv b3I7Ci0JCQlkZWx0YV9mcm9tX21pZF9wb2ludF9pbl91c18yID0KLQkJCQkoc3RhdGUtPmJ0ci5t aWRfcG9pbnRfaW5fdXMgPgotCQkJCWZyYW1lX3RpbWVfaW5fdXMpID8KLQkJCQkoc3RhdGUtPmJ0 ci5taWRfcG9pbnRfaW5fdXMgLSBmcmFtZV90aW1lX2luX3VzKToKLQkJCQkoZnJhbWVfdGltZV9p bl91cyAtIHN0YXRlLT5idHIubWlkX3BvaW50X2luX3VzKTsKLQkJfQorCS8qIENhbGN1bGF0ZSBu b21pbmFsIGZpZWxkIHJhdGUgZm9yIHN0cmVhbSAqLworCW5vbWluYWxfZmllbGRfcmF0ZV9pbl91 aHogPSBzdHJlYW0tPnRpbWluZy5waXhfY2xrX2toejsKKwlub21pbmFsX2ZpZWxkX3JhdGVfaW5f dWh6ICo9IDEwMDBVTEwgKiAxMDAwVUxMICogMTAwMFVMTDsKKwlub21pbmFsX2ZpZWxkX3JhdGVf aW5fdWh6ID0gZGl2X3U2NChub21pbmFsX2ZpZWxkX3JhdGVfaW5fdWh6LAorCQkJCQkJc3RyZWFt LT50aW1pbmcuaF90b3RhbCk7CisJbm9taW5hbF9maWVsZF9yYXRlX2luX3VoeiA9IGRpdl91NjQo bm9taW5hbF9maWVsZF9yYXRlX2luX3VoeiwKKwkJCQkJCXN0cmVhbS0+dGltaW5nLnZfdG90YWwp OworCisJbWluX3JlZnJlc2hfaW5fdWh6ID0gaW5fY29uZmlnLT5taW5fcmVmcmVzaF9pbl91aHo7 CisJbWF4X3JlZnJlc2hfaW5fdWh6ID0gaW5fY29uZmlnLT5tYXhfcmVmcmVzaF9pbl91aHo7CisK KwkvLyBEb24ndCBhbGxvdyBtaW4gPiBtYXgKKwlpZiAobWluX3JlZnJlc2hfaW5fdWh6ID4gbWF4 X3JlZnJlc2hfaW5fdWh6KQorCQltaW5fcmVmcmVzaF9pbl91aHogPSBtYXhfcmVmcmVzaF9pbl91 aHo7CisKKwkvLyBGdWxsIHJhbmdlIG1heSBiZSBsYXJnZXIgdGhhbiBjdXJyZW50IHZpZGVvIHRp bWluZywgc28gY2FwIGF0IG5vbWluYWwKKwlpZiAobWF4X3JlZnJlc2hfaW5fdWh6ID4gbm9taW5h bF9maWVsZF9yYXRlX2luX3VoeikKKwkJbWF4X3JlZnJlc2hfaW5fdWh6ID0gbm9taW5hbF9maWVs ZF9yYXRlX2luX3VoejsKKworCS8qIEFsbG93IGZvciBzb21lIHJvdW5kaW5nIGVycm9yIG9mIGFj dHVhbCB2aWRlbyB0aW1pbmcgYnkgdGFraW5nIGNlaWwuCisJICogRm9yIGV4YW1wbGUsIDE0NCBI eiBtb2RlIHRpbWluZyBtYXkgYWN0dWFsbHkgYmUgMTQzLnh4eCBIeiB3aGVuCisJICogY2FsY3Vs YXRlZCBmcm9tIHBpeGVsIHJhdGUgYW5kIHZlcnRpY2FsL2hvcml6b250YWwgdG90YWxzLCBidXQK KwkgKiB0aGlzIHNob3VsZCBiZSBhbGxvd2VkIGluc3RlYWQgb2YgYmxvY2tpbmcgRnJlZVN5bmMu CisJICovCisJaWYgKChtaW5fcmVmcmVzaF9pbl91aHogLyAxMDAwMDAwKSA+CisJCQkoKG5vbWlu YWxfZmllbGRfcmF0ZV9pbl91aHogKyAxMDAwMDAwIC0gMSkgLyAxMDAwMDAwKSkKKwkJbm9taW5h bF9maWVsZF9yYXRlX2luX3JhbmdlID0gZmFsc2U7CiAKLQkJLyogQ2hvb3NlIG51bWJlciBvZiBm cmFtZXMgdG8gaW5zZXJ0IGJhc2VkIG9uIGhvdyBjbG9zZSBpdAotCQkgKiBjYW4gZ2V0IHRvIHRo ZSBtaWQgcG9pbnQgb2YgdGhlIHZhcmlhYmxlIHJhbmdlLgotCQkgKi8KLQkJaWYgKGRlbHRhX2Zy b21fbWlkX3BvaW50X2luX3VzXzEgPCBkZWx0YV9mcm9tX21pZF9wb2ludF9pbl91c18yKQotCQkJ ZnJhbWVzX3RvX2luc2VydCA9IG1pZF9wb2ludF9mcmFtZXNfY2VpbDsKLQkJZWxzZQotCQkJZnJh bWVzX3RvX2luc2VydCA9IG1pZF9wb2ludF9mcmFtZXNfZmxvb3I7CisJLy8gRnVsbCByYW5nZSBt YXkgYmUgbGFyZ2VyIHRoYW4gY3VycmVudCB2aWRlbyB0aW1pbmcsIHNvIGNhcCBhdCBub21pbmFs CisJaWYgKG1pbl9yZWZyZXNoX2luX3VoeiA+IG5vbWluYWxfZmllbGRfcmF0ZV9pbl91aHopCisJ CW1pbl9yZWZyZXNoX2luX3VoeiA9IG5vbWluYWxfZmllbGRfcmF0ZV9pbl91aHo7CiAKLQkJLyog RWl0aGVyIHdlJ3ZlIGNhbGN1bGF0ZWQgdGhlIG51bWJlciBvZiBmcmFtZXMgdG8gaW5zZXJ0LAot CQkgKiBvciB3ZSBuZWVkIHRvIGluc2VydCBtaW4gZHVyYXRpb24gZnJhbWVzCi0JCSAqLwotCQlp ZiAoZnJhbWVzX3RvX2luc2VydCA+IDApCi0JCQlpbnNlcnRlZF9mcmFtZV9kdXJhdGlvbl9pbl91 cyA9IGxhc3RfcmVuZGVyX3RpbWVfaW5fdXMgLwotCQkJCQkJCWZyYW1lc190b19pbnNlcnQ7CisJ aWYgKCF2cnJfc2V0dGluZ3NfcmVxdWlyZV91cGRhdGUoY29yZV9mcmVlc3luYywKKwkJCWluX2Nv bmZpZywgbWluX3JlZnJlc2hfaW5fdWh6LCBtYXhfcmVmcmVzaF9pbl91aHosCisJCQlpbl9vdXRf dnJyKSkKKwkJcmV0dXJuOwogCi0JCWlmIChpbnNlcnRlZF9mcmFtZV9kdXJhdGlvbl9pbl91cyA8 Ci0JCQlzdGF0ZS0+dGltZS5taW5fcmVuZGVyX3RpbWVfaW5fdXMpCisJaW5fb3V0X3Zyci0+c3Rh dGUgPSBpbl9jb25maWctPnN0YXRlOwogCi0JCQlpbnNlcnRlZF9mcmFtZV9kdXJhdGlvbl9pbl91 cyA9Ci0JCQkJc3RhdGUtPnRpbWUubWluX3JlbmRlcl90aW1lX2luX3VzOworCWlmICgoaW5fY29u ZmlnLT5zdGF0ZSA9PSBWUlJfU1RBVEVfVU5TVVBQT1JURUQpIHx8CisJCQkJKCFub21pbmFsX2Zp ZWxkX3JhdGVfaW5fcmFuZ2UpKSB7CisJCWluX291dF92cnItPnN0YXRlID0gVlJSX1NUQVRFX1VO U1VQUE9SVEVEOworCQlpbl9vdXRfdnJyLT5zdXBwb3J0ZWQgPSBmYWxzZTsKKwl9IGVsc2Ugewor CQlpbl9vdXRfdnJyLT5taW5fcmVmcmVzaF9pbl91aHogPSBtaW5fcmVmcmVzaF9pbl91aHo7CisJ CWluX291dF92cnItPm1heF9kdXJhdGlvbl9pbl91cyA9CisJCQkJY2FsY19kdXJhdGlvbl9pbl91 c19mcm9tX3JlZnJlc2hfaW5fdWh6KAorCQkJCQkJbWluX3JlZnJlc2hfaW5fdWh6KTsKIAotCQkv KiBDYWNoZSB0aGUgY2FsY3VsYXRlZCB2YXJpYWJsZXMgKi8KLQkJc3RhdGUtPmJ0ci5pbnNlcnRl ZF9mcmFtZV9kdXJhdGlvbl9pbl91cyA9Ci0JCQlpbnNlcnRlZF9mcmFtZV9kdXJhdGlvbl9pbl91 czsKLQkJc3RhdGUtPmJ0ci5mcmFtZXNfdG9faW5zZXJ0ID0gZnJhbWVzX3RvX2luc2VydDsKLQkJ c3RhdGUtPmJ0ci5mcmFtZV9jb3VudGVyID0gZnJhbWVzX3RvX2luc2VydDsKKwkJaW5fb3V0X3Zy ci0+bWF4X3JlZnJlc2hfaW5fdWh6ID0gbWF4X3JlZnJlc2hfaW5fdWh6OworCQlpbl9vdXRfdnJy LT5taW5fZHVyYXRpb25faW5fdXMgPQorCQkJCWNhbGNfZHVyYXRpb25faW5fdXNfZnJvbV9yZWZy ZXNoX2luX3VoeigKKwkJCQkJCW1heF9yZWZyZXNoX2luX3Voeik7CiAKKwkJcmVmcmVzaF9yYW5n ZSA9IGluX291dF92cnItPm1heF9yZWZyZXNoX2luX3VoeiAtCisJCQkJaW5fb3V0X3Zyci0+bWlu X3JlZnJlc2hfaW5fdWh6OworCisJCWluX291dF92cnItPnN1cHBvcnRlZCA9IHRydWU7CisJfQor CisJaW5fb3V0X3Zyci0+Zml4ZWQucmFtcGluZ19hY3RpdmUgPSBpbl9jb25maWctPnJhbXBpbmc7 CisKKwlpbl9vdXRfdnJyLT5idHIuYnRyX2VuYWJsZWQgPSBpbl9jb25maWctPmJ0cjsKKwlpZiAo aW5fb3V0X3Zyci0+bWF4X3JlZnJlc2hfaW5fdWh6IDwKKwkJCTIgKiBpbl9vdXRfdnJyLT5taW5f cmVmcmVzaF9pbl91aHopCisJCWluX291dF92cnItPmJ0ci5idHJfZW5hYmxlZCA9IGZhbHNlOwor CWluX291dF92cnItPmJ0ci5idHJfYWN0aXZlID0gZmFsc2U7CisJaW5fb3V0X3Zyci0+YnRyLmlu c2VydGVkX2R1cmF0aW9uX2luX3VzID0gMDsKKwlpbl9vdXRfdnJyLT5idHIuZnJhbWVzX3RvX2lu c2VydCA9IDA7CisJaW5fb3V0X3Zyci0+YnRyLmZyYW1lX2NvdW50ZXIgPSAwOworCWluX291dF92 cnItPmJ0ci5taWRfcG9pbnRfaW5fdXMgPQorCQkJaW5fb3V0X3Zyci0+bWluX2R1cmF0aW9uX2lu X3VzICsKKwkJCQkoaW5fb3V0X3Zyci0+bWF4X2R1cmF0aW9uX2luX3VzIC0KKwkJCQlpbl9vdXRf dnJyLT5taW5fZHVyYXRpb25faW5fdXMpIC8gMjsKKworCWlmIChpbl9vdXRfdnJyLT5zdGF0ZSA9 PSBWUlJfU1RBVEVfVU5TVVBQT1JURUQpIHsKKwkJaW5fb3V0X3Zyci0+YWRqdXN0LnZfdG90YWxf bWluID0gc3RyZWFtLT50aW1pbmcudl90b3RhbDsKKwkJaW5fb3V0X3Zyci0+YWRqdXN0LnZfdG90 YWxfbWF4ID0gc3RyZWFtLT50aW1pbmcudl90b3RhbDsKKwl9IGVsc2UgaWYgKGluX291dF92cnIt PnN0YXRlID09IFZSUl9TVEFURV9ESVNBQkxFRCkgeworCQlpbl9vdXRfdnJyLT5hZGp1c3Qudl90 b3RhbF9taW4gPSBzdHJlYW0tPnRpbWluZy52X3RvdGFsOworCQlpbl9vdXRfdnJyLT5hZGp1c3Qu dl90b3RhbF9tYXggPSBzdHJlYW0tPnRpbWluZy52X3RvdGFsOworCX0gZWxzZSBpZiAoaW5fb3V0 X3Zyci0+c3RhdGUgPT0gVlJSX1NUQVRFX0lOQUNUSVZFKSB7CisJCWluX291dF92cnItPmFkanVz dC52X3RvdGFsX21pbiA9IHN0cmVhbS0+dGltaW5nLnZfdG90YWw7CisJCWluX291dF92cnItPmFk anVzdC52X3RvdGFsX21heCA9IHN0cmVhbS0+dGltaW5nLnZfdG90YWw7CisJfSBlbHNlIGlmIChp bl9vdXRfdnJyLT5zdGF0ZSA9PSBWUlJfU1RBVEVfQUNUSVZFX1ZBUklBQkxFICYmCisJCQlyZWZy ZXNoX3JhbmdlID49IE1JTl9SRUZSRVNIX1JBTkdFX0lOX1VTKSB7CisJCWluX291dF92cnItPmFk anVzdC52X3RvdGFsX21pbiA9CisJCQljYWxjX3ZfdG90YWxfZnJvbV9yZWZyZXNoKHN0cmVhbSwK KwkJCQlpbl9vdXRfdnJyLT5tYXhfcmVmcmVzaF9pbl91aHopOworCQlpbl9vdXRfdnJyLT5hZGp1 c3Qudl90b3RhbF9tYXggPQorCQkJY2FsY192X3RvdGFsX2Zyb21fcmVmcmVzaChzdHJlYW0sCisJ CQkJaW5fb3V0X3Zyci0+bWluX3JlZnJlc2hfaW5fdWh6KTsKKwl9IGVsc2UgaWYgKGluX291dF92 cnItPnN0YXRlID09IFZSUl9TVEFURV9BQ1RJVkVfRklYRUQpIHsKKwkJaW5fb3V0X3Zyci0+Zml4 ZWQudGFyZ2V0X3JlZnJlc2hfaW5fdWh6ID0KKwkJCQlpbl9vdXRfdnJyLT5taW5fcmVmcmVzaF9p bl91aHo7CisJCWlmIChpbl9vdXRfdnJyLT5maXhlZC5yYW1waW5nX2FjdGl2ZSkgeworCQkJaW5f b3V0X3Zyci0+Zml4ZWQuZml4ZWRfYWN0aXZlID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCWluX291 dF92cnItPmZpeGVkLmZpeGVkX2FjdGl2ZSA9IHRydWU7CisJCQlpbl9vdXRfdnJyLT5hZGp1c3Qu dl90b3RhbF9taW4gPQorCQkJCWNhbGNfdl90b3RhbF9mcm9tX3JlZnJlc2goc3RyZWFtLAorCQkJ CQlpbl9vdXRfdnJyLT5maXhlZC50YXJnZXRfcmVmcmVzaF9pbl91aHopOworCQkJaW5fb3V0X3Zy ci0+YWRqdXN0LnZfdG90YWxfbWF4ID0KKwkJCQlpbl9vdXRfdnJyLT5hZGp1c3Qudl90b3RhbF9t aW47CisJCX0KKwl9IGVsc2UgeworCQlpbl9vdXRfdnJyLT5zdGF0ZSA9IFZSUl9TVEFURV9JTkFD VElWRTsKKwkJaW5fb3V0X3Zyci0+YWRqdXN0LnZfdG90YWxfbWluID0gc3RyZWFtLT50aW1pbmcu dl90b3RhbDsKKwkJaW5fb3V0X3Zyci0+YWRqdXN0LnZfdG90YWxfbWF4ID0gc3RyZWFtLT50aW1p bmcudl90b3RhbDsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGx5X2ZpeGVkX3JlZnJlc2goc3Ry dWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMsCi0JCXN0cnVjdCBkY19zdHJlYW1fc3Rh dGUgKnN0cmVhbSwgdW5zaWduZWQgaW50IG1hcF9pbmRleCkKK3ZvaWQgbW9kX2ZyZWVzeW5jX2hh bmRsZV9wcmVmbGlwKHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3luYywKKwkJY29uc3Qg c3RydWN0IGRjX3BsYW5lX3N0YXRlICpwbGFuZSwKKwkJY29uc3Qgc3RydWN0IGRjX3N0cmVhbV9z dGF0ZSAqc3RyZWFtLAorCQl1bnNpZ25lZCBpbnQgY3Vycl90aW1lX3N0YW1wX2luX3VzLAorCQlz dHJ1Y3QgbW9kX3Zycl9wYXJhbXMgKmluX291dF92cnIpCiB7Ci0JdW5zaWduZWQgaW50IHZtaW4g PSAwLCB2bWF4ID0gMDsKLQlzdHJ1Y3QgZnJlZXN5bmNfc3RhdGUgKnN0YXRlID0gJmNvcmVfZnJl ZXN5bmMtPm1hcFttYXBfaW5kZXhdLnN0YXRlOworCXN0cnVjdCBjb3JlX2ZyZWVzeW5jICpjb3Jl X2ZyZWVzeW5jID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbGFzdF9yZW5kZXJfdGltZV9pbl91cyA9 IDA7CisJdW5zaWduZWQgaW50IGF2ZXJhZ2VfcmVuZGVyX3RpbWVfaW5fdXMgPSAwOwogCi0JaWYg KCFzdGF0ZS0+Zml4ZWRfcmVmcmVzaC5wcm9ncmFtX2ZpeGVkKQorCWlmIChtb2RfZnJlZXN5bmMg PT0gTlVMTCkKIAkJcmV0dXJuOwogCi0Jc3RhdGUtPmZpeGVkX3JlZnJlc2gucHJvZ3JhbV9maXhl ZCA9IGZhbHNlOworCWNvcmVfZnJlZXN5bmMgPSBNT0RfRlJFRVNZTkNfVE9fQ09SRShtb2RfZnJl ZXN5bmMpOwogCi0JLyogUHJvZ3JhbSBGaXhlZCBSZWZyZXNoICovCisJaWYgKGluX291dF92cnIt PnN1cHBvcnRlZCAmJgorCQkJaW5fb3V0X3Zyci0+c3RhdGUgPT0gVlJSX1NUQVRFX0FDVElWRV9W QVJJQUJMRSkgeworCQl1bnNpZ25lZCBpbnQgaSA9IDA7CisJCXVuc2lnbmVkIGludCBvbGRlc3Rf aW5kZXggPSBwbGFuZS0+dGltZS5pbmRleCArIDE7CiAKLQkvKiBGaXhlZCBSZWZyZXNoIHNldCB0 byAibm90IGFjdGl2ZSIgc28gZGlzZW5nYWdlICovCi0JaWYgKCFzdGF0ZS0+Zml4ZWRfcmVmcmVz aC5maXhlZF9hY3RpdmUpIHsKLQkJc2V0X2ZyZWVzeW5jX29uX3N0cmVhbXMoY29yZV9mcmVlc3lu YywgJnN0cmVhbSwgMSk7CisJCWlmIChvbGRlc3RfaW5kZXggPj0gRENfUExBTkVfVVBEQVRFX1RJ TUVTX01BWCkKKwkJCW9sZGVzdF9pbmRleCA9IDA7CiAKLQkvKiBGaXhlZCBSZWZyZXNoIHNldCB0 byAiYWN0aXZlIiBzbyBlbmdhZ2UgKGZpeCB0byBtYXgpICovCi0JfSBlbHNlIHsKKwkJbGFzdF9y ZW5kZXJfdGltZV9pbl91cyA9IGN1cnJfdGltZV9zdGFtcF9pbl91cyAtCisJCQkJcGxhbmUtPnRp bWUucHJldl91cGRhdGVfdGltZV9pbl91czsKKworCQkvLyBTdW0gb2ZmIGFsbCBlbnRyaWVzIGV4 Y2VwdCBvbGRlc3Qgb25lCisJCWZvciAoaSA9IDA7IGkgPCBEQ19QTEFORV9VUERBVEVfVElNRVNf TUFYOyBpKyspIHsKKwkJCWF2ZXJhZ2VfcmVuZGVyX3RpbWVfaW5fdXMgKz0KKwkJCQkJcGxhbmUt PnRpbWUudGltZV9lbGFwc2VkX2luX3VzW2ldOworCQl9CisJCWF2ZXJhZ2VfcmVuZGVyX3RpbWVf aW5fdXMgLT0KKwkJCQlwbGFuZS0+dGltZS50aW1lX2VsYXBzZWRfaW5fdXNbb2xkZXN0X2luZGV4 XTsKKworCQkvLyBBZGQgcmVuZGVyIHRpbWUgZm9yIGN1cnJlbnQgZmxpcAorCQlhdmVyYWdlX3Jl bmRlcl90aW1lX2luX3VzICs9IGxhc3RfcmVuZGVyX3RpbWVfaW5fdXM7CisJCWF2ZXJhZ2VfcmVu ZGVyX3RpbWVfaW5fdXMgLz0gRENfUExBTkVfVVBEQVRFX1RJTUVTX01BWDsKKworCQlpZiAoaW5f b3V0X3Zyci0+YnRyLmJ0cl9lbmFibGVkKSB7CisJCQlhcHBseV9iZWxvd190aGVfcmFuZ2UoY29y ZV9mcmVlc3luYywKKwkJCQkJc3RyZWFtLAorCQkJCQlsYXN0X3JlbmRlcl90aW1lX2luX3VzLAor CQkJCQlpbl9vdXRfdnJyKTsKKwkJfSBlbHNlIHsKKwkJCWFwcGx5X2ZpeGVkX3JlZnJlc2goY29y ZV9mcmVlc3luYywKKwkJCQlzdHJlYW0sCisJCQkJbGFzdF9yZW5kZXJfdGltZV9pbl91cywKKwkJ CQlpbl9vdXRfdnJyKTsKKwkJfQogCi0JCXZtaW4gPSBzdGF0ZS0+ZnJlZXN5bmNfcmFuZ2Uudm1p bjsKLQkJdm1heCA9IHZtaW47Ci0JCWFkanVzdF92bWluX3ZtYXgoY29yZV9mcmVlc3luYywgJnN0 cmVhbSwgbWFwX2luZGV4LAotCQkJCQkxLCB2bWluLCB2bWF4KTsKIAl9CiB9CiAKLXZvaWQgbW9k X2ZyZWVzeW5jX3ByZV91cGRhdGVfcGxhbmVfYWRkcmVzc2VzKHN0cnVjdCBtb2RfZnJlZXN5bmMg Km1vZF9mcmVlc3luYywKLQkJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqKnN0cmVhbXMsIGludCBu dW1fc3RyZWFtcywKLQkJdW5zaWduZWQgaW50IGN1cnJfdGltZV9zdGFtcF9pbl91cykKK3ZvaWQg bW9kX2ZyZWVzeW5jX2hhbmRsZV92X3VwZGF0ZShzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJl ZXN5bmMsCisJCWNvbnN0IHN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbSwKKwkJc3RydWN0 IG1vZF92cnJfcGFyYW1zICppbl9vdXRfdnJyKQogewotCXVuc2lnbmVkIGludCBzdHJlYW1faW5k ZXgsIG1hcF9pbmRleCwgbGFzdF9yZW5kZXJfdGltZV9pbl91cyA9IDA7CiAJc3RydWN0IGNvcmVf ZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMgPSBOVUxMOwogCi0JaWYgKG1vZF9mcmVlc3luYyA9PSBO VUxMKQorCWlmICgobW9kX2ZyZWVzeW5jID09IE5VTEwpIHx8IChzdHJlYW0gPT0gTlVMTCkgfHwg KGluX291dF92cnIgPT0gTlVMTCkpCiAJCXJldHVybjsKIAogCWNvcmVfZnJlZXN5bmMgPSBNT0Rf RlJFRVNZTkNfVE9fQ09SRShtb2RfZnJlZXN5bmMpOwogCi0JZm9yIChzdHJlYW1faW5kZXggPSAw OyBzdHJlYW1faW5kZXggPCBudW1fc3RyZWFtczsgc3RyZWFtX2luZGV4KyspIHsKLQotCQltYXBf aW5kZXggPSBtYXBfaW5kZXhfZnJvbV9zdHJlYW0oY29yZV9mcmVlc3luYywKLQkJCQkJCXN0cmVh bXNbc3RyZWFtX2luZGV4XSk7Ci0KLQkJaWYgKGNvcmVfZnJlZXN5bmMtPm1hcFttYXBfaW5kZXhd LmNhcHMtPnN1cHBvcnRlZCkgewotCi0JCQlsYXN0X3JlbmRlcl90aW1lX2luX3VzID0gY3Vycl90 aW1lX3N0YW1wX2luX3VzIC0KLQkJCQkJY29yZV9mcmVlc3luYy0+bWFwW21hcF9pbmRleF0uc3Rh dGUudGltZS4KLQkJCQkJcHJldl90aW1lX3N0YW1wX2luX3VzOwotCi0JCQkvKiBBZGQgdGhlIHRp bWVzdGFtcHMgdG8gdGhlIGNhY2hlIGFuZCBkZXRlcm1pbmUKLQkJCSAqIHdoZXRoZXIgQlRSIHBy b2dyYW0gaXMgcmVxdWlyZWQKLQkJCSAqLwotCQkJdXBkYXRlX3RpbWVzdGFtcHMoY29yZV9mcmVl c3luYywgc3RyZWFtc1tzdHJlYW1faW5kZXhdLAotCQkJCQltYXBfaW5kZXgsIGxhc3RfcmVuZGVy X3RpbWVfaW5fdXMpOworCWlmIChpbl9vdXRfdnJyLT5zdXBwb3J0ZWQgPT0gZmFsc2UpCisJCXJl dHVybjsKIAotCQkJaWYgKGNvcmVfZnJlZXN5bmMtPm1hcFttYXBfaW5kZXhdLnN0YXRlLmZ1bGxz Y3JlZW4gJiYKLQkJCQljb3JlX2ZyZWVzeW5jLT5tYXBbbWFwX2luZGV4XS51c2VyX2VuYWJsZS4K LQkJCQllbmFibGVfZm9yX2dhbWluZykgeworCS8qIEJlbG93IHRoZSBSYW5nZSBMb2dpYyAqLwog Ci0JCQkJaWYgKGNvcmVfZnJlZXN5bmMtPm1hcFttYXBfaW5kZXhdLmNhcHMtPmJ0cl9zdXBwb3J0 ZWQpIHsKKwkvKiBPbmx5IGV4ZWN1dGUgaWYgaW4gZnVsbHNjcmVlbiBtb2RlICovCisJaWYgKGlu X291dF92cnItPnN0YXRlID09IFZSUl9TVEFURV9BQ1RJVkVfVkFSSUFCTEUgJiYKKwkJCQkJaW5f b3V0X3Zyci0+YnRyLmJ0cl9hY3RpdmUpIHsKKwkJLyogVE9ETzogcGFzcyBpbiBmbGFnIGZvciBQ cmUtRENFMTIgQVNJQworCQkgKiBpbiBvcmRlciBmb3IgZnJhbWUgdmFyaWFibGUgZHVyYXRpb24g dG8gdGFrZSBhZmZlY3QsCisJCSAqIGl0IG5lZWRzIHRvIGJlIGRvbmUgb25lIFZTWU5DIGVhcmx5 LCB3aGljaCBpcyBhdAorCQkgKiBmcmFtZUNvdW50ZXIgPT0gMS4KKwkJICogRm9yIERDRTEyIGFu ZCBuZXdlciB1cGRhdGVzIHRvIFZfVE9UQUxfTUlOL01BWAorCQkgKiB3aWxsIHRha2UgYWZmZWN0 IG9uIGN1cnJlbnQgZnJhbWUKKwkJICovCisJCWlmIChpbl9vdXRfdnJyLT5idHIuZnJhbWVzX3Rv X2luc2VydCA9PQorCQkJCWluX291dF92cnItPmJ0ci5mcmFtZV9jb3VudGVyKSB7CisJCQlpbl9v dXRfdnJyLT5hZGp1c3Qudl90b3RhbF9taW4gPQorCQkJCWNhbGNfdl90b3RhbF9mcm9tX2R1cmF0 aW9uKHN0cmVhbSwKKwkJCQlpbl9vdXRfdnJyLAorCQkJCWluX291dF92cnItPmJ0ci5pbnNlcnRl ZF9kdXJhdGlvbl9pbl91cyk7CisJCQlpbl9vdXRfdnJyLT5hZGp1c3Qudl90b3RhbF9tYXggPQor CQkJCWluX291dF92cnItPmFkanVzdC52X3RvdGFsX21pbjsKKwkJfQogCi0JCQkJCWFwcGx5X2Jl bG93X3RoZV9yYW5nZShjb3JlX2ZyZWVzeW5jLAotCQkJCQkJc3RyZWFtc1tzdHJlYW1faW5kZXhd LCBtYXBfaW5kZXgsCi0JCQkJCQlsYXN0X3JlbmRlcl90aW1lX2luX3VzKTsKLQkJCQl9IGVsc2Ug ewotCQkJCQlhcHBseV9maXhlZF9yZWZyZXNoKGNvcmVfZnJlZXN5bmMsCi0JCQkJCQlzdHJlYW1z W3N0cmVhbV9pbmRleF0sIG1hcF9pbmRleCk7Ci0JCQkJfQotCQkJfQorCQlpZiAoaW5fb3V0X3Zy ci0+YnRyLmZyYW1lX2NvdW50ZXIgPiAwKQorCQkJaW5fb3V0X3Zyci0+YnRyLmZyYW1lX2NvdW50 ZXItLTsKIAotCQkJY29yZV9mcmVlc3luYy0+bWFwW21hcF9pbmRleF0uc3RhdGUudGltZS4KLQkJ CQlwcmV2X3RpbWVfc3RhbXBfaW5fdXMgPSBjdXJyX3RpbWVfc3RhbXBfaW5fdXM7CisJCS8qIFJl c3RvcmUgRnJlZVN5bmMgKi8KKwkJaWYgKGluX291dF92cnItPmJ0ci5mcmFtZV9jb3VudGVyID09 IDApIHsKKwkJCWluX291dF92cnItPmFkanVzdC52X3RvdGFsX21pbiA9CisJCQkJY2FsY192X3Rv dGFsX2Zyb21fcmVmcmVzaChzdHJlYW0sCisJCQkJaW5fb3V0X3Zyci0+bWF4X3JlZnJlc2hfaW5f dWh6KTsKKwkJCWluX291dF92cnItPmFkanVzdC52X3RvdGFsX21heCA9CisJCQkJY2FsY192X3Rv dGFsX2Zyb21fcmVmcmVzaChzdHJlYW0sCisJCQkJaW5fb3V0X3Zyci0+bWluX3JlZnJlc2hfaW5f dWh6KTsKIAkJfQorCX0KKworCS8qIElmIGluIGZ1bGxzY3JlZW4gZnJlZXN5bmMgbW9kZSBvciBp biB2aWRlbywgZG8gbm90IHByb2dyYW0KKwkgKiBzdGF0aWMgc2NyZWVuIHJhbXAgdmFsdWVzCisJ ICovCisJaWYgKGluX291dF92cnItPnN0YXRlID09IFZSUl9TVEFURV9BQ1RJVkVfVkFSSUFCTEUp CisJCWluX291dF92cnItPmZpeGVkLnJhbXBpbmdfYWN0aXZlID0gZmFsc2U7CiAKKwkvKiBHcmFk dWFsIFN0YXRpYyBTY3JlZW4gUmFtcGluZyBMb2dpYyAqLworCS8qIEV4ZWN1dGUgaWYgcmFtcCBp cyBhY3RpdmUgYW5kIHVzZXIgZW5hYmxlZCBmcmVlc3luYyBzdGF0aWMgc2NyZWVuKi8KKwlpZiAo aW5fb3V0X3Zyci0+c3RhdGUgPT0gVlJSX1NUQVRFX0FDVElWRV9GSVhFRCAmJgorCQkJCWluX291 dF92cnItPmZpeGVkLnJhbXBpbmdfYWN0aXZlKSB7CisJCXVwZGF0ZV92X3RvdGFsX2Zvcl9zdGF0 aWNfcmFtcCgKKwkJCQljb3JlX2ZyZWVzeW5jLCBzdHJlYW0sIGluX291dF92cnIpOwogCX0KIH0K IAogdm9pZCBtb2RfZnJlZXN5bmNfZ2V0X3NldHRpbmdzKHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1v ZF9mcmVlc3luYywKLQkJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqKnN0cmVhbXMsIGludCBudW1f c3RyZWFtcywKKwkJY29uc3Qgc3RydWN0IG1vZF92cnJfcGFyYW1zICp2cnIsCiAJCXVuc2lnbmVk IGludCAqdl90b3RhbF9taW4sIHVuc2lnbmVkIGludCAqdl90b3RhbF9tYXgsCiAJCXVuc2lnbmVk IGludCAqZXZlbnRfdHJpZ2dlcnMsCiAJCXVuc2lnbmVkIGludCAqd2luZG93X21pbiwgdW5zaWdu ZWQgaW50ICp3aW5kb3dfbWF4LApAQCAtMTUyMiw3ICs4NjEsNiBAQCB2b2lkIG1vZF9mcmVlc3lu Y19nZXRfc2V0dGluZ3Moc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAogCQl1bnNp Z25lZCBpbnQgKmluc2VydGVkX2ZyYW1lcywKIAkJdW5zaWduZWQgaW50ICppbnNlcnRlZF9kdXJh dGlvbl9pbl91cykKIHsKLQl1bnNpZ25lZCBpbnQgc3RyZWFtX2luZGV4LCBtYXBfaW5kZXg7CiAJ c3RydWN0IGNvcmVfZnJlZXN5bmMgKmNvcmVfZnJlZXN5bmMgPSBOVUxMOwogCiAJaWYgKG1vZF9m cmVlc3luYyA9PSBOVUxMKQpAQCAtMTUzMCwyNSArODY4LDEzIEBAIHZvaWQgbW9kX2ZyZWVzeW5j X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMsCiAKIAljb3Jl X2ZyZWVzeW5jID0gTU9EX0ZSRUVTWU5DX1RPX0NPUkUobW9kX2ZyZWVzeW5jKTsKIAotCWZvciAo c3RyZWFtX2luZGV4ID0gMDsgc3RyZWFtX2luZGV4IDwgbnVtX3N0cmVhbXM7IHN0cmVhbV9pbmRl eCsrKSB7Ci0KLQkJbWFwX2luZGV4ID0gbWFwX2luZGV4X2Zyb21fc3RyZWFtKGNvcmVfZnJlZXN5 bmMsCi0JCQkJCQlzdHJlYW1zW3N0cmVhbV9pbmRleF0pOwotCi0JCWlmIChjb3JlX2ZyZWVzeW5j LT5tYXBbbWFwX2luZGV4XS5jYXBzLT5zdXBwb3J0ZWQpIHsKLQkJCXN0cnVjdCBmcmVlc3luY19z dGF0ZSBzdGF0ZSA9Ci0JCQkJCWNvcmVfZnJlZXN5bmMtPm1hcFttYXBfaW5kZXhdLnN0YXRlOwot CQkJKnZfdG90YWxfbWluID0gc3RhdGUudm1pbjsKLQkJCSp2X3RvdGFsX21heCA9IHN0YXRlLnZt YXg7Ci0JCQkqZXZlbnRfdHJpZ2dlcnMgPSAwOwotCQkJKndpbmRvd19taW4gPSBzdGF0ZS50aW1l Lm1pbl93aW5kb3c7Ci0JCQkqd2luZG93X21heCA9IHN0YXRlLnRpbWUubWF4X3dpbmRvdzsKLQkJ CSpsZmNfbWlkX3BvaW50X2luX3VzID0gc3RhdGUuYnRyLm1pZF9wb2ludF9pbl91czsKLQkJCSpp bnNlcnRlZF9mcmFtZXMgPSBzdGF0ZS5idHIuZnJhbWVzX3RvX2luc2VydDsKLQkJCSppbnNlcnRl ZF9kdXJhdGlvbl9pbl91cyA9Ci0JCQkJCXN0YXRlLmJ0ci5pbnNlcnRlZF9mcmFtZV9kdXJhdGlv bl9pbl91czsKLQkJfQotCisJaWYgKHZyci0+c3VwcG9ydGVkKSB7CisJCSp2X3RvdGFsX21pbiA9 IHZyci0+YWRqdXN0LnZfdG90YWxfbWluOworCQkqdl90b3RhbF9tYXggPSB2cnItPmFkanVzdC52 X3RvdGFsX21heDsKKwkJKmV2ZW50X3RyaWdnZXJzID0gMDsKKwkJKmxmY19taWRfcG9pbnRfaW5f dXMgPSB2cnItPmJ0ci5taWRfcG9pbnRfaW5fdXM7CisJCSppbnNlcnRlZF9mcmFtZXMgPSB2cnIt PmJ0ci5mcmFtZXNfdG9faW5zZXJ0OworCQkqaW5zZXJ0ZWRfZHVyYXRpb25faW5fdXMgPSB2cnIt PmJ0ci5pbnNlcnRlZF9kdXJhdGlvbl9pbl91czsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2luYy9tb2RfZnJlZXN5bmMuaCBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2luYy9tb2RfZnJlZXN5bmMuaAppbmRleCBm MDgzZTE2MTlkYmUuLmJkNzVjYTVmMWNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L21vZHVsZXMvaW5jL21vZF9mcmVlc3luYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvZGlzcGxheS9tb2R1bGVzL2luYy9tb2RfZnJlZXN5bmMuaApAQCAtNTYsOTYgKzU2LDcy IEBACiAKICNpbmNsdWRlICJkbV9zZXJ2aWNlcy5oIgogCi1zdHJ1Y3QgbW9kX2ZyZWVzeW5jICpt b2RfZnJlZXN5bmNfY3JlYXRlKHN0cnVjdCBkYyAqZGMpOwotdm9pZCBtb2RfZnJlZXN5bmNfZGVz dHJveShzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMpOwotCisvLyBBY2Nlc3Mgc3Ry dWN0dXJlcwogc3RydWN0IG1vZF9mcmVlc3luYyB7CiAJaW50IGR1bW15OwogfTsKIAotZW51bSBt b2RfZnJlZXN5bmNfc3RhdGUgewotCUZSRUVTWU5DX1NUQVRFX05PTkUsCi0JRlJFRVNZTkNfU1RB VEVfRlVMTFNDUkVFTiwKLQlGUkVFU1lOQ19TVEFURV9TVEFUSUNfU0NSRUVOLAotCUZSRUVTWU5D X1NUQVRFX1ZJREVPCi19OwotCi1lbnVtIG1vZF9mcmVlc3luY191c2VyX2VuYWJsZV9tYXNrIHsK LQlGUkVFU1lOQ19VU0VSX0VOQUJMRV9TVEFUSUMgPSAweDEsCi0JRlJFRVNZTkNfVVNFUl9FTkFC TEVfVklERU8gPSAweDIsCi0JRlJFRVNZTkNfVVNFUl9FTkFCTEVfR0FNSU5HID0gMHg0Ci19Owot Ci1zdHJ1Y3QgbW9kX2ZyZWVzeW5jX3VzZXJfZW5hYmxlIHsKLQlib29sIGVuYWJsZV9mb3Jfc3Rh dGljOwotCWJvb2wgZW5hYmxlX2Zvcl92aWRlbzsKLQlib29sIGVuYWJsZV9mb3JfZ2FtaW5nOwot fTsKLQorLy8gVE9ETzogUmVmZXJlbmNlcyB0byB0aGlzIHNob3VsZCBiZSByZW1vdmVkCiBzdHJ1 Y3QgbW9kX2ZyZWVzeW5jX2NhcHMgewogCWJvb2wgc3VwcG9ydGVkOwogCXVuc2lnbmVkIGludCBt aW5fcmVmcmVzaF9pbl9taWNyb19oejsKIAl1bnNpZ25lZCBpbnQgbWF4X3JlZnJlc2hfaW5fbWlj cm9faHo7Ci0KLQlib29sIGJ0cl9zdXBwb3J0ZWQ7CiB9OwogCi1zdHJ1Y3QgbW9kX2ZyZWVzeW5j X3BhcmFtcyB7Ci0JZW51bSBtb2RfZnJlZXN5bmNfc3RhdGUgc3RhdGU7Ci0JYm9vbCBlbmFibGU7 Ci0JdW5zaWduZWQgaW50IHVwZGF0ZV9kdXJhdGlvbl9pbl9uczsKLQlib29sIHdpbmRvd2VkX2Z1 bGxzY3JlZW47CitlbnVtIG1vZF92cnJfc3RhdGUgeworCVZSUl9TVEFURV9VTlNVUFBPUlRFRCA9 IDAsCisJVlJSX1NUQVRFX0RJU0FCTEVELAorCVZSUl9TVEFURV9JTkFDVElWRSwKKwlWUlJfU1RB VEVfQUNUSVZFX1ZBUklBQkxFLAorCVZSUl9TVEFURV9BQ1RJVkVfRklYRUQKIH07CiAKLS8qCi0g KiBBZGQgc3RyZWFtIHRvIGJlIHRyYWNrZWQgYnkgbW9kdWxlCi0gKi8KLWJvb2wgbW9kX2ZyZWVz eW5jX2FkZF9zdHJlYW0oc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAotCQlzdHJ1 Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0sIHN0cnVjdCBtb2RfZnJlZXN5bmNfY2FwcyAqY2Fw cyk7CitzdHJ1Y3QgbW9kX2ZyZWVzeW5jX2NvbmZpZyB7CisJZW51bSBtb2RfdnJyX3N0YXRlIHN0 YXRlOworCWJvb2wgcmFtcGluZzsKKwlib29sIGJ0cjsKKwl1bnNpZ25lZCBpbnQgbWluX3JlZnJl c2hfaW5fdWh6OworCXVuc2lnbmVkIGludCBtYXhfcmVmcmVzaF9pbl91aHo7Cit9OwogCi0vKgot ICogUmVtb3ZlIHN0cmVhbSB0byBiZSB0cmFja2VkIGJ5IG1vZHVsZQotICovCi1ib29sIG1vZF9m cmVlc3luY19yZW1vdmVfc3RyZWFtKHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3luYywK LQkJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtKTsKK3N0cnVjdCBtb2RfdnJyX3BhcmFt c19idHIgeworCWJvb2wgYnRyX2VuYWJsZWQ7CisJYm9vbCBidHJfYWN0aXZlOworCXVpbnQzMl90 IG1pZF9wb2ludF9pbl91czsKKwl1aW50MzJfdCBpbnNlcnRlZF9kdXJhdGlvbl9pbl91czsKKwl1 aW50MzJfdCBmcmFtZXNfdG9faW5zZXJ0OworCXVpbnQzMl90IGZyYW1lX2NvdW50ZXI7Cit9Owog Ci0vKgotICogVXBkYXRlIHRoZSBmcmVlc3luYyBzdGF0ZSBmbGFncyBmb3IgZWFjaCBkaXNwbGF5 IGFuZCBwcm9ncmFtCi0gKiBmcmVlc3luYyBhY2NvcmRpbmdseQotICovCi12b2lkIG1vZF9mcmVl c3luY191cGRhdGVfc3RhdGUoc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAotCQlz dHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICoqc3RyZWFtcywgaW50IG51bV9zdHJlYW1zLAotCQlzdHJ1 Y3QgbW9kX2ZyZWVzeW5jX3BhcmFtcyAqZnJlZXN5bmNfcGFyYW1zKTsKK3N0cnVjdCBtb2RfdnJy X3BhcmFtc19maXhlZF9yZWZyZXNoIHsKKwlib29sIGZpeGVkX2FjdGl2ZTsKKwlib29sIHJhbXBp bmdfYWN0aXZlOworCWJvb2wgcmFtcGluZ19kb25lOworCXVpbnQzMl90IHRhcmdldF9yZWZyZXNo X2luX3VoejsKKwl1aW50MzJfdCBmcmFtZV9jb3VudGVyOworfTsKIAotYm9vbCBtb2RfZnJlZXN5 bmNfZ2V0X3N0YXRlKHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3luYywKLQkJc3RydWN0 IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAotCQlzdHJ1Y3QgbW9kX2ZyZWVzeW5jX3BhcmFtcyAq ZnJlZXN5bmNfcGFyYW1zKTsKK3N0cnVjdCBtb2RfdnJyX3BhcmFtcyB7CisJYm9vbCBzdXBwb3J0 ZWQ7CisJZW51bSBtb2RfdnJyX3N0YXRlIHN0YXRlOwogCi1ib29sIG1vZF9mcmVlc3luY19zZXRf dXNlcl9lbmFibGUoc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAotCQlzdHJ1Y3Qg ZGNfc3RyZWFtX3N0YXRlICoqc3RyZWFtcywgaW50IG51bV9zdHJlYW1zLAotCQlzdHJ1Y3QgbW9k X2ZyZWVzeW5jX3VzZXJfZW5hYmxlICp1c2VyX2VuYWJsZSk7CisJdWludDMyX3QgbWluX3JlZnJl c2hfaW5fdWh6OworCXVpbnQzMl90IG1heF9kdXJhdGlvbl9pbl91czsKKwl1aW50MzJfdCBtYXhf cmVmcmVzaF9pbl91aHo7CisJdWludDMyX3QgbWluX2R1cmF0aW9uX2luX3VzOwogCi1ib29sIG1v ZF9mcmVlc3luY19nZXRfdXNlcl9lbmFibGUoc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVz eW5jLAotCQlzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0sCi0JCXN0cnVjdCBtb2RfZnJl ZXN5bmNfdXNlcl9lbmFibGUgKnVzZXJfZW5hYmxlKTsKKwlzdHJ1Y3QgZGNfY3J0Y190aW1pbmdf YWRqdXN0IGFkanVzdDsKIAotYm9vbCBtb2RfZnJlZXN5bmNfZ2V0X3N0YXRpY19yYW1wX2FjdGl2 ZShzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMsCi0JCXN0cnVjdCBkY19zdHJlYW1f c3RhdGUgKnN0cmVhbSwKLQkJYm9vbCAqaXNfcmFtcF9hY3RpdmUpOworCXN0cnVjdCBtb2RfdnJy X3BhcmFtc19maXhlZF9yZWZyZXNoIGZpeGVkOwogCi1ib29sIG1vZF9mcmVlc3luY19vdmVycmlk ZV9taW5fbWF4KHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3luYywKLQkJc3RydWN0IGRj X3N0cmVhbV9zdGF0ZSAqc3RyZWFtcywKLQkJdW5zaWduZWQgaW50IG1pbl9yZWZyZXNoLAotCQl1 bnNpZ25lZCBpbnQgbWF4X3JlZnJlc2gsCi0JCXN0cnVjdCBtb2RfZnJlZXN5bmNfY2FwcyAqY2Fw cyk7CisJc3RydWN0IG1vZF92cnJfcGFyYW1zX2J0ciBidHI7Cit9OwogCi1ib29sIG1vZF9mcmVl c3luY19nZXRfbWluX21heChzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMsCi0JCXN0 cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbSwKLQkJdW5zaWduZWQgaW50ICptaW5fcmVmcmVz aCwKLQkJdW5zaWduZWQgaW50ICptYXhfcmVmcmVzaCk7CitzdHJ1Y3QgbW9kX2ZyZWVzeW5jICpt b2RfZnJlZXN5bmNfY3JlYXRlKHN0cnVjdCBkYyAqZGMpOwordm9pZCBtb2RfZnJlZXN5bmNfZGVz dHJveShzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMpOwogCiBib29sIG1vZF9mcmVl c3luY19nZXRfdm1pbl92bWF4KHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3luYywKLQkJ c3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAorCQljb25zdCBzdHJ1Y3QgZGNfc3RyZWFt X3N0YXRlICpzdHJlYW0sCiAJCXVuc2lnbmVkIGludCAqdm1pbiwKIAkJdW5zaWduZWQgaW50ICp2 bWF4KTsKIApAQCAtMTU0LDE4ICsxMzAsOCBAQCBib29sIG1vZF9mcmVlc3luY19nZXRfdl9wb3Np dGlvbihzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMsCiAJCXVuc2lnbmVkIGludCAq bm9tX3ZfcG9zLAogCQl1bnNpZ25lZCBpbnQgKnZfcG9zKTsKIAotdm9pZCBtb2RfZnJlZXN5bmNf aGFuZGxlX3ZfdXBkYXRlKHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3luYywKLQkJc3Ry dWN0IGRjX3N0cmVhbV9zdGF0ZSAqKnN0cmVhbXMsIGludCBudW1fc3RyZWFtcyk7Ci0KLXZvaWQg bW9kX2ZyZWVzeW5jX25vdGlmeV9tb2RlX2NoYW5nZShzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2Rf ZnJlZXN5bmMsCi0JCXN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKipzdHJlYW1zLCBpbnQgbnVtX3N0 cmVhbXMpOwotCi12b2lkIG1vZF9mcmVlc3luY19wcmVfdXBkYXRlX3BsYW5lX2FkZHJlc3Nlcyhz dHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMsCi0JCXN0cnVjdCBkY19zdHJlYW1fc3Rh dGUgKipzdHJlYW1zLCBpbnQgbnVtX3N0cmVhbXMsCi0JCXVuc2lnbmVkIGludCBjdXJyX3RpbWVf c3RhbXApOwotCiB2b2lkIG1vZF9mcmVlc3luY19nZXRfc2V0dGluZ3Moc3RydWN0IG1vZF9mcmVl c3luYyAqbW9kX2ZyZWVzeW5jLAotCQlzdHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICoqc3RyZWFtcywg aW50IG51bV9zdHJlYW1zLAorCQljb25zdCBzdHJ1Y3QgbW9kX3Zycl9wYXJhbXMgKnZyciwKIAkJ dW5zaWduZWQgaW50ICp2X3RvdGFsX21pbiwgdW5zaWduZWQgaW50ICp2X3RvdGFsX21heCwKIAkJ dW5zaWduZWQgaW50ICpldmVudF90cmlnZ2VycywKIAkJdW5zaWduZWQgaW50ICp3aW5kb3dfbWlu LCB1bnNpZ25lZCBpbnQgKndpbmRvd19tYXgsCkBAIC0xNzMsNCArMTM5LDI0IEBAIHZvaWQgbW9k X2ZyZWVzeW5jX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbW9kX2ZyZWVzeW5jICptb2RfZnJlZXN5bmMs CiAJCXVuc2lnbmVkIGludCAqaW5zZXJ0ZWRfZnJhbWVzLAogCQl1bnNpZ25lZCBpbnQgKmluc2Vy dGVkX2R1cmF0aW9uX2luX3VzKTsKIAordm9pZCBtb2RfZnJlZXN5bmNfYnVpbGRfdnJyX2luZm9w YWNrZXQoc3RydWN0IG1vZF9mcmVlc3luYyAqbW9kX2ZyZWVzeW5jLAorCQljb25zdCBzdHJ1Y3Qg ZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0sCisJCWNvbnN0IHN0cnVjdCBtb2RfdnJyX3BhcmFtcyAq dnJyLAorCQlzdHJ1Y3QgZGNfaW5mb19wYWNrZXQgKmluZm9wYWNrZXQpOworCit2b2lkIG1vZF9m cmVlc3luY19idWlsZF92cnJfcGFyYW1zKHN0cnVjdCBtb2RfZnJlZXN5bmMgKm1vZF9mcmVlc3lu YywKKwkJY29uc3Qgc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtLAorCQlzdHJ1Y3QgbW9k X2ZyZWVzeW5jX2NvbmZpZyAqaW5fY29uZmlnLAorCQlzdHJ1Y3QgbW9kX3Zycl9wYXJhbXMgKmlu X291dF92cnIpOworCit2b2lkIG1vZF9mcmVlc3luY19oYW5kbGVfcHJlZmxpcChzdHJ1Y3QgbW9k X2ZyZWVzeW5jICptb2RfZnJlZXN5bmMsCisJCWNvbnN0IHN0cnVjdCBkY19wbGFuZV9zdGF0ZSAq cGxhbmUsCisJCWNvbnN0IHN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbSwKKwkJdW5zaWdu ZWQgaW50IGN1cnJfdGltZV9zdGFtcF9pbl91cywKKwkJc3RydWN0IG1vZF92cnJfcGFyYW1zICpp bl9vdXRfdnJyKTsKKwordm9pZCBtb2RfZnJlZXN5bmNfaGFuZGxlX3ZfdXBkYXRlKHN0cnVjdCBt b2RfZnJlZXN5bmMgKm1vZF9mcmVlc3luYywKKwkJY29uc3Qgc3RydWN0IGRjX3N0cmVhbV9zdGF0 ZSAqc3RyZWFtLAorCQlzdHJ1Y3QgbW9kX3Zycl9wYXJhbXMgKmluX291dF92cnIpOworCiAjZW5k aWYKLS0gCjIuMTUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==