From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v5,1/2] dmaengine: fsl-edma: extract common fsl-edma code (no changes in behavior intended) From: Angelo Dureghello Message-Id: <20180622094404.10841-1-angelo@sysam.it> Date: Fri, 22 Jun 2018 11:44:03 +0200 To: vinod.koul@linaro.org Cc: dmaengine@vger.kernel.org, linux-m68k@vger.kernel.org, Angelo Dureghello List-ID: VGhpcyBwYXRjaCBhZGRzIGEgbmV3IGZzbC1lZG1hLWNvbW1vbiBtb2R1bGUgdG8gYWxsb3cgbmV3 Cm1jZi1lZG1hIG1vZHVsZSBjb2RlIHRvIHVzZSBtb3N0IG9mIHRoZSBmc2wtZWRtYSBjb2RlLgoK RHVlIHRvIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiBDb2xkRmlyZSBlZG1hICg2NCBjaGFubmVs cykgYW5kCmZzbC1lZG1hICgzMiBjaGFubmVscyksIGFzIHJlZ2lzdGVyIHNldCBvZmZzZXRzIGFu ZCBzb21lIG90aGVyCnBvaW50cyBhcyB0aGUgZGlmZmVyZW50IGludGVycnVwdCBvcmdhbml6YXRp b24gYW5kIG90aGVyIG1pbm9yCnRoaW5ncywgYSBjb21tb24gbW9kdWxlIGNhbiBjb2xsZWN0IG1v c3Qgb2YgdGhlIGNvZGUgZm9yIGJvdGgKMzIgYW5kIDY0IGNoYW5uZWwgZWRtYSBtb2R1bGUgdmVy c2lvbnMuCgpTaWduZWQtb2ZmLWJ5OiBBbmdlbG8gRHVyZWdoZWxsbyA8YW5nZWxvQHN5c2FtLml0 PgotLS0KQ2hhbmdlcyBmb3IgdjI6Ci0gcGF0Y2ggc3BsaXR0ZWQgaW50byA0Ci0gYWRkIGZzbC1l ZG1hLWNvbW1vbiBtb2R1bGUKCkNoYW5nZXMgZm9yIHYzOgpub25lCgpDaGFuZ2VzIGZvciB2NDoK LSBwYXRjaCBzaW1wbGlmaWVkIGZyb20gNC80IGludG8gMi8yCi0gY29sbGVjdGluZyBhbGwgdGhl IGZzbC1lZG1hLXJlbGF0ZWQgY2hhbmdlcwoKQ2hhbmdlcyBmb3IgdjU6Ci0gYWRkIEVYUE9SVF9T WU1CT0xfR1BMIGZvciBhbGwgY29tbW9uIGZ1bmN0aW9ucwotLS0KIGRyaXZlcnMvZG1hL01ha2Vm aWxlICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYyB8IDY4 MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2RtYS9mc2wtZWRtYS1j b21tb24uaCB8IDE3NSArKysrKysrKwogZHJpdmVycy9kbWEvZnNsLWVkbWEuYyAgICAgICAgfCA3 MzkgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCA4 ODkgaW5zZXJ0aW9ucygrKSwgNzEwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9k bWEvZnNsLWVkbWEtY29tbW9uLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBi L2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4IDIwM2E5OWQ2ODMxNS4uNjYwMjJmNTlmY2E0IDEw MDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmls ZQpAQCAtMzEsNyArMzEsNyBAQCBvYmotJChDT05GSUdfRFdfQVhJX0RNQUMpICs9IGR3LWF4aS1k bWFjLwogb2JqLSQoQ09ORklHX0RXX0RNQUNfQ09SRSkgKz0gZHcvCiBvYmotJChDT05GSUdfRVA5 M1hYX0RNQSkgKz0gZXA5M3h4X2RtYS5vCiBvYmotJChDT05GSUdfRlNMX0RNQSkgKz0gZnNsZG1h Lm8KLW9iai0kKENPTkZJR19GU0xfRURNQSkgKz0gZnNsLWVkbWEubworb2JqLSQoQ09ORklHX0ZT TF9FRE1BKSArPSBmc2wtZWRtYS5vIGZzbC1lZG1hLWNvbW1vbi5vCiBvYmotJChDT05GSUdfRlNM X1JBSUQpICs9IGZzbF9yYWlkLm8KIG9iai0kKENPTkZJR19IU1VfRE1BKSArPSBoc3UvCiBvYmot JChDT05GSUdfSU1HX01EQ19ETUEpICs9IGltZy1tZGMtZG1hLm8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5jIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lMzk3NmZkYjI3NTIKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYwpAQCAtMCwwICsx LDY4MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8vIENvcHlyaWdo dCAoYykgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMKKy8vIENvcHlyaWdo dCAoYykgMjAxNyBTeXNhbSwgQW5nZWxvIER1cmVnaGVsbG8gIDxhbmdlbG9Ac3lzYW0uaXQ+Cisv KgorICogZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKKyAqCisgKiBDb21tb24gY29kZSBm b3IgRnJlZXNjYWxlIHRoZSBlZG1hIDMyIG9yIDY0IGNoYW5uZWwgdmVyc2lvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMi IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9y IGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj aW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2lu Y2x1ZGUgImZzbC1lZG1hLWNvbW1vbi5oIgorCisjZGVmaW5lIEVETUFfQ1IJCQkweDAwCisjZGVm aW5lIEVETUFfRVMJCQkweDA0CisjZGVmaW5lIEVETUFfRVJRCQkweDBDCisjZGVmaW5lIEVETUFf RUVJCQkweDE0CisjZGVmaW5lIEVETUFfQ0VFSQkJMHgxOAorI2RlZmluZSBFRE1BX1NFRUkJCTB4 MTkKKyNkZWZpbmUgRURNQV9DRVJRCQkweDFBCisjZGVmaW5lIEVETUFfU0VSUQkJMHgxQgorI2Rl ZmluZSBFRE1BX0NJTlQJCTB4MUYKKyNkZWZpbmUgRURNQV9DRVJSCQkweDFFCisjZGVmaW5lIEVE TUFfU1NSVAkJMHgxRAorI2RlZmluZSBFRE1BX0NETkUJCTB4MUMKKyNkZWZpbmUgRURNQV9JTlRS CQkweDI0CisjZGVmaW5lIEVETUFfRVJSCQkweDJDCisKKyNkZWZpbmUgRURNQTY0X0VSUUgJCTB4 MDgKKyNkZWZpbmUgRURNQTY0X0VFSUgJCTB4MTAKKyNkZWZpbmUgRURNQTY0X1NFUlEJCTB4MTgK KyNkZWZpbmUgRURNQTY0X0NFUlEJCTB4MTkKKyNkZWZpbmUgRURNQTY0X1NFRUkJCTB4MWEKKyNk ZWZpbmUgRURNQTY0X0NFRUkJCTB4MWIKKyNkZWZpbmUgRURNQTY0X0NJTlQJCTB4MWMKKyNkZWZp bmUgRURNQTY0X0NFUlIJCTB4MWQKKyNkZWZpbmUgRURNQTY0X1NTUlQJCTB4MWUKKyNkZWZpbmUg RURNQTY0X0NETkUJCTB4MWYKKyNkZWZpbmUgRURNQTY0X0lOVEgJCTB4MjAKKyNkZWZpbmUgRURN QTY0X0lOVEwJCTB4MjQKKyNkZWZpbmUgRURNQTY0X0VSUkgJCTB4MjgKKyNkZWZpbmUgRURNQTY0 X0VSUkwJCTB4MmMKKworI2RlZmluZSBFRE1BX1RDRAkJMHgxMDAwCisjZGVmaW5lIEVETUFfVENE X1NJWkUJCTMyCisjZGVmaW5lIEVETUFfVENEX01FTV9BTElHTglFRE1BX1RDRF9TSVpFCisKKyNk ZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV84QklUCTAKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9T U0laRV8xNkJJVAlCSVQoMCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVAlCSVQo MSkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV82NEJJVAkoQklUKDEpIHwgQklUKDApKQor I2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzE2QllURQlCSVQoMikKKyNkZWZpbmUgRURNQV9U Q0RfQVRUUl9TU0laRV8zMkJZVEUJKEJJVCgyKSB8IEJJVCgwKSkKKyNkZWZpbmUgRURNQV9UQ0Rf QVRUUl9EU0laRV84QklUCShFRE1BX1RDRF9BVFRSX1NTSVpFXzhCSVQgPDwgOCkKKyNkZWZpbmUg RURNQV9UQ0RfQVRUUl9EU0laRV8xNkJJVAkoRURNQV9UQ0RfQVRUUl9TU0laRV8xNkJJVCA8PCA4 KQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQklUCShFRE1BX1RDRF9BVFRSX1NTSVpF XzMyQklUIDw8IDgpCisjZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfNjRCSVQJKEVETUFfVENE X0FUVFJfU1NJWkVfNjRCSVQgPDwgOCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJZ VEUJKEVETUFfVENEX0FUVFJfU1NJWkVfMTZCWVRFIDw8IDgpCisjZGVmaW5lIEVETUFfVENEX0FU VFJfRFNJWkVfMzJCWVRFCShFRE1BX1RDRF9BVFRSX1NTSVpFXzMyQllURSA8PCA4KQorCisjZGVm aW5lIEVETUFfVENEX0NJVEVSX0NJVEVSKHgpCQkoKHgpICYgR0VOTUFTSygxNCwgMCkpCisjZGVm aW5lIEVETUFfVENEX0JJVEVSX0JJVEVSKHgpCQkoKHgpICYgR0VOTUFTSygxNCwgMCkpCisKKyNk ZWZpbmUgRURNQV9UQ0RfQ1NSX1NUQVJUCQlCSVQoMCkKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX0lO VF9NQUpPUgkJQklUKDEpCisjZGVmaW5lIEVETUFfVENEX0NTUl9JTlRfSEFMRgkJQklUKDIpCisj ZGVmaW5lIEVETUFfVENEX0NTUl9EX1JFUQkJQklUKDMpCisjZGVmaW5lIEVETUFfVENEX0NTUl9F X1NHCQlCSVQoNCkKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX0VfTElOSwkJQklUKDUpCisjZGVmaW5l IEVETUFfVENEX0NTUl9BQ1RJVkUJCUJJVCg2KQorI2RlZmluZSBFRE1BX1RDRF9DU1JfRE9ORQkJ QklUKDcpCisKK3N0cnVjdCBmc2xfZWRtYV9jaGFuICp0b19mc2xfZWRtYV9jaGFuKHN0cnVjdCBk bWFfY2hhbiAqY2hhbikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBmc2xf ZWRtYV9jaGFuLCB2Y2hhbi5jaGFuKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRvX2ZzbF9lZG1h X2NoYW4pOworCitzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqdG9fZnNsX2VkbWFfZGVzYyhzdHJ1Y3Qg dmlydF9kbWFfZGVzYyAqdmQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IGZz bF9lZG1hX2Rlc2MsIHZkZXNjKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRvX2ZzbF9lZG1hX2Rl c2MpOworCisvKgorICogUi9XIGZ1bmN0aW9ucyBmb3IgYmlnLSBvciBsaXR0bGUtZW5kaWFuIHJl Z2lzdGVyczoKKyAqIFRoZSBlRE1BIGNvbnRyb2xsZXIncyBlbmRpYW4gaXMgaW5kZXBlbmRlbnQg b2YgdGhlIENQVSBjb3JlJ3MgZW5kaWFuLgorICogRm9yIHRoZSBiaWctZW5kaWFuIElQIG1vZHVs ZSwgdGhlIG9mZnNldCBmb3IgOC1iaXQgb3IgMTYtYml0IHJlZ2lzdGVycworICogc2hvdWxkIGFs c28gYmUgc3dhcHBlZCBvcHBvc2l0ZSB0byB0aGF0IGluIGxpdHRsZS1lbmRpYW4gSVAuCisgKi8K K3UzMiBlZG1hX3JlYWRsKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEsCisJCQl2b2lkIF9f aW9tZW0gKmFkZHIpCit7CisJaWYgKGVkbWEtPmJpZ19lbmRpYW4pCisJCXJldHVybiBpb3JlYWQz MmJlKGFkZHIpOworCWVsc2UKKwkJcmV0dXJuIGlvcmVhZDMyKGFkZHIpOworfQorRVhQT1JUX1NZ TUJPTF9HUEwoZWRtYV9yZWFkbCk7CisKK3ZvaWQgZWRtYV93cml0ZWIoc3RydWN0IGZzbF9lZG1h X2VuZ2luZSAqZWRtYSwgdTggdmFsLAorCQkJdm9pZCBfX2lvbWVtICphZGRyKQoreworCS8qIHN3 YXAgdGhlIHJlZyBvZmZzZXQgZm9yIHRoZXNlIGluIGJpZy1lbmRpYW4gbW9kZSAqLworCWlmIChl ZG1hLT5iaWdfZW5kaWFuKQorCQlpb3dyaXRlOCh2YWwsICh2b2lkIF9faW9tZW0gKikoKHVuc2ln bmVkIGxvbmcpYWRkciBeIDB4MykpOworCWVsc2UKKwkJaW93cml0ZTgodmFsLCBhZGRyKTsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKGVkbWFfd3JpdGViKTsKKwordm9pZCBlZG1hX3dyaXRldyhzdHJ1 Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1MTYgdmFsLAorCQkJdm9pZCBfX2lvbWVtICphZGRy KQoreworCS8qIHN3YXAgdGhlIHJlZyBvZmZzZXQgZm9yIHRoZXNlIGluIGJpZy1lbmRpYW4gbW9k ZSAqLworCWlmIChlZG1hLT5iaWdfZW5kaWFuKQorCQlpb3dyaXRlMTZiZSh2YWwsICh2b2lkIF9f aW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpYWRkciBeIDB4MikpOworCWVsc2UKKwkJaW93cml0ZTE2 KHZhbCwgYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlZG1hX3dyaXRldyk7CisKK3ZvaWQg ZWRtYV93cml0ZWwoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTMyIHZhbCwKKwkJCXZv aWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoZWRtYS0+YmlnX2VuZGlhbikKKwkJaW93cml0ZTMy YmUodmFsLCBhZGRyKTsKKwllbHNlCisJCWlvd3JpdGUzMih2YWwsIGFkZHIpOworfQorRVhQT1JU X1NZTUJPTF9HUEwoZWRtYV93cml0ZWwpOworCitzdGF0aWMgdm9pZCBmc2xfZWRtYV9maWxsX3Rj ZChzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkICp0Y2QsCisJCQl1MzIgc3JjLCB1MzIgZHN0LCB1MTYg YXR0ciwgdTE2IHNvZmYsCisJCQl1MzIgbmJ5dGVzLCB1MzIgc2xhc3QsIHUxNiBjaXRlciwgdTE2 IGJpdGVyLAorCQkJdTE2IGRvZmYsIHUzMiBkbGFzdF9zZ2EsIGJvb2wgbWFqb3JfaW50LAorCQkJ Ym9vbCBkaXNhYmxlX3JlcSwgYm9vbCBlbmFibGVfc2cpCit7CisJdTE2IGNzciA9IDA7CisKKwkv KgorCSAqIGVETUEgaGFyZHdhcmUgU0dzIHJlcXVpcmUgdGhlIFRDRHMgdG8gYmUgc3RvcmVkIGlu IGxpdHRsZQorCSAqIGVuZGlhbiBmb3JtYXQgaXJyZXNwZWN0aXZlIG9mIHRoZSByZWdpc3RlciBl bmRpYW4gbW9kZWwuCisJICogU28gd2UgcHV0IHRoZSB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGlu IG1lbW9yeSwgd2FpdGluZworCSAqIGZvciBmc2xfZWRtYV9zZXRfdGNkX3JlZ3MgZG9pbmcgdGhl IHN3YXAuCisJICovCisJdGNkLT5zYWRkciA9IGNwdV90b19sZTMyKHNyYyk7CisJdGNkLT5kYWRk ciA9IGNwdV90b19sZTMyKGRzdCk7CisJdGNkLT5hdHRyID0gY3B1X3RvX2xlMTYoYXR0cik7CisJ dGNkLT5zb2ZmID0gY3B1X3RvX2xlMTYoc29mZik7CisJdGNkLT5uYnl0ZXMgPSBjcHVfdG9fbGUz MihuYnl0ZXMpOworCXRjZC0+c2xhc3QgPSBjcHVfdG9fbGUzMihzbGFzdCk7CisJdGNkLT5jaXRl ciA9IGNwdV90b19sZTE2KEVETUFfVENEX0NJVEVSX0NJVEVSKGNpdGVyKSk7CisJdGNkLT5kb2Zm ID0gY3B1X3RvX2xlMTYoZG9mZik7CisJdGNkLT5kbGFzdF9zZ2EgPSBjcHVfdG9fbGUzMihkbGFz dF9zZ2EpOworCXRjZC0+Yml0ZXIgPSBjcHVfdG9fbGUxNihFRE1BX1RDRF9CSVRFUl9CSVRFUihi aXRlcikpOworCisJaWYgKG1ham9yX2ludCkKKwkJY3NyIHw9IEVETUFfVENEX0NTUl9JTlRfTUFK T1I7CisJaWYgKGRpc2FibGVfcmVxKQorCQljc3IgfD0gRURNQV9UQ0RfQ1NSX0RfUkVROworCWlm IChlbmFibGVfc2cpCisJCWNzciB8PSBFRE1BX1RDRF9DU1JfRV9TRzsKKworCXRjZC0+Y3NyID0g Y3B1X3RvX2xlMTYoY3NyKTsKK30KKworc3RhdGljIHZvaWQgZnNsX2VkbWFfZW5hYmxlX3JlcXVl c3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQoreworCXN0cnVjdCBlZG1hX3JlZ3Mg KnJlZ3MgPSAmZnNsX2NoYW4tPmVkbWEtPnJlZ3M7CisJdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFu LmNoYW4uY2hhbl9pZDsKKworCWlmIChmc2xfY2hhbi0+ZWRtYS0+dmVyc2lvbiA9PSB2MSkgewor CQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9TRUVJX1NFRUkoY2gpLCByZWdzLT5z ZWVpKTsKKwkJZWRtYV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIGNoLCByZWdzLT5zZXJxKTsKKwl9 IGVsc2UgeworCQkvKiBDb2xkRmlyZSBpcyBiaWcgZW5kaWFuLCBhbmQgYWNjZXNzZXMgbmF0aXZl bHkKKwkJICogYmlnIGVuZGlhbiBJL08gcGVyaXBoZXJhbHMKKwkJICovCisJCWlvd3JpdGU4KEVE TUFfU0VFSV9TRUVJKGNoKSwgcmVncy0+c2VlaSk7CisJCWlvd3JpdGU4KGNoLCByZWdzLT5zZXJx KTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZnNsX2VkbWFfZ2V0X3RjZF9hdHRyKGVu dW0gZG1hX3NsYXZlX2J1c3dpZHRoIGFkZHJfd2lkdGgpCit7CisJc3dpdGNoIChhZGRyX3dpZHRo KSB7CisJY2FzZSAxOgorCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV84QklUIHwgRURNQV9U Q0RfQVRUUl9EU0laRV84QklUOworCWNhc2UgMjoKKwkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJ WkVfMTZCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzE2QklUOworCWNhc2UgNDoKKwkJcmV0dXJu IEVETUFfVENEX0FUVFJfU1NJWkVfMzJCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQklUOwor CWNhc2UgODoKKwkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfNjRCSVQgfCBFRE1BX1RDRF9B VFRSX0RTSVpFXzY0QklUOworCWRlZmF1bHQ6CisJCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpF XzMyQklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2VkbWFfYWxsb2NfZGVzYyhzdHJ1Y3QgZnNsX2VkbWFfY2hh biAqZnNsX2NoYW4sCisJCWludCBzZ19sZW4pCit7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZz bF9kZXNjOworCWludCBpOworCisJZnNsX2Rlc2MgPSBremFsbG9jKHNpemVvZigqZnNsX2Rlc2Mp ICsKKwkJCXNpemVvZihzdHJ1Y3QgZnNsX2VkbWFfc3dfdGNkKSAqIHNnX2xlbiwgR0ZQX05PV0FJ VCk7CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfZGVzYy0+ZWNoYW4g PSBmc2xfY2hhbjsKKwlmc2xfZGVzYy0+bl90Y2RzID0gc2dfbGVuOworCWZvciAoaSA9IDA7IGkg PCBzZ19sZW47IGkrKykgeworCQlmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QgPSBkbWFfcG9vbF9hbGxv Yyhmc2xfY2hhbi0+dGNkX3Bvb2wsCisJCQkJCUdGUF9OT1dBSVQsICZmc2xfZGVzYy0+dGNkW2ld LnB0Y2QpOworCQlpZiAoIWZzbF9kZXNjLT50Y2RbaV0udnRjZCkKKwkJCWdvdG8gZXJyOworCX0K KwlyZXR1cm4gZnNsX2Rlc2M7CisKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCWRtYV9wb29s X2ZyZWUoZnNsX2NoYW4tPnRjZF9wb29sLCBmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QsCisJCQkJZnNs X2Rlc2MtPnRjZFtpXS5wdGNkKTsKKwlrZnJlZShmc2xfZGVzYyk7CisJcmV0dXJuIE5VTEw7Cit9 CisKK3N0YXRpYyB2b2lkIGZzbF9lZG1hX3NldF90Y2RfcmVncyhzdHJ1Y3QgZnNsX2VkbWFfY2hh biAqZnNsX2NoYW4sCisJCQkgICBzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkICp0Y2QpCit7CisJc3Ry dWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSA9IGZzbF9jaGFuLT5lZG1hOworCXN0cnVjdCBmc2xf ZWRtYV9od190Y2QgKm10Y2QgPSBlZG1hLT5yZWdzLnRjZAorCQkJCQkrIGZzbF9jaGFuLT52Y2hh bi5jaGFuLmNoYW5faWQ7CisKKwkvKgorCSAqIFRDRCBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgaW4g c3RydWN0IGZzbF9lZG1hX2h3X3RjZCBpbiBsaXR0bGUKKwkgKiBlbmRpYW4gZm9ybWF0LiBIb3dl dmVyLCB3ZSBuZWVkIHRvIGxvYWQgdGhlIFRDRCByZWdpc3RlcnMgaW4KKwkgKiBiaWctIG9yIGxp dHRsZS1lbmRpYW4gb2JleWluZyB0aGUgZURNQSBlbmdpbmUgbW9kZWwgZW5kaWFuLgorCSAqLwor CWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+c2FkZHIpLCAmbXRjZC0+c2FkZHIp OworCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+ZGFkZHIpLCAmbXRjZC0+ZGFk ZHIpOworCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+YXR0ciksICZtdGNkLT5h dHRyKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPnNvZmYpLCAmbXRjZC0+ c29mZik7CisJZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5uYnl0ZXMpLCAmbXRj ZC0+bmJ5dGVzKTsKKwllZG1hX3dyaXRlbChlZG1hLCBsZTMyX3RvX2NwdSh0Y2QtPnNsYXN0KSwg Jm10Y2QtPnNsYXN0KTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmNpdGVy KSwgJm10Y2QtPmNpdGVyKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmJp dGVyKSwgJm10Y2QtPmJpdGVyKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2Qt PmRvZmYpLCAmbXRjZC0+ZG9mZik7CisJZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNk LT5kbGFzdF9zZ2EpLCAmbXRjZC0+ZGxhc3Rfc2dhKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2 X3RvX2NwdSh0Y2QtPmNzciksICZtdGNkLT5jc3IpOworfQorCitzdGF0aWMgc2l6ZV90IGZzbF9l ZG1hX2Rlc2NfcmVzaWR1ZShzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCisJCXN0cnVj dCB2aXJ0X2RtYV9kZXNjICp2ZGVzYywgYm9vbCBpbl9wcm9ncmVzcykKK3sKKwlzdHJ1Y3QgZnNs X2VkbWFfZGVzYyAqZWRlc2MgPSBmc2xfY2hhbi0+ZWRlc2M7CisJc3RydWN0IGVkbWFfcmVncyAq cmVncyA9ICZmc2xfY2hhbi0+ZWRtYS0+cmVnczsKKwl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4u Y2hhbi5jaGFuX2lkOworCWVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXIgPSBmc2xfY2hh bi0+ZGlyOworCWRtYV9hZGRyX3QgY3VyX2FkZHIsIGRtYV9hZGRyOworCXNpemVfdCBsZW4sIHNp emU7CisJaW50IGk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIHRvdGFsIHNpemUgaW4gdGhpcyBkZXNj ICovCisJZm9yIChsZW4gPSBpID0gMDsgaSA8IGZzbF9jaGFuLT5lZGVzYy0+bl90Y2RzOyBpKysp CisJCWxlbiArPSBsZTMyX3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPm5ieXRlcykKKwkJCSog bGUxNl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5iaXRlcik7CisKKwlpZiAoIWluX3Byb2dy ZXNzKQorCQlyZXR1cm4gbGVuOworCisJaWYgKGRpciA9PSBETUFfTUVNX1RPX0RFVikKKwkJY3Vy X2FkZHIgPSBlZG1hX3JlYWRsKGZzbF9jaGFuLT5lZG1hLCAmcmVncy0+dGNkW2NoXS5zYWRkcik7 CisJZWxzZQorCQljdXJfYWRkciA9IGVkbWFfcmVhZGwoZnNsX2NoYW4tPmVkbWEsICZyZWdzLT50 Y2RbY2hdLmRhZGRyKTsKKworCS8qIGZpZ3VyZSBvdXQgdGhlIGZpbmlzaGVkIGFuZCBjYWxjdWxh dGUgdGhlIHJlc2lkdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVkZXNjLT5uX3Rj ZHM7IGkrKykgeworCQlzaXplID0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5uYnl0 ZXMpCisJCQkqIGxlMTZfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+Yml0ZXIpOworCQlpZiAo ZGlyID09IERNQV9NRU1fVE9fREVWKQorCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShlZGVzYy0+ dGNkW2ldLnZ0Y2QtPnNhZGRyKTsKKwkJZWxzZQorCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShl ZGVzYy0+dGNkW2ldLnZ0Y2QtPmRhZGRyKTsKKworCQlsZW4gLT0gc2l6ZTsKKwkJaWYgKGN1cl9h ZGRyID49IGRtYV9hZGRyICYmIGN1cl9hZGRyIDwgZG1hX2FkZHIgKyBzaXplKSB7CisJCQlsZW4g Kz0gZG1hX2FkZHIgKyBzaXplIC0gY3VyX2FkZHI7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJl dHVybiBsZW47Cit9CisKK3ZvaWQgZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xf ZWRtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9j aGFuLT5lZG1hLT5yZWdzOworCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7 CisKKwlpZiAoZnNsX2NoYW4tPmVkbWEtPnZlcnNpb24gPT0gdjEpIHsKKwkJZWRtYV93cml0ZWIo ZnNsX2NoYW4tPmVkbWEsIGNoLCByZWdzLT5jZXJxKTsKKwkJZWRtYV93cml0ZWIoZnNsX2NoYW4t PmVkbWEsIEVETUFfQ0VFSV9DRUVJKGNoKSwgcmVncy0+Y2VlaSk7CisJfSBlbHNlIHsKKwkJLyog Q29sZEZpcmUgaXMgYmlnIGVuZGlhbiwgYW5kIGFjY2Vzc2VzIG5hdGl2ZWx5CisJCSAqIGJpZyBl bmRpYW4gSS9PIHBlcmlwaGVyYWxzCisJCSAqLworCQlpb3dyaXRlOChjaCwgcmVncy0+Y2VycSk7 CisJCWlvd3JpdGU4KEVETUFfQ0VFSV9DRUVJKGNoKSwgcmVncy0+Y2VlaSk7CisJfQorfQorRVhQ T1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KTsKKwordm9pZCBmc2xfZWRt YV9jbGVhbnVwX3ZjaGFuKHN0cnVjdCBkbWFfZGV2aWNlICpkbWFkZXYpCit7CisJc3RydWN0IGZz bF9lZG1hX2NoYW4gKmNoYW4sICpfY2hhbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShj aGFuLCBfY2hhbiwKKwkJCQkmZG1hZGV2LT5jaGFubmVscywgdmNoYW4uY2hhbi5kZXZpY2Vfbm9k ZSkgeworCQlsaXN0X2RlbCgmY2hhbi0+dmNoYW4uY2hhbi5kZXZpY2Vfbm9kZSk7CisJCXRhc2ts ZXRfa2lsbCgmY2hhbi0+dmNoYW4udGFzayk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNs X2VkbWFfY2xlYW51cF92Y2hhbik7CisKK3ZvaWQgZnNsX2VkbWFfZnJlZV9kZXNjKHN0cnVjdCB2 aXJ0X2RtYV9kZXNjICp2ZGVzYykKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqbWNmX2Rlc2M7 CisJaW50IGk7CisKKwltY2ZfZGVzYyA9IHRvX2ZzbF9lZG1hX2Rlc2ModmRlc2MpOworCisJZm9y IChpID0gMDsgaSA8IG1jZl9kZXNjLT5uX3RjZHM7IGkrKykKKwkJZG1hX3Bvb2xfZnJlZShtY2Zf ZGVzYy0+ZWNoYW4tPnRjZF9wb29sLCBtY2ZfZGVzYy0+dGNkW2ldLnZ0Y2QsCisJCQkJbWNmX2Rl c2MtPnRjZFtpXS5wdGNkKTsKKwlrZnJlZShtY2ZfZGVzYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChmc2xfZWRtYV9mcmVlX2Rlc2MpOworCitpbnQgZnNsX2VkbWFfYWxsb2NfY2hhbl9yZXNvdXJj ZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2Zf Y2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisKKwltY2ZfY2hhbi0+dGNkX3Bvb2wgPSBk bWFfcG9vbF9jcmVhdGUoInRjZF9wb29sIiwgY2hhbi0+ZGV2aWNlLT5kZXYsCisJCQlzaXplb2Yo c3RydWN0IGZzbF9lZG1hX2h3X3RjZCksIEVETUFfVENEX01FTV9BTElHTiwgMCk7CisKKwlyZXR1 cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2Vz KTsKKwordm9pZCBmc2xfZWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAq Y2hhbikKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9j aGFuKGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGhlYWQpOworCisJ c3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJZnNsX2Vk bWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKKwlmc2xfY2hhbi0+ZWRlc2MgPSBOVUxMOwor CXZjaGFuX2dldF9hbGxfZGVzY3JpcHRvcnMoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisKKwl2 Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOworCWRtYV9w b29sX2Rlc3Ryb3koZnNsX2NoYW4tPnRjZF9wb29sKTsKKwlmc2xfY2hhbi0+dGNkX3Bvb2wgPSBO VUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyk7 CisKK2ludCBmc2xfZWRtYV9zbGF2ZV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJ ICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY29uZmlnKQoreworCXN0cnVjdCBmc2xfZWRtYV9j aGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisKKwltZW1jcHkoJmZzbF9j aGFuLT5jZmcsIGNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKKworCXJldHVybiAwOworfQorRVhQ T1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfc2xhdmVfY29uZmlnKTsKKworc3RydWN0IGRtYV9hc3lu Y190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCisJCXN0cnVjdCBkbWFf Y2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCisJCXNpemVf dCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1 bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9 IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNj OworCWRtYV9hZGRyX3QgZG1hX2J1Zl9uZXh0OworCWludCBzZ19sZW4sIGk7CisJdTMyIHNyY19h ZGRyLCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVzLCBhdHRyOworCXUxNiBzb2ZmLCBkb2ZmLCBp dGVyOworCisJaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZGlyZWN0aW9uKSkKKwkJcmV0dXJuIE5V TEw7CisKKwlzZ19sZW4gPSBidWZfbGVuIC8gcGVyaW9kX2xlbjsKKwlmc2xfZGVzYyA9IGZzbF9l ZG1hX2FsbG9jX2Rlc2MoZnNsX2NoYW4sIHNnX2xlbik7CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0 dXJuIE5VTEw7CisKKwlmc2xfZGVzYy0+aXNjeWNsaWMgPSB0cnVlOworCWZzbF9jaGFuLT5kaXIg PSBkaXJlY3Rpb247CisKKwlkbWFfYnVmX25leHQgPSBkbWFfYWRkcjsKKworCWZvciAoaSA9IDA7 IGkgPCBzZ19sZW47IGkrKykgeworCQlpZiAoZG1hX2J1Zl9uZXh0ID49IGRtYV9hZGRyICsgYnVm X2xlbikKKwkJCWRtYV9idWZfbmV4dCA9IGRtYV9hZGRyOworCisJCS8qIGdldCBuZXh0IHNnJ3Mg cGh5c2ljYWwgYWRkcmVzcyAqLworCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUg c2dfbGVuXS5wdGNkOworCisJCWlmIChkaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJ CW5ieXRlcyA9IGZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGggKgorCQkJCSBmc2xfY2hhbi0+ Y2ZnLmRzdF9tYXhidXJzdDsKKwkJCXNyY19hZGRyID0gZG1hX2J1Zl9uZXh0OworCQkJZHN0X2Fk ZHIgPSBmc2xfY2hhbi0+Y2ZnLmRzdF9hZGRyOworCQkJc29mZiA9IGZzbF9jaGFuLT5jZmcuZHN0 X2FkZHJfd2lkdGg7CisJCQlkb2ZmID0gMDsKKwkJCWF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0 dHIoCisJCQkJZnNsX2NoYW4tPmNmZy5kc3RfYWRkcl93aWR0aCk7CisJCX0gZWxzZSB7CisJCQlu Ynl0ZXMgPSBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoICoKKwkJCQkgZnNsX2NoYW4tPmNm Zy5zcmNfbWF4YnVyc3Q7CisJCQlzcmNfYWRkciA9ICBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyOwor CQkJZHN0X2FkZHIgPSBkbWFfYnVmX25leHQ7CisJCQlzb2ZmID0gMDsKKwkJCWRvZmYgPSBmc2xf Y2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoOworCQkJYXR0ciA9IGZzbF9lZG1hX2dldF90Y2RfYXR0 cigKKwkJCQlmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoKTsKKwkJfQorCisJCWl0ZXIgPSBw ZXJpb2RfbGVuIC8gbmJ5dGVzOworCisJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2Rb aV0udnRjZCwKKwkJCQkgIHNyY19hZGRyLCBkc3RfYWRkciwKKwkJCQkgIGF0dHIsIHNvZmYsIG5i eXRlcywgMCwgaXRlciwKKwkJCQkgIGl0ZXIsIGRvZmYsIGxhc3Rfc2csIHRydWUsIGZhbHNlLCB0 cnVlKTsKKwkJZG1hX2J1Zl9uZXh0ICs9IHBlcmlvZF9sZW47CisJfQorCisJcmV0dXJuIHZjaGFu X3R4X3ByZXAoJmZzbF9jaGFuLT52Y2hhbiwgJmZzbF9kZXNjLT52ZGVzYywgZmxhZ3MpOworfQor RVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfcHJlcF9kbWFfY3ljbGljKTsKKworc3RydWN0IGRt YV9hc3luY190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX3NsYXZlX3NnKAorCQlzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQl1bnNpZ25lZCBpbnQg c2dfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1bnNpZ25l ZCBsb25nIGZsYWdzLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpm c2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2Mg KmZzbF9kZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdTMyIHNyY19hZGRyLCBkc3Rf YWRkciwgbGFzdF9zZywgbmJ5dGVzLCBhdHRyOworCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOworCWlu dCBpOworCisJaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZGlyZWN0aW9uKSkKKwkJcmV0dXJuIE5V TEw7CisKKwlmc2xfZGVzYyA9IGZzbF9lZG1hX2FsbG9jX2Rlc2MoZnNsX2NoYW4sIHNnX2xlbik7 CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfZGVzYy0+aXNjeWNsaWMg PSBmYWxzZTsKKwlmc2xfY2hhbi0+ZGlyID0gZGlyZWN0aW9uOworCisJZm9yX2VhY2hfc2coc2ds LCBzZywgc2dfbGVuLCBpKSB7CisJCS8qIGdldCBuZXh0IHNnJ3MgcGh5c2ljYWwgYWRkcmVzcyAq LworCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUgc2dfbGVuXS5wdGNkOworCisJ CWlmIChkaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJCW5ieXRlcyA9IGZzbF9jaGFu LT5jZmcuZHN0X2FkZHJfd2lkdGggKgorCQkJCSBmc2xfY2hhbi0+Y2ZnLmRzdF9tYXhidXJzdDsK KwkJCXNyY19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQkJZHN0X2FkZHIgPSBmc2xfY2hh bi0+Y2ZnLmRzdF9hZGRyOworCQkJc29mZiA9IGZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGg7 CisJCQlkb2ZmID0gMDsKKwkJCWF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0dHIoCisJCQkJCWZz bF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGgpOworCisJCX0gZWxzZSB7CisJCQluYnl0ZXMgPSBm c2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoICoKKwkJCQkgZnNsX2NoYW4tPmNmZy5zcmNfbWF4 YnVyc3Q7CisJCQlzcmNfYWRkciA9IGZzbF9jaGFuLT5jZmcuc3JjX2FkZHI7CisJCQlkc3RfYWRk ciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCXNvZmYgPSAwOworCQkJZG9mZiA9IGZzbF9jaGFu LT5jZmcuc3JjX2FkZHJfd2lkdGg7CisJCQlhdHRyID0gZnNsX2VkbWFfZ2V0X3RjZF9hdHRyKAor CQkJCQlmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoKTsKKwkJfQorCisJCWl0ZXIgPSBzZ19k bWFfbGVuKHNnKSAvIG5ieXRlczsKKworCQlpZiAoaSA8IHNnX2xlbiAtIDEpIHsKKwkJCWxhc3Rf c2cgPSBmc2xfZGVzYy0+dGNkWyhpICsgMSldLnB0Y2Q7CisJCQlmc2xfZWRtYV9maWxsX3RjZChm c2xfZGVzYy0+dGNkW2ldLnZ0Y2QsCisJCQkJCSAgc3JjX2FkZHIsCisJCQkJCSAgZHN0X2FkZHIs IGF0dHIsIHNvZmYsCisJCQkJCSAgbmJ5dGVzLCAwLCBpdGVyLCBpdGVyLCBkb2ZmLCBsYXN0X3Nn LAorCQkJCQkgIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CisJCX0gZWxzZSB7CisJCQlsYXN0X3NnID0g MDsKKwkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2RbaV0udnRjZCwKKwkJCQkJICBz cmNfYWRkciwKKwkJCQkJICBkc3RfYWRkciwgYXR0ciwgc29mZiwKKwkJCQkJICBuYnl0ZXMsIDAs IGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rfc2csCisJCQkJCSAgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOwor CQl9CisJfQorCisJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJmZzbF9jaGFuLT52Y2hhbiwgJmZzbF9k ZXNjLT52ZGVzYywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfcHJlcF9z bGF2ZV9zZyk7CisKK2VudW0gZG1hX3N0YXR1cyBmc2xfZWRtYV90eF9zdGF0dXMoc3RydWN0IGRt YV9jaGFuICpjaGFuLAorCQlkbWFfY29va2llX3QgY29va2llLCBzdHJ1Y3QgZG1hX3R4X3N0YXRl ICp0eHN0YXRlKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9l ZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjOworCWVudW0gZG1h X3N0YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0YXR1cyA9IGRtYV9j b29raWVfc3RhdHVzKGNoYW4sIGNvb2tpZSwgdHhzdGF0ZSk7CisJaWYgKHN0YXR1cyA9PSBETUFf Q09NUExFVEUpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoIXR4c3RhdGUpCisJCXJldHVybiBm c2xfY2hhbi0+c3RhdHVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5s b2NrLCBmbGFncyk7CisJdmRlc2MgPSB2Y2hhbl9maW5kX2Rlc2MoJmZzbF9jaGFuLT52Y2hhbiwg Y29va2llKTsKKwlpZiAoZnNsX2NoYW4tPmVkZXNjICYmIGNvb2tpZSA9PSBmc2xfY2hhbi0+ZWRl c2MtPnZkZXNjLnR4LmNvb2tpZSkKKwkJdHhzdGF0ZS0+cmVzaWR1ZSA9CisJCQkJZnNsX2VkbWFf ZGVzY19yZXNpZHVlKGZzbF9jaGFuLCB2ZGVzYywgdHJ1ZSk7CisJZWxzZSBpZiAodmRlc2MpCisJ CXR4c3RhdGUtPnJlc2lkdWUgPQorCQkJCWZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShmc2xfY2hhbiwg dmRlc2MsIGZhbHNlKTsKKwllbHNlCisJCXR4c3RhdGUtPnJlc2lkdWUgPSAwOworCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKworCXJldHVy biBmc2xfY2hhbi0+c3RhdHVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfdHhfc3Rh dHVzKTsKKworaW50IGZzbF9lZG1hX3BhdXNlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlz dHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZj aGFuLmxvY2ssIGZsYWdzKTsKKwlpZiAoZnNsX2NoYW4tPmVkZXNjKSB7CisJCWZzbF9lZG1hX2Rp c2FibGVfcmVxdWVzdChmc2xfY2hhbik7CisJCWZzbF9jaGFuLT5zdGF0dXMgPSBETUFfUEFVU0VE OworCQlmc2xfY2hhbi0+aWRsZSA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lN Qk9MX0dQTChmc2xfZWRtYV9wYXVzZSk7CisKK2ludCBmc2xfZWRtYV9yZXN1bWUoc3RydWN0IGRt YV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2Zz bF9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCWlmIChmc2xfY2hhbi0+ZWRl c2MpIHsKKwkJZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3QoZnNsX2NoYW4pOworCQlmc2xfY2hhbi0+ c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOworCQlmc2xfY2hhbi0+aWRsZSA9IGZhbHNlOworCX0K KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwor CXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfcmVzdW1lKTsKKworaW50 IGZzbF9lZG1hX3Rlcm1pbmF0ZV9hbGwoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVj dCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQoaGVhZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwlmc2xfZWRtYV9kaXNhYmxlX3JlcXVl c3QoZnNsX2NoYW4pOworCWZzbF9jaGFuLT5lZGVzYyA9IE5VTEw7CisJZnNsX2NoYW4tPmlkbGUg PSB0cnVlOworCXZjaGFuX2dldF9hbGxfZGVzY3JpcHRvcnMoJmZzbF9jaGFuLT52Y2hhbiwgJmhl YWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFn cyk7CisJdmNoYW5fZG1hX2Rlc2NfZnJlZV9saXN0KCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsK KwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbF9lZG1hX3Rlcm1pbmF0ZV9hbGwp OworCit2b2lkIGZzbF9lZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQor eworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2ZfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hh bik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2ZfY2hh bi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCisJaWYgKHZjaGFuX2lzc3VlX3BlbmRpbmcoJm1jZl9j aGFuLT52Y2hhbikgJiYgIW1jZl9jaGFuLT5lZGVzYykKKwkJZnNsX2VkbWFfeGZlcl9kZXNjKG1j Zl9jaGFuKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jZl9jaGFuLT52Y2hhbi5sb2Nr LCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV9pc3N1ZV9wZW5kaW5nKTsK Kwordm9pZCBmc2xfZWRtYV94ZmVyX2Rlc2Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFu KQoreworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYzsKKworCXZkZXNjID0gdmNoYW5fbmV4 dF9kZXNjKCZmc2xfY2hhbi0+dmNoYW4pOworCWlmICghdmRlc2MpCisJCXJldHVybjsKKwlmc2xf Y2hhbi0+ZWRlc2MgPSB0b19mc2xfZWRtYV9kZXNjKHZkZXNjKTsKKwlmc2xfZWRtYV9zZXRfdGNk X3JlZ3MoZnNsX2NoYW4sIGZzbF9jaGFuLT5lZGVzYy0+dGNkWzBdLnZ0Y2QpOworCWZzbF9lZG1h X2VuYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKKwlmc2xfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BS T0dSRVNTOworCWZzbF9jaGFuLT5pZGxlID0gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChm c2xfZWRtYV94ZmVyX2Rlc2MpOworCisvKgorICogT24gdGhlIDMyIGNoYW5uZWxzIFZ5YnJpZC9t cGM1Nzd4IGVkbWEgdmVyc2lvbiAoaGVyZSBjYWxsZWQgInYxIiksCisgKiByZWdpc3RlciBvZmZz ZXRzIGFyZSBkaWZmZXJlbnQgY29tcGFyZWQgdG8gQ29sZEZpcmUgbWNmNTQ0MXggNjQgY2hhbm5l bHMKKyAqIGVkbWEgKGhlcmUgY2FsbGVkICJ2MiIpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0 cyB1cCByZWdpc3RlciBvZmZzZXRzIGFzIHBlciBwcm9wZXIgZGVjbGFyZWQgdmVyc2lvbgorICog c28gbXVzdCBiZSBjYWxsZWQgaW4geHh4X2VkbWFfcHJvYmUoKSBqdXN0IGFmdGVyIHNldHRpbmcg dGhlCisgKiBlZG1hICJ2ZXJzaW9uIiBhbmQgIm1lbWJhc2UiIGFwcHJvcHJpYXRlbHkuCisgKi8K K3ZvaWQgZnNsX2VkbWFfc2V0dXBfcmVncyhzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hKQor eworCWVkbWEtPnJlZ3MuY3IgPSBlZG1hLT5tZW1iYXNlICsgRURNQV9DUjsKKwllZG1hLT5yZWdz LmVzID0gZWRtYS0+bWVtYmFzZSArIEVETUFfRVM7CisJZWRtYS0+cmVncy5lcnFsID0gZWRtYS0+ bWVtYmFzZSArIEVETUFfRVJROworCWVkbWEtPnJlZ3MuZWVpbCA9IGVkbWEtPm1lbWJhc2UgKyBF RE1BX0VFSTsKKworCWVkbWEtPnJlZ3Muc2VycSA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZl cnNpb24gPT0gdjEpID8KKwkJCUVETUFfU0VSUSA6IEVETUE2NF9TRVJRKTsKKwllZG1hLT5yZWdz LmNlcnEgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1B X0NFUlEgOiBFRE1BNjRfQ0VSUSk7CisJZWRtYS0+cmVncy5zZWVpID0gZWRtYS0+bWVtYmFzZSAr ICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJRURNQV9TRUVJIDogRURNQTY0X1NFRUkpOwor CWVkbWEtPnJlZ3MuY2VlaSA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEp ID8KKwkJCUVETUFfQ0VFSSA6IEVETUE2NF9DRUVJKTsKKwllZG1hLT5yZWdzLmNpbnQgPSBlZG1h LT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1BX0NJTlQgOiBFRE1B NjRfQ0lOVCk7CisJZWRtYS0+cmVncy5jZXJyID0gZWRtYS0+bWVtYmFzZSArICgoZWRtYS0+dmVy c2lvbiA9PSB2MSkgPworCQkJRURNQV9DRVJSIDogRURNQTY0X0NFUlIpOworCWVkbWEtPnJlZ3Mu c3NydCA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFf U1NSVCA6IEVETUE2NF9TU1JUKTsKKwllZG1hLT5yZWdzLmNkbmUgPSBlZG1hLT5tZW1iYXNlICsg KChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1BX0NETkUgOiBFRE1BNjRfQ0RORSk7CisJ ZWRtYS0+cmVncy5pbnRsID0gZWRtYS0+bWVtYmFzZSArICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkg PworCQkJRURNQV9JTlRSIDogRURNQTY0X0lOVEwpOworCWVkbWEtPnJlZ3MuZXJybCA9IGVkbWEt Pm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFfRVJSIDogRURNQTY0 X0VSUkwpOworCisJaWYgKGVkbWEtPnZlcnNpb24gPT0gdjIpIHsKKwkJZWRtYS0+cmVncy5lcnFo ID0gZWRtYS0+bWVtYmFzZSArIEVETUE2NF9FUlFIOworCQllZG1hLT5yZWdzLmVlaWggPSBlZG1h LT5tZW1iYXNlICsgRURNQTY0X0VFSUg7CisJCWVkbWEtPnJlZ3MuZXJyaCA9IGVkbWEtPm1lbWJh c2UgKyBFRE1BNjRfRVJSSDsKKwkJZWRtYS0+cmVncy5pbnRoID0gZWRtYS0+bWVtYmFzZSArIEVE TUE2NF9JTlRIOworCX0KKworCWVkbWEtPnJlZ3MudGNkID0gZWRtYS0+bWVtYmFzZSArIEVETUFf VENEOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfc2V0dXBfcmVncyk7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uaCBiL2RyaXZlcnMvZG1hL2ZzbC1lZG1h LWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTU2Zjll NTllNTBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmgK QEAgLTAsMCArMSwxNzUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICov CisvKgorICogZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKKyAqCisgKiBDb3B5cmlnaHQg MjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAx OCBBbmdlbG8gRHVyZWdoZWxsbyA8YW5nZWxvQHN5c2FtLml0PgorICoKKyAqIENvbW1vbiBjb2Rl IGZvciBGcmVlc2NhbGUgdGhlIGVkbWEgMzIgb3IgNjQgY2hhbm5lbCB2ZXJzaW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBp cyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mg b3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisj aWZuZGVmIF9GU0xfRURNQV9DT01NT05fSF8KKyNkZWZpbmUgX0ZTTF9FRE1BX0NPTU1PTl9IXwor CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgInZpcnQtZG1hLmgiCisKKyNk ZWZpbmUgRE1BTVVYX05SCQkyCisKKyNkZWZpbmUgRURNQV9DUl9FREJHCQlCSVQoMSkKKyNkZWZp bmUgRURNQV9DUl9FUkNBCQlCSVQoMikKKyNkZWZpbmUgRURNQV9DUl9FUkdBCQlCSVQoMykKKyNk ZWZpbmUgRURNQV9DUl9IT0UJCUJJVCg0KQorI2RlZmluZSBFRE1BX0NSX0hBTFQJCUJJVCg1KQor I2RlZmluZSBFRE1BX0NSX0NMTQkJQklUKDYpCisjZGVmaW5lIEVETUFfQ1JfRU1MTQkJQklUKDcp CisjZGVmaW5lIEVETUFfQ1JfRUNYCQlCSVQoMTYpCisjZGVmaW5lIEVETUFfQ1JfQ1gJCUJJVCgx NykKKworI2RlZmluZSBFRE1BX1NFRUlfU0VFSSh4KQkoKHgpICYgR0VOTUFTSyg2LCAwKSkKKyNk ZWZpbmUgRURNQV9DRUVJX0NFRUkoeCkJKCh4KSAmIEdFTk1BU0soNiwgMCkpCisjZGVmaW5lIEVE TUFfQ0lOVF9DSU5UKHgpCSgoeCkgJiBHRU5NQVNLKDYsIDApKQorI2RlZmluZSBFRE1BX0NFUlJf Q0VSUih4KQkoKHgpICYgR0VOTUFTSyg2LCAwKSkKKworI2RlZmluZSBGU0xfRURNQV9CVVNXSURU SFMJKEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKSB8IFwKKwkJCQkgQklUKERNQV9TTEFW RV9CVVNXSURUSF8yX0JZVEVTKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURUSF80X0JZ VEVTKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURUSF84X0JZVEVTKSkKKworZW51bSBm c2xfZWRtYV9wbV9zdGF0ZSB7CisJUlVOTklORyA9IDAsCisJU1VTUEVOREVELAorfTsKKworLyoK KyAqIFRoaXMgYXJlIHRjZCByZWdzLCBlcXVhbCBmb3IgYm90aCB2MzIgYW5kIHY2NAorICovCitz dHJ1Y3QgZnNsX2VkbWFfaHdfdGNkIHsKKwlfX2xlMzIJc2FkZHI7CisJX19sZTE2CXNvZmY7CisJ X19sZTE2CWF0dHI7CisJX19sZTMyCW5ieXRlczsKKwlfX2xlMzIJc2xhc3Q7CisJX19sZTMyCWRh ZGRyOworCV9fbGUxNglkb2ZmOworCV9fbGUxNgljaXRlcjsKKwlfX2xlMzIJZGxhc3Rfc2dhOwor CV9fbGUxNgljc3I7CisJX19sZTE2CWJpdGVyOworfTsKKworLyoKKyAqIFRoaXMgYXJlIGlvbWVt IHBvaW50ZXJzLCBmb3IgYm90aCB2MzIgYW5kIHY2NC4KKyAqLworc3RydWN0IGVkbWFfcmVncyB7 CisJdm9pZCBfX2lvbWVtICpjcjsKKwl2b2lkIF9faW9tZW0gKmVzOworCXZvaWQgX19pb21lbSAq ZXJxOworCXZvaWQgX19pb21lbSAqZXJxaDsKKwl2b2lkIF9faW9tZW0gKmVycWw7CS8qIGFrYSBl cnEgb24gdjMyICovCisJdm9pZCBfX2lvbWVtICplZWloOworCXZvaWQgX19pb21lbSAqZWVpbDsJ LyogYWthIGVlaSBvbiB2MzIgKi8KKwl2b2lkIF9faW9tZW0gKnNlZWk7CisJdm9pZCBfX2lvbWVt ICpjZWVpOworCXZvaWQgX19pb21lbSAqc2VycTsKKwl2b2lkIF9faW9tZW0gKmNlcnE7CisJdm9p ZCBfX2lvbWVtICpjaW50OworCXZvaWQgX19pb21lbSAqY2VycjsKKwl2b2lkIF9faW9tZW0gKnNz cnQ7CisJdm9pZCBfX2lvbWVtICpjZG5lOworCXZvaWQgX19pb21lbSAqaW50aDsKKwl2b2lkIF9f aW9tZW0gKmludGw7CisJdm9pZCBfX2lvbWVtICplcnJoOworCXZvaWQgX19pb21lbSAqZXJybDsK KwlzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkIF9faW9tZW0gKnRjZDsKK307CisKK3N0cnVjdCBmc2xf ZWRtYV9zd190Y2QgeworCWRtYV9hZGRyX3QgcHRjZDsKKwlzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNk ICp2dGNkOworfTsKKworc3RydWN0IGZzbF9lZG1hX2NoYW4geworCXN0cnVjdCB2aXJ0X2RtYV9j aGFuIHZjaGFuOworCWVudW0gZG1hX3N0YXR1cyBzdGF0dXM7CisJZW51bSBmc2xfZWRtYV9wbV9z dGF0ZSBwbV9zdGF0ZTsKKwlib29sIGlkbGU7CisJdTMyIHNsYXZlX2lkOworCXN0cnVjdCBmc2xf ZWRtYV9lbmdpbmUgKmVkbWE7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmVkZXNjOworCXN0cnVj dCBkbWFfcG9vbCAqdGNkX3Bvb2w7CisJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgY2ZnOworCWVu dW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXI7Cit9OworCitzdHJ1Y3QgZnNsX2VkbWFfZGVz YyB7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgdmRlc2M7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4g KmVjaGFuOworCWJvb2wgaXNjeWNsaWM7CisJdW5zaWduZWQgaW50IG5fdGNkczsKKwlzdHJ1Y3Qg ZnNsX2VkbWFfc3dfdGNkIHRjZFtdOworfTsKKworZW51bSBlZG1hX3ZlcnNpb24geworCXYxLCAv KiAzMmNoLCBWeWJkaXIsIG1wYzU3eCwgZXRjICovCisJdjIsIC8qIDY0Y2ggQ29sZGZpcmUgKi8K K307CisKK3N0cnVjdCBmc2xfZWRtYV9lbmdpbmUgeworCXN0cnVjdCBkbWFfZGV2aWNlIGRtYV9k ZXY7CisJc3RydWN0IGVkbWFfcmVncyByZWdzOworCXZvaWQgX19pb21lbSAqbWVtYmFzZTsKKwl2 b2lkIF9faW9tZW0gKm11eGJhc2VbRE1BTVVYX05SXTsKKwlzdHJ1Y3QgY2xrICptdXhjbGtbRE1B TVVYX05SXTsKKwlzdHJ1Y3QgbXV0ZXggZnNsX2VkbWFfbXV0ZXg7CisJdTMyIG5fY2hhbnM7CisJ aW50IHR4aXJxOworCWludCBlcnJpcnE7CisJYm9vbCBiaWdfZW5kaWFuOworCWVudW0gZWRtYV92 ZXJzaW9uIHZlcnNpb247CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gY2hhbnNbXTsKK307CisKK3Uz MiBlZG1hX3JlYWRsKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEsIHZvaWQgX19pb21lbSAq YWRkcik7Cit2b2lkIGVkbWFfd3JpdGViKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEsIHU4 IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgZWRtYV93cml0ZXcoc3RydWN0IGZzbF9l ZG1hX2VuZ2luZSAqZWRtYSwgdTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgZWRt YV93cml0ZWwoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTMyIHZhbCwgdm9pZCBfX2lv bWVtICphZGRyKTsKK3N0cnVjdCBmc2xfZWRtYV9jaGFuICp0b19mc2xfZWRtYV9jaGFuKHN0cnVj dCBkbWFfY2hhbiAqY2hhbik7CitzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqdG9fZnNsX2VkbWFfZGVz YyhzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpOwordm9pZCBmc2xfZWRtYV9zZXR1cF9yZWdzKHN0 cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEpOwordm9pZCBmc2xfZWRtYV9kaXNhYmxlX3JlcXVl c3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKTsKK3ZvaWQgZnNsX2VkbWFfZnJlZV9k ZXNjKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYyk7Cit2b2lkIGZzbF9lZG1hX3hmZXJfZGVz YyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4pOwordm9pZCBmc2xfZWRtYV9jbGVhbnVw X3ZjaGFuKHN0cnVjdCBkbWFfZGV2aWNlICpkbWFkZXYpOworCisvKiBPcGVyYXRpb25zICovCitp bnQgZnNsX2VkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsK K3ZvaWQgZnNsX2VkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4p OworaW50IGZzbF9lZG1hX3NsYXZlX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkg IHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjb25maWcpOworc3RydWN0IGRtYV9hc3luY190eF9k ZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCisJCXN0cnVjdCBkbWFfY2hhbiAq Y2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCisJCXNpemVfdCBwZXJp b2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1bnNpZ25l ZCBsb25nIGZsYWdzKTsKK3N0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNsX2VkbWFf cHJlcF9zbGF2ZV9zZygKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnbCwKKwkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0 aW9uIGRpcmVjdGlvbiwKKwkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY29udGV4dCk7Citl bnVtIGRtYV9zdGF0dXMgZnNsX2VkbWFfdHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwK KwkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSk7Citp bnQgZnNsX2VkbWFfcGF1c2Uoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK2ludCBmc2xfZWRtYV9y ZXN1bWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK2ludCBmc2xfZWRtYV90ZXJtaW5hdGVfYWxs KHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7Cit2b2lkIGZzbF9lZG1hX2lzc3VlX3BlbmRpbmcoc3Ry dWN0IGRtYV9jaGFuICpjaGFuKTsKKworI2VuZGlmIC8qIF9GU0xfRURNQV9DT01NT05fSF8gKi8K KwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsLWVkbWEuYyBiL2RyaXZlcnMvZG1hL2ZzbC1l ZG1hLmMKaW5kZXggYzc1Njg4NjkyODRlLi4yZjZlNGE2NWQwNTQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZG1hL2ZzbC1lZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEuYwpAQCAtMSw4ICsx LDggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvLyBDb3B5cmlnaHQg MjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAvKgogICogZHJpdmVycy9k bWEvZnNsLWVkbWEuYwogICoKLSAqIENvcHlyaWdodCAyMDEzLTIwMTQgRnJlZXNjYWxlIFNlbWlj b25kdWN0b3IsIEluYy4KLSAqCiAgKiBEcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUgZURNQSBlbmdp bmUgd2l0aCBmbGV4aWJsZSBjaGFubmVsIG11bHRpcGxleGluZwogICogY2FwYWJpbGl0eSBmb3Ig RE1BIHJlcXVlc3Qgc291cmNlcy4gVGhlIGVETUEgYmxvY2sgY2FuIGJlIGZvdW5kIG9uIHNvbWUK ICAqIFZ5YnJpZCBhbmQgTGF5ZXJzY2FwZSBTb0NzLgpAQCAtMTMsMjQyICsxMywyMCBAQAogICog b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5o PgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o PgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+ Ci0jaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNp bmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVk ZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2lu Y2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgogCi0jaW5j bHVkZSAidmlydC1kbWEuaCIKLQotI2RlZmluZSBFRE1BX0NSCQkJMHgwMAotI2RlZmluZSBFRE1B X0VTCQkJMHgwNAotI2RlZmluZSBFRE1BX0VSUQkJMHgwQwotI2RlZmluZSBFRE1BX0VFSQkJMHgx NAotI2RlZmluZSBFRE1BX1NFUlEJCTB4MUIKLSNkZWZpbmUgRURNQV9DRVJRCQkweDFBCi0jZGVm aW5lIEVETUFfU0VFSQkJMHgxOQotI2RlZmluZSBFRE1BX0NFRUkJCTB4MTgKLSNkZWZpbmUgRURN QV9DSU5UCQkweDFGCi0jZGVmaW5lIEVETUFfQ0VSUgkJMHgxRQotI2RlZmluZSBFRE1BX1NTUlQJ CTB4MUQKLSNkZWZpbmUgRURNQV9DRE5FCQkweDFDCi0jZGVmaW5lIEVETUFfSU5UUgkJMHgyNAot I2RlZmluZSBFRE1BX0VSUgkJMHgyQwotCi0jZGVmaW5lIEVETUFfVENEX1NBRERSKHgpCSgweDEw MDAgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfU09GRih4KQkoMHgxMDA0ICsgMzIgKiAo eCkpCi0jZGVmaW5lIEVETUFfVENEX0FUVFIoeCkJKDB4MTAwNiArIDMyICogKHgpKQotI2RlZmlu ZSBFRE1BX1RDRF9OQllURVMoeCkJKDB4MTAwOCArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RD RF9TTEFTVCh4KQkoMHgxMDBDICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0RBRERSKHgp CSgweDEwMTAgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfRE9GRih4KQkoMHgxMDE0ICsg MzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0NJVEVSX0VMSU5LKHgpCSgweDEwMTYgKyAzMiAq ICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfQ0lURVIoeCkJKDB4MTAxNiArIDMyICogKHgpKQotI2Rl ZmluZSBFRE1BX1RDRF9ETEFTVF9TR0EoeCkJKDB4MTAxOCArIDMyICogKHgpKQotI2RlZmluZSBF RE1BX1RDRF9DU1IoeCkJCSgweDEwMUMgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfQklU RVJfRUxJTksoeCkJKDB4MTAxRSArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9CSVRFUih4 KQkoMHgxMDFFICsgMzIgKiAoeCkpCi0KLSNkZWZpbmUgRURNQV9DUl9FREJHCQlCSVQoMSkKLSNk ZWZpbmUgRURNQV9DUl9FUkNBCQlCSVQoMikKLSNkZWZpbmUgRURNQV9DUl9FUkdBCQlCSVQoMykK LSNkZWZpbmUgRURNQV9DUl9IT0UJCUJJVCg0KQotI2RlZmluZSBFRE1BX0NSX0hBTFQJCUJJVCg1 KQotI2RlZmluZSBFRE1BX0NSX0NMTQkJQklUKDYpCi0jZGVmaW5lIEVETUFfQ1JfRU1MTQkJQklU KDcpCi0jZGVmaW5lIEVETUFfQ1JfRUNYCQlCSVQoMTYpCi0jZGVmaW5lIEVETUFfQ1JfQ1gJCUJJ VCgxNykKLQotI2RlZmluZSBFRE1BX1NFRUlfU0VFSSh4KQkoKHgpICYgMHgxRikKLSNkZWZpbmUg RURNQV9DRUVJX0NFRUkoeCkJKCh4KSAmIDB4MUYpCi0jZGVmaW5lIEVETUFfQ0lOVF9DSU5UKHgp CSgoeCkgJiAweDFGKQotI2RlZmluZSBFRE1BX0NFUlJfQ0VSUih4KQkoKHgpICYgMHgxRikKLQot I2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFKHgpCQkoKCh4KSAmIDB4MDAwNykpCi0jZGVmaW5l IEVETUFfVENEX0FUVFJfRE1PRCh4KQkJKCgoeCkgJiAweDAwMUYpIDw8IDMpCi0jZGVmaW5lIEVE TUFfVENEX0FUVFJfU1NJWkUoeCkJCSgoKHgpICYgMHgwMDA3KSA8PCA4KQotI2RlZmluZSBFRE1B X1RDRF9BVFRSX1NNT0QoeCkJCSgoKHgpICYgMHgwMDFGKSA8PCAxMSkKLSNkZWZpbmUgRURNQV9U Q0RfQVRUUl9TU0laRV84QklUCSgweDAwMDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVf MTZCSVQJKDB4MDEwMCkKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVAkoMHgwMjAw KQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzY0QklUCSgweDAzMDApCi0jZGVmaW5lIEVE TUFfVENEX0FUVFJfU1NJWkVfMzJCWVRFCSgweDA1MDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJf RFNJWkVfOEJJVAkoMHgwMDAwKQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzE2QklUCSgw eDAwMDEpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfMzJCSVQJKDB4MDAwMikKLSNkZWZp bmUgRURNQV9UQ0RfQVRUUl9EU0laRV82NEJJVAkoMHgwMDAzKQotI2RlZmluZSBFRE1BX1RDRF9B VFRSX0RTSVpFXzMyQllURQkoMHgwMDA1KQotCi0jZGVmaW5lIEVETUFfVENEX1NPRkZfU09GRih4 KQkJKHgpCi0jZGVmaW5lIEVETUFfVENEX05CWVRFU19OQllURVMoeCkJKHgpCi0jZGVmaW5lIEVE TUFfVENEX1NMQVNUX1NMQVNUKHgpCQkoeCkKLSNkZWZpbmUgRURNQV9UQ0RfREFERFJfREFERFIo eCkJCSh4KQotI2RlZmluZSBFRE1BX1RDRF9DSVRFUl9DSVRFUih4KQkJKCh4KSAmIDB4N0ZGRikK LSNkZWZpbmUgRURNQV9UQ0RfRE9GRl9ET0ZGKHgpCQkoeCkKLSNkZWZpbmUgRURNQV9UQ0RfRExB U1RfU0dBX0RMQVNUX1NHQSh4KQkoeCkKLSNkZWZpbmUgRURNQV9UQ0RfQklURVJfQklURVIoeCkJ CSgoeCkgJiAweDdGRkYpCi0KLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX1NUQVJUCQlCSVQoMCkKLSNk ZWZpbmUgRURNQV9UQ0RfQ1NSX0lOVF9NQUpPUgkJQklUKDEpCi0jZGVmaW5lIEVETUFfVENEX0NT Ul9JTlRfSEFMRgkJQklUKDIpCi0jZGVmaW5lIEVETUFfVENEX0NTUl9EX1JFUQkJQklUKDMpCi0j ZGVmaW5lIEVETUFfVENEX0NTUl9FX1NHCQlCSVQoNCkKLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX0Vf TElOSwkJQklUKDUpCi0jZGVmaW5lIEVETUFfVENEX0NTUl9BQ1RJVkUJCUJJVCg2KQotI2RlZmlu ZSBFRE1BX1RDRF9DU1JfRE9ORQkJQklUKDcpCi0KLSNkZWZpbmUgRURNQU1VWF9DSENGR19ESVMJ CTB4MAotI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX0VOQkwJCTB4ODAKLSNkZWZpbmUgRURNQU1VWF9D SENGR19TT1VSQ0UobikJCSgobikgJiAweDNGKQotCi0jZGVmaW5lIERNQU1VWF9OUgkyCi0KLSNk ZWZpbmUgRlNMX0VETUFfQlVTV0lEVEhTCUJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKSB8 IFwKLQkJCQlCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVMpIHwgXAotCQkJCUJJVChETUFf U0xBVkVfQlVTV0lEVEhfNF9CWVRFUykgfCBcCi0JCQkJQklUKERNQV9TTEFWRV9CVVNXSURUSF84 X0JZVEVTKQotZW51bSBmc2xfZWRtYV9wbV9zdGF0ZSB7Ci0JUlVOTklORyA9IDAsCi0JU1VTUEVO REVELAotfTsKLQotc3RydWN0IGZzbF9lZG1hX2h3X3RjZCB7Ci0JX19sZTMyCXNhZGRyOwotCV9f bGUxNglzb2ZmOwotCV9fbGUxNglhdHRyOwotCV9fbGUzMgluYnl0ZXM7Ci0JX19sZTMyCXNsYXN0 OwotCV9fbGUzMglkYWRkcjsKLQlfX2xlMTYJZG9mZjsKLQlfX2xlMTYJY2l0ZXI7Ci0JX19sZTMy CWRsYXN0X3NnYTsKLQlfX2xlMTYJY3NyOwotCV9fbGUxNgliaXRlcjsKLX07Ci0KLXN0cnVjdCBm c2xfZWRtYV9zd190Y2QgewotCWRtYV9hZGRyX3QJCQlwdGNkOwotCXN0cnVjdCBmc2xfZWRtYV9o d190Y2QJCSp2dGNkOwotfTsKLQotc3RydWN0IGZzbF9lZG1hX3NsYXZlX2NvbmZpZyB7Ci0JZW51 bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uCWRpcjsKLQllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aAkJ YWRkcl93aWR0aDsKLQl1MzIJCQkJZGV2X2FkZHI7Ci0JdTMyCQkJCWJ1cnN0OwotCXUzMgkJCQlh dHRyOwotfTsKLQotc3RydWN0IGZzbF9lZG1hX2NoYW4gewotCXN0cnVjdCB2aXJ0X2RtYV9jaGFu CQl2Y2hhbjsKLQllbnVtIGRtYV9zdGF0dXMJCQlzdGF0dXM7Ci0JZW51bSBmc2xfZWRtYV9wbV9z dGF0ZQkJcG1fc3RhdGU7Ci0JYm9vbAkJCQlpZGxlOwotCXUzMgkJCQlzbGF2ZV9pZDsKLQlzdHJ1 Y3QgZnNsX2VkbWFfZW5naW5lCQkqZWRtYTsKLQlzdHJ1Y3QgZnNsX2VkbWFfZGVzYwkJKmVkZXNj OwotCXN0cnVjdCBmc2xfZWRtYV9zbGF2ZV9jb25maWcJZnNjOwotCXN0cnVjdCBkbWFfcG9vbAkJ CSp0Y2RfcG9vbDsKLX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9kZXNjIHsKLQlzdHJ1Y3QgdmlydF9k bWFfZGVzYwkJdmRlc2M7Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4JCSplY2hhbjsKLQlib29sCQkJ CWlzY3ljbGljOwotCXVuc2lnbmVkIGludAkJCW5fdGNkczsKLQlzdHJ1Y3QgZnNsX2VkbWFfc3df dGNkCQl0Y2RbXTsKLX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgewotCXN0cnVjdCBkbWFf ZGV2aWNlCWRtYV9kZXY7Ci0Jdm9pZCBfX2lvbWVtCQkqbWVtYmFzZTsKLQl2b2lkIF9faW9tZW0J CSptdXhiYXNlW0RNQU1VWF9OUl07Ci0Jc3RydWN0IGNsawkJKm11eGNsa1tETUFNVVhfTlJdOwot CXN0cnVjdCBtdXRleAkJZnNsX2VkbWFfbXV0ZXg7Ci0JdTMyCQkJbl9jaGFuczsKLQlpbnQJCQl0 eGlycTsKLQlpbnQJCQllcnJpcnE7Ci0JYm9vbAkJCWJpZ19lbmRpYW47Ci0Jc3RydWN0IGZzbF9l ZG1hX2NoYW4JY2hhbnNbXTsKLX07Ci0KLS8qCi0gKiBSL1cgZnVuY3Rpb25zIGZvciBiaWctIG9y IGxpdHRsZS1lbmRpYW4gcmVnaXN0ZXJzOgotICogVGhlIGVETUEgY29udHJvbGxlcidzIGVuZGlh biBpcyBpbmRlcGVuZGVudCBvZiB0aGUgQ1BVIGNvcmUncyBlbmRpYW4uCi0gKiBGb3IgdGhlIGJp Zy1lbmRpYW4gSVAgbW9kdWxlLCB0aGUgb2Zmc2V0IGZvciA4LWJpdCBvciAxNi1iaXQgcmVnaXN0 ZXJzCi0gKiBzaG91bGQgYWxzbyBiZSBzd2FwcGVkIG9wcG9zaXRlIHRvIHRoYXQgaW4gbGl0dGxl LWVuZGlhbiBJUC4KLSAqLworI2luY2x1ZGUgImZzbC1lZG1hLWNvbW1vbi5oIgogCi1zdGF0aWMg dTMyIGVkbWFfcmVhZGwoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdm9pZCBfX2lvbWVt ICphZGRyKQotewotCWlmIChlZG1hLT5iaWdfZW5kaWFuKQotCQlyZXR1cm4gaW9yZWFkMzJiZShh ZGRyKTsKLQllbHNlCi0JCXJldHVybiBpb3JlYWQzMihhZGRyKTsKLX0KLQotc3RhdGljIHZvaWQg ZWRtYV93cml0ZWIoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTggdmFsLCB2b2lkIF9f aW9tZW0gKmFkZHIpCi17Ci0JLyogc3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4gYmln LWVuZGlhbiBtb2RlICovCi0JaWYgKGVkbWEtPmJpZ19lbmRpYW4pCi0JCWlvd3JpdGU4KHZhbCwg KHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhZGRyIF4gMHgzKSk7Ci0JZWxzZQotCQlp b3dyaXRlOCh2YWwsIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBlZG1hX3dyaXRldyhzdHJ1Y3Qg ZnNsX2VkbWFfZW5naW5lICplZG1hLCB1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0J Lyogc3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4gYmlnLWVuZGlhbiBtb2RlICovCi0J aWYgKGVkbWEtPmJpZ19lbmRpYW4pCi0JCWlvd3JpdGUxNmJlKHZhbCwgKHZvaWQgX19pb21lbSAq KSgodW5zaWduZWQgbG9uZylhZGRyIF4gMHgyKSk7Ci0JZWxzZQotCQlpb3dyaXRlMTYodmFsLCBh ZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgZWRtYV93cml0ZWwoc3RydWN0IGZzbF9lZG1hX2VuZ2lu ZSAqZWRtYSwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlmIChlZG1hLT5iaWdf ZW5kaWFuKQotCQlpb3dyaXRlMzJiZSh2YWwsIGFkZHIpOwotCWVsc2UKLQkJaW93cml0ZTMyKHZh bCwgYWRkcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqdG9fZnNsX2VkbWFf Y2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFu LCBzdHJ1Y3QgZnNsX2VkbWFfY2hhbiwgdmNoYW4uY2hhbik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qg ZnNsX2VkbWFfZGVzYyAqdG9fZnNsX2VkbWFfZGVzYyhzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQp Ci17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IGZzbF9lZG1hX2Rlc2MsIHZkZXNj KTsKLX0KLQotc3RhdGljIHZvaWQgZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3Qoc3RydWN0IGZzbF9l ZG1hX2NoYW4gKmZzbF9jaGFuKQotewotCXZvaWQgX19pb21lbSAqYWRkciA9IGZzbF9jaGFuLT5l ZG1hLT5tZW1iYXNlOwotCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7Ci0K LQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9TRUVJX1NFRUkoY2gpLCBhZGRyICsg RURNQV9TRUVJKTsKLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgY2gsIGFkZHIgKyBFRE1B X1NFUlEpOwotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3Qoc3RydWN0 IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQotewotCXZvaWQgX19pb21lbSAqYWRkciA9IGZzbF9j aGFuLT5lZG1hLT5tZW1iYXNlOwotCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5f aWQ7Ci0KLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgY2gsIGFkZHIgKyBFRE1BX0NFUlEp OwotCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBFRE1BX0NFRUlfQ0VFSShjaCksIGFkZHIg KyBFRE1BX0NFRUkpOwotfQorI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX0RJUwkJMAorI2RlZmluZSBF RE1BTVVYX0NIQ0ZHX0VOQkwJCUJJVCg3KQorI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX1NPVVJDRShu KQkJKChuKSAmIEdFTk1BU0soNiwgMCkpCiAKIHN0YXRpYyB2b2lkIGZzbF9lZG1hX2NoYW5fbXV4 KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiwKIAkJCXVuc2lnbmVkIGludCBzbG90LCBi b29sIGVuYWJsZSkKQEAgLTI2OCw0MTYgKzQ2LDIwIEBAIHN0YXRpYyB2b2lkIGZzbF9lZG1hX2No YW5fbXV4KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiwKIAkJaW93cml0ZTgoRURNQU1V WF9DSENGR19ESVMsIG11eGFkZHIgKyBjaF9vZmYpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50 IGZzbF9lZG1hX2dldF90Y2RfYXR0cihlbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBhZGRyX3dpZHRo KQotewotCXN3aXRjaCAoYWRkcl93aWR0aCkgewotCWNhc2UgMToKLQkJcmV0dXJuIEVETUFfVENE X0FUVFJfU1NJWkVfOEJJVCB8IEVETUFfVENEX0FUVFJfRFNJWkVfOEJJVDsKLQljYXNlIDI6Ci0J CXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzE2QklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8x NkJJVDsKLQljYXNlIDQ6Ci0JCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzMyQklUIHwgRURN QV9UQ0RfQVRUUl9EU0laRV8zMkJJVDsKLQljYXNlIDg6Ci0JCXJldHVybiBFRE1BX1RDRF9BVFRS X1NTSVpFXzY0QklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV82NEJJVDsKLQlkZWZhdWx0OgotCQly ZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVCB8IEVETUFfVENEX0FUVFJfRFNJWkVfMzJC SVQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9mcmVlX2Rlc2Moc3RydWN0IHZpcnRf ZG1hX2Rlc2MgKnZkZXNjKQotewotCXN0cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZGVzYzsKLQlp bnQgaTsKLQotCWZzbF9kZXNjID0gdG9fZnNsX2VkbWFfZGVzYyh2ZGVzYyk7Ci0JZm9yIChpID0g MDsgaSA8IGZzbF9kZXNjLT5uX3RjZHM7IGkrKykKLQkJZG1hX3Bvb2xfZnJlZShmc2xfZGVzYy0+ ZWNoYW4tPnRjZF9wb29sLCBmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QsCi0JCQkgICAgICBmc2xfZGVz Yy0+dGNkW2ldLnB0Y2QpOwotCWtmcmVlKGZzbF9kZXNjKTsKLX0KLQotc3RhdGljIGludCBmc2xf ZWRtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgZnNs X2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKGhlYWQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZz bF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZz bF9jaGFuKTsKLQlmc2xfY2hhbi0+ZWRlc2MgPSBOVUxMOwotCWZzbF9jaGFuLT5pZGxlID0gdHJ1 ZTsKLQl2Y2hhbl9nZXRfYWxsX2Rlc2NyaXB0b3JzKCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsK LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwot CXZjaGFuX2RtYV9kZXNjX2ZyZWVfbGlzdCgmZnNsX2NoYW4tPnZjaGFuLCAmaGVhZCk7Ci0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX2VkbWFfcGF1c2Uoc3RydWN0IGRtYV9jaGFuICpj aGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2No YW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZm c2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCWlmIChmc2xfY2hhbi0+ZWRlc2MpIHsKLQkJ ZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKLQkJZnNsX2NoYW4tPnN0YXR1cyA9 IERNQV9QQVVTRUQ7Ci0JCWZzbF9jaGFuLT5pZGxlID0gdHJ1ZTsKLQl9Ci0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBmc2xfZWRtYV9yZXN1bWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQotewot CXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7 Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+ dmNoYW4ubG9jaywgZmxhZ3MpOwotCWlmIChmc2xfY2hhbi0+ZWRlc2MpIHsKLQkJZnNsX2VkbWFf ZW5hYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwotCQlmc2xfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BS T0dSRVNTOwotCQlmc2xfY2hhbi0+aWRsZSA9IGZhbHNlOwotCX0KLQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IGZzbF9lZG1hX3NsYXZlX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCi0J CQkJIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjZmcpCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2No YW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKLQotCWZzbF9jaGFuLT5mc2Mu ZGlyID0gY2ZnLT5kaXJlY3Rpb247Ci0JaWYgKGNmZy0+ZGlyZWN0aW9uID09IERNQV9ERVZfVE9f TUVNKSB7Ci0JCWZzbF9jaGFuLT5mc2MuZGV2X2FkZHIgPSBjZmctPnNyY19hZGRyOwotCQlmc2xf Y2hhbi0+ZnNjLmFkZHJfd2lkdGggPSBjZmctPnNyY19hZGRyX3dpZHRoOwotCQlmc2xfY2hhbi0+ ZnNjLmJ1cnN0ID0gY2ZnLT5zcmNfbWF4YnVyc3Q7Ci0JCWZzbF9jaGFuLT5mc2MuYXR0ciA9IGZz bF9lZG1hX2dldF90Y2RfYXR0cihjZmctPnNyY19hZGRyX3dpZHRoKTsKLQl9IGVsc2UgaWYgKGNm Zy0+ZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7Ci0JCWZzbF9jaGFuLT5mc2MuZGV2X2Fk ZHIgPSBjZmctPmRzdF9hZGRyOwotCQlmc2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGggPSBjZmctPmRz dF9hZGRyX3dpZHRoOwotCQlmc2xfY2hhbi0+ZnNjLmJ1cnN0ID0gY2ZnLT5kc3RfbWF4YnVyc3Q7 Ci0JCWZzbF9jaGFuLT5mc2MuYXR0ciA9IGZzbF9lZG1hX2dldF90Y2RfYXR0cihjZmctPmRzdF9h ZGRyX3dpZHRoKTsKLQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgc2l6ZV90IGZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShzdHJ1Y3QgZnNsX2Vk bWFfY2hhbiAqZnNsX2NoYW4sCi0JCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYywgYm9vbCBp bl9wcm9ncmVzcykKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZWRlc2MgPSBmc2xfY2hhbi0+ ZWRlc2M7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gZnNsX2NoYW4tPmVkbWEtPm1lbWJhc2U7Ci0J dTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsKLQllbnVtIGRtYV90cmFuc2Zl cl9kaXJlY3Rpb24gZGlyID0gZnNsX2NoYW4tPmZzYy5kaXI7Ci0JZG1hX2FkZHJfdCBjdXJfYWRk ciwgZG1hX2FkZHI7Ci0Jc2l6ZV90IGxlbiwgc2l6ZTsKLQlpbnQgaTsKLQotCS8qIGNhbGN1bGF0 ZSB0aGUgdG90YWwgc2l6ZSBpbiB0aGlzIGRlc2MgKi8KLQlmb3IgKGxlbiA9IGkgPSAwOyBpIDwg ZnNsX2NoYW4tPmVkZXNjLT5uX3RjZHM7IGkrKykKLQkJbGVuICs9IGxlMzJfdG9fY3B1KGVkZXNj LT50Y2RbaV0udnRjZC0+bmJ5dGVzKQotCQkJKiBsZTE2X3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0 Y2QtPmJpdGVyKTsKLQotCWlmICghaW5fcHJvZ3Jlc3MpCi0JCXJldHVybiBsZW47Ci0KLQlpZiAo ZGlyID09IERNQV9NRU1fVE9fREVWKQotCQljdXJfYWRkciA9IGVkbWFfcmVhZGwoZnNsX2NoYW4t PmVkbWEsIGFkZHIgKyBFRE1BX1RDRF9TQUREUihjaCkpOwotCWVsc2UKLQkJY3VyX2FkZHIgPSBl ZG1hX3JlYWRsKGZzbF9jaGFuLT5lZG1hLCBhZGRyICsgRURNQV9UQ0RfREFERFIoY2gpKTsKLQot CS8qIGZpZ3VyZSBvdXQgdGhlIGZpbmlzaGVkIGFuZCBjYWxjdWxhdGUgdGhlIHJlc2lkdWUgKi8K LQlmb3IgKGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVkZXNjLT5uX3RjZHM7IGkrKykgewotCQlzaXpl ID0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5uYnl0ZXMpCi0JCQkqIGxlMTZfdG9f Y3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+Yml0ZXIpOwotCQlpZiAoZGlyID09IERNQV9NRU1fVE9f REVWKQotCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPnNhZGRy KTsKLQkJZWxzZQotCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2Qt PmRhZGRyKTsKLQotCQlsZW4gLT0gc2l6ZTsKLQkJaWYgKGN1cl9hZGRyID49IGRtYV9hZGRyICYm IGN1cl9hZGRyIDwgZG1hX2FkZHIgKyBzaXplKSB7Ci0JCQlsZW4gKz0gZG1hX2FkZHIgKyBzaXpl IC0gY3VyX2FkZHI7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBsZW47Ci19Ci0KLXN0 YXRpYyBlbnVtIGRtYV9zdGF0dXMgZnNsX2VkbWFfdHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAq Y2hhbiwKLQkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0 ZSkKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFu KGNoYW4pOwotCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYzsKLQllbnVtIGRtYV9zdGF0dXMg c3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzdGF0dXMgPSBkbWFfY29va2llX3N0 YXR1cyhjaGFuLCBjb29raWUsIHR4c3RhdGUpOwotCWlmIChzdGF0dXMgPT0gRE1BX0NPTVBMRVRF KQotCQlyZXR1cm4gc3RhdHVzOwotCi0JaWYgKCF0eHN0YXRlKQotCQlyZXR1cm4gZnNsX2NoYW4t PnN0YXR1czsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxh Z3MpOwotCXZkZXNjID0gdmNoYW5fZmluZF9kZXNjKCZmc2xfY2hhbi0+dmNoYW4sIGNvb2tpZSk7 Ci0JaWYgKGZzbF9jaGFuLT5lZGVzYyAmJiBjb29raWUgPT0gZnNsX2NoYW4tPmVkZXNjLT52ZGVz Yy50eC5jb29raWUpCi0JCXR4c3RhdGUtPnJlc2lkdWUgPSBmc2xfZWRtYV9kZXNjX3Jlc2lkdWUo ZnNsX2NoYW4sIHZkZXNjLCB0cnVlKTsKLQllbHNlIGlmICh2ZGVzYykKLQkJdHhzdGF0ZS0+cmVz aWR1ZSA9IGZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShmc2xfY2hhbiwgdmRlc2MsIGZhbHNlKTsKLQll bHNlCi0JCXR4c3RhdGUtPnJlc2lkdWUgPSAwOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBmc2xfY2hhbi0+c3RhdHVz OwotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9zZXRfdGNkX3JlZ3Moc3RydWN0IGZzbF9lZG1h X2NoYW4gKmZzbF9jaGFuLAotCQkJCSAgc3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqdGNkKQotewot CXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEgPSBmc2xfY2hhbi0+ZWRtYTsKLQl2b2lkIF9f aW9tZW0gKmFkZHIgPSBmc2xfY2hhbi0+ZWRtYS0+bWVtYmFzZTsKLQl1MzIgY2ggPSBmc2xfY2hh bi0+dmNoYW4uY2hhbi5jaGFuX2lkOwotCi0JLyoKLQkgKiBUQ0QgcGFyYW1ldGVycyBhcmUgc3Rv cmVkIGluIHN0cnVjdCBmc2xfZWRtYV9od190Y2QgaW4gbGl0dGxlCi0JICogZW5kaWFuIGZvcm1h dC4gSG93ZXZlciwgd2UgbmVlZCB0byBsb2FkIHRoZSBUQ0QgcmVnaXN0ZXJzIGluCi0JICogYmln LSBvciBsaXR0bGUtZW5kaWFuIG9iZXlpbmcgdGhlIGVETUEgZW5naW5lIG1vZGVsIGVuZGlhbi4K LQkgKi8KLQllZG1hX3dyaXRldyhlZG1hLCAwLCBhZGRyICsgRURNQV9UQ0RfQ1NSKGNoKSk7Ci0J ZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5zYWRkciksIGFkZHIgKyBFRE1BX1RD RF9TQUREUihjaCkpOwotCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+ZGFkZHIp LCBhZGRyICsgRURNQV9UQ0RfREFERFIoY2gpKTsKLQotCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZf dG9fY3B1KHRjZC0+YXR0ciksIGFkZHIgKyBFRE1BX1RDRF9BVFRSKGNoKSk7Ci0JZWRtYV93cml0 ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5zb2ZmKSwgYWRkciArIEVETUFfVENEX1NPRkYoY2gp KTsKLQotCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+bmJ5dGVzKSwgYWRkciAr IEVETUFfVENEX05CWVRFUyhjaCkpOwotCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRj ZC0+c2xhc3QpLCBhZGRyICsgRURNQV9UQ0RfU0xBU1QoY2gpKTsKLQotCWVkbWFfd3JpdGV3KGVk bWEsIGxlMTZfdG9fY3B1KHRjZC0+Y2l0ZXIpLCBhZGRyICsgRURNQV9UQ0RfQ0lURVIoY2gpKTsK LQllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmJpdGVyKSwgYWRkciArIEVETUFf VENEX0JJVEVSKGNoKSk7Ci0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5kb2Zm KSwgYWRkciArIEVETUFfVENEX0RPRkYoY2gpKTsKLQotCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJf dG9fY3B1KHRjZC0+ZGxhc3Rfc2dhKSwgYWRkciArIEVETUFfVENEX0RMQVNUX1NHQShjaCkpOwot Ci0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5jc3IpLCBhZGRyICsgRURNQV9U Q0RfQ1NSKGNoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgZnNsX2VkbWFfZmlsbF90Y2Qo c3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqdGNkLCB1MzIgc3JjLCB1MzIgZHN0LAotCQkgICAgICAg dTE2IGF0dHIsIHUxNiBzb2ZmLCB1MzIgbmJ5dGVzLCB1MzIgc2xhc3QsIHUxNiBjaXRlciwKLQkJ ICAgICAgIHUxNiBiaXRlciwgdTE2IGRvZmYsIHUzMiBkbGFzdF9zZ2EsIGJvb2wgbWFqb3JfaW50 LAotCQkgICAgICAgYm9vbCBkaXNhYmxlX3JlcSwgYm9vbCBlbmFibGVfc2cpCi17Ci0JdTE2IGNz ciA9IDA7Ci0KLQkvKgotCSAqIGVETUEgaGFyZHdhcmUgU0dzIHJlcXVpcmUgdGhlIFRDRHMgdG8g YmUgc3RvcmVkIGluIGxpdHRsZQotCSAqIGVuZGlhbiBmb3JtYXQgaXJyZXNwZWN0aXZlIG9mIHRo ZSByZWdpc3RlciBlbmRpYW4gbW9kZWwuCi0JICogU28gd2UgcHV0IHRoZSB2YWx1ZSBpbiBsaXR0 bGUgZW5kaWFuIGluIG1lbW9yeSwgd2FpdGluZwotCSAqIGZvciBmc2xfZWRtYV9zZXRfdGNkX3Jl Z3MgZG9pbmcgdGhlIHN3YXAuCi0JICovCi0JdGNkLT5zYWRkciA9IGNwdV90b19sZTMyKHNyYyk7 Ci0JdGNkLT5kYWRkciA9IGNwdV90b19sZTMyKGRzdCk7Ci0KLQl0Y2QtPmF0dHIgPSBjcHVfdG9f bGUxNihhdHRyKTsKLQotCXRjZC0+c29mZiA9IGNwdV90b19sZTE2KEVETUFfVENEX1NPRkZfU09G Rihzb2ZmKSk7Ci0KLQl0Y2QtPm5ieXRlcyA9IGNwdV90b19sZTMyKEVETUFfVENEX05CWVRFU19O QllURVMobmJ5dGVzKSk7Ci0JdGNkLT5zbGFzdCA9IGNwdV90b19sZTMyKEVETUFfVENEX1NMQVNU X1NMQVNUKHNsYXN0KSk7Ci0KLQl0Y2QtPmNpdGVyID0gY3B1X3RvX2xlMTYoRURNQV9UQ0RfQ0lU RVJfQ0lURVIoY2l0ZXIpKTsKLQl0Y2QtPmRvZmYgPSBjcHVfdG9fbGUxNihFRE1BX1RDRF9ET0ZG X0RPRkYoZG9mZikpOwotCi0JdGNkLT5kbGFzdF9zZ2EgPSBjcHVfdG9fbGUzMihFRE1BX1RDRF9E TEFTVF9TR0FfRExBU1RfU0dBKGRsYXN0X3NnYSkpOwotCi0JdGNkLT5iaXRlciA9IGNwdV90b19s ZTE2KEVETUFfVENEX0JJVEVSX0JJVEVSKGJpdGVyKSk7Ci0JaWYgKG1ham9yX2ludCkKLQkJY3Ny IHw9IEVETUFfVENEX0NTUl9JTlRfTUFKT1I7Ci0KLQlpZiAoZGlzYWJsZV9yZXEpCi0JCWNzciB8 PSBFRE1BX1RDRF9DU1JfRF9SRVE7Ci0KLQlpZiAoZW5hYmxlX3NnKQotCQljc3IgfD0gRURNQV9U Q0RfQ1NSX0VfU0c7Ci0KLQl0Y2QtPmNzciA9IGNwdV90b19sZTE2KGNzcik7Ci19Ci0KLXN0YXRp YyBzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2VkbWFfYWxsb2NfZGVzYyhzdHJ1Y3QgZnNsX2Vk bWFfY2hhbiAqZnNsX2NoYW4sCi0JCWludCBzZ19sZW4pCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2Rl c2MgKmZzbF9kZXNjOwotCWludCBpOwotCi0JZnNsX2Rlc2MgPSBremFsbG9jKHNpemVvZigqZnNs X2Rlc2MpICsgc2l6ZW9mKHN0cnVjdCBmc2xfZWRtYV9zd190Y2QpICogc2dfbGVuLAotCQkJCUdG UF9OT1dBSVQpOwotCWlmICghZnNsX2Rlc2MpCi0JCXJldHVybiBOVUxMOwotCi0JZnNsX2Rlc2Mt PmVjaGFuID0gZnNsX2NoYW47Ci0JZnNsX2Rlc2MtPm5fdGNkcyA9IHNnX2xlbjsKLQlmb3IgKGkg PSAwOyBpIDwgc2dfbGVuOyBpKyspIHsKLQkJZnNsX2Rlc2MtPnRjZFtpXS52dGNkID0gZG1hX3Bv b2xfYWxsb2MoZnNsX2NoYW4tPnRjZF9wb29sLAotCQkJCQlHRlBfTk9XQUlULCAmZnNsX2Rlc2Mt PnRjZFtpXS5wdGNkKTsKLQkJaWYgKCFmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QpCi0JCQlnb3RvIGVy cjsKLQl9Ci0JcmV0dXJuIGZzbF9kZXNjOwotCi1lcnI6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlk bWFfcG9vbF9mcmVlKGZzbF9jaGFuLT50Y2RfcG9vbCwgZnNsX2Rlc2MtPnRjZFtpXS52dGNkLAot CQkJCWZzbF9kZXNjLT50Y2RbaV0ucHRjZCk7Ci0Ja2ZyZWUoZnNsX2Rlc2MpOwotCXJldHVybiBO VUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpmc2xfZWRt YV9wcmVwX2RtYV9jeWNsaWMoCi0JCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBk bWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCi0JCXNpemVfdCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90 cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQl1bnNpZ25lZCBsb25nIGZsYWdzKQotewot CXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7 Ci0Jc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOwotCWRtYV9hZGRyX3QgZG1hX2J1Zl9u ZXh0OwotCWludCBzZ19sZW4sIGk7Ci0JdTMyIHNyY19hZGRyLCBkc3RfYWRkciwgbGFzdF9zZywg bmJ5dGVzOwotCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOwotCi0JaWYgKCFpc19zbGF2ZV9kaXJlY3Rp b24oZnNsX2NoYW4tPmZzYy5kaXIpKQotCQlyZXR1cm4gTlVMTDsKLQotCXNnX2xlbiA9IGJ1Zl9s ZW4gLyBwZXJpb2RfbGVuOwotCWZzbF9kZXNjID0gZnNsX2VkbWFfYWxsb2NfZGVzYyhmc2xfY2hh biwgc2dfbGVuKTsKLQlpZiAoIWZzbF9kZXNjKQotCQlyZXR1cm4gTlVMTDsKLQlmc2xfZGVzYy0+ aXNjeWNsaWMgPSB0cnVlOwotCi0JZG1hX2J1Zl9uZXh0ID0gZG1hX2FkZHI7Ci0JbmJ5dGVzID0g ZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoICogZnNsX2NoYW4tPmZzYy5idXJzdDsKLQlpdGVyID0g cGVyaW9kX2xlbiAvIG5ieXRlczsKLQotCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKykgewot CQlpZiAoZG1hX2J1Zl9uZXh0ID49IGRtYV9hZGRyICsgYnVmX2xlbikKLQkJCWRtYV9idWZfbmV4 dCA9IGRtYV9hZGRyOwotCi0JCS8qIGdldCBuZXh0IHNnJ3MgcGh5c2ljYWwgYWRkcmVzcyAqLwot CQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUgc2dfbGVuXS5wdGNkOwotCi0JCWlm IChmc2xfY2hhbi0+ZnNjLmRpciA9PSBETUFfTUVNX1RPX0RFVikgewotCQkJc3JjX2FkZHIgPSBk bWFfYnVmX25leHQ7Ci0JCQlkc3RfYWRkciA9IGZzbF9jaGFuLT5mc2MuZGV2X2FkZHI7Ci0JCQlz b2ZmID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoOwotCQkJZG9mZiA9IDA7Ci0JCX0gZWxzZSB7 Ci0JCQlzcmNfYWRkciA9IGZzbF9jaGFuLT5mc2MuZGV2X2FkZHI7Ci0JCQlkc3RfYWRkciA9IGRt YV9idWZfbmV4dDsKLQkJCXNvZmYgPSAwOwotCQkJZG9mZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93 aWR0aDsKLQkJfQotCi0JCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2RbaV0udnRjZCwg c3JjX2FkZHIsIGRzdF9hZGRyLAotCQkJCSAgZnNsX2NoYW4tPmZzYy5hdHRyLCBzb2ZmLCBuYnl0 ZXMsIDAsIGl0ZXIsCi0JCQkJICBpdGVyLCBkb2ZmLCBsYXN0X3NnLCB0cnVlLCBmYWxzZSwgdHJ1 ZSk7Ci0JCWRtYV9idWZfbmV4dCArPSBwZXJpb2RfbGVuOwotCX0KLQotCXJldHVybiB2Y2hhbl90 eF9wcmVwKCZmc2xfY2hhbi0+dmNoYW4sICZmc2xfZGVzYy0+dmRlc2MsIGZsYWdzKTsKLX0KLQot c3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNsX2VkbWFfcHJlcF9zbGF2 ZV9zZygKLQkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwK LQkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVj dGlvbiwKLQkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3Qg ZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCXN0cnVj dCBmc2xfZWRtYV9kZXNjICpmc2xfZGVzYzsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXUz MiBzcmNfYWRkciwgZHN0X2FkZHIsIGxhc3Rfc2csIG5ieXRlczsKLQl1MTYgc29mZiwgZG9mZiwg aXRlcjsKLQlpbnQgaTsKLQotCWlmICghaXNfc2xhdmVfZGlyZWN0aW9uKGZzbF9jaGFuLT5mc2Mu ZGlyKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmc2xfZGVzYyA9IGZzbF9lZG1hX2FsbG9jX2Rlc2Mo ZnNsX2NoYW4sIHNnX2xlbik7Ci0JaWYgKCFmc2xfZGVzYykKLQkJcmV0dXJuIE5VTEw7Ci0JZnNs X2Rlc2MtPmlzY3ljbGljID0gZmFsc2U7Ci0KLQluYnl0ZXMgPSBmc2xfY2hhbi0+ZnNjLmFkZHJf d2lkdGggKiBmc2xfY2hhbi0+ZnNjLmJ1cnN0OwotCWZvcl9lYWNoX3NnKHNnbCwgc2csIHNnX2xl biwgaSkgewotCQkvKiBnZXQgbmV4dCBzZydzIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQkJbGFzdF9z ZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAxKSAlIHNnX2xlbl0ucHRjZDsKLQotCQlpZiAoZnNsX2No YW4tPmZzYy5kaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKLQkJCXNyY19hZGRyID0gc2dfZG1hX2Fk ZHJlc3Moc2cpOwotCQkJZHN0X2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRldl9hZGRyOwotCQkJc29m ZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aDsKLQkJCWRvZmYgPSAwOwotCQl9IGVsc2Ugewot CQkJc3JjX2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRldl9hZGRyOwotCQkJZHN0X2FkZHIgPSBzZ19k bWFfYWRkcmVzcyhzZyk7Ci0JCQlzb2ZmID0gMDsKLQkJCWRvZmYgPSBmc2xfY2hhbi0+ZnNjLmFk ZHJfd2lkdGg7Ci0JCX0KLQotCQlpdGVyID0gc2dfZG1hX2xlbihzZykgLyBuYnl0ZXM7Ci0JCWlm IChpIDwgc2dfbGVuIC0gMSkgewotCQkJbGFzdF9zZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAxKV0u cHRjZDsKLQkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2RbaV0udnRjZCwgc3JjX2Fk ZHIsCi0JCQkJCSAgZHN0X2FkZHIsIGZzbF9jaGFuLT5mc2MuYXR0ciwgc29mZiwKLQkJCQkJICBu Ynl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rfc2csCi0JCQkJCSAgZmFsc2UsIGZhbHNl LCB0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCWxhc3Rfc2cgPSAwOwotCQkJZnNsX2VkbWFfZmlsbF90 Y2QoZnNsX2Rlc2MtPnRjZFtpXS52dGNkLCBzcmNfYWRkciwKLQkJCQkJICBkc3RfYWRkciwgZnNs X2NoYW4tPmZzYy5hdHRyLCBzb2ZmLAotCQkJCQkgIG5ieXRlcywgMCwgaXRlciwgaXRlciwgZG9m ZiwgbGFzdF9zZywKLQkJCQkJICB0cnVlLCB0cnVlLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1 cm4gdmNoYW5fdHhfcHJlcCgmZnNsX2NoYW4tPnZjaGFuLCAmZnNsX2Rlc2MtPnZkZXNjLCBmbGFn cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZzbF9lZG1hX3hmZXJfZGVzYyhzdHJ1Y3QgZnNsX2VkbWFf Y2hhbiAqZnNsX2NoYW4pCi17Ci0Jc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjOwotCi0JdmRl c2MgPSB2Y2hhbl9uZXh0X2Rlc2MoJmZzbF9jaGFuLT52Y2hhbik7Ci0JaWYgKCF2ZGVzYykKLQkJ cmV0dXJuOwotCWZzbF9jaGFuLT5lZGVzYyA9IHRvX2ZzbF9lZG1hX2Rlc2ModmRlc2MpOwotCWZz bF9lZG1hX3NldF90Y2RfcmVncyhmc2xfY2hhbiwgZnNsX2NoYW4tPmVkZXNjLT50Y2RbMF0udnRj ZCk7Ci0JZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwotCWZzbF9jaGFuLT5zdGF0 dXMgPSBETUFfSU5fUFJPR1JFU1M7Ci0JZnNsX2NoYW4tPmlkbGUgPSBmYWxzZTsKLX0KLQogc3Rh dGljIGlycXJldHVybl90IGZzbF9lZG1hX3R4X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lk KQogewogCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hID0gZGV2X2lkOwogCXVuc2ln bmVkIGludCBpbnRyLCBjaDsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKIAlzdHJ1Y3QgZnNs X2VkbWFfY2hhbiAqZnNsX2NoYW47CisJc3RydWN0IGVkbWFfcmVncyAqcmVncyA9ICZmc2xfZWRt YS0+cmVnczsKIAotCWJhc2VfYWRkciA9IGZzbF9lZG1hLT5tZW1iYXNlOwotCi0JaW50ciA9IGVk bWFfcmVhZGwoZnNsX2VkbWEsIGJhc2VfYWRkciArIEVETUFfSU5UUik7CisJaW50ciA9IGVkbWFf cmVhZGwoZnNsX2VkbWEsIHJlZ3MtPmludGwpOwogCWlmICghaW50cikKIAkJcmV0dXJuIElSUV9O T05FOwogCiAJZm9yIChjaCA9IDA7IGNoIDwgZnNsX2VkbWEtPm5fY2hhbnM7IGNoKyspIHsKIAkJ aWYgKGludHIgJiAoMHgxIDw8IGNoKSkgewotCQkJZWRtYV93cml0ZWIoZnNsX2VkbWEsIEVETUFf Q0lOVF9DSU5UKGNoKSwKLQkJCQliYXNlX2FkZHIgKyBFRE1BX0NJTlQpOworCQkJZWRtYV93cml0 ZWIoZnNsX2VkbWEsIEVETUFfQ0lOVF9DSU5UKGNoKSwgcmVncy0+Y2ludCk7CiAKIAkJCWZzbF9j aGFuID0gJmZzbF9lZG1hLT5jaGFuc1tjaF07CiAKQEAgLTcwNSwxNiArODcsMTYgQEAgc3RhdGlj IGlycXJldHVybl90IGZzbF9lZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkK IHsKIAlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpmc2xfZWRtYSA9IGRldl9pZDsKIAl1bnNpZ25l ZCBpbnQgZXJyLCBjaDsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9lZG1hLT5yZWdz OwogCi0JZXJyID0gZWRtYV9yZWFkbChmc2xfZWRtYSwgZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1B X0VSUik7CisJZXJyID0gZWRtYV9yZWFkbChmc2xfZWRtYSwgcmVncy0+ZXJybCk7CiAJaWYgKCFl cnIpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWZvciAoY2ggPSAwOyBjaCA8IGZzbF9lZG1hLT5u X2NoYW5zOyBjaCsrKSB7CiAJCWlmIChlcnIgJiAoMHgxIDw8IGNoKSkgewogCQkJZnNsX2VkbWFf ZGlzYWJsZV9yZXF1ZXN0KCZmc2xfZWRtYS0+Y2hhbnNbY2hdKTsKLQkJCWVkbWFfd3JpdGViKGZz bF9lZG1hLCBFRE1BX0NFUlJfQ0VSUihjaCksCi0JCQkJZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1B X0NFUlIpOworCQkJZWRtYV93cml0ZWIoZnNsX2VkbWEsIEVETUFfQ0VSUl9DRVJSKGNoKSwgcmVn cy0+Y2Vycik7CiAJCQlmc2xfZWRtYS0+Y2hhbnNbY2hdLnN0YXR1cyA9IERNQV9FUlJPUjsKIAkJ CWZzbF9lZG1hLT5jaGFuc1tjaF0uaWRsZSA9IHRydWU7CiAJCX0KQEAgLTczMCwyNSArMTEyLDYg QEAgc3RhdGljIGlycXJldHVybl90IGZzbF9lZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQg KmRldl9pZCkKIAlyZXR1cm4gZnNsX2VkbWFfZXJyX2hhbmRsZXIoaXJxLCBkZXZfaWQpOwogfQog Ci1zdGF0aWMgdm9pZCBmc2xfZWRtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hh bikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFu KGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNs X2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQotCWlmICh1bmxpa2VseShmc2xfY2hhbi0+cG1f c3RhdGUgIT0gUlVOTklORykpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4t PnZjaGFuLmxvY2ssIGZsYWdzKTsKLQkJLyogY2Fubm90IHN1Ym1pdCBkdWUgdG8gc3VzcGVuZCAq LwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHZjaGFuX2lzc3VlX3BlbmRpbmcoJmZzbF9jaGFuLT52 Y2hhbikgJiYgIWZzbF9jaGFuLT5lZGVzYykKLQkJZnNsX2VkbWFfeGZlcl9kZXNjKGZzbF9jaGFu KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFn cyk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZG1hX2NoYW4gKmZzbF9lZG1hX3hsYXRlKHN0cnVjdCBv Zl9waGFuZGxlX2FyZ3MgKmRtYV9zcGVjLAogCQlzdHJ1Y3Qgb2ZfZG1hICpvZmRtYSkKIHsKQEAg LTc2MSw3ICsxMjQsOCBAQCBzdGF0aWMgc3RydWN0IGRtYV9jaGFuICpmc2xfZWRtYV94bGF0ZShz dHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpkbWFfc3BlYywKIAkJcmV0dXJuIE5VTEw7CiAKIAltdXRl eF9sb2NrKCZmc2xfZWRtYS0+ZnNsX2VkbWFfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZShjaGFuLCBfY2hhbiwgJmZzbF9lZG1hLT5kbWFfZGV2LmNoYW5uZWxzLCBkZXZpY2Vfbm9k ZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwKKwkJCSZmc2xfZWRt YS0+ZG1hX2Rldi5jaGFubmVscywgZGV2aWNlX25vZGUpIHsKIAkJaWYgKGNoYW4tPmNsaWVudF9j b3VudCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGNoYW4tPmNoYW5faWQgLyBjaGFuc19wZXJfbXV4 KSA9PSBkbWFfc3BlYy0+YXJnc1swXSkgewpAQCAtNzc4LDM5ICsxNDIsMTIgQEAgc3RhdGljIHN0 cnVjdCBkbWFfY2hhbiAqZnNsX2VkbWFfeGxhdGUoc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqZG1h X3NwZWMsCiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZmc2xfZWRtYS0+ZnNsX2VkbWFfbXV0ZXgp OwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IGZzbF9lZG1hX2FsbG9jX2NoYW5fcmVz b3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAq ZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCi0JZnNsX2NoYW4tPnRjZF9wb29s ID0gZG1hX3Bvb2xfY3JlYXRlKCJ0Y2RfcG9vbCIsIGNoYW4tPmRldmljZS0+ZGV2LAotCQkJCXNp emVvZihzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkKSwKLQkJCQkzMiwgMCk7Ci0JcmV0dXJuIDA7Ci19 CiAKLXN0YXRpYyB2b2lkIGZzbF9lZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9j aGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9l ZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlMSVNUX0hFQUQoaGVhZCk7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQlm c2xfZWRtYV9kaXNhYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwotCWZzbF9lZG1hX2NoYW5fbXV4KGZz bF9jaGFuLCAwLCBmYWxzZSk7Ci0JZnNsX2NoYW4tPmVkZXNjID0gTlVMTDsKLQl2Y2hhbl9nZXRf YWxsX2Rlc2NyaXB0b3JzKCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKLQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCi0JdmNoYW5fZG1hX2Rl c2NfZnJlZV9saXN0KCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKLQlkbWFfcG9vbF9kZXN0cm95 KGZzbF9jaGFuLT50Y2RfcG9vbCk7Ci0JZnNsX2NoYW4tPnRjZF9wb29sID0gTlVMTDsKKwlyZXR1 cm4gTlVMTDsKIH0KIAotc3RhdGljIGludAotZnNsX2VkbWFfaXJxX2luaXQoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwgc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEpCitzdGF0 aWMgaW50IGZzbF9lZG1hX2lycV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJ CQkgICAgIHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hKQogewogCWludCByZXQ7CiAK QEAgLTg1MiwxNyArMTg5LDYgQEAgZnNsX2VkbWFfaXJxX2luaXQoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiwgc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEKIAlyZXR1cm4gMDsK IH0KIAotc3RhdGljIHZvaWQgZnNsX2VkbWFfaXJxX2V4aXQoCi0JCXN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsIHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hKQotewotCWlmIChm c2xfZWRtYS0+dHhpcnEgPT0gZnNsX2VkbWEtPmVycmlycSkgewotCQlkZXZtX2ZyZWVfaXJxKCZw ZGV2LT5kZXYsIGZzbF9lZG1hLT50eGlycSwgZnNsX2VkbWEpOwotCX0gZWxzZSB7Ci0JCWRldm1f ZnJlZV9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEtPnR4aXJxLCBmc2xfZWRtYSk7Ci0JCWRldm1f ZnJlZV9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEtPmVycmlycSwgZnNsX2VkbWEpOwotCX0KLX0K LQogc3RhdGljIHZvaWQgZnNsX2Rpc2FibGVfY2xvY2tzKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUg KmZzbF9lZG1hLCBpbnQgbnJfY2xvY2tzKQogewogCWludCBpOwpAQCAtODc2LDYgKzIwMiw3IEBA IHN0YXRpYyBpbnQgZnNsX2VkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK IAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IGZz bF9lZG1hX2VuZ2luZSAqZnNsX2VkbWE7CiAJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFu OworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3M7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50 IGxlbiwgY2hhbnM7CiAJaW50IHJldCwgaTsKQEAgLTg5MSw2ICsyMTgsOCBAQCBzdGF0aWMgaW50 IGZzbF9lZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYgKCFmc2xf ZWRtYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlmc2xfZWRtYS0+dmVyc2lvbiA9IHYxOworCiAJ ZnNsX2VkbWEtPm5fY2hhbnMgPSBjaGFuczsKIAltdXRleF9pbml0KCZmc2xfZWRtYS0+ZnNsX2Vk bWFfbXV0ZXgpOwogCkBAIC04OTksNiArMjI4LDkgQEAgc3RhdGljIGludCBmc2xfZWRtYV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChJU19FUlIoZnNsX2VkbWEtPm1l bWJhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihmc2xfZWRtYS0+bWVtYmFzZSk7CiAKKwlmc2xfZWRt YV9zZXR1cF9yZWdzKGZzbF9lZG1hKTsKKwlyZWdzID0gJmZzbF9lZG1hLT5yZWdzOworCiAJZm9y IChpID0gMDsgaSA8IERNQU1VWF9OUjsgaSsrKSB7CiAJCWNoYXIgY2xrbmFtZVszMl07CiAKQEAg LTkzOSwxMSArMjcxLDExIEBAIHN0YXRpYyBpbnQgZnNsX2VkbWFfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKIAkJZnNsX2NoYW4tPnZjaGFuLmRlc2NfZnJlZSA9IGZzbF9lZG1h X2ZyZWVfZGVzYzsKIAkJdmNoYW5faW5pdCgmZnNsX2NoYW4tPnZjaGFuLCAmZnNsX2VkbWEtPmRt YV9kZXYpOwogCi0JCWVkbWFfd3JpdGV3KGZzbF9lZG1hLCAweDAsIGZzbF9lZG1hLT5tZW1iYXNl ICsgRURNQV9UQ0RfQ1NSKGkpKTsKKwkJZWRtYV93cml0ZXcoZnNsX2VkbWEsIDB4MCwgJnJlZ3Mt PnRjZFtpXS5jc3IpOwogCQlmc2xfZWRtYV9jaGFuX211eChmc2xfY2hhbiwgMCwgZmFsc2UpOwog CX0KIAotCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCB+MCwgZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1B X0lOVFIpOworCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCB+MCwgcmVncy0+aW50bCk7CiAJcmV0ID0g ZnNsX2VkbWFfaXJxX2luaXQocGRldiwgZnNsX2VkbWEpOwogCWlmIChyZXQpCiAJCXJldHVybiBy ZXQ7CkBAIC05OTAsMjggKzMyMiwxNiBAQCBzdGF0aWMgaW50IGZzbF9lZG1hX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJfQogCiAJLyogZW5hYmxlIHJvdW5kIHJvYmluIGFy Yml0cmF0aW9uICovCi0JZWRtYV93cml0ZWwoZnNsX2VkbWEsIEVETUFfQ1JfRVJHQSB8IEVETUFf Q1JfRVJDQSwgZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1BX0NSKTsKKwllZG1hX3dyaXRlbChmc2xf ZWRtYSwgRURNQV9DUl9FUkdBIHwgRURNQV9DUl9FUkNBLCByZWdzLT5jcik7CiAKIAlyZXR1cm4g MDsKIH0KIAotc3RhdGljIHZvaWQgZnNsX2VkbWFfY2xlYW51cF92Y2hhbihzdHJ1Y3QgZG1hX2Rl dmljZSAqZG1hZGV2KQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpjaGFuLCAqX2NoYW47Ci0K LQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgX2NoYW4sCi0JCQkJJmRtYWRldi0+Y2hh bm5lbHMsIHZjaGFuLmNoYW4uZGV2aWNlX25vZGUpIHsKLQkJbGlzdF9kZWwoJmNoYW4tPnZjaGFu LmNoYW4uZGV2aWNlX25vZGUpOwotCQl0YXNrbGV0X2tpbGwoJmNoYW4tPnZjaGFuLnRhc2spOwot CX0KLX0KLQogc3RhdGljIGludCBmc2xfZWRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7 CiAJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShwZGV2KTsKIAotCWZzbF9lZG1hX2lycV9leGl0KHBkZXYsIGZzbF9lZG1hKTsKIAlmc2xfZWRt YV9jbGVhbnVwX3ZjaGFuKCZmc2xfZWRtYS0+ZG1hX2Rldik7CiAJb2ZfZG1hX2NvbnRyb2xsZXJf ZnJlZShucCk7CiAJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZmc2xfZWRtYS0+ZG1hX2Rl dik7CkBAIC0xMDQ4LDE4ICszNjgsMTkgQEAgc3RhdGljIGludCBmc2xfZWRtYV9yZXN1bWVfZWFy bHkoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9l ZG1hID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9j aGFuOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmZnNsX2VkbWEtPnJlZ3M7CiAJaW50IGk7 CiAKIAlmb3IgKGkgPSAwOyBpIDwgZnNsX2VkbWEtPm5fY2hhbnM7IGkrKykgewogCQlmc2xfY2hh biA9ICZmc2xfZWRtYS0+Y2hhbnNbaV07CiAJCWZzbF9jaGFuLT5wbV9zdGF0ZSA9IFJVTk5JTkc7 Ci0JCWVkbWFfd3JpdGV3KGZzbF9lZG1hLCAweDAsIGZzbF9lZG1hLT5tZW1iYXNlICsgRURNQV9U Q0RfQ1NSKGkpKTsKKwkJZWRtYV93cml0ZXcoZnNsX2VkbWEsIDB4MCwgJnJlZ3MtPnRjZFtpXS5j c3IpOworCiAJCWlmIChmc2xfY2hhbi0+c2xhdmVfaWQgIT0gMCkKIAkJCWZzbF9lZG1hX2NoYW5f bXV4KGZzbF9jaGFuLCBmc2xfY2hhbi0+c2xhdmVfaWQsIHRydWUpOwogCX0KIAotCWVkbWFfd3Jp dGVsKGZzbF9lZG1hLCBFRE1BX0NSX0VSR0EgfCBFRE1BX0NSX0VSQ0EsCi0JCQlmc2xfZWRtYS0+ bWVtYmFzZSArIEVETUFfQ1IpOworCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCBFRE1BX0NSX0VSR0Eg fCBFRE1BX0NSX0VSQ0EsIHJlZ3MtPmNyKTsKIAogCXJldHVybiAwOwogfQo=